barsa-novin-ray-core 2.0.119 → 2.0.120

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.
@@ -163,14 +163,13 @@ export function getLabelWidth(item) {
163
163
  if (labelCaption === '‌') {
164
164
  labelCaption = '';
165
165
  }
166
- if (item.FieldUi?.Setting?.IsMandatory) {
167
- if (labelCaption.indexOf('*') < 0) {
168
- labelCaption = labelCaption + ' *';
169
- }
170
- }
171
- else {
172
- labelCaption = labelCaption.replace('*', '');
173
- }
166
+ labelCaption = labelCaption + ' * ';
167
+ // if (item.FieldUi?.Setting?.IsMandatory) {
168
+ // if (labelCaption.indexOf('*') < 0) {
169
+ // }
170
+ // } else {
171
+ // labelCaption = labelCaption.replace('*', '');
172
+ // }
174
173
  labelCaption += ':';
175
174
  const labelWidth = measureText(labelCaption);
176
175
  let labelWithPadding = labelWidth + 10;
@@ -888,4 +887,4 @@ export const AudioMimeType = 'audio/*';
888
887
  export function ChangeLayoutInfoCustomUi(layoutInfo, componentUi) {
889
888
  layoutInfo.FieldUi.Setting.CustomUi = componentUi;
890
889
  }
891
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uc3RhbnRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvYmFyc2Etbm92aW4tcmF5LWNvcmUvc3JjL2xpYi9jb25zdGFudHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsb0JBQW9CO0FBQ3BCLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUN2RCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFleEQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLGlCQUFpQixFQUFlLGlCQUFpQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDdEcsT0FBTyxLQUFLLE1BQU0sTUFBTSxVQUFVLENBQUM7QUFJbkMsTUFBTSxDQUFOLElBQVksb0JBS1g7QUFMRCxXQUFZLG9CQUFvQjtJQUM1QixxRkFBbUIsQ0FBQTtJQUNuQixtRkFBa0IsQ0FBQTtJQUNsQixtRkFBa0IsQ0FBQTtJQUNsQiw2RUFBZSxDQUFBO0FBQ25CLENBQUMsRUFMVyxvQkFBb0IsS0FBcEIsb0JBQW9CLFFBSy9CO0FBQ0QsTUFBTSxVQUFVLGVBQWUsQ0FDM0IsZUFBcUMsRUFDckMsT0FBMkIsRUFDM0IsTUFBOEIsRUFDOUIsU0FBb0I7SUFFcEIsSUFBSSxRQUFRLEdBQUcsRUFBRSxDQUFDO0lBQ2xCLFFBQVEsZUFBZSxFQUFFLENBQUM7UUFDdEIsS0FBSyxvQkFBb0IsQ0FBQyxlQUFlO1lBQ3JDLFFBQVEsR0FBRyxlQUFlLENBQUM7WUFDM0IsTUFBTTtRQUNWLEtBQUssb0JBQW9CLENBQUMsY0FBYztZQUNwQyxRQUFRLEdBQUcsb0JBQW9CLENBQUM7WUFDaEMsTUFBTTtRQUNWLEtBQUssb0JBQW9CLENBQUMsY0FBYztZQUNwQyxRQUFRLEdBQUcsUUFBUSxDQUFDO1lBQ3BCLE1BQU07UUFDVixLQUFLLG9CQUFvQixDQUFDLFdBQVc7WUFDakMsUUFBUSxHQUFHLGNBQWMsQ0FBQztZQUMxQixNQUFNO0lBQ2Qs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VSx3QkFBd0IsQ0FBQyxVQUF5QixFQUFFLFdBQXNCO0lBQ3RGLFVBQVUsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLFFBQVEsR0FBRyxXQUFXLENBQUM7QUFDdEQsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlICovXG5pbXBvcnQgeyBfaXNOdW1iZXJWYWx1ZSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9jb2VyY2lvbic7XG5pbXBvcnQgeyBCYXJzYUFwaSB9IGZyb20gJy4vYWJzdHJhY3QtY2xhc3Nlcy9iYXJzYS1hcGknO1xuaW1wb3J0IHtcbiAgICBBYmJyZXZhdGlvbkRldmljZVNpemUsXG4gICAgQ29sU2V0dGluZyxcbiAgICBFanJheU9sZ28sXG4gICAgRm9ybVNldHRpbmcsXG4gICAgR2VuZXJhbENvbnRyb2xJbmZvTW9kZWwsXG4gICAgR3JpZFNldHRpbmcsXG4gICAgTGF5b3V0U2V0dGluZyxcbiAgICBNZW51SXRlbSxcbiAgICBNZXRhb2JqZWN0RGF0YU1vZGVsLFxuICAgIFJlcG9ydFZpZXdDb2x1bW4sXG4gICAgU29ydFNldHRpbmcsXG4gICAgVHJlZU5vZGVPYmpcbn0gZnJvbSAnLi9hYnN0cmFjdC1jbGFzc2VzL21vZGVscyc7XG5pbXBvcnQgeyBEYXRlSGlqcmlTZXJ2aWNlLCBEYXRlTWlsYWRpU2VydmljZSwgRGF0ZVNlcnZpY2UsIERhdGVTaGFtc2lTZXJ2aWNlIH0gZnJvbSAnLi9kYXRlLXNlcnZpY2VzJztcbmltcG9ydCAqIGFzIERldmljZSBmcm9tICcuL2RldmljZSc7XG5pbXBvcnQgeyBMb2dTZXJ2aWNlIH0gZnJvbSAnLi9zZXJ2aWNlcy9sb2cuc2VydmljZSc7XG5pbXBvcnQgeyBSZW5kZXJlcjIgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuZXhwb3J0IGVudW0gVGFibGVIZWFkZXJXaWR0aE1vZGUge1xuICAgIEZpdFRvUm93Q29udGVudCA9IDEsXG4gICAgRml0VG9Db250YWluZXIgPSAyLFxuICAgIEZyZWVDb2x1bW5TaXplID0gMyxcbiAgICBDb2x1bW5XaWR0aCA9IDRcbn1cbmV4cG9ydCBmdW5jdGlvbiBzZXRUYWJsZVRoV2lkdGgoXG4gICAgdGFibGVIZWFkZXJNb2RlOiBUYWJsZUhlYWRlcldpZHRoTW9kZSxcbiAgICBjb2x1bW5zOiBSZXBvcnRWaWV3Q29sdW1uW10sXG4gICAgdGhMaXN0OiBIVE1MVGFibGVDZWxsRWxlbWVudFtdLFxuICAgIHJlbmRlcmVyMjogUmVuZGVyZXIyXG4pOiB2b2lkIHtcbiAgICBsZXQgcHJvcE5hbWUgPSAnJztcbiAgICBzd2l0Y2ggKHRhYmxlSGVhZGVyTW9kZSkge1xuICAgICAgICBjYXNlIFRhYmxlSGVhZGVyV2lkdGhNb2RlLkZpdFRvUm93Q29udGVudDpcbiAgICAgICAgICAgIHByb3BOYW1lID0gJyRGaXRUb0NvbnRlbnQnO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgVGFibGVIZWFkZXJXaWR0aE1vZGUuRml0VG9Db250YWluZXI6XG4gICAgICAgICAgICBwcm9wTmFtZSA9ICckRml0Q29udGFpbmVyV2lkdGgnO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgVGFibGVIZWFkZXJXaWR0aE1vZGUuRnJlZUNvbHVtblNpemU6XG4gICAgICAgICAgICBwcm9wTmFtZSA9ICckV2lkdGgnO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgVGFibGVIZWFkZXJXaWR0aE1vZGUuQ29sdW1uV2lkdGg6XG4gICAgICAgICAgICBwcm9wTmFtZSA9ICckQ29sdW1uV2lkdGgnO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgfVxuICAgIHRoTGlzdC5mb3JFYWNoKChjLCBpKSA9PiB7XG4gICAgICAgIGNvbnN0IHd4ID0gX2NhbGNXaWR0aE9mVGgoY29sdW1uc1tpXSwgaSwgcHJvcE5hbWUsIHRoTGlzdCk7XG4gICAgICAgIHd4ICYmIHJlbmRlcmVyMi5zZXRTdHlsZShjLCAnd2lkdGgnLCB3eCk7XG4gICAgfSk7XG59XG5mdW5jdGlvbiBfY2FsY1dpZHRoT2ZUaChjb2x1bW46IFJlcG9ydFZpZXdDb2x1bW4sIGk6IG51bWJlciwgcHJvcE5hbWU6IHN0cmluZywgdGhMaXN0KTogc3RyaW5nIHtcbiAgICBpZiAoIWNvbHVtbikge1xuICAgICAgICByZXR1cm4gJyc7XG4gICAgfVxuICAgIGlmIChjb2x1bW4uJElzSW1hZ2VPcmljb24gJiYgaSA8IHRoTGlzdC5sZW5ndGggLSAxKSB7XG4gICAgICAgIGNvbnN0IGZpZWxkVHlwZUlkID0gK2NvbHVtbi5GaWVsZFR5cGVJZDtcbiAgICAgICAgaWYgKGZpZWxkVHlwZUlkID09PSA2IHx8IGZpZWxkVHlwZUlkID09PSA1IHx8IGZpZWxkVHlwZUlkID09PSA0Mikge1xuICAgICAgICAgICAgcmV0dXJuICcyNHB4JztcbiAgICAgICAgfVxuICAgICAgICBkZWJ1Z2dlcjtcbiAgICB9XG4gICAgcmV0dXJuIGNvbHVtbi4kSXNJbWFnZU9yaWNvbiAmJiBpIDwgdGhMaXN0Lmxlbmd0aCAtIDEgPyAnNDJweCcgOiBjb2x1bW5bcHJvcE5hbWVdO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGNhbGN1bGF0ZUNvbHVtbkNvbnRlbnQoY29sdW1uczogUmVwb3J0Vmlld0NvbHVtbltdLCBtb0RhdGFMaXN0OiBNZXRhb2JqZWN0RGF0YU1vZGVsW10pOiB2b2lkIHtcbiAgICBjb2x1bW5zLmZvckVhY2goKGNvbHVtbikgPT4ge1xuICAgICAgICBzZXRDb2x1bW5XaWR0aEJ5TWF4TW9Db250ZW50V2lkdGgobW9EYXRhTGlzdCwgY29sdW1uKTtcbiAgICB9KTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBjYWxjdWxhdGVDb2x1bW5XaWR0aChcbiAgICBjb250YWluZXI6IEhUTUxFbGVtZW50LFxuICAgIGNvbHVtbnM6IFJlcG9ydFZpZXdDb2x1bW5bXSxcbiAgICBtb0RhdGFMaXN0OiBNZXRhb2JqZWN0RGF0YU1vZGVsW10sXG4gICAgZGlzYWJsZUNvbnRleHRNZW51T3ZlcmZsb3c6IGJvb2xlYW4sXG4gICAgY29udGV4dE1lbnVJdGVtczogTWVudUl0ZW1bXVxuKTogeyBjb2x1bW5zOiBSZXBvcnRWaWV3Q29sdW1uW107IGNvbnRleHRNZW51V2lkdGg6IG51bWJlciB9IHtcbiAgICBjb2x1bW5zXG4gICAgICAgIC5maWx0ZXIoKGMpID0+ICFjLkhpZGRlbilcbiAgICAgICAgLmZvckVhY2goKGNvbHVtbikgPT4ge1xuICAgICAgICAgICAgc2V0Q29sdW1uQ2FwdGlvbldpZHRoKGNvbHVtbik7XG4gICAgICAgIH0pO1xuICAgIGNvbnN0IGNvbnRleHRNZW51V2lkdGggPSBjYWxjQ29udGV4dE1lbnVXaWR0aChjb250ZXh0TWVudUl0ZW1zLCBkaXNhYmxlQ29udGV4dE1lbnVPdmVyZmxvdyk7XG4gICAgcmV0dXJuIHsgY29sdW1uczogWy4uLmNvbHVtbnNdLCBjb250ZXh0TWVudVdpZHRoIH07XG59XG5mdW5jdGlvbiBzZXRDb2x1bW5DYXB0aW9uV2lkdGgoY29sdW1uOiBSZXBvcnRWaWV3Q29sdW1uKTogbnVtYmVyIHtcbiAgICBpZiAoY29sdW1uLiRDb2x1bW5XaWR0aE51bSkge1xuICAgICAgICByZXR1cm4gY29sdW1uLiRDb2x1bW5XaWR0aE51bTtcbiAgICB9XG4gICAgY29uc3QgY29sQ2FwdGlvbldpZHRoID0gbWVhc3VyZVRleHQoY29sdW1uLkFsaWFzKSArIDE2ICsgMTA7XG4gICAgY29sdW1uLiRDb2x1bW5XaWR0aE51bSA9IE1hdGguY2VpbChjb2xDYXB0aW9uV2lkdGgpO1xuICAgIGNvbHVtbi4kQ29sdW1uV2lkdGggPSBgJHtjb2x1bW4uJENvbHVtbldpZHRoTnVtfXB4YDtcbiAgICByZXR1cm4gY29sQ2FwdGlvbldpZHRoO1xufVxuZXhwb3J0IGZ1bmN0aW9uIHNldENvbHVtbldpZHRoQnlNYXhNb0NvbnRlbnRXaWR0aChtb0RhdGFMaXN0OiBNZXRhb2JqZWN0RGF0YU1vZGVsW10sIGNvbHVtbjogUmVwb3J0Vmlld0NvbHVtbikge1xuICAgIGNvbnN0IHdpZHRoID0gY2FsY3VsYXRlTW9EYXRhTGlzdENvbnRlbnRXaWR0aEJ5Q29sdW1uTmFtZShtb0RhdGFMaXN0LCBjb2x1bW4pO1xuICAgIGNvbHVtbi4kQ29udGVudFdpZHRoID0gYCR7TWF0aC5jZWlsKHdpZHRoKX1weGA7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjYWxjdWxhdGVNb0RhdGFMaXN0Q29udGVudFdpZHRoQnlDb2x1bW5OYW1lKFxuICAgIG1vRGF0YUxpc3Q6IE1ldGFvYmplY3REYXRhTW9kZWxbXSxcbiAgICBjb2x1bW46IFJlcG9ydFZpZXdDb2x1bW5cbik6IG51bWJlciB7XG4gICAgbGV0IG1heFdpZHRoID0gMDtcbiAgICBtb0RhdGFMaXN0LmZvckVhY2goKGMsIGluZGV4KSA9PiB7XG4gICAgICAgIGNvbnN0IGNhcHRpb24gPSBnZXRDb2x1bW5WYWx1ZU9mTW9EYXRhTGlzdChjb2x1bW4uTmFtZSwgYywgdW5kZWZpbmVkLCB0cnVlKTtcbiAgICAgICAgY29uc3QgY2FwdGlvbldpZHRoID0gbWVhc3VyZVRleHQoY2FwdGlvbikgKyAxNjtcbiAgICAgICAgaWYgKG1heFdpZHRoIDwgY2FwdGlvbldpZHRoKSB7XG4gICAgICAgICAgICBtYXhXaWR0aCA9IGNhcHRpb25XaWR0aDtcbiAgICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBNYXRoLmNlaWwobWF4V2lkdGgpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGNhbGN1bGF0ZUZyZWVDb2x1bW5TaXplKGNvbHVtbnM6IFJlcG9ydFZpZXdDb2x1bW5bXSk6IFJlcG9ydFZpZXdDb2x1bW5bXSB7XG4gICAgbGV0IGFsbENvbFdpZHRoID0gMDtcbiAgICBjb25zdCB2aXNpYmxlQ29sdW1ucyA9IGNvbHVtbnMuZmlsdGVyKChjKSA9PiAhYy5IaWRkZW4pO1xuXG4gICAgdmlzaWJsZUNvbHVtbnMuZm9yRWFjaCgoY29sLCBpbmRleCkgPT4ge1xuICAgICAgICBjb25zdCB4ID0gc2V0Q29sdW1uQ2FwdGlvbldpZHRoKGNvbCk7XG4gICAgICAgIGNvbnN0IHcgPSBjb2wuV2lkdGggJiYgY29sLldpZHRoID4gMCA/IGNvbC5XaWR0aCA6IHg7XG4gICAgICAgIGFsbENvbFdpZHRoICs9IHc7XG4gICAgICAgIGNvbC4kV2lkdGggPSBpbmRleCA9PT0gdmlzaWJsZUNvbHVtbnMubGVuZ3RoIC0gMSA/ICcxMDAlJyA6IGAke3d9cHhgO1xuICAgIH0pO1xuICAgIHJldHVybiBbLi4uY29sdW1uc107XG59XG5leHBvcnQgZnVuY3Rpb24gY2FsY3VsYXRlQ29sdW1uV2lkdGhGaXRUb0NvbnRhaW5lcihcbiAgICBjb250YWluZXI6IEhUTUxFbGVtZW50LFxuICAgIGNhblZpZXc6IGJvb2xlYW4sXG4gICAgZGlzYWJsZUNvbnRleHRNZW51T3ZlcmZsb3c6IGJvb2xlYW4sXG4gICAgY29udGV4dE1lbnVJdGVtczogTWVudUl0ZW1bXSxcbiAgICBjb2x1bW5zOiBSZXBvcnRWaWV3Q29sdW1uW11cbik6IHsgY29sdW1uczogUmVwb3J0Vmlld0NvbHVtbltdOyBjb250ZXh0TWVudVdpZHRoOiBudW1iZXIgfSB7XG4gICAgbGV0IGhhc0RlZmluZWRXaWR0aCA9IHRydWU7XG4gICAgbGV0IGNvbnRhaW5lcldpZHRoID0gY29sdW1ucy5tYXAoKGMpID0+IGMuV2lkdGgpLnJlZHVjZSgoYSwgYikgPT4gYSArIGIsIDApO1xuICAgIGlmIChjb250YWluZXJXaWR0aCA9PT0gMCkge1xuICAgICAgICBjb250YWluZXJXaWR0aCA9IGNvbnRhaW5lci5jbGllbnRXaWR0aDtcbiAgICAgICAgaGFzRGVmaW5lZFdpZHRoID0gZmFsc2U7XG4gICAgfVxuICAgIGxldCBhbGxDb2xXaWR0aCA9IDA7XG4gICAgY29uc3QgaXNNb2JpbGUgPSBnZXREZXZpY2VJc01vYmlsZSgpO1xuICAgIGxldCByZW1haW5QZXJjZW50ID0gMDtcbiAgICBjb25zdCBsQ29scyA9IGNvbHVtbnMuZmlsdGVyKChjLCBpKSA9PiAhYy5IaWRkZW4gJiYgIShpID09PSAwICYmIGMuRmllbGRUeXBlSWQgPT09IDQxKSk7XG4gICAgbENvbHMuZm9yRWFjaCgoY29sLCBpbmRleCkgPT4ge1xuICAgICAgICAvLyDYp9qv2LEg2YHbjNmE2K8g2KfYsiDZhtmI2Lkg2LHZhtqvINmG2KjZiNivINmIINiz2KrZiNmGINin2YjZhCDZh9mFINmG2KjZiNivXG4gICAgICAgIGNvbnN0IHggPSBzZXRDb2x1bW5DYXB0aW9uV2lkdGgoY29sKTtcbiAgICAgICAgY29uc3QgdyA9IGNvbC5XaWR0aCAmJiBjb2wuV2lkdGggPiAwID8gY29sLldpZHRoIDogeDtcbiAgICAgICAgYWxsQ29sV2lkdGggKz0gdztcbiAgICAgICAgY29uc3QgcGVyY2VudCA9ICh3IC8gY29udGFpbmVyV2lkdGgpICogMTAwO1xuICAgICAgICBjb2wuJEZpdENvbnRhaW5lcldpZHRoID0gaXNNb2JpbGUgfHwgY29sLldpZHRoID09PSAwID8gJzEwMCUnIDogYCR7cGVyY2VudH0lYDtcblxuICAgICAgICBpZiAoaW5kZXggPT09IGxDb2xzLmxlbmd0aCAtIDEgJiYgIWhhc0RlZmluZWRXaWR0aCkge1xuICAgICAgICAgICAgY29sLiRGaXRDb250YWluZXJXaWR0aCA9IDEwMCAtIHJlbWFpblBlcmNlbnQgKyAnJSc7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZW1haW5QZXJjZW50ICs9IHBlcmNlbnQ7XG4gICAgICAgIH1cbiAgICB9KTtcbiAgICAvLyBjb25zdCBjYW5WaWV3QnV0dG9uV2lkdGggPSBjYW5WaWV3ID8gNDAgOiAwO1xuICAgIC8vIGNvbnN0IHNlbGVjdGlvbldpZHRoID0gMzA7XG5cbiAgICBjb25zdCBjb250ZXh0TWVudVdpZHRoID0gY2FsY0NvbnRleHRNZW51V2lkdGgoY29udGV4dE1lbnVJdGVtcywgZGlzYWJsZUNvbnRleHRNZW51T3ZlcmZsb3cpO1xuICAgIC8vIGNvbnN0IGNvbnRhaW5lcldpZHRoQWxsQ29sdW1ucyA9IGNvbnRhaW5lcldpZHRoIC0gc2VsZWN0aW9uV2lkdGggLSBjYW5WaWV3QnV0dG9uV2lkdGggLSBjb250ZXh0TWVudVdpZHRoIC0gMTI7XG4gICAgLy8gYWxsQ29sV2lkdGggKz0gY29udGFpbmVyV2lkdGhBbGxDb2x1bW5zIC0gYWxsQ29sV2lkdGg7Ly8g2YXYrdin2LPYqNmHINii2K7YsduM2YYg2LPYqtmI2YYu2obZiNmGIHdpZHRoINmF2LTYrti124wg2YbYr9in2LHYr1xuICAgIC8vIGNvbHVtbnNcbiAgICAvLyAgICAgLmZpbHRlcigoYykgPT4gIWMuSGlkZGVuKVxuICAgIC8vICAgICAuZm9yRWFjaCgoY29sKSA9PiB7XG4gICAgLy8gICAgICAgICBjb25zdCBuZXdXaWR0aCA9IE1hdGguY2VpbCgoY29udGFpbmVyV2lkdGhBbGxDb2x1bW5zICogY29sLldpZHRoKSAvIGFsbENvbFdpZHRoKTtcbiAgICAvLyAgICAgICAgIGNvbC5XaWR0aCA9IG5ld1dpZHRoO1xuICAgIC8vICAgICAgICAgY29sLiRGaXRDb250YWluZXJXaWR0aCA9IGAke25ld1dpZHRofXB4YDtcbiAgICAvLyAgICAgfSk7XG4gICAgcmV0dXJuIHsgY29sdW1uczogWy4uLmNvbHVtbnNdLCBjb250ZXh0TWVudVdpZHRoIH07XG59XG5leHBvcnQgZnVuY3Rpb24gY2FsY0NvbnRleHRNZW51V2lkdGgoY29udGV4dE1lbnVJdGVtczogTWVudUl0ZW1bXSwgZGlzYWJsZUNvbnRleHRNZW51T3ZlcmZsb3c6IGJvb2xlYW4pOiBudW1iZXIge1xuICAgIGxldCBjb250ZXh0TWVudVdpZHRoID0gY29udGV4dE1lbnVJdGVtcy5sZW5ndGggPiAxID8gNDAgOiAwO1xuICAgIGNvbnN0IGJ0blBhZGRpbmcgPSAxNCArIDIgKyAxMDsgLy8gcGFkZGluZyArIGJvcmRlciArIGlmIHRleHQgaXMgb3ZlcmZsb3dlZCB0aGVuIGFkZCA1IHBpeGVsLnNvIHdlIGFsd2F5cyA1IHB4IHRvIGl0LlxuICAgIGNvbnN0IHRkUGFkZGluZyA9IDE1ICsgMTsgLy8gcGFkZGluZyArIGJvcmRlclxuICAgIGNvbnN0IGJ1dHRvbkljb25XaWR0aCA9IDE2ICsgNjsgLy8gc2l6ZSArIG1hcmdpblxuICAgIGlmIChkaXNhYmxlQ29udGV4dE1lbnVPdmVyZmxvdyB8fCBjb250ZXh0TWVudUl0ZW1zLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICBjb250ZXh0TWVudVdpZHRoID0gMDtcbiAgICAgICAgY29udGV4dE1lbnVJdGVtcy5mb3JFYWNoKChjKSA9PiB7XG4gICAgICAgICAgICBjb250ZXh0TWVudVdpZHRoICs9IG1lYXN1cmVUZXh0KGMudGV4dCkgKyBidG5QYWRkaW5nICsgdGRQYWRkaW5nO1xuICAgICAgICAgICAgY29udGV4dE1lbnVXaWR0aCArPSBjLmljb24gPyBidXR0b25JY29uV2lkdGggOiAwO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIGNvbnRleHRNZW51V2lkdGg7XG59XG5leHBvcnQgZnVuY3Rpb24gaXNJbkxvY2FsTW9kZSgpOiBib29sZWFuIHtcbiAgICBjb25zdCBvZmZsaW5jZUFjdGl2ZSA9IEJhcnNhQXBpLkNvbW1vbi5VdGlsLlRyeUdldFZhbHVlKEJhcnNhQXBpLk9mZmxpbmUsICdTZXR0aW5ncy5Jc0FjdGl2ZScsIGZhbHNlKTtcbiAgICBjb25zdCBvZmZsaW5lVHJ1ZSA9IEJhcnNhQXBpLkNvbW1vbi5VdGlsLlRyeUdldFZhbHVlKEJhcnNhQXBpLk9mZmxpbmUsICdTZXR0aW5ncy5Jc09mZmxpbmUnLCBmYWxzZSk7XG4gICAgcmV0dXJuIG9mZmxpbmNlQWN0aXZlICYmIG9mZmxpbmVUcnVlO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGdldExhYmVsV2lkdGgoaXRlbTogYW55KTogbnVtYmVyIHwgdW5kZWZpbmVkIHtcbiAgICBjb25zdCBmaWVsZFh0eXBlID0gaXRlbS5GaWVsZFVpPy5vcmlnaW5hbFh0eXBlO1xuICAgIGlmIChcbiAgICAgICAgZmllbGRYdHlwZSA9PT0gJ1VpLkJ1dHRvbicgfHxcbiAgICAgICAgZmllbGRYdHlwZSA9PT0gJ1VpLkNoZWNrQm94JyB8fFxuICAgICAgICAhaXRlbS5UZXh0VmlzaWJsZSB8fFxuICAgICAgICBpdGVtLkNhcHRpb25TZXR0aW5nPy5BbGlnbk1vZGUgPT09ICdBdXRvU2l6ZSdcbiAgICApIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBsZXQgbGFiZWxDYXB0aW9uID0gaXRlbS5DYXB0aW9uO1xuICAgIGlmIChsYWJlbENhcHRpb24gPT09ICcmenduajsnKSB7XG4gICAgICAgIGxhYmVsQ2FwdGlvbiA9ICcnO1xuICAgIH1cbiAgICBpZiAoaXRlbS5GaWVsZFVpPy5TZXR0aW5nPy5Jc01hbmRhdG9yeSkge1xuICAgICAgICBpZiAobGFiZWxDYXB0aW9uLmluZGV4T2YoJyonKSA8IDApIHtcbiAgICAgICAgICAgIGxhYmVsQ2FwdGlvbiA9IGxhYmVsQ2FwdGlvbiArICcgKic7XG4gICAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgICBsYWJlbENhcHRpb24gPSBsYWJlbENhcHRpb24ucmVwbGFjZSgnKicsICcnKTtcbiAgICB9XG4gICAgbGFiZWxDYXB0aW9uICs9ICc6JztcbiAgICBjb25zdCBsYWJlbFdpZHRoID0gbWVhc3VyZVRleHQobGFiZWxDYXB0aW9uKTtcbiAgICBsZXQgbGFiZWxXaXRoUGFkZGluZyA9IGxhYmVsV2lkdGggKyAxMDtcbiAgICBpZiAoaXRlbS5GaWVsZFVpPy5TZXR0aW5nPy5GaWVsZEljb24pIHtcbiAgICAgICAgbGFiZWxXaXRoUGFkZGluZyArPSAyNDtcbiAgICB9XG4gICAgaWYgKGl0ZW0uRmllbGRVaT8uU2V0dGluZz8uSGVscERlc2NyaXB0aW9uKSB7XG4gICAgICAgIGxhYmVsV2l0aFBhZGRpbmcgKz0gMjQ7XG4gICAgfVxuXG4gICAgY29uc3QgY29udHJvbFdpZHRoID0gTWF0aC5jZWlsKGxhYmVsV2l0aFBhZGRpbmcpO1xuICAgIHJldHVybiBjb250cm9sV2lkdGg7XG59XG5leHBvcnQgZnVuY3Rpb24gZ2V0Q29sdW1uVmFsdWVPZk1vRGF0YUxpc3QoXG4gICAgbmFtZTogc3RyaW5nLFxuICAgIG1vOiBNZXRhb2JqZWN0RGF0YU1vZGVsLFxuICAgIENvbHVtbnM/OiB7IFtrZXk6IHN0cmluZ106IGFueTsgTmFtZTogc3RyaW5nOyBDYXB0aW9uOiBzdHJpbmcgfVtdLFxuICAgIGNhcHRpb24/OiBib29sZWFuXG4pOiBhbnkge1xuICAgIGxldCBmaWVsZE5hbWUgPSBDb2x1bW5zID8gQ29sdW1ucy5maW5kKChjKSA9PiBjLk5hbWUgPT09IG5hbWUgfHwgYy5BbGlhcyA9PT0gbmFtZSk/Lk5hbWUgOiBuYW1lO1xuICAgIGlmICghZmllbGROYW1lKSB7XG4gICAgICAgIGZpZWxkTmFtZSA9IG5hbWU7XG4gICAgfVxuICAgIGxldCB2YWwgPSBmaWVsZE5hbWUgPyBtb1tmaWVsZE5hbWVdIDogdW5kZWZpbmVkO1xuICAgIGlmIChjYXB0aW9uKSB7XG4gICAgICAgIGxldCBjYXB0aW9uVmFsID0gZmllbGROYW1lID8gbW9bZmllbGROYW1lXT8uJENhcHRpb24gOiB1bmRlZmluZWQ7XG4gICAgICAgIGlmICh0eXBlb2YgY2FwdGlvblZhbCA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIGNhcHRpb25WYWwgPSBtb1tmaWVsZE5hbWUgKyAnJENhcHRpb24nXTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZW9mIGNhcHRpb25WYWwgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICBjYXB0aW9uVmFsID0gdmFsO1xuICAgICAgICB9XG4gICAgICAgIHZhbCA9IGNhcHRpb25WYWw7XG4gICAgfVxuICAgIHJldHVybiB2YWw7XG59XG5leHBvcnQgZnVuY3Rpb24gdGhyb3dJZkFscmVhZHlMb2FkZWQocGFyZW50TW9kdWxlOiBhbnksIG1vZHVsZU5hbWU6IHN0cmluZyk6IHZvaWQge1xuICAgIGlmIChwYXJlbnRNb2R1bGUpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGAke21vZHVsZU5hbWV9IGhhcyBhbHJlYWR5IGJlZW4gbG9hZGVkLiBJbXBvcnQgJHttb2R1bGVOYW1lfSBpbiB0aGUgQXBwTW9kdWxlIG9ubHkuYCk7XG4gICAgfVxufVxuY29uc3QgbWVhc3VyZVRleHRWYWx1ZXM6IFJlY29yZDxzdHJpbmcsIG51bWJlcj4gPSB7fTtcbmV4cG9ydCBmdW5jdGlvbiBtZWFzdXJlVGV4dCh0ZXh0OiBzdHJpbmcsIGZvbnRTaXplPzogc3RyaW5nKTogbnVtYmVyIHtcbiAgICBpZiAobWVhc3VyZVRleHRWYWx1ZXNbdGV4dF0pIHtcbiAgICAgICAgcmV0dXJuIG1lYXN1cmVUZXh0VmFsdWVzW3RleHRdO1xuICAgIH1cblxuICAgIGNvbnN0IG1lYXN1cmVUZXh0RG9tID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21lYXN1cmVUZXh0JykgYXMgSFRNTENhbnZhc0VsZW1lbnQ7XG4gICAgaWYgKCFtZWFzdXJlVGV4dERvbSkge1xuICAgICAgICByZXR1cm4gLTE7XG4gICAgfVxuXG4gICAgY29uc3QgY3R4ID0gbWVhc3VyZVRleHREb20uZ2V0Q29udGV4dCgnMmQnKSBhcyBhbnk7XG4gICAgZm9udFNpemUgPSBmb250U2l6ZSA/IGZvbnRTaXplIDogJzAuODg1cmVtJztcbiAgICBjdHguZm9udCA9IGBub3JtYWwgJHtmb250U2l6ZX0gSVJBTllla2FuRGlnaXRzYDtcbiAgICBjb25zdCB4ID0gY3R4Lm1lYXN1cmVUZXh0KHRleHQpLndpZHRoO1xuICAgIG1lYXN1cmVUZXh0VmFsdWVzW3RleHRdID0geDtcbiAgICByZXR1cm4geDtcbn1cbmV4cG9ydCBmdW5jdGlvbiBnZW5yYXRlSW5saW5lTW9JZCgpIHtcbiAgICByZXR1cm4gKEJhcnNhQXBpLmlkR2VuZXJhdG9yLS0pLnRvU3RyaW5nKCk7XG59XG5leHBvcnQgZnVuY3Rpb24gZW51bVZhbHVlVG9TdHJpbmdTaXplKHZhbHVlOiBzdHJpbmcsIGRlZmF1bHRWYWx1ZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBzd2l0Y2ggKHZhbHVlKSB7XG4gICAgICAgIGNhc2UgJzEnOlxuICAgICAgICAgICAgcmV0dXJuICdzJztcbiAgICAgICAgY2FzZSAnMic6XG4gICAgICAgICAgICByZXR1cm4gJ20nO1xuICAgICAgICBjYXNlICczJzpcbiAgICAgICAgICAgIHJldHVybiAnbCc7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICByZXR1cm4gZGVmYXVsdFZhbHVlO1xuICAgIH1cbn1cbmV4cG9ydCBmdW5jdGlvbiBleGVjdXRlVWx2Q29tbWFuZEhhbmRsZXIoYnV0dG9uLCBvcHRpb25zPyk6IHZvaWQge1xuICAgIGlmIChidXR0b24uQ29tbWFuZCAmJiBidXR0b24uQ29tbWFuZC5IYW5kbGVyKSB7XG4gICAgICAgIGJ1dHRvbi5Db21tYW5kLkhhbmRsZXIoYnV0dG9uLCBvcHRpb25zKTtcbiAgICB9IGVsc2UgaWYgKGJ1dHRvbi5oYW5kbGVyKSB7XG4gICAgICAgIGJ1dHRvbi5oYW5kbGVyLmJpbmQoYnV0dG9uLnNjb3BlKShidXR0b24sIG9wdGlvbnMpO1xuICAgIH1cbn1cbmV4cG9ydCBmdW5jdGlvbiBnZXRVbmlxdWVJZChwYXJ0czogbnVtYmVyKTogc3RyaW5nIHtcbiAgICBjb25zdCBzdHJpbmdBcnI6IHN0cmluZ1tdID0gW107XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwYXJ0czsgaSsrKSB7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1iaXR3aXNlXG4gICAgICAgIGNvbnN0IFM0ID0gKCgoMSArIE1hdGgucmFuZG9tKCkpICogMHgxMDAwMCkgfCAwKS50b1N0cmluZygxNik7XG4gICAgICAgIGNvbnN0IFM0Xzogc3RyaW5nID0gUzQubGVuZ3RoID4gMCA/IFM0LnN1YnN0cmluZygxKSA6ICcnO1xuICAgICAgICBzdHJpbmdBcnIucHVzaChTNF8pO1xuICAgIH1cbiAgICByZXR1cm4gc3RyaW5nQXJyLmpvaW4oJy0nKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldERhdGVTZXJ2aWNlKGxvZ1NlcnZpY2U6IExvZ1NlcnZpY2UsIGN1bHR1cmU/KTogRGF0ZVNlcnZpY2Uge1xuICAgIGNvbnN0IGRlZmF1bHRDdWx0dXJlID0gY3VsdHVyZSA/PyBCYXJzYUFwaS5Mb2dpbkZvcm1EYXRhLkN1bHR1cmU7XG4gICAgc3dpdGNoIChkZWZhdWx0Q3VsdHVyZSkge1xuICAgICAgICBjYXNlICdmYS1JUic6XG4gICAgICAgICAgICByZXR1cm4gbmV3IERhdGVTaGFtc2lTZXJ2aWNlKGxvZ1NlcnZpY2UpO1xuICAgICAgICBjYXNlICdhci1BRSc6XG4gICAgICAgICAgICByZXR1cm4gbmV3IERhdGVIaWpyaVNlcnZpY2UobG9nU2VydmljZSk7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICByZXR1cm4gbmV3IERhdGVNaWxhZGlTZXJ2aWNlKGxvZ1NlcnZpY2UpO1xuICAgIH1cbn1cbmV4cG9ydCBmdW5jdGlvbiBnZXRBbGxJdGVtc1BlckNoaWxkcmVuKFxuICAgIGl0ZW06IFRyZWVOb2RlT2JqLFxuICAgIGxldmVsOiBudW1iZXIsXG4gICAgYXJyYXk6IE1ldGFvYmplY3REYXRhTW9kZWxbXSxcbiAgICBwYXJlbnROb2RlOiBUcmVlTm9kZU9iaixcbiAgICBhdXRvT3BlbkxldmVsczogbnVtYmVyXG4pOiBhbnkge1xuICAgIGxldCBuZXdJdGVtOiBhbnkgPSBpdGVtO1xuICAgIGlmIChsZXZlbCA+IDApIHtcbiAgICAgICAgaXRlbS5wYXJlbnROb2RlID0gcGFyZW50Tm9kZTtcbiAgICAgICAgaXRlbS5sZXZlbCA9IGxldmVsO1xuICAgICAgICBpdGVtLmlzRXhwYW5kID0gaXRlbS5pc0V4cGFuZCA/PyBhdXRvT3BlbkxldmVscyA+IGxldmVsO1xuICAgICAgICBpdGVtLnZpc2liaWxpdHkgPSBpdGVtLnBhcmVudE5vZGUuaXNFeHBhbmQ7XG4gICAgICAgIGFycmF5LnB1c2gobmV3SXRlbSk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgbmV3SXRlbSA9IGl0ZW07XG4gICAgICAgIG5ld0l0ZW0uaXNFeHBhbmQgPSB0cnVlO1xuICAgIH1cblxuICAgIGlmIChpdGVtLmNoaWxkcmVuKSB7XG4gICAgICAgIGl0ZW0uY2hpbGRyZW4uZm9yRWFjaCgoY2hpbGQpID0+IHNldE9uZURlcHRoTGV2ZWwoY2hpbGQpKTtcbiAgICAgICAgcmV0dXJuIGl0ZW0uY2hpbGRyZW4ubWFwKChpKSA9PiBnZXRBbGxJdGVtc1BlckNoaWxkcmVuKGksIGxldmVsICsgMSwgYXJyYXksIG5ld0l0ZW0sIGF1dG9PcGVuTGV2ZWxzKSk7XG4gICAgfVxufVxuZXhwb3J0IGZ1bmN0aW9uIHNldE9uZURlcHRoTGV2ZWwobm9kZSk6IHZvaWQge1xuICAgIGxldCBoYXNPbmVEZXB0aCA9IHRydWU7XG4gICAgbm9kZS5jaGlsZHJlbj8uZm9yRWFjaCgoY2hpbGQpID0+IHtcbiAgICAgICAgaWYgKGNoaWxkLkRhdGE/LiRIYXNDaGlsZHJlbikge1xuICAgICAgICAgICAgaGFzT25lRGVwdGggPSBmYWxzZTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgIH0pO1xuICAgIG5vZGUuaGFzT25lRGVwdGhMZXZlbCA9IGhhc09uZURlcHRoO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGlzRmlyZWZveCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gbmF2aWdhdG9yLnVzZXJBZ2VudC50b0xvd2VyQ2FzZSgpLmluZGV4T2YoJ2ZpcmVmb3gnKSA+IC0xO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGdldEltYWdlUGF0aChcbiAgICB0eXBlOiBzdHJpbmcsXG4gICAgbW9JZDogc3RyaW5nIHwgbnVsbCxcbiAgICBmaWxlSWQ6IHN0cmluZyxcbiAgICBmaWVsZERlZklkPzogc3RyaW5nLFxuICAgIHNpemU/OiBudW1iZXIsXG4gICAgc2l6ZUg/OiBudW1iZXJcbik6IHN0cmluZyB7XG4gICAgbW9JZCA9IG1vSWQgPT0gbnVsbCA/ICcnIDogZW5jb2RlVVJJQ29tcG9uZW50KG1vSWQpO1xuICAgIGZpbGVJZCA9IGZpbGVJZCA9PSBudWxsID8gJycgOiBlbmNvZGVVUklDb21wb25lbnQoZmlsZUlkKTtcbiAgICBmaWVsZERlZklkID0gZmllbGREZWZJZCA9PSBudWxsID8gJycgOiBlbmNvZGVVUklDb21wb25lbnQoZmllbGREZWZJZCk7XG4gICAgc2l6ZSA9IHNpemUgPT0gbnVsbCA/IDEyOCA6IHNpemU7XG4gICAgc2l6ZUggPSBzaXplSCA9PSBudWxsID8gc2l6ZSA6IHNpemVIO1xuICAgIGNvbnN0IHVybCA9IGAvSUguYXNoeD90eT0ke3R5cGV9Jm1vSWQ9JHttb0lkfSZpZD0ke2ZpbGVJZH0mZmRJZD0ke2ZpZWxkRGVmSWR9JnNpPSR7c2l6ZX0mc2lIPSR7c2l6ZUh9YDtcbiAgICByZXR1cm4gdXJsO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNGdW5jdGlvbihmdW5jdGlvblRvQ2hlY2spOiBib29sZWFuIHtcbiAgICByZXR1cm4gZnVuY3Rpb25Ub0NoZWNrICYmIHt9LnRvU3RyaW5nLmNhbGwoZnVuY3Rpb25Ub0NoZWNrKSA9PT0gJ1tvYmplY3QgRnVuY3Rpb25dJztcbn1cbmV4cG9ydCBmdW5jdGlvbiBEZXZpY2VXaWR0aCgpOiBudW1iZXIge1xuICAgIHJldHVybiB3aW5kb3cuaW5uZXJXaWR0aCA+IDAgPyB3aW5kb3cuaW5uZXJXaWR0aCA6IHNjcmVlbi53aWR0aDtcbn1cbmV4cG9ydCBmdW5jdGlvbiBnZXRIZWFkZXJWYWx1ZShmaWVsZFZhbHVlLCByZXR1cm5WYWx1ZT86IHRydWUpOiBhbnkge1xuICAgIGlmICh0eXBlb2YgZmllbGRWYWx1ZSAhPT0gJ29iamVjdCcpIHtcbiAgICAgICAgcmV0dXJuIGZpZWxkVmFsdWU7XG4gICAgfVxuICAgIGNvbnN0IHZhbHVlID0gZmllbGRWYWx1ZS5WYWx1ZTtcbiAgICBjb25zdCB2YWx1ZUNhcHRpb246IHN0cmluZyA9IGZpZWxkVmFsdWUuVmFsdWUkQ2FwdGlvbjtcbiAgICBsZXQgdmFsdWVPYmplY3RDYXB0aW9uID0gbnVsbDtcbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnb2JqZWN0Jykge1xuICAgICAgICB2YWx1ZU9iamVjdENhcHRpb24gPSBmaWVsZFZhbHVlLlZhbHVlLiRDYXB0aW9uO1xuICAgIH1cbiAgICBpZiAodmFsdWVPYmplY3RDYXB0aW9uICYmICFyZXR1cm5WYWx1ZSkge1xuICAgICAgICByZXR1cm4gdmFsdWVPYmplY3RDYXB0aW9uO1xuICAgIH1cbiAgICBpZiAodmFsdWVDYXB0aW9uICYmICF2YWx1ZUNhcHRpb24uc3RhcnRzV2l0aCgndG1wJykgJiYgIXJldHVyblZhbHVlKSB7XG4gICAgICAgIHJldHVybiB2YWx1ZUNhcHRpb247XG4gICAgfVxuICAgIHJldHVybiB2YWx1ZTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBlbGVtZW50SW5WaWV3cG9ydDIoZWw6IGFueSk6IGJvb2xlYW4ge1xuICAgIGxldCB0b3AgPSBlbC5vZmZzZXRUb3A7XG4gICAgbGV0IGxlZnQgPSBlbC5vZmZzZXRMZWZ0O1xuICAgIGNvbnN0IHdpZHRoID0gZWwub2Zmc2V0V2lkdGg7XG4gICAgY29uc3QgaGVpZ2h0ID0gZWwub2Zmc2V0SGVpZ2h0O1xuXG4gICAgd2hpbGUgKGVsLm9mZnNldFBhcmVudCkge1xuICAgICAgICBlbCA9IGVsLm9mZnNldFBhcmVudDtcbiAgICAgICAgdG9wICs9IGVsLm9mZnNldFRvcDtcbiAgICAgICAgbGVmdCArPSBlbC5vZmZzZXRMZWZ0O1xuICAgIH1cblxuICAgIHJldHVybiAoXG4gICAgICAgIHRvcCA8IHdpbmRvdy5wYWdlWU9mZnNldCArIHdpbmRvdy5pbm5lckhlaWdodCAmJlxuICAgICAgICBsZWZ0IDwgd2luZG93LnBhZ2VYT2Zmc2V0ICsgd2luZG93LmlubmVyV2lkdGggJiZcbiAgICAgICAgdG9wICsgaGVpZ2h0ID4gd2luZG93LnBhZ2VZT2Zmc2V0ICYmXG4gICAgICAgIGxlZnQgKyB3aWR0aCA+IHdpbmRvdy5wYWdlWE9mZnNldFxuICAgICk7XG59XG5leHBvcnQgZnVuY3Rpb24gUHJldmVudERlZmF1bEV2ZW50KGUsIHByb3BhZ2F0aW9uRGlzYWJsZSA9IHRydWUpOiB2b2lkIHtcbiAgICBpZiAocHJvcGFnYXRpb25EaXNhYmxlKSB7XG4gICAgICAgIHN0b3BQcm9wYWdhdGlvbihlKTtcbiAgICB9XG4gICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIHN0b3BQcm9wYWdhdGlvbihlKTogdm9pZCB7XG4gICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBnZXRQYXJlbnRIZWlnaHQoZWxEb206IEhUTUxFbGVtZW50KTogbnVtYmVyIHtcbiAgICBsZXQgcGFyZW50RG9tID0gZWxEb20ucGFyZW50RWxlbWVudDtcbiAgICBsZXQgcGFyZW50SGVpZ2h0ID0gcGFyZW50RG9tPy5jbGllbnRIZWlnaHQgPz8gMDtcbiAgICB3aGlsZSAocGFyZW50RG9tICE9IG51bGwgJiYgcGFyZW50SGVpZ2h0IDwgNDApIHtcbiAgICAgICAgcGFyZW50RG9tID0gcGFyZW50RG9tLnBhcmVudEVsZW1lbnQ7XG4gICAgICAgIHBhcmVudEhlaWdodCA9IHBhcmVudERvbT8uY2xpZW50SGVpZ2h0ID8/IDA7XG4gICAgfVxuICAgIHJldHVybiBwYXJlbnRIZWlnaHQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRDb21wb25lbnREZWZpbmVkKFxuICAgIGNvbnRyb2xVaTogeyBvcmlnaW5hbFh0eXBlOiBzdHJpbmcgfSxcbiAgICBjdXN0b21VaVNldHRpbmc6IHsgTW9kdWxlOiBzdHJpbmc7IE5hbWU6IHN0cmluZzsgU2VsZWN0b3I6IHN0cmluZyB9XG4pOiB7XG4gICAgbW9kdWxlTmFtZTogc3RyaW5nO1xuICAgIG1vZHVsZVBhdGg6IHN0cmluZztcbiAgICBjb21wb25lbnROYW1lOiBzdHJpbmc7XG4gICAgc2VsZWN0b3I6IHN0cmluZztcbn0ge1xuICAgIGxldCBtb2R1bGVOYW1lID0gQmFyc2FBcGkuTG9naW5Gb3JtRGF0YS5EZWZhdWx0VWlNb2R1bGU7XG4gICAgbGV0IG1vZHVsZUtlYmFiTmFtZSA9IEJhcnNhQXBpLkNvbW1vbi5VdGlsLkdldEtlYmFiQ2FzZShtb2R1bGVOYW1lKTtcbiAgICBsZXQgY29tcG9uZW50TmFtZSA9IGNvbnRyb2xVaS5vcmlnaW5hbFh0eXBlLnJlcGxhY2UoJy4nLCAnJykucmVwbGFjZSgnXycsICcnKTtcbiAgICBsZXQgc2VsZWN0b3I6IHN0cmluZyA9IEJhcnNhQXBpLkNvbW1vbi5VdGlsLkdldEtlYmFiQ2FzZShjb21wb25lbnROYW1lKTtcbiAgICBzZWxlY3RvciA9IHNlbGVjdG9yLnN1YnN0cmluZygxLCBzZWxlY3Rvci5sZW5ndGgpO1xuICAgIHNlbGVjdG9yID0gQmFyc2FBcGkuTG9naW5Gb3JtRGF0YS5DdXN0b21VaVByZWZpeCArICctJyArIHNlbGVjdG9yO1xuICAgIGlmIChjdXN0b21VaVNldHRpbmcgJiYgY3VzdG9tVWlTZXR0aW5nLk1vZHVsZSkge1xuICAgICAgICBtb2R1bGVOYW1lID0gY3VzdG9tVWlTZXR0aW5nLk1vZHVsZTtcbiAgICAgICAgbW9kdWxlS2ViYWJOYW1lID0gQmFyc2FBcGkuQ29tbW9uLlV0aWwuR2V0S2ViYWJDYXNlKG1vZHVsZU5hbWUpO1xuICAgICAgICBjb21wb25lbnROYW1lID0gY3VzdG9tVWlTZXR0aW5nLk5hbWU7XG4gICAgICAgIHNlbGVjdG9yID0gY3VzdG9tVWlTZXR0aW5nLlNlbGVjdG9yO1xuICAgIH1cbiAgICBjb25zdCBtb2R1bGVQYXRoID0gbW9kdWxlS2ViYWJOYW1lLnNsaWNlKDEsIG1vZHVsZUtlYmFiTmFtZS5sZW5ndGgpO1xuICAgIHJldHVybiB7IG1vZHVsZU5hbWUsIG1vZHVsZVBhdGgsIGNvbXBvbmVudE5hbWUsIHNlbGVjdG9yIH07XG59XG5leHBvcnQgZnVuY3Rpb24gaXNTYWZhcmkoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIERldmljZS5pc1NhZmFyaSgpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGlzRkYoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIERldmljZS5pc0ZGKCk7XG59XG5leHBvcnQgZnVuY3Rpb24gZ2V0RGV2aWNlSXNQaG9uZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gRGV2aWNlLmlzUGhvbmUoKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBnZXREZXZpY2VJc0Rlc2t0b3AoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIERldmljZS5pc0Rlc2t0b3AoKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBnZXREZXZpY2VJc1RhYmxldCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gRGV2aWNlLmlzVGFibGV0KCk7XG59XG5leHBvcnQgZnVuY3Rpb24gZ2V0RGV2aWNlSXNNb2JpbGUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIG5hdmlnYXRvci51c2VyQWdlbnQuaW5kZXhPZignbW9iaScpID4gMCB8fCBnZXREZXZpY2VJc1Bob25lKCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRDb250cm9sU2l6ZU1vZGUoZWw6IEhUTUxFbGVtZW50LCBkZXZpY2VTaXplOiAncycgfCAnbScgfCAnbCcgfCAneGwnID0gJ2wnKTogQWJicmV2YXRpb25EZXZpY2VTaXplIHtcbiAgICBjb25zdCBjb250YWluZXJXaWR0aCA9IGVsLm9mZnNldFdpZHRoO1xuICAgIGlmIChjb250YWluZXJXaWR0aCA9PT0gMCkge1xuICAgICAgICByZXR1cm4gZGV2aWNlU2l6ZTtcbiAgICB9XG4gICAgaWYgKGRldmljZVNpemUgPT09ICdzJyB8fCBjb250YWluZXJXaWR0aCA8IDYwMCkge1xuICAgICAgICBkZXZpY2VTaXplID0gJ3MnO1xuICAgIH0gZWxzZSBpZiAoZGV2aWNlU2l6ZSA9PT0gJ20nIHx8IChjb250YWluZXJXaWR0aCA+IDYwMCAmJiBjb250YWluZXJXaWR0aCA8IDEyMDApKSB7XG4gICAgICAgIGRldmljZVNpemUgPSAnbSc7XG4gICAgfVxuICAgIHJldHVybiBkZXZpY2VTaXplO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZm9ybWF0Qnl0ZXMoXG4gICAgYnl0ZXMsXG4gICAgZGVjaW1hbHMgPSAyLFxuICAgIHNpemU6ICdCeXRlcycgfCAnS0InIHwgJ01CJyB8ICdHQicgfCAnVEInIHwgJ1BCJyB8ICdFQicgfCAnWkInIHwgJ1lCJ1xuKTogc3RyaW5nIHtcbiAgICBpZiAoYnl0ZXMgPT09IDApIHtcbiAgICAgICAgcmV0dXJuICcwIEJ5dGVzJztcbiAgICB9XG5cbiAgICBjb25zdCBrID0gMTAyNDtcbiAgICBjb25zdCBkbSA9IGRlY2ltYWxzIDwgMCA/IDAgOiBkZWNpbWFscztcbiAgICBjb25zdCBzaXplcyA9IFsnQnl0ZXMnLCAnS0InLCAnTUInLCAnR0InLCAnVEInLCAnUEInLCAnRUInLCAnWkInLCAnWUInXTtcbiAgICBjb25zdCBpID0gc2l6ZXMuZmluZEluZGV4KChjKSA9PiBjID09PSBzaXplKTtcbiAgICByZXR1cm4gcGFyc2VGbG9hdCgoYnl0ZXMgLyBNYXRoLnBvdyhrLCBpKSkudG9GaXhlZChkbSkpICsgJyAnICsgc2l6ZXNbaV07XG59XG5leHBvcnQgZnVuY3Rpb24gZ2V0VmFsaWRFeHRlbnNpb24odmFsaWRFeHRlbnNpb25zKTogc3RyaW5nIHtcbiAgICBsZXQgX3ZhbGlkRXh0ZW5zaW9ucyA9ICcnO1xuICAgIGlmIChBcnJheS5pc0FycmF5KHZhbGlkRXh0ZW5zaW9ucykpIHtcbiAgICAgICAgX3ZhbGlkRXh0ZW5zaW9ucyA9IHZhbGlkRXh0ZW5zaW9ucy5tYXAoKGMpID0+ICcuJyArIGMuRXh0ZW5zaW9uKS5qb2luKCcsJyk7XG4gICAgfVxuICAgIHJldHVybiBfdmFsaWRFeHRlbnNpb25zO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGdldEljb24odHlwZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gQmFyc2FBcGkuQ29tbW9uLkZpbGUuRmlsZUljb25EaWN0MTI4W3R5cGVdO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGlzSW1hZ2UodHlwZSk6IGJvb2xlYW4ge1xuICAgIGlmICghdHlwZSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHR5cGUgPSB0eXBlLnRvTG93ZXJDYXNlKCk7XG4gICAgcmV0dXJuIFsnaW1nJywgJ3BuZycsICdqcGVnJywgJ2pwZycsICdnaWYnLCAnYm1wJywgJ3RpZmYnLCAnaW1hZ2UnXS5pbmRleE9mKHR5cGUpID4gLTE7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBHZXRBbGxDb2x1bW5zU29ydGVkKGNvbnRleHQpOiBBcnJheTxSZXBvcnRWaWV3Q29sdW1uPiB7XG4gICAgY29uc3QgYWxsQ29sdW1ucyA9IEJhcnNhQXBpLkNvbW1vbi5VdGlsLlRyeUdldFZhbHVlKGNvbnRleHQsICdTZXR0aW5nLlZpZXcuQ29sdW1ucycsIFtdKS5maWx0ZXIoXG4gICAgICAgIChjKSA9PiBjLk5hbWUgIT09ICdJZCcgJiYgYy5OYW1lICE9PSAnJFN0eWxlSW5kZXgnICYmICFjLkhpZGRlblxuICAgICk7XG5cbiAgICBjb25zdCBjb2xMaXN0OiBDb2xTZXR0aW5nW10gPSBCYXJzYUFwaS5Db21tb24uVXRpbC5UcnlHZXRWYWx1ZShcbiAgICAgICAgY29udGV4dCxcbiAgICAgICAgJ1NldHRpbmcuVmlldy5HcmlkU2V0dGluZy5Db2xTZXR0aW5nTGlzdCcsXG4gICAgICAgIFtdXG4gICAgKTtcbiAgICBjb25zdCBjb2x1bW5zID0gbmV3IEFycmF5PFJlcG9ydFZpZXdDb2x1bW4+KCk7XG4gICAgY29sTGlzdC5mb3JFYWNoKChjb2xTKSA9PiB7XG4gICAgICAgIGNvbnN0IGNvbHVtbk9mQ29sTGlzdCA9IGFsbENvbHVtbnMuZmluZCgoYykgPT4gYy5OYW1lID09PSBjb2xTLk5hbWUpO1xuICAgICAgICBpZiAoY29sdW1uT2ZDb2xMaXN0KSB7XG4gICAgICAgICAgICBjb2x1bW5zLnB1c2goeyAuLi5jb2x1bW5PZkNvbExpc3QsIEhpZGRlbjogY29sUy5Jc0hpZGRlbiwgV2lkdGg6IGNvbFMuV2lkdGggfSk7XG4gICAgICAgIH1cbiAgICB9KTtcbiAgICBhbGxDb2x1bW5zLmZvckVhY2goKGNvbHVtbiwgaW5kZXgpID0+IHtcbiAgICAgICAgY29uc3QgY29sU2V0dGluZyA9IGNvbExpc3QuZmluZCgoYykgPT4gYy5OYW1lID09PSBjb2x1bW4uTmFtZSk7XG4gICAgICAgIGlmICghY29sU2V0dGluZykge1xuICAgICAgICAgICAgY29sdW1ucy5zcGxpY2UoaW5kZXgsIDAsIHsgLi4uY29sdW1uLCBIaWRkZW46IGNvbExpc3QubGVuZ3RoID4gMCA/IHRydWUgOiBmYWxzZSB9KTtcbiAgICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGNvbHVtbnM7XG59XG5leHBvcnQgZnVuY3Rpb24gR2V0VmlzaWJsZVZhbHVlKG9iamVjdCwgZmllbGQpOiBzdHJpbmcge1xuICAgIGxldCBvdXRwdXRWYWx1ZTtcbiAgICBpZiAob2JqZWN0W2ZpZWxkXT8uJENhcHRpb24gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBvdXRwdXRWYWx1ZSA9IG9iamVjdFtmaWVsZF0uJENhcHRpb247XG4gICAgfSBlbHNlIHtcbiAgICAgICAgb3V0cHV0VmFsdWUgPSBvYmplY3RbZmllbGQgKyAnJENhcHRpb24nXSAhPT0gdW5kZWZpbmVkID8gb2JqZWN0W2ZpZWxkICsgJyRDYXB0aW9uJ10gOiBvYmplY3RbZmllbGRdO1xuICAgIH1cbiAgICByZXR1cm4gb3V0cHV0VmFsdWU7XG59XG5leHBvcnQgaW50ZXJmYWNlIEdyb3VwIHtcbiAgICAkR3JvdXA6IGFueTtcbiAgICAkTGV2ZWw6IG51bWJlcjtcbiAgICAkQ291bnQ6IG51bWJlcjtcbiAgICAkRXhwYW5kZWQ6IGJvb2xlYW47XG4gICAgJFBhcmVudDogYW55O1xuICAgICRDaGlsZHJlbjogYW55W107XG4gICAgJFZpc2liaWxpdHk6IGJvb2xlYW47XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBHcm91cEJ5KGNvbGxlY3Rpb246IGFueVtdLCBzb3J0U2V0dGluZ3M6IFNvcnRTZXR0aW5nW10pOiB7IGdyb3VwZWQ6IEdyb3VwOyBncm91cHM6IGFueVtdIH0ge1xuICAgIGNvbnN0IGdyb3VwZWQ6IGFueSA9IHt9O1xuXG4gICAgY29uc3QgZ3JvdXBzID0gc29ydFNldHRpbmdzLm1hcCgoYykgPT4gYy5OYW1lKTtcbiAgICBjb25zdCBnZXRUaXRsZSA9IChtbywgZmllbGROYW1lKTogc3RyaW5nID0+IEdldFZpc2libGVWYWx1ZShtbywgZmllbGROYW1lKTtcbiAgICBjb2xsZWN0aW9uLmZvckVhY2goKGEpID0+IHtcbiAgICAgICAgZ3JvdXBzXG4gICAgICAgICAgICAucmVkdWNlKChvLCBnLCBpKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgZ3JvdXBUaXRsZSA9IGdldFRpdGxlKGEsIGcpO1xuICAgICAgICAgICAgICAgIG9bZ3JvdXBUaXRsZV0gPSBvW2dyb3VwVGl0bGVdIHx8IChpICsgMSA9PT0gZ3JvdXBzLmxlbmd0aCA/IFtdIDoge30pO1xuICAgICAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KG9bZ3JvdXBUaXRsZV0pKSB7XG4gICAgICAgICAgICAgICAgICAgIGEuJExldmVsID0gZ3JvdXBzLmxlbmd0aDtcbiAgICAgICAgICAgICAgICAgICAgbGV0IHRpdGxlID0gZ2V0VGl0bGUoYSwgZ3JvdXBzWzBdKTtcbiAgICAgICAgICAgICAgICAgICAgbGV0IHBhcmVudCA9IGdyb3VwZWRbdGl0bGVdO1xuICAgICAgICAgICAgICAgICAgICBwYXJlbnQuJENvdW50ID0gKHBhcmVudC4kQ291bnQgPz8gMCkgKyAxO1xuICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBqID0gMTsgaiA8IGdyb3Vwcy5sZW5ndGggLSAxOyBqKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlID0gZ2V0VGl0bGUoYSwgZ3JvdXBzW2pdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudCA9IHBhcmVudFt0aXRsZV07XG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnQuJENvdW50ID0gb1tncm91cFRpdGxlXS5sZW5ndGggKyAxO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgYTIgPSBGaW5kR3JvdXAoZ3JvdXBUaXRsZSwgYSk7XG4gICAgICAgICAgICAgICAgICAgIG9bZ3JvdXBUaXRsZV0uJEV4cGFuZGVkID0gYTI/LiRFeHBhbmRlZDtcbiAgICAgICAgICAgICAgICAgICAgb1tncm91cFRpdGxlXS4kVmlzaWJpbGl0eSA9IGEyPy4kVmlzaWJpbGl0eTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIG9bZ3JvdXBUaXRsZV07XG4gICAgICAgICAgICB9LCBncm91cGVkKVxuICAgICAgICAgICAgLnB1c2goYSk7XG4gICAgfSk7XG4gICAgcmV0dXJuIHsgZ3JvdXBlZCwgZ3JvdXBzIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBGaW5kR3JvdXAoZ3JvdXBUaXRsZTogc3RyaW5nLCBhOiBhbnkpOiBhbnkge1xuICAgIGlmIChhLiRHcm91cCA9PT0gZ3JvdXBUaXRsZSkge1xuICAgICAgICByZXR1cm4gYTtcbiAgICB9XG4gICAgaWYgKGEuJFBhcmVudCkge1xuICAgICAgICByZXR1cm4gRmluZEdyb3VwKGdyb3VwVGl0bGUsIGEuJFBhcmVudCk7XG4gICAgfVxufVxuZXhwb3J0IGZ1bmN0aW9uIEZpbGxBbGxMYXlvdXRDb250cm9scyhpdGVtOiBMYXlvdXRTZXR0aW5nLCBsYXlvdXRDb250cm9sczogTGF5b3V0U2V0dGluZ1tdKTogdm9pZCB7XG4gICAgaWYgKGl0ZW0ueHR5cGUgPT09ICdMeS5MYXlvdXRDb250cm9sJykge1xuICAgICAgICBsYXlvdXRDb250cm9scy5wdXNoKGl0ZW0pO1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICghaXRlbS5pdGVtcz8ubGVuZ3RoKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaXRlbS5pdGVtcy5mb3JFYWNoKChjKSA9PiBGaWxsQWxsTGF5b3V0Q29udHJvbHMoYywgbGF5b3V0Q29udHJvbHMpKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBGaW5kVG9vbGJhckl0ZW0odG9vbGJhckl0ZW1zOiBNZW51SXRlbVtdLCB2YWx1ZTogc3RyaW5nLCBwcm9wOiBzdHJpbmcgPSAndGV4dCcpOiBNZW51SXRlbSB8IG51bGwge1xuICAgIGlmICghdG9vbGJhckl0ZW1zPy5sZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGNvbnN0IGZpbmRJbkFycmF5ID0gKHRvb2xiYXJJdGVtczogTWVudUl0ZW1bXSwgdmFsdWU6IHN0cmluZykgPT4ge1xuICAgICAgICBsZXQgaXRlbTogTWVudUl0ZW0gfCBudWxsID0gbnVsbDtcbiAgICAgICAgdG9vbGJhckl0ZW1zLmZvckVhY2goKGMpID0+IHtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgYyA9PT0gJ29iamVjdCcgJiYgIWl0ZW0pIHtcbiAgICAgICAgICAgICAgICBpZiAoY1twcm9wXSA9PT0gdmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgaXRlbSA9IGM7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGMubWVudT8uaXRlbXM/Lmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICBpdGVtID0gZmluZEluQXJyYXkoYy5tZW51Lml0ZW1zLCB2YWx1ZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIGl0ZW07XG4gICAgfTtcbiAgICByZXR1cm4gZmluZEluQXJyYXkodG9vbGJhckl0ZW1zLCB2YWx1ZSk7XG59XG5leHBvcnQgZnVuY3Rpb24gRmluZExheW91dFNldHRpbmdGcm9tTGF5b3V0OTQobGF5b3V0OTQ6IExheW91dFNldHRpbmcsIGxheW91dFRpdGxlOiBzdHJpbmcpOiBMYXlvdXRTZXR0aW5nIHwgbnVsbCB7XG4gICAgaWYgKCFsYXlvdXRUaXRsZSkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgaWYgKGxheW91dDk0LkNhcHRpb24gPT09IGxheW91dFRpdGxlIHx8IGxheW91dDk0LlRpdGxlID09PSBsYXlvdXRUaXRsZSB8fCBsYXlvdXQ5NC5Db250cm9sSWQgPT09IGxheW91dFRpdGxlKSB7XG4gICAgICAgIHJldHVybiBsYXlvdXQ5NDtcbiAgICB9XG4gICAgbGV0IHRlbXBMYXlvdXQ5NDogTGF5b3V0U2V0dGluZyB8IG51bGwgPSBudWxsO1xuICAgIGlmIChsYXlvdXQ5NC5pdGVtcz8ubGVuZ3RoKSB7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGF5b3V0OTQuaXRlbXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGlmICghdGVtcExheW91dDk0KSB7XG4gICAgICAgICAgICAgICAgdGVtcExheW91dDk0ID0gRmluZExheW91dFNldHRpbmdGcm9tTGF5b3V0OTQobGF5b3V0OTQuaXRlbXNbaV0sIGxheW91dFRpdGxlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGVtcExheW91dDk0O1xufVxuZXhwb3J0IGZ1bmN0aW9uIGdldEdyaWRTZXR0aW5ncyhjb250ZXh0KTogR3JpZFNldHRpbmcge1xuICAgIGNvbnN0IGdyaWRTZXR0aW5nID0gQmFyc2FBcGkuQ29tbW9uLlV0aWwuVHJ5R2V0VmFsdWUoY29udGV4dCwgJ1NldHRpbmcuVmlldy5HcmlkU2V0dGluZycsIG51bGwpO1xuICAgIHJldHVybiB7XG4gICAgICAgIENvbFNldHRpbmdMaXN0OiBncmlkU2V0dGluZz8uQ29sU2V0dGluZ0xpc3QgPz8gbnVsbCxcbiAgICAgICAgU29ydFNldHRpbmdMaXN0OiBncmlkU2V0dGluZz8uU29ydFNldHRpbmdMaXN0ID8/IFtdLFxuICAgICAgICBBdXRvU2l6ZUNvbHVtbnM6IGdyaWRTZXR0aW5nPy5BdXRvU2l6ZUNvbHVtbnMgPz8gZmFsc2VcbiAgICB9O1xufVxuZXhwb3J0IGZ1bmN0aW9uIGdldFJlc2V0R3JpZFNldHRpbmdzKGNvbHVtbnM6IFJlcG9ydFZpZXdDb2x1bW5bXSB8IGFueVtdLCBjb250ZXh0OiBhbnkpOiBHcmlkU2V0dGluZyB7XG4gICAgY29uc3QgY29sTGlzdCA9IGNvbHVtbnM7XG4gICAgY29uc3Qgc2V0dGluZ3MgPSBnZXRHcmlkU2V0dGluZ3MoY29udGV4dCk7XG4gICAgc2V0dGluZ3MuQ29sU2V0dGluZ0xpc3QgPSBjb2xMaXN0Lm1hcCgoYykgPT4gKHtcbiAgICAgICAgSXNIaWRkZW46IGMuSGlkZGVuLFxuICAgICAgICBOYW1lOiBjLk5hbWUsXG4gICAgICAgIFdpZHRoOiBjLldpZHRoLFxuICAgICAgICBDYXB0aW9uOiBjLkNhcHRpb25cbiAgICB9KSk7XG4gICAgcmV0dXJuIHNldHRpbmdzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gR2V0RGVmYXVsdE1vT2JqZWN0SW5mbyh0eXBlRGVmSWQ6IHN0cmluZyk6IE1ldGFvYmplY3REYXRhTW9kZWwge1xuICAgIHJldHVybiB7XG4gICAgICAgIElkOiAnMCcsXG4gICAgICAgICRDYXB0aW9uOiAnJyxcbiAgICAgICAgJFR5cGVEZWZJZDogdHlwZURlZklkLFxuICAgICAgICAkU3RhdGU6ICdOZXcnLFxuICAgICAgICAkVHlwZTogJ0NvbW1vbi5NZXRhT2JqZWN0V2ViJyxcbiAgICAgICAgJEZpZWxkRGljdDoge31cbiAgICB9O1xufVxuZXhwb3J0IGZ1bmN0aW9uIGdldExheW91dDk0T2JqZWN0SW5mbygpOiBMYXlvdXRTZXR0aW5nIHtcbiAgICByZXR1cm4ge1xuICAgICAgICBUeXBlOiAnUm9vdCcsXG4gICAgICAgIENvbnRyb2xJZDogJ9ix24zYtNmHJyxcbiAgICAgICAgeHR5cGU6ICdMeS5MYXlvdXRDb250YWluZXInLFxuICAgICAgICBCb3VuZHM6IHsgeDogMCwgeTogMCwgd2lkdGg6IDQzMiwgaGVpZ2h0OiAyNCB9LFxuICAgICAgICBpdGVtczogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIFR5cGU6ICdWZXJ0aWNhbEpvaW4nLFxuICAgICAgICAgICAgICAgIHh0eXBlOiAnTHkuTGF5b3V0Sm9pbicsXG4gICAgICAgICAgICAgICAgSXNWZXJ0aWNhbDogdHJ1ZSxcbiAgICAgICAgICAgICAgICBCb3VuZHM6IHsgeDogMCwgeTogMCwgd2lkdGg6IDQzMiwgaGVpZ2h0OiA4MiB9LFxuICAgICAgICAgICAgICAgIGl0ZW1zOiBbXVxuICAgICAgICAgICAgfVxuICAgICAgICBdXG4gICAgfTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBnZXRGb3JtU2V0dGluZ3ModHlwZURlZklkOiBzdHJpbmcpOiBGb3JtU2V0dGluZyB7XG4gICAgY29uc3QgbW8gPSBHZXREZWZhdWx0TW9PYmplY3RJbmZvKHR5cGVEZWZJZCk7XG5cbiAgICBjb25zdCBmb3JtUGFuZWxTZXR0aW5nczogRm9ybVNldHRpbmcgPSB7XG4gICAgICAgIFZpZXc6IHtcbiAgICAgICAgICAgIExheW91dDk0OiBnZXRMYXlvdXQ5NE9iamVjdEluZm8sXG4gICAgICAgICAgICBDb250cm9sSW5mbzogW10sXG4gICAgICAgICAgICBUeXBlRGVmSWQ6IHR5cGVEZWZJZFxuICAgICAgICB9LFxuICAgICAgICBJc1NlYXJjaFBhbmVsOiB0cnVlLFxuICAgICAgICBEYXRhOiB7XG4gICAgICAgICAgICBNbzogbW9cbiAgICAgICAgfVxuICAgIH07XG4gICAgcmV0dXJuIGZvcm1QYW5lbFNldHRpbmdzO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUZvcm1QYW5lbE1ldGFDb25kaXRpb25zKFxuICAgIHR5cGVEZWZJZDogc3RyaW5nLFxuICAgIGNvbnRyb2xzSW5mbzogR2VuZXJhbENvbnRyb2xJbmZvTW9kZWxbXSxcbiAgICBjb250cm9sTmFtZTogc3RyaW5nLFxuICAgIHZhbHVlOiBhbnlcbik6IGFueSB7XG4gICAgY29uc3QgZm9ybVNldHRpbmdzID0gZ2V0Rm9ybVNldHRpbmdzKHR5cGVEZWZJZCk7XG4gICAgZm9ybVNldHRpbmdzLlZpZXcuQ29udHJvbEluZm8gPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGNvbnRyb2xzSW5mbykpO1xuXG4gICAgZm9ybVNldHRpbmdzLlZpZXcuTGF5b3V0OTQuaXRlbXNbMF0uaXRlbXMucHVzaCguLi5jb250cm9sc0luZm8ubWFwKChjKSA9PiBnZXRMYXlvdXRDb250cm9sKGMuQ29udHJvbE5hbWUpKSk7XG4gICAgZm9ybVNldHRpbmdzLkRhdGEuTW9bY29udHJvbE5hbWVdID0gdmFsdWU7XG4gICAgY29uc3QgZm9ybVBhbmVsQ3RybHIgPSBuZXcgQmFyc2FBcGkuVWwuRm9ybVBhbmVsQ3RybHIoe1xuICAgICAgICBTZXR0aW5nOiBmb3JtU2V0dGluZ3MsXG4gICAgICAgIEZlYXR1cmVzOiB7XG4gICAgICAgICAgICBXb3JrZmxvdzogZmFsc2UsXG4gICAgICAgICAgICBUb29sYmFyOiBmYWxzZSxcbiAgICAgICAgICAgIEluZm9CYXI6IGZhbHNlXG4gICAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gZm9ybVBhbmVsQ3RybHI7XG59XG5leHBvcnQgZnVuY3Rpb24gZ2V0TmV3TW9HcmlkRWRpdG9yKGZvcm1TZXR0aW5nczogRm9ybVNldHRpbmcsIHR5cGVkZWZJZDogc3RyaW5nKTogUGFydGlhbDxGb3JtU2V0dGluZz4ge1xuICAgIGNvbnN0IG5ld0Zvcm1TZXR0aW5nczogRm9ybVNldHRpbmcgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGZvcm1TZXR0aW5ncykpO1xuICAgIHJldHVybiB7IC4uLm5ld0Zvcm1TZXR0aW5ncy5EYXRhLk1vLCAkVHlwZURlZklkOiB0eXBlZGVmSWQgfTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVHcmlkRWRpdG9yRm9ybVBhbmVsKFxuICAgIGZvcm1TZXR0aW5nczogRm9ybVNldHRpbmcsXG4gICAgbW86IE1ldGFvYmplY3REYXRhTW9kZWwsXG4gICAgdHlwZWRlZjogc3RyaW5nLFxuICAgIHJlbGF0aW9uOiBhbnksXG4gICAgcmV3cml0ZUxheW91dDogYm9vbGVhbiA9IHRydWUsXG4gICAgVWx2TWFpbkN0cmxyOiBhbnkgPSBudWxsXG4pOiBhbnkge1xuICAgIGNvbnN0IG5ld0Zvcm1TZXR0aW5nczogRm9ybVNldHRpbmcgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGZvcm1TZXR0aW5ncykpO1xuICAgIG5ld0Zvcm1TZXR0aW5ncy5EYXRhLk1vID0geyAuLi5tbywgJFR5cGVEZWZJZDogdHlwZWRlZiB9O1xuICAgIGlmIChyZXdyaXRlTGF5b3V0KSB7XG4gICAgICAgIG5ld0Zvcm1TZXR0aW5ncy5WaWV3LkxheW91dDk0ID0gZ2V0TGF5b3V0OTRPYmplY3RJbmZvKCk7XG4gICAgICAgIG5ld0Zvcm1TZXR0aW5ncy5WaWV3LkxheW91dDk0Lml0ZW1zWzBdLml0ZW1zLnB1c2goXG4gICAgICAgICAgICAuLi5uZXdGb3JtU2V0dGluZ3MuVmlldy5Db250cm9sSW5mby5tYXAoKGMpID0+XG4gICAgICAgICAgICAgICAgZ2V0TGF5b3V0Q29udHJvbChjLkNvbnRyb2xOYW1lLCBjLkNvbnRyb2xGaWVsZENhcHRpb25UcmFuc2xhdGVkLCBmYWxzZSlcbiAgICAgICAgICAgIClcbiAgICAgICAgKTtcbiAgICB9XG4gICAgY29uc3QgZm9ybVJlcXVlc3RQYXJhbXMgPSBuZXcgQmFyc2FBcGkuVWwuRm9ybVJlcXVlc3RQYXJhbXMoe1xuICAgICAgICBNb0lkOiBuZXdGb3JtU2V0dGluZ3MuRGF0YS5Nby5JZCxcbiAgICAgICAgVHlwZURlZklkOiB0eXBlZGVmLFxuICAgICAgICBSZWxhdGlvbjogcmVsYXRpb25cbiAgICAgICAgLy8gTW9Db250ZXh0OiB7XG4gICAgICAgIC8vICAgICBSZXBvcnRJZDogJycsXG4gICAgICAgIC8vICAgICBWaWV3SWQ6ICcnLFxuICAgICAgICAvLyAgICAgVmlld05hbWU6ICcnLFxuICAgICAgICAvLyAgICAgQ29uZEZvcm1hdGluZzogJycsXG4gICAgICAgIC8vICAgICBJbmNsdWRlSW5SZXBvcnQ6ICcnXG4gICAgICAgIC8vIH1cbiAgICB9KTtcbiAgICBjb25zdCBmb3JtUGFuZWxDdHJsciA9IG5ldyBCYXJzYUFwaS5VbC5Gb3JtUGFuZWxDdHJscih7XG4gICAgICAgIFNldHRpbmc6IG5ld0Zvcm1TZXR0aW5ncyxcbiAgICAgICAgUmVsYXRpb246IHJlbGF0aW9uLFxuICAgICAgICBVbHZNYWluQ3RybHI6IFVsdk1haW5DdHJscixcbiAgICAgICAgRmVhdHVyZXM6IHtcbiAgICAgICAgICAgIFdvcmtmbG93OiBmYWxzZSxcbiAgICAgICAgICAgIFRvb2xiYXI6IGZhbHNlLFxuICAgICAgICAgICAgSW5mb0JhcjogZmFsc2VcbiAgICAgICAgfSxcbiAgICAgICAgRm9ybVJlcXVlc3RQYXJhbXM6IGZvcm1SZXF1ZXN0UGFyYW1zXG4gICAgfSk7XG4gICAgcmV0dXJuIGZvcm1QYW5lbEN0cmxyO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0TGF5b3V0Q29udHJvbChcbiAgICBjb250cm9sTmFtZTogc3RyaW5nLFxuICAgIGNvbnRyb2xDYXB0aW9uOiBzdHJpbmcgPSAnJyxcbiAgICBoaWRlOiBib29sZWFuID0gdHJ1ZVxuKTogUGFydGlhbDxHZW5lcmFsQ29udHJvbEluZm9Nb2RlbD4ge1xuICAgIHJldHVybiB7XG4gICAgICAgIHh0eXBlOiAnTHkuTGF5b3V0Q29udHJvbCcsXG4gICAgICAgIFR5cGU6ICdMYXlvdXRDb250cm9sSXRlbScsXG4gICAgICAgIENvbnRyb2xJZDogY29udHJvbE5hbWUsXG4gICAgICAgIElzVmVydGljYWw6IGZhbHNlLFxuICAgICAgICBUZXh0TG9jYXRpb246ICdSaWdodCcsXG4gICAgICAgIFRleHRWaXNpYmxlOiBmYWxzZSxcbiAgICAgICAgVmlzaWJsZTogIWhpZGUsXG4gICAgICAgIGhpZGUsXG4gICAgICAgIFVzZUxheW91dEl0ZW1UZXh0Rm9yQ29udHJvbDogZmFsc2UsXG4gICAgICAgIENhcHRpb246IGNvbnRyb2xDYXB0aW9uLFxuICAgICAgICBBY2Nlc3NpYmxlTmFtZTogJycsXG4gICAgICAgIEJvdW5kczogeyB4OiAwLCB5OiAwLCB3aWR0aDogNDMyLCBoZWlnaHQ6IDI0IH0sXG4gICAgICAgIE1pblNpemU6IHsgd2lkdGg6IDg5LCBoZWlnaHQ6IDI0IH0sXG4gICAgICAgIE1heFNpemU6IHsgd2lkdGg6IDAsIGhlaWdodDogMjQgfSxcbiAgICAgICAgQ29udHJvbEJvdW5kczogeyB3aWR0aDogMzg4LCBoZWlnaHQ6IDIwIH0sXG4gICAgICAgIENvbnRyb2xNaW5TaXplOiB7IHdpZHRoOiA0NSwgaGVpZ2h0OiAyMCB9LFxuICAgICAgICBDb250cm9sTWF4U2l6ZTogeyB3aWR0aDogMCwgaGVpZ2h0OiAyMCB9LFxuICAgICAgICBQYWRkaW5nOiBbMiwgMiwgMiwgMl0sXG4gICAgICAgIExhYmVsU2l6ZTogeyB3aWR0aDogMzUsIGhlaWdodDogMTMgfSxcbiAgICAgICAgb3JpZ2luYWxYdHlwZTogJydcbiAgICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q29udHJvbExpc3QoXG4gICAgbW86IE1ldGFvYmplY3REYXRhTW9kZWwsXG4gICAgY29udHJvbERiTmFtZXM6IHN0cmluZ1tdLFxuICAgIGlzU2VhcmNoUGFuZWw6IGJvb2xlYW4sXG4gICAgaXNHcmlkRWRpdG9yOiBib29sZWFuXG4pOiBQcm9taXNlPEdlbmVyYWxDb250cm9sSW5mb01vZGVsW10+IHtcbiAgICByZXR1cm4gbmV3IFByb21pc2U8R2VuZXJhbENvbnRyb2xJbmZvTW9kZWxbXT4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICBCYXJzYUFwaS5Db21tb24uQWpheC5HZXRTZXJ2ZXJEYXRhKFxuICAgICAgICAgICAgJ0Zvcm05NC5HZXRDb250cm9sSW5mb3MnLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNvbnRyb2xJbmZvUGFyYW1ldGVyOiB7XG4gICAgICAgICAgICAgICAgICAgIEZpZWxkRGJOYW1lczogY29udHJvbERiTmFtZXMsXG4gICAgICAgICAgICAgICAgICAgIE1vOiBuZXcgQmFyc2FBcGkuQ29tbW9uLk1ldGFPYmplY3RXZWIobW8pLFxuICAgICAgICAgICAgICAgICAgICBJc1NlYXJjaFBhbmVsOiBpc1NlYXJjaFBhbmVsLFxuICAgICAgICAgICAgICAgICAgICBJc0dyaWRFZGl0b3I6IGlzR3JpZEVkaXRvclxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAobSkgPT4ge1xuICAgICAgICAgICAgICAgIHJlc29sdmUobSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgKGVycikgPT4ge1xuICAgICAgICAgICAgICAgIHJlamVjdChlcnIpO1xuICAgICAgICAgICAgfVxuICAgICAgICApO1xuICAgIH0pO1xufVxuXG5leHBvcnQgdHlwZSBOelNhZmVBbnkgPSBhbnk7XG5leHBvcnQgdHlwZSBOdW1iZXJJbnB1dCA9IG51bWJlciB8IHN0cmluZyB8IHVuZGVmaW5lZCB8IG51bGw7XG5leHBvcnQgaW50ZXJmYWNlIE5nU3R5bGVJbnRlcmZhY2Uge1xuICAgIFtrbGFzczogc3RyaW5nXTogTnpTYWZlQW55O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEluZGV4YWJsZU9iamVjdCB7XG4gICAgW2tleTogc3RyaW5nXTogTnpTYWZlQW55O1xufVxuZXhwb3J0IGZ1bmN0aW9uIHNoYWxsb3dFcXVhbChvYmpBPzogSW5kZXhhYmxlT2JqZWN0LCBvYmpCPzogSW5kZXhhYmxlT2JqZWN0KTogYm9vbGVhbiB7XG4gICAgaWYgKG9iakEgPT09IG9iakIpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBvYmpBICE9PSAnb2JqZWN0JyB8fCAhb2JqQSB8fCB0eXBlb2Ygb2JqQiAhPT0gJ29iamVjdCcgfHwgIW9iakIpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGNvbnN0IGtleXNBID0gT2JqZWN0LmtleXMob2JqQSk7XG4gICAgY29uc3Qga2V5c0IgPSBPYmplY3Qua2V5cyhvYmpCKTtcblxuICAgIGlmIChrZXlzQS5sZW5ndGggIT09IGtleXNCLmxlbmd0aCkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgY29uc3QgYkhhc093blByb3BlcnR5ID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5iaW5kKG9iakIpO1xuXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9wcmVmZXItZm9yLW9mXG4gICAgZm9yIChsZXQgaWR4ID0gMDsgaWR4IDwga2V5c0EubGVuZ3RoOyBpZHgrKykge1xuICAgICAgICBjb25zdCBrZXkgPSBrZXlzQVtpZHhdO1xuICAgICAgICBpZiAoIWJIYXNPd25Qcm9wZXJ0eShrZXkpKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG9iakFba2V5XSAhPT0gb2JqQltrZXldKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdHJ1ZTtcbn1cbmV4cG9ydCBmdW5jdGlvbiB0b051bWJlcih2YWx1ZTogbnVtYmVyIHwgc3RyaW5nKTogbnVtYmVyO1xuZXhwb3J0IGZ1bmN0aW9uIHRvTnVtYmVyPEQ+KHZhbHVlOiBudW1iZXIgfCBzdHJpbmcsIGZhbGxiYWNrOiBEKTogbnVtYmVyIHwgRDtcbmV4cG9ydCBmdW5jdGlvbiB0b051bWJlcih2YWx1ZTogbnVtYmVyIHwgc3RyaW5nLCBmYWxsYmFja1ZhbHVlOiBudW1iZXIgPSAwKTogbnVtYmVyIHtcbiAgICByZXR1cm4gX2lzTnVtYmVyVmFsdWUodmFsdWUpID8gTnVtYmVyKHZhbHVlKSA6IGZhbGxiYWNrVmFsdWU7XG59XG5mdW5jdGlvbiBwcm9wRGVjb3JhdG9yRmFjdG9yeTxULCBEPihcbiAgICBuYW1lOiBzdHJpbmcsXG4gICAgZmFsbGJhY2s6ICh2OiBUKSA9PiBEXG4pOiAodGFyZ2V0OiBOelNhZmVBbnksIHByb3BOYW1lOiBzdHJpbmcpID0+IHZvaWQge1xuICAgIGZ1bmN0aW9uIHByb3BEZWNvcmF0b3IoXG4gICAgICAgIHRhcmdldDogTnpTYWZlQW55LFxuICAgICAgICBwcm9wTmFtZTogc3RyaW5nLFxuICAgICAgICBvcmlnaW5hbERlc2NyaXB0b3I/OiBUeXBlZFByb3BlcnR5RGVzY3JpcHRvcjxOelNhZmVBbnk+XG4gICAgKTogTnpTYWZlQW55IHtcbiAgICAgICAgY29uc3QgcHJpdmF0ZVByb3BOYW1lID0gYCQkX196b3Jyb1Byb3BEZWNvcmF0b3JfXyR7cHJvcE5hbWV9YDtcblxuICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRhcmdldCwgcHJpdmF0ZVByb3BOYW1lKSkge1xuICAgICAgICAgICAgLy8gd2FybihgVGhlIHByb3AgXCIke3ByaXZhdGVQcm9wTmFtZX1cIiBpcyBhbHJlYWR5IGV4aXN0LCBpdCB3aWxsIGJlIG92ZXJyaWRlZCBieSAke25hbWV9IGRlY29yYXRvci5gKTtcbiAgICAgICAgfVxuXG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIHByaXZhdGVQcm9wTmFtZSwge1xuICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgICAgICAgd3JpdGFibGU6IHRydWVcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGdldCgpOiBzdHJpbmcge1xuICAgICAgICAgICAgICAgIHJldHVybiBvcmlnaW5hbERlc2NyaXB0b3IgJiYgb3JpZ2luYWxEZXNjcmlwdG9yLmdldFxuICAgICAgICAgICAgICAgICAgICA/IG9yaWdpbmFsRGVzY3JpcHRvci5nZXQuYmluZCh0aGlzKSgpXG4gICAgICAgICAgICAgICAgICAgIDogdGhpc1twcml2YXRlUHJvcE5hbWVdO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHNldCh2YWx1ZTogVCk6IHZvaWQge1xuICAgICAgICAgICAgICAgIGlmIChvcmlnaW5hbERlc2NyaXB0b3IgJiYgb3JpZ2luYWxEZXNjcmlwdG9yLnNldCkge1xuICAgICAgICAgICAgICAgICAgICBvcmlnaW5hbERlc2NyaXB0b3Iuc2V0LmJpbmQodGhpcykoZmFsbGJhY2sodmFsdWUpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpc1twcml2YXRlUHJvcE5hbWVdID0gZmFsbGJhY2sodmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgIH1cblxuICAgIHJldHVybiBwcm9wRGVjb3JhdG9yO1xufVxuZXhwb3J0IGZ1bmN0aW9uIElucHV0TnVtYmVyKGZhbGxiYWNrVmFsdWU/OiBOelNhZmVBbnkpOiBOelNhZmVBbnkge1xuICAgIHJldHVybiBwcm9wRGVjb3JhdG9yRmFjdG9yeSgnSW5wdXROdW1iZXInLCAodmFsdWU6IHN0cmluZyB8IG51bWJlcikgPT4gdG9OdW1iZXIodmFsdWUsIGZhbGxiYWNrVmFsdWUpKTtcbn1cbmV4cG9ydCBlbnVtIEFmZml4UmVzcG9uZEV2ZW50cyB7XG4gICAgcmVzaXplID0gJ3Jlc2l6ZScsXG4gICAgc2Nyb2xsID0gJ3Njcm9sbCcsXG4gICAgdG91Y2hzdGFydCA9ICd0b3VjaHN0YXJ0JyxcbiAgICB0b3VjaG1vdmUgPSAndG91Y2htb3ZlJyxcbiAgICB0b3VjaGVuZCA9ICd0b3VjaGVuZCcsXG4gICAgcGFnZXNob3cgPSAncGFnZXNob3cnLFxuICAgIGxvYWQgPSAnTE9BRCdcbn1cbmV4cG9ydCBpbnRlcmZhY2UgU2ltcGxlUmVjdCB7XG4gICAgdG9wOiBudW1iZXI7XG4gICAgbGVmdDogbnVtYmVyO1xuICAgIHdpZHRoPzogbnVtYmVyO1xuICAgIGhlaWdodD86IG51bWJlcjtcbiAgICBib3R0b20/OiBudW1iZXI7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1RhcmdldFdpbmRvdyh0YXJnZXQ6IEVsZW1lbnQgfCBXaW5kb3cpOiB0YXJnZXQgaXMgV2luZG93IHtcbiAgICByZXR1cm4gdHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiYgdGFyZ2V0ID09PSB3aW5kb3c7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRUYXJnZXRSZWN0KHRhcmdldDogRWxlbWVudCB8IFdpbmRvdyk6IFNpbXBsZVJlY3Qge1xuICAgIHJldHVybiAhaXNUYXJnZXRXaW5kb3codGFyZ2V0KVxuICAgICAgICA/IHRhcmdldC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKVxuICAgICAgICA6IHtcbiAgICAgICAgICAgICAgdG9wOiAwLFxuICAgICAgICAgICAgICBsZWZ0OiAwLFxuICAgICAgICAgICAgICBib3R0b206IDBcbiAgICAgICAgICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0RmllbGRWYWx1ZShuYW1lOiBzdHJpbmcsIG1vOiBNZXRhb2JqZWN0RGF0YU1vZGVsLCBjYXB0aW9uPzogYm9vbGVhbik6IHN0cmluZyB7XG4gICAgaWYgKG1vLkdldEZWYWx1ZUJ5Q2FwdGlvbikge1xuICAgICAgICBsZXQgcmVzdWx0ID0gbW8uR2V0RlZhbHVlKG5hbWUpO1xuICAgICAgICBpZiAoY2FwdGlvbikge1xuICAgICAgICAgICAgcmVzdWx0ID0gbW8uR2V0RkNhcHRpb24obmFtZSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGVvZiBjYXB0aW9uID09PSAndW5kZWZpbmVkJyAmJiBtby5Jbmhlcml0YW5jZUluZm8gJiYgIShtby4kRmllbGREaWN0ICYmIG1vLiRGaWVsZERpY3RbbmFtZV0pKSB7XG4gICAgICAgICAgICBjb25zdCB7IFBhcmVudEZpZWxkTmFtZSB9ID0gbW8uSW5oZXJpdGFuY2VJbmZvO1xuICAgICAgICAgICAgY29uc3QgbW9QYXJlbnQgPSBtby5HZXRGVmFsdWUoUGFyZW50RmllbGROYW1lKTtcbiAgICAgICAgICAgIGxldCByZXN1bHQgPSBtb1BhcmVudC5HZXRGVmFsdWUobmFtZSk7XG4gICAgICAgICAgICBpZiAoY2FwdGlvbikge1xuICAgICAgICAgICAgICAgIHJlc3VsdCA9IG1vUGFyZW50LkdldEZDYXB0aW9uKG5hbWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuICAgIGNvbnN0IGZpZWxkTmFtZSA9IG1vLiRGaWVsZERpY3QgJiYgbW8uJEZpZWxkRGljdFtuYW1lXSA/IG1vLiRGaWVsZERpY3RbbmFtZV0gOiBuYW1lO1xuICAgIGxldCB2YWwgPSBtb1tmaWVsZE5hbWVdO1xuICAgIGlmIChjYXB0aW9uKSB7XG4gICAgICAgIGxldCBjYXB0aW9uVmFsID0gbW9bZmllbGROYW1lXT8uJENhcHRpb247XG4gICAgICAgIGlmICh0eXBlb2YgY2FwdGlvblZhbCAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIGlmICghY2FwdGlvblZhbCkge1xuICAgICAgICAgICAgICAgIGNhcHRpb25WYWwgPSBtb1tmaWVsZE5hbWUgKyAnJENhcHRpb24nXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghY2FwdGlvblZhbCkge1xuICAgICAgICAgICAgICAgIGNhcHRpb25WYWwgPSB2YWw7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdmFsID0gY2FwdGlvblZhbDtcbiAgICB9XG4gICAgcmV0dXJuIHZhbDtcbn1cblxuLyogZXNsaW50LWRpc2FibGUgbm8taW52YWxpZC10aGlzICovXG5leHBvcnQgY29uc3QgYXZhaWxhYmxlUHJlZml4ZXMgPSBbJ21veicsICdtcycsICd3ZWJraXQnXTtcblxuZXhwb3J0IGZ1bmN0aW9uIHJlcXVlc3RBbmltYXRpb25GcmFtZVBvbHlmaWxsKCk6IHR5cGVvZiByZXF1ZXN0QW5pbWF0aW9uRnJhbWUge1xuICAgIGxldCBsYXN0VGltZSA9IDA7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChjYWxsYmFjazogRnJhbWVSZXF1ZXN0Q2FsbGJhY2spOiBhbnkge1xuICAgICAgICBjb25zdCBjdXJyVGltZSA9IG5ldyBEYXRlKCkuZ2V0VGltZSgpO1xuICAgICAgICBjb25zdCB0aW1lVG9DYWxsID0gTWF0aC5tYXgoMCwgMTYgLSAoY3VyclRpbWUgLSBsYXN0VGltZSkpO1xuICAgICAgICBjb25zdCBpZCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgY2FsbGJhY2soY3VyclRpbWUgKyB0aW1lVG9DYWxsKTtcbiAgICAgICAgfSwgdGltZVRvQ2FsbCk7XG4gICAgICAgIGxhc3RUaW1lID0gY3VyclRpbWUgKyB0aW1lVG9DYWxsO1xuICAgICAgICByZXR1cm4gaWQ7XG4gICAgfTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBFeGVjdXRlRHluYW1pY0NvbW1hbmQoY29tbWFuZDogeyBJZDogc3RyaW5nIH0sIG1vOiBNZXRhb2JqZWN0RGF0YU1vZGVsIHwgbnVsbCA9IG51bGwpOiB2b2lkIHtcbiAgICBjb25zdCBlID0geyBjb21tYW5kLCBEeW5hbWljU2V0dGluZzogbW8sIE1vOiBtbyB9O1xuICAgIEJhcnNhQXBpLkNvbW1vbi5DdXN0b21Db2RlTWFuYWdlci5SdW5EeW5hbWljQ29tbWFuZChjb21tYW5kLklkLCBlKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBFeGVjdXRlV29ya2Zsb3dDaG9pY2VEZWYoc2NvcGUsIHBhcmFtLCBzdWNjZXNzOiAocmVzdWx0KSA9PiB2b2lkLCBmYWlsZWQ6IChlcnJvcikgPT4gdm9pZCk6IHZvaWQge1xuICAgIEJhcnNhQXBpLkNvbW1vbi5BamF4LkdldFNlcnZlckRhdGEoXG4gICAgICAgICdXb3JrZmxvdzk0LkNob2ljZVNlbGVjdCcsXG4gICAgICAgIHBhcmFtLFxuICAgICAgICAocmVzdWx0KSA9PiB7XG4gICAgICAgICAgICBzdWNjZXNzKHJlc3VsdCk7XG4gICAgICAgIH0sIC8vIHN1Y2Nlc3NcbiAgICAgICAgKGVycm9yKSA9PiB7XG4gICAgICAgICAgICBmYWlsZWQoZXJyb3IpO1xuICAgICAgICB9LCAvLyAgZXJyb3JcbiAgICAgICAgKCkgPT4ge30sIC8vIGRvUmV0dXJuXG4gICAgICAgIHNjb3BlLFxuICAgICAgICB0cnVlXG4gICAgKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBnZXRSZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKTogdHlwZW9mIHJlcXVlc3RBbmltYXRpb25GcmFtZSB7XG4gICAgaWYgKHR5cGVvZiB3aW5kb3cgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIHJldHVybiAoKSA9PiAwO1xuICAgIH1cbiAgICBpZiAod2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSkge1xuICAgICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vdnVlanMvdnVlL2lzc3Vlcy80NDY1XG4gICAgICAgIHJldHVybiB3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lLmJpbmQod2luZG93KTtcbiAgICB9XG5cbiAgICBjb25zdCBwcmVmaXggPSBhdmFpbGFibGVQcmVmaXhlcy5maWx0ZXIoKGtleSkgPT4gYCR7a2V5fVJlcXVlc3RBbmltYXRpb25GcmFtZWAgaW4gd2luZG93KVswXTtcblxuICAgIHJldHVybiBwcmVmaXggPyAod2luZG93IGFzIE56U2FmZUFueSlbYCR7cHJlZml4fVJlcXVlc3RBbmltYXRpb25GcmFtZWBdIDogcmVxdWVzdEFuaW1hdGlvbkZyYW1lUG9seWZpbGwoKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBjYW5jZWxSZXF1ZXN0QW5pbWF0aW9uRnJhbWUoaWQ6IG51bWJlcik6IE56U2FmZUFueSB7XG4gICAgaWYgKHR5cGVvZiB3aW5kb3cgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBpZiAod2luZG93LmNhbmNlbEFuaW1hdGlvbkZyYW1lKSB7XG4gICAgICAgIHJldHVybiB3aW5kb3cuY2FuY2VsQW5pbWF0aW9uRnJhbWUoaWQpO1xuICAgIH1cbiAgICBjb25zdCBwcmVmaXggPSBhdmFpbGFibGVQcmVmaXhlcy5maWx0ZXIoXG4gICAgICAgIChrZXkpID0+IGAke2tleX1DYW5jZWxBbmltYXRpb25GcmFtZWAgaW4gd2luZG93IHx8IGAke2tleX1DYW5jZWxSZXF1ZXN0QW5pbWF0aW9uRnJhbWVgIGluIHdpbmRvd1xuICAgIClbMF07XG5cbiAgICByZXR1cm4gcHJlZml4XG4gICAgICAgID8gKFxuICAgICAgICAgICAgICAod2luZG93IGFzIE56U2FmZUFueSlbYCR7cHJlZml4fUNhbmNlbEFuaW1hdGlvbkZyYW1lYF0gfHxcbiAgICAgICAgICAgICAgKHdpbmRvdyBhcyBOelNhZmVBbnkpW2Ake3ByZWZpeH1DYW5jZWxSZXF1ZXN0QW5pbWF0aW9uRnJhbWVgXVxuICAgICAgICAgIClcbiAgICAgICAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICAgICAgICAuY2FsbCh0aGlzLCBpZClcbiAgICAgICAgOiBjbGVhclRpbWVvdXQoaWQpO1xufVxuXG5leHBvcnQgdHlwZSBFYXN5aW5nRm4gPSAodDogbnVtYmVyLCBiOiBudW1iZXIsIGM6IG51bWJlciwgZDogbnVtYmVyKSA9PiBudW1iZXI7XG5cbmV4cG9ydCBmdW5jdGlvbiBlYXNlSW5PdXRDdWJpYyh0OiBudW1iZXIsIGI6IG51bWJlciwgYzogbnVtYmVyLCBkOiBudW1iZXIpOiBudW1iZXIge1xuICAgIGNvbnN0IGNjID0gYyAtIGI7XG4gICAgbGV0IHR0ID0gdCAvIChkIC8gMik7XG4gICAgaWYgKHR0IDwgMSkge1xuICAgICAgICByZXR1cm4gKGNjIC8gMikgKiB0dCAqIHR0ICogdHQgKyBiO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiAoY2MgLyAyKSAqICgodHQgLT0gMikgKiB0dCAqIHR0ICsgMikgKyBiO1xuICAgIH1cbn1cblxuZXhwb3J0IGludGVyZmFjZSBOelNjcm9sbFRvT3B0aW9ucyB7XG4gICAgLyoqIEFuaW1hdGlvbiBkdXJhdGlvbiwgZGVmYXVsdCBhcyA0NTAgKi9cbiAgICBkdXJhdGlvbj86IG51bWJlcjtcbiAgICAvKiogU2Nyb2xsIGNvbnRhaW5lciwgZGVmYXVsdCBhcyB3aW5kb3cgKi9cbiAgICBlYXNpbmc/OiBFYXN5aW5nRm47XG4gICAgLyoqIFNjcm9sbCBlbmQgY2FsbGJhY2sgKi9cbiAgICBjYWxsYmFjaz8oKTogdm9pZDtcbn1cbmV4cG9ydCBjb25zdCBXb3JkTWltZVR5cGUgPVxuICAgICcuZG9jLC5kb2N4LGFwcGxpY2F0aW9uL21zd29yZCxhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQud29yZHByb2Nlc3NpbmdtbC5kb2N1bWVudCc7XG5leHBvcnQgY29uc3QgSW1hZ2VNaW1lVHlwZSA9ICcuanBlZywuanBnLC5naWYsLnBuZywuYm1wLC50aWYsaW1hZ2UvKic7XG5leHBvcnQgY29uc3QgUGRmTWltZVR5cGUgPSAnLnBkZic7XG5leHBvcnQgY29uc3QgQWxsRmlsZXNNaW1lVHlwZSA9ICcudHh0LC5wcHQsLnBkZiwuKic7XG5leHBvcnQgY29uc3QgVmlkZW9NaW1lVHlwZSA9ICd2aWRlby8qJztcbmV4cG9ydCBjb25zdCBBdWRpb01pbWVUeXBlID0gJ2F1ZGlvLyonO1xuXG5leHBvcnQgZnVuY3Rpb24gQ2hhbmdlTGF5b3V0SW5mb0N1c3RvbVVpKGxheW91dEluZm86IExheW91dFNldHRpbmcsIGNvbXBvbmVudFVpOiBFanJheU9sZ28pOiB2b2lkIHtcbiAgICBsYXlvdXRJbmZvLkZpZWxkVWkuU2V0dGluZy5DdXN0b21VaSA9IGNvbXBvbmVudFVpO1xufVxuIl19
890
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uc3RhbnRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvYmFyc2Etbm92aW4tcmF5LWNvcmUvc3JjL2xpYi9jb25zdGFudHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsb0JBQW9CO0FBQ3BCLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUN2RCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFleEQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLGlCQUFpQixFQUFlLGlCQUFpQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDdEcsT0FBTyxLQUFLLE1BQU0sTUFBTSxVQUFVLENBQUM7QUFJbkMsTUFBTSxDQUFOLElBQVksb0JBS1g7QUFMRCxXQUFZLG9CQUFvQjtJQUM1QixxRkFBbUIsQ0FBQTtJQUNuQixtRkFBa0IsQ0FBQTtJQUNsQixtRkFBa0IsQ0FBQTtJQUNsQiw2RUFBZSxDQUFBO0FBQ25CLENBQUMsRUFMVyxvQkFBb0IsS0FBcEIsb0JBQW9CLFFBSy9CO0FBQ0QsTUFBTSxVQUFVLGVBQWUsQ0FDM0IsZUFBcUMsRUFDckMsT0FBMkIsRUFDM0IsTUFBOEIsRUFDOUIsU0FBb0I7SUFFcEIsSUFBSSxRQUFRLEdBQUcsRUFBRSxDQUFDO0lBQ2xCLFFBQVEsZUFBZSxFQUFFLENBQUM7UUFDdEIsS0FBSyxvQkFBb0IsQ0FBQyxlQUFlO1lBQ3JDLFFBQVEsR0FBRyxlQUFlLENBQUM7WUFDM0IsTUFBTTtRQUNWLEtBQUssb0JBQW9CLENBQUMsY0FBYztZQUNwQyxRQUFRLEdBQUcsb0JBQW9CLENBQUM7WUFDaEMsTUFBTTtRQUNWLEtBQUssb0JBQW9CLENBQUMsY0FBYztZQUNwQyxRQUFRLEdBQUcsUUFBUSxDQUFDO1lBQ3BCLE1BQU07UUFDVixLQUFLLG9CQUFvQixDQUFDLFdBQVc7WUFDakMsUUFBUSxHQUFHLGNBQWMsQ0FBQztZQUMxQixNQUFNO0lBQ2Qs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X2lzTnVtYmVyVmFsdWUgfSBmcm9tICdAYW5ndWxhci9jZGsvY29lcmNpb24nO1xuaW1wb3J0IHsgQmFyc2FBcGkgfSBmcm9tICcuL2Fic3RyYWN0LWNsYXNzZXMvYmFyc2EtYXBpJztcbmltcG9ydCB7XG4gICAgQWJicmV2YXRpb25EZXZpY2VTaXplLFxuICAgIENvbFNldHRpbmcsXG4gICAgRWpyYXlPbGdvLFxuICAgIEZvcm1TZXR0aW5nLFxuICAgIEdlbmVyYWxDb250cm9sSW5mb01vZGVsLFxuICAgIEdyaWRTZXR0aW5nLFxuICAgIExheW91dFNldHRpbmcsXG4gICAgTWVudUl0ZW0sXG4gICAgTWV0YW9iamVjdERhdGFNb2RlbCxcbiAgICBSZXBvcnRWaWV3Q29sdW1uLFxuICAgIFNvcnRTZXR0aW5nLFxuICAgIFRyZWVOb2RlT2JqXG59IGZyb20gJy4vYWJzdHJhY3QtY2xhc3Nlcy9tb2RlbHMnO1xuaW1wb3J0IHsgRGF0ZUhpanJpU2VydmljZSwgRGF0ZU1pbGFkaVNlcnZpY2UsIERhdGVTZXJ2aWNlLCBEYXRlU2hhbXNpU2VydmljZSB9IGZyb20gJy4vZGF0ZS1zZXJ2aWNlcyc7XG5pbXBvcnQgKiBhcyBEZXZpY2UgZnJvbSAnLi9kZXZpY2UnO1xuaW1wb3J0IHsgTG9nU2VydmljZSB9IGZyb20gJy4vc2VydmljZXMvbG9nLnNlcnZpY2UnO1xuaW1wb3J0IHsgUmVuZGVyZXIyIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmV4cG9ydCBlbnVtIFRhYmxlSGVhZGVyV2lkdGhNb2RlIHtcbiAgICBGaXRUb1Jvd0NvbnRlbnQgPSAxLFxuICAgIEZpdFRvQ29udGFpbmVyID0gMixcbiAgICBGcmVlQ29sdW1uU2l6ZSA9IDMsXG4gICAgQ29sdW1uV2lkdGggPSA0XG59XG5leHBvcnQgZnVuY3Rpb24gc2V0VGFibGVUaFdpZHRoKFxuICAgIHRhYmxlSGVhZGVyTW9kZTogVGFibGVIZWFkZXJXaWR0aE1vZGUsXG4gICAgY29sdW1uczogUmVwb3J0Vmlld0NvbHVtbltdLFxuICAgIHRoTGlzdDogSFRNTFRhYmxlQ2VsbEVsZW1lbnRbXSxcbiAgICByZW5kZXJlcjI6IFJlbmRlcmVyMlxuKTogdm9pZCB7XG4gICAgbGV0IHByb3BOYW1lID0gJyc7XG4gICAgc3dpdGNoICh0YWJsZUhlYWRlck1vZGUpIHtcbiAgICAgICAgY2FzZSBUYWJsZUhlYWRlcldpZHRoTW9kZS5GaXRUb1Jvd0NvbnRlbnQ6XG4gICAgICAgICAgICBwcm9wTmFtZSA9ICckRml0VG9Db250ZW50JztcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFRhYmxlSGVhZGVyV2lkdGhNb2RlLkZpdFRvQ29udGFpbmVyOlxuICAgICAgICAgICAgcHJvcE5hbWUgPSAnJEZpdENvbnRhaW5lcldpZHRoJztcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFRhYmxlSGVhZGVyV2lkdGhNb2RlLkZyZWVDb2x1bW5TaXplOlxuICAgICAgICAgICAgcHJvcE5hbWUgPSAnJFdpZHRoJztcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFRhYmxlSGVhZGVyV2lkdGhNb2RlLkNvbHVtbldpZHRoOlxuICAgICAgICAgICAgcHJvcE5hbWUgPSAnJENvbHVtbldpZHRoJztcbiAgICAgICAgICAgIGJyZWFrO1xuICAgIH1cbiAgICB0aExpc3QuZm9yRWFjaCgoYywgaSkgPT4ge1xuICAgICAgICBjb25zdCB3eCA9IF9jYWxjV2lkdGhPZlRoKGNvbHVtbnNbaV0sIGksIHByb3BOYW1lLCB0aExpc3QpO1xuICAgICAgICB3eCAmJiByZW5kZXJlcjIuc2V0U3R5bGUoYywgJ3dpZHRoJywgd3gpO1xuICAgIH0pO1xufVxuZnVuY3Rpb24gX2NhbGNXaWR0aE9mVGgoY29sdW1uOiBSZXBvcnRWaWV3Q29sdW1uLCBpOiBudW1iZXIsIHByb3BOYW1lOiBzdHJpbmcsIHRoTGlzdCk6IHN0cmluZyB7XG4gICAgaWYgKCFjb2x1bW4pIHtcbiAgICAgICAgcmV0dXJuICcnO1xuICAgIH1cbiAgICBpZiAoY29sdW1uLiRJc0ltYWdlT3JpY29uICYmIGkgPCB0aExpc3QubGVuZ3RoIC0gMSkge1xuICAgICAgICBjb25zdCBmaWVsZFR5cGVJZCA9ICtjb2x1bW4uRmllbGRUeXBlSWQ7XG4gICAgICAgIGlmIChmaWVsZFR5cGVJZCA9PT0gNiB8fCBmaWVsZFR5cGVJZCA9PT0gNSB8fCBmaWVsZFR5cGVJZCA9PT0gNDIpIHtcbiAgICAgICAgICAgIHJldHVybiAnMjRweCc7XG4gICAgICAgIH1cbiAgICAgICAgZGVidWdnZXI7XG4gICAgfVxuICAgIHJldHVybiBjb2x1bW4uJElzSW1hZ2VPcmljb24gJiYgaSA8IHRoTGlzdC5sZW5ndGggLSAxID8gJzQycHgnIDogY29sdW1uW3Byb3BOYW1lXTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBjYWxjdWxhdGVDb2x1bW5Db250ZW50KGNvbHVtbnM6IFJlcG9ydFZpZXdDb2x1bW5bXSwgbW9EYXRhTGlzdDogTWV0YW9iamVjdERhdGFNb2RlbFtdKTogdm9pZCB7XG4gICAgY29sdW1ucy5mb3JFYWNoKChjb2x1bW4pID0+IHtcbiAgICAgICAgc2V0Q29sdW1uV2lkdGhCeU1heE1vQ29udGVudFdpZHRoKG1vRGF0YUxpc3QsIGNvbHVtbik7XG4gICAgfSk7XG59XG5leHBvcnQgZnVuY3Rpb24gY2FsY3VsYXRlQ29sdW1uV2lkdGgoXG4gICAgY29udGFpbmVyOiBIVE1MRWxlbWVudCxcbiAgICBjb2x1bW5zOiBSZXBvcnRWaWV3Q29sdW1uW10sXG4gICAgbW9EYXRhTGlzdDogTWV0YW9iamVjdERhdGFNb2RlbFtdLFxuICAgIGRpc2FibGVDb250ZXh0TWVudU92ZXJmbG93OiBib29sZWFuLFxuICAgIGNvbnRleHRNZW51SXRlbXM6IE1lbnVJdGVtW11cbik6IHsgY29sdW1uczogUmVwb3J0Vmlld0NvbHVtbltdOyBjb250ZXh0TWVudVdpZHRoOiBudW1iZXIgfSB7XG4gICAgY29sdW1uc1xuICAgICAgICAuZmlsdGVyKChjKSA9PiAhYy5IaWRkZW4pXG4gICAgICAgIC5mb3JFYWNoKChjb2x1bW4pID0+IHtcbiAgICAgICAgICAgIHNldENvbHVtbkNhcHRpb25XaWR0aChjb2x1bW4pO1xuICAgICAgICB9KTtcbiAgICBjb25zdCBjb250ZXh0TWVudVdpZHRoID0gY2FsY0NvbnRleHRNZW51V2lkdGgoY29udGV4dE1lbnVJdGVtcywgZGlzYWJsZUNvbnRleHRNZW51T3ZlcmZsb3cpO1xuICAgIHJldHVybiB7IGNvbHVtbnM6IFsuLi5jb2x1bW5zXSwgY29udGV4dE1lbnVXaWR0aCB9O1xufVxuZnVuY3Rpb24gc2V0Q29sdW1uQ2FwdGlvbldpZHRoKGNvbHVtbjogUmVwb3J0Vmlld0NvbHVtbik6IG51bWJlciB7XG4gICAgaWYgKGNvbHVtbi4kQ29sdW1uV2lkdGhOdW0pIHtcbiAgICAgICAgcmV0dXJuIGNvbHVtbi4kQ29sdW1uV2lkdGhOdW07XG4gICAgfVxuICAgIGNvbnN0IGNvbENhcHRpb25XaWR0aCA9IG1lYXN1cmVUZXh0KGNvbHVtbi5BbGlhcykgKyAxNiArIDEwO1xuICAgIGNvbHVtbi4kQ29sdW1uV2lkdGhOdW0gPSBNYXRoLmNlaWwoY29sQ2FwdGlvbldpZHRoKTtcbiAgICBjb2x1bW4uJENvbHVtbldpZHRoID0gYCR7Y29sdW1uLiRDb2x1bW5XaWR0aE51bX1weGA7XG4gICAgcmV0dXJuIGNvbENhcHRpb25XaWR0aDtcbn1cbmV4cG9ydCBmdW5jdGlvbiBzZXRDb2x1bW5XaWR0aEJ5TWF4TW9Db250ZW50V2lkdGgobW9EYXRhTGlzdDogTWV0YW9iamVjdERhdGFNb2RlbFtdLCBjb2x1bW46IFJlcG9ydFZpZXdDb2x1bW4pIHtcbiAgICBjb25zdCB3aWR0aCA9IGNhbGN1bGF0ZU1vRGF0YUxpc3RDb250ZW50V2lkdGhCeUNvbHVtbk5hbWUobW9EYXRhTGlzdCwgY29sdW1uKTtcbiAgICBjb2x1bW4uJENvbnRlbnRXaWR0aCA9IGAke01hdGguY2VpbCh3aWR0aCl9cHhgO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY2FsY3VsYXRlTW9EYXRhTGlzdENvbnRlbnRXaWR0aEJ5Q29sdW1uTmFtZShcbiAgICBtb0RhdGFMaXN0OiBNZXRhb2JqZWN0RGF0YU1vZGVsW10sXG4gICAgY29sdW1uOiBSZXBvcnRWaWV3Q29sdW1uXG4pOiBudW1iZXIge1xuICAgIGxldCBtYXhXaWR0aCA9IDA7XG4gICAgbW9EYXRhTGlzdC5mb3JFYWNoKChjLCBpbmRleCkgPT4ge1xuICAgICAgICBjb25zdCBjYXB0aW9uID0gZ2V0Q29sdW1uVmFsdWVPZk1vRGF0YUxpc3QoY29sdW1uLk5hbWUsIGMsIHVuZGVmaW5lZCwgdHJ1ZSk7XG4gICAgICAgIGNvbnN0IGNhcHRpb25XaWR0aCA9IG1lYXN1cmVUZXh0KGNhcHRpb24pICsgMTY7XG4gICAgICAgIGlmIChtYXhXaWR0aCA8IGNhcHRpb25XaWR0aCkge1xuICAgICAgICAgICAgbWF4V2lkdGggPSBjYXB0aW9uV2lkdGg7XG4gICAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gTWF0aC5jZWlsKG1heFdpZHRoKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBjYWxjdWxhdGVGcmVlQ29sdW1uU2l6ZShjb2x1bW5zOiBSZXBvcnRWaWV3Q29sdW1uW10pOiBSZXBvcnRWaWV3Q29sdW1uW10ge1xuICAgIGxldCBhbGxDb2xXaWR0aCA9IDA7XG4gICAgY29uc3QgdmlzaWJsZUNvbHVtbnMgPSBjb2x1bW5zLmZpbHRlcigoYykgPT4gIWMuSGlkZGVuKTtcblxuICAgIHZpc2libGVDb2x1bW5zLmZvckVhY2goKGNvbCwgaW5kZXgpID0+IHtcbiAgICAgICAgY29uc3QgeCA9IHNldENvbHVtbkNhcHRpb25XaWR0aChjb2wpO1xuICAgICAgICBjb25zdCB3ID0gY29sLldpZHRoICYmIGNvbC5XaWR0aCA+IDAgPyBjb2wuV2lkdGggOiB4O1xuICAgICAgICBhbGxDb2xXaWR0aCArPSB3O1xuICAgICAgICBjb2wuJFdpZHRoID0gaW5kZXggPT09IHZpc2libGVDb2x1bW5zLmxlbmd0aCAtIDEgPyAnMTAwJScgOiBgJHt3fXB4YDtcbiAgICB9KTtcbiAgICByZXR1cm4gWy4uLmNvbHVtbnNdO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGNhbGN1bGF0ZUNvbHVtbldpZHRoRml0VG9Db250YWluZXIoXG4gICAgY29udGFpbmVyOiBIVE1MRWxlbWVudCxcbiAgICBjYW5WaWV3OiBib29sZWFuLFxuICAgIGRpc2FibGVDb250ZXh0TWVudU92ZXJmbG93OiBib29sZWFuLFxuICAgIGNvbnRleHRNZW51SXRlbXM6IE1lbnVJdGVtW10sXG4gICAgY29sdW1uczogUmVwb3J0Vmlld0NvbHVtbltdXG4pOiB7IGNvbHVtbnM6IFJlcG9ydFZpZXdDb2x1bW5bXTsgY29udGV4dE1lbnVXaWR0aDogbnVtYmVyIH0ge1xuICAgIGxldCBoYXNEZWZpbmVkV2lkdGggPSB0cnVlO1xuICAgIGxldCBjb250YWluZXJXaWR0aCA9IGNvbHVtbnMubWFwKChjKSA9PiBjLldpZHRoKS5yZWR1Y2UoKGEsIGIpID0+IGEgKyBiLCAwKTtcbiAgICBpZiAoY29udGFpbmVyV2lkdGggPT09IDApIHtcbiAgICAgICAgY29udGFpbmVyV2lkdGggPSBjb250YWluZXIuY2xpZW50V2lkdGg7XG4gICAgICAgIGhhc0RlZmluZWRXaWR0aCA9IGZhbHNlO1xuICAgIH1cbiAgICBsZXQgYWxsQ29sV2lkdGggPSAwO1xuICAgIGNvbnN0IGlzTW9iaWxlID0gZ2V0RGV2aWNlSXNNb2JpbGUoKTtcbiAgICBsZXQgcmVtYWluUGVyY2VudCA9IDA7XG4gICAgY29uc3QgbENvbHMgPSBjb2x1bW5zLmZpbHRlcigoYywgaSkgPT4gIWMuSGlkZGVuICYmICEoaSA9PT0gMCAmJiBjLkZpZWxkVHlwZUlkID09PSA0MSkpO1xuICAgIGxDb2xzLmZvckVhY2goKGNvbCwgaW5kZXgpID0+IHtcbiAgICAgICAgLy8g2Kfar9ixINmB24zZhNivINin2LIg2YbZiNi5INix2YbaryDZhtio2YjYryDZiCDYs9iq2YjZhiDYp9mI2YQg2YfZhSDZhtio2YjYr1xuICAgICAgICBjb25zdCB4ID0gc2V0Q29sdW1uQ2FwdGlvbldpZHRoKGNvbCk7XG4gICAgICAgIGNvbnN0IHcgPSBjb2wuV2lkdGggJiYgY29sLldpZHRoID4gMCA/IGNvbC5XaWR0aCA6IHg7XG4gICAgICAgIGFsbENvbFdpZHRoICs9IHc7XG4gICAgICAgIGNvbnN0IHBlcmNlbnQgPSAodyAvIGNvbnRhaW5lcldpZHRoKSAqIDEwMDtcbiAgICAgICAgY29sLiRGaXRDb250YWluZXJXaWR0aCA9IGlzTW9iaWxlIHx8IGNvbC5XaWR0aCA9PT0gMCA/ICcxMDAlJyA6IGAke3BlcmNlbnR9JWA7XG5cbiAgICAgICAgaWYgKGluZGV4ID09PSBsQ29scy5sZW5ndGggLSAxICYmICFoYXNEZWZpbmVkV2lkdGgpIHtcbiAgICAgICAgICAgIGNvbC4kRml0Q29udGFpbmVyV2lkdGggPSAxMDAgLSByZW1haW5QZXJjZW50ICsgJyUnO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmVtYWluUGVyY2VudCArPSBwZXJjZW50O1xuICAgICAgICB9XG4gICAgfSk7XG4gICAgLy8gY29uc3QgY2FuVmlld0J1dHRvbldpZHRoID0gY2FuVmlldyA/IDQwIDogMDtcbiAgICAvLyBjb25zdCBzZWxlY3Rpb25XaWR0aCA9IDMwO1xuXG4gICAgY29uc3QgY29udGV4dE1lbnVXaWR0aCA9IGNhbGNDb250ZXh0TWVudVdpZHRoKGNvbnRleHRNZW51SXRlbXMsIGRpc2FibGVDb250ZXh0TWVudU92ZXJmbG93KTtcbiAgICAvLyBjb25zdCBjb250YWluZXJXaWR0aEFsbENvbHVtbnMgPSBjb250YWluZXJXaWR0aCAtIHNlbGVjdGlvbldpZHRoIC0gY2FuVmlld0J1dHRvbldpZHRoIC0gY29udGV4dE1lbnVXaWR0aCAtIDEyO1xuICAgIC8vIGFsbENvbFdpZHRoICs9IGNvbnRhaW5lcldpZHRoQWxsQ29sdW1ucyAtIGFsbENvbFdpZHRoOy8vINmF2K3Yp9iz2KjZhyDYotiu2LHbjNmGINiz2KrZiNmGLtqG2YjZhiB3aWR0aCDZhdi02K7YtduMINmG2K/Yp9ix2K9cbiAgICAvLyBjb2x1bW5zXG4gICAgLy8gICAgIC5maWx0ZXIoKGMpID0+ICFjLkhpZGRlbilcbiAgICAvLyAgICAgLmZvckVhY2goKGNvbCkgPT4ge1xuICAgIC8vICAgICAgICAgY29uc3QgbmV3V2lkdGggPSBNYXRoLmNlaWwoKGNvbnRhaW5lcldpZHRoQWxsQ29sdW1ucyAqIGNvbC5XaWR0aCkgLyBhbGxDb2xXaWR0aCk7XG4gICAgLy8gICAgICAgICBjb2wuV2lkdGggPSBuZXdXaWR0aDtcbiAgICAvLyAgICAgICAgIGNvbC4kRml0Q29udGFpbmVyV2lkdGggPSBgJHtuZXdXaWR0aH1weGA7XG4gICAgLy8gICAgIH0pO1xuICAgIHJldHVybiB7IGNvbHVtbnM6IFsuLi5jb2x1bW5zXSwgY29udGV4dE1lbnVXaWR0aCB9O1xufVxuZXhwb3J0IGZ1bmN0aW9uIGNhbGNDb250ZXh0TWVudVdpZHRoKGNvbnRleHRNZW51SXRlbXM6IE1lbnVJdGVtW10sIGRpc2FibGVDb250ZXh0TWVudU92ZXJmbG93OiBib29sZWFuKTogbnVtYmVyIHtcbiAgICBsZXQgY29udGV4dE1lbnVXaWR0aCA9IGNvbnRleHRNZW51SXRlbXMubGVuZ3RoID4gMSA/IDQwIDogMDtcbiAgICBjb25zdCBidG5QYWRkaW5nID0gMTQgKyAyICsgMTA7IC8vIHBhZGRpbmcgKyBib3JkZXIgKyBpZiB0ZXh0IGlzIG92ZXJmbG93ZWQgdGhlbiBhZGQgNSBwaXhlbC5zbyB3ZSBhbHdheXMgNSBweCB0byBpdC5cbiAgICBjb25zdCB0ZFBhZGRpbmcgPSAxNSArIDE7IC8vIHBhZGRpbmcgKyBib3JkZXJcbiAgICBjb25zdCBidXR0b25JY29uV2lkdGggPSAxNiArIDY7IC8vIHNpemUgKyBtYXJnaW5cbiAgICBpZiAoZGlzYWJsZUNvbnRleHRNZW51T3ZlcmZsb3cgfHwgY29udGV4dE1lbnVJdGVtcy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgY29udGV4dE1lbnVXaWR0aCA9IDA7XG4gICAgICAgIGNvbnRleHRNZW51SXRlbXMuZm9yRWFjaCgoYykgPT4ge1xuICAgICAgICAgICAgY29udGV4dE1lbnVXaWR0aCArPSBtZWFzdXJlVGV4dChjLnRleHQpICsgYnRuUGFkZGluZyArIHRkUGFkZGluZztcbiAgICAgICAgICAgIGNvbnRleHRNZW51V2lkdGggKz0gYy5pY29uID8gYnV0dG9uSWNvbldpZHRoIDogMDtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBjb250ZXh0TWVudVdpZHRoO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGlzSW5Mb2NhbE1vZGUoKTogYm9vbGVhbiB7XG4gICAgY29uc3Qgb2ZmbGluY2VBY3RpdmUgPSBCYXJzYUFwaS5Db21tb24uVXRpbC5UcnlHZXRWYWx1ZShCYXJzYUFwaS5PZmZsaW5lLCAnU2V0dGluZ3MuSXNBY3RpdmUnLCBmYWxzZSk7XG4gICAgY29uc3Qgb2ZmbGluZVRydWUgPSBCYXJzYUFwaS5Db21tb24uVXRpbC5UcnlHZXRWYWx1ZShCYXJzYUFwaS5PZmZsaW5lLCAnU2V0dGluZ3MuSXNPZmZsaW5lJywgZmFsc2UpO1xuICAgIHJldHVybiBvZmZsaW5jZUFjdGl2ZSAmJiBvZmZsaW5lVHJ1ZTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBnZXRMYWJlbFdpZHRoKGl0ZW06IGFueSk6IG51bWJlciB8IHVuZGVmaW5lZCB7XG4gICAgY29uc3QgZmllbGRYdHlwZSA9IGl0ZW0uRmllbGRVaT8ub3JpZ2luYWxYdHlwZTtcbiAgICBpZiAoXG4gICAgICAgIGZpZWxkWHR5cGUgPT09ICdVaS5CdXR0b24nIHx8XG4gICAgICAgIGZpZWxkWHR5cGUgPT09ICdVaS5DaGVja0JveCcgfHxcbiAgICAgICAgIWl0ZW0uVGV4dFZpc2libGUgfHxcbiAgICAgICAgaXRlbS5DYXB0aW9uU2V0dGluZz8uQWxpZ25Nb2RlID09PSAnQXV0b1NpemUnXG4gICAgKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgbGV0IGxhYmVsQ2FwdGlvbiA9IGl0ZW0uQ2FwdGlvbjtcbiAgICBpZiAobGFiZWxDYXB0aW9uID09PSAnJnp3bmo7Jykge1xuICAgICAgICBsYWJlbENhcHRpb24gPSAnJztcbiAgICB9XG4gICAgbGFiZWxDYXB0aW9uID0gbGFiZWxDYXB0aW9uICsgJyAqICc7XG4gICAgLy8gaWYgKGl0ZW0uRmllbGRVaT8uU2V0dGluZz8uSXNNYW5kYXRvcnkpIHtcbiAgICAvLyAgICAgaWYgKGxhYmVsQ2FwdGlvbi5pbmRleE9mKCcqJykgPCAwKSB7XG4gICAgLy8gICAgIH1cbiAgICAvLyB9IGVsc2Uge1xuICAgIC8vICAgICBsYWJlbENhcHRpb24gPSBsYWJlbENhcHRpb24ucmVwbGFjZSgnKicsICcnKTtcbiAgICAvLyB9XG4gICAgbGFiZWxDYXB0aW9uICs9ICc6JztcbiAgICBjb25zdCBsYWJlbFdpZHRoID0gbWVhc3VyZVRleHQobGFiZWxDYXB0aW9uKTtcbiAgICBsZXQgbGFiZWxXaXRoUGFkZGluZyA9IGxhYmVsV2lkdGggKyAxMDtcbiAgICBpZiAoaXRlbS5GaWVsZFVpPy5TZXR0aW5nPy5GaWVsZEljb24pIHtcbiAgICAgICAgbGFiZWxXaXRoUGFkZGluZyArPSAyNDtcbiAgICB9XG4gICAgaWYgKGl0ZW0uRmllbGRVaT8uU2V0dGluZz8uSGVscERlc2NyaXB0aW9uKSB7XG4gICAgICAgIGxhYmVsV2l0aFBhZGRpbmcgKz0gMjQ7XG4gICAgfVxuXG4gICAgY29uc3QgY29udHJvbFdpZHRoID0gTWF0aC5jZWlsKGxhYmVsV2l0aFBhZGRpbmcpO1xuICAgIHJldHVybiBjb250cm9sV2lkdGg7XG59XG5leHBvcnQgZnVuY3Rpb24gZ2V0Q29sdW1uVmFsdWVPZk1vRGF0YUxpc3QoXG4gICAgbmFtZTogc3RyaW5nLFxuICAgIG1vOiBNZXRhb2JqZWN0RGF0YU1vZGVsLFxuICAgIENvbHVtbnM/OiB7IFtrZXk6IHN0cmluZ106IGFueTsgTmFtZTogc3RyaW5nOyBDYXB0aW9uOiBzdHJpbmcgfVtdLFxuICAgIGNhcHRpb24/OiBib29sZWFuXG4pOiBhbnkge1xuICAgIGxldCBmaWVsZE5hbWUgPSBDb2x1bW5zID8gQ29sdW1ucy5maW5kKChjKSA9PiBjLk5hbWUgPT09IG5hbWUgfHwgYy5BbGlhcyA9PT0gbmFtZSk/Lk5hbWUgOiBuYW1lO1xuICAgIGlmICghZmllbGROYW1lKSB7XG4gICAgICAgIGZpZWxkTmFtZSA9IG5hbWU7XG4gICAgfVxuICAgIGxldCB2YWwgPSBmaWVsZE5hbWUgPyBtb1tmaWVsZE5hbWVdIDogdW5kZWZpbmVkO1xuICAgIGlmIChjYXB0aW9uKSB7XG4gICAgICAgIGxldCBjYXB0aW9uVmFsID0gZmllbGROYW1lID8gbW9bZmllbGROYW1lXT8uJENhcHRpb24gOiB1bmRlZmluZWQ7XG4gICAgICAgIGlmICh0eXBlb2YgY2FwdGlvblZhbCA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIGNhcHRpb25WYWwgPSBtb1tmaWVsZE5hbWUgKyAnJENhcHRpb24nXTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZW9mIGNhcHRpb25WYWwgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICBjYXB0aW9uVmFsID0gdmFsO1xuICAgICAgICB9XG4gICAgICAgIHZhbCA9IGNhcHRpb25WYWw7XG4gICAgfVxuICAgIHJldHVybiB2YWw7XG59XG5leHBvcnQgZnVuY3Rpb24gdGhyb3dJZkFscmVhZHlMb2FkZWQocGFyZW50TW9kdWxlOiBhbnksIG1vZHVsZU5hbWU6IHN0cmluZyk6IHZvaWQge1xuICAgIGlmIChwYXJlbnRNb2R1bGUpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGAke21vZHVsZU5hbWV9IGhhcyBhbHJlYWR5IGJlZW4gbG9hZGVkLiBJbXBvcnQgJHttb2R1bGVOYW1lfSBpbiB0aGUgQXBwTW9kdWxlIG9ubHkuYCk7XG4gICAgfVxufVxuY29uc3QgbWVhc3VyZVRleHRWYWx1ZXM6IFJlY29yZDxzdHJpbmcsIG51bWJlcj4gPSB7fTtcbmV4cG9ydCBmdW5jdGlvbiBtZWFzdXJlVGV4dCh0ZXh0OiBzdHJpbmcsIGZvbnRTaXplPzogc3RyaW5nKTogbnVtYmVyIHtcbiAgICBpZiAobWVhc3VyZVRleHRWYWx1ZXNbdGV4dF0pIHtcbiAgICAgICAgcmV0dXJuIG1lYXN1cmVUZXh0VmFsdWVzW3RleHRdO1xuICAgIH1cblxuICAgIGNvbnN0IG1lYXN1cmVUZXh0RG9tID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21lYXN1cmVUZXh0JykgYXMgSFRNTENhbnZhc0VsZW1lbnQ7XG4gICAgaWYgKCFtZWFzdXJlVGV4dERvbSkge1xuICAgICAgICByZXR1cm4gLTE7XG4gICAgfVxuXG4gICAgY29uc3QgY3R4ID0gbWVhc3VyZVRleHREb20uZ2V0Q29udGV4dCgnMmQnKSBhcyBhbnk7XG4gICAgZm9udFNpemUgPSBmb250U2l6ZSA/IGZvbnRTaXplIDogJzAuODg1cmVtJztcbiAgICBjdHguZm9udCA9IGBub3JtYWwgJHtmb250U2l6ZX0gSVJBTllla2FuRGlnaXRzYDtcbiAgICBjb25zdCB4ID0gY3R4Lm1lYXN1cmVUZXh0KHRleHQpLndpZHRoO1xuICAgIG1lYXN1cmVUZXh0VmFsdWVzW3RleHRdID0geDtcbiAgICByZXR1cm4geDtcbn1cbmV4cG9ydCBmdW5jdGlvbiBnZW5yYXRlSW5saW5lTW9JZCgpIHtcbiAgICByZXR1cm4gKEJhcnNhQXBpLmlkR2VuZXJhdG9yLS0pLnRvU3RyaW5nKCk7XG59XG5leHBvcnQgZnVuY3Rpb24gZW51bVZhbHVlVG9TdHJpbmdTaXplKHZhbHVlOiBzdHJpbmcsIGRlZmF1bHRWYWx1ZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBzd2l0Y2ggKHZhbHVlKSB7XG4gICAgICAgIGNhc2UgJzEnOlxuICAgICAgICAgICAgcmV0dXJuICdzJztcbiAgICAgICAgY2FzZSAnMic6XG4gICAgICAgICAgICByZXR1cm4gJ20nO1xuICAgICAgICBjYXNlICczJzpcbiAgICAgICAgICAgIHJldHVybiAnbCc7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICByZXR1cm4gZGVmYXVsdFZhbHVlO1xuICAgIH1cbn1cbmV4cG9ydCBmdW5jdGlvbiBleGVjdXRlVWx2Q29tbWFuZEhhbmRsZXIoYnV0dG9uLCBvcHRpb25zPyk6IHZvaWQge1xuICAgIGlmIChidXR0b24uQ29tbWFuZCAmJiBidXR0b24uQ29tbWFuZC5IYW5kbGVyKSB7XG4gICAgICAgIGJ1dHRvbi5Db21tYW5kLkhhbmRsZXIoYnV0dG9uLCBvcHRpb25zKTtcbiAgICB9IGVsc2UgaWYgKGJ1dHRvbi5oYW5kbGVyKSB7XG4gICAgICAgIGJ1dHRvbi5oYW5kbGVyLmJpbmQoYnV0dG9uLnNjb3BlKShidXR0b24sIG9wdGlvbnMpO1xuICAgIH1cbn1cbmV4cG9ydCBmdW5jdGlvbiBnZXRVbmlxdWVJZChwYXJ0czogbnVtYmVyKTogc3RyaW5nIHtcbiAgICBjb25zdCBzdHJpbmdBcnI6IHN0cmluZ1tdID0gW107XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwYXJ0czsgaSsrKSB7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1iaXR3aXNlXG4gICAgICAgIGNvbnN0IFM0ID0gKCgoMSArIE1hdGgucmFuZG9tKCkpICogMHgxMDAwMCkgfCAwKS50b1N0cmluZygxNik7XG4gICAgICAgIGNvbnN0IFM0Xzogc3RyaW5nID0gUzQubGVuZ3RoID4gMCA/IFM0LnN1YnN0cmluZygxKSA6ICcnO1xuICAgICAgICBzdHJpbmdBcnIucHVzaChTNF8pO1xuICAgIH1cbiAgICByZXR1cm4gc3RyaW5nQXJyLmpvaW4oJy0nKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldERhdGVTZXJ2aWNlKGxvZ1NlcnZpY2U6IExvZ1NlcnZpY2UsIGN1bHR1cmU/KTogRGF0ZVNlcnZpY2Uge1xuICAgIGNvbnN0IGRlZmF1bHRDdWx0dXJlID0gY3VsdHVyZSA/PyBCYXJzYUFwaS5Mb2dpbkZvcm1EYXRhLkN1bHR1cmU7XG4gICAgc3dpdGNoIChkZWZhdWx0Q3VsdHVyZSkge1xuICAgICAgICBjYXNlICdmYS1JUic6XG4gICAgICAgICAgICByZXR1cm4gbmV3IERhdGVTaGFtc2lTZXJ2aWNlKGxvZ1NlcnZpY2UpO1xuICAgICAgICBjYXNlICdhci1BRSc6XG4gICAgICAgICAgICByZXR1cm4gbmV3IERhdGVIaWpyaVNlcnZpY2UobG9nU2VydmljZSk7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICByZXR1cm4gbmV3IERhdGVNaWxhZGlTZXJ2aWNlKGxvZ1NlcnZpY2UpO1xuICAgIH1cbn1cbmV4cG9ydCBmdW5jdGlvbiBnZXRBbGxJdGVtc1BlckNoaWxkcmVuKFxuICAgIGl0ZW06IFRyZWVOb2RlT2JqLFxuICAgIGxldmVsOiBudW1iZXIsXG4gICAgYXJyYXk6IE1ldGFvYmplY3REYXRhTW9kZWxbXSxcbiAgICBwYXJlbnROb2RlOiBUcmVlTm9kZU9iaixcbiAgICBhdXRvT3BlbkxldmVsczogbnVtYmVyXG4pOiBhbnkge1xuICAgIGxldCBuZXdJdGVtOiBhbnkgPSBpdGVtO1xuICAgIGlmIChsZXZlbCA+IDApIHtcbiAgICAgICAgaXRlbS5wYXJlbnROb2RlID0gcGFyZW50Tm9kZTtcbiAgICAgICAgaXRlbS5sZXZlbCA9IGxldmVsO1xuICAgICAgICBpdGVtLmlzRXhwYW5kID0gaXRlbS5pc0V4cGFuZCA/PyBhdXRvT3BlbkxldmVscyA+IGxldmVsO1xuICAgICAgICBpdGVtLnZpc2liaWxpdHkgPSBpdGVtLnBhcmVudE5vZGUuaXNFeHBhbmQ7XG4gICAgICAgIGFycmF5LnB1c2gobmV3SXRlbSk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgbmV3SXRlbSA9IGl0ZW07XG4gICAgICAgIG5ld0l0ZW0uaXNFeHBhbmQgPSB0cnVlO1xuICAgIH1cblxuICAgIGlmIChpdGVtLmNoaWxkcmVuKSB7XG4gICAgICAgIGl0ZW0uY2hpbGRyZW4uZm9yRWFjaCgoY2hpbGQpID0+IHNldE9uZURlcHRoTGV2ZWwoY2hpbGQpKTtcbiAgICAgICAgcmV0dXJuIGl0ZW0uY2hpbGRyZW4ubWFwKChpKSA9PiBnZXRBbGxJdGVtc1BlckNoaWxkcmVuKGksIGxldmVsICsgMSwgYXJyYXksIG5ld0l0ZW0sIGF1dG9PcGVuTGV2ZWxzKSk7XG4gICAgfVxufVxuZXhwb3J0IGZ1bmN0aW9uIHNldE9uZURlcHRoTGV2ZWwobm9kZSk6IHZvaWQge1xuICAgIGxldCBoYXNPbmVEZXB0aCA9IHRydWU7XG4gICAgbm9kZS5jaGlsZHJlbj8uZm9yRWFjaCgoY2hpbGQpID0+IHtcbiAgICAgICAgaWYgKGNoaWxkLkRhdGE/LiRIYXNDaGlsZHJlbikge1xuICAgICAgICAgICAgaGFzT25lRGVwdGggPSBmYWxzZTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgIH0pO1xuICAgIG5vZGUuaGFzT25lRGVwdGhMZXZlbCA9IGhhc09uZURlcHRoO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGlzRmlyZWZveCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gbmF2aWdhdG9yLnVzZXJBZ2VudC50b0xvd2VyQ2FzZSgpLmluZGV4T2YoJ2ZpcmVmb3gnKSA+IC0xO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGdldEltYWdlUGF0aChcbiAgICB0eXBlOiBzdHJpbmcsXG4gICAgbW9JZDogc3RyaW5nIHwgbnVsbCxcbiAgICBmaWxlSWQ6IHN0cmluZyxcbiAgICBmaWVsZERlZklkPzogc3RyaW5nLFxuICAgIHNpemU/OiBudW1iZXIsXG4gICAgc2l6ZUg/OiBudW1iZXJcbik6IHN0cmluZyB7XG4gICAgbW9JZCA9IG1vSWQgPT0gbnVsbCA/ICcnIDogZW5jb2RlVVJJQ29tcG9uZW50KG1vSWQpO1xuICAgIGZpbGVJZCA9IGZpbGVJZCA9PSBudWxsID8gJycgOiBlbmNvZGVVUklDb21wb25lbnQoZmlsZUlkKTtcbiAgICBmaWVsZERlZklkID0gZmllbGREZWZJZCA9PSBudWxsID8gJycgOiBlbmNvZGVVUklDb21wb25lbnQoZmllbGREZWZJZCk7XG4gICAgc2l6ZSA9IHNpemUgPT0gbnVsbCA/IDEyOCA6IHNpemU7XG4gICAgc2l6ZUggPSBzaXplSCA9PSBudWxsID8gc2l6ZSA6IHNpemVIO1xuICAgIGNvbnN0IHVybCA9IGAvSUguYXNoeD90eT0ke3R5cGV9Jm1vSWQ9JHttb0lkfSZpZD0ke2ZpbGVJZH0mZmRJZD0ke2ZpZWxkRGVmSWR9JnNpPSR7c2l6ZX0mc2lIPSR7c2l6ZUh9YDtcbiAgICByZXR1cm4gdXJsO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNGdW5jdGlvbihmdW5jdGlvblRvQ2hlY2spOiBib29sZWFuIHtcbiAgICByZXR1cm4gZnVuY3Rpb25Ub0NoZWNrICYmIHt9LnRvU3RyaW5nLmNhbGwoZnVuY3Rpb25Ub0NoZWNrKSA9PT0gJ1tvYmplY3QgRnVuY3Rpb25dJztcbn1cbmV4cG9ydCBmdW5jdGlvbiBEZXZpY2VXaWR0aCgpOiBudW1iZXIge1xuICAgIHJldHVybiB3aW5kb3cuaW5uZXJXaWR0aCA+IDAgPyB3aW5kb3cuaW5uZXJXaWR0aCA6IHNjcmVlbi53aWR0aDtcbn1cbmV4cG9ydCBmdW5jdGlvbiBnZXRIZWFkZXJWYWx1ZShmaWVsZFZhbHVlLCByZXR1cm5WYWx1ZT86IHRydWUpOiBhbnkge1xuICAgIGlmICh0eXBlb2YgZmllbGRWYWx1ZSAhPT0gJ29iamVjdCcpIHtcbiAgICAgICAgcmV0dXJuIGZpZWxkVmFsdWU7XG4gICAgfVxuICAgIGNvbnN0IHZhbHVlID0gZmllbGRWYWx1ZS5WYWx1ZTtcbiAgICBjb25zdCB2YWx1ZUNhcHRpb246IHN0cmluZyA9IGZpZWxkVmFsdWUuVmFsdWUkQ2FwdGlvbjtcbiAgICBsZXQgdmFsdWVPYmplY3RDYXB0aW9uID0gbnVsbDtcbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnb2JqZWN0Jykge1xuICAgICAgICB2YWx1ZU9iamVjdENhcHRpb24gPSBmaWVsZFZhbHVlLlZhbHVlLiRDYXB0aW9uO1xuICAgIH1cbiAgICBpZiAodmFsdWVPYmplY3RDYXB0aW9uICYmICFyZXR1cm5WYWx1ZSkge1xuICAgICAgICByZXR1cm4gdmFsdWVPYmplY3RDYXB0aW9uO1xuICAgIH1cbiAgICBpZiAodmFsdWVDYXB0aW9uICYmICF2YWx1ZUNhcHRpb24uc3RhcnRzV2l0aCgndG1wJykgJiYgIXJldHVyblZhbHVlKSB7XG4gICAgICAgIHJldHVybiB2YWx1ZUNhcHRpb247XG4gICAgfVxuICAgIHJldHVybiB2YWx1ZTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBlbGVtZW50SW5WaWV3cG9ydDIoZWw6IGFueSk6IGJvb2xlYW4ge1xuICAgIGxldCB0b3AgPSBlbC5vZmZzZXRUb3A7XG4gICAgbGV0IGxlZnQgPSBlbC5vZmZzZXRMZWZ0O1xuICAgIGNvbnN0IHdpZHRoID0gZWwub2Zmc2V0V2lkdGg7XG4gICAgY29uc3QgaGVpZ2h0ID0gZWwub2Zmc2V0SGVpZ2h0O1xuXG4gICAgd2hpbGUgKGVsLm9mZnNldFBhcmVudCkge1xuICAgICAgICBlbCA9IGVsLm9mZnNldFBhcmVudDtcbiAgICAgICAgdG9wICs9IGVsLm9mZnNldFRvcDtcbiAgICAgICAgbGVmdCArPSBlbC5vZmZzZXRMZWZ0O1xuICAgIH1cblxuICAgIHJldHVybiAoXG4gICAgICAgIHRvcCA8IHdpbmRvdy5wYWdlWU9mZnNldCArIHdpbmRvdy5pbm5lckhlaWdodCAmJlxuICAgICAgICBsZWZ0IDwgd2luZG93LnBhZ2VYT2Zmc2V0ICsgd2luZG93LmlubmVyV2lkdGggJiZcbiAgICAgICAgdG9wICsgaGVpZ2h0ID4gd2luZG93LnBhZ2VZT2Zmc2V0ICYmXG4gICAgICAgIGxlZnQgKyB3aWR0aCA+IHdpbmRvdy5wYWdlWE9mZnNldFxuICAgICk7XG59XG5leHBvcnQgZnVuY3Rpb24gUHJldmVudERlZmF1bEV2ZW50KGUsIHByb3BhZ2F0aW9uRGlzYWJsZSA9IHRydWUpOiB2b2lkIHtcbiAgICBpZiAocHJvcGFnYXRpb25EaXNhYmxlKSB7XG4gICAgICAgIHN0b3BQcm9wYWdhdGlvbihlKTtcbiAgICB9XG4gICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIHN0b3BQcm9wYWdhdGlvbihlKTogdm9pZCB7XG4gICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBnZXRQYXJlbnRIZWlnaHQoZWxEb206IEhUTUxFbGVtZW50KTogbnVtYmVyIHtcbiAgICBsZXQgcGFyZW50RG9tID0gZWxEb20ucGFyZW50RWxlbWVudDtcbiAgICBsZXQgcGFyZW50SGVpZ2h0ID0gcGFyZW50RG9tPy5jbGllbnRIZWlnaHQgPz8gMDtcbiAgICB3aGlsZSAocGFyZW50RG9tICE9IG51bGwgJiYgcGFyZW50SGVpZ2h0IDwgNDApIHtcbiAgICAgICAgcGFyZW50RG9tID0gcGFyZW50RG9tLnBhcmVudEVsZW1lbnQ7XG4gICAgICAgIHBhcmVudEhlaWdodCA9IHBhcmVudERvbT8uY2xpZW50SGVpZ2h0ID8/IDA7XG4gICAgfVxuICAgIHJldHVybiBwYXJlbnRIZWlnaHQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRDb21wb25lbnREZWZpbmVkKFxuICAgIGNvbnRyb2xVaTogeyBvcmlnaW5hbFh0eXBlOiBzdHJpbmcgfSxcbiAgICBjdXN0b21VaVNldHRpbmc6IHsgTW9kdWxlOiBzdHJpbmc7IE5hbWU6IHN0cmluZzsgU2VsZWN0b3I6IHN0cmluZyB9XG4pOiB7XG4gICAgbW9kdWxlTmFtZTogc3RyaW5nO1xuICAgIG1vZHVsZVBhdGg6IHN0cmluZztcbiAgICBjb21wb25lbnROYW1lOiBzdHJpbmc7XG4gICAgc2VsZWN0b3I6IHN0cmluZztcbn0ge1xuICAgIGxldCBtb2R1bGVOYW1lID0gQmFyc2FBcGkuTG9naW5Gb3JtRGF0YS5EZWZhdWx0VWlNb2R1bGU7XG4gICAgbGV0IG1vZHVsZUtlYmFiTmFtZSA9IEJhcnNhQXBpLkNvbW1vbi5VdGlsLkdldEtlYmFiQ2FzZShtb2R1bGVOYW1lKTtcbiAgICBsZXQgY29tcG9uZW50TmFtZSA9IGNvbnRyb2xVaS5vcmlnaW5hbFh0eXBlLnJlcGxhY2UoJy4nLCAnJykucmVwbGFjZSgnXycsICcnKTtcbiAgICBsZXQgc2VsZWN0b3I6IHN0cmluZyA9IEJhcnNhQXBpLkNvbW1vbi5VdGlsLkdldEtlYmFiQ2FzZShjb21wb25lbnROYW1lKTtcbiAgICBzZWxlY3RvciA9IHNlbGVjdG9yLnN1YnN0cmluZygxLCBzZWxlY3Rvci5sZW5ndGgpO1xuICAgIHNlbGVjdG9yID0gQmFyc2FBcGkuTG9naW5Gb3JtRGF0YS5DdXN0b21VaVByZWZpeCArICctJyArIHNlbGVjdG9yO1xuICAgIGlmIChjdXN0b21VaVNldHRpbmcgJiYgY3VzdG9tVWlTZXR0aW5nLk1vZHVsZSkge1xuICAgICAgICBtb2R1bGVOYW1lID0gY3VzdG9tVWlTZXR0aW5nLk1vZHVsZTtcbiAgICAgICAgbW9kdWxlS2ViYWJOYW1lID0gQmFyc2FBcGkuQ29tbW9uLlV0aWwuR2V0S2ViYWJDYXNlKG1vZHVsZU5hbWUpO1xuICAgICAgICBjb21wb25lbnROYW1lID0gY3VzdG9tVWlTZXR0aW5nLk5hbWU7XG4gICAgICAgIHNlbGVjdG9yID0gY3VzdG9tVWlTZXR0aW5nLlNlbGVjdG9yO1xuICAgIH1cbiAgICBjb25zdCBtb2R1bGVQYXRoID0gbW9kdWxlS2ViYWJOYW1lLnNsaWNlKDEsIG1vZHVsZUtlYmFiTmFtZS5sZW5ndGgpO1xuICAgIHJldHVybiB7IG1vZHVsZU5hbWUsIG1vZHVsZVBhdGgsIGNvbXBvbmVudE5hbWUsIHNlbGVjdG9yIH07XG59XG5leHBvcnQgZnVuY3Rpb24gaXNTYWZhcmkoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIERldmljZS5pc1NhZmFyaSgpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGlzRkYoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIERldmljZS5pc0ZGKCk7XG59XG5leHBvcnQgZnVuY3Rpb24gZ2V0RGV2aWNlSXNQaG9uZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gRGV2aWNlLmlzUGhvbmUoKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBnZXREZXZpY2VJc0Rlc2t0b3AoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIERldmljZS5pc0Rlc2t0b3AoKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBnZXREZXZpY2VJc1RhYmxldCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gRGV2aWNlLmlzVGFibGV0KCk7XG59XG5leHBvcnQgZnVuY3Rpb24gZ2V0RGV2aWNlSXNNb2JpbGUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIG5hdmlnYXRvci51c2VyQWdlbnQuaW5kZXhPZignbW9iaScpID4gMCB8fCBnZXREZXZpY2VJc1Bob25lKCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRDb250cm9sU2l6ZU1vZGUoZWw6IEhUTUxFbGVtZW50LCBkZXZpY2VTaXplOiAncycgfCAnbScgfCAnbCcgfCAneGwnID0gJ2wnKTogQWJicmV2YXRpb25EZXZpY2VTaXplIHtcbiAgICBjb25zdCBjb250YWluZXJXaWR0aCA9IGVsLm9mZnNldFdpZHRoO1xuICAgIGlmIChjb250YWluZXJXaWR0aCA9PT0gMCkge1xuICAgICAgICByZXR1cm4gZGV2aWNlU2l6ZTtcbiAgICB9XG4gICAgaWYgKGRldmljZVNpemUgPT09ICdzJyB8fCBjb250YWluZXJXaWR0aCA8IDYwMCkge1xuICAgICAgICBkZXZpY2VTaXplID0gJ3MnO1xuICAgIH0gZWxzZSBpZiAoZGV2aWNlU2l6ZSA9PT0gJ20nIHx8IChjb250YWluZXJXaWR0aCA+IDYwMCAmJiBjb250YWluZXJXaWR0aCA8IDEyMDApKSB7XG4gICAgICAgIGRldmljZVNpemUgPSAnbSc7XG4gICAgfVxuICAgIHJldHVybiBkZXZpY2VTaXplO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZm9ybWF0Qnl0ZXMoXG4gICAgYnl0ZXMsXG4gICAgZGVjaW1hbHMgPSAyLFxuICAgIHNpemU6ICdCeXRlcycgfCAnS0InIHwgJ01CJyB8ICdHQicgfCAnVEInIHwgJ1BCJyB8ICdFQicgfCAnWkInIHwgJ1lCJ1xuKTogc3RyaW5nIHtcbiAgICBpZiAoYnl0ZXMgPT09IDApIHtcbiAgICAgICAgcmV0dXJuICcwIEJ5dGVzJztcbiAgICB9XG5cbiAgICBjb25zdCBrID0gMTAyNDtcbiAgICBjb25zdCBkbSA9IGRlY2ltYWxzIDwgMCA/IDAgOiBkZWNpbWFscztcbiAgICBjb25zdCBzaXplcyA9IFsnQnl0ZXMnLCAnS0InLCAnTUInLCAnR0InLCAnVEInLCAnUEInLCAnRUInLCAnWkInLCAnWUInXTtcbiAgICBjb25zdCBpID0gc2l6ZXMuZmluZEluZGV4KChjKSA9PiBjID09PSBzaXplKTtcbiAgICByZXR1cm4gcGFyc2VGbG9hdCgoYnl0ZXMgLyBNYXRoLnBvdyhrLCBpKSkudG9GaXhlZChkbSkpICsgJyAnICsgc2l6ZXNbaV07XG59XG5leHBvcnQgZnVuY3Rpb24gZ2V0VmFsaWRFeHRlbnNpb24odmFsaWRFeHRlbnNpb25zKTogc3RyaW5nIHtcbiAgICBsZXQgX3ZhbGlkRXh0ZW5zaW9ucyA9ICcnO1xuICAgIGlmIChBcnJheS5pc0FycmF5KHZhbGlkRXh0ZW5zaW9ucykpIHtcbiAgICAgICAgX3ZhbGlkRXh0ZW5zaW9ucyA9IHZhbGlkRXh0ZW5zaW9ucy5tYXAoKGMpID0+ICcuJyArIGMuRXh0ZW5zaW9uKS5qb2luKCcsJyk7XG4gICAgfVxuICAgIHJldHVybiBfdmFsaWRFeHRlbnNpb25zO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGdldEljb24odHlwZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gQmFyc2FBcGkuQ29tbW9uLkZpbGUuRmlsZUljb25EaWN0MTI4W3R5cGVdO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGlzSW1hZ2UodHlwZSk6IGJvb2xlYW4ge1xuICAgIGlmICghdHlwZSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHR5cGUgPSB0eXBlLnRvTG93ZXJDYXNlKCk7XG4gICAgcmV0dXJuIFsnaW1nJywgJ3BuZycsICdqcGVnJywgJ2pwZycsICdnaWYnLCAnYm1wJywgJ3RpZmYnLCAnaW1hZ2UnXS5pbmRleE9mKHR5cGUpID4gLTE7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBHZXRBbGxDb2x1bW5zU29ydGVkKGNvbnRleHQpOiBBcnJheTxSZXBvcnRWaWV3Q29sdW1uPiB7XG4gICAgY29uc3QgYWxsQ29sdW1ucyA9IEJhcnNhQXBpLkNvbW1vbi5VdGlsLlRyeUdldFZhbHVlKGNvbnRleHQsICdTZXR0aW5nLlZpZXcuQ29sdW1ucycsIFtdKS5maWx0ZXIoXG4gICAgICAgIChjKSA9PiBjLk5hbWUgIT09ICdJZCcgJiYgYy5OYW1lICE9PSAnJFN0eWxlSW5kZXgnICYmICFjLkhpZGRlblxuICAgICk7XG5cbiAgICBjb25zdCBjb2xMaXN0OiBDb2xTZXR0aW5nW10gPSBCYXJzYUFwaS5Db21tb24uVXRpbC5UcnlHZXRWYWx1ZShcbiAgICAgICAgY29udGV4dCxcbiAgICAgICAgJ1NldHRpbmcuVmlldy5HcmlkU2V0dGluZy5Db2xTZXR0aW5nTGlzdCcsXG4gICAgICAgIFtdXG4gICAgKTtcbiAgICBjb25zdCBjb2x1bW5zID0gbmV3IEFycmF5PFJlcG9ydFZpZXdDb2x1bW4+KCk7XG4gICAgY29sTGlzdC5mb3JFYWNoKChjb2xTKSA9PiB7XG4gICAgICAgIGNvbnN0IGNvbHVtbk9mQ29sTGlzdCA9IGFsbENvbHVtbnMuZmluZCgoYykgPT4gYy5OYW1lID09PSBjb2xTLk5hbWUpO1xuICAgICAgICBpZiAoY29sdW1uT2ZDb2xMaXN0KSB7XG4gICAgICAgICAgICBjb2x1bW5zLnB1c2goeyAuLi5jb2x1bW5PZkNvbExpc3QsIEhpZGRlbjogY29sUy5Jc0hpZGRlbiwgV2lkdGg6IGNvbFMuV2lkdGggfSk7XG4gICAgICAgIH1cbiAgICB9KTtcbiAgICBhbGxDb2x1bW5zLmZvckVhY2goKGNvbHVtbiwgaW5kZXgpID0+IHtcbiAgICAgICAgY29uc3QgY29sU2V0dGluZyA9IGNvbExpc3QuZmluZCgoYykgPT4gYy5OYW1lID09PSBjb2x1bW4uTmFtZSk7XG4gICAgICAgIGlmICghY29sU2V0dGluZykge1xuICAgICAgICAgICAgY29sdW1ucy5zcGxpY2UoaW5kZXgsIDAsIHsgLi4uY29sdW1uLCBIaWRkZW46IGNvbExpc3QubGVuZ3RoID4gMCA/IHRydWUgOiBmYWxzZSB9KTtcbiAgICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGNvbHVtbnM7XG59XG5leHBvcnQgZnVuY3Rpb24gR2V0VmlzaWJsZVZhbHVlKG9iamVjdCwgZmllbGQpOiBzdHJpbmcge1xuICAgIGxldCBvdXRwdXRWYWx1ZTtcbiAgICBpZiAob2JqZWN0W2ZpZWxkXT8uJENhcHRpb24gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBvdXRwdXRWYWx1ZSA9IG9iamVjdFtmaWVsZF0uJENhcHRpb247XG4gICAgfSBlbHNlIHtcbiAgICAgICAgb3V0cHV0VmFsdWUgPSBvYmplY3RbZmllbGQgKyAnJENhcHRpb24nXSAhPT0gdW5kZWZpbmVkID8gb2JqZWN0W2ZpZWxkICsgJyRDYXB0aW9uJ10gOiBvYmplY3RbZmllbGRdO1xuICAgIH1cbiAgICByZXR1cm4gb3V0cHV0VmFsdWU7XG59XG5leHBvcnQgaW50ZXJmYWNlIEdyb3VwIHtcbiAgICAkR3JvdXA6IGFueTtcbiAgICAkTGV2ZWw6IG51bWJlcjtcbiAgICAkQ291bnQ6IG51bWJlcjtcbiAgICAkRXhwYW5kZWQ6IGJvb2xlYW47XG4gICAgJFBhcmVudDogYW55O1xuICAgICRDaGlsZHJlbjogYW55W107XG4gICAgJFZpc2liaWxpdHk6IGJvb2xlYW47XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBHcm91cEJ5KGNvbGxlY3Rpb246IGFueVtdLCBzb3J0U2V0dGluZ3M6IFNvcnRTZXR0aW5nW10pOiB7IGdyb3VwZWQ6IEdyb3VwOyBncm91cHM6IGFueVtdIH0ge1xuICAgIGNvbnN0IGdyb3VwZWQ6IGFueSA9IHt9O1xuXG4gICAgY29uc3QgZ3JvdXBzID0gc29ydFNldHRpbmdzLm1hcCgoYykgPT4gYy5OYW1lKTtcbiAgICBjb25zdCBnZXRUaXRsZSA9IChtbywgZmllbGROYW1lKTogc3RyaW5nID0+IEdldFZpc2libGVWYWx1ZShtbywgZmllbGROYW1lKTtcbiAgICBjb2xsZWN0aW9uLmZvckVhY2goKGEpID0+IHtcbiAgICAgICAgZ3JvdXBzXG4gICAgICAgICAgICAucmVkdWNlKChvLCBnLCBpKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgZ3JvdXBUaXRsZSA9IGdldFRpdGxlKGEsIGcpO1xuICAgICAgICAgICAgICAgIG9bZ3JvdXBUaXRsZV0gPSBvW2dyb3VwVGl0bGVdIHx8IChpICsgMSA9PT0gZ3JvdXBzLmxlbmd0aCA/IFtdIDoge30pO1xuICAgICAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KG9bZ3JvdXBUaXRsZV0pKSB7XG4gICAgICAgICAgICAgICAgICAgIGEuJExldmVsID0gZ3JvdXBzLmxlbmd0aDtcbiAgICAgICAgICAgICAgICAgICAgbGV0IHRpdGxlID0gZ2V0VGl0bGUoYSwgZ3JvdXBzWzBdKTtcbiAgICAgICAgICAgICAgICAgICAgbGV0IHBhcmVudCA9IGdyb3VwZWRbdGl0bGVdO1xuICAgICAgICAgICAgICAgICAgICBwYXJlbnQuJENvdW50ID0gKHBhcmVudC4kQ291bnQgPz8gMCkgKyAxO1xuICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBqID0gMTsgaiA8IGdyb3Vwcy5sZW5ndGggLSAxOyBqKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlID0gZ2V0VGl0bGUoYSwgZ3JvdXBzW2pdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudCA9IHBhcmVudFt0aXRsZV07XG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnQuJENvdW50ID0gb1tncm91cFRpdGxlXS5sZW5ndGggKyAxO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgYTIgPSBGaW5kR3JvdXAoZ3JvdXBUaXRsZSwgYSk7XG4gICAgICAgICAgICAgICAgICAgIG9bZ3JvdXBUaXRsZV0uJEV4cGFuZGVkID0gYTI/LiRFeHBhbmRlZDtcbiAgICAgICAgICAgICAgICAgICAgb1tncm91cFRpdGxlXS4kVmlzaWJpbGl0eSA9IGEyPy4kVmlzaWJpbGl0eTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIG9bZ3JvdXBUaXRsZV07XG4gICAgICAgICAgICB9LCBncm91cGVkKVxuICAgICAgICAgICAgLnB1c2goYSk7XG4gICAgfSk7XG4gICAgcmV0dXJuIHsgZ3JvdXBlZCwgZ3JvdXBzIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBGaW5kR3JvdXAoZ3JvdXBUaXRsZTogc3RyaW5nLCBhOiBhbnkpOiBhbnkge1xuICAgIGlmIChhLiRHcm91cCA9PT0gZ3JvdXBUaXRsZSkge1xuICAgICAgICByZXR1cm4gYTtcbiAgICB9XG4gICAgaWYgKGEuJFBhcmVudCkge1xuICAgICAgICByZXR1cm4gRmluZEdyb3VwKGdyb3VwVGl0bGUsIGEuJFBhcmVudCk7XG4gICAgfVxufVxuZXhwb3J0IGZ1bmN0aW9uIEZpbGxBbGxMYXlvdXRDb250cm9scyhpdGVtOiBMYXlvdXRTZXR0aW5nLCBsYXlvdXRDb250cm9sczogTGF5b3V0U2V0dGluZ1tdKTogdm9pZCB7XG4gICAgaWYgKGl0ZW0ueHR5cGUgPT09ICdMeS5MYXlvdXRDb250cm9sJykge1xuICAgICAgICBsYXlvdXRDb250cm9scy5wdXNoKGl0ZW0pO1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICghaXRlbS5pdGVtcz8ubGVuZ3RoKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaXRlbS5pdGVtcy5mb3JFYWNoKChjKSA9PiBGaWxsQWxsTGF5b3V0Q29udHJvbHMoYywgbGF5b3V0Q29udHJvbHMpKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBGaW5kVG9vbGJhckl0ZW0odG9vbGJhckl0ZW1zOiBNZW51SXRlbVtdLCB2YWx1ZTogc3RyaW5nLCBwcm9wOiBzdHJpbmcgPSAndGV4dCcpOiBNZW51SXRlbSB8IG51bGwge1xuICAgIGlmICghdG9vbGJhckl0ZW1zPy5sZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGNvbnN0IGZpbmRJbkFycmF5ID0gKHRvb2xiYXJJdGVtczogTWVudUl0ZW1bXSwgdmFsdWU6IHN0cmluZykgPT4ge1xuICAgICAgICBsZXQgaXRlbTogTWVudUl0ZW0gfCBudWxsID0gbnVsbDtcbiAgICAgICAgdG9vbGJhckl0ZW1zLmZvckVhY2goKGMpID0+IHtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgYyA9PT0gJ29iamVjdCcgJiYgIWl0ZW0pIHtcbiAgICAgICAgICAgICAgICBpZiAoY1twcm9wXSA9PT0gdmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgaXRlbSA9IGM7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGMubWVudT8uaXRlbXM/Lmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICBpdGVtID0gZmluZEluQXJyYXkoYy5tZW51Lml0ZW1zLCB2YWx1ZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIGl0ZW07XG4gICAgfTtcbiAgICByZXR1cm4gZmluZEluQXJyYXkodG9vbGJhckl0ZW1zLCB2YWx1ZSk7XG59XG5leHBvcnQgZnVuY3Rpb24gRmluZExheW91dFNldHRpbmdGcm9tTGF5b3V0OTQobGF5b3V0OTQ6IExheW91dFNldHRpbmcsIGxheW91dFRpdGxlOiBzdHJpbmcpOiBMYXlvdXRTZXR0aW5nIHwgbnVsbCB7XG4gICAgaWYgKCFsYXlvdXRUaXRsZSkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgaWYgKGxheW91dDk0LkNhcHRpb24gPT09IGxheW91dFRpdGxlIHx8IGxheW91dDk0LlRpdGxlID09PSBsYXlvdXRUaXRsZSB8fCBsYXlvdXQ5NC5Db250cm9sSWQgPT09IGxheW91dFRpdGxlKSB7XG4gICAgICAgIHJldHVybiBsYXlvdXQ5NDtcbiAgICB9XG4gICAgbGV0IHRlbXBMYXlvdXQ5NDogTGF5b3V0U2V0dGluZyB8IG51bGwgPSBudWxsO1xuICAgIGlmIChsYXlvdXQ5NC5pdGVtcz8ubGVuZ3RoKSB7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGF5b3V0OTQuaXRlbXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGlmICghdGVtcExheW91dDk0KSB7XG4gICAgICAgICAgICAgICAgdGVtcExheW91dDk0ID0gRmluZExheW91dFNldHRpbmdGcm9tTGF5b3V0OTQobGF5b3V0OTQuaXRlbXNbaV0sIGxheW91dFRpdGxlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGVtcExheW91dDk0O1xufVxuZXhwb3J0IGZ1bmN0aW9uIGdldEdyaWRTZXR0aW5ncyhjb250ZXh0KTogR3JpZFNldHRpbmcge1xuICAgIGNvbnN0IGdyaWRTZXR0aW5nID0gQmFyc2FBcGkuQ29tbW9uLlV0aWwuVHJ5R2V0VmFsdWUoY29udGV4dCwgJ1NldHRpbmcuVmlldy5HcmlkU2V0dGluZycsIG51bGwpO1xuICAgIHJldHVybiB7XG4gICAgICAgIENvbFNldHRpbmdMaXN0OiBncmlkU2V0dGluZz8uQ29sU2V0dGluZ0xpc3QgPz8gbnVsbCxcbiAgICAgICAgU29ydFNldHRpbmdMaXN0OiBncmlkU2V0dGluZz8uU29ydFNldHRpbmdMaXN0ID8/IFtdLFxuICAgICAgICBBdXRvU2l6ZUNvbHVtbnM6IGdyaWRTZXR0aW5nPy5BdXRvU2l6ZUNvbHVtbnMgPz8gZmFsc2VcbiAgICB9O1xufVxuZXhwb3J0IGZ1bmN0aW9uIGdldFJlc2V0R3JpZFNldHRpbmdzKGNvbHVtbnM6IFJlcG9ydFZpZXdDb2x1bW5bXSB8IGFueVtdLCBjb250ZXh0OiBhbnkpOiBHcmlkU2V0dGluZyB7XG4gICAgY29uc3QgY29sTGlzdCA9IGNvbHVtbnM7XG4gICAgY29uc3Qgc2V0dGluZ3MgPSBnZXRHcmlkU2V0dGluZ3MoY29udGV4dCk7XG4gICAgc2V0dGluZ3MuQ29sU2V0dGluZ0xpc3QgPSBjb2xMaXN0Lm1hcCgoYykgPT4gKHtcbiAgICAgICAgSXNIaWRkZW46IGMuSGlkZGVuLFxuICAgICAgICBOYW1lOiBjLk5hbWUsXG4gICAgICAgIFdpZHRoOiBjLldpZHRoLFxuICAgICAgICBDYXB0aW9uOiBjLkNhcHRpb25cbiAgICB9KSk7XG4gICAgcmV0dXJuIHNldHRpbmdzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gR2V0RGVmYXVsdE1vT2JqZWN0SW5mbyh0eXBlRGVmSWQ6IHN0cmluZyk6IE1ldGFvYmplY3REYXRhTW9kZWwge1xuICAgIHJldHVybiB7XG4gICAgICAgIElkOiAnMCcsXG4gICAgICAgICRDYXB0aW9uOiAnJyxcbiAgICAgICAgJFR5cGVEZWZJZDogdHlwZURlZklkLFxuICAgICAgICAkU3RhdGU6ICdOZXcnLFxuICAgICAgICAkVHlwZTogJ0NvbW1vbi5NZXRhT2JqZWN0V2ViJyxcbiAgICAgICAgJEZpZWxkRGljdDoge31cbiAgICB9O1xufVxuZXhwb3J0IGZ1bmN0aW9uIGdldExheW91dDk0T2JqZWN0SW5mbygpOiBMYXlvdXRTZXR0aW5nIHtcbiAgICByZXR1cm4ge1xuICAgICAgICBUeXBlOiAnUm9vdCcsXG4gICAgICAgIENvbnRyb2xJZDogJ9ix24zYtNmHJyxcbiAgICAgICAgeHR5cGU6ICdMeS5MYXlvdXRDb250YWluZXInLFxuICAgICAgICBCb3VuZHM6IHsgeDogMCwgeTogMCwgd2lkdGg6IDQzMiwgaGVpZ2h0OiAyNCB9LFxuICAgICAgICBpdGVtczogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIFR5cGU6ICdWZXJ0aWNhbEpvaW4nLFxuICAgICAgICAgICAgICAgIHh0eXBlOiAnTHkuTGF5b3V0Sm9pbicsXG4gICAgICAgICAgICAgICAgSXNWZXJ0aWNhbDogdHJ1ZSxcbiAgICAgICAgICAgICAgICBCb3VuZHM6IHsgeDogMCwgeTogMCwgd2lkdGg6IDQzMiwgaGVpZ2h0OiA4MiB9LFxuICAgICAgICAgICAgICAgIGl0ZW1zOiBbXVxuICAgICAgICAgICAgfVxuICAgICAgICBdXG4gICAgfTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBnZXRGb3JtU2V0dGluZ3ModHlwZURlZklkOiBzdHJpbmcpOiBGb3JtU2V0dGluZyB7XG4gICAgY29uc3QgbW8gPSBHZXREZWZhdWx0TW9PYmplY3RJbmZvKHR5cGVEZWZJZCk7XG5cbiAgICBjb25zdCBmb3JtUGFuZWxTZXR0aW5nczogRm9ybVNldHRpbmcgPSB7XG4gICAgICAgIFZpZXc6IHtcbiAgICAgICAgICAgIExheW91dDk0OiBnZXRMYXlvdXQ5NE9iamVjdEluZm8sXG4gICAgICAgICAgICBDb250cm9sSW5mbzogW10sXG4gICAgICAgICAgICBUeXBlRGVmSWQ6IHR5cGVEZWZJZFxuICAgICAgICB9LFxuICAgICAgICBJc1NlYXJjaFBhbmVsOiB0cnVlLFxuICAgICAgICBEYXRhOiB7XG4gICAgICAgICAgICBNbzogbW9cbiAgICAgICAgfVxuICAgIH07XG4gICAgcmV0dXJuIGZvcm1QYW5lbFNldHRpbmdzO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUZvcm1QYW5lbE1ldGFDb25kaXRpb25zKFxuICAgIHR5cGVEZWZJZDogc3RyaW5nLFxuICAgIGNvbnRyb2xzSW5mbzogR2VuZXJhbENvbnRyb2xJbmZvTW9kZWxbXSxcbiAgICBjb250cm9sTmFtZTogc3RyaW5nLFxuICAgIHZhbHVlOiBhbnlcbik6IGFueSB7XG4gICAgY29uc3QgZm9ybVNldHRpbmdzID0gZ2V0Rm9ybVNldHRpbmdzKHR5cGVEZWZJZCk7XG4gICAgZm9ybVNldHRpbmdzLlZpZXcuQ29udHJvbEluZm8gPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGNvbnRyb2xzSW5mbykpO1xuXG4gICAgZm9ybVNldHRpbmdzLlZpZXcuTGF5b3V0OTQuaXRlbXNbMF0uaXRlbXMucHVzaCguLi5jb250cm9sc0luZm8ubWFwKChjKSA9PiBnZXRMYXlvdXRDb250cm9sKGMuQ29udHJvbE5hbWUpKSk7XG4gICAgZm9ybVNldHRpbmdzLkRhdGEuTW9bY29udHJvbE5hbWVdID0gdmFsdWU7XG4gICAgY29uc3QgZm9ybVBhbmVsQ3RybHIgPSBuZXcgQmFyc2FBcGkuVWwuRm9ybVBhbmVsQ3RybHIoe1xuICAgICAgICBTZXR0aW5nOiBmb3JtU2V0dGluZ3MsXG4gICAgICAgIEZlYXR1cmVzOiB7XG4gICAgICAgICAgICBXb3JrZmxvdzogZmFsc2UsXG4gICAgICAgICAgICBUb29sYmFyOiBmYWxzZSxcbiAgICAgICAgICAgIEluZm9CYXI6IGZhbHNlXG4gICAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gZm9ybVBhbmVsQ3RybHI7XG59XG5leHBvcnQgZnVuY3Rpb24gZ2V0TmV3TW9HcmlkRWRpdG9yKGZvcm1TZXR0aW5nczogRm9ybVNldHRpbmcsIHR5cGVkZWZJZDogc3RyaW5nKTogUGFydGlhbDxGb3JtU2V0dGluZz4ge1xuICAgIGNvbnN0IG5ld0Zvcm1TZXR0aW5nczogRm9ybVNldHRpbmcgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGZvcm1TZXR0aW5ncykpO1xuICAgIHJldHVybiB7IC4uLm5ld0Zvcm1TZXR0aW5ncy5EYXRhLk1vLCAkVHlwZURlZklkOiB0eXBlZGVmSWQgfTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVHcmlkRWRpdG9yRm9ybVBhbmVsKFxuICAgIGZvcm1TZXR0aW5nczogRm9ybVNldHRpbmcsXG4gICAgbW86IE1ldGFvYmplY3REYXRhTW9kZWwsXG4gICAgdHlwZWRlZjogc3RyaW5nLFxuICAgIHJlbGF0aW9uOiBhbnksXG4gICAgcmV3cml0ZUxheW91dDogYm9vbGVhbiA9IHRydWUsXG4gICAgVWx2TWFpbkN0cmxyOiBhbnkgPSBudWxsXG4pOiBhbnkge1xuICAgIGNvbnN0IG5ld0Zvcm1TZXR0aW5nczogRm9ybVNldHRpbmcgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGZvcm1TZXR0aW5ncykpO1xuICAgIG5ld0Zvcm1TZXR0aW5ncy5EYXRhLk1vID0geyAuLi5tbywgJFR5cGVEZWZJZDogdHlwZWRlZiB9O1xuICAgIGlmIChyZXdyaXRlTGF5b3V0KSB7XG4gICAgICAgIG5ld0Zvcm1TZXR0aW5ncy5WaWV3LkxheW91dDk0ID0gZ2V0TGF5b3V0OTRPYmplY3RJbmZvKCk7XG4gICAgICAgIG5ld0Zvcm1TZXR0aW5ncy5WaWV3LkxheW91dDk0Lml0ZW1zWzBdLml0ZW1zLnB1c2goXG4gICAgICAgICAgICAuLi5uZXdGb3JtU2V0dGluZ3MuVmlldy5Db250cm9sSW5mby5tYXAoKGMpID0+XG4gICAgICAgICAgICAgICAgZ2V0TGF5b3V0Q29udHJvbChjLkNvbnRyb2xOYW1lLCBjLkNvbnRyb2xGaWVsZENhcHRpb25UcmFuc2xhdGVkLCBmYWxzZSlcbiAgICAgICAgICAgIClcbiAgICAgICAgKTtcbiAgICB9XG4gICAgY29uc3QgZm9ybVJlcXVlc3RQYXJhbXMgPSBuZXcgQmFyc2FBcGkuVWwuRm9ybVJlcXVlc3RQYXJhbXMoe1xuICAgICAgICBNb0lkOiBuZXdGb3JtU2V0dGluZ3MuRGF0YS5Nby5JZCxcbiAgICAgICAgVHlwZURlZklkOiB0eXBlZGVmLFxuICAgICAgICBSZWxhdGlvbjogcmVsYXRpb25cbiAgICAgICAgLy8gTW9Db250ZXh0OiB7XG4gICAgICAgIC8vICAgICBSZXBvcnRJZDogJycsXG4gICAgICAgIC8vICAgICBWaWV3SWQ6ICcnLFxuICAgICAgICAvLyAgICAgVmlld05hbWU6ICcnLFxuICAgICAgICAvLyAgICAgQ29uZEZvcm1hdGluZzogJycsXG4gICAgICAgIC8vICAgICBJbmNsdWRlSW5SZXBvcnQ6ICcnXG4gICAgICAgIC8vIH1cbiAgICB9KTtcbiAgICBjb25zdCBmb3JtUGFuZWxDdHJsciA9IG5ldyBCYXJzYUFwaS5VbC5Gb3JtUGFuZWxDdHJscih7XG4gICAgICAgIFNldHRpbmc6IG5ld0Zvcm1TZXR0aW5ncyxcbiAgICAgICAgUmVsYXRpb246IHJlbGF0aW9uLFxuICAgICAgICBVbHZNYWluQ3RybHI6IFVsdk1haW5DdHJscixcbiAgICAgICAgRmVhdHVyZXM6IHtcbiAgICAgICAgICAgIFdvcmtmbG93OiBmYWxzZSxcbiAgICAgICAgICAgIFRvb2xiYXI6IGZhbHNlLFxuICAgICAgICAgICAgSW5mb0JhcjogZmFsc2VcbiAgICAgICAgfSxcbiAgICAgICAgRm9ybVJlcXVlc3RQYXJhbXM6IGZvcm1SZXF1ZXN0UGFyYW1zXG4gICAgfSk7XG4gICAgcmV0dXJuIGZvcm1QYW5lbEN0cmxyO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0TGF5b3V0Q29udHJvbChcbiAgICBjb250cm9sTmFtZTogc3RyaW5nLFxuICAgIGNvbnRyb2xDYXB0aW9uOiBzdHJpbmcgPSAnJyxcbiAgICBoaWRlOiBib29sZWFuID0gdHJ1ZVxuKTogUGFydGlhbDxHZW5lcmFsQ29udHJvbEluZm9Nb2RlbD4ge1xuICAgIHJldHVybiB7XG4gICAgICAgIHh0eXBlOiAnTHkuTGF5b3V0Q29udHJvbCcsXG4gICAgICAgIFR5cGU6ICdMYXlvdXRDb250cm9sSXRlbScsXG4gICAgICAgIENvbnRyb2xJZDogY29udHJvbE5hbWUsXG4gICAgICAgIElzVmVydGljYWw6IGZhbHNlLFxuICAgICAgICBUZXh0TG9jYXRpb246ICdSaWdodCcsXG4gICAgICAgIFRleHRWaXNpYmxlOiBmYWxzZSxcbiAgICAgICAgVmlzaWJsZTogIWhpZGUsXG4gICAgICAgIGhpZGUsXG4gICAgICAgIFVzZUxheW91dEl0ZW1UZXh0Rm9yQ29udHJvbDogZmFsc2UsXG4gICAgICAgIENhcHRpb246IGNvbnRyb2xDYXB0aW9uLFxuICAgICAgICBBY2Nlc3NpYmxlTmFtZTogJycsXG4gICAgICAgIEJvdW5kczogeyB4OiAwLCB5OiAwLCB3aWR0aDogNDMyLCBoZWlnaHQ6IDI0IH0sXG4gICAgICAgIE1pblNpemU6IHsgd2lkdGg6IDg5LCBoZWlnaHQ6IDI0IH0sXG4gICAgICAgIE1heFNpemU6IHsgd2lkdGg6IDAsIGhlaWdodDogMjQgfSxcbiAgICAgICAgQ29udHJvbEJvdW5kczogeyB3aWR0aDogMzg4LCBoZWlnaHQ6IDIwIH0sXG4gICAgICAgIENvbnRyb2xNaW5TaXplOiB7IHdpZHRoOiA0NSwgaGVpZ2h0OiAyMCB9LFxuICAgICAgICBDb250cm9sTWF4U2l6ZTogeyB3aWR0aDogMCwgaGVpZ2h0OiAyMCB9LFxuICAgICAgICBQYWRkaW5nOiBbMiwgMiwgMiwgMl0sXG4gICAgICAgIExhYmVsU2l6ZTogeyB3aWR0aDogMzUsIGhlaWdodDogMTMgfSxcbiAgICAgICAgb3JpZ2luYWxYdHlwZTogJydcbiAgICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q29udHJvbExpc3QoXG4gICAgbW86IE1ldGFvYmplY3REYXRhTW9kZWwsXG4gICAgY29udHJvbERiTmFtZXM6IHN0cmluZ1tdLFxuICAgIGlzU2VhcmNoUGFuZWw6IGJvb2xlYW4sXG4gICAgaXNHcmlkRWRpdG9yOiBib29sZWFuXG4pOiBQcm9taXNlPEdlbmVyYWxDb250cm9sSW5mb01vZGVsW10+IHtcbiAgICByZXR1cm4gbmV3IFByb21pc2U8R2VuZXJhbENvbnRyb2xJbmZvTW9kZWxbXT4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICBCYXJzYUFwaS5Db21tb24uQWpheC5HZXRTZXJ2ZXJEYXRhKFxuICAgICAgICAgICAgJ0Zvcm05NC5HZXRDb250cm9sSW5mb3MnLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNvbnRyb2xJbmZvUGFyYW1ldGVyOiB7XG4gICAgICAgICAgICAgICAgICAgIEZpZWxkRGJOYW1lczogY29udHJvbERiTmFtZXMsXG4gICAgICAgICAgICAgICAgICAgIE1vOiBuZXcgQmFyc2FBcGkuQ29tbW9uLk1ldGFPYmplY3RXZWIobW8pLFxuICAgICAgICAgICAgICAgICAgICBJc1NlYXJjaFBhbmVsOiBpc1NlYXJjaFBhbmVsLFxuICAgICAgICAgICAgICAgICAgICBJc0dyaWRFZGl0b3I6IGlzR3JpZEVkaXRvclxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAobSkgPT4ge1xuICAgICAgICAgICAgICAgIHJlc29sdmUobSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgKGVycikgPT4ge1xuICAgICAgICAgICAgICAgIHJlamVjdChlcnIpO1xuICAgICAgICAgICAgfVxuICAgICAgICApO1xuICAgIH0pO1xufVxuXG5leHBvcnQgdHlwZSBOelNhZmVBbnkgPSBhbnk7XG5leHBvcnQgdHlwZSBOdW1iZXJJbnB1dCA9IG51bWJlciB8IHN0cmluZyB8IHVuZGVmaW5lZCB8IG51bGw7XG5leHBvcnQgaW50ZXJmYWNlIE5nU3R5bGVJbnRlcmZhY2Uge1xuICAgIFtrbGFzczogc3RyaW5nXTogTnpTYWZlQW55O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEluZGV4YWJsZU9iamVjdCB7XG4gICAgW2tleTogc3RyaW5nXTogTnpTYWZlQW55O1xufVxuZXhwb3J0IGZ1bmN0aW9uIHNoYWxsb3dFcXVhbChvYmpBPzogSW5kZXhhYmxlT2JqZWN0LCBvYmpCPzogSW5kZXhhYmxlT2JqZWN0KTogYm9vbGVhbiB7XG4gICAgaWYgKG9iakEgPT09IG9iakIpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBvYmpBICE9PSAnb2JqZWN0JyB8fCAhb2JqQSB8fCB0eXBlb2Ygb2JqQiAhPT0gJ29iamVjdCcgfHwgIW9iakIpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGNvbnN0IGtleXNBID0gT2JqZWN0LmtleXMob2JqQSk7XG4gICAgY29uc3Qga2V5c0IgPSBPYmplY3Qua2V5cyhvYmpCKTtcblxuICAgIGlmIChrZXlzQS5sZW5ndGggIT09IGtleXNCLmxlbmd0aCkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgY29uc3QgYkhhc093blByb3BlcnR5ID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5iaW5kKG9iakIpO1xuXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9wcmVmZXItZm9yLW9mXG4gICAgZm9yIChsZXQgaWR4ID0gMDsgaWR4IDwga2V5c0EubGVuZ3RoOyBpZHgrKykge1xuICAgICAgICBjb25zdCBrZXkgPSBrZXlzQVtpZHhdO1xuICAgICAgICBpZiAoIWJIYXNPd25Qcm9wZXJ0eShrZXkpKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG9iakFba2V5XSAhPT0gb2JqQltrZXldKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdHJ1ZTtcbn1cbmV4cG9ydCBmdW5jdGlvbiB0b051bWJlcih2YWx1ZTogbnVtYmVyIHwgc3RyaW5nKTogbnVtYmVyO1xuZXhwb3J0IGZ1bmN0aW9uIHRvTnVtYmVyPEQ+KHZhbHVlOiBudW1iZXIgfCBzdHJpbmcsIGZhbGxiYWNrOiBEKTogbnVtYmVyIHwgRDtcbmV4cG9ydCBmdW5jdGlvbiB0b051bWJlcih2YWx1ZTogbnVtYmVyIHwgc3RyaW5nLCBmYWxsYmFja1ZhbHVlOiBudW1iZXIgPSAwKTogbnVtYmVyIHtcbiAgICByZXR1cm4gX2lzTnVtYmVyVmFsdWUodmFsdWUpID8gTnVtYmVyKHZhbHVlKSA6IGZhbGxiYWNrVmFsdWU7XG59XG5mdW5jdGlvbiBwcm9wRGVjb3JhdG9yRmFjdG9yeTxULCBEPihcbiAgICBuYW1lOiBzdHJpbmcsXG4gICAgZmFsbGJhY2s6ICh2OiBUKSA9PiBEXG4pOiAodGFyZ2V0OiBOelNhZmVBbnksIHByb3BOYW1lOiBzdHJpbmcpID0+IHZvaWQge1xuICAgIGZ1bmN0aW9uIHByb3BEZWNvcmF0b3IoXG4gICAgICAgIHRhcmdldDogTnpTYWZlQW55LFxuICAgICAgICBwcm9wTmFtZTogc3RyaW5nLFxuICAgICAgICBvcmlnaW5hbERlc2NyaXB0b3I/OiBUeXBlZFByb3BlcnR5RGVzY3JpcHRvcjxOelNhZmVBbnk+XG4gICAgKTogTnpTYWZlQW55IHtcbiAgICAgICAgY29uc3QgcHJpdmF0ZVByb3BOYW1lID0gYCQkX196b3Jyb1Byb3BEZWNvcmF0b3JfXyR7cHJvcE5hbWV9YDtcblxuICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRhcmdldCwgcHJpdmF0ZVByb3BOYW1lKSkge1xuICAgICAgICAgICAgLy8gd2FybihgVGhlIHByb3AgXCIke3ByaXZhdGVQcm9wTmFtZX1cIiBpcyBhbHJlYWR5IGV4aXN0LCBpdCB3aWxsIGJlIG92ZXJyaWRlZCBieSAke25hbWV9IGRlY29yYXRvci5gKTtcbiAgICAgICAgfVxuXG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIHByaXZhdGVQcm9wTmFtZSwge1xuICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgICAgICAgd3JpdGFibGU6IHRydWVcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGdldCgpOiBzdHJpbmcge1xuICAgICAgICAgICAgICAgIHJldHVybiBvcmlnaW5hbERlc2NyaXB0b3IgJiYgb3JpZ2luYWxEZXNjcmlwdG9yLmdldFxuICAgICAgICAgICAgICAgICAgICA/IG9yaWdpbmFsRGVzY3JpcHRvci5nZXQuYmluZCh0aGlzKSgpXG4gICAgICAgICAgICAgICAgICAgIDogdGhpc1twcml2YXRlUHJvcE5hbWVdO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHNldCh2YWx1ZTogVCk6IHZvaWQge1xuICAgICAgICAgICAgICAgIGlmIChvcmlnaW5hbERlc2NyaXB0b3IgJiYgb3JpZ2luYWxEZXNjcmlwdG9yLnNldCkge1xuICAgICAgICAgICAgICAgICAgICBvcmlnaW5hbERlc2NyaXB0b3Iuc2V0LmJpbmQodGhpcykoZmFsbGJhY2sodmFsdWUpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpc1twcml2YXRlUHJvcE5hbWVdID0gZmFsbGJhY2sodmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgIH1cblxuICAgIHJldHVybiBwcm9wRGVjb3JhdG9yO1xufVxuZXhwb3J0IGZ1bmN0aW9uIElucHV0TnVtYmVyKGZhbGxiYWNrVmFsdWU/OiBOelNhZmVBbnkpOiBOelNhZmVBbnkge1xuICAgIHJldHVybiBwcm9wRGVjb3JhdG9yRmFjdG9yeSgnSW5wdXROdW1iZXInLCAodmFsdWU6IHN0cmluZyB8IG51bWJlcikgPT4gdG9OdW1iZXIodmFsdWUsIGZhbGxiYWNrVmFsdWUpKTtcbn1cbmV4cG9ydCBlbnVtIEFmZml4UmVzcG9uZEV2ZW50cyB7XG4gICAgcmVzaXplID0gJ3Jlc2l6ZScsXG4gICAgc2Nyb2xsID0gJ3Njcm9sbCcsXG4gICAgdG91Y2hzdGFydCA9ICd0b3VjaHN0YXJ0JyxcbiAgICB0b3VjaG1vdmUgPSAndG91Y2htb3ZlJyxcbiAgICB0b3VjaGVuZCA9ICd0b3VjaGVuZCcsXG4gICAgcGFnZXNob3cgPSAncGFnZXNob3cnLFxuICAgIGxvYWQgPSAnTE9BRCdcbn1cbmV4cG9ydCBpbnRlcmZhY2UgU2ltcGxlUmVjdCB7XG4gICAgdG9wOiBudW1iZXI7XG4gICAgbGVmdDogbnVtYmVyO1xuICAgIHdpZHRoPzogbnVtYmVyO1xuICAgIGhlaWdodD86IG51bWJlcjtcbiAgICBib3R0b20/OiBudW1iZXI7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1RhcmdldFdpbmRvdyh0YXJnZXQ6IEVsZW1lbnQgfCBXaW5kb3cpOiB0YXJnZXQgaXMgV2luZG93IHtcbiAgICByZXR1cm4gdHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiYgdGFyZ2V0ID09PSB3aW5kb3c7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRUYXJnZXRSZWN0KHRhcmdldDogRWxlbWVudCB8IFdpbmRvdyk6IFNpbXBsZVJlY3Qge1xuICAgIHJldHVybiAhaXNUYXJnZXRXaW5kb3codGFyZ2V0KVxuICAgICAgICA/IHRhcmdldC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKVxuICAgICAgICA6IHtcbiAgICAgICAgICAgICAgdG9wOiAwLFxuICAgICAgICAgICAgICBsZWZ0OiAwLFxuICAgICAgICAgICAgICBib3R0b206IDBcbiAgICAgICAgICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0RmllbGRWYWx1ZShuYW1lOiBzdHJpbmcsIG1vOiBNZXRhb2JqZWN0RGF0YU1vZGVsLCBjYXB0aW9uPzogYm9vbGVhbik6IHN0cmluZyB7XG4gICAgaWYgKG1vLkdldEZWYWx1ZUJ5Q2FwdGlvbikge1xuICAgICAgICBsZXQgcmVzdWx0ID0gbW8uR2V0RlZhbHVlKG5hbWUpO1xuICAgICAgICBpZiAoY2FwdGlvbikge1xuICAgICAgICAgICAgcmVzdWx0ID0gbW8uR2V0RkNhcHRpb24obmFtZSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGVvZiBjYXB0aW9uID09PSAndW5kZWZpbmVkJyAmJiBtby5Jbmhlcml0YW5jZUluZm8gJiYgIShtby4kRmllbGREaWN0ICYmIG1vLiRGaWVsZERpY3RbbmFtZV0pKSB7XG4gICAgICAgICAgICBjb25zdCB7IFBhcmVudEZpZWxkTmFtZSB9ID0gbW8uSW5oZXJpdGFuY2VJbmZvO1xuICAgICAgICAgICAgY29uc3QgbW9QYXJlbnQgPSBtby5HZXRGVmFsdWUoUGFyZW50RmllbGROYW1lKTtcbiAgICAgICAgICAgIGxldCByZXN1bHQgPSBtb1BhcmVudC5HZXRGVmFsdWUobmFtZSk7XG4gICAgICAgICAgICBpZiAoY2FwdGlvbikge1xuICAgICAgICAgICAgICAgIHJlc3VsdCA9IG1vUGFyZW50LkdldEZDYXB0aW9uKG5hbWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuICAgIGNvbnN0IGZpZWxkTmFtZSA9IG1vLiRGaWVsZERpY3QgJiYgbW8uJEZpZWxkRGljdFtuYW1lXSA/IG1vLiRGaWVsZERpY3RbbmFtZV0gOiBuYW1lO1xuICAgIGxldCB2YWwgPSBtb1tmaWVsZE5hbWVdO1xuICAgIGlmIChjYXB0aW9uKSB7XG4gICAgICAgIGxldCBjYXB0aW9uVmFsID0gbW9bZmllbGROYW1lXT8uJENhcHRpb247XG4gICAgICAgIGlmICh0eXBlb2YgY2FwdGlvblZhbCAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIGlmICghY2FwdGlvblZhbCkge1xuICAgICAgICAgICAgICAgIGNhcHRpb25WYWwgPSBtb1tmaWVsZE5hbWUgKyAnJENhcHRpb24nXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghY2FwdGlvblZhbCkge1xuICAgICAgICAgICAgICAgIGNhcHRpb25WYWwgPSB2YWw7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdmFsID0gY2FwdGlvblZhbDtcbiAgICB9XG4gICAgcmV0dXJuIHZhbDtcbn1cblxuLyogZXNsaW50LWRpc2FibGUgbm8taW52YWxpZC10aGlzICovXG5leHBvcnQgY29uc3QgYXZhaWxhYmxlUHJlZml4ZXMgPSBbJ21veicsICdtcycsICd3ZWJraXQnXTtcblxuZXhwb3J0IGZ1bmN0aW9uIHJlcXVlc3RBbmltYXRpb25GcmFtZVBvbHlmaWxsKCk6IHR5cGVvZiByZXF1ZXN0QW5pbWF0aW9uRnJhbWUge1xuICAgIGxldCBsYXN0VGltZSA9IDA7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChjYWxsYmFjazogRnJhbWVSZXF1ZXN0Q2FsbGJhY2spOiBhbnkge1xuICAgICAgICBjb25zdCBjdXJyVGltZSA9IG5ldyBEYXRlKCkuZ2V0VGltZSgpO1xuICAgICAgICBjb25zdCB0aW1lVG9DYWxsID0gTWF0aC5tYXgoMCwgMTYgLSAoY3VyclRpbWUgLSBsYXN0VGltZSkpO1xuICAgICAgICBjb25zdCBpZCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgY2FsbGJhY2soY3VyclRpbWUgKyB0aW1lVG9DYWxsKTtcbiAgICAgICAgfSwgdGltZVRvQ2FsbCk7XG4gICAgICAgIGxhc3RUaW1lID0gY3VyclRpbWUgKyB0aW1lVG9DYWxsO1xuICAgICAgICByZXR1cm4gaWQ7XG4gICAgfTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBFeGVjdXRlRHluYW1pY0NvbW1hbmQoY29tbWFuZDogeyBJZDogc3RyaW5nIH0sIG1vOiBNZXRhb2JqZWN0RGF0YU1vZGVsIHwgbnVsbCA9IG51bGwpOiB2b2lkIHtcbiAgICBjb25zdCBlID0geyBjb21tYW5kLCBEeW5hbWljU2V0dGluZzogbW8sIE1vOiBtbyB9O1xuICAgIEJhcnNhQXBpLkNvbW1vbi5DdXN0b21Db2RlTWFuYWdlci5SdW5EeW5hbWljQ29tbWFuZChjb21tYW5kLklkLCBlKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBFeGVjdXRlV29ya2Zsb3dDaG9pY2VEZWYoc2NvcGUsIHBhcmFtLCBzdWNjZXNzOiAocmVzdWx0KSA9PiB2b2lkLCBmYWlsZWQ6IChlcnJvcikgPT4gdm9pZCk6IHZvaWQge1xuICAgIEJhcnNhQXBpLkNvbW1vbi5BamF4LkdldFNlcnZlckRhdGEoXG4gICAgICAgICdXb3JrZmxvdzk0LkNob2ljZVNlbGVjdCcsXG4gICAgICAgIHBhcmFtLFxuICAgICAgICAocmVzdWx0KSA9PiB7XG4gICAgICAgICAgICBzdWNjZXNzKHJlc3VsdCk7XG4gICAgICAgIH0sIC8vIHN1Y2Nlc3NcbiAgICAgICAgKGVycm9yKSA9PiB7XG4gICAgICAgICAgICBmYWlsZWQoZXJyb3IpO1xuICAgICAgICB9LCAvLyAgZXJyb3JcbiAgICAgICAgKCkgPT4ge30sIC8vIGRvUmV0dXJuXG4gICAgICAgIHNjb3BlLFxuICAgICAgICB0cnVlXG4gICAgKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBnZXRSZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKTogdHlwZW9mIHJlcXVlc3RBbmltYXRpb25GcmFtZSB7XG4gICAgaWYgKHR5cGVvZiB3aW5kb3cgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIHJldHVybiAoKSA9PiAwO1xuICAgIH1cbiAgICBpZiAod2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSkge1xuICAgICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vdnVlanMvdnVlL2lzc3Vlcy80NDY1XG4gICAgICAgIHJldHVybiB3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lLmJpbmQod2luZG93KTtcbiAgICB9XG5cbiAgICBjb25zdCBwcmVmaXggPSBhdmFpbGFibGVQcmVmaXhlcy5maWx0ZXIoKGtleSkgPT4gYCR7a2V5fVJlcXVlc3RBbmltYXRpb25GcmFtZWAgaW4gd2luZG93KVswXTtcblxuICAgIHJldHVybiBwcmVmaXggPyAod2luZG93IGFzIE56U2FmZUFueSlbYCR7cHJlZml4fVJlcXVlc3RBbmltYXRpb25GcmFtZWBdIDogcmVxdWVzdEFuaW1hdGlvbkZyYW1lUG9seWZpbGwoKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBjYW5jZWxSZXF1ZXN0QW5pbWF0aW9uRnJhbWUoaWQ6IG51bWJlcik6IE56U2FmZUFueSB7XG4gICAgaWYgKHR5cGVvZiB3aW5kb3cgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBpZiAod2luZG93LmNhbmNlbEFuaW1hdGlvbkZyYW1lKSB7XG4gICAgICAgIHJldHVybiB3aW5kb3cuY2FuY2VsQW5pbWF0aW9uRnJhbWUoaWQpO1xuICAgIH1cbiAgICBjb25zdCBwcmVmaXggPSBhdmFpbGFibGVQcmVmaXhlcy5maWx0ZXIoXG4gICAgICAgIChrZXkpID0+IGAke2tleX1DYW5jZWxBbmltYXRpb25GcmFtZWAgaW4gd2luZG93IHx8IGAke2tleX1DYW5jZWxSZXF1ZXN0QW5pbWF0aW9uRnJhbWVgIGluIHdpbmRvd1xuICAgIClbMF07XG5cbiAgICByZXR1cm4gcHJlZml4XG4gICAgICAgID8gKFxuICAgICAgICAgICAgICAod2luZG93IGFzIE56U2FmZUFueSlbYCR7cHJlZml4fUNhbmNlbEFuaW1hdGlvbkZyYW1lYF0gfHxcbiAgICAgICAgICAgICAgKHdpbmRvdyBhcyBOelNhZmVBbnkpW2Ake3ByZWZpeH1DYW5jZWxSZXF1ZXN0QW5pbWF0aW9uRnJhbWVgXVxuICAgICAgICAgIClcbiAgICAgICAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICAgICAgICAuY2FsbCh0aGlzLCBpZClcbiAgICAgICAgOiBjbGVhclRpbWVvdXQoaWQpO1xufVxuXG5leHBvcnQgdHlwZSBFYXN5aW5nRm4gPSAodDogbnVtYmVyLCBiOiBudW1iZXIsIGM6IG51bWJlciwgZDogbnVtYmVyKSA9PiBudW1iZXI7XG5cbmV4cG9ydCBmdW5jdGlvbiBlYXNlSW5PdXRDdWJpYyh0OiBudW1iZXIsIGI6IG51bWJlciwgYzogbnVtYmVyLCBkOiBudW1iZXIpOiBudW1iZXIge1xuICAgIGNvbnN0IGNjID0gYyAtIGI7XG4gICAgbGV0IHR0ID0gdCAvIChkIC8gMik7XG4gICAgaWYgKHR0IDwgMSkge1xuICAgICAgICByZXR1cm4gKGNjIC8gMikgKiB0dCAqIHR0ICogdHQgKyBiO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiAoY2MgLyAyKSAqICgodHQgLT0gMikgKiB0dCAqIHR0ICsgMikgKyBiO1xuICAgIH1cbn1cblxuZXhwb3J0IGludGVyZmFjZSBOelNjcm9sbFRvT3B0aW9ucyB7XG4gICAgLyoqIEFuaW1hdGlvbiBkdXJhdGlvbiwgZGVmYXVsdCBhcyA0NTAgKi9cbiAgICBkdXJhdGlvbj86IG51bWJlcjtcbiAgICAvKiogU2Nyb2xsIGNvbnRhaW5lciwgZGVmYXVsdCBhcyB3aW5kb3cgKi9cbiAgICBlYXNpbmc/OiBFYXN5aW5nRm47XG4gICAgLyoqIFNjcm9sbCBlbmQgY2FsbGJhY2sgKi9cbiAgICBjYWxsYmFjaz8oKTogdm9pZDtcbn1cbmV4cG9ydCBjb25zdCBXb3JkTWltZVR5cGUgPVxuICAgICcuZG9jLC5kb2N4LGFwcGxpY2F0aW9uL21zd29yZCxhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQud29yZHByb2Nlc3NpbmdtbC5kb2N1bWVudCc7XG5leHBvcnQgY29uc3QgSW1hZ2VNaW1lVHlwZSA9ICcuanBlZywuanBnLC5naWYsLnBuZywuYm1wLC50aWYsaW1hZ2UvKic7XG5leHBvcnQgY29uc3QgUGRmTWltZVR5cGUgPSAnLnBkZic7XG5leHBvcnQgY29uc3QgQWxsRmlsZXNNaW1lVHlwZSA9ICcudHh0LC5wcHQsLnBkZiwuKic7XG5leHBvcnQgY29uc3QgVmlkZW9NaW1lVHlwZSA9ICd2aWRlby8qJztcbmV4cG9ydCBjb25zdCBBdWRpb01pbWVUeXBlID0gJ2F1ZGlvLyonO1xuXG5leHBvcnQgZnVuY3Rpb24gQ2hhbmdlTGF5b3V0SW5mb0N1c3RvbVVpKGxheW91dEluZm86IExheW91dFNldHRpbmcsIGNvbXBvbmVudFVpOiBFanJheU9sZ28pOiB2b2lkIHtcbiAgICBsYXlvdXRJbmZvLkZpZWxkVWkuU2V0dGluZy5DdXN0b21VaSA9IGNvbXBvbmVudFVpO1xufVxuIl19
@@ -10,17 +10,27 @@ export class LabelmandatoryDirective extends BaseDirective {
10
10
  }
11
11
  ngOnInit() {
12
12
  super.ngOnInit();
13
+ this._checkStar(this.lblMandatory);
14
+ }
15
+ ngOnChanges(changes) {
16
+ super.ngOnChanges(changes);
17
+ const { lblMandatory } = changes;
18
+ if (lblMandatory && !lblMandatory.firstChange) {
19
+ this._checkStar(lblMandatory.currentValue);
20
+ }
21
+ }
22
+ _checkStar(mandatory) {
13
23
  const dom = this._el.nativeElement;
14
24
  let style = '';
15
25
  if (this.mandatoryStyle) {
16
26
  style = `style='${this.mandatoryStyle}'`;
17
27
  }
18
- if (this.lblMandatory) {
28
+ if (mandatory) {
19
29
  dom.innerHTML += `<strong ${style}>*</strong>`;
20
30
  }
21
31
  }
22
32
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.5", ngImport: i0, type: LabelmandatoryDirective, deps: [{ token: i0.ElementRef }, { token: DOCUMENT }], target: i0.ɵɵFactoryTarget.Directive }); }
23
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.3.5", type: LabelmandatoryDirective, selector: "[lblMandatory]", inputs: { lblMandatory: "lblMandatory", mandatoryStyle: "mandatoryStyle" }, usesInheritance: true, ngImport: i0 }); }
33
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.3.5", type: LabelmandatoryDirective, selector: "[lblMandatory]", inputs: { lblMandatory: "lblMandatory", mandatoryStyle: "mandatoryStyle" }, usesInheritance: true, usesOnChanges: true, ngImport: i0 }); }
24
34
  }
25
35
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.5", ngImport: i0, type: LabelmandatoryDirective, decorators: [{
26
36
  type: Directive,
@@ -35,4 +45,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.5", ngImpor
35
45
  }], mandatoryStyle: [{
36
46
  type: Input
37
47
  }] } });
