nxt-color-picker 14.0.2 → 14.0.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2020/lib/color-picker/color-picker.component.mjs +9 -3
- package/fesm2015/nxt-color-picker.mjs +8 -2
- package/fesm2015/nxt-color-picker.mjs.map +1 -1
- package/fesm2020/nxt-color-picker.mjs +8 -2
- package/fesm2020/nxt-color-picker.mjs.map +1 -1
- package/lib/color-picker/color-picker.component.d.ts +1 -0
- package/package.json +1 -1
|
@@ -170,6 +170,12 @@ export class ColorPickerComponent {
|
|
|
170
170
|
this.updateColorPicker(emit, update, (cmyk && this.cpCmykEnabled));
|
|
171
171
|
}
|
|
172
172
|
}
|
|
173
|
+
stringToRgba(value) {
|
|
174
|
+
const hsva = stringToHsva(value, true);
|
|
175
|
+
if (hsva)
|
|
176
|
+
return formatOutput(hsva, OutputFormat.rgba, AlphaChannel.enabled);
|
|
177
|
+
return undefined;
|
|
178
|
+
}
|
|
173
179
|
onDragEnd(slider) {
|
|
174
180
|
if (this.callbacks) {
|
|
175
181
|
this.callbacks.sliderDragEnd({ slider, color: this.outputColor });
|
|
@@ -566,10 +572,10 @@ export class ColorPickerComponent {
|
|
|
566
572
|
}
|
|
567
573
|
}
|
|
568
574
|
ColorPickerComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.1.2", ngImport: i0, type: ColorPickerComponent, deps: [{ token: i0.ElementRef }, { token: i0.ChangeDetectorRef }, { token: i1.ColorPickerService }], target: i0.ɵɵFactoryTarget.Component });
|
|
569
|
-
ColorPickerComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.1.2", type: ColorPickerComponent, selector: "cp-color-picker", host: { listeners: { "document:keyup.esc": "onCancel($event)", "document:keyup.enter": "onAccept($event)", "document:mousedown": "onFocusChange($event)", "document:focusin": "onFocusChange($event)" } }, ngImport: i0, template: "<div class=\"color-picker\"\n (click)=\"$event.stopPropagation()\"\n [ngStyle]=\"{\n visibility: !show ? 'hidden' : 'visible',\n width: cpWidth || '',\n height: cpHeight || ''\n }\"\n *ngIf=\"show\">\n <div *ngIf=\"cpDialogDisplay == dialogDisplay.popup\"\n class=\"color-picker__arrow\"\n [ngClass]=\"'color-picker__arrow--' + cpPosition\"></div>\n <div *ngIf=\"cpMode == colorModeInternal.color\"\n class=\"color-picker__sv\"\n cpSlider\n [rgX]=\"1\"\n [rgY]=\"1\"\n (newValue)=\"onColorChange($event)\"\n (dragStart)=\"onDragStart('saturation-lightness')\"\n (dragEnd)=\"onDragEnd('saturation-lightness')\"\n [ngStyle]=\"{ \n backgroundColor: hueSliderColor || ''\n }\">\n <div class=\"color-picker__cursor color-picker__cursor--sv\"\n [ngClass]=\"{ 'color-picker__cursor--light': svSliderLight }\"\n [ngStyle]=\"{\n top: (slider?.v || 0) * 100 + '%',\n left: (slider?.s || 0) * 100 + '%'\n }\"></div>\n </div>\n <div class=\"color-picker__controls\">\n <div class=\"color-picker__selected\">\n <div class=\"color-picker__selected-color\">\n <div [ngStyle]=\"{ \n backgroundColor: selectedColor || ''\n }\"><button\n *ngIf=\"cpAddColorButton && !(cpMaxPresetColors && (cpPresetColors?.length || 0) >= cpMaxPresetColors)\"\n type=\"button\"\n title=\"Add color to preset\"\n i18n-title=\"@@nxt-color-picker.button.add-color\"\n class=\"color-picker__add-selected\"\n [ngClass]=\"{ 'color-picker__add-selected--light': alphaSliderLight }\"\n (click)=\"onAddPresetColor(selectedColor)\"><svg xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\">\n <path d=\"M19 13h-6v6h-2v-6H5v-2h6V5h2v6h6v2z\" />\n <path d=\"M0 0h24v24H0z\"\n fill=\"none\" />\n </svg></button></div>\n </div>\n </div>\n <div class=\"color-picker__hav\">\n <div *ngIf=\"cpMode == colorModeInternal.color\"\n class=\"color-picker__slider color-picker__slider--hue\"\n cpSlider\n [rgX]=\"1\"\n (newValue)=\"onHueChange($event)\"\n (dragStart)=\"onDragStart('hue')\"\n (dragEnd)=\"onDragEnd('hue')\">\n <div class=\"color-picker__cursor\"\n [ngClass]=\"{ 'color-picker__cursor--light': hueSliderLight }\"\n [ngStyle]=\"{\n left: (slider?.h || 0) * 100 + '%'\n }\"></div>\n </div>\n <div *ngIf=\"cpMode == colorModeInternal.grayscale\"\n class=\"color-picker__slider color-picker__slider--value\"\n cpSlider\n [rgX]=\"1\"\n (newValue)=\"onValueChange($event)\"\n (dragStart)=\"onDragStart('value')\"\n (dragEnd)=\"onDragEnd('value')\">\n <div class=\"color-picker__cursor\"\n [ngClass]=\"{ 'color-picker__cursor--light': valueSliderLight }\"\n [ngStyle]=\"{\n left: (1 - (slider?.v || 0)) * 100 + '%'\n }\"></div>\n </div>\n <div *ngIf=\"cpAlphaChannel != alphaChannel.disabled\"\n class=\"color-picker__slider color-picker__slider--alpha\"\n cpSlider\n [rgX]=\"1\"\n (newValue)=\"onAlphaChange($event)\"\n (dragStart)=\"onDragStart('alpha')\"\n (dragEnd)=\"onDragEnd('alpha')\">\n <div class=\"color-picker__slider--alpha-bg\"\n [ngStyle]=\"{\n backgroundImage: alphaSliderColor || ''\n }\">\n <div class=\"color-picker__cursor\"\n [ngClass]=\"{ 'color-picker__cursor--light': alphaSliderLight }\"\n [ngStyle]=\"{\n left: (slider?.a || 0) * 100 + '%'\n }\"></div>\n </div>\n </div>\n </div>\n </div>\n <div *ngIf=\"!cpDisableInput && (cpMode == colorModeInternal.color || cpMode == colorModeInternal.grayscale)\"\n class=\"color-picker__inputs\">\n <div class=\"color-picker__input-fields\">\n <ng-container *ngIf=\"cpMode == colorModeInternal.grayscale; else formatSwitch\">\n <div class=\"color-picker__input-field\">\n <input type=\"number\"\n pattern=\"[0-9]*\"\n min=\"0\"\n max=\"100\"\n cpText\n [rg]=\"100\"\n [value]=\"hslaText?.l\"\n (keyup.enter)=\"onAccept($event)\"\n (newValue)=\"onValueInput($event)\" />\n <span class=\"color-picker__input-field-label\">V</span>\n </div>\n <div *ngIf=\"cpAlphaChannel != alphaChannel.disabled\"\n class=\"color-picker__input-field\">\n <input type=\"number\"\n pattern=\"[0-9]+([\\.,][0-9]{1,2})?\"\n min=\"0\"\n max=\"1\"\n step=\"0.1\"\n cpText\n [rg]=\"1\"\n [value]=\"hslaText?.a\"\n (keyup.enter)=\"onAccept($event)\"\n (newValue)=\"onAlphaInput($event)\" />\n <span class=\"color-picker__input-field-label\">A</span>\n </div>\n </ng-container>\n <ng-template #formatSwitch>\n <ng-container [ngSwitch]=\"format\">\n <ng-container *ngSwitchCase=\"colorFormat.hsla\">\n <div class=\"color-picker__input-field\">\n <input type=\"number\"\n pattern=\"[0-9]*\"\n min=\"0\"\n max=\"360\"\n cpText\n [rg]=\"360\"\n [value]=\"hslaText?.h\"\n (keyup.enter)=\"onAccept($event)\"\n (newValue)=\"onHueInput($event)\" />\n <span class=\"color-picker__input-field-label\">H</span>\n </div>\n <div class=\"color-picker__input-field\">\n <input type=\"number\"\n pattern=\"[0-9]*\"\n min=\"0\"\n max=\"100\"\n cpText\n [rg]=\"100\"\n [value]=\"hslaText?.s\"\n (keyup.enter)=\"onAccept($event)\"\n (newValue)=\"onSaturationInput($event)\" />\n <span class=\"color-picker__input-field-label\">S</span>\n </div>\n <div class=\"color-picker__input-field\">\n <input type=\"number\"\n pattern=\"[0-9]*\"\n min=\"0\"\n max=\"100\"\n cpText\n [rg]=\"100\"\n [value]=\"hslaText?.l\"\n (keyup.enter)=\"onAccept($event)\"\n (newValue)=\"onLightnessInput($event)\" />\n <span class=\"color-picker__input-field-label\">L</span>\n </div>\n <div *ngIf=\"cpAlphaChannel != alphaChannel.disabled\"\n class=\"color-picker__input-field\">\n <input type=\"number\"\n pattern=\"[0-9]+([\\.,][0-9]{1,2})?\"\n min=\"0\"\n max=\"1\"\n step=\"0.1\"\n cpText\n [rg]=\"1\"\n [value]=\"hslaText?.a\"\n (keyup.enter)=\"onAccept($event)\"\n (newValue)=\"onAlphaInput($event)\" />\n <span class=\"color-picker__input-field-label\">A</span>\n </div>\n </ng-container>\n <ng-container *ngSwitchCase=\"colorFormat.rgba\">\n <div class=\"color-picker__input-field\">\n <input type=\"number\"\n pattern=\"[0-9]*\"\n min=\"0\"\n max=\"255\"\n cpText\n [rg]=\"255\"\n [value]=\"rgbaText?.r\"\n (keyup.enter)=\"onAccept($event)\"\n (newValue)=\"onRedInput($event)\" />\n <span class=\"color-picker__input-field-label\">R</span>\n </div>\n <div class=\"color-picker__input-field\">\n <input type=\"number\"\n pattern=\"[0-9]*\"\n min=\"0\"\n max=\"255\"\n cpText\n [rg]=\"255\"\n [value]=\"rgbaText?.g\"\n (keyup.enter)=\"onAccept($event)\"\n (newValue)=\"onGreenInput($event)\" />\n <span class=\"color-picker__input-field-label\">G</span>\n </div>\n <div class=\"color-picker__input-field\">\n <input type=\"number\"\n pattern=\"[0-9]*\"\n min=\"0\"\n max=\"255\"\n cpText\n [rg]=\"255\"\n [value]=\"rgbaText?.b\"\n (keyup.enter)=\"onAccept($event)\"\n (newValue)=\"onBlueInput($event)\" />\n <span class=\"color-picker__input-field-label\">B</span>\n </div>\n <div *ngIf=\"cpAlphaChannel != alphaChannel.disabled\"\n class=\"color-picker__input-field\">\n <input type=\"number\"\n pattern=\"[0-9]+([\\.,][0-9]{1,2})?\"\n min=\"0\"\n max=\"1\"\n step=\"0.1\"\n cpText\n [rg]=\"1\"\n [value]=\"hslaText?.a\"\n (keyup.enter)=\"onAccept($event)\"\n (newValue)=\"onAlphaInput($event)\" />\n <span class=\"color-picker__input-field-label\">A</span>\n </div>\n </ng-container>\n <ng-container *ngSwitchCase=\"colorFormat.cmyk\">\n <div class=\"color-picker__input-field\">\n <input type=\"number\"\n pattern=\"[0-9]*\"\n min=\"0\"\n max=\"100\"\n cpText\n [rg]=\"100\"\n [value]=\"cmykText?.c\"\n (keyup.enter)=\"onAccept($event)\"\n (newValue)=\"onCyanInput($event)\" />\n <span class=\"color-picker__input-field-label\">C</span>\n </div>\n <div class=\"color-picker__input-field\">\n <input type=\"number\"\n pattern=\"[0-9]*\"\n min=\"0\"\n max=\"100\"\n cpText\n [rg]=\"100\"\n [value]=\"cmykText?.m\"\n (keyup.enter)=\"onAccept($event)\"\n (newValue)=\"onMagentaInput($event)\" />\n <span class=\"color-picker__input-field-label\">M</span>\n </div>\n <div class=\"color-picker__input-field\">\n <input type=\"number\"\n pattern=\"[0-9]*\"\n min=\"0\"\n max=\"100\"\n cpText\n [rg]=\"100\"\n [value]=\"cmykText?.y\"\n (keyup.enter)=\"onAccept($event)\"\n (newValue)=\"onYellowInput($event)\" />\n <span class=\"color-picker__input-field-label\">Y</span>\n </div>\n <div class=\"color-picker__input-field\">\n <input type=\"number\"\n pattern=\"[0-9]*\"\n min=\"0\"\n max=\"100\"\n cpText\n [rg]=\"100\"\n [value]=\"cmykText?.k\"\n (keyup.enter)=\"onAccept($event)\"\n (newValue)=\"onBlackInput($event)\" />\n <span class=\"color-picker__input-field-label\">K</span>\n </div>\n <div *ngIf=\"cpAlphaChannel != alphaChannel.disabled\"\n class=\"color-picker__input-field\">\n <input type=\"number\"\n pattern=\"[0-9]+([\\.,][0-9]{1,2})?\"\n min=\"0\"\n max=\"1\"\n step=\"0.1\"\n cpText\n [rg]=\"1\"\n [value]=\"cmykText?.c\"\n (keyup.enter)=\"onAccept($event)\"\n (newValue)=\"onAlphaInput($event)\" />\n <span class=\"color-picker__input-field-label\">A</span>\n </div>\n </ng-container>\n <ng-container *ngSwitchDefault>\n <div class=\"color-picker__input-field\">\n <input cpText\n [value]=\"hexText\"\n (blur)=\"onHexInput(null)\"\n (keyup.enter)=\"onAccept($event)\"\n (newValue)=\"onHexInput($event)\" />\n <span class=\"color-picker__input-field-label\">Hex</span>\n </div>\n <div *ngIf=\"cpAlphaChannel == alphaChannel.forced\"\n class=\"color-picker__input-field\">\n <input type=\"number\"\n pattern=\"[0-9]+([\\.,][0-9]{1,2})?\"\n min=\"0\"\n max=\"1\"\n step=\"0.1\"\n cpText\n [rg]=\"1\"\n [value]=\"hexAlpha\"\n (keyup.enter)=\"onAccept($event)\"\n (newValue)=\"onAlphaInput($event)\" />\n <span class=\"color-picker__input-field-label\">A</span>\n </div>\n </ng-container>\n </ng-container>\n </ng-template>\n </div>\n <div *ngIf=\"cpMode == colorModeInternal.color\"\n class=\"color-picker__input-type\">\n <span class=\"color-picker__input-type-arrow\"\n (click)=\"onFormatToggle(1)\"></span>\n <span class=\"color-picker__input-type-arrow\"\n (click)=\"onFormatToggle(-1)\"></span>\n </div>\n </div>\n <ng-container *ngIf=\"cpPresetColors?.length\">\n <div class=\"color-picker__separator\"></div>\n <div class=\"color-picker__preset\">\n <div *ngIf=\"cpPresetLabel\"\n class=\"color-picker__preset-label\">\n <ng-container *ngIf=\"cpPresetLabel === true; else stringLabel\"\n i18n=\"@@nxt-color-picker.preset-colors\">Preset colors</ng-container>\n <ng-template #stringLabel>{{ cpPresetLabel }}</ng-template>\n </div>\n <div *ngIf=\"cpPresetColors?.length\"\n class=\"color-picker__preset-items\">\n <div *ngFor=\"let color of cpPresetColors\"\n class=\"color-picker__preset-item\"\n [title]=\"color\"\n (click)=\"setColorFromString(color)\">\n <div class=\"color-picker__preset-item-fill\"\n [ngStyle]=\"{ \n backgroundColor: color || ''\n }\"><button *ngIf=\"cpAddColorButton\"\n type=\"button\"\n title=\"Remove Color\"\n i18n-title=\"@@nxt-color-picker.button.remove-color\"\n class=\"color-picker__remove-selected\"\n (click)=\"onRemovePresetColor(color)\"><svg xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\">\n <path\n d=\"M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z\" />\n <path d=\"M0 0h24v24H0z\"\n fill=\"none\" />\n </svg></button></div>\n </div>\n <div *ngFor=\"let i of fill(50)\"\n class=\"color-picker__preset-item\"></div>\n </div>\n </div>\n </ng-container>\n <div *ngIf=\"cpOKButton || cpCancelButton\"\n class=\"color-picker__buttons\">\n <button *ngIf=\"cpCancelButton\"\n type=\"button\"\n (click)=\"onCancel($event)\"\n i18n=\"@@nxt-color-picker.button.cancel\">Cancel</button>\n <button *ngIf=\"cpOKButton\"\n type=\"button\"\n (click)=\"onAccept($event)\"\n i18n=\"@@nxt-color-picker.button.ok\">OK</button>\n </div>\n</div>\n", styles: [".color-picker{position:relative;-webkit-user-select:none;user-select:none;background-color:#fff;box-shadow:0 8px 10px 1px #00000024,0 3px 14px 2px #0000001f,0 5px 5px -3px #0003;display:flex;flex-direction:column}.color-picker *{box-sizing:border-box;margin:0;font-size:12px}.color-picker .color-picker__arrow{height:0;width:0;border-style:solid;position:absolute;z-index:999999}.color-picker .color-picker__cursor{cursor:pointer;position:absolute;border-radius:50%;width:16px;height:16px;border:#222222 solid 2px;margin:0 -8px;transition:border .2s linear}.color-picker .color-picker__cursor.color-picker__cursor--sv{margin:-8px}.color-picker .color-picker__cursor.color-picker__cursor--light{border-color:#dadada}.color-picker .color-picker__sv{position:relative;direction:ltr;width:100%;height:130px;border:none;cursor:pointer;touch-action:manipulation;background-image:linear-gradient(to bottom,rgba(0,0,0,0) 0%,rgb(0,0,0) 100%),linear-gradient(to right,rgb(255,255,255) 0%,rgba(255,255,255,0) 100%);background-size:100% 100%}.color-picker .color-picker__controls{display:flex;margin:8px;align-items:center}.color-picker .color-picker__controls .color-picker__selected{margin:4px;flex:48px 0 0}.color-picker .color-picker__controls .color-picker__hav{margin:-4px -4px -4px 0;flex:auto 1 1}.color-picker .color-picker__selected-color{width:48px;height:48px;display:flex;align-items:stretch;justify-content:stretch;border-radius:50%;background-size:16px;background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZlcnNpb249IjEuMSIgeD0iMCIgeT0iMCIgd2lkdGg9IjEwMCIgaGVpZ2h0PSIxMDAiIHZpZXdCb3g9IjAgMCAxMDAgMTAwIiBlbmFibGUtYmFja2dyb3VuZD0ibmV3IDAgMCAxMDAgMTAwIiB4bWw6c3BhY2U9InByZXNlcnZlIj48cmVjdCBmaWxsPSIjQ0NDQ0NDIiB3aWR0aD0iNTAiIGhlaWdodD0iNTAiLz48cmVjdCB4PSI1MCIgeT0iNTAiIGZpbGw9IiNDQ0NDQ0MiIHdpZHRoPSI1MCIgaGVpZ2h0PSI1MCIvPjxyZWN0IHk9IjUwIiBmaWxsPSIjRkZGRkZGIiB3aWR0aD0iNTAiIGhlaWdodD0iNTAiLz48cmVjdCB4PSI1MCIgZmlsbD0iI0ZGRkZGRiIgd2lkdGg9IjUwIiBoZWlnaHQ9IjUwIi8+PC9zdmc+);background-repeat:repeat;box-shadow:0 0 8px -2px #00000080}.color-picker .color-picker__selected-color div{width:100%;height:100%;border-radius:50%}.color-picker .color-picker__add-selected{background:none;border:none;padding:0;width:100%;margin:0;color:#222;transition:color .2s linear;display:flex;align-items:center;justify-content:center;height:100%}.color-picker .color-picker__add-selected svg{fill:currentcolor;width:24px;height:auto}.color-picker .color-picker__add-selected.color-picker__add-selected--light{color:#dadada}.color-picker .color-picker__hav{display:flex;flex-wrap:wrap}.color-picker .color-picker__slider{width:100%;flex:100% 1 1;height:16px;margin:8px;position:relative}.color-picker .color-picker__slider.color-picker__slider--hue{background-size:100% 100%;background-image:linear-gradient(to right,rgb(255,0,0) 0%,rgb(255,255,0) 16.6666666667%,rgb(0,255,0) 33.3333333333%,rgb(0,255,255) 50%,rgb(0,0,255) 66.6666666667%,rgb(255,0,255) 83.3333333333%,rgb(255,0,0) 100%)}.color-picker .color-picker__slider.color-picker__slider--value{background-size:100% 100%;background-image:linear-gradient(to right,rgb(0,0,0) 0%,rgb(255,255,255) 100%)}.color-picker .color-picker__slider.color-picker__slider--alpha{background-size:16px;background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZlcnNpb249IjEuMSIgeD0iMCIgeT0iMCIgd2lkdGg9IjEwMCIgaGVpZ2h0PSIxMDAiIHZpZXdCb3g9IjAgMCAxMDAgMTAwIiBlbmFibGUtYmFja2dyb3VuZD0ibmV3IDAgMCAxMDAgMTAwIiB4bWw6c3BhY2U9InByZXNlcnZlIj48cmVjdCBmaWxsPSIjQ0NDQ0NDIiB3aWR0aD0iNTAiIGhlaWdodD0iNTAiLz48cmVjdCB4PSI1MCIgeT0iNTAiIGZpbGw9IiNDQ0NDQ0MiIHdpZHRoPSI1MCIgaGVpZ2h0PSI1MCIvPjxyZWN0IHk9IjUwIiBmaWxsPSIjRkZGRkZGIiB3aWR0aD0iNTAiIGhlaWdodD0iNTAiLz48cmVjdCB4PSI1MCIgZmlsbD0iI0ZGRkZGRiIgd2lkdGg9IjUwIiBoZWlnaHQ9IjUwIi8+PC9zdmc+);background-repeat:repeat}.color-picker .color-picker__slider.color-picker__slider--alpha .color-picker__slider--alpha-bg{position:absolute;top:0;left:0;right:0;bottom:0}.color-picker .color-picker__inputs{display:flex;margin:8px;align-items:flex-start}.color-picker .color-picker__inputs .color-picker__input-fields{flex:auto 1 1}.color-picker .color-picker__inputs .color-picker__input-type{flex:24px 0 0}.color-picker .color-picker__input-fields{display:flex}.color-picker .color-picker__input-fields .color-picker__input-field{margin:4px;display:flex;flex-wrap:wrap;align-items:flex-start;justify-content:center;flex:20% 1 1}.color-picker .color-picker__input-fields .color-picker__input-field input{text-align:center;font-size:12px;height:24px;-webkit-appearance:none;appearance:none;flex:100% 1 1;padding:1px;border:#999 solid 1px;width:100%;background:none;min-width:0}.color-picker .color-picker__input-fields .color-picker__input-field input:invalid{box-shadow:none}.color-picker .color-picker__input-fields .color-picker__input-field input::-webkit-inner-spin-button,.color-picker .color-picker__input-fields .color-picker__input-field input::-webkit-outer-spin-button{-webkit-appearance:none;appearance:none;margin:0}.color-picker .color-picker__input-fields .color-picker__input-field .color-picker__input-field-label{flex:100% 1 1;display:block;text-align:center;margin-top:4px}.color-picker .color-picker__input-type{width:24px;height:24px;margin-top:4px;display:flex;flex-wrap:wrap;background-size:contain;background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZlcnNpb249IjEuMSIgeD0iMCIgeT0iMCIgd2lkdGg9IjEwMCIgaGVpZ2h0PSIxMDAiIHZpZXdCb3g9IjAgMCAxMDAgMTAwIiBlbmFibGUtYmFja2dyb3VuZD0ibmV3IDAgMCAxMDAgMTAwIiB4bWw6c3BhY2U9InByZXNlcnZlIj48cG9seWdvbiBmaWxsPSIjMzMzMzMzIiBwb2ludHM9IjUwIDE2IDMwIDQ0IDcwIDQ0ICIvPjxwb2x5Z29uIGZpbGw9IiMzMzMzMzMiIHBvaW50cz0iNTAgODQgNzAgNTYgMzAgNTYgIi8+PC9zdmc+);background-repeat:no-repeat;background-position:center}.color-picker .color-picker__input-type .color-picker__input-type-arrow{display:block;cursor:pointer;flex:100% 1 1;width:100%;height:50%}.color-picker .color-picker__separator{border-top:1px solid #999;margin-left:8px;margin-right:8px;flex:100% 1 1}.color-picker .color-picker__preset{display:flex;margin:8px;align-items:center;flex-wrap:wrap}.color-picker .color-picker__preset-label{margin:4px;flex:100% 1 1}.color-picker .color-picker__preset-items{display:flex;flex:100% 1 1;flex-wrap:wrap;align-items:flex-start}.color-picker .color-picker__preset-items .color-picker__preset-item{position:relative;flex:20px 1 1;background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZlcnNpb249IjEuMSIgeD0iMCIgeT0iMCIgd2lkdGg9IjEwMCIgaGVpZ2h0PSIxMDAiIHZpZXdCb3g9IjAgMCAxMDAgMTAwIiBlbmFibGUtYmFja2dyb3VuZD0ibmV3IDAgMCAxMDAgMTAwIiB4bWw6c3BhY2U9InByZXNlcnZlIj48cmVjdCBmaWxsPSIjQ0NDQ0NDIiB3aWR0aD0iNTAiIGhlaWdodD0iNTAiLz48cmVjdCB4PSI1MCIgeT0iNTAiIGZpbGw9IiNDQ0NDQ0MiIHdpZHRoPSI1MCIgaGVpZ2h0PSI1MCIvPjxyZWN0IHk9IjUwIiBmaWxsPSIjRkZGRkZGIiB3aWR0aD0iNTAiIGhlaWdodD0iNTAiLz48cmVjdCB4PSI1MCIgZmlsbD0iI0ZGRkZGRiIgd2lkdGg9IjUwIiBoZWlnaHQ9IjUwIi8+PC9zdmc+);background-size:100% 100%;margin:4px;border-radius:4px;border:1px solid #999;cursor:pointer}.color-picker .color-picker__preset-items .color-picker__preset-item .color-picker__preset-item-fill{position:relative;width:100%;padding-bottom:100%;border-radius:3px}.color-picker .color-picker__preset-items .color-picker__preset-item:empty{margin-top:0;margin-bottom:0;border-top:0;border-bottom:0}.color-picker .color-picker__remove-selected{border:none;padding:0;margin:0;color:#222;transition:color .2s linear;align-items:center;justify-content:center;box-shadow:0 0 8px -2px #00000080;position:absolute;width:12px;height:12px;right:-6px;top:-6px;background:#fff;border-radius:50%;display:flex}.color-picker .color-picker__remove-selected svg{fill:currentcolor;width:100%;height:auto}.color-picker .color-picker__buttons{display:flex;margin:0 8px 8px;align-items:center;flex-wrap:wrap;justify-content:flex-end}.color-picker .color-picker__buttons button{flex:auto 0 0;margin:4px}:host-context(.color-picker__arrow--top) .color-picker{margin-bottom:16px}:host-context(.color-picker__arrow--top) .color-picker__arrow{border-width:12px 6px;border-color:#999 rgba(0,0,0,0) rgba(0,0,0,0) rgba(0,0,0,0);left:12px;bottom:-24px}:host-context(.color-picker__arrow--left) .color-picker{margin-right:16px}:host-context(.color-picker__arrow--left) .color-picker__arrow{border-width:6px 12px;border-color:rgba(0,0,0,0) rgba(0,0,0,0) rgba(0,0,0,0) #999;top:12px;left:230px}:host-context(.color-picker__arrow--right) .color-picker{margin-left:16px}:host-context(.color-picker__arrow--right) .color-picker__arrow{border-width:6px 12px;border-color:rgba(0,0,0,0) #999 rgba(0,0,0,0) rgba(0,0,0,0);top:12px;left:-24px}:host-context(.color-picker__arrow--bottom) .color-picker{margin-top:16px}:host-context(.color-picker__arrow--bottom) .color-picker__arrow{border-width:12px 6px;border-color:rgba(0,0,0,0) rgba(0,0,0,0) #999 rgba(0,0,0,0);top:-24px;left:12px}\n"], dependencies: [{ kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: i2.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i2.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "directive", type: i2.NgSwitchDefault, selector: "[ngSwitchDefault]" }, { kind: "directive", type: i3.TextDirective, selector: "[cpText]", inputs: ["rg", "text"], outputs: ["newValue"] }, { kind: "directive", type: i4.SliderDirective, selector: "[cpSlider]", inputs: ["rgX", "rgY", "slider"], outputs: ["dragEnd", "dragStart", "newValue"] }] });
|
|
575
|
+
ColorPickerComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.1.2", type: ColorPickerComponent, selector: "cp-color-picker", host: { listeners: { "document:keyup.esc": "onCancel($event)", "document:keyup.enter": "onAccept($event)", "document:mousedown": "onFocusChange($event)", "document:focusin": "onFocusChange($event)" } }, ngImport: i0, template: "<div class=\"color-picker\"\n (click)=\"$event.stopPropagation()\"\n [ngStyle]=\"{\n visibility: !show ? 'hidden' : 'visible',\n width: cpWidth || '',\n height: cpHeight || ''\n }\"\n *ngIf=\"show\">\n <div *ngIf=\"cpDialogDisplay == dialogDisplay.popup\"\n class=\"color-picker__arrow\"\n [ngClass]=\"'color-picker__arrow--' + cpPosition\"></div>\n <div *ngIf=\"cpMode == colorModeInternal.color\"\n class=\"color-picker__sv\"\n cpSlider\n [rgX]=\"1\"\n [rgY]=\"1\"\n (newValue)=\"onColorChange($event)\"\n (dragStart)=\"onDragStart('saturation-lightness')\"\n (dragEnd)=\"onDragEnd('saturation-lightness')\"\n [ngStyle]=\"{ \n backgroundColor: hueSliderColor || ''\n }\">\n <div class=\"color-picker__cursor color-picker__cursor--sv\"\n [ngClass]=\"{ 'color-picker__cursor--light': svSliderLight }\"\n [ngStyle]=\"{\n top: (slider?.v || 0) * 100 + '%',\n left: (slider?.s || 0) * 100 + '%'\n }\"></div>\n </div>\n <div class=\"color-picker__controls\">\n <div class=\"color-picker__selected\">\n <div class=\"color-picker__selected-color\">\n <div [ngStyle]=\"{ \n backgroundColor: selectedColor || ''\n }\"><button\n *ngIf=\"cpAddColorButton && !(cpMaxPresetColors && (cpPresetColors?.length || 0) >= cpMaxPresetColors)\"\n type=\"button\"\n title=\"Add color to preset\"\n i18n-title=\"@@nxt-color-picker.button.add-color\"\n class=\"color-picker__add-selected\"\n [ngClass]=\"{ 'color-picker__add-selected--light': alphaSliderLight }\"\n (click)=\"onAddPresetColor(selectedColor)\"><svg xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\">\n <path d=\"M19 13h-6v6h-2v-6H5v-2h6V5h2v6h6v2z\" />\n <path d=\"M0 0h24v24H0z\"\n fill=\"none\" />\n </svg></button></div>\n </div>\n </div>\n <div class=\"color-picker__hav\">\n <div *ngIf=\"cpMode == colorModeInternal.color\"\n class=\"color-picker__slider color-picker__slider--hue\"\n cpSlider\n [rgX]=\"1\"\n (newValue)=\"onHueChange($event)\"\n (dragStart)=\"onDragStart('hue')\"\n (dragEnd)=\"onDragEnd('hue')\">\n <div class=\"color-picker__cursor\"\n [ngClass]=\"{ 'color-picker__cursor--light': hueSliderLight }\"\n [ngStyle]=\"{\n left: (slider?.h || 0) * 100 + '%'\n }\"></div>\n </div>\n <div *ngIf=\"cpMode == colorModeInternal.grayscale\"\n class=\"color-picker__slider color-picker__slider--value\"\n cpSlider\n [rgX]=\"1\"\n (newValue)=\"onValueChange($event)\"\n (dragStart)=\"onDragStart('value')\"\n (dragEnd)=\"onDragEnd('value')\">\n <div class=\"color-picker__cursor\"\n [ngClass]=\"{ 'color-picker__cursor--light': valueSliderLight }\"\n [ngStyle]=\"{\n left: (1 - (slider?.v || 0)) * 100 + '%'\n }\"></div>\n </div>\n <div *ngIf=\"cpAlphaChannel != alphaChannel.disabled\"\n class=\"color-picker__slider color-picker__slider--alpha\"\n cpSlider\n [rgX]=\"1\"\n (newValue)=\"onAlphaChange($event)\"\n (dragStart)=\"onDragStart('alpha')\"\n (dragEnd)=\"onDragEnd('alpha')\">\n <div class=\"color-picker__slider--alpha-bg\"\n [ngStyle]=\"{\n backgroundImage: alphaSliderColor || ''\n }\">\n <div class=\"color-picker__cursor\"\n [ngClass]=\"{ 'color-picker__cursor--light': alphaSliderLight }\"\n [ngStyle]=\"{\n left: (slider?.a || 0) * 100 + '%'\n }\"></div>\n </div>\n </div>\n </div>\n </div>\n <div *ngIf=\"!cpDisableInput && (cpMode == colorModeInternal.color || cpMode == colorModeInternal.grayscale)\"\n class=\"color-picker__inputs\">\n <div class=\"color-picker__input-fields\">\n <ng-container *ngIf=\"cpMode == colorModeInternal.grayscale; else formatSwitch\">\n <div class=\"color-picker__input-field\">\n <input type=\"number\"\n pattern=\"[0-9]*\"\n min=\"0\"\n max=\"100\"\n cpText\n [rg]=\"100\"\n [value]=\"hslaText?.l\"\n (keyup.enter)=\"onAccept($event)\"\n (newValue)=\"onValueInput($event)\" />\n <span class=\"color-picker__input-field-label\">V</span>\n </div>\n <div *ngIf=\"cpAlphaChannel != alphaChannel.disabled\"\n class=\"color-picker__input-field\">\n <input type=\"number\"\n pattern=\"[0-9]+([\\.,][0-9]{1,2})?\"\n min=\"0\"\n max=\"1\"\n step=\"0.1\"\n cpText\n [rg]=\"1\"\n [value]=\"hslaText?.a\"\n (keyup.enter)=\"onAccept($event)\"\n (newValue)=\"onAlphaInput($event)\" />\n <span class=\"color-picker__input-field-label\">A</span>\n </div>\n </ng-container>\n <ng-template #formatSwitch>\n <ng-container [ngSwitch]=\"format\">\n <ng-container *ngSwitchCase=\"colorFormat.hsla\">\n <div class=\"color-picker__input-field\">\n <input type=\"number\"\n pattern=\"[0-9]*\"\n min=\"0\"\n max=\"360\"\n cpText\n [rg]=\"360\"\n [value]=\"hslaText?.h\"\n (keyup.enter)=\"onAccept($event)\"\n (newValue)=\"onHueInput($event)\" />\n <span class=\"color-picker__input-field-label\">H</span>\n </div>\n <div class=\"color-picker__input-field\">\n <input type=\"number\"\n pattern=\"[0-9]*\"\n min=\"0\"\n max=\"100\"\n cpText\n [rg]=\"100\"\n [value]=\"hslaText?.s\"\n (keyup.enter)=\"onAccept($event)\"\n (newValue)=\"onSaturationInput($event)\" />\n <span class=\"color-picker__input-field-label\">S</span>\n </div>\n <div class=\"color-picker__input-field\">\n <input type=\"number\"\n pattern=\"[0-9]*\"\n min=\"0\"\n max=\"100\"\n cpText\n [rg]=\"100\"\n [value]=\"hslaText?.l\"\n (keyup.enter)=\"onAccept($event)\"\n (newValue)=\"onLightnessInput($event)\" />\n <span class=\"color-picker__input-field-label\">L</span>\n </div>\n <div *ngIf=\"cpAlphaChannel != alphaChannel.disabled\"\n class=\"color-picker__input-field\">\n <input type=\"number\"\n pattern=\"[0-9]+([\\.,][0-9]{1,2})?\"\n min=\"0\"\n max=\"1\"\n step=\"0.1\"\n cpText\n [rg]=\"1\"\n [value]=\"hslaText?.a\"\n (keyup.enter)=\"onAccept($event)\"\n (newValue)=\"onAlphaInput($event)\" />\n <span class=\"color-picker__input-field-label\">A</span>\n </div>\n </ng-container>\n <ng-container *ngSwitchCase=\"colorFormat.rgba\">\n <div class=\"color-picker__input-field\">\n <input type=\"number\"\n pattern=\"[0-9]*\"\n min=\"0\"\n max=\"255\"\n cpText\n [rg]=\"255\"\n [value]=\"rgbaText?.r\"\n (keyup.enter)=\"onAccept($event)\"\n (newValue)=\"onRedInput($event)\" />\n <span class=\"color-picker__input-field-label\">R</span>\n </div>\n <div class=\"color-picker__input-field\">\n <input type=\"number\"\n pattern=\"[0-9]*\"\n min=\"0\"\n max=\"255\"\n cpText\n [rg]=\"255\"\n [value]=\"rgbaText?.g\"\n (keyup.enter)=\"onAccept($event)\"\n (newValue)=\"onGreenInput($event)\" />\n <span class=\"color-picker__input-field-label\">G</span>\n </div>\n <div class=\"color-picker__input-field\">\n <input type=\"number\"\n pattern=\"[0-9]*\"\n min=\"0\"\n max=\"255\"\n cpText\n [rg]=\"255\"\n [value]=\"rgbaText?.b\"\n (keyup.enter)=\"onAccept($event)\"\n (newValue)=\"onBlueInput($event)\" />\n <span class=\"color-picker__input-field-label\">B</span>\n </div>\n <div *ngIf=\"cpAlphaChannel != alphaChannel.disabled\"\n class=\"color-picker__input-field\">\n <input type=\"number\"\n pattern=\"[0-9]+([\\.,][0-9]{1,2})?\"\n min=\"0\"\n max=\"1\"\n step=\"0.1\"\n cpText\n [rg]=\"1\"\n [value]=\"hslaText?.a\"\n (keyup.enter)=\"onAccept($event)\"\n (newValue)=\"onAlphaInput($event)\" />\n <span class=\"color-picker__input-field-label\">A</span>\n </div>\n </ng-container>\n <ng-container *ngSwitchCase=\"colorFormat.cmyk\">\n <div class=\"color-picker__input-field\">\n <input type=\"number\"\n pattern=\"[0-9]*\"\n min=\"0\"\n max=\"100\"\n cpText\n [rg]=\"100\"\n [value]=\"cmykText?.c\"\n (keyup.enter)=\"onAccept($event)\"\n (newValue)=\"onCyanInput($event)\" />\n <span class=\"color-picker__input-field-label\">C</span>\n </div>\n <div class=\"color-picker__input-field\">\n <input type=\"number\"\n pattern=\"[0-9]*\"\n min=\"0\"\n max=\"100\"\n cpText\n [rg]=\"100\"\n [value]=\"cmykText?.m\"\n (keyup.enter)=\"onAccept($event)\"\n (newValue)=\"onMagentaInput($event)\" />\n <span class=\"color-picker__input-field-label\">M</span>\n </div>\n <div class=\"color-picker__input-field\">\n <input type=\"number\"\n pattern=\"[0-9]*\"\n min=\"0\"\n max=\"100\"\n cpText\n [rg]=\"100\"\n [value]=\"cmykText?.y\"\n (keyup.enter)=\"onAccept($event)\"\n (newValue)=\"onYellowInput($event)\" />\n <span class=\"color-picker__input-field-label\">Y</span>\n </div>\n <div class=\"color-picker__input-field\">\n <input type=\"number\"\n pattern=\"[0-9]*\"\n min=\"0\"\n max=\"100\"\n cpText\n [rg]=\"100\"\n [value]=\"cmykText?.k\"\n (keyup.enter)=\"onAccept($event)\"\n (newValue)=\"onBlackInput($event)\" />\n <span class=\"color-picker__input-field-label\">K</span>\n </div>\n <div *ngIf=\"cpAlphaChannel != alphaChannel.disabled\"\n class=\"color-picker__input-field\">\n <input type=\"number\"\n pattern=\"[0-9]+([\\.,][0-9]{1,2})?\"\n min=\"0\"\n max=\"1\"\n step=\"0.1\"\n cpText\n [rg]=\"1\"\n [value]=\"cmykText?.c\"\n (keyup.enter)=\"onAccept($event)\"\n (newValue)=\"onAlphaInput($event)\" />\n <span class=\"color-picker__input-field-label\">A</span>\n </div>\n </ng-container>\n <ng-container *ngSwitchDefault>\n <div class=\"color-picker__input-field\">\n <input cpText\n [value]=\"hexText\"\n (blur)=\"onHexInput(null)\"\n (keyup.enter)=\"onAccept($event)\"\n (newValue)=\"onHexInput($event)\" />\n <span class=\"color-picker__input-field-label\">Hex</span>\n </div>\n <div *ngIf=\"cpAlphaChannel == alphaChannel.forced\"\n class=\"color-picker__input-field\">\n <input type=\"number\"\n pattern=\"[0-9]+([\\.,][0-9]{1,2})?\"\n min=\"0\"\n max=\"1\"\n step=\"0.1\"\n cpText\n [rg]=\"1\"\n [value]=\"hexAlpha\"\n (keyup.enter)=\"onAccept($event)\"\n (newValue)=\"onAlphaInput($event)\" />\n <span class=\"color-picker__input-field-label\">A</span>\n </div>\n </ng-container>\n </ng-container>\n </ng-template>\n </div>\n <div *ngIf=\"cpMode == colorModeInternal.color\"\n class=\"color-picker__input-type\">\n <span class=\"color-picker__input-type-arrow\"\n (click)=\"onFormatToggle(1)\"></span>\n <span class=\"color-picker__input-type-arrow\"\n (click)=\"onFormatToggle(-1)\"></span>\n </div>\n </div>\n <ng-container *ngIf=\"cpPresetColors?.length\">\n <div class=\"color-picker__separator\"></div>\n <div class=\"color-picker__preset\">\n <div *ngIf=\"cpPresetLabel\"\n class=\"color-picker__preset-label\">\n <ng-container *ngIf=\"cpPresetLabel === true; else stringLabel\"\n i18n=\"@@nxt-color-picker.preset-colors\">Preset colors</ng-container>\n <ng-template #stringLabel>{{ cpPresetLabel }}</ng-template>\n </div>\n <div *ngIf=\"cpPresetColors?.length\"\n class=\"color-picker__preset-items\">\n <ng-container *ngFor=\"let color of cpPresetColors\">\n <div *ngIf=\"stringToRgba(color) as rgba\"\n class=\"color-picker__preset-item\"\n [title]=\"color\"\n (click)=\"setColorFromString(color)\">\n <div class=\"color-picker__preset-item-fill\"\n [ngStyle]=\"{ \n backgroundColor: rgba || ''\n }\"><button *ngIf=\"cpAddColorButton\"\n type=\"button\"\n title=\"Remove Color\"\n i18n-title=\"@@nxt-color-picker.button.remove-color\"\n class=\"color-picker__remove-selected\"\n (click)=\"onRemovePresetColor(color)\"><svg xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\">\n <path\n d=\"M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z\" />\n <path d=\"M0 0h24v24H0z\"\n fill=\"none\" />\n </svg></button></div>\n </div>\n </ng-container>\n <div *ngFor=\"let i of fill(50)\"\n class=\"color-picker__preset-item\"></div>\n </div>\n </div>\n </ng-container>\n <div *ngIf=\"cpOKButton || cpCancelButton\"\n class=\"color-picker__buttons\">\n <button *ngIf=\"cpCancelButton\"\n type=\"button\"\n (click)=\"onCancel($event)\"\n i18n=\"@@nxt-color-picker.button.cancel\">Cancel</button>\n <button *ngIf=\"cpOKButton\"\n type=\"button\"\n (click)=\"onAccept($event)\"\n i18n=\"@@nxt-color-picker.button.ok\">OK</button>\n </div>\n</div>\n", styles: [".color-picker{position:relative;-webkit-user-select:none;user-select:none;background-color:#fff;box-shadow:0 8px 10px 1px #00000024,0 3px 14px 2px #0000001f,0 5px 5px -3px #0003;display:flex;flex-direction:column}.color-picker *{box-sizing:border-box;margin:0;font-size:12px}.color-picker .color-picker__arrow{height:0;width:0;border-style:solid;position:absolute;z-index:999999}.color-picker .color-picker__cursor{cursor:pointer;position:absolute;border-radius:50%;width:16px;height:16px;border:#222222 solid 2px;margin:0 -8px;transition:border .2s linear}.color-picker .color-picker__cursor.color-picker__cursor--sv{margin:-8px}.color-picker .color-picker__cursor.color-picker__cursor--light{border-color:#dadada}.color-picker .color-picker__sv{position:relative;direction:ltr;width:100%;height:130px;border:none;cursor:pointer;touch-action:manipulation;background-image:linear-gradient(to bottom,rgba(0,0,0,0) 0%,rgb(0,0,0) 100%),linear-gradient(to right,rgb(255,255,255) 0%,rgba(255,255,255,0) 100%);background-size:100% 100%}.color-picker .color-picker__controls{display:flex;margin:8px;align-items:center}.color-picker .color-picker__controls .color-picker__selected{margin:4px;flex:48px 0 0}.color-picker .color-picker__controls .color-picker__hav{margin:-4px -4px -4px 0;flex:auto 1 1}.color-picker .color-picker__selected-color{width:48px;height:48px;display:flex;align-items:stretch;justify-content:stretch;border-radius:50%;background-size:16px;background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZlcnNpb249IjEuMSIgeD0iMCIgeT0iMCIgd2lkdGg9IjEwMCIgaGVpZ2h0PSIxMDAiIHZpZXdCb3g9IjAgMCAxMDAgMTAwIiBlbmFibGUtYmFja2dyb3VuZD0ibmV3IDAgMCAxMDAgMTAwIiB4bWw6c3BhY2U9InByZXNlcnZlIj48cmVjdCBmaWxsPSIjQ0NDQ0NDIiB3aWR0aD0iNTAiIGhlaWdodD0iNTAiLz48cmVjdCB4PSI1MCIgeT0iNTAiIGZpbGw9IiNDQ0NDQ0MiIHdpZHRoPSI1MCIgaGVpZ2h0PSI1MCIvPjxyZWN0IHk9IjUwIiBmaWxsPSIjRkZGRkZGIiB3aWR0aD0iNTAiIGhlaWdodD0iNTAiLz48cmVjdCB4PSI1MCIgZmlsbD0iI0ZGRkZGRiIgd2lkdGg9IjUwIiBoZWlnaHQ9IjUwIi8+PC9zdmc+);background-repeat:repeat;box-shadow:0 0 8px -2px #00000080}.color-picker .color-picker__selected-color div{width:100%;height:100%;border-radius:50%}.color-picker .color-picker__add-selected{background:none;border:none;padding:0;width:100%;margin:0;color:#222;transition:color .2s linear;display:flex;align-items:center;justify-content:center;height:100%}.color-picker .color-picker__add-selected svg{fill:currentcolor;width:24px;height:auto}.color-picker .color-picker__add-selected.color-picker__add-selected--light{color:#dadada}.color-picker .color-picker__hav{display:flex;flex-wrap:wrap}.color-picker .color-picker__slider{width:100%;flex:100% 1 1;height:16px;margin:8px;position:relative}.color-picker .color-picker__slider.color-picker__slider--hue{background-size:100% 100%;background-image:linear-gradient(to right,rgb(255,0,0) 0%,rgb(255,255,0) 16.6666666667%,rgb(0,255,0) 33.3333333333%,rgb(0,255,255) 50%,rgb(0,0,255) 66.6666666667%,rgb(255,0,255) 83.3333333333%,rgb(255,0,0) 100%)}.color-picker .color-picker__slider.color-picker__slider--value{background-size:100% 100%;background-image:linear-gradient(to right,rgb(0,0,0) 0%,rgb(255,255,255) 100%)}.color-picker .color-picker__slider.color-picker__slider--alpha{background-size:16px;background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZlcnNpb249IjEuMSIgeD0iMCIgeT0iMCIgd2lkdGg9IjEwMCIgaGVpZ2h0PSIxMDAiIHZpZXdCb3g9IjAgMCAxMDAgMTAwIiBlbmFibGUtYmFja2dyb3VuZD0ibmV3IDAgMCAxMDAgMTAwIiB4bWw6c3BhY2U9InByZXNlcnZlIj48cmVjdCBmaWxsPSIjQ0NDQ0NDIiB3aWR0aD0iNTAiIGhlaWdodD0iNTAiLz48cmVjdCB4PSI1MCIgeT0iNTAiIGZpbGw9IiNDQ0NDQ0MiIHdpZHRoPSI1MCIgaGVpZ2h0PSI1MCIvPjxyZWN0IHk9IjUwIiBmaWxsPSIjRkZGRkZGIiB3aWR0aD0iNTAiIGhlaWdodD0iNTAiLz48cmVjdCB4PSI1MCIgZmlsbD0iI0ZGRkZGRiIgd2lkdGg9IjUwIiBoZWlnaHQ9IjUwIi8+PC9zdmc+);background-repeat:repeat}.color-picker .color-picker__slider.color-picker__slider--alpha .color-picker__slider--alpha-bg{position:absolute;top:0;left:0;right:0;bottom:0}.color-picker .color-picker__inputs{display:flex;margin:8px;align-items:flex-start}.color-picker .color-picker__inputs .color-picker__input-fields{flex:auto 1 1}.color-picker .color-picker__inputs .color-picker__input-type{flex:24px 0 0}.color-picker .color-picker__input-fields{display:flex}.color-picker .color-picker__input-fields .color-picker__input-field{margin:4px;display:flex;flex-wrap:wrap;align-items:flex-start;justify-content:center;flex:20% 1 1}.color-picker .color-picker__input-fields .color-picker__input-field input{text-align:center;font-size:12px;height:24px;-webkit-appearance:none;appearance:none;flex:100% 1 1;padding:1px;border:#999 solid 1px;width:100%;background:none;min-width:0}.color-picker .color-picker__input-fields .color-picker__input-field input:invalid{box-shadow:none}.color-picker .color-picker__input-fields .color-picker__input-field input::-webkit-inner-spin-button,.color-picker .color-picker__input-fields .color-picker__input-field input::-webkit-outer-spin-button{-webkit-appearance:none;appearance:none;margin:0}.color-picker .color-picker__input-fields .color-picker__input-field .color-picker__input-field-label{flex:100% 1 1;display:block;text-align:center;margin-top:4px}.color-picker .color-picker__input-type{width:24px;height:24px;margin-top:4px;display:flex;flex-wrap:wrap;background-size:contain;background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZlcnNpb249IjEuMSIgeD0iMCIgeT0iMCIgd2lkdGg9IjEwMCIgaGVpZ2h0PSIxMDAiIHZpZXdCb3g9IjAgMCAxMDAgMTAwIiBlbmFibGUtYmFja2dyb3VuZD0ibmV3IDAgMCAxMDAgMTAwIiB4bWw6c3BhY2U9InByZXNlcnZlIj48cG9seWdvbiBmaWxsPSIjMzMzMzMzIiBwb2ludHM9IjUwIDE2IDMwIDQ0IDcwIDQ0ICIvPjxwb2x5Z29uIGZpbGw9IiMzMzMzMzMiIHBvaW50cz0iNTAgODQgNzAgNTYgMzAgNTYgIi8+PC9zdmc+);background-repeat:no-repeat;background-position:center}.color-picker .color-picker__input-type .color-picker__input-type-arrow{display:block;cursor:pointer;flex:100% 1 1;width:100%;height:50%}.color-picker .color-picker__separator{border-top:1px solid #999;margin-left:8px;margin-right:8px;flex:100% 1 1}.color-picker .color-picker__preset{display:flex;margin:8px;align-items:center;flex-wrap:wrap}.color-picker .color-picker__preset-label{margin:4px;flex:100% 1 1}.color-picker .color-picker__preset-items{display:flex;flex:100% 1 1;flex-wrap:wrap;align-items:flex-start}.color-picker .color-picker__preset-items .color-picker__preset-item{position:relative;flex:20px 1 1;background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZlcnNpb249IjEuMSIgeD0iMCIgeT0iMCIgd2lkdGg9IjEwMCIgaGVpZ2h0PSIxMDAiIHZpZXdCb3g9IjAgMCAxMDAgMTAwIiBlbmFibGUtYmFja2dyb3VuZD0ibmV3IDAgMCAxMDAgMTAwIiB4bWw6c3BhY2U9InByZXNlcnZlIj48cmVjdCBmaWxsPSIjQ0NDQ0NDIiB3aWR0aD0iNTAiIGhlaWdodD0iNTAiLz48cmVjdCB4PSI1MCIgeT0iNTAiIGZpbGw9IiNDQ0NDQ0MiIHdpZHRoPSI1MCIgaGVpZ2h0PSI1MCIvPjxyZWN0IHk9IjUwIiBmaWxsPSIjRkZGRkZGIiB3aWR0aD0iNTAiIGhlaWdodD0iNTAiLz48cmVjdCB4PSI1MCIgZmlsbD0iI0ZGRkZGRiIgd2lkdGg9IjUwIiBoZWlnaHQ9IjUwIi8+PC9zdmc+);background-size:100% 100%;margin:4px;border-radius:4px;border:1px solid #999;cursor:pointer}.color-picker .color-picker__preset-items .color-picker__preset-item .color-picker__preset-item-fill{position:relative;width:100%;padding-bottom:100%;border-radius:3px}.color-picker .color-picker__preset-items .color-picker__preset-item:empty{margin-top:0;margin-bottom:0;border-top:0;border-bottom:0}.color-picker .color-picker__remove-selected{border:none;padding:0;margin:0;color:#222;transition:color .2s linear;align-items:center;justify-content:center;box-shadow:0 0 8px -2px #00000080;position:absolute;width:12px;height:12px;right:-6px;top:-6px;background:#fff;border-radius:50%;display:flex}.color-picker .color-picker__remove-selected svg{fill:currentcolor;width:100%;height:auto}.color-picker .color-picker__buttons{display:flex;margin:0 8px 8px;align-items:center;flex-wrap:wrap;justify-content:flex-end}.color-picker .color-picker__buttons button{flex:auto 0 0;margin:4px}:host-context(.color-picker__arrow--top) .color-picker{margin-bottom:16px}:host-context(.color-picker__arrow--top) .color-picker__arrow{border-width:12px 6px;border-color:#999 rgba(0,0,0,0) rgba(0,0,0,0) rgba(0,0,0,0);left:12px;bottom:-24px}:host-context(.color-picker__arrow--left) .color-picker{margin-right:16px}:host-context(.color-picker__arrow--left) .color-picker__arrow{border-width:6px 12px;border-color:rgba(0,0,0,0) rgba(0,0,0,0) rgba(0,0,0,0) #999;top:12px;left:230px}:host-context(.color-picker__arrow--right) .color-picker{margin-left:16px}:host-context(.color-picker__arrow--right) .color-picker__arrow{border-width:6px 12px;border-color:rgba(0,0,0,0) #999 rgba(0,0,0,0) rgba(0,0,0,0);top:12px;left:-24px}:host-context(.color-picker__arrow--bottom) .color-picker{margin-top:16px}:host-context(.color-picker__arrow--bottom) .color-picker__arrow{border-width:12px 6px;border-color:rgba(0,0,0,0) rgba(0,0,0,0) #999 rgba(0,0,0,0);top:-24px;left:12px}\n"], dependencies: [{ kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: i2.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i2.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "directive", type: i2.NgSwitchDefault, selector: "[ngSwitchDefault]" }, { kind: "directive", type: i3.TextDirective, selector: "[cpText]", inputs: ["rg", "text"], outputs: ["newValue"] }, { kind: "directive", type: i4.SliderDirective, selector: "[cpSlider]", inputs: ["rgX", "rgY", "slider"], outputs: ["dragEnd", "dragStart", "newValue"] }] });
|
|
570
576
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.2", ngImport: i0, type: ColorPickerComponent, decorators: [{
|
|
571
577
|
type: Component,
|
|
572
|
-
args: [{ selector: 'cp-color-picker', encapsulation: ViewEncapsulation.Emulated, template: "<div class=\"color-picker\"\n (click)=\"$event.stopPropagation()\"\n [ngStyle]=\"{\n visibility: !show ? 'hidden' : 'visible',\n width: cpWidth || '',\n height: cpHeight || ''\n }\"\n *ngIf=\"show\">\n <div *ngIf=\"cpDialogDisplay == dialogDisplay.popup\"\n class=\"color-picker__arrow\"\n [ngClass]=\"'color-picker__arrow--' + cpPosition\"></div>\n <div *ngIf=\"cpMode == colorModeInternal.color\"\n class=\"color-picker__sv\"\n cpSlider\n [rgX]=\"1\"\n [rgY]=\"1\"\n (newValue)=\"onColorChange($event)\"\n (dragStart)=\"onDragStart('saturation-lightness')\"\n (dragEnd)=\"onDragEnd('saturation-lightness')\"\n [ngStyle]=\"{ \n backgroundColor: hueSliderColor || ''\n }\">\n <div class=\"color-picker__cursor color-picker__cursor--sv\"\n [ngClass]=\"{ 'color-picker__cursor--light': svSliderLight }\"\n [ngStyle]=\"{\n top: (slider?.v || 0) * 100 + '%',\n left: (slider?.s || 0) * 100 + '%'\n }\"></div>\n </div>\n <div class=\"color-picker__controls\">\n <div class=\"color-picker__selected\">\n <div class=\"color-picker__selected-color\">\n <div [ngStyle]=\"{ \n backgroundColor: selectedColor || ''\n }\"><button\n *ngIf=\"cpAddColorButton && !(cpMaxPresetColors && (cpPresetColors?.length || 0) >= cpMaxPresetColors)\"\n type=\"button\"\n title=\"Add color to preset\"\n i18n-title=\"@@nxt-color-picker.button.add-color\"\n class=\"color-picker__add-selected\"\n [ngClass]=\"{ 'color-picker__add-selected--light': alphaSliderLight }\"\n (click)=\"onAddPresetColor(selectedColor)\"><svg xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\">\n <path d=\"M19 13h-6v6h-2v-6H5v-2h6V5h2v6h6v2z\" />\n <path d=\"M0 0h24v24H0z\"\n fill=\"none\" />\n </svg></button></div>\n </div>\n </div>\n <div class=\"color-picker__hav\">\n <div *ngIf=\"cpMode == colorModeInternal.color\"\n class=\"color-picker__slider color-picker__slider--hue\"\n cpSlider\n [rgX]=\"1\"\n (newValue)=\"onHueChange($event)\"\n (dragStart)=\"onDragStart('hue')\"\n (dragEnd)=\"onDragEnd('hue')\">\n <div class=\"color-picker__cursor\"\n [ngClass]=\"{ 'color-picker__cursor--light': hueSliderLight }\"\n [ngStyle]=\"{\n left: (slider?.h || 0) * 100 + '%'\n }\"></div>\n </div>\n <div *ngIf=\"cpMode == colorModeInternal.grayscale\"\n class=\"color-picker__slider color-picker__slider--value\"\n cpSlider\n [rgX]=\"1\"\n (newValue)=\"onValueChange($event)\"\n (dragStart)=\"onDragStart('value')\"\n (dragEnd)=\"onDragEnd('value')\">\n <div class=\"color-picker__cursor\"\n [ngClass]=\"{ 'color-picker__cursor--light': valueSliderLight }\"\n [ngStyle]=\"{\n left: (1 - (slider?.v || 0)) * 100 + '%'\n }\"></div>\n </div>\n <div *ngIf=\"cpAlphaChannel != alphaChannel.disabled\"\n class=\"color-picker__slider color-picker__slider--alpha\"\n cpSlider\n [rgX]=\"1\"\n (newValue)=\"onAlphaChange($event)\"\n (dragStart)=\"onDragStart('alpha')\"\n (dragEnd)=\"onDragEnd('alpha')\">\n <div class=\"color-picker__slider--alpha-bg\"\n [ngStyle]=\"{\n backgroundImage: alphaSliderColor || ''\n }\">\n <div class=\"color-picker__cursor\"\n [ngClass]=\"{ 'color-picker__cursor--light': alphaSliderLight }\"\n [ngStyle]=\"{\n left: (slider?.a || 0) * 100 + '%'\n }\"></div>\n </div>\n </div>\n </div>\n </div>\n <div *ngIf=\"!cpDisableInput && (cpMode == colorModeInternal.color || cpMode == colorModeInternal.grayscale)\"\n class=\"color-picker__inputs\">\n <div class=\"color-picker__input-fields\">\n <ng-container *ngIf=\"cpMode == colorModeInternal.grayscale; else formatSwitch\">\n <div class=\"color-picker__input-field\">\n <input type=\"number\"\n pattern=\"[0-9]*\"\n min=\"0\"\n max=\"100\"\n cpText\n [rg]=\"100\"\n [value]=\"hslaText?.l\"\n (keyup.enter)=\"onAccept($event)\"\n (newValue)=\"onValueInput($event)\" />\n <span class=\"color-picker__input-field-label\">V</span>\n </div>\n <div *ngIf=\"cpAlphaChannel != alphaChannel.disabled\"\n class=\"color-picker__input-field\">\n <input type=\"number\"\n pattern=\"[0-9]+([\\.,][0-9]{1,2})?\"\n min=\"0\"\n max=\"1\"\n step=\"0.1\"\n cpText\n [rg]=\"1\"\n [value]=\"hslaText?.a\"\n (keyup.enter)=\"onAccept($event)\"\n (newValue)=\"onAlphaInput($event)\" />\n <span class=\"color-picker__input-field-label\">A</span>\n </div>\n </ng-container>\n <ng-template #formatSwitch>\n <ng-container [ngSwitch]=\"format\">\n <ng-container *ngSwitchCase=\"colorFormat.hsla\">\n <div class=\"color-picker__input-field\">\n <input type=\"number\"\n pattern=\"[0-9]*\"\n min=\"0\"\n max=\"360\"\n cpText\n [rg]=\"360\"\n [value]=\"hslaText?.h\"\n (keyup.enter)=\"onAccept($event)\"\n (newValue)=\"onHueInput($event)\" />\n <span class=\"color-picker__input-field-label\">H</span>\n </div>\n <div class=\"color-picker__input-field\">\n <input type=\"number\"\n pattern=\"[0-9]*\"\n min=\"0\"\n max=\"100\"\n cpText\n [rg]=\"100\"\n [value]=\"hslaText?.s\"\n (keyup.enter)=\"onAccept($event)\"\n (newValue)=\"onSaturationInput($event)\" />\n <span class=\"color-picker__input-field-label\">S</span>\n </div>\n <div class=\"color-picker__input-field\">\n <input type=\"number\"\n pattern=\"[0-9]*\"\n min=\"0\"\n max=\"100\"\n cpText\n [rg]=\"100\"\n [value]=\"hslaText?.l\"\n (keyup.enter)=\"onAccept($event)\"\n (newValue)=\"onLightnessInput($event)\" />\n <span class=\"color-picker__input-field-label\">L</span>\n </div>\n <div *ngIf=\"cpAlphaChannel != alphaChannel.disabled\"\n class=\"color-picker__input-field\">\n <input type=\"number\"\n pattern=\"[0-9]+([\\.,][0-9]{1,2})?\"\n min=\"0\"\n max=\"1\"\n step=\"0.1\"\n cpText\n [rg]=\"1\"\n [value]=\"hslaText?.a\"\n (keyup.enter)=\"onAccept($event)\"\n (newValue)=\"onAlphaInput($event)\" />\n <span class=\"color-picker__input-field-label\">A</span>\n </div>\n </ng-container>\n <ng-container *ngSwitchCase=\"colorFormat.rgba\">\n <div class=\"color-picker__input-field\">\n <input type=\"number\"\n pattern=\"[0-9]*\"\n min=\"0\"\n max=\"255\"\n cpText\n [rg]=\"255\"\n [value]=\"rgbaText?.r\"\n (keyup.enter)=\"onAccept($event)\"\n (newValue)=\"onRedInput($event)\" />\n <span class=\"color-picker__input-field-label\">R</span>\n </div>\n <div class=\"color-picker__input-field\">\n <input type=\"number\"\n pattern=\"[0-9]*\"\n min=\"0\"\n max=\"255\"\n cpText\n [rg]=\"255\"\n [value]=\"rgbaText?.g\"\n (keyup.enter)=\"onAccept($event)\"\n (newValue)=\"onGreenInput($event)\" />\n <span class=\"color-picker__input-field-label\">G</span>\n </div>\n <div class=\"color-picker__input-field\">\n <input type=\"number\"\n pattern=\"[0-9]*\"\n min=\"0\"\n max=\"255\"\n cpText\n [rg]=\"255\"\n [value]=\"rgbaText?.b\"\n (keyup.enter)=\"onAccept($event)\"\n (newValue)=\"onBlueInput($event)\" />\n <span class=\"color-picker__input-field-label\">B</span>\n </div>\n <div *ngIf=\"cpAlphaChannel != alphaChannel.disabled\"\n class=\"color-picker__input-field\">\n <input type=\"number\"\n pattern=\"[0-9]+([\\.,][0-9]{1,2})?\"\n min=\"0\"\n max=\"1\"\n step=\"0.1\"\n cpText\n [rg]=\"1\"\n [value]=\"hslaText?.a\"\n (keyup.enter)=\"onAccept($event)\"\n (newValue)=\"onAlphaInput($event)\" />\n <span class=\"color-picker__input-field-label\">A</span>\n </div>\n </ng-container>\n <ng-container *ngSwitchCase=\"colorFormat.cmyk\">\n <div class=\"color-picker__input-field\">\n <input type=\"number\"\n pattern=\"[0-9]*\"\n min=\"0\"\n max=\"100\"\n cpText\n [rg]=\"100\"\n [value]=\"cmykText?.c\"\n (keyup.enter)=\"onAccept($event)\"\n (newValue)=\"onCyanInput($event)\" />\n <span class=\"color-picker__input-field-label\">C</span>\n </div>\n <div class=\"color-picker__input-field\">\n <input type=\"number\"\n pattern=\"[0-9]*\"\n min=\"0\"\n max=\"100\"\n cpText\n [rg]=\"100\"\n [value]=\"cmykText?.m\"\n (keyup.enter)=\"onAccept($event)\"\n (newValue)=\"onMagentaInput($event)\" />\n <span class=\"color-picker__input-field-label\">M</span>\n </div>\n <div class=\"color-picker__input-field\">\n <input type=\"number\"\n pattern=\"[0-9]*\"\n min=\"0\"\n max=\"100\"\n cpText\n [rg]=\"100\"\n [value]=\"cmykText?.y\"\n (keyup.enter)=\"onAccept($event)\"\n (newValue)=\"onYellowInput($event)\" />\n <span class=\"color-picker__input-field-label\">Y</span>\n </div>\n <div class=\"color-picker__input-field\">\n <input type=\"number\"\n pattern=\"[0-9]*\"\n min=\"0\"\n max=\"100\"\n cpText\n [rg]=\"100\"\n [value]=\"cmykText?.k\"\n (keyup.enter)=\"onAccept($event)\"\n (newValue)=\"onBlackInput($event)\" />\n <span class=\"color-picker__input-field-label\">K</span>\n </div>\n <div *ngIf=\"cpAlphaChannel != alphaChannel.disabled\"\n class=\"color-picker__input-field\">\n <input type=\"number\"\n pattern=\"[0-9]+([\\.,][0-9]{1,2})?\"\n min=\"0\"\n max=\"1\"\n step=\"0.1\"\n cpText\n [rg]=\"1\"\n [value]=\"cmykText?.c\"\n (keyup.enter)=\"onAccept($event)\"\n (newValue)=\"onAlphaInput($event)\" />\n <span class=\"color-picker__input-field-label\">A</span>\n </div>\n </ng-container>\n <ng-container *ngSwitchDefault>\n <div class=\"color-picker__input-field\">\n <input cpText\n [value]=\"hexText\"\n (blur)=\"onHexInput(null)\"\n (keyup.enter)=\"onAccept($event)\"\n (newValue)=\"onHexInput($event)\" />\n <span class=\"color-picker__input-field-label\">Hex</span>\n </div>\n <div *ngIf=\"cpAlphaChannel == alphaChannel.forced\"\n class=\"color-picker__input-field\">\n <input type=\"number\"\n pattern=\"[0-9]+([\\.,][0-9]{1,2})?\"\n min=\"0\"\n max=\"1\"\n step=\"0.1\"\n cpText\n [rg]=\"1\"\n [value]=\"hexAlpha\"\n (keyup.enter)=\"onAccept($event)\"\n (newValue)=\"onAlphaInput($event)\" />\n <span class=\"color-picker__input-field-label\">A</span>\n </div>\n </ng-container>\n </ng-container>\n </ng-template>\n </div>\n <div *ngIf=\"cpMode == colorModeInternal.color\"\n class=\"color-picker__input-type\">\n <span class=\"color-picker__input-type-arrow\"\n (click)=\"onFormatToggle(1)\"></span>\n <span class=\"color-picker__input-type-arrow\"\n (click)=\"onFormatToggle(-1)\"></span>\n </div>\n </div>\n <ng-container *ngIf=\"cpPresetColors?.length\">\n <div class=\"color-picker__separator\"></div>\n <div class=\"color-picker__preset\">\n <div *ngIf=\"cpPresetLabel\"\n class=\"color-picker__preset-label\">\n <ng-container *ngIf=\"cpPresetLabel === true; else stringLabel\"\n i18n=\"@@nxt-color-picker.preset-colors\">Preset colors</ng-container>\n <ng-template #stringLabel>{{ cpPresetLabel }}</ng-template>\n </div>\n <div *ngIf=\"cpPresetColors?.length\"\n class=\"color-picker__preset-items\">\n <div *ngFor=\"let color of cpPresetColors\"\n class=\"color-picker__preset-item\"\n [title]=\"color\"\n (click)=\"setColorFromString(color)\">\n <div class=\"color-picker__preset-item-fill\"\n [ngStyle]=\"{ \n backgroundColor: color || ''\n }\"><button *ngIf=\"cpAddColorButton\"\n type=\"button\"\n title=\"Remove Color\"\n i18n-title=\"@@nxt-color-picker.button.remove-color\"\n class=\"color-picker__remove-selected\"\n (click)=\"onRemovePresetColor(color)\"><svg xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\">\n <path\n d=\"M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z\" />\n <path d=\"M0 0h24v24H0z\"\n fill=\"none\" />\n </svg></button></div>\n </div>\n <div *ngFor=\"let i of fill(50)\"\n class=\"color-picker__preset-item\"></div>\n </div>\n </div>\n </ng-container>\n <div *ngIf=\"cpOKButton || cpCancelButton\"\n class=\"color-picker__buttons\">\n <button *ngIf=\"cpCancelButton\"\n type=\"button\"\n (click)=\"onCancel($event)\"\n i18n=\"@@nxt-color-picker.button.cancel\">Cancel</button>\n <button *ngIf=\"cpOKButton\"\n type=\"button\"\n (click)=\"onAccept($event)\"\n i18n=\"@@nxt-color-picker.button.ok\">OK</button>\n </div>\n</div>\n", styles: [".color-picker{position:relative;-webkit-user-select:none;user-select:none;background-color:#fff;box-shadow:0 8px 10px 1px #00000024,0 3px 14px 2px #0000001f,0 5px 5px -3px #0003;display:flex;flex-direction:column}.color-picker *{box-sizing:border-box;margin:0;font-size:12px}.color-picker .color-picker__arrow{height:0;width:0;border-style:solid;position:absolute;z-index:999999}.color-picker .color-picker__cursor{cursor:pointer;position:absolute;border-radius:50%;width:16px;height:16px;border:#222222 solid 2px;margin:0 -8px;transition:border .2s linear}.color-picker .color-picker__cursor.color-picker__cursor--sv{margin:-8px}.color-picker .color-picker__cursor.color-picker__cursor--light{border-color:#dadada}.color-picker .color-picker__sv{position:relative;direction:ltr;width:100%;height:130px;border:none;cursor:pointer;touch-action:manipulation;background-image:linear-gradient(to bottom,rgba(0,0,0,0) 0%,rgb(0,0,0) 100%),linear-gradient(to right,rgb(255,255,255) 0%,rgba(255,255,255,0) 100%);background-size:100% 100%}.color-picker .color-picker__controls{display:flex;margin:8px;align-items:center}.color-picker .color-picker__controls .color-picker__selected{margin:4px;flex:48px 0 0}.color-picker .color-picker__controls .color-picker__hav{margin:-4px -4px -4px 0;flex:auto 1 1}.color-picker .color-picker__selected-color{width:48px;height:48px;display:flex;align-items:stretch;justify-content:stretch;border-radius:50%;background-size:16px;background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZlcnNpb249IjEuMSIgeD0iMCIgeT0iMCIgd2lkdGg9IjEwMCIgaGVpZ2h0PSIxMDAiIHZpZXdCb3g9IjAgMCAxMDAgMTAwIiBlbmFibGUtYmFja2dyb3VuZD0ibmV3IDAgMCAxMDAgMTAwIiB4bWw6c3BhY2U9InByZXNlcnZlIj48cmVjdCBmaWxsPSIjQ0NDQ0NDIiB3aWR0aD0iNTAiIGhlaWdodD0iNTAiLz48cmVjdCB4PSI1MCIgeT0iNTAiIGZpbGw9IiNDQ0NDQ0MiIHdpZHRoPSI1MCIgaGVpZ2h0PSI1MCIvPjxyZWN0IHk9IjUwIiBmaWxsPSIjRkZGRkZGIiB3aWR0aD0iNTAiIGhlaWdodD0iNTAiLz48cmVjdCB4PSI1MCIgZmlsbD0iI0ZGRkZGRiIgd2lkdGg9IjUwIiBoZWlnaHQ9IjUwIi8+PC9zdmc+);background-repeat:repeat;box-shadow:0 0 8px -2px #00000080}.color-picker .color-picker__selected-color div{width:100%;height:100%;border-radius:50%}.color-picker .color-picker__add-selected{background:none;border:none;padding:0;width:100%;margin:0;color:#222;transition:color .2s linear;display:flex;align-items:center;justify-content:center;height:100%}.color-picker .color-picker__add-selected svg{fill:currentcolor;width:24px;height:auto}.color-picker .color-picker__add-selected.color-picker__add-selected--light{color:#dadada}.color-picker .color-picker__hav{display:flex;flex-wrap:wrap}.color-picker .color-picker__slider{width:100%;flex:100% 1 1;height:16px;margin:8px;position:relative}.color-picker .color-picker__slider.color-picker__slider--hue{background-size:100% 100%;background-image:linear-gradient(to right,rgb(255,0,0) 0%,rgb(255,255,0) 16.6666666667%,rgb(0,255,0) 33.3333333333%,rgb(0,255,255) 50%,rgb(0,0,255) 66.6666666667%,rgb(255,0,255) 83.3333333333%,rgb(255,0,0) 100%)}.color-picker .color-picker__slider.color-picker__slider--value{background-size:100% 100%;background-image:linear-gradient(to right,rgb(0,0,0) 0%,rgb(255,255,255) 100%)}.color-picker .color-picker__slider.color-picker__slider--alpha{background-size:16px;background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZlcnNpb249IjEuMSIgeD0iMCIgeT0iMCIgd2lkdGg9IjEwMCIgaGVpZ2h0PSIxMDAiIHZpZXdCb3g9IjAgMCAxMDAgMTAwIiBlbmFibGUtYmFja2dyb3VuZD0ibmV3IDAgMCAxMDAgMTAwIiB4bWw6c3BhY2U9InByZXNlcnZlIj48cmVjdCBmaWxsPSIjQ0NDQ0NDIiB3aWR0aD0iNTAiIGhlaWdodD0iNTAiLz48cmVjdCB4PSI1MCIgeT0iNTAiIGZpbGw9IiNDQ0NDQ0MiIHdpZHRoPSI1MCIgaGVpZ2h0PSI1MCIvPjxyZWN0IHk9IjUwIiBmaWxsPSIjRkZGRkZGIiB3aWR0aD0iNTAiIGhlaWdodD0iNTAiLz48cmVjdCB4PSI1MCIgZmlsbD0iI0ZGRkZGRiIgd2lkdGg9IjUwIiBoZWlnaHQ9IjUwIi8+PC9zdmc+);background-repeat:repeat}.color-picker .color-picker__slider.color-picker__slider--alpha .color-picker__slider--alpha-bg{position:absolute;top:0;left:0;right:0;bottom:0}.color-picker .color-picker__inputs{display:flex;margin:8px;align-items:flex-start}.color-picker .color-picker__inputs .color-picker__input-fields{flex:auto 1 1}.color-picker .color-picker__inputs .color-picker__input-type{flex:24px 0 0}.color-picker .color-picker__input-fields{display:flex}.color-picker .color-picker__input-fields .color-picker__input-field{margin:4px;display:flex;flex-wrap:wrap;align-items:flex-start;justify-content:center;flex:20% 1 1}.color-picker .color-picker__input-fields .color-picker__input-field input{text-align:center;font-size:12px;height:24px;-webkit-appearance:none;appearance:none;flex:100% 1 1;padding:1px;border:#999 solid 1px;width:100%;background:none;min-width:0}.color-picker .color-picker__input-fields .color-picker__input-field input:invalid{box-shadow:none}.color-picker .color-picker__input-fields .color-picker__input-field input::-webkit-inner-spin-button,.color-picker .color-picker__input-fields .color-picker__input-field input::-webkit-outer-spin-button{-webkit-appearance:none;appearance:none;margin:0}.color-picker .color-picker__input-fields .color-picker__input-field .color-picker__input-field-label{flex:100% 1 1;display:block;text-align:center;margin-top:4px}.color-picker .color-picker__input-type{width:24px;height:24px;margin-top:4px;display:flex;flex-wrap:wrap;background-size:contain;background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZlcnNpb249IjEuMSIgeD0iMCIgeT0iMCIgd2lkdGg9IjEwMCIgaGVpZ2h0PSIxMDAiIHZpZXdCb3g9IjAgMCAxMDAgMTAwIiBlbmFibGUtYmFja2dyb3VuZD0ibmV3IDAgMCAxMDAgMTAwIiB4bWw6c3BhY2U9InByZXNlcnZlIj48cG9seWdvbiBmaWxsPSIjMzMzMzMzIiBwb2ludHM9IjUwIDE2IDMwIDQ0IDcwIDQ0ICIvPjxwb2x5Z29uIGZpbGw9IiMzMzMzMzMiIHBvaW50cz0iNTAgODQgNzAgNTYgMzAgNTYgIi8+PC9zdmc+);background-repeat:no-repeat;background-position:center}.color-picker .color-picker__input-type .color-picker__input-type-arrow{display:block;cursor:pointer;flex:100% 1 1;width:100%;height:50%}.color-picker .color-picker__separator{border-top:1px solid #999;margin-left:8px;margin-right:8px;flex:100% 1 1}.color-picker .color-picker__preset{display:flex;margin:8px;align-items:center;flex-wrap:wrap}.color-picker .color-picker__preset-label{margin:4px;flex:100% 1 1}.color-picker .color-picker__preset-items{display:flex;flex:100% 1 1;flex-wrap:wrap;align-items:flex-start}.color-picker .color-picker__preset-items .color-picker__preset-item{position:relative;flex:20px 1 1;background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZlcnNpb249IjEuMSIgeD0iMCIgeT0iMCIgd2lkdGg9IjEwMCIgaGVpZ2h0PSIxMDAiIHZpZXdCb3g9IjAgMCAxMDAgMTAwIiBlbmFibGUtYmFja2dyb3VuZD0ibmV3IDAgMCAxMDAgMTAwIiB4bWw6c3BhY2U9InByZXNlcnZlIj48cmVjdCBmaWxsPSIjQ0NDQ0NDIiB3aWR0aD0iNTAiIGhlaWdodD0iNTAiLz48cmVjdCB4PSI1MCIgeT0iNTAiIGZpbGw9IiNDQ0NDQ0MiIHdpZHRoPSI1MCIgaGVpZ2h0PSI1MCIvPjxyZWN0IHk9IjUwIiBmaWxsPSIjRkZGRkZGIiB3aWR0aD0iNTAiIGhlaWdodD0iNTAiLz48cmVjdCB4PSI1MCIgZmlsbD0iI0ZGRkZGRiIgd2lkdGg9IjUwIiBoZWlnaHQ9IjUwIi8+PC9zdmc+);background-size:100% 100%;margin:4px;border-radius:4px;border:1px solid #999;cursor:pointer}.color-picker .color-picker__preset-items .color-picker__preset-item .color-picker__preset-item-fill{position:relative;width:100%;padding-bottom:100%;border-radius:3px}.color-picker .color-picker__preset-items .color-picker__preset-item:empty{margin-top:0;margin-bottom:0;border-top:0;border-bottom:0}.color-picker .color-picker__remove-selected{border:none;padding:0;margin:0;color:#222;transition:color .2s linear;align-items:center;justify-content:center;box-shadow:0 0 8px -2px #00000080;position:absolute;width:12px;height:12px;right:-6px;top:-6px;background:#fff;border-radius:50%;display:flex}.color-picker .color-picker__remove-selected svg{fill:currentcolor;width:100%;height:auto}.color-picker .color-picker__buttons{display:flex;margin:0 8px 8px;align-items:center;flex-wrap:wrap;justify-content:flex-end}.color-picker .color-picker__buttons button{flex:auto 0 0;margin:4px}:host-context(.color-picker__arrow--top) .color-picker{margin-bottom:16px}:host-context(.color-picker__arrow--top) .color-picker__arrow{border-width:12px 6px;border-color:#999 rgba(0,0,0,0) rgba(0,0,0,0) rgba(0,0,0,0);left:12px;bottom:-24px}:host-context(.color-picker__arrow--left) .color-picker{margin-right:16px}:host-context(.color-picker__arrow--left) .color-picker__arrow{border-width:6px 12px;border-color:rgba(0,0,0,0) rgba(0,0,0,0) rgba(0,0,0,0) #999;top:12px;left:230px}:host-context(.color-picker__arrow--right) .color-picker{margin-left:16px}:host-context(.color-picker__arrow--right) .color-picker__arrow{border-width:6px 12px;border-color:rgba(0,0,0,0) #999 rgba(0,0,0,0) rgba(0,0,0,0);top:12px;left:-24px}:host-context(.color-picker__arrow--bottom) .color-picker{margin-top:16px}:host-context(.color-picker__arrow--bottom) .color-picker__arrow{border-width:12px 6px;border-color:rgba(0,0,0,0) rgba(0,0,0,0) #999 rgba(0,0,0,0);top:-24px;left:12px}\n"] }]
|
|
578
|
+
args: [{ selector: 'cp-color-picker', encapsulation: ViewEncapsulation.Emulated, template: "<div class=\"color-picker\"\n (click)=\"$event.stopPropagation()\"\n [ngStyle]=\"{\n visibility: !show ? 'hidden' : 'visible',\n width: cpWidth || '',\n height: cpHeight || ''\n }\"\n *ngIf=\"show\">\n <div *ngIf=\"cpDialogDisplay == dialogDisplay.popup\"\n class=\"color-picker__arrow\"\n [ngClass]=\"'color-picker__arrow--' + cpPosition\"></div>\n <div *ngIf=\"cpMode == colorModeInternal.color\"\n class=\"color-picker__sv\"\n cpSlider\n [rgX]=\"1\"\n [rgY]=\"1\"\n (newValue)=\"onColorChange($event)\"\n (dragStart)=\"onDragStart('saturation-lightness')\"\n (dragEnd)=\"onDragEnd('saturation-lightness')\"\n [ngStyle]=\"{ \n backgroundColor: hueSliderColor || ''\n }\">\n <div class=\"color-picker__cursor color-picker__cursor--sv\"\n [ngClass]=\"{ 'color-picker__cursor--light': svSliderLight }\"\n [ngStyle]=\"{\n top: (slider?.v || 0) * 100 + '%',\n left: (slider?.s || 0) * 100 + '%'\n }\"></div>\n </div>\n <div class=\"color-picker__controls\">\n <div class=\"color-picker__selected\">\n <div class=\"color-picker__selected-color\">\n <div [ngStyle]=\"{ \n backgroundColor: selectedColor || ''\n }\"><button\n *ngIf=\"cpAddColorButton && !(cpMaxPresetColors && (cpPresetColors?.length || 0) >= cpMaxPresetColors)\"\n type=\"button\"\n title=\"Add color to preset\"\n i18n-title=\"@@nxt-color-picker.button.add-color\"\n class=\"color-picker__add-selected\"\n [ngClass]=\"{ 'color-picker__add-selected--light': alphaSliderLight }\"\n (click)=\"onAddPresetColor(selectedColor)\"><svg xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\">\n <path d=\"M19 13h-6v6h-2v-6H5v-2h6V5h2v6h6v2z\" />\n <path d=\"M0 0h24v24H0z\"\n fill=\"none\" />\n </svg></button></div>\n </div>\n </div>\n <div class=\"color-picker__hav\">\n <div *ngIf=\"cpMode == colorModeInternal.color\"\n class=\"color-picker__slider color-picker__slider--hue\"\n cpSlider\n [rgX]=\"1\"\n (newValue)=\"onHueChange($event)\"\n (dragStart)=\"onDragStart('hue')\"\n (dragEnd)=\"onDragEnd('hue')\">\n <div class=\"color-picker__cursor\"\n [ngClass]=\"{ 'color-picker__cursor--light': hueSliderLight }\"\n [ngStyle]=\"{\n left: (slider?.h || 0) * 100 + '%'\n }\"></div>\n </div>\n <div *ngIf=\"cpMode == colorModeInternal.grayscale\"\n class=\"color-picker__slider color-picker__slider--value\"\n cpSlider\n [rgX]=\"1\"\n (newValue)=\"onValueChange($event)\"\n (dragStart)=\"onDragStart('value')\"\n (dragEnd)=\"onDragEnd('value')\">\n <div class=\"color-picker__cursor\"\n [ngClass]=\"{ 'color-picker__cursor--light': valueSliderLight }\"\n [ngStyle]=\"{\n left: (1 - (slider?.v || 0)) * 100 + '%'\n }\"></div>\n </div>\n <div *ngIf=\"cpAlphaChannel != alphaChannel.disabled\"\n class=\"color-picker__slider color-picker__slider--alpha\"\n cpSlider\n [rgX]=\"1\"\n (newValue)=\"onAlphaChange($event)\"\n (dragStart)=\"onDragStart('alpha')\"\n (dragEnd)=\"onDragEnd('alpha')\">\n <div class=\"color-picker__slider--alpha-bg\"\n [ngStyle]=\"{\n backgroundImage: alphaSliderColor || ''\n }\">\n <div class=\"color-picker__cursor\"\n [ngClass]=\"{ 'color-picker__cursor--light': alphaSliderLight }\"\n [ngStyle]=\"{\n left: (slider?.a || 0) * 100 + '%'\n }\"></div>\n </div>\n </div>\n </div>\n </div>\n <div *ngIf=\"!cpDisableInput && (cpMode == colorModeInternal.color || cpMode == colorModeInternal.grayscale)\"\n class=\"color-picker__inputs\">\n <div class=\"color-picker__input-fields\">\n <ng-container *ngIf=\"cpMode == colorModeInternal.grayscale; else formatSwitch\">\n <div class=\"color-picker__input-field\">\n <input type=\"number\"\n pattern=\"[0-9]*\"\n min=\"0\"\n max=\"100\"\n cpText\n [rg]=\"100\"\n [value]=\"hslaText?.l\"\n (keyup.enter)=\"onAccept($event)\"\n (newValue)=\"onValueInput($event)\" />\n <span class=\"color-picker__input-field-label\">V</span>\n </div>\n <div *ngIf=\"cpAlphaChannel != alphaChannel.disabled\"\n class=\"color-picker__input-field\">\n <input type=\"number\"\n pattern=\"[0-9]+([\\.,][0-9]{1,2})?\"\n min=\"0\"\n max=\"1\"\n step=\"0.1\"\n cpText\n [rg]=\"1\"\n [value]=\"hslaText?.a\"\n (keyup.enter)=\"onAccept($event)\"\n (newValue)=\"onAlphaInput($event)\" />\n <span class=\"color-picker__input-field-label\">A</span>\n </div>\n </ng-container>\n <ng-template #formatSwitch>\n <ng-container [ngSwitch]=\"format\">\n <ng-container *ngSwitchCase=\"colorFormat.hsla\">\n <div class=\"color-picker__input-field\">\n <input type=\"number\"\n pattern=\"[0-9]*\"\n min=\"0\"\n max=\"360\"\n cpText\n [rg]=\"360\"\n [value]=\"hslaText?.h\"\n (keyup.enter)=\"onAccept($event)\"\n (newValue)=\"onHueInput($event)\" />\n <span class=\"color-picker__input-field-label\">H</span>\n </div>\n <div class=\"color-picker__input-field\">\n <input type=\"number\"\n pattern=\"[0-9]*\"\n min=\"0\"\n max=\"100\"\n cpText\n [rg]=\"100\"\n [value]=\"hslaText?.s\"\n (keyup.enter)=\"onAccept($event)\"\n (newValue)=\"onSaturationInput($event)\" />\n <span class=\"color-picker__input-field-label\">S</span>\n </div>\n <div class=\"color-picker__input-field\">\n <input type=\"number\"\n pattern=\"[0-9]*\"\n min=\"0\"\n max=\"100\"\n cpText\n [rg]=\"100\"\n [value]=\"hslaText?.l\"\n (keyup.enter)=\"onAccept($event)\"\n (newValue)=\"onLightnessInput($event)\" />\n <span class=\"color-picker__input-field-label\">L</span>\n </div>\n <div *ngIf=\"cpAlphaChannel != alphaChannel.disabled\"\n class=\"color-picker__input-field\">\n <input type=\"number\"\n pattern=\"[0-9]+([\\.,][0-9]{1,2})?\"\n min=\"0\"\n max=\"1\"\n step=\"0.1\"\n cpText\n [rg]=\"1\"\n [value]=\"hslaText?.a\"\n (keyup.enter)=\"onAccept($event)\"\n (newValue)=\"onAlphaInput($event)\" />\n <span class=\"color-picker__input-field-label\">A</span>\n </div>\n </ng-container>\n <ng-container *ngSwitchCase=\"colorFormat.rgba\">\n <div class=\"color-picker__input-field\">\n <input type=\"number\"\n pattern=\"[0-9]*\"\n min=\"0\"\n max=\"255\"\n cpText\n [rg]=\"255\"\n [value]=\"rgbaText?.r\"\n (keyup.enter)=\"onAccept($event)\"\n (newValue)=\"onRedInput($event)\" />\n <span class=\"color-picker__input-field-label\">R</span>\n </div>\n <div class=\"color-picker__input-field\">\n <input type=\"number\"\n pattern=\"[0-9]*\"\n min=\"0\"\n max=\"255\"\n cpText\n [rg]=\"255\"\n [value]=\"rgbaText?.g\"\n (keyup.enter)=\"onAccept($event)\"\n (newValue)=\"onGreenInput($event)\" />\n <span class=\"color-picker__input-field-label\">G</span>\n </div>\n <div class=\"color-picker__input-field\">\n <input type=\"number\"\n pattern=\"[0-9]*\"\n min=\"0\"\n max=\"255\"\n cpText\n [rg]=\"255\"\n [value]=\"rgbaText?.b\"\n (keyup.enter)=\"onAccept($event)\"\n (newValue)=\"onBlueInput($event)\" />\n <span class=\"color-picker__input-field-label\">B</span>\n </div>\n <div *ngIf=\"cpAlphaChannel != alphaChannel.disabled\"\n class=\"color-picker__input-field\">\n <input type=\"number\"\n pattern=\"[0-9]+([\\.,][0-9]{1,2})?\"\n min=\"0\"\n max=\"1\"\n step=\"0.1\"\n cpText\n [rg]=\"1\"\n [value]=\"hslaText?.a\"\n (keyup.enter)=\"onAccept($event)\"\n (newValue)=\"onAlphaInput($event)\" />\n <span class=\"color-picker__input-field-label\">A</span>\n </div>\n </ng-container>\n <ng-container *ngSwitchCase=\"colorFormat.cmyk\">\n <div class=\"color-picker__input-field\">\n <input type=\"number\"\n pattern=\"[0-9]*\"\n min=\"0\"\n max=\"100\"\n cpText\n [rg]=\"100\"\n [value]=\"cmykText?.c\"\n (keyup.enter)=\"onAccept($event)\"\n (newValue)=\"onCyanInput($event)\" />\n <span class=\"color-picker__input-field-label\">C</span>\n </div>\n <div class=\"color-picker__input-field\">\n <input type=\"number\"\n pattern=\"[0-9]*\"\n min=\"0\"\n max=\"100\"\n cpText\n [rg]=\"100\"\n [value]=\"cmykText?.m\"\n (keyup.enter)=\"onAccept($event)\"\n (newValue)=\"onMagentaInput($event)\" />\n <span class=\"color-picker__input-field-label\">M</span>\n </div>\n <div class=\"color-picker__input-field\">\n <input type=\"number\"\n pattern=\"[0-9]*\"\n min=\"0\"\n max=\"100\"\n cpText\n [rg]=\"100\"\n [value]=\"cmykText?.y\"\n (keyup.enter)=\"onAccept($event)\"\n (newValue)=\"onYellowInput($event)\" />\n <span class=\"color-picker__input-field-label\">Y</span>\n </div>\n <div class=\"color-picker__input-field\">\n <input type=\"number\"\n pattern=\"[0-9]*\"\n min=\"0\"\n max=\"100\"\n cpText\n [rg]=\"100\"\n [value]=\"cmykText?.k\"\n (keyup.enter)=\"onAccept($event)\"\n (newValue)=\"onBlackInput($event)\" />\n <span class=\"color-picker__input-field-label\">K</span>\n </div>\n <div *ngIf=\"cpAlphaChannel != alphaChannel.disabled\"\n class=\"color-picker__input-field\">\n <input type=\"number\"\n pattern=\"[0-9]+([\\.,][0-9]{1,2})?\"\n min=\"0\"\n max=\"1\"\n step=\"0.1\"\n cpText\n [rg]=\"1\"\n [value]=\"cmykText?.c\"\n (keyup.enter)=\"onAccept($event)\"\n (newValue)=\"onAlphaInput($event)\" />\n <span class=\"color-picker__input-field-label\">A</span>\n </div>\n </ng-container>\n <ng-container *ngSwitchDefault>\n <div class=\"color-picker__input-field\">\n <input cpText\n [value]=\"hexText\"\n (blur)=\"onHexInput(null)\"\n (keyup.enter)=\"onAccept($event)\"\n (newValue)=\"onHexInput($event)\" />\n <span class=\"color-picker__input-field-label\">Hex</span>\n </div>\n <div *ngIf=\"cpAlphaChannel == alphaChannel.forced\"\n class=\"color-picker__input-field\">\n <input type=\"number\"\n pattern=\"[0-9]+([\\.,][0-9]{1,2})?\"\n min=\"0\"\n max=\"1\"\n step=\"0.1\"\n cpText\n [rg]=\"1\"\n [value]=\"hexAlpha\"\n (keyup.enter)=\"onAccept($event)\"\n (newValue)=\"onAlphaInput($event)\" />\n <span class=\"color-picker__input-field-label\">A</span>\n </div>\n </ng-container>\n </ng-container>\n </ng-template>\n </div>\n <div *ngIf=\"cpMode == colorModeInternal.color\"\n class=\"color-picker__input-type\">\n <span class=\"color-picker__input-type-arrow\"\n (click)=\"onFormatToggle(1)\"></span>\n <span class=\"color-picker__input-type-arrow\"\n (click)=\"onFormatToggle(-1)\"></span>\n </div>\n </div>\n <ng-container *ngIf=\"cpPresetColors?.length\">\n <div class=\"color-picker__separator\"></div>\n <div class=\"color-picker__preset\">\n <div *ngIf=\"cpPresetLabel\"\n class=\"color-picker__preset-label\">\n <ng-container *ngIf=\"cpPresetLabel === true; else stringLabel\"\n i18n=\"@@nxt-color-picker.preset-colors\">Preset colors</ng-container>\n <ng-template #stringLabel>{{ cpPresetLabel }}</ng-template>\n </div>\n <div *ngIf=\"cpPresetColors?.length\"\n class=\"color-picker__preset-items\">\n <ng-container *ngFor=\"let color of cpPresetColors\">\n <div *ngIf=\"stringToRgba(color) as rgba\"\n class=\"color-picker__preset-item\"\n [title]=\"color\"\n (click)=\"setColorFromString(color)\">\n <div class=\"color-picker__preset-item-fill\"\n [ngStyle]=\"{ \n backgroundColor: rgba || ''\n }\"><button *ngIf=\"cpAddColorButton\"\n type=\"button\"\n title=\"Remove Color\"\n i18n-title=\"@@nxt-color-picker.button.remove-color\"\n class=\"color-picker__remove-selected\"\n (click)=\"onRemovePresetColor(color)\"><svg xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\">\n <path\n d=\"M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z\" />\n <path d=\"M0 0h24v24H0z\"\n fill=\"none\" />\n </svg></button></div>\n </div>\n </ng-container>\n <div *ngFor=\"let i of fill(50)\"\n class=\"color-picker__preset-item\"></div>\n </div>\n </div>\n </ng-container>\n <div *ngIf=\"cpOKButton || cpCancelButton\"\n class=\"color-picker__buttons\">\n <button *ngIf=\"cpCancelButton\"\n type=\"button\"\n (click)=\"onCancel($event)\"\n i18n=\"@@nxt-color-picker.button.cancel\">Cancel</button>\n <button *ngIf=\"cpOKButton\"\n type=\"button\"\n (click)=\"onAccept($event)\"\n i18n=\"@@nxt-color-picker.button.ok\">OK</button>\n </div>\n</div>\n", styles: [".color-picker{position:relative;-webkit-user-select:none;user-select:none;background-color:#fff;box-shadow:0 8px 10px 1px #00000024,0 3px 14px 2px #0000001f,0 5px 5px -3px #0003;display:flex;flex-direction:column}.color-picker *{box-sizing:border-box;margin:0;font-size:12px}.color-picker .color-picker__arrow{height:0;width:0;border-style:solid;position:absolute;z-index:999999}.color-picker .color-picker__cursor{cursor:pointer;position:absolute;border-radius:50%;width:16px;height:16px;border:#222222 solid 2px;margin:0 -8px;transition:border .2s linear}.color-picker .color-picker__cursor.color-picker__cursor--sv{margin:-8px}.color-picker .color-picker__cursor.color-picker__cursor--light{border-color:#dadada}.color-picker .color-picker__sv{position:relative;direction:ltr;width:100%;height:130px;border:none;cursor:pointer;touch-action:manipulation;background-image:linear-gradient(to bottom,rgba(0,0,0,0) 0%,rgb(0,0,0) 100%),linear-gradient(to right,rgb(255,255,255) 0%,rgba(255,255,255,0) 100%);background-size:100% 100%}.color-picker .color-picker__controls{display:flex;margin:8px;align-items:center}.color-picker .color-picker__controls .color-picker__selected{margin:4px;flex:48px 0 0}.color-picker .color-picker__controls .color-picker__hav{margin:-4px -4px -4px 0;flex:auto 1 1}.color-picker .color-picker__selected-color{width:48px;height:48px;display:flex;align-items:stretch;justify-content:stretch;border-radius:50%;background-size:16px;background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZlcnNpb249IjEuMSIgeD0iMCIgeT0iMCIgd2lkdGg9IjEwMCIgaGVpZ2h0PSIxMDAiIHZpZXdCb3g9IjAgMCAxMDAgMTAwIiBlbmFibGUtYmFja2dyb3VuZD0ibmV3IDAgMCAxMDAgMTAwIiB4bWw6c3BhY2U9InByZXNlcnZlIj48cmVjdCBmaWxsPSIjQ0NDQ0NDIiB3aWR0aD0iNTAiIGhlaWdodD0iNTAiLz48cmVjdCB4PSI1MCIgeT0iNTAiIGZpbGw9IiNDQ0NDQ0MiIHdpZHRoPSI1MCIgaGVpZ2h0PSI1MCIvPjxyZWN0IHk9IjUwIiBmaWxsPSIjRkZGRkZGIiB3aWR0aD0iNTAiIGhlaWdodD0iNTAiLz48cmVjdCB4PSI1MCIgZmlsbD0iI0ZGRkZGRiIgd2lkdGg9IjUwIiBoZWlnaHQ9IjUwIi8+PC9zdmc+);background-repeat:repeat;box-shadow:0 0 8px -2px #00000080}.color-picker .color-picker__selected-color div{width:100%;height:100%;border-radius:50%}.color-picker .color-picker__add-selected{background:none;border:none;padding:0;width:100%;margin:0;color:#222;transition:color .2s linear;display:flex;align-items:center;justify-content:center;height:100%}.color-picker .color-picker__add-selected svg{fill:currentcolor;width:24px;height:auto}.color-picker .color-picker__add-selected.color-picker__add-selected--light{color:#dadada}.color-picker .color-picker__hav{display:flex;flex-wrap:wrap}.color-picker .color-picker__slider{width:100%;flex:100% 1 1;height:16px;margin:8px;position:relative}.color-picker .color-picker__slider.color-picker__slider--hue{background-size:100% 100%;background-image:linear-gradient(to right,rgb(255,0,0) 0%,rgb(255,255,0) 16.6666666667%,rgb(0,255,0) 33.3333333333%,rgb(0,255,255) 50%,rgb(0,0,255) 66.6666666667%,rgb(255,0,255) 83.3333333333%,rgb(255,0,0) 100%)}.color-picker .color-picker__slider.color-picker__slider--value{background-size:100% 100%;background-image:linear-gradient(to right,rgb(0,0,0) 0%,rgb(255,255,255) 100%)}.color-picker .color-picker__slider.color-picker__slider--alpha{background-size:16px;background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZlcnNpb249IjEuMSIgeD0iMCIgeT0iMCIgd2lkdGg9IjEwMCIgaGVpZ2h0PSIxMDAiIHZpZXdCb3g9IjAgMCAxMDAgMTAwIiBlbmFibGUtYmFja2dyb3VuZD0ibmV3IDAgMCAxMDAgMTAwIiB4bWw6c3BhY2U9InByZXNlcnZlIj48cmVjdCBmaWxsPSIjQ0NDQ0NDIiB3aWR0aD0iNTAiIGhlaWdodD0iNTAiLz48cmVjdCB4PSI1MCIgeT0iNTAiIGZpbGw9IiNDQ0NDQ0MiIHdpZHRoPSI1MCIgaGVpZ2h0PSI1MCIvPjxyZWN0IHk9IjUwIiBmaWxsPSIjRkZGRkZGIiB3aWR0aD0iNTAiIGhlaWdodD0iNTAiLz48cmVjdCB4PSI1MCIgZmlsbD0iI0ZGRkZGRiIgd2lkdGg9IjUwIiBoZWlnaHQ9IjUwIi8+PC9zdmc+);background-repeat:repeat}.color-picker .color-picker__slider.color-picker__slider--alpha .color-picker__slider--alpha-bg{position:absolute;top:0;left:0;right:0;bottom:0}.color-picker .color-picker__inputs{display:flex;margin:8px;align-items:flex-start}.color-picker .color-picker__inputs .color-picker__input-fields{flex:auto 1 1}.color-picker .color-picker__inputs .color-picker__input-type{flex:24px 0 0}.color-picker .color-picker__input-fields{display:flex}.color-picker .color-picker__input-fields .color-picker__input-field{margin:4px;display:flex;flex-wrap:wrap;align-items:flex-start;justify-content:center;flex:20% 1 1}.color-picker .color-picker__input-fields .color-picker__input-field input{text-align:center;font-size:12px;height:24px;-webkit-appearance:none;appearance:none;flex:100% 1 1;padding:1px;border:#999 solid 1px;width:100%;background:none;min-width:0}.color-picker .color-picker__input-fields .color-picker__input-field input:invalid{box-shadow:none}.color-picker .color-picker__input-fields .color-picker__input-field input::-webkit-inner-spin-button,.color-picker .color-picker__input-fields .color-picker__input-field input::-webkit-outer-spin-button{-webkit-appearance:none;appearance:none;margin:0}.color-picker .color-picker__input-fields .color-picker__input-field .color-picker__input-field-label{flex:100% 1 1;display:block;text-align:center;margin-top:4px}.color-picker .color-picker__input-type{width:24px;height:24px;margin-top:4px;display:flex;flex-wrap:wrap;background-size:contain;background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZlcnNpb249IjEuMSIgeD0iMCIgeT0iMCIgd2lkdGg9IjEwMCIgaGVpZ2h0PSIxMDAiIHZpZXdCb3g9IjAgMCAxMDAgMTAwIiBlbmFibGUtYmFja2dyb3VuZD0ibmV3IDAgMCAxMDAgMTAwIiB4bWw6c3BhY2U9InByZXNlcnZlIj48cG9seWdvbiBmaWxsPSIjMzMzMzMzIiBwb2ludHM9IjUwIDE2IDMwIDQ0IDcwIDQ0ICIvPjxwb2x5Z29uIGZpbGw9IiMzMzMzMzMiIHBvaW50cz0iNTAgODQgNzAgNTYgMzAgNTYgIi8+PC9zdmc+);background-repeat:no-repeat;background-position:center}.color-picker .color-picker__input-type .color-picker__input-type-arrow{display:block;cursor:pointer;flex:100% 1 1;width:100%;height:50%}.color-picker .color-picker__separator{border-top:1px solid #999;margin-left:8px;margin-right:8px;flex:100% 1 1}.color-picker .color-picker__preset{display:flex;margin:8px;align-items:center;flex-wrap:wrap}.color-picker .color-picker__preset-label{margin:4px;flex:100% 1 1}.color-picker .color-picker__preset-items{display:flex;flex:100% 1 1;flex-wrap:wrap;align-items:flex-start}.color-picker .color-picker__preset-items .color-picker__preset-item{position:relative;flex:20px 1 1;background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZlcnNpb249IjEuMSIgeD0iMCIgeT0iMCIgd2lkdGg9IjEwMCIgaGVpZ2h0PSIxMDAiIHZpZXdCb3g9IjAgMCAxMDAgMTAwIiBlbmFibGUtYmFja2dyb3VuZD0ibmV3IDAgMCAxMDAgMTAwIiB4bWw6c3BhY2U9InByZXNlcnZlIj48cmVjdCBmaWxsPSIjQ0NDQ0NDIiB3aWR0aD0iNTAiIGhlaWdodD0iNTAiLz48cmVjdCB4PSI1MCIgeT0iNTAiIGZpbGw9IiNDQ0NDQ0MiIHdpZHRoPSI1MCIgaGVpZ2h0PSI1MCIvPjxyZWN0IHk9IjUwIiBmaWxsPSIjRkZGRkZGIiB3aWR0aD0iNTAiIGhlaWdodD0iNTAiLz48cmVjdCB4PSI1MCIgZmlsbD0iI0ZGRkZGRiIgd2lkdGg9IjUwIiBoZWlnaHQ9IjUwIi8+PC9zdmc+);background-size:100% 100%;margin:4px;border-radius:4px;border:1px solid #999;cursor:pointer}.color-picker .color-picker__preset-items .color-picker__preset-item .color-picker__preset-item-fill{position:relative;width:100%;padding-bottom:100%;border-radius:3px}.color-picker .color-picker__preset-items .color-picker__preset-item:empty{margin-top:0;margin-bottom:0;border-top:0;border-bottom:0}.color-picker .color-picker__remove-selected{border:none;padding:0;margin:0;color:#222;transition:color .2s linear;align-items:center;justify-content:center;box-shadow:0 0 8px -2px #00000080;position:absolute;width:12px;height:12px;right:-6px;top:-6px;background:#fff;border-radius:50%;display:flex}.color-picker .color-picker__remove-selected svg{fill:currentcolor;width:100%;height:auto}.color-picker .color-picker__buttons{display:flex;margin:0 8px 8px;align-items:center;flex-wrap:wrap;justify-content:flex-end}.color-picker .color-picker__buttons button{flex:auto 0 0;margin:4px}:host-context(.color-picker__arrow--top) .color-picker{margin-bottom:16px}:host-context(.color-picker__arrow--top) .color-picker__arrow{border-width:12px 6px;border-color:#999 rgba(0,0,0,0) rgba(0,0,0,0) rgba(0,0,0,0);left:12px;bottom:-24px}:host-context(.color-picker__arrow--left) .color-picker{margin-right:16px}:host-context(.color-picker__arrow--left) .color-picker__arrow{border-width:6px 12px;border-color:rgba(0,0,0,0) rgba(0,0,0,0) rgba(0,0,0,0) #999;top:12px;left:230px}:host-context(.color-picker__arrow--right) .color-picker{margin-left:16px}:host-context(.color-picker__arrow--right) .color-picker__arrow{border-width:6px 12px;border-color:rgba(0,0,0,0) #999 rgba(0,0,0,0) rgba(0,0,0,0);top:12px;left:-24px}:host-context(.color-picker__arrow--bottom) .color-picker{margin-top:16px}:host-context(.color-picker__arrow--bottom) .color-picker__arrow{border-width:12px 6px;border-color:rgba(0,0,0,0) rgba(0,0,0,0) #999 rgba(0,0,0,0);top:-24px;left:12px}\n"] }]
|
|
573
579
|
}], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.ChangeDetectorRef }, { type: i1.ColorPickerService }]; }, propDecorators: { onCancel: [{
|
|
574
580
|
type: HostListener,
|
|
575
581
|
args: ['document:keyup.esc', ['$event']]
|
|
@@ -583,4 +589,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.2", ngImpor
|
|
|
583
589
|
type: HostListener,
|
|
584
590
|
args: ['document:focusin', ['$event']]
|
|
585
591
|
}] } });
|
|
586
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29sb3ItcGlja2VyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL254dC1jb2xvci1waWNrZXIvc3JjL2xpYi9jb2xvci1waWNrZXIvY29sb3ItcGlja2VyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL254dC1jb2xvci1waWNrZXIvc3JjL2xpYi9jb2xvci1waWNrZXIvY29sb3ItcGlja2VyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBb0IsaUJBQWlCLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxZQUFZLEVBQXFCLGlCQUFpQixFQUFFLE1BQU0sZUFBZSxDQUFBO0FBQzlJLE9BQU8sRUFBRSxTQUFTLEVBQUUsZUFBZSxFQUFFLGVBQWUsRUFBRSxVQUFVLEVBQUUsWUFBWSxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLGFBQWEsRUFBRSxVQUFVLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxZQUFZLEVBQUUsWUFBWSxFQUFFLE1BQU0sa0JBQWtCLENBQUE7QUFDeE4sT0FBTyxFQUFFLGlCQUFpQixFQUFFLHNCQUFzQixFQUFFLE1BQU0scUJBQXFCLENBQUE7QUFDL0UsT0FBTyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxNQUFNLG9CQUFvQixDQUFBO0FBQzNELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxZQUFZLEVBQW9DLGNBQWMsRUFBRSxZQUFZLEVBQUUsY0FBYyxFQUFFLE1BQU0sb0JBQW9CLENBQUE7QUFDcEosT0FBTyxFQUFFLFlBQVksRUFBRSxtQkFBbUIsRUFBRSxXQUFXLEVBQUUsYUFBYSxFQUFFLGNBQWMsRUFBRSxZQUFZLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQTtBQUM5SCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQTs7Ozs7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Q0FBQyxRQUFRLENBQUM7Z0JBa0JoRCxhQUFhO3NCQUZaLFlBQVk7dUJBQUMsb0JBQW9CLEVBQUUsQ0FBQyxRQUFRLENBQUM7O3NCQUM3QyxZQUFZO3VCQUFDLGtCQUFrQixFQUFFLENBQUMsUUFBUSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQWZ0ZXJWaWV3Q2hlY2tlZCwgQ2hhbmdlRGV0ZWN0b3JSZWYsIENvbXBvbmVudCwgRWxlbWVudFJlZiwgSG9zdExpc3RlbmVyLCBPbkRlc3Ryb3ksIE9uSW5pdCwgVmlld0VuY2Fwc3VsYXRpb24gfSBmcm9tICdAYW5ndWxhci9jb3JlJ1xuaW1wb3J0IHsgY215a1RvUmdiLCBkZW5vcm1hbGl6ZUNNWUssIGRlbm9ybWFsaXplUkdCQSwgZm9ybWF0Q215aywgZm9ybWF0T3V0cHV0LCBoc2xhMmhzdmEsIGhzdmEyaHNsYSwgaHN2YVRvUmdiYSwgbm9ybWFsaXplQ01ZSywgcmdiYVRvQ215aywgcmdiYVRvSGV4LCByZ2JhVG9Ic3ZhLCBzdHJpbmdUb0NteWssIHN0cmluZ1RvSHN2YSB9IGZyb20gJy4uLy4uL3V0aWwvY29sb3InXG5pbXBvcnQgeyBvcGFxdWVTbGlkZXJMaWdodCwgdHJhbnNwYXJlbnRTbGlkZXJMaWdodCB9IGZyb20gJy4uLy4uL3V0aWwvY29udHJhc3QnXG5pbXBvcnQgeyBDbXlrLCBIc2xhLCBIc3ZhLCBSZ2JhIH0gZnJvbSAnLi4vLi4vdXRpbC9mb3JtYXRzJ1xuaW1wb3J0IHsgQ29sb3JNb2RlSW50ZXJuYWwsIGNvbXBvc2VkUGF0aCwgRGlhbG9nQ29uZmlnLCBEaXJlY3RpdmVDYWxsYmFja3MsIHBhcnNlQ29sb3JNb2RlLCBzaXplVG9TdHJpbmcsIFNsaWRlclBvc2l0aW9uIH0gZnJvbSAnLi4vLi4vdXRpbC9oZWxwZXJzJ1xuaW1wb3J0IHsgQWxwaGFDaGFubmVsLCBBbHBoYUVuYWJsZWRGb3JtYXRzLCBDb2xvckZvcm1hdCwgRGlhbG9nRGlzcGxheSwgRGlhbG9nUG9zaXRpb24sIE91dHB1dEZvcm1hdCB9IGZyb20gJy4uLy4uL3V0aWwvdHlwZXMnXG5pbXBvcnQgeyBDb2xvclBpY2tlclNlcnZpY2UgfSBmcm9tICcuLi9jb2xvci1waWNrZXIuc2VydmljZSdcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdjcC1jb2xvci1waWNrZXInLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9jb2xvci1waWNrZXIuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsczogWycuL2NvbG9yLXBpY2tlci5jb21wb25lbnQuc2NzcyddLFxuICAgIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLkVtdWxhdGVkXG59KVxuZXhwb3J0IGNsYXNzIENvbG9yUGlja2VyQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3ksIEFmdGVyVmlld0NoZWNrZWQge1xuXG4gICAgcmVhZG9ubHkgYWxwaGFDaGFubmVsID0gQWxwaGFDaGFubmVsXG4gICAgcmVhZG9ubHkgY29sb3JNb2RlSW50ZXJuYWwgPSBDb2xvck1vZGVJbnRlcm5hbFxuICAgIHJlYWRvbmx5IGRpYWxvZ0Rpc3BsYXkgPSBEaWFsb2dEaXNwbGF5XG4gICAgcmVhZG9ubHkgY29sb3JGb3JtYXQgPSBDb2xvckZvcm1hdFxuXG4gICAgcHJpdmF0ZSBoc3ZhOiBIc3ZhXG4gICAgcHJpdmF0ZSBjbXlrOiBDbXlrXG5cbiAgICBwcml2YXRlIGNteWtDb2xvcjogc3RyaW5nXG4gICAgcHJpdmF0ZSBvdXRwdXRDb2xvcjogc3RyaW5nXG4gICAgcHJpdmF0ZSBpbml0aWFsQ29sb3I6IHN0cmluZ1xuICAgIHByaXZhdGUgZmFsbGJhY2tDb2xvcjogc3RyaW5nXG5cbiAgICBwcml2YXRlIHNsaWRlckg6IG51bWJlclxuXG4gICAgcHJpdmF0ZSBkaWFsb2dJbnB1dEZpZWxkczogQ29sb3JGb3JtYXRbXSA9IFtcbiAgICAgICAgQ29sb3JGb3JtYXQuaGV4LFxuICAgICAgICBDb2xvckZvcm1hdC5yZ2JhLFxuICAgICAgICBDb2xvckZvcm1hdC5oc2xhLFxuICAgICAgICBDb2xvckZvcm1hdC5jbXlrXG4gICAgXVxuXG4gICAgcHJpdmF0ZSBjYWxsYmFja3M6IERpcmVjdGl2ZUNhbGxiYWNrc1xuXG4gICAgc2hvdzogYm9vbGVhblxuXG4gICAgZm9ybWF0OiBDb2xvckZvcm1hdFxuICAgIHNsaWRlcjogU2xpZGVyUG9zaXRpb25cblxuICAgIGhleFRleHQ6IHN0cmluZ1xuICAgIGhleEFscGhhOiBudW1iZXJcblxuICAgIGNteWtUZXh0OiBDbXlrXG4gICAgaHNsYVRleHQ6IEhzbGFcbiAgICByZ2JhVGV4dDogUmdiYVxuXG4gICAgc2VsZWN0ZWRDb2xvcjogc3RyaW5nXG4gICAgaHVlU2xpZGVyQ29sb3I6IHN0cmluZ1xuICAgIGFscGhhU2xpZGVyQ29sb3I6IHN0cmluZ1xuXG4gICAgc3ZTbGlkZXJMaWdodCA9IGZhbHNlXG4gICAgaHVlU2xpZGVyTGlnaHQgPSBmYWxzZVxuICAgIHZhbHVlU2xpZGVyTGlnaHQgPSBmYWxzZVxuICAgIGFscGhhU2xpZGVyTGlnaHQgPSBmYWxzZVxuXG4gICAgY3BXaWR0aDogc3RyaW5nXG4gICAgY3BIZWlnaHQ6IHN0cmluZ1xuXG4gICAgY3BNb2RlOiBDb2xvck1vZGVJbnRlcm5hbCA9IENvbG9yTW9kZUludGVybmFsLmNvbG9yXG5cbiAgICBjcENteWtFbmFibGVkOiBib29sZWFuXG4gICAgY3BBbHBoYUNoYW5uZWw6IEFscGhhQ2hhbm5lbFxuICAgIGNwT3V0cHV0Rm9ybWF0OiBPdXRwdXRGb3JtYXRcblxuICAgIGNwRGlzYWJsZUlucHV0OiBib29sZWFuXG4gICAgY3BEaWFsb2dEaXNwbGF5OiBEaWFsb2dEaXNwbGF5XG5cbiAgICBjcElnbm9yZWRFbGVtZW50czogYW55W11cblxuICAgIGNwU2F2ZUNsaWNrT3V0c2lkZTogYm9vbGVhblxuICAgIGNwQ2xvc2VDbGlja091dHNpZGU6IGJvb2xlYW5cblxuICAgIGNwUG9zaXRpb246IERpYWxvZ1Bvc2l0aW9uID0gRGlhbG9nUG9zaXRpb24ucmlnaHRcblxuICAgIGNwT0tCdXR0b246IGJvb2xlYW5cblxuICAgIGNwQ2FuY2VsQnV0dG9uOiBib29sZWFuXG5cbiAgICBjcFByZXNldExhYmVsOiBib29sZWFuIHwgc3RyaW5nXG4gICAgY3BQcmVzZXRDb2xvcnM6IHN0cmluZ1tdXG4gICAgY3BNYXhQcmVzZXRDb2xvcnM6IG51bWJlclxuXG4gICAgY3BBZGRDb2xvckJ1dHRvbjogYm9vbGVhblxuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHByaXZhdGUgZWxSZWY6IEVsZW1lbnRSZWYsXG4gICAgICAgIHByaXZhdGUgY2RSZWY6IENoYW5nZURldGVjdG9yUmVmLFxuICAgICAgICBwcml2YXRlIHNlcnZpY2U6IENvbG9yUGlja2VyU2VydmljZVxuICAgICkgeyB9XG5cbiAgICBASG9zdExpc3RlbmVyKCdkb2N1bWVudDprZXl1cC5lc2MnLCBbJyRldmVudCddKVxuICAgIG9uQ2FuY2VsKGV2ZW50OiBFdmVudCkge1xuICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKVxuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpXG5cbiAgICAgICAgaWYgKHRoaXMuaW5pdGlhbENvbG9yKSB7XG4gICAgICAgICAgICB0aGlzLnNldENvbG9yRnJvbVN0cmluZyh0aGlzLmluaXRpYWxDb2xvciwgdHJ1ZSlcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmNhbGxiYWNrcykge1xuICAgICAgICAgICAgdGhpcy5jYWxsYmFja3MuY29sb3JTZWxlY3RDYW5jZWxlZCgpXG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5zaG93ICYmIHRoaXMuY3BEaWFsb2dEaXNwbGF5ID09IERpYWxvZ0Rpc3BsYXkucG9wdXApIHtcbiAgICAgICAgICAgIHRoaXMuY2xvc2VDb2xvclBpY2tlcigpXG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBASG9zdExpc3RlbmVyKCdkb2N1bWVudDprZXl1cC5lbnRlcicsIFsnJGV2ZW50J10pXG4gICAgb25BY2NlcHQoZXZlbnQ6IEV2ZW50KSB7XG4gICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KClcblxuICAgICAgICBpZiAodGhpcy5zaG93ICYmIHRoaXMuY3BEaWFsb2dEaXNwbGF5ID09IERpYWxvZ0Rpc3BsYXkucG9wdXApIHtcbiAgICAgICAgICAgIGlmICh0aGlzLm91dHB1dENvbG9yICYmIHRoaXMuY2FsbGJhY2tzKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jYWxsYmFja3MuY29sb3JTZWxlY3RlZCh0aGlzLm91dHB1dENvbG9yKVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAodGhpcy5jcERpYWxvZ0Rpc3BsYXkgPT0gRGlhbG9nRGlzcGxheS5wb3B1cCkge1xuICAgICAgICAgICAgICAgIHRoaXMuY2xvc2VDb2xvclBpY2tlcigpXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBASG9zdExpc3RlbmVyKCdkb2N1bWVudDptb3VzZWRvd24nLCBbJyRldmVudCddKVxuICAgIEBIb3N0TGlzdGVuZXIoJ2RvY3VtZW50OmZvY3VzaW4nLCBbJyRldmVudCddKVxuICAgIG9uRm9jdXNDaGFuZ2UoZXZlbnQ6IE1vdXNlRXZlbnQgfCBGb2N1c0V2ZW50KSB7XG4gICAgICAgIGNvbnN0IHBhdGggPSBuZXcgU2V0KGNvbXBvc2VkUGF0aChldmVudCkpXG4gICAgICAgIGNvbnN0IGludGVyc2VjdCA9IHRoaXMuY3BJZ25vcmVkRWxlbWVudHMuZmluZChlbCA9PiBwYXRoLmhhcyhlbCkpXG5cbiAgICAgICAgaWYgKCFpbnRlcnNlY3QpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnNob3cgJiYgdGhpcy5jcERpYWxvZ0Rpc3BsYXkgPT0gRGlhbG9nRGlzcGxheS5wb3B1cCkge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmNwU2F2ZUNsaWNrT3V0c2lkZSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5vdXRwdXRDb2xvciAmJiB0aGlzLmNhbGxiYWNrcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jYWxsYmFja3MuY29sb3JTZWxlY3RlZCh0aGlzLm91dHB1dENvbG9yKVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRDb2xvckZyb21TdHJpbmcodGhpcy5pbml0aWFsQ29sb3IsIGZhbHNlKVxuXG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmNhbGxiYWNrcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuY3BDbXlrRW5hYmxlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2FsbGJhY2tzLmNteWtDaGFuZ2VkKHRoaXMuY215a0NvbG9yKVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNhbGxiYWNrcy5jb2xvckNoYW5nZWQodGhpcy5pbml0aWFsQ29sb3IpXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAodGhpcy5jcENsb3NlQ2xpY2tPdXRzaWRlKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY2xvc2VDb2xvclBpY2tlcigpXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLmNwU2F2ZUNsaWNrT3V0c2lkZSAmJiB0aGlzLm91dHB1dENvbG9yICYmIHRoaXMuY2FsbGJhY2tzKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jYWxsYmFja3MuY29sb3JTZWxlY3RlZCh0aGlzLm91dHB1dENvbG9yKVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgbmdPbkluaXQoKSB7XG4gICAgICAgIHRoaXMuc2xpZGVyID0gbmV3IFNsaWRlclBvc2l0aW9uKDAsIDAsIDAsIDApXG5cbiAgICAgICAgaWYgKHRoaXMuY3BDbXlrRW5hYmxlZCkge1xuICAgICAgICAgICAgdGhpcy5mb3JtYXQgPSBDb2xvckZvcm1hdC5jbXlrXG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5jcE91dHB1dEZvcm1hdCA9PSBPdXRwdXRGb3JtYXQucmdiYSkge1xuICAgICAgICAgICAgdGhpcy5mb3JtYXQgPSBDb2xvckZvcm1hdC5yZ2JhXG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5jcE91dHB1dEZvcm1hdCA9PSBPdXRwdXRGb3JtYXQuaHNsYSkge1xuICAgICAgICAgICAgdGhpcy5mb3JtYXQgPSBDb2xvckZvcm1hdC5oc2xhXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmZvcm1hdCA9IENvbG9yRm9ybWF0LmhleFxuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5vcGVuRGlhbG9nKHRoaXMuaW5pdGlhbENvbG9yLCBmYWxzZSlcbiAgICB9XG5cbiAgICBuZ09uRGVzdHJveSgpIHtcbiAgICAgICAgdGhpcy5jbG9zZURpYWxvZygpXG4gICAgfVxuXG4gICAgbmdBZnRlclZpZXdDaGVja2VkKCkgeyB9XG5cbiAgICBvcGVuRGlhbG9nKGNvbG9yOiBhbnksIGVtaXQ6IGJvb2xlYW4gPSB0cnVlKSB7XG4gICAgICAgIHRoaXMuc2VydmljZS5zZXRBY3RpdmUodGhpcylcblxuICAgICAgICB0aGlzLnNldEluaXRpYWxDb2xvcihjb2xvcilcblxuICAgICAgICB0aGlzLnNldENvbG9yRnJvbVN0cmluZyhjb2xvciwgZW1pdClcblxuICAgICAgICB0aGlzLm9wZW5Db2xvclBpY2tlcigpXG4gICAgfVxuXG4gICAgY2xvc2VEaWFsb2coKSB7XG4gICAgICAgIHRoaXMuY2xvc2VDb2xvclBpY2tlcigpXG4gICAgfVxuXG4gICAgc2V0dXBEaWFsb2coY29uZmlnOiBEaWFsb2dDb25maWcpIHtcbiAgICAgICAgdGhpcy5zZXRJbml0aWFsQ29sb3IoY29uZmlnLmNvbG9yKVxuXG4gICAgICAgIHRoaXMuY3BNb2RlID0gcGFyc2VDb2xvck1vZGUoY29uZmlnLmNwTW9kZSlcblxuICAgICAgICB0aGlzLmNhbGxiYWNrcyA9IGNvbmZpZy5jYWxsYmFja3NcblxuICAgICAgICB0aGlzLmNwRGlzYWJsZUlucHV0ID0gY29uZmlnLmNwRGlzYWJsZUlucHV0XG5cbiAgICAgICAgdGhpcy5jcENteWtFbmFibGVkID0gY29uZmlnLmNwQ215a0VuYWJsZWRcbiAgICAgICAgdGhpcy5jcEFscGhhQ2hhbm5lbCA9IGNvbmZpZy5jcEFscGhhQ2hhbm5lbFxuICAgICAgICB0aGlzLmNwT3V0cHV0Rm9ybWF0ID0gY29uZmlnLmNwT3V0cHV0Rm9ybWF0XG4gICAgICAgIHRoaXMuY3BEaWFsb2dEaXNwbGF5ID0gY29uZmlnLmNwRGlhbG9nRGlzcGxheVxuXG4gICAgICAgIHRoaXMuY3BJZ25vcmVkRWxlbWVudHMgPSBbXG4gICAgICAgICAgICAuLi4oQXJyYXkuaXNBcnJheShjb25maWcuY3BJZ25vcmVkRWxlbWVudHMpID8gY29uZmlnLmNwSWdub3JlZEVsZW1lbnRzIDogW2NvbmZpZy5jcElnbm9yZWRFbGVtZW50c10pLFxuICAgICAgICAgICAgdGhpcy5lbFJlZiAmJiB0aGlzLmVsUmVmLm5hdGl2ZUVsZW1lbnQsXG4gICAgICAgICAgICBjb25maWcuZWxlbWVudFJlZiAmJiBjb25maWcuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50XG4gICAgICAgIF0uZmlsdGVyKGUgPT4gISFlKVxuXG4gICAgICAgIHRoaXMuY3BTYXZlQ2xpY2tPdXRzaWRlID0gY29uZmlnLmNwU2F2ZUNsaWNrT3V0c2lkZVxuICAgICAgICB0aGlzLmNwQ2xvc2VDbGlja091dHNpZGUgPSBjb25maWcuY3BDbG9zZUNsaWNrT3V0c2lkZVxuXG4gICAgICAgIHRoaXMuY3BXaWR0aCA9IHNpemVUb1N0cmluZyhjb25maWcuY3BXaWR0aClcbiAgICAgICAgdGhpcy5jcEhlaWdodCA9IHNpemVUb1N0cmluZyhjb25maWcuY3BIZWlnaHQpXG5cbiAgICAgICAgdGhpcy5jcFBvc2l0aW9uID0gY29uZmlnLmNwUG9zaXRpb25cblxuICAgICAgICB0aGlzLmNwT0tCdXR0b24gPSBjb25maWcuY3BPS0J1dHRvblxuXG4gICAgICAgIHRoaXMuY3BDYW5jZWxCdXR0b24gPSBjb25maWcuY3BDYW5jZWxCdXR0b25cblxuICAgICAgICB0aGlzLmZhbGxiYWNrQ29sb3IgPSBjb25maWcuY3BGYWxsYmFja0NvbG9yIHx8ICcjZmZmJ1xuXG4gICAgICAgIHRoaXMuc2V0UHJlc2V0Q29uZmlnKGNvbmZpZy5jcFByZXNldExhYmVsLCBjb25maWcuY3BQcmVzZXRDb2xvcnMpXG5cbiAgICAgICAgdGhpcy5jcE1heFByZXNldENvbG9ycyA9IGNvbmZpZy5jcE1heFByZXNldENvbG9yc1xuXG4gICAgICAgIHRoaXMuY3BBZGRDb2xvckJ1dHRvbiA9IGNvbmZpZy5jcEFkZENvbG9yQnV0dG9uXG5cbiAgICAgICAgaWYgKGNvbmZpZy5jcE91dHB1dEZvcm1hdCA9PSBPdXRwdXRGb3JtYXQuaGV4ICYmXG4gICAgICAgICAgICBjb25maWcuY3BBbHBoYUNoYW5uZWwgIT0gQWxwaGFDaGFubmVsLmFsd2F5cyAmJiBjb25maWcuY3BBbHBoYUNoYW5uZWwgIT0gQWxwaGFDaGFubmVsLmZvcmNlZCkge1xuICAgICAgICAgICAgdGhpcy5jcEFscGhhQ2hhbm5lbCA9IEFscGhhQ2hhbm5lbC5kaXNhYmxlZFxuICAgICAgICB9XG4gICAgfVxuXG4gICAgc2V0SW5pdGlhbENvbG9yKGNvbG9yOiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5pbml0aWFsQ29sb3IgPSBjb2xvclxuICAgICAgICB0aGlzLnNldENvbG9yRnJvbVN0cmluZyh0aGlzLmluaXRpYWxDb2xvciwgZmFsc2UsIHRydWUpXG4gICAgfVxuXG4gICAgc2V0UHJlc2V0Q29uZmlnKGNwUHJlc2V0TGFiZWw6IGJvb2xlYW4gfCBzdHJpbmcsIGNwUHJlc2V0Q29sb3JzOiBzdHJpbmdbXSkge1xuICAgICAgICB0aGlzLmNwUHJlc2V0TGFiZWwgPSBjcFByZXNldExhYmVsXG4gICAgICAgIHRoaXMuY3BQcmVzZXRDb2xvcnMgPSBjcFByZXNldENvbG9yc1xuICAgIH1cblxuICAgIHNldENvbG9yRnJvbVN0cmluZyh2YWx1ZTogc3RyaW5nLCBlbWl0OiBib29sZWFuID0gdHJ1ZSwgdXBkYXRlOiBib29sZWFuID0gdHJ1ZSkge1xuICAgICAgICBsZXQgaHN2YSA9IHN0cmluZ1RvSHN2YSh2YWx1ZSwgdHJ1ZSlcbiAgICAgICAgbGV0IGNteWsgPSBzdHJpbmdUb0NteWsodmFsdWUsIHRydWUpXG5cbiAgICAgICAgaWYgKCghaHN2YSAmJiAhdGhpcy5oc3ZhKSAmJiAoIWNteWsgJiYgIXRoaXMuY215aykpIHtcbiAgICAgICAgICAgIGhzdmEgPSBzdHJpbmdUb0hzdmEodGhpcy5mYWxsYmFja0NvbG9yLCB0cnVlKVxuICAgICAgICAgICAgY215ayA9IHN0cmluZ1RvQ215ayh0aGlzLmZhbGxiYWNrQ29sb3IsIHRydWUpXG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaHN2YSB8fCBjbXlrKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5jcEFscGhhQ2hhbm5lbCA9PSBBbHBoYUNoYW5uZWwuZGlzYWJsZWQpIHtcbiAgICAgICAgICAgICAgICBoc3ZhLmEgPSAxXG4gICAgICAgICAgICAgICAgY215ay5hID0gMVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLmhzdmEgPSBoc3ZhXG4gICAgICAgICAgICB0aGlzLmNteWsgPSBjbXlrID8gZGVub3JtYWxpemVDTVlLKGNteWspIDogY215a1xuXG4gICAgICAgICAgICB0aGlzLnNsaWRlckggPSB0aGlzLmhzdmEuaFxuXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZUNvbG9yUGlja2VyKGVtaXQsIHVwZGF0ZSwgKGNteWsgJiYgdGhpcy5jcENteWtFbmFibGVkKSlcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG9uRHJhZ0VuZChzbGlkZXI6IHN0cmluZykge1xuICAgICAgICBpZiAodGhpcy5jYWxsYmFja3MpIHtcbiAgICAgICAgICAgIHRoaXMuY2FsbGJhY2tzLnNsaWRlckRyYWdFbmQoeyBzbGlkZXIsIGNvbG9yOiB0aGlzLm91dHB1dENvbG9yIH0pXG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBvbkRyYWdTdGFydChzbGlkZXI6IHN0cmluZykge1xuICAgICAgICBpZiAodGhpcy5jYWxsYmFja3MpIHtcbiAgICAgICAgICAgIHRoaXMuY2FsbGJhY2tzLnNsaWRlckRyYWdTdGFydCh7IHNsaWRlciwgY29sb3I6IHRoaXMub3V0cHV0Q29sb3IgfSlcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG9uRm9ybWF0VG9nZ2xlKGNoYW5nZTogbnVtYmVyKSB7XG4gICAgICAgIGNvbnN0IGF2YWlsYWJsZUZvcm1hdHMgPSB0aGlzLmRpYWxvZ0lucHV0RmllbGRzLmxlbmd0aCAtICh0aGlzLmNwQ215a0VuYWJsZWQgPyAwIDogMSlcblxuICAgICAgICBjb25zdCBuZXh0Rm9ybWF0ID0gKCgodGhpcy5kaWFsb2dJbnB1dEZpZWxkcy5pbmRleE9mKHRoaXMuZm9ybWF0KSArIGNoYW5nZSkgJVxuICAgICAgICAgICAgYXZhaWxhYmxlRm9ybWF0cykgKyBhdmFpbGFibGVGb3JtYXRzKSAlIGF2YWlsYWJsZUZvcm1hdHNcblxuICAgICAgICB0aGlzLmZvcm1hdCA9IHRoaXMuZGlhbG9nSW5wdXRGaWVsZHNbbmV4dEZvcm1hdF1cbiAgICB9XG5cbiAgICBvbkNvbG9yQ2hhbmdlKHZhbHVlOiB7IHM6IG51bWJlciwgdjogbnVtYmVyLCByZ1g6IG51bWJlciwgcmdZOiBudW1iZXIgfSkge1xuICAgICAgICB0aGlzLmhzdmEucyA9IHZhbHVlLnMgLyB2YWx1ZS5yZ1hcbiAgICAgICAgdGhpcy5oc3ZhLnYgPSB2YWx1ZS52IC8gdmFsdWUucmdZXG5cbiAgICAgICAgdGhpcy51cGRhdGVDb2xvclBpY2tlcigpXG5cbiAgICAgICAgaWYgKHRoaXMuY2FsbGJhY2tzKSB7XG4gICAgICAgICAgICB0aGlzLmNhbGxiYWNrcy5zbGlkZXJDaGFuZ2VkKHtcbiAgICAgICAgICAgICAgICBzbGlkZXI6ICdsaWdodG5lc3MnLFxuICAgICAgICAgICAgICAgIHZhbHVlOiB0aGlzLmhzdmEudixcbiAgICAgICAgICAgICAgICBjb2xvcjogdGhpcy5vdXRwdXRDb2xvclxuICAgICAgICAgICAgfSlcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmNhbGxiYWNrcykge1xuICAgICAgICAgICAgdGhpcy5jYWxsYmFja3Muc2xpZGVyQ2hhbmdlZCh7XG4gICAgICAgICAgICAgICAgc2xpZGVyOiAnc2F0dXJhdGlvbicsXG4gICAgICAgICAgICAgICAgdmFsdWU6IHRoaXMuaHN2YS5zLFxuICAgICAgICAgICAgICAgIGNvbG9yOiB0aGlzLm91dHB1dENvbG9yXG4gICAgICAgICAgICB9KVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgb25IdWVDaGFuZ2UodmFsdWU6IHsgdjogbnVtYmVyLCByZ1g6IG51bWJlciB9KSB7XG4gICAgICAgIHRoaXMuaHN2YS5oID0gdmFsdWUudiAvIHZhbHVlLnJnWFxuICAgICAgICB0aGlzLnNsaWRlckggPSB0aGlzLmhzdmEuaFxuXG4gICAgICAgIHRoaXMudXBkYXRlQ29sb3JQaWNrZXIoKVxuXG4gICAgICAgIGlmICh0aGlzLmNhbGxiYWNrcykge1xuICAgICAgICAgICAgdGhpcy5jYWxsYmFja3Muc2xpZGVyQ2hhbmdlZCh7XG4gICAgICAgICAgICAgICAgc2xpZGVyOiAnaHVlJyxcbiAgICAgICAgICAgICAgICB2YWx1ZTogdGhpcy5oc3ZhLmgsXG4gICAgICAgICAgICAgICAgY29sb3I6IHRoaXMub3V0cHV0Q29sb3JcbiAgICAgICAgICAgIH0pXG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBvblZhbHVlQ2hhbmdlKHZhbHVlOiB7IHY6IG51bWJlciwgcmdYOiBudW1iZXIgfSkge1xuICAgICAgICB0aGlzLmhzdmEudiA9IHZhbHVlLnYgLyB2YWx1ZS5yZ1hcblxuICAgICAgICB0aGlzLnVwZGF0ZUNvbG9yUGlja2VyKClcblxuICAgICAgICBpZiAodGhpcy5jYWxsYmFja3MpIHtcbiAgICAgICAgICAgIHRoaXMuY2FsbGJhY2tzLnNsaWRlckNoYW5nZWQoe1xuICAgICAgICAgICAgICAgIHNsaWRlcjogJ3ZhbHVlJyxcbiAgICAgICAgICAgICAgICB2YWx1ZTogdGhpcy5oc3ZhLnYsXG4gICAgICAgICAgICAgICAgY29sb3I6IHRoaXMub3V0cHV0Q29sb3JcbiAgICAgICAgICAgIH0pXG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBvbkFscGhhQ2hhbmdlKHZhbHVlOiB7IHY6IG51bWJlciwgcmdYOiBudW1iZXIgfSkge1xuICAgICAgICB0aGlzLmhzdmEuYSA9IHZhbHVlLnYgLyB2YWx1ZS5yZ1hcblxuICAgICAgICB0aGlzLnVwZGF0ZUNvbG9yUGlja2VyKClcblxuICAgICAgICBpZiAodGhpcy5jYWxsYmFja3MpIHtcbiAgICAgICAgICAgIHRoaXMuY2FsbGJhY2tzLnNsaWRlckNoYW5nZWQoe1xuICAgICAgICAgICAgICAgIHNsaWRlcjogJ2FscGhhJyxcbiAgICAgICAgICAgICAgICB2YWx1ZTogdGhpcy5oc3ZhLmEsXG4gICAgICAgICAgICAgICAgY29sb3I6IHRoaXMub3V0cHV0Q29sb3JcbiAgICAgICAgICAgIH0pXG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBvbkhleElucHV0KHZhbHVlOiBzdHJpbmcpIHtcbiAgICAgICAgaWYgKHZhbHVlID09IG51bGwpIHtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlQ29sb3JQaWNrZXIoKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKHZhbHVlICYmIHZhbHVlWzBdICE9ICcjJykge1xuICAgICAgICAgICAgICAgIHZhbHVlID0gJyMnICsgdmFsdWVcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgdmFsaWRIZXggPSAvXiMoW2EtZjAtOV17M318W2EtZjAtOV17Nn18W2EtZjAtOV17OH0pJC9naVxuXG4gICAgICAgICAgICBjb25zdCB2YWxpZCA9IHZhbGlkSGV4LnRlc3QodmFsdWUpXG5cbiAgICAgICAgICAgIGlmICh2YWxpZCkge1xuICAgICAgICAgICAgICAgIC8vIFNob3J0IGhleFxuICAgICAgICAgICAgICAgIGlmICh2YWx1ZS5sZW5ndGggPT0gNCkge1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9ICcjJyArIHZhbHVlLnN1YnN0cmluZygxKVxuICAgICAgICAgICAgICAgICAgICAgICAgLnNwbGl0KCcnKVxuICAgICAgICAgICAgICAgICAgICAgICAgLm1hcChjID0+IGMgKyBjKVxuICAgICAgICAgICAgICAgICAgICAgICAgLmpvaW4oJycpXG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgLy8gSGV4IHdpdGhvdXQgYWxwaGFcbiAgICAgICAgICAgICAgICBpZiAodmFsdWUubGVuZ3RoID09IDcgJiYgdGhpcy5jcEFscGhhQ2hhbm5lbCA9PSBBbHBoYUNoYW5uZWwuZm9yY2VkKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlICs9IE1hdGgucm91bmQodGhpcy5oc3ZhLmEgKiAyNTUpLnRvU3RyaW5nKDE2KVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHRoaXMuc2V0Q29sb3JGcm9tU3RyaW5nKHZhbHVlLCB0cnVlLCBmYWxzZSlcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHRoaXMuY2FsbGJhY2tzKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jYWxsYmFja3MuaW5wdXRDaGFuZ2VkKHtcbiAgICAgICAgICAgICAgICAgICAgaW5wdXQ6ICdoZXgnLFxuICAgICAgICAgICAgICAgICAgICB2YWxpZCxcbiAgICAgICAgICAgICAgICAgICAgdmFsdWUsXG4gICAgICAgICAgICAgICAgICAgIGNvbG9yOiB0aGlzLm91dHB1dENvbG9yXG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIG9uUmVkSW5wdXQodmFsdWU6IHsgdjogbnVtYmVyLCByZzogbnVtYmVyIH0pIHtcbiAgICAgICAgY29uc3QgcmdiYSA9IGhzdmFUb1JnYmEodGhpcy5oc3ZhKVxuXG4gICAgICAgIGNvbnN0IHZhbGlkID0gIWlzTmFOKHZhbHVlLnYpICYmIHZhbHVlLnYgPj0gMCAmJiB2YWx1ZS52IDw9IHZhbHVlLnJnXG5cbiAgICAgICAgaWYgKHZhbGlkKSB7XG4gICAgICAgICAgICByZ2JhLnIgPSB2YWx1ZS52IC8gdmFsdWUucmdcblxuICAgICAgICAgICAgdGhpcy5oc3ZhID0gcmdiYVRvSHN2YShyZ2JhKVxuXG4gICAgICAgICAgICB0aGlzLnNsaWRlckggPSB0aGlzLmhzdmEuaFxuXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZUNvbG9yUGlja2VyKClcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmNhbGxiYWNrcykge1xuICAgICAgICAgICAgdGhpcy5jYWxsYmFja3MuaW5wdXRDaGFuZ2VkKHtcbiAgICAgICAgICAgICAgICBpbnB1dDogJ3JlZCcsXG4gICAgICAgICAgICAgICAgdmFsaWQsXG4gICAgICAgICAgICAgICAgdmFsdWU6IHJnYmEucixcbiAgICAgICAgICAgICAgICBjb2xvcjogdGhpcy5vdXRwdXRDb2xvclxuICAgICAgICAgICAgfSlcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG9uQmx1ZUlucHV0KHZhbHVlOiB7IHY6IG51bWJlciwgcmc6IG51bWJlciB9KSB7XG4gICAgICAgIGNvbnN0IHJnYmEgPSBoc3ZhVG9SZ2JhKHRoaXMuaHN2YSlcblxuICAgICAgICBjb25zdCB2YWxpZCA9ICFpc05hTih2YWx1ZS52KSAmJiB2YWx1ZS52ID49IDAgJiYgdmFsdWUudiA8PSB2YWx1ZS5yZ1xuXG4gICAgICAgIGlmICh2YWxpZCkge1xuICAgICAgICAgICAgcmdiYS5iID0gdmFsdWUudiAvIHZhbHVlLnJnXG5cbiAgICAgICAgICAgIHRoaXMuaHN2YSA9IHJnYmFUb0hzdmEocmdiYSlcblxuICAgICAgICAgICAgdGhpcy5zbGlkZXJIID0gdGhpcy5oc3ZhLmhcblxuICAgICAgICAgICAgdGhpcy51cGRhdGVDb2xvclBpY2tlcigpXG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5jYWxsYmFja3MpIHtcbiAgICAgICAgICAgIHRoaXMuY2FsbGJhY2tzLmlucHV0Q2hhbmdlZCh7XG4gICAgICAgICAgICAgICAgaW5wdXQ6ICdibHVlJyxcbiAgICAgICAgICAgICAgICB2YWxpZCxcbiAgICAgICAgICAgICAgICB2YWx1ZTogcmdiYS5iLFxuICAgICAgICAgICAgICAgIGNvbG9yOiB0aGlzLm91dHB1dENvbG9yXG4gICAgICAgICAgICB9KVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgb25HcmVlbklucHV0KHZhbHVlOiB7IHY6IG51bWJlciwgcmc6IG51bWJlciB9KSB7XG4gICAgICAgIGNvbnN0IHJnYmEgPSBoc3ZhVG9SZ2JhKHRoaXMuaHN2YSlcblxuICAgICAgICBjb25zdCB2YWxpZCA9ICFpc05hTih2YWx1ZS52KSAmJiB2YWx1ZS52ID49IDAgJiYgdmFsdWUudiA8PSB2YWx1ZS5yZ1xuXG4gICAgICAgIGlmICh2YWxpZCkge1xuICAgICAgICAgICAgcmdiYS5nID0gdmFsdWUudiAvIHZhbHVlLnJnXG5cbiAgICAgICAgICAgIHRoaXMuaHN2YSA9IHJnYmFUb0hzdmEocmdiYSlcblxuICAgICAgICAgICAgdGhpcy5zbGlkZXJIID0gdGhpcy5oc3ZhLmhcblxuICAgICAgICAgICAgdGhpcy51cGRhdGVDb2xvclBpY2tlcigpXG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5jYWxsYmFja3MpIHtcbiAgICAgICAgICAgIHRoaXMuY2FsbGJhY2tzLmlucHV0Q2hhbmdlZCh7XG4gICAgICAgICAgICAgICAgaW5wdXQ6ICdncmVlbicsXG4gICAgICAgICAgICAgICAgdmFsaWQsXG4gICAgICAgICAgICAgICAgdmFsdWU6IHJnYmEuZyxcbiAgICAgICAgICAgICAgICBjb2xvcjogdGhpcy5vdXRwdXRDb2xvclxuICAgICAgICAgICAgfSlcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG9uSHVlSW5wdXQodmFsdWU6IHsgdjogbnVtYmVyLCByZzogbnVtYmVyIH0pIHtcbiAgICAgICAgY29uc3QgdmFsaWQgPSAhaXNOYU4odmFsdWUudikgJiYgdmFsdWUudiA+PSAwICYmIHZhbHVlLnYgPD0gdmFsdWUucmdcblxuICAgICAgICBpZiAodmFsaWQpIHtcbiAgICAgICAgICAgIHRoaXMuaHN2YS5oID0gdmFsdWUudiAvIHZhbHVlLnJnXG5cbiAgICAgICAgICAgIHRoaXMuc2xpZGVySCA9IHRoaXMuaHN2YS5oXG5cbiAgICAgICAgICAgIHRoaXMudXBkYXRlQ29sb3JQaWNrZXIoKVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuY2FsbGJhY2tzKSB7XG4gICAgICAgICAgICB0aGlzLmNhbGxiYWNrcy5pbnB1dENoYW5nZWQoe1xuICAgICAgICAgICAgICAgIGlucHV0OiAnaHVlJyxcbiAgICAgICAgICAgICAgICB2YWxpZCxcbiAgICAgICAgICAgICAgICB2YWx1ZTogdGhpcy5oc3ZhLmgsXG4gICAgICAgICAgICAgICAgY29sb3I6IHRoaXMub3V0cHV0Q29sb3JcbiAgICAgICAgICAgIH0pXG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBvblZhbHVlSW5wdXQodmFsdWU6IHsgdjogbnVtYmVyLCByZzogbnVtYmVyIH0pIHtcbiAgICAgICAgY29uc3QgdmFsaWQgPSAhaXNOYU4odmFsdWUudikgJiYgdmFsdWUudiA+PSAwICYmIHZhbHVlLnYgPD0gdmFsdWUucmdcblxuICAgICAgICBpZiAodmFsaWQpIHtcbiAgICAgICAgICAgIHRoaXMuaHN2YS52ID0gdmFsdWUudiAvIHZhbHVlLnJnXG5cbiAgICAgICAgICAgIHRoaXMudXBkYXRlQ29sb3JQaWNrZXIoKVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuY2FsbGJhY2tzKSB7XG4gICAgICAgICAgICB0aGlzLmNhbGxiYWNrcy5pbnB1dENoYW5nZWQoe1xuICAgICAgICAgICAgICAgIGlucHV0OiAndmFsdWUnLFxuICAgICAgICAgICAgICAgIHZhbGlkLFxuICAgICAgICAgICAgICAgIHZhbHVlOiB0aGlzLmhzdmEudixcbiAgICAgICAgICAgICAgICBjb2xvcjogdGhpcy5vdXRwdXRDb2xvclxuICAgICAgICAgICAgfSlcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG9uQWxwaGFJbnB1dCh2YWx1ZTogeyB2OiBudW1iZXIsIHJnOiBudW1iZXIgfSkge1xuICAgICAgICBjb25zdCB2YWxpZCA9ICFpc05hTih2YWx1ZS52KSAmJiB2YWx1ZS52ID49IDAgJiYgdmFsdWUudiA8PSB2YWx1ZS5yZ1xuXG4gICAgICAgIGlmICh2YWxpZCkge1xuICAgICAgICAgICAgdGhpcy5oc3ZhLmEgPSB2YWx1ZS52IC8gdmFsdWUucmdcblxuICAgICAgICAgICAgdGhpcy51cGRhdGVDb2xvclBpY2tlcigpXG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5jYWxsYmFja3MpIHtcbiAgICAgICAgICAgIHRoaXMuY2FsbGJhY2tzLmlucHV0Q2hhbmdlZCh7XG4gICAgICAgICAgICAgICAgaW5wdXQ6ICdhbHBoYScsXG4gICAgICAgICAgICAgICAgdmFsaWQsXG4gICAgICAgICAgICAgICAgdmFsdWU6IHRoaXMuaHN2YS5hLFxuICAgICAgICAgICAgICAgIGNvbG9yOiB0aGlzLm91dHB1dENvbG9yXG4gICAgICAgICAgICB9KVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgb25MaWdodG5lc3NJbnB1dCh2YWx1ZTogeyB2OiBudW1iZXIsIHJnOiBudW1iZXIgfSkge1xuICAgICAgICBjb25zdCBoc2xhID0gaHN2YTJoc2xhKHRoaXMuaHN2YSlcblxuICAgICAgICBjb25zdCB2YWxpZCA9ICFpc05hTih2YWx1ZS52KSAmJiB2YWx1ZS52ID49IDAgJiYgdmFsdWUudiA8PSB2YWx1ZS5yZ1xuXG4gICAgICAgIGlmICh2YWxpZCkge1xuICAgICAgICAgICAgaHNsYS5sID0gdmFsdWUudiAvIHZhbHVlLnJnXG5cbiAgICAgICAgICAgIHRoaXMuaHN2YSA9IGhzbGEyaHN2YShoc2xhKVxuXG4gICAgICAgICAgICB0aGlzLnNsaWRlckggPSB0aGlzLmhzdmEuaFxuXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZUNvbG9yUGlja2VyKClcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmNhbGxiYWNrcykge1xuICAgICAgICAgICAgdGhpcy5jYWxsYmFja3MuaW5wdXRDaGFuZ2VkKHtcbiAgICAgICAgICAgICAgICBpbnB1dDogJ2xpZ2h0bmVzcycsXG4gICAgICAgICAgICAgICAgdmFsaWQsXG4gICAgICAgICAgICAgICAgdmFsdWU6IGhzbGEubCxcbiAgICAgICAgICAgICAgICBjb2xvcjogdGhpcy5vdXRwdXRDb2xvclxuICAgICAgICAgICAgfSlcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG9uU2F0dXJhdGlvbklucHV0KHZhbHVlOiB7IHY6IG51bWJlciwgcmc6IG51bWJlciB9KSB7XG4gICAgICAgIGNvbnN0IGhzbGEgPSBoc3ZhMmhzbGEodGhpcy5oc3ZhKVxuXG4gICAgICAgIGNvbnN0IHZhbGlkID0gIWlzTmFOKHZhbHVlLnYpICYmIHZhbHVlLnYgPj0gMCAmJiB2YWx1ZS52IDw9IHZhbHVlLnJnXG5cbiAgICAgICAgaWYgKHZhbGlkKSB7XG4gICAgICAgICAgICBoc2xhLnMgPSB2YWx1ZS52IC8gdmFsdWUucmdcblxuICAgICAgICAgICAgdGhpcy5oc3ZhID0gaHNsYTJoc3ZhKGhzbGEpXG5cbiAgICAgICAgICAgIHRoaXMuc2xpZGVySCA9IHRoaXMuaHN2YS5oXG5cbiAgICAgICAgICAgIHRoaXMudXBkYXRlQ29sb3JQaWNrZXIoKVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuY2FsbGJhY2tzKSB7XG4gICAgICAgICAgICB0aGlzLmNhbGxiYWNrcy5pbnB1dENoYW5nZWQoe1xuICAgICAgICAgICAgICAgIGlucHV0OiAnc2F0dXJhdGlvbicsXG4gICAgICAgICAgICAgICAgdmFsaWQsXG4gICAgICAgICAgICAgICAgdmFsdWU6IGhzbGEucyxcbiAgICAgICAgICAgICAgICBjb2xvcjogdGhpcy5vdXRwdXRDb2xvclxuICAgICAgICAgICAgfSlcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBvbkN5YW5JbnB1dCh2YWx1ZTogeyB2OiBudW1iZXIsIHJnOiBudW1iZXIgfSk6IHZvaWQge1xuICAgICAgICBjb25zdCB2YWxpZCA9ICFpc05hTih2YWx1ZS52KSAmJiB2YWx1ZS52ID49IDAgJiYgdmFsdWUudiA8PSB2YWx1ZS5yZ1xuXG4gICAgICAgIGlmICh2YWxpZCkge1xuICAgICAgICAgICAgdGhpcy5jbXlrLmMgPSB2YWx1ZS52XG5cbiAgICAgICAgICAgIHRoaXMudXBkYXRlQ29sb3JQaWNrZXIodHJ1ZSwgdHJ1ZSwgdHJ1ZSlcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmNhbGxiYWNrcykge1xuICAgICAgICAgICAgdGhpcy5jYWxsYmFja3MuaW5wdXRDaGFuZ2VkKHtcbiAgICAgICAgICAgICAgICBpbnB1dDogJ2N5YW4nLFxuICAgICAgICAgICAgICAgIHZhbGlkOiB0cnVlLFxuICAgICAgICAgICAgICAgIHZhbHVlOiB0aGlzLmNteWsuYyxcbiAgICAgICAgICAgICAgICBjb2xvcjogdGhpcy5vdXRwdXRDb2xvclxuICAgICAgICAgICAgfSlcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBvbk1hZ2VudGFJbnB1dCh2YWx1ZTogeyB2OiBudW1iZXIsIHJnOiBudW1iZXIgfSk6IHZvaWQge1xuICAgICAgICBjb25zdCB2YWxpZCA9ICFpc05hTih2YWx1ZS52KSAmJiB2YWx1ZS52ID49IDAgJiYgdmFsdWUudiA8PSB2YWx1ZS5yZ1xuXG4gICAgICAgIGlmICh2YWxpZCkge1xuICAgICAgICAgICAgdGhpcy5jbXlrLm0gPSB2YWx1ZS52XG5cbiAgICAgICAgICAgIHRoaXMudXBkYXRlQ29sb3JQaWNrZXIodHJ1ZSwgdHJ1ZSwgdHJ1ZSlcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmNhbGxiYWNrcykge1xuICAgICAgICAgICAgdGhpcy5jYWxsYmFja3MuaW5wdXRDaGFuZ2VkKHtcbiAgICAgICAgICAgICAgICBpbnB1dDogJ21hZ2VudGEnLFxuICAgICAgICAgICAgICAgIHZhbGlkOiB0cnVlLFxuICAgICAgICAgICAgICAgIHZhbHVlOiB0aGlzLmNteWsubSxcbiAgICAgICAgICAgICAgICBjb2xvcjogdGhpcy5vdXRwdXRDb2xvclxuICAgICAgICAgICAgfSlcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBvblllbGxvd0lucHV0KHZhbHVlOiB7IHY6IG51bWJlciwgcmc6IG51bWJlciB9KTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHZhbGlkID0gIWlzTmFOKHZhbHVlLnYpICYmIHZhbHVlLnYgPj0gMCAmJiB2YWx1ZS52IDw9IHZhbHVlLnJnXG5cbiAgICAgICAgaWYgKHZhbGlkKSB7XG4gICAgICAgICAgICB0aGlzLmNteWsueSA9IHZhbHVlLnZcblxuICAgICAgICAgICAgdGhpcy51cGRhdGVDb2xvclBpY2tlcih0cnVlLCB0cnVlLCB0cnVlKVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuY2FsbGJhY2tzKSB7XG4gICAgICAgICAgICB0aGlzLmNhbGxiYWNrcy5pbnB1dENoYW5nZWQoe1xuICAgICAgICAgICAgICAgIGlucHV0OiAneWVsbG93JyxcbiAgICAgICAgICAgICAgICB2YWxpZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICB2YWx1ZTogdGhpcy5jbXlrLnksXG4gICAgICAgICAgICAgICAgY29sb3I6IHRoaXMub3V0cHV0Q29sb3JcbiAgICAgICAgICAgIH0pXG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgb25CbGFja0lucHV0KHZhbHVlOiB7IHY6IG51bWJlciwgcmc6IG51bWJlciB9KTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHZhbGlkID0gIWlzTmFOKHZhbHVlLnYpICYmIHZhbHVlLnYgPj0gMCAmJiB2YWx1ZS52IDw9IHZhbHVlLnJnXG5cbiAgICAgICAgaWYgKHZhbGlkKSB7XG4gICAgICAgICAgICB0aGlzLmNteWsuayA9IHZhbHVlLnZcblxuICAgICAgICAgICAgdGhpcy51cGRhdGVDb2xvclBpY2tlcih0cnVlLCB0cnVlLCB0cnVlKVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuY2FsbGJhY2tzKSB7XG4gICAgICAgICAgICB0aGlzLmNhbGxiYWNrcy5pbnB1dENoYW5nZWQoe1xuICAgICAgICAgICAgICAgIGlucHV0OiAnYmxhY2snLFxuICAgICAgICAgICAgICAgIHZhbGlkOiB0cnVlLFxuICAgICAgICAgICAgICAgIHZhbHVlOiB0aGlzLmNteWsuayxcbiAgICAgICAgICAgICAgICBjb2xvcjogdGhpcy5vdXRwdXRDb2xvclxuICAgICAgICAgICAgfSlcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG9uQWRkUHJlc2V0Q29sb3IodmFsdWU6IHN0cmluZykge1xuICAgICAgICBpZiAoIXRoaXMuY3BQcmVzZXRDb2xvcnMuZmlsdGVyKChjb2xvcikgPT4gKGNvbG9yID09IHZhbHVlKSkubGVuZ3RoKSB7XG4gICAgICAgICAgICB0aGlzLmNwUHJlc2V0Q29sb3JzID0gdGhpcy5jcFByZXNldENvbG9ycy5jb25jYXQodmFsdWUpXG5cbiAgICAgICAgICAgIGlmICh0aGlzLmNhbGxiYWNrcykge1xuICAgICAgICAgICAgICAgIHRoaXMuY2FsbGJhY2tzLnByZXNldENvbG9yc0NoYW5nZWQodGhpcy5jcFByZXNldENvbG9ycylcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIG9uUmVtb3ZlUHJlc2V0Q29sb3IodmFsdWU6IHN0cmluZykge1xuICAgICAgICB0aGlzLmNwUHJlc2V0Q29sb3JzID0gdGhpcy5jcFByZXNldENvbG9ycy5maWx0ZXIoKGNvbG9yKSA9PiAoY29sb3IgIT0gdmFsdWUpKVxuXG4gICAgICAgIGlmICh0aGlzLmNhbGxiYWNrcykge1xuICAgICAgICAgICAgdGhpcy5jYWxsYmFja3MucHJlc2V0Q29sb3JzQ2hhbmdlZCh0aGlzLmNwUHJlc2V0Q29sb3JzKVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gUHJpdmF0ZSBoZWxwZXIgZnVuY3Rpb25zIGZvciB0aGUgY29sb3IgcGlja2VyIGRpYWxvZyBzdGF0dXNcblxuICAgIHByaXZhdGUgb3BlbkNvbG9yUGlja2VyKCkge1xuICAgICAgICBpZiAoIXRoaXMuc2hvdykge1xuICAgICAgICAgICAgdGhpcy5zaG93ID0gdHJ1ZVxuXG4gICAgICAgICAgICBpZiAodGhpcy5jYWxsYmFja3MpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNhbGxiYWNrcy5zdGF0ZUNoYW5nZWQodHJ1ZSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgY2xvc2VDb2xvclBpY2tlcigpIHtcbiAgICAgICAgaWYgKHRoaXMuc2hvdykge1xuICAgICAgICAgICAgdGhpcy5zaG93ID0gZmFsc2VcblxuICAgICAgICAgICAgaWYgKHRoaXMuY2FsbGJhY2tzKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jYWxsYmFja3Muc3RhdGVDaGFuZ2VkKGZhbHNlKVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoIXRoaXMuY2RSZWZbJ2Rlc3Ryb3llZCddKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jZFJlZi5kZXRlY3RDaGFuZ2VzKClcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgdXBkYXRlQ29sb3JQaWNrZXIoZW1pdDogYm9vbGVhbiA9IHRydWUsIHVwZGF0ZTogYm9vbGVhbiA9IHRydWUsIGNteWtJbnB1dDogYm9vbGVhbiA9IGZhbHNlKSB7XG4gICAgICAgIGlmICh0aGlzLmNwTW9kZSA9PSBDb2xvck1vZGVJbnRlcm5hbC5ncmF5c2NhbGUpIHtcbiAgICAgICAgICAgIHRoaXMuaHN2YS5zID0gMFxuICAgICAgICB9XG5cbiAgICAgICAgbGV0IHJnYmE6IFJnYmFcblxuICAgICAgICBjb25zdCBsYXN0T3V0cHV0ID0gdGhpcy5vdXRwdXRDb2xvclxuXG4gICAgICAgIGNvbnN0IGhzbGEgPSBoc3ZhMmhzbGEodGhpcy5oc3ZhKVxuXG4gICAgICAgIGlmICghdGhpcy5jcENteWtFbmFibGVkKSB7XG4gICAgICAgICAgICByZ2JhID0gZGVub3JtYWxpemVSR0JBKGhzdmFUb1JnYmEodGhpcy5oc3ZhKSlcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmICghY215a0lucHV0KSB7XG4gICAgICAgICAgICAgICAgcmdiYSA9IGhzdmFUb1JnYmEodGhpcy5oc3ZhKVxuXG4gICAgICAgICAgICAgICAgdGhpcy5jbXlrID0gZGVub3JtYWxpemVDTVlLKHJnYmFUb0NteWsocmdiYSkpXG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJnYmEgPSBjbXlrVG9SZ2Iobm9ybWFsaXplQ01ZSyh0aGlzLmNteWspKVxuXG4gICAgICAgICAgICAgICAgdGhpcy5oc3ZhID0gcmdiYVRvSHN2YShyZ2JhKVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZ2JhID0gZGVub3JtYWxpemVSR0JBKHJnYmEpXG5cbiAgICAgICAgICAgIHRoaXMuc2xpZGVySCA9IHRoaXMuaHN2YS5oXG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBodWUgPSBkZW5vcm1hbGl6ZVJHQkEoaHN2YVRvUmdiYShuZXcgSHN2YSh0aGlzLnNsaWRlckggfHwgdGhpcy5oc3ZhLmgsIDEsIDEsIDEpKSlcblxuICAgICAgICBpZiAodXBkYXRlKSB7XG4gICAgICAgICAgICB0aGlzLmhzbGFUZXh0ID0gbmV3IEhzbGEoTWF0aC5yb3VuZCgoaHNsYS5oKSAqIDM2MCksIE1hdGgucm91bmQoaHNsYS5zICogMTAwKSwgTWF0aC5yb3VuZChoc2xhLmwgKiAxMDApLFxuICAgICAgICAgICAgICAgIE1hdGgucm91bmQoaHNsYS5hICogMTAwKSAvIDEwMClcblxuICAgICAgICAgICAgdGhpcy5yZ2JhVGV4dCA9IG5ldyBSZ2JhKHJnYmEuciwgcmdiYS5nLCByZ2JhLmIsIE1hdGgucm91bmQocmdiYS5hICogMTAwKSAvIDEwMClcblxuICAgICAgICAgICAgaWYgKHRoaXMuY3BDbXlrRW5hYmxlZCkge1xuICAgICAgICAgICAgICAgIHRoaXMuY215a1RleHQgPSBuZXcgQ215ayh0aGlzLmNteWsuYywgdGhpcy5jbXlrLm0sIHRoaXMuY215ay55LCB0aGlzLmNteWsuayxcbiAgICAgICAgICAgICAgICAgICAgTWF0aC5yb3VuZCh0aGlzLmNteWsuYSAqIDEwMCkgLyAxMDApXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IGFsbG93SGV4OCA9IHRoaXMuY3BBbHBoYUNoYW5uZWwgPT09IEFscGhhQ2hhbm5lbC5hbHdheXNcblxuICAgICAgICAgICAgdGhpcy5oZXhUZXh0ID0gcmdiYVRvSGV4KHJnYmEsIGFsbG93SGV4OClcbiAgICAgICAgICAgIHRoaXMuaGV4QWxwaGEgPSB0aGlzLnJnYmFUZXh0LmFcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmNwT3V0cHV0Rm9ybWF0ID09IE91dHB1dEZvcm1hdC5hdXRvICYmIHRoaXMuaHN2YS5hIDwgMSAmJiAhQWxwaGFFbmFibGVkRm9ybWF0cy5oYXModGhpcy5mb3JtYXQpKSB7XG4gICAgICAgICAgICB0aGlzLmZvcm1hdCA9IHRoaXMuaHN2YS5hIDwgMSA/IENvbG9yRm9ybWF0LnJnYmEgOiBDb2xvckZvcm1hdC5oZXhcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuaHVlU2xpZGVyQ29sb3IgPSAncmdiKCcgKyBodWUuciArICcsJyArIGh1ZS5nICsgJywnICsgaHVlLmIgKyAnKSdcbiAgICAgICAgdGhpcy5hbHBoYVNsaWRlckNvbG9yID0gJ2xpbmVhci1ncmFkaWVudCh0byByaWdodCwgcmdiYSgnICsgcmdiYS5yICsgJywnICsgcmdiYS5nICsgJywnICsgcmdiYS5iICsgJywgMCkgMCUsIHJnYmEoJyArIHJnYmEuciArICcsJyArIHJnYmEuZyArICcsJyArIHJnYmEuYiArICcsIDEpIDEwMCUpJ1xuXG4gICAgICAgIHRoaXMuc3ZTbGlkZXJMaWdodCA9IG9wYXF1ZVNsaWRlckxpZ2h0KHJnYmEpXG4gICAgICAgIHRoaXMuaHVlU2xpZGVyTGlnaHQgPSBvcGFxdWVTbGlkZXJMaWdodChodWUpXG4gICAgICAgIHRoaXMudmFsdWVTbGlkZXJMaWdodCA9IG9wYXF1ZVNsaWRlckxpZ2h0KHJnYmEpXG4gICAgICAgIHRoaXMuYWxwaGFTbGlkZXJMaWdodCA9IHRyYW5zcGFyZW50U2xpZGVyTGlnaHQocmdiYSlcblxuICAgICAgICB0aGlzLm91dHB1dENvbG9yID0gZm9ybWF0T3V0cHV0KHRoaXMuaHN2YSwgdGhpcy5jcE91dHB1dEZvcm1hdCwgdGhpcy5jcEFscGhhQ2hhbm5lbClcbiAgICAgICAgdGhpcy5zZWxlY3RlZENvbG9yID0gZm9ybWF0T3V0cHV0KHRoaXMuaHN2YSwgT3V0cHV0Rm9ybWF0LnJnYmEsIG51bGwpXG5cbiAgICAgICAgaWYgKHRoaXMuZm9ybWF0ICE9PSBDb2xvckZvcm1hdC5jbXlrKSB7XG4gICAgICAgICAgICB0aGlzLmNteWtDb2xvciA9ICcnXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmNteWtDb2xvciA9IGZvcm1hdENteWsodGhpcy5jbXlrLCB0aGlzLmNwQWxwaGFDaGFubmVsKVxuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5zbGlkZXIgPSBuZXcgU2xpZGVyUG9zaXRpb24oXG4gICAgICAgICAgICAodGhpcy5zbGlkZXJIIHx8IHRoaXMuaHN2YS5oKSxcbiAgICAgICAgICAgIHRoaXMuaHN2YS5zLFxuICAgICAgICAgICAgKDEgLSB0aGlzLmhzdmEudiksXG4gICAgICAgICAgICB0aGlzLmhzdmEuYVxuICAgICAgICApXG5cbiAgICAgICAgaWYgKGVtaXQgJiYgbGFzdE91dHB1dCAhPSB0aGlzLm91dHB1dENvbG9yICYmIHRoaXMuY2FsbGJhY2tzKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5jcENteWtFbmFibGVkKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jYWxsYmFja3MuY215a0NoYW5nZWQodGhpcy5jbXlrQ29sb3IpXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuY2FsbGJhY2tzLmNvbG9yQ2hhbmdlZCh0aGlzLm91dHB1dENvbG9yKVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgZmlsbChuOiBudW1iZXIpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBBcnJheShuKS5maWxsKDEpXG4gICAgfVxufVxuIiwiPGRpdiBjbGFzcz1cImNvbG9yLXBpY2tlclwiXG4gICAgKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiXG4gICAgW25nU3R5bGVdPVwie1xuICAgICAgICB2aXNpYmlsaXR5OiAhc2hvdyA/ICdoaWRkZW4nIDogJ3Zpc2libGUnLFxuICAgICAgICB3aWR0aDogY3BXaWR0aCB8fCAnJyxcbiAgICAgICAgaGVpZ2h0OiBjcEhlaWdodCB8fCAnJ1xuICAgIH1cIlxuICAgICpuZ0lmPVwic2hvd1wiPlxuICAgIDxkaXYgKm5nSWY9XCJjcERpYWxvZ0Rpc3BsYXkgPT0gZGlhbG9nRGlzcGxheS5wb3B1cFwiXG4gICAgICAgIGNsYXNzPVwiY29sb3ItcGlja2VyX19hcnJvd1wiXG4gICAgICAgIFtuZ0NsYXNzXT1cIidjb2xvci1waWNrZXJfX2Fycm93LS0nICsgY3BQb3NpdGlvblwiPjwvZGl2PlxuICAgIDxkaXYgKm5nSWY9XCJjcE1vZGUgPT0gY29sb3JNb2RlSW50ZXJuYWwuY29sb3JcIlxuICAgICAgICBjbGFzcz1cImNvbG9yLXBpY2tlcl9fc3ZcIlxuICAgICAgICBjcFNsaWRlclxuICAgICAgICBbcmdYXT1cIjFcIlxuICAgICAgICBbcmdZXT1cIjFcIlxuICAgICAgICAobmV3VmFsdWUpPVwib25Db2xvckNoYW5nZSgkZXZlbnQpXCJcbiAgICAgICAgKGRyYWdTdGFydCk9XCJvbkRyYWdTdGFydCgnc2F0dXJhdGlvbi1saWdodG5lc3MnKVwiXG4gICAgICAgIChkcmFnRW5kKT1cIm9uRHJhZ0VuZCgnc2F0dXJhdGlvbi1saWdodG5lc3MnKVwiXG4gICAgICAgIFtuZ1N0eWxlXT1cInsgXG4gICAgICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6IGh1ZVNsaWRlckNvbG9yIHx8ICcnXG4gICAgICAgIH1cIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbG9yLXBpY2tlcl9fY3Vyc29yIGNvbG9yLXBpY2tlcl9fY3Vyc29yLS1zdlwiXG4gICAgICAgICAgICBbbmdDbGFzc109XCJ7ICdjb2xvci1waWNrZXJfX2N1cnNvci0tbGlnaHQnOiBzdlNsaWRlckxpZ2h0IH1cIlxuICAgICAgICAgICAgW25nU3R5bGVdPVwie1xuICAgICAgICAgICAgICAgIHRvcDogKHNsaWRlcj8udiB8fCAwKSAqIDEwMCArICclJyxcbiAgICAgICAgICAgICAgICBsZWZ0OiAoc2xpZGVyPy5zIHx8IDApICogMTAwICsgJyUnXG4gICAgICAgICAgICB9XCI+PC9kaXY+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cImNvbG9yLXBpY2tlcl9fY29udHJvbHNcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbG9yLXBpY2tlcl9fc2VsZWN0ZWRcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2xvci1waWNrZXJfX3NlbGVjdGVkLWNvbG9yXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBbbmdTdHlsZV09XCJ7IFxuICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6IHNlbGVjdGVkQ29sb3IgfHwgJydcbiAgICAgICAgICAgICAgICB9XCI+PGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJjcEFkZENvbG9yQnV0dG9uICYmICEoY3BNYXhQcmVzZXRDb2xvcnMgJiYgKGNwUHJlc2V0Q29sb3JzPy5sZW5ndGggfHwgMCkgPj0gY3BNYXhQcmVzZXRDb2xvcnMpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU9XCJBZGQgY29sb3IgdG8gcHJlc2V0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGkxOG4tdGl0bGU9XCJAQG54dC1jb2xvci1waWNrZXIuYnV0dG9uLmFkZC1jb2xvclwiXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImNvbG9yLXBpY2tlcl9fYWRkLXNlbGVjdGVkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsgJ2NvbG9yLXBpY2tlcl9fYWRkLXNlbGVjdGVkLS1saWdodCc6IGFscGhhU2xpZGVyTGlnaHQgfVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwib25BZGRQcmVzZXRDb2xvcihzZWxlY3RlZENvbG9yKVwiPjxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg9XCIyNFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0PVwiMjRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZpZXdCb3g9XCIwIDAgMjQgMjRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTE5IDEzaC02djZoLTJ2LTZINXYtMmg2VjVoMnY2aDZ2MnpcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNMCAwaDI0djI0SDB6XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsbD1cIm5vbmVcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+PC9idXR0b24+PC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2xvci1waWNrZXJfX2hhdlwiPlxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cImNwTW9kZSA9PSBjb2xvck1vZGVJbnRlcm5hbC5jb2xvclwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJjb2xvci1waWNrZXJfX3NsaWRlciBjb2xvci1waWNrZXJfX3NsaWRlci0taHVlXCJcbiAgICAgICAgICAgICAgICBjcFNsaWRlclxuICAgICAgICAgICAgICAgIFtyZ1hdPVwiMVwiXG4gICAgICAgICAgICAgICAgKG5ld1ZhbHVlKT1cIm9uSHVlQ2hhbmdlKCRldmVudClcIlxuICAgICAgICAgICAgICAgIChkcmFnU3RhcnQpPVwib25EcmFnU3RhcnQoJ2h1ZScpXCJcbiAgICAgICAgICAgICAgICAoZHJhZ0VuZCk9XCJvbkRyYWdFbmQoJ2h1ZScpXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbG9yLXBpY2tlcl9fY3Vyc29yXCJcbiAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieyAnY29sb3ItcGlja2VyX19jdXJzb3ItLWxpZ2h0JzogaHVlU2xpZGVyTGlnaHQgfVwiXG4gICAgICAgICAgICAgICAgICAgIFtuZ1N0eWxlXT1cIntcbiAgICAgICAgICAgICAgICAgICAgICAgIGxlZnQ6IChzbGlkZXI/LmggfHwgMCkgKiAxMDAgKyAnJSdcbiAgICAgICAgICAgICAgICAgICAgfVwiPjwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiY3BNb2RlID09IGNvbG9yTW9kZUludGVybmFsLmdyYXlzY2FsZVwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJjb2xvci1waWNrZXJfX3NsaWRlciBjb2xvci1waWNrZXJfX3NsaWRlci0tdmFsdWVcIlxuICAgICAgICAgICAgICAgIGNwU2xpZGVyXG4gICAgICAgICAgICAgICAgW3JnWF09XCIxXCJcbiAgICAgICAgICAgICAgICAobmV3VmFsdWUpPVwib25WYWx1ZUNoYW5nZSgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAoZHJhZ1N0YXJ0KT1cIm9uRHJhZ1N0YXJ0KCd2YWx1ZScpXCJcbiAgICAgICAgICAgICAgICAoZHJhZ0VuZCk9XCJvbkRyYWdFbmQoJ3ZhbHVlJylcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sb3ItcGlja2VyX19jdXJzb3JcIlxuICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7ICdjb2xvci1waWNrZXJfX2N1cnNvci0tbGlnaHQnOiB2YWx1ZVNsaWRlckxpZ2h0IH1cIlxuICAgICAgICAgICAgICAgICAgICBbbmdTdHlsZV09XCJ7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZWZ0OiAoMSAtIChzbGlkZXI/LnYgfHwgMCkpICogMTAwICsgJyUnXG4gICAgICAgICAgICAgICAgICAgIH1cIj48L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cImNwQWxwaGFDaGFubmVsICE9IGFscGhhQ2hhbm5lbC5kaXNhYmxlZFwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJjb2xvci1waWNrZXJfX3NsaWRlciBjb2xvci1waWNrZXJfX3NsaWRlci0tYWxwaGFcIlxuICAgICAgICAgICAgICAgIGNwU2xpZGVyXG4gICAgICAgICAgICAgICAgW3JnWF09XCIxXCJcbiAgICAgICAgICAgICAgICAobmV3VmFsdWUpPVwib25BbHBoYUNoYW5nZSgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAoZHJhZ1N0YXJ0KT1cIm9uRHJhZ1N0YXJ0KCdhbHBoYScpXCJcbiAgICAgICAgICAgICAgICAoZHJhZ0VuZCk9XCJvbkRyYWdFbmQoJ2FscGhhJylcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sb3ItcGlja2VyX19zbGlkZXItLWFscGhhLWJnXCJcbiAgICAgICAgICAgICAgICAgICAgW25nU3R5bGVdPVwie1xuICAgICAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZEltYWdlOiBhbHBoYVNsaWRlckNvbG9yIHx8ICcnXG4gICAgICAgICAgICAgICAgICAgIH1cIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbG9yLXBpY2tlcl9fY3Vyc29yXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsgJ2NvbG9yLXBpY2tlcl9fY3Vyc29yLS1saWdodCc6IGFscGhhU2xpZGVyTGlnaHQgfVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbbmdTdHlsZV09XCJ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVmdDogKHNsaWRlcj8uYSB8fCAwKSAqIDEwMCArICclJ1xuICAgICAgICAgICAgICAgICAgICAgICAgfVwiPjwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDxkaXYgKm5nSWY9XCIhY3BEaXNhYmxlSW5wdXQgJiYgKGNwTW9kZSA9PSBjb2xvck1vZGVJbnRlcm5hbC5jb2xvciB8fCBjcE1vZGUgPT0gY29sb3JNb2RlSW50ZXJuYWwuZ3JheXNjYWxlKVwiXG4gICAgICAgIGNsYXNzPVwiY29sb3ItcGlja2VyX19pbnB1dHNcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbG9yLXBpY2tlcl9faW5wdXQtZmllbGRzXCI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY3BNb2RlID09IGNvbG9yTW9kZUludGVybmFsLmdyYXlzY2FsZTsgZWxzZSBmb3JtYXRTd2l0Y2hcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sb3ItcGlja2VyX19pbnB1dC1maWVsZFwiPlxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cIm51bWJlclwiXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXR0ZXJuPVwiWzAtOV0qXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1pbj1cIjBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgbWF4PVwiMTAwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNwVGV4dFxuICAgICAgICAgICAgICAgICAgICAgICAgW3JnXT1cIjEwMFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbdmFsdWVdPVwiaHNsYVRleHQ/LmxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKGtleXVwLmVudGVyKT1cIm9uQWNjZXB0KCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKG5ld1ZhbHVlKT1cIm9uVmFsdWVJbnB1dCgkZXZlbnQpXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjb2xvci1waWNrZXJfX2lucHV0LWZpZWxkLWxhYmVsXCI+Vjwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiY3BBbHBoYUNoYW5uZWwgIT0gYWxwaGFDaGFubmVsLmRpc2FibGVkXCJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJjb2xvci1waWNrZXJfX2lucHV0LWZpZWxkXCI+XG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwibnVtYmVyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhdHRlcm49XCJbMC05XSsoW1xcLixdWzAtOV17MSwyfSk/XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1pbj1cIjBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgbWF4PVwiMVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBzdGVwPVwiMC4xXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNwVGV4dFxuICAgICAgICAgICAgICAgICAgICAgICAgW3JnXT1cIjFcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cImhzbGFUZXh0Py5hXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIChrZXl1cC5lbnRlcik9XCJvbkFjY2VwdCgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIChuZXdWYWx1ZSk9XCJvbkFscGhhSW5wdXQoJGV2ZW50KVwiIC8+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY29sb3ItcGlja2VyX19pbnB1dC1maWVsZC1sYWJlbFwiPkE8L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjZm9ybWF0U3dpdGNoPlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgW25nU3dpdGNoXT1cImZvcm1hdFwiPlxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCJjb2xvckZvcm1hdC5oc2xhXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sb3ItcGlja2VyX19pbnB1dC1maWVsZFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwibnVtYmVyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF0dGVybj1cIlswLTldKlwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1pbj1cIjBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXg9XCIzNjBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjcFRleHRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3JnXT1cIjM2MFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJoc2xhVGV4dD8uaFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChrZXl1cC5lbnRlcik9XCJvbkFjY2VwdCgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG5ld1ZhbHVlKT1cIm9uSHVlSW5wdXQoJGV2ZW50KVwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjb2xvci1waWNrZXJfX2lucHV0LWZpZWxkLWxhYmVsXCI+SDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbG9yLXBpY2tlcl9faW5wdXQtZmllbGRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cIm51bWJlclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhdHRlcm49XCJbMC05XSpcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtaW49XCIwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF4PVwiMTAwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3BUZXh0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyZ109XCIxMDBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdmFsdWVdPVwiaHNsYVRleHQ/LnNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoa2V5dXAuZW50ZXIpPVwib25BY2NlcHQoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChuZXdWYWx1ZSk9XCJvblNhdHVyYXRpb25JbnB1dCgkZXZlbnQpXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNvbG9yLXBpY2tlcl9faW5wdXQtZmllbGQtbGFiZWxcIj5TPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sb3ItcGlja2VyX19pbnB1dC1maWVsZFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwibnVtYmVyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF0dGVybj1cIlswLTldKlwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1pbj1cIjBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXg9XCIxMDBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjcFRleHRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3JnXT1cIjEwMFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJoc2xhVGV4dD8ubFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChrZXl1cC5lbnRlcik9XCJvbkFjY2VwdCgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG5ld1ZhbHVlKT1cIm9uTGlnaHRuZXNzSW5wdXQoJGV2ZW50KVwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjb2xvci1waWNrZXJfX2lucHV0LWZpZWxkLWxhYmVsXCI+TDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cImNwQWxwaGFDaGFubmVsICE9IGFscGhhQ2hhbm5lbC5kaXNhYmxlZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJjb2xvci1waWNrZXJfX2lucHV0LWZpZWxkXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJudW1iZXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXR0ZXJuPVwiWzAtOV0rKFtcXC4sXVswLTldezEsMn0pP1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1pbj1cIjBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXg9XCIxXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RlcD1cIjAuMVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNwVGV4dFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcmddPVwiMVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJoc2xhVGV4dD8uYVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChrZXl1cC5lbnRlcik9XCJvbkFjY2VwdCgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG5ld1ZhbHVlKT1cIm9uQWxwaGFJbnB1dCgkZXZlbnQpXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNvbG9yLXBpY2tlcl9faW5wdXQtZmllbGQtbGFiZWxcIj5BPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCJjb2xvckZvcm1hdC5yZ2JhXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sb3ItcGlja2VyX19pbnB1dC1maWVsZFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwibnVtYmVyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF0dGVybj1cIlswLTldKlwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1pbj1cIjBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXg9XCIyNTVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjcFRleHRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3JnXT1cIjI1NVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJyZ2JhVGV4dD8uclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChrZXl1cC5lbnRlcik9XCJvbkFjY2VwdCgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG5ld1ZhbHVlKT1cIm9uUmVkSW5wdXQoJGV2ZW50KVwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjb2xvci1waWNrZXJfX2lucHV0LWZpZWxkLWxhYmVsXCI+Ujwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbG9yLXBpY2tlcl9faW5wdXQtZmllbGRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cIm51bWJlclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhdHRlcm49XCJbMC05XSpcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtaW49XCIwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF4PVwiMjU1XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3BUZXh0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyZ109XCIyNTVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdmFsdWVdPVwicmdiYVRleHQ/LmdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoa2V5dXAuZW50ZXIpPVwib25BY2NlcHQoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChuZXdWYWx1ZSk9XCJvbkdyZWVuSW5wdXQoJGV2ZW50KVwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjb2xvci1waWNrZXJfX2lucHV0LWZpZWxkLWxhYmVsXCI+Rzwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbG9yLXBpY2tlcl9faW5wdXQtZmllbGRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cIm51bWJlclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhdHRlcm49XCJbMC05XSpcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtaW49XCIwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF4PVwiMjU1XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3BUZXh0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyZ109XCIyNTVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdmFsdWVdPVwicmdiYVRleHQ/LmJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoa2V5dXAuZW50ZXIpPVwib25BY2NlcHQoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChuZXdWYWx1ZSk9XCJvbkJsdWVJbnB1dCgkZXZlbnQpXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNvbG9yLXBpY2tlcl9faW5wdXQtZmllbGQtbGFiZWxcIj5CPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiY3BBbHBoYUNoYW5uZWwgIT0gYWxwaGFDaGFubmVsLmRpc2FibGVkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImNvbG9yLXBpY2tlcl9faW5wdXQtZmllbGRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cIm51bWJlclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhdHRlcm49XCJbMC05XSsoW1xcLixdWzAtOV17MSwyfSk/XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWluPVwiMFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heD1cIjFcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGVwPVwiMC4xXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3BUZXh0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyZ109XCIxXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cImhzbGFUZXh0Py5hXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGtleXVwLmVudGVyKT1cIm9uQWNjZXB0KCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobmV3VmFsdWUpPVwib25BbHBoYUlucHV0KCRldmVudClcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY29sb3ItcGlja2VyX19pbnB1dC1maWVsZC1sYWJlbFwiPkE8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cImNvbG9yRm9ybWF0LmNteWtcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2xvci1waWNrZXJfX2lucHV0LWZpZWxkXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJudW1iZXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXR0ZXJuPVwiWzAtOV0qXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWluPVwiMFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heD1cIjEwMFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNwVGV4dFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcmddPVwiMTAwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cImNteWtUZXh0Py5jXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGtleXVwLmVudGVyKT1cIm9uQWNjZXB0KCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobmV3VmFsdWUpPVwib25DeWFuSW5wdXQoJGV2ZW50KVwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjb2xvci1waWNrZXJfX2lucHV0LWZpZWxkLWxhYmVsXCI+Qzwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbG9yLXBpY2tlcl9faW5wdXQtZmllbGRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cIm51bWJlclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhdHRlcm49XCJbMC05XSpcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtaW49XCIwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF4PVwiMTAwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3BUZXh0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyZ109XCIxMDBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdmFsdWVdPVwiY215a1RleHQ/Lm1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoa2V5dXAuZW50ZXIpPVwib25BY2NlcHQoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChuZXdWYWx1ZSk9XCJvbk1hZ2VudGFJbnB1dCgkZXZlbnQpXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNvbG9yLXBpY2tlcl9faW5wdXQtZmllbGQtbGFiZWxcIj5NPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sb3ItcGlja2VyX19pbnB1dC1maWVsZFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwibnVtYmVyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF0dGVybj1cIlswLTldKlwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1pbj1cIjBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXg9XCIxMDBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjcFRleHRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3JnXT1cIjEwMFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJjbXlrVGV4dD8ueVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChrZXl1cC5lbnRlcik9XCJvbkFjY2VwdCgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG5ld1ZhbHVlKT1cIm9uWWVsbG93SW5wdXQoJGV2ZW50KVwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjb2xvci1waWNrZXJfX2lucHV0LWZpZWxkLWxhYmVsXCI+WTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbG9yLXBpY2tlcl9faW5wdXQtZmllbGRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cIm51bWJlclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhdHRlcm49XCJbMC05XSpcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtaW49XCIwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF4PVwiMTAwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3BUZXh0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyZ109XCIxMDBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdmFsdWVdPVwiY215a1RleHQ/LmtcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoa2V5dXAuZW50ZXIpPVwib25BY2NlcHQoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChuZXdWYWx1ZSk9XCJvbkJsYWNrSW5wdXQoJGV2ZW50KVwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjb2xvci1waWNrZXJfX2lucHV0LWZpZWxkLWxhYmVsXCI+Szwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cImNwQWxwaGFDaGFubmVsICE9IGFscGhhQ2hhbm5lbC5kaXNhYmxlZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJjb2xvci1waWNrZXJfX2lucHV0LWZpZWxkXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJudW1iZXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXR0ZXJuPVwiWzAtOV0rKFtcXC4sXVswLTldezEsMn0pP1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1pbj1cIjBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXg9XCIxXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RlcD1cIjAuMVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNwVGV4dFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcmddPVwiMVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJjbXlrVGV4dD8uY1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChrZXl1cC5lbnRlcik9XCJvbkFjY2VwdCgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG5ld1ZhbHVlKT1cIm9uQWxwaGFJbnB1dCgkZXZlbnQpXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNvbG9yLXBpY2tlcl9faW5wdXQtZmllbGQtbGFiZWxcIj5BPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaERlZmF1bHQ+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sb3ItcGlja2VyX19pbnB1dC1maWVsZFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBjcFRleHRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cImhleFRleHRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoYmx1cik9XCJvbkhleElucHV0KG51bGwpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGtleXVwLmVudGVyKT1cIm9uQWNjZXB0KCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobmV3VmFsdWUpPVwib25IZXhJbnB1dCgkZXZlbnQpXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNvbG9yLXBpY2tlcl9faW5wdXQtZmllbGQtbGFiZWxcIj5IZXg8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJjcEFscGhhQ2hhbm5lbCA9PSBhbHBoYUNoYW5uZWwuZm9yY2VkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImNvbG9yLXBpY2tlcl9faW5wdXQtZmllbGRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cIm51bWJlclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhdHRlcm49XCJbMC05XSsoW1xcLixdWzAtOV17MSwyfSk/XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWluPVwiMFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heD1cIjFcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGVwPVwiMC4xXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3BUZXh0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyZ109XCIxXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cImhleEFscGhhXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGtleXVwLmVudGVyKT1cIm9uQWNjZXB0KCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobmV3VmFsdWUpPVwib25BbHBoYUlucHV0KCRldmVudClcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY29sb3ItcGlja2VyX19pbnB1dC1maWVsZC1sYWJlbFwiPkE8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiAqbmdJZj1cImNwTW9kZSA9PSBjb2xvck1vZGVJbnRlcm5hbC5jb2xvclwiXG4gICAgICAgICAgICBjbGFzcz1cImNvbG9yLXBpY2tlcl9faW5wdXQtdHlwZVwiPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjb2xvci1waWNrZXJfX2lucHV0LXR5cGUtYXJyb3dcIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCJvbkZvcm1hdFRvZ2dsZSgxKVwiPjwvc3Bhbj5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY29sb3ItcGlja2VyX19pbnB1dC10eXBlLWFycm93XCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwib25Gb3JtYXRUb2dnbGUoLTEpXCI+PC9zcGFuPlxuICAgICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY3BQcmVzZXRDb2xvcnM/Lmxlbmd0aFwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sb3ItcGlja2VyX19zZXBhcmF0b3JcIj48L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbG9yLXBpY2tlcl9fcHJlc2V0XCI+XG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiY3BQcmVzZXRMYWJlbFwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJjb2xvci1waWNrZXJfX3ByZXNldC1sYWJlbFwiPlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjcFByZXNldExhYmVsID09PSB0cnVlOyBlbHNlIHN0cmluZ0xhYmVsXCJcbiAgICAgICAgICAgICAgICAgICAgaTE4bj1cIkBAbnh0LWNvbG9yLXBpY2tlci5wcmVzZXQtY29sb3JzXCI+UHJlc2V0IGNvbG9yczwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjc3RyaW5nTGFiZWw+e3sgY3BQcmVzZXRMYWJlbCB9fTwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJjcFByZXNldENvbG9ycz8ubGVuZ3RoXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImNvbG9yLXBpY2tlcl9fcHJlc2V0LWl0ZW1zXCI+XG4gICAgICAgICAgICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgY29sb3Igb2YgY3BQcmVzZXRDb2xvcnNcIlxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImNvbG9yLXBpY2tlcl9fcHJlc2V0LWl0ZW1cIlxuICAgICAgICAgICAgICAgICAgICBbdGl0bGVdPVwiY29sb3JcIlxuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwic2V0Q29sb3JGcm9tU3RyaW5nKGNvbG9yKVwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sb3ItcGlja2VyX19wcmVzZXQtaXRlbS1maWxsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtuZ1N0eWxlXT1cInsgXG4gICAgICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6IGNvbG9yIHx8ICcnXG4gICAgICAgICAgICAgICAgICAgIH1cIj48YnV0dG9uICpuZ0lmPVwiY3BBZGRDb2xvckJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU9XCJSZW1vdmUgQ29sb3JcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkxOG4tdGl0bGU9XCJAQG54dC1jb2xvci1waWNrZXIuYnV0dG9uLnJlbW92ZS1jb2xvclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJjb2xvci1waWNrZXJfX3JlbW92ZS1zZWxlY3RlZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uUmVtb3ZlUHJlc2V0Q29sb3IoY29sb3IpXCI+PHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg9XCIyNFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodD1cIjI0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmlld0JveD1cIjAgMCAyNCAyNFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk0xOSA2LjQxTDE3LjU5IDUgMTIgMTAuNTkgNi40MSA1IDUgNi40MSAxMC41OSAxMiA1IDE3LjU5IDYuNDEgMTkgMTIgMTMuNDEgMTcuNTkgMTkgMTkgMTcuNTkgMTMuNDEgMTJ6XCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk0wIDBoMjR2MjRIMHpcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsbD1cIm5vbmVcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPjwvYnV0dG9uPjwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IGkgb2YgZmlsbCg1MClcIlxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImNvbG9yLXBpY2tlcl9fcHJlc2V0LWl0ZW1cIj48L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8ZGl2ICpuZ0lmPVwiY3BPS0J1dHRvbiB8fCBjcENhbmNlbEJ1dHRvblwiXG4gICAgICAgIGNsYXNzPVwiY29sb3ItcGlja2VyX19idXR0b25zXCI+XG4gICAgICAgIDxidXR0b24gKm5nSWY9XCJjcENhbmNlbEJ1dHRvblwiXG4gICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgIChjbGljayk9XCJvbkNhbmNlbCgkZXZlbnQpXCJcbiAgICAgICAgICAgIGkxOG49XCJAQG54dC1jb2xvci1waWNrZXIuYnV0dG9uLmNhbmNlbFwiPkNhbmNlbDwvYnV0dG9uPlxuICAgICAgICA8YnV0dG9uICpuZ0lmPVwiY3BPS0J1dHRvblwiXG4gICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgIChjbGljayk9XCJvbkFjY2VwdCgkZXZlbnQpXCJcbiAgICAgICAgICAgIGkxOG49XCJAQG54dC1jb2xvci1waWNrZXIuYnV0dG9uLm9rXCI+T0s8L2J1dHRvbj5cbiAgICA8L2Rpdj5cbjwvZGl2PlxuIl19
|
|
592
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29sb3ItcGlja2VyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL254dC1jb2xvci1waWNrZXIvc3JjL2xpYi9jb2xvci1waWNrZXIvY29sb3ItcGlja2VyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL254dC1jb2xvci1waWNrZXIvc3JjL2xpYi9jb2xvci1waWNrZXIvY29sb3ItcGlja2VyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBb0IsaUJBQWlCLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxZQUFZLEVBQXFCLGlCQUFpQixFQUFFLE1BQU0sZUFBZSxDQUFBO0FBQzlJLE9BQU8sRUFBRSxTQUFTLEVBQUUsZUFBZSxFQUFFLGVBQWUsRUFBRSxVQUFVLEVBQUUsWUFBWSxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLGFBQWEsRUFBRSxVQUFVLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxZQUFZLEVBQUUsWUFBWSxFQUFFLE1BQU0sa0JBQWtCLENBQUE7QUFDeE4sT0FBTyxFQUFFLGlCQUFpQixFQUFFLHNCQUFzQixFQUFFLE1BQU0scUJBQXFCLENBQUE7QUFDL0UsT0FBTyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxNQUFNLG9CQUFvQixDQUFBO0FBQzNELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxZQUFZLEVBQW9DLGNBQWMsRUFBRSxZQUFZLEVBQUUsY0FBYyxFQUFFLE1BQU0sb0JBQW9CLENBQUE7QUFDcEosT0FBTyxFQUFFLFlBQVksRUFBRSxtQkFBbUIsRUFBRSxXQUFXLEVBQUUsYUFBYSxFQUFFLGNBQWMsRUFBRSxZQUFZLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQTtBQUM5SCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQTs7Ozs7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LG9CQUFvQjtxR0FBcEIsb0JBQW9CLGtRQ2RqQyx5dG5CQWtZQTsyRkRwWGEsb0JBQW9CO2tCQU5oQyxTQUFTOytCQUNJLGlCQUFpQixpQkFHWixpQkFBaUIsQ0FBQyxRQUFRO2tLQXFGekMsUUFBUTtzQkFEUCxZQUFZO3VCQUFDLG9CQUFvQixFQUFFLENBQUMsUUFBUSxDQUFDO2dCQW1COUMsUUFBUTtzQkFEUCxZQUFZO3VCQUFDLHNCQUFzQixFQUFFLENBQUMsUUFBUSxDQUFDO2dCQWtCaEQsYUFBYTtzQkFGWixZQUFZO3VCQUFDLG9CQUFvQixFQUFFLENBQUMsUUFBUSxDQUFDOztzQkFDN0MsWUFBWTt1QkFBQyxrQkFBa0IsRUFBRSxDQUFDLFFBQVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFmdGVyVmlld0NoZWNrZWQsIENoYW5nZURldGVjdG9yUmVmLCBDb21wb25lbnQsIEVsZW1lbnRSZWYsIEhvc3RMaXN0ZW5lciwgT25EZXN0cm95LCBPbkluaXQsIFZpZXdFbmNhcHN1bGF0aW9uIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSdcbmltcG9ydCB7IGNteWtUb1JnYiwgZGVub3JtYWxpemVDTVlLLCBkZW5vcm1hbGl6ZVJHQkEsIGZvcm1hdENteWssIGZvcm1hdE91dHB1dCwgaHNsYTJoc3ZhLCBoc3ZhMmhzbGEsIGhzdmFUb1JnYmEsIG5vcm1hbGl6ZUNNWUssIHJnYmFUb0NteWssIHJnYmFUb0hleCwgcmdiYVRvSHN2YSwgc3RyaW5nVG9DbXlrLCBzdHJpbmdUb0hzdmEgfSBmcm9tICcuLi8uLi91dGlsL2NvbG9yJ1xuaW1wb3J0IHsgb3BhcXVlU2xpZGVyTGlnaHQsIHRyYW5zcGFyZW50U2xpZGVyTGlnaHQgfSBmcm9tICcuLi8uLi91dGlsL2NvbnRyYXN0J1xuaW1wb3J0IHsgQ215aywgSHNsYSwgSHN2YSwgUmdiYSB9IGZyb20gJy4uLy4uL3V0aWwvZm9ybWF0cydcbmltcG9ydCB7IENvbG9yTW9kZUludGVybmFsLCBjb21wb3NlZFBhdGgsIERpYWxvZ0NvbmZpZywgRGlyZWN0aXZlQ2FsbGJhY2tzLCBwYXJzZUNvbG9yTW9kZSwgc2l6ZVRvU3RyaW5nLCBTbGlkZXJQb3NpdGlvbiB9IGZyb20gJy4uLy4uL3V0aWwvaGVscGVycydcbmltcG9ydCB7IEFscGhhQ2hhbm5lbCwgQWxwaGFFbmFibGVkRm9ybWF0cywgQ29sb3JGb3JtYXQsIERpYWxvZ0Rpc3BsYXksIERpYWxvZ1Bvc2l0aW9uLCBPdXRwdXRGb3JtYXQgfSBmcm9tICcuLi8uLi91dGlsL3R5cGVzJ1xuaW1wb3J0IHsgQ29sb3JQaWNrZXJTZXJ2aWNlIH0gZnJvbSAnLi4vY29sb3ItcGlja2VyLnNlcnZpY2UnXG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnY3AtY29sb3ItcGlja2VyJyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vY29sb3ItcGlja2VyLmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybHM6IFsnLi9jb2xvci1waWNrZXIuY29tcG9uZW50LnNjc3MnXSxcbiAgICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5FbXVsYXRlZFxufSlcbmV4cG9ydCBjbGFzcyBDb2xvclBpY2tlckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95LCBBZnRlclZpZXdDaGVja2VkIHtcblxuICAgIHJlYWRvbmx5IGFscGhhQ2hhbm5lbCA9IEFscGhhQ2hhbm5lbFxuICAgIHJlYWRvbmx5IGNvbG9yTW9kZUludGVybmFsID0gQ29sb3JNb2RlSW50ZXJuYWxcbiAgICByZWFkb25seSBkaWFsb2dEaXNwbGF5ID0gRGlhbG9nRGlzcGxheVxuICAgIHJlYWRvbmx5IGNvbG9yRm9ybWF0ID0gQ29sb3JGb3JtYXRcblxuICAgIHByaXZhdGUgaHN2YTogSHN2YVxuICAgIHByaXZhdGUgY215azogQ215a1xuXG4gICAgcHJpdmF0ZSBjbXlrQ29sb3I6IHN0cmluZ1xuICAgIHByaXZhdGUgb3V0cHV0Q29sb3I6IHN0cmluZ1xuICAgIHByaXZhdGUgaW5pdGlhbENvbG9yOiBzdHJpbmdcbiAgICBwcml2YXRlIGZhbGxiYWNrQ29sb3I6IHN0cmluZ1xuXG4gICAgcHJpdmF0ZSBzbGlkZXJIOiBudW1iZXJcblxuICAgIHByaXZhdGUgZGlhbG9nSW5wdXRGaWVsZHM6IENvbG9yRm9ybWF0W10gPSBbXG4gICAgICAgIENvbG9yRm9ybWF0LmhleCxcbiAgICAgICAgQ29sb3JGb3JtYXQucmdiYSxcbiAgICAgICAgQ29sb3JGb3JtYXQuaHNsYSxcbiAgICAgICAgQ29sb3JGb3JtYXQuY215a1xuICAgIF1cblxuICAgIHByaXZhdGUgY2FsbGJhY2tzOiBEaXJlY3RpdmVDYWxsYmFja3NcblxuICAgIHNob3c6IGJvb2xlYW5cblxuICAgIGZvcm1hdDogQ29sb3JGb3JtYXRcbiAgICBzbGlkZXI6IFNsaWRlclBvc2l0aW9uXG5cbiAgICBoZXhUZXh0OiBzdHJpbmdcbiAgICBoZXhBbHBoYTogbnVtYmVyXG5cbiAgICBjbXlrVGV4dDogQ215a1xuICAgIGhzbGFUZXh0OiBIc2xhXG4gICAgcmdiYVRleHQ6IFJnYmFcblxuICAgIHNlbGVjdGVkQ29sb3I6IHN0cmluZ1xuICAgIGh1ZVNsaWRlckNvbG9yOiBzdHJpbmdcbiAgICBhbHBoYVNsaWRlckNvbG9yOiBzdHJpbmdcblxuICAgIHN2U2xpZGVyTGlnaHQgPSBmYWxzZVxuICAgIGh1ZVNsaWRlckxpZ2h0ID0gZmFsc2VcbiAgICB2YWx1ZVNsaWRlckxpZ2h0ID0gZmFsc2VcbiAgICBhbHBoYVNsaWRlckxpZ2h0ID0gZmFsc2VcblxuICAgIGNwV2lkdGg6IHN0cmluZ1xuICAgIGNwSGVpZ2h0OiBzdHJpbmdcblxuICAgIGNwTW9kZTogQ29sb3JNb2RlSW50ZXJuYWwgPSBDb2xvck1vZGVJbnRlcm5hbC5jb2xvclxuXG4gICAgY3BDbXlrRW5hYmxlZDogYm9vbGVhblxuICAgIGNwQWxwaGFDaGFubmVsOiBBbHBoYUNoYW5uZWxcbiAgICBjcE91dHB1dEZvcm1hdDogT3V0cHV0Rm9ybWF0XG5cbiAgICBjcERpc2FibGVJbnB1dDogYm9vbGVhblxuICAgIGNwRGlhbG9nRGlzcGxheTogRGlhbG9nRGlzcGxheVxuXG4gICAgY3BJZ25vcmVkRWxlbWVudHM6IGFueVtdXG5cbiAgICBjcFNhdmVDbGlja091dHNpZGU6IGJvb2xlYW5cbiAgICBjcENsb3NlQ2xpY2tPdXRzaWRlOiBib29sZWFuXG5cbiAgICBjcFBvc2l0aW9uOiBEaWFsb2dQb3NpdGlvbiA9IERpYWxvZ1Bvc2l0aW9uLnJpZ2h0XG5cbiAgICBjcE9LQnV0dG9uOiBib29sZWFuXG5cbiAgICBjcENhbmNlbEJ1dHRvbjogYm9vbGVhblxuXG4gICAgY3BQcmVzZXRMYWJlbDogYm9vbGVhbiB8IHN0cmluZ1xuICAgIGNwUHJlc2V0Q29sb3JzOiBzdHJpbmdbXVxuICAgIGNwTWF4UHJlc2V0Q29sb3JzOiBudW1iZXJcblxuICAgIGNwQWRkQ29sb3JCdXR0b246IGJvb2xlYW5cblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwcml2YXRlIGVsUmVmOiBFbGVtZW50UmVmLFxuICAgICAgICBwcml2YXRlIGNkUmVmOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICAgICAgcHJpdmF0ZSBzZXJ2aWNlOiBDb2xvclBpY2tlclNlcnZpY2VcbiAgICApIHsgfVxuXG4gICAgQEhvc3RMaXN0ZW5lcignZG9jdW1lbnQ6a2V5dXAuZXNjJywgWyckZXZlbnQnXSlcbiAgICBvbkNhbmNlbChldmVudDogRXZlbnQpIHtcbiAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKVxuXG4gICAgICAgIGlmICh0aGlzLmluaXRpYWxDb2xvcikge1xuICAgICAgICAgICAgdGhpcy5zZXRDb2xvckZyb21TdHJpbmcodGhpcy5pbml0aWFsQ29sb3IsIHRydWUpXG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5jYWxsYmFja3MpIHtcbiAgICAgICAgICAgIHRoaXMuY2FsbGJhY2tzLmNvbG9yU2VsZWN0Q2FuY2VsZWQoKVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuc2hvdyAmJiB0aGlzLmNwRGlhbG9nRGlzcGxheSA9PSBEaWFsb2dEaXNwbGF5LnBvcHVwKSB7XG4gICAgICAgICAgICB0aGlzLmNsb3NlQ29sb3JQaWNrZXIoKVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgQEhvc3RMaXN0ZW5lcignZG9jdW1lbnQ6a2V5dXAuZW50ZXInLCBbJyRldmVudCddKVxuICAgIG9uQWNjZXB0KGV2ZW50OiBFdmVudCkge1xuICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKVxuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpXG5cbiAgICAgICAgaWYgKHRoaXMuc2hvdyAmJiB0aGlzLmNwRGlhbG9nRGlzcGxheSA9PSBEaWFsb2dEaXNwbGF5LnBvcHVwKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5vdXRwdXRDb2xvciAmJiB0aGlzLmNhbGxiYWNrcykge1xuICAgICAgICAgICAgICAgIHRoaXMuY2FsbGJhY2tzLmNvbG9yU2VsZWN0ZWQodGhpcy5vdXRwdXRDb2xvcilcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHRoaXMuY3BEaWFsb2dEaXNwbGF5ID09IERpYWxvZ0Rpc3BsYXkucG9wdXApIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNsb3NlQ29sb3JQaWNrZXIoKVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgQEhvc3RMaXN0ZW5lcignZG9jdW1lbnQ6bW91c2Vkb3duJywgWyckZXZlbnQnXSlcbiAgICBASG9zdExpc3RlbmVyKCdkb2N1bWVudDpmb2N1c2luJywgWyckZXZlbnQnXSlcbiAgICBvbkZvY3VzQ2hhbmdlKGV2ZW50OiBNb3VzZUV2ZW50IHwgRm9jdXNFdmVudCkge1xuICAgICAgICBjb25zdCBwYXRoID0gbmV3IFNldChjb21wb3NlZFBhdGgoZXZlbnQpKVxuICAgICAgICBjb25zdCBpbnRlcnNlY3QgPSB0aGlzLmNwSWdub3JlZEVsZW1lbnRzLmZpbmQoZWwgPT4gcGF0aC5oYXMoZWwpKVxuXG4gICAgICAgIGlmICghaW50ZXJzZWN0KSB7XG4gICAgICAgICAgICBpZiAodGhpcy5zaG93ICYmIHRoaXMuY3BEaWFsb2dEaXNwbGF5ID09IERpYWxvZ0Rpc3BsYXkucG9wdXApIHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5jcFNhdmVDbGlja091dHNpZGUpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMub3V0cHV0Q29sb3IgJiYgdGhpcy5jYWxsYmFja3MpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2FsbGJhY2tzLmNvbG9yU2VsZWN0ZWQodGhpcy5vdXRwdXRDb2xvcilcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0Q29sb3JGcm9tU3RyaW5nKHRoaXMuaW5pdGlhbENvbG9yLCBmYWxzZSlcblxuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5jYWxsYmFja3MpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmNwQ215a0VuYWJsZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNhbGxiYWNrcy5jbXlrQ2hhbmdlZCh0aGlzLmNteWtDb2xvcilcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jYWxsYmFja3MuY29sb3JDaGFuZ2VkKHRoaXMuaW5pdGlhbENvbG9yKVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuY3BDbG9zZUNsaWNrT3V0c2lkZSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmNsb3NlQ29sb3JQaWNrZXIoKVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5jcFNhdmVDbGlja091dHNpZGUgJiYgdGhpcy5vdXRwdXRDb2xvciAmJiB0aGlzLmNhbGxiYWNrcykge1xuICAgICAgICAgICAgICAgIHRoaXMuY2FsbGJhY2tzLmNvbG9yU2VsZWN0ZWQodGhpcy5vdXRwdXRDb2xvcilcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIG5nT25Jbml0KCkge1xuICAgICAgICB0aGlzLnNsaWRlciA9IG5ldyBTbGlkZXJQb3NpdGlvbigwLCAwLCAwLCAwKVxuXG4gICAgICAgIGlmICh0aGlzLmNwQ215a0VuYWJsZWQpIHtcbiAgICAgICAgICAgIHRoaXMuZm9ybWF0ID0gQ29sb3JGb3JtYXQuY215a1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuY3BPdXRwdXRGb3JtYXQgPT0gT3V0cHV0Rm9ybWF0LnJnYmEpIHtcbiAgICAgICAgICAgIHRoaXMuZm9ybWF0ID0gQ29sb3JGb3JtYXQucmdiYVxuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuY3BPdXRwdXRGb3JtYXQgPT0gT3V0cHV0Rm9ybWF0LmhzbGEpIHtcbiAgICAgICAgICAgIHRoaXMuZm9ybWF0ID0gQ29sb3JGb3JtYXQuaHNsYVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5mb3JtYXQgPSBDb2xvckZvcm1hdC5oZXhcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMub3BlbkRpYWxvZyh0aGlzLmluaXRpYWxDb2xvciwgZmFsc2UpXG4gICAgfVxuXG4gICAgbmdPbkRlc3Ryb3koKSB7XG4gICAgICAgIHRoaXMuY2xvc2VEaWFsb2coKVxuICAgIH1cblxuICAgIG5nQWZ0ZXJWaWV3Q2hlY2tlZCgpIHsgfVxuXG4gICAgb3BlbkRpYWxvZyhjb2xvcjogYW55LCBlbWl0OiBib29sZWFuID0gdHJ1ZSkge1xuICAgICAgICB0aGlzLnNlcnZpY2Uuc2V0QWN0aXZlKHRoaXMpXG5cbiAgICAgICAgdGhpcy5zZXRJbml0aWFsQ29sb3IoY29sb3IpXG5cbiAgICAgICAgdGhpcy5zZXRDb2xvckZyb21TdHJpbmcoY29sb3IsIGVtaXQpXG5cbiAgICAgICAgdGhpcy5vcGVuQ29sb3JQaWNrZXIoKVxuICAgIH1cblxuICAgIGNsb3NlRGlhbG9nKCkge1xuICAgICAgICB0aGlzLmNsb3NlQ29sb3JQaWNrZXIoKVxuICAgIH1cblxuICAgIHNldHVwRGlhbG9nKGNvbmZpZzogRGlhbG9nQ29uZmlnKSB7XG4gICAgICAgIHRoaXMuc2V0SW5pdGlhbENvbG9yKGNvbmZpZy5jb2xvcilcblxuICAgICAgICB0aGlzLmNwTW9kZSA9IHBhcnNlQ29sb3JNb2RlKGNvbmZpZy5jcE1vZGUpXG5cbiAgICAgICAgdGhpcy5jYWxsYmFja3MgPSBjb25maWcuY2FsbGJhY2tzXG5cbiAgICAgICAgdGhpcy5jcERpc2FibGVJbnB1dCA9IGNvbmZpZy5jcERpc2FibGVJbnB1dFxuXG4gICAgICAgIHRoaXMuY3BDbXlrRW5hYmxlZCA9IGNvbmZpZy5jcENteWtFbmFibGVkXG4gICAgICAgIHRoaXMuY3BBbHBoYUNoYW5uZWwgPSBjb25maWcuY3BBbHBoYUNoYW5uZWxcbiAgICAgICAgdGhpcy5jcE91dHB1dEZvcm1hdCA9IGNvbmZpZy5jcE91dHB1dEZvcm1hdFxuICAgICAgICB0aGlzLmNwRGlhbG9nRGlzcGxheSA9IGNvbmZpZy5jcERpYWxvZ0Rpc3BsYXlcblxuICAgICAgICB0aGlzLmNwSWdub3JlZEVsZW1lbnRzID0gW1xuICAgICAgICAgICAgLi4uKEFycmF5LmlzQXJyYXkoY29uZmlnLmNwSWdub3JlZEVsZW1lbnRzKSA/IGNvbmZpZy5jcElnbm9yZWRFbGVtZW50cyA6IFtjb25maWcuY3BJZ25vcmVkRWxlbWVudHNdKSxcbiAgICAgICAgICAgIHRoaXMuZWxSZWYgJiYgdGhpcy5lbFJlZi5uYXRpdmVFbGVtZW50LFxuICAgICAgICAgICAgY29uZmlnLmVsZW1lbnRSZWYgJiYgY29uZmlnLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudFxuICAgICAgICBdLmZpbHRlcihlID0+ICEhZSlcblxuICAgICAgICB0aGlzLmNwU2F2ZUNsaWNrT3V0c2lkZSA9IGNvbmZpZy5jcFNhdmVDbGlja091dHNpZGVcbiAgICAgICAgdGhpcy5jcENsb3NlQ2xpY2tPdXRzaWRlID0gY29uZmlnLmNwQ2xvc2VDbGlja091dHNpZGVcblxuICAgICAgICB0aGlzLmNwV2lkdGggPSBzaXplVG9TdHJpbmcoY29uZmlnLmNwV2lkdGgpXG4gICAgICAgIHRoaXMuY3BIZWlnaHQgPSBzaXplVG9TdHJpbmcoY29uZmlnLmNwSGVpZ2h0KVxuXG4gICAgICAgIHRoaXMuY3BQb3NpdGlvbiA9IGNvbmZpZy5jcFBvc2l0aW9uXG5cbiAgICAgICAgdGhpcy5jcE9LQnV0dG9uID0gY29uZmlnLmNwT0tCdXR0b25cblxuICAgICAgICB0aGlzLmNwQ2FuY2VsQnV0dG9uID0gY29uZmlnLmNwQ2FuY2VsQnV0dG9uXG5cbiAgICAgICAgdGhpcy5mYWxsYmFja0NvbG9yID0gY29uZmlnLmNwRmFsbGJhY2tDb2xvciB8fCAnI2ZmZidcblxuICAgICAgICB0aGlzLnNldFByZXNldENvbmZpZyhjb25maWcuY3BQcmVzZXRMYWJlbCwgY29uZmlnLmNwUHJlc2V0Q29sb3JzKVxuXG4gICAgICAgIHRoaXMuY3BNYXhQcmVzZXRDb2xvcnMgPSBjb25maWcuY3BNYXhQcmVzZXRDb2xvcnNcblxuICAgICAgICB0aGlzLmNwQWRkQ29sb3JCdXR0b24gPSBjb25maWcuY3BBZGRDb2xvckJ1dHRvblxuXG4gICAgICAgIGlmIChjb25maWcuY3BPdXRwdXRGb3JtYXQgPT0gT3V0cHV0Rm9ybWF0LmhleCAmJlxuICAgICAgICAgICAgY29uZmlnLmNwQWxwaGFDaGFubmVsICE9IEFscGhhQ2hhbm5lbC5hbHdheXMgJiYgY29uZmlnLmNwQWxwaGFDaGFubmVsICE9IEFscGhhQ2hhbm5lbC5mb3JjZWQpIHtcbiAgICAgICAgICAgIHRoaXMuY3BBbHBoYUNoYW5uZWwgPSBBbHBoYUNoYW5uZWwuZGlzYWJsZWRcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHNldEluaXRpYWxDb2xvcihjb2xvcjogc3RyaW5nKSB7XG4gICAgICAgIHRoaXMuaW5pdGlhbENvbG9yID0gY29sb3JcbiAgICAgICAgdGhpcy5zZXRDb2xvckZyb21TdHJpbmcodGhpcy5pbml0aWFsQ29sb3IsIGZhbHNlLCB0cnVlKVxuICAgIH1cblxuICAgIHNldFByZXNldENvbmZpZyhjcFByZXNldExhYmVsOiBib29sZWFuIHwgc3RyaW5nLCBjcFByZXNldENvbG9yczogc3RyaW5nW10pIHtcbiAgICAgICAgdGhpcy5jcFByZXNldExhYmVsID0gY3BQcmVzZXRMYWJlbFxuICAgICAgICB0aGlzLmNwUHJlc2V0Q29sb3JzID0gY3BQcmVzZXRDb2xvcnNcbiAgICB9XG5cbiAgICBzZXRDb2xvckZyb21TdHJpbmcodmFsdWU6IHN0cmluZywgZW1pdDogYm9vbGVhbiA9IHRydWUsIHVwZGF0ZTogYm9vbGVhbiA9IHRydWUpIHtcbiAgICAgICAgbGV0IGhzdmEgPSBzdHJpbmdUb0hzdmEodmFsdWUsIHRydWUpXG4gICAgICAgIGxldCBjbXlrID0gc3RyaW5nVG9DbXlrKHZhbHVlLCB0cnVlKVxuXG4gICAgICAgIGlmICgoIWhzdmEgJiYgIXRoaXMuaHN2YSkgJiYgKCFjbXlrICYmICF0aGlzLmNteWspKSB7XG4gICAgICAgICAgICBoc3ZhID0gc3RyaW5nVG9Ic3ZhKHRoaXMuZmFsbGJhY2tDb2xvciwgdHJ1ZSlcbiAgICAgICAgICAgIGNteWsgPSBzdHJpbmdUb0NteWsodGhpcy5mYWxsYmFja0NvbG9yLCB0cnVlKVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGhzdmEgfHwgY215aykge1xuICAgICAgICAgICAgaWYgKHRoaXMuY3BBbHBoYUNoYW5uZWwgPT0gQWxwaGFDaGFubmVsLmRpc2FibGVkKSB7XG4gICAgICAgICAgICAgICAgaHN2YS5hID0gMVxuICAgICAgICAgICAgICAgIGNteWsuYSA9IDFcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5oc3ZhID0gaHN2YVxuICAgICAgICAgICAgdGhpcy5jbXlrID0gY215ayA/IGRlbm9ybWFsaXplQ01ZSyhjbXlrKSA6IGNteWtcblxuICAgICAgICAgICAgdGhpcy5zbGlkZXJIID0gdGhpcy5oc3ZhLmhcblxuICAgICAgICAgICAgdGhpcy51cGRhdGVDb2xvclBpY2tlcihlbWl0LCB1cGRhdGUsIChjbXlrICYmIHRoaXMuY3BDbXlrRW5hYmxlZCkpXG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBzdHJpbmdUb1JnYmEodmFsdWU6IHN0cmluZykge1xuICAgICAgICBjb25zdCBoc3ZhID0gc3RyaW5nVG9Ic3ZhKHZhbHVlLCB0cnVlKVxuICAgICAgICBpZiAoaHN2YSlcbiAgICAgICAgICAgIHJldHVybiBmb3JtYXRPdXRwdXQoaHN2YSwgT3V0cHV0Rm9ybWF0LnJnYmEsIEFscGhhQ2hhbm5lbC5lbmFibGVkKVxuXG4gICAgICAgIHJldHVybiB1bmRlZmluZWRcbiAgICB9XG5cbiAgICBvbkRyYWdFbmQoc2xpZGVyOiBzdHJpbmcpIHtcbiAgICAgICAgaWYgKHRoaXMuY2FsbGJhY2tzKSB7XG4gICAgICAgICAgICB0aGlzLmNhbGxiYWNrcy5zbGlkZXJEcmFnRW5kKHsgc2xpZGVyLCBjb2xvcjogdGhpcy5vdXRwdXRDb2xvciB9KVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgb25EcmFnU3RhcnQoc2xpZGVyOiBzdHJpbmcpIHtcbiAgICAgICAgaWYgKHRoaXMuY2FsbGJhY2tzKSB7XG4gICAgICAgICAgICB0aGlzLmNhbGxiYWNrcy5zbGlkZXJEcmFnU3RhcnQoeyBzbGlkZXIsIGNvbG9yOiB0aGlzLm91dHB1dENvbG9yIH0pXG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBvbkZvcm1hdFRvZ2dsZShjaGFuZ2U6IG51bWJlcikge1xuICAgICAgICBjb25zdCBhdmFpbGFibGVGb3JtYXRzID0gdGhpcy5kaWFsb2dJbnB1dEZpZWxkcy5sZW5ndGggLSAodGhpcy5jcENteWtFbmFibGVkID8gMCA6IDEpXG5cbiAgICAgICAgY29uc3QgbmV4dEZvcm1hdCA9ICgoKHRoaXMuZGlhbG9nSW5wdXRGaWVsZHMuaW5kZXhPZih0aGlzLmZvcm1hdCkgKyBjaGFuZ2UpICVcbiAgICAgICAgICAgIGF2YWlsYWJsZUZvcm1hdHMpICsgYXZhaWxhYmxlRm9ybWF0cykgJSBhdmFpbGFibGVGb3JtYXRzXG5cbiAgICAgICAgdGhpcy5mb3JtYXQgPSB0aGlzLmRpYWxvZ0lucHV0RmllbGRzW25leHRGb3JtYXRdXG4gICAgfVxuXG4gICAgb25Db2xvckNoYW5nZSh2YWx1ZTogeyBzOiBudW1iZXIsIHY6IG51bWJlciwgcmdYOiBudW1iZXIsIHJnWTogbnVtYmVyIH0pIHtcbiAgICAgICAgdGhpcy5oc3ZhLnMgPSB2YWx1ZS5zIC8gdmFsdWUucmdYXG4gICAgICAgIHRoaXMuaHN2YS52ID0gdmFsdWUudiAvIHZhbHVlLnJnWVxuXG4gICAgICAgIHRoaXMudXBkYXRlQ29sb3JQaWNrZXIoKVxuXG4gICAgICAgIGlmICh0aGlzLmNhbGxiYWNrcykge1xuICAgICAgICAgICAgdGhpcy5jYWxsYmFja3Muc2xpZGVyQ2hhbmdlZCh7XG4gICAgICAgICAgICAgICAgc2xpZGVyOiAnbGlnaHRuZXNzJyxcbiAgICAgICAgICAgICAgICB2YWx1ZTogdGhpcy5oc3ZhLnYsXG4gICAgICAgICAgICAgICAgY29sb3I6IHRoaXMub3V0cHV0Q29sb3JcbiAgICAgICAgICAgIH0pXG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5jYWxsYmFja3MpIHtcbiAgICAgICAgICAgIHRoaXMuY2FsbGJhY2tzLnNsaWRlckNoYW5nZWQoe1xuICAgICAgICAgICAgICAgIHNsaWRlcjogJ3NhdHVyYXRpb24nLFxuICAgICAgICAgICAgICAgIHZhbHVlOiB0aGlzLmhzdmEucyxcbiAgICAgICAgICAgICAgICBjb2xvcjogdGhpcy5vdXRwdXRDb2xvclxuICAgICAgICAgICAgfSlcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG9uSHVlQ2hhbmdlKHZhbHVlOiB7IHY6IG51bWJlciwgcmdYOiBudW1iZXIgfSkge1xuICAgICAgICB0aGlzLmhzdmEuaCA9IHZhbHVlLnYgLyB2YWx1ZS5yZ1hcbiAgICAgICAgdGhpcy5zbGlkZXJIID0gdGhpcy5oc3ZhLmhcblxuICAgICAgICB0aGlzLnVwZGF0ZUNvbG9yUGlja2VyKClcblxuICAgICAgICBpZiAodGhpcy5jYWxsYmFja3MpIHtcbiAgICAgICAgICAgIHRoaXMuY2FsbGJhY2tzLnNsaWRlckNoYW5nZWQoe1xuICAgICAgICAgICAgICAgIHNsaWRlcjogJ2h1ZScsXG4gICAgICAgICAgICAgICAgdmFsdWU6IHRoaXMuaHN2YS5oLFxuICAgICAgICAgICAgICAgIGNvbG9yOiB0aGlzLm91dHB1dENvbG9yXG4gICAgICAgICAgICB9KVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgb25WYWx1ZUNoYW5nZSh2YWx1ZTogeyB2OiBudW1iZXIsIHJnWDogbnVtYmVyIH0pIHtcbiAgICAgICAgdGhpcy5oc3ZhLnYgPSB2YWx1ZS52IC8gdmFsdWUucmdYXG5cbiAgICAgICAgdGhpcy51cGRhdGVDb2xvclBpY2tlcigpXG5cbiAgICAgICAgaWYgKHRoaXMuY2FsbGJhY2tzKSB7XG4gICAgICAgICAgICB0aGlzLmNhbGxiYWNrcy5zbGlkZXJDaGFuZ2VkKHtcbiAgICAgICAgICAgICAgICBzbGlkZXI6ICd2YWx1ZScsXG4gICAgICAgICAgICAgICAgdmFsdWU6IHRoaXMuaHN2YS52LFxuICAgICAgICAgICAgICAgIGNvbG9yOiB0aGlzLm91dHB1dENvbG9yXG4gICAgICAgICAgICB9KVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgb25BbHBoYUNoYW5nZSh2YWx1ZTogeyB2OiBudW1iZXIsIHJnWDogbnVtYmVyIH0pIHtcbiAgICAgICAgdGhpcy5oc3ZhLmEgPSB2YWx1ZS52IC8gdmFsdWUucmdYXG5cbiAgICAgICAgdGhpcy51cGRhdGVDb2xvclBpY2tlcigpXG5cbiAgICAgICAgaWYgKHRoaXMuY2FsbGJhY2tzKSB7XG4gICAgICAgICAgICB0aGlzLmNhbGxiYWNrcy5zbGlkZXJDaGFuZ2VkKHtcbiAgICAgICAgICAgICAgICBzbGlkZXI6ICdhbHBoYScsXG4gICAgICAgICAgICAgICAgdmFsdWU6IHRoaXMuaHN2YS5hLFxuICAgICAgICAgICAgICAgIGNvbG9yOiB0aGlzLm91dHB1dENvbG9yXG4gICAgICAgICAgICB9KVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgb25IZXhJbnB1dCh2YWx1ZTogc3RyaW5nKSB7XG4gICAgICAgIGlmICh2YWx1ZSA9PSBudWxsKSB7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZUNvbG9yUGlja2VyKClcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmICh2YWx1ZSAmJiB2YWx1ZVswXSAhPSAnIycpIHtcbiAgICAgICAgICAgICAgICB2YWx1ZSA9ICcjJyArIHZhbHVlXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IHZhbGlkSGV4ID0gL14jKFthLWYwLTldezN9fFthLWYwLTldezZ9fFthLWYwLTldezh9KSQvZ2lcblxuICAgICAgICAgICAgY29uc3QgdmFsaWQgPSB2YWxpZEhleC50ZXN0KHZhbHVlKVxuXG4gICAgICAgICAgICBpZiAodmFsaWQpIHtcbiAgICAgICAgICAgICAgICAvLyBTaG9ydCBoZXhcbiAgICAgICAgICAgICAgICBpZiAodmFsdWUubGVuZ3RoID09IDQpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSAnIycgKyB2YWx1ZS5zdWJzdHJpbmcoMSlcbiAgICAgICAgICAgICAgICAgICAgICAgIC5zcGxpdCgnJylcbiAgICAgICAgICAgICAgICAgICAgICAgIC5tYXAoYyA9PiBjICsgYylcbiAgICAgICAgICAgICAgICAgICAgICAgIC5qb2luKCcnKVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIC8vIEhleCB3aXRob3V0IGFscGhhXG4gICAgICAgICAgICAgICAgaWYgKHZhbHVlLmxlbmd0aCA9PSA3ICYmIHRoaXMuY3BBbHBoYUNoYW5uZWwgPT0gQWxwaGFDaGFubmVsLmZvcmNlZCkge1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZSArPSBNYXRoLnJvdW5kKHRoaXMuaHN2YS5hICogMjU1KS50b1N0cmluZygxNilcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB0aGlzLnNldENvbG9yRnJvbVN0cmluZyh2YWx1ZSwgdHJ1ZSwgZmFsc2UpXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICh0aGlzLmNhbGxiYWNrcykge1xuICAgICAgICAgICAgICAgIHRoaXMuY2FsbGJhY2tzLmlucHV0Q2hhbmdlZCh7XG4gICAgICAgICAgICAgICAgICAgIGlucHV0OiAnaGV4JyxcbiAgICAgICAgICAgICAgICAgICAgdmFsaWQsXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlLFxuICAgICAgICAgICAgICAgICAgICBjb2xvcjogdGhpcy5vdXRwdXRDb2xvclxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBvblJlZElucHV0KHZhbHVlOiB7IHY6IG51bWJlciwgcmc6IG51bWJlciB9KSB7XG4gICAgICAgIGNvbnN0IHJnYmEgPSBoc3ZhVG9SZ2JhKHRoaXMuaHN2YSlcblxuICAgICAgICBjb25zdCB2YWxpZCA9ICFpc05hTih2YWx1ZS52KSAmJiB2YWx1ZS52ID49IDAgJiYgdmFsdWUudiA8PSB2YWx1ZS5yZ1xuXG4gICAgICAgIGlmICh2YWxpZCkge1xuICAgICAgICAgICAgcmdiYS5yID0gdmFsdWUudiAvIHZhbHVlLnJnXG5cbiAgICAgICAgICAgIHRoaXMuaHN2YSA9IHJnYmFUb0hzdmEocmdiYSlcblxuICAgICAgICAgICAgdGhpcy5zbGlkZXJIID0gdGhpcy5oc3ZhLmhcblxuICAgICAgICAgICAgdGhpcy51cGRhdGVDb2xvclBpY2tlcigpXG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5jYWxsYmFja3MpIHtcbiAgICAgICAgICAgIHRoaXMuY2FsbGJhY2tzLmlucHV0Q2hhbmdlZCh7XG4gICAgICAgICAgICAgICAgaW5wdXQ6ICdyZWQnLFxuICAgICAgICAgICAgICAgIHZhbGlkLFxuICAgICAgICAgICAgICAgIHZhbHVlOiByZ2JhLnIsXG4gICAgICAgICAgICAgICAgY29sb3I6IHRoaXMub3V0cHV0Q29sb3JcbiAgICAgICAgICAgIH0pXG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBvbkJsdWVJbnB1dCh2YWx1ZTogeyB2OiBudW1iZXIsIHJnOiBudW1iZXIgfSkge1xuICAgICAgICBjb25zdCByZ2JhID0gaHN2YVRvUmdiYSh0aGlzLmhzdmEpXG5cbiAgICAgICAgY29uc3QgdmFsaWQgPSAhaXNOYU4odmFsdWUudikgJiYgdmFsdWUudiA+PSAwICYmIHZhbHVlLnYgPD0gdmFsdWUucmdcblxuICAgICAgICBpZiAodmFsaWQpIHtcbiAgICAgICAgICAgIHJnYmEuYiA9IHZhbHVlLnYgLyB2YWx1ZS5yZ1xuXG4gICAgICAgICAgICB0aGlzLmhzdmEgPSByZ2JhVG9Ic3ZhKHJnYmEpXG5cbiAgICAgICAgICAgIHRoaXMuc2xpZGVySCA9IHRoaXMuaHN2YS5oXG5cbiAgICAgICAgICAgIHRoaXMudXBkYXRlQ29sb3JQaWNrZXIoKVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuY2FsbGJhY2tzKSB7XG4gICAgICAgICAgICB0aGlzLmNhbGxiYWNrcy5pbnB1dENoYW5nZWQoe1xuICAgICAgICAgICAgICAgIGlucHV0OiAnYmx1ZScsXG4gICAgICAgICAgICAgICAgdmFsaWQsXG4gICAgICAgICAgICAgICAgdmFsdWU6IHJnYmEuYixcbiAgICAgICAgICAgICAgICBjb2xvcjogdGhpcy5vdXRwdXRDb2xvclxuICAgICAgICAgICAgfSlcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG9uR3JlZW5JbnB1dCh2YWx1ZTogeyB2OiBudW1iZXIsIHJnOiBudW1iZXIgfSkge1xuICAgICAgICBjb25zdCByZ2JhID0gaHN2YVRvUmdiYSh0aGlzLmhzdmEpXG5cbiAgICAgICAgY29uc3QgdmFsaWQgPSAhaXNOYU4odmFsdWUudikgJiYgdmFsdWUudiA+PSAwICYmIHZhbHVlLnYgPD0gdmFsdWUucmdcblxuICAgICAgICBpZiAodmFsaWQpIHtcbiAgICAgICAgICAgIHJnYmEuZyA9IHZhbHVlLnYgLyB2YWx1ZS5yZ1xuXG4gICAgICAgICAgICB0aGlzLmhzdmEgPSByZ2JhVG9Ic3ZhKHJnYmEpXG5cbiAgICAgICAgICAgIHRoaXMuc2xpZGVySCA9IHRoaXMuaHN2YS5oXG5cbiAgICAgICAgICAgIHRoaXMudXBkYXRlQ29sb3JQaWNrZXIoKVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuY2FsbGJhY2tzKSB7XG4gICAgICAgICAgICB0aGlzLmNhbGxiYWNrcy5pbnB1dENoYW5nZWQoe1xuICAgICAgICAgICAgICAgIGlucHV0OiAnZ3JlZW4nLFxuICAgICAgICAgICAgICAgIHZhbGlkLFxuICAgICAgICAgICAgICAgIHZhbHVlOiByZ2JhLmcsXG4gICAgICAgICAgICAgICAgY29sb3I6IHRoaXMub3V0cHV0Q29sb3JcbiAgICAgICAgICAgIH0pXG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBvbkh1ZUlucHV0KHZhbHVlOiB7IHY6IG51bWJlciwgcmc6IG51bWJlciB9KSB7XG4gICAgICAgIGNvbnN0IHZhbGlkID0gIWlzTmFOKHZhbHVlLnYpICYmIHZhbHVlLnYgPj0gMCAmJiB2YWx1ZS52IDw9IHZhbHVlLnJnXG5cbiAgICAgICAgaWYgKHZhbGlkKSB7XG4gICAgICAgICAgICB0aGlzLmhzdmEuaCA9IHZhbHVlLnYgLyB2YWx1ZS5yZ1xuXG4gICAgICAgICAgICB0aGlzLnNsaWRlckggPSB0aGlzLmhzdmEuaFxuXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZUNvbG9yUGlja2VyKClcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmNhbGxiYWNrcykge1xuICAgICAgICAgICAgdGhpcy5jYWxsYmFja3MuaW5wdXRDaGFuZ2VkKHtcbiAgICAgICAgICAgICAgICBpbnB1dDogJ2h1ZScsXG4gICAgICAgICAgICAgICAgdmFsaWQsXG4gICAgICAgICAgICAgICAgdmFsdWU6IHRoaXMuaHN2YS5oLFxuICAgICAgICAgICAgICAgIGNvbG9yOiB0aGlzLm91dHB1dENvbG9yXG4gICAgICAgICAgICB9KVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgb25WYWx1ZUlucHV0KHZhbHVlOiB7IHY6IG51bWJlciwgcmc6IG51bWJlciB9KSB7XG4gICAgICAgIGNvbnN0IHZhbGlkID0gIWlzTmFOKHZhbHVlLnYpICYmIHZhbHVlLnYgPj0gMCAmJiB2YWx1ZS52IDw9IHZhbHVlLnJnXG5cbiAgICAgICAgaWYgKHZhbGlkKSB7XG4gICAgICAgICAgICB0aGlzLmhzdmEudiA9IHZhbHVlLnYgLyB2YWx1ZS5yZ1xuXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZUNvbG9yUGlja2VyKClcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmNhbGxiYWNrcykge1xuICAgICAgICAgICAgdGhpcy5jYWxsYmFja3MuaW5wdXRDaGFuZ2VkKHtcbiAgICAgICAgICAgICAgICBpbnB1dDogJ3ZhbHVlJyxcbiAgICAgICAgICAgICAgICB2YWxpZCxcbiAgICAgICAgICAgICAgICB2YWx1ZTogdGhpcy5oc3ZhLnYsXG4gICAgICAgICAgICAgICAgY29sb3I6IHRoaXMub3V0cHV0Q29sb3JcbiAgICAgICAgICAgIH0pXG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBvbkFscGhhSW5wdXQodmFsdWU6IHsgdjogbnVtYmVyLCByZzogbnVtYmVyIH0pIHtcbiAgICAgICAgY29uc3QgdmFsaWQgPSAhaXNOYU4odmFsdWUudikgJiYgdmFsdWUudiA+PSAwICYmIHZhbHVlLnYgPD0gdmFsdWUucmdcblxuICAgICAgICBpZiAodmFsaWQpIHtcbiAgICAgICAgICAgIHRoaXMuaHN2YS5hID0gdmFsdWUudiAvIHZhbHVlLnJnXG5cbiAgICAgICAgICAgIHRoaXMudXBkYXRlQ29sb3JQaWNrZXIoKVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuY2FsbGJhY2tzKSB7XG4gICAgICAgICAgICB0aGlzLmNhbGxiYWNrcy5pbnB1dENoYW5nZWQoe1xuICAgICAgICAgICAgICAgIGlucHV0OiAnYWxwaGEnLFxuICAgICAgICAgICAgICAgIHZhbGlkLFxuICAgICAgICAgICAgICAgIHZhbHVlOiB0aGlzLmhzdmEuYSxcbiAgICAgICAgICAgICAgICBjb2xvcjogdGhpcy5vdXRwdXRDb2xvclxuICAgICAgICAgICAgfSlcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG9uTGlnaHRuZXNzSW5wdXQodmFsdWU6IHsgdjogbnVtYmVyLCByZzogbnVtYmVyIH0pIHtcbiAgICAgICAgY29uc3QgaHNsYSA9IGhzdmEyaHNsYSh0aGlzLmhzdmEpXG5cbiAgICAgICAgY29uc3QgdmFsaWQgPSAhaXNOYU4odmFsdWUudikgJiYgdmFsdWUudiA+PSAwICYmIHZhbHVlLnYgPD0gdmFsdWUucmdcblxuICAgICAgICBpZiAodmFsaWQpIHtcbiAgICAgICAgICAgIGhzbGEubCA9IHZhbHVlLnYgLyB2YWx1ZS5yZ1xuXG4gICAgICAgICAgICB0aGlzLmhzdmEgPSBoc2xhMmhzdmEoaHNsYSlcblxuICAgICAgICAgICAgdGhpcy5zbGlkZXJIID0gdGhpcy5oc3ZhLmhcblxuICAgICAgICAgICAgdGhpcy51cGRhdGVDb2xvclBpY2tlcigpXG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5jYWxsYmFja3MpIHtcbiAgICAgICAgICAgIHRoaXMuY2FsbGJhY2tzLmlucHV0Q2hhbmdlZCh7XG4gICAgICAgICAgICAgICAgaW5wdXQ6ICdsaWdodG5lc3MnLFxuICAgICAgICAgICAgICAgIHZhbGlkLFxuICAgICAgICAgICAgICAgIHZhbHVlOiBoc2xhLmwsXG4gICAgICAgICAgICAgICAgY29sb3I6IHRoaXMub3V0cHV0Q29sb3JcbiAgICAgICAgICAgIH0pXG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBvblNhdHVyYXRpb25JbnB1dCh2YWx1ZTogeyB2OiBudW1iZXIsIHJnOiBudW1iZXIgfSkge1xuICAgICAgICBjb25zdCBoc2xhID0gaHN2YTJoc2xhKHRoaXMuaHN2YSlcblxuICAgICAgICBjb25zdCB2YWxpZCA9ICFpc05hTih2YWx1ZS52KSAmJiB2YWx1ZS52ID49IDAgJiYgdmFsdWUudiA8PSB2YWx1ZS5yZ1xuXG4gICAgICAgIGlmICh2YWxpZCkge1xuICAgICAgICAgICAgaHNsYS5zID0gdmFsdWUudiAvIHZhbHVlLnJnXG5cbiAgICAgICAgICAgIHRoaXMuaHN2YSA9IGhzbGEyaHN2YShoc2xhKVxuXG4gICAgICAgICAgICB0aGlzLnNsaWRlckggPSB0aGlzLmhzdmEuaFxuXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZUNvbG9yUGlja2VyKClcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmNhbGxiYWNrcykge1xuICAgICAgICAgICAgdGhpcy5jYWxsYmFja3MuaW5wdXRDaGFuZ2VkKHtcbiAgICAgICAgICAgICAgICBpbnB1dDogJ3NhdHVyYXRpb24nLFxuICAgICAgICAgICAgICAgIHZhbGlkLFxuICAgICAgICAgICAgICAgIHZhbHVlOiBoc2xhLnMsXG4gICAgICAgICAgICAgICAgY29sb3I6IHRoaXMub3V0cHV0Q29sb3JcbiAgICAgICAgICAgIH0pXG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgb25DeWFuSW5wdXQodmFsdWU6IHsgdjogbnVtYmVyLCByZzogbnVtYmVyIH0pOiB2b2lkIHtcbiAgICAgICAgY29uc3QgdmFsaWQgPSAhaXNOYU4odmFsdWUudikgJiYgdmFsdWUudiA+PSAwICYmIHZhbHVlLnYgPD0gdmFsdWUucmdcblxuICAgICAgICBpZiAodmFsaWQpIHtcbiAgICAgICAgICAgIHRoaXMuY215ay5jID0gdmFsdWUudlxuXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZUNvbG9yUGlja2VyKHRydWUsIHRydWUsIHRydWUpXG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5jYWxsYmFja3MpIHtcbiAgICAgICAgICAgIHRoaXMuY2FsbGJhY2tzLmlucHV0Q2hhbmdlZCh7XG4gICAgICAgICAgICAgICAgaW5wdXQ6ICdjeWFuJyxcbiAgICAgICAgICAgICAgICB2YWxpZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICB2YWx1ZTogdGhpcy5jbXlrLmMsXG4gICAgICAgICAgICAgICAgY29sb3I6IHRoaXMub3V0cHV0Q29sb3JcbiAgICAgICAgICAgIH0pXG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgb25NYWdlbnRhSW5wdXQodmFsdWU6IHsgdjogbnVtYmVyLCByZzogbnVtYmVyIH0pOiB2b2lkIHtcbiAgICAgICAgY29uc3QgdmFsaWQgPSAhaXNOYU4odmFsdWUudikgJiYgdmFsdWUudiA+PSAwICYmIHZhbHVlLnYgPD0gdmFsdWUucmdcblxuICAgICAgICBpZiAodmFsaWQpIHtcbiAgICAgICAgICAgIHRoaXMuY215ay5tID0gdmFsdWUudlxuXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZUNvbG9yUGlja2VyKHRydWUsIHRydWUsIHRydWUpXG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5jYWxsYmFja3MpIHtcbiAgICAgICAgICAgIHRoaXMuY2FsbGJhY2tzLmlucHV0Q2hhbmdlZCh7XG4gICAgICAgICAgICAgICAgaW5wdXQ6ICdtYWdlbnRhJyxcbiAgICAgICAgICAgICAgICB2YWxpZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICB2YWx1ZTogdGhpcy5jbXlrLm0sXG4gICAgICAgICAgICAgICAgY29sb3I6IHRoaXMub3V0cHV0Q29sb3JcbiAgICAgICAgICAgIH0pXG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgb25ZZWxsb3dJbnB1dCh2YWx1ZTogeyB2OiBudW1iZXIsIHJnOiBudW1iZXIgfSk6IHZvaWQge1xuICAgICAgICBjb25zdCB2YWxpZCA9ICFpc05hTih2YWx1ZS52KSAmJiB2YWx1ZS52ID49IDAgJiYgdmFsdWUudiA8PSB2YWx1ZS5yZ1xuXG4gICAgICAgIGlmICh2YWxpZCkge1xuICAgICAgICAgICAgdGhpcy5jbXlrLnkgPSB2YWx1ZS52XG5cbiAgICAgICAgICAgIHRoaXMudXBkYXRlQ29sb3JQaWNrZXIodHJ1ZSwgdHJ1ZSwgdHJ1ZSlcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmNhbGxiYWNrcykge1xuICAgICAgICAgICAgdGhpcy5jYWxsYmFja3MuaW5wdXRDaGFuZ2VkKHtcbiAgICAgICAgICAgICAgICBpbnB1dDogJ3llbGxvdycsXG4gICAgICAgICAgICAgICAgdmFsaWQ6IHRydWUsXG4gICAgICAgICAgICAgICAgdmFsdWU6IHRoaXMuY215ay55LFxuICAgICAgICAgICAgICAgIGNvbG9yOiB0aGlzLm91dHB1dENvbG9yXG4gICAgICAgICAgICB9KVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIG9uQmxhY2tJbnB1dCh2YWx1ZTogeyB2OiBudW1iZXIsIHJnOiBudW1iZXIgfSk6IHZvaWQge1xuICAgICAgICBjb25zdCB2YWxpZCA9ICFpc05hTih2YWx1ZS52KSAmJiB2YWx1ZS52ID49IDAgJiYgdmFsdWUudiA8PSB2YWx1ZS5yZ1xuXG4gICAgICAgIGlmICh2YWxpZCkge1xuICAgICAgICAgICAgdGhpcy5jbXlrLmsgPSB2YWx1ZS52XG5cbiAgICAgICAgICAgIHRoaXMudXBkYXRlQ29sb3JQaWNrZXIodHJ1ZSwgdHJ1ZSwgdHJ1ZSlcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmNhbGxiYWNrcykge1xuICAgICAgICAgICAgdGhpcy5jYWxsYmFja3MuaW5wdXRDaGFuZ2VkKHtcbiAgICAgICAgICAgICAgICBpbnB1dDogJ2JsYWNrJyxcbiAgICAgICAgICAgICAgICB2YWxpZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICB2YWx1ZTogdGhpcy5jbXlrLmssXG4gICAgICAgICAgICAgICAgY29sb3I6IHRoaXMub3V0cHV0Q29sb3JcbiAgICAgICAgICAgIH0pXG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBvbkFkZFByZXNldENvbG9yKHZhbHVlOiBzdHJpbmcpIHtcbiAgICAgICAgaWYgKCF0aGlzLmNwUHJlc2V0Q29sb3JzLmZpbHRlcigoY29sb3IpID0+IChjb2xvciA9PSB2YWx1ZSkpLmxlbmd0aCkge1xuICAgICAgICAgICAgdGhpcy5jcFByZXNldENvbG9ycyA9IHRoaXMuY3BQcmVzZXRDb2xvcnMuY29uY2F0KHZhbHVlKVxuXG4gICAgICAgICAgICBpZiAodGhpcy5jYWxsYmFja3MpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNhbGxiYWNrcy5wcmVzZXRDb2xvcnNDaGFuZ2VkKHRoaXMuY3BQcmVzZXRDb2xvcnMpXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBvblJlbW92ZVByZXNldENvbG9yKHZhbHVlOiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5jcFByZXNldENvbG9ycyA9IHRoaXMuY3BQcmVzZXRDb2xvcnMuZmlsdGVyKChjb2xvcikgPT4gKGNvbG9yICE9IHZhbHVlKSlcblxuICAgICAgICBpZiAodGhpcy5jYWxsYmFja3MpIHtcbiAgICAgICAgICAgIHRoaXMuY2FsbGJhY2tzLnByZXNldENvbG9yc0NoYW5nZWQodGhpcy5jcFByZXNldENvbG9ycylcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIFByaXZhdGUgaGVscGVyIGZ1bmN0aW9ucyBmb3IgdGhlIGNvbG9yIHBpY2tlciBkaWFsb2cgc3RhdHVzXG5cbiAgICBwcml2YXRlIG9wZW5Db2xvclBpY2tlcigpIHtcbiAgICAgICAgaWYgKCF0aGlzLnNob3cpIHtcbiAgICAgICAgICAgIHRoaXMuc2hvdyA9IHRydWVcblxuICAgICAgICAgICAgaWYgKHRoaXMuY2FsbGJhY2tzKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jYWxsYmFja3Muc3RhdGVDaGFuZ2VkKHRydWUpXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGNsb3NlQ29sb3JQaWNrZXIoKSB7XG4gICAgICAgIGlmICh0aGlzLnNob3cpIHtcbiAgICAgICAgICAgIHRoaXMuc2hvdyA9IGZhbHNlXG5cbiAgICAgICAgICAgIGlmICh0aGlzLmNhbGxiYWNrcykge1xuICAgICAgICAgICAgICAgIHRoaXMuY2FsbGJhY2tzLnN0YXRlQ2hhbmdlZChmYWxzZSlcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKCF0aGlzLmNkUmVmWydkZXN0cm95ZWQnXSkge1xuICAgICAgICAgICAgICAgIHRoaXMuY2RSZWYuZGV0ZWN0Q2hhbmdlcygpXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHVwZGF0ZUNvbG9yUGlja2VyKGVtaXQ6IGJvb2xlYW4gPSB0cnVlLCB1cGRhdGU6IGJvb2xlYW4gPSB0cnVlLCBjbXlrSW5wdXQ6IGJvb2xlYW4gPSBmYWxzZSkge1xuICAgICAgICBpZiAodGhpcy5jcE1vZGUgPT0gQ29sb3JNb2RlSW50ZXJuYWwuZ3JheXNjYWxlKSB7XG4gICAgICAgICAgICB0aGlzLmhzdmEucyA9IDBcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCByZ2JhOiBSZ2JhXG5cbiAgICAgICAgY29uc3QgbGFzdE91dHB1dCA9IHRoaXMub3V0cHV0Q29sb3JcblxuICAgICAgICBjb25zdCBoc2xhID0gaHN2YTJoc2xhKHRoaXMuaHN2YSlcblxuICAgICAgICBpZiAoIXRoaXMuY3BDbXlrRW5hYmxlZCkge1xuICAgICAgICAgICAgcmdiYSA9IGRlbm9ybWFsaXplUkdCQShoc3ZhVG9SZ2JhKHRoaXMuaHN2YSkpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAoIWNteWtJbnB1dCkge1xuICAgICAgICAgICAgICAgIHJnYmEgPSBoc3ZhVG9SZ2JhKHRoaXMuaHN2YSlcblxuICAgICAgICAgICAgICAgIHRoaXMuY215ayA9IGRlbm9ybWFsaXplQ01ZSyhyZ2JhVG9DbXlrKHJnYmEpKVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZ2JhID0gY215a1RvUmdiKG5vcm1hbGl6ZUNNWUsodGhpcy5jbXlrKSlcblxuICAgICAgICAgICAgICAgIHRoaXMuaHN2YSA9IHJnYmFUb0hzdmEocmdiYSlcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmdiYSA9IGRlbm9ybWFsaXplUkdCQShyZ2JhKVxuXG4gICAgICAgICAgICB0aGlzLnNsaWRlckggPSB0aGlzLmhzdmEuaFxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgaHVlID0gZGVub3JtYWxpemVSR0JBKGhzdmFUb1JnYmEobmV3IEhzdmEodGhpcy5zbGlkZXJIIHx8IHRoaXMuaHN2YS5oLCAxLCAxLCAxKSkpXG5cbiAgICAgICAgaWYgKHVwZGF0ZSkge1xuICAgICAgICAgICAgdGhpcy5oc2xhVGV4dCA9IG5ldyBIc2xhKE1hdGgucm91bmQoKGhzbGEuaCkgKiAzNjApLCBNYXRoLnJvdW5kKGhzbGEucyAqIDEwMCksIE1hdGgucm91bmQoaHNsYS5sICogMTAwKSxcbiAgICAgICAgICAgICAgICBNYXRoLnJvdW5kKGhzbGEuYSAqIDEwMCkgLyAxMDApXG5cbiAgICAgICAgICAgIHRoaXMucmdiYVRleHQgPSBuZXcgUmdiYShyZ2JhLnIsIHJnYmEuZywgcmdiYS5iLCBNYXRoLnJvdW5kKHJnYmEuYSAqIDEwMCkgLyAxMDApXG5cbiAgICAgICAgICAgIGlmICh0aGlzLmNwQ215a0VuYWJsZWQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNteWtUZXh0ID0gbmV3IENteWsodGhpcy5jbXlrLmMsIHRoaXMuY215ay5tLCB0aGlzLmNteWsueSwgdGhpcy5jbXlrLmssXG4gICAgICAgICAgICAgICAgICAgIE1hdGgucm91bmQodGhpcy5jbXlrLmEgKiAxMDApIC8gMTAwKVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBhbGxvd0hleDggPSB0aGlzLmNwQWxwaGFDaGFubmVsID09PSBBbHBoYUNoYW5uZWwuYWx3YXlzXG5cbiAgICAgICAgICAgIHRoaXMuaGV4VGV4dCA9IHJnYmFUb0hleChyZ2JhLCBhbGxvd0hleDgpXG4gICAgICAgICAgICB0aGlzLmhleEFscGhhID0gdGhpcy5yZ2JhVGV4dC5hXG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5jcE91dHB1dEZvcm1hdCA9PSBPdXRwdXRGb3JtYXQuYXV0byAmJiB0aGlzLmhzdmEuYSA8IDEgJiYgIUFscGhhRW5hYmxlZEZvcm1hdHMuaGFzKHRoaXMuZm9ybWF0KSkge1xuICAgICAgICAgICAgdGhpcy5mb3JtYXQgPSB0aGlzLmhzdmEuYSA8IDEgPyBDb2xvckZvcm1hdC5yZ2JhIDogQ29sb3JGb3JtYXQuaGV4XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmh1ZVNsaWRlckNvbG9yID0gJ3JnYignICsgaHVlLnIgKyAnLCcgKyBodWUuZyArICcsJyArIGh1ZS5iICsgJyknXG4gICAgICAgIHRoaXMuYWxwaGFTbGlkZXJDb2xvciA9ICdsaW5lYXItZ3JhZGllbnQodG8gcmlnaHQsIHJnYmEoJyArIHJnYmEuciArICcsJyArIHJnYmEuZyArICcsJyArIHJnYmEuYiArICcsIDApIDAlLCByZ2JhKCcgKyByZ2JhLnIgKyAnLCcgKyByZ2JhLmcgKyAnLCcgKyByZ2JhLmIgKyAnLCAxKSAxMDAlKSdcblxuICAgICAgICB0aGlzLnN2U2xpZGVyTGlnaHQgPSBvcGFxdWVTbGlkZXJMaWdodChyZ2JhKVxuICAgICAgICB0aGlzLmh1ZVNsaWRlckxpZ2h0ID0gb3BhcXVlU2xpZGVyTGlnaHQoaHVlKVxuICAgICAgICB0aGlzLnZhbHVlU2xpZGVyTGlnaHQgPSBvcGFxdWVTbGlkZXJMaWdodChyZ2JhKVxuICAgICAgICB0aGlzLmFscGhhU2xpZGVyTGlnaHQgPSB0cmFuc3BhcmVudFNsaWRlckxpZ2h0KHJnYmEpXG5cbiAgICAgICAgdGhpcy5vdXRwdXRDb2xvciA9IGZvcm1hdE91dHB1dCh0aGlzLmhzdmEsIHRoaXMuY3BPdXRwdXRGb3JtYXQsIHRoaXMuY3BBbHBoYUNoYW5uZWwpXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRDb2xvciA9IGZvcm1hdE91dHB1dCh0aGlzLmhzdmEsIE91dHB1dEZvcm1hdC5yZ2JhLCBudWxsKVxuXG4gICAgICAgIGlmICh0aGlzLmZvcm1hdCAhPT0gQ29sb3JGb3JtYXQuY215aykge1xuICAgICAgICAgICAgdGhpcy5jbXlrQ29sb3IgPSAnJ1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5jbXlrQ29sb3IgPSBmb3JtYXRDbXlrKHRoaXMuY215aywgdGhpcy5jcEFscGhhQ2hhbm5lbClcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuc2xpZGVyID0gbmV3IFNsaWRlclBvc2l0aW9uKFxuICAgICAgICAgICAgKHRoaXMuc2xpZGVySCB8fCB0aGlzLmhzdmEuaCksXG4gICAgICAgICAgICB0aGlzLmhzdmEucyxcbiAgICAgICAgICAgICgxIC0gdGhpcy5oc3ZhLnYpLFxuICAgICAgICAgICAgdGhpcy5oc3ZhLmFcbiAgICAgICAgKVxuXG4gICAgICAgIGlmIChlbWl0ICYmIGxhc3RPdXRwdXQgIT0gdGhpcy5vdXRwdXRDb2xvciAmJiB0aGlzLmNhbGxiYWNrcykge1xuICAgICAgICAgICAgaWYgKHRoaXMuY3BDbXlrRW5hYmxlZCkge1xuICAgICAgICAgICAgICAgIHRoaXMuY2FsbGJhY2tzLmNteWtDaGFuZ2VkKHRoaXMuY215a0NvbG9yKVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLmNhbGxiYWNrcy5jb2xvckNoYW5nZWQodGhpcy5vdXRwdXRDb2xvcilcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZpbGwobjogbnVtYmVyKSB7XG4gICAgICAgIHJldHVybiBuZXcgQXJyYXkobikuZmlsbCgxKVxuICAgIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJjb2xvci1waWNrZXJcIlxuICAgIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIlxuICAgIFtuZ1N0eWxlXT1cIntcbiAgICAgICAgdmlzaWJpbGl0eTogIXNob3cgPyAnaGlkZGVuJyA6ICd2aXNpYmxlJyxcbiAgICAgICAgd2lkdGg6IGNwV2lkdGggfHwgJycsXG4gICAgICAgIGhlaWdodDogY3BIZWlnaHQgfHwgJydcbiAgICB9XCJcbiAgICAqbmdJZj1cInNob3dcIj5cbiAgICA8ZGl2ICpuZ0lmPVwiY3BEaWFsb2dEaXNwbGF5ID09IGRpYWxvZ0Rpc3BsYXkucG9wdXBcIlxuICAgICAgICBjbGFzcz1cImNvbG9yLXBpY2tlcl9fYXJyb3dcIlxuICAgICAgICBbbmdDbGFzc109XCInY29sb3ItcGlja2VyX19hcnJvdy0tJyArIGNwUG9zaXRpb25cIj48L2Rpdj5cbiAgICA8ZGl2ICpuZ0lmPVwiY3BNb2RlID09IGNvbG9yTW9kZUludGVybmFsLmNvbG9yXCJcbiAgICAgICAgY2xhc3M9XCJjb2xvci1waWNrZXJfX3N2XCJcbiAgICAgICAgY3BTbGlkZXJcbiAgICAgICAgW3JnWF09XCIxXCJcbiAgICAgICAgW3JnWV09XCIxXCJcbiAgICAgICAgKG5ld1ZhbHVlKT1cIm9uQ29sb3JDaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAgIChkcmFnU3RhcnQpPVwib25EcmFnU3RhcnQoJ3NhdHVyYXRpb24tbGlnaHRuZXNzJylcIlxuICAgICAgICAoZHJhZ0VuZCk9XCJvbkRyYWdFbmQoJ3NhdHVyYXRpb24tbGlnaHRuZXNzJylcIlxuICAgICAgICBbbmdTdHlsZV09XCJ7IFxuICAgICAgICAgICAgYmFja2dyb3VuZENvbG9yOiBodWVTbGlkZXJDb2xvciB8fCAnJ1xuICAgICAgICB9XCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2xvci1waWNrZXJfX2N1cnNvciBjb2xvci1waWNrZXJfX2N1cnNvci0tc3ZcIlxuICAgICAgICAgICAgW25nQ2xhc3NdPVwieyAnY29sb3ItcGlja2VyX19jdXJzb3ItLWxpZ2h0Jzogc3ZTbGlkZXJMaWdodCB9XCJcbiAgICAgICAgICAgIFtuZ1N0eWxlXT1cIntcbiAgICAgICAgICAgICAgICB0b3A6IChzbGlkZXI/LnYgfHwgMCkgKiAxMDAgKyAnJScsXG4gICAgICAgICAgICAgICAgbGVmdDogKHNsaWRlcj8ucyB8fCAwKSAqIDEwMCArICclJ1xuICAgICAgICAgICAgfVwiPjwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJjb2xvci1waWNrZXJfX2NvbnRyb2xzXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2xvci1waWNrZXJfX3NlbGVjdGVkXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sb3ItcGlja2VyX19zZWxlY3RlZC1jb2xvclwiPlxuICAgICAgICAgICAgICAgIDxkaXYgW25nU3R5bGVdPVwieyBcbiAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZENvbG9yOiBzZWxlY3RlZENvbG9yIHx8ICcnXG4gICAgICAgICAgICAgICAgfVwiPjxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiY3BBZGRDb2xvckJ1dHRvbiAmJiAhKGNwTWF4UHJlc2V0Q29sb3JzICYmIChjcFByZXNldENvbG9ycz8ubGVuZ3RoIHx8IDApID49IGNwTWF4UHJlc2V0Q29sb3JzKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlPVwiQWRkIGNvbG9yIHRvIHByZXNldFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBpMThuLXRpdGxlPVwiQEBueHQtY29sb3ItcGlja2VyLmJ1dHRvbi5hZGQtY29sb3JcIlxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJjb2xvci1waWNrZXJfX2FkZC1zZWxlY3RlZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7ICdjb2xvci1waWNrZXJfX2FkZC1zZWxlY3RlZC0tbGlnaHQnOiBhbHBoYVNsaWRlckxpZ2h0IH1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uQWRkUHJlc2V0Q29sb3Ioc2VsZWN0ZWRDb2xvcilcIj48c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoPVwiMjRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodD1cIjI0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2aWV3Qm94PVwiMCAwIDI0IDI0XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk0xOSAxM2gtNnY2aC0ydi02SDV2LTJoNlY1aDJ2Nmg2djJ6XCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTAgMGgyNHYyNEgwelwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGw9XCJub25lXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPjwvYnV0dG9uPjwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sb3ItcGlja2VyX19oYXZcIj5cbiAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJjcE1vZGUgPT0gY29sb3JNb2RlSW50ZXJuYWwuY29sb3JcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiY29sb3ItcGlja2VyX19zbGlkZXIgY29sb3ItcGlja2VyX19zbGlkZXItLWh1ZVwiXG4gICAgICAgICAgICAgICAgY3BTbGlkZXJcbiAgICAgICAgICAgICAgICBbcmdYXT1cIjFcIlxuICAgICAgICAgICAgICAgIChuZXdWYWx1ZSk9XCJvbkh1ZUNoYW5nZSgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAoZHJhZ1N0YXJ0KT1cIm9uRHJhZ1N0YXJ0KCdodWUnKVwiXG4gICAgICAgICAgICAgICAgKGRyYWdFbmQpPVwib25EcmFnRW5kKCdodWUnKVwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2xvci1waWNrZXJfX2N1cnNvclwiXG4gICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsgJ2NvbG9yLXBpY2tlcl9fY3Vyc29yLS1saWdodCc6IGh1ZVNsaWRlckxpZ2h0IH1cIlxuICAgICAgICAgICAgICAgICAgICBbbmdTdHlsZV09XCJ7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZWZ0OiAoc2xpZGVyPy5oIHx8IDApICogMTAwICsgJyUnXG4gICAgICAgICAgICAgICAgICAgIH1cIj48L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cImNwTW9kZSA9PSBjb2xvck1vZGVJbnRlcm5hbC5ncmF5c2NhbGVcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiY29sb3ItcGlja2VyX19zbGlkZXIgY29sb3ItcGlja2VyX19zbGlkZXItLXZhbHVlXCJcbiAgICAgICAgICAgICAgICBjcFNsaWRlclxuICAgICAgICAgICAgICAgIFtyZ1hdPVwiMVwiXG4gICAgICAgICAgICAgICAgKG5ld1ZhbHVlKT1cIm9uVmFsdWVDaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgKGRyYWdTdGFydCk9XCJvbkRyYWdTdGFydCgndmFsdWUnKVwiXG4gICAgICAgICAgICAgICAgKGRyYWdFbmQpPVwib25EcmFnRW5kKCd2YWx1ZScpXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbG9yLXBpY2tlcl9fY3Vyc29yXCJcbiAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieyAnY29sb3ItcGlja2VyX19jdXJzb3ItLWxpZ2h0JzogdmFsdWVTbGlkZXJMaWdodCB9XCJcbiAgICAgICAgICAgICAgICAgICAgW25nU3R5bGVdPVwie1xuICAgICAgICAgICAgICAgICAgICAgICAgbGVmdDogKDEgLSAoc2xpZGVyPy52IHx8IDApKSAqIDEwMCArICclJ1xuICAgICAgICAgICAgICAgICAgICB9XCI+PC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJjcEFscGhhQ2hhbm5lbCAhPSBhbHBoYUNoYW5uZWwuZGlzYWJsZWRcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiY29sb3ItcGlja2VyX19zbGlkZXIgY29sb3ItcGlja2VyX19zbGlkZXItLWFscGhhXCJcbiAgICAgICAgICAgICAgICBjcFNsaWRlclxuICAgICAgICAgICAgICAgIFtyZ1hdPVwiMVwiXG4gICAgICAgICAgICAgICAgKG5ld1ZhbHVlKT1cIm9uQWxwaGFDaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgKGRyYWdTdGFydCk9XCJvbkRyYWdTdGFydCgnYWxwaGEnKVwiXG4gICAgICAgICAgICAgICAgKGRyYWdFbmQpPVwib25EcmFnRW5kKCdhbHBoYScpXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbG9yLXBpY2tlcl9fc2xpZGVyLS1hbHBoYS1iZ1wiXG4gICAgICAgICAgICAgICAgICAgIFtuZ1N0eWxlXT1cIntcbiAgICAgICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmRJbWFnZTogYWxwaGFTbGlkZXJDb2xvciB8fCAnJ1xuICAgICAgICAgICAgICAgICAgICB9XCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2xvci1waWNrZXJfX2N1cnNvclwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7ICdjb2xvci1waWNrZXJfX2N1cnNvci0tbGlnaHQnOiBhbHBoYVNsaWRlckxpZ2h0IH1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgW25nU3R5bGVdPVwie1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlZnQ6IChzbGlkZXI/LmEgfHwgMCkgKiAxMDAgKyAnJSdcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cIj48L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2ICpuZ0lmPVwiIWNwRGlzYWJsZUlucHV0ICYmIChjcE1vZGUgPT0gY29sb3JNb2RlSW50ZXJuYWwuY29sb3IgfHwgY3BNb2RlID09IGNvbG9yTW9kZUludGVybmFsLmdyYXlzY2FsZSlcIlxuICAgICAgICBjbGFzcz1cImNvbG9yLXBpY2tlcl9faW5wdXRzXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2xvci1waWNrZXJfX2lucHV0LWZpZWxkc1wiPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNwTW9kZSA9PSBjb2xvck1vZGVJbnRlcm5hbC5ncmF5c2NhbGU7IGVsc2UgZm9ybWF0U3dpdGNoXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbG9yLXBpY2tlcl9faW5wdXQtZmllbGRcIj5cbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJudW1iZXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgcGF0dGVybj1cIlswLTldKlwiXG4gICAgICAgICAgICAgICAgICAgICAgICBtaW49XCIwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1heD1cIjEwMFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBjcFRleHRcbiAgICAgICAgICAgICAgICAgICAgICAgIFtyZ109XCIxMDBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cImhzbGFUZXh0Py5sXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIChrZXl1cC5lbnRlcik9XCJvbkFjY2VwdCgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIChuZXdWYWx1ZSk9XCJvblZhbHVlSW5wdXQoJGV2ZW50KVwiIC8+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY29sb3ItcGlja2VyX19pbnB1dC1maWVsZC1sYWJlbFwiPlY8L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cImNwQWxwaGFDaGFubmVsICE9IGFscGhhQ2hhbm5lbC5kaXNhYmxlZFwiXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiY29sb3ItcGlja2VyX19pbnB1dC1maWVsZFwiPlxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cIm51bWJlclwiXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXR0ZXJuPVwiWzAtOV0rKFtcXC4sXVswLTldezEsMn0pP1wiXG4gICAgICAgICAgICAgICAgICAgICAgICBtaW49XCIwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1heD1cIjFcIlxuICAgICAgICAgICAgICAgICAgICAgICAgc3RlcD1cIjAuMVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBjcFRleHRcbiAgICAgICAgICAgICAgICAgICAgICAgIFtyZ109XCIxXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJoc2xhVGV4dD8uYVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAoa2V5dXAuZW50ZXIpPVwib25BY2NlcHQoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAobmV3VmFsdWUpPVwib25BbHBoYUlucHV0KCRldmVudClcIiAvPlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNvbG9yLXBpY2tlcl9faW5wdXQtZmllbGQtbGFiZWxcIj5BPC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgI2Zvcm1hdFN3aXRjaD5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyIFtuZ1N3aXRjaF09XCJmb3JtYXRcIj5cbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiY29sb3JGb3JtYXQuaHNsYVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbG9yLXBpY2tlcl9faW5wdXQtZmllbGRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cIm51bWJlclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhdHRlcm49XCJbMC05XSpcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtaW49XCIwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF4PVwiMzYwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3BUZXh0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyZ109XCIzNjBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdmFsdWVdPVwiaHNsYVRleHQ/LmhcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoa2V5dXAuZW50ZXIpPVwib25BY2NlcHQoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChuZXdWYWx1ZSk9XCJvbkh1ZUlucHV0KCRldmVudClcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY29sb3ItcGlja2VyX19pbnB1dC1maWVsZC1sYWJlbFwiPkg8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2xvci1waWNrZXJfX2lucHV0LWZpZWxkXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJudW1iZXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXR0ZXJuPVwiWzAtOV0qXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWluPVwiMFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heD1cIjEwMFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNwVGV4dFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcmddPVwiMTAwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cImhzbGFUZXh0Py5zXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGtleXVwLmVudGVyKT1cIm9uQWNjZXB0KCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobmV3VmFsdWUpPVwib25TYXR1cmF0aW9uSW5wdXQoJGV2ZW50KVwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjb2xvci1waWNrZXJfX2lucHV0LWZpZWxkLWxhYmVsXCI+Uzwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbG9yLXBpY2tlcl9faW5wdXQtZmllbGRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cIm51bWJlclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhdHRlcm49XCJbMC05XSpcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtaW49XCIwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF4PVwiMTAwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3BUZXh0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyZ109XCIxMDBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdmFsdWVdPVwiaHNsYVRleHQ/LmxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoa2V5dXAuZW50ZXIpPVwib25BY2NlcHQoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChuZXdWYWx1ZSk9XCJvbkxpZ2h0bmVzc0lucHV0KCRldmVudClcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY29sb3ItcGlja2VyX19pbnB1dC1maWVsZC1sYWJlbFwiPkw8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJjcEFscGhhQ2hhbm5lbCAhPSBhbHBoYUNoYW5uZWwuZGlzYWJsZWRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiY29sb3ItcGlja2VyX19pbnB1dC1maWVsZFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwibnVtYmVyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF0dGVybj1cIlswLTldKyhbXFwuLF1bMC05XXsxLDJ9KT9cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtaW49XCIwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF4PVwiMVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZXA9XCIwLjFcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjcFRleHRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3JnXT1cIjFcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdmFsdWVdPVwiaHNsYVRleHQ/LmFcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoa2V5dXAuZW50ZXIpPVwib25BY2NlcHQoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChuZXdWYWx1ZSk9XCJvbkFscGhhSW5wdXQoJGV2ZW50KVwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjb2xvci1waWNrZXJfX2lucHV0LWZpZWxkLWxhYmVsXCI+QTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiY29sb3JGb3JtYXQucmdiYVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbG9yLXBpY2tlcl9faW5wdXQtZmllbGRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cIm51bWJlclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhdHRlcm49XCJbMC05XSpcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtaW49XCIwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF4PVwiMjU1XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3BUZXh0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyZ109XCIyNTVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdmFsdWVdPVwicmdiYVRleHQ/LnJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoa2V5dXAuZW50ZXIpPVwib25BY2NlcHQoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChuZXdWYWx1ZSk9XCJvblJlZElucHV0KCRldmVudClcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY29sb3ItcGlja2VyX19pbnB1dC1maWVsZC1sYWJlbFwiPlI8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2xvci1waWNrZXJfX2lucHV0LWZpZWxkXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJudW1iZXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXR0ZXJuPVwiWzAtOV0qXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWluPVwiMFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heD1cIjI1NVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNwVGV4dFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcmddPVwiMjU1XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cInJnYmFUZXh0Py5nXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGtleXVwLmVudGVyKT1cIm9uQWNjZXB0KCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobmV3VmFsdWUpPVwib25HcmVlbklucHV0KCRldmVudClcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY29sb3ItcGlja2VyX19pbnB1dC1maWVsZC1sYWJlbFwiPkc8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2xvci1waWNrZXJfX2lucHV0LWZpZWxkXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJudW1iZXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXR0ZXJuPVwiWzAtOV0qXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWluPVwiMFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heD1cIjI1NVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNwVGV4dFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcmddPVwiMjU1XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cInJnYmFUZXh0Py5iXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGtleXVwLmVudGVyKT1cIm9uQWNjZXB0KCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobmV3VmFsdWUpPVwib25CbHVlSW5wdXQoJGV2ZW50KVwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjb2xvci1waWNrZXJfX2lucHV0LWZpZWxkLWxhYmVsXCI+Qjwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cImNwQWxwaGFDaGFubmVsICE9IGFscGhhQ2hhbm5lbC5kaXNhYmxlZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJjb2xvci1waWNrZXJfX2lucHV0LWZpZWxkXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJudW1iZXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXR0ZXJuPVwiWzAtOV0rKFtcXC4sXVswLTldezEsMn0pP1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1pbj1cIjBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXg9XCIxXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RlcD1cIjAuMVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNwVGV4dFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcmddPVwiMVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJoc2xhVGV4dD8uYVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChrZXl1cC5lbnRlcik9XCJvbkFjY2VwdCgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG5ld1ZhbHVlKT1cIm9uQWxwaGFJbnB1dCgkZXZlbnQpXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNvbG9yLXBpY2tlcl9faW5wdXQtZmllbGQtbGFiZWxcIj5BPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCJjb2xvckZvcm1hdC5jbXlrXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sb3ItcGlja2VyX19pbnB1dC1maWVsZFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwibnVtYmVyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF0dGVybj1cIlswLTldKlwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1pbj1cIjBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXg9XCIxMDBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjcFRleHRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3JnXT1cIjEwMFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJjbXlrVGV4dD8uY1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChrZXl1cC5lbnRlcik9XCJvbkFjY2VwdCgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG5ld1ZhbHVlKT1cIm9uQ3lhbklucHV0KCRldmVudClcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY29sb3ItcGlja2VyX19pbnB1dC1maWVsZC1sYWJlbFwiPkM8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2xvci1waWNrZXJfX2lucHV0LWZpZWxkXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJudW1iZXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXR0ZXJuPVwiWzAtOV0qXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWluPVwiMFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heD1cIjEwMFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNwVGV4dFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcmddPVwiMTAwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cImNteWtUZXh0Py5tXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGtleXVwLmVudGVyKT1cIm9uQWNjZXB0KCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobmV3VmFsdWUpPVwib25NYWdlbnRhSW5wdXQoJGV2ZW50KVwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjb2xvci1waWNrZXJfX2lucHV0LWZpZWxkLWxhYmVsXCI+TTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbG9yLXBpY2tlcl9faW5wdXQtZmllbGRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cIm51bWJlclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhdHRlcm49XCJbMC05XSpcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtaW49XCIwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF4PVwiMTAwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3BUZXh0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyZ109XCIxMDBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdmFsdWVdPVwiY215a1RleHQ/LnlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoa2V5dXAuZW50ZXIpPVwib25BY2NlcHQoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChuZXdWYWx1ZSk9XCJvblllbGxvd0lucHV0KCRldmVudClcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY29sb3ItcGlja2VyX19pbnB1dC1maWVsZC1sYWJlbFwiPlk8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2xvci1waWNrZXJfX2lucHV0LWZpZWxkXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJudW1iZXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXR0ZXJuPVwiWzAtOV0qXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWluPVwiMFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heD1cIjEwMFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNwVGV4dFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcmddPVwiMTAwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cImNteWtUZXh0Py5rXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGtleXVwLmVudGVyKT1cIm9uQWNjZXB0KCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobmV3VmFsdWUpPVwib25CbGFja0lucHV0KCRldmVudClcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY29sb3ItcGlja2VyX19pbnB1dC1maWVsZC1sYWJlbFwiPks8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJjcEFscGhhQ2hhbm5lbCAhPSBhbHBoYUNoYW5uZWwuZGlzYWJsZWRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiY29sb3ItcGlja2VyX19pbnB1dC1maWVsZFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwibnVtYmVyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF0dGVybj1cIlswLTldKyhbXFwuLF1bMC05XXsxLDJ9KT9cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtaW49XCIwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF4PVwiMVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZXA9XCIwLjFcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjcFRleHRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3JnXT1cIjFcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdmFsdWVdPVwiY215a1RleHQ/LmNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoa2V5dXAuZW50ZXIpPVwib25BY2NlcHQoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChuZXdWYWx1ZSk9XCJvbkFscGhhSW5wdXQoJGV2ZW50KVwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjb2xvci1waWNrZXJfX2lucHV0LWZpZWxkLWxhYmVsXCI+QTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hEZWZhdWx0PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbG9yLXBpY2tlcl9faW5wdXQtZmllbGRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgY3BUZXh0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJoZXhUZXh0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGJsdXIpPVwib25IZXhJbnB1dChudWxsKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChrZXl1cC5lbnRlcik9XCJvbkFjY2VwdCgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG5ld1ZhbHVlKT1cIm9uSGV4SW5wdXQoJGV2ZW50KVwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjb2xvci1waWNrZXJfX2lucHV0LWZpZWxkLWxhYmVsXCI+SGV4PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiY3BBbHBoYUNoYW5uZWwgPT0gYWxwaGFDaGFubmVsLmZvcmNlZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJjb2xvci1waWNrZXJfX2lucHV0LWZpZWxkXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJudW1iZXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXR0ZXJuPVwiWzAtOV0rKFtcXC4sXVswLTldezEsMn0pP1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1pbj1cIjBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXg9XCIxXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RlcD1cIjAuMVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNwVGV4dFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcmddPVwiMVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJoZXhBbHBoYVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChrZXl1cC5lbnRlcik9XCJvbkFjY2VwdCgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG5ld1ZhbHVlKT1cIm9uQWxwaGFJbnB1dCgkZXZlbnQpXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNvbG9yLXBpY2tlcl9faW5wdXQtZmllbGQtbGFiZWxcIj5BPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgKm5nSWY9XCJjcE1vZGUgPT0gY29sb3JNb2RlSW50ZXJuYWwuY29sb3JcIlxuICAgICAgICAgICAgY2xhc3M9XCJjb2xvci1waWNrZXJfX2lucHV0LXR5cGVcIj5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY29sb3ItcGlja2VyX19pbnB1dC10eXBlLWFycm93XCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwib25Gb3JtYXRUb2dnbGUoMSlcIj48L3NwYW4+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNvbG9yLXBpY2tlcl9faW5wdXQtdHlwZS1hcnJvd1wiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uRm9ybWF0VG9nZ2xlKC0xKVwiPjwvc3Bhbj5cbiAgICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNwUHJlc2V0Q29sb3JzPy5sZW5ndGhcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbG9yLXBpY2tlcl9fc2VwYXJhdG9yXCI+PC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2xvci1waWNrZXJfX3ByZXNldFwiPlxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cImNwUHJlc2V0TGFiZWxcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiY29sb3ItcGlja2VyX19wcmVzZXQtbGFiZWxcIj5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY3BQcmVzZXRMYWJlbCA9PT0gdHJ1ZTsgZWxzZSBzdHJpbmdMYWJlbFwiXG4gICAgICAgICAgICAgICAgICAgIGkxOG49XCJAQG54dC1jb2xvci1waWNrZXIucHJlc2V0LWNvbG9yc1wiPlByZXNldCBjb2xvcnM8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI3N0cmluZ0xhYmVsPnt7IGNwUHJlc2V0TGFiZWwgfX08L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiY3BQcmVzZXRDb2xvcnM/Lmxlbmd0aFwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJjb2xvci1waWNrZXJfX3ByZXNldC1pdGVtc1wiPlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGNvbG9yIG9mIGNwUHJlc2V0Q29sb3JzXCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJzdHJpbmdUb1JnYmEoY29sb3IpIGFzIHJnYmFcIlxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJjb2xvci1waWNrZXJfX3ByZXNldC1pdGVtXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFt0aXRsZV09XCJjb2xvclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwic2V0Q29sb3JGcm9tU3RyaW5nKGNvbG9yKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbG9yLXBpY2tlcl9fcHJlc2V0LWl0ZW0tZmlsbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nU3R5bGVdPVwieyBcbiAgICAgICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmRDb2xvcjogcmdiYSB8fCAnJ1xuICAgICAgICAgICAgICAgICAgICB9XCI+PGJ1dHRvbiAqbmdJZj1cImNwQWRkQ29sb3JCdXR0b25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU9XCJSZW1vdmUgQ29sb3JcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpMThuLXRpdGxlPVwiQEBueHQtY29sb3ItcGlja2VyLmJ1dHRvbi5yZW1vdmUtY29sb3JcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImNvbG9yLXBpY2tlcl9fcmVtb3ZlLXNlbGVjdGVkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uUmVtb3ZlUHJlc2V0Q29sb3IoY29sb3IpXCI+PHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoPVwiMjRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0PVwiMjRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmlld0JveD1cIjAgMCAyNCAyNFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTE5IDYuNDFMMTcuNTkgNSAxMiAxMC41OSA2LjQxIDUgNSA2LjQxIDEwLjU5IDEyIDUgMTcuNTkgNi40MSAxOSAxMiAxMy40MSAxNy41OSAxOSAxOSAxNy41OSAxMy40MSAxMnpcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk0wIDBoMjR2MjRIMHpcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGw9XCJub25lXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+PC9idXR0b24+PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IGkgb2YgZmlsbCg1MClcIlxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImNvbG9yLXBpY2tlcl9fcHJlc2V0LWl0ZW1cIj48L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8ZGl2ICpuZ0lmPVwiY3BPS0J1dHRvbiB8fCBjcENhbmNlbEJ1dHRvblwiXG4gICAgICAgIGNsYXNzPVwiY29sb3ItcGlja2VyX19idXR0b25zXCI+XG4gICAgICAgIDxidXR0b24gKm5nSWY9XCJjcENhbmNlbEJ1dHRvblwiXG4gICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgIChjbGljayk9XCJvbkNhbmNlbCgkZXZlbnQpXCJcbiAgICAgICAgICAgIGkxOG49XCJAQG54dC1jb2xvci1waWNrZXIuYnV0dG9uLmNhbmNlbFwiPkNhbmNlbDwvYnV0dG9uPlxuICAgICAgICA8YnV0dG9uICpuZ0lmPVwiY3BPS0J1dHRvblwiXG4gICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgIChjbGljayk9XCJvbkFjY2VwdCgkZXZlbnQpXCJcbiAgICAgICAgICAgIGkxOG49XCJAQG54dC1jb2xvci1waWNrZXIuYnV0dG9uLm9rXCI+T0s8L2J1dHRvbj5cbiAgICA8L2Rpdj5cbjwvZGl2PlxuIl19
|