UNPKG

@hxui/angular

Version:

* * *

650 lines 69.5 kB
/** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,missingReturn,uselessCode} checked by tsc */ import { Input, forwardRef, Component, ViewChild, Output, EventEmitter, IterableDiffers, ViewEncapsulation, Renderer2 } from '@angular/core'; import { NG_VALUE_ACCESSOR, FormControl } from '@angular/forms'; import * as _ from 'lodash'; import { SelectizeConfig } from './selectize.config'; /** @type {?} */ export var SELECTIZE_VALUE_ACCESSOR = { provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(function () { return SelectizeComponent; }), multi: true }; var SelectizeComponent = /** @class */ (function () { function SelectizeComponent(_differs, renderer) { this._differs = _differs; this.renderer = renderer; this.enabled = true; this.value = []; this.isFocused = false; this.isValid = false; this.onBlur = new EventEmitter(false); this.onFocus = new EventEmitter(false); /** * Invoked anytime a key is pressed down on the selectize search field * @param e */ this.onKeydown = function (e) { console.log(e); /** @type {?} */ var TABKEY = 9; if (e.keyCode === TABKEY) { e.preventDefault(); e.stopImmediatePropagation(); e.stopPropagation(); } }; } /** * @return {?} */ SelectizeComponent.prototype.ngOnInit = /** * @return {?} */ function () { if (this.id && this.id.length > 0) { this.renderer.setAttribute(this.selectizeInput.nativeElement, 'id', this.id); } this.reset(); }; /** * @return {?} */ SelectizeComponent.prototype.reset = /** * @return {?} */ function () { this.selectize = $(this.selectizeInput.nativeElement).selectize(this.config)[0].selectize; this.selectize.on('change', this.onSelectizeValueChange.bind(this)); this.selectize.on('blur', this.onBlurEvent.bind(this)); this.selectize.on('focus', this.onFocusEvent.bind(this)); this.selectize.on('type', this.onSelectizeType.bind(this)); this.selectize.on('item_add', this.onSelectizeItemSelected.bind(this)); this.updatePlaceholder(); this.onEnabledStatusChange(); this.hasCaret(); }; /** * @return {?} */ SelectizeComponent.prototype.ngOnDestroy = /** * @return {?} */ function () { if (this.selectize) { this.selectize.off('change'); this.selectize.off('blur'); this.selectize.off('focus'); this.selectize.off('type'); } }; /** * Change detection for primitive types. */ /** * Change detection for primitive types. * @param {?} changes * @return {?} */ SelectizeComponent.prototype.ngOnChanges = /** * Change detection for primitive types. * @param {?} changes * @return {?} */ function (changes) { if (this.selectize) { if (changes.hasOwnProperty('placeholder') || changes.hasOwnProperty('hasOptionsPlaceholder') || changes.hasOwnProperty('noOptionsPlaceholder')) { this.updatePlaceholder(); } if (changes.hasOwnProperty('enabled')) { this.onEnabledStatusChange(); } } }; /** * Implementing deep check for option comparison * * FIXME -> Implement deep check to only compare against label and value fields. */ /** * Implementing deep check for option comparison * * FIXME -> Implement deep check to only compare against label and value fields. * @return {?} */ SelectizeComponent.prototype.ngDoCheck = /** * Implementing deep check for option comparison * * FIXME -> Implement deep check to only compare against label and value fields. * @return {?} */ function () { if (this._options_differ) { /** @type {?} */ var changes = this._options_differ.diff(this._options); if (changes) { this._applyOptionsChanges(changes); } } if (this._optgroups_differ) { /** @type {?} */ var changes = this._optgroups_differ.diff(this._optgroups); if (changes) { this._applyOptionGroupChanges(changes); } } }; /** * @param {?} changes * @return {?} */ SelectizeComponent.prototype._applyOptionsChanges = /** * @param {?} changes * @return {?} */ function (changes) { var _this = this; changes.forEachRemovedItem(function (record) { _this.onSelectizeOptionRemove(record.item); }); changes.forEachAddedItem(function (record) { _this.onSelectizeOptionAdd(record.item); }); this.updatePlaceholder(); this.evalHasError(); }; /** * @param {?} changes * @return {?} */ SelectizeComponent.prototype._applyOptionGroupChanges = /** * @param {?} changes * @return {?} */ function (changes) { var _this = this; changes.forEachRemovedItem(function (record) { _this.onSelectizeOptGroupRemove(record.item); }); changes.forEachAddedItem(function (record) { _this.onSelectizeOptGroupAdd(record.item); }); this.updatePlaceholder(); this.evalHasError(); }; /** * @return {?} */ SelectizeComponent.prototype.clearhighlight = /** * @return {?} */ function () { // remove highlight to help selectize bug // https://github.com/selectize/selectize.js/issues/1141 this.selectize.$dropdown_content.removeHighlight(); }; /** * @return {?} */ SelectizeComponent.prototype.onBlurEvent = /** * @return {?} */ function () { if (this.formControl) { this.formControl.markAsTouched(); } this.onBlur.emit(); this.evalHasError(); this.isFocused = false; this.isValid = (this.selectize.getValue().length > 0); }; /** * @return {?} */ SelectizeComponent.prototype.onFocusEvent = /** * @return {?} */ function () { if (this.formControl) { this.formControl.markAsTouched(); } this.onFocus.emit(); this.evalHasError(); this.isFocused = true; }; /** * @param {?} optgroup * @return {?} */ SelectizeComponent.prototype.onSelectizeOptGroupAdd = /** * @param {?} optgroup * @return {?} */ function (optgroup) { this.selectize.addOptionGroup(optgroup[this.getOptgroupField()], optgroup); }; /** * @param {?} optgroup * @return {?} */ SelectizeComponent.prototype.onSelectizeOptGroupRemove = /** * @param {?} optgroup * @return {?} */ function (optgroup) { this.selectize.removeOptionGroup(optgroup[this.getOptgroupField()]); }; /** * Refresh selected values when options change. */ /** * Refresh selected values when options change. * @param {?} option * @return {?} */ SelectizeComponent.prototype.onSelectizeOptionAdd = /** * Refresh selected values when options change. * @param {?} option * @return {?} */ function (option) { this.selectize.addOption(_.cloneDeep(option)); /** @type {?} */ var valueField = this.config.valueField; if (this.value) { /** @type {?} */ var items = typeof this.value === 'string' || typeof this.value === 'number' ? [this.value] : this.value; if (items && items instanceof Array && items.find(function (value) { return value === option[valueField]; })) { this.selectize.addItem(option[valueField], true); } } }; /** * @param {?} option * @return {?} */ SelectizeComponent.prototype.onSelectizeOptionRemove = /** * @param {?} option * @return {?} */ function (option) { this.selectize.removeOption(option[this.config.valueField]); }; /** * @return {?} */ SelectizeComponent.prototype.evalHasError = /** * @return {?} */ function () { /** @type {?} */ var parent = $(this.selectize.$control).parent(); if (this.formControl) { if (this.formControl.touched && this.formControl.invalid) { parent.addClass(this.errorClass || 'has-error'); } else if (parent.hasClass('has-error')) { parent.removeClass(this.errorClass || 'has-error'); } } }; /** * @return {?} */ SelectizeComponent.prototype.updateLabel = /** * @return {?} */ function () { }; /** * Update the current placeholder based on the given input parameter. */ /** * Update the current placeholder based on the given input parameter. * @return {?} */ SelectizeComponent.prototype.updatePlaceholder = /** * Update the current placeholder based on the given input parameter. * @return {?} */ function () { if (this.selectize.items.length === 0 && this.selectize.settings.placeholder !== this.getPlaceholder()) { this.selectize.settings.placeholder = this.getPlaceholder(); this.selectize.updatePlaceholder(); this.selectize.showInput(); // Without this, when options are cleared placeholder only appears after focus. } }; /** * Called when a change is detected in the 'enabled' input field. * Sets the selectize state based on the new value. */ /** * Called when a change is detected in the 'enabled' input field. * Sets the selectize state based on the new value. * @return {?} */ SelectizeComponent.prototype.onEnabledStatusChange = /** * Called when a change is detected in the 'enabled' input field. * Sets the selectize state based on the new value. * @return {?} */ function () { this.enabled ? this.selectize.enable() : this.selectize.disable(); }; /** * @return {?} */ SelectizeComponent.prototype.hasCaret = /** * @return {?} */ function () { if (this.config.hasCaret) { /** @type {?} */ var parent_1 = $(this.selectize.$control).parent(); parent_1.addClass('hasCaret'); } }; /** * Dispatches change event when a value change is detected. * @param $event */ /** * Dispatches change event when a value change is detected. * @param {?} $event * @return {?} */ SelectizeComponent.prototype.onSelectizeValueChange = /** * Dispatches change event when a value change is detected. * @param {?} $event * @return {?} */ function ($event) { var _this = this; // In some cases this gets called before registerOnChange. if (this.onChangeCallback) { // Map selectize's value collection back to original ISelectizeItem object /** @type {?} */ var data = this.selectize.items.map(function (v) { return _this.selectize.options[v]; }); this.onChangeCallback(data); } }; /** * Invoked when the user types while filtering options. * @param str */ /** * Invoked when the user types while filtering options. * @param {?} str * @return {?} */ SelectizeComponent.prototype.onSelectizeType = /** * Invoked when the user types while filtering options. * @param {?} str * @return {?} */ function (str) { if (str.length === 0) { this.clearhighlight(); this.selectize.close(); } }; /** * @param {?} $event * @return {?} */ SelectizeComponent.prototype.onSelectizeItemSelected = /** * @param {?} $event * @return {?} */ function ($event) { this.clearhighlight(); if (this.config.closeAfterSelect) { this.selectize.close(); } }; /** * Returns the applicable placeholder. */ /** * Returns the applicable placeholder. * @return {?} */ SelectizeComponent.prototype.getPlaceholder = /** * Returns the applicable placeholder. * @return {?} */ function () { if (this.hasOptionsPlaceholder) { if (this.options && this.options.length > 0) { return this.hasOptionsPlaceholder; } } if (this.noOptionsPlaceholder) { if (!this.options || this.options.length === 0) { return this.noOptionsPlaceholder; } } return this.placeholder; }; /** * Implementation from ControlValueAccessor * * @param obj */ /** * Implementation from ControlValueAccessor * * @param {?} obj * @return {?} */ SelectizeComponent.prototype.writeValue = /** * Implementation from ControlValueAccessor * * @param {?} obj * @return {?} */ function (obj) { var _this = this; if (obj === this.value) { return; } this.value = obj; if (!obj || obj.length === 0) { this.selectize.setValue(''); return; } /** @type {?} */ var stringValue = obj.map(function (v) { if (!Object.keys(_this.selectize.options).some(function (x) { return x === v.value; })) { _this.selectize.addOption(v); } return v.value; }); this.selectize.setValue(stringValue); this.evalHasError(); this.isValid = (this.selectize.getValue().length > 0); }; /** * Implementation from ControlValueAccessor, callback for (ngModelChange) * @param fn */ /** * Implementation from ControlValueAccessor, callback for (ngModelChange) * @param {?} fn * @return {?} */ SelectizeComponent.prototype.registerOnChange = /** * Implementation from ControlValueAccessor, callback for (ngModelChange) * @param {?} fn * @return {?} */ function (fn) { this.onChangeCallback = fn; }; /** * Implementation from ControlValueAccessor * @param fn */ /** * Implementation from ControlValueAccessor * @param {?} fn * @return {?} */ SelectizeComponent.prototype.registerOnTouched = /** * Implementation from ControlValueAccessor * @param {?} fn * @return {?} */ function (fn) { this.onTouchedCallback = fn; }; /** * @return {?} */ SelectizeComponent.prototype.getOptgroupField = /** * @return {?} */ function () { return this.config['optgroupField'] ? this.config['optgroupField'] : 'optgroup'; }; Object.defineProperty(SelectizeComponent.prototype, "options", { get: /** * @return {?} */ function () { return this._options; }, set: /** * @param {?} value * @return {?} */ function (value) { this._options = value; if (!this._options_differ && value) { this._options_differ = this._differs.find(value).create(); } }, enumerable: true, configurable: true }); Object.defineProperty(SelectizeComponent.prototype, "optgroups", { get: /** * @return {?} */ function () { return this._optgroups; }, set: /** * @param {?} value * @return {?} */ function (value) { this._optgroups = value; if (!this._optgroups_differ && value) { this._optgroups_differ = this._differs.find(value).create(); } }, enumerable: true, configurable: true }); SelectizeComponent.decorators = [ { type: Component, args: [{ selector: 'hxa-selectize', template: "<div class=\"hx-input-control\" [ngClass]=\"config.inputControlClasses\" [class.is-focused]=\"isFocused\" [class.is-valid]=\"isValid\">\n <select #selectizeInput></select>\n <label for=\"{{id}}\" class=\"hx-label\">{{config.label}} <sup *ngIf=\"config.mandatory\">*</sup></label>\n <div class=\"hx-help\">{{config.help}}</div>\n </div>", providers: [SELECTIZE_VALUE_ACCESSOR], encapsulation: ViewEncapsulation.None, styles: [".selectize-control{position:relative}.selectize-dropdown,.selectize-input,.selectize-input input{color:#2a2c2d;font-family:inherit;font-size:.92rem;line-height:1.5;-webkit-font-smoothing:inherit}.selectize-control.single .selectize-input.input-active,.selectize-input{background:0 0;cursor:text;display:inline-block}.selectize-input{border:1px solid rgba(0,0,0,.2);padding:8px 0;display:inline-block;width:100%;overflow:hidden;position:relative;z-index:1;box-sizing:border-box;box-shadow:none;border-radius:0;border-width:0 0 1px}.selectize-control.multi .selectize-input.has-items{padding:6px 0 3px}.selectize-control.multi.hasCaret .selectize-input.has-items{padding-right:1rem}.selectize-input.full{background-color:transparent}.selectize-input.disabled,.selectize-input.disabled *{cursor:default!important}.selectize-input.focus{box-shadow:none}.selectize-input.dropdown-active{border-radius:0}.selectize-input>*{vertical-align:baseline;display:inline-block;zoom:1}.selectize-control.multi .selectize-input>div{cursor:pointer;margin:4px;padding:2px 6px;background:rgba(0,0,0,.05);color:#2a2c2d;border:0 solid transparent;border-radius:290486px;font-size:.75rem;justify-content:center;line-height:1.5;white-space:nowrap}.selectize-control.multi .selectize-input>div.active{background:#e8e8e8;color:#2a2c2d;border:0 solid #cacaca}.selectize-control.multi .selectize-input.disabled>div,.selectize-control.multi .selectize-input.disabled>div.active{color:#787878;background:rgba(77,77,77,.05);border:0 solid rgba(77,77,77,0)}.selectize-input>input{display:inline-block!important;padding:0!important;min-height:0!important;max-height:none!important;max-width:100%!important;margin:0 2px 0 0!important;text-indent:0!important;border:0!important;background:0 0!important;line-height:inherit!important;-webkit-user-select:auto!important}.selectize-input>input::-ms-clear{display:none}.selectize-input>input:focus{outline:0!important}.selectize-input::after{content:' ';display:block;clear:left}.selectize-input.dropdown-active::before{content:' ';display:block;position:absolute;background:#f0f0f0;height:1px;bottom:0;left:0;right:0}.hx-select-control:after{display:none}.selectize-dropdown{position:absolute;z-index:10;border:transparent;background:#fff;margin:1px 0 0;border-top:0;box-sizing:border-box;box-shadow:0 6px 12px rgba(0,0,0,.145);border-radius:0}.selectize-dropdown [data-selectable]{cursor:pointer;overflow:hidden}.selectize-dropdown [data-selectable] .highlight{background:rgba(35,49,43,.23);border-radius:1px;font-weight:700}.selectize-dropdown .optgroup-header,.selectize-dropdown [data-selectable]{padding:5px 8px}.selectize-dropdown .optgroup:first-child .optgroup-header{border-top:0}.selectize-dropdown .optgroup-header{color:#2a2c2d;background:#fff;cursor:default}.selectize-dropdown .active{background-color:#41b987;color:#fff}.selectize-dropdown .active.create{color:#fff}.selectize-dropdown .create{color:rgba(42,44,45,.5)}.selectize-dropdown-content{overflow-y:auto;overflow-x:hidden;max-height:200px;-webkit-overflow-scrolling:touch}.selectize-control.hasCaret .selectize-input,.selectize-control.hasCaret .selectize-input input,.selectize-control.single .selectize-input,.selectize-control.single .selectize-input input{cursor:pointer}.selectize-control.hasCaret .selectize-input.input-active,.selectize-control.hasCaret .selectize-input.input-active input,.selectize-control.single .selectize-input.input-active,.selectize-control.single .selectize-input.input-active input{cursor:text}.selectize-control.hasCaret .selectize-input:after,.selectize-control.single .selectize-input:after{content:' ';display:block;position:absolute;top:50%;right:15px;margin-top:-3px;width:0;height:0;border-style:solid;border-width:5px 5px 0;border-color:grey transparent transparent}.selectize-control.hasCaret .selectize-input.dropdown-active:after,.selectize-control.single .selectize-input.dropdown-active:after{margin-top:-4px;border-width:0 5px 5px;border-color:transparent transparent grey}.selectize-control.multi.hasCaret .selectize-input.has-items:after{top:initial;bottom:1.3rem}.selectize-control.rtl.hasCaret .selectize-input:after,.selectize-control.rtl.single .selectize-input:after{left:15px;right:auto}.selectize-control.rtl .selectize-input>input{margin:0 4px 0 -2px!important}.selectize-control .selectize-input.disabled{opacity:.5;background-color:#fafafa}hxa-selectize .hx-input-control{padding-top:.21rem}hxa-selectize .hx-input-control .hx-label{position:absolute;top:.7rem;margin:0;font-weight:400;color:#aeadad;left:0;transition:.3s;z-index:0}hxa-selectize .hx-input-control .hx-label sup{top:-.2rem;color:#b81e4f;font-size:.7rem;transition:.3s}hxa-selectize .hx-input-control .hx-label+.hx-help{font-size:.75rem;margin-top:-.09rem;color:#63605f;transition:.3s;opacity:0;position:relative}hxa-selectize .hx-input-control .hx-label+.hx-help:after,hxa-selectize .hx-input-control .hx-label+.hx-help:before{content:'';position:absolute;top:-.4rem;width:0%;height:3px;background-color:#41b987;transition:.3s;z-index:1}hxa-selectize .hx-input-control .hx-label+.hx-help:before{left:50%}hxa-selectize .hx-input-control .hx-label+.hx-help:after{right:50%}hxa-selectize .hx-input-control.is-focused .hx-label{color:#41b987}hxa-selectize .hx-input-control.is-focused .hx-help{opacity:1}hxa-selectize .hx-input-control.is-focused .hx-help:after,hxa-selectize .hx-input-control.is-focused .hx-help:before{width:50%}hxa-selectize .hx-input-control.is-focused .hx-label,hxa-selectize .hx-input-control.is-valid .hx-label{top:-.5rem;font-size:.75rem}hxa-selectize .hx-input-control.is-focused .hx-label sup,hxa-selectize .hx-input-control.is-valid .hx-label sup{top:-.3rem;font-size:.4rem}hxa-selectize .selectize-control:focus{outline:0}hxa-selectize .selectize-control:-webkit-autofill~.hx-label,hxa-selectize .selectize-control:focus~.hx-label,hxa-selectize .selectize-control:valid~.hx-label{top:-.5rem;font-size:.75rem}hxa-selectize .selectize-control:-webkit-autofill~.hx-label sup,hxa-selectize .selectize-control:focus~.hx-label sup,hxa-selectize .selectize-control:valid~.hx-label sup{top:-.3rem;font-size:.4rem}hxa-selectize .selectize-control:-webkit-autofill~.hx-label,hxa-selectize .selectize-control:focus~.hx-label{color:#41b987}hxa-selectize .selectize-control:-webkit-autofill~.hx-label,hxa-selectize .selectize-control:focus~.hx-help{opacity:1}hxa-selectize .selectize-control:-webkit-autofill~.hx-label:after,hxa-selectize .selectize-control:-webkit-autofill~.hx-label:before,hxa-selectize .selectize-control:focus~.hx-help:after,hxa-selectize .selectize-control:focus~.hx-help:before{width:50%}hxa-selectize .selectize-control.is-disabled,hxa-selectize .selectize-control[disabled]{border-color:#aeadad;color:#aeadad;cursor:not-allowed}hxa-selectize .selectize-control.is-disabled~.hx-label,hxa-selectize .selectize-control[disabled]~.hx-label{top:-.5rem;font-size:.75rem;color:#aeadad;cursor:not-allowed}hxa-selectize .selectize-control.is-disabled~.hx-label sup,hxa-selectize .selectize-control[disabled]~.hx-label sup{font-size:.4rem}hxa-selectize.ng-invalid.ng-dirty .hx-label{color:#b81e4f}hxa-selectize.ng-invalid.ng-dirty .hx-label+.hx-help{position:relative;opacity:1;color:#b81e4f}hxa-selectize.ng-invalid.ng-dirty .hx-label+.hx-help:after,hxa-selectize.ng-invalid.ng-dirty .hx-label+.hx-help:before{width:50%;background-color:#b81e4f}.selectize-control.plugin-remove_button [data-value]{position:relative;padding-right:.7rem!important}.selectize-control.plugin-remove_button [data-value].is-medium{padding-right:1rem!important}.selectize-control.plugin-remove_button [data-value] .hx-delete{margin-left:-.2rem;height:16px;width:16px;max-height:16px;max-width:16px;min-height:16px;min-width:16px}.selectize-control.plugin-remove_button [data-value].is-medium .hx-delete{margin-left:-.5rem}.selectize-control.plugin-remove_button [data-value].is-large .hx-delete{margin-left:-.2rem;height:20px;width:20px;max-height:20px;max-width:20px;min-height:20px;min-width:20px}.selectize-control.plugin-remove_button .disabled [data-value] .hx-remove:hover{background:0 0}.selectize-control.plugin-remove_button .disabled [data-value] .hx-remove{border-left-color:rgba(77,77,77,0)}.selectize-control.plugin-remove_button .remove-single{position:absolute;right:28px;top:6px;font-size:23px}"] },] }, ]; /** @nocollapse */ SelectizeComponent.ctorParameters = function () { return [ { type: IterableDiffers }, { type: Renderer2 } ]; }; SelectizeComponent.propDecorators = { config: [{ type: Input }], id: [{ type: Input }], placeholder: [{ type: Input }], hasOptionsPlaceholder: [{ type: Input }], noOptionsPlaceholder: [{ type: Input }], enabled: [{ type: Input }], value: [{ type: Input }], formControl: [{ type: Input }], errorClass: [{ type: Input }], onBlur: [{ type: Output }], onFocus: [{ type: Output }], selectizeInput: [{ type: ViewChild, args: ['selectizeInput',] }], options: [{ type: Input }], optgroups: [{ type: Input }] }; return SelectizeComponent; }()); export { SelectizeComponent }; if (false) { /** @type {?} */ SelectizeComponent.prototype._options; /** @type {?} */ SelectizeComponent.prototype._options_differ; /** @type {?} */ SelectizeComponent.prototype._optgroups; /** @type {?} */ SelectizeComponent.prototype._optgroups_differ; /** @type {?} */ SelectizeComponent.prototype.config; /** @type {?} */ SelectizeComponent.prototype.id; /** @type {?} */ SelectizeComponent.prototype.placeholder; /** @type {?} */ SelectizeComponent.prototype.hasOptionsPlaceholder; /** @type {?} */ SelectizeComponent.prototype.noOptionsPlaceholder; /** @type {?} */ SelectizeComponent.prototype.enabled; /** @type {?} */ SelectizeComponent.prototype.value; /** @type {?} */ SelectizeComponent.prototype.formControl; /** @type {?} */ SelectizeComponent.prototype.errorClass; /** @type {?} */ SelectizeComponent.prototype.isFocused; /** @type {?} */ SelectizeComponent.prototype.isValid; /** @type {?} */ SelectizeComponent.prototype.onBlur; /** @type {?} */ SelectizeComponent.prototype.onFocus; /** @type {?} */ SelectizeComponent.prototype.selectizeInput; /** @type {?} */ SelectizeComponent.prototype.selectize; /** @type {?} */ SelectizeComponent.prototype.onTouchedCallback; /** @type {?} */ SelectizeComponent.prototype.onChangeCallback; /** * Invoked anytime a key is pressed down on the selectize search field * \@param e * @type {?} */ SelectizeComponent.prototype.onKeydown; /** @type {?} */ SelectizeComponent.prototype._differs; /** @type {?} */ SelectizeComponent.prototype.renderer; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VsZWN0aXplLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0BoeHVpL2FuZ3VsYXIvIiwic291cmNlcyI6WyJsaWIvc2VsZWN0aXplL3NlbGVjdGl6ZS5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUFBLE9BQU8sRUFDTCxLQUFLLEVBS0wsVUFBVSxFQUNWLFNBQVMsRUFDVCxTQUFTLEVBQ1QsTUFBTSxFQUNOLFlBQVksRUFDWixlQUFlLEVBSWYsaUJBQWlCLEVBQ2pCLFNBQVMsRUFFVixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQ0wsaUJBQWlCLEVBRWpCLFdBQVcsRUFDWixNQUFNLGdCQUFnQixDQUFDO0FBRXhCLE9BQU8sS0FBSyxDQUFDLE1BQU0sUUFBUSxDQUFDO0FBQzVCLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQzs7QUFLckQsTUFBTSxLQUFPLHdCQUF3QixHQUFRO0lBQzNDLE9BQU8sRUFBRSxpQkFBaUI7SUFDMUIsV0FBVyxFQUFFLFVBQVUsQ0FBQyxjQUFNLE9BQUEsa0JBQWtCLEVBQWxCLENBQWtCLENBQUM7SUFDakQsS0FBSyxFQUFFLElBQUk7Q0FDWjtBQUVEO0lBeUNFLDRCQUFvQixRQUF5QixFQUFVLFFBQW1CO1FBQXRELGFBQVEsR0FBUixRQUFRLENBQWlCO1FBQVUsYUFBUSxHQUFSLFFBQVEsQ0FBVztRQWxCakUsWUFBTyxHQUFHLElBQUksQ0FBQztRQUNmLFVBQUssR0FBcUIsRUFBRSxDQUFDO1FBR3RDLGNBQVMsR0FBRyxLQUFLLENBQUM7UUFDbEIsWUFBTyxHQUFHLEtBQUssQ0FBQztRQUVOLFdBQU0sR0FBdUIsSUFBSSxZQUFZLENBQU8sS0FBSyxDQUFDLENBQUM7UUFDM0QsWUFBTyxHQUF1QixJQUFJLFlBQVksQ0FBTyxLQUFLLENBQUMsQ0FBQzs7Ozs7UUF3UHRFLGNBQVMsR0FBRyxVQUFBLENBQUM7WUFDWCxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDOztnQkFDVCxNQUFNLEdBQUcsQ0FBQztZQUNoQixJQUFJLENBQUMsQ0FBQyxPQUFPLEtBQUssTUFBTSxFQUFFO2dCQUN4QixDQUFDLENBQUMsY0FBYyxFQUFFLENBQUM7Z0JBQ25CLENBQUMsQ0FBQyx3QkFBd0IsRUFBRSxDQUFDO2dCQUM3QixDQUFDLENBQUMsZUFBZSxFQUFFLENBQUM7YUFDckI7UUFDSCxDQUFDLENBQUE7SUF0UDRFLENBQUM7Ozs7SUFFOUUscUNBQVE7OztJQUFSO1FBQ0UsSUFBSSxJQUFJLENBQUMsRUFBRSxJQUFJLElBQUksQ0FBQyxFQUFFLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtZQUNqQyxJQUFJLENBQUMsUUFBUSxDQUFDLFlBQVksQ0FDeEIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxhQUFhLEVBQ2pDLElBQUksRUFDSixJQUFJLENBQUMsRUFBRSxDQUNSLENBQUM7U0FDSDtRQUNELElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUNmLENBQUM7Ozs7SUFFRCxrQ0FBSzs7O0lBQUw7UUFDRSxJQUFJLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLGFBQWEsQ0FBQyxDQUFDLFNBQVMsQ0FDN0QsSUFBSSxDQUFDLE1BQU0sQ0FDWixDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztRQUNmLElBQUksQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsc0JBQXNCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7UUFDcEUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7UUFDdkQsSUFBSSxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7UUFDekQsSUFBSSxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7UUFDM0QsSUFBSSxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUN2RSxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztRQUN6QixJQUFJLENBQUMscUJBQXFCLEVBQUUsQ0FBQztRQUM3QixJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDbEIsQ0FBQzs7OztJQUVELHdDQUFXOzs7SUFBWDtRQUNFLElBQUksSUFBSSxDQUFDLFNBQVMsRUFBRTtZQUNsQixJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUM3QixJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUMzQixJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUM1QixJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQztTQUM1QjtJQUNILENBQUM7SUFFRDs7T0FFRzs7Ozs7O0lBQ0gsd0NBQVc7Ozs7O0lBQVgsVUFBWSxPQUFzQjtRQUNoQyxJQUFJLElBQUksQ0FBQyxTQUFTLEVBQUU7WUFDbEIsSUFDRSxPQUFPLENBQUMsY0FBYyxDQUFDLGFBQWEsQ0FBQztnQkFDckMsT0FBTyxDQUFDLGNBQWMsQ0FBQyx1QkFBdUIsQ0FBQztnQkFDL0MsT0FBTyxDQUFDLGNBQWMsQ0FBQyxzQkFBc0IsQ0FBQyxFQUM5QztnQkFDQSxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQzthQUMxQjtZQUNELElBQUksT0FBTyxDQUFDLGNBQWMsQ0FBQyxTQUFTLENBQUMsRUFBRTtnQkFDckMsSUFBSSxDQUFDLHFCQUFxQixFQUFFLENBQUM7YUFDOUI7U0FDRjtJQUNILENBQUM7SUFFRDs7OztPQUlHOzs7Ozs7O0lBQ0gsc0NBQVM7Ozs7OztJQUFUO1FBQ0UsSUFBSSxJQUFJLENBQUMsZUFBZSxFQUFFOztnQkFDbEIsT0FBTyxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUM7WUFDeEQsSUFBSSxPQUFPLEVBQUU7Z0JBQ1gsSUFBSSxDQUFDLG9CQUFvQixDQUFDLE9BQU8sQ0FBQyxDQUFDO2FBQ3BDO1NBQ0Y7UUFDRCxJQUFJLElBQUksQ0FBQyxpQkFBaUIsRUFBRTs7Z0JBQ3BCLE9BQU8sR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUM7WUFDNUQsSUFBSSxPQUFPLEVBQUU7Z0JBQ1gsSUFBSSxDQUFDLHdCQUF3QixDQUFDLE9BQU8sQ0FBQyxDQUFDO2FBQ3hDO1NBQ0Y7SUFDSCxDQUFDOzs7OztJQUVPLGlEQUFvQjs7OztJQUE1QixVQUE2QixPQUE2QjtRQUExRCxpQkFTQztRQVJDLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQyxVQUFDLE1BQWlDO1lBQzNELEtBQUksQ0FBQyx1QkFBdUIsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDNUMsQ0FBQyxDQUFDLENBQUM7UUFDSCxPQUFPLENBQUMsZ0JBQWdCLENBQUMsVUFBQyxNQUFpQztZQUN6RCxLQUFJLENBQUMsb0JBQW9CLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3pDLENBQUMsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7UUFDekIsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO0lBQ3RCLENBQUM7Ozs7O0lBRU8scURBQXdCOzs7O0lBQWhDLFVBQWlDLE9BQVk7UUFBN0MsaUJBU0M7UUFSQyxPQUFPLENBQUMsa0JBQWtCLENBQUMsVUFBQyxNQUFpQztZQUMzRCxLQUFJLENBQUMseUJBQXlCLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzlDLENBQUMsQ0FBQyxDQUFDO1FBQ0gsT0FBTyxDQUFDLGdCQUFnQixDQUFDLFVBQUMsTUFBaUM7WUFDekQsS0FBSSxDQUFDLHNCQUFzQixDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUMzQyxDQUFDLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1FBQ3pCLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUN0QixDQUFDOzs7O0lBRU8sMkNBQWM7OztJQUF0QjtRQUNFLHlDQUF5QztRQUN6Qyx3REFBd0Q7UUFDeEQsSUFBSSxDQUFDLFNBQVMsQ0FBQyxpQkFBaUIsQ0FBQyxlQUFlLEVBQUUsQ0FBQztJQUNyRCxDQUFDOzs7O0lBRUQsd0NBQVc7OztJQUFYO1FBQ0UsSUFBSSxJQUFJLENBQUMsV0FBVyxFQUFFO1lBQ3BCLElBQUksQ0FBQyxXQUFXLENBQUMsYUFBYSxFQUFFLENBQUM7U0FDbEM7UUFDRCxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ25CLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUNwQixJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQztRQUN2QixJQUFJLENBQUMsT0FBTyxHQUFHLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDeEQsQ0FBQzs7OztJQUVELHlDQUFZOzs7SUFBWjtRQUNFLElBQUksSUFBSSxDQUFDLFdBQVcsRUFBRTtZQUNwQixJQUFJLENBQUMsV0FBVyxDQUFDLGFBQWEsRUFBRSxDQUFDO1NBQ2xDO1FBQ0QsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUNwQixJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDcEIsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7SUFDeEIsQ0FBQzs7Ozs7SUFFRCxtREFBc0I7Ozs7SUFBdEIsVUFBdUIsUUFBYTtRQUNsQyxJQUFJLENBQUMsU0FBUyxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUMsRUFBRSxRQUFRLENBQUMsQ0FBQztJQUM3RSxDQUFDOzs7OztJQUVELHNEQUF5Qjs7OztJQUF6QixVQUEwQixRQUFhO1FBQ3JDLElBQUksQ0FBQyxTQUFTLENBQUMsaUJBQWlCLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUN0RSxDQUFDO0lBRUQ7O09BRUc7Ozs7OztJQUNILGlEQUFvQjs7Ozs7SUFBcEIsVUFBcUIsTUFBVztRQUM5QixJQUFJLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7O1lBQ3hDLFVBQVUsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLFVBQVU7UUFDekMsSUFBSSxJQUFJLENBQUMsS0FBSyxFQUFFOztnQkFDUixLQUFLLEdBQ1QsT0FBTyxJQUFJLENBQUMsS0FBSyxLQUFLLFFBQVEsSUFBSSxPQUFPLElBQUksQ0FBQyxLQUFLLEtBQUssUUFBUTtnQkFDOUQsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQztnQkFDZCxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUs7WUFDaEIsSUFDRSxLQUFLO2dCQUNMLEtBQUssWUFBWSxLQUFLO2dCQUN0QixLQUFLLENBQUMsSUFBSSxDQUFDLFVBQUEsS0FBSyxJQUFJLE9BQUEsS0FBSyxLQUFLLE1BQU0sQ0FBQyxVQUFVLENBQUMsRUFBNUIsQ0FBNEIsQ0FBQyxFQUNqRDtnQkFDQSxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7YUFDbEQ7U0FDRjtJQUNILENBQUM7Ozs7O0lBRUQsb0RBQXVCOzs7O0lBQXZCLFVBQXdCLE1BQVc7UUFDakMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQztJQUM5RCxDQUFDOzs7O0lBRUQseUNBQVk7OztJQUFaOztZQUNRLE1BQU0sR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxNQUFNLEVBQUU7UUFDbEQsSUFBSSxJQUFJLENBQUMsV0FBVyxFQUFFO1lBQ3BCLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLEVBQUU7Z0JBQ3hELE1BQU0sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFVBQVUsSUFBSSxXQUFXLENBQUMsQ0FBQzthQUNqRDtpQkFBTSxJQUFJLE1BQU0sQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLEVBQUU7Z0JBQ3ZDLE1BQU0sQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLFVBQVUsSUFBSSxXQUFXLENBQUMsQ0FBQzthQUNwRDtTQUNGO0lBQ0gsQ0FBQzs7OztJQUdELHdDQUFXOzs7SUFBWDtJQUNBLENBQUM7SUFFRDs7T0FFRzs7Ozs7SUFDSCw4Q0FBaUI7Ozs7SUFBakI7UUFDRSxJQUNFLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLE1BQU0sS0FBSyxDQUFDO1lBQ2pDLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLFdBQVcsS0FBSyxJQUFJLENBQUMsY0FBYyxFQUFFLEVBQzdEO1lBQ0EsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztZQUM1RCxJQUFJLENBQUMsU0FBUyxDQUFDLGlCQUFpQixFQUFFLENBQUM7WUFDbkMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDLCtFQUErRTtTQUM1RztJQUNILENBQUM7SUFFRDs7O09BR0c7Ozs7OztJQUNILGtEQUFxQjs7Ozs7SUFBckI7UUFDRSxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sRUFBRSxDQUFDO0lBQ3BFLENBQUM7Ozs7SUFHRCxxQ0FBUTs7O0lBQVI7UUFDRSxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxFQUFFOztnQkFDbEIsUUFBTSxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxDQUFDLE1BQU0sRUFBRTtZQUNsRCxRQUFNLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1NBQzdCO0lBQ0gsQ0FBQztJQUVEOzs7T0FHRzs7Ozs7O0lBQ0gsbURBQXNCOzs7OztJQUF0QixVQUF1QixNQUFXO1FBQWxDLGlCQVVDO1FBVEMsMERBQTBEO1FBQzFELElBQUksSUFBSSxDQUFDLGdCQUFnQixFQUFFOzs7Z0JBRW5CLElBQUksR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsVUFBQSxDQUFDO2dCQUNyQyxPQUFPLEtBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ25DLENBQUMsQ0FBQztZQUVGLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsQ0FBQztTQUM3QjtJQUNILENBQUM7SUFFRDs7O09BR0c7Ozs7OztJQUNILDRDQUFlOzs7OztJQUFmLFVBQWdCLEdBQVc7UUFDekIsSUFBSSxHQUFHLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTtZQUNwQixJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7WUFDdEIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLEVBQUUsQ0FBQztTQUN4QjtJQUNILENBQUM7Ozs7O0lBRUQsb0RBQXVCOzs7O0lBQXZCLFVBQXdCLE1BQVc7UUFDakMsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBRXRCLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxnQkFBZ0IsRUFBRTtZQUNoQyxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBRSxDQUFDO1NBQ3hCO0lBQ0gsQ0FBQztJQWdCRDs7T0FFRzs7Ozs7SUFDSCwyQ0FBYzs7OztJQUFkO1FBQ0UsSUFBSSxJQUFJLENBQUMscUJBQXFCLEVBQUU7WUFDOUIsSUFBSSxJQUFJLENBQUMsT0FBTyxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtnQkFDM0MsT0FBTyxJQUFJLENBQUMscUJBQXFCLENBQUM7YUFDbkM7U0FDRjtRQUNELElBQUksSUFBSSxDQUFDLG9CQUFvQixFQUFFO1lBQzdCLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTtnQkFDOUMsT0FBTyxJQUFJLENBQUMsb0JBQW9CLENBQUM7YUFDbEM7U0FDRjtRQUNELE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQztJQUMxQixDQUFDO0lBRUQ7Ozs7T0FJRzs7Ozs7OztJQUNILHVDQUFVOzs7Ozs7SUFBVixVQUFXLEdBQXFCO1FBQWhDLGlCQXNCQztRQXJCQyxJQUFJLEdBQUcsS0FBSyxJQUFJLENBQUMsS0FBSyxFQUFFO1lBQ3RCLE9BQU87U0FDUjtRQUVELElBQUksQ0FBQyxLQUFLLEdBQUcsR0FBRyxDQUFDO1FBRWpCLElBQUksQ0FBQyxHQUFHLElBQUksR0FBRyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7WUFDNUIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDNUIsT0FBTztTQUNSOztZQUVLLFdBQVcsR0FBRyxHQUFHLENBQUMsR0FBRyxDQUFDLFVBQUEsQ0FBQztZQUMzQixJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFBLENBQUMsSUFBSSxPQUFBLENBQUMsS0FBSyxDQUFDLENBQUMsS0FBSyxFQUFiLENBQWEsQ0FBQyxFQUFFO2dCQUNqRSxLQUFJLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQzthQUM3QjtZQUNELE9BQU8sQ0FBQyxDQUFDLEtBQUssQ0FBQztRQUNqQixDQUFDLENBQUM7UUFFRixJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUNyQyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDcEIsSUFBSSxDQUFDLE9BQU8sR0FBRyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxFQUFFLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQ3hELENBQUM7SUFFRDs7O09BR0c7Ozs7OztJQUNILDZDQUFnQjs7Ozs7SUFBaEIsVUFBaUIsRUFBTztRQUN0QixJQUFJLENBQUMsZ0JBQWdCLEdBQUcsRUFBRSxDQUFDO0lBQzdCLENBQUM7SUFFRDs7O09BR0c7Ozs7OztJQUNILDhDQUFpQjs7Ozs7SUFBakIsVUFBa0IsRUFBTztRQUN2QixJQUFJLENBQUMsaUJBQWlCLEdBQUcsRUFBRSxDQUFDO0lBQzlCLENBQUM7Ozs7SUFFRCw2Q0FBZ0I7OztJQUFoQjtRQUNFLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxlQUFlLENBQUM7WUFDakMsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsZUFBZSxDQUFDO1lBQzlCLENBQUMsQ0FBQyxVQUFVLENBQUM7SUFDakIsQ0FBQztJQUVELHNCQUNJLHVDQUFPOzs7O1FBT1g7WUFDRSxPQUFPLElBQUksQ0FBQyxRQUFRLENBQUM7UUFDdkIsQ0FBQzs7Ozs7UUFWRCxVQUNZLEtBQVk7WUFDdEIsSUFBSSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUM7WUFDdEIsSUFBSSxDQUFDLElBQUksQ0FBQyxlQUFlLElBQUksS0FBSyxFQUFFO2dCQUNsQyxJQUFJLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDO2FBQzNEO1FBQ0gsQ0FBQzs7O09BQUE7SUFNRCxzQkFDSSx5Q0FBUzs7OztRQU9iO1lBQ0UsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDO1FBQ3pCLENBQUM7Ozs7O1FBVkQsVUFDYyxLQUFZO1lBQ3hCLElBQUksQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFDO1lBQ3hCLElBQUksQ0FBQyxJQUFJLENBQUMsaUJBQWlCLElBQUksS0FBSyxFQUFFO2dCQUNwQyxJQUFJLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUM7YUFDN0Q7UUFDSCxDQUFDOzs7T0FBQTs7Z0JBdlhGLFNBQVMsU0FBQztvQkFDVCxRQUFRLEVBQUUsZUFBZTtvQkFDekIsUUFBUSxFQUFFLGlaQUlTO29CQUNuQixTQUFTLEVBQUUsQ0FBQyx3QkFBd0IsQ0FBQztvQkFDckMsYUFBYSxFQUFFLGlCQUFpQixDQUFDLElBQUk7b0JBQ3JDLE1BQU0sRUFBRSxDQUFDLHVvUUFBdW9RLENBQUM7aUJBQ2xwUTs7OztnQkFwQ0MsZUFBZTtnQkFLZixTQUFTOzs7eUJBdUNSLEtBQUs7cUJBQ0wsS0FBSzs4QkFDTCxLQUFLO3dDQUNMLEtBQUs7dUNBQ0wsS0FBSzswQkFDTCxLQUFLO3dCQUNMLEtBQUs7OEJBQ0wsS0FBSzs2QkFDTCxLQUFLO3lCQUlMLE1BQU07MEJBQ04sTUFBTTtpQ0FFTixTQUFTLFNBQUMsZ0JBQWdCOzBCQW9VMUIsS0FBSzs0QkFZTCxLQUFLOztJQVdSLHlCQUFDO0NBQUEsQUE1WEQsSUE0WEM7U0FqWFksa0JBQWtCOzs7SUFFN0Isc0NBQXdCOztJQUN4Qiw2Q0FBNkM7O0lBQzdDLHdDQUEwQjs7SUFDMUIsK0NBQStDOztJQUUvQyxvQ0FBaUM7O0lBQ2pDLGdDQUFvQjs7SUFDcEIseUNBQTZCOztJQUM3QixtREFBdUM7O0lBQ3ZDLGtEQUFzQzs7SUFDdEMscUNBQXdCOztJQUN4QixtQ0FBc0M7O0lBQ3RDLHlDQUFrQzs7SUFDbEMsd0NBQTRCOztJQUM1Qix1Q0FBa0I7O0lBQ2xCLHFDQUFnQjs7SUFFaEIsb0NBQXFFOztJQUNyRSxxQ0FBc0U7O0lBRXRFLDRDQUFpRDs7SUFFakQsdUNBQXVCOztJQUd2QiwrQ0FBb0M7O0lBQ3BDLDhDQUF5Qzs7Ozs7O0lBZ1B6Qyx1Q0FRQzs7SUF0UFcsc0NBQWlDOztJQUFFLHNDQUEyQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgSW5wdXQsXHJcbiAgT25Jbml0LFxyXG4gIE9uQ2hhbmdlcyxcclxuICBTaW1wbGVDaGFuZ2VzLFxyXG4gIERvQ2hlY2ssXHJcbiAgZm9yd2FyZFJlZixcclxuICBDb21wb25lbnQsXHJcbiAgVmlld0NoaWxkLFxyXG4gIE91dHB1dCxcclxuICBFdmVudEVtaXR0ZXIsXHJcbiAgSXRlcmFibGVEaWZmZXJzLFxyXG4gIEl0ZXJhYmxlRGlmZmVyLFxyXG4gIEl0ZXJhYmxlQ2hhbmdlUmVjb3JkLFxyXG4gIEl0ZXJhYmxlQ2hhbmdlcyxcclxuICBWaWV3RW5jYXBzdWxhdGlvbixcclxuICBSZW5kZXJlcjIsXHJcbiAgT25EZXN0cm95XHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7XHJcbiAgTkdfVkFMVUVfQUNDRVNTT1IsXHJcbiAgQ29udHJvbFZhbHVlQWNjZXNzb3IsXHJcbiAgRm9ybUNvbnRyb2xcclxufSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcblxyXG5pbXBvcnQgKiBhcyBfIGZyb20gJ2xvZGFzaCc7XHJcbmltcG9ydCB7IFNlbGVjdGl6ZUNvbmZpZyB9IGZyb20gJy4vc2VsZWN0aXplLmNvbmZpZyc7XHJcbmltcG9ydCB7SVNlbGVjdGl6ZUl0ZW19IGZyb20gJy4vc2VsZWN0aXplLWl0ZW0uaW50ZXJmYWNlJztcclxuXHJcbmRlY2xhcmUgdmFyICQ6IGFueTtcclxuXHJcbmV4cG9ydCBjb25zdCBTRUxFQ1RJWkVfVkFMVUVfQUNDRVNTT1I6IGFueSA9IHtcclxuICBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcclxuICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBTZWxlY3RpemVDb21wb25lbnQpLFxyXG4gIG11bHRpOiB0cnVlXHJcbn07XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2h4YS1zZWxlY3RpemUnLFxyXG4gIHRlbXBsYXRlOiBgPGRpdiBjbGFzcz1cImh4LWlucHV0LWNvbnRyb2xcIiBbbmdDbGFzc109XCJjb25maWcuaW5wdXRDb250cm9sQ2xhc3Nlc1wiIFtjbGFzcy5pcy1mb2N1c2VkXT1cImlzRm9jdXNlZFwiIFtjbGFzcy5pcy12YWxpZF09XCJpc1ZhbGlkXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxzZWxlY3QgI3NlbGVjdGl6ZUlucHV0Pjwvc2VsZWN0PlxyXG4gICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPVwie3tpZH19XCIgY2xhc3M9XCJoeC1sYWJlbFwiPnt7Y29uZmlnLmxhYmVsfX0gPHN1cCAqbmdJZj1cImNvbmZpZy5tYW5kYXRvcnlcIj4qPC9zdXA+PC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImh4LWhlbHBcIj57e2NvbmZpZy5oZWxwfX08L2Rpdj5cclxuICAgICAgICAgICAgICA8L2Rpdj5gLFxyXG4gIHByb3ZpZGVyczogW1NFTEVDVElaRV9WQUxVRV9BQ0NFU1NPUl0sXHJcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcclxuICBzdHlsZXM6IFtgLnNlbGVjdGl6ZS1jb250cm9se3Bvc2l0aW9uOnJlbGF0aXZlfS5zZWxlY3RpemUtZHJvcGRvd24sLnNlbGVjdGl6ZS1pbnB1dCwuc2VsZWN0aXplLWlucHV0IGlucHV0e2NvbG9yOiMyYTJjMmQ7Zm9udC1mYW1pbHk6aW5oZXJpdDtmb250LXNpemU6LjkycmVtO2xpbmUtaGVpZ2h0OjEuNTstd2Via2l0LWZvbnQtc21vb3RoaW5nOmluaGVyaXR9LnNlbGVjdGl6ZS1jb250cm9sLnNpbmdsZSAuc2VsZWN0aXplLWlucHV0LmlucHV0LWFjdGl2ZSwuc2VsZWN0aXplLWlucHV0e2JhY2tncm91bmQ6MCAwO2N1cnNvcjp0ZXh0O2Rpc3BsYXk6aW5saW5lLWJsb2NrfS5zZWxlY3RpemUtaW5wdXR7Ym9yZGVyOjFweCBzb2xpZCByZ2JhKDAsMCwwLC4yKTtwYWRkaW5nOjhweCAwO2Rpc3BsYXk6aW5saW5lLWJsb2NrO3dpZHRoOjEwMCU7b3ZlcmZsb3c6aGlkZGVuO3Bvc2l0aW9uOnJlbGF0aXZlO3otaW5kZXg6MTtib3gtc2l6aW5nOmJvcmRlci1ib3g7Ym94LXNoYWRvdzpub25lO2JvcmRlci1yYWRpdXM6MDtib3JkZXItd2lkdGg6MCAwIDFweH0uc2VsZWN0aXplLWNvbnRyb2wubXVsdGkgLnNlbGVjdGl6ZS1pbnB1dC5oYXMtaXRlbXN7cGFkZGluZzo2cHggMCAzcHh9LnNlbGVjdGl6ZS1jb250cm9sLm11bHRpLmhhc0NhcmV0IC5zZWxlY3RpemUtaW5wdXQuaGFzLWl0ZW1ze3BhZGRpbmctcmlnaHQ6MXJlbX0uc2VsZWN0aXplLWlucHV0LmZ1bGx7YmFja2dyb3VuZC1jb2xvcjp0cmFuc3BhcmVudH0uc2VsZWN0aXplLWlucHV0LmRpc2FibGVkLC5zZWxlY3RpemUtaW5wdXQuZGlzYWJsZWQgKntjdXJzb3I6ZGVmYXVsdCFpbXBvcnRhbnR9LnNlbGVjdGl6ZS1pbnB1dC5mb2N1c3tib3gtc2hhZG93Om5vbmV9LnNlbGVjdGl6ZS1pbnB1dC5kcm9wZG93bi1hY3RpdmV7Ym9yZGVyLXJhZGl1czowfS5zZWxlY3RpemUtaW5wdXQ+Knt2ZXJ0aWNhbC1hbGlnbjpiYXNlbGluZTtkaXNwbGF5OmlubGluZS1ibG9jazt6b29tOjF9LnNlbGVjdGl6ZS1jb250cm9sLm11bHRpIC5zZWxlY3RpemUtaW5wdXQ+ZGl2e2N1cnNvcjpwb2ludGVyO21hcmdpbjo0cHg7cGFkZGluZzoycHggNnB4O2JhY2tncm91bmQ6cmdiYSgwLDAsMCwuMDUpO2NvbG9yOiMyYTJjMmQ7Ym9yZGVyOjAgc29saWQgdHJhbnNwYXJlbnQ7Ym9yZGVyLXJhZGl1czoyOTA0ODZweDtmb250LXNpemU6Ljc1cmVtO2p1c3RpZnktY29udGVudDpjZW50ZXI7bGluZS1oZWlnaHQ6MS41O3doaXRlLXNwYWNlOm5vd3JhcH0uc2VsZWN0aXplLWNvbnRyb2wubXVsdGkgLnNlbGVjdGl6ZS1pbnB1dD5kaXYuYWN0aXZle2JhY2tncm91bmQ6I2U4ZThlODtjb2xvcjojMmEyYzJkO2JvcmRlcjowIHNvbGlkICNjYWNhY2F9LnNlbGVjdGl6ZS1jb250cm9sLm11bHRpIC5zZWxlY3RpemUtaW5wdXQuZGlzYWJsZWQ+ZGl2LC5zZWxlY3RpemUtY29udHJvbC5tdWx0aSAuc2VsZWN0aXplLWlucHV0LmRpc2FibGVkPmRpdi5hY3RpdmV7Y29sb3I6Izc4Nzg3ODtiYWNrZ3JvdW5kOnJnYmEoNzcsNzcsNzcsLjA1KTtib3JkZXI6MCBzb2xpZCByZ2JhKDc3LDc3LDc3LDApfS5zZWxlY3RpemUtaW5wdXQ+aW5wdXR7ZGlzcGxheTppbmxpbmUtYmxvY2shaW1wb3J0YW50O3BhZGRpbmc6MCFpbXBvcnRhbnQ7bWluLWhlaWdodDowIWltcG9ydGFudDttYXgtaGVpZ2h0Om5vbmUhaW1wb3J0YW50O21heC13aWR0aDoxMDAlIWltcG9ydGFudDttYXJnaW46MCAycHggMCAwIWltcG9ydGFudDt0ZXh0LWluZGVudDowIWltcG9ydGFudDtib3JkZXI6MCFpbXBvcnRhbnQ7YmFja2dyb3VuZDowIDAhaW1wb3J0YW50O2xpbmUtaGVpZ2h0OmluaGVyaXQhaW1wb3J0YW50Oy13ZWJraXQtdXNlci1zZWxlY3Q6YXV0byFpbXBvcnRhbnR9LnNlbGVjdGl6ZS1pbnB1dD5pbnB1dDo6LW1zLWNsZWFye2Rpc3BsYXk6bm9uZX0uc2VsZWN0aXplLWlucHV0PmlucHV0OmZvY3Vze291dGxpbmU6MCFpbXBvcnRhbnR9LnNlbGVjdGl6ZS1pbnB1dDo6YWZ0ZXJ7Y29udGVudDonICc7ZGlzcGxheTpibG9jaztjbGVhcjpsZWZ0fS5zZWxlY3RpemUtaW5wdXQuZHJvcGRvd24tYWN0aXZlOjpiZWZvcmV7Y29udGVudDonICc7ZGlzcGxheTpibG9jaztwb3NpdGlvbjphYnNvbHV0ZTtiYWNrZ3JvdW5kOiNmMGYwZjA7aGVpZ2h0OjFweDtib3R0b206MDtsZWZ0OjA7cmlnaHQ6MH0uaHgtc2VsZWN0LWNvbnRyb2w6YWZ0ZXJ7ZGlzcGxheTpub25lfS5zZWxlY3RpemUtZHJvcGRvd257cG9zaXRpb246YWJzb2x1dGU7ei1pbmRleDoxMDtib3JkZXI6dHJhbnNwYXJlbnQ7YmFja2dyb3VuZDojZmZmO21hcmdpbjoxcHggMCAwO2JvcmRlci10b3A6MDtib3gtc2l6aW5nOmJvcmRlci1ib3g7Ym94LXNoYWRvdzowIDZweCAxMnB4IHJnYmEoMCwwLDAsLjE0NSk7Ym9yZGVyLXJhZGl1czowfS5zZWxlY3RpemUtZHJvcGRvd24gW2RhdGEtc2VsZWN0YWJsZV17Y3Vyc29yOnBvaW50ZXI7b3ZlcmZsb3c6aGlkZGVufS5zZWxlY3RpemUtZHJvcGRvd24gW2RhdGEtc2VsZWN0YWJsZV0gLmhpZ2hsaWdodHtiYWNrZ3JvdW5kOnJnYmEoMzUsNDksNDMsLjIzKTtib3JkZXItcmFkaXVzOjFweDtmb250LXdlaWdodDo3MDB9LnNlbGVjdGl6ZS1kcm9wZG93biAub3B0Z3JvdXAtaGVhZGVyLC5zZWxlY3RpemUtZHJvcGRvd24gW2RhdGEtc2VsZWN0YWJsZV17cGFkZGluZzo1cHggOHB4fS5zZWxlY3RpemUtZHJvcGRvd24gLm9wdGdyb3VwOmZpcnN0LWNoaWxkIC5vcHRncm91cC1oZWFkZXJ7Ym9yZGVyLXRvcDowfS5zZWxlY3RpemUtZHJvcGRvd24gLm9wdGdyb3VwLWhlYWRlcntjb2xvcjojMmEyYzJkO2JhY2tncm91bmQ6I2ZmZjtjdXJzb3I6ZGVmYXVsdH0uc2VsZWN0aXplLWRyb3Bkb3duIC5hY3RpdmV7YmFja2dyb3VuZC1jb2xvcjojNDFiOTg3O2NvbG9yOiNmZmZ9LnNlbGVjdGl6ZS1kcm9wZG93biAuYWN0aXZlLmNyZWF0ZXtjb2xvcjojZmZmfS5zZWxlY3RpemUtZHJvcGRvd24gLmNyZWF0ZXtjb2xvcjpyZ2JhKDQyLDQ0LDQ1LC41KX0uc2VsZWN0aXplLWRyb3Bkb3duLWNvbnRlbnR7b3ZlcmZsb3cteTphdXRvO292ZXJmbG93LXg6aGlkZGVuO21heC1oZWlnaHQ6MjAwcHg7LXdlYmtpdC1vdmVyZmxvdy1zY3JvbGxpbmc6dG91Y2h9LnNlbGVjdGl6ZS1jb250cm9sLmhhc0NhcmV0IC5zZWxlY3RpemUtaW5wdXQsLnNlbGVjdGl6ZS1jb250cm9sLmhhc0NhcmV0IC5zZWxlY3RpemUtaW5wdXQgaW5wdXQsLnNlbGVjdGl6ZS1jb250cm9sLnNpbmdsZSAuc2VsZWN0aXplLWlucHV0LC5zZWxlY3RpemUtY29udHJvbC5zaW5nbGUgLnNlbGVjdGl6ZS1pbnB1dCBpbnB1dHtjdXJzb3I6cG9pbnRlcn0uc2VsZWN0aXplLWNvbnRyb2wuaGFzQ2FyZXQgLnNlbGVjdGl6ZS1pbnB1dC5pbnB1dC1hY3RpdmUsLnNlbGVjdGl6ZS1jb250cm9sLmhhc0NhcmV0IC5zZWxlY3RpemUtaW5wdXQuaW5wdXQtYWN0aXZlIGlucHV0LC5zZWxlY3RpemUtY29udHJvbC5zaW5nbGUgLnNlbGVjdGl6ZS1pbnB1dC5pbnB1dC1hY3RpdmUsLnNlbGVjdGl6ZS1jb250cm9sLnNpbmdsZSAuc2VsZWN0aXplLWlucHV0LmlucHV0LWFjdGl2ZSBpbnB1dHtjdXJzb3I6dGV4dH0uc2VsZWN0aXplLWNvbnRyb2wuaGFzQ2FyZXQgLnNlbGVjdGl6ZS1pbnB1dDphZnRlciwuc2VsZWN0aXplLWNvbnRyb2wuc2luZ2xlIC5zZWxlY3RpemUtaW5wdXQ6YWZ0ZXJ7Y29udGVudDonICc7ZGlzcGxheTpibG9jaztwb3NpdGlvbjphYnNvbHV0ZTt0b3A6NTAlO3JpZ2h0OjE1cHg7bWFyZ2luLXRvcDotM3B4O3dpZHRoOjA7aGVpZ2h0OjA7Ym9yZGVyLXN0eWxlOnNvbGlkO2JvcmRlci13aWR0aDo1cHggNXB4IDA7Ym9yZGVyLWNvbG9yOmdyZXkgdHJhbnNwYXJlbnQgdHJhbnNwYXJlbnR9LnNlbGVjdGl6ZS1jb250cm9sLmhhc0NhcmV0IC5zZWxlY3RpemUtaW5wdXQuZHJvcGRvd24tYWN0aXZlOmFmdGVyLC5zZWxlY3RpemUtY29udHJvbC5zaW5nbGUgLnNlbGVjdGl6ZS1pbnB1dC5kcm9wZG93bi1hY3RpdmU6YWZ0ZXJ7bWFyZ2luLXRvcDotNHB4O2JvcmRlci13aWR0aDowIDVweCA1cHg7Ym9yZGVyLWNvbG9yOnRyYW5zcGFyZW50IHRyYW5zcGFyZW50IGdyZXl9LnNlbGVjdGl6ZS1jb250cm9sLm11bHRpLmhhc0NhcmV0IC5zZWxlY3RpemUtaW5wdXQuaGFzLWl0ZW1zOmFmdGVye3RvcDppbml0aWFsO2JvdHRvbToxLjNyZW19LnNlbGVjdGl6ZS1jb250cm9sLnJ0bC5oYXNDYXJldCAuc2VsZWN0aXplLWlucHV0OmFmdGVyLC5zZWxlY3RpemUtY29udHJvbC5ydGwuc2luZ2xlIC5zZWxlY3RpemUtaW5wdXQ6YWZ0ZXJ7bGVmdDoxNXB4O3JpZ2h0OmF1dG99LnNlbGVjdGl6ZS1jb250cm9sLnJ0bCAuc2VsZWN0aXplLWlucHV0PmlucHV0e21hcmdpbjowIDRweCAwIC0ycHghaW1wb3J0YW50fS5zZWxlY3RpemUtY29udHJvbCAuc2VsZWN0aXplLWlucHV0LmRpc2FibGVke29wYWNpdHk6LjU7YmFja2dyb3VuZC1jb2xvcjojZmFmYWZhfWh4YS1zZWxlY3RpemUgLmh4LWlucHV0LWNvbnRyb2x7cGFkZGluZy10b3A6LjIxcmVtfWh4YS1zZWxlY3RpemUgLmh4LWlucHV0LWNvbnRyb2wgLmh4LWxhYmVse3Bvc2l0aW9uOmFic29sdXRlO3RvcDouN3JlbTttYXJnaW46