kwikid-forms 0.5.8 → 0.5.10

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.
@@ -314,7 +314,7 @@ export class KwikIDBuilderFormEditorComponent {
314
314
  }
315
315
  }
316
316
  /** @nocollapse */ KwikIDBuilderFormEditorComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: KwikIDBuilderFormEditorComponent, deps: [{ token: i1.KwikIDFormBuilderFormEditorService }], target: i0.ɵɵFactoryTarget.Component });
317
- /** @nocollapse */ KwikIDBuilderFormEditorComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: KwikIDBuilderFormEditorComponent, selector: "kwikid-builder-form-editor", inputs: { activeFormConfig: "activeFormConfig" }, outputs: { onClickSaveActiveFormConfig: "onClickSaveActiveFormConfig" }, usesOnChanges: true, ngImport: i0, template: "<!-- Component Loader -->\n<kwikui-loader\n [loaderText]=\"'Please wait'\"\n [showLoader]=\"loader\"\n [fullscreen]=\"true\"\n></kwikui-loader>\n\n<!-- Component Main View -->\n<div class=\"container\">\n <ng-container *ngIf=\"activeFormConfig; else noFormSelectedTemplate\">\n <header>\n <div>\n &nbsp;Editing Config of Form: <b>{{ activeFormConfig.props.title }}</b>\n </div>\n <div class=\"header-form-editor-btns\">\n <button (click)=\"handleOnClickPreview()\">preview</button>\n <div>Editor&nbsp;Type:</div>\n <select (change)=\"handleOnClickChangeActiveEditor($event.target.value)\">\n <option\n *ngFor=\"let option of editorTypeOptions\"\n [value]=\"option.key\"\n [selected]=\"option.key === activeEditorType\"\n >\n {{ option.label }}\n </option>\n </select>\n </div>\n </header>\n <main>\n <div\n class=\"form-config-fields\"\n *ngIf=\"activeEditorType == 'FIELDS'; else nonFieldsEditorTemplate\"\n >\n <ng-container *ngIf=\"rows.length <= 0\">\n <div class=\"no-fields disclaimer\">\n <div><p>Please add field to get started</p></div>\n <div class=\"icon\"><h1>&plus;</h1></div>\n <button (click)=\"handleOnClickAddField()\">add field</button>\n </div>\n </ng-container>\n <table>\n <thead>\n <tr>\n <th *ngFor=\"let column of columns\">\n {{ column }}\n </th>\n </tr>\n </thead>\n <tbody>\n <ng-container\n *ngFor=\"let row of rows; let i = index; trackBy: trackByFn\"\n >\n <tr>\n <ng-container *ngFor=\"let column of columns; let j = index\">\n <td>\n <div [class]=\"column\">\n <ng-container\n *ngIf=\"\n column !== 'delete' &&\n column !== 'validators' &&\n column !== 'properties' &&\n column !== 'type' &&\n column !== 'disabled'\n \"\n [ngTemplateOutlet]=\"getFieldTemplate\"\n [ngTemplateOutletContext]=\"{\n index: i,\n fieldValue: row[column],\n fieldKey: column,\n parentPath: ''\n }\"\n ></ng-container>\n <ng-container *ngIf=\"column === 'type'\">\n <ng-container\n [ngTemplateOutlet]=\"optionFieldTemplate\"\n [ngTemplateOutletContext]=\"{\n index: i,\n key: column,\n value: row[column],\n path: '',\n options: memoizedGetOptions(\n i,\n row[column],\n column,\n ''\n )\n }\"\n ></ng-container>\n </ng-container>\n <ng-container *ngIf=\"column === 'disabled'\">\n <ng-container\n [ngTemplateOutlet]=\"booleanFieldTemplate\"\n [ngTemplateOutletContext]=\"{\n index: i,\n key: column,\n value: row[column],\n path: '',\n options: memoizedGetOptions(\n i,\n row[column],\n column,\n ''\n )\n }\"\n ></ng-container>\n </ng-container>\n <ng-container *ngIf=\"column === 'delete'\">\n <button\n (click)=\"\n handleOnClickDeleteField({\n index: i,\n key: row['key']\n })\n \"\n [disabled]=\"rows.length === 1\"\n >\n delete\n </button>\n </ng-container>\n <ng-container *ngIf=\"column === 'validators'\">\n <button\n (click)=\"\n handleOnClickEditValidators({\n index: i,\n key: row['key'],\n type: row['type']\n })\n \"\n >\n edit\n </button>\n </ng-container>\n <ng-container *ngIf=\"column === 'properties'\">\n <button\n (click)=\"\n handleOnClickEditProperties({\n index: i,\n key: row['key'],\n type: row['type']\n })\n \"\n >\n edit\n </button>\n </ng-container>\n </div>\n </td>\n </ng-container>\n </tr>\n </ng-container>\n </tbody>\n </table>\n <div class=\"add-field-btn-container\"> </div>\n </div>\n <ng-template #nonFieldsEditorTemplate>\n <div class=\"form-config-no-fields\">\n <pre\n contenteditable=\"true\"\n (keyup)=\"\n handleOnClickSaveActiveFormConfig_NoFields(\n $event.target.innerHTML\n )\n \"\n >\n {{ activeFormConfig_NoFields | json }}\n </pre>\n </div>\n </ng-template>\n </main>\n <footer>\n <button\n *ngIf=\"rows.length > 0\"\n (click)=\"handleOnClickAddField()\"\n >\n add field\n </button>\n <button\n (click)=\"handleOnClickSaveActiveFormConfig()\"\n [class.secondary]=\"!savedConfig\"\n >\n {{ savedConfig ? \"saved\" : \"unsaved\" }}\n </button>\n </footer>\n </ng-container>\n <ng-template #noFormSelectedTemplate>\n <div class=\"no-form-selected disclaimer\">\n <div class=\"icon\"><h1>&#10150;</h1></div>\n <div><p>Please select a form to edit it's fields</p></div>\n </div>\n </ng-template>\n</div>\n\n<!-- Component Dialog -->\n<div\n class=\"modal\"\n [class.error]=\"dialogError === true\"\n *ngIf=\"\n dialogOpen ||\n showFieldConfigValidatorsConfigEditor ||\n showFieldConfigPropertiesConfigEditor\n \"\n [@panelInOut]\n>\n <div class=\"modal-box\">\n <div\n class=\"modal-content\"\n *ngIf=\"dialogOpen\"\n >\n <div class=\"modal-heading\">\n <div class=\"modal-title\">\n {{ activeFormConfig.props.title }}'s Config Preview\n </div>\n <div class=\"modal-actions\">\n <button (click)=\"downloadJSON()\">download</button>\n <button (click)=\"copyToClipboard()\">copy</button>\n <button (click)=\"closeJSONPopup()\">close</button>\n </div>\n </div>\n <div class=\"modal-body\">\n <pre>\n <code>{{ activeFormConfig | json }}</code>\n </pre>\n </div>\n </div>\n <div\n class=\"modal-content\"\n *ngIf=\"showFieldConfigValidatorsConfigEditor\"\n >\n <div class=\"modal-heading\">\n <div class=\"modal-title\">\n {{ activeFormConfig.props.title }}'s Validator Config Editor\n </div>\n <div class=\"modal-actions\">\n <button (click)=\"closeJSONPopup()\">close</button>\n </div>\n </div>\n <div class=\"modal-body\">\n <pre\n contenteditable=\"true\"\n (keyup)=\"\n handleOnInputFieldConfigValidatorsConfig($event.target.innerHTML)\n \"\n >\n {{ this.activeFieldConfigValidatorsConfig | json }}\n </pre>\n </div>\n </div>\n <div\n class=\"modal-content\"\n *ngIf=\"showFieldConfigPropertiesConfigEditor\"\n >\n <div class=\"modal-heading\">\n <div class=\"modal-title\">\n {{ activeFormConfig.props.title }}'s Properties Config Editor\n </div>\n <div class=\"modal-actions\">\n <button (click)=\"closeJSONPopup()\">close</button>\n </div>\n </div>\n <div class=\"modal-body\">\n <pre\n contenteditable=\"true\"\n (keyup)=\"\n handleOnInputFieldConfigPropertiesConfig($event.target.innerHTML)\n \"\n >\n {{ this.activeFieldConfigPropertiesConfig | json }}\n </pre>\n </div>\n </div>\n </div>\n</div>\n<!-- END -->\n\n<!-- Template for rendering different field types -->\n<!-- General Field Template -->\n<ng-template\n #getFieldTemplate\n let-index=\"index\"\n let-value=\"fieldValue\"\n let-key=\"fieldKey\"\n let-path=\"parentPath\"\n>\n <div>\n <ng-container\n [ngTemplateOutlet]=\"\n isObject(value) ? objectFieldTemplate : notObjectFieldTemplate\n \"\n [ngTemplateOutletContext]=\"{\n index: index,\n fieldValue: value,\n fieldKey: key,\n parentPath: path\n }\"\n >\n </ng-container>\n </div>\n</ng-template>\n\n<!-- Object Type Field Template -->\n<ng-template\n #objectFieldTemplate\n let-index=\"index\"\n let-value=\"fieldValue\"\n let-key=\"fieldKey\"\n let-path=\"parentPath\"\n>\n <ng-container *ngFor=\"let item of value | keyvalue\">\n <ng-container\n [ngTemplateOutlet]=\"getFieldTemplate\"\n [ngTemplateOutletContext]=\"{\n index: index,\n fieldValue: item.value,\n fieldKey: item.key,\n parentPath: path === '' ? key : path + '.' + key\n }\"\n >\n </ng-container>\n </ng-container>\n</ng-template>\n\n<!-- Non Object Type Field Template -->\n<ng-template\n #notObjectFieldTemplate\n let-index=\"index\"\n let-value=\"fieldValue\"\n let-key=\"fieldKey\"\n let-path=\"parentPath\"\n>\n <div>\n <ng-container *ngIf=\"isOptions(index, value, key, path)\">\n <ng-container\n [ngTemplateOutlet]=\"optionFieldTemplate\"\n [ngTemplateOutletContext]=\"{\n index: index,\n key: key,\n value: value,\n path: path,\n options: memoizedGetOptions(index, value, key, path)\n }\"\n ></ng-container>\n </ng-container>\n <ng-container\n *ngIf=\"!isOptions(index, value, key, path) && isString(value)\"\n >\n <ng-container\n *ngTemplateOutlet=\"\n textFieldTemplate;\n context: { index: index, key: key, value: value, path: path }\n \"\n ></ng-container>\n </ng-container>\n <ng-container\n *ngIf=\"!isOptions(index, value, key, path) && isNumber(value)\"\n >\n <ng-container\n *ngTemplateOutlet=\"\n numberFieldTemplate;\n context: { index: index, key: key, value: value, path: path }\n \"\n ></ng-container>\n </ng-container>\n </div>\n</ng-template>\n\n<!-- Non Object Type Field :: Options Field Template -->\n<ng-template\n #optionFieldTemplate\n let-index=\"index\"\n let-key=\"key\"\n let-value=\"value\"\n let-path=\"path\"\n let-options=\"options\"\n>\n <div class=\"field-container options\">\n <select\n (change)=\"handleOnInput({ index, key, value: { previous: value, new: $event.target.value }, path })\"\n >\n <option\n *ngFor=\"let option of options\"\n [value]=\"option\"\n [selected]=\"option === value\"\n >{{ option }}</option\n >\n </select>\n </div>\n</ng-template>\n\n<!-- Non Object Type Field :: Boolean Field Template -->\n<ng-template\n #booleanFieldTemplate\n let-index=\"index\"\n let-key=\"key\"\n let-value=\"value\"\n let-path=\"path\"\n>\n <div class=\"field-container checkbox\">\n <input\n type=\"checkbox\"\n [checked]=\"value\"\n (change)=\"handleOnInput({ index, key, value: { previous: value, new: $event.target.checked }, path })\"\n />\n </div>\n</ng-template>\n\n<!-- Non Object Type Field :: Text Field Template -->\n<ng-template\n #textFieldTemplate\n let-index=\"index\"\n let-key=\"key\"\n let-value=\"value\"\n let-path=\"path\"\n>\n <div class=\"field-container text\">\n <input\n placeholder=\"Enter {{ key }}\"\n type=\"text\"\n [value]=\"value\"\n (blur)=\"handleOnInput({ index, key, value: { previous: value, new: $event.target.value }, path })\"\n />\n </div>\n</ng-template>\n\n<!-- Non Object Type Field :: Number Field Template -->\n<ng-template\n #numberFieldTemplate\n let-index=\"index\"\n let-key=\"key\"\n let-value=\"value\"\n let-path=\"path\"\n>\n <div class=\"field-container number\">\n <input\n placeholder=\"Enter {{ key }}\"\n type=\"number\"\n [value]=\"value\"\n (blur)=\"handleOnInput({ index, key, value: { previous: value, new: $event.target.value }, path })\"\n />\n </div>\n</ng-template>\n<!-- END -->\n", styles: ["::-webkit-scrollbar{width:8px}::-webkit-scrollbar-track{border-radius:10px}::-webkit-scrollbar-thumb{background:lightgray;border-radius:10px}::-webkit-scrollbar-thumb:hover{background:gray}input[type=text],input[type=number]{width:100%;padding:8px 12px;border:1px solid #ccc;border-radius:4px;box-sizing:border-box;-webkit-appearance:auto!important;appearance:auto!important}input[type=checkbox]{-webkit-appearance:auto!important;appearance:auto!important;width:1rem;height:1rem}select{width:100%;padding:8px 12px;border:1px solid #ccc;border-radius:4px;box-sizing:border-box}textarea{overflow-wrap:anywhere;resize:none;unicode-bidi:embed;white-space:pre-wrap}button{display:inline-block;padding:8px 12px;background-color:#007bff;color:#fff;text-decoration:none;border-radius:4px;border:none;cursor:pointer}button:hover{background-color:#0069d9}button:active{background-color:#0056b3}button:focus{outline:none}button.secondary{padding:7px 11px;border:1px solid #007bff;background-color:#fff;color:#007bff}button.secondary:hover{background-color:#b7daff}button.secondary:active{background-color:#b7daff}button.secondary:focus{outline:none}.field-container{display:flex}.field-container label{color:gray}.field-container.checkbox{flex-direction:row;align-items:center;justify-content:center;padding:8px 12px;margin:auto}.field-container.options,.field-container.number,.field-container.text{flex-direction:column}.disclaimer{display:flex;flex-direction:column;align-content:center;justify-content:center;align-items:center;grid-gap:1.4rem;gap:1.4rem;color:#121212;width:100%;height:100%}.disclaimer .icon{width:3rem;height:3rem;display:flex;flex-direction:row;align-content:center;justify-content:center;align-items:center}.disclaimer.no-form-selected h1{transform:scaleX(-1)}.disclaimer h1{font-size:5rem;font-weight:100}.disclaimer p{font-size:1rem}\n", ":host{all:unset;position:relative;width:100%;height:100%;overflow:auto}.container{display:flex;flex-direction:column;justify-content:space-between;align-items:stretch;height:100%;border:1px solid #ccc}.container header{padding:.5rem;display:flex;flex-direction:row;align-content:center;justify-content:space-between;align-items:center;border-bottom:1px solid #ccc}.container header .header-form-editor-btns{display:flex;flex-direction:row;align-content:center;justify-content:space-between;align-items:center;grid-gap:1rem;gap:1rem}.container main{padding:.5rem;flex-grow:1;overflow:auto;display:flex;flex-direction:row;justify-content:flex-start;align-items:stretch;grid-gap:1rem;gap:1rem;white-space:nowrap;position:relative}.container main .no-fields{position:absolute;top:0;left:0;background:white}.container main .form-config-no-fields{overflow:auto;width:100%}.container main .form-config-fields{overflow:auto;width:100%}.container main .form-config-fields .add-field-btn-container{width:100%;text-align:center}.container main .validators,.container main .properties{display:flex;flex-direction:column;justify-content:flex-start;align-items:stretch;grid-gap:.5rem;gap:.5rem}.container main .input-checkbox-container{display:flex;flex-direction:row}.container footer{padding:.5rem;display:flex;flex-direction:row;justify-content:flex-end;align-items:stretch;grid-gap:1rem;gap:1rem;border-top:1px solid lightgray}.modal{position:absolute;top:0;background-color:#0000004d;width:100%;height:100%;display:flex;justify-content:center;align-items:center;left:0;flex-direction:row}.modal.error{background-color:#ff00004d}.modal-box{width:75%;height:75%;margin:auto;background-color:#fff;border-radius:1rem;box-shadow:#64646f33 0 7px 29px}.modal-content{display:flex;flex-direction:column;align-content:center;justify-content:flex-start;align-items:stretch;width:100%;height:100%}.modal-heading{padding:.5rem 1rem;width:100%;display:flex;flex-direction:row;justify-content:space-between;border-bottom:1px solid lightgray;align-items:center}.modal-title{font-weight:bold;font-size:1rem}.modal-actions{display:flex;flex-direction:row;grid-gap:1rem;gap:1rem;cursor:pointer}.modal-body{overflow:auto}.modal-body pre{padding:1rem}pre{white-space:pre-wrap;overflow:auto}table{width:100%;border-collapse:collapse;margin-bottom:20px}table th,table td{padding:8px;text-align:left;border:1px solid #ccc;vertical-align:top}table th{background-color:#f2f2f2}table tr:nth-child(even){background-color:#f9f9f9}table tr:hover{background-color:#eaeaea}\n"], components: [{ type: i2.KwikUILoaderComponent, selector: "kwikui-loader", inputs: ["id", "loaderText", "showLoader", "fullscreen", "styles", "class"] }], directives: [{ type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i4.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { type: i4.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { type: i3.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }], pipes: { "json": i3.JsonPipe, "keyvalue": i3.KeyValuePipe }, animations: [
317
+ /** @nocollapse */ KwikIDBuilderFormEditorComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: KwikIDBuilderFormEditorComponent, selector: "kwikid-builder-form-editor", inputs: { activeFormConfig: "activeFormConfig" }, outputs: { onClickSaveActiveFormConfig: "onClickSaveActiveFormConfig" }, usesOnChanges: true, ngImport: i0, template: "<!-- Component Loader -->\n<kwikui-loader\n [loaderText]=\"'Please wait'\"\n [showLoader]=\"loader\"\n [fullscreen]=\"true\"\n></kwikui-loader>\n\n<!-- Component Main View -->\n<div class=\"container\">\n <ng-container *ngIf=\"activeFormConfig; else noFormSelectedTemplate\">\n <header>\n <div>\n &nbsp;Editing Config of Form: <b>{{ activeFormConfig.props.title }}</b>\n </div>\n <div class=\"header-form-editor-btns\">\n <button (click)=\"handleOnClickPreview()\">preview</button>\n <div>Editor&nbsp;Type:</div>\n <select (change)=\"handleOnClickChangeActiveEditor($event.target.value)\">\n <option\n *ngFor=\"let option of editorTypeOptions\"\n [value]=\"option.key\"\n [selected]=\"option.key === activeEditorType\"\n >\n {{ option.label }}\n </option>\n </select>\n </div>\n </header>\n <main>\n <div\n class=\"form-config-fields\"\n *ngIf=\"activeEditorType == 'FIELDS'; else nonFieldsEditorTemplate\"\n >\n <ng-container *ngIf=\"rows.length <= 0\">\n <div class=\"no-fields disclaimer\">\n <div><p>Please add field to get started</p></div>\n <div class=\"icon\"><h1>&plus;</h1></div>\n <button (click)=\"handleOnClickAddField()\">add field</button>\n </div>\n </ng-container>\n <table>\n <thead>\n <tr>\n <th *ngFor=\"let column of columns\">\n {{ column }}\n </th>\n </tr>\n </thead>\n <tbody>\n <ng-container\n *ngFor=\"let row of rows; let i = index; trackBy: trackByFn\"\n >\n <tr>\n <ng-container *ngFor=\"let column of columns; let j = index\">\n <td>\n <div [class]=\"column\">\n <ng-container\n *ngIf=\"\n column !== 'delete' &&\n column !== 'validators' &&\n column !== 'properties' &&\n column !== 'type' &&\n column !== 'disabled'\n \"\n [ngTemplateOutlet]=\"getFieldTemplate\"\n [ngTemplateOutletContext]=\"{\n index: i,\n fieldValue: row[column],\n fieldKey: column,\n parentPath: ''\n }\"\n ></ng-container>\n <ng-container *ngIf=\"column === 'type'\">\n <ng-container\n [ngTemplateOutlet]=\"optionFieldTemplate\"\n [ngTemplateOutletContext]=\"{\n index: i,\n key: column,\n value: row[column],\n path: '',\n options: memoizedGetOptions(\n i,\n row[column],\n column,\n ''\n )\n }\"\n ></ng-container>\n </ng-container>\n <ng-container *ngIf=\"column === 'disabled'\">\n <ng-container\n [ngTemplateOutlet]=\"booleanFieldTemplate\"\n [ngTemplateOutletContext]=\"{\n index: i,\n key: column,\n value: row[column],\n path: '',\n options: memoizedGetOptions(\n i,\n row[column],\n column,\n ''\n )\n }\"\n ></ng-container>\n </ng-container>\n <ng-container *ngIf=\"column === 'delete'\">\n <button\n (click)=\"\n handleOnClickDeleteField({\n index: i,\n key: row['key']\n })\n \"\n [disabled]=\"rows.length === 1\"\n >\n delete\n </button>\n </ng-container>\n <ng-container *ngIf=\"column === 'validators'\">\n <button\n (click)=\"\n handleOnClickEditValidators({\n index: i,\n key: row['key'],\n type: row['type']\n })\n \"\n >\n edit\n </button>\n </ng-container>\n <ng-container *ngIf=\"column === 'properties'\">\n <button\n (click)=\"\n handleOnClickEditProperties({\n index: i,\n key: row['key'],\n type: row['type']\n })\n \"\n >\n edit\n </button>\n </ng-container>\n </div>\n </td>\n </ng-container>\n </tr>\n </ng-container>\n </tbody>\n </table>\n <div class=\"add-field-btn-container\"> </div>\n </div>\n <ng-template #nonFieldsEditorTemplate>\n <div class=\"form-config-no-fields\">\n <pre\n contenteditable=\"true\"\n (keyup)=\"\n handleOnClickSaveActiveFormConfig_NoFields(\n $event.target.innerHTML\n )\n \"\n >\n {{ activeFormConfig_NoFields | json }}\n </pre>\n </div>\n </ng-template>\n </main>\n <footer>\n <button\n *ngIf=\"rows.length > 0\"\n (click)=\"handleOnClickAddField()\"\n >\n add field\n </button>\n <button\n (click)=\"handleOnClickSaveActiveFormConfig()\"\n [class.secondary]=\"!savedConfig\"\n >\n {{ savedConfig ? \"saved\" : \"unsaved\" }}\n </button>\n </footer>\n </ng-container>\n <ng-template #noFormSelectedTemplate>\n <div class=\"no-form-selected disclaimer\">\n <div class=\"icon\"><h1>&#10150;</h1></div>\n <div><p>Please select a form to edit it's fields</p></div>\n </div>\n </ng-template>\n</div>\n\n<!-- Component Dialog -->\n<div\n class=\"modal\"\n [class.error]=\"dialogError === true\"\n *ngIf=\"\n dialogOpen ||\n showFieldConfigValidatorsConfigEditor ||\n showFieldConfigPropertiesConfigEditor\n \"\n [@panelInOut]\n>\n <div class=\"modal-box\">\n <div\n class=\"modal-content\"\n *ngIf=\"dialogOpen\"\n >\n <div class=\"modal-heading\">\n <div class=\"modal-title\">\n {{ activeFormConfig.props.title }}'s Config Preview\n </div>\n <div class=\"modal-actions\">\n <button (click)=\"downloadJSON()\">download</button>\n <button (click)=\"copyToClipboard()\">copy</button>\n <button (click)=\"closeJSONPopup()\">close</button>\n </div>\n </div>\n <div class=\"modal-body\">\n <pre>\n <code>{{ activeFormConfig | json }}</code>\n </pre>\n </div>\n </div>\n <div\n class=\"modal-content\"\n *ngIf=\"showFieldConfigValidatorsConfigEditor\"\n >\n <div class=\"modal-heading\">\n <div class=\"modal-title\">\n {{ activeFormConfig.props.title }}'s Validator Config Editor\n </div>\n <div class=\"modal-actions\">\n <button (click)=\"closeJSONPopup()\">close</button>\n </div>\n </div>\n <div class=\"modal-body\">\n <pre\n contenteditable=\"true\"\n (keyup)=\"\n handleOnInputFieldConfigValidatorsConfig($event.target.innerHTML)\n \"\n >\n {{ this.activeFieldConfigValidatorsConfig | json }}\n </pre>\n </div>\n </div>\n <div\n class=\"modal-content\"\n *ngIf=\"showFieldConfigPropertiesConfigEditor\"\n >\n <div class=\"modal-heading\">\n <div class=\"modal-title\">\n {{ activeFormConfig.props.title }}'s Properties Config Editor\n </div>\n <div class=\"modal-actions\">\n <button (click)=\"closeJSONPopup()\">close</button>\n </div>\n </div>\n <div class=\"modal-body\">\n <pre\n contenteditable=\"true\"\n (keyup)=\"\n handleOnInputFieldConfigPropertiesConfig($event.target.innerHTML)\n \"\n >\n {{ this.activeFieldConfigPropertiesConfig | json }}\n </pre>\n </div>\n </div>\n </div>\n</div>\n<!-- END -->\n\n<!-- Template for rendering different field types -->\n<!-- General Field Template -->\n<ng-template\n #getFieldTemplate\n let-index=\"index\"\n let-value=\"fieldValue\"\n let-key=\"fieldKey\"\n let-path=\"parentPath\"\n>\n <div>\n <ng-container\n [ngTemplateOutlet]=\"\n isObject(value) ? objectFieldTemplate : notObjectFieldTemplate\n \"\n [ngTemplateOutletContext]=\"{\n index: index,\n fieldValue: value,\n fieldKey: key,\n parentPath: path\n }\"\n >\n </ng-container>\n </div>\n</ng-template>\n\n<!-- Object Type Field Template -->\n<ng-template\n #objectFieldTemplate\n let-index=\"index\"\n let-value=\"fieldValue\"\n let-key=\"fieldKey\"\n let-path=\"parentPath\"\n>\n <ng-container *ngFor=\"let item of value | keyvalue\">\n <ng-container\n [ngTemplateOutlet]=\"getFieldTemplate\"\n [ngTemplateOutletContext]=\"{\n index: index,\n fieldValue: item.value,\n fieldKey: item.key,\n parentPath: path === '' ? key : path + '.' + key\n }\"\n >\n </ng-container>\n </ng-container>\n</ng-template>\n\n<!-- Non Object Type Field Template -->\n<ng-template\n #notObjectFieldTemplate\n let-index=\"index\"\n let-value=\"fieldValue\"\n let-key=\"fieldKey\"\n let-path=\"parentPath\"\n>\n <div>\n <ng-container *ngIf=\"isOptions(index, value, key, path)\">\n <ng-container\n [ngTemplateOutlet]=\"optionFieldTemplate\"\n [ngTemplateOutletContext]=\"{\n index: index,\n key: key,\n value: value,\n path: path,\n options: memoizedGetOptions(index, value, key, path)\n }\"\n ></ng-container>\n </ng-container>\n <ng-container\n *ngIf=\"!isOptions(index, value, key, path) && isString(value)\"\n >\n <ng-container\n *ngTemplateOutlet=\"\n textFieldTemplate;\n context: { index: index, key: key, value: value, path: path }\n \"\n ></ng-container>\n </ng-container>\n <ng-container\n *ngIf=\"!isOptions(index, value, key, path) && isNumber(value)\"\n >\n <ng-container\n *ngTemplateOutlet=\"\n numberFieldTemplate;\n context: { index: index, key: key, value: value, path: path }\n \"\n ></ng-container>\n </ng-container>\n </div>\n</ng-template>\n\n<!-- Non Object Type Field :: Options Field Template -->\n<ng-template\n #optionFieldTemplate\n let-index=\"index\"\n let-key=\"key\"\n let-value=\"value\"\n let-path=\"path\"\n let-options=\"options\"\n>\n <div class=\"field-container options\">\n <select\n (change)=\"handleOnInput({ index, key, value: { previous: value, new: $event.target.value }, path })\"\n >\n <option\n *ngFor=\"let option of options\"\n [value]=\"option\"\n [selected]=\"option === value\"\n >{{ option }}</option\n >\n </select>\n </div>\n</ng-template>\n\n<!-- Non Object Type Field :: Boolean Field Template -->\n<ng-template\n #booleanFieldTemplate\n let-index=\"index\"\n let-key=\"key\"\n let-value=\"value\"\n let-path=\"path\"\n>\n <div class=\"field-container checkbox\">\n <input\n type=\"checkbox\"\n [checked]=\"value\"\n (change)=\"handleOnInput({ index, key, value: { previous: value, new: $event.target.checked }, path })\"\n />\n </div>\n</ng-template>\n\n<!-- Non Object Type Field :: Text Field Template -->\n<ng-template\n #textFieldTemplate\n let-index=\"index\"\n let-key=\"key\"\n let-value=\"value\"\n let-path=\"path\"\n>\n <div class=\"field-container text\">\n <input\n placeholder=\"Enter {{ key }}\"\n type=\"text\"\n [value]=\"value\"\n (blur)=\"handleOnInput({ index, key, value: { previous: value, new: $event.target.value }, path })\"\n />\n </div>\n</ng-template>\n\n<!-- Non Object Type Field :: Number Field Template -->\n<ng-template\n #numberFieldTemplate\n let-index=\"index\"\n let-key=\"key\"\n let-value=\"value\"\n let-path=\"path\"\n>\n <div class=\"field-container number\">\n <input\n placeholder=\"Enter {{ key }}\"\n type=\"number\"\n [value]=\"value\"\n (blur)=\"handleOnInput({ index, key, value: { previous: value, new: $event.target.value }, path })\"\n />\n </div>\n</ng-template>\n<!-- END -->\n", styles: ["::-webkit-scrollbar{width:8px}::-webkit-scrollbar-track{border-radius:10px}::-webkit-scrollbar-thumb{background:lightgray;border-radius:10px}::-webkit-scrollbar-thumb:hover{background:gray}input[type=text],input[type=number]{width:100%;padding:8px 12px;border:1px solid #ccc;border-radius:4px;box-sizing:border-box;-webkit-appearance:auto!important;appearance:auto!important}input[type=checkbox]{-webkit-appearance:auto!important;appearance:auto!important;width:1rem;height:1rem}select{width:100%;padding:8px 12px;border:1px solid #ccc;border-radius:4px;box-sizing:border-box}textarea{overflow-wrap:anywhere;resize:none;unicode-bidi:embed;white-space:pre-wrap}button{display:inline-block;padding:8px 12px;background-color:#007bff;color:#fff;text-decoration:none;border-radius:4px;border:none;cursor:pointer}button:hover{background-color:#0069d9}button:active{background-color:#0056b3}button:focus{outline:none}button.secondary{padding:7px 11px;border:1px solid #007bff;background-color:#fff;color:#007bff}button.secondary:hover{background-color:#b7daff}button.secondary:active{background-color:#b7daff}button.secondary:focus{outline:none}.field-container{display:flex}.field-container label{color:gray}.field-container.checkbox{flex-direction:row;align-items:center;justify-content:center;padding:8px 12px;margin:auto}.field-container.options,.field-container.number,.field-container.text{flex-direction:column}.disclaimer{display:flex;flex-direction:column;align-content:center;justify-content:center;align-items:center;color:#121212;width:100%;height:100%}.disclaimer>*:not(:last-child){margin-bottom:1.5rem}.disclaimer .icon{width:3rem;height:3rem;display:flex;flex-direction:row;align-content:center;justify-content:center;align-items:center}.disclaimer.no-form-selected h1{transform:scaleX(-1)}.disclaimer h1{font-size:5rem;font-weight:100}.disclaimer p{font-size:1rem}\n", ":host{all:unset;position:relative;width:100%;height:100%;overflow:auto}.container{display:flex;flex-direction:column;justify-content:space-between;align-items:stretch;height:100%;border:1px solid #ccc}.container header{padding:.5rem;display:flex;flex-direction:row;align-content:center;justify-content:space-between;align-items:center;border-bottom:1px solid #ccc}.container header .header-form-editor-btns{display:flex;flex-direction:row;align-content:center;justify-content:space-between;align-items:center}.container header .header-form-editor-btns>*:not(:last-child){margin-right:1rem}.container main{padding:.5rem;flex-grow:1;overflow:auto;display:flex;flex-direction:row;justify-content:flex-start;align-items:stretch;white-space:nowrap;position:relative}.container main>*:not(:last-child){margin-right:1rem}.container main .no-fields{position:absolute;top:0;left:0;background:white}.container main .form-config-no-fields{overflow:auto;width:100%}.container main .form-config-fields{overflow:auto;width:100%}.container main .form-config-fields .add-field-btn-container{width:100%;text-align:center}.container main .validators,.container main .properties{display:flex;flex-direction:column;justify-content:flex-start;align-items:stretch}.container main .validators>*:not(:last-child),.container main .properties>*:not(:last-child){margin-bottom:.5rem}.container main .input-checkbox-container{display:flex;flex-direction:row}.container footer{padding:.5rem;display:flex;flex-direction:row;justify-content:flex-end;align-items:stretch;border-top:1px solid lightgray}.container footer>*:not(:last-child){margin-right:1rem}.modal{position:absolute;top:0;background-color:#0000004d;width:100%;height:100%;display:flex;justify-content:center;align-items:center;left:0;flex-direction:row}.modal.error{background-color:#ff00004d}.modal-box{width:75%;height:75%;margin:auto;background-color:#fff;border-radius:1rem;box-shadow:#64646f33 0 7px 29px}.modal-content{display:flex;flex-direction:column;align-content:center;justify-content:flex-start;align-items:stretch;width:100%;height:100%}.modal-heading{padding:.5rem 1rem;width:100%;display:flex;flex-direction:row;justify-content:space-between;border-bottom:1px solid lightgray;align-items:center}.modal-title{font-weight:bold;font-size:1rem}.modal-actions{display:flex;flex-direction:row;cursor:pointer}.modal-actions>*:not(:last-child){margin-right:1rem}.modal-body{overflow:auto}.modal-body pre{padding:1rem}pre{white-space:pre-wrap;overflow:auto}table{width:100%;border-collapse:collapse;margin-bottom:20px}table th,table td{padding:8px;text-align:left;border:1px solid #ccc;vertical-align:top}table th{background-color:#f2f2f2}table tr:nth-child(even){background-color:#f9f9f9}table tr:hover{background-color:#eaeaea}\n"], components: [{ type: i2.KwikUILoaderComponent, selector: "kwikui-loader", inputs: ["id", "loaderText", "showLoader", "fullscreen", "styles", "class"] }], directives: [{ type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i4.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { type: i4.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { type: i3.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }], pipes: { "json": i3.JsonPipe, "keyvalue": i3.KeyValuePipe }, animations: [
318
318
  trigger("panelInOut", [
319
319
  transition(":enter", [
320
320
  style({ transform: "translateY(100%)" }),
@@ -400,4 +400,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImpo
400
400
  }], onClickSaveActiveFormConfig: [{
401
401
  type: Output
402
402
  }], ngOnInit: [], ngOnChanges: [], initFormEditor: [], handleOnClickChangeActiveEditor: [], handleOnClickSaveActiveFormConfig: [], handleOnClickAddField: [], handleOnClickEditValidators: [], handleOnClickEditProperties: [], handleOnInput: [], handleOnInputFieldConfigValidatorsConfig: [], handleOnInputFieldConfigPropertiesConfig: [], handleOnClickDeleteField: [], handleOnClickSaveActiveFormConfig_NoFields: [], handleOnClickPreview: [], closeJSONPopup: [], copyToClipboard: [], downloadJSON: [] } });
403
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnVpbGRlci1mb3JtLWVkaXRvci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9rd2lraWQtZm9ybXMvc3JjL2xpYi9idWlsZGVyL2J1aWxkZXItZm9ybS1lZGl0b3IvYnVpbGRlci1mb3JtLWVkaXRvci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9rd2lraWQtZm9ybXMvc3JjL2xpYi9idWlsZGVyL2J1aWxkZXItZm9ybS1lZGl0b3IvYnVpbGRlci1mb3JtLWVkaXRvci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsVUFBVSxFQUFFLE9BQU8sRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQzFFLE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsU0FBUyxFQUNULFlBQVksRUFDWixLQUFLLEVBR0wsTUFBTSxFQUVQLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxXQUFXLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDeEQsT0FBTyxFQUNMLG9CQUFvQixFQUNwQixpQkFBaUIsRUFDakIsc0JBQXNCLEVBQ3RCLFNBQVMsRUFDVCxZQUFZLEVBQ1osb0JBQW9CLEVBQ3JCLE1BQU0sZ0JBQWdCLENBQUM7QUFDeEIsT0FBTyxDQUFDLE1BQU0sUUFBUSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxrREFBa0QsQ0FBQztBQUM3RSxPQUFPLEVBQ0wsZUFBZSxFQUVoQixNQUFNLG1DQUFtQyxDQUFDO0FBQzNDLE9BQU8sRUFDTCxnQkFBZ0IsRUFDaEIsYUFBYSxFQUNiLFdBQVcsRUFDWixNQUFNLDhCQUE4QixDQUFDO0FBQ3RDLE9BQU8sRUFDTCxZQUFZLEVBQ1osdUJBQXVCLEVBQ3ZCLHVCQUF1QixFQUN2QixPQUFPLEVBQ1AsYUFBYSxFQUNk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U0FBUztvRUFHVDs0RkFyWVUsZ0NBQWdDO2tCQWpCNUMsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUsNEJBQTRCO29CQUN0QyxXQUFXLEVBQUUsc0NBQXNDO29CQUNuRCxTQUFTLEVBQUUsQ0FBQyxnQkFBZ0IsRUFBRSxzQ0FBc0MsQ0FBQztvQkFDckUsZUFBZSxFQUFFLHVCQUF1QixDQUFDLE1BQU07b0JBQy9DLFVBQVUsRUFBRTt3QkFDVixPQUFPLENBQUMsWUFBWSxFQUFFOzRCQUNwQixVQUFVLENBQUMsUUFBUSxFQUFFO2dDQUNuQixLQUFLLENBQUMsRUFBRSxTQUFTLEVBQUUsa0JBQWtCLEVBQUUsQ0FBQztnQ0FDeEMsT0FBTyxDQUFDLEdBQUcsQ0FBQzs2QkFDYixDQUFDOzRCQUNGLFVBQVUsQ0FBQyxRQUFRLEVBQUU7Z0NBQ25CLE9BQU8sQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLEVBQUUsU0FBUyxFQUFFLGtCQUFrQixFQUFFLENBQUMsQ0FBQzs2QkFDdkQsQ0FBQzt5QkFDSCxDQUFDO3FCQUNIO2lCQUNGO3lIQU1DLGdCQUFnQjtzQkFEZixLQUFLO2dCQU9OLDJCQUEyQjtzQkFEMUIsTUFBTTtnQkFzRVAsUUFBUSxNQUdSLFdBQVcsTUFnQlgsY0FBYyxNQWdDZCwrQkFBK0IsTUFLL0IsaUNBQWlDLE1Ba0NqQyxxQkFBcUIsTUF3QnJCLDJCQUEyQixNQWUzQiwyQkFBMkIsTUFrQjNCLGFBQWEsTUErQ2Isd0NBQXdDLE1BaUN4Qyx3Q0FBd0MsTUFvQ3hDLHdCQUF3QixNQWdCeEIsMENBQTBDLE1BUTFDLG9CQUFvQixNQUtwQixjQUFjLE1BVWQsZUFBZSxNQUtmLFlBQVkiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBhbmltYXRlLCBzdHlsZSwgdHJhbnNpdGlvbiwgdHJpZ2dlciB9IGZyb20gXCJAYW5ndWxhci9hbmltYXRpb25zXCI7XG5pbXBvcnQge1xuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ29tcG9uZW50LFxuICBFdmVudEVtaXR0ZXIsXG4gIElucHV0LFxuICBPbkNoYW5nZXMsXG4gIE9uSW5pdCxcbiAgT3V0cHV0LFxuICBTaW1wbGVDaGFuZ2VzXG59IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5pbXBvcnQgeyBGb3JtQ29udHJvbCwgRm9ybUdyb3VwIH0gZnJvbSBcIkBhbmd1bGFyL2Zvcm1zXCI7XG5pbXBvcnQge1xuICBjaGVja09iamVjdEtleUV4aXN0cyxcbiAgZ2V0T2JqZWN0RGVlcENvcHksXG4gIGdldE9iamVjdFZhbHVlRnJvbVBhdGgsXG4gIGxvZ01ldGhvZCxcbiAgbWVyZ2VPYmplY3RzLFxuICBzZXRWYWx1ZVRvT2JqZWN0UGF0aFxufSBmcm9tIFwia3dpa2lkLXRvb2xraXRcIjtcbmltcG9ydCBfIGZyb20gXCJsb2Rhc2hcIjtcbmltcG9ydCB7IENvbnZlcnRlciB9IGZyb20gXCIuLi8uLi9yZW5kZXJlci9jb25maWctY29udmVydGVyL2NvbmZpZy1jb252ZXJ0ZXJcIjtcbmltcG9ydCB7XG4gIEVGb3JtRWRpdG9yVHlwZSxcbiAgVEZvcm1FZGl0b3JUeXBlXG59IGZyb20gXCIuL2J1aWxkZXItZm9ybS1lZGl0b3IuZGVmaW5pdGlvbnNcIjtcbmltcG9ydCB7XG4gIGZpbmRNb2RpZmllZEtleXMsXG4gIGdldEZpZWxkSW5kZXgsXG4gIHJlbW92ZUZpZWxkXG59IGZyb20gXCIuL2J1aWxkZXItZm9ybS1lZGl0b3IuaGVscGVyXCI7XG5pbXBvcnQge1xuICBGSUVMRF9DT05GSUcsXG4gIEZJRUxEX1BST1BFUlRJRVNfQ09ORklHLFxuICBGSUVMRF9WQUxJREFUT1JTX0NPTkZJRyxcbiAgT1BUSU9OUyxcbiAgVEFCTEVfQ09MVU1OU1xufSBmcm9tIFwiLi9idWlsZGVyLmZvcm0tZWRpdG9yLmNvbnN0YW50c1wiO1xuaW1wb3J0IHsgS3dpa0lERm9ybUJ1aWxkZXJGb3JtRWRpdG9yU2VydmljZSB9IGZyb20gXCIuL2J1aWxkZXIuZm9ybS1lZGl0b3Iuc2VydmljZVwiO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6IFwia3dpa2lkLWJ1aWxkZXItZm9ybS1lZGl0b3JcIixcbiAgdGVtcGxhdGVVcmw6IFwiLi9idWlsZGVyLWZvcm0tZWRpdG9yLmNvbXBvbmVudC5odG1sXCIsXG4gIHN0eWxlVXJsczogW1wiLi4vc2hhcmVkLnNjc3NcIiwgXCIuL2J1aWxkZXItZm9ybS1lZGl0b3IuY29tcG9uZW50LnNjc3NcIl0sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBhbmltYXRpb25zOiBbXG4gICAgdHJpZ2dlcihcInBhbmVsSW5PdXRcIiwgW1xuICAgICAgdHJhbnNpdGlvbihcIjplbnRlclwiLCBbXG4gICAgICAgIHN0eWxlKHsgdHJhbnNmb3JtOiBcInRyYW5zbGF0ZVkoMTAwJSlcIiB9KSxcbiAgICAgICAgYW5pbWF0ZSgxNTApXG4gICAgICBdKSxcbiAgICAgIHRyYW5zaXRpb24oXCI6bGVhdmVcIiwgW1xuICAgICAgICBhbmltYXRlKDEwMCwgc3R5bGUoeyB0cmFuc2Zvcm06IFwidHJhbnNsYXRlWSgxMDAlKVwiIH0pKVxuICAgICAgXSlcbiAgICBdKVxuICBdXG59KVxuZXhwb3J0IGNsYXNzIEt3aWtJREJ1aWxkZXJGb3JtRWRpdG9yQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMge1xuICAvKipcbiAgICogQ29tcG9uZW50cyBJbnB1dHNcbiAgICovXG4gIEBJbnB1dCgpXG4gIGFjdGl2ZUZvcm1Db25maWc6IGFueSA9IHt9O1xuXG4gIC8qKlxuICAgKiBDb21wb25lbnQgT3V0cHV0cyAoRXZlbnQgRW1pdHRlcnMpXG4gICAqL1xuICBAT3V0cHV0KClcbiAgb25DbGlja1NhdmVBY3RpdmVGb3JtQ29uZmlnOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuXG4gIC8qKlxuICAgKiBDb21wb25lbnQgVmFyaWFibGVzXG4gICAqL1xuICAvLyBGaWVsZCBFZGl0b3IgVmFyaWFibGVzXG4gIHJvd3M6IGFueVtdID0gW107XG4gIGNvbHVtbnM6IGFueVtdID0gVEFCTEVfQ09MVU1OUztcbiAgYWN0aXZlRmllbGRDb25maWdFZGl0aW5nOiBhbnkgPSB7fTtcbiAgc2hvd0ZpZWxkQ29uZmlnVmFsaWRhdG9yc0NvbmZpZ0VkaXRvcjogYm9vbGVhbiA9IGZhbHNlO1xuICBhY3RpdmVGaWVsZENvbmZpZ1ZhbGlkYXRvcnNDb25maWc6IGFueSA9IHt9O1xuICBzaG93RmllbGRDb25maWdQcm9wZXJ0aWVzQ29uZmlnRWRpdG9yOiBib29sZWFuID0gZmFsc2U7XG4gIGFjdGl2ZUZpZWxkQ29uZmlnUHJvcGVydGllc0NvbmZpZzogYW55ID0ge307XG5cbiAgLy8gR2VuZXJhbCBFZGl0b3IgVmFyaWFibGVzXG4gIGVkaXRvclR5cGVPcHRpb25zOiBhbnlbXSA9IFtcbiAgICB7IGtleTogXCJGSUVMRFNcIiwgbGFiZWw6IFwiZmllbGRzXCIgfSxcbiAgICB7IGtleTogXCJOT05fRklFTERTXCIsIGxhYmVsOiBcIm90aGVyIGNvbmZpZ1wiIH1cbiAgXTtcbiAgYWN0aXZlRWRpdG9yVHlwZTogVEZvcm1FZGl0b3JUeXBlID0gRUZvcm1FZGl0b3JUeXBlLkZJRUxEUztcbiAgYWN0aXZlRm9ybUNvbmZpZ19GaWVsZHM6IGFueVtdID0gW107XG4gIGFjdGl2ZUZvcm1Db25maWdfTm9GaWVsZHM6IGFueSA9IHt9O1xuICBzaG93Q29uZmlnUHJldmlldzogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIC8vIEZvcm1zXG4gIGZvcm1Hcm91cDogRm9ybUdyb3VwID0gbmV3IEZvcm1Hcm91cCh7fSk7XG5cbiAgLy8gRm9ybSBTYXZlZCBTdGF0ZVxuICBzYXZlZENvbmZpZzogYm9vbGVhbiA9IGZhbHNlO1xuICBtYXJrU2F2ZWQoKTogdm9pZCB7XG4gICAgdGhpcy5zYXZlZENvbmZpZyA9IHRydWU7XG4gIH1cbiAgbWFya1Vuc2F2ZWQoKTogdm9pZCB7XG4gICAgdGhpcy5zYXZlZENvbmZpZyA9IGZhbHNlO1xuICB9XG5cbiAgLy8gTG9hZGVyXG4gIGxvYWRlcjogYm9vbGVhbiA9IGZhbHNlO1xuICBzdGFydExvYWRlcigpOiB2b2lkIHtcbiAgICB0aGlzLmxvYWRlciA9IHRydWU7XG4gIH1cbiAgc3RvcExvYWRlcigpOiB2b2lkIHtcbiAgICB0aGlzLmxvYWRlciA9IGZhbHNlO1xuICB9XG5cbiAgLy8gRGlhbG9nXG4gIGRpYWxvZ09wZW46IGJvb2xlYW4gPSBmYWxzZTtcbiAgc2hvd0RpYWxvZygpOiB2b2lkIHtcbiAgICB0aGlzLmRpYWxvZ09wZW4gPSB0cnVlO1xuICB9XG4gIGhpZGVEaWFsb2coKTogdm9pZCB7XG4gICAgdGhpcy5kaWFsb2dPcGVuID0gZmFsc2U7XG4gIH1cbiAgZGlhbG9nRXJyb3I6IGJvb2xlYW4gPSBmYWxzZTtcbiAgc2hvd0RpYWxvZ0Vycm9yKCk6IHZvaWQge1xuICAgIHRoaXMuZGlhbG9nRXJyb3IgPSB0cnVlO1xuICB9XG4gIGhpZGVEaWFsb2dFcnJvcigpOiB2b2lkIHtcbiAgICB0aGlzLmRpYWxvZ0Vycm9yID0gZmFsc2U7XG4gIH1cblxuICBjb25zdHJ1Y3RvcihcbiAgICBwdWJsaWMga3dpa2lkQnVpbGRlckZvcm1FZGl0b3JTZXJ2aWNlOiBLd2lrSURGb3JtQnVpbGRlckZvcm1FZGl0b3JTZXJ2aWNlXG4gICkge31cblxuICAvKipcbiAgICogQW5ndWxhciBMaWZlY3ljbGUgTWV0aG9kc1xuICAgKi9cbiAgQGxvZ01ldGhvZFxuICBuZ09uSW5pdCgpOiB2b2lkIHt9XG5cbiAgQGxvZ01ldGhvZFxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgY29uc3QgdmVyaWZ5Q2hhbmdlID0gKGtleTogc3RyaW5nKSA9PiB7XG4gICAgICByZXR1cm4gY2hlY2tPYmplY3RLZXlFeGlzdHMoY2hhbmdlcywga2V5KSAmJiAhY2hhbmdlc1trZXldLmZpcnN0Q2hhbmdlO1xuICAgIH07XG4gICAgaWYgKHZlcmlmeUNoYW5nZShcImFjdGl2ZUZvcm1Db25maWdcIikpIHtcbiAgICAgIGxldCBmb3JtQ29uZmlnID0gbmV3IENvbnZlcnRlcigpLmNvbnZlcnRGb3JtQ29uZmlnKFxuICAgICAgICBjaGFuZ2VzLmFjdGl2ZUZvcm1Db25maWcuY3VycmVudFZhbHVlXG4gICAgICApO1xuICAgICAgZm9ybUNvbmZpZyA9IG5ldyBDb252ZXJ0ZXIoKS51cGRhdGVGb3JtQ29uZmlnUHJvcGVydGllcyhmb3JtQ29uZmlnKTtcbiAgICAgIHRoaXMuYWN0aXZlRm9ybUNvbmZpZyA9IGZvcm1Db25maWc7XG5cbiAgICAgIHRoaXMuaW5pdEZvcm1FZGl0b3IodGhpcy5hY3RpdmVGb3JtQ29uZmlnKTtcbiAgICB9XG4gIH1cblxuICBAbG9nTWV0aG9kXG4gIGluaXRGb3JtRWRpdG9yKGFjdGl2ZUZvcm1Db25maWc6IGFueSk6IHZvaWQge1xuICAgIHRoaXMuc3RhcnRMb2FkZXIoKTtcblxuICAgIHRoaXMuYWN0aXZlRm9ybUNvbmZpZ19GaWVsZHMgPSBnZXRPYmplY3REZWVwQ29weShhY3RpdmVGb3JtQ29uZmlnLmZpZWxkcyk7XG4gICAgdGhpcy5hY3RpdmVGb3JtQ29uZmlnX05vRmllbGRzID0gZ2V0T2JqZWN0RGVlcENvcHkoYWN0aXZlRm9ybUNvbmZpZyk7XG4gICAgZGVsZXRlIHRoaXMuYWN0aXZlRm9ybUNvbmZpZ19Ob0ZpZWxkcy5maWVsZHM7XG5cbiAgICB0aGlzLnJvd3MgPSB0aGlzLmFjdGl2ZUZvcm1Db25maWdfRmllbGRzLm1hcCgoZmllbGQ6IGFueSkgPT4ge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAga2V5OiBmaWVsZC5rZXksXG4gICAgICAgIGxhYmVsOiBmaWVsZC5sYWJlbCxcbiAgICAgICAgdHlwZTogZmllbGQudHlwZSxcbiAgICAgICAgZGlzYWJsZWQ6IGZpZWxkLmRpc2FibGVkLFxuICAgICAgICB2YWxpZGF0b3JzOiB7IC4uLkZJRUxEX1ZBTElEQVRPUlNfQ09ORklHLCAuLi5maWVsZC52YWxpZGF0b3JzIH0sXG4gICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICAuLi5GSUVMRF9QUk9QRVJUSUVTX0NPTkZJR1tmaWVsZC50eXBlXSxcbiAgICAgICAgICAuLi5maWVsZC5wcm9wZXJ0aWVzXG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfSk7XG5cbiAgICB0aGlzLmZvcm1Hcm91cCA9IHRoaXMua3dpa2lkQnVpbGRlckZvcm1FZGl0b3JTZXJ2aWNlLmNyZWF0ZU5lc3RlZEZvcm1Hcm91cChcbiAgICAgIHRoaXMucm93c1xuICAgICk7XG5cbiAgICB0aGlzLnN0b3BMb2FkZXIoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZW5lcmFsIEVkaXRvciBDb21tb24gTWV0aG9kc1xuICAgKi9cbiAgQGxvZ01ldGhvZFxuICBoYW5kbGVPbkNsaWNrQ2hhbmdlQWN0aXZlRWRpdG9yKGVkaXRvclR5cGU6IHN0cmluZykge1xuICAgIHRoaXMuYWN0aXZlRWRpdG9yVHlwZSA9IGVkaXRvclR5cGUgYXMgVEZvcm1FZGl0b3JUeXBlO1xuICB9XG5cbiAgQGxvZ01ldGhvZFxuICBoYW5kbGVPbkNsaWNrU2F2ZUFjdGl2ZUZvcm1Db25maWcoKSB7XG4gICAgY29uc3QgZmllbGRzID0gW107XG5cbiAgICBmb3IgKGxldCBmaWVsZCBvZiBPYmplY3QudmFsdWVzKFxuICAgICAgZ2V0T2JqZWN0RGVlcENvcHkodGhpcy5mb3JtR3JvdXAuZ2V0UmF3VmFsdWUoKSlcbiAgICApKSB7XG4gICAgICBmaWVsZHMucHVzaChcbiAgICAgICAgc2V0VmFsdWVUb09iamVjdFBhdGgoXG4gICAgICAgICAgZmluZE1vZGlmaWVkS2V5cyhGSUVMRF9DT05GSUdbZmllbGRbXCJ0eXBlXCJdXSwgZmllbGQsIFwiXCIpLFxuICAgICAgICAgIFwidHlwZVwiLFxuICAgICAgICAgIGZpZWxkW1widHlwZVwiXVxuICAgICAgICApXG4gICAgICApO1xuICAgIH1cblxuICAgIHRoaXMuYWN0aXZlRm9ybUNvbmZpZyA9IG1lcmdlT2JqZWN0cyhcbiAgICAgIGdldE9iamVjdERlZXBDb3B5KHRoaXMuYWN0aXZlRm9ybUNvbmZpZ19Ob0ZpZWxkcyksXG4gICAgICB7XG4gICAgICAgIGZpZWxkczogZmllbGRzXG4gICAgICB9XG4gICAgKTtcblxuICAgIHRoaXMubWFya1NhdmVkKCk7XG5cbiAgICB0aGlzLm9uQ2xpY2tTYXZlQWN0aXZlRm9ybUNvbmZpZy5lbWl0KHRoaXMuYWN0aXZlRm9ybUNvbmZpZyk7XG4gIH1cblxuICAvKipcbiAgICogRmllbGRzIEVkaXRvciBSZWxhdGVkIE1ldGhvZHNcbiAgICovXG4gIC8qKlxuICAgKiBNZXRob2RzIHRvIGhhbmRsZSBhZGRpdGlvbiBvZiBuZXcgZmllbGRcbiAgICovXG4gIEBsb2dNZXRob2RcbiAgaGFuZGxlT25DbGlja0FkZEZpZWxkKCkge1xuICAgIHRoaXMubWFya1Vuc2F2ZWQoKTtcbiAgICB0aGlzLnN0YXJ0TG9hZGVyKCk7XG5cbiAgICBjb25zdCBuZXdJbmRleCA9IHRoaXMucm93cy5sZW5ndGg7XG4gICAgY29uc3QgZmllbGRDb25maWcgPSBnZXRPYmplY3REZWVwQ29weShcbiAgICAgIG1lcmdlT2JqZWN0cyhGSUVMRF9DT05GSUcudGV4dCwge1xuICAgICAgICBrZXk6IFN0cmluZyhuZXdJbmRleClcbiAgICAgIH0pXG4gICAgKTtcblxuICAgIHRoaXMucm93c1tuZXdJbmRleF0gPSBmaWVsZENvbmZpZztcblxuICAgIGNvbnN0IGZvcm1Db250cm9sID0gbmV3IEZvcm1Db250cm9sKGZpZWxkQ29uZmlnKTtcblxuICAgIHRoaXMuZm9ybUdyb3VwLmFkZENvbnRyb2woU3RyaW5nKG5ld0luZGV4KSwgZm9ybUNvbnRyb2wpO1xuXG4gICAgdGhpcy5zdG9wTG9hZGVyKCk7XG4gIH1cblxuICAvKipcbiAgICogTWV0aG9kcyB0byBoYW5kbGUgZWRpdGluZyBvZiBmaWVsZCBrZXktdmFsdWVzXG4gICAqL1xuICBAbG9nTWV0aG9kXG4gIGhhbmRsZU9uQ2xpY2tFZGl0VmFsaWRhdG9ycyhlOiBhbnkpIHtcbiAgICBjb25zdCBmaWVsZENvbmZpZyA9IHRoaXMuZm9ybUdyb3VwLmdldFJhd1ZhbHVlKClbZS5pbmRleF07XG5cbiAgICBjb25zdCBmaWVsZENvbmZpZ1ZhbGlkYXRvcnMgPSBmaWVsZENvbmZpZ1tcInZhbGlkYXRvcnNcIl07XG5cbiAgICB0aGlzLmFjdGl2ZUZpZWxkQ29uZmlnVmFsaWRhdG9yc0NvbmZpZyA9IG1lcmdlT2JqZWN0cyhcbiAgICAgIEZJRUxEX1ZBTElEQVRPUlNfQ09ORklHLFxuICAgICAgZmllbGRDb25maWdWYWxpZGF0b3JzXG4gICAgKTtcblxuICAgIHRoaXMuc2hvd0ZpZWxkQ29uZmlnVmFsaWRhdG9yc0NvbmZpZ0VkaXRvciA9IHRydWU7XG4gICAgdGhpcy5hY3RpdmVGaWVsZENvbmZpZ0VkaXRpbmcgPSBmaWVsZENvbmZpZztcbiAgfVxuXG4gIEBsb2dNZXRob2RcbiAgaGFuZGxlT25DbGlja0VkaXRQcm9wZXJ0aWVzKGU6IGFueSkge1xuICAgIGNvbnN0IGZpZWxkQ29uZmlnID0gdGhpcy5mb3JtR3JvdXAuZ2V0UmF3VmFsdWUoKVtlLmluZGV4XTtcblxuICAgIGNvbnN0IGZpZWxkQ29uZmlnUHJvcGVydGllcyA9IGZpZWxkQ29uZmlnW1wicHJvcGVydGllc1wiXTtcblxuICAgIHRoaXMuYWN0aXZlRmllbGRDb25maWdQcm9wZXJ0aWVzQ29uZmlnID0gbWVyZ2VPYmplY3RzKFxuICAgICAgRklFTERfUFJPUEVSVElFU19DT05GSUdbZS50eXBlXSxcbiAgICAgIGZpZWxkQ29uZmlnUHJvcGVydGllc1xuICAgICk7XG5cbiAgICB0aGlzLnNob3dGaWVsZENvbmZpZ1Byb3BlcnRpZXNDb25maWdFZGl0b3IgPSB0cnVlO1xuICAgIHRoaXMuYWN0aXZlRmllbGRDb25maWdFZGl0aW5nID0gZmllbGRDb25maWc7XG4gIH1cblxuICAvKipcbiAgICogTWV0aG9kcyB0byBoYW5kbGUgY2hhbmdlIGluIGlucHV0IHZhbHVlcyBmb3IgRmllbGRzIEtleXNcbiAgICovXG4gIEBsb2dNZXRob2RcbiAgaGFuZGxlT25JbnB1dChlOiBhbnkpIHtcbiAgICB0aGlzLm1hcmtVbnNhdmVkKCk7XG5cbiAgICBjb25zdCBmaWVsZENvbmZpZyA9IHRoaXMuZm9ybUdyb3VwLmdldFJhd1ZhbHVlKClbZS5pbmRleF07XG4gICAgY29uc3QgZmluYWxQYXRoID0gZS5wYXRoICE9PSBcIlwiID8gYCR7ZS5wYXRofS4ke2Uua2V5fWAgOiBlLmtleTtcblxuICAgIGlmIChmaW5hbFBhdGguaW5jbHVkZXMoXCJkaXNhYmxlZFwiKSkge1xuICAgICAgZS52YWx1ZS5uZXcgPSBCb29sZWFuKGUudmFsdWUubmV3KTtcbiAgICB9XG5cbiAgICBsZXQgbmV3RmllbGRDb25maWcgPSBzZXRWYWx1ZVRvT2JqZWN0UGF0aChcbiAgICAgIGdldE9iamVjdERlZXBDb3B5KGZpZWxkQ29uZmlnKSxcbiAgICAgIGZpbmFsUGF0aCxcbiAgICAgIGUudmFsdWUubmV3XG4gICAgKTtcblxuICAgIGlmIChmaW5hbFBhdGguaW5jbHVkZXMoXCJ0eXBlXCIpKSB7XG4gICAgICB0aGlzLnN0YXJ0TG9hZGVyKCk7XG5cbiAgICAgIG5ld0ZpZWxkQ29uZmlnID0gc2V0VmFsdWVUb09iamVjdFBhdGgoXG4gICAgICAgIG5ld0ZpZWxkQ29uZmlnLFxuICAgICAgICBcInZhbGlkYXRvcnNcIixcbiAgICAgICAgRklFTERfVkFMSURBVE9SU19DT05GSUdcbiAgICAgICk7XG5cbiAgICAgIG5ld0ZpZWxkQ29uZmlnID0gc2V0VmFsdWVUb09iamVjdFBhdGgoXG4gICAgICAgIG5ld0ZpZWxkQ29uZmlnLFxuICAgICAgICBcInByb3BlcnRpZXNcIixcbiAgICAgICAgRklFTERfUFJPUEVSVElFU19DT05GSUdbbmV3RmllbGRDb25maWcudHlwZV1cbiAgICAgICk7XG5cbiAgICAgIHRoaXMuc3RvcExvYWRlcigpO1xuICAgIH1cblxuICAgIHRoaXMucm93cyA9IHRoaXMucm93cy5tYXAoKHJvdykgPT4ge1xuICAgICAgaWYgKHJvdy5rZXkgPT09IGZpZWxkQ29uZmlnLmtleSkge1xuICAgICAgICByZXR1cm4gZ2V0T2JqZWN0RGVlcENvcHkobmV3RmllbGRDb25maWcpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGdldE9iamVjdERlZXBDb3B5KHJvdyk7XG4gICAgfSk7XG5cbiAgICB0aGlzLmZvcm1Hcm91cC5jb250cm9sc1tlLmluZGV4XS5zZXRWYWx1ZShuZXdGaWVsZENvbmZpZywge1xuICAgICAgZW1pdEV2ZW50OiBmYWxzZVxuICAgIH0pO1xuICB9XG5cbiAgQGxvZ01ldGhvZFxuICBoYW5kbGVPbklucHV0RmllbGRDb25maWdWYWxpZGF0b3JzQ29uZmlnKGU6IGFueSkge1xuICAgIHRoaXMubWFya1Vuc2F2ZWQoKTtcblxuICAgIHRyeSB7XG4gICAgICB0aGlzLmhpZGVEaWFsb2dFcnJvcigpO1xuXG4gICAgICBjb25zdCB2YWxpZGF0b3JDb25maWcgPSBKU09OLnBhcnNlKGUpO1xuXG4gICAgICBjb25zdCByb3dJbmRleCA9IGdldEZpZWxkSW5kZXgoXG4gICAgICAgIHRoaXMucm93cyxcbiAgICAgICAgdGhpcy5hY3RpdmVGaWVsZENvbmZpZ0VkaXRpbmcua2V5XG4gICAgICApO1xuICAgICAgaWYgKHJvd0luZGV4ICE9PSAtMSkge1xuICAgICAgICB0aGlzLnJvd3Nbcm93SW5kZXhdLnZhbGlkYXRvcnMgPSB2YWxpZGF0b3JDb25maWc7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuYWN0aXZlRmllbGRDb25maWdFZGl0aW5nID0gbWVyZ2VPYmplY3RzKFxuICAgICAgICB0aGlzLmFjdGl2ZUZpZWxkQ29uZmlnRWRpdGluZyxcbiAgICAgICAgeyB2YWxpZGF0b3JzOiB2YWxpZGF0b3JDb25maWcgfVxuICAgICAgKTtcblxuICAgICAgdGhpcy5mb3JtR3JvdXAuY29udHJvbHNbcm93SW5kZXhdLnNldFZhbHVlKFxuICAgICAgICB0aGlzLmFjdGl2ZUZpZWxkQ29uZmlnRWRpdGluZyxcbiAgICAgICAge1xuICAgICAgICAgIGVtaXRFdmVudDogZmFsc2VcbiAgICAgICAgfVxuICAgICAgKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIHRoaXMuc2hvd0RpYWxvZ0Vycm9yKCk7XG4gICAgfVxuICB9XG5cbiAgQGxvZ01ldGhvZFxuICBoYW5kbGVPbklucHV0RmllbGRDb25maWdQcm9wZXJ0aWVzQ29uZmlnKGU6IGFueSkge1xuICAgIHRoaXMubWFya1Vuc2F2ZWQoKTtcblxuICAgIHRyeSB7XG4gICAgICB0aGlzLmhpZGVEaWFsb2dFcnJvcigpO1xuXG4gICAgICBjb25zdCBwcm9wZXJ0aWVzQ29uZmlnID0gSlNPTi5wYXJzZShlKTtcblxuICAgICAgY29uc3Qgcm93SW5kZXggPSBnZXRGaWVsZEluZGV4KFxuICAgICAgICB0aGlzLnJvd3MsXG4gICAgICAgIHRoaXMuYWN0aXZlRmllbGRDb25maWdFZGl0aW5nLmtleVxuICAgICAgKTtcbiAgICAgIGlmIChyb3dJbmRleCAhPT0gLTEpIHtcbiAgICAgICAgdGhpcy5yb3dzW3Jvd0luZGV4XS5wcm9wZXJ0aWVzID0gcHJvcGVydGllc0NvbmZpZztcbiAgICAgIH1cblxuICAgICAgdGhpcy5hY3RpdmVGaWVsZENvbmZpZ0VkaXRpbmcgPSBtZXJnZU9iamVjdHMoXG4gICAgICAgIHRoaXMuYWN0aXZlRmllbGRDb25maWdFZGl0aW5nLFxuICAgICAgICB7IHByb3BlcnRpZXM6IHByb3BlcnRpZXNDb25maWcgfVxuICAgICAgKTtcblxuICAgICAgdGhpcy5mb3JtR3JvdXAuY29udHJvbHNbcm93SW5kZXhdLnNldFZhbHVlKFxuICAgICAgICB0aGlzLmFjdGl2ZUZpZWxkQ29uZmlnRWRpdGluZyxcbiAgICAgICAge1xuICAgICAgICAgIGVtaXRFdmVudDogZmFsc2VcbiAgICAgICAgfVxuICAgICAgKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIHRoaXMuc2hvd0RpYWxvZ0Vycm9yKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIE1ldGhvZHMgdG8gaGFuZGxlIGRlbGV0aW9uIG9mIGZpZWxkXG4gICAqL1xuICBAbG9nTWV0aG9kXG4gIGhhbmRsZU9uQ2xpY2tEZWxldGVGaWVsZChlOiBhbnkpIHtcbiAgICB0aGlzLm1hcmtVbnNhdmVkKCk7XG5cbiAgICB0aGlzLnJvd3MgPSByZW1vdmVGaWVsZCh0aGlzLnJvd3MsIGUua2V5KTtcblxuICAgIHRoaXMuZm9ybUdyb3VwID0gdGhpcy5rd2lraWRCdWlsZGVyRm9ybUVkaXRvclNlcnZpY2UuY3JlYXRlTmVzdGVkRm9ybUdyb3VwKFxuICAgICAgdGhpcy5yb3dzXG4gICAgKTtcblxuICAgIHRoaXMuZm9ybUdyb3VwLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBOb24gRmllbGRzIEVkaXRvciBSZWxhdGVkIE1ldGhvZHNcbiAgICovXG4gIEBsb2dNZXRob2RcbiAgaGFuZGxlT25DbGlja1NhdmVBY3RpdmVGb3JtQ29uZmlnX05vRmllbGRzKGU6IGFueSkge1xuICAgIHRoaXMuYWN0aXZlRm9ybUNvbmZpZ19Ob0ZpZWxkcyA9IEpTT04ucGFyc2UoZSk7XG4gIH1cblxuICAvKipcbiAgICogT3RoZXIgQ29tcG9uZW50IE1ldGhvZHNcbiAgICovXG4gIEBsb2dNZXRob2RcbiAgaGFuZGxlT25DbGlja1ByZXZpZXcoKSB7XG4gICAgdGhpcy5zaG93RGlhbG9nKCk7XG4gIH1cblxuICBAbG9nTWV0aG9kXG4gIGNsb3NlSlNPTlBvcHVwKCkge1xuICAgIHRoaXMuaGlkZURpYWxvZygpO1xuICAgIHRoaXMuc2hvd0ZpZWxkQ29uZmlnVmFsaWRhdG9yc0NvbmZpZ0VkaXRvciA9IGZhbHNlO1xuICAgIHRoaXMuc2hvd0ZpZWxkQ29uZmlnUHJvcGVydGllc0NvbmZpZ0VkaXRvciA9IGZhbHNlO1xuICB9XG5cbiAgLyoqXG4gICAqIE90aGVyIEhlbHBlciBNZXRob2RzXG4gICAqL1xuICBAbG9nTWV0aG9kXG4gIGNvcHlUb0NsaXBib2FyZCgpIHtcbiAgICB0aGlzLmt3aWtpZEJ1aWxkZXJGb3JtRWRpdG9yU2VydmljZS5jb3B5VG9DbGlwYm9hcmQodGhpcy5hY3RpdmVGb3JtQ29uZmlnKTtcbiAgfVxuXG4gIEBsb2dNZXRob2RcbiAgZG93bmxvYWRKU09OKCkge1xuICAgIHRoaXMua3dpa2lkQnVpbGRlckZvcm1FZGl0b3JTZXJ2aWNlLmRvd25sb2FkSlNPTih0aGlzLmFjdGl2ZUZvcm1Db25maWcpO1xuICB9XG5cbiAgLyoqXG4gICAqIE1pc2MgTWV0aG9kc1xuICAgKi9cbiAgZ2V0T3B0aW9ucyhpbmRleCwgdmFsdWUsIGtleSwgcGF0aCkge1xuICAgIGlmIChwYXRoLmluY2x1ZGVzKFwicHJvcGVydGllc1wiKSkge1xuICAgICAgY29uc3QgZmllbGRUeXBlID0gdGhpcy5yb3dzW2luZGV4XS50eXBlO1xuXG4gICAgICBjb25zdCBmaW5hbFBhdGggPSBgJHtwYXRofVsnJHtmaWVsZFR5cGV9J10uJHtrZXl9YDtcblxuICAgICAgcmV0dXJuIGdldE9iamVjdFZhbHVlRnJvbVBhdGgoT1BUSU9OUywgZmluYWxQYXRoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgZmluYWxQYXRoID0gcGF0aCAhPT0gXCJcIiA/IGAke3BhdGh9LiR7a2V5fWAgOiBrZXk7XG5cbiAgICAgIHJldHVybiBnZXRPYmplY3RWYWx1ZUZyb21QYXRoKE9QVElPTlMsIGZpbmFsUGF0aCk7XG4gICAgfVxuICB9XG4gIG1lbW9pemVkR2V0T3B0aW9ucyA9IF8ubWVtb2l6ZSh0aGlzLmdldE9wdGlvbnMpO1xuXG4gIGlzT3B0aW9ucyhpbmRleCwgdmFsdWUsIGtleSwgcGF0aCkge1xuICAgIGlmIChwYXRoLmluY2x1ZGVzKFwicHJvcGVydGllc1wiKSkge1xuICAgICAgY29uc3QgZmllbGRUeXBlID0gdGhpcy5yb3dzW2luZGV4XS50eXBlO1xuXG4gICAgICBjb25zdCBmaW5hbFBhdGggPSBgJHtwYXRofVsnJHtmaWVsZFR5cGV9J10uJHtrZXl9YDtcblxuICAgICAgcmV0dXJuIEFycmF5LmlzQXJyYXkoZ2V0T2JqZWN0VmFsdWVGcm9tUGF0aChPUFRJT05TLCBmaW5hbFBhdGgpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgZmluYWxQYXRoID0gcGF0aCAhPT0gXCJcIiA/IGAke3BhdGh9LiR7a2V5fWAgOiBrZXk7XG5cbiAgICAgIHJldHVybiBBcnJheS5pc0FycmF5KGdldE9iamVjdFZhbHVlRnJvbVBhdGgoT1BUSU9OUywgZmluYWxQYXRoKSk7XG4gICAgfVxuICB9XG5cbiAgaXNCb29sZWFuKHZhbHVlOiBhbnkpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSBcImJvb2xlYW5cIjtcbiAgfVxuXG4gIGlzU3RyaW5nKHZhbHVlOiBhbnkpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSBcInN0cmluZ1wiO1xuICB9XG5cbiAgaXNOdW1iZXIodmFsdWU6IGFueSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0eXBlb2YgdmFsdWUgPT09IFwibnVtYmVyXCI7XG4gIH1cblxuICBpc09iamVjdCh2YWx1ZTogYW55KTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gXCJvYmplY3RcIiAmJiB2YWx1ZSAhPT0gbnVsbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBBbmd1bGFyIFNwZWNpZmljIE1ldGhvZHNcbiAgICovXG4gIHRyYWNrQnlGbihpbmRleDogbnVtYmVyLCBpdGVtOiBhbnkpOiBhbnkge1xuICAgIGNvbnN0IGtleSA9IGl0ZW0/LmtleSB8fCBcIlwiO1xuICAgIGNvbnN0IHZhbHVlID0gaXRlbT8udmFsdWUgfHwgXCJcIjtcblxuICAgIGlmICh0eXBlb2YgaXRlbSA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgcmV0dXJuIGAke1N0cmluZyhpbmRleCl9XyR7aXRlbX1fJHtuZXcgRGF0ZSgpLmdldFRpbWUoKX1gO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gYCR7U3RyaW5nKGluZGV4KX1fJHtrZXl9XyR7dmFsdWV9XyR7bmV3IERhdGUoKS5nZXRUaW1lKCl9YDtcbiAgICB9XG4gIH1cbn1cbiIsIjwhLS0gQ29tcG9uZW50IExvYWRlciAtLT5cbjxrd2lrdWktbG9hZGVyXG4gIFtsb2FkZXJUZXh0XT1cIidQbGVhc2Ugd2FpdCdcIlxuICBbc2hvd0xvYWRlcl09XCJsb2FkZXJcIlxuICBbZnVsbHNjcmVlbl09XCJ0cnVlXCJcbj48L2t3aWt1aS1sb2FkZXI+XG5cbjwhLS0gQ29tcG9uZW50IE1haW4gVmlldyAtLT5cbjxkaXYgY2xhc3M9XCJjb250YWluZXJcIj5cbiAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImFjdGl2ZUZvcm1Db25maWc7IGVsc2Ugbm9Gb3JtU2VsZWN0ZWRUZW1wbGF0ZVwiPlxuICAgIDxoZWFkZXI+XG4gICAgICA8ZGl2PlxuICAgICAgICAmbmJzcDtFZGl0aW5nIENvbmZpZyBvZiBGb3JtOiA8Yj57eyBhY3RpdmVGb3JtQ29uZmlnLnByb3BzLnRpdGxlIH19PC9iPlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwiaGVhZGVyLWZvcm0tZWRpdG9yLWJ0bnNcIj5cbiAgICAgICAgPGJ1dHRvbiAoY2xpY2spPVwiaGFuZGxlT25DbGlja1ByZXZpZXcoKVwiPnByZXZpZXc8L2J1dHRvbj5cbiAgICAgICAgPGRpdj5FZGl0b3ImbmJzcDtUeXBlOjwvZGl2PlxuICAgICAgICA8c2VsZWN0IChjaGFuZ2UpPVwiaGFuZGxlT25DbGlja0NoYW5nZUFjdGl2ZUVkaXRvcigkZXZlbnQudGFyZ2V0LnZhbHVlKVwiPlxuICAgICAgICAgIDxvcHRpb25cbiAgICAgICAgICAgICpuZ0Zvcj1cImxldCBvcHRpb24gb2YgZWRpdG9yVHlwZU9wdGlvbnNcIlxuICAgICAgICAgICAgW3ZhbHVlXT1cIm9wdGlvbi5rZXlcIlxuICAgICAgICAgICAgW3NlbGVjdGVkXT1cIm9wdGlvbi5rZXkgPT09IGFjdGl2ZUVkaXRvclR5cGVcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIHt7IG9wdGlvbi5sYWJlbCB9fVxuICAgICAgICAgIDwvb3B0aW9uPlxuICAgICAgICA8L3NlbGVjdD5cbiAgICAgIDwvZGl2PlxuICAgIDwvaGVhZGVyPlxuICAgIDxtYWluPlxuICAgICAgPGRpdlxuICAgICAgICBjbGFzcz1cImZvcm0tY29uZmlnLWZpZWxkc1wiXG4gICAgICAgICpuZ0lmPVwiYWN0aXZlRWRpdG9yVHlwZSA9PSAnRklFTERTJzsgZWxzZSBub25GaWVsZHNFZGl0b3JUZW1wbGF0ZVwiXG4gICAgICA+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJyb3dzLmxlbmd0aCA8PSAwXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cIm5vLWZpZWxkcyBkaXNjbGFpbWVyXCI+XG4gICAgICAgICAgICA8ZGl2PjxwPlBsZWFzZSBhZGQgZmllbGQgdG8gZ2V0IHN0YXJ0ZWQ8L3A+PC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaWNvblwiPjxoMT4mcGx1czs8L2gxPjwvZGl2PlxuICAgICAgICAgICAgPGJ1dHRvbiAoY2xpY2spPVwiaGFuZGxlT25DbGlja0FkZEZpZWxkKClcIj5hZGQgZmllbGQ8L2J1dHRvbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDx0YWJsZT5cbiAgICAgICAgICA8dGhlYWQ+XG4gICAgICAgICAgICA8dHI+XG4gICAgICAgICAgICAgIDx0aCAqbmdGb3I9XCJsZXQgY29sdW1uIG9mIGNvbHVtbnNcIj5cbiAgICAgICAgICAgICAgICB7eyBjb2x1bW4gfX1cbiAgICAgICAgICAgICAgPC90aD5cbiAgICAgICAgICAgIDwvdHI+XG4gICAgICAgICAgPC90aGVhZD5cbiAgICAgICAgICA8dGJvZHk+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICpuZ0Zvcj1cImxldCByb3cgb2Ygcm93czsgbGV0IGkgPSBpbmRleDsgdHJhY2tCeTogdHJhY2tCeUZuXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPHRyPlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGNvbHVtbiBvZiBjb2x1bW5zOyBsZXQgaiA9IGluZGV4XCI+XG4gICAgICAgICAgICAgICAgICA8dGQ+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgW2NsYXNzXT1cImNvbHVtblwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbiAhPT0gJ2RlbGV0ZScgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1uICE9PSAndmFsaWRhdG9ycycgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1uICE9PSAncHJvcGVydGllcycgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1uICE9PSAndHlwZScgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1uICE9PSAnZGlzYWJsZWQnXG4gICAgICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwiZ2V0RmllbGRUZW1wbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwie1xuICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRleDogaSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgZmllbGRWYWx1ZTogcm93W2NvbHVtbl0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkS2V5OiBjb2x1bW4sXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudFBhdGg6ICcnXG4gICAgICAgICAgICAgICAgICAgICAgICB9XCJcbiAgICAgICAgICAgICAgICAgICAgICA+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNvbHVtbiA9PT0gJ3R5cGUnXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cIm9wdGlvbkZpZWxkVGVtcGxhdGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwie1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4OiBpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogY29sdW1uLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiByb3dbY29sdW1uXSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXRoOiAnJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zOiBtZW1vaXplZEdldE9wdGlvbnMoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93W2NvbHVtbl0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2x1bW4sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfVwiXG4gICAgICAgICAgICAgICAgICAgICAgICA+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNvbHVtbiA9PT0gJ2Rpc2FibGVkJ1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJib29sZWFuRmllbGRUZW1wbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXg6IGksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBjb2x1bW4sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHJvd1tjb2x1bW5dLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhdGg6ICcnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnM6IG1lbW9pemVkR2V0T3B0aW9ucyhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3dbY29sdW1uXSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgICB9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgID48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY29sdW1uID09PSAnZGVsZXRlJ1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlT25DbGlja0RlbGV0ZUZpZWxkKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4OiBpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiByb3dbJ2tleSddXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cInJvd3MubGVuZ3RoID09PSAxXCJcbiAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY29sdW1uID09PSAndmFsaWRhdG9ycydcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZU9uQ2xpY2tFZGl0VmFsaWRhdG9ycyh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRleDogaSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogcm93WydrZXknXSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IHJvd1sndHlwZSddXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgZWRpdFxuICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNvbHVtbiA9PT0gJ3Byb3BlcnRpZXMnXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVPbkNsaWNrRWRpdFByb3BlcnRpZXMoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXg6IGksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IHJvd1sna2V5J10sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiByb3dbJ3R5cGUnXVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGVkaXRcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgIDwvdHI+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICA8L3Rib2R5PlxuICAgICAgICA8L3RhYmxlPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiYWRkLWZpZWxkLWJ0bi1jb250YWluZXJcIj4gPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxuZy10ZW1wbGF0ZSAjbm9uRmllbGRzRWRpdG9yVGVtcGxhdGU+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWNvbmZpZy1uby1maWVsZHNcIj5cbiAgICAgICAgICA8cHJlXG4gICAgICAgICAgICBjb250ZW50ZWRpdGFibGU9XCJ0cnVlXCJcbiAgICAgICAgICAgIChrZXl1cCk9XCJcbiAgICAgICAgICAgICAgaGFuZGxlT25DbGlja1NhdmVBY3RpdmVGb3JtQ29uZmlnX05vRmllbGRzKFxuICAgICAgICAgICAgICAgICRldmVudC50YXJnZXQuaW5uZXJIVE1MXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgIFwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAge3sgYWN0aXZlRm9ybUNvbmZpZ19Ob0ZpZWxkcyB8IGpzb24gfX1cbiAgICAgICAgICA8L3ByZT5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L25nLXRlbXBsYXRlPlxuICAgIDwvbWFpbj5cbiAgICA8Zm9vdGVyPlxuICAgICAgPGJ1dHRvblxuICAgICAgICAqbmdJZj1cInJvd3MubGVuZ3RoID4gMFwiXG4gICAgICAgIChjbGljayk9XCJoYW5kbGVPbkNsaWNrQWRkRmllbGQoKVwiXG4gICAgICA+XG4gICAgICAgIGFkZCBmaWVsZFxuICAgICAgPC9idXR0b24+XG4gICAgICA8YnV0dG9uXG4gICAgICAgIChjbGljayk9XCJoYW5kbGVPbkNsaWNrU2F2ZUFjdGl2ZUZvcm1Db25maWcoKVwiXG4gICAgICAgIFtjbGFzcy5zZWNvbmRhcnldPVwiIXNhdmVkQ29uZmlnXCJcbiAgICAgID5cbiAgICAgICAge3sgc2F2ZWRDb25maWcgPyBcInNhdmVkXCIgOiBcInVuc2F2ZWRcIiB9fVxuICAgICAgPC9idXR0b24+XG4gICAgPC9mb290ZXI+XG4gIDwvbmctY29udGFpbmVyPlxuICA8bmctdGVtcGxhdGUgI25vRm9ybVNlbGVjdGVkVGVtcGxhdGU+XG4gICAgPGRpdiBjbGFzcz1cIm5vLWZvcm0tc2VsZWN0ZWQgZGlzY2xhaW1lclwiPlxuICAgICAgPGRpdiBjbGFzcz1cImljb25cIj48aDE+JiMxMDE1MDs8L2gxPjwvZGl2PlxuICAgICAgPGRpdj48cD5QbGVhc2Ugc2VsZWN0IGEgZm9ybSB0byBlZGl0IGl0J3MgZmllbGRzPC9wPjwvZGl2PlxuICAgIDwvZGl2PlxuICA8L25nLXRlbXBsYXRlPlxuPC9kaXY+XG5cbjwhLS0gQ29tcG9uZW50IERpYWxvZyAtLT5cbjxkaXZcbiAgY2xhc3M9XCJtb2RhbFwiXG4gIFtjbGFzcy5lcnJvcl09XCJkaWFsb2dFcnJvciA9PT0gdHJ1ZVwiXG4gICpuZ0lmPVwiXG4gICAgZGlhbG9nT3BlbiB8fFxuICAgIHNob3dGaWVsZENvbmZpZ1ZhbGlkYXRvcnNDb25maWdFZGl0b3IgfHxcbiAgICBzaG93RmllbGRDb25maWdQcm9wZXJ0aWVzQ29uZmlnRWRpdG9yXG4gIFwiXG4gIFtAcGFuZWxJbk91dF1cbj5cbiAgPGRpdiBjbGFzcz1cIm1vZGFsLWJveFwiPlxuICAgIDxkaXZcbiAgICAgIGNsYXNzPVwibW9kYWwtY29udGVudFwiXG4gICAgICAqbmdJZj1cImRpYWxvZ09wZW5cIlxuICAgID5cbiAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1oZWFkaW5nXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC10aXRsZVwiPlxuICAgICAgICAgIHt7IGFjdGl2ZUZvcm1Db25maWcucHJvcHMudGl0bGUgfX0ncyBDb25maWcgUHJldmlld1xuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWFjdGlvbnNcIj5cbiAgICAgICAgICA8YnV0dG9uIChjbGljayk9XCJkb3dubG9hZEpTT04oKVwiPmRvd25sb2FkPC9idXR0b24+XG4gICAgICAgICAgPGJ1dHRvbiAoY2xpY2spPVwiY29weVRvQ2xpcGJvYXJkKClcIj5jb3B5PC9idXR0b24+XG4gICAgICAgICAgPGJ1dHRvbiAoY2xpY2spPVwiY2xvc2VKU09OUG9wdXAoKVwiPmNsb3NlPC9idXR0b24+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtYm9keVwiPlxuICAgICAgICA8cHJlPlxuICAgICAgICAgIDxjb2RlPnt7IGFjdGl2ZUZvcm1Db25maWcgfCBqc29uIH19PC9jb2RlPlxuICAgICAgICA8L3ByZT5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDxkaXZcbiAgICAgIGNsYXNzPVwibW9kYWwtY29udGVudFwiXG4gICAgICAqbmdJZj1cInNob3dGaWVsZENvbmZpZ1ZhbGlkYXRvcnNDb25maWdFZGl0b3JcIlxuICAgID5cbiAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1oZWFkaW5nXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC10aXRsZVwiPlxuICAgICAgICAgIHt7IGFjdGl2ZUZvcm1Db25maWcucHJvcHMudGl0bGUgfX0ncyBWYWxpZGF0b3IgQ29uZmlnIEVkaXRvclxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWFjdGlvbnNcIj5cbiAgICAgICAgICA8YnV0dG9uIChjbGljayk9XCJjbG9zZUpTT05Qb3B1cCgpXCI+Y2xvc2U8L2J1dHRvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1ib2R5XCI+XG4gICAgICAgIDxwcmVcbiAgICAgICAgICBjb250ZW50ZWRpdGFibGU9XCJ0cnVlXCJcbiAgICAgICAgICAoa2V5dXApPVwiXG4gICAgICAgICAgICBoYW5kbGVPbklucHV0RmllbGRDb25maWdWYWxpZGF0b3JzQ29uZmlnKCRldmVudC50YXJnZXQuaW5uZXJIVE1MKVxuICAgICAgICAgIFwiXG4gICAgICAgID5cbiAgICAgICAgICB7eyB0aGlzLmFjdGl2ZUZpZWxkQ29uZmlnVmFsaWRhdG9yc0NvbmZpZyB8IGpzb24gfX1cbiAgICAgICAgPC9wcmU+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2XG4gICAgICBjbGFzcz1cIm1vZGFsLWNvbnRlbnRcIlxuICAgICAgKm5nSWY9XCJzaG93RmllbGRDb25maWdQcm9wZXJ0aWVzQ29uZmlnRWRpdG9yXCJcbiAgICA+XG4gICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtaGVhZGluZ1wiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtdGl0bGVcIj5cbiAgICAgICAgICB7eyBhY3RpdmVGb3JtQ29uZmlnLnByb3BzLnRpdGxlIH19J3MgUHJvcGVydGllcyBDb25maWcgRWRpdG9yXG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtYWN0aW9uc1wiPlxuICAgICAgICAgIDxidXR0b24gKGNsaWNrKT1cImNsb3NlSlNPTlBvcHVwKClcIj5jbG9zZTwvYnV0dG9uPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWJvZHlcIj5cbiAgICAgICAgPHByZVxuICAgICAgICAgIGNvbnRlbnRlZGl0YWJsZT1cInRydWVcIlxuICAgICAgICAgIChrZXl1cCk9XCJcbiAgICAgICAgICAgIGhhbmRsZU9uSW5wdXRGaWVsZENvbmZpZ1Byb3BlcnRpZXNDb25maWcoJGV2ZW50LnRhcmdldC5pbm5lckhUTUwpXG4gICAgICAgICAgXCJcbiAgICAgICAgPlxuICAgICAgICAgIHt7IHRoaXMuYWN0aXZlRmllbGRDb25maWdQcm9wZXJ0aWVzQ29uZmlnIHwganNvbiB9fVxuICAgICAgICA8L3ByZT5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvZGl2PlxuPCEtLSBFTkQgLS0+XG5cbjwhLS0gVGVtcGxhdGUgZm9yIHJlbmRlcmluZyBkaWZmZXJlbnQgZmllbGQgdHlwZXMgLS0+XG48IS0tIEdlbmVyYWwgRmllbGQgVGVtcGxhdGUgLS0+XG48bmctdGVtcGxhdGVcbiAgI2dldEZpZWxkVGVtcGxhdGVcbiAgbGV0LWluZGV4PVwiaW5kZXhcIlxuICBsZXQtdmFsdWU9XCJmaWVsZFZhbHVlXCJcbiAgbGV0LWtleT1cImZpZWxkS2V5XCJcbiAgbGV0LXBhdGg9XCJwYXJlbnRQYXRoXCJcbj5cbiAgPGRpdj5cbiAgICA8bmctY29udGFpbmVyXG4gICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJcbiAgICAgICAgaXNPYmplY3QodmFsdWUpID8gb2JqZWN0RmllbGRUZW1wbGF0ZSA6IG5vdE9iamVjdEZpZWxkVGVtcGxhdGVcbiAgICAgIFwiXG4gICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwie1xuICAgICAgICBpbmRleDogaW5kZXgsXG4gICAgICAgIGZpZWxkVmFsdWU6IHZhbHVlLFxuICAgICAgICBmaWVsZEtleToga2V5LFxuICAgICAgICBwYXJlbnRQYXRoOiBwYXRoXG4gICAgICB9XCJcbiAgICA+XG4gICAgPC9uZy1jb250YWluZXI+XG4gIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cblxuPCEtLSBPYmplY3QgVHlwZSBGaWVsZCBUZW1wbGF0ZSAtLT5cbjxuZy10ZW1wbGF0ZVxuICAjb2JqZWN0RmllbGRUZW1wbGF0ZVxuICBsZXQtaW5kZXg9XCJpbmRleFwiXG4gIGxldC12YWx1ZT1cImZpZWxkVmFsdWVcIlxuICBsZXQta2V5PVwiZmllbGRLZXlcIlxuICBsZXQtcGF0aD1cInBhcmVudFBhdGhcIlxuPlxuICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBpdGVtIG9mIHZhbHVlIHwga2V5dmFsdWVcIj5cbiAgICA8bmctY29udGFpbmVyXG4gICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJnZXRGaWVsZFRlbXBsYXRlXCJcbiAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7XG4gICAgICAgIGluZGV4OiBpbmRleCxcbiAgICAgICAgZmllbGRWYWx1ZTogaXRlbS52YWx1ZSxcbiAgICAgICAgZmllbGRLZXk6IGl0ZW0ua2V5LFxuICAgICAgICBwYXJlbnRQYXRoOiBwYXRoID09PSAnJyA/IGtleSA6IHBhdGggKyAnLicgKyBrZXlcbiAgICAgIH1cIlxuICAgID5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgPC9uZy1jb250YWluZXI+XG48L25nLXRlbXBsYXRlPlxuXG48IS0tIE5vbiBPYmplY3QgVHlwZSBGaWVsZCBUZW1wbGF0ZSAtLT5cbjxuZy10ZW1wbGF0ZVxuICAjbm90T2JqZWN0RmllbGRUZW1wbGF0ZVxuICBsZXQtaW5kZXg9XCJpbmRleFwiXG4gIGxldC12YWx1ZT1cImZpZWxkVmFsdWVcIlxuICBsZXQta2V5PVwiZmllbGRLZXlcIlxuICBsZXQtcGF0aD1cInBhcmVudFBhdGhcIlxuPlxuICA8ZGl2PlxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJpc09wdGlvbnMoaW5kZXgsIHZhbHVlLCBrZXksIHBhdGgpXCI+XG4gICAgICA8bmctY29udGFpbmVyXG4gICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cIm9wdGlvbkZpZWxkVGVtcGxhdGVcIlxuICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwie1xuICAgICAgICAgIGluZGV4OiBpbmRleCxcbiAgICAgICAgICBrZXk6IGtleSxcbiAgICAgICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICAgICAgcGF0aDogcGF0aCxcbiAgICAgICAgICBvcHRpb25zOiBtZW1vaXplZEdldE9wdGlvbnMoaW5kZXgsIHZhbHVlLCBrZXksIHBhdGgpXG4gICAgICAgIH1cIlxuICAgICAgPjwvbmctY29udGFpbmVyPlxuICAgIDwvbmctY29udGFpbmVyPlxuICAgIDxuZy1jb250YWluZXJcbiAgICAgICpuZ0lmPVwiIWlzT3B0aW9ucyhpbmRleCwgdmFsdWUsIGtleSwgcGF0aCkgJiYgaXNTdHJpbmcodmFsdWUpXCJcbiAgICA+XG4gICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiXG4gICAgICAgICAgdGV4dEZpZWxkVGVtcGxhdGU7XG4gICAgICAgICAgY29udGV4dDogeyBpbmRleDogaW5kZXgsIGtleToga2V5LCB2YWx1ZTogdmFsdWUsIHBhdGg6IHBhdGggfVxuICAgICAgICBcIlxuICAgICAgPjwvbmctY29udGFpbmVyPlxuICAgIDwvbmctY29udGFpbmVyPlxuICAgIDxuZy1jb250YWluZXJcbiAgICAgICpuZ0lmPVwiIWlzT3B0aW9ucyhpbmRleCwgdmFsdWUsIGtleSwgcGF0aCkgJiYgaXNOdW1iZXIodmFsdWUpXCJcbiAgICA+XG4gICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiXG4gICAgICAgICAgbnVtYmVyRmllbGRUZW1wbGF0ZTtcbiAgICAgICAgICBjb250ZXh0OiB7IGluZGV4OiBpbmRleCwga2V5OiBrZXksIHZhbHVlOiB2YWx1ZSwgcGF0aDogcGF0aCB9XG4gICAgICAgIFwiXG4gICAgICA+PC9uZy1jb250YWluZXI+XG4gICAgPC9uZy1jb250YWluZXI+XG4gIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cblxuPCEtLSBOb24gT2JqZWN0IFR5cGUgRmllbGQgOjogT3B0aW9ucyBGaWVsZCBUZW1wbGF0ZSAtLT5cbjxuZy10ZW1wbGF0ZVxuICAjb3B0aW9uRmllbGRUZW1wbGF0ZVxuICBsZXQtaW5kZXg9XCJpbmRleFwiXG4gIGxldC1rZXk9XCJrZXlcIlxuICBsZXQtdmFsdWU9XCJ2YWx1ZVwiXG4gIGxldC1wYXRoPVwicGF0aFwiXG4gIGxldC1vcHRpb25zPVwib3B0aW9uc1wiXG4+XG4gIDxkaXYgY2xhc3M9XCJmaWVsZC1jb250YWluZXIgb3B0aW9uc1wiPlxuICAgIDxzZWxlY3RcbiAgICAgIChjaGFuZ2UpPVwiaGFuZGxlT25JbnB1dCh7IGluZGV4LCBrZXksIHZhbHVlOiB7IHByZXZpb3VzOiB2YWx1ZSwgbmV3OiAkZXZlbnQudGFyZ2V0LnZhbHVlIH0sIHBhdGggfSlcIlxuICAgID5cbiAgICAgIDxvcHRpb25cbiAgICAgICAgKm5nRm9yPVwibGV0IG9wdGlvbiBvZiBvcHRpb25zXCJcbiAgICAgICAgW3ZhbHVlXT1cIm9wdGlvblwiXG4gICAgICAgIFtzZWxlY3RlZF09XCJvcHRpb24gPT09IHZhbHVlXCJcbiAgICAgICAgPnt7IG9wdGlvbiB9fTwvb3B0aW9uXG4gICAgICA+XG4gICAgPC9zZWxlY3Q+XG4gIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cblxuPCEtLSBOb24gT2JqZWN0IFR5cGUgRmllbGQgOjogQm9vbGVhbiBGaWVsZCBUZW1wbGF0ZSAtLT5cbjxuZy10ZW1wbGF0ZVxuICAjYm9vbGVhbkZpZWxkVGVtcGxhdGVcbiAgbGV0LWluZGV4PVwiaW5kZXhcIlxuICBsZXQta2V5PVwia2V5XCJcbiAgbGV0LXZhbHVlPVwidmFsdWVcIlxuICBsZXQtcGF0aD1cInBhdGhcIlxuPlxuICA8ZGl2IGNsYXNzPVwiZmllbGQtY29udGFpbmVyIGNoZWNrYm94XCI+XG4gICAgPGlucHV0XG4gICAgICB0eXBlPVwiY2hlY2tib3hcIlxuICAgICAgW2NoZWNrZWRdPVwidmFsdWVcIlxuICAgICAgKGNoYW5nZSk9XCJoYW5kbGVPbklucHV0KHsgaW5kZXgsIGtleSwgdmFsdWU6IHsgcHJldmlvdXM6IHZhbHVlLCBuZXc6ICRldmVudC50YXJnZXQuY2hlY2tlZCB9LCBwYXRoIH0pXCJcbiAgICAvPlxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG5cbjwhLS0gTm9uIE9iamVjdCBUeXBlIEZpZWxkIDo6IFRleHQgRmllbGQgVGVtcGxhdGUgLS0+XG48bmctdGVtcGxhdGVcbiAgI3RleHRGaWVsZFRlbXBsYXRlXG4gIGxldC1pbmRleD1cImluZGV4XCJcbiAgbGV0LWtleT1cImtleVwiXG4gIGxldC12YWx1ZT1cInZhbHVlXCJcbiAgbGV0LXBhdGg9XCJwYXRoXCJcbj5cbiAgPGRpdiBjbGFzcz1cImZpZWxkLWNvbnRhaW5lciB0ZXh0XCI+XG4gICAgPGlucHV0XG4gICAgICBwbGFjZWhvbGRlcj1cIkVudGVyIHt7IGtleSB9fVwiXG4gICAgICB0eXBlPVwidGV4dFwiXG4gICAgICBbdmFsdWVdPVwidmFsdWVcIlxuICAgICAgKGJsdXIpPVwiaGFuZGxlT25JbnB1dCh7IGluZGV4LCBrZXksIHZhbHVlOiB7IHByZXZpb3VzOiB2YWx1ZSwgbmV3OiAkZXZlbnQudGFyZ2V0LnZhbHVlIH0sIHBhdGggfSlcIlxuICAgIC8+XG4gIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cblxuPCEtLSBOb24gT2JqZWN0IFR5cGUgRmllbGQgOjogTnVtYmVyIEZpZWxkIFRlbXBsYXRlIC0tPlxuPG5nLXRlbXBsYXRlXG4gICNudW1iZXJGaWVsZFRlbXBsYXRlXG4gIGxldC1pbmRleD1cImluZGV4XCJcbiAgbGV0LWtleT1cImtleVwiXG4gIGxldC12YWx1ZT1cInZhbHVlXCJcbiAgbGV0LXBhdGg9XCJwYXRoXCJcbj5cbiAgPGRpdiBjbGFzcz1cImZpZWxkLWNvbnRhaW5lciBudW1iZXJcIj5cbiAgICA8aW5wdXRcbiAgICAgIHBsYWNlaG9sZGVyPVwiRW50ZXIge3sga2V5IH19XCJcbiAgICAgIHR5cGU9XCJudW1iZXJcIlxuICAgICAgW3ZhbHVlXT1cInZhbHVlXCJcbiAgICAgIChibHVyKT1cImhhbmRsZU9uSW5wdXQoeyBpbmRleCwga2V5LCB2YWx1ZTogeyBwcmV2aW91czogdmFsdWUsIG5ldzogJGV2ZW50LnRhcmdldC52YWx1ZSB9LCBwYXRoIH0pXCJcbiAgICAvPlxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG48IS0tIEVORCAtLT5cbiJdfQ==
403
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnVpbGRlci1mb3JtLWVkaXRvci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9rd2lraWQtZm9ybXMvc3JjL2xpYi9idWlsZGVyL2J1aWxkZXItZm9ybS1lZGl0b3IvYnVpbGRlci1mb3JtLWVkaXRvci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9rd2lraWQtZm9ybXMvc3JjL2xpYi9idWlsZGVyL2J1aWxkZXItZm9ybS1lZGl0b3IvYnVpbGRlci1mb3JtLWVkaXRvci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsVUFBVSxFQUFFLE9BQU8sRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQzFFLE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsU0FBUyxFQUNULFlBQVksRUFDWixLQUFLLEVBR0wsTUFBTSxFQUVQLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxXQUFXLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDeEQsT0FBTyxFQUNMLG9CQUFvQixFQUNwQixpQkFBaUIsRUFDakIsc0JBQXNCLEVBQ3RCLFNBQVMsRUFDVCxZQUFZLEVBQ1osb0JBQW9CLEVBQ3JCLE1BQU0sZ0JBQWdCLENBQUM7QUFDeEIsT0FBTyxDQUFDLE1BQU0sUUFBUSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxrREFBa0QsQ0FBQztBQUM3RSxPQUFPLEVBQ0wsZUFBZSxFQUVoQixNQUFNLG1DQUFtQyxDQUFDO0FBQzNDLE9BQU8sRUFDTCxnQkFBZ0IsRUFDaEIsYUFBYSxFQUNiLFdBQVcsRUFDWixNQUFNLDhCQUE4QixDQUFDO0FBQ3RDLE9BQU8sRUFDTCxZQUFZLEVBQ1osdUJBQXVCLEVBQ3ZCLHVCQUF1QixFQUN2QixPQUFPLEVBQ1AsYUFBYSxFQUNk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U0FBUztvRUFHVDs0RkFyWVUsZ0NBQWdDO2tCQWpCNUMsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUsNEJBQTRCO29CQUN0QyxXQUFXLEVBQUUsc0NBQXNDO29CQUNuRCxTQUFTLEVBQUUsQ0FBQyxnQkFBZ0IsRUFBRSxzQ0FBc0MsQ0FBQztvQkFDckUsZUFBZSxFQUFFLHVCQUF1QixDQUFDLE1BQU07b0JBQy9DLFVBQVUsRUFBRTt3QkFDVixPQUFPLENBQUMsWUFBWSxFQUFFOzRCQUNwQixVQUFVLENBQUMsUUFBUSxFQUFFO2dDQUNuQixLQUFLLENBQUMsRUFBRSxTQUFTLEVBQUUsa0JBQWtCLEVBQUUsQ0FBQztnQ0FDeEMsT0FBTyxDQUFDLEdBQUcsQ0FBQzs2QkFDYixDQUFDOzRCQUNGLFVBQVUsQ0FBQyxRQUFRLEVBQUU7Z0NBQ25CLE9BQU8sQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLEVBQUUsU0FBUyxFQUFFLGtCQUFrQixFQUFFLENBQUMsQ0FBQzs2QkFDdkQsQ0FBQzt5QkFDSCxDQUFDO3FCQUNIO2lCQUNGO3lIQU1DLGdCQUFnQjtzQkFEZixLQUFLO2dCQU9OLDJCQUEyQjtzQkFEMUIsTUFBTTtnQkFzRVAsUUFBUSxNQUdSLFdBQVcsTUFnQlgsY0FBYyxNQWdDZCwrQkFBK0IsTUFLL0IsaUNBQWlDLE1Ba0NqQyxxQkFBcUIsTUF3QnJCLDJCQUEyQixNQWUzQiwyQkFBMkIsTUFrQjNCLGFBQWEsTUErQ2Isd0NBQXdDLE1BaUN4Qyx3Q0FBd0MsTUFvQ3hDLHdCQUF3QixNQWdCeEIsMENBQTBDLE1BUTFDLG9CQUFvQixNQUtwQixjQUFjLE1BVWQsZUFBZSxNQUtmLFlBQVkiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBhbmltYXRlLCBzdHlsZSwgdHJhbnNpdGlvbiwgdHJpZ2dlciB9IGZyb20gXCJAYW5ndWxhci9hbmltYXRpb25zXCI7XG5pbXBvcnQge1xuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ29tcG9uZW50LFxuICBFdmVudEVtaXR0ZXIsXG4gIElucHV0LFxuICBPbkNoYW5nZXMsXG4gIE9uSW5pdCxcbiAgT3V0cHV0LFxuICBTaW1wbGVDaGFuZ2VzXG59IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5pbXBvcnQgeyBGb3JtQ29udHJvbCwgRm9ybUdyb3VwIH0gZnJvbSBcIkBhbmd1bGFyL2Zvcm1zXCI7XG5pbXBvcnQge1xuICBjaGVja09iamVjdEtleUV4aXN0cyxcbiAgZ2V0T2JqZWN0RGVlcENvcHksXG4gIGdldE9iamVjdFZhbHVlRnJvbVBhdGgsXG4gIGxvZ01ldGhvZCxcbiAgbWVyZ2VPYmplY3RzLFxuICBzZXRWYWx1ZVRvT2JqZWN0UGF0aFxufSBmcm9tIFwia3dpa2lkLXRvb2xraXRcIjtcbmltcG9ydCBfIGZyb20gXCJsb2Rhc2hcIjtcbmltcG9ydCB7IENvbnZlcnRlciB9IGZyb20gXCIuLi8uLi9yZW5kZXJlci9jb25maWctY29udmVydGVyL2NvbmZpZy1jb252ZXJ0ZXJcIjtcbmltcG9ydCB7XG4gIEVGb3JtRWRpdG9yVHlwZSxcbiAgVEZvcm1FZGl0b3JUeXBlXG59IGZyb20gXCIuL2J1aWxkZXItZm9ybS1lZGl0b3IuZGVmaW5pdGlvbnNcIjtcbmltcG9ydCB7XG4gIGZpbmRNb2RpZmllZEtleXMsXG4gIGdldEZpZWxkSW5kZXgsXG4gIHJlbW92ZUZpZWxkXG59IGZyb20gXCIuL2J1aWxkZXItZm9ybS1lZGl0b3IuaGVscGVyXCI7XG5pbXBvcnQge1xuICBGSUVMRF9DT05GSUcsXG4gIEZJRUxEX1BST1BFUlRJRVNfQ09ORklHLFxuICBGSUVMRF9WQUxJREFUT1JTX0NPTkZJRyxcbiAgT1BUSU9OUyxcbiAgVEFCTEVfQ09MVU1OU1xufSBmcm9tIFwiLi9idWlsZGVyLmZvcm0tZWRpdG9yLmNvbnN0YW50c1wiO1xuaW1wb3J0IHsgS3dpa0lERm9ybUJ1aWxkZXJGb3JtRWRpdG9yU2VydmljZSB9IGZyb20gXCIuL2J1aWxkZXIuZm9ybS1lZGl0b3Iuc2VydmljZVwiO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6IFwia3dpa2lkLWJ1aWxkZXItZm9ybS1lZGl0b3JcIixcbiAgdGVtcGxhdGVVcmw6IFwiLi9idWlsZGVyLWZvcm0tZWRpdG9yLmNvbXBvbmVudC5odG1sXCIsXG4gIHN0eWxlVXJsczogW1wiLi4vc2hhcmVkLnNjc3NcIiwgXCIuL2J1aWxkZXItZm9ybS1lZGl0b3IuY29tcG9uZW50LnNjc3NcIl0sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBhbmltYXRpb25zOiBbXG4gICAgdHJpZ2dlcihcInBhbmVsSW5PdXRcIiwgW1xuICAgICAgdHJhbnNpdGlvbihcIjplbnRlclwiLCBbXG4gICAgICAgIHN0eWxlKHsgdHJhbnNmb3JtOiBcInRyYW5zbGF0ZVkoMTAwJSlcIiB9KSxcbiAgICAgICAgYW5pbWF0ZSgxNTApXG4gICAgICBdKSxcbiAgICAgIHRyYW5zaXRpb24oXCI6bGVhdmVcIiwgW1xuICAgICAgICBhbmltYXRlKDEwMCwgc3R5bGUoeyB0cmFuc2Zvcm06IFwidHJhbnNsYXRlWSgxMDAlKVwiIH0pKVxuICAgICAgXSlcbiAgICBdKVxuICBdXG59KVxuZXhwb3J0IGNsYXNzIEt3aWtJREJ1aWxkZXJGb3JtRWRpdG9yQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMge1xuICAvKipcbiAgICogQ29tcG9uZW50cyBJbnB1dHNcbiAgICovXG4gIEBJbnB1dCgpXG4gIGFjdGl2ZUZvcm1Db25maWc6IGFueSA9IHt9O1xuXG4gIC8qKlxuICAgKiBDb21wb25lbnQgT3V0cHV0cyAoRXZlbnQgRW1pdHRlcnMpXG4gICAqL1xuICBAT3V0cHV0KClcbiAgb25DbGlja1NhdmVBY3RpdmVGb3JtQ29uZmlnOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuXG4gIC8qKlxuICAgKiBDb21wb25lbnQgVmFyaWFibGVzXG4gICAqL1xuICAvLyBGaWVsZCBFZGl0b3IgVmFyaWFibGVzXG4gIHJvd3M6IGFueVtdID0gW107XG4gIGNvbHVtbnM6IGFueVtdID0gVEFCTEVfQ09MVU1OUztcbiAgYWN0aXZlRmllbGRDb25maWdFZGl0aW5nOiBhbnkgPSB7fTtcbiAgc2hvd0ZpZWxkQ29uZmlnVmFsaWRhdG9yc0NvbmZpZ0VkaXRvcjogYm9vbGVhbiA9IGZhbHNlO1xuICBhY3RpdmVGaWVsZENvbmZpZ1ZhbGlkYXRvcnNDb25maWc6IGFueSA9IHt9O1xuICBzaG93RmllbGRDb25maWdQcm9wZXJ0aWVzQ29uZmlnRWRpdG9yOiBib29sZWFuID0gZmFsc2U7XG4gIGFjdGl2ZUZpZWxkQ29uZmlnUHJvcGVydGllc0NvbmZpZzogYW55ID0ge307XG5cbiAgLy8gR2VuZXJhbCBFZGl0b3IgVmFyaWFibGVzXG4gIGVkaXRvclR5cGVPcHRpb25zOiBhbnlbXSA9IFtcbiAgICB7IGtleTogXCJGSUVMRFNcIiwgbGFiZWw6IFwiZmllbGRzXCIgfSxcbiAgICB7IGtleTogXCJOT05fRklFTERTXCIsIGxhYmVsOiBcIm90aGVyIGNvbmZpZ1wiIH1cbiAgXTtcbiAgYWN0aXZlRWRpdG9yVHlwZTogVEZvcm1FZGl0b3JUeXBlID0gRUZvcm1FZGl0b3JUeXBlLkZJRUxEUztcbiAgYWN0aXZlRm9ybUNvbmZpZ19GaWVsZHM6IGFueVtdID0gW107XG4gIGFjdGl2ZUZvcm1Db25maWdfTm9GaWVsZHM6IGFueSA9IHt9O1xuICBzaG93Q29uZmlnUHJldmlldzogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIC8vIEZvcm1zXG4gIGZvcm1Hcm91cDogRm9ybUdyb3VwID0gbmV3IEZvcm1Hcm91cCh7fSk7XG5cbiAgLy8gRm9ybSBTYXZlZCBTdGF0ZVxuICBzYXZlZENvbmZpZzogYm9vbGVhbiA9IGZhbHNlO1xuICBtYXJrU2F2ZWQoKTogdm9pZCB7XG4gICAgdGhpcy5zYXZlZENvbmZpZyA9IHRydWU7XG4gIH1cbiAgbWFya1Vuc2F2ZWQoKTogdm9pZCB7XG4gICAgdGhpcy5zYXZlZENvbmZpZyA9IGZhbHNlO1xuICB9XG5cbiAgLy8gTG9hZGVyXG4gIGxvYWRlcjogYm9vbGVhbiA9IGZhbHNlO1xuICBzdGFydExvYWRlcigpOiB2b2lkIHtcbiAgICB0aGlzLmxvYWRlciA9IHRydWU7XG4gIH1cbiAgc3RvcExvYWRlcigpOiB2b2lkIHtcbiAgICB0aGlzLmxvYWRlciA9IGZhbHNlO1xuICB9XG5cbiAgLy8gRGlhbG9nXG4gIGRpYWxvZ09wZW46IGJvb2xlYW4gPSBmYWxzZTtcbiAgc2hvd0RpYWxvZygpOiB2b2lkIHtcbiAgICB0aGlzLmRpYWxvZ09wZW4gPSB0cnVlO1xuICB9XG4gIGhpZGVEaWFsb2coKTogdm9pZCB7XG4gICAgdGhpcy5kaWFsb2dPcGVuID0gZmFsc2U7XG4gIH1cbiAgZGlhbG9nRXJyb3I6IGJvb2xlYW4gPSBmYWxzZTtcbiAgc2hvd0RpYWxvZ0Vycm9yKCk6IHZvaWQge1xuICAgIHRoaXMuZGlhbG9nRXJyb3IgPSB0cnVlO1xuICB9XG4gIGhpZGVEaWFsb2dFcnJvcigpOiB2b2lkIHtcbiAgICB0aGlzLmRpYWxvZ0Vycm9yID0gZmFsc2U7XG4gIH1cblxuICBjb25zdHJ1Y3RvcihcbiAgICBwdWJsaWMga3dpa2lkQnVpbGRlckZvcm1FZGl0b3JTZXJ2aWNlOiBLd2lrSURGb3JtQnVpbGRlckZvcm1FZGl0b3JTZXJ2aWNlXG4gICkge31cblxuICAvKipcbiAgICogQW5ndWxhciBMaWZlY3ljbGUgTWV0aG9kc1xuICAgKi9cbiAgQGxvZ01ldGhvZFxuICBuZ09uSW5pdCgpOiB2b2lkIHt9XG5cbiAgQGxvZ01ldGhvZFxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgY29uc3QgdmVyaWZ5Q2hhbmdlID0gKGtleTogc3RyaW5nKSA9PiB7XG4gICAgICByZXR1cm4gY2hlY2tPYmplY3RLZXlFeGlzdHMoY2hhbmdlcywga2V5KSAmJiAhY2hhbmdlc1trZXldLmZpcnN0Q2hhbmdlO1xuICAgIH07XG4gICAgaWYgKHZlcmlmeUNoYW5nZShcImFjdGl2ZUZvcm1Db25maWdcIikpIHtcbiAgICAgIGxldCBmb3JtQ29uZmlnID0gbmV3IENvbnZlcnRlcigpLmNvbnZlcnRGb3JtQ29uZmlnKFxuICAgICAgICBjaGFuZ2VzLmFjdGl2ZUZvcm1Db25maWcuY3VycmVudFZhbHVlXG4gICAgICApO1xuICAgICAgZm9ybUNvbmZpZyA9IG5ldyBDb252ZXJ0ZXIoKS51cGRhdGVGb3JtQ29uZmlnUHJvcGVydGllcyhmb3JtQ29uZmlnKTtcbiAgICAgIHRoaXMuYWN0aXZlRm9ybUNvbmZpZyA9IGZvcm1Db25maWc7XG5cbiAgICAgIHRoaXMuaW5pdEZvcm1FZGl0b3IodGhpcy5hY3RpdmVGb3JtQ29uZmlnKTtcbiAgICB9XG4gIH1cblxuICBAbG9nTWV0aG9kXG4gIGluaXRGb3JtRWRpdG9yKGFjdGl2ZUZvcm1Db25maWc6IGFueSk6IHZvaWQge1xuICAgIHRoaXMuc3RhcnRMb2FkZXIoKTtcblxuICAgIHRoaXMuYWN0aXZlRm9ybUNvbmZpZ19GaWVsZHMgPSBnZXRPYmplY3REZWVwQ29weShhY3RpdmVGb3JtQ29uZmlnLmZpZWxkcyk7XG4gICAgdGhpcy5hY3RpdmVGb3JtQ29uZmlnX05vRmllbGRzID0gZ2V0T2JqZWN0RGVlcENvcHkoYWN0aXZlRm9ybUNvbmZpZyk7XG4gICAgZGVsZXRlIHRoaXMuYWN0aXZlRm9ybUNvbmZpZ19Ob0ZpZWxkcy5maWVsZHM7XG5cbiAgICB0aGlzLnJvd3MgPSB0aGlzLmFjdGl2ZUZvcm1Db25maWdfRmllbGRzLm1hcCgoZmllbGQ6IGFueSkgPT4ge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAga2V5OiBmaWVsZC5rZXksXG4gICAgICAgIGxhYmVsOiBmaWVsZC5sYWJlbCxcbiAgICAgICAgdHlwZTogZmllbGQudHlwZSxcbiAgICAgICAgZGlzYWJsZWQ6IGZpZWxkLmRpc2FibGVkLFxuICAgICAgICB2YWxpZGF0b3JzOiB7IC4uLkZJRUxEX1ZBTElEQVRPUlNfQ09ORklHLCAuLi5maWVsZC52YWxpZGF0b3JzIH0sXG4gICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICAuLi5GSUVMRF9QUk9QRVJUSUVTX0NPTkZJR1tmaWVsZC50eXBlXSxcbiAgICAgICAgICAuLi5maWVsZC5wcm9wZXJ0aWVzXG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfSk7XG5cbiAgICB0aGlzLmZvcm1Hcm91cCA9IHRoaXMua3dpa2lkQnVpbGRlckZvcm1FZGl0b3JTZXJ2aWNlLmNyZWF0ZU5lc3RlZEZvcm1Hcm91cChcbiAgICAgIHRoaXMucm93c1xuICAgICk7XG5cbiAgICB0aGlzLnN0b3BMb2FkZXIoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZW5lcmFsIEVkaXRvciBDb21tb24gTWV0aG9kc1xuICAgKi9cbiAgQGxvZ01ldGhvZFxuICBoYW5kbGVPbkNsaWNrQ2hhbmdlQWN0aXZlRWRpdG9yKGVkaXRvclR5cGU6IHN0cmluZykge1xuICAgIHRoaXMuYWN0aXZlRWRpdG9yVHlwZSA9IGVkaXRvclR5cGUgYXMgVEZvcm1FZGl0b3JUeXBlO1xuICB9XG5cbiAgQGxvZ01ldGhvZFxuICBoYW5kbGVPbkNsaWNrU2F2ZUFjdGl2ZUZvcm1Db25maWcoKSB7XG4gICAgY29uc3QgZmllbGRzID0gW107XG5cbiAgICBmb3IgKGxldCBmaWVsZCBvZiBPYmplY3QudmFsdWVzKFxuICAgICAgZ2V0T2JqZWN0RGVlcENvcHkodGhpcy5mb3JtR3JvdXAuZ2V0UmF3VmFsdWUoKSlcbiAgICApKSB7XG4gICAgICBmaWVsZHMucHVzaChcbiAgICAgICAgc2V0VmFsdWVUb09iamVjdFBhdGgoXG4gICAgICAgICAgZmluZE1vZGlmaWVkS2V5cyhGSUVMRF9DT05GSUdbZmllbGRbXCJ0eXBlXCJdXSwgZmllbGQsIFwiXCIpLFxuICAgICAgICAgIFwidHlwZVwiLFxuICAgICAgICAgIGZpZWxkW1widHlwZVwiXVxuICAgICAgICApXG4gICAgICApO1xuICAgIH1cblxuICAgIHRoaXMuYWN0aXZlRm9ybUNvbmZpZyA9IG1lcmdlT2JqZWN0cyhcbiAgICAgIGdldE9iamVjdERlZXBDb3B5KHRoaXMuYWN0aXZlRm9ybUNvbmZpZ19Ob0ZpZWxkcyksXG4gICAgICB7XG4gICAgICAgIGZpZWxkczogZmllbGRzXG4gICAgICB9XG4gICAgKTtcblxuICAgIHRoaXMubWFya1NhdmVkKCk7XG5cbiAgICB0aGlzLm9uQ2xpY2tTYXZlQWN0aXZlRm9ybUNvbmZpZy5lbWl0KHRoaXMuYWN0aXZlRm9ybUNvbmZpZyk7XG4gIH1cblxuICAvKipcbiAgICogRmllbGRzIEVkaXRvciBSZWxhdGVkIE1ldGhvZHNcbiAgICovXG4gIC8qKlxuICAgKiBNZXRob2RzIHRvIGhhbmRsZSBhZGRpdGlvbiBvZiBuZXcgZmllbGRcbiAgICovXG4gIEBsb2dNZXRob2RcbiAgaGFuZGxlT25DbGlja0FkZEZpZWxkKCkge1xuICAgIHRoaXMubWFya1Vuc2F2ZWQoKTtcbiAgICB0aGlzLnN0YXJ0TG9hZGVyKCk7XG5cbiAgICBjb25zdCBuZXdJbmRleCA9IHRoaXMucm93cy5sZW5ndGg7XG4gICAgY29uc3QgZmllbGRDb25maWcgPSBnZXRPYmplY3REZWVwQ29weShcbiAgICAgIG1lcmdlT2JqZWN0cyhGSUVMRF9DT05GSUcudGV4dCwge1xuICAgICAgICBrZXk6IFN0cmluZyhuZXdJbmRleClcbiAgICAgIH0pXG4gICAgKTtcblxuICAgIHRoaXMucm93c1tuZXdJbmRleF0gPSBmaWVsZENvbmZpZztcblxuICAgIGNvbnN0IGZvcm1Db250cm9sID0gbmV3IEZvcm1Db250cm9sKGZpZWxkQ29uZmlnKTtcblxuICAgIHRoaXMuZm9ybUdyb3VwLmFkZENvbnRyb2woU3RyaW5nKG5ld0luZGV4KSwgZm9ybUNvbnRyb2wpO1xuXG4gICAgdGhpcy5zdG9wTG9hZGVyKCk7XG4gIH1cblxuICAvKipcbiAgICogTWV0aG9kcyB0byBoYW5kbGUgZWRpdGluZyBvZiBmaWVsZCBrZXktdmFsdWVzXG4gICAqL1xuICBAbG9nTWV0aG9kXG4gIGhhbmRsZU9uQ2xpY2tFZGl0VmFsaWRhdG9ycyhlOiBhbnkpIHtcbiAgICBjb25zdCBmaWVsZENvbmZpZyA9IHRoaXMuZm9ybUdyb3VwLmdldFJhd1ZhbHVlKClbZS5pbmRleF07XG5cbiAgICBjb25zdCBmaWVsZENvbmZpZ1ZhbGlkYXRvcnMgPSBmaWVsZENvbmZpZ1tcInZhbGlkYXRvcnNcIl07XG5cbiAgICB0aGlzLmFjdGl2ZUZpZWxkQ29uZmlnVmFsaWRhdG9yc0NvbmZpZyA9IG1lcmdlT2JqZWN0cyhcbiAgICAgIEZJRUxEX1ZBTElEQVRPUlNfQ09ORklHLFxuICAgICAgZmllbGRDb25maWdWYWxpZGF0b3JzXG4gICAgKTtcblxuICAgIHRoaXMuc2hvd0ZpZWxkQ29uZmlnVmFsaWRhdG9yc0NvbmZpZ0VkaXRvciA9IHRydWU7XG4gICAgdGhpcy5hY3RpdmVGaWVsZENvbmZpZ0VkaXRpbmcgPSBmaWVsZENvbmZpZztcbiAgfVxuXG4gIEBsb2dNZXRob2RcbiAgaGFuZGxlT25DbGlja0VkaXRQcm9wZXJ0aWVzKGU6IGFueSkge1xuICAgIGNvbnN0IGZpZWxkQ29uZmlnID0gdGhpcy5mb3JtR3JvdXAuZ2V0UmF3VmFsdWUoKVtlLmluZGV4XTtcblxuICAgIGNvbnN0IGZpZWxkQ29uZmlnUHJvcGVydGllcyA9IGZpZWxkQ29uZmlnW1wicHJvcGVydGllc1wiXTtcblxuICAgIHRoaXMuYWN0aXZlRmllbGRDb25maWdQcm9wZXJ0aWVzQ29uZmlnID0gbWVyZ2VPYmplY3RzKFxuICAgICAgRklFTERfUFJPUEVSVElFU19DT05GSUdbZS50eXBlXSxcbiAgICAgIGZpZWxkQ29uZmlnUHJvcGVydGllc1xuICAgICk7XG5cbiAgICB0aGlzLnNob3dGaWVsZENvbmZpZ1Byb3BlcnRpZXNDb25maWdFZGl0b3IgPSB0cnVlO1xuICAgIHRoaXMuYWN0aXZlRmllbGRDb25maWdFZGl0aW5nID0gZmllbGRDb25maWc7XG4gIH1cblxuICAvKipcbiAgICogTWV0aG9kcyB0byBoYW5kbGUgY2hhbmdlIGluIGlucHV0IHZhbHVlcyBmb3IgRmllbGRzIEtleXNcbiAgICovXG4gIEBsb2dNZXRob2RcbiAgaGFuZGxlT25JbnB1dChlOiBhbnkpIHtcbiAgICB0aGlzLm1hcmtVbnNhdmVkKCk7XG5cbiAgICBjb25zdCBmaWVsZENvbmZpZyA9IHRoaXMuZm9ybUdyb3VwLmdldFJhd1ZhbHVlKClbZS5pbmRleF07XG4gICAgY29uc3QgZmluYWxQYXRoID0gZS5wYXRoICE9PSBcIlwiID8gYCR7ZS5wYXRofS4ke2Uua2V5fWAgOiBlLmtleTtcblxuICAgIGlmIChmaW5hbFBhdGguaW5jbHVkZXMoXCJkaXNhYmxlZFwiKSkge1xuICAgICAgZS52YWx1ZS5uZXcgPSBCb29sZWFuKGUudmFsdWUubmV3KTtcbiAgICB9XG5cbiAgICBsZXQgbmV3RmllbGRDb25maWcgPSBzZXRWYWx1ZVRvT2JqZWN0UGF0aChcbiAgICAgIGdldE9iamVjdERlZXBDb3B5KGZpZWxkQ29uZmlnKSxcbiAgICAgIGZpbmFsUGF0aCxcbiAgICAgIGUudmFsdWUubmV3XG4gICAgKTtcblxuICAgIGlmIChmaW5hbFBhdGguaW5jbHVkZXMoXCJ0eXBlXCIpKSB7XG4gICAgICB0aGlzLnN0YXJ0TG9hZGVyKCk7XG5cbiAgICAgIG5ld0ZpZWxkQ29uZmlnID0gc2V0VmFsdWVUb09iamVjdFBhdGgoXG4gICAgICAgIG5ld0ZpZWxkQ29uZmlnLFxuICAgICAgICBcInZhbGlkYXRvcnNcIixcbiAgICAgICAgRklFTERfVkFMSURBVE9SU19DT05GSUdcbiAgICAgICk7XG5cbiAgICAgIG5ld0ZpZWxkQ29uZmlnID0gc2V0VmFsdWVUb09iamVjdFBhdGgoXG4gICAgICAgIG5ld0ZpZWxkQ29uZmlnLFxuICAgICAgICBcInByb3BlcnRpZXNcIixcbiAgICAgICAgRklFTERfUFJPUEVSVElFU19DT05GSUdbbmV3RmllbGRDb25maWcudHlwZV1cbiAgICAgICk7XG5cbiAgICAgIHRoaXMuc3RvcExvYWRlcigpO1xuICAgIH1cblxuICAgIHRoaXMucm93cyA9IHRoaXMucm93cy5tYXAoKHJvdykgPT4ge1xuICAgICAgaWYgKHJvdy5rZXkgPT09IGZpZWxkQ29uZmlnLmtleSkge1xuICAgICAgICByZXR1cm4gZ2V0T2JqZWN0RGVlcENvcHkobmV3RmllbGRDb25maWcpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGdldE9iamVjdERlZXBDb3B5KHJvdyk7XG4gICAgfSk7XG5cbiAgICB0aGlzLmZvcm1Hcm91cC5jb250cm9sc1tlLmluZGV4XS5zZXRWYWx1ZShuZXdGaWVsZENvbmZpZywge1xuICAgICAgZW1pdEV2ZW50OiBmYWxzZVxuICAgIH0pO1xuICB9XG5cbiAgQGxvZ01ldGhvZFxuICBoYW5kbGVPbklucHV0RmllbGRDb25maWdWYWxpZGF0b3JzQ29uZmlnKGU6IGFueSkge1xuICAgIHRoaXMubWFya1Vuc2F2ZWQoKTtcblxuICAgIHRyeSB7XG4gICAgICB0aGlzLmhpZGVEaWFsb2dFcnJvcigpO1xuXG4gICAgICBjb25zdCB2YWxpZGF0b3JDb25maWcgPSBKU09OLnBhcnNlKGUpO1xuXG4gICAgICBjb25zdCByb3dJbmRleCA9IGdldEZpZWxkSW5kZXgoXG4gICAgICAgIHRoaXMucm93cyxcbiAgICAgICAgdGhpcy5hY3RpdmVGaWVsZENvbmZpZ0VkaXRpbmcua2V5XG4gICAgICApO1xuICAgICAgaWYgKHJvd0luZGV4ICE9PSAtMSkge1xuICAgICAgICB0aGlzLnJvd3Nbcm93SW5kZXhdLnZhbGlkYXRvcnMgPSB2YWxpZGF0b3JDb25maWc7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuYWN0aXZlRmllbGRDb25maWdFZGl0aW5nID0gbWVyZ2VPYmplY3RzKFxuICAgICAgICB0aGlzLmFjdGl2ZUZpZWxkQ29uZmlnRWRpdGluZyxcbiAgICAgICAgeyB2YWxpZGF0b3JzOiB2YWxpZGF0b3JDb25maWcgfVxuICAgICAgKTtcblxuICAgICAgdGhpcy5mb3JtR3JvdXAuY29udHJvbHNbcm93SW5kZXhdLnNldFZhbHVlKFxuICAgICAgICB0aGlzLmFjdGl2ZUZpZWxkQ29uZmlnRWRpdGluZyxcbiAgICAgICAge1xuICAgICAgICAgIGVtaXRFdmVudDogZmFsc2VcbiAgICAgICAgfVxuICAgICAgKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIHRoaXMuc2hvd0RpYWxvZ0Vycm9yKCk7XG4gICAgfVxuICB9XG5cbiAgQGxvZ01ldGhvZFxuICBoYW5kbGVPbklucHV0RmllbGRDb25maWdQcm9wZXJ0aWVzQ29uZmlnKGU6IGFueSkge1xuICAgIHRoaXMubWFya1Vuc2F2ZWQoKTtcblxuICAgIHRyeSB7XG4gICAgICB0aGlzLmhpZGVEaWFsb2dFcnJvcigpO1xuXG4gICAgICBjb25zdCBwcm9wZXJ0aWVzQ29uZmlnID0gSlNPTi5wYXJzZShlKTtcblxuICAgICAgY29uc3Qgcm93SW5kZXggPSBnZXRGaWVsZEluZGV4KFxuICAgICAgICB0aGlzLnJvd3MsXG4gICAgICAgIHRoaXMuYWN0aXZlRmllbGRDb25maWdFZGl0aW5nLmtleVxuICAgICAgKTtcbiAgICAgIGlmIChyb3dJbmRleCAhPT0gLTEpIHtcbiAgICAgICAgdGhpcy5yb3dzW3Jvd0luZGV4XS5wcm9wZXJ0aWVzID0gcHJvcGVydGllc0NvbmZpZztcbiAgICAgIH1cblxuICAgICAgdGhpcy5hY3RpdmVGaWVsZENvbmZpZ0VkaXRpbmcgPSBtZXJnZU9iamVjdHMoXG4gICAgICAgIHRoaXMuYWN0aXZlRmllbGRDb25maWdFZGl0aW5nLFxuICAgICAgICB7IHByb3BlcnRpZXM6IHByb3BlcnRpZXNDb25maWcgfVxuICAgICAgKTtcblxuICAgICAgdGhpcy5mb3JtR3JvdXAuY29udHJvbHNbcm93SW5kZXhdLnNldFZhbHVlKFxuICAgICAgICB0aGlzLmFjdGl2ZUZpZWxkQ29uZmlnRWRpdGluZyxcbiAgICAgICAge1xuICAgICAgICAgIGVtaXRFdmVudDogZmFsc2VcbiAgICAgICAgfVxuICAgICAgKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIHRoaXMuc2hvd0RpYWxvZ0Vycm9yKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIE1ldGhvZHMgdG8gaGFuZGxlIGRlbGV0aW9uIG9mIGZpZWxkXG4gICAqL1xuICBAbG9nTWV0aG9kXG4gIGhhbmRsZU9uQ2xpY2tEZWxldGVGaWVsZChlOiBhbnkpIHtcbiAgICB0aGlzLm1hcmtVbnNhdmVkKCk7XG5cbiAgICB0aGlzLnJvd3MgPSByZW1vdmVGaWVsZCh0aGlzLnJvd3MsIGUua2V5KTtcblxuICAgIHRoaXMuZm9ybUdyb3VwID0gdGhpcy5rd2lraWRCdWlsZGVyRm9ybUVkaXRvclNlcnZpY2UuY3JlYXRlTmVzdGVkRm9ybUdyb3VwKFxuICAgICAgdGhpcy5yb3dzXG4gICAgKTtcblxuICAgIHRoaXMuZm9ybUdyb3VwLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBOb24gRmllbGRzIEVkaXRvciBSZWxhdGVkIE1ldGhvZHNcbiAgICovXG4gIEBsb2dNZXRob2RcbiAgaGFuZGxlT25DbGlja1NhdmVBY3RpdmVGb3JtQ29uZmlnX05vRmllbGRzKGU6IGFueSkge1xuICAgIHRoaXMuYWN0aXZlRm9ybUNvbmZpZ19Ob0ZpZWxkcyA9IEpTT04ucGFyc2UoZSk7XG4gIH1cblxuICAvKipcbiAgICogT3RoZXIgQ29tcG9uZW50IE1ldGhvZHNcbiAgICovXG4gIEBsb2dNZXRob2RcbiAgaGFuZGxlT25DbGlja1ByZXZpZXcoKSB7XG4gICAgdGhpcy5zaG93RGlhbG9nKCk7XG4gIH1cblxuICBAbG9nTWV0aG9kXG4gIGNsb3NlSlNPTlBvcHVwKCkge1xuICAgIHRoaXMuaGlkZURpYWxvZygpO1xuICAgIHRoaXMuc2hvd0ZpZWxkQ29uZmlnVmFsaWRhdG9yc0NvbmZpZ0VkaXRvciA9IGZhbHNlO1xuICAgIHRoaXMuc2hvd0ZpZWxkQ29uZmlnUHJvcGVydGllc0NvbmZpZ0VkaXRvciA9IGZhbHNlO1xuICB9XG5cbiAgLyoqXG4gICAqIE90aGVyIEhlbHBlciBNZXRob2RzXG4gICAqL1xuICBAbG9nTWV0aG9kXG4gIGNvcHlUb0NsaXBib2FyZCgpIHtcbiAgICB0aGlzLmt3aWtpZEJ1aWxkZXJGb3JtRWRpdG9yU2VydmljZS5jb3B5VG9DbGlwYm9hcmQodGhpcy5hY3RpdmVGb3JtQ29uZmlnKTtcbiAgfVxuXG4gIEBsb2dNZXRob2RcbiAgZG93bmxvYWRKU09OKCkge1xuICAgIHRoaXMua3dpa2lkQnVpbGRlckZvcm1FZGl0b3JTZXJ2aWNlLmRvd25sb2FkSlNPTih0aGlzLmFjdGl2ZUZvcm1Db25maWcpO1xuICB9XG5cbiAgLyoqXG4gICAqIE1pc2MgTWV0aG9kc1xuICAgKi9cbiAgZ2V0T3B0aW9ucyhpbmRleCwgdmFsdWUsIGtleSwgcGF0aCkge1xuICAgIGlmIChwYXRoLmluY2x1ZGVzKFwicHJvcGVydGllc1wiKSkge1xuICAgICAgY29uc3QgZmllbGRUeXBlID0gdGhpcy5yb3dzW2luZGV4XS50eXBlO1xuXG4gICAgICBjb25zdCBmaW5hbFBhdGggPSBgJHtwYXRofVsnJHtmaWVsZFR5cGV9J10uJHtrZXl9YDtcblxuICAgICAgcmV0dXJuIGdldE9iamVjdFZhbHVlRnJvbVBhdGgoT1BUSU9OUywgZmluYWxQYXRoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgZmluYWxQYXRoID0gcGF0aCAhPT0gXCJcIiA/IGAke3BhdGh9LiR7a2V5fWAgOiBrZXk7XG5cbiAgICAgIHJldHVybiBnZXRPYmplY3RWYWx1ZUZyb21QYXRoKE9QVElPTlMsIGZpbmFsUGF0aCk7XG4gICAgfVxuICB9XG4gIG1lbW9pemVkR2V0T3B0aW9ucyA9IF8ubWVtb2l6ZSh0aGlzLmdldE9wdGlvbnMpO1xuXG4gIGlzT3B0aW9ucyhpbmRleCwgdmFsdWUsIGtleSwgcGF0aCkge1xuICAgIGlmIChwYXRoLmluY2x1ZGVzKFwicHJvcGVydGllc1wiKSkge1xuICAgICAgY29uc3QgZmllbGRUeXBlID0gdGhpcy5yb3dzW2luZGV4XS50eXBlO1xuXG4gICAgICBjb25zdCBmaW5hbFBhdGggPSBgJHtwYXRofVsnJHtmaWVsZFR5cGV9J10uJHtrZXl9YDtcblxuICAgICAgcmV0dXJuIEFycmF5LmlzQXJyYXkoZ2V0T2JqZWN0VmFsdWVGcm9tUGF0aChPUFRJT05TLCBmaW5hbFBhdGgpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgZmluYWxQYXRoID0gcGF0aCAhPT0gXCJcIiA/IGAke3BhdGh9LiR7a2V5fWAgOiBrZXk7XG5cbiAgICAgIHJldHVybiBBcnJheS5pc0FycmF5KGdldE9iamVjdFZhbHVlRnJvbVBhdGgoT1BUSU9OUywgZmluYWxQYXRoKSk7XG4gICAgfVxuICB9XG5cbiAgaXNCb29sZWFuKHZhbHVlOiBhbnkpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSBcImJvb2xlYW5cIjtcbiAgfVxuXG4gIGlzU3RyaW5nKHZhbHVlOiBhbnkpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSBcInN0cmluZ1wiO1xuICB9XG5cbiAgaXNOdW1iZXIodmFsdWU6IGFueSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0eXBlb2YgdmFsdWUgPT09IFwibnVtYmVyXCI7XG4gIH1cblxuICBpc09iamVjdCh2YWx1ZTogYW55KTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gXCJvYmplY3RcIiAmJiB2YWx1ZSAhPT0gbnVsbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBBbmd1bGFyIFNwZWNpZmljIE1ldGhvZHNcbiAgICovXG4gIHRyYWNrQnlGbihpbmRleDogbnVtYmVyLCBpdGVtOiBhbnkpOiBhbnkge1xuICAgIGNvbnN0IGtleSA9IGl0ZW0/LmtleSB8fCBcIlwiO1xuICAgIGNvbnN0IHZhbHVlID0gaXRlbT8udmFsdWUgfHwgXCJcIjtcblxuICAgIGlmICh0eXBlb2YgaXRlbSA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgcmV0dXJuIGAke1N0cmluZyhpbmRleCl9XyR7aXRlbX1fJHtuZXcgRGF0ZSgpLmdldFRpbWUoKX1gO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gYCR7U3RyaW5nKGluZGV4KX1fJHtrZXl9XyR7dmFsdWV9XyR7bmV3IERhdGUoKS5nZXRUaW1lKCl9YDtcbiAgICB9XG4gIH1cbn1cbiIsIjwhLS0gQ29tcG9uZW50IExvYWRlciAtLT5cbjxrd2lrdWktbG9hZGVyXG4gIFtsb2FkZXJUZXh0XT1cIidQbGVhc2Ugd2FpdCdcIlxuICBbc2hvd0xvYWRlcl09XCJsb2FkZXJcIlxuICBbZnVsbHNjcmVlbl09XCJ0cnVlXCJcbj48L2t3aWt1aS1sb2FkZXI+XG5cbjwhLS0gQ29tcG9uZW50IE1haW4gVmlldyAtLT5cbjxkaXYgY2xhc3M9XCJjb250YWluZXJcIj5cbiAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImFjdGl2ZUZvcm1Db25maWc7IGVsc2Ugbm9Gb3JtU2VsZWN0ZWRUZW1wbGF0ZVwiPlxuICAgIDxoZWFkZXI+XG4gICAgICA8ZGl2PlxuICAgICAgICAmbmJzcDtFZGl0aW5nIENvbmZpZyBvZiBGb3JtOiA8Yj57eyBhY3RpdmVGb3JtQ29uZmlnLnByb3BzLnRpdGxlIH19PC9iPlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwiaGVhZGVyLWZvcm0tZWRpdG9yLWJ0bnNcIj5cbiAgICAgICAgPGJ1dHRvbiAoY2xpY2spPVwiaGFuZGxlT25DbGlja1ByZXZpZXcoKVwiPnByZXZpZXc8L2J1dHRvbj5cbiAgICAgICAgPGRpdj5FZGl0b3ImbmJzcDtUeXBlOjwvZGl2PlxuICAgICAgICA8c2VsZWN0IChjaGFuZ2UpPVwiaGFuZGxlT25DbGlja0NoYW5nZUFjdGl2ZUVkaXRvcigkZXZlbnQudGFyZ2V0LnZhbHVlKVwiPlxuICAgICAgICAgIDxvcHRpb25cbiAgICAgICAgICAgICpuZ0Zvcj1cImxldCBvcHRpb24gb2YgZWRpdG9yVHlwZU9wdGlvbnNcIlxuICAgICAgICAgICAgW3ZhbHVlXT1cIm9wdGlvbi5rZXlcIlxuICAgICAgICAgICAgW3NlbGVjdGVkXT1cIm9wdGlvbi5rZXkgPT09IGFjdGl2ZUVkaXRvclR5cGVcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIHt7IG9wdGlvbi5sYWJlbCB9fVxuICAgICAgICAgIDwvb3B0aW9uPlxuICAgICAgICA8L3NlbGVjdD5cbiAgICAgIDwvZGl2PlxuICAgIDwvaGVhZGVyPlxuICAgIDxtYWluPlxuICAgICAgPGRpdlxuICAgICAgICBjbGFzcz1cImZvcm0tY29uZmlnLWZpZWxkc1wiXG4gICAgICAgICpuZ0lmPVwiYWN0aXZlRWRpdG9yVHlwZSA9PSAnRklFTERTJzsgZWxzZSBub25GaWVsZHNFZGl0b3JUZW1wbGF0ZVwiXG4gICAgICA+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJyb3dzLmxlbmd0aCA8PSAwXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cIm5vLWZpZWxkcyBkaXNjbGFpbWVyXCI+XG4gICAgICAgICAgICA8ZGl2PjxwPlBsZWFzZSBhZGQgZmllbGQgdG8gZ2V0IHN0YXJ0ZWQ8L3A+PC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaWNvblwiPjxoMT4mcGx1czs8L2gxPjwvZGl2PlxuICAgICAgICAgICAgPGJ1dHRvbiAoY2xpY2spPVwiaGFuZGxlT25DbGlja0FkZEZpZWxkKClcIj5hZGQgZmllbGQ8L2J1dHRvbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDx0YWJsZT5cbiAgICAgICAgICA8dGhlYWQ+XG4gICAgICAgICAgICA8dHI+XG4gICAgICAgICAgICAgIDx0aCAqbmdGb3I9XCJsZXQgY29sdW1uIG9mIGNvbHVtbnNcIj5cbiAgICAgICAgICAgICAgICB7eyBjb2x1bW4gfX1cbiAgICAgICAgICAgICAgPC90aD5cbiAgICAgICAgICAgIDwvdHI+XG4gICAgICAgICAgPC90aGVhZD5cbiAgICAgICAgICA8dGJvZHk+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICpuZ0Zvcj1cImxldCByb3cgb2Ygcm93czsgbGV0IGkgPSBpbmRleDsgdHJhY2tCeTogdHJhY2tCeUZuXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPHRyPlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGNvbHVtbiBvZiBjb2x1bW5zOyBsZXQgaiA9IGluZGV4XCI+XG4gICAgICAgICAgICAgICAgICA8dGQ+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgW2NsYXNzXT1cImNvbHVtblwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbiAhPT0gJ2RlbGV0ZScgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1uICE9PSAndmFsaWRhdG9ycycgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1uICE9PSAncHJvcGVydGllcycgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1uICE9PSAndHlwZScgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1uICE9PSAnZGlzYWJsZWQnXG4gICAgICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwiZ2V0RmllbGRUZW1wbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwie1xuICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRleDogaSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgZmllbGRWYWx1ZTogcm93W2NvbHVtbl0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkS2V5OiBjb2x1bW4sXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudFBhdGg6ICcnXG4gICAgICAgICAgICAgICAgICAgICAgICB9XCJcbiAgICAgICAgICAgICAgICAgICAgICA+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNvbHVtbiA9PT0gJ3R5cGUnXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cIm9wdGlvbkZpZWxkVGVtcGxhdGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwie1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4OiBpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogY29sdW1uLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiByb3dbY29sdW1uXSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXRoOiAnJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zOiBtZW1vaXplZEdldE9wdGlvbnMoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93W2NvbHVtbl0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2x1bW4sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfVwiXG4gICAgICAgICAgICAgICAgICAgICAgICA+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNvbHVtbiA9PT0gJ2Rpc2FibGVkJ1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJib29sZWFuRmllbGRUZW1wbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXg6IGksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBjb2x1bW4sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHJvd1tjb2x1bW5dLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhdGg6ICcnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnM6IG1lbW9pemVkR2V0T3B0aW9ucyhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3dbY29sdW1uXSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgICB9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgID48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY29sdW1uID09PSAnZGVsZXRlJ1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlT25DbGlja0RlbGV0ZUZpZWxkKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4OiBpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiByb3dbJ2tleSddXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cInJvd3MubGVuZ3RoID09PSAxXCJcbiAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY29sdW1uID09PSAndmFsaWRhdG9ycydcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZU9uQ2xpY2tFZGl0VmFsaWRhdG9ycyh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRleDogaSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogcm93WydrZXknXSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IHJvd1sndHlwZSddXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgZWRpdFxuICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNvbHVtbiA9PT0gJ3Byb3BlcnRpZXMnXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVPbkNsaWNrRWRpdFByb3BlcnRpZXMoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXg6IGksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IHJvd1sna2V5J10sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiByb3dbJ3R5cGUnXVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGVkaXRcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgIDwvdHI+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICA8L3Rib2R5PlxuICAgICAgICA8L3RhYmxlPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiYWRkLWZpZWxkLWJ0bi1jb250YWluZXJcIj4gPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxuZy10ZW1wbGF0ZSAjbm9uRmllbGRzRWRpdG9yVGVtcGxhdGU+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWNvbmZpZy1uby1maWVsZHNcIj5cbiAgICAgICAgICA8cHJlXG4gICAgICAgICAgICBjb250ZW50ZWRpdGFibGU9XCJ0cnVlXCJcbiAgICAgICAgICAgIChrZXl1cCk9XCJcbiAgICAgICAgICAgICAgaGFuZGxlT25DbGlja1NhdmVBY3RpdmVGb3JtQ29uZmlnX05vRmllbGRzKFxuICAgICAgICAgICAgICAgICRldmVudC50YXJnZXQuaW5uZXJIVE1MXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgIFwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAge3sgYWN0aXZlRm9ybUNvbmZpZ19Ob0ZpZWxkcyB8IGpzb24gfX1cbiAgICAgICAgICA8L3ByZT5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L25nLXRlbXBsYXRlPlxuICAgIDwvbWFpbj5cbiAgICA8Zm9vdGVyPlxuICAgICAgPGJ1dHRvblxuICAgICAgICAqbmdJZj1cInJvd3MubGVuZ3RoID4gMFwiXG4gICAgICAgIChjbGljayk9XCJoYW5kbGVPbkNsaWNrQWRkRmllbGQoKVwiXG4gICAgICA+XG4gICAgICAgIGFkZCBmaWVsZFxuICAgICAgPC9idXR0b24+XG4gICAgICA8YnV0dG9uXG4gICAgICAgIChjbGljayk9XCJoYW5kbGVPbkNsaWNrU2F2ZUFjdGl2ZUZvcm1Db25maWcoKVwiXG4gICAgICAgIFtjbGFzcy5zZWNvbmRhcnldPVwiIXNhdmVkQ29uZmlnXCJcbiAgICAgID5cbiAgICAgICAge3sgc2F2ZWRDb25maWcgPyBcInNhdmVkXCIgOiBcInVuc2F2ZWRcIiB9fVxuICAgICAgPC9idXR0b24+XG4gICAgPC9mb290ZXI+XG4gIDwvbmctY29udGFpbmVyPlxuICA8bmctdGVtcGxhdGUgI25vRm9ybVNlbGVjdGVkVGVtcGxhdGU+XG4gICAgPGRpdiBjbGFzcz1cIm5vLWZvcm0tc2VsZWN0ZWQgZGlzY2xhaW1lclwiPlxuICAgICAgPGRpdiBjbGFzcz1cImljb25cIj48aDE+JiMxMDE1MDs8L2gxPjwvZGl2PlxuICAgICAgPGRpdj48cD5QbGVhc2Ugc2VsZWN0IGEgZm9ybSB0byBlZGl0IGl0J3MgZmllbGRzPC9wPjwvZGl2PlxuICAgIDwvZGl2PlxuICA8L25nLXRlbXBsYXRlPlxuPC9kaXY+XG5cbjwhLS0gQ29tcG9uZW50IERpYWxvZyAtLT5cbjxkaXZcbiAgY2xhc3M9XCJtb2RhbFwiXG4gIFtjbGFzcy5lcnJvcl09XCJkaWFsb2dFcnJvciA9PT0gdHJ1ZVwiXG4gICpuZ0lmPVwiXG4gICAgZGlhbG9nT3BlbiB8fFxuICAgIHNob3dGaWVsZENvbmZpZ1ZhbGlkYXRvcnNDb25maWdFZGl0b3IgfHxcbiAgICBzaG93RmllbGRDb25maWdQcm9wZXJ0aWVzQ29uZmlnRWRpdG9yXG4gIFwiXG4gIFtAcGFuZWxJbk91dF1cbj5cbiAgPGRpdiBjbGFzcz1cIm1vZGFsLWJveFwiPlxuICAgIDxkaXZcbiAgICAgIGNsYXNzPVwibW9kYWwtY29udGVudFwiXG4gICAgICAqbmdJZj1cImRpYWxvZ09wZW5cIlxuICAgID5cbiAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1oZWFkaW5nXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC10aXRsZVwiPlxuICAgICAgICAgIHt7IGFjdGl2ZUZvcm1Db25maWcucHJvcHMudGl0bGUgfX0ncyBDb25maWcgUHJldmlld1xuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWFjdGlvbnNcIj5cbiAgICAgICAgICA8YnV0dG9uIChjbGljayk9XCJkb3dubG9hZEpTT04oKVwiPmRvd25sb2FkPC9idXR0b24+XG4gICAgICAgICAgPGJ1dHRvbiAoY2xpY2spPVwiY29weVRvQ2xpcGJvYXJkKClcIj5jb3B5PC9idXR0b24+XG4gICAgICAgICAgPGJ1dHRvbiAoY2xpY2spPVwiY2xvc2VKU09OUG9wdXAoKVwiPmNsb3NlPC9idXR0b24+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtYm9keVwiPlxuICAgICAgICA8cHJlPlxuICAgICAgICAgIDxjb2RlPnt7IGFjdGl2ZUZvcm1Db25maWcgfCBqc29uIH19PC9jb2RlPlxuICAgICAgICA8L3ByZT5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDxkaXZcbiAgICAgIGNsYXNzPVwibW9kYWwtY29udGVudFwiXG4gICAgICAqbmdJZj1cInNob3dGaWVsZENvbmZpZ1ZhbGlkYXRvcnNDb25maWdFZGl0b3JcIlxuICAgID5cbiAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1oZWFkaW5nXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC10aXRsZVwiPlxuICAgICAgICAgIHt7IGFjdGl2ZUZvcm1Db25maWcucHJvcHMudGl0bGUgfX0ncyBWYWxpZGF0b3IgQ29uZmlnIEVkaXRvclxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWFjdGlvbnNcIj5cbiAgICAgICAgICA8YnV0dG9uIChjbGljayk9XCJjbG9zZUpTT05Qb3B1cCgpXCI+Y2xvc2U8L2J1dHRvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1ib2R5XCI+XG4gICAgICAgIDxwcmVcbiAgICAgICAgICBjb250ZW50ZWRpdGFibGU9XCJ0cnVlXCJcbiAgICAgICAgICAoa2V5dXApPVwiXG4gICAgICAgICAgICBoYW5kbGVPbklucHV0RmllbGRDb25maWdWYWxpZGF0b3JzQ29uZmlnKCRldmVudC50YXJnZXQuaW5uZXJIVE1MKVxuICAgICAgICAgIFwiXG4gICAgICAgID5cbiAgICAgICAgICB7eyB0aGlzLmFjdGl2ZUZpZWxkQ29uZmlnVmFsaWRhdG9yc0NvbmZpZyB8IGpzb24gfX1cbiAgICAgICAgPC9wcmU+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2XG4gICAgICBjbGFzcz1cIm1vZGFsLWNvbnRlbnRcIlxuICAgICAgKm5nSWY9XCJzaG93RmllbGRDb25maWdQcm9wZXJ0aWVzQ29uZmlnRWRpdG9yXCJcbiAgICA+XG4gICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtaGVhZGluZ1wiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtdGl0bGVcIj5cbiAgICAgICAgICB7eyBhY3RpdmVGb3JtQ29uZmlnLnByb3BzLnRpdGxlIH19J3MgUHJvcGVydGllcyBDb25maWcgRWRpdG9yXG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtYWN0aW9uc1wiPlxuICAgICAgICAgIDxidXR0b24gKGNsaWNrKT1cImNsb3NlSlNPTlBvcHVwKClcIj5jbG9zZTwvYnV0dG9uPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWJvZHlcIj5cbiAgICAgICAgPHByZVxuICAgICAgICAgIGNvbnRlbnRlZGl0YWJsZT1cInRydWVcIlxuICAgICAgICAgIChrZXl1cCk9XCJcbiAgICAgICAgICAgIGhhbmRsZU9uSW5wdXRGaWVsZENvbmZpZ1Byb3BlcnRpZXNDb25maWcoJGV2ZW50LnRhcmdldC5pbm5lckhUTUwpXG4gICAgICAgICAgXCJcbiAgICAgICAgPlxuICAgICAgICAgIHt7IHRoaXMuYWN0aXZlRmllbGRDb25maWdQcm9wZXJ0aWVzQ29uZmlnIHwganNvbiB9fVxuICAgICAgICA8L3ByZT5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvZGl2PlxuPCEtLSBFTkQgLS0+XG5cbjwhLS0gVGVtcGxhdGUgZm9yIHJlbmRlcmluZyBkaWZmZXJlbnQgZmllbGQgdHlwZXMgLS0+XG48IS0tIEdlbmVyYWwgRmllbGQgVGVtcGxhdGUgLS0+XG48bmctdGVtcGxhdGVcbiAgI2dldEZpZWxkVGVtcGxhdGVcbiAgbGV0LWluZGV4PVwiaW5kZXhcIlxuICBsZXQtdmFsdWU9XCJmaWVsZFZhbHVlXCJcbiAgbGV0LWtleT1cImZpZWxkS2V5XCJcbiAgbGV0LXBhdGg9XCJwYXJlbnRQYXRoXCJcbj5cbiAgPGRpdj5cbiAgICA8bmctY29udGFpbmVyXG4gICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJcbiAgICAgICAgaXNPYmplY3QodmFsdWUpID8gb2JqZWN0RmllbGRUZW1wbGF0ZSA6IG5vdE9iamVjdEZpZWxkVGVtcGxhdGVcbiAgICAgIFwiXG4gICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwie1xuICAgICAgICBpbmRleDogaW5kZXgsXG4gICAgICAgIGZpZWxkVmFsdWU6IHZhbHVlLFxuICAgICAgICBmaWVsZEtleToga2V5LFxuICAgICAgICBwYXJlbnRQYXRoOiBwYXRoXG4gICAgICB9XCJcbiAgICA+XG4gICAgPC9uZy1jb250YWluZXI+XG4gIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cblxuPCEtLSBPYmplY3QgVHlwZSBGaWVsZCBUZW1wbGF0ZSAtLT5cbjxuZy10ZW1wbGF0ZVxuICAjb2JqZWN0RmllbGRUZW1wbGF0ZVxuICBsZXQtaW5kZXg9XCJpbmRleFwiXG4gIGxldC12YWx1ZT1cImZpZWxkVmFsdWVcIlxuICBsZXQta2V5PVwiZmllbGRLZXlcIlxuICBsZXQtcGF0aD1cInBhcmVudFBhdGhcIlxuPlxuICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBpdGVtIG9mIHZhbHVlIHwga2V5dmFsdWVcIj5cbiAgICA8bmctY29udGFpbmVyXG4gICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJnZXRGaWVsZFRlbXBsYXRlXCJcbiAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7XG4gICAgICAgIGluZGV4OiBpbmRleCxcbiAgICAgICAgZmllbGRWYWx1ZTogaXRlbS52YWx1ZSxcbiAgICAgICAgZmllbGRLZXk6IGl0ZW0ua2V5LFxuICAgICAgICBwYXJlbnRQYXRoOiBwYXRoID09PSAnJyA/IGtleSA6IHBhdGggKyAnLicgKyBrZXlcbiAgICAgIH1cIlxuICAgID5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgPC9uZy1jb250YWluZXI+XG48L25nLXRlbXBsYXRlPlxuXG48IS0tIE5vbiBPYmplY3QgVHlwZSBGaWVsZCBUZW1wbGF0ZSAtLT5cbjxuZy10ZW1wbGF0ZVxuICAjbm90T2JqZWN0RmllbGRUZW1wbGF0ZVxuICBsZXQtaW5kZXg9XCJpbmRleFwiXG4gIGxldC12YWx1ZT1cImZpZWxkVmFsdWVcIlxuICBsZXQta2V5PVwiZmllbGRLZXlcIlxuICBsZXQtcGF0aD1cInBhcmVudFBhdGhcIlxuPlxuICA8ZGl2PlxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJpc09wdGlvbnMoaW5kZXgsIHZhbHVlLCBrZXksIHBhdGgpXCI+XG4gICAgICA8bmctY29udGFpbmVyXG4gICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cIm9wdGlvbkZpZWxkVGVtcGxhdGVcIlxuICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwie1xuICAgICAgICAgIGluZGV4OiBpbmRleCxcbiAgICAgICAgICBrZXk6IGtleSxcbiAgICAgICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICAgICAgcGF0aDogcGF0aCxcbiAgICAgICAgICBvcHRpb25zOiBtZW1vaXplZEdldE9wdGlvbnMoaW5kZXgsIHZhbHVlLCBrZXksIHBhdGgpXG4gICAgICAgIH1cIlxuICAgICAgPjwvbmctY29udGFpbmVyPlxuICAgIDwvbmctY29udGFpbmVyPlxuICAgIDxuZy1jb250YWluZXJcbiAgICAgICpuZ0lmPVwiIWlzT3B0aW9ucyhpbmRleCwgdmFsdWUsIGtleSwgcGF0aCkgJiYgaXNTdHJpbmcodmFsdWUpXCJcbiAgICA+XG4gICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiXG4gICAgICAgICAgdGV4dEZpZWxkVGVtcGxhdGU7XG4gICAgICAgICAgY29udGV4dDogeyBpbmRleDogaW5kZXgsIGtleToga2V5LCB2YWx1ZTogdmFsdWUsIHBhdGg6IHBhdGggfVxuICAgICAgICBcIlxuICAgICAgPjwvbmctY29udGFpbmVyPlxuICAgIDwvbmctY29udGFpbmVyPlxuICAgIDxuZy1jb250YWluZXJcbiAgICAgICpuZ0lmPVwiIWlzT3B0aW9ucyhpbmRleCwgdmFsdWUsIGtleSwgcGF0aCkgJiYgaXNOdW1iZXIodmFsdWUpXCJcbiAgICA+XG4gICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiXG4gICAgICAgICAgbnVtYmVyRmllbGRUZW1wbGF0ZTtcbiAgICAgICAgICBjb250ZXh0OiB7IGluZGV4OiBpbmRleCwga2V5OiBrZXksIHZhbHVlOiB2YWx1ZSwgcGF0aDogcGF0aCB9XG4gICAgICAgIFwiXG4gICAgICA+PC9uZy1jb250YWluZXI+XG4gICAgPC9uZy1jb250YWluZXI+XG4gIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cblxuPCEtLSBOb24gT2JqZWN0IFR5cGUgRmllbGQgOjogT3B0aW9ucyBGaWVsZCBUZW1wbGF0ZSAtLT5cbjxuZy10ZW1wbGF0ZVxuICAjb3B0aW9uRmllbGRUZW1wbGF0ZVxuICBsZXQtaW5kZXg9XCJpbmRleFwiXG4gIGxldC1rZXk9XCJrZXlcIlxuICBsZXQtdmFsdWU9XCJ2YWx1ZVwiXG4gIGxldC1wYXRoPVwicGF0aFwiXG4gIGxldC1vcHRpb25zPVwib3B0aW9uc1wiXG4+XG4gIDxkaXYgY2xhc3M9XCJmaWVsZC1jb250YWluZXIgb3B0aW9uc1wiPlxuICAgIDxzZWxlY3RcbiAgICAgIChjaGFuZ2UpPVwiaGFuZGxlT25JbnB1dCh7IGluZGV4LCBrZXksIHZhbHVlOiB7IHByZXZpb3VzOiB2YWx1ZSwgbmV3OiAkZXZlbnQudGFyZ2V0LnZhbHVlIH0sIHBhdGggfSlcIlxuICAgID5cbiAgICAgIDxvcHRpb25cbiAgICAgICAgKm5nRm9yPVwibGV0IG9wdGlvbiBvZiBvcHRpb25zXCJcbiAgICAgICAgW3ZhbHVlXT1cIm9wdGlvblwiXG4gICAgICAgIFtzZWxlY3RlZF09XCJvcHRpb24gPT09IHZhbHVlXCJcbiAgICAgICAgPnt7IG9wdGlvbiB9fTwvb3B0aW9uXG4gICAgICA+XG4gICAgPC9zZWxlY3Q+XG4gIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cblxuPCEtLSBOb24gT2JqZWN0IFR5cGUgRmllbGQgOjogQm9vbGVhbiBGaWVsZCBUZW1wbGF0ZSAtLT5cbjxuZy10ZW1wbGF0ZVxuICAjYm9vbGVhbkZpZWxkVGVtcGxhdGVcbiAgbGV0LWluZGV4PVwiaW5kZXhcIlxuICBsZXQta2V5PVwia2V5XCJcbiAgbGV0LXZhbHVlPVwidmFsdWVcIlxuICBsZXQtcGF0aD1cInBhdGhcIlxuPlxuICA8ZGl2IGNsYXNzPVwiZmllbGQtY29udGFpbmVyIGNoZWNrYm94XCI+XG4gICAgPGlucHV0XG4gICAgICB0eXBlPVwiY2hlY2tib3hcIlxuICAgICAgW2NoZWNrZWRdPVwidmFsdWVcIlxuICAgICAgKGNoYW5nZSk9XCJoYW5kbGVPbklucHV0KHsgaW5kZXgsIGtleSwgdmFsdWU6IHsgcHJldmlvdXM6IHZhbHVlLCBuZXc6ICRldmVudC50YXJnZXQuY2hlY2tlZCB9LCBwYXRoIH0pXCJcbiAgICAvPlxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG5cbjwhLS0gTm9uIE9iamVjdCBUeXBlIEZpZWxkIDo6IFRleHQgRmllbGQgVGVtcGxhdGUgLS0+XG48bmctdGVtcGxhdGVcbiAgI3RleHRGaWVsZFRlbXBsYXRlXG4gIGxldC1pbmRleD1cImluZGV4XCJcbiAgbGV0LWtleT1cImtleVwiXG4gIGxldC12YWx1ZT1cInZhbHVlXCJcbiAgbGV0LXBhdGg9XCJwYXRoXCJcbj5cbiAgPGRpdiBjbGFzcz1cImZpZWxkLWNvbnRhaW5lciB0ZXh0XCI+XG4gICAgPGlucHV0XG4gICAgICBwbGFjZWhvbGRlcj1cIkVudGVyIHt7IGtleSB9fVwiXG4gICAgICB0eXBlPVwidGV4dFwiXG4gICAgICBbdmFsdWVdPVwidmFsdWVcIlxuICAgICAgKGJsdXIpPVwiaGFuZGxlT25JbnB1dCh7IGluZGV4LCBrZXksIHZhbHVlOiB7IHByZXZpb3VzOiB2YWx1ZSwgbmV3OiAkZXZlbnQudGFyZ2V0LnZhbHVlIH0sIHBhdGggfSlcIlxuICAgIC8+XG4gIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cblxuPCEtLSBOb24gT2JqZWN0IFR5cGUgRmllbGQgOjogTnVtYmVyIEZpZWxkIFRlbXBsYXRlIC0tPlxuPG5nLXRlbXBsYXRlXG4gICNudW1iZXJGaWVsZFRlbXBsYXRlXG4gIGxldC1pbmRleD1cImluZGV4XCJcbiAgbGV0LWtleT1cImtleVwiXG4gIGxldC12YWx1ZT1cInZhbHVlXCJcbiAgbGV0LXBhdGg9XCJwYXRoXCJcbj5cbiAgPGRpdiBjbGFzcz1cImZpZWxkLWNvbnRhaW5lciBudW1iZXJcIj5cbiAgICA8aW5wdXRcbiAgICAgIHBsYWNlaG9sZGVyPVwiRW50ZXIge3sga2V5IH19XCJcbiAgICAgIHR5cGU9XCJudW1iZXJcIlxuICAgICAgW3ZhbHVlXT1cInZhbHVlXCJcbiAgICAgIChibHVyKT1cImhhbmRsZU9uSW5wdXQoeyBpbmRleCwga2V5LCB2YWx1ZTogeyBwcmV2aW91czogdmFsdWUsIG5ldzogJGV2ZW50LnRhcmdldC52YWx1ZSB9LCBwYXRoIH0pXCJcbiAgICAvPlxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG48IS0tIEVORCAtLT5cbiJdfQ==
@@ -70,7 +70,7 @@ export class KwikIDBuilderFormsListComponent {
70
70
  }
71
71
  }
72
72
  /** @nocollapse */ KwikIDBuilderFormsListComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: KwikIDBuilderFormsListComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
73
- /** @nocollapse */ KwikIDBuilderFormsListComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: KwikIDBuilderFormsListComponent, selector: "kwikid-builder-forms-list", inputs: { activeFormConfig: "activeFormConfig", formsList: "formsList" }, outputs: { onClickSetActiveForm: "onClickSetActiveForm", getFormsList: "getFormsList" }, usesOnChanges: true, ngImport: i0, template: "<kwikui-loader\n [loaderText]=\"'Please wait'\"\n [showLoader]=\"loader\"\n [fullscreen]=\"true\"\n></kwikui-loader>\n\n<div class=\"container\">\n <form\n class=\"add-form-container\"\n [formGroup]=\"addForm\"\n >\n <input\n type=\"text\"\n formControlName=\"key\"\n placeholder=\"form key\"\n />\n <input\n type=\"text\"\n formControlName=\"title\"\n placeholder=\"form title\"\n />\n <kwikui-button\n size=\"s\"\n styles=\"width: 100%\"\n label=\"add form\"\n shape=\"rounded\"\n (click)=\"handleOnClickAddForm()\"\n ></kwikui-button>\n </form>\n <hr />\n <div class=\"forms-list\">\n <ng-container *ngIf=\"formsList.length > 0; else NoForms\">\n <ng-container *ngFor=\"let form of formsList\">\n <ng-container [ngSwitch]=\"form.type\">\n <!-- HTML Content -->\n <ng-container *ngSwitchCase=\"'HTML'\">\n <div [innerHtml]=\"form.props.htmlContent | kwikuiSafeHtml\"></div>\n </ng-container>\n <!-- Type FORM -->\n <ng-container *ngSwitchCase=\"'FORM'\">\n <ng-container\n [ngTemplateOutlet]=\"FORM_BUTTON\"\n [ngTemplateOutletContext]=\"{\n form: form,\n activeFormConfig: activeFormConfig\n }\"\n >\n </ng-container>\n </ng-container>\n </ng-container>\n </ng-container>\n </ng-container>\n <ng-template #NoForms>\n <div class=\"no-form\">\n <div class=\"no-fields disclaimer\">\n <div class=\"icon\"><h1>&plus;</h1></div>\n <div><p>Please add a new form to start</p></div>\n </div>\n </div>\n </ng-template>\n </div>\n <ng-container *ngIf=\"formsList.length > 0\">\n <hr />\n <div>\n <b>Total Forms: {{ formsList.length }}</b>\n </div>\n </ng-container>\n</div>\n\n<ng-template\n #FORM_BUTTON\n let-form=\"form\"\n let-activeFormConfig=\"activeFormConfig\"\n>\n <div\n [class]=\"'uf-section-item'\"\n [class.active]=\"\n activeFormConfig !== undefined && form.key === activeFormConfig.key\n \"\n (click)=\"handleOnClickSetActiveForm(form.key)\"\n >\n <div class=\"uf-form-section-card-title\">\n {{ form.props.title }}&nbsp;<span *ngIf=\"form?.required\">*</span>\n </div>\n <div class=\"uf-form-section-card-status\">\n <div class=\"uf-form-section-card-status-img edit\">\n <tui-svg src=\"tuiIconEdit\"></tui-svg>\n </div>\n </div>\n </div>\n</ng-template>\n", styles: ["::-webkit-scrollbar{width:8px}::-webkit-scrollbar-track{border-radius:10px}::-webkit-scrollbar-thumb{background:lightgray;border-radius:10px}::-webkit-scrollbar-thumb:hover{background:gray}input[type=text],input[type=number]{width:100%;padding:8px 12px;border:1px solid #ccc;border-radius:4px;box-sizing:border-box;-webkit-appearance:auto!important;appearance:auto!important}input[type=checkbox]{-webkit-appearance:auto!important;appearance:auto!important;width:1rem;height:1rem}select{width:100%;padding:8px 12px;border:1px solid #ccc;border-radius:4px;box-sizing:border-box}textarea{overflow-wrap:anywhere;resize:none;unicode-bidi:embed;white-space:pre-wrap}button{display:inline-block;padding:8px 12px;background-color:#007bff;color:#fff;text-decoration:none;border-radius:4px;border:none;cursor:pointer}button:hover{background-color:#0069d9}button:active{background-color:#0056b3}button:focus{outline:none}button.secondary{padding:7px 11px;border:1px solid #007bff;background-color:#fff;color:#007bff}button.secondary:hover{background-color:#b7daff}button.secondary:active{background-color:#b7daff}button.secondary:focus{outline:none}.field-container{display:flex}.field-container label{color:gray}.field-container.checkbox{flex-direction:row;align-items:center;justify-content:center;padding:8px 12px;margin:auto}.field-container.options,.field-container.number,.field-container.text{flex-direction:column}.disclaimer{display:flex;flex-direction:column;align-content:center;justify-content:center;align-items:center;grid-gap:1.4rem;gap:1.4rem;color:#121212;width:100%;height:100%}.disclaimer .icon{width:3rem;height:3rem;display:flex;flex-direction:row;align-content:center;justify-content:center;align-items:center}.disclaimer.no-form-selected h1{transform:scaleX(-1)}.disclaimer h1{font-size:5rem;font-weight:100}.disclaimer p{font-size:1rem}\n", ":host{all:unset;position:relative;height:100%}.container{width:100%;min-width:280px;max-width:400px;height:100%;display:flex;flex-direction:column;align-content:flex-start;justify-content:space-between;align-items:stretch;padding:1rem;border:1px solid #ccc;grid-gap:1rem;gap:1rem}.container .add-form-container{display:flex;flex-direction:column;align-items:stretch;justify-content:flex-end;grid-gap:1rem;gap:1rem}.container .forms-list{display:flex;flex-direction:column;align-content:center;justify-content:flex-start;align-items:stretch;grid-gap:1rem;gap:1rem;flex-grow:1;overflow:auto;padding-right:.5rem}.container .forms-list .uf-section-item{width:100%;display:flex;flex-direction:row;align-items:center;justify-content:space-between;align-content:center;padding:1rem;grid-gap:1rem;gap:1rem;cursor:pointer;box-shadow:0 1px 3px -1px var(--tui-base-05);border-radius:.5rem;background-color:var(--tui-base-02);position:relative}.container .forms-list .uf-section-item:hover{box-shadow:0 1px 3px -1px var(--tui-base-08)}.container .forms-list .uf-section-item .uf-form-section-card-title{font-size:1em;text-align:left;line-height:1.25em;font-weight:bold;white-space:nowrap}.container .forms-list .uf-section-item .uf-form-section-card-status{width:30px;height:30px;display:flex;flex-direction:row;align-content:center;justify-content:center;align-items:center}.container .forms-list .uf-section-item .uf-form-section-card-status .uf-form-section-card-status-img{width:30px;height:30px;display:flex;flex-direction:row;align-content:center;justify-content:center;align-items:center;border-radius:100%;color:#fff;font-weight:bold}.container .forms-list .uf-section-item .uf-form-section-card-status .uf-form-section-card-status-img.edit{background-color:var(--tui-error-fill);padding:.25rem;border-radius:50%;color:#fff}.container .forms-list .form-item{background-color:#ccc3;border:1px solid gray;color:gray;cursor:pointer;display:inline-block;padding:12px 6px;text-decoration:none}.container .forms-list .form-item.active{background-color:#007bff0f;border:1px solid #007bff;color:#007bff}.container .forms-list .form-item.active span{transform:scaleX(-1)}.container .forms-list .no-form{height:100%;display:flex;flex-direction:row;align-content:center;justify-content:center;align-items:center;text-align:center}\n"], components: [{ type: i1.KwikUILoaderComponent, selector: "kwikui-loader", inputs: ["id", "loaderText", "showLoader", "fullscreen", "styles", "class"] }, { type: i1.KwikUIButtonComponent, selector: "kwikui-button", inputs: ["disabled", "id", "label", "showLoader", "styles", "class", "type", "appearance", "icon", "iconRight", "shape", "size"], outputs: ["onClick"] }, { type: i2.TuiSvgComponent, selector: "tui-svg", inputs: ["src"] }], directives: [{ type: i3.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { type: i3.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { type: i3.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { type: i3.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i3.FormControlName, selector: "[formControlName]", inputs: ["disabled", "formControlName", "ngModel"], outputs: ["ngModelChange"] }, { type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i4.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { type: i4.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { type: i4.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }], pipes: { "kwikuiSafeHtml": i1.KwikUISafeHtmlPipe } });
73
+ /** @nocollapse */ KwikIDBuilderFormsListComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: KwikIDBuilderFormsListComponent, selector: "kwikid-builder-forms-list", inputs: { activeFormConfig: "activeFormConfig", formsList: "formsList" }, outputs: { onClickSetActiveForm: "onClickSetActiveForm", getFormsList: "getFormsList" }, usesOnChanges: true, ngImport: i0, template: "<kwikui-loader\n [loaderText]=\"'Please wait'\"\n [showLoader]=\"loader\"\n [fullscreen]=\"true\"\n></kwikui-loader>\n\n<div class=\"container\">\n <form\n class=\"add-form-container\"\n [formGroup]=\"addForm\"\n >\n <input\n type=\"text\"\n formControlName=\"key\"\n placeholder=\"form key\"\n />\n <input\n type=\"text\"\n formControlName=\"title\"\n placeholder=\"form title\"\n />\n <kwikui-button\n size=\"s\"\n styles=\"width: 100%\"\n label=\"add form\"\n shape=\"rounded\"\n (click)=\"handleOnClickAddForm()\"\n ></kwikui-button>\n </form>\n <hr />\n <div class=\"forms-list\">\n <ng-container *ngIf=\"formsList.length > 0; else NoForms\">\n <ng-container *ngFor=\"let form of formsList\">\n <ng-container [ngSwitch]=\"form.type\">\n <!-- HTML Content -->\n <ng-container *ngSwitchCase=\"'HTML'\">\n <div [innerHtml]=\"form.props.htmlContent | kwikuiSafeHtml\"></div>\n </ng-container>\n <!-- Type FORM -->\n <ng-container *ngSwitchCase=\"'FORM'\">\n <ng-container\n [ngTemplateOutlet]=\"FORM_BUTTON\"\n [ngTemplateOutletContext]=\"{\n form: form,\n activeFormConfig: activeFormConfig\n }\"\n >\n </ng-container>\n </ng-container>\n </ng-container>\n </ng-container>\n </ng-container>\n <ng-template #NoForms>\n <div class=\"no-form\">\n <div class=\"no-fields disclaimer\">\n <div class=\"icon\"><h1>&plus;</h1></div>\n <div><p>Please add a new form to start</p></div>\n </div>\n </div>\n </ng-template>\n </div>\n <ng-container *ngIf=\"formsList.length > 0\">\n <hr />\n <div>\n <b>Total Forms: {{ formsList.length }}</b>\n </div>\n </ng-container>\n</div>\n\n<ng-template\n #FORM_BUTTON\n let-form=\"form\"\n let-activeFormConfig=\"activeFormConfig\"\n>\n <div\n [class]=\"'uf-section-item'\"\n [class.active]=\"\n activeFormConfig !== undefined && form.key === activeFormConfig.key\n \"\n (click)=\"handleOnClickSetActiveForm(form.key)\"\n >\n <div class=\"uf-form-section-card-title\">\n {{ form.props.title }}&nbsp;<span *ngIf=\"form?.required\">*</span>\n </div>\n <div class=\"uf-form-section-card-status\">\n <div class=\"uf-form-section-card-status-img edit\">\n <tui-svg src=\"tuiIconEdit\"></tui-svg>\n </div>\n </div>\n </div>\n</ng-template>\n", styles: ["::-webkit-scrollbar{width:8px}::-webkit-scrollbar-track{border-radius:10px}::-webkit-scrollbar-thumb{background:lightgray;border-radius:10px}::-webkit-scrollbar-thumb:hover{background:gray}input[type=text],input[type=number]{width:100%;padding:8px 12px;border:1px solid #ccc;border-radius:4px;box-sizing:border-box;-webkit-appearance:auto!important;appearance:auto!important}input[type=checkbox]{-webkit-appearance:auto!important;appearance:auto!important;width:1rem;height:1rem}select{width:100%;padding:8px 12px;border:1px solid #ccc;border-radius:4px;box-sizing:border-box}textarea{overflow-wrap:anywhere;resize:none;unicode-bidi:embed;white-space:pre-wrap}button{display:inline-block;padding:8px 12px;background-color:#007bff;color:#fff;text-decoration:none;border-radius:4px;border:none;cursor:pointer}button:hover{background-color:#0069d9}button:active{background-color:#0056b3}button:focus{outline:none}button.secondary{padding:7px 11px;border:1px solid #007bff;background-color:#fff;color:#007bff}button.secondary:hover{background-color:#b7daff}button.secondary:active{background-color:#b7daff}button.secondary:focus{outline:none}.field-container{display:flex}.field-container label{color:gray}.field-container.checkbox{flex-direction:row;align-items:center;justify-content:center;padding:8px 12px;margin:auto}.field-container.options,.field-container.number,.field-container.text{flex-direction:column}.disclaimer{display:flex;flex-direction:column;align-content:center;justify-content:center;align-items:center;color:#121212;width:100%;height:100%}.disclaimer>*:not(:last-child){margin-bottom:1.5rem}.disclaimer .icon{width:3rem;height:3rem;display:flex;flex-direction:row;align-content:center;justify-content:center;align-items:center}.disclaimer.no-form-selected h1{transform:scaleX(-1)}.disclaimer h1{font-size:5rem;font-weight:100}.disclaimer p{font-size:1rem}\n", ":host{all:unset;position:relative;height:100%}.container{width:100%;min-width:280px;max-width:400px;height:100%;display:flex;flex-direction:column;align-content:flex-start;justify-content:space-between;align-items:stretch;padding:1rem;border:1px solid #ccc}.container>*:not(:last-child){margin-bottom:1rem}.container .add-form-container{display:flex;flex-direction:column;align-items:stretch;justify-content:flex-end}.container .add-form-container>*:not(:last-child){margin-bottom:1rem}.container .forms-list{display:flex;flex-direction:column;align-content:center;justify-content:flex-start;align-items:stretch;flex-grow:1;overflow:auto;padding-right:.5rem}.container .forms-list>*:not(:last-child){margin-bottom:1rem}.container .forms-list .uf-section-item{width:100%;display:flex;flex-direction:row;align-items:center;justify-content:space-between;align-content:center;padding:1rem;cursor:pointer;box-shadow:0 1px 3px -1px var(--tui-base-05);border-radius:.5rem;background-color:var(--tui-base-02);position:relative}.container .forms-list .uf-section-item>*:not(:last-child){margin-right:1rem}.container .forms-list .uf-section-item:hover{box-shadow:0 1px 3px -1px var(--tui-base-08)}.container .forms-list .uf-section-item .uf-form-section-card-title{font-size:1em;text-align:left;line-height:1.25em;font-weight:bold;white-space:nowrap}.container .forms-list .uf-section-item .uf-form-section-card-status{width:30px;height:30px;display:flex;flex-direction:row;align-content:center;justify-content:center;align-items:center}.container .forms-list .uf-section-item .uf-form-section-card-status .uf-form-section-card-status-img{width:30px;height:30px;display:flex;flex-direction:row;align-content:center;justify-content:center;align-items:center;border-radius:100%;color:#fff;font-weight:bold}.container .forms-list .uf-section-item .uf-form-section-card-status .uf-form-section-card-status-img.edit{background-color:var(--tui-error-fill);padding:.25rem;border-radius:50%;color:#fff}.container .forms-list .form-item{background-color:#ccc3;border:1px solid gray;color:gray;cursor:pointer;display:inline-block;padding:12px 6px;text-decoration:none}.container .forms-list .form-item.active{background-color:#007bff0f;border:1px solid #007bff;color:#007bff}.container .forms-list .form-item.active span{transform:scaleX(-1)}.container .forms-list .no-form{height:100%;display:flex;flex-direction:row;align-content:center;justify-content:center;align-items:center;text-align:center}\n"], components: [{ type: i1.KwikUILoaderComponent, selector: "kwikui-loader", inputs: ["id", "loaderText", "showLoader", "fullscreen", "styles", "class"] }, { type: i1.KwikUIButtonComponent, selector: "kwikui-button", inputs: ["disabled", "id", "label", "showLoader", "styles", "class", "type", "appearance", "icon", "iconRight", "shape", "size"], outputs: ["onClick"] }, { type: i2.TuiSvgComponent, selector: "tui-svg", inputs: ["src"] }], directives: [{ type: i3.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { type: i3.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { type: i3.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { type: i3.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i3.FormControlName, selector: "[formControlName]", inputs: ["disabled", "formControlName", "ngModel"], outputs: ["ngModelChange"] }, { type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i4.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { type: i4.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { type: i4.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }], pipes: { "kwikuiSafeHtml": i1.KwikUISafeHtmlPipe } });
74
74
  __decorate([
75
75
  logMethod
76
76
  ], KwikIDBuilderFormsListComponent.prototype, "ngOnChanges", null);
@@ -122,7 +122,7 @@ export class KwikIDFormsBuilderComponent {
122
122
  }
123
123
  }
124
124
  /** @nocollapse */ KwikIDFormsBuilderComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: KwikIDFormsBuilderComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
125
- /** @nocollapse */ KwikIDFormsBuilderComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: KwikIDFormsBuilderComponent, selector: "kwikid-forms-builder", inputs: { userConfig: "userConfig" }, ngImport: i0, template: "<div class=\"container\">\n <kwikid-builder-forms-list\n [activeFormConfig]=\"this.activeFormConfig\"\n [formsList]=\"this.formsList\"\n (getFormsList)=\"this.handleGetFormsList($event)\"\n (onClickSetActiveForm)=\"this.handleOnClickSetActiveForm($event)\"\n ></kwikid-builder-forms-list>\n <kwikid-builder-form-editor\n [activeFormConfig]=\"activeFormConfig\"\n (onClickSaveActiveFormConfig)=\"\n this.handleOnClickSaveActiveFormConfig($event)\n \"\n ></kwikid-builder-form-editor>\n</div>\n\n<kwikui-loader\n [loaderText]=\"'Please wait'\"\n [showLoader]=\"loader\"\n [fullscreen]=\"true\"\n></kwikui-loader>\n", styles: ["::-webkit-scrollbar{width:8px}::-webkit-scrollbar-track{border-radius:10px}::-webkit-scrollbar-thumb{background:lightgray;border-radius:10px}::-webkit-scrollbar-thumb:hover{background:gray}input[type=text],input[type=number]{width:100%;padding:8px 12px;border:1px solid #ccc;border-radius:4px;box-sizing:border-box;-webkit-appearance:auto!important;appearance:auto!important}input[type=checkbox]{-webkit-appearance:auto!important;appearance:auto!important;width:1rem;height:1rem}select{width:100%;padding:8px 12px;border:1px solid #ccc;border-radius:4px;box-sizing:border-box}textarea{overflow-wrap:anywhere;resize:none;unicode-bidi:embed;white-space:pre-wrap}button{display:inline-block;padding:8px 12px;background-color:#007bff;color:#fff;text-decoration:none;border-radius:4px;border:none;cursor:pointer}button:hover{background-color:#0069d9}button:active{background-color:#0056b3}button:focus{outline:none}button.secondary{padding:7px 11px;border:1px solid #007bff;background-color:#fff;color:#007bff}button.secondary:hover{background-color:#b7daff}button.secondary:active{background-color:#b7daff}button.secondary:focus{outline:none}.field-container{display:flex}.field-container label{color:gray}.field-container.checkbox{flex-direction:row;align-items:center;justify-content:center;padding:8px 12px;margin:auto}.field-container.options,.field-container.number,.field-container.text{flex-direction:column}.disclaimer{display:flex;flex-direction:column;align-content:center;justify-content:center;align-items:center;grid-gap:1.4rem;gap:1.4rem;color:#121212;width:100%;height:100%}.disclaimer .icon{width:3rem;height:3rem;display:flex;flex-direction:row;align-content:center;justify-content:center;align-items:center}.disclaimer.no-form-selected h1{transform:scaleX(-1)}.disclaimer h1{font-size:5rem;font-weight:100}.disclaimer p{font-size:1rem}\n", ":host{all:unset;position:relative;width:100%;height:100%}.container{width:100%;height:100%;display:flex;flex-direction:row;justify-content:space-between;align-items:stretch;grid-gap:1rem;gap:1rem;padding:1rem}\n"], components: [{ type: i1.KwikIDBuilderFormsListComponent, selector: "kwikid-builder-forms-list", inputs: ["activeFormConfig", "formsList"], outputs: ["onClickSetActiveForm", "getFormsList"] }, { type: i2.KwikIDBuilderFormEditorComponent, selector: "kwikid-builder-form-editor", inputs: ["activeFormConfig"], outputs: ["onClickSaveActiveFormConfig"] }, { type: i3.KwikUILoaderComponent, selector: "kwikui-loader", inputs: ["id", "loaderText", "showLoader", "fullscreen", "styles", "class"] }] });
125
+ /** @nocollapse */ KwikIDFormsBuilderComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: KwikIDFormsBuilderComponent, selector: "kwikid-forms-builder", inputs: { userConfig: "userConfig" }, ngImport: i0, template: "<div class=\"container\">\n <kwikid-builder-forms-list\n [activeFormConfig]=\"this.activeFormConfig\"\n [formsList]=\"this.formsList\"\n (getFormsList)=\"this.handleGetFormsList($event)\"\n (onClickSetActiveForm)=\"this.handleOnClickSetActiveForm($event)\"\n ></kwikid-builder-forms-list>\n <kwikid-builder-form-editor\n [activeFormConfig]=\"activeFormConfig\"\n (onClickSaveActiveFormConfig)=\"\n this.handleOnClickSaveActiveFormConfig($event)\n \"\n ></kwikid-builder-form-editor>\n</div>\n\n<kwikui-loader\n [loaderText]=\"'Please wait'\"\n [showLoader]=\"loader\"\n [fullscreen]=\"true\"\n></kwikui-loader>\n", styles: ["::-webkit-scrollbar{width:8px}::-webkit-scrollbar-track{border-radius:10px}::-webkit-scrollbar-thumb{background:lightgray;border-radius:10px}::-webkit-scrollbar-thumb:hover{background:gray}input[type=text],input[type=number]{width:100%;padding:8px 12px;border:1px solid #ccc;border-radius:4px;box-sizing:border-box;-webkit-appearance:auto!important;appearance:auto!important}input[type=checkbox]{-webkit-appearance:auto!important;appearance:auto!important;width:1rem;height:1rem}select{width:100%;padding:8px 12px;border:1px solid #ccc;border-radius:4px;box-sizing:border-box}textarea{overflow-wrap:anywhere;resize:none;unicode-bidi:embed;white-space:pre-wrap}button{display:inline-block;padding:8px 12px;background-color:#007bff;color:#fff;text-decoration:none;border-radius:4px;border:none;cursor:pointer}button:hover{background-color:#0069d9}button:active{background-color:#0056b3}button:focus{outline:none}button.secondary{padding:7px 11px;border:1px solid #007bff;background-color:#fff;color:#007bff}button.secondary:hover{background-color:#b7daff}button.secondary:active{background-color:#b7daff}button.secondary:focus{outline:none}.field-container{display:flex}.field-container label{color:gray}.field-container.checkbox{flex-direction:row;align-items:center;justify-content:center;padding:8px 12px;margin:auto}.field-container.options,.field-container.number,.field-container.text{flex-direction:column}.disclaimer{display:flex;flex-direction:column;align-content:center;justify-content:center;align-items:center;color:#121212;width:100%;height:100%}.disclaimer>*:not(:last-child){margin-bottom:1.5rem}.disclaimer .icon{width:3rem;height:3rem;display:flex;flex-direction:row;align-content:center;justify-content:center;align-items:center}.disclaimer.no-form-selected h1{transform:scaleX(-1)}.disclaimer h1{font-size:5rem;font-weight:100}.disclaimer p{font-size:1rem}\n", ":host{all:unset;position:relative;width:100%;height:100%}.container{width:100%;height:100%;display:flex;flex-direction:row;justify-content:space-between;align-items:stretch;padding:1rem}.container>*:not(:last-child){margin-right:1rem}\n"], components: [{ type: i1.KwikIDBuilderFormsListComponent, selector: "kwikid-builder-forms-list", inputs: ["activeFormConfig", "formsList"], outputs: ["onClickSetActiveForm", "getFormsList"] }, { type: i2.KwikIDBuilderFormEditorComponent, selector: "kwikid-builder-form-editor", inputs: ["activeFormConfig"], outputs: ["onClickSaveActiveFormConfig"] }, { type: i3.KwikUILoaderComponent, selector: "kwikui-loader", inputs: ["id", "loaderText", "showLoader", "fullscreen", "styles", "class"] }] });
126
126
  __decorate([
127
127
  logMethod
128
128
  ], KwikIDFormsBuilderComponent.prototype, "fetchFormConfig", null);