38
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGFiZWwtbWFuZGF0b3J5LmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2JhcnNhLW5vdmluLXJheS1jb3JlL3NyYy9saWIvZGlyZWN0aXZlcy9sYWJlbC1tYW5kYXRvcnkuZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQWMsTUFBTSxFQUFFLEtBQUssRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNyRSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDM0MsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGtCQUFrQixDQUFDOztBQUtqRCxNQUFNLE9BQU8sdUJBQXdCLFNBQVEsYUFBYTtJQUd0RCxZQUFzQixHQUFlLEVBQThCLFNBQVM7UUFDeEUsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBRE8sUUFBRyxHQUFILEdBQUcsQ0FBWTtRQUE4QixjQUFTLEdBQVQsU0FBUyxDQUFBO0lBRTVFLENBQUM7SUFDRCxRQUFRO1FBQ0osS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQ2pCLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsYUFBNEIsQ0FBQztRQUNsRCxJQUFJLEtBQUssR0FBRyxFQUFFLENBQUM7UUFDZixJQUFJLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztZQUN0QixLQUFLLEdBQUcsVUFBVSxJQUFJLENBQUMsY0FBYyxHQUFHLENBQUM7UUFDN0MsQ0FBQztRQUNELElBQUksSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1lBQ3BCLEdBQUcsQ0FBQyxTQUFTLElBQUksV0FBVyxLQUFLLGFBQWEsQ0FBQztRQUNuRCxDQUFDO0lBQ0wsQ0FBQzs4R0FoQlEsdUJBQXVCLDRDQUdlLFFBQVE7a0dBSDlDLHVCQUF1Qjs7MkZBQXZCLHVCQUF1QjtrQkFIbkMsU0FBUzttQkFBQztvQkFDUCxRQUFRLEVBQUUsZ0JBQWdCO2lCQUM3Qjs7MEJBSTJDLE1BQU07MkJBQUMsUUFBUTt5Q0FGOUMsWUFBWTtzQkFBcEIsS0FBSztnQkFDRyxjQUFjO3NCQUF0QixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGlyZWN0aXZlLCBFbGVtZW50UmVmLCBJbmplY3QsIElucHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBET0NVTUVOVCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBCYXNlRGlyZWN0aXZlIH0gZnJvbSAnLi9iYXNlLmRpcmVjdGl2ZSc7XG5cbkBEaXJlY3RpdmUoe1xuICAgIHNlbGVjdG9yOiAnW2xibE1hbmRhdG9yeV0nXG59KVxuZXhwb3J0IGNsYXNzIExhYmVsbWFuZGF0b3J5RGlyZWN0aXZlIGV4dGVuZHMgQmFzZURpcmVjdGl2ZSB7XG4gICAgQElucHV0KCkgbGJsTWFuZGF0b3J5OiBib29sZWFuO1xuICAgIEBJbnB1dCgpIG1hbmRhdG9yeVN0eWxlOiBzdHJpbmc7XG4gICAgY29uc3RydWN0b3IocHJvdGVjdGVkIF9lbDogRWxlbWVudFJlZiwgQEluamVjdChET0NVTUVOVCkgcHJvdGVjdGVkIF9kb2N1bWVudCkge1xuICAgICAgICBzdXBlcihfZWwpO1xuICAgIH1cbiAgICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAgICAgc3VwZXIubmdPbkluaXQoKTtcbiAgICAgICAgY29uc3QgZG9tID0gdGhpcy5fZWwubmF0aXZlRWxlbWVudCBhcyBIVE1MRWxlbWVudDtcbiAgICAgICAgbGV0IHN0eWxlID0gJyc7XG4gICAgICAgIGlmICh0aGlzLm1hbmRhdG9yeVN0eWxlKSB7XG4gICAgICAgICAgICBzdHlsZSA9IGBzdHlsZT0nJHt0aGlzLm1hbmRhdG9yeVN0eWxlfSdgO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmxibE1hbmRhdG9yeSkge1xuICAgICAgICAgICAgZG9tLmlubmVySFRNTCArPSBgPHN0cm9uZyAke3N0eWxlfT4qPC9zdHJvbmc+YDtcbiAgICAgICAgfVxuICAgIH1cbn1cbiJdfQ==
48
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGFiZWwtbWFuZGF0b3J5LmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2JhcnNhLW5vdmluLXJheS1jb3JlL3NyYy9saWIvZGlyZWN0aXZlcy9sYWJlbC1tYW5kYXRvcnkuZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQWMsTUFBTSxFQUFFLEtBQUssRUFBaUIsTUFBTSxlQUFlLENBQUM7QUFDcEYsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzNDLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQzs7QUFLakQsTUFBTSxPQUFPLHVCQUF3QixTQUFRLGFBQWE7SUFHdEQsWUFBc0IsR0FBZSxFQUE4QixTQUFTO1FBQ3hFLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztRQURPLFFBQUcsR0FBSCxHQUFHLENBQVk7UUFBOEIsY0FBUyxHQUFULFNBQVMsQ0FBQTtJQUU1RSxDQUFDO0lBQ0QsUUFBUTtRQUNKLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUNqQixJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztJQUN2QyxDQUFDO0lBQ0QsV0FBVyxDQUFDLE9BQXNCO1FBQzlCLEtBQUssQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDM0IsTUFBTSxFQUFFLFlBQVksRUFBRSxHQUFHLE9BQU8sQ0FBQztRQUNqQyxJQUFJLFlBQVksSUFBSSxDQUFDLFlBQVksQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUM1QyxJQUFJLENBQUMsVUFBVSxDQUFDLFlBQVksQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUMvQyxDQUFDO0lBQ0wsQ0FBQztJQUNELFVBQVUsQ0FBQyxTQUFrQjtRQUN6QixNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLGFBQTRCLENBQUM7UUFDbEQsSUFBSSxLQUFLLEdBQUcsRUFBRSxDQUFDO1FBQ2YsSUFBSSxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7WUFDdEIsS0FBSyxHQUFHLFVBQVUsSUFBSSxDQUFDLGNBQWMsR0FBRyxDQUFDO1FBQzdDLENBQUM7UUFDRCxJQUFJLFNBQVMsRUFBRSxDQUFDO1lBQ1osR0FBRyxDQUFDLFNBQVMsSUFBSSxXQUFXLEtBQUssYUFBYSxDQUFDO1FBQ25ELENBQUM7SUFDTCxDQUFDOzhHQTFCUSx1QkFBdUIsNENBR2UsUUFBUTtrR0FIOUMsdUJBQXVCOzsyRkFBdkIsdUJBQXVCO2tCQUhuQyxTQUFTO21CQUFDO29CQUNQLFFBQVEsRUFBRSxnQkFBZ0I7aUJBQzdCOzswQkFJMkMsTUFBTTsyQkFBQyxRQUFRO3lDQUY5QyxZQUFZO3NCQUFwQixLQUFLO2dCQUNHLGNBQWM7c0JBQXRCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEaXJlY3RpdmUsIEVsZW1lbnRSZWYsIEluamVjdCwgSW5wdXQsIFNpbXBsZUNoYW5nZXMgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IERPQ1VNRU5UIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IEJhc2VEaXJlY3RpdmUgfSBmcm9tICcuL2Jhc2UuZGlyZWN0aXZlJztcblxuQERpcmVjdGl2ZSh7XG4gICAgc2VsZWN0b3I6ICdbbGJsTWFuZGF0b3J5XSdcbn0pXG5leHBvcnQgY2xhc3MgTGFiZWxtYW5kYXRvcnlEaXJlY3RpdmUgZXh0ZW5kcyBCYXNlRGlyZWN0aXZlIHtcbiAgICBASW5wdXQoKSBsYmxNYW5kYXRvcnk6IGJvb2xlYW47XG4gICAgQElucHV0KCkgbWFuZGF0b3J5U3R5bGU6IHN0cmluZztcbiAgICBjb25zdHJ1Y3Rvcihwcm90ZWN0ZWQgX2VsOiBFbGVtZW50UmVmLCBASW5qZWN0KERPQ1VNRU5UKSBwcm90ZWN0ZWQgX2RvY3VtZW50KSB7XG4gICAgICAgIHN1cGVyKF9lbCk7XG4gICAgfVxuICAgIG5nT25Jbml0KCk6IHZvaWQge1xuICAgICAgICBzdXBlci5uZ09uSW5pdCgpO1xuICAgICAgICB0aGlzLl9jaGVja1N0YXIodGhpcy5sYmxNYW5kYXRvcnkpO1xuICAgIH1cbiAgICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgICAgIHN1cGVyLm5nT25DaGFuZ2VzKGNoYW5nZXMpO1xuICAgICAgICBjb25zdCB7IGxibE1hbmRhdG9yeSB9ID0gY2hhbmdlcztcbiAgICAgICAgaWYgKGxibE1hbmRhdG9yeSAmJiAhbGJsTWFuZGF0b3J5LmZpcnN0Q2hhbmdlKSB7XG4gICAgICAgICAgICB0aGlzLl9jaGVja1N0YXIobGJsTWFuZGF0b3J5LmN1cnJlbnRWYWx1ZSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgX2NoZWNrU3RhcihtYW5kYXRvcnk6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICAgICAgY29uc3QgZG9tID0gdGhpcy5fZWwubmF0aXZlRWxlbWVudCBhcyBIVE1MRWxlbWVudDtcbiAgICAgICAgbGV0IHN0eWxlID0gJyc7XG4gICAgICAgIGlmICh0aGlzLm1hbmRhdG9yeVN0eWxlKSB7XG4gICAgICAgICAgICBzdHlsZSA9IGBzdHlsZT0nJHt0aGlzLm1hbmRhdG9yeVN0eWxlfSdgO1xuICAgICAgICB9XG4gICAgICAgIGlmIChtYW5kYXRvcnkpIHtcbiAgICAgICAgICAgIGRvbS5pbm5lckhUTUwgKz0gYDxzdHJvbmcgJHtzdHlsZX0+Kjwvc3Ryb25nPmA7XG4gICAgICAgIH1cbiAgICB9XG59XG4iXX0=
@@ -1554,14 +1554,13 @@ function getLabelWidth(item) {
1554
1554
  if (labelCaption === '&zwnj;') {
1555
1555
  labelCaption = '';
1556
1556
  }
1557
- if (item.FieldUi?.Setting?.IsMandatory) {
1558
- if (labelCaption.indexOf('*') < 0) {
1559
- labelCaption = labelCaption + ' *';
1560
- }
1561
- }
1562
- else {
1563
- labelCaption = labelCaption.replace('*', '');
1564
- }
1557
+ labelCaption = labelCaption + ' * ';
1558
+ // if (item.FieldUi?.Setting?.IsMandatory) {
1559
+ // if (labelCaption.indexOf('*') < 0) {
1560
+ // }
1561
+ // } else {
1562
+ // labelCaption = labelCaption.replace('*', '');
1563
+ // }
1565
1564
  labelCaption += ':';
1566
1565
  const labelWidth = measureText(labelCaption);
1567
1566
  let labelWithPadding = labelWidth + 10;
@@ -12986,17 +12985,27 @@ class LabelmandatoryDirective extends BaseDirective {
12986
12985
  }
12987
12986
  ngOnInit() {
12988
12987
  super.ngOnInit();
12988
+ this._checkStar(this.lblMandatory);
12989
+ }
12990
+ ngOnChanges(changes) {
12991
+ super.ngOnChanges(changes);
12992
+ const { lblMandatory } = changes;
12993
+ if (lblMandatory && !lblMandatory.firstChange) {
12994
+ this._checkStar(lblMandatory.currentValue);
12995
+ }
12996
+ }
12997
+ _checkStar(mandatory) {
12989
12998
  const dom = this._el.nativeElement;
12990
12999
  let style = '';
12991
13000
  if (this.mandatoryStyle) {
12992
13001
  style = `style='${this.mandatoryStyle}'`;
12993
13002
  }
12994
- if (this.lblMandatory) {
13003
+ if (mandatory) {
12995
13004
  dom.innerHTML += `<strong ${style}>*</strong>`;
12996
13005
  }
12997
13006
  }
12998
13007
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.5", ngImport: i0, type: LabelmandatoryDirective, deps: [{ token: i0.ElementRef }, { token: DOCUMENT }], target: i0.ɵɵFactoryTarget.Directive }); }
12999
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.3.5", type: LabelmandatoryDirective, selector: "[lblMandatory]", inputs: { lblMandatory: "lblMandatory", mandatoryStyle: "mandatoryStyle" }, usesInheritance: true, ngImport: i0 }); }
13008
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.3.5", type: LabelmandatoryDirective, selector: "[lblMandatory]", inputs: { lblMandatory: "lblMandatory", mandatoryStyle: "mandatoryStyle" }, usesInheritance: true, usesOnChanges: true, ngImport: i0 }); }
13000
13009
  }
13001
13010
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.5", ngImport: i0, type: LabelmandatoryDirective, decorators: [{
13002
13011
  type: Directive,