iobroker.lovelace
Version:
With this adapter you can build visualization for ioBroker with Home Assistant Lovelace UI
1 lines • 19.5 kB
JavaScript
export const __rspack_esm_id=99928;export const __rspack_esm_ids=[99928];export const __webpack_modules__={62501(t,e,i){i.a(t,async function(t,a){try{i.r(e),i.d(e,{HaIconButtonToggle:()=>h});var s=i(62826),n=i(5124),r=i(22441),o=i(26300),l=t([o]);o=(l.then?(await l)():l)[0];class h extends o.HaIconButton{constructor(...t){super(...t),this.selected=!1}}h.styles=[o.HaIconButton.styles,n.AH`:host{position:relative}ha-button::part(base){position:relative;transition:color 180ms ease-in-out}ha-button::part(base)::before{opacity:0;transition:opacity 180ms ease-in-out;background-color:var(--primary-text-color);border-radius:var(--ha-border-radius-2xl);height:40px;width:40px;content:"";position:absolute;top:-10px;left:-10px;bottom:-10px;right:-10px;margin:auto;box-sizing:border-box}:host([border-only]) ha-button::part(base)::before{background-color:transparent;border:2px solid var(--primary-text-color)}:host([selected]) ha-button::after{opacity:0}:host([selected]) ha-button::part(base){color:var(--primary-background-color);background-color:unset}:host([selected]:not([disabled])) ha-button::part(base)::before{opacity:1}::slotted(*){display:block}`],(0,s.Cg)([(0,r.MZ)({type:Boolean,reflect:!0})],h.prototype,"selected",void 0),h=(0,s.Cg)([(0,r.EM)("ha-icon-button-toggle")],h),a()}catch(t){a(t)}})},28732(t,e,i){var a=i(62826),s=i(27686),n=i(7731),r=i(5124),o=i(22441);class l extends s.J{renderRipple(){return this.noninteractive?"":super.renderRipple()}static get styles(){return[n.R,r.AH`:host{padding-left:var(--mdc-list-side-padding-left,var(--mdc-list-side-padding,20px));padding-inline-start:var(--mdc-list-side-padding-left,var(--mdc-list-side-padding,20px));padding-right:var(--mdc-list-side-padding-right,var(--mdc-list-side-padding,20px));padding-inline-end:var(--mdc-list-side-padding-right,var(--mdc-list-side-padding,20px))}:host([graphic=avatar]:not([twoLine])),:host([graphic=icon]:not([twoLine])){height:48px}span.material-icons:first-of-type{margin-inline-start:0px!important;margin-inline-end:var(--mdc-list-item-graphic-margin,16px)!important;direction:var(--direction)!important}span.material-icons:last-of-type{margin-inline-start:auto!important;margin-inline-end:0px!important;direction:var(--direction)!important}.mdc-deprecated-list-item__meta{display:var(--mdc-list-item-meta-display);align-items:center;flex-shrink:0}:host([graphic=icon]:not([twoline])) .mdc-deprecated-list-item__graphic{margin-inline-end:var(--mdc-list-item-graphic-margin,20px)!important}:host([multiline-secondary]){height:auto}:host([multiline-secondary]) .mdc-deprecated-list-item__text{padding:8px 0}:host([multiline-secondary]) .mdc-deprecated-list-item__secondary-text{text-overflow:initial;white-space:normal;overflow:auto;display:inline-block;margin-top:10px}:host([multiline-secondary]) .mdc-deprecated-list-item__primary-text{margin-top:10px}:host([multiline-secondary]) .mdc-deprecated-list-item__secondary-text::before{display:none}:host([multiline-secondary]) .mdc-deprecated-list-item__primary-text::before{display:none}:host([disabled]){color:var(--disabled-text-color)}:host([noninteractive]){pointer-events:unset}`,"rtl"===document.dir?r.AH`span.material-icons:first-of-type,span.material-icons:last-of-type{direction:rtl!important;--direction:rtl}`:r.AH``]}}l=(0,a.Cg)([(0,o.EM)("ha-list-item")],l)},3688(t,e,i){var a=i(62826),s=i(5124),n=i(22441),r=i(6412);class o extends s.WF{render(){const t=`items-${this.childElementCount}`;return s.qy` <div class="controls"> <div class="controls-scroll ${(0,r.H)({[t]:!0,multiline:this.childElementCount>=4})}"> <slot></slot> </div> </div> `}}o.styles=s.AH`.controls{display:flex;flex-direction:row;justify-content:center}.controls-scroll{display:flex;flex-direction:row;justify-content:flex-start;gap:var(--ha-space-3);margin:auto;overflow:auto;-ms-overflow-style:none;scrollbar-width:none;margin:-2px calc(var(--ha-space-6) * -1);padding:2px var(--ha-space-6)}.controls-scroll::-webkit-scrollbar{display:none}::slotted(*){min-width:120px;max-width:160px;flex:none} all and (hover:hover),all and (min-width:600px) and (min-height:501px){.controls-scroll{justify-content:center;flex-wrap:wrap;width:100%;max-width:450px}.controls-scroll.items-4{max-width:300px}.controls-scroll.items-3 ::slotted(*){max-width:140px}.multiline ::slotted(*){width:140px}}`,o=(0,a.Cg)([(0,n.EM)("ha-more-info-control-select-container")],o)},37863(t,e,i){i.d(e,{K:()=>a});const a=i(5124).AH`:host{display:flex;flex-direction:column;flex:1;justify-content:space-between}.controls{display:flex;flex-direction:column;align-items:center;justify-content:center;flex:1}.controls:not(:last-child){margin-bottom:var(--ha-space-6)}.controls>:not(:last-child){margin-bottom:var(--ha-space-6)}.buttons{display:flex;align-items:center;justify-content:center;margin-bottom:var(--ha-space-3)}.buttons>*{margin:var(--ha-space-2)}ha-attributes{display:block;width:100%}ha-more-info-control-select-container+ha-attributes:not([empty]){margin-top:var(--ha-space-4)}`},14667(t,e,i){i.a(t,async function(t,a){try{i.r(e);i(18111),i(61701);var s=i(62826),n=i(5124),r=i(22441),o=i(82286),l=i(36248),h=i(56048),c=(i(39826),i(62501)),d=(i(28732),i(606)),u=i(59646),m=i(38279),p=i(22675),b=i(39212),g=i(74387),_=(i(3688),i(37863)),v=t([l,h,c,d,u,b,g]);[l,h,c,d,u,b,g]=v.then?(await v)():v;const y="M6 14H9L5 18L1 14H4C4 11.3 5.7 6.6 11 6.1V8.1C7.6 8.6 6 11.9 6 14M20 14C20 11.3 18.3 6.6 13 6.1V8.1C16.4 8.7 18 11.9 18 14H15L19 18L23 14H20Z",$="M12,11A1,1 0 0,0 11,12A1,1 0 0,0 12,13A1,1 0 0,0 13,12A1,1 0 0,0 12,11M12.5,2C17,2 17.11,5.57 14.75,6.75C13.76,7.24 13.32,8.29 13.13,9.22C13.61,9.42 14.03,9.73 14.35,10.13C18.05,8.13 22.03,8.92 22.03,12.5C22.03,17 18.46,17.1 17.28,14.73C16.78,13.74 15.72,13.3 14.79,13.11C14.59,13.59 14.28,14 13.88,14.34C15.87,18.03 15.08,22 11.5,22C7,22 6.91,18.42 9.27,17.24C10.25,16.75 10.69,15.71 10.89,14.79C10.4,14.59 9.97,14.27 9.65,13.87C5.96,15.85 2,15.07 2,11.5C2,7 5.56,6.89 6.74,9.26C7.24,10.25 8.29,10.68 9.22,10.87C9.41,10.39 9.73,9.97 10.14,9.65C8.15,5.96 8.94,2 12.5,2Z",f="M15 13V5A3 3 0 0 0 9 5V13A5 5 0 1 0 15 13M12 4A1 1 0 0 1 13 5V8H11V5A1 1 0 0 1 12 4Z",x="M8 13C6.14 13 4.59 14.28 4.14 16H2V18H4.14C4.59 19.72 6.14 21 8 21S11.41 19.72 11.86 18H22V16H11.86C11.41 14.28 9.86 13 8 13M8 19C6.9 19 6 18.1 6 17C6 15.9 6.9 15 8 15S10 15.9 10 17C10 18.1 9.1 19 8 19M19.86 6C19.41 4.28 17.86 3 16 3S12.59 4.28 12.14 6H2V8H12.14C12.59 9.72 14.14 11 16 11S19.41 9.72 19.86 8H22V6H19.86M16 9C14.9 9 14 8.1 14 7C14 5.9 14.9 5 16 5S18 5.9 18 7C18 8.1 17.1 9 16 9Z",C="M12,3.25C12,3.25 6,10 6,14C6,17.32 8.69,20 12,20A6,6 0 0,0 18,14C18,10 12,3.25 12,3.25M14.47,9.97L15.53,11.03L9.53,17.03L8.47,15.97M9.75,10A1.25,1.25 0 0,1 11,11.25A1.25,1.25 0 0,1 9.75,12.5A1.25,1.25 0 0,1 8.5,11.25A1.25,1.25 0 0,1 9.75,10M14.25,14.5A1.25,1.25 0 0,1 15.5,15.75A1.25,1.25 0 0,1 14.25,17A1.25,1.25 0 0,1 13,15.75A1.25,1.25 0 0,1 14.25,14.5Z";class w extends n.WF{willUpdate(t){t.has("stateObj")&&this.stateObj&&"humidity"===this._mainControl&&!(0,o.$)(this.stateObj,m.$2.TARGET_HUMIDITY)&&(this._mainControl="temperature")}render(){if(!this.stateObj)return n.s6;const t=this.stateObj,e=(0,o.$)(t,m.$2.TARGET_HUMIDITY),i=(0,o.$)(t,m.$2.FAN_MODE),a=(0,o.$)(t,m.$2.PRESET_MODE),s=(0,o.$)(t,m.$2.SWING_MODE),r=(0,o.$)(t,m.$2.SWING_HORIZONTAL_MODE),l=this.stateObj.attributes.current_temperature,h=this.stateObj.attributes.current_humidity;return n.qy` <div class="current"> ${null!=l?n.qy` <div> <p class="label"> ${this.hass.formatEntityAttributeName(this.stateObj,"current_temperature")} </p> <p class="value"> ${this.hass.formatEntityAttributeValue(this.stateObj,"current_temperature")} </p> </div> `:n.s6} ${null!=h?n.qy` <div> <p class="label"> ${this.hass.formatEntityAttributeName(this.stateObj,"current_humidity")} </p> <p class="value"> ${this.hass.formatEntityAttributeValue(this.stateObj,"current_humidity")} </p> </div> `:n.s6} </div> <div class="controls"> ${"temperature"===this._mainControl?n.qy` <ha-state-control-climate-temperature .hass="${this.hass}" .stateObj="${this.stateObj}"></ha-state-control-climate-temperature> `:n.s6} ${"humidity"===this._mainControl?n.qy` <ha-state-control-climate-humidity .hass="${this.hass}" .stateObj="${this.stateObj}"></ha-state-control-climate-humidity> `:n.s6} ${e?n.qy` <ha-icon-button-group> <ha-icon-button-toggle .selected="${"temperature"===this._mainControl}" .disabled="${this.stateObj.state===p.Hh}" .label="${this.hass.localize("ui.dialogs.more_info_control.climate.temperature")}" .control="${"temperature"}" ="${this._setMainControl}"> <ha-svg-icon .path="${f}"></ha-svg-icon> </ha-icon-button-toggle> <ha-icon-button-toggle .selected="${"humidity"===this._mainControl}" .disabled="${this.stateObj.state===p.Hh}" .label="${this.hass.localize("ui.dialogs.more_info_control.climate.humidity")}" .control="${"humidity"}" ="${this._setMainControl}"> <ha-svg-icon .path="${C}"></ha-svg-icon> </ha-icon-button-toggle> </ha-icon-button-group> `:n.s6} </div> <ha-more-info-control-select-container> <ha-control-select-menu .hass="${this.hass}" .label="${this.hass.localize("ui.card.climate.mode")}" .value="${t.state}" .disabled="${this.stateObj.state===p.Hh}" .options="${t.attributes.hvac_modes.concat().sort(m.VV).map(e=>({value:e,iconPath:(0,m.on)(e),label:this.hass.formatEntityState(t,e)}))}" -select="${this._handleOperationModeChanged}"> <ha-svg-icon slot="icon" .path="${(0,m.on)(t.state)}"></ha-svg-icon> </ha-control-select-menu> ${a&&t.attributes.preset_modes?n.qy` <ha-control-select-menu .hass="${this.hass}" .label="${this.hass.formatEntityAttributeName(t,"preset_mode")}" .value="${t.attributes.preset_mode}" .disabled="${this.stateObj.state===p.Hh}" -select="${this._handlePresetmodeChanged}" .options="${t.attributes.preset_modes.map(e=>({value:e,label:this.hass.formatEntityAttributeValue(t,"preset_mode",e)}))}" .renderIcon="${this._renderPresetModeIcon}"> <ha-svg-icon slot="icon" .path="${x}"></ha-svg-icon> </ha-control-select-menu> `:n.s6} ${i&&t.attributes.fan_modes?n.qy` <ha-control-select-menu .hass="${this.hass}" .label="${this.hass.formatEntityAttributeName(t,"fan_mode")}" .value="${t.attributes.fan_mode}" .disabled="${this.stateObj.state===p.Hh}" -select="${this._handleFanModeChanged}" .options="${t.attributes.fan_modes.map(e=>({value:e,label:this.hass.formatEntityAttributeValue(t,"fan_mode",e)}))}" .renderIcon="${this._renderFanModeIcon}"> <ha-svg-icon slot="icon" .path="${$}"></ha-svg-icon> </ha-control-select-menu> `:n.s6} ${s&&t.attributes.swing_modes?n.qy` <ha-control-select-menu .hass="${this.hass}" .label="${this.hass.formatEntityAttributeName(t,"swing_mode")}" .value="${t.attributes.swing_mode}" .disabled="${this.stateObj.state===p.Hh}" -select="${this._handleSwingmodeChanged}" .options="${t.attributes.swing_modes.map(e=>({value:e,label:this.hass.formatEntityAttributeValue(t,"swing_mode",e)}))}" .renderIcon="${this._renderSwingModeIcon}"> <ha-svg-icon slot="icon" .path="${y}"></ha-svg-icon> </ha-control-select-menu> `:n.s6} ${r&&t.attributes.swing_horizontal_modes?n.qy` <ha-control-select-menu .hass="${this.hass}" .label="${this.hass.formatEntityAttributeName(t,"swing_horizontal_mode")}" .value="${t.attributes.swing_horizontal_mode}" .disabled="${this.stateObj.state===p.Hh}" -select="${this._handleSwingHorizontalmodeChanged}" .options="${t.attributes.swing_horizontal_modes.map(e=>({value:e,label:this.hass.formatEntityAttributeValue(t,"swing_horizontal_mode",e)}))}" .renderIcon="${this._renderSwingHorizontalModeIcon}"> <ha-svg-icon slot="icon" .path="${y}"></ha-svg-icon> </ha-control-select-menu> `:n.s6} </ha-more-info-control-select-container> `}_setMainControl(t){t.stopPropagation(),this._mainControl=t.currentTarget.control}_handleFanModeChanged(t){const e=t.detail.item.value;this._callServiceHelper(this.stateObj.attributes.fan_mode,e,"set_fan_mode",{fan_mode:e})}_handleOperationModeChanged(t){const e=t.detail.item.value;this._callServiceHelper(this.stateObj.state,e,"set_hvac_mode",{hvac_mode:e})}_handleSwingmodeChanged(t){const e=t.detail.item.value;this._callServiceHelper(this.stateObj.attributes.swing_mode,e,"set_swing_mode",{swing_mode:e})}_handleSwingHorizontalmodeChanged(t){const e=t.detail.item.value;this._callServiceHelper(this.stateObj.attributes.swing_horizontal_mode,e,"set_swing_horizontal_mode",{swing_horizontal_mode:e})}_handlePresetmodeChanged(t){const e=t.detail.item.value||null;e&&this._callServiceHelper(this.stateObj.attributes.preset_mode,e,"set_preset_mode",{preset_mode:e})}async _callServiceHelper(t,e,i,a){if(t===e)return;a.entity_id=this.stateObj.entity_id;const s=this.stateObj;await this.hass.callService("climate",i,a),await new Promise(t=>{setTimeout(t,2e3)}),this.stateObj===s&&(this.stateObj=void 0,await this.updateComplete,void 0===this.stateObj&&(this.stateObj=s))}static get styles(){return[_.K,n.AH`:host{color:var(--primary-text-color)}.current{display:flex;flex-direction:row;align-items:center;justify-content:center;text-align:center;margin-bottom:var(--ha-space-10)}.current div{display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center;flex:1}.current p{margin:0;text-align:center;color:var(--primary-text-color)}.current .label{opacity:.8;font-size:var(--ha-font-size-m);line-height:var(--ha-line-height-condensed);letter-spacing:.4px;margin-bottom:var(--ha-space-1)}.current .value{font-size:var(--ha-font-size-xl);font-weight:var(--ha-font-weight-medium);line-height:var(--ha-line-height-condensed);direction:ltr}ha-select{width:100%;margin-top:var(--ha-space-2)}.container-humidity .single-row{display:flex;height:50px}.target-humidity{width:90px;font-size:var(--ha-font-size-3xl);margin:auto;direction:ltr}.single-row{padding:var(--ha-space-2) 0}`]}constructor(...t){super(...t),this._mainControl="temperature",this._renderPresetModeIcon=t=>n.qy`<ha-attribute-icon .hass="${this.hass}" .stateObj="${this.stateObj}" attribute="preset_mode" .attributeValue="${t}"></ha-attribute-icon>`,this._renderFanModeIcon=t=>n.qy`<ha-attribute-icon .hass="${this.hass}" .stateObj="${this.stateObj}" attribute="fan_mode" .attributeValue="${t}"></ha-attribute-icon>`,this._renderSwingModeIcon=t=>n.qy`<ha-attribute-icon .hass="${this.hass}" .stateObj="${this.stateObj}" attribute="swing_mode" .attributeValue="${t}"></ha-attribute-icon>`,this._renderSwingHorizontalModeIcon=t=>n.qy`<ha-attribute-icon .hass="${this.hass}" .stateObj="${this.stateObj}" attribute="swing_horizontal_mode" .attributeValue="${t}"></ha-attribute-icon>`}}(0,s.Cg)([(0,r.MZ)({attribute:!1})],w.prototype,"hass",void 0),(0,s.Cg)([(0,r.MZ)({attribute:!1})],w.prototype,"stateObj",void 0),(0,s.Cg)([(0,r.wk)()],w.prototype,"_mainControl",void 0),w=(0,s.Cg)([(0,r.EM)("more-info-climate")],w),a()}catch(t){a(t)}})},39212(t,e,i){i.a(t,async function(t,e){try{var a=i(62826),s=i(5124),n=i(22441),r=i(89784),o=i(47129),l=i(52658),h=i(82286),c=i(63004),d=i(9899),u=i(32074),m=(i(97955),i(8889),i(67094),i(38279)),p=i(22675),b=i(86030),g=i(17392),_=t([u]);u=(_.then?(await _)():_)[0];const v="M19,13H5V11H19V13Z",y="M19,13H13V19H11V13H5V11H11V5H13V11H19V13Z",$="M12,3.25C12,3.25 6,10 6,14C6,17.32 8.69,20 12,20A6,6 0 0,0 18,14C18,10 12,3.25 12,3.25M14.47,9.97L15.53,11.03L9.53,17.03L8.47,15.97M9.75,10A1.25,1.25 0 0,1 11,11.25A1.25,1.25 0 0,1 9.75,12.5A1.25,1.25 0 0,1 8.5,11.25A1.25,1.25 0 0,1 9.75,10M14.25,14.5A1.25,1.25 0 0,1 15.5,15.75A1.25,1.25 0 0,1 14.25,17A1.25,1.25 0 0,1 13,15.75A1.25,1.25 0 0,1 14.25,14.5Z";class f extends s.WF{willUpdate(t){super.willUpdate(t),t.has("stateObj")&&(this._targetHumidity=this.stateObj.attributes.humidity)}get _step(){return this.stateObj.attributes.target_humidity_step??1}get _min(){return this.stateObj.attributes.min_humidity??0}get _max(){return this.stateObj.attributes.max_humidity??100}_valueChanged(t){const{value:e}=t.detail;"number"!=typeof e||isNaN(e)||(this._targetHumidity=e,this._callService())}_valueChanging(t){const{value:e}=t.detail;"number"!=typeof e||isNaN(e)||(this._targetHumidity=e)}_callService(){this.hass.callService("climate","set_humidity",{entity_id:this.stateObj.entity_id,humidity:this._targetHumidity})}_handleButton(t){const e=t.currentTarget.step;let i=this._targetHumidity??this._min;i+=e,i=(0,c.q)(i,this._min,this._max),this._targetHumidity=i,this._debouncedCallService()}_renderLabel(){return this.stateObj.state===p.Hh?s.qy` <p class="label disabled"> ${this.hass.formatEntityState(this.stateObj,p.Hh)} </p> `:this._targetHumidity?s.qy` <p class="label"> ${this.hass.localize("ui.card.climate.humidity_target")} </p> `:s.qy` <p class="label">${this.hass.formatEntityState(this.stateObj)}</p> `}_renderButtons(){return s.qy` <div class="buttons"> <ha-outlined-icon-button .step="${-this._step}" ="${this._handleButton}"> <ha-svg-icon .path="${v}"></ha-svg-icon> </ha-outlined-icon-button> <ha-outlined-icon-button .step="${this._step}" ="${this._handleButton}"> <ha-svg-icon .path="${y}"></ha-svg-icon> </ha-outlined-icon-button> </div> `}_renderTarget(t){return s.qy` <ha-big-number .value="${t}" unit="%" unit-position="bottom" .hass="${this.hass}" .formatOptions="${{maximumFractionDigits:0}}"></ha-big-number> `}_renderCurrentHumidity(t){return this.showCurrent&&null!=t?s.qy` <p class="label"> <ha-svg-icon .path="${$}"></ha-svg-icon> <span> ${this.hass.formatEntityAttributeValue(this.stateObj,"current_humidity",t)} </span> </p> `:s.qy`<p class="label"> </p>`}render(){const t=(0,h.$)(this.stateObj,m.$2.TARGET_HUMIDITY),e=(0,o.a)(this.stateObj),i=(0,b.B)((0,l.gf)("humidifier",this.stateObj,e?"on":"off")),a=this._targetHumidity,n=this.stateObj.attributes.current_humidity,c=this._sizeController.value?` ${this._sizeController.value}`:"";return t&&null!=a&&this.stateObj.state!==p.Hh?s.qy` <div class="container${c}" style="${(0,r.W)({"--state-color":i})}"> <ha-control-circular-slider .preventInteractionOnScroll="${this.preventInteractionOnScroll}" .inactive="${!e}" .value="${this._targetHumidity}" .min="${this._min}" .max="${this._max}" .step="${this._step}" .current="${n}" -changed="${this._valueChanged}" -changing="${this._valueChanging}"> </ha-control-circular-slider> <div class="info"> ${this._renderLabel()} ${this._renderTarget(a)} ${this._renderCurrentHumidity(this.stateObj.attributes.current_humidity)} </div> ${this._renderButtons()} </div> `:s.qy` <div class="container${c}"> <ha-control-circular-slider .preventInteractionOnScroll="${this.preventInteractionOnScroll}" .current="${this.stateObj.attributes.current_humidity}" .min="${this._min}" .max="${this._max}" .step="${this._step}" disabled="disabled"> </ha-control-circular-slider> <div class="info"> ${this._renderLabel()} ${this._renderCurrentHumidity(this.stateObj.attributes.current_humidity)} </div> </div> `}static get styles(){return g.Y}constructor(...t){super(...t),this.showCurrent=!1,this.preventInteractionOnScroll=!1,this._sizeController=(0,g.H)(this),this._debouncedCallService=(0,d.s)(()=>this._callService(),1e3)}}(0,a.Cg)([(0,n.MZ)({attribute:!1})],f.prototype,"hass",void 0),(0,a.Cg)([(0,n.MZ)({attribute:!1})],f.prototype,"stateObj",void 0),(0,a.Cg)([(0,n.MZ)({attribute:"show-current",type:Boolean})],f.prototype,"showCurrent",void 0),(0,a.Cg)([(0,n.MZ)({type:Boolean,attribute:"prevent-interaction-on-scroll"})],f.prototype,"preventInteractionOnScroll",void 0),(0,a.Cg)([(0,n.wk)()],f.prototype,"_targetHumidity",void 0),f=(0,a.Cg)([(0,n.EM)("ha-state-control-climate-humidity")],f),e()}catch(t){e(t)}})}};