barsa-novin-ray-core 2.0.106 → 2.0.107
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/lib/barsa-novin-ray-core.module.mjs +8 -5
- package/esm2022/lib/constants.mjs +2 -2
- package/esm2022/lib/directives/absolute-div-body.directive.mjs +45 -0
- package/esm2022/lib/directives/index.mjs +2 -1
- package/esm2022/lib/pipes/seperator-fix.pipe.mjs +3 -3
- package/esm2022/lib/root-portal/root-portal.component.mjs +67 -67
- package/esm2022/lib/services/ulvmain.service.mjs +10 -1
- package/fesm2022/barsa-novin-ray-core.mjs +126 -73
- package/fesm2022/barsa-novin-ray-core.mjs.map +1 -1
- package/lib/barsa-novin-ray-core.module.d.ts +7 -6
- package/lib/directives/absolute-div-body.directive.d.ts +17 -0
- package/lib/directives/index.d.ts +1 -0
- package/lib/pipes/seperator-fix.pipe.d.ts +1 -1
- package/lib/services/ulvmain.service.d.ts +3 -0
- package/package.json +1 -1
|
@@ -539,7 +539,7 @@ export function FindLayoutSettingFromLayout94(layout94, layoutTitle) {
|
|
|
539
539
|
if (!layoutTitle) {
|
|
540
540
|
return null;
|
|
541
541
|
}
|
|
542
|
-
if (layout94.Caption === layoutTitle || layout94.Title === layoutTitle) {
|
|
542
|
+
if (layout94.Caption === layoutTitle || layout94.Title === layoutTitle || layout94.ControlId === layoutTitle) {
|
|
543
543
|
return layout94;
|
|
544
544
|
}
|
|
545
545
|
let tempLayout94 = null;
|
|
@@ -888,4 +888,4 @@ export const AudioMimeType = 'audio/*';
|
|
|
888
888
|
export function ChangeLayoutInfoCustomUi(layoutInfo, componentUi) {
|
|
889
889
|
layoutInfo.FieldUi.Setting.CustomUi = componentUi;
|
|
890
890
|
}
|
|
891
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uc3RhbnRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvYmFyc2Etbm92aW4tcmF5LWNvcmUvc3JjL2xpYi9jb25zdGFudHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsb0JBQW9CO0FBQ3BCLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUN2RCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFleEQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLGlCQUFpQixFQUFlLGlCQUFpQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDdEcsT0FBTyxLQUFLLE1BQU0sTUFBTSxVQUFVLENBQUM7QUFJbkMsTUFBTSxDQUFOLElBQVksb0JBS1g7QUFMRCxXQUFZLG9CQUFvQjtJQUM1QixxRkFBbUIsQ0FBQTtJQUNuQixtRkFBa0IsQ0FBQTtJQUNsQixtRkFBa0IsQ0FBQTtJQUNsQiw2RUFBZSxDQUFBO0FBQ25CLENBQUMsRUFMVyxvQkFBb0IsS0FBcEIsb0JBQW9CLFFBSy9CO0FBQ0QsTUFBTSxVQUFVLGVBQWUsQ0FDM0IsZUFBcUMsRUFDckMsT0FBMkIsRUFDM0IsTUFBOEIsRUFDOUIsU0FBb0I7SUFFcEIsSUFBSSxRQUFRLEdBQUcsRUFBRSxDQUFDO0lBQ2xCLFFBQVEsZUFBZSxFQUFFLENBQUM7UUFDdEIsS0FBSyxvQkFBb0IsQ0FBQyxlQUFlO1lBQ3JDLFFBQVEsR0FBRyxlQUFlLENBQUM7WUFDM0IsTUFBTTtRQUNWLEtBQUssb0JBQW9CLENBQUMsY0FBYztZQUNwQyxRQUFRLEdBQUcsb0JBQW9CLENBQUM7WUFDaEMsTUFBTTtRQUNWLEtBQUssb0JBQW9CLENBQUMsY0FBYztZQUNwQyxRQUFRLEdBQUcsUUFBUSxDQUFDO1lBQ3BCLE1BQU07UUFDVixLQUFLLG9CQUFvQixDQUFDLFdBQVc7WUFDakMsUUFBUSxHQUFHLGNBQWMsQ0FBQztZQUMxQixNQUFNO0lBQ2Qs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O0lBQ3RGLFVBQVUsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLFFBQVEsR0FBRyxXQUFXLENBQUM7QUFDdEQsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlICovXG5pbXBvcnQgeyBfaXNOdW1iZXJWYWx1ZSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9jb2VyY2lvbic7XG5pbXBvcnQgeyBCYXJzYUFwaSB9IGZyb20gJy4vYWJzdHJhY3QtY2xhc3Nlcy9iYXJzYS1hcGknO1xuaW1wb3J0IHtcbiAgICBBYmJyZXZhdGlvbkRldmljZVNpemUsXG4gICAgQ29sU2V0dGluZyxcbiAgICBFanJheU9sZ28sXG4gICAgRm9ybVNldHRpbmcsXG4gICAgR2VuZXJhbENvbnRyb2xJbmZvTW9kZWwsXG4gICAgR3JpZFNldHRpbmcsXG4gICAgTGF5b3V0U2V0dGluZyxcbiAgICBNZW51SXRlbSxcbiAgICBNZXRhb2JqZWN0RGF0YU1vZGVsLFxuICAgIFJlcG9ydFZpZXdDb2x1bW4sXG4gICAgU29ydFNldHRpbmcsXG4gICAgVHJlZU5vZGVPYmpcbn0gZnJvbSAnLi9hYnN0cmFjdC1jbGFzc2VzL21vZGVscyc7XG5pbXBvcnQgeyBEYXRlSGlqcmlTZXJ2aWNlLCBEYXRlTWlsYWRpU2VydmljZSwgRGF0ZVNlcnZpY2UsIERhdGVTaGFtc2lTZXJ2aWNlIH0gZnJvbSAnLi9kYXRlLXNlcnZpY2VzJztcbmltcG9ydCAqIGFzIERldmljZSBmcm9tICcuL2RldmljZSc7XG5pbXBvcnQgeyBMb2dTZXJ2aWNlIH0gZnJvbSAnLi9zZXJ2aWNlcy9sb2cuc2VydmljZSc7XG5pbXBvcnQgeyBSZW5kZXJlcjIgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuZXhwb3J0IGVudW0gVGFibGVIZWFkZXJXaWR0aE1vZGUge1xuICAgIEZpdFRvUm93Q29udGVudCA9IDEsXG4gICAgRml0VG9Db250YWluZXIgPSAyLFxuICAgIEZyZWVDb2x1bW5TaXplID0gMyxcbiAgICBDb2x1bW5XaWR0aCA9IDRcbn1cbmV4cG9ydCBmdW5jdGlvbiBzZXRUYWJsZVRoV2lkdGgoXG4gICAgdGFibGVIZWFkZXJNb2RlOiBUYWJsZUhlYWRlcldpZHRoTW9kZSxcbiAgICBjb2x1bW5zOiBSZXBvcnRWaWV3Q29sdW1uW10sXG4gICAgdGhMaXN0OiBIVE1MVGFibGVDZWxsRWxlbWVudFtdLFxuICAgIHJlbmRlcmVyMjogUmVuZGVyZXIyXG4pOiB2b2lkIHtcbiAgICBsZXQgcHJvcE5hbWUgPSAnJztcbiAgICBzd2l0Y2ggKHRhYmxlSGVhZGVyTW9kZSkge1xuICAgICAgICBjYXNlIFRhYmxlSGVhZGVyV2lkdGhNb2RlLkZpdFRvUm93Q29udGVudDpcbiAgICAgICAgICAgIHByb3BOYW1lID0gJyRGaXRUb0NvbnRlbnQnO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgVGFibGVIZWFkZXJXaWR0aE1vZGUuRml0VG9Db250YWluZXI6XG4gICAgICAgICAgICBwcm9wTmFtZSA9ICckRml0Q29udGFpbmVyV2lkdGgnO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgVGFibGVIZWFkZXJXaWR0aE1vZGUuRnJlZUNvbHVtblNpemU6XG4gICAgICAgICAgICBwcm9wTmFtZSA9ICckV2lkdGgnO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgVGFibGVIZWFkZXJXaWR0aE1vZGUuQ29sdW1uV2lkdGg6XG4gICAgICAgICAgICBwcm9wTmFtZSA9ICckQ29sdW1uV2lkdGgnO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgfVxuICAgIHRoTGlzdC5mb3JFYWNoKChjLCBpKSA9PiB7XG4gICAgICAgIGNvbnN0IHd4ID0gX2NhbGNXaWR0aE9mVGgoY29sdW1uc1tpXSwgaSwgcHJvcE5hbWUsIHRoTGlzdCk7XG4gICAgICAgIHd4ICYmIHJlbmRlcmVyMi5zZXRTdHlsZShjLCAnd2lkdGgnLCB3eCk7XG4gICAgfSk7XG59XG5mdW5jdGlvbiBfY2FsY1dpZHRoT2ZUaChjb2x1bW46IFJlcG9ydFZpZXdDb2x1bW4sIGk6IG51bWJlciwgcHJvcE5hbWU6IHN0cmluZywgdGhMaXN0KTogc3RyaW5nIHtcbiAgICBpZiAoIWNvbHVtbikge1xuICAgICAgICByZXR1cm4gJyc7XG4gICAgfVxuICAgIGlmIChjb2x1bW4uJElzSW1hZ2VPcmljb24gJiYgaSA8IHRoTGlzdC5sZW5ndGggLSAxKSB7XG4gICAgICAgIGNvbnN0IGZpZWxkVHlwZUlkID0gK2NvbHVtbi5GaWVsZFR5cGVJZDtcbiAgICAgICAgaWYgKGZpZWxkVHlwZUlkID09PSA2IHx8IGZpZWxkVHlwZUlkID09PSA1IHx8IGZpZWxkVHlwZUlkID09PSA0Mikge1xuICAgICAgICAgICAgcmV0dXJuICcyNHB4JztcbiAgICAgICAgfVxuICAgICAgICBkZWJ1Z2dlcjtcbiAgICB9XG4gICAgcmV0dXJuIGNvbHVtbi4kSXNJbWFnZU9yaWNvbiAmJiBpIDwgdGhMaXN0Lmxlbmd0aCAtIDEgPyAnNDJweCcgOiBjb2x1bW5bcHJvcE5hbWVdO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGNhbGN1bGF0ZUNvbHVtbkNvbnRlbnQoY29sdW1uczogUmVwb3J0Vmlld0NvbHVtbltdLCBtb0RhdGFMaXN0OiBNZXRhb2JqZWN0RGF0YU1vZGVsW10pOiB2b2lkIHtcbiAgICBjb2x1bW5zLmZvckVhY2goKGNvbHVtbikgPT4ge1xuICAgICAgICBzZXRDb2x1bW5XaWR0aEJ5TWF4TW9Db250ZW50V2lkdGgobW9EYXRhTGlzdCwgY29sdW1uKTtcbiAgICB9KTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBjYWxjdWxhdGVDb2x1bW5XaWR0aChcbiAgICBjb250YWluZXI6IEhUTUxFbGVtZW50LFxuICAgIGNvbHVtbnM6IFJlcG9ydFZpZXdDb2x1bW5bXSxcbiAgICBtb0RhdGFMaXN0OiBNZXRhb2JqZWN0RGF0YU1vZGVsW10sXG4gICAgZGlzYWJsZUNvbnRleHRNZW51T3ZlcmZsb3c6IGJvb2xlYW4sXG4gICAgY29udGV4dE1lbnVJdGVtczogTWVudUl0ZW1bXVxuKTogeyBjb2x1bW5zOiBSZXBvcnRWaWV3Q29sdW1uW107IGNvbnRleHRNZW51V2lkdGg6IG51bWJlciB9IHtcbiAgICBjb2x1bW5zXG4gICAgICAgIC5maWx0ZXIoKGMpID0+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/Lmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICBpdGVtID0gZmluZEluQXJyYXkoYy5tZW51Lml0ZW1zLCB2YWx1ZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIGl0ZW07XG4gICAgfTtcbiAgICByZXR1cm4gZmluZEluQXJyYXkodG9vbGJhckl0ZW1zLCB2YWx1ZSk7XG59XG5leHBvcnQgZnVuY3Rpb24gRmluZExheW91dFNldHRpbmdGcm9tTGF5b3V0OTQobGF5b3V0OTQ6IExheW91dFNldHRpbmcsIGxheW91dFRpdGxlOiBzdHJpbmcpOiBMYXlvdXRTZXR0aW5nIHwgbnVsbCB7XG4gICAgaWYgKCFsYXlvdXRUaXRsZSkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgaWYgKGxheW91dDk0LkNhcHRpb24gPT09IGxheW91dFRpdGxlIHx8IGxheW91dDk0LlRpdGxlID09PSBsYXlvdXRUaXRsZSkge1xuICAgICAgICByZXR1cm4gbGF5b3V0OTQ7XG4gICAgfVxuICAgIGxldCB0ZW1wTGF5b3V0OTQ6IExheW91dFNldHRpbmcgfCBudWxsID0gbnVsbDtcbiAgICBpZiAobGF5b3V0OTQuaXRlbXM/Lmxlbmd0aCkge1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxheW91dDk0Lml0ZW1zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBpZiAoIXRlbXBMYXlvdXQ5NCkge1xuICAgICAgICAgICAgICAgIHRlbXBMYXlvdXQ5NCA9IEZpbmRMYXlvdXRTZXR0aW5nRnJvbUxheW91dDk0KGxheW91dDk0Lml0ZW1zW2ldLCBsYXlvdXRUaXRsZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRlbXBMYXlvdXQ5NDtcbn1cbmV4cG9ydCBmdW5jdGlvbiBnZXRHcmlkU2V0dGluZ3MoY29udGV4dCk6IEdyaWRTZXR0aW5nIHtcbiAgICBjb25zdCBncmlkU2V0dGluZyA9IEJhcnNhQXBpLkNvbW1vbi5VdGlsLlRyeUdldFZhbHVlKGNvbnRleHQsICdTZXR0aW5nLlZpZXcuR3JpZFNldHRpbmcnLCBudWxsKTtcbiAgICByZXR1cm4ge1xuICAgICAgICBDb2xTZXR0aW5nTGlzdDogZ3JpZFNldHRpbmc/LkNvbFNldHRpbmdMaXN0ID8/IG51bGwsXG4gICAgICAgIFNvcnRTZXR0aW5nTGlzdDogZ3JpZFNldHRpbmc/LlNvcnRTZXR0aW5nTGlzdCA/PyBbXSxcbiAgICAgICAgQXV0b1NpemVDb2x1bW5zOiBncmlkU2V0dGluZz8uQXV0b1NpemVDb2x1bW5zID8/IGZhbHNlXG4gICAgfTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBnZXRSZXNldEdyaWRTZXR0aW5ncyhjb2x1bW5zOiBSZXBvcnRWaWV3Q29sdW1uW10gfCBhbnlbXSwgY29udGV4dDogYW55KTogR3JpZFNldHRpbmcge1xuICAgIGNvbnN0IGNvbExpc3QgPSBjb2x1bW5zO1xuICAgIGNvbnN0IHNldHRpbmdzID0gZ2V0R3JpZFNldHRpbmdzKGNvbnRleHQpO1xuICAgIHNldHRpbmdzLkNvbFNldHRpbmdMaXN0ID0gY29sTGlzdC5tYXAoKGMpID0+ICh7XG4gICAgICAgIElzSGlkZGVuOiBjLkhpZGRlbixcbiAgICAgICAgTmFtZTogYy5OYW1lLFxuICAgICAgICBXaWR0aDogYy5XaWR0aCxcbiAgICAgICAgQ2FwdGlvbjogYy5DYXB0aW9uXG4gICAgfSkpO1xuICAgIHJldHVybiBzZXR0aW5ncztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIEdldERlZmF1bHRNb09iamVjdEluZm8odHlwZURlZklkOiBzdHJpbmcpOiBNZXRhb2JqZWN0RGF0YU1vZGVsIHtcbiAgICByZXR1cm4ge1xuICAgICAgICBJZDogJzAnLFxuICAgICAgICAkQ2FwdGlvbjogJycsXG4gICAgICAgICRUeXBlRGVmSWQ6IHR5cGVEZWZJZCxcbiAgICAgICAgJFN0YXRlOiAnTmV3JyxcbiAgICAgICAgJFR5cGU6ICdDb21tb24uTWV0YU9iamVjdFdlYicsXG4gICAgICAgICRGaWVsZERpY3Q6IHt9XG4gICAgfTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBnZXRMYXlvdXQ5NE9iamVjdEluZm8oKTogTGF5b3V0U2V0dGluZyB7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgVHlwZTogJ1Jvb3QnLFxuICAgICAgICBDb250cm9sSWQ6ICfYsduM2LTZhycsXG4gICAgICAgIHh0eXBlOiAnTHkuTGF5b3V0Q29udGFpbmVyJyxcbiAgICAgICAgQm91bmRzOiB7IHg6IDAsIHk6IDAsIHdpZHRoOiA0MzIsIGhlaWdodDogMjQgfSxcbiAgICAgICAgaXRlbXM6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBUeXBlOiAnVmVydGljYWxKb2luJyxcbiAgICAgICAgICAgICAgICB4dHlwZTogJ0x5LkxheW91dEpvaW4nLFxuICAgICAgICAgICAgICAgIElzVmVydGljYWw6IHRydWUsXG4gICAgICAgICAgICAgICAgQm91bmRzOiB7IHg6IDAsIHk6IDAsIHdpZHRoOiA0MzIsIGhlaWdodDogODIgfSxcbiAgICAgICAgICAgICAgICBpdGVtczogW11cbiAgICAgICAgICAgIH1cbiAgICAgICAgXVxuICAgIH07XG59XG5leHBvcnQgZnVuY3Rpb24gZ2V0Rm9ybVNldHRpbmdzKHR5cGVEZWZJZDogc3RyaW5nKTogRm9ybVNldHRpbmcge1xuICAgIGNvbnN0IG1vID0gR2V0RGVmYXVsdE1vT2JqZWN0SW5mbyh0eXBlRGVmSWQpO1xuXG4gICAgY29uc3QgZm9ybVBhbmVsU2V0dGluZ3M6IEZvcm1TZXR0aW5nID0ge1xuICAgICAgICBWaWV3OiB7XG4gICAgICAgICAgICBMYXlvdXQ5NDogZ2V0TGF5b3V0OTRPYmplY3RJbmZvLFxuICAgICAgICAgICAgQ29udHJvbEluZm86IFtdLFxuICAgICAgICAgICAgVHlwZURlZklkOiB0eXBlRGVmSWRcbiAgICAgICAgfSxcbiAgICAgICAgSXNTZWFyY2hQYW5lbDogdHJ1ZSxcbiAgICAgICAgRGF0YToge1xuICAgICAgICAgICAgTW86IG1vXG4gICAgICAgIH1cbiAgICB9O1xuICAgIHJldHVybiBmb3JtUGFuZWxTZXR0aW5ncztcbn1cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVGb3JtUGFuZWxNZXRhQ29uZGl0aW9ucyhcbiAgICB0eXBlRGVmSWQ6IHN0cmluZyxcbiAgICBjb250cm9sc0luZm86IEdlbmVyYWxDb250cm9sSW5mb01vZGVsW10sXG4gICAgY29udHJvbE5hbWU6IHN0cmluZyxcbiAgICB2YWx1ZTogYW55XG4pOiBhbnkge1xuICAgIGNvbnN0IGZvcm1TZXR0aW5ncyA9IGdldEZvcm1TZXR0aW5ncyh0eXBlRGVmSWQpO1xuICAgIGZvcm1TZXR0aW5ncy5WaWV3LkNvbnRyb2xJbmZvID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShjb250cm9sc0luZm8pKTtcblxuICAgIGZvcm1TZXR0aW5ncy5WaWV3LkxheW91dDk0Lml0ZW1zWzBdLml0ZW1zLnB1c2goLi4uY29udHJvbHNJbmZvLm1hcCgoYykgPT4gZ2V0TGF5b3V0Q29udHJvbChjLkNvbnRyb2xOYW1lKSkpO1xuICAgIGZvcm1TZXR0aW5ncy5EYXRhLk1vW2NvbnRyb2xOYW1lXSA9IHZhbHVlO1xuICAgIGNvbnN0IGZvcm1QYW5lbEN0cmxyID0gbmV3IEJhcnNhQXBpLlVsLkZvcm1QYW5lbEN0cmxyKHtcbiAgICAgICAgU2V0dGluZzogZm9ybVNldHRpbmdzLFxuICAgICAgICBGZWF0dXJlczoge1xuICAgICAgICAgICAgV29ya2Zsb3c6IGZhbHNlLFxuICAgICAgICAgICAgVG9vbGJhcjogZmFsc2UsXG4gICAgICAgICAgICBJbmZvQmFyOiBmYWxzZVxuICAgICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIGZvcm1QYW5lbEN0cmxyO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGdldE5ld01vR3JpZEVkaXRvcihmb3JtU2V0dGluZ3M6IEZvcm1TZXR0aW5nLCB0eXBlZGVmSWQ6IHN0cmluZyk6IFBhcnRpYWw8Rm9ybVNldHRpbmc+IHtcbiAgICBjb25zdCBuZXdGb3JtU2V0dGluZ3M6IEZvcm1TZXR0aW5nID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShmb3JtU2V0dGluZ3MpKTtcbiAgICByZXR1cm4geyAuLi5uZXdGb3JtU2V0dGluZ3MuRGF0YS5NbywgJFR5cGVEZWZJZDogdHlwZWRlZklkIH07XG59XG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlR3JpZEVkaXRvckZvcm1QYW5lbChcbiAgICBmb3JtU2V0dGluZ3M6IEZvcm1TZXR0aW5nLFxuICAgIG1vOiBNZXRhb2JqZWN0RGF0YU1vZGVsLFxuICAgIHR5cGVkZWY6IHN0cmluZyxcbiAgICByZWxhdGlvbjogYW55LFxuICAgIHJld3JpdGVMYXlvdXQ6IGJvb2xlYW4gPSB0cnVlLFxuICAgIFVsdk1haW5DdHJscjogYW55ID0gbnVsbFxuKTogYW55IHtcbiAgICBjb25zdCBuZXdGb3JtU2V0dGluZ3M6IEZvcm1TZXR0aW5nID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShmb3JtU2V0dGluZ3MpKTtcbiAgICBuZXdGb3JtU2V0dGluZ3MuRGF0YS5NbyA9IHsgLi4ubW8sICRUeXBlRGVmSWQ6IHR5cGVkZWYgfTtcbiAgICBpZiAocmV3cml0ZUxheW91dCkge1xuICAgICAgICBuZXdGb3JtU2V0dGluZ3MuVmlldy5MYXlvdXQ5NCA9IGdldExheW91dDk0T2JqZWN0SW5mbygpO1xuICAgICAgICBuZXdGb3JtU2V0dGluZ3MuVmlldy5MYXlvdXQ5NC5pdGVtc1swXS5pdGVtcy5wdXNoKFxuICAgICAgICAgICAgLi4ubmV3Rm9ybVNldHRpbmdzLlZpZXcuQ29udHJvbEluZm8ubWFwKChjKSA9PlxuICAgICAgICAgICAgICAgIGdldExheW91dENvbnRyb2woYy5Db250cm9sTmFtZSwgYy5Db250cm9sRmllbGRDYXB0aW9uVHJhbnNsYXRlZCwgZmFsc2UpXG4gICAgICAgICAgICApXG4gICAgICAgICk7XG4gICAgfVxuICAgIGNvbnN0IGZvcm1SZXF1ZXN0UGFyYW1zID0gbmV3IEJhcnNhQXBpLlVsLkZvcm1SZXF1ZXN0UGFyYW1zKHtcbiAgICAgICAgTW9JZDogbmV3Rm9ybVNldHRpbmdzLkRhdGEuTW8uSWQsXG4gICAgICAgIFR5cGVEZWZJZDogdHlwZWRlZixcbiAgICAgICAgUmVsYXRpb246IHJlbGF0aW9uXG4gICAgICAgIC8vIE1vQ29udGV4dDoge1xuICAgICAgICAvLyAgICAgUmVwb3J0SWQ6ICcnLFxuICAgICAgICAvLyAgICAgVmlld0lkOiAnJyxcbiAgICAgICAgLy8gICAgIFZpZXdOYW1lOiAnJyxcbiAgICAgICAgLy8gICAgIENvbmRGb3JtYXRpbmc6ICcnLFxuICAgICAgICAvLyAgICAgSW5jbHVkZUluUmVwb3J0OiAnJ1xuICAgICAgICAvLyB9XG4gICAgfSk7XG4gICAgY29uc3QgZm9ybVBhbmVsQ3RybHIgPSBuZXcgQmFyc2FBcGkuVWwuRm9ybVBhbmVsQ3RybHIoe1xuICAgICAgICBTZXR0aW5nOiBuZXdGb3JtU2V0dGluZ3MsXG4gICAgICAgIFJlbGF0aW9uOiByZWxhdGlvbixcbiAgICAgICAgVWx2TWFpbkN0cmxyOiBVbHZNYWluQ3RybHIsXG4gICAgICAgIEZlYXR1cmVzOiB7XG4gICAgICAgICAgICBXb3JrZmxvdzogZmFsc2UsXG4gICAgICAgICAgICBUb29sYmFyOiBmYWxzZSxcbiAgICAgICAgICAgIEluZm9CYXI6IGZhbHNlXG4gICAgICAgIH0sXG4gICAgICAgIEZvcm1SZXF1ZXN0UGFyYW1zOiBmb3JtUmVxdWVzdFBhcmFtc1xuICAgIH0pO1xuICAgIHJldHVybiBmb3JtUGFuZWxDdHJscjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldExheW91dENvbnRyb2woXG4gICAgY29udHJvbE5hbWU6IHN0cmluZyxcbiAgICBjb250cm9sQ2FwdGlvbjogc3RyaW5nID0gJycsXG4gICAgaGlkZTogYm9vbGVhbiA9IHRydWVcbik6IFBhcnRpYWw8R2VuZXJhbENvbnRyb2xJbmZvTW9kZWw+IHtcbiAgICByZXR1cm4ge1xuICAgICAgICB4dHlwZTogJ0x5LkxheW91dENvbnRyb2wnLFxuICAgICAgICBUeXBlOiAnTGF5b3V0Q29udHJvbEl0ZW0nLFxuICAgICAgICBDb250cm9sSWQ6IGNvbnRyb2xOYW1lLFxuICAgICAgICBJc1ZlcnRpY2FsOiBmYWxzZSxcbiAgICAgICAgVGV4dExvY2F0aW9uOiAnUmlnaHQnLFxuICAgICAgICBUZXh0VmlzaWJsZTogZmFsc2UsXG4gICAgICAgIFZpc2libGU6ICFoaWRlLFxuICAgICAgICBoaWRlLFxuICAgICAgICBVc2VMYXlvdXRJdGVtVGV4dEZvckNvbnRyb2w6IGZhbHNlLFxuICAgICAgICBDYXB0aW9uOiBjb250cm9sQ2FwdGlvbixcbiAgICAgICAgQWNjZXNzaWJsZU5hbWU6ICcnLFxuICAgICAgICBCb3VuZHM6IHsgeDogMCwgeTogMCwgd2lkdGg6IDQzMiwgaGVpZ2h0OiAyNCB9LFxuICAgICAgICBNaW5TaXplOiB7IHdpZHRoOiA4OSwgaGVpZ2h0OiAyNCB9LFxuICAgICAgICBNYXhTaXplOiB7IHdpZHRoOiAwLCBoZWlnaHQ6IDI0IH0sXG4gICAgICAgIENvbnRyb2xCb3VuZHM6IHsgd2lkdGg6IDM4OCwgaGVpZ2h0OiAyMCB9LFxuICAgICAgICBDb250cm9sTWluU2l6ZTogeyB3aWR0aDogNDUsIGhlaWdodDogMjAgfSxcbiAgICAgICAgQ29udHJvbE1heFNpemU6IHsgd2lkdGg6IDAsIGhlaWdodDogMjAgfSxcbiAgICAgICAgUGFkZGluZzogWzIsIDIsIDIsIDJdLFxuICAgICAgICBMYWJlbFNpemU6IHsgd2lkdGg6IDM1LCBoZWlnaHQ6IDEzIH0sXG4gICAgICAgIG9yaWdpbmFsWHR5cGU6ICcnXG4gICAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldENvbnRyb2xMaXN0KFxuICAgIG1vOiBNZXRhb2JqZWN0RGF0YU1vZGVsLFxuICAgIGNvbnRyb2xEYk5hbWVzOiBzdHJpbmdbXSxcbiAgICBpc1NlYXJjaFBhbmVsOiBib29sZWFuLFxuICAgIGlzR3JpZEVkaXRvcjogYm9vbGVhblxuKTogUHJvbWlzZTxHZW5lcmFsQ29udHJvbEluZm9Nb2RlbFtdPiB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlPEdlbmVyYWxDb250cm9sSW5mb01vZGVsW10+KChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgQmFyc2FBcGkuQ29tbW9uLkFqYXguR2V0U2VydmVyRGF0YShcbiAgICAgICAgICAgICdGb3JtOTQuR2V0Q29udHJvbEluZm9zJyxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250cm9sSW5mb1BhcmFtZXRlcjoge1xuICAgICAgICAgICAgICAgICAgICBGaWVsZERiTmFtZXM6IGNvbnRyb2xEYk5hbWVzLFxuICAgICAgICAgICAgICAgICAgICBNbzogbmV3IEJhcnNhQXBpLkNvbW1vbi5NZXRhT2JqZWN0V2ViKG1vKSxcbiAgICAgICAgICAgICAgICAgICAgSXNTZWFyY2hQYW5lbDogaXNTZWFyY2hQYW5lbCxcbiAgICAgICAgICAgICAgICAgICAgSXNHcmlkRWRpdG9yOiBpc0dyaWRFZGl0b3JcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgKG0pID0+IHtcbiAgICAgICAgICAgICAgICByZXNvbHZlKG0pO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIChlcnIpID0+IHtcbiAgICAgICAgICAgICAgICByZWplY3QoZXJyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgKTtcbiAgICB9KTtcbn1cblxuZXhwb3J0IHR5cGUgTnpTYWZlQW55ID0gYW55O1xuZXhwb3J0IHR5cGUgTnVtYmVySW5wdXQgPSBudW1iZXIgfCBzdHJpbmcgfCB1bmRlZmluZWQgfCBudWxsO1xuZXhwb3J0IGludGVyZmFjZSBOZ1N0eWxlSW50ZXJmYWNlIHtcbiAgICBba2xhc3M6IHN0cmluZ106IE56U2FmZUFueTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJbmRleGFibGVPYmplY3Qge1xuICAgIFtrZXk6IHN0cmluZ106IE56U2FmZUFueTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBzaGFsbG93RXF1YWwob2JqQT86IEluZGV4YWJsZU9iamVjdCwgb2JqQj86IEluZGV4YWJsZU9iamVjdCk6IGJvb2xlYW4ge1xuICAgIGlmIChvYmpBID09PSBvYmpCKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2Ygb2JqQSAhPT0gJ29iamVjdCcgfHwgIW9iakEgfHwgdHlwZW9mIG9iakIgIT09ICdvYmplY3QnIHx8ICFvYmpCKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBjb25zdCBrZXlzQSA9IE9iamVjdC5rZXlzKG9iakEpO1xuICAgIGNvbnN0IGtleXNCID0gT2JqZWN0LmtleXMob2JqQik7XG5cbiAgICBpZiAoa2V5c0EubGVuZ3RoICE9PSBrZXlzQi5sZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGNvbnN0IGJIYXNPd25Qcm9wZXJ0eSA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuYmluZChvYmpCKTtcblxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvcHJlZmVyLWZvci1vZlxuICAgIGZvciAobGV0IGlkeCA9IDA7IGlkeCA8IGtleXNBLmxlbmd0aDsgaWR4KyspIHtcbiAgICAgICAgY29uc3Qga2V5ID0ga2V5c0FbaWR4XTtcbiAgICAgICAgaWYgKCFiSGFzT3duUHJvcGVydHkoa2V5KSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChvYmpBW2tleV0gIT09IG9iakJba2V5XSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHRydWU7XG59XG5leHBvcnQgZnVuY3Rpb24gdG9OdW1iZXIodmFsdWU6IG51bWJlciB8IHN0cmluZyk6IG51bWJlcjtcbmV4cG9ydCBmdW5jdGlvbiB0b051bWJlcjxEPih2YWx1ZTogbnVtYmVyIHwgc3RyaW5nLCBmYWxsYmFjazogRCk6IG51bWJlciB8IEQ7XG5leHBvcnQgZnVuY3Rpb24gdG9OdW1iZXIodmFsdWU6IG51bWJlciB8IHN0cmluZywgZmFsbGJhY2tWYWx1ZTogbnVtYmVyID0gMCk6IG51bWJlciB7XG4gICAgcmV0dXJuIF9pc051bWJlclZhbHVlKHZhbHVlKSA/IE51bWJlcih2YWx1ZSkgOiBmYWxsYmFja1ZhbHVlO1xufVxuZnVuY3Rpb24gcHJvcERlY29yYXRvckZhY3Rvcnk8VCwgRD4oXG4gICAgbmFtZTogc3RyaW5nLFxuICAgIGZhbGxiYWNrOiAodjogVCkgPT4gRFxuKTogKHRhcmdldDogTnpTYWZlQW55LCBwcm9wTmFtZTogc3RyaW5nKSA9PiB2b2lkIHtcbiAgICBmdW5jdGlvbiBwcm9wRGVjb3JhdG9yKFxuICAgICAgICB0YXJnZXQ6IE56U2FmZUFueSxcbiAgICAgICAgcHJvcE5hbWU6IHN0cmluZyxcbiAgICAgICAgb3JpZ2luYWxEZXNjcmlwdG9yPzogVHlwZWRQcm9wZXJ0eURlc2NyaXB0b3I8TnpTYWZlQW55PlxuICAgICk6IE56U2FmZUFueSB7XG4gICAgICAgIGNvbnN0IHByaXZhdGVQcm9wTmFtZSA9IGAkJF9fem9ycm9Qcm9wRGVjb3JhdG9yX18ke3Byb3BOYW1lfWA7XG5cbiAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0YXJnZXQsIHByaXZhdGVQcm9wTmFtZSkpIHtcbiAgICAgICAgICAgIC8vIHdhcm4oYFRoZSBwcm9wIFwiJHtwcml2YXRlUHJvcE5hbWV9XCIgaXMgYWxyZWFkeSBleGlzdCwgaXQgd2lsbCBiZSBvdmVycmlkZWQgYnkgJHtuYW1lfSBkZWNvcmF0b3IuYCk7XG4gICAgICAgIH1cblxuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBwcml2YXRlUHJvcE5hbWUsIHtcbiAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgICAgICAgIHdyaXRhYmxlOiB0cnVlXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBnZXQoKTogc3RyaW5nIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gb3JpZ2luYWxEZXNjcmlwdG9yICYmIG9yaWdpbmFsRGVzY3JpcHRvci5nZXRcbiAgICAgICAgICAgICAgICAgICAgPyBvcmlnaW5hbERlc2NyaXB0b3IuZ2V0LmJpbmQodGhpcykoKVxuICAgICAgICAgICAgICAgICAgICA6IHRoaXNbcHJpdmF0ZVByb3BOYW1lXTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBzZXQodmFsdWU6IFQpOiB2b2lkIHtcbiAgICAgICAgICAgICAgICBpZiAob3JpZ2luYWxEZXNjcmlwdG9yICYmIG9yaWdpbmFsRGVzY3JpcHRvci5zZXQpIHtcbiAgICAgICAgICAgICAgICAgICAgb3JpZ2luYWxEZXNjcmlwdG9yLnNldC5iaW5kKHRoaXMpKGZhbGxiYWNrKHZhbHVlKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXNbcHJpdmF0ZVByb3BOYW1lXSA9IGZhbGxiYWNrKHZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICByZXR1cm4gcHJvcERlY29yYXRvcjtcbn1cbmV4cG9ydCBmdW5jdGlvbiBJbnB1dE51bWJlcihmYWxsYmFja1ZhbHVlPzogTnpTYWZlQW55KTogTnpTYWZlQW55IHtcbiAgICByZXR1cm4gcHJvcERlY29yYXRvckZhY3RvcnkoJ0lucHV0TnVtYmVyJywgKHZhbHVlOiBzdHJpbmcgfCBudW1iZXIpID0+IHRvTnVtYmVyKHZhbHVlLCBmYWxsYmFja1ZhbHVlKSk7XG59XG5leHBvcnQgZW51bSBBZmZpeFJlc3BvbmRFdmVudHMge1xuICAgIHJlc2l6ZSA9ICdyZXNpemUnLFxuICAgIHNjcm9sbCA9ICdzY3JvbGwnLFxuICAgIHRvdWNoc3RhcnQgPSAndG91Y2hzdGFydCcsXG4gICAgdG91Y2htb3ZlID0gJ3RvdWNobW92ZScsXG4gICAgdG91Y2hlbmQgPSAndG91Y2hlbmQnLFxuICAgIHBhZ2VzaG93ID0gJ3BhZ2VzaG93JyxcbiAgICBsb2FkID0gJ0xPQUQnXG59XG5leHBvcnQgaW50ZXJmYWNlIFNpbXBsZVJlY3Qge1xuICAgIHRvcDogbnVtYmVyO1xuICAgIGxlZnQ6IG51bWJlcjtcbiAgICB3aWR0aD86IG51bWJlcjtcbiAgICBoZWlnaHQ/OiBudW1iZXI7XG4gICAgYm90dG9tPzogbnVtYmVyO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNUYXJnZXRXaW5kb3codGFyZ2V0OiBFbGVtZW50IHwgV2luZG93KTogdGFyZ2V0IGlzIFdpbmRvdyB7XG4gICAgcmV0dXJuIHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmIHRhcmdldCA9PT0gd2luZG93O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0VGFyZ2V0UmVjdCh0YXJnZXQ6IEVsZW1lbnQgfCBXaW5kb3cpOiBTaW1wbGVSZWN0IHtcbiAgICByZXR1cm4gIWlzVGFyZ2V0V2luZG93KHRhcmdldClcbiAgICAgICAgPyB0YXJnZXQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KClcbiAgICAgICAgOiB7XG4gICAgICAgICAgICAgIHRvcDogMCxcbiAgICAgICAgICAgICAgbGVmdDogMCxcbiAgICAgICAgICAgICAgYm90dG9tOiAwXG4gICAgICAgICAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEZpZWxkVmFsdWUobmFtZTogc3RyaW5nLCBtbzogTWV0YW9iamVjdERhdGFNb2RlbCwgY2FwdGlvbj86IGJvb2xlYW4pOiBzdHJpbmcge1xuICAgIGlmIChtby5HZXRGVmFsdWVCeUNhcHRpb24pIHtcbiAgICAgICAgbGV0IHJlc3VsdCA9IG1vLkdldEZWYWx1ZShuYW1lKTtcbiAgICAgICAgaWYgKGNhcHRpb24pIHtcbiAgICAgICAgICAgIHJlc3VsdCA9IG1vLkdldEZDYXB0aW9uKG5hbWUpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2YgY2FwdGlvbiA9PT0gJ3VuZGVmaW5lZCcgJiYgbW8uSW5oZXJpdGFuY2VJbmZvICYmICEobW8uJEZpZWxkRGljdCAmJiBtby4kRmllbGREaWN0W25hbWVdKSkge1xuICAgICAgICAgICAgY29uc3QgeyBQYXJlbnRGaWVsZE5hbWUgfSA9IG1vLkluaGVyaXRhbmNlSW5mbztcbiAgICAgICAgICAgIGNvbnN0IG1vUGFyZW50ID0gbW8uR2V0RlZhbHVlKFBhcmVudEZpZWxkTmFtZSk7XG4gICAgICAgICAgICBsZXQgcmVzdWx0ID0gbW9QYXJlbnQuR2V0RlZhbHVlKG5hbWUpO1xuICAgICAgICAgICAgaWYgKGNhcHRpb24pIHtcbiAgICAgICAgICAgICAgICByZXN1bHQgPSBtb1BhcmVudC5HZXRGQ2FwdGlvbihuYW1lKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbiAgICBjb25zdCBmaWVsZE5hbWUgPSBtby4kRmllbGREaWN0ICYmIG1vLiRGaWVsZERpY3RbbmFtZV0gPyBtby4kRmllbGREaWN0W25hbWVdIDogbmFtZTtcbiAgICBsZXQgdmFsID0gbW9bZmllbGROYW1lXTtcbiAgICBpZiAoY2FwdGlvbikge1xuICAgICAgICBsZXQgY2FwdGlvblZhbCA9IG1vW2ZpZWxkTmFtZV0/LiRDYXB0aW9uO1xuICAgICAgICBpZiAodHlwZW9mIGNhcHRpb25WYWwgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICBpZiAoIWNhcHRpb25WYWwpIHtcbiAgICAgICAgICAgICAgICBjYXB0aW9uVmFsID0gbW9bZmllbGROYW1lICsgJyRDYXB0aW9uJ107XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIWNhcHRpb25WYWwpIHtcbiAgICAgICAgICAgICAgICBjYXB0aW9uVmFsID0gdmFsO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHZhbCA9IGNhcHRpb25WYWw7XG4gICAgfVxuICAgIHJldHVybiB2YWw7XG59XG5cbi8qIGVzbGludC1kaXNhYmxlIG5vLWludmFsaWQtdGhpcyAqL1xuZXhwb3J0IGNvbnN0IGF2YWlsYWJsZVByZWZpeGVzID0gWydtb3onLCAnbXMnLCAnd2Via2l0J107XG5cbmV4cG9ydCBmdW5jdGlvbiByZXF1ZXN0QW5pbWF0aW9uRnJhbWVQb2x5ZmlsbCgpOiB0eXBlb2YgcmVxdWVzdEFuaW1hdGlvbkZyYW1lIHtcbiAgICBsZXQgbGFzdFRpbWUgPSAwO1xuICAgIHJldHVybiBmdW5jdGlvbiAoY2FsbGJhY2s6IEZyYW1lUmVxdWVzdENhbGxiYWNrKTogYW55IHtcbiAgICAgICAgY29uc3QgY3VyclRpbWUgPSBuZXcgRGF0ZSgpLmdldFRpbWUoKTtcbiAgICAgICAgY29uc3QgdGltZVRvQ2FsbCA9IE1hdGgubWF4KDAsIDE2IC0gKGN1cnJUaW1lIC0gbGFzdFRpbWUpKTtcbiAgICAgICAgY29uc3QgaWQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIGNhbGxiYWNrKGN1cnJUaW1lICsgdGltZVRvQ2FsbCk7XG4gICAgICAgIH0sIHRpbWVUb0NhbGwpO1xuICAgICAgICBsYXN0VGltZSA9IGN1cnJUaW1lICsgdGltZVRvQ2FsbDtcbiAgICAgICAgcmV0dXJuIGlkO1xuICAgIH07XG59XG5leHBvcnQgZnVuY3Rpb24gRXhlY3V0ZUR5bmFtaWNDb21tYW5kKGNvbW1hbmQ6IHsgSWQ6IHN0cmluZyB9LCBtbzogTWV0YW9iamVjdERhdGFNb2RlbCB8IG51bGwgPSBudWxsKTogdm9pZCB7XG4gICAgY29uc3QgZSA9IHsgY29tbWFuZCwgRHluYW1pY1NldHRpbmc6IG1vLCBNbzogbW8gfTtcbiAgICBCYXJzYUFwaS5Db21tb24uQ3VzdG9tQ29kZU1hbmFnZXIuUnVuRHluYW1pY0NvbW1hbmQoY29tbWFuZC5JZCwgZSk7XG59XG5leHBvcnQgZnVuY3Rpb24gRXhlY3V0ZVdvcmtmbG93Q2hvaWNlRGVmKHNjb3BlLCBwYXJhbSwgc3VjY2VzczogKHJlc3VsdCkgPT4gdm9pZCwgZmFpbGVkOiAoZXJyb3IpID0+IHZvaWQpOiB2b2lkIHtcbiAgICBCYXJzYUFwaS5Db21tb24uQWpheC5HZXRTZXJ2ZXJEYXRhKFxuICAgICAgICAnV29ya2Zsb3c5NC5DaG9pY2VTZWxlY3QnLFxuICAgICAgICBwYXJhbSxcbiAgICAgICAgKHJlc3VsdCkgPT4ge1xuICAgICAgICAgICAgc3VjY2VzcyhyZXN1bHQpO1xuICAgICAgICB9LCAvLyBzdWNjZXNzXG4gICAgICAgIChlcnJvcikgPT4ge1xuICAgICAgICAgICAgZmFpbGVkKGVycm9yKTtcbiAgICAgICAgfSwgLy8gIGVycm9yXG4gICAgICAgICgpID0+IHt9LCAvLyBkb1JldHVyblxuICAgICAgICBzY29wZSxcbiAgICAgICAgdHJ1ZVxuICAgICk7XG59XG5leHBvcnQgZnVuY3Rpb24gZ2V0UmVxdWVzdEFuaW1hdGlvbkZyYW1lKCk6IHR5cGVvZiByZXF1ZXN0QW5pbWF0aW9uRnJhbWUge1xuICAgIGlmICh0eXBlb2Ygd2luZG93ID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICByZXR1cm4gKCkgPT4gMDtcbiAgICB9XG4gICAgaWYgKHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUpIHtcbiAgICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3Z1ZWpzL3Z1ZS9pc3N1ZXMvNDQ2NVxuICAgICAgICByZXR1cm4gd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZS5iaW5kKHdpbmRvdyk7XG4gICAgfVxuXG4gICAgY29uc3QgcHJlZml4ID0gYXZhaWxhYmxlUHJlZml4ZXMuZmlsdGVyKChrZXkpID0+IGAke2tleX1SZXF1ZXN0QW5pbWF0aW9uRnJhbWVgIGluIHdpbmRvdylbMF07XG5cbiAgICByZXR1cm4gcHJlZml4ID8gKHdpbmRvdyBhcyBOelNhZmVBbnkpW2Ake3ByZWZpeH1SZXF1ZXN0QW5pbWF0aW9uRnJhbWVgXSA6IHJlcXVlc3RBbmltYXRpb25GcmFtZVBvbHlmaWxsKCk7XG59XG5leHBvcnQgZnVuY3Rpb24gY2FuY2VsUmVxdWVzdEFuaW1hdGlvbkZyYW1lKGlkOiBudW1iZXIpOiBOelNhZmVBbnkge1xuICAgIGlmICh0eXBlb2Ygd2luZG93ID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgaWYgKHdpbmRvdy5jYW5jZWxBbmltYXRpb25GcmFtZSkge1xuICAgICAgICByZXR1cm4gd2luZG93LmNhbmNlbEFuaW1hdGlvbkZyYW1lKGlkKTtcbiAgICB9XG4gICAgY29uc3QgcHJlZml4ID0gYXZhaWxhYmxlUHJlZml4ZXMuZmlsdGVyKFxuICAgICAgICAoa2V5KSA9PiBgJHtrZXl9Q2FuY2VsQW5pbWF0aW9uRnJhbWVgIGluIHdpbmRvdyB8fCBgJHtrZXl9Q2FuY2VsUmVxdWVzdEFuaW1hdGlvbkZyYW1lYCBpbiB3aW5kb3dcbiAgICApWzBdO1xuXG4gICAgcmV0dXJuIHByZWZpeFxuICAgICAgICA/IChcbiAgICAgICAgICAgICAgKHdpbmRvdyBhcyBOelNhZmVBbnkpW2Ake3ByZWZpeH1DYW5jZWxBbmltYXRpb25GcmFtZWBdIHx8XG4gICAgICAgICAgICAgICh3aW5kb3cgYXMgTnpTYWZlQW55KVtgJHtwcmVmaXh9Q2FuY2VsUmVxdWVzdEFuaW1hdGlvbkZyYW1lYF1cbiAgICAgICAgICApXG4gICAgICAgICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgICAgICAgLmNhbGwodGhpcywgaWQpXG4gICAgICAgIDogY2xlYXJUaW1lb3V0KGlkKTtcbn1cblxuZXhwb3J0IHR5cGUgRWFzeWluZ0ZuID0gKHQ6IG51bWJlciwgYjogbnVtYmVyLCBjOiBudW1iZXIsIGQ6IG51bWJlcikgPT4gbnVtYmVyO1xuXG5leHBvcnQgZnVuY3Rpb24gZWFzZUluT3V0Q3ViaWModDogbnVtYmVyLCBiOiBudW1iZXIsIGM6IG51bWJlciwgZDogbnVtYmVyKTogbnVtYmVyIHtcbiAgICBjb25zdCBjYyA9IGMgLSBiO1xuICAgIGxldCB0dCA9IHQgLyAoZCAvIDIpO1xuICAgIGlmICh0dCA8IDEpIHtcbiAgICAgICAgcmV0dXJuIChjYyAvIDIpICogdHQgKiB0dCAqIHR0ICsgYjtcbiAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gKGNjIC8gMikgKiAoKHR0IC09IDIpICogdHQgKiB0dCArIDIpICsgYjtcbiAgICB9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTnpTY3JvbGxUb09wdGlvbnMge1xuICAgIC8qKiBBbmltYXRpb24gZHVyYXRpb24sIGRlZmF1bHQgYXMgNDUwICovXG4gICAgZHVyYXRpb24/OiBudW1iZXI7XG4gICAgLyoqIFNjcm9sbCBjb250YWluZXIsIGRlZmF1bHQgYXMgd2luZG93ICovXG4gICAgZWFzaW5nPzogRWFzeWluZ0ZuO1xuICAgIC8qKiBTY3JvbGwgZW5kIGNhbGxiYWNrICovXG4gICAgY2FsbGJhY2s/KCk6IHZvaWQ7XG59XG5leHBvcnQgY29uc3QgV29yZE1pbWVUeXBlID1cbiAgICAnLmRvYywuZG9jeCxhcHBsaWNhdGlvbi9tc3dvcmQsYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LndvcmRwcm9jZXNzaW5nbWwuZG9jdW1lbnQnO1xuZXhwb3J0IGNvbnN0IEltYWdlTWltZVR5cGUgPSAnLmpwZWcsLmpwZywuZ2lmLC5wbmcsLmJtcCwudGlmLGltYWdlLyonO1xuZXhwb3J0IGNvbnN0IFBkZk1pbWVUeXBlID0gJy5wZGYnO1xuZXhwb3J0IGNvbnN0IEFsbEZpbGVzTWltZVR5cGUgPSAnLnR4dCwucHB0LC5wZGYsLionO1xuZXhwb3J0IGNvbnN0IFZpZGVvTWltZVR5cGUgPSAndmlkZW8vKic7XG5leHBvcnQgY29uc3QgQXVkaW9NaW1lVHlwZSA9ICdhdWRpby8qJztcblxuZXhwb3J0IGZ1bmN0aW9uIENoYW5nZUxheW91dEluZm9DdXN0b21VaShsYXlvdXRJbmZvOiBMYXlvdXRTZXR0aW5nLCBjb21wb25lbnRVaTogRWpyYXlPbGdvKTogdm9pZCB7XG4gICAgbGF5b3V0SW5mby5GaWVsZFVpLlNldHRpbmcuQ3VzdG9tVWkgPSBjb21wb25lbnRVaTtcbn1cbiJdfQ==
|
|
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
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import { Directive, EventEmitter, Output } from '@angular/core';
|
|
2
|
+
import { BaseDirective } from './base.directive';
|
|
3
|
+
import { getUniqueId } from '../constants';
|
|
4
|
+
import * as i0 from "@angular/core";
|
|
5
|
+
export class AbsoluteDivBodyDirective extends BaseDirective {
|
|
6
|
+
constructor(_el, renderer) {
|
|
7
|
+
super(_el);
|
|
8
|
+
this._el = _el;
|
|
9
|
+
this.renderer = renderer;
|
|
10
|
+
this.elemCreated = new EventEmitter();
|
|
11
|
+
this.id = '_' + getUniqueId(4);
|
|
12
|
+
// this._appendDivToBody();
|
|
13
|
+
}
|
|
14
|
+
ngOnInit() {
|
|
15
|
+
super.ngOnInit();
|
|
16
|
+
this._appendDivToBody();
|
|
17
|
+
}
|
|
18
|
+
_appendDivToBody() {
|
|
19
|
+
const elemDiv = document.createElement('div');
|
|
20
|
+
elemDiv.id = this.id;
|
|
21
|
+
elemDiv.style.cssText = 'position:absolute;opacity:0;visibility:hidden;';
|
|
22
|
+
document.body.appendChild(elemDiv);
|
|
23
|
+
this.elem = elemDiv;
|
|
24
|
+
this.elemCreated.emit(elemDiv);
|
|
25
|
+
}
|
|
26
|
+
_getEl() {
|
|
27
|
+
const x = document.querySelector('#' + this.id);
|
|
28
|
+
return x;
|
|
29
|
+
}
|
|
30
|
+
ngOnDestroy() {
|
|
31
|
+
super.ngOnDestroy();
|
|
32
|
+
this.elem?.remove();
|
|
33
|
+
}
|
|
34
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.5", ngImport: i0, type: AbsoluteDivBodyDirective, deps: [{ token: i0.ElementRef }, { token: i0.Renderer2 }], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
35
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.3.5", type: AbsoluteDivBodyDirective, selector: "[absDiv]", outputs: { elemCreated: "elemCreated" }, usesInheritance: true, ngImport: i0 }); }
|
|
36
|
+
}
|
|
37
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.5", ngImport: i0, type: AbsoluteDivBodyDirective, decorators: [{
|
|
38
|
+
type: Directive,
|
|
39
|
+
args: [{
|
|
40
|
+
selector: '[absDiv]'
|
|
41
|
+
}]
|
|
42
|
+
}], ctorParameters: () => [{ type: i0.ElementRef }, { type: i0.Renderer2 }], propDecorators: { elemCreated: [{
|
|
43
|
+
type: Output
|
|
44
|
+
}] } });
|
|
45
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWJzb2x1dGUtZGl2LWJvZHkuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYmFyc2Etbm92aW4tcmF5LWNvcmUvc3JjL2xpYi9kaXJlY3RpdmVzL2Fic29sdXRlLWRpdi1ib2R5LmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQWlCLFNBQVMsRUFBYyxZQUFZLEVBQUUsTUFBTSxFQUFhLE1BQU0sZUFBZSxDQUFDO0FBQ3RHLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNqRCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sY0FBYyxDQUFDOztBQUszQyxNQUFNLE9BQU8sd0JBQXlCLFNBQVEsYUFBYTtJQUt2RCxZQUFzQixHQUFlLEVBQVksUUFBbUI7UUFDaEUsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBRE8sUUFBRyxHQUFILEdBQUcsQ0FBWTtRQUFZLGFBQVEsR0FBUixRQUFRLENBQVc7UUFKMUQsZ0JBQVcsR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO1FBRTNDLE9BQUUsR0FBRyxHQUFHLEdBQUcsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBSXRCLDJCQUEyQjtJQUMvQixDQUFDO0lBQ0QsUUFBUTtRQUNKLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUNqQixJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztJQUM1QixDQUFDO0lBQ0QsZ0JBQWdCO1FBQ1osTUFBTSxPQUFPLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUM5QyxPQUFPLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUM7UUFDckIsT0FBTyxDQUFDLEtBQUssQ0FBQyxPQUFPLEdBQUcsZ0RBQWdELENBQUM7UUFDekUsUUFBUSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDbkMsSUFBSSxDQUFDLElBQUksR0FBRyxPQUFPLENBQUM7UUFDcEIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDbkMsQ0FBQztJQUNELE1BQU07UUFDRixNQUFNLENBQUMsR0FBRyxRQUFRLENBQUMsYUFBYSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFnQixDQUFDO1FBQy9ELE9BQU8sQ0FBQyxDQUFDO0lBQ2IsQ0FBQztJQUNELFdBQVc7UUFDUCxLQUFLLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDcEIsSUFBSSxDQUFDLElBQUksRUFBRSxNQUFNLEVBQUUsQ0FBQztJQUN4QixDQUFDOzhHQTVCUSx3QkFBd0I7a0dBQXhCLHdCQUF3Qjs7MkZBQXhCLHdCQUF3QjtrQkFIcEMsU0FBUzttQkFBQztvQkFDUCxRQUFRLEVBQUUsVUFBVTtpQkFDdkI7dUdBRWEsV0FBVztzQkFBcEIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFmdGVyVmlld0luaXQsIERpcmVjdGl2ZSwgRWxlbWVudFJlZiwgRXZlbnRFbWl0dGVyLCBPdXRwdXQsIFJlbmRlcmVyMiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQmFzZURpcmVjdGl2ZSB9IGZyb20gJy4vYmFzZS5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgZ2V0VW5pcXVlSWQgfSBmcm9tICcuLi9jb25zdGFudHMnO1xuXG5ARGlyZWN0aXZlKHtcbiAgICBzZWxlY3RvcjogJ1thYnNEaXZdJ1xufSlcbmV4cG9ydCBjbGFzcyBBYnNvbHV0ZURpdkJvZHlEaXJlY3RpdmUgZXh0ZW5kcyBCYXNlRGlyZWN0aXZlIGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCB7XG4gICAgQE91dHB1dCgpIGVsZW1DcmVhdGVkID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gICAgaWQgPSAnXycgKyBnZXRVbmlxdWVJZCg0KTtcbiAgICBlbGVtOiBIVE1MRGl2RWxlbWVudDtcbiAgICBjb25zdHJ1Y3Rvcihwcm90ZWN0ZWQgX2VsOiBFbGVtZW50UmVmLCBwcm90ZWN0ZWQgcmVuZGVyZXI6IFJlbmRlcmVyMikge1xuICAgICAgICBzdXBlcihfZWwpO1xuICAgICAgICAvLyB0aGlzLl9hcHBlbmREaXZUb0JvZHkoKTtcbiAgICB9XG4gICAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgICAgIHN1cGVyLm5nT25Jbml0KCk7XG4gICAgICAgIHRoaXMuX2FwcGVuZERpdlRvQm9keSgpO1xuICAgIH1cbiAgICBfYXBwZW5kRGl2VG9Cb2R5KCk6IHZvaWQge1xuICAgICAgICBjb25zdCBlbGVtRGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgIGVsZW1EaXYuaWQgPSB0aGlzLmlkO1xuICAgICAgICBlbGVtRGl2LnN0eWxlLmNzc1RleHQgPSAncG9zaXRpb246YWJzb2x1dGU7b3BhY2l0eTowO3Zpc2liaWxpdHk6aGlkZGVuOyc7XG4gICAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoZWxlbURpdik7XG4gICAgICAgIHRoaXMuZWxlbSA9IGVsZW1EaXY7XG4gICAgICAgIHRoaXMuZWxlbUNyZWF0ZWQuZW1pdChlbGVtRGl2KTtcbiAgICB9XG4gICAgX2dldEVsKCk6IEhUTUxFbGVtZW50IHwgbnVsbCB7XG4gICAgICAgIGNvbnN0IHggPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcjJyArIHRoaXMuaWQpIGFzIEhUTUxFbGVtZW50O1xuICAgICAgICByZXR1cm4geDtcbiAgICB9XG4gICAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgICAgIHN1cGVyLm5nT25EZXN0cm95KCk7XG4gICAgICAgIHRoaXMuZWxlbT8ucmVtb3ZlKCk7XG4gICAgfVxufVxuIl19
|
|
@@ -30,4 +30,5 @@ export * from './route-form-change.directive';
|
|
|
30
30
|
export * from './dynamic-style.directive';
|
|
31
31
|
export * from './nowraptext.directive';
|
|
32
32
|
export * from './label-mandatory.directive';
|
|
33
|
-
|
|
33
|
+
export * from './absolute-div-body.directive';
|
|
34
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9iYXJzYS1ub3Zpbi1yYXktY29yZS9zcmMvbGliL2RpcmVjdGl2ZXMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYywyQkFBMkIsQ0FBQztBQUMxQyxjQUFjLHNCQUFzQixDQUFDO0FBQ3JDLGNBQWMsa0JBQWtCLENBQUM7QUFDakMsY0FBYyw0QkFBNEIsQ0FBQztBQUMzQyxjQUFjLDZCQUE2QixDQUFDO0FBQzVDLGNBQWMsdUJBQXVCLENBQUM7QUFDdEMsY0FBYywyQkFBMkIsQ0FBQztBQUMxQyxjQUFjLHNCQUFzQixDQUFDO0FBQ3JDLGNBQWMsbUNBQW1DLENBQUM7QUFDbEQsY0FBYyw0QkFBNEIsQ0FBQztBQUMzQyxjQUFjLGdDQUFnQyxDQUFDO0FBQy9DLGNBQWMseUJBQXlCLENBQUM7QUFDeEMsY0FBYywrQkFBK0IsQ0FBQztBQUM5QyxjQUFjLCtCQUErQixDQUFDO0FBQzlDLGNBQWMsK0JBQStCLENBQUM7QUFDOUMsY0FBYywyQkFBMkIsQ0FBQztBQUMxQyxjQUFjLHlCQUF5QixDQUFDO0FBQ3hDLGNBQWMsMEJBQTBCLENBQUM7QUFDekMsY0FBYyxxQ0FBcUMsQ0FBQztBQUNwRCxjQUFjLGtCQUFrQixDQUFDO0FBQ2pDLGNBQWMsMkJBQTJCLENBQUM7QUFDMUMsY0FBYyxvQkFBb0IsQ0FBQztBQUNuQyxjQUFjLHdCQUF3QixDQUFDO0FBQ3ZDLGNBQWMsb0JBQW9CLENBQUM7QUFDbkMsY0FBYyx3QkFBd0IsQ0FBQztBQUN2QyxjQUFjLDZCQUE2QixDQUFDO0FBQzVDLGNBQWMsOEJBQThCLENBQUM7QUFDN0MsY0FBYyx3QkFBd0IsQ0FBQztBQUN2QyxjQUFjLCtCQUErQixDQUFDO0FBQzlDLGNBQWMsMkJBQTJCLENBQUM7QUFDMUMsY0FBYyx3QkFBd0IsQ0FBQztBQUN2QyxjQUFjLDZCQUE2QixDQUFDO0FBQzVDLGNBQWMsK0JBQStCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL2FuY2hvci1zY3JvbGwuZGlyZWN0aXZlJztcbmV4cG9ydCAqIGZyb20gJy4vYXR0ci1ydGwuZGlyZWN0aXZlJztcbmV4cG9ydCAqIGZyb20gJy4vYmFzZS5kaXJlY3RpdmUnO1xuZXhwb3J0ICogZnJvbSAnLi9jb2x1bW4tcmVzaXplci5kaXJlY3RpdmUnO1xuZXhwb3J0ICogZnJvbSAnLi9keW5hbWljLWNvbW1hbmQuZGlyZWN0aXZlJztcbmV4cG9ydCAqIGZyb20gJy4vZWxsaXBzaWZ5LmRpcmVjdGl2ZSc7XG5leHBvcnQgKiBmcm9tICcuL2ZpZWxkLWJpbmRpbmcuZGlyZWN0aXZlJztcbmV4cG9ydCAqIGZyb20gJy4vaW1nLWxhenkuZGlyZWN0aXZlJztcbmV4cG9ydCAqIGZyb20gJy4vaW50ZXJzZWN0aW9uLW9ic2VydmVyLmRpcmVjdGl2ZSc7XG5leHBvcnQgKiBmcm9tICcuL2l0ZW1zLXJlbmRlcmVyLmRpcmVjdGl2ZSc7XG5leHBvcnQgKiBmcm9tICcuL251bWJlcnMtb25seS1pbnB1dC5kaXJlY3RpdmUnO1xuZXhwb3J0ICogZnJvbSAnLi9wbGFjZUhvbGRlci5kaXJlY3RpdmUnO1xuZXhwb3J0ICogZnJvbSAnLi9yZW5kZXItdWx2LXZpZXdlci5kaXJlY3RpdmUnO1xuZXhwb3J0ICogZnJvbSAnLi9yZW5kZXItdWx2LXBhZ2luZy5kaXJlY3RpdmUnO1xuZXhwb3J0ICogZnJvbSAnLi9yZW5kZXItdWx2LXZpZXdlci5kaXJlY3RpdmUnO1xuZXhwb3J0ICogZnJvbSAnLi90YWJsZS1yZXNpemVyLmRpcmVjdGl2ZSc7XG5leHBvcnQgKiBmcm9tICcuL3Vsdi1jb21tYW5kLmRpcmVjdGl2ZSc7XG5leHBvcnQgKiBmcm9tICcuL3VudGlsLWludmlldy5kaXJlY3RpdmUnO1xuZXhwb3J0ICogZnJvbSAnLi93b3JrZmxvdy1jaG9pY2UtY29tbWFuZC5kaXJlY3RpdmUnO1xuZXhwb3J0ICogZnJvbSAnLi9jb3B5LmRpcmVjdGl2ZSc7XG5leHBvcnQgKiBmcm9tICcuL2VsbGFwc2lzLXRleHQuZGlyZWN0aXZlJztcbmV4cG9ydCAqIGZyb20gJy4vZmlsbC1lbXB0eS1zcGFjZSc7XG5leHBvcnQgKiBmcm9tICcuL2Zvcm0tY2xvc2UuZGlyZWN0aXZlJztcbmV4cG9ydCAqIGZyb20gJy4vbW9iaWxlLmRpcmVjdGl2ZSc7XG5leHBvcnQgKiBmcm9tICcuL2JvZHktY2xpY2suZGlyZWN0aXZlJztcbmV4cG9ydCAqIGZyb20gJy4vcHJldmVudC1kZWZhdWx0LmRpcmVjdGl2ZSc7XG5leHBvcnQgKiBmcm9tICcuL3N0b3AtcHJvcGFnYXRpb24uZGlyZWN0aXZlJztcbmV4cG9ydCAqIGZyb20gJy4vY291bnQtZG93bi5kaXJlY3RpdmUnO1xuZXhwb3J0ICogZnJvbSAnLi9yb3V0ZS1mb3JtLWNoYW5nZS5kaXJlY3RpdmUnO1xuZXhwb3J0ICogZnJvbSAnLi9keW5hbWljLXN0eWxlLmRpcmVjdGl2ZSc7XG5leHBvcnQgKiBmcm9tICcuL25vd3JhcHRleHQuZGlyZWN0aXZlJztcbmV4cG9ydCAqIGZyb20gJy4vbGFiZWwtbWFuZGF0b3J5LmRpcmVjdGl2ZSc7XG5leHBvcnQgKiBmcm9tICcuL2Fic29sdXRlLWRpdi1ib2R5LmRpcmVjdGl2ZSc7XG4iXX0=
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { Pipe } from '@angular/core';
|
|
2
2
|
import * as i0 from "@angular/core";
|
|
3
3
|
export class SeperatorFixPipe {
|
|
4
|
-
transform(buttons) {
|
|
4
|
+
transform(buttons, removeSeperator = false) {
|
|
5
5
|
if (Array.isArray(buttons)) {
|
|
6
6
|
buttons?.forEach((c, i) => {
|
|
7
7
|
if (typeof c === 'string') {
|
|
@@ -9,7 +9,7 @@ export class SeperatorFixPipe {
|
|
|
9
9
|
}
|
|
10
10
|
});
|
|
11
11
|
}
|
|
12
|
-
return buttons;
|
|
12
|
+
return !removeSeperator ? buttons : buttons.filter((c) => typeof c === 'object' && c.cls);
|
|
13
13
|
}
|
|
14
14
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.5", ngImport: i0, type: SeperatorFixPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
|
|
15
15
|
static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "17.3.5", ngImport: i0, type: SeperatorFixPipe, name: "seperatorFix" }); }
|
|
@@ -20,4 +20,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.5", ngImpor
|
|
|
20
20
|
name: 'seperatorFix'
|
|
21
21
|
}]
|
|
22
22
|
}] });
|
|
23
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
23
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VwZXJhdG9yLWZpeC5waXBlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYmFyc2Etbm92aW4tcmF5LWNvcmUvc3JjL2xpYi9waXBlcy9zZXBlcmF0b3ItZml4LnBpcGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFpQixJQUFJLEVBQUUsTUFBTSxlQUFlLENBQUM7O0FBS3BELE1BQU0sT0FBTyxnQkFBZ0I7SUFDekIsU0FBUyxDQUFDLE9BQWMsRUFBRSxlQUFlLEdBQUcsS0FBSztRQUM3QyxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztZQUN6QixPQUFPLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFO2dCQUN0QixJQUFJLE9BQU8sQ0FBQyxLQUFLLFFBQVEsRUFBRSxDQUFDO29CQUN4QixPQUFPLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxXQUFXLEVBQUUsQ0FBQztnQkFDakQsQ0FBQztZQUNMLENBQUMsQ0FBQyxDQUFDO1FBQ1AsQ0FBQztRQUNELE9BQU8sQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLEtBQUssUUFBUSxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUM5RixDQUFDOzhHQVZRLGdCQUFnQjs0R0FBaEIsZ0JBQWdCOzsyRkFBaEIsZ0JBQWdCO2tCQUg1QixJQUFJO21CQUFDO29CQUNGLElBQUksRUFBRSxjQUFjO2lCQUN2QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFBpcGVUcmFuc2Zvcm0sIFBpcGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuQFBpcGUoe1xuICAgIG5hbWU6ICdzZXBlcmF0b3JGaXgnXG59KVxuZXhwb3J0IGNsYXNzIFNlcGVyYXRvckZpeFBpcGUgaW1wbGVtZW50cyBQaXBlVHJhbnNmb3JtIHtcbiAgICB0cmFuc2Zvcm0oYnV0dG9uczogYW55W10sIHJlbW92ZVNlcGVyYXRvciA9IGZhbHNlKTogYW55W10ge1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShidXR0b25zKSkge1xuICAgICAgICAgICAgYnV0dG9ucz8uZm9yRWFjaCgoYywgaSkgPT4ge1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgYyA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgICAgICAgYnV0dG9uc1tpXSA9IHsgdGV4dDogJycsIHR5cGU6ICdzZXBlcmF0b3InIH07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuICFyZW1vdmVTZXBlcmF0b3IgPyBidXR0b25zIDogYnV0dG9ucy5maWx0ZXIoKGMpID0+IHR5cGVvZiBjID09PSAnb2JqZWN0JyAmJiBjLmNscyk7XG4gICAgfVxufVxuIl19
|