diff --git a/.patch-version b/.patch-version index d00491fd7..0cfbf0888 100644 --- a/.patch-version +++ b/.patch-version @@ -1 +1 @@ -1 +2 diff --git a/dist/13.c4586e903a85e96ce217.css b/dist/13.c2828ad8a236049343ac.css similarity index 93% rename from dist/13.c4586e903a85e96ce217.css rename to dist/13.c2828ad8a236049343ac.css index 8c7d60544..01c02df8f 100644 --- a/dist/13.c4586e903a85e96ce217.css +++ b/dist/13.c2828ad8a236049343ac.css @@ -1,4 +1,4 @@ -.Transition{position:relative}.Transition>*{width:100%;height:100%;animation-fill-mode:forwards !important;transition:background-color .2s}.Transition>*.from,.Transition>*.to{position:absolute;top:0;left:0}.Transition>*:not(.Transition__slide--active):not(.from):not(.to){display:none !important}.Transition.skip-slide-transition{transition:none !important}.Transition.slide-optimized,.Transition.slide-optimized-rtl{contain:strict}body.is-safari .Transition.slide-optimized,body.is-safari .Transition.slide-optimized-rtl{transform:translate3d(0, 0, 0)}#root .Transition.slide-optimized>div,#root .Transition.slide-optimized-rtl>div{position:absolute;display:block !important;top:0;left:0;transition:transform var(--slide-transition);transform:scale(0)}.Transition.slide>.to{transform:translateX(100%)}.Transition.slide.animating>.from{animation:slide-out var(--slide-transition)}.Transition.slide.animating>.to{animation:slide-in var(--slide-transition)}.Transition.slide.backwards>.to{transform:translateX(-100%)}.Transition.slide.backwards.animating>.from{animation:slide-in-backwards var(--slide-transition)}.Transition.slide.backwards.animating>.to{animation:slide-out-backwards var(--slide-transition)}.Transition.slide-rtl>.to{transform:translateX(-100%)}.Transition.slide-rtl.animating>.from{animation:slide-out var(--slide-transition)}.Transition.slide-rtl.animating>.to{animation:slide-in var(--slide-transition)}.Transition.slide-rtl.backwards>.to{transform:translateX(100%)}.Transition.slide-rtl.backwards.animating>.from{animation:slide-in-backwards var(--slide-transition)}.Transition.slide-rtl.backwards.animating>.to{animation:slide-out-backwards var(--slide-transition)}.Transition.mv-slide>*>div{animation-fill-mode:forwards !important}.Transition.mv-slide>.to>div{transform:translateX(100vw)}.Transition.mv-slide.animating>.from>div{animation:mv-slide-out .4s ease}.Transition.mv-slide.animating>.to>div{animation:mv-slide-in .4s ease}.Transition.mv-slide.backwards>.to>div{transform:translateX(-100vw)}.Transition.mv-slide.backwards.animating>.from>div{animation:mv-slide-in-backwards .4s ease}.Transition.mv-slide.backwards.animating>.to>div{animation:mv-slide-out-backwards .4s ease}.Transition.slide-fade>.from{transform-origin:left;transform:translateX(0);opacity:1}.Transition.slide-fade>.to{transform-origin:left;transform:translateX(1.5rem);opacity:0}.Transition.slide-fade.animating>.from{animation:fade-out-opacity var(--slide-transition),slide-fade-out-move var(--slide-transition)}.Transition.slide-fade.animating>.to{animation:fade-in-opacity var(--slide-transition),slide-fade-in-move var(--slide-transition)}.Transition.slide-fade.backwards>.from{transform:translateX(0);opacity:1}.Transition.slide-fade.backwards>.to{transform:translateX(-1.5rem);opacity:0}.Transition.slide-fade.backwards.animating>.from{animation:fade-in-backwards-opacity var(--slide-transition),slide-fade-in-backwards-move var(--slide-transition)}.Transition.slide-fade.backwards.animating>.to{animation:fade-out-backwards-opacity var(--slide-transition),slide-fade-out-backwards-move var(--slide-transition)}.Transition.zoom-fade>.from{transform-origin:center;transform:scale(1);opacity:1}.Transition.zoom-fade>.to{transform-origin:center;opacity:0}.Transition.zoom-fade.animating>.from{animation:fade-out-opacity .15s ease}.Transition.zoom-fade.animating>.to{animation:fade-in-opacity .15s ease,zoom-fade-in-move .15s ease}.Transition.zoom-fade.backwards>.from{transform:scale(1)}.Transition.zoom-fade.backwards>.to{transform:scale(0.95)}.Transition.zoom-fade.backwards.animating>.from{animation:fade-in-backwards-opacity .1s ease,zoom-fade-in-backwards-move .15s ease}.Transition.zoom-fade.backwards.animating>.to{animation:fade-out-backwards-opacity .15s ease,zoom-fade-out-backwards-move .15s ease}.Transition.fade>.from{opacity:1}.Transition.fade>.to{opacity:0}.Transition.fade.animating>.from{animation:fade-out-opacity .15s ease}.Transition.fade.animating>.to{animation:fade-in-opacity .15s ease}.Transition.slide-layers{--background-color: var(--color-background);background:#000}.Transition.slide-layers>div{background:var(--background-color)}.Transition.slide-layers>.to{transform:translateX(100%)}.Transition.slide-layers.animating>.from{animation:slide-layers-out var(--layer-transition)}.Transition.slide-layers.animating>.to{animation:slide-in var(--layer-transition)}.Transition.slide-layers.backwards>.to{transform:translateX(-20%);opacity:.75}.Transition.slide-layers.backwards.animating>.from{animation:slide-in-backwards var(--layer-transition)}.Transition.slide-layers.backwards.animating>.to{animation:slide-layers-out-backwards var(--layer-transition)}.Transition.push-slide>div{background:var(--color-background)}.Transition.push-slide>.from{transform-origin:center;transform:scale(1);opacity:1}.Transition.push-slide>.from .custom-scroll{scrollbar-color:transparent !important}.Transition.push-slide>.from .custom-scroll::-webkit-scrollbar-thumb{background-color:transparent !important}.Transition.push-slide>.to{transform:translateX(100%)}.Transition.push-slide.animating>.from{animation:push-out .3s ease-in-out}.Transition.push-slide.animating>.to{animation:slide-in-200 .3s ease-in-out}.Transition.push-slide.backwards>.to{transform:scale(0.7)}.Transition.push-slide.backwards.animating>.from{animation:slide-in-200-backwards .3s ease-in-out}.Transition.push-slide.backwards.animating>.to{animation:push-out-backwards .3s ease-in-out}.Transition.reveal>.to{-webkit-clip-path:inset(0 100% 0 0);clip-path:inset(0 100% 0 0)}.Transition.reveal.animating>.to{animation:reveal-in 350ms ease-in}.Transition.reveal.backwards>.from{-webkit-clip-path:inset(0 0 0 0);clip-path:inset(0 0 0 0)}.Transition.reveal.backwards>.to{-webkit-clip-path:none;clip-path:none}.Transition.reveal.backwards.animating>.from{animation:reveal-in-backwards 350ms ease-out}.Transition.reveal.backwards.animating>.to{animation:none}@keyframes fade-in-opacity{0%{opacity:0}100%{opacity:1}}@keyframes fade-out-opacity{0%{opacity:1}100%{opacity:0}}@keyframes fade-in-backwards-opacity{0%{opacity:1}100%{opacity:0}}@keyframes fade-out-backwards-opacity{0%{opacity:0}100%{opacity:1}}@keyframes slide-in{0%{transform:translateX(100%)}100%{transform:translateX(0)}}@keyframes slide-out{0%{transform:translateX(0)}100%{transform:translateX(-100%)}}@keyframes slide-in-backwards{0%{transform:translateX(0)}100%{transform:translateX(100%)}}@keyframes slide-out-backwards{0%{transform:translateX(-100%)}100%{transform:translateX(0)}}@keyframes mv-slide-in{0%{transform:translateX(100vw)}100%{transform:translateX(0)}}@keyframes mv-slide-out{0%{transform:translateX(0)}100%{transform:translateX(-100vw)}}@keyframes mv-slide-in-backwards{0%{transform:translateX(0)}100%{transform:translateX(100vw)}}@keyframes mv-slide-out-backwards{0%{transform:translateX(-100vw)}100%{transform:translateX(0)}}@keyframes slide-fade-in-move{0%{transform:translateX(1.5rem)}100%{transform:translateX(0)}}@keyframes slide-fade-out-move{0%{transform:translateX(0)}100%{transform:translateX(-1.5rem)}}@keyframes slide-fade-in-backwards-move{0%{transform:translateX(0)}100%{transform:translateX(1.5rem)}}@keyframes slide-fade-out-backwards-move{0%{transform:translateX(-1.5rem)}100%{transform:translateX(0)}}@keyframes zoom-fade-in-move{0%{transform:scale(1.1)}100%{transform:scale(1)}}@keyframes zoom-fade-in-backwards-move{0%{transform:scale(1)}100%{transform:scale(1.1)}}@keyframes zoom-fade-out-backwards-move{0%{transform:scale(0.95)}100%{transform:scale(1)}}@keyframes slide-layers-out{0%{transform:translateX(0);opacity:1}100%{transform:translateX(-20%);opacity:calc(1 - var(--layer-blackout-opacity))}}@keyframes slide-layers-out-backwards{0%{transform:translateX(-20%);opacity:calc(1 - var(--layer-blackout-opacity))}100%{transform:translateX(0);opacity:1}}@keyframes push-out{0%{transform:scale(1);opacity:1}100%{transform:scale(0.7);opacity:0}}@keyframes push-out-backwards{0%{transform:scale(0.7);opacity:0}100%{transform:scale(1);opacity:1}}@keyframes slide-in-200{0%{transform:translateX(200%)}100%{transform:translateX(0)}}@keyframes slide-in-200-backwards{0%{transform:translateX(0)}100%{transform:translateX(200%)}}@keyframes reveal-in{0%{-webkit-clip-path:inset(0 100% 0 0);clip-path:inset(0 100% 0 0)}100%{-webkit-clip-path:inset(0 0 0 0);clip-path:inset(0 0 0 0)}}@keyframes reveal-in-backwards{0%{-webkit-clip-path:inset(0 0 0 0);clip-path:inset(0 0 0 0)}100%{-webkit-clip-path:inset(0 100% 0 0);clip-path:inset(0 100% 0 0)}} +.Transition{position:relative}.Transition>*{width:100%;height:100%;animation-fill-mode:forwards !important;transition:background-color .2s}.Transition>*.from,.Transition>*.to{position:absolute;top:0;left:0}.Transition>*:not(.Transition__slide--active):not(.from):not(.to){display:none !important}.Transition.skip-slide-transition{transition:none !important}.Transition.slide-optimized,.Transition.slide-optimized-rtl{contain:strict}body.is-safari .Transition.slide-optimized,body.is-safari .Transition.slide-optimized-rtl{transform:translate3d(0, 0, 0)}#root .Transition.slide-optimized>div,#root .Transition.slide-optimized-rtl>div{position:absolute;display:block !important;top:0;left:0;transition:transform var(--slide-transition);transform:scale(0)}.Transition.slide>.to{transform:translateX(100%)}.Transition.slide.animating>.from{animation:slide-out var(--slide-transition)}.Transition.slide.animating>.to{animation:slide-in var(--slide-transition)}.Transition.slide.backwards>.to{transform:translateX(-100%)}.Transition.slide.backwards.animating>.from{animation:slide-in-backwards var(--slide-transition)}.Transition.slide.backwards.animating>.to{animation:slide-out-backwards var(--slide-transition)}.Transition.slide-rtl>.to{transform:translateX(-100%)}.Transition.slide-rtl.animating>.from{animation:slide-out var(--slide-transition)}.Transition.slide-rtl.animating>.to{animation:slide-in var(--slide-transition)}.Transition.slide-rtl.backwards>.to{transform:translateX(100%)}.Transition.slide-rtl.backwards.animating>.from{animation:slide-in-backwards var(--slide-transition)}.Transition.slide-rtl.backwards.animating>.to{animation:slide-out-backwards var(--slide-transition)}.Transition.mv-slide>*>div{animation-fill-mode:forwards !important}.Transition.mv-slide>.to>div{transform:translateX(100vw)}.Transition.mv-slide.animating>.from>div{animation:mv-slide-out .4s ease}.Transition.mv-slide.animating>.to>div{animation:mv-slide-in .4s ease}.Transition.mv-slide.backwards>.to>div{transform:translateX(-100vw)}.Transition.mv-slide.backwards.animating>.from>div{animation:mv-slide-in-backwards .4s ease}.Transition.mv-slide.backwards.animating>.to>div{animation:mv-slide-out-backwards .4s ease}.Transition.slide-fade>.from{transform-origin:left;transform:translateX(0);opacity:1}.Transition.slide-fade>.to{transform-origin:left;transform:translateX(1.5rem);opacity:0}.Transition.slide-fade.animating>.from{animation:fade-out-opacity var(--slide-transition),slide-fade-out-move var(--slide-transition)}.Transition.slide-fade.animating>.to{animation:fade-in-opacity var(--slide-transition),slide-fade-in-move var(--slide-transition)}.Transition.slide-fade.backwards>.from{transform:translateX(0);opacity:1}.Transition.slide-fade.backwards>.to{transform:translateX(-1.5rem);opacity:0}.Transition.slide-fade.backwards.animating>.from{animation:fade-in-backwards-opacity var(--slide-transition),slide-fade-in-backwards-move var(--slide-transition)}.Transition.slide-fade.backwards.animating>.to{animation:fade-out-backwards-opacity var(--slide-transition),slide-fade-out-backwards-move var(--slide-transition)}.Transition.zoom-fade>.from{transform-origin:center;transform:scale(1);opacity:1}.Transition.zoom-fade>.to{transform-origin:center;opacity:0}.Transition.zoom-fade.animating>.from{animation:fade-out-opacity .15s ease}.Transition.zoom-fade.animating>.to{animation:fade-in-opacity .15s ease,zoom-fade-in-move .15s ease}.Transition.zoom-fade.backwards>.from{transform:scale(1)}.Transition.zoom-fade.backwards>.to{transform:scale(0.95)}.Transition.zoom-fade.backwards.animating>.from{animation:fade-in-backwards-opacity .1s ease,zoom-fade-in-backwards-move .15s ease}.Transition.zoom-fade.backwards.animating>.to{animation:fade-out-backwards-opacity .15s ease,zoom-fade-out-backwards-move .15s ease}.Transition.fade>.from{opacity:1}.Transition.fade>.to{opacity:0}.Transition.fade.animating>.from{animation:fade-out-opacity .15s ease}.Transition.fade.animating>.to{animation:fade-in-opacity .15s ease}.Transition.slide-layers{--background-color: var(--color-background);background:#000}.Transition.slide-layers>div{background:var(--background-color)}.Transition.slide-layers>.to{transform:translateX(100%)}.Transition.slide-layers.animating>.from{animation:slide-layers-out var(--layer-transition)}.Transition.slide-layers.animating>.to{animation:slide-in var(--layer-transition)}.Transition.slide-layers.backwards>.to{transform:translateX(-20%);opacity:.75}.Transition.slide-layers.backwards.animating>.from{animation:slide-in-backwards var(--layer-transition)}.Transition.slide-layers.backwards.animating>.to{animation:slide-layers-out-backwards var(--layer-transition)}.Transition.push-slide>div{background:var(--color-background)}.Transition.push-slide>.from{transform-origin:center;transform:scale(1);opacity:1}.Transition.push-slide>.from .custom-scroll{scrollbar-color:transparent !important}.Transition.push-slide>.from .custom-scroll::-webkit-scrollbar-thumb{background-color:transparent !important}.Transition.push-slide>.to{transform:translateX(100%)}.Transition.push-slide.animating>.from{animation:push-out .25s ease-in-out}.Transition.push-slide.animating>.to{animation:slide-in-200 .25s ease-in-out}.Transition.push-slide.backwards>.to{transform:scale(0.7)}.Transition.push-slide.backwards.animating>.from{animation:slide-in-200-backwards .25s ease-in-out}.Transition.push-slide.backwards.animating>.to{animation:push-out-backwards .25s ease-in-out}.Transition.reveal>.to{-webkit-clip-path:inset(0 100% 0 0);clip-path:inset(0 100% 0 0)}.Transition.reveal.animating>.to{animation:reveal-in 350ms ease-in}.Transition.reveal.backwards>.from{-webkit-clip-path:inset(0 0 0 0);clip-path:inset(0 0 0 0)}.Transition.reveal.backwards>.to{-webkit-clip-path:none;clip-path:none}.Transition.reveal.backwards.animating>.from{animation:reveal-in-backwards 350ms ease-out}.Transition.reveal.backwards.animating>.to{animation:none}@keyframes fade-in-opacity{0%{opacity:0}100%{opacity:1}}@keyframes fade-out-opacity{0%{opacity:1}100%{opacity:0}}@keyframes fade-in-backwards-opacity{0%{opacity:1}100%{opacity:0}}@keyframes fade-out-backwards-opacity{0%{opacity:0}100%{opacity:1}}@keyframes slide-in{0%{transform:translateX(100%)}100%{transform:translateX(0)}}@keyframes slide-out{0%{transform:translateX(0)}100%{transform:translateX(-100%)}}@keyframes slide-in-backwards{0%{transform:translateX(0)}100%{transform:translateX(100%)}}@keyframes slide-out-backwards{0%{transform:translateX(-100%)}100%{transform:translateX(0)}}@keyframes mv-slide-in{0%{transform:translateX(100vw)}100%{transform:translateX(0)}}@keyframes mv-slide-out{0%{transform:translateX(0)}100%{transform:translateX(-100vw)}}@keyframes mv-slide-in-backwards{0%{transform:translateX(0)}100%{transform:translateX(100vw)}}@keyframes mv-slide-out-backwards{0%{transform:translateX(-100vw)}100%{transform:translateX(0)}}@keyframes slide-fade-in-move{0%{transform:translateX(1.5rem)}100%{transform:translateX(0)}}@keyframes slide-fade-out-move{0%{transform:translateX(0)}100%{transform:translateX(-1.5rem)}}@keyframes slide-fade-in-backwards-move{0%{transform:translateX(0)}100%{transform:translateX(1.5rem)}}@keyframes slide-fade-out-backwards-move{0%{transform:translateX(-1.5rem)}100%{transform:translateX(0)}}@keyframes zoom-fade-in-move{0%{transform:scale(1.1)}100%{transform:scale(1)}}@keyframes zoom-fade-in-backwards-move{0%{transform:scale(1)}100%{transform:scale(1.1)}}@keyframes zoom-fade-out-backwards-move{0%{transform:scale(0.95)}100%{transform:scale(1)}}@keyframes slide-layers-out{0%{transform:translateX(0);opacity:1}100%{transform:translateX(-20%);opacity:calc(1 - var(--layer-blackout-opacity))}}@keyframes slide-layers-out-backwards{0%{transform:translateX(-20%);opacity:calc(1 - var(--layer-blackout-opacity))}100%{transform:translateX(0);opacity:1}}@keyframes push-out{0%{transform:scale(1);opacity:1}100%{transform:scale(0.7);opacity:0}}@keyframes push-out-backwards{0%{transform:scale(0.7);opacity:0}100%{transform:scale(1);opacity:1}}@keyframes slide-in-200{0%{transform:translateX(200%)}100%{transform:translateX(0)}}@keyframes slide-in-200-backwards{0%{transform:translateX(0)}100%{transform:translateX(200%)}}@keyframes reveal-in{0%{-webkit-clip-path:inset(0 100% 0 0);clip-path:inset(0 100% 0 0)}100%{-webkit-clip-path:inset(0 0 0 0);clip-path:inset(0 0 0 0)}}@keyframes reveal-in-backwards{0%{-webkit-clip-path:inset(0 0 0 0);clip-path:inset(0 0 0 0)}100%{-webkit-clip-path:inset(0 100% 0 0);clip-path:inset(0 100% 0 0)}} .ProgressSpinner{position:relative;z-index:1;width:3.375rem;height:3.375rem;background:rgba(0,0,0,.25) url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTkiIGhlaWdodD0iMTkiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZD0iTTEwLjcxNyA5Ljc1TDE4LjMgMi4xNjdhLjY4NC42ODQgMCAxMC0uOTY3LS45NjdMOS43NSA4Ljc4MyAyLjE2NyAxLjJhLjY4NC42ODQgMCAxMC0uOTY3Ljk2N0w4Ljc4MyA5Ljc1IDEuMiAxNy4zMzNhLjY4NC42ODQgMCAxMC45NjcuOTY3bDcuNTgzLTcuNTgzIDcuNTgzIDcuNTgzYS42ODEuNjgxIDAgMDAuOTY3IDAgLjY4NC42ODQgMCAwMDAtLjk2N0wxMC43MTcgOS43NXoiIGZpbGw9IiNGRkYiIGZpbGwtcnVsZT0ibm9uemVybyIgc3Ryb2tlPSIjRkZGIiBzdHJva2Utd2lkdGg9Ii43NSIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIvPjwvc3ZnPg==) no-repeat 49% 49%;border-radius:50%;cursor:pointer}.ProgressSpinner.no-cross{background:transparent !important;pointer-events:none}.ProgressSpinner.square{background-image:none}.ProgressSpinner.square::after{content:"";position:absolute;width:.8125rem;height:.8125rem;border-radius:.125rem;background-color:#fff;left:50%;top:50%;transform:translate3d(-50%, -50%, 0)}.ProgressSpinner.size-s,.ProgressSpinner.size-m{width:auto;height:auto;background:transparent url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTUiIGhlaWdodD0iMTUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZD0iTTguMjE4IDcuNWw1LjYzMy01LjYzM2EuNTA4LjUwOCAwIDEwLS43MTgtLjcxOEw3LjUgNi43ODIgMS44NjcgMS4xNDlhLjUwOC41MDggMCAxMC0uNzE4LjcxOEw2Ljc4MiA3LjVsLTUuNjMzIDUuNjMzYS41MDguNTA4IDAgMTAuNzE4LjcxOEw3LjUgOC4yMThsNS42MzMgNS42MzNhLjUwNi41MDYgMCAwMC43MTggMCAuNTA4LjUwOCAwIDAwMC0uNzE4TDguMjE4IDcuNXoiIGZpbGw9IiNGRkYiIGZpbGwtcnVsZT0ibm9uemVybyIgc3Ryb2tlPSIjRkZGIiBzdHJva2UtbGluZWpvaW49InJvdW5kIi8+PC9zdmc+) no-repeat 49% 49%}.ProgressSpinner.size-s.square,.ProgressSpinner.size-m.square{background-image:none;width:.75rem;height:.75rem}.ProgressSpinner.size-xl{width:3.25rem;height:3.25rem}.ProgressSpinner.size-xl svg{width:3rem;height:3rem;margin:.125rem}.ProgressSpinner.size-xl circle{stroke-width:3px}.ProgressSpinner.transparent{background-color:transparent !important}.ProgressSpinner svg{display:block;transform:rotate(-90deg);transform-origin:50% 50%;animation:4s linear 0s infinite ProgressSpinnerAnimation}.ProgressSpinner circle{transition:stroke-dashoffset .5s}@keyframes ProgressSpinnerAnimation{from{transform:rotate(0deg)}to{transform:rotate(360deg)}} .RangeSlider{--slider-color: var(--color-primary);margin-bottom:1rem}.RangeSlider.disabled{pointer-events:none;--slider-color: var(--color-text-secondary)}.RangeSlider .slider-top-row{display:flex;justify-content:space-between;margin-bottom:.625rem}.RangeSlider .slider-top-row .value{flex-shrink:0;margin-left:1rem;color:var(--color-text-secondary)}.RangeSlider .slider-top-row[dir=rtl] .value{margin-left:0;margin-right:1rem}.RangeSlider .slider-main{position:relative;z-index:1}.RangeSlider .slider-main::before{content:"";position:absolute;width:100%;left:0;top:.3125rem;height:.125rem;background-color:var(--color-borders);border-radius:.125rem;opacity:.5;z-index:-1}.RangeSlider .slider-fill-track{position:absolute;width:100%;left:0;top:.3125rem;height:.125rem;background-color:var(--slider-color);border-radius:.125rem;pointer-events:none}.RangeSlider.bold .slider-main::before{top:.25rem;height:.25rem}.RangeSlider.bold .slider-fill-track{top:.25rem;height:.25rem}.RangeSlider input[type=range]{-webkit-appearance:none;display:block;width:100%;height:.75rem;margin-bottom:.5rem;background:transparent}.RangeSlider input[type=range]:focus{outline:none}.RangeSlider input[type=range]::-ms-track{width:100%;cursor:pointer;background:transparent;border-color:transparent;color:transparent}.RangeSlider input[type=range]::-webkit-slider-thumb{-webkit-appearance:none}.RangeSlider input[type=range]::-moz-slider-thumb{-moz-appearance:none}.RangeSlider input[type=range]::-webkit-slider-runnable-track{cursor:pointer}.RangeSlider input[type=range]::-moz-range-track,.RangeSlider input[type=range]::-moz-range-progress{cursor:pointer}.RangeSlider input[type=range]::-webkit-slider-thumb{background:var(--slider-color);border:none;height:.75rem;width:.75rem;border-radius:50%;cursor:pointer;transform:scale(1);-webkit-transition:transform .25s ease-in-out;transition:transform .25s ease-in-out}.RangeSlider input[type=range]::-webkit-slider-thumb:hover{transform:scale(1.2)}.RangeSlider input[type=range]::-moz-range-thumb{background:var(--slider-color);border:none;height:.75rem;width:.75rem;border-radius:50%;cursor:pointer;transform:scale(1);-moz-transition:transform .25s ease-in-out;transition:transform .25s ease-in-out}.RangeSlider input[type=range]::-moz-range-thumb:hover{transform:scale(1.2)}.RangeSlider input[type=range]::-ms-thumb{background:var(--slider-color);border:none;height:.75rem;width:.75rem;border-radius:50%;cursor:pointer;transform:scale(1);-ms-transition:transform .25s ease-in-out;transition:transform .25s ease-in-out}.RangeSlider input[type=range]::-ms-thumb:hover{transform:scale(1.2)}.RangeSlider .slider-options{display:grid;grid-template-rows:auto;grid-auto-columns:1fr;grid-auto-flow:column}.RangeSlider .slider-option{font-size:.8125rem;text-align:center;cursor:pointer;color:var(--color-text-secondary);transition:color .2s ease}.RangeSlider .slider-option:hover,.RangeSlider .slider-option.active{color:var(--color-text)}.RangeSlider .slider-option.active{font-weight:500}.RangeSlider .slider-option:first-child{text-align:left}.RangeSlider .slider-option:last-child{text-align:right} .Avatar{--color-user: var(--color-primary);flex:none;align-items:center;justify-content:center;width:3.375rem;height:3.375rem;border-radius:50%;background:linear-gradient(var(--color-white) -125%, var(--color-user));color:#fff;font-weight:bold;display:flex;white-space:nowrap;-webkit-user-select:none;user-select:none}.Avatar__img{border-radius:50%;width:100%;height:100%}.Avatar .emoji{width:1rem;height:1rem}.Avatar__icon{font-size:2.5rem}.Avatar__icon.icon-reply-filled{transform:scale(0.7)}.Avatar.size-micro{width:1rem;height:1rem;font-size:.5rem}.Avatar.size-micro .emoji{width:.5625rem;height:.5625rem}.Avatar.size-tiny{width:2rem;height:2rem;font-size:.875rem}.Avatar.size-tiny .emoji{width:.875rem;height:.875rem}.Avatar.size-small{width:2.125rem;height:2.125rem;font-size:.875rem}.Avatar.size-small .emoji{width:.875rem;height:.875rem}.Avatar.size-medium{width:2.75rem;height:2.75rem;font-size:1.1875rem}.Avatar.size-medium .emoji{width:1rem;height:1rem}.Avatar.size-large{font-size:1.3125rem}.Avatar.size-large i{font-size:3.5rem}.Avatar.size-large .emoji{width:1.3125rem;height:1.3125rem}.Avatar.size-jumbo{width:7.5rem;height:7.5rem;font-size:3.5rem}.Avatar.size-jumbo__i{font-size:6rem}.Avatar.size-jumbo .emoji{width:3.5rem;height:3.5rem}.Avatar.online{position:relative}.Avatar.online::after{content:"";display:block;position:absolute;bottom:.0625rem;right:.0625rem;width:.875rem;height:.875rem;border-radius:50%;border:2px solid var(--color-background);background-color:#0ac630;flex-shrink:0}.Avatar.interactive{cursor:pointer} @@ -20,7 +20,7 @@ .LastMessageMeta{margin-right:.1875rem;padding:.3125rem 0 .125rem;flex-shrink:0;font-size:.75rem;line-height:1;display:flex;align-items:center}.LastMessageMeta .MessageOutgoingStatus{color:var(--color-text-meta-colored);margin-right:.125rem;font-size:1.125rem}body.is-ios .LastMessageMeta .MessageOutgoingStatus{margin-bottom:-0.125rem}.LastMessageMeta .time{color:var(--color-text-meta);line-height:1.125rem} .Badge-transition{opacity:1;transition:transform .3s cubic-bezier(0.34, 1.56, 0.64, 1)}.Badge-transition:not(.open){transform:scale(0);opacity:0}.Badge-transition:not(.shown){display:none}.Badge-transition.closing{transition:transform .2s ease-out,opacity .2s ease-out}.Badge-wrapper{display:flex}.Badge-wrapper .Badge{margin-inline-start:.5rem}.Badge{min-width:1.5rem;height:1.5rem;background:var(--color-gray);border-radius:.75rem;padding:0 .4375rem;color:#fff;font-size:.875rem;line-height:1.5625rem;font-weight:500;text-align:center;flex-shrink:0}body.is-macos .Badge{line-height:1.5rem}body.is-ios .Badge{line-height:1.375rem;min-width:1.375rem;height:1.375rem;padding:0 .375rem}.Badge.mention,.Badge.unread:not(.muted){background:var(--color-green);color:var(--color-white)}.Badge.pinned:not(.unread){color:var(--color-pinned);background:transparent;width:1.5rem;padding:0}.Badge.pinned:not(.unread) i{font-size:1.5rem}.Badge.mention{width:1.5rem;padding:.25rem}.Badge.mention i{font-size:1rem;vertical-align:super}body.is-ios .Badge.mention{width:1.375rem;padding:.25rem}body.is-ios .Badge.mention i{font-size:.875rem} @keyframes bar-animation-transform-1{0%{transform:scaleY(0.33)}12.5%{transform:scaleY(1.66)}25%{transform:scaleY(0.33)}37.5%{transform:scaleY(1)}50%{transform:scaleY(0.33)}62.5%{transform:scaleY(1.66)}75%{transform:scaleY(0.33)}87.5%{transform:scaleY(1.66)}100%{transform:scaleY(0.33)}}@keyframes bar-animation-transform-2{0%{transform:scaleY(1)}12.5%{transform:scaleY(0.33)}25%{transform:scaleY(1.66)}37.5%{transform:scaleY(0.33)}50%{transform:scaleY(1)}62.5%{transform:scaleY(0.33)}75%{transform:scaleY(1.66)}87.5%{transform:scaleY(0.33)}100%{transform:scaleY(1)}}.ChatCallStatus{position:absolute;right:6px;bottom:0;width:20px;height:20px;border-radius:50%;background-color:#0ac630;border:2px solid var(--color-background);overflow:hidden}.ChatCallStatus .indicator{width:100%;height:100%;display:flex;align-items:center;justify-content:center;border-radius:50%}.ChatCallStatus .indicator>div{width:2px;height:6px;background:var(--color-background);border-radius:1px;margin:1px;will-change:transform;transform:translateZ(0)}.ChatCallStatus .indicator>div:nth-child(odd){transform:scaleY(0.8)}.ChatCallStatus .indicator>div:nth-child(even){transform:scaleY(1.33)}.ChatCallStatus.selected{background-color:var(--color-white);border-color:var(--color-chat-active)}.ChatCallStatus.selected .indicator div{background-color:var(--color-chat-active)}.ChatCallStatus.active .indicator div:nth-child(odd){animation:bar-animation-transform-2 3.2s normal infinite}.ChatCallStatus.active .indicator div:nth-child(even){animation:bar-animation-transform-1 3.2s normal infinite} -.Chat{--background-color: var(--color-background);position:absolute;top:0;left:0;margin:0;width:100%}body.is-ios .Chat,body.is-macos .Chat{--color-text-meta: var(--color-text-meta-apple)}.Chat.animate-opacity{will-change:opacity;transition:opacity .2s ease-out}.Chat.animate-transform{will-change:transform;transition:transform .2s ease-out}.Chat:hover .Avatar.online::after,.Chat.ListItem.has-menu-open .Avatar.online::after{border-color:var(--color-chat-hover)}@media(max-width: 600px){.Chat.selected{--background-color: var(--color-chat-hover) !important}.Chat.selected .Avatar.online::after{border-color:var(--color-chat-hover)}}@media(min-width: 600px){.Chat.selected,.Chat.selected:hover{--background-color: var(--color-chat-active) !important}.Chat.selected .VerifiedIcon,.Chat.selected:hover .VerifiedIcon{--color-fill: #fff;--color-checkmark: var(--color-primary) }.Chat.selected .Avatar.online::after,.Chat.selected:hover .Avatar.online::after{border-color:var(--color-chat-active) !important;background:var(--color-white)}.Chat.selected .ListItem-button,.Chat.selected:hover .ListItem-button{--background-color: var(--color-chat-active) !important;--color-text: var(--color-white);--color-text-meta-colored: var(--color-white);--color-text-meta: var(--color-white);--color-text-secondary: var(--color-white);--color-error: var(--color-white);--color-pinned: var(--color-white)}.Chat.selected .icon-muted,.Chat.selected:hover .icon-muted{color:var(--color-white) !important}.Chat.selected .Badge:not(.pinned),.Chat.selected:hover .Badge:not(.pinned){background:var(--color-white);color:var(--color-chat-active)}}@media(max-width: 600px){.Chat .ListItem-button{border-radius:0 !important}}.Chat .status{position:relative;flex-shrink:0}.Chat .info .subtitle{margin-top:-0.125rem}.Chat .info h3{width:auto;max-width:80%}.Chat .info .icon-muted{font-size:1.25rem;margin-left:.25rem;margin-top:-0.0625rem;color:#c6c8ca}body.is-ios .Chat .info .icon-muted{margin-top:0;margin-right:.5rem}.Chat .info .LastMessageMeta{margin-left:auto}body.is-ios .Chat .info .LastMessageMeta{font-size:.875rem;margin-right:0}.Chat .info .last-message,.Chat .info .typing-status{padding-right:.25rem;flex-grow:1;color:var(--color-text-secondary);unicode-bidi:plaintext}.Chat .info .last-message[dir=ltr],.Chat .info .typing-status[dir=ltr]{text-align:left}.Chat .info .last-message .sender-name,.Chat .info .typing-status .sender-name{color:var(--color-text)}.Chat .info .last-message .draft,.Chat .info .typing-status .draft{color:var(--color-error)}.Chat .info .last-message .draft::after{content:": "}.Chat .info .last-message .colon{margin-inline-end:.25rem}.Chat .info .last-message img{width:1.25rem;height:1.25rem;object-fit:cover;border-radius:.125rem;vertical-align:-0.25rem;margin-inline-end:.25rem}body.is-ios .Chat .info .last-message img{width:1.125rem;height:1.125rem;vertical-align:-0.1875rem}.Chat .info .last-message img.round{border-radius:.625rem}.Chat .info .last-message .emoji-small{width:1rem;height:1rem;vertical-align:-0.125rem}.Chat .info .last-message .icon-play{position:relative;display:inline-block;font-size:.75rem;color:#fff;margin-inline-start:-1.25rem;margin-inline-end:.5rem;bottom:.0625rem}body.is-ios .Chat .info .last-message .icon-play{margin-inline-start:-1.125rem;bottom:0}.Chat[dir=rtl] .info .LastMessageMeta{margin-left:0;margin-right:auto}.Chat[dir=rtl] .info .title,.Chat[dir=rtl] .info .subtitle{padding-left:.125rem;padding-right:0}.Chat[dir=rtl] .info .icon-muted{margin-left:0;margin-right:.25rem}.Chat[dir=rtl] .info .last-message,.Chat[dir=rtl] .info .typing-status{padding-left:.5rem;padding-right:0;text-align:right;unicode-bidi:plaintext} +.Chat{--background-color: var(--color-background);position:absolute;top:0;left:0;margin:0;width:100%}body.is-ios .Chat,body.is-macos .Chat{--color-text-meta: var(--color-text-meta-apple)}.Chat.animate-opacity{will-change:opacity;transition:opacity .2s ease-out}.Chat.animate-transform{will-change:transform;transition:transform .2s ease-out}.Chat:hover .Avatar.online::after,.Chat.ListItem.has-menu-open .Avatar.online::after{border-color:var(--color-chat-hover)}@media(max-width: 600px){.Chat.selected{--background-color: var(--color-chat-hover) !important}.Chat.selected .Avatar.online::after{border-color:var(--color-chat-hover)}}@media(min-width: 600px){.Chat.selected,.Chat.selected:hover{--background-color: var(--color-chat-active) !important}.Chat.selected .VerifiedIcon,.Chat.selected:hover .VerifiedIcon{--color-fill: #fff;--color-checkmark: var(--color-primary) }.Chat.selected .Avatar.online::after,.Chat.selected:hover .Avatar.online::after{border-color:var(--color-chat-active) !important;background:var(--color-white)}.Chat.selected .ListItem-button,.Chat.selected:hover .ListItem-button{--background-color: var(--color-chat-active) !important;--color-text: var(--color-white);--color-text-meta-colored: var(--color-white);--color-text-meta: var(--color-white);--color-text-secondary: var(--color-white);--color-error: var(--color-white);--color-pinned: var(--color-white)}.Chat.selected .icon-muted,.Chat.selected:hover .icon-muted{color:var(--color-white) !important}.Chat.selected .Badge:not(.pinned),.Chat.selected:hover .Badge:not(.pinned){background:var(--color-white);color:var(--color-chat-active)}}@media(max-width: 600px){.Chat .ListItem-button{border-radius:0 !important}}.Chat .status{position:relative;flex-shrink:0}.Chat .info .subtitle{margin-top:-0.125rem}.Chat .info h3{width:auto;max-width:80%}.Chat .info .icon-muted{font-size:1.25rem;margin-left:.25rem;margin-top:-0.0625rem;color:#c6c8ca}body.is-ios .Chat .info .icon-muted{margin-top:0;margin-right:.5rem}.Chat .info .LastMessageMeta{margin-left:auto}body.is-ios .Chat .info .LastMessageMeta{font-size:.875rem;margin-right:0}.Chat .info .last-message,.Chat .info .typing-status{padding-right:.25rem;flex-grow:1;color:var(--color-text-secondary);unicode-bidi:plaintext}.Chat .info .last-message[dir=ltr],.Chat .info .typing-status[dir=ltr]{text-align:left}.Chat .info .last-message .sender-name,.Chat .info .typing-status .sender-name{color:var(--color-text)}.Chat .info .last-message .draft,.Chat .info .typing-status .draft{color:var(--color-error)}.Chat .info .last-message .draft::after{content:": "}.Chat .info .last-message .colon{margin-inline-end:.25rem}.Chat .info .last-message .media-preview--image{width:1.25rem;height:1.25rem;object-fit:cover;border-radius:.125rem;vertical-align:-0.25rem;margin-inline-end:.25rem}body.is-ios .Chat .info .last-message .media-preview--image{width:1.125rem;height:1.125rem;vertical-align:-0.1875rem}.Chat .info .last-message .media-preview--image.round{border-radius:.625rem}.Chat .info .last-message .emoji-small{width:1rem;height:1rem;vertical-align:-0.125rem}.Chat .info .last-message .icon-play{position:relative;display:inline-block;font-size:.75rem;color:#fff;margin-inline-start:-1.25rem;margin-inline-end:.5rem;bottom:.0625rem}body.is-ios .Chat .info .last-message .icon-play{margin-inline-start:-1.125rem;bottom:0}.Chat[dir=rtl] .info .LastMessageMeta{margin-left:0;margin-right:auto}.Chat[dir=rtl] .info .title,.Chat[dir=rtl] .info .subtitle{padding-left:.125rem;padding-right:0}.Chat[dir=rtl] .info .icon-muted{margin-left:0;margin-right:.25rem}.Chat[dir=rtl] .info .last-message,.Chat[dir=rtl] .info .typing-status{padding-left:.5rem;padding-right:0;text-align:right;unicode-bidi:plaintext} .AnimatedEmoji{cursor:pointer;margin-bottom:.75rem}.AnimatedEmoji img{position:absolute;width:100%;height:100%}.AnimatedEmoji.like-sticker-thumb img{transform:scale(0.8)} .EmptyFolder{width:100%;height:80%;display:flex;align-items:center;justify-content:center;flex-direction:column}@media(max-height: 480px){.EmptyFolder{height:100%}}.EmptyFolder .sticker{height:8rem;margin-bottom:1.875rem}.EmptyFolder .title{font-size:1.25rem;margin-bottom:.125rem}.EmptyFolder .description{font-size:.875rem;color:var(--color-text-secondary)}body.is-ios .EmptyFolder .description,body.is-macos .EmptyFolder .description{color:var(--color-text-secondary-apple)}.EmptyFolder .Button.pill{margin-top:.625rem;font-weight:500;padding-inline-start:.75rem;unicode-bidi:plaintext}.EmptyFolder .Button.pill i{margin-inline-end:.625rem;font-size:1.5rem} .NothingFound{display:flex;align-items:center;justify-content:center;color:var(--color-text-meta)}.NothingFound.with-description{flex-direction:column}.NothingFound .AnimatedSticker{margin:0 auto}.NothingFound .description{color:var(--color-text-secondary);font-size:.875rem;text-align:center;margin:1rem 0 0;unicode-bidi:plaintext} @@ -37,4 +37,4 @@ .TextFormatter{transform:translate(-50%, -3.25rem)}.TextFormatter,.TextFormatter-link-control{position:absolute;background:var(--color-background);border-radius:var(--border-radius-messages);padding:.5rem .375rem;box-shadow:0 1px 2px var(--color-default-shadow)}.TextFormatter-link-control{left:0;top:0;opacity:0;pointer-events:none;transition:opacity .3s ease}.Modal .TextFormatter-link-control{max-width:100%}@media(max-width: 600px){.TextFormatter-link-control{max-width:calc(100vw - var(--text-formatter-left) + 3rem)}}.TextFormatter-link-control input{border:none !important;outline:none !important;width:100%;color:var(--color-text);background-color:var(--color-background)}.TextFormatter-buttons,.TextFormatter-link-url-confirm{display:flex;flex-wrap:nowrap;align-items:center}.TextFormatter-divider{width:1px;height:1.75rem;margin:0 .25rem;background-color:var(--color-borders)}.TextFormatter-link-url-input-wrapper{width:20rem;position:relative;max-width:100%}@media(max-width: 600px){.TextFormatter-link-url-input-wrapper{max-width:90vw}}.TextFormatter-link-url-input-wrapper::before,.TextFormatter-link-url-input-wrapper::after{content:"";display:block;position:absolute;top:0;bottom:0;width:1rem;z-index:2;opacity:0;transition:opacity .2s ease}.TextFormatter-link-url-input-wrapper::before{left:0;background:linear-gradient(to right, var(--color-background) 0.25rem, transparent 1rem)}.TextFormatter-link-url-input-wrapper::after{right:0;background:linear-gradient(to left, var(--color-background) 0.25rem, transparent 1rem)}.TextFormatter-link-url-input-wrapper.mask-left::before{opacity:1}.TextFormatter-link-url-input-wrapper.mask-right::after{opacity:1}.TextFormatter-link-url-confirm{flex-shrink:0;opacity:0;transition:opacity .3s ease}.TextFormatter-link-url-confirm.shown{opacity:1}.TextFormatter.link-control-shown .TextFormatter-link-control{opacity:1;pointer-events:all}.TextFormatter .Button{width:2rem;height:2rem;padding:.25rem;font-size:1.5rem;margin:0 .125rem;border-radius:var(--border-radius-messages-small);flex-shrink:0;cursor:pointer}.TextFormatter .Button.active{background-color:var(--color-primary) !important;color:#fff}.TextFormatter .Button.disabled{opacity:.5;pointer-events:none} .Picker{height:100%;display:flex;flex-direction:column;overflow:hidden}.Picker .picker-header{padding:0 1rem .25rem .75rem;border-bottom:1px solid var(--color-borders);display:flex;flex-flow:row wrap;flex-shrink:0;overflow-y:auto;max-height:20rem}.Picker .picker-header .input-group{margin-bottom:.5rem;margin-left:.5rem;flex-grow:1}.Picker .picker-header .form-control{height:2rem;border:none;border-radius:0;padding:0;box-shadow:none}.Picker .picker-list{flex-grow:1;overflow-y:auto;overflow-x:hidden;padding:.5rem}@media(max-width: 600px){.Picker .picker-list{padding-left:0 !important;padding-right:0 !important}}.Picker .no-results{height:100%;margin:0;padding:1rem 1rem;display:flex;align-items:center;justify-content:center;color:var(--color-text-secondary)} -/*# sourceMappingURL=13.c4586e903a85e96ce217.css.map*/ \ No newline at end of file +/*# sourceMappingURL=13.c2828ad8a236049343ac.css.map*/ \ No newline at end of file diff --git a/dist/13.c2828ad8a236049343ac.css.map b/dist/13.c2828ad8a236049343ac.css.map new file mode 100644 index 000000000..b1c02359f --- /dev/null +++ b/dist/13.c2828ad8a236049343ac.css.map @@ -0,0 +1 @@ +{"version":3,"file":"13.c2828ad8a236049343ac.css","mappings":"AAAA,YACE,kBAEA,cACE,WACA,YACA,wCACA,gCAEA,oCAEE,kBACA,MACA,OAGF,kEACE,wBAKJ,kCACE,2BAMF,4DAEE,eACA,0FAEE,+BAGF,gFACE,kBACA,yBACA,MACA,OACA,6CACA,mBAKF,sBACE,2BAIA,kCACE,4CAGF,gCACE,2CAMJ,gCACE,4BAIA,4CACE,qDAGF,0CACE,sDAMJ,0BACE,4BAIA,sCACE,4CAGF,oCACE,2CAKF,oCACE,2BAIA,gDACE,qDAGF,8CACE,sDAWN,2BACE,wCAGF,6BACE,4BAIA,yCACE,gCAGF,uCACE,+BAMJ,uCACE,6BAIA,mDACE,yCAGF,iDACE,0CASJ,6BACE,sBACA,wBACA,UAGF,2BACE,sBACA,6BACA,UAIA,uCACE,+FAGF,qCACE,6FAMJ,uCACE,wBACA,UAGF,qCACE,8BACA,UAIA,iDACE,iHAIF,+CACE,mHAUJ,4BACE,wBACA,mBACA,UAGF,0BACE,wBACA,UAMA,sCACE,qCAGF,oCACE,gEAMJ,sCACE,mBAGF,oCACE,sBAIA,gDACE,mFAGF,8CACE,sFASJ,uBACE,UAGF,qBACE,UAIA,iCACE,qCAGF,+BACE,oCASN,yBACE,4CACA,gBAEA,6BACE,mCAGF,6BACE,2BAIA,yCACE,mDAGF,uCACE,2CAMJ,uCACE,2BACA,YAIA,mDACE,qDAGF,iDACE,6DAUJ,2BACE,mCAGF,6BACE,wBACA,mBACA,UAEA,4CACE,uCAEA,qEACE,wCAKN,2BACE,2BAIA,uCACE,oCAGF,qCACE,wCAMJ,qCACE,qBAIA,iDACE,kDAGF,+CACE,8CASJ,uBACE,gEAIA,iCACE,kCAMJ,mCACE,0DAGF,iCACE,sCAIA,6CACE,6CAGF,2CACE,eASR,2BACE,GACE,UAEF,KACE,WAIJ,4BACE,GACE,UAEF,KACE,WAIJ,qCACE,GACE,UAEF,KACE,WAIJ,sCACE,GACE,UAEF,KACE,WAOJ,oBACE,GACE,2BAEF,KACE,yBAIJ,qBACE,GACE,wBAEF,KACE,6BAIJ,8BACE,GACE,wBAEF,KACE,4BAIJ,+BACE,GACE,4BAEF,KACE,yBAOJ,uBACE,GACE,4BAEF,KACE,yBAIJ,wBACE,GACE,wBAEF,KACE,8BAIJ,iCACE,GACE,wBAEF,KACE,6BAIJ,kCACE,GACE,6BAEF,KACE,yBAOJ,8BACE,GACE,6BAEF,KACE,yBAIJ,+BACE,GACE,wBAEF,KACE,+BAIJ,wCACE,GACE,wBAEF,KACE,8BAIJ,yCACE,GACE,8BAEF,KACE,yBAOJ,6BACE,GACE,qBAEF,KACE,oBAIJ,uCACE,GACE,mBAEF,KACE,sBAIJ,wCACE,GACE,sBAEF,KACE,oBAOJ,4BACE,GACE,wBACA,UAEF,KACE,2BACA,iDAIJ,sCACE,GACE,2BACA,gDAEF,KACE,wBACA,WAQJ,oBACE,GACE,mBACA,UAEF,KACE,qBACA,WAIJ,8BACE,GACE,qBACA,UAEF,KACE,mBACA,WAOJ,wBACE,GACE,2BAEF,KACE,yBAIJ,kCACE,GACE,wBAEF,KACE,4BAOJ,qBACE,GACE,gEAEF,KACE,2DAOJ,+BACE,GACE,0DAEF,KACE,iE;AC7qBJ,iBACE,kBACA,UACA,eACA,gBACA,qFAGA,kBACA,eAEA,0BACE,kCACA,oBAGF,wBACE,sBAEA,+BACE,WACA,kBACA,eACA,gBACA,sBACA,sBACA,SACA,QACA,qCAIJ,gDAEE,WACA,YAEA,iFAIA,8DACE,sBACA,aACA,cAIJ,yBACE,cACA,eAEA,6BACE,WACA,YACA,eAGF,gCACE,iBAIJ,6BACE,wCAGF,qBACE,cACA,yBACA,yBACA,yDAGF,wBACE,iCAIJ,oCACE,KACE,uBAEF,GACE,0+B;ACnEJ,aACE,qCAEA,mBAEA,sBACE,oBACA,4CAGF,6BACE,aACA,8BACA,sBAEA,oCACE,cACA,iBACA,kCAIA,6CACE,cACA,kBAKN,0BACE,kBACA,UAEA,kCACE,WACA,kBACA,WACA,OACA,aACA,eACA,sCACA,sBACA,WACA,WAIJ,gCACE,kBACA,WACA,OACA,aACA,eACA,qCACA,sBACA,oBAIA,uCACE,WACA,cAGF,qCACE,WACA,cClEJ,+BACE,wBACA,cACA,WACA,cACA,oBACA,uBAEA,qCACE,aAGF,0CACE,WACA,eAEA,uBACA,yBACA,kBAGF,qDACE,wBAGF,kDACE,qBAGF,8DACE,eAGF,qGACE,eD2CF,qDA3FF,+BACA,YACA,cACA,aACA,kBACA,eACA,mBACA,oFAEA,2DACE,qBAqFA,iDA/FF,+BACA,YACA,cACA,aACA,kBACA,eACA,mBACA,iFAEA,uDACE,qBAyFA,0CAnGF,+BACA,YACA,cACA,aACA,kBACA,eACA,mBACA,gFAEA,gDACE,qBA8FF,6BACE,aACA,wBACA,sBACA,sBAGF,4BACE,mBACA,kBACA,eACA,kCACA,0BAEA,qEAEE,wBAGF,mCACE,gBAGF,wCACE,gBAGF,uCACE,iB;AEvIN,QACE,mCACA,UACA,mBACA,uBACA,eACA,gBACA,kBACA,wEACA,WACA,iBACA,aACA,mBACA,0CAEA,aACE,kBACA,WACA,YAGF,eACE,WACA,YAGF,cACE,iBAEA,gCACE,qBAIJ,mBACE,WACA,YACA,gBAEA,0BACE,eACA,gBAIJ,kBACE,WACA,YACA,kBAEA,yBACE,cACA,eAIJ,mBACE,eACA,gBACA,kBAEA,0BACE,cACA,eAIJ,oBACE,cACA,eACA,oBAEA,2BACE,WACA,YAIJ,mBACE,oBAEA,qBACE,iBAGF,0BACE,gBACA,iBAIJ,mBACE,aACA,cACA,iBAEA,sBACE,eAGF,0BACE,aACA,cAIJ,eACE,kBAEA,sBACE,WACA,cACA,kBACA,gBACA,eACA,cACA,eACA,kBACA,yCACA,yBACA,cAIJ,oBACE,e;AC7HJ,OACE,kBACA,uBAOE,4IACE,gBAKF,gCACE,gBAKF,4BACE,gBAKF,4BACE,gBAIJ,wBACE,eACA,MACA,SACA,OACA,QACA,aACA,uBACA,mBAGF,uBACE,eACA,MACA,QACA,SACA,OACA,WACA,iCAGF,4CACE,6BAGF,qBACE,kBACA,oBACA,sBACA,WACA,gBACA,kBACA,iBACA,yCACA,8DACA,2CACA,mCAEA,+CAEA,4CACE,gBACA,0BAGF,yBApBF,qBAqBI,yCAIJ,0BACE,+BAGF,6BACE,kCAGF,oDAEE,oBACA,aACA,mBACA,cAGF,oBACE,kBACA,gBACA,cACA,gBACA,uBAEA,qCACE,mBAIJ,+BAEE,4CAEA,oDACE,kBACA,eACA,WACA,qBACA,iBACA,qBACA,sBACA,eAIJ,sBACE,WACA,YACA,aACA,gBACA,gBAEA,qDAEE,sBAIJ,kEAGE,uBACA,mBAGF,oBACE,oBACA,4BACA,qBACA,uBACA,gBAGF,mBACE,kCACA,mBACA,gBAGF,uBACE,aACA,qBAEA,qEACE,iBAIJ,8BACE,WACA,YACA,iBACA,iBACA,gBACA,qB;AC/KJ,UACE,kBAIE,oGACE,WACA,kBACA,SACA,YACA,QAEA,YACA,iCAGF,oFACE,cAGF,8EACE,OAMF,oDACE,gBACA,uBAIJ,2BACE,WACA,yCACA,uBACA,2BACA,wBACA,aACA,aACA,kBACA,gBACA,mBACA,mBACA,wBACA,2CACA,oCAEA,6BACE,iBACA,kBACA,kCAIJ,oFAIE,mBACA,uBAIA,uCACE,kBACA,WAIJ,mBACE,oBAEA,oCACE,WAKF,0DACE,eAEA,gFACE,4BAGF,qBACE,gIAEE,6CAIJ,yBACE,iEACE,6CAMR,yBAGI,4HACE,yDAKN,yCACE,4CAGF,iBACE,qBAEA,kCACE,mBAIJ,mBACE,oBAGF,gBACE,4CAIA,uCACE,yBAEA,yCACE,cAKN,uBACE,kBAEA,+BACE,WAEA,gDACE,6BACA,8BAMJ,sFAEE,0DAGF,+CACE,iBAGF,sCACE,cACA,mBAGF,oCACE,YACA,gBAGF,6EAEE,gBACA,aACA,2BACA,mBAGF,gKAIE,eACA,sBACA,SACA,gBACA,mBACA,uBACA,mBAIA,wCACE,gBAGF,mDACE,cACA,eACA,mBAGF,4CACE,2BACA,wBACA,cAIJ,6FAEE,kBACA,oBACA,kCAGF,wCACE,aACA,mBACA,YACA,gBAEA,uGAEE,kBACA,oBACA,kCACA,qBAEA,qHACE,2BAGF,oPAEE,mBACA,WAGF,gTAEE,kBAKN,6PAME,mBACA,uBAMA,4UAEE,mBAKF,wDACE,4CAGF,+CACE,kBACA,eAGF,qDACE,WAMJ,uCACE,sBAGF,mCACE,cAGF,6EAEE,eACA,mBACA,gBACA,mBACA,uBACA,gBACA,cAGF,iDACE,iBACA,eAGF,0CACE,kCAEA,mEACE,wBACA,mBACA,qBACA,kBACA,qBAEA,+EACE,mBAMJ,0DACE,cACA,kBAGF,mDACE,eACA,cAKN,2BACE,SAEA,4CACE,eACA,aACA,mBAGF,mCACE,WACA,YAGF,qCACE,cACA,cACA,SACA,kBAIA,8CACE,eACA,mBAKN,0BACE,YACA,oBACA,gBAEA,qEAEE,cACA,mBAGF,iCACE,oBACA,gBACA,uBAGF,oCACE,kBACA,mBACA,kCAEA,8CACE,oBAGF,0CACE,wBAMJ,sCACE,iBACA,e;ACnZN,cACE,qBACA,cACA,aACA,cAEA,mCACA,wB;ACPF,cACE,oBACA,qBAEA,wBACE,aACA,WACA,gBAEA,+BACE,cACA,oDAEA,0FAEE,iCAMR,yBACE,KACE,6BAIJ,6BACE,KACE,4B;AC7BJ,2BACE,qBACA,oCAGE,WACE,kCACA,C;ACPN,wBACE,kBACA,YACA,gBACA,mBACA,8BAEA,0BAPF,wBAQI,8CAGF,sCACE,mBAEA,wDACE,oBAKN,cACE,4FAGA,uBACA,2CACA,4CACA,WACA,eAEA,6GAGE,sBACA,0BAGF,uBACE,iBACA,sBACA,+e;ACxCJ,OACE,cACA,kBACA,oBACA,gBACA,qBACA,mBACA,eAEA,gBACE,oBACA,WAGF,qBACE,eAEE,iFAEE,kBAKN,aACE,kBACA,uBACA,UAIA,qDAEE,WACA,cACA,kBACA,eACA,QACA,cACA,eACA,2BAGF,2BACE,4CACA,kBACA,yCACA,UACA,kDAGF,0BACE,cACA,cACA,eACA,kBACA,gCACA,UACA,4BAGF,0BACE,cACA,sBACA,uBACA,gBAGF,6BACE,cACA,kBACA,iBACA,kCACA,uBAKF,yCACE,kCAGF,wCACE,UAKF,qEAEE,qBAGF,wBACE,kBACA,eACA,QACA,2BACA,UACA,oCACA,wBAIJ,gBACE,eACA,qBAEA,4BACE,iBAEA,oCACE,UACA,gBAGF,mCACE,UACA,eAIJ,iDAEE,iBAGF,iCACE,UACA,gBAKN,mBACE,KACE,UAEF,GACE,W;AC3IJ,qBACE,WACA,c;ACFF,KACE,aACA,uBACA,cACA,wCACA,gBACA,WACA,SACA,YACA,uBACA,gBACA,kCACA,eACA,2DACA,4DAEA,4BAGE,aAGF,aACE,eACA,2BAEA,eACE,qBAIJ,qBACE,6BACE,mDAIJ,yBACE,8BACE,mDAIJ,UACE,kBACA,aACA,mBACA,mBAGF,YACE,kBACA,eACA,0BACA,6BACA,qBACA,mBACA,WACA,kBACA,sBACA,gBACA,kBACA,cAEA,kDAEE,oBAIJ,oBACE,2CAGF,OACE,kBACA,6BACA,OACA,UACA,sCACA,gBACA,WACA,oCACA,oBACA,uBACA,sBAEA,eACE,6CAEA,sCACE,2B;AC3FR,SACE,gBACA,MACA,cACA,aACA,8BACA,qBACA,kBACA,iBACA,+CACA,yCACA,gBACA,kBAEA,qBACA,8BAEA,aACE,eACA,kCAGF,4BACE,SAGF,kCACE,+BAEA,yC;AC5BF,+BACE,gBAGF,+BACE,2BAGF,+CACE,oBAGF,gCACE,sBAGF,wCACE,uB;AClBJ,aACE,kBACA,WACA,iDACA,yCACA,yCACA,uBACA,kCAEA,8BACE,aAEA,2CACE,aAGF,oCACE,mBAIA,6CACE,oBACA,eAKN,uBACE,kCACA,iCACA,yCAGE,+BACE,2BAKN,mBACE,cACA,gBACA,uBACA,uBACA,wCACA,2BACA,wJAGA,gCACE,gCAIJ,eACE,kBACA,UACA,YACA,mBACA,oBAGF,sBACE,kBACA,MACA,QACA,cACA,aAEA,+BACE,uBAIJ,qBACE,kBACA,YACA,cACA,eAGF,yBACE,mBACE,cACA,sBACA,kDAGF,eACE,WAKF,4BACE,cAGF,wBACE,UACA,aAGF,+BACE,WACA,WAGF,8BACE,aACA,W;AC/GN,oBACE,aACA,mBACA,mCACA,YACA,eACA,kBACA,oBACA,mBACA,mBACA,eACA,kBACA,gBACA,cACA,sCAEA,4BAEA,8BACE,gBAGF,0BACE,0CAGF,oCACE,oDAEA,iDACE,UAGF,2FAEE,UAKF,6CACE,gCAGF,sCACE,mCAGF,2CACE,kBAIJ,iCACE,cACA,kBACA,WACA,eAEA,kCAGF,2DAEE,WACA,YACA,UACA,cACA,6BAEA,sJACE,eAIJ,+BACE,aACA,mBACA,uBACA,gBACA,kBACA,sCACA,WAEA,iCACE,kBACA,kBACA,SAIJ,+BACE,kBACA,mBACA,gBACA,uBAEA,kDACE,eACA,gBACA,yBACA,oBAIJ,iCACE,kBACA,OACA,MACA,WACA,YACA,kBACA,aACA,mBACA,uBACA,oCACA,iBACA,WACA,UACA,6BAGF,6BACE,kBACA,gBAEA,uCACE,gBACA,eAGF,0CACE,UACA,gBAGF,wCACE,cACA,mBAGF,0CACE,UACA,Q;AC/IN,UACE,oBACA,mBACA,kBACA,SAEA,mBACE,oBACA,WAGF,mBACE,oBAKA,8JAEE,2BAGF,kGACE,eAIJ,gBACE,SACA,QACA,kBACA,kBACA,uBACA,UAGF,kBACE,eACA,mBACA,eACA,eACA,mCACA,qBACA,oBACA,kBACA,wCAGF,wBACE,WACA,kBACA,cACA,OACA,eACA,gBACA,yCACA,qBAEA,qCACA,uCAGF,gCACE,gCAGF,sCACE,2BACA,6CACA,kCAGF,+BACE,c;ACzEJ,uBACE,gBACA,iBACA,gBACA,qBACA,cACA,oBAEA,yBACE,mCAGF,+CACE,qBAGF,mCACE,WACA,Y;AClBJ,iBACE,sBACA,2BACA,cACA,iBACA,cACA,aACA,mBAEA,wCACE,qCACA,qBACA,mBAEA,oDACE,wBAIJ,uBACE,6BACA,qB;ACrBJ,kBACE,UACA,2DAEA,6BACE,mBACA,UAGF,8BACE,aAGF,0BACE,uDAIJ,eACE,aAEA,sBACE,0BAIJ,OACE,iBACA,cACA,6BACA,qBACA,mBACA,WACA,kBACA,sBACA,gBACA,kBACA,cAEA,qBACE,mBAGF,mBACE,qBACA,mBACA,gBACA,kBAGF,yCAEE,8BACA,yBAGF,2BACE,0BACA,uBACA,aACA,UAEA,6BACE,iBAIJ,eACE,aACA,eAEA,iBACE,eACA,qBAGF,2BACE,eACA,eAEA,6BACE,kB;AChFR,qCACE,0BACA,6BACA,2BACA,0BACA,2BACA,6BACA,2BACA,6BACA,6BAGF,qCACE,uBACA,6BACA,2BACA,6BACA,wBACA,6BACA,2BACA,6BACA,0BAIF,gBACE,kBACA,UACA,SACA,WACA,YACA,kBACA,yBACA,yCACA,gBAEA,2BACE,WACA,YACA,aACA,mBACA,uBACA,kBACA,+BACE,UACA,WACA,mCACA,kBACA,WACA,sBACA,wBAEF,8CACE,sBAEF,+CACE,uBAIJ,yBACE,oCACA,sCACA,wCACE,0CAKF,qDACE,yDAGF,sDACE,yD;AC3EN,MACE,4CAOA,kBACA,MACA,OACA,SACA,WATA,sCAEE,gDASF,sBACE,oBACA,gCAGF,wBACE,sBACA,kCAKA,qFACE,qCAIJ,yBACE,eACE,uDAEA,qCACE,sCAKN,yBACE,oCAEE,wDAEA,gEACE,mBACA,yCAGF,gFACE,iDACA,8BAGF,sEACE,wDACA,iCACA,8CACA,sCACA,2CACA,kCACA,mCAGF,4DACE,oCAGF,4EACE,8BACA,gCAKN,yBACE,uBACE,4BAIJ,cACE,kBACA,cAIA,sBACE,qBAGF,eACE,WACA,cAGF,wBACE,kBACA,mBACA,sBACA,cAEA,oCACE,aACA,mBAIJ,6BACE,iBAEA,yCACE,kBACA,eAIJ,qDAEE,qBACA,YACA,kCACA,uBAEA,uEACE,gBAGF,+EACE,wBAGF,mEACE,yBAMA,wCACE,aAIJ,iCACE,yBAGF,gDACE,cACA,eACA,iBACA,sBACA,wBACA,yBAEA,4DACE,eACA,gBACA,0BAGF,sDACE,sBAIJ,uCACE,WACA,YACA,yBAGF,qCACE,kBACA,qBACA,iBACA,WACA,6BACA,wBACA,gBAEA,iDACE,8BACA,SAQJ,sCACE,cACA,kBAGF,2DAEE,qBACA,gBAGF,iCACE,cACA,oBAGF,uEAEE,mBACA,gBACA,iBACA,uB;ACvNR,eACE,eACA,qBAEA,mBACE,kBACA,WACA,YAGF,sCACE,qB;ACXJ,aACE,WACA,WACA,aACA,mBACA,uBACA,sBAEA,0BARF,aASI,aAGF,sBACE,YACA,uBAGF,oBACE,kBACA,sBAGF,0BACE,kBACA,kCAEA,8EAEE,wCAIJ,0BACE,mBACA,gBACA,4BACA,uBAEA,4BACE,0BACA,iB;ACxCN,cACE,aACA,mBACA,uBACA,6BAEA,+BACE,sBAGF,+BACE,cAGF,2BACE,kCACA,kBACA,kBACA,gBACA,uB;ACnBJ,OACE,SACA,oBACA,gBACA,kBACA,eAEA,uBACE,kBACA,YACA,WACA,2BACA,WACA,iBACA,mBACA,uBACA,qBAGF,WACE,kBACA,OACA,MACA,WACA,YACA,iB;ACzBJ,SACE,gBACA,2BACA,kBACA,qBACA,kBAEA,kBACE,kBAGF,+BACE,2BACA,WACA,YACA,kBACA,OACA,MACA,yDACA,WACA,aACA,mBACA,uBACA,kDACA,yBACA,gBACA,iBAGF,gBACE,kBACA,OACA,MACA,WACA,YACA,0BACA,gCACA,6DAGF,oEAGE,sBACA,mBAGF,oBACE,cACA,yBACA,gBACA,mBACA,gBACA,uBAGF,qBACE,eACA,gBACA,uBACA,sBAGF,iDAEE,gBACA,kCACA,qBACA,mBACA,oBACA,qBACA,4BACA,gBAGF,sBACE,kBAGF,kCACE,sBACA,uBAGF,kBACE,2BAEA,iEAEE,UACA,QAGF,2BACE,iB;AC9FN,oDACE,aAaA,mBACA,oBAZA,0CACE,sBAGF,eACE,0BACA,qBAFF,eAGI,6BAOJ,iBACE,2DAGF,cAGE,gBACA,yBACA,kDACA,gCACA,aACA,mBACA,uBACA,sBAGF,iBACE,MACA,OACA,kBAGF,yBACE,qBACA,cACA,kBACA,WACA,4BAEA,cACE,gBACA,wBACA,yBAGF,UACE,cACA,kBACA,MACA,QACA,iCACA,2BACA,qFACA,mCACA,mBACA,qCAEA,qBAIJ,sBACE,gBACA,qEAEA,yBAEE,kDACA,yBAGF,gBACE,oBAIJ,UACE,iBACA,kBACA,MACA,eACA,gBACA,aACA,mBACA,uBACA,UACA,wBACA,wCAGF,cACE,gEAGE,cACE,2DAGF,SACE,kEAEA,SACE,wDAIJ,SACE,kBAKN,mBACE,qBACA,mBACA,gBACA,YACA,wBAEA,gBACE,kCACA,kBACA,mBACA,mBAIJ,cACE,mBACA,gBACA,gBACA,uBACA,0BAEA,mBACE,sBAIJ,iBACE,qBACA,6BACA,eACA,gBACA,uBACA,wCAGE,aACE,eAKN,2CACE,0CACA,8GAEA,UAIE,YACA,0BAGF,sBACE,iCAEA,0BACE,0BAIJ,oBACE,2BAGF,eACE,8BAGF,gBACE,2KAMF,kBAGE,eACA,qDAGF,gBACE,iEAEA,cACE,mBACA,yDAIJ,SACE,QACA,+CAQJ,mCACE,qDAGF,qCACE,mDAGF,wCACE,C;ACxOJ,OACE,aACA,uBACA,kBAEA,sBACE,kBACA,oBAEA,kCACE,mBAIJ,WACE,4CACA,oDACA,qEACA,qEAEA,uBACE,sCACA,uCAGF,mBACE,yCACA,0CACA,wDACA,2CAEA,+BACE,4BACA,mCAKN,oBACE,wBAEA,sCACE,2BAGF,4BACE,WACA,YACA,yBAEA,8BACE,mBAEA,yCACE,oBAKN,sBACE,kBAEA,gCACE,qBACA,yBAFF,gCAGI,qBAKN,+DAEE,UACA,mBACA,uEAGF,yJAIE,UACA,qBAIJ,wBACE,kBACA,2BACA,4BACA,UACA,eACA,cACA,6CACA,UAEA,0BACE,mBAIJ,+BACE,UACA,SACA,6CAGF,gBACE,kBACA,YACA,YACA,mBAGF,oBACE,aACA,8BAGF,cACE,gBACA,SACA,iBACA,mBACA,gBACA,uBAGF,cACE,YAGF,uBACE,kBACA,kBACA,kCACA,kCACA,aACA,qBAEA,qCACE,WACA,kBACA,0BACA,eACA,gBACA,kBACA,qCAKF,iDACE,uBAIJ,sCACE,2BAGF,iBACE,eACA,gBACA,kBAGF,4CAGE,kBACA,kCACA,SACA,gBACA,mBACA,uBACA,uBAGF,iBACE,kBACA,kCACA,mBACA,gBACA,uBACA,cACA,kCAGF,aACE,aACA,mBACA,mBACA,yBAEA,kBACE,YACA,mBACA,gBACA,uBAGF,wBACE,cAGF,qCACE,0BAGF,qBACE,gBACA,cAIJ,iBACE,YACA,eACA,kBACA,QACA,eACA,kBAEA,yBACE,WACA,kBACA,WACA,QACA,WACA,mDACA,kBAIJ,+BACE,kBACA,WACA,kBACA,gBACA,WACA,QAEA,iCACE,kBACA,WACA,iDACA,WACA,kBACA,WAIJ,mCACE,WACA,kBAEA,kBACA,QAEA,mDAGF,uBACE,kBACA,WACA,QACA,OAEA,yBACE,oBACA,kBACA,WACA,WAEA,gCACE,WACA,kBACA,SACA,WACA,WACA,YACA,kBACA,2CAMJ,qBACE,mBACA,gBACA,uBACA,gBACA,mBAGF,oBACE,eAGF,6CAEE,sBAGF,wBACE,iBAGF,6BACE,aACA,cAIA,sCACE,qBACA,QAKN,mCACE,cACA,eAIA,2BACE,sBAGF,6BACE,kBACA,eAEA,qCACE,mBACA,eAIJ,6CACE,4BAGF,mDAEE,iBAGF,iCACE,UACA,WAKN,oBACE,mBACA,8BACE,uB;AC1WJ,cACE,WACA,YACA,eACA,kBAEA,4BACE,WACA,iBAGF,+BACE,WACA,YAGF,mJAKE,aACA,mBACA,uBACA,yBACA,wEACA,eAGF,uBACE,gBAGF,6FAGE,gB;ACpCJ,aACE,iBACA,kBAEA,kCACE,qBACE,WACA,iBACA,WAGF,oBACE,cACA,WACA,YAIJ,4BACE,WACA,kBACA,OACA,MACA,SAEA,wCACE,WACA,YAIJ,2BACE,kBACA,WACA,eACA,kBACA,UAEA,aACA,UACA,OAGF,yBACE,cACA,oCACA,YACA,sBACA,iBACA,8BAEA,iCACE,YAIJ,yBACE,kBACA,MACA,SACA,UACA,YACA,UACA,SACA,wCACA,iCACA,wBACA,YACA,wBACA,aACA,eACA,UAEA,sEAEE,UAGF,8BACE,OACA,yDACA,gCAGF,8BACE,QACA,yDACA,6CAIJ,mBACE,kBACA,SACA,OACA,WACA,iBACA,uBACA,+EACA,yBACA,aACA,sBACA,yBACA,oBAGE,oCACE,iBACA,uBAKF,oCACE,iBACA,uBAKN,oBACE,aACA,mBAEA,uBACE,gBACA,kBACA,qBACA,qBACA,sBACA,qBAGF,kCACE,mBACA,qBAGF,2BACE,aACA,cACA,uBAIJ,qBACE,kBACA,WAIA,uCACE,UACA,QACA,qBAGF,uCACE,OACA,WACA,qBAIJ,kBACE,wBACA,gBAEA,wBACE,SAGF,wBACE,sBAGF,0BACE,+C;ACjLN,YACE,2CACA,mCACA,gBACA,cACA,WACA,mBACA,iBACA,kBACA,uBACA,aACA,cACA,iDAEA,0BAdF,YAeI,gBAGF,oCACE,2BACA,mDAGF,wBACE,oBAGF,uBACE,gBAGF,4BACE,oBACA,2CACA,oBACA,cACA,aACA,sBACA,mBACA,uBACA,0CAGF,kBACE,kBACA,sBACA,sBAEA,0BALF,kBAMI,kBACA,mBACA,oBAGF,0BAXF,kBAYI,eACA,iBACA,oBACA,mBAIJ,mBACE,oBACA,gBACA,uBAEA,0BALF,mBAMI,gBAIJ,yBACE,eACA,oBAEA,0BAJF,yBAKI,mB;AC7EN,sBACE,kBACA,WACA,YACA,yEACA,4DAEA,6CACE,2BAGF,+BACE,yE;ACZJ,UACE,kBACA,MACA,QACA,OACA,aACA,2BACA,uBAEA,aACA,sBAEA,kCACE,iD;ACbJ,eACE,qBACA,WACA,YACA,aACA,kDACA,wCACA,wBACA,kEACA,kBAEA,2BACE,eAEA,iCACE,wDAEA,wDACE,UAKN,yBAvBF,eAwBI,eAGF,0BACE,yBACA,eACA,eAGF,qBACE,YACA,aACA,SAGF,wEAGE,kBACA,MACA,OACA,WACA,YAGF,wCAEE,mBACA,2BACA,0CAGF,sCACE,kBACA,YACA,cACA,cACA,eACA,gBAMA,UAJA,wCACE,eAMJ,qCACE,kBAEA,6CACE,W;AC3EN,eACE,oCAEA,2CAEE,kBACA,mCACA,4CACA,sBACA,iDAGF,4BACE,OACA,MACA,UACA,oBACA,4BAEA,mCACE,eAGF,yBAXF,4BAYI,2DAGF,kCACE,uBACA,wBACA,WACA,wBACA,yCAIJ,uDAEE,aACA,iBACA,mBAGF,uBACE,UACA,eACA,gBACA,sCAGF,sCACE,YACA,kBACA,eAEA,yBALF,sCAMI,gBAGF,2FAEE,WACA,cACA,kBACA,MACA,SACA,WACA,UACA,UACA,4BAGF,8CACE,OACA,wFAGF,6CACE,QACA,uFAIA,wDACE,UAKF,wDACE,UAKN,gCACE,cACA,UACA,4BAEA,sCACE,UAKF,8DACE,UACA,mBAIJ,uBACE,WACA,YACA,eACA,iBACA,iBACA,kDACA,cACA,eAEA,8BACE,iDACA,WAGF,gCACE,WACA,oB;ACjIN,QACE,YACA,aACA,sBACA,gBAEA,uBACE,6BACA,6CACA,aACA,mBACA,cAEA,gBACA,iBAEA,oCACE,oBACA,kBACA,YAGF,qCACE,YACA,YACA,gBACA,UACA,gBAIJ,qBACE,YACA,gBACA,kBACA,cAEA,yBANF,qBAOI,0BACA,4BAIJ,oBACE,YACA,SACA,kBACA,aACA,mBACA,uBACA,kC","sources":["webpack://telegram-t/./src/components/ui/Transition.scss","webpack://telegram-t/./src/components/ui/ProgressSpinner.scss","webpack://telegram-t/./src/components/ui/RangeSlider.scss","webpack://telegram-t/./src/styles/_mixins.scss","webpack://telegram-t/./src/components/common/Avatar.scss","webpack://telegram-t/./src/components/ui/Modal.scss","webpack://telegram-t/./src/components/ui/ListItem.scss","webpack://telegram-t/./src/components/common/VerifiedIcon.scss","webpack://telegram-t/./src/components/common/DotAnimation.scss","webpack://telegram-t/./src/components/common/TypingStatus.scss","webpack://telegram-t/./src/components/ui/Notification.scss","webpack://telegram-t/./src/components/ui/Radio.scss","webpack://telegram-t/./src/components/common/ReactionStaticEmoji.scss","webpack://telegram-t/./src/components/ui/Tab.scss","webpack://telegram-t/./src/components/ui/TabList.scss","webpack://telegram-t/./src/components/common/DeleteChatModal.scss","webpack://telegram-t/./src/components/ui/SearchInput.scss","webpack://telegram-t/./src/components/common/PickerSelectedItem.scss","webpack://telegram-t/./src/components/ui/Switcher.scss","webpack://telegram-t/./src/components/common/MessageOutgoingStatus.scss","webpack://telegram-t/./src/components/common/LastMessageMeta.scss","webpack://telegram-t/./src/components/left/main/Badge.scss","webpack://telegram-t/./src/components/left/main/ChatCallStatus.scss","webpack://telegram-t/./src/components/left/main/Chat.scss","webpack://telegram-t/./src/components/common/AnimatedEmoji.scss","webpack://telegram-t/./src/components/left/main/EmptyFolder.scss","webpack://telegram-t/./src/components/common/NothingFound.scss","webpack://telegram-t/./src/components/common/Media.scss","webpack://telegram-t/./src/components/common/WebLink.scss","webpack://telegram-t/./src/components/common/File.scss","webpack://telegram-t/./src/components/common/Audio.scss","webpack://telegram-t/./src/components/common/ProfilePhoto.scss","webpack://telegram-t/./src/components/common/ProfileInfo.scss","webpack://telegram-t/./src/components/middle/composer/DropTarget.scss","webpack://telegram-t/./src/components/ui/FloatingActionButton.scss","webpack://telegram-t/./src/components/middle/composer/DropArea.scss","webpack://telegram-t/./src/components/common/StickerButton.scss","webpack://telegram-t/./src/components/middle/composer/TextFormatter.scss","webpack://telegram-t/./src/components/common/Picker.scss"],"sourcesContent":[".Transition {\n position: relative;\n\n > * {\n width: 100%;\n height: 100%;\n animation-fill-mode: forwards !important;\n transition: background-color 0.2s;\n\n &.from,\n &.to {\n position: absolute;\n top: 0;\n left: 0;\n }\n\n &:not(.Transition__slide--active):not(.from):not(.to) {\n display: none !important; // Best performance when animating container\n //transform: scale(0); // Shortest initial delay\n }\n }\n\n &.skip-slide-transition {\n transition: none !important;\n }\n\n /*\n * slide\n */\n &.slide-optimized,\n &.slide-optimized-rtl {\n contain: strict;\n body.is-safari & {\n // Create a new composite layer to reduce the page repaint area when switching a tab (as `contain` is not supported in Safari)\n transform: translate3d(0, 0, 0);\n }\n\n #root & > div {\n position: absolute;\n display: block !important;\n top: 0;\n left: 0;\n transition: transform var(--slide-transition);\n transform: scale(0);\n }\n }\n\n &.slide {\n > .to {\n transform: translateX(100%);\n }\n\n &.animating {\n > .from {\n animation: slide-out var(--slide-transition);\n }\n\n > .to {\n animation: slide-in var(--slide-transition);\n }\n }\n }\n\n &.slide.backwards {\n > .to {\n transform: translateX(-100%);\n }\n\n &.animating {\n > .from {\n animation: slide-in-backwards var(--slide-transition);\n }\n\n > .to {\n animation: slide-out-backwards var(--slide-transition);\n }\n }\n }\n\n &.slide-rtl {\n > .to {\n transform: translateX(-100%);\n }\n\n &.animating {\n > .from {\n animation: slide-out var(--slide-transition);\n }\n\n > .to {\n animation: slide-in var(--slide-transition);\n }\n }\n\n &.backwards {\n > .to {\n transform: translateX(100%);\n }\n\n &.animating {\n > .from {\n animation: slide-in-backwards var(--slide-transition);\n }\n\n > .to {\n animation: slide-out-backwards var(--slide-transition);\n }\n }\n }\n }\n\n /*\n * mv-slide\n */\n\n &.mv-slide {\n > * > div {\n animation-fill-mode: forwards !important;\n }\n\n > .to > div {\n transform: translateX(100vw);\n }\n\n &.animating {\n > .from > div {\n animation: mv-slide-out 0.4s ease;\n }\n\n > .to > div {\n animation: mv-slide-in 0.4s ease;\n }\n }\n }\n\n &.mv-slide.backwards {\n > .to > div {\n transform: translateX(-100vw);\n }\n\n &.animating {\n > .from > div {\n animation: mv-slide-in-backwards 0.4s ease;\n }\n\n > .to > div {\n animation: mv-slide-out-backwards 0.4s ease;\n }\n }\n }\n\n /*\n * slide-fade\n */\n &.slide-fade {\n > .from {\n transform-origin: left;\n transform: translateX(0);\n opacity: 1;\n }\n\n > .to {\n transform-origin: left;\n transform: translateX(1.5rem);\n opacity: 0;\n }\n\n &.animating {\n > .from {\n animation: fade-out-opacity var(--slide-transition), slide-fade-out-move var(--slide-transition);\n }\n\n > .to {\n animation: fade-in-opacity var(--slide-transition), slide-fade-in-move var(--slide-transition);\n }\n }\n }\n\n &.slide-fade.backwards {\n > .from {\n transform: translateX(0);\n opacity: 1;\n }\n\n > .to {\n transform: translateX(-1.5rem);\n opacity: 0;\n }\n\n &.animating {\n > .from {\n animation: fade-in-backwards-opacity var(--slide-transition),\n slide-fade-in-backwards-move var(--slide-transition);\n }\n\n > .to {\n animation: fade-out-backwards-opacity var(--slide-transition),\n slide-fade-out-backwards-move var(--slide-transition);\n }\n }\n }\n\n /*\n * zoom-fade\n */\n &.zoom-fade {\n > .from {\n transform-origin: center;\n transform: scale(1);\n opacity: 1;\n }\n\n > .to {\n transform-origin: center;\n opacity: 0;\n // We can omit `transform: scale(1.1);` here because `opacity` is 0.\n // We need to for proper position calculation in `InfiniteScroll`.\n }\n\n &.animating {\n > .from {\n animation: fade-out-opacity 0.15s ease;\n }\n\n > .to {\n animation: fade-in-opacity 0.15s ease, zoom-fade-in-move 0.15s ease;\n }\n }\n }\n\n &.zoom-fade.backwards {\n > .from {\n transform: scale(1);\n }\n\n > .to {\n transform: scale(0.95);\n }\n\n &.animating {\n > .from {\n animation: fade-in-backwards-opacity 0.1s ease, zoom-fade-in-backwards-move 0.15s ease;\n }\n\n > .to {\n animation: fade-out-backwards-opacity 0.15s ease, zoom-fade-out-backwards-move 0.15s ease;\n }\n }\n }\n\n /*\n * fade\n */\n &.fade {\n > .from {\n opacity: 1;\n }\n\n > .to {\n opacity: 0;\n }\n\n &.animating {\n > .from {\n animation: fade-out-opacity 0.15s ease;\n }\n\n > .to {\n animation: fade-in-opacity 0.15s ease;\n }\n }\n }\n\n /*\n * slide-layers\n */\n\n &.slide-layers {\n --background-color: var(--color-background);\n background: black;\n\n > div {\n background: var(--background-color);\n }\n\n > .to {\n transform: translateX(100%);\n }\n\n &.animating {\n > .from {\n animation: slide-layers-out var(--layer-transition);\n }\n\n > .to {\n animation: slide-in var(--layer-transition);\n }\n }\n }\n\n &.slide-layers.backwards {\n > .to {\n transform: translateX(-20%);\n opacity: 0.75;\n }\n\n &.animating {\n > .from {\n animation: slide-in-backwards var(--layer-transition);\n }\n\n > .to {\n animation: slide-layers-out-backwards var(--layer-transition);\n }\n }\n }\n\n /*\n * push-slide\n */\n\n &.push-slide {\n > div {\n background: var(--color-background);\n }\n\n > .from {\n transform-origin: center;\n transform: scale(1);\n opacity: 1;\n\n .custom-scroll {\n scrollbar-color: transparent !important;\n\n &::-webkit-scrollbar-thumb {\n background-color: transparent !important;\n }\n }\n }\n\n > .to {\n transform: translateX(100%);\n }\n\n &.animating {\n > .from {\n animation: push-out 0.25s ease-in-out;\n }\n\n > .to {\n animation: slide-in-200 0.25s ease-in-out;\n }\n }\n }\n\n &.push-slide.backwards {\n > .to {\n transform: scale(0.7);\n }\n\n &.animating {\n > .from {\n animation: slide-in-200-backwards 0.25s ease-in-out;\n }\n\n > .to {\n animation: push-out-backwards 0.25s ease-in-out;\n }\n }\n }\n\n /*\n * slide-fade\n */\n &.reveal {\n > .to {\n clip-path: inset(0 100% 0 0);\n }\n\n &.animating {\n > .to {\n animation: reveal-in 350ms ease-in;\n }\n }\n }\n\n &.reveal.backwards {\n > .from {\n clip-path: inset(0 0 0 0);\n }\n\n > .to {\n clip-path: none;\n }\n\n &.animating {\n > .from {\n animation: reveal-in-backwards 350ms ease-out;\n }\n\n > .to {\n animation: none;\n }\n }\n }\n}\n\n/*\n * common\n */\n@keyframes fade-in-opacity {\n 0% {\n opacity: 0;\n }\n 100% {\n opacity: 1;\n }\n}\n\n@keyframes fade-out-opacity {\n 0% {\n opacity: 1;\n }\n 100% {\n opacity: 0;\n }\n}\n\n@keyframes fade-in-backwards-opacity {\n 0% {\n opacity: 1;\n }\n 100% {\n opacity: 0;\n }\n}\n\n@keyframes fade-out-backwards-opacity {\n 0% {\n opacity: 0;\n }\n 100% {\n opacity: 1;\n }\n}\n\n/*\n * slide\n */\n@keyframes slide-in {\n 0% {\n transform: translateX(100%);\n }\n 100% {\n transform: translateX(0);\n }\n}\n\n@keyframes slide-out {\n 0% {\n transform: translateX(0);\n }\n 100% {\n transform: translateX(-100%);\n }\n}\n\n@keyframes slide-in-backwards {\n 0% {\n transform: translateX(0);\n }\n 100% {\n transform: translateX(100%);\n }\n}\n\n@keyframes slide-out-backwards {\n 0% {\n transform: translateX(-100%);\n }\n 100% {\n transform: translateX(0);\n }\n}\n\n/*\n * mv-slide\n */\n@keyframes mv-slide-in {\n 0% {\n transform: translateX(100vw);\n }\n 100% {\n transform: translateX(0);\n }\n}\n\n@keyframes mv-slide-out {\n 0% {\n transform: translateX(0);\n }\n 100% {\n transform: translateX(-100vw);\n }\n}\n\n@keyframes mv-slide-in-backwards {\n 0% {\n transform: translateX(0);\n }\n 100% {\n transform: translateX(100vw);\n }\n}\n\n@keyframes mv-slide-out-backwards {\n 0% {\n transform: translateX(-100vw);\n }\n 100% {\n transform: translateX(0);\n }\n}\n\n/*\n * slide-fade\n */\n@keyframes slide-fade-in-move {\n 0% {\n transform: translateX(1.5rem);\n }\n 100% {\n transform: translateX(0);\n }\n}\n\n@keyframes slide-fade-out-move {\n 0% {\n transform: translateX(0);\n }\n 100% {\n transform: translateX(-1.5rem);\n }\n}\n\n@keyframes slide-fade-in-backwards-move {\n 0% {\n transform: translateX(0);\n }\n 100% {\n transform: translateX(1.5rem);\n }\n}\n\n@keyframes slide-fade-out-backwards-move {\n 0% {\n transform: translateX(-1.5rem);\n }\n 100% {\n transform: translateX(0);\n }\n}\n\n/*\n * zoom-fade\n */\n@keyframes zoom-fade-in-move {\n 0% {\n transform: scale(1.1);\n }\n 100% {\n transform: scale(1);\n }\n}\n\n@keyframes zoom-fade-in-backwards-move {\n 0% {\n transform: scale(1);\n }\n 100% {\n transform: scale(1.1);\n }\n}\n\n@keyframes zoom-fade-out-backwards-move {\n 0% {\n transform: scale(0.95);\n }\n 100% {\n transform: scale(1);\n }\n}\n\n/*\n * slide-layers\n */\n@keyframes slide-layers-out {\n 0% {\n transform: translateX(0);\n opacity: 1;\n }\n 100% {\n transform: translateX(-20%);\n opacity: calc(1 - var(--layer-blackout-opacity));\n }\n}\n\n@keyframes slide-layers-out-backwards {\n 0% {\n transform: translateX(-20%);\n opacity: calc(1 - var(--layer-blackout-opacity));\n }\n 100% {\n transform: translateX(0);\n opacity: 1;\n }\n}\n\n/*\n * push-slide\n */\n\n@keyframes push-out {\n 0% {\n transform: scale(1);\n opacity: 1;\n }\n 100% {\n transform: scale(0.7);\n opacity: 0;\n }\n}\n\n@keyframes push-out-backwards {\n 0% {\n transform: scale(0.7);\n opacity: 0;\n }\n 100% {\n transform: scale(1);\n opacity: 1;\n }\n}\n\n/*\n * slide\n */\n@keyframes slide-in-200 {\n 0% {\n transform: translateX(200%);\n }\n 100% {\n transform: translateX(0);\n }\n}\n\n@keyframes slide-in-200-backwards {\n 0% {\n transform: translateX(0);\n }\n 100% {\n transform: translateX(200%);\n }\n}\n\n/*\n * slide\n */\n@keyframes reveal-in {\n 0% {\n clip-path: inset(0 100% 0 0);\n }\n 100% {\n clip-path: inset(0 0 0 0);\n }\n}\n\n/*\n * slide\n */\n@keyframes reveal-in-backwards {\n 0% {\n clip-path: inset(0 0 0 0);\n }\n 100% {\n clip-path: inset(0 100% 0 0);\n }\n}\n",".ProgressSpinner {\n position: relative;\n z-index: 1;\n width: 3.375rem;\n height: 3.375rem;\n background: rgba(0, 0, 0, 0.25)\n url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTkiIGhlaWdodD0iMTkiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZD0iTTEwLjcxNyA5Ljc1TDE4LjMgMi4xNjdhLjY4NC42ODQgMCAxMC0uOTY3LS45NjdMOS43NSA4Ljc4MyAyLjE2NyAxLjJhLjY4NC42ODQgMCAxMC0uOTY3Ljk2N0w4Ljc4MyA5Ljc1IDEuMiAxNy4zMzNhLjY4NC42ODQgMCAxMC45NjcuOTY3bDcuNTgzLTcuNTgzIDcuNTgzIDcuNTgzYS42ODEuNjgxIDAgMDAuOTY3IDAgLjY4NC42ODQgMCAwMDAtLjk2N0wxMC43MTcgOS43NXoiIGZpbGw9IiNGRkYiIGZpbGwtcnVsZT0ibm9uemVybyIgc3Ryb2tlPSIjRkZGIiBzdHJva2Utd2lkdGg9Ii43NSIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIvPjwvc3ZnPg==)\n no-repeat 49% 49%;\n border-radius: 50%;\n cursor: pointer;\n\n &.no-cross {\n background: transparent !important;\n pointer-events: none;\n }\n\n &.square {\n background-image: none;\n\n &::after {\n content: \"\";\n position: absolute;\n width: 0.8125rem;\n height: 0.8125rem;\n border-radius: 0.125rem;\n background-color: #fff;\n left: 50%;\n top: 50%;\n transform: translate3d(-50%, -50%, 0);\n }\n }\n\n &.size-s,\n &.size-m {\n width: auto;\n height: auto;\n /* stylelint-disable-next-line scss/operator-no-unspaced */\n background: transparent\n url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTUiIGhlaWdodD0iMTUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZD0iTTguMjE4IDcuNWw1LjYzMy01LjYzM2EuNTA4LjUwOCAwIDEwLS43MTgtLjcxOEw3LjUgNi43ODIgMS44NjcgMS4xNDlhLjUwOC41MDggMCAxMC0uNzE4LjcxOEw2Ljc4MiA3LjVsLTUuNjMzIDUuNjMzYS41MDguNTA4IDAgMTAuNzE4LjcxOEw3LjUgOC4yMThsNS42MzMgNS42MzNhLjUwNi41MDYgMCAwMC43MTggMCAuNTA4LjUwOCAwIDAwMC0uNzE4TDguMjE4IDcuNXoiIGZpbGw9IiNGRkYiIGZpbGwtcnVsZT0ibm9uemVybyIgc3Ryb2tlPSIjRkZGIiBzdHJva2UtbGluZWpvaW49InJvdW5kIi8+PC9zdmc+)\n no-repeat 49% 49%;\n\n &.square {\n background-image: none;\n width: 0.75rem;\n height: 0.75rem;\n }\n }\n\n &.size-xl {\n width: 3.25rem;\n height: 3.25rem;\n\n svg {\n width: 3rem;\n height: 3rem;\n margin: 0.125rem;\n }\n\n circle {\n stroke-width: 3px;\n }\n }\n\n &.transparent {\n background-color: transparent !important;\n }\n\n svg {\n display: block;\n transform: rotate(-90deg);\n transform-origin: 50% 50%;\n animation: 4s linear 0s infinite ProgressSpinnerAnimation;\n }\n\n circle {\n transition: stroke-dashoffset 0.5s;\n }\n}\n\n@keyframes ProgressSpinnerAnimation {\n from {\n transform: rotate(0deg);\n }\n to {\n transform: rotate(360deg);\n }\n}\n","@import \"../../styles/mixins\";\n\n@mixin thumb-styles() {\n background: var(--slider-color);\n border: none;\n height: 0.75rem;\n width: 0.75rem;\n border-radius: 50%;\n cursor: pointer;\n transform: scale(1);\n transition: transform 0.25s ease-in-out;\n\n &:hover {\n transform: scale(1.2);\n }\n}\n\n.RangeSlider {\n --slider-color: var(--color-primary);\n\n margin-bottom: 1rem;\n\n &.disabled {\n pointer-events: none;\n --slider-color: var(--color-text-secondary);\n }\n\n .slider-top-row {\n display: flex;\n justify-content: space-between;\n margin-bottom: 0.625rem;\n\n .value {\n flex-shrink: 0;\n margin-left: 1rem;\n color: var(--color-text-secondary);\n }\n\n &[dir=\"rtl\"] {\n .value {\n margin-left: 0;\n margin-right: 1rem;\n }\n }\n }\n\n .slider-main {\n position: relative;\n z-index: 1;\n\n &::before {\n content: \"\";\n position: absolute;\n width: 100%;\n left: 0;\n top: 0.3125rem;\n height: 0.125rem;\n background-color: var(--color-borders);\n border-radius: 0.125rem;\n opacity: 0.5;\n z-index: -1;\n }\n }\n\n .slider-fill-track {\n position: absolute;\n width: 100%;\n left: 0;\n top: 0.3125rem;\n height: 0.125rem;\n background-color: var(--slider-color);\n border-radius: 0.125rem;\n pointer-events: none;\n }\n\n &.bold {\n .slider-main::before {\n top: 0.25rem;\n height: 0.25rem;\n }\n\n .slider-fill-track {\n top: 0.25rem;\n height: 0.25rem;\n }\n }\n\n // Reset range input browser styles\n @include reset-range();\n\n // Apply custom styles\n input[type=\"range\"] {\n // Note that while we're repeating code here, that's necessary as you can't comma-separate these type of selectors.\n // Browsers will drop the entire selector if it doesn't understand a part of it.\n &::-webkit-slider-thumb {\n @include thumb-styles();\n }\n\n &::-moz-range-thumb {\n @include thumb-styles();\n }\n\n &::-ms-thumb {\n @include thumb-styles();\n }\n }\n\n .slider-options {\n display: grid;\n grid-template-rows: auto;\n grid-auto-columns: 1fr;\n grid-auto-flow: column;\n }\n\n .slider-option {\n font-size: 0.8125rem;\n text-align: center;\n cursor: pointer;\n color: var(--color-text-secondary);\n transition: color 0.2s ease;\n\n &:hover,\n &.active {\n color: var(--color-text);\n }\n\n &.active {\n font-weight: 500;\n }\n\n &:first-child {\n text-align: left;\n }\n\n &:last-child {\n text-align: right;\n }\n }\n}\n","// @optimization\n@mixin while-transition() {\n .Transition > div:not(.Transition__slide--active) &, body.animating-right-column & {\n @content;\n }\n}\n\n@mixin overflow-y-overlay() {\n @supports (overflow-y: overlay) {\n overflow-y: overlay;\n\n //Workaround for Android <= 9\n overflow-x: hidden;\n }\n}\n\n@mixin reset-range() {\n input[type=\"range\"] {\n -webkit-appearance: none;\n display: block;\n width: 100%;\n height: 0.75rem;\n margin-bottom: 0.5rem;\n background: transparent;\n\n &:focus {\n outline: none;\n }\n\n &::-ms-track {\n width: 100%;\n cursor: pointer;\n\n background: transparent;\n border-color: transparent;\n color: transparent;\n }\n\n &::-webkit-slider-thumb {\n -webkit-appearance: none;\n }\n\n &::-moz-slider-thumb {\n -moz-appearance: none;\n }\n\n &::-webkit-slider-runnable-track {\n cursor: pointer;\n }\n\n &::-moz-range-track, &::-moz-range-progress {\n cursor: pointer;\n }\n }\n}\n",".Avatar {\n --color-user: var(--color-primary);\n flex: none;\n align-items: center;\n justify-content: center;\n width: 3.375rem;\n height: 3.375rem;\n border-radius: 50%;\n background: linear-gradient(var(--color-white) -125%, var(--color-user));\n color: white;\n font-weight: bold;\n display: flex;\n white-space: nowrap;\n user-select: none;\n\n &__img {\n border-radius: 50%;\n width: 100%;\n height: 100%;\n }\n\n .emoji {\n width: 1rem;\n height: 1rem;\n }\n\n &__icon {\n font-size: 2.5rem;\n\n &.icon-reply-filled {\n transform: scale(0.7);\n }\n }\n\n &.size-micro {\n width: 1rem;\n height: 1rem;\n font-size: 0.5rem;\n\n .emoji {\n width: 0.5625rem;\n height: 0.5625rem;\n }\n }\n\n &.size-tiny {\n width: 2rem;\n height: 2rem;\n font-size: 0.875rem;\n\n .emoji {\n width: 0.875rem;\n height: 0.875rem;\n }\n }\n\n &.size-small {\n width: 2.125rem;\n height: 2.125rem;\n font-size: 0.875rem;\n\n .emoji {\n width: 0.875rem;\n height: 0.875rem;\n }\n }\n\n &.size-medium {\n width: 2.75rem;\n height: 2.75rem;\n font-size: 1.1875rem;\n\n .emoji {\n width: 1rem;\n height: 1rem;\n }\n }\n\n &.size-large {\n font-size: 1.3125rem;\n\n i {\n font-size: 3.5rem;\n }\n\n .emoji {\n width: 1.3125rem;\n height: 1.3125rem;\n }\n }\n\n &.size-jumbo {\n width: 7.5rem;\n height: 7.5rem;\n font-size: 3.5rem;\n\n &__i {\n font-size: 6rem;\n }\n\n .emoji {\n width: 3.5rem;\n height: 3.5rem;\n }\n }\n\n &.online {\n position: relative;\n\n &::after {\n content: \"\";\n display: block;\n position: absolute;\n bottom: 0.0625rem;\n right: 0.0625rem;\n width: 0.875rem;\n height: 0.875rem;\n border-radius: 50%;\n border: 2px solid var(--color-background);\n background-color: #0ac630;\n flex-shrink: 0;\n }\n }\n\n &.interactive {\n cursor: pointer;\n }\n}\n",".Modal {\n position: relative;\n z-index: var(--z-modal);\n\n &.delete,\n &.error,\n &.confirm,\n &.pin,\n &.unpin-all {\n .modal-dialog {\n max-width: 23rem;\n }\n }\n\n &.error {\n .modal-content > div {\n margin-top: 1rem;\n }\n }\n\n &.narrow {\n .modal-dialog {\n max-width: 20rem;\n }\n }\n\n &.report {\n .modal-dialog {\n max-width: 15rem;\n }\n }\n\n .modal-container {\n position: fixed;\n top: 0;\n bottom: 0;\n left: 0;\n right: 0;\n display: flex;\n justify-content: center;\n align-items: center;\n }\n\n .modal-backdrop {\n position: fixed;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: -1;\n background-color: rgba(0, 0, 0, 0.25);\n }\n\n &.transparent-backdrop .modal-backdrop {\n background-color: transparent;\n }\n\n .modal-dialog {\n position: relative;\n display: inline-flex;\n flex-direction: column;\n width: 100%;\n max-width: 35rem;\n min-width: 17.5rem;\n margin: 2rem auto;\n background-color: var(--color-background);\n box-shadow: 0 0.25rem 0.5rem 0.125rem var(--color-default-shadow);\n border-radius: var(--border-radius-default);\n transform: translate3d(0, -1rem, 0);\n\n transition: transform 0.2s ease, opacity 0.2s ease;\n\n body.animation-level-0 & {\n transition: none;\n transform: none !important;\n }\n\n @media (max-width: 450px) {\n max-width: calc(100vw - 3rem) !important;\n }\n }\n\n &.open .modal-dialog {\n transform: translate3d(0, 0, 0);\n }\n\n &.closing .modal-dialog {\n transform: translate3d(0, 1rem, 0);\n }\n\n .modal-header,\n %modal-header {\n padding: 1rem 1rem 0;\n display: flex;\n align-items: center;\n flex-shrink: 0;\n }\n\n .modal-title {\n font-size: 1.25rem;\n font-weight: 500;\n flex: 1 1 auto;\n overflow: hidden;\n text-overflow: ellipsis;\n\n &:not(:only-child) {\n margin: 0 1.3125rem;\n }\n }\n\n .modal-header-condensed {\n @extend %modal-header;\n padding: 0.5rem 1.25rem 0 0.9375rem !important;\n\n .modal-action-button {\n font-size: 0.875rem;\n height: 2.25rem;\n width: auto;\n line-height: 1.625rem;\n margin-left: auto;\n padding-left: 1.25rem;\n padding-right: 1.25rem;\n min-width: 5rem;\n }\n }\n\n .modal-content {\n width: 100%;\n flex-grow: 1;\n padding: 1rem;\n overflow-y: auto;\n max-height: 90vh;\n\n b,\n strong {\n word-break: break-word;\n }\n }\n\n .modal-title,\n .modal-content,\n .modal-content > p {\n unicode-bidi: plaintext;\n text-align: initial;\n }\n\n .modal-about {\n display: -webkit-box;\n -webkit-box-orient: vertical;\n -webkit-line-clamp: 5;\n text-overflow: ellipsis;\n overflow: hidden;\n }\n\n .modal-help {\n color: var(--color-text-secondary);\n font-size: 0.9375rem;\n line-height: 1.3;\n }\n\n .dialog-buttons {\n display: flex;\n align-items: flex-end;\n\n .confirm-dialog-button + .confirm-dialog-button {\n margin-left: 1rem;\n }\n }\n\n .confirm-dialog-button {\n width: auto;\n height: auto;\n margin-left: auto;\n text-align: right;\n font-weight: 500;\n white-space: pre-wrap;\n }\n}\n",".ListItem {\n position: relative;\n\n body.is-ios &,\n body.is-android & {\n &:not(:last-of-type)::after {\n content: \"\";\n position: absolute;\n bottom: 0;\n left: 4.5rem;\n right: 0;\n /* stylelint-disable-next-line plugin/whole-pixel */\n height: 0.5px;\n background: var(--color-dividers);\n }\n\n &.small-icon::after {\n left: 3.875rem;\n }\n\n &.no-icon::after {\n left: 0;\n }\n }\n\n // Using half-pixel height is efficient on iOS but not supported on Android, so `transform` is used instead\n body.is-android & {\n &:not(:last-of-type)::after {\n height: 0.0625rem;\n transform: scaleY(0.25);\n }\n }\n\n .ListItem-button {\n width: 100%;\n background-color: var(--background-color);\n border: none !important;\n box-shadow: none !important;\n outline: none !important;\n display: flex;\n padding: 1rem;\n position: relative;\n overflow: hidden;\n line-height: 1.5rem;\n white-space: nowrap;\n color: var(--color-text);\n border-radius: var(--border-radius-default);\n --ripple-color: rgba(0, 0, 0, 0.08);\n\n > i {\n font-size: 1.5rem;\n margin-right: 2rem;\n color: var(--color-text-secondary);\n }\n }\n\n .user-status,\n .group-status,\n .title,\n .subtitle {\n text-align: initial;\n unicode-bidi: plaintext;\n }\n\n &.multiline {\n .ListItem-button > i {\n position: relative;\n top: 0.25rem;\n }\n }\n\n &.disabled {\n pointer-events: none;\n\n .ListItem-button {\n opacity: 0.5;\n }\n }\n\n &:not(.disabled):not(.is-static) {\n .ListItem-button {\n cursor: pointer;\n\n body.cursor-ew-resize & {\n cursor: ew-resize !important;\n }\n\n @media (hover: hover) {\n &:hover,\n &:focus {\n --background-color: var(--color-chat-hover);\n }\n }\n\n @media (max-width: 600px) {\n &.active {\n --background-color: var(--color-chat-hover);\n }\n }\n }\n }\n\n @media (min-width: 600px) {\n &:not(.has-ripple):not(.is-static),\n body.animation-level-0 & {\n .ListItem-button:active {\n --background-color: var(--color-item-active) !important;\n }\n }\n }\n\n &.has-menu-open .ListItem-button {\n --background-color: var(--color-chat-hover);\n }\n\n &.narrow {\n margin-bottom: 0.75rem;\n\n .ListItem-button {\n padding: 0.5rem 1rem;\n }\n }\n\n &.inactive {\n pointer-events: none;\n }\n\n &.focus {\n --background-color: var(--color-chat-hover);\n }\n\n &.destructive {\n .ListItem-button {\n color: var(--color-error);\n\n i {\n color: inherit;\n }\n }\n }\n\n &-context-menu {\n position: absolute;\n\n .bubble {\n width: auto;\n\n .MenuItem button {\n padding-left: 1rem !important;\n padding-right: 2rem !important;\n }\n }\n }\n\n &.chat-item-clickable {\n body.is-ios &,\n body.is-macos & {\n --color-text-secondary: var(--color-text-secondary-apple);\n }\n\n .ListItem-button {\n padding: 0.5625rem;\n }\n\n .Avatar {\n flex-shrink: 0;\n margin-right: 0.5rem;\n }\n\n .info {\n flex-grow: 1;\n overflow: hidden;\n }\n\n .title,\n .subtitle {\n overflow: hidden;\n display: flex;\n justify-content: flex-start;\n align-items: center;\n }\n\n h3,\n .last-message,\n .status,\n .typing-status {\n font-size: 1rem;\n line-height: 1.6875rem;\n margin: 0;\n overflow: hidden;\n white-space: nowrap;\n text-overflow: ellipsis;\n text-align: initial;\n }\n\n .title {\n h3 {\n font-weight: 500;\n }\n\n .VerifiedIcon {\n width: 1.25rem;\n height: 1.25rem;\n margin-left: 0.25rem;\n }\n\n .emoji {\n vertical-align: text-bottom;\n background-position: 0 0;\n flex-shrink: 0;\n }\n }\n\n .contact-phone,\n .contact-username {\n font-size: 0.875rem;\n line-height: 1.25rem;\n color: var(--color-text-secondary);\n }\n\n .ChatInfo {\n display: flex;\n align-items: center;\n flex-grow: 1;\n overflow: hidden;\n\n .status,\n .typing-status {\n font-size: 0.875rem;\n line-height: 1.25rem;\n color: var(--color-text-secondary);\n display: inline-block;\n\n &.online {\n color: var(--color-primary);\n }\n\n &[dir=\"rtl\"],\n &[dir=\"auto\"] {\n text-align: initial;\n width: 100%;\n }\n\n .group-status:only-child,\n .user-status:only-child {\n display: flow-root;\n }\n }\n }\n\n .contact-phone,\n .contact-username,\n h3,\n .last-message,\n .status,\n .typing-status {\n text-align: initial;\n unicode-bidi: plaintext;\n }\n\n .last-message,\n .status,\n .typing-status {\n body.is-ios &,\n body.is-macos & {\n font-size: 0.9375rem;\n }\n }\n\n &[dir=\"rtl\"] {\n .ListItem-button {\n padding: 0.5625rem 0.5625rem 0.5625rem 0.6875rem;\n }\n\n .Avatar {\n margin-left: 0.5rem;\n margin-right: 0;\n }\n\n .info > .status {\n width: 100%;\n }\n }\n }\n\n &.search-result-message {\n .title {\n padding-right: 0.125rem;\n }\n\n h3 {\n max-width: 80%;\n }\n\n h3,\n .subtitle {\n font-size: 1rem;\n line-height: 1.5rem;\n overflow: hidden;\n white-space: nowrap;\n text-overflow: ellipsis;\n text-align: left;\n display: block;\n }\n\n .LastMessageMeta {\n margin-left: auto;\n margin-right: 0;\n }\n\n .subtitle {\n color: var(--color-text-secondary);\n\n .matching-text-highlight {\n color: var(--color-text);\n background: #cae3f7;\n border-radius: 0.25rem;\n padding: 0 0.125rem;\n display: inline-block;\n\n .theme-dark & {\n --color-text: #000;\n }\n }\n }\n\n &[dir=\"rtl\"] {\n .LastMessageMeta {\n margin-left: 0;\n margin-right: auto;\n }\n\n .subtitle {\n margin-right: 0;\n display: block;\n }\n }\n }\n\n &.picker-list-item {\n margin: 0;\n\n .ListItem-button {\n padding-left: 0;\n display: flex;\n align-items: center;\n }\n\n .Avatar {\n width: 3rem;\n height: 3rem;\n }\n\n .Checkbox {\n flex-shrink: 0;\n height: 1.5rem;\n margin: 0;\n padding-left: 4rem;\n }\n\n &[dir=\"rtl\"] {\n .Checkbox {\n padding-left: 0;\n padding-right: 4rem;\n }\n }\n }\n\n .multiline-item {\n flex-grow: 1;\n white-space: initial;\n overflow: hidden;\n\n .title,\n .subtitle {\n display: block;\n text-align: initial;\n }\n\n .title {\n line-height: 1.25rem;\n overflow: hidden;\n text-overflow: ellipsis;\n }\n\n .subtitle {\n font-size: 0.875rem;\n line-height: 1.5rem;\n color: var(--color-text-secondary);\n\n & + .subtitle {\n margin-top: -0.25rem;\n }\n\n &.black {\n color: var(--color-text);\n }\n }\n }\n\n &[dir=\"rtl\"] {\n .ListItem-button > i {\n margin-left: 2rem;\n margin-right: 0;\n }\n }\n}\n",".VerifiedIcon {\n display: inline-block;\n flex-shrink: 0;\n width: 1.5rem;\n height: 1.5rem;\n\n --color-fill: var(--color-primary);\n --color-checkmark: #fff;\n}\n",".DotAnimation {\n display: inline-flex;\n align-items: baseline;\n\n .ellipsis {\n display: flex;\n width: 1rem;\n overflow: hidden;\n\n &::after {\n content: \"...\";\n animation: dot-animation 1s steps(4, start) infinite;\n\n html[lang=\"ar\"] &,\n html[lang=\"fa\"] & {\n animation-name: dot-animation-rtl;\n }\n }\n }\n}\n\n@keyframes dot-animation {\n from {\n transform: translateX(-1rem);\n }\n}\n\n@keyframes dot-animation-rtl {\n from {\n transform: translateX(1rem);\n }\n}\n",".typing-status {\n display: flex;\n align-items: baseline;\n\n .sender-name {\n &::after {\n content: '\\00a0';\n color: var(--color-text-secondary);\n }\n }\n}\n",".Notification-container {\n position: relative;\n width: 24rem;\n max-width: 100vw;\n margin: 0.25rem auto;\n z-index: var(--z-notification);\n\n @media (min-width: 1276px) {\n transition: transform var(--layer-transition);\n }\n\n &:first-of-type {\n margin-top: 4.25rem;\n\n .has-header-tools & {\n margin-top: 7.375rem;\n }\n }\n}\n\n.Notification {\n background: rgba(32, 32, 32, 0.8)\n url(\"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGcgZmlsbD0ibm9uZSIgZmlsbC1ydWxlPSJldmVub2RkIj48Y2lyY2xlIGZpbGw9IiNGRkYiIGN4PSIxMiIgY3k9IjEyIiByPSIxMiIvPjxjaXJjbGUgZmlsbD0iIzAwMCIgZmlsbC1ydWxlPSJub256ZXJvIiBjeD0iMTIiIGN5PSI2LjUiIHI9IjEuNSIvPjxwYXRoIGQ9Ik0xMiA5LjVjLS41NTIgMC0xIC4zNy0xIC44MjZ2Ny4zNDhjMCAuNDU2LjQ0OC44MjYgMSAuODI2czEtLjM3IDEtLjgyNnYtNy4zNDhjMC0uNDU2LS40NDgtLjgyNi0xLS44MjZ6IiBmaWxsPSIjMDAwIiBmaWxsLXJ1bGU9Im5vbnplcm8iLz48L2c+PC9zdmc+\")\n no-repeat 0.9375rem 50%;\n background-size: 1.5rem;\n border-radius: var(--border-radius-default);\n padding: 0.9375rem 0.9375rem 0.9375rem 3.375rem;\n color: #fff;\n margin: 0 0.5rem;\n\n .text-entity-link,\n .text-entity-link:hover,\n .text-entity-link:active {\n color: #fff !important;\n text-decoration: underline;\n }\n\n .content {\n line-height: 1.25;\n word-break: break-word;\n font-size: 0.9375rem;\n }\n}\n",".Radio {\n display: block;\n position: relative;\n padding-left: 4.5rem;\n text-align: left;\n margin-bottom: 1.5rem;\n line-height: 1.5rem;\n cursor: pointer;\n\n &.disabled {\n pointer-events: none;\n opacity: 0.5;\n }\n\n &.hidden-widget {\n cursor: default;\n .Radio-main {\n &::before,\n &::after {\n visibility: hidden;\n }\n }\n }\n\n > input {\n position: absolute;\n z-index: var(--z-below);\n opacity: 0;\n }\n\n .Radio-main {\n &::before,\n &::after {\n content: \"\";\n display: block;\n position: absolute;\n left: 1.0625rem;\n top: 50%;\n width: 1.25rem;\n height: 1.25rem;\n transform: translateY(-50%);\n }\n\n &::before {\n border: 2px solid var(--color-borders-input);\n border-radius: 50%;\n background-color: var(--color-background);\n opacity: 1;\n transition: border-color 0.1s ease, opacity 0.1s ease;\n }\n\n &::after {\n left: 1.375rem;\n width: 0.625rem;\n height: 0.625rem;\n border-radius: 50%;\n background: var(--color-primary);\n opacity: 0;\n transition: opacity 0.1s ease;\n }\n\n .label {\n display: block;\n word-break: break-word;\n unicode-bidi: plaintext;\n text-align: left;\n }\n\n .subLabel {\n display: block;\n font-size: 0.875rem;\n line-height: 1rem;\n color: var(--color-text-secondary);\n unicode-bidi: plaintext;\n }\n }\n\n input:checked ~ .Radio-main {\n &::before {\n border-color: var(--color-primary);\n }\n\n &::after {\n opacity: 1;\n }\n }\n\n &.loading {\n .Radio-main::before,\n .Radio-main::after {\n opacity: 0 !important;\n }\n\n .Spinner {\n position: absolute;\n left: 1.0625rem;\n top: 50%;\n transform: translateY(-50%);\n opacity: 0;\n animation: fade-in 0.2s ease forwards;\n --spinner-size: 1.25rem;\n }\n }\n\n &[dir=\"rtl\"] {\n padding-left: 0;\n padding-right: 4.5rem;\n\n .Radio-main {\n text-align: right;\n\n &::before {\n left: auto;\n right: 1.0625rem;\n }\n\n &::after {\n left: auto;\n right: 1.375rem;\n }\n }\n\n .label,\n .subLabel {\n text-align: right;\n }\n\n &.loading .Spinner {\n left: auto;\n right: 1.0625rem;\n }\n }\n}\n\n@keyframes fade-in {\n from {\n opacity: 0;\n }\n to {\n opacity: 1;\n }\n}\n",".ReactionStaticEmoji {\n width: 1rem;\n display: block;\n}\n",".Tab {\n display: flex;\n justify-content: center;\n flex: 1 1 auto;\n appearance: none;\n background: none;\n width: auto;\n margin: 0;\n border: none;\n padding: 0.625rem 0.25rem;\n font-weight: 500;\n color: var(--color-text-secondary);\n cursor: pointer;\n border-top-left-radius: var(--border-radius-messages-small);\n border-top-right-radius: var(--border-radius-messages-small);\n\n &,\n &:active,\n &:focus {\n outline: none;\n }\n\n &--active {\n cursor: default;\n color: var(--color-primary);\n\n i {\n opacity: 1 !important;\n }\n }\n\n @media (hover: hover) {\n &:not(&--active):hover {\n background: var(--color-interactive-element-hover);\n }\n }\n\n @media (max-width: 600px) {\n &:not(&--active):active {\n background: var(--color-interactive-element-hover);\n }\n }\n\n > span {\n position: relative;\n display: flex;\n align-items: center;\n white-space: nowrap;\n }\n\n .badge {\n min-width: 1.25rem;\n height: 1.25rem;\n margin-inline-start: 0.5rem;\n background: var(--color-gray);\n border-radius: 0.75rem;\n padding: 0 0.3125rem;\n color: white;\n font-size: 0.875rem;\n line-height: 1.3125rem;\n font-weight: 500;\n text-align: center;\n flex-shrink: 0;\n\n body.is-ios &,\n body.is-macos & {\n line-height: 1.25rem;\n }\n }\n\n &__badge--active {\n background: var(--color-primary) !important;\n }\n\n i {\n position: absolute;\n bottom: calc(-0.625rem - 1px);\n left: 0;\n opacity: 0;\n background-color: var(--color-primary);\n height: 0.1875rem;\n width: 100%;\n border-radius: 0.1875rem 0.1875rem 0 0;\n pointer-events: none;\n box-sizing: content-box;\n transform-origin: left;\n\n &.animate {\n transition: transform var(--slide-transition);\n\n body.animation-level-0 & {\n transition: none !important;\n }\n }\n }\n}\n",".TabList {\n position: sticky;\n top: 0;\n flex-shrink: 0;\n display: flex;\n justify-content: space-between;\n align-items: flex-end;\n font-size: 0.875rem;\n flex-wrap: nowrap;\n box-shadow: 0 2px 2px var(--color-light-shadow);\n background-color: var(--color-background);\n overflow-x: auto;\n overflow-y: hidden;\n\n scrollbar-width: none;\n scrollbar-color: rgba(0, 0, 0, 0);\n\n &.big {\n font-size: 1rem;\n --border-radius-messages-small: 0;\n }\n\n &::-webkit-scrollbar {\n height: 0;\n }\n\n &::-webkit-scrollbar-thumb {\n background-color: rgba(0, 0, 0, 0);\n // `box-shadow` prevents repaint on macOS when hovering out of scrollable container\n box-shadow: 0 0 1px rgba(255, 255, 255, 0.01);\n }\n}\n",".DeleteChatModal {\n .modal-dialog {\n max-width: 20rem;\n }\n\n .modal-header {\n padding: 1.125rem 1.25rem 0;\n }\n\n .modal-title:not(:only-child) {\n margin: 0 0 0 0.75rem;\n }\n\n .modal-content {\n padding: 0.5rem 1.25rem;\n }\n\n .confirm-dialog-button {\n margin-right: -0.625rem;\n }\n}\n",".SearchInput {\n position: relative;\n width: 100%;\n color: rgba(var(--color-text-secondary-rgb), 0.5);\n background-color: var(--color-chat-hover);\n border: 2px solid var(--color-chat-hover);\n border-radius: 1.375rem;\n transition: border-color 0.15s ease;\n\n &.with-picker-item {\n display: flex;\n\n .icon-search {\n display: none;\n }\n\n input {\n padding-left: 0.5rem;\n }\n\n &[dir=\"rtl\"] {\n input {\n padding-right: 0.5rem;\n padding-left: 0;\n }\n }\n }\n\n &.has-focus {\n border-color: var(--color-primary);\n caret-color: var(--color-primary);\n background-color: var(--color-background);\n\n input {\n & + i {\n color: var(--color-primary);\n }\n }\n }\n\n input {\n height: 2.5rem;\n margin-bottom: 0;\n border: none !important;\n border-radius: 1.375rem;\n background-color: transparent !important;\n box-shadow: none !important;\n padding: calc(0.4375rem - var(--border-width)) calc(2.625rem - var(--border-width))\n calc(0.5rem - var(--border-width)) calc(2.75rem - var(--border-width));\n\n &::placeholder {\n color: var(--color-placeholders);\n }\n }\n\n > i {\n position: absolute;\n top: 0.5rem;\n left: 0.75rem;\n font-size: 1.375rem;\n pointer-events: none;\n }\n\n .Loading {\n position: absolute;\n top: 0;\n right: 0;\n height: 2.5rem;\n width: 2.5rem;\n\n .Spinner {\n --spinner-size: 1.5rem;\n }\n }\n\n .Button {\n position: absolute;\n top: 0.125rem;\n right: 0.125rem;\n font-size: 1rem;\n }\n\n @media (max-width: 600px) {\n input {\n height: 2.5rem;\n border-radius: 1.25rem;\n padding-left: calc(2.625rem - var(--border-width));\n }\n\n i {\n top: 0.5rem;\n }\n }\n\n &[dir=\"rtl\"] {\n input {\n direction: rtl;\n }\n\n > i {\n left: auto;\n right: 0.75rem;\n }\n\n .Loading {\n left: 0.5rem;\n right: auto;\n }\n\n .Button {\n left: 0.125rem;\n right: auto;\n }\n }\n}\n",".PickerSelectedItem {\n display: flex;\n align-items: center;\n background: var(--color-chat-hover);\n height: 2rem;\n min-width: 2rem;\n margin-left: 0.5rem;\n margin-bottom: 0.5rem;\n padding-right: 1rem;\n border-radius: 1rem;\n cursor: pointer;\n position: relative;\n overflow: hidden;\n flex-shrink: 1;\n transition: background-color 0.15s ease;\n\n max-width: calc(50% - 0.5rem);\n\n &.minimized {\n padding-right: 0;\n }\n\n &:hover {\n background-color: var(--color-item-active);\n }\n\n &.closeable:hover {\n background-color: rgba(var(--color-error-rgb), 0.16);\n\n .item-remove {\n opacity: 1;\n }\n\n .Avatar,\n .item-icon {\n opacity: 0;\n }\n }\n\n &.search-date {\n .item-remove {\n background: var(--color-primary);\n }\n\n &:hover {\n background: var(--color-chat-hover);\n }\n\n .item-name {\n font-size: 0.875rem;\n }\n }\n\n .SearchInput & {\n flex: 1 0 auto;\n position: relative;\n top: 0.25rem;\n left: -0.125rem;\n\n color: var(--color-text-secondary);\n }\n\n .Avatar,\n .item-icon {\n width: 2rem;\n height: 2rem;\n opacity: 1;\n flex-shrink: 0;\n transition: opacity 0.15s ease;\n\n .Avatar__icon, i {\n font-size: 2rem;\n }\n }\n\n .item-icon {\n display: flex;\n align-items: center;\n justify-content: center;\n padding: 0.375rem;\n border-radius: 50%;\n background-color: var(--color-primary);\n color: white;\n\n i {\n font-size: 1.25rem;\n position: relative;\n top: -1px;\n }\n }\n\n .item-name {\n margin-left: 0.5rem;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n\n .emoji.emoji-small {\n width: 1.125rem;\n height: 1.125rem;\n background-size: 1.125rem;\n vertical-align: -2px;\n }\n }\n\n .item-remove {\n position: absolute;\n left: 0;\n top: 0;\n width: 2rem;\n height: 2rem;\n border-radius: 50%;\n display: flex;\n align-items: center;\n justify-content: center;\n background-color: var(--color-error);\n font-size: 1.5rem;\n color: white;\n opacity: 0;\n transition: opacity 0.15s ease;\n }\n\n &[dir=\"rtl\"] {\n padding-left: 1rem;\n padding-right: 0;\n\n &.minimized {\n padding-right: 0;\n padding-left: 0;\n }\n\n .SearchInput & {\n left: auto;\n right: -0.125rem;\n }\n\n .item-name {\n margin-left: 0;\n margin-right: 0.5rem;\n }\n\n .item-remove {\n left: auto;\n right: 0;\n }\n }\n}\n",".Switcher {\n display: inline-flex;\n align-items: center;\n position: relative;\n margin: 0;\n\n &.disabled {\n pointer-events: none;\n opacity: 0.5;\n }\n\n &.inactive {\n pointer-events: none;\n }\n\n body.animation-level-0 &,\n &.no-animation {\n .widget,\n .widget::after {\n transition: none !important;\n }\n\n .widget:active:after {\n width: 1.125rem;\n }\n }\n\n input {\n height: 0;\n width: 0;\n visibility: hidden;\n position: absolute;\n z-index: var(--z-below);\n opacity: 0;\n }\n\n .widget {\n cursor: pointer;\n text-indent: -999px;\n width: 2.125rem;\n height: 0.875rem;\n background-color: var(--color-gray);\n display: inline-block;\n border-radius: 0.5rem;\n position: relative;\n transition: background-color 0.2s ease-in;\n }\n\n .widget:after {\n content: \"\";\n position: absolute;\n top: -0.125rem;\n left: 0;\n width: 1.125rem;\n height: 1.125rem;\n background-color: var(--color-background);\n border-radius: 0.75rem;\n /* stylelint-disable-next-line plugin/no-low-performance-animation-properties */\n transition: border-color 0.2s ease-out;\n border: 0.125rem solid var(--color-gray);\n }\n\n input:checked + .widget {\n background: var(--color-primary);\n }\n\n input:checked + .widget:after {\n left: calc(100% - 1.125rem);\n transform: translateX(calc(-100% + 1.125rem));\n border-color: var(--color-primary);\n }\n\n .widget:active:after {\n width: 1.25rem;\n }\n}\n",".MessageOutgoingStatus {\n width: 1.1875rem;\n height: 1.1875rem;\n overflow: hidden;\n display: inline-block;\n line-height: 1;\n font-size: 1.1875rem;\n\n i {\n background: var(--background-color);\n }\n\n .icon-message-succeeded {\n padding-left: 0.125rem;\n }\n\n .Transition {\n width: 100%;\n height: 100%;\n }\n}\n",".LastMessageMeta {\n margin-right: 0.1875rem;\n padding: 0.3125rem 0 0.125rem;\n flex-shrink: 0;\n font-size: 0.75rem;\n line-height: 1;\n display: flex;\n align-items: center;\n\n .MessageOutgoingStatus {\n color: var(--color-text-meta-colored);\n margin-right: 0.125rem;\n font-size: 1.125rem;\n\n body.is-ios & {\n margin-bottom: -0.125rem;\n }\n }\n\n .time {\n color: var(--color-text-meta);\n line-height: 1.125rem;\n }\n}\n",".Badge-transition {\n opacity: 1;\n transition: transform 0.3s cubic-bezier(0.34, 1.56, 0.64, 1);\n\n &:not(.open) {\n transform: scale(0);\n opacity: 0;\n }\n\n &:not(.shown) {\n display: none;\n }\n\n &.closing {\n transition: transform 0.2s ease-out, opacity 0.2s ease-out;\n }\n}\n\n.Badge-wrapper {\n display: flex;\n\n .Badge {\n margin-inline-start: 0.5rem;\n }\n}\n\n.Badge {\n min-width: 1.5rem;\n height: 1.5rem;\n background: var(--color-gray);\n border-radius: 0.75rem;\n padding: 0 0.4375rem;\n color: white;\n font-size: 0.875rem;\n line-height: 1.5625rem;\n font-weight: 500;\n text-align: center;\n flex-shrink: 0;\n\n body.is-macos & {\n line-height: 1.5rem;\n }\n\n body.is-ios & {\n line-height: 1.375rem;\n min-width: 1.375rem;\n height: 1.375rem;\n padding: 0 0.375rem;\n }\n\n &.mention,\n &.unread:not(.muted) {\n background: var(--color-green);\n color: var(--color-white);\n }\n\n &.pinned:not(.unread) {\n color: var(--color-pinned);\n background: transparent;\n width: 1.5rem;\n padding: 0;\n\n i {\n font-size: 1.5rem;\n }\n }\n\n &.mention {\n width: 1.5rem;\n padding: 0.25rem;\n\n i {\n font-size: 1rem;\n vertical-align: super;\n }\n\n body.is-ios & {\n width: 1.375rem;\n padding: 0.25rem;\n\n i {\n font-size: 0.875rem;\n }\n }\n }\n}\n","\n@keyframes bar-animation-transform-1 {\n 0% { transform: scaleY(0.33); }\n 12.5% { transform: scaleY(1.66); }\n 25% { transform: scaleY(0.33); }\n 37.5% { transform: scaleY(1); }\n 50% { transform: scaleY(0.33); }\n 62.5% { transform: scaleY(1.66); }\n 75% { transform: scaleY(0.33); }\n 87.5% { transform: scaleY(1.66); }\n 100% { transform: scaleY(0.33); }\n}\n\n@keyframes bar-animation-transform-2 {\n 0% { transform: scaleY(1); }\n 12.5% { transform: scaleY(0.33); }\n 25% { transform: scaleY(1.66); }\n 37.5% { transform: scaleY(0.33); }\n 50% { transform: scaleY(1); }\n 62.5% { transform: scaleY(0.33); }\n 75% { transform: scaleY(1.66); }\n 87.5% { transform: scaleY(0.33); }\n 100% { transform: scaleY(1); }\n}\n\n\n.ChatCallStatus {\n position: absolute;\n right: 6px;\n bottom: 0;\n width: 20px;\n height: 20px;\n border-radius: 50%;\n background-color: #0ac630;\n border: 2px solid var(--color-background);\n overflow: hidden;\n\n .indicator {\n width: 100%;\n height: 100%;\n display: flex;\n align-items: center;\n justify-content: center;\n border-radius: 50%;\n & > div {\n width: 2px;\n height: 6px;\n background: var(--color-background);\n border-radius: 1px;\n margin: 1px;\n will-change: transform;\n transform: translateZ(0);\n }\n & > div:nth-child(odd) {\n transform: scaleY(0.8);\n }\n & > div:nth-child(even) {\n transform: scaleY(1.33);\n }\n }\n\n &.selected {\n background-color: var(--color-white);\n border-color: var(--color-chat-active);\n .indicator div{\n background-color: var(--color-chat-active);\n }\n }\n\n &.active .indicator {\n div:nth-child(odd) {\n animation: bar-animation-transform-2 3.2s normal infinite;\n }\n\n div:nth-child(even) {\n animation: bar-animation-transform-1 3.2s normal infinite;\n }\n }\n\n}\n",".Chat {\n --background-color: var(--color-background);\n\n body.is-ios &,\n body.is-macos & {\n --color-text-meta: var(--color-text-meta-apple);\n }\n\n position: absolute;\n top: 0;\n left: 0;\n margin: 0;\n width: 100%;\n\n &.animate-opacity {\n will-change: opacity;\n transition: opacity 0.2s ease-out;\n }\n\n &.animate-transform {\n will-change: transform;\n transition: transform 0.2s ease-out;\n }\n\n &:hover,\n &.ListItem.has-menu-open {\n .Avatar.online::after {\n border-color: var(--color-chat-hover);\n }\n }\n\n @media (max-width: 600px) {\n &.selected {\n --background-color: var(--color-chat-hover) !important;\n\n .Avatar.online::after {\n border-color: var(--color-chat-hover);\n }\n }\n }\n\n @media (min-width: 600px) {\n &.selected,\n &.selected:hover {\n --background-color: var(--color-chat-active) !important;\n\n .VerifiedIcon {\n --color-fill: #fff;\n --color-checkmark: var(--color-primary)\n }\n\n .Avatar.online::after {\n border-color: var(--color-chat-active) !important;\n background: var(--color-white);\n }\n\n .ListItem-button {\n --background-color: var(--color-chat-active) !important;\n --color-text: var(--color-white);\n --color-text-meta-colored: var(--color-white);\n --color-text-meta: var(--color-white);\n --color-text-secondary: var(--color-white);\n --color-error: var(--color-white);\n --color-pinned: var(--color-white);\n }\n\n .icon-muted {\n color: var(--color-white) !important;\n }\n\n .Badge:not(.pinned) {\n background: var(--color-white);\n color: var(--color-chat-active);\n }\n }\n }\n\n @media (max-width: 600px) {\n .ListItem-button {\n border-radius: 0 !important;\n }\n }\n\n .status {\n position: relative;\n flex-shrink: 0;\n }\n\n .info {\n .subtitle {\n margin-top: -0.125rem;\n }\n\n h3 {\n width: auto;\n max-width: 80%;\n }\n\n .icon-muted {\n font-size: 1.25rem;\n margin-left: 0.25rem;\n margin-top: -0.0625rem;\n color: #c6c8ca;\n\n body.is-ios & {\n margin-top: 0;\n margin-right: 0.5rem;\n }\n }\n\n .LastMessageMeta {\n margin-left: auto;\n\n body.is-ios & {\n font-size: 0.875rem;\n margin-right: 0;\n }\n }\n\n .last-message,\n .typing-status {\n padding-right: 0.25rem;\n flex-grow: 1;\n color: var(--color-text-secondary);\n unicode-bidi: plaintext;\n\n &[dir=\"ltr\"] {\n text-align: left;\n }\n\n .sender-name {\n color: var(--color-text);\n }\n\n .draft {\n color: var(--color-error);\n }\n }\n\n .last-message {\n .draft {\n &::after {\n content: \": \";\n }\n }\n\n .colon {\n margin-inline-end: 0.25rem;\n }\n\n .media-preview--image {\n width: 1.25rem;\n height: 1.25rem;\n object-fit: cover;\n border-radius: 0.125rem;\n vertical-align: -0.25rem;\n margin-inline-end: 0.25rem;\n\n body.is-ios & {\n width: 1.125rem;\n height: 1.125rem;\n vertical-align: -0.1875rem;\n }\n\n &.round {\n border-radius: 0.625rem;\n }\n }\n\n .emoji-small {\n width: 1rem;\n height: 1rem;\n vertical-align: -0.125rem;\n }\n\n .icon-play {\n position: relative;\n display: inline-block;\n font-size: 0.75rem;\n color: #fff;\n margin-inline-start: -1.25rem;\n margin-inline-end: 0.5rem;\n bottom: 0.0625rem;\n\n body.is-ios & {\n margin-inline-start: -1.125rem;\n bottom: 0;\n }\n }\n }\n }\n\n &[dir=\"rtl\"] {\n .info {\n .LastMessageMeta {\n margin-left: 0;\n margin-right: auto;\n }\n\n .title,\n .subtitle {\n padding-left: 0.125rem;\n padding-right: 0;\n }\n\n .icon-muted {\n margin-left: 0;\n margin-right: 0.25rem;\n }\n\n .last-message,\n .typing-status {\n padding-left: 0.5rem;\n padding-right: 0;\n text-align: right;\n unicode-bidi: plaintext;\n }\n }\n }\n}\n",".AnimatedEmoji {\n cursor: pointer;\n margin-bottom: 0.75rem;\n\n img {\n position: absolute;\n width: 100%;\n height: 100%;\n }\n\n &.like-sticker-thumb img {\n transform: scale(0.8);\n }\n}\n",".EmptyFolder {\n width: 100%;\n height: 80%;\n display: flex;\n align-items: center;\n justify-content: center;\n flex-direction: column;\n\n @media (max-height: 480px) {\n height: 100%;\n }\n\n .sticker {\n height: 8rem;\n margin-bottom: 1.875rem;\n }\n\n .title {\n font-size: 1.25rem;\n margin-bottom: 0.125rem;\n }\n\n .description {\n font-size: 0.875rem;\n color: var(--color-text-secondary);\n\n body.is-ios &,\n body.is-macos & {\n color: var(--color-text-secondary-apple);\n }\n }\n\n .Button.pill {\n margin-top: 0.625rem;\n font-weight: 500;\n padding-inline-start: 0.75rem;\n unicode-bidi: plaintext;\n\n i {\n margin-inline-end: 0.625rem;\n font-size: 1.5rem;\n }\n }\n}\n",".NothingFound {\n display: flex;\n align-items: center;\n justify-content: center;\n color: var(--color-text-meta);\n\n &.with-description {\n flex-direction: column;\n }\n\n .AnimatedSticker {\n margin: 0 auto;\n }\n\n .description {\n color: var(--color-text-secondary);\n font-size: 0.875rem;\n text-align: center;\n margin: 1rem 0 0;\n unicode-bidi: plaintext;\n }\n}\n",".Media {\n height: 0;\n padding-bottom: 100%;\n overflow: hidden;\n position: relative;\n cursor: pointer;\n\n .video-duration {\n position: absolute;\n left: 0.25rem;\n top: 0.25rem;\n background: rgba(0, 0, 0, 0.25);\n color: #fff;\n font-size: 0.75rem;\n padding: 0 0.3125rem;\n border-radius: 0.1875rem;\n line-height: 1.125rem;\n }\n\n img {\n position: absolute;\n left: 0;\n top: 0;\n width: 100%;\n height: 100%;\n object-fit: cover;\n }\n}\n",".WebLink {\n min-height: 3rem;\n padding: 0.25rem 0 0 3.75rem;\n font-size: 0.875rem;\n line-height: 1.125rem;\n position: relative;\n\n & + & {\n margin-top: 1.5rem;\n }\n\n &.without-media::before {\n content: attr(data-initial);\n width: 3rem;\n height: 3rem;\n position: absolute;\n left: 0;\n top: 0;\n background-color: var(--color-webpage-initial-background);\n color: #fff;\n display: flex;\n align-items: center;\n justify-content: center;\n border-radius: var(--border-radius-messages-small);\n text-transform: uppercase;\n font-weight: 500;\n font-size: 1.5rem;\n }\n\n .Media {\n position: absolute;\n left: 0;\n top: 0;\n width: 3rem;\n height: 3rem;\n cursor: default !important;\n padding-bottom: unset !important;\n border-radius: var(--border-radius-messages-small) !important;\n }\n\n .site-name,\n .site-description,\n .site-title {\n word-break: break-word;\n text-align: initial;\n }\n\n .site-name {\n display: block;\n color: var(--color-links);\n font-weight: 400;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n }\n\n .site-title {\n font-size: 1rem;\n font-weight: 400;\n margin-bottom: 0.0625rem;\n line-height: 1.3125rem;\n }\n\n .sender-name,\n .site-description {\n margin-bottom: 0;\n color: var(--color-text-secondary);\n line-height: 1.125rem;\n max-height: 2.25rem;\n display: -webkit-box;\n -webkit-line-clamp: 2;\n -webkit-box-orient: vertical;\n overflow: hidden;\n }\n\n .sender-name {\n margin-top: 0.25rem;\n }\n\n .site-description .emoji {\n width: 1rem !important;\n height: 1rem !important;\n }\n\n &[dir=\"rtl\"] {\n padding: 0.25rem 3.75rem 0 0;\n\n .Media,\n &.without-media::before {\n left: auto;\n right: 0;\n }\n\n .content {\n text-align: right;\n }\n }\n}\n",".File {\n --secondary-color: var(--color-text-secondary);\n\n .Message.own & {\n --secondary-color: var(--color-text-green);\n }\n\n .content-inner & {\n min-width: 14rem;\n @media (max-width: 340px) {\n min-width: 11rem;\n }\n }\n\n display: flex;\n align-items: center;\n\n .file-icon-container {\n position: relative;\n }\n\n .file-progress,\n .file-icon,\n .file-preview {\n width: 3.375rem;\n height: 3.375rem;\n margin-inline-end: 0.75rem;\n border-radius: var(--border-radius-messages-small);\n background: var(--color-primary);\n display: flex;\n align-items: center;\n justify-content: center;\n }\n\n .file-progress {\n position: absolute;\n top: 0;\n left: 0;\n }\n\n .file-icon {\n padding: 1rem 0.75rem 0.5rem;\n align-items: flex-end;\n flex-shrink: 0;\n position: relative;\n color: white;\n\n .file-ext {\n font-size: 1rem;\n font-weight: 500;\n transition: opacity 0.15s;\n }\n\n &::after {\n content: \"\";\n display: block;\n position: absolute;\n top: 0;\n right: 0;\n border-bottom-left-radius: 0.25rem;\n background: rgba(black, 0.25);\n border-color: transparent var(--background-color) transparent var(--background-color);\n border-width: 0 1.125rem 1.125rem 0;\n border-style: solid;\n /* stylelint-disable-next-line plugin/no-low-performance-animation-properties */\n transition: border-width 0.15s ease-in;\n }\n }\n\n .file-preview {\n background: transparent;\n overflow: hidden;\n\n & + .action-icon,\n & + .file-progress {\n background: rgba(black, 0.5);\n border-radius: var(--border-radius-messages-small);\n }\n\n img {\n object-fit: cover;\n }\n }\n\n .action-icon {\n color: #fff;\n font-size: 1.5rem;\n position: absolute;\n top: 0;\n width: 3.375rem;\n height: 3.375rem;\n display: flex;\n align-items: center;\n justify-content: center;\n opacity: 0;\n transition: opacity 0.25s;\n }\n\n &.interactive .file-icon-container {\n cursor: pointer;\n\n &:hover {\n .file-icon::after {\n border-width: 0;\n }\n\n .action-icon {\n opacity: 1;\n\n &.hidden {\n opacity: 0;\n }\n }\n\n .file-ext {\n opacity: 0;\n }\n }\n }\n\n .file-info {\n margin-top: 0.1875rem;\n margin-right: 0.125rem;\n white-space: nowrap;\n overflow: hidden;\n flex-grow: 1;\n\n & + .Link {\n font-size: 0.75rem;\n color: var(--color-text-secondary);\n padding-left: 1rem;\n white-space: nowrap;\n }\n }\n\n .file-title {\n font-size: 1rem;\n line-height: 1.5rem;\n font-weight: 500;\n overflow: hidden;\n text-overflow: ellipsis;\n\n .emoji {\n vertical-align: -4px;\n }\n }\n\n .file-subtitle {\n font-size: 0.875rem;\n line-height: 0.9375rem;\n color: var(--secondary-color);\n max-width: 100%;\n overflow: hidden;\n text-overflow: ellipsis;\n\n span + span {\n &::before {\n content: \"\\00a0\\2022\\00a0\";\n }\n }\n }\n\n &.smaller {\n --background-color: var(--color-background);\n --border-radius-messages-small: 0.3125rem;\n\n .action-icon,\n .file-progress,\n .file-icon,\n .file-preview {\n width: 3rem;\n height: 3rem;\n }\n\n .file-icon {\n padding-bottom: 0.375rem;\n\n &::after {\n border-width: 0 1rem 1rem 0;\n }\n }\n\n .file-info {\n margin-top: -0.125rem;\n }\n\n .file-title {\n font-weight: 400;\n }\n\n .file-subtitle {\n line-height: 1rem;\n }\n }\n\n &:dir(rtl),\n &[dir=\"rtl\"] {\n .file-progress,\n .file-icon,\n .file-preview {\n margin-left: 0.75rem;\n margin-right: 0;\n }\n\n .file-info {\n text-align: right;\n\n & + .Link {\n padding-left: 0;\n padding-right: 1rem;\n }\n }\n\n .action-icon {\n left: auto;\n right: 0;\n }\n }\n}\n\n// Document extension colors\n.File .file-progress,\n.File .file-icon {\n &.red {\n background-color: var(--color-error);\n }\n\n &.orange {\n background-color: var(--color-warning);\n }\n\n &.green {\n background-color: var(--color-text-green);\n }\n}\n",".Audio {\n display: flex;\n align-items: flex-start;\n position: relative;\n\n .media-loading {\n position: absolute;\n pointer-events: none;\n\n &.interactive {\n pointer-events: all;\n }\n }\n\n &.own {\n --color-text-secondary: var(--accent-color);\n --color-interactive-active: var(--color-text-green);\n --color-interactive-inactive: rgba(var(--color-text-green-rgb), 0.4);\n --color-interactive-buffered: rgba(var(--color-text-green-rgb), 0.4); // Overlays underlying inactive color\n\n .theme-dark & {\n --color-text-green-rgb: 255, 255, 255;\n --color-text-green: var(--color-white);\n }\n\n .Button {\n --color-primary: var(--color-text-green);\n --color-primary-shade: var(--color-green);\n --color-primary-shade-darker: var(--color-green-darker);\n --color-white: var(--color-background-own);\n\n .theme-dark & {\n --color-primary-shade: #fff;\n --color-primary-shade-darker: #fff;\n }\n }\n }\n\n .toggle-play {\n margin-inline-end: 0.5rem;\n\n &.translucent-white {\n color: rgba(255, 255, 255, 0.8);\n }\n\n &.smaller {\n width: 3rem;\n height: 3rem;\n margin-inline-end: 0.75rem;\n\n i {\n font-size: 1.625rem;\n\n &.icon-pause {\n font-size: 1.5625rem;\n }\n }\n }\n\n i {\n position: absolute;\n\n &.icon-play {\n margin-left: 0.1875rem;\n @media (max-width: 600px) {\n margin-left: 0.125rem;\n }\n }\n }\n\n .icon-play,\n .icon-pause {\n opacity: 1;\n transform: scale(1);\n transition: opacity 0.4s, transform 0.6s cubic-bezier(0.34, 1.56, 0.64, 1);\n }\n\n &.play .icon-pause,\n &.pause .icon-play,\n &.loading .icon-play,\n &.loading .icon-pause {\n opacity: 0;\n transform: scale(0.5);\n }\n }\n\n .download-button {\n position: absolute;\n width: 1.1875rem !important;\n height: 1.1875rem !important;\n padding: 0;\n left: 1.9375rem;\n top: 1.9375rem;\n border: 0.125rem solid var(--background-color);\n z-index: 1;\n\n i {\n font-size: 0.8125rem;\n }\n }\n\n &.bigger .download-button {\n left: 2rem;\n top: 2rem;\n border: 0.125rem solid var(--color-background);\n }\n\n .content {\n align-self: center;\n min-width: 0;\n flex-grow: 1;\n text-align: initial;\n }\n\n .content-row {\n display: flex;\n justify-content: space-between;\n }\n\n .title {\n font-weight: 500;\n margin: 0;\n line-height: 1.25;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n }\n\n canvas {\n height: 23px;\n }\n\n .voice-duration {\n margin: 0.25rem 0 0;\n font-size: 0.875rem;\n color: var(--color-text-secondary);\n font-variant-numeric: tabular-nums;\n display: flex;\n align-items: flex-end;\n\n &.unread::after {\n content: \"\";\n position: relative;\n margin: 0 0 0.375rem 0.25rem;\n width: 0.4375rem;\n height: 0.4375rem;\n border-radius: 50%;\n background-color: var(--accent-color);\n }\n }\n\n body.is-ios & {\n .voice-duration.unread::after {\n margin-bottom: 0.4375rem;\n }\n }\n\n &:not(.own) .voice-duration span {\n color: var(--color-primary);\n }\n\n .waveform {\n cursor: pointer;\n margin-left: 1px;\n touch-action: none;\n }\n\n .meta,\n .performer,\n .date {\n font-size: 0.875rem;\n color: var(--color-text-secondary);\n margin: 0;\n overflow: hidden;\n white-space: nowrap;\n text-overflow: ellipsis;\n unicode-bidi: plaintext;\n }\n\n .duration {\n font-size: 0.875rem;\n color: var(--color-text-secondary);\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n flex-shrink: 0;\n font-variant-numeric: tabular-nums;\n }\n\n .meta {\n display: flex;\n align-items: center;\n margin-top: 0.125rem;\n padding-inline-end: 0.5rem;\n\n & > span {\n min-width: 0;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n }\n\n .performer {\n flex-shrink: 0;\n }\n\n .duration.with-seekline {\n margin-inline-end: 0.625rem;\n }\n\n .bullet {\n margin: 0 0.25rem;\n flex-shrink: 0;\n }\n }\n\n .seekline {\n flex-grow: 1;\n height: 1.25rem;\n position: relative;\n top: 3px;\n cursor: pointer;\n touch-action: none;\n\n &::before {\n content: \"\";\n position: absolute;\n width: 100%;\n top: 6px;\n height: 2px;\n background-color: var(--color-interactive-inactive);\n border-radius: 2px;\n }\n }\n\n .seekline-play-progress {\n position: absolute;\n height: 2px;\n border-radius: 2px;\n overflow: hidden;\n width: 100%;\n top: 6px;\n\n i {\n position: absolute;\n width: 100%;\n background-color: var(--color-interactive-active);\n height: 2px;\n border-radius: 2px;\n right: 100%;\n }\n }\n\n .seekline-buffered-progress {\n height: 2px;\n border-radius: 2px;\n\n position: absolute;\n top: 6px;\n\n background-color: var(--color-interactive-buffered);\n }\n\n .seekline-thumb {\n position: absolute;\n width: 100%;\n top: 7px;\n left: 0;\n\n i {\n pointer-events: none;\n position: absolute;\n width: 100%;\n right: 100%;\n\n &::after {\n content: \"\";\n position: absolute;\n top: -6px;\n right: -6px;\n width: 12px;\n height: 12px;\n border-radius: 6px;\n background: var(--color-interactive-active);\n }\n }\n }\n\n &.bigger {\n .title {\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n font-weight: 400;\n line-height: 1.5rem;\n }\n\n .meta {\n height: 1.25rem;\n }\n\n .performer,\n .date {\n line-height: 1.0625rem;\n }\n\n .duration {\n line-height: 1rem;\n }\n\n .media-loading {\n top: 0.1875rem;\n left: 0.1875rem;\n }\n\n &[dir=\"rtl\"] {\n .media-loading {\n left: auto !important;\n right: 0;\n }\n }\n }\n\n .ProgressSpinner.size-s svg {\n width: 2.25rem;\n height: 2.25rem;\n }\n\n &[dir=\"rtl\"] {\n &:last-child {\n margin-bottom: 0.625rem;\n }\n\n .toggle-play {\n margin-left: 0.5rem;\n margin-right: 0;\n\n &.smaller {\n margin-left: 0.75rem;\n margin-right: 0;\n }\n }\n\n .meta.duration.with-seekline {\n margin-inline-start: 0.625rem;\n }\n\n .content,\n .duration {\n text-align: right;\n }\n\n .download-button {\n left: auto;\n right: 2rem;\n }\n }\n}\n\n.has-replies .Audio {\n margin-bottom: 1rem;\n [dir=\"rtl\"] {\n margin-bottom: 1.625rem;\n }\n}\n",".ProfilePhoto {\n width: 100%;\n height: 100%;\n cursor: pointer;\n position: relative;\n\n .avatar-media {\n width: 100%;\n object-fit: cover;\n }\n\n .spinner-wrapper {\n width: 100%;\n height: 100%;\n }\n\n .spinner-wrapper,\n &.deleted-account,\n &.replies-bot-account,\n &.no-photo,\n &.saved-messages {\n display: flex;\n align-items: center;\n justify-content: center;\n color: var(--color-white);\n background: linear-gradient(var(--color-white) -125%, var(--color-user));\n cursor: default;\n }\n\n &.no-photo {\n font-size: 14rem;\n }\n\n &.replies-bot-account,\n &.deleted-account,\n &.saved-messages {\n font-size: 20rem;\n }\n}\n",".ProfileInfo {\n aspect-ratio: 1 / 1;\n position: relative;\n\n @supports not (aspect-ratio: 1 / 1) {\n &::before {\n float: left;\n padding-top: 100%;\n content: \"\";\n }\n\n &::after {\n display: block;\n content: \"\";\n clear: both;\n }\n }\n\n .photo-wrapper {\n width: 100%;\n position: absolute;\n left: 0;\n top: 0;\n bottom: 0;\n\n > .Transition {\n width: 100%;\n height: 100%;\n }\n }\n\n .photo-dashes {\n position: absolute;\n width: 100%;\n height: 0.125rem;\n padding: 0 0.375rem;\n z-index: 1;\n\n display: flex;\n top: 0.5rem;\n left: 0;\n }\n\n .photo-dash {\n flex: 1 1 auto;\n background-color: var(--color-white);\n opacity: 0.25;\n border-radius: 0.125rem;\n margin: 0 0.125rem;\n transition: opacity 300ms ease;\n\n &.current {\n opacity: 0.75;\n }\n }\n\n .navigation {\n position: absolute;\n top: 0;\n bottom: 0;\n width: 25%;\n border: none;\n padding: 0;\n margin: 0;\n appearance: none;\n background: transparent no-repeat;\n background-size: 1.25rem;\n opacity: 0.25;\n transition: opacity 0.15s;\n outline: none;\n cursor: pointer;\n z-index: 1;\n\n &:hover,\n .is-touch-env & {\n opacity: 1;\n }\n\n &.prev {\n left: 0;\n background-image: url(\"../../assets/media_navigation_previous.svg\");\n background-position: 1.25rem 50%;\n }\n\n &.next {\n right: 0;\n background-image: url(\"../../assets/media_navigation_next.svg\");\n background-position: calc(100% - 1.25rem) 50%;\n }\n }\n\n .info {\n position: absolute;\n bottom: 0;\n left: 0;\n width: 100%;\n min-height: 100px;\n padding: 0 1.5rem 0.5rem;\n background: linear-gradient(0deg, rgba(0, 0, 0, 0.5) 0%, rgba(0, 0, 0, 0) 100%);\n color: var(--color-white);\n display: flex;\n flex-direction: column;\n justify-content: flex-end;\n pointer-events: none;\n\n &:dir(rtl) {\n .status {\n text-align: right;\n unicode-bidi: plaintext;\n }\n }\n\n &[dir=\"rtl\"] {\n .status {\n text-align: right;\n unicode-bidi: plaintext;\n }\n }\n }\n\n .title {\n display: flex;\n align-items: center;\n\n h3 {\n font-weight: 500;\n font-size: 1.25rem;\n line-height: 1.375rem;\n white-space: pre-wrap;\n word-break: break-word;\n margin-bottom: 0.25rem;\n }\n\n .VerifiedIcon {\n margin-left: 0.25rem;\n margin-top: -0.125rem;\n }\n\n .emoji {\n width: 1.5rem;\n height: 1.5rem;\n background-size: 1.5rem;\n }\n }\n\n .status {\n font-size: 0.875rem;\n opacity: 0.5;\n }\n\n &[dir=\"rtl\"] {\n .navigation.prev {\n left: auto;\n right: 0;\n transform: scaleX(-1);\n }\n\n .navigation.next {\n left: 0;\n right: auto;\n transform: scaleX(-1);\n }\n }\n\n &.self {\n margin: 0 -0.5rem 0.75rem;\n overflow: hidden;\n\n &.ghost {\n margin: 0;\n }\n\n .info {\n padding-bottom: 0.75rem;\n }\n\n .status {\n line-height: 1rem;\n }\n }\n}\n",".DropTarget {\n border-radius: var(--border-radius-default);\n background: var(--color-background);\n padding: 1.25rem;\n flex: 1 1 auto;\n width: 100%;\n max-width: 43.75rem;\n margin-left: auto;\n margin-right: auto;\n margin-bottom: 0.3125rem;\n display: flex;\n color: #a4acb3;\n box-shadow: 0 1px 2px var(--color-default-shadow);\n\n @media (max-height: 350px) {\n padding: 0.75rem;\n }\n\n &.hovered .target-content {\n color: var(--color-primary);\n background-image: var(--drag-target-border-hovered);\n }\n\n & + & {\n margin-top: 0.3125rem;\n }\n\n &:last-child {\n margin-bottom: 0;\n }\n\n .target-content {\n pointer-events: none;\n background-image: var(--drag-target-border);\n border-radius: 0.5rem;\n flex: 1 1 100%;\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n transition: 0.2s color, 0.2s background-image;\n }\n\n .icon {\n font-size: 6.25rem;\n line-height: 4.6875rem;\n margin-bottom: 2.25rem;\n\n @media (max-height: 520px) {\n font-size: 4.25rem;\n line-height: 3.5rem;\n margin-bottom: 1rem;\n }\n\n @media (max-height: 450px) {\n font-size: 2rem;\n line-height: 1rem;\n margin-bottom: 0.5rem;\n margin-top: 0.25rem;\n }\n }\n\n .title {\n font-size: 1.3125rem;\n font-weight: 500;\n letter-spacing: -0.18px;\n\n @media (max-height: 450px) {\n font-size: 1rem;\n }\n }\n\n .description {\n font-size: 1rem;\n letter-spacing: 0.3px;\n\n @media (max-height: 450px) {\n font-size: 0.875rem;\n }\n }\n}\n",".FloatingActionButton {\n position: absolute;\n right: 1rem;\n bottom: 1rem;\n transform: translateY(calc(5rem - var(--group-call-header-height, 0rem)));\n transition: transform 0.25s cubic-bezier(0.34, 1.56, 0.64, 1);\n\n body.animation-level-0 & {\n transition: none !important;\n }\n\n &.revealed {\n transform: translateY(calc(0rem - var(--group-call-header-height, 0rem)));\n }\n}\n",".DropArea {\n position: absolute;\n top: 0;\n right: 0;\n left: 0;\n height: 100vh;\n z-index: var(--z-drop-area);\n padding: 80px 20px 20px;\n\n display: flex;\n flex-direction: column;\n\n #Main.right-column-open & {\n max-width: calc(100% - var(--right-column-width));\n }\n}\n",".StickerButton {\n display: inline-block;\n width: 4rem;\n height: 4rem;\n margin: 0.5rem;\n border-radius: var(--border-radius-messages-small);\n background: transparent no-repeat center;\n background-size: contain;\n transition: background-color 0.15s ease, opacity 0.3s ease !important;\n position: relative;\n\n &.interactive {\n cursor: pointer;\n\n &:hover {\n background-color: var(--color-interactive-element-hover);\n\n .sticker-unfave-button {\n opacity: 1;\n }\n }\n }\n\n @media (max-width: 600px) {\n margin: 0.25rem;\n }\n\n &.set-button {\n width: 2.75rem !important;\n height: 2.75rem;\n margin: 0 0.5rem;\n }\n\n &.large {\n width: 10rem;\n height: 10rem;\n margin: 0;\n }\n\n .AnimatedSticker,\n img,\n video {\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n }\n\n img,\n video {\n object-fit: contain;\n -webkit-touch-callout: none;\n user-select: none;\n }\n\n .sticker-unfave-button {\n position: absolute;\n top: -0.5rem;\n right: -0.5rem;\n width: 1.25rem;\n height: 1.25rem;\n padding: 0.125rem;\n\n i {\n font-size: 1rem;\n }\n\n opacity: 0;\n }\n\n .sticker-context-menu {\n position: absolute;\n\n .bubble {\n width: auto;\n }\n }\n}\n",".TextFormatter {\n transform: translate(-50%, -3.25rem);\n\n &,\n &-link-control {\n position: absolute;\n background: var(--color-background);\n border-radius: var(--border-radius-messages);\n padding: 0.5rem 0.375rem;\n box-shadow: 0 1px 2px var(--color-default-shadow);\n }\n\n &-link-control {\n left: 0;\n top: 0;\n opacity: 0;\n pointer-events: none;\n transition: opacity 0.3s ease;\n\n .Modal & {\n max-width: 100%;\n }\n\n @media (max-width: 600px) {\n max-width: calc(100vw - var(--text-formatter-left) + 3rem);\n }\n\n input {\n border: none !important;\n outline: none !important;\n width: 100%;\n color: var(--color-text);\n background-color: var(--color-background);\n }\n }\n\n &-buttons,\n &-link-url-confirm {\n display: flex;\n flex-wrap: nowrap;\n align-items: center;\n }\n\n &-divider {\n width: 1px;\n height: 1.75rem;\n margin: 0 0.25rem;\n background-color: var(--color-borders);\n }\n\n &-link-url-input-wrapper {\n width: 20rem;\n position: relative;\n max-width: 100%;\n\n @media (max-width: 600px) {\n max-width: 90vw;\n }\n\n &::before,\n &::after {\n content: \"\";\n display: block;\n position: absolute;\n top: 0;\n bottom: 0;\n width: 1rem;\n z-index: 2;\n opacity: 0;\n transition: opacity 0.2s ease;\n }\n\n &::before {\n left: 0;\n background: linear-gradient(to right, var(--color-background) 0.25rem, transparent 1rem);\n }\n\n &::after {\n right: 0;\n background: linear-gradient(to left, var(--color-background) 0.25rem, transparent 1rem);\n }\n\n &.mask-left {\n &::before {\n opacity: 1;\n }\n }\n\n &.mask-right {\n &::after {\n opacity: 1;\n }\n }\n }\n\n &-link-url-confirm {\n flex-shrink: 0;\n opacity: 0;\n transition: opacity 0.3s ease;\n\n &.shown {\n opacity: 1;\n }\n }\n\n &.link-control-shown {\n .TextFormatter-link-control {\n opacity: 1;\n pointer-events: all;\n }\n }\n\n .Button {\n width: 2rem;\n height: 2rem;\n padding: 0.25rem;\n font-size: 1.5rem;\n margin: 0 0.125rem;\n border-radius: var(--border-radius-messages-small);\n flex-shrink: 0;\n cursor: pointer;\n\n &.active {\n background-color: var(--color-primary) !important;\n color: white;\n }\n\n &.disabled {\n opacity: 0.5;\n pointer-events: none;\n }\n }\n}\n",".Picker {\n height: 100%;\n display: flex;\n flex-direction: column;\n overflow: hidden;\n\n .picker-header {\n padding: 0 1rem 0.25rem 0.75rem;\n border-bottom: 1px solid var(--color-borders);\n display: flex;\n flex-flow: row wrap;\n flex-shrink: 0;\n\n overflow-y: auto;\n max-height: 20rem;\n\n .input-group {\n margin-bottom: 0.5rem;\n margin-left: 0.5rem;\n flex-grow: 1;\n }\n\n .form-control {\n height: 2rem;\n border: none;\n border-radius: 0;\n padding: 0;\n box-shadow: none;\n }\n }\n\n .picker-list {\n flex-grow: 1;\n overflow-y: auto;\n overflow-x: hidden;\n padding: 0.5rem;\n\n @media (max-width: 600px) {\n padding-left: 0 !important;\n padding-right: 0 !important;\n }\n }\n\n .no-results {\n height: 100%;\n margin: 0;\n padding: 1rem 1rem;\n display: flex;\n align-items: center;\n justify-content: center;\n color: var(--color-text-secondary);\n }\n}\n"],"names":[],"sourceRoot":""} \ No newline at end of file diff --git a/dist/13.c2828ad8a236049343ac.js b/dist/13.c2828ad8a236049343ac.js new file mode 100644 index 000000000..c465ec9fb --- /dev/null +++ b/dist/13.c2828ad8a236049343ac.js @@ -0,0 +1,2 @@ +"use strict";(self.webpackChunktelegram_t=self.webpackChunktelegram_t||[]).push([[13],{7854:(e,t,n)=>{n.d(t,{Z:()=>m});var a=n(4050),r=n(6137),i=n(6752),o=n(3657),s=n(6202),l=n(692),c=n(5296),d=n(4399),u=n(7799);const m=(0,a.X$)((e=>{var t;let{sticker:n,effect:m,isOwn:h,soundId:v,size:f="medium",observeIntersection:p,lastSyncTime:g,forceLoadPreview:Z,messageId:E,chatId:P,activeEmojiInteractions:y}=e;const{markAnimationLoaded:C,isAnimationLoaded:b,ref:N,width:w,style:k,handleClick:I,playKey:S}=(0,c.Z)(f,P,E,v,y,h,void 0,null==m?void 0:m.emoji),T=`sticker${n.id}`,M=(0,o.Op)(N,p),x=null===(t=n.thumbnail)||void 0===t?void 0:t.dataUri,L=(0,s.Z)(`${T}?size=m`,!M&&!Z,r.IU.BlobUrl,g),$=(0,l.Z)(L),O=(0,s.Z)(T,!M,r.IU.Lottie,g),A=Boolean(O);return a.ZP.createElement("div",{ref:N,className:(0,i.Z)("AnimatedEmoji media-inner",n.id===d.wB&&"like-sticker-thumb"),style:k,onClick:I},!b&&x&&a.ZP.createElement("img",{src:x,alt:""}),!b&&L&&a.ZP.createElement("img",{src:L,className:$,alt:""}),A&&T&&a.ZP.createElement(u.Z,{key:T,id:T,animationData:O,size:w,quality:1,play:M&&S,forceOnHeavyAnimation:!0,noLoop:!0,onLoad:C}))}))},4752:(e,t,n)=>{n.d(t,{Z:()=>x});var a=n(4050),r=n(3555),i=n(6137),o=n(1713),s=n(7361),l=n(790),c=n(5806);function d(e,t,n,a){let{peak:r,fillStyle:i,progressFillStyle:o}=a;const s=4*t.length;e.width=2*s,e.height=46,e.style.width=`${s}px`,e.style.height="23px";const l=e.getContext("2d");l.scale(2,2),t.forEach(((e,a)=>{l.globalAlpha=a/t.length>=n?.5:1,l.fillStyle=n>a/t.length?o:i;const s=Math.max(2,e/Math.max(1,r)*23);!function(e,t,n,a,r,i){2<2*i&&(i=1),r<2*i&&(i=r/2),e.beginPath(),e.moveTo(t+i,n),e.arcTo(t+2,n,t+2,n-r,i),e.arcTo(t+2,n-r,t,n-r,i),e.arcTo(t,n-r,t,n,i),e.arcTo(t,n,t+2,n,i),e.closePath()}(l,4*a,23,0,s,1),l.fill()}))}var u=n(6752),m=n(2340),h=n(5376);function v(e){const t=8*e.length,n=Math.floor(t/5);if(!n)return[];const a=Array(n),r=e;for(let e=0,t=n-1;e!==t;++e){const t=Math.floor(5*e/8),n=Math.floor(5*e%8),i=r[t]+(r[t+1]<<8);a[e]=i>>n&31}const i=Math.floor(5*(n-1)/8),o=Math.floor(5*(n-1)%8),s=r[i]+(r[i+1]<<8);return a[n-1]=s>>o&31,a}function f(e,t){let n=0;const a=new Array(t),r=e.length/t,i=e[0],o=e[e.length-1];for(let d=0;d{let{start:t,end:n}=e;return a.ZP.createElement("div",{className:"seekline-buffered-progress",style:`left: ${100*t}%; right: ${100-100*n}%`})})),a.ZP.createElement("span",{className:"seekline-play-progress"},a.ZP.createElement("i",{style:`transform: translateX(${100*e}%)`})),a.ZP.createElement("span",{className:"seekline-thumb"},a.ZP.createElement("i",{style:`transform: translateX(${100*e}%)`})))}const x=(0,a.X$)((e=>{let{theme:t,message:n,senderTitle:x,uploadProgress:L,origin:$,date:O,lastSyncTime:A,className:F,isSelectable:D,isSelected:R,isDownloading:B,onPlay:U,onReadMedia:X,onCancelUpload:Y,onDateClick:z}=e;const{cancelMessageMediaDownload:V,downloadMessageMedia:j}=(0,r.Sv)(),{content:{audio:K,voice:H,video:W},isMediaUnread:q}=n,J=Boolean(H||W),_=(0,a.sO)(!1),G=(0,a.sO)(null),Q=(0,P.Z)(),{isRtl:ee}=Q,[te,ne]=(0,a.eJ)(!1),ae=A,re=(0,c.Ti)(n,"pictogram"),ie=(0,C.Z)(re,!1,i.IU.BlobUrl),oe=(0,C.Z)((0,c.Ti)(n,"inline"),!ae,(0,c.kG)(n,"inline")),{loadProgress:se}=(0,p.Z)((0,c.Ti)(n,"download"),!B),le=(0,a.I4)((()=>{ne(!0),U(n.id,n.chatId)}),[n,U]),ce=(0,a.I4)((()=>{ne(!1)}),[]),{isBuffered:de,bufferedRanges:ue,bufferingHandlers:me,checkBuffering:he}=(0,Z.Z)(),{isPlaying:ve,playProgress:fe,playPause:pe,setCurrentTime:ge,duration:Ze}=(0,E.Z)((0,b.An)(n),(0,c.XV)(n),J?"voice":"audio",oe,me,void 0,he,te,le,ce,(0,c.CI)(n)),Ee=(0,c.B4)(n),Pe=function(e,t){let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:0,r=arguments.length>3&&void 0!==arguments[3]&&arguments[3];const i=(0,a.sO)(null),{data:o,peak:s}=(0,a.Ye)((()=>{if(!t)return;const{waveform:e,duration:n}=t;if(!e)return{data:new Array(Math.min(n,30)).fill(0),peak:0};const a=Math.min(n/10,1),r=Math.round(S+(T-S)*a);return f(v(new Uint8Array(e)),r)}),[t])||{};return(0,a.bt)((()=>{const t=i.current;t&&o&&void 0!==s&&d(t,o,n,{peak:s,fillStyle:r?"dark"===e?"#B7ABED":"#AEDFA4":"dark"===e?"#494A78":"#ADD3F7",progressFillStyle:r?"dark"===e?"#FFFFFF":"#4FAE4E":"dark"===e?"#8774E1":"#3390EC"})}),[r,s,n,o,e]),i}(t,H,q&&!Ee?1:fe,Ee),ye=ve||fe>0&&fe<1;(0,a.d4)((()=>{ne(ve)}),[ve]);const Ce=te&&!de,{isUploading:be,isTransferring:Ne,transferProgress:we}=(0,c.Sc)(n,L||se,Ce||B),{shouldRender:ke,transitionClassNames:Ie}=(0,g.Z)(Ne),Se=ke&&(Ce||be),Te=(0,a.I4)((()=>{be?null==Y||Y():(ve||U(n.id,n.chatId),(0,r.Sv)().setAudioPlayerOrigin({origin:$}),ne(!te),pe())}),[be,ve,te,pe,Y,U,n.id,n.chatId,$]);(0,a.d4)((()=>{X&&q&&(ve||B)&&X()}),[ve,q,X,B]);const Me=(0,a.I4)((()=>{B?V({message:n}):j({message:n})}),[V,j,B,n]),xe=(0,a.I4)((e=>{if(_.current&&G.current){const{width:t,left:n}=G.current.getBoundingClientRect(),a=e instanceof MouseEvent?e.clientX:e.targetTouches[0].clientX;e.stopPropagation(),ge(Math.max(Math.min(Ze*((a-n)/t),Ze-.1),.001))}}),[Ze,ge]),Le=(0,a.I4)((e=>{e instanceof MouseEvent&&2===e.button||(_.current=!0,xe(e))}),[xe]),$e=(0,a.I4)((()=>{_.current=!1}),[]),Oe=(0,a.I4)((()=>{z(n.id,n.chatId)}),[z,n.id,n.chatId]);function Ae(){if(J)return x||"Voice";const{title:e,fileName:t}=K;return e||t}(0,a.d4)((()=>{if(G.current&&ye)return(0,y.sf)(G.current,{onCapture:Le,onRelease:$e,onClick:$e,onDrag:xe})}),[ye,Le,xe,$e]);const Fe=(0,u.Z)("Audio",F,Ee&&$===o.Cr.Inline&&"own",($===o.Cr.Search||$===o.Cr.SharedMedia)&&"bigger",R&&"audio-is-selected"),De=["toggle-play"];Se?De.push("loading"):De.push(ve?"pause":"play");const Re=(0,u.Z)("content",ye&&"with-seekline");function Be(){return a.ZP.createElement("div",{className:Re},a.ZP.createElement("div",{className:"content-row"},a.ZP.createElement("p",{className:"title",dir:"auto",title:Ae()},(0,m.Z)(Ae())),a.ZP.createElement("div",{className:"message-date"},O&&a.ZP.createElement(I.Z,{className:"date",onClick:Oe},(0,l.VX)(Q,1e3*O)))),ye&&a.ZP.createElement("div",{className:"meta search-result",dir:ee?"rtl":void 0},a.ZP.createElement("span",{className:"duration with-seekline",dir:"auto"},fe<1&&`${(0,l.k9)(Ze*fe,Ze)}`),M(fe,ue,G)),!ye&&function(){if(J)return a.ZP.createElement("div",{className:"meta",dir:ee?"rtl":void 0},(0,l.k9)((H||W).duration));const{performer:e}=K;return a.ZP.createElement("div",{className:"meta",dir:ee?"rtl":void 0},(0,l.k9)(Ze),a.ZP.createElement("span",{className:"bullet"},"•"),e&&a.ZP.createElement("span",{className:"performer",title:e},(0,m.Z)(e)),e&&x&&a.ZP.createElement("span",{className:"bullet"},"•"),x&&a.ZP.createElement("span",{title:x},(0,m.Z)(x)))}())}return a.ZP.createElement("div",{className:Fe,dir:Q.isRtl?"rtl":"ltr"},D&&a.ZP.createElement("div",{className:"message-select-control"},R&&a.ZP.createElement("i",{className:"icon-select"})),a.ZP.createElement(w.Z,{round:!0,ripple:!s.wB,size:"smaller",color:ie?"translucent-white":"primary",className:De.join(" "),ariaLabel:ve?"Pause audio":"Play audio",onClick:Te,isRtl:Q.isRtl,backgroundImage:ie},a.ZP.createElement("i",{className:"icon-play"}),a.ZP.createElement("i",{className:"icon-pause"})),ke&&a.ZP.createElement("div",{className:(0,u.Z)("media-loading",Ie,Se&&"interactive")},a.ZP.createElement(k.Z,{progress:we,transparent:!0,size:"m",onClick:Se?Te:void 0,noCross:!Se})),K&&!be&&a.ZP.createElement(w.Z,{round:!0,size:"tiny",className:"download-button",ariaLabel:B?"Cancel download":"Download",onClick:Me},a.ZP.createElement("i",{className:B?"icon-close":"icon-arrow-down"})),$===o.Cr.Search&&Be(),$!==o.Cr.Search&&K&&function(e,t,n,r,i,o,s,c,d,u,v){const{title:f,performer:p,fileName:g}=t,Z=r||i>0&&i<1,{isRtl:E}=N.i0;return a.ZP.createElement("div",{className:"content"},a.ZP.createElement("p",{className:"title",dir:"auto",title:f},(0,m.Z)(f||g)),Z&&a.ZP.createElement("div",{className:"meta",dir:E?"rtl":void 0},a.ZP.createElement("span",{className:"duration with-seekline",dir:"auto"},(0,l.k9)(n*i,n)),M(i,o,s)),!Z&&c&&a.ZP.createElement("div",{className:"meta",dir:E?"rtl":void 0},u?`${(0,h.yW)(t.size*u)} / `:void 0,(0,h.yW)(t.size)),!Z&&!c&&a.ZP.createElement("div",{className:"meta",dir:E?"rtl":void 0},a.ZP.createElement("span",{className:"duration",dir:"auto"},(0,l.k9)(n)),p&&a.ZP.createElement(a.ZP.Fragment,null,a.ZP.createElement("span",{className:"bullet"},"•"),a.ZP.createElement("span",{className:"performer",dir:"auto",title:p},(0,m.Z)(p))),d&&a.ZP.createElement(a.ZP.Fragment,null,a.ZP.createElement("span",{className:"bullet"},"•"),a.ZP.createElement(I.Z,{className:"date",onClick:v},(0,l.ZK)(e,1e3*d,!0)))))}(Q,K,Ze,ve,fe,ue,G,B||be,O,we,z?Oe:void 0),$===o.Cr.SharedMedia&&(H||W)&&Be(),$===o.Cr.Inline&&H&&function(e,t,n,r,i){return a.ZP.createElement("div",{className:"content"},a.ZP.createElement("div",{className:"waveform",draggable:!1,ref:t},a.ZP.createElement("canvas",{ref:n})),a.ZP.createElement("p",{className:(0,u.Z)("voice-duration",i&&"unread"),dir:"auto"},0===r?(0,l.k9)(e.duration):(0,l.k9)(e.duration*r)))}(H,G,Pe,fe,q))}))},180:(e,t,n)=>{n.d(t,{Z:()=>h});var a=n(4050),r=n(3555),i=n(1192),o=n(5806),s=n(2340),l=n(4319),c=n(6272),d=n(9107),u=n(1876),m=n(3321);const h=(0,a.X$)((0,r.c$)(((e,t)=>{let{chatOrUserId:n}=t;const{lastSyncTime:a,countryList:{phoneCodes:r}}=e,s=n?(0,i.Z1)(e,n):void 0,l=(0,o.YC)(n)?(0,i.dy)(e,n):void 0,c=s&&(0,o.i4)(s,(0,i.dZ)(e),(0,i.NJ)(e));return{lastSyncTime:a,phoneCodeList:r,chat:s,user:l,canInviteUsers:s&&!l&&(!(0,o.eA)(s)&&!(0,o.Mg)(s,"inviteUsers")||(0,o.VE)(s,"inviteUsers")),isMuted:c}}))((e=>{let{lastSyncTime:t,user:n,chat:i,forceShowSelf:h,canInviteUsers:v,isMuted:f,phoneCodeList:p}=e;const{loadFullUser:g,showNotification:Z,updateChatMutedState:E}=(0,r.Sv)(),{id:P,fullInfo:y,username:C,phoneNumber:b,isSelf:N}=n||{},{id:w}=i||{},k=(0,d.Z)();(0,a.d4)((()=>{t&&P&&g({userId:P})}),[g,P,t]);const I=(0,a.I4)((()=>{E({chatId:w,isMuted:!f})}),[w,f,E]);if(!i||i.isRestricted||N&&!h)return;function S(e,t){(0,l.TE)(e),Z({message:`${t} was copied`})}const T=b&&(0,c.WZ)(p,b),M=(0,o.hu)(i),x=(null==y?void 0:y.bio)||(0,o.GM)(i);return a.ZP.createElement("div",{className:"ChatExtra"},T&&Boolean(T.length)&&a.ZP.createElement(u.Z,{icon:"phone",multiline:!0,narrow:!0,ripple:!0,onClick:()=>S(T,k("Phone"))},a.ZP.createElement("span",{className:"title",dir:"auto"},T),a.ZP.createElement("span",{className:"subtitle"},k("Phone"))),C&&a.ZP.createElement(u.Z,{icon:"mention",multiline:!0,narrow:!0,ripple:!0,onClick:()=>S(`@${C}`,k("Username"))},a.ZP.createElement("span",{className:"title",dir:"auto"},(0,s.Z)(C)),a.ZP.createElement("span",{className:"subtitle"},k("Username"))),x&&Boolean(x.length)&&a.ZP.createElement(u.Z,{icon:"info",multiline:!0,narrow:!0,isStatic:!0},a.ZP.createElement("span",{className:"title",dir:"auto"},(0,s.Z)(x,["br","links","emoji"])),a.ZP.createElement("span",{className:"subtitle"},k(P?"UserBio":"Info"))),(v||!C)&&M&&a.ZP.createElement(u.Z,{icon:i.username?"mention":"link",multiline:!0,narrow:!0,ripple:!0,onClick:()=>S(M,k("SetUrlPlaceholder"))},a.ZP.createElement("div",{className:"title"},M),a.ZP.createElement("span",{className:"subtitle"},k("SetUrlPlaceholder"))),!h&&a.ZP.createElement(u.Z,{icon:"unmute",ripple:!0,onClick:I},a.ZP.createElement("span",null,k("Notifications")),a.ZP.createElement(m.Z,{id:"group-notifications",label:P?"Toggle User Notifications":"Toggle Chat Notifications",checked:!f,inactive:!0})))})))},329:(e,t,n)=>{n.d(t,{Z:()=>m});var a=n(4050),r=n(3555),i=n(1192),o=n(5806),s=n(9107),l=n(2340),c=n(172),d=n(3103),u=n(231);const m=(0,a.X$)((0,r.c$)(((e,t)=>{let{chat:n}=t;const a=(0,o.YC)(n.id),r=(0,i.FM)(e,n.id),s=a&&(0,i.dy)(e,(0,o.zX)(n)),l=s&&(0,o.cS)(s)&&!n.isSupport,c=a&&!r&&!l,d=a?(0,o.Vl)((0,i.dy)(e,(0,o.zX)(n))):void 0;return{isPrivateChat:a,isChatWithSelf:r,isBot:l,isChannel:(0,o.eA)(n),isBasicGroup:(0,o.G9)(n),isSuperGroup:(0,o.ZV)(n),currentUserId:e.currentUserId,canDeleteForAll:c,contactName:d}}))((e=>{let{isOpen:t,chat:n,isChannel:i,isPrivateChat:m,isChatWithSelf:h,isBot:v,isBasicGroup:f,isSuperGroup:p,currentUserId:g,canDeleteForAll:Z,contactName:E,onClose:P,onCloseAnimationEnd:y}=e;const{leaveChannel:C,deleteHistory:b,deleteChannel:N,deleteChatUser:w,blockContact:k}=(0,r.Sv)(),I=(0,s.Z)(),S=(0,o.U)(I,n),T=(0,a.I4)((()=>{b({chatId:n.id,shouldDeleteForAll:!0}),P()}),[b,n.id,P]),M=(0,a.I4)((()=>{b({chatId:n.id,shouldDeleteForAll:!0}),k({contactId:n.id,accessHash:n.accessHash}),P()}),[b,n.id,n.accessHash,k,P]),x=(0,a.I4)((()=>{m?b({chatId:n.id,shouldDeleteForAll:!1}):f?(w({chatId:n.id,userId:g}),b({chatId:n.id,shouldDeleteForAll:!1})):!i&&!p||n.isCreator?(i||p)&&n.isCreator&&N({chatId:n.id}):C({chatId:n.id}),P()}),[m,f,i,p,g,n.isCreator,n.id,P,b,w,C,N]),L=(0,a.I4)((()=>{i||p?(C({chatId:n.id}),P()):x()}),[n.id,x,i,p,C,P]);return a.ZP.createElement(d.Z,{isOpen:t,className:"DeleteChatModal",header:a.ZP.createElement("div",{className:"modal-header",dir:I.isRtl?"rtl":void 0},a.ZP.createElement(c.Z,{size:"tiny",chat:n,isSavedMessages:h}),a.ZP.createElement("h3",{className:"modal-title"},I(i&&!n.isCreator?"LeaveChannel":i&&n.isCreator?"ChannelDelete":f||p?"Group.LeaveGroup":"DeleteChatUser"))),onClose:P,onCloseAnimationEnd:y},i&&n.isCreator?a.ZP.createElement("p",null,(0,l.Z)(I("ChatList.DeleteAndLeaveGroupConfirmation",S),["simple_markdown"])):i&&!n.isCreator||f||p?a.ZP.createElement("p",null,(0,l.Z)(I("ChannelLeaveAlertWithName",S),["simple_markdown"])):a.ZP.createElement("p",null,(0,l.Z)(I("ChatList.DeleteChatConfirmation",E),["simple_markdown"])),v&&a.ZP.createElement(u.Z,{color:"danger",className:"confirm-dialog-button",isText:!0,onClick:M},I("DeleteAndStop")),Z&&a.ZP.createElement(u.Z,{color:"danger",className:"confirm-dialog-button",isText:!0,onClick:T},E?(0,l.Z)(I("ChatList.DeleteForEveryone",E)):I("DeleteForAll")),!m&&n.isCreator&&a.ZP.createElement(u.Z,{color:"danger",className:"confirm-dialog-button",isText:!0,onClick:x},I("DeleteForAll")),a.ZP.createElement(u.Z,{color:"danger",className:"confirm-dialog-button",isText:!0,onClick:m?x:L},I(i&&!n.isCreator?"LeaveChannel":i&&n.isCreator?"Chat.Input.Delete":f||p?"Group.LeaveGroup":Z?"ChatList.DeleteForCurrentUser":"Delete")),a.ZP.createElement(u.Z,{className:"confirm-dialog-button",isText:!0,onClick:P},I("Cancel")))})))},2535:(e,t,n)=>{n.d(t,{Z:()=>m});var a=n(4050),r=n(3555),i=n(5376),o=n(5806),s=n(3657),l=n(2566),c=n(6202),d=n(706),u=n(7002);const m=(0,a.X$)((e=>{let{message:t,observeIntersection:n,smaller:m,canAutoLoad:h,autoLoadFileMaxSizeMb:v,uploadProgress:f,withDate:p,datetime:g,className:Z,sender:E,isSelected:P,isSelectable:y,onCancelUpload:C,onMediaClick:b,onDateClick:N,isDownloading:w}=e;const k=(0,r.Sv)(),I=(0,a.sO)(null),S=t.content.document,{fileName:T,size:M,timestamp:x}=S,L=(0,i.K2)(S)||"",$=(0,s.Op)(I,n),[O,A]=(0,d.Z)();(0,a.d4)((()=>{$&&A()}),[$,A]);const[F,D]=(0,a.eJ)(h&&(!v||M<=1048576*v)),R=Boolean(w||F&&O),B=(0,o.Ti)(t,"download"),{loadProgress:U,mediaData:X}=(0,l.Z)(B,!R,void 0,void 0,void 0,!0),Y=Boolean(X),{isUploading:z,isTransferring:V,transferProgress:j}=(0,o.Sc)(t,f||U,R&&!Y),K=(0,i.v6)(S),H=K?(0,o.DH)(t):void 0,W=K?S.previewBlobUrl:void 0,q=(0,c.Z)((0,o.Ti)(t,"pictogram"),!$),J=b&&Boolean(S.mediaType),_=(0,a.I4)((()=>{z?C&&C():w?k.cancelMessageMediaDownload({message:t}):V?D(!1):J?b():k.downloadMessageMedia({message:t})}),[z,w,V,J,C,k,t,b]),G=(0,a.I4)((()=>{N(t.id,t.chatId)}),[N,t.id,t.chatId]);return a.ZP.createElement(u.Z,{ref:I,name:T,extension:L,size:M,timestamp:p?g||x:void 0,thumbnailDataUri:H,previewData:W||q,smaller:m,isTransferring:V,isUploading:z,transferProgress:j,className:Z,sender:E,isSelectable:y,isSelected:P,actionIcon:J?(0,o.hC)(t)?"icon-play":"icon-eye":"icon-download",onClick:_,onDateClick:N?G:void 0})}))},8780:(e,t,n)=>{n.d(t,{Z:()=>o});var a=n(4050),r=n(9107),i=n(6752);const o=e=>{let{content:t,className:n}=e;const o=(0,r.Z)();return a.ZP.createElement("span",{className:(0,i.Z)("DotAnimation",n),dir:o.isRtl?"rtl":"auto"},t,a.ZP.createElement("span",{className:"ellipsis"}))}},7002:(e,t,n)=>{n.d(t,{Z:()=>v});var a=n(4050),r=n(1212),i=n(692),o=n(6752),s=n(790),l=n(5376),c=n(4399),d=n(2340),u=n(9107),m=n(9196),h=n(8033);const v=(0,a.X$)((e=>{let{ref:t,name:n,size:v,extension:f="",timestamp:p,sender:g,thumbnailDataUri:Z,previewData:E,className:P,smaller:y,isTransferring:C,isUploading:b,isSelectable:N,isSelected:w,transferProgress:k,actionIcon:I,onClick:S,onDateClick:T}=e;const M=(0,u.Z)();let x=(0,a.sO)(null);t&&(x=t);const L=(0,i.Z)(E),{shouldRender:$,transitionClassNames:O}=(0,r.Z)(C,void 0,!0),A=(0,l.Oh)(f),F=(0,l.yW)(v),{width:D,height:R}=(0,c.lE)(y),B=(0,o.Z)("File",P,y&&"smaller",S&&!b&&"interactive",w&&"file-is-selected");return a.ZP.createElement("div",{ref:x,className:B,dir:M.isRtl?"rtl":void 0},N&&a.ZP.createElement("div",{className:"message-select-control"},w&&a.ZP.createElement("i",{className:"icon-select"})),a.ZP.createElement("div",{className:"file-icon-container",onClick:b?void 0:S},Z||E?a.ZP.createElement("div",{className:"file-preview media-inner"},a.ZP.createElement("img",{src:Z,width:D,height:R,className:"thumbnail",alt:""}),a.ZP.createElement("img",{src:E,className:(0,o.Z)("full-media",L),width:D,height:R,alt:""})):a.ZP.createElement("div",{className:`file-icon ${A}`},f.length<=4&&a.ZP.createElement("span",{className:"file-ext",dir:"auto"},f)),$&&a.ZP.createElement("div",{className:(0,o.Z)("file-progress",A,O)},a.ZP.createElement(m.Z,{progress:k,size:y?"s":"m",onClick:b?S:void 0})),S&&a.ZP.createElement("i",{className:(0,o.Z)("action-icon",I||"icon-download",$&&"hidden")})),a.ZP.createElement("div",{className:"file-info"},a.ZP.createElement("div",{className:"file-title",dir:"auto"},(0,d.Z)(n)),a.ZP.createElement("div",{className:"file-subtitle",dir:"auto"},a.ZP.createElement("span",null,C&&k?`${Math.round(100*k)}%`:F),g&&a.ZP.createElement("span",{className:"file-sender"},(0,d.Z)(g)),!g&&p&&a.ZP.createElement(a.ZP.Fragment,null,a.ZP.createElement("span",{className:"bullet"}),a.ZP.createElement(h.Z,{onClick:T},(0,s.ZK)(M,1e3*p,!0))))),g&&p&&a.ZP.createElement(h.Z,{onClick:T},(0,s.VX)(M,1e3*p)))}))},8799:(e,t,n)=>{n.d(t,{Z:()=>v});var a=n(4050),r=n(3555),i=n(1713),o=n(5806),s=n(1192),l=n(2340),c=n(9107),d=n(172),u=n(9411),m=n(8729),h=n(8780);const v=(0,a.X$)((0,r.c$)(((e,t)=>{let{chatId:n}=t;const{lastSyncTime:a}=e,r=(0,s.Z1)(e,n);return{lastSyncTime:a,chat:r,onlineCount:r?(0,s.YK)(e,r):void 0,areMessagesLoaded:Boolean((0,s.Zw)(e,n))}}))((e=>{let{typingStatus:t,avatarSize:n="medium",status:s,withDots:v,withMediaViewer:f,withUsername:p,withFullInfo:g,withUpdatingStatus:Z,withChatType:E,noRtl:P,chat:y,onlineCount:C,areMessagesLoaded:b,lastSyncTime:N}=e;const{loadFullChat:w,openMediaViewer:k}=(0,r.Sv)(),I=y&&(0,o.ZV)(y),{id:S,isMin:T,isRestricted:M}=y||{};(0,a.d4)((()=>{S&&!T&&g&&N&&w({chatId:S})}),[S,T,N,g,w,I]);const x=(0,a.I4)(((e,t)=>{y&&t&&(e.stopPropagation(),k({avatarOwnerId:y.id,origin:"jumbo"===n?i.bZ.ProfileAvatar:i.bZ.MiddleHeaderAvatar}))}),[y,n,k]),L=(0,c.Z)();if(y)return a.ZP.createElement("div",{className:"ChatInfo",dir:!P&&L.isRtl?"rtl":void 0},a.ZP.createElement(d.Z,{key:y.id,size:n,chat:y,onClick:f?x:void 0}),a.ZP.createElement("div",{className:"info"},a.ZP.createElement("div",{className:"title"},a.ZP.createElement("h3",{dir:"auto"},(0,l.Z)((0,o.U)(L,y))),y.isVerified&&a.ZP.createElement(u.Z,null)),function(){if(s)return v?a.ZP.createElement(h.Z,{className:"status",content:s}):a.ZP.createElement("span",{className:"status",dir:"auto"},s);if(Z&&!b&&!M)return a.ZP.createElement(h.Z,{className:"status",content:L("Updating")});if(!y)return;if(t)return a.ZP.createElement(m.Z,{typingStatus:t});if(E)return a.ZP.createElement("span",{className:"status",dir:"auto"},L((0,o.l6)(y)));const e=p?y.username:void 0,n=function(e,t){const n=e((0,o.l6)(t)),{membersCount:a}=t;return t.isRestricted?"Channel"===n?"channel is inaccessible":"group is inaccessible":a?e("Channel"===n?"Subscribers":"Members",a,"i"):n}(L,y),r=C?`, ${L("OnlineCount",C,"i")}`:void 0;return a.ZP.createElement("span",{className:"status"},e&&a.ZP.createElement("span",{className:"handle"},e),a.ZP.createElement("span",{className:"group-status"},n),r&&a.ZP.createElement("span",{className:"online-status"},r))}()))})))},6844:(e,t,n)=>{n.d(t,{Z:()=>s});var a=n(4050),r=n(790),i=n(9107),o=n(8018);const s=(0,a.X$)((e=>{let{message:t,outgoingStatus:n}=e;const s=(0,i.Z)();return a.ZP.createElement("div",{className:"LastMessageMeta"},n&&a.ZP.createElement(o.Z,{status:n}),a.ZP.createElement("span",{className:"time"},(0,r.VX)(s,1e3*t.date)))}))},3709:(e,t,n)=>{n.d(t,{Z:()=>u});var a=n(4050),r=n(790),i=n(3227),o=n(5806),s=n(6752),l=n(6202),c=n(692),d=n(3657);const u=(0,a.X$)((e=>{let{message:t,idPrefix:n="shared-media",isProtected:u,observeIntersection:m,onClick:h}=e;const v=(0,a.sO)(null),f=(0,d.Op)(v,m),p=(0,o.DH)(t),g=(0,l.Z)((0,o.Ti)(t,"pictogram"),!f),Z=(0,c.Z)(g),E=(0,o.b7)(t),P=(0,a.I4)((()=>{h(t.id,t.chatId)}),[t.id,t.chatId,h]);return a.ZP.createElement("div",{ref:v,id:`${n}${(0,o.d0)(t.id)}`,className:"Media scroll-item",onClick:h?P:void 0},a.ZP.createElement("img",{src:p,alt:"",draggable:!u,decoding:"async",onContextMenu:u?i.Z:void 0}),a.ZP.createElement("img",{src:g,className:(0,s.Z)("full-media",Z),alt:"",draggable:!u,decoding:"async",onContextMenu:u?i.Z:void 0}),E&&a.ZP.createElement("span",{className:"video-duration"},E.isGif?"GIF":(0,r.k9)(E.duration)),u&&a.ZP.createElement("span",{className:"protector"}))}))},8018:(e,t,n)=>{n.d(t,{Z:()=>o});var a,r=n(4050),i=n(2255);!function(e){e[e.failed=0]="failed",e[e.pending=1]="pending",e[e.succeeded=2]="succeeded",e[e.read=3]="read"}(a||(a={}));const o=(0,r.X$)((e=>{let{status:t}=e;return r.ZP.createElement("div",{className:"MessageOutgoingStatus"},r.ZP.createElement(i.Z,{name:"reveal",activeKey:a[t]},r.ZP.createElement("i",{className:`icon-message-${t}`})))}))},7262:(e,t,n)=>{n.d(t,{Z:()=>c});var a=n(4050),r=n(6752),i=n(1212),o=n(2340),s=n(9107);const l="Nothing found.",c=(0,a.X$)((e=>{let{text:t=l,description:n}=e;const c=(0,s.Z)(),{transitionClassNames:d}=(0,i.Z)(!0);return a.ZP.createElement("div",{className:(0,r.Z)("NothingFound",d,n&&"with-description")},t,n&&a.ZP.createElement("p",{className:"description"},(0,o.Z)(c(n),["br"])))}))},1820:(e,t,n)=>{n.d(t,{Z:()=>f});var a=n(4050),r=n(5806),i=n(1273),o=n(4605),s=n(7687),l=n(1876),c=n(6058),d=n(8799),u=n(9187),m=n(7407),h=n(9107),v=n(4288);const f=(0,a.X$)((e=>{let{itemIds:t,selectedIds:n,filterValue:f,filterPlaceholder:p,notFoundText:g,searchInputId:Z,isLoading:E,noScrollRestore:P,onSelectedIdsChange:y,onFilterChange:C,onLoadMore:b}=e;const N=(0,a.sO)(null),w=n.length>10;(0,a.d4)((()=>{setTimeout((()=>{requestAnimationFrame((()=>{N.current.focus()}))}),500)}),[]);const k=(0,a.I4)((e=>{const t=[...n];t.includes(e)?t.splice(t.indexOf(e),1):t.push(e),y(t),C("")}),[n,y,C]),I=(0,a.I4)((e=>{const{value:t}=e.currentTarget;C(t)}),[C]),[S,T]=(0,m.Z)(b,t,Boolean(f)),M=(0,h.Z)();return a.ZP.createElement("div",{className:"Picker"},a.ZP.createElement("div",{className:"picker-header custom-scroll",dir:M.isRtl?"rtl":void 0},n.map(((e,t)=>a.ZP.createElement(u.Z,{chatOrUserId:e,isMinimized:w&&ta.ZP.createElement(l.Z,{key:e,className:"chat-item-clickable picker-list-item",onClick:()=>k(e),ripple:!0},a.ZP.createElement(o.Z,{label:"",checked:n.includes(e)}),(0,r.YC)(e)?a.ZP.createElement(c.Z,{userId:e}):a.ZP.createElement(d.Z,{chatId:e}))))):E||!S||S.length?a.ZP.createElement(v.Z,null):a.ZP.createElement("p",{className:"no-results"},g||"Sorry, nothing found."))}))},9187:(e,t,n)=>{n.d(t,{Z:()=>u});var a=n(4050),r=n(3555),i=n(1192),o=n(5806),s=n(2340),l=n(6752),c=n(9107),d=n(172);const u=(0,a.X$)((0,r.c$)(((e,t)=>{let{chatOrUserId:n}=t;return n?{chat:n?(0,i.Z1)(e,n):void 0,user:(0,o.YC)(n)?(0,i.dy)(e,n):void 0}:{}}))((e=>{let{icon:t,title:n,isMinimized:r,canClose:i,onClick:u,clickArg:m,chat:h,user:v,className:f}=e;const p=(0,c.Z)();let g,Z;if(t&&n)g=a.ZP.createElement("div",{className:"item-icon"},a.ZP.createElement("i",{className:`icon-${t}`})),Z=n;else if(h||v){g=a.ZP.createElement(d.Z,{chat:h,user:v,size:"small",isSavedMessages:null==v?void 0:v.isSelf});const e=!h||v&&!v.isSelf?(0,o.Vl)(v):(0,o.U)(p,h,v);Z=e?(0,s.Z)(e):void 0}const E=(0,l.Z)("PickerSelectedItem",f,r&&"minimized",i&&"closeable");return a.ZP.createElement("div",{className:E,onClick:()=>u(m),title:r?Z:void 0,dir:p.isRtl?"rtl":void 0},g,!r&&a.ZP.createElement("div",{className:"item-name",dir:"auto"},Z),i&&a.ZP.createElement("div",{className:"item-remove"},a.ZP.createElement("i",{className:"icon-close"})))})))},6058:(e,t,n)=>{n.d(t,{Z:()=>v});var a=n(4050),r=n(3555),i=n(1713),o=n(1192),s=n(5806),l=n(2340),c=n(9107),d=n(172),u=n(9411),m=n(8729),h=n(8780);const v=(0,a.X$)((0,r.c$)(((e,t)=>{let{userId:n,forceShowSelf:a}=t;const{lastSyncTime:r,serverTimeOffset:i}=e,s=(0,o.dy)(e,n);return{lastSyncTime:r,user:s,userStatus:(0,o.ss)(e,n),isSavedMessages:!a&&s&&s.isSelf,areMessagesLoaded:Boolean((0,o.Zw)(e,n)),serverTimeOffset:i}}))((e=>{let{typingStatus:t,avatarSize:n="medium",status:o,withDots:v,withMediaViewer:f,withUsername:p,withFullInfo:g,withUpdatingStatus:Z,noStatusOrTyping:E,noRtl:P,user:y,userStatus:C,isSavedMessages:b,areMessagesLoaded:N,lastSyncTime:w,serverTimeOffset:k}=e;const{loadFullUser:I,openMediaViewer:S}=(0,r.Sv)(),{id:T}=y||{},M=(0,s.Js)(y);(0,a.d4)((()=>{g&&w&&T&&I({userId:T})}),[T,I,w,g]);const x=(0,a.I4)(((e,t)=>{y&&t&&(e.stopPropagation(),S({avatarOwnerId:y.id,origin:"jumbo"===n?i.bZ.ProfileAvatar:i.bZ.MiddleHeaderAvatar}))}),[y,n,S]),L=(0,c.Z)();if(y)return a.ZP.createElement("div",{className:"ChatInfo",dir:!P&&L.isRtl?"rtl":void 0},a.ZP.createElement(d.Z,{key:y.id,size:n,user:y,isSavedMessages:b,onClick:f?x:void 0}),a.ZP.createElement("div",{className:"info"},b?a.ZP.createElement("div",{className:"title"},a.ZP.createElement("h3",null,L("SavedMessages"))):a.ZP.createElement("div",{className:"title"},a.ZP.createElement("h3",{dir:"auto"},M&&(0,l.Z)(M)),(null==y?void 0:y.isVerified)&&a.ZP.createElement(u.Z,null)),(o||!b&&!E)&&(o?v?a.ZP.createElement(h.Z,{className:"status",content:o}):a.ZP.createElement("span",{className:"status",dir:"auto"},o):Z&&!N?a.ZP.createElement(h.Z,{className:"status",content:L("Updating")}):y?t?a.ZP.createElement(m.Z,{typingStatus:t}):a.ZP.createElement("span",{className:"status "+((0,s.kM)(y,C)?"online":"")},p&&y.username&&a.ZP.createElement("span",{className:"handle"},y.username),a.ZP.createElement("span",{className:"user-status",dir:"auto"},(0,s.Tq)(L,y,C,k))):void 0)))})))},787:(e,t,n)=>{n.d(t,{Z:()=>y});var a=n(4050),r=n(3555),i=n(1713),o=n(7361),s=n(1192),l=n(5806),c=n(2340),d=n(1174),u=n(6752),m=n(6137),h=n(647),v=n(9107),f=n(9411),p=n(2155),g=n(6202),Z=n(9204);const E=(0,a.X$)((e=>{var t;let{chat:n,user:r,photo:i,isFirstPhoto:o,isSavedMessages:s,lastSyncTime:d,onClick:h}=e;const f=(0,v.Z)(),E=r&&(0,l.NB)(r),P=n&&(0,l.pK)(n.id);function y(e,t){if(i&&!t)return`photo${i.id}?size=c`;let a;return s||E||P||(r?a=(0,l.RT)(r,e):n&&(a=(0,l.RT)(n,e))),a}const C=(0,g.Z)(y("big"),!1,m.IU.BlobUrl,d),b=o&&!C?y("normal",!0):void 0,N=(0,g.Z)(b,!1,m.IU.BlobUrl,d),w=C||N||(null==i||null===(t=i.thumbnail)||void 0===t?void 0:t.dataUri);let k="";if(s)k=a.ZP.createElement("i",{className:"icon-avatar-saved-messages"});else if(E)k=a.ZP.createElement("i",{className:"icon-avatar-deleted-account"});else if(P)k=a.ZP.createElement("i",{className:"icon-reply-filled"});else if(w)k=a.ZP.createElement("img",{src:w,className:"avatar-media",alt:""});else if(r){const e=(0,l.Js)(r);k=e?(0,p.Xv)(e,2):void 0}else if(n){const e=(0,l.U)(f,n);k=e&&(0,p.Xv)(e,(0,l.YC)(n.id)?2:1)}else k=a.ZP.createElement("div",{className:"spinner-wrapper"},a.ZP.createElement(Z.Z,{color:"white"}));const I=(0,u.Z)("ProfilePhoto",`color-bg-${(0,l.Rs)(r||n)}`,s&&"saved-messages",E&&"deleted-account",P&&"replies-bot-account",!s&&!w&&"no-photo");return a.ZP.createElement("div",{className:I,onClick:w?h:void 0},"string"==typeof k?(0,c.Z)(k,["hq_emoji"]):k)}));var P=n(2255);const y=(0,a.X$)((0,r.c$)(((e,t)=>{let{userId:n,forceShowSelf:a}=t;const{connectionState:r,serverTimeOffset:i}=e,o=(0,s.dy)(e,n),l=(0,s.ss)(e,n),c=(0,s.Z1)(e,n),d=!a&&o&&o.isSelf,{animationLevel:u}=e.settings.byKey;return{connectionState:r,user:o,userStatus:l,chat:c,isSavedMessages:d,animationLevel:u,serverTimeOffset:i}}))((e=>{var t;let{forceShowSelf:n,user:s,userStatus:p,chat:g,isSavedMessages:Z,connectionState:y,animationLevel:C,serverTimeOffset:b}=e;const{loadFullUser:N,openMediaViewer:w}=(0,r.Sv)(),k=(0,v.Z)(),{id:I}=s||{},{id:S}=g||{},T=s?(0,l.Js)(s):g?g.title:"",M=(null==s?void 0:s.photos)||(null==g?void 0:g.photos)||[],x=C>=1?k.isRtl?"slide-optimized-rtl":"slide-optimized":"none",[L,$]=(0,a.eJ)(0),O=Z||M.length<=1||0===L,A=Z||M.length<=1||L===M.length-1;(0,a.d4)((()=>{L>M.length&&$(Math.max(0,M.length-1))}),[L,M.length]),(0,a.d4)((()=>{"connectionStateReady"===y&&I&&!n&&N({userId:I})}),[I,N,y,n]),function(e,t,n){(0,a.d4)((()=>{t.slice(n,n+4).forEach((e=>{h.UV(`photo${e.id}?size=c`)||h.he(`photo${e.id}?size=c`,m.IU.BlobUrl)}))}),[n,t])}(0,M,L);const F=(0,a.I4)((()=>{w({avatarOwnerId:I||S,profilePhotoIndex:L,origin:n?i.bZ.SettingsAvatar:i.bZ.ProfileAvatar})}),[w,I,S,L,n]),D=(0,a.I4)((()=>{O||$(L-1)}),[L,O]),R=(0,a.I4)((()=>{A||$(L+1)}),[L,A]);if((0,a.d4)((()=>{const e=document.querySelector(".photo-wrapper");if(e)return(0,d.sf)(e,{selectorToPreventScroll:".Profile, .settings-content",onSwipe:o.$b?(e,t)=>t===d.eM.Right?(D(),!0):t===d.eM.Left&&(R(),!0):void 0})}),[R,D]),!s&&!g)return;const B=null===(t=s||g)||void 0===t?void 0:t.isVerified;return a.ZP.createElement("div",{className:(0,u.Z)("ProfileInfo",n&&"self"),dir:k.isRtl?"rtl":void 0},a.ZP.createElement("div",{className:"photo-wrapper"},function(){if(!(Z||!M||M.length<=1))return a.ZP.createElement("div",{className:"photo-dashes"},M.map(((e,t)=>a.ZP.createElement("span",{className:"photo-dash "+(t===L?"current":"")}))))}(),a.ZP.createElement(P.Z,{activeKey:L,name:x,className:"profile-slide-container"},function(){const e=!Z&&M&&M.length>0?M[L]:void 0;return a.ZP.createElement(E,{key:L,user:s,chat:g,photo:e,isSavedMessages:Z,isFirstPhoto:O,onClick:F})}()),!O&&a.ZP.createElement("button",{type:"button",className:"navigation prev","aria-label":k("AccDescrPrevious"),onClick:D}),!A&&a.ZP.createElement("button",{type:"button",className:"navigation next","aria-label":k("Next"),onClick:R})),a.ZP.createElement("div",{className:"info",dir:k.isRtl?"rtl":"auto"},Z?a.ZP.createElement("div",{className:"title"},a.ZP.createElement("h3",{dir:"auto"},k("SavedMessages"))):a.ZP.createElement("div",{className:"title"},a.ZP.createElement("h3",{dir:"auto"},T&&(0,c.Z)(T)),B&&a.ZP.createElement(f.Z,null)),!Z&&(s?a.ZP.createElement("div",{className:"status "+((0,l.kM)(s,p)?"online":"")},a.ZP.createElement("span",{className:"user-status",dir:"auto"},(0,l.Tq)(k,s,p,b))):a.ZP.createElement("span",{className:"status",dir:"auto"},(0,l.eA)(g)?k("Subscribers",null!==(U=g.membersCount)&&void 0!==U?U:0,"i"):k("Members",null!==(X=g.membersCount)&&void 0!==X?X:0,"i")))));var U,X})))},8198:(e,t,n)=>{n.d(t,{Z:()=>l});var a=n(4050),r=n(3555),i=n(6137),o=n(6202),s=n(6752);const l=(0,a.X$)((e=>{var t,n,l;let{reaction:c,ref:d,className:u}=e;const m=null===(t=(0,r.Rd)().availableReactions)||void 0===t||null===(n=t.find((e=>e.reaction===c)))||void 0===n||null===(l=n.staticIcon)||void 0===l?void 0:l.id,h=(0,o.Z)(`document${m}`,!m,i.IU.BlobUrl);return a.ZP.createElement("img",{className:(0,s.Z)("ReactionStaticEmoji",u),ref:d,src:h,alt:""})}))},3547:(e,t,n)=>{n.d(t,{Z:()=>P});var a=n(4050),r=n(6137),i=n(6752),o=n(386),s=n(4753),l=n(7361),c=n(3657),d=n(6202),u=n(1212),m=n(706),h=n(9107),v=n(7240),f=n(3394),p=n(7799),g=n(231),Z=n(2328),E=n(8964);const P=(0,a.X$)((e=>{let{sticker:t,size:n,noAnimate:P,title:y,className:C,clickArg:b,noContextMenu:N,isSavedMessages:w,observeIntersection:k,onClick:I,onFaveClick:S,onUnfaveClick:T}=e;const M=(0,a.sO)(null),x=(0,h.Z)(),L=`sticker${t.id}`,$=`sticker-button-${t.id}`,O=(0,c.Op)(M,k),A=t.thumbnail?t.thumbnail.dataUri:void 0,F=(0,d.Z)(`${L}?size=m`,!O,r.IU.BlobUrl),D=O&&!P,R=(0,d.Z)(t.isLottie&&L,!D,r.IU.Lottie),[B,U,X]=(0,m.Z)(Boolean(R)),Y=B&&D,z=t.isVideo&&l.Hh,V=(0,d.Z)(z&&L,!D,r.IU.BlobUrl),j=Boolean(z&&V&&D),{transitionClassNames:K}=(0,u.Z)(Boolean(F||Y),void 0,void 0,"slow"),{isContextMenuOpen:H,contextMenuPosition:W,handleBeforeContextMenu:q,handleContextMenu:J,handleContextMenuClose:_,handleContextMenuHide:G}=(0,v.Z)(M),Q=(0,a.I4)((()=>M.current),[]),ee=(0,a.I4)((()=>M.current.closest(".custom-scroll, .no-scrollbar")),[]),te=(0,a.I4)((()=>M.current.querySelector(".sticker-context-menu .bubble")),[]),{positionX:ne,positionY:ae,transformOriginX:re,transformOriginY:ie,style:oe}=(0,f.Z)(W,Q,ee,te);(0,a.d4)((()=>{D||X()}),[X,D]),(0,a.d4)((()=>{if(!z||!M.current)return;const e=M.current.querySelector("video");e&&(j?(0,s.Z)(e):e.pause())}),[z,j]),(0,a.d4)((()=>{O||_()}),[_,O]);const se=(0,a.I4)((e=>{e.stopPropagation(),e.preventDefault(),T(t)}),[T,t]),le=(0,a.I4)((()=>{T(t)}),[T,t]),ce=(0,a.I4)((()=>{S(t)}),[S,t]),de=(0,a.I4)((()=>{null==I||I(b,!0)}),[b,I]),ue=(0,a.I4)((()=>{null==I||I(b,void 0,!0)}),[b,I]),me=(0,i.Z)("StickerButton",I&&"interactive",$,C),he=!A||Y||j?"":`background-image: url('${A}');`;return a.ZP.createElement("div",{ref:M,className:me,title:y||(null==t?void 0:t.emoji),style:he,"data-sticker-id":t.id,onMouseDown:e=>{(0,o.b)(e),q(e)},onClick:()=>{H||null==I||I(b)},onContextMenu:J},!Y&&!j&&a.ZP.createElement("img",{src:F,className:K}),z&&a.ZP.createElement("video",{className:K,src:V,autoPlay:j,loop:!0,playsInline:!0,muted:!0}),D&&R&&a.ZP.createElement(p.Z,{id:L,animationData:R,play:!0,size:n,isLowPriority:!0,onLoad:U}),!l.$b&&T&&a.ZP.createElement(g.Z,{className:"sticker-unfave-button",color:"dark",round:!0,onClick:se},a.ZP.createElement("i",{className:"icon-close"})),!N&&I&&void 0!==W&&a.ZP.createElement(Z.Z,{isOpen:H,transformOriginX:re,transformOriginY:ie,positionX:ne,positionY:ae,style:oe,className:"sticker-context-menu",autoClose:!0,onClose:_,onCloseAnimationEnd:G},T&&a.ZP.createElement(E.Z,{icon:"favorite",onClick:le},x("Stickers.RemoveFromFavorites")),S&&a.ZP.createElement(E.Z,{icon:"favorite",onClick:ce},x("AddToFavorites")),!w&&a.ZP.createElement(E.Z,{onClick:de,icon:"muted"},x("SendWithoutSound")),a.ZP.createElement(E.Z,{onClick:ue,icon:"calendar"},x(w?"SetReminder":"ScheduleMessage"))))}))},4851:(e,t,n)=>{n.d(t,{Z:()=>o});var a=n(4050),r=n(9203),i=n(8778);const o=(0,a.X$)((e=>{const{isOpen:t}=e,n=(0,i.Z)(r.gl.Extra,"StickerSetModal",!t);return n?a.ZP.createElement(n,e):void 0}))},8729:(e,t,n)=>{n.d(t,{Z:()=>d});var a=n(4050),r=n(3555),i=n(1192),o=n(5806),s=n(2340),l=n(9107),c=n(8780);const d=(0,a.X$)((0,r.c$)(((e,t)=>{let{typingStatus:n}=t;return n.userId?{typingUser:(0,i.dy)(e,n.userId)}:{}}))((e=>{let{typingStatus:t,typingUser:n}=e;const r=(0,l.Z)(),i=n&&!n.isSelf&&(0,o.Vl)(n),d=r(t.action).replace("{user}","").replace("{emoji}",t.emoji).trim();return a.ZP.createElement("p",{className:"typing-status",dir:r.isRtl?"rtl":"auto"},i&&a.ZP.createElement("span",{className:"sender-name",dir:"auto"},(0,s.Z)(i)),a.ZP.createElement(c.Z,{content:d}))})))},9411:(e,t,n)=>{n.d(t,{Z:()=>i});var a=n(4050);const r={__html:''},i=()=>a.ZP.createElement("span",{className:"VerifiedIcon",dangerouslySetInnerHTML:r})},5418:(e,t,n)=>{n.d(t,{Z:()=>v});var a=n(4050),r=n(5806),i=n(6752),o=n(8035),s=n(2340),l=n(790),c=n(9107),d=n(996),u=n(3709),m=n(8033),h=n(88);const v=(0,a.X$)((e=>{let{message:t,senderTitle:n,isProtected:v,observeIntersection:f,onMessageClick:p}=e;const g=(0,c.Z)();let Z=(0,r.s1)(t);if(!Z){const e=(0,r.T7)(t);if(e){const{url:n,domain:a}=e;Z={siteName:a.replace(/^www./,""),url:n.includes("://")?n:n.includes("@")?`mailto:${n}`:`http://${n}`,formattedDescription:(0,r.UD)(t)!==n?(0,d.e)(g,t,void 0,void 0,170):void 0}}}const E=(0,a.I4)((()=>{p(t.id,t.chatId)}),[p,t.id,t.chatId]);if(!Z)return;const{siteName:P,url:y,displayUrl:C,title:b,description:N,formattedDescription:w,photo:k,video:I}=Z,S=!n&&N&&(0,o.Z)(N,170),T=(0,i.Z)("WebLink scroll-item",!k&&!I&&"without-media");return a.ZP.createElement("div",{className:T,"data-initial":(P||C)[0],dir:g.isRtl?"rtl":void 0},k&&a.ZP.createElement(u.Z,{message:t,isProtected:v,observeIntersection:f}),a.ZP.createElement("div",{className:"content"},a.ZP.createElement(m.Z,{isRtl:g.isRtl,className:"site-title",onClick:E},(0,s.Z)(b||P||C)),(S||w)&&a.ZP.createElement(m.Z,{isRtl:g.isRtl,className:"site-description",onClick:E},w||S&&(0,s.Z)(S)),a.ZP.createElement(h.Z,{url:y,className:"site-name",text:"",isRtl:g.isRtl},y.replace("mailto:","")||C),n&&a.ZP.createElement("div",{className:"sender-name"},(0,s.Z)(n))),n&&a.ZP.createElement("div",{className:"message-date"},a.ZP.createElement(m.Z,{className:"date",onClick:E,isRtl:g.isRtl},(0,l.VX)(g,1e3*t.date))))}))},4399:(e,t,n)=>{n.d(t,{Eh:()=>E,GC:()=>P,Gw:()=>l,L6:()=>s,PA:()=>N,Rj:()=>c,W7:()=>y,Wr:()=>b,fM:()=>Z,jg:()=>w,kc:()=>p,lE:()=>C,vY:()=>d,wB:()=>u});var a=n(3716),r=n(7361),i=n(3858),o=n(5806);const s="(max-height: 640px)",l=parseInt(getComputedStyle(document.documentElement).fontSize,10),c=240,d={width:640,height:640},u="4986041492570112461",m={width:100,height:100};let h,v,f;function p(e,t,n,a){const o=t||n?1.625:0,s=function(e,t){const n=e?30:29;if(!r.wB)return n;const{width:a}=i.Z.get();return h||(h=Math.min(30,a/l-4.5)),v||(v=Math.min(29,a/l-7)),f||(f=Math.min(29,a/l-4.5)),e?h:t?f:v}(e,a)-o;return s*l}function g(e){let{width:t,height:n,fromOwnMessage:a,isForwarded:r,isWebPagePhoto:i,isGif:o,noAvatars:s}=e;const c=n/t,d=p(a,r,i,s),u=function(e,t){return e&&t&&t>=.75&&t<=1.25?20*l:27*l}(o,c),m=o?Math.max(300,t):t;return w(d,u,m,o?n*(m/t):n)}function Z(e,t){const n=window.matchMedia(s),{width:a,height:o}=i.Z.get();let c=t&&n.matches?10:8.25;return e&&!r.$b&&(c=n.matches?10:12.5),{width:a,height:o-c*l}}function E(e,t,n,a,r){const{width:i,height:s}=(0,o.HV)(e)||m;return g({width:i,height:s,fromOwnMessage:t,isForwarded:n,isWebPagePhoto:a,noAvatars:r})}function P(e,t,n,a){const{width:r,height:i}=(0,o.jC)(e)||m;return g({width:r,height:i,fromOwnMessage:t,isForwarded:n,isGif:e.isGif,noAvatars:a})}function y(){return{width:2*l,height:2*l}}function C(e){return e?{width:3*l,height:3*l}:{width:3.375*l,height:3.375*l}}function b(e){const{width:t}=e;let{height:n}=e;e.id===u&&(n=t);const i=n&&t&&n/t,o=l*(r.wB?a.w7:a.K7),s=i?o*i:o;return i&&s>o?{width:Math.round(o/i),height:o}:{width:o,height:s}}function N(e,t){let{width:n,height:a}=e,r=arguments.length>2&&void 0!==arguments[2]&&arguments[2];const{width:i,height:o}=Z(t,r);return w(i,o,n,a)}function w(e,t,n,a){const r=a/n,i=Math.min(n,e);return Math.round(i*r)>t?{width:Math.round(t/r),height:t}:{width:i,height:Math.round(i*r)}}},5296:(e,t,n)=>{n.d(t,{Z:()=>d});var a=n(4050),r=n(4753),i=n(3555),o=n(6202),s=n(706),l=n(1192);const c={large:160,medium:128,small:104};function d(e,t,n,d,u,m,h,v){const{interactWithAnimatedEmoji:f,sendEmojiInteraction:p,sendWatchingEmojiInteraction:g}=(0,i.Sv)(),Z=h||v,[E,P]=(0,s.Z)(),y=(0,a.sO)(null),C=(0,a.sO)(null),b=(0,o.Z)(d?`document${d}`:void 0,!d),N=c[e],w=`width: ${N}px; height: ${N}px;`,[k,I]=(0,a.eJ)(String(Math.random())),S=(0,a.sO)(void 0),T=(0,a.sO)(void 0),M=(0,a.I4)((()=>{y.current&&(p({chatId:t,messageId:n,localEffect:h,emoji:v,interactions:S.current}),T.current=void 0,S.current=void 0)}),[p,t,n,h,v]),x=(0,a.I4)((()=>{I(String(Math.random()));const e=C.current;b&&(e&&(e.pause(),e.remove()),C.current=new Audio,C.current.src=b,(0,r.Z)(C.current),C.current.addEventListener("ended",(()=>{C.current=void 0}),{once:!0}))}),[b]),L=(0,a.I4)((()=>{x();const e=y.current;if(!(Z&&e&&n&&t))return;const{x:a,y:r}=e.getBoundingClientRect();f({localEffect:h,emoji:v,x:a,y:r,startSize:N,isReversed:!m}),S.current||(S.current=[],T.current=performance.now(),setTimeout(M,1e3)),S.current.push(T.current?(performance.now()-T.current)/1e3:0)}),[t,v,Z,f,m,h,n,x,M,N]);return(0,a.d4)((()=>{const e=y.current;e&&u&&u.forEach((a=>{let{id:r,startSize:i,messageId:o}=a;if(i||n!==o)return;const{x:s,y:c}=e.getBoundingClientRect();g({id:r,chatId:t,emoticon:h?(0,l.ji)(h):v,startSize:N,x:s,y:c,isReversed:!m}),x()}))}),[u,t,v,m,h,n,x,g,N]),{playKey:k,ref:y,style:w,width:N,handleClick:L,markAnimationLoaded:P,isAnimationLoaded:E}}},742:(e,t,n)=>{n.d(t,{Z:()=>o});var a=n(4050),r=n(9203),i=n(8778);const o=(0,a.X$)((e=>{const{isOpen:t}=e,n=(0,i.Z)(r.gl.Extra,"ChatFolderModal",!t);return n?a.ZP.createElement(n,e):void 0}))},1080:(e,t,n)=>{n.d(t,{Z:()=>V});var a=n(4050),r=n(3555),i=n(3716),o=n(7361),s=n(782),l=n(6974),c=n(7204),d=n(7407),u=n(5616);let m;!function(e){e[e.Move=0]="Move",e[e.Opacity=1]="Opacity",e[e.None=2]="None"}(m||(m={}));var h=n(1273),v=n(4288),f=n(9107),p=n(6137),g=n(5806),Z=n(1192),E=n(8005),P=n(2340),y=n(9118),C=n(6752),b=n(5790),N=n(1470),w=n(706),k=n(6202),I=n(996),S=n(172),T=n(9411),M=n(8729),x=n(6844),L=n(329),$=n(1876),O=n(2155),A=n(126);const F=(0,a.X$)((e=>{let{chat:t,isPinned:n,isMuted:r}=e;const i=Boolean(t.unreadCount||t.hasUnreadMark||n),o=(0,C.Z)("Badge",r&&"muted",n&&"pinned",Boolean(t.unreadCount||t.hasUnreadMark)&&"unread");return a.ZP.createElement(A.Z,{isCustom:!0,className:"Badge-transition",isOpen:i},t.unreadCount?t.unreadMentionsCount?a.ZP.createElement("div",{className:"Badge-wrapper"},a.ZP.createElement("div",{className:"Badge mention"},a.ZP.createElement("i",{className:"icon-mention"})),a.ZP.createElement("div",{className:o},(0,O.bi)(t.unreadCount))):a.ZP.createElement("div",{className:o},(0,O.bi)(t.unreadCount)):t.hasUnreadMark?a.ZP.createElement("div",{className:o}):n?a.ZP.createElement("div",{className:o},a.ZP.createElement("i",{className:"icon-pinned-chat"})):void 0)}));var D=n(742);const R=(0,a.X$)((e=>{let{isSelected:t,isActive:n}=e;return a.ZP.createElement("div",{className:(0,C.Z)("ChatCallStatus",n&&"active",t&&!o.wB&&"selected")},a.ZP.createElement("div",{className:"indicator"},a.ZP.createElement("div",null),a.ZP.createElement("div",null),a.ZP.createElement("div",null)))})),B=(0,a.X$)((0,r.c$)(((e,t)=>{var n;let{chatId:a}=t;const r=(0,Z.Z1)(e,a);if(!r||!r.lastMessage)return{};const{senderId:i,replyToMessageId:o,isOutgoing:s}=r.lastMessage,l=i?(0,Z.dy)(e,i):void 0,c=(0,g.N5)(r.lastMessage),d=c&&o?(0,Z.hj)(e,r.id,o):void 0,{targetUserIds:u,targetChatId:m}=c||{},h=(0,g.zX)(r),{chatId:v,threadId:f,type:E}=(0,Z.Bt)(e)||{},P=a===v&&f===p._f;return{chat:r,isMuted:(0,g.i4)(r,(0,Z.dZ)(e),(0,Z.NJ)(e)),lastMessageSender:l,actionTargetUserIds:u,actionTargetChatId:m,actionTargetMessage:d,draft:(0,Z.Ms)(e,a,p._f),animationLevel:e.settings.byKey.animationLevel,isSelected:P,canScrollDown:P&&"thread"===E,canChangeFolder:Boolean(null===(n=e.chatFolders.orderedIds)||void 0===n?void 0:n.length),lastSyncTime:e.lastSyncTime,...s&&{lastMessageOutgoingStatus:(0,Z.dT)(e,r.lastMessage)},...h&&{user:(0,Z.dy)(e,h),userStatus:(0,Z.ss)(e,h)}}}))((e=>{let{style:t,chatId:n,folderId:s,orderDiff:l,animationType:c,isPinned:d,chat:u,isMuted:h,user:v,userStatus:p,actionTargetUserIds:Z,lastMessageSender:O,lastMessageOutgoingStatus:A,actionTargetMessage:B,actionTargetChatId:U,draft:X,animationLevel:Y,isSelected:z,canScrollDown:V,canChangeFolder:j,lastSyncTime:K}=e;const{openChat:H,focusLastMessage:W}=(0,r.Sv)(),q=(0,a.sO)(null),[J,_,G]=(0,w.Z)(),[Q,ee,te]=(0,w.Z)(),[ne,ae,re]=(0,w.Z)(),[ie,oe,se]=(0,w.Z)(),{lastMessage:le,typingStatus:ce}=u||{},de=le&&(0,g.Lo)(le);(0,b.Z)(n,de?le.replyToMessageId:void 0,B);const ue=le&&!(0,g.bf)(le)?(0,g.DH)(le):void 0,me=(0,k.Z)(le?(0,g.Ti)(le,"micro"):void 0),he=Boolean(le&&(0,g.Y5)(le)),ve=(0,a.Ye)((()=>{if(!Z)return;const e=(0,r.Rd)().users.byId;return Z.map((t=>e[t])).filter(Boolean)}),[Z]);(0,a.bt)((()=>{const e=q.current;if(0!==Y&&e){if(c===m.Opacity)e.style.opacity="0",(0,y.T2)((()=>{e.classList.add("animate-opacity"),e.style.opacity="1"}));else{if(c!==m.Move)return;e.style.transform=`translate3d(0, ${100*-l}%, 0)`,(0,y.T2)((()=>{e.classList.add("animate-transform"),e.style.transform=""}))}setTimeout((()=>{(0,y.T2)((()=>{e.classList.remove("animate-opacity","animate-transform"),e.style.opacity="",e.style.transform=""}))}),200+i.fK)}}),[Y,l,c]);const fe=(0,a.I4)((()=>{H({id:n,shouldReplaceHistory:!0}),z&&V&&W()}),[z,V,H,n,W]),pe=(0,N.Z)({chat:u,user:v,handleDelete:function(){ae(),_()},handleChatFolderChange:function(){oe(),ee()},folderId:s,isPinned:d,isMuted:h,canChangeFolder:j}),ge=(0,f.Z)();if(!u)return;const Ze=(0,C.Z)("Chat chat-item-clickable",(0,g.YC)(n)?"private":"group",z&&"selected");return a.ZP.createElement($.Z,{ref:q,className:Ze,style:t,ripple:!o.wB,contextActions:pe,onClick:fe},a.ZP.createElement("div",{className:"status"},a.ZP.createElement(S.Z,{chat:u,user:v,userStatus:p,isSavedMessages:null==v?void 0:v.isSelf,lastSyncTime:K}),u.isCallActive&&u.isCallNotEmpty&&a.ZP.createElement(R,{isSelected:z,isActive:0!==Y})),a.ZP.createElement("div",{className:"info"},a.ZP.createElement("div",{className:"title"},a.ZP.createElement("h3",null,(0,P.Z)((0,g.U)(ge,u,v))),u.isVerified&&a.ZP.createElement(T.Z,null),h&&a.ZP.createElement("i",{className:"icon-muted"}),u.lastMessage&&a.ZP.createElement(x.Z,{message:u.lastMessage,outgoingStatus:A})),a.ZP.createElement("div",{className:"subtitle"},function(){if(ce&&le&&ce.timestamp>1e3*le.date)return a.ZP.createElement(M.Z,{typingStatus:ce});if(null!=X&&X.text.length)return a.ZP.createElement("p",{className:"last-message",dir:ge.isRtl?"auto":"ltr"},a.ZP.createElement("span",{className:"draft"},ge("Draft")),(0,P.Z)(X.text));if(!le)return;if(de){const e=u&&((0,g.eA)(u)||le.senderId===le.chatId);return a.ZP.createElement("p",{className:"last-message",dir:ge.isRtl?"auto":"ltr"},(0,E.D)(ge,le,e?void 0:O,e?u:void 0,ve,B,U,{asTextWithSpoilers:!0}))}const e=(0,g.zF)(ge,n,O);return a.ZP.createElement("p",{className:"last-message",dir:ge.isRtl?"auto":"ltr"},e&&a.ZP.createElement(a.ZP.Fragment,null,a.ZP.createElement("span",{className:"sender-name"},(0,P.Z)(e)),a.ZP.createElement("span",{className:"colon"},":")),function(e,t,n,r){return n?a.ZP.createElement("span",{className:"media-preview"},a.ZP.createElement("img",{src:n,alt:"",className:(0,C.Z)("media-preview--image",r&&"round")}),(0,g.b7)(t)&&a.ZP.createElement("i",{className:"icon-play"}),(0,I.e)(e,t,!0)):(0,I.e)(e,t)}(ge,le,me||ue,he))}(),a.ZP.createElement(F,{chat:u,isPinned:d,isMuted:h}))),ne&&a.ZP.createElement(L.Z,{isOpen:J,onClose:G,onCloseAnimationEnd:re,chat:u}),ie&&a.ZP.createElement(D.Z,{isOpen:Q,onClose:te,onCloseAnimationEnd:se,chatId:n}))})));var U=n(1713),X=n(231),Y=n(7854);const z=(0,a.X$)((0,r.c$)(((e,t)=>{let{folderId:n,folderType:a}=t;return{chatFolder:n&&"folder"===a?(0,Z.Mw)(e,n):void 0,animatedEmoji:(0,Z.zB)(e,"📂")}}))((e=>{let{chatFolder:t,animatedEmoji:n,foldersDispatch:r,onScreenSelect:i}=e;const s=(0,f.Z)(),l=(0,a.I4)((()=>{r({type:"editFolder",payload:t}),i(U.MT.FoldersEditFolderFromChatList)}),[t,r,i]);return a.ZP.createElement("div",{className:"EmptyFolder"},a.ZP.createElement("div",{className:"sticker"},n&&a.ZP.createElement(Y.Z,{sticker:n})),a.ZP.createElement("h3",{className:"title",dir:"auto"},s("FilterNoChatsToDisplay")),a.ZP.createElement("p",{className:"description",dir:"auto"},s(t?"ChatList.EmptyChatListFilterText":"Chat.EmptyChat")),t&&r&&i&&a.ZP.createElement(X.Z,{ripple:!o.wB,fluid:!0,pill:!0,onClick:l,size:"smaller",isRtl:s.isRtl},a.ZP.createElement("i",{className:"icon-settings"}),s("ChatList.EmptyChatListEditFilter")))}))),V=(0,a.X$)((e=>{let{folderType:t,folderId:n,isActive:f,foldersDispatch:p,onScreenSelect:g}=e;const{openChat:Z,openNextChat:E}=(0,r.Sv)(),P="all"===t?i.Nf:"archived"===t?i.WS:n,y=(0,u.d7)(P),C=(0,a.Ye)((()=>{if(y)return y.reduce(((e,t,n)=>(e[t]=n,e)),{})}),[y]),b=(0,c.Z)(C),N=(0,a.Ye)((()=>C&&b?(0,s.Q8)(C,((e,t)=>void 0!==b[t]?e-b[t]:-1/0)):{}),[C,b]),[w,k]=(0,d.Z)(void 0,y,void 0,i.t_);(0,a.d4)((()=>{if(f&&y)return document.addEventListener("keydown",e),()=>{document.removeEventListener("keydown",e)};function e(e){if(o.fl&&(o.jm&&e.metaKey||!o.jm&&e.ctrlKey)&&e.code.startsWith("Digit")){const[,t]=e.code.match(/Digit(\d)/)||[];if(!t)return;const n=Number(t)-1;if(n>y.length-1)return;Z({id:y[n],shouldReplaceHistory:!0})}if(e.altKey){const t="ArrowDown"===e.key?1:"ArrowUp"===e.key?-1:void 0;if(!t)return;e.preventDefault(),E({targetIndexDelta:t,orderedIds:y})}}}),[f,Z,E,y]);const I=function(e){return(0,a.Ye)((()=>{const t=Object.values(e),n=t.filter((e=>e<0)).length,a=t.filter((e=>e>0)).length;return t=>{const r=e[t];return 0===r?m.None:r===1/0||r===-1/0||n<=a&&r<0||a0?m.Opacity:m.Move}}),[e])}(N);return a.ZP.createElement(h.Z,{className:"chat-list custom-scroll",items:w,preloadBackwards:i.t_,withAbsolutePositioning:!0,maxHeight:((null==y?void 0:y.length)||0)*i.rS,onLoadMore:k},null!=w&&w.length?function(){const e=y.indexOf(w[0]),t=(0,l.aE)(P)||0;return w.map(((r,o)=>a.ZP.createElement(B,{key:r,teactOrderKey:o,chatId:r,isPinned:e+o{n.d(t,{F:()=>r});var a=n(5806);function r(e,t,n,r){const{senderId:i}=t;if(!i)return;const o=(0,a.YC)(i)?r[i]:n[i];let s=(0,a.OU)(e,o);const l=n[t.chatId];return l&&((0,a.YC)(i)&&o.isSelf?s=`${e("FromYou")} → ${(0,a.U)(e,l)}`:(0,a.Bf)(l)&&(s+=` → ${(0,a.U)(e,l)}`)),s}},7146:(e,t,n)=>{n.d(t,{Z:()=>o});var a=n(4050),r=n(9203),i=n(8778);const o=(0,a.X$)((e=>{const{isOpen:t}=e,n=(0,i.Z)(r.gl.Extra,"CustomSendMenu",!t);return n?a.ZP.createElement(n,e):void 0}))},2420:(e,t,n)=>{n.d(t,{t:()=>m,Z:()=>h});var a=n(4050),r=n(1212),i=n(6752),o=n(1262),s=n(3989),l=n(7204),c=n(2898),d=n(706);const u=(0,a.X$)((e=>{let{isQuick:t,onFileSelect:n}=e;const[r,o,s]=(0,d.Z)(),l=(0,i.Z)("DropTarget",r&&"hovered");return a.ZP.createElement("div",{className:l,onDrop:n,onDragEnter:()=>{o()},onDragLeave:e=>{const{relatedTarget:t}=e;t&&e.stopPropagation(),s()}},a.ZP.createElement("div",{className:"target-content"},a.ZP.createElement("div",{className:"icon icon-"+(t?"photo":"document")}),a.ZP.createElement("div",{className:"title"},"Drop files here to send them"),a.ZP.createElement("div",{className:"description"},t?"in a quick way":"without compression")))}));let m;!function(e){e.None="none",e.Document="document",e.QuickFile="quick_file"}(m||(m={}));const h=(0,a.X$)((e=>{let{isOpen:t,withQuick:n,onHide:d,onFileSelect:m}=e;const h=(0,a.sO)(null),v=(0,l.Z)(n),{shouldRender:f,transitionClassNames:p}=(0,r.Z)(t);(0,a.d4)((()=>t?(0,s.Z)(d):void 0),[t,d]);const g=(0,a.I4)((async e=>{const{dataTransfer:t}=e;let n=[];if(!(t.files&&t.files.length>0)||t.items&&t.items.length){if(t.items&&t.items.length>0){const e=await(0,o.Z)(t.items);e.length&&(n=n.concat(e))}}else n=n.concat(Array.from(t.files));d(),m(n,!1)}),[m,d]),Z=(0,a.I4)((e=>{const{dataTransfer:t}=e;t.files&&t.files.length>0&&(d(),m(Array.from(t.files),!0))}),[m,d]),E=(0,a.I4)((e=>{e.stopPropagation();const{target:t,relatedTarget:n}=e;t.matches(".DropTarget, .DropArea")&&!n&&(h.current=window.setTimeout((()=>{d()}),150))}),[d]);if(!f)return;const P=(0,i.Z)("DropArea",p);return a.ZP.createElement(c.Z,{containerId:"#middle-column-portals"},a.ZP.createElement("div",{className:P,onDragLeave:E,onDragOver:()=>{h.current&&window.clearTimeout(h.current)},onDrop:d},a.ZP.createElement(u,{onFileSelect:g}),(n||v)&&a.ZP.createElement(u,{onFileSelect:Z,isQuick:!0})))}))},9830:(e,t,n)=>{n.d(t,{Z:()=>o});var a=n(4050),r=n(9203),i=n(8778);const o=(0,a.X$)((e=>{const{isOpen:t}=e,n=(0,i.Z)(r.gl.Extra,"EmojiTooltip",!t);return n?a.ZP.createElement(n,e):void 0}))},3616:(e,t,n)=>{n.d(t,{Z:()=>C});var a=n(4050),r=n(3555),i=n(3716),o=n(1192),s=n(9118),l=n(5723),c=n(6752),d=n(7361),u=n(517),m=n(2645),h=n(706),v=n(8674),f=n(6389),p=n(9107),g=n(4784),Z=n(6391),E=n(2340),P=n(3283);const y=d.wB?256:416,C=(0,a.X$)((0,r.c$)(((e,t)=>{let{chatId:n,threadId:a}=t;const{messageSendKeyCombo:r}=e.settings.byKey;return{messageSendKeyCombo:r,replyingToId:n&&a?(0,o.Yy)(e,n,a):void 0,noTabCapture:e.isPollModalOpen||e.payment.isPaymentModalOpen}}))((e=>{let{id:t,chatId:n,threadId:o,isAttachmentModalInput:C,editableInputId:b,html:N,placeholder:w,forcedPlaceholder:k,canAutoFocus:I,shouldSuppressFocus:S,shouldSuppressTextFormatter:T,replyingToId:M,noTabCapture:x,messageSendKeyCombo:L,onUpdate:$,onSuppressedFocus:O,onSend:A}=e;const{editLastMessage:F,replyToNextMessage:D}=(0,r.Sv)(),R=(0,a.sO)(null),B=(0,a.sO)(null),U=(0,p.Z)(),X=(0,a.sO)(!1),[Y,z,V]=(0,h.Z)(),[j,K]=(0,a.eJ)(),[H,W]=(0,a.eJ)(),q=(0,f.Z)(n,o);(0,a.d4)((()=>{C&&ee(!1)}),[C]),(0,m.Z)((e=>{let[t]=e;N!==R.current.innerHTML&&(R.current.innerHTML=N),N!==B.current.innerHTML&&(B.current.innerHTML=N),void 0!==t&&t!==N&&ee(!N.length)}),[N]),(0,a.sO)(n).current=n;const J=(0,a.I4)((()=>{R.current&&((0,v.zG)()?setTimeout(J,350):(0,l.Z)(R.current))}),[]),_=(0,a.I4)((()=>{V(),function(){const e=window.getSelection();e&&(e.removeAllRanges?e.removeAllRanges():e.empty&&e.empty())}()}),[V]);function G(){if(d.cj)return!1;const e=window.getSelection();if(!e||!e.rangeCount||X.current)return V(),!1;const t=e.getRangeAt(0),n=t.toString().trim();return!(T||!(0,Z.R)(t,b||i.R2)||!n||(0,g.Z)(n)||!t.START_TO_END)||(V(),!1)}function Q(){if(!G())return;const e=window.getSelection().getRangeAt(0),t=e.getBoundingClientRect(),n=R.current.getBoundingClientRect();let a=t.left+t.width/2-n.left;a<90?a=90:a>n.width-90&&(a=n.width-90),K({x:a,y:t.top-n.top}),W(e),z()}function ee(){let e=arguments.length>0&&void 0!==arguments[0]&&arguments[0];const t=R.current,n=B.current,a=Number(t.style.height.replace("px","")),r=Math.min(n.scrollHeight,y);if(r===a)return;const i=Math.round(50*Math.log(Math.abs(r-a))),o=()=>{t.style.height=`${r}px`,t.style.transitionDuration=`${i}ms`,t.classList.toggle("overflown",n.scrollHeight>y)};e?requestAnimationFrame(o):o()}(0,a.d4)((()=>{d.$b||I&&J()}),[n,J,M,I]),(0,a.d4)((()=>{if(x)return;const e=(0,s.Ds)((e=>{"Tab"===e.key&&(e.preventDefault(),requestAnimationFrame(J))}),2e3,!0,!1);return(0,u.Z)({onTab:e})}),[J,x]),(0,a.d4)((()=>{const e=R.current;function t(){e.blur()}return S&&e.addEventListener("focus",t),()=>{e.removeEventListener("focus",t)}}),[S]);const te=(0,c.Z)("form-control custom-scroll",N.length>0&&"touched",S&&"focus-disabled");return a.ZP.createElement("div",{id:t,onClick:S?O:void 0,dir:U.isRtl?"rtl":void 0},a.ZP.createElement("div",{ref:R,id:b||i.R2,className:te,contentEditable:!0,dir:"auto",onClick:J,onChange:function(e){const{innerHTML:t,textContent:n}=e.currentTarget;if($("
"===t?"":t),q({type:"typing"}),!d.$b&&(!n||!n.length)&&(d.op||!t.includes("emoji-small"))){const e=window.getSelection();e&&(R.current.blur(),e.removeAllRanges(),(0,l.Z)(R.current,!0))}},onKeyDown:function(e){if(!N.length&&(e.metaKey||e.ctrlKey)){const t="ArrowDown"===e.key?1:"ArrowUp"===e.key?-1:void 0;if(t)return e.preventDefault(),void D({targetIndexDelta:t})}"Enter"!==e.key||e.shiftKey?"ArrowUp"!==e.key||N.length||e.metaKey||e.ctrlKey||e.altKey?e.target.addEventListener("keyup",(function t(){Q(),e.target.removeEventListener("keyup",t)})):(e.preventDefault(),F()):d.cj||d.wZ||!("enter"===L&&!e.shiftKey||"ctrl-enter"===L&&(e.ctrlKey||e.metaKey))||(e.preventDefault(),V(),A())},onMouseDown:function(e){2===e.button?!0!==X.current&&(X.current=!0,document.addEventListener("mousedown",(function e(){setTimeout((()=>{X.current=!1}),100),window.removeEventListener("mouseup",e)})),document.addEventListener("keydown",(function e(t){"Esc"!==t.key&&"Escape"!==t.key||(setTimeout((()=>{X.current=!1}),100),window.removeEventListener("keydown",e))}))):e.target.addEventListener("mouseup",(function t(){Q(),e.target.removeEventListener("mouseup",t)}))},onContextMenu:d.wZ?function(e){G()&&(e.preventDefault(),e.stopPropagation())}:void 0,onTouchCancel:d.wZ?Q:void 0,"aria-label":w}),a.ZP.createElement("div",{ref:B,className:(0,c.Z)(te,"clone"),dir:"auto"}),!k&&a.ZP.createElement("span",{className:"placeholder-text",dir:"auto"},w),a.ZP.createElement(P.Z,{isOpen:Y,anchorPosition:j,selectedRange:H,setSelectedRange:W,onClose:_}),k&&a.ZP.createElement("span",{className:"forced-placeholder"},(0,E.Z)(k)))})))},3283:(e,t,n)=>{n.d(t,{Z:()=>g});var a=n(4050),r=n(6137),i=n(3716),o=n(6752),s=n(1396),l=n(3989),c=n(7529),d=n(1212),u=n(8758),m=n(706),h=n(9107),v=n(231);const f={B:"bold",STRONG:"bold",I:"italic",EM:"italic",U:"underline",DEL:"strikethrough",CODE:"monospace",SPAN:"spoiler"},p=document.createElement("div"),g=(0,a.X$)((e=>{let{isOpen:t,anchorPosition:n,selectedRange:g,setSelectedRange:Z,onClose:E}=e;const P=(0,a.sO)(null),y=(0,a.sO)(null),{shouldRender:C,transitionClassNames:b}=(0,d.Z)(t),[N,w,k]=(0,m.Z)(),[I,S]=(0,a.eJ)(""),[T,M]=(0,a.eJ)(!1),[x,L]=(0,a.eJ)(),[$,O]=(0,a.eJ)({});(0,a.d4)((()=>t?(0,l.Z)(E):void 0),[t,E]),(0,u.Z)(t,P,E),(0,a.d4)((()=>{N?y.current.focus():(S(""),M(!1))}),[N]),(0,a.d4)((()=>{C||(k(),O({}),L(void 0))}),[k,C]),(0,a.d4)((()=>{if(!t||!g)return;const e={};let{parentElement:n}=g.commonAncestorContainer;for(;n&&n.id!==i.R2;){const t=f[n.tagName];t&&(e[t]=!0),n=n.parentElement}O(e)}),[t,g,w]);const A=(0,a.I4)((()=>{if(!g)return;const e=window.getSelection();e&&(e.removeAllRanges(),e.addRange(g))}),[g]),F=(0,a.I4)((()=>{const e=window.getSelection();e&&Z(e.getRangeAt(0))}),[Z]),D=(0,a.I4)((()=>{if(g)return p.innerText=g.toString(),p.innerHTML}),[g]),R=(0,a.I4)((()=>{if(g)return g.commonAncestorContainer.parentElement}),[g]);function B(){const e=y.current;if(!e)return;const{offsetWidth:t,scrollWidth:n,scrollLeft:a}=e;if(n<=t)return void L(void 0);let r="";a0&&(r+=" mask-left"),L(r)}function U(e){if($[e])return"active";if("monospace"===e||"strikethrough"===e){if(Object.keys($).some((t=>t!==e&&Boolean($[t]))))return"disabled"}else if($.monospace||$.strikethrough)return"disabled"}const X=(0,a.I4)((()=>{if($.spoiler){const e=R();if(!g||!e||e.dataset.entityType!==r.Vv.Spoiler||!e.textContent)return;return e.replaceWith(e.textContent),void O((e=>({...e,spoiler:!1})))}const e=D();document.execCommand("insertHTML",!1,`${e}`),E()}),[R,D,E,g,$.spoiler]),Y=(0,a.I4)((()=>{O((e=>(document.execCommand(e.bold?"removeFormat":"bold"),Object.keys(e).forEach((t=>{"italic"!==t&&"underline"!==t||!Boolean(e[t])||document.execCommand(t)})),F(),{...e,bold:!e.bold})))}),[F]),z=(0,a.I4)((()=>{document.execCommand("italic"),F(),O((e=>({...e,italic:!e.italic})))}),[F]),V=(0,a.I4)((()=>{document.execCommand("underline"),F(),O((e=>({...e,underline:!e.underline})))}),[F]),j=(0,a.I4)((()=>{if($.strikethrough){const e=R();if(!g||!e||"DEL"!==e.tagName||!e.textContent)return;return e.replaceWith(e.textContent),void O((e=>({...e,strikethrough:!1})))}const e=D();document.execCommand("insertHTML",!1,`${e}`),E()}),[R,D,E,g,$.strikethrough]),K=(0,a.I4)((()=>{if($.monospace){const e=R();if(!g||!e||"CODE"!==e.tagName||!e.textContent)return;return e.replaceWith(e.textContent),void O((e=>({...e,monospace:!1})))}const e=D();document.execCommand("insertHTML",!1,`${e}`),E()}),[R,D,E,g,$.monospace]),H=(0,a.I4)((()=>{const e=((0,s.X)(I)||"").split("%").map(encodeURI).join("%");if(T){const t=R();if(!t||"A"!==t.tagName)return;return t.href=e,void E()}const t=D();A(),document.execCommand("insertHTML",!1,`${t}`),E()}),[R,D,T,I,E,A]),W=(0,a.I4)((e=>{const t={k:w,b:Y,u:V,i:z,m:K,s:j,p:X}[(0,c.Z)(e)];!e.altKey&&(e.ctrlKey||e.metaKey)&&t&&(e.preventDefault(),e.stopPropagation(),t())}),[w,Y,V,z,K,j,X]);(0,a.d4)((()=>(t&&document.addEventListener("keydown",W),()=>document.removeEventListener("keydown",W))),[t,W]);const q=(0,h.Z)();if(!C)return;const J=(0,o.Z)("TextFormatter",b,N&&"link-control-shown"),_=(0,o.Z)("TextFormatter-link-url-confirm",Boolean(I.length)&&"shown"),G=n?`left: ${n.x}px; top: ${n.y}px;--text-formatter-left: ${n.x}px;`:"";return a.ZP.createElement("div",{ref:P,className:J,style:G,onKeyDown:function(e){"Enter"===e.key&&N&&(H(),e.preventDefault())}},a.ZP.createElement("div",{className:"TextFormatter-buttons"},a.ZP.createElement(v.Z,{color:"translucent",ariaLabel:"Spoiler text",className:U("spoiler"),onClick:X},a.ZP.createElement("i",{className:"icon-eye-closed"})),a.ZP.createElement("div",{className:"TextFormatter-divider"}),a.ZP.createElement(v.Z,{color:"translucent",ariaLabel:"Bold text",className:U("bold"),onClick:Y},a.ZP.createElement("i",{className:"icon-bold"})),a.ZP.createElement(v.Z,{color:"translucent",ariaLabel:"Italic text",className:U("italic"),onClick:z},a.ZP.createElement("i",{className:"icon-italic"})),a.ZP.createElement(v.Z,{color:"translucent",ariaLabel:"Underlined text",className:U("underline"),onClick:V},a.ZP.createElement("i",{className:"icon-underlined"})),a.ZP.createElement(v.Z,{color:"translucent",ariaLabel:"Strikethrough text",className:U("strikethrough"),onClick:j},a.ZP.createElement("i",{className:"icon-strikethrough"})),a.ZP.createElement(v.Z,{color:"translucent",ariaLabel:"Monospace text",className:U("monospace"),onClick:K},a.ZP.createElement("i",{className:"icon-monospace"})),a.ZP.createElement("div",{className:"TextFormatter-divider"}),a.ZP.createElement(v.Z,{color:"translucent",ariaLabel:q("TextFormat.AddLinkTitle"),onClick:w},a.ZP.createElement("i",{className:"icon-link"}))),a.ZP.createElement("div",{className:"TextFormatter-link-control"},a.ZP.createElement("div",{className:"TextFormatter-buttons"},a.ZP.createElement(v.Z,{color:"translucent",ariaLabel:q("Cancel"),onClick:k},a.ZP.createElement("i",{className:"icon-arrow-left"})),a.ZP.createElement("div",{className:"TextFormatter-divider"}),a.ZP.createElement("div",{className:(0,o.Z)("TextFormatter-link-url-input-wrapper",x)},a.ZP.createElement("input",{ref:y,className:"TextFormatter-link-url-input",type:"text",value:I,placeholder:"Enter URL...",autoComplete:"off",inputMode:"url",dir:"auto",onChange:function(e){S(e.target.value),B()},onScroll:B})),a.ZP.createElement("div",{className:_},a.ZP.createElement("div",{className:"TextFormatter-divider"}),a.ZP.createElement(v.Z,{color:"translucent",ariaLabel:q("Save"),className:"color-primary",onClick:H},a.ZP.createElement("i",{className:"icon-check"}))))))}))},1262:(e,t,n)=>{async function a(e){const t=[];function n(e,a){return new Promise((r=>{if(e instanceof File)t.push(e),r(e);else if(e.isFile){const n=a.getAsFile();e.file((e=>{t.push(e),r(e)}),(()=>{n&&t.push(n),r(n)}))}else e.isDirectory&&e.createReader().readEntries((e=>{const t=[];for(let r=0;ra})},2400:(e,t,n)=>{n.d(t,{_:()=>s});const a=/(
|)/g,r=/( |\u00A0)/g,i=/(
|<\/div>)/gi,o=/\n$/i;function s(e){return e.replace(r," ").replace(a,"\n").replace(i,"").replace(o,"")}},6391:(e,t,n)=>{function a(e,t){const{commonAncestorContainer:n}=e;let a=n,r=1;for(;a&&a.id!==t&&r<5;)a=a.parentElement,r++;return Boolean(a&&a.id===t)}n.d(t,{R:()=>a})},3575:(e,t,n)=>{n.d(t,{Z:()=>y});var a=n(4050),r=n(3716),i=n(735),o=n(2400),s=n(4284),l=n(5723),c=n(782);const d=new WeakMap;function u(e){return function(){const t=d.get(e);for(var n=arguments.length,a=new Array(n),r=0;rObject.values((0,c.q0)(r,e)))):{},o=n?(0,c.Q8)(n,(e=>Object.values((0,c.q0)(r,e)))):{},s={...i,...o},l=[].concat(Object.keys(i),Object.keys(o)),d=a.reduce(((e,t)=>(t.names.forEach((n=>{e[n]||(e[n]=[]),e[n].push(t)})),e)),{});return{byKeyword:s,keywords:l,byName:d,names:Object.keys(d)}})),P=u((function(e,t,n){const{byKeyword:a,keywords:r,byName:o,names:s}=e;let l=i.D;const d=r.filter((e=>e.startsWith(t))).sort();l=l.concat((0,c.xH)(Object.values((0,c.q0)(a,d))));const u=s.filter((e=>e.startsWith(t)));return l=l.concat((0,c.xH)(Object.values((0,c.q0)(o,u)))),l=(0,c.Tw)(l),l.slice(0,n)}));try{g=/(^|\s):[-+_:\p{L}\p{N}]*$/giu}catch(e){g=/(^|\s):[-+_:\d\wа-яё]*$/gi}function y(e,t,n){let o=arguments.length>3&&void 0!==arguments[3]?arguments[3]:r.R2,s=arguments.length>4?arguments[4]:void 0,c=arguments.length>5?arguments[5]:void 0,d=arguments.length>6?arguments[6]:void 0,u=arguments.length>7&&void 0!==arguments[7]&&arguments[7];const[v,f,g]=(0,m.Z)(),[y,N]=(0,a.eJ)(),[w,k]=(0,a.eJ)(!1),[I,S]=(0,a.eJ)(i.D);(0,a.d4)((()=>{if(u)return;const e=()=>{N(p.emojis)};p?e():b().then(e)}),[u]);const T=t.current;(0,a.d4)((()=>{if(!e||!T||!y||u)return void g();const t=T.includes(":")&&C(T);if(!t)return S(i.D),void g();const a=t.length>2&&t.endsWith(":"),r=t.substr(1,a?t.length-2:void 0);let o=i.D;if(k(a),r){if(r.length>=2){const e=E(y,c,d);o=P(e,r,36)}}else o=Z(y,n,36);o.length?(a||f(),S(o)):g()}),[y,T,e,f,n,g,k,u,c,d]);const M=(0,a.I4)(((e,n)=>{const a=t.current,i=a.lastIndexOf(":",n?a.lastIndexOf(":")-1:void 0);if(-1!==i){let t;s(`${a.substr(0,i)}${(0,h.Z)(e,["emoji_html"])}`),t=o===r.R2?document.querySelector(r.Ed):document.getElementById(o),requestAnimationFrame((()=>{(0,l.Z)(t,!0,!0)}))}g()}),[t,o,s,g]);return(0,a.d4)((()=>{v&&w&&I.length&&M(I[0].native,!0)}),[I,M,v,w]),{isEmojiTooltipOpen:v,closeEmojiTooltip:g,filteredEmojis:I,insertEmoji:M}}function C(e){const t=(0,o._)(e).match(g);return t?t[0].trim():void 0}async function b(){return v||(v=n.e(501).then(n.t.bind(n,7501,19)),f=(await v).default,p=(0,s.NM)(f)),v}},9295:(e,t,n)=>{n.d(t,{Z:()=>v});var a=n(4050),r=n(3555),i=n(6137),o=n(3716),s=n(5806),l=n(2400),c=n(5723),d=n(706),u=n(782);const m=(0,n(9118).P2)((e=>e()),500,!0);let h;try{h=/(^|\s)@[-_\p{L}\p{M}\p{N}]*$/giu}catch(e){h=/(^|\s)@[-_\d\wа-яё]*$/gi}function v(e,t,n){let l=arguments.length>3&&void 0!==arguments[3]?arguments[3]:o.R2,h=arguments.length>4?arguments[4]:void 0,v=arguments.length>5?arguments[5]:void 0,g=arguments.length>6?arguments[6]:void 0;const[Z,E,P]=(0,d.Z)(),[y,C]=(0,a.eJ)(),b=(0,a.I4)(((e,t)=>{const n=(0,r.Rd)().users.byId;(h||v)&&n?m((()=>{const a=null==h?void 0:h.reduce(((e,t)=>(t.userId!==g&&e.push(t.userId),e)),[]),r=(0,s.kK)((0,u.Tw)([...t&&v||[],...a||[]]),n,e);C(Object.values((0,u.q0)(n,r)))})):C(void 0)}),[g,h,v]),N=t.current;(0,a.d4)((()=>{if(!e||!N.length)return void P();const t=N.includes("@")&&f(N);if(t){const e=t?t.substr(1):"";b(e,p(N))}else P()}),[e,b,E,P,N]),(0,a.d4)((()=>{null!=y&&y.length?E():P()}),[E,P,y]);const w=(0,a.I4)((function(e){let a=arguments.length>1&&void 0!==arguments[1]&&arguments[1];if(!e.username&&!(0,s.Vl)(e))return;const r=e.username?`@${e.username}`:`${(0,s.Vl)(e)}`,o=t.current,d=o.lastIndexOf("@");if(-1!==d){n(`${o.substr(0,d)}${r} `);const e=document.getElementById(l);requestAnimationFrame((()=>{(0,c.Z)(e,a)}))}P()}),[t,l,n,P]);return{isMentionTooltipOpen:Z,closeMentionTooltip:P,insertMention:w,mentionFilteredUsers:y}}function f(e){const t=(0,l._)(e).match(h);return t?t[0].trim():void 0}function p(e){return e.startsWith("@")}},7891:(e,t,n)=>{n.d(t,{Z:()=>o});var a=n(4050),r=n(9290),i=n(5326);function o(e,t){const n=void 0===t,o=(0,a.sO)(n),s=(0,a.sO)(),l=(0,i.Z)();return(0,r.Z)((()=>{n||(o.current=!1,s.current&&(clearTimeout(s.current),s.current=void 0))}),e),(0,a.d4)((()=>{if(n||o.current)return;const e=()=>{o.current=!0,l()};t>0?s.current=window.setTimeout(e,t):e()}),e),o.current}},1218:(e,t,n)=>{n.d(t,{Z:()=>i});var a=n(4050),r=n(4605);const i=(0,a.X$)((e=>{let{id:t,options:n,selected:i=[],disabled:o,round:s,loadingOptions:l,onChange:c}=e;const[d,u]=(0,a.eJ)(i||[]),m=(0,a.I4)((e=>{const{value:t,checked:n}=e.currentTarget;let a;a=n?[...d,t]:d.filter((e=>e!==t)),u(a),c(a)}),[c,d]);return a.ZP.createElement("div",{id:t,className:"radio-group"},n.map((e=>a.ZP.createElement(r.Z,{label:e.label,subLabel:e.subLabel,value:e.value,checked:-1!==i.indexOf(e.value),disabled:o,round:s,isLoading:l?-1!==l.indexOf(e.value):void 0,onChange:m}))))}))},1151:(e,t,n)=>{n.d(t,{Z:()=>o});var a=n(4050),r=n(6752),i=n(231);const o=e=>{let{isShown:t,className:n,color:o="primary",ariaLabel:s,disabled:l,onClick:c,children:d}=e;const u=(0,r.Z)("FloatingActionButton",t&&"revealed",n);return a.ZP.createElement(i.Z,{className:u,color:o,round:!0,disabled:l,onClick:t&&!l?c:void 0,ariaLabel:s,tabIndex:-1},d)}},1876:(e,t,n)=>{n.d(t,{Z:()=>f});var a=n(4050),r=n(7361),i=n(9118),o=n(6752),s=n(7240),l=n(3394),c=n(706),d=n(9107),u=n(8512),m=n(2328),h=n(8964),v=n(231);const f=e=>{let{ref:t,buttonRef:n,icon:f,secondaryIcon:p,className:g,style:Z,children:E,disabled:P,ripple:y,narrow:C,inactive:b,focus:N,destructive:w,multiline:k,isStatic:I,contextActions:S,onMouseDown:T,onClick:M,onSecondaryIconClick:x}=e,L=(0,a.sO)(null);t&&(L=t);const[$,O,A]=(0,c.Z)(),{isContextMenuOpen:F,contextMenuPosition:D,handleBeforeContextMenu:R,handleContextMenu:B,handleContextMenuClose:U,handleContextMenuHide:X}=(0,s.Z)(L,!S),Y=(0,a.I4)((()=>L.current),[]),z=(0,a.I4)((()=>L.current.closest(".custom-scroll")),[]),V=(0,a.I4)((()=>L.current.querySelector(".ListItem-context-menu .bubble")),[]),{positionX:j,positionY:K,transformOriginX:H,transformOriginY:W,style:q}=(0,l.Z)(D,Y,z,V),J=(0,a.I4)((e=>{!P&&M&&(M(e),r.$b&&!y&&(O(),(0,i.T2)(A)))}),[P,O,M,y,A]),_=e=>{P||0!==e.button||!x&&!S||(e.stopPropagation(),x?x(e):B(e))},G=(0,a.I4)((e=>{b||r.$b||(!S||2!==e.button&&M||R(e),0===e.button&&(M?J(e):B(e)))}),[b,S,M,R,B,J]),Q=(0,d.Z)(),ee=(0,o.Z)("ListItem",g,!I&&"no-selection",y&&"has-ripple",C&&"narrow",P&&"disabled",b&&"inactive",D&&"has-menu-open",N&&"focus",w&&"destructive",k&&"multiline",I&&"is-static");return a.ZP.createElement("div",{ref:L,className:ee,dir:Q.isRtl?"rtl":void 0,style:Z,onMouseDown:T},a.ZP.createElement("div",{className:(0,o.Z)("ListItem-button",$&&"active"),role:"button",ref:n,tabIndex:0,onClick:!b&&r.$b?J:void 0,onMouseDown:G,onContextMenu:!b&&S?B:void 0},f&&a.ZP.createElement("i",{className:`icon-${f}`}),k&&a.ZP.createElement("div",{className:"multiline-item"},E),!k&&E,!P&&!b&&y&&a.ZP.createElement(u.Z,null),p&&a.ZP.createElement(v.Z,{className:"secondary-icon",round:!0,color:"translucent",size:"smaller",onClick:r.$b?_:void 0,onMouseDown:r.$b?void 0:_},a.ZP.createElement("i",{className:`icon-${p}`}))),S&&void 0!==D&&a.ZP.createElement(m.Z,{isOpen:F,transformOriginX:H,transformOriginY:W,positionX:j,positionY:K,style:q,className:"ListItem-context-menu",autoClose:!0,onClose:U,onCloseAnimationEnd:X},S.map((e=>a.ZP.createElement(h.Z,{key:e.title,icon:e.icon,destructive:e.destructive,disabled:!e.handler,onClick:e.handler},e.title)))))}},6937:(e,t,n)=>{n.d(t,{Z:()=>d});var a=n(4050),r=n(3716),i=n(1212),o=n(6752),s=n(3989),l=n(2898);const c=3e3,d=e=>{let{message:t,duration:n=c,containerId:d,onDismiss:u}=e;const[m,h]=(0,a.eJ)(!0),v=(0,a.sO)(null),{transitionClassNames:f}=(0,i.Z)(m),p=(0,a.I4)((()=>{h(!1),setTimeout(u,150+r.fK)}),[u]);(0,a.d4)((()=>m?(0,s.Z)(p):void 0),[m,p]),(0,a.d4)((()=>(v.current=window.setTimeout(p,n),()=>{v.current&&(clearTimeout(v.current),v.current=void 0)})),[n,p]);const g=(0,a.I4)((()=>{v.current&&(clearTimeout(v.current),v.current=void 0)}),[]),Z=(0,a.I4)((()=>{v.current=window.setTimeout(p,n)}),[n,p]);return a.ZP.createElement(l.Z,{className:"Notification-container",containerId:d},a.ZP.createElement("div",{className:(0,o.Z)("Notification",f),onClick:p,onMouseEnter:g,onMouseLeave:Z},a.ZP.createElement("div",{className:"content"},t)))}},9196:(e,t,n)=>{n.d(t,{Z:()=>o});var a=n(4050),r=n(6752);const i={s:22,m:25,l:28,xl:20},o=(0,a.X$)((e=>{let{progress:t=0,size:n="l",square:o,transparent:s,noCross:l,onClick:c}=e;const d=i[n],u=d-4,m=d-1,h=2*u*Math.PI,v=(0,a.sO)(null);(0,a.d4)((()=>{if(!v.current)return;const e=v.current.firstElementChild,n=h-Math.min(Math.max(.05,t),1)*h;e?e.firstElementChild.setAttribute("stroke-dashoffset",n.toString()):v.current.innerHTML=`\n \n `}),[v,h,m,u,t]);const f=(0,r.Z)(`ProgressSpinner size-${n}`,s&&"transparent",o&&"square",l&&"no-cross");return a.ZP.createElement("div",{ref:v,className:f,onClick:c})}))},4434:(e,t,n)=>{n.d(t,{Z:()=>l});var a=n(4050),r=n(6752),i=n(9107),o=n(9204);const s=(0,a.X$)((e=>{let{id:t,label:n,subLabel:s,value:l,name:c,checked:d,disabled:u,hidden:m,isLoading:h,onChange:v}=e;const f=(0,i.Z)(),p=(0,r.Z)("Radio",u&&"disabled",m&&"hidden-widget",h&&"loading");return a.ZP.createElement("label",{className:p,dir:f.isRtl?"rtl":void 0},a.ZP.createElement("input",{type:"radio",name:c,value:l,id:t,checked:d,onChange:v,disabled:u||m}),a.ZP.createElement("div",{className:"Radio-main"},a.ZP.createElement("span",{className:"label",dir:f.isRtl?"auto":void 0},n),s&&a.ZP.createElement("span",{className:"subLabel",dir:f.isRtl?"auto":void 0},s)),h&&a.ZP.createElement(o.Z,null))})),l=(0,a.X$)((e=>{let{id:t,name:n,options:r,selected:i,disabled:o,loadingOption:l,onChange:c}=e;const d=(0,a.I4)((e=>{const{value:t}=e.currentTarget;c(t)}),[c]);return a.ZP.createElement("div",{id:t,className:"radio-group"},r.map((e=>a.ZP.createElement(s,{name:n,label:e.label,subLabel:e.subLabel,value:e.value,checked:e.value===i,hidden:e.hidden,disabled:o,isLoading:l?l===e.value:void 0,onChange:d}))))}))},8051:(e,t,n)=>{n.d(t,{Z:()=>o});var a=n(4050),r=n(6752),i=n(9107);const o=(0,a.X$)((e=>{let{options:t,min:n=0,max:o=(t?t.length-1:100),step:s=1,label:l,value:c,disabled:d,bold:u,className:m,renderValue:h,onChange:v}=e;const f=(0,i.Z)(),p=(0,a.I4)((e=>{v(Number(e.currentTarget.value))}),[v]),g=(0,r.Z)(m,"RangeSlider",d&&"disabled",u&&"bold"),Z=(0,a.Ye)((()=>t?c/(t.length-1)*100:(c-n)/((o-n)/s)*100),[t,c,o,n,s]);return a.ZP.createElement("div",{className:g},l&&a.ZP.createElement("div",{className:"slider-top-row",dir:f.isRtl?"rtl":void 0},a.ZP.createElement("span",{className:"label",dir:"auto"},l),!t&&a.ZP.createElement("span",{className:"value",dir:"auto"},h?h(c):c)),a.ZP.createElement("div",{className:"slider-main"},a.ZP.createElement("div",{className:"slider-fill-track",style:`width: ${Z}%`}),a.ZP.createElement("input",{min:n,max:o,value:c,step:s,type:"range",className:"RangeSlider__input",onChange:p}),t&&a.ZP.createElement("div",{className:"slider-options"},t.map(((e,t)=>a.ZP.createElement("div",{className:(0,r.Z)("slider-option no-selection",t===c&&"active"),onClick:()=>v(t)},e))))))}))},9589:(e,t,n)=>{n.d(t,{Z:()=>u});var a=n(4050),r=n(6752),i=n(706),o=n(9107),s=n(2515),l=n(4288),c=n(231),d=n(126);const u=(0,a.X$)((e=>{let{ref:t,children:n,parentContainerClassName:u,value:m,inputId:h,className:v,focused:f,isLoading:p,spinnerColor:g,spinnerBackgroundColor:Z,placeholder:E,disabled:P,autoComplete:y,canClose:C,autoFocusSearch:b,onChange:N,onReset:w,onFocus:k,onBlur:I,onSpinnerClick:S}=e,T=(0,a.sO)(null);t&&(T=t);const[M,x,L]=(0,i.Z)(f);(0,s.Z)(T,b,L),(0,a.d4)((()=>{T.current&&(f?T.current.focus():T.current.blur())}),[f,E]);const $=(0,o.Z)(),O=(0,a.I4)((e=>{if("ArrowDown"===e.key||"Enter"===e.key){const e=document.querySelector(`.${u} .ListItem-button`);e&&e.focus()}}),[u]);return a.ZP.createElement("div",{className:(0,r.Z)("SearchInput",v,M&&"has-focus"),dir:$.isRtl?"rtl":void 0},n,a.ZP.createElement("input",{ref:T,id:h,type:"text",dir:"auto",placeholder:E||$("Search"),className:"form-control",value:m,disabled:P,autoComplete:y,onChange:function(e){const{currentTarget:t}=e;N(t.value)},onFocus:function(){x(),k&&k()},onBlur:function(){L(),I&&I()},onKeyDown:O}),a.ZP.createElement("i",{className:"icon-search"}),a.ZP.createElement(d.Z,{isOpen:Boolean(p),className:"slow"},a.ZP.createElement(l.Z,{color:g,backgroundColor:Z,onClick:S})),!p&&(m||C)&&w&&a.ZP.createElement(c.Z,{round:!0,size:"tiny",color:"translucent",onClick:w},a.ZP.createElement("span",{className:"icon-close"})))}))},126:(e,t,n)=>{n.d(t,{Z:()=>s});var a=n(4050),r=n(1212),i=n(7204),o=n(6752);const s=e=>{let{isOpen:t,isCustom:n,id:s,className:l,onClick:c,children:d}=e;const{shouldRender:u,transitionClassNames:m}=(0,r.Z)(t,void 0,void 0,!n&&void 0),h=(0,i.Z)(t),v=(0,i.Z)(d),f=(0,a.sO)();return h&&!t&&(f.current=v),u&&a.ZP.createElement("div",{id:s,className:(0,o.Z)(l,m),onClick:c},t?d:f.current)}},3321:(e,t,n)=>{n.d(t,{Z:()=>i});var a=n(4050),r=n(6752);const i=(0,a.X$)((e=>{let{id:t,name:n,value:i,label:o,checked:s=!1,disabled:l,inactive:c,noAnimation:d,onChange:u,onCheck:m}=e;const h=(0,a.I4)((e=>{u&&u(e),m&&m(e.currentTarget.checked)}),[u,m]),v=(0,r.Z)("Switcher",l&&"disabled",c&&"inactive",d&&"no-animation");return a.ZP.createElement("label",{className:v,title:o},a.ZP.createElement("input",{type:"checkbox",id:t,name:n,value:i,checked:s,disabled:l,onChange:h}),a.ZP.createElement("span",{className:"widget"}))}))},3133:(e,t,n)=>{n.d(t,{Z:()=>f});var a=n(4050),r=n(7361),i=n(1367),o=n(7204),s=n(8781),l=n(9107),c=n(6752),d=n(2972),u=n(2340);const m="Tab--active",h=(0,a.X$)((e=>{let{className:t,title:n,isActive:r,badgeCount:i,isBadgeActive:o,previousActiveTab:s,onClick:l,clickArg:h}=e;const v=(0,a.sO)(null);return(0,a.d4)((()=>{if(r&&void 0===s&&v.current&&v.current.classList.add(m),!r||void 0===s)return;const e=v.current,t=e.parentElement.children[s];if(!t)return;const n=e.querySelector("i"),a=t.querySelector("i"),i=a.parentElement.offsetLeft-n.parentElement.offsetLeft,o=a.clientWidth/n.clientWidth;a.classList.remove("animate"),n.classList.remove("animate"),n.style.transform=`translate3d(${i}px, 0, 0) scale3d(${o}, 1, 1)`,(0,d.Z)(n),n.classList.add("animate"),n.style.transform="none",t.classList.remove(m),e.classList.add(m)}),[r,s]),a.ZP.createElement("div",{className:(0,c.Z)("Tab",t),onClick:()=>l(h),ref:v},a.ZP.createElement("span",null,(0,u.Z)(n),Boolean(i)&&a.ZP.createElement("span",{className:(0,c.Z)("badge",o&&"Tab__badge--active")},i),a.ZP.createElement("i",null)))})),v=r.cj?450:r.wZ?400:300,f=(0,a.X$)((e=>{let{tabs:t,activeTab:n,big:r,onSwitchTab:c}=e;const d=(0,a.sO)(null),u=(0,o.Z)(n);(0,s.Z)(d.current),(0,a.d4)((()=>{const e=d.current,{scrollWidth:t,offsetWidth:a,scrollLeft:r}=e;if(t<=a)return;const o=e.childNodes[n];if(!o)return;const{offsetLeft:s,offsetWidth:l}=o,c=s-a/2+l/2;Math.abs(c-r)<16||(0,i.Z)(e,c,v)}),[n]);const m=(0,l.Z)();return a.ZP.createElement("div",{className:"TabList no-selection no-scrollbar "+(r?"big":""),ref:d,dir:m.isRtl?"rtl":void 0},t.map(((e,t)=>a.ZP.createElement(h,{key:e.title,title:m(e.title),isActive:t===n,badgeCount:e.badgeCount,isBadgeActive:e.isBadgeActive,previousActiveTab:u,onClick:c,clickArg:t}))))}))},2255:(e,t,n)=>{n.d(t,{Z:()=>h});var a=n(4050),r=n(3555),i=n(3716),o=n(6752),s=n(2972),l=n(1279),c=n(5326),d=n(7204),u=n(8674);const m="Transition__slide--active",h=e=>{let{ref:t,activeKey:n,name:h,direction:v="auto",renderCount:f,shouldRestoreHeight:p,shouldCleanup:g,cleanupExceptionKey:Z,id:E,className:P,onStart:y,onStop:C,children:b}=e;const{animationLevel:N}=(0,r.Rd)().settings.byKey,w=(0,a.sO)();let k=(0,a.sO)(null);t&&(k=t);const I=(0,a.sO)({}),S=(0,d.Z)(n),T=(0,c.Z)(),M=void 0!==S&&n!==S;!f&&M&&(I.current={[S]:I.current[S]}),I.current[n]=b,(0,a.bt)((()=>{function e(){if(!g)return;const e=void 0!==Z?I.current[Z]:void 0;I.current=e?{[Z]:e}:{},T()}const t=k.current,a=t.children;if(1===a.length&&!M)return h.startsWith("slide-optimized")&&(a[0].style.transition="none",a[0].style.transform="translate3d(0, 0, 0)"),void a[0].classList.add(m);const r=Array.from(t.childNodes);if(!M||!r.length)return;w.current=n;const o=-1===v||"auto"===v&&S>n||"inverse"===v&&S{null==h||h(),p.style.transition="none",p.style.transform="translate3d(0, 0, 0)",f.style.transition="none",f.style.transform=`translate3d(${n?"-":""}100%, 0, 0)`,(0,s.Z)(f),p.style.transition="",p.style.transform=`translate3d(${n?"":"-"}100%, 0, 0)`,f.style.transition="",f.style.transform="translate3d(0, 0, 0)",p.classList.remove(m),f.classList.add(m),(0,l.L)(p,(()=>{r===o.current&&(p.style.transition="none",p.style.transform="",d&&(f.style.height="auto",c.style.height=`${f.clientHeight}px`),null==v||v(),g(),a())}))}))}(N,h,o,e,n,w,t,p,y,C,r[E],r[d]);if(t.classList.remove("animating"),t.classList.toggle("backwards",o),"none"===h||N===i.oB)return r.forEach(((e,t)=>{e instanceof HTMLElement&&(e.classList.remove("from","through","to"),e.classList.toggle(m,t===E))})),void e();r.forEach(((e,t)=>{e instanceof HTMLElement&&(e.classList.remove(m),e.classList.toggle("from",t===d),e.classList.toggle("through",t>d&&tE),e.classList.toggle("to",t===E))}));const P=(0,u.YW)();requestAnimationFrame((()=>{var a;function i(){requestAnimationFrame((()=>{if(n===w.current){if(t.classList.remove("animating","backwards"),r.forEach(((e,t)=>{e instanceof HTMLElement&&(e.classList.remove("from","through","to"),e.classList.toggle(m,t===E))})),p){const e=t.querySelector(`.${m}`);e&&(e.style.height="auto",t.style.height=`${e.clientHeight}px`)}null==C||C(),P(),e()}}))}t.classList.add("animating"),null==y||y();const s="mv-slide"===h?null===(a=r[E])||void 0===a?void 0:a.firstChild:"reveal"===h&&o?r[d]:r[E];s?(0,l.f)(s,i):i()}))}),[n,S,M,v,h,y,C,f,p,g,Z,N,T]),(0,a.bt)((()=>{if(p){const e=k.current,t=e.querySelector(`.${m}`)||e.querySelector(".from");t&&(t.style.height="auto",e.style.height=`${t.clientHeight}px`,e.style.flexBasis=`${t.clientHeight}px`)}}),[p,b]);const x=I.current,L=Object.keys(f?new Array(f).fill(void 0):x).map(Number).map((e=>{const t=x[e];if(t)return a.ZP.createElement("div",{key:e,teactOrderKey:e},"function"==typeof t?t(e===n,e===S,n):t)}));return a.ZP.createElement("div",{ref:k,id:E,className:(0,o.Z)("Transition",P,h),teactFastList:!f},L)}},3455:(e,t,n)=>{n.d(t,{Yy:()=>o,ZP:()=>h,fi:()=>i,vb:()=>c});var a=n(1090),r=n(782);const i=[{icon:"user",title:"FilterContacts",key:"contacts"},{icon:"non-contacts",title:"FilterNonContacts",key:"nonContacts"},{icon:"group",title:"FilterGroups",key:"groups"},{icon:"channel",title:"FilterChannels",key:"channels"},{icon:"bots",title:"FilterBots",key:"bots"}],o=[{icon:"mute",title:"FilterMuted",key:"excludeMuted"},{icon:"archive",title:"FilterArchived",key:"excludeArchived"},{icon:"readchats",title:"FilterRead",key:"excludeRead"}],s=["includedChatIds","bots","channels","groups","contacts","nonContacts"],l=["excludedChatIds","excludeArchived","excludeMuted","excludeRead"];function c(e,t,n){let a=[],i=[];if("included"===t){const{includedChatIds:t,...o}=n?e.includeFilters||{}:(0,r.ei)(e.folder,s);a=t||[],i=Object.keys(o).filter((e=>Boolean(o[e])))}else{const{excludedChatIds:t,...o}=n?e.excludeFilters||{}:(0,r.ei)(e.folder,l);a=t||[],i=Object.keys(o).filter((e=>Boolean(o[e])))}return{selectedChatIds:a,selectedChatTypes:i}}function d(e){if(e){const{includedChatIds:t,...n}=e;if(Object.values(n).filter(Boolean).length>1||null!=t&&t.length)return"";if(n.bots)return"Bots";if(n.groups)return"Groups";if(n.channels)return"Channels";if(n.contacts)return"Contacts";if(n.nonContacts)return"Non-Contacts"}return""}const u={mode:"create",chatFilter:"",folder:{title:"",includedChatIds:[],excludedChatIds:[]}},m=(e,t)=>{switch(t.type){case"setTitle":return{...e,folder:{...e.folder,title:t.payload},isTouched:!0};case"editIncludeFilters":return{...e,includeFilters:(0,r.ei)(e.folder,s)};case"editExcludeFilters":return{...e,excludeFilters:(0,r.ei)(e.folder,l)};case"setIncludeFilters":return{...e,includeFilters:t.payload,chatFilter:""};case"setExcludeFilters":return{...e,excludeFilters:t.payload,chatFilter:""};case"saveFilters":return e.includeFilters?{...e,folder:{...(0,r.CE)(e.folder,s),title:e.folder.title?e.folder.title:d(e.includeFilters),...e.includeFilters},includeFilters:void 0,chatFilter:"",isTouched:!0}:e.excludeFilters?{...e,folder:{...(0,r.CE)(e.folder,l),...e.excludeFilters},excludeFilters:void 0,chatFilter:"",isTouched:!0}:e;case"editFolder":{const{id:e,description:n,...a}=t.payload;return{mode:"edit",folderId:e,folder:a,chatFilter:""}}case"setChatFilter":return{...e,chatFilter:t.payload};case"setIsLoading":return{...e,isLoading:t.payload};case"setError":return{...e,error:t.payload};case"reset":return u;default:return e}},h=()=>(0,a.Z)(m,u)},3186:(e,t,n)=>{n.d(t,{Z:()=>u});var a=n(4050),r=n(3555),i=n(396),o=n(274),s=n(5266),l=n(9290),c=n(4532);function d(e){let t={};if(e&&e.current){const{play:n,pause:a,setCurrentTime:i,proxy:o,requestNextTrack:s,requestPreviousTrack:l,isFirst:c,isLast:d}=e.current;t={play:()=>{n(o.src)},pause:()=>{a()},stop:()=>{a(),i(0),(0,r.Sv)().closeAudioPlayer()},seekbackward:e=>{const t=e.seekOffset||10;i(Math.max(o.currentTime-t,0))},seekforward:e=>{const t=e.seekOffset||10;i(Math.min(o.currentTime+t,o.duration))},seekTo:e=>{e.seekTime&&i(e.seekTime)}},d()||(t.nexttrack=()=>{s()}),c()||(t.previoustrack=()=>{l()})}return t}const u=function(e,t,n,u,m,h,v){let f=arguments.length>7&&void 0!==arguments[7]&&arguments[7],p=arguments.length>8?arguments[8]:void 0,g=arguments.length>9?arguments[9]:void 0,Z=arguments.length>10&&void 0!==arguments[10]&&arguments[10],E=arguments.length>11&&void 0!==arguments[11]&&arguments[11];const P=(0,a.sO)(null),[y,C]=(0,a.eJ)(!1);let b=y;const[N,w]=(0,a.eJ)(0),k=(0,a.I4)((()=>{C(!1),g&&g()}),[g]);(0,l.Z)((()=>{P.current=(0,i.z2)(e,n,((e,a)=>{var i;switch(e){case"onPlay":{const{setVolume:e,setPlaybackRate:t,toggleMuted:a,proxy:i}=P.current;C(!0),(0,c.N)(h,d(P)),(0,c.pC)("playing"),e((0,r.Rd)().audioPlayer.volume),a(Boolean((0,r.Rd)().audioPlayer.isMuted)),"voice"===n&&t((0,r.Rd)().audioPlayer.playbackRate),(0,c.NS)({duration:i.duration||0,playbackRate:i.playbackRate,position:i.currentTime});break}case"onRateChange":{const{proxy:e}=P.current;(0,c.NS)({duration:e.duration||0,playbackRate:e.playbackRate,position:e.currentTime});break}case"onPause":C(!1),(0,c.pC)("paused");break;case"onTimeUpdate":{const{proxy:e}=P.current,n=e.duration&&Number.isFinite(e.duration)?e.duration:t;E||w(e.currentTime/n);break}case"onEnded":(0,c.pC)("paused")}null==m||null===(i=m[e])||void 0===i||i.call(m,a)}),p,k);const{proxy:a}=P.current;y||a.paused||(C(!0),b=!0),v&&v(a)}),[e]),(0,a.d4)((()=>{y&&h&&(0,c.Ym)(h)}),[h,y]);const{play:I,pause:S,setCurrentTime:T,proxy:M,destroy:x,setVolume:L,stop:$,isFirst:O,isLast:A,requestNextTrack:F,requestPreviousTrack:D,setPlaybackRate:R,toggleMuted:B}=P.current,U=M.duration&&Number.isFinite(M.duration)?M.duration:t;(0,a.d4)((()=>{!U||(0,s.z)(M)||E||w(M.currentTime/U)}),[U,N,M,E]),(0,a.d4)((()=>()=>{x(Z)}),[x,Z]),(0,o.Z)((e=>{let[t,n]=e;t===f&&u===n||M.src&&M.paused||f&&u&&!y&&I(u)}),[f,u,y,I,M.src,M.paused]);const X=(0,a.I4)((()=>{u&&I(u)}),[u,I]),Y=(0,a.I4)((()=>{y?S():X()}),[S,X,y]),z=(0,a.I4)((e=>{T(e),U&&w(M.currentTime/U)}),[U,M,T]);return{isPlaying:b,playProgress:N,playPause:Y,pause:S,play:X,stop:$,setCurrentTime:z,setVolume:L,audioProxy:M,duration:U,requestNextTrack:F,requestPreviousTrack:D,isFirst:O,isLast:A,setPlaybackRate:R,toggleMuted:B}}},2019:(e,t,n)=>{n.d(t,{Z:()=>s});var a=n(4050),r=n(9118),i=n(5266);function o(e,t){const n=[];for(let a=0;a0&&void 0!==arguments[0]&&arguments[0];const[t,n]=(0,a.eJ)(!e),[s,l]=(0,a.eJ)(0),[c,d]=(0,a.eJ)([]),u=(0,a.Ye)((()=>(0,r.Ds)(n,200,!1,!0)),[]),m=(0,a.I4)((e=>{const t=e.currentTarget;if(!(0,i.z)(t)){if(t.buffered.length){const e=o(t.buffered,t.duration);d(e);const n=e.reduce(((e,t)=>{let{start:n,end:a}=t;return e+a-n}),0);l(n/t.duration)}u(t.readyState>=3||t.currentTime>0)}}),[u]),h={onLoadedData:m,onPlaying:m,onLoadStart:m,onPause:m,onTimeUpdate:m,onProgress:m};return{isBuffered:t,bufferedProgress:s,bufferedRanges:c,bufferingHandlers:h,checkBuffering(e){u(e.readyState>=3)}}}},5866:(e,t,n)=>{n.d(t,{Z:()=>s});var a=n(4050),r=n(6264),i=n(5326),o=n(7361);function s(e){let t=arguments.length>1&&void 0!==arguments[1]&&arguments[1],n=arguments.length>2?arguments[2]:void 0;const s=(0,a.sO)(null),l=(0,i.Z)();return(0,a.d4)((()=>{const a=s.current;if(!e||!a||t)return;const i=new Image,l=()=>{a.width=i.width,a.height=i.height;const e=a.getContext("2d",{alpha:!1});o.vX&&(e.filter="blur(2px)"),e.drawImage(i,-4,-4,a.width+8,a.height+8),o.vX||(0,r.Z)(e,0,0,a.width,a.height,2,2)};i.onload=()=>{n?requestAnimationFrame(l):l()},i.src=e}),[s,e,l,t,n]),s}},1470:(e,t,n)=>{n.d(t,{Z:()=>c});var a=n(4050),r=n(3555),i=n(3716),o=n(5806),s=n(782),l=n(9107);const c=function(e){let{chat:t,user:n,folderId:c,isPinned:d,isMuted:u,canChangeFolder:m,handleDelete:h,handleChatFolderChange:v}=e,f=arguments.length>1&&void 0!==arguments[1]&&arguments[1];const p=(0,l.Z)(),{isSelf:g}=n||{},Z=(null==n?void 0:n.id)===i.aw;return(0,a.Ye)((()=>{if(!t)return;const{toggleChatPinned:e,updateChatMutedState:n,toggleChatArchived:a,toggleChatUnread:i}=(0,r.Sv)(),l=m?{title:p("ChatList.Filter.AddToFolder"),icon:"folder",handler:v}:void 0,E=d?{title:p("UnpinFromTop"),icon:"unpin",handler:()=>e({id:t.id,folderId:c})}:{title:p("PinToTop"),icon:"pin",handler:()=>e({id:t.id,folderId:c})};if(f)return(0,s.oA)([E,l]);const P=t.unreadCount||t.hasUnreadMark?{title:p("MarkAsRead"),icon:"readchats",handler:()=>i({id:t.id})}:{title:p("MarkAsUnread"),icon:"unread",handler:()=>i({id:t.id})},y=u?{title:p("ChatList.Unmute"),icon:"unmute",handler:()=>n({chatId:t.id,isMuted:!1})}:{title:p("ChatList.Mute"),icon:"mute",handler:()=>n({chatId:t.id,isMuted:!0})},C=(0,o.pE)(t)?{title:p("Unarchive"),icon:"unarchive",handler:()=>a({id:t.id})}:{title:p("Archive"),icon:"archive",handler:()=>a({id:t.id})},b={title:(0,o.YC)(t.id)?p("Delete"):p((0,o.cc)(t)?"DeleteChat":(0,o.eA)(t)?"LeaveChannel":"Group.LeaveGroup"),icon:"delete",destructive:!0,handler:h},N=void 0!==c;return(0,s.oA)([l,P,E,!g&&y,!g&&!Z&&!N&&C,b])}),[t,m,p,v,d,f,u,h,c,g,Z])}},7240:(e,t,n)=>{n.d(t,{Z:()=>o});var a=n(4050),r=n(7361);function i(e){e.stopImmediatePropagation(),e.preventDefault(),e.stopPropagation()}const o=(e,t,n,o)=>{const[s,l]=(0,a.eJ)(!1),[c,d]=(0,a.eJ)(void 0),u=(0,a.I4)((e=>{t||2!==e.button||e.target.classList.add("no-selection")}),[t]),m=(0,a.I4)((e=>{e.target.classList.remove("no-selection"),t||n&&e.target.matches("a[href]")||(e.preventDefault(),c||(l(!0),d({x:e.clientX,y:e.clientY})))}),[t,n,c]),h=(0,a.I4)((()=>{l(!1)}),[]),v=(0,a.I4)((()=>{d(void 0)}),[]);return(0,a.d4)((()=>{if(t||!r.$b||o)return;const a=e.current;if(!a)return;let s;const u=()=>{s&&(clearTimeout(s),s=void 0)},m=e=>{t||(u(),s=window.setTimeout((()=>(e=>{u();const{clientX:t,clientY:o,target:s}=e.touches[0];c||n&&s.matches("a[href]")||(a.addEventListener("touchend",(function e(t){a.removeEventListener("touchend",e,!0),i(t)}),!0),r.fl&&r.cj&&a.addEventListener("mousedown",(function e(t){a.removeEventListener("mousedown",e,!0),i(t)}),!0),l(!0),d({x:t,y:o}))})(e)),200))};return a.addEventListener("touchstart",m,{passive:!0}),a.addEventListener("touchcancel",u,!0),a.addEventListener("touchend",u,!0),a.addEventListener("touchmove",u,{passive:!0}),()=>{u(),a.removeEventListener("touchstart",m),a.removeEventListener("touchcancel",u,!0),a.removeEventListener("touchend",u,!0),a.removeEventListener("touchmove",u)}}),[c,t,o,e,n]),{isContextMenuOpen:s,contextMenuPosition:c,handleBeforeContextMenu:u,handleContextMenu:m,handleContextMenuClose:h,handleContextMenuHide:v}}},3394:(e,t,n)=>{n.d(t,{Z:()=>i});var a=n(4050);const r={width:0,left:0,height:0,top:0};function i(e,t,n,i,o){const[s,l]=(0,a.eJ)("right"),[c,d]=(0,a.eJ)("bottom"),[u,m]=(0,a.eJ)(),[h,v]=(0,a.eJ)(),[f,p]=(0,a.eJ)(!1),[g,Z]=(0,a.eJ)(""),[E,P]=(0,a.eJ)("opacity: 0;");return(0,a.d4)((()=>{const a=t();if(!e||!a)return;let{x:s,y:c}=e;const u=s,h=c,f=i(),g=n(),{extraPaddingX:E=0,extraTopPadding:y=0,marginSides:C=0,extraMarginTop:b=0}=(null==o?void 0:o())||{},N=f?parseInt(getComputedStyle(f).marginTop,10)+b:void 0,w=f?{width:f.offsetWidth,height:f.offsetHeight+N}:r,k=g?g.getBoundingClientRect():r;let I,S;s+w.width+E0?(I="right",s-=3):(I="left",s=16),l(I),C&&"right"===I&&s+E+C>=k.width+k.left&&(s-=C),C&&"left"===I&&(s+E+C+w.width>=k.width+k.left?s-=C:s-C<=0&&(s+=C)),c+w.height{n.d(t,{Z:()=>i});var a=n(4050),r=n(9118);function i(e,t,n){return(0,a.Ye)((()=>(0,r.Ds)((e=>e()),e,!t,!n)),[e,t,n])}},5790:(e,t,n)=>{n.d(t,{Z:()=>o});var a=n(4050),r=n(3555),i=n(9118);const o=(e,t,n,o)=>{const{loadMessage:s}=(0,r.Sv)(),l=(0,a.Ye)((()=>{const n=(0,i.P2)(s,500,!0);return()=>{n({chatId:e,messageId:t,replyOriginForId:o})}}),[s,e,t,o]);(0,a.d4)((()=>{t&&!n&&l()}))}},5616:(e,t,n)=>{n.d(t,{d7:()=>i,mE:()=>s,yi:()=>o});var a=n(4050),r=n(6974);function i(e){const[t,n]=(0,a.eJ)((0,r.gO)(e));return(0,a.d4)((()=>(0,r.M2)(e,n)),[e]),t}function o(){const[e,t]=(0,a.eJ)((0,r.wC)());return(0,a.d4)((()=>(0,r.O6)(t)),[]),e}function s(){const[e,t]=(0,a.eJ)((0,r.Yz)());return(0,a.d4)((()=>(0,r.r_)(t)),[]),e}},8781:(e,t,n)=>{n.d(t,{Z:()=>r});var a=n(4050);const r=(e,t)=>{(0,a.d4)((()=>{if(e&&!t)return e.addEventListener("wheel",n,{passive:!0}),()=>{e.removeEventListener("wheel",n)};function n(t){t.deltaX||(e.scrollLeft+=t.deltaY/4)}}),[e,t])}},2515:(e,t,n)=>{n.d(t,{Z:()=>i});var a=n(4050),r=n(7361);function i(e,t,n){(0,a.d4)((()=>{t?r.wB||setTimeout((()=>{requestAnimationFrame((()=>{e.current&&e.current.focus()}))}),500):(e.current&&e.current.blur(),n&&setTimeout(n,300))}),[e,t,n])}},3657:(e,t,n)=>{n.d(t,{Op:()=>l,S1:()=>o,_N:()=>s});var a=n(4050),r=n(9118),i=n(8674);function o(e,t){let{rootRef:n,throttleMs:o,debounceMs:s,shouldSkipFirst:l,margin:c,threshold:d,isDisabled:u}=e;const m=(0,a.sO)(),h=(0,a.sO)(),v=(0,a.sO)(0),f=(0,a.sO)();h.current=t;const p=(0,a.I4)((()=>{v.current++}),[]),g=(0,a.I4)((()=>{v.current&&(v.current--,!v.current&&f.current&&(f.current(),f.current=void 0))}),[]);return(0,i.ZP)(p,g),(0,a.d4)((()=>{if(!u)return()=>{m.current&&(m.current.observer.disconnect(),m.current.callbacks.clear(),m.current=void 0)}}),[u]),{observe:(0,a.I4)(((e,t)=>{m.current||function(){const e=new Map,t=new Map,a=()=>{const n=Array.from(t.values());n.forEach((t=>{const a=e.get(t.target);a&&a(t,n)})),h.current&&h.current(n),t.clear()},i=o?r.P2:s?r.Ds:void 0,u=i?i(a,o||s,!l):a,p=new IntersectionObserver((e=>{e.forEach((e=>{t.set(e.target,e)})),v.current?f.current=()=>{u()}:u()}),{root:n.current,rootMargin:c?`${c}px`:void 0,threshold:d});m.current={observer:p,callbacks:e}}();const a=m.current;return a.observer.observe(e),t&&a.callbacks.set(e,t),()=>{t&&a.callbacks.delete(e),a.observer.unobserve(e)}}),[u]),freeze:p,unfreeze:g}}function s(e,t,n){(0,a.d4)((()=>t?t(e.current,n):void 0),[])}function l(e,t,n){const[r,i]=(0,a.eJ)(!t);return s(e,t,(e=>{i(e.isIntersecting),n&&n(e)})),r}},2357:(e,t,n)=>{n.d(t,{Z:()=>r});var a=n(4050);const r=function(e,t){let n=arguments.length>2&&void 0!==arguments[2]&&arguments[2];const r=(0,a.sO)(e);(0,a.bt)((()=>{r.current=e}),[e]),(0,a.d4)((()=>{if(void 0===t)return;const e=setInterval((()=>r.current()),t);return n||r.current(),()=>clearInterval(e)}),[t,n])}},2645:(e,t,n)=>{n.d(t,{Z:()=>i});var a=n(4050),r=n(7204);const i=(e,t,n)=>{const i=(0,r.Z)(t);return(0,a.bt)((()=>e(i||[])),t,n)}},692:(e,t,n)=>{n.d(t,{Z:()=>r});var a=n(1212);function r(e){const t=Boolean(e),{transitionClassNames:n}=(0,a.Z)(t,void 0,t,"slow");return n}},2566:(e,t,n)=>{n.d(t,{Z:()=>m});var a=n(4050),r=n(7361),i=n(6137),o=n(9118),s=n(647),l=n(5326),c=n(6926);const d={},u=()=>{const e=(0,a.sO)();return e.current||(e.current=(0,c.Z)(d),d[e.current]=!0),e.current};function m(e){let t=arguments.length>1&&void 0!==arguments[1]&&arguments[1],n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:i.IU.BlobUrl,c=arguments.length>3?arguments[3]:void 0,d=arguments.length>4?arguments[4]:void 0,m=arguments.length>5&&void 0!==arguments[5]&&arguments[5];const h=e?s.UV(e):void 0,v=n===i.IU.Stream||r.I_&&n===i.IU.Progressive,f=(0,l.Z)(),p=u(),[g,Z]=(0,a.eJ)(h&&!v?1:0),E=(0,a.sO)(),P=(0,a.Ye)((()=>(0,o.P2)((e=>{E.current&&(!d||Date.now()-E.current>d)&&Z(e)}),500,!0)),[d]);return(0,a.d4)((()=>{!t&&e&&(h?v&&setTimeout((()=>{Z(.75)}),1500):(Z(0),E.current&&s.cC(P),E.current=Date.now(),s.he(e,n,m,P,p).then((()=>{const e=Date.now()-E.current;E.current=void 0,!d||e>=d?f():setTimeout(f,d-e)}))))}),[t,e,h,n,c,f,v,d,P,m,p]),(0,a.d4)((()=>{t&&E.current&&(s.cC(P),Z(0),E.current=void 0)}),[P,t]),(0,a.d4)((()=>()=>{e&&s.Iq(e,p)}),[p,e]),{mediaData:h,loadProgress:g}}},6503:(e,t,n)=>{n.d(t,{Z:()=>o});var a=n(4050),r=n(7361);let i;function o(e,t){let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:250,o=arguments.length>3&&void 0!==arguments[3]&&arguments[3];const s=(0,a.sO)(!1),l=(0,a.I4)((()=>{s.current=!0}),[]);(0,a.d4)((()=>{i&&(clearTimeout(i),i=void 0),!e||r.$b||o||(i=window.setTimeout((()=>{s.current||t()}),2*n))}),[o,e,n,t]);const c=(0,a.I4)((()=>{s.current=!0}),[]),d=(0,a.I4)((()=>{s.current=!1,i&&(clearTimeout(i),i=void 0),i=window.setTimeout((()=>{s.current||t()}),n)}),[n,t]);return[c,d,l]}},2678:(e,t,n)=>{n.d(t,{Z:()=>s});var a=n(4050),r=n(7204),i=n(5326),o=n(9290);function s(e,t){const n=(0,r.Z)(e,!0),s=(0,a.sO)(),l=(0,i.Z)(),c=null!=e,d=null!=n;return c&&s.current&&(clearTimeout(s.current),s.current=void 0),(0,o.Z)((()=>{t&&!c&&d&&!s.current&&(s.current=window.setTimeout((()=>{s.current=void 0,l()}),t))}),[e]),s.current&&t&&!c?n:e}},1090:(e,t,n)=>{n.d(t,{Z:()=>r});var a=n(4050);function r(e,t){const n=(0,a.sO)(e),[r,i]=(0,a.eJ)(t);return[r,(0,a.I4)((e=>{i((t=>n.current(t,e)))}),[])]}},3057:(e,t,n)=>{n.d(t,{Z:()=>u});var a=n(4050),r=n(5116),i=n(3716),o=n(790),s=n(9107),l=n(9203),c=n(8778);const d=(0,a.X$)((e=>{const{isOpen:t}=e,n=(0,c.Z)(l.gl.Extra,"CalendarModal",!t);return n?a.ZP.createElement(n,e):void 0})),u=(e,t)=>{const n=(0,s.Z)(),[l,c]=(0,a.eJ)(),u=(0,a.I4)((function(e){let t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];const{serverTimeOffset:n}=(0,r.Rd)(),a=Math.round(Math.max(e.getTime(),Date.now()+6e4)/1e3)+(t?0:n);null==l||l(a),c(void 0)}),[l]),m=(0,a.I4)((()=>{u(new Date(1e3*i.t4),!0)}),[u]),h=(0,a.I4)((()=>{c(void 0),null==t||t()}),[t]),v=(0,a.I4)((e=>{c((()=>e))}),[]),f=new Date;f.setSeconds(0),f.setMilliseconds(0);const p=new Date;return p.setFullYear(p.getFullYear()+1),[v,a.ZP.createElement(d,{isOpen:Boolean(l),withTimePicker:!0,selectedAt:f.getTime(),maxAt:(0,o._F)(p),isFutureMode:!0,secondButtonLabel:e?n("Schedule.SendWhenOnline"):void 0,onClose:h,onSubmit:u,onSecondButtonClick:e?m:void 0})]}},6389:(e,t,n)=>{n.d(t,{Z:()=>s});var a=n(4050),r=n(3555),i=n(3716),o=n(9118);const s=(e,t)=>(0,a.Ye)((()=>(0,o.P2)((n=>{(0,r.Sv)().sendMessageAction({chatId:e,threadId:t,action:n})}),i.o_)),[e,t])},971:(e,t,n)=>{n.d(t,{Y:()=>i});var a=n(4050),r=n(9290);function i(e){const t=(0,a.sO)(e);return(0,r.Z)((()=>{t.current=e}),[e]),t}},8183:(e,t,n)=>{n.d(t,{Z:()=>r});var a=n(4050);const r=function(e,t){const n=(0,a.sO)(e);(0,a.bt)((()=>{n.current=e}),[e]),(0,a.d4)((()=>{if("number"!=typeof t)return;const e=setTimeout((()=>n.current()),t);return()=>clearTimeout(e)}),[t])}},6898:(e,t,n)=>{n.d(t,{Z:()=>i});var a=n(4050),r=n(9118);function i(e,t){(0,a.d4)((()=>{const t=e.current;return()=>{t&&(0,r.T2)((()=>{t.pause(),t.src="",t.load()}))}}),t)}},6264:(e,t,n)=>{n.d(t,{Z:()=>i});const a=[1,57,41,21,203,34,97,73,227,91,149,62,105,45,39,137,241,107,3,173,39,71,65,238,219,101,187,87,81,151,141,133,249,117,221,209,197,187,177,169,5,153,73,139,133,127,243,233,223,107,103,99,191,23,177,171,165,159,77,149,9,139,135,131,253,245,119,231,224,109,211,103,25,195,189,23,45,175,171,83,81,79,155,151,147,9,141,137,67,131,129,251,123,30,235,115,113,221,217,53,13,51,50,49,193,189,185,91,179,175,43,169,83,163,5,79,155,19,75,147,145,143,35,69,17,67,33,65,255,251,247,243,239,59,29,229,113,111,219,27,213,105,207,51,201,199,49,193,191,47,93,183,181,179,11,87,43,85,167,165,163,161,159,157,155,77,19,75,37,73,145,143,141,35,138,137,135,67,33,131,129,255,63,250,247,61,121,239,237,117,29,229,227,225,111,55,109,216,213,211,209,207,205,203,201,199,197,195,193,48,190,47,93,185,183,181,179,178,176,175,173,171,85,21,167,165,41,163,161,5,79,157,78,154,153,19,75,149,74,147,73,144,143,71,141,140,139,137,17,135,134,133,66,131,65,129,1],r=[0,9,10,10,14,12,14,14,16,15,16,15,16,15,15,17,18,17,12,18,16,17,17,19,19,18,19,18,18,19,19,19,20,19,20,20,20,20,20,20,15,20,19,20,20,20,21,21,21,20,20,20,21,18,21,21,21,21,20,21,17,21,21,21,22,22,21,22,22,21,22,21,19,22,22,19,20,22,22,21,21,21,22,22,22,18,22,22,21,22,22,23,22,20,23,22,22,23,23,21,19,21,21,21,23,23,23,22,23,23,21,23,22,23,18,22,23,20,22,23,23,23,21,22,20,22,21,22,24,24,24,24,24,22,21,24,23,23,24,21,24,23,24,22,24,24,22,24,24,22,23,24,24,24,20,23,22,23,24,24,24,24,24,24,24,23,21,23,22,23,24,24,24,22,24,24,24,23,22,24,24,25,23,25,25,23,24,25,25,24,22,25,25,25,24,23,24,25,25,25,25,25,25,25,25,25,25,25,25,23,25,23,24,25,25,25,25,25,25,25,25,25,24,22,25,25,23,25,25,20,24,25,24,25,25,22,24,25,24,25,24,25,25,24,25,25,25,25,22,25,25,25,24,25,24,25,18];function i(e,t,n,i,o,s,l){if(Number.isNaN(s)||s<1)return;s|=0,Number.isNaN(l)&&(l=1),(l|=0)>3&&(l=3),l<1&&(l=1);const c=e.getImageData(t,n,i,o),d=c.data;let u,m,h,v,f,p,g,Z,E,P,y,C,b=i-1,N=o-1,w=s+1,k=[],I=[],S=[],T=a[s],M=r[s],x=[],L=[];for(;l-- >0;){for(C=y=0,f=0;fb?b:p)<<2),u+=d[g++],m+=d[g++],h+=d[g++];for(v=0;v0?g<<2:0),Z=C+x[v],E=C+L[v],u+=d[Z++]-d[E++],m+=d[Z++]-d[E++],h+=d[Z++]-d[E++],y++;C+=i<<2}for(v=0;vN?0:i,u+=k[P],m+=I[P],h+=S[P];for(y=v<<2,f=0;f>>M,d[y+1]=m*T>>>M,d[y+2]=h*T>>>M,0==v&&(x[f]=((g=f+w)0?g*i:0),Z=v+x[f],E=v+L[f],u+=k[Z]-k[E],m+=I[Z]-I[E],h+=S[Z]-S[E],y+=i<<2}}e.putImageData(c,t,n)}},396:(e,t,n)=>{n.d(t,{An:()=>P,Es:()=>p,z2:()=>g});var a=n(3555),r=n(1713),i=n(7361),o=n(4753),s=n(5266),l=n(5806),c=n(9118),d=n(1192);const u=new Map;let m,h=[],v=[];function f(e,t){const n=m&&u.get(m);n&&(n.audio.pause(),n.audio.currentTime=0,n.onTrackChange&&n.onTrackChange());const i=E(e,(0,a.Rd)().audioPlayer.origin||r.Cr.Inline,t);if(!i)return;if(!u.has(i))return void(0,a.Sv)().openAudioPlayer((0,l.Ak)(y(i).messageKey));const s=u.get(i);s.onForcePlay&&s.onForcePlay(),m=i,s.audio.src&&(0,o.Z)(s.audio)}function p(){const e=m&&u.get(m);e&&e.audio.pause()}function g(e,t,n,p,g){if(!u.has(e)){const n=function(e,t,n,a){const r=new Audio;function i(t){return n=>{u.has(e)&&((0,s.z)(r)||u.get(e).handlers.forEach((e=>{e(t,n)})))}}return r.addEventListener("timeupdate",i("onTimeUpdate")),r.addEventListener("play",i("onPlay")),r.addEventListener("pause",i("onPause")),r.addEventListener("loadstart",i("onLoadStart")),r.addEventListener("loadeddata",i("onLoadedData")),r.addEventListener("playing",i("onPlaying")),r.addEventListener("ended",(()=>{u.has(e)&&((0,s.z)(r)||f(e))})),{audio:r,type:t,proxy:new Proxy(r,{get:(e,t)=>e[t]}),handlers:[],onForcePlay:n,onTrackChange:a}}(e,t,p,g);u.set(e,n),function(e,t){"audio"!==e.type||v.includes(t)||(v.push(t),v.sort(C)),"voice"!==e.type||h.includes(t)||(h.push(t),h.sort(C))}(n,e)}const{audio:Z,proxy:P,handlers:b}=u.get(e);return b.push(n),{play(n){if(!Z.paused)return;const c=m&&u.get(m);c&&m!==e&&(c.audio.pause(),c.audio.currentTime=0,(0,s.z)(c.audio)&&(c.audio.dataset.preventPlayAfterPatch="true"),c.onTrackChange&&c.onTrackChange()),m=e,Z.src||(Z.src=n,Z.preload="auto",n.includes("/progressive/")&&i.s$&&(delete Z.dataset.preventPlayAfterPatch,(0,s.B)(Z))),(0,o.Z)(Z),function(e,t){var n;if((0,a.Rd)().globalSearch.currentContent===r.nJ.Music)return;const{chatId:i}=(0,l.Ak)(y(t).messageKey),o=null===(n=(0,d.Bt)((0,a.Rd)()))||void 0===n?void 0:n.chatId,s=e=>e.startsWith(`msg${i}`)||o&&e.startsWith(`msg${o}`);"audio"===e&&(v=v.filter(s)),"voice"===e&&(h=h.filter(s))}(t,e)},pause(){m===e&&Z.pause()},stop(){if(m===e){const e=Z.src;Z.pause(),(0,c.T2)((()=>{Z.src="",Z.src=e}))}},setCurrentTime(t){m===e&&(Z.fastSeek?Z.fastSeek(t):Z.currentTime=t)},setVolume(t){m===e&&(Z.volume=t,Z.muted=!1)},setPlaybackRate(t){m===e&&(Z.playbackRate=t)},toggleMuted(e){Z.muted=void 0===e?!Z.muted:e},proxy:P,requestNextTrack(){f(e)},isLast:()=>!E(e,(0,a.Rd)().audioPlayer.origin),isFirst:()=>!E(e,(0,a.Rd)().audioPlayer.origin,!0),requestPreviousTrack(){f(e,!0)},destroy(){let t=arguments.length>0&&void 0!==arguments[0]&&arguments[0];const a=u.get(e);a&&(a.handlers=a.handlers.filter((e=>e!==n)),a.handlers.length||(a.audio.pause(),u.delete(e),t&&function(e,t){const n=e=>e!==t;"audio"===e.type&&(v=v.filter(n)),"voice"===e.type&&(h=h.filter(n))}(a,e),e===m&&(m=void 0)))}}}function Z(e){switch(e.type){case"audio":return v;case"voice":return h;default:return}}function E(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:r.Cr.Inline,n=arguments.length>2?arguments[2]:void 0;const a=u.get(e),i=Z(a);if(!i)return;if(t===r.Cr.Search){const t=i.indexOf(e);if(t<0)return;return i[t+(n?-1:1)]}const{chatId:o}=(0,l.Ak)(y(e).messageKey),s=i.filter((e=>e.startsWith(`msg${o}`))),c=s.indexOf(e);if(c<0)return;let d=t===r.Cr.Inline?-1:1;return n&&(d*=-1),s[c+d]}function P(e){return`${(0,l.Tp)(e)}-${e.date}`}function y(e){return{messageKey:e.match(/^msg(-?\d+)-(\d+)/)[0],date:Number(e.split("-").pop())}}function C(e,t){if(!e||!t)return 0;const{date:n,messageKey:a}=y(e),{date:r,messageKey:i}=y(t),o=r-n;return 0===o?i.localeCompare(a):o}},1174:(e,t,n)=>{n.d(t,{eM:()=>r,sf:()=>c,vJ:()=>i});var a=n(7361);let r;!function(e){e[e.Up=0]="Up",e[e.Down=1]="Down",e[e.Left=2]="Left",e[e.Right=3]="Right"}(r||(r={}));const i=20;function o(e,t){return t?Math.sqrt((t.pageX-e.pageX)**2+(t.pageY-e.pageY)**2):0}function s(e,t){return{x:(e.pageX+t.pageX)/2,y:(e.pageY+t.pageY)/2}}let l=0;function c(e,t){let n,c,d=!1,u=!1,m=0,h={x:window.innerWidth/2,y:window.innerHeight/2};function v(e){if(!t.excludedClosestSelector||!e.target.matches(t.excludedClosestSelector)&&!e.target.closest(t.excludedClosestSelector)){if(n=e,"mousedown"===e.type)t.onDrag&&e.preventDefault(),document.addEventListener("mousemove",p),document.addEventListener("mouseup",f);else if("touchstart"===e.type){const t=e.target;t.addEventListener("touchmove",p,{passive:!0}),t.addEventListener("touchend",f),t.addEventListener("touchcancel",f),"touches"in e&&(void 0===e.pageX&&(e.pageX=e.touches[0].pageX),void 0===e.pageY&&(e.pageY=e.touches[0].pageY),2===e.touches.length&&(m=o(e.touches[0],e.touches[1]),h=s(e.touches[0],e.touches[1])))}t.withCursor&&document.body.classList.add("cursor-grabbing"),t.onCapture&&t.onCapture(e)}}function f(e){n&&(t.withCursor&&document.body.classList.remove("cursor-grabbing"),document.removeEventListener("mouseup",f),document.removeEventListener("mousemove",p),n.target.removeEventListener("touchcancel",f),n.target.removeEventListener("touchend",f),n.target.removeEventListener("touchmove",p),a.cj&&t.selectorToPreventScroll&&Array.from(document.querySelectorAll(t.selectorToPreventScroll)).forEach((e=>{e.style.overflow=""})),e&&(d?t.onRelease&&t.onRelease(e):"mouseup"===e.type&&(t.onDoubleClick&&Date.now()-l<300?t.onDoubleClick(e,{centerX:n.pageX,centerY:n.pageY}):!t.onClick||"button"in e&&0!==e.button||t.onClick(e),l=Date.now()))),d=!1,u=!1,m=0,c=void 0,h={x:window.innerWidth/2,y:window.innerHeight/2},n=void 0}function p(e){if(n){if("touchmove"===e.type&&"touches"in e&&(void 0===e.pageX&&(e.pageX=e.touches[0].pageX),void 0===e.pageY&&(e.pageY=e.touches[0].pageY),t.onZoom&&m>0&&2===e.touches.length)){const n=o(e.touches[0],e.touches[1]),a=s(e.touches[0],e.touches[1]),r=a.x-h.x,i=a.y-h.y,l=n/m;t.onZoom(e,{zoomFactor:l,initialCenterX:h.x,initialCenterY:h.y,dragOffsetX:r,dragOffsetY:i,currentCenterX:a.x,currentCenterY:a.y}),1!==l&&(d=!0)}const l=e.pageX-n.pageX,v=e.pageY-n.pageY;(Math.abs(l)>=15||Math.abs(v)>=15)&&(d=!0);let f=!1;t.onDrag&&(t.onDrag(e,n,{dragOffsetX:l,dragOffsetY:v}),f=!0),t.onSwipe&&!u&&(u=function(e,n,o){if(a.cj){const t=e.touches[0].pageX;if(t<=i||t>=window.innerWidth-i)return!1}const s=Math.abs(n),l=Math.abs(o);if(n&&o&&Math.max(s,l)/Math.min(s,l)<2)return!1;let d;if(s>=50?d="x":l>=50&&(d="y"),!d)return!1;if(c){if(c!==d)return!1}else c=d;return function(e,t,n,a,i){return"x"===t?i(e,n<0?r.Left:r.Right):"y"===t&&i(e,a<0?r.Up:r.Down)}(e,d,n,o,t.onSwipe)}(e,l,v),f=u),a.cj&&f&&t.selectorToPreventScroll&&Array.from(document.querySelectorAll(t.selectorToPreventScroll)).forEach((e=>{e.style.overflow="hidden"}))}}return e.addEventListener("mousedown",v),e.addEventListener("touchstart",v,{passive:!t.isNotPassive}),()=>{f(),e.removeEventListener("touchstart",v),e.removeEventListener("mousedown",v)}}},1279:(e,t,n)=>{function a(e,t,n){i("transitionend",e,t,n)}function r(e,t,n){i("animationend",e,t,n)}function i(e,t,n,a){let r=!1;t.addEventListener(e,(function i(o){r||o.target!==o.currentTarget||a&&(o instanceof TransitionEvent&&o.propertyName===a||o instanceof AnimationEvent&&o.animationName===a)||(r=!0,t.removeEventListener(e,i),setTimeout((()=>{n()}),50))}))}n.d(t,{L:()=>a,f:()=>r})},3570:(e,t,n)=>{function a(e,t){return t-Math.floor(t/e)*e}n.d(t,{Z:()=>a})},539:(e,t,n)=>{n.d(t,{N:()=>m,Z:()=>u});var a=n(3555),r=n(1713),i=n(3716),o=n(7361),s=n(8674),l=n(9933),c=n(9118);let d=!1;function u(e,t,n){let o=arguments.length>3&&void 0!==arguments[3]?arguments[3]:0,s=arguments.length>4&&void 0!==arguments[4]?arguments[4]:i.V$,l=arguments.length>5?arguments[5]:void 0,c=arguments.length>6?arguments[6]:void 0,d=arguments.length>7?arguments[7]:void 0;const u=h(e,t,s,l);l!==r.fo.Static?((0,a.Rd)().settings.byKey.animationLevel===i.oB&&(c=0),v(e,t,u,n,o,c,d)):v(e,t,u,n,o,0)}function m(){return d}function h(e,t){let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:i.V$,a=arguments.length>3?arguments[3]:void 0;const{offsetTop:o}=t,{scrollTop:s}=e;if(void 0===a){const t=o-e.scrollTop;if(t<-n)return s+(t+n);if(t>n)return s+(t-n)}else{if(a===r.fo.Up)return o+n;if(a===r.fo.Down)return Math.max(0,o-n)}return s}function v(e,t,n,a){let r=arguments.length>4&&void 0!==arguments[4]?arguments[4]:0,u=arguments.length>5?arguments[5]:void 0,m=arguments.length>6?arguments[6]:void 0;const{offsetTop:h,offsetHeight:v}=t,{scrollTop:g,offsetHeight:Z,scrollHeight:E}=e,P=m&&e.dataset.normalHeight?Number(e.dataset.normalHeight):Z;let y;switch(g!==n&&(e.scrollTop=n),a){case"start":y=h-r-n+(o.wZ?1:0);break;case"end":y=h+v+r-(n+P);break;case"nearest":case"center":case"centerOrTop":y=v0){const e=E-(n+P);y=Math.min(y,e)}if(0===y)return;const C=n+y;if(0===u)return void(e.scrollTop=C);d=!0;const b=Math.abs(y),N=b{(0,l.cK)((()=>{const t=Math.min((Date.now()-k)/w,1),n=y*(1-N(t));return e.scrollTop=Math.round(C-n),d=t<1,d||I(),d}))}))}function f(e){return 1-(1-e)**5}function p(e){return 1-(1-e)**3.5}},1367:(e,t,n)=>{n.d(t,{Z:()=>s});var a=n(3555),r=n(3716),i=n(9933),o=n(9118);function s(e,t){let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:300;(0,a.Rd)().settings.byKey.animationLevel===r.oB&&(n=0),l(e,t,n)}function l(e,t,n){const a="rtl"===e.getAttribute("dir"),{scrollLeft:r,offsetWidth:s,scrollWidth:l}=e;let c=t-r;if(c<0){const e=-r*(a?-1:1);c=Math.max(c,e)}else if(c>0){const e=l-(r+s);c=Math.min(c,e)}if(0===c)return;const d=r+c;if(0===n)return void(e.scrollLeft=d);const u=Date.now();(0,o.T2)((()=>{(0,i.jt)((()=>{const t=Math.min((Date.now()-u)/n,1),a=c*(1-function(e){return 1-(1-e)**3.5}(t));return e.scrollLeft=Math.round(d-a),t<1}))}))}},5723:(e,t,n)=>{n.d(t,{Z:()=>r});var a=n(7361);function r(e,t,n){if(!t&&e===document.activeElement)return;const r=window.getSelection(),i=document.createRange(),o=e.lastChild||e;a.$b||n||o&&o.nodeValue?(i.selectNodeContents(n?e:o),i.collapse(!1),r.removeAllRanges(),r.addRange(i)):e.focus()}},7529:(e,t,n)=>{function a(e){const t="key"in e?e.key:e.code;return t.startsWith("Key")?t.slice(3).toLowerCase():t}n.d(t,{Z:()=>a})},998:(e,t,n)=>{function a(){const e=window.getSelection();let t=e&&e.rangeCount?e.getRangeAt(0).cloneContents():void 0;if(!t||0===t.childElementCount)return;const n=Array.from(t.children).reduce(((e,t)=>1===t.nodeType&&t.classList.contains("message-date-group")?Array.from(t.querySelectorAll(".Message")).reduce(((e,t)=>e.concat(Number(t.dataset.messageId))),e):1===t.nodeType&&t.classList.contains("Message")?e.concat(Number(t.dataset.messageId)):e),[]);for(;t.firstChild;)t.removeChild(t.firstChild);return t=void 0,n}n.d(t,{Z:()=>a})},4532:(e,t,n)=>{n.d(t,{Ay:()=>s,N:()=>r,NS:()=>c,Of:()=>d,Ym:()=>i,pC:()=>l});const a={play:void 0,pause:void 0,seekbackward:void 0,seekforward:void 0,previoustrack:void 0,nexttrack:void 0,stop:void 0,seekTo:void 0};function r(e,t){const{mediaSession:n}=window.navigator;n?(e&&i(e),t&&o(t)):console.warn("MediaSession API not supported in this browser")}function i(e){const{mediaSession:t}=window.navigator;t&&(t.metadata=null!=e?e:null)}function o(e){const{mediaSession:t}=window.navigator;t&&Object.entries({...a,...e}).forEach((e=>{let[n,a]=e;try{t.setActionHandler(n,a)}catch(e){}}))}function s(){const{mediaSession:e}=window.navigator;var t;e&&(e.metadata=null,o(a),e.playbackState&&(e.playbackState="none"),null===(t=e.setPositionState)||void 0===t||t.call(e))}function l(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"none";const{mediaSession:t}=window.navigator;t&&t.playbackState&&(t.playbackState=e)}function c(e){var t;if(!e||void 0===e.position||void 0===e.duration)return;e.position=Math.min(e.position,e.duration);const{mediaSession:n}=window.navigator;null==n||null===(t=n.setPositionState)||void 0===t||t.call(n,e)}function d(e){let{title:t,artist:n,album:a,artwork:r}=e;if("MediaMetadata"in window)return new window.MediaMetadata({title:t,artist:n,album:a,artwork:r})}},3099:(e,t,n)=>{n.d(t,{Z:()=>o});var a=n(6137),r=n(7361);const i={B:a.Vv.Bold,STRONG:a.Vv.Bold,I:a.Vv.Italic,EM:a.Vv.Italic,U:a.Vv.Underline,S:a.Vv.Strike,STRIKE:a.Vv.Strike,DEL:a.Vv.Strike,CODE:a.Vv.Code,PRE:a.Vv.Pre,BLOCKQUOTE:a.Vv.Blockquote};function o(e){const t=document.createElement("div");t.innerHTML=function(e){let t=e.slice(0);return r.op||(t=t.replace(/]+alt="([^"]+)"[^>]*>/gm,"$1")),t=t.replace(/ /g," "),t=t.replace(/
]*)?><\/div>/g,"\n"),t=t.replace(/]*)?>/g,"\n"),t=t.replace(/<\/div>(\s*)
/g,"\n"),t=t.replace(/
/g,"\n"),t=t.replace(/<\/div>/g,""),t=t.replace(/^`{3}(.*[\n\r][^]*?^)`{3}/gm,"
$1
"),t=t.replace(/[`]{3}([^`]+)[`]{3}/g,"
$1
"),t=t.replace(/[`]{1}([^`\n]+)[`]{1}/g,"$1"),t=t.replace(/(^|\s)(?!)(\s|$)/g,"$1$2$3"),t=t.replace(/(^|\s)(?!)(\s|$)/g,"$1$2$3"),t=t.replace(/(^|\s)(?!)(\s|$)/g,"$1$2$3"),t=t.replace(/(^|\s)(?!)(\s|$)/g,`$1$2$3`),t}(e);const n=t.innerText.trim().replace(/\u200b+/g,"");let o=0,s=0;const l=[];function c(e){const{index:t,entity:r}=function(e,t,n){const r=function(e){if(i[e.nodeName])return i[e.nodeName];if("A"===e.nodeName){const t=e;return t.dataset.entityType===a.Vv.MentionName?a.Vv.MentionName:t.dataset.entityType===a.Vv.Url?a.Vv.Url:t.href.startsWith("mailto:")?a.Vv.Email:t.href.startsWith("tel:")?a.Vv.Phone:t.href!==t.textContent?a.Vv.TextUrl:a.Vv.Url}return"SPAN"===e.nodeName?e.dataset.entityType:void 0}(e);if(!r||!e.textContent)return{index:n,entity:void 0};const o=t.indexOf(e.textContent,n),s=o>=0?o:n,l=t.substring(0,s).length,{length:c}=t.substring(s,s+e.textContent.length);let d,u;return r===a.Vv.TextUrl&&(d=e.href),r===a.Vv.MentionName&&(u=e.dataset.userId),{index:s,entity:{type:r,offset:l,length:c,...d&&{url:d},...u&&{userId:u}}}}(e,n,o);r?(o=t,l.push(r)):e.textContent&&(o+=e.textContent.length),e.hasChildNodes()&&s<=3&&(s+=1,Array.from(e.childNodes).forEach(c))}return Array.from(t.childNodes).forEach((e=>{s=1,c(e)})),{text:n,entities:l.length?l:void 0}}},5266:(e,t,n)=>{function a(e){e.dataset.patchedForSafari||(e.addEventListener("play",(()=>{const t=e.currentTime;e.dataset.patchForSafariInProgress="true",e.addEventListener("progress",(function n(){e.buffered.length&&(e.currentTime=e.duration-1,e.addEventListener("progress",(()=>{delete e.dataset.patchForSafariInProgress,e.currentTime=t,e.paused&&!e.dataset.preventPlayAfterPatch&&e.play()}),{once:!0}),e.removeEventListener("progress",n))}))}),{once:!0}),e.dataset.patchedForSafari="true")}function r(e){return Boolean(e.dataset.patchForSafariInProgress)}n.d(t,{B:()=>a,z:()=>r})},3227:(e,t,n)=>{n.d(t,{Z:()=>a});const a=e=>{e.stopPropagation(),e.preventDefault()}},5655:(e,t,n)=>{let a;function r(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"*",t=arguments.length>1?arguments[1]:void 0,n=arguments.length>2&&void 0!==arguments[2]&&arguments[2];a||(a=document.createElement("input"),a.setAttribute("type","file")),a.setAttribute("accept",e),n?a.removeAttribute("multiple"):a.setAttribute("multiple","multiple"),a.onchange=null,a.value="",a.onchange=t,a.click()}n.d(t,{g:()=>r})}}]); +//# sourceMappingURL=13.c2828ad8a236049343ac.js.map \ No newline at end of file diff --git a/dist/13.c2828ad8a236049343ac.js.map b/dist/13.c2828ad8a236049343ac.js.map new file mode 100644 index 000000000..4140430a7 --- /dev/null +++ b/dist/13.c2828ad8a236049343ac.js.map @@ -0,0 +1 @@ +{"version":3,"file":"13.c2828ad8a236049343ac.js","mappings":"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GAAI,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,GAAI,IAAK,GAAI,GAAI,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,GAAI,GAAI,IAAK,IAAK,GAAI,IAAK,IAAK,EAAG,GAAI,IAAK,GAAI,IAAK,IAAK,GAAI,GAAI,IAAK,GAAI,IAAK,GAAI,IAAK,IAAK,GAAI,IAAK,IAAK,IAAK,IAAK,GAAI,IAAK,IAAK,IAAK,GAAI,IAAK,GAAI,IAAK,GAE5qCC,EAAY,CAAC,EAAG,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,IAElgC,SAASC,EAAiBC,EAASC,EAAOC,EAAOjjD,EAAO2C,EAAQa,EAAQm9B,GACrF,GAAIhQ,OAAOuyB,MAAM1/C,IAAWA,EAAS,EAAG,OAExCA,GAAU,EAENmtB,OAAOuyB,MAAMviB,KAAaA,EAAa,IAC3CA,GAAc,GACG,IAAGA,EAAa,GAC7BA,EAAa,IAAGA,EAAa,GAEjC,MAAMwiB,EAAYJ,EAAQK,aAAaJ,EAAOC,EAAOjjD,EAAO2C,GAEtD0gD,EAASF,EAAUp+C,KAEzB,IAAIu+C,EACAC,EACAC,EACAlgD,EACAC,EACAN,EACA27B,EACA6kB,EACAC,EACAC,EACAC,EACAC,EACAC,EAAK9jD,EAAQ,EACb+jD,EAAKphD,EAAS,EACdqhD,EAAOxgD,EAAS,EAEhBygD,EAAI,GACJC,EAAI,GACJ1lB,EAAI,GAEJ2lB,EAAUvB,EAAUp/C,GACpB4gD,EAAUvB,EAAUr/C,GAEpB6gD,EAAO,GACPC,EAAO,GAEX,KAAO3jB,KAAe,GAAG,CAGvB,IAFAkjB,EAAKD,EAAK,EAELrgD,EAAI,EAAGA,EAAIZ,EAAQY,IAAK,CAK3B,IAJA+/C,EAAOD,EAAOQ,GAAMG,EACpBT,EAAOF,EAAOQ,EAAK,GAAKG,EACxBR,EAAOH,EAAOQ,EAAK,GAAKG,EAEnB/gD,EAAI,EAAGA,GAAKO,EAAQP,IACvB27B,EAAIilB,IAAQ5gD,EAAI6gD,EAAKA,EAAK7gD,IAAO,GACjCqgD,GAAQD,EAAOzkB,KACf2kB,GAAQF,EAAOzkB,KACf4kB,GAAQH,EAAOzkB,KAGjB,IAAKt7B,EAAI,EAAGA,EAAItD,EAAOsD,IACrB2gD,EAAEL,GAAMN,EACRY,EAAEN,GAAML,EACR/kB,EAAEolB,GAAMJ,EAEC,GAALjgD,IACF8gD,EAAK/gD,KAAOs7B,EAAIt7B,EAAI0gD,GAAQF,EAAKllB,EAAIklB,IAAO,EAC5CQ,EAAKhhD,IAAOs7B,EAAIt7B,EAAIE,GAAU,EAAIo7B,GAAK,EAAI,GAG7C6kB,EAAKI,EAAKQ,EAAK/gD,GACfogD,EAAKG,EAAKS,EAAKhhD,GAEfggD,GAAQD,EAAOI,KAAQJ,EAAOK,KAC9BH,GAAQF,EAAOI,KAAQJ,EAAOK,KAC9BF,GAAQH,EAAOI,KAAQJ,EAAOK,KAE9BE,IAEFC,GAAO7jD,GAAS,EAGlB,IAAKsD,EAAI,EAAGA,EAAItD,EAAOsD,IAAK,CAM1B,IALAqgD,EAAKrgD,EACLggD,EAAOW,EAAEN,GAAMK,EACfT,EAAOW,EAAEP,GAAMK,EACfR,EAAOhlB,EAAEmlB,GAAMK,EAEV/gD,EAAI,EAAGA,GAAKO,EAAQP,IACvB0gD,GAAO1gD,EAAI8gD,EAAK,EAAI/jD,EACpBsjD,GAAQW,EAAEN,GACVJ,GAAQW,EAAEP,GACVH,GAAQhlB,EAAEmlB,GAIZ,IADAC,EAAKtgD,GAAK,EACLC,EAAI,EAAGA,EAAIZ,EAAQY,IACtB8/C,EAAOO,GAAON,EAAOa,IAAaC,EAClCf,EAAOO,EAAK,GAAML,EAAOY,IAAaC,EACtCf,EAAOO,EAAK,GAAMJ,EAAOW,IAAaC,EAE7B,GAAL9gD,IACF+gD,EAAK9gD,KAAOq7B,EAAIr7B,EAAIygD,GAAQD,EAAKnlB,EAAImlB,GAAM/jD,EAC3CskD,EAAK/gD,IAAOq7B,EAAIr7B,EAAIC,GAAU,EAAIo7B,EAAI5+B,EAAQ,GAGhDyjD,EAAKngD,EAAI+gD,EAAK9gD,GACdmgD,EAAKpgD,EAAIghD,EAAK/gD,GAEd+/C,GAAQW,EAAER,GAAMQ,EAAEP,GAClBH,GAAQW,EAAET,GAAMS,EAAER,GAClBF,GAAQhlB,EAAEilB,GAAMjlB,EAAEklB,GAElBE,GAAM5jD,GAAS,GAKrB+iD,EAAQwB,aAAapB,EAAWH,EAAOC,K,sIC9IzC,MAAMuB,EAAS,IAAIlH,IACnB,IAGImH,EAHAC,EAAwB,GACxBC,EAAwB,GA0D5B,SAASC,EAASjS,EAAkBkS,GAClC,MAAMC,EAAeL,GAAkBD,EAAOvjB,IAAIwjB,GAC9CK,IACFA,EAAa59C,MAAM0Z,QACnBkkC,EAAa59C,MAAMmrC,YAAc,EAC7ByS,EAAa5R,eAAe4R,EAAa5R,iBAG/C,MAEM6R,EAAcC,EAAgBrS,GAFrBt0B,EAAAA,EAAAA,MAAY01B,YAAY1tC,QAAUiG,EAAAA,GAAAA,OAEIu4C,GACrD,IAAKE,EACH,OAGF,IAAKP,EAAOS,IAAIF,GAId,YAFA/9C,EAAAA,EAAAA,MAAak+C,iBAAgBC,EAAAA,EAAAA,IAAgBC,EAAaL,GAAaM,aAKzE,MAAMC,EAAYd,EAAOvjB,IAAI8jB,GAEzBO,EAAUrS,aACZqS,EAAUrS,cAGZwR,EAAiBM,EAEbO,EAAUp+C,MAAMxF,MAClBif,EAAAA,EAAAA,GAAS2kC,EAAUp+C,OAIhB,SAASq+C,IACd,MAAMT,EAAeL,GAAkBD,EAAOvjB,IAAIwjB,GAC9CK,GACFA,EAAa59C,MAAM0Z,QAIhB,SAAS4yB,EACdb,EACAE,EACAvU,EACA2U,EACAC,GAEA,IAAKsR,EAAOS,IAAItS,GAAU,CACxB,MAAM6S,EAxGV,SACE7S,EACA10B,EACAg1B,EACAC,GAEA,MAAMhsC,EAAQ,IAAIwgB,MAElB,SAAS+9B,EAAYhS,GACnB,OAAQtoC,IACDq5C,EAAOS,IAAItS,MAIZ4B,EAAAA,EAAAA,GAAwBrtC,IAI5Bs9C,EAAOvjB,IAAI0R,GAAUG,SAAS/vC,SAASu7B,IACrCA,EAAQmV,EAAWtoC,QAuBzB,OAlBAjE,EAAMygB,iBAAiB,aAAc89B,EAAY,iBACjDv+C,EAAMygB,iBAAiB,OAAQ89B,EAAY,WAC3Cv+C,EAAMygB,iBAAiB,QAAS89B,EAAY,YAC5Cv+C,EAAMygB,iBAAiB,YAAa89B,EAAY,gBAChDv+C,EAAMygB,iBAAiB,aAAc89B,EAAY,iBACjDv+C,EAAMygB,iBAAiB,UAAW89B,EAAY,cAC9Cv+C,EAAMygB,iBAAiB,SAAS,KACzB68B,EAAOS,IAAItS,MAIZ4B,EAAAA,EAAAA,GAAwBrtC,IAI5B09C,EAASjS,OAGJ,CACLzrC,MAAAA,EACA+W,KAAAA,EACA4zB,MAAO,IAAI6T,MAAMx+C,EAAO,CACtB+5B,IAAK,CAAC9M,EAAQvyB,IAAgCuyB,EAAOvyB,KAEvDkxC,SAAU,GACVG,YAAAA,EACAC,cAAAA,GAsDcyS,CAAYhT,EAASE,EAAWI,EAAaC,GAC3DsR,EAAOljB,IAAIqR,EAAS6S,GAwIxB,SAAyBA,EAAc7S,GAClB,UAAf6S,EAAMvnC,MAAqB0mC,EAAWnrC,SAASm5B,KACjDgS,EAAWn4C,KAAKmmC,GAChBgS,EAAWzhB,KAAK0iB,IAGC,UAAfJ,EAAMvnC,MAAqBymC,EAAWlrC,SAASm5B,KACjD+R,EAAWl4C,KAAKmmC,GAChB+R,EAAWxhB,KAAK0iB,IA/IhBC,CAAgBL,EAAO7S,GAEzB,MAAM,MAAEzrC,EAAF,MAAS2qC,EAAT,SAAgBiB,GAAa0R,EAAOvjB,IAAI0R,GAI9C,OAFAG,EAAStmC,KAAK8xB,GAEP,CACLv8B,KAAKL,GACH,IAAKwF,EAAMktC,OAAQ,OACnB,MAAM0Q,EAAeL,GAAkBD,EAAOvjB,IAAIwjB,GAC9CK,GAAgBL,IAAmB9R,IACrCmS,EAAa59C,MAAM0Z,QACnBkkC,EAAa59C,MAAMmrC,YAAc,GAC7BkC,EAAAA,EAAAA,GAAwBuQ,EAAa59C,SACvC49C,EAAa59C,MAAMi2B,QAAQ2oB,sBAAwB,QAEjDhB,EAAa5R,eAAe4R,EAAa5R,iBAG/CuR,EAAiB9R,EAEZzrC,EAAMxF,MACTwF,EAAMxF,IAAMA,EACZwF,EAAM6+C,QAAU,OAEZrkD,EAAI8X,SAAS,kBAAoBwsC,EAAAA,YAC5B9+C,EAAMi2B,QAAQ2oB,uBACrBG,EAAAA,EAAAA,GAA4B/+C,MAIhCyZ,EAAAA,EAAAA,GAASzZ,GA+Hf,SAAsB+W,EAAqB00B,GAAkB,MAC3D,IAAIt0B,EAAAA,EAAAA,MAAY6nC,aAAaC,iBAAmBC,EAAAA,GAAAA,MAA2B,OAC3E,MAAM,OAAEzmD,IAAWwlD,EAAAA,EAAAA,IAAgBC,EAAazS,GAAS0S,YACnDgB,EAAY,WAAGn8B,EAAAA,EAAAA,KAAyB7L,EAAAA,EAAAA,cAA5B,aAAG,EAAuC1e,OACtD2mD,EAAe9lD,GACnBA,EAAG+vB,WAAY,MAAK5wB,MAAc0mD,GAAgB7lD,EAAG+vB,WAAY,MAAK81B,KAG3D,UAATpoC,IACF0mC,EAAaA,EAAWn4B,OAAO85B,IAGpB,UAATroC,IACFymC,EAAaA,EAAWl4B,OAAO85B,IA3I7BC,CAAa1T,EAAWF,IAG1B/xB,QACM6jC,IAAmB9R,GACrBzrC,EAAM0Z,SAIVoxB,OACE,GAAIyS,IAAmB9R,EAAS,CAE9B,MAAM+B,EAAUxtC,EAAMxF,IACtBwF,EAAM0Z,SAEN+L,EAAAA,EAAAA,KAAQ,KACNzlB,EAAMxF,IAAM,GACZwF,EAAMxF,IAAMgzC,OAKlB1rC,eAAe6rC,GACT4P,IAAmB9R,IACjBzrC,EAAMs/C,SACRt/C,EAAMs/C,SAAS3R,GAEf3tC,EAAMmrC,YAAcwC,IAK1BnB,UAAUM,GACJyQ,IAAmB9R,IACrBzrC,EAAM8sC,OAASA,EACf9sC,EAAMsa,OAAQ,IAIlBmyB,gBAAgB8S,GACVhC,IAAmB9R,IACrBzrC,EAAM+sC,aAAewS,IAIzB7S,YAAYpyB,GAERta,EAAMsa,WADMnhB,IAAVmhB,GACata,EAAMsa,MAEPA,GAIlBqwB,MAAAA,EAEAC,mBACE8S,EAASjS,IAGXh2B,OAAM,KACIqoC,EAAgBrS,GAASt0B,EAAAA,EAAAA,MAAY01B,YAAY1tC,QAG3DqW,QAAO,KACGsoC,EAAgBrS,GAASt0B,EAAAA,EAAAA,MAAY01B,YAAY1tC,QAAQ,GAGnE0rC,uBACE6S,EAASjS,GAAS,IAGpB2B,UAAuC,IAA/BoS,EAA+B,wDACrC,MAAMlB,EAAQhB,EAAOvjB,IAAI0R,GACpB6S,IAILA,EAAM1S,SAAW0S,EAAM1S,SAAStmB,QAAQm6B,GAAMA,IAAMroB,IAE/CknB,EAAM1S,SAASpwC,SAClB8iD,EAAMt+C,MAAM0Z,QACZ4jC,EAAOvG,OAAOtL,GAEV+T,GAgCZ,SAAyBlB,EAAc7S,GACrC,MAAMiU,EAAiBC,GAAgBA,IAAOlU,EAC3B,UAAf6S,EAAMvnC,OACR0mC,EAAaA,EAAWn4B,OAAOo6B,IAGd,UAAfpB,EAAMvnC,OACRymC,EAAaA,EAAWl4B,OAAOo6B,IAtCzBE,CAAgBtB,EAAO7S,GAGrBA,IAAY8R,IACdA,OAAiBpkD,OAO3B,SAAS0mD,EAAcvB,GACrB,OAAQA,EAAMvnC,MACZ,IAAK,QAAS,OAAO0mC,EACrB,IAAK,QAAS,OAAOD,EACrB,QAAS,QA4Cb,SAASM,EAAgBgC,GAA2E,IAAvD3gD,EAAuD,uDAA9CiG,EAAAA,GAAAA,OAAoBu4C,EAA0B,uCAClG,MAAMW,EAAQhB,EAAOvjB,IAAI+lB,GACnBC,EAAQF,EAAcvB,GAC5B,IAAKyB,EAAO,OAEZ,GAAI5gD,IAAWiG,EAAAA,GAAAA,OAAoB,CACjC,MAAMm+B,EAAQwc,EAAMvtC,QAAQstC,GAC5B,GAAIvc,EAAQ,EAAG,OAEf,OAAOwc,EAAMxc,GADKoa,GAAkB,EAAI,IAI1C,MAAM,OAAEllD,IAAWwlD,EAAAA,EAAAA,IAAgBC,EAAa4B,GAAW3B,YACrD6B,EAAYD,EAAMz6B,QAAQhsB,GAAOA,EAAG+vB,WAAY,MAAK5wB,OACrD8qC,EAAQyc,EAAUxtC,QAAQstC,GAChC,GAAIvc,EAAQ,EAAG,OACf,IAAI/sB,EAAYrX,IAAWiG,EAAAA,GAAAA,QAAsB,EAAI,EAErD,OADIu4C,IAAgBnnC,IAAc,GAC3BwpC,EAAUzc,EAAQ/sB,GAGpB,SAASvU,EAAYjD,GAC1B,MAAQ,IAAEihD,EAAAA,EAAAA,IAAcjhD,MAAYA,EAAQI,OAG9C,SAAS8+C,EAAazS,GAGpB,MAAO,CACL0S,WAHiB1S,EAAQliB,MAAM,qBAAsB,GAIrDnqB,KAHWqqB,OAAOgiB,EAAQxU,MAAM,KAAKipB,QAQzC,SAASxB,EAAkByB,EAAeC,GACxC,IAAKD,IAAQC,EAAK,OAAO,EACzB,MAAQhhD,KAAMihD,EAASlC,WAAYmC,GAAWpC,EAAaiC,IACnD/gD,KAAMmhD,EAASpC,WAAYqC,GAAWtC,EAAakC,GACrDn2B,EAAOs2B,EAAUF,EACvB,OAAgB,IAATp2B,EAAau2B,EAAOC,cAAcH,GAAUr2B,I,iEC7V9C,IAAKxT,G,SAAAA,GAAAA,EAAAA,EAAAA,GAAAA,GAAAA,KAAAA,EAAAA,EAAAA,KAAAA,GAAAA,OAAAA,EAAAA,EAAAA,KAAAA,GAAAA,OAAAA,EAAAA,EAAAA,MAAAA,GAAAA,Q,CAAAA,IAAAA,EAAAA,KAyDL,MAAMiqC,EAA4B,GAIzC,SAASC,EAAYC,EAAUtpB,GAC7B,OAAKA,EACEp7B,KAAK2kD,MAAMvpB,EAAEwpB,MAAQF,EAAEE,QAAU,GAAKxpB,EAAEypB,MAAQH,EAAEG,QAAU,GADpD,EAIjB,SAASC,EAAeJ,EAAUtpB,GAChC,MAAO,CACLl7B,GAAIwkD,EAAEE,MAAQxpB,EAAEwpB,OAAS,EACzBzkD,GAAIukD,EAAEG,MAAQzpB,EAAEypB,OAAS,GAI7B,IAAIE,EAAgB,EAEb,SAASl8C,EAAcoR,EAAsBkqB,GAClD,IAAI6gB,EAKAC,EAJAC,GAAW,EACXC,GAAY,EACZC,EAAkB,EAClBC,EAAqB,CAAEnlD,EAAGgiB,OAAOojC,WAAa,EAAGnlD,EAAG+hB,OAAOqjC,YAAc,GAG7E,SAASz8C,EAAUf,GACjB,IAAIo8B,EAAQqhB,0BACTz9C,EAAEgpB,OAAuBzO,QAAQ6hB,EAAQqhB,2BACtCz9C,EAAEgpB,OAAuBhU,QAAQonB,EAAQqhB,yBAF/C,CASA,GAFAR,EAAej9C,EAEA,cAAXA,EAAE8S,KACAspB,EAAQn7B,QACVjB,EAAE2V,iBAGJ9M,SAAS2T,iBAAiB,YAAakhC,GACvC70C,SAAS2T,iBAAiB,UAAWxb,QAChC,GAAe,eAAXhB,EAAE8S,KAAuB,CAGlC,MAAMkW,EAAShpB,EAAEgpB,OACjBA,EAAOxM,iBAAiB,YAAakhC,EAAQ,CAAElQ,SAAS,IACxDxkB,EAAOxM,iBAAiB,WAAYxb,GACpCgoB,EAAOxM,iBAAiB,cAAexb,GAEnC,YAAahB,SACC9K,IAAZ8K,EAAE68C,QACJ78C,EAAE68C,MAAQ78C,EAAEqtC,QAAQ,GAAGwP,YAGT3nD,IAAZ8K,EAAE88C,QACJ98C,EAAE88C,MAAQ98C,EAAEqtC,QAAQ,GAAGyP,OAGA,IAArB98C,EAAEqtC,QAAQ91C,SACZ8lD,EAAkBX,EAAY18C,EAAEqtC,QAAQ,GAAIrtC,EAAEqtC,QAAQ,IACtDiQ,EAAqBP,EAAe/8C,EAAEqtC,QAAQ,GAAIrtC,EAAEqtC,QAAQ,MAK9DjR,EAAQuhB,YACV90C,SAAS+0C,KAAKn8B,UAAUC,IAAI,mBAG1B0a,EAAQr7B,WACVq7B,EAAQr7B,UAAUf,IAItB,SAASgB,EAAUhB,GACbi9C,IACE7gB,EAAQuhB,YACV90C,SAAS+0C,KAAKn8B,UAAUnF,OAAO,mBAGjCzT,SAASic,oBAAoB,UAAW9jB,GACxC6H,SAASic,oBAAoB,YAAa44B,GACzCT,EAAaj0B,OAAuBlE,oBAAoB,cAAe9jB,GACvEi8C,EAAaj0B,OAAuBlE,oBAAoB,WAAY9jB,GACpEi8C,EAAaj0B,OAAuBlE,oBAAoB,YAAa44B,GAElEtxB,EAAAA,IAAUgQ,EAAQhqB,yBACpBlZ,MAAM2vB,KAAKhgB,SAASg1C,iBAA8BzhB,EAAQhqB,0BAA0Bxa,SAASkmD,IAC3FA,EAAWhpD,MAAMipD,SAAW,MAI5B/9C,IACEm9C,EACE/gB,EAAQp7B,WACVo7B,EAAQp7B,UAAUhB,GAEA,YAAXA,EAAE8S,OACPspB,EAAQ4hB,eAAiBzJ,KAAKz3B,MAAQkgC,EAAgB,IACxD5gB,EAAQ4hB,cAAch+C,EAAG,CACvBi+C,QAAShB,EAAcJ,MACvBqB,QAASjB,EAAcH,SAEhB1gB,EAAQ9lC,SAAc,WAAY0J,GAAmB,IAAbA,EAAEQ,QACnD47B,EAAQ9lC,QAAQ0J,GAElBg9C,EAAgBzI,KAAKz3B,SAK3BqgC,GAAW,EACXC,GAAY,EACZC,EAAkB,EAClBH,OAAmBhoD,EACnBooD,EAAqB,CAAEnlD,EAAGgiB,OAAOojC,WAAa,EAAGnlD,EAAG+hB,OAAOqjC,YAAc,GACzEP,OAAe/nD,EAGjB,SAASwoD,EAAO19C,GACd,GAAIi9C,EAAc,CAChB,GAAe,cAAXj9C,EAAE8S,MAAyB,YAAa9S,SAC1B9K,IAAZ8K,EAAE68C,QACJ78C,EAAE68C,MAAQ78C,EAAEqtC,QAAQ,GAAGwP,YAGT3nD,IAAZ8K,EAAE88C,QACJ98C,EAAE88C,MAAQ98C,EAAEqtC,QAAQ,GAAGyP,OAGrB1gB,EAAQ+hB,QAAUd,EAAkB,GAA0B,IAArBr9C,EAAEqtC,QAAQ91C,QAAc,CACnE,MAAM6mD,EAAc1B,EAAY18C,EAAEqtC,QAAQ,GAAIrtC,EAAEqtC,QAAQ,IAClDgR,EAActB,EAAe/8C,EAAEqtC,QAAQ,GAAIrtC,EAAEqtC,QAAQ,IACrDiR,EAAcD,EAAYlmD,EAAImlD,EAAmBnlD,EACjDomD,EAAcF,EAAYjmD,EAAIklD,EAAmBllD,EACjDomD,EAAaJ,EAAcf,EACjCjhB,EAAQ+hB,OAAOn+C,EAAG,CAChBw+C,WAAAA,EACAC,eAAgBnB,EAAmBnlD,EACnCumD,eAAgBpB,EAAmBllD,EACnCkmD,YAAAA,EACAC,YAAAA,EACAI,eAAgBN,EAAYlmD,EAC5BymD,eAAgBP,EAAYjmD,IAEX,IAAfomD,IAAkBrB,GAAW,GAIrC,MAAMmB,EAAct+C,EAAE68C,MAASI,EAAaJ,MACtC0B,EAAcv+C,EAAE88C,MAASG,EAAaH,OAExC7kD,KAAKy1B,IAAI4wB,IAzJK,IAyJ8BrmD,KAAKy1B,IAAI6wB,IAzJvC,MA0JhBpB,GAAW,GAGb,IAAI0B,GAAsB,EAEtBziB,EAAQn7B,SACVm7B,EAAQn7B,OAAOjB,EAAGi9C,EAAc,CAAEqB,YAAAA,EAAaC,YAAAA,IAC/CM,GAAsB,GAGpBziB,EAAQ/pB,UAAY+qC,IACtBA,EAYN,SAAiBp9C,EAAgCs+C,EAAqBC,GAEpE,GAAInyB,EAAAA,GAAQ,CACV,MAAMj0B,EAAK6H,EAAqBqtC,QAAQ,GAAGwP,MAC3C,GAAI1kD,GAAKskD,GAA6BtkD,GAAKgiB,OAAOojC,WAAad,EAC7D,OAAO,EAIX,MAAMqC,EAAO7mD,KAAKy1B,IAAI4wB,GAChBS,EAAO9mD,KAAKy1B,IAAI6wB,GAEtB,GAAID,GAAeC,GACHtmD,KAAKC,IAAI4mD,EAAMC,GAAQ9mD,KAAKuG,IAAIsgD,EAAMC,GAExC,EACV,OAAO,EAIX,IAAIC,EAOJ,GANIF,GArMgB,GAsMlBE,EAAO,IACED,GAvMS,KAwMlBC,EAAO,MAGJA,EACH,OAAO,EAGT,GAAK9B,GAEE,GAAIA,IAAqB8B,EAE9B,OAAO,OAHP9B,EAAmB8B,EAMrB,OAcJ,SACEh/C,EACAi/C,EACAX,EACAC,EACAlsC,GAEA,MAAyB,MAArB4sC,EAEO5sC,EAAQrS,EADbs+C,EAAc,EACE9rC,EAAe0sC,KAEf1sC,EAAe2sC,OAEL,MAArBF,GAEA5sC,EAAQrS,EADbu+C,EAAc,EACE/rC,EAAe4sC,GAEf5sC,EAAe6sC,MA/B5BC,CAAat/C,EAAGg/C,EAAMV,EAAaC,EAAaniB,EAAQ/pB,SAlD/CA,CAAQrS,EAAGs+C,EAAaC,GACpCM,EAAsBzB,GAGpBhxB,EAAAA,IAAUyyB,GAAuBziB,EAAQhqB,yBAC3ClZ,MAAM2vB,KAAKhgB,SAASg1C,iBAA8BzhB,EAAQhqB,0BAA0Bxa,SAASkmD,IAC3FA,EAAWhpD,MAAMipD,SAAW,aAkDpC,OAHA7rC,EAAQsK,iBAAiB,YAAazb,GACtCmR,EAAQsK,iBAAiB,aAAczb,EAAW,CAAEysC,SAAUpR,EAAQmjB,eAE/D,KACLv+C,IAEAkR,EAAQ4S,oBAAoB,aAAc/jB,GAC1CmR,EAAQ4S,oBAAoB,YAAa/jB,M,eC1RtC,SAAS4iC,EAAqBG,EAAY3Q,EAA6BqsB,GAC5EC,EAAgB,gBAAiB3b,EAAM3Q,EAASqsB,GAG3C,SAASpb,EAAoBN,EAAY3Q,EAA6BusB,GAC3ED,EAAgB,eAAgB3b,EAAM3Q,EAASusB,GAGjD,SAASD,EACPE,EACA7b,EACA3Q,EACAysB,GAEA,IAAIC,GAAY,EAEhB/b,EAAKtnB,iBAAiBmjC,GAAW,SAASG,EAAmB9/C,GACvD6/C,GAAa7/C,EAAEgpB,SAAWhpB,EAAEyO,eAI5BmxC,IACD5/C,aAAa+/C,iBAAmB//C,EAAEw/C,eAAiBI,GAChD5/C,aAAaggD,gBAAkBhgD,EAAE0/C,gBAAkBE,KAKzDC,GAAY,EAEZ/b,EAAKhf,oBAAoB66B,EAAWG,GAEpC9xC,YAAW,KACTmlB,MAnCsB,Q,yCCDb,SAAS8sB,EAAc1oD,EAAgB+nC,GACpD,OAAOA,EAAQrnC,KAAKe,MAAMsmC,EAAQ/nC,GAAUA,E,mICa9C,IAAI2oD,GAAc,EAEH,SAASC,EACtBzjC,EACAxK,EACAqT,GAMA,IALA8rB,EAKA,uDALS,EACT+O,EAIA,uDAJcC,EAAAA,GACdC,EAGA,uCAFAC,EAEA,uCADAC,EACA,uCACA,MAAMC,EAAaC,EAAoBhkC,EAAWxK,EAASkuC,EAAaE,GAEpEA,IAAmBK,EAAAA,GAAAA,SAKnBztC,EAAAA,EAAAA,MAAYjC,SAASC,MAAMF,iBAAmBwyB,EAAAA,KAChD+c,EAAgB,GAGlBK,EAAalkC,EAAWxK,EAASuuC,EAAYl7B,EAAU8rB,EAAQkP,EAAeC,IAR5EI,EAAalkC,EAAWxK,EAASuuC,EAAYl7B,EAAU8rB,EAAQ,GAW5D,SAASwP,IACd,OAAOX,EAGT,SAASQ,EACPhkC,EACAxK,GAGA,IAFAkuC,EAEA,uDAFcC,EAAAA,GACdC,EACA,uCACA,MAAQQ,UAAWC,GAAe7uC,GAC5B,UAAE8uC,GAActkC,EAEtB,QAAuBxnB,IAAnBorD,EAA8B,CAChC,MAAMW,EAASF,EAAarkC,EAAUskC,UAEtC,GAAIC,GAAUb,EACZ,OAAOY,GAAaC,EAASb,GACxB,GAAIa,EAASb,EAClB,OAAOY,GAAaC,EAASb,OAE1B,IAAIE,IAAmBK,EAAAA,GAAAA,GAC5B,OAAOI,EAAaX,EACf,GAAIE,IAAmBK,EAAAA,GAAAA,KAC5B,OAAO1oD,KAAKC,IAAI,EAAG6oD,EAAaX,GAGlC,OAAOY,EAGT,SAASJ,EACPlkC,EACAxK,EACAuuC,EACAl7B,GAIA,IAHA8rB,EAGA,uDAHS,EACTkP,EAEA,uCADAC,EACA,uCACA,MAAQM,UAAWC,EAAYhS,aAAcmS,GAAkBhvC,GACvD8uC,UAAWG,EAAkBpS,aAAcqS,EAA7C,aAA8D7zB,GAAiB7Q,EAC/E2kC,EAAwBb,GAA8B9jC,EAAUsV,QAAQsvB,aAC1E97B,OAAO9I,EAAUsV,QAAQsvB,cACzBF,EAMJ,IAAIG,EAEJ,OANIJ,IAAqBV,IACvB/jC,EAAUskC,UAAYP,GAKhBl7B,GACN,IAAK,QACHg8B,EAAQR,EAAa1P,EAAUoP,GAAchyB,EAAAA,GAAa,EAAI,GAC9D,MACF,IAAK,MACH8yB,EAAQR,EAAaG,EAAgB7P,GAAWoP,EAAaY,GAC7D,MAEF,IAAK,UACL,IAAK,SACL,IAAK,cACHE,EAAOL,EAAgBG,EAClBN,EAAaG,EAAgB,GAAMT,EAAaY,EAAwB,GACxEN,EAAa1P,EAAUoP,EAIhC,GAAIc,EAAO,EAAG,CACZ,MAAMC,GAAiBf,EACvBc,EAAOtpD,KAAKC,IAAIqpD,EAAMC,QACjB,GAAID,EAAO,EAAG,CACnB,MAAMC,EAAgBj0B,GAAgBkzB,EAAaY,GACnDE,EAAOtpD,KAAKuG,IAAI+iD,EAAMC,GAGxB,GAAa,IAATD,EACF,OAGF,MAAMv4B,EAASy3B,EAAac,EAE5B,GAAsB,IAAlBhB,EAEF,YADA7jC,EAAUskC,UAAYh4B,GAIxBk3B,GAAc,EAEd,MAAMuB,EAAUxpD,KAAKy1B,IAAI6zB,GACnBre,EAAaue,EAAUC,EAAAA,GAA4CC,EAAkBC,EACrF9jD,EAAWyiD,GACfsB,EAAAA,GACGJ,EAAUpB,EAAAA,IAA6ByB,EAAAA,GAA2BD,EAAAA,IAEjEE,EAAUxN,KAAKz3B,MACfklC,GAAuBte,EAAAA,EAAAA,OAE7BliB,EAAAA,EAAAA,KAAQ,MACNygC,EAAAA,EAAAA,KAAc,KACZ,MAAMC,EAAIjqD,KAAKuG,KAAK+1C,KAAKz3B,MAAQilC,GAAWjkD,EAAU,GAChDqkD,EAAcZ,GAAQ,EAAIre,EAAWgf,IAU3C,OARAxlC,EAAUskC,UAAY/oD,KAAK0G,MAAMqqB,EAASm5B,GAE1CjC,EAAcgC,EAAI,EAEbhC,GACH8B,IAGK9B,QAKb,SAAS0B,EAAeM,GACtB,OAAO,GAAM,EAAIA,IAAM,EAGzB,SAASP,EAAgBO,GACvB,OAAO,GAAM,EAAIA,IAAM,M,4ECzJV,SAAS/f,EAA2BzlB,EAAwBzc,GAA2C,IAA7BnC,EAA6B,uDAF7F,KAGnBoV,EAAAA,EAAAA,MAAYjC,SAASC,MAAMF,iBAAmBwyB,EAAAA,KAChD1lC,EAAW,GAGb8iD,EAAalkC,EAAWzc,EAAMnC,GAGhC,SAAS8iD,EAAalkC,EAAwBzc,EAAcnC,GAC1D,MAAMtB,EAA0C,QAAlCkgB,EAAU0lC,aAAa,QAC/B,WAAE7wB,EAAYF,YAAagxB,EAA3B,YAA2C/wB,GAAgB5U,EACjE,IAAI6kC,EAAOthD,EAAOsxB,EAElB,GAAIgwB,EAAO,EAAG,CACZ,MAAMC,GAAiBjwB,GAAc/0B,GAAS,EAAI,GAClD+kD,EAAOtpD,KAAKC,IAAIqpD,EAAMC,QACjB,GAAID,EAAO,EAAG,CACnB,MAAMC,EAAgBlwB,GAAeC,EAAa8wB,GAClDd,EAAOtpD,KAAKuG,IAAI+iD,EAAMC,GAGxB,GAAa,IAATD,EACF,OAGF,MAAMv4B,EAASuI,EAAagwB,EAE5B,GAAiB,IAAbzjD,EAEF,YADA4e,EAAU6U,WAAavI,GAIzB,MAAM+4B,EAAUxN,KAAKz3B,OAErB0E,EAAAA,EAAAA,KAAQ,MACN8gC,EAAAA,EAAAA,KAAQ,KACN,MAAMJ,EAAIjqD,KAAKuG,KAAK+1C,KAAKz3B,MAAQilC,GAAWjkD,EAAU,GAEhDqkD,EAAcZ,GAAQ,EAQlC,SAAoBW,GAClB,OAAO,GAAM,EAAIA,IAAM,IATahf,CAAWgf,IAG3C,OAFAxlC,EAAU6U,WAAat5B,KAAK0G,MAAMqqB,EAASm5B,GAEpCD,EAAI,U,8CC/CF,SAASt2B,EAAqB1Z,EAAsBqwC,EAAiBC,GAClF,IAAKD,GAASrwC,IAAYrJ,SAASo7B,cACjC,OAGF,MAAMnY,EAAY3R,OAAO4R,eACnB02B,EAAQ55C,SAAS65C,cACjBC,EAAYzwC,EAAQywC,WAAazwC,EAElCI,EAAAA,IAAiBkwC,GAA0BG,GAAcA,EAAUC,WAKxEH,EAAMI,mBAAmBL,EAAuBtwC,EAAUywC,GAE1DF,EAAMK,UAAS,GACfh3B,EAAUE,kBACVF,EAAUiF,SAAS0xB,IARjBvwC,EAAQhE,U,eCZG,SAASwlB,EAAgB1zB,GACtC,MAAMvJ,EAAM,QAASuJ,EAAIA,EAAEvJ,IAAMuJ,EAAEmlB,KAEnC,OAAO1uB,EAAI2uB,WAAW,OAAS3uB,EAAIkb,MAAM,GAAGoxC,cAAgBtsD,E,gCCD/C,SAASusD,IACtB,MAAMl3B,EAAY3R,OAAO4R,eACzB,IAAIk3B,EAAoBn3B,GAAaA,EAAUO,WAAaP,EAAUS,WAAW,GAAG22B,qBAAkBhuD,EACtG,IAAK+tD,GAA6D,IAAxCA,EAAkBE,kBAC1C,OAGF,MAAMC,EAAalqD,MAAM2vB,KAAKo6B,EAAkBnmB,UAC7CzY,QAAO,CAACprB,EAAQ6qC,IAVA,IAWXA,EAAKuf,UAA6Bvf,EAAKriB,UAAU6hC,SAAS,sBACrDpqD,MAAM2vB,KAAKib,EAAK+Z,iBAAiB,aACrCx5B,QAAO,CAACC,EAAKi/B,IAAcj/B,EAAIsE,OAAOpD,OAAQ+9B,EAA0BvxB,QAAQz9B,aAAa0E,GAbnF,IAcJ6qC,EAAKuf,UAA6Bvf,EAAKriB,UAAU6hC,SAAS,WAC5DrqD,EAAO2vB,OAAOpD,OAAQse,EAAqB9R,QAAQz9B,YAGrD0E,GACN,IAGL,KAAOgqD,EAAkB9e,YACvB8e,EAAkBO,YAAYP,EAAkB9e,YAIlD,OAFA8e,OAAoB/tD,EAEbkuD,E,+FCHT,MAAMK,EAAmB,CACvB7sD,UAAM1B,EACNugB,WAAOvgB,EACP6xC,kBAAc7xC,EACdiyC,iBAAajyC,EACbqyC,mBAAeryC,EACfoyC,eAAWpyC,EACX2xC,UAAM3xC,EACNkyC,YAAQlyC,GAGH,SAASwzC,EAAqBd,EAA0BD,GAC7D,MAAM,aAAE+b,GAAiBvpC,OAAOwpC,UAC5BD,GACE9b,GAAUsB,EAAetB,GACzBD,GAAUic,EAAwBjc,IAGtCkc,QAAQC,KAAK,kDAIV,SAAS5a,EAAetB,GAC7B,MAAM,aAAE8b,GAAiBvpC,OAAOwpC,UAC5BD,IAEFA,EAAa9b,SAAWA,MAAAA,EAAAA,EAAY,MAIjC,SAASgc,EAAwBjc,GACtC,MAAM,aAAE+b,GAAiBvpC,OAAOwpC,UAC5BD,GACF79B,OAAO+O,QAAQ,IAAK6uB,KAAqB9b,IAAY/vC,SAAQ,IAAoB,IAAlBnB,EAAK08B,GAAa,EAC/E,IAEEuwB,EAAaK,iBAAiBttD,EAAK08B,GACnC,MAAO6wB,QAOR,SAASC,IACd,MAAM,aAAEP,GAAiBvpC,OAAOwpC,UACd,MAAdD,IAEFA,EAAa9b,SAAW,KACxBgc,EAAwBH,GACpBC,EAAaQ,gBAAeR,EAAaQ,cAAgB,QAC7D,UAAAR,EAAa3a,wBAAb,cAAA2a,IAIG,SAAS/a,IAAgE,IAA/C5D,EAA+C,uDAAR,OACtE,MAAM,aAAE2e,GAAiBvpC,OAAOwpC,UAC5BD,GAAgBA,EAAaQ,gBAC/BR,EAAaQ,cAAgBnf,GAI1B,SAASgE,EAAiBhE,GAA4B,MAC3D,IAAKA,QAA4B7vC,IAAnB6vC,EAAMxf,eAA6CrwB,IAAnB6vC,EAAMjnC,SAAwB,OAC5EinC,EAAMxf,SAAWttB,KAAKuG,IAAIumC,EAAMxf,SAAUwf,EAAMjnC,UAEhD,MAAM,aAAE4lD,GAAiBvpC,OAAOwpC,UAChCD,MAAAA,GAAA,UAAAA,EAAc3a,wBAAd,cAAA2a,EAAiC3e,GAa5B,SAASof,EAAT,GAEqB,IAFO,MACjCvjD,EADiC,OAC1BwjD,EAD0B,MAClBC,EADkB,QACXC,GACI,EAC1B,GAAI,kBAAmBnqC,OACrB,OAAO,IAAIA,OAAOoqC,cAAc,CAC9B3jD,MAAAA,EACAwjD,OAAAA,EACAC,MAAAA,EACAC,QAAAA,M,wDC7GN,MAAME,EAAoD,CACxDv1B,EAAGiD,EAAAA,GAAAA,KACHhD,OAAQgD,EAAAA,GAAAA,KACR/C,EAAG+C,EAAAA,GAAAA,OACH9C,GAAI8C,EAAAA,GAAAA,OACJ7C,EAAG6C,EAAAA,GAAAA,UACHuyB,EAAGvyB,EAAAA,GAAAA,OACHwyB,OAAQxyB,EAAAA,GAAAA,OACR5C,IAAK4C,EAAAA,GAAAA,OACL3C,KAAM2C,EAAAA,GAAAA,KACNyyB,IAAKzyB,EAAAA,GAAAA,IACL0yB,WAAY1yB,EAAAA,GAAAA,YAKC,SAAS2yB,EAAkB56B,GACxC,MAAM66B,EAAWj8C,SAAS6mB,cAAc,OACxCo1B,EAASr5B,UAiCX,SAAuBxB,GACrB,IAAI86B,EAAa96B,EAAKtY,MAAM,GA6C5B,OA3CK0c,EAAAA,KAEH02B,EAAaA,EAAWhuC,QAAQ,iCAAkC,OAIpEguC,EAAaA,EAAWhuC,QAAQ,UAAW,KAG3CguC,EAAaA,EAAWhuC,QAAQ,4BAA6B,MAE7DguC,EAAaA,EAAWhuC,QAAQ,gBAAiB,MAGjDguC,EAAaA,EAAWhuC,QAAQ,qBAAsB,MACtDguC,EAAaA,EAAWhuC,QAAQ,SAAU,MAC1CguC,EAAaA,EAAWhuC,QAAQ,WAAY,IAG5CguC,EAAaA,EAAWhuC,QAAQ,8BAA+B,iBAC/DguC,EAAaA,EAAWhuC,QAAQ,uBAAwB,iBAGxDguC,EAAaA,EAAWhuC,QAAQ,yBAA0B,mBAG1DguC,EAAaA,EAAWhuC,QACtB,wEACA,iBAEFguC,EAAaA,EAAWhuC,QACtB,wEACA,iBAEFguC,EAAaA,EAAWhuC,QACtB,wEACA,iBAEFguC,EAAaA,EAAWhuC,QACtB,wEACC,6BAA4Bmb,EAAAA,GAAAA,wBAGxB6yB,EA/EcC,CAAc/6B,GACnC,MAAMllB,EAAO+/C,EAAS5zB,UAAUla,OAAOD,QAAQ,WAAY,IAC3D,IAAIkuC,EAAY,EACZC,EAAoB,EACxB,MAAMC,EAA+B,GAErC,SAASC,EAAUthB,GACjB,MAAM,MAAExE,EAAF,OAASt6B,GA2EnB,SACE8+B,EACAuhB,EACAJ,GAEA,MAAMnyC,EAoCR,SAA+BgxB,GAC7B,GAAI0gB,EAA0B1gB,EAAKwhB,UACjC,OAAOd,EAA0B1gB,EAAKwhB,UAGxC,GAAsB,MAAlBxhB,EAAKwhB,SAAkB,CACzB,MAAM5X,EAAS5J,EACf,OAAI4J,EAAO1b,QAAQC,aAAeC,EAAAA,GAAAA,YACzBA,EAAAA,GAAAA,YAELwb,EAAO1b,QAAQC,aAAeC,EAAAA,GAAAA,IACzBA,EAAAA,GAAAA,IAELwb,EAAOxa,KAAK9N,WAAW,WAClB8M,EAAAA,GAAAA,MAELwb,EAAOxa,KAAK9N,WAAW,QAClB8M,EAAAA,GAAAA,MAELwb,EAAOxa,OAASwa,EAAOtf,YAClB8D,EAAAA,GAAAA,QAGFA,EAAAA,GAAAA,IAGT,MAAsB,SAAlB4R,EAAKwhB,SACCxhB,EAAqB9R,QAAQC,gBADvC,EA9DaszB,CAAsBzhB,GACnC,IAAKhxB,IAASgxB,EAAK1V,YACjB,MAAO,CACLkR,MAAO2lB,EACPjgD,YAAQ9P,GAIZ,MAAMswD,EAAWH,EAAQ92C,QAAQu1B,EAAK1V,YAAa62B,GAG7C3lB,EAAQkmB,GAAY,EAAIA,EAAWP,EACnChE,EAASoE,EAAQI,UAAU,EAAGnmB,GAAO/nC,QACrC,OAAEA,GAAW8tD,EAAQI,UAAUnmB,EAAOA,EAAQwE,EAAK1V,YAAY72B,QAErE,IAAIigB,EACAjT,EAQJ,OAPIuO,IAASof,EAAAA,GAAAA,UACX1a,EAAOssB,EAA2B5Q,MAEhCpgB,IAASof,EAAAA,GAAAA,cACX3tB,EAAUu/B,EAA2B9R,QAAQztB,QAGxC,CACL+6B,MAAAA,EACAt6B,OAAQ,CACN8N,KAAAA,EACAmuC,OAAAA,EACA1pD,OAAAA,KACIigB,GAAO,CAAEA,IAAAA,MACTjT,GAAU,CAAEA,OAAAA,KA/GQmhD,CAAsB5hB,EAAM/+B,EAAMkgD,GAExDjgD,GACFigD,EAAY3lB,EACZ6lB,EAAS9jD,KAAK2D,IACL8+B,EAAK1V,cACd62B,GAAanhB,EAAK1V,YAAY72B,QAG5BusC,EAAK6hB,iBAAmBT,GApBP,IAqBnBA,GAAqB,EACrBhsD,MAAM2vB,KAAKib,EAAK/B,YAAYnqC,QAAQwtD,IASxC,OALAlsD,MAAM2vB,KAAKi8B,EAAS/iB,YAAYnqC,SAASksC,IACvCohB,EAAoB,EACpBE,EAAUthB,MAGL,CACL/+B,KAAAA,EACAogD,SAAUA,EAAS5tD,OAAS4tD,OAAWjwD,K,eC9CpC,SAAS4lD,EAA4B8K,GACtCA,EAAQ5zB,QAAQ6zB,mBAIpBD,EAAQppC,iBAAiB,QAAQ,KAC/B,MAAM0lC,EAAI0D,EAAQ1e,YAElB0e,EAAQ5zB,QAAQ8zB,yBAA2B,OAiB3CF,EAAQppC,iBAAiB,YAhBzB,SAASsuB,IACF8a,EAAQtb,SAAS/yC,SAGtBquD,EAAQ1e,YAAc0e,EAAQ9nD,SAAW,EACzC8nD,EAAQppC,iBAAiB,YAAY,YAC5BopC,EAAQ5zB,QAAQ8zB,yBACvBF,EAAQ1e,YAAcgb,EAClB0D,EAAQ3c,SAAW2c,EAAQ5zB,QAAQ2oB,uBACrCiL,EAAQhvD,SAET,CAAE6lB,MAAM,IAEXmpC,EAAQ9gC,oBAAoB,WAAYgmB,SAIzC,CAAEruB,MAAM,IAEXmpC,EAAQ5zB,QAAQ6zB,iBAAmB,QAG9B,SAASzc,EAAwBwc,GACtC,OAAO1vD,QAAQ0vD,EAAQ5zB,QAAQ8zB,0B,0DClCjC,MAKA,EALmB9lD,IACjBA,EAAEM,kBACFN,EAAE2V,mB,eCJJ,IAAIowC,EAEG,SAASC,IAAsF,IAAhEC,EAAgE,uDAAvD,IAAK3T,EAAkD,uCAApB4T,EAAoB,wDAC/FH,IACHA,EAAel9C,SAAS6mB,cAAc,SACtCq2B,EAAahnB,aAAa,OAAQ,SAGpCgnB,EAAahnB,aAAa,SAAUknB,GAEhCC,EACFH,EAAaI,gBAAgB,YAE7BJ,EAAahnB,aAAa,WAAY,YAIxCgnB,EAAaK,SAAW,KACxBL,EAAaxsD,MAAQ,GACrBwsD,EAAaK,SAAW9T,EAExByT,EAAaM,Q","sources":["webpack://telegram-t/./src/components/common/AnimatedEmoji.tsx","webpack://telegram-t/./src/components/common/helpers/waveform.ts","webpack://telegram-t/./src/util/waveform.ts","webpack://telegram-t/./src/components/common/Audio.tsx","webpack://telegram-t/./src/components/common/ChatExtra.tsx","webpack://telegram-t/./src/components/common/DeleteChatModal.tsx","webpack://telegram-t/./src/components/common/Document.tsx","webpack://telegram-t/./src/components/common/DotAnimation.tsx","webpack://telegram-t/./src/components/common/File.tsx","webpack://telegram-t/./src/components/common/GroupChatInfo.tsx","webpack://telegram-t/./src/components/common/LastMessageMeta.tsx","webpack://telegram-t/./src/components/common/Media.tsx","webpack://telegram-t/./src/components/common/MessageOutgoingStatus.tsx","webpack://telegram-t/./src/components/common/NothingFound.tsx","webpack://telegram-t/./src/components/common/Picker.tsx","webpack://telegram-t/./src/components/common/PickerSelectedItem.tsx","webpack://telegram-t/./src/components/common/PrivateChatInfo.tsx","webpack://telegram-t/./src/components/common/ProfilePhoto.tsx","webpack://telegram-t/./src/components/common/ProfileInfo.tsx","webpack://telegram-t/./src/components/common/hooks/usePhotosPreload.ts","webpack://telegram-t/./src/components/common/ReactionStaticEmoji.tsx","webpack://telegram-t/./src/components/common/StickerButton.tsx","webpack://telegram-t/./src/components/common/StickerSetModal.async.tsx","webpack://telegram-t/./src/components/common/TypingStatus.tsx","webpack://telegram-t/./src/components/common/VerifiedIcon.tsx","webpack://telegram-t/./src/components/common/WebLink.tsx","webpack://telegram-t/./src/components/common/helpers/mediaDimensions.ts","webpack://telegram-t/./src/components/common/hooks/useAnimatedEmoji.ts","webpack://telegram-t/./src/components/left/ChatFolderModal.async.tsx","webpack://telegram-t/./src/components/left/main/hooks/useChatAnimationType.ts","webpack://telegram-t/./src/components/left/main/Badge.tsx","webpack://telegram-t/./src/components/left/main/ChatCallStatus.tsx","webpack://telegram-t/./src/components/left/main/Chat.tsx","webpack://telegram-t/./src/components/left/main/EmptyFolder.tsx","webpack://telegram-t/./src/components/left/main/ChatList.tsx","webpack://telegram-t/./src/components/left/search/helpers/getSenderName.ts","webpack://telegram-t/./src/components/middle/composer/CustomSendMenu.async.tsx","webpack://telegram-t/./src/components/middle/composer/DropTarget.tsx","webpack://telegram-t/./src/components/middle/composer/DropArea.tsx","webpack://telegram-t/./src/components/middle/composer/EmojiTooltip.async.tsx","webpack://telegram-t/./src/components/middle/composer/MessageInput.tsx","webpack://telegram-t/./src/components/middle/composer/TextFormatter.tsx","webpack://telegram-t/./src/components/middle/composer/helpers/getFilesFromDataTransferItems.ts","webpack://telegram-t/./src/components/middle/composer/helpers/prepareForRegExp.ts","webpack://telegram-t/./src/components/middle/composer/helpers/selection.ts","webpack://telegram-t/./src/util/memoized.ts","webpack://telegram-t/./src/components/middle/composer/hooks/useEmojiTooltip.ts","webpack://telegram-t/./src/components/middle/composer/hooks/useMentionTooltip.ts","webpack://telegram-t/./src/components/right/hooks/useAsyncRendering.ts","webpack://telegram-t/./src/components/ui/CheckboxGroup.tsx","webpack://telegram-t/./src/components/ui/FloatingActionButton.tsx","webpack://telegram-t/./src/components/ui/ListItem.tsx","webpack://telegram-t/./src/components/ui/Notification.tsx","webpack://telegram-t/./src/components/ui/ProgressSpinner.tsx","webpack://telegram-t/./src/components/ui/Radio.tsx","webpack://telegram-t/./src/components/ui/RadioGroup.tsx","webpack://telegram-t/./src/components/ui/RangeSlider.tsx","webpack://telegram-t/./src/components/ui/SearchInput.tsx","webpack://telegram-t/./src/components/ui/ShowTransition.tsx","webpack://telegram-t/./src/components/ui/Switcher.tsx","webpack://telegram-t/./src/components/ui/Tab.tsx","webpack://telegram-t/./src/components/ui/TabList.tsx","webpack://telegram-t/./src/components/ui/Transition.tsx","webpack://telegram-t/./src/hooks/reducers/useFoldersReducer.ts","webpack://telegram-t/./src/hooks/useAudioPlayer.ts","webpack://telegram-t/./src/hooks/useBuffering.ts","webpack://telegram-t/./src/hooks/useCanvasBlur.ts","webpack://telegram-t/./src/hooks/useChatContextActions.ts","webpack://telegram-t/./src/hooks/useContextMenuHandlers.ts","webpack://telegram-t/./src/hooks/useContextMenuPosition.ts","webpack://telegram-t/./src/hooks/useDebounce.ts","webpack://telegram-t/./src/hooks/useEnsureMessage.ts","webpack://telegram-t/./src/hooks/useFolderManager.ts","webpack://telegram-t/./src/hooks/useHorizontalScroll.ts","webpack://telegram-t/./src/hooks/useInputFocusOnOpen.ts","webpack://telegram-t/./src/hooks/useIntersectionObserver.ts","webpack://telegram-t/./src/hooks/useInterval.ts","webpack://telegram-t/./src/hooks/useLayoutEffectWithPrevDeps.ts","webpack://telegram-t/./src/hooks/useMediaTransition.ts","webpack://telegram-t/./src/hooks/useUniqueId.ts","webpack://telegram-t/./src/hooks/useMediaWithLoadProgress.ts","webpack://telegram-t/./src/hooks/useMouseInside.ts","webpack://telegram-t/./src/hooks/usePrevDuringAnimation.ts","webpack://telegram-t/./src/hooks/useReducer.ts","webpack://telegram-t/./src/components/common/CalendarModal.async.tsx","webpack://telegram-t/./src/hooks/useSchedule.tsx","webpack://telegram-t/./src/hooks/useSendMessageAction.ts","webpack://telegram-t/./src/hooks/useStateRef.ts","webpack://telegram-t/./src/hooks/useTimeout.ts","webpack://telegram-t/./src/hooks/useVideoCleanup.ts","webpack://telegram-t/./src/lib/fastBlur.js","webpack://telegram-t/./src/util/audioPlayer.ts","webpack://telegram-t/./src/util/captureEvents.ts","webpack://telegram-t/./src/util/cssAnimationEndListeners.ts","webpack://telegram-t/./src/util/cycleRestrict.ts","webpack://telegram-t/./src/util/fastSmoothScroll.ts","webpack://telegram-t/./src/util/fastSmoothScrollHorizontal.ts","webpack://telegram-t/./src/util/focusEditableElement.ts","webpack://telegram-t/./src/util/getKeyFromEvent.ts","webpack://telegram-t/./src/util/getMessageIdsForSelectedText.ts","webpack://telegram-t/./src/util/mediaSession.ts","webpack://telegram-t/./src/util/parseMessageInput.ts","webpack://telegram-t/./src/util/patchSafariProgressiveAudio.ts","webpack://telegram-t/./src/util/stopEvent.ts","webpack://telegram-t/./src/util/systemFilesDialog.ts"],"sourcesContent":["import React, {\n FC, memo,\n} from '../../lib/teact/teact';\n\nimport { ApiMediaFormat, ApiSticker } from '../../api/types';\nimport { ActiveEmojiInteraction } from '../../global/types';\n\nimport buildClassName from '../../util/buildClassName';\nimport { ObserveFn, useIsIntersecting } from '../../hooks/useIntersectionObserver';\nimport useMedia from '../../hooks/useMedia';\nimport useMediaTransition from '../../hooks/useMediaTransition';\nimport useAnimatedEmoji from './hooks/useAnimatedEmoji';\nimport { LIKE_STICKER_ID } from './helpers/mediaDimensions';\n\nimport AnimatedSticker from './AnimatedSticker';\n\nimport './AnimatedEmoji.scss';\n\ntype OwnProps = {\n sticker: ApiSticker;\n effect?: ApiSticker;\n isOwn?: boolean;\n soundId?: string;\n observeIntersection?: ObserveFn;\n size?: 'large' | 'medium' | 'small';\n lastSyncTime?: number;\n forceLoadPreview?: boolean;\n messageId?: number;\n chatId?: string;\n activeEmojiInteractions?: ActiveEmojiInteraction[];\n};\n\nconst QUALITY = 1;\n\nconst AnimatedEmoji: FC = ({\n sticker,\n effect,\n isOwn,\n soundId,\n size = 'medium',\n observeIntersection,\n lastSyncTime,\n forceLoadPreview,\n messageId,\n chatId,\n activeEmojiInteractions,\n}) => {\n const {\n markAnimationLoaded,\n isAnimationLoaded,\n ref,\n width,\n style,\n handleClick,\n playKey,\n } = useAnimatedEmoji(size, chatId, messageId, soundId, activeEmojiInteractions, isOwn, undefined, effect?.emoji);\n\n const localMediaHash = `sticker${sticker.id}`;\n\n const isIntersecting = useIsIntersecting(ref, observeIntersection);\n\n const thumbDataUri = sticker.thumbnail?.dataUri;\n const previewBlobUrl = useMedia(\n `${localMediaHash}?size=m`,\n !isIntersecting && !forceLoadPreview,\n ApiMediaFormat.BlobUrl,\n lastSyncTime,\n );\n const transitionClassNames = useMediaTransition(previewBlobUrl);\n\n const mediaData = useMedia(localMediaHash, !isIntersecting, ApiMediaFormat.Lottie, lastSyncTime);\n const isMediaLoaded = Boolean(mediaData);\n\n return (\n \n {!isAnimationLoaded && thumbDataUri && (\n \"\"\n )}\n {!isAnimationLoaded && previewBlobUrl && (\n \"\"\n )}\n {isMediaLoaded && localMediaHash && (\n \n )}\n
\n );\n};\n\nexport default memo(AnimatedEmoji);\n","type IWaveformProps = {\n peak: number;\n fillStyle: string;\n progressFillStyle: string;\n};\n\nexport const MAX_EMPTY_WAVEFORM_POINTS = 30;\nconst SPIKE_WIDTH = 2;\nconst SPIKE_STEP = 4;\nconst SPIKE_RADIUS = 1;\nconst HEIGHT = 23;\n\nexport function renderWaveform(\n canvas: HTMLCanvasElement,\n spikes: number[],\n progress: number,\n {\n peak, fillStyle, progressFillStyle,\n }: IWaveformProps,\n) {\n const width = spikes.length * SPIKE_STEP;\n const height = HEIGHT;\n\n canvas.width = width * 2;\n canvas.height = height * 2;\n canvas.style.width = `${width}px`;\n canvas.style.height = `${height}px`;\n\n const ctx = canvas.getContext('2d')!;\n ctx.scale(2, 2);\n\n spikes.forEach((item, i) => {\n ctx.globalAlpha = (i / spikes.length >= progress) ? 0.5 : 1;\n ctx.fillStyle = progress > i / spikes.length ? progressFillStyle : fillStyle;\n const spikeHeight = Math.max(2, HEIGHT * (item / Math.max(1, peak)));\n roundedRectangle(ctx, i * SPIKE_STEP, height, SPIKE_WIDTH, spikeHeight, SPIKE_RADIUS);\n ctx.fill();\n });\n}\n\nfunction roundedRectangle(\n ctx: CanvasRenderingContext2D, x: number, y: number, width: number, height: number, radius: number,\n) {\n if (width < 2 * radius) {\n radius = width / 2;\n }\n if (height < 2 * radius) {\n radius = height / 2;\n }\n\n ctx.beginPath();\n ctx.moveTo(x + radius, y);\n ctx.arcTo(x + width, y, x + width, y - height, radius);\n ctx.arcTo(x + width, y - height, x, y - height, radius);\n ctx.arcTo(x, y - height, x, y, radius);\n ctx.arcTo(x, y, x + width, y, radius);\n ctx.closePath();\n}\n","/* eslint-disable no-bitwise */\n\n// eslint-disable-next-line max-len\n// Ref: https://github.com/telegramdesktop/tdesktop/blob/0743e71ab6b928d2ee5bae1aed991849b1e2b291/Telegram/SourceFiles/data/data_document.cpp#L1018\nexport function decodeWaveform(encoded5bit: Uint8Array) {\n const bitsCount = encoded5bit.length * 8;\n const valuesCount = Math.floor(bitsCount / 5);\n if (!valuesCount) {\n return [];\n }\n\n // Read each 5 bit of encoded5bit as 0-31 unsigned char.\n // We count the index of the byte in which the desired 5-bit sequence starts.\n // And then we read a uint16 starting from that byte to guarantee to get all of those 5 bits.\n //\n // BUT! if it is the last byte we have, we're not allowed to read a uint16 starting with it.\n // Because it will be an overflow (we'll access one byte after the available memory).\n // We see, that only the last 5 bits could start in the last available byte and be problematic.\n // So we read in a general way all the entries in a general way except the last one.\n const result = Array(valuesCount);\n const bitsData = encoded5bit;\n for (let i = 0, l = valuesCount - 1; i !== l; ++i) {\n const byteIndex = Math.floor((i * 5) / 8);\n const bitShift = Math.floor((i * 5) % 8);\n const value = bitsData[byteIndex] + (bitsData[byteIndex + 1] << 8);\n result[i] = ((value >> bitShift) & 0x1F);\n }\n const lastByteIndex = Math.floor(((valuesCount - 1) * 5) / 8);\n const lastBitShift = Math.floor(((valuesCount - 1) * 5) % 8);\n const lastValue = bitsData[lastByteIndex] + (bitsData[lastByteIndex + 1] << 8);\n result[valuesCount - 1] = (lastValue >> lastBitShift) & 0x1F;\n\n return result;\n}\n\nexport function interpolateArray(data: number[], fitCount: number) {\n let peak = 0;\n const newData = new Array(fitCount);\n const springFactor = data.length / fitCount;\n const leftFiller = data[0];\n const rightFiller = data[data.length - 1];\n for (let i = 0; i < fitCount; i++) {\n const idx = Math.floor(i * springFactor);\n const val = ((data[idx - 1] ?? leftFiller) + (data[idx] ?? leftFiller) + (data[idx + 1] ?? rightFiller)) / 3;\n newData[i] = val;\n if (peak < val) {\n peak = val;\n }\n }\n return { data: newData, peak };\n}\n","import React, {\n FC, memo, useCallback, useEffect, useLayoutEffect, useMemo, useRef, useState,\n} from '../../lib/teact/teact';\nimport { getActions } from '../../global';\n\nimport {\n ApiAudio, ApiMediaFormat, ApiMessage, ApiVoice,\n} from '../../api/types';\nimport { AudioOrigin, ISettings } from '../../types';\n\nimport { IS_SINGLE_COLUMN_LAYOUT } from '../../util/environment';\nimport { formatMediaDateTime, formatMediaDuration, formatPastTimeShort } from '../../util/dateFormat';\nimport {\n getMediaDuration,\n getMediaTransferState,\n getMessageMediaFormat,\n getMessageMediaHash,\n isMessageLocal,\n isOwnMessage,\n} from '../../global/helpers';\nimport { MAX_EMPTY_WAVEFORM_POINTS, renderWaveform } from './helpers/waveform';\nimport buildClassName from '../../util/buildClassName';\nimport renderText from './helpers/renderText';\nimport { getFileSizeString } from './helpers/documentInfo';\nimport { decodeWaveform, interpolateArray } from '../../util/waveform';\nimport useMediaWithLoadProgress from '../../hooks/useMediaWithLoadProgress';\nimport useShowTransition from '../../hooks/useShowTransition';\nimport useBuffering, { BufferedRange } from '../../hooks/useBuffering';\nimport useAudioPlayer from '../../hooks/useAudioPlayer';\nimport useLang, { LangFn } from '../../hooks/useLang';\nimport { captureEvents } from '../../util/captureEvents';\nimport useMedia from '../../hooks/useMedia';\nimport { makeTrackId } from '../../util/audioPlayer';\nimport { getTranslation } from '../../util/langProvider';\n\nimport Button from '../ui/Button';\nimport ProgressSpinner from '../ui/ProgressSpinner';\nimport Link from '../ui/Link';\n\nimport './Audio.scss';\n\ntype OwnProps = {\n theme: ISettings['theme'];\n message: ApiMessage;\n senderTitle?: string;\n uploadProgress?: number;\n origin: AudioOrigin;\n date?: number;\n lastSyncTime?: number;\n className?: string;\n isSelectable?: boolean;\n isSelected?: boolean;\n isDownloading: boolean;\n onPlay: (messageId: number, chatId: string) => void;\n onReadMedia?: () => void;\n onCancelUpload?: () => void;\n onDateClick?: (messageId: number, chatId: string) => void;\n};\n\nconst AVG_VOICE_DURATION = 10;\nconst MIN_SPIKES = IS_SINGLE_COLUMN_LAYOUT ? 20 : 25;\nconst MAX_SPIKES = IS_SINGLE_COLUMN_LAYOUT ? 50 : 75;\n// This is needed for browsers requiring user interaction before playing.\nconst PRELOAD = true;\n\nconst Audio: FC = ({\n theme,\n message,\n senderTitle,\n uploadProgress,\n origin,\n date,\n lastSyncTime,\n className,\n isSelectable,\n isSelected,\n isDownloading,\n onPlay,\n onReadMedia,\n onCancelUpload,\n onDateClick,\n}) => {\n const { cancelMessageMediaDownload, downloadMessageMedia } = getActions();\n\n const { content: { audio, voice, video }, isMediaUnread } = message;\n const isVoice = Boolean(voice || video);\n const isSeeking = useRef(false);\n // eslint-disable-next-line no-null/no-null\n const seekerRef = useRef(null);\n const lang = useLang();\n const { isRtl } = lang;\n\n const [isActivated, setIsActivated] = useState(false);\n const shouldLoad = (isActivated || PRELOAD) && lastSyncTime;\n const coverHash = getMessageMediaHash(message, 'pictogram');\n const coverBlobUrl = useMedia(coverHash, false, ApiMediaFormat.BlobUrl);\n\n const mediaData = useMedia(\n getMessageMediaHash(message, 'inline'),\n !shouldLoad,\n getMessageMediaFormat(message, 'inline'),\n );\n\n const { loadProgress: downloadProgress } = useMediaWithLoadProgress(\n getMessageMediaHash(message, 'download'),\n !isDownloading,\n );\n\n const handleForcePlay = useCallback(() => {\n setIsActivated(true);\n onPlay(message.id, message.chatId);\n }, [message, onPlay]);\n\n const handleTrackChange = useCallback(() => {\n setIsActivated(false);\n }, []);\n\n const {\n isBuffered, bufferedRanges, bufferingHandlers, checkBuffering,\n } = useBuffering();\n\n const {\n isPlaying, playProgress, playPause, setCurrentTime, duration,\n } = useAudioPlayer(\n makeTrackId(message),\n getMediaDuration(message)!,\n isVoice ? 'voice' : 'audio',\n mediaData,\n bufferingHandlers,\n undefined,\n checkBuffering,\n isActivated,\n handleForcePlay,\n handleTrackChange,\n isMessageLocal(message),\n );\n\n const isOwn = isOwnMessage(message);\n const waveformCanvasRef = useWaveformCanvas(theme, voice, (isMediaUnread && !isOwn) ? 1 : playProgress, isOwn);\n\n const withSeekline = isPlaying || (playProgress > 0 && playProgress < 1);\n\n useEffect(() => {\n setIsActivated(isPlaying);\n }, [isPlaying]);\n\n const isLoadingForPlaying = isActivated && !isBuffered;\n\n const {\n isUploading, isTransferring, transferProgress,\n } = getMediaTransferState(\n message,\n uploadProgress || downloadProgress,\n isLoadingForPlaying || isDownloading,\n );\n\n const {\n shouldRender: shouldRenderSpinner,\n transitionClassNames: spinnerClassNames,\n } = useShowTransition(isTransferring);\n\n const shouldRenderCross = shouldRenderSpinner && (isLoadingForPlaying || isUploading);\n\n const handleButtonClick = useCallback(() => {\n if (isUploading) {\n onCancelUpload?.();\n return;\n }\n\n if (!isPlaying) {\n onPlay(message.id, message.chatId);\n }\n\n getActions().setAudioPlayerOrigin({ origin });\n setIsActivated(!isActivated);\n playPause();\n }, [isUploading, isPlaying, isActivated, playPause, onCancelUpload, onPlay, message.id, message.chatId, origin]);\n\n useEffect(() => {\n if (onReadMedia && isMediaUnread && (isPlaying || isDownloading)) {\n onReadMedia();\n }\n }, [isPlaying, isMediaUnread, onReadMedia, isDownloading]);\n\n const handleDownloadClick = useCallback(() => {\n if (isDownloading) {\n cancelMessageMediaDownload({ message });\n } else {\n downloadMessageMedia({ message });\n }\n }, [cancelMessageMediaDownload, downloadMessageMedia, isDownloading, message]);\n\n const handleSeek = useCallback((e: MouseEvent | TouchEvent) => {\n if (isSeeking.current && seekerRef.current) {\n const { width, left } = seekerRef.current.getBoundingClientRect();\n const clientX = e instanceof MouseEvent ? e.clientX : e.targetTouches[0].clientX;\n e.stopPropagation(); // Prevent Slide-to-Reply activation\n // Prevent track skipping while seeking near end\n setCurrentTime(Math.max(Math.min(duration * ((clientX - left) / width), duration - 0.1), 0.001));\n }\n }, [duration, setCurrentTime]);\n\n const handleStartSeek = useCallback((e: MouseEvent | TouchEvent) => {\n if (e instanceof MouseEvent && e.button === 2) return;\n isSeeking.current = true;\n handleSeek(e);\n }, [handleSeek]);\n\n const handleStopSeek = useCallback(() => {\n isSeeking.current = false;\n }, []);\n\n const handleDateClick = useCallback(() => {\n onDateClick!(message.id, message.chatId);\n }, [onDateClick, message.id, message.chatId]);\n\n useEffect(() => {\n if (!seekerRef.current || !withSeekline) return undefined;\n return captureEvents(seekerRef.current, {\n onCapture: handleStartSeek,\n onRelease: handleStopSeek,\n onClick: handleStopSeek,\n onDrag: handleSeek,\n });\n }, [withSeekline, handleStartSeek, handleSeek, handleStopSeek]);\n\n function renderFirstLine() {\n if (isVoice) {\n return senderTitle || 'Voice';\n }\n\n const { title, fileName } = audio!;\n\n return title || fileName;\n }\n\n function renderSecondLine() {\n if (isVoice) {\n return (\n
\n {formatMediaDuration((voice || video)!.duration)}\n
\n );\n }\n\n const { performer } = audio!;\n\n return (\n
\n {formatMediaDuration(duration)}\n \n {performer && {renderText(performer)}}\n {performer && senderTitle && }\n {senderTitle && {renderText(senderTitle)}}\n
\n );\n }\n\n const fullClassName = buildClassName(\n 'Audio',\n className,\n isOwn && origin === AudioOrigin.Inline && 'own',\n (origin === AudioOrigin.Search || origin === AudioOrigin.SharedMedia) && 'bigger',\n isSelected && 'audio-is-selected',\n );\n\n const buttonClassNames = ['toggle-play'];\n if (shouldRenderCross) {\n buttonClassNames.push('loading');\n } else {\n buttonClassNames.push(isPlaying ? 'pause' : 'play');\n }\n\n const contentClassName = buildClassName('content', withSeekline && 'with-seekline');\n\n function renderWithTitle() {\n return (\n
\n
\n

{renderText(renderFirstLine())}

\n\n
\n {date && (\n \n {formatPastTimeShort(lang, date * 1000)}\n \n )}\n
\n
\n\n {withSeekline && (\n
\n \n {playProgress < 1 && `${formatMediaDuration(duration * playProgress, duration)}`}\n \n {renderSeekline(playProgress, bufferedRanges, seekerRef)}\n
\n )}\n {!withSeekline && renderSecondLine()}\n
\n );\n }\n\n return (\n
\n {isSelectable && (\n
\n {isSelected && }\n
\n )}\n \n \n \n \n {shouldRenderSpinner && (\n
\n \n
\n )}\n {audio && !isUploading && (\n \n \n \n )}\n {origin === AudioOrigin.Search && renderWithTitle()}\n {origin !== AudioOrigin.Search && audio && renderAudio(\n lang,\n audio,\n duration,\n isPlaying,\n playProgress,\n bufferedRanges,\n seekerRef,\n (isDownloading || isUploading),\n date,\n transferProgress,\n onDateClick ? handleDateClick : undefined,\n )}\n {origin === AudioOrigin.SharedMedia && (voice || video) && renderWithTitle()}\n {origin === AudioOrigin.Inline && voice && (\n renderVoice(voice, seekerRef, waveformCanvasRef, playProgress, isMediaUnread)\n )}\n
\n );\n};\n\nfunction renderAudio(\n lang: LangFn,\n audio: ApiAudio,\n duration: number,\n isPlaying: boolean,\n playProgress: number,\n bufferedRanges: BufferedRange[],\n seekerRef: React.Ref,\n showProgress?: boolean,\n date?: number,\n progress?: number,\n handleDateClick?: NoneToVoidFunction,\n) {\n const {\n title, performer, fileName,\n } = audio;\n const showSeekline = isPlaying || (playProgress > 0 && playProgress < 1);\n const { isRtl } = getTranslation;\n\n return (\n
\n

{renderText(title || fileName)}

\n {showSeekline && (\n
\n \n {formatMediaDuration(duration * playProgress, duration)}\n \n {renderSeekline(playProgress, bufferedRanges, seekerRef)}\n
\n )}\n {!showSeekline && showProgress && (\n
\n {progress ? `${getFileSizeString(audio!.size * progress)} / ` : undefined}{getFileSizeString(audio!.size)}\n
\n )}\n {!showSeekline && !showProgress && (\n
\n {formatMediaDuration(duration)}\n {performer && (\n <>\n \n {renderText(performer)}\n \n )}\n {date && (\n <>\n \n \n {formatMediaDateTime(lang, date * 1000, true)}\n \n \n )}\n
\n )}\n
\n );\n}\n\nfunction renderVoice(\n voice: ApiVoice,\n seekerRef: React.Ref,\n waveformCanvasRef: React.Ref,\n playProgress: number,\n isMediaUnread?: boolean,\n) {\n return (\n
\n \n \n
\n

\n {playProgress === 0 ? formatMediaDuration(voice.duration) : formatMediaDuration(voice.duration * playProgress)}\n

\n
\n );\n}\n\nfunction useWaveformCanvas(\n theme: ISettings['theme'],\n voice?: ApiVoice,\n playProgress = 0,\n isOwn = false,\n) {\n // eslint-disable-next-line no-null/no-null\n const canvasRef = useRef(null);\n\n const { data: spikes, peak } = useMemo(() => {\n if (!voice) {\n return undefined;\n }\n\n const { waveform, duration } = voice;\n if (!waveform) {\n return {\n data: new Array(Math.min(duration, MAX_EMPTY_WAVEFORM_POINTS)).fill(0),\n peak: 0,\n };\n }\n\n const durationFactor = Math.min(duration / AVG_VOICE_DURATION, 1);\n const spikesCount = Math.round(MIN_SPIKES + (MAX_SPIKES - MIN_SPIKES) * durationFactor);\n const decodedWaveform = decodeWaveform(new Uint8Array(waveform));\n\n return interpolateArray(decodedWaveform, spikesCount);\n }, [voice]) || {};\n\n useLayoutEffect(() => {\n const canvas = canvasRef.current;\n\n if (!canvas || !spikes || peak === undefined) {\n return;\n }\n\n const fillColor = theme === 'dark' ? '#494A78' : '#ADD3F7';\n const fillOwnColor = theme === 'dark' ? '#B7ABED' : '#AEDFA4';\n const progressFillColor = theme === 'dark' ? '#8774E1' : '#3390EC';\n const progressFillOwnColor = theme === 'dark' ? '#FFFFFF' : '#4FAE4E';\n\n renderWaveform(canvas, spikes, playProgress, {\n peak,\n fillStyle: isOwn ? fillOwnColor : fillColor,\n progressFillStyle: isOwn ? progressFillOwnColor : progressFillColor,\n });\n }, [isOwn, peak, playProgress, spikes, theme]);\n\n return canvasRef;\n}\n\nfunction renderSeekline(\n playProgress: number,\n bufferedRanges: BufferedRange[],\n seekerRef: React.Ref,\n) {\n return (\n }\n >\n {bufferedRanges.map(({ start, end }) => (\n \n ))}\n \n \n \n \n \n \n
\n );\n}\n\nexport default memo(Audio);\n","import React, {\n FC, memo, useCallback, useEffect,\n} from '../../lib/teact/teact';\nimport { getActions, withGlobal } from '../../global';\n\nimport { GlobalState } from '../../global/types';\nimport { ApiChat, ApiCountryCode, ApiUser } from '../../api/types';\n\nimport {\n selectChat, selectNotifyExceptions, selectNotifySettings, selectUser,\n} from '../../global/selectors';\nimport {\n getChatDescription, getChatLink, getHasAdminRight, isChatChannel, isUserId, isUserRightBanned, selectIsChatMuted,\n} from '../../global/helpers';\nimport renderText from './helpers/renderText';\nimport { copyTextToClipboard } from '../../util/clipboard';\nimport { formatPhoneNumberWithCode } from '../../util/phoneNumber';\nimport useLang from '../../hooks/useLang';\n\nimport ListItem from '../ui/ListItem';\nimport Switcher from '../ui/Switcher';\n\ntype OwnProps = {\n chatOrUserId: string;\n forceShowSelf?: boolean;\n};\n\ntype StateProps =\n {\n user?: ApiUser;\n chat?: ApiChat;\n canInviteUsers?: boolean;\n isMuted?: boolean;\n phoneCodeList: ApiCountryCode[];\n }\n & Pick;\n\nconst ChatExtra: FC = ({\n lastSyncTime,\n user,\n chat,\n forceShowSelf,\n canInviteUsers,\n isMuted,\n phoneCodeList,\n}) => {\n const {\n loadFullUser,\n showNotification,\n updateChatMutedState,\n } = getActions();\n\n const {\n id: userId,\n fullInfo,\n username,\n phoneNumber,\n isSelf,\n } = user || {};\n const { id: chatId } = chat || {};\n const lang = useLang();\n\n useEffect(() => {\n if (lastSyncTime && userId) {\n loadFullUser({ userId });\n }\n }, [loadFullUser, userId, lastSyncTime]);\n\n const handleNotificationChange = useCallback(() => {\n updateChatMutedState({ chatId, isMuted: !isMuted });\n }, [chatId, isMuted, updateChatMutedState]);\n\n if (!chat || chat.isRestricted || (isSelf && !forceShowSelf)) {\n return undefined;\n }\n\n function copy(text: string, entity: string) {\n copyTextToClipboard(text);\n showNotification({ message: `${entity} was copied` });\n }\n\n const formattedNumber = phoneNumber && formatPhoneNumberWithCode(phoneCodeList, phoneNumber);\n const link = getChatLink(chat);\n const description = (fullInfo?.bio) || getChatDescription(chat);\n\n return (\n
\n {formattedNumber && Boolean(formattedNumber.length) && (\n // eslint-disable-next-line react/jsx-no-bind\n copy(formattedNumber, lang('Phone'))}>\n {formattedNumber}\n {lang('Phone')}\n \n )}\n {username && (\n copy(`@${username}`, lang('Username'))}\n >\n {renderText(username)}\n {lang('Username')}\n \n )}\n {description && Boolean(description.length) && (\n \n \n {renderText(description, ['br', 'links', 'emoji'])}\n \n {lang(userId ? 'UserBio' : 'Info')}\n \n )}\n {(canInviteUsers || !username) && link && (\n copy(link, lang('SetUrlPlaceholder'))}\n >\n
{link}
\n {lang('SetUrlPlaceholder')}\n \n )}\n {!forceShowSelf && (\n \n {lang('Notifications')}\n \n \n )}\n
\n );\n};\n\nexport default memo(withGlobal(\n (global, { chatOrUserId }): StateProps => {\n const { lastSyncTime, countryList: { phoneCodes: phoneCodeList } } = global;\n\n const chat = chatOrUserId ? selectChat(global, chatOrUserId) : undefined;\n const user = isUserId(chatOrUserId) ? selectUser(global, chatOrUserId) : undefined;\n const isMuted = chat && selectIsChatMuted(chat, selectNotifySettings(global), selectNotifyExceptions(global));\n\n const canInviteUsers = chat && !user && (\n (!isChatChannel(chat) && !isUserRightBanned(chat, 'inviteUsers'))\n || getHasAdminRight(chat, 'inviteUsers')\n );\n\n return {\n lastSyncTime, phoneCodeList, chat, user, canInviteUsers, isMuted,\n };\n },\n)(ChatExtra));\n","import React, { FC, useCallback, memo } from '../../lib/teact/teact';\nimport { getActions, withGlobal } from '../../global';\n\nimport { ApiChat } from '../../api/types';\n\nimport { selectIsChatWithSelf, selectUser } from '../../global/selectors';\nimport {\n isUserId,\n isUserBot,\n getUserFirstOrLastName,\n getPrivateChatUserId,\n isChatBasicGroup,\n isChatSuperGroup,\n isChatChannel,\n getChatTitle,\n} from '../../global/helpers';\nimport useLang from '../../hooks/useLang';\nimport renderText from './helpers/renderText';\n\nimport Avatar from './Avatar';\nimport Modal from '../ui/Modal';\nimport Button from '../ui/Button';\n\nimport './DeleteChatModal.scss';\n\nexport type OwnProps = {\n isOpen: boolean;\n chat: ApiChat;\n onClose: () => void;\n onCloseAnimationEnd?: () => void;\n};\n\ntype StateProps = {\n isChannel: boolean;\n isChatWithSelf?: boolean;\n isBot?: boolean;\n isPrivateChat: boolean;\n isBasicGroup: boolean;\n isSuperGroup: boolean;\n currentUserId: string | undefined;\n canDeleteForAll?: boolean;\n contactName?: string;\n};\n\nconst DeleteChatModal: FC = ({\n isOpen,\n chat,\n isChannel,\n isPrivateChat,\n isChatWithSelf,\n isBot,\n isBasicGroup,\n isSuperGroup,\n currentUserId,\n canDeleteForAll,\n contactName,\n onClose,\n onCloseAnimationEnd,\n}) => {\n const {\n leaveChannel,\n deleteHistory,\n deleteChannel,\n deleteChatUser,\n blockContact,\n } = getActions();\n\n const lang = useLang();\n const chatTitle = getChatTitle(lang, chat);\n\n const handleDeleteMessageForAll = useCallback(() => {\n deleteHistory({ chatId: chat.id, shouldDeleteForAll: true });\n\n onClose();\n }, [deleteHistory, chat.id, onClose]);\n\n const handleDeleteAndStop = useCallback(() => {\n deleteHistory({ chatId: chat.id, shouldDeleteForAll: true });\n blockContact({ contactId: chat.id, accessHash: chat.accessHash });\n\n onClose();\n }, [deleteHistory, chat.id, chat.accessHash, blockContact, onClose]);\n\n const handleDeleteChat = useCallback(() => {\n if (isPrivateChat) {\n deleteHistory({ chatId: chat.id, shouldDeleteForAll: false });\n } else if (isBasicGroup) {\n deleteChatUser({ chatId: chat.id, userId: currentUserId });\n deleteHistory({ chatId: chat.id, shouldDeleteForAll: false });\n } else if ((isChannel || isSuperGroup) && !chat.isCreator) {\n leaveChannel({ chatId: chat.id });\n } else if ((isChannel || isSuperGroup) && chat.isCreator) {\n deleteChannel({ chatId: chat.id });\n }\n onClose();\n }, [\n isPrivateChat,\n isBasicGroup,\n isChannel,\n isSuperGroup,\n currentUserId,\n chat.isCreator,\n chat.id,\n onClose,\n deleteHistory,\n deleteChatUser,\n leaveChannel,\n deleteChannel,\n ]);\n\n const handleLeaveChat = useCallback(() => {\n if (isChannel || isSuperGroup) {\n leaveChannel({ chatId: chat.id });\n onClose();\n } else {\n handleDeleteChat();\n }\n }, [chat.id, handleDeleteChat, isChannel, isSuperGroup, leaveChannel, onClose]);\n\n function renderHeader() {\n return (\n
\n \n

{lang(renderTitle())}

\n
\n );\n }\n\n function renderTitle() {\n if (isChannel && !chat.isCreator) {\n return 'LeaveChannel';\n }\n\n if (isChannel && chat.isCreator) {\n return 'ChannelDelete';\n }\n\n if (isBasicGroup || isSuperGroup) {\n return 'Group.LeaveGroup';\n }\n\n return 'DeleteChatUser';\n }\n\n function renderMessage() {\n if (isChannel && chat.isCreator) {\n return

{renderText(lang('ChatList.DeleteAndLeaveGroupConfirmation', chatTitle), ['simple_markdown'])}

;\n }\n\n if ((isChannel && !chat.isCreator) || isBasicGroup || isSuperGroup) {\n return

{renderText(lang('ChannelLeaveAlertWithName', chatTitle), ['simple_markdown'])}

;\n }\n\n return

{renderText(lang('ChatList.DeleteChatConfirmation', contactName), ['simple_markdown'])}

;\n }\n\n function renderActionText() {\n if (isChannel && !chat.isCreator) {\n return 'LeaveChannel';\n }\n if (isChannel && chat.isCreator) {\n return 'Chat.Input.Delete';\n }\n\n if (isBasicGroup || isSuperGroup) {\n return 'Group.LeaveGroup';\n }\n\n return canDeleteForAll ? 'ChatList.DeleteForCurrentUser' : 'Delete';\n }\n\n return (\n \n {renderMessage()}\n {isBot && (\n \n )}\n {canDeleteForAll && (\n \n )}\n {!isPrivateChat && chat.isCreator && (\n \n )}\n \n {lang(renderActionText())}\n \n \n \n );\n};\n\nexport default memo(withGlobal(\n (global, { chat }): StateProps => {\n const isPrivateChat = isUserId(chat.id);\n const isChatWithSelf = selectIsChatWithSelf(global, chat.id);\n const user = isPrivateChat && selectUser(global, getPrivateChatUserId(chat)!);\n const isBot = user && isUserBot(user) && !chat.isSupport;\n const canDeleteForAll = (isPrivateChat && !isChatWithSelf && !isBot);\n const contactName = isPrivateChat\n ? getUserFirstOrLastName(selectUser(global, getPrivateChatUserId(chat)!))\n : undefined;\n\n return {\n isPrivateChat,\n isChatWithSelf,\n isBot,\n isChannel: isChatChannel(chat),\n isBasicGroup: isChatBasicGroup(chat),\n isSuperGroup: isChatSuperGroup(chat),\n currentUserId: global.currentUserId,\n canDeleteForAll,\n contactName,\n };\n },\n)(DeleteChatModal));\n","import React, {\n FC, useCallback, memo, useRef, useEffect, useState,\n} from '../../lib/teact/teact';\nimport { getActions } from '../../global';\n\nimport { ApiMessage } from '../../api/types';\n\nimport { getDocumentExtension, getDocumentHasPreview } from './helpers/documentInfo';\nimport {\n getMediaTransferState,\n getMessageMediaHash,\n getMessageMediaThumbDataUri,\n isMessageDocumentVideo,\n} from '../../global/helpers';\nimport { ObserveFn, useIsIntersecting } from '../../hooks/useIntersectionObserver';\nimport useMediaWithLoadProgress from '../../hooks/useMediaWithLoadProgress';\nimport useMedia from '../../hooks/useMedia';\nimport useFlag from '../../hooks/useFlag';\n\nimport File from './File';\n\ntype OwnProps = {\n message: ApiMessage;\n observeIntersection?: ObserveFn;\n smaller?: boolean;\n isSelected?: boolean;\n isSelectable?: boolean;\n canAutoLoad?: boolean;\n uploadProgress?: number;\n withDate?: boolean;\n datetime?: number;\n className?: string;\n sender?: string;\n autoLoadFileMaxSizeMb?: number;\n isDownloading: boolean;\n onCancelUpload?: () => void;\n onMediaClick?: () => void;\n onDateClick?: (messageId: number, chatId: string) => void;\n};\n\nconst BYTES_PER_MB = 1024 * 1024;\n\nconst Document: FC = ({\n message,\n observeIntersection,\n smaller,\n canAutoLoad,\n autoLoadFileMaxSizeMb,\n uploadProgress,\n withDate,\n datetime,\n className,\n sender,\n isSelected,\n isSelectable,\n onCancelUpload,\n onMediaClick,\n onDateClick,\n isDownloading,\n}) => {\n const dispatch = getActions();\n\n // eslint-disable-next-line no-null/no-null\n const ref = useRef(null);\n\n const document = message.content.document!;\n const { fileName, size, timestamp } = document;\n const extension = getDocumentExtension(document) || '';\n\n const isIntersecting = useIsIntersecting(ref, observeIntersection);\n const [wasIntersected, markIntersected] = useFlag();\n useEffect(() => {\n if (isIntersecting) {\n markIntersected();\n }\n }, [isIntersecting, markIntersected]);\n\n // Auto-loading does not use global download manager because requires additional click to save files locally\n const [isLoadAllowed, setIsLoadAllowed] = useState(\n canAutoLoad && (!autoLoadFileMaxSizeMb || size <= autoLoadFileMaxSizeMb * BYTES_PER_MB),\n );\n\n const shouldDownload = Boolean(isDownloading || (isLoadAllowed && wasIntersected));\n\n const documentHash = getMessageMediaHash(message, 'download');\n const { loadProgress: downloadProgress, mediaData } = useMediaWithLoadProgress(\n documentHash, !shouldDownload, undefined, undefined, undefined, true,\n );\n const isLoaded = Boolean(mediaData);\n\n const {\n isUploading, isTransferring, transferProgress,\n } = getMediaTransferState(message, uploadProgress || downloadProgress, shouldDownload && !isLoaded);\n\n const hasPreview = getDocumentHasPreview(document);\n const thumbDataUri = hasPreview ? getMessageMediaThumbDataUri(message) : undefined;\n const localBlobUrl = hasPreview ? document.previewBlobUrl : undefined;\n const previewData = useMedia(getMessageMediaHash(message, 'pictogram'), !isIntersecting);\n\n const withMediaViewer = onMediaClick && Boolean(document.mediaType);\n\n const handleClick = useCallback(() => {\n if (isUploading) {\n if (onCancelUpload) {\n onCancelUpload();\n }\n return;\n }\n\n if (isDownloading) {\n dispatch.cancelMessageMediaDownload({ message });\n return;\n }\n\n if (isTransferring) {\n setIsLoadAllowed(false);\n return;\n }\n\n if (withMediaViewer) {\n onMediaClick!();\n } else {\n dispatch.downloadMessageMedia({ message });\n }\n }, [\n isUploading, isDownloading, isTransferring, withMediaViewer, onCancelUpload, dispatch, message, onMediaClick,\n ]);\n\n const handleDateClick = useCallback(() => {\n onDateClick!(message.id, message.chatId);\n }, [onDateClick, message.id, message.chatId]);\n\n return (\n \n );\n};\n\nexport default memo(Document);\n","import React, { FC } from '../../lib/teact/teact';\n\nimport useLang from '../../hooks/useLang';\nimport buildClassName from '../../util/buildClassName';\n\nimport './DotAnimation.scss';\n\ntype OwnProps = {\n content: string;\n className?: string;\n};\n\nconst DotAnimation: FC = ({ content, className }) => {\n const lang = useLang();\n return (\n \n {content}\n \n \n );\n};\n\nexport default DotAnimation;\n","import { RefObject } from 'react';\nimport React, { FC, memo, useRef } from '../../lib/teact/teact';\n\nimport useShowTransition from '../../hooks/useShowTransition';\nimport useMediaTransition from '../../hooks/useMediaTransition';\nimport buildClassName from '../../util/buildClassName';\nimport { formatMediaDateTime, formatPastTimeShort } from '../../util/dateFormat';\nimport { getColorFromExtension, getFileSizeString } from './helpers/documentInfo';\nimport { getDocumentThumbnailDimensions } from './helpers/mediaDimensions';\nimport renderText from './helpers/renderText';\nimport useLang from '../../hooks/useLang';\n\nimport ProgressSpinner from '../ui/ProgressSpinner';\nimport Link from '../ui/Link';\n\nimport './File.scss';\n\ntype OwnProps = {\n ref?: RefObject;\n name: string;\n extension?: string;\n size: number;\n timestamp?: number;\n sender?: string;\n thumbnailDataUri?: string;\n previewData?: string;\n className?: string;\n smaller?: boolean;\n isTransferring?: boolean;\n isUploading?: boolean;\n isSelectable?: boolean;\n isSelected?: boolean;\n transferProgress?: number;\n actionIcon?: string;\n onClick?: () => void;\n onDateClick?: (e: React.MouseEvent) => void;\n};\n\nconst File: FC = ({\n ref,\n name,\n size,\n extension = '',\n timestamp,\n sender,\n thumbnailDataUri,\n previewData,\n className,\n smaller,\n isTransferring,\n isUploading,\n isSelectable,\n isSelected,\n transferProgress,\n actionIcon,\n onClick,\n onDateClick,\n}) => {\n const lang = useLang();\n // eslint-disable-next-line no-null/no-null\n let elementRef = useRef(null);\n if (ref) {\n elementRef = ref;\n }\n\n const transitionClassNames = useMediaTransition(previewData);\n const {\n shouldRender: shouldSpinnerRender,\n transitionClassNames: spinnerClassNames,\n } = useShowTransition(isTransferring, undefined, true);\n\n const color = getColorFromExtension(extension);\n const sizeString = getFileSizeString(size);\n\n const { width, height } = getDocumentThumbnailDimensions(smaller);\n\n const fullClassName = buildClassName(\n 'File',\n className,\n smaller && 'smaller',\n onClick && !isUploading && 'interactive',\n isSelected && 'file-is-selected',\n );\n\n return (\n
\n {isSelectable && (\n
\n {isSelected && }\n
\n )}\n
\n {thumbnailDataUri || previewData ? (\n
\n \n \n
\n ) : (\n
\n {extension.length <= 4 && (\n {extension}\n )}\n
\n )}\n {shouldSpinnerRender && (\n
\n \n
\n )}\n {onClick && (\n \n )}\n
\n
\n
{renderText(name)}
\n
\n \n {isTransferring && transferProgress ? `${Math.round(transferProgress * 100)}%` : sizeString}\n \n {sender && {renderText(sender)}}\n {!sender && timestamp && (\n <>\n \n {formatMediaDateTime(lang, timestamp * 1000, true)}\n \n )}\n
\n
\n {sender && timestamp && (\n {formatPastTimeShort(lang, timestamp * 1000)}\n )}\n
\n );\n};\n\nexport default memo(File);\n","import { MouseEvent as ReactMouseEvent } from 'react';\nimport React, {\n FC, useEffect, useCallback, memo,\n} from '../../lib/teact/teact';\nimport { getActions, withGlobal } from '../../global';\n\nimport { ApiChat, ApiTypingStatus } from '../../api/types';\nimport { GlobalState } from '../../global/types';\nimport { MediaViewerOrigin } from '../../types';\n\nimport {\n getChatTypeString,\n getChatTitle,\n isChatSuperGroup,\n} from '../../global/helpers';\nimport { selectChat, selectChatMessages, selectChatOnlineCount } from '../../global/selectors';\nimport renderText from './helpers/renderText';\nimport useLang, { LangFn } from '../../hooks/useLang';\n\nimport Avatar from './Avatar';\nimport VerifiedIcon from './VerifiedIcon';\nimport TypingStatus from './TypingStatus';\nimport DotAnimation from './DotAnimation';\n\ntype OwnProps = {\n chatId: string;\n typingStatus?: ApiTypingStatus;\n avatarSize?: 'small' | 'medium' | 'large' | 'jumbo';\n status?: string;\n withDots?: boolean;\n withMediaViewer?: boolean;\n withUsername?: boolean;\n withFullInfo?: boolean;\n withUpdatingStatus?: boolean;\n withChatType?: boolean;\n noRtl?: boolean;\n};\n\ntype StateProps =\n {\n chat?: ApiChat;\n onlineCount?: number;\n areMessagesLoaded: boolean;\n }\n & Pick;\n\nconst GroupChatInfo: FC = ({\n typingStatus,\n avatarSize = 'medium',\n status,\n withDots,\n withMediaViewer,\n withUsername,\n withFullInfo,\n withUpdatingStatus,\n withChatType,\n noRtl,\n chat,\n onlineCount,\n areMessagesLoaded,\n lastSyncTime,\n}) => {\n const {\n loadFullChat,\n openMediaViewer,\n } = getActions();\n\n const isSuperGroup = chat && isChatSuperGroup(chat);\n const { id: chatId, isMin, isRestricted } = chat || {};\n\n useEffect(() => {\n if (chatId && !isMin && withFullInfo && lastSyncTime) {\n loadFullChat({ chatId });\n }\n }, [chatId, isMin, lastSyncTime, withFullInfo, loadFullChat, isSuperGroup]);\n\n const handleAvatarViewerOpen = useCallback((e: ReactMouseEvent, hasPhoto: boolean) => {\n if (chat && hasPhoto) {\n e.stopPropagation();\n openMediaViewer({\n avatarOwnerId: chat.id,\n origin: avatarSize === 'jumbo' ? MediaViewerOrigin.ProfileAvatar : MediaViewerOrigin.MiddleHeaderAvatar,\n });\n }\n }, [chat, avatarSize, openMediaViewer]);\n\n const lang = useLang();\n\n if (!chat) {\n return undefined;\n }\n\n function renderStatusOrTyping() {\n if (status) {\n return withDots ? (\n \n ) : (\n {status}\n );\n }\n\n if (withUpdatingStatus && !areMessagesLoaded && !isRestricted) {\n return (\n \n );\n }\n\n if (!chat) {\n return undefined;\n }\n\n if (typingStatus) {\n return ;\n }\n\n if (withChatType) {\n return (\n {lang(getChatTypeString(chat))}\n );\n }\n\n const handle = withUsername ? chat.username : undefined;\n const groupStatus = getGroupStatus(lang, chat);\n const onlineStatus = onlineCount ? `, ${lang('OnlineCount', onlineCount, 'i')}` : undefined;\n\n return (\n \n {handle && {handle}}\n {groupStatus}\n {onlineStatus && {onlineStatus}}\n \n );\n }\n\n return (\n
\n \n
\n
\n

{renderText(getChatTitle(lang, chat))}

\n {chat.isVerified && }\n
\n {renderStatusOrTyping()}\n
\n
\n );\n};\n\nfunction getGroupStatus(lang: LangFn, chat: ApiChat) {\n const chatTypeString = lang(getChatTypeString(chat));\n const { membersCount } = chat;\n\n if (chat.isRestricted) {\n return chatTypeString === 'Channel' ? 'channel is inaccessible' : 'group is inaccessible';\n }\n\n if (!membersCount) {\n return chatTypeString;\n }\n\n return chatTypeString === 'Channel'\n ? lang('Subscribers', membersCount, 'i')\n : lang('Members', membersCount, 'i');\n}\n\nexport default memo(withGlobal(\n (global, { chatId }): StateProps => {\n const { lastSyncTime } = global;\n const chat = selectChat(global, chatId);\n const onlineCount = chat ? selectChatOnlineCount(global, chat) : undefined;\n const areMessagesLoaded = Boolean(selectChatMessages(global, chatId));\n\n return {\n lastSyncTime, chat, onlineCount, areMessagesLoaded,\n };\n },\n)(GroupChatInfo));\n","import React, { FC, memo } from '../../lib/teact/teact';\n\nimport { ApiMessage, ApiMessageOutgoingStatus } from '../../api/types';\n\nimport { formatPastTimeShort } from '../../util/dateFormat';\nimport useLang from '../../hooks/useLang';\n\nimport MessageOutgoingStatus from './MessageOutgoingStatus';\n\nimport './LastMessageMeta.scss';\n\ntype OwnProps = {\n message: ApiMessage;\n outgoingStatus?: ApiMessageOutgoingStatus;\n};\n\nconst LastMessageMeta: FC = ({ message, outgoingStatus }) => {\n const lang = useLang();\n return (\n
\n {outgoingStatus && (\n \n )}\n {formatPastTimeShort(lang, message.date * 1000)}\n
\n );\n};\n\nexport default memo(LastMessageMeta);\n","import React, {\n FC, memo, useCallback, useRef,\n} from '../../lib/teact/teact';\n\nimport { ApiMessage } from '../../api/types';\n\nimport { formatMediaDuration } from '../../util/dateFormat';\nimport stopEvent from '../../util/stopEvent';\nimport {\n getMessageHtmlId,\n getMessageMediaHash,\n getMessageMediaThumbDataUri,\n getMessageVideo,\n} from '../../global/helpers';\nimport buildClassName from '../../util/buildClassName';\nimport useMedia from '../../hooks/useMedia';\nimport useMediaTransition from '../../hooks/useMediaTransition';\nimport { ObserveFn, useIsIntersecting } from '../../hooks/useIntersectionObserver';\n\nimport './Media.scss';\n\ntype OwnProps = {\n message: ApiMessage;\n idPrefix?: string;\n isProtected?: boolean;\n observeIntersection?: ObserveFn;\n onClick?: (messageId: number, chatId: string) => void;\n};\n\nconst Media: FC = ({\n message,\n idPrefix = 'shared-media',\n isProtected,\n observeIntersection,\n onClick,\n}) => {\n // eslint-disable-next-line no-null/no-null\n const ref = useRef(null);\n\n const isIntersecting = useIsIntersecting(ref, observeIntersection);\n const thumbDataUri = getMessageMediaThumbDataUri(message);\n const mediaBlobUrl = useMedia(getMessageMediaHash(message, 'pictogram'), !isIntersecting);\n const transitionClassNames = useMediaTransition(mediaBlobUrl);\n\n const video = getMessageVideo(message);\n\n const handleClick = useCallback(() => {\n onClick!(message.id, message.chatId);\n }, [message.id, message.chatId, onClick]);\n\n return (\n \n \n \n {video && {video.isGif ? 'GIF' : formatMediaDuration(video.duration)}}\n {isProtected && }\n
\n );\n};\n\nexport default memo(Media);\n","import React, { FC, memo } from '../../lib/teact/teact';\n\nimport { ApiMessageOutgoingStatus } from '../../api/types';\n\nimport Transition from '../ui/Transition';\n\nimport './MessageOutgoingStatus.scss';\n\ntype OwnProps = {\n status: ApiMessageOutgoingStatus;\n};\n\nenum Keys {\n failed, pending, succeeded, read,\n}\n\nconst MessageOutgoingStatus: FC = ({ status }) => {\n return (\n
\n \n \n \n
\n );\n};\n\nexport default memo(MessageOutgoingStatus);\n","import React, { FC, memo } from '../../lib/teact/teact';\n\nimport buildClassName from '../../util/buildClassName';\nimport useShowTransition from '../../hooks/useShowTransition';\nimport renderText from './helpers/renderText';\nimport useLang from '../../hooks/useLang';\n\nimport './NothingFound.scss';\n\ninterface OwnProps {\n text?: string;\n description?: string;\n}\n\nconst DEFAULT_TEXT = 'Nothing found.';\n\nconst NothingFound: FC = ({ text = DEFAULT_TEXT, description }) => {\n const lang = useLang();\n const { transitionClassNames } = useShowTransition(true);\n\n return (\n
\n {text}\n {description &&

{renderText(lang(description), ['br'])}

}\n
\n );\n};\n\nexport default memo(NothingFound);\n","import React, {\n FC, useCallback, useRef, useEffect, memo,\n} from '../../lib/teact/teact';\n\nimport { isUserId } from '../../global/helpers';\n\nimport InfiniteScroll from '../ui/InfiniteScroll';\nimport Checkbox from '../ui/Checkbox';\nimport InputText from '../ui/InputText';\nimport ListItem from '../ui/ListItem';\nimport PrivateChatInfo from './PrivateChatInfo';\nimport GroupChatInfo from './GroupChatInfo';\nimport PickerSelectedItem from './PickerSelectedItem';\nimport useInfiniteScroll from '../../hooks/useInfiniteScroll';\nimport useLang from '../../hooks/useLang';\n\nimport Loading from '../ui/Loading';\n\nimport './Picker.scss';\n\ntype OwnProps = {\n itemIds: string[];\n selectedIds: string[];\n filterValue?: string;\n filterPlaceholder?: string;\n notFoundText?: string;\n searchInputId?: string;\n isLoading?: boolean;\n noScrollRestore?: boolean;\n onSelectedIdsChange: (ids: string[]) => void;\n onFilterChange: (value: string) => void;\n onLoadMore?: () => void;\n};\n\n// Focus slows down animation, also it breaks transition layout in Chrome\nconst FOCUS_DELAY_MS = 500;\n\nconst MAX_FULL_ITEMS = 10;\nconst ALWAYS_FULL_ITEMS_COUNT = 5;\n\nconst Picker: FC = ({\n itemIds,\n selectedIds,\n filterValue,\n filterPlaceholder,\n notFoundText,\n searchInputId,\n isLoading,\n noScrollRestore,\n onSelectedIdsChange,\n onFilterChange,\n onLoadMore,\n}) => {\n // eslint-disable-next-line no-null/no-null\n const inputRef = useRef(null);\n const shouldMinimize = selectedIds.length > MAX_FULL_ITEMS;\n\n useEffect(() => {\n setTimeout(() => {\n requestAnimationFrame(() => {\n inputRef.current!.focus();\n });\n }, FOCUS_DELAY_MS);\n }, []);\n\n const handleItemClick = useCallback((id: string) => {\n const newSelectedIds = [...selectedIds];\n if (newSelectedIds.includes(id)) {\n newSelectedIds.splice(newSelectedIds.indexOf(id), 1);\n } else {\n newSelectedIds.push(id);\n }\n onSelectedIdsChange(newSelectedIds);\n onFilterChange('');\n }, [selectedIds, onSelectedIdsChange, onFilterChange]);\n\n const handleFilterChange = useCallback((e: React.ChangeEvent) => {\n const { value } = e.currentTarget;\n onFilterChange(value);\n }, [onFilterChange]);\n\n const [viewportIds, getMore] = useInfiniteScroll(onLoadMore, itemIds, Boolean(filterValue));\n\n const lang = useLang();\n\n return (\n
\n
\n {selectedIds.map((id, i) => (\n \n ))}\n \n
\n\n {viewportIds?.length ? (\n \n {viewportIds.map((id) => (\n handleItemClick(id)}\n ripple\n >\n \n {isUserId(id) ? (\n \n ) : (\n \n )}\n \n ))}\n \n ) : !isLoading && viewportIds && !viewportIds.length ? (\n

{notFoundText || 'Sorry, nothing found.'}

\n ) : (\n \n )}\n
\n );\n};\n\nexport default memo(Picker);\n","import React, { FC, memo } from '../../lib/teact/teact';\nimport { withGlobal } from '../../global';\n\nimport { ApiChat, ApiUser } from '../../api/types';\n\nimport { selectChat, selectUser } from '../../global/selectors';\nimport { getChatTitle, getUserFirstOrLastName, isUserId } from '../../global/helpers';\nimport renderText from './helpers/renderText';\nimport buildClassName from '../../util/buildClassName';\nimport useLang from '../../hooks/useLang';\n\nimport Avatar from './Avatar';\n\nimport './PickerSelectedItem.scss';\n\ntype OwnProps = {\n chatOrUserId?: string;\n icon?: string;\n title?: string;\n isMinimized?: boolean;\n canClose?: boolean;\n onClick: (arg: any) => void;\n clickArg: any;\n className?: string;\n};\n\ntype StateProps = {\n chat?: ApiChat;\n user?: ApiUser;\n};\n\nconst PickerSelectedItem: FC = ({\n icon,\n title,\n isMinimized,\n canClose,\n onClick,\n clickArg,\n chat,\n user,\n className,\n}) => {\n const lang = useLang();\n\n let iconElement: any;\n let titleText: any;\n\n if (icon && title) {\n iconElement = (\n
\n \n
\n );\n\n titleText = title;\n } else if (chat || user) {\n iconElement = (\n \n );\n\n const name = !chat || (user && !user.isSelf)\n ? getUserFirstOrLastName(user)\n : getChatTitle(lang, chat, user);\n\n titleText = name ? renderText(name) : undefined;\n }\n\n const fullClassName = buildClassName(\n 'PickerSelectedItem',\n className,\n isMinimized && 'minimized',\n canClose && 'closeable',\n );\n\n return (\n onClick(clickArg)}\n title={isMinimized ? titleText : undefined}\n dir={lang.isRtl ? 'rtl' : undefined}\n >\n {iconElement}\n {!isMinimized && (\n
\n {titleText}\n
\n )}\n {canClose && (\n
\n \n
\n )}\n \n );\n};\n\nexport default memo(withGlobal(\n (global, { chatOrUserId }): StateProps => {\n if (!chatOrUserId) {\n return {};\n }\n\n const chat = chatOrUserId ? selectChat(global, chatOrUserId) : undefined;\n const user = isUserId(chatOrUserId) ? selectUser(global, chatOrUserId) : undefined;\n\n return {\n chat,\n user,\n };\n },\n)(PickerSelectedItem));\n","import { MouseEvent as ReactMouseEvent } from 'react';\nimport React, {\n FC, useEffect, useCallback, memo,\n} from '../../lib/teact/teact';\nimport { getActions, withGlobal } from '../../global';\n\nimport { ApiUser, ApiTypingStatus, ApiUserStatus } from '../../api/types';\nimport { GlobalState } from '../../global/types';\nimport { MediaViewerOrigin } from '../../types';\n\nimport { selectChatMessages, selectUser, selectUserStatus } from '../../global/selectors';\nimport { getUserFullName, getUserStatus, isUserOnline } from '../../global/helpers';\nimport renderText from './helpers/renderText';\nimport useLang from '../../hooks/useLang';\n\nimport Avatar from './Avatar';\nimport VerifiedIcon from './VerifiedIcon';\nimport TypingStatus from './TypingStatus';\nimport DotAnimation from './DotAnimation';\n\ntype OwnProps = {\n userId: string;\n typingStatus?: ApiTypingStatus;\n avatarSize?: 'tiny' | 'small' | 'medium' | 'large' | 'jumbo';\n forceShowSelf?: boolean;\n status?: string;\n withDots?: boolean;\n withMediaViewer?: boolean;\n withUsername?: boolean;\n withFullInfo?: boolean;\n withUpdatingStatus?: boolean;\n noStatusOrTyping?: boolean;\n noRtl?: boolean;\n};\n\ntype StateProps =\n {\n user?: ApiUser;\n userStatus?: ApiUserStatus;\n isSavedMessages?: boolean;\n areMessagesLoaded: boolean;\n serverTimeOffset: number;\n }\n & Pick;\n\nconst PrivateChatInfo: FC = ({\n typingStatus,\n avatarSize = 'medium',\n status,\n withDots,\n withMediaViewer,\n withUsername,\n withFullInfo,\n withUpdatingStatus,\n noStatusOrTyping,\n noRtl,\n user,\n userStatus,\n isSavedMessages,\n areMessagesLoaded,\n lastSyncTime,\n serverTimeOffset,\n}) => {\n const {\n loadFullUser,\n openMediaViewer,\n } = getActions();\n\n const { id: userId } = user || {};\n const fullName = getUserFullName(user);\n\n useEffect(() => {\n if (withFullInfo && lastSyncTime && userId) {\n loadFullUser({ userId });\n }\n }, [userId, loadFullUser, lastSyncTime, withFullInfo]);\n\n const handleAvatarViewerOpen = useCallback((e: ReactMouseEvent, hasPhoto: boolean) => {\n if (user && hasPhoto) {\n e.stopPropagation();\n openMediaViewer({\n avatarOwnerId: user.id,\n origin: avatarSize === 'jumbo' ? MediaViewerOrigin.ProfileAvatar : MediaViewerOrigin.MiddleHeaderAvatar,\n });\n }\n }, [user, avatarSize, openMediaViewer]);\n\n const lang = useLang();\n\n if (!user) {\n return undefined;\n }\n\n function renderStatusOrTyping() {\n if (status) {\n return withDots ? (\n \n ) : (\n {status}\n );\n }\n\n if (withUpdatingStatus && !areMessagesLoaded) {\n return (\n \n );\n }\n\n if (!user) {\n return undefined;\n }\n\n if (typingStatus) {\n return ;\n }\n\n return (\n \n {withUsername && user.username && {user.username}}\n {getUserStatus(lang, user, userStatus, serverTimeOffset)}\n \n );\n }\n\n return (\n
\n \n
\n {isSavedMessages ? (\n
\n

{lang('SavedMessages')}

\n
\n ) : (\n
\n

{fullName && renderText(fullName)}

\n {user?.isVerified && }\n
\n )}\n {(status || (!isSavedMessages && !noStatusOrTyping)) && renderStatusOrTyping()}\n
\n
\n );\n};\n\nexport default memo(withGlobal(\n (global, { userId, forceShowSelf }): StateProps => {\n const { lastSyncTime, serverTimeOffset } = global;\n const user = selectUser(global, userId);\n const userStatus = selectUserStatus(global, userId);\n const isSavedMessages = !forceShowSelf && user && user.isSelf;\n const areMessagesLoaded = Boolean(selectChatMessages(global, userId));\n\n return {\n lastSyncTime, user, userStatus, isSavedMessages, areMessagesLoaded, serverTimeOffset,\n };\n },\n)(PrivateChatInfo));\n","import React, { FC, memo } from '../../lib/teact/teact';\n\nimport {\n ApiChat, ApiMediaFormat, ApiPhoto, ApiUser,\n} from '../../api/types';\n\nimport {\n getChatAvatarHash,\n getChatTitle,\n getUserColorKey,\n getUserFullName,\n isUserId,\n isChatWithRepliesBot,\n isDeletedUser,\n} from '../../global/helpers';\nimport renderText from './helpers/renderText';\nimport buildClassName from '../../util/buildClassName';\nimport { getFirstLetters } from '../../util/textFormat';\nimport useMedia from '../../hooks/useMedia';\nimport useLang from '../../hooks/useLang';\n\nimport Spinner from '../ui/Spinner';\n\nimport './ProfilePhoto.scss';\n\ntype OwnProps = {\n chat?: ApiChat;\n user?: ApiUser;\n isFirstPhoto?: boolean;\n isSavedMessages?: boolean;\n photo?: ApiPhoto;\n lastSyncTime?: number;\n onClick: NoneToVoidFunction;\n};\n\nconst ProfilePhoto: FC = ({\n chat,\n user,\n photo,\n isFirstPhoto,\n isSavedMessages,\n lastSyncTime,\n onClick,\n}) => {\n const lang = useLang();\n const isDeleted = user && isDeletedUser(user);\n const isRepliesChat = chat && isChatWithRepliesBot(chat.id);\n\n function getMediaHash(size: 'normal' | 'big', forceAvatar?: boolean) {\n if (photo && !forceAvatar) {\n return `photo${photo.id}?size=c`;\n }\n\n let hash: string | undefined;\n if (!isSavedMessages && !isDeleted && !isRepliesChat) {\n if (user) {\n hash = getChatAvatarHash(user, size);\n } else if (chat) {\n hash = getChatAvatarHash(chat, size);\n }\n }\n\n return hash;\n }\n\n const photoBlobUrl = useMedia(getMediaHash('big'), false, ApiMediaFormat.BlobUrl, lastSyncTime);\n const avatarMediaHash = isFirstPhoto && !photoBlobUrl ? getMediaHash('normal', true) : undefined;\n const avatarBlobUrl = useMedia(avatarMediaHash, false, ApiMediaFormat.BlobUrl, lastSyncTime);\n const imageSrc = photoBlobUrl || avatarBlobUrl || photo?.thumbnail?.dataUri;\n\n let content: string | undefined = '';\n\n if (isSavedMessages) {\n content = ;\n } else if (isDeleted) {\n content = ;\n } else if (isRepliesChat) {\n content = ;\n } else if (imageSrc) {\n content = \"\";\n } else if (user) {\n const userFullName = getUserFullName(user);\n content = userFullName ? getFirstLetters(userFullName, 2) : undefined;\n } else if (chat) {\n const title = getChatTitle(lang, chat);\n content = title && getFirstLetters(title, isUserId(chat.id) ? 2 : 1);\n } else {\n content = (\n
\n \n
\n );\n }\n\n const fullClassName = buildClassName(\n 'ProfilePhoto',\n `color-bg-${getUserColorKey(user || chat)}`,\n isSavedMessages && 'saved-messages',\n isDeleted && 'deleted-account',\n isRepliesChat && 'replies-bot-account',\n (!isSavedMessages && !(imageSrc)) && 'no-photo',\n );\n\n return (\n
\n {typeof content === 'string' ? renderText(content, ['hq_emoji']) : content}\n
\n );\n};\n\nexport default memo(ProfilePhoto);\n","import React, {\n FC, useEffect, useCallback, memo, useState,\n} from '../../lib/teact/teact';\nimport { getActions, withGlobal } from '../../global';\n\nimport { ApiUser, ApiChat, ApiUserStatus } from '../../api/types';\nimport { GlobalState } from '../../global/types';\nimport { MediaViewerOrigin } from '../../types';\n\nimport { IS_TOUCH_ENV } from '../../util/environment';\nimport { selectChat, selectUser, selectUserStatus } from '../../global/selectors';\nimport {\n getUserFullName, getUserStatus, isChatChannel, isUserOnline,\n} from '../../global/helpers';\nimport renderText from './helpers/renderText';\nimport { captureEvents, SwipeDirection } from '../../util/captureEvents';\nimport buildClassName from '../../util/buildClassName';\nimport usePhotosPreload from './hooks/usePhotosPreload';\nimport useLang from '../../hooks/useLang';\n\nimport VerifiedIcon from './VerifiedIcon';\nimport ProfilePhoto from './ProfilePhoto';\nimport Transition from '../ui/Transition';\n\nimport './ProfileInfo.scss';\n\ntype OwnProps = {\n userId: string;\n forceShowSelf?: boolean;\n};\n\ntype StateProps =\n {\n user?: ApiUser;\n userStatus?: ApiUserStatus;\n chat?: ApiChat;\n isSavedMessages?: boolean;\n animationLevel: 0 | 1 | 2;\n serverTimeOffset: number;\n }\n & Pick;\n\nconst ProfileInfo: FC = ({\n forceShowSelf,\n user,\n userStatus,\n chat,\n isSavedMessages,\n connectionState,\n animationLevel,\n serverTimeOffset,\n}) => {\n const {\n loadFullUser,\n openMediaViewer,\n } = getActions();\n\n const lang = useLang();\n\n const { id: userId } = user || {};\n const { id: chatId } = chat || {};\n const fullName = user ? getUserFullName(user) : (chat ? chat.title : '');\n const photos = user?.photos || chat?.photos || [];\n const slideAnimation = animationLevel >= 1\n ? (lang.isRtl ? 'slide-optimized-rtl' : 'slide-optimized')\n : 'none';\n\n const [currentPhotoIndex, setCurrentPhotoIndex] = useState(0);\n const isFirst = isSavedMessages || photos.length <= 1 || currentPhotoIndex === 0;\n const isLast = isSavedMessages || photos.length <= 1 || currentPhotoIndex === photos.length - 1;\n\n // Deleting the last profile photo may result in an error\n useEffect(() => {\n if (currentPhotoIndex > photos.length) {\n setCurrentPhotoIndex(Math.max(0, photos.length - 1));\n }\n }, [currentPhotoIndex, photos.length]);\n\n useEffect(() => {\n if (connectionState === 'connectionStateReady' && userId && !forceShowSelf) {\n loadFullUser({ userId });\n }\n }, [userId, loadFullUser, connectionState, forceShowSelf]);\n\n usePhotosPreload(user || chat, photos, currentPhotoIndex);\n\n const handleProfilePhotoClick = useCallback(() => {\n openMediaViewer({\n avatarOwnerId: userId || chatId,\n profilePhotoIndex: currentPhotoIndex,\n origin: forceShowSelf ? MediaViewerOrigin.SettingsAvatar : MediaViewerOrigin.ProfileAvatar,\n });\n }, [openMediaViewer, userId, chatId, currentPhotoIndex, forceShowSelf]);\n\n const selectPreviousMedia = useCallback(() => {\n if (isFirst) {\n return;\n }\n\n setCurrentPhotoIndex(currentPhotoIndex - 1);\n }, [currentPhotoIndex, isFirst]);\n\n const selectNextMedia = useCallback(() => {\n if (isLast) {\n return;\n }\n\n setCurrentPhotoIndex(currentPhotoIndex + 1);\n }, [currentPhotoIndex, isLast]);\n\n // Swipe gestures\n useEffect(() => {\n const element = document.querySelector('.photo-wrapper');\n if (!element) {\n return undefined;\n }\n\n return captureEvents(element, {\n selectorToPreventScroll: '.Profile, .settings-content',\n onSwipe: IS_TOUCH_ENV ? (e, direction) => {\n if (direction === SwipeDirection.Right) {\n selectPreviousMedia();\n return true;\n } else if (direction === SwipeDirection.Left) {\n selectNextMedia();\n return true;\n }\n\n return false;\n } : undefined,\n });\n }, [selectNextMedia, selectPreviousMedia]);\n\n if (!user && !chat) {\n return undefined;\n }\n\n function renderPhotoTabs() {\n if (isSavedMessages || !photos || photos.length <= 1) {\n return undefined;\n }\n\n return (\n
\n {photos.map((_, i) => (\n \n ))}\n
\n );\n }\n\n function renderPhoto() {\n const photo = !isSavedMessages && photos && photos.length > 0 ? photos[currentPhotoIndex] : undefined;\n\n return (\n \n );\n }\n\n function renderStatus() {\n if (user) {\n return (\n
\n {getUserStatus(lang, user, userStatus, serverTimeOffset)}\n
\n );\n }\n\n return (\n {\n isChatChannel(chat!)\n ? lang('Subscribers', chat!.membersCount ?? 0, 'i')\n : lang('Members', chat!.membersCount ?? 0, 'i')\n }\n \n );\n }\n\n const isVerifiedIconShown = (user || chat)?.isVerified;\n\n return (\n
\n
\n {renderPhotoTabs()}\n \n {renderPhoto()}\n \n\n {!isFirst && (\n \n )}\n {!isLast && (\n \n )}\n
\n\n
\n {isSavedMessages ? (\n
\n

{lang('SavedMessages')}

\n
\n ) : (\n
\n

{fullName && renderText(fullName)}

\n {isVerifiedIconShown && }\n
\n )}\n {!isSavedMessages && renderStatus()}\n
\n
\n );\n};\n\nexport default memo(withGlobal(\n (global, { userId, forceShowSelf }): StateProps => {\n const { connectionState, serverTimeOffset } = global;\n const user = selectUser(global, userId);\n const userStatus = selectUserStatus(global, userId);\n const chat = selectChat(global, userId);\n const isSavedMessages = !forceShowSelf && user && user.isSelf;\n const { animationLevel } = global.settings.byKey;\n\n return {\n connectionState,\n user,\n userStatus,\n chat,\n isSavedMessages,\n animationLevel,\n serverTimeOffset,\n };\n },\n)(ProfileInfo));\n","import {\n ApiChat, ApiMediaFormat, ApiPhoto, ApiUser,\n} from '../../../api/types';\nimport { useEffect } from '../../../lib/teact/teact';\nimport * as mediaLoader from '../../../util/mediaLoader';\n\nconst PHOTOS_TO_PRELOAD = 4;\n\nexport default function usePhotosPreload(\n profile: ApiUser | ApiChat | undefined,\n photos: ApiPhoto[],\n currentIndex: number,\n) {\n useEffect(() => {\n photos.slice(currentIndex, currentIndex + PHOTOS_TO_PRELOAD).forEach((photo) => {\n const mediaData = mediaLoader.getFromMemory(`photo${photo.id}?size=c`);\n if (!mediaData) {\n mediaLoader.fetch(`photo${photo.id}?size=c`, ApiMediaFormat.BlobUrl);\n }\n });\n }, [currentIndex, photos]);\n}\n","import { RefObject } from 'react';\nimport React, { FC, memo } from '../../lib/teact/teact';\nimport { getGlobal } from '../../global';\n\nimport { ApiMediaFormat } from '../../api/types';\n\nimport useMedia from '../../hooks/useMedia';\nimport buildClassName from '../../util/buildClassName';\n\nimport './ReactionStaticEmoji.scss';\n\ntype OwnProps = {\n reaction: string;\n ref?: RefObject;\n className?: string;\n};\n\nconst ReactionStaticEmoji: FC = ({\n reaction,\n ref,\n className,\n}) => {\n const staticIconId = getGlobal().availableReactions?.find((l) => l.reaction === reaction)?.staticIcon?.id;\n const mediaData = useMedia(`document${staticIconId}`, !staticIconId, ApiMediaFormat.BlobUrl);\n\n return (\n \n );\n};\n\nexport default memo(ReactionStaticEmoji);\n","import { MouseEvent as ReactMouseEvent } from 'react';\nimport React, {\n memo, useCallback, useEffect, useRef,\n} from '../../lib/teact/teact';\n\nimport { ApiBotInlineMediaResult, ApiMediaFormat, ApiSticker } from '../../api/types';\n\nimport buildClassName from '../../util/buildClassName';\nimport { preventMessageInputBlurWithBubbling } from '../middle/helpers/preventMessageInputBlur';\nimport safePlay from '../../util/safePlay';\nimport { IS_TOUCH_ENV, IS_WEBM_SUPPORTED } from '../../util/environment';\n\nimport { useIsIntersecting, ObserveFn } from '../../hooks/useIntersectionObserver';\nimport useMedia from '../../hooks/useMedia';\nimport useShowTransition from '../../hooks/useShowTransition';\nimport useFlag from '../../hooks/useFlag';\nimport useLang from '../../hooks/useLang';\nimport useContextMenuHandlers from '../../hooks/useContextMenuHandlers';\nimport useContextMenuPosition from '../../hooks/useContextMenuPosition';\n\nimport AnimatedSticker from './AnimatedSticker';\nimport Button from '../ui/Button';\nimport Menu from '../ui/Menu';\nimport MenuItem from '../ui/MenuItem';\n\nimport './StickerButton.scss';\n\ntype OwnProps = {\n sticker: ApiSticker;\n size: number;\n noAnimate?: boolean;\n title?: string;\n className?: string;\n clickArg: T;\n noContextMenu?: boolean;\n isSavedMessages?: boolean;\n observeIntersection: ObserveFn;\n onClick?: (arg: OwnProps['clickArg'], isSilent?: boolean, shouldSchedule?: boolean) => void;\n onFaveClick?: (sticker: ApiSticker) => void;\n onUnfaveClick?: (sticker: ApiSticker) => void;\n};\n\nconst StickerButton = ({\n sticker,\n size,\n noAnimate,\n title,\n className,\n clickArg,\n noContextMenu,\n isSavedMessages,\n observeIntersection,\n onClick,\n onFaveClick,\n onUnfaveClick,\n}: OwnProps) => {\n // eslint-disable-next-line no-null/no-null\n const ref = useRef(null);\n const lang = useLang();\n\n const localMediaHash = `sticker${sticker.id}`;\n const stickerSelector = `sticker-button-${sticker.id}`;\n\n const isIntersecting = useIsIntersecting(ref, observeIntersection);\n\n const thumbDataUri = sticker.thumbnail ? sticker.thumbnail.dataUri : undefined;\n const previewBlobUrl = useMedia(`${localMediaHash}?size=m`, !isIntersecting, ApiMediaFormat.BlobUrl);\n\n const shouldPlay = isIntersecting && !noAnimate;\n const lottieData = useMedia(sticker.isLottie && localMediaHash, !shouldPlay, ApiMediaFormat.Lottie);\n const [isLottieLoaded, markLoaded, unmarkLoaded] = useFlag(Boolean(lottieData));\n const canLottiePlay = isLottieLoaded && shouldPlay;\n const isVideo = sticker.isVideo && IS_WEBM_SUPPORTED;\n const videoBlobUrl = useMedia(isVideo && localMediaHash, !shouldPlay, ApiMediaFormat.BlobUrl);\n const canVideoPlay = Boolean(isVideo && videoBlobUrl && shouldPlay);\n\n const { transitionClassNames: previewTransitionClassNames } = useShowTransition(\n Boolean(previewBlobUrl || canLottiePlay),\n undefined,\n undefined,\n 'slow',\n );\n\n const {\n isContextMenuOpen, contextMenuPosition,\n handleBeforeContextMenu, handleContextMenu,\n handleContextMenuClose, handleContextMenuHide,\n } = useContextMenuHandlers(ref);\n\n const getTriggerElement = useCallback(() => ref.current, []);\n\n const getRootElement = useCallback(\n () => ref.current!.closest('.custom-scroll, .no-scrollbar'),\n [],\n );\n\n const getMenuElement = useCallback(\n () => ref.current!.querySelector('.sticker-context-menu .bubble'),\n [],\n );\n\n const {\n positionX, positionY, transformOriginX, transformOriginY, style: menuStyle,\n } = useContextMenuPosition(\n contextMenuPosition,\n getTriggerElement,\n getRootElement,\n getMenuElement,\n );\n\n // To avoid flickering\n useEffect(() => {\n if (!shouldPlay) {\n unmarkLoaded();\n }\n }, [unmarkLoaded, shouldPlay]);\n\n useEffect(() => {\n if (!isVideo || !ref.current) return;\n const video = ref.current.querySelector('video');\n if (!video) return;\n if (canVideoPlay) {\n safePlay(video);\n } else {\n video.pause();\n }\n }, [isVideo, canVideoPlay]);\n\n useEffect(() => {\n if (!isIntersecting) handleContextMenuClose();\n }, [handleContextMenuClose, isIntersecting]);\n\n const handleClick = () => {\n if (isContextMenuOpen) return;\n onClick?.(clickArg);\n };\n\n const handleMouseDown = (e: React.MouseEvent) => {\n preventMessageInputBlurWithBubbling(e);\n handleBeforeContextMenu(e);\n };\n\n const handleUnfaveClick = useCallback((e: ReactMouseEvent) => {\n e.stopPropagation();\n e.preventDefault();\n\n onUnfaveClick!(sticker);\n }, [onUnfaveClick, sticker]);\n\n const handleContextUnfave = useCallback(() => {\n onUnfaveClick!(sticker);\n }, [onUnfaveClick, sticker]);\n\n const handleContextFave = useCallback(() => {\n onFaveClick!(sticker);\n }, [onFaveClick, sticker]);\n\n const handleSendQuiet = useCallback(() => {\n onClick?.(clickArg, true);\n }, [clickArg, onClick]);\n\n const handleSendScheduled = useCallback(() => {\n onClick?.(clickArg, undefined, true);\n }, [clickArg, onClick]);\n\n const fullClassName = buildClassName(\n 'StickerButton',\n onClick && 'interactive',\n stickerSelector,\n className,\n );\n\n const style = (thumbDataUri && !canLottiePlay && !canVideoPlay) ? `background-image: url('${thumbDataUri}');` : '';\n\n return (\n \n {!canLottiePlay && !canVideoPlay && (\n // eslint-disable-next-line jsx-a11y/alt-text\n \n )}\n {isVideo && (\n \n )}\n {shouldPlay && lottieData && (\n \n )}\n {!IS_TOUCH_ENV && onUnfaveClick && (\n \n \n \n )}\n {!noContextMenu && onClick && contextMenuPosition !== undefined && (\n \n {onUnfaveClick && (\n \n {lang('Stickers.RemoveFromFavorites')}\n \n )}\n {onFaveClick && (\n \n {lang('AddToFavorites')}\n \n )}\n {!isSavedMessages && {lang('SendWithoutSound')}}\n \n {lang(isSavedMessages ? 'SetReminder' : 'ScheduleMessage')}\n \n \n )}\n \n );\n};\n\nexport default memo(StickerButton);\n","import React, { FC, memo } from '../../lib/teact/teact';\nimport { OwnProps } from './StickerSetModal';\nimport { Bundles } from '../../util/moduleLoader';\n\nimport useModuleLoader from '../../hooks/useModuleLoader';\n\nconst StickerSetModalAsync: FC = (props) => {\n const { isOpen } = props;\n const StickerSetModal = useModuleLoader(Bundles.Extra, 'StickerSetModal', !isOpen);\n\n // eslint-disable-next-line react/jsx-props-no-spreading\n return StickerSetModal ? : undefined;\n};\n\nexport default memo(StickerSetModalAsync);\n","import React, { FC, memo } from '../../lib/teact/teact';\nimport { withGlobal } from '../../global';\n\nimport { ApiUser, ApiTypingStatus } from '../../api/types';\n\nimport { selectUser } from '../../global/selectors';\nimport { getUserFirstOrLastName } from '../../global/helpers';\nimport renderText from './helpers/renderText';\nimport useLang from '../../hooks/useLang';\n\nimport DotAnimation from './DotAnimation';\n\nimport './TypingStatus.scss';\n\ntype OwnProps = {\n typingStatus: ApiTypingStatus;\n};\n\ntype StateProps = {\n typingUser?: ApiUser;\n};\n\nconst TypingStatus: FC = ({ typingStatus, typingUser }) => {\n const lang = useLang();\n const typingUserName = typingUser && !typingUser.isSelf && getUserFirstOrLastName(typingUser);\n const content = lang(typingStatus.action)\n // Fix for translation \"{user} is typing\"\n .replace('{user}', '')\n .replace('{emoji}', typingStatus.emoji).trim();\n\n return (\n

\n {typingUserName && (\n {renderText(typingUserName)}\n )}\n \n

\n );\n};\n\nexport default memo(withGlobal(\n (global, { typingStatus }): StateProps => {\n if (!typingStatus.userId) {\n return {};\n }\n\n const typingUser = selectUser(global, typingStatus.userId);\n\n return { typingUser };\n },\n)(TypingStatus));\n","import React, { FC } from '../../lib/teact/teact';\n\nimport './VerifiedIcon.scss';\n\n// eslint-disable-next-line max-len\nconst VERIFIED_ICON = { __html: '' };\n\nconst VerifiedIcon: FC = () => {\n return (\n // eslint-disable-next-line react/no-danger\n \n );\n};\n\nexport default VerifiedIcon;\n","import React, { FC, memo, useCallback } from '../../lib/teact/teact';\n\nimport { ApiMessage, ApiWebPage } from '../../api/types';\nimport { ObserveFn } from '../../hooks/useIntersectionObserver';\n\nimport {\n getFirstLinkInMessage, getMessageText,\n getMessageWebPage,\n} from '../../global/helpers';\nimport buildClassName from '../../util/buildClassName';\nimport trimText from '../../util/trimText';\nimport renderText from './helpers/renderText';\nimport { formatPastTimeShort } from '../../util/dateFormat';\nimport useLang from '../../hooks/useLang';\nimport { renderMessageSummary, TextPart } from './helpers/renderMessageText';\n\nimport Media from './Media';\nimport Link from '../ui/Link';\nimport SafeLink from './SafeLink';\n\nimport './WebLink.scss';\n\nconst MAX_TEXT_LENGTH = 170; // symbols\n\ntype OwnProps = {\n message: ApiMessage;\n senderTitle?: string;\n isProtected?: boolean;\n observeIntersection?: ObserveFn;\n onMessageClick: (messageId: number, chatId: string) => void;\n};\n\ntype ApiWebPageWithFormatted =\n ApiWebPage\n & { formattedDescription?: TextPart[] };\n\nconst WebLink: FC = ({\n message, senderTitle, isProtected, observeIntersection, onMessageClick,\n}) => {\n const lang = useLang();\n\n let linkData: ApiWebPageWithFormatted | undefined = getMessageWebPage(message);\n\n if (!linkData) {\n const link = getFirstLinkInMessage(message);\n if (link) {\n const { url, domain } = link;\n\n linkData = {\n siteName: domain.replace(/^www./, ''),\n url: url.includes('://') ? url : url.includes('@') ? `mailto:${url}` : `http://${url}`,\n formattedDescription: getMessageText(message) !== url\n ? renderMessageSummary(lang, message, undefined, undefined, MAX_TEXT_LENGTH)\n : undefined,\n } as ApiWebPageWithFormatted;\n }\n }\n\n const handleMessageClick = useCallback(() => {\n onMessageClick(message.id, message.chatId);\n }, [onMessageClick, message.id, message.chatId]);\n\n if (!linkData) {\n return undefined;\n }\n\n const {\n siteName,\n url,\n displayUrl,\n title,\n description,\n formattedDescription,\n photo,\n video,\n } = linkData;\n\n const truncatedDescription = !senderTitle && description && trimText(description, MAX_TEXT_LENGTH);\n\n const className = buildClassName(\n 'WebLink scroll-item',\n (!photo && !video) && 'without-media',\n );\n\n return (\n \n {photo && (\n \n )}\n
\n \n {renderText(title || siteName || displayUrl)}\n \n {(truncatedDescription || formattedDescription) && (\n \n {formattedDescription || (truncatedDescription && renderText(truncatedDescription))}\n \n )}\n \n {url.replace('mailto:', '') || displayUrl}\n \n {senderTitle &&
{renderText(senderTitle)}
}\n
\n {senderTitle && (\n
\n \n {formatPastTimeShort(lang, message.date * 1000)}\n \n
\n )}\n \n );\n};\n\nexport default memo(WebLink);\n","import {\n ApiPhoto, ApiVideo, ApiSticker, ApiDimensions,\n} from '../../../api/types';\n\nimport { STICKER_SIZE_INLINE_DESKTOP_FACTOR, STICKER_SIZE_INLINE_MOBILE_FACTOR } from '../../../config';\nimport { IS_SINGLE_COLUMN_LAYOUT, IS_TOUCH_ENV } from '../../../util/environment';\nimport windowSize from '../../../util/windowSize';\nimport { getPhotoInlineDimensions, getVideoDimensions } from '../../../global/helpers';\n\nexport const MEDIA_VIEWER_MEDIA_QUERY = '(max-height: 640px)';\nexport const REM = parseInt(getComputedStyle(document.documentElement).fontSize, 10);\nexport const ROUND_VIDEO_DIMENSIONS_PX = 240;\nexport const GIF_MIN_WIDTH = 300;\nexport const AVATAR_FULL_DIMENSIONS = { width: 640, height: 640 };\nexport const LIKE_STICKER_ID = '4986041492570112461';\n\nconst DEFAULT_MEDIA_DIMENSIONS: ApiDimensions = { width: 100, height: 100 };\nconst MOBILE_SCREEN_NO_AVATARS_MESSAGE_EXTRA_WIDTH_REM = 4.5;\nconst MOBILE_SCREEN_MESSAGE_EXTRA_WIDTH_REM = 7;\nconst MESSAGE_MAX_WIDTH_REM = 29;\nconst MESSAGE_OWN_MAX_WIDTH_REM = 30;\n\nlet cachedMaxWidthOwn: number | undefined;\nlet cachedMaxWidth: number | undefined;\nlet cachedMaxWidthNoAvatar: number | undefined;\n\nfunction getMaxMessageWidthRem(fromOwnMessage: boolean, noAvatars?: boolean) {\n const regularMaxWidth = fromOwnMessage ? MESSAGE_OWN_MAX_WIDTH_REM : MESSAGE_MAX_WIDTH_REM;\n if (!IS_SINGLE_COLUMN_LAYOUT) {\n return regularMaxWidth;\n }\n\n const { width: windowWidth } = windowSize.get();\n\n // @optimization Limitation: changing device screen width not supported\n if (!cachedMaxWidthOwn) {\n cachedMaxWidthOwn = Math.min(\n MESSAGE_OWN_MAX_WIDTH_REM,\n windowWidth / REM - MOBILE_SCREEN_NO_AVATARS_MESSAGE_EXTRA_WIDTH_REM,\n );\n }\n if (!cachedMaxWidth) {\n cachedMaxWidth = Math.min(\n MESSAGE_MAX_WIDTH_REM,\n windowWidth / REM - MOBILE_SCREEN_MESSAGE_EXTRA_WIDTH_REM,\n );\n }\n if (!cachedMaxWidthNoAvatar) {\n cachedMaxWidthNoAvatar = Math.min(\n MESSAGE_MAX_WIDTH_REM,\n windowWidth / REM - MOBILE_SCREEN_NO_AVATARS_MESSAGE_EXTRA_WIDTH_REM,\n );\n }\n\n return fromOwnMessage\n ? cachedMaxWidthOwn\n : (noAvatars ? cachedMaxWidthNoAvatar : cachedMaxWidth);\n}\n\nexport function getAvailableWidth(\n fromOwnMessage: boolean,\n isForwarded?: boolean,\n isWebPagePhoto?: boolean,\n noAvatars?: boolean,\n) {\n const extraPaddingRem = isForwarded || isWebPagePhoto ? 1.625 : 0;\n const availableWidthRem = getMaxMessageWidthRem(fromOwnMessage, noAvatars) - extraPaddingRem;\n\n return availableWidthRem * REM;\n}\n\nfunction getAvailableHeight(isGif?: boolean, aspectRatio?: number) {\n if (\n isGif && aspectRatio\n && aspectRatio >= 0.75 && aspectRatio <= 1.25\n ) {\n return 20 * REM;\n }\n\n return 27 * REM;\n}\n\nfunction calculateDimensionsForMessageMedia({\n width,\n height,\n fromOwnMessage,\n isForwarded,\n isWebPagePhoto,\n isGif,\n noAvatars,\n}: {\n width: number;\n height: number;\n fromOwnMessage: boolean;\n isForwarded?: boolean;\n isWebPagePhoto?: boolean;\n isGif?: boolean;\n noAvatars?: boolean;\n}): ApiDimensions {\n const aspectRatio = height / width;\n const availableWidth = getAvailableWidth(fromOwnMessage, isForwarded, isWebPagePhoto, noAvatars);\n const availableHeight = getAvailableHeight(isGif, aspectRatio);\n const mediaWidth = isGif ? Math.max(GIF_MIN_WIDTH, width) : width;\n const mediaHeight = isGif ? height * (mediaWidth / width) : height;\n\n return calculateDimensions(availableWidth, availableHeight, mediaWidth, mediaHeight);\n}\n\nexport function getMediaViewerAvailableDimensions(withFooter: boolean, isVideo: boolean): ApiDimensions {\n const mql = window.matchMedia(MEDIA_VIEWER_MEDIA_QUERY);\n const { width: windowWidth, height: windowHeight } = windowSize.get();\n let occupiedHeightRem = isVideo && mql.matches ? 10 : 8.25;\n if (withFooter && !IS_TOUCH_ENV) {\n occupiedHeightRem = mql.matches ? 10 : 12.5;\n }\n return {\n width: windowWidth,\n height: windowHeight - occupiedHeightRem * REM,\n };\n}\n\nexport function calculateInlineImageDimensions(\n photo: ApiPhoto,\n fromOwnMessage: boolean,\n isForwarded?: boolean,\n isWebPagePhoto?: boolean,\n noAvatars?: boolean,\n) {\n const { width, height } = getPhotoInlineDimensions(photo) || DEFAULT_MEDIA_DIMENSIONS;\n\n return calculateDimensionsForMessageMedia({\n width,\n height,\n fromOwnMessage,\n isForwarded,\n isWebPagePhoto,\n noAvatars,\n });\n}\n\nexport function calculateVideoDimensions(\n video: ApiVideo,\n fromOwnMessage: boolean,\n isForwarded?: boolean,\n noAvatars?: boolean,\n) {\n const { width, height } = getVideoDimensions(video) || DEFAULT_MEDIA_DIMENSIONS;\n\n return calculateDimensionsForMessageMedia({\n width,\n height,\n fromOwnMessage,\n isForwarded,\n isGif: video.isGif,\n noAvatars,\n });\n}\n\nexport function getPictogramDimensions(): ApiDimensions {\n return {\n width: 2 * REM,\n height: 2 * REM,\n };\n}\n\nexport function getDocumentThumbnailDimensions(smaller?: boolean): ApiDimensions {\n if (smaller) {\n return {\n width: 3 * REM,\n height: 3 * REM,\n };\n }\n\n return {\n width: 3.375 * REM,\n height: 3.375 * REM,\n };\n}\n\nexport function getStickerDimensions(sticker: ApiSticker): ApiDimensions {\n const { width } = sticker;\n let { height } = sticker;\n\n // For some reason this sticker has some weird `height` value\n if (sticker.id === LIKE_STICKER_ID) {\n height = width;\n }\n\n const aspectRatio = (height && width) && height / width;\n const baseWidth = REM * (\n IS_SINGLE_COLUMN_LAYOUT\n ? STICKER_SIZE_INLINE_MOBILE_FACTOR\n : STICKER_SIZE_INLINE_DESKTOP_FACTOR\n );\n const calculatedHeight = aspectRatio ? baseWidth * aspectRatio : baseWidth;\n\n if (aspectRatio && calculatedHeight > baseWidth) {\n return {\n width: Math.round(baseWidth / aspectRatio),\n height: baseWidth,\n };\n }\n\n return {\n width: baseWidth,\n height: calculatedHeight,\n };\n}\n\nexport function calculateMediaViewerDimensions(\n { width, height }: ApiDimensions, withFooter: boolean, isVideo: boolean = false,\n): ApiDimensions {\n const { width: availableWidth, height: availableHeight } = getMediaViewerAvailableDimensions(withFooter, isVideo);\n\n return calculateDimensions(availableWidth, availableHeight, width, height);\n}\n\nexport function calculateDimensions(\n availableWidth: number,\n availableHeight: number,\n mediaWidth: number,\n mediaHeight: number,\n): ApiDimensions {\n const aspectRatio = mediaHeight / mediaWidth;\n const calculatedWidth = Math.min(mediaWidth, availableWidth);\n const calculatedHeight = Math.round(calculatedWidth * aspectRatio);\n\n if (calculatedHeight > availableHeight) {\n return {\n width: Math.round(availableHeight / aspectRatio),\n height: availableHeight,\n };\n }\n\n return {\n width: calculatedWidth,\n height: Math.round(calculatedWidth * aspectRatio),\n };\n}\n","import {\n useCallback, useEffect, useRef, useState,\n} from '../../../lib/teact/teact';\nimport safePlay from '../../../util/safePlay';\nimport { getActions } from '../../../global';\nimport useMedia from '../../../hooks/useMedia';\nimport { ActiveEmojiInteraction } from '../../../global/types';\nimport useFlag from '../../../hooks/useFlag';\nimport { selectLocalAnimatedEmojiEffectByName } from '../../../global/selectors';\n\nconst WIDTH = {\n large: 160,\n medium: 128,\n small: 104,\n};\nconst INTERACTION_BUNCH_TIME = 1000;\nconst MS_DIVIDER = 1000;\nconst TIME_DEFAULT = 0;\n\nexport default function useAnimatedEmoji(\n size: 'large' | 'medium' | 'small',\n chatId?: string,\n messageId?: number,\n soundId?: string,\n activeEmojiInteractions?: ActiveEmojiInteraction[],\n isOwn?: boolean,\n localEffect?: string,\n emoji?: string,\n) {\n const {\n interactWithAnimatedEmoji, sendEmojiInteraction, sendWatchingEmojiInteraction,\n } = getActions();\n\n const hasEffect = localEffect || emoji;\n const [isAnimationLoaded, markAnimationLoaded] = useFlag();\n\n // eslint-disable-next-line no-null/no-null\n const ref = useRef(null);\n\n // eslint-disable-next-line no-null/no-null\n const audioRef = useRef(null);\n\n const soundMediaData = useMedia(soundId ? `document${soundId}` : undefined, !soundId);\n\n const width = WIDTH[size];\n const style = `width: ${width}px; height: ${width}px;`;\n\n const [playKey, setPlayKey] = useState(String(Math.random()));\n const interactions = useRef(undefined);\n const startedInteractions = useRef(undefined);\n const sendInteractionBunch = useCallback(() => {\n const container = ref.current;\n\n if (!container) return;\n\n sendEmojiInteraction({\n chatId,\n messageId,\n localEffect,\n emoji,\n interactions: interactions.current,\n });\n startedInteractions.current = undefined;\n interactions.current = undefined;\n }, [sendEmojiInteraction, chatId, messageId, localEffect, emoji]);\n\n const play = useCallback(() => {\n setPlayKey(String(Math.random()));\n\n const audio = audioRef.current;\n if (soundMediaData) {\n if (audio) {\n audio.pause();\n audio.remove();\n }\n audioRef.current = new Audio();\n audioRef.current.src = soundMediaData;\n safePlay(audioRef.current);\n audioRef.current.addEventListener('ended', () => {\n audioRef.current = undefined;\n }, { once: true });\n }\n }, [soundMediaData]);\n\n const handleClick = useCallback(() => {\n play();\n\n const container = ref.current;\n\n if (!hasEffect || !container || !messageId || !chatId) {\n return;\n }\n\n const { x, y } = container.getBoundingClientRect();\n\n interactWithAnimatedEmoji({\n localEffect,\n emoji,\n x,\n y,\n startSize: width,\n isReversed: !isOwn,\n });\n\n if (!interactions.current) {\n interactions.current = [];\n startedInteractions.current = performance.now();\n setTimeout(sendInteractionBunch, INTERACTION_BUNCH_TIME);\n }\n\n interactions.current.push(startedInteractions.current\n ? (performance.now() - startedInteractions.current) / MS_DIVIDER\n : TIME_DEFAULT);\n }, [\n chatId, emoji, hasEffect, interactWithAnimatedEmoji, isOwn,\n localEffect, messageId, play, sendInteractionBunch, width,\n ]);\n\n // Set an end anchor for remote activated interaction\n useEffect(() => {\n const container = ref.current;\n\n if (!container || !activeEmojiInteractions) return;\n\n activeEmojiInteractions.forEach(({\n id,\n startSize,\n messageId: interactionMessageId,\n }) => {\n if (startSize || messageId !== interactionMessageId) {\n return;\n }\n\n const { x, y } = container.getBoundingClientRect();\n\n sendWatchingEmojiInteraction({\n id,\n chatId,\n emoticon: localEffect ? selectLocalAnimatedEmojiEffectByName(localEffect) : emoji,\n startSize: width,\n x,\n y,\n isReversed: !isOwn,\n });\n play();\n });\n }, [\n activeEmojiInteractions, chatId, emoji, isOwn, localEffect, messageId, play, sendWatchingEmojiInteraction, width,\n ]);\n\n return {\n playKey,\n ref,\n style,\n width,\n handleClick,\n markAnimationLoaded,\n isAnimationLoaded,\n };\n}\n","import React, { FC, memo } from '../../lib/teact/teact';\nimport { Bundles } from '../../util/moduleLoader';\nimport { OwnProps } from './ChatFolderModal';\n\nimport useModuleLoader from '../../hooks/useModuleLoader';\n\nconst ChatFolderModalAsync: FC = (props) => {\n const { isOpen } = props;\n const ChatFolderModal = useModuleLoader(Bundles.Extra, 'ChatFolderModal', !isOpen);\n\n // eslint-disable-next-line react/jsx-props-no-spreading\n return ChatFolderModal ? : undefined;\n};\n\nexport default memo(ChatFolderModalAsync);\n","import { useMemo } from '../../../../lib/teact/teact';\n\nexport enum ChatAnimationTypes {\n Move,\n Opacity,\n None,\n}\n\nexport function useChatAnimationType(orderDiffById: Record) {\n return useMemo(() => {\n const orderDiffs = Object.values(orderDiffById);\n const numberOfUp = orderDiffs.filter((diff) => diff < 0).length;\n const numberOfDown = orderDiffs.filter((diff) => diff > 0).length;\n\n return (chatId: string): ChatAnimationTypes => {\n const orderDiff = orderDiffById[chatId];\n if (orderDiff === 0) {\n return ChatAnimationTypes.None;\n }\n\n if (\n orderDiff === Infinity\n || orderDiff === -Infinity\n || (numberOfUp <= numberOfDown && orderDiff < 0)\n || (numberOfDown < numberOfUp && orderDiff > 0)\n ) {\n return ChatAnimationTypes.Opacity;\n }\n\n return ChatAnimationTypes.Move;\n };\n }, [orderDiffById]);\n}\n","import React, { FC, memo } from '../../../lib/teact/teact';\n\nimport { ApiChat } from '../../../api/types';\n\nimport { formatIntegerCompact } from '../../../util/textFormat';\nimport buildClassName from '../../../util/buildClassName';\n\nimport ShowTransition from '../../ui/ShowTransition';\n\nimport './Badge.scss';\n\ntype OwnProps = {\n chat: ApiChat;\n isPinned?: boolean;\n isMuted?: boolean;\n};\n\nconst Badge: FC = ({ chat, isPinned, isMuted }) => {\n const isShown = Boolean(chat.unreadCount || chat.hasUnreadMark || isPinned);\n const className = buildClassName(\n 'Badge',\n isMuted && 'muted',\n isPinned && 'pinned',\n Boolean(chat.unreadCount || chat.hasUnreadMark) && 'unread',\n );\n\n function renderContent() {\n if (chat.unreadCount) {\n if (chat.unreadMentionsCount) {\n return (\n
\n
\n \n
\n
\n {formatIntegerCompact(chat.unreadCount)}\n
\n
\n );\n }\n\n return (\n
\n {formatIntegerCompact(chat.unreadCount)}\n
\n );\n } else if (chat.hasUnreadMark) {\n return (\n
\n );\n } else if (isPinned) {\n return (\n
\n \n
\n );\n }\n\n return undefined;\n }\n\n return (\n \n {renderContent()}\n \n );\n};\n\nexport default memo(Badge);\n","import React, { FC, memo } from '../../../lib/teact/teact';\nimport buildClassName from '../../../util/buildClassName';\n\nimport { IS_SINGLE_COLUMN_LAYOUT } from '../../../util/environment';\n\nimport './ChatCallStatus.scss';\n\ntype OwnProps = {\n isSelected?: boolean;\n isActive?: boolean;\n};\n\nconst ChatCallStatus: FC = ({\n isSelected,\n isActive,\n}) => {\n return (\n
\n
\n
\n
\n
\n
\n
\n );\n};\n\nexport default memo(ChatCallStatus);\n","import React, {\n FC, memo, useCallback, useLayoutEffect, useMemo, useRef,\n} from '../../../lib/teact/teact';\nimport { getActions, getGlobal, withGlobal } from '../../../global';\n\nimport useLang, { LangFn } from '../../../hooks/useLang';\n\nimport {\n ApiChat, ApiUser, ApiMessage, ApiMessageOutgoingStatus, ApiFormattedText, MAIN_THREAD_ID, ApiUserStatus,\n} from '../../../api/types';\n\nimport { ANIMATION_END_DELAY } from '../../../config';\nimport { IS_SINGLE_COLUMN_LAYOUT } from '../../../util/environment';\nimport {\n getChatTitle,\n isUserId,\n isActionMessage,\n getPrivateChatUserId,\n getMessageAction,\n getMessageSenderName,\n isChatChannel,\n getMessageMediaHash,\n getMessageMediaThumbDataUri,\n getMessageVideo,\n getMessageSticker,\n selectIsChatMuted,\n getMessageRoundVideo,\n} from '../../../global/helpers';\nimport {\n selectChat, selectUser, selectChatMessage, selectOutgoingStatus, selectDraft, selectCurrentMessageList,\n selectNotifySettings, selectNotifyExceptions, selectUserStatus,\n} from '../../../global/selectors';\nimport { renderActionMessageText } from '../../common/helpers/renderActionMessageText';\nimport renderText from '../../common/helpers/renderText';\nimport { fastRaf } from '../../../util/schedulers';\nimport buildClassName from '../../../util/buildClassName';\nimport useEnsureMessage from '../../../hooks/useEnsureMessage';\nimport useChatContextActions from '../../../hooks/useChatContextActions';\nimport useFlag from '../../../hooks/useFlag';\nimport useMedia from '../../../hooks/useMedia';\nimport { ChatAnimationTypes } from './hooks';\nimport { renderMessageSummary } from '../../common/helpers/renderMessageText';\n\nimport Avatar from '../../common/Avatar';\nimport VerifiedIcon from '../../common/VerifiedIcon';\nimport TypingStatus from '../../common/TypingStatus';\nimport LastMessageMeta from '../../common/LastMessageMeta';\nimport DeleteChatModal from '../../common/DeleteChatModal';\nimport ListItem from '../../ui/ListItem';\nimport Badge from './Badge';\nimport ChatFolderModal from '../ChatFolderModal.async';\nimport ChatCallStatus from './ChatCallStatus';\n\nimport './Chat.scss';\n\ntype OwnProps = {\n style?: string;\n chatId: string;\n folderId?: number;\n orderDiff: number;\n animationType: ChatAnimationTypes;\n isPinned?: boolean;\n};\n\ntype StateProps = {\n chat?: ApiChat;\n isMuted?: boolean;\n user?: ApiUser;\n userStatus?: ApiUserStatus;\n actionTargetUserIds?: string[];\n actionTargetMessage?: ApiMessage;\n actionTargetChatId?: string;\n lastMessageSender?: ApiUser;\n lastMessageOutgoingStatus?: ApiMessageOutgoingStatus;\n draft?: ApiFormattedText;\n animationLevel?: number;\n isSelected?: boolean;\n canScrollDown?: boolean;\n canChangeFolder?: boolean;\n lastSyncTime?: number;\n};\n\nconst ANIMATION_DURATION = 200;\n\nconst Chat: FC = ({\n style,\n chatId,\n folderId,\n orderDiff,\n animationType,\n isPinned,\n chat,\n isMuted,\n user,\n userStatus,\n actionTargetUserIds,\n lastMessageSender,\n lastMessageOutgoingStatus,\n actionTargetMessage,\n actionTargetChatId,\n draft,\n animationLevel,\n isSelected,\n canScrollDown,\n canChangeFolder,\n lastSyncTime,\n}) => {\n const {\n openChat,\n focusLastMessage,\n } = getActions();\n\n // eslint-disable-next-line no-null/no-null\n const ref = useRef(null);\n\n const [isDeleteModalOpen, openDeleteModal, closeDeleteModal] = useFlag();\n const [isChatFolderModalOpen, openChatFolderModal, closeChatFolderModal] = useFlag();\n const [shouldRenderDeleteModal, markRenderDeleteModal, unmarkRenderDeleteModal] = useFlag();\n const [shouldRenderChatFolderModal, markRenderChatFolderModal, unmarkRenderChatFolderModal] = useFlag();\n\n const { lastMessage, typingStatus } = chat || {};\n const isAction = lastMessage && isActionMessage(lastMessage);\n\n useEnsureMessage(chatId, isAction ? lastMessage!.replyToMessageId : undefined, actionTargetMessage);\n\n const mediaThumbnail = lastMessage && !getMessageSticker(lastMessage)\n ? getMessageMediaThumbDataUri(lastMessage)\n : undefined;\n const mediaBlobUrl = useMedia(lastMessage ? getMessageMediaHash(lastMessage, 'micro') : undefined);\n const isRoundVideo = Boolean(lastMessage && getMessageRoundVideo(lastMessage));\n\n const actionTargetUsers = useMemo(() => {\n if (!actionTargetUserIds) {\n return undefined;\n }\n\n // No need for expensive global updates on users, so we avoid them\n const usersById = getGlobal().users.byId;\n return actionTargetUserIds.map((userId) => usersById[userId]).filter(Boolean as any);\n }, [actionTargetUserIds]);\n\n // Sets animation excess values when `orderDiff` changes and then resets excess values to animate.\n useLayoutEffect(() => {\n const element = ref.current;\n\n if (animationLevel === 0 || !element) {\n return;\n }\n\n // TODO Refactor animation: create `useListAnimation` that owns `orderDiff` and `animationType`\n if (animationType === ChatAnimationTypes.Opacity) {\n element.style.opacity = '0';\n\n fastRaf(() => {\n element.classList.add('animate-opacity');\n element.style.opacity = '1';\n });\n } else if (animationType === ChatAnimationTypes.Move) {\n element.style.transform = `translate3d(0, ${-orderDiff * 100}%, 0)`;\n\n fastRaf(() => {\n element.classList.add('animate-transform');\n element.style.transform = '';\n });\n } else {\n return;\n }\n\n setTimeout(() => {\n fastRaf(() => {\n element.classList.remove('animate-opacity', 'animate-transform');\n element.style.opacity = '';\n element.style.transform = '';\n });\n }, ANIMATION_DURATION + ANIMATION_END_DELAY);\n }, [animationLevel, orderDiff, animationType]);\n\n const handleClick = useCallback(() => {\n openChat({ id: chatId, shouldReplaceHistory: true });\n\n if (isSelected && canScrollDown) {\n focusLastMessage();\n }\n }, [\n isSelected,\n canScrollDown,\n openChat,\n chatId,\n focusLastMessage,\n ]);\n\n function handleDelete() {\n markRenderDeleteModal();\n openDeleteModal();\n }\n\n function handleChatFolderChange() {\n markRenderChatFolderModal();\n openChatFolderModal();\n }\n\n const contextActions = useChatContextActions({\n chat,\n user,\n handleDelete,\n handleChatFolderChange,\n folderId,\n isPinned,\n isMuted,\n canChangeFolder,\n });\n\n const lang = useLang();\n\n if (!chat) {\n return undefined;\n }\n\n function renderLastMessageOrTyping() {\n if (typingStatus && lastMessage && typingStatus.timestamp > lastMessage.date * 1000) {\n return ;\n }\n\n if (draft?.text.length) {\n return (\n

\n {lang('Draft')}\n {renderText(draft.text)}\n

\n );\n }\n\n if (!lastMessage) {\n return undefined;\n }\n\n if (isAction) {\n const isChat = chat && (isChatChannel(chat) || lastMessage.senderId === lastMessage.chatId);\n\n return (\n

\n {renderActionMessageText(\n lang,\n lastMessage,\n !isChat ? lastMessageSender : undefined,\n isChat ? chat : undefined,\n actionTargetUsers,\n actionTargetMessage,\n actionTargetChatId,\n { asTextWithSpoilers: true },\n )}\n

\n );\n }\n\n const senderName = getMessageSenderName(lang, chatId, lastMessageSender);\n\n return (\n

\n {senderName && (\n <>\n {renderText(senderName)}\n :\n \n )}\n {renderSummary(lang, lastMessage!, mediaBlobUrl || mediaThumbnail, isRoundVideo)}\n

\n );\n }\n\n const className = buildClassName(\n 'Chat chat-item-clickable',\n isUserId(chatId) ? 'private' : 'group',\n isSelected && 'selected',\n );\n\n return (\n \n
\n \n {chat.isCallActive && chat.isCallNotEmpty && (\n \n )}\n
\n
\n
\n

{renderText(getChatTitle(lang, chat, user))}

\n {chat.isVerified && }\n {isMuted && }\n {chat.lastMessage && (\n \n )}\n
\n
\n {renderLastMessageOrTyping()}\n \n
\n
\n {shouldRenderDeleteModal && (\n \n )}\n {shouldRenderChatFolderModal && (\n \n )}\n \n );\n};\n\nfunction renderSummary(lang: LangFn, message: ApiMessage, blobUrl?: string, isRoundVideo?: boolean) {\n if (!blobUrl) {\n return renderMessageSummary(lang, message);\n }\n\n return (\n \n \"\"\n {getMessageVideo(message) && }\n {renderMessageSummary(lang, message, true)}\n \n );\n}\n\nexport default memo(withGlobal(\n (global, { chatId }): StateProps => {\n const chat = selectChat(global, chatId);\n if (!chat || !chat.lastMessage) {\n return {};\n }\n\n const { senderId, replyToMessageId, isOutgoing } = chat.lastMessage;\n const lastMessageSender = senderId ? selectUser(global, senderId) : undefined;\n const lastMessageAction = getMessageAction(chat.lastMessage);\n const actionTargetMessage = lastMessageAction && replyToMessageId\n ? selectChatMessage(global, chat.id, replyToMessageId)\n : undefined;\n const { targetUserIds: actionTargetUserIds, targetChatId: actionTargetChatId } = lastMessageAction || {};\n const privateChatUserId = getPrivateChatUserId(chat);\n const {\n chatId: currentChatId,\n threadId: currentThreadId,\n type: messageListType,\n } = selectCurrentMessageList(global) || {};\n const isSelected = chatId === currentChatId && currentThreadId === MAIN_THREAD_ID;\n\n return {\n chat,\n isMuted: selectIsChatMuted(chat, selectNotifySettings(global), selectNotifyExceptions(global)),\n lastMessageSender,\n actionTargetUserIds,\n actionTargetChatId,\n actionTargetMessage,\n draft: selectDraft(global, chatId, MAIN_THREAD_ID),\n animationLevel: global.settings.byKey.animationLevel,\n isSelected,\n canScrollDown: isSelected && messageListType === 'thread',\n canChangeFolder: Boolean(global.chatFolders.orderedIds?.length),\n lastSyncTime: global.lastSyncTime,\n ...(isOutgoing && { lastMessageOutgoingStatus: selectOutgoingStatus(global, chat.lastMessage) }),\n ...(privateChatUserId && {\n user: selectUser(global, privateChatUserId),\n userStatus: selectUserStatus(global, privateChatUserId),\n }),\n };\n },\n)(Chat));\n","import React, { FC, memo, useCallback } from '../../../lib/teact/teact';\nimport { withGlobal } from '../../../global';\n\nimport { ApiChatFolder, ApiSticker } from '../../../api/types';\nimport { SettingsScreens } from '../../../types';\nimport { FolderEditDispatch } from '../../../hooks/reducers/useFoldersReducer';\n\nimport { IS_SINGLE_COLUMN_LAYOUT } from '../../../util/environment';\nimport { selectAnimatedEmoji, selectChatFolder } from '../../../global/selectors';\nimport useLang from '../../../hooks/useLang';\n\nimport Button from '../../ui/Button';\nimport AnimatedEmoji from '../../common/AnimatedEmoji';\n\nimport './EmptyFolder.scss';\n\ntype OwnProps = {\n folderId?: number;\n folderType: 'all' | 'archived' | 'folder';\n foldersDispatch?: FolderEditDispatch;\n onScreenSelect?: (screen: SettingsScreens) => void;\n};\n\ntype StateProps = {\n chatFolder?: ApiChatFolder;\n animatedEmoji?: ApiSticker;\n};\n\nconst EmptyFolder: FC = ({\n chatFolder, animatedEmoji, foldersDispatch, onScreenSelect,\n}) => {\n const lang = useLang();\n\n const handleEditFolder = useCallback(() => {\n foldersDispatch!({ type: 'editFolder', payload: chatFolder });\n onScreenSelect!(SettingsScreens.FoldersEditFolderFromChatList);\n }, [chatFolder, foldersDispatch, onScreenSelect]);\n\n return (\n
\n
{animatedEmoji && }
\n

{lang('FilterNoChatsToDisplay')}

\n

\n {lang(chatFolder ? 'ChatList.EmptyChatListFilterText' : 'Chat.EmptyChat')}\n

\n {chatFolder && foldersDispatch && onScreenSelect && (\n \n \n {lang('ChatList.EmptyChatListEditFilter')}\n \n )}\n
\n );\n};\n\nexport default memo(withGlobal((global, { folderId, folderType }): StateProps => {\n const chatFolder = folderId && folderType === 'folder' ? selectChatFolder(global, folderId) : undefined;\n\n return {\n chatFolder,\n animatedEmoji: selectAnimatedEmoji(global, '📂'),\n };\n})(EmptyFolder));\n","import React, {\n FC, memo, useMemo, useEffect,\n} from '../../../lib/teact/teact';\nimport { getActions } from '../../../global';\n\nimport { SettingsScreens } from '../../../types';\nimport { FolderEditDispatch } from '../../../hooks/reducers/useFoldersReducer';\n\nimport {\n ALL_FOLDER_ID,\n ARCHIVED_FOLDER_ID,\n CHAT_HEIGHT_PX,\n CHAT_LIST_SLICE,\n} from '../../../config';\nimport { IS_MAC_OS, IS_PWA } from '../../../util/environment';\nimport { mapValues } from '../../../util/iteratees';\nimport { getPinnedChatsCount } from '../../../util/folderManager';\nimport usePrevious from '../../../hooks/usePrevious';\nimport useInfiniteScroll from '../../../hooks/useInfiniteScroll';\nimport { useFolderManagerForOrderedIds } from '../../../hooks/useFolderManager';\nimport { useChatAnimationType } from './hooks';\n\nimport InfiniteScroll from '../../ui/InfiniteScroll';\nimport Loading from '../../ui/Loading';\nimport Chat from './Chat';\nimport EmptyFolder from './EmptyFolder';\n\ntype OwnProps = {\n folderType: 'all' | 'archived' | 'folder';\n folderId?: number;\n isActive: boolean;\n lastSyncTime?: number;\n foldersDispatch?: FolderEditDispatch;\n onScreenSelect?: (screen: SettingsScreens) => void;\n};\n\nconst ChatList: FC = ({\n folderType,\n folderId,\n isActive,\n foldersDispatch,\n onScreenSelect,\n}) => {\n const { openChat, openNextChat } = getActions();\n\n const resolvedFolderId = (\n folderType === 'all' ? ALL_FOLDER_ID : folderType === 'archived' ? ARCHIVED_FOLDER_ID : folderId!\n );\n\n const orderedIds = useFolderManagerForOrderedIds(resolvedFolderId);\n\n const orderById = useMemo(() => {\n if (!orderedIds) {\n return undefined;\n }\n\n return orderedIds.reduce((acc, id, i) => {\n acc[id] = i;\n return acc;\n }, {} as Record);\n }, [orderedIds]);\n\n const prevOrderById = usePrevious(orderById);\n\n const orderDiffById = useMemo(() => {\n if (!orderById || !prevOrderById) {\n return {};\n }\n\n return mapValues(orderById, (order, id) => {\n return prevOrderById[id] !== undefined ? order - prevOrderById[id] : -Infinity;\n });\n }, [orderById, prevOrderById]);\n\n const [viewportIds, getMore] = useInfiniteScroll(undefined, orderedIds, undefined, CHAT_LIST_SLICE);\n\n // Support + and + to navigate between chats\n useEffect(() => {\n if (!isActive || !orderedIds) {\n return undefined;\n }\n\n function handleKeyDown(e: KeyboardEvent) {\n if (IS_PWA && ((IS_MAC_OS && e.metaKey) || (!IS_MAC_OS && e.ctrlKey)) && e.code.startsWith('Digit')) {\n const [, digit] = e.code.match(/Digit(\\d)/) || [];\n if (!digit) return;\n\n const position = Number(digit) - 1;\n if (position > orderedIds!.length - 1) return;\n\n openChat({ id: orderedIds![position], shouldReplaceHistory: true });\n }\n\n if (e.altKey) {\n const targetIndexDelta = e.key === 'ArrowDown' ? 1 : e.key === 'ArrowUp' ? -1 : undefined;\n if (!targetIndexDelta) return;\n\n e.preventDefault();\n openNextChat({ targetIndexDelta, orderedIds });\n }\n }\n\n document.addEventListener('keydown', handleKeyDown);\n\n return () => {\n document.removeEventListener('keydown', handleKeyDown);\n };\n }, [isActive, openChat, openNextChat, orderedIds]);\n\n const getAnimationType = useChatAnimationType(orderDiffById);\n\n function renderChats() {\n const viewportOffset = orderedIds!.indexOf(viewportIds![0]);\n const pinnedCount = getPinnedChatsCount(resolvedFolderId) || 0;\n\n return viewportIds!.map((id, i) => (\n \n ));\n }\n\n return (\n \n {viewportIds?.length ? (\n renderChats()\n ) : viewportIds && !viewportIds.length ? (\n (\n \n )\n ) : (\n \n )}\n \n );\n};\n\nexport default memo(ChatList);\n","import { ApiChat, ApiMessage, ApiUser } from '../../../../api/types';\nimport {\n getChatTitle,\n getSenderTitle,\n isUserId,\n isChatGroup,\n} from '../../../../global/helpers';\nimport { LangFn } from '../../../../hooks/useLang';\n\nexport function getSenderName(\n lang: LangFn, message: ApiMessage, chatsById: Record, usersById: Record,\n) {\n const { senderId } = message;\n if (!senderId) {\n return undefined;\n }\n\n const sender = isUserId(senderId) ? usersById[senderId] : chatsById[senderId];\n\n let senderName = getSenderTitle(lang, sender);\n\n const chat = chatsById[message.chatId];\n if (chat) {\n if (isUserId(senderId) && (sender as ApiUser).isSelf) {\n senderName = `${lang('FromYou')} → ${getChatTitle(lang, chat)}`;\n } else if (isChatGroup(chat)) {\n senderName += ` → ${getChatTitle(lang, chat)}`;\n }\n }\n\n return senderName;\n}\n","import React, { FC, memo } from '../../../lib/teact/teact';\nimport { OwnProps } from './CustomSendMenu';\nimport { Bundles } from '../../../util/moduleLoader';\n\nimport useModuleLoader from '../../../hooks/useModuleLoader';\n\nconst CustomSendMenuAsync: FC = (props) => {\n const { isOpen } = props;\n const CustomSend = useModuleLoader(Bundles.Extra, 'CustomSendMenu', !isOpen);\n\n // eslint-disable-next-line react/jsx-props-no-spreading\n return CustomSend ? : undefined;\n};\n\nexport default memo(CustomSendMenuAsync);\n","import React, { FC, memo } from '../../../lib/teact/teact';\n\nimport useFlag from '../../../hooks/useFlag';\nimport buildClassName from '../../../util/buildClassName';\n\nimport './DropTarget.scss';\n\nexport type OwnProps = {\n isQuick?: boolean;\n onFileSelect: (e: React.DragEvent) => void;\n};\n\nconst DropTarget: FC = ({ isQuick, onFileSelect }) => {\n const [isHovered, markHovered, unmarkHovered] = useFlag();\n\n const handleDragEnter = () => { markHovered(); };\n const handleDragLeave = (e: React.DragEvent) => {\n const { relatedTarget: toTarget } = e;\n\n if (toTarget) {\n e.stopPropagation();\n }\n\n unmarkHovered();\n };\n\n const className = buildClassName(\n 'DropTarget',\n isHovered && 'hovered',\n );\n\n return (\n \n
\n
\n
Drop files here to send them
\n
{isQuick ? 'in a quick way' : 'without compression'}
\n
\n
\n );\n};\n\nexport default memo(DropTarget);\n","import React, {\n FC, memo, useCallback, useEffect, useRef,\n} from '../../../lib/teact/teact';\n\nimport useShowTransition from '../../../hooks/useShowTransition';\nimport buildClassName from '../../../util/buildClassName';\nimport getFilesFromDataTransferItems from './helpers/getFilesFromDataTransferItems';\n\nimport captureEscKeyListener from '../../../util/captureEscKeyListener';\nimport usePrevious from '../../../hooks/usePrevious';\n\nimport Portal from '../../ui/Portal';\nimport DropTarget from './DropTarget';\n\nimport './DropArea.scss';\n\nexport type OwnProps = {\n isOpen: boolean;\n withQuick?: boolean;\n onHide: NoneToVoidFunction;\n onFileSelect: (files: File[], isQuick: boolean) => void;\n};\n\nexport enum DropAreaState {\n None = 'none',\n Document = 'document',\n QuickFile = 'quick_file',\n}\n\nconst DROP_LEAVE_TIMEOUT_MS = 150;\n\nconst DropArea: FC = ({\n isOpen, withQuick, onHide, onFileSelect,\n}) => {\n // eslint-disable-next-line no-null/no-null\n const hideTimeoutRef = useRef(null);\n const prevWithQuick = usePrevious(withQuick);\n const { shouldRender, transitionClassNames } = useShowTransition(isOpen);\n\n useEffect(() => (isOpen ? captureEscKeyListener(onHide) : undefined), [isOpen, onHide]);\n\n const handleFilesDrop = useCallback(async (e: React.DragEvent) => {\n const { dataTransfer: dt } = e;\n let files: File[] = [];\n\n if (dt.files && dt.files.length > 0 && (!dt.items || !dt.items.length)) {\n files = files.concat(Array.from(dt.files));\n } else if (dt.items && dt.items.length > 0) {\n const folderFiles = await getFilesFromDataTransferItems(dt.items);\n if (folderFiles.length) {\n files = files.concat(folderFiles);\n }\n }\n\n onHide();\n onFileSelect(files, false);\n }, [onFileSelect, onHide]);\n\n const handleQuickFilesDrop = useCallback((e: React.DragEvent) => {\n const { dataTransfer: dt } = e;\n\n if (dt.files && dt.files.length > 0) {\n onHide();\n onFileSelect(Array.from(dt.files), true);\n }\n }, [onFileSelect, onHide]);\n\n const handleDragLeave = useCallback((e: React.DragEvent) => {\n e.stopPropagation();\n\n const { target: fromTarget, relatedTarget: toTarget } = e;\n\n // Esc button pressed during drag event\n if ((fromTarget as HTMLDivElement).matches('.DropTarget, .DropArea') && !toTarget) {\n hideTimeoutRef.current = window.setTimeout(() => {\n onHide();\n }, DROP_LEAVE_TIMEOUT_MS);\n }\n }, [onHide]);\n\n const handleDragOver = () => {\n if (hideTimeoutRef.current) {\n window.clearTimeout(hideTimeoutRef.current);\n }\n };\n\n if (!shouldRender) {\n return undefined;\n }\n\n const className = buildClassName(\n 'DropArea',\n transitionClassNames,\n );\n\n return (\n \n
\n \n {(withQuick || prevWithQuick) && }\n
\n
\n );\n};\n\nexport default memo(DropArea);\n","import React, { FC, memo } from '../../../lib/teact/teact';\nimport { OwnProps } from './EmojiTooltip';\nimport { Bundles } from '../../../util/moduleLoader';\n\nimport useModuleLoader from '../../../hooks/useModuleLoader';\n\nconst EmojiTooltipAsync: FC = (props) => {\n const { isOpen } = props;\n const EmojiTooltip = useModuleLoader(Bundles.Extra, 'EmojiTooltip', !isOpen);\n\n // eslint-disable-next-line react/jsx-props-no-spreading\n return EmojiTooltip ? : undefined;\n};\n\nexport default memo(EmojiTooltipAsync);\n","import { ChangeEvent } from 'react';\nimport React, {\n FC, useEffect, useRef, memo, useState, useCallback,\n} from '../../../lib/teact/teact';\nimport { getActions, withGlobal } from '../../../global';\n\nimport { IAnchorPosition, ISettings } from '../../../types';\n\nimport { EDITABLE_INPUT_ID } from '../../../config';\nimport { selectReplyingToId } from '../../../global/selectors';\nimport { debounce } from '../../../util/schedulers';\nimport focusEditableElement from '../../../util/focusEditableElement';\nimport buildClassName from '../../../util/buildClassName';\nimport {\n IS_ANDROID, IS_EMOJI_SUPPORTED, IS_IOS, IS_SINGLE_COLUMN_LAYOUT, IS_TOUCH_ENV,\n} from '../../../util/environment';\nimport captureKeyboardListeners from '../../../util/captureKeyboardListeners';\nimport useLayoutEffectWithPrevDeps from '../../../hooks/useLayoutEffectWithPrevDeps';\nimport useFlag from '../../../hooks/useFlag';\nimport { isHeavyAnimating } from '../../../hooks/useHeavyAnimationCheck';\nimport useSendMessageAction from '../../../hooks/useSendMessageAction';\nimport useLang from '../../../hooks/useLang';\nimport parseEmojiOnlyString from '../../common/helpers/parseEmojiOnlyString';\nimport { isSelectionInsideInput } from './helpers/selection';\nimport renderText from '../../common/helpers/renderText';\n\nimport TextFormatter from './TextFormatter';\n\nconst CONTEXT_MENU_CLOSE_DELAY_MS = 100;\n// Focus slows down animation, also it breaks transition layout in Chrome\nconst FOCUS_DELAY_MS = 350;\nconst TRANSITION_DURATION_FACTOR = 50;\n\ntype OwnProps = {\n id: string;\n chatId: string;\n threadId: number;\n isAttachmentModalInput?: boolean;\n editableInputId?: string;\n html: string;\n placeholder: string;\n forcedPlaceholder?: string;\n canAutoFocus: boolean;\n shouldSuppressFocus?: boolean;\n shouldSuppressTextFormatter?: boolean;\n onUpdate: (html: string) => void;\n onSuppressedFocus?: () => void;\n onSend: () => void;\n};\n\ntype StateProps = {\n replyingToId?: number;\n noTabCapture?: boolean;\n messageSendKeyCombo?: ISettings['messageSendKeyCombo'];\n};\n\nconst MAX_INPUT_HEIGHT = IS_SINGLE_COLUMN_LAYOUT ? 256 : 416;\nconst TAB_INDEX_PRIORITY_TIMEOUT = 2000;\nconst TEXT_FORMATTER_SAFE_AREA_PX = 90;\n// For some reason Safari inserts `
` after user removes text from input\nconst SAFARI_BR = '
';\n\nfunction clearSelection() {\n const selection = window.getSelection();\n if (!selection) {\n return;\n }\n\n if (selection.removeAllRanges) {\n selection.removeAllRanges();\n } else if (selection.empty) {\n selection.empty();\n }\n}\n\nconst MessageInput: FC = ({\n id,\n chatId,\n threadId,\n isAttachmentModalInput,\n editableInputId,\n html,\n placeholder,\n forcedPlaceholder,\n canAutoFocus,\n shouldSuppressFocus,\n shouldSuppressTextFormatter,\n replyingToId,\n noTabCapture,\n messageSendKeyCombo,\n onUpdate,\n onSuppressedFocus,\n onSend,\n}) => {\n const {\n editLastMessage,\n replyToNextMessage,\n } = getActions();\n\n // eslint-disable-next-line no-null/no-null\n const inputRef = useRef(null);\n // eslint-disable-next-line no-null/no-null\n const cloneRef = useRef(null);\n\n const lang = useLang();\n const isContextMenuOpenRef = useRef(false);\n const [isTextFormatterOpen, openTextFormatter, closeTextFormatter] = useFlag();\n const [textFormatterAnchorPosition, setTextFormatterAnchorPosition] = useState();\n const [selectedRange, setSelectedRange] = useState();\n\n const sendMessageAction = useSendMessageAction(chatId, threadId);\n\n useEffect(() => {\n if (!isAttachmentModalInput) return;\n updateInputHeight(false);\n }, [isAttachmentModalInput]);\n\n useLayoutEffectWithPrevDeps(([prevHtml]) => {\n if (html !== inputRef.current!.innerHTML) {\n inputRef.current!.innerHTML = html;\n }\n\n if (html !== cloneRef.current!.innerHTML) {\n cloneRef.current!.innerHTML = html;\n }\n\n if (prevHtml !== undefined && prevHtml !== html) {\n updateInputHeight(!html.length);\n }\n }, [html]);\n\n const chatIdRef = useRef(chatId);\n chatIdRef.current = chatId;\n const focusInput = useCallback(() => {\n if (!inputRef.current) {\n return;\n }\n\n if (isHeavyAnimating()) {\n setTimeout(focusInput, FOCUS_DELAY_MS);\n return;\n }\n\n focusEditableElement(inputRef.current!);\n }, []);\n\n const handleCloseTextFormatter = useCallback(() => {\n closeTextFormatter();\n clearSelection();\n }, [closeTextFormatter]);\n\n function checkSelection() {\n // Disable the formatter on iOS devices for now.\n if (IS_IOS) {\n return false;\n }\n\n const selection = window.getSelection();\n if (!selection || !selection.rangeCount || isContextMenuOpenRef.current) {\n closeTextFormatter();\n return false;\n }\n\n const selectionRange = selection.getRangeAt(0);\n const selectedText = selectionRange.toString().trim();\n if (\n shouldSuppressTextFormatter\n || !isSelectionInsideInput(selectionRange, editableInputId || EDITABLE_INPUT_ID)\n || !selectedText\n || parseEmojiOnlyString(selectedText)\n || !selectionRange.START_TO_END\n ) {\n closeTextFormatter();\n return false;\n }\n\n return true;\n }\n\n function processSelection() {\n if (!checkSelection()) {\n return;\n }\n\n const selectionRange = window.getSelection()!.getRangeAt(0);\n const selectionRect = selectionRange.getBoundingClientRect();\n const inputRect = inputRef.current!.getBoundingClientRect();\n\n let x = (selectionRect.left + selectionRect.width / 2) - inputRect.left;\n\n if (x < TEXT_FORMATTER_SAFE_AREA_PX) {\n x = TEXT_FORMATTER_SAFE_AREA_PX;\n } else if (x > inputRect.width - TEXT_FORMATTER_SAFE_AREA_PX) {\n x = inputRect.width - TEXT_FORMATTER_SAFE_AREA_PX;\n }\n\n setTextFormatterAnchorPosition({\n x,\n y: selectionRect.top - inputRect.top,\n });\n\n setSelectedRange(selectionRange);\n openTextFormatter();\n }\n\n function handleMouseDown(event: React.MouseEvent) {\n function handleMouseUp() {\n processSelection();\n\n event.target.removeEventListener('mouseup', handleMouseUp);\n }\n\n if (event.button !== 2) {\n event.target.addEventListener('mouseup', handleMouseUp);\n return;\n }\n\n if (isContextMenuOpenRef.current === true) {\n return;\n }\n\n isContextMenuOpenRef.current = true;\n\n function closeContextMenuMouseListener() {\n setTimeout(() => {\n isContextMenuOpenRef.current = false;\n }, CONTEXT_MENU_CLOSE_DELAY_MS);\n\n window.removeEventListener('mouseup', closeContextMenuMouseListener);\n }\n\n function closeContextMenuKeyListener(e: KeyboardEvent) {\n if (e.key !== 'Esc' && e.key !== 'Escape') {\n return;\n }\n\n setTimeout(() => {\n isContextMenuOpenRef.current = false;\n }, CONTEXT_MENU_CLOSE_DELAY_MS);\n\n window.removeEventListener('keydown', closeContextMenuKeyListener);\n }\n\n document.addEventListener('mousedown', closeContextMenuMouseListener);\n document.addEventListener('keydown', closeContextMenuKeyListener);\n }\n\n function handleKeyDown(e: React.KeyboardEvent) {\n function handleKeyUp() {\n processSelection();\n\n e.target.removeEventListener('keyup', handleKeyUp);\n }\n\n if (!html.length && (e.metaKey || e.ctrlKey)) {\n const targetIndexDelta = e.key === 'ArrowDown' ? 1 : e.key === 'ArrowUp' ? -1 : undefined;\n if (targetIndexDelta) {\n e.preventDefault();\n\n replyToNextMessage({ targetIndexDelta });\n return;\n }\n }\n\n if (e.key === 'Enter' && !e.shiftKey) {\n if (\n !(IS_IOS || IS_ANDROID)\n && (\n (messageSendKeyCombo === 'enter' && !e.shiftKey)\n || (messageSendKeyCombo === 'ctrl-enter' && (e.ctrlKey || e.metaKey))\n )\n ) {\n e.preventDefault();\n\n closeTextFormatter();\n onSend();\n }\n } else if (e.key === 'ArrowUp' && !html.length && !e.metaKey && !e.ctrlKey && !e.altKey) {\n e.preventDefault();\n editLastMessage();\n } else {\n e.target.addEventListener('keyup', handleKeyUp);\n }\n }\n\n function handleChange(e: ChangeEvent) {\n const { innerHTML, textContent } = e.currentTarget;\n\n onUpdate(innerHTML === SAFARI_BR ? '' : innerHTML);\n sendMessageAction({ type: 'typing' });\n\n // Reset focus on the input to remove any active styling when input is cleared\n if (\n !IS_TOUCH_ENV\n && (!textContent || !textContent.length)\n // When emojis are not supported, innerHTML contains an emoji img tag that doesn't exist in the textContext\n && !(!IS_EMOJI_SUPPORTED && innerHTML.includes('emoji-small'))\n ) {\n const selection = window.getSelection()!;\n if (selection) {\n inputRef.current!.blur();\n selection.removeAllRanges();\n focusEditableElement(inputRef.current!, true);\n }\n }\n }\n\n function stopEvent(e: React.MouseEvent) {\n if (!checkSelection()) {\n return;\n }\n\n e.preventDefault();\n e.stopPropagation();\n }\n\n function updateInputHeight(willSend = false) {\n const input = inputRef.current!;\n const clone = cloneRef.current!;\n const currentHeight = Number(input.style.height.replace('px', ''));\n const newHeight = Math.min(clone.scrollHeight, MAX_INPUT_HEIGHT);\n if (newHeight === currentHeight) {\n return;\n }\n\n const transitionDuration = Math.round(\n TRANSITION_DURATION_FACTOR * Math.log(Math.abs(newHeight - currentHeight)),\n );\n\n const exec = () => {\n input.style.height = `${newHeight}px`;\n input.style.transitionDuration = `${transitionDuration}ms`;\n input.classList.toggle('overflown', clone.scrollHeight > MAX_INPUT_HEIGHT);\n };\n\n if (willSend) {\n // Sync with sending animation\n requestAnimationFrame(exec);\n } else {\n exec();\n }\n }\n\n useEffect(() => {\n if (IS_TOUCH_ENV) {\n return;\n }\n\n if (canAutoFocus) {\n focusInput();\n }\n }, [chatId, focusInput, replyingToId, canAutoFocus]);\n\n useEffect(() => {\n if (noTabCapture) {\n return undefined;\n }\n\n const captureFirstTab = debounce((e: KeyboardEvent) => {\n if (e.key === 'Tab') {\n e.preventDefault();\n requestAnimationFrame(focusInput);\n }\n }, TAB_INDEX_PRIORITY_TIMEOUT, true, false);\n\n return captureKeyboardListeners({ onTab: captureFirstTab });\n }, [focusInput, noTabCapture]);\n\n useEffect(() => {\n const input = inputRef.current!;\n\n function suppressFocus() {\n input.blur();\n }\n\n if (shouldSuppressFocus) {\n input.addEventListener('focus', suppressFocus);\n }\n\n return () => {\n input.removeEventListener('focus', suppressFocus);\n };\n }, [shouldSuppressFocus]);\n\n const className = buildClassName(\n 'form-control custom-scroll',\n html.length > 0 && 'touched',\n shouldSuppressFocus && 'focus-disabled',\n );\n\n return (\n
\n \n
\n {!forcedPlaceholder && {placeholder}}\n \n {forcedPlaceholder && {renderText(forcedPlaceholder!)}}\n
\n );\n};\n\nexport default memo(withGlobal(\n (global, { chatId, threadId }: OwnProps): StateProps => {\n const { messageSendKeyCombo } = global.settings.byKey;\n\n return {\n messageSendKeyCombo,\n replyingToId: chatId && threadId ? selectReplyingToId(global, chatId, threadId) : undefined,\n noTabCapture: global.isPollModalOpen || global.payment.isPaymentModalOpen,\n };\n },\n)(MessageInput));\n","import React, {\n FC, memo, useCallback, useEffect, useRef, useState,\n} from '../../../lib/teact/teact';\n\nimport { IAnchorPosition } from '../../../types';\nimport { ApiMessageEntityTypes } from '../../../api/types';\n\nimport { EDITABLE_INPUT_ID } from '../../../config';\nimport buildClassName from '../../../util/buildClassName';\nimport { ensureProtocol } from '../../../util/ensureProtocol';\nimport captureEscKeyListener from '../../../util/captureEscKeyListener';\nimport getKeyFromEvent from '../../../util/getKeyFromEvent';\nimport useShowTransition from '../../../hooks/useShowTransition';\nimport useVirtualBackdrop from '../../../hooks/useVirtualBackdrop';\nimport useFlag from '../../../hooks/useFlag';\nimport useLang from '../../../hooks/useLang';\n\nimport Button from '../../ui/Button';\n\nimport './TextFormatter.scss';\n\nexport type OwnProps = {\n isOpen: boolean;\n anchorPosition?: IAnchorPosition;\n selectedRange?: Range;\n setSelectedRange: (range: Range) => void;\n onClose: () => void;\n};\n\ninterface ISelectedTextFormats {\n bold?: boolean;\n italic?: boolean;\n underline?: boolean;\n strikethrough?: boolean;\n monospace?: boolean;\n spoiler?: boolean;\n}\n\nconst TEXT_FORMAT_BY_TAG_NAME: Record = {\n B: 'bold',\n STRONG: 'bold',\n I: 'italic',\n EM: 'italic',\n U: 'underline',\n DEL: 'strikethrough',\n CODE: 'monospace',\n SPAN: 'spoiler',\n};\nconst fragmentEl = document.createElement('div');\n\nconst TextFormatter: FC = ({\n isOpen,\n anchorPosition,\n selectedRange,\n setSelectedRange,\n onClose,\n}) => {\n // eslint-disable-next-line no-null/no-null\n const containerRef = useRef(null);\n // eslint-disable-next-line no-null/no-null\n const linkUrlInputRef = useRef(null);\n const { shouldRender, transitionClassNames } = useShowTransition(isOpen);\n const [isLinkControlOpen, openLinkControl, closeLinkControl] = useFlag();\n const [linkUrl, setLinkUrl] = useState('');\n const [isEditingLink, setIsEditingLink] = useState(false);\n const [inputClassName, setInputClassName] = useState();\n const [selectedTextFormats, setSelectedTextFormats] = useState({});\n\n useEffect(() => (isOpen ? captureEscKeyListener(onClose) : undefined), [isOpen, onClose]);\n useVirtualBackdrop(\n isOpen,\n containerRef,\n onClose,\n );\n\n useEffect(() => {\n if (isLinkControlOpen) {\n linkUrlInputRef.current!.focus();\n } else {\n setLinkUrl('');\n setIsEditingLink(false);\n }\n }, [isLinkControlOpen]);\n\n useEffect(() => {\n if (!shouldRender) {\n closeLinkControl();\n setSelectedTextFormats({});\n setInputClassName(undefined);\n }\n }, [closeLinkControl, shouldRender]);\n\n useEffect(() => {\n if (!isOpen || !selectedRange) {\n return;\n }\n\n const selectedFormats: ISelectedTextFormats = {};\n let { parentElement } = selectedRange.commonAncestorContainer;\n while (parentElement && parentElement.id !== EDITABLE_INPUT_ID) {\n const textFormat = TEXT_FORMAT_BY_TAG_NAME[parentElement.tagName];\n if (textFormat) {\n selectedFormats[textFormat] = true;\n }\n\n parentElement = parentElement.parentElement;\n }\n\n setSelectedTextFormats(selectedFormats);\n }, [isOpen, selectedRange, openLinkControl]);\n\n const restoreSelection = useCallback(() => {\n if (!selectedRange) {\n return;\n }\n\n const selection = window.getSelection();\n if (selection) {\n selection.removeAllRanges();\n selection.addRange(selectedRange);\n }\n }, [selectedRange]);\n\n const updateSelectedRange = useCallback(() => {\n const selection = window.getSelection();\n if (selection) {\n setSelectedRange(selection.getRangeAt(0));\n }\n }, [setSelectedRange]);\n\n const getSelectedText = useCallback(() => {\n if (!selectedRange) {\n return undefined;\n }\n fragmentEl.innerText = selectedRange.toString();\n\n return fragmentEl.innerHTML;\n }, [selectedRange]);\n\n const getSelectedElement = useCallback(() => {\n if (!selectedRange) {\n return undefined;\n }\n\n return selectedRange.commonAncestorContainer.parentElement;\n }, [selectedRange]);\n\n function updateInputStyles() {\n const input = linkUrlInputRef.current;\n if (!input) {\n return;\n }\n\n const { offsetWidth, scrollWidth, scrollLeft } = input;\n if (scrollWidth <= offsetWidth) {\n setInputClassName(undefined);\n return;\n }\n\n let className = '';\n if (scrollLeft < scrollWidth - offsetWidth) {\n className = 'mask-right';\n }\n if (scrollLeft > 0) {\n className += ' mask-left';\n }\n\n setInputClassName(className);\n }\n\n function handleLinkUrlChange(e: React.ChangeEvent) {\n setLinkUrl(e.target.value);\n updateInputStyles();\n }\n\n function getFormatButtonClassName(key: keyof ISelectedTextFormats) {\n if (selectedTextFormats[key]) {\n return 'active';\n }\n\n if (key === 'monospace' || key === 'strikethrough') {\n if (Object.keys(selectedTextFormats).some(\n (fKey) => fKey !== key && Boolean(selectedTextFormats[fKey as keyof ISelectedTextFormats]),\n )) {\n return 'disabled';\n }\n } else if (selectedTextFormats.monospace || selectedTextFormats.strikethrough) {\n return 'disabled';\n }\n\n return undefined;\n }\n\n const handleSpoilerText = useCallback(() => {\n if (selectedTextFormats.spoiler) {\n const element = getSelectedElement();\n if (\n !selectedRange\n || !element\n || element.dataset.entityType !== ApiMessageEntityTypes.Spoiler\n || !element.textContent\n ) {\n return;\n }\n\n element.replaceWith(element.textContent);\n setSelectedTextFormats((selectedFormats) => ({\n ...selectedFormats,\n spoiler: false,\n }));\n\n return;\n }\n\n const text = getSelectedText();\n document.execCommand(\n 'insertHTML', false, `${text}`,\n );\n onClose();\n }, [getSelectedElement, getSelectedText, onClose, selectedRange, selectedTextFormats.spoiler]);\n\n const handleBoldText = useCallback(() => {\n setSelectedTextFormats((selectedFormats) => {\n // Somehow re-applying 'bold' command to already bold text doesn't work\n document.execCommand(selectedFormats.bold ? 'removeFormat' : 'bold');\n Object.keys(selectedFormats).forEach((key) => {\n if ((key === 'italic' || key === 'underline') && Boolean(selectedFormats[key])) {\n document.execCommand(key);\n }\n });\n\n updateSelectedRange();\n return {\n ...selectedFormats,\n bold: !selectedFormats.bold,\n };\n });\n }, [updateSelectedRange]);\n\n const handleItalicText = useCallback(() => {\n document.execCommand('italic');\n updateSelectedRange();\n setSelectedTextFormats((selectedFormats) => ({\n ...selectedFormats,\n italic: !selectedFormats.italic,\n }));\n }, [updateSelectedRange]);\n\n const handleUnderlineText = useCallback(() => {\n document.execCommand('underline');\n updateSelectedRange();\n setSelectedTextFormats((selectedFormats) => ({\n ...selectedFormats,\n underline: !selectedFormats.underline,\n }));\n }, [updateSelectedRange]);\n\n const handleStrikethroughText = useCallback(() => {\n if (selectedTextFormats.strikethrough) {\n const element = getSelectedElement();\n if (\n !selectedRange\n || !element\n || element.tagName !== 'DEL'\n || !element.textContent\n ) {\n return;\n }\n\n element.replaceWith(element.textContent);\n setSelectedTextFormats((selectedFormats) => ({\n ...selectedFormats,\n strikethrough: false,\n }));\n\n return;\n }\n\n const text = getSelectedText();\n document.execCommand('insertHTML', false, `${text}`);\n onClose();\n }, [\n getSelectedElement, getSelectedText, onClose, selectedRange, selectedTextFormats.strikethrough,\n ]);\n\n const handleMonospaceText = useCallback(() => {\n if (selectedTextFormats.monospace) {\n const element = getSelectedElement();\n if (\n !selectedRange\n || !element\n || element.tagName !== 'CODE'\n || !element.textContent\n ) {\n return;\n }\n\n element.replaceWith(element.textContent);\n setSelectedTextFormats((selectedFormats) => ({\n ...selectedFormats,\n monospace: false,\n }));\n\n return;\n }\n\n const text = getSelectedText();\n document.execCommand('insertHTML', false, `${text}`);\n onClose();\n }, [\n getSelectedElement, getSelectedText, onClose, selectedRange, selectedTextFormats.monospace,\n ]);\n\n const handleLinkUrlConfirm = useCallback(() => {\n const formattedLinkUrl = (ensureProtocol(linkUrl) || '').split('%').map(encodeURI).join('%');\n\n if (isEditingLink) {\n const element = getSelectedElement();\n if (!element || element.tagName !== 'A') {\n return;\n }\n\n (element as HTMLAnchorElement).href = formattedLinkUrl;\n\n onClose();\n\n return;\n }\n\n const text = getSelectedText();\n restoreSelection();\n document.execCommand(\n 'insertHTML',\n false,\n `${text}`,\n );\n onClose();\n }, [getSelectedElement, getSelectedText, isEditingLink, linkUrl, onClose, restoreSelection]);\n\n const handleKeyDown = useCallback((e: KeyboardEvent) => {\n const HANDLERS_BY_KEY: Record = {\n k: openLinkControl,\n b: handleBoldText,\n u: handleUnderlineText,\n i: handleItalicText,\n m: handleMonospaceText,\n s: handleStrikethroughText,\n p: handleSpoilerText,\n };\n\n const handler = HANDLERS_BY_KEY[getKeyFromEvent(e)];\n\n if (\n e.altKey\n || !(e.ctrlKey || e.metaKey)\n || !handler\n ) {\n return;\n }\n\n e.preventDefault();\n e.stopPropagation();\n handler();\n }, [\n openLinkControl, handleBoldText, handleUnderlineText, handleItalicText, handleMonospaceText,\n handleStrikethroughText, handleSpoilerText,\n ]);\n\n useEffect(() => {\n if (isOpen) {\n document.addEventListener('keydown', handleKeyDown);\n }\n\n return () => document.removeEventListener('keydown', handleKeyDown);\n }, [isOpen, handleKeyDown]);\n\n const lang = useLang();\n\n function handleContainerKeyDown(e: React.KeyboardEvent) {\n if (e.key === 'Enter' && isLinkControlOpen) {\n handleLinkUrlConfirm();\n e.preventDefault();\n }\n }\n\n if (!shouldRender) {\n return undefined;\n }\n\n const className = buildClassName(\n 'TextFormatter',\n transitionClassNames,\n isLinkControlOpen && 'link-control-shown',\n );\n\n const linkUrlConfirmClassName = buildClassName(\n 'TextFormatter-link-url-confirm',\n Boolean(linkUrl.length) && 'shown',\n );\n\n const style = anchorPosition\n ? `left: ${anchorPosition.x}px; top: ${anchorPosition.y}px;--text-formatter-left: ${anchorPosition.x}px;`\n : '';\n\n return (\n \n
\n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
\n \n
\n\n
\n
\n \n
\n\n \n \n
\n\n
\n
\n \n \n \n
\n
\n
\n
\n );\n};\n\nexport default memo(TextFormatter);\n","export default async function getFilesFromDataTransferItems(dataTransferItems: DataTransferItemList) {\n const files: File[] = [];\n\n function traverseFileTreePromise(entry: FileSystemEntry | File, item: DataTransferItem) {\n return new Promise((resolve) => {\n if (entry instanceof File) {\n files.push(entry);\n resolve(entry);\n } else if (entry.isFile) {\n const itemFile = item.getAsFile();\n (entry as FileSystemFileEntry).file((file) => {\n files.push(file);\n resolve(file);\n }, () => {\n // iOS Safari throws an error \"NotFoundError: Path does not exist\" for files from the clipboard\n // https://stackoverflow.com/a/50059309\n if (itemFile) {\n files.push(itemFile);\n }\n resolve(itemFile);\n });\n } else if (entry.isDirectory) {\n const dirReader = (entry as FileSystemDirectoryEntry).createReader();\n dirReader.readEntries((entries) => {\n const entriesPromises = [];\n for (let i = 0; i < entries.length; i++) {\n entriesPromises.push(traverseFileTreePromise(entries[i], item));\n }\n resolve(Promise.all(entriesPromises));\n });\n }\n });\n }\n\n const entriesPromises = [];\n for (let i = 0; i < dataTransferItems.length; i++) {\n const item = dataTransferItems[i];\n if (item.kind === 'file') {\n const entry = item.webkitGetAsEntry() || item.getAsFile();\n if (entry) {\n entriesPromises.push(traverseFileTreePromise(entry, item));\n }\n }\n }\n\n await Promise.all(entriesPromises);\n\n return files;\n}\n","const RE_BR = /(
|)/g;\nconst RE_SPACE = /( |\\u00A0)/g;\nconst RE_CLEAN_HTML = /(
|<\\/div>)/gi;\nconst RE_EXTRA_NEW_LINE = /\\n$/i;\n\nexport function prepareForRegExp(html: string) {\n return html\n .replace(RE_SPACE, ' ')\n .replace(RE_BR, '\\n')\n .replace(RE_CLEAN_HTML, '')\n .replace(RE_EXTRA_NEW_LINE, '');\n}\n","const MAX_NESTING_PARENTS = 5;\n\nexport function isSelectionInsideInput(selectionRange: Range, inputId: string) {\n const { commonAncestorContainer } = selectionRange;\n let parentNode: HTMLElement | null = commonAncestorContainer as HTMLElement;\n let iterations = 1;\n while (parentNode && parentNode.id !== inputId && iterations < MAX_NESTING_PARENTS) {\n parentNode = parentNode.parentElement;\n iterations++;\n }\n\n return Boolean(parentNode && parentNode.id === inputId);\n}\n","import { areSortedArraysEqual } from './iteratees';\n\nconst cache = new WeakMap();\n\nexport default function memoized(fn: T) {\n return (...args: Parameters): ReturnType => {\n const cached = cache.get(fn);\n if (cached && areSortedArraysEqual(cached.lastArgs, args)) {\n return cached.lastResult;\n }\n\n const result = fn(...args);\n cache.set(fn, { lastArgs: args, lastResult: result });\n return result;\n };\n}\n","import {\n useCallback, useEffect, useState,\n} from '../../../../lib/teact/teact';\n\nimport { EDITABLE_INPUT_CSS_SELECTOR, EDITABLE_INPUT_ID } from '../../../../config';\nimport { MEMO_EMPTY_ARRAY } from '../../../../util/memo';\nimport { prepareForRegExp } from '../helpers/prepareForRegExp';\nimport {\n EmojiData, EmojiModule, EmojiRawData, uncompressEmoji,\n} from '../../../../util/emoji';\nimport focusEditableElement from '../../../../util/focusEditableElement';\nimport {\n buildCollectionByKey, flatten, mapValues, pickTruthy, unique,\n} from '../../../../util/iteratees';\nimport memoized from '../../../../util/memoized';\nimport useFlag from '../../../../hooks/useFlag';\nimport renderText from '../../../common/helpers/renderText';\n\ninterface Library {\n keywords: string[];\n byKeyword: Record;\n names: string[];\n byName: Record;\n}\n\nlet emojiDataPromise: Promise;\nlet emojiRawData: EmojiRawData;\nlet emojiData: EmojiData;\n\nlet RE_EMOJI_SEARCH: RegExp;\nconst EMOJIS_LIMIT = 36;\nconst FILTER_MIN_LENGTH = 2;\n\nconst prepareRecentEmojisMemo = memoized(prepareRecentEmojis);\nconst prepareLibraryMemo = memoized(prepareLibrary);\nconst searchInLibraryMemo = memoized(searchInLibrary);\n\ntry {\n RE_EMOJI_SEARCH = /(^|\\s):[-+_:\\p{L}\\p{N}]*$/gui;\n} catch (e) {\n // Support for older versions of firefox\n RE_EMOJI_SEARCH = /(^|\\s):[-+_:\\d\\wа-яё]*$/gi;\n}\n\nexport default function useEmojiTooltip(\n isAllowed: boolean,\n htmlRef: { current: string },\n recentEmojiIds: string[],\n inputId = EDITABLE_INPUT_ID,\n onUpdateHtml: (html: string) => void,\n baseEmojiKeywords?: Record,\n emojiKeywords?: Record,\n isDisabled = false,\n) {\n const [isOpen, markIsOpen, unmarkIsOpen] = useFlag();\n const [byId, setById] = useState | undefined>();\n const [shouldForceInsertEmoji, setShouldForceInsertEmoji] = useState(false);\n const [filteredEmojis, setFilteredEmojis] = useState(MEMO_EMPTY_ARRAY);\n\n // Initialize data on first render.\n useEffect(() => {\n if (isDisabled) return;\n const exec = () => {\n setById(emojiData.emojis);\n };\n\n if (emojiData) {\n exec();\n } else {\n ensureEmojiData()\n .then(exec);\n }\n }, [isDisabled]);\n\n const html = htmlRef.current;\n useEffect(() => {\n if (!isAllowed || !html || !byId || isDisabled) {\n unmarkIsOpen();\n return;\n }\n\n const code = html.includes(':') && getEmojiCode(html);\n if (!code) {\n setFilteredEmojis(MEMO_EMPTY_ARRAY);\n unmarkIsOpen();\n return;\n }\n\n const forceSend = code.length > 2 && code.endsWith(':');\n const filter = code.substr(1, forceSend ? code.length - 2 : undefined);\n let matched: Emoji[] = MEMO_EMPTY_ARRAY;\n\n setShouldForceInsertEmoji(forceSend);\n\n if (!filter) {\n matched = prepareRecentEmojisMemo(byId, recentEmojiIds, EMOJIS_LIMIT);\n } else if (filter.length >= FILTER_MIN_LENGTH) {\n const library = prepareLibraryMemo(byId, baseEmojiKeywords, emojiKeywords);\n matched = searchInLibraryMemo(library, filter, EMOJIS_LIMIT);\n }\n\n if (matched.length) {\n if (!forceSend) {\n markIsOpen();\n }\n setFilteredEmojis(matched);\n } else {\n unmarkIsOpen();\n }\n }, [\n byId, html, isAllowed, markIsOpen, recentEmojiIds, unmarkIsOpen, setShouldForceInsertEmoji,\n isDisabled, baseEmojiKeywords, emojiKeywords,\n ]);\n\n const insertEmoji = useCallback((textEmoji: string, isForce?: boolean) => {\n const currentHtml = htmlRef.current;\n const atIndex = currentHtml.lastIndexOf(':', isForce ? currentHtml.lastIndexOf(':') - 1 : undefined);\n if (atIndex !== -1) {\n onUpdateHtml(`${currentHtml.substr(0, atIndex)}${renderText(textEmoji, ['emoji_html'])}`);\n let messageInput: HTMLDivElement;\n if (inputId === EDITABLE_INPUT_ID) {\n messageInput = document.querySelector(EDITABLE_INPUT_CSS_SELECTOR)!;\n } else {\n messageInput = document.getElementById(inputId) as HTMLDivElement;\n }\n requestAnimationFrame(() => {\n focusEditableElement(messageInput, true, true);\n });\n }\n\n unmarkIsOpen();\n }, [htmlRef, inputId, onUpdateHtml, unmarkIsOpen]);\n\n useEffect(() => {\n if (isOpen && shouldForceInsertEmoji && filteredEmojis.length) {\n insertEmoji(filteredEmojis[0].native, true);\n }\n }, [filteredEmojis, insertEmoji, isOpen, shouldForceInsertEmoji]);\n\n return {\n isEmojiTooltipOpen: isOpen,\n closeEmojiTooltip: unmarkIsOpen,\n filteredEmojis,\n insertEmoji,\n };\n}\n\nfunction getEmojiCode(html: string) {\n const emojis = prepareForRegExp(html).match(RE_EMOJI_SEARCH);\n\n return emojis ? emojis[0].trim() : undefined;\n}\n\nasync function ensureEmojiData() {\n if (!emojiDataPromise) {\n emojiDataPromise = import('emoji-data-ios/emoji-data.json') as unknown as Promise;\n emojiRawData = (await emojiDataPromise).default;\n\n emojiData = uncompressEmoji(emojiRawData);\n }\n\n return emojiDataPromise;\n}\n\nfunction prepareRecentEmojis(byId: Record, recentEmojiIds: string[], limit: number) {\n if (!byId || !recentEmojiIds.length) {\n return MEMO_EMPTY_ARRAY;\n }\n\n return Object.values(pickTruthy(byId, recentEmojiIds)).slice(0, limit);\n}\n\nfunction prepareLibrary(\n byId: Record,\n baseEmojiKeywords?: Record,\n emojiKeywords?: Record,\n): Library {\n const emojis = Object.values(byId);\n\n const byNative = buildCollectionByKey(emojis, 'native');\n const baseEmojisByKeyword = baseEmojiKeywords\n ? mapValues(baseEmojiKeywords, (natives) => {\n return Object.values(pickTruthy(byNative, natives));\n })\n : {};\n const emojisByKeyword = emojiKeywords\n ? mapValues(emojiKeywords, (natives) => {\n return Object.values(pickTruthy(byNative, natives));\n })\n : {};\n\n const byKeyword = { ...baseEmojisByKeyword, ...emojisByKeyword };\n const keywords = ([] as string[]).concat(Object.keys(baseEmojisByKeyword), Object.keys(emojisByKeyword));\n\n const byName = emojis.reduce((result, emoji) => {\n emoji.names.forEach((name) => {\n if (!result[name]) {\n result[name] = [];\n }\n\n result[name].push(emoji);\n });\n\n return result;\n }, {} as Record);\n\n const names = Object.keys(byName);\n\n return {\n byKeyword,\n keywords,\n byName,\n names,\n };\n}\n\nfunction searchInLibrary(library: Library, filter: string, limit: number) {\n const {\n byKeyword, keywords, byName, names,\n } = library;\n\n let matched: Emoji[] = MEMO_EMPTY_ARRAY;\n\n const matchedKeywords = keywords.filter((keyword) => keyword.startsWith(filter)).sort();\n matched = matched.concat(flatten(Object.values(pickTruthy(byKeyword!, matchedKeywords))));\n\n // Also search by names, which is useful for non-English languages\n const matchedNames = names.filter((name) => name.startsWith(filter));\n matched = matched.concat(flatten(Object.values(pickTruthy(byName, matchedNames))));\n\n matched = unique(matched);\n\n return matched.slice(0, limit);\n}\n","import {\n useCallback, useEffect, useState,\n} from '../../../../lib/teact/teact';\nimport { getGlobal } from '../../../../global';\n\nimport { ApiMessageEntityTypes, ApiChatMember, ApiUser } from '../../../../api/types';\nimport { EDITABLE_INPUT_ID } from '../../../../config';\nimport { filterUsersByName, getUserFirstOrLastName } from '../../../../global/helpers';\nimport { prepareForRegExp } from '../helpers/prepareForRegExp';\nimport focusEditableElement from '../../../../util/focusEditableElement';\nimport useFlag from '../../../../hooks/useFlag';\nimport { pickTruthy, unique } from '../../../../util/iteratees';\nimport { throttle } from '../../../../util/schedulers';\n\nconst runThrottled = throttle((cb) => cb(), 500, true);\nlet RE_USERNAME_SEARCH: RegExp;\n\ntry {\n RE_USERNAME_SEARCH = /(^|\\s)@[-_\\p{L}\\p{M}\\p{N}]*$/gui;\n} catch (e) {\n // Support for older versions of firefox\n RE_USERNAME_SEARCH = /(^|\\s)@[-_\\d\\wа-яё]*$/gi;\n}\n\nexport default function useMentionTooltip(\n canSuggestMembers: boolean | undefined,\n htmlRef: { current: string },\n onUpdateHtml: (html: string) => void,\n inputId: string = EDITABLE_INPUT_ID,\n groupChatMembers?: ApiChatMember[],\n topInlineBotIds?: string[],\n currentUserId?: string,\n) {\n const [isOpen, markIsOpen, unmarkIsOpen] = useFlag();\n const [usersToMention, setUsersToMention] = useState();\n\n const updateFilteredUsers = useCallback((filter, withInlineBots: boolean) => {\n // No need for expensive global updates on users, so we avoid them\n const usersById = getGlobal().users.byId;\n\n if (!(groupChatMembers || topInlineBotIds) || !usersById) {\n setUsersToMention(undefined);\n\n return;\n }\n\n runThrottled(() => {\n const memberIds = groupChatMembers?.reduce((acc: string[], member) => {\n if (member.userId !== currentUserId) {\n acc.push(member.userId);\n }\n\n return acc;\n }, []);\n\n const filteredIds = filterUsersByName(unique([\n ...((withInlineBots && topInlineBotIds) || []),\n ...(memberIds || []),\n ]), usersById, filter);\n\n setUsersToMention(Object.values(pickTruthy(usersById, filteredIds)));\n });\n }, [currentUserId, groupChatMembers, topInlineBotIds]);\n\n const html = htmlRef.current;\n useEffect(() => {\n if (!canSuggestMembers || !html.length) {\n unmarkIsOpen();\n return;\n }\n\n const usernameFilter = html.includes('@') && getUsernameFilter(html);\n\n if (usernameFilter) {\n const filter = usernameFilter ? usernameFilter.substr(1) : '';\n updateFilteredUsers(filter, canSuggestInlineBots(html));\n } else {\n unmarkIsOpen();\n }\n }, [canSuggestMembers, updateFilteredUsers, markIsOpen, unmarkIsOpen, html]);\n\n useEffect(() => {\n if (usersToMention?.length) {\n markIsOpen();\n } else {\n unmarkIsOpen();\n }\n }, [markIsOpen, unmarkIsOpen, usersToMention]);\n\n const insertMention = useCallback((user: ApiUser, forceFocus = false) => {\n if (!user.username && !getUserFirstOrLastName(user)) {\n return;\n }\n\n const insertedHtml = user.username\n ? `@${user.username}`\n : `${getUserFirstOrLastName(user)}`;\n\n const currentHtml = htmlRef.current;\n const atIndex = currentHtml.lastIndexOf('@');\n if (atIndex !== -1) {\n onUpdateHtml(`${currentHtml.substr(0, atIndex)}${insertedHtml} `);\n const messageInput = document.getElementById(inputId)!;\n requestAnimationFrame(() => {\n focusEditableElement(messageInput, forceFocus);\n });\n }\n\n unmarkIsOpen();\n }, [htmlRef, inputId, onUpdateHtml, unmarkIsOpen]);\n\n return {\n isMentionTooltipOpen: isOpen,\n closeMentionTooltip: unmarkIsOpen,\n insertMention,\n mentionFilteredUsers: usersToMention,\n };\n}\n\nfunction getUsernameFilter(html: string) {\n const username = prepareForRegExp(html).match(RE_USERNAME_SEARCH);\n\n return username ? username[0].trim() : undefined;\n}\n\nfunction canSuggestInlineBots(html: string) {\n return html.startsWith('@');\n}\n","import { useEffect, useRef } from '../../../lib/teact/teact';\n\nimport useOnChange from '../../../hooks/useOnChange';\nimport useForceUpdate from '../../../hooks/useForceUpdate';\n\nexport default function useAsyncRendering(dependencies: T, delay?: number) {\n const isDisabled = delay === undefined;\n const shouldRenderRef = useRef(isDisabled);\n const timeoutRef = useRef();\n const forceUpdate = useForceUpdate();\n\n useOnChange(() => {\n if (isDisabled) {\n return;\n }\n\n shouldRenderRef.current = false;\n\n if (timeoutRef.current) {\n clearTimeout(timeoutRef.current);\n timeoutRef.current = undefined;\n }\n }, dependencies);\n\n useEffect(() => {\n if (isDisabled || shouldRenderRef.current) {\n return;\n }\n\n const exec = () => {\n shouldRenderRef.current = true;\n forceUpdate();\n };\n\n if (delay! > 0) {\n timeoutRef.current = window.setTimeout(exec, delay);\n } else {\n exec();\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, dependencies);\n\n return shouldRenderRef.current;\n}\n","import { ChangeEvent } from 'react';\nimport React, {\n FC, useCallback, memo, useState,\n} from '../../lib/teact/teact';\n\nimport Checkbox from './Checkbox';\n\ntype IRadioOption = {\n label: string;\n subLabel?: string;\n value: string;\n};\n\ntype OwnProps = {\n id?: string;\n options: IRadioOption[];\n selected?: string[];\n disabled?: boolean;\n round?: boolean;\n loadingOptions?: string[];\n onChange: (value: string[]) => void;\n};\n\nconst CheckboxGroup: FC = ({\n id,\n options,\n selected = [],\n disabled,\n round,\n loadingOptions,\n onChange,\n}) => {\n const [values, setValues] = useState(selected || []);\n\n const handleChange = useCallback((event: ChangeEvent) => {\n const { value, checked } = event.currentTarget;\n let newValues: string[];\n if (checked) {\n newValues = [...values, value];\n } else {\n newValues = values.filter((v) => v !== value);\n }\n\n setValues(newValues);\n onChange(newValues);\n }, [onChange, values]);\n\n return (\n
\n {options.map((option) => (\n \n ))}\n
\n );\n};\n\nexport default memo(CheckboxGroup);\n","import React, { FC } from '../../lib/teact/teact';\n\nimport buildClassName from '../../util/buildClassName';\n\nimport Button, { OwnProps as ButtonProps } from './Button';\n\nimport './FloatingActionButton.scss';\n\ntype OwnProps = {\n isShown: boolean;\n className?: string;\n color?: ButtonProps['color'];\n ariaLabel?: ButtonProps['ariaLabel'];\n disabled?: boolean;\n onClick: () => void;\n children: React.ReactNode;\n};\n\nconst FloatingActionButton: FC = ({\n isShown,\n className,\n color = 'primary',\n ariaLabel,\n disabled,\n onClick,\n children,\n}) => {\n const buttonClassName = buildClassName(\n 'FloatingActionButton',\n isShown && 'revealed',\n className,\n );\n\n return (\n \n {children}\n \n );\n};\n\nexport default FloatingActionButton;\n","import { RefObject } from 'react';\nimport React, { FC, useRef, useCallback } from '../../lib/teact/teact';\n\nimport { IS_TOUCH_ENV } from '../../util/environment';\nimport { fastRaf } from '../../util/schedulers';\nimport buildClassName from '../../util/buildClassName';\nimport useContextMenuHandlers from '../../hooks/useContextMenuHandlers';\nimport useContextMenuPosition from '../../hooks/useContextMenuPosition';\nimport useFlag from '../../hooks/useFlag';\nimport useLang from '../../hooks/useLang';\n\nimport RippleEffect from './RippleEffect';\nimport Menu from './Menu';\nimport MenuItem from './MenuItem';\nimport Button from './Button';\n\nimport './ListItem.scss';\n\ninterface MenuItemContextAction {\n title: string;\n icon: string;\n destructive?: boolean;\n handler?: () => void;\n}\n\ninterface OwnProps {\n ref?: RefObject;\n buttonRef?: RefObject;\n icon?: string;\n secondaryIcon?: string;\n className?: string;\n style?: string;\n children: React.ReactNode;\n disabled?: boolean;\n ripple?: boolean;\n narrow?: boolean;\n inactive?: boolean;\n focus?: boolean;\n destructive?: boolean;\n multiline?: boolean;\n isStatic?: boolean;\n contextActions?: MenuItemContextAction[];\n onMouseDown?: (e: React.MouseEvent) => void;\n onClick?: (e: React.MouseEvent) => void;\n onSecondaryIconClick?: (e: React.MouseEvent) => void;\n}\n\nconst ListItem: FC = ({\n ref,\n buttonRef,\n icon,\n secondaryIcon,\n className,\n style,\n children,\n disabled,\n ripple,\n narrow,\n inactive,\n focus,\n destructive,\n multiline,\n isStatic,\n contextActions,\n onMouseDown,\n onClick,\n onSecondaryIconClick,\n}) => {\n // eslint-disable-next-line no-null/no-null\n let containerRef = useRef(null);\n if (ref) {\n containerRef = ref;\n }\n const [isTouched, markIsTouched, unmarkIsTouched] = useFlag();\n\n const {\n isContextMenuOpen, contextMenuPosition,\n handleBeforeContextMenu, handleContextMenu,\n handleContextMenuClose, handleContextMenuHide,\n } = useContextMenuHandlers(containerRef, !contextActions);\n\n const getTriggerElement = useCallback(() => containerRef.current, []);\n\n const getRootElement = useCallback(\n () => containerRef.current!.closest('.custom-scroll'),\n [],\n );\n\n const getMenuElement = useCallback(\n () => containerRef.current!.querySelector('.ListItem-context-menu .bubble'),\n [],\n );\n\n const {\n positionX, positionY, transformOriginX, transformOriginY, style: menuStyle,\n } = useContextMenuPosition(\n contextMenuPosition,\n getTriggerElement,\n getRootElement,\n getMenuElement,\n );\n\n const handleClick = useCallback((e: React.MouseEvent) => {\n if (disabled || !onClick) {\n return;\n }\n onClick(e);\n\n if (IS_TOUCH_ENV && !ripple) {\n markIsTouched();\n fastRaf(unmarkIsTouched);\n }\n }, [disabled, markIsTouched, onClick, ripple, unmarkIsTouched]);\n\n const handleSecondaryIconClick = (e: React.MouseEvent) => {\n if (disabled || e.button !== 0 || (!onSecondaryIconClick && !contextActions)) return;\n e.stopPropagation();\n if (onSecondaryIconClick) {\n onSecondaryIconClick(e);\n } else {\n handleContextMenu(e);\n }\n };\n\n const handleMouseDown = useCallback((e: React.MouseEvent) => {\n if (inactive || IS_TOUCH_ENV) {\n return;\n }\n if (contextActions && (e.button === 2 || !onClick)) {\n handleBeforeContextMenu(e);\n }\n if (e.button === 0) {\n if (!onClick) {\n handleContextMenu(e);\n } else {\n handleClick(e);\n }\n }\n }, [inactive, contextActions, onClick, handleBeforeContextMenu, handleContextMenu, handleClick]);\n\n const lang = useLang();\n\n const fullClassName = buildClassName(\n 'ListItem',\n className,\n !isStatic && 'no-selection',\n ripple && 'has-ripple',\n narrow && 'narrow',\n disabled && 'disabled',\n inactive && 'inactive',\n contextMenuPosition && 'has-menu-open',\n focus && 'focus',\n destructive && 'destructive',\n multiline && 'multiline',\n isStatic && 'is-static',\n );\n\n return (\n \n \n {icon && (\n \n )}\n {multiline && (
{children}
)}\n {!multiline && children}\n {!disabled && !inactive && ripple && (\n \n )}\n {secondaryIcon && (\n \n \n \n )}\n
\n {contextActions && contextMenuPosition !== undefined && (\n \n {contextActions.map((action) => (\n \n {action.title}\n \n ))}\n \n )}\n
\n );\n};\n\nexport default ListItem;\n","import React, {\n FC,\n useCallback,\n useEffect,\n useRef,\n useState,\n} from '../../lib/teact/teact';\n\nimport { ANIMATION_END_DELAY } from '../../config';\nimport useShowTransition from '../../hooks/useShowTransition';\nimport buildClassName from '../../util/buildClassName';\nimport captureEscKeyListener from '../../util/captureEscKeyListener';\nimport { TextPart } from '../common/helpers/renderMessageText';\n\nimport Portal from './Portal';\n\nimport './Notification.scss';\n\ntype OwnProps = {\n containerId?: string;\n message: TextPart[];\n duration?: number;\n onDismiss: () => void;\n};\n\nconst DEFAULT_DURATION = 3000;\nconst ANIMATION_DURATION = 150;\n\nconst Notification: FC = ({\n message, duration = DEFAULT_DURATION, containerId, onDismiss,\n}) => {\n const [isOpen, setIsOpen] = useState(true);\n // eslint-disable-next-line no-null/no-null\n const timerRef = useRef(null);\n\n const { transitionClassNames } = useShowTransition(isOpen);\n\n const closeAndDismiss = useCallback(() => {\n setIsOpen(false);\n setTimeout(onDismiss, ANIMATION_DURATION + ANIMATION_END_DELAY);\n }, [onDismiss]);\n\n useEffect(() => (isOpen ? captureEscKeyListener(closeAndDismiss) : undefined), [isOpen, closeAndDismiss]);\n\n useEffect(() => {\n timerRef.current = window.setTimeout(closeAndDismiss, duration);\n\n return () => {\n if (timerRef.current) {\n clearTimeout(timerRef.current);\n timerRef.current = undefined;\n }\n };\n }, [duration, closeAndDismiss]);\n\n const handleMouseEnter = useCallback(() => {\n if (timerRef.current) {\n clearTimeout(timerRef.current);\n timerRef.current = undefined;\n }\n }, []);\n\n const handleMouseLeave = useCallback(() => {\n timerRef.current = window.setTimeout(closeAndDismiss, duration);\n }, [duration, closeAndDismiss]);\n\n return (\n \n \n
\n {message}\n
\n
\n \n );\n};\n\nexport default Notification;\n","import React, {\n FC, useEffect, useRef, memo,\n} from '../../lib/teact/teact';\n\nimport buildClassName from '../../util/buildClassName';\n\nimport './ProgressSpinner.scss';\n\nconst RADIUSES = {\n s: 22, m: 25, l: 28, xl: 20,\n};\nconst STROKE_WIDTH = 2;\nconst MIN_PROGRESS = 0.05;\nconst MAX_PROGRESS = 1;\n\nconst ProgressSpinner: FC<{\n progress?: number;\n size?: 's' | 'm' | 'l' | 'xl';\n square?: boolean;\n transparent?: boolean;\n noCross?: boolean;\n onClick?: (e: React.MouseEvent) => void;\n}> = ({\n progress = 0,\n size = 'l',\n square,\n transparent,\n noCross,\n onClick,\n}) => {\n const radius = RADIUSES[size];\n const circleRadius = radius - STROKE_WIDTH * 2;\n const borderRadius = radius - 1;\n const circumference = circleRadius * 2 * Math.PI;\n // eslint-disable-next-line no-null/no-null\n const container = useRef(null);\n\n useEffect(() => {\n if (!container.current) {\n return;\n }\n\n const svg = container.current.firstElementChild;\n const strokeDashOffset = circumference - Math.min(Math.max(MIN_PROGRESS, progress), MAX_PROGRESS) * circumference;\n\n if (!svg) {\n container.current.innerHTML = `\n \n `;\n } else {\n (svg.firstElementChild as SVGElement).setAttribute('stroke-dashoffset', strokeDashOffset.toString());\n }\n }, [container, circumference, borderRadius, circleRadius, progress]);\n\n const className = buildClassName(\n `ProgressSpinner size-${size}`,\n transparent && 'transparent',\n square && 'square',\n noCross && 'no-cross',\n );\n\n return (\n \n );\n};\n\nexport default memo(ProgressSpinner);\n","import { ChangeEvent } from 'react';\nimport React, { FC, memo } from '../../lib/teact/teact';\n\nimport buildClassName from '../../util/buildClassName';\nimport useLang from '../../hooks/useLang';\n\nimport Spinner from './Spinner';\n\nimport './Radio.scss';\n\ntype OwnProps = {\n id?: string;\n name: string;\n label: string;\n subLabel?: string;\n value: string;\n checked: boolean;\n disabled?: boolean;\n hidden?: boolean;\n isLoading?: boolean;\n onChange: (e: ChangeEvent) => void;\n};\n\nconst Radio: FC = ({\n id,\n label,\n subLabel,\n value,\n name,\n checked,\n disabled,\n hidden,\n isLoading,\n onChange,\n}) => {\n const lang = useLang();\n const className = buildClassName(\n 'Radio',\n disabled && 'disabled',\n hidden && 'hidden-widget',\n isLoading && 'loading',\n );\n\n return (\n \n );\n};\n\nexport default memo(Radio);\n","import { ChangeEvent } from 'react';\nimport React, { FC, useCallback, memo } from '../../lib/teact/teact';\n\nimport Radio from './Radio';\n\nexport type IRadioOption = {\n label: string;\n subLabel?: string;\n value: string;\n hidden?: boolean;\n};\n\ntype OwnProps = {\n id?: string;\n name: string;\n options: IRadioOption[];\n selected?: string;\n disabled?: boolean;\n loadingOption?: string;\n onChange: (value: string) => void;\n};\n\nconst RadioGroup: FC = ({\n id,\n name,\n options,\n selected,\n disabled,\n loadingOption,\n onChange,\n}) => {\n const handleChange = useCallback((event: ChangeEvent) => {\n const { value } = event.currentTarget;\n onChange(value);\n }, [onChange]);\n\n return (\n
\n {options.map((option) => (\n
\n );\n};\n\nexport default memo(RadioGroup);\n","import { ChangeEvent } from 'react';\nimport React, {\n FC, useCallback, useMemo, memo,\n} from '../../lib/teact/teact';\n\nimport buildClassName from '../../util/buildClassName';\nimport useLang from '../../hooks/useLang';\n\nimport './RangeSlider.scss';\n\ntype OwnProps = {\n options?: string[];\n min?: number;\n max?: number;\n step?: number;\n label?: string;\n value: number;\n disabled?: boolean;\n bold?: boolean;\n className?: string;\n renderValue?: (value: number) => string;\n onChange: (value: number) => void;\n};\n\nconst RangeSlider: FC = ({\n options,\n min = 0,\n max = options ? options.length - 1 : 100,\n step = 1,\n label,\n value,\n disabled,\n bold,\n className,\n renderValue,\n onChange,\n}) => {\n const lang = useLang();\n const handleChange = useCallback((event: ChangeEvent) => {\n onChange(Number(event.currentTarget.value));\n }, [onChange]);\n\n const mainClassName = buildClassName(\n className,\n 'RangeSlider',\n disabled && 'disabled',\n bold && 'bold',\n );\n\n const trackWidth = useMemo(() => {\n if (options) {\n return (value / (options.length - 1)) * 100;\n } else {\n const possibleValuesLength = (max - min) / step;\n return ((value - min) / possibleValuesLength) * 100;\n }\n }, [options, value, max, min, step]);\n\n return (\n
\n {label && (\n
\n {label}\n {!options && (\n {renderValue ? renderValue(value) : value}\n )}\n
\n )}\n
\n \n \n {options && (\n
\n {options.map((option, index) => (\n onChange(index)}\n >\n {option}\n
\n ))}\n
\n )}\n
\n
\n );\n};\n\nexport default memo(RangeSlider);\n","import { RefObject } from 'react';\nimport React, {\n FC, useRef, useEffect, memo, useCallback,\n} from '../../lib/teact/teact';\n\nimport buildClassName from '../../util/buildClassName';\nimport useFlag from '../../hooks/useFlag';\nimport useLang from '../../hooks/useLang';\nimport useInputFocusOnOpen from '../../hooks/useInputFocusOnOpen';\n\nimport Loading from './Loading';\nimport Button from './Button';\nimport ShowTransition from './ShowTransition';\n\nimport './SearchInput.scss';\n\ntype OwnProps = {\n ref?: RefObject;\n children?: React.ReactNode;\n parentContainerClassName?: string;\n className?: string;\n inputId?: string;\n value?: string;\n focused?: boolean;\n isLoading?: boolean;\n spinnerColor?: 'yellow';\n spinnerBackgroundColor?: 'light';\n placeholder?: string;\n disabled?: boolean;\n autoComplete?: string;\n canClose?: boolean;\n autoFocusSearch?: boolean;\n onChange: (value: string) => void;\n onReset?: NoneToVoidFunction;\n onFocus?: NoneToVoidFunction;\n onBlur?: NoneToVoidFunction;\n onSpinnerClick?: NoneToVoidFunction;\n};\n\nconst SearchInput: FC = ({\n ref,\n children,\n parentContainerClassName,\n value,\n inputId,\n className,\n focused,\n isLoading,\n spinnerColor,\n spinnerBackgroundColor,\n placeholder,\n disabled,\n autoComplete,\n canClose,\n autoFocusSearch,\n onChange,\n onReset,\n onFocus,\n onBlur,\n onSpinnerClick,\n}) => {\n // eslint-disable-next-line no-null/no-null\n let inputRef = useRef(null);\n if (ref) {\n inputRef = ref;\n }\n\n const [isInputFocused, markInputFocused, unmarkInputFocused] = useFlag(focused);\n\n useInputFocusOnOpen(inputRef, autoFocusSearch, unmarkInputFocused);\n\n useEffect(() => {\n if (!inputRef.current) {\n return;\n }\n\n if (focused) {\n inputRef.current.focus();\n } else {\n inputRef.current.blur();\n }\n }, [focused, placeholder]); // Trick for setting focus when selecting a contact to search for\n\n const lang = useLang();\n\n function handleChange(event: React.ChangeEvent) {\n const { currentTarget } = event;\n onChange(currentTarget.value);\n }\n\n function handleFocus() {\n markInputFocused();\n if (onFocus) {\n onFocus();\n }\n }\n\n function handleBlur() {\n unmarkInputFocused();\n if (onBlur) {\n onBlur();\n }\n }\n\n const handleKeyDown = useCallback((e: React.KeyboardEvent) => {\n if (e.key === 'ArrowDown' || e.key === 'Enter') {\n const element = document.querySelector(`.${parentContainerClassName} .ListItem-button`) as HTMLElement;\n if (element) {\n element.focus();\n }\n }\n }, [parentContainerClassName]);\n\n return (\n \n {children}\n \n \n \n \n \n {!isLoading && (value || canClose) && onReset && (\n \n \n \n )}\n
\n );\n};\n\nexport default memo(SearchInput);\n","import React, { FC, useRef } from '../../lib/teact/teact';\n\nimport useShowTransition from '../../hooks/useShowTransition';\nimport usePrevious from '../../hooks/usePrevious';\nimport buildClassName from '../../util/buildClassName';\n\ntype OwnProps = {\n isOpen: boolean;\n isCustom?: boolean;\n id?: string;\n className?: string;\n onClick?: (e: React.MouseEvent) => void;\n children: React.ReactNode;\n};\n\nconst ShowTransition: FC = ({\n isOpen, isCustom, id, className, onClick, children,\n}) => {\n const { shouldRender, transitionClassNames } = useShowTransition(\n isOpen, undefined, undefined, isCustom ? false : undefined,\n );\n const prevIsOpen = usePrevious(isOpen);\n const prevChildren = usePrevious(children);\n const fromChildrenRef = useRef();\n\n if (prevIsOpen && !isOpen) {\n fromChildrenRef.current = prevChildren;\n }\n\n return (\n shouldRender && (\n
\n {isOpen ? children : fromChildrenRef.current!}\n
\n )\n );\n};\n\nexport default ShowTransition;\n","import { ChangeEvent } from 'react';\nimport React, { FC, memo, useCallback } from '../../lib/teact/teact';\n\nimport buildClassName from '../../util/buildClassName';\n\nimport './Switcher.scss';\n\ntype OwnProps = {\n id?: string;\n name?: string;\n value?: string;\n label: string;\n checked?: boolean;\n disabled?: boolean;\n inactive?: boolean;\n noAnimation?: boolean;\n onChange?: (e: ChangeEvent) => void;\n onCheck?: (isChecked: boolean) => void;\n};\n\nconst Switcher: FC = ({\n id,\n name,\n value,\n label,\n checked = false,\n disabled,\n inactive,\n noAnimation,\n onChange,\n onCheck,\n}) => {\n const handleChange = useCallback((e: ChangeEvent) => {\n if (onChange) {\n onChange(e);\n }\n\n if (onCheck) {\n onCheck(e.currentTarget.checked);\n }\n }, [onChange, onCheck]);\n\n const className = buildClassName(\n 'Switcher',\n disabled && 'disabled',\n inactive && 'inactive',\n noAnimation && 'no-animation',\n );\n\n return (\n \n );\n};\n\nexport default memo(Switcher);\n","import React, {\n FC, useRef, memo, useEffect,\n} from '../../lib/teact/teact';\n\nimport buildClassName from '../../util/buildClassName';\nimport forceReflow from '../../util/forceReflow';\nimport renderText from '../common/helpers/renderText';\n\nimport './Tab.scss';\n\ntype OwnProps = {\n className?: string;\n title: string;\n isActive?: boolean;\n badgeCount?: number;\n isBadgeActive?: boolean;\n previousActiveTab?: number;\n onClick: (arg: number) => void;\n clickArg: number;\n};\n\nconst classNames = {\n active: 'Tab--active',\n badgeActive: 'Tab__badge--active',\n};\n\nconst Tab: FC = ({\n className,\n title,\n isActive,\n badgeCount,\n isBadgeActive,\n previousActiveTab,\n onClick,\n clickArg,\n}) => {\n // eslint-disable-next-line no-null/no-null\n const tabRef = useRef(null);\n\n useEffect(() => {\n // Set initial active state\n if (isActive && previousActiveTab === undefined && tabRef.current) {\n tabRef.current.classList.add(classNames.active);\n }\n\n if (!isActive || previousActiveTab === undefined) {\n return;\n }\n\n const tabEl = tabRef.current!;\n const prevTabEl = tabEl.parentElement!.children[previousActiveTab];\n if (!prevTabEl) {\n return;\n }\n\n const platformEl = tabEl.querySelector('i')!;\n const prevPlatformEl = prevTabEl.querySelector('i')!;\n\n // We move and resize the platform, so it repeats the position and size of the previous one\n const shiftLeft = prevPlatformEl.parentElement!.offsetLeft - platformEl.parentElement!.offsetLeft;\n const scaleFactor = prevPlatformEl.clientWidth / platformEl.clientWidth;\n\n prevPlatformEl.classList.remove('animate');\n platformEl.classList.remove('animate');\n platformEl.style.transform = `translate3d(${shiftLeft}px, 0, 0) scale3d(${scaleFactor}, 1, 1)`;\n forceReflow(platformEl);\n platformEl.classList.add('animate');\n platformEl.style.transform = 'none';\n\n prevTabEl.classList.remove(classNames.active);\n tabEl.classList.add(classNames.active);\n }, [isActive, previousActiveTab]);\n\n return (\n onClick(clickArg)}\n ref={tabRef}\n >\n \n {renderText(title)}\n {Boolean(badgeCount) && (\n {badgeCount}\n )}\n \n \n
\n );\n};\n\nexport default memo(Tab);\n","import React, {\n FC, memo, useRef, useEffect,\n} from '../../lib/teact/teact';\n\nimport { IS_ANDROID, IS_IOS } from '../../util/environment';\nimport fastSmoothScrollHorizontal from '../../util/fastSmoothScrollHorizontal';\nimport usePrevious from '../../hooks/usePrevious';\nimport useHorizontalScroll from '../../hooks/useHorizontalScroll';\nimport useLang from '../../hooks/useLang';\n\nimport Tab from './Tab';\n\nimport './TabList.scss';\n\nexport type TabWithProperties = {\n title: string;\n badgeCount?: number;\n isBadgeActive?: boolean;\n};\n\ntype OwnProps = {\n tabs: readonly TabWithProperties[];\n activeTab: number;\n big?: boolean;\n onSwitchTab: (index: number) => void;\n};\n\nconst TAB_SCROLL_THRESHOLD_PX = 16;\n// Should match duration from `--slide-transition` CSS variable\nconst SCROLL_DURATION = IS_IOS ? 450 : IS_ANDROID ? 400 : 300;\n\nconst TabList: FC = ({\n tabs, activeTab, big, onSwitchTab,\n}) => {\n // eslint-disable-next-line no-null/no-null\n const containerRef = useRef(null);\n const previousActiveTab = usePrevious(activeTab);\n\n useHorizontalScroll(containerRef.current);\n\n // Scroll container to place active tab in the center\n useEffect(() => {\n const container = containerRef.current!;\n const { scrollWidth, offsetWidth, scrollLeft } = container;\n if (scrollWidth <= offsetWidth) {\n return;\n }\n\n const activeTabElement = container.childNodes[activeTab] as HTMLElement | null;\n if (!activeTabElement) {\n return;\n }\n\n const { offsetLeft: activeTabOffsetLeft, offsetWidth: activeTabOffsetWidth } = activeTabElement;\n const newLeft = activeTabOffsetLeft - (offsetWidth / 2) + (activeTabOffsetWidth / 2);\n\n // Prevent scrolling by only a couple of pixels, which doesn't look smooth\n if (Math.abs(newLeft - scrollLeft) < TAB_SCROLL_THRESHOLD_PX) {\n return;\n }\n\n fastSmoothScrollHorizontal(container, newLeft, SCROLL_DURATION);\n }, [activeTab]);\n\n const lang = useLang();\n\n return (\n \n {tabs.map((tab, i) => (\n \n ))}\n
\n );\n};\n\nexport default memo(TabList);\n","import { RefObject } from 'react';\nimport React, {\n FC, useLayoutEffect, useRef,\n} from '../../lib/teact/teact';\nimport { getGlobal } from '../../global';\nimport { GlobalState } from '../../global/types';\n\nimport { ANIMATION_LEVEL_MIN } from '../../config';\nimport buildClassName from '../../util/buildClassName';\nimport forceReflow from '../../util/forceReflow';\nimport { waitForAnimationEnd, waitForTransitionEnd } from '../../util/cssAnimationEndListeners';\nimport useForceUpdate from '../../hooks/useForceUpdate';\nimport usePrevious from '../../hooks/usePrevious';\nimport { dispatchHeavyAnimationEvent } from '../../hooks/useHeavyAnimationCheck';\n\nimport './Transition.scss';\n\nexport type ChildrenFn = (isActive: boolean, isFrom: boolean, currentKey: number) => React.ReactNode;\nexport type TransitionProps = {\n ref?: RefObject;\n activeKey: number;\n name: (\n 'none' | 'slide' | 'slide-rtl' | 'mv-slide' | 'slide-fade' | 'zoom-fade' | 'slide-layers'\n | 'fade' | 'push-slide' | 'reveal' | 'slide-optimized' | 'slide-optimized-rtl'\n );\n direction?: 'auto' | 'inverse' | 1 | -1;\n renderCount?: number;\n shouldRestoreHeight?: boolean;\n shouldCleanup?: boolean;\n cleanupExceptionKey?: number;\n isDisabled?: boolean;\n id?: string;\n className?: string;\n onStart?: NoneToVoidFunction;\n onStop?: NoneToVoidFunction;\n children: React.ReactNode | ChildrenFn;\n};\n\nconst classNames = {\n active: 'Transition__slide--active',\n};\n\nconst Transition: FC = ({\n ref,\n activeKey,\n name,\n direction = 'auto',\n renderCount,\n shouldRestoreHeight,\n shouldCleanup,\n cleanupExceptionKey,\n id,\n className,\n onStart,\n onStop,\n children,\n}) => {\n // No need for a container to update on change\n const { animationLevel } = getGlobal().settings.byKey;\n const currentKeyRef = useRef();\n\n // eslint-disable-next-line no-null/no-null\n let containerRef = useRef(null);\n if (ref) {\n containerRef = ref;\n }\n\n const rendersRef = useRef>({});\n const prevActiveKey = usePrevious(activeKey);\n const forceUpdate = useForceUpdate();\n\n const activeKeyChanged = prevActiveKey !== undefined && activeKey !== prevActiveKey;\n\n if (!renderCount && activeKeyChanged) {\n rendersRef.current = { [prevActiveKey]: rendersRef.current[prevActiveKey] };\n }\n\n rendersRef.current[activeKey] = children;\n\n useLayoutEffect(() => {\n function cleanup() {\n if (!shouldCleanup) {\n return;\n }\n\n const preservedRender = cleanupExceptionKey !== undefined ? rendersRef.current[cleanupExceptionKey] : undefined;\n\n rendersRef.current = preservedRender ? { [cleanupExceptionKey!]: preservedRender } : {};\n\n forceUpdate();\n }\n\n const container = containerRef.current!;\n\n const childElements = container.children;\n if (childElements.length === 1 && !activeKeyChanged) {\n if (name.startsWith('slide-optimized')) {\n (childElements[0] as HTMLElement).style.transition = 'none';\n (childElements[0] as HTMLElement).style.transform = 'translate3d(0, 0, 0)';\n }\n\n childElements[0].classList.add(classNames.active);\n\n return;\n }\n\n const childNodes = Array.from(container.childNodes);\n\n if (!activeKeyChanged || !childNodes.length) {\n return;\n }\n\n currentKeyRef.current = activeKey;\n\n const isBackwards = (\n direction === -1\n || (direction === 'auto' && prevActiveKey > activeKey)\n || (direction === 'inverse' && prevActiveKey < activeKey)\n );\n\n const keys = Object.keys(rendersRef.current).map(Number);\n const prevActiveIndex = renderCount ? prevActiveKey : keys.indexOf(prevActiveKey);\n const activeIndex = renderCount ? activeKey : keys.indexOf(activeKey);\n\n if (name === 'slide-optimized' || name === 'slide-optimized-rtl') {\n performSlideOptimized(\n animationLevel,\n name,\n isBackwards,\n cleanup,\n activeKey,\n currentKeyRef,\n container,\n shouldRestoreHeight,\n onStart,\n onStop,\n childNodes[activeIndex] as HTMLElement,\n childNodes[prevActiveIndex] as HTMLElement,\n );\n\n return;\n }\n\n container.classList.remove('animating');\n container.classList.toggle('backwards', isBackwards);\n\n if (name === 'none' || animationLevel === ANIMATION_LEVEL_MIN) {\n childNodes.forEach((node, i) => {\n if (node instanceof HTMLElement) {\n node.classList.remove('from', 'through', 'to');\n node.classList.toggle(classNames.active, i === activeIndex);\n }\n });\n\n cleanup();\n\n return;\n }\n\n childNodes.forEach((node, i) => {\n if (node instanceof HTMLElement) {\n node.classList.remove(classNames.active);\n node.classList.toggle('from', i === prevActiveIndex);\n node.classList.toggle('through', (\n (i > prevActiveIndex && i < activeIndex) || (i < prevActiveIndex && i > activeIndex)\n ));\n node.classList.toggle('to', i === activeIndex);\n }\n });\n\n const dispatchHeavyAnimationStop = dispatchHeavyAnimationEvent();\n\n requestAnimationFrame(() => {\n container.classList.add('animating');\n\n onStart?.();\n\n function onAnimationEnd() {\n requestAnimationFrame(() => {\n if (activeKey !== currentKeyRef.current) {\n return;\n }\n\n container.classList.remove('animating', 'backwards');\n\n childNodes.forEach((node, i) => {\n if (node instanceof HTMLElement) {\n node.classList.remove('from', 'through', 'to');\n node.classList.toggle(classNames.active, i === activeIndex);\n }\n });\n\n if (shouldRestoreHeight) {\n const activeElement = container.querySelector(`.${classNames.active}`);\n\n if (activeElement) {\n activeElement.style.height = 'auto';\n container.style.height = `${activeElement.clientHeight}px`;\n }\n }\n\n onStop?.();\n dispatchHeavyAnimationStop();\n cleanup();\n });\n }\n\n const watchedNode = name === 'mv-slide'\n ? childNodes[activeIndex]?.firstChild\n : name === 'reveal' && isBackwards\n ? childNodes[prevActiveIndex]\n : childNodes[activeIndex];\n\n if (watchedNode) {\n waitForAnimationEnd(watchedNode, onAnimationEnd);\n } else {\n onAnimationEnd();\n }\n });\n }, [\n activeKey,\n prevActiveKey,\n activeKeyChanged,\n direction,\n name,\n onStart,\n onStop,\n renderCount,\n shouldRestoreHeight,\n shouldCleanup,\n cleanupExceptionKey,\n animationLevel,\n forceUpdate,\n ]);\n\n useLayoutEffect(() => {\n if (shouldRestoreHeight) {\n const container = containerRef.current!;\n const activeElement = container.querySelector(`.${classNames.active}`)\n || container.querySelector('.from');\n\n if (activeElement) {\n activeElement.style.height = 'auto';\n container.style.height = `${activeElement.clientHeight}px`;\n container.style.flexBasis = `${activeElement.clientHeight}px`;\n }\n }\n }, [shouldRestoreHeight, children]);\n\n const renders = rendersRef.current;\n const renderKeys = Object.keys(renderCount ? new Array(renderCount).fill(undefined) : renders).map(Number);\n const contents = renderKeys.map((key) => {\n const render = renders[key];\n if (!render) {\n return undefined;\n }\n\n return (\n
{\n typeof render === 'function'\n ? render(key === activeKey, key === prevActiveKey, activeKey)\n : render\n }\n
\n );\n });\n\n return (\n \n {contents}\n
\n );\n};\n\nexport default Transition;\n\nfunction performSlideOptimized(\n animationLevel: GlobalState['settings']['byKey']['animationLevel'],\n name: 'slide-optimized' | 'slide-optimized-rtl',\n isBackwards: boolean,\n cleanup: NoneToVoidFunction,\n activeKey: number,\n currentKeyRef: { current: number | undefined },\n container: HTMLElement,\n shouldRestoreHeight?: boolean,\n onStart?: NoneToVoidFunction,\n onStop?: NoneToVoidFunction,\n toSlide?: HTMLElement,\n fromSlide?: HTMLElement,\n) {\n if (!fromSlide || !toSlide) {\n return;\n }\n\n if (animationLevel === ANIMATION_LEVEL_MIN) {\n fromSlide.style.transition = 'none';\n fromSlide.style.transform = '';\n fromSlide.classList.remove(classNames.active);\n\n toSlide.style.transition = 'none';\n toSlide.style.transform = 'translate3d(0, 0, 0)';\n toSlide.classList.add(classNames.active);\n\n cleanup();\n\n return;\n }\n\n if (name === 'slide-optimized-rtl') {\n isBackwards = !isBackwards;\n }\n\n const dispatchHeavyAnimationStop = dispatchHeavyAnimationEvent();\n\n requestAnimationFrame(() => {\n onStart?.();\n\n fromSlide.style.transition = 'none';\n fromSlide.style.transform = 'translate3d(0, 0, 0)';\n\n toSlide.style.transition = 'none';\n toSlide.style.transform = `translate3d(${isBackwards ? '-' : ''}100%, 0, 0)`;\n\n forceReflow(toSlide);\n\n fromSlide.style.transition = '';\n fromSlide.style.transform = `translate3d(${isBackwards ? '' : '-'}100%, 0, 0)`;\n\n toSlide.style.transition = '';\n toSlide.style.transform = 'translate3d(0, 0, 0)';\n\n fromSlide.classList.remove(classNames.active);\n toSlide.classList.add(classNames.active);\n\n waitForTransitionEnd(fromSlide, () => {\n if (activeKey !== currentKeyRef.current) {\n return;\n }\n\n fromSlide.style.transition = 'none';\n fromSlide.style.transform = '';\n\n if (shouldRestoreHeight) {\n toSlide.style.height = 'auto';\n container.style.height = `${toSlide.clientHeight}px`;\n }\n\n onStop?.();\n dispatchHeavyAnimationStop();\n cleanup();\n });\n });\n}\n","import useReducer, { StateReducer, Dispatch } from '../useReducer';\nimport { ApiChatFolder } from '../../api/types';\nimport { pick, omit } from '../../util/iteratees';\n\nexport type FolderChatType = {\n icon: string;\n title: string;\n key: keyof Pick;\n};\n\nexport const INCLUDED_CHAT_TYPES: FolderChatType[] = [\n { icon: 'user', title: 'FilterContacts', key: 'contacts' },\n { icon: 'non-contacts', title: 'FilterNonContacts', key: 'nonContacts' },\n { icon: 'group', title: 'FilterGroups', key: 'groups' },\n { icon: 'channel', title: 'FilterChannels', key: 'channels' },\n { icon: 'bots', title: 'FilterBots', key: 'bots' },\n];\n\nexport const EXCLUDED_CHAT_TYPES: FolderChatType[] = [\n { icon: 'mute', title: 'FilterMuted', key: 'excludeMuted' },\n { icon: 'archive', title: 'FilterArchived', key: 'excludeArchived' },\n { icon: 'readchats', title: 'FilterRead', key: 'excludeRead' },\n];\n\nconst INCLUDE_FILTER_FIELDS: Array = [\n 'includedChatIds', 'bots', 'channels', 'groups', 'contacts', 'nonContacts',\n];\nconst EXCLUDE_FILTER_FIELDS: Array = [\n 'excludedChatIds', 'excludeArchived', 'excludeMuted', 'excludeRead',\n];\n\nexport function selectChatFilters(state: FoldersState, mode: 'included' | 'excluded', selectTemp?: boolean) {\n let selectedChatIds: string[] = [];\n let selectedChatTypes: FolderChatType['key'][] = [];\n\n if (mode === 'included') {\n const {\n includedChatIds,\n ...includeFilters\n } = selectTemp\n ? state.includeFilters || {}\n : pick(\n state.folder,\n INCLUDE_FILTER_FIELDS,\n );\n\n selectedChatIds = includedChatIds || [];\n selectedChatTypes = (Object.keys(includeFilters) as Array)\n .filter((key) => Boolean(includeFilters[key]));\n } else {\n const {\n excludedChatIds,\n ...excludeFilters\n } = selectTemp\n ? state.excludeFilters || {}\n : pick(\n state.folder,\n EXCLUDE_FILTER_FIELDS,\n );\n\n selectedChatIds = excludedChatIds || [];\n selectedChatTypes = (Object.keys(excludeFilters) as Array)\n .filter((key) => Boolean(excludeFilters[key]));\n }\n\n return {\n selectedChatIds,\n selectedChatTypes,\n };\n}\n\nfunction getSuggestedFolderName(includeFilters?: FolderIncludeFilters) {\n if (includeFilters) {\n const {\n includedChatIds,\n ...filters\n } = includeFilters;\n\n if (\n Object.values(filters).filter(Boolean).length > 1\n || (includedChatIds?.length)\n ) {\n return '';\n }\n\n if (filters.bots) {\n return 'Bots';\n } else if (filters.groups) {\n return 'Groups';\n } else if (filters.channels) {\n return 'Channels';\n } else if (filters.contacts) {\n return 'Contacts';\n } else if (filters.nonContacts) {\n return 'Non-Contacts';\n }\n }\n\n return '';\n}\n\ntype FolderIncludeFilters = Pick;\ntype FolderExcludeFilters = Pick;\n\nexport type FoldersState = {\n mode: 'create' | 'edit';\n isLoading?: boolean;\n isTouched?: boolean;\n error?: string;\n folderId?: number;\n chatFilter: string;\n folder: Omit;\n includeFilters?: FolderIncludeFilters;\n excludeFilters?: FolderExcludeFilters;\n};\nexport type FoldersActions = (\n 'setTitle' | 'saveFilters' | 'editFolder' | 'reset' | 'setChatFilter' | 'setIsLoading' | 'setError' |\n 'editIncludeFilters' | 'editExcludeFilters' | 'setIncludeFilters' | 'setExcludeFilters'\n);\nexport type FolderEditDispatch = Dispatch;\n\nconst INITIAL_STATE: FoldersState = {\n mode: 'create',\n chatFilter: '',\n folder: {\n title: '',\n includedChatIds: [],\n excludedChatIds: [],\n },\n};\n\nconst foldersReducer: StateReducer = (\n state,\n action,\n) => {\n switch (action.type) {\n case 'setTitle':\n return {\n ...state,\n folder: {\n ...state.folder,\n title: action.payload,\n },\n isTouched: true,\n };\n case 'editIncludeFilters':\n return {\n ...state,\n includeFilters: pick(\n state.folder,\n INCLUDE_FILTER_FIELDS,\n ),\n };\n case 'editExcludeFilters':\n return {\n ...state,\n excludeFilters: pick(\n state.folder,\n EXCLUDE_FILTER_FIELDS,\n ),\n };\n case 'setIncludeFilters':\n return {\n ...state,\n includeFilters: action.payload,\n chatFilter: '',\n };\n case 'setExcludeFilters':\n return {\n ...state,\n excludeFilters: action.payload,\n chatFilter: '',\n };\n case 'saveFilters':\n if (state.includeFilters) {\n return {\n ...state,\n folder: {\n ...omit(state.folder, INCLUDE_FILTER_FIELDS),\n title: state.folder.title ? state.folder.title : getSuggestedFolderName(state.includeFilters),\n ...state.includeFilters,\n },\n includeFilters: undefined,\n chatFilter: '',\n isTouched: true,\n };\n } else if (state.excludeFilters) {\n return {\n ...state,\n folder: {\n ...omit(state.folder, EXCLUDE_FILTER_FIELDS),\n ...state.excludeFilters,\n },\n excludeFilters: undefined,\n chatFilter: '',\n isTouched: true,\n };\n } else {\n return state;\n }\n case 'editFolder': {\n const { id: folderId, description, ...folder } = action.payload;\n\n return {\n mode: 'edit',\n folderId,\n folder,\n chatFilter: '',\n };\n }\n case 'setChatFilter': {\n return {\n ...state,\n chatFilter: action.payload,\n };\n }\n case 'setIsLoading': {\n return {\n ...state,\n isLoading: action.payload,\n };\n }\n case 'setError': {\n return {\n ...state,\n error: action.payload,\n };\n }\n case 'reset':\n return INITIAL_STATE;\n default:\n return state;\n }\n};\n\nconst useFoldersReducer = () => {\n return useReducer(foldersReducer, INITIAL_STATE);\n};\n\nexport default useFoldersReducer;\n","import {\n useCallback, useEffect, useRef, useState,\n} from '../lib/teact/teact';\nimport { getActions, getGlobal } from '../global';\n\nimport { register, Track, TrackId } from '../util/audioPlayer';\nimport useEffectWithPrevDeps from './useEffectWithPrevDeps';\nimport { isSafariPatchInProgress } from '../util/patchSafariProgressiveAudio';\nimport useOnChange from './useOnChange';\nimport {\n MediaSessionHandlers, registerMediaSession, setPlaybackState, setPositionState, updateMetadata,\n} from '../util/mediaSession';\n\ntype Handler = (e: Event) => void;\n\nconst DEFAULT_SKIP_TIME = 10;\n\nconst useAudioPlayer = (\n trackId: TrackId,\n originalDuration: number, // Sometimes incorrect for voice messages\n trackType: Track['type'],\n src?: string,\n handlers?: Record,\n metadata?: MediaMetadata,\n onInit?: (element: HTMLAudioElement) => void,\n shouldPlay = false,\n onForcePlay?: NoneToVoidFunction,\n onTrackChange?: NoneToVoidFunction,\n noPlaylist = false,\n noProgressUpdates = false,\n) => {\n // eslint-disable-next-line no-null/no-null\n const controllerRef = useRef>(null);\n\n const [isPlaying, setIsPlaying] = useState(false);\n let isPlayingSync = isPlaying;\n\n const [playProgress, setPlayProgress] = useState(0);\n\n const handleTrackChange = useCallback(() => {\n setIsPlaying(false);\n if (onTrackChange) onTrackChange();\n }, [onTrackChange]);\n\n useOnChange(() => {\n controllerRef.current = register(trackId, trackType, (eventName, e) => {\n switch (eventName) {\n case 'onPlay': {\n const {\n setVolume, setPlaybackRate, toggleMuted, proxy,\n } = controllerRef.current!;\n setIsPlaying(true);\n\n registerMediaSession(metadata, makeMediaHandlers(controllerRef));\n setPlaybackState('playing');\n setVolume(getGlobal().audioPlayer.volume);\n toggleMuted(Boolean(getGlobal().audioPlayer.isMuted));\n if (trackType === 'voice') {\n setPlaybackRate(getGlobal().audioPlayer.playbackRate);\n }\n\n setPositionState({\n duration: proxy.duration || 0,\n playbackRate: proxy.playbackRate,\n position: proxy.currentTime,\n });\n break;\n }\n case 'onRateChange': {\n const { proxy } = controllerRef.current!;\n setPositionState({\n duration: proxy.duration || 0,\n playbackRate: proxy.playbackRate,\n position: proxy.currentTime,\n });\n break;\n }\n case 'onPause':\n setIsPlaying(false);\n setPlaybackState('paused');\n break;\n case 'onTimeUpdate': {\n const { proxy } = controllerRef.current!;\n const duration = proxy.duration && Number.isFinite(proxy.duration) ? proxy.duration : originalDuration;\n if (!noProgressUpdates) setPlayProgress(proxy.currentTime / duration);\n break;\n }\n case 'onEnded': {\n setPlaybackState('paused');\n break;\n }\n }\n\n handlers?.[eventName]?.(e);\n }, onForcePlay, handleTrackChange);\n\n const { proxy } = controllerRef.current!;\n\n if (!isPlaying && !proxy.paused) {\n setIsPlaying(true);\n isPlayingSync = true;\n }\n\n if (onInit) {\n onInit(proxy);\n }\n }, [trackId]);\n\n useEffect(() => {\n if (isPlaying && metadata) updateMetadata(metadata);\n }, [metadata, isPlaying]);\n\n const {\n play,\n pause,\n setCurrentTime,\n proxy,\n destroy,\n setVolume,\n stop,\n isFirst,\n isLast,\n requestNextTrack,\n requestPreviousTrack,\n setPlaybackRate,\n toggleMuted,\n } = controllerRef.current!;\n const duration = proxy.duration && Number.isFinite(proxy.duration) ? proxy.duration : originalDuration;\n\n // RAF progress\n useEffect(() => {\n if (duration && !isSafariPatchInProgress(proxy) && !noProgressUpdates) {\n setPlayProgress(proxy.currentTime / duration);\n }\n }, [duration, playProgress, proxy, noProgressUpdates]);\n\n // Cleanup\n useEffect(() => () => {\n destroy(noPlaylist);\n }, [destroy, noPlaylist]);\n\n // Autoplay once `src` is present\n useEffectWithPrevDeps(([prevShouldPlay, prevSrc]) => {\n if (prevShouldPlay === shouldPlay && src === prevSrc) {\n return;\n }\n\n // When paused by another player\n if (proxy.src && proxy.paused) {\n return;\n }\n\n if (shouldPlay && src && !isPlaying) {\n play(src);\n }\n }, [shouldPlay, src, isPlaying, play, proxy.src, proxy.paused]);\n\n const playIfPresent = useCallback(() => {\n if (src) {\n play(src);\n }\n }, [src, play]);\n\n const playPause = useCallback(() => {\n if (isPlaying) {\n pause();\n } else {\n playIfPresent();\n }\n }, [pause, playIfPresent, isPlaying]);\n\n const setTime = useCallback((time: number) => {\n setCurrentTime(time);\n if (duration) {\n setPlayProgress(proxy.currentTime / duration);\n }\n }, [duration, proxy, setCurrentTime]);\n\n return {\n isPlaying: isPlayingSync,\n playProgress,\n playPause,\n pause,\n play: playIfPresent,\n stop,\n setCurrentTime: setTime,\n setVolume,\n audioProxy: proxy,\n duration,\n requestNextTrack,\n requestPreviousTrack,\n isFirst,\n isLast,\n setPlaybackRate,\n toggleMuted,\n };\n};\n\nfunction makeMediaHandlers(controllerRef: React.RefObject>) {\n let mediaHandlers: MediaSessionHandlers = {};\n if (controllerRef && controllerRef.current) {\n const {\n play, pause, setCurrentTime, proxy, requestNextTrack, requestPreviousTrack, isFirst, isLast,\n } = controllerRef.current;\n mediaHandlers = {\n play: () => {\n play(proxy.src);\n },\n pause: () => {\n pause();\n },\n stop: () => {\n pause();\n setCurrentTime(0);\n getActions().closeAudioPlayer();\n },\n seekbackward: (event) => {\n const skipTime = event.seekOffset || DEFAULT_SKIP_TIME;\n setCurrentTime(Math.max(proxy.currentTime - skipTime, 0));\n },\n seekforward: (event) => {\n const skipTime = event.seekOffset || DEFAULT_SKIP_TIME;\n setCurrentTime(Math.min(proxy.currentTime + skipTime, proxy.duration));\n },\n seekTo: (event) => {\n if (event.seekTime) {\n setCurrentTime(event.seekTime);\n }\n },\n };\n\n if (!isLast()) {\n mediaHandlers.nexttrack = () => {\n requestNextTrack();\n };\n }\n if (!isFirst()) {\n mediaHandlers.previoustrack = () => {\n requestPreviousTrack();\n };\n }\n }\n return mediaHandlers;\n}\n\nexport default useAudioPlayer;\n","import React, { useCallback, useMemo, useState } from '../lib/teact/teact';\nimport { debounce } from '../util/schedulers';\nimport { isSafariPatchInProgress } from '../util/patchSafariProgressiveAudio';\n\ntype BufferingEvent = (e: Event | React.SyntheticEvent) => void;\n\nconst MIN_READY_STATE = 3;\n// Avoid flickering when re-mounting previously buffered video\nconst DEBOUNCE = 200;\n\n/**\n * Time range relative to the duration [0, 1]\n */\nexport type BufferedRange = { start: number; end: number };\n\nconst useBuffering = (noInitiallyBuffered = false) => {\n const [isBuffered, setIsBuffered] = useState(!noInitiallyBuffered);\n const [bufferedProgress, setBufferedProgress] = useState(0);\n const [bufferedRanges, setBufferedRanges] = useState([]);\n\n const setIsBufferedDebounced = useMemo(() => {\n return debounce(setIsBuffered, DEBOUNCE, false, true);\n }, []);\n\n const handleBuffering = useCallback((e) => {\n const media = e.currentTarget as HTMLMediaElement;\n\n if (!isSafariPatchInProgress(media)) {\n if (media.buffered.length) {\n const ranges = getTimeRanges(media.buffered, media.duration);\n setBufferedRanges(ranges);\n const bufferedLength = ranges.reduce((acc, { start, end }) => acc + end - start, 0);\n setBufferedProgress(bufferedLength / media.duration);\n }\n\n setIsBufferedDebounced(media.readyState >= MIN_READY_STATE || media.currentTime > 0);\n }\n }, [setIsBufferedDebounced]);\n\n const bufferingHandlers = {\n onLoadedData: handleBuffering,\n onPlaying: handleBuffering,\n onLoadStart: handleBuffering, // Needed for Safari to start\n onPause: handleBuffering, // Needed for Chrome when seeking\n onTimeUpdate: handleBuffering, // Needed for audio buffering progress\n onProgress: handleBuffering, // Needed for video buffering progress\n };\n\n return {\n isBuffered,\n bufferedProgress,\n bufferedRanges,\n bufferingHandlers,\n checkBuffering(element: HTMLMediaElement) {\n setIsBufferedDebounced(element.readyState >= MIN_READY_STATE);\n },\n };\n};\n\nfunction getTimeRanges(ranges: TimeRanges, duration: number) {\n const result: BufferedRange[] = [];\n for (let i = 0; i < ranges.length; i++) {\n result.push({\n start: ranges.start(i) / duration,\n end: ranges.end(i) / duration,\n });\n }\n return result;\n}\n\nexport default useBuffering;\n","import { useEffect, useRef } from '../lib/teact/teact';\n\nimport fastBlur from '../lib/fastBlur';\nimport useForceUpdate from './useForceUpdate';\nimport { IS_CANVAS_FILTER_SUPPORTED } from '../util/environment';\n\nconst RADIUS = 2;\nconst ITERATIONS = 2;\n\nexport default function useCanvasBlur(dataUri?: string, isDisabled = false, withRaf?: boolean) {\n // eslint-disable-next-line no-null/no-null\n const canvasRef = useRef(null);\n const forceUpdate = useForceUpdate();\n\n useEffect(() => {\n const canvas = canvasRef.current;\n\n if (!dataUri || !canvas || isDisabled) {\n return;\n }\n\n const img = new Image();\n\n const processBlur = () => {\n canvas.width = img.width;\n canvas.height = img.height;\n\n const ctx = canvas.getContext('2d', { alpha: false })!;\n\n if (IS_CANVAS_FILTER_SUPPORTED) {\n ctx.filter = `blur(${RADIUS}px)`;\n }\n\n ctx.drawImage(img, -RADIUS * 2, -RADIUS * 2, canvas.width + RADIUS * 4, canvas.height + RADIUS * 4);\n\n if (!IS_CANVAS_FILTER_SUPPORTED) {\n fastBlur(ctx, 0, 0, canvas.width, canvas.height, RADIUS, ITERATIONS);\n }\n };\n\n img.onload = () => {\n if (withRaf) {\n requestAnimationFrame(processBlur);\n } else {\n processBlur();\n }\n };\n\n img.src = dataUri;\n }, [canvasRef, dataUri, forceUpdate, isDisabled, withRaf]);\n\n return canvasRef;\n}\n","import { useMemo } from '../lib/teact/teact';\nimport { getActions } from '../global';\n\nimport { ApiChat, ApiUser } from '../api/types';\n\nimport { SERVICE_NOTIFICATIONS_USER_ID } from '../config';\nimport {\n isChatArchived, getCanDeleteChat, isUserId, isChatChannel,\n} from '../global/helpers';\nimport { compact } from '../util/iteratees';\nimport useLang from './useLang';\n\nconst useChatContextActions = ({\n chat,\n user,\n folderId,\n isPinned,\n isMuted,\n canChangeFolder,\n handleDelete,\n handleChatFolderChange,\n}: {\n chat: ApiChat | undefined;\n user: ApiUser | undefined;\n folderId?: number;\n isPinned?: boolean;\n isMuted?: boolean;\n canChangeFolder?: boolean;\n handleDelete: () => void;\n handleChatFolderChange: () => void;\n}, isInSearch = false) => {\n const lang = useLang();\n\n const { isSelf } = user || {};\n const isServiceNotifications = user?.id === SERVICE_NOTIFICATIONS_USER_ID;\n\n return useMemo(() => {\n if (!chat) {\n return undefined;\n }\n\n const {\n toggleChatPinned,\n updateChatMutedState,\n toggleChatArchived,\n toggleChatUnread,\n } = getActions();\n\n const actionAddToFolder = canChangeFolder ? {\n title: lang('ChatList.Filter.AddToFolder'),\n icon: 'folder',\n handler: handleChatFolderChange,\n } : undefined;\n\n const actionPin = isPinned\n ? {\n title: lang('UnpinFromTop'),\n icon: 'unpin',\n handler: () => toggleChatPinned({ id: chat.id, folderId }),\n }\n : { title: lang('PinToTop'), icon: 'pin', handler: () => toggleChatPinned({ id: chat.id, folderId }) };\n\n if (isInSearch) {\n return compact([actionPin, actionAddToFolder]);\n }\n\n const actionUnreadMark = chat.unreadCount || chat.hasUnreadMark\n ? { title: lang('MarkAsRead'), icon: 'readchats', handler: () => toggleChatUnread({ id: chat.id }) }\n : { title: lang('MarkAsUnread'), icon: 'unread', handler: () => toggleChatUnread({ id: chat.id }) };\n\n const actionMute = isMuted\n ? {\n title: lang('ChatList.Unmute'),\n icon: 'unmute',\n handler: () => updateChatMutedState({ chatId: chat.id, isMuted: false }),\n }\n : {\n title: lang('ChatList.Mute'),\n icon: 'mute',\n handler: () => updateChatMutedState({ chatId: chat.id, isMuted: true }),\n };\n\n const actionArchive = isChatArchived(chat)\n ? { title: lang('Unarchive'), icon: 'unarchive', handler: () => toggleChatArchived({ id: chat.id }) }\n : { title: lang('Archive'), icon: 'archive', handler: () => toggleChatArchived({ id: chat.id }) };\n\n const actionDelete = {\n title: isUserId(chat.id)\n ? lang('Delete')\n : lang(getCanDeleteChat(chat)\n ? 'DeleteChat'\n : (isChatChannel(chat) ? 'LeaveChannel' : 'Group.LeaveGroup')),\n icon: 'delete',\n destructive: true,\n handler: handleDelete,\n };\n\n const isInFolder = folderId !== undefined;\n\n return compact([\n actionAddToFolder,\n actionUnreadMark,\n actionPin,\n !isSelf && actionMute,\n !isSelf && !isServiceNotifications && !isInFolder && actionArchive,\n actionDelete,\n ]);\n }, [\n chat, canChangeFolder, lang, handleChatFolderChange, isPinned, isInSearch, isMuted, handleDelete, folderId, isSelf,\n isServiceNotifications,\n ]);\n};\n\nexport default useChatContextActions;\n","import { RefObject } from 'react';\nimport { useState, useEffect, useCallback } from '../lib/teact/teact';\n\nimport { IAnchorPosition } from '../types';\nimport {\n IS_TOUCH_ENV, IS_PWA, IS_IOS,\n} from '../util/environment';\n\nconst LONG_TAP_DURATION_MS = 200;\n\nfunction stopEvent(e: Event) {\n e.stopImmediatePropagation();\n e.preventDefault();\n e.stopPropagation();\n}\n\nconst useContextMenuHandlers = (\n elementRef: RefObject,\n isMenuDisabled?: boolean,\n shouldDisableOnLink?: boolean,\n shouldDisableOnLongTap?: boolean,\n) => {\n const [isContextMenuOpen, setIsContextMenuOpen] = useState(false);\n const [contextMenuPosition, setContextMenuPosition] = useState(undefined);\n\n const handleBeforeContextMenu = useCallback((e: React.MouseEvent) => {\n if (!isMenuDisabled && e.button === 2) {\n (e.target as HTMLElement).classList.add('no-selection');\n }\n }, [isMenuDisabled]);\n\n const handleContextMenu = useCallback((e: React.MouseEvent) => {\n (e.target as HTMLElement).classList.remove('no-selection');\n\n if (isMenuDisabled || (shouldDisableOnLink && (e.target as HTMLElement).matches('a[href]'))) {\n return;\n }\n e.preventDefault();\n\n if (contextMenuPosition) {\n return;\n }\n\n setIsContextMenuOpen(true);\n setContextMenuPosition({ x: e.clientX, y: e.clientY });\n }, [isMenuDisabled, shouldDisableOnLink, contextMenuPosition]);\n\n const handleContextMenuClose = useCallback(() => {\n setIsContextMenuOpen(false);\n }, []);\n\n const handleContextMenuHide = useCallback(() => {\n setContextMenuPosition(undefined);\n }, []);\n\n // Support context menu on touch devices\n useEffect(() => {\n if (isMenuDisabled || !IS_TOUCH_ENV || shouldDisableOnLongTap) {\n return undefined;\n }\n\n const element = elementRef.current;\n if (!element) {\n return undefined;\n }\n\n let timer: number | undefined;\n\n const clearLongPressTimer = () => {\n if (timer) {\n clearTimeout(timer);\n timer = undefined;\n }\n };\n\n const emulateContextMenuEvent = (originalEvent: TouchEvent) => {\n clearLongPressTimer();\n\n const { clientX, clientY, target } = originalEvent.touches[0];\n\n if (contextMenuPosition || (shouldDisableOnLink && (target as HTMLElement).matches('a[href]'))) {\n return;\n }\n\n // Temporarily intercept and clear the next click\n element.addEventListener('touchend', function cancelClickOnce(e) {\n element.removeEventListener('touchend', cancelClickOnce, true);\n stopEvent(e);\n }, true);\n\n // On iOS15, in PWA mode, the context menu immediately closes after opening\n if (IS_PWA && IS_IOS) {\n element.addEventListener('mousedown', function cancelClickOnce(e) {\n element.removeEventListener('mousedown', cancelClickOnce, true);\n stopEvent(e);\n }, true);\n }\n\n setIsContextMenuOpen(true);\n setContextMenuPosition({ x: clientX, y: clientY });\n };\n\n const startLongPressTimer = (e: TouchEvent) => {\n if (isMenuDisabled) {\n return;\n }\n clearLongPressTimer();\n\n timer = window.setTimeout(() => emulateContextMenuEvent(e), LONG_TAP_DURATION_MS);\n };\n\n // @perf Consider event delegation\n element.addEventListener('touchstart', startLongPressTimer, { passive: true });\n element.addEventListener('touchcancel', clearLongPressTimer, true);\n element.addEventListener('touchend', clearLongPressTimer, true);\n element.addEventListener('touchmove', clearLongPressTimer, { passive: true });\n\n return () => {\n clearLongPressTimer();\n element.removeEventListener('touchstart', startLongPressTimer);\n element.removeEventListener('touchcancel', clearLongPressTimer, true);\n element.removeEventListener('touchend', clearLongPressTimer, true);\n element.removeEventListener('touchmove', clearLongPressTimer);\n };\n }, [contextMenuPosition, isMenuDisabled, shouldDisableOnLongTap, elementRef, shouldDisableOnLink]);\n\n return {\n isContextMenuOpen,\n contextMenuPosition,\n handleBeforeContextMenu,\n handleContextMenu,\n handleContextMenuClose,\n handleContextMenuHide,\n };\n};\n\nexport default useContextMenuHandlers;\n","import { useState, useEffect } from '../lib/teact/teact';\nimport { IAnchorPosition } from '../types';\n\ninterface Layout {\n extraPaddingX?: number;\n extraTopPadding?: number;\n marginSides?: number;\n extraMarginTop?: number;\n}\n\nconst MENU_POSITION_VISUAL_COMFORT_SPACE_PX = 16;\nconst MENU_POSITION_BOTTOM_MARGIN = 12;\nconst EMPTY_RECT = {\n width: 0, left: 0, height: 0, top: 0,\n};\n\nexport default function useContextMenuPosition(\n anchor: IAnchorPosition | undefined,\n getTriggerElement: () => HTMLElement | null,\n getRootElement: () => HTMLElement | null,\n getMenuElement: () => HTMLElement | null,\n getLayout?: () => Layout,\n) {\n const [positionX, setPositionX] = useState<'right' | 'left'>('right');\n const [positionY, setPositionY] = useState<'top' | 'bottom'>('bottom');\n const [transformOriginX, setTransformOriginX] = useState();\n const [transformOriginY, setTransformOriginY] = useState();\n const [withScroll, setWithScroll] = useState(false);\n const [style, setStyle] = useState('');\n const [menuStyle, setMenuStyle] = useState('opacity: 0;');\n\n useEffect(() => {\n const triggerEl = getTriggerElement();\n if (!anchor || !triggerEl) {\n return;\n }\n\n let { x, y } = anchor;\n const anchorX = x;\n const anchorY = y;\n\n const menuEl = getMenuElement();\n const rootEl = getRootElement();\n\n const {\n extraPaddingX = 0,\n extraTopPadding = 0,\n marginSides = 0,\n extraMarginTop = 0,\n } = getLayout?.() || {};\n\n const marginTop = menuEl ? parseInt(getComputedStyle(menuEl).marginTop, 10) + extraMarginTop : undefined;\n\n const menuRect = menuEl ? {\n width: menuEl.offsetWidth,\n height: menuEl.offsetHeight + marginTop!,\n } : EMPTY_RECT;\n\n const rootRect = rootEl ? rootEl.getBoundingClientRect() : EMPTY_RECT;\n\n let horizontalPosition: 'left' | 'right';\n let verticalPosition: 'top' | 'bottom';\n if (x + menuRect.width + extraPaddingX < rootRect.width + rootRect.left) {\n x += 3;\n horizontalPosition = 'left';\n } else if (x - menuRect.width > 0) {\n horizontalPosition = 'right';\n x -= 3;\n } else {\n horizontalPosition = 'left';\n x = 16;\n }\n setPositionX(horizontalPosition);\n\n if (marginSides\n && horizontalPosition === 'right' && (x + extraPaddingX + marginSides >= rootRect.width + rootRect.left)) {\n x -= marginSides;\n }\n\n if (marginSides && horizontalPosition === 'left') {\n if (x + extraPaddingX + marginSides + menuRect.width >= rootRect.width + rootRect.left) {\n x -= marginSides;\n } else if (x - marginSides <= 0) {\n x += marginSides;\n }\n }\n\n if (y + menuRect.height < rootRect.height + rootRect.top) {\n verticalPosition = 'top';\n } else {\n verticalPosition = 'bottom';\n\n if (y - menuRect.height < rootRect.top + extraTopPadding) {\n y = rootRect.top + rootRect.height;\n }\n }\n setPositionY(verticalPosition);\n\n const triggerRect = triggerEl.getBoundingClientRect();\n const left = horizontalPosition === 'left'\n ? Math.min(x - triggerRect.left, rootRect.width - menuRect.width - MENU_POSITION_VISUAL_COMFORT_SPACE_PX)\n : (x - triggerRect.left);\n const top = y - triggerRect.top;\n\n const menuMaxHeight = rootRect.height - MENU_POSITION_BOTTOM_MARGIN - (marginTop || 0);\n\n setWithScroll(menuMaxHeight < menuRect.height);\n setMenuStyle(`max-height: ${menuMaxHeight}px;`);\n setStyle(`left: ${left}px; top: ${top}px`);\n const offsetX = (anchorX - triggerRect.left) - left;\n const offsetY = (anchorY - triggerRect.top) - top - (marginTop || 0);\n setTransformOriginX(horizontalPosition === 'left' ? offsetX : menuRect.width + offsetX);\n setTransformOriginY(verticalPosition === 'bottom' ? menuRect.height + offsetY : offsetY);\n }, [\n anchor, getMenuElement, getRootElement, getTriggerElement, getLayout,\n ]);\n\n return {\n positionX,\n positionY,\n transformOriginX,\n transformOriginY,\n style,\n menuStyle,\n withScroll,\n };\n}\n","import { useMemo } from '../lib/teact/teact';\n\nimport { debounce } from '../util/schedulers';\n\nexport default function useDebounce(ms: number, noFirst?: boolean, noLast?: boolean) {\n return useMemo(() => {\n return debounce((cb) => cb(), ms, !noFirst, !noLast);\n }, [ms, noFirst, noLast]);\n}\n","import { useEffect, useMemo } from '../lib/teact/teact';\nimport { getActions } from '../global';\n\nimport { ApiMessage } from '../api/types';\n\nimport { throttle } from '../util/schedulers';\n\nconst useEnsureMessage = (\n chatId: string,\n messageId?: number,\n message?: ApiMessage,\n replyOriginForId?: number,\n) => {\n const { loadMessage } = getActions();\n const loadMessageThrottled = useMemo(() => {\n const throttled = throttle(loadMessage, 500, true);\n return () => {\n throttled({ chatId, messageId, replyOriginForId });\n };\n }, [loadMessage, chatId, messageId, replyOriginForId]);\n\n useEffect(() => {\n if (messageId && !message) {\n loadMessageThrottled();\n }\n });\n};\n\nexport default useEnsureMessage;\n","import { useEffect, useState } from '../lib/teact/teact';\nimport {\n getOrderedIds,\n getUnreadCounters,\n getChatsCount,\n addOrderedIdsCallback,\n addUnreadCountersCallback,\n addChatsCountCallback,\n} from '../util/folderManager';\n\nexport function useFolderManagerForOrderedIds(folderId: number) {\n const [orderedIds, setOrderedIds] = useState(getOrderedIds(folderId));\n\n useEffect(() => addOrderedIdsCallback(folderId, setOrderedIds), [folderId]);\n\n return orderedIds;\n}\n\nexport function useFolderManagerForUnreadCounters() {\n const [unreadCounters, setUnreadCounters] = useState(getUnreadCounters());\n\n useEffect(() => addUnreadCountersCallback(setUnreadCounters), []);\n\n return unreadCounters;\n}\n\nexport function useFolderManagerForChatsCount() {\n const [chatsCount, setChatsCount] = useState(getChatsCount());\n\n useEffect(() => addChatsCountCallback(setChatsCount), []);\n\n return chatsCount;\n}\n","import { useEffect } from '../lib/teact/teact';\n\nconst useHorizontalScroll = (container: HTMLElement | null, isDisabled?: boolean) => {\n useEffect(() => {\n if (!container || isDisabled) {\n return undefined;\n }\n\n function handleScroll(e: WheelEvent) {\n // Ignore horizontal scroll and let it work natively (e.g. on touchpad)\n if (!e.deltaX) {\n container!.scrollLeft += e.deltaY / 4;\n }\n }\n\n container.addEventListener('wheel', handleScroll, { passive: true });\n\n return () => {\n container.removeEventListener('wheel', handleScroll);\n };\n }, [container, isDisabled]);\n};\n\nexport default useHorizontalScroll;\n","import { RefObject } from 'react';\nimport { useEffect } from '../lib/teact/teact';\nimport { IS_SINGLE_COLUMN_LAYOUT } from '../util/environment';\n\n// Focus slows down animation, also it breaks transition layout in Chrome\nconst FOCUS_DELAY_MS = 500;\nconst MODAL_HIDE_DELAY_MS = 300;\n\nexport default function useInputFocusOnOpen(\n inputRef: RefObject,\n isOpen?: boolean,\n onClose?: NoneToVoidFunction,\n) {\n useEffect(() => {\n if (isOpen) {\n if (!IS_SINGLE_COLUMN_LAYOUT) {\n setTimeout(() => {\n requestAnimationFrame(() => {\n if (inputRef.current) {\n inputRef.current.focus();\n }\n });\n }, FOCUS_DELAY_MS);\n }\n } else {\n if (inputRef.current) {\n inputRef.current.blur();\n }\n\n if (onClose) {\n setTimeout(onClose, MODAL_HIDE_DELAY_MS);\n }\n }\n }, [inputRef, isOpen, onClose]);\n}\n","import { RefObject } from 'react';\nimport {\n useEffect, useRef, useCallback, useState,\n} from '../lib/teact/teact';\n\nimport { throttle, debounce } from '../util/schedulers';\nimport useHeavyAnimationCheck from './useHeavyAnimationCheck';\n\ntype TargetCallback = (entry: IntersectionObserverEntry) => void;\ntype RootCallback = (entries: IntersectionObserverEntry[]) => void;\ntype ObserveCleanup = NoneToVoidFunction;\nexport type ObserveFn = (target: HTMLElement, targetCallback?: TargetCallback) => ObserveCleanup;\n\ninterface IntersectionController {\n observer: IntersectionObserver;\n callbacks: Map;\n}\n\ninterface Response {\n observe: ObserveFn;\n freeze: NoneToVoidFunction;\n unfreeze: NoneToVoidFunction;\n}\n\nexport function useIntersectionObserver({\n rootRef,\n throttleMs,\n debounceMs,\n shouldSkipFirst,\n margin,\n threshold,\n isDisabled,\n}: {\n rootRef: RefObject;\n throttleMs?: number;\n debounceMs?: number;\n shouldSkipFirst?: boolean;\n margin?: number;\n threshold?: number | number[];\n isDisabled?: boolean;\n}, rootCallback?: RootCallback): Response {\n const controllerRef = useRef();\n const rootCallbackRef = useRef();\n const freezeFlagsRef = useRef(0);\n const onUnfreezeRef = useRef();\n\n rootCallbackRef.current = rootCallback;\n\n const freeze = useCallback(() => {\n freezeFlagsRef.current++;\n }, []);\n\n const unfreeze = useCallback(() => {\n if (!freezeFlagsRef.current) {\n return;\n }\n\n freezeFlagsRef.current--;\n\n if (!freezeFlagsRef.current && onUnfreezeRef.current) {\n onUnfreezeRef.current();\n onUnfreezeRef.current = undefined;\n }\n }, []);\n\n useHeavyAnimationCheck(freeze, unfreeze);\n\n useEffect(() => {\n if (isDisabled) {\n return undefined;\n }\n\n return () => {\n if (controllerRef.current) {\n controllerRef.current.observer.disconnect();\n controllerRef.current.callbacks.clear();\n controllerRef.current = undefined;\n }\n };\n }, [isDisabled]);\n\n function initController() {\n const callbacks = new Map();\n const entriesAccumulator = new Map();\n const observerCallbackSync = () => {\n const entries = Array.from(entriesAccumulator.values());\n\n entries.forEach((entry: IntersectionObserverEntry) => {\n const callback = callbacks.get(entry.target);\n if (callback) {\n callback!(entry, entries);\n }\n });\n\n if (rootCallbackRef.current) {\n rootCallbackRef.current(entries);\n }\n\n entriesAccumulator.clear();\n };\n const scheduler = throttleMs ? throttle : debounceMs ? debounce : undefined;\n const observerCallback = scheduler\n ? scheduler(observerCallbackSync, (throttleMs || debounceMs)!, !shouldSkipFirst)\n : observerCallbackSync;\n const observer = new IntersectionObserver(\n (entries) => {\n entries.forEach((entry) => {\n entriesAccumulator.set(entry.target, entry);\n });\n\n if (freezeFlagsRef.current) {\n onUnfreezeRef.current = () => {\n observerCallback();\n };\n } else {\n observerCallback();\n }\n },\n {\n root: rootRef.current,\n rootMargin: margin ? `${margin}px` : undefined,\n threshold,\n },\n );\n\n controllerRef.current = { observer, callbacks };\n }\n\n const observe = useCallback((target, targetCallback) => {\n if (!controllerRef.current) {\n initController();\n }\n\n const controller = controllerRef.current!;\n controller.observer.observe(target);\n\n if (targetCallback) {\n controller.callbacks.set(target, targetCallback);\n }\n\n return () => {\n if (targetCallback) {\n controller.callbacks.delete(target);\n }\n\n controller.observer.unobserve(target);\n };\n // Arguments should never change\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [isDisabled]);\n\n return { observe, freeze, unfreeze };\n}\n\nexport function useOnIntersect(\n targetRef: RefObject, observe?: ObserveFn, callback?: TargetCallback,\n) {\n useEffect(() => {\n return observe ? observe(targetRef.current!, callback) : undefined;\n // Arguments should never change\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n}\n\nexport function useIsIntersecting(\n targetRef: RefObject, observe?: ObserveFn, callback?: TargetCallback,\n) {\n const [isIntersecting, setIsIntersecting] = useState(!observe);\n\n useOnIntersect(targetRef, observe, (entry) => {\n setIsIntersecting(entry.isIntersecting);\n\n if (callback) {\n callback(entry);\n }\n });\n\n return isIntersecting;\n}\n","import { useEffect, useLayoutEffect, useRef } from '../lib/teact/teact';\n\nfunction useInterval(callback: NoneToVoidFunction, delay?: number, noFirst = false) {\n const savedCallback = useRef(callback);\n\n useLayoutEffect(() => {\n savedCallback.current = callback;\n }, [callback]);\n\n useEffect(() => {\n if (delay === undefined) {\n return undefined;\n }\n\n const id = setInterval(() => savedCallback.current(), delay);\n if (!noFirst) savedCallback.current();\n\n return () => clearInterval(id);\n }, [delay, noFirst]);\n}\n\nexport default useInterval;\n","import { useLayoutEffect } from '../lib/teact/teact';\nimport usePrevious from './usePrevious';\n\nconst useLayoutEffectWithPrevDeps = (\n cb: (args: T | readonly []) => void, dependencies: T, debugKey?: string,\n) => {\n const prevDeps = usePrevious(dependencies);\n return useLayoutEffect(() => {\n return cb(prevDeps || []);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, dependencies, debugKey);\n};\n\nexport default useLayoutEffectWithPrevDeps;\n","import useShowTransition from './useShowTransition';\n\nexport default function useMediaTransition(mediaData?: any) {\n const isMediaReady = Boolean(mediaData);\n const { transitionClassNames } = useShowTransition(isMediaReady, undefined, isMediaReady, 'slow');\n\n return transitionClassNames;\n}\n","import { useRef } from '../lib/teact/teact';\nimport generateIdFor from '../util/generateIdFor';\n\nconst store: Record = {};\n\nconst useUniqueId = () => {\n const idRef = useRef();\n\n if (!idRef.current) {\n idRef.current = generateIdFor(store);\n store[idRef.current] = true;\n }\n\n return idRef.current;\n};\n\nexport default useUniqueId;\n","import {\n useEffect, useMemo, useRef, useState,\n} from '../lib/teact/teact';\n\nimport { IS_PROGRESSIVE_SUPPORTED } from '../util/environment';\nimport { ApiMediaFormat } from '../api/types';\nimport { throttle } from '../util/schedulers';\nimport * as mediaLoader from '../util/mediaLoader';\nimport useForceUpdate from './useForceUpdate';\nimport useUniqueId from './useUniqueId';\n\nconst STREAMING_PROGRESS = 0.75;\nconst STREAMING_TIMEOUT = 1500;\nconst PROGRESS_THROTTLE = 500;\n\nexport default function useMediaWithLoadProgress(\n mediaHash: string | undefined,\n noLoad = false,\n mediaFormat = ApiMediaFormat.BlobUrl,\n cacheBuster?: number,\n delay?: number | false,\n isHtmlAllowed = false,\n) {\n const mediaData = mediaHash ? mediaLoader.getFromMemory(mediaHash) : undefined;\n const isStreaming = mediaFormat === ApiMediaFormat.Stream || (\n IS_PROGRESSIVE_SUPPORTED && mediaFormat === ApiMediaFormat.Progressive\n );\n const forceUpdate = useForceUpdate();\n const id = useUniqueId();\n const [loadProgress, setLoadProgress] = useState(mediaData && !isStreaming ? 1 : 0);\n const startedAtRef = useRef();\n\n const handleProgress = useMemo(() => {\n return throttle((progress: number) => {\n if (startedAtRef.current && (!delay || (Date.now() - startedAtRef.current > delay))) {\n setLoadProgress(progress);\n }\n }, PROGRESS_THROTTLE, true);\n }, [delay]);\n\n useEffect(() => {\n if (!noLoad && mediaHash) {\n if (!mediaData) {\n setLoadProgress(0);\n\n if (startedAtRef.current) {\n mediaLoader.cancelProgress(handleProgress);\n }\n\n startedAtRef.current = Date.now();\n\n mediaLoader.fetch(mediaHash, mediaFormat, isHtmlAllowed, handleProgress, id).then(() => {\n const spentTime = Date.now() - startedAtRef.current!;\n startedAtRef.current = undefined;\n\n if (!delay || spentTime >= delay) {\n forceUpdate();\n } else {\n setTimeout(forceUpdate, delay - spentTime);\n }\n });\n } else if (isStreaming) {\n setTimeout(() => {\n setLoadProgress(STREAMING_PROGRESS);\n }, STREAMING_TIMEOUT);\n }\n }\n }, [\n noLoad, mediaHash, mediaData, mediaFormat, cacheBuster, forceUpdate, isStreaming, delay, handleProgress,\n isHtmlAllowed, id,\n ]);\n\n useEffect(() => {\n if (noLoad && startedAtRef.current) {\n mediaLoader.cancelProgress(handleProgress);\n setLoadProgress(0);\n startedAtRef.current = undefined;\n }\n }, [handleProgress, noLoad]);\n\n useEffect(() => {\n return () => {\n if (mediaHash) {\n mediaLoader.removeCallback(mediaHash, id);\n }\n };\n }, [id, mediaHash]);\n\n return { mediaData, loadProgress };\n}\n","import { useCallback, useEffect, useRef } from '../lib/teact/teact';\n\nimport { IS_TOUCH_ENV } from '../util/environment';\n\nconst MENU_CLOSE_TIMEOUT = 250;\nlet closeTimeout: number | undefined;\n\nexport default function useMouseInside(\n isOpen: boolean, onClose: NoneToVoidFunction, menuCloseTimeout = MENU_CLOSE_TIMEOUT, isDisabled = false,\n) {\n const isMouseInside = useRef(false);\n\n const markMouseInside = useCallback(() => {\n isMouseInside.current = true;\n }, []);\n\n useEffect(() => {\n if (closeTimeout) {\n clearTimeout(closeTimeout);\n closeTimeout = undefined;\n }\n\n if (isOpen && !IS_TOUCH_ENV && !isDisabled) {\n closeTimeout = window.setTimeout(() => {\n if (!isMouseInside.current) {\n onClose();\n }\n }, menuCloseTimeout * 2);\n }\n }, [isDisabled, isOpen, menuCloseTimeout, onClose]);\n\n const handleMouseEnter = useCallback(() => {\n isMouseInside.current = true;\n }, []);\n\n const handleMouseLeave = useCallback(() => {\n isMouseInside.current = false;\n\n if (closeTimeout) {\n clearTimeout(closeTimeout);\n closeTimeout = undefined;\n }\n\n closeTimeout = window.setTimeout(() => {\n if (!isMouseInside.current) {\n onClose();\n }\n }, menuCloseTimeout);\n }, [menuCloseTimeout, onClose]);\n\n return [handleMouseEnter, handleMouseLeave, markMouseInside];\n}\n","import { useRef } from '../lib/teact/teact';\n\nimport usePrevious from './usePrevious';\nimport useForceUpdate from './useForceUpdate';\nimport useOnChange from './useOnChange';\n\nexport default function usePrevDuringAnimation(current: any, duration?: number) {\n const prev = usePrevious(current, true);\n const timeoutRef = useRef();\n const forceUpdate = useForceUpdate();\n // eslint-disable-next-line no-null/no-null\n const isCurrentPresent = current !== undefined && current !== null;\n // eslint-disable-next-line no-null/no-null\n const isPrevPresent = prev !== undefined && prev !== null;\n\n if (isCurrentPresent && timeoutRef.current) {\n clearTimeout(timeoutRef.current);\n timeoutRef.current = undefined;\n }\n\n useOnChange(() => {\n // When `current` becomes empty\n if (duration && !isCurrentPresent && isPrevPresent && !timeoutRef.current) {\n timeoutRef.current = window.setTimeout(() => {\n timeoutRef.current = undefined;\n forceUpdate();\n }, duration);\n }\n }, [current]);\n\n return !timeoutRef.current || !duration || isCurrentPresent ? current : prev;\n}\n","import { useState, useCallback, useRef } from '../lib/teact/teact';\n\nexport type ReducerAction = { type: Actions; payload?: any };\nexport type StateReducer = (state: State, action: ReducerAction) => State;\nexport type Dispatch = (action: ReducerAction) => void;\n\nexport default function useReducer(\n reducer: StateReducer,\n initialState: State,\n) {\n const reducerRef = useRef(reducer);\n const [state, setState] = useState(initialState);\n\n const dispatch = useCallback((action: ReducerAction) => {\n setState((currentState) => reducerRef.current(currentState, action));\n }, []);\n\n return [\n state,\n dispatch,\n ] as [State, Dispatch];\n}\n","import React, { FC, memo } from '../../lib/teact/teact';\nimport { OwnProps } from './CalendarModal';\nimport { Bundles } from '../../util/moduleLoader';\n\nimport useModuleLoader from '../../hooks/useModuleLoader';\n\nconst CalendarModalAsync: FC = (props) => {\n const { isOpen } = props;\n const CalendarModal = useModuleLoader(Bundles.Extra, 'CalendarModal', !isOpen);\n\n // eslint-disable-next-line react/jsx-props-no-spreading\n return CalendarModal ? : undefined;\n};\n\nexport default memo(CalendarModalAsync);\n","import React, { useCallback, useState } from '../lib/teact/teact';\nimport { getGlobal } from '../lib/teact/teactn';\n\nimport { SCHEDULED_WHEN_ONLINE } from '../config';\nimport { getDayStartAt } from '../util/dateFormat';\nimport useLang from './useLang';\n\nimport CalendarModal from '../components/common/CalendarModal.async';\n\ntype OnScheduledCallback = (scheduledAt: number) => void;\n\nconst useSchedule = (\n canScheduleUntilOnline?: boolean,\n onCancel?: () => void,\n) => {\n const lang = useLang();\n const [onScheduled, setOnScheduled] = useState();\n\n const handleMessageSchedule = useCallback((date: Date, isWhenOnline = false) => {\n const { serverTimeOffset } = getGlobal();\n // Scheduled time can not be less than 10 seconds in future\n const scheduledAt = Math.round(Math.max(date.getTime(), Date.now() + 60 * 1000) / 1000)\n + (isWhenOnline ? 0 : serverTimeOffset);\n onScheduled?.(scheduledAt);\n setOnScheduled(undefined);\n }, [onScheduled]);\n\n const handleMessageScheduleUntilOnline = useCallback(() => {\n handleMessageSchedule(new Date(SCHEDULED_WHEN_ONLINE * 1000), true);\n }, [handleMessageSchedule]);\n\n const handleCloseCalendar = useCallback(() => {\n setOnScheduled(undefined);\n onCancel?.();\n }, [onCancel]);\n\n const requestCalendar = useCallback((whenScheduled: OnScheduledCallback) => {\n setOnScheduled(() => whenScheduled);\n }, []);\n\n const scheduledDefaultDate = new Date();\n scheduledDefaultDate.setSeconds(0);\n scheduledDefaultDate.setMilliseconds(0);\n\n const scheduledMaxDate = new Date();\n scheduledMaxDate.setFullYear(scheduledMaxDate.getFullYear() + 1);\n\n const calendar = (\n \n );\n\n return [requestCalendar, calendar] as const;\n};\n\nexport default useSchedule;\n","import { useMemo } from '../lib/teact/teact';\nimport { getActions } from '../global';\n\nimport { ApiSendMessageAction } from '../api/types';\n\nimport { SEND_MESSAGE_ACTION_INTERVAL } from '../config';\nimport { throttle } from '../util/schedulers';\n\nconst useSendMessageAction = (chatId: string, threadId?: number) => {\n return useMemo(() => {\n return throttle((action: ApiSendMessageAction) => {\n getActions().sendMessageAction({ chatId, threadId, action });\n }, SEND_MESSAGE_ACTION_INTERVAL);\n }, [chatId, threadId]);\n};\n\nexport default useSendMessageAction;\n","import { useRef } from '../lib/teact/teact';\n\nimport useOnChange from './useOnChange';\n\n// Allows to use state value as \"silent\" dependency in hooks (not causing updates).\n// Useful for state values that update frequently (such as controlled input value).\nexport function useStateRef(value: T) {\n const ref = useRef(value);\n\n useOnChange(() => {\n ref.current = value;\n }, [value]);\n\n return ref;\n}\n","import { useEffect, useLayoutEffect, useRef } from '../lib/teact/teact';\n\nfunction useTimeout(callback: () => void, delay?: number) {\n const savedCallback = useRef(callback);\n\n useLayoutEffect(() => {\n savedCallback.current = callback;\n }, [callback]);\n\n useEffect(() => {\n if (typeof delay !== 'number') {\n return undefined;\n }\n const id = setTimeout(() => savedCallback.current(), delay);\n return () => clearTimeout(id);\n }, [delay]);\n}\n\nexport default useTimeout;\n","import { RefObject } from 'react';\nimport { useEffect } from '../lib/teact/teact';\nimport { fastRaf } from '../util/schedulers';\n\n// Fix for memory leak when unmounting video element\nexport default function useVideoCleanup(videoRef: RefObject, dependencies: any[]) {\n useEffect(() => {\n const videoEl = videoRef.current;\n\n return () => {\n if (videoEl) {\n fastRaf(() => {\n videoEl.pause();\n videoEl.src = '';\n videoEl.load();\n });\n }\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, dependencies);\n}\n","/* eslint-disable no-nested-ternary */\n/* eslint-disable no-bitwise */\n/* eslint-disable no-multi-assign */\n/* eslint-disable no-cond-assign */\n/* eslint-disable no-param-reassign */\n/* eslint-disable prefer-const */\n/* eslint-disable eqeqeq */\n\n/*\nSuperfast Blur - a fast Box Blur For Canvas\n\nVersion: 0.5\nAuthor: Mario Klingemann\nContact: mario@quasimondo.com\nWebsite: http://www.quasimondo.com/BoxBlurForCanvas\nTwitter: @quasimondo\n\nIn case you find this class useful - especially in commercial projects -\nI am not totally unhappy for a small donation to my PayPal account\nmario@quasimondo.de\n\nOr support me on flattr:\nhttps://flattr.com/thing/140066/Superfast-Blur-a-pretty-fast-Box-Blur-Effect-for-CanvasJavascript\n\nCopyright (c) 2011 Mario Klingemann\n\nPermission is hereby granted, free of charge, to any person\nobtaining a copy of this software and associated documentation\nfiles (the \"Software\"), to deal in the Software without\nrestriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the\nSoftware is furnished to do so, subject to the following\nconditions:\n\nThe above copyright notice and this permission notice shall be\nincluded in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\nEXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES\nOF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT\nHOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,\nWHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\nFROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR\nOTHER DEALINGS IN THE SOFTWARE.\n*/\n\n// eslint-disable-next-line max-len\nconst mul_table = [1, 57, 41, 21, 203, 34, 97, 73, 227, 91, 149, 62, 105, 45, 39, 137, 241, 107, 3, 173, 39, 71, 65, 238, 219, 101, 187, 87, 81, 151, 141, 133, 249, 117, 221, 209, 197, 187, 177, 169, 5, 153, 73, 139, 133, 127, 243, 233, 223, 107, 103, 99, 191, 23, 177, 171, 165, 159, 77, 149, 9, 139, 135, 131, 253, 245, 119, 231, 224, 109, 211, 103, 25, 195, 189, 23, 45, 175, 171, 83, 81, 79, 155, 151, 147, 9, 141, 137, 67, 131, 129, 251, 123, 30, 235, 115, 113, 221, 217, 53, 13, 51, 50, 49, 193, 189, 185, 91, 179, 175, 43, 169, 83, 163, 5, 79, 155, 19, 75, 147, 145, 143, 35, 69, 17, 67, 33, 65, 255, 251, 247, 243, 239, 59, 29, 229, 113, 111, 219, 27, 213, 105, 207, 51, 201, 199, 49, 193, 191, 47, 93, 183, 181, 179, 11, 87, 43, 85, 167, 165, 163, 161, 159, 157, 155, 77, 19, 75, 37, 73, 145, 143, 141, 35, 138, 137, 135, 67, 33, 131, 129, 255, 63, 250, 247, 61, 121, 239, 237, 117, 29, 229, 227, 225, 111, 55, 109, 216, 213, 211, 209, 207, 205, 203, 201, 199, 197, 195, 193, 48, 190, 47, 93, 185, 183, 181, 179, 178, 176, 175, 173, 171, 85, 21, 167, 165, 41, 163, 161, 5, 79, 157, 78, 154, 153, 19, 75, 149, 74, 147, 73, 144, 143, 71, 141, 140, 139, 137, 17, 135, 134, 133, 66, 131, 65, 129, 1];\n// eslint-disable-next-line max-len\nconst shg_table = [0, 9, 10, 10, 14, 12, 14, 14, 16, 15, 16, 15, 16, 15, 15, 17, 18, 17, 12, 18, 16, 17, 17, 19, 19, 18, 19, 18, 18, 19, 19, 19, 20, 19, 20, 20, 20, 20, 20, 20, 15, 20, 19, 20, 20, 20, 21, 21, 21, 20, 20, 20, 21, 18, 21, 21, 21, 21, 20, 21, 17, 21, 21, 21, 22, 22, 21, 22, 22, 21, 22, 21, 19, 22, 22, 19, 20, 22, 22, 21, 21, 21, 22, 22, 22, 18, 22, 22, 21, 22, 22, 23, 22, 20, 23, 22, 22, 23, 23, 21, 19, 21, 21, 21, 23, 23, 23, 22, 23, 23, 21, 23, 22, 23, 18, 22, 23, 20, 22, 23, 23, 23, 21, 22, 20, 22, 21, 22, 24, 24, 24, 24, 24, 22, 21, 24, 23, 23, 24, 21, 24, 23, 24, 22, 24, 24, 22, 24, 24, 22, 23, 24, 24, 24, 20, 23, 22, 23, 24, 24, 24, 24, 24, 24, 24, 23, 21, 23, 22, 23, 24, 24, 24, 22, 24, 24, 24, 23, 22, 24, 24, 25, 23, 25, 25, 23, 24, 25, 25, 24, 22, 25, 25, 25, 24, 23, 24, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 23, 25, 23, 24, 25, 25, 25, 25, 25, 25, 25, 25, 25, 24, 22, 25, 25, 23, 25, 25, 20, 24, 25, 24, 25, 25, 22, 24, 25, 24, 25, 24, 25, 25, 24, 25, 25, 25, 25, 22, 25, 25, 25, 24, 25, 24, 25, 18];\n\nexport default function boxBlurCanvasRGB(context, top_x, top_y, width, height, radius, iterations) {\n if (Number.isNaN(radius) || radius < 1) return;\n\n radius |= 0;\n\n if (Number.isNaN(iterations)) iterations = 1;\n iterations |= 0;\n if (iterations > 3) iterations = 3;\n if (iterations < 1) iterations = 1;\n\n const imageData = context.getImageData(top_x, top_y, width, height);\n\n const pixels = imageData.data;\n\n let rsum;\n let gsum;\n let bsum;\n let x;\n let y;\n let i;\n let p;\n let p1;\n let p2;\n let yp;\n let yi;\n let yw;\n let wm = width - 1;\n let hm = height - 1;\n let rad1 = radius + 1;\n\n let r = [];\n let g = [];\n let b = [];\n\n let mul_sum = mul_table[radius];\n let shg_sum = shg_table[radius];\n\n let vmin = [];\n let vmax = [];\n\n while (iterations-- > 0) {\n yw = yi = 0;\n\n for (y = 0; y < height; y++) {\n rsum = pixels[yw] * rad1;\n gsum = pixels[yw + 1] * rad1;\n bsum = pixels[yw + 2] * rad1;\n\n for (i = 1; i <= radius; i++) {\n p = yw + (((i > wm ? wm : i)) << 2);\n rsum += pixels[p++];\n gsum += pixels[p++];\n bsum += pixels[p++];\n }\n\n for (x = 0; x < width; x++) {\n r[yi] = rsum;\n g[yi] = gsum;\n b[yi] = bsum;\n\n if (y == 0) {\n vmin[x] = ((p = x + rad1) < wm ? p : wm) << 2;\n vmax[x] = ((p = x - radius) > 0 ? p << 2 : 0);\n }\n\n p1 = yw + vmin[x];\n p2 = yw + vmax[x];\n\n rsum += pixels[p1++] - pixels[p2++];\n gsum += pixels[p1++] - pixels[p2++];\n bsum += pixels[p1++] - pixels[p2++];\n\n yi++;\n }\n yw += (width << 2);\n }\n\n for (x = 0; x < width; x++) {\n yp = x;\n rsum = r[yp] * rad1;\n gsum = g[yp] * rad1;\n bsum = b[yp] * rad1;\n\n for (i = 1; i <= radius; i++) {\n yp += (i > hm ? 0 : width);\n rsum += r[yp];\n gsum += g[yp];\n bsum += b[yp];\n }\n\n yi = x << 2;\n for (y = 0; y < height; y++) {\n pixels[yi] = (rsum * mul_sum) >>> shg_sum;\n pixels[yi + 1] = (gsum * mul_sum) >>> shg_sum;\n pixels[yi + 2] = (bsum * mul_sum) >>> shg_sum;\n\n if (x == 0) {\n vmin[y] = ((p = y + rad1) < hm ? p : hm) * width;\n vmax[y] = ((p = y - radius) > 0 ? p * width : 0);\n }\n\n p1 = x + vmin[y];\n p2 = x + vmax[y];\n\n rsum += r[p1] - r[p2];\n gsum += g[p1] - g[p2];\n bsum += b[p1] - b[p2];\n\n yi += width << 2;\n }\n }\n }\n\n context.putImageData(imageData, top_x, top_y);\n}\n","import { getActions, getGlobal } from '../global';\n\nimport { AudioOrigin, GlobalSearchContent } from '../types';\nimport { ApiMessage } from '../api/types';\n\nimport { IS_SAFARI } from './environment';\nimport safePlay from './safePlay';\nimport { patchSafariProgressiveAudio, isSafariPatchInProgress } from './patchSafariProgressiveAudio';\nimport { getMessageKey, MessageKey, parseMessageKey } from '../global/helpers';\nimport { fastRaf } from './schedulers';\nimport { selectCurrentMessageList } from '../global/selectors';\n\ntype Handler = (eventName: string, e: Event) => void;\nexport type TrackId = `${MessageKey}-${number}`;\n\nexport interface Track {\n audio: HTMLAudioElement;\n proxy: HTMLAudioElement;\n type: 'voice' | 'audio';\n handlers: Handler[];\n onForcePlay?: NoneToVoidFunction;\n onTrackChange?: NoneToVoidFunction;\n}\n\nconst tracks = new Map();\nlet voiceQueue: TrackId[] = [];\nlet musicQueue: TrackId[] = [];\n\nlet currentTrackId: TrackId | undefined;\n\nfunction createAudio(\n trackId: TrackId,\n type: Track['type'],\n onForcePlay?: NoneToVoidFunction,\n onTrackChange?: NoneToVoidFunction,\n): Track {\n const audio = new Audio();\n\n function handleEvent(eventName: string) {\n return (e: Event) => {\n if (!tracks.has(trackId)) {\n return;\n }\n\n if (isSafariPatchInProgress(audio)) {\n return;\n }\n\n tracks.get(trackId)!.handlers.forEach((handler) => {\n handler(eventName, e);\n });\n };\n }\n\n audio.addEventListener('timeupdate', handleEvent('onTimeUpdate'));\n audio.addEventListener('play', handleEvent('onPlay'));\n audio.addEventListener('pause', handleEvent('onPause'));\n audio.addEventListener('loadstart', handleEvent('onLoadStart'));\n audio.addEventListener('loadeddata', handleEvent('onLoadedData'));\n audio.addEventListener('playing', handleEvent('onPlaying'));\n audio.addEventListener('ended', () => {\n if (!tracks.has(trackId)) {\n return;\n }\n\n if (isSafariPatchInProgress(audio)) {\n return;\n }\n\n playNext(trackId);\n });\n\n return {\n audio,\n type,\n proxy: new Proxy(audio, {\n get: (target, key: keyof HTMLAudioElement) => target[key],\n }),\n handlers: [],\n onForcePlay,\n onTrackChange,\n };\n}\n\nfunction playNext(trackId: TrackId, isReverseOrder?: boolean) {\n const currentTrack = currentTrackId && tracks.get(currentTrackId);\n if (currentTrack) {\n currentTrack.audio.pause();\n currentTrack.audio.currentTime = 0;\n if (currentTrack.onTrackChange) currentTrack.onTrackChange();\n }\n\n const origin = getGlobal().audioPlayer.origin || AudioOrigin.Inline;\n\n const nextTrackId = findNextInQueue(trackId, origin, isReverseOrder);\n if (!nextTrackId) {\n return;\n }\n\n if (!tracks.has(nextTrackId)) {\n // A bit hacky way to continue playlist when switching chat\n getActions().openAudioPlayer(parseMessageKey(splitTrackId(nextTrackId).messageKey));\n\n return;\n }\n\n const nextTrack = tracks.get(nextTrackId)!;\n\n if (nextTrack.onForcePlay) {\n nextTrack.onForcePlay();\n }\n\n currentTrackId = nextTrackId;\n\n if (nextTrack.audio.src) {\n safePlay(nextTrack.audio);\n }\n}\n\nexport function stopCurrentAudio() {\n const currentTrack = currentTrackId && tracks.get(currentTrackId);\n if (currentTrack) {\n currentTrack.audio.pause();\n }\n}\n\nexport function register(\n trackId: TrackId,\n trackType: Track['type'],\n handler: Handler,\n onForcePlay?: NoneToVoidFunction,\n onTrackChange?: NoneToVoidFunction,\n) {\n if (!tracks.has(trackId)) {\n const track = createAudio(trackId, trackType, onForcePlay, onTrackChange);\n tracks.set(trackId, track);\n addTrackToQueue(track, trackId);\n }\n const { audio, proxy, handlers } = tracks.get(trackId)!;\n\n handlers.push(handler);\n\n return {\n play(src: string) {\n if (!audio.paused) return;\n const currentTrack = currentTrackId && tracks.get(currentTrackId);\n if (currentTrack && currentTrackId !== trackId) {\n currentTrack.audio.pause();\n currentTrack.audio.currentTime = 0;\n if (isSafariPatchInProgress(currentTrack.audio)) {\n currentTrack.audio.dataset.preventPlayAfterPatch = 'true';\n }\n if (currentTrack.onTrackChange) currentTrack.onTrackChange();\n }\n\n currentTrackId = trackId;\n\n if (!audio.src) {\n audio.src = src;\n audio.preload = 'auto';\n\n if (src.includes('/progressive/') && IS_SAFARI) {\n delete audio.dataset.preventPlayAfterPatch;\n patchSafariProgressiveAudio(audio);\n }\n }\n\n safePlay(audio);\n cleanUpQueue(trackType, trackId);\n },\n\n pause() {\n if (currentTrackId === trackId) {\n audio.pause();\n }\n },\n\n stop() {\n if (currentTrackId === trackId) {\n // Hack, reset src to remove default media session notification\n const prevSrc = audio.src;\n audio.pause();\n // onPause not called otherwise, but required to sync UI\n fastRaf(() => {\n audio.src = '';\n audio.src = prevSrc;\n });\n }\n },\n\n setCurrentTime(time: number) {\n if (currentTrackId === trackId) {\n if (audio.fastSeek) {\n audio.fastSeek(time);\n } else {\n audio.currentTime = time;\n }\n }\n },\n\n setVolume(volume: number) {\n if (currentTrackId === trackId) {\n audio.volume = volume;\n audio.muted = false;\n }\n },\n\n setPlaybackRate(rate: number) {\n if (currentTrackId === trackId) {\n audio.playbackRate = rate;\n }\n },\n\n toggleMuted(muted?: boolean) {\n if (muted === undefined) {\n audio.muted = !audio.muted;\n } else {\n audio.muted = muted;\n }\n },\n\n proxy,\n\n requestNextTrack() {\n playNext(trackId);\n },\n\n isLast() {\n return !findNextInQueue(trackId, getGlobal().audioPlayer.origin);\n },\n\n isFirst() {\n return !findNextInQueue(trackId, getGlobal().audioPlayer.origin, true);\n },\n\n requestPreviousTrack() {\n playNext(trackId, true);\n },\n\n destroy(shouldRemoveFromQueue = false) {\n const track = tracks.get(trackId);\n if (!track) {\n return;\n }\n\n track.handlers = track.handlers.filter((h) => h !== handler);\n\n if (!track.handlers.length) {\n track.audio.pause();\n tracks.delete(trackId);\n\n if (shouldRemoveFromQueue) {\n removeFromQueue(track, trackId);\n }\n\n if (trackId === currentTrackId) {\n currentTrackId = undefined;\n }\n }\n },\n };\n}\n\nfunction getTrackQueue(track: Track) {\n switch (track.type) {\n case 'audio': return musicQueue;\n case 'voice': return voiceQueue;\n default: return undefined;\n }\n}\n\nfunction addTrackToQueue(track: Track, trackId: TrackId) {\n if (track.type === 'audio' && !musicQueue.includes(trackId)) {\n musicQueue.push(trackId);\n musicQueue.sort(trackIdComparator);\n }\n\n if (track.type === 'voice' && !voiceQueue.includes(trackId)) {\n voiceQueue.push(trackId);\n voiceQueue.sort(trackIdComparator);\n }\n}\n\nfunction removeFromQueue(track: Track, trackId: TrackId) {\n const trackIdFilter = (el: TrackId) => el !== trackId;\n if (track.type === 'audio') {\n musicQueue = musicQueue.filter(trackIdFilter);\n }\n\n if (track.type === 'voice') {\n voiceQueue = voiceQueue.filter(trackIdFilter);\n }\n}\n\nfunction cleanUpQueue(type: Track['type'], trackId: TrackId) {\n if (getGlobal().globalSearch.currentContent === GlobalSearchContent.Music) return;\n const { chatId } = parseMessageKey(splitTrackId(trackId).messageKey);\n const openedChatId = selectCurrentMessageList(getGlobal())?.chatId;\n const queueFilter = (id: string) => (\n id.startsWith(`msg${chatId}`) || (openedChatId && id.startsWith(`msg${openedChatId}`))\n );\n\n if (type === 'audio') {\n musicQueue = musicQueue.filter(queueFilter);\n }\n\n if (type === 'voice') {\n voiceQueue = voiceQueue.filter(queueFilter);\n }\n}\n\nfunction findNextInQueue(currentId: TrackId, origin = AudioOrigin.Inline, isReverseOrder?: boolean) {\n const track = tracks.get(currentId)!;\n const queue = getTrackQueue(track);\n if (!queue) return undefined;\n\n if (origin === AudioOrigin.Search) {\n const index = queue.indexOf(currentId);\n if (index < 0) return undefined;\n const direction = isReverseOrder ? -1 : 1;\n return queue[index + direction];\n }\n\n const { chatId } = parseMessageKey(splitTrackId(currentId).messageKey);\n const chatAudio = queue.filter((id) => id.startsWith(`msg${chatId}`));\n const index = chatAudio.indexOf(currentId);\n if (index < 0) return undefined;\n let direction = origin === AudioOrigin.Inline ? -1 : 1;\n if (isReverseOrder) direction *= -1;\n return chatAudio[index + direction];\n}\n\nexport function makeTrackId(message: ApiMessage): TrackId {\n return `${getMessageKey(message)}-${message.date}`;\n}\n\nfunction splitTrackId(trackId: TrackId) {\n const messageKey = trackId.match(/^msg(-?\\d+)-(\\d+)/)![0] as MessageKey;\n const date = Number(trackId.split('-').pop());\n return {\n messageKey,\n date,\n };\n}\n\n// Descending order by date\nfunction trackIdComparator(one?: TrackId, two?: TrackId) {\n if (!one || !two) return 0;\n const { date: dateOne, messageKey: keyOne } = splitTrackId(one);\n const { date: dateTwo, messageKey: keyTwo } = splitTrackId(two);\n const diff = dateTwo - dateOne;\n return diff === 0 ? keyTwo.localeCompare(keyOne) : diff;\n}\n","import { IS_IOS } from './environment';\n\nexport enum SwipeDirection {\n Up,\n Down,\n Left,\n Right,\n}\n\ninterface CaptureOptions {\n onCapture?: (e: MouseEvent | TouchEvent) => void;\n onRelease?: (e: MouseEvent | TouchEvent) => void;\n onDrag?: (\n e: MouseEvent | TouchEvent,\n captureEvent: MouseEvent | TouchEvent,\n params: {\n dragOffsetX: number;\n dragOffsetY: number;\n },\n ) => void;\n onSwipe?: (e: Event, direction: SwipeDirection) => boolean;\n onZoom?: (e: TouchEvent, params: {\n // Relative zoom factor\n zoomFactor: number;\n\n // center coordinate of the initial pinch\n initialCenterX: number;\n initialCenterY: number;\n\n // offset of the pinch center (current from initial)\n dragOffsetX: number;\n dragOffsetY: number;\n\n // center coordinate of the current pinch\n currentCenterX: number;\n currentCenterY: number;\n }) => void;\n onClick?: (e: MouseEvent | TouchEvent) => void;\n onDoubleClick?: (e: MouseEvent | RealTouchEvent, params: { centerX: number; centerY: number }) => void;\n excludedClosestSelector?: string;\n selectorToPreventScroll?: string;\n maxZoom?: number;\n minZoom?: number;\n isNotPassive?: boolean;\n withCursor?: boolean;\n}\n\n// https://stackoverflow.com/questions/11287877/how-can-i-get-e-offsetx-on-mobile-ipad\n// Android does not have this value, and iOS has it but as read-only\nexport interface RealTouchEvent extends TouchEvent {\n pageX?: number;\n pageY?: number;\n}\n\ntype TSwipeAxis =\n 'x'\n | 'y'\n | undefined;\n\nexport const IOS_SCREEN_EDGE_THRESHOLD = 20;\nconst MOVED_THRESHOLD = 15;\nconst SWIPE_THRESHOLD = 50;\n\nfunction getDistance(a: Touch, b?: Touch) {\n if (!b) return 0;\n return Math.sqrt((b.pageX - a.pageX) ** 2 + (b.pageY - a.pageY) ** 2);\n}\n\nfunction getTouchCenter(a: Touch, b: Touch) {\n return {\n x: (a.pageX + b.pageX) / 2,\n y: (a.pageY + b.pageY) / 2,\n };\n}\n\nlet lastClickTime = 0;\n\nexport function captureEvents(element: HTMLElement, options: CaptureOptions) {\n let captureEvent: MouseEvent | RealTouchEvent | undefined;\n let hasMoved = false;\n let hasSwiped = false;\n let initialDistance = 0;\n let initialTouchCenter = { x: window.innerWidth / 2, y: window.innerHeight / 2 };\n let initialSwipeAxis: TSwipeAxis | undefined;\n\n function onCapture(e: MouseEvent | RealTouchEvent) {\n if (options.excludedClosestSelector && (\n (e.target as HTMLElement).matches(options.excludedClosestSelector)\n || (e.target as HTMLElement).closest(options.excludedClosestSelector)\n )) {\n return;\n }\n\n captureEvent = e;\n\n if (e.type === 'mousedown') {\n if (options.onDrag) {\n e.preventDefault();\n }\n\n document.addEventListener('mousemove', onMove);\n document.addEventListener('mouseup', onRelease);\n } else if (e.type === 'touchstart') {\n // We need to always listen on `touchstart` target:\n // https://stackoverflow.com/questions/33298828/touch-move-event-dont-fire-after-touch-start-target-is-removed\n const target = e.target as HTMLElement;\n target.addEventListener('touchmove', onMove, { passive: true });\n target.addEventListener('touchend', onRelease);\n target.addEventListener('touchcancel', onRelease);\n\n if ('touches' in e) {\n if (e.pageX === undefined) {\n e.pageX = e.touches[0].pageX;\n }\n\n if (e.pageY === undefined) {\n e.pageY = e.touches[0].pageY;\n }\n\n if (e.touches.length === 2) {\n initialDistance = getDistance(e.touches[0], e.touches[1]);\n initialTouchCenter = getTouchCenter(e.touches[0], e.touches[1]);\n }\n }\n }\n\n if (options.withCursor) {\n document.body.classList.add('cursor-grabbing');\n }\n\n if (options.onCapture) {\n options.onCapture(e);\n }\n }\n\n function onRelease(e?: MouseEvent | TouchEvent) {\n if (captureEvent) {\n if (options.withCursor) {\n document.body.classList.remove('cursor-grabbing');\n }\n\n document.removeEventListener('mouseup', onRelease);\n document.removeEventListener('mousemove', onMove);\n (captureEvent.target as HTMLElement).removeEventListener('touchcancel', onRelease);\n (captureEvent.target as HTMLElement).removeEventListener('touchend', onRelease);\n (captureEvent.target as HTMLElement).removeEventListener('touchmove', onMove);\n\n if (IS_IOS && options.selectorToPreventScroll) {\n Array.from(document.querySelectorAll(options.selectorToPreventScroll)).forEach((scrollable) => {\n scrollable.style.overflow = '';\n });\n }\n\n if (e) {\n if (hasMoved) {\n if (options.onRelease) {\n options.onRelease(e);\n }\n } else if (e.type === 'mouseup') {\n if (options.onDoubleClick && Date.now() - lastClickTime < 300) {\n options.onDoubleClick(e, {\n centerX: captureEvent!.pageX!,\n centerY: captureEvent!.pageY!,\n });\n } else if (options.onClick && (!('button' in e) || e.button === 0)) {\n options.onClick(e);\n }\n lastClickTime = Date.now();\n }\n }\n }\n\n hasMoved = false;\n hasSwiped = false;\n initialDistance = 0;\n initialSwipeAxis = undefined;\n initialTouchCenter = { x: window.innerWidth / 2, y: window.innerHeight / 2 };\n captureEvent = undefined;\n }\n\n function onMove(e: MouseEvent | RealTouchEvent) {\n if (captureEvent) {\n if (e.type === 'touchmove' && ('touches' in e)) {\n if (e.pageX === undefined) {\n e.pageX = e.touches[0].pageX;\n }\n\n if (e.pageY === undefined) {\n e.pageY = e.touches[0].pageY;\n }\n\n if (options.onZoom && initialDistance > 0 && e.touches.length === 2) {\n const endDistance = getDistance(e.touches[0], e.touches[1]);\n const touchCenter = getTouchCenter(e.touches[0], e.touches[1]);\n const dragOffsetX = touchCenter.x - initialTouchCenter.x;\n const dragOffsetY = touchCenter.y - initialTouchCenter.y;\n const zoomFactor = endDistance / initialDistance;\n options.onZoom(e, {\n zoomFactor,\n initialCenterX: initialTouchCenter.x,\n initialCenterY: initialTouchCenter.y,\n dragOffsetX,\n dragOffsetY,\n currentCenterX: touchCenter.x,\n currentCenterY: touchCenter.y,\n });\n if (zoomFactor !== 1) hasMoved = true;\n }\n }\n\n const dragOffsetX = e.pageX! - captureEvent.pageX!;\n const dragOffsetY = e.pageY! - captureEvent.pageY!;\n\n if (Math.abs(dragOffsetX) >= MOVED_THRESHOLD || Math.abs(dragOffsetY) >= MOVED_THRESHOLD) {\n hasMoved = true;\n }\n\n let shouldPreventScroll = false;\n\n if (options.onDrag) {\n options.onDrag(e, captureEvent, { dragOffsetX, dragOffsetY });\n shouldPreventScroll = true;\n }\n\n if (options.onSwipe && !hasSwiped) {\n hasSwiped = onSwipe(e, dragOffsetX, dragOffsetY);\n shouldPreventScroll = hasSwiped;\n }\n\n if (IS_IOS && shouldPreventScroll && options.selectorToPreventScroll) {\n Array.from(document.querySelectorAll(options.selectorToPreventScroll)).forEach((scrollable) => {\n scrollable.style.overflow = 'hidden';\n });\n }\n }\n }\n\n function onSwipe(e: MouseEvent | RealTouchEvent, dragOffsetX: number, dragOffsetY: number) {\n // Avoid conflicts with swipe-to-back gestures\n if (IS_IOS) {\n const x = (e as RealTouchEvent).touches[0].pageX;\n if (x <= IOS_SCREEN_EDGE_THRESHOLD || x >= window.innerWidth - IOS_SCREEN_EDGE_THRESHOLD) {\n return false;\n }\n }\n\n const xAbs = Math.abs(dragOffsetX);\n const yAbs = Math.abs(dragOffsetY);\n\n if (dragOffsetX && dragOffsetY) {\n const ratio = Math.max(xAbs, yAbs) / Math.min(xAbs, yAbs);\n // Diagonal swipe\n if (ratio < 2) {\n return false;\n }\n }\n\n let axis: TSwipeAxis | undefined;\n if (xAbs >= SWIPE_THRESHOLD) {\n axis = 'x';\n } else if (yAbs >= SWIPE_THRESHOLD) {\n axis = 'y';\n }\n\n if (!axis) {\n return false;\n }\n\n if (!initialSwipeAxis) {\n initialSwipeAxis = axis;\n } else if (initialSwipeAxis !== axis) {\n // Prevent horizontal swipe after vertical to prioritize scroll\n return false;\n }\n\n return processSwipe(e, axis, dragOffsetX, dragOffsetY, options.onSwipe!);\n }\n\n element.addEventListener('mousedown', onCapture);\n element.addEventListener('touchstart', onCapture, { passive: !options.isNotPassive });\n\n return () => {\n onRelease();\n\n element.removeEventListener('touchstart', onCapture);\n element.removeEventListener('mousedown', onCapture);\n };\n}\n\nfunction processSwipe(\n e: Event,\n currentSwipeAxis: TSwipeAxis,\n dragOffsetX: number,\n dragOffsetY: number,\n onSwipe: (e: Event, direction: SwipeDirection) => boolean,\n) {\n if (currentSwipeAxis === 'x') {\n if (dragOffsetX < 0) {\n return onSwipe(e, SwipeDirection.Left);\n } else {\n return onSwipe(e, SwipeDirection.Right);\n }\n } else if (currentSwipeAxis === 'y') {\n if (dragOffsetY < 0) {\n return onSwipe(e, SwipeDirection.Up);\n } else {\n return onSwipe(e, SwipeDirection.Down);\n }\n }\n\n return false;\n}\n","// Sometimes event is fired earlier than animation completes\nconst ANIMATION_END_DELAY = 50;\n\nexport function waitForTransitionEnd(node: Node, handler: NoneToVoidFunction, propertyName?: string) {\n waitForEndEvent('transitionend', node, handler, propertyName);\n}\n\nexport function waitForAnimationEnd(node: Node, handler: NoneToVoidFunction, animationName?: string) {\n waitForEndEvent('animationend', node, handler, animationName);\n}\n\nfunction waitForEndEvent(\n eventType: 'transitionend' | 'animationend',\n node: Node,\n handler: NoneToVoidFunction,\n detailedName?: string,\n) {\n let isHandled = false;\n\n node.addEventListener(eventType, function handleAnimationEnd(e: TransitionEvent | AnimationEvent) {\n if (isHandled || e.target !== e.currentTarget) {\n return;\n }\n\n if (detailedName && (\n (e instanceof TransitionEvent && e.propertyName === detailedName)\n || (e instanceof AnimationEvent && e.animationName === detailedName)\n )) {\n return;\n }\n\n isHandled = true;\n\n node.removeEventListener(eventType, handleAnimationEnd as EventListener);\n\n setTimeout(() => {\n handler();\n }, ANIMATION_END_DELAY);\n } as EventListener);\n}\n","export default function cycleRestrict(length: number, index: number) {\n return index - Math.floor(index / length) * length;\n}\n","import { getGlobal } from '../global';\n\nimport { FocusDirection } from '../types';\n\nimport {\n ANIMATION_LEVEL_MIN,\n FAST_SMOOTH_MAX_DISTANCE, FAST_SMOOTH_MAX_DURATION, FAST_SMOOTH_MIN_DURATION,\n FAST_SMOOTH_SHORT_TRANSITION_MAX_DISTANCE,\n} from '../config';\nimport { IS_ANDROID } from './environment';\nimport { dispatchHeavyAnimationEvent } from '../hooks/useHeavyAnimationCheck';\nimport { animateSingle } from './animation';\nimport { fastRaf } from './schedulers';\n\nlet isAnimating = false;\n\nexport default function fastSmoothScroll(\n container: HTMLElement,\n element: HTMLElement,\n position: ScrollLogicalPosition | 'centerOrTop',\n margin = 0,\n maxDistance = FAST_SMOOTH_MAX_DISTANCE,\n forceDirection?: FocusDirection,\n forceDuration?: number,\n forceNormalContainerHeight?: boolean,\n) {\n const scrollFrom = calculateScrollFrom(container, element, maxDistance, forceDirection);\n\n if (forceDirection === FocusDirection.Static) {\n scrollWithJs(container, element, scrollFrom, position, margin, 0);\n return;\n }\n\n if (getGlobal().settings.byKey.animationLevel === ANIMATION_LEVEL_MIN) {\n forceDuration = 0;\n }\n\n scrollWithJs(container, element, scrollFrom, position, margin, forceDuration, forceNormalContainerHeight);\n}\n\nexport function isAnimatingScroll() {\n return isAnimating;\n}\n\nfunction calculateScrollFrom(\n container: HTMLElement,\n element: HTMLElement,\n maxDistance = FAST_SMOOTH_MAX_DISTANCE,\n forceDirection?: FocusDirection,\n) {\n const { offsetTop: elementTop } = element;\n const { scrollTop } = container;\n\n if (forceDirection === undefined) {\n const offset = elementTop - container.scrollTop;\n\n if (offset < -maxDistance) {\n return scrollTop + (offset + maxDistance);\n } else if (offset > maxDistance) {\n return scrollTop + (offset - maxDistance);\n }\n } else if (forceDirection === FocusDirection.Up) {\n return elementTop + maxDistance;\n } else if (forceDirection === FocusDirection.Down) {\n return Math.max(0, elementTop - maxDistance);\n }\n\n return scrollTop;\n}\n\nfunction scrollWithJs(\n container: HTMLElement,\n element: HTMLElement,\n scrollFrom: number,\n position: ScrollLogicalPosition | 'centerOrTop',\n margin = 0,\n forceDuration?: number,\n forceNormalContainerHeight?: boolean,\n) {\n const { offsetTop: elementTop, offsetHeight: elementHeight } = element;\n const { scrollTop: currentScrollTop, offsetHeight: containerHeight, scrollHeight } = container;\n const targetContainerHeight = forceNormalContainerHeight && container.dataset.normalHeight\n ? Number(container.dataset.normalHeight)\n : containerHeight;\n\n if (currentScrollTop !== scrollFrom) {\n container.scrollTop = scrollFrom;\n }\n\n let path!: number;\n\n switch (position) {\n case 'start':\n path = (elementTop - margin) - scrollFrom + (IS_ANDROID ? 1 : 0);\n break;\n case 'end':\n path = (elementTop + elementHeight + margin) - (scrollFrom + targetContainerHeight);\n break;\n // 'nearest' is not supported yet\n case 'nearest':\n case 'center':\n case 'centerOrTop':\n path = elementHeight < targetContainerHeight\n ? (elementTop + elementHeight / 2) - (scrollFrom + targetContainerHeight / 2)\n : (elementTop - margin) - scrollFrom;\n break;\n }\n\n if (path < 0) {\n const remainingPath = -scrollFrom;\n path = Math.max(path, remainingPath);\n } else if (path > 0) {\n const remainingPath = scrollHeight - (scrollFrom + targetContainerHeight);\n path = Math.min(path, remainingPath);\n }\n\n if (path === 0) {\n return;\n }\n\n const target = scrollFrom + path;\n\n if (forceDuration === 0) {\n container.scrollTop = target;\n return;\n }\n\n isAnimating = true;\n\n const absPath = Math.abs(path);\n const transition = absPath < FAST_SMOOTH_SHORT_TRANSITION_MAX_DISTANCE ? shortTransition : longTransition;\n const duration = forceDuration || (\n FAST_SMOOTH_MIN_DURATION\n + (absPath / FAST_SMOOTH_MAX_DISTANCE) * (FAST_SMOOTH_MAX_DURATION - FAST_SMOOTH_MIN_DURATION)\n );\n const startAt = Date.now();\n const onHeavyAnimationStop = dispatchHeavyAnimationEvent();\n\n fastRaf(() => {\n animateSingle(() => {\n const t = Math.min((Date.now() - startAt) / duration, 1);\n const currentPath = path * (1 - transition(t));\n\n container.scrollTop = Math.round(target - currentPath);\n\n isAnimating = t < 1;\n\n if (!isAnimating) {\n onHeavyAnimationStop();\n }\n\n return isAnimating;\n });\n });\n}\n\nfunction longTransition(t: number) {\n return 1 - ((1 - t) ** 5);\n}\n\nfunction shortTransition(t: number) {\n return 1 - ((1 - t) ** 3.5);\n}\n","import { getGlobal } from '../global';\n\nimport { ANIMATION_LEVEL_MIN } from '../config';\nimport { animate } from './animation';\nimport { fastRaf } from './schedulers';\n\nconst DEFAULT_DURATION = 300;\n\nexport default function fastSmoothScrollHorizontal(container: HTMLElement, left: number, duration = DEFAULT_DURATION) {\n if (getGlobal().settings.byKey.animationLevel === ANIMATION_LEVEL_MIN) {\n duration = 0;\n }\n\n scrollWithJs(container, left, duration);\n}\n\nfunction scrollWithJs(container: HTMLElement, left: number, duration: number) {\n const isRtl = container.getAttribute('dir') === 'rtl';\n const { scrollLeft, offsetWidth: containerWidth, scrollWidth } = container;\n let path = left - scrollLeft;\n\n if (path < 0) {\n const remainingPath = -scrollLeft * (isRtl ? -1 : 1);\n path = Math.max(path, remainingPath);\n } else if (path > 0) {\n const remainingPath = scrollWidth - (scrollLeft + containerWidth);\n path = Math.min(path, remainingPath);\n }\n\n if (path === 0) {\n return;\n }\n\n const target = scrollLeft + path;\n\n if (duration === 0) {\n container.scrollLeft = target;\n return;\n }\n\n const startAt = Date.now();\n\n fastRaf(() => {\n animate(() => {\n const t = Math.min((Date.now() - startAt) / duration, 1);\n\n const currentPath = path * (1 - transition(t));\n container.scrollLeft = Math.round(target - currentPath);\n\n return t < 1;\n });\n });\n}\n\nfunction transition(t: number) {\n return 1 - ((1 - t) ** 3.5);\n}\n","import { IS_TOUCH_ENV } from './environment';\n\nexport default function focusEditableElement(element: HTMLElement, force?: boolean, forcePlaceCaretAtEnd?: boolean) {\n if (!force && element === document.activeElement) {\n return;\n }\n\n const selection = window.getSelection()!;\n const range = document.createRange();\n const lastChild = element.lastChild || element;\n\n if (!IS_TOUCH_ENV && !forcePlaceCaretAtEnd && (!lastChild || !lastChild.nodeValue)) {\n element.focus();\n return;\n }\n\n range.selectNodeContents(forcePlaceCaretAtEnd ? element : lastChild);\n // `false` means collapse to the end rather than the start\n range.collapse(false);\n selection.removeAllRanges();\n selection.addRange(range);\n}\n","export default function getKeyFromEvent(e: KeyboardEvent) {\n const key = 'key' in e ? e.key : e.code;\n\n return key.startsWith('Key') ? key.slice(3).toLowerCase() : key;\n}\n","const ELEMENT_NODE = 1;\n\nexport default function getMessageIdsForSelectedText() {\n const selection = window.getSelection();\n let selectedFragments = selection && selection.rangeCount ? selection.getRangeAt(0).cloneContents() : undefined;\n if (!selectedFragments || selectedFragments.childElementCount === 0) {\n return undefined;\n }\n\n const messageIds = Array.from(selectedFragments.children)\n .reduce((result, node) => {\n if (node.nodeType === ELEMENT_NODE && node.classList.contains('message-date-group')) {\n return Array.from(node.querySelectorAll('.Message'))\n .reduce((acc, messageEl) => acc.concat(Number((messageEl as HTMLElement).dataset.messageId)), result);\n } else if (node.nodeType === ELEMENT_NODE && node.classList.contains('Message')) {\n return result.concat(Number((node as HTMLElement).dataset.messageId));\n }\n\n return result;\n }, [] as number[]);\n\n // Cleanup a document fragment because it is playing media content in the background\n while (selectedFragments.firstChild) {\n selectedFragments.removeChild(selectedFragments.firstChild);\n }\n selectedFragments = undefined;\n\n return messageIds;\n}\n","export type MediaSessionHandlers = {\n play?: () => void;\n pause?: () => void;\n stop?: () => void;\n\n previoustrack?: () => void;\n nexttrack?: () => void;\n\n togglemicrophone?: () => void;\n togglecamera?: () => void;\n hangup?: () => void;\n\n seekbackward?: (details: MediaSessionActionDetails) => void;\n seekforward?: (details: MediaSessionActionDetails) => void;\n seekTo?: ((details: MediaSessionActionDetails) => void);\n};\n\ninterface MediaMetadataParameters {\n title?: string;\n artist?: string;\n album?: string;\n artwork?: MediaImage[];\n}\n\nconst DEFAULT_HANDLERS = {\n play: undefined,\n pause: undefined,\n seekbackward: undefined,\n seekforward: undefined,\n previoustrack: undefined,\n nexttrack: undefined,\n stop: undefined,\n seekTo: undefined,\n};\n\nexport function registerMediaSession(metadata?: MediaMetadata, handlers?: MediaSessionHandlers) {\n const { mediaSession } = window.navigator;\n if (mediaSession) {\n if (metadata) updateMetadata(metadata);\n if (handlers) setMediaSessionHandlers(handlers);\n } else {\n // eslint-disable-next-line no-console\n console.warn('MediaSession API not supported in this browser');\n }\n}\n\nexport function updateMetadata(metadata?: MediaMetadata) {\n const { mediaSession } = window.navigator;\n if (mediaSession) {\n // eslint-disable-next-line no-null/no-null\n mediaSession.metadata = metadata ?? null;\n }\n}\n\nexport function setMediaSessionHandlers(handlers: MediaSessionHandlers) {\n const { mediaSession } = window.navigator;\n if (mediaSession) {\n Object.entries({ ...DEFAULT_HANDLERS, ...handlers }).forEach(([key, handler]) => {\n try {\n // @ts-ignore API not standardized yet\n mediaSession.setActionHandler(key, handler);\n } catch (err) {\n // Handler not supported, ignoring\n }\n });\n }\n}\n\nexport function clearMediaSession() {\n const { mediaSession } = window.navigator;\n if (mediaSession) {\n // eslint-disable-next-line no-null/no-null\n mediaSession.metadata = null;\n setMediaSessionHandlers(DEFAULT_HANDLERS);\n if (mediaSession.playbackState) mediaSession.playbackState = 'none';\n mediaSession.setPositionState?.();\n }\n}\n\nexport function setPlaybackState(state: 'none' | 'paused' | 'playing' = 'none') {\n const { mediaSession } = window.navigator;\n if (mediaSession && mediaSession.playbackState) {\n mediaSession.playbackState = state;\n }\n}\n\nexport function setPositionState(state?: MediaPositionState) {\n if (!state || state.position === undefined || state.duration === undefined) return;\n state.position = Math.min(state.position, state.duration);\n\n const { mediaSession } = window.navigator;\n mediaSession?.setPositionState?.(state);\n}\n\nexport function setMicrophoneActive(active: boolean) {\n const { mediaSession } = window.navigator;\n mediaSession?.setMicrophoneActive?.(active);\n}\n\nexport function setCameraActive(active: boolean) {\n const { mediaSession } = window.navigator;\n mediaSession?.setCameraActive?.(active);\n}\n\nexport function buildMediaMetadata({\n title, artist, album, artwork,\n}: MediaMetadataParameters) {\n if ('MediaMetadata' in window) {\n return new window.MediaMetadata({\n title,\n artist,\n album,\n artwork,\n });\n }\n return undefined;\n}\n","import { ApiMessageEntity, ApiMessageEntityTypes, ApiFormattedText } from '../api/types';\nimport { IS_EMOJI_SUPPORTED } from './environment';\n\nconst ENTITY_CLASS_BY_NODE_NAME: Record = {\n B: ApiMessageEntityTypes.Bold,\n STRONG: ApiMessageEntityTypes.Bold,\n I: ApiMessageEntityTypes.Italic,\n EM: ApiMessageEntityTypes.Italic,\n U: ApiMessageEntityTypes.Underline,\n S: ApiMessageEntityTypes.Strike,\n STRIKE: ApiMessageEntityTypes.Strike,\n DEL: ApiMessageEntityTypes.Strike,\n CODE: ApiMessageEntityTypes.Code,\n PRE: ApiMessageEntityTypes.Pre,\n BLOCKQUOTE: ApiMessageEntityTypes.Blockquote,\n};\n\nconst MAX_TAG_DEEPNESS = 3;\n\nexport default function parseMessageInput(html: string): ApiFormattedText {\n const fragment = document.createElement('div');\n fragment.innerHTML = parseMarkdown(html);\n const text = fragment.innerText.trim().replace(/\\u200b+/g, '');\n let textIndex = 0;\n let recursionDeepness = 0;\n const entities: ApiMessageEntity[] = [];\n\n function addEntity(node: ChildNode) {\n const { index, entity } = getEntityDataFromNode(node, text, textIndex);\n\n if (entity) {\n textIndex = index;\n entities.push(entity);\n } else if (node.textContent) {\n textIndex += node.textContent.length;\n }\n\n if (node.hasChildNodes() && recursionDeepness <= MAX_TAG_DEEPNESS) {\n recursionDeepness += 1;\n Array.from(node.childNodes).forEach(addEntity);\n }\n }\n\n Array.from(fragment.childNodes).forEach((node) => {\n recursionDeepness = 1;\n addEntity(node);\n });\n\n return {\n text,\n entities: entities.length ? entities : undefined,\n };\n}\n\nfunction parseMarkdown(html: string) {\n let parsedHtml = html.slice(0);\n\n if (!IS_EMOJI_SUPPORTED) {\n // Emojis\n parsedHtml = parsedHtml.replace(/]+alt=\"([^\"]+)\"[^>]*>/gm, '$1');\n }\n\n // Strip redundant nbsp's\n parsedHtml = parsedHtml.replace(/ /g, ' ');\n\n // Replace

with newline (new line in Safari)\n parsedHtml = parsedHtml.replace(/
]*)?><\\/div>/g, '\\n');\n // Replace
with newline\n parsedHtml = parsedHtml.replace(/]*)?>/g, '\\n');\n\n // Strip redundant
tags\n parsedHtml = parsedHtml.replace(/<\\/div>(\\s*)
/g, '\\n');\n parsedHtml = parsedHtml.replace(/
/g, '\\n');\n parsedHtml = parsedHtml.replace(/<\\/div>/g, '');\n\n // Pre\n parsedHtml = parsedHtml.replace(/^`{3}(.*[\\n\\r][^]*?^)`{3}/gm, '
$1
');\n parsedHtml = parsedHtml.replace(/[`]{3}([^`]+)[`]{3}/g, '
$1
');\n\n // Code\n parsedHtml = parsedHtml.replace(/[`]{1}([^`\\n]+)[`]{1}/g, '$1');\n\n // Other simple markdown\n parsedHtml = parsedHtml.replace(\n /(^|\\s)(?!)(\\s|$)/g,\n '$1$2$3',\n );\n parsedHtml = parsedHtml.replace(\n /(^|\\s)(?!)(\\s|$)/g,\n '$1$2$3',\n );\n parsedHtml = parsedHtml.replace(\n /(^|\\s)(?!)(\\s|$)/g,\n '$1$2$3',\n );\n parsedHtml = parsedHtml.replace(\n /(^|\\s)(?!)(\\s|$)/g,\n `$1$2$3`,\n );\n\n return parsedHtml;\n}\n\nfunction getEntityDataFromNode(\n node: ChildNode,\n rawText: string,\n textIndex: number,\n): { index: number; entity?: ApiMessageEntity } {\n const type = getEntityTypeFromNode(node);\n if (!type || !node.textContent) {\n return {\n index: textIndex,\n entity: undefined,\n };\n }\n\n const rawIndex = rawText.indexOf(node.textContent, textIndex);\n // In some cases, last text entity ends with a newline (which gets trimmed from `rawText`).\n // In this case, `rawIndex` would return `-1`, so we use `textIndex` instead.\n const index = rawIndex >= 0 ? rawIndex : textIndex;\n const offset = rawText.substring(0, index).length;\n const { length } = rawText.substring(index, index + node.textContent.length);\n\n let url: string | undefined;\n let userId: string | undefined;\n if (type === ApiMessageEntityTypes.TextUrl) {\n url = (node as HTMLAnchorElement).href;\n }\n if (type === ApiMessageEntityTypes.MentionName) {\n userId = (node as HTMLAnchorElement).dataset.userId;\n }\n\n return {\n index,\n entity: {\n type,\n offset,\n length,\n ...(url && { url }),\n ...(userId && { userId }),\n },\n };\n}\n\nfunction getEntityTypeFromNode(node: ChildNode) {\n if (ENTITY_CLASS_BY_NODE_NAME[node.nodeName]) {\n return ENTITY_CLASS_BY_NODE_NAME[node.nodeName];\n }\n\n if (node.nodeName === 'A') {\n const anchor = node as HTMLAnchorElement;\n if (anchor.dataset.entityType === ApiMessageEntityTypes.MentionName) {\n return ApiMessageEntityTypes.MentionName;\n }\n if (anchor.dataset.entityType === ApiMessageEntityTypes.Url) {\n return ApiMessageEntityTypes.Url;\n }\n if (anchor.href.startsWith('mailto:')) {\n return ApiMessageEntityTypes.Email;\n }\n if (anchor.href.startsWith('tel:')) {\n return ApiMessageEntityTypes.Phone;\n }\n if (anchor.href !== anchor.textContent) {\n return ApiMessageEntityTypes.TextUrl;\n }\n\n return ApiMessageEntityTypes.Url;\n }\n\n if (node.nodeName === 'SPAN') {\n return (node as HTMLElement).dataset.entityType;\n }\n\n return undefined;\n}\n","/*\n * Thanks to Ace Monkey for this mind-blowing patch.\n */\n\nexport function patchSafariProgressiveAudio(audioEl: HTMLAudioElement) {\n if (audioEl.dataset.patchedForSafari) {\n return;\n }\n\n audioEl.addEventListener('play', () => {\n const t = audioEl.currentTime;\n\n audioEl.dataset.patchForSafariInProgress = 'true';\n function onProgress() {\n if (!audioEl.buffered.length) {\n return;\n }\n audioEl.currentTime = audioEl.duration - 1;\n audioEl.addEventListener('progress', () => {\n delete audioEl.dataset.patchForSafariInProgress;\n audioEl.currentTime = t;\n if (audioEl.paused && !audioEl.dataset.preventPlayAfterPatch) {\n audioEl.play();\n }\n }, { once: true });\n\n audioEl.removeEventListener('progress', onProgress);\n }\n\n audioEl.addEventListener('progress', onProgress);\n }, { once: true });\n\n audioEl.dataset.patchedForSafari = 'true';\n}\n\nexport function isSafariPatchInProgress(audioEl: HTMLAudioElement) {\n return Boolean(audioEl.dataset.patchForSafariInProgress);\n}\n","import React from '../lib/teact/teact';\n\nconst stopEvent = (e: React.UIEvent | Event) => {\n e.stopPropagation();\n e.preventDefault();\n};\n\nexport default stopEvent;\n","let fileSelector: HTMLInputElement;\n\nexport function openSystemFilesDialog(accept = '*', callback: (e: Event) => void, noMultiple = false) {\n if (!fileSelector) {\n fileSelector = document.createElement('input');\n fileSelector.setAttribute('type', 'file');\n }\n\n fileSelector.setAttribute('accept', accept);\n\n if (noMultiple) {\n fileSelector.removeAttribute('multiple');\n } else {\n fileSelector.setAttribute('multiple', 'multiple');\n }\n\n // eslint-disable-next-line no-null/no-null\n fileSelector.onchange = null;\n fileSelector.value = '';\n fileSelector.onchange = callback;\n\n fileSelector.click();\n}\n"],"names":["memo","sticker","effect","isOwn","soundId","size","observeIntersection","lastSyncTime","forceLoadPreview","messageId","chatId","activeEmojiInteractions","markAnimationLoaded","isAnimationLoaded","ref","width","style","handleClick","playKey","useAnimatedEmoji","undefined","emoji","localMediaHash","id","isIntersecting","useIsIntersecting","thumbDataUri","thumbnail","dataUri","previewBlobUrl","useMedia","ApiMediaFormat","transitionClassNames","useMediaTransition","mediaData","isMediaLoaded","Boolean","className","buildClassName","LIKE_STICKER_ID","onClick","src","alt","key","animationData","quality","play","forceOnHeavyAnimation","noLoop","onLoad","renderWaveform","canvas","spikes","progress","peak","fillStyle","progressFillStyle","length","height","ctx","getContext","scale","forEach","item","i","globalAlpha","spikeHeight","Math","max","x","y","radius","beginPath","moveTo","arcTo","closePath","roundedRectangle","fill","decodeWaveform","encoded5bit","bitsCount","valuesCount","floor","result","Array","bitsData","l","byteIndex","bitShift","value","lastByteIndex","lastBitShift","lastValue","interpolateArray","data","fitCount","newData","springFactor","leftFiller","rightFiller","idx","val","MIN_SPIKES","IS_SINGLE_COLUMN_LAYOUT","MAX_SPIKES","renderSeekline","playProgress","bufferedRanges","seekerRef","map","start","end","theme","message","senderTitle","uploadProgress","origin","date","isSelectable","isSelected","isDownloading","onPlay","onReadMedia","onCancelUpload","onDateClick","cancelMessageMediaDownload","downloadMessageMedia","getActions","content","audio","voice","video","isMediaUnread","isVoice","isSeeking","useRef","lang","useLang","isRtl","isActivated","setIsActivated","useState","shouldLoad","coverHash","getMessageMediaHash","coverBlobUrl","getMessageMediaFormat","loadProgress","downloadProgress","useMediaWithLoadProgress","handleForcePlay","useCallback","handleTrackChange","isBuffered","bufferingHandlers","checkBuffering","useBuffering","isPlaying","playPause","setCurrentTime","duration","useAudioPlayer","makeTrackId","getMediaDuration","isMessageLocal","isOwnMessage","waveformCanvasRef","canvasRef","useMemo","waveform","min","durationFactor","spikesCount","round","Uint8Array","useLayoutEffect","current","useWaveformCanvas","withSeekline","useEffect","isLoadingForPlaying","isUploading","isTransferring","transferProgress","getMediaTransferState","shouldRender","shouldRenderSpinner","spinnerClassNames","useShowTransition","shouldRenderCross","handleButtonClick","setAudioPlayerOrigin","handleDownloadClick","handleSeek","e","left","getBoundingClientRect","clientX","MouseEvent","targetTouches","stopPropagation","handleStartSeek","button","handleStopSeek","handleDateClick","renderFirstLine","title","fileName","captureEvents","onCapture","onRelease","onDrag","fullClassName","AudioOrigin","buttonClassNames","push","contentClassName","renderWithTitle","dir","renderText","Link","formatPastTimeShort","formatMediaDuration","performer","renderSecondLine","Button","ripple","color","join","ariaLabel","backgroundImage","ProgressSpinner","transparent","noCross","showProgress","showSeekline","getTranslation","getFileSizeString","formatMediaDateTime","renderAudio","draggable","renderVoice","withGlobal","global","chatOrUserId","countryList","phoneCodes","phoneCodeList","chat","selectChat","user","isUserId","selectUser","isMuted","selectIsChatMuted","selectNotifySettings","selectNotifyExceptions","canInviteUsers","isChatChannel","isUserRightBanned","getHasAdminRight","forceShowSelf","loadFullUser","showNotification","updateChatMutedState","userId","fullInfo","username","phoneNumber","isSelf","handleNotificationChange","isRestricted","copy","text","entity","copyTextToClipboard","formattedNumber","formatPhoneNumberWithCode","link","getChatLink","description","bio","getChatDescription","icon","multiline","narrow","isStatic","label","checked","inactive","isPrivateChat","isChatWithSelf","selectIsChatWithSelf","getPrivateChatUserId","isBot","isUserBot","isSupport","canDeleteForAll","contactName","getUserFirstOrLastName","isChannel","isBasicGroup","isChatBasicGroup","isSuperGroup","isChatSuperGroup","currentUserId","isOpen","onClose","onCloseAnimationEnd","leaveChannel","deleteHistory","deleteChannel","deleteChatUser","blockContact","chatTitle","getChatTitle","handleDeleteMessageForAll","shouldDeleteForAll","handleDeleteAndStop","contactId","accessHash","handleDeleteChat","isCreator","handleLeaveChat","header","isSavedMessages","isText","smaller","canAutoLoad","autoLoadFileMaxSizeMb","withDate","datetime","sender","onMediaClick","dispatch","document","timestamp","extension","getDocumentExtension","wasIntersected","markIntersected","useFlag","isLoadAllowed","setIsLoadAllowed","shouldDownload","documentHash","isLoaded","hasPreview","getDocumentHasPreview","getMessageMediaThumbDataUri","localBlobUrl","previewData","withMediaViewer","mediaType","name","thumbnailDataUri","actionIcon","isMessageDocumentVideo","elementRef","shouldSpinnerRender","getColorFromExtension","sizeString","getDocumentThumbnailDimensions","onlineCount","selectChatOnlineCount","areMessagesLoaded","selectChatMessages","typingStatus","avatarSize","status","withDots","withUsername","withFullInfo","withUpdatingStatus","withChatType","noRtl","loadFullChat","openMediaViewer","isMin","handleAvatarViewerOpen","hasPhoto","avatarOwnerId","MediaViewerOrigin","isVerified","getChatTypeString","handle","groupStatus","chatTypeString","membersCount","getGroupStatus","onlineStatus","renderStatusOrTyping","outgoingStatus","idPrefix","isProtected","mediaBlobUrl","getMessageVideo","getMessageHtmlId","decoding","onContextMenu","stopEvent","isGif","Keys","activeKey","DEFAULT_TEXT","itemIds","selectedIds","filterValue","filterPlaceholder","notFoundText","searchInputId","isLoading","noScrollRestore","onSelectedIdsChange","onFilterChange","onLoadMore","inputRef","shouldMinimize","setTimeout","requestAnimationFrame","focus","handleItemClick","newSelectedIds","includes","splice","indexOf","handleFilterChange","currentTarget","viewportIds","getMore","useInfiniteScroll","isMinimized","canClose","clickArg","onChange","placeholder","items","iconElement","titleText","serverTimeOffset","userStatus","selectUserStatus","noStatusOrTyping","fullName","getUserFullName","isUserOnline","getUserStatus","photo","isFirstPhoto","isDeleted","isDeletedUser","isRepliesChat","isChatWithRepliesBot","getMediaHash","forceAvatar","hash","getChatAvatarHash","photoBlobUrl","avatarMediaHash","avatarBlobUrl","imageSrc","userFullName","getFirstLetters","Spinner","getUserColorKey","connectionState","animationLevel","settings","byKey","photos","slideAnimation","currentPhotoIndex","setCurrentPhotoIndex","isFirst","isLast","profile","currentIndex","slice","mediaLoader","usePhotosPreload","handleProfilePhotoClick","profilePhotoIndex","selectPreviousMedia","selectNextMedia","element","querySelector","selectorToPreventScroll","onSwipe","IS_TOUCH_ENV","direction","SwipeDirection","isVerifiedIconShown","_","renderPhotoTabs","Transition","renderPhoto","type","VerifiedIcon","reaction","staticIconId","getGlobal","availableReactions","find","staticIcon","noAnimate","noContextMenu","onFaveClick","onUnfaveClick","stickerSelector","shouldPlay","lottieData","isLottie","isLottieLoaded","markLoaded","unmarkLoaded","canLottiePlay","isVideo","IS_WEBM_SUPPORTED","videoBlobUrl","canVideoPlay","previewTransitionClassNames","isContextMenuOpen","contextMenuPosition","handleBeforeContextMenu","handleContextMenu","handleContextMenuClose","handleContextMenuHide","useContextMenuHandlers","getTriggerElement","getRootElement","closest","getMenuElement","positionX","positionY","transformOriginX","transformOriginY","menuStyle","useContextMenuPosition","safePlay","pause","handleUnfaveClick","preventDefault","handleContextUnfave","handleContextFave","handleSendQuiet","handleSendScheduled","onMouseDown","preventMessageInputBlurWithBubbling","autoPlay","loop","playsInline","muted","isLowPriority","autoClose","props","StickerSetModal","useModuleLoader","Bundles","typingUser","typingUserName","action","replace","trim","VERIFIED_ICON","__html","dangerouslySetInnerHTML","onMessageClick","linkData","getMessageWebPage","getFirstLinkInMessage","url","domain","siteName","formattedDescription","getMessageText","renderMessageSummary","handleMessageClick","displayUrl","truncatedDescription","trimText","MEDIA_VIEWER_MEDIA_QUERY","REM","parseInt","getComputedStyle","documentElement","fontSize","ROUND_VIDEO_DIMENSIONS_PX","AVATAR_FULL_DIMENSIONS","DEFAULT_MEDIA_DIMENSIONS","cachedMaxWidthOwn","cachedMaxWidth","cachedMaxWidthNoAvatar","getAvailableWidth","fromOwnMessage","isForwarded","isWebPagePhoto","noAvatars","extraPaddingRem","availableWidthRem","regularMaxWidth","windowWidth","windowSize","getMaxMessageWidthRem","calculateDimensionsForMessageMedia","aspectRatio","availableWidth","availableHeight","getAvailableHeight","mediaWidth","calculateDimensions","getMediaViewerAvailableDimensions","withFooter","mql","window","matchMedia","windowHeight","occupiedHeightRem","matches","calculateInlineImageDimensions","getPhotoInlineDimensions","calculateVideoDimensions","getVideoDimensions","getPictogramDimensions","getStickerDimensions","baseWidth","STICKER_SIZE_INLINE_MOBILE_FACTOR","STICKER_SIZE_INLINE_DESKTOP_FACTOR","calculatedHeight","calculateMediaViewerDimensions","mediaHeight","calculatedWidth","WIDTH","large","medium","small","localEffect","interactWithAnimatedEmoji","sendEmojiInteraction","sendWatchingEmojiInteraction","hasEffect","audioRef","soundMediaData","setPlayKey","String","random","interactions","startedInteractions","sendInteractionBunch","remove","Audio","addEventListener","once","container","startSize","isReversed","performance","now","interactionMessageId","emoticon","selectLocalAnimatedEmojiEffectByName","ChatFolderModal","ChatAnimationTypes","isPinned","isShown","unreadCount","hasUnreadMark","ShowTransition","isCustom","unreadMentionsCount","formatIntegerCompact","isActive","lastMessage","senderId","replyToMessageId","isOutgoing","lastMessageSender","lastMessageAction","getMessageAction","actionTargetMessage","selectChatMessage","targetUserIds","actionTargetUserIds","targetChatId","actionTargetChatId","privateChatUserId","currentChatId","threadId","currentThreadId","messageListType","selectCurrentMessageList","MAIN_THREAD_ID","draft","selectDraft","canScrollDown","canChangeFolder","chatFolders","orderedIds","lastMessageOutgoingStatus","selectOutgoingStatus","folderId","orderDiff","animationType","openChat","focusLastMessage","isDeleteModalOpen","openDeleteModal","closeDeleteModal","isChatFolderModalOpen","openChatFolderModal","closeChatFolderModal","shouldRenderDeleteModal","markRenderDeleteModal","unmarkRenderDeleteModal","shouldRenderChatFolderModal","markRenderChatFolderModal","unmarkRenderChatFolderModal","isAction","isActionMessage","useEnsureMessage","mediaThumbnail","getMessageSticker","isRoundVideo","getMessageRoundVideo","actionTargetUsers","usersById","users","byId","filter","Opacity","opacity","fastRaf","classList","add","Move","transform","ANIMATION_END_DELAY","shouldReplaceHistory","contextActions","useChatContextActions","handleDelete","handleChatFolderChange","ListItem","Avatar","isCallActive","isCallNotEmpty","LastMessageMeta","TypingStatus","isChat","renderActionMessageText","asTextWithSpoilers","senderName","getMessageSenderName","blobUrl","renderSummary","renderLastMessageOrTyping","DeleteChatModal","folderType","chatFolder","selectChatFolder","animatedEmoji","selectAnimatedEmoji","foldersDispatch","onScreenSelect","handleEditFolder","payload","SettingsScreens","AnimatedEmoji","fluid","pill","openNextChat","resolvedFolderId","ALL_FOLDER_ID","ARCHIVED_FOLDER_ID","useFolderManagerForOrderedIds","orderById","reduce","acc","prevOrderById","usePrevious","orderDiffById","mapValues","order","CHAT_LIST_SLICE","handleKeyDown","removeEventListener","IS_PWA","IS_MAC_OS","metaKey","ctrlKey","code","startsWith","digit","match","position","Number","altKey","targetIndexDelta","getAnimationType","orderDiffs","Object","values","numberOfUp","diff","numberOfDown","None","Infinity","useChatAnimationType","InfiniteScroll","preloadBackwards","withAbsolutePositioning","maxHeight","CHAT_HEIGHT_PX","viewportOffset","pinnedCount","getPinnedChatsCount","teactOrderKey","renderChats","Loading","getSenderName","chatsById","getSenderTitle","isChatGroup","CustomSend","isQuick","onFileSelect","isHovered","markHovered","unmarkHovered","onDrop","onDragEnter","onDragLeave","relatedTarget","toTarget","DropAreaState","withQuick","onHide","hideTimeoutRef","prevWithQuick","captureEscKeyListener","handleFilesDrop","async","dataTransfer","dt","files","folderFiles","getFilesFromDataTransferItems","concat","from","handleQuickFilesDrop","handleDragLeave","target","fromTarget","Portal","containerId","onDragOver","clearTimeout","EmojiTooltip","MAX_INPUT_HEIGHT","messageSendKeyCombo","replyingToId","selectReplyingToId","noTabCapture","isPollModalOpen","payment","isPaymentModalOpen","isAttachmentModalInput","editableInputId","html","forcedPlaceholder","canAutoFocus","shouldSuppressFocus","shouldSuppressTextFormatter","onUpdate","onSuppressedFocus","onSend","editLastMessage","replyToNextMessage","cloneRef","isContextMenuOpenRef","isTextFormatterOpen","openTextFormatter","closeTextFormatter","textFormatterAnchorPosition","setTextFormatterAnchorPosition","selectedRange","setSelectedRange","sendMessageAction","useSendMessageAction","updateInputHeight","useLayoutEffectWithPrevDeps","prevHtml","innerHTML","focusInput","isHeavyAnimating","focusEditableElement","handleCloseTextFormatter","selection","getSelection","removeAllRanges","empty","clearSelection","checkSelection","IS_IOS","rangeCount","selectionRange","getRangeAt","selectedText","toString","isSelectionInsideInput","EDITABLE_INPUT_ID","parseEmojiOnlyString","START_TO_END","processSelection","selectionRect","inputRect","top","willSend","input","clone","currentHeight","newHeight","scrollHeight","transitionDuration","log","abs","exec","toggle","captureFirstTab","debounce","captureKeyboardListeners","onTab","suppressFocus","blur","contentEditable","textContent","IS_EMOJI_SUPPORTED","onKeyDown","shiftKey","handleKeyUp","IS_ANDROID","event","closeContextMenuMouseListener","closeContextMenuKeyListener","handleMouseUp","onTouchCancel","anchorPosition","TEXT_FORMAT_BY_TAG_NAME","B","STRONG","I","EM","U","DEL","CODE","SPAN","fragmentEl","createElement","containerRef","linkUrlInputRef","isLinkControlOpen","openLinkControl","closeLinkControl","linkUrl","setLinkUrl","isEditingLink","setIsEditingLink","inputClassName","setInputClassName","selectedTextFormats","setSelectedTextFormats","useVirtualBackdrop","selectedFormats","parentElement","commonAncestorContainer","textFormat","tagName","restoreSelection","addRange","updateSelectedRange","getSelectedText","innerText","getSelectedElement","updateInputStyles","offsetWidth","scrollWidth","scrollLeft","getFormatButtonClassName","keys","some","fKey","monospace","strikethrough","handleSpoilerText","spoiler","dataset","entityType","ApiMessageEntityTypes","replaceWith","execCommand","handleBoldText","bold","handleItalicText","italic","handleUnderlineText","underline","handleStrikethroughText","handleMonospaceText","handleLinkUrlConfirm","formattedLinkUrl","ensureProtocol","split","encodeURI","href","handler","k","b","u","m","s","p","getKeyFromEvent","linkUrlConfirmClassName","autoComplete","inputMode","onScroll","dataTransferItems","traverseFileTreePromise","entry","Promise","resolve","File","isFile","itemFile","getAsFile","file","isDirectory","createReader","readEntries","entries","entriesPromises","all","kind","webkitGetAsEntry","RE_BR","RE_SPACE","RE_CLEAN_HTML","RE_EXTRA_NEW_LINE","prepareForRegExp","inputId","parentNode","iterations","cache","WeakMap","memoized","fn","cached","get","args","areSortedArraysEqual","lastArgs","lastResult","set","emojiDataPromise","emojiRawData","emojiData","RE_EMOJI_SEARCH","prepareRecentEmojisMemo","recentEmojiIds","limit","pickTruthy","MEMO_EMPTY_ARRAY","prepareLibraryMemo","baseEmojiKeywords","emojiKeywords","emojis","byNative","buildCollectionByKey","baseEmojisByKeyword","natives","emojisByKeyword","byKeyword","keywords","byName","names","searchInLibraryMemo","library","matched","matchedKeywords","keyword","sort","flatten","matchedNames","unique","useEmojiTooltip","isAllowed","htmlRef","onUpdateHtml","isDisabled","markIsOpen","unmarkIsOpen","setById","shouldForceInsertEmoji","setShouldForceInsertEmoji","filteredEmojis","setFilteredEmojis","ensureEmojiData","then","getEmojiCode","forceSend","endsWith","substr","insertEmoji","textEmoji","isForce","currentHtml","atIndex","lastIndexOf","messageInput","EDITABLE_INPUT_CSS_SELECTOR","getElementById","native","isEmojiTooltipOpen","closeEmojiTooltip","default","uncompressEmoji","runThrottled","throttle","cb","RE_USERNAME_SEARCH","useMentionTooltip","canSuggestMembers","groupChatMembers","topInlineBotIds","usersToMention","setUsersToMention","updateFilteredUsers","withInlineBots","memberIds","member","filteredIds","filterUsersByName","usernameFilter","getUsernameFilter","canSuggestInlineBots","insertMention","forceFocus","insertedHtml","isMentionTooltipOpen","closeMentionTooltip","mentionFilteredUsers","useAsyncRendering","dependencies","delay","shouldRenderRef","timeoutRef","forceUpdate","useForceUpdate","useOnChange","options","selected","disabled","loadingOptions","setValues","handleChange","newValues","v","option","subLabel","children","buttonClassName","tabIndex","buttonRef","secondaryIcon","destructive","onSecondaryIconClick","isTouched","markIsTouched","unmarkIsTouched","handleSecondaryIconClick","handleMouseDown","role","DEFAULT_DURATION","onDismiss","setIsOpen","timerRef","closeAndDismiss","handleMouseEnter","handleMouseLeave","onMouseEnter","onMouseLeave","RADIUSES","xl","square","circleRadius","STROKE_WIDTH","borderRadius","circumference","PI","svg","firstElementChild","strokeDashOffset","setAttribute","hidden","loadingOption","step","renderValue","mainClassName","trackWidth","index","parentContainerClassName","focused","spinnerColor","spinnerBackgroundColor","autoFocusSearch","onReset","onFocus","onBlur","onSpinnerClick","isInputFocused","markInputFocused","unmarkInputFocused","useInputFocusOnOpen","backgroundColor","prevIsOpen","prevChildren","fromChildrenRef","noAnimation","onCheck","classNames","badgeCount","isBadgeActive","previousActiveTab","tabRef","tabEl","prevTabEl","platformEl","prevPlatformEl","shiftLeft","offsetLeft","scaleFactor","clientWidth","forceReflow","SCROLL_DURATION","tabs","activeTab","big","onSwitchTab","useHorizontalScroll","activeTabElement","childNodes","activeTabOffsetLeft","activeTabOffsetWidth","newLeft","fastSmoothScrollHorizontal","tab","renderCount","shouldRestoreHeight","shouldCleanup","cleanupExceptionKey","onStart","onStop","currentKeyRef","rendersRef","prevActiveKey","activeKeyChanged","cleanup","preservedRender","childElements","transition","isBackwards","prevActiveIndex","activeIndex","toSlide","fromSlide","ANIMATION_LEVEL_MIN","dispatchHeavyAnimationStop","dispatchHeavyAnimationEvent","waitForTransitionEnd","clientHeight","performSlideOptimized","node","HTMLElement","onAnimationEnd","activeElement","watchedNode","firstChild","waitForAnimationEnd","flexBasis","renders","contents","render","teactFastList","INCLUDED_CHAT_TYPES","EXCLUDED_CHAT_TYPES","INCLUDE_FILTER_FIELDS","EXCLUDE_FILTER_FIELDS","selectChatFilters","state","mode","selectTemp","selectedChatIds","selectedChatTypes","includedChatIds","includeFilters","pick","folder","excludedChatIds","excludeFilters","getSuggestedFolderName","filters","bots","groups","channels","contacts","nonContacts","INITIAL_STATE","chatFilter","foldersReducer","omit","error","useReducer","makeMediaHandlers","controllerRef","mediaHandlers","proxy","requestNextTrack","requestPreviousTrack","stop","closeAudioPlayer","seekbackward","skipTime","seekOffset","currentTime","seekforward","seekTo","seekTime","nexttrack","previoustrack","trackId","originalDuration","trackType","handlers","metadata","onInit","onForcePlay","onTrackChange","noPlaylist","noProgressUpdates","setIsPlaying","isPlayingSync","setPlayProgress","register","eventName","setVolume","setPlaybackRate","toggleMuted","registerMediaSession","setPlaybackState","audioPlayer","volume","playbackRate","setPositionState","isFinite","paused","updateMetadata","destroy","isSafariPatchInProgress","useEffectWithPrevDeps","prevShouldPlay","prevSrc","playIfPresent","setTime","time","audioProxy","getTimeRanges","ranges","noInitiallyBuffered","setIsBuffered","bufferedProgress","setBufferedProgress","setBufferedRanges","setIsBufferedDebounced","handleBuffering","media","buffered","bufferedLength","readyState","onLoadedData","onPlaying","onLoadStart","onPause","onTimeUpdate","onProgress","useCanvasBlur","withRaf","img","Image","processBlur","alpha","IS_CANVAS_FILTER_SUPPORTED","drawImage","RADIUS","fastBlur","onload","isInSearch","isServiceNotifications","SERVICE_NOTIFICATIONS_USER_ID","toggleChatPinned","toggleChatArchived","toggleChatUnread","actionAddToFolder","actionPin","compact","actionUnreadMark","actionMute","actionArchive","isChatArchived","actionDelete","getCanDeleteChat","isInFolder","stopImmediatePropagation","isMenuDisabled","shouldDisableOnLink","shouldDisableOnLongTap","setIsContextMenuOpen","setContextMenuPosition","clientY","timer","clearLongPressTimer","startLongPressTimer","originalEvent","touches","cancelClickOnce","emulateContextMenuEvent","passive","EMPTY_RECT","anchor","getLayout","setPositionX","setPositionY","setTransformOriginX","setTransformOriginY","withScroll","setWithScroll","setStyle","setMenuStyle","triggerEl","anchorX","anchorY","menuEl","rootEl","extraPaddingX","extraTopPadding","marginSides","extraMarginTop","marginTop","menuRect","offsetHeight","rootRect","horizontalPosition","verticalPosition","triggerRect","menuMaxHeight","offsetX","offsetY","useDebounce","ms","noFirst","noLast","replyOriginForId","loadMessage","loadMessageThrottled","throttled","setOrderedIds","getOrderedIds","addOrderedIdsCallback","useFolderManagerForUnreadCounters","unreadCounters","setUnreadCounters","getUnreadCounters","addUnreadCountersCallback","useFolderManagerForChatsCount","chatsCount","setChatsCount","getChatsCount","addChatsCountCallback","handleScroll","deltaX","deltaY","useIntersectionObserver","rootCallback","rootRef","throttleMs","debounceMs","shouldSkipFirst","margin","threshold","rootCallbackRef","freezeFlagsRef","onUnfreezeRef","freeze","unfreeze","useHeavyAnimationCheck","observer","disconnect","callbacks","clear","observe","targetCallback","Map","entriesAccumulator","observerCallbackSync","callback","scheduler","observerCallback","IntersectionObserver","root","rootMargin","initController","controller","delete","unobserve","useOnIntersect","targetRef","setIsIntersecting","savedCallback","setInterval","clearInterval","debugKey","prevDeps","isMediaReady","store","idRef","generateIdFor","mediaHash","noLoad","mediaFormat","cacheBuster","isHtmlAllowed","isStreaming","IS_PROGRESSIVE_SUPPORTED","useUniqueId","setLoadProgress","startedAtRef","handleProgress","Date","spentTime","closeTimeout","useMouseInside","menuCloseTimeout","isMouseInside","markMouseInside","usePrevDuringAnimation","prev","isCurrentPresent","isPrevPresent","reducer","initialState","reducerRef","setState","currentState","CalendarModal","canScheduleUntilOnline","onCancel","onScheduled","setOnScheduled","handleMessageSchedule","isWhenOnline","scheduledAt","getTime","handleMessageScheduleUntilOnline","SCHEDULED_WHEN_ONLINE","handleCloseCalendar","requestCalendar","whenScheduled","scheduledDefaultDate","setSeconds","setMilliseconds","scheduledMaxDate","setFullYear","getFullYear","withTimePicker","selectedAt","maxAt","getDayStartAt","isFutureMode","secondButtonLabel","onSubmit","onSecondButtonClick","SEND_MESSAGE_ACTION_INTERVAL","useStateRef","useVideoCleanup","videoRef","videoEl","load","mul_table","shg_table","boxBlurCanvasRGB","context","top_x","top_y","isNaN","imageData","getImageData","pixels","rsum","gsum","bsum","p1","p2","yp","yi","yw","wm","hm","rad1","r","g","mul_sum","shg_sum","vmin","vmax","putImageData","tracks","currentTrackId","voiceQueue","musicQueue","playNext","isReverseOrder","currentTrack","nextTrackId","findNextInQueue","has","openAudioPlayer","parseMessageKey","splitTrackId","messageKey","nextTrack","stopCurrentAudio","track","handleEvent","Proxy","createAudio","trackIdComparator","addTrackToQueue","preventPlayAfterPatch","preload","IS_SAFARI","patchSafariProgressiveAudio","globalSearch","currentContent","GlobalSearchContent","openedChatId","queueFilter","cleanUpQueue","fastSeek","rate","shouldRemoveFromQueue","h","trackIdFilter","el","removeFromQueue","getTrackQueue","currentId","queue","chatAudio","getMessageKey","pop","one","two","dateOne","keyOne","dateTwo","keyTwo","localeCompare","IOS_SCREEN_EDGE_THRESHOLD","getDistance","a","sqrt","pageX","pageY","getTouchCenter","lastClickTime","captureEvent","initialSwipeAxis","hasMoved","hasSwiped","initialDistance","initialTouchCenter","innerWidth","innerHeight","excludedClosestSelector","onMove","withCursor","body","querySelectorAll","scrollable","overflow","onDoubleClick","centerX","centerY","onZoom","endDistance","touchCenter","dragOffsetX","dragOffsetY","zoomFactor","initialCenterX","initialCenterY","currentCenterX","currentCenterY","shouldPreventScroll","xAbs","yAbs","axis","currentSwipeAxis","Left","Right","Up","Down","processSwipe","isNotPassive","propertyName","waitForEndEvent","animationName","eventType","detailedName","isHandled","handleAnimationEnd","TransitionEvent","AnimationEvent","cycleRestrict","isAnimating","fastSmoothScroll","maxDistance","FAST_SMOOTH_MAX_DISTANCE","forceDirection","forceDuration","forceNormalContainerHeight","scrollFrom","calculateScrollFrom","FocusDirection","scrollWithJs","isAnimatingScroll","offsetTop","elementTop","scrollTop","offset","elementHeight","currentScrollTop","containerHeight","targetContainerHeight","normalHeight","path","remainingPath","absPath","FAST_SMOOTH_SHORT_TRANSITION_MAX_DISTANCE","shortTransition","longTransition","FAST_SMOOTH_MIN_DURATION","FAST_SMOOTH_MAX_DURATION","startAt","onHeavyAnimationStop","animateSingle","t","currentPath","getAttribute","containerWidth","animate","force","forcePlaceCaretAtEnd","range","createRange","lastChild","nodeValue","selectNodeContents","collapse","toLowerCase","getMessageIdsForSelectedText","selectedFragments","cloneContents","childElementCount","messageIds","nodeType","contains","messageEl","removeChild","DEFAULT_HANDLERS","mediaSession","navigator","setMediaSessionHandlers","console","warn","setActionHandler","err","clearMediaSession","playbackState","buildMediaMetadata","artist","album","artwork","MediaMetadata","ENTITY_CLASS_BY_NODE_NAME","S","STRIKE","PRE","BLOCKQUOTE","parseMessageInput","fragment","parsedHtml","parseMarkdown","textIndex","recursionDeepness","entities","addEntity","rawText","nodeName","getEntityTypeFromNode","rawIndex","substring","getEntityDataFromNode","hasChildNodes","audioEl","patchedForSafari","patchForSafariInProgress","fileSelector","openSystemFilesDialog","accept","noMultiple","removeAttribute","onchange","click"],"sourceRoot":""} \ No newline at end of file diff --git a/dist/13.c4586e903a85e96ce217.css.map b/dist/13.c4586e903a85e96ce217.css.map deleted file mode 100644 index 8f53888c5..000000000 --- a/dist/13.c4586e903a85e96ce217.css.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"13.c4586e903a85e96ce217.css","mappings":"AAAA,YACE,kBAEA,cACE,WACA,YACA,wCACA,gCAEA,oCAEE,kBACA,MACA,OAGF,kEACE,wBAKJ,kCACE,2BAMF,4DAEE,eACA,0FAEE,+BAGF,gFACE,kBACA,yBACA,MACA,OACA,6CACA,mBAKF,sBACE,2BAIA,kCACE,4CAGF,gCACE,2CAMJ,gCACE,4BAIA,4CACE,qDAGF,0CACE,sDAMJ,0BACE,4BAIA,sCACE,4CAGF,oCACE,2CAKF,oCACE,2BAIA,gDACE,qDAGF,8CACE,sDAWN,2BACE,wCAGF,6BACE,4BAIA,yCACE,gCAGF,uCACE,+BAMJ,uCACE,6BAIA,mDACE,yCAGF,iDACE,0CASJ,6BACE,sBACA,wBACA,UAGF,2BACE,sBACA,6BACA,UAIA,uCACE,+FAGF,qCACE,6FAMJ,uCACE,wBACA,UAGF,qCACE,8BACA,UAIA,iDACE,iHAIF,+CACE,mHAUJ,4BACE,wBACA,mBACA,UAGF,0BACE,wBACA,UAMA,sCACE,qCAGF,oCACE,gEAMJ,sCACE,mBAGF,oCACE,sBAIA,gDACE,mFAGF,8CACE,sFASJ,uBACE,UAGF,qBACE,UAIA,iCACE,qCAGF,+BACE,oCASN,yBACE,4CACA,gBAEA,6BACE,mCAGF,6BACE,2BAIA,yCACE,mDAGF,uCACE,2CAMJ,uCACE,2BACA,YAIA,mDACE,qDAGF,iDACE,6DAUJ,2BACE,mCAGF,6BACE,wBACA,mBACA,UAEA,4CACE,uCAEA,qEACE,wCAKN,2BACE,2BAIA,uCACE,mCAGF,qCACE,uCAMJ,qCACE,qBAIA,iDACE,iDAGF,+CACE,6CASJ,uBACE,gEAIA,iCACE,kCAMJ,mCACE,0DAGF,iCACE,sCAIA,6CACE,6CAGF,2CACE,eASR,2BACE,GACE,UAEF,KACE,WAIJ,4BACE,GACE,UAEF,KACE,WAIJ,qCACE,GACE,UAEF,KACE,WAIJ,sCACE,GACE,UAEF,KACE,WAOJ,oBACE,GACE,2BAEF,KACE,yBAIJ,qBACE,GACE,wBAEF,KACE,6BAIJ,8BACE,GACE,wBAEF,KACE,4BAIJ,+BACE,GACE,4BAEF,KACE,yBAOJ,uBACE,GACE,4BAEF,KACE,yBAIJ,wBACE,GACE,wBAEF,KACE,8BAIJ,iCACE,GACE,wBAEF,KACE,6BAIJ,kCACE,GACE,6BAEF,KACE,yBAOJ,8BACE,GACE,6BAEF,KACE,yBAIJ,+BACE,GACE,wBAEF,KACE,+BAIJ,wCACE,GACE,wBAEF,KACE,8BAIJ,yCACE,GACE,8BAEF,KACE,yBAOJ,6BACE,GACE,qBAEF,KACE,oBAIJ,uCACE,GACE,mBAEF,KACE,sBAIJ,wCACE,GACE,sBAEF,KACE,oBAOJ,4BACE,GACE,wBACA,UAEF,KACE,2BACA,iDAIJ,sCACE,GACE,2BACA,gDAEF,KACE,wBACA,WAQJ,oBACE,GACE,mBACA,UAEF,KACE,qBACA,WAIJ,8BACE,GACE,qBACA,UAEF,KACE,mBACA,WAOJ,wBACE,GACE,2BAEF,KACE,yBAIJ,kCACE,GACE,wBAEF,KACE,4BAOJ,qBACE,GACE,gEAEF,KACE,2DAOJ,+BACE,GACE,0DAEF,KACE,iE;AC7qBJ,iBACE,kBACA,UACA,eACA,gBACA,qFAGA,kBACA,eAEA,0BACE,kCACA,oBAGF,wBACE,sBAEA,+BACE,WACA,kBACA,eACA,gBACA,sBACA,sBACA,SACA,QACA,qCAIJ,gDAEE,WACA,YAEA,iFAIA,8DACE,sBACA,aACA,cAIJ,yBACE,cACA,eAEA,6BACE,WACA,YACA,eAGF,gCACE,iBAIJ,6BACE,wCAGF,qBACE,cACA,yBACA,yBACA,yDAGF,wBACE,iCAIJ,oCACE,KACE,uBAEF,GACE,0+B;ACnEJ,aACE,qCAEA,mBAEA,sBACE,oBACA,4CAGF,6BACE,aACA,8BACA,sBAEA,oCACE,cACA,iBACA,kCAIA,6CACE,cACA,kBAKN,0BACE,kBACA,UAEA,kCACE,WACA,kBACA,WACA,OACA,aACA,eACA,sCACA,sBACA,WACA,WAIJ,gCACE,kBACA,WACA,OACA,aACA,eACA,qCACA,sBACA,oBAIA,uCACE,WACA,cAGF,qCACE,WACA,cClEJ,+BACE,wBACA,cACA,WACA,cACA,oBACA,uBAEA,qCACE,aAGF,0CACE,WACA,eAEA,uBACA,yBACA,kBAGF,qDACE,wBAGF,kDACE,qBAGF,8DACE,eAGF,qGACE,eD2CF,qDA3FF,+BACA,YACA,cACA,aACA,kBACA,eACA,mBACA,oFAEA,2DACE,qBAqFA,iDA/FF,+BACA,YACA,cACA,aACA,kBACA,eACA,mBACA,iFAEA,uDACE,qBAyFA,0CAnGF,+BACA,YACA,cACA,aACA,kBACA,eACA,mBACA,gFAEA,gDACE,qBA8FF,6BACE,aACA,wBACA,sBACA,sBAGF,4BACE,mBACA,kBACA,eACA,kCACA,0BAEA,qEAEE,wBAGF,mCACE,gBAGF,wCACE,gBAGF,uCACE,iB;AEvIN,QACE,mCACA,UACA,mBACA,uBACA,eACA,gBACA,kBACA,wEACA,WACA,iBACA,aACA,mBACA,0CAEA,aACE,kBACA,WACA,YAGF,eACE,WACA,YAGF,cACE,iBAEA,gCACE,qBAIJ,mBACE,WACA,YACA,gBAEA,0BACE,eACA,gBAIJ,kBACE,WACA,YACA,kBAEA,yBACE,cACA,eAIJ,mBACE,eACA,gBACA,kBAEA,0BACE,cACA,eAIJ,oBACE,cACA,eACA,oBAEA,2BACE,WACA,YAIJ,mBACE,oBAEA,qBACE,iBAGF,0BACE,gBACA,iBAIJ,mBACE,aACA,cACA,iBAEA,sBACE,eAGF,0BACE,aACA,cAIJ,eACE,kBAEA,sBACE,WACA,cACA,kBACA,gBACA,eACA,cACA,eACA,kBACA,yCACA,yBACA,cAIJ,oBACE,e;AC7HJ,OACE,kBACA,uBAOE,4IACE,gBAKF,gCACE,gBAKF,4BACE,gBAKF,4BACE,gBAIJ,wBACE,eACA,MACA,SACA,OACA,QACA,aACA,uBACA,mBAGF,uBACE,eACA,MACA,QACA,SACA,OACA,WACA,iCAGF,4CACE,6BAGF,qBACE,kBACA,oBACA,sBACA,WACA,gBACA,kBACA,iBACA,yCACA,8DACA,2CACA,mCAEA,+CAEA,4CACE,gBACA,0BAGF,yBApBF,qBAqBI,yCAIJ,0BACE,+BAGF,6BACE,kCAGF,oDAEE,oBACA,aACA,mBACA,cAGF,oBACE,kBACA,gBACA,cACA,gBACA,uBAEA,qCACE,mBAIJ,+BAEE,4CAEA,oDACE,kBACA,eACA,WACA,qBACA,iBACA,qBACA,sBACA,eAIJ,sBACE,WACA,YACA,aACA,gBACA,gBAEA,qDAEE,sBAIJ,kEAGE,uBACA,mBAGF,oBACE,oBACA,4BACA,qBACA,uBACA,gBAGF,mBACE,kCACA,mBACA,gBAGF,uBACE,aACA,qBAEA,qEACE,iBAIJ,8BACE,WACA,YACA,iBACA,iBACA,gBACA,qB;AC/KJ,UACE,kBAIE,oGACE,WACA,kBACA,SACA,YACA,QAEA,YACA,iCAGF,oFACE,cAGF,8EACE,OAMF,oDACE,gBACA,uBAIJ,2BACE,WACA,yCACA,uBACA,2BACA,wBACA,aACA,aACA,kBACA,gBACA,mBACA,mBACA,wBACA,2CACA,oCAEA,6BACE,iBACA,kBACA,kCAIJ,oFAIE,mBACA,uBAIA,uCACE,kBACA,WAIJ,mBACE,oBAEA,oCACE,WAKF,0DACE,eAEA,gFACE,4BAGF,qBACE,gIAEE,6CAIJ,yBACE,iEACE,6CAMR,yBAGI,4HACE,yDAKN,yCACE,4CAGF,iBACE,qBAEA,kCACE,mBAIJ,mBACE,oBAGF,gBACE,4CAIA,uCACE,yBAEA,yCACE,cAKN,uBACE,kBAEA,+BACE,WAEA,gDACE,6BACA,8BAMJ,sFAEE,0DAGF,+CACE,iBAGF,sCACE,cACA,mBAGF,oCACE,YACA,gBAGF,6EAEE,gBACA,aACA,2BACA,mBAGF,gKAIE,eACA,sBACA,SACA,gBACA,mBACA,uBACA,mBAIA,wCACE,gBAGF,mDACE,cACA,eACA,mBAGF,4CACE,2BACA,wBACA,cAIJ,6FAEE,kBACA,oBACA,kCAGF,wCACE,aACA,mBACA,YACA,gBAEA,uGAEE,kBACA,oBACA,kCACA,qBAEA,qHACE,2BAGF,oPAEE,mBACA,WAGF,gTAEE,kBAKN,6PAME,mBACA,uBAMA,4UAEE,mBAKF,wDACE,4CAGF,+CACE,kBACA,eAGF,qDACE,WAMJ,uCACE,sBAGF,mCACE,cAGF,6EAEE,eACA,mBACA,gBACA,mBACA,uBACA,gBACA,cAGF,iDACE,iBACA,eAGF,0CACE,kCAEA,mEACE,wBACA,mBACA,qBACA,kBACA,qBAEA,+EACE,mBAMJ,0DACE,cACA,kBAGF,mDACE,eACA,cAKN,2BACE,SAEA,4CACE,eACA,aACA,mBAGF,mCACE,WACA,YAGF,qCACE,cACA,cACA,SACA,kBAIA,8CACE,eACA,mBAKN,0BACE,YACA,oBACA,gBAEA,qEAEE,cACA,mBAGF,iCACE,oBACA,gBACA,uBAGF,oCACE,kBACA,mBACA,kCAEA,8CACE,oBAGF,0CACE,wBAMJ,sCACE,iBACA,e;ACnZN,cACE,qBACA,cACA,aACA,cAEA,mCACA,wB;ACPF,cACE,oBACA,qBAEA,wBACE,aACA,WACA,gBAEA,+BACE,cACA,oDAEA,0FAEE,iCAMR,yBACE,KACE,6BAIJ,6BACE,KACE,4B;AC7BJ,2BACE,qBACA,oCAGE,WACE,kCACA,C;ACPN,wBACE,kBACA,YACA,gBACA,mBACA,8BAEA,0BAPF,wBAQI,8CAGF,sCACE,mBAEA,wDACE,oBAKN,cACE,4FAGA,uBACA,2CACA,4CACA,WACA,eAEA,6GAGE,sBACA,0BAGF,uBACE,iBACA,sBACA,+e;ACxCJ,OACE,cACA,kBACA,oBACA,gBACA,qBACA,mBACA,eAEA,gBACE,oBACA,WAGF,qBACE,eAEE,iFAEE,kBAKN,aACE,kBACA,uBACA,UAIA,qDAEE,WACA,cACA,kBACA,eACA,QACA,cACA,eACA,2BAGF,2BACE,4CACA,kBACA,yCACA,UACA,kDAGF,0BACE,cACA,cACA,eACA,kBACA,gCACA,UACA,4BAGF,0BACE,cACA,sBACA,uBACA,gBAGF,6BACE,cACA,kBACA,iBACA,kCACA,uBAKF,yCACE,kCAGF,wCACE,UAKF,qEAEE,qBAGF,wBACE,kBACA,eACA,QACA,2BACA,UACA,oCACA,wBAIJ,gBACE,eACA,qBAEA,4BACE,iBAEA,oCACE,UACA,gBAGF,mCACE,UACA,eAIJ,iDAEE,iBAGF,iCACE,UACA,gBAKN,mBACE,KACE,UAEF,GACE,W;AC3IJ,qBACE,WACA,c;ACFF,KACE,aACA,uBACA,cACA,wCACA,gBACA,WACA,SACA,YACA,uBACA,gBACA,kCACA,eACA,2DACA,4DAEA,4BAGE,aAGF,aACE,eACA,2BAEA,eACE,qBAIJ,qBACE,6BACE,mDAIJ,yBACE,8BACE,mDAIJ,UACE,kBACA,aACA,mBACA,mBAGF,YACE,kBACA,eACA,0BACA,6BACA,qBACA,mBACA,WACA,kBACA,sBACA,gBACA,kBACA,cAEA,kDAEE,oBAIJ,oBACE,2CAGF,OACE,kBACA,6BACA,OACA,UACA,sCACA,gBACA,WACA,oCACA,oBACA,uBACA,sBAEA,eACE,6CAEA,sCACE,2B;AC3FR,SACE,gBACA,MACA,cACA,aACA,8BACA,qBACA,kBACA,iBACA,+CACA,yCACA,gBACA,kBAEA,qBACA,8BAEA,aACE,eACA,kCAGF,4BACE,SAGF,kCACE,+BAEA,yC;AC5BF,+BACE,gBAGF,+BACE,2BAGF,+CACE,oBAGF,gCACE,sBAGF,wCACE,uB;AClBJ,aACE,kBACA,WACA,iDACA,yCACA,yCACA,uBACA,kCAEA,8BACE,aAEA,2CACE,aAGF,oCACE,mBAIA,6CACE,oBACA,eAKN,uBACE,kCACA,iCACA,yCAGE,+BACE,2BAKN,mBACE,cACA,gBACA,uBACA,uBACA,wCACA,2BACA,wJAGA,gCACE,gCAIJ,eACE,kBACA,UACA,YACA,mBACA,oBAGF,sBACE,kBACA,MACA,QACA,cACA,aAEA,+BACE,uBAIJ,qBACE,kBACA,YACA,cACA,eAGF,yBACE,mBACE,cACA,sBACA,kDAGF,eACE,WAKF,4BACE,cAGF,wBACE,UACA,aAGF,+BACE,WACA,WAGF,8BACE,aACA,W;AC/GN,oBACE,aACA,mBACA,mCACA,YACA,eACA,kBACA,oBACA,mBACA,mBACA,eACA,kBACA,gBACA,cACA,sCAEA,4BAEA,8BACE,gBAGF,0BACE,0CAGF,oCACE,oDAEA,iDACE,UAGF,2FAEE,UAKF,6CACE,gCAGF,sCACE,mCAGF,2CACE,kBAIJ,iCACE,cACA,kBACA,WACA,eAEA,kCAGF,2DAEE,WACA,YACA,UACA,cACA,6BAEA,sJACE,eAIJ,+BACE,aACA,mBACA,uBACA,gBACA,kBACA,sCACA,WAEA,iCACE,kBACA,kBACA,SAIJ,+BACE,kBACA,mBACA,gBACA,uBAEA,kDACE,eACA,gBACA,yBACA,oBAIJ,iCACE,kBACA,OACA,MACA,WACA,YACA,kBACA,aACA,mBACA,uBACA,oCACA,iBACA,WACA,UACA,6BAGF,6BACE,kBACA,gBAEA,uCACE,gBACA,eAGF,0CACE,UACA,gBAGF,wCACE,cACA,mBAGF,0CACE,UACA,Q;AC/IN,UACE,oBACA,mBACA,kBACA,SAEA,mBACE,oBACA,WAGF,mBACE,oBAKA,8JAEE,2BAGF,kGACE,eAIJ,gBACE,SACA,QACA,kBACA,kBACA,uBACA,UAGF,kBACE,eACA,mBACA,eACA,eACA,mCACA,qBACA,oBACA,kBACA,wCAGF,wBACE,WACA,kBACA,cACA,OACA,eACA,gBACA,yCACA,qBAEA,qCACA,uCAGF,gCACE,gCAGF,sCACE,2BACA,6CACA,kCAGF,+BACE,c;ACzEJ,uBACE,gBACA,iBACA,gBACA,qBACA,cACA,oBAEA,yBACE,mCAGF,+CACE,qBAGF,mCACE,WACA,Y;AClBJ,iBACE,sBACA,2BACA,cACA,iBACA,cACA,aACA,mBAEA,wCACE,qCACA,qBACA,mBAEA,oDACE,wBAIJ,uBACE,6BACA,qB;ACrBJ,kBACE,UACA,2DAEA,6BACE,mBACA,UAGF,8BACE,aAGF,0BACE,uDAIJ,eACE,aAEA,sBACE,0BAIJ,OACE,iBACA,cACA,6BACA,qBACA,mBACA,WACA,kBACA,sBACA,gBACA,kBACA,cAEA,qBACE,mBAGF,mBACE,qBACA,mBACA,gBACA,kBAGF,yCAEE,8BACA,yBAGF,2BACE,0BACA,uBACA,aACA,UAEA,6BACE,iBAIJ,eACE,aACA,eAEA,iBACE,eACA,qBAGF,2BACE,eACA,eAEA,6BACE,kB;AChFR,qCACE,0BACA,6BACA,2BACA,0BACA,2BACA,6BACA,2BACA,6BACA,6BAGF,qCACE,uBACA,6BACA,2BACA,6BACA,wBACA,6BACA,2BACA,6BACA,0BAIF,gBACE,kBACA,UACA,SACA,WACA,YACA,kBACA,yBACA,yCACA,gBAEA,2BACE,WACA,YACA,aACA,mBACA,uBACA,kBACA,+BACE,UACA,WACA,mCACA,kBACA,WACA,sBACA,wBAEF,8CACE,sBAEF,+CACE,uBAIJ,yBACE,oCACA,sCACA,wCACE,0CAKF,qDACE,yDAGF,sDACE,yD;AC3EN,MACE,4CAOA,kBACA,MACA,OACA,SACA,WATA,sCAEE,gDASF,sBACE,oBACA,gCAGF,wBACE,sBACA,kCAKA,qFACE,qCAIJ,yBACE,eACE,uDAEA,qCACE,sCAKN,yBACE,oCAEE,wDAEA,gEACE,mBACA,yCAGF,gFACE,iDACA,8BAGF,sEACE,wDACA,iCACA,8CACA,sCACA,2CACA,kCACA,mCAGF,4DACE,oCAGF,4EACE,8BACA,gCAKN,yBACE,uBACE,4BAIJ,cACE,kBACA,cAIA,sBACE,qBAGF,eACE,WACA,cAGF,wBACE,kBACA,mBACA,sBACA,cAEA,oCACE,aACA,mBAIJ,6BACE,iBAEA,yCACE,kBACA,eAIJ,qDAEE,qBACA,YACA,kCACA,uBAEA,uEACE,gBAGF,+EACE,wBAGF,mEACE,yBAMA,wCACE,aAIJ,iCACE,yBAGF,8BACE,cACA,eACA,iBACA,sBACA,wBACA,yBAEA,0CACE,eACA,gBACA,0BAGF,oCACE,sBAIJ,uCACE,WACA,YACA,yBAGF,qCACE,kBACA,qBACA,iBACA,WACA,6BACA,wBACA,gBAEA,iDACE,8BACA,SAQJ,sCACE,cACA,kBAGF,2DAEE,qBACA,gBAGF,iCACE,cACA,oBAGF,uEAEE,mBACA,gBACA,iBACA,uB;ACvNR,eACE,eACA,qBAEA,mBACE,kBACA,WACA,YAGF,sCACE,qB;ACXJ,aACE,WACA,WACA,aACA,mBACA,uBACA,sBAEA,0BARF,aASI,aAGF,sBACE,YACA,uBAGF,oBACE,kBACA,sBAGF,0BACE,kBACA,kCAEA,8EAEE,wCAIJ,0BACE,mBACA,gBACA,4BACA,uBAEA,4BACE,0BACA,iB;ACxCN,cACE,aACA,mBACA,uBACA,6BAEA,+BACE,sBAGF,+BACE,cAGF,2BACE,kCACA,kBACA,kBACA,gBACA,uB;ACnBJ,OACE,SACA,oBACA,gBACA,kBACA,eAEA,uBACE,kBACA,YACA,WACA,2BACA,WACA,iBACA,mBACA,uBACA,qBAGF,WACE,kBACA,OACA,MACA,WACA,YACA,iB;ACzBJ,SACE,gBACA,2BACA,kBACA,qBACA,kBAEA,kBACE,kBAGF,+BACE,2BACA,WACA,YACA,kBACA,OACA,MACA,yDACA,WACA,aACA,mBACA,uBACA,kDACA,yBACA,gBACA,iBAGF,gBACE,kBACA,OACA,MACA,WACA,YACA,0BACA,gCACA,6DAGF,oEAGE,sBACA,mBAGF,oBACE,cACA,yBACA,gBACA,mBACA,gBACA,uBAGF,qBACE,eACA,gBACA,uBACA,sBAGF,iDAEE,gBACA,kCACA,qBACA,mBACA,oBACA,qBACA,4BACA,gBAGF,sBACE,kBAGF,kCACE,sBACA,uBAGF,kBACE,2BAEA,iEAEE,UACA,QAGF,2BACE,iB;AC9FN,oDACE,aAaA,mBACA,oBAZA,0CACE,sBAGF,eACE,0BACA,qBAFF,eAGI,6BAOJ,iBACE,2DAGF,cAGE,gBACA,yBACA,kDACA,gCACA,aACA,mBACA,uBACA,sBAGF,iBACE,MACA,OACA,kBAGF,yBACE,qBACA,cACA,kBACA,WACA,4BAEA,cACE,gBACA,wBACA,yBAGF,UACE,cACA,kBACA,MACA,QACA,iCACA,2BACA,qFACA,mCACA,mBACA,qCAEA,qBAIJ,sBACE,gBACA,qEAEA,yBAEE,kDACA,yBAGF,gBACE,oBAIJ,UACE,iBACA,kBACA,MACA,eACA,gBACA,aACA,mBACA,uBACA,UACA,wBACA,wCAGF,cACE,gEAGE,cACE,2DAGF,SACE,kEAEA,SACE,wDAIJ,SACE,kBAKN,mBACE,qBACA,mBACA,gBACA,YACA,wBAEA,gBACE,kCACA,kBACA,mBACA,mBAIJ,cACE,mBACA,gBACA,gBACA,uBACA,0BAEA,mBACE,sBAIJ,iBACE,qBACA,6BACA,eACA,gBACA,uBACA,wCAGE,aACE,eAKN,2CACE,0CACA,8GAEA,UAIE,YACA,0BAGF,sBACE,iCAEA,0BACE,0BAIJ,oBACE,2BAGF,eACE,8BAGF,gBACE,2KAMF,kBAGE,eACA,qDAGF,gBACE,iEAEA,cACE,mBACA,yDAIJ,SACE,QACA,+CAQJ,mCACE,qDAGF,qCACE,mDAGF,wCACE,C;ACxOJ,OACE,aACA,uBACA,kBAEA,sBACE,kBACA,oBAEA,kCACE,mBAIJ,WACE,4CACA,oDACA,qEACA,qEAEA,uBACE,sCACA,uCAGF,mBACE,yCACA,0CACA,wDACA,2CAEA,+BACE,4BACA,mCAKN,oBACE,wBAEA,sCACE,2BAGF,4BACE,WACA,YACA,yBAEA,8BACE,mBAEA,yCACE,oBAKN,sBACE,kBAEA,gCACE,qBACA,yBAFF,gCAGI,qBAKN,+DAEE,UACA,mBACA,uEAGF,yJAIE,UACA,qBAIJ,wBACE,kBACA,2BACA,4BACA,UACA,eACA,cACA,6CACA,UAEA,0BACE,mBAIJ,+BACE,UACA,SACA,6CAGF,gBACE,kBACA,YACA,YACA,mBAGF,oBACE,aACA,8BAGF,cACE,gBACA,SACA,iBACA,mBACA,gBACA,uBAGF,cACE,YAGF,uBACE,kBACA,kBACA,kCACA,kCACA,aACA,qBAEA,qCACE,WACA,kBACA,0BACA,eACA,gBACA,kBACA,qCAKF,iDACE,uBAIJ,sCACE,2BAGF,iBACE,eACA,gBACA,kBAGF,4CAGE,kBACA,kCACA,SACA,gBACA,mBACA,uBACA,uBAGF,iBACE,kBACA,kCACA,mBACA,gBACA,uBACA,cACA,kCAGF,aACE,aACA,mBACA,mBACA,yBAEA,kBACE,YACA,mBACA,gBACA,uBAGF,wBACE,cAGF,qCACE,0BAGF,qBACE,gBACA,cAIJ,iBACE,YACA,eACA,kBACA,QACA,eACA,kBAEA,yBACE,WACA,kBACA,WACA,QACA,WACA,mDACA,kBAIJ,+BACE,kBACA,WACA,kBACA,gBACA,WACA,QAEA,iCACE,kBACA,WACA,iDACA,WACA,kBACA,WAIJ,mCACE,WACA,kBAEA,kBACA,QAEA,mDAGF,uBACE,kBACA,WACA,QACA,OAEA,yBACE,oBACA,kBACA,WACA,WAEA,gCACE,WACA,kBACA,SACA,WACA,WACA,YACA,kBACA,2CAMJ,qBACE,mBACA,gBACA,uBACA,gBACA,mBAGF,oBACE,eAGF,6CAEE,sBAGF,wBACE,iBAGF,6BACE,aACA,cAIA,sCACE,qBACA,QAKN,mCACE,cACA,eAIA,2BACE,sBAGF,6BACE,kBACA,eAEA,qCACE,mBACA,eAIJ,6CACE,4BAGF,mDAEE,iBAGF,iCACE,UACA,WAKN,oBACE,mBACA,8BACE,uB;AC1WJ,cACE,WACA,YACA,eACA,kBAEA,4BACE,WACA,iBAGF,+BACE,WACA,YAGF,mJAKE,aACA,mBACA,uBACA,yBACA,wEACA,eAGF,uBACE,gBAGF,6FAGE,gB;ACpCJ,aACE,iBACA,kBAEA,kCACE,qBACE,WACA,iBACA,WAGF,oBACE,cACA,WACA,YAIJ,4BACE,WACA,kBACA,OACA,MACA,SAEA,wCACE,WACA,YAIJ,2BACE,kBACA,WACA,eACA,kBACA,UAEA,aACA,UACA,OAGF,yBACE,cACA,oCACA,YACA,sBACA,iBACA,8BAEA,iCACE,YAIJ,yBACE,kBACA,MACA,SACA,UACA,YACA,UACA,SACA,wCACA,iCACA,wBACA,YACA,wBACA,aACA,eACA,UAEA,sEAEE,UAGF,8BACE,OACA,yDACA,gCAGF,8BACE,QACA,yDACA,6CAIJ,mBACE,kBACA,SACA,OACA,WACA,iBACA,uBACA,+EACA,yBACA,aACA,sBACA,yBACA,oBAGE,oCACE,iBACA,uBAKF,oCACE,iBACA,uBAKN,oBACE,aACA,mBAEA,uBACE,gBACA,kBACA,qBACA,qBACA,sBACA,qBAGF,kCACE,mBACA,qBAGF,2BACE,aACA,cACA,uBAIJ,qBACE,kBACA,WAIA,uCACE,UACA,QACA,qBAGF,uCACE,OACA,WACA,qBAIJ,kBACE,wBACA,gBAEA,wBACE,SAGF,wBACE,sBAGF,0BACE,+C;ACjLN,YACE,2CACA,mCACA,gBACA,cACA,WACA,mBACA,iBACA,kBACA,uBACA,aACA,cACA,iDAEA,0BAdF,YAeI,gBAGF,oCACE,2BACA,mDAGF,wBACE,oBAGF,uBACE,gBAGF,4BACE,oBACA,2CACA,oBACA,cACA,aACA,sBACA,mBACA,uBACA,0CAGF,kBACE,kBACA,sBACA,sBAEA,0BALF,kBAMI,kBACA,mBACA,oBAGF,0BAXF,kBAYI,eACA,iBACA,oBACA,mBAIJ,mBACE,oBACA,gBACA,uBAEA,0BALF,mBAMI,gBAIJ,yBACE,eACA,oBAEA,0BAJF,yBAKI,mB;AC7EN,sBACE,kBACA,WACA,YACA,yEACA,4DAEA,6CACE,2BAGF,+BACE,yE;ACZJ,UACE,kBACA,MACA,QACA,OACA,aACA,2BACA,uBAEA,aACA,sBAEA,kCACE,iD;ACbJ,eACE,qBACA,WACA,YACA,aACA,kDACA,wCACA,wBACA,kEACA,kBAEA,2BACE,eAEA,iCACE,wDAEA,wDACE,UAKN,yBAvBF,eAwBI,eAGF,0BACE,yBACA,eACA,eAGF,qBACE,YACA,aACA,SAGF,wEAGE,kBACA,MACA,OACA,WACA,YAGF,wCAEE,mBACA,2BACA,0CAGF,sCACE,kBACA,YACA,cACA,cACA,eACA,gBAMA,UAJA,wCACE,eAMJ,qCACE,kBAEA,6CACE,W;AC3EN,eACE,oCAEA,2CAEE,kBACA,mCACA,4CACA,sBACA,iDAGF,4BACE,OACA,MACA,UACA,oBACA,4BAEA,mCACE,eAGF,yBAXF,4BAYI,2DAGF,kCACE,uBACA,wBACA,WACA,wBACA,yCAIJ,uDAEE,aACA,iBACA,mBAGF,uBACE,UACA,eACA,gBACA,sCAGF,sCACE,YACA,kBACA,eAEA,yBALF,sCAMI,gBAGF,2FAEE,WACA,cACA,kBACA,MACA,SACA,WACA,UACA,UACA,4BAGF,8CACE,OACA,wFAGF,6CACE,QACA,uFAIA,wDACE,UAKF,wDACE,UAKN,gCACE,cACA,UACA,4BAEA,sCACE,UAKF,8DACE,UACA,mBAIJ,uBACE,WACA,YACA,eACA,iBACA,iBACA,kDACA,cACA,eAEA,8BACE,iDACA,WAGF,gCACE,WACA,oB;ACjIN,QACE,YACA,aACA,sBACA,gBAEA,uBACE,6BACA,6CACA,aACA,mBACA,cAEA,gBACA,iBAEA,oCACE,oBACA,kBACA,YAGF,qCACE,YACA,YACA,gBACA,UACA,gBAIJ,qBACE,YACA,gBACA,kBACA,cAEA,yBANF,qBAOI,0BACA,4BAIJ,oBACE,YACA,SACA,kBACA,aACA,mBACA,uBACA,kC","sources":["webpack://telegram-t/./src/components/ui/Transition.scss","webpack://telegram-t/./src/components/ui/ProgressSpinner.scss","webpack://telegram-t/./src/components/ui/RangeSlider.scss","webpack://telegram-t/./src/styles/_mixins.scss","webpack://telegram-t/./src/components/common/Avatar.scss","webpack://telegram-t/./src/components/ui/Modal.scss","webpack://telegram-t/./src/components/ui/ListItem.scss","webpack://telegram-t/./src/components/common/VerifiedIcon.scss","webpack://telegram-t/./src/components/common/DotAnimation.scss","webpack://telegram-t/./src/components/common/TypingStatus.scss","webpack://telegram-t/./src/components/ui/Notification.scss","webpack://telegram-t/./src/components/ui/Radio.scss","webpack://telegram-t/./src/components/common/ReactionStaticEmoji.scss","webpack://telegram-t/./src/components/ui/Tab.scss","webpack://telegram-t/./src/components/ui/TabList.scss","webpack://telegram-t/./src/components/common/DeleteChatModal.scss","webpack://telegram-t/./src/components/ui/SearchInput.scss","webpack://telegram-t/./src/components/common/PickerSelectedItem.scss","webpack://telegram-t/./src/components/ui/Switcher.scss","webpack://telegram-t/./src/components/common/MessageOutgoingStatus.scss","webpack://telegram-t/./src/components/common/LastMessageMeta.scss","webpack://telegram-t/./src/components/left/main/Badge.scss","webpack://telegram-t/./src/components/left/main/ChatCallStatus.scss","webpack://telegram-t/./src/components/left/main/Chat.scss","webpack://telegram-t/./src/components/common/AnimatedEmoji.scss","webpack://telegram-t/./src/components/left/main/EmptyFolder.scss","webpack://telegram-t/./src/components/common/NothingFound.scss","webpack://telegram-t/./src/components/common/Media.scss","webpack://telegram-t/./src/components/common/WebLink.scss","webpack://telegram-t/./src/components/common/File.scss","webpack://telegram-t/./src/components/common/Audio.scss","webpack://telegram-t/./src/components/common/ProfilePhoto.scss","webpack://telegram-t/./src/components/common/ProfileInfo.scss","webpack://telegram-t/./src/components/middle/composer/DropTarget.scss","webpack://telegram-t/./src/components/ui/FloatingActionButton.scss","webpack://telegram-t/./src/components/middle/composer/DropArea.scss","webpack://telegram-t/./src/components/common/StickerButton.scss","webpack://telegram-t/./src/components/middle/composer/TextFormatter.scss","webpack://telegram-t/./src/components/common/Picker.scss"],"sourcesContent":[".Transition {\n position: relative;\n\n > * {\n width: 100%;\n height: 100%;\n animation-fill-mode: forwards !important;\n transition: background-color 0.2s;\n\n &.from,\n &.to {\n position: absolute;\n top: 0;\n left: 0;\n }\n\n &:not(.Transition__slide--active):not(.from):not(.to) {\n display: none !important; // Best performance when animating container\n //transform: scale(0); // Shortest initial delay\n }\n }\n\n &.skip-slide-transition {\n transition: none !important;\n }\n\n /*\n * slide\n */\n &.slide-optimized,\n &.slide-optimized-rtl {\n contain: strict;\n body.is-safari & {\n // Create a new composite layer to reduce the page repaint area when switching a tab (as `contain` is not supported in Safari)\n transform: translate3d(0, 0, 0);\n }\n\n #root & > div {\n position: absolute;\n display: block !important;\n top: 0;\n left: 0;\n transition: transform var(--slide-transition);\n transform: scale(0);\n }\n }\n\n &.slide {\n > .to {\n transform: translateX(100%);\n }\n\n &.animating {\n > .from {\n animation: slide-out var(--slide-transition);\n }\n\n > .to {\n animation: slide-in var(--slide-transition);\n }\n }\n }\n\n &.slide.backwards {\n > .to {\n transform: translateX(-100%);\n }\n\n &.animating {\n > .from {\n animation: slide-in-backwards var(--slide-transition);\n }\n\n > .to {\n animation: slide-out-backwards var(--slide-transition);\n }\n }\n }\n\n &.slide-rtl {\n > .to {\n transform: translateX(-100%);\n }\n\n &.animating {\n > .from {\n animation: slide-out var(--slide-transition);\n }\n\n > .to {\n animation: slide-in var(--slide-transition);\n }\n }\n\n &.backwards {\n > .to {\n transform: translateX(100%);\n }\n\n &.animating {\n > .from {\n animation: slide-in-backwards var(--slide-transition);\n }\n\n > .to {\n animation: slide-out-backwards var(--slide-transition);\n }\n }\n }\n }\n\n /*\n * mv-slide\n */\n\n &.mv-slide {\n > * > div {\n animation-fill-mode: forwards !important;\n }\n\n > .to > div {\n transform: translateX(100vw);\n }\n\n &.animating {\n > .from > div {\n animation: mv-slide-out 0.4s ease;\n }\n\n > .to > div {\n animation: mv-slide-in 0.4s ease;\n }\n }\n }\n\n &.mv-slide.backwards {\n > .to > div {\n transform: translateX(-100vw);\n }\n\n &.animating {\n > .from > div {\n animation: mv-slide-in-backwards 0.4s ease;\n }\n\n > .to > div {\n animation: mv-slide-out-backwards 0.4s ease;\n }\n }\n }\n\n /*\n * slide-fade\n */\n &.slide-fade {\n > .from {\n transform-origin: left;\n transform: translateX(0);\n opacity: 1;\n }\n\n > .to {\n transform-origin: left;\n transform: translateX(1.5rem);\n opacity: 0;\n }\n\n &.animating {\n > .from {\n animation: fade-out-opacity var(--slide-transition), slide-fade-out-move var(--slide-transition);\n }\n\n > .to {\n animation: fade-in-opacity var(--slide-transition), slide-fade-in-move var(--slide-transition);\n }\n }\n }\n\n &.slide-fade.backwards {\n > .from {\n transform: translateX(0);\n opacity: 1;\n }\n\n > .to {\n transform: translateX(-1.5rem);\n opacity: 0;\n }\n\n &.animating {\n > .from {\n animation: fade-in-backwards-opacity var(--slide-transition),\n slide-fade-in-backwards-move var(--slide-transition);\n }\n\n > .to {\n animation: fade-out-backwards-opacity var(--slide-transition),\n slide-fade-out-backwards-move var(--slide-transition);\n }\n }\n }\n\n /*\n * zoom-fade\n */\n &.zoom-fade {\n > .from {\n transform-origin: center;\n transform: scale(1);\n opacity: 1;\n }\n\n > .to {\n transform-origin: center;\n opacity: 0;\n // We can omit `transform: scale(1.1);` here because `opacity` is 0.\n // We need to for proper position calculation in `InfiniteScroll`.\n }\n\n &.animating {\n > .from {\n animation: fade-out-opacity 0.15s ease;\n }\n\n > .to {\n animation: fade-in-opacity 0.15s ease, zoom-fade-in-move 0.15s ease;\n }\n }\n }\n\n &.zoom-fade.backwards {\n > .from {\n transform: scale(1);\n }\n\n > .to {\n transform: scale(0.95);\n }\n\n &.animating {\n > .from {\n animation: fade-in-backwards-opacity 0.1s ease, zoom-fade-in-backwards-move 0.15s ease;\n }\n\n > .to {\n animation: fade-out-backwards-opacity 0.15s ease, zoom-fade-out-backwards-move 0.15s ease;\n }\n }\n }\n\n /*\n * fade\n */\n &.fade {\n > .from {\n opacity: 1;\n }\n\n > .to {\n opacity: 0;\n }\n\n &.animating {\n > .from {\n animation: fade-out-opacity 0.15s ease;\n }\n\n > .to {\n animation: fade-in-opacity 0.15s ease;\n }\n }\n }\n\n /*\n * slide-layers\n */\n\n &.slide-layers {\n --background-color: var(--color-background);\n background: black;\n\n > div {\n background: var(--background-color);\n }\n\n > .to {\n transform: translateX(100%);\n }\n\n &.animating {\n > .from {\n animation: slide-layers-out var(--layer-transition);\n }\n\n > .to {\n animation: slide-in var(--layer-transition);\n }\n }\n }\n\n &.slide-layers.backwards {\n > .to {\n transform: translateX(-20%);\n opacity: 0.75;\n }\n\n &.animating {\n > .from {\n animation: slide-in-backwards var(--layer-transition);\n }\n\n > .to {\n animation: slide-layers-out-backwards var(--layer-transition);\n }\n }\n }\n\n /*\n * push-slide\n */\n\n &.push-slide {\n > div {\n background: var(--color-background);\n }\n\n > .from {\n transform-origin: center;\n transform: scale(1);\n opacity: 1;\n\n .custom-scroll {\n scrollbar-color: transparent !important;\n\n &::-webkit-scrollbar-thumb {\n background-color: transparent !important;\n }\n }\n }\n\n > .to {\n transform: translateX(100%);\n }\n\n &.animating {\n > .from {\n animation: push-out 0.3s ease-in-out;\n }\n\n > .to {\n animation: slide-in-200 0.3s ease-in-out;\n }\n }\n }\n\n &.push-slide.backwards {\n > .to {\n transform: scale(0.7);\n }\n\n &.animating {\n > .from {\n animation: slide-in-200-backwards 0.3s ease-in-out;\n }\n\n > .to {\n animation: push-out-backwards 0.3s ease-in-out;\n }\n }\n }\n\n /*\n * slide-fade\n */\n &.reveal {\n > .to {\n clip-path: inset(0 100% 0 0);\n }\n\n &.animating {\n > .to {\n animation: reveal-in 350ms ease-in;\n }\n }\n }\n\n &.reveal.backwards {\n > .from {\n clip-path: inset(0 0 0 0);\n }\n\n > .to {\n clip-path: none;\n }\n\n &.animating {\n > .from {\n animation: reveal-in-backwards 350ms ease-out;\n }\n\n > .to {\n animation: none;\n }\n }\n }\n}\n\n/*\n * common\n */\n@keyframes fade-in-opacity {\n 0% {\n opacity: 0;\n }\n 100% {\n opacity: 1;\n }\n}\n\n@keyframes fade-out-opacity {\n 0% {\n opacity: 1;\n }\n 100% {\n opacity: 0;\n }\n}\n\n@keyframes fade-in-backwards-opacity {\n 0% {\n opacity: 1;\n }\n 100% {\n opacity: 0;\n }\n}\n\n@keyframes fade-out-backwards-opacity {\n 0% {\n opacity: 0;\n }\n 100% {\n opacity: 1;\n }\n}\n\n/*\n * slide\n */\n@keyframes slide-in {\n 0% {\n transform: translateX(100%);\n }\n 100% {\n transform: translateX(0);\n }\n}\n\n@keyframes slide-out {\n 0% {\n transform: translateX(0);\n }\n 100% {\n transform: translateX(-100%);\n }\n}\n\n@keyframes slide-in-backwards {\n 0% {\n transform: translateX(0);\n }\n 100% {\n transform: translateX(100%);\n }\n}\n\n@keyframes slide-out-backwards {\n 0% {\n transform: translateX(-100%);\n }\n 100% {\n transform: translateX(0);\n }\n}\n\n/*\n * mv-slide\n */\n@keyframes mv-slide-in {\n 0% {\n transform: translateX(100vw);\n }\n 100% {\n transform: translateX(0);\n }\n}\n\n@keyframes mv-slide-out {\n 0% {\n transform: translateX(0);\n }\n 100% {\n transform: translateX(-100vw);\n }\n}\n\n@keyframes mv-slide-in-backwards {\n 0% {\n transform: translateX(0);\n }\n 100% {\n transform: translateX(100vw);\n }\n}\n\n@keyframes mv-slide-out-backwards {\n 0% {\n transform: translateX(-100vw);\n }\n 100% {\n transform: translateX(0);\n }\n}\n\n/*\n * slide-fade\n */\n@keyframes slide-fade-in-move {\n 0% {\n transform: translateX(1.5rem);\n }\n 100% {\n transform: translateX(0);\n }\n}\n\n@keyframes slide-fade-out-move {\n 0% {\n transform: translateX(0);\n }\n 100% {\n transform: translateX(-1.5rem);\n }\n}\n\n@keyframes slide-fade-in-backwards-move {\n 0% {\n transform: translateX(0);\n }\n 100% {\n transform: translateX(1.5rem);\n }\n}\n\n@keyframes slide-fade-out-backwards-move {\n 0% {\n transform: translateX(-1.5rem);\n }\n 100% {\n transform: translateX(0);\n }\n}\n\n/*\n * zoom-fade\n */\n@keyframes zoom-fade-in-move {\n 0% {\n transform: scale(1.1);\n }\n 100% {\n transform: scale(1);\n }\n}\n\n@keyframes zoom-fade-in-backwards-move {\n 0% {\n transform: scale(1);\n }\n 100% {\n transform: scale(1.1);\n }\n}\n\n@keyframes zoom-fade-out-backwards-move {\n 0% {\n transform: scale(0.95);\n }\n 100% {\n transform: scale(1);\n }\n}\n\n/*\n * slide-layers\n */\n@keyframes slide-layers-out {\n 0% {\n transform: translateX(0);\n opacity: 1;\n }\n 100% {\n transform: translateX(-20%);\n opacity: calc(1 - var(--layer-blackout-opacity));\n }\n}\n\n@keyframes slide-layers-out-backwards {\n 0% {\n transform: translateX(-20%);\n opacity: calc(1 - var(--layer-blackout-opacity));\n }\n 100% {\n transform: translateX(0);\n opacity: 1;\n }\n}\n\n/*\n * push-slide\n */\n\n@keyframes push-out {\n 0% {\n transform: scale(1);\n opacity: 1;\n }\n 100% {\n transform: scale(0.7);\n opacity: 0;\n }\n}\n\n@keyframes push-out-backwards {\n 0% {\n transform: scale(0.7);\n opacity: 0;\n }\n 100% {\n transform: scale(1);\n opacity: 1;\n }\n}\n\n/*\n * slide\n */\n@keyframes slide-in-200 {\n 0% {\n transform: translateX(200%);\n }\n 100% {\n transform: translateX(0);\n }\n}\n\n@keyframes slide-in-200-backwards {\n 0% {\n transform: translateX(0);\n }\n 100% {\n transform: translateX(200%);\n }\n}\n\n/*\n * slide\n */\n@keyframes reveal-in {\n 0% {\n clip-path: inset(0 100% 0 0);\n }\n 100% {\n clip-path: inset(0 0 0 0);\n }\n}\n\n/*\n * slide\n */\n@keyframes reveal-in-backwards {\n 0% {\n clip-path: inset(0 0 0 0);\n }\n 100% {\n clip-path: inset(0 100% 0 0);\n }\n}\n",".ProgressSpinner {\n position: relative;\n z-index: 1;\n width: 3.375rem;\n height: 3.375rem;\n background: rgba(0, 0, 0, 0.25)\n url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTkiIGhlaWdodD0iMTkiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZD0iTTEwLjcxNyA5Ljc1TDE4LjMgMi4xNjdhLjY4NC42ODQgMCAxMC0uOTY3LS45NjdMOS43NSA4Ljc4MyAyLjE2NyAxLjJhLjY4NC42ODQgMCAxMC0uOTY3Ljk2N0w4Ljc4MyA5Ljc1IDEuMiAxNy4zMzNhLjY4NC42ODQgMCAxMC45NjcuOTY3bDcuNTgzLTcuNTgzIDcuNTgzIDcuNTgzYS42ODEuNjgxIDAgMDAuOTY3IDAgLjY4NC42ODQgMCAwMDAtLjk2N0wxMC43MTcgOS43NXoiIGZpbGw9IiNGRkYiIGZpbGwtcnVsZT0ibm9uemVybyIgc3Ryb2tlPSIjRkZGIiBzdHJva2Utd2lkdGg9Ii43NSIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIvPjwvc3ZnPg==)\n no-repeat 49% 49%;\n border-radius: 50%;\n cursor: pointer;\n\n &.no-cross {\n background: transparent !important;\n pointer-events: none;\n }\n\n &.square {\n background-image: none;\n\n &::after {\n content: \"\";\n position: absolute;\n width: 0.8125rem;\n height: 0.8125rem;\n border-radius: 0.125rem;\n background-color: #fff;\n left: 50%;\n top: 50%;\n transform: translate3d(-50%, -50%, 0);\n }\n }\n\n &.size-s,\n &.size-m {\n width: auto;\n height: auto;\n /* stylelint-disable-next-line scss/operator-no-unspaced */\n background: transparent\n url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTUiIGhlaWdodD0iMTUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZD0iTTguMjE4IDcuNWw1LjYzMy01LjYzM2EuNTA4LjUwOCAwIDEwLS43MTgtLjcxOEw3LjUgNi43ODIgMS44NjcgMS4xNDlhLjUwOC41MDggMCAxMC0uNzE4LjcxOEw2Ljc4MiA3LjVsLTUuNjMzIDUuNjMzYS41MDguNTA4IDAgMTAuNzE4LjcxOEw3LjUgOC4yMThsNS42MzMgNS42MzNhLjUwNi41MDYgMCAwMC43MTggMCAuNTA4LjUwOCAwIDAwMC0uNzE4TDguMjE4IDcuNXoiIGZpbGw9IiNGRkYiIGZpbGwtcnVsZT0ibm9uemVybyIgc3Ryb2tlPSIjRkZGIiBzdHJva2UtbGluZWpvaW49InJvdW5kIi8+PC9zdmc+)\n no-repeat 49% 49%;\n\n &.square {\n background-image: none;\n width: 0.75rem;\n height: 0.75rem;\n }\n }\n\n &.size-xl {\n width: 3.25rem;\n height: 3.25rem;\n\n svg {\n width: 3rem;\n height: 3rem;\n margin: 0.125rem;\n }\n\n circle {\n stroke-width: 3px;\n }\n }\n\n &.transparent {\n background-color: transparent !important;\n }\n\n svg {\n display: block;\n transform: rotate(-90deg);\n transform-origin: 50% 50%;\n animation: 4s linear 0s infinite ProgressSpinnerAnimation;\n }\n\n circle {\n transition: stroke-dashoffset 0.5s;\n }\n}\n\n@keyframes ProgressSpinnerAnimation {\n from {\n transform: rotate(0deg);\n }\n to {\n transform: rotate(360deg);\n }\n}\n","@import \"../../styles/mixins\";\n\n@mixin thumb-styles() {\n background: var(--slider-color);\n border: none;\n height: 0.75rem;\n width: 0.75rem;\n border-radius: 50%;\n cursor: pointer;\n transform: scale(1);\n transition: transform 0.25s ease-in-out;\n\n &:hover {\n transform: scale(1.2);\n }\n}\n\n.RangeSlider {\n --slider-color: var(--color-primary);\n\n margin-bottom: 1rem;\n\n &.disabled {\n pointer-events: none;\n --slider-color: var(--color-text-secondary);\n }\n\n .slider-top-row {\n display: flex;\n justify-content: space-between;\n margin-bottom: 0.625rem;\n\n .value {\n flex-shrink: 0;\n margin-left: 1rem;\n color: var(--color-text-secondary);\n }\n\n &[dir=\"rtl\"] {\n .value {\n margin-left: 0;\n margin-right: 1rem;\n }\n }\n }\n\n .slider-main {\n position: relative;\n z-index: 1;\n\n &::before {\n content: \"\";\n position: absolute;\n width: 100%;\n left: 0;\n top: 0.3125rem;\n height: 0.125rem;\n background-color: var(--color-borders);\n border-radius: 0.125rem;\n opacity: 0.5;\n z-index: -1;\n }\n }\n\n .slider-fill-track {\n position: absolute;\n width: 100%;\n left: 0;\n top: 0.3125rem;\n height: 0.125rem;\n background-color: var(--slider-color);\n border-radius: 0.125rem;\n pointer-events: none;\n }\n\n &.bold {\n .slider-main::before {\n top: 0.25rem;\n height: 0.25rem;\n }\n\n .slider-fill-track {\n top: 0.25rem;\n height: 0.25rem;\n }\n }\n\n // Reset range input browser styles\n @include reset-range();\n\n // Apply custom styles\n input[type=\"range\"] {\n // Note that while we're repeating code here, that's necessary as you can't comma-separate these type of selectors.\n // Browsers will drop the entire selector if it doesn't understand a part of it.\n &::-webkit-slider-thumb {\n @include thumb-styles();\n }\n\n &::-moz-range-thumb {\n @include thumb-styles();\n }\n\n &::-ms-thumb {\n @include thumb-styles();\n }\n }\n\n .slider-options {\n display: grid;\n grid-template-rows: auto;\n grid-auto-columns: 1fr;\n grid-auto-flow: column;\n }\n\n .slider-option {\n font-size: 0.8125rem;\n text-align: center;\n cursor: pointer;\n color: var(--color-text-secondary);\n transition: color 0.2s ease;\n\n &:hover,\n &.active {\n color: var(--color-text);\n }\n\n &.active {\n font-weight: 500;\n }\n\n &:first-child {\n text-align: left;\n }\n\n &:last-child {\n text-align: right;\n }\n }\n}\n","// @optimization\n@mixin while-transition() {\n .Transition > div:not(.Transition__slide--active) &, body.animating-right-column & {\n @content;\n }\n}\n\n@mixin overflow-y-overlay() {\n @supports (overflow-y: overlay) {\n overflow-y: overlay;\n\n //Workaround for Android <= 9\n overflow-x: hidden;\n }\n}\n\n@mixin reset-range() {\n input[type=\"range\"] {\n -webkit-appearance: none;\n display: block;\n width: 100%;\n height: 0.75rem;\n margin-bottom: 0.5rem;\n background: transparent;\n\n &:focus {\n outline: none;\n }\n\n &::-ms-track {\n width: 100%;\n cursor: pointer;\n\n background: transparent;\n border-color: transparent;\n color: transparent;\n }\n\n &::-webkit-slider-thumb {\n -webkit-appearance: none;\n }\n\n &::-moz-slider-thumb {\n -moz-appearance: none;\n }\n\n &::-webkit-slider-runnable-track {\n cursor: pointer;\n }\n\n &::-moz-range-track, &::-moz-range-progress {\n cursor: pointer;\n }\n }\n}\n",".Avatar {\n --color-user: var(--color-primary);\n flex: none;\n align-items: center;\n justify-content: center;\n width: 3.375rem;\n height: 3.375rem;\n border-radius: 50%;\n background: linear-gradient(var(--color-white) -125%, var(--color-user));\n color: white;\n font-weight: bold;\n display: flex;\n white-space: nowrap;\n user-select: none;\n\n &__img {\n border-radius: 50%;\n width: 100%;\n height: 100%;\n }\n\n .emoji {\n width: 1rem;\n height: 1rem;\n }\n\n &__icon {\n font-size: 2.5rem;\n\n &.icon-reply-filled {\n transform: scale(0.7);\n }\n }\n\n &.size-micro {\n width: 1rem;\n height: 1rem;\n font-size: 0.5rem;\n\n .emoji {\n width: 0.5625rem;\n height: 0.5625rem;\n }\n }\n\n &.size-tiny {\n width: 2rem;\n height: 2rem;\n font-size: 0.875rem;\n\n .emoji {\n width: 0.875rem;\n height: 0.875rem;\n }\n }\n\n &.size-small {\n width: 2.125rem;\n height: 2.125rem;\n font-size: 0.875rem;\n\n .emoji {\n width: 0.875rem;\n height: 0.875rem;\n }\n }\n\n &.size-medium {\n width: 2.75rem;\n height: 2.75rem;\n font-size: 1.1875rem;\n\n .emoji {\n width: 1rem;\n height: 1rem;\n }\n }\n\n &.size-large {\n font-size: 1.3125rem;\n\n i {\n font-size: 3.5rem;\n }\n\n .emoji {\n width: 1.3125rem;\n height: 1.3125rem;\n }\n }\n\n &.size-jumbo {\n width: 7.5rem;\n height: 7.5rem;\n font-size: 3.5rem;\n\n &__i {\n font-size: 6rem;\n }\n\n .emoji {\n width: 3.5rem;\n height: 3.5rem;\n }\n }\n\n &.online {\n position: relative;\n\n &::after {\n content: \"\";\n display: block;\n position: absolute;\n bottom: 0.0625rem;\n right: 0.0625rem;\n width: 0.875rem;\n height: 0.875rem;\n border-radius: 50%;\n border: 2px solid var(--color-background);\n background-color: #0ac630;\n flex-shrink: 0;\n }\n }\n\n &.interactive {\n cursor: pointer;\n }\n}\n",".Modal {\n position: relative;\n z-index: var(--z-modal);\n\n &.delete,\n &.error,\n &.confirm,\n &.pin,\n &.unpin-all {\n .modal-dialog {\n max-width: 23rem;\n }\n }\n\n &.error {\n .modal-content > div {\n margin-top: 1rem;\n }\n }\n\n &.narrow {\n .modal-dialog {\n max-width: 20rem;\n }\n }\n\n &.report {\n .modal-dialog {\n max-width: 15rem;\n }\n }\n\n .modal-container {\n position: fixed;\n top: 0;\n bottom: 0;\n left: 0;\n right: 0;\n display: flex;\n justify-content: center;\n align-items: center;\n }\n\n .modal-backdrop {\n position: fixed;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: -1;\n background-color: rgba(0, 0, 0, 0.25);\n }\n\n &.transparent-backdrop .modal-backdrop {\n background-color: transparent;\n }\n\n .modal-dialog {\n position: relative;\n display: inline-flex;\n flex-direction: column;\n width: 100%;\n max-width: 35rem;\n min-width: 17.5rem;\n margin: 2rem auto;\n background-color: var(--color-background);\n box-shadow: 0 0.25rem 0.5rem 0.125rem var(--color-default-shadow);\n border-radius: var(--border-radius-default);\n transform: translate3d(0, -1rem, 0);\n\n transition: transform 0.2s ease, opacity 0.2s ease;\n\n body.animation-level-0 & {\n transition: none;\n transform: none !important;\n }\n\n @media (max-width: 450px) {\n max-width: calc(100vw - 3rem) !important;\n }\n }\n\n &.open .modal-dialog {\n transform: translate3d(0, 0, 0);\n }\n\n &.closing .modal-dialog {\n transform: translate3d(0, 1rem, 0);\n }\n\n .modal-header,\n %modal-header {\n padding: 1rem 1rem 0;\n display: flex;\n align-items: center;\n flex-shrink: 0;\n }\n\n .modal-title {\n font-size: 1.25rem;\n font-weight: 500;\n flex: 1 1 auto;\n overflow: hidden;\n text-overflow: ellipsis;\n\n &:not(:only-child) {\n margin: 0 1.3125rem;\n }\n }\n\n .modal-header-condensed {\n @extend %modal-header;\n padding: 0.5rem 1.25rem 0 0.9375rem !important;\n\n .modal-action-button {\n font-size: 0.875rem;\n height: 2.25rem;\n width: auto;\n line-height: 1.625rem;\n margin-left: auto;\n padding-left: 1.25rem;\n padding-right: 1.25rem;\n min-width: 5rem;\n }\n }\n\n .modal-content {\n width: 100%;\n flex-grow: 1;\n padding: 1rem;\n overflow-y: auto;\n max-height: 90vh;\n\n b,\n strong {\n word-break: break-word;\n }\n }\n\n .modal-title,\n .modal-content,\n .modal-content > p {\n unicode-bidi: plaintext;\n text-align: initial;\n }\n\n .modal-about {\n display: -webkit-box;\n -webkit-box-orient: vertical;\n -webkit-line-clamp: 5;\n text-overflow: ellipsis;\n overflow: hidden;\n }\n\n .modal-help {\n color: var(--color-text-secondary);\n font-size: 0.9375rem;\n line-height: 1.3;\n }\n\n .dialog-buttons {\n display: flex;\n align-items: flex-end;\n\n .confirm-dialog-button + .confirm-dialog-button {\n margin-left: 1rem;\n }\n }\n\n .confirm-dialog-button {\n width: auto;\n height: auto;\n margin-left: auto;\n text-align: right;\n font-weight: 500;\n white-space: pre-wrap;\n }\n}\n",".ListItem {\n position: relative;\n\n body.is-ios &,\n body.is-android & {\n &:not(:last-of-type)::after {\n content: \"\";\n position: absolute;\n bottom: 0;\n left: 4.5rem;\n right: 0;\n /* stylelint-disable-next-line plugin/whole-pixel */\n height: 0.5px;\n background: var(--color-dividers);\n }\n\n &.small-icon::after {\n left: 3.875rem;\n }\n\n &.no-icon::after {\n left: 0;\n }\n }\n\n // Using half-pixel height is efficient on iOS but not supported on Android, so `transform` is used instead\n body.is-android & {\n &:not(:last-of-type)::after {\n height: 0.0625rem;\n transform: scaleY(0.25);\n }\n }\n\n .ListItem-button {\n width: 100%;\n background-color: var(--background-color);\n border: none !important;\n box-shadow: none !important;\n outline: none !important;\n display: flex;\n padding: 1rem;\n position: relative;\n overflow: hidden;\n line-height: 1.5rem;\n white-space: nowrap;\n color: var(--color-text);\n border-radius: var(--border-radius-default);\n --ripple-color: rgba(0, 0, 0, 0.08);\n\n > i {\n font-size: 1.5rem;\n margin-right: 2rem;\n color: var(--color-text-secondary);\n }\n }\n\n .user-status,\n .group-status,\n .title,\n .subtitle {\n text-align: initial;\n unicode-bidi: plaintext;\n }\n\n &.multiline {\n .ListItem-button > i {\n position: relative;\n top: 0.25rem;\n }\n }\n\n &.disabled {\n pointer-events: none;\n\n .ListItem-button {\n opacity: 0.5;\n }\n }\n\n &:not(.disabled):not(.is-static) {\n .ListItem-button {\n cursor: pointer;\n\n body.cursor-ew-resize & {\n cursor: ew-resize !important;\n }\n\n @media (hover: hover) {\n &:hover,\n &:focus {\n --background-color: var(--color-chat-hover);\n }\n }\n\n @media (max-width: 600px) {\n &.active {\n --background-color: var(--color-chat-hover);\n }\n }\n }\n }\n\n @media (min-width: 600px) {\n &:not(.has-ripple):not(.is-static),\n body.animation-level-0 & {\n .ListItem-button:active {\n --background-color: var(--color-item-active) !important;\n }\n }\n }\n\n &.has-menu-open .ListItem-button {\n --background-color: var(--color-chat-hover);\n }\n\n &.narrow {\n margin-bottom: 0.75rem;\n\n .ListItem-button {\n padding: 0.5rem 1rem;\n }\n }\n\n &.inactive {\n pointer-events: none;\n }\n\n &.focus {\n --background-color: var(--color-chat-hover);\n }\n\n &.destructive {\n .ListItem-button {\n color: var(--color-error);\n\n i {\n color: inherit;\n }\n }\n }\n\n &-context-menu {\n position: absolute;\n\n .bubble {\n width: auto;\n\n .MenuItem button {\n padding-left: 1rem !important;\n padding-right: 2rem !important;\n }\n }\n }\n\n &.chat-item-clickable {\n body.is-ios &,\n body.is-macos & {\n --color-text-secondary: var(--color-text-secondary-apple);\n }\n\n .ListItem-button {\n padding: 0.5625rem;\n }\n\n .Avatar {\n flex-shrink: 0;\n margin-right: 0.5rem;\n }\n\n .info {\n flex-grow: 1;\n overflow: hidden;\n }\n\n .title,\n .subtitle {\n overflow: hidden;\n display: flex;\n justify-content: flex-start;\n align-items: center;\n }\n\n h3,\n .last-message,\n .status,\n .typing-status {\n font-size: 1rem;\n line-height: 1.6875rem;\n margin: 0;\n overflow: hidden;\n white-space: nowrap;\n text-overflow: ellipsis;\n text-align: initial;\n }\n\n .title {\n h3 {\n font-weight: 500;\n }\n\n .VerifiedIcon {\n width: 1.25rem;\n height: 1.25rem;\n margin-left: 0.25rem;\n }\n\n .emoji {\n vertical-align: text-bottom;\n background-position: 0 0;\n flex-shrink: 0;\n }\n }\n\n .contact-phone,\n .contact-username {\n font-size: 0.875rem;\n line-height: 1.25rem;\n color: var(--color-text-secondary);\n }\n\n .ChatInfo {\n display: flex;\n align-items: center;\n flex-grow: 1;\n overflow: hidden;\n\n .status,\n .typing-status {\n font-size: 0.875rem;\n line-height: 1.25rem;\n color: var(--color-text-secondary);\n display: inline-block;\n\n &.online {\n color: var(--color-primary);\n }\n\n &[dir=\"rtl\"],\n &[dir=\"auto\"] {\n text-align: initial;\n width: 100%;\n }\n\n .group-status:only-child,\n .user-status:only-child {\n display: flow-root;\n }\n }\n }\n\n .contact-phone,\n .contact-username,\n h3,\n .last-message,\n .status,\n .typing-status {\n text-align: initial;\n unicode-bidi: plaintext;\n }\n\n .last-message,\n .status,\n .typing-status {\n body.is-ios &,\n body.is-macos & {\n font-size: 0.9375rem;\n }\n }\n\n &[dir=\"rtl\"] {\n .ListItem-button {\n padding: 0.5625rem 0.5625rem 0.5625rem 0.6875rem;\n }\n\n .Avatar {\n margin-left: 0.5rem;\n margin-right: 0;\n }\n\n .info > .status {\n width: 100%;\n }\n }\n }\n\n &.search-result-message {\n .title {\n padding-right: 0.125rem;\n }\n\n h3 {\n max-width: 80%;\n }\n\n h3,\n .subtitle {\n font-size: 1rem;\n line-height: 1.5rem;\n overflow: hidden;\n white-space: nowrap;\n text-overflow: ellipsis;\n text-align: left;\n display: block;\n }\n\n .LastMessageMeta {\n margin-left: auto;\n margin-right: 0;\n }\n\n .subtitle {\n color: var(--color-text-secondary);\n\n .matching-text-highlight {\n color: var(--color-text);\n background: #cae3f7;\n border-radius: 0.25rem;\n padding: 0 0.125rem;\n display: inline-block;\n\n .theme-dark & {\n --color-text: #000;\n }\n }\n }\n\n &[dir=\"rtl\"] {\n .LastMessageMeta {\n margin-left: 0;\n margin-right: auto;\n }\n\n .subtitle {\n margin-right: 0;\n display: block;\n }\n }\n }\n\n &.picker-list-item {\n margin: 0;\n\n .ListItem-button {\n padding-left: 0;\n display: flex;\n align-items: center;\n }\n\n .Avatar {\n width: 3rem;\n height: 3rem;\n }\n\n .Checkbox {\n flex-shrink: 0;\n height: 1.5rem;\n margin: 0;\n padding-left: 4rem;\n }\n\n &[dir=\"rtl\"] {\n .Checkbox {\n padding-left: 0;\n padding-right: 4rem;\n }\n }\n }\n\n .multiline-item {\n flex-grow: 1;\n white-space: initial;\n overflow: hidden;\n\n .title,\n .subtitle {\n display: block;\n text-align: initial;\n }\n\n .title {\n line-height: 1.25rem;\n overflow: hidden;\n text-overflow: ellipsis;\n }\n\n .subtitle {\n font-size: 0.875rem;\n line-height: 1.5rem;\n color: var(--color-text-secondary);\n\n & + .subtitle {\n margin-top: -0.25rem;\n }\n\n &.black {\n color: var(--color-text);\n }\n }\n }\n\n &[dir=\"rtl\"] {\n .ListItem-button > i {\n margin-left: 2rem;\n margin-right: 0;\n }\n }\n}\n",".VerifiedIcon {\n display: inline-block;\n flex-shrink: 0;\n width: 1.5rem;\n height: 1.5rem;\n\n --color-fill: var(--color-primary);\n --color-checkmark: #fff;\n}\n",".DotAnimation {\n display: inline-flex;\n align-items: baseline;\n\n .ellipsis {\n display: flex;\n width: 1rem;\n overflow: hidden;\n\n &::after {\n content: \"...\";\n animation: dot-animation 1s steps(4, start) infinite;\n\n html[lang=\"ar\"] &,\n html[lang=\"fa\"] & {\n animation-name: dot-animation-rtl;\n }\n }\n }\n}\n\n@keyframes dot-animation {\n from {\n transform: translateX(-1rem);\n }\n}\n\n@keyframes dot-animation-rtl {\n from {\n transform: translateX(1rem);\n }\n}\n",".typing-status {\n display: flex;\n align-items: baseline;\n\n .sender-name {\n &::after {\n content: '\\00a0';\n color: var(--color-text-secondary);\n }\n }\n}\n",".Notification-container {\n position: relative;\n width: 24rem;\n max-width: 100vw;\n margin: 0.25rem auto;\n z-index: var(--z-notification);\n\n @media (min-width: 1276px) {\n transition: transform var(--layer-transition);\n }\n\n &:first-of-type {\n margin-top: 4.25rem;\n\n .has-header-tools & {\n margin-top: 7.375rem;\n }\n }\n}\n\n.Notification {\n background: rgba(32, 32, 32, 0.8)\n url(\"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGcgZmlsbD0ibm9uZSIgZmlsbC1ydWxlPSJldmVub2RkIj48Y2lyY2xlIGZpbGw9IiNGRkYiIGN4PSIxMiIgY3k9IjEyIiByPSIxMiIvPjxjaXJjbGUgZmlsbD0iIzAwMCIgZmlsbC1ydWxlPSJub256ZXJvIiBjeD0iMTIiIGN5PSI2LjUiIHI9IjEuNSIvPjxwYXRoIGQ9Ik0xMiA5LjVjLS41NTIgMC0xIC4zNy0xIC44MjZ2Ny4zNDhjMCAuNDU2LjQ0OC44MjYgMSAuODI2czEtLjM3IDEtLjgyNnYtNy4zNDhjMC0uNDU2LS40NDgtLjgyNi0xLS44MjZ6IiBmaWxsPSIjMDAwIiBmaWxsLXJ1bGU9Im5vbnplcm8iLz48L2c+PC9zdmc+\")\n no-repeat 0.9375rem 50%;\n background-size: 1.5rem;\n border-radius: var(--border-radius-default);\n padding: 0.9375rem 0.9375rem 0.9375rem 3.375rem;\n color: #fff;\n margin: 0 0.5rem;\n\n .text-entity-link,\n .text-entity-link:hover,\n .text-entity-link:active {\n color: #fff !important;\n text-decoration: underline;\n }\n\n .content {\n line-height: 1.25;\n word-break: break-word;\n font-size: 0.9375rem;\n }\n}\n",".Radio {\n display: block;\n position: relative;\n padding-left: 4.5rem;\n text-align: left;\n margin-bottom: 1.5rem;\n line-height: 1.5rem;\n cursor: pointer;\n\n &.disabled {\n pointer-events: none;\n opacity: 0.5;\n }\n\n &.hidden-widget {\n cursor: default;\n .Radio-main {\n &::before,\n &::after {\n visibility: hidden;\n }\n }\n }\n\n > input {\n position: absolute;\n z-index: var(--z-below);\n opacity: 0;\n }\n\n .Radio-main {\n &::before,\n &::after {\n content: \"\";\n display: block;\n position: absolute;\n left: 1.0625rem;\n top: 50%;\n width: 1.25rem;\n height: 1.25rem;\n transform: translateY(-50%);\n }\n\n &::before {\n border: 2px solid var(--color-borders-input);\n border-radius: 50%;\n background-color: var(--color-background);\n opacity: 1;\n transition: border-color 0.1s ease, opacity 0.1s ease;\n }\n\n &::after {\n left: 1.375rem;\n width: 0.625rem;\n height: 0.625rem;\n border-radius: 50%;\n background: var(--color-primary);\n opacity: 0;\n transition: opacity 0.1s ease;\n }\n\n .label {\n display: block;\n word-break: break-word;\n unicode-bidi: plaintext;\n text-align: left;\n }\n\n .subLabel {\n display: block;\n font-size: 0.875rem;\n line-height: 1rem;\n color: var(--color-text-secondary);\n unicode-bidi: plaintext;\n }\n }\n\n input:checked ~ .Radio-main {\n &::before {\n border-color: var(--color-primary);\n }\n\n &::after {\n opacity: 1;\n }\n }\n\n &.loading {\n .Radio-main::before,\n .Radio-main::after {\n opacity: 0 !important;\n }\n\n .Spinner {\n position: absolute;\n left: 1.0625rem;\n top: 50%;\n transform: translateY(-50%);\n opacity: 0;\n animation: fade-in 0.2s ease forwards;\n --spinner-size: 1.25rem;\n }\n }\n\n &[dir=\"rtl\"] {\n padding-left: 0;\n padding-right: 4.5rem;\n\n .Radio-main {\n text-align: right;\n\n &::before {\n left: auto;\n right: 1.0625rem;\n }\n\n &::after {\n left: auto;\n right: 1.375rem;\n }\n }\n\n .label,\n .subLabel {\n text-align: right;\n }\n\n &.loading .Spinner {\n left: auto;\n right: 1.0625rem;\n }\n }\n}\n\n@keyframes fade-in {\n from {\n opacity: 0;\n }\n to {\n opacity: 1;\n }\n}\n",".ReactionStaticEmoji {\n width: 1rem;\n display: block;\n}\n",".Tab {\n display: flex;\n justify-content: center;\n flex: 1 1 auto;\n appearance: none;\n background: none;\n width: auto;\n margin: 0;\n border: none;\n padding: 0.625rem 0.25rem;\n font-weight: 500;\n color: var(--color-text-secondary);\n cursor: pointer;\n border-top-left-radius: var(--border-radius-messages-small);\n border-top-right-radius: var(--border-radius-messages-small);\n\n &,\n &:active,\n &:focus {\n outline: none;\n }\n\n &--active {\n cursor: default;\n color: var(--color-primary);\n\n i {\n opacity: 1 !important;\n }\n }\n\n @media (hover: hover) {\n &:not(&--active):hover {\n background: var(--color-interactive-element-hover);\n }\n }\n\n @media (max-width: 600px) {\n &:not(&--active):active {\n background: var(--color-interactive-element-hover);\n }\n }\n\n > span {\n position: relative;\n display: flex;\n align-items: center;\n white-space: nowrap;\n }\n\n .badge {\n min-width: 1.25rem;\n height: 1.25rem;\n margin-inline-start: 0.5rem;\n background: var(--color-gray);\n border-radius: 0.75rem;\n padding: 0 0.3125rem;\n color: white;\n font-size: 0.875rem;\n line-height: 1.3125rem;\n font-weight: 500;\n text-align: center;\n flex-shrink: 0;\n\n body.is-ios &,\n body.is-macos & {\n line-height: 1.25rem;\n }\n }\n\n &__badge--active {\n background: var(--color-primary) !important;\n }\n\n i {\n position: absolute;\n bottom: calc(-0.625rem - 1px);\n left: 0;\n opacity: 0;\n background-color: var(--color-primary);\n height: 0.1875rem;\n width: 100%;\n border-radius: 0.1875rem 0.1875rem 0 0;\n pointer-events: none;\n box-sizing: content-box;\n transform-origin: left;\n\n &.animate {\n transition: transform var(--slide-transition);\n\n body.animation-level-0 & {\n transition: none !important;\n }\n }\n }\n}\n",".TabList {\n position: sticky;\n top: 0;\n flex-shrink: 0;\n display: flex;\n justify-content: space-between;\n align-items: flex-end;\n font-size: 0.875rem;\n flex-wrap: nowrap;\n box-shadow: 0 2px 2px var(--color-light-shadow);\n background-color: var(--color-background);\n overflow-x: auto;\n overflow-y: hidden;\n\n scrollbar-width: none;\n scrollbar-color: rgba(0, 0, 0, 0);\n\n &.big {\n font-size: 1rem;\n --border-radius-messages-small: 0;\n }\n\n &::-webkit-scrollbar {\n height: 0;\n }\n\n &::-webkit-scrollbar-thumb {\n background-color: rgba(0, 0, 0, 0);\n // `box-shadow` prevents repaint on macOS when hovering out of scrollable container\n box-shadow: 0 0 1px rgba(255, 255, 255, 0.01);\n }\n}\n",".DeleteChatModal {\n .modal-dialog {\n max-width: 20rem;\n }\n\n .modal-header {\n padding: 1.125rem 1.25rem 0;\n }\n\n .modal-title:not(:only-child) {\n margin: 0 0 0 0.75rem;\n }\n\n .modal-content {\n padding: 0.5rem 1.25rem;\n }\n\n .confirm-dialog-button {\n margin-right: -0.625rem;\n }\n}\n",".SearchInput {\n position: relative;\n width: 100%;\n color: rgba(var(--color-text-secondary-rgb), 0.5);\n background-color: var(--color-chat-hover);\n border: 2px solid var(--color-chat-hover);\n border-radius: 1.375rem;\n transition: border-color 0.15s ease;\n\n &.with-picker-item {\n display: flex;\n\n .icon-search {\n display: none;\n }\n\n input {\n padding-left: 0.5rem;\n }\n\n &[dir=\"rtl\"] {\n input {\n padding-right: 0.5rem;\n padding-left: 0;\n }\n }\n }\n\n &.has-focus {\n border-color: var(--color-primary);\n caret-color: var(--color-primary);\n background-color: var(--color-background);\n\n input {\n & + i {\n color: var(--color-primary);\n }\n }\n }\n\n input {\n height: 2.5rem;\n margin-bottom: 0;\n border: none !important;\n border-radius: 1.375rem;\n background-color: transparent !important;\n box-shadow: none !important;\n padding: calc(0.4375rem - var(--border-width)) calc(2.625rem - var(--border-width))\n calc(0.5rem - var(--border-width)) calc(2.75rem - var(--border-width));\n\n &::placeholder {\n color: var(--color-placeholders);\n }\n }\n\n > i {\n position: absolute;\n top: 0.5rem;\n left: 0.75rem;\n font-size: 1.375rem;\n pointer-events: none;\n }\n\n .Loading {\n position: absolute;\n top: 0;\n right: 0;\n height: 2.5rem;\n width: 2.5rem;\n\n .Spinner {\n --spinner-size: 1.5rem;\n }\n }\n\n .Button {\n position: absolute;\n top: 0.125rem;\n right: 0.125rem;\n font-size: 1rem;\n }\n\n @media (max-width: 600px) {\n input {\n height: 2.5rem;\n border-radius: 1.25rem;\n padding-left: calc(2.625rem - var(--border-width));\n }\n\n i {\n top: 0.5rem;\n }\n }\n\n &[dir=\"rtl\"] {\n input {\n direction: rtl;\n }\n\n > i {\n left: auto;\n right: 0.75rem;\n }\n\n .Loading {\n left: 0.5rem;\n right: auto;\n }\n\n .Button {\n left: 0.125rem;\n right: auto;\n }\n }\n}\n",".PickerSelectedItem {\n display: flex;\n align-items: center;\n background: var(--color-chat-hover);\n height: 2rem;\n min-width: 2rem;\n margin-left: 0.5rem;\n margin-bottom: 0.5rem;\n padding-right: 1rem;\n border-radius: 1rem;\n cursor: pointer;\n position: relative;\n overflow: hidden;\n flex-shrink: 1;\n transition: background-color 0.15s ease;\n\n max-width: calc(50% - 0.5rem);\n\n &.minimized {\n padding-right: 0;\n }\n\n &:hover {\n background-color: var(--color-item-active);\n }\n\n &.closeable:hover {\n background-color: rgba(var(--color-error-rgb), 0.16);\n\n .item-remove {\n opacity: 1;\n }\n\n .Avatar,\n .item-icon {\n opacity: 0;\n }\n }\n\n &.search-date {\n .item-remove {\n background: var(--color-primary);\n }\n\n &:hover {\n background: var(--color-chat-hover);\n }\n\n .item-name {\n font-size: 0.875rem;\n }\n }\n\n .SearchInput & {\n flex: 1 0 auto;\n position: relative;\n top: 0.25rem;\n left: -0.125rem;\n\n color: var(--color-text-secondary);\n }\n\n .Avatar,\n .item-icon {\n width: 2rem;\n height: 2rem;\n opacity: 1;\n flex-shrink: 0;\n transition: opacity 0.15s ease;\n\n .Avatar__icon, i {\n font-size: 2rem;\n }\n }\n\n .item-icon {\n display: flex;\n align-items: center;\n justify-content: center;\n padding: 0.375rem;\n border-radius: 50%;\n background-color: var(--color-primary);\n color: white;\n\n i {\n font-size: 1.25rem;\n position: relative;\n top: -1px;\n }\n }\n\n .item-name {\n margin-left: 0.5rem;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n\n .emoji.emoji-small {\n width: 1.125rem;\n height: 1.125rem;\n background-size: 1.125rem;\n vertical-align: -2px;\n }\n }\n\n .item-remove {\n position: absolute;\n left: 0;\n top: 0;\n width: 2rem;\n height: 2rem;\n border-radius: 50%;\n display: flex;\n align-items: center;\n justify-content: center;\n background-color: var(--color-error);\n font-size: 1.5rem;\n color: white;\n opacity: 0;\n transition: opacity 0.15s ease;\n }\n\n &[dir=\"rtl\"] {\n padding-left: 1rem;\n padding-right: 0;\n\n &.minimized {\n padding-right: 0;\n padding-left: 0;\n }\n\n .SearchInput & {\n left: auto;\n right: -0.125rem;\n }\n\n .item-name {\n margin-left: 0;\n margin-right: 0.5rem;\n }\n\n .item-remove {\n left: auto;\n right: 0;\n }\n }\n}\n",".Switcher {\n display: inline-flex;\n align-items: center;\n position: relative;\n margin: 0;\n\n &.disabled {\n pointer-events: none;\n opacity: 0.5;\n }\n\n &.inactive {\n pointer-events: none;\n }\n\n body.animation-level-0 &,\n &.no-animation {\n .widget,\n .widget::after {\n transition: none !important;\n }\n\n .widget:active:after {\n width: 1.125rem;\n }\n }\n\n input {\n height: 0;\n width: 0;\n visibility: hidden;\n position: absolute;\n z-index: var(--z-below);\n opacity: 0;\n }\n\n .widget {\n cursor: pointer;\n text-indent: -999px;\n width: 2.125rem;\n height: 0.875rem;\n background-color: var(--color-gray);\n display: inline-block;\n border-radius: 0.5rem;\n position: relative;\n transition: background-color 0.2s ease-in;\n }\n\n .widget:after {\n content: \"\";\n position: absolute;\n top: -0.125rem;\n left: 0;\n width: 1.125rem;\n height: 1.125rem;\n background-color: var(--color-background);\n border-radius: 0.75rem;\n /* stylelint-disable-next-line plugin/no-low-performance-animation-properties */\n transition: border-color 0.2s ease-out;\n border: 0.125rem solid var(--color-gray);\n }\n\n input:checked + .widget {\n background: var(--color-primary);\n }\n\n input:checked + .widget:after {\n left: calc(100% - 1.125rem);\n transform: translateX(calc(-100% + 1.125rem));\n border-color: var(--color-primary);\n }\n\n .widget:active:after {\n width: 1.25rem;\n }\n}\n",".MessageOutgoingStatus {\n width: 1.1875rem;\n height: 1.1875rem;\n overflow: hidden;\n display: inline-block;\n line-height: 1;\n font-size: 1.1875rem;\n\n i {\n background: var(--background-color);\n }\n\n .icon-message-succeeded {\n padding-left: 0.125rem;\n }\n\n .Transition {\n width: 100%;\n height: 100%;\n }\n}\n",".LastMessageMeta {\n margin-right: 0.1875rem;\n padding: 0.3125rem 0 0.125rem;\n flex-shrink: 0;\n font-size: 0.75rem;\n line-height: 1;\n display: flex;\n align-items: center;\n\n .MessageOutgoingStatus {\n color: var(--color-text-meta-colored);\n margin-right: 0.125rem;\n font-size: 1.125rem;\n\n body.is-ios & {\n margin-bottom: -0.125rem;\n }\n }\n\n .time {\n color: var(--color-text-meta);\n line-height: 1.125rem;\n }\n}\n",".Badge-transition {\n opacity: 1;\n transition: transform 0.3s cubic-bezier(0.34, 1.56, 0.64, 1);\n\n &:not(.open) {\n transform: scale(0);\n opacity: 0;\n }\n\n &:not(.shown) {\n display: none;\n }\n\n &.closing {\n transition: transform 0.2s ease-out, opacity 0.2s ease-out;\n }\n}\n\n.Badge-wrapper {\n display: flex;\n\n .Badge {\n margin-inline-start: 0.5rem;\n }\n}\n\n.Badge {\n min-width: 1.5rem;\n height: 1.5rem;\n background: var(--color-gray);\n border-radius: 0.75rem;\n padding: 0 0.4375rem;\n color: white;\n font-size: 0.875rem;\n line-height: 1.5625rem;\n font-weight: 500;\n text-align: center;\n flex-shrink: 0;\n\n body.is-macos & {\n line-height: 1.5rem;\n }\n\n body.is-ios & {\n line-height: 1.375rem;\n min-width: 1.375rem;\n height: 1.375rem;\n padding: 0 0.375rem;\n }\n\n &.mention,\n &.unread:not(.muted) {\n background: var(--color-green);\n color: var(--color-white);\n }\n\n &.pinned:not(.unread) {\n color: var(--color-pinned);\n background: transparent;\n width: 1.5rem;\n padding: 0;\n\n i {\n font-size: 1.5rem;\n }\n }\n\n &.mention {\n width: 1.5rem;\n padding: 0.25rem;\n\n i {\n font-size: 1rem;\n vertical-align: super;\n }\n\n body.is-ios & {\n width: 1.375rem;\n padding: 0.25rem;\n\n i {\n font-size: 0.875rem;\n }\n }\n }\n}\n","\n@keyframes bar-animation-transform-1 {\n 0% { transform: scaleY(0.33); }\n 12.5% { transform: scaleY(1.66); }\n 25% { transform: scaleY(0.33); }\n 37.5% { transform: scaleY(1); }\n 50% { transform: scaleY(0.33); }\n 62.5% { transform: scaleY(1.66); }\n 75% { transform: scaleY(0.33); }\n 87.5% { transform: scaleY(1.66); }\n 100% { transform: scaleY(0.33); }\n}\n\n@keyframes bar-animation-transform-2 {\n 0% { transform: scaleY(1); }\n 12.5% { transform: scaleY(0.33); }\n 25% { transform: scaleY(1.66); }\n 37.5% { transform: scaleY(0.33); }\n 50% { transform: scaleY(1); }\n 62.5% { transform: scaleY(0.33); }\n 75% { transform: scaleY(1.66); }\n 87.5% { transform: scaleY(0.33); }\n 100% { transform: scaleY(1); }\n}\n\n\n.ChatCallStatus {\n position: absolute;\n right: 6px;\n bottom: 0;\n width: 20px;\n height: 20px;\n border-radius: 50%;\n background-color: #0ac630;\n border: 2px solid var(--color-background);\n overflow: hidden;\n\n .indicator {\n width: 100%;\n height: 100%;\n display: flex;\n align-items: center;\n justify-content: center;\n border-radius: 50%;\n & > div {\n width: 2px;\n height: 6px;\n background: var(--color-background);\n border-radius: 1px;\n margin: 1px;\n will-change: transform;\n transform: translateZ(0);\n }\n & > div:nth-child(odd) {\n transform: scaleY(0.8);\n }\n & > div:nth-child(even) {\n transform: scaleY(1.33);\n }\n }\n\n &.selected {\n background-color: var(--color-white);\n border-color: var(--color-chat-active);\n .indicator div{\n background-color: var(--color-chat-active);\n }\n }\n\n &.active .indicator {\n div:nth-child(odd) {\n animation: bar-animation-transform-2 3.2s normal infinite;\n }\n\n div:nth-child(even) {\n animation: bar-animation-transform-1 3.2s normal infinite;\n }\n }\n\n}\n",".Chat {\n --background-color: var(--color-background);\n\n body.is-ios &,\n body.is-macos & {\n --color-text-meta: var(--color-text-meta-apple);\n }\n\n position: absolute;\n top: 0;\n left: 0;\n margin: 0;\n width: 100%;\n\n &.animate-opacity {\n will-change: opacity;\n transition: opacity 0.2s ease-out;\n }\n\n &.animate-transform {\n will-change: transform;\n transition: transform 0.2s ease-out;\n }\n\n &:hover,\n &.ListItem.has-menu-open {\n .Avatar.online::after {\n border-color: var(--color-chat-hover);\n }\n }\n\n @media (max-width: 600px) {\n &.selected {\n --background-color: var(--color-chat-hover) !important;\n\n .Avatar.online::after {\n border-color: var(--color-chat-hover);\n }\n }\n }\n\n @media (min-width: 600px) {\n &.selected,\n &.selected:hover {\n --background-color: var(--color-chat-active) !important;\n\n .VerifiedIcon {\n --color-fill: #fff;\n --color-checkmark: var(--color-primary)\n }\n\n .Avatar.online::after {\n border-color: var(--color-chat-active) !important;\n background: var(--color-white);\n }\n\n .ListItem-button {\n --background-color: var(--color-chat-active) !important;\n --color-text: var(--color-white);\n --color-text-meta-colored: var(--color-white);\n --color-text-meta: var(--color-white);\n --color-text-secondary: var(--color-white);\n --color-error: var(--color-white);\n --color-pinned: var(--color-white);\n }\n\n .icon-muted {\n color: var(--color-white) !important;\n }\n\n .Badge:not(.pinned) {\n background: var(--color-white);\n color: var(--color-chat-active);\n }\n }\n }\n\n @media (max-width: 600px) {\n .ListItem-button {\n border-radius: 0 !important;\n }\n }\n\n .status {\n position: relative;\n flex-shrink: 0;\n }\n\n .info {\n .subtitle {\n margin-top: -0.125rem;\n }\n\n h3 {\n width: auto;\n max-width: 80%;\n }\n\n .icon-muted {\n font-size: 1.25rem;\n margin-left: 0.25rem;\n margin-top: -0.0625rem;\n color: #c6c8ca;\n\n body.is-ios & {\n margin-top: 0;\n margin-right: 0.5rem;\n }\n }\n\n .LastMessageMeta {\n margin-left: auto;\n\n body.is-ios & {\n font-size: 0.875rem;\n margin-right: 0;\n }\n }\n\n .last-message,\n .typing-status {\n padding-right: 0.25rem;\n flex-grow: 1;\n color: var(--color-text-secondary);\n unicode-bidi: plaintext;\n\n &[dir=\"ltr\"] {\n text-align: left;\n }\n\n .sender-name {\n color: var(--color-text);\n }\n\n .draft {\n color: var(--color-error);\n }\n }\n\n .last-message {\n .draft {\n &::after {\n content: \": \";\n }\n }\n\n .colon {\n margin-inline-end: 0.25rem;\n }\n\n img {\n width: 1.25rem;\n height: 1.25rem;\n object-fit: cover;\n border-radius: 0.125rem;\n vertical-align: -0.25rem;\n margin-inline-end: 0.25rem;\n\n body.is-ios & {\n width: 1.125rem;\n height: 1.125rem;\n vertical-align: -0.1875rem;\n }\n\n &.round {\n border-radius: 0.625rem;\n }\n }\n\n .emoji-small {\n width: 1rem;\n height: 1rem;\n vertical-align: -0.125rem;\n }\n\n .icon-play {\n position: relative;\n display: inline-block;\n font-size: 0.75rem;\n color: #fff;\n margin-inline-start: -1.25rem;\n margin-inline-end: 0.5rem;\n bottom: 0.0625rem;\n\n body.is-ios & {\n margin-inline-start: -1.125rem;\n bottom: 0;\n }\n }\n }\n }\n\n &[dir=\"rtl\"] {\n .info {\n .LastMessageMeta {\n margin-left: 0;\n margin-right: auto;\n }\n\n .title,\n .subtitle {\n padding-left: 0.125rem;\n padding-right: 0;\n }\n\n .icon-muted {\n margin-left: 0;\n margin-right: 0.25rem;\n }\n\n .last-message,\n .typing-status {\n padding-left: 0.5rem;\n padding-right: 0;\n text-align: right;\n unicode-bidi: plaintext;\n }\n }\n }\n}\n",".AnimatedEmoji {\n cursor: pointer;\n margin-bottom: 0.75rem;\n\n img {\n position: absolute;\n width: 100%;\n height: 100%;\n }\n\n &.like-sticker-thumb img {\n transform: scale(0.8);\n }\n}\n",".EmptyFolder {\n width: 100%;\n height: 80%;\n display: flex;\n align-items: center;\n justify-content: center;\n flex-direction: column;\n\n @media (max-height: 480px) {\n height: 100%;\n }\n\n .sticker {\n height: 8rem;\n margin-bottom: 1.875rem;\n }\n\n .title {\n font-size: 1.25rem;\n margin-bottom: 0.125rem;\n }\n\n .description {\n font-size: 0.875rem;\n color: var(--color-text-secondary);\n\n body.is-ios &,\n body.is-macos & {\n color: var(--color-text-secondary-apple);\n }\n }\n\n .Button.pill {\n margin-top: 0.625rem;\n font-weight: 500;\n padding-inline-start: 0.75rem;\n unicode-bidi: plaintext;\n\n i {\n margin-inline-end: 0.625rem;\n font-size: 1.5rem;\n }\n }\n}\n",".NothingFound {\n display: flex;\n align-items: center;\n justify-content: center;\n color: var(--color-text-meta);\n\n &.with-description {\n flex-direction: column;\n }\n\n .AnimatedSticker {\n margin: 0 auto;\n }\n\n .description {\n color: var(--color-text-secondary);\n font-size: 0.875rem;\n text-align: center;\n margin: 1rem 0 0;\n unicode-bidi: plaintext;\n }\n}\n",".Media {\n height: 0;\n padding-bottom: 100%;\n overflow: hidden;\n position: relative;\n cursor: pointer;\n\n .video-duration {\n position: absolute;\n left: 0.25rem;\n top: 0.25rem;\n background: rgba(0, 0, 0, 0.25);\n color: #fff;\n font-size: 0.75rem;\n padding: 0 0.3125rem;\n border-radius: 0.1875rem;\n line-height: 1.125rem;\n }\n\n img {\n position: absolute;\n left: 0;\n top: 0;\n width: 100%;\n height: 100%;\n object-fit: cover;\n }\n}\n",".WebLink {\n min-height: 3rem;\n padding: 0.25rem 0 0 3.75rem;\n font-size: 0.875rem;\n line-height: 1.125rem;\n position: relative;\n\n & + & {\n margin-top: 1.5rem;\n }\n\n &.without-media::before {\n content: attr(data-initial);\n width: 3rem;\n height: 3rem;\n position: absolute;\n left: 0;\n top: 0;\n background-color: var(--color-webpage-initial-background);\n color: #fff;\n display: flex;\n align-items: center;\n justify-content: center;\n border-radius: var(--border-radius-messages-small);\n text-transform: uppercase;\n font-weight: 500;\n font-size: 1.5rem;\n }\n\n .Media {\n position: absolute;\n left: 0;\n top: 0;\n width: 3rem;\n height: 3rem;\n cursor: default !important;\n padding-bottom: unset !important;\n border-radius: var(--border-radius-messages-small) !important;\n }\n\n .site-name,\n .site-description,\n .site-title {\n word-break: break-word;\n text-align: initial;\n }\n\n .site-name {\n display: block;\n color: var(--color-links);\n font-weight: 400;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n }\n\n .site-title {\n font-size: 1rem;\n font-weight: 400;\n margin-bottom: 0.0625rem;\n line-height: 1.3125rem;\n }\n\n .sender-name,\n .site-description {\n margin-bottom: 0;\n color: var(--color-text-secondary);\n line-height: 1.125rem;\n max-height: 2.25rem;\n display: -webkit-box;\n -webkit-line-clamp: 2;\n -webkit-box-orient: vertical;\n overflow: hidden;\n }\n\n .sender-name {\n margin-top: 0.25rem;\n }\n\n .site-description .emoji {\n width: 1rem !important;\n height: 1rem !important;\n }\n\n &[dir=\"rtl\"] {\n padding: 0.25rem 3.75rem 0 0;\n\n .Media,\n &.without-media::before {\n left: auto;\n right: 0;\n }\n\n .content {\n text-align: right;\n }\n }\n}\n",".File {\n --secondary-color: var(--color-text-secondary);\n\n .Message.own & {\n --secondary-color: var(--color-text-green);\n }\n\n .content-inner & {\n min-width: 14rem;\n @media (max-width: 340px) {\n min-width: 11rem;\n }\n }\n\n display: flex;\n align-items: center;\n\n .file-icon-container {\n position: relative;\n }\n\n .file-progress,\n .file-icon,\n .file-preview {\n width: 3.375rem;\n height: 3.375rem;\n margin-inline-end: 0.75rem;\n border-radius: var(--border-radius-messages-small);\n background: var(--color-primary);\n display: flex;\n align-items: center;\n justify-content: center;\n }\n\n .file-progress {\n position: absolute;\n top: 0;\n left: 0;\n }\n\n .file-icon {\n padding: 1rem 0.75rem 0.5rem;\n align-items: flex-end;\n flex-shrink: 0;\n position: relative;\n color: white;\n\n .file-ext {\n font-size: 1rem;\n font-weight: 500;\n transition: opacity 0.15s;\n }\n\n &::after {\n content: \"\";\n display: block;\n position: absolute;\n top: 0;\n right: 0;\n border-bottom-left-radius: 0.25rem;\n background: rgba(black, 0.25);\n border-color: transparent var(--background-color) transparent var(--background-color);\n border-width: 0 1.125rem 1.125rem 0;\n border-style: solid;\n /* stylelint-disable-next-line plugin/no-low-performance-animation-properties */\n transition: border-width 0.15s ease-in;\n }\n }\n\n .file-preview {\n background: transparent;\n overflow: hidden;\n\n & + .action-icon,\n & + .file-progress {\n background: rgba(black, 0.5);\n border-radius: var(--border-radius-messages-small);\n }\n\n img {\n object-fit: cover;\n }\n }\n\n .action-icon {\n color: #fff;\n font-size: 1.5rem;\n position: absolute;\n top: 0;\n width: 3.375rem;\n height: 3.375rem;\n display: flex;\n align-items: center;\n justify-content: center;\n opacity: 0;\n transition: opacity 0.25s;\n }\n\n &.interactive .file-icon-container {\n cursor: pointer;\n\n &:hover {\n .file-icon::after {\n border-width: 0;\n }\n\n .action-icon {\n opacity: 1;\n\n &.hidden {\n opacity: 0;\n }\n }\n\n .file-ext {\n opacity: 0;\n }\n }\n }\n\n .file-info {\n margin-top: 0.1875rem;\n margin-right: 0.125rem;\n white-space: nowrap;\n overflow: hidden;\n flex-grow: 1;\n\n & + .Link {\n font-size: 0.75rem;\n color: var(--color-text-secondary);\n padding-left: 1rem;\n white-space: nowrap;\n }\n }\n\n .file-title {\n font-size: 1rem;\n line-height: 1.5rem;\n font-weight: 500;\n overflow: hidden;\n text-overflow: ellipsis;\n\n .emoji {\n vertical-align: -4px;\n }\n }\n\n .file-subtitle {\n font-size: 0.875rem;\n line-height: 0.9375rem;\n color: var(--secondary-color);\n max-width: 100%;\n overflow: hidden;\n text-overflow: ellipsis;\n\n span + span {\n &::before {\n content: \"\\00a0\\2022\\00a0\";\n }\n }\n }\n\n &.smaller {\n --background-color: var(--color-background);\n --border-radius-messages-small: 0.3125rem;\n\n .action-icon,\n .file-progress,\n .file-icon,\n .file-preview {\n width: 3rem;\n height: 3rem;\n }\n\n .file-icon {\n padding-bottom: 0.375rem;\n\n &::after {\n border-width: 0 1rem 1rem 0;\n }\n }\n\n .file-info {\n margin-top: -0.125rem;\n }\n\n .file-title {\n font-weight: 400;\n }\n\n .file-subtitle {\n line-height: 1rem;\n }\n }\n\n &:dir(rtl),\n &[dir=\"rtl\"] {\n .file-progress,\n .file-icon,\n .file-preview {\n margin-left: 0.75rem;\n margin-right: 0;\n }\n\n .file-info {\n text-align: right;\n\n & + .Link {\n padding-left: 0;\n padding-right: 1rem;\n }\n }\n\n .action-icon {\n left: auto;\n right: 0;\n }\n }\n}\n\n// Document extension colors\n.File .file-progress,\n.File .file-icon {\n &.red {\n background-color: var(--color-error);\n }\n\n &.orange {\n background-color: var(--color-warning);\n }\n\n &.green {\n background-color: var(--color-text-green);\n }\n}\n",".Audio {\n display: flex;\n align-items: flex-start;\n position: relative;\n\n .media-loading {\n position: absolute;\n pointer-events: none;\n\n &.interactive {\n pointer-events: all;\n }\n }\n\n &.own {\n --color-text-secondary: var(--accent-color);\n --color-interactive-active: var(--color-text-green);\n --color-interactive-inactive: rgba(var(--color-text-green-rgb), 0.4);\n --color-interactive-buffered: rgba(var(--color-text-green-rgb), 0.4); // Overlays underlying inactive color\n\n .theme-dark & {\n --color-text-green-rgb: 255, 255, 255;\n --color-text-green: var(--color-white);\n }\n\n .Button {\n --color-primary: var(--color-text-green);\n --color-primary-shade: var(--color-green);\n --color-primary-shade-darker: var(--color-green-darker);\n --color-white: var(--color-background-own);\n\n .theme-dark & {\n --color-primary-shade: #fff;\n --color-primary-shade-darker: #fff;\n }\n }\n }\n\n .toggle-play {\n margin-inline-end: 0.5rem;\n\n &.translucent-white {\n color: rgba(255, 255, 255, 0.8);\n }\n\n &.smaller {\n width: 3rem;\n height: 3rem;\n margin-inline-end: 0.75rem;\n\n i {\n font-size: 1.625rem;\n\n &.icon-pause {\n font-size: 1.5625rem;\n }\n }\n }\n\n i {\n position: absolute;\n\n &.icon-play {\n margin-left: 0.1875rem;\n @media (max-width: 600px) {\n margin-left: 0.125rem;\n }\n }\n }\n\n .icon-play,\n .icon-pause {\n opacity: 1;\n transform: scale(1);\n transition: opacity 0.4s, transform 0.6s cubic-bezier(0.34, 1.56, 0.64, 1);\n }\n\n &.play .icon-pause,\n &.pause .icon-play,\n &.loading .icon-play,\n &.loading .icon-pause {\n opacity: 0;\n transform: scale(0.5);\n }\n }\n\n .download-button {\n position: absolute;\n width: 1.1875rem !important;\n height: 1.1875rem !important;\n padding: 0;\n left: 1.9375rem;\n top: 1.9375rem;\n border: 0.125rem solid var(--background-color);\n z-index: 1;\n\n i {\n font-size: 0.8125rem;\n }\n }\n\n &.bigger .download-button {\n left: 2rem;\n top: 2rem;\n border: 0.125rem solid var(--color-background);\n }\n\n .content {\n align-self: center;\n min-width: 0;\n flex-grow: 1;\n text-align: initial;\n }\n\n .content-row {\n display: flex;\n justify-content: space-between;\n }\n\n .title {\n font-weight: 500;\n margin: 0;\n line-height: 1.25;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n }\n\n canvas {\n height: 23px;\n }\n\n .voice-duration {\n margin: 0.25rem 0 0;\n font-size: 0.875rem;\n color: var(--color-text-secondary);\n font-variant-numeric: tabular-nums;\n display: flex;\n align-items: flex-end;\n\n &.unread::after {\n content: \"\";\n position: relative;\n margin: 0 0 0.375rem 0.25rem;\n width: 0.4375rem;\n height: 0.4375rem;\n border-radius: 50%;\n background-color: var(--accent-color);\n }\n }\n\n body.is-ios & {\n .voice-duration.unread::after {\n margin-bottom: 0.4375rem;\n }\n }\n\n &:not(.own) .voice-duration span {\n color: var(--color-primary);\n }\n\n .waveform {\n cursor: pointer;\n margin-left: 1px;\n touch-action: none;\n }\n\n .meta,\n .performer,\n .date {\n font-size: 0.875rem;\n color: var(--color-text-secondary);\n margin: 0;\n overflow: hidden;\n white-space: nowrap;\n text-overflow: ellipsis;\n unicode-bidi: plaintext;\n }\n\n .duration {\n font-size: 0.875rem;\n color: var(--color-text-secondary);\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n flex-shrink: 0;\n font-variant-numeric: tabular-nums;\n }\n\n .meta {\n display: flex;\n align-items: center;\n margin-top: 0.125rem;\n padding-inline-end: 0.5rem;\n\n & > span {\n min-width: 0;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n }\n\n .performer {\n flex-shrink: 0;\n }\n\n .duration.with-seekline {\n margin-inline-end: 0.625rem;\n }\n\n .bullet {\n margin: 0 0.25rem;\n flex-shrink: 0;\n }\n }\n\n .seekline {\n flex-grow: 1;\n height: 1.25rem;\n position: relative;\n top: 3px;\n cursor: pointer;\n touch-action: none;\n\n &::before {\n content: \"\";\n position: absolute;\n width: 100%;\n top: 6px;\n height: 2px;\n background-color: var(--color-interactive-inactive);\n border-radius: 2px;\n }\n }\n\n .seekline-play-progress {\n position: absolute;\n height: 2px;\n border-radius: 2px;\n overflow: hidden;\n width: 100%;\n top: 6px;\n\n i {\n position: absolute;\n width: 100%;\n background-color: var(--color-interactive-active);\n height: 2px;\n border-radius: 2px;\n right: 100%;\n }\n }\n\n .seekline-buffered-progress {\n height: 2px;\n border-radius: 2px;\n\n position: absolute;\n top: 6px;\n\n background-color: var(--color-interactive-buffered);\n }\n\n .seekline-thumb {\n position: absolute;\n width: 100%;\n top: 7px;\n left: 0;\n\n i {\n pointer-events: none;\n position: absolute;\n width: 100%;\n right: 100%;\n\n &::after {\n content: \"\";\n position: absolute;\n top: -6px;\n right: -6px;\n width: 12px;\n height: 12px;\n border-radius: 6px;\n background: var(--color-interactive-active);\n }\n }\n }\n\n &.bigger {\n .title {\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n font-weight: 400;\n line-height: 1.5rem;\n }\n\n .meta {\n height: 1.25rem;\n }\n\n .performer,\n .date {\n line-height: 1.0625rem;\n }\n\n .duration {\n line-height: 1rem;\n }\n\n .media-loading {\n top: 0.1875rem;\n left: 0.1875rem;\n }\n\n &[dir=\"rtl\"] {\n .media-loading {\n left: auto !important;\n right: 0;\n }\n }\n }\n\n .ProgressSpinner.size-s svg {\n width: 2.25rem;\n height: 2.25rem;\n }\n\n &[dir=\"rtl\"] {\n &:last-child {\n margin-bottom: 0.625rem;\n }\n\n .toggle-play {\n margin-left: 0.5rem;\n margin-right: 0;\n\n &.smaller {\n margin-left: 0.75rem;\n margin-right: 0;\n }\n }\n\n .meta.duration.with-seekline {\n margin-inline-start: 0.625rem;\n }\n\n .content,\n .duration {\n text-align: right;\n }\n\n .download-button {\n left: auto;\n right: 2rem;\n }\n }\n}\n\n.has-replies .Audio {\n margin-bottom: 1rem;\n [dir=\"rtl\"] {\n margin-bottom: 1.625rem;\n }\n}\n",".ProfilePhoto {\n width: 100%;\n height: 100%;\n cursor: pointer;\n position: relative;\n\n .avatar-media {\n width: 100%;\n object-fit: cover;\n }\n\n .spinner-wrapper {\n width: 100%;\n height: 100%;\n }\n\n .spinner-wrapper,\n &.deleted-account,\n &.replies-bot-account,\n &.no-photo,\n &.saved-messages {\n display: flex;\n align-items: center;\n justify-content: center;\n color: var(--color-white);\n background: linear-gradient(var(--color-white) -125%, var(--color-user));\n cursor: default;\n }\n\n &.no-photo {\n font-size: 14rem;\n }\n\n &.replies-bot-account,\n &.deleted-account,\n &.saved-messages {\n font-size: 20rem;\n }\n}\n",".ProfileInfo {\n aspect-ratio: 1 / 1;\n position: relative;\n\n @supports not (aspect-ratio: 1 / 1) {\n &::before {\n float: left;\n padding-top: 100%;\n content: \"\";\n }\n\n &::after {\n display: block;\n content: \"\";\n clear: both;\n }\n }\n\n .photo-wrapper {\n width: 100%;\n position: absolute;\n left: 0;\n top: 0;\n bottom: 0;\n\n > .Transition {\n width: 100%;\n height: 100%;\n }\n }\n\n .photo-dashes {\n position: absolute;\n width: 100%;\n height: 0.125rem;\n padding: 0 0.375rem;\n z-index: 1;\n\n display: flex;\n top: 0.5rem;\n left: 0;\n }\n\n .photo-dash {\n flex: 1 1 auto;\n background-color: var(--color-white);\n opacity: 0.25;\n border-radius: 0.125rem;\n margin: 0 0.125rem;\n transition: opacity 300ms ease;\n\n &.current {\n opacity: 0.75;\n }\n }\n\n .navigation {\n position: absolute;\n top: 0;\n bottom: 0;\n width: 25%;\n border: none;\n padding: 0;\n margin: 0;\n appearance: none;\n background: transparent no-repeat;\n background-size: 1.25rem;\n opacity: 0.25;\n transition: opacity 0.15s;\n outline: none;\n cursor: pointer;\n z-index: 1;\n\n &:hover,\n .is-touch-env & {\n opacity: 1;\n }\n\n &.prev {\n left: 0;\n background-image: url(\"../../assets/media_navigation_previous.svg\");\n background-position: 1.25rem 50%;\n }\n\n &.next {\n right: 0;\n background-image: url(\"../../assets/media_navigation_next.svg\");\n background-position: calc(100% - 1.25rem) 50%;\n }\n }\n\n .info {\n position: absolute;\n bottom: 0;\n left: 0;\n width: 100%;\n min-height: 100px;\n padding: 0 1.5rem 0.5rem;\n background: linear-gradient(0deg, rgba(0, 0, 0, 0.5) 0%, rgba(0, 0, 0, 0) 100%);\n color: var(--color-white);\n display: flex;\n flex-direction: column;\n justify-content: flex-end;\n pointer-events: none;\n\n &:dir(rtl) {\n .status {\n text-align: right;\n unicode-bidi: plaintext;\n }\n }\n\n &[dir=\"rtl\"] {\n .status {\n text-align: right;\n unicode-bidi: plaintext;\n }\n }\n }\n\n .title {\n display: flex;\n align-items: center;\n\n h3 {\n font-weight: 500;\n font-size: 1.25rem;\n line-height: 1.375rem;\n white-space: pre-wrap;\n word-break: break-word;\n margin-bottom: 0.25rem;\n }\n\n .VerifiedIcon {\n margin-left: 0.25rem;\n margin-top: -0.125rem;\n }\n\n .emoji {\n width: 1.5rem;\n height: 1.5rem;\n background-size: 1.5rem;\n }\n }\n\n .status {\n font-size: 0.875rem;\n opacity: 0.5;\n }\n\n &[dir=\"rtl\"] {\n .navigation.prev {\n left: auto;\n right: 0;\n transform: scaleX(-1);\n }\n\n .navigation.next {\n left: 0;\n right: auto;\n transform: scaleX(-1);\n }\n }\n\n &.self {\n margin: 0 -0.5rem 0.75rem;\n overflow: hidden;\n\n &.ghost {\n margin: 0;\n }\n\n .info {\n padding-bottom: 0.75rem;\n }\n\n .status {\n line-height: 1rem;\n }\n }\n}\n",".DropTarget {\n border-radius: var(--border-radius-default);\n background: var(--color-background);\n padding: 1.25rem;\n flex: 1 1 auto;\n width: 100%;\n max-width: 43.75rem;\n margin-left: auto;\n margin-right: auto;\n margin-bottom: 0.3125rem;\n display: flex;\n color: #a4acb3;\n box-shadow: 0 1px 2px var(--color-default-shadow);\n\n @media (max-height: 350px) {\n padding: 0.75rem;\n }\n\n &.hovered .target-content {\n color: var(--color-primary);\n background-image: var(--drag-target-border-hovered);\n }\n\n & + & {\n margin-top: 0.3125rem;\n }\n\n &:last-child {\n margin-bottom: 0;\n }\n\n .target-content {\n pointer-events: none;\n background-image: var(--drag-target-border);\n border-radius: 0.5rem;\n flex: 1 1 100%;\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n transition: 0.2s color, 0.2s background-image;\n }\n\n .icon {\n font-size: 6.25rem;\n line-height: 4.6875rem;\n margin-bottom: 2.25rem;\n\n @media (max-height: 520px) {\n font-size: 4.25rem;\n line-height: 3.5rem;\n margin-bottom: 1rem;\n }\n\n @media (max-height: 450px) {\n font-size: 2rem;\n line-height: 1rem;\n margin-bottom: 0.5rem;\n margin-top: 0.25rem;\n }\n }\n\n .title {\n font-size: 1.3125rem;\n font-weight: 500;\n letter-spacing: -0.18px;\n\n @media (max-height: 450px) {\n font-size: 1rem;\n }\n }\n\n .description {\n font-size: 1rem;\n letter-spacing: 0.3px;\n\n @media (max-height: 450px) {\n font-size: 0.875rem;\n }\n }\n}\n",".FloatingActionButton {\n position: absolute;\n right: 1rem;\n bottom: 1rem;\n transform: translateY(calc(5rem - var(--group-call-header-height, 0rem)));\n transition: transform 0.25s cubic-bezier(0.34, 1.56, 0.64, 1);\n\n body.animation-level-0 & {\n transition: none !important;\n }\n\n &.revealed {\n transform: translateY(calc(0rem - var(--group-call-header-height, 0rem)));\n }\n}\n",".DropArea {\n position: absolute;\n top: 0;\n right: 0;\n left: 0;\n height: 100vh;\n z-index: var(--z-drop-area);\n padding: 80px 20px 20px;\n\n display: flex;\n flex-direction: column;\n\n #Main.right-column-open & {\n max-width: calc(100% - var(--right-column-width));\n }\n}\n",".StickerButton {\n display: inline-block;\n width: 4rem;\n height: 4rem;\n margin: 0.5rem;\n border-radius: var(--border-radius-messages-small);\n background: transparent no-repeat center;\n background-size: contain;\n transition: background-color 0.15s ease, opacity 0.3s ease !important;\n position: relative;\n\n &.interactive {\n cursor: pointer;\n\n &:hover {\n background-color: var(--color-interactive-element-hover);\n\n .sticker-unfave-button {\n opacity: 1;\n }\n }\n }\n\n @media (max-width: 600px) {\n margin: 0.25rem;\n }\n\n &.set-button {\n width: 2.75rem !important;\n height: 2.75rem;\n margin: 0 0.5rem;\n }\n\n &.large {\n width: 10rem;\n height: 10rem;\n margin: 0;\n }\n\n .AnimatedSticker,\n img,\n video {\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n }\n\n img,\n video {\n object-fit: contain;\n -webkit-touch-callout: none;\n user-select: none;\n }\n\n .sticker-unfave-button {\n position: absolute;\n top: -0.5rem;\n right: -0.5rem;\n width: 1.25rem;\n height: 1.25rem;\n padding: 0.125rem;\n\n i {\n font-size: 1rem;\n }\n\n opacity: 0;\n }\n\n .sticker-context-menu {\n position: absolute;\n\n .bubble {\n width: auto;\n }\n }\n}\n",".TextFormatter {\n transform: translate(-50%, -3.25rem);\n\n &,\n &-link-control {\n position: absolute;\n background: var(--color-background);\n border-radius: var(--border-radius-messages);\n padding: 0.5rem 0.375rem;\n box-shadow: 0 1px 2px var(--color-default-shadow);\n }\n\n &-link-control {\n left: 0;\n top: 0;\n opacity: 0;\n pointer-events: none;\n transition: opacity 0.3s ease;\n\n .Modal & {\n max-width: 100%;\n }\n\n @media (max-width: 600px) {\n max-width: calc(100vw - var(--text-formatter-left) + 3rem);\n }\n\n input {\n border: none !important;\n outline: none !important;\n width: 100%;\n color: var(--color-text);\n background-color: var(--color-background);\n }\n }\n\n &-buttons,\n &-link-url-confirm {\n display: flex;\n flex-wrap: nowrap;\n align-items: center;\n }\n\n &-divider {\n width: 1px;\n height: 1.75rem;\n margin: 0 0.25rem;\n background-color: var(--color-borders);\n }\n\n &-link-url-input-wrapper {\n width: 20rem;\n position: relative;\n max-width: 100%;\n\n @media (max-width: 600px) {\n max-width: 90vw;\n }\n\n &::before,\n &::after {\n content: \"\";\n display: block;\n position: absolute;\n top: 0;\n bottom: 0;\n width: 1rem;\n z-index: 2;\n opacity: 0;\n transition: opacity 0.2s ease;\n }\n\n &::before {\n left: 0;\n background: linear-gradient(to right, var(--color-background) 0.25rem, transparent 1rem);\n }\n\n &::after {\n right: 0;\n background: linear-gradient(to left, var(--color-background) 0.25rem, transparent 1rem);\n }\n\n &.mask-left {\n &::before {\n opacity: 1;\n }\n }\n\n &.mask-right {\n &::after {\n opacity: 1;\n }\n }\n }\n\n &-link-url-confirm {\n flex-shrink: 0;\n opacity: 0;\n transition: opacity 0.3s ease;\n\n &.shown {\n opacity: 1;\n }\n }\n\n &.link-control-shown {\n .TextFormatter-link-control {\n opacity: 1;\n pointer-events: all;\n }\n }\n\n .Button {\n width: 2rem;\n height: 2rem;\n padding: 0.25rem;\n font-size: 1.5rem;\n margin: 0 0.125rem;\n border-radius: var(--border-radius-messages-small);\n flex-shrink: 0;\n cursor: pointer;\n\n &.active {\n background-color: var(--color-primary) !important;\n color: white;\n }\n\n &.disabled {\n opacity: 0.5;\n pointer-events: none;\n }\n }\n}\n",".Picker {\n height: 100%;\n display: flex;\n flex-direction: column;\n overflow: hidden;\n\n .picker-header {\n padding: 0 1rem 0.25rem 0.75rem;\n border-bottom: 1px solid var(--color-borders);\n display: flex;\n flex-flow: row wrap;\n flex-shrink: 0;\n\n overflow-y: auto;\n max-height: 20rem;\n\n .input-group {\n margin-bottom: 0.5rem;\n margin-left: 0.5rem;\n flex-grow: 1;\n }\n\n .form-control {\n height: 2rem;\n border: none;\n border-radius: 0;\n padding: 0;\n box-shadow: none;\n }\n }\n\n .picker-list {\n flex-grow: 1;\n overflow-y: auto;\n overflow-x: hidden;\n padding: 0.5rem;\n\n @media (max-width: 600px) {\n padding-left: 0 !important;\n padding-right: 0 !important;\n }\n }\n\n .no-results {\n height: 100%;\n margin: 0;\n padding: 1rem 1rem;\n display: flex;\n align-items: center;\n justify-content: center;\n color: var(--color-text-secondary);\n }\n}\n"],"names":[],"sourceRoot":""} \ No newline at end of file diff --git a/dist/13.c4586e903a85e96ce217.js b/dist/13.c4586e903a85e96ce217.js deleted file mode 100644 index 3bc0ee525..000000000 --- a/dist/13.c4586e903a85e96ce217.js +++ /dev/null @@ -1,2 +0,0 @@ -"use strict";(self.webpackChunktelegram_t=self.webpackChunktelegram_t||[]).push([[13],{7854:(e,t,n)=>{n.d(t,{Z:()=>m});var a=n(4050),r=n(6137),i=n(6752),o=n(3657),s=n(6202),l=n(692),c=n(5296),d=n(4399),u=n(7799);const m=(0,a.X$)((e=>{var t;let{sticker:n,effect:m,isOwn:h,soundId:v,size:f="medium",observeIntersection:p,lastSyncTime:g,forceLoadPreview:Z,messageId:E,chatId:P,activeEmojiInteractions:y}=e;const{markAnimationLoaded:C,isAnimationLoaded:b,ref:N,width:w,style:k,handleClick:I,playKey:S}=(0,c.Z)(f,P,E,v,y,h,void 0,null==m?void 0:m.emoji),T=`sticker${n.id}`,M=(0,o.Op)(N,p),x=null===(t=n.thumbnail)||void 0===t?void 0:t.dataUri,L=(0,s.Z)(`${T}?size=m`,!M&&!Z,r.IU.BlobUrl,g),$=(0,l.Z)(L),O=(0,s.Z)(T,!M,r.IU.Lottie,g),A=Boolean(O);return a.ZP.createElement("div",{ref:N,className:(0,i.Z)("AnimatedEmoji media-inner",n.id===d.wB&&"like-sticker-thumb"),style:k,onClick:I},!b&&x&&a.ZP.createElement("img",{src:x,alt:""}),!b&&L&&a.ZP.createElement("img",{src:L,className:$,alt:""}),A&&T&&a.ZP.createElement(u.Z,{key:T,id:T,animationData:O,size:w,quality:1,play:M&&S,forceOnHeavyAnimation:!0,noLoop:!0,onLoad:C}))}))},4752:(e,t,n)=>{n.d(t,{Z:()=>x});var a=n(4050),r=n(3555),i=n(6137),o=n(1713),s=n(7361),l=n(790),c=n(5806);function d(e,t,n,a){let{peak:r,fillStyle:i,progressFillStyle:o}=a;const s=4*t.length;e.width=2*s,e.height=46,e.style.width=`${s}px`,e.style.height="23px";const l=e.getContext("2d");l.scale(2,2),t.forEach(((e,a)=>{l.globalAlpha=a/t.length>=n?.5:1,l.fillStyle=n>a/t.length?o:i;const s=Math.max(2,e/Math.max(1,r)*23);!function(e,t,n,a,r,i){2<2*i&&(i=1),r<2*i&&(i=r/2),e.beginPath(),e.moveTo(t+i,n),e.arcTo(t+2,n,t+2,n-r,i),e.arcTo(t+2,n-r,t,n-r,i),e.arcTo(t,n-r,t,n,i),e.arcTo(t,n,t+2,n,i),e.closePath()}(l,4*a,23,0,s,1),l.fill()}))}var u=n(6752),m=n(2340),h=n(5376);function v(e){const t=8*e.length,n=Math.floor(t/5);if(!n)return[];const a=Array(n),r=e;for(let e=0,t=n-1;e!==t;++e){const t=Math.floor(5*e/8),n=Math.floor(5*e%8),i=r[t]+(r[t+1]<<8);a[e]=i>>n&31}const i=Math.floor(5*(n-1)/8),o=Math.floor(5*(n-1)%8),s=r[i]+(r[i+1]<<8);return a[n-1]=s>>o&31,a}function f(e,t){let n=0;const a=new Array(t),r=e.length/t,i=e[0],o=e[e.length-1];for(let d=0;d{let{start:t,end:n}=e;return a.ZP.createElement("div",{className:"seekline-buffered-progress",style:`left: ${100*t}%; right: ${100-100*n}%`})})),a.ZP.createElement("span",{className:"seekline-play-progress"},a.ZP.createElement("i",{style:`transform: translateX(${100*e}%)`})),a.ZP.createElement("span",{className:"seekline-thumb"},a.ZP.createElement("i",{style:`transform: translateX(${100*e}%)`})))}const x=(0,a.X$)((e=>{let{theme:t,message:n,senderTitle:x,uploadProgress:L,origin:$,date:O,lastSyncTime:A,className:F,isSelectable:D,isSelected:R,isDownloading:U,onPlay:B,onReadMedia:X,onCancelUpload:Y,onDateClick:z}=e;const{cancelMessageMediaDownload:V,downloadMessageMedia:j}=(0,r.Sv)(),{content:{audio:K,voice:H,video:W},isMediaUnread:q}=n,J=Boolean(H||W),_=(0,a.sO)(!1),G=(0,a.sO)(null),Q=(0,P.Z)(),{isRtl:ee}=Q,[te,ne]=(0,a.eJ)(!1),ae=A,re=(0,c.Ti)(n,"pictogram"),ie=(0,C.Z)(re,!1,i.IU.BlobUrl),oe=(0,C.Z)((0,c.Ti)(n,"inline"),!ae,(0,c.kG)(n,"inline")),{loadProgress:se}=(0,p.Z)((0,c.Ti)(n,"download"),!U),le=(0,a.I4)((()=>{ne(!0),B(n.id,n.chatId)}),[n,B]),ce=(0,a.I4)((()=>{ne(!1)}),[]),{isBuffered:de,bufferedRanges:ue,bufferingHandlers:me,checkBuffering:he}=(0,Z.Z)(),{isPlaying:ve,playProgress:fe,playPause:pe,setCurrentTime:ge,duration:Ze}=(0,E.Z)((0,b.An)(n),(0,c.XV)(n),J?"voice":"audio",oe,me,void 0,he,te,le,ce,(0,c.CI)(n)),Ee=(0,c.B4)(n),Pe=function(e,t){let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:0,r=arguments.length>3&&void 0!==arguments[3]&&arguments[3];const i=(0,a.sO)(null),{data:o,peak:s}=(0,a.Ye)((()=>{if(!t)return;const{waveform:e,duration:n}=t;if(!e)return{data:new Array(Math.min(n,30)).fill(0),peak:0};const a=Math.min(n/10,1),r=Math.round(S+(T-S)*a);return f(v(new Uint8Array(e)),r)}),[t])||{};return(0,a.bt)((()=>{const t=i.current;t&&o&&void 0!==s&&d(t,o,n,{peak:s,fillStyle:r?"dark"===e?"#B7ABED":"#AEDFA4":"dark"===e?"#494A78":"#ADD3F7",progressFillStyle:r?"dark"===e?"#FFFFFF":"#4FAE4E":"dark"===e?"#8774E1":"#3390EC"})}),[r,s,n,o,e]),i}(t,H,q&&!Ee?1:fe,Ee),ye=ve||fe>0&&fe<1;(0,a.d4)((()=>{ne(ve)}),[ve]);const Ce=te&&!de,{isUploading:be,isTransferring:Ne,transferProgress:we}=(0,c.Sc)(n,L||se,Ce||U),{shouldRender:ke,transitionClassNames:Ie}=(0,g.Z)(Ne),Se=ke&&(Ce||be),Te=(0,a.I4)((()=>{be?null==Y||Y():(ve||B(n.id,n.chatId),(0,r.Sv)().setAudioPlayerOrigin({origin:$}),ne(!te),pe())}),[be,ve,te,pe,Y,B,n.id,n.chatId,$]);(0,a.d4)((()=>{X&&q&&(ve||U)&&X()}),[ve,q,X,U]);const Me=(0,a.I4)((()=>{U?V({message:n}):j({message:n})}),[V,j,U,n]),xe=(0,a.I4)((e=>{if(_.current&&G.current){const{width:t,left:n}=G.current.getBoundingClientRect(),a=e instanceof MouseEvent?e.clientX:e.targetTouches[0].clientX;e.stopPropagation(),ge(Math.max(Math.min(Ze*((a-n)/t),Ze-.1),.001))}}),[Ze,ge]),Le=(0,a.I4)((e=>{e instanceof MouseEvent&&2===e.button||(_.current=!0,xe(e))}),[xe]),$e=(0,a.I4)((()=>{_.current=!1}),[]),Oe=(0,a.I4)((()=>{z(n.id,n.chatId)}),[z,n.id,n.chatId]);function Ae(){if(J)return x||"Voice";const{title:e,fileName:t}=K;return e||t}(0,a.d4)((()=>{if(G.current&&ye)return(0,y.sf)(G.current,{onCapture:Le,onRelease:$e,onClick:$e,onDrag:xe})}),[ye,Le,xe,$e]);const Fe=(0,u.Z)("Audio",F,Ee&&$===o.Cr.Inline&&"own",($===o.Cr.Search||$===o.Cr.SharedMedia)&&"bigger",R&&"audio-is-selected"),De=["toggle-play"];Se?De.push("loading"):De.push(ve?"pause":"play");const Re=(0,u.Z)("content",ye&&"with-seekline");function Ue(){return a.ZP.createElement("div",{className:Re},a.ZP.createElement("div",{className:"content-row"},a.ZP.createElement("p",{className:"title",dir:"auto",title:Ae()},(0,m.Z)(Ae())),a.ZP.createElement("div",{className:"message-date"},O&&a.ZP.createElement(I.Z,{className:"date",onClick:Oe},(0,l.VX)(Q,1e3*O)))),ye&&a.ZP.createElement("div",{className:"meta search-result",dir:ee?"rtl":void 0},a.ZP.createElement("span",{className:"duration with-seekline",dir:"auto"},fe<1&&`${(0,l.k9)(Ze*fe,Ze)}`),M(fe,ue,G)),!ye&&function(){if(J)return a.ZP.createElement("div",{className:"meta",dir:ee?"rtl":void 0},(0,l.k9)((H||W).duration));const{performer:e}=K;return a.ZP.createElement("div",{className:"meta",dir:ee?"rtl":void 0},(0,l.k9)(Ze),a.ZP.createElement("span",{className:"bullet"},"•"),e&&a.ZP.createElement("span",{className:"performer",title:e},(0,m.Z)(e)),e&&x&&a.ZP.createElement("span",{className:"bullet"},"•"),x&&a.ZP.createElement("span",{title:x},(0,m.Z)(x)))}())}return a.ZP.createElement("div",{className:Fe,dir:Q.isRtl?"rtl":"ltr"},D&&a.ZP.createElement("div",{className:"message-select-control"},R&&a.ZP.createElement("i",{className:"icon-select"})),a.ZP.createElement(w.Z,{round:!0,ripple:!s.wB,size:"smaller",color:ie?"translucent-white":"primary",className:De.join(" "),ariaLabel:ve?"Pause audio":"Play audio",onClick:Te,isRtl:Q.isRtl,backgroundImage:ie},a.ZP.createElement("i",{className:"icon-play"}),a.ZP.createElement("i",{className:"icon-pause"})),ke&&a.ZP.createElement("div",{className:(0,u.Z)("media-loading",Ie,Se&&"interactive")},a.ZP.createElement(k.Z,{progress:we,transparent:!0,size:"m",onClick:Se?Te:void 0,noCross:!Se})),K&&!be&&a.ZP.createElement(w.Z,{round:!0,size:"tiny",className:"download-button",ariaLabel:U?"Cancel download":"Download",onClick:Me},a.ZP.createElement("i",{className:U?"icon-close":"icon-arrow-down"})),$===o.Cr.Search&&Ue(),$!==o.Cr.Search&&K&&function(e,t,n,r,i,o,s,c,d,u,v){const{title:f,performer:p,fileName:g}=t,Z=r||i>0&&i<1,{isRtl:E}=N.i0;return a.ZP.createElement("div",{className:"content"},a.ZP.createElement("p",{className:"title",dir:"auto",title:f},(0,m.Z)(f||g)),Z&&a.ZP.createElement("div",{className:"meta",dir:E?"rtl":void 0},a.ZP.createElement("span",{className:"duration with-seekline",dir:"auto"},(0,l.k9)(n*i,n)),M(i,o,s)),!Z&&c&&a.ZP.createElement("div",{className:"meta",dir:E?"rtl":void 0},u?`${(0,h.yW)(t.size*u)} / `:void 0,(0,h.yW)(t.size)),!Z&&!c&&a.ZP.createElement("div",{className:"meta",dir:E?"rtl":void 0},a.ZP.createElement("span",{className:"duration",dir:"auto"},(0,l.k9)(n)),a.ZP.createElement("span",{className:"bullet"},"•"),a.ZP.createElement("span",{className:"performer",dir:"auto",title:p},(0,m.Z)(p||"Unknown")),d&&a.ZP.createElement(a.ZP.Fragment,null,a.ZP.createElement("span",{className:"bullet"},"•"),a.ZP.createElement(I.Z,{className:"date",onClick:v},(0,l.ZK)(e,1e3*d,!0)))))}(Q,K,Ze,ve,fe,ue,G,U||be,O,we,z?Oe:void 0),$===o.Cr.SharedMedia&&(H||W)&&Ue(),$===o.Cr.Inline&&H&&function(e,t,n,r,i){return a.ZP.createElement("div",{className:"content"},a.ZP.createElement("div",{className:"waveform",draggable:!1,ref:t},a.ZP.createElement("canvas",{ref:n})),a.ZP.createElement("p",{className:(0,u.Z)("voice-duration",i&&"unread"),dir:"auto"},0===r?(0,l.k9)(e.duration):(0,l.k9)(e.duration*r)))}(H,G,Pe,fe,q))}))},180:(e,t,n)=>{n.d(t,{Z:()=>h});var a=n(4050),r=n(3555),i=n(1192),o=n(5806),s=n(2340),l=n(4319),c=n(6272),d=n(9107),u=n(1876),m=n(3321);const h=(0,a.X$)((0,r.c$)(((e,t)=>{let{chatOrUserId:n}=t;const{lastSyncTime:a,countryList:{phoneCodes:r}}=e,s=n?(0,i.Z1)(e,n):void 0,l=(0,o.YC)(n)?(0,i.dy)(e,n):void 0,c=s&&(0,o.i4)(s,(0,i.dZ)(e),(0,i.NJ)(e));return{lastSyncTime:a,phoneCodeList:r,chat:s,user:l,canInviteUsers:s&&!l&&(!(0,o.eA)(s)&&!(0,o.Mg)(s,"inviteUsers")||(0,o.VE)(s,"inviteUsers")),isMuted:c}}))((e=>{let{lastSyncTime:t,user:n,chat:i,forceShowSelf:h,canInviteUsers:v,isMuted:f,phoneCodeList:p}=e;const{loadFullUser:g,showNotification:Z,updateChatMutedState:E}=(0,r.Sv)(),{id:P,fullInfo:y,username:C,phoneNumber:b,isSelf:N}=n||{},{id:w}=i||{},k=(0,d.Z)();(0,a.d4)((()=>{t&&P&&g({userId:P})}),[g,P,t]);const I=(0,a.I4)((()=>{E({chatId:w,isMuted:!f})}),[w,f,E]);if(!i||i.isRestricted||N&&!h)return;function S(e,t){(0,l.TE)(e),Z({message:`${t} was copied`})}const T=b&&(0,c.WZ)(p,b),M=(0,o.hu)(i),x=(null==y?void 0:y.bio)||(0,o.GM)(i);return a.ZP.createElement("div",{className:"ChatExtra"},T&&Boolean(T.length)&&a.ZP.createElement(u.Z,{icon:"phone",multiline:!0,narrow:!0,ripple:!0,onClick:()=>S(T,k("Phone"))},a.ZP.createElement("span",{className:"title",dir:"auto"},T),a.ZP.createElement("span",{className:"subtitle"},k("Phone"))),C&&a.ZP.createElement(u.Z,{icon:"mention",multiline:!0,narrow:!0,ripple:!0,onClick:()=>S(`@${C}`,k("Username"))},a.ZP.createElement("span",{className:"title",dir:"auto"},(0,s.Z)(C)),a.ZP.createElement("span",{className:"subtitle"},k("Username"))),x&&Boolean(x.length)&&a.ZP.createElement(u.Z,{icon:"info",multiline:!0,narrow:!0,isStatic:!0},a.ZP.createElement("span",{className:"title",dir:"auto"},(0,s.Z)(x,["br","links","emoji"])),a.ZP.createElement("span",{className:"subtitle"},k(P?"UserBio":"Info"))),(v||!C)&&M&&a.ZP.createElement(u.Z,{icon:i.username?"mention":"link",multiline:!0,narrow:!0,ripple:!0,onClick:()=>S(M,k("SetUrlPlaceholder"))},a.ZP.createElement("div",{className:"title"},M),a.ZP.createElement("span",{className:"subtitle"},k("SetUrlPlaceholder"))),!h&&a.ZP.createElement(u.Z,{icon:"unmute",ripple:!0,onClick:I},a.ZP.createElement("span",null,k("Notifications")),a.ZP.createElement(m.Z,{id:"group-notifications",label:P?"Toggle User Notifications":"Toggle Chat Notifications",checked:!f,inactive:!0})))})))},329:(e,t,n)=>{n.d(t,{Z:()=>m});var a=n(4050),r=n(3555),i=n(1192),o=n(5806),s=n(9107),l=n(2340),c=n(172),d=n(3103),u=n(231);const m=(0,a.X$)((0,r.c$)(((e,t)=>{let{chat:n}=t;const a=(0,o.YC)(n.id),r=(0,i.FM)(e,n.id),s=a&&(0,i.dy)(e,(0,o.zX)(n)),l=s&&(0,o.cS)(s)&&!n.isSupport,c=a&&!r&&!l,d=a?(0,o.Vl)((0,i.dy)(e,(0,o.zX)(n))):void 0;return{isPrivateChat:a,isChatWithSelf:r,isBot:l,isChannel:(0,o.eA)(n),isBasicGroup:(0,o.G9)(n),isSuperGroup:(0,o.ZV)(n),currentUserId:e.currentUserId,canDeleteForAll:c,contactName:d}}))((e=>{let{isOpen:t,chat:n,isChannel:i,isPrivateChat:m,isChatWithSelf:h,isBot:v,isBasicGroup:f,isSuperGroup:p,currentUserId:g,canDeleteForAll:Z,contactName:E,onClose:P,onCloseAnimationEnd:y}=e;const{leaveChannel:C,deleteHistory:b,deleteChannel:N,deleteChatUser:w,blockContact:k}=(0,r.Sv)(),I=(0,s.Z)(),S=(0,o.U)(I,n),T=(0,a.I4)((()=>{b({chatId:n.id,shouldDeleteForAll:!0}),P()}),[b,n.id,P]),M=(0,a.I4)((()=>{b({chatId:n.id,shouldDeleteForAll:!0}),k({contactId:n.id,accessHash:n.accessHash}),P()}),[b,n.id,n.accessHash,k,P]),x=(0,a.I4)((()=>{m?b({chatId:n.id,shouldDeleteForAll:!1}):f?(w({chatId:n.id,userId:g}),b({chatId:n.id,shouldDeleteForAll:!1})):!i&&!p||n.isCreator?(i||p)&&n.isCreator&&N({chatId:n.id}):C({chatId:n.id}),P()}),[m,f,i,p,g,n.isCreator,n.id,P,b,w,C,N]),L=(0,a.I4)((()=>{i||p?(C({chatId:n.id}),P()):x()}),[n.id,x,i,p,C,P]);return a.ZP.createElement(d.Z,{isOpen:t,className:"DeleteChatModal",header:a.ZP.createElement("div",{className:"modal-header",dir:I.isRtl?"rtl":void 0},a.ZP.createElement(c.Z,{size:"tiny",chat:n,isSavedMessages:h}),a.ZP.createElement("h3",{className:"modal-title"},I(i&&!n.isCreator?"LeaveChannel":i&&n.isCreator?"ChannelDelete":f||p?"Group.LeaveGroup":"DeleteChatUser"))),onClose:P,onCloseAnimationEnd:y},i&&n.isCreator?a.ZP.createElement("p",null,(0,l.Z)(I("ChatList.DeleteAndLeaveGroupConfirmation",S),["simple_markdown"])):i&&!n.isCreator||f||p?a.ZP.createElement("p",null,(0,l.Z)(I("ChannelLeaveAlertWithName",S),["simple_markdown"])):a.ZP.createElement("p",null,(0,l.Z)(I("ChatList.DeleteChatConfirmation",E),["simple_markdown"])),v&&a.ZP.createElement(u.Z,{color:"danger",className:"confirm-dialog-button",isText:!0,onClick:M},I("DeleteAndStop")),Z&&a.ZP.createElement(u.Z,{color:"danger",className:"confirm-dialog-button",isText:!0,onClick:T},E?(0,l.Z)(I("ChatList.DeleteForEveryone",E)):I("DeleteForAll")),!m&&n.isCreator&&a.ZP.createElement(u.Z,{color:"danger",className:"confirm-dialog-button",isText:!0,onClick:x},I("DeleteForAll")),a.ZP.createElement(u.Z,{color:"danger",className:"confirm-dialog-button",isText:!0,onClick:m?x:L},I(i&&!n.isCreator?"LeaveChannel":i&&n.isCreator?"Chat.Input.Delete":f||p?"Group.LeaveGroup":Z?"ChatList.DeleteForCurrentUser":"Delete")),a.ZP.createElement(u.Z,{className:"confirm-dialog-button",isText:!0,onClick:P},I("Cancel")))})))},2535:(e,t,n)=>{n.d(t,{Z:()=>m});var a=n(4050),r=n(3555),i=n(5376),o=n(5806),s=n(3657),l=n(2566),c=n(6202),d=n(706),u=n(7002);const m=(0,a.X$)((e=>{let{message:t,observeIntersection:n,smaller:m,canAutoLoad:h,autoLoadFileMaxSizeMb:v,uploadProgress:f,withDate:p,datetime:g,className:Z,sender:E,isSelected:P,isSelectable:y,onCancelUpload:C,onMediaClick:b,onDateClick:N,isDownloading:w}=e;const k=(0,r.Sv)(),I=(0,a.sO)(null),S=t.content.document,{fileName:T,size:M,timestamp:x}=S,L=(0,i.K2)(S)||"",$=(0,s.Op)(I,n),[O,A]=(0,d.Z)();(0,a.d4)((()=>{$&&A()}),[$,A]);const[F,D]=(0,a.eJ)(h&&(!v||M<=1048576*v)),R=Boolean(w||F&&O),U=(0,o.Ti)(t,"download"),{loadProgress:B,mediaData:X}=(0,l.Z)(U,!R,void 0,void 0,void 0,!0),Y=Boolean(X),{isUploading:z,isTransferring:V,transferProgress:j}=(0,o.Sc)(t,f||B,R&&!Y),K=(0,i.v6)(S),H=K?(0,o.DH)(t):void 0,W=K?S.previewBlobUrl:void 0,q=(0,c.Z)((0,o.Ti)(t,"pictogram"),!$),J=b&&Boolean(S.mediaType),_=(0,a.I4)((()=>{z?C&&C():w?k.cancelMessageMediaDownload({message:t}):V?D(!1):J?b():k.downloadMessageMedia({message:t})}),[z,w,V,J,C,k,t,b]),G=(0,a.I4)((()=>{N(t.id,t.chatId)}),[N,t.id,t.chatId]);return a.ZP.createElement(u.Z,{ref:I,name:T,extension:L,size:M,timestamp:p?g||x:void 0,thumbnailDataUri:H,previewData:W||q,smaller:m,isTransferring:V,isUploading:z,transferProgress:j,className:Z,sender:E,isSelectable:y,isSelected:P,actionIcon:J?(0,o.hC)(t)?"icon-play":"icon-eye":"icon-download",onClick:_,onDateClick:N?G:void 0})}))},8780:(e,t,n)=>{n.d(t,{Z:()=>o});var a=n(4050),r=n(9107),i=n(6752);const o=e=>{let{content:t,className:n}=e;const o=(0,r.Z)();return a.ZP.createElement("span",{className:(0,i.Z)("DotAnimation",n),dir:o.isRtl?"rtl":"auto"},t,a.ZP.createElement("span",{className:"ellipsis"}))}},7002:(e,t,n)=>{n.d(t,{Z:()=>v});var a=n(4050),r=n(1212),i=n(692),o=n(6752),s=n(790),l=n(5376),c=n(4399),d=n(2340),u=n(9107),m=n(9196),h=n(8033);const v=(0,a.X$)((e=>{let{ref:t,name:n,size:v,extension:f="",timestamp:p,sender:g,thumbnailDataUri:Z,previewData:E,className:P,smaller:y,isTransferring:C,isUploading:b,isSelectable:N,isSelected:w,transferProgress:k,actionIcon:I,onClick:S,onDateClick:T}=e;const M=(0,u.Z)();let x=(0,a.sO)(null);t&&(x=t);const L=(0,i.Z)(E),{shouldRender:$,transitionClassNames:O}=(0,r.Z)(C,void 0,!0),A=(0,l.Oh)(f),F=(0,l.yW)(v),{width:D,height:R}=(0,c.lE)(y),U=(0,o.Z)("File",P,y&&"smaller",S&&!b&&"interactive",w&&"file-is-selected");return a.ZP.createElement("div",{ref:x,className:U,dir:M.isRtl?"rtl":void 0},N&&a.ZP.createElement("div",{className:"message-select-control"},w&&a.ZP.createElement("i",{className:"icon-select"})),a.ZP.createElement("div",{className:"file-icon-container",onClick:b?void 0:S},Z||E?a.ZP.createElement("div",{className:"file-preview media-inner"},a.ZP.createElement("img",{src:Z,width:D,height:R,className:"thumbnail",alt:""}),a.ZP.createElement("img",{src:E,className:(0,o.Z)("full-media",L),width:D,height:R,alt:""})):a.ZP.createElement("div",{className:`file-icon ${A}`},f.length<=4&&a.ZP.createElement("span",{className:"file-ext",dir:"auto"},f)),$&&a.ZP.createElement("div",{className:(0,o.Z)("file-progress",A,O)},a.ZP.createElement(m.Z,{progress:k,size:y?"s":"m",onClick:b?S:void 0})),S&&a.ZP.createElement("i",{className:(0,o.Z)("action-icon",I||"icon-download",$&&"hidden")})),a.ZP.createElement("div",{className:"file-info"},a.ZP.createElement("div",{className:"file-title",dir:"auto"},(0,d.Z)(n)),a.ZP.createElement("div",{className:"file-subtitle",dir:"auto"},a.ZP.createElement("span",null,C&&k?`${Math.round(100*k)}%`:F),g&&a.ZP.createElement("span",{className:"file-sender"},(0,d.Z)(g)),!g&&p&&a.ZP.createElement(a.ZP.Fragment,null,a.ZP.createElement("span",{className:"bullet"}),a.ZP.createElement(h.Z,{onClick:T},(0,s.ZK)(M,1e3*p,!0))))),g&&p&&a.ZP.createElement(h.Z,{onClick:T},(0,s.VX)(M,1e3*p)))}))},8799:(e,t,n)=>{n.d(t,{Z:()=>v});var a=n(4050),r=n(3555),i=n(1713),o=n(5806),s=n(1192),l=n(2340),c=n(9107),d=n(172),u=n(9411),m=n(8729),h=n(8780);const v=(0,a.X$)((0,r.c$)(((e,t)=>{let{chatId:n}=t;const{lastSyncTime:a}=e,r=(0,s.Z1)(e,n);return{lastSyncTime:a,chat:r,onlineCount:r?(0,s.YK)(e,r):void 0,areMessagesLoaded:Boolean((0,s.Zw)(e,n))}}))((e=>{let{typingStatus:t,avatarSize:n="medium",status:s,withDots:v,withMediaViewer:f,withUsername:p,withFullInfo:g,withUpdatingStatus:Z,withChatType:E,noRtl:P,chat:y,onlineCount:C,areMessagesLoaded:b,lastSyncTime:N}=e;const{loadFullChat:w,openMediaViewer:k}=(0,r.Sv)(),I=y&&(0,o.ZV)(y),{id:S,isMin:T,isRestricted:M}=y||{};(0,a.d4)((()=>{S&&!T&&g&&N&&w({chatId:S})}),[S,T,N,g,w,I]);const x=(0,a.I4)(((e,t)=>{y&&t&&(e.stopPropagation(),k({avatarOwnerId:y.id,origin:"jumbo"===n?i.bZ.ProfileAvatar:i.bZ.MiddleHeaderAvatar}))}),[y,n,k]),L=(0,c.Z)();if(y)return a.ZP.createElement("div",{className:"ChatInfo",dir:!P&&L.isRtl?"rtl":void 0},a.ZP.createElement(d.Z,{key:y.id,size:n,chat:y,onClick:f?x:void 0}),a.ZP.createElement("div",{className:"info"},a.ZP.createElement("div",{className:"title"},a.ZP.createElement("h3",{dir:"auto"},(0,l.Z)((0,o.U)(L,y))),y.isVerified&&a.ZP.createElement(u.Z,null)),function(){if(s)return v?a.ZP.createElement(h.Z,{className:"status",content:s}):a.ZP.createElement("span",{className:"status",dir:"auto"},s);if(Z&&!b&&!M)return a.ZP.createElement(h.Z,{className:"status",content:L("Updating")});if(!y)return;if(t)return a.ZP.createElement(m.Z,{typingStatus:t});if(E)return a.ZP.createElement("span",{className:"status",dir:"auto"},L((0,o.l6)(y)));const e=p?y.username:void 0,n=function(e,t){const n=e((0,o.l6)(t)),{membersCount:a}=t;return t.isRestricted?"Channel"===n?"channel is inaccessible":"group is inaccessible":a?e("Channel"===n?"Subscribers":"Members",a,"i"):n}(L,y),r=C?`, ${L("OnlineCount",C,"i")}`:void 0;return a.ZP.createElement("span",{className:"status"},e&&a.ZP.createElement("span",{className:"handle"},e),a.ZP.createElement("span",{className:"group-status"},n),r&&a.ZP.createElement("span",{className:"online-status"},r))}()))})))},6844:(e,t,n)=>{n.d(t,{Z:()=>s});var a=n(4050),r=n(790),i=n(9107),o=n(8018);const s=(0,a.X$)((e=>{let{message:t,outgoingStatus:n}=e;const s=(0,i.Z)();return a.ZP.createElement("div",{className:"LastMessageMeta"},n&&a.ZP.createElement(o.Z,{status:n}),a.ZP.createElement("span",{className:"time"},(0,r.VX)(s,1e3*t.date)))}))},3709:(e,t,n)=>{n.d(t,{Z:()=>u});var a=n(4050),r=n(790),i=n(3227),o=n(5806),s=n(6752),l=n(6202),c=n(692),d=n(3657);const u=(0,a.X$)((e=>{let{message:t,idPrefix:n="shared-media",isProtected:u,observeIntersection:m,onClick:h}=e;const v=(0,a.sO)(null),f=(0,d.Op)(v,m),p=(0,o.DH)(t),g=(0,l.Z)((0,o.Ti)(t,"pictogram"),!f),Z=(0,c.Z)(g),E=(0,o.b7)(t),P=(0,a.I4)((()=>{h(t.id,t.chatId)}),[t.id,t.chatId,h]);return a.ZP.createElement("div",{ref:v,id:`${n}${(0,o.d0)(t.id)}`,className:"Media scroll-item",onClick:h?P:void 0},a.ZP.createElement("img",{src:p,alt:"",draggable:!u,decoding:"async",onContextMenu:u?i.Z:void 0}),a.ZP.createElement("img",{src:g,className:(0,s.Z)("full-media",Z),alt:"",draggable:!u,decoding:"async",onContextMenu:u?i.Z:void 0}),E&&a.ZP.createElement("span",{className:"video-duration"},E.isGif?"GIF":(0,r.k9)(E.duration)),u&&a.ZP.createElement("span",{className:"protector"}))}))},8018:(e,t,n)=>{n.d(t,{Z:()=>o});var a,r=n(4050),i=n(2255);!function(e){e[e.failed=0]="failed",e[e.pending=1]="pending",e[e.succeeded=2]="succeeded",e[e.read=3]="read"}(a||(a={}));const o=(0,r.X$)((e=>{let{status:t}=e;return r.ZP.createElement("div",{className:"MessageOutgoingStatus"},r.ZP.createElement(i.Z,{name:"reveal",activeKey:a[t]},r.ZP.createElement("i",{className:`icon-message-${t}`})))}))},7262:(e,t,n)=>{n.d(t,{Z:()=>c});var a=n(4050),r=n(6752),i=n(1212),o=n(2340),s=n(9107);const l="Nothing found.",c=(0,a.X$)((e=>{let{text:t=l,description:n}=e;const c=(0,s.Z)(),{transitionClassNames:d}=(0,i.Z)(!0);return a.ZP.createElement("div",{className:(0,r.Z)("NothingFound",d,n&&"with-description")},t,n&&a.ZP.createElement("p",{className:"description"},(0,o.Z)(c(n),["br"])))}))},1820:(e,t,n)=>{n.d(t,{Z:()=>f});var a=n(4050),r=n(5806),i=n(1273),o=n(4605),s=n(7687),l=n(1876),c=n(6058),d=n(8799),u=n(9187),m=n(7407),h=n(9107),v=n(4288);const f=(0,a.X$)((e=>{let{itemIds:t,selectedIds:n,filterValue:f,filterPlaceholder:p,notFoundText:g,searchInputId:Z,isLoading:E,noScrollRestore:P,onSelectedIdsChange:y,onFilterChange:C,onLoadMore:b}=e;const N=(0,a.sO)(null),w=n.length>10;(0,a.d4)((()=>{setTimeout((()=>{requestAnimationFrame((()=>{N.current.focus()}))}),500)}),[]);const k=(0,a.I4)((e=>{const t=[...n];t.includes(e)?t.splice(t.indexOf(e),1):t.push(e),y(t),C("")}),[n,y,C]),I=(0,a.I4)((e=>{const{value:t}=e.currentTarget;C(t)}),[C]),[S,T]=(0,m.Z)(b,t,Boolean(f)),M=(0,h.Z)();return a.ZP.createElement("div",{className:"Picker"},a.ZP.createElement("div",{className:"picker-header custom-scroll",dir:M.isRtl?"rtl":void 0},n.map(((e,t)=>a.ZP.createElement(u.Z,{chatOrUserId:e,isMinimized:w&&ta.ZP.createElement(l.Z,{key:e,className:"chat-item-clickable picker-list-item",onClick:()=>k(e),ripple:!0},a.ZP.createElement(o.Z,{label:"",checked:n.includes(e)}),(0,r.YC)(e)?a.ZP.createElement(c.Z,{userId:e}):a.ZP.createElement(d.Z,{chatId:e}))))):E||!S||S.length?a.ZP.createElement(v.Z,null):a.ZP.createElement("p",{className:"no-results"},g||"Sorry, nothing found."))}))},9187:(e,t,n)=>{n.d(t,{Z:()=>u});var a=n(4050),r=n(3555),i=n(1192),o=n(5806),s=n(2340),l=n(6752),c=n(9107),d=n(172);const u=(0,a.X$)((0,r.c$)(((e,t)=>{let{chatOrUserId:n}=t;return n?{chat:n?(0,i.Z1)(e,n):void 0,user:(0,o.YC)(n)?(0,i.dy)(e,n):void 0}:{}}))((e=>{let{icon:t,title:n,isMinimized:r,canClose:i,onClick:u,clickArg:m,chat:h,user:v,className:f}=e;const p=(0,c.Z)();let g,Z;if(t&&n)g=a.ZP.createElement("div",{className:"item-icon"},a.ZP.createElement("i",{className:`icon-${t}`})),Z=n;else if(h||v){g=a.ZP.createElement(d.Z,{chat:h,user:v,size:"small",isSavedMessages:null==v?void 0:v.isSelf});const e=!h||v&&!v.isSelf?(0,o.Vl)(v):(0,o.U)(p,h,v);Z=e?(0,s.Z)(e):void 0}const E=(0,l.Z)("PickerSelectedItem",f,r&&"minimized",i&&"closeable");return a.ZP.createElement("div",{className:E,onClick:()=>u(m),title:r?Z:void 0,dir:p.isRtl?"rtl":void 0},g,!r&&a.ZP.createElement("div",{className:"item-name",dir:"auto"},Z),i&&a.ZP.createElement("div",{className:"item-remove"},a.ZP.createElement("i",{className:"icon-close"})))})))},6058:(e,t,n)=>{n.d(t,{Z:()=>v});var a=n(4050),r=n(3555),i=n(1713),o=n(1192),s=n(5806),l=n(2340),c=n(9107),d=n(172),u=n(9411),m=n(8729),h=n(8780);const v=(0,a.X$)((0,r.c$)(((e,t)=>{let{userId:n,forceShowSelf:a}=t;const{lastSyncTime:r,serverTimeOffset:i}=e,s=(0,o.dy)(e,n);return{lastSyncTime:r,user:s,userStatus:(0,o.ss)(e,n),isSavedMessages:!a&&s&&s.isSelf,areMessagesLoaded:Boolean((0,o.Zw)(e,n)),serverTimeOffset:i}}))((e=>{let{typingStatus:t,avatarSize:n="medium",status:o,withDots:v,withMediaViewer:f,withUsername:p,withFullInfo:g,withUpdatingStatus:Z,noStatusOrTyping:E,noRtl:P,user:y,userStatus:C,isSavedMessages:b,areMessagesLoaded:N,lastSyncTime:w,serverTimeOffset:k}=e;const{loadFullUser:I,openMediaViewer:S}=(0,r.Sv)(),{id:T}=y||{},M=(0,s.Js)(y);(0,a.d4)((()=>{g&&w&&T&&I({userId:T})}),[T,I,w,g]);const x=(0,a.I4)(((e,t)=>{y&&t&&(e.stopPropagation(),S({avatarOwnerId:y.id,origin:"jumbo"===n?i.bZ.ProfileAvatar:i.bZ.MiddleHeaderAvatar}))}),[y,n,S]),L=(0,c.Z)();if(y)return a.ZP.createElement("div",{className:"ChatInfo",dir:!P&&L.isRtl?"rtl":void 0},a.ZP.createElement(d.Z,{key:y.id,size:n,user:y,isSavedMessages:b,onClick:f?x:void 0}),a.ZP.createElement("div",{className:"info"},b?a.ZP.createElement("div",{className:"title"},a.ZP.createElement("h3",null,L("SavedMessages"))):a.ZP.createElement("div",{className:"title"},a.ZP.createElement("h3",{dir:"auto"},M&&(0,l.Z)(M)),(null==y?void 0:y.isVerified)&&a.ZP.createElement(u.Z,null)),(o||!b&&!E)&&(o?v?a.ZP.createElement(h.Z,{className:"status",content:o}):a.ZP.createElement("span",{className:"status",dir:"auto"},o):Z&&!N?a.ZP.createElement(h.Z,{className:"status",content:L("Updating")}):y?t?a.ZP.createElement(m.Z,{typingStatus:t}):a.ZP.createElement("span",{className:"status "+((0,s.kM)(y,C)?"online":"")},p&&y.username&&a.ZP.createElement("span",{className:"handle"},y.username),a.ZP.createElement("span",{className:"user-status",dir:"auto"},(0,s.Tq)(L,y,C,k))):void 0)))})))},787:(e,t,n)=>{n.d(t,{Z:()=>y});var a=n(4050),r=n(3555),i=n(1713),o=n(7361),s=n(1192),l=n(5806),c=n(2340),d=n(1174),u=n(6752),m=n(6137),h=n(647),v=n(9107),f=n(9411),p=n(2155),g=n(6202),Z=n(9204);const E=(0,a.X$)((e=>{var t;let{chat:n,user:r,photo:i,isFirstPhoto:o,isSavedMessages:s,lastSyncTime:d,onClick:h}=e;const f=(0,v.Z)(),E=r&&(0,l.NB)(r),P=n&&(0,l.pK)(n.id);function y(e,t){if(i&&!t)return`photo${i.id}?size=c`;let a;return s||E||P||(r?a=(0,l.RT)(r,e):n&&(a=(0,l.RT)(n,e))),a}const C=(0,g.Z)(y("big"),!1,m.IU.BlobUrl,d),b=o&&!C?y("normal",!0):void 0,N=(0,g.Z)(b,!1,m.IU.BlobUrl,d),w=C||N||(null==i||null===(t=i.thumbnail)||void 0===t?void 0:t.dataUri);let k="";if(s)k=a.ZP.createElement("i",{className:"icon-avatar-saved-messages"});else if(E)k=a.ZP.createElement("i",{className:"icon-avatar-deleted-account"});else if(P)k=a.ZP.createElement("i",{className:"icon-reply-filled"});else if(w)k=a.ZP.createElement("img",{src:w,className:"avatar-media",alt:""});else if(r){const e=(0,l.Js)(r);k=e?(0,p.Xv)(e,2):void 0}else if(n){const e=(0,l.U)(f,n);k=e&&(0,p.Xv)(e,(0,l.YC)(n.id)?2:1)}else k=a.ZP.createElement("div",{className:"spinner-wrapper"},a.ZP.createElement(Z.Z,{color:"white"}));const I=(0,u.Z)("ProfilePhoto",`color-bg-${(0,l.Rs)(r||n)}`,s&&"saved-messages",E&&"deleted-account",P&&"replies-bot-account",!s&&!w&&"no-photo");return a.ZP.createElement("div",{className:I,onClick:w?h:void 0},"string"==typeof k?(0,c.Z)(k,["hq_emoji"]):k)}));var P=n(2255);const y=(0,a.X$)((0,r.c$)(((e,t)=>{let{userId:n,forceShowSelf:a}=t;const{connectionState:r,serverTimeOffset:i}=e,o=(0,s.dy)(e,n),l=(0,s.ss)(e,n),c=(0,s.Z1)(e,n),d=!a&&o&&o.isSelf,{animationLevel:u}=e.settings.byKey;return{connectionState:r,user:o,userStatus:l,chat:c,isSavedMessages:d,animationLevel:u,serverTimeOffset:i}}))((e=>{var t;let{forceShowSelf:n,user:s,userStatus:p,chat:g,isSavedMessages:Z,connectionState:y,animationLevel:C,serverTimeOffset:b}=e;const{loadFullUser:N,openMediaViewer:w}=(0,r.Sv)(),k=(0,v.Z)(),{id:I}=s||{},{id:S}=g||{},T=s?(0,l.Js)(s):g?g.title:"",M=(null==s?void 0:s.photos)||(null==g?void 0:g.photos)||[],x=C>=1?k.isRtl?"slide-optimized-rtl":"slide-optimized":"none",[L,$]=(0,a.eJ)(0),O=Z||M.length<=1||0===L,A=Z||M.length<=1||L===M.length-1;(0,a.d4)((()=>{L>M.length&&$(Math.max(0,M.length-1))}),[L,M.length]),(0,a.d4)((()=>{"connectionStateReady"===y&&I&&!n&&N({userId:I})}),[I,N,y,n]),function(e,t,n){(0,a.d4)((()=>{t.slice(n,n+4).forEach((e=>{h.UV(`photo${e.id}?size=c`)||h.he(`photo${e.id}?size=c`,m.IU.BlobUrl)}))}),[n,t])}(0,M,L);const F=(0,a.I4)((()=>{w({avatarOwnerId:I||S,profilePhotoIndex:L,origin:n?i.bZ.SettingsAvatar:i.bZ.ProfileAvatar})}),[w,I,S,L,n]),D=(0,a.I4)((()=>{O||$(L-1)}),[L,O]),R=(0,a.I4)((()=>{A||$(L+1)}),[L,A]);if((0,a.d4)((()=>{const e=document.querySelector(".photo-wrapper");if(e)return(0,d.sf)(e,{selectorToPreventScroll:".Profile, .settings-content",onSwipe:o.$b?(e,t)=>t===d.eM.Right?(D(),!0):t===d.eM.Left&&(R(),!0):void 0})}),[R,D]),!s&&!g)return;const U=null===(t=s||g)||void 0===t?void 0:t.isVerified;return a.ZP.createElement("div",{className:(0,u.Z)("ProfileInfo",n&&"self"),dir:k.isRtl?"rtl":void 0},a.ZP.createElement("div",{className:"photo-wrapper"},function(){if(!(Z||!M||M.length<=1))return a.ZP.createElement("div",{className:"photo-dashes"},M.map(((e,t)=>a.ZP.createElement("span",{className:"photo-dash "+(t===L?"current":"")}))))}(),a.ZP.createElement(P.Z,{activeKey:L,name:x,className:"profile-slide-container"},function(){const e=!Z&&M&&M.length>0?M[L]:void 0;return a.ZP.createElement(E,{key:L,user:s,chat:g,photo:e,isSavedMessages:Z,isFirstPhoto:O,onClick:F})}()),!O&&a.ZP.createElement("button",{type:"button",className:"navigation prev","aria-label":k("AccDescrPrevious"),onClick:D}),!A&&a.ZP.createElement("button",{type:"button",className:"navigation next","aria-label":k("Next"),onClick:R})),a.ZP.createElement("div",{className:"info",dir:k.isRtl?"rtl":"auto"},Z?a.ZP.createElement("div",{className:"title"},a.ZP.createElement("h3",{dir:"auto"},k("SavedMessages"))):a.ZP.createElement("div",{className:"title"},a.ZP.createElement("h3",{dir:"auto"},T&&(0,c.Z)(T)),U&&a.ZP.createElement(f.Z,null)),!Z&&(s?a.ZP.createElement("div",{className:"status "+((0,l.kM)(s,p)?"online":"")},a.ZP.createElement("span",{className:"user-status",dir:"auto"},(0,l.Tq)(k,s,p,b))):a.ZP.createElement("span",{className:"status",dir:"auto"},(0,l.eA)(g)?k("Subscribers",null!==(B=g.membersCount)&&void 0!==B?B:0,"i"):k("Members",null!==(X=g.membersCount)&&void 0!==X?X:0,"i")))));var B,X})))},8198:(e,t,n)=>{n.d(t,{Z:()=>l});var a=n(4050),r=n(3555),i=n(6137),o=n(6202),s=n(6752);const l=(0,a.X$)((e=>{var t,n,l;let{reaction:c,ref:d,className:u}=e;const m=null===(t=(0,r.Rd)().availableReactions)||void 0===t||null===(n=t.find((e=>e.reaction===c)))||void 0===n||null===(l=n.staticIcon)||void 0===l?void 0:l.id,h=(0,o.Z)(`document${m}`,!m,i.IU.BlobUrl);return a.ZP.createElement("img",{className:(0,s.Z)("ReactionStaticEmoji",u),ref:d,src:h,alt:""})}))},3547:(e,t,n)=>{n.d(t,{Z:()=>P});var a=n(4050),r=n(6137),i=n(6752),o=n(386),s=n(4753),l=n(7361),c=n(3657),d=n(6202),u=n(1212),m=n(706),h=n(9107),v=n(7240),f=n(3394),p=n(7799),g=n(231),Z=n(2328),E=n(8964);const P=(0,a.X$)((e=>{let{sticker:t,size:n,noAnimate:P,title:y,className:C,clickArg:b,noContextMenu:N,isSavedMessages:w,observeIntersection:k,onClick:I,onFaveClick:S,onUnfaveClick:T}=e;const M=(0,a.sO)(null),x=(0,h.Z)(),L=`sticker${t.id}`,$=`sticker-button-${t.id}`,O=(0,c.Op)(M,k),A=t.thumbnail?t.thumbnail.dataUri:void 0,F=(0,d.Z)(`${L}?size=m`,!O,r.IU.BlobUrl),D=O&&!P,R=(0,d.Z)(t.isLottie&&L,!D,r.IU.Lottie),[U,B,X]=(0,m.Z)(Boolean(R)),Y=U&&D,z=t.isVideo&&l.Hh,V=(0,d.Z)(z&&L,!D,r.IU.BlobUrl),j=Boolean(z&&V&&D),{transitionClassNames:K}=(0,u.Z)(Boolean(F||Y),void 0,void 0,"slow"),{isContextMenuOpen:H,contextMenuPosition:W,handleBeforeContextMenu:q,handleContextMenu:J,handleContextMenuClose:_,handleContextMenuHide:G}=(0,v.Z)(M),Q=(0,a.I4)((()=>M.current),[]),ee=(0,a.I4)((()=>M.current.closest(".custom-scroll, .no-scrollbar")),[]),te=(0,a.I4)((()=>M.current.querySelector(".sticker-context-menu .bubble")),[]),{positionX:ne,positionY:ae,transformOriginX:re,transformOriginY:ie,style:oe}=(0,f.Z)(W,Q,ee,te);(0,a.d4)((()=>{D||X()}),[X,D]),(0,a.d4)((()=>{if(!z||!M.current)return;const e=M.current.querySelector("video");e&&(j?(0,s.Z)(e):e.pause())}),[z,j]),(0,a.d4)((()=>{O||_()}),[_,O]);const se=(0,a.I4)((e=>{e.stopPropagation(),e.preventDefault(),T(t)}),[T,t]),le=(0,a.I4)((()=>{T(t)}),[T,t]),ce=(0,a.I4)((()=>{S(t)}),[S,t]),de=(0,a.I4)((()=>{null==I||I(b,!0)}),[b,I]),ue=(0,a.I4)((()=>{null==I||I(b,void 0,!0)}),[b,I]),me=(0,i.Z)("StickerButton",I&&"interactive",$,C),he=!A||Y||j?"":`background-image: url('${A}');`;return a.ZP.createElement("div",{ref:M,className:me,title:y||(null==t?void 0:t.emoji),style:he,"data-sticker-id":t.id,onMouseDown:e=>{(0,o.b)(e),q(e)},onClick:()=>{H||null==I||I(b)},onContextMenu:J},!Y&&!j&&a.ZP.createElement("img",{src:F,className:K}),z&&a.ZP.createElement("video",{className:K,src:V,autoPlay:j,loop:!0,playsInline:!0,muted:!0}),D&&R&&a.ZP.createElement(p.Z,{id:L,animationData:R,play:!0,size:n,isLowPriority:!0,onLoad:B}),!l.$b&&T&&a.ZP.createElement(g.Z,{className:"sticker-unfave-button",color:"dark",round:!0,onClick:se},a.ZP.createElement("i",{className:"icon-close"})),!N&&I&&void 0!==W&&a.ZP.createElement(Z.Z,{isOpen:H,transformOriginX:re,transformOriginY:ie,positionX:ne,positionY:ae,style:oe,className:"sticker-context-menu",autoClose:!0,onClose:_,onCloseAnimationEnd:G},T&&a.ZP.createElement(E.Z,{icon:"favorite",onClick:le},x("Stickers.RemoveFromFavorites")),S&&a.ZP.createElement(E.Z,{icon:"favorite",onClick:ce},x("AddToFavorites")),!w&&a.ZP.createElement(E.Z,{onClick:de,icon:"muted"},x("SendWithoutSound")),a.ZP.createElement(E.Z,{onClick:ue,icon:"calendar"},x(w?"SetReminder":"ScheduleMessage"))))}))},4851:(e,t,n)=>{n.d(t,{Z:()=>o});var a=n(4050),r=n(9203),i=n(8778);const o=(0,a.X$)((e=>{const{isOpen:t}=e,n=(0,i.Z)(r.gl.Extra,"StickerSetModal",!t);return n?a.ZP.createElement(n,e):void 0}))},8729:(e,t,n)=>{n.d(t,{Z:()=>d});var a=n(4050),r=n(3555),i=n(1192),o=n(5806),s=n(2340),l=n(9107),c=n(8780);const d=(0,a.X$)((0,r.c$)(((e,t)=>{let{typingStatus:n}=t;return n.userId?{typingUser:(0,i.dy)(e,n.userId)}:{}}))((e=>{let{typingStatus:t,typingUser:n}=e;const r=(0,l.Z)(),i=n&&!n.isSelf&&(0,o.Vl)(n),d=r(t.action).replace("{user}","").replace("{emoji}",t.emoji).trim();return a.ZP.createElement("p",{className:"typing-status",dir:r.isRtl?"rtl":"auto"},i&&a.ZP.createElement("span",{className:"sender-name",dir:"auto"},(0,s.Z)(i)),a.ZP.createElement(c.Z,{content:d}))})))},9411:(e,t,n)=>{n.d(t,{Z:()=>i});var a=n(4050);const r={__html:''},i=()=>a.ZP.createElement("span",{className:"VerifiedIcon",dangerouslySetInnerHTML:r})},5418:(e,t,n)=>{n.d(t,{Z:()=>v});var a=n(4050),r=n(5806),i=n(6752),o=n(8035),s=n(2340),l=n(790),c=n(9107),d=n(996),u=n(3709),m=n(8033),h=n(88);const v=(0,a.X$)((e=>{let{message:t,senderTitle:n,isProtected:v,observeIntersection:f,onMessageClick:p}=e;const g=(0,c.Z)();let Z=(0,r.s1)(t);if(!Z){const e=(0,r.T7)(t);if(e){const{url:n,domain:a}=e;Z={siteName:a.replace(/^www./,""),url:n.includes("://")?n:n.includes("@")?`mailto:${n}`:`http://${n}`,formattedDescription:(0,r.UD)(t)!==n?(0,d.e)(g,t,void 0,void 0,170):void 0}}}const E=(0,a.I4)((()=>{p(t.id,t.chatId)}),[p,t.id,t.chatId]);if(!Z)return;const{siteName:P,url:y,displayUrl:C,title:b,description:N,formattedDescription:w,photo:k,video:I}=Z,S=!n&&N&&(0,o.Z)(N,170),T=(0,i.Z)("WebLink scroll-item",!k&&!I&&"without-media");return a.ZP.createElement("div",{className:T,"data-initial":(P||C)[0],dir:g.isRtl?"rtl":void 0},k&&a.ZP.createElement(u.Z,{message:t,isProtected:v,observeIntersection:f}),a.ZP.createElement("div",{className:"content"},a.ZP.createElement(m.Z,{isRtl:g.isRtl,className:"site-title",onClick:E},(0,s.Z)(b||P||C)),(S||w)&&a.ZP.createElement(m.Z,{isRtl:g.isRtl,className:"site-description",onClick:E},w||S&&(0,s.Z)(S)),a.ZP.createElement(h.Z,{url:y,className:"site-name",text:"",isRtl:g.isRtl},y.replace("mailto:","")||C),n&&a.ZP.createElement("div",{className:"sender-name"},(0,s.Z)(n))),n&&a.ZP.createElement("div",{className:"message-date"},a.ZP.createElement(m.Z,{className:"date",onClick:E,isRtl:g.isRtl},(0,l.VX)(g,1e3*t.date))))}))},4399:(e,t,n)=>{n.d(t,{Eh:()=>E,GC:()=>P,Gw:()=>l,L6:()=>s,PA:()=>N,Rj:()=>c,W7:()=>y,Wr:()=>b,fM:()=>Z,jg:()=>w,kc:()=>p,lE:()=>C,vY:()=>d,wB:()=>u});var a=n(3716),r=n(7361),i=n(3858),o=n(5806);const s="(max-height: 640px)",l=parseInt(getComputedStyle(document.documentElement).fontSize,10),c=240,d={width:640,height:640},u="4986041492570112461",m={width:100,height:100};let h,v,f;function p(e,t,n,a){const o=t||n?1.625:0,s=function(e,t){const n=e?30:29;if(!r.wB)return n;const{width:a}=i.Z.get();return h||(h=Math.min(30,a/l-4.5)),v||(v=Math.min(29,a/l-7)),f||(f=Math.min(29,a/l-4.5)),e?h:t?f:v}(e,a)-o;return s*l}function g(e){let{width:t,height:n,fromOwnMessage:a,isForwarded:r,isWebPagePhoto:i,isGif:o,noAvatars:s}=e;const c=n/t,d=p(a,r,i,s),u=function(e,t){return e&&t&&t>=.75&&t<=1.25?20*l:27*l}(o,c),m=o?Math.max(300,t):t;return w(d,u,m,o?n*(m/t):n)}function Z(e,t){const n=window.matchMedia(s),{width:a,height:o}=i.Z.get();let c=t&&n.matches?10:8.25;return e&&!r.$b&&(c=n.matches?10:12.5),{width:a,height:o-c*l}}function E(e,t,n,a,r){const{width:i,height:s}=(0,o.HV)(e)||m;return g({width:i,height:s,fromOwnMessage:t,isForwarded:n,isWebPagePhoto:a,noAvatars:r})}function P(e,t,n,a){const{width:r,height:i}=(0,o.jC)(e)||m;return g({width:r,height:i,fromOwnMessage:t,isForwarded:n,isGif:e.isGif,noAvatars:a})}function y(){return{width:2*l,height:2*l}}function C(e){return e?{width:3*l,height:3*l}:{width:3.375*l,height:3.375*l}}function b(e){const{width:t}=e;let{height:n}=e;e.id===u&&(n=t);const i=n&&t&&n/t,o=l*(r.wB?a.w7:a.K7),s=i?o*i:o;return i&&s>o?{width:Math.round(o/i),height:o}:{width:o,height:s}}function N(e,t){let{width:n,height:a}=e,r=arguments.length>2&&void 0!==arguments[2]&&arguments[2];const{width:i,height:o}=Z(t,r);return w(i,o,n,a)}function w(e,t,n,a){const r=a/n,i=Math.min(n,e);return Math.round(i*r)>t?{width:Math.round(t/r),height:t}:{width:i,height:Math.round(i*r)}}},5296:(e,t,n)=>{n.d(t,{Z:()=>d});var a=n(4050),r=n(4753),i=n(3555),o=n(6202),s=n(706),l=n(1192);const c={large:160,medium:128,small:104};function d(e,t,n,d,u,m,h,v){const{interactWithAnimatedEmoji:f,sendEmojiInteraction:p,sendWatchingEmojiInteraction:g}=(0,i.Sv)(),Z=h||v,[E,P]=(0,s.Z)(),y=(0,a.sO)(null),C=(0,a.sO)(null),b=(0,o.Z)(d?`document${d}`:void 0,!d),N=c[e],w=`width: ${N}px; height: ${N}px;`,[k,I]=(0,a.eJ)(String(Math.random())),S=(0,a.sO)(void 0),T=(0,a.sO)(void 0),M=(0,a.I4)((()=>{y.current&&(p({chatId:t,messageId:n,localEffect:h,emoji:v,interactions:S.current}),T.current=void 0,S.current=void 0)}),[p,t,n,h,v]),x=(0,a.I4)((()=>{I(String(Math.random()));const e=C.current;b&&(e&&(e.pause(),e.remove()),C.current=new Audio,C.current.src=b,(0,r.Z)(C.current),C.current.addEventListener("ended",(()=>{C.current=void 0}),{once:!0}))}),[b]),L=(0,a.I4)((()=>{x();const e=y.current;if(!(Z&&e&&n&&t))return;const{x:a,y:r}=e.getBoundingClientRect();f({localEffect:h,emoji:v,x:a,y:r,startSize:N,isReversed:!m}),S.current||(S.current=[],T.current=performance.now(),setTimeout(M,1e3)),S.current.push(T.current?(performance.now()-T.current)/1e3:0)}),[t,v,Z,f,m,h,n,x,M,N]);return(0,a.d4)((()=>{const e=y.current;e&&u&&u.forEach((a=>{let{id:r,startSize:i,messageId:o}=a;if(i||n!==o)return;const{x:s,y:c}=e.getBoundingClientRect();g({id:r,chatId:t,emoticon:h?(0,l.ji)(h):v,startSize:N,x:s,y:c,isReversed:!m}),x()}))}),[u,t,v,m,h,n,x,g,N]),{playKey:k,ref:y,style:w,width:N,handleClick:L,markAnimationLoaded:P,isAnimationLoaded:E}}},742:(e,t,n)=>{n.d(t,{Z:()=>o});var a=n(4050),r=n(9203),i=n(8778);const o=(0,a.X$)((e=>{const{isOpen:t}=e,n=(0,i.Z)(r.gl.Extra,"ChatFolderModal",!t);return n?a.ZP.createElement(n,e):void 0}))},1080:(e,t,n)=>{n.d(t,{Z:()=>V});var a=n(4050),r=n(3555),i=n(3716),o=n(7361),s=n(782),l=n(6974),c=n(7204),d=n(7407),u=n(1334);let m;!function(e){e[e.Move=0]="Move",e[e.Opacity=1]="Opacity",e[e.None=2]="None"}(m||(m={}));var h=n(1273),v=n(4288),f=n(9107),p=n(6137),g=n(5806),Z=n(1192),E=n(8005),P=n(2340),y=n(9118),C=n(6752),b=n(5790),N=n(1470),w=n(706),k=n(6202),I=n(996),S=n(172),T=n(9411),M=n(8729),x=n(6844),L=n(329),$=n(1876),O=n(2155),A=n(126);const F=(0,a.X$)((e=>{let{chat:t,isPinned:n,isMuted:r}=e;const i=Boolean(t.unreadCount||t.hasUnreadMark||n),o=(0,C.Z)("Badge",r&&"muted",n&&"pinned",Boolean(t.unreadCount||t.hasUnreadMark)&&"unread");return a.ZP.createElement(A.Z,{isCustom:!0,className:"Badge-transition",isOpen:i},t.unreadCount?t.unreadMentionsCount?a.ZP.createElement("div",{className:"Badge-wrapper"},a.ZP.createElement("div",{className:"Badge mention"},a.ZP.createElement("i",{className:"icon-mention"})),a.ZP.createElement("div",{className:o},(0,O.bi)(t.unreadCount))):a.ZP.createElement("div",{className:o},(0,O.bi)(t.unreadCount)):t.hasUnreadMark?a.ZP.createElement("div",{className:o}):n?a.ZP.createElement("div",{className:o},a.ZP.createElement("i",{className:"icon-pinned-chat"})):void 0)}));var D=n(742);const R=(0,a.X$)((e=>{let{isSelected:t,isActive:n}=e;return a.ZP.createElement("div",{className:(0,C.Z)("ChatCallStatus",n&&"active",t&&!o.wB&&"selected")},a.ZP.createElement("div",{className:"indicator"},a.ZP.createElement("div",null),a.ZP.createElement("div",null),a.ZP.createElement("div",null)))})),U=(0,a.X$)((0,r.c$)(((e,t)=>{var n;let{chatId:a}=t;const r=(0,Z.Z1)(e,a);if(!r||!r.lastMessage)return{};const{senderId:i,replyToMessageId:o,isOutgoing:s}=r.lastMessage,l=i?(0,Z.dy)(e,i):void 0,c=(0,g.N5)(r.lastMessage),d=c&&o?(0,Z.hj)(e,r.id,o):void 0,{targetUserIds:u,targetChatId:m}=c||{},h=(0,g.zX)(r),{chatId:v,threadId:f,type:E}=(0,Z.Bt)(e)||{},P=a===v&&f===p._f;return{chat:r,isMuted:(0,g.i4)(r,(0,Z.dZ)(e),(0,Z.NJ)(e)),lastMessageSender:l,actionTargetUserIds:u,actionTargetChatId:m,actionTargetMessage:d,draft:(0,Z.Ms)(e,a,p._f),animationLevel:e.settings.byKey.animationLevel,isSelected:P,canScrollDown:P&&"thread"===E,canChangeFolder:Boolean(null===(n=e.chatFolders.orderedIds)||void 0===n?void 0:n.length),lastSyncTime:e.lastSyncTime,...s&&{lastMessageOutgoingStatus:(0,Z.dT)(e,r.lastMessage)},...h&&{user:(0,Z.dy)(e,h),userStatus:(0,Z.ss)(e,h)}}}))((e=>{let{style:t,chatId:n,folderId:s,orderDiff:l,animationType:c,isPinned:d,chat:u,isMuted:h,user:v,userStatus:p,actionTargetUserIds:Z,lastMessageSender:O,lastMessageOutgoingStatus:A,actionTargetMessage:U,actionTargetChatId:B,draft:X,animationLevel:Y,isSelected:z,canScrollDown:V,canChangeFolder:j,lastSyncTime:K}=e;const{openChat:H,focusLastMessage:W}=(0,r.Sv)(),q=(0,a.sO)(null),[J,_,G]=(0,w.Z)(),[Q,ee,te]=(0,w.Z)(),[ne,ae,re]=(0,w.Z)(),[ie,oe,se]=(0,w.Z)(),{lastMessage:le,typingStatus:ce}=u||{},de=le&&(0,g.Lo)(le);(0,b.Z)(n,de?le.replyToMessageId:void 0,U);const ue=le&&!(0,g.bf)(le)?(0,g.DH)(le):void 0,me=(0,k.Z)(le?(0,g.Ti)(le,"micro"):void 0),he=Boolean(le&&(0,g.Y5)(le)),ve=(0,a.Ye)((()=>{if(!Z)return;const e=(0,r.Rd)().users.byId;return Z.map((t=>e[t])).filter(Boolean)}),[Z]);(0,a.bt)((()=>{const e=q.current;if(0!==Y&&e){if(c===m.Opacity)e.style.opacity="0",(0,y.T2)((()=>{e.classList.add("animate-opacity"),e.style.opacity="1"}));else{if(c!==m.Move)return;e.style.transform=`translate3d(0, ${100*-l}%, 0)`,(0,y.T2)((()=>{e.classList.add("animate-transform"),e.style.transform=""}))}setTimeout((()=>{(0,y.T2)((()=>{e.classList.remove("animate-opacity","animate-transform"),e.style.opacity="",e.style.transform=""}))}),200+i.fK)}}),[Y,l,c]);const fe=(0,a.I4)((()=>{H({id:n,shouldReplaceHistory:!0}),z&&V&&W()}),[z,V,H,n,W]),pe=(0,N.Z)({chat:u,user:v,handleDelete:function(){ae(),_()},handleChatFolderChange:function(){oe(),ee()},folderId:s,isPinned:d,isMuted:h,canChangeFolder:j}),ge=(0,f.Z)();if(!u)return;const Ze=(0,C.Z)("Chat chat-item-clickable",(0,g.YC)(n)?"private":"group",z&&"selected");return a.ZP.createElement($.Z,{ref:q,className:Ze,style:t,ripple:!o.wB,contextActions:pe,onClick:fe},a.ZP.createElement("div",{className:"status"},a.ZP.createElement(S.Z,{chat:u,user:v,userStatus:p,isSavedMessages:null==v?void 0:v.isSelf,lastSyncTime:K}),u.isCallActive&&u.isCallNotEmpty&&a.ZP.createElement(R,{isSelected:z,isActive:0!==Y})),a.ZP.createElement("div",{className:"info"},a.ZP.createElement("div",{className:"title"},a.ZP.createElement("h3",null,(0,P.Z)((0,g.U)(ge,u,v))),u.isVerified&&a.ZP.createElement(T.Z,null),h&&a.ZP.createElement("i",{className:"icon-muted"}),u.lastMessage&&a.ZP.createElement(x.Z,{message:u.lastMessage,outgoingStatus:A})),a.ZP.createElement("div",{className:"subtitle"},function(){if(ce&&le&&ce.timestamp>1e3*le.date)return a.ZP.createElement(M.Z,{typingStatus:ce});if(null!=X&&X.text.length)return a.ZP.createElement("p",{className:"last-message",dir:ge.isRtl?"auto":"ltr"},a.ZP.createElement("span",{className:"draft"},ge("Draft")),(0,P.Z)(X.text));if(!le)return;if(de){const e=u&&((0,g.eA)(u)||le.senderId===le.chatId);return a.ZP.createElement("p",{className:"last-message",dir:ge.isRtl?"auto":"ltr"},(0,E.D)(ge,le,e?void 0:O,e?u:void 0,ve,U,B,{asTextWithSpoilers:!0}))}const e=(0,g.zF)(ge,n,O);return a.ZP.createElement("p",{className:"last-message",dir:ge.isRtl?"auto":"ltr"},e&&a.ZP.createElement(a.ZP.Fragment,null,a.ZP.createElement("span",{className:"sender-name"},(0,P.Z)(e)),a.ZP.createElement("span",{className:"colon"},":")),function(e,t,n,r){return n?a.ZP.createElement("span",{className:"media-preview"},a.ZP.createElement("img",{src:n,alt:"",className:r?"round":void 0}),(0,g.b7)(t)&&a.ZP.createElement("i",{className:"icon-play"}),(0,I.e)(e,t,!0)):(0,I.e)(e,t)}(ge,le,me||ue,he))}(),a.ZP.createElement(F,{chat:u,isPinned:d,isMuted:h}))),ne&&a.ZP.createElement(L.Z,{isOpen:J,onClose:G,onCloseAnimationEnd:re,chat:u}),ie&&a.ZP.createElement(D.Z,{isOpen:Q,onClose:te,onCloseAnimationEnd:se,chatId:n}))})));var B=n(1713),X=n(231),Y=n(7854);const z=(0,a.X$)((0,r.c$)(((e,t)=>{let{folderId:n,folderType:a}=t;return{chatFolder:n&&"folder"===a?(0,Z.Mw)(e,n):void 0,animatedEmoji:(0,Z.zB)(e,"📂")}}))((e=>{let{chatFolder:t,animatedEmoji:n,foldersDispatch:r,onScreenSelect:i}=e;const s=(0,f.Z)(),l=(0,a.I4)((()=>{r({type:"editFolder",payload:t}),i(B.MT.FoldersEditFolderFromChatList)}),[t,r,i]);return a.ZP.createElement("div",{className:"EmptyFolder"},a.ZP.createElement("div",{className:"sticker"},n&&a.ZP.createElement(Y.Z,{sticker:n})),a.ZP.createElement("h3",{className:"title",dir:"auto"},s("FilterNoChatsToDisplay")),a.ZP.createElement("p",{className:"description",dir:"auto"},s(t?"ChatList.EmptyChatListFilterText":"Chat.EmptyChat")),t&&r&&i&&a.ZP.createElement(X.Z,{ripple:!o.wB,fluid:!0,pill:!0,onClick:l,size:"smaller",isRtl:s.isRtl},a.ZP.createElement("i",{className:"icon-settings"}),s("ChatList.EmptyChatListEditFilter")))}))),V=(0,a.X$)((e=>{let{folderType:t,folderId:n,isActive:f,foldersDispatch:p,onScreenSelect:g}=e;const{openChat:Z,openNextChat:E}=(0,r.Sv)(),P="all"===t?i.Nf:"archived"===t?i.WS:n,y=(0,u.d7)(P),C=(0,a.Ye)((()=>{if(y)return y.reduce(((e,t,n)=>(e[t]=n,e)),{})}),[y]),b=(0,c.Z)(C),N=(0,a.Ye)((()=>C&&b?(0,s.Q8)(C,((e,t)=>void 0!==b[t]?e-b[t]:-1/0)):{}),[C,b]),[w,k]=(0,d.Z)(void 0,y,void 0,i.t_);(0,a.d4)((()=>{if(f&&y)return document.addEventListener("keydown",e),()=>{document.removeEventListener("keydown",e)};function e(e){if(o.fl&&(o.jm&&e.metaKey||!o.jm&&e.ctrlKey)&&e.code.startsWith("Digit")){const[,t]=e.code.match(/Digit(\d)/)||[];if(!t)return;const n=Number(t)-1;if(n>y.length-1)return;Z({id:y[n],shouldReplaceHistory:!0})}if(e.altKey){const t="ArrowDown"===e.key?1:"ArrowUp"===e.key?-1:void 0;if(!t)return;e.preventDefault(),E({targetIndexDelta:t,orderedIds:y})}}}),[f,Z,E,y]);const I=function(e){return(0,a.Ye)((()=>{const t=Object.values(e),n=t.filter((e=>e<0)).length,a=t.filter((e=>e>0)).length;return t=>{const r=e[t];return 0===r?m.None:r===1/0||r===-1/0||n<=a&&r<0||a0?m.Opacity:m.Move}}),[e])}(N);return a.ZP.createElement(h.Z,{className:"chat-list custom-scroll",items:w,preloadBackwards:i.t_,withAbsolutePositioning:!0,maxHeight:((null==y?void 0:y.length)||0)*i.rS,onLoadMore:k},null!=w&&w.length?function(){const e=y.indexOf(w[0]),t=(0,l.aE)(P)||0;return w.map(((r,o)=>a.ZP.createElement(U,{key:r,teactOrderKey:o,chatId:r,isPinned:e+o{n.d(t,{F:()=>r});var a=n(5806);function r(e,t,n,r){const{senderId:i}=t;if(!i)return;const o=(0,a.YC)(i)?r[i]:n[i];let s=(0,a.OU)(e,o);const l=n[t.chatId];return l&&((0,a.YC)(i)&&o.isSelf?s=`${e("FromYou")} → ${(0,a.U)(e,l)}`:(0,a.Bf)(l)&&(s+=` → ${(0,a.U)(e,l)}`)),s}},7146:(e,t,n)=>{n.d(t,{Z:()=>o});var a=n(4050),r=n(9203),i=n(8778);const o=(0,a.X$)((e=>{const{isOpen:t}=e,n=(0,i.Z)(r.gl.Extra,"CustomSendMenu",!t);return n?a.ZP.createElement(n,e):void 0}))},2420:(e,t,n)=>{n.d(t,{t:()=>m,Z:()=>h});var a=n(4050),r=n(1212),i=n(6752),o=n(1262),s=n(3989),l=n(7204),c=n(2898),d=n(706);const u=(0,a.X$)((e=>{let{isQuick:t,onFileSelect:n}=e;const[r,o,s]=(0,d.Z)(),l=(0,i.Z)("DropTarget",r&&"hovered");return a.ZP.createElement("div",{className:l,onDrop:n,onDragEnter:()=>{o()},onDragLeave:e=>{const{relatedTarget:t}=e;t&&e.stopPropagation(),s()}},a.ZP.createElement("div",{className:"target-content"},a.ZP.createElement("div",{className:"icon icon-"+(t?"photo":"document")}),a.ZP.createElement("div",{className:"title"},"Drop files here to send them"),a.ZP.createElement("div",{className:"description"},t?"in a quick way":"without compression")))}));let m;!function(e){e.None="none",e.Document="document",e.QuickFile="quick_file"}(m||(m={}));const h=(0,a.X$)((e=>{let{isOpen:t,withQuick:n,onHide:d,onFileSelect:m}=e;const h=(0,a.sO)(null),v=(0,l.Z)(n),{shouldRender:f,transitionClassNames:p}=(0,r.Z)(t);(0,a.d4)((()=>t?(0,s.Z)(d):void 0),[t,d]);const g=(0,a.I4)((async e=>{const{dataTransfer:t}=e;let n=[];if(!(t.files&&t.files.length>0)||t.items&&t.items.length){if(t.items&&t.items.length>0){const e=await(0,o.Z)(t.items);e.length&&(n=n.concat(e))}}else n=n.concat(Array.from(t.files));d(),m(n,!1)}),[m,d]),Z=(0,a.I4)((e=>{const{dataTransfer:t}=e;t.files&&t.files.length>0&&(d(),m(Array.from(t.files),!0))}),[m,d]),E=(0,a.I4)((e=>{e.stopPropagation();const{target:t,relatedTarget:n}=e;t.matches(".DropTarget, .DropArea")&&!n&&(h.current=window.setTimeout((()=>{d()}),150))}),[d]);if(!f)return;const P=(0,i.Z)("DropArea",p);return a.ZP.createElement(c.Z,{containerId:"#middle-column-portals"},a.ZP.createElement("div",{className:P,onDragLeave:E,onDragOver:()=>{h.current&&window.clearTimeout(h.current)},onDrop:d},a.ZP.createElement(u,{onFileSelect:g}),(n||v)&&a.ZP.createElement(u,{onFileSelect:Z,isQuick:!0})))}))},9830:(e,t,n)=>{n.d(t,{Z:()=>o});var a=n(4050),r=n(9203),i=n(8778);const o=(0,a.X$)((e=>{const{isOpen:t}=e,n=(0,i.Z)(r.gl.Extra,"EmojiTooltip",!t);return n?a.ZP.createElement(n,e):void 0}))},3616:(e,t,n)=>{n.d(t,{Z:()=>C});var a=n(4050),r=n(3555),i=n(3716),o=n(1192),s=n(9118),l=n(5723),c=n(6752),d=n(7361),u=n(517),m=n(2645),h=n(706),v=n(8674),f=n(6389),p=n(9107),g=n(4784),Z=n(6391),E=n(2340),P=n(3283);const y=d.wB?256:416,C=(0,a.X$)((0,r.c$)(((e,t)=>{let{chatId:n,threadId:a}=t;const{messageSendKeyCombo:r}=e.settings.byKey;return{messageSendKeyCombo:r,replyingToId:n&&a?(0,o.Yy)(e,n,a):void 0,noTabCapture:e.isPollModalOpen||e.payment.isPaymentModalOpen}}))((e=>{let{id:t,chatId:n,threadId:o,isAttachmentModalInput:C,editableInputId:b,html:N,placeholder:w,forcedPlaceholder:k,canAutoFocus:I,shouldSuppressFocus:S,shouldSuppressTextFormatter:T,replyingToId:M,noTabCapture:x,messageSendKeyCombo:L,onUpdate:$,onSuppressedFocus:O,onSend:A}=e;const{editLastMessage:F,replyToNextMessage:D}=(0,r.Sv)(),R=(0,a.sO)(null),U=(0,a.sO)(null),B=(0,p.Z)(),X=(0,a.sO)(!1),[Y,z,V]=(0,h.Z)(),[j,K]=(0,a.eJ)(),[H,W]=(0,a.eJ)(),q=(0,f.Z)(n,o);(0,a.d4)((()=>{C&&ee(!1)}),[C]),(0,m.Z)((e=>{let[t]=e;N!==R.current.innerHTML&&(R.current.innerHTML=N),N!==U.current.innerHTML&&(U.current.innerHTML=N),void 0!==t&&t!==N&&ee(!N.length)}),[N]),(0,a.sO)(n).current=n;const J=(0,a.I4)((()=>{R.current&&((0,v.zG)()?setTimeout(J,350):(0,l.Z)(R.current))}),[]),_=(0,a.I4)((()=>{V(),function(){const e=window.getSelection();e&&(e.removeAllRanges?e.removeAllRanges():e.empty&&e.empty())}()}),[V]);function G(){if(d.cj)return!1;const e=window.getSelection();if(!e||!e.rangeCount||X.current)return V(),!1;const t=e.getRangeAt(0),n=t.toString().trim();return!(T||!(0,Z.R)(t,b||i.R2)||!n||(0,g.Z)(n)||!t.START_TO_END)||(V(),!1)}function Q(){if(!G())return;const e=window.getSelection().getRangeAt(0),t=e.getBoundingClientRect(),n=R.current.getBoundingClientRect();let a=t.left+t.width/2-n.left;a<90?a=90:a>n.width-90&&(a=n.width-90),K({x:a,y:t.top-n.top}),W(e),z()}function ee(){let e=arguments.length>0&&void 0!==arguments[0]&&arguments[0];const t=R.current,n=U.current,a=Number(t.style.height.replace("px","")),r=Math.min(n.scrollHeight,y);if(r===a)return;const i=Math.round(50*Math.log(Math.abs(r-a))),o=()=>{t.style.height=`${r}px`,t.style.transitionDuration=`${i}ms`,t.classList.toggle("overflown",n.scrollHeight>y)};e?requestAnimationFrame(o):o()}(0,a.d4)((()=>{d.$b||I&&J()}),[n,J,M,I]),(0,a.d4)((()=>{if(x)return;const e=(0,s.Ds)((e=>{"Tab"===e.key&&(e.preventDefault(),requestAnimationFrame(J))}),2e3,!0,!1);return(0,u.Z)({onTab:e})}),[J,x]),(0,a.d4)((()=>{const e=R.current;function t(){e.blur()}return S&&e.addEventListener("focus",t),()=>{e.removeEventListener("focus",t)}}),[S]);const te=(0,c.Z)("form-control custom-scroll",N.length>0&&"touched",S&&"focus-disabled");return a.ZP.createElement("div",{id:t,onClick:S?O:void 0,dir:B.isRtl?"rtl":void 0},a.ZP.createElement("div",{ref:R,id:b||i.R2,className:te,contentEditable:!0,dir:"auto",onClick:J,onChange:function(e){const{innerHTML:t,textContent:n}=e.currentTarget;if($("
"===t?"":t),q({type:"typing"}),!d.$b&&(!n||!n.length)&&(d.op||!t.includes("emoji-small"))){const e=window.getSelection();e&&(R.current.blur(),e.removeAllRanges(),(0,l.Z)(R.current,!0))}},onKeyDown:function(e){if(!N.length&&(e.metaKey||e.ctrlKey)){const t="ArrowDown"===e.key?1:"ArrowUp"===e.key?-1:void 0;if(t)return e.preventDefault(),void D({targetIndexDelta:t})}"Enter"!==e.key||e.shiftKey?"ArrowUp"!==e.key||N.length||e.metaKey||e.ctrlKey||e.altKey?e.target.addEventListener("keyup",(function t(){Q(),e.target.removeEventListener("keyup",t)})):(e.preventDefault(),F()):d.cj||d.wZ||!("enter"===L&&!e.shiftKey||"ctrl-enter"===L&&(e.ctrlKey||e.metaKey))||(e.preventDefault(),V(),A())},onMouseDown:function(e){2===e.button?!0!==X.current&&(X.current=!0,document.addEventListener("mousedown",(function e(){setTimeout((()=>{X.current=!1}),100),window.removeEventListener("mouseup",e)})),document.addEventListener("keydown",(function e(t){"Esc"!==t.key&&"Escape"!==t.key||(setTimeout((()=>{X.current=!1}),100),window.removeEventListener("keydown",e))}))):e.target.addEventListener("mouseup",(function t(){Q(),e.target.removeEventListener("mouseup",t)}))},onContextMenu:d.wZ?function(e){G()&&(e.preventDefault(),e.stopPropagation())}:void 0,onTouchCancel:d.wZ?Q:void 0,"aria-label":w}),a.ZP.createElement("div",{ref:U,className:(0,c.Z)(te,"clone"),dir:"auto"}),!k&&a.ZP.createElement("span",{className:"placeholder-text",dir:"auto"},w),a.ZP.createElement(P.Z,{isOpen:Y,anchorPosition:j,selectedRange:H,setSelectedRange:W,onClose:_}),k&&a.ZP.createElement("span",{className:"forced-placeholder"},(0,E.Z)(k)))})))},3283:(e,t,n)=>{n.d(t,{Z:()=>g});var a=n(4050),r=n(6137),i=n(3716),o=n(6752),s=n(1396),l=n(3989),c=n(7529),d=n(1212),u=n(8758),m=n(706),h=n(9107),v=n(231);const f={B:"bold",STRONG:"bold",I:"italic",EM:"italic",U:"underline",DEL:"strikethrough",CODE:"monospace",SPAN:"spoiler"},p=document.createElement("div"),g=(0,a.X$)((e=>{let{isOpen:t,anchorPosition:n,selectedRange:g,setSelectedRange:Z,onClose:E}=e;const P=(0,a.sO)(null),y=(0,a.sO)(null),{shouldRender:C,transitionClassNames:b}=(0,d.Z)(t),[N,w,k]=(0,m.Z)(),[I,S]=(0,a.eJ)(""),[T,M]=(0,a.eJ)(!1),[x,L]=(0,a.eJ)(),[$,O]=(0,a.eJ)({});(0,a.d4)((()=>t?(0,l.Z)(E):void 0),[t,E]),(0,u.Z)(t,P,E),(0,a.d4)((()=>{N?y.current.focus():(S(""),M(!1))}),[N]),(0,a.d4)((()=>{C||(k(),O({}),L(void 0))}),[k,C]),(0,a.d4)((()=>{if(!t||!g)return;const e={};let{parentElement:n}=g.commonAncestorContainer;for(;n&&n.id!==i.R2;){const t=f[n.tagName];t&&(e[t]=!0),n=n.parentElement}O(e)}),[t,g,w]);const A=(0,a.I4)((()=>{if(!g)return;const e=window.getSelection();e&&(e.removeAllRanges(),e.addRange(g))}),[g]),F=(0,a.I4)((()=>{const e=window.getSelection();e&&Z(e.getRangeAt(0))}),[Z]),D=(0,a.I4)((()=>{if(g)return p.innerText=g.toString(),p.innerHTML}),[g]),R=(0,a.I4)((()=>{if(g)return g.commonAncestorContainer.parentElement}),[g]);function U(){const e=y.current;if(!e)return;const{offsetWidth:t,scrollWidth:n,scrollLeft:a}=e;if(n<=t)return void L(void 0);let r="";a0&&(r+=" mask-left"),L(r)}function B(e){if($[e])return"active";if("monospace"===e||"strikethrough"===e){if(Object.keys($).some((t=>t!==e&&Boolean($[t]))))return"disabled"}else if($.monospace||$.strikethrough)return"disabled"}const X=(0,a.I4)((()=>{if($.spoiler){const e=R();if(!g||!e||e.dataset.entityType!==r.Vv.Spoiler||!e.textContent)return;return e.replaceWith(e.textContent),void O((e=>({...e,spoiler:!1})))}const e=D();document.execCommand("insertHTML",!1,`${e}`),E()}),[R,D,E,g,$.spoiler]),Y=(0,a.I4)((()=>{O((e=>(document.execCommand(e.bold?"removeFormat":"bold"),Object.keys(e).forEach((t=>{"italic"!==t&&"underline"!==t||!Boolean(e[t])||document.execCommand(t)})),F(),{...e,bold:!e.bold})))}),[F]),z=(0,a.I4)((()=>{document.execCommand("italic"),F(),O((e=>({...e,italic:!e.italic})))}),[F]),V=(0,a.I4)((()=>{document.execCommand("underline"),F(),O((e=>({...e,underline:!e.underline})))}),[F]),j=(0,a.I4)((()=>{if($.strikethrough){const e=R();if(!g||!e||"DEL"!==e.tagName||!e.textContent)return;return e.replaceWith(e.textContent),void O((e=>({...e,strikethrough:!1})))}const e=D();document.execCommand("insertHTML",!1,`${e}`),E()}),[R,D,E,g,$.strikethrough]),K=(0,a.I4)((()=>{if($.monospace){const e=R();if(!g||!e||"CODE"!==e.tagName||!e.textContent)return;return e.replaceWith(e.textContent),void O((e=>({...e,monospace:!1})))}const e=D();document.execCommand("insertHTML",!1,`${e}`),E()}),[R,D,E,g,$.monospace]),H=(0,a.I4)((()=>{const e=encodeURI((0,s.X)(I)||"");if(T){const t=R();if(!t||"A"!==t.tagName)return;return t.href=e,void E()}const t=D();A(),document.execCommand("insertHTML",!1,`${t}`),E()}),[R,D,T,I,E,A]),W=(0,a.I4)((e=>{const t={k:w,b:Y,u:V,i:z,m:K,s:j,p:X}[(0,c.Z)(e)];!e.altKey&&(e.ctrlKey||e.metaKey)&&t&&(e.preventDefault(),e.stopPropagation(),t())}),[w,Y,V,z,K,j,X]);(0,a.d4)((()=>(t&&document.addEventListener("keydown",W),()=>document.removeEventListener("keydown",W))),[t,W]);const q=(0,h.Z)();if(!C)return;const J=(0,o.Z)("TextFormatter",b,N&&"link-control-shown"),_=(0,o.Z)("TextFormatter-link-url-confirm",Boolean(I.length)&&"shown"),G=n?`left: ${n.x}px; top: ${n.y}px;--text-formatter-left: ${n.x}px;`:"";return a.ZP.createElement("div",{ref:P,className:J,style:G,onKeyDown:function(e){"Enter"===e.key&&N&&(H(),e.preventDefault())}},a.ZP.createElement("div",{className:"TextFormatter-buttons"},a.ZP.createElement(v.Z,{color:"translucent",ariaLabel:"Spoiler text",className:B("spoiler"),onClick:X},a.ZP.createElement("i",{className:"icon-eye-closed"})),a.ZP.createElement("div",{className:"TextFormatter-divider"}),a.ZP.createElement(v.Z,{color:"translucent",ariaLabel:"Bold text",className:B("bold"),onClick:Y},a.ZP.createElement("i",{className:"icon-bold"})),a.ZP.createElement(v.Z,{color:"translucent",ariaLabel:"Italic text",className:B("italic"),onClick:z},a.ZP.createElement("i",{className:"icon-italic"})),a.ZP.createElement(v.Z,{color:"translucent",ariaLabel:"Underlined text",className:B("underline"),onClick:V},a.ZP.createElement("i",{className:"icon-underlined"})),a.ZP.createElement(v.Z,{color:"translucent",ariaLabel:"Strikethrough text",className:B("strikethrough"),onClick:j},a.ZP.createElement("i",{className:"icon-strikethrough"})),a.ZP.createElement(v.Z,{color:"translucent",ariaLabel:"Monospace text",className:B("monospace"),onClick:K},a.ZP.createElement("i",{className:"icon-monospace"})),a.ZP.createElement("div",{className:"TextFormatter-divider"}),a.ZP.createElement(v.Z,{color:"translucent",ariaLabel:q("TextFormat.AddLinkTitle"),onClick:w},a.ZP.createElement("i",{className:"icon-link"}))),a.ZP.createElement("div",{className:"TextFormatter-link-control"},a.ZP.createElement("div",{className:"TextFormatter-buttons"},a.ZP.createElement(v.Z,{color:"translucent",ariaLabel:q("Cancel"),onClick:k},a.ZP.createElement("i",{className:"icon-arrow-left"})),a.ZP.createElement("div",{className:"TextFormatter-divider"}),a.ZP.createElement("div",{className:(0,o.Z)("TextFormatter-link-url-input-wrapper",x)},a.ZP.createElement("input",{ref:y,className:"TextFormatter-link-url-input",type:"text",value:I,placeholder:"Enter URL...",autoComplete:"off",inputMode:"url",dir:"auto",onChange:function(e){S(e.target.value),U()},onScroll:U})),a.ZP.createElement("div",{className:_},a.ZP.createElement("div",{className:"TextFormatter-divider"}),a.ZP.createElement(v.Z,{color:"translucent",ariaLabel:q("Save"),className:"color-primary",onClick:H},a.ZP.createElement("i",{className:"icon-check"}))))))}))},1262:(e,t,n)=>{async function a(e){const t=[];function n(e,a){return new Promise((r=>{if(e instanceof File)t.push(e),r(e);else if(e.isFile){const n=a.getAsFile();e.file((e=>{t.push(e),r(e)}),(()=>{n&&t.push(n),r(n)}))}else e.isDirectory&&e.createReader().readEntries((e=>{const t=[];for(let r=0;ra})},2400:(e,t,n)=>{n.d(t,{_:()=>s});const a=/(
|)/g,r=/( |\u00A0)/g,i=/(
|<\/div>)/gi,o=/\n$/i;function s(e){return e.replace(r," ").replace(a,"\n").replace(i,"").replace(o,"")}},6391:(e,t,n)=>{function a(e,t){const{commonAncestorContainer:n}=e;let a=n,r=1;for(;a&&a.id!==t&&r<5;)a=a.parentElement,r++;return Boolean(a&&a.id===t)}n.d(t,{R:()=>a})},3575:(e,t,n)=>{n.d(t,{Z:()=>y});var a=n(4050),r=n(3716),i=n(735),o=n(2400),s=n(4284),l=n(5723),c=n(782);const d=new WeakMap;function u(e){return function(){const t=d.get(e);for(var n=arguments.length,a=new Array(n),r=0;rObject.values((0,c.q0)(r,e)))):{},o=n?(0,c.Q8)(n,(e=>Object.values((0,c.q0)(r,e)))):{},s={...i,...o},l=[].concat(Object.keys(i),Object.keys(o)),d=a.reduce(((e,t)=>(t.names.forEach((n=>{e[n]||(e[n]=[]),e[n].push(t)})),e)),{});return{byKeyword:s,keywords:l,byName:d,names:Object.keys(d)}})),P=u((function(e,t,n){const{byKeyword:a,keywords:r,byName:o,names:s}=e;let l=i.D;const d=r.filter((e=>e.startsWith(t))).sort();l=l.concat((0,c.xH)(Object.values((0,c.q0)(a,d))));const u=s.filter((e=>e.startsWith(t)));return l=l.concat((0,c.xH)(Object.values((0,c.q0)(o,u)))),l=(0,c.Tw)(l),l.slice(0,n)}));try{g=/(^|\s):[-+_:\p{L}\p{N}]*$/giu}catch(e){g=/(^|\s):[-+_:\d\wа-яё]*$/gi}function y(e,t,n){let o=arguments.length>3&&void 0!==arguments[3]?arguments[3]:r.R2,s=arguments.length>4?arguments[4]:void 0,c=arguments.length>5?arguments[5]:void 0,d=arguments.length>6?arguments[6]:void 0,u=arguments.length>7&&void 0!==arguments[7]&&arguments[7];const[v,f,g]=(0,m.Z)(),[y,N]=(0,a.eJ)(),[w,k]=(0,a.eJ)(!1),[I,S]=(0,a.eJ)(i.D);(0,a.d4)((()=>{if(u)return;const e=()=>{N(p.emojis)};p?e():b().then(e)}),[u]);const T=t.current;(0,a.d4)((()=>{if(!e||!T||!y||u)return void g();const t=T.includes(":")&&C(T);if(!t)return S(i.D),void g();const a=t.length>2&&t.endsWith(":"),r=t.substr(1,a?t.length-2:void 0);let o=i.D;if(k(a),r){if(r.length>=2){const e=E(y,c,d);o=P(e,r,36)}}else o=Z(y,n,36);o.length?(a||f(),S(o)):g()}),[y,T,e,f,n,g,k,u,c,d]);const M=(0,a.I4)(((e,n)=>{const a=t.current,r=a.lastIndexOf(":",n?a.lastIndexOf(":")-1:void 0);if(-1!==r){s(`${a.substr(0,r)}${(0,h.Z)(e,["emoji_html"])}`);const t=document.getElementById(o);requestAnimationFrame((()=>{(0,l.Z)(t,!0,!0)}))}g()}),[t,o,s,g]);return(0,a.d4)((()=>{v&&w&&I.length&&M(I[0].native,!0)}),[I,M,v,w]),{isEmojiTooltipOpen:v,closeEmojiTooltip:g,filteredEmojis:I,insertEmoji:M}}function C(e){const t=(0,o._)(e).match(g);return t?t[0].trim():void 0}async function b(){return v||(v=n.e(501).then(n.t.bind(n,7501,19)),f=(await v).default,p=(0,s.NM)(f)),v}},9295:(e,t,n)=>{n.d(t,{Z:()=>v});var a=n(4050),r=n(3555),i=n(6137),o=n(3716),s=n(5806),l=n(2400),c=n(5723),d=n(706),u=n(782);const m=(0,n(9118).P2)((e=>e()),500,!0);let h;try{h=/(^|\s)@[-_\p{L}\p{M}\p{N}]*$/giu}catch(e){h=/(^|\s)@[-_\d\wа-яё]*$/gi}function v(e,t,n){let l=arguments.length>3&&void 0!==arguments[3]?arguments[3]:o.R2,h=arguments.length>4?arguments[4]:void 0,v=arguments.length>5?arguments[5]:void 0,g=arguments.length>6?arguments[6]:void 0;const[Z,E,P]=(0,d.Z)(),[y,C]=(0,a.eJ)(),b=(0,a.I4)(((e,t)=>{const n=(0,r.Rd)().users.byId;(h||v)&&n?m((()=>{const a=null==h?void 0:h.reduce(((e,t)=>(t.userId!==g&&e.push(t.userId),e)),[]),r=(0,s.kK)((0,u.Tw)([...t&&v||[],...a||[]]),n,e);C(Object.values((0,u.q0)(n,r)))})):C(void 0)}),[g,h,v]),N=t.current;(0,a.d4)((()=>{if(!e||!N.length)return void P();const t=N.includes("@")&&f(N);if(t){const e=t?t.substr(1):"";b(e,p(N))}else P()}),[e,b,E,P,N]),(0,a.d4)((()=>{null!=y&&y.length?E():P()}),[E,P,y]);const w=(0,a.I4)((function(e){let a=arguments.length>1&&void 0!==arguments[1]&&arguments[1];if(!e.username&&!(0,s.Vl)(e))return;const r=e.username?`@${e.username}`:`${(0,s.Vl)(e)}`,o=t.current,d=o.lastIndexOf("@");if(-1!==d){n(`${o.substr(0,d)}${r} `);const e=document.getElementById(l);requestAnimationFrame((()=>{(0,c.Z)(e,a)}))}P()}),[t,l,n,P]);return{isMentionTooltipOpen:Z,closeMentionTooltip:P,insertMention:w,mentionFilteredUsers:y}}function f(e){const t=(0,l._)(e).match(h);return t?t[0].trim():void 0}function p(e){return e.startsWith("@")}},7891:(e,t,n)=>{n.d(t,{Z:()=>o});var a=n(4050),r=n(9290),i=n(5326);function o(e,t){const n=void 0===t,o=(0,a.sO)(n),s=(0,a.sO)(),l=(0,i.Z)();return(0,r.Z)((()=>{n||(o.current=!1,s.current&&(clearTimeout(s.current),s.current=void 0))}),e),(0,a.d4)((()=>{if(n||o.current)return;const e=()=>{o.current=!0,l()};t>0?s.current=window.setTimeout(e,t):e()}),e),o.current}},1218:(e,t,n)=>{n.d(t,{Z:()=>i});var a=n(4050),r=n(4605);const i=(0,a.X$)((e=>{let{id:t,options:n,selected:i=[],disabled:o,round:s,loadingOptions:l,onChange:c}=e;const[d,u]=(0,a.eJ)(i||[]),m=(0,a.I4)((e=>{const{value:t,checked:n}=e.currentTarget;let a;a=n?[...d,t]:d.filter((e=>e!==t)),u(a),c(a)}),[c,d]);return a.ZP.createElement("div",{id:t,className:"radio-group"},n.map((e=>a.ZP.createElement(r.Z,{label:e.label,subLabel:e.subLabel,value:e.value,checked:-1!==i.indexOf(e.value),disabled:o,round:s,isLoading:l?-1!==l.indexOf(e.value):void 0,onChange:m}))))}))},1151:(e,t,n)=>{n.d(t,{Z:()=>o});var a=n(4050),r=n(6752),i=n(231);const o=e=>{let{isShown:t,className:n,color:o="primary",ariaLabel:s,disabled:l,onClick:c,children:d}=e;const u=(0,r.Z)("FloatingActionButton",t&&"revealed",n);return a.ZP.createElement(i.Z,{className:u,color:o,round:!0,disabled:l,onClick:t&&!l?c:void 0,ariaLabel:s,tabIndex:-1},d)}},1876:(e,t,n)=>{n.d(t,{Z:()=>f});var a=n(4050),r=n(7361),i=n(9118),o=n(6752),s=n(7240),l=n(3394),c=n(706),d=n(9107),u=n(8512),m=n(2328),h=n(8964),v=n(231);const f=e=>{let{ref:t,buttonRef:n,icon:f,secondaryIcon:p,className:g,style:Z,children:E,disabled:P,ripple:y,narrow:C,inactive:b,focus:N,destructive:w,multiline:k,isStatic:I,contextActions:S,onMouseDown:T,onClick:M,onSecondaryIconClick:x}=e,L=(0,a.sO)(null);t&&(L=t);const[$,O,A]=(0,c.Z)(),{isContextMenuOpen:F,contextMenuPosition:D,handleBeforeContextMenu:R,handleContextMenu:U,handleContextMenuClose:B,handleContextMenuHide:X}=(0,s.Z)(L,!S),Y=(0,a.I4)((()=>L.current),[]),z=(0,a.I4)((()=>L.current.closest(".custom-scroll")),[]),V=(0,a.I4)((()=>L.current.querySelector(".ListItem-context-menu .bubble")),[]),{positionX:j,positionY:K,transformOriginX:H,transformOriginY:W,style:q}=(0,l.Z)(D,Y,z,V),J=(0,a.I4)((e=>{!P&&M&&(M(e),r.$b&&!y&&(O(),(0,i.T2)(A)))}),[P,O,M,y,A]),_=e=>{P||0!==e.button||!x&&!S||(e.stopPropagation(),x?x(e):U(e))},G=(0,a.I4)((e=>{b||r.$b||(!S||2!==e.button&&M||R(e),0===e.button&&(M?J(e):U(e)))}),[b,S,M,R,U,J]),Q=(0,d.Z)(),ee=(0,o.Z)("ListItem",g,!I&&"no-selection",y&&"has-ripple",C&&"narrow",P&&"disabled",b&&"inactive",D&&"has-menu-open",N&&"focus",w&&"destructive",k&&"multiline",I&&"is-static");return a.ZP.createElement("div",{ref:L,className:ee,dir:Q.isRtl?"rtl":void 0,style:Z,onMouseDown:T},a.ZP.createElement("div",{className:(0,o.Z)("ListItem-button",$&&"active"),role:"button",ref:n,tabIndex:0,onClick:!b&&r.$b?J:void 0,onMouseDown:G,onContextMenu:!b&&S?U:void 0},f&&a.ZP.createElement("i",{className:`icon-${f}`}),k&&a.ZP.createElement("div",{className:"multiline-item"},E),!k&&E,!P&&!b&&y&&a.ZP.createElement(u.Z,null),p&&a.ZP.createElement(v.Z,{className:"secondary-icon",round:!0,color:"translucent",size:"smaller",onClick:r.$b?_:void 0,onMouseDown:r.$b?void 0:_},a.ZP.createElement("i",{className:`icon-${p}`}))),S&&void 0!==D&&a.ZP.createElement(m.Z,{isOpen:F,transformOriginX:H,transformOriginY:W,positionX:j,positionY:K,style:q,className:"ListItem-context-menu",autoClose:!0,onClose:B,onCloseAnimationEnd:X},S.map((e=>a.ZP.createElement(h.Z,{key:e.title,icon:e.icon,destructive:e.destructive,disabled:!e.handler,onClick:e.handler},e.title)))))}},6937:(e,t,n)=>{n.d(t,{Z:()=>d});var a=n(4050),r=n(3716),i=n(1212),o=n(6752),s=n(3989),l=n(2898);const c=3e3,d=e=>{let{message:t,duration:n=c,containerId:d,onDismiss:u}=e;const[m,h]=(0,a.eJ)(!0),v=(0,a.sO)(null),{transitionClassNames:f}=(0,i.Z)(m),p=(0,a.I4)((()=>{h(!1),setTimeout(u,150+r.fK)}),[u]);(0,a.d4)((()=>m?(0,s.Z)(p):void 0),[m,p]),(0,a.d4)((()=>(v.current=window.setTimeout(p,n),()=>{v.current&&(clearTimeout(v.current),v.current=void 0)})),[n,p]);const g=(0,a.I4)((()=>{v.current&&(clearTimeout(v.current),v.current=void 0)}),[]),Z=(0,a.I4)((()=>{v.current=window.setTimeout(p,n)}),[n,p]);return a.ZP.createElement(l.Z,{className:"Notification-container",containerId:d},a.ZP.createElement("div",{className:(0,o.Z)("Notification",f),onClick:p,onMouseEnter:g,onMouseLeave:Z},a.ZP.createElement("div",{className:"content"},t)))}},9196:(e,t,n)=>{n.d(t,{Z:()=>o});var a=n(4050),r=n(6752);const i={s:22,m:25,l:28,xl:20},o=(0,a.X$)((e=>{let{progress:t=0,size:n="l",square:o,transparent:s,noCross:l,onClick:c}=e;const d=i[n],u=d-4,m=d-1,h=2*u*Math.PI,v=(0,a.sO)(null);(0,a.d4)((()=>{if(!v.current)return;const e=v.current.firstElementChild,n=h-Math.min(Math.max(.05,t),1)*h;e?e.firstElementChild.setAttribute("stroke-dashoffset",n.toString()):v.current.innerHTML=`\n \n `}),[v,h,m,u,t]);const f=(0,r.Z)(`ProgressSpinner size-${n}`,s&&"transparent",o&&"square",l&&"no-cross");return a.ZP.createElement("div",{ref:v,className:f,onClick:c})}))},4434:(e,t,n)=>{n.d(t,{Z:()=>l});var a=n(4050),r=n(6752),i=n(9107),o=n(9204);const s=(0,a.X$)((e=>{let{id:t,label:n,subLabel:s,value:l,name:c,checked:d,disabled:u,hidden:m,isLoading:h,onChange:v}=e;const f=(0,i.Z)(),p=(0,r.Z)("Radio",u&&"disabled",m&&"hidden-widget",h&&"loading");return a.ZP.createElement("label",{className:p,dir:f.isRtl?"rtl":void 0},a.ZP.createElement("input",{type:"radio",name:c,value:l,id:t,checked:d,onChange:v,disabled:u||m}),a.ZP.createElement("div",{className:"Radio-main"},a.ZP.createElement("span",{className:"label",dir:f.isRtl?"auto":void 0},n),s&&a.ZP.createElement("span",{className:"subLabel",dir:f.isRtl?"auto":void 0},s)),h&&a.ZP.createElement(o.Z,null))})),l=(0,a.X$)((e=>{let{id:t,name:n,options:r,selected:i,disabled:o,loadingOption:l,onChange:c}=e;const d=(0,a.I4)((e=>{const{value:t}=e.currentTarget;c(t)}),[c]);return a.ZP.createElement("div",{id:t,className:"radio-group"},r.map((e=>a.ZP.createElement(s,{name:n,label:e.label,subLabel:e.subLabel,value:e.value,checked:e.value===i,hidden:e.hidden,disabled:o,isLoading:l?l===e.value:void 0,onChange:d}))))}))},8051:(e,t,n)=>{n.d(t,{Z:()=>o});var a=n(4050),r=n(6752),i=n(9107);const o=(0,a.X$)((e=>{let{options:t,min:n=0,max:o=(t?t.length-1:100),step:s=1,label:l,value:c,disabled:d,bold:u,className:m,renderValue:h,onChange:v}=e;const f=(0,i.Z)(),p=(0,a.I4)((e=>{v(Number(e.currentTarget.value))}),[v]),g=(0,r.Z)(m,"RangeSlider",d&&"disabled",u&&"bold"),Z=(0,a.Ye)((()=>t?c/(t.length-1)*100:(c-n)/((o-n)/s)*100),[t,c,o,n,s]);return a.ZP.createElement("div",{className:g},l&&a.ZP.createElement("div",{className:"slider-top-row",dir:f.isRtl?"rtl":void 0},a.ZP.createElement("span",{className:"label",dir:"auto"},l),!t&&a.ZP.createElement("span",{className:"value",dir:"auto"},h?h(c):c)),a.ZP.createElement("div",{className:"slider-main"},a.ZP.createElement("div",{className:"slider-fill-track",style:`width: ${Z}%`}),a.ZP.createElement("input",{min:n,max:o,value:c,step:s,type:"range",className:"RangeSlider__input",onChange:p}),t&&a.ZP.createElement("div",{className:"slider-options"},t.map(((e,t)=>a.ZP.createElement("div",{className:(0,r.Z)("slider-option no-selection",t===c&&"active"),onClick:()=>v(t)},e))))))}))},9589:(e,t,n)=>{n.d(t,{Z:()=>u});var a=n(4050),r=n(6752),i=n(706),o=n(9107),s=n(2515),l=n(4288),c=n(231),d=n(126);const u=(0,a.X$)((e=>{let{ref:t,children:n,parentContainerClassName:u,value:m,inputId:h,className:v,focused:f,isLoading:p,spinnerColor:g,spinnerBackgroundColor:Z,placeholder:E,disabled:P,autoComplete:y,canClose:C,autoFocusSearch:b,onChange:N,onReset:w,onFocus:k,onBlur:I,onSpinnerClick:S}=e,T=(0,a.sO)(null);t&&(T=t);const[M,x,L]=(0,i.Z)(f);(0,s.Z)(T,b,L),(0,a.d4)((()=>{T.current&&(f?T.current.focus():T.current.blur())}),[f,E]);const $=(0,o.Z)(),O=(0,a.I4)((e=>{if("ArrowDown"===e.key||"Enter"===e.key){const e=document.querySelector(`.${u} .ListItem-button`);e&&e.focus()}}),[u]);return a.ZP.createElement("div",{className:(0,r.Z)("SearchInput",v,M&&"has-focus"),dir:$.isRtl?"rtl":void 0},n,a.ZP.createElement("input",{ref:T,id:h,type:"text",dir:"auto",placeholder:E||$("Search"),className:"form-control",value:m,disabled:P,autoComplete:y,onChange:function(e){const{currentTarget:t}=e;N(t.value)},onFocus:function(){x(),k&&k()},onBlur:function(){L(),I&&I()},onKeyDown:O}),a.ZP.createElement("i",{className:"icon-search"}),a.ZP.createElement(d.Z,{isOpen:Boolean(p),className:"slow"},a.ZP.createElement(l.Z,{color:g,backgroundColor:Z,onClick:S})),!p&&(m||C)&&w&&a.ZP.createElement(c.Z,{round:!0,size:"tiny",color:"translucent",onClick:w},a.ZP.createElement("span",{className:"icon-close"})))}))},126:(e,t,n)=>{n.d(t,{Z:()=>s});var a=n(4050),r=n(1212),i=n(7204),o=n(6752);const s=e=>{let{isOpen:t,isCustom:n,id:s,className:l,onClick:c,children:d}=e;const{shouldRender:u,transitionClassNames:m}=(0,r.Z)(t,void 0,void 0,!n&&void 0),h=(0,i.Z)(t),v=(0,i.Z)(d),f=(0,a.sO)();return h&&!t&&(f.current=v),u&&a.ZP.createElement("div",{id:s,className:(0,o.Z)(l,m),onClick:c},t?d:f.current)}},3321:(e,t,n)=>{n.d(t,{Z:()=>i});var a=n(4050),r=n(6752);const i=(0,a.X$)((e=>{let{id:t,name:n,value:i,label:o,checked:s=!1,disabled:l,inactive:c,noAnimation:d,onChange:u,onCheck:m}=e;const h=(0,a.I4)((e=>{u&&u(e),m&&m(e.currentTarget.checked)}),[u,m]),v=(0,r.Z)("Switcher",l&&"disabled",c&&"inactive",d&&"no-animation");return a.ZP.createElement("label",{className:v,title:o},a.ZP.createElement("input",{type:"checkbox",id:t,name:n,value:i,checked:s,disabled:l,onChange:h}),a.ZP.createElement("span",{className:"widget"}))}))},3133:(e,t,n)=>{n.d(t,{Z:()=>f});var a=n(4050),r=n(7361),i=n(1367),o=n(7204),s=n(8781),l=n(9107),c=n(6752),d=n(2972),u=n(2340);const m="Tab--active",h=(0,a.X$)((e=>{let{className:t,title:n,isActive:r,badgeCount:i,isBadgeActive:o,previousActiveTab:s,onClick:l,clickArg:h}=e;const v=(0,a.sO)(null);return(0,a.d4)((()=>{if(r&&void 0===s&&v.current&&v.current.classList.add(m),!r||void 0===s)return;const e=v.current,t=e.parentElement.children[s];if(!t)return;const n=e.querySelector("i"),a=t.querySelector("i"),i=a.parentElement.offsetLeft-n.parentElement.offsetLeft,o=a.clientWidth/n.clientWidth;a.classList.remove("animate"),n.classList.remove("animate"),n.style.transform=`translate3d(${i}px, 0, 0) scale3d(${o}, 1, 1)`,(0,d.Z)(n),n.classList.add("animate"),n.style.transform="none",t.classList.remove(m),e.classList.add(m)}),[r,s]),a.ZP.createElement("div",{className:(0,c.Z)("Tab",t),onClick:()=>l(h),ref:v},a.ZP.createElement("span",null,(0,u.Z)(n),Boolean(i)&&a.ZP.createElement("span",{className:(0,c.Z)("badge",o&&"Tab__badge--active")},i),a.ZP.createElement("i",null)))})),v=r.cj?450:r.wZ?400:300,f=(0,a.X$)((e=>{let{tabs:t,activeTab:n,big:r,onSwitchTab:c}=e;const d=(0,a.sO)(null),u=(0,o.Z)(n);(0,s.Z)(d.current),(0,a.d4)((()=>{const e=d.current,{scrollWidth:t,offsetWidth:a,scrollLeft:r}=e;if(t<=a)return;const o=e.childNodes[n];if(!o)return;const{offsetLeft:s,offsetWidth:l}=o,c=s-a/2+l/2;Math.abs(c-r)<16||(0,i.Z)(e,c,v)}),[n]);const m=(0,l.Z)();return a.ZP.createElement("div",{className:"TabList no-selection no-scrollbar "+(r?"big":""),ref:d,dir:m.isRtl?"rtl":void 0},t.map(((e,t)=>a.ZP.createElement(h,{key:e.title,title:m(e.title),isActive:t===n,badgeCount:e.badgeCount,isBadgeActive:e.isBadgeActive,previousActiveTab:u,onClick:c,clickArg:t}))))}))},2255:(e,t,n)=>{n.d(t,{Z:()=>h});var a=n(4050),r=n(3555),i=n(3716),o=n(6752),s=n(2972),l=n(1279),c=n(5326),d=n(7204),u=n(8674);const m="Transition__slide--active",h=e=>{let{ref:t,activeKey:n,name:h,direction:v="auto",renderCount:f,shouldRestoreHeight:p,shouldCleanup:g,cleanupExceptionKey:Z,id:E,className:P,onStart:y,onStop:C,children:b}=e;const{animationLevel:N}=(0,r.Rd)().settings.byKey,w=(0,a.sO)();let k=(0,a.sO)(null);t&&(k=t);const I=(0,a.sO)({}),S=(0,d.Z)(n),T=(0,c.Z)(),M=void 0!==S&&n!==S;!f&&M&&(I.current={[S]:I.current[S]}),I.current[n]=b,(0,a.bt)((()=>{function e(){if(!g)return;const e=void 0!==Z?I.current[Z]:void 0;I.current=e?{[Z]:e}:{},T()}const t=k.current,a=t.children;if(1===a.length&&!M)return h.startsWith("slide-optimized")&&(a[0].style.transition="none",a[0].style.transform="translate3d(0, 0, 0)"),void a[0].classList.add(m);const r=Array.from(t.childNodes);if(!M||!r.length)return;w.current=n;const o=-1===v||"auto"===v&&S>n||"inverse"===v&&S{null==h||h(),p.style.transition="none",p.style.transform="translate3d(0, 0, 0)",f.style.transition="none",f.style.transform=`translate3d(${n?"-":""}100%, 0, 0)`,(0,s.Z)(f),p.style.transition="",p.style.transform=`translate3d(${n?"":"-"}100%, 0, 0)`,f.style.transition="",f.style.transform="translate3d(0, 0, 0)",p.classList.remove(m),f.classList.add(m),(0,l.L)(p,(()=>{r===o.current&&(p.style.transition="none",p.style.transform="",d&&(f.style.height="auto",c.style.height=`${f.clientHeight}px`),null==v||v(),g(),a())}))}))}(N,h,o,e,n,w,t,p,y,C,r[E],r[d]);if(t.classList.remove("animating"),t.classList.toggle("backwards",o),"none"===h||N===i.oB)return r.forEach(((e,t)=>{e instanceof HTMLElement&&(e.classList.remove("from","through","to"),e.classList.toggle(m,t===E))})),void e();r.forEach(((e,t)=>{e instanceof HTMLElement&&(e.classList.remove(m),e.classList.toggle("from",t===d),e.classList.toggle("through",t>d&&tE),e.classList.toggle("to",t===E))}));const P=(0,u.YW)();requestAnimationFrame((()=>{var a;function i(){requestAnimationFrame((()=>{if(n===w.current){if(t.classList.remove("animating","backwards"),r.forEach(((e,t)=>{e instanceof HTMLElement&&(e.classList.remove("from","through","to"),e.classList.toggle(m,t===E))})),p){const e=t.querySelector(`.${m}`);e&&(e.style.height="auto",t.style.height=`${e.clientHeight}px`)}null==C||C(),P(),e()}}))}t.classList.add("animating"),null==y||y();const s="mv-slide"===h?null===(a=r[E])||void 0===a?void 0:a.firstChild:"reveal"===h&&o?r[d]:r[E];s?(0,l.f)(s,i):i()}))}),[n,S,M,v,h,y,C,f,p,g,Z,N,T]),(0,a.bt)((()=>{if(p){const e=k.current,t=e.querySelector(`.${m}`)||e.querySelector(".from");t&&(t.style.height="auto",e.style.height=`${t.clientHeight}px`,e.style.flexBasis=`${t.clientHeight}px`)}}),[p,b]);const x=I.current,L=Object.keys(f?new Array(f).fill(void 0):x).map(Number).map((e=>{const t=x[e];if(t)return a.ZP.createElement("div",{key:e,teactOrderKey:e},"function"==typeof t?t(e===n,e===S,n):t)}));return a.ZP.createElement("div",{ref:k,id:E,className:(0,o.Z)("Transition",P,h),teactFastList:!f},L)}},3455:(e,t,n)=>{n.d(t,{Yy:()=>o,ZP:()=>h,fi:()=>i,vb:()=>c});var a=n(1090),r=n(782);const i=[{icon:"user",title:"FilterContacts",key:"contacts"},{icon:"non-contacts",title:"FilterNonContacts",key:"nonContacts"},{icon:"group",title:"FilterGroups",key:"groups"},{icon:"channel",title:"FilterChannels",key:"channels"},{icon:"bots",title:"FilterBots",key:"bots"}],o=[{icon:"mute",title:"FilterMuted",key:"excludeMuted"},{icon:"archive",title:"FilterArchived",key:"excludeArchived"},{icon:"readchats",title:"FilterRead",key:"excludeRead"}],s=["includedChatIds","bots","channels","groups","contacts","nonContacts"],l=["excludedChatIds","excludeArchived","excludeMuted","excludeRead"];function c(e,t,n){let a=[],i=[];if("included"===t){const{includedChatIds:t,...o}=n?e.includeFilters||{}:(0,r.ei)(e.folder,s);a=t||[],i=Object.keys(o).filter((e=>Boolean(o[e])))}else{const{excludedChatIds:t,...o}=n?e.excludeFilters||{}:(0,r.ei)(e.folder,l);a=t||[],i=Object.keys(o).filter((e=>Boolean(o[e])))}return{selectedChatIds:a,selectedChatTypes:i}}function d(e){if(e){const{includedChatIds:t,...n}=e;if(Object.values(n).filter(Boolean).length>1||null!=t&&t.length)return"";if(n.bots)return"Bots";if(n.groups)return"Groups";if(n.channels)return"Channels";if(n.contacts)return"Contacts";if(n.nonContacts)return"Non-Contacts"}return""}const u={mode:"create",chatFilter:"",folder:{title:"",includedChatIds:[],excludedChatIds:[]}},m=(e,t)=>{switch(t.type){case"setTitle":return{...e,folder:{...e.folder,title:t.payload},isTouched:!0};case"editIncludeFilters":return{...e,includeFilters:(0,r.ei)(e.folder,s)};case"editExcludeFilters":return{...e,excludeFilters:(0,r.ei)(e.folder,l)};case"setIncludeFilters":return{...e,includeFilters:t.payload,chatFilter:""};case"setExcludeFilters":return{...e,excludeFilters:t.payload,chatFilter:""};case"saveFilters":return e.includeFilters?{...e,folder:{...(0,r.CE)(e.folder,s),title:e.folder.title?e.folder.title:d(e.includeFilters),...e.includeFilters},includeFilters:void 0,chatFilter:"",isTouched:!0}:e.excludeFilters?{...e,folder:{...(0,r.CE)(e.folder,l),...e.excludeFilters},excludeFilters:void 0,chatFilter:"",isTouched:!0}:e;case"editFolder":{const{id:e,description:n,...a}=t.payload;return{mode:"edit",folderId:e,folder:a,chatFilter:""}}case"setChatFilter":return{...e,chatFilter:t.payload};case"setIsLoading":return{...e,isLoading:t.payload};case"setError":return{...e,error:t.payload};case"reset":return u;default:return e}},h=()=>(0,a.Z)(m,u)},3186:(e,t,n)=>{n.d(t,{Z:()=>u});var a=n(4050),r=n(3555),i=n(396),o=n(274),s=n(5266),l=n(9290),c=n(4532);function d(e){let t={};if(e&&e.current){const{play:n,pause:a,setCurrentTime:i,proxy:o,requestNextTrack:s,requestPreviousTrack:l,isFirst:c,isLast:d}=e.current;t={play:()=>{n(o.src)},pause:()=>{a()},stop:()=>{a(),i(0),(0,r.Sv)().closeAudioPlayer()},seekbackward:e=>{const t=e.seekOffset||10;i(Math.max(o.currentTime-t,0))},seekforward:e=>{const t=e.seekOffset||10;i(Math.min(o.currentTime+t,o.duration))},seekTo:e=>{e.seekTime&&i(e.seekTime)}},d()||(t.nexttrack=()=>{s()}),c()||(t.previoustrack=()=>{l()})}return t}const u=function(e,t,n,u,m,h,v){let f=arguments.length>7&&void 0!==arguments[7]&&arguments[7],p=arguments.length>8?arguments[8]:void 0,g=arguments.length>9?arguments[9]:void 0,Z=arguments.length>10&&void 0!==arguments[10]&&arguments[10],E=arguments.length>11&&void 0!==arguments[11]&&arguments[11];const P=(0,a.sO)(null),[y,C]=(0,a.eJ)(!1);let b=y;const[N,w]=(0,a.eJ)(0),k=(0,a.I4)((()=>{C(!1),g&&g()}),[g]);(0,l.Z)((()=>{P.current=(0,i.z2)(e,n,((e,a)=>{var i;switch(e){case"onPlay":{const{setVolume:e,setPlaybackRate:t,toggleMuted:a,proxy:i}=P.current;C(!0),(0,c.N)(h,d(P)),(0,c.pC)("playing"),e((0,r.Rd)().audioPlayer.volume),a(Boolean((0,r.Rd)().audioPlayer.isMuted)),"voice"===n&&t((0,r.Rd)().audioPlayer.playbackRate),(0,c.NS)({duration:i.duration||0,playbackRate:i.playbackRate,position:i.currentTime});break}case"onRateChange":{const{proxy:e}=P.current;(0,c.NS)({duration:e.duration||0,playbackRate:e.playbackRate,position:e.currentTime});break}case"onPause":C(!1),(0,c.pC)("paused");break;case"onTimeUpdate":{const{proxy:e}=P.current,n=e.duration&&Number.isFinite(e.duration)?e.duration:t;E||w(e.currentTime/n);break}case"onEnded":(0,c.pC)("paused")}null==m||null===(i=m[e])||void 0===i||i.call(m,a)}),p,k);const{proxy:a}=P.current;y||a.paused||(C(!0),b=!0),v&&v(a)}),[e]),(0,a.d4)((()=>{y&&h&&(0,c.Ym)(h)}),[h,y]);const{play:I,pause:S,setCurrentTime:T,proxy:M,destroy:x,setVolume:L,stop:$,isFirst:O,isLast:A,requestNextTrack:F,requestPreviousTrack:D,setPlaybackRate:R,toggleMuted:U}=P.current,B=M.duration&&Number.isFinite(M.duration)?M.duration:t;(0,a.d4)((()=>{!B||(0,s.z)(M)||E||w(M.currentTime/B)}),[B,N,M,E]),(0,a.d4)((()=>()=>{x(Z)}),[x,Z]),(0,o.Z)((e=>{let[t,n]=e;t===f&&u===n||M.src&&M.paused||f&&u&&!y&&I(u)}),[f,u,y,I,M.src,M.paused]);const X=(0,a.I4)((()=>{u&&I(u)}),[u,I]),Y=(0,a.I4)((()=>{y?S():X()}),[S,X,y]),z=(0,a.I4)((e=>{T(e),B&&w(M.currentTime/B)}),[B,M,T]);return{isPlaying:b,playProgress:N,playPause:Y,pause:S,play:X,stop:$,setCurrentTime:z,setVolume:L,audioProxy:M,duration:B,requestNextTrack:F,requestPreviousTrack:D,isFirst:O,isLast:A,setPlaybackRate:R,toggleMuted:U}}},2019:(e,t,n)=>{n.d(t,{Z:()=>s});var a=n(4050),r=n(9118),i=n(5266);function o(e,t){const n=[];for(let a=0;a0&&void 0!==arguments[0]&&arguments[0];const[t,n]=(0,a.eJ)(!e),[s,l]=(0,a.eJ)(0),[c,d]=(0,a.eJ)([]),u=(0,a.Ye)((()=>(0,r.Ds)(n,200,!1,!0)),[]),m=(0,a.I4)((e=>{const t=e.currentTarget;if(!(0,i.z)(t)){if(t.buffered.length){const e=o(t.buffered,t.duration);d(e);const n=e.reduce(((e,t)=>{let{start:n,end:a}=t;return e+a-n}),0);l(n/t.duration)}u(t.readyState>=3||t.currentTime>0)}}),[u]),h={onLoadedData:m,onPlaying:m,onLoadStart:m,onPause:m,onTimeUpdate:m,onProgress:m};return{isBuffered:t,bufferedProgress:s,bufferedRanges:c,bufferingHandlers:h,checkBuffering(e){u(e.readyState>=3)}}}},5866:(e,t,n)=>{n.d(t,{Z:()=>s});var a=n(4050),r=n(6264),i=n(5326),o=n(7361);function s(e){let t=arguments.length>1&&void 0!==arguments[1]&&arguments[1],n=arguments.length>2?arguments[2]:void 0;const s=(0,a.sO)(null),l=(0,i.Z)();return(0,a.d4)((()=>{const a=s.current;if(!e||!a||t)return;const i=new Image,l=()=>{a.width=i.width,a.height=i.height;const e=a.getContext("2d",{alpha:!1});o.vX&&(e.filter="blur(2px)"),e.drawImage(i,-4,-4,a.width+8,a.height+8),o.vX||(0,r.Z)(e,0,0,a.width,a.height,2,2)};i.onload=()=>{n?requestAnimationFrame(l):l()},i.src=e}),[s,e,l,t,n]),s}},1470:(e,t,n)=>{n.d(t,{Z:()=>c});var a=n(4050),r=n(3555),i=n(3716),o=n(5806),s=n(782),l=n(9107);const c=function(e){let{chat:t,user:n,folderId:c,isPinned:d,isMuted:u,canChangeFolder:m,handleDelete:h,handleChatFolderChange:v}=e,f=arguments.length>1&&void 0!==arguments[1]&&arguments[1];const p=(0,l.Z)(),{isSelf:g}=n||{},Z=(null==n?void 0:n.id)===i.aw;return(0,a.Ye)((()=>{if(!t)return;const{toggleChatPinned:e,updateChatMutedState:n,toggleChatArchived:a,toggleChatUnread:i}=(0,r.Sv)(),l=m?{title:p("ChatList.Filter.AddToFolder"),icon:"folder",handler:v}:void 0,E=d?{title:p("UnpinFromTop"),icon:"unpin",handler:()=>e({id:t.id,folderId:c})}:{title:p("PinToTop"),icon:"pin",handler:()=>e({id:t.id,folderId:c})};if(f)return(0,s.oA)([E,l]);const P=t.unreadCount||t.hasUnreadMark?{title:p("MarkAsRead"),icon:"readchats",handler:()=>i({id:t.id})}:{title:p("MarkAsUnread"),icon:"unread",handler:()=>i({id:t.id})},y=u?{title:p("ChatList.Unmute"),icon:"unmute",handler:()=>n({chatId:t.id,isMuted:!1})}:{title:p("ChatList.Mute"),icon:"mute",handler:()=>n({chatId:t.id,isMuted:!0})},C=(0,o.pE)(t)?{title:p("Unarchive"),icon:"unarchive",handler:()=>a({id:t.id})}:{title:p("Archive"),icon:"archive",handler:()=>a({id:t.id})},b={title:(0,o.YC)(t.id)?p("Delete"):p((0,o.cc)(t)?"DeleteChat":(0,o.eA)(t)?"LeaveChannel":"Group.LeaveGroup"),icon:"delete",destructive:!0,handler:h},N=void 0!==c;return(0,s.oA)([l,P,E,!g&&y,!g&&!Z&&!N&&C,b])}),[t,m,p,v,d,f,u,h,c,g,Z])}},7240:(e,t,n)=>{n.d(t,{Z:()=>o});var a=n(4050),r=n(7361);function i(e){e.stopImmediatePropagation(),e.preventDefault(),e.stopPropagation()}const o=(e,t,n,o)=>{const[s,l]=(0,a.eJ)(!1),[c,d]=(0,a.eJ)(void 0),u=(0,a.I4)((e=>{t||2!==e.button||e.target.classList.add("no-selection")}),[t]),m=(0,a.I4)((e=>{e.target.classList.remove("no-selection"),t||n&&e.target.matches("a[href]")||(e.preventDefault(),c||(l(!0),d({x:e.clientX,y:e.clientY})))}),[t,n,c]),h=(0,a.I4)((()=>{l(!1)}),[]),v=(0,a.I4)((()=>{d(void 0)}),[]);return(0,a.d4)((()=>{if(t||!r.$b||o)return;const a=e.current;if(!a)return;let s;const u=()=>{s&&(clearTimeout(s),s=void 0)},m=e=>{t||(u(),s=window.setTimeout((()=>(e=>{u();const{clientX:t,clientY:o,target:s}=e.touches[0];c||n&&s.matches("a[href]")||(a.addEventListener("touchend",(function e(t){a.removeEventListener("touchend",e,!0),i(t)}),!0),r.fl&&r.cj&&a.addEventListener("mousedown",(function e(t){a.removeEventListener("mousedown",e,!0),i(t)}),!0),l(!0),d({x:t,y:o}))})(e)),200))};return a.addEventListener("touchstart",m,{passive:!0}),a.addEventListener("touchcancel",u,!0),a.addEventListener("touchend",u,!0),a.addEventListener("touchmove",u,{passive:!0}),()=>{u(),a.removeEventListener("touchstart",m),a.removeEventListener("touchcancel",u,!0),a.removeEventListener("touchend",u,!0),a.removeEventListener("touchmove",u)}}),[c,t,o,e,n]),{isContextMenuOpen:s,contextMenuPosition:c,handleBeforeContextMenu:u,handleContextMenu:m,handleContextMenuClose:h,handleContextMenuHide:v}}},3394:(e,t,n)=>{n.d(t,{Z:()=>i});var a=n(4050);const r={width:0,left:0,height:0,top:0};function i(e,t,n,i,o){const[s,l]=(0,a.eJ)("right"),[c,d]=(0,a.eJ)("bottom"),[u,m]=(0,a.eJ)(),[h,v]=(0,a.eJ)(),[f,p]=(0,a.eJ)(!1),[g,Z]=(0,a.eJ)(""),[E,P]=(0,a.eJ)("opacity: 0;");return(0,a.d4)((()=>{const a=t();if(!e||!a)return;let{x:s,y:c}=e;const u=s,h=c,f=i(),g=n(),{extraPaddingX:E=0,extraTopPadding:y=0,marginSides:C=0,extraMarginTop:b=0}=(null==o?void 0:o())||{},N=f?parseInt(getComputedStyle(f).marginTop,10)+b:void 0,w=f?{width:f.offsetWidth,height:f.offsetHeight+N}:r,k=g?g.getBoundingClientRect():r;let I,S;s+w.width+E0?(I="right",s-=3):(I="left",s=16),l(I),C&&"right"===I&&s+E+C>=k.width+k.left&&(s-=C),C&&"left"===I&&(s+E+C+w.width>=k.width+k.left?s-=C:s-C<=0&&(s+=C)),c+w.height{n.d(t,{Z:()=>i});var a=n(4050),r=n(9118);function i(e,t,n){return(0,a.Ye)((()=>(0,r.Ds)((e=>e()),e,!t,!n)),[e,t,n])}},5790:(e,t,n)=>{n.d(t,{Z:()=>o});var a=n(4050),r=n(3555),i=n(9118);const o=(e,t,n,o)=>{const{loadMessage:s}=(0,r.Sv)(),l=(0,a.Ye)((()=>{const n=(0,i.P2)(s,500,!0);return()=>{n({chatId:e,messageId:t,replyOriginForId:o})}}),[s,e,t,o]);(0,a.d4)((()=>{t&&!n&&l()}))}},1334:(e,t,n)=>{n.d(t,{d7:()=>i,mE:()=>s,yi:()=>o});var a=n(4050),r=n(6974);function i(e){const[t,n]=(0,a.eJ)((0,r.gO)(e));return(0,a.d4)((()=>(0,r.M2)(e,n)),[e]),t}function o(){const[e,t]=(0,a.eJ)((0,r.wC)());return(0,a.d4)((()=>(0,r.O6)(t)),[]),e}function s(){const[e,t]=(0,a.eJ)((0,r.Yz)());return(0,a.d4)((()=>(0,r.r_)(t)),[]),e}},8781:(e,t,n)=>{n.d(t,{Z:()=>r});var a=n(4050);const r=(e,t)=>{(0,a.d4)((()=>{if(e&&!t)return e.addEventListener("wheel",n,{passive:!0}),()=>{e.removeEventListener("wheel",n)};function n(t){t.deltaX||(e.scrollLeft+=t.deltaY/4)}}),[e,t])}},2515:(e,t,n)=>{n.d(t,{Z:()=>i});var a=n(4050),r=n(7361);function i(e,t,n){(0,a.d4)((()=>{t?r.wB||setTimeout((()=>{requestAnimationFrame((()=>{e.current&&e.current.focus()}))}),500):(e.current&&e.current.blur(),n&&setTimeout(n,300))}),[e,t,n])}},3657:(e,t,n)=>{n.d(t,{Op:()=>l,S1:()=>o,_N:()=>s});var a=n(4050),r=n(9118),i=n(8674);function o(e,t){let{rootRef:n,throttleMs:o,debounceMs:s,shouldSkipFirst:l,margin:c,threshold:d,isDisabled:u}=e;const m=(0,a.sO)(),h=(0,a.sO)(),v=(0,a.sO)(0),f=(0,a.sO)();h.current=t;const p=(0,a.I4)((()=>{v.current++}),[]),g=(0,a.I4)((()=>{v.current&&(v.current--,!v.current&&f.current&&(f.current(),f.current=void 0))}),[]);return(0,i.ZP)(p,g),(0,a.d4)((()=>{if(!u)return()=>{m.current&&(m.current.observer.disconnect(),m.current.callbacks.clear(),m.current=void 0)}}),[u]),{observe:(0,a.I4)(((e,t)=>{m.current||function(){const e=new Map,t=new Map,a=()=>{const n=Array.from(t.values());n.forEach((t=>{const a=e.get(t.target);a&&a(t,n)})),h.current&&h.current(n),t.clear()},i=o?r.P2:s?r.Ds:void 0,u=i?i(a,o||s,!l):a,p=new IntersectionObserver((e=>{e.forEach((e=>{t.set(e.target,e)})),v.current?f.current=()=>{u()}:u()}),{root:n.current,rootMargin:c?`${c}px`:void 0,threshold:d});m.current={observer:p,callbacks:e}}();const a=m.current;return a.observer.observe(e),t&&a.callbacks.set(e,t),()=>{t&&a.callbacks.delete(e),a.observer.unobserve(e)}}),[u]),freeze:p,unfreeze:g}}function s(e,t,n){(0,a.d4)((()=>t?t(e.current,n):void 0),[])}function l(e,t,n){const[r,i]=(0,a.eJ)(!t);return s(e,t,(e=>{i(e.isIntersecting),n&&n(e)})),r}},2357:(e,t,n)=>{n.d(t,{Z:()=>r});var a=n(4050);const r=function(e,t){let n=arguments.length>2&&void 0!==arguments[2]&&arguments[2];const r=(0,a.sO)(e);(0,a.bt)((()=>{r.current=e}),[e]),(0,a.d4)((()=>{if(void 0===t)return;const e=setInterval((()=>r.current()),t);return n||r.current(),()=>clearInterval(e)}),[t,n])}},2645:(e,t,n)=>{n.d(t,{Z:()=>i});var a=n(4050),r=n(7204);const i=(e,t,n)=>{const i=(0,r.Z)(t);return(0,a.bt)((()=>e(i||[])),t,n)}},692:(e,t,n)=>{n.d(t,{Z:()=>r});var a=n(1212);function r(e){const t=Boolean(e),{transitionClassNames:n}=(0,a.Z)(t,void 0,t,"slow");return n}},2566:(e,t,n)=>{n.d(t,{Z:()=>m});var a=n(4050),r=n(7361),i=n(6137),o=n(9118),s=n(647),l=n(5326),c=n(6926);const d={},u=()=>{const e=(0,a.sO)();return e.current||(e.current=(0,c.Z)(d),d[e.current]=!0),e.current};function m(e){let t=arguments.length>1&&void 0!==arguments[1]&&arguments[1],n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:i.IU.BlobUrl,c=arguments.length>3?arguments[3]:void 0,d=arguments.length>4?arguments[4]:void 0,m=arguments.length>5&&void 0!==arguments[5]&&arguments[5];const h=e?s.UV(e):void 0,v=n===i.IU.Stream||r.I_&&n===i.IU.Progressive,f=(0,l.Z)(),p=u(),[g,Z]=(0,a.eJ)(h&&!v?1:0),E=(0,a.sO)(),P=(0,a.Ye)((()=>(0,o.P2)((e=>{E.current&&(!d||Date.now()-E.current>d)&&Z(e)}),500,!0)),[d]);return(0,a.d4)((()=>{!t&&e&&(h?v&&setTimeout((()=>{Z(.75)}),1500):(Z(0),E.current&&s.cC(P),E.current=Date.now(),s.he(e,n,m,P,p).then((()=>{const e=Date.now()-E.current;E.current=void 0,!d||e>=d?f():setTimeout(f,d-e)}))))}),[t,e,h,n,c,f,v,d,P,m,p]),(0,a.d4)((()=>{t&&E.current&&(s.cC(P),Z(0),E.current=void 0)}),[P,t]),(0,a.d4)((()=>()=>{e&&s.Iq(e,p)}),[p,e]),{mediaData:h,loadProgress:g}}},6503:(e,t,n)=>{n.d(t,{Z:()=>o});var a=n(4050),r=n(7361);let i;function o(e,t){let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:250,o=arguments.length>3&&void 0!==arguments[3]&&arguments[3];const s=(0,a.sO)(!1),l=(0,a.I4)((()=>{s.current=!0}),[]);(0,a.d4)((()=>{i&&(clearTimeout(i),i=void 0),!e||r.$b||o||(i=window.setTimeout((()=>{s.current||t()}),2*n))}),[o,e,n,t]);const c=(0,a.I4)((()=>{s.current=!0}),[]),d=(0,a.I4)((()=>{s.current=!1,i&&(clearTimeout(i),i=void 0),i=window.setTimeout((()=>{s.current||t()}),n)}),[n,t]);return[c,d,l]}},2678:(e,t,n)=>{n.d(t,{Z:()=>s});var a=n(4050),r=n(7204),i=n(5326),o=n(9290);function s(e,t){const n=(0,r.Z)(e,!0),s=(0,a.sO)(),l=(0,i.Z)(),c=null!=e,d=null!=n;return c&&s.current&&(clearTimeout(s.current),s.current=void 0),(0,o.Z)((()=>{t&&!c&&d&&!s.current&&(s.current=window.setTimeout((()=>{s.current=void 0,l()}),t))}),[e]),s.current&&t&&!c?n:e}},1090:(e,t,n)=>{n.d(t,{Z:()=>r});var a=n(4050);function r(e,t){const n=(0,a.sO)(e),[r,i]=(0,a.eJ)(t);return[r,(0,a.I4)((e=>{i((t=>n.current(t,e)))}),[])]}},3057:(e,t,n)=>{n.d(t,{Z:()=>u});var a=n(4050),r=n(5116),i=n(3716),o=n(790),s=n(9107),l=n(9203),c=n(8778);const d=(0,a.X$)((e=>{const{isOpen:t}=e,n=(0,c.Z)(l.gl.Extra,"CalendarModal",!t);return n?a.ZP.createElement(n,e):void 0})),u=(e,t)=>{const n=(0,s.Z)(),[l,c]=(0,a.eJ)(),u=(0,a.I4)((function(e){let t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];const{serverTimeOffset:n}=(0,r.Rd)(),a=Math.round(Math.max(e.getTime(),Date.now()+6e4)/1e3)+(t?0:n);null==l||l(a),c(void 0)}),[l]),m=(0,a.I4)((()=>{u(new Date(1e3*i.t4),!0)}),[u]),h=(0,a.I4)((()=>{c(void 0),null==t||t()}),[t]),v=(0,a.I4)((e=>{c((()=>e))}),[]),f=new Date;f.setSeconds(0),f.setMilliseconds(0);const p=new Date;return p.setFullYear(p.getFullYear()+1),[v,a.ZP.createElement(d,{isOpen:Boolean(l),withTimePicker:!0,selectedAt:f.getTime(),maxAt:(0,o._F)(p),isFutureMode:!0,secondButtonLabel:e?n("Schedule.SendWhenOnline"):void 0,onClose:h,onSubmit:u,onSecondButtonClick:e?m:void 0})]}},6389:(e,t,n)=>{n.d(t,{Z:()=>s});var a=n(4050),r=n(3555),i=n(3716),o=n(9118);const s=(e,t)=>(0,a.Ye)((()=>(0,o.P2)((n=>{(0,r.Sv)().sendMessageAction({chatId:e,threadId:t,action:n})}),i.o_)),[e,t])},971:(e,t,n)=>{n.d(t,{Y:()=>i});var a=n(4050),r=n(9290);function i(e){const t=(0,a.sO)(e);return(0,r.Z)((()=>{t.current=e}),[e]),t}},8183:(e,t,n)=>{n.d(t,{Z:()=>r});var a=n(4050);const r=function(e,t){const n=(0,a.sO)(e);(0,a.bt)((()=>{n.current=e}),[e]),(0,a.d4)((()=>{if("number"!=typeof t)return;const e=setTimeout((()=>n.current()),t);return()=>clearTimeout(e)}),[t])}},6898:(e,t,n)=>{n.d(t,{Z:()=>i});var a=n(4050),r=n(9118);function i(e,t){(0,a.d4)((()=>{const t=e.current;return()=>{t&&(0,r.T2)((()=>{t.pause(),t.src="",t.load()}))}}),t)}},6264:(e,t,n)=>{n.d(t,{Z:()=>i});const a=[1,57,41,21,203,34,97,73,227,91,149,62,105,45,39,137,241,107,3,173,39,71,65,238,219,101,187,87,81,151,141,133,249,117,221,209,197,187,177,169,5,153,73,139,133,127,243,233,223,107,103,99,191,23,177,171,165,159,77,149,9,139,135,131,253,245,119,231,224,109,211,103,25,195,189,23,45,175,171,83,81,79,155,151,147,9,141,137,67,131,129,251,123,30,235,115,113,221,217,53,13,51,50,49,193,189,185,91,179,175,43,169,83,163,5,79,155,19,75,147,145,143,35,69,17,67,33,65,255,251,247,243,239,59,29,229,113,111,219,27,213,105,207,51,201,199,49,193,191,47,93,183,181,179,11,87,43,85,167,165,163,161,159,157,155,77,19,75,37,73,145,143,141,35,138,137,135,67,33,131,129,255,63,250,247,61,121,239,237,117,29,229,227,225,111,55,109,216,213,211,209,207,205,203,201,199,197,195,193,48,190,47,93,185,183,181,179,178,176,175,173,171,85,21,167,165,41,163,161,5,79,157,78,154,153,19,75,149,74,147,73,144,143,71,141,140,139,137,17,135,134,133,66,131,65,129,1],r=[0,9,10,10,14,12,14,14,16,15,16,15,16,15,15,17,18,17,12,18,16,17,17,19,19,18,19,18,18,19,19,19,20,19,20,20,20,20,20,20,15,20,19,20,20,20,21,21,21,20,20,20,21,18,21,21,21,21,20,21,17,21,21,21,22,22,21,22,22,21,22,21,19,22,22,19,20,22,22,21,21,21,22,22,22,18,22,22,21,22,22,23,22,20,23,22,22,23,23,21,19,21,21,21,23,23,23,22,23,23,21,23,22,23,18,22,23,20,22,23,23,23,21,22,20,22,21,22,24,24,24,24,24,22,21,24,23,23,24,21,24,23,24,22,24,24,22,24,24,22,23,24,24,24,20,23,22,23,24,24,24,24,24,24,24,23,21,23,22,23,24,24,24,22,24,24,24,23,22,24,24,25,23,25,25,23,24,25,25,24,22,25,25,25,24,23,24,25,25,25,25,25,25,25,25,25,25,25,25,23,25,23,24,25,25,25,25,25,25,25,25,25,24,22,25,25,23,25,25,20,24,25,24,25,25,22,24,25,24,25,24,25,25,24,25,25,25,25,22,25,25,25,24,25,24,25,18];function i(e,t,n,i,o,s,l){if(Number.isNaN(s)||s<1)return;s|=0,Number.isNaN(l)&&(l=1),(l|=0)>3&&(l=3),l<1&&(l=1);const c=e.getImageData(t,n,i,o),d=c.data;let u,m,h,v,f,p,g,Z,E,P,y,C,b=i-1,N=o-1,w=s+1,k=[],I=[],S=[],T=a[s],M=r[s],x=[],L=[];for(;l-- >0;){for(C=y=0,f=0;fb?b:p)<<2),u+=d[g++],m+=d[g++],h+=d[g++];for(v=0;v0?g<<2:0),Z=C+x[v],E=C+L[v],u+=d[Z++]-d[E++],m+=d[Z++]-d[E++],h+=d[Z++]-d[E++],y++;C+=i<<2}for(v=0;vN?0:i,u+=k[P],m+=I[P],h+=S[P];for(y=v<<2,f=0;f>>M,d[y+1]=m*T>>>M,d[y+2]=h*T>>>M,0==v&&(x[f]=((g=f+w)0?g*i:0),Z=v+x[f],E=v+L[f],u+=k[Z]-k[E],m+=I[Z]-I[E],h+=S[Z]-S[E],y+=i<<2}}e.putImageData(c,t,n)}},396:(e,t,n)=>{n.d(t,{An:()=>P,Es:()=>p,z2:()=>g});var a=n(3555),r=n(1713),i=n(7361),o=n(4753),s=n(5266),l=n(5806),c=n(9118),d=n(1192);const u=new Map;let m,h=[],v=[];function f(e,t){const n=m&&u.get(m);n&&(n.audio.pause(),n.audio.currentTime=0,n.onTrackChange&&n.onTrackChange());const i=E(e,(0,a.Rd)().audioPlayer.origin||r.Cr.Inline,t);if(!i)return;if(!u.has(i))return void(0,a.Sv)().openAudioPlayer((0,l.Ak)(y(i).messageKey));const s=u.get(i);s.onForcePlay&&s.onForcePlay(),m=i,s.audio.src&&(0,o.Z)(s.audio)}function p(){const e=m&&u.get(m);e&&e.audio.pause()}function g(e,t,n,p,g){if(!u.has(e)){const n=function(e,t,n,a){const r=new Audio;function i(t){return n=>{u.has(e)&&((0,s.z)(r)||u.get(e).handlers.forEach((e=>{e(t,n)})))}}return r.addEventListener("timeupdate",i("onTimeUpdate")),r.addEventListener("play",i("onPlay")),r.addEventListener("pause",i("onPause")),r.addEventListener("loadstart",i("onLoadStart")),r.addEventListener("loadeddata",i("onLoadedData")),r.addEventListener("playing",i("onPlaying")),r.addEventListener("ended",(()=>{u.has(e)&&((0,s.z)(r)||f(e))})),{audio:r,type:t,proxy:new Proxy(r,{get:(e,t)=>e[t]}),handlers:[],onForcePlay:n,onTrackChange:a}}(e,t,p,g);u.set(e,n),function(e,t){"audio"!==e.type||v.includes(t)||(v.push(t),v.sort(C)),"voice"!==e.type||h.includes(t)||(h.push(t),h.sort(C))}(n,e)}const{audio:Z,proxy:P,handlers:b}=u.get(e);return b.push(n),{play(n){if(!Z.paused)return;const c=m&&u.get(m);c&&m!==e&&(c.audio.pause(),c.audio.currentTime=0,(0,s.z)(c.audio)&&(c.audio.dataset.preventPlayAfterPatch="true"),c.onTrackChange&&c.onTrackChange()),m=e,Z.src||(Z.src=n,Z.preload="auto",n.includes("/progressive/")&&i.s$&&(delete Z.dataset.preventPlayAfterPatch,(0,s.B)(Z))),(0,o.Z)(Z),function(e,t){var n;if((0,a.Rd)().globalSearch.currentContent===r.nJ.Music)return;const{chatId:i}=(0,l.Ak)(y(t).messageKey),o=null===(n=(0,d.Bt)((0,a.Rd)()))||void 0===n?void 0:n.chatId,s=e=>e.startsWith(`msg${i}`)||o&&e.startsWith(`msg${o}`);"audio"===e&&(v=v.filter(s)),"voice"===e&&(h=h.filter(s))}(t,e)},pause(){m===e&&Z.pause()},stop(){if(m===e){const e=Z.src;Z.pause(),(0,c.T2)((()=>{Z.src="",Z.src=e}))}},setCurrentTime(t){m===e&&(Z.fastSeek?Z.fastSeek(t):Z.currentTime=t)},setVolume(t){m===e&&(Z.volume=t,Z.muted=!1)},setPlaybackRate(t){m===e&&(Z.playbackRate=t)},toggleMuted(e){Z.muted=void 0===e?!Z.muted:e},proxy:P,requestNextTrack(){f(e)},isLast:()=>!E(e,(0,a.Rd)().audioPlayer.origin),isFirst:()=>!E(e,(0,a.Rd)().audioPlayer.origin,!0),requestPreviousTrack(){f(e,!0)},destroy(){let t=arguments.length>0&&void 0!==arguments[0]&&arguments[0];const a=u.get(e);a&&(a.handlers=a.handlers.filter((e=>e!==n)),a.handlers.length||(a.audio.pause(),u.delete(e),t&&function(e,t){const n=e=>e!==t;"audio"===e.type&&(v=v.filter(n)),"voice"===e.type&&(h=h.filter(n))}(a,e),e===m&&(m=void 0)))}}}function Z(e){switch(e.type){case"audio":return v;case"voice":return h;default:return}}function E(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:r.Cr.Inline,n=arguments.length>2?arguments[2]:void 0;const a=u.get(e),i=Z(a);if(!i)return;if(t===r.Cr.Search){const t=i.indexOf(e);if(t<0)return;return i[t+(n?-1:1)]}const{chatId:o}=(0,l.Ak)(y(e).messageKey),s=i.filter((e=>e.startsWith(`msg${o}`))),c=s.indexOf(e);if(c<0)return;let d=t===r.Cr.Inline?-1:1;return n&&(d*=-1),s[c+d]}function P(e){return`${(0,l.Tp)(e)}-${e.date}`}function y(e){return{messageKey:e.match(/^msg(-?\d+)-(\d+)/)[0],date:Number(e.split("-").pop())}}function C(e,t){if(!e||!t)return 0;const{date:n,messageKey:a}=y(e),{date:r,messageKey:i}=y(t),o=r-n;return 0===o?i.localeCompare(a):o}},1174:(e,t,n)=>{n.d(t,{eM:()=>r,sf:()=>c,vJ:()=>i});var a=n(7361);let r;!function(e){e[e.Up=0]="Up",e[e.Down=1]="Down",e[e.Left=2]="Left",e[e.Right=3]="Right"}(r||(r={}));const i=20;function o(e,t){return t?Math.sqrt((t.pageX-e.pageX)**2+(t.pageY-e.pageY)**2):0}function s(e,t){return{x:(e.pageX+t.pageX)/2,y:(e.pageY+t.pageY)/2}}let l=0;function c(e,t){let n,c,d=!1,u=!1,m=0,h={x:window.innerWidth/2,y:window.innerHeight/2};function v(e){if(!t.excludedClosestSelector||!e.target.matches(t.excludedClosestSelector)&&!e.target.closest(t.excludedClosestSelector)){if(n=e,"mousedown"===e.type)t.onDrag&&e.preventDefault(),document.addEventListener("mousemove",p),document.addEventListener("mouseup",f);else if("touchstart"===e.type){const t=e.target;t.addEventListener("touchmove",p,{passive:!0}),t.addEventListener("touchend",f),t.addEventListener("touchcancel",f),"touches"in e&&(void 0===e.pageX&&(e.pageX=e.touches[0].pageX),void 0===e.pageY&&(e.pageY=e.touches[0].pageY),2===e.touches.length&&(m=o(e.touches[0],e.touches[1]),h=s(e.touches[0],e.touches[1])))}t.withCursor&&document.body.classList.add("cursor-grabbing"),t.onCapture&&t.onCapture(e)}}function f(e){n&&(t.withCursor&&document.body.classList.remove("cursor-grabbing"),document.removeEventListener("mouseup",f),document.removeEventListener("mousemove",p),n.target.removeEventListener("touchcancel",f),n.target.removeEventListener("touchend",f),n.target.removeEventListener("touchmove",p),a.cj&&t.selectorToPreventScroll&&Array.from(document.querySelectorAll(t.selectorToPreventScroll)).forEach((e=>{e.style.overflow=""})),e&&(d?t.onRelease&&t.onRelease(e):"mouseup"===e.type&&(t.onDoubleClick&&Date.now()-l<300?t.onDoubleClick(e,{centerX:n.pageX,centerY:n.pageY}):!t.onClick||"button"in e&&0!==e.button||t.onClick(e),l=Date.now()))),d=!1,u=!1,m=0,c=void 0,h={x:window.innerWidth/2,y:window.innerHeight/2},n=void 0}function p(e){if(n){if("touchmove"===e.type&&"touches"in e&&(void 0===e.pageX&&(e.pageX=e.touches[0].pageX),void 0===e.pageY&&(e.pageY=e.touches[0].pageY),t.onZoom&&m>0&&2===e.touches.length)){const n=o(e.touches[0],e.touches[1]),a=s(e.touches[0],e.touches[1]),r=a.x-h.x,i=a.y-h.y,l=n/m;t.onZoom(e,{zoomFactor:l,initialCenterX:h.x,initialCenterY:h.y,dragOffsetX:r,dragOffsetY:i,currentCenterX:a.x,currentCenterY:a.y}),1!==l&&(d=!0)}const l=e.pageX-n.pageX,v=e.pageY-n.pageY;(Math.abs(l)>=15||Math.abs(v)>=15)&&(d=!0);let f=!1;t.onDrag&&(t.onDrag(e,n,{dragOffsetX:l,dragOffsetY:v}),f=!0),t.onSwipe&&!u&&(u=function(e,n,o){if(a.cj){const t=e.touches[0].pageX;if(t<=i||t>=window.innerWidth-i)return!1}const s=Math.abs(n),l=Math.abs(o);if(n&&o&&Math.max(s,l)/Math.min(s,l)<2)return!1;let d;if(s>=50?d="x":l>=50&&(d="y"),!d)return!1;if(c){if(c!==d)return!1}else c=d;return function(e,t,n,a,i){return"x"===t?i(e,n<0?r.Left:r.Right):"y"===t&&i(e,a<0?r.Up:r.Down)}(e,d,n,o,t.onSwipe)}(e,l,v),f=u),a.cj&&f&&t.selectorToPreventScroll&&Array.from(document.querySelectorAll(t.selectorToPreventScroll)).forEach((e=>{e.style.overflow="hidden"}))}}return e.addEventListener("mousedown",v),e.addEventListener("touchstart",v,{passive:!t.isNotPassive}),()=>{f(),e.removeEventListener("touchstart",v),e.removeEventListener("mousedown",v)}}},1279:(e,t,n)=>{function a(e,t,n){i("transitionend",e,t,n)}function r(e,t,n){i("animationend",e,t,n)}function i(e,t,n,a){let r=!1;t.addEventListener(e,(function i(o){r||o.target!==o.currentTarget||a&&(o instanceof TransitionEvent&&o.propertyName===a||o instanceof AnimationEvent&&o.animationName===a)||(r=!0,t.removeEventListener(e,i),setTimeout((()=>{n()}),50))}))}n.d(t,{L:()=>a,f:()=>r})},3570:(e,t,n)=>{function a(e,t){return t-Math.floor(t/e)*e}n.d(t,{Z:()=>a})},539:(e,t,n)=>{n.d(t,{N:()=>m,Z:()=>u});var a=n(3555),r=n(1713),i=n(3716),o=n(7361),s=n(8674),l=n(9933),c=n(9118);let d=!1;function u(e,t,n){let o=arguments.length>3&&void 0!==arguments[3]?arguments[3]:0,s=arguments.length>4&&void 0!==arguments[4]?arguments[4]:i.V$,l=arguments.length>5?arguments[5]:void 0,c=arguments.length>6?arguments[6]:void 0,d=arguments.length>7?arguments[7]:void 0;const u=h(e,t,s,l);l!==r.fo.Static?((0,a.Rd)().settings.byKey.animationLevel===i.oB&&(c=0),v(e,t,u,n,o,c,d)):v(e,t,u,n,o,0)}function m(){return d}function h(e,t){let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:i.V$,a=arguments.length>3?arguments[3]:void 0;const{offsetTop:o}=t,{scrollTop:s}=e;if(void 0===a){const t=o-e.scrollTop;if(t<-n)return s+(t+n);if(t>n)return s+(t-n)}else{if(a===r.fo.Up)return o+n;if(a===r.fo.Down)return Math.max(0,o-n)}return s}function v(e,t,n,a){let r=arguments.length>4&&void 0!==arguments[4]?arguments[4]:0,u=arguments.length>5?arguments[5]:void 0,m=arguments.length>6?arguments[6]:void 0;const{offsetTop:h,offsetHeight:v}=t,{scrollTop:g,offsetHeight:Z,scrollHeight:E}=e,P=m&&e.dataset.normalHeight?Number(e.dataset.normalHeight):Z;let y;switch(g!==n&&(e.scrollTop=n),a){case"start":y=h-r-n+(o.wZ?1:0);break;case"end":y=h+v+r-(n+P);break;case"nearest":case"center":case"centerOrTop":y=v0){const e=E-(n+P);y=Math.min(y,e)}if(0===y)return;const C=n+y;if(0===u)return void(e.scrollTop=C);d=!0;const b=Math.abs(y),N=b{(0,l.cK)((()=>{const t=Math.min((Date.now()-k)/w,1),n=y*(1-N(t));return e.scrollTop=Math.round(C-n),d=t<1,d||I(),d}))}))}function f(e){return 1-(1-e)**5}function p(e){return 1-(1-e)**3.5}},1367:(e,t,n)=>{n.d(t,{Z:()=>s});var a=n(3555),r=n(3716),i=n(9933),o=n(9118);function s(e,t){let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:300;(0,a.Rd)().settings.byKey.animationLevel===r.oB&&(n=0),l(e,t,n)}function l(e,t,n){const a="rtl"===e.getAttribute("dir"),{scrollLeft:r,offsetWidth:s,scrollWidth:l}=e;let c=t-r;if(c<0){const e=-r*(a?-1:1);c=Math.max(c,e)}else if(c>0){const e=l-(r+s);c=Math.min(c,e)}if(0===c)return;const d=r+c;if(0===n)return void(e.scrollLeft=d);const u=Date.now();(0,o.T2)((()=>{(0,i.jt)((()=>{const t=Math.min((Date.now()-u)/n,1),a=c*(1-function(e){return 1-(1-e)**3.5}(t));return e.scrollLeft=Math.round(d-a),t<1}))}))}},5723:(e,t,n)=>{n.d(t,{Z:()=>r});var a=n(7361);function r(e,t,n){if(!t&&e===document.activeElement)return;const r=window.getSelection(),i=document.createRange(),o=e.lastChild||e;a.$b||n||o&&o.nodeValue?(i.selectNodeContents(n?e:o),i.collapse(!1),r.removeAllRanges(),r.addRange(i)):e.focus()}},7529:(e,t,n)=>{function a(e){const t="key"in e?e.key:e.code;return t.startsWith("Key")?t.slice(3).toLowerCase():t}n.d(t,{Z:()=>a})},998:(e,t,n)=>{function a(){const e=window.getSelection();let t=e&&e.rangeCount?e.getRangeAt(0).cloneContents():void 0;if(!t||0===t.childElementCount)return;const n=Array.from(t.children).reduce(((e,t)=>1===t.nodeType&&t.classList.contains("message-date-group")?Array.from(t.querySelectorAll(".Message")).reduce(((e,t)=>e.concat(Number(t.dataset.messageId))),e):1===t.nodeType&&t.classList.contains("Message")?e.concat(Number(t.dataset.messageId)):e),[]);for(;t.firstChild;)t.removeChild(t.firstChild);return t=void 0,n}n.d(t,{Z:()=>a})},4532:(e,t,n)=>{n.d(t,{Ay:()=>s,N:()=>r,NS:()=>c,Of:()=>d,Ym:()=>i,pC:()=>l});const a={play:void 0,pause:void 0,seekbackward:void 0,seekforward:void 0,previoustrack:void 0,nexttrack:void 0,stop:void 0,seekTo:void 0};function r(e,t){const{mediaSession:n}=window.navigator;n?(e&&i(e),t&&o(t)):console.warn("MediaSession API not supported in this browser")}function i(e){const{mediaSession:t}=window.navigator;t&&(t.metadata=null!=e?e:null)}function o(e){const{mediaSession:t}=window.navigator;t&&Object.entries({...a,...e}).forEach((e=>{let[n,a]=e;try{t.setActionHandler(n,a)}catch(e){}}))}function s(){const{mediaSession:e}=window.navigator;var t;e&&(e.metadata=null,o(a),e.playbackState&&(e.playbackState="none"),null===(t=e.setPositionState)||void 0===t||t.call(e))}function l(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"none";const{mediaSession:t}=window.navigator;t&&t.playbackState&&(t.playbackState=e)}function c(e){var t;if(!e||void 0===e.position||void 0===e.duration)return;e.position=Math.min(e.position,e.duration);const{mediaSession:n}=window.navigator;null==n||null===(t=n.setPositionState)||void 0===t||t.call(n,e)}function d(e){let{title:t,artist:n,album:a,artwork:r}=e;if("MediaMetadata"in window)return new window.MediaMetadata({title:t,artist:n,album:a,artwork:r})}},3099:(e,t,n)=>{n.d(t,{Z:()=>o});var a=n(6137),r=n(7361);const i={B:a.Vv.Bold,STRONG:a.Vv.Bold,I:a.Vv.Italic,EM:a.Vv.Italic,U:a.Vv.Underline,S:a.Vv.Strike,STRIKE:a.Vv.Strike,DEL:a.Vv.Strike,CODE:a.Vv.Code,PRE:a.Vv.Pre,BLOCKQUOTE:a.Vv.Blockquote};function o(e){const t=document.createElement("div");t.innerHTML=function(e){let t=e.slice(0);return r.op||(t=t.replace(/]+alt="([^"]+)"[^>]*>/gm,"$1")),t=t.replace(/ /g," "),t=t.replace(/
]*)?><\/div>/g,"\n"),t=t.replace(/]*)?>/g,"\n"),t=t.replace(/<\/div>(\s*)
/g,"\n"),t=t.replace(/
/g,"\n"),t=t.replace(/<\/div>/g,""),t=t.replace(/^`{3}(.*[\n\r][^]*?^)`{3}/gm,"
$1
"),t=t.replace(/[`]{3}([^`]+)[`]{3}/g,"
$1
"),t=t.replace(/[`]{1}([^`\n]+)[`]{1}/g,"$1"),t=t.replace(/(^|\s)(?!)(\s|$)/g,"$1$2$3"),t=t.replace(/(^|\s)(?!)(\s|$)/g,"$1$2$3"),t=t.replace(/(^|\s)(?!)(\s|$)/g,"$1$2$3"),t=t.replace(/(^|\s)(?!)(\s|$)/g,`$1$2$3`),t}(e);const n=t.innerText.trim().replace(/\u200b+/g,"");let o=0,s=0;const l=[];function c(e){const{index:t,entity:r}=function(e,t,n){const r=function(e){if(i[e.nodeName])return i[e.nodeName];if("A"===e.nodeName){const t=e;return t.dataset.entityType===a.Vv.MentionName?a.Vv.MentionName:t.dataset.entityType===a.Vv.Url?a.Vv.Url:t.href.startsWith("mailto:")?a.Vv.Email:t.href.startsWith("tel:")?a.Vv.Phone:t.href!==t.textContent?a.Vv.TextUrl:a.Vv.Url}return"SPAN"===e.nodeName?e.dataset.entityType:void 0}(e);if(!r||!e.textContent)return{index:n,entity:void 0};const o=t.indexOf(e.textContent,n),s=o>=0?o:n,l=t.substring(0,s).length,{length:c}=t.substring(s,s+e.textContent.length);let d,u;return r===a.Vv.TextUrl&&(d=e.href),r===a.Vv.MentionName&&(u=e.dataset.userId),{index:s,entity:{type:r,offset:l,length:c,...d&&{url:d},...u&&{userId:u}}}}(e,n,o);r?(o=t,l.push(r)):e.textContent&&(o+=e.textContent.length),e.hasChildNodes()&&s<=3&&(s+=1,Array.from(e.childNodes).forEach(c))}return Array.from(t.childNodes).forEach((e=>{s=1,c(e)})),{text:n,entities:l.length?l:void 0}}},5266:(e,t,n)=>{function a(e){e.dataset.patchedForSafari||(e.addEventListener("play",(()=>{const t=e.currentTime;e.dataset.patchForSafariInProgress="true",e.addEventListener("progress",(function n(){e.buffered.length&&(e.currentTime=e.duration-1,e.addEventListener("progress",(()=>{delete e.dataset.patchForSafariInProgress,e.currentTime=t,e.paused&&!e.dataset.preventPlayAfterPatch&&e.play()}),{once:!0}),e.removeEventListener("progress",n))}))}),{once:!0}),e.dataset.patchedForSafari="true")}function r(e){return Boolean(e.dataset.patchForSafariInProgress)}n.d(t,{B:()=>a,z:()=>r})},3227:(e,t,n)=>{n.d(t,{Z:()=>a});const a=e=>{e.stopPropagation(),e.preventDefault()}},5655:(e,t,n)=>{let a;function r(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"*",t=arguments.length>1?arguments[1]:void 0,n=arguments.length>2&&void 0!==arguments[2]&&arguments[2];a||(a=document.createElement("input"),a.setAttribute("type","file")),a.setAttribute("accept",e),n?a.removeAttribute("multiple"):a.setAttribute("multiple","multiple"),a.onchange=null,a.value="",a.onchange=t,a.click()}n.d(t,{g:()=>r})}}]); -//# sourceMappingURL=13.c4586e903a85e96ce217.js.map \ No newline at end of file diff --git a/dist/13.c4586e903a85e96ce217.js.map b/dist/13.c4586e903a85e96ce217.js.map deleted file mode 100644 index 8c2336348..000000000 --- a/dist/13.c4586e903a85e96ce217.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"13.c4586e903a85e96ce217.js","mappings":"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K,IAAK,IAAK,GAAI,GAAI,IAAK,IAAK,GAAI,IAAK,IAAK,EAAG,GAAI,IAAK,GAAI,IAAK,IAAK,GAAI,GAAI,IAAK,GAAI,IAAK,GAAI,IAAK,IAAK,GAAI,IAAK,IAAK,IAAK,IAAK,GAAI,IAAK,IAAK,IAAK,GAAI,IAAK,GAAI,IAAK,GAE5qCC,EAAY,CAAC,EAAG,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,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","sources":["webpack://telegram-t/./src/components/common/AnimatedEmoji.tsx","webpack://telegram-t/./src/components/common/helpers/waveform.ts","webpack://telegram-t/./src/util/waveform.ts","webpack://telegram-t/./src/components/common/Audio.tsx","webpack://telegram-t/./src/components/common/ChatExtra.tsx","webpack://telegram-t/./src/components/common/DeleteChatModal.tsx","webpack://telegram-t/./src/components/common/Document.tsx","webpack://telegram-t/./src/components/common/DotAnimation.tsx","webpack://telegram-t/./src/components/common/File.tsx","webpack://telegram-t/./src/components/common/GroupChatInfo.tsx","webpack://telegram-t/./src/components/common/LastMessageMeta.tsx","webpack://telegram-t/./src/components/common/Media.tsx","webpack://telegram-t/./src/components/common/MessageOutgoingStatus.tsx","webpack://telegram-t/./src/components/common/NothingFound.tsx","webpack://telegram-t/./src/components/common/Picker.tsx","webpack://telegram-t/./src/components/common/PickerSelectedItem.tsx","webpack://telegram-t/./src/components/common/PrivateChatInfo.tsx","webpack://telegram-t/./src/components/common/ProfilePhoto.tsx","webpack://telegram-t/./src/components/common/ProfileInfo.tsx","webpack://telegram-t/./src/components/common/hooks/usePhotosPreload.ts","webpack://telegram-t/./src/components/common/ReactionStaticEmoji.tsx","webpack://telegram-t/./src/components/common/StickerButton.tsx","webpack://telegram-t/./src/components/common/StickerSetModal.async.tsx","webpack://telegram-t/./src/components/common/TypingStatus.tsx","webpack://telegram-t/./src/components/common/VerifiedIcon.tsx","webpack://telegram-t/./src/components/common/WebLink.tsx","webpack://telegram-t/./src/components/common/helpers/mediaDimensions.ts","webpack://telegram-t/./src/components/common/hooks/useAnimatedEmoji.ts","webpack://telegram-t/./src/components/left/ChatFolderModal.async.tsx","webpack://telegram-t/./src/components/left/main/hooks/useChatAnimationType.ts","webpack://telegram-t/./src/components/left/main/Badge.tsx","webpack://telegram-t/./src/components/left/main/ChatCallStatus.tsx","webpack://telegram-t/./src/components/left/main/Chat.tsx","webpack://telegram-t/./src/components/left/main/EmptyFolder.tsx","webpack://telegram-t/./src/components/left/main/ChatList.tsx","webpack://telegram-t/./src/components/left/search/helpers/getSenderName.ts","webpack://telegram-t/./src/components/middle/composer/CustomSendMenu.async.tsx","webpack://telegram-t/./src/components/middle/composer/DropTarget.tsx","webpack://telegram-t/./src/components/middle/composer/DropArea.tsx","webpack://telegram-t/./src/components/middle/composer/EmojiTooltip.async.tsx","webpack://telegram-t/./src/components/middle/composer/MessageInput.tsx","webpack://telegram-t/./src/components/middle/composer/TextFormatter.tsx","webpack://telegram-t/./src/components/middle/composer/helpers/getFilesFromDataTransferItems.ts","webpack://telegram-t/./src/components/middle/composer/helpers/prepareForRegExp.ts","webpack://telegram-t/./src/components/middle/composer/helpers/selection.ts","webpack://telegram-t/./src/util/memoized.ts","webpack://telegram-t/./src/components/middle/composer/hooks/useEmojiTooltip.ts","webpack://telegram-t/./src/components/middle/composer/hooks/useMentionTooltip.ts","webpack://telegram-t/./src/components/right/hooks/useAsyncRendering.ts","webpack://telegram-t/./src/components/ui/CheckboxGroup.tsx","webpack://telegram-t/./src/components/ui/FloatingActionButton.tsx","webpack://telegram-t/./src/components/ui/ListItem.tsx","webpack://telegram-t/./src/components/ui/Notification.tsx","webpack://telegram-t/./src/components/ui/ProgressSpinner.tsx","webpack://telegram-t/./src/components/ui/Radio.tsx","webpack://telegram-t/./src/components/ui/RadioGroup.tsx","webpack://telegram-t/./src/components/ui/RangeSlider.tsx","webpack://telegram-t/./src/components/ui/SearchInput.tsx","webpack://telegram-t/./src/components/ui/ShowTransition.tsx","webpack://telegram-t/./src/components/ui/Switcher.tsx","webpack://telegram-t/./src/components/ui/Tab.tsx","webpack://telegram-t/./src/components/ui/TabList.tsx","webpack://telegram-t/./src/components/ui/Transition.tsx","webpack://telegram-t/./src/hooks/reducers/useFoldersReducer.ts","webpack://telegram-t/./src/hooks/useAudioPlayer.ts","webpack://telegram-t/./src/hooks/useBuffering.ts","webpack://telegram-t/./src/hooks/useCanvasBlur.ts","webpack://telegram-t/./src/hooks/useChatContextActions.ts","webpack://telegram-t/./src/hooks/useContextMenuHandlers.ts","webpack://telegram-t/./src/hooks/useContextMenuPosition.ts","webpack://telegram-t/./src/hooks/useDebounce.ts","webpack://telegram-t/./src/hooks/useEnsureMessage.ts","webpack://telegram-t/./src/hooks/useFolderManager.ts","webpack://telegram-t/./src/hooks/useHorizontalScroll.ts","webpack://telegram-t/./src/hooks/useInputFocusOnOpen.ts","webpack://telegram-t/./src/hooks/useIntersectionObserver.ts","webpack://telegram-t/./src/hooks/useInterval.ts","webpack://telegram-t/./src/hooks/useLayoutEffectWithPrevDeps.ts","webpack://telegram-t/./src/hooks/useMediaTransition.ts","webpack://telegram-t/./src/hooks/useUniqueId.ts","webpack://telegram-t/./src/hooks/useMediaWithLoadProgress.ts","webpack://telegram-t/./src/hooks/useMouseInside.ts","webpack://telegram-t/./src/hooks/usePrevDuringAnimation.ts","webpack://telegram-t/./src/hooks/useReducer.ts","webpack://telegram-t/./src/components/common/CalendarModal.async.tsx","webpack://telegram-t/./src/hooks/useSchedule.tsx","webpack://telegram-t/./src/hooks/useSendMessageAction.ts","webpack://telegram-t/./src/hooks/useStateRef.ts","webpack://telegram-t/./src/hooks/useTimeout.ts","webpack://telegram-t/./src/hooks/useVideoCleanup.ts","webpack://telegram-t/./src/lib/fastBlur.js","webpack://telegram-t/./src/util/audioPlayer.ts","webpack://telegram-t/./src/util/captureEvents.ts","webpack://telegram-t/./src/util/cssAnimationEndListeners.ts","webpack://telegram-t/./src/util/cycleRestrict.ts","webpack://telegram-t/./src/util/fastSmoothScroll.ts","webpack://telegram-t/./src/util/fastSmoothScrollHorizontal.ts","webpack://telegram-t/./src/util/focusEditableElement.ts","webpack://telegram-t/./src/util/getKeyFromEvent.ts","webpack://telegram-t/./src/util/getMessageIdsForSelectedText.ts","webpack://telegram-t/./src/util/mediaSession.ts","webpack://telegram-t/./src/util/parseMessageInput.ts","webpack://telegram-t/./src/util/patchSafariProgressiveAudio.ts","webpack://telegram-t/./src/util/stopEvent.ts","webpack://telegram-t/./src/util/systemFilesDialog.ts"],"sourcesContent":["import React, {\n FC, memo,\n} from '../../lib/teact/teact';\n\nimport { ApiMediaFormat, ApiSticker } from '../../api/types';\nimport { ActiveEmojiInteraction } from '../../global/types';\n\nimport buildClassName from '../../util/buildClassName';\nimport { ObserveFn, useIsIntersecting } from '../../hooks/useIntersectionObserver';\nimport useMedia from '../../hooks/useMedia';\nimport useMediaTransition from '../../hooks/useMediaTransition';\nimport useAnimatedEmoji from './hooks/useAnimatedEmoji';\nimport { LIKE_STICKER_ID } from './helpers/mediaDimensions';\n\nimport AnimatedSticker from './AnimatedSticker';\n\nimport './AnimatedEmoji.scss';\n\ntype OwnProps = {\n sticker: ApiSticker;\n effect?: ApiSticker;\n isOwn?: boolean;\n soundId?: string;\n observeIntersection?: ObserveFn;\n size?: 'large' | 'medium' | 'small';\n lastSyncTime?: number;\n forceLoadPreview?: boolean;\n messageId?: number;\n chatId?: string;\n activeEmojiInteractions?: ActiveEmojiInteraction[];\n};\n\nconst QUALITY = 1;\n\nconst AnimatedEmoji: FC = ({\n sticker,\n effect,\n isOwn,\n soundId,\n size = 'medium',\n observeIntersection,\n lastSyncTime,\n forceLoadPreview,\n messageId,\n chatId,\n activeEmojiInteractions,\n}) => {\n const {\n markAnimationLoaded,\n isAnimationLoaded,\n ref,\n width,\n style,\n handleClick,\n playKey,\n } = useAnimatedEmoji(size, chatId, messageId, soundId, activeEmojiInteractions, isOwn, undefined, effect?.emoji);\n\n const localMediaHash = `sticker${sticker.id}`;\n\n const isIntersecting = useIsIntersecting(ref, observeIntersection);\n\n const thumbDataUri = sticker.thumbnail?.dataUri;\n const previewBlobUrl = useMedia(\n `${localMediaHash}?size=m`,\n !isIntersecting && !forceLoadPreview,\n ApiMediaFormat.BlobUrl,\n lastSyncTime,\n );\n const transitionClassNames = useMediaTransition(previewBlobUrl);\n\n const mediaData = useMedia(localMediaHash, !isIntersecting, ApiMediaFormat.Lottie, lastSyncTime);\n const isMediaLoaded = Boolean(mediaData);\n\n return (\n \n {!isAnimationLoaded && thumbDataUri && (\n \"\"\n )}\n {!isAnimationLoaded && previewBlobUrl && (\n \"\"\n )}\n {isMediaLoaded && localMediaHash && (\n \n )}\n
\n );\n};\n\nexport default memo(AnimatedEmoji);\n","type IWaveformProps = {\n peak: number;\n fillStyle: string;\n progressFillStyle: string;\n};\n\nexport const MAX_EMPTY_WAVEFORM_POINTS = 30;\nconst SPIKE_WIDTH = 2;\nconst SPIKE_STEP = 4;\nconst SPIKE_RADIUS = 1;\nconst HEIGHT = 23;\n\nexport function renderWaveform(\n canvas: HTMLCanvasElement,\n spikes: number[],\n progress: number,\n {\n peak, fillStyle, progressFillStyle,\n }: IWaveformProps,\n) {\n const width = spikes.length * SPIKE_STEP;\n const height = HEIGHT;\n\n canvas.width = width * 2;\n canvas.height = height * 2;\n canvas.style.width = `${width}px`;\n canvas.style.height = `${height}px`;\n\n const ctx = canvas.getContext('2d')!;\n ctx.scale(2, 2);\n\n spikes.forEach((item, i) => {\n ctx.globalAlpha = (i / spikes.length >= progress) ? 0.5 : 1;\n ctx.fillStyle = progress > i / spikes.length ? progressFillStyle : fillStyle;\n const spikeHeight = Math.max(2, HEIGHT * (item / Math.max(1, peak)));\n roundedRectangle(ctx, i * SPIKE_STEP, height, SPIKE_WIDTH, spikeHeight, SPIKE_RADIUS);\n ctx.fill();\n });\n}\n\nfunction roundedRectangle(\n ctx: CanvasRenderingContext2D, x: number, y: number, width: number, height: number, radius: number,\n) {\n if (width < 2 * radius) {\n radius = width / 2;\n }\n if (height < 2 * radius) {\n radius = height / 2;\n }\n\n ctx.beginPath();\n ctx.moveTo(x + radius, y);\n ctx.arcTo(x + width, y, x + width, y - height, radius);\n ctx.arcTo(x + width, y - height, x, y - height, radius);\n ctx.arcTo(x, y - height, x, y, radius);\n ctx.arcTo(x, y, x + width, y, radius);\n ctx.closePath();\n}\n","/* eslint-disable no-bitwise */\n\n// eslint-disable-next-line max-len\n// Ref: https://github.com/telegramdesktop/tdesktop/blob/0743e71ab6b928d2ee5bae1aed991849b1e2b291/Telegram/SourceFiles/data/data_document.cpp#L1018\nexport function decodeWaveform(encoded5bit: Uint8Array) {\n const bitsCount = encoded5bit.length * 8;\n const valuesCount = Math.floor(bitsCount / 5);\n if (!valuesCount) {\n return [];\n }\n\n // Read each 5 bit of encoded5bit as 0-31 unsigned char.\n // We count the index of the byte in which the desired 5-bit sequence starts.\n // And then we read a uint16 starting from that byte to guarantee to get all of those 5 bits.\n //\n // BUT! if it is the last byte we have, we're not allowed to read a uint16 starting with it.\n // Because it will be an overflow (we'll access one byte after the available memory).\n // We see, that only the last 5 bits could start in the last available byte and be problematic.\n // So we read in a general way all the entries in a general way except the last one.\n const result = Array(valuesCount);\n const bitsData = encoded5bit;\n for (let i = 0, l = valuesCount - 1; i !== l; ++i) {\n const byteIndex = Math.floor((i * 5) / 8);\n const bitShift = Math.floor((i * 5) % 8);\n const value = bitsData[byteIndex] + (bitsData[byteIndex + 1] << 8);\n result[i] = ((value >> bitShift) & 0x1F);\n }\n const lastByteIndex = Math.floor(((valuesCount - 1) * 5) / 8);\n const lastBitShift = Math.floor(((valuesCount - 1) * 5) % 8);\n const lastValue = bitsData[lastByteIndex] + (bitsData[lastByteIndex + 1] << 8);\n result[valuesCount - 1] = (lastValue >> lastBitShift) & 0x1F;\n\n return result;\n}\n\nexport function interpolateArray(data: number[], fitCount: number) {\n let peak = 0;\n const newData = new Array(fitCount);\n const springFactor = data.length / fitCount;\n const leftFiller = data[0];\n const rightFiller = data[data.length - 1];\n for (let i = 0; i < fitCount; i++) {\n const idx = Math.floor(i * springFactor);\n const val = ((data[idx - 1] ?? leftFiller) + (data[idx] ?? leftFiller) + (data[idx + 1] ?? rightFiller)) / 3;\n newData[i] = val;\n if (peak < val) {\n peak = val;\n }\n }\n return { data: newData, peak };\n}\n","import React, {\n FC, memo, useCallback, useEffect, useLayoutEffect, useMemo, useRef, useState,\n} from '../../lib/teact/teact';\nimport { getActions } from '../../global';\n\nimport {\n ApiAudio, ApiMediaFormat, ApiMessage, ApiVoice,\n} from '../../api/types';\nimport { AudioOrigin, ISettings } from '../../types';\n\nimport { IS_SINGLE_COLUMN_LAYOUT } from '../../util/environment';\nimport { formatMediaDateTime, formatMediaDuration, formatPastTimeShort } from '../../util/dateFormat';\nimport {\n getMediaDuration,\n getMediaTransferState,\n getMessageMediaFormat,\n getMessageMediaHash,\n isMessageLocal,\n isOwnMessage,\n} from '../../global/helpers';\nimport { MAX_EMPTY_WAVEFORM_POINTS, renderWaveform } from './helpers/waveform';\nimport buildClassName from '../../util/buildClassName';\nimport renderText from './helpers/renderText';\nimport { getFileSizeString } from './helpers/documentInfo';\nimport { decodeWaveform, interpolateArray } from '../../util/waveform';\nimport useMediaWithLoadProgress from '../../hooks/useMediaWithLoadProgress';\nimport useShowTransition from '../../hooks/useShowTransition';\nimport useBuffering, { BufferedRange } from '../../hooks/useBuffering';\nimport useAudioPlayer from '../../hooks/useAudioPlayer';\nimport useLang, { LangFn } from '../../hooks/useLang';\nimport { captureEvents } from '../../util/captureEvents';\nimport useMedia from '../../hooks/useMedia';\nimport { makeTrackId } from '../../util/audioPlayer';\nimport { getTranslation } from '../../util/langProvider';\n\nimport Button from '../ui/Button';\nimport ProgressSpinner from '../ui/ProgressSpinner';\nimport Link from '../ui/Link';\n\nimport './Audio.scss';\n\ntype OwnProps = {\n theme: ISettings['theme'];\n message: ApiMessage;\n senderTitle?: string;\n uploadProgress?: number;\n origin: AudioOrigin;\n date?: number;\n lastSyncTime?: number;\n className?: string;\n isSelectable?: boolean;\n isSelected?: boolean;\n isDownloading: boolean;\n onPlay: (messageId: number, chatId: string) => void;\n onReadMedia?: () => void;\n onCancelUpload?: () => void;\n onDateClick?: (messageId: number, chatId: string) => void;\n};\n\nconst AVG_VOICE_DURATION = 10;\nconst MIN_SPIKES = IS_SINGLE_COLUMN_LAYOUT ? 20 : 25;\nconst MAX_SPIKES = IS_SINGLE_COLUMN_LAYOUT ? 50 : 75;\n// This is needed for browsers requiring user interaction before playing.\nconst PRELOAD = true;\n\nconst Audio: FC = ({\n theme,\n message,\n senderTitle,\n uploadProgress,\n origin,\n date,\n lastSyncTime,\n className,\n isSelectable,\n isSelected,\n isDownloading,\n onPlay,\n onReadMedia,\n onCancelUpload,\n onDateClick,\n}) => {\n const { cancelMessageMediaDownload, downloadMessageMedia } = getActions();\n\n const { content: { audio, voice, video }, isMediaUnread } = message;\n const isVoice = Boolean(voice || video);\n const isSeeking = useRef(false);\n // eslint-disable-next-line no-null/no-null\n const seekerRef = useRef(null);\n const lang = useLang();\n const { isRtl } = lang;\n\n const [isActivated, setIsActivated] = useState(false);\n const shouldLoad = (isActivated || PRELOAD) && lastSyncTime;\n const coverHash = getMessageMediaHash(message, 'pictogram');\n const coverBlobUrl = useMedia(coverHash, false, ApiMediaFormat.BlobUrl);\n\n const mediaData = useMedia(\n getMessageMediaHash(message, 'inline'),\n !shouldLoad,\n getMessageMediaFormat(message, 'inline'),\n );\n\n const { loadProgress: downloadProgress } = useMediaWithLoadProgress(\n getMessageMediaHash(message, 'download'),\n !isDownloading,\n );\n\n const handleForcePlay = useCallback(() => {\n setIsActivated(true);\n onPlay(message.id, message.chatId);\n }, [message, onPlay]);\n\n const handleTrackChange = useCallback(() => {\n setIsActivated(false);\n }, []);\n\n const {\n isBuffered, bufferedRanges, bufferingHandlers, checkBuffering,\n } = useBuffering();\n\n const {\n isPlaying, playProgress, playPause, setCurrentTime, duration,\n } = useAudioPlayer(\n makeTrackId(message),\n getMediaDuration(message)!,\n isVoice ? 'voice' : 'audio',\n mediaData,\n bufferingHandlers,\n undefined,\n checkBuffering,\n isActivated,\n handleForcePlay,\n handleTrackChange,\n isMessageLocal(message),\n );\n\n const isOwn = isOwnMessage(message);\n const waveformCanvasRef = useWaveformCanvas(theme, voice, (isMediaUnread && !isOwn) ? 1 : playProgress, isOwn);\n\n const withSeekline = isPlaying || (playProgress > 0 && playProgress < 1);\n\n useEffect(() => {\n setIsActivated(isPlaying);\n }, [isPlaying]);\n\n const isLoadingForPlaying = isActivated && !isBuffered;\n\n const {\n isUploading, isTransferring, transferProgress,\n } = getMediaTransferState(\n message,\n uploadProgress || downloadProgress,\n isLoadingForPlaying || isDownloading,\n );\n\n const {\n shouldRender: shouldRenderSpinner,\n transitionClassNames: spinnerClassNames,\n } = useShowTransition(isTransferring);\n\n const shouldRenderCross = shouldRenderSpinner && (isLoadingForPlaying || isUploading);\n\n const handleButtonClick = useCallback(() => {\n if (isUploading) {\n onCancelUpload?.();\n return;\n }\n\n if (!isPlaying) {\n onPlay(message.id, message.chatId);\n }\n\n getActions().setAudioPlayerOrigin({ origin });\n setIsActivated(!isActivated);\n playPause();\n }, [isUploading, isPlaying, isActivated, playPause, onCancelUpload, onPlay, message.id, message.chatId, origin]);\n\n useEffect(() => {\n if (onReadMedia && isMediaUnread && (isPlaying || isDownloading)) {\n onReadMedia();\n }\n }, [isPlaying, isMediaUnread, onReadMedia, isDownloading]);\n\n const handleDownloadClick = useCallback(() => {\n if (isDownloading) {\n cancelMessageMediaDownload({ message });\n } else {\n downloadMessageMedia({ message });\n }\n }, [cancelMessageMediaDownload, downloadMessageMedia, isDownloading, message]);\n\n const handleSeek = useCallback((e: MouseEvent | TouchEvent) => {\n if (isSeeking.current && seekerRef.current) {\n const { width, left } = seekerRef.current.getBoundingClientRect();\n const clientX = e instanceof MouseEvent ? e.clientX : e.targetTouches[0].clientX;\n e.stopPropagation(); // Prevent Slide-to-Reply activation\n // Prevent track skipping while seeking near end\n setCurrentTime(Math.max(Math.min(duration * ((clientX - left) / width), duration - 0.1), 0.001));\n }\n }, [duration, setCurrentTime]);\n\n const handleStartSeek = useCallback((e: MouseEvent | TouchEvent) => {\n if (e instanceof MouseEvent && e.button === 2) return;\n isSeeking.current = true;\n handleSeek(e);\n }, [handleSeek]);\n\n const handleStopSeek = useCallback(() => {\n isSeeking.current = false;\n }, []);\n\n const handleDateClick = useCallback(() => {\n onDateClick!(message.id, message.chatId);\n }, [onDateClick, message.id, message.chatId]);\n\n useEffect(() => {\n if (!seekerRef.current || !withSeekline) return undefined;\n return captureEvents(seekerRef.current, {\n onCapture: handleStartSeek,\n onRelease: handleStopSeek,\n onClick: handleStopSeek,\n onDrag: handleSeek,\n });\n }, [withSeekline, handleStartSeek, handleSeek, handleStopSeek]);\n\n function renderFirstLine() {\n if (isVoice) {\n return senderTitle || 'Voice';\n }\n\n const { title, fileName } = audio!;\n\n return title || fileName;\n }\n\n function renderSecondLine() {\n if (isVoice) {\n return (\n
\n {formatMediaDuration((voice || video)!.duration)}\n
\n );\n }\n\n const { performer } = audio!;\n\n return (\n
\n {formatMediaDuration(duration)}\n \n {performer && {renderText(performer)}}\n {performer && senderTitle && }\n {senderTitle && {renderText(senderTitle)}}\n
\n );\n }\n\n const fullClassName = buildClassName(\n 'Audio',\n className,\n isOwn && origin === AudioOrigin.Inline && 'own',\n (origin === AudioOrigin.Search || origin === AudioOrigin.SharedMedia) && 'bigger',\n isSelected && 'audio-is-selected',\n );\n\n const buttonClassNames = ['toggle-play'];\n if (shouldRenderCross) {\n buttonClassNames.push('loading');\n } else {\n buttonClassNames.push(isPlaying ? 'pause' : 'play');\n }\n\n const contentClassName = buildClassName('content', withSeekline && 'with-seekline');\n\n function renderWithTitle() {\n return (\n
\n
\n

{renderText(renderFirstLine())}

\n\n
\n {date && (\n \n {formatPastTimeShort(lang, date * 1000)}\n \n )}\n
\n
\n\n {withSeekline && (\n
\n \n {playProgress < 1 && `${formatMediaDuration(duration * playProgress, duration)}`}\n \n {renderSeekline(playProgress, bufferedRanges, seekerRef)}\n
\n )}\n {!withSeekline && renderSecondLine()}\n
\n );\n }\n\n return (\n
\n {isSelectable && (\n
\n {isSelected && }\n
\n )}\n \n \n \n \n {shouldRenderSpinner && (\n
\n \n
\n )}\n {audio && !isUploading && (\n \n \n \n )}\n {origin === AudioOrigin.Search && renderWithTitle()}\n {origin !== AudioOrigin.Search && audio && renderAudio(\n lang,\n audio,\n duration,\n isPlaying,\n playProgress,\n bufferedRanges,\n seekerRef,\n (isDownloading || isUploading),\n date,\n transferProgress,\n onDateClick ? handleDateClick : undefined,\n )}\n {origin === AudioOrigin.SharedMedia && (voice || video) && renderWithTitle()}\n {origin === AudioOrigin.Inline && voice && (\n renderVoice(voice, seekerRef, waveformCanvasRef, playProgress, isMediaUnread)\n )}\n
\n );\n};\n\nfunction renderAudio(\n lang: LangFn,\n audio: ApiAudio,\n duration: number,\n isPlaying: boolean,\n playProgress: number,\n bufferedRanges: BufferedRange[],\n seekerRef: React.Ref,\n showProgress?: boolean,\n date?: number,\n progress?: number,\n handleDateClick?: NoneToVoidFunction,\n) {\n const {\n title, performer, fileName,\n } = audio;\n const showSeekline = isPlaying || (playProgress > 0 && playProgress < 1);\n const { isRtl } = getTranslation;\n\n return (\n
\n

{renderText(title || fileName)}

\n {showSeekline && (\n
\n \n {formatMediaDuration(duration * playProgress, duration)}\n \n {renderSeekline(playProgress, bufferedRanges, seekerRef)}\n
\n )}\n {!showSeekline && showProgress && (\n
\n {progress ? `${getFileSizeString(audio!.size * progress)} / ` : undefined}{getFileSizeString(audio!.size)}\n
\n )}\n {!showSeekline && !showProgress && (\n
\n {formatMediaDuration(duration)}\n \n {renderText(performer || 'Unknown')}\n {date && (\n <>\n \n \n {formatMediaDateTime(lang, date * 1000, true)}\n \n \n )}\n
\n )}\n
\n );\n}\n\nfunction renderVoice(\n voice: ApiVoice,\n seekerRef: React.Ref,\n waveformCanvasRef: React.Ref,\n playProgress: number,\n isMediaUnread?: boolean,\n) {\n return (\n
\n \n \n
\n

\n {playProgress === 0 ? formatMediaDuration(voice.duration) : formatMediaDuration(voice.duration * playProgress)}\n

\n
\n );\n}\n\nfunction useWaveformCanvas(\n theme: ISettings['theme'],\n voice?: ApiVoice,\n playProgress = 0,\n isOwn = false,\n) {\n // eslint-disable-next-line no-null/no-null\n const canvasRef = useRef(null);\n\n const { data: spikes, peak } = useMemo(() => {\n if (!voice) {\n return undefined;\n }\n\n const { waveform, duration } = voice;\n if (!waveform) {\n return {\n data: new Array(Math.min(duration, MAX_EMPTY_WAVEFORM_POINTS)).fill(0),\n peak: 0,\n };\n }\n\n const durationFactor = Math.min(duration / AVG_VOICE_DURATION, 1);\n const spikesCount = Math.round(MIN_SPIKES + (MAX_SPIKES - MIN_SPIKES) * durationFactor);\n const decodedWaveform = decodeWaveform(new Uint8Array(waveform));\n\n return interpolateArray(decodedWaveform, spikesCount);\n }, [voice]) || {};\n\n useLayoutEffect(() => {\n const canvas = canvasRef.current;\n\n if (!canvas || !spikes || peak === undefined) {\n return;\n }\n\n const fillColor = theme === 'dark' ? '#494A78' : '#ADD3F7';\n const fillOwnColor = theme === 'dark' ? '#B7ABED' : '#AEDFA4';\n const progressFillColor = theme === 'dark' ? '#8774E1' : '#3390EC';\n const progressFillOwnColor = theme === 'dark' ? '#FFFFFF' : '#4FAE4E';\n\n renderWaveform(canvas, spikes, playProgress, {\n peak,\n fillStyle: isOwn ? fillOwnColor : fillColor,\n progressFillStyle: isOwn ? progressFillOwnColor : progressFillColor,\n });\n }, [isOwn, peak, playProgress, spikes, theme]);\n\n return canvasRef;\n}\n\nfunction renderSeekline(\n playProgress: number,\n bufferedRanges: BufferedRange[],\n seekerRef: React.Ref,\n) {\n return (\n }\n >\n {bufferedRanges.map(({ start, end }) => (\n \n ))}\n \n \n \n \n \n \n
\n );\n}\n\nexport default memo(Audio);\n","import React, {\n FC, memo, useCallback, useEffect,\n} from '../../lib/teact/teact';\nimport { getActions, withGlobal } from '../../global';\n\nimport { GlobalState } from '../../global/types';\nimport { ApiChat, ApiCountryCode, ApiUser } from '../../api/types';\n\nimport {\n selectChat, selectNotifyExceptions, selectNotifySettings, selectUser,\n} from '../../global/selectors';\nimport {\n getChatDescription, getChatLink, getHasAdminRight, isChatChannel, isUserId, isUserRightBanned, selectIsChatMuted,\n} from '../../global/helpers';\nimport renderText from './helpers/renderText';\nimport { copyTextToClipboard } from '../../util/clipboard';\nimport { formatPhoneNumberWithCode } from '../../util/phoneNumber';\nimport useLang from '../../hooks/useLang';\n\nimport ListItem from '../ui/ListItem';\nimport Switcher from '../ui/Switcher';\n\ntype OwnProps = {\n chatOrUserId: string;\n forceShowSelf?: boolean;\n};\n\ntype StateProps =\n {\n user?: ApiUser;\n chat?: ApiChat;\n canInviteUsers?: boolean;\n isMuted?: boolean;\n phoneCodeList: ApiCountryCode[];\n }\n & Pick;\n\nconst ChatExtra: FC = ({\n lastSyncTime,\n user,\n chat,\n forceShowSelf,\n canInviteUsers,\n isMuted,\n phoneCodeList,\n}) => {\n const {\n loadFullUser,\n showNotification,\n updateChatMutedState,\n } = getActions();\n\n const {\n id: userId,\n fullInfo,\n username,\n phoneNumber,\n isSelf,\n } = user || {};\n const { id: chatId } = chat || {};\n const lang = useLang();\n\n useEffect(() => {\n if (lastSyncTime && userId) {\n loadFullUser({ userId });\n }\n }, [loadFullUser, userId, lastSyncTime]);\n\n const handleNotificationChange = useCallback(() => {\n updateChatMutedState({ chatId, isMuted: !isMuted });\n }, [chatId, isMuted, updateChatMutedState]);\n\n if (!chat || chat.isRestricted || (isSelf && !forceShowSelf)) {\n return undefined;\n }\n\n function copy(text: string, entity: string) {\n copyTextToClipboard(text);\n showNotification({ message: `${entity} was copied` });\n }\n\n const formattedNumber = phoneNumber && formatPhoneNumberWithCode(phoneCodeList, phoneNumber);\n const link = getChatLink(chat);\n const description = (fullInfo?.bio) || getChatDescription(chat);\n\n return (\n
\n {formattedNumber && Boolean(formattedNumber.length) && (\n // eslint-disable-next-line react/jsx-no-bind\n copy(formattedNumber, lang('Phone'))}>\n {formattedNumber}\n {lang('Phone')}\n \n )}\n {username && (\n copy(`@${username}`, lang('Username'))}\n >\n {renderText(username)}\n {lang('Username')}\n \n )}\n {description && Boolean(description.length) && (\n \n \n {renderText(description, ['br', 'links', 'emoji'])}\n \n {lang(userId ? 'UserBio' : 'Info')}\n \n )}\n {(canInviteUsers || !username) && link && (\n copy(link, lang('SetUrlPlaceholder'))}\n >\n
{link}
\n {lang('SetUrlPlaceholder')}\n \n )}\n {!forceShowSelf && (\n \n {lang('Notifications')}\n \n \n )}\n
\n );\n};\n\nexport default memo(withGlobal(\n (global, { chatOrUserId }): StateProps => {\n const { lastSyncTime, countryList: { phoneCodes: phoneCodeList } } = global;\n\n const chat = chatOrUserId ? selectChat(global, chatOrUserId) : undefined;\n const user = isUserId(chatOrUserId) ? selectUser(global, chatOrUserId) : undefined;\n const isMuted = chat && selectIsChatMuted(chat, selectNotifySettings(global), selectNotifyExceptions(global));\n\n const canInviteUsers = chat && !user && (\n (!isChatChannel(chat) && !isUserRightBanned(chat, 'inviteUsers'))\n || getHasAdminRight(chat, 'inviteUsers')\n );\n\n return {\n lastSyncTime, phoneCodeList, chat, user, canInviteUsers, isMuted,\n };\n },\n)(ChatExtra));\n","import React, { FC, useCallback, memo } from '../../lib/teact/teact';\nimport { getActions, withGlobal } from '../../global';\n\nimport { ApiChat } from '../../api/types';\n\nimport { selectIsChatWithSelf, selectUser } from '../../global/selectors';\nimport {\n isUserId,\n isUserBot,\n getUserFirstOrLastName,\n getPrivateChatUserId,\n isChatBasicGroup,\n isChatSuperGroup,\n isChatChannel,\n getChatTitle,\n} from '../../global/helpers';\nimport useLang from '../../hooks/useLang';\nimport renderText from './helpers/renderText';\n\nimport Avatar from './Avatar';\nimport Modal from '../ui/Modal';\nimport Button from '../ui/Button';\n\nimport './DeleteChatModal.scss';\n\nexport type OwnProps = {\n isOpen: boolean;\n chat: ApiChat;\n onClose: () => void;\n onCloseAnimationEnd?: () => void;\n};\n\ntype StateProps = {\n isChannel: boolean;\n isChatWithSelf?: boolean;\n isBot?: boolean;\n isPrivateChat: boolean;\n isBasicGroup: boolean;\n isSuperGroup: boolean;\n currentUserId: string | undefined;\n canDeleteForAll?: boolean;\n contactName?: string;\n};\n\nconst DeleteChatModal: FC = ({\n isOpen,\n chat,\n isChannel,\n isPrivateChat,\n isChatWithSelf,\n isBot,\n isBasicGroup,\n isSuperGroup,\n currentUserId,\n canDeleteForAll,\n contactName,\n onClose,\n onCloseAnimationEnd,\n}) => {\n const {\n leaveChannel,\n deleteHistory,\n deleteChannel,\n deleteChatUser,\n blockContact,\n } = getActions();\n\n const lang = useLang();\n const chatTitle = getChatTitle(lang, chat);\n\n const handleDeleteMessageForAll = useCallback(() => {\n deleteHistory({ chatId: chat.id, shouldDeleteForAll: true });\n\n onClose();\n }, [deleteHistory, chat.id, onClose]);\n\n const handleDeleteAndStop = useCallback(() => {\n deleteHistory({ chatId: chat.id, shouldDeleteForAll: true });\n blockContact({ contactId: chat.id, accessHash: chat.accessHash });\n\n onClose();\n }, [deleteHistory, chat.id, chat.accessHash, blockContact, onClose]);\n\n const handleDeleteChat = useCallback(() => {\n if (isPrivateChat) {\n deleteHistory({ chatId: chat.id, shouldDeleteForAll: false });\n } else if (isBasicGroup) {\n deleteChatUser({ chatId: chat.id, userId: currentUserId });\n deleteHistory({ chatId: chat.id, shouldDeleteForAll: false });\n } else if ((isChannel || isSuperGroup) && !chat.isCreator) {\n leaveChannel({ chatId: chat.id });\n } else if ((isChannel || isSuperGroup) && chat.isCreator) {\n deleteChannel({ chatId: chat.id });\n }\n onClose();\n }, [\n isPrivateChat,\n isBasicGroup,\n isChannel,\n isSuperGroup,\n currentUserId,\n chat.isCreator,\n chat.id,\n onClose,\n deleteHistory,\n deleteChatUser,\n leaveChannel,\n deleteChannel,\n ]);\n\n const handleLeaveChat = useCallback(() => {\n if (isChannel || isSuperGroup) {\n leaveChannel({ chatId: chat.id });\n onClose();\n } else {\n handleDeleteChat();\n }\n }, [chat.id, handleDeleteChat, isChannel, isSuperGroup, leaveChannel, onClose]);\n\n function renderHeader() {\n return (\n
\n \n

{lang(renderTitle())}

\n
\n );\n }\n\n function renderTitle() {\n if (isChannel && !chat.isCreator) {\n return 'LeaveChannel';\n }\n\n if (isChannel && chat.isCreator) {\n return 'ChannelDelete';\n }\n\n if (isBasicGroup || isSuperGroup) {\n return 'Group.LeaveGroup';\n }\n\n return 'DeleteChatUser';\n }\n\n function renderMessage() {\n if (isChannel && chat.isCreator) {\n return

{renderText(lang('ChatList.DeleteAndLeaveGroupConfirmation', chatTitle), ['simple_markdown'])}

;\n }\n\n if ((isChannel && !chat.isCreator) || isBasicGroup || isSuperGroup) {\n return

{renderText(lang('ChannelLeaveAlertWithName', chatTitle), ['simple_markdown'])}

;\n }\n\n return

{renderText(lang('ChatList.DeleteChatConfirmation', contactName), ['simple_markdown'])}

;\n }\n\n function renderActionText() {\n if (isChannel && !chat.isCreator) {\n return 'LeaveChannel';\n }\n if (isChannel && chat.isCreator) {\n return 'Chat.Input.Delete';\n }\n\n if (isBasicGroup || isSuperGroup) {\n return 'Group.LeaveGroup';\n }\n\n return canDeleteForAll ? 'ChatList.DeleteForCurrentUser' : 'Delete';\n }\n\n return (\n \n {renderMessage()}\n {isBot && (\n \n )}\n {canDeleteForAll && (\n \n )}\n {!isPrivateChat && chat.isCreator && (\n \n )}\n \n {lang(renderActionText())}\n \n \n \n );\n};\n\nexport default memo(withGlobal(\n (global, { chat }): StateProps => {\n const isPrivateChat = isUserId(chat.id);\n const isChatWithSelf = selectIsChatWithSelf(global, chat.id);\n const user = isPrivateChat && selectUser(global, getPrivateChatUserId(chat)!);\n const isBot = user && isUserBot(user) && !chat.isSupport;\n const canDeleteForAll = (isPrivateChat && !isChatWithSelf && !isBot);\n const contactName = isPrivateChat\n ? getUserFirstOrLastName(selectUser(global, getPrivateChatUserId(chat)!))\n : undefined;\n\n return {\n isPrivateChat,\n isChatWithSelf,\n isBot,\n isChannel: isChatChannel(chat),\n isBasicGroup: isChatBasicGroup(chat),\n isSuperGroup: isChatSuperGroup(chat),\n currentUserId: global.currentUserId,\n canDeleteForAll,\n contactName,\n };\n },\n)(DeleteChatModal));\n","import React, {\n FC, useCallback, memo, useRef, useEffect, useState,\n} from '../../lib/teact/teact';\nimport { getActions } from '../../global';\n\nimport { ApiMessage } from '../../api/types';\n\nimport { getDocumentExtension, getDocumentHasPreview } from './helpers/documentInfo';\nimport {\n getMediaTransferState,\n getMessageMediaHash,\n getMessageMediaThumbDataUri,\n isMessageDocumentVideo,\n} from '../../global/helpers';\nimport { ObserveFn, useIsIntersecting } from '../../hooks/useIntersectionObserver';\nimport useMediaWithLoadProgress from '../../hooks/useMediaWithLoadProgress';\nimport useMedia from '../../hooks/useMedia';\nimport useFlag from '../../hooks/useFlag';\n\nimport File from './File';\n\ntype OwnProps = {\n message: ApiMessage;\n observeIntersection?: ObserveFn;\n smaller?: boolean;\n isSelected?: boolean;\n isSelectable?: boolean;\n canAutoLoad?: boolean;\n uploadProgress?: number;\n withDate?: boolean;\n datetime?: number;\n className?: string;\n sender?: string;\n autoLoadFileMaxSizeMb?: number;\n isDownloading: boolean;\n onCancelUpload?: () => void;\n onMediaClick?: () => void;\n onDateClick?: (messageId: number, chatId: string) => void;\n};\n\nconst BYTES_PER_MB = 1024 * 1024;\n\nconst Document: FC = ({\n message,\n observeIntersection,\n smaller,\n canAutoLoad,\n autoLoadFileMaxSizeMb,\n uploadProgress,\n withDate,\n datetime,\n className,\n sender,\n isSelected,\n isSelectable,\n onCancelUpload,\n onMediaClick,\n onDateClick,\n isDownloading,\n}) => {\n const dispatch = getActions();\n\n // eslint-disable-next-line no-null/no-null\n const ref = useRef(null);\n\n const document = message.content.document!;\n const { fileName, size, timestamp } = document;\n const extension = getDocumentExtension(document) || '';\n\n const isIntersecting = useIsIntersecting(ref, observeIntersection);\n const [wasIntersected, markIntersected] = useFlag();\n useEffect(() => {\n if (isIntersecting) {\n markIntersected();\n }\n }, [isIntersecting, markIntersected]);\n\n // Auto-loading does not use global download manager because requires additional click to save files locally\n const [isLoadAllowed, setIsLoadAllowed] = useState(\n canAutoLoad && (!autoLoadFileMaxSizeMb || size <= autoLoadFileMaxSizeMb * BYTES_PER_MB),\n );\n\n const shouldDownload = Boolean(isDownloading || (isLoadAllowed && wasIntersected));\n\n const documentHash = getMessageMediaHash(message, 'download');\n const { loadProgress: downloadProgress, mediaData } = useMediaWithLoadProgress(\n documentHash, !shouldDownload, undefined, undefined, undefined, true,\n );\n const isLoaded = Boolean(mediaData);\n\n const {\n isUploading, isTransferring, transferProgress,\n } = getMediaTransferState(message, uploadProgress || downloadProgress, shouldDownload && !isLoaded);\n\n const hasPreview = getDocumentHasPreview(document);\n const thumbDataUri = hasPreview ? getMessageMediaThumbDataUri(message) : undefined;\n const localBlobUrl = hasPreview ? document.previewBlobUrl : undefined;\n const previewData = useMedia(getMessageMediaHash(message, 'pictogram'), !isIntersecting);\n\n const withMediaViewer = onMediaClick && Boolean(document.mediaType);\n\n const handleClick = useCallback(() => {\n if (isUploading) {\n if (onCancelUpload) {\n onCancelUpload();\n }\n return;\n }\n\n if (isDownloading) {\n dispatch.cancelMessageMediaDownload({ message });\n return;\n }\n\n if (isTransferring) {\n setIsLoadAllowed(false);\n return;\n }\n\n if (withMediaViewer) {\n onMediaClick!();\n } else {\n dispatch.downloadMessageMedia({ message });\n }\n }, [\n isUploading, isDownloading, isTransferring, withMediaViewer, onCancelUpload, dispatch, message, onMediaClick,\n ]);\n\n const handleDateClick = useCallback(() => {\n onDateClick!(message.id, message.chatId);\n }, [onDateClick, message.id, message.chatId]);\n\n return (\n \n );\n};\n\nexport default memo(Document);\n","import React, { FC } from '../../lib/teact/teact';\n\nimport useLang from '../../hooks/useLang';\nimport buildClassName from '../../util/buildClassName';\n\nimport './DotAnimation.scss';\n\ntype OwnProps = {\n content: string;\n className?: string;\n};\n\nconst DotAnimation: FC = ({ content, className }) => {\n const lang = useLang();\n return (\n \n {content}\n \n \n );\n};\n\nexport default DotAnimation;\n","import { RefObject } from 'react';\nimport React, { FC, memo, useRef } from '../../lib/teact/teact';\n\nimport useShowTransition from '../../hooks/useShowTransition';\nimport useMediaTransition from '../../hooks/useMediaTransition';\nimport buildClassName from '../../util/buildClassName';\nimport { formatMediaDateTime, formatPastTimeShort } from '../../util/dateFormat';\nimport { getColorFromExtension, getFileSizeString } from './helpers/documentInfo';\nimport { getDocumentThumbnailDimensions } from './helpers/mediaDimensions';\nimport renderText from './helpers/renderText';\nimport useLang from '../../hooks/useLang';\n\nimport ProgressSpinner from '../ui/ProgressSpinner';\nimport Link from '../ui/Link';\n\nimport './File.scss';\n\ntype OwnProps = {\n ref?: RefObject;\n name: string;\n extension?: string;\n size: number;\n timestamp?: number;\n sender?: string;\n thumbnailDataUri?: string;\n previewData?: string;\n className?: string;\n smaller?: boolean;\n isTransferring?: boolean;\n isUploading?: boolean;\n isSelectable?: boolean;\n isSelected?: boolean;\n transferProgress?: number;\n actionIcon?: string;\n onClick?: () => void;\n onDateClick?: (e: React.MouseEvent) => void;\n};\n\nconst File: FC = ({\n ref,\n name,\n size,\n extension = '',\n timestamp,\n sender,\n thumbnailDataUri,\n previewData,\n className,\n smaller,\n isTransferring,\n isUploading,\n isSelectable,\n isSelected,\n transferProgress,\n actionIcon,\n onClick,\n onDateClick,\n}) => {\n const lang = useLang();\n // eslint-disable-next-line no-null/no-null\n let elementRef = useRef(null);\n if (ref) {\n elementRef = ref;\n }\n\n const transitionClassNames = useMediaTransition(previewData);\n const {\n shouldRender: shouldSpinnerRender,\n transitionClassNames: spinnerClassNames,\n } = useShowTransition(isTransferring, undefined, true);\n\n const color = getColorFromExtension(extension);\n const sizeString = getFileSizeString(size);\n\n const { width, height } = getDocumentThumbnailDimensions(smaller);\n\n const fullClassName = buildClassName(\n 'File',\n className,\n smaller && 'smaller',\n onClick && !isUploading && 'interactive',\n isSelected && 'file-is-selected',\n );\n\n return (\n
\n {isSelectable && (\n
\n {isSelected && }\n
\n )}\n
\n {thumbnailDataUri || previewData ? (\n
\n \n \n
\n ) : (\n
\n {extension.length <= 4 && (\n {extension}\n )}\n
\n )}\n {shouldSpinnerRender && (\n
\n \n
\n )}\n {onClick && (\n \n )}\n
\n
\n
{renderText(name)}
\n
\n \n {isTransferring && transferProgress ? `${Math.round(transferProgress * 100)}%` : sizeString}\n \n {sender && {renderText(sender)}}\n {!sender && timestamp && (\n <>\n \n {formatMediaDateTime(lang, timestamp * 1000, true)}\n \n )}\n
\n
\n {sender && timestamp && (\n {formatPastTimeShort(lang, timestamp * 1000)}\n )}\n
\n );\n};\n\nexport default memo(File);\n","import { MouseEvent as ReactMouseEvent } from 'react';\nimport React, {\n FC, useEffect, useCallback, memo,\n} from '../../lib/teact/teact';\nimport { getActions, withGlobal } from '../../global';\n\nimport { ApiChat, ApiTypingStatus } from '../../api/types';\nimport { GlobalState } from '../../global/types';\nimport { MediaViewerOrigin } from '../../types';\n\nimport {\n getChatTypeString,\n getChatTitle,\n isChatSuperGroup,\n} from '../../global/helpers';\nimport { selectChat, selectChatMessages, selectChatOnlineCount } from '../../global/selectors';\nimport renderText from './helpers/renderText';\nimport useLang, { LangFn } from '../../hooks/useLang';\n\nimport Avatar from './Avatar';\nimport VerifiedIcon from './VerifiedIcon';\nimport TypingStatus from './TypingStatus';\nimport DotAnimation from './DotAnimation';\n\ntype OwnProps = {\n chatId: string;\n typingStatus?: ApiTypingStatus;\n avatarSize?: 'small' | 'medium' | 'large' | 'jumbo';\n status?: string;\n withDots?: boolean;\n withMediaViewer?: boolean;\n withUsername?: boolean;\n withFullInfo?: boolean;\n withUpdatingStatus?: boolean;\n withChatType?: boolean;\n noRtl?: boolean;\n};\n\ntype StateProps =\n {\n chat?: ApiChat;\n onlineCount?: number;\n areMessagesLoaded: boolean;\n }\n & Pick;\n\nconst GroupChatInfo: FC = ({\n typingStatus,\n avatarSize = 'medium',\n status,\n withDots,\n withMediaViewer,\n withUsername,\n withFullInfo,\n withUpdatingStatus,\n withChatType,\n noRtl,\n chat,\n onlineCount,\n areMessagesLoaded,\n lastSyncTime,\n}) => {\n const {\n loadFullChat,\n openMediaViewer,\n } = getActions();\n\n const isSuperGroup = chat && isChatSuperGroup(chat);\n const { id: chatId, isMin, isRestricted } = chat || {};\n\n useEffect(() => {\n if (chatId && !isMin && withFullInfo && lastSyncTime) {\n loadFullChat({ chatId });\n }\n }, [chatId, isMin, lastSyncTime, withFullInfo, loadFullChat, isSuperGroup]);\n\n const handleAvatarViewerOpen = useCallback((e: ReactMouseEvent, hasPhoto: boolean) => {\n if (chat && hasPhoto) {\n e.stopPropagation();\n openMediaViewer({\n avatarOwnerId: chat.id,\n origin: avatarSize === 'jumbo' ? MediaViewerOrigin.ProfileAvatar : MediaViewerOrigin.MiddleHeaderAvatar,\n });\n }\n }, [chat, avatarSize, openMediaViewer]);\n\n const lang = useLang();\n\n if (!chat) {\n return undefined;\n }\n\n function renderStatusOrTyping() {\n if (status) {\n return withDots ? (\n \n ) : (\n {status}\n );\n }\n\n if (withUpdatingStatus && !areMessagesLoaded && !isRestricted) {\n return (\n \n );\n }\n\n if (!chat) {\n return undefined;\n }\n\n if (typingStatus) {\n return ;\n }\n\n if (withChatType) {\n return (\n {lang(getChatTypeString(chat))}\n );\n }\n\n const handle = withUsername ? chat.username : undefined;\n const groupStatus = getGroupStatus(lang, chat);\n const onlineStatus = onlineCount ? `, ${lang('OnlineCount', onlineCount, 'i')}` : undefined;\n\n return (\n \n {handle && {handle}}\n {groupStatus}\n {onlineStatus && {onlineStatus}}\n \n );\n }\n\n return (\n
\n \n
\n
\n

{renderText(getChatTitle(lang, chat))}

\n {chat.isVerified && }\n
\n {renderStatusOrTyping()}\n
\n
\n );\n};\n\nfunction getGroupStatus(lang: LangFn, chat: ApiChat) {\n const chatTypeString = lang(getChatTypeString(chat));\n const { membersCount } = chat;\n\n if (chat.isRestricted) {\n return chatTypeString === 'Channel' ? 'channel is inaccessible' : 'group is inaccessible';\n }\n\n if (!membersCount) {\n return chatTypeString;\n }\n\n return chatTypeString === 'Channel'\n ? lang('Subscribers', membersCount, 'i')\n : lang('Members', membersCount, 'i');\n}\n\nexport default memo(withGlobal(\n (global, { chatId }): StateProps => {\n const { lastSyncTime } = global;\n const chat = selectChat(global, chatId);\n const onlineCount = chat ? selectChatOnlineCount(global, chat) : undefined;\n const areMessagesLoaded = Boolean(selectChatMessages(global, chatId));\n\n return {\n lastSyncTime, chat, onlineCount, areMessagesLoaded,\n };\n },\n)(GroupChatInfo));\n","import React, { FC, memo } from '../../lib/teact/teact';\n\nimport { ApiMessage, ApiMessageOutgoingStatus } from '../../api/types';\n\nimport { formatPastTimeShort } from '../../util/dateFormat';\nimport useLang from '../../hooks/useLang';\n\nimport MessageOutgoingStatus from './MessageOutgoingStatus';\n\nimport './LastMessageMeta.scss';\n\ntype OwnProps = {\n message: ApiMessage;\n outgoingStatus?: ApiMessageOutgoingStatus;\n};\n\nconst LastMessageMeta: FC = ({ message, outgoingStatus }) => {\n const lang = useLang();\n return (\n
\n {outgoingStatus && (\n \n )}\n {formatPastTimeShort(lang, message.date * 1000)}\n
\n );\n};\n\nexport default memo(LastMessageMeta);\n","import React, {\n FC, memo, useCallback, useRef,\n} from '../../lib/teact/teact';\n\nimport { ApiMessage } from '../../api/types';\n\nimport { formatMediaDuration } from '../../util/dateFormat';\nimport stopEvent from '../../util/stopEvent';\nimport {\n getMessageHtmlId,\n getMessageMediaHash,\n getMessageMediaThumbDataUri,\n getMessageVideo,\n} from '../../global/helpers';\nimport buildClassName from '../../util/buildClassName';\nimport useMedia from '../../hooks/useMedia';\nimport useMediaTransition from '../../hooks/useMediaTransition';\nimport { ObserveFn, useIsIntersecting } from '../../hooks/useIntersectionObserver';\n\nimport './Media.scss';\n\ntype OwnProps = {\n message: ApiMessage;\n idPrefix?: string;\n isProtected?: boolean;\n observeIntersection?: ObserveFn;\n onClick?: (messageId: number, chatId: string) => void;\n};\n\nconst Media: FC = ({\n message,\n idPrefix = 'shared-media',\n isProtected,\n observeIntersection,\n onClick,\n}) => {\n // eslint-disable-next-line no-null/no-null\n const ref = useRef(null);\n\n const isIntersecting = useIsIntersecting(ref, observeIntersection);\n const thumbDataUri = getMessageMediaThumbDataUri(message);\n const mediaBlobUrl = useMedia(getMessageMediaHash(message, 'pictogram'), !isIntersecting);\n const transitionClassNames = useMediaTransition(mediaBlobUrl);\n\n const video = getMessageVideo(message);\n\n const handleClick = useCallback(() => {\n onClick!(message.id, message.chatId);\n }, [message.id, message.chatId, onClick]);\n\n return (\n \n \n \n {video && {video.isGif ? 'GIF' : formatMediaDuration(video.duration)}}\n {isProtected && }\n
\n );\n};\n\nexport default memo(Media);\n","import React, { FC, memo } from '../../lib/teact/teact';\n\nimport { ApiMessageOutgoingStatus } from '../../api/types';\n\nimport Transition from '../ui/Transition';\n\nimport './MessageOutgoingStatus.scss';\n\ntype OwnProps = {\n status: ApiMessageOutgoingStatus;\n};\n\nenum Keys {\n failed, pending, succeeded, read,\n}\n\nconst MessageOutgoingStatus: FC = ({ status }) => {\n return (\n
\n \n \n \n
\n );\n};\n\nexport default memo(MessageOutgoingStatus);\n","import React, { FC, memo } from '../../lib/teact/teact';\n\nimport buildClassName from '../../util/buildClassName';\nimport useShowTransition from '../../hooks/useShowTransition';\nimport renderText from './helpers/renderText';\nimport useLang from '../../hooks/useLang';\n\nimport './NothingFound.scss';\n\ninterface OwnProps {\n text?: string;\n description?: string;\n}\n\nconst DEFAULT_TEXT = 'Nothing found.';\n\nconst NothingFound: FC = ({ text = DEFAULT_TEXT, description }) => {\n const lang = useLang();\n const { transitionClassNames } = useShowTransition(true);\n\n return (\n
\n {text}\n {description &&

{renderText(lang(description), ['br'])}

}\n
\n );\n};\n\nexport default memo(NothingFound);\n","import React, {\n FC, useCallback, useRef, useEffect, memo,\n} from '../../lib/teact/teact';\n\nimport { isUserId } from '../../global/helpers';\n\nimport InfiniteScroll from '../ui/InfiniteScroll';\nimport Checkbox from '../ui/Checkbox';\nimport InputText from '../ui/InputText';\nimport ListItem from '../ui/ListItem';\nimport PrivateChatInfo from './PrivateChatInfo';\nimport GroupChatInfo from './GroupChatInfo';\nimport PickerSelectedItem from './PickerSelectedItem';\nimport useInfiniteScroll from '../../hooks/useInfiniteScroll';\nimport useLang from '../../hooks/useLang';\n\nimport Loading from '../ui/Loading';\n\nimport './Picker.scss';\n\ntype OwnProps = {\n itemIds: string[];\n selectedIds: string[];\n filterValue?: string;\n filterPlaceholder?: string;\n notFoundText?: string;\n searchInputId?: string;\n isLoading?: boolean;\n noScrollRestore?: boolean;\n onSelectedIdsChange: (ids: string[]) => void;\n onFilterChange: (value: string) => void;\n onLoadMore?: () => void;\n};\n\n// Focus slows down animation, also it breaks transition layout in Chrome\nconst FOCUS_DELAY_MS = 500;\n\nconst MAX_FULL_ITEMS = 10;\nconst ALWAYS_FULL_ITEMS_COUNT = 5;\n\nconst Picker: FC = ({\n itemIds,\n selectedIds,\n filterValue,\n filterPlaceholder,\n notFoundText,\n searchInputId,\n isLoading,\n noScrollRestore,\n onSelectedIdsChange,\n onFilterChange,\n onLoadMore,\n}) => {\n // eslint-disable-next-line no-null/no-null\n const inputRef = useRef(null);\n const shouldMinimize = selectedIds.length > MAX_FULL_ITEMS;\n\n useEffect(() => {\n setTimeout(() => {\n requestAnimationFrame(() => {\n inputRef.current!.focus();\n });\n }, FOCUS_DELAY_MS);\n }, []);\n\n const handleItemClick = useCallback((id: string) => {\n const newSelectedIds = [...selectedIds];\n if (newSelectedIds.includes(id)) {\n newSelectedIds.splice(newSelectedIds.indexOf(id), 1);\n } else {\n newSelectedIds.push(id);\n }\n onSelectedIdsChange(newSelectedIds);\n onFilterChange('');\n }, [selectedIds, onSelectedIdsChange, onFilterChange]);\n\n const handleFilterChange = useCallback((e: React.ChangeEvent) => {\n const { value } = e.currentTarget;\n onFilterChange(value);\n }, [onFilterChange]);\n\n const [viewportIds, getMore] = useInfiniteScroll(onLoadMore, itemIds, Boolean(filterValue));\n\n const lang = useLang();\n\n return (\n
\n
\n {selectedIds.map((id, i) => (\n \n ))}\n \n
\n\n {viewportIds?.length ? (\n \n {viewportIds.map((id) => (\n handleItemClick(id)}\n ripple\n >\n \n {isUserId(id) ? (\n \n ) : (\n \n )}\n \n ))}\n \n ) : !isLoading && viewportIds && !viewportIds.length ? (\n

{notFoundText || 'Sorry, nothing found.'}

\n ) : (\n \n )}\n
\n );\n};\n\nexport default memo(Picker);\n","import React, { FC, memo } from '../../lib/teact/teact';\nimport { withGlobal } from '../../global';\n\nimport { ApiChat, ApiUser } from '../../api/types';\n\nimport { selectChat, selectUser } from '../../global/selectors';\nimport { getChatTitle, getUserFirstOrLastName, isUserId } from '../../global/helpers';\nimport renderText from './helpers/renderText';\nimport buildClassName from '../../util/buildClassName';\nimport useLang from '../../hooks/useLang';\n\nimport Avatar from './Avatar';\n\nimport './PickerSelectedItem.scss';\n\ntype OwnProps = {\n chatOrUserId?: string;\n icon?: string;\n title?: string;\n isMinimized?: boolean;\n canClose?: boolean;\n onClick: (arg: any) => void;\n clickArg: any;\n className?: string;\n};\n\ntype StateProps = {\n chat?: ApiChat;\n user?: ApiUser;\n};\n\nconst PickerSelectedItem: FC = ({\n icon,\n title,\n isMinimized,\n canClose,\n onClick,\n clickArg,\n chat,\n user,\n className,\n}) => {\n const lang = useLang();\n\n let iconElement: any;\n let titleText: any;\n\n if (icon && title) {\n iconElement = (\n
\n \n
\n );\n\n titleText = title;\n } else if (chat || user) {\n iconElement = (\n \n );\n\n const name = !chat || (user && !user.isSelf)\n ? getUserFirstOrLastName(user)\n : getChatTitle(lang, chat, user);\n\n titleText = name ? renderText(name) : undefined;\n }\n\n const fullClassName = buildClassName(\n 'PickerSelectedItem',\n className,\n isMinimized && 'minimized',\n canClose && 'closeable',\n );\n\n return (\n onClick(clickArg)}\n title={isMinimized ? titleText : undefined}\n dir={lang.isRtl ? 'rtl' : undefined}\n >\n {iconElement}\n {!isMinimized && (\n
\n {titleText}\n
\n )}\n {canClose && (\n
\n \n
\n )}\n
\n );\n};\n\nexport default memo(withGlobal(\n (global, { chatOrUserId }): StateProps => {\n if (!chatOrUserId) {\n return {};\n }\n\n const chat = chatOrUserId ? selectChat(global, chatOrUserId) : undefined;\n const user = isUserId(chatOrUserId) ? selectUser(global, chatOrUserId) : undefined;\n\n return {\n chat,\n user,\n };\n },\n)(PickerSelectedItem));\n","import { MouseEvent as ReactMouseEvent } from 'react';\nimport React, {\n FC, useEffect, useCallback, memo,\n} from '../../lib/teact/teact';\nimport { getActions, withGlobal } from '../../global';\n\nimport { ApiUser, ApiTypingStatus, ApiUserStatus } from '../../api/types';\nimport { GlobalState } from '../../global/types';\nimport { MediaViewerOrigin } from '../../types';\n\nimport { selectChatMessages, selectUser, selectUserStatus } from '../../global/selectors';\nimport { getUserFullName, getUserStatus, isUserOnline } from '../../global/helpers';\nimport renderText from './helpers/renderText';\nimport useLang from '../../hooks/useLang';\n\nimport Avatar from './Avatar';\nimport VerifiedIcon from './VerifiedIcon';\nimport TypingStatus from './TypingStatus';\nimport DotAnimation from './DotAnimation';\n\ntype OwnProps = {\n userId: string;\n typingStatus?: ApiTypingStatus;\n avatarSize?: 'tiny' | 'small' | 'medium' | 'large' | 'jumbo';\n forceShowSelf?: boolean;\n status?: string;\n withDots?: boolean;\n withMediaViewer?: boolean;\n withUsername?: boolean;\n withFullInfo?: boolean;\n withUpdatingStatus?: boolean;\n noStatusOrTyping?: boolean;\n noRtl?: boolean;\n};\n\ntype StateProps =\n {\n user?: ApiUser;\n userStatus?: ApiUserStatus;\n isSavedMessages?: boolean;\n areMessagesLoaded: boolean;\n serverTimeOffset: number;\n }\n & Pick;\n\nconst PrivateChatInfo: FC = ({\n typingStatus,\n avatarSize = 'medium',\n status,\n withDots,\n withMediaViewer,\n withUsername,\n withFullInfo,\n withUpdatingStatus,\n noStatusOrTyping,\n noRtl,\n user,\n userStatus,\n isSavedMessages,\n areMessagesLoaded,\n lastSyncTime,\n serverTimeOffset,\n}) => {\n const {\n loadFullUser,\n openMediaViewer,\n } = getActions();\n\n const { id: userId } = user || {};\n const fullName = getUserFullName(user);\n\n useEffect(() => {\n if (withFullInfo && lastSyncTime && userId) {\n loadFullUser({ userId });\n }\n }, [userId, loadFullUser, lastSyncTime, withFullInfo]);\n\n const handleAvatarViewerOpen = useCallback((e: ReactMouseEvent, hasPhoto: boolean) => {\n if (user && hasPhoto) {\n e.stopPropagation();\n openMediaViewer({\n avatarOwnerId: user.id,\n origin: avatarSize === 'jumbo' ? MediaViewerOrigin.ProfileAvatar : MediaViewerOrigin.MiddleHeaderAvatar,\n });\n }\n }, [user, avatarSize, openMediaViewer]);\n\n const lang = useLang();\n\n if (!user) {\n return undefined;\n }\n\n function renderStatusOrTyping() {\n if (status) {\n return withDots ? (\n \n ) : (\n {status}\n );\n }\n\n if (withUpdatingStatus && !areMessagesLoaded) {\n return (\n \n );\n }\n\n if (!user) {\n return undefined;\n }\n\n if (typingStatus) {\n return ;\n }\n\n return (\n \n {withUsername && user.username && {user.username}}\n {getUserStatus(lang, user, userStatus, serverTimeOffset)}\n \n );\n }\n\n return (\n
\n \n
\n {isSavedMessages ? (\n
\n

{lang('SavedMessages')}

\n
\n ) : (\n
\n

{fullName && renderText(fullName)}

\n {user?.isVerified && }\n
\n )}\n {(status || (!isSavedMessages && !noStatusOrTyping)) && renderStatusOrTyping()}\n
\n
\n );\n};\n\nexport default memo(withGlobal(\n (global, { userId, forceShowSelf }): StateProps => {\n const { lastSyncTime, serverTimeOffset } = global;\n const user = selectUser(global, userId);\n const userStatus = selectUserStatus(global, userId);\n const isSavedMessages = !forceShowSelf && user && user.isSelf;\n const areMessagesLoaded = Boolean(selectChatMessages(global, userId));\n\n return {\n lastSyncTime, user, userStatus, isSavedMessages, areMessagesLoaded, serverTimeOffset,\n };\n },\n)(PrivateChatInfo));\n","import React, { FC, memo } from '../../lib/teact/teact';\n\nimport {\n ApiChat, ApiMediaFormat, ApiPhoto, ApiUser,\n} from '../../api/types';\n\nimport {\n getChatAvatarHash,\n getChatTitle,\n getUserColorKey,\n getUserFullName,\n isUserId,\n isChatWithRepliesBot,\n isDeletedUser,\n} from '../../global/helpers';\nimport renderText from './helpers/renderText';\nimport buildClassName from '../../util/buildClassName';\nimport { getFirstLetters } from '../../util/textFormat';\nimport useMedia from '../../hooks/useMedia';\nimport useLang from '../../hooks/useLang';\n\nimport Spinner from '../ui/Spinner';\n\nimport './ProfilePhoto.scss';\n\ntype OwnProps = {\n chat?: ApiChat;\n user?: ApiUser;\n isFirstPhoto?: boolean;\n isSavedMessages?: boolean;\n photo?: ApiPhoto;\n lastSyncTime?: number;\n onClick: NoneToVoidFunction;\n};\n\nconst ProfilePhoto: FC = ({\n chat,\n user,\n photo,\n isFirstPhoto,\n isSavedMessages,\n lastSyncTime,\n onClick,\n}) => {\n const lang = useLang();\n const isDeleted = user && isDeletedUser(user);\n const isRepliesChat = chat && isChatWithRepliesBot(chat.id);\n\n function getMediaHash(size: 'normal' | 'big', forceAvatar?: boolean) {\n if (photo && !forceAvatar) {\n return `photo${photo.id}?size=c`;\n }\n\n let hash: string | undefined;\n if (!isSavedMessages && !isDeleted && !isRepliesChat) {\n if (user) {\n hash = getChatAvatarHash(user, size);\n } else if (chat) {\n hash = getChatAvatarHash(chat, size);\n }\n }\n\n return hash;\n }\n\n const photoBlobUrl = useMedia(getMediaHash('big'), false, ApiMediaFormat.BlobUrl, lastSyncTime);\n const avatarMediaHash = isFirstPhoto && !photoBlobUrl ? getMediaHash('normal', true) : undefined;\n const avatarBlobUrl = useMedia(avatarMediaHash, false, ApiMediaFormat.BlobUrl, lastSyncTime);\n const imageSrc = photoBlobUrl || avatarBlobUrl || photo?.thumbnail?.dataUri;\n\n let content: string | undefined = '';\n\n if (isSavedMessages) {\n content = ;\n } else if (isDeleted) {\n content = ;\n } else if (isRepliesChat) {\n content = ;\n } else if (imageSrc) {\n content = \"\";\n } else if (user) {\n const userFullName = getUserFullName(user);\n content = userFullName ? getFirstLetters(userFullName, 2) : undefined;\n } else if (chat) {\n const title = getChatTitle(lang, chat);\n content = title && getFirstLetters(title, isUserId(chat.id) ? 2 : 1);\n } else {\n content = (\n
\n \n
\n );\n }\n\n const fullClassName = buildClassName(\n 'ProfilePhoto',\n `color-bg-${getUserColorKey(user || chat)}`,\n isSavedMessages && 'saved-messages',\n isDeleted && 'deleted-account',\n isRepliesChat && 'replies-bot-account',\n (!isSavedMessages && !(imageSrc)) && 'no-photo',\n );\n\n return (\n
\n {typeof content === 'string' ? renderText(content, ['hq_emoji']) : content}\n
\n );\n};\n\nexport default memo(ProfilePhoto);\n","import React, {\n FC, useEffect, useCallback, memo, useState,\n} from '../../lib/teact/teact';\nimport { getActions, withGlobal } from '../../global';\n\nimport { ApiUser, ApiChat, ApiUserStatus } from '../../api/types';\nimport { GlobalState } from '../../global/types';\nimport { MediaViewerOrigin } from '../../types';\n\nimport { IS_TOUCH_ENV } from '../../util/environment';\nimport { selectChat, selectUser, selectUserStatus } from '../../global/selectors';\nimport {\n getUserFullName, getUserStatus, isChatChannel, isUserOnline,\n} from '../../global/helpers';\nimport renderText from './helpers/renderText';\nimport { captureEvents, SwipeDirection } from '../../util/captureEvents';\nimport buildClassName from '../../util/buildClassName';\nimport usePhotosPreload from './hooks/usePhotosPreload';\nimport useLang from '../../hooks/useLang';\n\nimport VerifiedIcon from './VerifiedIcon';\nimport ProfilePhoto from './ProfilePhoto';\nimport Transition from '../ui/Transition';\n\nimport './ProfileInfo.scss';\n\ntype OwnProps = {\n userId: string;\n forceShowSelf?: boolean;\n};\n\ntype StateProps =\n {\n user?: ApiUser;\n userStatus?: ApiUserStatus;\n chat?: ApiChat;\n isSavedMessages?: boolean;\n animationLevel: 0 | 1 | 2;\n serverTimeOffset: number;\n }\n & Pick;\n\nconst ProfileInfo: FC = ({\n forceShowSelf,\n user,\n userStatus,\n chat,\n isSavedMessages,\n connectionState,\n animationLevel,\n serverTimeOffset,\n}) => {\n const {\n loadFullUser,\n openMediaViewer,\n } = getActions();\n\n const lang = useLang();\n\n const { id: userId } = user || {};\n const { id: chatId } = chat || {};\n const fullName = user ? getUserFullName(user) : (chat ? chat.title : '');\n const photos = user?.photos || chat?.photos || [];\n const slideAnimation = animationLevel >= 1\n ? (lang.isRtl ? 'slide-optimized-rtl' : 'slide-optimized')\n : 'none';\n\n const [currentPhotoIndex, setCurrentPhotoIndex] = useState(0);\n const isFirst = isSavedMessages || photos.length <= 1 || currentPhotoIndex === 0;\n const isLast = isSavedMessages || photos.length <= 1 || currentPhotoIndex === photos.length - 1;\n\n // Deleting the last profile photo may result in an error\n useEffect(() => {\n if (currentPhotoIndex > photos.length) {\n setCurrentPhotoIndex(Math.max(0, photos.length - 1));\n }\n }, [currentPhotoIndex, photos.length]);\n\n useEffect(() => {\n if (connectionState === 'connectionStateReady' && userId && !forceShowSelf) {\n loadFullUser({ userId });\n }\n }, [userId, loadFullUser, connectionState, forceShowSelf]);\n\n usePhotosPreload(user || chat, photos, currentPhotoIndex);\n\n const handleProfilePhotoClick = useCallback(() => {\n openMediaViewer({\n avatarOwnerId: userId || chatId,\n profilePhotoIndex: currentPhotoIndex,\n origin: forceShowSelf ? MediaViewerOrigin.SettingsAvatar : MediaViewerOrigin.ProfileAvatar,\n });\n }, [openMediaViewer, userId, chatId, currentPhotoIndex, forceShowSelf]);\n\n const selectPreviousMedia = useCallback(() => {\n if (isFirst) {\n return;\n }\n\n setCurrentPhotoIndex(currentPhotoIndex - 1);\n }, [currentPhotoIndex, isFirst]);\n\n const selectNextMedia = useCallback(() => {\n if (isLast) {\n return;\n }\n\n setCurrentPhotoIndex(currentPhotoIndex + 1);\n }, [currentPhotoIndex, isLast]);\n\n // Swipe gestures\n useEffect(() => {\n const element = document.querySelector('.photo-wrapper');\n if (!element) {\n return undefined;\n }\n\n return captureEvents(element, {\n selectorToPreventScroll: '.Profile, .settings-content',\n onSwipe: IS_TOUCH_ENV ? (e, direction) => {\n if (direction === SwipeDirection.Right) {\n selectPreviousMedia();\n return true;\n } else if (direction === SwipeDirection.Left) {\n selectNextMedia();\n return true;\n }\n\n return false;\n } : undefined,\n });\n }, [selectNextMedia, selectPreviousMedia]);\n\n if (!user && !chat) {\n return undefined;\n }\n\n function renderPhotoTabs() {\n if (isSavedMessages || !photos || photos.length <= 1) {\n return undefined;\n }\n\n return (\n
\n {photos.map((_, i) => (\n \n ))}\n
\n );\n }\n\n function renderPhoto() {\n const photo = !isSavedMessages && photos && photos.length > 0 ? photos[currentPhotoIndex] : undefined;\n\n return (\n \n );\n }\n\n function renderStatus() {\n if (user) {\n return (\n
\n {getUserStatus(lang, user, userStatus, serverTimeOffset)}\n
\n );\n }\n\n return (\n {\n isChatChannel(chat!)\n ? lang('Subscribers', chat!.membersCount ?? 0, 'i')\n : lang('Members', chat!.membersCount ?? 0, 'i')\n }\n \n );\n }\n\n const isVerifiedIconShown = (user || chat)?.isVerified;\n\n return (\n
\n
\n {renderPhotoTabs()}\n \n {renderPhoto()}\n \n\n {!isFirst && (\n \n )}\n {!isLast && (\n \n )}\n
\n\n
\n {isSavedMessages ? (\n
\n

{lang('SavedMessages')}

\n
\n ) : (\n
\n

{fullName && renderText(fullName)}

\n {isVerifiedIconShown && }\n
\n )}\n {!isSavedMessages && renderStatus()}\n
\n
\n );\n};\n\nexport default memo(withGlobal(\n (global, { userId, forceShowSelf }): StateProps => {\n const { connectionState, serverTimeOffset } = global;\n const user = selectUser(global, userId);\n const userStatus = selectUserStatus(global, userId);\n const chat = selectChat(global, userId);\n const isSavedMessages = !forceShowSelf && user && user.isSelf;\n const { animationLevel } = global.settings.byKey;\n\n return {\n connectionState,\n user,\n userStatus,\n chat,\n isSavedMessages,\n animationLevel,\n serverTimeOffset,\n };\n },\n)(ProfileInfo));\n","import {\n ApiChat, ApiMediaFormat, ApiPhoto, ApiUser,\n} from '../../../api/types';\nimport { useEffect } from '../../../lib/teact/teact';\nimport * as mediaLoader from '../../../util/mediaLoader';\n\nconst PHOTOS_TO_PRELOAD = 4;\n\nexport default function usePhotosPreload(\n profile: ApiUser | ApiChat | undefined,\n photos: ApiPhoto[],\n currentIndex: number,\n) {\n useEffect(() => {\n photos.slice(currentIndex, currentIndex + PHOTOS_TO_PRELOAD).forEach((photo) => {\n const mediaData = mediaLoader.getFromMemory(`photo${photo.id}?size=c`);\n if (!mediaData) {\n mediaLoader.fetch(`photo${photo.id}?size=c`, ApiMediaFormat.BlobUrl);\n }\n });\n }, [currentIndex, photos]);\n}\n","import { RefObject } from 'react';\nimport React, { FC, memo } from '../../lib/teact/teact';\nimport { getGlobal } from '../../global';\n\nimport { ApiMediaFormat } from '../../api/types';\n\nimport useMedia from '../../hooks/useMedia';\nimport buildClassName from '../../util/buildClassName';\n\nimport './ReactionStaticEmoji.scss';\n\ntype OwnProps = {\n reaction: string;\n ref?: RefObject;\n className?: string;\n};\n\nconst ReactionStaticEmoji: FC = ({\n reaction,\n ref,\n className,\n}) => {\n const staticIconId = getGlobal().availableReactions?.find((l) => l.reaction === reaction)?.staticIcon?.id;\n const mediaData = useMedia(`document${staticIconId}`, !staticIconId, ApiMediaFormat.BlobUrl);\n\n return (\n \n );\n};\n\nexport default memo(ReactionStaticEmoji);\n","import { MouseEvent as ReactMouseEvent } from 'react';\nimport React, {\n memo, useCallback, useEffect, useRef,\n} from '../../lib/teact/teact';\n\nimport { ApiBotInlineMediaResult, ApiMediaFormat, ApiSticker } from '../../api/types';\n\nimport buildClassName from '../../util/buildClassName';\nimport { preventMessageInputBlurWithBubbling } from '../middle/helpers/preventMessageInputBlur';\nimport safePlay from '../../util/safePlay';\nimport { IS_TOUCH_ENV, IS_WEBM_SUPPORTED } from '../../util/environment';\n\nimport { useIsIntersecting, ObserveFn } from '../../hooks/useIntersectionObserver';\nimport useMedia from '../../hooks/useMedia';\nimport useShowTransition from '../../hooks/useShowTransition';\nimport useFlag from '../../hooks/useFlag';\nimport useLang from '../../hooks/useLang';\nimport useContextMenuHandlers from '../../hooks/useContextMenuHandlers';\nimport useContextMenuPosition from '../../hooks/useContextMenuPosition';\n\nimport AnimatedSticker from './AnimatedSticker';\nimport Button from '../ui/Button';\nimport Menu from '../ui/Menu';\nimport MenuItem from '../ui/MenuItem';\n\nimport './StickerButton.scss';\n\ntype OwnProps = {\n sticker: ApiSticker;\n size: number;\n noAnimate?: boolean;\n title?: string;\n className?: string;\n clickArg: T;\n noContextMenu?: boolean;\n isSavedMessages?: boolean;\n observeIntersection: ObserveFn;\n onClick?: (arg: OwnProps['clickArg'], isSilent?: boolean, shouldSchedule?: boolean) => void;\n onFaveClick?: (sticker: ApiSticker) => void;\n onUnfaveClick?: (sticker: ApiSticker) => void;\n};\n\nconst StickerButton = ({\n sticker,\n size,\n noAnimate,\n title,\n className,\n clickArg,\n noContextMenu,\n isSavedMessages,\n observeIntersection,\n onClick,\n onFaveClick,\n onUnfaveClick,\n}: OwnProps) => {\n // eslint-disable-next-line no-null/no-null\n const ref = useRef(null);\n const lang = useLang();\n\n const localMediaHash = `sticker${sticker.id}`;\n const stickerSelector = `sticker-button-${sticker.id}`;\n\n const isIntersecting = useIsIntersecting(ref, observeIntersection);\n\n const thumbDataUri = sticker.thumbnail ? sticker.thumbnail.dataUri : undefined;\n const previewBlobUrl = useMedia(`${localMediaHash}?size=m`, !isIntersecting, ApiMediaFormat.BlobUrl);\n\n const shouldPlay = isIntersecting && !noAnimate;\n const lottieData = useMedia(sticker.isLottie && localMediaHash, !shouldPlay, ApiMediaFormat.Lottie);\n const [isLottieLoaded, markLoaded, unmarkLoaded] = useFlag(Boolean(lottieData));\n const canLottiePlay = isLottieLoaded && shouldPlay;\n const isVideo = sticker.isVideo && IS_WEBM_SUPPORTED;\n const videoBlobUrl = useMedia(isVideo && localMediaHash, !shouldPlay, ApiMediaFormat.BlobUrl);\n const canVideoPlay = Boolean(isVideo && videoBlobUrl && shouldPlay);\n\n const { transitionClassNames: previewTransitionClassNames } = useShowTransition(\n Boolean(previewBlobUrl || canLottiePlay),\n undefined,\n undefined,\n 'slow',\n );\n\n const {\n isContextMenuOpen, contextMenuPosition,\n handleBeforeContextMenu, handleContextMenu,\n handleContextMenuClose, handleContextMenuHide,\n } = useContextMenuHandlers(ref);\n\n const getTriggerElement = useCallback(() => ref.current, []);\n\n const getRootElement = useCallback(\n () => ref.current!.closest('.custom-scroll, .no-scrollbar'),\n [],\n );\n\n const getMenuElement = useCallback(\n () => ref.current!.querySelector('.sticker-context-menu .bubble'),\n [],\n );\n\n const {\n positionX, positionY, transformOriginX, transformOriginY, style: menuStyle,\n } = useContextMenuPosition(\n contextMenuPosition,\n getTriggerElement,\n getRootElement,\n getMenuElement,\n );\n\n // To avoid flickering\n useEffect(() => {\n if (!shouldPlay) {\n unmarkLoaded();\n }\n }, [unmarkLoaded, shouldPlay]);\n\n useEffect(() => {\n if (!isVideo || !ref.current) return;\n const video = ref.current.querySelector('video');\n if (!video) return;\n if (canVideoPlay) {\n safePlay(video);\n } else {\n video.pause();\n }\n }, [isVideo, canVideoPlay]);\n\n useEffect(() => {\n if (!isIntersecting) handleContextMenuClose();\n }, [handleContextMenuClose, isIntersecting]);\n\n const handleClick = () => {\n if (isContextMenuOpen) return;\n onClick?.(clickArg);\n };\n\n const handleMouseDown = (e: React.MouseEvent) => {\n preventMessageInputBlurWithBubbling(e);\n handleBeforeContextMenu(e);\n };\n\n const handleUnfaveClick = useCallback((e: ReactMouseEvent) => {\n e.stopPropagation();\n e.preventDefault();\n\n onUnfaveClick!(sticker);\n }, [onUnfaveClick, sticker]);\n\n const handleContextUnfave = useCallback(() => {\n onUnfaveClick!(sticker);\n }, [onUnfaveClick, sticker]);\n\n const handleContextFave = useCallback(() => {\n onFaveClick!(sticker);\n }, [onFaveClick, sticker]);\n\n const handleSendQuiet = useCallback(() => {\n onClick?.(clickArg, true);\n }, [clickArg, onClick]);\n\n const handleSendScheduled = useCallback(() => {\n onClick?.(clickArg, undefined, true);\n }, [clickArg, onClick]);\n\n const fullClassName = buildClassName(\n 'StickerButton',\n onClick && 'interactive',\n stickerSelector,\n className,\n );\n\n const style = (thumbDataUri && !canLottiePlay && !canVideoPlay) ? `background-image: url('${thumbDataUri}');` : '';\n\n return (\n \n {!canLottiePlay && !canVideoPlay && (\n // eslint-disable-next-line jsx-a11y/alt-text\n \n )}\n {isVideo && (\n \n )}\n {shouldPlay && lottieData && (\n \n )}\n {!IS_TOUCH_ENV && onUnfaveClick && (\n \n \n \n )}\n {!noContextMenu && onClick && contextMenuPosition !== undefined && (\n \n {onUnfaveClick && (\n \n {lang('Stickers.RemoveFromFavorites')}\n \n )}\n {onFaveClick && (\n \n {lang('AddToFavorites')}\n \n )}\n {!isSavedMessages && {lang('SendWithoutSound')}}\n \n {lang(isSavedMessages ? 'SetReminder' : 'ScheduleMessage')}\n \n \n )}\n
\n );\n};\n\nexport default memo(StickerButton);\n","import React, { FC, memo } from '../../lib/teact/teact';\nimport { OwnProps } from './StickerSetModal';\nimport { Bundles } from '../../util/moduleLoader';\n\nimport useModuleLoader from '../../hooks/useModuleLoader';\n\nconst StickerSetModalAsync: FC = (props) => {\n const { isOpen } = props;\n const StickerSetModal = useModuleLoader(Bundles.Extra, 'StickerSetModal', !isOpen);\n\n // eslint-disable-next-line react/jsx-props-no-spreading\n return StickerSetModal ? : undefined;\n};\n\nexport default memo(StickerSetModalAsync);\n","import React, { FC, memo } from '../../lib/teact/teact';\nimport { withGlobal } from '../../global';\n\nimport { ApiUser, ApiTypingStatus } from '../../api/types';\n\nimport { selectUser } from '../../global/selectors';\nimport { getUserFirstOrLastName } from '../../global/helpers';\nimport renderText from './helpers/renderText';\nimport useLang from '../../hooks/useLang';\n\nimport DotAnimation from './DotAnimation';\n\nimport './TypingStatus.scss';\n\ntype OwnProps = {\n typingStatus: ApiTypingStatus;\n};\n\ntype StateProps = {\n typingUser?: ApiUser;\n};\n\nconst TypingStatus: FC = ({ typingStatus, typingUser }) => {\n const lang = useLang();\n const typingUserName = typingUser && !typingUser.isSelf && getUserFirstOrLastName(typingUser);\n const content = lang(typingStatus.action)\n // Fix for translation \"{user} is typing\"\n .replace('{user}', '')\n .replace('{emoji}', typingStatus.emoji).trim();\n\n return (\n

\n {typingUserName && (\n {renderText(typingUserName)}\n )}\n \n

\n );\n};\n\nexport default memo(withGlobal(\n (global, { typingStatus }): StateProps => {\n if (!typingStatus.userId) {\n return {};\n }\n\n const typingUser = selectUser(global, typingStatus.userId);\n\n return { typingUser };\n },\n)(TypingStatus));\n","import React, { FC } from '../../lib/teact/teact';\n\nimport './VerifiedIcon.scss';\n\n// eslint-disable-next-line max-len\nconst VERIFIED_ICON = { __html: '' };\n\nconst VerifiedIcon: FC = () => {\n return (\n // eslint-disable-next-line react/no-danger\n \n );\n};\n\nexport default VerifiedIcon;\n","import React, { FC, memo, useCallback } from '../../lib/teact/teact';\n\nimport { ApiMessage, ApiWebPage } from '../../api/types';\nimport { ObserveFn } from '../../hooks/useIntersectionObserver';\n\nimport {\n getFirstLinkInMessage, getMessageText,\n getMessageWebPage,\n} from '../../global/helpers';\nimport buildClassName from '../../util/buildClassName';\nimport trimText from '../../util/trimText';\nimport renderText from './helpers/renderText';\nimport { formatPastTimeShort } from '../../util/dateFormat';\nimport useLang from '../../hooks/useLang';\nimport { renderMessageSummary, TextPart } from './helpers/renderMessageText';\n\nimport Media from './Media';\nimport Link from '../ui/Link';\nimport SafeLink from './SafeLink';\n\nimport './WebLink.scss';\n\nconst MAX_TEXT_LENGTH = 170; // symbols\n\ntype OwnProps = {\n message: ApiMessage;\n senderTitle?: string;\n isProtected?: boolean;\n observeIntersection?: ObserveFn;\n onMessageClick: (messageId: number, chatId: string) => void;\n};\n\ntype ApiWebPageWithFormatted =\n ApiWebPage\n & { formattedDescription?: TextPart[] };\n\nconst WebLink: FC = ({\n message, senderTitle, isProtected, observeIntersection, onMessageClick,\n}) => {\n const lang = useLang();\n\n let linkData: ApiWebPageWithFormatted | undefined = getMessageWebPage(message);\n\n if (!linkData) {\n const link = getFirstLinkInMessage(message);\n if (link) {\n const { url, domain } = link;\n\n linkData = {\n siteName: domain.replace(/^www./, ''),\n url: url.includes('://') ? url : url.includes('@') ? `mailto:${url}` : `http://${url}`,\n formattedDescription: getMessageText(message) !== url\n ? renderMessageSummary(lang, message, undefined, undefined, MAX_TEXT_LENGTH)\n : undefined,\n } as ApiWebPageWithFormatted;\n }\n }\n\n const handleMessageClick = useCallback(() => {\n onMessageClick(message.id, message.chatId);\n }, [onMessageClick, message.id, message.chatId]);\n\n if (!linkData) {\n return undefined;\n }\n\n const {\n siteName,\n url,\n displayUrl,\n title,\n description,\n formattedDescription,\n photo,\n video,\n } = linkData;\n\n const truncatedDescription = !senderTitle && description && trimText(description, MAX_TEXT_LENGTH);\n\n const className = buildClassName(\n 'WebLink scroll-item',\n (!photo && !video) && 'without-media',\n );\n\n return (\n \n {photo && (\n \n )}\n
\n \n {renderText(title || siteName || displayUrl)}\n \n {(truncatedDescription || formattedDescription) && (\n \n {formattedDescription || (truncatedDescription && renderText(truncatedDescription))}\n \n )}\n \n {url.replace('mailto:', '') || displayUrl}\n \n {senderTitle &&
{renderText(senderTitle)}
}\n
\n {senderTitle && (\n
\n \n {formatPastTimeShort(lang, message.date * 1000)}\n \n
\n )}\n
\n );\n};\n\nexport default memo(WebLink);\n","import {\n ApiPhoto, ApiVideo, ApiSticker, ApiDimensions,\n} from '../../../api/types';\n\nimport { STICKER_SIZE_INLINE_DESKTOP_FACTOR, STICKER_SIZE_INLINE_MOBILE_FACTOR } from '../../../config';\nimport { IS_SINGLE_COLUMN_LAYOUT, IS_TOUCH_ENV } from '../../../util/environment';\nimport windowSize from '../../../util/windowSize';\nimport { getPhotoInlineDimensions, getVideoDimensions } from '../../../global/helpers';\n\nexport const MEDIA_VIEWER_MEDIA_QUERY = '(max-height: 640px)';\nexport const REM = parseInt(getComputedStyle(document.documentElement).fontSize, 10);\nexport const ROUND_VIDEO_DIMENSIONS_PX = 240;\nexport const GIF_MIN_WIDTH = 300;\nexport const AVATAR_FULL_DIMENSIONS = { width: 640, height: 640 };\nexport const LIKE_STICKER_ID = '4986041492570112461';\n\nconst DEFAULT_MEDIA_DIMENSIONS: ApiDimensions = { width: 100, height: 100 };\nconst MOBILE_SCREEN_NO_AVATARS_MESSAGE_EXTRA_WIDTH_REM = 4.5;\nconst MOBILE_SCREEN_MESSAGE_EXTRA_WIDTH_REM = 7;\nconst MESSAGE_MAX_WIDTH_REM = 29;\nconst MESSAGE_OWN_MAX_WIDTH_REM = 30;\n\nlet cachedMaxWidthOwn: number | undefined;\nlet cachedMaxWidth: number | undefined;\nlet cachedMaxWidthNoAvatar: number | undefined;\n\nfunction getMaxMessageWidthRem(fromOwnMessage: boolean, noAvatars?: boolean) {\n const regularMaxWidth = fromOwnMessage ? MESSAGE_OWN_MAX_WIDTH_REM : MESSAGE_MAX_WIDTH_REM;\n if (!IS_SINGLE_COLUMN_LAYOUT) {\n return regularMaxWidth;\n }\n\n const { width: windowWidth } = windowSize.get();\n\n // @optimization Limitation: changing device screen width not supported\n if (!cachedMaxWidthOwn) {\n cachedMaxWidthOwn = Math.min(\n MESSAGE_OWN_MAX_WIDTH_REM,\n windowWidth / REM - MOBILE_SCREEN_NO_AVATARS_MESSAGE_EXTRA_WIDTH_REM,\n );\n }\n if (!cachedMaxWidth) {\n cachedMaxWidth = Math.min(\n MESSAGE_MAX_WIDTH_REM,\n windowWidth / REM - MOBILE_SCREEN_MESSAGE_EXTRA_WIDTH_REM,\n );\n }\n if (!cachedMaxWidthNoAvatar) {\n cachedMaxWidthNoAvatar = Math.min(\n MESSAGE_MAX_WIDTH_REM,\n windowWidth / REM - MOBILE_SCREEN_NO_AVATARS_MESSAGE_EXTRA_WIDTH_REM,\n );\n }\n\n return fromOwnMessage\n ? cachedMaxWidthOwn\n : (noAvatars ? cachedMaxWidthNoAvatar : cachedMaxWidth);\n}\n\nexport function getAvailableWidth(\n fromOwnMessage: boolean,\n isForwarded?: boolean,\n isWebPagePhoto?: boolean,\n noAvatars?: boolean,\n) {\n const extraPaddingRem = isForwarded || isWebPagePhoto ? 1.625 : 0;\n const availableWidthRem = getMaxMessageWidthRem(fromOwnMessage, noAvatars) - extraPaddingRem;\n\n return availableWidthRem * REM;\n}\n\nfunction getAvailableHeight(isGif?: boolean, aspectRatio?: number) {\n if (\n isGif && aspectRatio\n && aspectRatio >= 0.75 && aspectRatio <= 1.25\n ) {\n return 20 * REM;\n }\n\n return 27 * REM;\n}\n\nfunction calculateDimensionsForMessageMedia({\n width,\n height,\n fromOwnMessage,\n isForwarded,\n isWebPagePhoto,\n isGif,\n noAvatars,\n}: {\n width: number;\n height: number;\n fromOwnMessage: boolean;\n isForwarded?: boolean;\n isWebPagePhoto?: boolean;\n isGif?: boolean;\n noAvatars?: boolean;\n}): ApiDimensions {\n const aspectRatio = height / width;\n const availableWidth = getAvailableWidth(fromOwnMessage, isForwarded, isWebPagePhoto, noAvatars);\n const availableHeight = getAvailableHeight(isGif, aspectRatio);\n const mediaWidth = isGif ? Math.max(GIF_MIN_WIDTH, width) : width;\n const mediaHeight = isGif ? height * (mediaWidth / width) : height;\n\n return calculateDimensions(availableWidth, availableHeight, mediaWidth, mediaHeight);\n}\n\nexport function getMediaViewerAvailableDimensions(withFooter: boolean, isVideo: boolean): ApiDimensions {\n const mql = window.matchMedia(MEDIA_VIEWER_MEDIA_QUERY);\n const { width: windowWidth, height: windowHeight } = windowSize.get();\n let occupiedHeightRem = isVideo && mql.matches ? 10 : 8.25;\n if (withFooter && !IS_TOUCH_ENV) {\n occupiedHeightRem = mql.matches ? 10 : 12.5;\n }\n return {\n width: windowWidth,\n height: windowHeight - occupiedHeightRem * REM,\n };\n}\n\nexport function calculateInlineImageDimensions(\n photo: ApiPhoto,\n fromOwnMessage: boolean,\n isForwarded?: boolean,\n isWebPagePhoto?: boolean,\n noAvatars?: boolean,\n) {\n const { width, height } = getPhotoInlineDimensions(photo) || DEFAULT_MEDIA_DIMENSIONS;\n\n return calculateDimensionsForMessageMedia({\n width,\n height,\n fromOwnMessage,\n isForwarded,\n isWebPagePhoto,\n noAvatars,\n });\n}\n\nexport function calculateVideoDimensions(\n video: ApiVideo,\n fromOwnMessage: boolean,\n isForwarded?: boolean,\n noAvatars?: boolean,\n) {\n const { width, height } = getVideoDimensions(video) || DEFAULT_MEDIA_DIMENSIONS;\n\n return calculateDimensionsForMessageMedia({\n width,\n height,\n fromOwnMessage,\n isForwarded,\n isGif: video.isGif,\n noAvatars,\n });\n}\n\nexport function getPictogramDimensions(): ApiDimensions {\n return {\n width: 2 * REM,\n height: 2 * REM,\n };\n}\n\nexport function getDocumentThumbnailDimensions(smaller?: boolean): ApiDimensions {\n if (smaller) {\n return {\n width: 3 * REM,\n height: 3 * REM,\n };\n }\n\n return {\n width: 3.375 * REM,\n height: 3.375 * REM,\n };\n}\n\nexport function getStickerDimensions(sticker: ApiSticker): ApiDimensions {\n const { width } = sticker;\n let { height } = sticker;\n\n // For some reason this sticker has some weird `height` value\n if (sticker.id === LIKE_STICKER_ID) {\n height = width;\n }\n\n const aspectRatio = (height && width) && height / width;\n const baseWidth = REM * (\n IS_SINGLE_COLUMN_LAYOUT\n ? STICKER_SIZE_INLINE_MOBILE_FACTOR\n : STICKER_SIZE_INLINE_DESKTOP_FACTOR\n );\n const calculatedHeight = aspectRatio ? baseWidth * aspectRatio : baseWidth;\n\n if (aspectRatio && calculatedHeight > baseWidth) {\n return {\n width: Math.round(baseWidth / aspectRatio),\n height: baseWidth,\n };\n }\n\n return {\n width: baseWidth,\n height: calculatedHeight,\n };\n}\n\nexport function calculateMediaViewerDimensions(\n { width, height }: ApiDimensions, withFooter: boolean, isVideo: boolean = false,\n): ApiDimensions {\n const { width: availableWidth, height: availableHeight } = getMediaViewerAvailableDimensions(withFooter, isVideo);\n\n return calculateDimensions(availableWidth, availableHeight, width, height);\n}\n\nexport function calculateDimensions(\n availableWidth: number,\n availableHeight: number,\n mediaWidth: number,\n mediaHeight: number,\n): ApiDimensions {\n const aspectRatio = mediaHeight / mediaWidth;\n const calculatedWidth = Math.min(mediaWidth, availableWidth);\n const calculatedHeight = Math.round(calculatedWidth * aspectRatio);\n\n if (calculatedHeight > availableHeight) {\n return {\n width: Math.round(availableHeight / aspectRatio),\n height: availableHeight,\n };\n }\n\n return {\n width: calculatedWidth,\n height: Math.round(calculatedWidth * aspectRatio),\n };\n}\n","import {\n useCallback, useEffect, useRef, useState,\n} from '../../../lib/teact/teact';\nimport safePlay from '../../../util/safePlay';\nimport { getActions } from '../../../global';\nimport useMedia from '../../../hooks/useMedia';\nimport { ActiveEmojiInteraction } from '../../../global/types';\nimport useFlag from '../../../hooks/useFlag';\nimport { selectLocalAnimatedEmojiEffectByName } from '../../../global/selectors';\n\nconst WIDTH = {\n large: 160,\n medium: 128,\n small: 104,\n};\nconst INTERACTION_BUNCH_TIME = 1000;\nconst MS_DIVIDER = 1000;\nconst TIME_DEFAULT = 0;\n\nexport default function useAnimatedEmoji(\n size: 'large' | 'medium' | 'small',\n chatId?: string,\n messageId?: number,\n soundId?: string,\n activeEmojiInteractions?: ActiveEmojiInteraction[],\n isOwn?: boolean,\n localEffect?: string,\n emoji?: string,\n) {\n const {\n interactWithAnimatedEmoji, sendEmojiInteraction, sendWatchingEmojiInteraction,\n } = getActions();\n\n const hasEffect = localEffect || emoji;\n const [isAnimationLoaded, markAnimationLoaded] = useFlag();\n\n // eslint-disable-next-line no-null/no-null\n const ref = useRef(null);\n\n // eslint-disable-next-line no-null/no-null\n const audioRef = useRef(null);\n\n const soundMediaData = useMedia(soundId ? `document${soundId}` : undefined, !soundId);\n\n const width = WIDTH[size];\n const style = `width: ${width}px; height: ${width}px;`;\n\n const [playKey, setPlayKey] = useState(String(Math.random()));\n const interactions = useRef(undefined);\n const startedInteractions = useRef(undefined);\n const sendInteractionBunch = useCallback(() => {\n const container = ref.current;\n\n if (!container) return;\n\n sendEmojiInteraction({\n chatId,\n messageId,\n localEffect,\n emoji,\n interactions: interactions.current,\n });\n startedInteractions.current = undefined;\n interactions.current = undefined;\n }, [sendEmojiInteraction, chatId, messageId, localEffect, emoji]);\n\n const play = useCallback(() => {\n setPlayKey(String(Math.random()));\n\n const audio = audioRef.current;\n if (soundMediaData) {\n if (audio) {\n audio.pause();\n audio.remove();\n }\n audioRef.current = new Audio();\n audioRef.current.src = soundMediaData;\n safePlay(audioRef.current);\n audioRef.current.addEventListener('ended', () => {\n audioRef.current = undefined;\n }, { once: true });\n }\n }, [soundMediaData]);\n\n const handleClick = useCallback(() => {\n play();\n\n const container = ref.current;\n\n if (!hasEffect || !container || !messageId || !chatId) {\n return;\n }\n\n const { x, y } = container.getBoundingClientRect();\n\n interactWithAnimatedEmoji({\n localEffect,\n emoji,\n x,\n y,\n startSize: width,\n isReversed: !isOwn,\n });\n\n if (!interactions.current) {\n interactions.current = [];\n startedInteractions.current = performance.now();\n setTimeout(sendInteractionBunch, INTERACTION_BUNCH_TIME);\n }\n\n interactions.current.push(startedInteractions.current\n ? (performance.now() - startedInteractions.current) / MS_DIVIDER\n : TIME_DEFAULT);\n }, [\n chatId, emoji, hasEffect, interactWithAnimatedEmoji, isOwn,\n localEffect, messageId, play, sendInteractionBunch, width,\n ]);\n\n // Set an end anchor for remote activated interaction\n useEffect(() => {\n const container = ref.current;\n\n if (!container || !activeEmojiInteractions) return;\n\n activeEmojiInteractions.forEach(({\n id,\n startSize,\n messageId: interactionMessageId,\n }) => {\n if (startSize || messageId !== interactionMessageId) {\n return;\n }\n\n const { x, y } = container.getBoundingClientRect();\n\n sendWatchingEmojiInteraction({\n id,\n chatId,\n emoticon: localEffect ? selectLocalAnimatedEmojiEffectByName(localEffect) : emoji,\n startSize: width,\n x,\n y,\n isReversed: !isOwn,\n });\n play();\n });\n }, [\n activeEmojiInteractions, chatId, emoji, isOwn, localEffect, messageId, play, sendWatchingEmojiInteraction, width,\n ]);\n\n return {\n playKey,\n ref,\n style,\n width,\n handleClick,\n markAnimationLoaded,\n isAnimationLoaded,\n };\n}\n","import React, { FC, memo } from '../../lib/teact/teact';\nimport { Bundles } from '../../util/moduleLoader';\nimport { OwnProps } from './ChatFolderModal';\n\nimport useModuleLoader from '../../hooks/useModuleLoader';\n\nconst ChatFolderModalAsync: FC = (props) => {\n const { isOpen } = props;\n const ChatFolderModal = useModuleLoader(Bundles.Extra, 'ChatFolderModal', !isOpen);\n\n // eslint-disable-next-line react/jsx-props-no-spreading\n return ChatFolderModal ? : undefined;\n};\n\nexport default memo(ChatFolderModalAsync);\n","import { useMemo } from '../../../../lib/teact/teact';\n\nexport enum ChatAnimationTypes {\n Move,\n Opacity,\n None,\n}\n\nexport function useChatAnimationType(orderDiffById: Record) {\n return useMemo(() => {\n const orderDiffs = Object.values(orderDiffById);\n const numberOfUp = orderDiffs.filter((diff) => diff < 0).length;\n const numberOfDown = orderDiffs.filter((diff) => diff > 0).length;\n\n return (chatId: string): ChatAnimationTypes => {\n const orderDiff = orderDiffById[chatId];\n if (orderDiff === 0) {\n return ChatAnimationTypes.None;\n }\n\n if (\n orderDiff === Infinity\n || orderDiff === -Infinity\n || (numberOfUp <= numberOfDown && orderDiff < 0)\n || (numberOfDown < numberOfUp && orderDiff > 0)\n ) {\n return ChatAnimationTypes.Opacity;\n }\n\n return ChatAnimationTypes.Move;\n };\n }, [orderDiffById]);\n}\n","import React, { FC, memo } from '../../../lib/teact/teact';\n\nimport { ApiChat } from '../../../api/types';\n\nimport { formatIntegerCompact } from '../../../util/textFormat';\nimport buildClassName from '../../../util/buildClassName';\n\nimport ShowTransition from '../../ui/ShowTransition';\n\nimport './Badge.scss';\n\ntype OwnProps = {\n chat: ApiChat;\n isPinned?: boolean;\n isMuted?: boolean;\n};\n\nconst Badge: FC = ({ chat, isPinned, isMuted }) => {\n const isShown = Boolean(chat.unreadCount || chat.hasUnreadMark || isPinned);\n const className = buildClassName(\n 'Badge',\n isMuted && 'muted',\n isPinned && 'pinned',\n Boolean(chat.unreadCount || chat.hasUnreadMark) && 'unread',\n );\n\n function renderContent() {\n if (chat.unreadCount) {\n if (chat.unreadMentionsCount) {\n return (\n
\n
\n \n
\n
\n {formatIntegerCompact(chat.unreadCount)}\n
\n
\n );\n }\n\n return (\n
\n {formatIntegerCompact(chat.unreadCount)}\n
\n );\n } else if (chat.hasUnreadMark) {\n return (\n
\n );\n } else if (isPinned) {\n return (\n
\n \n
\n );\n }\n\n return undefined;\n }\n\n return (\n \n {renderContent()}\n \n );\n};\n\nexport default memo(Badge);\n","import React, { FC, memo } from '../../../lib/teact/teact';\nimport buildClassName from '../../../util/buildClassName';\n\nimport { IS_SINGLE_COLUMN_LAYOUT } from '../../../util/environment';\n\nimport './ChatCallStatus.scss';\n\ntype OwnProps = {\n isSelected?: boolean;\n isActive?: boolean;\n};\n\nconst ChatCallStatus: FC = ({\n isSelected,\n isActive,\n}) => {\n return (\n
\n
\n
\n
\n
\n
\n
\n );\n};\n\nexport default memo(ChatCallStatus);\n","import React, {\n FC, memo, useCallback, useLayoutEffect, useMemo, useRef,\n} from '../../../lib/teact/teact';\nimport { getActions, getGlobal, withGlobal } from '../../../global';\n\nimport useLang, { LangFn } from '../../../hooks/useLang';\n\nimport {\n ApiChat, ApiUser, ApiMessage, ApiMessageOutgoingStatus, ApiFormattedText, MAIN_THREAD_ID, ApiUserStatus,\n} from '../../../api/types';\n\nimport { ANIMATION_END_DELAY } from '../../../config';\nimport { IS_SINGLE_COLUMN_LAYOUT } from '../../../util/environment';\nimport {\n getChatTitle,\n isUserId,\n isActionMessage,\n getPrivateChatUserId,\n getMessageAction,\n getMessageSenderName,\n isChatChannel,\n getMessageMediaHash,\n getMessageMediaThumbDataUri,\n getMessageVideo,\n getMessageSticker,\n selectIsChatMuted,\n getMessageRoundVideo,\n} from '../../../global/helpers';\nimport {\n selectChat, selectUser, selectChatMessage, selectOutgoingStatus, selectDraft, selectCurrentMessageList,\n selectNotifySettings, selectNotifyExceptions, selectUserStatus,\n} from '../../../global/selectors';\nimport { renderActionMessageText } from '../../common/helpers/renderActionMessageText';\nimport renderText from '../../common/helpers/renderText';\nimport { fastRaf } from '../../../util/schedulers';\nimport buildClassName from '../../../util/buildClassName';\nimport useEnsureMessage from '../../../hooks/useEnsureMessage';\nimport useChatContextActions from '../../../hooks/useChatContextActions';\nimport useFlag from '../../../hooks/useFlag';\nimport useMedia from '../../../hooks/useMedia';\nimport { ChatAnimationTypes } from './hooks';\nimport { renderMessageSummary } from '../../common/helpers/renderMessageText';\n\nimport Avatar from '../../common/Avatar';\nimport VerifiedIcon from '../../common/VerifiedIcon';\nimport TypingStatus from '../../common/TypingStatus';\nimport LastMessageMeta from '../../common/LastMessageMeta';\nimport DeleteChatModal from '../../common/DeleteChatModal';\nimport ListItem from '../../ui/ListItem';\nimport Badge from './Badge';\nimport ChatFolderModal from '../ChatFolderModal.async';\nimport ChatCallStatus from './ChatCallStatus';\n\nimport './Chat.scss';\n\ntype OwnProps = {\n style?: string;\n chatId: string;\n folderId?: number;\n orderDiff: number;\n animationType: ChatAnimationTypes;\n isPinned?: boolean;\n};\n\ntype StateProps = {\n chat?: ApiChat;\n isMuted?: boolean;\n user?: ApiUser;\n userStatus?: ApiUserStatus;\n actionTargetUserIds?: string[];\n actionTargetMessage?: ApiMessage;\n actionTargetChatId?: string;\n lastMessageSender?: ApiUser;\n lastMessageOutgoingStatus?: ApiMessageOutgoingStatus;\n draft?: ApiFormattedText;\n animationLevel?: number;\n isSelected?: boolean;\n canScrollDown?: boolean;\n canChangeFolder?: boolean;\n lastSyncTime?: number;\n};\n\nconst ANIMATION_DURATION = 200;\n\nconst Chat: FC = ({\n style,\n chatId,\n folderId,\n orderDiff,\n animationType,\n isPinned,\n chat,\n isMuted,\n user,\n userStatus,\n actionTargetUserIds,\n lastMessageSender,\n lastMessageOutgoingStatus,\n actionTargetMessage,\n actionTargetChatId,\n draft,\n animationLevel,\n isSelected,\n canScrollDown,\n canChangeFolder,\n lastSyncTime,\n}) => {\n const {\n openChat,\n focusLastMessage,\n } = getActions();\n\n // eslint-disable-next-line no-null/no-null\n const ref = useRef(null);\n\n const [isDeleteModalOpen, openDeleteModal, closeDeleteModal] = useFlag();\n const [isChatFolderModalOpen, openChatFolderModal, closeChatFolderModal] = useFlag();\n const [shouldRenderDeleteModal, markRenderDeleteModal, unmarkRenderDeleteModal] = useFlag();\n const [shouldRenderChatFolderModal, markRenderChatFolderModal, unmarkRenderChatFolderModal] = useFlag();\n\n const { lastMessage, typingStatus } = chat || {};\n const isAction = lastMessage && isActionMessage(lastMessage);\n\n useEnsureMessage(chatId, isAction ? lastMessage!.replyToMessageId : undefined, actionTargetMessage);\n\n const mediaThumbnail = lastMessage && !getMessageSticker(lastMessage)\n ? getMessageMediaThumbDataUri(lastMessage)\n : undefined;\n const mediaBlobUrl = useMedia(lastMessage ? getMessageMediaHash(lastMessage, 'micro') : undefined);\n const isRoundVideo = Boolean(lastMessage && getMessageRoundVideo(lastMessage));\n\n const actionTargetUsers = useMemo(() => {\n if (!actionTargetUserIds) {\n return undefined;\n }\n\n // No need for expensive global updates on users, so we avoid them\n const usersById = getGlobal().users.byId;\n return actionTargetUserIds.map((userId) => usersById[userId]).filter(Boolean as any);\n }, [actionTargetUserIds]);\n\n // Sets animation excess values when `orderDiff` changes and then resets excess values to animate.\n useLayoutEffect(() => {\n const element = ref.current;\n\n if (animationLevel === 0 || !element) {\n return;\n }\n\n // TODO Refactor animation: create `useListAnimation` that owns `orderDiff` and `animationType`\n if (animationType === ChatAnimationTypes.Opacity) {\n element.style.opacity = '0';\n\n fastRaf(() => {\n element.classList.add('animate-opacity');\n element.style.opacity = '1';\n });\n } else if (animationType === ChatAnimationTypes.Move) {\n element.style.transform = `translate3d(0, ${-orderDiff * 100}%, 0)`;\n\n fastRaf(() => {\n element.classList.add('animate-transform');\n element.style.transform = '';\n });\n } else {\n return;\n }\n\n setTimeout(() => {\n fastRaf(() => {\n element.classList.remove('animate-opacity', 'animate-transform');\n element.style.opacity = '';\n element.style.transform = '';\n });\n }, ANIMATION_DURATION + ANIMATION_END_DELAY);\n }, [animationLevel, orderDiff, animationType]);\n\n const handleClick = useCallback(() => {\n openChat({ id: chatId, shouldReplaceHistory: true });\n\n if (isSelected && canScrollDown) {\n focusLastMessage();\n }\n }, [\n isSelected,\n canScrollDown,\n openChat,\n chatId,\n focusLastMessage,\n ]);\n\n function handleDelete() {\n markRenderDeleteModal();\n openDeleteModal();\n }\n\n function handleChatFolderChange() {\n markRenderChatFolderModal();\n openChatFolderModal();\n }\n\n const contextActions = useChatContextActions({\n chat,\n user,\n handleDelete,\n handleChatFolderChange,\n folderId,\n isPinned,\n isMuted,\n canChangeFolder,\n });\n\n const lang = useLang();\n\n if (!chat) {\n return undefined;\n }\n\n function renderLastMessageOrTyping() {\n if (typingStatus && lastMessage && typingStatus.timestamp > lastMessage.date * 1000) {\n return ;\n }\n\n if (draft?.text.length) {\n return (\n

\n {lang('Draft')}\n {renderText(draft.text)}\n

\n );\n }\n\n if (!lastMessage) {\n return undefined;\n }\n\n if (isAction) {\n const isChat = chat && (isChatChannel(chat) || lastMessage.senderId === lastMessage.chatId);\n\n return (\n

\n {renderActionMessageText(\n lang,\n lastMessage,\n !isChat ? lastMessageSender : undefined,\n isChat ? chat : undefined,\n actionTargetUsers,\n actionTargetMessage,\n actionTargetChatId,\n { asTextWithSpoilers: true },\n )}\n

\n );\n }\n\n const senderName = getMessageSenderName(lang, chatId, lastMessageSender);\n\n return (\n

\n {senderName && (\n <>\n {renderText(senderName)}\n :\n \n )}\n {renderSummary(lang, lastMessage!, mediaBlobUrl || mediaThumbnail, isRoundVideo)}\n

\n );\n }\n\n const className = buildClassName(\n 'Chat chat-item-clickable',\n isUserId(chatId) ? 'private' : 'group',\n isSelected && 'selected',\n );\n\n return (\n \n
\n \n {chat.isCallActive && chat.isCallNotEmpty && (\n \n )}\n
\n
\n
\n

{renderText(getChatTitle(lang, chat, user))}

\n {chat.isVerified && }\n {isMuted && }\n {chat.lastMessage && (\n \n )}\n
\n
\n {renderLastMessageOrTyping()}\n \n
\n
\n {shouldRenderDeleteModal && (\n \n )}\n {shouldRenderChatFolderModal && (\n \n )}\n \n );\n};\n\nfunction renderSummary(lang: LangFn, message: ApiMessage, blobUrl?: string, isRoundVideo?: boolean) {\n if (!blobUrl) {\n return renderMessageSummary(lang, message);\n }\n\n return (\n \n \"\"\n {getMessageVideo(message) && }\n {renderMessageSummary(lang, message, true)}\n \n );\n}\n\nexport default memo(withGlobal(\n (global, { chatId }): StateProps => {\n const chat = selectChat(global, chatId);\n if (!chat || !chat.lastMessage) {\n return {};\n }\n\n const { senderId, replyToMessageId, isOutgoing } = chat.lastMessage;\n const lastMessageSender = senderId ? selectUser(global, senderId) : undefined;\n const lastMessageAction = getMessageAction(chat.lastMessage);\n const actionTargetMessage = lastMessageAction && replyToMessageId\n ? selectChatMessage(global, chat.id, replyToMessageId)\n : undefined;\n const { targetUserIds: actionTargetUserIds, targetChatId: actionTargetChatId } = lastMessageAction || {};\n const privateChatUserId = getPrivateChatUserId(chat);\n const {\n chatId: currentChatId,\n threadId: currentThreadId,\n type: messageListType,\n } = selectCurrentMessageList(global) || {};\n const isSelected = chatId === currentChatId && currentThreadId === MAIN_THREAD_ID;\n\n return {\n chat,\n isMuted: selectIsChatMuted(chat, selectNotifySettings(global), selectNotifyExceptions(global)),\n lastMessageSender,\n actionTargetUserIds,\n actionTargetChatId,\n actionTargetMessage,\n draft: selectDraft(global, chatId, MAIN_THREAD_ID),\n animationLevel: global.settings.byKey.animationLevel,\n isSelected,\n canScrollDown: isSelected && messageListType === 'thread',\n canChangeFolder: Boolean(global.chatFolders.orderedIds?.length),\n lastSyncTime: global.lastSyncTime,\n ...(isOutgoing && { lastMessageOutgoingStatus: selectOutgoingStatus(global, chat.lastMessage) }),\n ...(privateChatUserId && {\n user: selectUser(global, privateChatUserId),\n userStatus: selectUserStatus(global, privateChatUserId),\n }),\n };\n },\n)(Chat));\n","import React, { FC, memo, useCallback } from '../../../lib/teact/teact';\nimport { withGlobal } from '../../../global';\n\nimport { ApiChatFolder, ApiSticker } from '../../../api/types';\nimport { SettingsScreens } from '../../../types';\nimport { FolderEditDispatch } from '../../../hooks/reducers/useFoldersReducer';\n\nimport { IS_SINGLE_COLUMN_LAYOUT } from '../../../util/environment';\nimport { selectAnimatedEmoji, selectChatFolder } from '../../../global/selectors';\nimport useLang from '../../../hooks/useLang';\n\nimport Button from '../../ui/Button';\nimport AnimatedEmoji from '../../common/AnimatedEmoji';\n\nimport './EmptyFolder.scss';\n\ntype OwnProps = {\n folderId?: number;\n folderType: 'all' | 'archived' | 'folder';\n foldersDispatch?: FolderEditDispatch;\n onScreenSelect?: (screen: SettingsScreens) => void;\n};\n\ntype StateProps = {\n chatFolder?: ApiChatFolder;\n animatedEmoji?: ApiSticker;\n};\n\nconst EmptyFolder: FC = ({\n chatFolder, animatedEmoji, foldersDispatch, onScreenSelect,\n}) => {\n const lang = useLang();\n\n const handleEditFolder = useCallback(() => {\n foldersDispatch!({ type: 'editFolder', payload: chatFolder });\n onScreenSelect!(SettingsScreens.FoldersEditFolderFromChatList);\n }, [chatFolder, foldersDispatch, onScreenSelect]);\n\n return (\n
\n
{animatedEmoji && }
\n

{lang('FilterNoChatsToDisplay')}

\n

\n {lang(chatFolder ? 'ChatList.EmptyChatListFilterText' : 'Chat.EmptyChat')}\n

\n {chatFolder && foldersDispatch && onScreenSelect && (\n \n \n {lang('ChatList.EmptyChatListEditFilter')}\n \n )}\n
\n );\n};\n\nexport default memo(withGlobal((global, { folderId, folderType }): StateProps => {\n const chatFolder = folderId && folderType === 'folder' ? selectChatFolder(global, folderId) : undefined;\n\n return {\n chatFolder,\n animatedEmoji: selectAnimatedEmoji(global, '📂'),\n };\n})(EmptyFolder));\n","import React, {\n FC, memo, useMemo, useEffect,\n} from '../../../lib/teact/teact';\nimport { getActions } from '../../../global';\n\nimport { SettingsScreens } from '../../../types';\nimport { FolderEditDispatch } from '../../../hooks/reducers/useFoldersReducer';\n\nimport {\n ALL_FOLDER_ID,\n ARCHIVED_FOLDER_ID,\n CHAT_HEIGHT_PX,\n CHAT_LIST_SLICE,\n} from '../../../config';\nimport { IS_MAC_OS, IS_PWA } from '../../../util/environment';\nimport { mapValues } from '../../../util/iteratees';\nimport { getPinnedChatsCount } from '../../../util/folderManager';\nimport usePrevious from '../../../hooks/usePrevious';\nimport useInfiniteScroll from '../../../hooks/useInfiniteScroll';\nimport { useFolderManagerForOrderedIds } from '../../../hooks/useFolderManager';\nimport { useChatAnimationType } from './hooks';\n\nimport InfiniteScroll from '../../ui/InfiniteScroll';\nimport Loading from '../../ui/Loading';\nimport Chat from './Chat';\nimport EmptyFolder from './EmptyFolder';\n\ntype OwnProps = {\n folderType: 'all' | 'archived' | 'folder';\n folderId?: number;\n isActive: boolean;\n lastSyncTime?: number;\n foldersDispatch?: FolderEditDispatch;\n onScreenSelect?: (screen: SettingsScreens) => void;\n};\n\nconst ChatList: FC = ({\n folderType,\n folderId,\n isActive,\n foldersDispatch,\n onScreenSelect,\n}) => {\n const { openChat, openNextChat } = getActions();\n\n const resolvedFolderId = (\n folderType === 'all' ? ALL_FOLDER_ID : folderType === 'archived' ? ARCHIVED_FOLDER_ID : folderId!\n );\n\n const orderedIds = useFolderManagerForOrderedIds(resolvedFolderId);\n\n const orderById = useMemo(() => {\n if (!orderedIds) {\n return undefined;\n }\n\n return orderedIds.reduce((acc, id, i) => {\n acc[id] = i;\n return acc;\n }, {} as Record);\n }, [orderedIds]);\n\n const prevOrderById = usePrevious(orderById);\n\n const orderDiffById = useMemo(() => {\n if (!orderById || !prevOrderById) {\n return {};\n }\n\n return mapValues(orderById, (order, id) => {\n return prevOrderById[id] !== undefined ? order - prevOrderById[id] : -Infinity;\n });\n }, [orderById, prevOrderById]);\n\n const [viewportIds, getMore] = useInfiniteScroll(undefined, orderedIds, undefined, CHAT_LIST_SLICE);\n\n // Support + and + to navigate between chats\n useEffect(() => {\n if (!isActive || !orderedIds) {\n return undefined;\n }\n\n function handleKeyDown(e: KeyboardEvent) {\n if (IS_PWA && ((IS_MAC_OS && e.metaKey) || (!IS_MAC_OS && e.ctrlKey)) && e.code.startsWith('Digit')) {\n const [, digit] = e.code.match(/Digit(\\d)/) || [];\n if (!digit) return;\n\n const position = Number(digit) - 1;\n if (position > orderedIds!.length - 1) return;\n\n openChat({ id: orderedIds![position], shouldReplaceHistory: true });\n }\n\n if (e.altKey) {\n const targetIndexDelta = e.key === 'ArrowDown' ? 1 : e.key === 'ArrowUp' ? -1 : undefined;\n if (!targetIndexDelta) return;\n\n e.preventDefault();\n openNextChat({ targetIndexDelta, orderedIds });\n }\n }\n\n document.addEventListener('keydown', handleKeyDown);\n\n return () => {\n document.removeEventListener('keydown', handleKeyDown);\n };\n }, [isActive, openChat, openNextChat, orderedIds]);\n\n const getAnimationType = useChatAnimationType(orderDiffById);\n\n function renderChats() {\n const viewportOffset = orderedIds!.indexOf(viewportIds![0]);\n const pinnedCount = getPinnedChatsCount(resolvedFolderId) || 0;\n\n return viewportIds!.map((id, i) => (\n \n ));\n }\n\n return (\n \n {viewportIds?.length ? (\n renderChats()\n ) : viewportIds && !viewportIds.length ? (\n (\n \n )\n ) : (\n \n )}\n \n );\n};\n\nexport default memo(ChatList);\n","import { ApiChat, ApiMessage, ApiUser } from '../../../../api/types';\nimport {\n getChatTitle,\n getSenderTitle,\n isUserId,\n isChatGroup,\n} from '../../../../global/helpers';\nimport { LangFn } from '../../../../hooks/useLang';\n\nexport function getSenderName(\n lang: LangFn, message: ApiMessage, chatsById: Record, usersById: Record,\n) {\n const { senderId } = message;\n if (!senderId) {\n return undefined;\n }\n\n const sender = isUserId(senderId) ? usersById[senderId] : chatsById[senderId];\n\n let senderName = getSenderTitle(lang, sender);\n\n const chat = chatsById[message.chatId];\n if (chat) {\n if (isUserId(senderId) && (sender as ApiUser).isSelf) {\n senderName = `${lang('FromYou')} → ${getChatTitle(lang, chat)}`;\n } else if (isChatGroup(chat)) {\n senderName += ` → ${getChatTitle(lang, chat)}`;\n }\n }\n\n return senderName;\n}\n","import React, { FC, memo } from '../../../lib/teact/teact';\nimport { OwnProps } from './CustomSendMenu';\nimport { Bundles } from '../../../util/moduleLoader';\n\nimport useModuleLoader from '../../../hooks/useModuleLoader';\n\nconst CustomSendMenuAsync: FC = (props) => {\n const { isOpen } = props;\n const CustomSend = useModuleLoader(Bundles.Extra, 'CustomSendMenu', !isOpen);\n\n // eslint-disable-next-line react/jsx-props-no-spreading\n return CustomSend ? : undefined;\n};\n\nexport default memo(CustomSendMenuAsync);\n","import React, { FC, memo } from '../../../lib/teact/teact';\n\nimport useFlag from '../../../hooks/useFlag';\nimport buildClassName from '../../../util/buildClassName';\n\nimport './DropTarget.scss';\n\nexport type OwnProps = {\n isQuick?: boolean;\n onFileSelect: (e: React.DragEvent) => void;\n};\n\nconst DropTarget: FC = ({ isQuick, onFileSelect }) => {\n const [isHovered, markHovered, unmarkHovered] = useFlag();\n\n const handleDragEnter = () => { markHovered(); };\n const handleDragLeave = (e: React.DragEvent) => {\n const { relatedTarget: toTarget } = e;\n\n if (toTarget) {\n e.stopPropagation();\n }\n\n unmarkHovered();\n };\n\n const className = buildClassName(\n 'DropTarget',\n isHovered && 'hovered',\n );\n\n return (\n \n
\n
\n
Drop files here to send them
\n
{isQuick ? 'in a quick way' : 'without compression'}
\n
\n
\n );\n};\n\nexport default memo(DropTarget);\n","import React, {\n FC, memo, useCallback, useEffect, useRef,\n} from '../../../lib/teact/teact';\n\nimport useShowTransition from '../../../hooks/useShowTransition';\nimport buildClassName from '../../../util/buildClassName';\nimport getFilesFromDataTransferItems from './helpers/getFilesFromDataTransferItems';\n\nimport captureEscKeyListener from '../../../util/captureEscKeyListener';\nimport usePrevious from '../../../hooks/usePrevious';\n\nimport Portal from '../../ui/Portal';\nimport DropTarget from './DropTarget';\n\nimport './DropArea.scss';\n\nexport type OwnProps = {\n isOpen: boolean;\n withQuick?: boolean;\n onHide: NoneToVoidFunction;\n onFileSelect: (files: File[], isQuick: boolean) => void;\n};\n\nexport enum DropAreaState {\n None = 'none',\n Document = 'document',\n QuickFile = 'quick_file',\n}\n\nconst DROP_LEAVE_TIMEOUT_MS = 150;\n\nconst DropArea: FC = ({\n isOpen, withQuick, onHide, onFileSelect,\n}) => {\n // eslint-disable-next-line no-null/no-null\n const hideTimeoutRef = useRef(null);\n const prevWithQuick = usePrevious(withQuick);\n const { shouldRender, transitionClassNames } = useShowTransition(isOpen);\n\n useEffect(() => (isOpen ? captureEscKeyListener(onHide) : undefined), [isOpen, onHide]);\n\n const handleFilesDrop = useCallback(async (e: React.DragEvent) => {\n const { dataTransfer: dt } = e;\n let files: File[] = [];\n\n if (dt.files && dt.files.length > 0 && (!dt.items || !dt.items.length)) {\n files = files.concat(Array.from(dt.files));\n } else if (dt.items && dt.items.length > 0) {\n const folderFiles = await getFilesFromDataTransferItems(dt.items);\n if (folderFiles.length) {\n files = files.concat(folderFiles);\n }\n }\n\n onHide();\n onFileSelect(files, false);\n }, [onFileSelect, onHide]);\n\n const handleQuickFilesDrop = useCallback((e: React.DragEvent) => {\n const { dataTransfer: dt } = e;\n\n if (dt.files && dt.files.length > 0) {\n onHide();\n onFileSelect(Array.from(dt.files), true);\n }\n }, [onFileSelect, onHide]);\n\n const handleDragLeave = useCallback((e: React.DragEvent) => {\n e.stopPropagation();\n\n const { target: fromTarget, relatedTarget: toTarget } = e;\n\n // Esc button pressed during drag event\n if ((fromTarget as HTMLDivElement).matches('.DropTarget, .DropArea') && !toTarget) {\n hideTimeoutRef.current = window.setTimeout(() => {\n onHide();\n }, DROP_LEAVE_TIMEOUT_MS);\n }\n }, [onHide]);\n\n const handleDragOver = () => {\n if (hideTimeoutRef.current) {\n window.clearTimeout(hideTimeoutRef.current);\n }\n };\n\n if (!shouldRender) {\n return undefined;\n }\n\n const className = buildClassName(\n 'DropArea',\n transitionClassNames,\n );\n\n return (\n \n
\n \n {(withQuick || prevWithQuick) && }\n
\n
\n );\n};\n\nexport default memo(DropArea);\n","import React, { FC, memo } from '../../../lib/teact/teact';\nimport { OwnProps } from './EmojiTooltip';\nimport { Bundles } from '../../../util/moduleLoader';\n\nimport useModuleLoader from '../../../hooks/useModuleLoader';\n\nconst EmojiTooltipAsync: FC = (props) => {\n const { isOpen } = props;\n const EmojiTooltip = useModuleLoader(Bundles.Extra, 'EmojiTooltip', !isOpen);\n\n // eslint-disable-next-line react/jsx-props-no-spreading\n return EmojiTooltip ? : undefined;\n};\n\nexport default memo(EmojiTooltipAsync);\n","import { ChangeEvent } from 'react';\nimport React, {\n FC, useEffect, useRef, memo, useState, useCallback,\n} from '../../../lib/teact/teact';\nimport { getActions, withGlobal } from '../../../global';\n\nimport { IAnchorPosition, ISettings } from '../../../types';\n\nimport { EDITABLE_INPUT_ID } from '../../../config';\nimport { selectReplyingToId } from '../../../global/selectors';\nimport { debounce } from '../../../util/schedulers';\nimport focusEditableElement from '../../../util/focusEditableElement';\nimport buildClassName from '../../../util/buildClassName';\nimport {\n IS_ANDROID, IS_EMOJI_SUPPORTED, IS_IOS, IS_SINGLE_COLUMN_LAYOUT, IS_TOUCH_ENV,\n} from '../../../util/environment';\nimport captureKeyboardListeners from '../../../util/captureKeyboardListeners';\nimport useLayoutEffectWithPrevDeps from '../../../hooks/useLayoutEffectWithPrevDeps';\nimport useFlag from '../../../hooks/useFlag';\nimport { isHeavyAnimating } from '../../../hooks/useHeavyAnimationCheck';\nimport useSendMessageAction from '../../../hooks/useSendMessageAction';\nimport useLang from '../../../hooks/useLang';\nimport parseEmojiOnlyString from '../../common/helpers/parseEmojiOnlyString';\nimport { isSelectionInsideInput } from './helpers/selection';\nimport renderText from '../../common/helpers/renderText';\n\nimport TextFormatter from './TextFormatter';\n\nconst CONTEXT_MENU_CLOSE_DELAY_MS = 100;\n// Focus slows down animation, also it breaks transition layout in Chrome\nconst FOCUS_DELAY_MS = 350;\nconst TRANSITION_DURATION_FACTOR = 50;\n\ntype OwnProps = {\n id: string;\n chatId: string;\n threadId: number;\n isAttachmentModalInput?: boolean;\n editableInputId?: string;\n html: string;\n placeholder: string;\n forcedPlaceholder?: string;\n canAutoFocus: boolean;\n shouldSuppressFocus?: boolean;\n shouldSuppressTextFormatter?: boolean;\n onUpdate: (html: string) => void;\n onSuppressedFocus?: () => void;\n onSend: () => void;\n};\n\ntype StateProps = {\n replyingToId?: number;\n noTabCapture?: boolean;\n messageSendKeyCombo?: ISettings['messageSendKeyCombo'];\n};\n\nconst MAX_INPUT_HEIGHT = IS_SINGLE_COLUMN_LAYOUT ? 256 : 416;\nconst TAB_INDEX_PRIORITY_TIMEOUT = 2000;\nconst TEXT_FORMATTER_SAFE_AREA_PX = 90;\n// For some reason Safari inserts `
` after user removes text from input\nconst SAFARI_BR = '
';\n\nfunction clearSelection() {\n const selection = window.getSelection();\n if (!selection) {\n return;\n }\n\n if (selection.removeAllRanges) {\n selection.removeAllRanges();\n } else if (selection.empty) {\n selection.empty();\n }\n}\n\nconst MessageInput: FC = ({\n id,\n chatId,\n threadId,\n isAttachmentModalInput,\n editableInputId,\n html,\n placeholder,\n forcedPlaceholder,\n canAutoFocus,\n shouldSuppressFocus,\n shouldSuppressTextFormatter,\n replyingToId,\n noTabCapture,\n messageSendKeyCombo,\n onUpdate,\n onSuppressedFocus,\n onSend,\n}) => {\n const {\n editLastMessage,\n replyToNextMessage,\n } = getActions();\n\n // eslint-disable-next-line no-null/no-null\n const inputRef = useRef(null);\n // eslint-disable-next-line no-null/no-null\n const cloneRef = useRef(null);\n\n const lang = useLang();\n const isContextMenuOpenRef = useRef(false);\n const [isTextFormatterOpen, openTextFormatter, closeTextFormatter] = useFlag();\n const [textFormatterAnchorPosition, setTextFormatterAnchorPosition] = useState();\n const [selectedRange, setSelectedRange] = useState();\n\n const sendMessageAction = useSendMessageAction(chatId, threadId);\n\n useEffect(() => {\n if (!isAttachmentModalInput) return;\n updateInputHeight(false);\n }, [isAttachmentModalInput]);\n\n useLayoutEffectWithPrevDeps(([prevHtml]) => {\n if (html !== inputRef.current!.innerHTML) {\n inputRef.current!.innerHTML = html;\n }\n\n if (html !== cloneRef.current!.innerHTML) {\n cloneRef.current!.innerHTML = html;\n }\n\n if (prevHtml !== undefined && prevHtml !== html) {\n updateInputHeight(!html.length);\n }\n }, [html]);\n\n const chatIdRef = useRef(chatId);\n chatIdRef.current = chatId;\n const focusInput = useCallback(() => {\n if (!inputRef.current) {\n return;\n }\n\n if (isHeavyAnimating()) {\n setTimeout(focusInput, FOCUS_DELAY_MS);\n return;\n }\n\n focusEditableElement(inputRef.current!);\n }, []);\n\n const handleCloseTextFormatter = useCallback(() => {\n closeTextFormatter();\n clearSelection();\n }, [closeTextFormatter]);\n\n function checkSelection() {\n // Disable the formatter on iOS devices for now.\n if (IS_IOS) {\n return false;\n }\n\n const selection = window.getSelection();\n if (!selection || !selection.rangeCount || isContextMenuOpenRef.current) {\n closeTextFormatter();\n return false;\n }\n\n const selectionRange = selection.getRangeAt(0);\n const selectedText = selectionRange.toString().trim();\n if (\n shouldSuppressTextFormatter\n || !isSelectionInsideInput(selectionRange, editableInputId || EDITABLE_INPUT_ID)\n || !selectedText\n || parseEmojiOnlyString(selectedText)\n || !selectionRange.START_TO_END\n ) {\n closeTextFormatter();\n return false;\n }\n\n return true;\n }\n\n function processSelection() {\n if (!checkSelection()) {\n return;\n }\n\n const selectionRange = window.getSelection()!.getRangeAt(0);\n const selectionRect = selectionRange.getBoundingClientRect();\n const inputRect = inputRef.current!.getBoundingClientRect();\n\n let x = (selectionRect.left + selectionRect.width / 2) - inputRect.left;\n\n if (x < TEXT_FORMATTER_SAFE_AREA_PX) {\n x = TEXT_FORMATTER_SAFE_AREA_PX;\n } else if (x > inputRect.width - TEXT_FORMATTER_SAFE_AREA_PX) {\n x = inputRect.width - TEXT_FORMATTER_SAFE_AREA_PX;\n }\n\n setTextFormatterAnchorPosition({\n x,\n y: selectionRect.top - inputRect.top,\n });\n\n setSelectedRange(selectionRange);\n openTextFormatter();\n }\n\n function handleMouseDown(event: React.MouseEvent) {\n function handleMouseUp() {\n processSelection();\n\n event.target.removeEventListener('mouseup', handleMouseUp);\n }\n\n if (event.button !== 2) {\n event.target.addEventListener('mouseup', handleMouseUp);\n return;\n }\n\n if (isContextMenuOpenRef.current === true) {\n return;\n }\n\n isContextMenuOpenRef.current = true;\n\n function closeContextMenuMouseListener() {\n setTimeout(() => {\n isContextMenuOpenRef.current = false;\n }, CONTEXT_MENU_CLOSE_DELAY_MS);\n\n window.removeEventListener('mouseup', closeContextMenuMouseListener);\n }\n\n function closeContextMenuKeyListener(e: KeyboardEvent) {\n if (e.key !== 'Esc' && e.key !== 'Escape') {\n return;\n }\n\n setTimeout(() => {\n isContextMenuOpenRef.current = false;\n }, CONTEXT_MENU_CLOSE_DELAY_MS);\n\n window.removeEventListener('keydown', closeContextMenuKeyListener);\n }\n\n document.addEventListener('mousedown', closeContextMenuMouseListener);\n document.addEventListener('keydown', closeContextMenuKeyListener);\n }\n\n function handleKeyDown(e: React.KeyboardEvent) {\n function handleKeyUp() {\n processSelection();\n\n e.target.removeEventListener('keyup', handleKeyUp);\n }\n\n if (!html.length && (e.metaKey || e.ctrlKey)) {\n const targetIndexDelta = e.key === 'ArrowDown' ? 1 : e.key === 'ArrowUp' ? -1 : undefined;\n if (targetIndexDelta) {\n e.preventDefault();\n\n replyToNextMessage({ targetIndexDelta });\n return;\n }\n }\n\n if (e.key === 'Enter' && !e.shiftKey) {\n if (\n !(IS_IOS || IS_ANDROID)\n && (\n (messageSendKeyCombo === 'enter' && !e.shiftKey)\n || (messageSendKeyCombo === 'ctrl-enter' && (e.ctrlKey || e.metaKey))\n )\n ) {\n e.preventDefault();\n\n closeTextFormatter();\n onSend();\n }\n } else if (e.key === 'ArrowUp' && !html.length && !e.metaKey && !e.ctrlKey && !e.altKey) {\n e.preventDefault();\n editLastMessage();\n } else {\n e.target.addEventListener('keyup', handleKeyUp);\n }\n }\n\n function handleChange(e: ChangeEvent) {\n const { innerHTML, textContent } = e.currentTarget;\n\n onUpdate(innerHTML === SAFARI_BR ? '' : innerHTML);\n sendMessageAction({ type: 'typing' });\n\n // Reset focus on the input to remove any active styling when input is cleared\n if (\n !IS_TOUCH_ENV\n && (!textContent || !textContent.length)\n // When emojis are not supported, innerHTML contains an emoji img tag that doesn't exist in the textContext\n && !(!IS_EMOJI_SUPPORTED && innerHTML.includes('emoji-small'))\n ) {\n const selection = window.getSelection()!;\n if (selection) {\n inputRef.current!.blur();\n selection.removeAllRanges();\n focusEditableElement(inputRef.current!, true);\n }\n }\n }\n\n function stopEvent(e: React.MouseEvent) {\n if (!checkSelection()) {\n return;\n }\n\n e.preventDefault();\n e.stopPropagation();\n }\n\n function updateInputHeight(willSend = false) {\n const input = inputRef.current!;\n const clone = cloneRef.current!;\n const currentHeight = Number(input.style.height.replace('px', ''));\n const newHeight = Math.min(clone.scrollHeight, MAX_INPUT_HEIGHT);\n if (newHeight === currentHeight) {\n return;\n }\n\n const transitionDuration = Math.round(\n TRANSITION_DURATION_FACTOR * Math.log(Math.abs(newHeight - currentHeight)),\n );\n\n const exec = () => {\n input.style.height = `${newHeight}px`;\n input.style.transitionDuration = `${transitionDuration}ms`;\n input.classList.toggle('overflown', clone.scrollHeight > MAX_INPUT_HEIGHT);\n };\n\n if (willSend) {\n // Sync with sending animation\n requestAnimationFrame(exec);\n } else {\n exec();\n }\n }\n\n useEffect(() => {\n if (IS_TOUCH_ENV) {\n return;\n }\n\n if (canAutoFocus) {\n focusInput();\n }\n }, [chatId, focusInput, replyingToId, canAutoFocus]);\n\n useEffect(() => {\n if (noTabCapture) {\n return undefined;\n }\n\n const captureFirstTab = debounce((e: KeyboardEvent) => {\n if (e.key === 'Tab') {\n e.preventDefault();\n requestAnimationFrame(focusInput);\n }\n }, TAB_INDEX_PRIORITY_TIMEOUT, true, false);\n\n return captureKeyboardListeners({ onTab: captureFirstTab });\n }, [focusInput, noTabCapture]);\n\n useEffect(() => {\n const input = inputRef.current!;\n\n function suppressFocus() {\n input.blur();\n }\n\n if (shouldSuppressFocus) {\n input.addEventListener('focus', suppressFocus);\n }\n\n return () => {\n input.removeEventListener('focus', suppressFocus);\n };\n }, [shouldSuppressFocus]);\n\n const className = buildClassName(\n 'form-control custom-scroll',\n html.length > 0 && 'touched',\n shouldSuppressFocus && 'focus-disabled',\n );\n\n return (\n
\n \n
\n {!forcedPlaceholder && {placeholder}}\n \n {forcedPlaceholder && {renderText(forcedPlaceholder!)}}\n
\n );\n};\n\nexport default memo(withGlobal(\n (global, { chatId, threadId }: OwnProps): StateProps => {\n const { messageSendKeyCombo } = global.settings.byKey;\n\n return {\n messageSendKeyCombo,\n replyingToId: chatId && threadId ? selectReplyingToId(global, chatId, threadId) : undefined,\n noTabCapture: global.isPollModalOpen || global.payment.isPaymentModalOpen,\n };\n },\n)(MessageInput));\n","import React, {\n FC, memo, useCallback, useEffect, useRef, useState,\n} from '../../../lib/teact/teact';\n\nimport { IAnchorPosition } from '../../../types';\nimport { ApiMessageEntityTypes } from '../../../api/types';\n\nimport { EDITABLE_INPUT_ID } from '../../../config';\nimport buildClassName from '../../../util/buildClassName';\nimport { ensureProtocol } from '../../../util/ensureProtocol';\nimport captureEscKeyListener from '../../../util/captureEscKeyListener';\nimport getKeyFromEvent from '../../../util/getKeyFromEvent';\nimport useShowTransition from '../../../hooks/useShowTransition';\nimport useVirtualBackdrop from '../../../hooks/useVirtualBackdrop';\nimport useFlag from '../../../hooks/useFlag';\nimport useLang from '../../../hooks/useLang';\n\nimport Button from '../../ui/Button';\n\nimport './TextFormatter.scss';\n\nexport type OwnProps = {\n isOpen: boolean;\n anchorPosition?: IAnchorPosition;\n selectedRange?: Range;\n setSelectedRange: (range: Range) => void;\n onClose: () => void;\n};\n\ninterface ISelectedTextFormats {\n bold?: boolean;\n italic?: boolean;\n underline?: boolean;\n strikethrough?: boolean;\n monospace?: boolean;\n spoiler?: boolean;\n}\n\nconst TEXT_FORMAT_BY_TAG_NAME: Record = {\n B: 'bold',\n STRONG: 'bold',\n I: 'italic',\n EM: 'italic',\n U: 'underline',\n DEL: 'strikethrough',\n CODE: 'monospace',\n SPAN: 'spoiler',\n};\nconst fragmentEl = document.createElement('div');\n\nconst TextFormatter: FC = ({\n isOpen,\n anchorPosition,\n selectedRange,\n setSelectedRange,\n onClose,\n}) => {\n // eslint-disable-next-line no-null/no-null\n const containerRef = useRef(null);\n // eslint-disable-next-line no-null/no-null\n const linkUrlInputRef = useRef(null);\n const { shouldRender, transitionClassNames } = useShowTransition(isOpen);\n const [isLinkControlOpen, openLinkControl, closeLinkControl] = useFlag();\n const [linkUrl, setLinkUrl] = useState('');\n const [isEditingLink, setIsEditingLink] = useState(false);\n const [inputClassName, setInputClassName] = useState();\n const [selectedTextFormats, setSelectedTextFormats] = useState({});\n\n useEffect(() => (isOpen ? captureEscKeyListener(onClose) : undefined), [isOpen, onClose]);\n useVirtualBackdrop(\n isOpen,\n containerRef,\n onClose,\n );\n\n useEffect(() => {\n if (isLinkControlOpen) {\n linkUrlInputRef.current!.focus();\n } else {\n setLinkUrl('');\n setIsEditingLink(false);\n }\n }, [isLinkControlOpen]);\n\n useEffect(() => {\n if (!shouldRender) {\n closeLinkControl();\n setSelectedTextFormats({});\n setInputClassName(undefined);\n }\n }, [closeLinkControl, shouldRender]);\n\n useEffect(() => {\n if (!isOpen || !selectedRange) {\n return;\n }\n\n const selectedFormats: ISelectedTextFormats = {};\n let { parentElement } = selectedRange.commonAncestorContainer;\n while (parentElement && parentElement.id !== EDITABLE_INPUT_ID) {\n const textFormat = TEXT_FORMAT_BY_TAG_NAME[parentElement.tagName];\n if (textFormat) {\n selectedFormats[textFormat] = true;\n }\n\n parentElement = parentElement.parentElement;\n }\n\n setSelectedTextFormats(selectedFormats);\n }, [isOpen, selectedRange, openLinkControl]);\n\n const restoreSelection = useCallback(() => {\n if (!selectedRange) {\n return;\n }\n\n const selection = window.getSelection();\n if (selection) {\n selection.removeAllRanges();\n selection.addRange(selectedRange);\n }\n }, [selectedRange]);\n\n const updateSelectedRange = useCallback(() => {\n const selection = window.getSelection();\n if (selection) {\n setSelectedRange(selection.getRangeAt(0));\n }\n }, [setSelectedRange]);\n\n const getSelectedText = useCallback(() => {\n if (!selectedRange) {\n return undefined;\n }\n fragmentEl.innerText = selectedRange.toString();\n\n return fragmentEl.innerHTML;\n }, [selectedRange]);\n\n const getSelectedElement = useCallback(() => {\n if (!selectedRange) {\n return undefined;\n }\n\n return selectedRange.commonAncestorContainer.parentElement;\n }, [selectedRange]);\n\n function updateInputStyles() {\n const input = linkUrlInputRef.current;\n if (!input) {\n return;\n }\n\n const { offsetWidth, scrollWidth, scrollLeft } = input;\n if (scrollWidth <= offsetWidth) {\n setInputClassName(undefined);\n return;\n }\n\n let className = '';\n if (scrollLeft < scrollWidth - offsetWidth) {\n className = 'mask-right';\n }\n if (scrollLeft > 0) {\n className += ' mask-left';\n }\n\n setInputClassName(className);\n }\n\n function handleLinkUrlChange(e: React.ChangeEvent) {\n setLinkUrl(e.target.value);\n updateInputStyles();\n }\n\n function getFormatButtonClassName(key: keyof ISelectedTextFormats) {\n if (selectedTextFormats[key]) {\n return 'active';\n }\n\n if (key === 'monospace' || key === 'strikethrough') {\n if (Object.keys(selectedTextFormats).some(\n (fKey) => fKey !== key && Boolean(selectedTextFormats[fKey as keyof ISelectedTextFormats]),\n )) {\n return 'disabled';\n }\n } else if (selectedTextFormats.monospace || selectedTextFormats.strikethrough) {\n return 'disabled';\n }\n\n return undefined;\n }\n\n const handleSpoilerText = useCallback(() => {\n if (selectedTextFormats.spoiler) {\n const element = getSelectedElement();\n if (\n !selectedRange\n || !element\n || element.dataset.entityType !== ApiMessageEntityTypes.Spoiler\n || !element.textContent\n ) {\n return;\n }\n\n element.replaceWith(element.textContent);\n setSelectedTextFormats((selectedFormats) => ({\n ...selectedFormats,\n spoiler: false,\n }));\n\n return;\n }\n\n const text = getSelectedText();\n document.execCommand(\n 'insertHTML', false, `${text}`,\n );\n onClose();\n }, [getSelectedElement, getSelectedText, onClose, selectedRange, selectedTextFormats.spoiler]);\n\n const handleBoldText = useCallback(() => {\n setSelectedTextFormats((selectedFormats) => {\n // Somehow re-applying 'bold' command to already bold text doesn't work\n document.execCommand(selectedFormats.bold ? 'removeFormat' : 'bold');\n Object.keys(selectedFormats).forEach((key) => {\n if ((key === 'italic' || key === 'underline') && Boolean(selectedFormats[key])) {\n document.execCommand(key);\n }\n });\n\n updateSelectedRange();\n return {\n ...selectedFormats,\n bold: !selectedFormats.bold,\n };\n });\n }, [updateSelectedRange]);\n\n const handleItalicText = useCallback(() => {\n document.execCommand('italic');\n updateSelectedRange();\n setSelectedTextFormats((selectedFormats) => ({\n ...selectedFormats,\n italic: !selectedFormats.italic,\n }));\n }, [updateSelectedRange]);\n\n const handleUnderlineText = useCallback(() => {\n document.execCommand('underline');\n updateSelectedRange();\n setSelectedTextFormats((selectedFormats) => ({\n ...selectedFormats,\n underline: !selectedFormats.underline,\n }));\n }, [updateSelectedRange]);\n\n const handleStrikethroughText = useCallback(() => {\n if (selectedTextFormats.strikethrough) {\n const element = getSelectedElement();\n if (\n !selectedRange\n || !element\n || element.tagName !== 'DEL'\n || !element.textContent\n ) {\n return;\n }\n\n element.replaceWith(element.textContent);\n setSelectedTextFormats((selectedFormats) => ({\n ...selectedFormats,\n strikethrough: false,\n }));\n\n return;\n }\n\n const text = getSelectedText();\n document.execCommand('insertHTML', false, `${text}`);\n onClose();\n }, [\n getSelectedElement, getSelectedText, onClose, selectedRange, selectedTextFormats.strikethrough,\n ]);\n\n const handleMonospaceText = useCallback(() => {\n if (selectedTextFormats.monospace) {\n const element = getSelectedElement();\n if (\n !selectedRange\n || !element\n || element.tagName !== 'CODE'\n || !element.textContent\n ) {\n return;\n }\n\n element.replaceWith(element.textContent);\n setSelectedTextFormats((selectedFormats) => ({\n ...selectedFormats,\n monospace: false,\n }));\n\n return;\n }\n\n const text = getSelectedText();\n document.execCommand('insertHTML', false, `${text}`);\n onClose();\n }, [\n getSelectedElement, getSelectedText, onClose, selectedRange, selectedTextFormats.monospace,\n ]);\n\n const handleLinkUrlConfirm = useCallback(() => {\n const formattedLinkUrl = encodeURI(ensureProtocol(linkUrl) || '');\n\n if (isEditingLink) {\n const element = getSelectedElement();\n if (!element || element.tagName !== 'A') {\n return;\n }\n\n (element as HTMLAnchorElement).href = formattedLinkUrl;\n\n onClose();\n\n return;\n }\n\n const text = getSelectedText();\n restoreSelection();\n document.execCommand(\n 'insertHTML',\n false,\n `${text}`,\n );\n onClose();\n }, [getSelectedElement, getSelectedText, isEditingLink, linkUrl, onClose, restoreSelection]);\n\n const handleKeyDown = useCallback((e: KeyboardEvent) => {\n const HANDLERS_BY_KEY: Record = {\n k: openLinkControl,\n b: handleBoldText,\n u: handleUnderlineText,\n i: handleItalicText,\n m: handleMonospaceText,\n s: handleStrikethroughText,\n p: handleSpoilerText,\n };\n\n const handler = HANDLERS_BY_KEY[getKeyFromEvent(e)];\n\n if (\n e.altKey\n || !(e.ctrlKey || e.metaKey)\n || !handler\n ) {\n return;\n }\n\n e.preventDefault();\n e.stopPropagation();\n handler();\n }, [\n openLinkControl, handleBoldText, handleUnderlineText, handleItalicText, handleMonospaceText,\n handleStrikethroughText, handleSpoilerText,\n ]);\n\n useEffect(() => {\n if (isOpen) {\n document.addEventListener('keydown', handleKeyDown);\n }\n\n return () => document.removeEventListener('keydown', handleKeyDown);\n }, [isOpen, handleKeyDown]);\n\n const lang = useLang();\n\n function handleContainerKeyDown(e: React.KeyboardEvent) {\n if (e.key === 'Enter' && isLinkControlOpen) {\n handleLinkUrlConfirm();\n e.preventDefault();\n }\n }\n\n if (!shouldRender) {\n return undefined;\n }\n\n const className = buildClassName(\n 'TextFormatter',\n transitionClassNames,\n isLinkControlOpen && 'link-control-shown',\n );\n\n const linkUrlConfirmClassName = buildClassName(\n 'TextFormatter-link-url-confirm',\n Boolean(linkUrl.length) && 'shown',\n );\n\n const style = anchorPosition\n ? `left: ${anchorPosition.x}px; top: ${anchorPosition.y}px;--text-formatter-left: ${anchorPosition.x}px;`\n : '';\n\n return (\n \n
\n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
\n \n
\n\n
\n
\n \n
\n\n \n \n
\n\n
\n
\n \n \n \n
\n
\n
\n
\n );\n};\n\nexport default memo(TextFormatter);\n","export default async function getFilesFromDataTransferItems(dataTransferItems: DataTransferItemList) {\n const files: File[] = [];\n\n function traverseFileTreePromise(entry: FileSystemEntry | File, item: DataTransferItem) {\n return new Promise((resolve) => {\n if (entry instanceof File) {\n files.push(entry);\n resolve(entry);\n } else if (entry.isFile) {\n const itemFile = item.getAsFile();\n (entry as FileSystemFileEntry).file((file) => {\n files.push(file);\n resolve(file);\n }, () => {\n // iOS Safari throws an error \"NotFoundError: Path does not exist\" for files from the clipboard\n // https://stackoverflow.com/a/50059309\n if (itemFile) {\n files.push(itemFile);\n }\n resolve(itemFile);\n });\n } else if (entry.isDirectory) {\n const dirReader = (entry as FileSystemDirectoryEntry).createReader();\n dirReader.readEntries((entries) => {\n const entriesPromises = [];\n for (let i = 0; i < entries.length; i++) {\n entriesPromises.push(traverseFileTreePromise(entries[i], item));\n }\n resolve(Promise.all(entriesPromises));\n });\n }\n });\n }\n\n const entriesPromises = [];\n for (let i = 0; i < dataTransferItems.length; i++) {\n const item = dataTransferItems[i];\n if (item.kind === 'file') {\n const entry = item.webkitGetAsEntry() || item.getAsFile();\n if (entry) {\n entriesPromises.push(traverseFileTreePromise(entry, item));\n }\n }\n }\n\n await Promise.all(entriesPromises);\n\n return files;\n}\n","const RE_BR = /(
|)/g;\nconst RE_SPACE = /( |\\u00A0)/g;\nconst RE_CLEAN_HTML = /(
|<\\/div>)/gi;\nconst RE_EXTRA_NEW_LINE = /\\n$/i;\n\nexport function prepareForRegExp(html: string) {\n return html\n .replace(RE_SPACE, ' ')\n .replace(RE_BR, '\\n')\n .replace(RE_CLEAN_HTML, '')\n .replace(RE_EXTRA_NEW_LINE, '');\n}\n","const MAX_NESTING_PARENTS = 5;\n\nexport function isSelectionInsideInput(selectionRange: Range, inputId: string) {\n const { commonAncestorContainer } = selectionRange;\n let parentNode: HTMLElement | null = commonAncestorContainer as HTMLElement;\n let iterations = 1;\n while (parentNode && parentNode.id !== inputId && iterations < MAX_NESTING_PARENTS) {\n parentNode = parentNode.parentElement;\n iterations++;\n }\n\n return Boolean(parentNode && parentNode.id === inputId);\n}\n","import { areSortedArraysEqual } from './iteratees';\n\nconst cache = new WeakMap();\n\nexport default function memoized(fn: T) {\n return (...args: Parameters): ReturnType => {\n const cached = cache.get(fn);\n if (cached && areSortedArraysEqual(cached.lastArgs, args)) {\n return cached.lastResult;\n }\n\n const result = fn(...args);\n cache.set(fn, { lastArgs: args, lastResult: result });\n return result;\n };\n}\n","import {\n useCallback, useEffect, useState,\n} from '../../../../lib/teact/teact';\n\nimport { EDITABLE_INPUT_ID } from '../../../../config';\nimport { MEMO_EMPTY_ARRAY } from '../../../../util/memo';\nimport { prepareForRegExp } from '../helpers/prepareForRegExp';\nimport {\n EmojiData, EmojiModule, EmojiRawData, uncompressEmoji,\n} from '../../../../util/emoji';\nimport focusEditableElement from '../../../../util/focusEditableElement';\nimport {\n buildCollectionByKey, flatten, mapValues, pickTruthy, unique,\n} from '../../../../util/iteratees';\nimport memoized from '../../../../util/memoized';\nimport useFlag from '../../../../hooks/useFlag';\nimport renderText from '../../../common/helpers/renderText';\n\ninterface Library {\n keywords: string[];\n byKeyword: Record;\n names: string[];\n byName: Record;\n}\n\nlet emojiDataPromise: Promise;\nlet emojiRawData: EmojiRawData;\nlet emojiData: EmojiData;\n\nlet RE_EMOJI_SEARCH: RegExp;\nconst EMOJIS_LIMIT = 36;\nconst FILTER_MIN_LENGTH = 2;\n\nconst prepareRecentEmojisMemo = memoized(prepareRecentEmojis);\nconst prepareLibraryMemo = memoized(prepareLibrary);\nconst searchInLibraryMemo = memoized(searchInLibrary);\n\ntry {\n RE_EMOJI_SEARCH = /(^|\\s):[-+_:\\p{L}\\p{N}]*$/gui;\n} catch (e) {\n // Support for older versions of firefox\n RE_EMOJI_SEARCH = /(^|\\s):[-+_:\\d\\wа-яё]*$/gi;\n}\n\nexport default function useEmojiTooltip(\n isAllowed: boolean,\n htmlRef: { current: string },\n recentEmojiIds: string[],\n inputId = EDITABLE_INPUT_ID,\n onUpdateHtml: (html: string) => void,\n baseEmojiKeywords?: Record,\n emojiKeywords?: Record,\n isDisabled = false,\n) {\n const [isOpen, markIsOpen, unmarkIsOpen] = useFlag();\n const [byId, setById] = useState | undefined>();\n const [shouldForceInsertEmoji, setShouldForceInsertEmoji] = useState(false);\n const [filteredEmojis, setFilteredEmojis] = useState(MEMO_EMPTY_ARRAY);\n\n // Initialize data on first render.\n useEffect(() => {\n if (isDisabled) return;\n const exec = () => {\n setById(emojiData.emojis);\n };\n\n if (emojiData) {\n exec();\n } else {\n ensureEmojiData()\n .then(exec);\n }\n }, [isDisabled]);\n\n const html = htmlRef.current;\n useEffect(() => {\n if (!isAllowed || !html || !byId || isDisabled) {\n unmarkIsOpen();\n return;\n }\n\n const code = html.includes(':') && getEmojiCode(html);\n if (!code) {\n setFilteredEmojis(MEMO_EMPTY_ARRAY);\n unmarkIsOpen();\n return;\n }\n\n const forceSend = code.length > 2 && code.endsWith(':');\n const filter = code.substr(1, forceSend ? code.length - 2 : undefined);\n let matched: Emoji[] = MEMO_EMPTY_ARRAY;\n\n setShouldForceInsertEmoji(forceSend);\n\n if (!filter) {\n matched = prepareRecentEmojisMemo(byId, recentEmojiIds, EMOJIS_LIMIT);\n } else if (filter.length >= FILTER_MIN_LENGTH) {\n const library = prepareLibraryMemo(byId, baseEmojiKeywords, emojiKeywords);\n matched = searchInLibraryMemo(library, filter, EMOJIS_LIMIT);\n }\n\n if (matched.length) {\n if (!forceSend) {\n markIsOpen();\n }\n setFilteredEmojis(matched);\n } else {\n unmarkIsOpen();\n }\n }, [\n byId, html, isAllowed, markIsOpen, recentEmojiIds, unmarkIsOpen, setShouldForceInsertEmoji,\n isDisabled, baseEmojiKeywords, emojiKeywords,\n ]);\n\n const insertEmoji = useCallback((textEmoji: string, isForce?: boolean) => {\n const currentHtml = htmlRef.current;\n const atIndex = currentHtml.lastIndexOf(':', isForce ? currentHtml.lastIndexOf(':') - 1 : undefined);\n if (atIndex !== -1) {\n onUpdateHtml(`${currentHtml.substr(0, atIndex)}${renderText(textEmoji, ['emoji_html'])}`);\n const messageInput = document.getElementById(inputId)!;\n requestAnimationFrame(() => {\n focusEditableElement(messageInput, true, true);\n });\n }\n\n unmarkIsOpen();\n }, [htmlRef, inputId, onUpdateHtml, unmarkIsOpen]);\n\n useEffect(() => {\n if (isOpen && shouldForceInsertEmoji && filteredEmojis.length) {\n insertEmoji(filteredEmojis[0].native, true);\n }\n }, [filteredEmojis, insertEmoji, isOpen, shouldForceInsertEmoji]);\n\n return {\n isEmojiTooltipOpen: isOpen,\n closeEmojiTooltip: unmarkIsOpen,\n filteredEmojis,\n insertEmoji,\n };\n}\n\nfunction getEmojiCode(html: string) {\n const emojis = prepareForRegExp(html).match(RE_EMOJI_SEARCH);\n\n return emojis ? emojis[0].trim() : undefined;\n}\n\nasync function ensureEmojiData() {\n if (!emojiDataPromise) {\n emojiDataPromise = import('emoji-data-ios/emoji-data.json') as unknown as Promise;\n emojiRawData = (await emojiDataPromise).default;\n\n emojiData = uncompressEmoji(emojiRawData);\n }\n\n return emojiDataPromise;\n}\n\nfunction prepareRecentEmojis(byId: Record, recentEmojiIds: string[], limit: number) {\n if (!byId || !recentEmojiIds.length) {\n return MEMO_EMPTY_ARRAY;\n }\n\n return Object.values(pickTruthy(byId, recentEmojiIds)).slice(0, limit);\n}\n\nfunction prepareLibrary(\n byId: Record,\n baseEmojiKeywords?: Record,\n emojiKeywords?: Record,\n): Library {\n const emojis = Object.values(byId);\n\n const byNative = buildCollectionByKey(emojis, 'native');\n const baseEmojisByKeyword = baseEmojiKeywords\n ? mapValues(baseEmojiKeywords, (natives) => {\n return Object.values(pickTruthy(byNative, natives));\n })\n : {};\n const emojisByKeyword = emojiKeywords\n ? mapValues(emojiKeywords, (natives) => {\n return Object.values(pickTruthy(byNative, natives));\n })\n : {};\n\n const byKeyword = { ...baseEmojisByKeyword, ...emojisByKeyword };\n const keywords = ([] as string[]).concat(Object.keys(baseEmojisByKeyword), Object.keys(emojisByKeyword));\n\n const byName = emojis.reduce((result, emoji) => {\n emoji.names.forEach((name) => {\n if (!result[name]) {\n result[name] = [];\n }\n\n result[name].push(emoji);\n });\n\n return result;\n }, {} as Record);\n\n const names = Object.keys(byName);\n\n return {\n byKeyword,\n keywords,\n byName,\n names,\n };\n}\n\nfunction searchInLibrary(library: Library, filter: string, limit: number) {\n const {\n byKeyword, keywords, byName, names,\n } = library;\n\n let matched: Emoji[] = MEMO_EMPTY_ARRAY;\n\n const matchedKeywords = keywords.filter((keyword) => keyword.startsWith(filter)).sort();\n matched = matched.concat(flatten(Object.values(pickTruthy(byKeyword!, matchedKeywords))));\n\n // Also search by names, which is useful for non-English languages\n const matchedNames = names.filter((name) => name.startsWith(filter));\n matched = matched.concat(flatten(Object.values(pickTruthy(byName, matchedNames))));\n\n matched = unique(matched);\n\n return matched.slice(0, limit);\n}\n","import {\n useCallback, useEffect, useState,\n} from '../../../../lib/teact/teact';\nimport { getGlobal } from '../../../../global';\n\nimport { ApiMessageEntityTypes, ApiChatMember, ApiUser } from '../../../../api/types';\nimport { EDITABLE_INPUT_ID } from '../../../../config';\nimport { filterUsersByName, getUserFirstOrLastName } from '../../../../global/helpers';\nimport { prepareForRegExp } from '../helpers/prepareForRegExp';\nimport focusEditableElement from '../../../../util/focusEditableElement';\nimport useFlag from '../../../../hooks/useFlag';\nimport { pickTruthy, unique } from '../../../../util/iteratees';\nimport { throttle } from '../../../../util/schedulers';\n\nconst runThrottled = throttle((cb) => cb(), 500, true);\nlet RE_USERNAME_SEARCH: RegExp;\n\ntry {\n RE_USERNAME_SEARCH = /(^|\\s)@[-_\\p{L}\\p{M}\\p{N}]*$/gui;\n} catch (e) {\n // Support for older versions of firefox\n RE_USERNAME_SEARCH = /(^|\\s)@[-_\\d\\wа-яё]*$/gi;\n}\n\nexport default function useMentionTooltip(\n canSuggestMembers: boolean | undefined,\n htmlRef: { current: string },\n onUpdateHtml: (html: string) => void,\n inputId: string = EDITABLE_INPUT_ID,\n groupChatMembers?: ApiChatMember[],\n topInlineBotIds?: string[],\n currentUserId?: string,\n) {\n const [isOpen, markIsOpen, unmarkIsOpen] = useFlag();\n const [usersToMention, setUsersToMention] = useState();\n\n const updateFilteredUsers = useCallback((filter, withInlineBots: boolean) => {\n // No need for expensive global updates on users, so we avoid them\n const usersById = getGlobal().users.byId;\n\n if (!(groupChatMembers || topInlineBotIds) || !usersById) {\n setUsersToMention(undefined);\n\n return;\n }\n\n runThrottled(() => {\n const memberIds = groupChatMembers?.reduce((acc: string[], member) => {\n if (member.userId !== currentUserId) {\n acc.push(member.userId);\n }\n\n return acc;\n }, []);\n\n const filteredIds = filterUsersByName(unique([\n ...((withInlineBots && topInlineBotIds) || []),\n ...(memberIds || []),\n ]), usersById, filter);\n\n setUsersToMention(Object.values(pickTruthy(usersById, filteredIds)));\n });\n }, [currentUserId, groupChatMembers, topInlineBotIds]);\n\n const html = htmlRef.current;\n useEffect(() => {\n if (!canSuggestMembers || !html.length) {\n unmarkIsOpen();\n return;\n }\n\n const usernameFilter = html.includes('@') && getUsernameFilter(html);\n\n if (usernameFilter) {\n const filter = usernameFilter ? usernameFilter.substr(1) : '';\n updateFilteredUsers(filter, canSuggestInlineBots(html));\n } else {\n unmarkIsOpen();\n }\n }, [canSuggestMembers, updateFilteredUsers, markIsOpen, unmarkIsOpen, html]);\n\n useEffect(() => {\n if (usersToMention?.length) {\n markIsOpen();\n } else {\n unmarkIsOpen();\n }\n }, [markIsOpen, unmarkIsOpen, usersToMention]);\n\n const insertMention = useCallback((user: ApiUser, forceFocus = false) => {\n if (!user.username && !getUserFirstOrLastName(user)) {\n return;\n }\n\n const insertedHtml = user.username\n ? `@${user.username}`\n : `${getUserFirstOrLastName(user)}`;\n\n const currentHtml = htmlRef.current;\n const atIndex = currentHtml.lastIndexOf('@');\n if (atIndex !== -1) {\n onUpdateHtml(`${currentHtml.substr(0, atIndex)}${insertedHtml} `);\n const messageInput = document.getElementById(inputId)!;\n requestAnimationFrame(() => {\n focusEditableElement(messageInput, forceFocus);\n });\n }\n\n unmarkIsOpen();\n }, [htmlRef, inputId, onUpdateHtml, unmarkIsOpen]);\n\n return {\n isMentionTooltipOpen: isOpen,\n closeMentionTooltip: unmarkIsOpen,\n insertMention,\n mentionFilteredUsers: usersToMention,\n };\n}\n\nfunction getUsernameFilter(html: string) {\n const username = prepareForRegExp(html).match(RE_USERNAME_SEARCH);\n\n return username ? username[0].trim() : undefined;\n}\n\nfunction canSuggestInlineBots(html: string) {\n return html.startsWith('@');\n}\n","import { useEffect, useRef } from '../../../lib/teact/teact';\n\nimport useOnChange from '../../../hooks/useOnChange';\nimport useForceUpdate from '../../../hooks/useForceUpdate';\n\nexport default function useAsyncRendering(dependencies: T, delay?: number) {\n const isDisabled = delay === undefined;\n const shouldRenderRef = useRef(isDisabled);\n const timeoutRef = useRef();\n const forceUpdate = useForceUpdate();\n\n useOnChange(() => {\n if (isDisabled) {\n return;\n }\n\n shouldRenderRef.current = false;\n\n if (timeoutRef.current) {\n clearTimeout(timeoutRef.current);\n timeoutRef.current = undefined;\n }\n }, dependencies);\n\n useEffect(() => {\n if (isDisabled || shouldRenderRef.current) {\n return;\n }\n\n const exec = () => {\n shouldRenderRef.current = true;\n forceUpdate();\n };\n\n if (delay! > 0) {\n timeoutRef.current = window.setTimeout(exec, delay);\n } else {\n exec();\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, dependencies);\n\n return shouldRenderRef.current;\n}\n","import { ChangeEvent } from 'react';\nimport React, {\n FC, useCallback, memo, useState,\n} from '../../lib/teact/teact';\n\nimport Checkbox from './Checkbox';\n\ntype IRadioOption = {\n label: string;\n subLabel?: string;\n value: string;\n};\n\ntype OwnProps = {\n id?: string;\n options: IRadioOption[];\n selected?: string[];\n disabled?: boolean;\n round?: boolean;\n loadingOptions?: string[];\n onChange: (value: string[]) => void;\n};\n\nconst CheckboxGroup: FC = ({\n id,\n options,\n selected = [],\n disabled,\n round,\n loadingOptions,\n onChange,\n}) => {\n const [values, setValues] = useState(selected || []);\n\n const handleChange = useCallback((event: ChangeEvent) => {\n const { value, checked } = event.currentTarget;\n let newValues: string[];\n if (checked) {\n newValues = [...values, value];\n } else {\n newValues = values.filter((v) => v !== value);\n }\n\n setValues(newValues);\n onChange(newValues);\n }, [onChange, values]);\n\n return (\n
\n {options.map((option) => (\n \n ))}\n
\n );\n};\n\nexport default memo(CheckboxGroup);\n","import React, { FC } from '../../lib/teact/teact';\n\nimport buildClassName from '../../util/buildClassName';\n\nimport Button, { OwnProps as ButtonProps } from './Button';\n\nimport './FloatingActionButton.scss';\n\ntype OwnProps = {\n isShown: boolean;\n className?: string;\n color?: ButtonProps['color'];\n ariaLabel?: ButtonProps['ariaLabel'];\n disabled?: boolean;\n onClick: () => void;\n children: React.ReactNode;\n};\n\nconst FloatingActionButton: FC = ({\n isShown,\n className,\n color = 'primary',\n ariaLabel,\n disabled,\n onClick,\n children,\n}) => {\n const buttonClassName = buildClassName(\n 'FloatingActionButton',\n isShown && 'revealed',\n className,\n );\n\n return (\n \n {children}\n \n );\n};\n\nexport default FloatingActionButton;\n","import { RefObject } from 'react';\nimport React, { FC, useRef, useCallback } from '../../lib/teact/teact';\n\nimport { IS_TOUCH_ENV } from '../../util/environment';\nimport { fastRaf } from '../../util/schedulers';\nimport buildClassName from '../../util/buildClassName';\nimport useContextMenuHandlers from '../../hooks/useContextMenuHandlers';\nimport useContextMenuPosition from '../../hooks/useContextMenuPosition';\nimport useFlag from '../../hooks/useFlag';\nimport useLang from '../../hooks/useLang';\n\nimport RippleEffect from './RippleEffect';\nimport Menu from './Menu';\nimport MenuItem from './MenuItem';\nimport Button from './Button';\n\nimport './ListItem.scss';\n\ninterface MenuItemContextAction {\n title: string;\n icon: string;\n destructive?: boolean;\n handler?: () => void;\n}\n\ninterface OwnProps {\n ref?: RefObject;\n buttonRef?: RefObject;\n icon?: string;\n secondaryIcon?: string;\n className?: string;\n style?: string;\n children: React.ReactNode;\n disabled?: boolean;\n ripple?: boolean;\n narrow?: boolean;\n inactive?: boolean;\n focus?: boolean;\n destructive?: boolean;\n multiline?: boolean;\n isStatic?: boolean;\n contextActions?: MenuItemContextAction[];\n onMouseDown?: (e: React.MouseEvent) => void;\n onClick?: (e: React.MouseEvent) => void;\n onSecondaryIconClick?: (e: React.MouseEvent) => void;\n}\n\nconst ListItem: FC = ({\n ref,\n buttonRef,\n icon,\n secondaryIcon,\n className,\n style,\n children,\n disabled,\n ripple,\n narrow,\n inactive,\n focus,\n destructive,\n multiline,\n isStatic,\n contextActions,\n onMouseDown,\n onClick,\n onSecondaryIconClick,\n}) => {\n // eslint-disable-next-line no-null/no-null\n let containerRef = useRef(null);\n if (ref) {\n containerRef = ref;\n }\n const [isTouched, markIsTouched, unmarkIsTouched] = useFlag();\n\n const {\n isContextMenuOpen, contextMenuPosition,\n handleBeforeContextMenu, handleContextMenu,\n handleContextMenuClose, handleContextMenuHide,\n } = useContextMenuHandlers(containerRef, !contextActions);\n\n const getTriggerElement = useCallback(() => containerRef.current, []);\n\n const getRootElement = useCallback(\n () => containerRef.current!.closest('.custom-scroll'),\n [],\n );\n\n const getMenuElement = useCallback(\n () => containerRef.current!.querySelector('.ListItem-context-menu .bubble'),\n [],\n );\n\n const {\n positionX, positionY, transformOriginX, transformOriginY, style: menuStyle,\n } = useContextMenuPosition(\n contextMenuPosition,\n getTriggerElement,\n getRootElement,\n getMenuElement,\n );\n\n const handleClick = useCallback((e: React.MouseEvent) => {\n if (disabled || !onClick) {\n return;\n }\n onClick(e);\n\n if (IS_TOUCH_ENV && !ripple) {\n markIsTouched();\n fastRaf(unmarkIsTouched);\n }\n }, [disabled, markIsTouched, onClick, ripple, unmarkIsTouched]);\n\n const handleSecondaryIconClick = (e: React.MouseEvent) => {\n if (disabled || e.button !== 0 || (!onSecondaryIconClick && !contextActions)) return;\n e.stopPropagation();\n if (onSecondaryIconClick) {\n onSecondaryIconClick(e);\n } else {\n handleContextMenu(e);\n }\n };\n\n const handleMouseDown = useCallback((e: React.MouseEvent) => {\n if (inactive || IS_TOUCH_ENV) {\n return;\n }\n if (contextActions && (e.button === 2 || !onClick)) {\n handleBeforeContextMenu(e);\n }\n if (e.button === 0) {\n if (!onClick) {\n handleContextMenu(e);\n } else {\n handleClick(e);\n }\n }\n }, [inactive, contextActions, onClick, handleBeforeContextMenu, handleContextMenu, handleClick]);\n\n const lang = useLang();\n\n const fullClassName = buildClassName(\n 'ListItem',\n className,\n !isStatic && 'no-selection',\n ripple && 'has-ripple',\n narrow && 'narrow',\n disabled && 'disabled',\n inactive && 'inactive',\n contextMenuPosition && 'has-menu-open',\n focus && 'focus',\n destructive && 'destructive',\n multiline && 'multiline',\n isStatic && 'is-static',\n );\n\n return (\n \n \n {icon && (\n \n )}\n {multiline && (
{children}
)}\n {!multiline && children}\n {!disabled && !inactive && ripple && (\n \n )}\n {secondaryIcon && (\n \n \n \n )}\n
\n {contextActions && contextMenuPosition !== undefined && (\n \n {contextActions.map((action) => (\n \n {action.title}\n \n ))}\n \n )}\n
\n );\n};\n\nexport default ListItem;\n","import React, {\n FC,\n useCallback,\n useEffect,\n useRef,\n useState,\n} from '../../lib/teact/teact';\n\nimport { ANIMATION_END_DELAY } from '../../config';\nimport useShowTransition from '../../hooks/useShowTransition';\nimport buildClassName from '../../util/buildClassName';\nimport captureEscKeyListener from '../../util/captureEscKeyListener';\nimport { TextPart } from '../common/helpers/renderMessageText';\n\nimport Portal from './Portal';\n\nimport './Notification.scss';\n\ntype OwnProps = {\n containerId?: string;\n message: TextPart[];\n duration?: number;\n onDismiss: () => void;\n};\n\nconst DEFAULT_DURATION = 3000;\nconst ANIMATION_DURATION = 150;\n\nconst Notification: FC = ({\n message, duration = DEFAULT_DURATION, containerId, onDismiss,\n}) => {\n const [isOpen, setIsOpen] = useState(true);\n // eslint-disable-next-line no-null/no-null\n const timerRef = useRef(null);\n\n const { transitionClassNames } = useShowTransition(isOpen);\n\n const closeAndDismiss = useCallback(() => {\n setIsOpen(false);\n setTimeout(onDismiss, ANIMATION_DURATION + ANIMATION_END_DELAY);\n }, [onDismiss]);\n\n useEffect(() => (isOpen ? captureEscKeyListener(closeAndDismiss) : undefined), [isOpen, closeAndDismiss]);\n\n useEffect(() => {\n timerRef.current = window.setTimeout(closeAndDismiss, duration);\n\n return () => {\n if (timerRef.current) {\n clearTimeout(timerRef.current);\n timerRef.current = undefined;\n }\n };\n }, [duration, closeAndDismiss]);\n\n const handleMouseEnter = useCallback(() => {\n if (timerRef.current) {\n clearTimeout(timerRef.current);\n timerRef.current = undefined;\n }\n }, []);\n\n const handleMouseLeave = useCallback(() => {\n timerRef.current = window.setTimeout(closeAndDismiss, duration);\n }, [duration, closeAndDismiss]);\n\n return (\n \n \n
\n {message}\n
\n
\n \n );\n};\n\nexport default Notification;\n","import React, {\n FC, useEffect, useRef, memo,\n} from '../../lib/teact/teact';\n\nimport buildClassName from '../../util/buildClassName';\n\nimport './ProgressSpinner.scss';\n\nconst RADIUSES = {\n s: 22, m: 25, l: 28, xl: 20,\n};\nconst STROKE_WIDTH = 2;\nconst MIN_PROGRESS = 0.05;\nconst MAX_PROGRESS = 1;\n\nconst ProgressSpinner: FC<{\n progress?: number;\n size?: 's' | 'm' | 'l' | 'xl';\n square?: boolean;\n transparent?: boolean;\n noCross?: boolean;\n onClick?: (e: React.MouseEvent) => void;\n}> = ({\n progress = 0,\n size = 'l',\n square,\n transparent,\n noCross,\n onClick,\n}) => {\n const radius = RADIUSES[size];\n const circleRadius = radius - STROKE_WIDTH * 2;\n const borderRadius = radius - 1;\n const circumference = circleRadius * 2 * Math.PI;\n // eslint-disable-next-line no-null/no-null\n const container = useRef(null);\n\n useEffect(() => {\n if (!container.current) {\n return;\n }\n\n const svg = container.current.firstElementChild;\n const strokeDashOffset = circumference - Math.min(Math.max(MIN_PROGRESS, progress), MAX_PROGRESS) * circumference;\n\n if (!svg) {\n container.current.innerHTML = `\n \n `;\n } else {\n (svg.firstElementChild as SVGElement).setAttribute('stroke-dashoffset', strokeDashOffset.toString());\n }\n }, [container, circumference, borderRadius, circleRadius, progress]);\n\n const className = buildClassName(\n `ProgressSpinner size-${size}`,\n transparent && 'transparent',\n square && 'square',\n noCross && 'no-cross',\n );\n\n return (\n \n );\n};\n\nexport default memo(ProgressSpinner);\n","import { ChangeEvent } from 'react';\nimport React, { FC, memo } from '../../lib/teact/teact';\n\nimport buildClassName from '../../util/buildClassName';\nimport useLang from '../../hooks/useLang';\n\nimport Spinner from './Spinner';\n\nimport './Radio.scss';\n\ntype OwnProps = {\n id?: string;\n name: string;\n label: string;\n subLabel?: string;\n value: string;\n checked: boolean;\n disabled?: boolean;\n hidden?: boolean;\n isLoading?: boolean;\n onChange: (e: ChangeEvent) => void;\n};\n\nconst Radio: FC = ({\n id,\n label,\n subLabel,\n value,\n name,\n checked,\n disabled,\n hidden,\n isLoading,\n onChange,\n}) => {\n const lang = useLang();\n const className = buildClassName(\n 'Radio',\n disabled && 'disabled',\n hidden && 'hidden-widget',\n isLoading && 'loading',\n );\n\n return (\n \n );\n};\n\nexport default memo(Radio);\n","import { ChangeEvent } from 'react';\nimport React, { FC, useCallback, memo } from '../../lib/teact/teact';\n\nimport Radio from './Radio';\n\nexport type IRadioOption = {\n label: string;\n subLabel?: string;\n value: string;\n hidden?: boolean;\n};\n\ntype OwnProps = {\n id?: string;\n name: string;\n options: IRadioOption[];\n selected?: string;\n disabled?: boolean;\n loadingOption?: string;\n onChange: (value: string) => void;\n};\n\nconst RadioGroup: FC = ({\n id,\n name,\n options,\n selected,\n disabled,\n loadingOption,\n onChange,\n}) => {\n const handleChange = useCallback((event: ChangeEvent) => {\n const { value } = event.currentTarget;\n onChange(value);\n }, [onChange]);\n\n return (\n
\n {options.map((option) => (\n
\n );\n};\n\nexport default memo(RadioGroup);\n","import { ChangeEvent } from 'react';\nimport React, {\n FC, useCallback, useMemo, memo,\n} from '../../lib/teact/teact';\n\nimport buildClassName from '../../util/buildClassName';\nimport useLang from '../../hooks/useLang';\n\nimport './RangeSlider.scss';\n\ntype OwnProps = {\n options?: string[];\n min?: number;\n max?: number;\n step?: number;\n label?: string;\n value: number;\n disabled?: boolean;\n bold?: boolean;\n className?: string;\n renderValue?: (value: number) => string;\n onChange: (value: number) => void;\n};\n\nconst RangeSlider: FC = ({\n options,\n min = 0,\n max = options ? options.length - 1 : 100,\n step = 1,\n label,\n value,\n disabled,\n bold,\n className,\n renderValue,\n onChange,\n}) => {\n const lang = useLang();\n const handleChange = useCallback((event: ChangeEvent) => {\n onChange(Number(event.currentTarget.value));\n }, [onChange]);\n\n const mainClassName = buildClassName(\n className,\n 'RangeSlider',\n disabled && 'disabled',\n bold && 'bold',\n );\n\n const trackWidth = useMemo(() => {\n if (options) {\n return (value / (options.length - 1)) * 100;\n } else {\n const possibleValuesLength = (max - min) / step;\n return ((value - min) / possibleValuesLength) * 100;\n }\n }, [options, value, max, min, step]);\n\n return (\n
\n {label && (\n
\n {label}\n {!options && (\n {renderValue ? renderValue(value) : value}\n )}\n
\n )}\n
\n \n \n {options && (\n
\n {options.map((option, index) => (\n onChange(index)}\n >\n {option}\n
\n ))}\n
\n )}\n
\n
\n );\n};\n\nexport default memo(RangeSlider);\n","import { RefObject } from 'react';\nimport React, {\n FC, useRef, useEffect, memo, useCallback,\n} from '../../lib/teact/teact';\n\nimport buildClassName from '../../util/buildClassName';\nimport useFlag from '../../hooks/useFlag';\nimport useLang from '../../hooks/useLang';\nimport useInputFocusOnOpen from '../../hooks/useInputFocusOnOpen';\n\nimport Loading from './Loading';\nimport Button from './Button';\nimport ShowTransition from './ShowTransition';\n\nimport './SearchInput.scss';\n\ntype OwnProps = {\n ref?: RefObject;\n children?: React.ReactNode;\n parentContainerClassName?: string;\n className?: string;\n inputId?: string;\n value?: string;\n focused?: boolean;\n isLoading?: boolean;\n spinnerColor?: 'yellow';\n spinnerBackgroundColor?: 'light';\n placeholder?: string;\n disabled?: boolean;\n autoComplete?: string;\n canClose?: boolean;\n autoFocusSearch?: boolean;\n onChange: (value: string) => void;\n onReset?: NoneToVoidFunction;\n onFocus?: NoneToVoidFunction;\n onBlur?: NoneToVoidFunction;\n onSpinnerClick?: NoneToVoidFunction;\n};\n\nconst SearchInput: FC = ({\n ref,\n children,\n parentContainerClassName,\n value,\n inputId,\n className,\n focused,\n isLoading,\n spinnerColor,\n spinnerBackgroundColor,\n placeholder,\n disabled,\n autoComplete,\n canClose,\n autoFocusSearch,\n onChange,\n onReset,\n onFocus,\n onBlur,\n onSpinnerClick,\n}) => {\n // eslint-disable-next-line no-null/no-null\n let inputRef = useRef(null);\n if (ref) {\n inputRef = ref;\n }\n\n const [isInputFocused, markInputFocused, unmarkInputFocused] = useFlag(focused);\n\n useInputFocusOnOpen(inputRef, autoFocusSearch, unmarkInputFocused);\n\n useEffect(() => {\n if (!inputRef.current) {\n return;\n }\n\n if (focused) {\n inputRef.current.focus();\n } else {\n inputRef.current.blur();\n }\n }, [focused, placeholder]); // Trick for setting focus when selecting a contact to search for\n\n const lang = useLang();\n\n function handleChange(event: React.ChangeEvent) {\n const { currentTarget } = event;\n onChange(currentTarget.value);\n }\n\n function handleFocus() {\n markInputFocused();\n if (onFocus) {\n onFocus();\n }\n }\n\n function handleBlur() {\n unmarkInputFocused();\n if (onBlur) {\n onBlur();\n }\n }\n\n const handleKeyDown = useCallback((e: React.KeyboardEvent) => {\n if (e.key === 'ArrowDown' || e.key === 'Enter') {\n const element = document.querySelector(`.${parentContainerClassName} .ListItem-button`) as HTMLElement;\n if (element) {\n element.focus();\n }\n }\n }, [parentContainerClassName]);\n\n return (\n \n {children}\n \n \n \n \n \n {!isLoading && (value || canClose) && onReset && (\n \n \n \n )}\n
\n );\n};\n\nexport default memo(SearchInput);\n","import React, { FC, useRef } from '../../lib/teact/teact';\n\nimport useShowTransition from '../../hooks/useShowTransition';\nimport usePrevious from '../../hooks/usePrevious';\nimport buildClassName from '../../util/buildClassName';\n\ntype OwnProps = {\n isOpen: boolean;\n isCustom?: boolean;\n id?: string;\n className?: string;\n onClick?: (e: React.MouseEvent) => void;\n children: React.ReactNode;\n};\n\nconst ShowTransition: FC = ({\n isOpen, isCustom, id, className, onClick, children,\n}) => {\n const { shouldRender, transitionClassNames } = useShowTransition(\n isOpen, undefined, undefined, isCustom ? false : undefined,\n );\n const prevIsOpen = usePrevious(isOpen);\n const prevChildren = usePrevious(children);\n const fromChildrenRef = useRef();\n\n if (prevIsOpen && !isOpen) {\n fromChildrenRef.current = prevChildren;\n }\n\n return (\n shouldRender && (\n
\n {isOpen ? children : fromChildrenRef.current!}\n
\n )\n );\n};\n\nexport default ShowTransition;\n","import { ChangeEvent } from 'react';\nimport React, { FC, memo, useCallback } from '../../lib/teact/teact';\n\nimport buildClassName from '../../util/buildClassName';\n\nimport './Switcher.scss';\n\ntype OwnProps = {\n id?: string;\n name?: string;\n value?: string;\n label: string;\n checked?: boolean;\n disabled?: boolean;\n inactive?: boolean;\n noAnimation?: boolean;\n onChange?: (e: ChangeEvent) => void;\n onCheck?: (isChecked: boolean) => void;\n};\n\nconst Switcher: FC = ({\n id,\n name,\n value,\n label,\n checked = false,\n disabled,\n inactive,\n noAnimation,\n onChange,\n onCheck,\n}) => {\n const handleChange = useCallback((e: ChangeEvent) => {\n if (onChange) {\n onChange(e);\n }\n\n if (onCheck) {\n onCheck(e.currentTarget.checked);\n }\n }, [onChange, onCheck]);\n\n const className = buildClassName(\n 'Switcher',\n disabled && 'disabled',\n inactive && 'inactive',\n noAnimation && 'no-animation',\n );\n\n return (\n \n );\n};\n\nexport default memo(Switcher);\n","import React, {\n FC, useRef, memo, useEffect,\n} from '../../lib/teact/teact';\n\nimport buildClassName from '../../util/buildClassName';\nimport forceReflow from '../../util/forceReflow';\nimport renderText from '../common/helpers/renderText';\n\nimport './Tab.scss';\n\ntype OwnProps = {\n className?: string;\n title: string;\n isActive?: boolean;\n badgeCount?: number;\n isBadgeActive?: boolean;\n previousActiveTab?: number;\n onClick: (arg: number) => void;\n clickArg: number;\n};\n\nconst classNames = {\n active: 'Tab--active',\n badgeActive: 'Tab__badge--active',\n};\n\nconst Tab: FC = ({\n className,\n title,\n isActive,\n badgeCount,\n isBadgeActive,\n previousActiveTab,\n onClick,\n clickArg,\n}) => {\n // eslint-disable-next-line no-null/no-null\n const tabRef = useRef(null);\n\n useEffect(() => {\n // Set initial active state\n if (isActive && previousActiveTab === undefined && tabRef.current) {\n tabRef.current.classList.add(classNames.active);\n }\n\n if (!isActive || previousActiveTab === undefined) {\n return;\n }\n\n const tabEl = tabRef.current!;\n const prevTabEl = tabEl.parentElement!.children[previousActiveTab];\n if (!prevTabEl) {\n return;\n }\n\n const platformEl = tabEl.querySelector('i')!;\n const prevPlatformEl = prevTabEl.querySelector('i')!;\n\n // We move and resize the platform, so it repeats the position and size of the previous one\n const shiftLeft = prevPlatformEl.parentElement!.offsetLeft - platformEl.parentElement!.offsetLeft;\n const scaleFactor = prevPlatformEl.clientWidth / platformEl.clientWidth;\n\n prevPlatformEl.classList.remove('animate');\n platformEl.classList.remove('animate');\n platformEl.style.transform = `translate3d(${shiftLeft}px, 0, 0) scale3d(${scaleFactor}, 1, 1)`;\n forceReflow(platformEl);\n platformEl.classList.add('animate');\n platformEl.style.transform = 'none';\n\n prevTabEl.classList.remove(classNames.active);\n tabEl.classList.add(classNames.active);\n }, [isActive, previousActiveTab]);\n\n return (\n onClick(clickArg)}\n ref={tabRef}\n >\n \n {renderText(title)}\n {Boolean(badgeCount) && (\n {badgeCount}\n )}\n \n \n
\n );\n};\n\nexport default memo(Tab);\n","import React, {\n FC, memo, useRef, useEffect,\n} from '../../lib/teact/teact';\n\nimport { IS_ANDROID, IS_IOS } from '../../util/environment';\nimport fastSmoothScrollHorizontal from '../../util/fastSmoothScrollHorizontal';\nimport usePrevious from '../../hooks/usePrevious';\nimport useHorizontalScroll from '../../hooks/useHorizontalScroll';\nimport useLang from '../../hooks/useLang';\n\nimport Tab from './Tab';\n\nimport './TabList.scss';\n\nexport type TabWithProperties = {\n title: string;\n badgeCount?: number;\n isBadgeActive?: boolean;\n};\n\ntype OwnProps = {\n tabs: readonly TabWithProperties[];\n activeTab: number;\n big?: boolean;\n onSwitchTab: (index: number) => void;\n};\n\nconst TAB_SCROLL_THRESHOLD_PX = 16;\n// Should match duration from `--slide-transition` CSS variable\nconst SCROLL_DURATION = IS_IOS ? 450 : IS_ANDROID ? 400 : 300;\n\nconst TabList: FC = ({\n tabs, activeTab, big, onSwitchTab,\n}) => {\n // eslint-disable-next-line no-null/no-null\n const containerRef = useRef(null);\n const previousActiveTab = usePrevious(activeTab);\n\n useHorizontalScroll(containerRef.current);\n\n // Scroll container to place active tab in the center\n useEffect(() => {\n const container = containerRef.current!;\n const { scrollWidth, offsetWidth, scrollLeft } = container;\n if (scrollWidth <= offsetWidth) {\n return;\n }\n\n const activeTabElement = container.childNodes[activeTab] as HTMLElement | null;\n if (!activeTabElement) {\n return;\n }\n\n const { offsetLeft: activeTabOffsetLeft, offsetWidth: activeTabOffsetWidth } = activeTabElement;\n const newLeft = activeTabOffsetLeft - (offsetWidth / 2) + (activeTabOffsetWidth / 2);\n\n // Prevent scrolling by only a couple of pixels, which doesn't look smooth\n if (Math.abs(newLeft - scrollLeft) < TAB_SCROLL_THRESHOLD_PX) {\n return;\n }\n\n fastSmoothScrollHorizontal(container, newLeft, SCROLL_DURATION);\n }, [activeTab]);\n\n const lang = useLang();\n\n return (\n \n {tabs.map((tab, i) => (\n \n ))}\n
\n );\n};\n\nexport default memo(TabList);\n","import { RefObject } from 'react';\nimport React, {\n FC, useLayoutEffect, useRef,\n} from '../../lib/teact/teact';\nimport { getGlobal } from '../../global';\nimport { GlobalState } from '../../global/types';\n\nimport { ANIMATION_LEVEL_MIN } from '../../config';\nimport buildClassName from '../../util/buildClassName';\nimport forceReflow from '../../util/forceReflow';\nimport { waitForAnimationEnd, waitForTransitionEnd } from '../../util/cssAnimationEndListeners';\nimport useForceUpdate from '../../hooks/useForceUpdate';\nimport usePrevious from '../../hooks/usePrevious';\nimport { dispatchHeavyAnimationEvent } from '../../hooks/useHeavyAnimationCheck';\n\nimport './Transition.scss';\n\nexport type ChildrenFn = (isActive: boolean, isFrom: boolean, currentKey: number) => React.ReactNode;\nexport type TransitionProps = {\n ref?: RefObject;\n activeKey: number;\n name: (\n 'none' | 'slide' | 'slide-rtl' | 'mv-slide' | 'slide-fade' | 'zoom-fade' | 'slide-layers'\n | 'fade' | 'push-slide' | 'reveal' | 'slide-optimized' | 'slide-optimized-rtl'\n );\n direction?: 'auto' | 'inverse' | 1 | -1;\n renderCount?: number;\n shouldRestoreHeight?: boolean;\n shouldCleanup?: boolean;\n cleanupExceptionKey?: number;\n isDisabled?: boolean;\n id?: string;\n className?: string;\n onStart?: NoneToVoidFunction;\n onStop?: NoneToVoidFunction;\n children: React.ReactNode | ChildrenFn;\n};\n\nconst classNames = {\n active: 'Transition__slide--active',\n};\n\nconst Transition: FC = ({\n ref,\n activeKey,\n name,\n direction = 'auto',\n renderCount,\n shouldRestoreHeight,\n shouldCleanup,\n cleanupExceptionKey,\n id,\n className,\n onStart,\n onStop,\n children,\n}) => {\n // No need for a container to update on change\n const { animationLevel } = getGlobal().settings.byKey;\n const currentKeyRef = useRef();\n\n // eslint-disable-next-line no-null/no-null\n let containerRef = useRef(null);\n if (ref) {\n containerRef = ref;\n }\n\n const rendersRef = useRef>({});\n const prevActiveKey = usePrevious(activeKey);\n const forceUpdate = useForceUpdate();\n\n const activeKeyChanged = prevActiveKey !== undefined && activeKey !== prevActiveKey;\n\n if (!renderCount && activeKeyChanged) {\n rendersRef.current = { [prevActiveKey]: rendersRef.current[prevActiveKey] };\n }\n\n rendersRef.current[activeKey] = children;\n\n useLayoutEffect(() => {\n function cleanup() {\n if (!shouldCleanup) {\n return;\n }\n\n const preservedRender = cleanupExceptionKey !== undefined ? rendersRef.current[cleanupExceptionKey] : undefined;\n\n rendersRef.current = preservedRender ? { [cleanupExceptionKey!]: preservedRender } : {};\n\n forceUpdate();\n }\n\n const container = containerRef.current!;\n\n const childElements = container.children;\n if (childElements.length === 1 && !activeKeyChanged) {\n if (name.startsWith('slide-optimized')) {\n (childElements[0] as HTMLElement).style.transition = 'none';\n (childElements[0] as HTMLElement).style.transform = 'translate3d(0, 0, 0)';\n }\n\n childElements[0].classList.add(classNames.active);\n\n return;\n }\n\n const childNodes = Array.from(container.childNodes);\n\n if (!activeKeyChanged || !childNodes.length) {\n return;\n }\n\n currentKeyRef.current = activeKey;\n\n const isBackwards = (\n direction === -1\n || (direction === 'auto' && prevActiveKey > activeKey)\n || (direction === 'inverse' && prevActiveKey < activeKey)\n );\n\n const keys = Object.keys(rendersRef.current).map(Number);\n const prevActiveIndex = renderCount ? prevActiveKey : keys.indexOf(prevActiveKey);\n const activeIndex = renderCount ? activeKey : keys.indexOf(activeKey);\n\n if (name === 'slide-optimized' || name === 'slide-optimized-rtl') {\n performSlideOptimized(\n animationLevel,\n name,\n isBackwards,\n cleanup,\n activeKey,\n currentKeyRef,\n container,\n shouldRestoreHeight,\n onStart,\n onStop,\n childNodes[activeIndex] as HTMLElement,\n childNodes[prevActiveIndex] as HTMLElement,\n );\n\n return;\n }\n\n container.classList.remove('animating');\n container.classList.toggle('backwards', isBackwards);\n\n if (name === 'none' || animationLevel === ANIMATION_LEVEL_MIN) {\n childNodes.forEach((node, i) => {\n if (node instanceof HTMLElement) {\n node.classList.remove('from', 'through', 'to');\n node.classList.toggle(classNames.active, i === activeIndex);\n }\n });\n\n cleanup();\n\n return;\n }\n\n childNodes.forEach((node, i) => {\n if (node instanceof HTMLElement) {\n node.classList.remove(classNames.active);\n node.classList.toggle('from', i === prevActiveIndex);\n node.classList.toggle('through', (\n (i > prevActiveIndex && i < activeIndex) || (i < prevActiveIndex && i > activeIndex)\n ));\n node.classList.toggle('to', i === activeIndex);\n }\n });\n\n const dispatchHeavyAnimationStop = dispatchHeavyAnimationEvent();\n\n requestAnimationFrame(() => {\n container.classList.add('animating');\n\n onStart?.();\n\n function onAnimationEnd() {\n requestAnimationFrame(() => {\n if (activeKey !== currentKeyRef.current) {\n return;\n }\n\n container.classList.remove('animating', 'backwards');\n\n childNodes.forEach((node, i) => {\n if (node instanceof HTMLElement) {\n node.classList.remove('from', 'through', 'to');\n node.classList.toggle(classNames.active, i === activeIndex);\n }\n });\n\n if (shouldRestoreHeight) {\n const activeElement = container.querySelector(`.${classNames.active}`);\n\n if (activeElement) {\n activeElement.style.height = 'auto';\n container.style.height = `${activeElement.clientHeight}px`;\n }\n }\n\n onStop?.();\n dispatchHeavyAnimationStop();\n cleanup();\n });\n }\n\n const watchedNode = name === 'mv-slide'\n ? childNodes[activeIndex]?.firstChild\n : name === 'reveal' && isBackwards\n ? childNodes[prevActiveIndex]\n : childNodes[activeIndex];\n\n if (watchedNode) {\n waitForAnimationEnd(watchedNode, onAnimationEnd);\n } else {\n onAnimationEnd();\n }\n });\n }, [\n activeKey,\n prevActiveKey,\n activeKeyChanged,\n direction,\n name,\n onStart,\n onStop,\n renderCount,\n shouldRestoreHeight,\n shouldCleanup,\n cleanupExceptionKey,\n animationLevel,\n forceUpdate,\n ]);\n\n useLayoutEffect(() => {\n if (shouldRestoreHeight) {\n const container = containerRef.current!;\n const activeElement = container.querySelector(`.${classNames.active}`)\n || container.querySelector('.from');\n\n if (activeElement) {\n activeElement.style.height = 'auto';\n container.style.height = `${activeElement.clientHeight}px`;\n container.style.flexBasis = `${activeElement.clientHeight}px`;\n }\n }\n }, [shouldRestoreHeight, children]);\n\n const renders = rendersRef.current;\n const renderKeys = Object.keys(renderCount ? new Array(renderCount).fill(undefined) : renders).map(Number);\n const contents = renderKeys.map((key) => {\n const render = renders[key];\n if (!render) {\n return undefined;\n }\n\n return (\n
{\n typeof render === 'function'\n ? render(key === activeKey, key === prevActiveKey, activeKey)\n : render\n }\n
\n );\n });\n\n return (\n \n {contents}\n
\n );\n};\n\nexport default Transition;\n\nfunction performSlideOptimized(\n animationLevel: GlobalState['settings']['byKey']['animationLevel'],\n name: 'slide-optimized' | 'slide-optimized-rtl',\n isBackwards: boolean,\n cleanup: NoneToVoidFunction,\n activeKey: number,\n currentKeyRef: { current: number | undefined },\n container: HTMLElement,\n shouldRestoreHeight?: boolean,\n onStart?: NoneToVoidFunction,\n onStop?: NoneToVoidFunction,\n toSlide?: HTMLElement,\n fromSlide?: HTMLElement,\n) {\n if (!fromSlide || !toSlide) {\n return;\n }\n\n if (animationLevel === ANIMATION_LEVEL_MIN) {\n fromSlide.style.transition = 'none';\n fromSlide.style.transform = '';\n fromSlide.classList.remove(classNames.active);\n\n toSlide.style.transition = 'none';\n toSlide.style.transform = 'translate3d(0, 0, 0)';\n toSlide.classList.add(classNames.active);\n\n cleanup();\n\n return;\n }\n\n if (name === 'slide-optimized-rtl') {\n isBackwards = !isBackwards;\n }\n\n const dispatchHeavyAnimationStop = dispatchHeavyAnimationEvent();\n\n requestAnimationFrame(() => {\n onStart?.();\n\n fromSlide.style.transition = 'none';\n fromSlide.style.transform = 'translate3d(0, 0, 0)';\n\n toSlide.style.transition = 'none';\n toSlide.style.transform = `translate3d(${isBackwards ? '-' : ''}100%, 0, 0)`;\n\n forceReflow(toSlide);\n\n fromSlide.style.transition = '';\n fromSlide.style.transform = `translate3d(${isBackwards ? '' : '-'}100%, 0, 0)`;\n\n toSlide.style.transition = '';\n toSlide.style.transform = 'translate3d(0, 0, 0)';\n\n fromSlide.classList.remove(classNames.active);\n toSlide.classList.add(classNames.active);\n\n waitForTransitionEnd(fromSlide, () => {\n if (activeKey !== currentKeyRef.current) {\n return;\n }\n\n fromSlide.style.transition = 'none';\n fromSlide.style.transform = '';\n\n if (shouldRestoreHeight) {\n toSlide.style.height = 'auto';\n container.style.height = `${toSlide.clientHeight}px`;\n }\n\n onStop?.();\n dispatchHeavyAnimationStop();\n cleanup();\n });\n });\n}\n","import useReducer, { StateReducer, Dispatch } from '../useReducer';\nimport { ApiChatFolder } from '../../api/types';\nimport { pick, omit } from '../../util/iteratees';\n\nexport type FolderChatType = {\n icon: string;\n title: string;\n key: keyof Pick;\n};\n\nexport const INCLUDED_CHAT_TYPES: FolderChatType[] = [\n { icon: 'user', title: 'FilterContacts', key: 'contacts' },\n { icon: 'non-contacts', title: 'FilterNonContacts', key: 'nonContacts' },\n { icon: 'group', title: 'FilterGroups', key: 'groups' },\n { icon: 'channel', title: 'FilterChannels', key: 'channels' },\n { icon: 'bots', title: 'FilterBots', key: 'bots' },\n];\n\nexport const EXCLUDED_CHAT_TYPES: FolderChatType[] = [\n { icon: 'mute', title: 'FilterMuted', key: 'excludeMuted' },\n { icon: 'archive', title: 'FilterArchived', key: 'excludeArchived' },\n { icon: 'readchats', title: 'FilterRead', key: 'excludeRead' },\n];\n\nconst INCLUDE_FILTER_FIELDS: Array = [\n 'includedChatIds', 'bots', 'channels', 'groups', 'contacts', 'nonContacts',\n];\nconst EXCLUDE_FILTER_FIELDS: Array = [\n 'excludedChatIds', 'excludeArchived', 'excludeMuted', 'excludeRead',\n];\n\nexport function selectChatFilters(state: FoldersState, mode: 'included' | 'excluded', selectTemp?: boolean) {\n let selectedChatIds: string[] = [];\n let selectedChatTypes: FolderChatType['key'][] = [];\n\n if (mode === 'included') {\n const {\n includedChatIds,\n ...includeFilters\n } = selectTemp\n ? state.includeFilters || {}\n : pick(\n state.folder,\n INCLUDE_FILTER_FIELDS,\n );\n\n selectedChatIds = includedChatIds || [];\n selectedChatTypes = (Object.keys(includeFilters) as Array)\n .filter((key) => Boolean(includeFilters[key]));\n } else {\n const {\n excludedChatIds,\n ...excludeFilters\n } = selectTemp\n ? state.excludeFilters || {}\n : pick(\n state.folder,\n EXCLUDE_FILTER_FIELDS,\n );\n\n selectedChatIds = excludedChatIds || [];\n selectedChatTypes = (Object.keys(excludeFilters) as Array)\n .filter((key) => Boolean(excludeFilters[key]));\n }\n\n return {\n selectedChatIds,\n selectedChatTypes,\n };\n}\n\nfunction getSuggestedFolderName(includeFilters?: FolderIncludeFilters) {\n if (includeFilters) {\n const {\n includedChatIds,\n ...filters\n } = includeFilters;\n\n if (\n Object.values(filters).filter(Boolean).length > 1\n || (includedChatIds?.length)\n ) {\n return '';\n }\n\n if (filters.bots) {\n return 'Bots';\n } else if (filters.groups) {\n return 'Groups';\n } else if (filters.channels) {\n return 'Channels';\n } else if (filters.contacts) {\n return 'Contacts';\n } else if (filters.nonContacts) {\n return 'Non-Contacts';\n }\n }\n\n return '';\n}\n\ntype FolderIncludeFilters = Pick;\ntype FolderExcludeFilters = Pick;\n\nexport type FoldersState = {\n mode: 'create' | 'edit';\n isLoading?: boolean;\n isTouched?: boolean;\n error?: string;\n folderId?: number;\n chatFilter: string;\n folder: Omit;\n includeFilters?: FolderIncludeFilters;\n excludeFilters?: FolderExcludeFilters;\n};\nexport type FoldersActions = (\n 'setTitle' | 'saveFilters' | 'editFolder' | 'reset' | 'setChatFilter' | 'setIsLoading' | 'setError' |\n 'editIncludeFilters' | 'editExcludeFilters' | 'setIncludeFilters' | 'setExcludeFilters'\n);\nexport type FolderEditDispatch = Dispatch;\n\nconst INITIAL_STATE: FoldersState = {\n mode: 'create',\n chatFilter: '',\n folder: {\n title: '',\n includedChatIds: [],\n excludedChatIds: [],\n },\n};\n\nconst foldersReducer: StateReducer = (\n state,\n action,\n) => {\n switch (action.type) {\n case 'setTitle':\n return {\n ...state,\n folder: {\n ...state.folder,\n title: action.payload,\n },\n isTouched: true,\n };\n case 'editIncludeFilters':\n return {\n ...state,\n includeFilters: pick(\n state.folder,\n INCLUDE_FILTER_FIELDS,\n ),\n };\n case 'editExcludeFilters':\n return {\n ...state,\n excludeFilters: pick(\n state.folder,\n EXCLUDE_FILTER_FIELDS,\n ),\n };\n case 'setIncludeFilters':\n return {\n ...state,\n includeFilters: action.payload,\n chatFilter: '',\n };\n case 'setExcludeFilters':\n return {\n ...state,\n excludeFilters: action.payload,\n chatFilter: '',\n };\n case 'saveFilters':\n if (state.includeFilters) {\n return {\n ...state,\n folder: {\n ...omit(state.folder, INCLUDE_FILTER_FIELDS),\n title: state.folder.title ? state.folder.title : getSuggestedFolderName(state.includeFilters),\n ...state.includeFilters,\n },\n includeFilters: undefined,\n chatFilter: '',\n isTouched: true,\n };\n } else if (state.excludeFilters) {\n return {\n ...state,\n folder: {\n ...omit(state.folder, EXCLUDE_FILTER_FIELDS),\n ...state.excludeFilters,\n },\n excludeFilters: undefined,\n chatFilter: '',\n isTouched: true,\n };\n } else {\n return state;\n }\n case 'editFolder': {\n const { id: folderId, description, ...folder } = action.payload;\n\n return {\n mode: 'edit',\n folderId,\n folder,\n chatFilter: '',\n };\n }\n case 'setChatFilter': {\n return {\n ...state,\n chatFilter: action.payload,\n };\n }\n case 'setIsLoading': {\n return {\n ...state,\n isLoading: action.payload,\n };\n }\n case 'setError': {\n return {\n ...state,\n error: action.payload,\n };\n }\n case 'reset':\n return INITIAL_STATE;\n default:\n return state;\n }\n};\n\nconst useFoldersReducer = () => {\n return useReducer(foldersReducer, INITIAL_STATE);\n};\n\nexport default useFoldersReducer;\n","import {\n useCallback, useEffect, useRef, useState,\n} from '../lib/teact/teact';\nimport { getActions, getGlobal } from '../global';\n\nimport { register, Track, TrackId } from '../util/audioPlayer';\nimport useEffectWithPrevDeps from './useEffectWithPrevDeps';\nimport { isSafariPatchInProgress } from '../util/patchSafariProgressiveAudio';\nimport useOnChange from './useOnChange';\nimport {\n MediaSessionHandlers, registerMediaSession, setPlaybackState, setPositionState, updateMetadata,\n} from '../util/mediaSession';\n\ntype Handler = (e: Event) => void;\n\nconst DEFAULT_SKIP_TIME = 10;\n\nconst useAudioPlayer = (\n trackId: TrackId,\n originalDuration: number, // Sometimes incorrect for voice messages\n trackType: Track['type'],\n src?: string,\n handlers?: Record,\n metadata?: MediaMetadata,\n onInit?: (element: HTMLAudioElement) => void,\n shouldPlay = false,\n onForcePlay?: NoneToVoidFunction,\n onTrackChange?: NoneToVoidFunction,\n noPlaylist = false,\n noProgressUpdates = false,\n) => {\n // eslint-disable-next-line no-null/no-null\n const controllerRef = useRef>(null);\n\n const [isPlaying, setIsPlaying] = useState(false);\n let isPlayingSync = isPlaying;\n\n const [playProgress, setPlayProgress] = useState(0);\n\n const handleTrackChange = useCallback(() => {\n setIsPlaying(false);\n if (onTrackChange) onTrackChange();\n }, [onTrackChange]);\n\n useOnChange(() => {\n controllerRef.current = register(trackId, trackType, (eventName, e) => {\n switch (eventName) {\n case 'onPlay': {\n const {\n setVolume, setPlaybackRate, toggleMuted, proxy,\n } = controllerRef.current!;\n setIsPlaying(true);\n\n registerMediaSession(metadata, makeMediaHandlers(controllerRef));\n setPlaybackState('playing');\n setVolume(getGlobal().audioPlayer.volume);\n toggleMuted(Boolean(getGlobal().audioPlayer.isMuted));\n if (trackType === 'voice') {\n setPlaybackRate(getGlobal().audioPlayer.playbackRate);\n }\n\n setPositionState({\n duration: proxy.duration || 0,\n playbackRate: proxy.playbackRate,\n position: proxy.currentTime,\n });\n break;\n }\n case 'onRateChange': {\n const { proxy } = controllerRef.current!;\n setPositionState({\n duration: proxy.duration || 0,\n playbackRate: proxy.playbackRate,\n position: proxy.currentTime,\n });\n break;\n }\n case 'onPause':\n setIsPlaying(false);\n setPlaybackState('paused');\n break;\n case 'onTimeUpdate': {\n const { proxy } = controllerRef.current!;\n const duration = proxy.duration && Number.isFinite(proxy.duration) ? proxy.duration : originalDuration;\n if (!noProgressUpdates) setPlayProgress(proxy.currentTime / duration);\n break;\n }\n case 'onEnded': {\n setPlaybackState('paused');\n break;\n }\n }\n\n handlers?.[eventName]?.(e);\n }, onForcePlay, handleTrackChange);\n\n const { proxy } = controllerRef.current!;\n\n if (!isPlaying && !proxy.paused) {\n setIsPlaying(true);\n isPlayingSync = true;\n }\n\n if (onInit) {\n onInit(proxy);\n }\n }, [trackId]);\n\n useEffect(() => {\n if (isPlaying && metadata) updateMetadata(metadata);\n }, [metadata, isPlaying]);\n\n const {\n play,\n pause,\n setCurrentTime,\n proxy,\n destroy,\n setVolume,\n stop,\n isFirst,\n isLast,\n requestNextTrack,\n requestPreviousTrack,\n setPlaybackRate,\n toggleMuted,\n } = controllerRef.current!;\n const duration = proxy.duration && Number.isFinite(proxy.duration) ? proxy.duration : originalDuration;\n\n // RAF progress\n useEffect(() => {\n if (duration && !isSafariPatchInProgress(proxy) && !noProgressUpdates) {\n setPlayProgress(proxy.currentTime / duration);\n }\n }, [duration, playProgress, proxy, noProgressUpdates]);\n\n // Cleanup\n useEffect(() => () => {\n destroy(noPlaylist);\n }, [destroy, noPlaylist]);\n\n // Autoplay once `src` is present\n useEffectWithPrevDeps(([prevShouldPlay, prevSrc]) => {\n if (prevShouldPlay === shouldPlay && src === prevSrc) {\n return;\n }\n\n // When paused by another player\n if (proxy.src && proxy.paused) {\n return;\n }\n\n if (shouldPlay && src && !isPlaying) {\n play(src);\n }\n }, [shouldPlay, src, isPlaying, play, proxy.src, proxy.paused]);\n\n const playIfPresent = useCallback(() => {\n if (src) {\n play(src);\n }\n }, [src, play]);\n\n const playPause = useCallback(() => {\n if (isPlaying) {\n pause();\n } else {\n playIfPresent();\n }\n }, [pause, playIfPresent, isPlaying]);\n\n const setTime = useCallback((time: number) => {\n setCurrentTime(time);\n if (duration) {\n setPlayProgress(proxy.currentTime / duration);\n }\n }, [duration, proxy, setCurrentTime]);\n\n return {\n isPlaying: isPlayingSync,\n playProgress,\n playPause,\n pause,\n play: playIfPresent,\n stop,\n setCurrentTime: setTime,\n setVolume,\n audioProxy: proxy,\n duration,\n requestNextTrack,\n requestPreviousTrack,\n isFirst,\n isLast,\n setPlaybackRate,\n toggleMuted,\n };\n};\n\nfunction makeMediaHandlers(controllerRef: React.RefObject>) {\n let mediaHandlers: MediaSessionHandlers = {};\n if (controllerRef && controllerRef.current) {\n const {\n play, pause, setCurrentTime, proxy, requestNextTrack, requestPreviousTrack, isFirst, isLast,\n } = controllerRef.current;\n mediaHandlers = {\n play: () => {\n play(proxy.src);\n },\n pause: () => {\n pause();\n },\n stop: () => {\n pause();\n setCurrentTime(0);\n getActions().closeAudioPlayer();\n },\n seekbackward: (event) => {\n const skipTime = event.seekOffset || DEFAULT_SKIP_TIME;\n setCurrentTime(Math.max(proxy.currentTime - skipTime, 0));\n },\n seekforward: (event) => {\n const skipTime = event.seekOffset || DEFAULT_SKIP_TIME;\n setCurrentTime(Math.min(proxy.currentTime + skipTime, proxy.duration));\n },\n seekTo: (event) => {\n if (event.seekTime) {\n setCurrentTime(event.seekTime);\n }\n },\n };\n\n if (!isLast()) {\n mediaHandlers.nexttrack = () => {\n requestNextTrack();\n };\n }\n if (!isFirst()) {\n mediaHandlers.previoustrack = () => {\n requestPreviousTrack();\n };\n }\n }\n return mediaHandlers;\n}\n\nexport default useAudioPlayer;\n","import React, { useCallback, useMemo, useState } from '../lib/teact/teact';\nimport { debounce } from '../util/schedulers';\nimport { isSafariPatchInProgress } from '../util/patchSafariProgressiveAudio';\n\ntype BufferingEvent = (e: Event | React.SyntheticEvent) => void;\n\nconst MIN_READY_STATE = 3;\n// Avoid flickering when re-mounting previously buffered video\nconst DEBOUNCE = 200;\n\n/**\n * Time range relative to the duration [0, 1]\n */\nexport type BufferedRange = { start: number; end: number };\n\nconst useBuffering = (noInitiallyBuffered = false) => {\n const [isBuffered, setIsBuffered] = useState(!noInitiallyBuffered);\n const [bufferedProgress, setBufferedProgress] = useState(0);\n const [bufferedRanges, setBufferedRanges] = useState([]);\n\n const setIsBufferedDebounced = useMemo(() => {\n return debounce(setIsBuffered, DEBOUNCE, false, true);\n }, []);\n\n const handleBuffering = useCallback((e) => {\n const media = e.currentTarget as HTMLMediaElement;\n\n if (!isSafariPatchInProgress(media)) {\n if (media.buffered.length) {\n const ranges = getTimeRanges(media.buffered, media.duration);\n setBufferedRanges(ranges);\n const bufferedLength = ranges.reduce((acc, { start, end }) => acc + end - start, 0);\n setBufferedProgress(bufferedLength / media.duration);\n }\n\n setIsBufferedDebounced(media.readyState >= MIN_READY_STATE || media.currentTime > 0);\n }\n }, [setIsBufferedDebounced]);\n\n const bufferingHandlers = {\n onLoadedData: handleBuffering,\n onPlaying: handleBuffering,\n onLoadStart: handleBuffering, // Needed for Safari to start\n onPause: handleBuffering, // Needed for Chrome when seeking\n onTimeUpdate: handleBuffering, // Needed for audio buffering progress\n onProgress: handleBuffering, // Needed for video buffering progress\n };\n\n return {\n isBuffered,\n bufferedProgress,\n bufferedRanges,\n bufferingHandlers,\n checkBuffering(element: HTMLMediaElement) {\n setIsBufferedDebounced(element.readyState >= MIN_READY_STATE);\n },\n };\n};\n\nfunction getTimeRanges(ranges: TimeRanges, duration: number) {\n const result: BufferedRange[] = [];\n for (let i = 0; i < ranges.length; i++) {\n result.push({\n start: ranges.start(i) / duration,\n end: ranges.end(i) / duration,\n });\n }\n return result;\n}\n\nexport default useBuffering;\n","import { useEffect, useRef } from '../lib/teact/teact';\n\nimport fastBlur from '../lib/fastBlur';\nimport useForceUpdate from './useForceUpdate';\nimport { IS_CANVAS_FILTER_SUPPORTED } from '../util/environment';\n\nconst RADIUS = 2;\nconst ITERATIONS = 2;\n\nexport default function useCanvasBlur(dataUri?: string, isDisabled = false, withRaf?: boolean) {\n // eslint-disable-next-line no-null/no-null\n const canvasRef = useRef(null);\n const forceUpdate = useForceUpdate();\n\n useEffect(() => {\n const canvas = canvasRef.current;\n\n if (!dataUri || !canvas || isDisabled) {\n return;\n }\n\n const img = new Image();\n\n const processBlur = () => {\n canvas.width = img.width;\n canvas.height = img.height;\n\n const ctx = canvas.getContext('2d', { alpha: false })!;\n\n if (IS_CANVAS_FILTER_SUPPORTED) {\n ctx.filter = `blur(${RADIUS}px)`;\n }\n\n ctx.drawImage(img, -RADIUS * 2, -RADIUS * 2, canvas.width + RADIUS * 4, canvas.height + RADIUS * 4);\n\n if (!IS_CANVAS_FILTER_SUPPORTED) {\n fastBlur(ctx, 0, 0, canvas.width, canvas.height, RADIUS, ITERATIONS);\n }\n };\n\n img.onload = () => {\n if (withRaf) {\n requestAnimationFrame(processBlur);\n } else {\n processBlur();\n }\n };\n\n img.src = dataUri;\n }, [canvasRef, dataUri, forceUpdate, isDisabled, withRaf]);\n\n return canvasRef;\n}\n","import { useMemo } from '../lib/teact/teact';\nimport { getActions } from '../global';\n\nimport { ApiChat, ApiUser } from '../api/types';\n\nimport { SERVICE_NOTIFICATIONS_USER_ID } from '../config';\nimport {\n isChatArchived, getCanDeleteChat, isUserId, isChatChannel,\n} from '../global/helpers';\nimport { compact } from '../util/iteratees';\nimport useLang from './useLang';\n\nconst useChatContextActions = ({\n chat,\n user,\n folderId,\n isPinned,\n isMuted,\n canChangeFolder,\n handleDelete,\n handleChatFolderChange,\n}: {\n chat: ApiChat | undefined;\n user: ApiUser | undefined;\n folderId?: number;\n isPinned?: boolean;\n isMuted?: boolean;\n canChangeFolder?: boolean;\n handleDelete: () => void;\n handleChatFolderChange: () => void;\n}, isInSearch = false) => {\n const lang = useLang();\n\n const { isSelf } = user || {};\n const isServiceNotifications = user?.id === SERVICE_NOTIFICATIONS_USER_ID;\n\n return useMemo(() => {\n if (!chat) {\n return undefined;\n }\n\n const {\n toggleChatPinned,\n updateChatMutedState,\n toggleChatArchived,\n toggleChatUnread,\n } = getActions();\n\n const actionAddToFolder = canChangeFolder ? {\n title: lang('ChatList.Filter.AddToFolder'),\n icon: 'folder',\n handler: handleChatFolderChange,\n } : undefined;\n\n const actionPin = isPinned\n ? {\n title: lang('UnpinFromTop'),\n icon: 'unpin',\n handler: () => toggleChatPinned({ id: chat.id, folderId }),\n }\n : { title: lang('PinToTop'), icon: 'pin', handler: () => toggleChatPinned({ id: chat.id, folderId }) };\n\n if (isInSearch) {\n return compact([actionPin, actionAddToFolder]);\n }\n\n const actionUnreadMark = chat.unreadCount || chat.hasUnreadMark\n ? { title: lang('MarkAsRead'), icon: 'readchats', handler: () => toggleChatUnread({ id: chat.id }) }\n : { title: lang('MarkAsUnread'), icon: 'unread', handler: () => toggleChatUnread({ id: chat.id }) };\n\n const actionMute = isMuted\n ? {\n title: lang('ChatList.Unmute'),\n icon: 'unmute',\n handler: () => updateChatMutedState({ chatId: chat.id, isMuted: false }),\n }\n : {\n title: lang('ChatList.Mute'),\n icon: 'mute',\n handler: () => updateChatMutedState({ chatId: chat.id, isMuted: true }),\n };\n\n const actionArchive = isChatArchived(chat)\n ? { title: lang('Unarchive'), icon: 'unarchive', handler: () => toggleChatArchived({ id: chat.id }) }\n : { title: lang('Archive'), icon: 'archive', handler: () => toggleChatArchived({ id: chat.id }) };\n\n const actionDelete = {\n title: isUserId(chat.id)\n ? lang('Delete')\n : lang(getCanDeleteChat(chat)\n ? 'DeleteChat'\n : (isChatChannel(chat) ? 'LeaveChannel' : 'Group.LeaveGroup')),\n icon: 'delete',\n destructive: true,\n handler: handleDelete,\n };\n\n const isInFolder = folderId !== undefined;\n\n return compact([\n actionAddToFolder,\n actionUnreadMark,\n actionPin,\n !isSelf && actionMute,\n !isSelf && !isServiceNotifications && !isInFolder && actionArchive,\n actionDelete,\n ]);\n }, [\n chat, canChangeFolder, lang, handleChatFolderChange, isPinned, isInSearch, isMuted, handleDelete, folderId, isSelf,\n isServiceNotifications,\n ]);\n};\n\nexport default useChatContextActions;\n","import { RefObject } from 'react';\nimport { useState, useEffect, useCallback } from '../lib/teact/teact';\n\nimport { IAnchorPosition } from '../types';\nimport {\n IS_TOUCH_ENV, IS_PWA, IS_IOS,\n} from '../util/environment';\n\nconst LONG_TAP_DURATION_MS = 200;\n\nfunction stopEvent(e: Event) {\n e.stopImmediatePropagation();\n e.preventDefault();\n e.stopPropagation();\n}\n\nconst useContextMenuHandlers = (\n elementRef: RefObject,\n isMenuDisabled?: boolean,\n shouldDisableOnLink?: boolean,\n shouldDisableOnLongTap?: boolean,\n) => {\n const [isContextMenuOpen, setIsContextMenuOpen] = useState(false);\n const [contextMenuPosition, setContextMenuPosition] = useState(undefined);\n\n const handleBeforeContextMenu = useCallback((e: React.MouseEvent) => {\n if (!isMenuDisabled && e.button === 2) {\n (e.target as HTMLElement).classList.add('no-selection');\n }\n }, [isMenuDisabled]);\n\n const handleContextMenu = useCallback((e: React.MouseEvent) => {\n (e.target as HTMLElement).classList.remove('no-selection');\n\n if (isMenuDisabled || (shouldDisableOnLink && (e.target as HTMLElement).matches('a[href]'))) {\n return;\n }\n e.preventDefault();\n\n if (contextMenuPosition) {\n return;\n }\n\n setIsContextMenuOpen(true);\n setContextMenuPosition({ x: e.clientX, y: e.clientY });\n }, [isMenuDisabled, shouldDisableOnLink, contextMenuPosition]);\n\n const handleContextMenuClose = useCallback(() => {\n setIsContextMenuOpen(false);\n }, []);\n\n const handleContextMenuHide = useCallback(() => {\n setContextMenuPosition(undefined);\n }, []);\n\n // Support context menu on touch devices\n useEffect(() => {\n if (isMenuDisabled || !IS_TOUCH_ENV || shouldDisableOnLongTap) {\n return undefined;\n }\n\n const element = elementRef.current;\n if (!element) {\n return undefined;\n }\n\n let timer: number | undefined;\n\n const clearLongPressTimer = () => {\n if (timer) {\n clearTimeout(timer);\n timer = undefined;\n }\n };\n\n const emulateContextMenuEvent = (originalEvent: TouchEvent) => {\n clearLongPressTimer();\n\n const { clientX, clientY, target } = originalEvent.touches[0];\n\n if (contextMenuPosition || (shouldDisableOnLink && (target as HTMLElement).matches('a[href]'))) {\n return;\n }\n\n // Temporarily intercept and clear the next click\n element.addEventListener('touchend', function cancelClickOnce(e) {\n element.removeEventListener('touchend', cancelClickOnce, true);\n stopEvent(e);\n }, true);\n\n // On iOS15, in PWA mode, the context menu immediately closes after opening\n if (IS_PWA && IS_IOS) {\n element.addEventListener('mousedown', function cancelClickOnce(e) {\n element.removeEventListener('mousedown', cancelClickOnce, true);\n stopEvent(e);\n }, true);\n }\n\n setIsContextMenuOpen(true);\n setContextMenuPosition({ x: clientX, y: clientY });\n };\n\n const startLongPressTimer = (e: TouchEvent) => {\n if (isMenuDisabled) {\n return;\n }\n clearLongPressTimer();\n\n timer = window.setTimeout(() => emulateContextMenuEvent(e), LONG_TAP_DURATION_MS);\n };\n\n // @perf Consider event delegation\n element.addEventListener('touchstart', startLongPressTimer, { passive: true });\n element.addEventListener('touchcancel', clearLongPressTimer, true);\n element.addEventListener('touchend', clearLongPressTimer, true);\n element.addEventListener('touchmove', clearLongPressTimer, { passive: true });\n\n return () => {\n clearLongPressTimer();\n element.removeEventListener('touchstart', startLongPressTimer);\n element.removeEventListener('touchcancel', clearLongPressTimer, true);\n element.removeEventListener('touchend', clearLongPressTimer, true);\n element.removeEventListener('touchmove', clearLongPressTimer);\n };\n }, [contextMenuPosition, isMenuDisabled, shouldDisableOnLongTap, elementRef, shouldDisableOnLink]);\n\n return {\n isContextMenuOpen,\n contextMenuPosition,\n handleBeforeContextMenu,\n handleContextMenu,\n handleContextMenuClose,\n handleContextMenuHide,\n };\n};\n\nexport default useContextMenuHandlers;\n","import { useState, useEffect } from '../lib/teact/teact';\nimport { IAnchorPosition } from '../types';\n\ninterface Layout {\n extraPaddingX?: number;\n extraTopPadding?: number;\n marginSides?: number;\n extraMarginTop?: number;\n}\n\nconst MENU_POSITION_VISUAL_COMFORT_SPACE_PX = 16;\nconst MENU_POSITION_BOTTOM_MARGIN = 12;\nconst EMPTY_RECT = {\n width: 0, left: 0, height: 0, top: 0,\n};\n\nexport default function useContextMenuPosition(\n anchor: IAnchorPosition | undefined,\n getTriggerElement: () => HTMLElement | null,\n getRootElement: () => HTMLElement | null,\n getMenuElement: () => HTMLElement | null,\n getLayout?: () => Layout,\n) {\n const [positionX, setPositionX] = useState<'right' | 'left'>('right');\n const [positionY, setPositionY] = useState<'top' | 'bottom'>('bottom');\n const [transformOriginX, setTransformOriginX] = useState();\n const [transformOriginY, setTransformOriginY] = useState();\n const [withScroll, setWithScroll] = useState(false);\n const [style, setStyle] = useState('');\n const [menuStyle, setMenuStyle] = useState('opacity: 0;');\n\n useEffect(() => {\n const triggerEl = getTriggerElement();\n if (!anchor || !triggerEl) {\n return;\n }\n\n let { x, y } = anchor;\n const anchorX = x;\n const anchorY = y;\n\n const menuEl = getMenuElement();\n const rootEl = getRootElement();\n\n const {\n extraPaddingX = 0,\n extraTopPadding = 0,\n marginSides = 0,\n extraMarginTop = 0,\n } = getLayout?.() || {};\n\n const marginTop = menuEl ? parseInt(getComputedStyle(menuEl).marginTop, 10) + extraMarginTop : undefined;\n\n const menuRect = menuEl ? {\n width: menuEl.offsetWidth,\n height: menuEl.offsetHeight + marginTop!,\n } : EMPTY_RECT;\n\n const rootRect = rootEl ? rootEl.getBoundingClientRect() : EMPTY_RECT;\n\n let horizontalPosition: 'left' | 'right';\n let verticalPosition: 'top' | 'bottom';\n if (x + menuRect.width + extraPaddingX < rootRect.width + rootRect.left) {\n x += 3;\n horizontalPosition = 'left';\n } else if (x - menuRect.width > 0) {\n horizontalPosition = 'right';\n x -= 3;\n } else {\n horizontalPosition = 'left';\n x = 16;\n }\n setPositionX(horizontalPosition);\n\n if (marginSides\n && horizontalPosition === 'right' && (x + extraPaddingX + marginSides >= rootRect.width + rootRect.left)) {\n x -= marginSides;\n }\n\n if (marginSides && horizontalPosition === 'left') {\n if (x + extraPaddingX + marginSides + menuRect.width >= rootRect.width + rootRect.left) {\n x -= marginSides;\n } else if (x - marginSides <= 0) {\n x += marginSides;\n }\n }\n\n if (y + menuRect.height < rootRect.height + rootRect.top) {\n verticalPosition = 'top';\n } else {\n verticalPosition = 'bottom';\n\n if (y - menuRect.height < rootRect.top + extraTopPadding) {\n y = rootRect.top + rootRect.height;\n }\n }\n setPositionY(verticalPosition);\n\n const triggerRect = triggerEl.getBoundingClientRect();\n const left = horizontalPosition === 'left'\n ? Math.min(x - triggerRect.left, rootRect.width - menuRect.width - MENU_POSITION_VISUAL_COMFORT_SPACE_PX)\n : (x - triggerRect.left);\n const top = y - triggerRect.top;\n\n const menuMaxHeight = rootRect.height - MENU_POSITION_BOTTOM_MARGIN - (marginTop || 0);\n\n setWithScroll(menuMaxHeight < menuRect.height);\n setMenuStyle(`max-height: ${menuMaxHeight}px;`);\n setStyle(`left: ${left}px; top: ${top}px`);\n const offsetX = (anchorX - triggerRect.left) - left;\n const offsetY = (anchorY - triggerRect.top) - top - (marginTop || 0);\n setTransformOriginX(horizontalPosition === 'left' ? offsetX : menuRect.width + offsetX);\n setTransformOriginY(verticalPosition === 'bottom' ? menuRect.height + offsetY : offsetY);\n }, [\n anchor, getMenuElement, getRootElement, getTriggerElement, getLayout,\n ]);\n\n return {\n positionX,\n positionY,\n transformOriginX,\n transformOriginY,\n style,\n menuStyle,\n withScroll,\n };\n}\n","import { useMemo } from '../lib/teact/teact';\n\nimport { debounce } from '../util/schedulers';\n\nexport default function useDebounce(ms: number, noFirst?: boolean, noLast?: boolean) {\n return useMemo(() => {\n return debounce((cb) => cb(), ms, !noFirst, !noLast);\n }, [ms, noFirst, noLast]);\n}\n","import { useEffect, useMemo } from '../lib/teact/teact';\nimport { getActions } from '../global';\n\nimport { ApiMessage } from '../api/types';\n\nimport { throttle } from '../util/schedulers';\n\nconst useEnsureMessage = (\n chatId: string,\n messageId?: number,\n message?: ApiMessage,\n replyOriginForId?: number,\n) => {\n const { loadMessage } = getActions();\n const loadMessageThrottled = useMemo(() => {\n const throttled = throttle(loadMessage, 500, true);\n return () => {\n throttled({ chatId, messageId, replyOriginForId });\n };\n }, [loadMessage, chatId, messageId, replyOriginForId]);\n\n useEffect(() => {\n if (messageId && !message) {\n loadMessageThrottled();\n }\n });\n};\n\nexport default useEnsureMessage;\n","import { useEffect, useState } from '../lib/teact/teact';\nimport {\n getOrderedIds,\n getUnreadCounters,\n getChatsCount,\n addOrderedIdsCallback,\n addUnreadCountersCallback,\n addChatsCountCallback,\n} from '../util/folderManager';\n\nexport function useFolderManagerForOrderedIds(folderId: number) {\n const [orderedIds, setOrderedIds] = useState(getOrderedIds(folderId));\n\n useEffect(() => addOrderedIdsCallback(folderId, setOrderedIds), [folderId]);\n\n return orderedIds;\n}\n\nexport function useFolderManagerForUnreadCounters() {\n const [unreadCounters, setUnreadCounters] = useState(getUnreadCounters());\n\n useEffect(() => addUnreadCountersCallback(setUnreadCounters), []);\n\n return unreadCounters;\n}\n\nexport function useFolderManagerForChatsCount() {\n const [chatsCount, setChatsCount] = useState(getChatsCount());\n\n useEffect(() => addChatsCountCallback(setChatsCount), []);\n\n return chatsCount;\n}\n","import { useEffect } from '../lib/teact/teact';\n\nconst useHorizontalScroll = (container: HTMLElement | null, isDisabled?: boolean) => {\n useEffect(() => {\n if (!container || isDisabled) {\n return undefined;\n }\n\n function handleScroll(e: WheelEvent) {\n // Ignore horizontal scroll and let it work natively (e.g. on touchpad)\n if (!e.deltaX) {\n container!.scrollLeft += e.deltaY / 4;\n }\n }\n\n container.addEventListener('wheel', handleScroll, { passive: true });\n\n return () => {\n container.removeEventListener('wheel', handleScroll);\n };\n }, [container, isDisabled]);\n};\n\nexport default useHorizontalScroll;\n","import { RefObject } from 'react';\nimport { useEffect } from '../lib/teact/teact';\nimport { IS_SINGLE_COLUMN_LAYOUT } from '../util/environment';\n\n// Focus slows down animation, also it breaks transition layout in Chrome\nconst FOCUS_DELAY_MS = 500;\nconst MODAL_HIDE_DELAY_MS = 300;\n\nexport default function useInputFocusOnOpen(\n inputRef: RefObject,\n isOpen?: boolean,\n onClose?: NoneToVoidFunction,\n) {\n useEffect(() => {\n if (isOpen) {\n if (!IS_SINGLE_COLUMN_LAYOUT) {\n setTimeout(() => {\n requestAnimationFrame(() => {\n if (inputRef.current) {\n inputRef.current.focus();\n }\n });\n }, FOCUS_DELAY_MS);\n }\n } else {\n if (inputRef.current) {\n inputRef.current.blur();\n }\n\n if (onClose) {\n setTimeout(onClose, MODAL_HIDE_DELAY_MS);\n }\n }\n }, [inputRef, isOpen, onClose]);\n}\n","import { RefObject } from 'react';\nimport {\n useEffect, useRef, useCallback, useState,\n} from '../lib/teact/teact';\n\nimport { throttle, debounce } from '../util/schedulers';\nimport useHeavyAnimationCheck from './useHeavyAnimationCheck';\n\ntype TargetCallback = (entry: IntersectionObserverEntry) => void;\ntype RootCallback = (entries: IntersectionObserverEntry[]) => void;\ntype ObserveCleanup = NoneToVoidFunction;\nexport type ObserveFn = (target: HTMLElement, targetCallback?: TargetCallback) => ObserveCleanup;\n\ninterface IntersectionController {\n observer: IntersectionObserver;\n callbacks: Map;\n}\n\ninterface Response {\n observe: ObserveFn;\n freeze: NoneToVoidFunction;\n unfreeze: NoneToVoidFunction;\n}\n\nexport function useIntersectionObserver({\n rootRef,\n throttleMs,\n debounceMs,\n shouldSkipFirst,\n margin,\n threshold,\n isDisabled,\n}: {\n rootRef: RefObject;\n throttleMs?: number;\n debounceMs?: number;\n shouldSkipFirst?: boolean;\n margin?: number;\n threshold?: number | number[];\n isDisabled?: boolean;\n}, rootCallback?: RootCallback): Response {\n const controllerRef = useRef();\n const rootCallbackRef = useRef();\n const freezeFlagsRef = useRef(0);\n const onUnfreezeRef = useRef();\n\n rootCallbackRef.current = rootCallback;\n\n const freeze = useCallback(() => {\n freezeFlagsRef.current++;\n }, []);\n\n const unfreeze = useCallback(() => {\n if (!freezeFlagsRef.current) {\n return;\n }\n\n freezeFlagsRef.current--;\n\n if (!freezeFlagsRef.current && onUnfreezeRef.current) {\n onUnfreezeRef.current();\n onUnfreezeRef.current = undefined;\n }\n }, []);\n\n useHeavyAnimationCheck(freeze, unfreeze);\n\n useEffect(() => {\n if (isDisabled) {\n return undefined;\n }\n\n return () => {\n if (controllerRef.current) {\n controllerRef.current.observer.disconnect();\n controllerRef.current.callbacks.clear();\n controllerRef.current = undefined;\n }\n };\n }, [isDisabled]);\n\n function initController() {\n const callbacks = new Map();\n const entriesAccumulator = new Map();\n const observerCallbackSync = () => {\n const entries = Array.from(entriesAccumulator.values());\n\n entries.forEach((entry: IntersectionObserverEntry) => {\n const callback = callbacks.get(entry.target);\n if (callback) {\n callback!(entry, entries);\n }\n });\n\n if (rootCallbackRef.current) {\n rootCallbackRef.current(entries);\n }\n\n entriesAccumulator.clear();\n };\n const scheduler = throttleMs ? throttle : debounceMs ? debounce : undefined;\n const observerCallback = scheduler\n ? scheduler(observerCallbackSync, (throttleMs || debounceMs)!, !shouldSkipFirst)\n : observerCallbackSync;\n const observer = new IntersectionObserver(\n (entries) => {\n entries.forEach((entry) => {\n entriesAccumulator.set(entry.target, entry);\n });\n\n if (freezeFlagsRef.current) {\n onUnfreezeRef.current = () => {\n observerCallback();\n };\n } else {\n observerCallback();\n }\n },\n {\n root: rootRef.current,\n rootMargin: margin ? `${margin}px` : undefined,\n threshold,\n },\n );\n\n controllerRef.current = { observer, callbacks };\n }\n\n const observe = useCallback((target, targetCallback) => {\n if (!controllerRef.current) {\n initController();\n }\n\n const controller = controllerRef.current!;\n controller.observer.observe(target);\n\n if (targetCallback) {\n controller.callbacks.set(target, targetCallback);\n }\n\n return () => {\n if (targetCallback) {\n controller.callbacks.delete(target);\n }\n\n controller.observer.unobserve(target);\n };\n // Arguments should never change\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [isDisabled]);\n\n return { observe, freeze, unfreeze };\n}\n\nexport function useOnIntersect(\n targetRef: RefObject, observe?: ObserveFn, callback?: TargetCallback,\n) {\n useEffect(() => {\n return observe ? observe(targetRef.current!, callback) : undefined;\n // Arguments should never change\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n}\n\nexport function useIsIntersecting(\n targetRef: RefObject, observe?: ObserveFn, callback?: TargetCallback,\n) {\n const [isIntersecting, setIsIntersecting] = useState(!observe);\n\n useOnIntersect(targetRef, observe, (entry) => {\n setIsIntersecting(entry.isIntersecting);\n\n if (callback) {\n callback(entry);\n }\n });\n\n return isIntersecting;\n}\n","import { useEffect, useLayoutEffect, useRef } from '../lib/teact/teact';\n\nfunction useInterval(callback: NoneToVoidFunction, delay?: number, noFirst = false) {\n const savedCallback = useRef(callback);\n\n useLayoutEffect(() => {\n savedCallback.current = callback;\n }, [callback]);\n\n useEffect(() => {\n if (delay === undefined) {\n return undefined;\n }\n\n const id = setInterval(() => savedCallback.current(), delay);\n if (!noFirst) savedCallback.current();\n\n return () => clearInterval(id);\n }, [delay, noFirst]);\n}\n\nexport default useInterval;\n","import { useLayoutEffect } from '../lib/teact/teact';\nimport usePrevious from './usePrevious';\n\nconst useLayoutEffectWithPrevDeps = (\n cb: (args: T | readonly []) => void, dependencies: T, debugKey?: string,\n) => {\n const prevDeps = usePrevious(dependencies);\n return useLayoutEffect(() => {\n return cb(prevDeps || []);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, dependencies, debugKey);\n};\n\nexport default useLayoutEffectWithPrevDeps;\n","import useShowTransition from './useShowTransition';\n\nexport default function useMediaTransition(mediaData?: any) {\n const isMediaReady = Boolean(mediaData);\n const { transitionClassNames } = useShowTransition(isMediaReady, undefined, isMediaReady, 'slow');\n\n return transitionClassNames;\n}\n","import { useRef } from '../lib/teact/teact';\nimport generateIdFor from '../util/generateIdFor';\n\nconst store: Record = {};\n\nconst useUniqueId = () => {\n const idRef = useRef();\n\n if (!idRef.current) {\n idRef.current = generateIdFor(store);\n store[idRef.current] = true;\n }\n\n return idRef.current;\n};\n\nexport default useUniqueId;\n","import {\n useEffect, useMemo, useRef, useState,\n} from '../lib/teact/teact';\n\nimport { IS_PROGRESSIVE_SUPPORTED } from '../util/environment';\nimport { ApiMediaFormat } from '../api/types';\nimport { throttle } from '../util/schedulers';\nimport * as mediaLoader from '../util/mediaLoader';\nimport useForceUpdate from './useForceUpdate';\nimport useUniqueId from './useUniqueId';\n\nconst STREAMING_PROGRESS = 0.75;\nconst STREAMING_TIMEOUT = 1500;\nconst PROGRESS_THROTTLE = 500;\n\nexport default function useMediaWithLoadProgress(\n mediaHash: string | undefined,\n noLoad = false,\n mediaFormat = ApiMediaFormat.BlobUrl,\n cacheBuster?: number,\n delay?: number | false,\n isHtmlAllowed = false,\n) {\n const mediaData = mediaHash ? mediaLoader.getFromMemory(mediaHash) : undefined;\n const isStreaming = mediaFormat === ApiMediaFormat.Stream || (\n IS_PROGRESSIVE_SUPPORTED && mediaFormat === ApiMediaFormat.Progressive\n );\n const forceUpdate = useForceUpdate();\n const id = useUniqueId();\n const [loadProgress, setLoadProgress] = useState(mediaData && !isStreaming ? 1 : 0);\n const startedAtRef = useRef();\n\n const handleProgress = useMemo(() => {\n return throttle((progress: number) => {\n if (startedAtRef.current && (!delay || (Date.now() - startedAtRef.current > delay))) {\n setLoadProgress(progress);\n }\n }, PROGRESS_THROTTLE, true);\n }, [delay]);\n\n useEffect(() => {\n if (!noLoad && mediaHash) {\n if (!mediaData) {\n setLoadProgress(0);\n\n if (startedAtRef.current) {\n mediaLoader.cancelProgress(handleProgress);\n }\n\n startedAtRef.current = Date.now();\n\n mediaLoader.fetch(mediaHash, mediaFormat, isHtmlAllowed, handleProgress, id).then(() => {\n const spentTime = Date.now() - startedAtRef.current!;\n startedAtRef.current = undefined;\n\n if (!delay || spentTime >= delay) {\n forceUpdate();\n } else {\n setTimeout(forceUpdate, delay - spentTime);\n }\n });\n } else if (isStreaming) {\n setTimeout(() => {\n setLoadProgress(STREAMING_PROGRESS);\n }, STREAMING_TIMEOUT);\n }\n }\n }, [\n noLoad, mediaHash, mediaData, mediaFormat, cacheBuster, forceUpdate, isStreaming, delay, handleProgress,\n isHtmlAllowed, id,\n ]);\n\n useEffect(() => {\n if (noLoad && startedAtRef.current) {\n mediaLoader.cancelProgress(handleProgress);\n setLoadProgress(0);\n startedAtRef.current = undefined;\n }\n }, [handleProgress, noLoad]);\n\n useEffect(() => {\n return () => {\n if (mediaHash) {\n mediaLoader.removeCallback(mediaHash, id);\n }\n };\n }, [id, mediaHash]);\n\n return { mediaData, loadProgress };\n}\n","import { useCallback, useEffect, useRef } from '../lib/teact/teact';\n\nimport { IS_TOUCH_ENV } from '../util/environment';\n\nconst MENU_CLOSE_TIMEOUT = 250;\nlet closeTimeout: number | undefined;\n\nexport default function useMouseInside(\n isOpen: boolean, onClose: NoneToVoidFunction, menuCloseTimeout = MENU_CLOSE_TIMEOUT, isDisabled = false,\n) {\n const isMouseInside = useRef(false);\n\n const markMouseInside = useCallback(() => {\n isMouseInside.current = true;\n }, []);\n\n useEffect(() => {\n if (closeTimeout) {\n clearTimeout(closeTimeout);\n closeTimeout = undefined;\n }\n\n if (isOpen && !IS_TOUCH_ENV && !isDisabled) {\n closeTimeout = window.setTimeout(() => {\n if (!isMouseInside.current) {\n onClose();\n }\n }, menuCloseTimeout * 2);\n }\n }, [isDisabled, isOpen, menuCloseTimeout, onClose]);\n\n const handleMouseEnter = useCallback(() => {\n isMouseInside.current = true;\n }, []);\n\n const handleMouseLeave = useCallback(() => {\n isMouseInside.current = false;\n\n if (closeTimeout) {\n clearTimeout(closeTimeout);\n closeTimeout = undefined;\n }\n\n closeTimeout = window.setTimeout(() => {\n if (!isMouseInside.current) {\n onClose();\n }\n }, menuCloseTimeout);\n }, [menuCloseTimeout, onClose]);\n\n return [handleMouseEnter, handleMouseLeave, markMouseInside];\n}\n","import { useRef } from '../lib/teact/teact';\n\nimport usePrevious from './usePrevious';\nimport useForceUpdate from './useForceUpdate';\nimport useOnChange from './useOnChange';\n\nexport default function usePrevDuringAnimation(current: any, duration?: number) {\n const prev = usePrevious(current, true);\n const timeoutRef = useRef();\n const forceUpdate = useForceUpdate();\n // eslint-disable-next-line no-null/no-null\n const isCurrentPresent = current !== undefined && current !== null;\n // eslint-disable-next-line no-null/no-null\n const isPrevPresent = prev !== undefined && prev !== null;\n\n if (isCurrentPresent && timeoutRef.current) {\n clearTimeout(timeoutRef.current);\n timeoutRef.current = undefined;\n }\n\n useOnChange(() => {\n // When `current` becomes empty\n if (duration && !isCurrentPresent && isPrevPresent && !timeoutRef.current) {\n timeoutRef.current = window.setTimeout(() => {\n timeoutRef.current = undefined;\n forceUpdate();\n }, duration);\n }\n }, [current]);\n\n return !timeoutRef.current || !duration || isCurrentPresent ? current : prev;\n}\n","import { useState, useCallback, useRef } from '../lib/teact/teact';\n\nexport type ReducerAction = { type: Actions; payload?: any };\nexport type StateReducer = (state: State, action: ReducerAction) => State;\nexport type Dispatch = (action: ReducerAction) => void;\n\nexport default function useReducer(\n reducer: StateReducer,\n initialState: State,\n) {\n const reducerRef = useRef(reducer);\n const [state, setState] = useState(initialState);\n\n const dispatch = useCallback((action: ReducerAction) => {\n setState((currentState) => reducerRef.current(currentState, action));\n }, []);\n\n return [\n state,\n dispatch,\n ] as [State, Dispatch];\n}\n","import React, { FC, memo } from '../../lib/teact/teact';\nimport { OwnProps } from './CalendarModal';\nimport { Bundles } from '../../util/moduleLoader';\n\nimport useModuleLoader from '../../hooks/useModuleLoader';\n\nconst CalendarModalAsync: FC = (props) => {\n const { isOpen } = props;\n const CalendarModal = useModuleLoader(Bundles.Extra, 'CalendarModal', !isOpen);\n\n // eslint-disable-next-line react/jsx-props-no-spreading\n return CalendarModal ? : undefined;\n};\n\nexport default memo(CalendarModalAsync);\n","import React, { useCallback, useState } from '../lib/teact/teact';\nimport { getGlobal } from '../lib/teact/teactn';\n\nimport { SCHEDULED_WHEN_ONLINE } from '../config';\nimport { getDayStartAt } from '../util/dateFormat';\nimport useLang from './useLang';\n\nimport CalendarModal from '../components/common/CalendarModal.async';\n\ntype OnScheduledCallback = (scheduledAt: number) => void;\n\nconst useSchedule = (\n canScheduleUntilOnline?: boolean,\n onCancel?: () => void,\n) => {\n const lang = useLang();\n const [onScheduled, setOnScheduled] = useState();\n\n const handleMessageSchedule = useCallback((date: Date, isWhenOnline = false) => {\n const { serverTimeOffset } = getGlobal();\n // Scheduled time can not be less than 10 seconds in future\n const scheduledAt = Math.round(Math.max(date.getTime(), Date.now() + 60 * 1000) / 1000)\n + (isWhenOnline ? 0 : serverTimeOffset);\n onScheduled?.(scheduledAt);\n setOnScheduled(undefined);\n }, [onScheduled]);\n\n const handleMessageScheduleUntilOnline = useCallback(() => {\n handleMessageSchedule(new Date(SCHEDULED_WHEN_ONLINE * 1000), true);\n }, [handleMessageSchedule]);\n\n const handleCloseCalendar = useCallback(() => {\n setOnScheduled(undefined);\n onCancel?.();\n }, [onCancel]);\n\n const requestCalendar = useCallback((whenScheduled: OnScheduledCallback) => {\n setOnScheduled(() => whenScheduled);\n }, []);\n\n const scheduledDefaultDate = new Date();\n scheduledDefaultDate.setSeconds(0);\n scheduledDefaultDate.setMilliseconds(0);\n\n const scheduledMaxDate = new Date();\n scheduledMaxDate.setFullYear(scheduledMaxDate.getFullYear() + 1);\n\n const calendar = (\n \n );\n\n return [requestCalendar, calendar] as const;\n};\n\nexport default useSchedule;\n","import { useMemo } from '../lib/teact/teact';\nimport { getActions } from '../global';\n\nimport { ApiSendMessageAction } from '../api/types';\n\nimport { SEND_MESSAGE_ACTION_INTERVAL } from '../config';\nimport { throttle } from '../util/schedulers';\n\nconst useSendMessageAction = (chatId: string, threadId?: number) => {\n return useMemo(() => {\n return throttle((action: ApiSendMessageAction) => {\n getActions().sendMessageAction({ chatId, threadId, action });\n }, SEND_MESSAGE_ACTION_INTERVAL);\n }, [chatId, threadId]);\n};\n\nexport default useSendMessageAction;\n","import { useRef } from '../lib/teact/teact';\n\nimport useOnChange from './useOnChange';\n\n// Allows to use state value as \"silent\" dependency in hooks (not causing updates).\n// Useful for state values that update frequently (such as controlled input value).\nexport function useStateRef(value: T) {\n const ref = useRef(value);\n\n useOnChange(() => {\n ref.current = value;\n }, [value]);\n\n return ref;\n}\n","import { useEffect, useLayoutEffect, useRef } from '../lib/teact/teact';\n\nfunction useTimeout(callback: () => void, delay?: number) {\n const savedCallback = useRef(callback);\n\n useLayoutEffect(() => {\n savedCallback.current = callback;\n }, [callback]);\n\n useEffect(() => {\n if (typeof delay !== 'number') {\n return undefined;\n }\n const id = setTimeout(() => savedCallback.current(), delay);\n return () => clearTimeout(id);\n }, [delay]);\n}\n\nexport default useTimeout;\n","import { RefObject } from 'react';\nimport { useEffect } from '../lib/teact/teact';\nimport { fastRaf } from '../util/schedulers';\n\n// Fix for memory leak when unmounting video element\nexport default function useVideoCleanup(videoRef: RefObject, dependencies: any[]) {\n useEffect(() => {\n const videoEl = videoRef.current;\n\n return () => {\n if (videoEl) {\n fastRaf(() => {\n videoEl.pause();\n videoEl.src = '';\n videoEl.load();\n });\n }\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, dependencies);\n}\n","/* eslint-disable no-nested-ternary */\n/* eslint-disable no-bitwise */\n/* eslint-disable no-multi-assign */\n/* eslint-disable no-cond-assign */\n/* eslint-disable no-param-reassign */\n/* eslint-disable prefer-const */\n/* eslint-disable eqeqeq */\n\n/*\nSuperfast Blur - a fast Box Blur For Canvas\n\nVersion: 0.5\nAuthor: Mario Klingemann\nContact: mario@quasimondo.com\nWebsite: http://www.quasimondo.com/BoxBlurForCanvas\nTwitter: @quasimondo\n\nIn case you find this class useful - especially in commercial projects -\nI am not totally unhappy for a small donation to my PayPal account\nmario@quasimondo.de\n\nOr support me on flattr:\nhttps://flattr.com/thing/140066/Superfast-Blur-a-pretty-fast-Box-Blur-Effect-for-CanvasJavascript\n\nCopyright (c) 2011 Mario Klingemann\n\nPermission is hereby granted, free of charge, to any person\nobtaining a copy of this software and associated documentation\nfiles (the \"Software\"), to deal in the Software without\nrestriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the\nSoftware is furnished to do so, subject to the following\nconditions:\n\nThe above copyright notice and this permission notice shall be\nincluded in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\nEXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES\nOF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT\nHOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,\nWHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\nFROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR\nOTHER DEALINGS IN THE SOFTWARE.\n*/\n\n// eslint-disable-next-line max-len\nconst mul_table = [1, 57, 41, 21, 203, 34, 97, 73, 227, 91, 149, 62, 105, 45, 39, 137, 241, 107, 3, 173, 39, 71, 65, 238, 219, 101, 187, 87, 81, 151, 141, 133, 249, 117, 221, 209, 197, 187, 177, 169, 5, 153, 73, 139, 133, 127, 243, 233, 223, 107, 103, 99, 191, 23, 177, 171, 165, 159, 77, 149, 9, 139, 135, 131, 253, 245, 119, 231, 224, 109, 211, 103, 25, 195, 189, 23, 45, 175, 171, 83, 81, 79, 155, 151, 147, 9, 141, 137, 67, 131, 129, 251, 123, 30, 235, 115, 113, 221, 217, 53, 13, 51, 50, 49, 193, 189, 185, 91, 179, 175, 43, 169, 83, 163, 5, 79, 155, 19, 75, 147, 145, 143, 35, 69, 17, 67, 33, 65, 255, 251, 247, 243, 239, 59, 29, 229, 113, 111, 219, 27, 213, 105, 207, 51, 201, 199, 49, 193, 191, 47, 93, 183, 181, 179, 11, 87, 43, 85, 167, 165, 163, 161, 159, 157, 155, 77, 19, 75, 37, 73, 145, 143, 141, 35, 138, 137, 135, 67, 33, 131, 129, 255, 63, 250, 247, 61, 121, 239, 237, 117, 29, 229, 227, 225, 111, 55, 109, 216, 213, 211, 209, 207, 205, 203, 201, 199, 197, 195, 193, 48, 190, 47, 93, 185, 183, 181, 179, 178, 176, 175, 173, 171, 85, 21, 167, 165, 41, 163, 161, 5, 79, 157, 78, 154, 153, 19, 75, 149, 74, 147, 73, 144, 143, 71, 141, 140, 139, 137, 17, 135, 134, 133, 66, 131, 65, 129, 1];\n// eslint-disable-next-line max-len\nconst shg_table = [0, 9, 10, 10, 14, 12, 14, 14, 16, 15, 16, 15, 16, 15, 15, 17, 18, 17, 12, 18, 16, 17, 17, 19, 19, 18, 19, 18, 18, 19, 19, 19, 20, 19, 20, 20, 20, 20, 20, 20, 15, 20, 19, 20, 20, 20, 21, 21, 21, 20, 20, 20, 21, 18, 21, 21, 21, 21, 20, 21, 17, 21, 21, 21, 22, 22, 21, 22, 22, 21, 22, 21, 19, 22, 22, 19, 20, 22, 22, 21, 21, 21, 22, 22, 22, 18, 22, 22, 21, 22, 22, 23, 22, 20, 23, 22, 22, 23, 23, 21, 19, 21, 21, 21, 23, 23, 23, 22, 23, 23, 21, 23, 22, 23, 18, 22, 23, 20, 22, 23, 23, 23, 21, 22, 20, 22, 21, 22, 24, 24, 24, 24, 24, 22, 21, 24, 23, 23, 24, 21, 24, 23, 24, 22, 24, 24, 22, 24, 24, 22, 23, 24, 24, 24, 20, 23, 22, 23, 24, 24, 24, 24, 24, 24, 24, 23, 21, 23, 22, 23, 24, 24, 24, 22, 24, 24, 24, 23, 22, 24, 24, 25, 23, 25, 25, 23, 24, 25, 25, 24, 22, 25, 25, 25, 24, 23, 24, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 23, 25, 23, 24, 25, 25, 25, 25, 25, 25, 25, 25, 25, 24, 22, 25, 25, 23, 25, 25, 20, 24, 25, 24, 25, 25, 22, 24, 25, 24, 25, 24, 25, 25, 24, 25, 25, 25, 25, 22, 25, 25, 25, 24, 25, 24, 25, 18];\n\nexport default function boxBlurCanvasRGB(context, top_x, top_y, width, height, radius, iterations) {\n if (Number.isNaN(radius) || radius < 1) return;\n\n radius |= 0;\n\n if (Number.isNaN(iterations)) iterations = 1;\n iterations |= 0;\n if (iterations > 3) iterations = 3;\n if (iterations < 1) iterations = 1;\n\n const imageData = context.getImageData(top_x, top_y, width, height);\n\n const pixels = imageData.data;\n\n let rsum;\n let gsum;\n let bsum;\n let x;\n let y;\n let i;\n let p;\n let p1;\n let p2;\n let yp;\n let yi;\n let yw;\n let wm = width - 1;\n let hm = height - 1;\n let rad1 = radius + 1;\n\n let r = [];\n let g = [];\n let b = [];\n\n let mul_sum = mul_table[radius];\n let shg_sum = shg_table[radius];\n\n let vmin = [];\n let vmax = [];\n\n while (iterations-- > 0) {\n yw = yi = 0;\n\n for (y = 0; y < height; y++) {\n rsum = pixels[yw] * rad1;\n gsum = pixels[yw + 1] * rad1;\n bsum = pixels[yw + 2] * rad1;\n\n for (i = 1; i <= radius; i++) {\n p = yw + (((i > wm ? wm : i)) << 2);\n rsum += pixels[p++];\n gsum += pixels[p++];\n bsum += pixels[p++];\n }\n\n for (x = 0; x < width; x++) {\n r[yi] = rsum;\n g[yi] = gsum;\n b[yi] = bsum;\n\n if (y == 0) {\n vmin[x] = ((p = x + rad1) < wm ? p : wm) << 2;\n vmax[x] = ((p = x - radius) > 0 ? p << 2 : 0);\n }\n\n p1 = yw + vmin[x];\n p2 = yw + vmax[x];\n\n rsum += pixels[p1++] - pixels[p2++];\n gsum += pixels[p1++] - pixels[p2++];\n bsum += pixels[p1++] - pixels[p2++];\n\n yi++;\n }\n yw += (width << 2);\n }\n\n for (x = 0; x < width; x++) {\n yp = x;\n rsum = r[yp] * rad1;\n gsum = g[yp] * rad1;\n bsum = b[yp] * rad1;\n\n for (i = 1; i <= radius; i++) {\n yp += (i > hm ? 0 : width);\n rsum += r[yp];\n gsum += g[yp];\n bsum += b[yp];\n }\n\n yi = x << 2;\n for (y = 0; y < height; y++) {\n pixels[yi] = (rsum * mul_sum) >>> shg_sum;\n pixels[yi + 1] = (gsum * mul_sum) >>> shg_sum;\n pixels[yi + 2] = (bsum * mul_sum) >>> shg_sum;\n\n if (x == 0) {\n vmin[y] = ((p = y + rad1) < hm ? p : hm) * width;\n vmax[y] = ((p = y - radius) > 0 ? p * width : 0);\n }\n\n p1 = x + vmin[y];\n p2 = x + vmax[y];\n\n rsum += r[p1] - r[p2];\n gsum += g[p1] - g[p2];\n bsum += b[p1] - b[p2];\n\n yi += width << 2;\n }\n }\n }\n\n context.putImageData(imageData, top_x, top_y);\n}\n","import { getActions, getGlobal } from '../global';\n\nimport { AudioOrigin, GlobalSearchContent } from '../types';\nimport { ApiMessage } from '../api/types';\n\nimport { IS_SAFARI } from './environment';\nimport safePlay from './safePlay';\nimport { patchSafariProgressiveAudio, isSafariPatchInProgress } from './patchSafariProgressiveAudio';\nimport { getMessageKey, MessageKey, parseMessageKey } from '../global/helpers';\nimport { fastRaf } from './schedulers';\nimport { selectCurrentMessageList } from '../global/selectors';\n\ntype Handler = (eventName: string, e: Event) => void;\nexport type TrackId = `${MessageKey}-${number}`;\n\nexport interface Track {\n audio: HTMLAudioElement;\n proxy: HTMLAudioElement;\n type: 'voice' | 'audio';\n handlers: Handler[];\n onForcePlay?: NoneToVoidFunction;\n onTrackChange?: NoneToVoidFunction;\n}\n\nconst tracks = new Map();\nlet voiceQueue: TrackId[] = [];\nlet musicQueue: TrackId[] = [];\n\nlet currentTrackId: TrackId | undefined;\n\nfunction createAudio(\n trackId: TrackId,\n type: Track['type'],\n onForcePlay?: NoneToVoidFunction,\n onTrackChange?: NoneToVoidFunction,\n): Track {\n const audio = new Audio();\n\n function handleEvent(eventName: string) {\n return (e: Event) => {\n if (!tracks.has(trackId)) {\n return;\n }\n\n if (isSafariPatchInProgress(audio)) {\n return;\n }\n\n tracks.get(trackId)!.handlers.forEach((handler) => {\n handler(eventName, e);\n });\n };\n }\n\n audio.addEventListener('timeupdate', handleEvent('onTimeUpdate'));\n audio.addEventListener('play', handleEvent('onPlay'));\n audio.addEventListener('pause', handleEvent('onPause'));\n audio.addEventListener('loadstart', handleEvent('onLoadStart'));\n audio.addEventListener('loadeddata', handleEvent('onLoadedData'));\n audio.addEventListener('playing', handleEvent('onPlaying'));\n audio.addEventListener('ended', () => {\n if (!tracks.has(trackId)) {\n return;\n }\n\n if (isSafariPatchInProgress(audio)) {\n return;\n }\n\n playNext(trackId);\n });\n\n return {\n audio,\n type,\n proxy: new Proxy(audio, {\n get: (target, key: keyof HTMLAudioElement) => target[key],\n }),\n handlers: [],\n onForcePlay,\n onTrackChange,\n };\n}\n\nfunction playNext(trackId: TrackId, isReverseOrder?: boolean) {\n const currentTrack = currentTrackId && tracks.get(currentTrackId);\n if (currentTrack) {\n currentTrack.audio.pause();\n currentTrack.audio.currentTime = 0;\n if (currentTrack.onTrackChange) currentTrack.onTrackChange();\n }\n\n const origin = getGlobal().audioPlayer.origin || AudioOrigin.Inline;\n\n const nextTrackId = findNextInQueue(trackId, origin, isReverseOrder);\n if (!nextTrackId) {\n return;\n }\n\n if (!tracks.has(nextTrackId)) {\n // A bit hacky way to continue playlist when switching chat\n getActions().openAudioPlayer(parseMessageKey(splitTrackId(nextTrackId).messageKey));\n\n return;\n }\n\n const nextTrack = tracks.get(nextTrackId)!;\n\n if (nextTrack.onForcePlay) {\n nextTrack.onForcePlay();\n }\n\n currentTrackId = nextTrackId;\n\n if (nextTrack.audio.src) {\n safePlay(nextTrack.audio);\n }\n}\n\nexport function stopCurrentAudio() {\n const currentTrack = currentTrackId && tracks.get(currentTrackId);\n if (currentTrack) {\n currentTrack.audio.pause();\n }\n}\n\nexport function register(\n trackId: TrackId,\n trackType: Track['type'],\n handler: Handler,\n onForcePlay?: NoneToVoidFunction,\n onTrackChange?: NoneToVoidFunction,\n) {\n if (!tracks.has(trackId)) {\n const track = createAudio(trackId, trackType, onForcePlay, onTrackChange);\n tracks.set(trackId, track);\n addTrackToQueue(track, trackId);\n }\n const { audio, proxy, handlers } = tracks.get(trackId)!;\n\n handlers.push(handler);\n\n return {\n play(src: string) {\n if (!audio.paused) return;\n const currentTrack = currentTrackId && tracks.get(currentTrackId);\n if (currentTrack && currentTrackId !== trackId) {\n currentTrack.audio.pause();\n currentTrack.audio.currentTime = 0;\n if (isSafariPatchInProgress(currentTrack.audio)) {\n currentTrack.audio.dataset.preventPlayAfterPatch = 'true';\n }\n if (currentTrack.onTrackChange) currentTrack.onTrackChange();\n }\n\n currentTrackId = trackId;\n\n if (!audio.src) {\n audio.src = src;\n audio.preload = 'auto';\n\n if (src.includes('/progressive/') && IS_SAFARI) {\n delete audio.dataset.preventPlayAfterPatch;\n patchSafariProgressiveAudio(audio);\n }\n }\n\n safePlay(audio);\n cleanUpQueue(trackType, trackId);\n },\n\n pause() {\n if (currentTrackId === trackId) {\n audio.pause();\n }\n },\n\n stop() {\n if (currentTrackId === trackId) {\n // Hack, reset src to remove default media session notification\n const prevSrc = audio.src;\n audio.pause();\n // onPause not called otherwise, but required to sync UI\n fastRaf(() => {\n audio.src = '';\n audio.src = prevSrc;\n });\n }\n },\n\n setCurrentTime(time: number) {\n if (currentTrackId === trackId) {\n if (audio.fastSeek) {\n audio.fastSeek(time);\n } else {\n audio.currentTime = time;\n }\n }\n },\n\n setVolume(volume: number) {\n if (currentTrackId === trackId) {\n audio.volume = volume;\n audio.muted = false;\n }\n },\n\n setPlaybackRate(rate: number) {\n if (currentTrackId === trackId) {\n audio.playbackRate = rate;\n }\n },\n\n toggleMuted(muted?: boolean) {\n if (muted === undefined) {\n audio.muted = !audio.muted;\n } else {\n audio.muted = muted;\n }\n },\n\n proxy,\n\n requestNextTrack() {\n playNext(trackId);\n },\n\n isLast() {\n return !findNextInQueue(trackId, getGlobal().audioPlayer.origin);\n },\n\n isFirst() {\n return !findNextInQueue(trackId, getGlobal().audioPlayer.origin, true);\n },\n\n requestPreviousTrack() {\n playNext(trackId, true);\n },\n\n destroy(shouldRemoveFromQueue = false) {\n const track = tracks.get(trackId);\n if (!track) {\n return;\n }\n\n track.handlers = track.handlers.filter((h) => h !== handler);\n\n if (!track.handlers.length) {\n track.audio.pause();\n tracks.delete(trackId);\n\n if (shouldRemoveFromQueue) {\n removeFromQueue(track, trackId);\n }\n\n if (trackId === currentTrackId) {\n currentTrackId = undefined;\n }\n }\n },\n };\n}\n\nfunction getTrackQueue(track: Track) {\n switch (track.type) {\n case 'audio': return musicQueue;\n case 'voice': return voiceQueue;\n default: return undefined;\n }\n}\n\nfunction addTrackToQueue(track: Track, trackId: TrackId) {\n if (track.type === 'audio' && !musicQueue.includes(trackId)) {\n musicQueue.push(trackId);\n musicQueue.sort(trackIdComparator);\n }\n\n if (track.type === 'voice' && !voiceQueue.includes(trackId)) {\n voiceQueue.push(trackId);\n voiceQueue.sort(trackIdComparator);\n }\n}\n\nfunction removeFromQueue(track: Track, trackId: TrackId) {\n const trackIdFilter = (el: TrackId) => el !== trackId;\n if (track.type === 'audio') {\n musicQueue = musicQueue.filter(trackIdFilter);\n }\n\n if (track.type === 'voice') {\n voiceQueue = voiceQueue.filter(trackIdFilter);\n }\n}\n\nfunction cleanUpQueue(type: Track['type'], trackId: TrackId) {\n if (getGlobal().globalSearch.currentContent === GlobalSearchContent.Music) return;\n const { chatId } = parseMessageKey(splitTrackId(trackId).messageKey);\n const openedChatId = selectCurrentMessageList(getGlobal())?.chatId;\n const queueFilter = (id: string) => (\n id.startsWith(`msg${chatId}`) || (openedChatId && id.startsWith(`msg${openedChatId}`))\n );\n\n if (type === 'audio') {\n musicQueue = musicQueue.filter(queueFilter);\n }\n\n if (type === 'voice') {\n voiceQueue = voiceQueue.filter(queueFilter);\n }\n}\n\nfunction findNextInQueue(currentId: TrackId, origin = AudioOrigin.Inline, isReverseOrder?: boolean) {\n const track = tracks.get(currentId)!;\n const queue = getTrackQueue(track);\n if (!queue) return undefined;\n\n if (origin === AudioOrigin.Search) {\n const index = queue.indexOf(currentId);\n if (index < 0) return undefined;\n const direction = isReverseOrder ? -1 : 1;\n return queue[index + direction];\n }\n\n const { chatId } = parseMessageKey(splitTrackId(currentId).messageKey);\n const chatAudio = queue.filter((id) => id.startsWith(`msg${chatId}`));\n const index = chatAudio.indexOf(currentId);\n if (index < 0) return undefined;\n let direction = origin === AudioOrigin.Inline ? -1 : 1;\n if (isReverseOrder) direction *= -1;\n return chatAudio[index + direction];\n}\n\nexport function makeTrackId(message: ApiMessage): TrackId {\n return `${getMessageKey(message)}-${message.date}`;\n}\n\nfunction splitTrackId(trackId: TrackId) {\n const messageKey = trackId.match(/^msg(-?\\d+)-(\\d+)/)![0] as MessageKey;\n const date = Number(trackId.split('-').pop());\n return {\n messageKey,\n date,\n };\n}\n\n// Descending order by date\nfunction trackIdComparator(one?: TrackId, two?: TrackId) {\n if (!one || !two) return 0;\n const { date: dateOne, messageKey: keyOne } = splitTrackId(one);\n const { date: dateTwo, messageKey: keyTwo } = splitTrackId(two);\n const diff = dateTwo - dateOne;\n return diff === 0 ? keyTwo.localeCompare(keyOne) : diff;\n}\n","import { IS_IOS } from './environment';\n\nexport enum SwipeDirection {\n Up,\n Down,\n Left,\n Right,\n}\n\ninterface CaptureOptions {\n onCapture?: (e: MouseEvent | TouchEvent) => void;\n onRelease?: (e: MouseEvent | TouchEvent) => void;\n onDrag?: (\n e: MouseEvent | TouchEvent,\n captureEvent: MouseEvent | TouchEvent,\n params: {\n dragOffsetX: number;\n dragOffsetY: number;\n },\n ) => void;\n onSwipe?: (e: Event, direction: SwipeDirection) => boolean;\n onZoom?: (e: TouchEvent, params: {\n // Relative zoom factor\n zoomFactor: number;\n\n // center coordinate of the initial pinch\n initialCenterX: number;\n initialCenterY: number;\n\n // offset of the pinch center (current from initial)\n dragOffsetX: number;\n dragOffsetY: number;\n\n // center coordinate of the current pinch\n currentCenterX: number;\n currentCenterY: number;\n }) => void;\n onClick?: (e: MouseEvent | TouchEvent) => void;\n onDoubleClick?: (e: MouseEvent | RealTouchEvent, params: { centerX: number; centerY: number }) => void;\n excludedClosestSelector?: string;\n selectorToPreventScroll?: string;\n maxZoom?: number;\n minZoom?: number;\n isNotPassive?: boolean;\n withCursor?: boolean;\n}\n\n// https://stackoverflow.com/questions/11287877/how-can-i-get-e-offsetx-on-mobile-ipad\n// Android does not have this value, and iOS has it but as read-only\nexport interface RealTouchEvent extends TouchEvent {\n pageX?: number;\n pageY?: number;\n}\n\ntype TSwipeAxis =\n 'x'\n | 'y'\n | undefined;\n\nexport const IOS_SCREEN_EDGE_THRESHOLD = 20;\nconst MOVED_THRESHOLD = 15;\nconst SWIPE_THRESHOLD = 50;\n\nfunction getDistance(a: Touch, b?: Touch) {\n if (!b) return 0;\n return Math.sqrt((b.pageX - a.pageX) ** 2 + (b.pageY - a.pageY) ** 2);\n}\n\nfunction getTouchCenter(a: Touch, b: Touch) {\n return {\n x: (a.pageX + b.pageX) / 2,\n y: (a.pageY + b.pageY) / 2,\n };\n}\n\nlet lastClickTime = 0;\n\nexport function captureEvents(element: HTMLElement, options: CaptureOptions) {\n let captureEvent: MouseEvent | RealTouchEvent | undefined;\n let hasMoved = false;\n let hasSwiped = false;\n let initialDistance = 0;\n let initialTouchCenter = { x: window.innerWidth / 2, y: window.innerHeight / 2 };\n let initialSwipeAxis: TSwipeAxis | undefined;\n\n function onCapture(e: MouseEvent | RealTouchEvent) {\n if (options.excludedClosestSelector && (\n (e.target as HTMLElement).matches(options.excludedClosestSelector)\n || (e.target as HTMLElement).closest(options.excludedClosestSelector)\n )) {\n return;\n }\n\n captureEvent = e;\n\n if (e.type === 'mousedown') {\n if (options.onDrag) {\n e.preventDefault();\n }\n\n document.addEventListener('mousemove', onMove);\n document.addEventListener('mouseup', onRelease);\n } else if (e.type === 'touchstart') {\n // We need to always listen on `touchstart` target:\n // https://stackoverflow.com/questions/33298828/touch-move-event-dont-fire-after-touch-start-target-is-removed\n const target = e.target as HTMLElement;\n target.addEventListener('touchmove', onMove, { passive: true });\n target.addEventListener('touchend', onRelease);\n target.addEventListener('touchcancel', onRelease);\n\n if ('touches' in e) {\n if (e.pageX === undefined) {\n e.pageX = e.touches[0].pageX;\n }\n\n if (e.pageY === undefined) {\n e.pageY = e.touches[0].pageY;\n }\n\n if (e.touches.length === 2) {\n initialDistance = getDistance(e.touches[0], e.touches[1]);\n initialTouchCenter = getTouchCenter(e.touches[0], e.touches[1]);\n }\n }\n }\n\n if (options.withCursor) {\n document.body.classList.add('cursor-grabbing');\n }\n\n if (options.onCapture) {\n options.onCapture(e);\n }\n }\n\n function onRelease(e?: MouseEvent | TouchEvent) {\n if (captureEvent) {\n if (options.withCursor) {\n document.body.classList.remove('cursor-grabbing');\n }\n\n document.removeEventListener('mouseup', onRelease);\n document.removeEventListener('mousemove', onMove);\n (captureEvent.target as HTMLElement).removeEventListener('touchcancel', onRelease);\n (captureEvent.target as HTMLElement).removeEventListener('touchend', onRelease);\n (captureEvent.target as HTMLElement).removeEventListener('touchmove', onMove);\n\n if (IS_IOS && options.selectorToPreventScroll) {\n Array.from(document.querySelectorAll(options.selectorToPreventScroll)).forEach((scrollable) => {\n scrollable.style.overflow = '';\n });\n }\n\n if (e) {\n if (hasMoved) {\n if (options.onRelease) {\n options.onRelease(e);\n }\n } else if (e.type === 'mouseup') {\n if (options.onDoubleClick && Date.now() - lastClickTime < 300) {\n options.onDoubleClick(e, {\n centerX: captureEvent!.pageX!,\n centerY: captureEvent!.pageY!,\n });\n } else if (options.onClick && (!('button' in e) || e.button === 0)) {\n options.onClick(e);\n }\n lastClickTime = Date.now();\n }\n }\n }\n\n hasMoved = false;\n hasSwiped = false;\n initialDistance = 0;\n initialSwipeAxis = undefined;\n initialTouchCenter = { x: window.innerWidth / 2, y: window.innerHeight / 2 };\n captureEvent = undefined;\n }\n\n function onMove(e: MouseEvent | RealTouchEvent) {\n if (captureEvent) {\n if (e.type === 'touchmove' && ('touches' in e)) {\n if (e.pageX === undefined) {\n e.pageX = e.touches[0].pageX;\n }\n\n if (e.pageY === undefined) {\n e.pageY = e.touches[0].pageY;\n }\n\n if (options.onZoom && initialDistance > 0 && e.touches.length === 2) {\n const endDistance = getDistance(e.touches[0], e.touches[1]);\n const touchCenter = getTouchCenter(e.touches[0], e.touches[1]);\n const dragOffsetX = touchCenter.x - initialTouchCenter.x;\n const dragOffsetY = touchCenter.y - initialTouchCenter.y;\n const zoomFactor = endDistance / initialDistance;\n options.onZoom(e, {\n zoomFactor,\n initialCenterX: initialTouchCenter.x,\n initialCenterY: initialTouchCenter.y,\n dragOffsetX,\n dragOffsetY,\n currentCenterX: touchCenter.x,\n currentCenterY: touchCenter.y,\n });\n if (zoomFactor !== 1) hasMoved = true;\n }\n }\n\n const dragOffsetX = e.pageX! - captureEvent.pageX!;\n const dragOffsetY = e.pageY! - captureEvent.pageY!;\n\n if (Math.abs(dragOffsetX) >= MOVED_THRESHOLD || Math.abs(dragOffsetY) >= MOVED_THRESHOLD) {\n hasMoved = true;\n }\n\n let shouldPreventScroll = false;\n\n if (options.onDrag) {\n options.onDrag(e, captureEvent, { dragOffsetX, dragOffsetY });\n shouldPreventScroll = true;\n }\n\n if (options.onSwipe && !hasSwiped) {\n hasSwiped = onSwipe(e, dragOffsetX, dragOffsetY);\n shouldPreventScroll = hasSwiped;\n }\n\n if (IS_IOS && shouldPreventScroll && options.selectorToPreventScroll) {\n Array.from(document.querySelectorAll(options.selectorToPreventScroll)).forEach((scrollable) => {\n scrollable.style.overflow = 'hidden';\n });\n }\n }\n }\n\n function onSwipe(e: MouseEvent | RealTouchEvent, dragOffsetX: number, dragOffsetY: number) {\n // Avoid conflicts with swipe-to-back gestures\n if (IS_IOS) {\n const x = (e as RealTouchEvent).touches[0].pageX;\n if (x <= IOS_SCREEN_EDGE_THRESHOLD || x >= window.innerWidth - IOS_SCREEN_EDGE_THRESHOLD) {\n return false;\n }\n }\n\n const xAbs = Math.abs(dragOffsetX);\n const yAbs = Math.abs(dragOffsetY);\n\n if (dragOffsetX && dragOffsetY) {\n const ratio = Math.max(xAbs, yAbs) / Math.min(xAbs, yAbs);\n // Diagonal swipe\n if (ratio < 2) {\n return false;\n }\n }\n\n let axis: TSwipeAxis | undefined;\n if (xAbs >= SWIPE_THRESHOLD) {\n axis = 'x';\n } else if (yAbs >= SWIPE_THRESHOLD) {\n axis = 'y';\n }\n\n if (!axis) {\n return false;\n }\n\n if (!initialSwipeAxis) {\n initialSwipeAxis = axis;\n } else if (initialSwipeAxis !== axis) {\n // Prevent horizontal swipe after vertical to prioritize scroll\n return false;\n }\n\n return processSwipe(e, axis, dragOffsetX, dragOffsetY, options.onSwipe!);\n }\n\n element.addEventListener('mousedown', onCapture);\n element.addEventListener('touchstart', onCapture, { passive: !options.isNotPassive });\n\n return () => {\n onRelease();\n\n element.removeEventListener('touchstart', onCapture);\n element.removeEventListener('mousedown', onCapture);\n };\n}\n\nfunction processSwipe(\n e: Event,\n currentSwipeAxis: TSwipeAxis,\n dragOffsetX: number,\n dragOffsetY: number,\n onSwipe: (e: Event, direction: SwipeDirection) => boolean,\n) {\n if (currentSwipeAxis === 'x') {\n if (dragOffsetX < 0) {\n return onSwipe(e, SwipeDirection.Left);\n } else {\n return onSwipe(e, SwipeDirection.Right);\n }\n } else if (currentSwipeAxis === 'y') {\n if (dragOffsetY < 0) {\n return onSwipe(e, SwipeDirection.Up);\n } else {\n return onSwipe(e, SwipeDirection.Down);\n }\n }\n\n return false;\n}\n","// Sometimes event is fired earlier than animation completes\nconst ANIMATION_END_DELAY = 50;\n\nexport function waitForTransitionEnd(node: Node, handler: NoneToVoidFunction, propertyName?: string) {\n waitForEndEvent('transitionend', node, handler, propertyName);\n}\n\nexport function waitForAnimationEnd(node: Node, handler: NoneToVoidFunction, animationName?: string) {\n waitForEndEvent('animationend', node, handler, animationName);\n}\n\nfunction waitForEndEvent(\n eventType: 'transitionend' | 'animationend',\n node: Node,\n handler: NoneToVoidFunction,\n detailedName?: string,\n) {\n let isHandled = false;\n\n node.addEventListener(eventType, function handleAnimationEnd(e: TransitionEvent | AnimationEvent) {\n if (isHandled || e.target !== e.currentTarget) {\n return;\n }\n\n if (detailedName && (\n (e instanceof TransitionEvent && e.propertyName === detailedName)\n || (e instanceof AnimationEvent && e.animationName === detailedName)\n )) {\n return;\n }\n\n isHandled = true;\n\n node.removeEventListener(eventType, handleAnimationEnd as EventListener);\n\n setTimeout(() => {\n handler();\n }, ANIMATION_END_DELAY);\n } as EventListener);\n}\n","export default function cycleRestrict(length: number, index: number) {\n return index - Math.floor(index / length) * length;\n}\n","import { getGlobal } from '../global';\n\nimport { FocusDirection } from '../types';\n\nimport {\n ANIMATION_LEVEL_MIN,\n FAST_SMOOTH_MAX_DISTANCE, FAST_SMOOTH_MAX_DURATION, FAST_SMOOTH_MIN_DURATION,\n FAST_SMOOTH_SHORT_TRANSITION_MAX_DISTANCE,\n} from '../config';\nimport { IS_ANDROID } from './environment';\nimport { dispatchHeavyAnimationEvent } from '../hooks/useHeavyAnimationCheck';\nimport { animateSingle } from './animation';\nimport { fastRaf } from './schedulers';\n\nlet isAnimating = false;\n\nexport default function fastSmoothScroll(\n container: HTMLElement,\n element: HTMLElement,\n position: ScrollLogicalPosition | 'centerOrTop',\n margin = 0,\n maxDistance = FAST_SMOOTH_MAX_DISTANCE,\n forceDirection?: FocusDirection,\n forceDuration?: number,\n forceNormalContainerHeight?: boolean,\n) {\n const scrollFrom = calculateScrollFrom(container, element, maxDistance, forceDirection);\n\n if (forceDirection === FocusDirection.Static) {\n scrollWithJs(container, element, scrollFrom, position, margin, 0);\n return;\n }\n\n if (getGlobal().settings.byKey.animationLevel === ANIMATION_LEVEL_MIN) {\n forceDuration = 0;\n }\n\n scrollWithJs(container, element, scrollFrom, position, margin, forceDuration, forceNormalContainerHeight);\n}\n\nexport function isAnimatingScroll() {\n return isAnimating;\n}\n\nfunction calculateScrollFrom(\n container: HTMLElement,\n element: HTMLElement,\n maxDistance = FAST_SMOOTH_MAX_DISTANCE,\n forceDirection?: FocusDirection,\n) {\n const { offsetTop: elementTop } = element;\n const { scrollTop } = container;\n\n if (forceDirection === undefined) {\n const offset = elementTop - container.scrollTop;\n\n if (offset < -maxDistance) {\n return scrollTop + (offset + maxDistance);\n } else if (offset > maxDistance) {\n return scrollTop + (offset - maxDistance);\n }\n } else if (forceDirection === FocusDirection.Up) {\n return elementTop + maxDistance;\n } else if (forceDirection === FocusDirection.Down) {\n return Math.max(0, elementTop - maxDistance);\n }\n\n return scrollTop;\n}\n\nfunction scrollWithJs(\n container: HTMLElement,\n element: HTMLElement,\n scrollFrom: number,\n position: ScrollLogicalPosition | 'centerOrTop',\n margin = 0,\n forceDuration?: number,\n forceNormalContainerHeight?: boolean,\n) {\n const { offsetTop: elementTop, offsetHeight: elementHeight } = element;\n const { scrollTop: currentScrollTop, offsetHeight: containerHeight, scrollHeight } = container;\n const targetContainerHeight = forceNormalContainerHeight && container.dataset.normalHeight\n ? Number(container.dataset.normalHeight)\n : containerHeight;\n\n if (currentScrollTop !== scrollFrom) {\n container.scrollTop = scrollFrom;\n }\n\n let path!: number;\n\n switch (position) {\n case 'start':\n path = (elementTop - margin) - scrollFrom + (IS_ANDROID ? 1 : 0);\n break;\n case 'end':\n path = (elementTop + elementHeight + margin) - (scrollFrom + targetContainerHeight);\n break;\n // 'nearest' is not supported yet\n case 'nearest':\n case 'center':\n case 'centerOrTop':\n path = elementHeight < targetContainerHeight\n ? (elementTop + elementHeight / 2) - (scrollFrom + targetContainerHeight / 2)\n : (elementTop - margin) - scrollFrom;\n break;\n }\n\n if (path < 0) {\n const remainingPath = -scrollFrom;\n path = Math.max(path, remainingPath);\n } else if (path > 0) {\n const remainingPath = scrollHeight - (scrollFrom + targetContainerHeight);\n path = Math.min(path, remainingPath);\n }\n\n if (path === 0) {\n return;\n }\n\n const target = scrollFrom + path;\n\n if (forceDuration === 0) {\n container.scrollTop = target;\n return;\n }\n\n isAnimating = true;\n\n const absPath = Math.abs(path);\n const transition = absPath < FAST_SMOOTH_SHORT_TRANSITION_MAX_DISTANCE ? shortTransition : longTransition;\n const duration = forceDuration || (\n FAST_SMOOTH_MIN_DURATION\n + (absPath / FAST_SMOOTH_MAX_DISTANCE) * (FAST_SMOOTH_MAX_DURATION - FAST_SMOOTH_MIN_DURATION)\n );\n const startAt = Date.now();\n const onHeavyAnimationStop = dispatchHeavyAnimationEvent();\n\n fastRaf(() => {\n animateSingle(() => {\n const t = Math.min((Date.now() - startAt) / duration, 1);\n const currentPath = path * (1 - transition(t));\n\n container.scrollTop = Math.round(target - currentPath);\n\n isAnimating = t < 1;\n\n if (!isAnimating) {\n onHeavyAnimationStop();\n }\n\n return isAnimating;\n });\n });\n}\n\nfunction longTransition(t: number) {\n return 1 - ((1 - t) ** 5);\n}\n\nfunction shortTransition(t: number) {\n return 1 - ((1 - t) ** 3.5);\n}\n","import { getGlobal } from '../global';\n\nimport { ANIMATION_LEVEL_MIN } from '../config';\nimport { animate } from './animation';\nimport { fastRaf } from './schedulers';\n\nconst DEFAULT_DURATION = 300;\n\nexport default function fastSmoothScrollHorizontal(container: HTMLElement, left: number, duration = DEFAULT_DURATION) {\n if (getGlobal().settings.byKey.animationLevel === ANIMATION_LEVEL_MIN) {\n duration = 0;\n }\n\n scrollWithJs(container, left, duration);\n}\n\nfunction scrollWithJs(container: HTMLElement, left: number, duration: number) {\n const isRtl = container.getAttribute('dir') === 'rtl';\n const { scrollLeft, offsetWidth: containerWidth, scrollWidth } = container;\n let path = left - scrollLeft;\n\n if (path < 0) {\n const remainingPath = -scrollLeft * (isRtl ? -1 : 1);\n path = Math.max(path, remainingPath);\n } else if (path > 0) {\n const remainingPath = scrollWidth - (scrollLeft + containerWidth);\n path = Math.min(path, remainingPath);\n }\n\n if (path === 0) {\n return;\n }\n\n const target = scrollLeft + path;\n\n if (duration === 0) {\n container.scrollLeft = target;\n return;\n }\n\n const startAt = Date.now();\n\n fastRaf(() => {\n animate(() => {\n const t = Math.min((Date.now() - startAt) / duration, 1);\n\n const currentPath = path * (1 - transition(t));\n container.scrollLeft = Math.round(target - currentPath);\n\n return t < 1;\n });\n });\n}\n\nfunction transition(t: number) {\n return 1 - ((1 - t) ** 3.5);\n}\n","import { IS_TOUCH_ENV } from './environment';\n\nexport default function focusEditableElement(element: HTMLElement, force?: boolean, forcePlaceCaretAtEnd?: boolean) {\n if (!force && element === document.activeElement) {\n return;\n }\n\n const selection = window.getSelection()!;\n const range = document.createRange();\n const lastChild = element.lastChild || element;\n\n if (!IS_TOUCH_ENV && !forcePlaceCaretAtEnd && (!lastChild || !lastChild.nodeValue)) {\n element.focus();\n return;\n }\n\n range.selectNodeContents(forcePlaceCaretAtEnd ? element : lastChild);\n // `false` means collapse to the end rather than the start\n range.collapse(false);\n selection.removeAllRanges();\n selection.addRange(range);\n}\n","export default function getKeyFromEvent(e: KeyboardEvent) {\n const key = 'key' in e ? e.key : e.code;\n\n return key.startsWith('Key') ? key.slice(3).toLowerCase() : key;\n}\n","const ELEMENT_NODE = 1;\n\nexport default function getMessageIdsForSelectedText() {\n const selection = window.getSelection();\n let selectedFragments = selection && selection.rangeCount ? selection.getRangeAt(0).cloneContents() : undefined;\n if (!selectedFragments || selectedFragments.childElementCount === 0) {\n return undefined;\n }\n\n const messageIds = Array.from(selectedFragments.children)\n .reduce((result, node) => {\n if (node.nodeType === ELEMENT_NODE && node.classList.contains('message-date-group')) {\n return Array.from(node.querySelectorAll('.Message'))\n .reduce((acc, messageEl) => acc.concat(Number((messageEl as HTMLElement).dataset.messageId)), result);\n } else if (node.nodeType === ELEMENT_NODE && node.classList.contains('Message')) {\n return result.concat(Number((node as HTMLElement).dataset.messageId));\n }\n\n return result;\n }, [] as number[]);\n\n // Cleanup a document fragment because it is playing media content in the background\n while (selectedFragments.firstChild) {\n selectedFragments.removeChild(selectedFragments.firstChild);\n }\n selectedFragments = undefined;\n\n return messageIds;\n}\n","export type MediaSessionHandlers = {\n play?: () => void;\n pause?: () => void;\n stop?: () => void;\n\n previoustrack?: () => void;\n nexttrack?: () => void;\n\n togglemicrophone?: () => void;\n togglecamera?: () => void;\n hangup?: () => void;\n\n seekbackward?: (details: MediaSessionActionDetails) => void;\n seekforward?: (details: MediaSessionActionDetails) => void;\n seekTo?: ((details: MediaSessionActionDetails) => void);\n};\n\ninterface MediaMetadataParameters {\n title?: string;\n artist?: string;\n album?: string;\n artwork?: MediaImage[];\n}\n\nconst DEFAULT_HANDLERS = {\n play: undefined,\n pause: undefined,\n seekbackward: undefined,\n seekforward: undefined,\n previoustrack: undefined,\n nexttrack: undefined,\n stop: undefined,\n seekTo: undefined,\n};\n\nexport function registerMediaSession(metadata?: MediaMetadata, handlers?: MediaSessionHandlers) {\n const { mediaSession } = window.navigator;\n if (mediaSession) {\n if (metadata) updateMetadata(metadata);\n if (handlers) setMediaSessionHandlers(handlers);\n } else {\n // eslint-disable-next-line no-console\n console.warn('MediaSession API not supported in this browser');\n }\n}\n\nexport function updateMetadata(metadata?: MediaMetadata) {\n const { mediaSession } = window.navigator;\n if (mediaSession) {\n // eslint-disable-next-line no-null/no-null\n mediaSession.metadata = metadata ?? null;\n }\n}\n\nexport function setMediaSessionHandlers(handlers: MediaSessionHandlers) {\n const { mediaSession } = window.navigator;\n if (mediaSession) {\n Object.entries({ ...DEFAULT_HANDLERS, ...handlers }).forEach(([key, handler]) => {\n try {\n // @ts-ignore API not standardized yet\n mediaSession.setActionHandler(key, handler);\n } catch (err) {\n // Handler not supported, ignoring\n }\n });\n }\n}\n\nexport function clearMediaSession() {\n const { mediaSession } = window.navigator;\n if (mediaSession) {\n // eslint-disable-next-line no-null/no-null\n mediaSession.metadata = null;\n setMediaSessionHandlers(DEFAULT_HANDLERS);\n if (mediaSession.playbackState) mediaSession.playbackState = 'none';\n mediaSession.setPositionState?.();\n }\n}\n\nexport function setPlaybackState(state: 'none' | 'paused' | 'playing' = 'none') {\n const { mediaSession } = window.navigator;\n if (mediaSession && mediaSession.playbackState) {\n mediaSession.playbackState = state;\n }\n}\n\nexport function setPositionState(state?: MediaPositionState) {\n if (!state || state.position === undefined || state.duration === undefined) return;\n state.position = Math.min(state.position, state.duration);\n\n const { mediaSession } = window.navigator;\n mediaSession?.setPositionState?.(state);\n}\n\nexport function setMicrophoneActive(active: boolean) {\n const { mediaSession } = window.navigator;\n mediaSession?.setMicrophoneActive?.(active);\n}\n\nexport function setCameraActive(active: boolean) {\n const { mediaSession } = window.navigator;\n mediaSession?.setCameraActive?.(active);\n}\n\nexport function buildMediaMetadata({\n title, artist, album, artwork,\n}: MediaMetadataParameters) {\n if ('MediaMetadata' in window) {\n return new window.MediaMetadata({\n title,\n artist,\n album,\n artwork,\n });\n }\n return undefined;\n}\n","import { ApiMessageEntity, ApiMessageEntityTypes, ApiFormattedText } from '../api/types';\nimport { IS_EMOJI_SUPPORTED } from './environment';\n\nconst ENTITY_CLASS_BY_NODE_NAME: Record = {\n B: ApiMessageEntityTypes.Bold,\n STRONG: ApiMessageEntityTypes.Bold,\n I: ApiMessageEntityTypes.Italic,\n EM: ApiMessageEntityTypes.Italic,\n U: ApiMessageEntityTypes.Underline,\n S: ApiMessageEntityTypes.Strike,\n STRIKE: ApiMessageEntityTypes.Strike,\n DEL: ApiMessageEntityTypes.Strike,\n CODE: ApiMessageEntityTypes.Code,\n PRE: ApiMessageEntityTypes.Pre,\n BLOCKQUOTE: ApiMessageEntityTypes.Blockquote,\n};\n\nconst MAX_TAG_DEEPNESS = 3;\n\nexport default function parseMessageInput(html: string): ApiFormattedText {\n const fragment = document.createElement('div');\n fragment.innerHTML = parseMarkdown(html);\n const text = fragment.innerText.trim().replace(/\\u200b+/g, '');\n let textIndex = 0;\n let recursionDeepness = 0;\n const entities: ApiMessageEntity[] = [];\n\n function addEntity(node: ChildNode) {\n const { index, entity } = getEntityDataFromNode(node, text, textIndex);\n\n if (entity) {\n textIndex = index;\n entities.push(entity);\n } else if (node.textContent) {\n textIndex += node.textContent.length;\n }\n\n if (node.hasChildNodes() && recursionDeepness <= MAX_TAG_DEEPNESS) {\n recursionDeepness += 1;\n Array.from(node.childNodes).forEach(addEntity);\n }\n }\n\n Array.from(fragment.childNodes).forEach((node) => {\n recursionDeepness = 1;\n addEntity(node);\n });\n\n return {\n text,\n entities: entities.length ? entities : undefined,\n };\n}\n\nfunction parseMarkdown(html: string) {\n let parsedHtml = html.slice(0);\n\n if (!IS_EMOJI_SUPPORTED) {\n // Emojis\n parsedHtml = parsedHtml.replace(/]+alt=\"([^\"]+)\"[^>]*>/gm, '$1');\n }\n\n // Strip redundant nbsp's\n parsedHtml = parsedHtml.replace(/ /g, ' ');\n\n // Replace

with newline (new line in Safari)\n parsedHtml = parsedHtml.replace(/
]*)?><\\/div>/g, '\\n');\n // Replace
with newline\n parsedHtml = parsedHtml.replace(/]*)?>/g, '\\n');\n\n // Strip redundant
tags\n parsedHtml = parsedHtml.replace(/<\\/div>(\\s*)
/g, '\\n');\n parsedHtml = parsedHtml.replace(/
/g, '\\n');\n parsedHtml = parsedHtml.replace(/<\\/div>/g, '');\n\n // Pre\n parsedHtml = parsedHtml.replace(/^`{3}(.*[\\n\\r][^]*?^)`{3}/gm, '
$1
');\n parsedHtml = parsedHtml.replace(/[`]{3}([^`]+)[`]{3}/g, '
$1
');\n\n // Code\n parsedHtml = parsedHtml.replace(/[`]{1}([^`\\n]+)[`]{1}/g, '$1');\n\n // Other simple markdown\n parsedHtml = parsedHtml.replace(\n /(^|\\s)(?!)(\\s|$)/g,\n '$1$2$3',\n );\n parsedHtml = parsedHtml.replace(\n /(^|\\s)(?!)(\\s|$)/g,\n '$1$2$3',\n );\n parsedHtml = parsedHtml.replace(\n /(^|\\s)(?!)(\\s|$)/g,\n '$1$2$3',\n );\n parsedHtml = parsedHtml.replace(\n /(^|\\s)(?!)(\\s|$)/g,\n `$1$2$3`,\n );\n\n return parsedHtml;\n}\n\nfunction getEntityDataFromNode(\n node: ChildNode,\n rawText: string,\n textIndex: number,\n): { index: number; entity?: ApiMessageEntity } {\n const type = getEntityTypeFromNode(node);\n if (!type || !node.textContent) {\n return {\n index: textIndex,\n entity: undefined,\n };\n }\n\n const rawIndex = rawText.indexOf(node.textContent, textIndex);\n // In some cases, last text entity ends with a newline (which gets trimmed from `rawText`).\n // In this case, `rawIndex` would return `-1`, so we use `textIndex` instead.\n const index = rawIndex >= 0 ? rawIndex : textIndex;\n const offset = rawText.substring(0, index).length;\n const { length } = rawText.substring(index, index + node.textContent.length);\n\n let url: string | undefined;\n let userId: string | undefined;\n if (type === ApiMessageEntityTypes.TextUrl) {\n url = (node as HTMLAnchorElement).href;\n }\n if (type === ApiMessageEntityTypes.MentionName) {\n userId = (node as HTMLAnchorElement).dataset.userId;\n }\n\n return {\n index,\n entity: {\n type,\n offset,\n length,\n ...(url && { url }),\n ...(userId && { userId }),\n },\n };\n}\n\nfunction getEntityTypeFromNode(node: ChildNode) {\n if (ENTITY_CLASS_BY_NODE_NAME[node.nodeName]) {\n return ENTITY_CLASS_BY_NODE_NAME[node.nodeName];\n }\n\n if (node.nodeName === 'A') {\n const anchor = node as HTMLAnchorElement;\n if (anchor.dataset.entityType === ApiMessageEntityTypes.MentionName) {\n return ApiMessageEntityTypes.MentionName;\n }\n if (anchor.dataset.entityType === ApiMessageEntityTypes.Url) {\n return ApiMessageEntityTypes.Url;\n }\n if (anchor.href.startsWith('mailto:')) {\n return ApiMessageEntityTypes.Email;\n }\n if (anchor.href.startsWith('tel:')) {\n return ApiMessageEntityTypes.Phone;\n }\n if (anchor.href !== anchor.textContent) {\n return ApiMessageEntityTypes.TextUrl;\n }\n\n return ApiMessageEntityTypes.Url;\n }\n\n if (node.nodeName === 'SPAN') {\n return (node as HTMLElement).dataset.entityType;\n }\n\n return undefined;\n}\n","/*\n * Thanks to Ace Monkey for this mind-blowing patch.\n */\n\nexport function patchSafariProgressiveAudio(audioEl: HTMLAudioElement) {\n if (audioEl.dataset.patchedForSafari) {\n return;\n }\n\n audioEl.addEventListener('play', () => {\n const t = audioEl.currentTime;\n\n audioEl.dataset.patchForSafariInProgress = 'true';\n function onProgress() {\n if (!audioEl.buffered.length) {\n return;\n }\n audioEl.currentTime = audioEl.duration - 1;\n audioEl.addEventListener('progress', () => {\n delete audioEl.dataset.patchForSafariInProgress;\n audioEl.currentTime = t;\n if (audioEl.paused && !audioEl.dataset.preventPlayAfterPatch) {\n audioEl.play();\n }\n }, { once: true });\n\n audioEl.removeEventListener('progress', onProgress);\n }\n\n audioEl.addEventListener('progress', onProgress);\n }, { once: true });\n\n audioEl.dataset.patchedForSafari = 'true';\n}\n\nexport function isSafariPatchInProgress(audioEl: HTMLAudioElement) {\n return Boolean(audioEl.dataset.patchForSafariInProgress);\n}\n","import React from '../lib/teact/teact';\n\nconst stopEvent = (e: React.UIEvent | Event) => {\n e.stopPropagation();\n e.preventDefault();\n};\n\nexport default stopEvent;\n","let fileSelector: HTMLInputElement;\n\nexport function openSystemFilesDialog(accept = '*', callback: (e: Event) => void, noMultiple = false) {\n if (!fileSelector) {\n fileSelector = document.createElement('input');\n fileSelector.setAttribute('type', 'file');\n }\n\n fileSelector.setAttribute('accept', accept);\n\n if (noMultiple) {\n fileSelector.removeAttribute('multiple');\n } else {\n fileSelector.setAttribute('multiple', 'multiple');\n }\n\n // eslint-disable-next-line no-null/no-null\n fileSelector.onchange = null;\n fileSelector.value = '';\n fileSelector.onchange = callback;\n\n fileSelector.click();\n}\n"],"names":["memo","sticker","effect","isOwn","soundId","size","observeIntersection","lastSyncTime","forceLoadPreview","messageId","chatId","activeEmojiInteractions","markAnimationLoaded","isAnimationLoaded","ref","width","style","handleClick","playKey","useAnimatedEmoji","undefined","emoji","localMediaHash","id","isIntersecting","useIsIntersecting","thumbDataUri","thumbnail","dataUri","previewBlobUrl","useMedia","ApiMediaFormat","transitionClassNames","useMediaTransition","mediaData","isMediaLoaded","Boolean","className","buildClassName","LIKE_STICKER_ID","onClick","src","alt","key","animationData","quality","play","forceOnHeavyAnimation","noLoop","onLoad","renderWaveform","canvas","spikes","progress","peak","fillStyle","progressFillStyle","length","height","ctx","getContext","scale","forEach","item","i","globalAlpha","spikeHeight","Math","max","x","y","radius","beginPath","moveTo","arcTo","closePath","roundedRectangle","fill","decodeWaveform","encoded5bit","bitsCount","valuesCount","floor","result","Array","bitsData","l","byteIndex","bitShift","value","lastByteIndex","lastBitShift","lastValue","interpolateArray","data","fitCount","newData","springFactor","leftFiller","rightFiller","idx","val","MIN_SPIKES","IS_SINGLE_COLUMN_LAYOUT","MAX_SPIKES","renderSeekline","playProgress","bufferedRanges","seekerRef","map","start","end","theme","message","senderTitle","uploadProgress","origin","date","isSelectable","isSelected","isDownloading","onPlay","onReadMedia","onCancelUpload","onDateClick","cancelMessageMediaDownload","downloadMessageMedia","getActions","content","audio","voice","video","isMediaUnread","isVoice","isSeeking","useRef","lang","useLang","isRtl","isActivated","setIsActivated","useState","shouldLoad","coverHash","getMessageMediaHash","coverBlobUrl","getMessageMediaFormat","loadProgress","downloadProgress","useMediaWithLoadProgress","handleForcePlay","useCallback","handleTrackChange","isBuffered","bufferingHandlers","checkBuffering","useBuffering","isPlaying","playPause","setCurrentTime","duration","useAudioPlayer","makeTrackId","getMediaDuration","isMessageLocal","isOwnMessage","waveformCanvasRef","canvasRef","useMemo","waveform","min","durationFactor","spikesCount","round","Uint8Array","useLayoutEffect","current","useWaveformCanvas","withSeekline","useEffect","isLoadingForPlaying","isUploading","isTransferring","transferProgress","getMediaTransferState","shouldRender","shouldRenderSpinner","spinnerClassNames","useShowTransition","shouldRenderCross","handleButtonClick","setAudioPlayerOrigin","handleDownloadClick","handleSeek","e","left","getBoundingClientRect","clientX","MouseEvent","targetTouches","stopPropagation","handleStartSeek","button","handleStopSeek","handleDateClick","renderFirstLine","title","fileName","captureEvents","onCapture","onRelease","onDrag","fullClassName","AudioOrigin","buttonClassNames","push","contentClassName","renderWithTitle","dir","renderText","Link","formatPastTimeShort","formatMediaDuration","performer","renderSecondLine","Button","ripple","color","join","ariaLabel","backgroundImage","ProgressSpinner","transparent","noCross","showProgress","showSeekline","getTranslation","getFileSizeString","formatMediaDateTime","renderAudio","draggable","renderVoice","withGlobal","global","chatOrUserId","countryList","phoneCodes","phoneCodeList","chat","selectChat","user","isUserId","selectUser","isMuted","selectIsChatMuted","selectNotifySettings","selectNotifyExceptions","canInviteUsers","isChatChannel","isUserRightBanned","getHasAdminRight","forceShowSelf","loadFullUser","showNotification","updateChatMutedState","userId","fullInfo","username","phoneNumber","isSelf","handleNotificationChange","isRestricted","copy","text","entity","copyTextToClipboard","formattedNumber","formatPhoneNumberWithCode","link","getChatLink","description","bio","getChatDescription","icon","multiline","narrow","isStatic","label","checked","inactive","isPrivateChat","isChatWithSelf","selectIsChatWithSelf","getPrivateChatUserId","isBot","isUserBot","isSupport","canDeleteForAll","contactName","getUserFirstOrLastName","isChannel","isBasicGroup","isChatBasicGroup","isSuperGroup","isChatSuperGroup","currentUserId","isOpen","onClose","onCloseAnimationEnd","leaveChannel","deleteHistory","deleteChannel","deleteChatUser","blockContact","chatTitle","getChatTitle","handleDeleteMessageForAll","shouldDeleteForAll","handleDeleteAndStop","contactId","accessHash","handleDeleteChat","isCreator","handleLeaveChat","header","isSavedMessages","isText","smaller","canAutoLoad","autoLoadFileMaxSizeMb","withDate","datetime","sender","onMediaClick","dispatch","document","timestamp","extension","getDocumentExtension","wasIntersected","markIntersected","useFlag","isLoadAllowed","setIsLoadAllowed","shouldDownload","documentHash","isLoaded","hasPreview","getDocumentHasPreview","getMessageMediaThumbDataUri","localBlobUrl","previewData","withMediaViewer","mediaType","name","thumbnailDataUri","actionIcon","isMessageDocumentVideo","elementRef","shouldSpinnerRender","getColorFromExtension","sizeString","getDocumentThumbnailDimensions","onlineCount","selectChatOnlineCount","areMessagesLoaded","selectChatMessages","typingStatus","avatarSize","status","withDots","withUsername","withFullInfo","withUpdatingStatus","withChatType","noRtl","loadFullChat","openMediaViewer","isMin","handleAvatarViewerOpen","hasPhoto","avatarOwnerId","MediaViewerOrigin","isVerified","getChatTypeString","handle","groupStatus","chatTypeString","membersCount","getGroupStatus","onlineStatus","renderStatusOrTyping","outgoingStatus","idPrefix","isProtected","mediaBlobUrl","getMessageVideo","getMessageHtmlId","decoding","onContextMenu","stopEvent","isGif","Keys","activeKey","DEFAULT_TEXT","itemIds","selectedIds","filterValue","filterPlaceholder","notFoundText","searchInputId","isLoading","noScrollRestore","onSelectedIdsChange","onFilterChange","onLoadMore","inputRef","shouldMinimize","setTimeout","requestAnimationFrame","focus","handleItemClick","newSelectedIds","includes","splice","indexOf","handleFilterChange","currentTarget","viewportIds","getMore","useInfiniteScroll","isMinimized","canClose","clickArg","onChange","placeholder","items","iconElement","titleText","serverTimeOffset","userStatus","selectUserStatus","noStatusOrTyping","fullName","getUserFullName","isUserOnline","getUserStatus","photo","isFirstPhoto","isDeleted","isDeletedUser","isRepliesChat","isChatWithRepliesBot","getMediaHash","forceAvatar","hash","getChatAvatarHash","photoBlobUrl","avatarMediaHash","avatarBlobUrl","imageSrc","userFullName","getFirstLetters","Spinner","getUserColorKey","connectionState","animationLevel","settings","byKey","photos","slideAnimation","currentPhotoIndex","setCurrentPhotoIndex","isFirst","isLast","profile","currentIndex","slice","mediaLoader","usePhotosPreload","handleProfilePhotoClick","profilePhotoIndex","selectPreviousMedia","selectNextMedia","element","querySelector","selectorToPreventScroll","onSwipe","IS_TOUCH_ENV","direction","SwipeDirection","isVerifiedIconShown","_","renderPhotoTabs","Transition","renderPhoto","type","VerifiedIcon","reaction","staticIconId","getGlobal","availableReactions","find","staticIcon","noAnimate","noContextMenu","onFaveClick","onUnfaveClick","stickerSelector","shouldPlay","lottieData","isLottie","isLottieLoaded","markLoaded","unmarkLoaded","canLottiePlay","isVideo","IS_WEBM_SUPPORTED","videoBlobUrl","canVideoPlay","previewTransitionClassNames","isContextMenuOpen","contextMenuPosition","handleBeforeContextMenu","handleContextMenu","handleContextMenuClose","handleContextMenuHide","useContextMenuHandlers","getTriggerElement","getRootElement","closest","getMenuElement","positionX","positionY","transformOriginX","transformOriginY","menuStyle","useContextMenuPosition","safePlay","pause","handleUnfaveClick","preventDefault","handleContextUnfave","handleContextFave","handleSendQuiet","handleSendScheduled","onMouseDown","preventMessageInputBlurWithBubbling","autoPlay","loop","playsInline","muted","isLowPriority","autoClose","props","StickerSetModal","useModuleLoader","Bundles","typingUser","typingUserName","action","replace","trim","VERIFIED_ICON","__html","dangerouslySetInnerHTML","onMessageClick","linkData","getMessageWebPage","getFirstLinkInMessage","url","domain","siteName","formattedDescription","getMessageText","renderMessageSummary","handleMessageClick","displayUrl","truncatedDescription","trimText","MEDIA_VIEWER_MEDIA_QUERY","REM","parseInt","getComputedStyle","documentElement","fontSize","ROUND_VIDEO_DIMENSIONS_PX","AVATAR_FULL_DIMENSIONS","DEFAULT_MEDIA_DIMENSIONS","cachedMaxWidthOwn","cachedMaxWidth","cachedMaxWidthNoAvatar","getAvailableWidth","fromOwnMessage","isForwarded","isWebPagePhoto","noAvatars","extraPaddingRem","availableWidthRem","regularMaxWidth","windowWidth","windowSize","getMaxMessageWidthRem","calculateDimensionsForMessageMedia","aspectRatio","availableWidth","availableHeight","getAvailableHeight","mediaWidth","calculateDimensions","getMediaViewerAvailableDimensions","withFooter","mql","window","matchMedia","windowHeight","occupiedHeightRem","matches","calculateInlineImageDimensions","getPhotoInlineDimensions","calculateVideoDimensions","getVideoDimensions","getPictogramDimensions","getStickerDimensions","baseWidth","STICKER_SIZE_INLINE_MOBILE_FACTOR","STICKER_SIZE_INLINE_DESKTOP_FACTOR","calculatedHeight","calculateMediaViewerDimensions","mediaHeight","calculatedWidth","WIDTH","large","medium","small","localEffect","interactWithAnimatedEmoji","sendEmojiInteraction","sendWatchingEmojiInteraction","hasEffect","audioRef","soundMediaData","setPlayKey","String","random","interactions","startedInteractions","sendInteractionBunch","remove","Audio","addEventListener","once","container","startSize","isReversed","performance","now","interactionMessageId","emoticon","selectLocalAnimatedEmojiEffectByName","ChatFolderModal","ChatAnimationTypes","isPinned","isShown","unreadCount","hasUnreadMark","ShowTransition","isCustom","unreadMentionsCount","formatIntegerCompact","isActive","lastMessage","senderId","replyToMessageId","isOutgoing","lastMessageSender","lastMessageAction","getMessageAction","actionTargetMessage","selectChatMessage","targetUserIds","actionTargetUserIds","targetChatId","actionTargetChatId","privateChatUserId","currentChatId","threadId","currentThreadId","messageListType","selectCurrentMessageList","MAIN_THREAD_ID","draft","selectDraft","canScrollDown","canChangeFolder","chatFolders","orderedIds","lastMessageOutgoingStatus","selectOutgoingStatus","folderId","orderDiff","animationType","openChat","focusLastMessage","isDeleteModalOpen","openDeleteModal","closeDeleteModal","isChatFolderModalOpen","openChatFolderModal","closeChatFolderModal","shouldRenderDeleteModal","markRenderDeleteModal","unmarkRenderDeleteModal","shouldRenderChatFolderModal","markRenderChatFolderModal","unmarkRenderChatFolderModal","isAction","isActionMessage","useEnsureMessage","mediaThumbnail","getMessageSticker","isRoundVideo","getMessageRoundVideo","actionTargetUsers","usersById","users","byId","filter","Opacity","opacity","fastRaf","classList","add","Move","transform","ANIMATION_END_DELAY","shouldReplaceHistory","contextActions","useChatContextActions","handleDelete","handleChatFolderChange","ListItem","Avatar","isCallActive","isCallNotEmpty","LastMessageMeta","TypingStatus","isChat","renderActionMessageText","asTextWithSpoilers","senderName","getMessageSenderName","blobUrl","renderSummary","renderLastMessageOrTyping","DeleteChatModal","folderType","chatFolder","selectChatFolder","animatedEmoji","selectAnimatedEmoji","foldersDispatch","onScreenSelect","handleEditFolder","payload","SettingsScreens","AnimatedEmoji","fluid","pill","openNextChat","resolvedFolderId","ALL_FOLDER_ID","ARCHIVED_FOLDER_ID","useFolderManagerForOrderedIds","orderById","reduce","acc","prevOrderById","usePrevious","orderDiffById","mapValues","order","CHAT_LIST_SLICE","handleKeyDown","removeEventListener","IS_PWA","IS_MAC_OS","metaKey","ctrlKey","code","startsWith","digit","match","position","Number","altKey","targetIndexDelta","getAnimationType","orderDiffs","Object","values","numberOfUp","diff","numberOfDown","None","Infinity","useChatAnimationType","InfiniteScroll","preloadBackwards","withAbsolutePositioning","maxHeight","CHAT_HEIGHT_PX","viewportOffset","pinnedCount","getPinnedChatsCount","teactOrderKey","renderChats","Loading","getSenderName","chatsById","getSenderTitle","isChatGroup","CustomSend","isQuick","onFileSelect","isHovered","markHovered","unmarkHovered","onDrop","onDragEnter","onDragLeave","relatedTarget","toTarget","DropAreaState","withQuick","onHide","hideTimeoutRef","prevWithQuick","captureEscKeyListener","handleFilesDrop","async","dataTransfer","dt","files","folderFiles","getFilesFromDataTransferItems","concat","from","handleQuickFilesDrop","handleDragLeave","target","fromTarget","Portal","containerId","onDragOver","clearTimeout","EmojiTooltip","MAX_INPUT_HEIGHT","messageSendKeyCombo","replyingToId","selectReplyingToId","noTabCapture","isPollModalOpen","payment","isPaymentModalOpen","isAttachmentModalInput","editableInputId","html","forcedPlaceholder","canAutoFocus","shouldSuppressFocus","shouldSuppressTextFormatter","onUpdate","onSuppressedFocus","onSend","editLastMessage","replyToNextMessage","cloneRef","isContextMenuOpenRef","isTextFormatterOpen","openTextFormatter","closeTextFormatter","textFormatterAnchorPosition","setTextFormatterAnchorPosition","selectedRange","setSelectedRange","sendMessageAction","useSendMessageAction","updateInputHeight","useLayoutEffectWithPrevDeps","prevHtml","innerHTML","focusInput","isHeavyAnimating","focusEditableElement","handleCloseTextFormatter","selection","getSelection","removeAllRanges","empty","clearSelection","checkSelection","IS_IOS","rangeCount","selectionRange","getRangeAt","selectedText","toString","isSelectionInsideInput","EDITABLE_INPUT_ID","parseEmojiOnlyString","START_TO_END","processSelection","selectionRect","inputRect","top","willSend","input","clone","currentHeight","newHeight","scrollHeight","transitionDuration","log","abs","exec","toggle","captureFirstTab","debounce","captureKeyboardListeners","onTab","suppressFocus","blur","contentEditable","textContent","IS_EMOJI_SUPPORTED","onKeyDown","shiftKey","handleKeyUp","IS_ANDROID","event","closeContextMenuMouseListener","closeContextMenuKeyListener","handleMouseUp","onTouchCancel","anchorPosition","TEXT_FORMAT_BY_TAG_NAME","B","STRONG","I","EM","U","DEL","CODE","SPAN","fragmentEl","createElement","containerRef","linkUrlInputRef","isLinkControlOpen","openLinkControl","closeLinkControl","linkUrl","setLinkUrl","isEditingLink","setIsEditingLink","inputClassName","setInputClassName","selectedTextFormats","setSelectedTextFormats","useVirtualBackdrop","selectedFormats","parentElement","commonAncestorContainer","textFormat","tagName","restoreSelection","addRange","updateSelectedRange","getSelectedText","innerText","getSelectedElement","updateInputStyles","offsetWidth","scrollWidth","scrollLeft","getFormatButtonClassName","keys","some","fKey","monospace","strikethrough","handleSpoilerText","spoiler","dataset","entityType","ApiMessageEntityTypes","replaceWith","execCommand","handleBoldText","bold","handleItalicText","italic","handleUnderlineText","underline","handleStrikethroughText","handleMonospaceText","handleLinkUrlConfirm","formattedLinkUrl","encodeURI","ensureProtocol","href","handler","k","b","u","m","s","p","getKeyFromEvent","linkUrlConfirmClassName","autoComplete","inputMode","onScroll","dataTransferItems","traverseFileTreePromise","entry","Promise","resolve","File","isFile","itemFile","getAsFile","file","isDirectory","createReader","readEntries","entries","entriesPromises","all","kind","webkitGetAsEntry","RE_BR","RE_SPACE","RE_CLEAN_HTML","RE_EXTRA_NEW_LINE","prepareForRegExp","inputId","parentNode","iterations","cache","WeakMap","memoized","fn","cached","get","args","areSortedArraysEqual","lastArgs","lastResult","set","emojiDataPromise","emojiRawData","emojiData","RE_EMOJI_SEARCH","prepareRecentEmojisMemo","recentEmojiIds","limit","pickTruthy","MEMO_EMPTY_ARRAY","prepareLibraryMemo","baseEmojiKeywords","emojiKeywords","emojis","byNative","buildCollectionByKey","baseEmojisByKeyword","natives","emojisByKeyword","byKeyword","keywords","byName","names","searchInLibraryMemo","library","matched","matchedKeywords","keyword","sort","flatten","matchedNames","unique","useEmojiTooltip","isAllowed","htmlRef","onUpdateHtml","isDisabled","markIsOpen","unmarkIsOpen","setById","shouldForceInsertEmoji","setShouldForceInsertEmoji","filteredEmojis","setFilteredEmojis","ensureEmojiData","then","getEmojiCode","forceSend","endsWith","substr","insertEmoji","textEmoji","isForce","currentHtml","atIndex","lastIndexOf","messageInput","getElementById","native","isEmojiTooltipOpen","closeEmojiTooltip","default","uncompressEmoji","runThrottled","throttle","cb","RE_USERNAME_SEARCH","useMentionTooltip","canSuggestMembers","groupChatMembers","topInlineBotIds","usersToMention","setUsersToMention","updateFilteredUsers","withInlineBots","memberIds","member","filteredIds","filterUsersByName","usernameFilter","getUsernameFilter","canSuggestInlineBots","insertMention","forceFocus","insertedHtml","isMentionTooltipOpen","closeMentionTooltip","mentionFilteredUsers","useAsyncRendering","dependencies","delay","shouldRenderRef","timeoutRef","forceUpdate","useForceUpdate","useOnChange","options","selected","disabled","loadingOptions","setValues","handleChange","newValues","v","option","subLabel","children","buttonClassName","tabIndex","buttonRef","secondaryIcon","destructive","onSecondaryIconClick","isTouched","markIsTouched","unmarkIsTouched","handleSecondaryIconClick","handleMouseDown","role","DEFAULT_DURATION","onDismiss","setIsOpen","timerRef","closeAndDismiss","handleMouseEnter","handleMouseLeave","onMouseEnter","onMouseLeave","RADIUSES","xl","square","circleRadius","STROKE_WIDTH","borderRadius","circumference","PI","svg","firstElementChild","strokeDashOffset","setAttribute","hidden","loadingOption","step","renderValue","mainClassName","trackWidth","index","parentContainerClassName","focused","spinnerColor","spinnerBackgroundColor","autoFocusSearch","onReset","onFocus","onBlur","onSpinnerClick","isInputFocused","markInputFocused","unmarkInputFocused","useInputFocusOnOpen","backgroundColor","prevIsOpen","prevChildren","fromChildrenRef","noAnimation","onCheck","classNames","badgeCount","isBadgeActive","previousActiveTab","tabRef","tabEl","prevTabEl","platformEl","prevPlatformEl","shiftLeft","offsetLeft","scaleFactor","clientWidth","forceReflow","SCROLL_DURATION","tabs","activeTab","big","onSwitchTab","useHorizontalScroll","activeTabElement","childNodes","activeTabOffsetLeft","activeTabOffsetWidth","newLeft","fastSmoothScrollHorizontal","tab","renderCount","shouldRestoreHeight","shouldCleanup","cleanupExceptionKey","onStart","onStop","currentKeyRef","rendersRef","prevActiveKey","activeKeyChanged","cleanup","preservedRender","childElements","transition","isBackwards","prevActiveIndex","activeIndex","toSlide","fromSlide","ANIMATION_LEVEL_MIN","dispatchHeavyAnimationStop","dispatchHeavyAnimationEvent","waitForTransitionEnd","clientHeight","performSlideOptimized","node","HTMLElement","onAnimationEnd","activeElement","watchedNode","firstChild","waitForAnimationEnd","flexBasis","renders","contents","render","teactFastList","INCLUDED_CHAT_TYPES","EXCLUDED_CHAT_TYPES","INCLUDE_FILTER_FIELDS","EXCLUDE_FILTER_FIELDS","selectChatFilters","state","mode","selectTemp","selectedChatIds","selectedChatTypes","includedChatIds","includeFilters","pick","folder","excludedChatIds","excludeFilters","getSuggestedFolderName","filters","bots","groups","channels","contacts","nonContacts","INITIAL_STATE","chatFilter","foldersReducer","omit","error","useReducer","makeMediaHandlers","controllerRef","mediaHandlers","proxy","requestNextTrack","requestPreviousTrack","stop","closeAudioPlayer","seekbackward","skipTime","seekOffset","currentTime","seekforward","seekTo","seekTime","nexttrack","previoustrack","trackId","originalDuration","trackType","handlers","metadata","onInit","onForcePlay","onTrackChange","noPlaylist","noProgressUpdates","setIsPlaying","isPlayingSync","setPlayProgress","register","eventName","setVolume","setPlaybackRate","toggleMuted","registerMediaSession","setPlaybackState","audioPlayer","volume","playbackRate","setPositionState","isFinite","paused","updateMetadata","destroy","isSafariPatchInProgress","useEffectWithPrevDeps","prevShouldPlay","prevSrc","playIfPresent","setTime","time","audioProxy","getTimeRanges","ranges","noInitiallyBuffered","setIsBuffered","bufferedProgress","setBufferedProgress","setBufferedRanges","setIsBufferedDebounced","handleBuffering","media","buffered","bufferedLength","readyState","onLoadedData","onPlaying","onLoadStart","onPause","onTimeUpdate","onProgress","useCanvasBlur","withRaf","img","Image","processBlur","alpha","IS_CANVAS_FILTER_SUPPORTED","drawImage","RADIUS","fastBlur","onload","isInSearch","isServiceNotifications","SERVICE_NOTIFICATIONS_USER_ID","toggleChatPinned","toggleChatArchived","toggleChatUnread","actionAddToFolder","actionPin","compact","actionUnreadMark","actionMute","actionArchive","isChatArchived","actionDelete","getCanDeleteChat","isInFolder","stopImmediatePropagation","isMenuDisabled","shouldDisableOnLink","shouldDisableOnLongTap","setIsContextMenuOpen","setContextMenuPosition","clientY","timer","clearLongPressTimer","startLongPressTimer","originalEvent","touches","cancelClickOnce","emulateContextMenuEvent","passive","EMPTY_RECT","anchor","getLayout","setPositionX","setPositionY","setTransformOriginX","setTransformOriginY","withScroll","setWithScroll","setStyle","setMenuStyle","triggerEl","anchorX","anchorY","menuEl","rootEl","extraPaddingX","extraTopPadding","marginSides","extraMarginTop","marginTop","menuRect","offsetHeight","rootRect","horizontalPosition","verticalPosition","triggerRect","menuMaxHeight","offsetX","offsetY","useDebounce","ms","noFirst","noLast","replyOriginForId","loadMessage","loadMessageThrottled","throttled","setOrderedIds","getOrderedIds","addOrderedIdsCallback","useFolderManagerForUnreadCounters","unreadCounters","setUnreadCounters","getUnreadCounters","addUnreadCountersCallback","useFolderManagerForChatsCount","chatsCount","setChatsCount","getChatsCount","addChatsCountCallback","handleScroll","deltaX","deltaY","useIntersectionObserver","rootCallback","rootRef","throttleMs","debounceMs","shouldSkipFirst","margin","threshold","rootCallbackRef","freezeFlagsRef","onUnfreezeRef","freeze","unfreeze","useHeavyAnimationCheck","observer","disconnect","callbacks","clear","observe","targetCallback","Map","entriesAccumulator","observerCallbackSync","callback","scheduler","observerCallback","IntersectionObserver","root","rootMargin","initController","controller","delete","unobserve","useOnIntersect","targetRef","setIsIntersecting","savedCallback","setInterval","clearInterval","debugKey","prevDeps","isMediaReady","store","idRef","generateIdFor","mediaHash","noLoad","mediaFormat","cacheBuster","isHtmlAllowed","isStreaming","IS_PROGRESSIVE_SUPPORTED","useUniqueId","setLoadProgress","startedAtRef","handleProgress","Date","spentTime","closeTimeout","useMouseInside","menuCloseTimeout","isMouseInside","markMouseInside","usePrevDuringAnimation","prev","isCurrentPresent","isPrevPresent","reducer","initialState","reducerRef","setState","currentState","CalendarModal","canScheduleUntilOnline","onCancel","onScheduled","setOnScheduled","handleMessageSchedule","isWhenOnline","scheduledAt","getTime","handleMessageScheduleUntilOnline","SCHEDULED_WHEN_ONLINE","handleCloseCalendar","requestCalendar","whenScheduled","scheduledDefaultDate","setSeconds","setMilliseconds","scheduledMaxDate","setFullYear","getFullYear","withTimePicker","selectedAt","maxAt","getDayStartAt","isFutureMode","secondButtonLabel","onSubmit","onSecondButtonClick","SEND_MESSAGE_ACTION_INTERVAL","useStateRef","useVideoCleanup","videoRef","videoEl","load","mul_table","shg_table","boxBlurCanvasRGB","context","top_x","top_y","isNaN","imageData","getImageData","pixels","rsum","gsum","bsum","p1","p2","yp","yi","yw","wm","hm","rad1","r","g","mul_sum","shg_sum","vmin","vmax","putImageData","tracks","currentTrackId","voiceQueue","musicQueue","playNext","isReverseOrder","currentTrack","nextTrackId","findNextInQueue","has","openAudioPlayer","parseMessageKey","splitTrackId","messageKey","nextTrack","stopCurrentAudio","track","handleEvent","Proxy","createAudio","trackIdComparator","addTrackToQueue","preventPlayAfterPatch","preload","IS_SAFARI","patchSafariProgressiveAudio","globalSearch","currentContent","GlobalSearchContent","openedChatId","queueFilter","cleanUpQueue","fastSeek","rate","shouldRemoveFromQueue","h","trackIdFilter","el","removeFromQueue","getTrackQueue","currentId","queue","chatAudio","getMessageKey","split","pop","one","two","dateOne","keyOne","dateTwo","keyTwo","localeCompare","IOS_SCREEN_EDGE_THRESHOLD","getDistance","a","sqrt","pageX","pageY","getTouchCenter","lastClickTime","captureEvent","initialSwipeAxis","hasMoved","hasSwiped","initialDistance","initialTouchCenter","innerWidth","innerHeight","excludedClosestSelector","onMove","withCursor","body","querySelectorAll","scrollable","overflow","onDoubleClick","centerX","centerY","onZoom","endDistance","touchCenter","dragOffsetX","dragOffsetY","zoomFactor","initialCenterX","initialCenterY","currentCenterX","currentCenterY","shouldPreventScroll","xAbs","yAbs","axis","currentSwipeAxis","Left","Right","Up","Down","processSwipe","isNotPassive","propertyName","waitForEndEvent","animationName","eventType","detailedName","isHandled","handleAnimationEnd","TransitionEvent","AnimationEvent","cycleRestrict","isAnimating","fastSmoothScroll","maxDistance","FAST_SMOOTH_MAX_DISTANCE","forceDirection","forceDuration","forceNormalContainerHeight","scrollFrom","calculateScrollFrom","FocusDirection","scrollWithJs","isAnimatingScroll","offsetTop","elementTop","scrollTop","offset","elementHeight","currentScrollTop","containerHeight","targetContainerHeight","normalHeight","path","remainingPath","absPath","FAST_SMOOTH_SHORT_TRANSITION_MAX_DISTANCE","shortTransition","longTransition","FAST_SMOOTH_MIN_DURATION","FAST_SMOOTH_MAX_DURATION","startAt","onHeavyAnimationStop","animateSingle","t","currentPath","getAttribute","containerWidth","animate","force","forcePlaceCaretAtEnd","range","createRange","lastChild","nodeValue","selectNodeContents","collapse","toLowerCase","getMessageIdsForSelectedText","selectedFragments","cloneContents","childElementCount","messageIds","nodeType","contains","messageEl","removeChild","DEFAULT_HANDLERS","mediaSession","navigator","setMediaSessionHandlers","console","warn","setActionHandler","err","clearMediaSession","playbackState","buildMediaMetadata","artist","album","artwork","MediaMetadata","ENTITY_CLASS_BY_NODE_NAME","S","STRIKE","PRE","BLOCKQUOTE","parseMessageInput","fragment","parsedHtml","parseMarkdown","textIndex","recursionDeepness","entities","addEntity","rawText","nodeName","getEntityTypeFromNode","rawIndex","substring","getEntityDataFromNode","hasChildNodes","audioEl","patchedForSafari","patchForSafariInProgress","fileSelector","openSystemFilesDialog","accept","noMultiple","removeAttribute","onchange","click"],"sourceRoot":""} \ No newline at end of file diff --git a/dist/313.5cd1718104a79212da23.js b/dist/131.ed8e224f75df6793c3e1.js similarity index 70% rename from dist/313.5cd1718104a79212da23.js rename to dist/131.ed8e224f75df6793c3e1.js index 551131f2f..adcf2a79d 100644 --- a/dist/313.5cd1718104a79212da23.js +++ b/dist/131.ed8e224f75df6793c3e1.js @@ -1,3 +1,3 @@ -/*! For license information please see 313.5cd1718104a79212da23.js.LICENSE.txt */ -(self.webpackChunktelegram_t=self.webpackChunktelegram_t||[]).push([[313],{8136:(t,e,r)=>{"use strict";r.r(e),r.d(e,{CTR:()=>d,IGE:()=>v,default:()=>w});var n=new Uint8Array(256),o=new Uint8Array(256),i=new Uint32Array(256),u=new Uint32Array(256),s=new Uint32Array(256),a=new Uint32Array(256),f=new Uint32Array(256),c=new Uint32Array(256),p=new Uint32Array(256),l=new Uint32Array(256);function h(t){if(t instanceof Uint32Array)return t;if("string"==typeof t){if(t.length%4!=0)for(var e=t.length%4;e<=4;e++)t+="\0x00";var r=new Uint32Array(t.length/4);for(e=0;e>7),v[g[b]^b]=b;for(;!n[d];d^=t||1)r=(r=w^w<<1^w<<2^w<<3^w<<4)>>8^255&r^99,n[d]=r,o[r]=d,y=16843009*g[e=g[t=g[d]]]^65537*e^257*t^16843008*d,h=257*g[r]^16843008*r,i[d]=h=h<<24^h>>>8,u[d]=h=h<<24^h>>>8,s[d]=h=h<<24^h>>>8,a[d]=h=h<<24^h>>>8,f[r]=y=y<<24^y>>>8,c[r]=y=y<<24^y>>>8,p[r]=y=y<<24^y>>>8,l[r]=y=y<<24^y>>>8,w=v[w]||1}();var g=function(){function t(t){var e=h(t);if(4!==e.length&&6!==e.length&&8!==e.length)throw new Error("Invalid key size");this.encKey=new Uint32Array(4*e.length+28),this.decKey=new Uint32Array(4*e.length+28),this.encKey.set(e);for(var r,o=1,i=e.length;i<4*e.length+28;i++)r=this.encKey[i-1],(i%e.length==0||8===e.length&&i%e.length==4)&&(r=n[r>>>24]<<24^n[r>>16&255]<<16^n[r>>8&255]<<8^n[255&r],i%e.length==0&&(r=r<<8^r>>>24^o<<24,o=o<<1^283*(o>>7))),this.encKey[i]=this.encKey[i-e.length]^r;for(var u=0;i;u++,i--)r=this.encKey[3&u?i:i-4],this.decKey[u]=i<=4||u<4?r:f[n[r>>>24]]^c[n[r>>16&255]]^p[n[r>>8&255]]^l[n[255&r]]}return t.prototype.encrypt=function(t){for(var e,r,o,f=h(t),c=new Uint32Array(4),p=f[0]^this.encKey[0],l=f[1]^this.encKey[1],y=f[2]^this.encKey[2],g=f[3]^this.encKey[3],v=this.encKey.length/4-2,d=4,w=0;w>>24]^u[l>>16&255]^s[y>>8&255]^a[255&g]^this.encKey[d],r=i[l>>>24]^u[y>>16&255]^s[g>>8&255]^a[255&p]^this.encKey[d+1],o=i[y>>>24]^u[g>>16&255]^s[p>>8&255]^a[255&l]^this.encKey[d+2],g=i[g>>>24]^u[p>>16&255]^s[l>>8&255]^a[255&y]^this.encKey[d+3],p=e,l=r,y=o,d+=4;for(w=0;w<4;w++)c[w]=n[p>>>24]<<24^n[l>>16&255]<<16^n[y>>8&255]<<8^n[255&g]^this.encKey[d++],e=p,p=l,l=y,y=g,g=e;return c},t.prototype.decrypt=function(t){for(var e,r,n,i=h(t),u=new Uint32Array(4),s=i[0]^this.decKey[0],a=i[3]^this.decKey[1],y=i[2]^this.decKey[2],g=i[1]^this.decKey[3],v=this.decKey.length/4-2,d=4,w=0;w>>24]^c[a>>16&255]^p[y>>8&255]^l[255&g]^this.decKey[d],r=f[a>>>24]^c[y>>16&255]^p[g>>8&255]^l[255&s]^this.decKey[d+1],n=f[y>>>24]^c[g>>16&255]^p[s>>8&255]^l[255&a]^this.decKey[d+2],g=f[g>>>24]^c[s>>16&255]^p[a>>8&255]^l[255&y]^this.decKey[d+3],s=e,a=r,y=n,d+=4;for(w=0;w<4;w++)u[3&-w]=o[s>>>24]<<24^o[a>>16&255]<<16^o[y>>8&255]<<8^o[255&g]^this.decKey[d++],e=s,s=a,a=y,y=g,g=e;return u},t}(),v=function(){function t(t,e,r){void 0===r&&(r=16),this.key=h(t),this.iv=h(e),this.cipher=new g(t),this.blockSize=r/4}return t.prototype.encrypt=function(t,e){for(var r=h(t),n=e||new Uint32Array(r.length),o=this.iv.subarray(this.blockSize,this.iv.length),i=this.iv.subarray(0,this.blockSize),u=new Uint32Array(this.blockSize),s=0;s=this.blockSize&&this.incrementCounter(),o&&(i-=o,o=0)}return this.offset=(this.offset+r.length%4)%4,n},t.prototype.decrypt=function(t,e){return this.encrypt(t,e)},t.prototype.incrementCounter=function(){for(var t=this.counter.length-1;t>=0&&!(++this.counter[t]<4294967295);t--);},t}();const w=g},5078:(t,e,r)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0});var n=r(655),o=r(2403),i=function(){function t(t){this._semaphore=new o.default(1,t)}return t.prototype.acquire=function(){return(0,n.__awaiter)(this,void 0,void 0,(function(){return(0,n.__generator)(this,(function(t){switch(t.label){case 0:return[4,this._semaphore.acquire()];case 1:return[2,t.sent()[1]]}}))}))},t.prototype.runExclusive=function(t){return this._semaphore.runExclusive((function(){return t()}))},t.prototype.isLocked=function(){return this._semaphore.isLocked()},t.prototype.waitForUnlock=function(){return this._semaphore.waitForUnlock()},t.prototype.release=function(){this._semaphore.release()},t.prototype.cancel=function(){return this._semaphore.cancel()},t}();e.default=i},2403:(t,e,r)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0});var n=r(655),o=r(1764),i=function(){function t(t,e){if(void 0===e&&(e=o.E_CANCELED),this._maxConcurrency=t,this._cancelError=e,this._queue=[],this._waiters=[],t<=0)throw new Error("semaphore must be initialized to a positive value");this._value=t}return t.prototype.acquire=function(){var t=this,e=this.isLocked(),r=new Promise((function(e,r){return t._queue.push({resolve:e,reject:r})}));return e||this._dispatch(),r},t.prototype.runExclusive=function(t){return(0,n.__awaiter)(this,void 0,void 0,(function(){var e,r,o;return(0,n.__generator)(this,(function(n){switch(n.label){case 0:return[4,this.acquire()];case 1:e=n.sent(),r=e[0],o=e[1],n.label=2;case 2:return n.trys.push([2,,4,5]),[4,t(r)];case 3:return[2,n.sent()];case 4:return o(),[7];case 5:return[2]}}))}))},t.prototype.waitForUnlock=function(){return(0,n.__awaiter)(this,void 0,void 0,(function(){var t=this;return(0,n.__generator)(this,(function(e){return this.isLocked()?[2,new Promise((function(e){return t._waiters.push({resolve:e})}))]:[2,Promise.resolve()]}))}))},t.prototype.isLocked=function(){return this._value<=0},t.prototype.release=function(){if(this._maxConcurrency>1)throw new Error("this method is unavailable on semaphores with concurrency > 1; use the scoped release returned by acquire instead");if(this._currentReleaser){var t=this._currentReleaser;this._currentReleaser=void 0,t()}},t.prototype.cancel=function(){var t=this;this._queue.forEach((function(e){return e.reject(t._cancelError)})),this._queue=[]},t.prototype._dispatch=function(){var t=this,e=this._queue.shift();if(e){var r=!1;this._currentReleaser=function(){r||(r=!0,t._value++,t._resolveWaiters(),t._dispatch())},e.resolve([this._value--,this._currentReleaser])}},t.prototype._resolveWaiters=function(){this._waiters.forEach((function(t){return t.resolve()})),this._waiters=[]},t}();e.default=i},1764:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.E_CANCELED=e.E_ALREADY_LOCKED=e.E_TIMEOUT=void 0,e.E_TIMEOUT=new Error("timeout while waiting for mutex to become available"),e.E_ALREADY_LOCKED=new Error("mutex already locked"),e.E_CANCELED=new Error("request for lock canceled")},8125:(t,e,r)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.tryAcquire=e.withTimeout=e.Semaphore=e.Mutex=void 0;var n=r(655),o=r(5078);Object.defineProperty(e,"Mutex",{enumerable:!0,get:function(){return o.default}});var i=r(2403);Object.defineProperty(e,"Semaphore",{enumerable:!0,get:function(){return i.default}});var u=r(1960);Object.defineProperty(e,"withTimeout",{enumerable:!0,get:function(){return u.withTimeout}});var s=r(3143);Object.defineProperty(e,"tryAcquire",{enumerable:!0,get:function(){return s.tryAcquire}}),(0,n.__exportStar)(r(1764),e)},3143:(t,e,r)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.tryAcquire=void 0;var n=r(1764),o=r(1960);e.tryAcquire=function(t,e){return void 0===e&&(e=n.E_ALREADY_LOCKED),(0,o.withTimeout)(t,0,e)}},1960:(t,e,r)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.withTimeout=void 0;var n=r(655),o=r(1764);e.withTimeout=function(t,e,r){var i=this;return void 0===r&&(r=o.E_TIMEOUT),{acquire:function(){return new Promise((function(o,u){return(0,n.__awaiter)(i,void 0,void 0,(function(){var i,s,a,f;return(0,n.__generator)(this,(function(n){switch(n.label){case 0:i=!1,s=setTimeout((function(){i=!0,u(r)}),e),n.label=1;case 1:return n.trys.push([1,3,,4]),[4,t.acquire()];case 2:return a=n.sent(),i?(Array.isArray(a)?a[1]:a)():(clearTimeout(s),o(a)),[3,4];case 3:return f=n.sent(),i||(clearTimeout(s),u(f)),[3,4];case 4:return[2]}}))}))}))},runExclusive:function(t){return(0,n.__awaiter)(this,void 0,void 0,(function(){var e,r;return(0,n.__generator)(this,(function(n){switch(n.label){case 0:e=function(){},n.label=1;case 1:return n.trys.push([1,,7,8]),[4,this.acquire()];case 2:return r=n.sent(),Array.isArray(r)?(e=r[1],[4,t(r[0])]):[3,4];case 3:return[2,n.sent()];case 4:return e=r,[4,t()];case 5:return[2,n.sent()];case 6:return[3,8];case 7:return e(),[7];case 8:return[2]}}))}))},release:function(){t.release()},cancel:function(){return t.cancel()},waitForUnlock:function(){return t.waitForUnlock()},isLocked:function(){return t.isLocked()}}}},9742:(t,e)=>{"use strict";e.byteLength=function(t){var e=a(t),r=e[0],n=e[1];return 3*(r+n)/4-n},e.toByteArray=function(t){var e,r,i=a(t),u=i[0],s=i[1],f=new o(function(t,e,r){return 3*(e+r)/4-r}(0,u,s)),c=0,p=s>0?u-4:u;for(r=0;r>16&255,f[c++]=e>>8&255,f[c++]=255&e;return 2===s&&(e=n[t.charCodeAt(r)]<<2|n[t.charCodeAt(r+1)]>>4,f[c++]=255&e),1===s&&(e=n[t.charCodeAt(r)]<<10|n[t.charCodeAt(r+1)]<<4|n[t.charCodeAt(r+2)]>>2,f[c++]=e>>8&255,f[c++]=255&e),f},e.fromByteArray=function(t){for(var e,n=t.length,o=n%3,i=[],u=16383,s=0,a=n-o;sa?a:s+u));return 1===o?(e=t[n-1],i.push(r[e>>2]+r[e<<4&63]+"==")):2===o&&(e=(t[n-2]<<8)+t[n-1],i.push(r[e>>10]+r[e>>4&63]+r[e<<2&63]+"=")),i.join("")};for(var r=[],n=[],o="undefined"!=typeof Uint8Array?Uint8Array:Array,i="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",u=0,s=i.length;u0)throw new Error("Invalid string. Length must be a multiple of 4");var r=t.indexOf("=");return-1===r&&(r=e),[r,r===e?0:4-r%4]}function f(t,e,n){for(var o,i,u=[],s=e;s>18&63]+r[i>>12&63]+r[i>>6&63]+r[63&i]);return u.join("")}n["-".charCodeAt(0)]=62,n["_".charCodeAt(0)]=63},4736:(t,e,r)=>{var n;t=r.nmd(t);var o=function(t){"use strict";var e=1e7,r=9007199254740992,n=l(r),i="0123456789abcdefghijklmnopqrstuvwxyz",u="function"==typeof BigInt;function s(t,e,r,n){return void 0===t?s[0]:void 0===e||10==+e&&!r?V(t):F(t,e,r,n)}function a(t,e){this.value=t,this.sign=e,this.isSmall=!1}function f(t){this.value=t,this.sign=t<0,this.isSmall=!0}function c(t){this.value=t}function p(t){return-r0?Math.floor(t):Math.ceil(t)}function d(t,r){var n,o,i=t.length,u=r.length,s=new Array(i),a=0,f=e;for(o=0;o=f?1:0,s[o]=n-a*f;for(;o0&&s.push(a),s}function w(t,e){return t.length>=e.length?d(t,e):d(e,t)}function b(t,r){var n,o,i=t.length,u=new Array(i),s=e;for(o=0;o0;)u[o++]=r%s,r=Math.floor(r/s);return u}function m(t,r){var n,o,i=t.length,u=r.length,s=new Array(i),a=0,f=e;for(n=0;n0;)u[o++]=a%s,a=Math.floor(a/s);return u}function B(t,e){for(var r=[];e-- >0;)r.push(0);return r.concat(t)}function S(t,e){var r=Math.max(t.length,e.length);if(r<=30)return _(t,e);r=Math.ceil(r/2);var n=t.slice(r),o=t.slice(0,r),i=e.slice(r),u=e.slice(0,r),s=S(o,u),a=S(n,i),f=S(w(o,n),w(u,i)),c=w(w(s,B(m(m(f,s),a),r)),B(a,2*r));return y(c),c}function O(t,r,n){return new a(t=0;--r)o=(i=1e7*o+t[r])-(n=v(i/e))*e,s[r]=0|n;return[s,0|o]}function P(t,r){var n,o=V(r);if(u)return[new c(t.value/o.value),new c(t.value%o.value)];var i,p=t.value,d=o.value;if(0===d)throw new Error("Cannot divide by zero");if(t.isSmall)return o.isSmall?[new f(v(p/d)),new f(p%d)]:[s[0],t];if(o.isSmall){if(1===d)return[t,s[0]];if(-1==d)return[t.negate(),s[0]];var w=Math.abs(d);if(w=0;o--){for(n=l-1,w[o+p]!==v&&(n=Math.floor((w[o+p]*l+w[o+p-1])/v)),i=0,u=0,a=b.length,s=0;sf&&(i=(i+1)*l),n=Math.ceil(i/u);do{if(T(s=A(r,n),p)<=0)break;n--}while(n);c.push(n),p=m(p,s)}return c.reverse(),[h(c),h(p)]}(p,d),i=n[0];var _=t.sign!==o.sign,B=n[1],S=t.sign;return"number"==typeof i?(_&&(i=-i),i=new f(i)):i=new a(i,_),"number"==typeof B?(S&&(B=-B),B=new f(B)):B=new a(B,S),[i,B]}function T(t,e){if(t.length!==e.length)return t.length>e.length?1:-1;for(var r=t.length-1;r>=0;r--)if(t[r]!==e[r])return t[r]>e[r]?1:-1;return 0}function M(t){var e=t.abs();return!e.isUnit()&&(!!(e.equals(2)||e.equals(3)||e.equals(5))||!(e.isEven()||e.isDivisibleBy(3)||e.isDivisibleBy(5))&&(!!e.lesser(49)||void 0))}function x(t,e){for(var r,n,i,u=t.prev(),s=u,a=0;s.isEven();)s=s.divide(2),a++;t:for(n=0;n=0?n=m(t,e):(n=m(e,t),r=!r),"number"==typeof(n=h(n))?(r&&(n=-n),new f(n)):new a(n,r)}(r,n,this.sign)},a.prototype.minus=a.prototype.subtract,f.prototype.subtract=function(t){var e=V(t),r=this.value;if(r<0!==e.sign)return this.add(e.negate());var n=e.value;return e.isSmall?new f(r-n):E(n,Math.abs(r),r>=0)},f.prototype.minus=f.prototype.subtract,c.prototype.subtract=function(t){return new c(this.value-V(t).value)},c.prototype.minus=c.prototype.subtract,a.prototype.negate=function(){return new a(this.value,!this.sign)},f.prototype.negate=function(){var t=this.sign,e=new f(-this.value);return e.sign=!t,e},c.prototype.negate=function(){return new c(-this.value)},a.prototype.abs=function(){return new a(this.value,!1)},f.prototype.abs=function(){return new f(Math.abs(this.value))},c.prototype.abs=function(){return new c(this.value>=0?this.value:-this.value)},a.prototype.multiply=function(t){var r,n,o,i=V(t),u=this.value,f=i.value,c=this.sign!==i.sign;if(i.isSmall){if(0===f)return s[0];if(1===f)return this;if(-1===f)return this.negate();if((r=Math.abs(f))0?S(u,f):_(u,f),c)},a.prototype.times=a.prototype.multiply,f.prototype._multiplyBySmall=function(t){return p(t.value*this.value)?new f(t.value*this.value):O(Math.abs(t.value),l(Math.abs(this.value)),this.sign!==t.sign)},a.prototype._multiplyBySmall=function(t){return 0===t.value?s[0]:1===t.value?this:-1===t.value?this.negate():O(Math.abs(t.value),this.value,this.sign!==t.sign)},f.prototype.multiply=function(t){return V(t)._multiplyBySmall(this)},f.prototype.times=f.prototype.multiply,c.prototype.multiply=function(t){return new c(this.value*V(t).value)},c.prototype.times=c.prototype.multiply,a.prototype.square=function(){return new a(I(this.value),!1)},f.prototype.square=function(){var t=this.value*this.value;return p(t)?new f(t):new a(I(l(Math.abs(this.value))),!1)},c.prototype.square=function(t){return new c(this.value*this.value)},a.prototype.divmod=function(t){var e=P(this,t);return{quotient:e[0],remainder:e[1]}},c.prototype.divmod=f.prototype.divmod=a.prototype.divmod,a.prototype.divide=function(t){return P(this,t)[0]},c.prototype.over=c.prototype.divide=function(t){return new c(this.value/V(t).value)},f.prototype.over=f.prototype.divide=a.prototype.over=a.prototype.divide,a.prototype.mod=function(t){return P(this,t)[1]},c.prototype.mod=c.prototype.remainder=function(t){return new c(this.value%V(t).value)},f.prototype.remainder=f.prototype.mod=a.prototype.remainder=a.prototype.mod,a.prototype.pow=function(t){var e,r,n,o=V(t),i=this.value,u=o.value;if(0===u)return s[1];if(0===i)return s[0];if(1===i)return s[1];if(-1===i)return o.isEven()?s[1]:s[-1];if(o.sign)return s[0];if(!o.isSmall)throw new Error("The exponent "+o.toString()+" is too large.");if(this.isSmall&&p(e=Math.pow(i,u)))return new f(v(e));for(r=this,n=s[1];!0&u&&(n=n.times(r),--u),0!==u;)u/=2,r=r.square();return n},f.prototype.pow=a.prototype.pow,c.prototype.pow=function(t){var e=V(t),r=this.value,n=e.value,o=BigInt(0),i=BigInt(1),u=BigInt(2);if(n===o)return s[1];if(r===o)return s[0];if(r===i)return s[1];if(r===BigInt(-1))return e.isEven()?s[1]:s[-1];if(e.isNegative())return new c(o);for(var a=this,f=s[1];(n&i)===i&&(f=f.times(a),--n),n!==o;)n/=u,a=a.square();return f},a.prototype.modPow=function(t,e){if(t=V(t),(e=V(e)).isZero())throw new Error("Cannot take modPow with modulus 0");var r=s[1],n=this.mod(e);for(t.isNegative()&&(t=t.multiply(s[-1]),n=n.modInv(e));t.isPositive();){if(n.isZero())return s[0];t.isOdd()&&(r=r.multiply(n).mod(e)),t=t.divide(2),n=n.square().mod(e)}return r},c.prototype.modPow=f.prototype.modPow=a.prototype.modPow,a.prototype.compareAbs=function(t){var e=V(t),r=this.value,n=e.value;return e.isSmall?1:T(r,n)},f.prototype.compareAbs=function(t){var e=V(t),r=Math.abs(this.value),n=e.value;return e.isSmall?r===(n=Math.abs(n))?0:r>n?1:-1:-1},c.prototype.compareAbs=function(t){var e=this.value,r=V(t).value;return(e=e>=0?e:-e)===(r=r>=0?r:-r)?0:e>r?1:-1},a.prototype.compare=function(t){if(t===1/0)return-1;if(t===-1/0)return 1;var e=V(t),r=this.value,n=e.value;return this.sign!==e.sign?e.sign?1:-1:e.isSmall?this.sign?-1:1:T(r,n)*(this.sign?-1:1)},a.prototype.compareTo=a.prototype.compare,f.prototype.compare=function(t){if(t===1/0)return-1;if(t===-1/0)return 1;var e=V(t),r=this.value,n=e.value;return e.isSmall?r==n?0:r>n?1:-1:r<0!==e.sign?r<0?-1:1:r<0?1:-1},f.prototype.compareTo=f.prototype.compare,c.prototype.compare=function(t){if(t===1/0)return-1;if(t===-1/0)return 1;var e=this.value,r=V(t).value;return e===r?0:e>r?1:-1},c.prototype.compareTo=c.prototype.compare,a.prototype.equals=function(t){return 0===this.compare(t)},c.prototype.eq=c.prototype.equals=f.prototype.eq=f.prototype.equals=a.prototype.eq=a.prototype.equals,a.prototype.notEquals=function(t){return 0!==this.compare(t)},c.prototype.neq=c.prototype.notEquals=f.prototype.neq=f.prototype.notEquals=a.prototype.neq=a.prototype.notEquals,a.prototype.greater=function(t){return this.compare(t)>0},c.prototype.gt=c.prototype.greater=f.prototype.gt=f.prototype.greater=a.prototype.gt=a.prototype.greater,a.prototype.lesser=function(t){return this.compare(t)<0},c.prototype.lt=c.prototype.lesser=f.prototype.lt=f.prototype.lesser=a.prototype.lt=a.prototype.lesser,a.prototype.greaterOrEquals=function(t){return this.compare(t)>=0},c.prototype.geq=c.prototype.greaterOrEquals=f.prototype.geq=f.prototype.greaterOrEquals=a.prototype.geq=a.prototype.greaterOrEquals,a.prototype.lesserOrEquals=function(t){return this.compare(t)<=0},c.prototype.leq=c.prototype.lesserOrEquals=f.prototype.leq=f.prototype.lesserOrEquals=a.prototype.leq=a.prototype.lesserOrEquals,a.prototype.isEven=function(){return 0==(1&this.value[0])},f.prototype.isEven=function(){return 0==(1&this.value)},c.prototype.isEven=function(){return(this.value&BigInt(1))===BigInt(0)},a.prototype.isOdd=function(){return 1==(1&this.value[0])},f.prototype.isOdd=function(){return 1==(1&this.value)},c.prototype.isOdd=function(){return(this.value&BigInt(1))===BigInt(1)},a.prototype.isPositive=function(){return!this.sign},f.prototype.isPositive=function(){return this.value>0},c.prototype.isPositive=f.prototype.isPositive,a.prototype.isNegative=function(){return this.sign},f.prototype.isNegative=function(){return this.value<0},c.prototype.isNegative=f.prototype.isNegative,a.prototype.isUnit=function(){return!1},f.prototype.isUnit=function(){return 1===Math.abs(this.value)},c.prototype.isUnit=function(){return this.abs().value===BigInt(1)},a.prototype.isZero=function(){return!1},f.prototype.isZero=function(){return 0===this.value},c.prototype.isZero=function(){return this.value===BigInt(0)},a.prototype.isDivisibleBy=function(t){var e=V(t);return!e.isZero()&&(!!e.isUnit()||(0===e.compareAbs(2)?this.isEven():this.mod(e).isZero()))},c.prototype.isDivisibleBy=f.prototype.isDivisibleBy=a.prototype.isDivisibleBy,a.prototype.isPrime=function(e){var r=M(this);if(r!==t)return r;var n=this.abs(),i=n.bitLength();if(i<=64)return x(n,[2,3,5,7,11,13,17,19,23,29,31,37]);for(var u=Math.log(2)*i.toJSNumber(),s=Math.ceil(!0===e?2*Math.pow(u,2):u),a=[],f=0;f-r?new f(t-1):new a(n,!0)},c.prototype.prev=function(){return new c(this.value-BigInt(1))};for(var R=[1];2*R[R.length-1]<=e;)R.push(2*R[R.length-1]);var L=R.length,N=R[L-1];function k(t){return Math.abs(t)<=e}function j(t,e,r){e=V(e);for(var n=t.isNegative(),i=e.isNegative(),u=n?t.not():t,s=i?e.not():e,a=0,f=0,c=null,p=null,l=[];!u.isZero()||!s.isZero();)a=(c=P(u,N))[1].toJSNumber(),n&&(a=N-1-a),f=(p=P(s,N))[1].toJSNumber(),i&&(f=N-1-f),u=c[0],s=p[0],l.push(r(a,f));for(var h=0!==r(n?1:0,i?1:0)?o(-1):o(0),y=l.length-1;y>=0;y-=1)h=h.multiply(N).add(o(l[y]));return h}a.prototype.shiftLeft=function(t){var e=V(t).toJSNumber();if(!k(e))throw new Error(String(e)+" is too large for shifting.");if(e<0)return this.shiftRight(-e);var r=this;if(r.isZero())return r;for(;e>=L;)r=r.multiply(N),e-=L-1;return r.multiply(R[e])},c.prototype.shiftLeft=function(t){return t=V(t),new c(this.value<=L;){if(n.isZero()||n.isNegative()&&n.isUnit())return n;n=(e=P(n,N))[1].isNegative()?e[0].prev():e[0],r-=L-1}return(e=P(n,R[r]))[1].isNegative()?e[0].prev():e[0]},c.prototype.shiftRight=function(t){return t=V(t),new c(this.value>>t.value)},f.prototype.shiftRight=a.prototype.shiftRight,a.prototype.not=function(){return this.negate().prev()},c.prototype.not=f.prototype.not=a.prototype.not,a.prototype.and=function(t){return j(this,t,(function(t,e){return t&e}))},c.prototype.and=f.prototype.and=a.prototype.and,a.prototype.or=function(t){return j(this,t,(function(t,e){return t|e}))},c.prototype.or=f.prototype.or=a.prototype.or,a.prototype.xor=function(t){return j(this,t,(function(t,e){return t^e}))},c.prototype.xor=f.prototype.xor=a.prototype.xor;var C=1<<30;function q(t){var r=t.value,n="number"==typeof r?r|C:"bigint"==typeof r?r|BigInt(C):r[0]+r[1]*e|1073758208;return n&-n}function K(t,e){if(e.compareTo(t)<=0){var r=K(t,e.square(e)),n=r.p,i=r.e,u=n.multiply(e);return u.compareTo(t)<=0?{p:u,e:2*i+1}:{p:n,e:2*i}}return{p:o(1),e:0}}function D(t,e){return t=V(t),e=V(e),t.greater(e)?t:e}function z(t,e){return t=V(t),e=V(e),t.lesser(e)?t:e}function $(t,e){if(t=V(t).abs(),e=V(e).abs(),t.equals(e))return t;if(t.isZero())return e;if(e.isZero())return t;for(var r,n,o=s[1];t.isEven()&&e.isEven();)r=z(q(t),q(e)),t=t.divide(r),e=e.divide(r),o=o.multiply(r);for(;t.isEven();)t=t.divide(q(t));do{for(;e.isEven();)e=e.divide(q(e));t.greater(e)&&(n=e,e=t,t=n),e=e.subtract(t)}while(!e.isZero());return o.isUnit()?t:t.multiply(o)}a.prototype.bitLength=function(){var t=this;return t.compareTo(o(0))<0&&(t=t.negate().subtract(o(1))),0===t.compareTo(o(0))?o(0):o(K(t,o(2)).e).add(o(1))},c.prototype.bitLength=f.prototype.bitLength=a.prototype.bitLength;var F=function(t,e,r,n){r=r||i,t=String(t),n||(t=t.toLowerCase(),r=r.toLowerCase());var o,u=t.length,s=Math.abs(e),a={};for(o=0;o=s){if("1"===p&&1===s)continue;throw new Error(p+" is not a valid digit in base "+e+".")}e=V(e);var f=[],c="-"===t[0];for(o=c?1:0;o"!==t[o]&&o=0;n--)o=o.add(t[n].times(i)),i=i.times(e);return r?o.negate():o}function J(t,e){if((e=o(e)).isZero()){if(t.isZero())return{value:[0],isNegative:!1};throw new Error("Cannot convert nonzero numbers to base 0.")}if(e.equals(-1)){if(t.isZero())return{value:[0],isNegative:!1};if(t.isNegative())return{value:[].concat.apply([],Array.apply(null,Array(-t.toJSNumber())).map(Array.prototype.valueOf,[1,0])),isNegative:!1};var r=Array.apply(null,Array(t.toJSNumber()-1)).map(Array.prototype.valueOf,[0,1]);return r.unshift([1]),{value:[].concat.apply([],r),isNegative:!1}}var n=!1;if(t.isNegative()&&e.isPositive()&&(n=!0,t=t.abs()),e.isUnit())return t.isZero()?{value:[0],isNegative:!1}:{value:Array.apply(null,Array(t.toJSNumber())).map(Number.prototype.valueOf,1),isNegative:n};for(var i,u=[],s=t;s.isNegative()||s.compareAbs(e)>=0;){i=s.divmod(e),s=i.quotient;var a=i.remainder;a.isNegative()&&(a=e.minus(a).abs(),s=s.next()),u.push(a.toJSNumber())}return u.push(s.toJSNumber()),{value:u.reverse(),isNegative:n}}function G(t,e,r){var n=J(t,e);return(n.isNegative?"-":"")+n.value.map((function(t){return function(t,e){return t<(e=e||i).length?e[t]:"<"+t+">"}(t,r)})).join("")}function Y(t){if(p(+t)){var e=+t;if(e===v(e))return u?new c(BigInt(e)):new f(e);throw new Error("Invalid integer: "+t)}var r="-"===t[0];r&&(t=t.slice(1));var n=t.split(/e/i);if(n.length>2)throw new Error("Invalid integer: "+n.join("e"));if(2===n.length){var o=n[1];if("+"===o[0]&&(o=o.slice(1)),(o=+o)!==v(o)||!p(o))throw new Error("Invalid integer: "+o+" is not a valid exponent.");var i=n[0],s=i.indexOf(".");if(s>=0&&(o-=i.length-s-1,i=i.slice(0,s)+i.slice(s+1)),o<0)throw new Error("Cannot include negative exponent part for integers");t=i+=new Array(o+1).join("0")}if(!/^([0-9][0-9]*)$/.test(t))throw new Error("Invalid integer: "+t);if(u)return new c(BigInt(r?"-"+t:t));for(var l=[],h=t.length,g=h-7;h>0;)l.push(+t.slice(g,h)),(g-=7)<0&&(g=0),h-=7;return y(l),new a(l,r)}function V(t){return"number"==typeof t?function(t){if(u)return new c(BigInt(t));if(p(t)){if(t!==v(t))throw new Error(t+" is not an integer.");return new f(t)}return Y(t.toString())}(t):"string"==typeof t?Y(t):"bigint"==typeof t?new c(t):t}a.prototype.toArray=function(t){return J(this,t)},f.prototype.toArray=function(t){return J(this,t)},c.prototype.toArray=function(t){return J(this,t)},a.prototype.toString=function(e,r){if(e===t&&(e=10),10!==e)return G(this,e,r);for(var n,o=this.value,i=o.length,u=String(o[--i]);--i>=0;)n=String(o[i]),u+="0000000".slice(n.length)+n;return(this.sign?"-":"")+u},f.prototype.toString=function(e,r){return e===t&&(e=10),10!=e?G(this,e,r):String(this.value)},c.prototype.toString=f.prototype.toString,c.prototype.toJSON=a.prototype.toJSON=f.prototype.toJSON=function(){return this.toString()},a.prototype.valueOf=function(){return parseInt(this.toString(),10)},a.prototype.toJSNumber=a.prototype.valueOf,f.prototype.valueOf=function(){return this.value},f.prototype.toJSNumber=f.prototype.valueOf,c.prototype.valueOf=c.prototype.toJSNumber=function(){return parseInt(this.toString(),10)};for(var W=0;W<1e3;W++)s[W]=V(W),W>0&&(s[-W]=V(-W));return s.one=s[1],s.zero=s[0],s.minusOne=s[-1],s.max=D,s.min=z,s.gcd=$,s.lcm=function(t,e){return t=V(t).abs(),e=V(e).abs(),t.divide($(t,e)).multiply(e)},s.isInstance=function(t){return t instanceof a||t instanceof f||t instanceof c},s.randBetween=function(t,r,n){t=V(t),r=V(r);var o=n||Math.random,i=z(t,r),u=D(t,r).subtract(i).add(1);if(u.isSmall)return i.add(Math.floor(o()*u));for(var a=J(u,e).value,f=[],c=!0,p=0;p{"use strict";const n=r(9742),o=r(645),i="function"==typeof Symbol&&"function"==typeof Symbol.for?Symbol.for("nodejs.util.inspect.custom"):null;e.Buffer=a,e.SlowBuffer=function(t){return+t!=t&&(t=0),a.alloc(+t)},e.INSPECT_MAX_BYTES=50;const u=2147483647;function s(t){if(t>u)throw new RangeError('The value "'+t+'" is invalid for option "size"');const e=new Uint8Array(t);return Object.setPrototypeOf(e,a.prototype),e}function a(t,e,r){if("number"==typeof t){if("string"==typeof e)throw new TypeError('The "string" argument must be of type string. Received type number');return p(t)}return f(t,e,r)}function f(t,e,r){if("string"==typeof t)return function(t,e){if("string"==typeof e&&""!==e||(e="utf8"),!a.isEncoding(e))throw new TypeError("Unknown encoding: "+e);const r=0|g(t,e);let n=s(r);const o=n.write(t,e);return o!==r&&(n=n.slice(0,o)),n}(t,e);if(ArrayBuffer.isView(t))return function(t){if(V(t,Uint8Array)){const e=new Uint8Array(t);return h(e.buffer,e.byteOffset,e.byteLength)}return l(t)}(t);if(null==t)throw new TypeError("The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type "+typeof t);if(V(t,ArrayBuffer)||t&&V(t.buffer,ArrayBuffer))return h(t,e,r);if("undefined"!=typeof SharedArrayBuffer&&(V(t,SharedArrayBuffer)||t&&V(t.buffer,SharedArrayBuffer)))return h(t,e,r);if("number"==typeof t)throw new TypeError('The "value" argument must not be of type number. Received type number');const n=t.valueOf&&t.valueOf();if(null!=n&&n!==t)return a.from(n,e,r);const o=function(t){if(a.isBuffer(t)){const e=0|y(t.length),r=s(e);return 0===r.length||t.copy(r,0,0,e),r}return void 0!==t.length?"number"!=typeof t.length||W(t.length)?s(0):l(t):"Buffer"===t.type&&Array.isArray(t.data)?l(t.data):void 0}(t);if(o)return o;if("undefined"!=typeof Symbol&&null!=Symbol.toPrimitive&&"function"==typeof t[Symbol.toPrimitive])return a.from(t[Symbol.toPrimitive]("string"),e,r);throw new TypeError("The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type "+typeof t)}function c(t){if("number"!=typeof t)throw new TypeError('"size" argument must be of type number');if(t<0)throw new RangeError('The value "'+t+'" is invalid for option "size"')}function p(t){return c(t),s(t<0?0:0|y(t))}function l(t){const e=t.length<0?0:0|y(t.length),r=s(e);for(let n=0;n=u)throw new RangeError("Attempt to allocate Buffer larger than maximum size: 0x"+u.toString(16)+" bytes");return 0|t}function g(t,e){if(a.isBuffer(t))return t.length;if(ArrayBuffer.isView(t)||V(t,ArrayBuffer))return t.byteLength;if("string"!=typeof t)throw new TypeError('The "string" argument must be one of type string, Buffer, or ArrayBuffer. Received type '+typeof t);const r=t.length,n=arguments.length>2&&!0===arguments[2];if(!n&&0===r)return 0;let o=!1;for(;;)switch(e){case"ascii":case"latin1":case"binary":return r;case"utf8":case"utf-8":return J(t).length;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return 2*r;case"hex":return r>>>1;case"base64":return G(t).length;default:if(o)return n?-1:J(t).length;e=(""+e).toLowerCase(),o=!0}}function v(t,e,r){let n=!1;if((void 0===e||e<0)&&(e=0),e>this.length)return"";if((void 0===r||r>this.length)&&(r=this.length),r<=0)return"";if((r>>>=0)<=(e>>>=0))return"";for(t||(t="utf8");;)switch(t){case"hex":return T(this,e,r);case"utf8":case"utf-8":return O(this,e,r);case"ascii":return U(this,e,r);case"latin1":case"binary":return P(this,e,r);case"base64":return S(this,e,r);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return M(this,e,r);default:if(n)throw new TypeError("Unknown encoding: "+t);t=(t+"").toLowerCase(),n=!0}}function d(t,e,r){const n=t[e];t[e]=t[r],t[r]=n}function w(t,e,r,n,o){if(0===t.length)return-1;if("string"==typeof r?(n=r,r=0):r>2147483647?r=2147483647:r<-2147483648&&(r=-2147483648),W(r=+r)&&(r=o?0:t.length-1),r<0&&(r=t.length+r),r>=t.length){if(o)return-1;r=t.length-1}else if(r<0){if(!o)return-1;r=0}if("string"==typeof e&&(e=a.from(e,n)),a.isBuffer(e))return 0===e.length?-1:b(t,e,r,n,o);if("number"==typeof e)return e&=255,"function"==typeof Uint8Array.prototype.indexOf?o?Uint8Array.prototype.indexOf.call(t,e,r):Uint8Array.prototype.lastIndexOf.call(t,e,r):b(t,[e],r,n,o);throw new TypeError("val must be string, number or Buffer")}function b(t,e,r,n,o){let i,u=1,s=t.length,a=e.length;if(void 0!==n&&("ucs2"===(n=String(n).toLowerCase())||"ucs-2"===n||"utf16le"===n||"utf-16le"===n)){if(t.length<2||e.length<2)return-1;u=2,s/=2,a/=2,r/=2}function f(t,e){return 1===u?t[e]:t.readUInt16BE(e*u)}if(o){let n=-1;for(i=r;is&&(r=s-a),i=r;i>=0;i--){let r=!0;for(let n=0;no&&(n=o):n=o;const i=e.length;let u;for(n>i/2&&(n=i/2),u=0;u>8,o=r%256,i.push(o),i.push(n);return i}(e,t.length-r),t,r,n)}function S(t,e,r){return 0===e&&r===t.length?n.fromByteArray(t):n.fromByteArray(t.slice(e,r))}function O(t,e,r){r=Math.min(t.length,r);const n=[];let o=e;for(;o239?4:e>223?3:e>191?2:1;if(o+u<=r){let r,n,s,a;switch(u){case 1:e<128&&(i=e);break;case 2:r=t[o+1],128==(192&r)&&(a=(31&e)<<6|63&r,a>127&&(i=a));break;case 3:r=t[o+1],n=t[o+2],128==(192&r)&&128==(192&n)&&(a=(15&e)<<12|(63&r)<<6|63&n,a>2047&&(a<55296||a>57343)&&(i=a));break;case 4:r=t[o+1],n=t[o+2],s=t[o+3],128==(192&r)&&128==(192&n)&&128==(192&s)&&(a=(15&e)<<18|(63&r)<<12|(63&n)<<6|63&s,a>65535&&a<1114112&&(i=a))}}null===i?(i=65533,u=1):i>65535&&(i-=65536,n.push(i>>>10&1023|55296),i=56320|1023&i),n.push(i),o+=u}return function(t){const e=t.length;if(e<=I)return String.fromCharCode.apply(String,t);let r="",n=0;for(;nn.length?(a.isBuffer(e)||(e=a.from(e)),e.copy(n,o)):Uint8Array.prototype.set.call(n,e,o);else{if(!a.isBuffer(e))throw new TypeError('"list" argument must be an Array of Buffers');e.copy(n,o)}o+=e.length}return n},a.byteLength=g,a.prototype._isBuffer=!0,a.prototype.swap16=function(){const t=this.length;if(t%2!=0)throw new RangeError("Buffer size must be a multiple of 16-bits");for(let e=0;er&&(t+=" ... "),""},i&&(a.prototype[i]=a.prototype.inspect),a.prototype.compare=function(t,e,r,n,o){if(V(t,Uint8Array)&&(t=a.from(t,t.offset,t.byteLength)),!a.isBuffer(t))throw new TypeError('The "target" argument must be one of type Buffer or Uint8Array. Received type '+typeof t);if(void 0===e&&(e=0),void 0===r&&(r=t?t.length:0),void 0===n&&(n=0),void 0===o&&(o=this.length),e<0||r>t.length||n<0||o>this.length)throw new RangeError("out of range index");if(n>=o&&e>=r)return 0;if(n>=o)return-1;if(e>=r)return 1;if(this===t)return 0;let i=(o>>>=0)-(n>>>=0),u=(r>>>=0)-(e>>>=0);const s=Math.min(i,u),f=this.slice(n,o),c=t.slice(e,r);for(let t=0;t>>=0,isFinite(r)?(r>>>=0,void 0===n&&(n="utf8")):(n=r,r=void 0)}const o=this.length-e;if((void 0===r||r>o)&&(r=o),t.length>0&&(r<0||e<0)||e>this.length)throw new RangeError("Attempt to write outside buffer bounds");n||(n="utf8");let i=!1;for(;;)switch(n){case"hex":return m(this,t,e,r);case"utf8":case"utf-8":return E(this,t,e,r);case"ascii":case"latin1":case"binary":return _(this,t,e,r);case"base64":return A(this,t,e,r);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return B(this,t,e,r);default:if(i)throw new TypeError("Unknown encoding: "+n);n=(""+n).toLowerCase(),i=!0}},a.prototype.toJSON=function(){return{type:"Buffer",data:Array.prototype.slice.call(this._arr||this,0)}};const I=4096;function U(t,e,r){let n="";r=Math.min(t.length,r);for(let o=e;on)&&(r=n);let o="";for(let n=e;nr)throw new RangeError("Trying to access beyond buffer length")}function R(t,e,r,n,o,i){if(!a.isBuffer(t))throw new TypeError('"buffer" argument must be a Buffer instance');if(e>o||et.length)throw new RangeError("Index out of range")}function L(t,e,r,n,o){z(e,n,o,t,r,7);let i=Number(e&BigInt(4294967295));t[r++]=i,i>>=8,t[r++]=i,i>>=8,t[r++]=i,i>>=8,t[r++]=i;let u=Number(e>>BigInt(32)&BigInt(4294967295));return t[r++]=u,u>>=8,t[r++]=u,u>>=8,t[r++]=u,u>>=8,t[r++]=u,r}function N(t,e,r,n,o){z(e,n,o,t,r,7);let i=Number(e&BigInt(4294967295));t[r+7]=i,i>>=8,t[r+6]=i,i>>=8,t[r+5]=i,i>>=8,t[r+4]=i;let u=Number(e>>BigInt(32)&BigInt(4294967295));return t[r+3]=u,u>>=8,t[r+2]=u,u>>=8,t[r+1]=u,u>>=8,t[r]=u,r+8}function k(t,e,r,n,o,i){if(r+n>t.length)throw new RangeError("Index out of range");if(r<0)throw new RangeError("Index out of range")}function j(t,e,r,n,i){return e=+e,r>>>=0,i||k(t,0,r,4),o.write(t,e,r,n,23,4),r+4}function C(t,e,r,n,i){return e=+e,r>>>=0,i||k(t,0,r,8),o.write(t,e,r,n,52,8),r+8}a.prototype.slice=function(t,e){const r=this.length;(t=~~t)<0?(t+=r)<0&&(t=0):t>r&&(t=r),(e=void 0===e?r:~~e)<0?(e+=r)<0&&(e=0):e>r&&(e=r),e>>=0,e>>>=0,r||x(t,e,this.length);let n=this[t],o=1,i=0;for(;++i>>=0,e>>>=0,r||x(t,e,this.length);let n=this[t+--e],o=1;for(;e>0&&(o*=256);)n+=this[t+--e]*o;return n},a.prototype.readUint8=a.prototype.readUInt8=function(t,e){return t>>>=0,e||x(t,1,this.length),this[t]},a.prototype.readUint16LE=a.prototype.readUInt16LE=function(t,e){return t>>>=0,e||x(t,2,this.length),this[t]|this[t+1]<<8},a.prototype.readUint16BE=a.prototype.readUInt16BE=function(t,e){return t>>>=0,e||x(t,2,this.length),this[t]<<8|this[t+1]},a.prototype.readUint32LE=a.prototype.readUInt32LE=function(t,e){return t>>>=0,e||x(t,4,this.length),(this[t]|this[t+1]<<8|this[t+2]<<16)+16777216*this[t+3]},a.prototype.readUint32BE=a.prototype.readUInt32BE=function(t,e){return t>>>=0,e||x(t,4,this.length),16777216*this[t]+(this[t+1]<<16|this[t+2]<<8|this[t+3])},a.prototype.readBigUInt64LE=H((function(t){$(t>>>=0,"offset");const e=this[t],r=this[t+7];void 0!==e&&void 0!==r||F(t,this.length-8);const n=e+256*this[++t]+65536*this[++t]+this[++t]*2**24,o=this[++t]+256*this[++t]+65536*this[++t]+r*2**24;return BigInt(n)+(BigInt(o)<>>=0,"offset");const e=this[t],r=this[t+7];void 0!==e&&void 0!==r||F(t,this.length-8);const n=e*2**24+65536*this[++t]+256*this[++t]+this[++t],o=this[++t]*2**24+65536*this[++t]+256*this[++t]+r;return(BigInt(n)<>>=0,e>>>=0,r||x(t,e,this.length);let n=this[t],o=1,i=0;for(;++i=o&&(n-=Math.pow(2,8*e)),n},a.prototype.readIntBE=function(t,e,r){t>>>=0,e>>>=0,r||x(t,e,this.length);let n=e,o=1,i=this[t+--n];for(;n>0&&(o*=256);)i+=this[t+--n]*o;return o*=128,i>=o&&(i-=Math.pow(2,8*e)),i},a.prototype.readInt8=function(t,e){return t>>>=0,e||x(t,1,this.length),128&this[t]?-1*(255-this[t]+1):this[t]},a.prototype.readInt16LE=function(t,e){t>>>=0,e||x(t,2,this.length);const r=this[t]|this[t+1]<<8;return 32768&r?4294901760|r:r},a.prototype.readInt16BE=function(t,e){t>>>=0,e||x(t,2,this.length);const r=this[t+1]|this[t]<<8;return 32768&r?4294901760|r:r},a.prototype.readInt32LE=function(t,e){return t>>>=0,e||x(t,4,this.length),this[t]|this[t+1]<<8|this[t+2]<<16|this[t+3]<<24},a.prototype.readInt32BE=function(t,e){return t>>>=0,e||x(t,4,this.length),this[t]<<24|this[t+1]<<16|this[t+2]<<8|this[t+3]},a.prototype.readBigInt64LE=H((function(t){$(t>>>=0,"offset");const e=this[t],r=this[t+7];void 0!==e&&void 0!==r||F(t,this.length-8);const n=this[t+4]+256*this[t+5]+65536*this[t+6]+(r<<24);return(BigInt(n)<>>=0,"offset");const e=this[t],r=this[t+7];void 0!==e&&void 0!==r||F(t,this.length-8);const n=(e<<24)+65536*this[++t]+256*this[++t]+this[++t];return(BigInt(n)<>>=0,e||x(t,4,this.length),o.read(this,t,!0,23,4)},a.prototype.readFloatBE=function(t,e){return t>>>=0,e||x(t,4,this.length),o.read(this,t,!1,23,4)},a.prototype.readDoubleLE=function(t,e){return t>>>=0,e||x(t,8,this.length),o.read(this,t,!0,52,8)},a.prototype.readDoubleBE=function(t,e){return t>>>=0,e||x(t,8,this.length),o.read(this,t,!1,52,8)},a.prototype.writeUintLE=a.prototype.writeUIntLE=function(t,e,r,n){t=+t,e>>>=0,r>>>=0,n||R(this,t,e,r,Math.pow(2,8*r)-1,0);let o=1,i=0;for(this[e]=255&t;++i>>=0,r>>>=0,n||R(this,t,e,r,Math.pow(2,8*r)-1,0);let o=r-1,i=1;for(this[e+o]=255&t;--o>=0&&(i*=256);)this[e+o]=t/i&255;return e+r},a.prototype.writeUint8=a.prototype.writeUInt8=function(t,e,r){return t=+t,e>>>=0,r||R(this,t,e,1,255,0),this[e]=255&t,e+1},a.prototype.writeUint16LE=a.prototype.writeUInt16LE=function(t,e,r){return t=+t,e>>>=0,r||R(this,t,e,2,65535,0),this[e]=255&t,this[e+1]=t>>>8,e+2},a.prototype.writeUint16BE=a.prototype.writeUInt16BE=function(t,e,r){return t=+t,e>>>=0,r||R(this,t,e,2,65535,0),this[e]=t>>>8,this[e+1]=255&t,e+2},a.prototype.writeUint32LE=a.prototype.writeUInt32LE=function(t,e,r){return t=+t,e>>>=0,r||R(this,t,e,4,4294967295,0),this[e+3]=t>>>24,this[e+2]=t>>>16,this[e+1]=t>>>8,this[e]=255&t,e+4},a.prototype.writeUint32BE=a.prototype.writeUInt32BE=function(t,e,r){return t=+t,e>>>=0,r||R(this,t,e,4,4294967295,0),this[e]=t>>>24,this[e+1]=t>>>16,this[e+2]=t>>>8,this[e+3]=255&t,e+4},a.prototype.writeBigUInt64LE=H((function(t,e=0){return L(this,t,e,BigInt(0),BigInt("0xffffffffffffffff"))})),a.prototype.writeBigUInt64BE=H((function(t,e=0){return N(this,t,e,BigInt(0),BigInt("0xffffffffffffffff"))})),a.prototype.writeIntLE=function(t,e,r,n){if(t=+t,e>>>=0,!n){const n=Math.pow(2,8*r-1);R(this,t,e,r,n-1,-n)}let o=0,i=1,u=0;for(this[e]=255&t;++o>0)-u&255;return e+r},a.prototype.writeIntBE=function(t,e,r,n){if(t=+t,e>>>=0,!n){const n=Math.pow(2,8*r-1);R(this,t,e,r,n-1,-n)}let o=r-1,i=1,u=0;for(this[e+o]=255&t;--o>=0&&(i*=256);)t<0&&0===u&&0!==this[e+o+1]&&(u=1),this[e+o]=(t/i>>0)-u&255;return e+r},a.prototype.writeInt8=function(t,e,r){return t=+t,e>>>=0,r||R(this,t,e,1,127,-128),t<0&&(t=255+t+1),this[e]=255&t,e+1},a.prototype.writeInt16LE=function(t,e,r){return t=+t,e>>>=0,r||R(this,t,e,2,32767,-32768),this[e]=255&t,this[e+1]=t>>>8,e+2},a.prototype.writeInt16BE=function(t,e,r){return t=+t,e>>>=0,r||R(this,t,e,2,32767,-32768),this[e]=t>>>8,this[e+1]=255&t,e+2},a.prototype.writeInt32LE=function(t,e,r){return t=+t,e>>>=0,r||R(this,t,e,4,2147483647,-2147483648),this[e]=255&t,this[e+1]=t>>>8,this[e+2]=t>>>16,this[e+3]=t>>>24,e+4},a.prototype.writeInt32BE=function(t,e,r){return t=+t,e>>>=0,r||R(this,t,e,4,2147483647,-2147483648),t<0&&(t=4294967295+t+1),this[e]=t>>>24,this[e+1]=t>>>16,this[e+2]=t>>>8,this[e+3]=255&t,e+4},a.prototype.writeBigInt64LE=H((function(t,e=0){return L(this,t,e,-BigInt("0x8000000000000000"),BigInt("0x7fffffffffffffff"))})),a.prototype.writeBigInt64BE=H((function(t,e=0){return N(this,t,e,-BigInt("0x8000000000000000"),BigInt("0x7fffffffffffffff"))})),a.prototype.writeFloatLE=function(t,e,r){return j(this,t,e,!0,r)},a.prototype.writeFloatBE=function(t,e,r){return j(this,t,e,!1,r)},a.prototype.writeDoubleLE=function(t,e,r){return C(this,t,e,!0,r)},a.prototype.writeDoubleBE=function(t,e,r){return C(this,t,e,!1,r)},a.prototype.copy=function(t,e,r,n){if(!a.isBuffer(t))throw new TypeError("argument should be a Buffer");if(r||(r=0),n||0===n||(n=this.length),e>=t.length&&(e=t.length),e||(e=0),n>0&&n=this.length)throw new RangeError("Index out of range");if(n<0)throw new RangeError("sourceEnd out of bounds");n>this.length&&(n=this.length),t.length-e>>=0,r=void 0===r?this.length:r>>>0,t||(t=0),"number"==typeof t)for(o=e;o=n+4;r-=3)e=`_${t.slice(r-3,r)}${e}`;return`${t.slice(0,r)}${e}`}function z(t,e,r,n,o,i){if(t>r||t3?0===e||e===BigInt(0)?`>= 0${n} and < 2${n} ** ${8*(i+1)}${n}`:`>= -(2${n} ** ${8*(i+1)-1}${n}) and < 2 ** ${8*(i+1)-1}${n}`:`>= ${e}${n} and <= ${r}${n}`,new q.ERR_OUT_OF_RANGE("value",o,t)}!function(t,e,r){$(e,"offset"),void 0!==t[e]&&void 0!==t[e+r]||F(e,t.length-(r+1))}(n,o,i)}function $(t,e){if("number"!=typeof t)throw new q.ERR_INVALID_ARG_TYPE(e,"number",t)}function F(t,e,r){if(Math.floor(t)!==t)throw $(t,r),new q.ERR_OUT_OF_RANGE(r||"offset","an integer",t);if(e<0)throw new q.ERR_BUFFER_OUT_OF_BOUNDS;throw new q.ERR_OUT_OF_RANGE(r||"offset",`>= ${r?1:0} and <= ${e}`,t)}K("ERR_BUFFER_OUT_OF_BOUNDS",(function(t){return t?`${t} is outside of buffer bounds`:"Attempt to access memory outside buffer bounds"}),RangeError),K("ERR_INVALID_ARG_TYPE",(function(t,e){return`The "${t}" argument must be of type number. Received type ${typeof e}`}),TypeError),K("ERR_OUT_OF_RANGE",(function(t,e,r){let n=`The value of "${t}" is out of range.`,o=r;return Number.isInteger(r)&&Math.abs(r)>2**32?o=D(String(r)):"bigint"==typeof r&&(o=String(r),(r>BigInt(2)**BigInt(32)||r<-(BigInt(2)**BigInt(32)))&&(o=D(o)),o+="n"),n+=` It must be ${e}. Received ${o}`,n}),RangeError);const Z=/[^+/0-9A-Za-z-_]/g;function J(t,e){let r;e=e||1/0;const n=t.length;let o=null;const i=[];for(let u=0;u55295&&r<57344){if(!o){if(r>56319){(e-=3)>-1&&i.push(239,191,189);continue}if(u+1===n){(e-=3)>-1&&i.push(239,191,189);continue}o=r;continue}if(r<56320){(e-=3)>-1&&i.push(239,191,189),o=r;continue}r=65536+(o-55296<<10|r-56320)}else o&&(e-=3)>-1&&i.push(239,191,189);if(o=null,r<128){if((e-=1)<0)break;i.push(r)}else if(r<2048){if((e-=2)<0)break;i.push(r>>6|192,63&r|128)}else if(r<65536){if((e-=3)<0)break;i.push(r>>12|224,r>>6&63|128,63&r|128)}else{if(!(r<1114112))throw new Error("Invalid code point");if((e-=4)<0)break;i.push(r>>18|240,r>>12&63|128,r>>6&63|128,63&r|128)}}return i}function G(t){return n.toByteArray(function(t){if((t=(t=t.split("=")[0]).trim().replace(Z,"")).length<2)return"";for(;t.length%4!=0;)t+="=";return t}(t))}function Y(t,e,r,n){let o;for(o=0;o=e.length||o>=t.length);++o)e[o+r]=t[o];return o}function V(t,e){return t instanceof e||null!=t&&null!=t.constructor&&null!=t.constructor.name&&t.constructor.name===e.name}function W(t){return t!=t}const X=function(){const t="0123456789abcdef",e=new Array(256);for(let r=0;r<16;++r){const n=16*r;for(let o=0;o<16;++o)e[n+o]=t[r]+t[o]}return e}();function H(t){return"undefined"==typeof BigInt?Q:t}function Q(){throw new Error("BigInt not supported")}},284:t=>{var e=function(){if("object"==typeof self&&self)return self;if("object"==typeof window&&window)return window;throw new Error("Unable to resolve global `this`")};t.exports=function(){if(this)return this;if("object"==typeof globalThis&&globalThis)return globalThis;try{Object.defineProperty(Object.prototype,"__global__",{get:function(){return this},configurable:!0})}catch(t){return e()}try{return __global__||e()}finally{delete Object.prototype.__global__}}()},645:(t,e)=>{e.read=function(t,e,r,n,o){var i,u,s=8*o-n-1,a=(1<>1,c=-7,p=r?o-1:0,l=r?-1:1,h=t[e+p];for(p+=l,i=h&(1<<-c)-1,h>>=-c,c+=s;c>0;i=256*i+t[e+p],p+=l,c-=8);for(u=i&(1<<-c)-1,i>>=-c,c+=n;c>0;u=256*u+t[e+p],p+=l,c-=8);if(0===i)i=1-f;else{if(i===a)return u?NaN:1/0*(h?-1:1);u+=Math.pow(2,n),i-=f}return(h?-1:1)*u*Math.pow(2,i-n)},e.write=function(t,e,r,n,o,i){var u,s,a,f=8*i-o-1,c=(1<>1,l=23===o?Math.pow(2,-24)-Math.pow(2,-77):0,h=n?0:i-1,y=n?1:-1,g=e<0||0===e&&1/e<0?1:0;for(e=Math.abs(e),isNaN(e)||e===1/0?(s=isNaN(e)?1:0,u=c):(u=Math.floor(Math.log(e)/Math.LN2),e*(a=Math.pow(2,-u))<1&&(u--,a*=2),(e+=u+p>=1?l/a:l*Math.pow(2,1-p))*a>=2&&(u++,a/=2),u+p>=c?(s=0,u=c):u+p>=1?(s=(e*a-1)*Math.pow(2,o),u+=p):(s=e*Math.pow(2,p-1)*Math.pow(2,o),u=0));o>=8;t[r+h]=255&s,h+=y,s/=256,o-=8);for(u=u<0;t[r+h]=255&u,h+=y,u/=256,f-=8);t[r+h-y]|=128*g}},7435:(t,e)=>{e.endianness=function(){return"LE"},e.hostname=function(){return"undefined"!=typeof location?location.hostname:""},e.loadavg=function(){return[]},e.uptime=function(){return 0},e.freemem=function(){return Number.MAX_VALUE},e.totalmem=function(){return Number.MAX_VALUE},e.cpus=function(){return[]},e.type=function(){return"Browser"},e.release=function(){return"undefined"!=typeof navigator?navigator.appVersion:""},e.networkInterfaces=e.getNetworkInterfaces=function(){return{}},e.arch=function(){return"javascript"},e.platform=function(){return"browser"},e.tmpdir=e.tmpDir=function(){return"/tmp"},e.EOL="\n",e.homedir=function(){return"/"}},655:(t,e,r)=>{"use strict";r.r(e),r.d(e,{__assign:()=>i,__asyncDelegator:()=>E,__asyncGenerator:()=>m,__asyncValues:()=>_,__await:()=>b,__awaiter:()=>c,__classPrivateFieldGet:()=>I,__classPrivateFieldSet:()=>U,__createBinding:()=>l,__decorate:()=>s,__exportStar:()=>h,__extends:()=>o,__generator:()=>p,__importDefault:()=>O,__importStar:()=>S,__makeTemplateObject:()=>A,__metadata:()=>f,__param:()=>a,__read:()=>g,__rest:()=>u,__spread:()=>v,__spreadArray:()=>w,__spreadArrays:()=>d,__values:()=>y});var n=function(t,e){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r])},n(t,e)};function o(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Class extends value "+String(e)+" is not a constructor or null");function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)}var i=function(){return i=Object.assign||function(t){for(var e,r=1,n=arguments.length;r=0;s--)(o=t[s])&&(u=(i<3?o(u):i>3?o(e,r,u):o(e,r))||u);return i>3&&u&&Object.defineProperty(e,r,u),u}function a(t,e){return function(r,n){e(r,n,t)}}function f(t,e){if("object"==typeof Reflect&&"function"==typeof Reflect.metadata)return Reflect.metadata(t,e)}function c(t,e,r,n){return new(r||(r=Promise))((function(o,i){function u(t){try{a(n.next(t))}catch(t){i(t)}}function s(t){try{a(n.throw(t))}catch(t){i(t)}}function a(t){var e;t.done?o(t.value):(e=t.value,e instanceof r?e:new r((function(t){t(e)}))).then(u,s)}a((n=n.apply(t,e||[])).next())}))}function p(t,e){var r,n,o,i,u={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return i={next:s(0),throw:s(1),return:s(2)},"function"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function s(i){return function(s){return function(i){if(r)throw new TypeError("Generator is already executing.");for(;u;)try{if(r=1,n&&(o=2&i[0]?n.return:i[0]?n.throw||((o=n.return)&&o.call(n),0):n.next)&&!(o=o.call(n,i[1])).done)return o;switch(n=0,o&&(i=[2&i[0],o.value]),i[0]){case 0:case 1:o=i;break;case 4:return u.label++,{value:i[1],done:!1};case 5:u.label++,n=i[1],i=[0];continue;case 7:i=u.ops.pop(),u.trys.pop();continue;default:if(!((o=(o=u.trys).length>0&&o[o.length-1])||6!==i[0]&&2!==i[0])){u=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]=t.length&&(t=void 0),{value:t&&t[n++],done:!t}}};throw new TypeError(e?"Object is not iterable.":"Symbol.iterator is not defined.")}function g(t,e){var r="function"==typeof Symbol&&t[Symbol.iterator];if(!r)return t;var n,o,i=r.call(t),u=[];try{for(;(void 0===e||e-- >0)&&!(n=i.next()).done;)u.push(n.value)}catch(t){o={error:t}}finally{try{n&&!n.done&&(r=i.return)&&r.call(i)}finally{if(o)throw o.error}}return u}function v(){for(var t=[],e=0;e1||s(t,e)}))})}function s(t,e){try{(r=o[t](e)).value instanceof b?Promise.resolve(r.value.v).then(a,f):c(i[0][2],r)}catch(t){c(i[0][3],t)}var r}function a(t){s("next",t)}function f(t){s("throw",t)}function c(t,e){t(e),i.shift(),i.length&&s(i[0][0],i[0][1])}}function E(t){var e,r;return e={},n("next"),n("throw",(function(t){throw t})),n("return"),e[Symbol.iterator]=function(){return this},e;function n(n,o){e[n]=t[n]?function(e){return(r=!r)?{value:b(t[n](e)),done:"return"===n}:o?o(e):e}:o}}function _(t){if(!Symbol.asyncIterator)throw new TypeError("Symbol.asyncIterator is not defined.");var e,r=t[Symbol.asyncIterator];return r?r.call(t):(t=y(t),e={},n("next"),n("throw"),n("return"),e[Symbol.asyncIterator]=function(){return this},e);function n(r){e[r]=t[r]&&function(e){return new Promise((function(n,o){!function(t,e,r,n){Promise.resolve(n).then((function(e){t({value:e,done:r})}),e)}(n,o,(e=t[r](e)).done,e.value)}))}}}function A(t,e){return Object.defineProperty?Object.defineProperty(t,"raw",{value:e}):t.raw=e,t}var B=Object.create?function(t,e){Object.defineProperty(t,"default",{enumerable:!0,value:e})}:function(t,e){t.default=e};function S(t){if(t&&t.__esModule)return t;var e={};if(null!=t)for(var r in t)"default"!==r&&Object.prototype.hasOwnProperty.call(t,r)&&l(e,t,r);return B(e,t),e}function O(t){return t&&t.__esModule?t:{default:t}}function I(t,e,r,n){if("a"===r&&!n)throw new TypeError("Private accessor was defined without a getter");if("function"==typeof e?t!==e||!n:!e.has(t))throw new TypeError("Cannot read private member from an object whose class did not declare it");return"m"===r?n:"a"===r?n.call(t):n?n.value:e.get(t)}function U(t,e,r,n,o){if("m"===n)throw new TypeError("Private method is not writable");if("a"===n&&!o)throw new TypeError("Private accessor was defined without a setter");if("function"==typeof e?t!==e||!o:!e.has(t))throw new TypeError("Cannot write private member to an object whose class did not declare it");return"a"===n?o.call(t,r):o?o.value=r:e.set(t,r),r}},5840:(t,e,r)=>{var n;if("object"==typeof globalThis)n=globalThis;else try{n=r(284)}catch(t){}finally{if(n||"undefined"==typeof window||(n=window),!n)throw new Error("Could not determine global this")}var o=n.WebSocket||n.MozWebSocket,i=r(9387);function u(t,e){return e?new o(t,e):new o(t)}o&&["CONNECTING","OPEN","CLOSING","CLOSED"].forEach((function(t){Object.defineProperty(u,t,{get:function(){return o[t]}})})),t.exports={w3cwebsocket:o?u:null,version:i}},9387:(t,e,r)=>{t.exports=r(9794).version},4678:(t,e,r)=>{"use strict";r.r(e),r.d(e,{clear:()=>g,createStore:()=>i,del:()=>h,delMany:()=>y,entries:()=>b,get:()=>a,getMany:()=>p,keys:()=>d,promisifyRequest:()=>o,set:()=>f,setMany:()=>c,update:()=>l,values:()=>w});var n=r(4702);function o(t){return new Promise(((e,r)=>{t.oncomplete=t.onsuccess=()=>e(t.result),t.onabort=t.onerror=()=>r(t.error)}))}function i(t,e){const r=(0,n.Z)().then((()=>{const r=indexedDB.open(t);return r.onupgradeneeded=()=>r.result.createObjectStore(e),o(r)}));return(t,n)=>r.then((r=>n(r.transaction(e,t).objectStore(e))))}let u;function s(){return u||(u=i("keyval-store","keyval")),u}function a(t,e=s()){return e("readonly",(e=>o(e.get(t))))}function f(t,e,r=s()){return r("readwrite",(r=>(r.put(e,t),o(r.transaction))))}function c(t,e=s()){return e("readwrite",(e=>(t.forEach((t=>e.put(t[1],t[0]))),o(e.transaction))))}function p(t,e=s()){return e("readonly",(e=>Promise.all(t.map((t=>o(e.get(t)))))))}function l(t,e,r=s()){return r("readwrite",(r=>new Promise(((n,i)=>{r.get(t).onsuccess=function(){try{r.put(e(this.result),t),n(o(r.transaction))}catch(t){i(t)}}}))))}function h(t,e=s()){return e("readwrite",(e=>(e.delete(t),o(e.transaction))))}function y(t,e=s()){return e("readwrite",(e=>(t.forEach((t=>e.delete(t))),o(e.transaction))))}function g(t=s()){return t("readwrite",(t=>(t.clear(),o(t.transaction))))}function v(t,e){return t.openCursor().onsuccess=function(){this.result&&(e(this.result),this.result.continue())},o(t.transaction)}function d(t=s()){return t("readonly",(t=>{if(t.getAllKeys)return o(t.getAllKeys());const e=[];return v(t,(t=>e.push(t.key))).then((()=>e))}))}function w(t=s()){return t("readonly",(t=>{if(t.getAll)return o(t.getAll());const e=[];return v(t,(t=>e.push(t.value))).then((()=>e))}))}function b(t=s()){return t("readonly",(e=>{if(e.getAll&&e.getAllKeys)return Promise.all([o(e.getAllKeys()),o(e.getAll())]).then((([t,e])=>t.map(((t,r)=>[t,e[r]]))));const r=[];return t("readonly",(t=>v(t,(t=>r.push([t.key,t.value]))).then((()=>r))))}))}},4702:(t,e,r)=>{"use strict";r.d(e,{Z:()=>n});const n=function(){var t;return!navigator.userAgentData&&/Safari\//.test(navigator.userAgent)&&!/Chrom(e|ium)\//.test(navigator.userAgent)&&indexedDB.databases?new Promise((function(e){var r=function(){return indexedDB.databases().finally(e)};t=setInterval(r,100),r()})).finally((function(){return clearInterval(t)})):Promise.resolve()}},9794:t=>{"use strict";t.exports={version:"1.0.34"}}}]); -//# sourceMappingURL=313.5cd1718104a79212da23.js.map \ No newline at end of file +/*! For license information please see 131.ed8e224f75df6793c3e1.js.LICENSE.txt */ +(self.webpackChunktelegram_t=self.webpackChunktelegram_t||[]).push([[131],{8136:(t,e,r)=>{"use strict";r.r(e),r.d(e,{CTR:()=>d,IGE:()=>v,default:()=>w});var n=new Uint8Array(256),o=new Uint8Array(256),i=new Uint32Array(256),u=new Uint32Array(256),s=new Uint32Array(256),a=new Uint32Array(256),f=new Uint32Array(256),c=new Uint32Array(256),l=new Uint32Array(256),p=new Uint32Array(256);function h(t){if(t instanceof Uint32Array)return t;if("string"==typeof t){if(t.length%4!=0)for(var e=t.length%4;e<=4;e++)t+="\0x00";var r=new Uint32Array(t.length/4);for(e=0;e>7),v[g[m]^m]=m;for(;!n[d];d^=t||1)r=(r=w^w<<1^w<<2^w<<3^w<<4)>>8^255&r^99,n[d]=r,o[r]=d,y=16843009*g[e=g[t=g[d]]]^65537*e^257*t^16843008*d,h=257*g[r]^16843008*r,i[d]=h=h<<24^h>>>8,u[d]=h=h<<24^h>>>8,s[d]=h=h<<24^h>>>8,a[d]=h=h<<24^h>>>8,f[r]=y=y<<24^y>>>8,c[r]=y=y<<24^y>>>8,l[r]=y=y<<24^y>>>8,p[r]=y=y<<24^y>>>8,w=v[w]||1}();var g=function(){function t(t){var e=h(t);if(4!==e.length&&6!==e.length&&8!==e.length)throw new Error("Invalid key size");this.encKey=new Uint32Array(4*e.length+28),this.decKey=new Uint32Array(4*e.length+28),this.encKey.set(e);for(var r,o=1,i=e.length;i<4*e.length+28;i++)r=this.encKey[i-1],(i%e.length==0||8===e.length&&i%e.length==4)&&(r=n[r>>>24]<<24^n[r>>16&255]<<16^n[r>>8&255]<<8^n[255&r],i%e.length==0&&(r=r<<8^r>>>24^o<<24,o=o<<1^283*(o>>7))),this.encKey[i]=this.encKey[i-e.length]^r;for(var u=0;i;u++,i--)r=this.encKey[3&u?i:i-4],this.decKey[u]=i<=4||u<4?r:f[n[r>>>24]]^c[n[r>>16&255]]^l[n[r>>8&255]]^p[n[255&r]]}return t.prototype.encrypt=function(t){for(var e,r,o,f=h(t),c=new Uint32Array(4),l=f[0]^this.encKey[0],p=f[1]^this.encKey[1],y=f[2]^this.encKey[2],g=f[3]^this.encKey[3],v=this.encKey.length/4-2,d=4,w=0;w>>24]^u[p>>16&255]^s[y>>8&255]^a[255&g]^this.encKey[d],r=i[p>>>24]^u[y>>16&255]^s[g>>8&255]^a[255&l]^this.encKey[d+1],o=i[y>>>24]^u[g>>16&255]^s[l>>8&255]^a[255&p]^this.encKey[d+2],g=i[g>>>24]^u[l>>16&255]^s[p>>8&255]^a[255&y]^this.encKey[d+3],l=e,p=r,y=o,d+=4;for(w=0;w<4;w++)c[w]=n[l>>>24]<<24^n[p>>16&255]<<16^n[y>>8&255]<<8^n[255&g]^this.encKey[d++],e=l,l=p,p=y,y=g,g=e;return c},t.prototype.decrypt=function(t){for(var e,r,n,i=h(t),u=new Uint32Array(4),s=i[0]^this.decKey[0],a=i[3]^this.decKey[1],y=i[2]^this.decKey[2],g=i[1]^this.decKey[3],v=this.decKey.length/4-2,d=4,w=0;w>>24]^c[a>>16&255]^l[y>>8&255]^p[255&g]^this.decKey[d],r=f[a>>>24]^c[y>>16&255]^l[g>>8&255]^p[255&s]^this.decKey[d+1],n=f[y>>>24]^c[g>>16&255]^l[s>>8&255]^p[255&a]^this.decKey[d+2],g=f[g>>>24]^c[s>>16&255]^l[a>>8&255]^p[255&y]^this.decKey[d+3],s=e,a=r,y=n,d+=4;for(w=0;w<4;w++)u[3&-w]=o[s>>>24]<<24^o[a>>16&255]<<16^o[y>>8&255]<<8^o[255&g]^this.decKey[d++],e=s,s=a,a=y,y=g,g=e;return u},t}(),v=function(){function t(t,e,r){void 0===r&&(r=16),this.key=h(t),this.iv=h(e),this.cipher=new g(t),this.blockSize=r/4}return t.prototype.encrypt=function(t,e){for(var r=h(t),n=e||new Uint32Array(r.length),o=this.iv.subarray(this.blockSize,this.iv.length),i=this.iv.subarray(0,this.blockSize),u=new Uint32Array(this.blockSize),s=0;s=this.blockSize&&this.incrementCounter(),o&&(i-=o,o=0)}return this.offset=(this.offset+r.length%4)%4,n},t.prototype.decrypt=function(t,e){return this.encrypt(t,e)},t.prototype.incrementCounter=function(){for(var t=this.counter.length-1;t>=0&&!(++this.counter[t]<4294967295);t--);},t}();const w=g},5078:(t,e,r)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0});var n=r(655),o=r(2403),i=function(){function t(t){this._semaphore=new o.default(1,t)}return t.prototype.acquire=function(){return(0,n.__awaiter)(this,void 0,void 0,(function(){return(0,n.__generator)(this,(function(t){switch(t.label){case 0:return[4,this._semaphore.acquire()];case 1:return[2,t.sent()[1]]}}))}))},t.prototype.runExclusive=function(t){return this._semaphore.runExclusive((function(){return t()}))},t.prototype.isLocked=function(){return this._semaphore.isLocked()},t.prototype.waitForUnlock=function(){return this._semaphore.waitForUnlock()},t.prototype.release=function(){this._semaphore.release()},t.prototype.cancel=function(){return this._semaphore.cancel()},t}();e.default=i},2403:(t,e,r)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0});var n=r(655),o=r(1764),i=function(){function t(t,e){if(void 0===e&&(e=o.E_CANCELED),this._maxConcurrency=t,this._cancelError=e,this._queue=[],this._waiters=[],t<=0)throw new Error("semaphore must be initialized to a positive value");this._value=t}return t.prototype.acquire=function(){var t=this,e=this.isLocked(),r=new Promise((function(e,r){return t._queue.push({resolve:e,reject:r})}));return e||this._dispatch(),r},t.prototype.runExclusive=function(t){return(0,n.__awaiter)(this,void 0,void 0,(function(){var e,r,o;return(0,n.__generator)(this,(function(n){switch(n.label){case 0:return[4,this.acquire()];case 1:e=n.sent(),r=e[0],o=e[1],n.label=2;case 2:return n.trys.push([2,,4,5]),[4,t(r)];case 3:return[2,n.sent()];case 4:return o(),[7];case 5:return[2]}}))}))},t.prototype.waitForUnlock=function(){return(0,n.__awaiter)(this,void 0,void 0,(function(){var t=this;return(0,n.__generator)(this,(function(e){return this.isLocked()?[2,new Promise((function(e){return t._waiters.push({resolve:e})}))]:[2,Promise.resolve()]}))}))},t.prototype.isLocked=function(){return this._value<=0},t.prototype.release=function(){if(this._maxConcurrency>1)throw new Error("this method is unavailable on semaphores with concurrency > 1; use the scoped release returned by acquire instead");if(this._currentReleaser){var t=this._currentReleaser;this._currentReleaser=void 0,t()}},t.prototype.cancel=function(){var t=this;this._queue.forEach((function(e){return e.reject(t._cancelError)})),this._queue=[]},t.prototype._dispatch=function(){var t=this,e=this._queue.shift();if(e){var r=!1;this._currentReleaser=function(){r||(r=!0,t._value++,t._resolveWaiters(),t._dispatch())},e.resolve([this._value--,this._currentReleaser])}},t.prototype._resolveWaiters=function(){this._waiters.forEach((function(t){return t.resolve()})),this._waiters=[]},t}();e.default=i},1764:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.E_CANCELED=e.E_ALREADY_LOCKED=e.E_TIMEOUT=void 0,e.E_TIMEOUT=new Error("timeout while waiting for mutex to become available"),e.E_ALREADY_LOCKED=new Error("mutex already locked"),e.E_CANCELED=new Error("request for lock canceled")},8125:(t,e,r)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.tryAcquire=e.withTimeout=e.Semaphore=e.Mutex=void 0;var n=r(655),o=r(5078);Object.defineProperty(e,"Mutex",{enumerable:!0,get:function(){return o.default}});var i=r(2403);Object.defineProperty(e,"Semaphore",{enumerable:!0,get:function(){return i.default}});var u=r(1960);Object.defineProperty(e,"withTimeout",{enumerable:!0,get:function(){return u.withTimeout}});var s=r(3143);Object.defineProperty(e,"tryAcquire",{enumerable:!0,get:function(){return s.tryAcquire}}),(0,n.__exportStar)(r(1764),e)},3143:(t,e,r)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.tryAcquire=void 0;var n=r(1764),o=r(1960);e.tryAcquire=function(t,e){return void 0===e&&(e=n.E_ALREADY_LOCKED),(0,o.withTimeout)(t,0,e)}},1960:(t,e,r)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.withTimeout=void 0;var n=r(655),o=r(1764);e.withTimeout=function(t,e,r){var i=this;return void 0===r&&(r=o.E_TIMEOUT),{acquire:function(){return new Promise((function(o,u){return(0,n.__awaiter)(i,void 0,void 0,(function(){var i,s,a,f;return(0,n.__generator)(this,(function(n){switch(n.label){case 0:i=!1,s=setTimeout((function(){i=!0,u(r)}),e),n.label=1;case 1:return n.trys.push([1,3,,4]),[4,t.acquire()];case 2:return a=n.sent(),i?(Array.isArray(a)?a[1]:a)():(clearTimeout(s),o(a)),[3,4];case 3:return f=n.sent(),i||(clearTimeout(s),u(f)),[3,4];case 4:return[2]}}))}))}))},runExclusive:function(t){return(0,n.__awaiter)(this,void 0,void 0,(function(){var e,r;return(0,n.__generator)(this,(function(n){switch(n.label){case 0:e=function(){},n.label=1;case 1:return n.trys.push([1,,7,8]),[4,this.acquire()];case 2:return r=n.sent(),Array.isArray(r)?(e=r[1],[4,t(r[0])]):[3,4];case 3:return[2,n.sent()];case 4:return e=r,[4,t()];case 5:return[2,n.sent()];case 6:return[3,8];case 7:return e(),[7];case 8:return[2]}}))}))},release:function(){t.release()},cancel:function(){return t.cancel()},waitForUnlock:function(){return t.waitForUnlock()},isLocked:function(){return t.isLocked()}}}},9742:(t,e)=>{"use strict";e.byteLength=function(t){var e=a(t),r=e[0],n=e[1];return 3*(r+n)/4-n},e.toByteArray=function(t){var e,r,i=a(t),u=i[0],s=i[1],f=new o(function(t,e,r){return 3*(e+r)/4-r}(0,u,s)),c=0,l=s>0?u-4:u;for(r=0;r>16&255,f[c++]=e>>8&255,f[c++]=255&e;return 2===s&&(e=n[t.charCodeAt(r)]<<2|n[t.charCodeAt(r+1)]>>4,f[c++]=255&e),1===s&&(e=n[t.charCodeAt(r)]<<10|n[t.charCodeAt(r+1)]<<4|n[t.charCodeAt(r+2)]>>2,f[c++]=e>>8&255,f[c++]=255&e),f},e.fromByteArray=function(t){for(var e,n=t.length,o=n%3,i=[],u=16383,s=0,a=n-o;sa?a:s+u));return 1===o?(e=t[n-1],i.push(r[e>>2]+r[e<<4&63]+"==")):2===o&&(e=(t[n-2]<<8)+t[n-1],i.push(r[e>>10]+r[e>>4&63]+r[e<<2&63]+"=")),i.join("")};for(var r=[],n=[],o="undefined"!=typeof Uint8Array?Uint8Array:Array,i="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",u=0,s=i.length;u0)throw new Error("Invalid string. Length must be a multiple of 4");var r=t.indexOf("=");return-1===r&&(r=e),[r,r===e?0:4-r%4]}function f(t,e,n){for(var o,i,u=[],s=e;s>18&63]+r[i>>12&63]+r[i>>6&63]+r[63&i]);return u.join("")}n["-".charCodeAt(0)]=62,n["_".charCodeAt(0)]=63},4736:(t,e,r)=>{var n;t=r.nmd(t);var o=function(t){"use strict";var e=1e7,r=9007199254740992,n=p(r),i="0123456789abcdefghijklmnopqrstuvwxyz",u="function"==typeof BigInt;function s(t,e,r,n){return void 0===t?s[0]:void 0===e||10==+e&&!r?V(t):F(t,e,r,n)}function a(t,e){this.value=t,this.sign=e,this.isSmall=!1}function f(t){this.value=t,this.sign=t<0,this.isSmall=!0}function c(t){this.value=t}function l(t){return-r0?Math.floor(t):Math.ceil(t)}function d(t,r){var n,o,i=t.length,u=r.length,s=new Array(i),a=0,f=e;for(o=0;o=f?1:0,s[o]=n-a*f;for(;o0&&s.push(a),s}function w(t,e){return t.length>=e.length?d(t,e):d(e,t)}function m(t,r){var n,o,i=t.length,u=new Array(i),s=e;for(o=0;o0;)u[o++]=r%s,r=Math.floor(r/s);return u}function b(t,r){var n,o,i=t.length,u=r.length,s=new Array(i),a=0,f=e;for(n=0;n0;)u[o++]=a%s,a=Math.floor(a/s);return u}function B(t,e){for(var r=[];e-- >0;)r.push(0);return r.concat(t)}function S(t,e){var r=Math.max(t.length,e.length);if(r<=30)return _(t,e);r=Math.ceil(r/2);var n=t.slice(r),o=t.slice(0,r),i=e.slice(r),u=e.slice(0,r),s=S(o,u),a=S(n,i),f=S(w(o,n),w(u,i)),c=w(w(s,B(b(b(f,s),a),r)),B(a,2*r));return y(c),c}function O(t,r,n){return new a(t=0;--r)o=(i=1e7*o+t[r])-(n=v(i/e))*e,s[r]=0|n;return[s,0|o]}function T(t,r){var n,o=V(r);if(u)return[new c(t.value/o.value),new c(t.value%o.value)];var i,l=t.value,d=o.value;if(0===d)throw new Error("Cannot divide by zero");if(t.isSmall)return o.isSmall?[new f(v(l/d)),new f(l%d)]:[s[0],t];if(o.isSmall){if(1===d)return[t,s[0]];if(-1==d)return[t.negate(),s[0]];var w=Math.abs(d);if(w=0;o--){for(n=p-1,w[o+l]!==v&&(n=Math.floor((w[o+l]*p+w[o+l-1])/v)),i=0,u=0,a=m.length,s=0;sf&&(i=(i+1)*p),n=Math.ceil(i/u);do{if(P(s=A(r,n),l)<=0)break;n--}while(n);c.push(n),l=b(l,s)}return c.reverse(),[h(c),h(l)]}(l,d),i=n[0];var _=t.sign!==o.sign,B=n[1],S=t.sign;return"number"==typeof i?(_&&(i=-i),i=new f(i)):i=new a(i,_),"number"==typeof B?(S&&(B=-B),B=new f(B)):B=new a(B,S),[i,B]}function P(t,e){if(t.length!==e.length)return t.length>e.length?1:-1;for(var r=t.length-1;r>=0;r--)if(t[r]!==e[r])return t[r]>e[r]?1:-1;return 0}function M(t){var e=t.abs();return!e.isUnit()&&(!!(e.equals(2)||e.equals(3)||e.equals(5))||!(e.isEven()||e.isDivisibleBy(3)||e.isDivisibleBy(5))&&(!!e.lesser(49)||void 0))}function x(t,e){for(var r,n,i,u=t.prev(),s=u,a=0;s.isEven();)s=s.divide(2),a++;t:for(n=0;n=0?n=b(t,e):(n=b(e,t),r=!r),"number"==typeof(n=h(n))?(r&&(n=-n),new f(n)):new a(n,r)}(r,n,this.sign)},a.prototype.minus=a.prototype.subtract,f.prototype.subtract=function(t){var e=V(t),r=this.value;if(r<0!==e.sign)return this.add(e.negate());var n=e.value;return e.isSmall?new f(r-n):E(n,Math.abs(r),r>=0)},f.prototype.minus=f.prototype.subtract,c.prototype.subtract=function(t){return new c(this.value-V(t).value)},c.prototype.minus=c.prototype.subtract,a.prototype.negate=function(){return new a(this.value,!this.sign)},f.prototype.negate=function(){var t=this.sign,e=new f(-this.value);return e.sign=!t,e},c.prototype.negate=function(){return new c(-this.value)},a.prototype.abs=function(){return new a(this.value,!1)},f.prototype.abs=function(){return new f(Math.abs(this.value))},c.prototype.abs=function(){return new c(this.value>=0?this.value:-this.value)},a.prototype.multiply=function(t){var r,n,o,i=V(t),u=this.value,f=i.value,c=this.sign!==i.sign;if(i.isSmall){if(0===f)return s[0];if(1===f)return this;if(-1===f)return this.negate();if((r=Math.abs(f))0?S(u,f):_(u,f),c)},a.prototype.times=a.prototype.multiply,f.prototype._multiplyBySmall=function(t){return l(t.value*this.value)?new f(t.value*this.value):O(Math.abs(t.value),p(Math.abs(this.value)),this.sign!==t.sign)},a.prototype._multiplyBySmall=function(t){return 0===t.value?s[0]:1===t.value?this:-1===t.value?this.negate():O(Math.abs(t.value),this.value,this.sign!==t.sign)},f.prototype.multiply=function(t){return V(t)._multiplyBySmall(this)},f.prototype.times=f.prototype.multiply,c.prototype.multiply=function(t){return new c(this.value*V(t).value)},c.prototype.times=c.prototype.multiply,a.prototype.square=function(){return new a(I(this.value),!1)},f.prototype.square=function(){var t=this.value*this.value;return l(t)?new f(t):new a(I(p(Math.abs(this.value))),!1)},c.prototype.square=function(t){return new c(this.value*this.value)},a.prototype.divmod=function(t){var e=T(this,t);return{quotient:e[0],remainder:e[1]}},c.prototype.divmod=f.prototype.divmod=a.prototype.divmod,a.prototype.divide=function(t){return T(this,t)[0]},c.prototype.over=c.prototype.divide=function(t){return new c(this.value/V(t).value)},f.prototype.over=f.prototype.divide=a.prototype.over=a.prototype.divide,a.prototype.mod=function(t){return T(this,t)[1]},c.prototype.mod=c.prototype.remainder=function(t){return new c(this.value%V(t).value)},f.prototype.remainder=f.prototype.mod=a.prototype.remainder=a.prototype.mod,a.prototype.pow=function(t){var e,r,n,o=V(t),i=this.value,u=o.value;if(0===u)return s[1];if(0===i)return s[0];if(1===i)return s[1];if(-1===i)return o.isEven()?s[1]:s[-1];if(o.sign)return s[0];if(!o.isSmall)throw new Error("The exponent "+o.toString()+" is too large.");if(this.isSmall&&l(e=Math.pow(i,u)))return new f(v(e));for(r=this,n=s[1];!0&u&&(n=n.times(r),--u),0!==u;)u/=2,r=r.square();return n},f.prototype.pow=a.prototype.pow,c.prototype.pow=function(t){var e=V(t),r=this.value,n=e.value,o=BigInt(0),i=BigInt(1),u=BigInt(2);if(n===o)return s[1];if(r===o)return s[0];if(r===i)return s[1];if(r===BigInt(-1))return e.isEven()?s[1]:s[-1];if(e.isNegative())return new c(o);for(var a=this,f=s[1];(n&i)===i&&(f=f.times(a),--n),n!==o;)n/=u,a=a.square();return f},a.prototype.modPow=function(t,e){if(t=V(t),(e=V(e)).isZero())throw new Error("Cannot take modPow with modulus 0");var r=s[1],n=this.mod(e);for(t.isNegative()&&(t=t.multiply(s[-1]),n=n.modInv(e));t.isPositive();){if(n.isZero())return s[0];t.isOdd()&&(r=r.multiply(n).mod(e)),t=t.divide(2),n=n.square().mod(e)}return r},c.prototype.modPow=f.prototype.modPow=a.prototype.modPow,a.prototype.compareAbs=function(t){var e=V(t),r=this.value,n=e.value;return e.isSmall?1:P(r,n)},f.prototype.compareAbs=function(t){var e=V(t),r=Math.abs(this.value),n=e.value;return e.isSmall?r===(n=Math.abs(n))?0:r>n?1:-1:-1},c.prototype.compareAbs=function(t){var e=this.value,r=V(t).value;return(e=e>=0?e:-e)===(r=r>=0?r:-r)?0:e>r?1:-1},a.prototype.compare=function(t){if(t===1/0)return-1;if(t===-1/0)return 1;var e=V(t),r=this.value,n=e.value;return this.sign!==e.sign?e.sign?1:-1:e.isSmall?this.sign?-1:1:P(r,n)*(this.sign?-1:1)},a.prototype.compareTo=a.prototype.compare,f.prototype.compare=function(t){if(t===1/0)return-1;if(t===-1/0)return 1;var e=V(t),r=this.value,n=e.value;return e.isSmall?r==n?0:r>n?1:-1:r<0!==e.sign?r<0?-1:1:r<0?1:-1},f.prototype.compareTo=f.prototype.compare,c.prototype.compare=function(t){if(t===1/0)return-1;if(t===-1/0)return 1;var e=this.value,r=V(t).value;return e===r?0:e>r?1:-1},c.prototype.compareTo=c.prototype.compare,a.prototype.equals=function(t){return 0===this.compare(t)},c.prototype.eq=c.prototype.equals=f.prototype.eq=f.prototype.equals=a.prototype.eq=a.prototype.equals,a.prototype.notEquals=function(t){return 0!==this.compare(t)},c.prototype.neq=c.prototype.notEquals=f.prototype.neq=f.prototype.notEquals=a.prototype.neq=a.prototype.notEquals,a.prototype.greater=function(t){return this.compare(t)>0},c.prototype.gt=c.prototype.greater=f.prototype.gt=f.prototype.greater=a.prototype.gt=a.prototype.greater,a.prototype.lesser=function(t){return this.compare(t)<0},c.prototype.lt=c.prototype.lesser=f.prototype.lt=f.prototype.lesser=a.prototype.lt=a.prototype.lesser,a.prototype.greaterOrEquals=function(t){return this.compare(t)>=0},c.prototype.geq=c.prototype.greaterOrEquals=f.prototype.geq=f.prototype.greaterOrEquals=a.prototype.geq=a.prototype.greaterOrEquals,a.prototype.lesserOrEquals=function(t){return this.compare(t)<=0},c.prototype.leq=c.prototype.lesserOrEquals=f.prototype.leq=f.prototype.lesserOrEquals=a.prototype.leq=a.prototype.lesserOrEquals,a.prototype.isEven=function(){return 0==(1&this.value[0])},f.prototype.isEven=function(){return 0==(1&this.value)},c.prototype.isEven=function(){return(this.value&BigInt(1))===BigInt(0)},a.prototype.isOdd=function(){return 1==(1&this.value[0])},f.prototype.isOdd=function(){return 1==(1&this.value)},c.prototype.isOdd=function(){return(this.value&BigInt(1))===BigInt(1)},a.prototype.isPositive=function(){return!this.sign},f.prototype.isPositive=function(){return this.value>0},c.prototype.isPositive=f.prototype.isPositive,a.prototype.isNegative=function(){return this.sign},f.prototype.isNegative=function(){return this.value<0},c.prototype.isNegative=f.prototype.isNegative,a.prototype.isUnit=function(){return!1},f.prototype.isUnit=function(){return 1===Math.abs(this.value)},c.prototype.isUnit=function(){return this.abs().value===BigInt(1)},a.prototype.isZero=function(){return!1},f.prototype.isZero=function(){return 0===this.value},c.prototype.isZero=function(){return this.value===BigInt(0)},a.prototype.isDivisibleBy=function(t){var e=V(t);return!e.isZero()&&(!!e.isUnit()||(0===e.compareAbs(2)?this.isEven():this.mod(e).isZero()))},c.prototype.isDivisibleBy=f.prototype.isDivisibleBy=a.prototype.isDivisibleBy,a.prototype.isPrime=function(e){var r=M(this);if(r!==t)return r;var n=this.abs(),i=n.bitLength();if(i<=64)return x(n,[2,3,5,7,11,13,17,19,23,29,31,37]);for(var u=Math.log(2)*i.toJSNumber(),s=Math.ceil(!0===e?2*Math.pow(u,2):u),a=[],f=0;f-r?new f(t-1):new a(n,!0)},c.prototype.prev=function(){return new c(this.value-BigInt(1))};for(var L=[1];2*L[L.length-1]<=e;)L.push(2*L[L.length-1]);var R=L.length,N=L[R-1];function k(t){return Math.abs(t)<=e}function j(t,e,r){e=V(e);for(var n=t.isNegative(),i=e.isNegative(),u=n?t.not():t,s=i?e.not():e,a=0,f=0,c=null,l=null,p=[];!u.isZero()||!s.isZero();)a=(c=T(u,N))[1].toJSNumber(),n&&(a=N-1-a),f=(l=T(s,N))[1].toJSNumber(),i&&(f=N-1-f),u=c[0],s=l[0],p.push(r(a,f));for(var h=0!==r(n?1:0,i?1:0)?o(-1):o(0),y=p.length-1;y>=0;y-=1)h=h.multiply(N).add(o(p[y]));return h}a.prototype.shiftLeft=function(t){var e=V(t).toJSNumber();if(!k(e))throw new Error(String(e)+" is too large for shifting.");if(e<0)return this.shiftRight(-e);var r=this;if(r.isZero())return r;for(;e>=R;)r=r.multiply(N),e-=R-1;return r.multiply(L[e])},c.prototype.shiftLeft=function(t){return t=V(t),new c(this.value<=R;){if(n.isZero()||n.isNegative()&&n.isUnit())return n;n=(e=T(n,N))[1].isNegative()?e[0].prev():e[0],r-=R-1}return(e=T(n,L[r]))[1].isNegative()?e[0].prev():e[0]},c.prototype.shiftRight=function(t){return t=V(t),new c(this.value>>t.value)},f.prototype.shiftRight=a.prototype.shiftRight,a.prototype.not=function(){return this.negate().prev()},c.prototype.not=f.prototype.not=a.prototype.not,a.prototype.and=function(t){return j(this,t,(function(t,e){return t&e}))},c.prototype.and=f.prototype.and=a.prototype.and,a.prototype.or=function(t){return j(this,t,(function(t,e){return t|e}))},c.prototype.or=f.prototype.or=a.prototype.or,a.prototype.xor=function(t){return j(this,t,(function(t,e){return t^e}))},c.prototype.xor=f.prototype.xor=a.prototype.xor;var C=1<<30;function q(t){var r=t.value,n="number"==typeof r?r|C:"bigint"==typeof r?r|BigInt(C):r[0]+r[1]*e|1073758208;return n&-n}function K(t,e){if(e.compareTo(t)<=0){var r=K(t,e.square(e)),n=r.p,i=r.e,u=n.multiply(e);return u.compareTo(t)<=0?{p:u,e:2*i+1}:{p:n,e:2*i}}return{p:o(1),e:0}}function D(t,e){return t=V(t),e=V(e),t.greater(e)?t:e}function z(t,e){return t=V(t),e=V(e),t.lesser(e)?t:e}function $(t,e){if(t=V(t).abs(),e=V(e).abs(),t.equals(e))return t;if(t.isZero())return e;if(e.isZero())return t;for(var r,n,o=s[1];t.isEven()&&e.isEven();)r=z(q(t),q(e)),t=t.divide(r),e=e.divide(r),o=o.multiply(r);for(;t.isEven();)t=t.divide(q(t));do{for(;e.isEven();)e=e.divide(q(e));t.greater(e)&&(n=e,e=t,t=n),e=e.subtract(t)}while(!e.isZero());return o.isUnit()?t:t.multiply(o)}a.prototype.bitLength=function(){var t=this;return t.compareTo(o(0))<0&&(t=t.negate().subtract(o(1))),0===t.compareTo(o(0))?o(0):o(K(t,o(2)).e).add(o(1))},c.prototype.bitLength=f.prototype.bitLength=a.prototype.bitLength;var F=function(t,e,r,n){r=r||i,t=String(t),n||(t=t.toLowerCase(),r=r.toLowerCase());var o,u=t.length,s=Math.abs(e),a={};for(o=0;o=s){if("1"===l&&1===s)continue;throw new Error(l+" is not a valid digit in base "+e+".")}e=V(e);var f=[],c="-"===t[0];for(o=c?1:0;o"!==t[o]&&o=0;n--)o=o.add(t[n].times(i)),i=i.times(e);return r?o.negate():o}function J(t,e){if((e=o(e)).isZero()){if(t.isZero())return{value:[0],isNegative:!1};throw new Error("Cannot convert nonzero numbers to base 0.")}if(e.equals(-1)){if(t.isZero())return{value:[0],isNegative:!1};if(t.isNegative())return{value:[].concat.apply([],Array.apply(null,Array(-t.toJSNumber())).map(Array.prototype.valueOf,[1,0])),isNegative:!1};var r=Array.apply(null,Array(t.toJSNumber()-1)).map(Array.prototype.valueOf,[0,1]);return r.unshift([1]),{value:[].concat.apply([],r),isNegative:!1}}var n=!1;if(t.isNegative()&&e.isPositive()&&(n=!0,t=t.abs()),e.isUnit())return t.isZero()?{value:[0],isNegative:!1}:{value:Array.apply(null,Array(t.toJSNumber())).map(Number.prototype.valueOf,1),isNegative:n};for(var i,u=[],s=t;s.isNegative()||s.compareAbs(e)>=0;){i=s.divmod(e),s=i.quotient;var a=i.remainder;a.isNegative()&&(a=e.minus(a).abs(),s=s.next()),u.push(a.toJSNumber())}return u.push(s.toJSNumber()),{value:u.reverse(),isNegative:n}}function G(t,e,r){var n=J(t,e);return(n.isNegative?"-":"")+n.value.map((function(t){return function(t,e){return t<(e=e||i).length?e[t]:"<"+t+">"}(t,r)})).join("")}function Y(t){if(l(+t)){var e=+t;if(e===v(e))return u?new c(BigInt(e)):new f(e);throw new Error("Invalid integer: "+t)}var r="-"===t[0];r&&(t=t.slice(1));var n=t.split(/e/i);if(n.length>2)throw new Error("Invalid integer: "+n.join("e"));if(2===n.length){var o=n[1];if("+"===o[0]&&(o=o.slice(1)),(o=+o)!==v(o)||!l(o))throw new Error("Invalid integer: "+o+" is not a valid exponent.");var i=n[0],s=i.indexOf(".");if(s>=0&&(o-=i.length-s-1,i=i.slice(0,s)+i.slice(s+1)),o<0)throw new Error("Cannot include negative exponent part for integers");t=i+=new Array(o+1).join("0")}if(!/^([0-9][0-9]*)$/.test(t))throw new Error("Invalid integer: "+t);if(u)return new c(BigInt(r?"-"+t:t));for(var p=[],h=t.length,g=h-7;h>0;)p.push(+t.slice(g,h)),(g-=7)<0&&(g=0),h-=7;return y(p),new a(p,r)}function V(t){return"number"==typeof t?function(t){if(u)return new c(BigInt(t));if(l(t)){if(t!==v(t))throw new Error(t+" is not an integer.");return new f(t)}return Y(t.toString())}(t):"string"==typeof t?Y(t):"bigint"==typeof t?new c(t):t}a.prototype.toArray=function(t){return J(this,t)},f.prototype.toArray=function(t){return J(this,t)},c.prototype.toArray=function(t){return J(this,t)},a.prototype.toString=function(e,r){if(e===t&&(e=10),10!==e)return G(this,e,r);for(var n,o=this.value,i=o.length,u=String(o[--i]);--i>=0;)n=String(o[i]),u+="0000000".slice(n.length)+n;return(this.sign?"-":"")+u},f.prototype.toString=function(e,r){return e===t&&(e=10),10!=e?G(this,e,r):String(this.value)},c.prototype.toString=f.prototype.toString,c.prototype.toJSON=a.prototype.toJSON=f.prototype.toJSON=function(){return this.toString()},a.prototype.valueOf=function(){return parseInt(this.toString(),10)},a.prototype.toJSNumber=a.prototype.valueOf,f.prototype.valueOf=function(){return this.value},f.prototype.toJSNumber=f.prototype.valueOf,c.prototype.valueOf=c.prototype.toJSNumber=function(){return parseInt(this.toString(),10)};for(var W=0;W<1e3;W++)s[W]=V(W),W>0&&(s[-W]=V(-W));return s.one=s[1],s.zero=s[0],s.minusOne=s[-1],s.max=D,s.min=z,s.gcd=$,s.lcm=function(t,e){return t=V(t).abs(),e=V(e).abs(),t.divide($(t,e)).multiply(e)},s.isInstance=function(t){return t instanceof a||t instanceof f||t instanceof c},s.randBetween=function(t,r,n){t=V(t),r=V(r);var o=n||Math.random,i=z(t,r),u=D(t,r).subtract(i).add(1);if(u.isSmall)return i.add(Math.floor(o()*u));for(var a=J(u,e).value,f=[],c=!0,l=0;l{"use strict";const n=r(9742),o=r(645),i="function"==typeof Symbol&&"function"==typeof Symbol.for?Symbol.for("nodejs.util.inspect.custom"):null;e.Buffer=a,e.SlowBuffer=function(t){return+t!=t&&(t=0),a.alloc(+t)},e.INSPECT_MAX_BYTES=50;const u=2147483647;function s(t){if(t>u)throw new RangeError('The value "'+t+'" is invalid for option "size"');const e=new Uint8Array(t);return Object.setPrototypeOf(e,a.prototype),e}function a(t,e,r){if("number"==typeof t){if("string"==typeof e)throw new TypeError('The "string" argument must be of type string. Received type number');return l(t)}return f(t,e,r)}function f(t,e,r){if("string"==typeof t)return function(t,e){if("string"==typeof e&&""!==e||(e="utf8"),!a.isEncoding(e))throw new TypeError("Unknown encoding: "+e);const r=0|g(t,e);let n=s(r);const o=n.write(t,e);return o!==r&&(n=n.slice(0,o)),n}(t,e);if(ArrayBuffer.isView(t))return function(t){if(V(t,Uint8Array)){const e=new Uint8Array(t);return h(e.buffer,e.byteOffset,e.byteLength)}return p(t)}(t);if(null==t)throw new TypeError("The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type "+typeof t);if(V(t,ArrayBuffer)||t&&V(t.buffer,ArrayBuffer))return h(t,e,r);if("undefined"!=typeof SharedArrayBuffer&&(V(t,SharedArrayBuffer)||t&&V(t.buffer,SharedArrayBuffer)))return h(t,e,r);if("number"==typeof t)throw new TypeError('The "value" argument must not be of type number. Received type number');const n=t.valueOf&&t.valueOf();if(null!=n&&n!==t)return a.from(n,e,r);const o=function(t){if(a.isBuffer(t)){const e=0|y(t.length),r=s(e);return 0===r.length||t.copy(r,0,0,e),r}return void 0!==t.length?"number"!=typeof t.length||W(t.length)?s(0):p(t):"Buffer"===t.type&&Array.isArray(t.data)?p(t.data):void 0}(t);if(o)return o;if("undefined"!=typeof Symbol&&null!=Symbol.toPrimitive&&"function"==typeof t[Symbol.toPrimitive])return a.from(t[Symbol.toPrimitive]("string"),e,r);throw new TypeError("The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type "+typeof t)}function c(t){if("number"!=typeof t)throw new TypeError('"size" argument must be of type number');if(t<0)throw new RangeError('The value "'+t+'" is invalid for option "size"')}function l(t){return c(t),s(t<0?0:0|y(t))}function p(t){const e=t.length<0?0:0|y(t.length),r=s(e);for(let n=0;n=u)throw new RangeError("Attempt to allocate Buffer larger than maximum size: 0x"+u.toString(16)+" bytes");return 0|t}function g(t,e){if(a.isBuffer(t))return t.length;if(ArrayBuffer.isView(t)||V(t,ArrayBuffer))return t.byteLength;if("string"!=typeof t)throw new TypeError('The "string" argument must be one of type string, Buffer, or ArrayBuffer. Received type '+typeof t);const r=t.length,n=arguments.length>2&&!0===arguments[2];if(!n&&0===r)return 0;let o=!1;for(;;)switch(e){case"ascii":case"latin1":case"binary":return r;case"utf8":case"utf-8":return J(t).length;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return 2*r;case"hex":return r>>>1;case"base64":return G(t).length;default:if(o)return n?-1:J(t).length;e=(""+e).toLowerCase(),o=!0}}function v(t,e,r){let n=!1;if((void 0===e||e<0)&&(e=0),e>this.length)return"";if((void 0===r||r>this.length)&&(r=this.length),r<=0)return"";if((r>>>=0)<=(e>>>=0))return"";for(t||(t="utf8");;)switch(t){case"hex":return P(this,e,r);case"utf8":case"utf-8":return O(this,e,r);case"ascii":return U(this,e,r);case"latin1":case"binary":return T(this,e,r);case"base64":return S(this,e,r);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return M(this,e,r);default:if(n)throw new TypeError("Unknown encoding: "+t);t=(t+"").toLowerCase(),n=!0}}function d(t,e,r){const n=t[e];t[e]=t[r],t[r]=n}function w(t,e,r,n,o){if(0===t.length)return-1;if("string"==typeof r?(n=r,r=0):r>2147483647?r=2147483647:r<-2147483648&&(r=-2147483648),W(r=+r)&&(r=o?0:t.length-1),r<0&&(r=t.length+r),r>=t.length){if(o)return-1;r=t.length-1}else if(r<0){if(!o)return-1;r=0}if("string"==typeof e&&(e=a.from(e,n)),a.isBuffer(e))return 0===e.length?-1:m(t,e,r,n,o);if("number"==typeof e)return e&=255,"function"==typeof Uint8Array.prototype.indexOf?o?Uint8Array.prototype.indexOf.call(t,e,r):Uint8Array.prototype.lastIndexOf.call(t,e,r):m(t,[e],r,n,o);throw new TypeError("val must be string, number or Buffer")}function m(t,e,r,n,o){let i,u=1,s=t.length,a=e.length;if(void 0!==n&&("ucs2"===(n=String(n).toLowerCase())||"ucs-2"===n||"utf16le"===n||"utf-16le"===n)){if(t.length<2||e.length<2)return-1;u=2,s/=2,a/=2,r/=2}function f(t,e){return 1===u?t[e]:t.readUInt16BE(e*u)}if(o){let n=-1;for(i=r;is&&(r=s-a),i=r;i>=0;i--){let r=!0;for(let n=0;no&&(n=o):n=o;const i=e.length;let u;for(n>i/2&&(n=i/2),u=0;u>8,o=r%256,i.push(o),i.push(n);return i}(e,t.length-r),t,r,n)}function S(t,e,r){return 0===e&&r===t.length?n.fromByteArray(t):n.fromByteArray(t.slice(e,r))}function O(t,e,r){r=Math.min(t.length,r);const n=[];let o=e;for(;o239?4:e>223?3:e>191?2:1;if(o+u<=r){let r,n,s,a;switch(u){case 1:e<128&&(i=e);break;case 2:r=t[o+1],128==(192&r)&&(a=(31&e)<<6|63&r,a>127&&(i=a));break;case 3:r=t[o+1],n=t[o+2],128==(192&r)&&128==(192&n)&&(a=(15&e)<<12|(63&r)<<6|63&n,a>2047&&(a<55296||a>57343)&&(i=a));break;case 4:r=t[o+1],n=t[o+2],s=t[o+3],128==(192&r)&&128==(192&n)&&128==(192&s)&&(a=(15&e)<<18|(63&r)<<12|(63&n)<<6|63&s,a>65535&&a<1114112&&(i=a))}}null===i?(i=65533,u=1):i>65535&&(i-=65536,n.push(i>>>10&1023|55296),i=56320|1023&i),n.push(i),o+=u}return function(t){const e=t.length;if(e<=I)return String.fromCharCode.apply(String,t);let r="",n=0;for(;nn.length?(a.isBuffer(e)||(e=a.from(e)),e.copy(n,o)):Uint8Array.prototype.set.call(n,e,o);else{if(!a.isBuffer(e))throw new TypeError('"list" argument must be an Array of Buffers');e.copy(n,o)}o+=e.length}return n},a.byteLength=g,a.prototype._isBuffer=!0,a.prototype.swap16=function(){const t=this.length;if(t%2!=0)throw new RangeError("Buffer size must be a multiple of 16-bits");for(let e=0;er&&(t+=" ... "),""},i&&(a.prototype[i]=a.prototype.inspect),a.prototype.compare=function(t,e,r,n,o){if(V(t,Uint8Array)&&(t=a.from(t,t.offset,t.byteLength)),!a.isBuffer(t))throw new TypeError('The "target" argument must be one of type Buffer or Uint8Array. Received type '+typeof t);if(void 0===e&&(e=0),void 0===r&&(r=t?t.length:0),void 0===n&&(n=0),void 0===o&&(o=this.length),e<0||r>t.length||n<0||o>this.length)throw new RangeError("out of range index");if(n>=o&&e>=r)return 0;if(n>=o)return-1;if(e>=r)return 1;if(this===t)return 0;let i=(o>>>=0)-(n>>>=0),u=(r>>>=0)-(e>>>=0);const s=Math.min(i,u),f=this.slice(n,o),c=t.slice(e,r);for(let t=0;t>>=0,isFinite(r)?(r>>>=0,void 0===n&&(n="utf8")):(n=r,r=void 0)}const o=this.length-e;if((void 0===r||r>o)&&(r=o),t.length>0&&(r<0||e<0)||e>this.length)throw new RangeError("Attempt to write outside buffer bounds");n||(n="utf8");let i=!1;for(;;)switch(n){case"hex":return b(this,t,e,r);case"utf8":case"utf-8":return E(this,t,e,r);case"ascii":case"latin1":case"binary":return _(this,t,e,r);case"base64":return A(this,t,e,r);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return B(this,t,e,r);default:if(i)throw new TypeError("Unknown encoding: "+n);n=(""+n).toLowerCase(),i=!0}},a.prototype.toJSON=function(){return{type:"Buffer",data:Array.prototype.slice.call(this._arr||this,0)}};const I=4096;function U(t,e,r){let n="";r=Math.min(t.length,r);for(let o=e;on)&&(r=n);let o="";for(let n=e;nr)throw new RangeError("Trying to access beyond buffer length")}function L(t,e,r,n,o,i){if(!a.isBuffer(t))throw new TypeError('"buffer" argument must be a Buffer instance');if(e>o||et.length)throw new RangeError("Index out of range")}function R(t,e,r,n,o){z(e,n,o,t,r,7);let i=Number(e&BigInt(4294967295));t[r++]=i,i>>=8,t[r++]=i,i>>=8,t[r++]=i,i>>=8,t[r++]=i;let u=Number(e>>BigInt(32)&BigInt(4294967295));return t[r++]=u,u>>=8,t[r++]=u,u>>=8,t[r++]=u,u>>=8,t[r++]=u,r}function N(t,e,r,n,o){z(e,n,o,t,r,7);let i=Number(e&BigInt(4294967295));t[r+7]=i,i>>=8,t[r+6]=i,i>>=8,t[r+5]=i,i>>=8,t[r+4]=i;let u=Number(e>>BigInt(32)&BigInt(4294967295));return t[r+3]=u,u>>=8,t[r+2]=u,u>>=8,t[r+1]=u,u>>=8,t[r]=u,r+8}function k(t,e,r,n,o,i){if(r+n>t.length)throw new RangeError("Index out of range");if(r<0)throw new RangeError("Index out of range")}function j(t,e,r,n,i){return e=+e,r>>>=0,i||k(t,0,r,4),o.write(t,e,r,n,23,4),r+4}function C(t,e,r,n,i){return e=+e,r>>>=0,i||k(t,0,r,8),o.write(t,e,r,n,52,8),r+8}a.prototype.slice=function(t,e){const r=this.length;(t=~~t)<0?(t+=r)<0&&(t=0):t>r&&(t=r),(e=void 0===e?r:~~e)<0?(e+=r)<0&&(e=0):e>r&&(e=r),e>>=0,e>>>=0,r||x(t,e,this.length);let n=this[t],o=1,i=0;for(;++i>>=0,e>>>=0,r||x(t,e,this.length);let n=this[t+--e],o=1;for(;e>0&&(o*=256);)n+=this[t+--e]*o;return n},a.prototype.readUint8=a.prototype.readUInt8=function(t,e){return t>>>=0,e||x(t,1,this.length),this[t]},a.prototype.readUint16LE=a.prototype.readUInt16LE=function(t,e){return t>>>=0,e||x(t,2,this.length),this[t]|this[t+1]<<8},a.prototype.readUint16BE=a.prototype.readUInt16BE=function(t,e){return t>>>=0,e||x(t,2,this.length),this[t]<<8|this[t+1]},a.prototype.readUint32LE=a.prototype.readUInt32LE=function(t,e){return t>>>=0,e||x(t,4,this.length),(this[t]|this[t+1]<<8|this[t+2]<<16)+16777216*this[t+3]},a.prototype.readUint32BE=a.prototype.readUInt32BE=function(t,e){return t>>>=0,e||x(t,4,this.length),16777216*this[t]+(this[t+1]<<16|this[t+2]<<8|this[t+3])},a.prototype.readBigUInt64LE=H((function(t){$(t>>>=0,"offset");const e=this[t],r=this[t+7];void 0!==e&&void 0!==r||F(t,this.length-8);const n=e+256*this[++t]+65536*this[++t]+this[++t]*2**24,o=this[++t]+256*this[++t]+65536*this[++t]+r*2**24;return BigInt(n)+(BigInt(o)<>>=0,"offset");const e=this[t],r=this[t+7];void 0!==e&&void 0!==r||F(t,this.length-8);const n=e*2**24+65536*this[++t]+256*this[++t]+this[++t],o=this[++t]*2**24+65536*this[++t]+256*this[++t]+r;return(BigInt(n)<>>=0,e>>>=0,r||x(t,e,this.length);let n=this[t],o=1,i=0;for(;++i=o&&(n-=Math.pow(2,8*e)),n},a.prototype.readIntBE=function(t,e,r){t>>>=0,e>>>=0,r||x(t,e,this.length);let n=e,o=1,i=this[t+--n];for(;n>0&&(o*=256);)i+=this[t+--n]*o;return o*=128,i>=o&&(i-=Math.pow(2,8*e)),i},a.prototype.readInt8=function(t,e){return t>>>=0,e||x(t,1,this.length),128&this[t]?-1*(255-this[t]+1):this[t]},a.prototype.readInt16LE=function(t,e){t>>>=0,e||x(t,2,this.length);const r=this[t]|this[t+1]<<8;return 32768&r?4294901760|r:r},a.prototype.readInt16BE=function(t,e){t>>>=0,e||x(t,2,this.length);const r=this[t+1]|this[t]<<8;return 32768&r?4294901760|r:r},a.prototype.readInt32LE=function(t,e){return t>>>=0,e||x(t,4,this.length),this[t]|this[t+1]<<8|this[t+2]<<16|this[t+3]<<24},a.prototype.readInt32BE=function(t,e){return t>>>=0,e||x(t,4,this.length),this[t]<<24|this[t+1]<<16|this[t+2]<<8|this[t+3]},a.prototype.readBigInt64LE=H((function(t){$(t>>>=0,"offset");const e=this[t],r=this[t+7];void 0!==e&&void 0!==r||F(t,this.length-8);const n=this[t+4]+256*this[t+5]+65536*this[t+6]+(r<<24);return(BigInt(n)<>>=0,"offset");const e=this[t],r=this[t+7];void 0!==e&&void 0!==r||F(t,this.length-8);const n=(e<<24)+65536*this[++t]+256*this[++t]+this[++t];return(BigInt(n)<>>=0,e||x(t,4,this.length),o.read(this,t,!0,23,4)},a.prototype.readFloatBE=function(t,e){return t>>>=0,e||x(t,4,this.length),o.read(this,t,!1,23,4)},a.prototype.readDoubleLE=function(t,e){return t>>>=0,e||x(t,8,this.length),o.read(this,t,!0,52,8)},a.prototype.readDoubleBE=function(t,e){return t>>>=0,e||x(t,8,this.length),o.read(this,t,!1,52,8)},a.prototype.writeUintLE=a.prototype.writeUIntLE=function(t,e,r,n){t=+t,e>>>=0,r>>>=0,n||L(this,t,e,r,Math.pow(2,8*r)-1,0);let o=1,i=0;for(this[e]=255&t;++i>>=0,r>>>=0,n||L(this,t,e,r,Math.pow(2,8*r)-1,0);let o=r-1,i=1;for(this[e+o]=255&t;--o>=0&&(i*=256);)this[e+o]=t/i&255;return e+r},a.prototype.writeUint8=a.prototype.writeUInt8=function(t,e,r){return t=+t,e>>>=0,r||L(this,t,e,1,255,0),this[e]=255&t,e+1},a.prototype.writeUint16LE=a.prototype.writeUInt16LE=function(t,e,r){return t=+t,e>>>=0,r||L(this,t,e,2,65535,0),this[e]=255&t,this[e+1]=t>>>8,e+2},a.prototype.writeUint16BE=a.prototype.writeUInt16BE=function(t,e,r){return t=+t,e>>>=0,r||L(this,t,e,2,65535,0),this[e]=t>>>8,this[e+1]=255&t,e+2},a.prototype.writeUint32LE=a.prototype.writeUInt32LE=function(t,e,r){return t=+t,e>>>=0,r||L(this,t,e,4,4294967295,0),this[e+3]=t>>>24,this[e+2]=t>>>16,this[e+1]=t>>>8,this[e]=255&t,e+4},a.prototype.writeUint32BE=a.prototype.writeUInt32BE=function(t,e,r){return t=+t,e>>>=0,r||L(this,t,e,4,4294967295,0),this[e]=t>>>24,this[e+1]=t>>>16,this[e+2]=t>>>8,this[e+3]=255&t,e+4},a.prototype.writeBigUInt64LE=H((function(t,e=0){return R(this,t,e,BigInt(0),BigInt("0xffffffffffffffff"))})),a.prototype.writeBigUInt64BE=H((function(t,e=0){return N(this,t,e,BigInt(0),BigInt("0xffffffffffffffff"))})),a.prototype.writeIntLE=function(t,e,r,n){if(t=+t,e>>>=0,!n){const n=Math.pow(2,8*r-1);L(this,t,e,r,n-1,-n)}let o=0,i=1,u=0;for(this[e]=255&t;++o>0)-u&255;return e+r},a.prototype.writeIntBE=function(t,e,r,n){if(t=+t,e>>>=0,!n){const n=Math.pow(2,8*r-1);L(this,t,e,r,n-1,-n)}let o=r-1,i=1,u=0;for(this[e+o]=255&t;--o>=0&&(i*=256);)t<0&&0===u&&0!==this[e+o+1]&&(u=1),this[e+o]=(t/i>>0)-u&255;return e+r},a.prototype.writeInt8=function(t,e,r){return t=+t,e>>>=0,r||L(this,t,e,1,127,-128),t<0&&(t=255+t+1),this[e]=255&t,e+1},a.prototype.writeInt16LE=function(t,e,r){return t=+t,e>>>=0,r||L(this,t,e,2,32767,-32768),this[e]=255&t,this[e+1]=t>>>8,e+2},a.prototype.writeInt16BE=function(t,e,r){return t=+t,e>>>=0,r||L(this,t,e,2,32767,-32768),this[e]=t>>>8,this[e+1]=255&t,e+2},a.prototype.writeInt32LE=function(t,e,r){return t=+t,e>>>=0,r||L(this,t,e,4,2147483647,-2147483648),this[e]=255&t,this[e+1]=t>>>8,this[e+2]=t>>>16,this[e+3]=t>>>24,e+4},a.prototype.writeInt32BE=function(t,e,r){return t=+t,e>>>=0,r||L(this,t,e,4,2147483647,-2147483648),t<0&&(t=4294967295+t+1),this[e]=t>>>24,this[e+1]=t>>>16,this[e+2]=t>>>8,this[e+3]=255&t,e+4},a.prototype.writeBigInt64LE=H((function(t,e=0){return R(this,t,e,-BigInt("0x8000000000000000"),BigInt("0x7fffffffffffffff"))})),a.prototype.writeBigInt64BE=H((function(t,e=0){return N(this,t,e,-BigInt("0x8000000000000000"),BigInt("0x7fffffffffffffff"))})),a.prototype.writeFloatLE=function(t,e,r){return j(this,t,e,!0,r)},a.prototype.writeFloatBE=function(t,e,r){return j(this,t,e,!1,r)},a.prototype.writeDoubleLE=function(t,e,r){return C(this,t,e,!0,r)},a.prototype.writeDoubleBE=function(t,e,r){return C(this,t,e,!1,r)},a.prototype.copy=function(t,e,r,n){if(!a.isBuffer(t))throw new TypeError("argument should be a Buffer");if(r||(r=0),n||0===n||(n=this.length),e>=t.length&&(e=t.length),e||(e=0),n>0&&n=this.length)throw new RangeError("Index out of range");if(n<0)throw new RangeError("sourceEnd out of bounds");n>this.length&&(n=this.length),t.length-e>>=0,r=void 0===r?this.length:r>>>0,t||(t=0),"number"==typeof t)for(o=e;o=n+4;r-=3)e=`_${t.slice(r-3,r)}${e}`;return`${t.slice(0,r)}${e}`}function z(t,e,r,n,o,i){if(t>r||t3?0===e||e===BigInt(0)?`>= 0${n} and < 2${n} ** ${8*(i+1)}${n}`:`>= -(2${n} ** ${8*(i+1)-1}${n}) and < 2 ** ${8*(i+1)-1}${n}`:`>= ${e}${n} and <= ${r}${n}`,new q.ERR_OUT_OF_RANGE("value",o,t)}!function(t,e,r){$(e,"offset"),void 0!==t[e]&&void 0!==t[e+r]||F(e,t.length-(r+1))}(n,o,i)}function $(t,e){if("number"!=typeof t)throw new q.ERR_INVALID_ARG_TYPE(e,"number",t)}function F(t,e,r){if(Math.floor(t)!==t)throw $(t,r),new q.ERR_OUT_OF_RANGE(r||"offset","an integer",t);if(e<0)throw new q.ERR_BUFFER_OUT_OF_BOUNDS;throw new q.ERR_OUT_OF_RANGE(r||"offset",`>= ${r?1:0} and <= ${e}`,t)}K("ERR_BUFFER_OUT_OF_BOUNDS",(function(t){return t?`${t} is outside of buffer bounds`:"Attempt to access memory outside buffer bounds"}),RangeError),K("ERR_INVALID_ARG_TYPE",(function(t,e){return`The "${t}" argument must be of type number. Received type ${typeof e}`}),TypeError),K("ERR_OUT_OF_RANGE",(function(t,e,r){let n=`The value of "${t}" is out of range.`,o=r;return Number.isInteger(r)&&Math.abs(r)>2**32?o=D(String(r)):"bigint"==typeof r&&(o=String(r),(r>BigInt(2)**BigInt(32)||r<-(BigInt(2)**BigInt(32)))&&(o=D(o)),o+="n"),n+=` It must be ${e}. Received ${o}`,n}),RangeError);const Z=/[^+/0-9A-Za-z-_]/g;function J(t,e){let r;e=e||1/0;const n=t.length;let o=null;const i=[];for(let u=0;u55295&&r<57344){if(!o){if(r>56319){(e-=3)>-1&&i.push(239,191,189);continue}if(u+1===n){(e-=3)>-1&&i.push(239,191,189);continue}o=r;continue}if(r<56320){(e-=3)>-1&&i.push(239,191,189),o=r;continue}r=65536+(o-55296<<10|r-56320)}else o&&(e-=3)>-1&&i.push(239,191,189);if(o=null,r<128){if((e-=1)<0)break;i.push(r)}else if(r<2048){if((e-=2)<0)break;i.push(r>>6|192,63&r|128)}else if(r<65536){if((e-=3)<0)break;i.push(r>>12|224,r>>6&63|128,63&r|128)}else{if(!(r<1114112))throw new Error("Invalid code point");if((e-=4)<0)break;i.push(r>>18|240,r>>12&63|128,r>>6&63|128,63&r|128)}}return i}function G(t){return n.toByteArray(function(t){if((t=(t=t.split("=")[0]).trim().replace(Z,"")).length<2)return"";for(;t.length%4!=0;)t+="=";return t}(t))}function Y(t,e,r,n){let o;for(o=0;o=e.length||o>=t.length);++o)e[o+r]=t[o];return o}function V(t,e){return t instanceof e||null!=t&&null!=t.constructor&&null!=t.constructor.name&&t.constructor.name===e.name}function W(t){return t!=t}const X=function(){const t="0123456789abcdef",e=new Array(256);for(let r=0;r<16;++r){const n=16*r;for(let o=0;o<16;++o)e[n+o]=t[r]+t[o]}return e}();function H(t){return"undefined"==typeof BigInt?Q:t}function Q(){throw new Error("BigInt not supported")}},284:t=>{var e=function(){if("object"==typeof self&&self)return self;if("object"==typeof window&&window)return window;throw new Error("Unable to resolve global `this`")};t.exports=function(){if(this)return this;if("object"==typeof globalThis&&globalThis)return globalThis;try{Object.defineProperty(Object.prototype,"__global__",{get:function(){return this},configurable:!0})}catch(t){return e()}try{return __global__||e()}finally{delete Object.prototype.__global__}}()},645:(t,e)=>{e.read=function(t,e,r,n,o){var i,u,s=8*o-n-1,a=(1<>1,c=-7,l=r?o-1:0,p=r?-1:1,h=t[e+l];for(l+=p,i=h&(1<<-c)-1,h>>=-c,c+=s;c>0;i=256*i+t[e+l],l+=p,c-=8);for(u=i&(1<<-c)-1,i>>=-c,c+=n;c>0;u=256*u+t[e+l],l+=p,c-=8);if(0===i)i=1-f;else{if(i===a)return u?NaN:1/0*(h?-1:1);u+=Math.pow(2,n),i-=f}return(h?-1:1)*u*Math.pow(2,i-n)},e.write=function(t,e,r,n,o,i){var u,s,a,f=8*i-o-1,c=(1<>1,p=23===o?Math.pow(2,-24)-Math.pow(2,-77):0,h=n?0:i-1,y=n?1:-1,g=e<0||0===e&&1/e<0?1:0;for(e=Math.abs(e),isNaN(e)||e===1/0?(s=isNaN(e)?1:0,u=c):(u=Math.floor(Math.log(e)/Math.LN2),e*(a=Math.pow(2,-u))<1&&(u--,a*=2),(e+=u+l>=1?p/a:p*Math.pow(2,1-l))*a>=2&&(u++,a/=2),u+l>=c?(s=0,u=c):u+l>=1?(s=(e*a-1)*Math.pow(2,o),u+=l):(s=e*Math.pow(2,l-1)*Math.pow(2,o),u=0));o>=8;t[r+h]=255&s,h+=y,s/=256,o-=8);for(u=u<0;t[r+h]=255&u,h+=y,u/=256,f-=8);t[r+h-y]|=128*g}},7435:(t,e)=>{e.endianness=function(){return"LE"},e.hostname=function(){return"undefined"!=typeof location?location.hostname:""},e.loadavg=function(){return[]},e.uptime=function(){return 0},e.freemem=function(){return Number.MAX_VALUE},e.totalmem=function(){return Number.MAX_VALUE},e.cpus=function(){return[]},e.type=function(){return"Browser"},e.release=function(){return"undefined"!=typeof navigator?navigator.appVersion:""},e.networkInterfaces=e.getNetworkInterfaces=function(){return{}},e.arch=function(){return"javascript"},e.platform=function(){return"browser"},e.tmpdir=e.tmpDir=function(){return"/tmp"},e.EOL="\n",e.homedir=function(){return"/"}},4155:t=>{var e,r,n=t.exports={};function o(){throw new Error("setTimeout has not been defined")}function i(){throw new Error("clearTimeout has not been defined")}function u(t){if(e===setTimeout)return setTimeout(t,0);if((e===o||!e)&&setTimeout)return e=setTimeout,setTimeout(t,0);try{return e(t,0)}catch(r){try{return e.call(null,t,0)}catch(r){return e.call(this,t,0)}}}!function(){try{e="function"==typeof setTimeout?setTimeout:o}catch(t){e=o}try{r="function"==typeof clearTimeout?clearTimeout:i}catch(t){r=i}}();var s,a=[],f=!1,c=-1;function l(){f&&s&&(f=!1,s.length?a=s.concat(a):c=-1,a.length&&p())}function p(){if(!f){var t=u(l);f=!0;for(var e=a.length;e;){for(s=a,a=[];++c1)for(var r=1;r{"use strict";r.r(e),r.d(e,{__assign:()=>i,__asyncDelegator:()=>E,__asyncGenerator:()=>b,__asyncValues:()=>_,__await:()=>m,__awaiter:()=>c,__classPrivateFieldGet:()=>I,__classPrivateFieldSet:()=>U,__createBinding:()=>p,__decorate:()=>s,__exportStar:()=>h,__extends:()=>o,__generator:()=>l,__importDefault:()=>O,__importStar:()=>S,__makeTemplateObject:()=>A,__metadata:()=>f,__param:()=>a,__read:()=>g,__rest:()=>u,__spread:()=>v,__spreadArray:()=>w,__spreadArrays:()=>d,__values:()=>y});var n=function(t,e){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r])},n(t,e)};function o(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Class extends value "+String(e)+" is not a constructor or null");function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)}var i=function(){return i=Object.assign||function(t){for(var e,r=1,n=arguments.length;r=0;s--)(o=t[s])&&(u=(i<3?o(u):i>3?o(e,r,u):o(e,r))||u);return i>3&&u&&Object.defineProperty(e,r,u),u}function a(t,e){return function(r,n){e(r,n,t)}}function f(t,e){if("object"==typeof Reflect&&"function"==typeof Reflect.metadata)return Reflect.metadata(t,e)}function c(t,e,r,n){return new(r||(r=Promise))((function(o,i){function u(t){try{a(n.next(t))}catch(t){i(t)}}function s(t){try{a(n.throw(t))}catch(t){i(t)}}function a(t){var e;t.done?o(t.value):(e=t.value,e instanceof r?e:new r((function(t){t(e)}))).then(u,s)}a((n=n.apply(t,e||[])).next())}))}function l(t,e){var r,n,o,i,u={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return i={next:s(0),throw:s(1),return:s(2)},"function"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function s(i){return function(s){return function(i){if(r)throw new TypeError("Generator is already executing.");for(;u;)try{if(r=1,n&&(o=2&i[0]?n.return:i[0]?n.throw||((o=n.return)&&o.call(n),0):n.next)&&!(o=o.call(n,i[1])).done)return o;switch(n=0,o&&(i=[2&i[0],o.value]),i[0]){case 0:case 1:o=i;break;case 4:return u.label++,{value:i[1],done:!1};case 5:u.label++,n=i[1],i=[0];continue;case 7:i=u.ops.pop(),u.trys.pop();continue;default:if(!((o=(o=u.trys).length>0&&o[o.length-1])||6!==i[0]&&2!==i[0])){u=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]=t.length&&(t=void 0),{value:t&&t[n++],done:!t}}};throw new TypeError(e?"Object is not iterable.":"Symbol.iterator is not defined.")}function g(t,e){var r="function"==typeof Symbol&&t[Symbol.iterator];if(!r)return t;var n,o,i=r.call(t),u=[];try{for(;(void 0===e||e-- >0)&&!(n=i.next()).done;)u.push(n.value)}catch(t){o={error:t}}finally{try{n&&!n.done&&(r=i.return)&&r.call(i)}finally{if(o)throw o.error}}return u}function v(){for(var t=[],e=0;e1||s(t,e)}))})}function s(t,e){try{(r=o[t](e)).value instanceof m?Promise.resolve(r.value.v).then(a,f):c(i[0][2],r)}catch(t){c(i[0][3],t)}var r}function a(t){s("next",t)}function f(t){s("throw",t)}function c(t,e){t(e),i.shift(),i.length&&s(i[0][0],i[0][1])}}function E(t){var e,r;return e={},n("next"),n("throw",(function(t){throw t})),n("return"),e[Symbol.iterator]=function(){return this},e;function n(n,o){e[n]=t[n]?function(e){return(r=!r)?{value:m(t[n](e)),done:"return"===n}:o?o(e):e}:o}}function _(t){if(!Symbol.asyncIterator)throw new TypeError("Symbol.asyncIterator is not defined.");var e,r=t[Symbol.asyncIterator];return r?r.call(t):(t=y(t),e={},n("next"),n("throw"),n("return"),e[Symbol.asyncIterator]=function(){return this},e);function n(r){e[r]=t[r]&&function(e){return new Promise((function(n,o){!function(t,e,r,n){Promise.resolve(n).then((function(e){t({value:e,done:r})}),e)}(n,o,(e=t[r](e)).done,e.value)}))}}}function A(t,e){return Object.defineProperty?Object.defineProperty(t,"raw",{value:e}):t.raw=e,t}var B=Object.create?function(t,e){Object.defineProperty(t,"default",{enumerable:!0,value:e})}:function(t,e){t.default=e};function S(t){if(t&&t.__esModule)return t;var e={};if(null!=t)for(var r in t)"default"!==r&&Object.prototype.hasOwnProperty.call(t,r)&&p(e,t,r);return B(e,t),e}function O(t){return t&&t.__esModule?t:{default:t}}function I(t,e,r,n){if("a"===r&&!n)throw new TypeError("Private accessor was defined without a getter");if("function"==typeof e?t!==e||!n:!e.has(t))throw new TypeError("Cannot read private member from an object whose class did not declare it");return"m"===r?n:"a"===r?n.call(t):n?n.value:e.get(t)}function U(t,e,r,n,o){if("m"===n)throw new TypeError("Private method is not writable");if("a"===n&&!o)throw new TypeError("Private accessor was defined without a setter");if("function"==typeof e?t!==e||!o:!e.has(t))throw new TypeError("Cannot write private member to an object whose class did not declare it");return"a"===n?o.call(t,r):o?o.value=r:e.set(t,r),r}},5840:(t,e,r)=>{var n;if("object"==typeof globalThis)n=globalThis;else try{n=r(284)}catch(t){}finally{if(n||"undefined"==typeof window||(n=window),!n)throw new Error("Could not determine global this")}var o=n.WebSocket||n.MozWebSocket,i=r(9387);function u(t,e){return e?new o(t,e):new o(t)}o&&["CONNECTING","OPEN","CLOSING","CLOSED"].forEach((function(t){Object.defineProperty(u,t,{get:function(){return o[t]}})})),t.exports={w3cwebsocket:o?u:null,version:i}},9387:(t,e,r)=>{t.exports=r(9794).version},4678:(t,e,r)=>{"use strict";r.r(e),r.d(e,{clear:()=>g,createStore:()=>i,del:()=>h,delMany:()=>y,entries:()=>m,get:()=>a,getMany:()=>l,keys:()=>d,promisifyRequest:()=>o,set:()=>f,setMany:()=>c,update:()=>p,values:()=>w});var n=r(4702);function o(t){return new Promise(((e,r)=>{t.oncomplete=t.onsuccess=()=>e(t.result),t.onabort=t.onerror=()=>r(t.error)}))}function i(t,e){const r=(0,n.Z)().then((()=>{const r=indexedDB.open(t);return r.onupgradeneeded=()=>r.result.createObjectStore(e),o(r)}));return(t,n)=>r.then((r=>n(r.transaction(e,t).objectStore(e))))}let u;function s(){return u||(u=i("keyval-store","keyval")),u}function a(t,e=s()){return e("readonly",(e=>o(e.get(t))))}function f(t,e,r=s()){return r("readwrite",(r=>(r.put(e,t),o(r.transaction))))}function c(t,e=s()){return e("readwrite",(e=>(t.forEach((t=>e.put(t[1],t[0]))),o(e.transaction))))}function l(t,e=s()){return e("readonly",(e=>Promise.all(t.map((t=>o(e.get(t)))))))}function p(t,e,r=s()){return r("readwrite",(r=>new Promise(((n,i)=>{r.get(t).onsuccess=function(){try{r.put(e(this.result),t),n(o(r.transaction))}catch(t){i(t)}}}))))}function h(t,e=s()){return e("readwrite",(e=>(e.delete(t),o(e.transaction))))}function y(t,e=s()){return e("readwrite",(e=>(t.forEach((t=>e.delete(t))),o(e.transaction))))}function g(t=s()){return t("readwrite",(t=>(t.clear(),o(t.transaction))))}function v(t,e){return t.openCursor().onsuccess=function(){this.result&&(e(this.result),this.result.continue())},o(t.transaction)}function d(t=s()){return t("readonly",(t=>{if(t.getAllKeys)return o(t.getAllKeys());const e=[];return v(t,(t=>e.push(t.key))).then((()=>e))}))}function w(t=s()){return t("readonly",(t=>{if(t.getAll)return o(t.getAll());const e=[];return v(t,(t=>e.push(t.value))).then((()=>e))}))}function m(t=s()){return t("readonly",(e=>{if(e.getAll&&e.getAllKeys)return Promise.all([o(e.getAllKeys()),o(e.getAll())]).then((([t,e])=>t.map(((t,r)=>[t,e[r]]))));const r=[];return t("readonly",(t=>v(t,(t=>r.push([t.key,t.value]))).then((()=>r))))}))}},4702:(t,e,r)=>{"use strict";r.d(e,{Z:()=>n});const n=function(){var t;return!navigator.userAgentData&&/Safari\//.test(navigator.userAgent)&&!/Chrom(e|ium)\//.test(navigator.userAgent)&&indexedDB.databases?new Promise((function(e){var r=function(){return indexedDB.databases().finally(e)};t=setInterval(r,100),r()})).finally((function(){return clearInterval(t)})):Promise.resolve()}},9794:t=>{"use strict";t.exports={version:"1.0.34"}}}]); +//# sourceMappingURL=131.ed8e224f75df6793c3e1.js.map \ No newline at end of file diff --git a/dist/313.5cd1718104a79212da23.js.LICENSE.txt b/dist/131.ed8e224f75df6793c3e1.js.LICENSE.txt similarity index 100% rename from dist/313.5cd1718104a79212da23.js.LICENSE.txt rename to dist/131.ed8e224f75df6793c3e1.js.LICENSE.txt diff --git a/dist/131.ed8e224f75df6793c3e1.js.map b/dist/131.ed8e224f75df6793c3e1.js.map new file mode 100644 index 000000000..416e1d643 --- /dev/null +++ b/dist/131.ed8e224f75df6793c3e1.js.map @@ -0,0 +1 @@ +{"version":3,"file":"131.ed8e224f75df6793c3e1.js","mappings":"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","sources":["webpack://telegram-t/./node_modules/@cryptography/aes/dist/es/aes.js","webpack://telegram-t/./node_modules/async-mutex/lib/Mutex.js","webpack://telegram-t/./node_modules/async-mutex/lib/Semaphore.js","webpack://telegram-t/./node_modules/async-mutex/lib/errors.js","webpack://telegram-t/./node_modules/async-mutex/lib/index.js","webpack://telegram-t/./node_modules/async-mutex/lib/tryAcquire.js","webpack://telegram-t/./node_modules/async-mutex/lib/withTimeout.js","webpack://telegram-t/./node_modules/base64-js/index.js","webpack://telegram-t/./node_modules/big-integer/BigInteger.js","webpack://telegram-t/./node_modules/buffer/index.js","webpack://telegram-t/./node_modules/es5-ext/global.js","webpack://telegram-t/./node_modules/ieee754/index.js","webpack://telegram-t/./node_modules/os-browserify/browser.js","webpack://telegram-t/./node_modules/process/browser.js","webpack://telegram-t/./node_modules/tslib/tslib.es6.js","webpack://telegram-t/./node_modules/websocket/lib/browser.js","webpack://telegram-t/./node_modules/websocket/lib/version.js","webpack://telegram-t/./node_modules/idb-keyval/dist/index.js","webpack://telegram-t/./node_modules/safari-14-idb-fix/dist/index.js"],"sourcesContent":["var S = new Uint8Array(256);\nvar Si = new Uint8Array(256);\nvar T1 = new Uint32Array(256);\nvar T2 = new Uint32Array(256);\nvar T3 = new Uint32Array(256);\nvar T4 = new Uint32Array(256);\nvar T5 = new Uint32Array(256);\nvar T6 = new Uint32Array(256);\nvar T7 = new Uint32Array(256);\nvar T8 = new Uint32Array(256);\nfunction computeTables() {\n var d = new Uint8Array(256);\n var t = new Uint8Array(256);\n var x2;\n var x4;\n var x8;\n var s;\n var tEnc;\n var tDec;\n var x = 0;\n var xInv = 0;\n // Compute double and third tables\n for (var i = 0; i < 256; i++) {\n d[i] = i << 1 ^ (i >> 7) * 283;\n t[d[i] ^ i] = i;\n }\n for (; !S[x]; x ^= x2 || 1) {\n // Compute sbox\n s = xInv ^ xInv << 1 ^ xInv << 2 ^ xInv << 3 ^ xInv << 4;\n s = s >> 8 ^ s & 255 ^ 99;\n S[x] = s;\n Si[s] = x;\n // Compute MixColumns\n x8 = d[x4 = d[x2 = d[x]]];\n tDec = x8 * 0x1010101 ^ x4 * 0x10001 ^ x2 * 0x101 ^ x * 0x1010100;\n tEnc = d[s] * 0x101 ^ s * 0x1010100;\n T1[x] = tEnc = tEnc << 24 ^ tEnc >>> 8;\n T2[x] = tEnc = tEnc << 24 ^ tEnc >>> 8;\n T3[x] = tEnc = tEnc << 24 ^ tEnc >>> 8;\n T4[x] = tEnc = tEnc << 24 ^ tEnc >>> 8;\n T5[s] = tDec = tDec << 24 ^ tDec >>> 8;\n T6[s] = tDec = tDec << 24 ^ tDec >>> 8;\n T7[s] = tDec = tDec << 24 ^ tDec >>> 8;\n T8[s] = tDec = tDec << 24 ^ tDec >>> 8;\n xInv = t[xInv] || 1;\n }\n}\n\n/**\n * Gets a uint32 from string in big-endian order order\n */\nfunction s2i(str, pos) {\n return (str.charCodeAt(pos) << 24\n ^ str.charCodeAt(pos + 1) << 16\n ^ str.charCodeAt(pos + 2) << 8\n ^ str.charCodeAt(pos + 3));\n}\n\n/* eslint-disable import/prefer-default-export */\n/**\n * Helper function for transforming string key to Uint32Array\n */\nfunction getWords(key) {\n if (key instanceof Uint32Array) {\n return key;\n }\n if (typeof key === 'string') {\n if (key.length % 4 !== 0)\n for (var i = key.length % 4; i <= 4; i++)\n key += '\\0x00';\n var buf = new Uint32Array(key.length / 4);\n for (var i = 0; i < key.length; i += 4)\n buf[i / 4] = s2i(key, i);\n return buf;\n }\n if (key instanceof Uint8Array) {\n var buf = new Uint32Array(key.length / 4);\n for (var i = 0; i < key.length; i += 4) {\n buf[i / 4] = (key[i] << 24\n ^ key[i + 1] << 16\n ^ key[i + 2] << 8\n ^ key[i + 3]);\n }\n return buf;\n }\n throw new Error('Unable to create 32-bit words');\n}\nfunction xor(left, right, to) {\n if (to === void 0) { to = left; }\n for (var i = 0; i < left.length; i++)\n to[i] = left[i] ^ right[i];\n}\n\ncomputeTables();\n/**\n * Low-level AES Cipher\n */\nvar AES = /** @class */ (function () {\n function AES(_key) {\n var key = getWords(_key);\n if (key.length !== 4 && key.length !== 6 && key.length !== 8) {\n throw new Error('Invalid key size');\n }\n this.encKey = new Uint32Array(4 * key.length + 28);\n this.decKey = new Uint32Array(4 * key.length + 28);\n this.encKey.set(key);\n var rcon = 1;\n var i = key.length;\n var tmp;\n // schedule encryption keys\n for (; i < 4 * key.length + 28; i++) {\n tmp = this.encKey[i - 1];\n // apply sbox\n if (i % key.length === 0 || (key.length === 8 && i % key.length === 4)) {\n tmp = S[tmp >>> 24] << 24 ^ S[(tmp >> 16) & 255] << 16 ^ S[(tmp >> 8) & 255] << 8 ^ S[tmp & 255];\n // shift rows and add rcon\n if (i % key.length === 0) {\n tmp = tmp << 8 ^ tmp >>> 24 ^ (rcon << 24);\n rcon = rcon << 1 ^ (rcon >> 7) * 283;\n }\n }\n this.encKey[i] = this.encKey[i - key.length] ^ tmp;\n }\n // schedule decryption keys\n for (var j = 0; i; j++, i--) {\n tmp = this.encKey[j & 3 ? i : i - 4];\n if (i <= 4 || j < 4) {\n this.decKey[j] = tmp;\n }\n else {\n this.decKey[j] = (T5[S[tmp >>> 24]]\n ^ T6[S[(tmp >> 16) & 255]]\n ^ T7[S[(tmp >> 8) & 255]]\n ^ T8[S[tmp & 255]]);\n }\n }\n }\n AES.prototype.encrypt = function (_message) {\n var message = getWords(_message);\n var out = new Uint32Array(4);\n var a = message[0] ^ this.encKey[0];\n var b = message[1] ^ this.encKey[1];\n var c = message[2] ^ this.encKey[2];\n var d = message[3] ^ this.encKey[3];\n var rounds = this.encKey.length / 4 - 2;\n var k = 4;\n var a2;\n var b2;\n var c2;\n // Inner rounds. Cribbed from OpenSSL.\n for (var i = 0; i < rounds; i++) {\n a2 = T1[a >>> 24] ^ T2[(b >> 16) & 255] ^ T3[(c >> 8) & 255] ^ T4[d & 255] ^ this.encKey[k];\n b2 = T1[b >>> 24] ^ T2[(c >> 16) & 255] ^ T3[(d >> 8) & 255] ^ T4[a & 255] ^ this.encKey[k + 1];\n c2 = T1[c >>> 24] ^ T2[(d >> 16) & 255] ^ T3[(a >> 8) & 255] ^ T4[b & 255] ^ this.encKey[k + 2];\n d = T1[d >>> 24] ^ T2[(a >> 16) & 255] ^ T3[(b >> 8) & 255] ^ T4[c & 255] ^ this.encKey[k + 3];\n a = a2;\n b = b2;\n c = c2;\n k += 4;\n // console.log(a, b, c, d);\n }\n // Last round.\n for (var i = 0; i < 4; i++) {\n out[i] = (S[a >>> 24] << 24\n ^ S[(b >> 16) & 255] << 16\n ^ S[(c >> 8) & 255] << 8\n ^ S[d & 255]\n ^ this.encKey[k++]);\n a2 = a;\n a = b;\n b = c;\n c = d;\n d = a2;\n }\n return out;\n };\n AES.prototype.decrypt = function (_message) {\n var message = getWords(_message);\n var out = new Uint32Array(4);\n var a = message[0] ^ this.decKey[0];\n var b = message[3] ^ this.decKey[1];\n var c = message[2] ^ this.decKey[2];\n var d = message[1] ^ this.decKey[3];\n var rounds = this.decKey.length / 4 - 2;\n var a2;\n var b2;\n var c2;\n var k = 4;\n // Inner rounds. Cribbed from OpenSSL.\n for (var i = 0; i < rounds; i++) {\n a2 = T5[a >>> 24] ^ T6[(b >> 16) & 255] ^ T7[(c >> 8) & 255] ^ T8[d & 255] ^ this.decKey[k];\n b2 = T5[b >>> 24] ^ T6[(c >> 16) & 255] ^ T7[(d >> 8) & 255] ^ T8[a & 255] ^ this.decKey[k + 1];\n c2 = T5[c >>> 24] ^ T6[(d >> 16) & 255] ^ T7[(a >> 8) & 255] ^ T8[b & 255] ^ this.decKey[k + 2];\n d = T5[d >>> 24] ^ T6[(a >> 16) & 255] ^ T7[(b >> 8) & 255] ^ T8[c & 255] ^ this.decKey[k + 3];\n a = a2;\n b = b2;\n c = c2;\n k += 4;\n }\n // Last round.\n for (var i = 0; i < 4; i++) {\n out[3 & -i] = (Si[a >>> 24] << 24\n ^ Si[(b >> 16) & 255] << 16\n ^ Si[(c >> 8) & 255] << 8\n ^ Si[d & 255]\n ^ this.decKey[k++]);\n a2 = a;\n a = b;\n b = c;\n c = d;\n d = a2;\n }\n return out;\n };\n return AES;\n}());\n\n/**\n * AES-IGE mode.\n */\nvar AES_IGE = /** @class */ (function () {\n function AES_IGE(key, iv, blockSize) {\n if (blockSize === void 0) { blockSize = 16; }\n this.key = getWords(key);\n this.iv = getWords(iv);\n this.cipher = new AES(key);\n this.blockSize = blockSize / 4;\n }\n /**\n * Encrypts plain text with AES-IGE mode.\n */\n AES_IGE.prototype.encrypt = function (message, buf) {\n var text = getWords(message);\n var cipherText = buf || new Uint32Array(text.length);\n var prevX = this.iv.subarray(this.blockSize, this.iv.length);\n var prevY = this.iv.subarray(0, this.blockSize);\n var yXOR = new Uint32Array(this.blockSize);\n for (var i = 0; i < text.length; i += this.blockSize) {\n var x = text.subarray(i, i + this.blockSize);\n xor(x, prevY, yXOR);\n var y = this.cipher.encrypt(yXOR);\n xor(y, prevX);\n prevX = x;\n prevY = y;\n for (var j = i, k = 0; j < text.length && k < 4; j++, k++)\n cipherText[j] = y[k];\n }\n return cipherText;\n };\n /**\n * Decrypts cipher text with AES-IGE mode.\n */\n AES_IGE.prototype.decrypt = function (message, buf) {\n var cipherText = getWords(message);\n var text = buf || new Uint32Array(cipherText.length);\n var prevY = this.iv.subarray(this.blockSize, this.iv.length);\n var prevX = this.iv.subarray(0, this.blockSize);\n var yXOR = new Uint32Array(this.blockSize);\n for (var i = 0; i < text.length; i += this.blockSize) {\n var x = cipherText.subarray(i, i + this.blockSize);\n xor(x, prevY, yXOR);\n var y = this.cipher.decrypt(yXOR);\n xor(y, prevX);\n prevX = x;\n prevY = y;\n for (var j = i, k = 0; j < text.length && k < 4; j++, k++)\n text[j] = y[k];\n }\n return text;\n };\n return AES_IGE;\n}());\n\n/**\n * AES-IGE mode.\n */\nvar AES_IGE$1 = /** @class */ (function () {\n function AES_IGE(key, counter, blockSize) {\n if (blockSize === void 0) { blockSize = 16; }\n this.offset = 0;\n this.key = getWords(key);\n this.counter = getWords(counter);\n this.cipher = new AES(key);\n this.blockSize = blockSize / 4;\n if (this.counter.length !== 4) {\n throw new Error('AES-CTR mode counter must be 16 bytes length');\n }\n }\n /**\n * Encrypts plain text with AES-IGE mode.\n */\n AES_IGE.prototype.encrypt = function (message, buf) {\n var text = getWords(message);\n var cipherText = buf || new Uint32Array(text.length);\n var offset = this.offset;\n for (var i = 0; i < text.length; i += this.blockSize) {\n var x = this.cipher.encrypt(this.counter);\n for (var j = i, k = offset; j < text.length && k < this.blockSize; j++, k++)\n cipherText[j] = x[k] ^ text[j];\n if (text.length - i >= this.blockSize)\n this.incrementCounter();\n if (offset) {\n i -= offset;\n offset = 0;\n }\n }\n this.offset = (this.offset + (text.length % 4)) % 4;\n return cipherText;\n };\n /**\n * Decrypts cipher text with AES-IGE mode.\n */\n AES_IGE.prototype.decrypt = function (message, buf) {\n return this.encrypt(message, buf);\n };\n AES_IGE.prototype.incrementCounter = function () {\n // increment counter\n for (var carry = this.counter.length - 1; carry >= 0; carry--) {\n if (++this.counter[carry] < 0xFFFFFFFF)\n break; // If overflowing, it'll be 0 and we'll have to continue propagating the carry\n }\n };\n return AES_IGE;\n}());\n\nexport default AES;\nexport { AES_IGE$1 as CTR, AES_IGE as IGE };\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar tslib_1 = require(\"tslib\");\nvar Semaphore_1 = require(\"./Semaphore\");\nvar Mutex = /** @class */ (function () {\n function Mutex(cancelError) {\n this._semaphore = new Semaphore_1.default(1, cancelError);\n }\n Mutex.prototype.acquire = function () {\n return (0, tslib_1.__awaiter)(this, void 0, void 0, function () {\n var _a, releaser;\n return (0, tslib_1.__generator)(this, function (_b) {\n switch (_b.label) {\n case 0: return [4 /*yield*/, this._semaphore.acquire()];\n case 1:\n _a = _b.sent(), releaser = _a[1];\n return [2 /*return*/, releaser];\n }\n });\n });\n };\n Mutex.prototype.runExclusive = function (callback) {\n return this._semaphore.runExclusive(function () { return callback(); });\n };\n Mutex.prototype.isLocked = function () {\n return this._semaphore.isLocked();\n };\n Mutex.prototype.waitForUnlock = function () {\n return this._semaphore.waitForUnlock();\n };\n /** @deprecated Deprecated in 0.3.0, will be removed in 0.4.0. Use runExclusive instead. */\n Mutex.prototype.release = function () {\n this._semaphore.release();\n };\n Mutex.prototype.cancel = function () {\n return this._semaphore.cancel();\n };\n return Mutex;\n}());\nexports.default = Mutex;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar tslib_1 = require(\"tslib\");\nvar errors_1 = require(\"./errors\");\nvar Semaphore = /** @class */ (function () {\n function Semaphore(_maxConcurrency, _cancelError) {\n if (_cancelError === void 0) { _cancelError = errors_1.E_CANCELED; }\n this._maxConcurrency = _maxConcurrency;\n this._cancelError = _cancelError;\n this._queue = [];\n this._waiters = [];\n if (_maxConcurrency <= 0) {\n throw new Error('semaphore must be initialized to a positive value');\n }\n this._value = _maxConcurrency;\n }\n Semaphore.prototype.acquire = function () {\n var _this = this;\n var locked = this.isLocked();\n var ticketPromise = new Promise(function (resolve, reject) {\n return _this._queue.push({ resolve: resolve, reject: reject });\n });\n if (!locked)\n this._dispatch();\n return ticketPromise;\n };\n Semaphore.prototype.runExclusive = function (callback) {\n return (0, tslib_1.__awaiter)(this, void 0, void 0, function () {\n var _a, value, release;\n return (0, tslib_1.__generator)(this, function (_b) {\n switch (_b.label) {\n case 0: return [4 /*yield*/, this.acquire()];\n case 1:\n _a = _b.sent(), value = _a[0], release = _a[1];\n _b.label = 2;\n case 2:\n _b.trys.push([2, , 4, 5]);\n return [4 /*yield*/, callback(value)];\n case 3: return [2 /*return*/, _b.sent()];\n case 4:\n release();\n return [7 /*endfinally*/];\n case 5: return [2 /*return*/];\n }\n });\n });\n };\n Semaphore.prototype.waitForUnlock = function () {\n return (0, tslib_1.__awaiter)(this, void 0, void 0, function () {\n var waitPromise;\n var _this = this;\n return (0, tslib_1.__generator)(this, function (_a) {\n if (!this.isLocked()) {\n return [2 /*return*/, Promise.resolve()];\n }\n waitPromise = new Promise(function (resolve) { return _this._waiters.push({ resolve: resolve }); });\n return [2 /*return*/, waitPromise];\n });\n });\n };\n Semaphore.prototype.isLocked = function () {\n return this._value <= 0;\n };\n /** @deprecated Deprecated in 0.3.0, will be removed in 0.4.0. Use runExclusive instead. */\n Semaphore.prototype.release = function () {\n if (this._maxConcurrency > 1) {\n throw new Error('this method is unavailable on semaphores with concurrency > 1; use the scoped release returned by acquire instead');\n }\n if (this._currentReleaser) {\n var releaser = this._currentReleaser;\n this._currentReleaser = undefined;\n releaser();\n }\n };\n Semaphore.prototype.cancel = function () {\n var _this = this;\n this._queue.forEach(function (ticket) { return ticket.reject(_this._cancelError); });\n this._queue = [];\n };\n Semaphore.prototype._dispatch = function () {\n var _this = this;\n var nextTicket = this._queue.shift();\n if (!nextTicket)\n return;\n var released = false;\n this._currentReleaser = function () {\n if (released)\n return;\n released = true;\n _this._value++;\n _this._resolveWaiters();\n _this._dispatch();\n };\n nextTicket.resolve([this._value--, this._currentReleaser]);\n };\n Semaphore.prototype._resolveWaiters = function () {\n this._waiters.forEach(function (waiter) { return waiter.resolve(); });\n this._waiters = [];\n };\n return Semaphore;\n}());\nexports.default = Semaphore;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.E_CANCELED = exports.E_ALREADY_LOCKED = exports.E_TIMEOUT = void 0;\nexports.E_TIMEOUT = new Error('timeout while waiting for mutex to become available');\nexports.E_ALREADY_LOCKED = new Error('mutex already locked');\nexports.E_CANCELED = new Error('request for lock canceled');\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.tryAcquire = exports.withTimeout = exports.Semaphore = exports.Mutex = void 0;\nvar tslib_1 = require(\"tslib\");\nvar Mutex_1 = require(\"./Mutex\");\nObject.defineProperty(exports, \"Mutex\", { enumerable: true, get: function () { return Mutex_1.default; } });\nvar Semaphore_1 = require(\"./Semaphore\");\nObject.defineProperty(exports, \"Semaphore\", { enumerable: true, get: function () { return Semaphore_1.default; } });\nvar withTimeout_1 = require(\"./withTimeout\");\nObject.defineProperty(exports, \"withTimeout\", { enumerable: true, get: function () { return withTimeout_1.withTimeout; } });\nvar tryAcquire_1 = require(\"./tryAcquire\");\nObject.defineProperty(exports, \"tryAcquire\", { enumerable: true, get: function () { return tryAcquire_1.tryAcquire; } });\n(0, tslib_1.__exportStar)(require(\"./errors\"), exports);\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.tryAcquire = void 0;\nvar errors_1 = require(\"./errors\");\nvar withTimeout_1 = require(\"./withTimeout\");\n// eslint-disable-next-lisne @typescript-eslint/explicit-module-boundary-types\nfunction tryAcquire(sync, alreadyAcquiredError) {\n if (alreadyAcquiredError === void 0) { alreadyAcquiredError = errors_1.E_ALREADY_LOCKED; }\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n return (0, withTimeout_1.withTimeout)(sync, 0, alreadyAcquiredError);\n}\nexports.tryAcquire = tryAcquire;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.withTimeout = void 0;\nvar tslib_1 = require(\"tslib\");\nvar errors_1 = require(\"./errors\");\n// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types\nfunction withTimeout(sync, timeout, timeoutError) {\n var _this = this;\n if (timeoutError === void 0) { timeoutError = errors_1.E_TIMEOUT; }\n return {\n acquire: function () {\n return new Promise(function (resolve, reject) { return (0, tslib_1.__awaiter)(_this, void 0, void 0, function () {\n var isTimeout, handle, ticket, release, e_1;\n return (0, tslib_1.__generator)(this, function (_a) {\n switch (_a.label) {\n case 0:\n isTimeout = false;\n handle = setTimeout(function () {\n isTimeout = true;\n reject(timeoutError);\n }, timeout);\n _a.label = 1;\n case 1:\n _a.trys.push([1, 3, , 4]);\n return [4 /*yield*/, sync.acquire()];\n case 2:\n ticket = _a.sent();\n if (isTimeout) {\n release = Array.isArray(ticket) ? ticket[1] : ticket;\n release();\n }\n else {\n clearTimeout(handle);\n resolve(ticket);\n }\n return [3 /*break*/, 4];\n case 3:\n e_1 = _a.sent();\n if (!isTimeout) {\n clearTimeout(handle);\n reject(e_1);\n }\n return [3 /*break*/, 4];\n case 4: return [2 /*return*/];\n }\n });\n }); });\n },\n runExclusive: function (callback) {\n return (0, tslib_1.__awaiter)(this, void 0, void 0, function () {\n var release, ticket;\n return (0, tslib_1.__generator)(this, function (_a) {\n switch (_a.label) {\n case 0:\n release = function () { return undefined; };\n _a.label = 1;\n case 1:\n _a.trys.push([1, , 7, 8]);\n return [4 /*yield*/, this.acquire()];\n case 2:\n ticket = _a.sent();\n if (!Array.isArray(ticket)) return [3 /*break*/, 4];\n release = ticket[1];\n return [4 /*yield*/, callback(ticket[0])];\n case 3: return [2 /*return*/, _a.sent()];\n case 4:\n release = ticket;\n return [4 /*yield*/, callback()];\n case 5: return [2 /*return*/, _a.sent()];\n case 6: return [3 /*break*/, 8];\n case 7:\n release();\n return [7 /*endfinally*/];\n case 8: return [2 /*return*/];\n }\n });\n });\n },\n /** @deprecated Deprecated in 0.3.0, will be removed in 0.4.0. Use runExclusive instead. */\n release: function () {\n sync.release();\n },\n cancel: function () {\n return sync.cancel();\n },\n waitForUnlock: function () { return sync.waitForUnlock(); },\n isLocked: function () { return sync.isLocked(); },\n };\n}\nexports.withTimeout = withTimeout;\n","'use strict'\n\nexports.byteLength = byteLength\nexports.toByteArray = toByteArray\nexports.fromByteArray = fromByteArray\n\nvar lookup = []\nvar revLookup = []\nvar Arr = typeof Uint8Array !== 'undefined' ? Uint8Array : Array\n\nvar code = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'\nfor (var i = 0, len = code.length; i < len; ++i) {\n lookup[i] = code[i]\n revLookup[code.charCodeAt(i)] = i\n}\n\n// Support decoding URL-safe base64 strings, as Node.js does.\n// See: https://en.wikipedia.org/wiki/Base64#URL_applications\nrevLookup['-'.charCodeAt(0)] = 62\nrevLookup['_'.charCodeAt(0)] = 63\n\nfunction getLens (b64) {\n var len = b64.length\n\n if (len % 4 > 0) {\n throw new Error('Invalid string. Length must be a multiple of 4')\n }\n\n // Trim off extra bytes after placeholder bytes are found\n // See: https://github.com/beatgammit/base64-js/issues/42\n var validLen = b64.indexOf('=')\n if (validLen === -1) validLen = len\n\n var placeHoldersLen = validLen === len\n ? 0\n : 4 - (validLen % 4)\n\n return [validLen, placeHoldersLen]\n}\n\n// base64 is 4/3 + up to two characters of the original data\nfunction byteLength (b64) {\n var lens = getLens(b64)\n var validLen = lens[0]\n var placeHoldersLen = lens[1]\n return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen\n}\n\nfunction _byteLength (b64, validLen, placeHoldersLen) {\n return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen\n}\n\nfunction toByteArray (b64) {\n var tmp\n var lens = getLens(b64)\n var validLen = lens[0]\n var placeHoldersLen = lens[1]\n\n var arr = new Arr(_byteLength(b64, validLen, placeHoldersLen))\n\n var curByte = 0\n\n // if there are placeholders, only get up to the last complete 4 chars\n var len = placeHoldersLen > 0\n ? validLen - 4\n : validLen\n\n var i\n for (i = 0; i < len; i += 4) {\n tmp =\n (revLookup[b64.charCodeAt(i)] << 18) |\n (revLookup[b64.charCodeAt(i + 1)] << 12) |\n (revLookup[b64.charCodeAt(i + 2)] << 6) |\n revLookup[b64.charCodeAt(i + 3)]\n arr[curByte++] = (tmp >> 16) & 0xFF\n arr[curByte++] = (tmp >> 8) & 0xFF\n arr[curByte++] = tmp & 0xFF\n }\n\n if (placeHoldersLen === 2) {\n tmp =\n (revLookup[b64.charCodeAt(i)] << 2) |\n (revLookup[b64.charCodeAt(i + 1)] >> 4)\n arr[curByte++] = tmp & 0xFF\n }\n\n if (placeHoldersLen === 1) {\n tmp =\n (revLookup[b64.charCodeAt(i)] << 10) |\n (revLookup[b64.charCodeAt(i + 1)] << 4) |\n (revLookup[b64.charCodeAt(i + 2)] >> 2)\n arr[curByte++] = (tmp >> 8) & 0xFF\n arr[curByte++] = tmp & 0xFF\n }\n\n return arr\n}\n\nfunction tripletToBase64 (num) {\n return lookup[num >> 18 & 0x3F] +\n lookup[num >> 12 & 0x3F] +\n lookup[num >> 6 & 0x3F] +\n lookup[num & 0x3F]\n}\n\nfunction encodeChunk (uint8, start, end) {\n var tmp\n var output = []\n for (var i = start; i < end; i += 3) {\n tmp =\n ((uint8[i] << 16) & 0xFF0000) +\n ((uint8[i + 1] << 8) & 0xFF00) +\n (uint8[i + 2] & 0xFF)\n output.push(tripletToBase64(tmp))\n }\n return output.join('')\n}\n\nfunction fromByteArray (uint8) {\n var tmp\n var len = uint8.length\n var extraBytes = len % 3 // if we have 1 byte left, pad 2 bytes\n var parts = []\n var maxChunkLength = 16383 // must be multiple of 3\n\n // go through the array every three bytes, we'll deal with trailing stuff later\n for (var i = 0, len2 = len - extraBytes; i < len2; i += maxChunkLength) {\n parts.push(encodeChunk(uint8, i, (i + maxChunkLength) > len2 ? len2 : (i + maxChunkLength)))\n }\n\n // pad the end with zeros, but make sure to not forget the extra bytes\n if (extraBytes === 1) {\n tmp = uint8[len - 1]\n parts.push(\n lookup[tmp >> 2] +\n lookup[(tmp << 4) & 0x3F] +\n '=='\n )\n } else if (extraBytes === 2) {\n tmp = (uint8[len - 2] << 8) + uint8[len - 1]\n parts.push(\n lookup[tmp >> 10] +\n lookup[(tmp >> 4) & 0x3F] +\n lookup[(tmp << 2) & 0x3F] +\n '='\n )\n }\n\n return parts.join('')\n}\n","var bigInt = (function (undefined) {\r\n \"use strict\";\r\n\r\n var BASE = 1e7,\r\n LOG_BASE = 7,\r\n MAX_INT = 9007199254740992,\r\n MAX_INT_ARR = smallToArray(MAX_INT),\r\n DEFAULT_ALPHABET = \"0123456789abcdefghijklmnopqrstuvwxyz\";\r\n\r\n var supportsNativeBigInt = typeof BigInt === \"function\";\r\n\r\n function Integer(v, radix, alphabet, caseSensitive) {\r\n if (typeof v === \"undefined\") return Integer[0];\r\n if (typeof radix !== \"undefined\") return +radix === 10 && !alphabet ? parseValue(v) : parseBase(v, radix, alphabet, caseSensitive);\r\n return parseValue(v);\r\n }\r\n\r\n function BigInteger(value, sign) {\r\n this.value = value;\r\n this.sign = sign;\r\n this.isSmall = false;\r\n }\r\n BigInteger.prototype = Object.create(Integer.prototype);\r\n\r\n function SmallInteger(value) {\r\n this.value = value;\r\n this.sign = value < 0;\r\n this.isSmall = true;\r\n }\r\n SmallInteger.prototype = Object.create(Integer.prototype);\r\n\r\n function NativeBigInt(value) {\r\n this.value = value;\r\n }\r\n NativeBigInt.prototype = Object.create(Integer.prototype);\r\n\r\n function isPrecise(n) {\r\n return -MAX_INT < n && n < MAX_INT;\r\n }\r\n\r\n function smallToArray(n) { // For performance reasons doesn't reference BASE, need to change this function if BASE changes\r\n if (n < 1e7)\r\n return [n];\r\n if (n < 1e14)\r\n return [n % 1e7, Math.floor(n / 1e7)];\r\n return [n % 1e7, Math.floor(n / 1e7) % 1e7, Math.floor(n / 1e14)];\r\n }\r\n\r\n function arrayToSmall(arr) { // If BASE changes this function may need to change\r\n trim(arr);\r\n var length = arr.length;\r\n if (length < 4 && compareAbs(arr, MAX_INT_ARR) < 0) {\r\n switch (length) {\r\n case 0: return 0;\r\n case 1: return arr[0];\r\n case 2: return arr[0] + arr[1] * BASE;\r\n default: return arr[0] + (arr[1] + arr[2] * BASE) * BASE;\r\n }\r\n }\r\n return arr;\r\n }\r\n\r\n function trim(v) {\r\n var i = v.length;\r\n while (v[--i] === 0);\r\n v.length = i + 1;\r\n }\r\n\r\n function createArray(length) { // function shamelessly stolen from Yaffle's library https://github.com/Yaffle/BigInteger\r\n var x = new Array(length);\r\n var i = -1;\r\n while (++i < length) {\r\n x[i] = 0;\r\n }\r\n return x;\r\n }\r\n\r\n function truncate(n) {\r\n if (n > 0) return Math.floor(n);\r\n return Math.ceil(n);\r\n }\r\n\r\n function add(a, b) { // assumes a and b are arrays with a.length >= b.length\r\n var l_a = a.length,\r\n l_b = b.length,\r\n r = new Array(l_a),\r\n carry = 0,\r\n base = BASE,\r\n sum, i;\r\n for (i = 0; i < l_b; i++) {\r\n sum = a[i] + b[i] + carry;\r\n carry = sum >= base ? 1 : 0;\r\n r[i] = sum - carry * base;\r\n }\r\n while (i < l_a) {\r\n sum = a[i] + carry;\r\n carry = sum === base ? 1 : 0;\r\n r[i++] = sum - carry * base;\r\n }\r\n if (carry > 0) r.push(carry);\r\n return r;\r\n }\r\n\r\n function addAny(a, b) {\r\n if (a.length >= b.length) return add(a, b);\r\n return add(b, a);\r\n }\r\n\r\n function addSmall(a, carry) { // assumes a is array, carry is number with 0 <= carry < MAX_INT\r\n var l = a.length,\r\n r = new Array(l),\r\n base = BASE,\r\n sum, i;\r\n for (i = 0; i < l; i++) {\r\n sum = a[i] - base + carry;\r\n carry = Math.floor(sum / base);\r\n r[i] = sum - carry * base;\r\n carry += 1;\r\n }\r\n while (carry > 0) {\r\n r[i++] = carry % base;\r\n carry = Math.floor(carry / base);\r\n }\r\n return r;\r\n }\r\n\r\n BigInteger.prototype.add = function (v) {\r\n var n = parseValue(v);\r\n if (this.sign !== n.sign) {\r\n return this.subtract(n.negate());\r\n }\r\n var a = this.value, b = n.value;\r\n if (n.isSmall) {\r\n return new BigInteger(addSmall(a, Math.abs(b)), this.sign);\r\n }\r\n return new BigInteger(addAny(a, b), this.sign);\r\n };\r\n BigInteger.prototype.plus = BigInteger.prototype.add;\r\n\r\n SmallInteger.prototype.add = function (v) {\r\n var n = parseValue(v);\r\n var a = this.value;\r\n if (a < 0 !== n.sign) {\r\n return this.subtract(n.negate());\r\n }\r\n var b = n.value;\r\n if (n.isSmall) {\r\n if (isPrecise(a + b)) return new SmallInteger(a + b);\r\n b = smallToArray(Math.abs(b));\r\n }\r\n return new BigInteger(addSmall(b, Math.abs(a)), a < 0);\r\n };\r\n SmallInteger.prototype.plus = SmallInteger.prototype.add;\r\n\r\n NativeBigInt.prototype.add = function (v) {\r\n return new NativeBigInt(this.value + parseValue(v).value);\r\n }\r\n NativeBigInt.prototype.plus = NativeBigInt.prototype.add;\r\n\r\n function subtract(a, b) { // assumes a and b are arrays with a >= b\r\n var a_l = a.length,\r\n b_l = b.length,\r\n r = new Array(a_l),\r\n borrow = 0,\r\n base = BASE,\r\n i, difference;\r\n for (i = 0; i < b_l; i++) {\r\n difference = a[i] - borrow - b[i];\r\n if (difference < 0) {\r\n difference += base;\r\n borrow = 1;\r\n } else borrow = 0;\r\n r[i] = difference;\r\n }\r\n for (i = b_l; i < a_l; i++) {\r\n difference = a[i] - borrow;\r\n if (difference < 0) difference += base;\r\n else {\r\n r[i++] = difference;\r\n break;\r\n }\r\n r[i] = difference;\r\n }\r\n for (; i < a_l; i++) {\r\n r[i] = a[i];\r\n }\r\n trim(r);\r\n return r;\r\n }\r\n\r\n function subtractAny(a, b, sign) {\r\n var value;\r\n if (compareAbs(a, b) >= 0) {\r\n value = subtract(a, b);\r\n } else {\r\n value = subtract(b, a);\r\n sign = !sign;\r\n }\r\n value = arrayToSmall(value);\r\n if (typeof value === \"number\") {\r\n if (sign) value = -value;\r\n return new SmallInteger(value);\r\n }\r\n return new BigInteger(value, sign);\r\n }\r\n\r\n function subtractSmall(a, b, sign) { // assumes a is array, b is number with 0 <= b < MAX_INT\r\n var l = a.length,\r\n r = new Array(l),\r\n carry = -b,\r\n base = BASE,\r\n i, difference;\r\n for (i = 0; i < l; i++) {\r\n difference = a[i] + carry;\r\n carry = Math.floor(difference / base);\r\n difference %= base;\r\n r[i] = difference < 0 ? difference + base : difference;\r\n }\r\n r = arrayToSmall(r);\r\n if (typeof r === \"number\") {\r\n if (sign) r = -r;\r\n return new SmallInteger(r);\r\n } return new BigInteger(r, sign);\r\n }\r\n\r\n BigInteger.prototype.subtract = function (v) {\r\n var n = parseValue(v);\r\n if (this.sign !== n.sign) {\r\n return this.add(n.negate());\r\n }\r\n var a = this.value, b = n.value;\r\n if (n.isSmall)\r\n return subtractSmall(a, Math.abs(b), this.sign);\r\n return subtractAny(a, b, this.sign);\r\n };\r\n BigInteger.prototype.minus = BigInteger.prototype.subtract;\r\n\r\n SmallInteger.prototype.subtract = function (v) {\r\n var n = parseValue(v);\r\n var a = this.value;\r\n if (a < 0 !== n.sign) {\r\n return this.add(n.negate());\r\n }\r\n var b = n.value;\r\n if (n.isSmall) {\r\n return new SmallInteger(a - b);\r\n }\r\n return subtractSmall(b, Math.abs(a), a >= 0);\r\n };\r\n SmallInteger.prototype.minus = SmallInteger.prototype.subtract;\r\n\r\n NativeBigInt.prototype.subtract = function (v) {\r\n return new NativeBigInt(this.value - parseValue(v).value);\r\n }\r\n NativeBigInt.prototype.minus = NativeBigInt.prototype.subtract;\r\n\r\n BigInteger.prototype.negate = function () {\r\n return new BigInteger(this.value, !this.sign);\r\n };\r\n SmallInteger.prototype.negate = function () {\r\n var sign = this.sign;\r\n var small = new SmallInteger(-this.value);\r\n small.sign = !sign;\r\n return small;\r\n };\r\n NativeBigInt.prototype.negate = function () {\r\n return new NativeBigInt(-this.value);\r\n }\r\n\r\n BigInteger.prototype.abs = function () {\r\n return new BigInteger(this.value, false);\r\n };\r\n SmallInteger.prototype.abs = function () {\r\n return new SmallInteger(Math.abs(this.value));\r\n };\r\n NativeBigInt.prototype.abs = function () {\r\n return new NativeBigInt(this.value >= 0 ? this.value : -this.value);\r\n }\r\n\r\n\r\n function multiplyLong(a, b) {\r\n var a_l = a.length,\r\n b_l = b.length,\r\n l = a_l + b_l,\r\n r = createArray(l),\r\n base = BASE,\r\n product, carry, i, a_i, b_j;\r\n for (i = 0; i < a_l; ++i) {\r\n a_i = a[i];\r\n for (var j = 0; j < b_l; ++j) {\r\n b_j = b[j];\r\n product = a_i * b_j + r[i + j];\r\n carry = Math.floor(product / base);\r\n r[i + j] = product - carry * base;\r\n r[i + j + 1] += carry;\r\n }\r\n }\r\n trim(r);\r\n return r;\r\n }\r\n\r\n function multiplySmall(a, b) { // assumes a is array, b is number with |b| < BASE\r\n var l = a.length,\r\n r = new Array(l),\r\n base = BASE,\r\n carry = 0,\r\n product, i;\r\n for (i = 0; i < l; i++) {\r\n product = a[i] * b + carry;\r\n carry = Math.floor(product / base);\r\n r[i] = product - carry * base;\r\n }\r\n while (carry > 0) {\r\n r[i++] = carry % base;\r\n carry = Math.floor(carry / base);\r\n }\r\n return r;\r\n }\r\n\r\n function shiftLeft(x, n) {\r\n var r = [];\r\n while (n-- > 0) r.push(0);\r\n return r.concat(x);\r\n }\r\n\r\n function multiplyKaratsuba(x, y) {\r\n var n = Math.max(x.length, y.length);\r\n\r\n if (n <= 30) return multiplyLong(x, y);\r\n n = Math.ceil(n / 2);\r\n\r\n var b = x.slice(n),\r\n a = x.slice(0, n),\r\n d = y.slice(n),\r\n c = y.slice(0, n);\r\n\r\n var ac = multiplyKaratsuba(a, c),\r\n bd = multiplyKaratsuba(b, d),\r\n abcd = multiplyKaratsuba(addAny(a, b), addAny(c, d));\r\n\r\n var product = addAny(addAny(ac, shiftLeft(subtract(subtract(abcd, ac), bd), n)), shiftLeft(bd, 2 * n));\r\n trim(product);\r\n return product;\r\n }\r\n\r\n // The following function is derived from a surface fit of a graph plotting the performance difference\r\n // between long multiplication and karatsuba multiplication versus the lengths of the two arrays.\r\n function useKaratsuba(l1, l2) {\r\n return -0.012 * l1 - 0.012 * l2 + 0.000015 * l1 * l2 > 0;\r\n }\r\n\r\n BigInteger.prototype.multiply = function (v) {\r\n var n = parseValue(v),\r\n a = this.value, b = n.value,\r\n sign = this.sign !== n.sign,\r\n abs;\r\n if (n.isSmall) {\r\n if (b === 0) return Integer[0];\r\n if (b === 1) return this;\r\n if (b === -1) return this.negate();\r\n abs = Math.abs(b);\r\n if (abs < BASE) {\r\n return new BigInteger(multiplySmall(a, abs), sign);\r\n }\r\n b = smallToArray(abs);\r\n }\r\n if (useKaratsuba(a.length, b.length)) // Karatsuba is only faster for certain array sizes\r\n return new BigInteger(multiplyKaratsuba(a, b), sign);\r\n return new BigInteger(multiplyLong(a, b), sign);\r\n };\r\n\r\n BigInteger.prototype.times = BigInteger.prototype.multiply;\r\n\r\n function multiplySmallAndArray(a, b, sign) { // a >= 0\r\n if (a < BASE) {\r\n return new BigInteger(multiplySmall(b, a), sign);\r\n }\r\n return new BigInteger(multiplyLong(b, smallToArray(a)), sign);\r\n }\r\n SmallInteger.prototype._multiplyBySmall = function (a) {\r\n if (isPrecise(a.value * this.value)) {\r\n return new SmallInteger(a.value * this.value);\r\n }\r\n return multiplySmallAndArray(Math.abs(a.value), smallToArray(Math.abs(this.value)), this.sign !== a.sign);\r\n };\r\n BigInteger.prototype._multiplyBySmall = function (a) {\r\n if (a.value === 0) return Integer[0];\r\n if (a.value === 1) return this;\r\n if (a.value === -1) return this.negate();\r\n return multiplySmallAndArray(Math.abs(a.value), this.value, this.sign !== a.sign);\r\n };\r\n SmallInteger.prototype.multiply = function (v) {\r\n return parseValue(v)._multiplyBySmall(this);\r\n };\r\n SmallInteger.prototype.times = SmallInteger.prototype.multiply;\r\n\r\n NativeBigInt.prototype.multiply = function (v) {\r\n return new NativeBigInt(this.value * parseValue(v).value);\r\n }\r\n NativeBigInt.prototype.times = NativeBigInt.prototype.multiply;\r\n\r\n function square(a) {\r\n //console.assert(2 * BASE * BASE < MAX_INT);\r\n var l = a.length,\r\n r = createArray(l + l),\r\n base = BASE,\r\n product, carry, i, a_i, a_j;\r\n for (i = 0; i < l; i++) {\r\n a_i = a[i];\r\n carry = 0 - a_i * a_i;\r\n for (var j = i; j < l; j++) {\r\n a_j = a[j];\r\n product = 2 * (a_i * a_j) + r[i + j] + carry;\r\n carry = Math.floor(product / base);\r\n r[i + j] = product - carry * base;\r\n }\r\n r[i + l] = carry;\r\n }\r\n trim(r);\r\n return r;\r\n }\r\n\r\n BigInteger.prototype.square = function () {\r\n return new BigInteger(square(this.value), false);\r\n };\r\n\r\n SmallInteger.prototype.square = function () {\r\n var value = this.value * this.value;\r\n if (isPrecise(value)) return new SmallInteger(value);\r\n return new BigInteger(square(smallToArray(Math.abs(this.value))), false);\r\n };\r\n\r\n NativeBigInt.prototype.square = function (v) {\r\n return new NativeBigInt(this.value * this.value);\r\n }\r\n\r\n function divMod1(a, b) { // Left over from previous version. Performs faster than divMod2 on smaller input sizes.\r\n var a_l = a.length,\r\n b_l = b.length,\r\n base = BASE,\r\n result = createArray(b.length),\r\n divisorMostSignificantDigit = b[b_l - 1],\r\n // normalization\r\n lambda = Math.ceil(base / (2 * divisorMostSignificantDigit)),\r\n remainder = multiplySmall(a, lambda),\r\n divisor = multiplySmall(b, lambda),\r\n quotientDigit, shift, carry, borrow, i, l, q;\r\n if (remainder.length <= a_l) remainder.push(0);\r\n divisor.push(0);\r\n divisorMostSignificantDigit = divisor[b_l - 1];\r\n for (shift = a_l - b_l; shift >= 0; shift--) {\r\n quotientDigit = base - 1;\r\n if (remainder[shift + b_l] !== divisorMostSignificantDigit) {\r\n quotientDigit = Math.floor((remainder[shift + b_l] * base + remainder[shift + b_l - 1]) / divisorMostSignificantDigit);\r\n }\r\n // quotientDigit <= base - 1\r\n carry = 0;\r\n borrow = 0;\r\n l = divisor.length;\r\n for (i = 0; i < l; i++) {\r\n carry += quotientDigit * divisor[i];\r\n q = Math.floor(carry / base);\r\n borrow += remainder[shift + i] - (carry - q * base);\r\n carry = q;\r\n if (borrow < 0) {\r\n remainder[shift + i] = borrow + base;\r\n borrow = -1;\r\n } else {\r\n remainder[shift + i] = borrow;\r\n borrow = 0;\r\n }\r\n }\r\n while (borrow !== 0) {\r\n quotientDigit -= 1;\r\n carry = 0;\r\n for (i = 0; i < l; i++) {\r\n carry += remainder[shift + i] - base + divisor[i];\r\n if (carry < 0) {\r\n remainder[shift + i] = carry + base;\r\n carry = 0;\r\n } else {\r\n remainder[shift + i] = carry;\r\n carry = 1;\r\n }\r\n }\r\n borrow += carry;\r\n }\r\n result[shift] = quotientDigit;\r\n }\r\n // denormalization\r\n remainder = divModSmall(remainder, lambda)[0];\r\n return [arrayToSmall(result), arrayToSmall(remainder)];\r\n }\r\n\r\n function divMod2(a, b) { // Implementation idea shamelessly stolen from Silent Matt's library http://silentmatt.com/biginteger/\r\n // Performs faster than divMod1 on larger input sizes.\r\n var a_l = a.length,\r\n b_l = b.length,\r\n result = [],\r\n part = [],\r\n base = BASE,\r\n guess, xlen, highx, highy, check;\r\n while (a_l) {\r\n part.unshift(a[--a_l]);\r\n trim(part);\r\n if (compareAbs(part, b) < 0) {\r\n result.push(0);\r\n continue;\r\n }\r\n xlen = part.length;\r\n highx = part[xlen - 1] * base + part[xlen - 2];\r\n highy = b[b_l - 1] * base + b[b_l - 2];\r\n if (xlen > b_l) {\r\n highx = (highx + 1) * base;\r\n }\r\n guess = Math.ceil(highx / highy);\r\n do {\r\n check = multiplySmall(b, guess);\r\n if (compareAbs(check, part) <= 0) break;\r\n guess--;\r\n } while (guess);\r\n result.push(guess);\r\n part = subtract(part, check);\r\n }\r\n result.reverse();\r\n return [arrayToSmall(result), arrayToSmall(part)];\r\n }\r\n\r\n function divModSmall(value, lambda) {\r\n var length = value.length,\r\n quotient = createArray(length),\r\n base = BASE,\r\n i, q, remainder, divisor;\r\n remainder = 0;\r\n for (i = length - 1; i >= 0; --i) {\r\n divisor = remainder * base + value[i];\r\n q = truncate(divisor / lambda);\r\n remainder = divisor - q * lambda;\r\n quotient[i] = q | 0;\r\n }\r\n return [quotient, remainder | 0];\r\n }\r\n\r\n function divModAny(self, v) {\r\n var value, n = parseValue(v);\r\n if (supportsNativeBigInt) {\r\n return [new NativeBigInt(self.value / n.value), new NativeBigInt(self.value % n.value)];\r\n }\r\n var a = self.value, b = n.value;\r\n var quotient;\r\n if (b === 0) throw new Error(\"Cannot divide by zero\");\r\n if (self.isSmall) {\r\n if (n.isSmall) {\r\n return [new SmallInteger(truncate(a / b)), new SmallInteger(a % b)];\r\n }\r\n return [Integer[0], self];\r\n }\r\n if (n.isSmall) {\r\n if (b === 1) return [self, Integer[0]];\r\n if (b == -1) return [self.negate(), Integer[0]];\r\n var abs = Math.abs(b);\r\n if (abs < BASE) {\r\n value = divModSmall(a, abs);\r\n quotient = arrayToSmall(value[0]);\r\n var remainder = value[1];\r\n if (self.sign) remainder = -remainder;\r\n if (typeof quotient === \"number\") {\r\n if (self.sign !== n.sign) quotient = -quotient;\r\n return [new SmallInteger(quotient), new SmallInteger(remainder)];\r\n }\r\n return [new BigInteger(quotient, self.sign !== n.sign), new SmallInteger(remainder)];\r\n }\r\n b = smallToArray(abs);\r\n }\r\n var comparison = compareAbs(a, b);\r\n if (comparison === -1) return [Integer[0], self];\r\n if (comparison === 0) return [Integer[self.sign === n.sign ? 1 : -1], Integer[0]];\r\n\r\n // divMod1 is faster on smaller input sizes\r\n if (a.length + b.length <= 200)\r\n value = divMod1(a, b);\r\n else value = divMod2(a, b);\r\n\r\n quotient = value[0];\r\n var qSign = self.sign !== n.sign,\r\n mod = value[1],\r\n mSign = self.sign;\r\n if (typeof quotient === \"number\") {\r\n if (qSign) quotient = -quotient;\r\n quotient = new SmallInteger(quotient);\r\n } else quotient = new BigInteger(quotient, qSign);\r\n if (typeof mod === \"number\") {\r\n if (mSign) mod = -mod;\r\n mod = new SmallInteger(mod);\r\n } else mod = new BigInteger(mod, mSign);\r\n return [quotient, mod];\r\n }\r\n\r\n BigInteger.prototype.divmod = function (v) {\r\n var result = divModAny(this, v);\r\n return {\r\n quotient: result[0],\r\n remainder: result[1]\r\n };\r\n };\r\n NativeBigInt.prototype.divmod = SmallInteger.prototype.divmod = BigInteger.prototype.divmod;\r\n\r\n\r\n BigInteger.prototype.divide = function (v) {\r\n return divModAny(this, v)[0];\r\n };\r\n NativeBigInt.prototype.over = NativeBigInt.prototype.divide = function (v) {\r\n return new NativeBigInt(this.value / parseValue(v).value);\r\n };\r\n SmallInteger.prototype.over = SmallInteger.prototype.divide = BigInteger.prototype.over = BigInteger.prototype.divide;\r\n\r\n BigInteger.prototype.mod = function (v) {\r\n return divModAny(this, v)[1];\r\n };\r\n NativeBigInt.prototype.mod = NativeBigInt.prototype.remainder = function (v) {\r\n return new NativeBigInt(this.value % parseValue(v).value);\r\n };\r\n SmallInteger.prototype.remainder = SmallInteger.prototype.mod = BigInteger.prototype.remainder = BigInteger.prototype.mod;\r\n\r\n BigInteger.prototype.pow = function (v) {\r\n var n = parseValue(v),\r\n a = this.value,\r\n b = n.value,\r\n value, x, y;\r\n if (b === 0) return Integer[1];\r\n if (a === 0) return Integer[0];\r\n if (a === 1) return Integer[1];\r\n if (a === -1) return n.isEven() ? Integer[1] : Integer[-1];\r\n if (n.sign) {\r\n return Integer[0];\r\n }\r\n if (!n.isSmall) throw new Error(\"The exponent \" + n.toString() + \" is too large.\");\r\n if (this.isSmall) {\r\n if (isPrecise(value = Math.pow(a, b)))\r\n return new SmallInteger(truncate(value));\r\n }\r\n x = this;\r\n y = Integer[1];\r\n while (true) {\r\n if (b & 1 === 1) {\r\n y = y.times(x);\r\n --b;\r\n }\r\n if (b === 0) break;\r\n b /= 2;\r\n x = x.square();\r\n }\r\n return y;\r\n };\r\n SmallInteger.prototype.pow = BigInteger.prototype.pow;\r\n\r\n NativeBigInt.prototype.pow = function (v) {\r\n var n = parseValue(v);\r\n var a = this.value, b = n.value;\r\n var _0 = BigInt(0), _1 = BigInt(1), _2 = BigInt(2);\r\n if (b === _0) return Integer[1];\r\n if (a === _0) return Integer[0];\r\n if (a === _1) return Integer[1];\r\n if (a === BigInt(-1)) return n.isEven() ? Integer[1] : Integer[-1];\r\n if (n.isNegative()) return new NativeBigInt(_0);\r\n var x = this;\r\n var y = Integer[1];\r\n while (true) {\r\n if ((b & _1) === _1) {\r\n y = y.times(x);\r\n --b;\r\n }\r\n if (b === _0) break;\r\n b /= _2;\r\n x = x.square();\r\n }\r\n return y;\r\n }\r\n\r\n BigInteger.prototype.modPow = function (exp, mod) {\r\n exp = parseValue(exp);\r\n mod = parseValue(mod);\r\n if (mod.isZero()) throw new Error(\"Cannot take modPow with modulus 0\");\r\n var r = Integer[1],\r\n base = this.mod(mod);\r\n if (exp.isNegative()) {\r\n exp = exp.multiply(Integer[-1]);\r\n base = base.modInv(mod);\r\n }\r\n while (exp.isPositive()) {\r\n if (base.isZero()) return Integer[0];\r\n if (exp.isOdd()) r = r.multiply(base).mod(mod);\r\n exp = exp.divide(2);\r\n base = base.square().mod(mod);\r\n }\r\n return r;\r\n };\r\n NativeBigInt.prototype.modPow = SmallInteger.prototype.modPow = BigInteger.prototype.modPow;\r\n\r\n function compareAbs(a, b) {\r\n if (a.length !== b.length) {\r\n return a.length > b.length ? 1 : -1;\r\n }\r\n for (var i = a.length - 1; i >= 0; i--) {\r\n if (a[i] !== b[i]) return a[i] > b[i] ? 1 : -1;\r\n }\r\n return 0;\r\n }\r\n\r\n BigInteger.prototype.compareAbs = function (v) {\r\n var n = parseValue(v),\r\n a = this.value,\r\n b = n.value;\r\n if (n.isSmall) return 1;\r\n return compareAbs(a, b);\r\n };\r\n SmallInteger.prototype.compareAbs = function (v) {\r\n var n = parseValue(v),\r\n a = Math.abs(this.value),\r\n b = n.value;\r\n if (n.isSmall) {\r\n b = Math.abs(b);\r\n return a === b ? 0 : a > b ? 1 : -1;\r\n }\r\n return -1;\r\n };\r\n NativeBigInt.prototype.compareAbs = function (v) {\r\n var a = this.value;\r\n var b = parseValue(v).value;\r\n a = a >= 0 ? a : -a;\r\n b = b >= 0 ? b : -b;\r\n return a === b ? 0 : a > b ? 1 : -1;\r\n }\r\n\r\n BigInteger.prototype.compare = function (v) {\r\n // See discussion about comparison with Infinity:\r\n // https://github.com/peterolson/BigInteger.js/issues/61\r\n if (v === Infinity) {\r\n return -1;\r\n }\r\n if (v === -Infinity) {\r\n return 1;\r\n }\r\n\r\n var n = parseValue(v),\r\n a = this.value,\r\n b = n.value;\r\n if (this.sign !== n.sign) {\r\n return n.sign ? 1 : -1;\r\n }\r\n if (n.isSmall) {\r\n return this.sign ? -1 : 1;\r\n }\r\n return compareAbs(a, b) * (this.sign ? -1 : 1);\r\n };\r\n BigInteger.prototype.compareTo = BigInteger.prototype.compare;\r\n\r\n SmallInteger.prototype.compare = function (v) {\r\n if (v === Infinity) {\r\n return -1;\r\n }\r\n if (v === -Infinity) {\r\n return 1;\r\n }\r\n\r\n var n = parseValue(v),\r\n a = this.value,\r\n b = n.value;\r\n if (n.isSmall) {\r\n return a == b ? 0 : a > b ? 1 : -1;\r\n }\r\n if (a < 0 !== n.sign) {\r\n return a < 0 ? -1 : 1;\r\n }\r\n return a < 0 ? 1 : -1;\r\n };\r\n SmallInteger.prototype.compareTo = SmallInteger.prototype.compare;\r\n\r\n NativeBigInt.prototype.compare = function (v) {\r\n if (v === Infinity) {\r\n return -1;\r\n }\r\n if (v === -Infinity) {\r\n return 1;\r\n }\r\n var a = this.value;\r\n var b = parseValue(v).value;\r\n return a === b ? 0 : a > b ? 1 : -1;\r\n }\r\n NativeBigInt.prototype.compareTo = NativeBigInt.prototype.compare;\r\n\r\n BigInteger.prototype.equals = function (v) {\r\n return this.compare(v) === 0;\r\n };\r\n NativeBigInt.prototype.eq = NativeBigInt.prototype.equals = SmallInteger.prototype.eq = SmallInteger.prototype.equals = BigInteger.prototype.eq = BigInteger.prototype.equals;\r\n\r\n BigInteger.prototype.notEquals = function (v) {\r\n return this.compare(v) !== 0;\r\n };\r\n NativeBigInt.prototype.neq = NativeBigInt.prototype.notEquals = SmallInteger.prototype.neq = SmallInteger.prototype.notEquals = BigInteger.prototype.neq = BigInteger.prototype.notEquals;\r\n\r\n BigInteger.prototype.greater = function (v) {\r\n return this.compare(v) > 0;\r\n };\r\n NativeBigInt.prototype.gt = NativeBigInt.prototype.greater = SmallInteger.prototype.gt = SmallInteger.prototype.greater = BigInteger.prototype.gt = BigInteger.prototype.greater;\r\n\r\n BigInteger.prototype.lesser = function (v) {\r\n return this.compare(v) < 0;\r\n };\r\n NativeBigInt.prototype.lt = NativeBigInt.prototype.lesser = SmallInteger.prototype.lt = SmallInteger.prototype.lesser = BigInteger.prototype.lt = BigInteger.prototype.lesser;\r\n\r\n BigInteger.prototype.greaterOrEquals = function (v) {\r\n return this.compare(v) >= 0;\r\n };\r\n NativeBigInt.prototype.geq = NativeBigInt.prototype.greaterOrEquals = SmallInteger.prototype.geq = SmallInteger.prototype.greaterOrEquals = BigInteger.prototype.geq = BigInteger.prototype.greaterOrEquals;\r\n\r\n BigInteger.prototype.lesserOrEquals = function (v) {\r\n return this.compare(v) <= 0;\r\n };\r\n NativeBigInt.prototype.leq = NativeBigInt.prototype.lesserOrEquals = SmallInteger.prototype.leq = SmallInteger.prototype.lesserOrEquals = BigInteger.prototype.leq = BigInteger.prototype.lesserOrEquals;\r\n\r\n BigInteger.prototype.isEven = function () {\r\n return (this.value[0] & 1) === 0;\r\n };\r\n SmallInteger.prototype.isEven = function () {\r\n return (this.value & 1) === 0;\r\n };\r\n NativeBigInt.prototype.isEven = function () {\r\n return (this.value & BigInt(1)) === BigInt(0);\r\n }\r\n\r\n BigInteger.prototype.isOdd = function () {\r\n return (this.value[0] & 1) === 1;\r\n };\r\n SmallInteger.prototype.isOdd = function () {\r\n return (this.value & 1) === 1;\r\n };\r\n NativeBigInt.prototype.isOdd = function () {\r\n return (this.value & BigInt(1)) === BigInt(1);\r\n }\r\n\r\n BigInteger.prototype.isPositive = function () {\r\n return !this.sign;\r\n };\r\n SmallInteger.prototype.isPositive = function () {\r\n return this.value > 0;\r\n };\r\n NativeBigInt.prototype.isPositive = SmallInteger.prototype.isPositive;\r\n\r\n BigInteger.prototype.isNegative = function () {\r\n return this.sign;\r\n };\r\n SmallInteger.prototype.isNegative = function () {\r\n return this.value < 0;\r\n };\r\n NativeBigInt.prototype.isNegative = SmallInteger.prototype.isNegative;\r\n\r\n BigInteger.prototype.isUnit = function () {\r\n return false;\r\n };\r\n SmallInteger.prototype.isUnit = function () {\r\n return Math.abs(this.value) === 1;\r\n };\r\n NativeBigInt.prototype.isUnit = function () {\r\n return this.abs().value === BigInt(1);\r\n }\r\n\r\n BigInteger.prototype.isZero = function () {\r\n return false;\r\n };\r\n SmallInteger.prototype.isZero = function () {\r\n return this.value === 0;\r\n };\r\n NativeBigInt.prototype.isZero = function () {\r\n return this.value === BigInt(0);\r\n }\r\n\r\n BigInteger.prototype.isDivisibleBy = function (v) {\r\n var n = parseValue(v);\r\n if (n.isZero()) return false;\r\n if (n.isUnit()) return true;\r\n if (n.compareAbs(2) === 0) return this.isEven();\r\n return this.mod(n).isZero();\r\n };\r\n NativeBigInt.prototype.isDivisibleBy = SmallInteger.prototype.isDivisibleBy = BigInteger.prototype.isDivisibleBy;\r\n\r\n function isBasicPrime(v) {\r\n var n = v.abs();\r\n if (n.isUnit()) return false;\r\n if (n.equals(2) || n.equals(3) || n.equals(5)) return true;\r\n if (n.isEven() || n.isDivisibleBy(3) || n.isDivisibleBy(5)) return false;\r\n if (n.lesser(49)) return true;\r\n // we don't know if it's prime: let the other functions figure it out\r\n }\r\n\r\n function millerRabinTest(n, a) {\r\n var nPrev = n.prev(),\r\n b = nPrev,\r\n r = 0,\r\n d, t, i, x;\r\n while (b.isEven()) b = b.divide(2), r++;\r\n next: for (i = 0; i < a.length; i++) {\r\n if (n.lesser(a[i])) continue;\r\n x = bigInt(a[i]).modPow(b, n);\r\n if (x.isUnit() || x.equals(nPrev)) continue;\r\n for (d = r - 1; d != 0; d--) {\r\n x = x.square().mod(n);\r\n if (x.isUnit()) return false;\r\n if (x.equals(nPrev)) continue next;\r\n }\r\n return false;\r\n }\r\n return true;\r\n }\r\n\r\n // Set \"strict\" to true to force GRH-supported lower bound of 2*log(N)^2\r\n BigInteger.prototype.isPrime = function (strict) {\r\n var isPrime = isBasicPrime(this);\r\n if (isPrime !== undefined) return isPrime;\r\n var n = this.abs();\r\n var bits = n.bitLength();\r\n if (bits <= 64)\r\n return millerRabinTest(n, [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37]);\r\n var logN = Math.log(2) * bits.toJSNumber();\r\n var t = Math.ceil((strict === true) ? (2 * Math.pow(logN, 2)) : logN);\r\n for (var a = [], i = 0; i < t; i++) {\r\n a.push(bigInt(i + 2));\r\n }\r\n return millerRabinTest(n, a);\r\n };\r\n NativeBigInt.prototype.isPrime = SmallInteger.prototype.isPrime = BigInteger.prototype.isPrime;\r\n\r\n BigInteger.prototype.isProbablePrime = function (iterations, rng) {\r\n var isPrime = isBasicPrime(this);\r\n if (isPrime !== undefined) return isPrime;\r\n var n = this.abs();\r\n var t = iterations === undefined ? 5 : iterations;\r\n for (var a = [], i = 0; i < t; i++) {\r\n a.push(bigInt.randBetween(2, n.minus(2), rng));\r\n }\r\n return millerRabinTest(n, a);\r\n };\r\n NativeBigInt.prototype.isProbablePrime = SmallInteger.prototype.isProbablePrime = BigInteger.prototype.isProbablePrime;\r\n\r\n BigInteger.prototype.modInv = function (n) {\r\n var t = bigInt.zero, newT = bigInt.one, r = parseValue(n), newR = this.abs(), q, lastT, lastR;\r\n while (!newR.isZero()) {\r\n q = r.divide(newR);\r\n lastT = t;\r\n lastR = r;\r\n t = newT;\r\n r = newR;\r\n newT = lastT.subtract(q.multiply(newT));\r\n newR = lastR.subtract(q.multiply(newR));\r\n }\r\n if (!r.isUnit()) throw new Error(this.toString() + \" and \" + n.toString() + \" are not co-prime\");\r\n if (t.compare(0) === -1) {\r\n t = t.add(n);\r\n }\r\n if (this.isNegative()) {\r\n return t.negate();\r\n }\r\n return t;\r\n };\r\n\r\n NativeBigInt.prototype.modInv = SmallInteger.prototype.modInv = BigInteger.prototype.modInv;\r\n\r\n BigInteger.prototype.next = function () {\r\n var value = this.value;\r\n if (this.sign) {\r\n return subtractSmall(value, 1, this.sign);\r\n }\r\n return new BigInteger(addSmall(value, 1), this.sign);\r\n };\r\n SmallInteger.prototype.next = function () {\r\n var value = this.value;\r\n if (value + 1 < MAX_INT) return new SmallInteger(value + 1);\r\n return new BigInteger(MAX_INT_ARR, false);\r\n };\r\n NativeBigInt.prototype.next = function () {\r\n return new NativeBigInt(this.value + BigInt(1));\r\n }\r\n\r\n BigInteger.prototype.prev = function () {\r\n var value = this.value;\r\n if (this.sign) {\r\n return new BigInteger(addSmall(value, 1), true);\r\n }\r\n return subtractSmall(value, 1, this.sign);\r\n };\r\n SmallInteger.prototype.prev = function () {\r\n var value = this.value;\r\n if (value - 1 > -MAX_INT) return new SmallInteger(value - 1);\r\n return new BigInteger(MAX_INT_ARR, true);\r\n };\r\n NativeBigInt.prototype.prev = function () {\r\n return new NativeBigInt(this.value - BigInt(1));\r\n }\r\n\r\n var powersOfTwo = [1];\r\n while (2 * powersOfTwo[powersOfTwo.length - 1] <= BASE) powersOfTwo.push(2 * powersOfTwo[powersOfTwo.length - 1]);\r\n var powers2Length = powersOfTwo.length, highestPower2 = powersOfTwo[powers2Length - 1];\r\n\r\n function shift_isSmall(n) {\r\n return Math.abs(n) <= BASE;\r\n }\r\n\r\n BigInteger.prototype.shiftLeft = function (v) {\r\n var n = parseValue(v).toJSNumber();\r\n if (!shift_isSmall(n)) {\r\n throw new Error(String(n) + \" is too large for shifting.\");\r\n }\r\n if (n < 0) return this.shiftRight(-n);\r\n var result = this;\r\n if (result.isZero()) return result;\r\n while (n >= powers2Length) {\r\n result = result.multiply(highestPower2);\r\n n -= powers2Length - 1;\r\n }\r\n return result.multiply(powersOfTwo[n]);\r\n };\r\n NativeBigInt.prototype.shiftLeft = function(v){\r\n v = parseValue(v)\r\n return new NativeBigInt(this.value << v.value)\r\n }\r\n SmallInteger.prototype.shiftLeft = BigInteger.prototype.shiftLeft;\r\n\r\n BigInteger.prototype.shiftRight = function (v) {\r\n var remQuo;\r\n var n = parseValue(v).toJSNumber();\r\n if (!shift_isSmall(n)) {\r\n throw new Error(String(n) + \" is too large for shifting.\");\r\n }\r\n if (n < 0) return this.shiftLeft(-n);\r\n var result = this;\r\n while (n >= powers2Length) {\r\n if (result.isZero() || (result.isNegative() && result.isUnit())) return result;\r\n remQuo = divModAny(result, highestPower2);\r\n result = remQuo[1].isNegative() ? remQuo[0].prev() : remQuo[0];\r\n n -= powers2Length - 1;\r\n }\r\n remQuo = divModAny(result, powersOfTwo[n]);\r\n return remQuo[1].isNegative() ? remQuo[0].prev() : remQuo[0];\r\n };\r\n NativeBigInt.prototype.shiftRight = function (v){\r\n v = parseValue(v)\r\n return new NativeBigInt(this.value >> v.value)\r\n }\r\n SmallInteger.prototype.shiftRight = BigInteger.prototype.shiftRight;\r\n\r\n function bitwise(x, y, fn) {\r\n y = parseValue(y);\r\n var xSign = x.isNegative(), ySign = y.isNegative();\r\n var xRem = xSign ? x.not() : x,\r\n yRem = ySign ? y.not() : y;\r\n var xDigit = 0, yDigit = 0;\r\n var xDivMod = null, yDivMod = null;\r\n var result = [];\r\n while (!xRem.isZero() || !yRem.isZero()) {\r\n xDivMod = divModAny(xRem, highestPower2);\r\n xDigit = xDivMod[1].toJSNumber();\r\n if (xSign) {\r\n xDigit = highestPower2 - 1 - xDigit; // two's complement for negative numbers\r\n }\r\n\r\n yDivMod = divModAny(yRem, highestPower2);\r\n yDigit = yDivMod[1].toJSNumber();\r\n if (ySign) {\r\n yDigit = highestPower2 - 1 - yDigit; // two's complement for negative numbers\r\n }\r\n\r\n xRem = xDivMod[0];\r\n yRem = yDivMod[0];\r\n result.push(fn(xDigit, yDigit));\r\n }\r\n var sum = fn(xSign ? 1 : 0, ySign ? 1 : 0) !== 0 ? bigInt(-1) : bigInt(0);\r\n for (var i = result.length - 1; i >= 0; i -= 1) {\r\n sum = sum.multiply(highestPower2).add(bigInt(result[i]));\r\n }\r\n return sum;\r\n }\r\n\r\n BigInteger.prototype.not = function () {\r\n return this.negate().prev();\r\n };\r\n NativeBigInt.prototype.not = SmallInteger.prototype.not = BigInteger.prototype.not;\r\n\r\n BigInteger.prototype.and = function (n) {\r\n return bitwise(this, n, function (a, b) { return a & b; });\r\n };\r\n NativeBigInt.prototype.and = SmallInteger.prototype.and = BigInteger.prototype.and;\r\n\r\n BigInteger.prototype.or = function (n) {\r\n return bitwise(this, n, function (a, b) { return a | b; });\r\n };\r\n NativeBigInt.prototype.or = SmallInteger.prototype.or = BigInteger.prototype.or;\r\n\r\n BigInteger.prototype.xor = function (n) {\r\n return bitwise(this, n, function (a, b) { return a ^ b; });\r\n };\r\n NativeBigInt.prototype.xor = SmallInteger.prototype.xor = BigInteger.prototype.xor;\r\n\r\n var LOBMASK_I = 1 << 30, LOBMASK_BI = (BASE & -BASE) * (BASE & -BASE) | LOBMASK_I;\r\n function roughLOB(n) { // get lowestOneBit (rough)\r\n // SmallInteger: return Min(lowestOneBit(n), 1 << 30)\r\n // BigInteger: return Min(lowestOneBit(n), 1 << 14) [BASE=1e7]\r\n var v = n.value,\r\n x = typeof v === \"number\" ? v | LOBMASK_I :\r\n typeof v === \"bigint\" ? v | BigInt(LOBMASK_I) :\r\n v[0] + v[1] * BASE | LOBMASK_BI;\r\n return x & -x;\r\n }\r\n\r\n function integerLogarithm(value, base) {\r\n if (base.compareTo(value) <= 0) {\r\n var tmp = integerLogarithm(value, base.square(base));\r\n var p = tmp.p;\r\n var e = tmp.e;\r\n var t = p.multiply(base);\r\n return t.compareTo(value) <= 0 ? { p: t, e: e * 2 + 1 } : { p: p, e: e * 2 };\r\n }\r\n return { p: bigInt(1), e: 0 };\r\n }\r\n\r\n BigInteger.prototype.bitLength = function () {\r\n var n = this;\r\n if (n.compareTo(bigInt(0)) < 0) {\r\n n = n.negate().subtract(bigInt(1));\r\n }\r\n if (n.compareTo(bigInt(0)) === 0) {\r\n return bigInt(0);\r\n }\r\n return bigInt(integerLogarithm(n, bigInt(2)).e).add(bigInt(1));\r\n }\r\n NativeBigInt.prototype.bitLength = SmallInteger.prototype.bitLength = BigInteger.prototype.bitLength;\r\n\r\n function max(a, b) {\r\n a = parseValue(a);\r\n b = parseValue(b);\r\n return a.greater(b) ? a : b;\r\n }\r\n function min(a, b) {\r\n a = parseValue(a);\r\n b = parseValue(b);\r\n return a.lesser(b) ? a : b;\r\n }\r\n function gcd(a, b) {\r\n a = parseValue(a).abs();\r\n b = parseValue(b).abs();\r\n if (a.equals(b)) return a;\r\n if (a.isZero()) return b;\r\n if (b.isZero()) return a;\r\n var c = Integer[1], d, t;\r\n while (a.isEven() && b.isEven()) {\r\n d = min(roughLOB(a), roughLOB(b));\r\n a = a.divide(d);\r\n b = b.divide(d);\r\n c = c.multiply(d);\r\n }\r\n while (a.isEven()) {\r\n a = a.divide(roughLOB(a));\r\n }\r\n do {\r\n while (b.isEven()) {\r\n b = b.divide(roughLOB(b));\r\n }\r\n if (a.greater(b)) {\r\n t = b; b = a; a = t;\r\n }\r\n b = b.subtract(a);\r\n } while (!b.isZero());\r\n return c.isUnit() ? a : a.multiply(c);\r\n }\r\n function lcm(a, b) {\r\n a = parseValue(a).abs();\r\n b = parseValue(b).abs();\r\n return a.divide(gcd(a, b)).multiply(b);\r\n }\r\n function randBetween(a, b, rng) {\r\n a = parseValue(a);\r\n b = parseValue(b);\r\n var usedRNG = rng || Math.random;\r\n var low = min(a, b), high = max(a, b);\r\n var range = high.subtract(low).add(1);\r\n if (range.isSmall) return low.add(Math.floor(usedRNG() * range));\r\n var digits = toBase(range, BASE).value;\r\n var result = [], restricted = true;\r\n for (var i = 0; i < digits.length; i++) {\r\n var top = restricted ? digits[i] : BASE;\r\n var digit = truncate(usedRNG() * top);\r\n result.push(digit);\r\n if (digit < top) restricted = false;\r\n }\r\n return low.add(Integer.fromArray(result, BASE, false));\r\n }\r\n\r\n var parseBase = function (text, base, alphabet, caseSensitive) {\r\n alphabet = alphabet || DEFAULT_ALPHABET;\r\n text = String(text);\r\n if (!caseSensitive) {\r\n text = text.toLowerCase();\r\n alphabet = alphabet.toLowerCase();\r\n }\r\n var length = text.length;\r\n var i;\r\n var absBase = Math.abs(base);\r\n var alphabetValues = {};\r\n for (i = 0; i < alphabet.length; i++) {\r\n alphabetValues[alphabet[i]] = i;\r\n }\r\n for (i = 0; i < length; i++) {\r\n var c = text[i];\r\n if (c === \"-\") continue;\r\n if (c in alphabetValues) {\r\n if (alphabetValues[c] >= absBase) {\r\n if (c === \"1\" && absBase === 1) continue;\r\n throw new Error(c + \" is not a valid digit in base \" + base + \".\");\r\n }\r\n }\r\n }\r\n base = parseValue(base);\r\n var digits = [];\r\n var isNegative = text[0] === \"-\";\r\n for (i = isNegative ? 1 : 0; i < text.length; i++) {\r\n var c = text[i];\r\n if (c in alphabetValues) digits.push(parseValue(alphabetValues[c]));\r\n else if (c === \"<\") {\r\n var start = i;\r\n do { i++; } while (text[i] !== \">\" && i < text.length);\r\n digits.push(parseValue(text.slice(start + 1, i)));\r\n }\r\n else throw new Error(c + \" is not a valid character\");\r\n }\r\n return parseBaseFromArray(digits, base, isNegative);\r\n };\r\n\r\n function parseBaseFromArray(digits, base, isNegative) {\r\n var val = Integer[0], pow = Integer[1], i;\r\n for (i = digits.length - 1; i >= 0; i--) {\r\n val = val.add(digits[i].times(pow));\r\n pow = pow.times(base);\r\n }\r\n return isNegative ? val.negate() : val;\r\n }\r\n\r\n function stringify(digit, alphabet) {\r\n alphabet = alphabet || DEFAULT_ALPHABET;\r\n if (digit < alphabet.length) {\r\n return alphabet[digit];\r\n }\r\n return \"<\" + digit + \">\";\r\n }\r\n\r\n function toBase(n, base) {\r\n base = bigInt(base);\r\n if (base.isZero()) {\r\n if (n.isZero()) return { value: [0], isNegative: false };\r\n throw new Error(\"Cannot convert nonzero numbers to base 0.\");\r\n }\r\n if (base.equals(-1)) {\r\n if (n.isZero()) return { value: [0], isNegative: false };\r\n if (n.isNegative())\r\n return {\r\n value: [].concat.apply([], Array.apply(null, Array(-n.toJSNumber()))\r\n .map(Array.prototype.valueOf, [1, 0])\r\n ),\r\n isNegative: false\r\n };\r\n\r\n var arr = Array.apply(null, Array(n.toJSNumber() - 1))\r\n .map(Array.prototype.valueOf, [0, 1]);\r\n arr.unshift([1]);\r\n return {\r\n value: [].concat.apply([], arr),\r\n isNegative: false\r\n };\r\n }\r\n\r\n var neg = false;\r\n if (n.isNegative() && base.isPositive()) {\r\n neg = true;\r\n n = n.abs();\r\n }\r\n if (base.isUnit()) {\r\n if (n.isZero()) return { value: [0], isNegative: false };\r\n\r\n return {\r\n value: Array.apply(null, Array(n.toJSNumber()))\r\n .map(Number.prototype.valueOf, 1),\r\n isNegative: neg\r\n };\r\n }\r\n var out = [];\r\n var left = n, divmod;\r\n while (left.isNegative() || left.compareAbs(base) >= 0) {\r\n divmod = left.divmod(base);\r\n left = divmod.quotient;\r\n var digit = divmod.remainder;\r\n if (digit.isNegative()) {\r\n digit = base.minus(digit).abs();\r\n left = left.next();\r\n }\r\n out.push(digit.toJSNumber());\r\n }\r\n out.push(left.toJSNumber());\r\n return { value: out.reverse(), isNegative: neg };\r\n }\r\n\r\n function toBaseString(n, base, alphabet) {\r\n var arr = toBase(n, base);\r\n return (arr.isNegative ? \"-\" : \"\") + arr.value.map(function (x) {\r\n return stringify(x, alphabet);\r\n }).join('');\r\n }\r\n\r\n BigInteger.prototype.toArray = function (radix) {\r\n return toBase(this, radix);\r\n };\r\n\r\n SmallInteger.prototype.toArray = function (radix) {\r\n return toBase(this, radix);\r\n };\r\n\r\n NativeBigInt.prototype.toArray = function (radix) {\r\n return toBase(this, radix);\r\n };\r\n\r\n BigInteger.prototype.toString = function (radix, alphabet) {\r\n if (radix === undefined) radix = 10;\r\n if (radix !== 10) return toBaseString(this, radix, alphabet);\r\n var v = this.value, l = v.length, str = String(v[--l]), zeros = \"0000000\", digit;\r\n while (--l >= 0) {\r\n digit = String(v[l]);\r\n str += zeros.slice(digit.length) + digit;\r\n }\r\n var sign = this.sign ? \"-\" : \"\";\r\n return sign + str;\r\n };\r\n\r\n SmallInteger.prototype.toString = function (radix, alphabet) {\r\n if (radix === undefined) radix = 10;\r\n if (radix != 10) return toBaseString(this, radix, alphabet);\r\n return String(this.value);\r\n };\r\n\r\n NativeBigInt.prototype.toString = SmallInteger.prototype.toString;\r\n\r\n NativeBigInt.prototype.toJSON = BigInteger.prototype.toJSON = SmallInteger.prototype.toJSON = function () { return this.toString(); }\r\n\r\n BigInteger.prototype.valueOf = function () {\r\n return parseInt(this.toString(), 10);\r\n };\r\n BigInteger.prototype.toJSNumber = BigInteger.prototype.valueOf;\r\n\r\n SmallInteger.prototype.valueOf = function () {\r\n return this.value;\r\n };\r\n SmallInteger.prototype.toJSNumber = SmallInteger.prototype.valueOf;\r\n NativeBigInt.prototype.valueOf = NativeBigInt.prototype.toJSNumber = function () {\r\n return parseInt(this.toString(), 10);\r\n }\r\n\r\n function parseStringValue(v) {\r\n if (isPrecise(+v)) {\r\n var x = +v;\r\n if (x === truncate(x))\r\n return supportsNativeBigInt ? new NativeBigInt(BigInt(x)) : new SmallInteger(x);\r\n throw new Error(\"Invalid integer: \" + v);\r\n }\r\n var sign = v[0] === \"-\";\r\n if (sign) v = v.slice(1);\r\n var split = v.split(/e/i);\r\n if (split.length > 2) throw new Error(\"Invalid integer: \" + split.join(\"e\"));\r\n if (split.length === 2) {\r\n var exp = split[1];\r\n if (exp[0] === \"+\") exp = exp.slice(1);\r\n exp = +exp;\r\n if (exp !== truncate(exp) || !isPrecise(exp)) throw new Error(\"Invalid integer: \" + exp + \" is not a valid exponent.\");\r\n var text = split[0];\r\n var decimalPlace = text.indexOf(\".\");\r\n if (decimalPlace >= 0) {\r\n exp -= text.length - decimalPlace - 1;\r\n text = text.slice(0, decimalPlace) + text.slice(decimalPlace + 1);\r\n }\r\n if (exp < 0) throw new Error(\"Cannot include negative exponent part for integers\");\r\n text += (new Array(exp + 1)).join(\"0\");\r\n v = text;\r\n }\r\n var isValid = /^([0-9][0-9]*)$/.test(v);\r\n if (!isValid) throw new Error(\"Invalid integer: \" + v);\r\n if (supportsNativeBigInt) {\r\n return new NativeBigInt(BigInt(sign ? \"-\" + v : v));\r\n }\r\n var r = [], max = v.length, l = LOG_BASE, min = max - l;\r\n while (max > 0) {\r\n r.push(+v.slice(min, max));\r\n min -= l;\r\n if (min < 0) min = 0;\r\n max -= l;\r\n }\r\n trim(r);\r\n return new BigInteger(r, sign);\r\n }\r\n\r\n function parseNumberValue(v) {\r\n if (supportsNativeBigInt) {\r\n return new NativeBigInt(BigInt(v));\r\n }\r\n if (isPrecise(v)) {\r\n if (v !== truncate(v)) throw new Error(v + \" is not an integer.\");\r\n return new SmallInteger(v);\r\n }\r\n return parseStringValue(v.toString());\r\n }\r\n\r\n function parseValue(v) {\r\n if (typeof v === \"number\") {\r\n return parseNumberValue(v);\r\n }\r\n if (typeof v === \"string\") {\r\n return parseStringValue(v);\r\n }\r\n if (typeof v === \"bigint\") {\r\n return new NativeBigInt(v);\r\n }\r\n return v;\r\n }\r\n // Pre-define numbers in range [-999,999]\r\n for (var i = 0; i < 1000; i++) {\r\n Integer[i] = parseValue(i);\r\n if (i > 0) Integer[-i] = parseValue(-i);\r\n }\r\n // Backwards compatibility\r\n Integer.one = Integer[1];\r\n Integer.zero = Integer[0];\r\n Integer.minusOne = Integer[-1];\r\n Integer.max = max;\r\n Integer.min = min;\r\n Integer.gcd = gcd;\r\n Integer.lcm = lcm;\r\n Integer.isInstance = function (x) { return x instanceof BigInteger || x instanceof SmallInteger || x instanceof NativeBigInt; };\r\n Integer.randBetween = randBetween;\r\n\r\n Integer.fromArray = function (digits, base, isNegative) {\r\n return parseBaseFromArray(digits.map(parseValue), parseValue(base || 10), isNegative);\r\n };\r\n\r\n return Integer;\r\n})();\r\n\r\n// Node.js check\r\nif (typeof module !== \"undefined\" && module.hasOwnProperty(\"exports\")) {\r\n module.exports = bigInt;\r\n}\r\n\r\n//amd check\r\nif (typeof define === \"function\" && define.amd) {\r\n define( function () {\r\n return bigInt;\r\n });\r\n}\r\n","/*!\n * The buffer module from node.js, for the browser.\n *\n * @author Feross Aboukhadijeh \n * @license MIT\n */\n/* eslint-disable no-proto */\n\n'use strict'\n\nconst base64 = require('base64-js')\nconst ieee754 = require('ieee754')\nconst customInspectSymbol =\n (typeof Symbol === 'function' && typeof Symbol['for'] === 'function') // eslint-disable-line dot-notation\n ? Symbol['for']('nodejs.util.inspect.custom') // eslint-disable-line dot-notation\n : null\n\nexports.Buffer = Buffer\nexports.SlowBuffer = SlowBuffer\nexports.INSPECT_MAX_BYTES = 50\n\nconst K_MAX_LENGTH = 0x7fffffff\nexports.kMaxLength = K_MAX_LENGTH\n\n/**\n * If `Buffer.TYPED_ARRAY_SUPPORT`:\n * === true Use Uint8Array implementation (fastest)\n * === false Print warning and recommend using `buffer` v4.x which has an Object\n * implementation (most compatible, even IE6)\n *\n * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+,\n * Opera 11.6+, iOS 4.2+.\n *\n * We report that the browser does not support typed arrays if the are not subclassable\n * using __proto__. Firefox 4-29 lacks support for adding new properties to `Uint8Array`\n * (See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438). IE 10 lacks support\n * for __proto__ and has a buggy typed array implementation.\n */\nBuffer.TYPED_ARRAY_SUPPORT = typedArraySupport()\n\nif (!Buffer.TYPED_ARRAY_SUPPORT && typeof console !== 'undefined' &&\n typeof console.error === 'function') {\n console.error(\n 'This browser lacks typed array (Uint8Array) support which is required by ' +\n '`buffer` v5.x. Use `buffer` v4.x if you require old browser support.'\n )\n}\n\nfunction typedArraySupport () {\n // Can typed array instances can be augmented?\n try {\n const arr = new Uint8Array(1)\n const proto = { foo: function () { return 42 } }\n Object.setPrototypeOf(proto, Uint8Array.prototype)\n Object.setPrototypeOf(arr, proto)\n return arr.foo() === 42\n } catch (e) {\n return false\n }\n}\n\nObject.defineProperty(Buffer.prototype, 'parent', {\n enumerable: true,\n get: function () {\n if (!Buffer.isBuffer(this)) return undefined\n return this.buffer\n }\n})\n\nObject.defineProperty(Buffer.prototype, 'offset', {\n enumerable: true,\n get: function () {\n if (!Buffer.isBuffer(this)) return undefined\n return this.byteOffset\n }\n})\n\nfunction createBuffer (length) {\n if (length > K_MAX_LENGTH) {\n throw new RangeError('The value \"' + length + '\" is invalid for option \"size\"')\n }\n // Return an augmented `Uint8Array` instance\n const buf = new Uint8Array(length)\n Object.setPrototypeOf(buf, Buffer.prototype)\n return buf\n}\n\n/**\n * The Buffer constructor returns instances of `Uint8Array` that have their\n * prototype changed to `Buffer.prototype`. Furthermore, `Buffer` is a subclass of\n * `Uint8Array`, so the returned instances will have all the node `Buffer` methods\n * and the `Uint8Array` methods. Square bracket notation works as expected -- it\n * returns a single octet.\n *\n * The `Uint8Array` prototype remains unmodified.\n */\n\nfunction Buffer (arg, encodingOrOffset, length) {\n // Common case.\n if (typeof arg === 'number') {\n if (typeof encodingOrOffset === 'string') {\n throw new TypeError(\n 'The \"string\" argument must be of type string. Received type number'\n )\n }\n return allocUnsafe(arg)\n }\n return from(arg, encodingOrOffset, length)\n}\n\nBuffer.poolSize = 8192 // not used by this implementation\n\nfunction from (value, encodingOrOffset, length) {\n if (typeof value === 'string') {\n return fromString(value, encodingOrOffset)\n }\n\n if (ArrayBuffer.isView(value)) {\n return fromArrayView(value)\n }\n\n if (value == null) {\n throw new TypeError(\n 'The first argument must be one of type string, Buffer, ArrayBuffer, Array, ' +\n 'or Array-like Object. Received type ' + (typeof value)\n )\n }\n\n if (isInstance(value, ArrayBuffer) ||\n (value && isInstance(value.buffer, ArrayBuffer))) {\n return fromArrayBuffer(value, encodingOrOffset, length)\n }\n\n if (typeof SharedArrayBuffer !== 'undefined' &&\n (isInstance(value, SharedArrayBuffer) ||\n (value && isInstance(value.buffer, SharedArrayBuffer)))) {\n return fromArrayBuffer(value, encodingOrOffset, length)\n }\n\n if (typeof value === 'number') {\n throw new TypeError(\n 'The \"value\" argument must not be of type number. Received type number'\n )\n }\n\n const valueOf = value.valueOf && value.valueOf()\n if (valueOf != null && valueOf !== value) {\n return Buffer.from(valueOf, encodingOrOffset, length)\n }\n\n const b = fromObject(value)\n if (b) return b\n\n if (typeof Symbol !== 'undefined' && Symbol.toPrimitive != null &&\n typeof value[Symbol.toPrimitive] === 'function') {\n return Buffer.from(value[Symbol.toPrimitive]('string'), encodingOrOffset, length)\n }\n\n throw new TypeError(\n 'The first argument must be one of type string, Buffer, ArrayBuffer, Array, ' +\n 'or Array-like Object. Received type ' + (typeof value)\n )\n}\n\n/**\n * Functionally equivalent to Buffer(arg, encoding) but throws a TypeError\n * if value is a number.\n * Buffer.from(str[, encoding])\n * Buffer.from(array)\n * Buffer.from(buffer)\n * Buffer.from(arrayBuffer[, byteOffset[, length]])\n **/\nBuffer.from = function (value, encodingOrOffset, length) {\n return from(value, encodingOrOffset, length)\n}\n\n// Note: Change prototype *after* Buffer.from is defined to workaround Chrome bug:\n// https://github.com/feross/buffer/pull/148\nObject.setPrototypeOf(Buffer.prototype, Uint8Array.prototype)\nObject.setPrototypeOf(Buffer, Uint8Array)\n\nfunction assertSize (size) {\n if (typeof size !== 'number') {\n throw new TypeError('\"size\" argument must be of type number')\n } else if (size < 0) {\n throw new RangeError('The value \"' + size + '\" is invalid for option \"size\"')\n }\n}\n\nfunction alloc (size, fill, encoding) {\n assertSize(size)\n if (size <= 0) {\n return createBuffer(size)\n }\n if (fill !== undefined) {\n // Only pay attention to encoding if it's a string. This\n // prevents accidentally sending in a number that would\n // be interpreted as a start offset.\n return typeof encoding === 'string'\n ? createBuffer(size).fill(fill, encoding)\n : createBuffer(size).fill(fill)\n }\n return createBuffer(size)\n}\n\n/**\n * Creates a new filled Buffer instance.\n * alloc(size[, fill[, encoding]])\n **/\nBuffer.alloc = function (size, fill, encoding) {\n return alloc(size, fill, encoding)\n}\n\nfunction allocUnsafe (size) {\n assertSize(size)\n return createBuffer(size < 0 ? 0 : checked(size) | 0)\n}\n\n/**\n * Equivalent to Buffer(num), by default creates a non-zero-filled Buffer instance.\n * */\nBuffer.allocUnsafe = function (size) {\n return allocUnsafe(size)\n}\n/**\n * Equivalent to SlowBuffer(num), by default creates a non-zero-filled Buffer instance.\n */\nBuffer.allocUnsafeSlow = function (size) {\n return allocUnsafe(size)\n}\n\nfunction fromString (string, encoding) {\n if (typeof encoding !== 'string' || encoding === '') {\n encoding = 'utf8'\n }\n\n if (!Buffer.isEncoding(encoding)) {\n throw new TypeError('Unknown encoding: ' + encoding)\n }\n\n const length = byteLength(string, encoding) | 0\n let buf = createBuffer(length)\n\n const actual = buf.write(string, encoding)\n\n if (actual !== length) {\n // Writing a hex string, for example, that contains invalid characters will\n // cause everything after the first invalid character to be ignored. (e.g.\n // 'abxxcd' will be treated as 'ab')\n buf = buf.slice(0, actual)\n }\n\n return buf\n}\n\nfunction fromArrayLike (array) {\n const length = array.length < 0 ? 0 : checked(array.length) | 0\n const buf = createBuffer(length)\n for (let i = 0; i < length; i += 1) {\n buf[i] = array[i] & 255\n }\n return buf\n}\n\nfunction fromArrayView (arrayView) {\n if (isInstance(arrayView, Uint8Array)) {\n const copy = new Uint8Array(arrayView)\n return fromArrayBuffer(copy.buffer, copy.byteOffset, copy.byteLength)\n }\n return fromArrayLike(arrayView)\n}\n\nfunction fromArrayBuffer (array, byteOffset, length) {\n if (byteOffset < 0 || array.byteLength < byteOffset) {\n throw new RangeError('\"offset\" is outside of buffer bounds')\n }\n\n if (array.byteLength < byteOffset + (length || 0)) {\n throw new RangeError('\"length\" is outside of buffer bounds')\n }\n\n let buf\n if (byteOffset === undefined && length === undefined) {\n buf = new Uint8Array(array)\n } else if (length === undefined) {\n buf = new Uint8Array(array, byteOffset)\n } else {\n buf = new Uint8Array(array, byteOffset, length)\n }\n\n // Return an augmented `Uint8Array` instance\n Object.setPrototypeOf(buf, Buffer.prototype)\n\n return buf\n}\n\nfunction fromObject (obj) {\n if (Buffer.isBuffer(obj)) {\n const len = checked(obj.length) | 0\n const buf = createBuffer(len)\n\n if (buf.length === 0) {\n return buf\n }\n\n obj.copy(buf, 0, 0, len)\n return buf\n }\n\n if (obj.length !== undefined) {\n if (typeof obj.length !== 'number' || numberIsNaN(obj.length)) {\n return createBuffer(0)\n }\n return fromArrayLike(obj)\n }\n\n if (obj.type === 'Buffer' && Array.isArray(obj.data)) {\n return fromArrayLike(obj.data)\n }\n}\n\nfunction checked (length) {\n // Note: cannot use `length < K_MAX_LENGTH` here because that fails when\n // length is NaN (which is otherwise coerced to zero.)\n if (length >= K_MAX_LENGTH) {\n throw new RangeError('Attempt to allocate Buffer larger than maximum ' +\n 'size: 0x' + K_MAX_LENGTH.toString(16) + ' bytes')\n }\n return length | 0\n}\n\nfunction SlowBuffer (length) {\n if (+length != length) { // eslint-disable-line eqeqeq\n length = 0\n }\n return Buffer.alloc(+length)\n}\n\nBuffer.isBuffer = function isBuffer (b) {\n return b != null && b._isBuffer === true &&\n b !== Buffer.prototype // so Buffer.isBuffer(Buffer.prototype) will be false\n}\n\nBuffer.compare = function compare (a, b) {\n if (isInstance(a, Uint8Array)) a = Buffer.from(a, a.offset, a.byteLength)\n if (isInstance(b, Uint8Array)) b = Buffer.from(b, b.offset, b.byteLength)\n if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) {\n throw new TypeError(\n 'The \"buf1\", \"buf2\" arguments must be one of type Buffer or Uint8Array'\n )\n }\n\n if (a === b) return 0\n\n let x = a.length\n let y = b.length\n\n for (let i = 0, len = Math.min(x, y); i < len; ++i) {\n if (a[i] !== b[i]) {\n x = a[i]\n y = b[i]\n break\n }\n }\n\n if (x < y) return -1\n if (y < x) return 1\n return 0\n}\n\nBuffer.isEncoding = function isEncoding (encoding) {\n switch (String(encoding).toLowerCase()) {\n case 'hex':\n case 'utf8':\n case 'utf-8':\n case 'ascii':\n case 'latin1':\n case 'binary':\n case 'base64':\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return true\n default:\n return false\n }\n}\n\nBuffer.concat = function concat (list, length) {\n if (!Array.isArray(list)) {\n throw new TypeError('\"list\" argument must be an Array of Buffers')\n }\n\n if (list.length === 0) {\n return Buffer.alloc(0)\n }\n\n let i\n if (length === undefined) {\n length = 0\n for (i = 0; i < list.length; ++i) {\n length += list[i].length\n }\n }\n\n const buffer = Buffer.allocUnsafe(length)\n let pos = 0\n for (i = 0; i < list.length; ++i) {\n let buf = list[i]\n if (isInstance(buf, Uint8Array)) {\n if (pos + buf.length > buffer.length) {\n if (!Buffer.isBuffer(buf)) buf = Buffer.from(buf)\n buf.copy(buffer, pos)\n } else {\n Uint8Array.prototype.set.call(\n buffer,\n buf,\n pos\n )\n }\n } else if (!Buffer.isBuffer(buf)) {\n throw new TypeError('\"list\" argument must be an Array of Buffers')\n } else {\n buf.copy(buffer, pos)\n }\n pos += buf.length\n }\n return buffer\n}\n\nfunction byteLength (string, encoding) {\n if (Buffer.isBuffer(string)) {\n return string.length\n }\n if (ArrayBuffer.isView(string) || isInstance(string, ArrayBuffer)) {\n return string.byteLength\n }\n if (typeof string !== 'string') {\n throw new TypeError(\n 'The \"string\" argument must be one of type string, Buffer, or ArrayBuffer. ' +\n 'Received type ' + typeof string\n )\n }\n\n const len = string.length\n const mustMatch = (arguments.length > 2 && arguments[2] === true)\n if (!mustMatch && len === 0) return 0\n\n // Use a for loop to avoid recursion\n let loweredCase = false\n for (;;) {\n switch (encoding) {\n case 'ascii':\n case 'latin1':\n case 'binary':\n return len\n case 'utf8':\n case 'utf-8':\n return utf8ToBytes(string).length\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return len * 2\n case 'hex':\n return len >>> 1\n case 'base64':\n return base64ToBytes(string).length\n default:\n if (loweredCase) {\n return mustMatch ? -1 : utf8ToBytes(string).length // assume utf8\n }\n encoding = ('' + encoding).toLowerCase()\n loweredCase = true\n }\n }\n}\nBuffer.byteLength = byteLength\n\nfunction slowToString (encoding, start, end) {\n let loweredCase = false\n\n // No need to verify that \"this.length <= MAX_UINT32\" since it's a read-only\n // property of a typed array.\n\n // This behaves neither like String nor Uint8Array in that we set start/end\n // to their upper/lower bounds if the value passed is out of range.\n // undefined is handled specially as per ECMA-262 6th Edition,\n // Section 13.3.3.7 Runtime Semantics: KeyedBindingInitialization.\n if (start === undefined || start < 0) {\n start = 0\n }\n // Return early if start > this.length. Done here to prevent potential uint32\n // coercion fail below.\n if (start > this.length) {\n return ''\n }\n\n if (end === undefined || end > this.length) {\n end = this.length\n }\n\n if (end <= 0) {\n return ''\n }\n\n // Force coercion to uint32. This will also coerce falsey/NaN values to 0.\n end >>>= 0\n start >>>= 0\n\n if (end <= start) {\n return ''\n }\n\n if (!encoding) encoding = 'utf8'\n\n while (true) {\n switch (encoding) {\n case 'hex':\n return hexSlice(this, start, end)\n\n case 'utf8':\n case 'utf-8':\n return utf8Slice(this, start, end)\n\n case 'ascii':\n return asciiSlice(this, start, end)\n\n case 'latin1':\n case 'binary':\n return latin1Slice(this, start, end)\n\n case 'base64':\n return base64Slice(this, start, end)\n\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return utf16leSlice(this, start, end)\n\n default:\n if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)\n encoding = (encoding + '').toLowerCase()\n loweredCase = true\n }\n }\n}\n\n// This property is used by `Buffer.isBuffer` (and the `is-buffer` npm package)\n// to detect a Buffer instance. It's not possible to use `instanceof Buffer`\n// reliably in a browserify context because there could be multiple different\n// copies of the 'buffer' package in use. This method works even for Buffer\n// instances that were created from another copy of the `buffer` package.\n// See: https://github.com/feross/buffer/issues/154\nBuffer.prototype._isBuffer = true\n\nfunction swap (b, n, m) {\n const i = b[n]\n b[n] = b[m]\n b[m] = i\n}\n\nBuffer.prototype.swap16 = function swap16 () {\n const len = this.length\n if (len % 2 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 16-bits')\n }\n for (let i = 0; i < len; i += 2) {\n swap(this, i, i + 1)\n }\n return this\n}\n\nBuffer.prototype.swap32 = function swap32 () {\n const len = this.length\n if (len % 4 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 32-bits')\n }\n for (let i = 0; i < len; i += 4) {\n swap(this, i, i + 3)\n swap(this, i + 1, i + 2)\n }\n return this\n}\n\nBuffer.prototype.swap64 = function swap64 () {\n const len = this.length\n if (len % 8 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 64-bits')\n }\n for (let i = 0; i < len; i += 8) {\n swap(this, i, i + 7)\n swap(this, i + 1, i + 6)\n swap(this, i + 2, i + 5)\n swap(this, i + 3, i + 4)\n }\n return this\n}\n\nBuffer.prototype.toString = function toString () {\n const length = this.length\n if (length === 0) return ''\n if (arguments.length === 0) return utf8Slice(this, 0, length)\n return slowToString.apply(this, arguments)\n}\n\nBuffer.prototype.toLocaleString = Buffer.prototype.toString\n\nBuffer.prototype.equals = function equals (b) {\n if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer')\n if (this === b) return true\n return Buffer.compare(this, b) === 0\n}\n\nBuffer.prototype.inspect = function inspect () {\n let str = ''\n const max = exports.INSPECT_MAX_BYTES\n str = this.toString('hex', 0, max).replace(/(.{2})/g, '$1 ').trim()\n if (this.length > max) str += ' ... '\n return ''\n}\nif (customInspectSymbol) {\n Buffer.prototype[customInspectSymbol] = Buffer.prototype.inspect\n}\n\nBuffer.prototype.compare = function compare (target, start, end, thisStart, thisEnd) {\n if (isInstance(target, Uint8Array)) {\n target = Buffer.from(target, target.offset, target.byteLength)\n }\n if (!Buffer.isBuffer(target)) {\n throw new TypeError(\n 'The \"target\" argument must be one of type Buffer or Uint8Array. ' +\n 'Received type ' + (typeof target)\n )\n }\n\n if (start === undefined) {\n start = 0\n }\n if (end === undefined) {\n end = target ? target.length : 0\n }\n if (thisStart === undefined) {\n thisStart = 0\n }\n if (thisEnd === undefined) {\n thisEnd = this.length\n }\n\n if (start < 0 || end > target.length || thisStart < 0 || thisEnd > this.length) {\n throw new RangeError('out of range index')\n }\n\n if (thisStart >= thisEnd && start >= end) {\n return 0\n }\n if (thisStart >= thisEnd) {\n return -1\n }\n if (start >= end) {\n return 1\n }\n\n start >>>= 0\n end >>>= 0\n thisStart >>>= 0\n thisEnd >>>= 0\n\n if (this === target) return 0\n\n let x = thisEnd - thisStart\n let y = end - start\n const len = Math.min(x, y)\n\n const thisCopy = this.slice(thisStart, thisEnd)\n const targetCopy = target.slice(start, end)\n\n for (let i = 0; i < len; ++i) {\n if (thisCopy[i] !== targetCopy[i]) {\n x = thisCopy[i]\n y = targetCopy[i]\n break\n }\n }\n\n if (x < y) return -1\n if (y < x) return 1\n return 0\n}\n\n// Finds either the first index of `val` in `buffer` at offset >= `byteOffset`,\n// OR the last index of `val` in `buffer` at offset <= `byteOffset`.\n//\n// Arguments:\n// - buffer - a Buffer to search\n// - val - a string, Buffer, or number\n// - byteOffset - an index into `buffer`; will be clamped to an int32\n// - encoding - an optional encoding, relevant is val is a string\n// - dir - true for indexOf, false for lastIndexOf\nfunction bidirectionalIndexOf (buffer, val, byteOffset, encoding, dir) {\n // Empty buffer means no match\n if (buffer.length === 0) return -1\n\n // Normalize byteOffset\n if (typeof byteOffset === 'string') {\n encoding = byteOffset\n byteOffset = 0\n } else if (byteOffset > 0x7fffffff) {\n byteOffset = 0x7fffffff\n } else if (byteOffset < -0x80000000) {\n byteOffset = -0x80000000\n }\n byteOffset = +byteOffset // Coerce to Number.\n if (numberIsNaN(byteOffset)) {\n // byteOffset: it it's undefined, null, NaN, \"foo\", etc, search whole buffer\n byteOffset = dir ? 0 : (buffer.length - 1)\n }\n\n // Normalize byteOffset: negative offsets start from the end of the buffer\n if (byteOffset < 0) byteOffset = buffer.length + byteOffset\n if (byteOffset >= buffer.length) {\n if (dir) return -1\n else byteOffset = buffer.length - 1\n } else if (byteOffset < 0) {\n if (dir) byteOffset = 0\n else return -1\n }\n\n // Normalize val\n if (typeof val === 'string') {\n val = Buffer.from(val, encoding)\n }\n\n // Finally, search either indexOf (if dir is true) or lastIndexOf\n if (Buffer.isBuffer(val)) {\n // Special case: looking for empty string/buffer always fails\n if (val.length === 0) {\n return -1\n }\n return arrayIndexOf(buffer, val, byteOffset, encoding, dir)\n } else if (typeof val === 'number') {\n val = val & 0xFF // Search for a byte value [0-255]\n if (typeof Uint8Array.prototype.indexOf === 'function') {\n if (dir) {\n return Uint8Array.prototype.indexOf.call(buffer, val, byteOffset)\n } else {\n return Uint8Array.prototype.lastIndexOf.call(buffer, val, byteOffset)\n }\n }\n return arrayIndexOf(buffer, [val], byteOffset, encoding, dir)\n }\n\n throw new TypeError('val must be string, number or Buffer')\n}\n\nfunction arrayIndexOf (arr, val, byteOffset, encoding, dir) {\n let indexSize = 1\n let arrLength = arr.length\n let valLength = val.length\n\n if (encoding !== undefined) {\n encoding = String(encoding).toLowerCase()\n if (encoding === 'ucs2' || encoding === 'ucs-2' ||\n encoding === 'utf16le' || encoding === 'utf-16le') {\n if (arr.length < 2 || val.length < 2) {\n return -1\n }\n indexSize = 2\n arrLength /= 2\n valLength /= 2\n byteOffset /= 2\n }\n }\n\n function read (buf, i) {\n if (indexSize === 1) {\n return buf[i]\n } else {\n return buf.readUInt16BE(i * indexSize)\n }\n }\n\n let i\n if (dir) {\n let foundIndex = -1\n for (i = byteOffset; i < arrLength; i++) {\n if (read(arr, i) === read(val, foundIndex === -1 ? 0 : i - foundIndex)) {\n if (foundIndex === -1) foundIndex = i\n if (i - foundIndex + 1 === valLength) return foundIndex * indexSize\n } else {\n if (foundIndex !== -1) i -= i - foundIndex\n foundIndex = -1\n }\n }\n } else {\n if (byteOffset + valLength > arrLength) byteOffset = arrLength - valLength\n for (i = byteOffset; i >= 0; i--) {\n let found = true\n for (let j = 0; j < valLength; j++) {\n if (read(arr, i + j) !== read(val, j)) {\n found = false\n break\n }\n }\n if (found) return i\n }\n }\n\n return -1\n}\n\nBuffer.prototype.includes = function includes (val, byteOffset, encoding) {\n return this.indexOf(val, byteOffset, encoding) !== -1\n}\n\nBuffer.prototype.indexOf = function indexOf (val, byteOffset, encoding) {\n return bidirectionalIndexOf(this, val, byteOffset, encoding, true)\n}\n\nBuffer.prototype.lastIndexOf = function lastIndexOf (val, byteOffset, encoding) {\n return bidirectionalIndexOf(this, val, byteOffset, encoding, false)\n}\n\nfunction hexWrite (buf, string, offset, length) {\n offset = Number(offset) || 0\n const remaining = buf.length - offset\n if (!length) {\n length = remaining\n } else {\n length = Number(length)\n if (length > remaining) {\n length = remaining\n }\n }\n\n const strLen = string.length\n\n if (length > strLen / 2) {\n length = strLen / 2\n }\n let i\n for (i = 0; i < length; ++i) {\n const parsed = parseInt(string.substr(i * 2, 2), 16)\n if (numberIsNaN(parsed)) return i\n buf[offset + i] = parsed\n }\n return i\n}\n\nfunction utf8Write (buf, string, offset, length) {\n return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length)\n}\n\nfunction asciiWrite (buf, string, offset, length) {\n return blitBuffer(asciiToBytes(string), buf, offset, length)\n}\n\nfunction base64Write (buf, string, offset, length) {\n return blitBuffer(base64ToBytes(string), buf, offset, length)\n}\n\nfunction ucs2Write (buf, string, offset, length) {\n return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length)\n}\n\nBuffer.prototype.write = function write (string, offset, length, encoding) {\n // Buffer#write(string)\n if (offset === undefined) {\n encoding = 'utf8'\n length = this.length\n offset = 0\n // Buffer#write(string, encoding)\n } else if (length === undefined && typeof offset === 'string') {\n encoding = offset\n length = this.length\n offset = 0\n // Buffer#write(string, offset[, length][, encoding])\n } else if (isFinite(offset)) {\n offset = offset >>> 0\n if (isFinite(length)) {\n length = length >>> 0\n if (encoding === undefined) encoding = 'utf8'\n } else {\n encoding = length\n length = undefined\n }\n } else {\n throw new Error(\n 'Buffer.write(string, encoding, offset[, length]) is no longer supported'\n )\n }\n\n const remaining = this.length - offset\n if (length === undefined || length > remaining) length = remaining\n\n if ((string.length > 0 && (length < 0 || offset < 0)) || offset > this.length) {\n throw new RangeError('Attempt to write outside buffer bounds')\n }\n\n if (!encoding) encoding = 'utf8'\n\n let loweredCase = false\n for (;;) {\n switch (encoding) {\n case 'hex':\n return hexWrite(this, string, offset, length)\n\n case 'utf8':\n case 'utf-8':\n return utf8Write(this, string, offset, length)\n\n case 'ascii':\n case 'latin1':\n case 'binary':\n return asciiWrite(this, string, offset, length)\n\n case 'base64':\n // Warning: maxLength not taken into account in base64Write\n return base64Write(this, string, offset, length)\n\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return ucs2Write(this, string, offset, length)\n\n default:\n if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)\n encoding = ('' + encoding).toLowerCase()\n loweredCase = true\n }\n }\n}\n\nBuffer.prototype.toJSON = function toJSON () {\n return {\n type: 'Buffer',\n data: Array.prototype.slice.call(this._arr || this, 0)\n }\n}\n\nfunction base64Slice (buf, start, end) {\n if (start === 0 && end === buf.length) {\n return base64.fromByteArray(buf)\n } else {\n return base64.fromByteArray(buf.slice(start, end))\n }\n}\n\nfunction utf8Slice (buf, start, end) {\n end = Math.min(buf.length, end)\n const res = []\n\n let i = start\n while (i < end) {\n const firstByte = buf[i]\n let codePoint = null\n let bytesPerSequence = (firstByte > 0xEF)\n ? 4\n : (firstByte > 0xDF)\n ? 3\n : (firstByte > 0xBF)\n ? 2\n : 1\n\n if (i + bytesPerSequence <= end) {\n let secondByte, thirdByte, fourthByte, tempCodePoint\n\n switch (bytesPerSequence) {\n case 1:\n if (firstByte < 0x80) {\n codePoint = firstByte\n }\n break\n case 2:\n secondByte = buf[i + 1]\n if ((secondByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0x1F) << 0x6 | (secondByte & 0x3F)\n if (tempCodePoint > 0x7F) {\n codePoint = tempCodePoint\n }\n }\n break\n case 3:\n secondByte = buf[i + 1]\n thirdByte = buf[i + 2]\n if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0xF) << 0xC | (secondByte & 0x3F) << 0x6 | (thirdByte & 0x3F)\n if (tempCodePoint > 0x7FF && (tempCodePoint < 0xD800 || tempCodePoint > 0xDFFF)) {\n codePoint = tempCodePoint\n }\n }\n break\n case 4:\n secondByte = buf[i + 1]\n thirdByte = buf[i + 2]\n fourthByte = buf[i + 3]\n if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80 && (fourthByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0xF) << 0x12 | (secondByte & 0x3F) << 0xC | (thirdByte & 0x3F) << 0x6 | (fourthByte & 0x3F)\n if (tempCodePoint > 0xFFFF && tempCodePoint < 0x110000) {\n codePoint = tempCodePoint\n }\n }\n }\n }\n\n if (codePoint === null) {\n // we did not generate a valid codePoint so insert a\n // replacement char (U+FFFD) and advance only 1 byte\n codePoint = 0xFFFD\n bytesPerSequence = 1\n } else if (codePoint > 0xFFFF) {\n // encode to utf16 (surrogate pair dance)\n codePoint -= 0x10000\n res.push(codePoint >>> 10 & 0x3FF | 0xD800)\n codePoint = 0xDC00 | codePoint & 0x3FF\n }\n\n res.push(codePoint)\n i += bytesPerSequence\n }\n\n return decodeCodePointsArray(res)\n}\n\n// Based on http://stackoverflow.com/a/22747272/680742, the browser with\n// the lowest limit is Chrome, with 0x10000 args.\n// We go 1 magnitude less, for safety\nconst MAX_ARGUMENTS_LENGTH = 0x1000\n\nfunction decodeCodePointsArray (codePoints) {\n const len = codePoints.length\n if (len <= MAX_ARGUMENTS_LENGTH) {\n return String.fromCharCode.apply(String, codePoints) // avoid extra slice()\n }\n\n // Decode in chunks to avoid \"call stack size exceeded\".\n let res = ''\n let i = 0\n while (i < len) {\n res += String.fromCharCode.apply(\n String,\n codePoints.slice(i, i += MAX_ARGUMENTS_LENGTH)\n )\n }\n return res\n}\n\nfunction asciiSlice (buf, start, end) {\n let ret = ''\n end = Math.min(buf.length, end)\n\n for (let i = start; i < end; ++i) {\n ret += String.fromCharCode(buf[i] & 0x7F)\n }\n return ret\n}\n\nfunction latin1Slice (buf, start, end) {\n let ret = ''\n end = Math.min(buf.length, end)\n\n for (let i = start; i < end; ++i) {\n ret += String.fromCharCode(buf[i])\n }\n return ret\n}\n\nfunction hexSlice (buf, start, end) {\n const len = buf.length\n\n if (!start || start < 0) start = 0\n if (!end || end < 0 || end > len) end = len\n\n let out = ''\n for (let i = start; i < end; ++i) {\n out += hexSliceLookupTable[buf[i]]\n }\n return out\n}\n\nfunction utf16leSlice (buf, start, end) {\n const bytes = buf.slice(start, end)\n let res = ''\n // If bytes.length is odd, the last 8 bits must be ignored (same as node.js)\n for (let i = 0; i < bytes.length - 1; i += 2) {\n res += String.fromCharCode(bytes[i] + (bytes[i + 1] * 256))\n }\n return res\n}\n\nBuffer.prototype.slice = function slice (start, end) {\n const len = this.length\n start = ~~start\n end = end === undefined ? len : ~~end\n\n if (start < 0) {\n start += len\n if (start < 0) start = 0\n } else if (start > len) {\n start = len\n }\n\n if (end < 0) {\n end += len\n if (end < 0) end = 0\n } else if (end > len) {\n end = len\n }\n\n if (end < start) end = start\n\n const newBuf = this.subarray(start, end)\n // Return an augmented `Uint8Array` instance\n Object.setPrototypeOf(newBuf, Buffer.prototype)\n\n return newBuf\n}\n\n/*\n * Need to make sure that buffer isn't trying to write out of bounds.\n */\nfunction checkOffset (offset, ext, length) {\n if ((offset % 1) !== 0 || offset < 0) throw new RangeError('offset is not uint')\n if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length')\n}\n\nBuffer.prototype.readUintLE =\nBuffer.prototype.readUIntLE = function readUIntLE (offset, byteLength, noAssert) {\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n let val = this[offset]\n let mul = 1\n let i = 0\n while (++i < byteLength && (mul *= 0x100)) {\n val += this[offset + i] * mul\n }\n\n return val\n}\n\nBuffer.prototype.readUintBE =\nBuffer.prototype.readUIntBE = function readUIntBE (offset, byteLength, noAssert) {\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) {\n checkOffset(offset, byteLength, this.length)\n }\n\n let val = this[offset + --byteLength]\n let mul = 1\n while (byteLength > 0 && (mul *= 0x100)) {\n val += this[offset + --byteLength] * mul\n }\n\n return val\n}\n\nBuffer.prototype.readUint8 =\nBuffer.prototype.readUInt8 = function readUInt8 (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 1, this.length)\n return this[offset]\n}\n\nBuffer.prototype.readUint16LE =\nBuffer.prototype.readUInt16LE = function readUInt16LE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 2, this.length)\n return this[offset] | (this[offset + 1] << 8)\n}\n\nBuffer.prototype.readUint16BE =\nBuffer.prototype.readUInt16BE = function readUInt16BE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 2, this.length)\n return (this[offset] << 8) | this[offset + 1]\n}\n\nBuffer.prototype.readUint32LE =\nBuffer.prototype.readUInt32LE = function readUInt32LE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return ((this[offset]) |\n (this[offset + 1] << 8) |\n (this[offset + 2] << 16)) +\n (this[offset + 3] * 0x1000000)\n}\n\nBuffer.prototype.readUint32BE =\nBuffer.prototype.readUInt32BE = function readUInt32BE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return (this[offset] * 0x1000000) +\n ((this[offset + 1] << 16) |\n (this[offset + 2] << 8) |\n this[offset + 3])\n}\n\nBuffer.prototype.readBigUInt64LE = defineBigIntMethod(function readBigUInt64LE (offset) {\n offset = offset >>> 0\n validateNumber(offset, 'offset')\n const first = this[offset]\n const last = this[offset + 7]\n if (first === undefined || last === undefined) {\n boundsError(offset, this.length - 8)\n }\n\n const lo = first +\n this[++offset] * 2 ** 8 +\n this[++offset] * 2 ** 16 +\n this[++offset] * 2 ** 24\n\n const hi = this[++offset] +\n this[++offset] * 2 ** 8 +\n this[++offset] * 2 ** 16 +\n last * 2 ** 24\n\n return BigInt(lo) + (BigInt(hi) << BigInt(32))\n})\n\nBuffer.prototype.readBigUInt64BE = defineBigIntMethod(function readBigUInt64BE (offset) {\n offset = offset >>> 0\n validateNumber(offset, 'offset')\n const first = this[offset]\n const last = this[offset + 7]\n if (first === undefined || last === undefined) {\n boundsError(offset, this.length - 8)\n }\n\n const hi = first * 2 ** 24 +\n this[++offset] * 2 ** 16 +\n this[++offset] * 2 ** 8 +\n this[++offset]\n\n const lo = this[++offset] * 2 ** 24 +\n this[++offset] * 2 ** 16 +\n this[++offset] * 2 ** 8 +\n last\n\n return (BigInt(hi) << BigInt(32)) + BigInt(lo)\n})\n\nBuffer.prototype.readIntLE = function readIntLE (offset, byteLength, noAssert) {\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n let val = this[offset]\n let mul = 1\n let i = 0\n while (++i < byteLength && (mul *= 0x100)) {\n val += this[offset + i] * mul\n }\n mul *= 0x80\n\n if (val >= mul) val -= Math.pow(2, 8 * byteLength)\n\n return val\n}\n\nBuffer.prototype.readIntBE = function readIntBE (offset, byteLength, noAssert) {\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n let i = byteLength\n let mul = 1\n let val = this[offset + --i]\n while (i > 0 && (mul *= 0x100)) {\n val += this[offset + --i] * mul\n }\n mul *= 0x80\n\n if (val >= mul) val -= Math.pow(2, 8 * byteLength)\n\n return val\n}\n\nBuffer.prototype.readInt8 = function readInt8 (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 1, this.length)\n if (!(this[offset] & 0x80)) return (this[offset])\n return ((0xff - this[offset] + 1) * -1)\n}\n\nBuffer.prototype.readInt16LE = function readInt16LE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 2, this.length)\n const val = this[offset] | (this[offset + 1] << 8)\n return (val & 0x8000) ? val | 0xFFFF0000 : val\n}\n\nBuffer.prototype.readInt16BE = function readInt16BE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 2, this.length)\n const val = this[offset + 1] | (this[offset] << 8)\n return (val & 0x8000) ? val | 0xFFFF0000 : val\n}\n\nBuffer.prototype.readInt32LE = function readInt32LE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return (this[offset]) |\n (this[offset + 1] << 8) |\n (this[offset + 2] << 16) |\n (this[offset + 3] << 24)\n}\n\nBuffer.prototype.readInt32BE = function readInt32BE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return (this[offset] << 24) |\n (this[offset + 1] << 16) |\n (this[offset + 2] << 8) |\n (this[offset + 3])\n}\n\nBuffer.prototype.readBigInt64LE = defineBigIntMethod(function readBigInt64LE (offset) {\n offset = offset >>> 0\n validateNumber(offset, 'offset')\n const first = this[offset]\n const last = this[offset + 7]\n if (first === undefined || last === undefined) {\n boundsError(offset, this.length - 8)\n }\n\n const val = this[offset + 4] +\n this[offset + 5] * 2 ** 8 +\n this[offset + 6] * 2 ** 16 +\n (last << 24) // Overflow\n\n return (BigInt(val) << BigInt(32)) +\n BigInt(first +\n this[++offset] * 2 ** 8 +\n this[++offset] * 2 ** 16 +\n this[++offset] * 2 ** 24)\n})\n\nBuffer.prototype.readBigInt64BE = defineBigIntMethod(function readBigInt64BE (offset) {\n offset = offset >>> 0\n validateNumber(offset, 'offset')\n const first = this[offset]\n const last = this[offset + 7]\n if (first === undefined || last === undefined) {\n boundsError(offset, this.length - 8)\n }\n\n const val = (first << 24) + // Overflow\n this[++offset] * 2 ** 16 +\n this[++offset] * 2 ** 8 +\n this[++offset]\n\n return (BigInt(val) << BigInt(32)) +\n BigInt(this[++offset] * 2 ** 24 +\n this[++offset] * 2 ** 16 +\n this[++offset] * 2 ** 8 +\n last)\n})\n\nBuffer.prototype.readFloatLE = function readFloatLE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n return ieee754.read(this, offset, true, 23, 4)\n}\n\nBuffer.prototype.readFloatBE = function readFloatBE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n return ieee754.read(this, offset, false, 23, 4)\n}\n\nBuffer.prototype.readDoubleLE = function readDoubleLE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 8, this.length)\n return ieee754.read(this, offset, true, 52, 8)\n}\n\nBuffer.prototype.readDoubleBE = function readDoubleBE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 8, this.length)\n return ieee754.read(this, offset, false, 52, 8)\n}\n\nfunction checkInt (buf, value, offset, ext, max, min) {\n if (!Buffer.isBuffer(buf)) throw new TypeError('\"buffer\" argument must be a Buffer instance')\n if (value > max || value < min) throw new RangeError('\"value\" argument is out of bounds')\n if (offset + ext > buf.length) throw new RangeError('Index out of range')\n}\n\nBuffer.prototype.writeUintLE =\nBuffer.prototype.writeUIntLE = function writeUIntLE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) {\n const maxBytes = Math.pow(2, 8 * byteLength) - 1\n checkInt(this, value, offset, byteLength, maxBytes, 0)\n }\n\n let mul = 1\n let i = 0\n this[offset] = value & 0xFF\n while (++i < byteLength && (mul *= 0x100)) {\n this[offset + i] = (value / mul) & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeUintBE =\nBuffer.prototype.writeUIntBE = function writeUIntBE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) {\n const maxBytes = Math.pow(2, 8 * byteLength) - 1\n checkInt(this, value, offset, byteLength, maxBytes, 0)\n }\n\n let i = byteLength - 1\n let mul = 1\n this[offset + i] = value & 0xFF\n while (--i >= 0 && (mul *= 0x100)) {\n this[offset + i] = (value / mul) & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeUint8 =\nBuffer.prototype.writeUInt8 = function writeUInt8 (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0)\n this[offset] = (value & 0xff)\n return offset + 1\n}\n\nBuffer.prototype.writeUint16LE =\nBuffer.prototype.writeUInt16LE = function writeUInt16LE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)\n this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n return offset + 2\n}\n\nBuffer.prototype.writeUint16BE =\nBuffer.prototype.writeUInt16BE = function writeUInt16BE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)\n this[offset] = (value >>> 8)\n this[offset + 1] = (value & 0xff)\n return offset + 2\n}\n\nBuffer.prototype.writeUint32LE =\nBuffer.prototype.writeUInt32LE = function writeUInt32LE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)\n this[offset + 3] = (value >>> 24)\n this[offset + 2] = (value >>> 16)\n this[offset + 1] = (value >>> 8)\n this[offset] = (value & 0xff)\n return offset + 4\n}\n\nBuffer.prototype.writeUint32BE =\nBuffer.prototype.writeUInt32BE = function writeUInt32BE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)\n this[offset] = (value >>> 24)\n this[offset + 1] = (value >>> 16)\n this[offset + 2] = (value >>> 8)\n this[offset + 3] = (value & 0xff)\n return offset + 4\n}\n\nfunction wrtBigUInt64LE (buf, value, offset, min, max) {\n checkIntBI(value, min, max, buf, offset, 7)\n\n let lo = Number(value & BigInt(0xffffffff))\n buf[offset++] = lo\n lo = lo >> 8\n buf[offset++] = lo\n lo = lo >> 8\n buf[offset++] = lo\n lo = lo >> 8\n buf[offset++] = lo\n let hi = Number(value >> BigInt(32) & BigInt(0xffffffff))\n buf[offset++] = hi\n hi = hi >> 8\n buf[offset++] = hi\n hi = hi >> 8\n buf[offset++] = hi\n hi = hi >> 8\n buf[offset++] = hi\n return offset\n}\n\nfunction wrtBigUInt64BE (buf, value, offset, min, max) {\n checkIntBI(value, min, max, buf, offset, 7)\n\n let lo = Number(value & BigInt(0xffffffff))\n buf[offset + 7] = lo\n lo = lo >> 8\n buf[offset + 6] = lo\n lo = lo >> 8\n buf[offset + 5] = lo\n lo = lo >> 8\n buf[offset + 4] = lo\n let hi = Number(value >> BigInt(32) & BigInt(0xffffffff))\n buf[offset + 3] = hi\n hi = hi >> 8\n buf[offset + 2] = hi\n hi = hi >> 8\n buf[offset + 1] = hi\n hi = hi >> 8\n buf[offset] = hi\n return offset + 8\n}\n\nBuffer.prototype.writeBigUInt64LE = defineBigIntMethod(function writeBigUInt64LE (value, offset = 0) {\n return wrtBigUInt64LE(this, value, offset, BigInt(0), BigInt('0xffffffffffffffff'))\n})\n\nBuffer.prototype.writeBigUInt64BE = defineBigIntMethod(function writeBigUInt64BE (value, offset = 0) {\n return wrtBigUInt64BE(this, value, offset, BigInt(0), BigInt('0xffffffffffffffff'))\n})\n\nBuffer.prototype.writeIntLE = function writeIntLE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) {\n const limit = Math.pow(2, (8 * byteLength) - 1)\n\n checkInt(this, value, offset, byteLength, limit - 1, -limit)\n }\n\n let i = 0\n let mul = 1\n let sub = 0\n this[offset] = value & 0xFF\n while (++i < byteLength && (mul *= 0x100)) {\n if (value < 0 && sub === 0 && this[offset + i - 1] !== 0) {\n sub = 1\n }\n this[offset + i] = ((value / mul) >> 0) - sub & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeIntBE = function writeIntBE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) {\n const limit = Math.pow(2, (8 * byteLength) - 1)\n\n checkInt(this, value, offset, byteLength, limit - 1, -limit)\n }\n\n let i = byteLength - 1\n let mul = 1\n let sub = 0\n this[offset + i] = value & 0xFF\n while (--i >= 0 && (mul *= 0x100)) {\n if (value < 0 && sub === 0 && this[offset + i + 1] !== 0) {\n sub = 1\n }\n this[offset + i] = ((value / mul) >> 0) - sub & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80)\n if (value < 0) value = 0xff + value + 1\n this[offset] = (value & 0xff)\n return offset + 1\n}\n\nBuffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)\n this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n return offset + 2\n}\n\nBuffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)\n this[offset] = (value >>> 8)\n this[offset + 1] = (value & 0xff)\n return offset + 2\n}\n\nBuffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)\n this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n this[offset + 2] = (value >>> 16)\n this[offset + 3] = (value >>> 24)\n return offset + 4\n}\n\nBuffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)\n if (value < 0) value = 0xffffffff + value + 1\n this[offset] = (value >>> 24)\n this[offset + 1] = (value >>> 16)\n this[offset + 2] = (value >>> 8)\n this[offset + 3] = (value & 0xff)\n return offset + 4\n}\n\nBuffer.prototype.writeBigInt64LE = defineBigIntMethod(function writeBigInt64LE (value, offset = 0) {\n return wrtBigUInt64LE(this, value, offset, -BigInt('0x8000000000000000'), BigInt('0x7fffffffffffffff'))\n})\n\nBuffer.prototype.writeBigInt64BE = defineBigIntMethod(function writeBigInt64BE (value, offset = 0) {\n return wrtBigUInt64BE(this, value, offset, -BigInt('0x8000000000000000'), BigInt('0x7fffffffffffffff'))\n})\n\nfunction checkIEEE754 (buf, value, offset, ext, max, min) {\n if (offset + ext > buf.length) throw new RangeError('Index out of range')\n if (offset < 0) throw new RangeError('Index out of range')\n}\n\nfunction writeFloat (buf, value, offset, littleEndian, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) {\n checkIEEE754(buf, value, offset, 4, 3.4028234663852886e+38, -3.4028234663852886e+38)\n }\n ieee754.write(buf, value, offset, littleEndian, 23, 4)\n return offset + 4\n}\n\nBuffer.prototype.writeFloatLE = function writeFloatLE (value, offset, noAssert) {\n return writeFloat(this, value, offset, true, noAssert)\n}\n\nBuffer.prototype.writeFloatBE = function writeFloatBE (value, offset, noAssert) {\n return writeFloat(this, value, offset, false, noAssert)\n}\n\nfunction writeDouble (buf, value, offset, littleEndian, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) {\n checkIEEE754(buf, value, offset, 8, 1.7976931348623157E+308, -1.7976931348623157E+308)\n }\n ieee754.write(buf, value, offset, littleEndian, 52, 8)\n return offset + 8\n}\n\nBuffer.prototype.writeDoubleLE = function writeDoubleLE (value, offset, noAssert) {\n return writeDouble(this, value, offset, true, noAssert)\n}\n\nBuffer.prototype.writeDoubleBE = function writeDoubleBE (value, offset, noAssert) {\n return writeDouble(this, value, offset, false, noAssert)\n}\n\n// copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length)\nBuffer.prototype.copy = function copy (target, targetStart, start, end) {\n if (!Buffer.isBuffer(target)) throw new TypeError('argument should be a Buffer')\n if (!start) start = 0\n if (!end && end !== 0) end = this.length\n if (targetStart >= target.length) targetStart = target.length\n if (!targetStart) targetStart = 0\n if (end > 0 && end < start) end = start\n\n // Copy 0 bytes; we're done\n if (end === start) return 0\n if (target.length === 0 || this.length === 0) return 0\n\n // Fatal error conditions\n if (targetStart < 0) {\n throw new RangeError('targetStart out of bounds')\n }\n if (start < 0 || start >= this.length) throw new RangeError('Index out of range')\n if (end < 0) throw new RangeError('sourceEnd out of bounds')\n\n // Are we oob?\n if (end > this.length) end = this.length\n if (target.length - targetStart < end - start) {\n end = target.length - targetStart + start\n }\n\n const len = end - start\n\n if (this === target && typeof Uint8Array.prototype.copyWithin === 'function') {\n // Use built-in when available, missing from IE11\n this.copyWithin(targetStart, start, end)\n } else {\n Uint8Array.prototype.set.call(\n target,\n this.subarray(start, end),\n targetStart\n )\n }\n\n return len\n}\n\n// Usage:\n// buffer.fill(number[, offset[, end]])\n// buffer.fill(buffer[, offset[, end]])\n// buffer.fill(string[, offset[, end]][, encoding])\nBuffer.prototype.fill = function fill (val, start, end, encoding) {\n // Handle string cases:\n if (typeof val === 'string') {\n if (typeof start === 'string') {\n encoding = start\n start = 0\n end = this.length\n } else if (typeof end === 'string') {\n encoding = end\n end = this.length\n }\n if (encoding !== undefined && typeof encoding !== 'string') {\n throw new TypeError('encoding must be a string')\n }\n if (typeof encoding === 'string' && !Buffer.isEncoding(encoding)) {\n throw new TypeError('Unknown encoding: ' + encoding)\n }\n if (val.length === 1) {\n const code = val.charCodeAt(0)\n if ((encoding === 'utf8' && code < 128) ||\n encoding === 'latin1') {\n // Fast path: If `val` fits into a single byte, use that numeric value.\n val = code\n }\n }\n } else if (typeof val === 'number') {\n val = val & 255\n } else if (typeof val === 'boolean') {\n val = Number(val)\n }\n\n // Invalid ranges are not set to a default, so can range check early.\n if (start < 0 || this.length < start || this.length < end) {\n throw new RangeError('Out of range index')\n }\n\n if (end <= start) {\n return this\n }\n\n start = start >>> 0\n end = end === undefined ? this.length : end >>> 0\n\n if (!val) val = 0\n\n let i\n if (typeof val === 'number') {\n for (i = start; i < end; ++i) {\n this[i] = val\n }\n } else {\n const bytes = Buffer.isBuffer(val)\n ? val\n : Buffer.from(val, encoding)\n const len = bytes.length\n if (len === 0) {\n throw new TypeError('The value \"' + val +\n '\" is invalid for argument \"value\"')\n }\n for (i = 0; i < end - start; ++i) {\n this[i + start] = bytes[i % len]\n }\n }\n\n return this\n}\n\n// CUSTOM ERRORS\n// =============\n\n// Simplified versions from Node, changed for Buffer-only usage\nconst errors = {}\nfunction E (sym, getMessage, Base) {\n errors[sym] = class NodeError extends Base {\n constructor () {\n super()\n\n Object.defineProperty(this, 'message', {\n value: getMessage.apply(this, arguments),\n writable: true,\n configurable: true\n })\n\n // Add the error code to the name to include it in the stack trace.\n this.name = `${this.name} [${sym}]`\n // Access the stack to generate the error message including the error code\n // from the name.\n this.stack // eslint-disable-line no-unused-expressions\n // Reset the name to the actual name.\n delete this.name\n }\n\n get code () {\n return sym\n }\n\n set code (value) {\n Object.defineProperty(this, 'code', {\n configurable: true,\n enumerable: true,\n value,\n writable: true\n })\n }\n\n toString () {\n return `${this.name} [${sym}]: ${this.message}`\n }\n }\n}\n\nE('ERR_BUFFER_OUT_OF_BOUNDS',\n function (name) {\n if (name) {\n return `${name} is outside of buffer bounds`\n }\n\n return 'Attempt to access memory outside buffer bounds'\n }, RangeError)\nE('ERR_INVALID_ARG_TYPE',\n function (name, actual) {\n return `The \"${name}\" argument must be of type number. Received type ${typeof actual}`\n }, TypeError)\nE('ERR_OUT_OF_RANGE',\n function (str, range, input) {\n let msg = `The value of \"${str}\" is out of range.`\n let received = input\n if (Number.isInteger(input) && Math.abs(input) > 2 ** 32) {\n received = addNumericalSeparator(String(input))\n } else if (typeof input === 'bigint') {\n received = String(input)\n if (input > BigInt(2) ** BigInt(32) || input < -(BigInt(2) ** BigInt(32))) {\n received = addNumericalSeparator(received)\n }\n received += 'n'\n }\n msg += ` It must be ${range}. Received ${received}`\n return msg\n }, RangeError)\n\nfunction addNumericalSeparator (val) {\n let res = ''\n let i = val.length\n const start = val[0] === '-' ? 1 : 0\n for (; i >= start + 4; i -= 3) {\n res = `_${val.slice(i - 3, i)}${res}`\n }\n return `${val.slice(0, i)}${res}`\n}\n\n// CHECK FUNCTIONS\n// ===============\n\nfunction checkBounds (buf, offset, byteLength) {\n validateNumber(offset, 'offset')\n if (buf[offset] === undefined || buf[offset + byteLength] === undefined) {\n boundsError(offset, buf.length - (byteLength + 1))\n }\n}\n\nfunction checkIntBI (value, min, max, buf, offset, byteLength) {\n if (value > max || value < min) {\n const n = typeof min === 'bigint' ? 'n' : ''\n let range\n if (byteLength > 3) {\n if (min === 0 || min === BigInt(0)) {\n range = `>= 0${n} and < 2${n} ** ${(byteLength + 1) * 8}${n}`\n } else {\n range = `>= -(2${n} ** ${(byteLength + 1) * 8 - 1}${n}) and < 2 ** ` +\n `${(byteLength + 1) * 8 - 1}${n}`\n }\n } else {\n range = `>= ${min}${n} and <= ${max}${n}`\n }\n throw new errors.ERR_OUT_OF_RANGE('value', range, value)\n }\n checkBounds(buf, offset, byteLength)\n}\n\nfunction validateNumber (value, name) {\n if (typeof value !== 'number') {\n throw new errors.ERR_INVALID_ARG_TYPE(name, 'number', value)\n }\n}\n\nfunction boundsError (value, length, type) {\n if (Math.floor(value) !== value) {\n validateNumber(value, type)\n throw new errors.ERR_OUT_OF_RANGE(type || 'offset', 'an integer', value)\n }\n\n if (length < 0) {\n throw new errors.ERR_BUFFER_OUT_OF_BOUNDS()\n }\n\n throw new errors.ERR_OUT_OF_RANGE(type || 'offset',\n `>= ${type ? 1 : 0} and <= ${length}`,\n value)\n}\n\n// HELPER FUNCTIONS\n// ================\n\nconst INVALID_BASE64_RE = /[^+/0-9A-Za-z-_]/g\n\nfunction base64clean (str) {\n // Node takes equal signs as end of the Base64 encoding\n str = str.split('=')[0]\n // Node strips out invalid characters like \\n and \\t from the string, base64-js does not\n str = str.trim().replace(INVALID_BASE64_RE, '')\n // Node converts strings with length < 2 to ''\n if (str.length < 2) return ''\n // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not\n while (str.length % 4 !== 0) {\n str = str + '='\n }\n return str\n}\n\nfunction utf8ToBytes (string, units) {\n units = units || Infinity\n let codePoint\n const length = string.length\n let leadSurrogate = null\n const bytes = []\n\n for (let i = 0; i < length; ++i) {\n codePoint = string.charCodeAt(i)\n\n // is surrogate component\n if (codePoint > 0xD7FF && codePoint < 0xE000) {\n // last char was a lead\n if (!leadSurrogate) {\n // no lead yet\n if (codePoint > 0xDBFF) {\n // unexpected trail\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n continue\n } else if (i + 1 === length) {\n // unpaired lead\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n continue\n }\n\n // valid lead\n leadSurrogate = codePoint\n\n continue\n }\n\n // 2 leads in a row\n if (codePoint < 0xDC00) {\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n leadSurrogate = codePoint\n continue\n }\n\n // valid surrogate pair\n codePoint = (leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00) + 0x10000\n } else if (leadSurrogate) {\n // valid bmp char, but last char was a lead\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n }\n\n leadSurrogate = null\n\n // encode utf8\n if (codePoint < 0x80) {\n if ((units -= 1) < 0) break\n bytes.push(codePoint)\n } else if (codePoint < 0x800) {\n if ((units -= 2) < 0) break\n bytes.push(\n codePoint >> 0x6 | 0xC0,\n codePoint & 0x3F | 0x80\n )\n } else if (codePoint < 0x10000) {\n if ((units -= 3) < 0) break\n bytes.push(\n codePoint >> 0xC | 0xE0,\n codePoint >> 0x6 & 0x3F | 0x80,\n codePoint & 0x3F | 0x80\n )\n } else if (codePoint < 0x110000) {\n if ((units -= 4) < 0) break\n bytes.push(\n codePoint >> 0x12 | 0xF0,\n codePoint >> 0xC & 0x3F | 0x80,\n codePoint >> 0x6 & 0x3F | 0x80,\n codePoint & 0x3F | 0x80\n )\n } else {\n throw new Error('Invalid code point')\n }\n }\n\n return bytes\n}\n\nfunction asciiToBytes (str) {\n const byteArray = []\n for (let i = 0; i < str.length; ++i) {\n // Node's code seems to be doing this and not & 0x7F..\n byteArray.push(str.charCodeAt(i) & 0xFF)\n }\n return byteArray\n}\n\nfunction utf16leToBytes (str, units) {\n let c, hi, lo\n const byteArray = []\n for (let i = 0; i < str.length; ++i) {\n if ((units -= 2) < 0) break\n\n c = str.charCodeAt(i)\n hi = c >> 8\n lo = c % 256\n byteArray.push(lo)\n byteArray.push(hi)\n }\n\n return byteArray\n}\n\nfunction base64ToBytes (str) {\n return base64.toByteArray(base64clean(str))\n}\n\nfunction blitBuffer (src, dst, offset, length) {\n let i\n for (i = 0; i < length; ++i) {\n if ((i + offset >= dst.length) || (i >= src.length)) break\n dst[i + offset] = src[i]\n }\n return i\n}\n\n// ArrayBuffer or Uint8Array objects from other contexts (i.e. iframes) do not pass\n// the `instanceof` check but they should be treated as of that type.\n// See: https://github.com/feross/buffer/issues/166\nfunction isInstance (obj, type) {\n return obj instanceof type ||\n (obj != null && obj.constructor != null && obj.constructor.name != null &&\n obj.constructor.name === type.name)\n}\nfunction numberIsNaN (obj) {\n // For IE11 support\n return obj !== obj // eslint-disable-line no-self-compare\n}\n\n// Create lookup table for `toString('hex')`\n// See: https://github.com/feross/buffer/issues/219\nconst hexSliceLookupTable = (function () {\n const alphabet = '0123456789abcdef'\n const table = new Array(256)\n for (let i = 0; i < 16; ++i) {\n const i16 = i * 16\n for (let j = 0; j < 16; ++j) {\n table[i16 + j] = alphabet[i] + alphabet[j]\n }\n }\n return table\n})()\n\n// Return not function with Error if BigInt not supported\nfunction defineBigIntMethod (fn) {\n return typeof BigInt === 'undefined' ? BufferBigIntNotDefined : fn\n}\n\nfunction BufferBigIntNotDefined () {\n throw new Error('BigInt not supported')\n}\n","var naiveFallback = function () {\n\tif (typeof self === \"object\" && self) return self;\n\tif (typeof window === \"object\" && window) return window;\n\tthrow new Error(\"Unable to resolve global `this`\");\n};\n\nmodule.exports = (function () {\n\tif (this) return this;\n\n\t// Unexpected strict mode (may happen if e.g. bundled into ESM module)\n\n\t// Fallback to standard globalThis if available\n\tif (typeof globalThis === \"object\" && globalThis) return globalThis;\n\n\t// Thanks @mathiasbynens -> https://mathiasbynens.be/notes/globalthis\n\t// In all ES5+ engines global object inherits from Object.prototype\n\t// (if you approached one that doesn't please report)\n\ttry {\n\t\tObject.defineProperty(Object.prototype, \"__global__\", {\n\t\t\tget: function () { return this; },\n\t\t\tconfigurable: true\n\t\t});\n\t} catch (error) {\n\t\t// Unfortunate case of updates to Object.prototype being restricted\n\t\t// via preventExtensions, seal or freeze\n\t\treturn naiveFallback();\n\t}\n\ttry {\n\t\t// Safari case (window.__global__ works, but __global__ does not)\n\t\tif (!__global__) return naiveFallback();\n\t\treturn __global__;\n\t} finally {\n\t\tdelete Object.prototype.__global__;\n\t}\n})();\n","/*! ieee754. BSD-3-Clause License. Feross Aboukhadijeh */\nexports.read = function (buffer, offset, isLE, mLen, nBytes) {\n var e, m\n var eLen = (nBytes * 8) - mLen - 1\n var eMax = (1 << eLen) - 1\n var eBias = eMax >> 1\n var nBits = -7\n var i = isLE ? (nBytes - 1) : 0\n var d = isLE ? -1 : 1\n var s = buffer[offset + i]\n\n i += d\n\n e = s & ((1 << (-nBits)) - 1)\n s >>= (-nBits)\n nBits += eLen\n for (; nBits > 0; e = (e * 256) + buffer[offset + i], i += d, nBits -= 8) {}\n\n m = e & ((1 << (-nBits)) - 1)\n e >>= (-nBits)\n nBits += mLen\n for (; nBits > 0; m = (m * 256) + buffer[offset + i], i += d, nBits -= 8) {}\n\n if (e === 0) {\n e = 1 - eBias\n } else if (e === eMax) {\n return m ? NaN : ((s ? -1 : 1) * Infinity)\n } else {\n m = m + Math.pow(2, mLen)\n e = e - eBias\n }\n return (s ? -1 : 1) * m * Math.pow(2, e - mLen)\n}\n\nexports.write = function (buffer, value, offset, isLE, mLen, nBytes) {\n var e, m, c\n var eLen = (nBytes * 8) - mLen - 1\n var eMax = (1 << eLen) - 1\n var eBias = eMax >> 1\n var rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0)\n var i = isLE ? 0 : (nBytes - 1)\n var d = isLE ? 1 : -1\n var s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0\n\n value = Math.abs(value)\n\n if (isNaN(value) || value === Infinity) {\n m = isNaN(value) ? 1 : 0\n e = eMax\n } else {\n e = Math.floor(Math.log(value) / Math.LN2)\n if (value * (c = Math.pow(2, -e)) < 1) {\n e--\n c *= 2\n }\n if (e + eBias >= 1) {\n value += rt / c\n } else {\n value += rt * Math.pow(2, 1 - eBias)\n }\n if (value * c >= 2) {\n e++\n c /= 2\n }\n\n if (e + eBias >= eMax) {\n m = 0\n e = eMax\n } else if (e + eBias >= 1) {\n m = ((value * c) - 1) * Math.pow(2, mLen)\n e = e + eBias\n } else {\n m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen)\n e = 0\n }\n }\n\n for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {}\n\n e = (e << mLen) | m\n eLen += mLen\n for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {}\n\n buffer[offset + i - d] |= s * 128\n}\n","exports.endianness = function () { return 'LE' };\n\nexports.hostname = function () {\n if (typeof location !== 'undefined') {\n return location.hostname\n }\n else return '';\n};\n\nexports.loadavg = function () { return [] };\n\nexports.uptime = function () { return 0 };\n\nexports.freemem = function () {\n return Number.MAX_VALUE;\n};\n\nexports.totalmem = function () {\n return Number.MAX_VALUE;\n};\n\nexports.cpus = function () { return [] };\n\nexports.type = function () { return 'Browser' };\n\nexports.release = function () {\n if (typeof navigator !== 'undefined') {\n return navigator.appVersion;\n }\n return '';\n};\n\nexports.networkInterfaces\n= exports.getNetworkInterfaces\n= function () { return {} };\n\nexports.arch = function () { return 'javascript' };\n\nexports.platform = function () { return 'browser' };\n\nexports.tmpdir = exports.tmpDir = function () {\n return '/tmp';\n};\n\nexports.EOL = '\\n';\n\nexports.homedir = function () {\n\treturn '/'\n};\n","// shim for using process in browser\nvar process = module.exports = {};\n\n// cached from whatever global is present so that test runners that stub it\n// don't break things. But we need to wrap it in a try catch in case it is\n// wrapped in strict mode code which doesn't define any globals. It's inside a\n// function because try/catches deoptimize in certain engines.\n\nvar cachedSetTimeout;\nvar cachedClearTimeout;\n\nfunction defaultSetTimout() {\n throw new Error('setTimeout has not been defined');\n}\nfunction defaultClearTimeout () {\n throw new Error('clearTimeout has not been defined');\n}\n(function () {\n try {\n if (typeof setTimeout === 'function') {\n cachedSetTimeout = setTimeout;\n } else {\n cachedSetTimeout = defaultSetTimout;\n }\n } catch (e) {\n cachedSetTimeout = defaultSetTimout;\n }\n try {\n if (typeof clearTimeout === 'function') {\n cachedClearTimeout = clearTimeout;\n } else {\n cachedClearTimeout = defaultClearTimeout;\n }\n } catch (e) {\n cachedClearTimeout = defaultClearTimeout;\n }\n} ())\nfunction runTimeout(fun) {\n if (cachedSetTimeout === setTimeout) {\n //normal enviroments in sane situations\n return setTimeout(fun, 0);\n }\n // if setTimeout wasn't available but was latter defined\n if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {\n cachedSetTimeout = setTimeout;\n return setTimeout(fun, 0);\n }\n try {\n // when when somebody has screwed with setTimeout but no I.E. maddness\n return cachedSetTimeout(fun, 0);\n } catch(e){\n try {\n // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n return cachedSetTimeout.call(null, fun, 0);\n } catch(e){\n // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error\n return cachedSetTimeout.call(this, fun, 0);\n }\n }\n\n\n}\nfunction runClearTimeout(marker) {\n if (cachedClearTimeout === clearTimeout) {\n //normal enviroments in sane situations\n return clearTimeout(marker);\n }\n // if clearTimeout wasn't available but was latter defined\n if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {\n cachedClearTimeout = clearTimeout;\n return clearTimeout(marker);\n }\n try {\n // when when somebody has screwed with setTimeout but no I.E. maddness\n return cachedClearTimeout(marker);\n } catch (e){\n try {\n // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n return cachedClearTimeout.call(null, marker);\n } catch (e){\n // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error.\n // Some versions of I.E. have different rules for clearTimeout vs setTimeout\n return cachedClearTimeout.call(this, marker);\n }\n }\n\n\n\n}\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\n\nfunction cleanUpNextTick() {\n if (!draining || !currentQueue) {\n return;\n }\n draining = false;\n if (currentQueue.length) {\n queue = currentQueue.concat(queue);\n } else {\n queueIndex = -1;\n }\n if (queue.length) {\n drainQueue();\n }\n}\n\nfunction drainQueue() {\n if (draining) {\n return;\n }\n var timeout = runTimeout(cleanUpNextTick);\n draining = true;\n\n var len = queue.length;\n while(len) {\n currentQueue = queue;\n queue = [];\n while (++queueIndex < len) {\n if (currentQueue) {\n currentQueue[queueIndex].run();\n }\n }\n queueIndex = -1;\n len = queue.length;\n }\n currentQueue = null;\n draining = false;\n runClearTimeout(timeout);\n}\n\nprocess.nextTick = function (fun) {\n var args = new Array(arguments.length - 1);\n if (arguments.length > 1) {\n for (var i = 1; i < arguments.length; i++) {\n args[i - 1] = arguments[i];\n }\n }\n queue.push(new Item(fun, args));\n if (queue.length === 1 && !draining) {\n runTimeout(drainQueue);\n }\n};\n\n// v8 likes predictible objects\nfunction Item(fun, array) {\n this.fun = fun;\n this.array = array;\n}\nItem.prototype.run = function () {\n this.fun.apply(null, this.array);\n};\nprocess.title = 'browser';\nprocess.browser = true;\nprocess.env = {};\nprocess.argv = [];\nprocess.version = ''; // empty string to avoid regexp issues\nprocess.versions = {};\n\nfunction noop() {}\n\nprocess.on = noop;\nprocess.addListener = noop;\nprocess.once = noop;\nprocess.off = noop;\nprocess.removeListener = noop;\nprocess.removeAllListeners = noop;\nprocess.emit = noop;\nprocess.prependListener = noop;\nprocess.prependOnceListener = noop;\n\nprocess.listeners = function (name) { return [] }\n\nprocess.binding = function (name) {\n throw new Error('process.binding is not supported');\n};\n\nprocess.cwd = function () { return '/' };\nprocess.chdir = function (dir) {\n throw new Error('process.chdir is not supported');\n};\nprocess.umask = function() { return 0; };\n","/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n if (typeof b !== \"function\" && b !== null)\r\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\r\n}) : (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n});\r\n\r\nexport function __exportStar(m, o) {\r\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n}\r\n\r\nexport function __spreadArray(to, from, pack) {\r\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\r\n if (ar || !(i in from)) {\r\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\r\n ar[i] = from[i];\r\n }\r\n }\r\n return to.concat(ar || Array.prototype.slice.call(from));\r\n}\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nvar __setModuleDefault = Object.create ? (function(o, v) {\r\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\r\n}) : function(o, v) {\r\n o[\"default\"] = v;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\r\n __setModuleDefault(result, mod);\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\r\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\r\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\r\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\r\n}\r\n","var _globalThis;\nif (typeof globalThis === 'object') {\n\t_globalThis = globalThis;\n} else {\n\ttry {\n\t\t_globalThis = require('es5-ext/global');\n\t} catch (error) {\n\t} finally {\n\t\tif (!_globalThis && typeof window !== 'undefined') { _globalThis = window; }\n\t\tif (!_globalThis) { throw new Error('Could not determine global this'); }\n\t}\n}\n\nvar NativeWebSocket = _globalThis.WebSocket || _globalThis.MozWebSocket;\nvar websocket_version = require('./version');\n\n\n/**\n * Expose a W3C WebSocket class with just one or two arguments.\n */\nfunction W3CWebSocket(uri, protocols) {\n\tvar native_instance;\n\n\tif (protocols) {\n\t\tnative_instance = new NativeWebSocket(uri, protocols);\n\t}\n\telse {\n\t\tnative_instance = new NativeWebSocket(uri);\n\t}\n\n\t/**\n\t * 'native_instance' is an instance of nativeWebSocket (the browser's WebSocket\n\t * class). Since it is an Object it will be returned as it is when creating an\n\t * instance of W3CWebSocket via 'new W3CWebSocket()'.\n\t *\n\t * ECMAScript 5: http://bclary.com/2004/11/07/#a-13.2.2\n\t */\n\treturn native_instance;\n}\nif (NativeWebSocket) {\n\t['CONNECTING', 'OPEN', 'CLOSING', 'CLOSED'].forEach(function(prop) {\n\t\tObject.defineProperty(W3CWebSocket, prop, {\n\t\t\tget: function() { return NativeWebSocket[prop]; }\n\t\t});\n\t});\n}\n\n/**\n * Module exports.\n */\nmodule.exports = {\n 'w3cwebsocket' : NativeWebSocket ? W3CWebSocket : null,\n 'version' : websocket_version\n};\n","module.exports = require('../package.json').version;\n","import safariFix from 'safari-14-idb-fix';\n\nfunction promisifyRequest(request) {\n return new Promise((resolve, reject) => {\n // @ts-ignore - file size hacks\n request.oncomplete = request.onsuccess = () => resolve(request.result);\n // @ts-ignore - file size hacks\n request.onabort = request.onerror = () => reject(request.error);\n });\n}\nfunction createStore(dbName, storeName) {\n const dbp = safariFix().then(() => {\n const request = indexedDB.open(dbName);\n request.onupgradeneeded = () => request.result.createObjectStore(storeName);\n return promisifyRequest(request);\n });\n return (txMode, callback) => dbp.then((db) => callback(db.transaction(storeName, txMode).objectStore(storeName)));\n}\nlet defaultGetStoreFunc;\nfunction defaultGetStore() {\n if (!defaultGetStoreFunc) {\n defaultGetStoreFunc = createStore('keyval-store', 'keyval');\n }\n return defaultGetStoreFunc;\n}\n/**\n * Get a value by its key.\n *\n * @param key\n * @param customStore Method to get a custom store. Use with caution (see the docs).\n */\nfunction get(key, customStore = defaultGetStore()) {\n return customStore('readonly', (store) => promisifyRequest(store.get(key)));\n}\n/**\n * Set a value with a key.\n *\n * @param key\n * @param value\n * @param customStore Method to get a custom store. Use with caution (see the docs).\n */\nfunction set(key, value, customStore = defaultGetStore()) {\n return customStore('readwrite', (store) => {\n store.put(value, key);\n return promisifyRequest(store.transaction);\n });\n}\n/**\n * Set multiple values at once. This is faster than calling set() multiple times.\n * It's also atomic – if one of the pairs can't be added, none will be added.\n *\n * @param entries Array of entries, where each entry is an array of `[key, value]`.\n * @param customStore Method to get a custom store. Use with caution (see the docs).\n */\nfunction setMany(entries, customStore = defaultGetStore()) {\n return customStore('readwrite', (store) => {\n entries.forEach((entry) => store.put(entry[1], entry[0]));\n return promisifyRequest(store.transaction);\n });\n}\n/**\n * Get multiple values by their keys\n *\n * @param keys\n * @param customStore Method to get a custom store. Use with caution (see the docs).\n */\nfunction getMany(keys, customStore = defaultGetStore()) {\n return customStore('readonly', (store) => Promise.all(keys.map((key) => promisifyRequest(store.get(key)))));\n}\n/**\n * Update a value. This lets you see the old value and update it as an atomic operation.\n *\n * @param key\n * @param updater A callback that takes the old value and returns a new value.\n * @param customStore Method to get a custom store. Use with caution (see the docs).\n */\nfunction update(key, updater, customStore = defaultGetStore()) {\n return customStore('readwrite', (store) => \n // Need to create the promise manually.\n // If I try to chain promises, the transaction closes in browsers\n // that use a promise polyfill (IE10/11).\n new Promise((resolve, reject) => {\n store.get(key).onsuccess = function () {\n try {\n store.put(updater(this.result), key);\n resolve(promisifyRequest(store.transaction));\n }\n catch (err) {\n reject(err);\n }\n };\n }));\n}\n/**\n * Delete a particular key from the store.\n *\n * @param key\n * @param customStore Method to get a custom store. Use with caution (see the docs).\n */\nfunction del(key, customStore = defaultGetStore()) {\n return customStore('readwrite', (store) => {\n store.delete(key);\n return promisifyRequest(store.transaction);\n });\n}\n/**\n * Delete multiple keys at once.\n *\n * @param keys List of keys to delete.\n * @param customStore Method to get a custom store. Use with caution (see the docs).\n */\nfunction delMany(keys, customStore = defaultGetStore()) {\n return customStore('readwrite', (store) => {\n keys.forEach((key) => store.delete(key));\n return promisifyRequest(store.transaction);\n });\n}\n/**\n * Clear all values in the store.\n *\n * @param customStore Method to get a custom store. Use with caution (see the docs).\n */\nfunction clear(customStore = defaultGetStore()) {\n return customStore('readwrite', (store) => {\n store.clear();\n return promisifyRequest(store.transaction);\n });\n}\nfunction eachCursor(store, callback) {\n store.openCursor().onsuccess = function () {\n if (!this.result)\n return;\n callback(this.result);\n this.result.continue();\n };\n return promisifyRequest(store.transaction);\n}\n/**\n * Get all keys in the store.\n *\n * @param customStore Method to get a custom store. Use with caution (see the docs).\n */\nfunction keys(customStore = defaultGetStore()) {\n return customStore('readonly', (store) => {\n // Fast path for modern browsers\n if (store.getAllKeys) {\n return promisifyRequest(store.getAllKeys());\n }\n const items = [];\n return eachCursor(store, (cursor) => items.push(cursor.key)).then(() => items);\n });\n}\n/**\n * Get all values in the store.\n *\n * @param customStore Method to get a custom store. Use with caution (see the docs).\n */\nfunction values(customStore = defaultGetStore()) {\n return customStore('readonly', (store) => {\n // Fast path for modern browsers\n if (store.getAll) {\n return promisifyRequest(store.getAll());\n }\n const items = [];\n return eachCursor(store, (cursor) => items.push(cursor.value)).then(() => items);\n });\n}\n/**\n * Get all entries in the store. Each entry is an array of `[key, value]`.\n *\n * @param customStore Method to get a custom store. Use with caution (see the docs).\n */\nfunction entries(customStore = defaultGetStore()) {\n return customStore('readonly', (store) => {\n // Fast path for modern browsers\n // (although, hopefully we'll get a simpler path some day)\n if (store.getAll && store.getAllKeys) {\n return Promise.all([\n promisifyRequest(store.getAllKeys()),\n promisifyRequest(store.getAll()),\n ]).then(([keys, values]) => keys.map((key, i) => [key, values[i]]));\n }\n const items = [];\n return customStore('readonly', (store) => eachCursor(store, (cursor) => items.push([cursor.key, cursor.value])).then(() => items));\n });\n}\n\nexport { clear, createStore, del, delMany, entries, get, getMany, keys, promisifyRequest, set, setMany, update, values };\n","/**\n * Work around Safari 14 IndexedDB open bug.\n *\n * Safari has a horrible bug where IDB requests can hang while the browser is starting up. https://bugs.webkit.org/show_bug.cgi?id=226547\n * The only solution is to keep nudging it until it's awake.\n */\nfunction idbReady() {\n var isSafari = !navigator.userAgentData &&\n /Safari\\//.test(navigator.userAgent) &&\n !/Chrom(e|ium)\\//.test(navigator.userAgent);\n // No point putting other browsers or older versions of Safari through this mess.\n if (!isSafari || !indexedDB.databases)\n return Promise.resolve();\n var intervalId;\n return new Promise(function (resolve) {\n var tryIdb = function () { return indexedDB.databases().finally(resolve); };\n intervalId = setInterval(tryIdb, 100);\n tryIdb();\n }).finally(function () { return clearInterval(intervalId); });\n}\n\nexport default idbReady;\n"],"names":["S","Uint8Array","Si","T1","Uint32Array","T2","T3","T4","T5","T6","T7","T8","getWords","key","length","i","buf","pos","str","charCodeAt","Error","xor","left","right","to","x2","x4","s","tEnc","tDec","d","t","x","xInv","computeTables","AES","_key","this","encKey","decKey","set","tmp","rcon","j","prototype","encrypt","_message","a2","b2","c2","message","out","a","b","c","rounds","k","decrypt","AES_IGE","iv","blockSize","cipher","text","cipherText","prevX","subarray","prevY","yXOR","y","AES_IGE$1","counter","offset","incrementCounter","carry","Object","defineProperty","exports","value","tslib_1","Semaphore_1","Mutex","cancelError","_semaphore","default","acquire","__awaiter","__generator","_b","label","sent","runExclusive","callback","isLocked","waitForUnlock","release","cancel","errors_1","Semaphore","_maxConcurrency","_cancelError","E_CANCELED","_queue","_waiters","_value","_this","locked","ticketPromise","Promise","resolve","reject","push","_dispatch","_a","trys","_currentReleaser","releaser","undefined","forEach","ticket","nextTicket","shift","released","_resolveWaiters","waiter","E_ALREADY_LOCKED","E_TIMEOUT","tryAcquire","withTimeout","Mutex_1","enumerable","get","withTimeout_1","tryAcquire_1","__exportStar","sync","alreadyAcquiredError","timeout","timeoutError","isTimeout","handle","e_1","setTimeout","Array","isArray","clearTimeout","byteLength","b64","lens","getLens","validLen","placeHoldersLen","toByteArray","arr","Arr","_byteLength","curByte","len","revLookup","fromByteArray","uint8","extraBytes","parts","maxChunkLength","len2","encodeChunk","lookup","join","code","indexOf","start","end","num","output","BASE","MAX_INT","MAX_INT_ARR","smallToArray","DEFAULT_ALPHABET","supportsNativeBigInt","BigInt","Integer","v","radix","alphabet","caseSensitive","parseValue","parseBase","BigInteger","sign","isSmall","SmallInteger","NativeBigInt","isPrecise","n","Math","floor","arrayToSmall","trim","compareAbs","createArray","truncate","ceil","add","sum","l_a","l_b","r","base","addAny","addSmall","l","subtract","difference","a_l","b_l","borrow","subtractSmall","multiplyLong","product","a_i","multiplySmall","shiftLeft","concat","multiplyKaratsuba","max","slice","ac","bd","abcd","multiplySmallAndArray","square","divModSmall","lambda","q","remainder","divisor","quotient","divModAny","self","negate","abs","comparison","quotientDigit","result","divisorMostSignificantDigit","divMod1","guess","xlen","highx","highy","check","part","unshift","reverse","divMod2","qSign","mod","mSign","isBasicPrime","isUnit","equals","isEven","isDivisibleBy","lesser","millerRabinTest","nPrev","prev","divide","next","bigInt","modPow","create","plus","subtractAny","minus","small","multiply","l1","l2","times","_multiplyBySmall","divmod","over","pow","toString","_0","_1","_2","isNegative","exp","isZero","modInv","isPositive","isOdd","compare","Infinity","compareTo","eq","notEquals","neq","greater","gt","lt","greaterOrEquals","geq","lesserOrEquals","leq","isPrime","strict","bits","bitLength","logN","log","toJSNumber","isProbablePrime","iterations","rng","randBetween","lastT","lastR","zero","newT","one","newR","powersOfTwo","powers2Length","highestPower2","shift_isSmall","bitwise","fn","xSign","ySign","xRem","not","yRem","xDigit","yDigit","xDivMod","yDivMod","String","shiftRight","remQuo","and","or","LOBMASK_I","roughLOB","integerLogarithm","p","e","min","gcd","toLowerCase","absBase","alphabetValues","digits","parseBaseFromArray","val","toBase","apply","map","valueOf","neg","Number","digit","toBaseString","stringify","parseStringValue","split","decimalPlace","test","parseNumberValue","toArray","toJSON","parseInt","minusOne","lcm","isInstance","usedRNG","random","low","range","restricted","top","fromArray","module","hasOwnProperty","base64","ieee754","customInspectSymbol","Symbol","Buffer","SlowBuffer","alloc","INSPECT_MAX_BYTES","K_MAX_LENGTH","createBuffer","RangeError","setPrototypeOf","arg","encodingOrOffset","TypeError","allocUnsafe","from","string","encoding","isEncoding","actual","write","fromString","ArrayBuffer","isView","arrayView","copy","fromArrayBuffer","buffer","byteOffset","fromArrayLike","fromArrayView","SharedArrayBuffer","obj","isBuffer","checked","numberIsNaN","type","data","fromObject","toPrimitive","assertSize","size","array","mustMatch","arguments","loweredCase","utf8ToBytes","base64ToBytes","slowToString","hexSlice","utf8Slice","asciiSlice","latin1Slice","base64Slice","utf16leSlice","swap","m","bidirectionalIndexOf","dir","arrayIndexOf","call","lastIndexOf","indexSize","arrLength","valLength","read","readUInt16BE","foundIndex","found","hexWrite","remaining","strLen","parsed","substr","utf8Write","blitBuffer","asciiWrite","byteArray","asciiToBytes","base64Write","ucs2Write","units","hi","lo","utf16leToBytes","res","firstByte","codePoint","bytesPerSequence","secondByte","thirdByte","fourthByte","tempCodePoint","codePoints","MAX_ARGUMENTS_LENGTH","fromCharCode","decodeCodePointsArray","kMaxLength","TYPED_ARRAY_SUPPORT","proto","foo","typedArraySupport","console","error","poolSize","fill","allocUnsafeSlow","_isBuffer","list","swap16","swap32","swap64","toLocaleString","inspect","replace","target","thisStart","thisEnd","thisCopy","targetCopy","includes","isFinite","_arr","ret","hexSliceLookupTable","bytes","checkOffset","ext","checkInt","wrtBigUInt64LE","checkIntBI","wrtBigUInt64BE","checkIEEE754","writeFloat","littleEndian","noAssert","writeDouble","newBuf","readUintLE","readUIntLE","mul","readUintBE","readUIntBE","readUint8","readUInt8","readUint16LE","readUInt16LE","readUint16BE","readUint32LE","readUInt32LE","readUint32BE","readUInt32BE","readBigUInt64LE","defineBigIntMethod","validateNumber","first","last","boundsError","readBigUInt64BE","readIntLE","readIntBE","readInt8","readInt16LE","readInt16BE","readInt32LE","readInt32BE","readBigInt64LE","readBigInt64BE","readFloatLE","readFloatBE","readDoubleLE","readDoubleBE","writeUintLE","writeUIntLE","writeUintBE","writeUIntBE","writeUint8","writeUInt8","writeUint16LE","writeUInt16LE","writeUint16BE","writeUInt16BE","writeUint32LE","writeUInt32LE","writeUint32BE","writeUInt32BE","writeBigUInt64LE","writeBigUInt64BE","writeIntLE","limit","sub","writeIntBE","writeInt8","writeInt16LE","writeInt16BE","writeInt32LE","writeInt32BE","writeBigInt64LE","writeBigInt64BE","writeFloatLE","writeFloatBE","writeDoubleLE","writeDoubleBE","targetStart","copyWithin","errors","E","sym","getMessage","Base","constructor","super","writable","configurable","name","stack","addNumericalSeparator","ERR_OUT_OF_RANGE","checkBounds","ERR_INVALID_ARG_TYPE","ERR_BUFFER_OUT_OF_BOUNDS","input","msg","received","isInteger","INVALID_BASE64_RE","leadSurrogate","base64clean","src","dst","table","i16","BufferBigIntNotDefined","naiveFallback","window","globalThis","__global__","isLE","mLen","nBytes","eLen","eMax","eBias","nBits","NaN","rt","isNaN","LN2","endianness","hostname","location","loadavg","uptime","freemem","MAX_VALUE","totalmem","cpus","navigator","appVersion","networkInterfaces","getNetworkInterfaces","arch","platform","tmpdir","tmpDir","EOL","homedir","cachedSetTimeout","cachedClearTimeout","process","defaultSetTimout","defaultClearTimeout","runTimeout","fun","currentQueue","queue","draining","queueIndex","cleanUpNextTick","drainQueue","run","marker","runClearTimeout","Item","noop","nextTick","args","title","browser","env","argv","version","versions","on","addListener","once","off","removeListener","removeAllListeners","emit","prependListener","prependOnceListener","listeners","binding","cwd","chdir","umask","extendStatics","__proto__","__extends","__","__assign","assign","__rest","getOwnPropertySymbols","propertyIsEnumerable","__decorate","decorators","desc","getOwnPropertyDescriptor","Reflect","decorate","__param","paramIndex","decorator","__metadata","metadataKey","metadataValue","metadata","thisArg","_arguments","P","generator","fulfilled","step","rejected","done","then","body","f","g","_","ops","verb","iterator","op","pop","__createBinding","o","k2","__values","__read","ar","__spread","__spreadArrays","il","jl","__spreadArray","pack","__await","__asyncGenerator","asyncIterator","resume","fulfill","settle","__asyncDelegator","__asyncValues","__makeTemplateObject","cooked","raw","__setModuleDefault","__importStar","__esModule","__importDefault","__classPrivateFieldGet","receiver","state","kind","has","__classPrivateFieldSet","_globalThis","NativeWebSocket","WebSocket","MozWebSocket","websocket_version","W3CWebSocket","uri","protocols","prop","promisifyRequest","request","oncomplete","onsuccess","onabort","onerror","createStore","dbName","storeName","dbp","indexedDB","open","onupgradeneeded","createObjectStore","txMode","db","transaction","objectStore","defaultGetStoreFunc","defaultGetStore","customStore","store","put","setMany","entries","entry","getMany","keys","all","update","updater","err","del","delete","delMany","clear","eachCursor","openCursor","continue","getAllKeys","items","cursor","values","getAll","intervalId","userAgentData","userAgent","databases","tryIdb","finally","setInterval","clearInterval"],"sourceRoot":""} \ No newline at end of file diff --git a/dist/133.8c0baeff1e13dd2e52f0.css b/dist/133.4a391d2071acfc4ca6b0.css similarity index 99% rename from dist/133.8c0baeff1e13dd2e52f0.css rename to dist/133.4a391d2071acfc4ca6b0.css index 81585ecf5..22bba0ccd 100644 --- a/dist/133.8c0baeff1e13dd2e52f0.css +++ b/dist/133.4a391d2071acfc4ca6b0.css @@ -3,4 +3,4 @@ .CropModal .modal-dialog{width:calc(100% - 2rem);max-width:35rem;height:calc(100% - 1rem);max-height:35rem;position:relative}.CropModal .modal-content,.CropModal #avatar-crop{overflow:hidden}.CropModal .confirm-button{position:absolute;bottom:1rem;right:1rem;box-shadow:0 1px 2px var(--color-default-shadow)}.CropModal #avatar-crop{max-width:25rem;margin:0 auto;position:relative}.CropModal #avatar-crop::before{content:"";display:block;padding-top:100%}.CropModal #avatar-crop .cr-boundary{position:absolute;top:0;left:0;border-radius:var(--border-radius-messages-small)}.CropModal #avatar-crop .cr-viewport{border:none;box-shadow:0 0 2000px 2000px rgba(127,127,127,.5)}.CropModal #avatar-crop .cr-slider::-webkit-slider-runnable-track{background:var(--color-borders)}.CropModal #avatar-crop .cr-slider::-moz-range-track{background:var(--color-borders)}.CropModal #avatar-crop .cr-slider::-ms-track{background:var(--color-borders)}.CropModal #avatar-crop .cr-slider::-webkit-slider-thumb{background:var(--color-primary);cursor:pointer;transform:scale(1);-webkit-transition:transform .25s ease-in-out;transition:transform .25s ease-in-out}.CropModal #avatar-crop .cr-slider::-webkit-slider-thumb:hover{transform:scale(1.2)}.CropModal #avatar-crop .cr-slider::-moz-range-thumb{background:var(--color-primary);cursor:pointer;transform:scale(1);-moz-transition:transform .25s ease-in-out;transition:transform .25s ease-in-out}.CropModal #avatar-crop .cr-slider::-moz-range-thumb:hover{transform:scale(1.2)}.CropModal #avatar-crop .cr-slider::-ms-thumb{background:var(--color-primary);cursor:pointer;transform:scale(1);-ms-transition:transform .25s ease-in-out;transition:transform .25s ease-in-out}.CropModal #avatar-crop .cr-slider::-ms-thumb:hover{transform:scale(1.2)} .AvatarEditable label{margin-left:auto;margin-right:auto;width:7.5rem;height:7.5rem;margin-bottom:2rem;display:flex !important;align-items:center;justify-content:center;background-color:var(--color-primary);border-radius:50%;color:#fff;font-size:3rem;cursor:pointer;position:relative;overflow:hidden;outline:none !important}.AvatarEditable label input{display:none}.AvatarEditable label img{position:absolute;top:0;left:0;width:100%;height:100%}.AvatarEditable label i{transform:scale(1);transition:transform .15s linear;z-index:var(--z-register-add-avatar)}.Transition>div:not(.Transition__slide--active) .AvatarEditable label input,.Transition>div:not(.Transition__slide--active) .AvatarEditable label i,.Transition>div:not(.Transition__slide--active) .AvatarEditable label::after,body.animating-right-column .AvatarEditable label input,body.animating-right-column .AvatarEditable label i,body.animating-right-column .AvatarEditable label::after{display:none !important}.Transition>div:not(.Transition__slide--active) .AvatarEditable label img,body.animating-right-column .AvatarEditable label img{position:static !important}.AvatarEditable label:hover i{transform:scale(1.2)}.AvatarEditable label.filled{background-color:var(--color-background)}.AvatarEditable label.filled::after{content:"";display:block;position:absolute;left:0;top:0;width:100%;height:100%;background-color:rgba(0,0,0,.4)}.AvatarEditable label.disabled{pointer-events:none}.AvatarEditable label.disabled i{display:none}.AvatarEditable label.disabled::after{display:none} -/*# sourceMappingURL=133.8c0baeff1e13dd2e52f0.css.map*/ \ No newline at end of file +/*# sourceMappingURL=133.4a391d2071acfc4ca6b0.css.map*/ \ No newline at end of file diff --git a/dist/133.8c0baeff1e13dd2e52f0.css.map b/dist/133.4a391d2071acfc4ca6b0.css.map similarity index 99% rename from dist/133.8c0baeff1e13dd2e52f0.css.map rename to dist/133.4a391d2071acfc4ca6b0.css.map index 389b2ea96..43a56d841 100644 --- a/dist/133.8c0baeff1e13dd2e52f0.css.map +++ b/dist/133.4a391d2071acfc4ca6b0.css.map @@ -1 +1 @@ -{"version":3,"file":"133.8c0baeff1e13dd2e52f0.css","mappings":"AAAA,QACE,kBACA,cACA,iBACA,kBACA,aACA,cACA,sBAEA,gDATF,QAUI,YACA,aACA,sBAGF,YACE,YACA,aAGF,yBACE,kBACA,OACA,MACA,WACA,YAEA,gCACE,aAIJ,wBACE,WACA,YACA,0DACA,mB;ACpCJ,OACE,kBACA,uBAOE,4IACE,gBAKF,gCACE,gBAKF,4BACE,gBAKF,4BACE,gBAIJ,wBACE,eACA,MACA,SACA,OACA,QACA,aACA,uBACA,mBAGF,uBACE,eACA,MACA,QACA,SACA,OACA,WACA,iCAGF,4CACE,6BAGF,qBACE,kBACA,oBACA,sBACA,WACA,gBACA,kBACA,iBACA,yCACA,8DACA,2CACA,mCAEA,+CAEA,4CACE,gBACA,0BAGF,yBApBF,qBAqBI,yCAIJ,0BACE,+BAGF,6BACE,kCAGF,oDAEE,oBACA,aACA,mBACA,cAGF,oBACE,kBACA,gBACA,cACA,gBACA,uBAEA,qCACE,mBAIJ,+BAEE,4CAEA,oDACE,kBACA,eACA,WACA,qBACA,iBACA,qBACA,sBACA,eAIJ,sBACE,WACA,YACA,aACA,gBACA,gBAEA,qDAEE,sBAIJ,kEAGE,uBACA,mBAGF,oBACE,oBACA,4BACA,qBACA,uBACA,gBAGF,mBACE,kCACA,mBACA,gBAGF,uBACE,aACA,qBAEA,qEACE,iBAIJ,8BACE,WACA,YACA,iBACA,iBACA,gBACA,qB;ACnKF,yBACE,wBACA,gBACA,yBACA,iBACA,kBAGF,kDAEE,gBAGF,2BACE,kBACA,YACA,WACA,iDAGF,wBACE,gBACA,cACA,kBAEA,gCACE,WACA,cACA,iBAGF,qCACE,kBACA,MACA,OACA,kDAGF,qCACE,YACA,kDAOA,kEACE,gCAGF,qDACE,gCAGF,8CACE,gCAGF,yDAtEJ,gCACA,eACA,mBACA,oFAEA,+DACE,qBAoEE,qDA1EJ,gCACA,eACA,mBACA,iFAEA,2DACE,qBAwEE,8CA9EJ,gCACA,eACA,mBACA,gFAEA,oDACE,qB;ACJF,sBACE,iBACA,kBACA,aACA,cACA,mBACA,wBACA,mBACA,uBACA,sCACA,kBACA,WACA,eACA,eACA,kBACA,gBACA,wBAEA,4BACE,aAGF,0BACE,kBACA,MACA,OACA,WACA,YAGF,wBACE,mBACA,iCACA,qCAKA,sYAGE,wBAGF,gIACE,2BAKF,8BACE,qBAIJ,6BACE,yCAEA,oCACE,WACA,cACA,kBACA,OACA,MACA,WACA,YACA,gCAIJ,+BACE,oBAEA,iCACE,aAGF,sCACE,a","sources":["webpack://telegram-t/./src/components/common/PasswordMonkey.scss","webpack://telegram-t/./src/components/ui/Modal.scss","webpack://telegram-t/./src/components/ui/CropModal.scss","webpack://telegram-t/./src/components/ui/AvatarEditable.scss"],"sourcesContent":["#monkey {\n position: relative;\n display: block;\n margin-left: auto;\n margin-right: auto;\n width: 7.5rem;\n height: 7.5rem;\n margin-bottom: 1.75rem;\n\n @media (min-width: 600px) and (min-height: 450px) {\n width: 10rem;\n height: 10rem;\n margin-bottom: 2.5rem;\n }\n\n &.big {\n width: 10rem;\n height: 10rem;\n }\n\n .AnimatedSticker {\n position: absolute;\n left: 0;\n top: 0;\n width: 100%;\n height: 100%;\n\n &.hidden {\n display: none\n }\n }\n\n .monkey-preview {\n width: 100%;\n height: 100%;\n background: url('../../assets/monkey.svg') center;\n background-size: 100%;\n }\n}\n",".Modal {\n position: relative;\n z-index: var(--z-modal);\n\n &.delete,\n &.error,\n &.confirm,\n &.pin,\n &.unpin-all {\n .modal-dialog {\n max-width: 23rem;\n }\n }\n\n &.error {\n .modal-content > div {\n margin-top: 1rem;\n }\n }\n\n &.narrow {\n .modal-dialog {\n max-width: 20rem;\n }\n }\n\n &.report {\n .modal-dialog {\n max-width: 15rem;\n }\n }\n\n .modal-container {\n position: fixed;\n top: 0;\n bottom: 0;\n left: 0;\n right: 0;\n display: flex;\n justify-content: center;\n align-items: center;\n }\n\n .modal-backdrop {\n position: fixed;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: -1;\n background-color: rgba(0, 0, 0, 0.25);\n }\n\n &.transparent-backdrop .modal-backdrop {\n background-color: transparent;\n }\n\n .modal-dialog {\n position: relative;\n display: inline-flex;\n flex-direction: column;\n width: 100%;\n max-width: 35rem;\n min-width: 17.5rem;\n margin: 2rem auto;\n background-color: var(--color-background);\n box-shadow: 0 0.25rem 0.5rem 0.125rem var(--color-default-shadow);\n border-radius: var(--border-radius-default);\n transform: translate3d(0, -1rem, 0);\n\n transition: transform 0.2s ease, opacity 0.2s ease;\n\n body.animation-level-0 & {\n transition: none;\n transform: none !important;\n }\n\n @media (max-width: 450px) {\n max-width: calc(100vw - 3rem) !important;\n }\n }\n\n &.open .modal-dialog {\n transform: translate3d(0, 0, 0);\n }\n\n &.closing .modal-dialog {\n transform: translate3d(0, 1rem, 0);\n }\n\n .modal-header,\n %modal-header {\n padding: 1rem 1rem 0;\n display: flex;\n align-items: center;\n flex-shrink: 0;\n }\n\n .modal-title {\n font-size: 1.25rem;\n font-weight: 500;\n flex: 1 1 auto;\n overflow: hidden;\n text-overflow: ellipsis;\n\n &:not(:only-child) {\n margin: 0 1.3125rem;\n }\n }\n\n .modal-header-condensed {\n @extend %modal-header;\n padding: 0.5rem 1.25rem 0 0.9375rem !important;\n\n .modal-action-button {\n font-size: 0.875rem;\n height: 2.25rem;\n width: auto;\n line-height: 1.625rem;\n margin-left: auto;\n padding-left: 1.25rem;\n padding-right: 1.25rem;\n min-width: 5rem;\n }\n }\n\n .modal-content {\n width: 100%;\n flex-grow: 1;\n padding: 1rem;\n overflow-y: auto;\n max-height: 90vh;\n\n b,\n strong {\n word-break: break-word;\n }\n }\n\n .modal-title,\n .modal-content,\n .modal-content > p {\n unicode-bidi: plaintext;\n text-align: initial;\n }\n\n .modal-about {\n display: -webkit-box;\n -webkit-box-orient: vertical;\n -webkit-line-clamp: 5;\n text-overflow: ellipsis;\n overflow: hidden;\n }\n\n .modal-help {\n color: var(--color-text-secondary);\n font-size: 0.9375rem;\n line-height: 1.3;\n }\n\n .dialog-buttons {\n display: flex;\n align-items: flex-end;\n\n .confirm-dialog-button + .confirm-dialog-button {\n margin-left: 1rem;\n }\n }\n\n .confirm-dialog-button {\n width: auto;\n height: auto;\n margin-left: auto;\n text-align: right;\n font-weight: 500;\n white-space: pre-wrap;\n }\n}\n","@mixin thumb-styles() {\n background: var(--color-primary);\n cursor: pointer;\n transform: scale(1);\n transition: transform 0.25s ease-in-out;\n\n &:hover {\n transform: scale(1.2);\n }\n}\n\n.CropModal {\n .modal-dialog {\n width: calc(100% - 2rem);\n max-width: 35rem;\n height: calc(100% - 1rem);\n max-height: 35rem;\n position: relative;\n }\n\n .modal-content,\n #avatar-crop {\n overflow: hidden;\n }\n\n .confirm-button {\n position: absolute;\n bottom: 1rem;\n right: 1rem;\n box-shadow: 0 1px 2px var(--color-default-shadow);\n }\n\n #avatar-crop {\n max-width: 25rem;\n margin: 0 auto;\n position: relative;\n\n &::before {\n content: \"\";\n display: block;\n padding-top: 100%;\n }\n\n .cr-boundary {\n position: absolute;\n top: 0;\n left: 0;\n border-radius: var(--border-radius-messages-small);\n }\n\n .cr-viewport {\n border: none;\n box-shadow: 0 0 2000px 2000px rgba(#7f7f7f, 0.5);\n }\n\n .cr-slider {\n // Note that while we're repeating code here, that's necessary as you can't comma-separate these type of selectors.\n // Browsers will drop the entire selector if it doesn't understand a part of it.\n\n &::-webkit-slider-runnable-track {\n background: var(--color-borders);\n }\n\n &::-moz-range-track {\n background: var(--color-borders);\n }\n\n &::-ms-track {\n background: var(--color-borders);\n }\n\n &::-webkit-slider-thumb {\n @include thumb-styles();\n }\n\n &::-moz-range-thumb {\n @include thumb-styles();\n }\n\n &::-ms-thumb {\n @include thumb-styles();\n }\n }\n }\n}\n","@import \"../../styles/mixins\";\n\n.AvatarEditable {\n label {\n margin-left: auto;\n margin-right: auto;\n width: 7.5rem;\n height: 7.5rem;\n margin-bottom: 2rem;\n display: flex !important;\n align-items: center;\n justify-content: center;\n background-color: var(--color-primary);\n border-radius: 50%;\n color: white;\n font-size: 3rem;\n cursor: pointer;\n position: relative;\n overflow: hidden;\n outline: none !important;\n\n input {\n display: none;\n }\n\n img {\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n }\n\n i {\n transform: scale(1);\n transition: transform 0.15s linear;\n z-index: var(--z-register-add-avatar);\n }\n\n // @optimization The weirdest workaround for screen animation lag\n @include while-transition() {\n input,\n i,\n &::after {\n display: none !important;\n }\n\n img {\n position: static !important;\n }\n }\n\n &:hover {\n i {\n transform: scale(1.2);\n }\n }\n\n &.filled {\n background-color: var(--color-background);\n\n &::after {\n content: \"\";\n display: block;\n position: absolute;\n left: 0;\n top: 0;\n width: 100%;\n height: 100%;\n background-color: rgba(black, 0.4);\n }\n }\n\n &.disabled {\n pointer-events: none;\n\n i {\n display: none;\n }\n\n &::after {\n display: none;\n }\n }\n }\n}\n"],"names":[],"sourceRoot":""} \ No newline at end of file +{"version":3,"file":"133.4a391d2071acfc4ca6b0.css","mappings":"AAAA,QACE,kBACA,cACA,iBACA,kBACA,aACA,cACA,sBAEA,gDATF,QAUI,YACA,aACA,sBAGF,YACE,YACA,aAGF,yBACE,kBACA,OACA,MACA,WACA,YAEA,gCACE,aAIJ,wBACE,WACA,YACA,0DACA,mB;ACpCJ,OACE,kBACA,uBAOE,4IACE,gBAKF,gCACE,gBAKF,4BACE,gBAKF,4BACE,gBAIJ,wBACE,eACA,MACA,SACA,OACA,QACA,aACA,uBACA,mBAGF,uBACE,eACA,MACA,QACA,SACA,OACA,WACA,iCAGF,4CACE,6BAGF,qBACE,kBACA,oBACA,sBACA,WACA,gBACA,kBACA,iBACA,yCACA,8DACA,2CACA,mCAEA,+CAEA,4CACE,gBACA,0BAGF,yBApBF,qBAqBI,yCAIJ,0BACE,+BAGF,6BACE,kCAGF,oDAEE,oBACA,aACA,mBACA,cAGF,oBACE,kBACA,gBACA,cACA,gBACA,uBAEA,qCACE,mBAIJ,+BAEE,4CAEA,oDACE,kBACA,eACA,WACA,qBACA,iBACA,qBACA,sBACA,eAIJ,sBACE,WACA,YACA,aACA,gBACA,gBAEA,qDAEE,sBAIJ,kEAGE,uBACA,mBAGF,oBACE,oBACA,4BACA,qBACA,uBACA,gBAGF,mBACE,kCACA,mBACA,gBAGF,uBACE,aACA,qBAEA,qEACE,iBAIJ,8BACE,WACA,YACA,iBACA,iBACA,gBACA,qB;ACnKF,yBACE,wBACA,gBACA,yBACA,iBACA,kBAGF,kDAEE,gBAGF,2BACE,kBACA,YACA,WACA,iDAGF,wBACE,gBACA,cACA,kBAEA,gCACE,WACA,cACA,iBAGF,qCACE,kBACA,MACA,OACA,kDAGF,qCACE,YACA,kDAOA,kEACE,gCAGF,qDACE,gCAGF,8CACE,gCAGF,yDAtEJ,gCACA,eACA,mBACA,oFAEA,+DACE,qBAoEE,qDA1EJ,gCACA,eACA,mBACA,iFAEA,2DACE,qBAwEE,8CA9EJ,gCACA,eACA,mBACA,gFAEA,oDACE,qB;ACJF,sBACE,iBACA,kBACA,aACA,cACA,mBACA,wBACA,mBACA,uBACA,sCACA,kBACA,WACA,eACA,eACA,kBACA,gBACA,wBAEA,4BACE,aAGF,0BACE,kBACA,MACA,OACA,WACA,YAGF,wBACE,mBACA,iCACA,qCAKA,sYAGE,wBAGF,gIACE,2BAKF,8BACE,qBAIJ,6BACE,yCAEA,oCACE,WACA,cACA,kBACA,OACA,MACA,WACA,YACA,gCAIJ,+BACE,oBAEA,iCACE,aAGF,sCACE,a","sources":["webpack://telegram-t/./src/components/common/PasswordMonkey.scss","webpack://telegram-t/./src/components/ui/Modal.scss","webpack://telegram-t/./src/components/ui/CropModal.scss","webpack://telegram-t/./src/components/ui/AvatarEditable.scss"],"sourcesContent":["#monkey {\n position: relative;\n display: block;\n margin-left: auto;\n margin-right: auto;\n width: 7.5rem;\n height: 7.5rem;\n margin-bottom: 1.75rem;\n\n @media (min-width: 600px) and (min-height: 450px) {\n width: 10rem;\n height: 10rem;\n margin-bottom: 2.5rem;\n }\n\n &.big {\n width: 10rem;\n height: 10rem;\n }\n\n .AnimatedSticker {\n position: absolute;\n left: 0;\n top: 0;\n width: 100%;\n height: 100%;\n\n &.hidden {\n display: none\n }\n }\n\n .monkey-preview {\n width: 100%;\n height: 100%;\n background: url('../../assets/monkey.svg') center;\n background-size: 100%;\n }\n}\n",".Modal {\n position: relative;\n z-index: var(--z-modal);\n\n &.delete,\n &.error,\n &.confirm,\n &.pin,\n &.unpin-all {\n .modal-dialog {\n max-width: 23rem;\n }\n }\n\n &.error {\n .modal-content > div {\n margin-top: 1rem;\n }\n }\n\n &.narrow {\n .modal-dialog {\n max-width: 20rem;\n }\n }\n\n &.report {\n .modal-dialog {\n max-width: 15rem;\n }\n }\n\n .modal-container {\n position: fixed;\n top: 0;\n bottom: 0;\n left: 0;\n right: 0;\n display: flex;\n justify-content: center;\n align-items: center;\n }\n\n .modal-backdrop {\n position: fixed;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: -1;\n background-color: rgba(0, 0, 0, 0.25);\n }\n\n &.transparent-backdrop .modal-backdrop {\n background-color: transparent;\n }\n\n .modal-dialog {\n position: relative;\n display: inline-flex;\n flex-direction: column;\n width: 100%;\n max-width: 35rem;\n min-width: 17.5rem;\n margin: 2rem auto;\n background-color: var(--color-background);\n box-shadow: 0 0.25rem 0.5rem 0.125rem var(--color-default-shadow);\n border-radius: var(--border-radius-default);\n transform: translate3d(0, -1rem, 0);\n\n transition: transform 0.2s ease, opacity 0.2s ease;\n\n body.animation-level-0 & {\n transition: none;\n transform: none !important;\n }\n\n @media (max-width: 450px) {\n max-width: calc(100vw - 3rem) !important;\n }\n }\n\n &.open .modal-dialog {\n transform: translate3d(0, 0, 0);\n }\n\n &.closing .modal-dialog {\n transform: translate3d(0, 1rem, 0);\n }\n\n .modal-header,\n %modal-header {\n padding: 1rem 1rem 0;\n display: flex;\n align-items: center;\n flex-shrink: 0;\n }\n\n .modal-title {\n font-size: 1.25rem;\n font-weight: 500;\n flex: 1 1 auto;\n overflow: hidden;\n text-overflow: ellipsis;\n\n &:not(:only-child) {\n margin: 0 1.3125rem;\n }\n }\n\n .modal-header-condensed {\n @extend %modal-header;\n padding: 0.5rem 1.25rem 0 0.9375rem !important;\n\n .modal-action-button {\n font-size: 0.875rem;\n height: 2.25rem;\n width: auto;\n line-height: 1.625rem;\n margin-left: auto;\n padding-left: 1.25rem;\n padding-right: 1.25rem;\n min-width: 5rem;\n }\n }\n\n .modal-content {\n width: 100%;\n flex-grow: 1;\n padding: 1rem;\n overflow-y: auto;\n max-height: 90vh;\n\n b,\n strong {\n word-break: break-word;\n }\n }\n\n .modal-title,\n .modal-content,\n .modal-content > p {\n unicode-bidi: plaintext;\n text-align: initial;\n }\n\n .modal-about {\n display: -webkit-box;\n -webkit-box-orient: vertical;\n -webkit-line-clamp: 5;\n text-overflow: ellipsis;\n overflow: hidden;\n }\n\n .modal-help {\n color: var(--color-text-secondary);\n font-size: 0.9375rem;\n line-height: 1.3;\n }\n\n .dialog-buttons {\n display: flex;\n align-items: flex-end;\n\n .confirm-dialog-button + .confirm-dialog-button {\n margin-left: 1rem;\n }\n }\n\n .confirm-dialog-button {\n width: auto;\n height: auto;\n margin-left: auto;\n text-align: right;\n font-weight: 500;\n white-space: pre-wrap;\n }\n}\n","@mixin thumb-styles() {\n background: var(--color-primary);\n cursor: pointer;\n transform: scale(1);\n transition: transform 0.25s ease-in-out;\n\n &:hover {\n transform: scale(1.2);\n }\n}\n\n.CropModal {\n .modal-dialog {\n width: calc(100% - 2rem);\n max-width: 35rem;\n height: calc(100% - 1rem);\n max-height: 35rem;\n position: relative;\n }\n\n .modal-content,\n #avatar-crop {\n overflow: hidden;\n }\n\n .confirm-button {\n position: absolute;\n bottom: 1rem;\n right: 1rem;\n box-shadow: 0 1px 2px var(--color-default-shadow);\n }\n\n #avatar-crop {\n max-width: 25rem;\n margin: 0 auto;\n position: relative;\n\n &::before {\n content: \"\";\n display: block;\n padding-top: 100%;\n }\n\n .cr-boundary {\n position: absolute;\n top: 0;\n left: 0;\n border-radius: var(--border-radius-messages-small);\n }\n\n .cr-viewport {\n border: none;\n box-shadow: 0 0 2000px 2000px rgba(#7f7f7f, 0.5);\n }\n\n .cr-slider {\n // Note that while we're repeating code here, that's necessary as you can't comma-separate these type of selectors.\n // Browsers will drop the entire selector if it doesn't understand a part of it.\n\n &::-webkit-slider-runnable-track {\n background: var(--color-borders);\n }\n\n &::-moz-range-track {\n background: var(--color-borders);\n }\n\n &::-ms-track {\n background: var(--color-borders);\n }\n\n &::-webkit-slider-thumb {\n @include thumb-styles();\n }\n\n &::-moz-range-thumb {\n @include thumb-styles();\n }\n\n &::-ms-thumb {\n @include thumb-styles();\n }\n }\n }\n}\n","@import \"../../styles/mixins\";\n\n.AvatarEditable {\n label {\n margin-left: auto;\n margin-right: auto;\n width: 7.5rem;\n height: 7.5rem;\n margin-bottom: 2rem;\n display: flex !important;\n align-items: center;\n justify-content: center;\n background-color: var(--color-primary);\n border-radius: 50%;\n color: white;\n font-size: 3rem;\n cursor: pointer;\n position: relative;\n overflow: hidden;\n outline: none !important;\n\n input {\n display: none;\n }\n\n img {\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n }\n\n i {\n transform: scale(1);\n transition: transform 0.15s linear;\n z-index: var(--z-register-add-avatar);\n }\n\n // @optimization The weirdest workaround for screen animation lag\n @include while-transition() {\n input,\n i,\n &::after {\n display: none !important;\n }\n\n img {\n position: static !important;\n }\n }\n\n &:hover {\n i {\n transform: scale(1.2);\n }\n }\n\n &.filled {\n background-color: var(--color-background);\n\n &::after {\n content: \"\";\n display: block;\n position: absolute;\n left: 0;\n top: 0;\n width: 100%;\n height: 100%;\n background-color: rgba(black, 0.4);\n }\n }\n\n &.disabled {\n pointer-events: none;\n\n i {\n display: none;\n }\n\n &::after {\n display: none;\n }\n }\n }\n}\n"],"names":[],"sourceRoot":""} \ No newline at end of file diff --git a/dist/133.8c0baeff1e13dd2e52f0.js b/dist/133.4a391d2071acfc4ca6b0.js similarity index 99% rename from dist/133.8c0baeff1e13dd2e52f0.js rename to dist/133.4a391d2071acfc4ca6b0.js index 1789546be..f936bf6c6 100644 --- a/dist/133.8c0baeff1e13dd2e52f0.js +++ b/dist/133.4a391d2071acfc4ca6b0.js @@ -1,2 +1,2 @@ "use strict";(self.webpackChunktelegram_t=self.webpackChunktelegram_t||[]).push([[133],{1133:(e,t,a)=>{a.r(t),a.d(t,{AuthCode:()=>v,AuthPassword:()=>f,AuthRegister:()=>y});var n=a(4050),o=a(3555),r=a(7361),l=a(782),s=a(2340),i=a(6590),c=a(9107),d=a(7687),m=a(4288),u=a(3716),h=a(7324),Z=a(7799);const g=r.wB?u.qp:u.z7,p=(0,n.X$)((e=>{let{code:t,codeLength:a,trackingDirection:o,isTracking:r,isBig:l}=e;const[s,i]=(0,n.eJ)(),[c,d]=(0,n.eJ)(),[m,p]=(0,n.eJ)(!1),v=165/a;(0,n.d4)((()=>{s||(0,h.Z)("MonkeyIdle").then(i)}),[s]),(0,n.d4)((()=>{c||(0,h.Z)("MonkeyTracking").then(d)}),[c]);const P=(0,n.I4)((()=>p(!0)),[]);return n.ZP.createElement("div",{id:"monkey",className:l?"big":""},!m&&n.ZP.createElement("div",{className:"monkey-preview"}),s&&n.ZP.createElement(Z.Z,{id:"idleMonkey",size:l?u.K2:g,className:r?"hidden":void 0,animationData:s,play:!r,onLoad:P}),c&&n.ZP.createElement(Z.Z,{id:"trackingMonkey",size:l?u.K2:g,className:r?"shown":"hidden",animationData:c,playSegment:r?function(){const e=t&&t.length>1||o<0?15+v*(t.length-1):0,n=t.length===a?180:15+v*t.length;return o<1?[n,e]:[e,n]}():void 0,speed:2,noLoop:!0}))})),v=(0,n.X$)((0,o.c$)((e=>(0,l.ei)(e,["authPhoneNumber","authIsCodeViaApp","authIsLoading","authError"])))((e=>{let{authPhoneNumber:t,authIsCodeViaApp:a,authIsLoading:l,authError:u}=e;const{setAuthCode:h,returnToAuthPhoneNumber:Z,clearAuthError:g}=(0,o.Sv)(),v=(0,c.Z)(),P=(0,n.sO)(null),[E,f]=(0,n.eJ)(""),[b,N]=(0,n.eJ)(!1),[y,C]=(0,n.eJ)(1);(0,n.d4)((()=>{r.$b||P.current.focus()}),[]),(0,i.ZP)(!0,Z);const w=(0,n.I4)((e=>{u&&g();const{currentTarget:t}=e;t.value=t.value.replace(/[^\d]+/,"").substr(0,5),t.value!==E&&(f(t.value),b?t.value.length||N(!1):N(!0),E&&E.length>t.value.length?C(-1):C(1),5===t.value.length&&h({code:t.value}))}),[u,g,E,b,h]);return n.ZP.createElement("div",{id:"auth-code-form",className:"custom-scroll"},n.ZP.createElement("div",{className:"auth-form"},n.ZP.createElement(p,{code:E,codeLength:5,isTracking:b,trackingDirection:y}),n.ZP.createElement("h2",null,t,n.ZP.createElement("div",{className:"auth-number-edit",onClick:Z,role:"button",tabIndex:0,title:v("WrongNumber")},n.ZP.createElement("i",{className:"icon-edit"}))),n.ZP.createElement("p",{className:"note"},(0,s.Z)(v(a?"SentAppCode":"Login.JustSentSms"),["simple_markdown"])),n.ZP.createElement(d.Z,{ref:P,id:"sign-in-code",label:v("Code"),onInput:w,value:E,error:u&&v(u),autoComplete:"off",inputMode:"numeric"}),l&&n.ZP.createElement(m.Z,null)))})));var P=a(3490),E=a(9364);const f=(0,n.X$)((0,o.c$)((e=>(0,l.ei)(e,["authIsLoading","authError","authHint"])))((e=>{let{authIsLoading:t,authError:a,authHint:r}=e;const{setAuthPassword:l,clearAuthError:s}=(0,o.Sv)(),i=(0,c.Z)(),[d,m]=(0,n.eJ)(!1),u=(0,n.I4)((e=>{m(e)}),[]),h=(0,n.I4)((e=>{l({password:e})}),[l]);return n.ZP.createElement("div",{id:"auth-password-form",className:"custom-scroll"},n.ZP.createElement("div",{className:"auth-form"},n.ZP.createElement(P.Z,{isPasswordVisible:d}),n.ZP.createElement("h2",null,i("Login.Header.Password")),n.ZP.createElement("p",{className:"note"},i("Login.EnterPasswordDescription")),n.ZP.createElement(E.Z,{clearError:s,error:a&&i(a),hint:r,isLoading:t,isPasswordVisible:d,onChangePasswordVisibility:u,onSubmit:h})))})));var b=a(231),N=a(710);const y=(0,n.X$)((0,o.c$)((e=>(0,l.ei)(e,["authIsLoading","authError"])))((e=>{let{authIsLoading:t,authError:a}=e;const{signUp:r,clearAuthError:l,uploadProfilePhoto:s}=(0,o.Sv)(),i=(0,c.Z)(),[m,u]=(0,n.eJ)(!1),[h,Z]=(0,n.eJ)(),[g,p]=(0,n.eJ)(""),[v,P]=(0,n.eJ)(""),E=(0,n.I4)((e=>{a&&l();const{target:t}=e;p(t.value),u(t.value.length>0)}),[a,l]),f=(0,n.I4)((e=>{const{target:t}=e;P(t.value)}),[]);return n.ZP.createElement("div",{id:"auth-registration-form",className:"custom-scroll"},n.ZP.createElement("div",{className:"auth-form"},n.ZP.createElement("form",{action:"",method:"post",onSubmit:function(e){e.preventDefault(),r({firstName:g,lastName:v}),h&&s({file:h})}},n.ZP.createElement(N.Z,{onChange:Z}),n.ZP.createElement("h2",null,i("YourName")),n.ZP.createElement("p",{className:"note"},i("Login.Register.Desc")),n.ZP.createElement(d.Z,{id:"registration-first-name",label:i("Login.Register.FirstName.Placeholder"),onChange:E,value:g,error:a&&i(a),autoComplete:"given-name"}),n.ZP.createElement(d.Z,{id:"registration-last-name",label:i("Login.Register.LastName.Placeholder"),onChange:f,value:v,autoComplete:"family-name"}),m&&n.ZP.createElement(b.Z,{type:"submit",ripple:!0,isLoading:t},i("Next")))))})))},9364:(e,t,a)=>{a.d(t,{Z:()=>d});var n=a(4050),o=a(3716),r=a(7361),l=a(6752),s=a(9107),i=a(231);const c=r.wB?550:400,d=(0,n.X$)((e=>{let{isLoading:t=!1,isPasswordVisible:a,error:d,hint:m,placeholder:u="Password",submitLabel:h="Next",clearError:Z,onChangePasswordVisibility:g,onInputChange:p,onSubmit:v}=e;const P=(0,n.sO)(null),E=(0,s.Z)(),[f,b]=(0,n.eJ)(""),[N,y]=(0,n.eJ)(!1);return(0,n.d4)((()=>{r.$b||setTimeout((()=>{P.current.focus()}),c)}),[]),(0,n.d4)((()=>{d&&requestAnimationFrame((()=>{P.current.focus(),P.current.select()}))}),[d]),n.ZP.createElement("form",{action:"",onSubmit:function(e){e.preventDefault(),t||N&&v(f)},autoComplete:"off"},n.ZP.createElement("div",{className:(0,l.Z)("input-group password-input",f&&"touched",d&&"error"),dir:E.isRtl?"rtl":void 0},n.ZP.createElement("input",{ref:P,className:"form-control",type:a?"text":"password",id:"sign-in-password",value:f||"",autoComplete:"current-password",onChange:function(e){d&&Z();const{target:t}=e;b(t.value),y(t.value.length>=o.lo),p&&p(t.value)},dir:"auto"}),n.ZP.createElement("label",null,d||m||u),n.ZP.createElement("div",{className:"toggle-password",onClick:function(){g(!a)},role:"button",tabIndex:0,title:"Toggle password visibility"},n.ZP.createElement("i",{className:a?"icon-eye":"icon-eye-closed"}))),N&&n.ZP.createElement(i.Z,{type:"submit",ripple:!0,isLoading:t},h))}))},3490:(e,t,a)=>{a.d(t,{Z:()=>u});var n=a(4050),o=a(3716),r=a(7361),l=a(7324),s=a(7799);const i=[0,50],c=[0,20],d=[20,0],m=r.wB?o.qp:o.z7,u=(0,n.X$)((e=>{let{isPasswordVisible:t,isBig:a}=e;const[r,u]=(0,n.eJ)(),[h,Z]=(0,n.eJ)(),[g,p]=(0,n.eJ)(!1),[v,P]=(0,n.eJ)(!1);(0,n.d4)((()=>{r?setTimeout((()=>P(!0)),2e3):(0,l.Z)("MonkeyClose").then(u)}),[r]),(0,n.d4)((()=>{h||(0,l.Z)("MonkeyPeek").then(Z)}),[h]);const E=(0,n.I4)((()=>p(!0)),[]);return n.ZP.createElement("div",{id:"monkey",className:a?"big":""},!g&&n.ZP.createElement("div",{className:"monkey-preview"}),r&&n.ZP.createElement(s.Z,{id:"closeMonkey",size:a?o.K2:m,className:v?"hidden":"shown",animationData:r,playSegment:i,noLoop:!0,onLoad:E}),h&&n.ZP.createElement(s.Z,{id:"peekMonkey",size:a?o.K2:m,className:v?"shown":"hidden",animationData:h,playSegment:t?c:d,noLoop:!0}))}))},710:(e,t,a)=>{a.d(t,{Z:()=>p});var n=a(4050),o=a(6752),r=a(3716),l=a(1394),s=a(9107),i=a(231),c=a(3103),d=a(4288);const m={type:"blob",quality:1,format:"jpeg",circle:!1,size:{width:1024,height:1024}};let u,h,Z;const g=(0,n.X$)((e=>{let{file:t,onChange:o,onClose:g}=e;const[p,v]=(0,n.eJ)(!1);(0,n.d4)((()=>{t&&(p?async function(e){try{const t=document.getElementById("avatar-crop");if(!t)return;const{offsetWidth:a,offsetHeight:n}=t;Z=new u(t,{enableZoom:!0,boundary:{width:a,height:n},viewport:{width:a-16,height:n-16,type:"circle"}});const o=await(0,l.YJ)(e);await Z.bind({url:o})}catch(e){r.eM&&console.error(e)}}(t):async function(){return h||(h=Promise.all([a.e(99),a.e(472)]).then(a.bind(a,3472)),u=(await h).default),h}().then((()=>v(!0))))}),[t,p]);const P=(0,s.Z)(),E=(0,n.I4)((async()=>{if(!Z)return;const e=await Z.result(m),t="string"==typeof e?e:(0,l.hl)(e,"avatar.jpg");o(t)}),[o]);return n.ZP.createElement(c.Z,{isOpen:Boolean(t),onClose:g,title:"Drag to reposition",className:"CropModal",hasCloseButton:!0},p?n.ZP.createElement("div",{id:"avatar-crop"}):n.ZP.createElement(d.Z,null),n.ZP.createElement(i.Z,{className:"confirm-button",round:!0,color:"primary",onClick:E,ariaLabel:P("CropImage")},n.ZP.createElement("i",{className:"icon-check"})))})),p=(0,n.X$)((e=>{let{title:t="Change your profile picture",disabled:a,currentAvatarBlobUrl:r,onChange:l}=e;const[s,i]=(0,n.eJ)(),[c,d]=(0,n.eJ)(r);(0,n.d4)((()=>{d(r)}),[r]);const m=(0,n.I4)((e=>{i(void 0),l(e),c&&URL.revokeObjectURL(c),d(URL.createObjectURL(e))}),[c,l]),u=(0,n.I4)((()=>{i(void 0)}),[]),h=(0,o.Z)(c&&"filled",a&&"disabled");return n.ZP.createElement("div",{className:"AvatarEditable"},n.ZP.createElement("label",{className:h,role:"button",tabIndex:0,title:t},n.ZP.createElement("input",{type:"file",onChange:function(e){const t=e.target;t&&t.files&&t.files[0]&&(i(t.files[0]),t.value="")},accept:"image/png, image/jpeg"}),n.ZP.createElement("i",{className:"icon-camera-add"}),c&&n.ZP.createElement("img",{src:c,alt:"Avatar"})),n.ZP.createElement(g,{file:s,onClose:u,onChange:m}))}))},3103:(e,t,a)=>{a.d(t,{Z:()=>h});var n=a(4050),o=a(517),r=a(6752),l=a(8674),s=a(1212),i=a(274),c=a(9107),d=a(6590),m=a(231),u=a(2898);const h=e=>{let{dialogRef:t,title:a,className:h,isOpen:Z,header:g,hasCloseButton:p,noBackdrop:v,children:P,onClose:E,onCloseAnimationEnd:f,onEnter:b,shouldSkipHistoryAnimations:N}=e;const{shouldRender:y,transitionClassNames:C}=(0,s.Z)(Z,f,N,void 0,N),w=(0,n.sO)(null);(0,n.d4)((()=>Z?(0,o.Z)({onEsc:E,onEnter:b}):void 0),[Z,E,b]),(0,n.d4)((()=>Z&&w.current?function(e){function t(t){if("Tab"!==t.key)return;t.preventDefault(),t.stopPropagation();const a=Array.from(e.querySelectorAll('button, [href], input, select, textarea, [tabindex]:not([tabindex="-1"])'));if(!a.length)return;const n=a.findIndex((e=>e.isSameNode(document.activeElement)));let o=0;n>=0&&(o=t.shiftKey?n>0?n-1:a.length-1:n{document.removeEventListener("keydown",t,!1)}}(w.current):void 0),[Z]);const{forceClose:k}=(0,d.ZP)(Z,E);(0,n.d4)((()=>()=>{Z&&k()}),[]),(0,i.Z)((e=>{let[t]=e;return document.body.classList.toggle("has-open-dialog",Z),(Z||!Z&&void 0!==t)&&(0,l.YW)(200),()=>{document.body.classList.remove("has-open-dialog")}}),[Z]);const L=(0,c.Z)();if(!y)return;const I=(0,r.Z)("Modal",h,C,v&&"transparent-backdrop");return n.ZP.createElement(u.Z,null,n.ZP.createElement("div",{ref:w,className:I,tabIndex:-1,role:"dialog"},n.ZP.createElement("div",{className:"modal-container"},n.ZP.createElement("div",{className:"modal-backdrop",onClick:E}),n.ZP.createElement("div",{className:"modal-dialog",ref:t},g||(a?n.ZP.createElement("div",{className:"modal-header"},p&&n.ZP.createElement(m.Z,{round:!0,color:"translucent",size:"smaller",ariaLabel:L("Close"),onClick:E},n.ZP.createElement("i",{className:"icon-close"})),n.ZP.createElement("div",{className:"modal-title"},a)):void 0),n.ZP.createElement("div",{className:"modal-content custom-scroll"},P)))))}},2898:(e,t,a)=>{a.d(t,{Z:()=>r});var n=a(4050),o=a(2916);const r=e=>{let{containerId:t,className:a,children:r}=e;const l=(0,n.sO)();return l.current||(l.current=document.createElement("div")),(0,n.bt)((()=>{const e=document.querySelector(t||"#portals");if(!e)return;const n=l.current;return a&&n.classList.add(a),e.appendChild(n),()=>{o.Z.render(void 0,n),e.removeChild(n)}}),[a,t]),o.Z.render(r,l.current)}}}]); -//# sourceMappingURL=133.8c0baeff1e13dd2e52f0.js.map \ No newline at end of file +//# sourceMappingURL=133.4a391d2071acfc4ca6b0.js.map \ No newline at end of file diff --git a/dist/133.8c0baeff1e13dd2e52f0.js.map b/dist/133.4a391d2071acfc4ca6b0.js.map similarity index 99% rename from dist/133.8c0baeff1e13dd2e52f0.js.map rename to dist/133.4a391d2071acfc4ca6b0.js.map index 5d42f2689..04893ff2b 100644 --- a/dist/133.8c0baeff1e13dd2e52f0.js.map +++ b/dist/133.4a391d2071acfc4ca6b0.js.map @@ -1 +1 @@ -{"version":3,"file":"133.8c0baeff1e13dd2e52f0.js","mappings":"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","sources":["webpack://telegram-t/./src/components/common/TrackingMonkey.tsx","webpack://telegram-t/./src/components/auth/AuthCode.tsx","webpack://telegram-t/./src/components/auth/AuthPassword.tsx","webpack://telegram-t/./src/components/auth/AuthRegister.tsx","webpack://telegram-t/./src/components/common/PasswordForm.tsx","webpack://telegram-t/./src/components/common/PasswordMonkey.tsx","webpack://telegram-t/./src/components/ui/CropModal.tsx","webpack://telegram-t/./src/components/ui/AvatarEditable.tsx","webpack://telegram-t/./src/components/ui/Modal.tsx","webpack://telegram-t/./src/util/trapFocus.ts","webpack://telegram-t/./src/components/ui/Portal.ts"],"sourcesContent":["import React, {\n FC, useState, useEffect, useCallback, memo,\n} from '../../lib/teact/teact';\n\nimport { STICKER_SIZE_AUTH, STICKER_SIZE_AUTH_MOBILE, STICKER_SIZE_TWO_FA } from '../../config';\nimport { IS_SINGLE_COLUMN_LAYOUT } from '../../util/environment';\nimport getAnimationData from './helpers/animatedAssets';\n\nimport AnimatedSticker from './AnimatedSticker';\n\nimport './PasswordMonkey.scss';\n\ntype OwnProps = {\n code: string;\n codeLength: number;\n trackingDirection: number;\n isTracking: boolean;\n isBig?: boolean;\n};\n\nconst TRACKING_START_FRAME = 15;\nconst TRACKING_END_FRAME = 180;\nconst STICKER_SIZE = IS_SINGLE_COLUMN_LAYOUT ? STICKER_SIZE_AUTH_MOBILE : STICKER_SIZE_AUTH;\n\nconst TrackingMonkey: FC = ({\n code,\n codeLength,\n trackingDirection,\n isTracking,\n isBig,\n}) => {\n const [idleMonkeyData, setIdleMonkeyData] = useState();\n const [trackingMonkeyData, setTrackingMonkeyData] = useState();\n const [isFirstMonkeyLoaded, setIsFirstMonkeyLoaded] = useState(false);\n const TRACKING_FRAMES_PER_SYMBOL = (TRACKING_END_FRAME - TRACKING_START_FRAME) / codeLength;\n\n useEffect(() => {\n if (!idleMonkeyData) {\n getAnimationData('MonkeyIdle').then(setIdleMonkeyData);\n }\n }, [idleMonkeyData]);\n\n useEffect(() => {\n if (!trackingMonkeyData) {\n getAnimationData('MonkeyTracking').then(setTrackingMonkeyData);\n }\n }, [trackingMonkeyData]);\n\n const handleFirstMonkeyLoad = useCallback(() => setIsFirstMonkeyLoaded(true), []);\n\n function getTrackingFrames(): [number, number] {\n const startFrame = (code && code.length > 1) || trackingDirection < 0\n ? TRACKING_START_FRAME + TRACKING_FRAMES_PER_SYMBOL * (code.length - 1)\n : 0;\n const endFrame = code.length === codeLength\n ? TRACKING_END_FRAME\n : TRACKING_START_FRAME + TRACKING_FRAMES_PER_SYMBOL * code.length;\n\n if (trackingDirection < 1) {\n return [\n endFrame,\n startFrame,\n ];\n }\n\n return [\n startFrame,\n endFrame,\n ];\n }\n\n return (\n
\n {!isFirstMonkeyLoaded && (\n
\n )}\n {idleMonkeyData && (\n \n )}\n {trackingMonkeyData && (\n \n )}\n
\n );\n};\n\nexport default memo(TrackingMonkey);\n","import { FormEvent } from 'react';\nimport React, {\n FC, useState, useEffect, useCallback, memo, useRef,\n} from '../../lib/teact/teact';\nimport { getActions, withGlobal } from '../../global';\nimport { GlobalState } from '../../global/types';\n\nimport { IS_TOUCH_ENV } from '../../util/environment';\nimport { pick } from '../../util/iteratees';\nimport renderText from '../common/helpers/renderText';\nimport useHistoryBack from '../../hooks/useHistoryBack';\nimport useLang from '../../hooks/useLang';\n\nimport InputText from '../ui/InputText';\nimport Loading from '../ui/Loading';\nimport TrackingMonkey from '../common/TrackingMonkey';\n\ntype StateProps = Pick;\n\nconst CODE_LENGTH = 5;\n\nconst AuthCode: FC = ({\n authPhoneNumber,\n authIsCodeViaApp,\n authIsLoading,\n authError,\n}) => {\n const {\n setAuthCode,\n returnToAuthPhoneNumber,\n clearAuthError,\n } = getActions();\n\n const lang = useLang();\n // eslint-disable-next-line no-null/no-null\n const inputRef = useRef(null);\n\n const [code, setCode] = useState('');\n const [isTracking, setIsTracking] = useState(false);\n const [trackingDirection, setTrackingDirection] = useState(1);\n\n useEffect(() => {\n if (!IS_TOUCH_ENV) {\n inputRef.current!.focus();\n }\n }, []);\n\n useHistoryBack(true, returnToAuthPhoneNumber);\n\n const onCodeChange = useCallback((e: FormEvent) => {\n if (authError) {\n clearAuthError();\n }\n\n const { currentTarget: target } = e;\n target.value = target.value.replace(/[^\\d]+/, '').substr(0, CODE_LENGTH);\n\n if (target.value === code) {\n return;\n }\n\n setCode(target.value);\n\n if (!isTracking) {\n setIsTracking(true);\n } else if (!target.value.length) {\n setIsTracking(false);\n }\n\n if (code && code.length > target.value.length) {\n setTrackingDirection(-1);\n } else {\n setTrackingDirection(1);\n }\n\n if (target.value.length === CODE_LENGTH) {\n setAuthCode({ code: target.value });\n }\n }, [authError, clearAuthError, code, isTracking, setAuthCode]);\n\n return (\n
\n
\n \n

\n {authPhoneNumber}\n \n \n

\n \n

\n {renderText(lang(authIsCodeViaApp ? 'SentAppCode' : 'Login.JustSentSms'), ['simple_markdown'])}\n

\n \n {authIsLoading && }\n
\n
\n );\n};\n\nexport default memo(withGlobal(\n (global): StateProps => pick(global, ['authPhoneNumber', 'authIsCodeViaApp', 'authIsLoading', 'authError']),\n)(AuthCode));\n","import React, {\n FC, memo, useCallback, useState,\n} from '../../lib/teact/teact';\nimport { getActions, withGlobal } from '../../global';\n\nimport { GlobalState } from '../../global/types';\n\nimport { pick } from '../../util/iteratees';\nimport useLang from '../../hooks/useLang';\n\nimport MonkeyPassword from '../common/PasswordMonkey';\nimport PasswordForm from '../common/PasswordForm';\n\ntype StateProps = Pick;\n\nconst AuthPassword: FC = ({\n authIsLoading, authError, authHint,\n}) => {\n const { setAuthPassword, clearAuthError } = getActions();\n\n const lang = useLang();\n const [showPassword, setShowPassword] = useState(false);\n\n const handleChangePasswordVisibility = useCallback((isVisible) => {\n setShowPassword(isVisible);\n }, []);\n\n const handleSubmit = useCallback((password: string) => {\n setAuthPassword({ password });\n }, [setAuthPassword]);\n\n return (\n
\n
\n \n

{lang('Login.Header.Password')}

\n

{lang('Login.EnterPasswordDescription')}

\n \n
\n
\n );\n};\n\nexport default memo(withGlobal(\n (global): StateProps => pick(global, ['authIsLoading', 'authError', 'authHint']),\n)(AuthPassword));\n","import { ChangeEvent } from 'react';\nimport React, {\n FC, useState, memo, useCallback,\n} from '../../lib/teact/teact';\nimport { getActions, withGlobal } from '../../global';\n\nimport { GlobalState } from '../../global/types';\n\nimport { pick } from '../../util/iteratees';\nimport useLang from '../../hooks/useLang';\n\nimport Button from '../ui/Button';\nimport InputText from '../ui/InputText';\nimport AvatarEditable from '../ui/AvatarEditable';\n\ntype StateProps = Pick;\n\nconst AuthRegister: FC = ({\n authIsLoading, authError,\n}) => {\n const { signUp, clearAuthError, uploadProfilePhoto } = getActions();\n\n const lang = useLang();\n const [isButtonShown, setIsButtonShown] = useState(false);\n const [croppedFile, setCroppedFile] = useState();\n const [firstName, setFirstName] = useState('');\n const [lastName, setLastName] = useState('');\n\n const handleFirstNameChange = useCallback((event: ChangeEvent) => {\n if (authError) {\n clearAuthError();\n }\n\n const { target } = event;\n\n setFirstName(target.value);\n setIsButtonShown(target.value.length > 0);\n }, [authError, clearAuthError]);\n\n const handleLastNameChange = useCallback((event: ChangeEvent) => {\n const { target } = event;\n\n setLastName(target.value);\n }, []);\n\n function handleSubmit(event: React.FormEvent) {\n event.preventDefault();\n\n signUp({ firstName, lastName });\n\n if (croppedFile) {\n uploadProfilePhoto({ file: croppedFile });\n }\n }\n\n return (\n
\n
\n
\n \n

{lang('YourName')}

\n

{lang('Login.Register.Desc')}

\n \n \n {isButtonShown && (\n \n )}\n \n
\n
\n );\n};\n\nexport default memo(withGlobal(\n (global): StateProps => pick(global, ['authIsLoading', 'authError']),\n)(AuthRegister));\n","import { ChangeEvent } from 'react';\nimport React, {\n FC, memo, useEffect, useRef, useState,\n} from '../../lib/teact/teact';\n\nimport { MIN_PASSWORD_LENGTH } from '../../config';\nimport { IS_TOUCH_ENV, IS_SINGLE_COLUMN_LAYOUT } from '../../util/environment';\nimport buildClassName from '../../util/buildClassName';\nimport useLang from '../../hooks/useLang';\n\nimport Button from '../ui/Button';\n\ntype OwnProps = {\n submitLabel?: string;\n error?: string;\n hint?: string;\n placeholder?: string;\n isLoading?: boolean;\n isPasswordVisible?: boolean;\n clearError: NoneToVoidFunction;\n onChangePasswordVisibility: (state: boolean) => void;\n onInputChange?: (password: string) => void;\n onSubmit: (password: string) => void;\n};\n\nconst FOCUS_DELAY_TIMEOUT_MS = IS_SINGLE_COLUMN_LAYOUT ? 550 : 400;\n\nconst PasswordForm: FC = ({\n isLoading = false,\n isPasswordVisible,\n error,\n hint,\n placeholder = 'Password',\n submitLabel = 'Next',\n clearError,\n onChangePasswordVisibility,\n onInputChange,\n onSubmit,\n}) => {\n // eslint-disable-next-line no-null/no-null\n const inputRef = useRef(null);\n const lang = useLang();\n\n const [password, setPassword] = useState('');\n const [canSubmit, setCanSubmit] = useState(false);\n\n useEffect(() => {\n if (!IS_TOUCH_ENV) {\n setTimeout(() => {\n inputRef.current!.focus();\n }, FOCUS_DELAY_TIMEOUT_MS);\n }\n }, []);\n\n useEffect(() => {\n if (error) {\n requestAnimationFrame(() => {\n inputRef.current!.focus();\n inputRef.current!.select();\n });\n }\n }, [error]);\n\n function onPasswordChange(e: ChangeEvent) {\n if (error) {\n clearError();\n }\n\n const { target } = e;\n setPassword(target.value);\n setCanSubmit(target.value.length >= MIN_PASSWORD_LENGTH);\n if (onInputChange) {\n onInputChange(target.value);\n }\n }\n\n function togglePasswordVisibility() {\n onChangePasswordVisibility(!isPasswordVisible);\n }\n\n function handleSubmit(event: React.FormEvent) {\n event.preventDefault();\n\n if (isLoading) {\n return;\n }\n\n if (canSubmit) {\n onSubmit(password);\n }\n }\n\n return (\n
\n \n \n \n \n \n
\n
\n {canSubmit && (\n \n )}\n \n );\n};\n\nexport default memo(PasswordForm);\n","import React, {\n FC, useState, useEffect, useCallback, memo,\n} from '../../lib/teact/teact';\n\nimport { STICKER_SIZE_AUTH, STICKER_SIZE_AUTH_MOBILE, STICKER_SIZE_TWO_FA } from '../../config';\nimport { IS_SINGLE_COLUMN_LAYOUT } from '../../util/environment';\nimport getAnimationData from './helpers/animatedAssets';\n\nimport AnimatedSticker from './AnimatedSticker';\n\nimport './PasswordMonkey.scss';\n\ntype OwnProps = {\n isPasswordVisible: boolean;\n isBig?: boolean;\n};\n\nconst PEEK_MONKEY_SHOW_DELAY = 2000;\nconst SEGMENT_COVER_EYES: [number, number] = [0, 50];\nconst SEGMENT_UNCOVER_EYE: [number, number] = [0, 20];\nconst SEGMENT_COVER_EYE: [number, number] = [20, 0];\nconst STICKER_SIZE = IS_SINGLE_COLUMN_LAYOUT ? STICKER_SIZE_AUTH_MOBILE : STICKER_SIZE_AUTH;\n\nconst PasswordMonkey: FC = ({ isPasswordVisible, isBig }) => {\n const [closeMonkeyData, setCloseMonkeyData] = useState();\n const [peekMonkeyData, setPeekMonkeyData] = useState();\n const [isFirstMonkeyLoaded, setIsFirstMonkeyLoaded] = useState(false);\n const [isPeekShown, setIsPeekShown] = useState(false);\n\n useEffect(() => {\n if (!closeMonkeyData) {\n getAnimationData('MonkeyClose').then(setCloseMonkeyData);\n } else {\n setTimeout(() => setIsPeekShown(true), PEEK_MONKEY_SHOW_DELAY);\n }\n }, [closeMonkeyData]);\n\n useEffect(() => {\n if (!peekMonkeyData) {\n getAnimationData('MonkeyPeek').then(setPeekMonkeyData);\n }\n }, [peekMonkeyData]);\n\n const handleFirstMonkeyLoad = useCallback(() => setIsFirstMonkeyLoaded(true), []);\n\n return (\n
\n {!isFirstMonkeyLoaded && (\n
\n )}\n {closeMonkeyData && (\n \n )}\n {peekMonkeyData && (\n \n )}\n
\n );\n};\n\nexport default memo(PasswordMonkey);\n","import React, {\n FC, useEffect, useState, memo, useCallback,\n} from '../../lib/teact/teact';\n\nimport { DEBUG } from '../../config';\nimport { blobToFile, blobToDataUri } from '../../util/files';\nimport useLang from '../../hooks/useLang';\n\nimport Button from './Button';\nimport Modal from './Modal';\nimport Loading from './Loading';\n\nimport './CropModal.scss';\n\n// Change to 'base64' to get base64-encoded string\nconst cropperResultOptions: Croppie.ResultOptions & { type: 'blob' } = {\n type: 'blob',\n quality: 1,\n format: 'jpeg',\n circle: false,\n size: { width: 1024, height: 1024 },\n};\n\ntype ICroppie = typeof import('croppie');\nlet Croppie: ICroppie;\nlet croppiePromise: Promise<{ default: ICroppie }>;\n\nasync function ensureCroppie() {\n if (!croppiePromise) {\n croppiePromise = import('../../lib/croppie') as unknown as Promise<{ default: ICroppie }>;\n Croppie = (await croppiePromise).default;\n }\n\n return croppiePromise;\n}\n\nlet cropper: Croppie;\n\nasync function initCropper(imgFile: File) {\n try {\n const cropContainer = document.getElementById('avatar-crop');\n if (!cropContainer) {\n return;\n }\n\n const { offsetWidth, offsetHeight } = cropContainer;\n\n cropper = new Croppie(cropContainer, {\n enableZoom: true,\n boundary: {\n width: offsetWidth,\n height: offsetHeight,\n },\n viewport: {\n width: offsetWidth - 16,\n height: offsetHeight - 16,\n type: 'circle',\n },\n });\n\n const dataUri = await blobToDataUri(imgFile);\n await cropper.bind({ url: dataUri });\n } catch (err) {\n if (DEBUG) {\n // eslint-disable-next-line no-console\n console.error(err);\n }\n }\n}\n\ntype OwnProps = {\n file?: File;\n onChange: (file: File) => void;\n onClose: () => void;\n};\n\nconst CropModal: FC = ({ file, onChange, onClose }: OwnProps) => {\n const [isCroppieReady, setIsCroppieReady] = useState(false);\n\n useEffect(() => {\n if (!file) {\n return;\n }\n\n if (!isCroppieReady) {\n ensureCroppie().then(() => setIsCroppieReady(true));\n\n return;\n }\n\n initCropper(file);\n }, [file, isCroppieReady]);\n\n const lang = useLang();\n\n const handleCropClick = useCallback(async () => {\n if (!cropper) {\n return;\n }\n\n const result: Blob | string = await cropper.result(cropperResultOptions);\n const croppedImg = typeof result === 'string' ? result : blobToFile(result, 'avatar.jpg');\n\n onChange(croppedImg);\n }, [onChange]);\n\n return (\n \n {isCroppieReady ? (\n
\n ) : (\n \n )}\n \n \n \n \n );\n};\n\nexport default memo(CropModal);\n","import { ChangeEvent } from 'react';\nimport React, {\n FC, useState, useEffect, memo, useCallback,\n} from '../../lib/teact/teact';\n\nimport buildClassName from '../../util/buildClassName';\n\nimport CropModal from './CropModal';\n\nimport './AvatarEditable.scss';\n\ninterface OwnProps {\n title?: string;\n disabled?: boolean;\n currentAvatarBlobUrl?: string;\n onChange: (file: File) => void;\n}\n\nconst AvatarEditable: FC = ({\n title = 'Change your profile picture',\n disabled,\n currentAvatarBlobUrl,\n onChange,\n}) => {\n const [selectedFile, setSelectedFile] = useState();\n const [croppedBlobUrl, setCroppedBlobUrl] = useState(currentAvatarBlobUrl);\n\n useEffect(() => {\n setCroppedBlobUrl(currentAvatarBlobUrl);\n }, [currentAvatarBlobUrl]);\n\n function handleSelectFile(event: ChangeEvent) {\n const target = event.target as HTMLInputElement;\n\n if (!target || !target.files || !target.files[0]) {\n return;\n }\n\n setSelectedFile(target.files[0]);\n target.value = '';\n }\n\n const handleAvatarCrop = useCallback((croppedImg: File) => {\n setSelectedFile(undefined);\n onChange(croppedImg);\n\n if (croppedBlobUrl) {\n URL.revokeObjectURL(croppedBlobUrl);\n }\n setCroppedBlobUrl(URL.createObjectURL(croppedImg));\n }, [croppedBlobUrl, onChange]);\n\n const handleModalClose = useCallback(() => {\n setSelectedFile(undefined);\n }, []);\n\n const labelClassName = buildClassName(\n croppedBlobUrl && 'filled',\n disabled && 'disabled',\n );\n\n return (\n
\n \n \n \n {croppedBlobUrl && \"Avatar\"}\n \n \n
\n );\n};\n\nexport default memo(AvatarEditable);\n","import { RefObject } from 'react';\nimport React, {\n FC, useEffect, useRef,\n} from '../../lib/teact/teact';\n\nimport { TextPart } from '../common/helpers/renderMessageText';\n\nimport captureKeyboardListeners from '../../util/captureKeyboardListeners';\nimport trapFocus from '../../util/trapFocus';\nimport buildClassName from '../../util/buildClassName';\nimport { dispatchHeavyAnimationEvent } from '../../hooks/useHeavyAnimationCheck';\nimport useShowTransition from '../../hooks/useShowTransition';\nimport useEffectWithPrevDeps from '../../hooks/useEffectWithPrevDeps';\nimport useLang from '../../hooks/useLang';\nimport useHistoryBack from '../../hooks/useHistoryBack';\n\nimport Button from './Button';\nimport Portal from './Portal';\n\nimport './Modal.scss';\n\nconst ANIMATION_DURATION = 200;\n\ntype OwnProps = {\n title?: string | TextPart[];\n className?: string;\n isOpen?: boolean;\n header?: any;\n hasCloseButton?: boolean;\n noBackdrop?: boolean;\n children: React.ReactNode;\n onClose: () => void;\n onCloseAnimationEnd?: () => void;\n onEnter?: () => void;\n dialogRef?: RefObject;\n};\n\ntype StateProps = {\n shouldSkipHistoryAnimations?: boolean;\n};\n\nconst Modal: FC = ({\n dialogRef,\n title,\n className,\n isOpen,\n header,\n hasCloseButton,\n noBackdrop,\n children,\n onClose,\n onCloseAnimationEnd,\n onEnter,\n shouldSkipHistoryAnimations,\n}) => {\n const {\n shouldRender,\n transitionClassNames,\n } = useShowTransition(\n isOpen, onCloseAnimationEnd, shouldSkipHistoryAnimations, undefined, shouldSkipHistoryAnimations,\n );\n // eslint-disable-next-line no-null/no-null\n const modalRef = useRef(null);\n\n useEffect(() => (isOpen\n ? captureKeyboardListeners({ onEsc: onClose, onEnter })\n : undefined), [isOpen, onClose, onEnter]);\n useEffect(() => (isOpen && modalRef.current ? trapFocus(modalRef.current) : undefined), [isOpen]);\n\n const { forceClose } = useHistoryBack(isOpen, onClose);\n\n // For modals that are closed by unmounting without changing `isOpen` to `false`\n useEffect(() => {\n return () => {\n if (isOpen) {\n forceClose();\n }\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n useEffectWithPrevDeps(([prevIsOpen]) => {\n document.body.classList.toggle('has-open-dialog', isOpen);\n if (isOpen || (!isOpen && prevIsOpen !== undefined)) {\n dispatchHeavyAnimationEvent(ANIMATION_DURATION);\n }\n\n return () => {\n document.body.classList.remove('has-open-dialog');\n };\n }, [isOpen]);\n\n const lang = useLang();\n\n if (!shouldRender) {\n return undefined;\n }\n\n function renderHeader() {\n if (header) {\n return header;\n }\n\n if (!title) {\n return undefined;\n }\n\n return (\n
\n {hasCloseButton && (\n \n \n \n )}\n
{title}
\n
\n );\n }\n\n const fullClassName = buildClassName(\n 'Modal',\n className,\n transitionClassNames,\n noBackdrop && 'transparent-backdrop',\n );\n\n return (\n \n \n
\n
\n
\n {renderHeader()}\n
\n {children}\n
\n
\n
\n
\n
\n );\n};\n\nexport default Modal;\n","export default function trapFocus(element: HTMLElement) {\n function handleKeyDown(e: KeyboardEvent) {\n if (e.key !== 'Tab') {\n return;\n }\n\n e.preventDefault();\n e.stopPropagation();\n\n const focusableElements = Array.from(\n element.querySelectorAll('button, [href], input, select, textarea, [tabindex]:not([tabindex=\"-1\"])'),\n ) as HTMLElement[];\n if (!focusableElements.length) {\n return;\n }\n\n const currentFocusedIndex = focusableElements.findIndex((em) => em.isSameNode(document.activeElement));\n let newFocusedIndex = 0;\n if (currentFocusedIndex >= 0) {\n if (e.shiftKey) {\n newFocusedIndex = currentFocusedIndex > 0\n ? currentFocusedIndex - 1\n : focusableElements.length - 1;\n } else {\n newFocusedIndex = currentFocusedIndex < focusableElements.length - 1\n ? currentFocusedIndex + 1\n : 0;\n }\n }\n\n focusableElements[newFocusedIndex].focus();\n }\n\n document.addEventListener('keydown', handleKeyDown, false);\n\n return () => {\n document.removeEventListener('keydown', handleKeyDown, false);\n };\n}\n","import {\n FC, useRef, useLayoutEffect, VirtualElement,\n} from '../../lib/teact/teact';\nimport TeactDOM from '../../lib/teact/teact-dom';\n\ntype OwnProps = {\n containerId?: string;\n className?: string;\n children: React.ReactNode;\n};\n\nconst Portal: FC = ({ containerId, className, children }) => {\n const elementRef = useRef();\n if (!elementRef.current) {\n elementRef.current = document.createElement('div');\n }\n\n useLayoutEffect(() => {\n const container = document.querySelector(containerId || '#portals');\n if (!container) {\n return undefined;\n }\n\n const element = elementRef.current!;\n if (className) {\n element.classList.add(className);\n }\n\n container.appendChild(element);\n\n return () => {\n TeactDOM.render(undefined, element);\n container.removeChild(element);\n };\n }, [className, containerId]);\n\n return TeactDOM.render(children as VirtualElement, elementRef.current);\n};\n\nexport default Portal;\n"],"names":["STICKER_SIZE","IS_SINGLE_COLUMN_LAYOUT","STICKER_SIZE_AUTH_MOBILE","STICKER_SIZE_AUTH","memo","code","codeLength","trackingDirection","isTracking","isBig","idleMonkeyData","setIdleMonkeyData","useState","trackingMonkeyData","setTrackingMonkeyData","isFirstMonkeyLoaded","setIsFirstMonkeyLoaded","TRACKING_FRAMES_PER_SYMBOL","useEffect","getAnimationData","then","handleFirstMonkeyLoad","useCallback","id","className","AnimatedSticker","size","STICKER_SIZE_TWO_FA","undefined","animationData","play","onLoad","playSegment","startFrame","length","endFrame","getTrackingFrames","speed","noLoop","withGlobal","global","pick","authPhoneNumber","authIsCodeViaApp","authIsLoading","authError","setAuthCode","returnToAuthPhoneNumber","clearAuthError","getActions","lang","useLang","inputRef","useRef","setCode","setIsTracking","setTrackingDirection","IS_TOUCH_ENV","current","focus","useHistoryBack","onCodeChange","e","currentTarget","target","value","replace","substr","onClick","role","tabIndex","title","renderText","InputText","ref","label","onInput","error","autoComplete","inputMode","Loading","authHint","setAuthPassword","showPassword","setShowPassword","handleChangePasswordVisibility","isVisible","handleSubmit","password","isPasswordVisible","PasswordForm","clearError","hint","isLoading","onChangePasswordVisibility","onSubmit","signUp","uploadProfilePhoto","isButtonShown","setIsButtonShown","croppedFile","setCroppedFile","firstName","setFirstName","lastName","setLastName","handleFirstNameChange","event","handleLastNameChange","action","method","preventDefault","file","AvatarEditable","onChange","Button","type","ripple","FOCUS_DELAY_TIMEOUT_MS","placeholder","submitLabel","onInputChange","setPassword","canSubmit","setCanSubmit","setTimeout","requestAnimationFrame","select","buildClassName","dir","isRtl","MIN_PASSWORD_LENGTH","SEGMENT_COVER_EYES","SEGMENT_UNCOVER_EYE","SEGMENT_COVER_EYE","closeMonkeyData","setCloseMonkeyData","peekMonkeyData","setPeekMonkeyData","isPeekShown","setIsPeekShown","cropperResultOptions","quality","format","circle","width","height","Croppie","croppiePromise","cropper","onClose","isCroppieReady","setIsCroppieReady","async","imgFile","cropContainer","document","getElementById","offsetWidth","offsetHeight","enableZoom","boundary","viewport","dataUri","blobToDataUri","bind","url","err","DEBUG","console","initCropper","default","ensureCroppie","handleCropClick","result","croppedImg","blobToFile","Modal","isOpen","Boolean","hasCloseButton","round","color","ariaLabel","disabled","currentAvatarBlobUrl","selectedFile","setSelectedFile","croppedBlobUrl","setCroppedBlobUrl","handleAvatarCrop","URL","revokeObjectURL","createObjectURL","handleModalClose","labelClassName","files","accept","src","alt","dialogRef","header","noBackdrop","children","onCloseAnimationEnd","onEnter","shouldSkipHistoryAnimations","shouldRender","transitionClassNames","useShowTransition","modalRef","captureKeyboardListeners","onEsc","element","handleKeyDown","key","stopPropagation","focusableElements","Array","from","querySelectorAll","currentFocusedIndex","findIndex","em","isSameNode","activeElement","newFocusedIndex","shiftKey","addEventListener","removeEventListener","trapFocus","forceClose","useEffectWithPrevDeps","prevIsOpen","body","classList","toggle","dispatchHeavyAnimationEvent","remove","fullClassName","Portal","containerId","elementRef","createElement","useLayoutEffect","container","querySelector","add","appendChild","TeactDOM","removeChild"],"sourceRoot":""} \ No newline at end of file +{"version":3,"file":"133.4a391d2071acfc4ca6b0.js","mappings":"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","sources":["webpack://telegram-t/./src/components/common/TrackingMonkey.tsx","webpack://telegram-t/./src/components/auth/AuthCode.tsx","webpack://telegram-t/./src/components/auth/AuthPassword.tsx","webpack://telegram-t/./src/components/auth/AuthRegister.tsx","webpack://telegram-t/./src/components/common/PasswordForm.tsx","webpack://telegram-t/./src/components/common/PasswordMonkey.tsx","webpack://telegram-t/./src/components/ui/CropModal.tsx","webpack://telegram-t/./src/components/ui/AvatarEditable.tsx","webpack://telegram-t/./src/components/ui/Modal.tsx","webpack://telegram-t/./src/util/trapFocus.ts","webpack://telegram-t/./src/components/ui/Portal.ts"],"sourcesContent":["import React, {\n FC, useState, useEffect, useCallback, memo,\n} from '../../lib/teact/teact';\n\nimport { STICKER_SIZE_AUTH, STICKER_SIZE_AUTH_MOBILE, STICKER_SIZE_TWO_FA } from '../../config';\nimport { IS_SINGLE_COLUMN_LAYOUT } from '../../util/environment';\nimport getAnimationData from './helpers/animatedAssets';\n\nimport AnimatedSticker from './AnimatedSticker';\n\nimport './PasswordMonkey.scss';\n\ntype OwnProps = {\n code: string;\n codeLength: number;\n trackingDirection: number;\n isTracking: boolean;\n isBig?: boolean;\n};\n\nconst TRACKING_START_FRAME = 15;\nconst TRACKING_END_FRAME = 180;\nconst STICKER_SIZE = IS_SINGLE_COLUMN_LAYOUT ? STICKER_SIZE_AUTH_MOBILE : STICKER_SIZE_AUTH;\n\nconst TrackingMonkey: FC = ({\n code,\n codeLength,\n trackingDirection,\n isTracking,\n isBig,\n}) => {\n const [idleMonkeyData, setIdleMonkeyData] = useState();\n const [trackingMonkeyData, setTrackingMonkeyData] = useState();\n const [isFirstMonkeyLoaded, setIsFirstMonkeyLoaded] = useState(false);\n const TRACKING_FRAMES_PER_SYMBOL = (TRACKING_END_FRAME - TRACKING_START_FRAME) / codeLength;\n\n useEffect(() => {\n if (!idleMonkeyData) {\n getAnimationData('MonkeyIdle').then(setIdleMonkeyData);\n }\n }, [idleMonkeyData]);\n\n useEffect(() => {\n if (!trackingMonkeyData) {\n getAnimationData('MonkeyTracking').then(setTrackingMonkeyData);\n }\n }, [trackingMonkeyData]);\n\n const handleFirstMonkeyLoad = useCallback(() => setIsFirstMonkeyLoaded(true), []);\n\n function getTrackingFrames(): [number, number] {\n const startFrame = (code && code.length > 1) || trackingDirection < 0\n ? TRACKING_START_FRAME + TRACKING_FRAMES_PER_SYMBOL * (code.length - 1)\n : 0;\n const endFrame = code.length === codeLength\n ? TRACKING_END_FRAME\n : TRACKING_START_FRAME + TRACKING_FRAMES_PER_SYMBOL * code.length;\n\n if (trackingDirection < 1) {\n return [\n endFrame,\n startFrame,\n ];\n }\n\n return [\n startFrame,\n endFrame,\n ];\n }\n\n return (\n
\n {!isFirstMonkeyLoaded && (\n
\n )}\n {idleMonkeyData && (\n \n )}\n {trackingMonkeyData && (\n \n )}\n
\n );\n};\n\nexport default memo(TrackingMonkey);\n","import { FormEvent } from 'react';\nimport React, {\n FC, useState, useEffect, useCallback, memo, useRef,\n} from '../../lib/teact/teact';\nimport { getActions, withGlobal } from '../../global';\nimport { GlobalState } from '../../global/types';\n\nimport { IS_TOUCH_ENV } from '../../util/environment';\nimport { pick } from '../../util/iteratees';\nimport renderText from '../common/helpers/renderText';\nimport useHistoryBack from '../../hooks/useHistoryBack';\nimport useLang from '../../hooks/useLang';\n\nimport InputText from '../ui/InputText';\nimport Loading from '../ui/Loading';\nimport TrackingMonkey from '../common/TrackingMonkey';\n\ntype StateProps = Pick;\n\nconst CODE_LENGTH = 5;\n\nconst AuthCode: FC = ({\n authPhoneNumber,\n authIsCodeViaApp,\n authIsLoading,\n authError,\n}) => {\n const {\n setAuthCode,\n returnToAuthPhoneNumber,\n clearAuthError,\n } = getActions();\n\n const lang = useLang();\n // eslint-disable-next-line no-null/no-null\n const inputRef = useRef(null);\n\n const [code, setCode] = useState('');\n const [isTracking, setIsTracking] = useState(false);\n const [trackingDirection, setTrackingDirection] = useState(1);\n\n useEffect(() => {\n if (!IS_TOUCH_ENV) {\n inputRef.current!.focus();\n }\n }, []);\n\n useHistoryBack(true, returnToAuthPhoneNumber);\n\n const onCodeChange = useCallback((e: FormEvent) => {\n if (authError) {\n clearAuthError();\n }\n\n const { currentTarget: target } = e;\n target.value = target.value.replace(/[^\\d]+/, '').substr(0, CODE_LENGTH);\n\n if (target.value === code) {\n return;\n }\n\n setCode(target.value);\n\n if (!isTracking) {\n setIsTracking(true);\n } else if (!target.value.length) {\n setIsTracking(false);\n }\n\n if (code && code.length > target.value.length) {\n setTrackingDirection(-1);\n } else {\n setTrackingDirection(1);\n }\n\n if (target.value.length === CODE_LENGTH) {\n setAuthCode({ code: target.value });\n }\n }, [authError, clearAuthError, code, isTracking, setAuthCode]);\n\n return (\n
\n
\n \n

\n {authPhoneNumber}\n \n \n

\n \n

\n {renderText(lang(authIsCodeViaApp ? 'SentAppCode' : 'Login.JustSentSms'), ['simple_markdown'])}\n

\n \n {authIsLoading && }\n
\n
\n );\n};\n\nexport default memo(withGlobal(\n (global): StateProps => pick(global, ['authPhoneNumber', 'authIsCodeViaApp', 'authIsLoading', 'authError']),\n)(AuthCode));\n","import React, {\n FC, memo, useCallback, useState,\n} from '../../lib/teact/teact';\nimport { getActions, withGlobal } from '../../global';\n\nimport { GlobalState } from '../../global/types';\n\nimport { pick } from '../../util/iteratees';\nimport useLang from '../../hooks/useLang';\n\nimport MonkeyPassword from '../common/PasswordMonkey';\nimport PasswordForm from '../common/PasswordForm';\n\ntype StateProps = Pick;\n\nconst AuthPassword: FC = ({\n authIsLoading, authError, authHint,\n}) => {\n const { setAuthPassword, clearAuthError } = getActions();\n\n const lang = useLang();\n const [showPassword, setShowPassword] = useState(false);\n\n const handleChangePasswordVisibility = useCallback((isVisible) => {\n setShowPassword(isVisible);\n }, []);\n\n const handleSubmit = useCallback((password: string) => {\n setAuthPassword({ password });\n }, [setAuthPassword]);\n\n return (\n
\n
\n \n

{lang('Login.Header.Password')}

\n

{lang('Login.EnterPasswordDescription')}

\n \n
\n
\n );\n};\n\nexport default memo(withGlobal(\n (global): StateProps => pick(global, ['authIsLoading', 'authError', 'authHint']),\n)(AuthPassword));\n","import { ChangeEvent } from 'react';\nimport React, {\n FC, useState, memo, useCallback,\n} from '../../lib/teact/teact';\nimport { getActions, withGlobal } from '../../global';\n\nimport { GlobalState } from '../../global/types';\n\nimport { pick } from '../../util/iteratees';\nimport useLang from '../../hooks/useLang';\n\nimport Button from '../ui/Button';\nimport InputText from '../ui/InputText';\nimport AvatarEditable from '../ui/AvatarEditable';\n\ntype StateProps = Pick;\n\nconst AuthRegister: FC = ({\n authIsLoading, authError,\n}) => {\n const { signUp, clearAuthError, uploadProfilePhoto } = getActions();\n\n const lang = useLang();\n const [isButtonShown, setIsButtonShown] = useState(false);\n const [croppedFile, setCroppedFile] = useState();\n const [firstName, setFirstName] = useState('');\n const [lastName, setLastName] = useState('');\n\n const handleFirstNameChange = useCallback((event: ChangeEvent) => {\n if (authError) {\n clearAuthError();\n }\n\n const { target } = event;\n\n setFirstName(target.value);\n setIsButtonShown(target.value.length > 0);\n }, [authError, clearAuthError]);\n\n const handleLastNameChange = useCallback((event: ChangeEvent) => {\n const { target } = event;\n\n setLastName(target.value);\n }, []);\n\n function handleSubmit(event: React.FormEvent) {\n event.preventDefault();\n\n signUp({ firstName, lastName });\n\n if (croppedFile) {\n uploadProfilePhoto({ file: croppedFile });\n }\n }\n\n return (\n
\n
\n
\n \n

{lang('YourName')}

\n

{lang('Login.Register.Desc')}

\n \n \n {isButtonShown && (\n \n )}\n \n
\n
\n );\n};\n\nexport default memo(withGlobal(\n (global): StateProps => pick(global, ['authIsLoading', 'authError']),\n)(AuthRegister));\n","import { ChangeEvent } from 'react';\nimport React, {\n FC, memo, useEffect, useRef, useState,\n} from '../../lib/teact/teact';\n\nimport { MIN_PASSWORD_LENGTH } from '../../config';\nimport { IS_TOUCH_ENV, IS_SINGLE_COLUMN_LAYOUT } from '../../util/environment';\nimport buildClassName from '../../util/buildClassName';\nimport useLang from '../../hooks/useLang';\n\nimport Button from '../ui/Button';\n\ntype OwnProps = {\n submitLabel?: string;\n error?: string;\n hint?: string;\n placeholder?: string;\n isLoading?: boolean;\n isPasswordVisible?: boolean;\n clearError: NoneToVoidFunction;\n onChangePasswordVisibility: (state: boolean) => void;\n onInputChange?: (password: string) => void;\n onSubmit: (password: string) => void;\n};\n\nconst FOCUS_DELAY_TIMEOUT_MS = IS_SINGLE_COLUMN_LAYOUT ? 550 : 400;\n\nconst PasswordForm: FC = ({\n isLoading = false,\n isPasswordVisible,\n error,\n hint,\n placeholder = 'Password',\n submitLabel = 'Next',\n clearError,\n onChangePasswordVisibility,\n onInputChange,\n onSubmit,\n}) => {\n // eslint-disable-next-line no-null/no-null\n const inputRef = useRef(null);\n const lang = useLang();\n\n const [password, setPassword] = useState('');\n const [canSubmit, setCanSubmit] = useState(false);\n\n useEffect(() => {\n if (!IS_TOUCH_ENV) {\n setTimeout(() => {\n inputRef.current!.focus();\n }, FOCUS_DELAY_TIMEOUT_MS);\n }\n }, []);\n\n useEffect(() => {\n if (error) {\n requestAnimationFrame(() => {\n inputRef.current!.focus();\n inputRef.current!.select();\n });\n }\n }, [error]);\n\n function onPasswordChange(e: ChangeEvent) {\n if (error) {\n clearError();\n }\n\n const { target } = e;\n setPassword(target.value);\n setCanSubmit(target.value.length >= MIN_PASSWORD_LENGTH);\n if (onInputChange) {\n onInputChange(target.value);\n }\n }\n\n function togglePasswordVisibility() {\n onChangePasswordVisibility(!isPasswordVisible);\n }\n\n function handleSubmit(event: React.FormEvent) {\n event.preventDefault();\n\n if (isLoading) {\n return;\n }\n\n if (canSubmit) {\n onSubmit(password);\n }\n }\n\n return (\n
\n \n \n \n \n \n
\n
\n {canSubmit && (\n \n )}\n \n );\n};\n\nexport default memo(PasswordForm);\n","import React, {\n FC, useState, useEffect, useCallback, memo,\n} from '../../lib/teact/teact';\n\nimport { STICKER_SIZE_AUTH, STICKER_SIZE_AUTH_MOBILE, STICKER_SIZE_TWO_FA } from '../../config';\nimport { IS_SINGLE_COLUMN_LAYOUT } from '../../util/environment';\nimport getAnimationData from './helpers/animatedAssets';\n\nimport AnimatedSticker from './AnimatedSticker';\n\nimport './PasswordMonkey.scss';\n\ntype OwnProps = {\n isPasswordVisible: boolean;\n isBig?: boolean;\n};\n\nconst PEEK_MONKEY_SHOW_DELAY = 2000;\nconst SEGMENT_COVER_EYES: [number, number] = [0, 50];\nconst SEGMENT_UNCOVER_EYE: [number, number] = [0, 20];\nconst SEGMENT_COVER_EYE: [number, number] = [20, 0];\nconst STICKER_SIZE = IS_SINGLE_COLUMN_LAYOUT ? STICKER_SIZE_AUTH_MOBILE : STICKER_SIZE_AUTH;\n\nconst PasswordMonkey: FC = ({ isPasswordVisible, isBig }) => {\n const [closeMonkeyData, setCloseMonkeyData] = useState();\n const [peekMonkeyData, setPeekMonkeyData] = useState();\n const [isFirstMonkeyLoaded, setIsFirstMonkeyLoaded] = useState(false);\n const [isPeekShown, setIsPeekShown] = useState(false);\n\n useEffect(() => {\n if (!closeMonkeyData) {\n getAnimationData('MonkeyClose').then(setCloseMonkeyData);\n } else {\n setTimeout(() => setIsPeekShown(true), PEEK_MONKEY_SHOW_DELAY);\n }\n }, [closeMonkeyData]);\n\n useEffect(() => {\n if (!peekMonkeyData) {\n getAnimationData('MonkeyPeek').then(setPeekMonkeyData);\n }\n }, [peekMonkeyData]);\n\n const handleFirstMonkeyLoad = useCallback(() => setIsFirstMonkeyLoaded(true), []);\n\n return (\n
\n {!isFirstMonkeyLoaded && (\n
\n )}\n {closeMonkeyData && (\n \n )}\n {peekMonkeyData && (\n \n )}\n
\n );\n};\n\nexport default memo(PasswordMonkey);\n","import React, {\n FC, useEffect, useState, memo, useCallback,\n} from '../../lib/teact/teact';\n\nimport { DEBUG } from '../../config';\nimport { blobToFile, blobToDataUri } from '../../util/files';\nimport useLang from '../../hooks/useLang';\n\nimport Button from './Button';\nimport Modal from './Modal';\nimport Loading from './Loading';\n\nimport './CropModal.scss';\n\n// Change to 'base64' to get base64-encoded string\nconst cropperResultOptions: Croppie.ResultOptions & { type: 'blob' } = {\n type: 'blob',\n quality: 1,\n format: 'jpeg',\n circle: false,\n size: { width: 1024, height: 1024 },\n};\n\ntype ICroppie = typeof import('croppie');\nlet Croppie: ICroppie;\nlet croppiePromise: Promise<{ default: ICroppie }>;\n\nasync function ensureCroppie() {\n if (!croppiePromise) {\n croppiePromise = import('../../lib/croppie') as unknown as Promise<{ default: ICroppie }>;\n Croppie = (await croppiePromise).default;\n }\n\n return croppiePromise;\n}\n\nlet cropper: Croppie;\n\nasync function initCropper(imgFile: File) {\n try {\n const cropContainer = document.getElementById('avatar-crop');\n if (!cropContainer) {\n return;\n }\n\n const { offsetWidth, offsetHeight } = cropContainer;\n\n cropper = new Croppie(cropContainer, {\n enableZoom: true,\n boundary: {\n width: offsetWidth,\n height: offsetHeight,\n },\n viewport: {\n width: offsetWidth - 16,\n height: offsetHeight - 16,\n type: 'circle',\n },\n });\n\n const dataUri = await blobToDataUri(imgFile);\n await cropper.bind({ url: dataUri });\n } catch (err) {\n if (DEBUG) {\n // eslint-disable-next-line no-console\n console.error(err);\n }\n }\n}\n\ntype OwnProps = {\n file?: File;\n onChange: (file: File) => void;\n onClose: () => void;\n};\n\nconst CropModal: FC = ({ file, onChange, onClose }: OwnProps) => {\n const [isCroppieReady, setIsCroppieReady] = useState(false);\n\n useEffect(() => {\n if (!file) {\n return;\n }\n\n if (!isCroppieReady) {\n ensureCroppie().then(() => setIsCroppieReady(true));\n\n return;\n }\n\n initCropper(file);\n }, [file, isCroppieReady]);\n\n const lang = useLang();\n\n const handleCropClick = useCallback(async () => {\n if (!cropper) {\n return;\n }\n\n const result: Blob | string = await cropper.result(cropperResultOptions);\n const croppedImg = typeof result === 'string' ? result : blobToFile(result, 'avatar.jpg');\n\n onChange(croppedImg);\n }, [onChange]);\n\n return (\n \n {isCroppieReady ? (\n
\n ) : (\n \n )}\n \n \n \n \n );\n};\n\nexport default memo(CropModal);\n","import { ChangeEvent } from 'react';\nimport React, {\n FC, useState, useEffect, memo, useCallback,\n} from '../../lib/teact/teact';\n\nimport buildClassName from '../../util/buildClassName';\n\nimport CropModal from './CropModal';\n\nimport './AvatarEditable.scss';\n\ninterface OwnProps {\n title?: string;\n disabled?: boolean;\n currentAvatarBlobUrl?: string;\n onChange: (file: File) => void;\n}\n\nconst AvatarEditable: FC = ({\n title = 'Change your profile picture',\n disabled,\n currentAvatarBlobUrl,\n onChange,\n}) => {\n const [selectedFile, setSelectedFile] = useState();\n const [croppedBlobUrl, setCroppedBlobUrl] = useState(currentAvatarBlobUrl);\n\n useEffect(() => {\n setCroppedBlobUrl(currentAvatarBlobUrl);\n }, [currentAvatarBlobUrl]);\n\n function handleSelectFile(event: ChangeEvent) {\n const target = event.target as HTMLInputElement;\n\n if (!target || !target.files || !target.files[0]) {\n return;\n }\n\n setSelectedFile(target.files[0]);\n target.value = '';\n }\n\n const handleAvatarCrop = useCallback((croppedImg: File) => {\n setSelectedFile(undefined);\n onChange(croppedImg);\n\n if (croppedBlobUrl) {\n URL.revokeObjectURL(croppedBlobUrl);\n }\n setCroppedBlobUrl(URL.createObjectURL(croppedImg));\n }, [croppedBlobUrl, onChange]);\n\n const handleModalClose = useCallback(() => {\n setSelectedFile(undefined);\n }, []);\n\n const labelClassName = buildClassName(\n croppedBlobUrl && 'filled',\n disabled && 'disabled',\n );\n\n return (\n
\n \n \n \n {croppedBlobUrl && \"Avatar\"}\n \n \n
\n );\n};\n\nexport default memo(AvatarEditable);\n","import { RefObject } from 'react';\nimport React, {\n FC, useEffect, useRef,\n} from '../../lib/teact/teact';\n\nimport { TextPart } from '../common/helpers/renderMessageText';\n\nimport captureKeyboardListeners from '../../util/captureKeyboardListeners';\nimport trapFocus from '../../util/trapFocus';\nimport buildClassName from '../../util/buildClassName';\nimport { dispatchHeavyAnimationEvent } from '../../hooks/useHeavyAnimationCheck';\nimport useShowTransition from '../../hooks/useShowTransition';\nimport useEffectWithPrevDeps from '../../hooks/useEffectWithPrevDeps';\nimport useLang from '../../hooks/useLang';\nimport useHistoryBack from '../../hooks/useHistoryBack';\n\nimport Button from './Button';\nimport Portal from './Portal';\n\nimport './Modal.scss';\n\nconst ANIMATION_DURATION = 200;\n\ntype OwnProps = {\n title?: string | TextPart[];\n className?: string;\n isOpen?: boolean;\n header?: any;\n hasCloseButton?: boolean;\n noBackdrop?: boolean;\n children: React.ReactNode;\n onClose: () => void;\n onCloseAnimationEnd?: () => void;\n onEnter?: () => void;\n dialogRef?: RefObject;\n};\n\ntype StateProps = {\n shouldSkipHistoryAnimations?: boolean;\n};\n\nconst Modal: FC = ({\n dialogRef,\n title,\n className,\n isOpen,\n header,\n hasCloseButton,\n noBackdrop,\n children,\n onClose,\n onCloseAnimationEnd,\n onEnter,\n shouldSkipHistoryAnimations,\n}) => {\n const {\n shouldRender,\n transitionClassNames,\n } = useShowTransition(\n isOpen, onCloseAnimationEnd, shouldSkipHistoryAnimations, undefined, shouldSkipHistoryAnimations,\n );\n // eslint-disable-next-line no-null/no-null\n const modalRef = useRef(null);\n\n useEffect(() => (isOpen\n ? captureKeyboardListeners({ onEsc: onClose, onEnter })\n : undefined), [isOpen, onClose, onEnter]);\n useEffect(() => (isOpen && modalRef.current ? trapFocus(modalRef.current) : undefined), [isOpen]);\n\n const { forceClose } = useHistoryBack(isOpen, onClose);\n\n // For modals that are closed by unmounting without changing `isOpen` to `false`\n useEffect(() => {\n return () => {\n if (isOpen) {\n forceClose();\n }\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n useEffectWithPrevDeps(([prevIsOpen]) => {\n document.body.classList.toggle('has-open-dialog', isOpen);\n if (isOpen || (!isOpen && prevIsOpen !== undefined)) {\n dispatchHeavyAnimationEvent(ANIMATION_DURATION);\n }\n\n return () => {\n document.body.classList.remove('has-open-dialog');\n };\n }, [isOpen]);\n\n const lang = useLang();\n\n if (!shouldRender) {\n return undefined;\n }\n\n function renderHeader() {\n if (header) {\n return header;\n }\n\n if (!title) {\n return undefined;\n }\n\n return (\n
\n {hasCloseButton && (\n \n \n \n )}\n
{title}
\n
\n );\n }\n\n const fullClassName = buildClassName(\n 'Modal',\n className,\n transitionClassNames,\n noBackdrop && 'transparent-backdrop',\n );\n\n return (\n \n \n
\n
\n
\n {renderHeader()}\n
\n {children}\n
\n
\n
\n
\n
\n );\n};\n\nexport default Modal;\n","export default function trapFocus(element: HTMLElement) {\n function handleKeyDown(e: KeyboardEvent) {\n if (e.key !== 'Tab') {\n return;\n }\n\n e.preventDefault();\n e.stopPropagation();\n\n const focusableElements = Array.from(\n element.querySelectorAll('button, [href], input, select, textarea, [tabindex]:not([tabindex=\"-1\"])'),\n ) as HTMLElement[];\n if (!focusableElements.length) {\n return;\n }\n\n const currentFocusedIndex = focusableElements.findIndex((em) => em.isSameNode(document.activeElement));\n let newFocusedIndex = 0;\n if (currentFocusedIndex >= 0) {\n if (e.shiftKey) {\n newFocusedIndex = currentFocusedIndex > 0\n ? currentFocusedIndex - 1\n : focusableElements.length - 1;\n } else {\n newFocusedIndex = currentFocusedIndex < focusableElements.length - 1\n ? currentFocusedIndex + 1\n : 0;\n }\n }\n\n focusableElements[newFocusedIndex].focus();\n }\n\n document.addEventListener('keydown', handleKeyDown, false);\n\n return () => {\n document.removeEventListener('keydown', handleKeyDown, false);\n };\n}\n","import {\n FC, useRef, useLayoutEffect, VirtualElement,\n} from '../../lib/teact/teact';\nimport TeactDOM from '../../lib/teact/teact-dom';\n\ntype OwnProps = {\n containerId?: string;\n className?: string;\n children: React.ReactNode;\n};\n\nconst Portal: FC = ({ containerId, className, children }) => {\n const elementRef = useRef();\n if (!elementRef.current) {\n elementRef.current = document.createElement('div');\n }\n\n useLayoutEffect(() => {\n const container = document.querySelector(containerId || '#portals');\n if (!container) {\n return undefined;\n }\n\n const element = elementRef.current!;\n if (className) {\n element.classList.add(className);\n }\n\n container.appendChild(element);\n\n return () => {\n TeactDOM.render(undefined, element);\n container.removeChild(element);\n };\n }, [className, containerId]);\n\n return TeactDOM.render(children as VirtualElement, elementRef.current);\n};\n\nexport default Portal;\n"],"names":["STICKER_SIZE","IS_SINGLE_COLUMN_LAYOUT","STICKER_SIZE_AUTH_MOBILE","STICKER_SIZE_AUTH","memo","code","codeLength","trackingDirection","isTracking","isBig","idleMonkeyData","setIdleMonkeyData","useState","trackingMonkeyData","setTrackingMonkeyData","isFirstMonkeyLoaded","setIsFirstMonkeyLoaded","TRACKING_FRAMES_PER_SYMBOL","useEffect","getAnimationData","then","handleFirstMonkeyLoad","useCallback","id","className","AnimatedSticker","size","STICKER_SIZE_TWO_FA","undefined","animationData","play","onLoad","playSegment","startFrame","length","endFrame","getTrackingFrames","speed","noLoop","withGlobal","global","pick","authPhoneNumber","authIsCodeViaApp","authIsLoading","authError","setAuthCode","returnToAuthPhoneNumber","clearAuthError","getActions","lang","useLang","inputRef","useRef","setCode","setIsTracking","setTrackingDirection","IS_TOUCH_ENV","current","focus","useHistoryBack","onCodeChange","e","currentTarget","target","value","replace","substr","onClick","role","tabIndex","title","renderText","InputText","ref","label","onInput","error","autoComplete","inputMode","Loading","authHint","setAuthPassword","showPassword","setShowPassword","handleChangePasswordVisibility","isVisible","handleSubmit","password","isPasswordVisible","PasswordForm","clearError","hint","isLoading","onChangePasswordVisibility","onSubmit","signUp","uploadProfilePhoto","isButtonShown","setIsButtonShown","croppedFile","setCroppedFile","firstName","setFirstName","lastName","setLastName","handleFirstNameChange","event","handleLastNameChange","action","method","preventDefault","file","AvatarEditable","onChange","Button","type","ripple","FOCUS_DELAY_TIMEOUT_MS","placeholder","submitLabel","onInputChange","setPassword","canSubmit","setCanSubmit","setTimeout","requestAnimationFrame","select","buildClassName","dir","isRtl","MIN_PASSWORD_LENGTH","SEGMENT_COVER_EYES","SEGMENT_UNCOVER_EYE","SEGMENT_COVER_EYE","closeMonkeyData","setCloseMonkeyData","peekMonkeyData","setPeekMonkeyData","isPeekShown","setIsPeekShown","cropperResultOptions","quality","format","circle","width","height","Croppie","croppiePromise","cropper","onClose","isCroppieReady","setIsCroppieReady","async","imgFile","cropContainer","document","getElementById","offsetWidth","offsetHeight","enableZoom","boundary","viewport","dataUri","blobToDataUri","bind","url","err","DEBUG","console","initCropper","default","ensureCroppie","handleCropClick","result","croppedImg","blobToFile","Modal","isOpen","Boolean","hasCloseButton","round","color","ariaLabel","disabled","currentAvatarBlobUrl","selectedFile","setSelectedFile","croppedBlobUrl","setCroppedBlobUrl","handleAvatarCrop","URL","revokeObjectURL","createObjectURL","handleModalClose","labelClassName","files","accept","src","alt","dialogRef","header","noBackdrop","children","onCloseAnimationEnd","onEnter","shouldSkipHistoryAnimations","shouldRender","transitionClassNames","useShowTransition","modalRef","captureKeyboardListeners","onEsc","element","handleKeyDown","key","stopPropagation","focusableElements","Array","from","querySelectorAll","currentFocusedIndex","findIndex","em","isSameNode","activeElement","newFocusedIndex","shiftKey","addEventListener","removeEventListener","trapFocus","forceClose","useEffectWithPrevDeps","prevIsOpen","body","classList","toggle","dispatchHeavyAnimationEvent","remove","fullClassName","Portal","containerId","elementRef","createElement","useLayoutEffect","container","querySelector","add","appendChild","TeactDOM","removeChild"],"sourceRoot":""} \ No newline at end of file diff --git a/dist/313.5cd1718104a79212da23.js.map b/dist/313.5cd1718104a79212da23.js.map deleted file mode 100644 index 60b5c5bfc..000000000 --- a/dist/313.5cd1718104a79212da23.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"313.5cd1718104a79212da23.js","mappings":"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","sources":["webpack://telegram-t/./node_modules/@cryptography/aes/dist/es/aes.js","webpack://telegram-t/./node_modules/async-mutex/lib/Mutex.js","webpack://telegram-t/./node_modules/async-mutex/lib/Semaphore.js","webpack://telegram-t/./node_modules/async-mutex/lib/errors.js","webpack://telegram-t/./node_modules/async-mutex/lib/index.js","webpack://telegram-t/./node_modules/async-mutex/lib/tryAcquire.js","webpack://telegram-t/./node_modules/async-mutex/lib/withTimeout.js","webpack://telegram-t/./node_modules/base64-js/index.js","webpack://telegram-t/./node_modules/big-integer/BigInteger.js","webpack://telegram-t/./node_modules/buffer/index.js","webpack://telegram-t/./node_modules/es5-ext/global.js","webpack://telegram-t/./node_modules/ieee754/index.js","webpack://telegram-t/./node_modules/os-browserify/browser.js","webpack://telegram-t/./node_modules/tslib/tslib.es6.js","webpack://telegram-t/./node_modules/websocket/lib/browser.js","webpack://telegram-t/./node_modules/websocket/lib/version.js","webpack://telegram-t/./node_modules/idb-keyval/dist/index.js","webpack://telegram-t/./node_modules/safari-14-idb-fix/dist/index.js"],"sourcesContent":["var S = new Uint8Array(256);\nvar Si = new Uint8Array(256);\nvar T1 = new Uint32Array(256);\nvar T2 = new Uint32Array(256);\nvar T3 = new Uint32Array(256);\nvar T4 = new Uint32Array(256);\nvar T5 = new Uint32Array(256);\nvar T6 = new Uint32Array(256);\nvar T7 = new Uint32Array(256);\nvar T8 = new Uint32Array(256);\nfunction computeTables() {\n var d = new Uint8Array(256);\n var t = new Uint8Array(256);\n var x2;\n var x4;\n var x8;\n var s;\n var tEnc;\n var tDec;\n var x = 0;\n var xInv = 0;\n // Compute double and third tables\n for (var i = 0; i < 256; i++) {\n d[i] = i << 1 ^ (i >> 7) * 283;\n t[d[i] ^ i] = i;\n }\n for (; !S[x]; x ^= x2 || 1) {\n // Compute sbox\n s = xInv ^ xInv << 1 ^ xInv << 2 ^ xInv << 3 ^ xInv << 4;\n s = s >> 8 ^ s & 255 ^ 99;\n S[x] = s;\n Si[s] = x;\n // Compute MixColumns\n x8 = d[x4 = d[x2 = d[x]]];\n tDec = x8 * 0x1010101 ^ x4 * 0x10001 ^ x2 * 0x101 ^ x * 0x1010100;\n tEnc = d[s] * 0x101 ^ s * 0x1010100;\n T1[x] = tEnc = tEnc << 24 ^ tEnc >>> 8;\n T2[x] = tEnc = tEnc << 24 ^ tEnc >>> 8;\n T3[x] = tEnc = tEnc << 24 ^ tEnc >>> 8;\n T4[x] = tEnc = tEnc << 24 ^ tEnc >>> 8;\n T5[s] = tDec = tDec << 24 ^ tDec >>> 8;\n T6[s] = tDec = tDec << 24 ^ tDec >>> 8;\n T7[s] = tDec = tDec << 24 ^ tDec >>> 8;\n T8[s] = tDec = tDec << 24 ^ tDec >>> 8;\n xInv = t[xInv] || 1;\n }\n}\n\n/**\n * Gets a uint32 from string in big-endian order order\n */\nfunction s2i(str, pos) {\n return (str.charCodeAt(pos) << 24\n ^ str.charCodeAt(pos + 1) << 16\n ^ str.charCodeAt(pos + 2) << 8\n ^ str.charCodeAt(pos + 3));\n}\n\n/* eslint-disable import/prefer-default-export */\n/**\n * Helper function for transforming string key to Uint32Array\n */\nfunction getWords(key) {\n if (key instanceof Uint32Array) {\n return key;\n }\n if (typeof key === 'string') {\n if (key.length % 4 !== 0)\n for (var i = key.length % 4; i <= 4; i++)\n key += '\\0x00';\n var buf = new Uint32Array(key.length / 4);\n for (var i = 0; i < key.length; i += 4)\n buf[i / 4] = s2i(key, i);\n return buf;\n }\n if (key instanceof Uint8Array) {\n var buf = new Uint32Array(key.length / 4);\n for (var i = 0; i < key.length; i += 4) {\n buf[i / 4] = (key[i] << 24\n ^ key[i + 1] << 16\n ^ key[i + 2] << 8\n ^ key[i + 3]);\n }\n return buf;\n }\n throw new Error('Unable to create 32-bit words');\n}\nfunction xor(left, right, to) {\n if (to === void 0) { to = left; }\n for (var i = 0; i < left.length; i++)\n to[i] = left[i] ^ right[i];\n}\n\ncomputeTables();\n/**\n * Low-level AES Cipher\n */\nvar AES = /** @class */ (function () {\n function AES(_key) {\n var key = getWords(_key);\n if (key.length !== 4 && key.length !== 6 && key.length !== 8) {\n throw new Error('Invalid key size');\n }\n this.encKey = new Uint32Array(4 * key.length + 28);\n this.decKey = new Uint32Array(4 * key.length + 28);\n this.encKey.set(key);\n var rcon = 1;\n var i = key.length;\n var tmp;\n // schedule encryption keys\n for (; i < 4 * key.length + 28; i++) {\n tmp = this.encKey[i - 1];\n // apply sbox\n if (i % key.length === 0 || (key.length === 8 && i % key.length === 4)) {\n tmp = S[tmp >>> 24] << 24 ^ S[(tmp >> 16) & 255] << 16 ^ S[(tmp >> 8) & 255] << 8 ^ S[tmp & 255];\n // shift rows and add rcon\n if (i % key.length === 0) {\n tmp = tmp << 8 ^ tmp >>> 24 ^ (rcon << 24);\n rcon = rcon << 1 ^ (rcon >> 7) * 283;\n }\n }\n this.encKey[i] = this.encKey[i - key.length] ^ tmp;\n }\n // schedule decryption keys\n for (var j = 0; i; j++, i--) {\n tmp = this.encKey[j & 3 ? i : i - 4];\n if (i <= 4 || j < 4) {\n this.decKey[j] = tmp;\n }\n else {\n this.decKey[j] = (T5[S[tmp >>> 24]]\n ^ T6[S[(tmp >> 16) & 255]]\n ^ T7[S[(tmp >> 8) & 255]]\n ^ T8[S[tmp & 255]]);\n }\n }\n }\n AES.prototype.encrypt = function (_message) {\n var message = getWords(_message);\n var out = new Uint32Array(4);\n var a = message[0] ^ this.encKey[0];\n var b = message[1] ^ this.encKey[1];\n var c = message[2] ^ this.encKey[2];\n var d = message[3] ^ this.encKey[3];\n var rounds = this.encKey.length / 4 - 2;\n var k = 4;\n var a2;\n var b2;\n var c2;\n // Inner rounds. Cribbed from OpenSSL.\n for (var i = 0; i < rounds; i++) {\n a2 = T1[a >>> 24] ^ T2[(b >> 16) & 255] ^ T3[(c >> 8) & 255] ^ T4[d & 255] ^ this.encKey[k];\n b2 = T1[b >>> 24] ^ T2[(c >> 16) & 255] ^ T3[(d >> 8) & 255] ^ T4[a & 255] ^ this.encKey[k + 1];\n c2 = T1[c >>> 24] ^ T2[(d >> 16) & 255] ^ T3[(a >> 8) & 255] ^ T4[b & 255] ^ this.encKey[k + 2];\n d = T1[d >>> 24] ^ T2[(a >> 16) & 255] ^ T3[(b >> 8) & 255] ^ T4[c & 255] ^ this.encKey[k + 3];\n a = a2;\n b = b2;\n c = c2;\n k += 4;\n // console.log(a, b, c, d);\n }\n // Last round.\n for (var i = 0; i < 4; i++) {\n out[i] = (S[a >>> 24] << 24\n ^ S[(b >> 16) & 255] << 16\n ^ S[(c >> 8) & 255] << 8\n ^ S[d & 255]\n ^ this.encKey[k++]);\n a2 = a;\n a = b;\n b = c;\n c = d;\n d = a2;\n }\n return out;\n };\n AES.prototype.decrypt = function (_message) {\n var message = getWords(_message);\n var out = new Uint32Array(4);\n var a = message[0] ^ this.decKey[0];\n var b = message[3] ^ this.decKey[1];\n var c = message[2] ^ this.decKey[2];\n var d = message[1] ^ this.decKey[3];\n var rounds = this.decKey.length / 4 - 2;\n var a2;\n var b2;\n var c2;\n var k = 4;\n // Inner rounds. Cribbed from OpenSSL.\n for (var i = 0; i < rounds; i++) {\n a2 = T5[a >>> 24] ^ T6[(b >> 16) & 255] ^ T7[(c >> 8) & 255] ^ T8[d & 255] ^ this.decKey[k];\n b2 = T5[b >>> 24] ^ T6[(c >> 16) & 255] ^ T7[(d >> 8) & 255] ^ T8[a & 255] ^ this.decKey[k + 1];\n c2 = T5[c >>> 24] ^ T6[(d >> 16) & 255] ^ T7[(a >> 8) & 255] ^ T8[b & 255] ^ this.decKey[k + 2];\n d = T5[d >>> 24] ^ T6[(a >> 16) & 255] ^ T7[(b >> 8) & 255] ^ T8[c & 255] ^ this.decKey[k + 3];\n a = a2;\n b = b2;\n c = c2;\n k += 4;\n }\n // Last round.\n for (var i = 0; i < 4; i++) {\n out[3 & -i] = (Si[a >>> 24] << 24\n ^ Si[(b >> 16) & 255] << 16\n ^ Si[(c >> 8) & 255] << 8\n ^ Si[d & 255]\n ^ this.decKey[k++]);\n a2 = a;\n a = b;\n b = c;\n c = d;\n d = a2;\n }\n return out;\n };\n return AES;\n}());\n\n/**\n * AES-IGE mode.\n */\nvar AES_IGE = /** @class */ (function () {\n function AES_IGE(key, iv, blockSize) {\n if (blockSize === void 0) { blockSize = 16; }\n this.key = getWords(key);\n this.iv = getWords(iv);\n this.cipher = new AES(key);\n this.blockSize = blockSize / 4;\n }\n /**\n * Encrypts plain text with AES-IGE mode.\n */\n AES_IGE.prototype.encrypt = function (message, buf) {\n var text = getWords(message);\n var cipherText = buf || new Uint32Array(text.length);\n var prevX = this.iv.subarray(this.blockSize, this.iv.length);\n var prevY = this.iv.subarray(0, this.blockSize);\n var yXOR = new Uint32Array(this.blockSize);\n for (var i = 0; i < text.length; i += this.blockSize) {\n var x = text.subarray(i, i + this.blockSize);\n xor(x, prevY, yXOR);\n var y = this.cipher.encrypt(yXOR);\n xor(y, prevX);\n prevX = x;\n prevY = y;\n for (var j = i, k = 0; j < text.length && k < 4; j++, k++)\n cipherText[j] = y[k];\n }\n return cipherText;\n };\n /**\n * Decrypts cipher text with AES-IGE mode.\n */\n AES_IGE.prototype.decrypt = function (message, buf) {\n var cipherText = getWords(message);\n var text = buf || new Uint32Array(cipherText.length);\n var prevY = this.iv.subarray(this.blockSize, this.iv.length);\n var prevX = this.iv.subarray(0, this.blockSize);\n var yXOR = new Uint32Array(this.blockSize);\n for (var i = 0; i < text.length; i += this.blockSize) {\n var x = cipherText.subarray(i, i + this.blockSize);\n xor(x, prevY, yXOR);\n var y = this.cipher.decrypt(yXOR);\n xor(y, prevX);\n prevX = x;\n prevY = y;\n for (var j = i, k = 0; j < text.length && k < 4; j++, k++)\n text[j] = y[k];\n }\n return text;\n };\n return AES_IGE;\n}());\n\n/**\n * AES-IGE mode.\n */\nvar AES_IGE$1 = /** @class */ (function () {\n function AES_IGE(key, counter, blockSize) {\n if (blockSize === void 0) { blockSize = 16; }\n this.offset = 0;\n this.key = getWords(key);\n this.counter = getWords(counter);\n this.cipher = new AES(key);\n this.blockSize = blockSize / 4;\n if (this.counter.length !== 4) {\n throw new Error('AES-CTR mode counter must be 16 bytes length');\n }\n }\n /**\n * Encrypts plain text with AES-IGE mode.\n */\n AES_IGE.prototype.encrypt = function (message, buf) {\n var text = getWords(message);\n var cipherText = buf || new Uint32Array(text.length);\n var offset = this.offset;\n for (var i = 0; i < text.length; i += this.blockSize) {\n var x = this.cipher.encrypt(this.counter);\n for (var j = i, k = offset; j < text.length && k < this.blockSize; j++, k++)\n cipherText[j] = x[k] ^ text[j];\n if (text.length - i >= this.blockSize)\n this.incrementCounter();\n if (offset) {\n i -= offset;\n offset = 0;\n }\n }\n this.offset = (this.offset + (text.length % 4)) % 4;\n return cipherText;\n };\n /**\n * Decrypts cipher text with AES-IGE mode.\n */\n AES_IGE.prototype.decrypt = function (message, buf) {\n return this.encrypt(message, buf);\n };\n AES_IGE.prototype.incrementCounter = function () {\n // increment counter\n for (var carry = this.counter.length - 1; carry >= 0; carry--) {\n if (++this.counter[carry] < 0xFFFFFFFF)\n break; // If overflowing, it'll be 0 and we'll have to continue propagating the carry\n }\n };\n return AES_IGE;\n}());\n\nexport default AES;\nexport { AES_IGE$1 as CTR, AES_IGE as IGE };\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar tslib_1 = require(\"tslib\");\nvar Semaphore_1 = require(\"./Semaphore\");\nvar Mutex = /** @class */ (function () {\n function Mutex(cancelError) {\n this._semaphore = new Semaphore_1.default(1, cancelError);\n }\n Mutex.prototype.acquire = function () {\n return (0, tslib_1.__awaiter)(this, void 0, void 0, function () {\n var _a, releaser;\n return (0, tslib_1.__generator)(this, function (_b) {\n switch (_b.label) {\n case 0: return [4 /*yield*/, this._semaphore.acquire()];\n case 1:\n _a = _b.sent(), releaser = _a[1];\n return [2 /*return*/, releaser];\n }\n });\n });\n };\n Mutex.prototype.runExclusive = function (callback) {\n return this._semaphore.runExclusive(function () { return callback(); });\n };\n Mutex.prototype.isLocked = function () {\n return this._semaphore.isLocked();\n };\n Mutex.prototype.waitForUnlock = function () {\n return this._semaphore.waitForUnlock();\n };\n /** @deprecated Deprecated in 0.3.0, will be removed in 0.4.0. Use runExclusive instead. */\n Mutex.prototype.release = function () {\n this._semaphore.release();\n };\n Mutex.prototype.cancel = function () {\n return this._semaphore.cancel();\n };\n return Mutex;\n}());\nexports.default = Mutex;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar tslib_1 = require(\"tslib\");\nvar errors_1 = require(\"./errors\");\nvar Semaphore = /** @class */ (function () {\n function Semaphore(_maxConcurrency, _cancelError) {\n if (_cancelError === void 0) { _cancelError = errors_1.E_CANCELED; }\n this._maxConcurrency = _maxConcurrency;\n this._cancelError = _cancelError;\n this._queue = [];\n this._waiters = [];\n if (_maxConcurrency <= 0) {\n throw new Error('semaphore must be initialized to a positive value');\n }\n this._value = _maxConcurrency;\n }\n Semaphore.prototype.acquire = function () {\n var _this = this;\n var locked = this.isLocked();\n var ticketPromise = new Promise(function (resolve, reject) {\n return _this._queue.push({ resolve: resolve, reject: reject });\n });\n if (!locked)\n this._dispatch();\n return ticketPromise;\n };\n Semaphore.prototype.runExclusive = function (callback) {\n return (0, tslib_1.__awaiter)(this, void 0, void 0, function () {\n var _a, value, release;\n return (0, tslib_1.__generator)(this, function (_b) {\n switch (_b.label) {\n case 0: return [4 /*yield*/, this.acquire()];\n case 1:\n _a = _b.sent(), value = _a[0], release = _a[1];\n _b.label = 2;\n case 2:\n _b.trys.push([2, , 4, 5]);\n return [4 /*yield*/, callback(value)];\n case 3: return [2 /*return*/, _b.sent()];\n case 4:\n release();\n return [7 /*endfinally*/];\n case 5: return [2 /*return*/];\n }\n });\n });\n };\n Semaphore.prototype.waitForUnlock = function () {\n return (0, tslib_1.__awaiter)(this, void 0, void 0, function () {\n var waitPromise;\n var _this = this;\n return (0, tslib_1.__generator)(this, function (_a) {\n if (!this.isLocked()) {\n return [2 /*return*/, Promise.resolve()];\n }\n waitPromise = new Promise(function (resolve) { return _this._waiters.push({ resolve: resolve }); });\n return [2 /*return*/, waitPromise];\n });\n });\n };\n Semaphore.prototype.isLocked = function () {\n return this._value <= 0;\n };\n /** @deprecated Deprecated in 0.3.0, will be removed in 0.4.0. Use runExclusive instead. */\n Semaphore.prototype.release = function () {\n if (this._maxConcurrency > 1) {\n throw new Error('this method is unavailable on semaphores with concurrency > 1; use the scoped release returned by acquire instead');\n }\n if (this._currentReleaser) {\n var releaser = this._currentReleaser;\n this._currentReleaser = undefined;\n releaser();\n }\n };\n Semaphore.prototype.cancel = function () {\n var _this = this;\n this._queue.forEach(function (ticket) { return ticket.reject(_this._cancelError); });\n this._queue = [];\n };\n Semaphore.prototype._dispatch = function () {\n var _this = this;\n var nextTicket = this._queue.shift();\n if (!nextTicket)\n return;\n var released = false;\n this._currentReleaser = function () {\n if (released)\n return;\n released = true;\n _this._value++;\n _this._resolveWaiters();\n _this._dispatch();\n };\n nextTicket.resolve([this._value--, this._currentReleaser]);\n };\n Semaphore.prototype._resolveWaiters = function () {\n this._waiters.forEach(function (waiter) { return waiter.resolve(); });\n this._waiters = [];\n };\n return Semaphore;\n}());\nexports.default = Semaphore;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.E_CANCELED = exports.E_ALREADY_LOCKED = exports.E_TIMEOUT = void 0;\nexports.E_TIMEOUT = new Error('timeout while waiting for mutex to become available');\nexports.E_ALREADY_LOCKED = new Error('mutex already locked');\nexports.E_CANCELED = new Error('request for lock canceled');\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.tryAcquire = exports.withTimeout = exports.Semaphore = exports.Mutex = void 0;\nvar tslib_1 = require(\"tslib\");\nvar Mutex_1 = require(\"./Mutex\");\nObject.defineProperty(exports, \"Mutex\", { enumerable: true, get: function () { return Mutex_1.default; } });\nvar Semaphore_1 = require(\"./Semaphore\");\nObject.defineProperty(exports, \"Semaphore\", { enumerable: true, get: function () { return Semaphore_1.default; } });\nvar withTimeout_1 = require(\"./withTimeout\");\nObject.defineProperty(exports, \"withTimeout\", { enumerable: true, get: function () { return withTimeout_1.withTimeout; } });\nvar tryAcquire_1 = require(\"./tryAcquire\");\nObject.defineProperty(exports, \"tryAcquire\", { enumerable: true, get: function () { return tryAcquire_1.tryAcquire; } });\n(0, tslib_1.__exportStar)(require(\"./errors\"), exports);\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.tryAcquire = void 0;\nvar errors_1 = require(\"./errors\");\nvar withTimeout_1 = require(\"./withTimeout\");\n// eslint-disable-next-lisne @typescript-eslint/explicit-module-boundary-types\nfunction tryAcquire(sync, alreadyAcquiredError) {\n if (alreadyAcquiredError === void 0) { alreadyAcquiredError = errors_1.E_ALREADY_LOCKED; }\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n return (0, withTimeout_1.withTimeout)(sync, 0, alreadyAcquiredError);\n}\nexports.tryAcquire = tryAcquire;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.withTimeout = void 0;\nvar tslib_1 = require(\"tslib\");\nvar errors_1 = require(\"./errors\");\n// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types\nfunction withTimeout(sync, timeout, timeoutError) {\n var _this = this;\n if (timeoutError === void 0) { timeoutError = errors_1.E_TIMEOUT; }\n return {\n acquire: function () {\n return new Promise(function (resolve, reject) { return (0, tslib_1.__awaiter)(_this, void 0, void 0, function () {\n var isTimeout, handle, ticket, release, e_1;\n return (0, tslib_1.__generator)(this, function (_a) {\n switch (_a.label) {\n case 0:\n isTimeout = false;\n handle = setTimeout(function () {\n isTimeout = true;\n reject(timeoutError);\n }, timeout);\n _a.label = 1;\n case 1:\n _a.trys.push([1, 3, , 4]);\n return [4 /*yield*/, sync.acquire()];\n case 2:\n ticket = _a.sent();\n if (isTimeout) {\n release = Array.isArray(ticket) ? ticket[1] : ticket;\n release();\n }\n else {\n clearTimeout(handle);\n resolve(ticket);\n }\n return [3 /*break*/, 4];\n case 3:\n e_1 = _a.sent();\n if (!isTimeout) {\n clearTimeout(handle);\n reject(e_1);\n }\n return [3 /*break*/, 4];\n case 4: return [2 /*return*/];\n }\n });\n }); });\n },\n runExclusive: function (callback) {\n return (0, tslib_1.__awaiter)(this, void 0, void 0, function () {\n var release, ticket;\n return (0, tslib_1.__generator)(this, function (_a) {\n switch (_a.label) {\n case 0:\n release = function () { return undefined; };\n _a.label = 1;\n case 1:\n _a.trys.push([1, , 7, 8]);\n return [4 /*yield*/, this.acquire()];\n case 2:\n ticket = _a.sent();\n if (!Array.isArray(ticket)) return [3 /*break*/, 4];\n release = ticket[1];\n return [4 /*yield*/, callback(ticket[0])];\n case 3: return [2 /*return*/, _a.sent()];\n case 4:\n release = ticket;\n return [4 /*yield*/, callback()];\n case 5: return [2 /*return*/, _a.sent()];\n case 6: return [3 /*break*/, 8];\n case 7:\n release();\n return [7 /*endfinally*/];\n case 8: return [2 /*return*/];\n }\n });\n });\n },\n /** @deprecated Deprecated in 0.3.0, will be removed in 0.4.0. Use runExclusive instead. */\n release: function () {\n sync.release();\n },\n cancel: function () {\n return sync.cancel();\n },\n waitForUnlock: function () { return sync.waitForUnlock(); },\n isLocked: function () { return sync.isLocked(); },\n };\n}\nexports.withTimeout = withTimeout;\n","'use strict'\n\nexports.byteLength = byteLength\nexports.toByteArray = toByteArray\nexports.fromByteArray = fromByteArray\n\nvar lookup = []\nvar revLookup = []\nvar Arr = typeof Uint8Array !== 'undefined' ? Uint8Array : Array\n\nvar code = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'\nfor (var i = 0, len = code.length; i < len; ++i) {\n lookup[i] = code[i]\n revLookup[code.charCodeAt(i)] = i\n}\n\n// Support decoding URL-safe base64 strings, as Node.js does.\n// See: https://en.wikipedia.org/wiki/Base64#URL_applications\nrevLookup['-'.charCodeAt(0)] = 62\nrevLookup['_'.charCodeAt(0)] = 63\n\nfunction getLens (b64) {\n var len = b64.length\n\n if (len % 4 > 0) {\n throw new Error('Invalid string. Length must be a multiple of 4')\n }\n\n // Trim off extra bytes after placeholder bytes are found\n // See: https://github.com/beatgammit/base64-js/issues/42\n var validLen = b64.indexOf('=')\n if (validLen === -1) validLen = len\n\n var placeHoldersLen = validLen === len\n ? 0\n : 4 - (validLen % 4)\n\n return [validLen, placeHoldersLen]\n}\n\n// base64 is 4/3 + up to two characters of the original data\nfunction byteLength (b64) {\n var lens = getLens(b64)\n var validLen = lens[0]\n var placeHoldersLen = lens[1]\n return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen\n}\n\nfunction _byteLength (b64, validLen, placeHoldersLen) {\n return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen\n}\n\nfunction toByteArray (b64) {\n var tmp\n var lens = getLens(b64)\n var validLen = lens[0]\n var placeHoldersLen = lens[1]\n\n var arr = new Arr(_byteLength(b64, validLen, placeHoldersLen))\n\n var curByte = 0\n\n // if there are placeholders, only get up to the last complete 4 chars\n var len = placeHoldersLen > 0\n ? validLen - 4\n : validLen\n\n var i\n for (i = 0; i < len; i += 4) {\n tmp =\n (revLookup[b64.charCodeAt(i)] << 18) |\n (revLookup[b64.charCodeAt(i + 1)] << 12) |\n (revLookup[b64.charCodeAt(i + 2)] << 6) |\n revLookup[b64.charCodeAt(i + 3)]\n arr[curByte++] = (tmp >> 16) & 0xFF\n arr[curByte++] = (tmp >> 8) & 0xFF\n arr[curByte++] = tmp & 0xFF\n }\n\n if (placeHoldersLen === 2) {\n tmp =\n (revLookup[b64.charCodeAt(i)] << 2) |\n (revLookup[b64.charCodeAt(i + 1)] >> 4)\n arr[curByte++] = tmp & 0xFF\n }\n\n if (placeHoldersLen === 1) {\n tmp =\n (revLookup[b64.charCodeAt(i)] << 10) |\n (revLookup[b64.charCodeAt(i + 1)] << 4) |\n (revLookup[b64.charCodeAt(i + 2)] >> 2)\n arr[curByte++] = (tmp >> 8) & 0xFF\n arr[curByte++] = tmp & 0xFF\n }\n\n return arr\n}\n\nfunction tripletToBase64 (num) {\n return lookup[num >> 18 & 0x3F] +\n lookup[num >> 12 & 0x3F] +\n lookup[num >> 6 & 0x3F] +\n lookup[num & 0x3F]\n}\n\nfunction encodeChunk (uint8, start, end) {\n var tmp\n var output = []\n for (var i = start; i < end; i += 3) {\n tmp =\n ((uint8[i] << 16) & 0xFF0000) +\n ((uint8[i + 1] << 8) & 0xFF00) +\n (uint8[i + 2] & 0xFF)\n output.push(tripletToBase64(tmp))\n }\n return output.join('')\n}\n\nfunction fromByteArray (uint8) {\n var tmp\n var len = uint8.length\n var extraBytes = len % 3 // if we have 1 byte left, pad 2 bytes\n var parts = []\n var maxChunkLength = 16383 // must be multiple of 3\n\n // go through the array every three bytes, we'll deal with trailing stuff later\n for (var i = 0, len2 = len - extraBytes; i < len2; i += maxChunkLength) {\n parts.push(encodeChunk(uint8, i, (i + maxChunkLength) > len2 ? len2 : (i + maxChunkLength)))\n }\n\n // pad the end with zeros, but make sure to not forget the extra bytes\n if (extraBytes === 1) {\n tmp = uint8[len - 1]\n parts.push(\n lookup[tmp >> 2] +\n lookup[(tmp << 4) & 0x3F] +\n '=='\n )\n } else if (extraBytes === 2) {\n tmp = (uint8[len - 2] << 8) + uint8[len - 1]\n parts.push(\n lookup[tmp >> 10] +\n lookup[(tmp >> 4) & 0x3F] +\n lookup[(tmp << 2) & 0x3F] +\n '='\n )\n }\n\n return parts.join('')\n}\n","var bigInt = (function (undefined) {\r\n \"use strict\";\r\n\r\n var BASE = 1e7,\r\n LOG_BASE = 7,\r\n MAX_INT = 9007199254740992,\r\n MAX_INT_ARR = smallToArray(MAX_INT),\r\n DEFAULT_ALPHABET = \"0123456789abcdefghijklmnopqrstuvwxyz\";\r\n\r\n var supportsNativeBigInt = typeof BigInt === \"function\";\r\n\r\n function Integer(v, radix, alphabet, caseSensitive) {\r\n if (typeof v === \"undefined\") return Integer[0];\r\n if (typeof radix !== \"undefined\") return +radix === 10 && !alphabet ? parseValue(v) : parseBase(v, radix, alphabet, caseSensitive);\r\n return parseValue(v);\r\n }\r\n\r\n function BigInteger(value, sign) {\r\n this.value = value;\r\n this.sign = sign;\r\n this.isSmall = false;\r\n }\r\n BigInteger.prototype = Object.create(Integer.prototype);\r\n\r\n function SmallInteger(value) {\r\n this.value = value;\r\n this.sign = value < 0;\r\n this.isSmall = true;\r\n }\r\n SmallInteger.prototype = Object.create(Integer.prototype);\r\n\r\n function NativeBigInt(value) {\r\n this.value = value;\r\n }\r\n NativeBigInt.prototype = Object.create(Integer.prototype);\r\n\r\n function isPrecise(n) {\r\n return -MAX_INT < n && n < MAX_INT;\r\n }\r\n\r\n function smallToArray(n) { // For performance reasons doesn't reference BASE, need to change this function if BASE changes\r\n if (n < 1e7)\r\n return [n];\r\n if (n < 1e14)\r\n return [n % 1e7, Math.floor(n / 1e7)];\r\n return [n % 1e7, Math.floor(n / 1e7) % 1e7, Math.floor(n / 1e14)];\r\n }\r\n\r\n function arrayToSmall(arr) { // If BASE changes this function may need to change\r\n trim(arr);\r\n var length = arr.length;\r\n if (length < 4 && compareAbs(arr, MAX_INT_ARR) < 0) {\r\n switch (length) {\r\n case 0: return 0;\r\n case 1: return arr[0];\r\n case 2: return arr[0] + arr[1] * BASE;\r\n default: return arr[0] + (arr[1] + arr[2] * BASE) * BASE;\r\n }\r\n }\r\n return arr;\r\n }\r\n\r\n function trim(v) {\r\n var i = v.length;\r\n while (v[--i] === 0);\r\n v.length = i + 1;\r\n }\r\n\r\n function createArray(length) { // function shamelessly stolen from Yaffle's library https://github.com/Yaffle/BigInteger\r\n var x = new Array(length);\r\n var i = -1;\r\n while (++i < length) {\r\n x[i] = 0;\r\n }\r\n return x;\r\n }\r\n\r\n function truncate(n) {\r\n if (n > 0) return Math.floor(n);\r\n return Math.ceil(n);\r\n }\r\n\r\n function add(a, b) { // assumes a and b are arrays with a.length >= b.length\r\n var l_a = a.length,\r\n l_b = b.length,\r\n r = new Array(l_a),\r\n carry = 0,\r\n base = BASE,\r\n sum, i;\r\n for (i = 0; i < l_b; i++) {\r\n sum = a[i] + b[i] + carry;\r\n carry = sum >= base ? 1 : 0;\r\n r[i] = sum - carry * base;\r\n }\r\n while (i < l_a) {\r\n sum = a[i] + carry;\r\n carry = sum === base ? 1 : 0;\r\n r[i++] = sum - carry * base;\r\n }\r\n if (carry > 0) r.push(carry);\r\n return r;\r\n }\r\n\r\n function addAny(a, b) {\r\n if (a.length >= b.length) return add(a, b);\r\n return add(b, a);\r\n }\r\n\r\n function addSmall(a, carry) { // assumes a is array, carry is number with 0 <= carry < MAX_INT\r\n var l = a.length,\r\n r = new Array(l),\r\n base = BASE,\r\n sum, i;\r\n for (i = 0; i < l; i++) {\r\n sum = a[i] - base + carry;\r\n carry = Math.floor(sum / base);\r\n r[i] = sum - carry * base;\r\n carry += 1;\r\n }\r\n while (carry > 0) {\r\n r[i++] = carry % base;\r\n carry = Math.floor(carry / base);\r\n }\r\n return r;\r\n }\r\n\r\n BigInteger.prototype.add = function (v) {\r\n var n = parseValue(v);\r\n if (this.sign !== n.sign) {\r\n return this.subtract(n.negate());\r\n }\r\n var a = this.value, b = n.value;\r\n if (n.isSmall) {\r\n return new BigInteger(addSmall(a, Math.abs(b)), this.sign);\r\n }\r\n return new BigInteger(addAny(a, b), this.sign);\r\n };\r\n BigInteger.prototype.plus = BigInteger.prototype.add;\r\n\r\n SmallInteger.prototype.add = function (v) {\r\n var n = parseValue(v);\r\n var a = this.value;\r\n if (a < 0 !== n.sign) {\r\n return this.subtract(n.negate());\r\n }\r\n var b = n.value;\r\n if (n.isSmall) {\r\n if (isPrecise(a + b)) return new SmallInteger(a + b);\r\n b = smallToArray(Math.abs(b));\r\n }\r\n return new BigInteger(addSmall(b, Math.abs(a)), a < 0);\r\n };\r\n SmallInteger.prototype.plus = SmallInteger.prototype.add;\r\n\r\n NativeBigInt.prototype.add = function (v) {\r\n return new NativeBigInt(this.value + parseValue(v).value);\r\n }\r\n NativeBigInt.prototype.plus = NativeBigInt.prototype.add;\r\n\r\n function subtract(a, b) { // assumes a and b are arrays with a >= b\r\n var a_l = a.length,\r\n b_l = b.length,\r\n r = new Array(a_l),\r\n borrow = 0,\r\n base = BASE,\r\n i, difference;\r\n for (i = 0; i < b_l; i++) {\r\n difference = a[i] - borrow - b[i];\r\n if (difference < 0) {\r\n difference += base;\r\n borrow = 1;\r\n } else borrow = 0;\r\n r[i] = difference;\r\n }\r\n for (i = b_l; i < a_l; i++) {\r\n difference = a[i] - borrow;\r\n if (difference < 0) difference += base;\r\n else {\r\n r[i++] = difference;\r\n break;\r\n }\r\n r[i] = difference;\r\n }\r\n for (; i < a_l; i++) {\r\n r[i] = a[i];\r\n }\r\n trim(r);\r\n return r;\r\n }\r\n\r\n function subtractAny(a, b, sign) {\r\n var value;\r\n if (compareAbs(a, b) >= 0) {\r\n value = subtract(a, b);\r\n } else {\r\n value = subtract(b, a);\r\n sign = !sign;\r\n }\r\n value = arrayToSmall(value);\r\n if (typeof value === \"number\") {\r\n if (sign) value = -value;\r\n return new SmallInteger(value);\r\n }\r\n return new BigInteger(value, sign);\r\n }\r\n\r\n function subtractSmall(a, b, sign) { // assumes a is array, b is number with 0 <= b < MAX_INT\r\n var l = a.length,\r\n r = new Array(l),\r\n carry = -b,\r\n base = BASE,\r\n i, difference;\r\n for (i = 0; i < l; i++) {\r\n difference = a[i] + carry;\r\n carry = Math.floor(difference / base);\r\n difference %= base;\r\n r[i] = difference < 0 ? difference + base : difference;\r\n }\r\n r = arrayToSmall(r);\r\n if (typeof r === \"number\") {\r\n if (sign) r = -r;\r\n return new SmallInteger(r);\r\n } return new BigInteger(r, sign);\r\n }\r\n\r\n BigInteger.prototype.subtract = function (v) {\r\n var n = parseValue(v);\r\n if (this.sign !== n.sign) {\r\n return this.add(n.negate());\r\n }\r\n var a = this.value, b = n.value;\r\n if (n.isSmall)\r\n return subtractSmall(a, Math.abs(b), this.sign);\r\n return subtractAny(a, b, this.sign);\r\n };\r\n BigInteger.prototype.minus = BigInteger.prototype.subtract;\r\n\r\n SmallInteger.prototype.subtract = function (v) {\r\n var n = parseValue(v);\r\n var a = this.value;\r\n if (a < 0 !== n.sign) {\r\n return this.add(n.negate());\r\n }\r\n var b = n.value;\r\n if (n.isSmall) {\r\n return new SmallInteger(a - b);\r\n }\r\n return subtractSmall(b, Math.abs(a), a >= 0);\r\n };\r\n SmallInteger.prototype.minus = SmallInteger.prototype.subtract;\r\n\r\n NativeBigInt.prototype.subtract = function (v) {\r\n return new NativeBigInt(this.value - parseValue(v).value);\r\n }\r\n NativeBigInt.prototype.minus = NativeBigInt.prototype.subtract;\r\n\r\n BigInteger.prototype.negate = function () {\r\n return new BigInteger(this.value, !this.sign);\r\n };\r\n SmallInteger.prototype.negate = function () {\r\n var sign = this.sign;\r\n var small = new SmallInteger(-this.value);\r\n small.sign = !sign;\r\n return small;\r\n };\r\n NativeBigInt.prototype.negate = function () {\r\n return new NativeBigInt(-this.value);\r\n }\r\n\r\n BigInteger.prototype.abs = function () {\r\n return new BigInteger(this.value, false);\r\n };\r\n SmallInteger.prototype.abs = function () {\r\n return new SmallInteger(Math.abs(this.value));\r\n };\r\n NativeBigInt.prototype.abs = function () {\r\n return new NativeBigInt(this.value >= 0 ? this.value : -this.value);\r\n }\r\n\r\n\r\n function multiplyLong(a, b) {\r\n var a_l = a.length,\r\n b_l = b.length,\r\n l = a_l + b_l,\r\n r = createArray(l),\r\n base = BASE,\r\n product, carry, i, a_i, b_j;\r\n for (i = 0; i < a_l; ++i) {\r\n a_i = a[i];\r\n for (var j = 0; j < b_l; ++j) {\r\n b_j = b[j];\r\n product = a_i * b_j + r[i + j];\r\n carry = Math.floor(product / base);\r\n r[i + j] = product - carry * base;\r\n r[i + j + 1] += carry;\r\n }\r\n }\r\n trim(r);\r\n return r;\r\n }\r\n\r\n function multiplySmall(a, b) { // assumes a is array, b is number with |b| < BASE\r\n var l = a.length,\r\n r = new Array(l),\r\n base = BASE,\r\n carry = 0,\r\n product, i;\r\n for (i = 0; i < l; i++) {\r\n product = a[i] * b + carry;\r\n carry = Math.floor(product / base);\r\n r[i] = product - carry * base;\r\n }\r\n while (carry > 0) {\r\n r[i++] = carry % base;\r\n carry = Math.floor(carry / base);\r\n }\r\n return r;\r\n }\r\n\r\n function shiftLeft(x, n) {\r\n var r = [];\r\n while (n-- > 0) r.push(0);\r\n return r.concat(x);\r\n }\r\n\r\n function multiplyKaratsuba(x, y) {\r\n var n = Math.max(x.length, y.length);\r\n\r\n if (n <= 30) return multiplyLong(x, y);\r\n n = Math.ceil(n / 2);\r\n\r\n var b = x.slice(n),\r\n a = x.slice(0, n),\r\n d = y.slice(n),\r\n c = y.slice(0, n);\r\n\r\n var ac = multiplyKaratsuba(a, c),\r\n bd = multiplyKaratsuba(b, d),\r\n abcd = multiplyKaratsuba(addAny(a, b), addAny(c, d));\r\n\r\n var product = addAny(addAny(ac, shiftLeft(subtract(subtract(abcd, ac), bd), n)), shiftLeft(bd, 2 * n));\r\n trim(product);\r\n return product;\r\n }\r\n\r\n // The following function is derived from a surface fit of a graph plotting the performance difference\r\n // between long multiplication and karatsuba multiplication versus the lengths of the two arrays.\r\n function useKaratsuba(l1, l2) {\r\n return -0.012 * l1 - 0.012 * l2 + 0.000015 * l1 * l2 > 0;\r\n }\r\n\r\n BigInteger.prototype.multiply = function (v) {\r\n var n = parseValue(v),\r\n a = this.value, b = n.value,\r\n sign = this.sign !== n.sign,\r\n abs;\r\n if (n.isSmall) {\r\n if (b === 0) return Integer[0];\r\n if (b === 1) return this;\r\n if (b === -1) return this.negate();\r\n abs = Math.abs(b);\r\n if (abs < BASE) {\r\n return new BigInteger(multiplySmall(a, abs), sign);\r\n }\r\n b = smallToArray(abs);\r\n }\r\n if (useKaratsuba(a.length, b.length)) // Karatsuba is only faster for certain array sizes\r\n return new BigInteger(multiplyKaratsuba(a, b), sign);\r\n return new BigInteger(multiplyLong(a, b), sign);\r\n };\r\n\r\n BigInteger.prototype.times = BigInteger.prototype.multiply;\r\n\r\n function multiplySmallAndArray(a, b, sign) { // a >= 0\r\n if (a < BASE) {\r\n return new BigInteger(multiplySmall(b, a), sign);\r\n }\r\n return new BigInteger(multiplyLong(b, smallToArray(a)), sign);\r\n }\r\n SmallInteger.prototype._multiplyBySmall = function (a) {\r\n if (isPrecise(a.value * this.value)) {\r\n return new SmallInteger(a.value * this.value);\r\n }\r\n return multiplySmallAndArray(Math.abs(a.value), smallToArray(Math.abs(this.value)), this.sign !== a.sign);\r\n };\r\n BigInteger.prototype._multiplyBySmall = function (a) {\r\n if (a.value === 0) return Integer[0];\r\n if (a.value === 1) return this;\r\n if (a.value === -1) return this.negate();\r\n return multiplySmallAndArray(Math.abs(a.value), this.value, this.sign !== a.sign);\r\n };\r\n SmallInteger.prototype.multiply = function (v) {\r\n return parseValue(v)._multiplyBySmall(this);\r\n };\r\n SmallInteger.prototype.times = SmallInteger.prototype.multiply;\r\n\r\n NativeBigInt.prototype.multiply = function (v) {\r\n return new NativeBigInt(this.value * parseValue(v).value);\r\n }\r\n NativeBigInt.prototype.times = NativeBigInt.prototype.multiply;\r\n\r\n function square(a) {\r\n //console.assert(2 * BASE * BASE < MAX_INT);\r\n var l = a.length,\r\n r = createArray(l + l),\r\n base = BASE,\r\n product, carry, i, a_i, a_j;\r\n for (i = 0; i < l; i++) {\r\n a_i = a[i];\r\n carry = 0 - a_i * a_i;\r\n for (var j = i; j < l; j++) {\r\n a_j = a[j];\r\n product = 2 * (a_i * a_j) + r[i + j] + carry;\r\n carry = Math.floor(product / base);\r\n r[i + j] = product - carry * base;\r\n }\r\n r[i + l] = carry;\r\n }\r\n trim(r);\r\n return r;\r\n }\r\n\r\n BigInteger.prototype.square = function () {\r\n return new BigInteger(square(this.value), false);\r\n };\r\n\r\n SmallInteger.prototype.square = function () {\r\n var value = this.value * this.value;\r\n if (isPrecise(value)) return new SmallInteger(value);\r\n return new BigInteger(square(smallToArray(Math.abs(this.value))), false);\r\n };\r\n\r\n NativeBigInt.prototype.square = function (v) {\r\n return new NativeBigInt(this.value * this.value);\r\n }\r\n\r\n function divMod1(a, b) { // Left over from previous version. Performs faster than divMod2 on smaller input sizes.\r\n var a_l = a.length,\r\n b_l = b.length,\r\n base = BASE,\r\n result = createArray(b.length),\r\n divisorMostSignificantDigit = b[b_l - 1],\r\n // normalization\r\n lambda = Math.ceil(base / (2 * divisorMostSignificantDigit)),\r\n remainder = multiplySmall(a, lambda),\r\n divisor = multiplySmall(b, lambda),\r\n quotientDigit, shift, carry, borrow, i, l, q;\r\n if (remainder.length <= a_l) remainder.push(0);\r\n divisor.push(0);\r\n divisorMostSignificantDigit = divisor[b_l - 1];\r\n for (shift = a_l - b_l; shift >= 0; shift--) {\r\n quotientDigit = base - 1;\r\n if (remainder[shift + b_l] !== divisorMostSignificantDigit) {\r\n quotientDigit = Math.floor((remainder[shift + b_l] * base + remainder[shift + b_l - 1]) / divisorMostSignificantDigit);\r\n }\r\n // quotientDigit <= base - 1\r\n carry = 0;\r\n borrow = 0;\r\n l = divisor.length;\r\n for (i = 0; i < l; i++) {\r\n carry += quotientDigit * divisor[i];\r\n q = Math.floor(carry / base);\r\n borrow += remainder[shift + i] - (carry - q * base);\r\n carry = q;\r\n if (borrow < 0) {\r\n remainder[shift + i] = borrow + base;\r\n borrow = -1;\r\n } else {\r\n remainder[shift + i] = borrow;\r\n borrow = 0;\r\n }\r\n }\r\n while (borrow !== 0) {\r\n quotientDigit -= 1;\r\n carry = 0;\r\n for (i = 0; i < l; i++) {\r\n carry += remainder[shift + i] - base + divisor[i];\r\n if (carry < 0) {\r\n remainder[shift + i] = carry + base;\r\n carry = 0;\r\n } else {\r\n remainder[shift + i] = carry;\r\n carry = 1;\r\n }\r\n }\r\n borrow += carry;\r\n }\r\n result[shift] = quotientDigit;\r\n }\r\n // denormalization\r\n remainder = divModSmall(remainder, lambda)[0];\r\n return [arrayToSmall(result), arrayToSmall(remainder)];\r\n }\r\n\r\n function divMod2(a, b) { // Implementation idea shamelessly stolen from Silent Matt's library http://silentmatt.com/biginteger/\r\n // Performs faster than divMod1 on larger input sizes.\r\n var a_l = a.length,\r\n b_l = b.length,\r\n result = [],\r\n part = [],\r\n base = BASE,\r\n guess, xlen, highx, highy, check;\r\n while (a_l) {\r\n part.unshift(a[--a_l]);\r\n trim(part);\r\n if (compareAbs(part, b) < 0) {\r\n result.push(0);\r\n continue;\r\n }\r\n xlen = part.length;\r\n highx = part[xlen - 1] * base + part[xlen - 2];\r\n highy = b[b_l - 1] * base + b[b_l - 2];\r\n if (xlen > b_l) {\r\n highx = (highx + 1) * base;\r\n }\r\n guess = Math.ceil(highx / highy);\r\n do {\r\n check = multiplySmall(b, guess);\r\n if (compareAbs(check, part) <= 0) break;\r\n guess--;\r\n } while (guess);\r\n result.push(guess);\r\n part = subtract(part, check);\r\n }\r\n result.reverse();\r\n return [arrayToSmall(result), arrayToSmall(part)];\r\n }\r\n\r\n function divModSmall(value, lambda) {\r\n var length = value.length,\r\n quotient = createArray(length),\r\n base = BASE,\r\n i, q, remainder, divisor;\r\n remainder = 0;\r\n for (i = length - 1; i >= 0; --i) {\r\n divisor = remainder * base + value[i];\r\n q = truncate(divisor / lambda);\r\n remainder = divisor - q * lambda;\r\n quotient[i] = q | 0;\r\n }\r\n return [quotient, remainder | 0];\r\n }\r\n\r\n function divModAny(self, v) {\r\n var value, n = parseValue(v);\r\n if (supportsNativeBigInt) {\r\n return [new NativeBigInt(self.value / n.value), new NativeBigInt(self.value % n.value)];\r\n }\r\n var a = self.value, b = n.value;\r\n var quotient;\r\n if (b === 0) throw new Error(\"Cannot divide by zero\");\r\n if (self.isSmall) {\r\n if (n.isSmall) {\r\n return [new SmallInteger(truncate(a / b)), new SmallInteger(a % b)];\r\n }\r\n return [Integer[0], self];\r\n }\r\n if (n.isSmall) {\r\n if (b === 1) return [self, Integer[0]];\r\n if (b == -1) return [self.negate(), Integer[0]];\r\n var abs = Math.abs(b);\r\n if (abs < BASE) {\r\n value = divModSmall(a, abs);\r\n quotient = arrayToSmall(value[0]);\r\n var remainder = value[1];\r\n if (self.sign) remainder = -remainder;\r\n if (typeof quotient === \"number\") {\r\n if (self.sign !== n.sign) quotient = -quotient;\r\n return [new SmallInteger(quotient), new SmallInteger(remainder)];\r\n }\r\n return [new BigInteger(quotient, self.sign !== n.sign), new SmallInteger(remainder)];\r\n }\r\n b = smallToArray(abs);\r\n }\r\n var comparison = compareAbs(a, b);\r\n if (comparison === -1) return [Integer[0], self];\r\n if (comparison === 0) return [Integer[self.sign === n.sign ? 1 : -1], Integer[0]];\r\n\r\n // divMod1 is faster on smaller input sizes\r\n if (a.length + b.length <= 200)\r\n value = divMod1(a, b);\r\n else value = divMod2(a, b);\r\n\r\n quotient = value[0];\r\n var qSign = self.sign !== n.sign,\r\n mod = value[1],\r\n mSign = self.sign;\r\n if (typeof quotient === \"number\") {\r\n if (qSign) quotient = -quotient;\r\n quotient = new SmallInteger(quotient);\r\n } else quotient = new BigInteger(quotient, qSign);\r\n if (typeof mod === \"number\") {\r\n if (mSign) mod = -mod;\r\n mod = new SmallInteger(mod);\r\n } else mod = new BigInteger(mod, mSign);\r\n return [quotient, mod];\r\n }\r\n\r\n BigInteger.prototype.divmod = function (v) {\r\n var result = divModAny(this, v);\r\n return {\r\n quotient: result[0],\r\n remainder: result[1]\r\n };\r\n };\r\n NativeBigInt.prototype.divmod = SmallInteger.prototype.divmod = BigInteger.prototype.divmod;\r\n\r\n\r\n BigInteger.prototype.divide = function (v) {\r\n return divModAny(this, v)[0];\r\n };\r\n NativeBigInt.prototype.over = NativeBigInt.prototype.divide = function (v) {\r\n return new NativeBigInt(this.value / parseValue(v).value);\r\n };\r\n SmallInteger.prototype.over = SmallInteger.prototype.divide = BigInteger.prototype.over = BigInteger.prototype.divide;\r\n\r\n BigInteger.prototype.mod = function (v) {\r\n return divModAny(this, v)[1];\r\n };\r\n NativeBigInt.prototype.mod = NativeBigInt.prototype.remainder = function (v) {\r\n return new NativeBigInt(this.value % parseValue(v).value);\r\n };\r\n SmallInteger.prototype.remainder = SmallInteger.prototype.mod = BigInteger.prototype.remainder = BigInteger.prototype.mod;\r\n\r\n BigInteger.prototype.pow = function (v) {\r\n var n = parseValue(v),\r\n a = this.value,\r\n b = n.value,\r\n value, x, y;\r\n if (b === 0) return Integer[1];\r\n if (a === 0) return Integer[0];\r\n if (a === 1) return Integer[1];\r\n if (a === -1) return n.isEven() ? Integer[1] : Integer[-1];\r\n if (n.sign) {\r\n return Integer[0];\r\n }\r\n if (!n.isSmall) throw new Error(\"The exponent \" + n.toString() + \" is too large.\");\r\n if (this.isSmall) {\r\n if (isPrecise(value = Math.pow(a, b)))\r\n return new SmallInteger(truncate(value));\r\n }\r\n x = this;\r\n y = Integer[1];\r\n while (true) {\r\n if (b & 1 === 1) {\r\n y = y.times(x);\r\n --b;\r\n }\r\n if (b === 0) break;\r\n b /= 2;\r\n x = x.square();\r\n }\r\n return y;\r\n };\r\n SmallInteger.prototype.pow = BigInteger.prototype.pow;\r\n\r\n NativeBigInt.prototype.pow = function (v) {\r\n var n = parseValue(v);\r\n var a = this.value, b = n.value;\r\n var _0 = BigInt(0), _1 = BigInt(1), _2 = BigInt(2);\r\n if (b === _0) return Integer[1];\r\n if (a === _0) return Integer[0];\r\n if (a === _1) return Integer[1];\r\n if (a === BigInt(-1)) return n.isEven() ? Integer[1] : Integer[-1];\r\n if (n.isNegative()) return new NativeBigInt(_0);\r\n var x = this;\r\n var y = Integer[1];\r\n while (true) {\r\n if ((b & _1) === _1) {\r\n y = y.times(x);\r\n --b;\r\n }\r\n if (b === _0) break;\r\n b /= _2;\r\n x = x.square();\r\n }\r\n return y;\r\n }\r\n\r\n BigInteger.prototype.modPow = function (exp, mod) {\r\n exp = parseValue(exp);\r\n mod = parseValue(mod);\r\n if (mod.isZero()) throw new Error(\"Cannot take modPow with modulus 0\");\r\n var r = Integer[1],\r\n base = this.mod(mod);\r\n if (exp.isNegative()) {\r\n exp = exp.multiply(Integer[-1]);\r\n base = base.modInv(mod);\r\n }\r\n while (exp.isPositive()) {\r\n if (base.isZero()) return Integer[0];\r\n if (exp.isOdd()) r = r.multiply(base).mod(mod);\r\n exp = exp.divide(2);\r\n base = base.square().mod(mod);\r\n }\r\n return r;\r\n };\r\n NativeBigInt.prototype.modPow = SmallInteger.prototype.modPow = BigInteger.prototype.modPow;\r\n\r\n function compareAbs(a, b) {\r\n if (a.length !== b.length) {\r\n return a.length > b.length ? 1 : -1;\r\n }\r\n for (var i = a.length - 1; i >= 0; i--) {\r\n if (a[i] !== b[i]) return a[i] > b[i] ? 1 : -1;\r\n }\r\n return 0;\r\n }\r\n\r\n BigInteger.prototype.compareAbs = function (v) {\r\n var n = parseValue(v),\r\n a = this.value,\r\n b = n.value;\r\n if (n.isSmall) return 1;\r\n return compareAbs(a, b);\r\n };\r\n SmallInteger.prototype.compareAbs = function (v) {\r\n var n = parseValue(v),\r\n a = Math.abs(this.value),\r\n b = n.value;\r\n if (n.isSmall) {\r\n b = Math.abs(b);\r\n return a === b ? 0 : a > b ? 1 : -1;\r\n }\r\n return -1;\r\n };\r\n NativeBigInt.prototype.compareAbs = function (v) {\r\n var a = this.value;\r\n var b = parseValue(v).value;\r\n a = a >= 0 ? a : -a;\r\n b = b >= 0 ? b : -b;\r\n return a === b ? 0 : a > b ? 1 : -1;\r\n }\r\n\r\n BigInteger.prototype.compare = function (v) {\r\n // See discussion about comparison with Infinity:\r\n // https://github.com/peterolson/BigInteger.js/issues/61\r\n if (v === Infinity) {\r\n return -1;\r\n }\r\n if (v === -Infinity) {\r\n return 1;\r\n }\r\n\r\n var n = parseValue(v),\r\n a = this.value,\r\n b = n.value;\r\n if (this.sign !== n.sign) {\r\n return n.sign ? 1 : -1;\r\n }\r\n if (n.isSmall) {\r\n return this.sign ? -1 : 1;\r\n }\r\n return compareAbs(a, b) * (this.sign ? -1 : 1);\r\n };\r\n BigInteger.prototype.compareTo = BigInteger.prototype.compare;\r\n\r\n SmallInteger.prototype.compare = function (v) {\r\n if (v === Infinity) {\r\n return -1;\r\n }\r\n if (v === -Infinity) {\r\n return 1;\r\n }\r\n\r\n var n = parseValue(v),\r\n a = this.value,\r\n b = n.value;\r\n if (n.isSmall) {\r\n return a == b ? 0 : a > b ? 1 : -1;\r\n }\r\n if (a < 0 !== n.sign) {\r\n return a < 0 ? -1 : 1;\r\n }\r\n return a < 0 ? 1 : -1;\r\n };\r\n SmallInteger.prototype.compareTo = SmallInteger.prototype.compare;\r\n\r\n NativeBigInt.prototype.compare = function (v) {\r\n if (v === Infinity) {\r\n return -1;\r\n }\r\n if (v === -Infinity) {\r\n return 1;\r\n }\r\n var a = this.value;\r\n var b = parseValue(v).value;\r\n return a === b ? 0 : a > b ? 1 : -1;\r\n }\r\n NativeBigInt.prototype.compareTo = NativeBigInt.prototype.compare;\r\n\r\n BigInteger.prototype.equals = function (v) {\r\n return this.compare(v) === 0;\r\n };\r\n NativeBigInt.prototype.eq = NativeBigInt.prototype.equals = SmallInteger.prototype.eq = SmallInteger.prototype.equals = BigInteger.prototype.eq = BigInteger.prototype.equals;\r\n\r\n BigInteger.prototype.notEquals = function (v) {\r\n return this.compare(v) !== 0;\r\n };\r\n NativeBigInt.prototype.neq = NativeBigInt.prototype.notEquals = SmallInteger.prototype.neq = SmallInteger.prototype.notEquals = BigInteger.prototype.neq = BigInteger.prototype.notEquals;\r\n\r\n BigInteger.prototype.greater = function (v) {\r\n return this.compare(v) > 0;\r\n };\r\n NativeBigInt.prototype.gt = NativeBigInt.prototype.greater = SmallInteger.prototype.gt = SmallInteger.prototype.greater = BigInteger.prototype.gt = BigInteger.prototype.greater;\r\n\r\n BigInteger.prototype.lesser = function (v) {\r\n return this.compare(v) < 0;\r\n };\r\n NativeBigInt.prototype.lt = NativeBigInt.prototype.lesser = SmallInteger.prototype.lt = SmallInteger.prototype.lesser = BigInteger.prototype.lt = BigInteger.prototype.lesser;\r\n\r\n BigInteger.prototype.greaterOrEquals = function (v) {\r\n return this.compare(v) >= 0;\r\n };\r\n NativeBigInt.prototype.geq = NativeBigInt.prototype.greaterOrEquals = SmallInteger.prototype.geq = SmallInteger.prototype.greaterOrEquals = BigInteger.prototype.geq = BigInteger.prototype.greaterOrEquals;\r\n\r\n BigInteger.prototype.lesserOrEquals = function (v) {\r\n return this.compare(v) <= 0;\r\n };\r\n NativeBigInt.prototype.leq = NativeBigInt.prototype.lesserOrEquals = SmallInteger.prototype.leq = SmallInteger.prototype.lesserOrEquals = BigInteger.prototype.leq = BigInteger.prototype.lesserOrEquals;\r\n\r\n BigInteger.prototype.isEven = function () {\r\n return (this.value[0] & 1) === 0;\r\n };\r\n SmallInteger.prototype.isEven = function () {\r\n return (this.value & 1) === 0;\r\n };\r\n NativeBigInt.prototype.isEven = function () {\r\n return (this.value & BigInt(1)) === BigInt(0);\r\n }\r\n\r\n BigInteger.prototype.isOdd = function () {\r\n return (this.value[0] & 1) === 1;\r\n };\r\n SmallInteger.prototype.isOdd = function () {\r\n return (this.value & 1) === 1;\r\n };\r\n NativeBigInt.prototype.isOdd = function () {\r\n return (this.value & BigInt(1)) === BigInt(1);\r\n }\r\n\r\n BigInteger.prototype.isPositive = function () {\r\n return !this.sign;\r\n };\r\n SmallInteger.prototype.isPositive = function () {\r\n return this.value > 0;\r\n };\r\n NativeBigInt.prototype.isPositive = SmallInteger.prototype.isPositive;\r\n\r\n BigInteger.prototype.isNegative = function () {\r\n return this.sign;\r\n };\r\n SmallInteger.prototype.isNegative = function () {\r\n return this.value < 0;\r\n };\r\n NativeBigInt.prototype.isNegative = SmallInteger.prototype.isNegative;\r\n\r\n BigInteger.prototype.isUnit = function () {\r\n return false;\r\n };\r\n SmallInteger.prototype.isUnit = function () {\r\n return Math.abs(this.value) === 1;\r\n };\r\n NativeBigInt.prototype.isUnit = function () {\r\n return this.abs().value === BigInt(1);\r\n }\r\n\r\n BigInteger.prototype.isZero = function () {\r\n return false;\r\n };\r\n SmallInteger.prototype.isZero = function () {\r\n return this.value === 0;\r\n };\r\n NativeBigInt.prototype.isZero = function () {\r\n return this.value === BigInt(0);\r\n }\r\n\r\n BigInteger.prototype.isDivisibleBy = function (v) {\r\n var n = parseValue(v);\r\n if (n.isZero()) return false;\r\n if (n.isUnit()) return true;\r\n if (n.compareAbs(2) === 0) return this.isEven();\r\n return this.mod(n).isZero();\r\n };\r\n NativeBigInt.prototype.isDivisibleBy = SmallInteger.prototype.isDivisibleBy = BigInteger.prototype.isDivisibleBy;\r\n\r\n function isBasicPrime(v) {\r\n var n = v.abs();\r\n if (n.isUnit()) return false;\r\n if (n.equals(2) || n.equals(3) || n.equals(5)) return true;\r\n if (n.isEven() || n.isDivisibleBy(3) || n.isDivisibleBy(5)) return false;\r\n if (n.lesser(49)) return true;\r\n // we don't know if it's prime: let the other functions figure it out\r\n }\r\n\r\n function millerRabinTest(n, a) {\r\n var nPrev = n.prev(),\r\n b = nPrev,\r\n r = 0,\r\n d, t, i, x;\r\n while (b.isEven()) b = b.divide(2), r++;\r\n next: for (i = 0; i < a.length; i++) {\r\n if (n.lesser(a[i])) continue;\r\n x = bigInt(a[i]).modPow(b, n);\r\n if (x.isUnit() || x.equals(nPrev)) continue;\r\n for (d = r - 1; d != 0; d--) {\r\n x = x.square().mod(n);\r\n if (x.isUnit()) return false;\r\n if (x.equals(nPrev)) continue next;\r\n }\r\n return false;\r\n }\r\n return true;\r\n }\r\n\r\n // Set \"strict\" to true to force GRH-supported lower bound of 2*log(N)^2\r\n BigInteger.prototype.isPrime = function (strict) {\r\n var isPrime = isBasicPrime(this);\r\n if (isPrime !== undefined) return isPrime;\r\n var n = this.abs();\r\n var bits = n.bitLength();\r\n if (bits <= 64)\r\n return millerRabinTest(n, [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37]);\r\n var logN = Math.log(2) * bits.toJSNumber();\r\n var t = Math.ceil((strict === true) ? (2 * Math.pow(logN, 2)) : logN);\r\n for (var a = [], i = 0; i < t; i++) {\r\n a.push(bigInt(i + 2));\r\n }\r\n return millerRabinTest(n, a);\r\n };\r\n NativeBigInt.prototype.isPrime = SmallInteger.prototype.isPrime = BigInteger.prototype.isPrime;\r\n\r\n BigInteger.prototype.isProbablePrime = function (iterations, rng) {\r\n var isPrime = isBasicPrime(this);\r\n if (isPrime !== undefined) return isPrime;\r\n var n = this.abs();\r\n var t = iterations === undefined ? 5 : iterations;\r\n for (var a = [], i = 0; i < t; i++) {\r\n a.push(bigInt.randBetween(2, n.minus(2), rng));\r\n }\r\n return millerRabinTest(n, a);\r\n };\r\n NativeBigInt.prototype.isProbablePrime = SmallInteger.prototype.isProbablePrime = BigInteger.prototype.isProbablePrime;\r\n\r\n BigInteger.prototype.modInv = function (n) {\r\n var t = bigInt.zero, newT = bigInt.one, r = parseValue(n), newR = this.abs(), q, lastT, lastR;\r\n while (!newR.isZero()) {\r\n q = r.divide(newR);\r\n lastT = t;\r\n lastR = r;\r\n t = newT;\r\n r = newR;\r\n newT = lastT.subtract(q.multiply(newT));\r\n newR = lastR.subtract(q.multiply(newR));\r\n }\r\n if (!r.isUnit()) throw new Error(this.toString() + \" and \" + n.toString() + \" are not co-prime\");\r\n if (t.compare(0) === -1) {\r\n t = t.add(n);\r\n }\r\n if (this.isNegative()) {\r\n return t.negate();\r\n }\r\n return t;\r\n };\r\n\r\n NativeBigInt.prototype.modInv = SmallInteger.prototype.modInv = BigInteger.prototype.modInv;\r\n\r\n BigInteger.prototype.next = function () {\r\n var value = this.value;\r\n if (this.sign) {\r\n return subtractSmall(value, 1, this.sign);\r\n }\r\n return new BigInteger(addSmall(value, 1), this.sign);\r\n };\r\n SmallInteger.prototype.next = function () {\r\n var value = this.value;\r\n if (value + 1 < MAX_INT) return new SmallInteger(value + 1);\r\n return new BigInteger(MAX_INT_ARR, false);\r\n };\r\n NativeBigInt.prototype.next = function () {\r\n return new NativeBigInt(this.value + BigInt(1));\r\n }\r\n\r\n BigInteger.prototype.prev = function () {\r\n var value = this.value;\r\n if (this.sign) {\r\n return new BigInteger(addSmall(value, 1), true);\r\n }\r\n return subtractSmall(value, 1, this.sign);\r\n };\r\n SmallInteger.prototype.prev = function () {\r\n var value = this.value;\r\n if (value - 1 > -MAX_INT) return new SmallInteger(value - 1);\r\n return new BigInteger(MAX_INT_ARR, true);\r\n };\r\n NativeBigInt.prototype.prev = function () {\r\n return new NativeBigInt(this.value - BigInt(1));\r\n }\r\n\r\n var powersOfTwo = [1];\r\n while (2 * powersOfTwo[powersOfTwo.length - 1] <= BASE) powersOfTwo.push(2 * powersOfTwo[powersOfTwo.length - 1]);\r\n var powers2Length = powersOfTwo.length, highestPower2 = powersOfTwo[powers2Length - 1];\r\n\r\n function shift_isSmall(n) {\r\n return Math.abs(n) <= BASE;\r\n }\r\n\r\n BigInteger.prototype.shiftLeft = function (v) {\r\n var n = parseValue(v).toJSNumber();\r\n if (!shift_isSmall(n)) {\r\n throw new Error(String(n) + \" is too large for shifting.\");\r\n }\r\n if (n < 0) return this.shiftRight(-n);\r\n var result = this;\r\n if (result.isZero()) return result;\r\n while (n >= powers2Length) {\r\n result = result.multiply(highestPower2);\r\n n -= powers2Length - 1;\r\n }\r\n return result.multiply(powersOfTwo[n]);\r\n };\r\n NativeBigInt.prototype.shiftLeft = function(v){\r\n v = parseValue(v)\r\n return new NativeBigInt(this.value << v.value)\r\n }\r\n SmallInteger.prototype.shiftLeft = BigInteger.prototype.shiftLeft;\r\n\r\n BigInteger.prototype.shiftRight = function (v) {\r\n var remQuo;\r\n var n = parseValue(v).toJSNumber();\r\n if (!shift_isSmall(n)) {\r\n throw new Error(String(n) + \" is too large for shifting.\");\r\n }\r\n if (n < 0) return this.shiftLeft(-n);\r\n var result = this;\r\n while (n >= powers2Length) {\r\n if (result.isZero() || (result.isNegative() && result.isUnit())) return result;\r\n remQuo = divModAny(result, highestPower2);\r\n result = remQuo[1].isNegative() ? remQuo[0].prev() : remQuo[0];\r\n n -= powers2Length - 1;\r\n }\r\n remQuo = divModAny(result, powersOfTwo[n]);\r\n return remQuo[1].isNegative() ? remQuo[0].prev() : remQuo[0];\r\n };\r\n NativeBigInt.prototype.shiftRight = function (v){\r\n v = parseValue(v)\r\n return new NativeBigInt(this.value >> v.value)\r\n }\r\n SmallInteger.prototype.shiftRight = BigInteger.prototype.shiftRight;\r\n\r\n function bitwise(x, y, fn) {\r\n y = parseValue(y);\r\n var xSign = x.isNegative(), ySign = y.isNegative();\r\n var xRem = xSign ? x.not() : x,\r\n yRem = ySign ? y.not() : y;\r\n var xDigit = 0, yDigit = 0;\r\n var xDivMod = null, yDivMod = null;\r\n var result = [];\r\n while (!xRem.isZero() || !yRem.isZero()) {\r\n xDivMod = divModAny(xRem, highestPower2);\r\n xDigit = xDivMod[1].toJSNumber();\r\n if (xSign) {\r\n xDigit = highestPower2 - 1 - xDigit; // two's complement for negative numbers\r\n }\r\n\r\n yDivMod = divModAny(yRem, highestPower2);\r\n yDigit = yDivMod[1].toJSNumber();\r\n if (ySign) {\r\n yDigit = highestPower2 - 1 - yDigit; // two's complement for negative numbers\r\n }\r\n\r\n xRem = xDivMod[0];\r\n yRem = yDivMod[0];\r\n result.push(fn(xDigit, yDigit));\r\n }\r\n var sum = fn(xSign ? 1 : 0, ySign ? 1 : 0) !== 0 ? bigInt(-1) : bigInt(0);\r\n for (var i = result.length - 1; i >= 0; i -= 1) {\r\n sum = sum.multiply(highestPower2).add(bigInt(result[i]));\r\n }\r\n return sum;\r\n }\r\n\r\n BigInteger.prototype.not = function () {\r\n return this.negate().prev();\r\n };\r\n NativeBigInt.prototype.not = SmallInteger.prototype.not = BigInteger.prototype.not;\r\n\r\n BigInteger.prototype.and = function (n) {\r\n return bitwise(this, n, function (a, b) { return a & b; });\r\n };\r\n NativeBigInt.prototype.and = SmallInteger.prototype.and = BigInteger.prototype.and;\r\n\r\n BigInteger.prototype.or = function (n) {\r\n return bitwise(this, n, function (a, b) { return a | b; });\r\n };\r\n NativeBigInt.prototype.or = SmallInteger.prototype.or = BigInteger.prototype.or;\r\n\r\n BigInteger.prototype.xor = function (n) {\r\n return bitwise(this, n, function (a, b) { return a ^ b; });\r\n };\r\n NativeBigInt.prototype.xor = SmallInteger.prototype.xor = BigInteger.prototype.xor;\r\n\r\n var LOBMASK_I = 1 << 30, LOBMASK_BI = (BASE & -BASE) * (BASE & -BASE) | LOBMASK_I;\r\n function roughLOB(n) { // get lowestOneBit (rough)\r\n // SmallInteger: return Min(lowestOneBit(n), 1 << 30)\r\n // BigInteger: return Min(lowestOneBit(n), 1 << 14) [BASE=1e7]\r\n var v = n.value,\r\n x = typeof v === \"number\" ? v | LOBMASK_I :\r\n typeof v === \"bigint\" ? v | BigInt(LOBMASK_I) :\r\n v[0] + v[1] * BASE | LOBMASK_BI;\r\n return x & -x;\r\n }\r\n\r\n function integerLogarithm(value, base) {\r\n if (base.compareTo(value) <= 0) {\r\n var tmp = integerLogarithm(value, base.square(base));\r\n var p = tmp.p;\r\n var e = tmp.e;\r\n var t = p.multiply(base);\r\n return t.compareTo(value) <= 0 ? { p: t, e: e * 2 + 1 } : { p: p, e: e * 2 };\r\n }\r\n return { p: bigInt(1), e: 0 };\r\n }\r\n\r\n BigInteger.prototype.bitLength = function () {\r\n var n = this;\r\n if (n.compareTo(bigInt(0)) < 0) {\r\n n = n.negate().subtract(bigInt(1));\r\n }\r\n if (n.compareTo(bigInt(0)) === 0) {\r\n return bigInt(0);\r\n }\r\n return bigInt(integerLogarithm(n, bigInt(2)).e).add(bigInt(1));\r\n }\r\n NativeBigInt.prototype.bitLength = SmallInteger.prototype.bitLength = BigInteger.prototype.bitLength;\r\n\r\n function max(a, b) {\r\n a = parseValue(a);\r\n b = parseValue(b);\r\n return a.greater(b) ? a : b;\r\n }\r\n function min(a, b) {\r\n a = parseValue(a);\r\n b = parseValue(b);\r\n return a.lesser(b) ? a : b;\r\n }\r\n function gcd(a, b) {\r\n a = parseValue(a).abs();\r\n b = parseValue(b).abs();\r\n if (a.equals(b)) return a;\r\n if (a.isZero()) return b;\r\n if (b.isZero()) return a;\r\n var c = Integer[1], d, t;\r\n while (a.isEven() && b.isEven()) {\r\n d = min(roughLOB(a), roughLOB(b));\r\n a = a.divide(d);\r\n b = b.divide(d);\r\n c = c.multiply(d);\r\n }\r\n while (a.isEven()) {\r\n a = a.divide(roughLOB(a));\r\n }\r\n do {\r\n while (b.isEven()) {\r\n b = b.divide(roughLOB(b));\r\n }\r\n if (a.greater(b)) {\r\n t = b; b = a; a = t;\r\n }\r\n b = b.subtract(a);\r\n } while (!b.isZero());\r\n return c.isUnit() ? a : a.multiply(c);\r\n }\r\n function lcm(a, b) {\r\n a = parseValue(a).abs();\r\n b = parseValue(b).abs();\r\n return a.divide(gcd(a, b)).multiply(b);\r\n }\r\n function randBetween(a, b, rng) {\r\n a = parseValue(a);\r\n b = parseValue(b);\r\n var usedRNG = rng || Math.random;\r\n var low = min(a, b), high = max(a, b);\r\n var range = high.subtract(low).add(1);\r\n if (range.isSmall) return low.add(Math.floor(usedRNG() * range));\r\n var digits = toBase(range, BASE).value;\r\n var result = [], restricted = true;\r\n for (var i = 0; i < digits.length; i++) {\r\n var top = restricted ? digits[i] : BASE;\r\n var digit = truncate(usedRNG() * top);\r\n result.push(digit);\r\n if (digit < top) restricted = false;\r\n }\r\n return low.add(Integer.fromArray(result, BASE, false));\r\n }\r\n\r\n var parseBase = function (text, base, alphabet, caseSensitive) {\r\n alphabet = alphabet || DEFAULT_ALPHABET;\r\n text = String(text);\r\n if (!caseSensitive) {\r\n text = text.toLowerCase();\r\n alphabet = alphabet.toLowerCase();\r\n }\r\n var length = text.length;\r\n var i;\r\n var absBase = Math.abs(base);\r\n var alphabetValues = {};\r\n for (i = 0; i < alphabet.length; i++) {\r\n alphabetValues[alphabet[i]] = i;\r\n }\r\n for (i = 0; i < length; i++) {\r\n var c = text[i];\r\n if (c === \"-\") continue;\r\n if (c in alphabetValues) {\r\n if (alphabetValues[c] >= absBase) {\r\n if (c === \"1\" && absBase === 1) continue;\r\n throw new Error(c + \" is not a valid digit in base \" + base + \".\");\r\n }\r\n }\r\n }\r\n base = parseValue(base);\r\n var digits = [];\r\n var isNegative = text[0] === \"-\";\r\n for (i = isNegative ? 1 : 0; i < text.length; i++) {\r\n var c = text[i];\r\n if (c in alphabetValues) digits.push(parseValue(alphabetValues[c]));\r\n else if (c === \"<\") {\r\n var start = i;\r\n do { i++; } while (text[i] !== \">\" && i < text.length);\r\n digits.push(parseValue(text.slice(start + 1, i)));\r\n }\r\n else throw new Error(c + \" is not a valid character\");\r\n }\r\n return parseBaseFromArray(digits, base, isNegative);\r\n };\r\n\r\n function parseBaseFromArray(digits, base, isNegative) {\r\n var val = Integer[0], pow = Integer[1], i;\r\n for (i = digits.length - 1; i >= 0; i--) {\r\n val = val.add(digits[i].times(pow));\r\n pow = pow.times(base);\r\n }\r\n return isNegative ? val.negate() : val;\r\n }\r\n\r\n function stringify(digit, alphabet) {\r\n alphabet = alphabet || DEFAULT_ALPHABET;\r\n if (digit < alphabet.length) {\r\n return alphabet[digit];\r\n }\r\n return \"<\" + digit + \">\";\r\n }\r\n\r\n function toBase(n, base) {\r\n base = bigInt(base);\r\n if (base.isZero()) {\r\n if (n.isZero()) return { value: [0], isNegative: false };\r\n throw new Error(\"Cannot convert nonzero numbers to base 0.\");\r\n }\r\n if (base.equals(-1)) {\r\n if (n.isZero()) return { value: [0], isNegative: false };\r\n if (n.isNegative())\r\n return {\r\n value: [].concat.apply([], Array.apply(null, Array(-n.toJSNumber()))\r\n .map(Array.prototype.valueOf, [1, 0])\r\n ),\r\n isNegative: false\r\n };\r\n\r\n var arr = Array.apply(null, Array(n.toJSNumber() - 1))\r\n .map(Array.prototype.valueOf, [0, 1]);\r\n arr.unshift([1]);\r\n return {\r\n value: [].concat.apply([], arr),\r\n isNegative: false\r\n };\r\n }\r\n\r\n var neg = false;\r\n if (n.isNegative() && base.isPositive()) {\r\n neg = true;\r\n n = n.abs();\r\n }\r\n if (base.isUnit()) {\r\n if (n.isZero()) return { value: [0], isNegative: false };\r\n\r\n return {\r\n value: Array.apply(null, Array(n.toJSNumber()))\r\n .map(Number.prototype.valueOf, 1),\r\n isNegative: neg\r\n };\r\n }\r\n var out = [];\r\n var left = n, divmod;\r\n while (left.isNegative() || left.compareAbs(base) >= 0) {\r\n divmod = left.divmod(base);\r\n left = divmod.quotient;\r\n var digit = divmod.remainder;\r\n if (digit.isNegative()) {\r\n digit = base.minus(digit).abs();\r\n left = left.next();\r\n }\r\n out.push(digit.toJSNumber());\r\n }\r\n out.push(left.toJSNumber());\r\n return { value: out.reverse(), isNegative: neg };\r\n }\r\n\r\n function toBaseString(n, base, alphabet) {\r\n var arr = toBase(n, base);\r\n return (arr.isNegative ? \"-\" : \"\") + arr.value.map(function (x) {\r\n return stringify(x, alphabet);\r\n }).join('');\r\n }\r\n\r\n BigInteger.prototype.toArray = function (radix) {\r\n return toBase(this, radix);\r\n };\r\n\r\n SmallInteger.prototype.toArray = function (radix) {\r\n return toBase(this, radix);\r\n };\r\n\r\n NativeBigInt.prototype.toArray = function (radix) {\r\n return toBase(this, radix);\r\n };\r\n\r\n BigInteger.prototype.toString = function (radix, alphabet) {\r\n if (radix === undefined) radix = 10;\r\n if (radix !== 10) return toBaseString(this, radix, alphabet);\r\n var v = this.value, l = v.length, str = String(v[--l]), zeros = \"0000000\", digit;\r\n while (--l >= 0) {\r\n digit = String(v[l]);\r\n str += zeros.slice(digit.length) + digit;\r\n }\r\n var sign = this.sign ? \"-\" : \"\";\r\n return sign + str;\r\n };\r\n\r\n SmallInteger.prototype.toString = function (radix, alphabet) {\r\n if (radix === undefined) radix = 10;\r\n if (radix != 10) return toBaseString(this, radix, alphabet);\r\n return String(this.value);\r\n };\r\n\r\n NativeBigInt.prototype.toString = SmallInteger.prototype.toString;\r\n\r\n NativeBigInt.prototype.toJSON = BigInteger.prototype.toJSON = SmallInteger.prototype.toJSON = function () { return this.toString(); }\r\n\r\n BigInteger.prototype.valueOf = function () {\r\n return parseInt(this.toString(), 10);\r\n };\r\n BigInteger.prototype.toJSNumber = BigInteger.prototype.valueOf;\r\n\r\n SmallInteger.prototype.valueOf = function () {\r\n return this.value;\r\n };\r\n SmallInteger.prototype.toJSNumber = SmallInteger.prototype.valueOf;\r\n NativeBigInt.prototype.valueOf = NativeBigInt.prototype.toJSNumber = function () {\r\n return parseInt(this.toString(), 10);\r\n }\r\n\r\n function parseStringValue(v) {\r\n if (isPrecise(+v)) {\r\n var x = +v;\r\n if (x === truncate(x))\r\n return supportsNativeBigInt ? new NativeBigInt(BigInt(x)) : new SmallInteger(x);\r\n throw new Error(\"Invalid integer: \" + v);\r\n }\r\n var sign = v[0] === \"-\";\r\n if (sign) v = v.slice(1);\r\n var split = v.split(/e/i);\r\n if (split.length > 2) throw new Error(\"Invalid integer: \" + split.join(\"e\"));\r\n if (split.length === 2) {\r\n var exp = split[1];\r\n if (exp[0] === \"+\") exp = exp.slice(1);\r\n exp = +exp;\r\n if (exp !== truncate(exp) || !isPrecise(exp)) throw new Error(\"Invalid integer: \" + exp + \" is not a valid exponent.\");\r\n var text = split[0];\r\n var decimalPlace = text.indexOf(\".\");\r\n if (decimalPlace >= 0) {\r\n exp -= text.length - decimalPlace - 1;\r\n text = text.slice(0, decimalPlace) + text.slice(decimalPlace + 1);\r\n }\r\n if (exp < 0) throw new Error(\"Cannot include negative exponent part for integers\");\r\n text += (new Array(exp + 1)).join(\"0\");\r\n v = text;\r\n }\r\n var isValid = /^([0-9][0-9]*)$/.test(v);\r\n if (!isValid) throw new Error(\"Invalid integer: \" + v);\r\n if (supportsNativeBigInt) {\r\n return new NativeBigInt(BigInt(sign ? \"-\" + v : v));\r\n }\r\n var r = [], max = v.length, l = LOG_BASE, min = max - l;\r\n while (max > 0) {\r\n r.push(+v.slice(min, max));\r\n min -= l;\r\n if (min < 0) min = 0;\r\n max -= l;\r\n }\r\n trim(r);\r\n return new BigInteger(r, sign);\r\n }\r\n\r\n function parseNumberValue(v) {\r\n if (supportsNativeBigInt) {\r\n return new NativeBigInt(BigInt(v));\r\n }\r\n if (isPrecise(v)) {\r\n if (v !== truncate(v)) throw new Error(v + \" is not an integer.\");\r\n return new SmallInteger(v);\r\n }\r\n return parseStringValue(v.toString());\r\n }\r\n\r\n function parseValue(v) {\r\n if (typeof v === \"number\") {\r\n return parseNumberValue(v);\r\n }\r\n if (typeof v === \"string\") {\r\n return parseStringValue(v);\r\n }\r\n if (typeof v === \"bigint\") {\r\n return new NativeBigInt(v);\r\n }\r\n return v;\r\n }\r\n // Pre-define numbers in range [-999,999]\r\n for (var i = 0; i < 1000; i++) {\r\n Integer[i] = parseValue(i);\r\n if (i > 0) Integer[-i] = parseValue(-i);\r\n }\r\n // Backwards compatibility\r\n Integer.one = Integer[1];\r\n Integer.zero = Integer[0];\r\n Integer.minusOne = Integer[-1];\r\n Integer.max = max;\r\n Integer.min = min;\r\n Integer.gcd = gcd;\r\n Integer.lcm = lcm;\r\n Integer.isInstance = function (x) { return x instanceof BigInteger || x instanceof SmallInteger || x instanceof NativeBigInt; };\r\n Integer.randBetween = randBetween;\r\n\r\n Integer.fromArray = function (digits, base, isNegative) {\r\n return parseBaseFromArray(digits.map(parseValue), parseValue(base || 10), isNegative);\r\n };\r\n\r\n return Integer;\r\n})();\r\n\r\n// Node.js check\r\nif (typeof module !== \"undefined\" && module.hasOwnProperty(\"exports\")) {\r\n module.exports = bigInt;\r\n}\r\n\r\n//amd check\r\nif (typeof define === \"function\" && define.amd) {\r\n define( function () {\r\n return bigInt;\r\n });\r\n}\r\n","/*!\n * The buffer module from node.js, for the browser.\n *\n * @author Feross Aboukhadijeh \n * @license MIT\n */\n/* eslint-disable no-proto */\n\n'use strict'\n\nconst base64 = require('base64-js')\nconst ieee754 = require('ieee754')\nconst customInspectSymbol =\n (typeof Symbol === 'function' && typeof Symbol['for'] === 'function') // eslint-disable-line dot-notation\n ? Symbol['for']('nodejs.util.inspect.custom') // eslint-disable-line dot-notation\n : null\n\nexports.Buffer = Buffer\nexports.SlowBuffer = SlowBuffer\nexports.INSPECT_MAX_BYTES = 50\n\nconst K_MAX_LENGTH = 0x7fffffff\nexports.kMaxLength = K_MAX_LENGTH\n\n/**\n * If `Buffer.TYPED_ARRAY_SUPPORT`:\n * === true Use Uint8Array implementation (fastest)\n * === false Print warning and recommend using `buffer` v4.x which has an Object\n * implementation (most compatible, even IE6)\n *\n * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+,\n * Opera 11.6+, iOS 4.2+.\n *\n * We report that the browser does not support typed arrays if the are not subclassable\n * using __proto__. Firefox 4-29 lacks support for adding new properties to `Uint8Array`\n * (See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438). IE 10 lacks support\n * for __proto__ and has a buggy typed array implementation.\n */\nBuffer.TYPED_ARRAY_SUPPORT = typedArraySupport()\n\nif (!Buffer.TYPED_ARRAY_SUPPORT && typeof console !== 'undefined' &&\n typeof console.error === 'function') {\n console.error(\n 'This browser lacks typed array (Uint8Array) support which is required by ' +\n '`buffer` v5.x. Use `buffer` v4.x if you require old browser support.'\n )\n}\n\nfunction typedArraySupport () {\n // Can typed array instances can be augmented?\n try {\n const arr = new Uint8Array(1)\n const proto = { foo: function () { return 42 } }\n Object.setPrototypeOf(proto, Uint8Array.prototype)\n Object.setPrototypeOf(arr, proto)\n return arr.foo() === 42\n } catch (e) {\n return false\n }\n}\n\nObject.defineProperty(Buffer.prototype, 'parent', {\n enumerable: true,\n get: function () {\n if (!Buffer.isBuffer(this)) return undefined\n return this.buffer\n }\n})\n\nObject.defineProperty(Buffer.prototype, 'offset', {\n enumerable: true,\n get: function () {\n if (!Buffer.isBuffer(this)) return undefined\n return this.byteOffset\n }\n})\n\nfunction createBuffer (length) {\n if (length > K_MAX_LENGTH) {\n throw new RangeError('The value \"' + length + '\" is invalid for option \"size\"')\n }\n // Return an augmented `Uint8Array` instance\n const buf = new Uint8Array(length)\n Object.setPrototypeOf(buf, Buffer.prototype)\n return buf\n}\n\n/**\n * The Buffer constructor returns instances of `Uint8Array` that have their\n * prototype changed to `Buffer.prototype`. Furthermore, `Buffer` is a subclass of\n * `Uint8Array`, so the returned instances will have all the node `Buffer` methods\n * and the `Uint8Array` methods. Square bracket notation works as expected -- it\n * returns a single octet.\n *\n * The `Uint8Array` prototype remains unmodified.\n */\n\nfunction Buffer (arg, encodingOrOffset, length) {\n // Common case.\n if (typeof arg === 'number') {\n if (typeof encodingOrOffset === 'string') {\n throw new TypeError(\n 'The \"string\" argument must be of type string. Received type number'\n )\n }\n return allocUnsafe(arg)\n }\n return from(arg, encodingOrOffset, length)\n}\n\nBuffer.poolSize = 8192 // not used by this implementation\n\nfunction from (value, encodingOrOffset, length) {\n if (typeof value === 'string') {\n return fromString(value, encodingOrOffset)\n }\n\n if (ArrayBuffer.isView(value)) {\n return fromArrayView(value)\n }\n\n if (value == null) {\n throw new TypeError(\n 'The first argument must be one of type string, Buffer, ArrayBuffer, Array, ' +\n 'or Array-like Object. Received type ' + (typeof value)\n )\n }\n\n if (isInstance(value, ArrayBuffer) ||\n (value && isInstance(value.buffer, ArrayBuffer))) {\n return fromArrayBuffer(value, encodingOrOffset, length)\n }\n\n if (typeof SharedArrayBuffer !== 'undefined' &&\n (isInstance(value, SharedArrayBuffer) ||\n (value && isInstance(value.buffer, SharedArrayBuffer)))) {\n return fromArrayBuffer(value, encodingOrOffset, length)\n }\n\n if (typeof value === 'number') {\n throw new TypeError(\n 'The \"value\" argument must not be of type number. Received type number'\n )\n }\n\n const valueOf = value.valueOf && value.valueOf()\n if (valueOf != null && valueOf !== value) {\n return Buffer.from(valueOf, encodingOrOffset, length)\n }\n\n const b = fromObject(value)\n if (b) return b\n\n if (typeof Symbol !== 'undefined' && Symbol.toPrimitive != null &&\n typeof value[Symbol.toPrimitive] === 'function') {\n return Buffer.from(value[Symbol.toPrimitive]('string'), encodingOrOffset, length)\n }\n\n throw new TypeError(\n 'The first argument must be one of type string, Buffer, ArrayBuffer, Array, ' +\n 'or Array-like Object. Received type ' + (typeof value)\n )\n}\n\n/**\n * Functionally equivalent to Buffer(arg, encoding) but throws a TypeError\n * if value is a number.\n * Buffer.from(str[, encoding])\n * Buffer.from(array)\n * Buffer.from(buffer)\n * Buffer.from(arrayBuffer[, byteOffset[, length]])\n **/\nBuffer.from = function (value, encodingOrOffset, length) {\n return from(value, encodingOrOffset, length)\n}\n\n// Note: Change prototype *after* Buffer.from is defined to workaround Chrome bug:\n// https://github.com/feross/buffer/pull/148\nObject.setPrototypeOf(Buffer.prototype, Uint8Array.prototype)\nObject.setPrototypeOf(Buffer, Uint8Array)\n\nfunction assertSize (size) {\n if (typeof size !== 'number') {\n throw new TypeError('\"size\" argument must be of type number')\n } else if (size < 0) {\n throw new RangeError('The value \"' + size + '\" is invalid for option \"size\"')\n }\n}\n\nfunction alloc (size, fill, encoding) {\n assertSize(size)\n if (size <= 0) {\n return createBuffer(size)\n }\n if (fill !== undefined) {\n // Only pay attention to encoding if it's a string. This\n // prevents accidentally sending in a number that would\n // be interpreted as a start offset.\n return typeof encoding === 'string'\n ? createBuffer(size).fill(fill, encoding)\n : createBuffer(size).fill(fill)\n }\n return createBuffer(size)\n}\n\n/**\n * Creates a new filled Buffer instance.\n * alloc(size[, fill[, encoding]])\n **/\nBuffer.alloc = function (size, fill, encoding) {\n return alloc(size, fill, encoding)\n}\n\nfunction allocUnsafe (size) {\n assertSize(size)\n return createBuffer(size < 0 ? 0 : checked(size) | 0)\n}\n\n/**\n * Equivalent to Buffer(num), by default creates a non-zero-filled Buffer instance.\n * */\nBuffer.allocUnsafe = function (size) {\n return allocUnsafe(size)\n}\n/**\n * Equivalent to SlowBuffer(num), by default creates a non-zero-filled Buffer instance.\n */\nBuffer.allocUnsafeSlow = function (size) {\n return allocUnsafe(size)\n}\n\nfunction fromString (string, encoding) {\n if (typeof encoding !== 'string' || encoding === '') {\n encoding = 'utf8'\n }\n\n if (!Buffer.isEncoding(encoding)) {\n throw new TypeError('Unknown encoding: ' + encoding)\n }\n\n const length = byteLength(string, encoding) | 0\n let buf = createBuffer(length)\n\n const actual = buf.write(string, encoding)\n\n if (actual !== length) {\n // Writing a hex string, for example, that contains invalid characters will\n // cause everything after the first invalid character to be ignored. (e.g.\n // 'abxxcd' will be treated as 'ab')\n buf = buf.slice(0, actual)\n }\n\n return buf\n}\n\nfunction fromArrayLike (array) {\n const length = array.length < 0 ? 0 : checked(array.length) | 0\n const buf = createBuffer(length)\n for (let i = 0; i < length; i += 1) {\n buf[i] = array[i] & 255\n }\n return buf\n}\n\nfunction fromArrayView (arrayView) {\n if (isInstance(arrayView, Uint8Array)) {\n const copy = new Uint8Array(arrayView)\n return fromArrayBuffer(copy.buffer, copy.byteOffset, copy.byteLength)\n }\n return fromArrayLike(arrayView)\n}\n\nfunction fromArrayBuffer (array, byteOffset, length) {\n if (byteOffset < 0 || array.byteLength < byteOffset) {\n throw new RangeError('\"offset\" is outside of buffer bounds')\n }\n\n if (array.byteLength < byteOffset + (length || 0)) {\n throw new RangeError('\"length\" is outside of buffer bounds')\n }\n\n let buf\n if (byteOffset === undefined && length === undefined) {\n buf = new Uint8Array(array)\n } else if (length === undefined) {\n buf = new Uint8Array(array, byteOffset)\n } else {\n buf = new Uint8Array(array, byteOffset, length)\n }\n\n // Return an augmented `Uint8Array` instance\n Object.setPrototypeOf(buf, Buffer.prototype)\n\n return buf\n}\n\nfunction fromObject (obj) {\n if (Buffer.isBuffer(obj)) {\n const len = checked(obj.length) | 0\n const buf = createBuffer(len)\n\n if (buf.length === 0) {\n return buf\n }\n\n obj.copy(buf, 0, 0, len)\n return buf\n }\n\n if (obj.length !== undefined) {\n if (typeof obj.length !== 'number' || numberIsNaN(obj.length)) {\n return createBuffer(0)\n }\n return fromArrayLike(obj)\n }\n\n if (obj.type === 'Buffer' && Array.isArray(obj.data)) {\n return fromArrayLike(obj.data)\n }\n}\n\nfunction checked (length) {\n // Note: cannot use `length < K_MAX_LENGTH` here because that fails when\n // length is NaN (which is otherwise coerced to zero.)\n if (length >= K_MAX_LENGTH) {\n throw new RangeError('Attempt to allocate Buffer larger than maximum ' +\n 'size: 0x' + K_MAX_LENGTH.toString(16) + ' bytes')\n }\n return length | 0\n}\n\nfunction SlowBuffer (length) {\n if (+length != length) { // eslint-disable-line eqeqeq\n length = 0\n }\n return Buffer.alloc(+length)\n}\n\nBuffer.isBuffer = function isBuffer (b) {\n return b != null && b._isBuffer === true &&\n b !== Buffer.prototype // so Buffer.isBuffer(Buffer.prototype) will be false\n}\n\nBuffer.compare = function compare (a, b) {\n if (isInstance(a, Uint8Array)) a = Buffer.from(a, a.offset, a.byteLength)\n if (isInstance(b, Uint8Array)) b = Buffer.from(b, b.offset, b.byteLength)\n if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) {\n throw new TypeError(\n 'The \"buf1\", \"buf2\" arguments must be one of type Buffer or Uint8Array'\n )\n }\n\n if (a === b) return 0\n\n let x = a.length\n let y = b.length\n\n for (let i = 0, len = Math.min(x, y); i < len; ++i) {\n if (a[i] !== b[i]) {\n x = a[i]\n y = b[i]\n break\n }\n }\n\n if (x < y) return -1\n if (y < x) return 1\n return 0\n}\n\nBuffer.isEncoding = function isEncoding (encoding) {\n switch (String(encoding).toLowerCase()) {\n case 'hex':\n case 'utf8':\n case 'utf-8':\n case 'ascii':\n case 'latin1':\n case 'binary':\n case 'base64':\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return true\n default:\n return false\n }\n}\n\nBuffer.concat = function concat (list, length) {\n if (!Array.isArray(list)) {\n throw new TypeError('\"list\" argument must be an Array of Buffers')\n }\n\n if (list.length === 0) {\n return Buffer.alloc(0)\n }\n\n let i\n if (length === undefined) {\n length = 0\n for (i = 0; i < list.length; ++i) {\n length += list[i].length\n }\n }\n\n const buffer = Buffer.allocUnsafe(length)\n let pos = 0\n for (i = 0; i < list.length; ++i) {\n let buf = list[i]\n if (isInstance(buf, Uint8Array)) {\n if (pos + buf.length > buffer.length) {\n if (!Buffer.isBuffer(buf)) buf = Buffer.from(buf)\n buf.copy(buffer, pos)\n } else {\n Uint8Array.prototype.set.call(\n buffer,\n buf,\n pos\n )\n }\n } else if (!Buffer.isBuffer(buf)) {\n throw new TypeError('\"list\" argument must be an Array of Buffers')\n } else {\n buf.copy(buffer, pos)\n }\n pos += buf.length\n }\n return buffer\n}\n\nfunction byteLength (string, encoding) {\n if (Buffer.isBuffer(string)) {\n return string.length\n }\n if (ArrayBuffer.isView(string) || isInstance(string, ArrayBuffer)) {\n return string.byteLength\n }\n if (typeof string !== 'string') {\n throw new TypeError(\n 'The \"string\" argument must be one of type string, Buffer, or ArrayBuffer. ' +\n 'Received type ' + typeof string\n )\n }\n\n const len = string.length\n const mustMatch = (arguments.length > 2 && arguments[2] === true)\n if (!mustMatch && len === 0) return 0\n\n // Use a for loop to avoid recursion\n let loweredCase = false\n for (;;) {\n switch (encoding) {\n case 'ascii':\n case 'latin1':\n case 'binary':\n return len\n case 'utf8':\n case 'utf-8':\n return utf8ToBytes(string).length\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return len * 2\n case 'hex':\n return len >>> 1\n case 'base64':\n return base64ToBytes(string).length\n default:\n if (loweredCase) {\n return mustMatch ? -1 : utf8ToBytes(string).length // assume utf8\n }\n encoding = ('' + encoding).toLowerCase()\n loweredCase = true\n }\n }\n}\nBuffer.byteLength = byteLength\n\nfunction slowToString (encoding, start, end) {\n let loweredCase = false\n\n // No need to verify that \"this.length <= MAX_UINT32\" since it's a read-only\n // property of a typed array.\n\n // This behaves neither like String nor Uint8Array in that we set start/end\n // to their upper/lower bounds if the value passed is out of range.\n // undefined is handled specially as per ECMA-262 6th Edition,\n // Section 13.3.3.7 Runtime Semantics: KeyedBindingInitialization.\n if (start === undefined || start < 0) {\n start = 0\n }\n // Return early if start > this.length. Done here to prevent potential uint32\n // coercion fail below.\n if (start > this.length) {\n return ''\n }\n\n if (end === undefined || end > this.length) {\n end = this.length\n }\n\n if (end <= 0) {\n return ''\n }\n\n // Force coercion to uint32. This will also coerce falsey/NaN values to 0.\n end >>>= 0\n start >>>= 0\n\n if (end <= start) {\n return ''\n }\n\n if (!encoding) encoding = 'utf8'\n\n while (true) {\n switch (encoding) {\n case 'hex':\n return hexSlice(this, start, end)\n\n case 'utf8':\n case 'utf-8':\n return utf8Slice(this, start, end)\n\n case 'ascii':\n return asciiSlice(this, start, end)\n\n case 'latin1':\n case 'binary':\n return latin1Slice(this, start, end)\n\n case 'base64':\n return base64Slice(this, start, end)\n\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return utf16leSlice(this, start, end)\n\n default:\n if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)\n encoding = (encoding + '').toLowerCase()\n loweredCase = true\n }\n }\n}\n\n// This property is used by `Buffer.isBuffer` (and the `is-buffer` npm package)\n// to detect a Buffer instance. It's not possible to use `instanceof Buffer`\n// reliably in a browserify context because there could be multiple different\n// copies of the 'buffer' package in use. This method works even for Buffer\n// instances that were created from another copy of the `buffer` package.\n// See: https://github.com/feross/buffer/issues/154\nBuffer.prototype._isBuffer = true\n\nfunction swap (b, n, m) {\n const i = b[n]\n b[n] = b[m]\n b[m] = i\n}\n\nBuffer.prototype.swap16 = function swap16 () {\n const len = this.length\n if (len % 2 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 16-bits')\n }\n for (let i = 0; i < len; i += 2) {\n swap(this, i, i + 1)\n }\n return this\n}\n\nBuffer.prototype.swap32 = function swap32 () {\n const len = this.length\n if (len % 4 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 32-bits')\n }\n for (let i = 0; i < len; i += 4) {\n swap(this, i, i + 3)\n swap(this, i + 1, i + 2)\n }\n return this\n}\n\nBuffer.prototype.swap64 = function swap64 () {\n const len = this.length\n if (len % 8 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 64-bits')\n }\n for (let i = 0; i < len; i += 8) {\n swap(this, i, i + 7)\n swap(this, i + 1, i + 6)\n swap(this, i + 2, i + 5)\n swap(this, i + 3, i + 4)\n }\n return this\n}\n\nBuffer.prototype.toString = function toString () {\n const length = this.length\n if (length === 0) return ''\n if (arguments.length === 0) return utf8Slice(this, 0, length)\n return slowToString.apply(this, arguments)\n}\n\nBuffer.prototype.toLocaleString = Buffer.prototype.toString\n\nBuffer.prototype.equals = function equals (b) {\n if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer')\n if (this === b) return true\n return Buffer.compare(this, b) === 0\n}\n\nBuffer.prototype.inspect = function inspect () {\n let str = ''\n const max = exports.INSPECT_MAX_BYTES\n str = this.toString('hex', 0, max).replace(/(.{2})/g, '$1 ').trim()\n if (this.length > max) str += ' ... '\n return ''\n}\nif (customInspectSymbol) {\n Buffer.prototype[customInspectSymbol] = Buffer.prototype.inspect\n}\n\nBuffer.prototype.compare = function compare (target, start, end, thisStart, thisEnd) {\n if (isInstance(target, Uint8Array)) {\n target = Buffer.from(target, target.offset, target.byteLength)\n }\n if (!Buffer.isBuffer(target)) {\n throw new TypeError(\n 'The \"target\" argument must be one of type Buffer or Uint8Array. ' +\n 'Received type ' + (typeof target)\n )\n }\n\n if (start === undefined) {\n start = 0\n }\n if (end === undefined) {\n end = target ? target.length : 0\n }\n if (thisStart === undefined) {\n thisStart = 0\n }\n if (thisEnd === undefined) {\n thisEnd = this.length\n }\n\n if (start < 0 || end > target.length || thisStart < 0 || thisEnd > this.length) {\n throw new RangeError('out of range index')\n }\n\n if (thisStart >= thisEnd && start >= end) {\n return 0\n }\n if (thisStart >= thisEnd) {\n return -1\n }\n if (start >= end) {\n return 1\n }\n\n start >>>= 0\n end >>>= 0\n thisStart >>>= 0\n thisEnd >>>= 0\n\n if (this === target) return 0\n\n let x = thisEnd - thisStart\n let y = end - start\n const len = Math.min(x, y)\n\n const thisCopy = this.slice(thisStart, thisEnd)\n const targetCopy = target.slice(start, end)\n\n for (let i = 0; i < len; ++i) {\n if (thisCopy[i] !== targetCopy[i]) {\n x = thisCopy[i]\n y = targetCopy[i]\n break\n }\n }\n\n if (x < y) return -1\n if (y < x) return 1\n return 0\n}\n\n// Finds either the first index of `val` in `buffer` at offset >= `byteOffset`,\n// OR the last index of `val` in `buffer` at offset <= `byteOffset`.\n//\n// Arguments:\n// - buffer - a Buffer to search\n// - val - a string, Buffer, or number\n// - byteOffset - an index into `buffer`; will be clamped to an int32\n// - encoding - an optional encoding, relevant is val is a string\n// - dir - true for indexOf, false for lastIndexOf\nfunction bidirectionalIndexOf (buffer, val, byteOffset, encoding, dir) {\n // Empty buffer means no match\n if (buffer.length === 0) return -1\n\n // Normalize byteOffset\n if (typeof byteOffset === 'string') {\n encoding = byteOffset\n byteOffset = 0\n } else if (byteOffset > 0x7fffffff) {\n byteOffset = 0x7fffffff\n } else if (byteOffset < -0x80000000) {\n byteOffset = -0x80000000\n }\n byteOffset = +byteOffset // Coerce to Number.\n if (numberIsNaN(byteOffset)) {\n // byteOffset: it it's undefined, null, NaN, \"foo\", etc, search whole buffer\n byteOffset = dir ? 0 : (buffer.length - 1)\n }\n\n // Normalize byteOffset: negative offsets start from the end of the buffer\n if (byteOffset < 0) byteOffset = buffer.length + byteOffset\n if (byteOffset >= buffer.length) {\n if (dir) return -1\n else byteOffset = buffer.length - 1\n } else if (byteOffset < 0) {\n if (dir) byteOffset = 0\n else return -1\n }\n\n // Normalize val\n if (typeof val === 'string') {\n val = Buffer.from(val, encoding)\n }\n\n // Finally, search either indexOf (if dir is true) or lastIndexOf\n if (Buffer.isBuffer(val)) {\n // Special case: looking for empty string/buffer always fails\n if (val.length === 0) {\n return -1\n }\n return arrayIndexOf(buffer, val, byteOffset, encoding, dir)\n } else if (typeof val === 'number') {\n val = val & 0xFF // Search for a byte value [0-255]\n if (typeof Uint8Array.prototype.indexOf === 'function') {\n if (dir) {\n return Uint8Array.prototype.indexOf.call(buffer, val, byteOffset)\n } else {\n return Uint8Array.prototype.lastIndexOf.call(buffer, val, byteOffset)\n }\n }\n return arrayIndexOf(buffer, [val], byteOffset, encoding, dir)\n }\n\n throw new TypeError('val must be string, number or Buffer')\n}\n\nfunction arrayIndexOf (arr, val, byteOffset, encoding, dir) {\n let indexSize = 1\n let arrLength = arr.length\n let valLength = val.length\n\n if (encoding !== undefined) {\n encoding = String(encoding).toLowerCase()\n if (encoding === 'ucs2' || encoding === 'ucs-2' ||\n encoding === 'utf16le' || encoding === 'utf-16le') {\n if (arr.length < 2 || val.length < 2) {\n return -1\n }\n indexSize = 2\n arrLength /= 2\n valLength /= 2\n byteOffset /= 2\n }\n }\n\n function read (buf, i) {\n if (indexSize === 1) {\n return buf[i]\n } else {\n return buf.readUInt16BE(i * indexSize)\n }\n }\n\n let i\n if (dir) {\n let foundIndex = -1\n for (i = byteOffset; i < arrLength; i++) {\n if (read(arr, i) === read(val, foundIndex === -1 ? 0 : i - foundIndex)) {\n if (foundIndex === -1) foundIndex = i\n if (i - foundIndex + 1 === valLength) return foundIndex * indexSize\n } else {\n if (foundIndex !== -1) i -= i - foundIndex\n foundIndex = -1\n }\n }\n } else {\n if (byteOffset + valLength > arrLength) byteOffset = arrLength - valLength\n for (i = byteOffset; i >= 0; i--) {\n let found = true\n for (let j = 0; j < valLength; j++) {\n if (read(arr, i + j) !== read(val, j)) {\n found = false\n break\n }\n }\n if (found) return i\n }\n }\n\n return -1\n}\n\nBuffer.prototype.includes = function includes (val, byteOffset, encoding) {\n return this.indexOf(val, byteOffset, encoding) !== -1\n}\n\nBuffer.prototype.indexOf = function indexOf (val, byteOffset, encoding) {\n return bidirectionalIndexOf(this, val, byteOffset, encoding, true)\n}\n\nBuffer.prototype.lastIndexOf = function lastIndexOf (val, byteOffset, encoding) {\n return bidirectionalIndexOf(this, val, byteOffset, encoding, false)\n}\n\nfunction hexWrite (buf, string, offset, length) {\n offset = Number(offset) || 0\n const remaining = buf.length - offset\n if (!length) {\n length = remaining\n } else {\n length = Number(length)\n if (length > remaining) {\n length = remaining\n }\n }\n\n const strLen = string.length\n\n if (length > strLen / 2) {\n length = strLen / 2\n }\n let i\n for (i = 0; i < length; ++i) {\n const parsed = parseInt(string.substr(i * 2, 2), 16)\n if (numberIsNaN(parsed)) return i\n buf[offset + i] = parsed\n }\n return i\n}\n\nfunction utf8Write (buf, string, offset, length) {\n return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length)\n}\n\nfunction asciiWrite (buf, string, offset, length) {\n return blitBuffer(asciiToBytes(string), buf, offset, length)\n}\n\nfunction base64Write (buf, string, offset, length) {\n return blitBuffer(base64ToBytes(string), buf, offset, length)\n}\n\nfunction ucs2Write (buf, string, offset, length) {\n return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length)\n}\n\nBuffer.prototype.write = function write (string, offset, length, encoding) {\n // Buffer#write(string)\n if (offset === undefined) {\n encoding = 'utf8'\n length = this.length\n offset = 0\n // Buffer#write(string, encoding)\n } else if (length === undefined && typeof offset === 'string') {\n encoding = offset\n length = this.length\n offset = 0\n // Buffer#write(string, offset[, length][, encoding])\n } else if (isFinite(offset)) {\n offset = offset >>> 0\n if (isFinite(length)) {\n length = length >>> 0\n if (encoding === undefined) encoding = 'utf8'\n } else {\n encoding = length\n length = undefined\n }\n } else {\n throw new Error(\n 'Buffer.write(string, encoding, offset[, length]) is no longer supported'\n )\n }\n\n const remaining = this.length - offset\n if (length === undefined || length > remaining) length = remaining\n\n if ((string.length > 0 && (length < 0 || offset < 0)) || offset > this.length) {\n throw new RangeError('Attempt to write outside buffer bounds')\n }\n\n if (!encoding) encoding = 'utf8'\n\n let loweredCase = false\n for (;;) {\n switch (encoding) {\n case 'hex':\n return hexWrite(this, string, offset, length)\n\n case 'utf8':\n case 'utf-8':\n return utf8Write(this, string, offset, length)\n\n case 'ascii':\n case 'latin1':\n case 'binary':\n return asciiWrite(this, string, offset, length)\n\n case 'base64':\n // Warning: maxLength not taken into account in base64Write\n return base64Write(this, string, offset, length)\n\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return ucs2Write(this, string, offset, length)\n\n default:\n if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)\n encoding = ('' + encoding).toLowerCase()\n loweredCase = true\n }\n }\n}\n\nBuffer.prototype.toJSON = function toJSON () {\n return {\n type: 'Buffer',\n data: Array.prototype.slice.call(this._arr || this, 0)\n }\n}\n\nfunction base64Slice (buf, start, end) {\n if (start === 0 && end === buf.length) {\n return base64.fromByteArray(buf)\n } else {\n return base64.fromByteArray(buf.slice(start, end))\n }\n}\n\nfunction utf8Slice (buf, start, end) {\n end = Math.min(buf.length, end)\n const res = []\n\n let i = start\n while (i < end) {\n const firstByte = buf[i]\n let codePoint = null\n let bytesPerSequence = (firstByte > 0xEF)\n ? 4\n : (firstByte > 0xDF)\n ? 3\n : (firstByte > 0xBF)\n ? 2\n : 1\n\n if (i + bytesPerSequence <= end) {\n let secondByte, thirdByte, fourthByte, tempCodePoint\n\n switch (bytesPerSequence) {\n case 1:\n if (firstByte < 0x80) {\n codePoint = firstByte\n }\n break\n case 2:\n secondByte = buf[i + 1]\n if ((secondByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0x1F) << 0x6 | (secondByte & 0x3F)\n if (tempCodePoint > 0x7F) {\n codePoint = tempCodePoint\n }\n }\n break\n case 3:\n secondByte = buf[i + 1]\n thirdByte = buf[i + 2]\n if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0xF) << 0xC | (secondByte & 0x3F) << 0x6 | (thirdByte & 0x3F)\n if (tempCodePoint > 0x7FF && (tempCodePoint < 0xD800 || tempCodePoint > 0xDFFF)) {\n codePoint = tempCodePoint\n }\n }\n break\n case 4:\n secondByte = buf[i + 1]\n thirdByte = buf[i + 2]\n fourthByte = buf[i + 3]\n if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80 && (fourthByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0xF) << 0x12 | (secondByte & 0x3F) << 0xC | (thirdByte & 0x3F) << 0x6 | (fourthByte & 0x3F)\n if (tempCodePoint > 0xFFFF && tempCodePoint < 0x110000) {\n codePoint = tempCodePoint\n }\n }\n }\n }\n\n if (codePoint === null) {\n // we did not generate a valid codePoint so insert a\n // replacement char (U+FFFD) and advance only 1 byte\n codePoint = 0xFFFD\n bytesPerSequence = 1\n } else if (codePoint > 0xFFFF) {\n // encode to utf16 (surrogate pair dance)\n codePoint -= 0x10000\n res.push(codePoint >>> 10 & 0x3FF | 0xD800)\n codePoint = 0xDC00 | codePoint & 0x3FF\n }\n\n res.push(codePoint)\n i += bytesPerSequence\n }\n\n return decodeCodePointsArray(res)\n}\n\n// Based on http://stackoverflow.com/a/22747272/680742, the browser with\n// the lowest limit is Chrome, with 0x10000 args.\n// We go 1 magnitude less, for safety\nconst MAX_ARGUMENTS_LENGTH = 0x1000\n\nfunction decodeCodePointsArray (codePoints) {\n const len = codePoints.length\n if (len <= MAX_ARGUMENTS_LENGTH) {\n return String.fromCharCode.apply(String, codePoints) // avoid extra slice()\n }\n\n // Decode in chunks to avoid \"call stack size exceeded\".\n let res = ''\n let i = 0\n while (i < len) {\n res += String.fromCharCode.apply(\n String,\n codePoints.slice(i, i += MAX_ARGUMENTS_LENGTH)\n )\n }\n return res\n}\n\nfunction asciiSlice (buf, start, end) {\n let ret = ''\n end = Math.min(buf.length, end)\n\n for (let i = start; i < end; ++i) {\n ret += String.fromCharCode(buf[i] & 0x7F)\n }\n return ret\n}\n\nfunction latin1Slice (buf, start, end) {\n let ret = ''\n end = Math.min(buf.length, end)\n\n for (let i = start; i < end; ++i) {\n ret += String.fromCharCode(buf[i])\n }\n return ret\n}\n\nfunction hexSlice (buf, start, end) {\n const len = buf.length\n\n if (!start || start < 0) start = 0\n if (!end || end < 0 || end > len) end = len\n\n let out = ''\n for (let i = start; i < end; ++i) {\n out += hexSliceLookupTable[buf[i]]\n }\n return out\n}\n\nfunction utf16leSlice (buf, start, end) {\n const bytes = buf.slice(start, end)\n let res = ''\n // If bytes.length is odd, the last 8 bits must be ignored (same as node.js)\n for (let i = 0; i < bytes.length - 1; i += 2) {\n res += String.fromCharCode(bytes[i] + (bytes[i + 1] * 256))\n }\n return res\n}\n\nBuffer.prototype.slice = function slice (start, end) {\n const len = this.length\n start = ~~start\n end = end === undefined ? len : ~~end\n\n if (start < 0) {\n start += len\n if (start < 0) start = 0\n } else if (start > len) {\n start = len\n }\n\n if (end < 0) {\n end += len\n if (end < 0) end = 0\n } else if (end > len) {\n end = len\n }\n\n if (end < start) end = start\n\n const newBuf = this.subarray(start, end)\n // Return an augmented `Uint8Array` instance\n Object.setPrototypeOf(newBuf, Buffer.prototype)\n\n return newBuf\n}\n\n/*\n * Need to make sure that buffer isn't trying to write out of bounds.\n */\nfunction checkOffset (offset, ext, length) {\n if ((offset % 1) !== 0 || offset < 0) throw new RangeError('offset is not uint')\n if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length')\n}\n\nBuffer.prototype.readUintLE =\nBuffer.prototype.readUIntLE = function readUIntLE (offset, byteLength, noAssert) {\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n let val = this[offset]\n let mul = 1\n let i = 0\n while (++i < byteLength && (mul *= 0x100)) {\n val += this[offset + i] * mul\n }\n\n return val\n}\n\nBuffer.prototype.readUintBE =\nBuffer.prototype.readUIntBE = function readUIntBE (offset, byteLength, noAssert) {\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) {\n checkOffset(offset, byteLength, this.length)\n }\n\n let val = this[offset + --byteLength]\n let mul = 1\n while (byteLength > 0 && (mul *= 0x100)) {\n val += this[offset + --byteLength] * mul\n }\n\n return val\n}\n\nBuffer.prototype.readUint8 =\nBuffer.prototype.readUInt8 = function readUInt8 (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 1, this.length)\n return this[offset]\n}\n\nBuffer.prototype.readUint16LE =\nBuffer.prototype.readUInt16LE = function readUInt16LE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 2, this.length)\n return this[offset] | (this[offset + 1] << 8)\n}\n\nBuffer.prototype.readUint16BE =\nBuffer.prototype.readUInt16BE = function readUInt16BE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 2, this.length)\n return (this[offset] << 8) | this[offset + 1]\n}\n\nBuffer.prototype.readUint32LE =\nBuffer.prototype.readUInt32LE = function readUInt32LE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return ((this[offset]) |\n (this[offset + 1] << 8) |\n (this[offset + 2] << 16)) +\n (this[offset + 3] * 0x1000000)\n}\n\nBuffer.prototype.readUint32BE =\nBuffer.prototype.readUInt32BE = function readUInt32BE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return (this[offset] * 0x1000000) +\n ((this[offset + 1] << 16) |\n (this[offset + 2] << 8) |\n this[offset + 3])\n}\n\nBuffer.prototype.readBigUInt64LE = defineBigIntMethod(function readBigUInt64LE (offset) {\n offset = offset >>> 0\n validateNumber(offset, 'offset')\n const first = this[offset]\n const last = this[offset + 7]\n if (first === undefined || last === undefined) {\n boundsError(offset, this.length - 8)\n }\n\n const lo = first +\n this[++offset] * 2 ** 8 +\n this[++offset] * 2 ** 16 +\n this[++offset] * 2 ** 24\n\n const hi = this[++offset] +\n this[++offset] * 2 ** 8 +\n this[++offset] * 2 ** 16 +\n last * 2 ** 24\n\n return BigInt(lo) + (BigInt(hi) << BigInt(32))\n})\n\nBuffer.prototype.readBigUInt64BE = defineBigIntMethod(function readBigUInt64BE (offset) {\n offset = offset >>> 0\n validateNumber(offset, 'offset')\n const first = this[offset]\n const last = this[offset + 7]\n if (first === undefined || last === undefined) {\n boundsError(offset, this.length - 8)\n }\n\n const hi = first * 2 ** 24 +\n this[++offset] * 2 ** 16 +\n this[++offset] * 2 ** 8 +\n this[++offset]\n\n const lo = this[++offset] * 2 ** 24 +\n this[++offset] * 2 ** 16 +\n this[++offset] * 2 ** 8 +\n last\n\n return (BigInt(hi) << BigInt(32)) + BigInt(lo)\n})\n\nBuffer.prototype.readIntLE = function readIntLE (offset, byteLength, noAssert) {\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n let val = this[offset]\n let mul = 1\n let i = 0\n while (++i < byteLength && (mul *= 0x100)) {\n val += this[offset + i] * mul\n }\n mul *= 0x80\n\n if (val >= mul) val -= Math.pow(2, 8 * byteLength)\n\n return val\n}\n\nBuffer.prototype.readIntBE = function readIntBE (offset, byteLength, noAssert) {\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n let i = byteLength\n let mul = 1\n let val = this[offset + --i]\n while (i > 0 && (mul *= 0x100)) {\n val += this[offset + --i] * mul\n }\n mul *= 0x80\n\n if (val >= mul) val -= Math.pow(2, 8 * byteLength)\n\n return val\n}\n\nBuffer.prototype.readInt8 = function readInt8 (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 1, this.length)\n if (!(this[offset] & 0x80)) return (this[offset])\n return ((0xff - this[offset] + 1) * -1)\n}\n\nBuffer.prototype.readInt16LE = function readInt16LE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 2, this.length)\n const val = this[offset] | (this[offset + 1] << 8)\n return (val & 0x8000) ? val | 0xFFFF0000 : val\n}\n\nBuffer.prototype.readInt16BE = function readInt16BE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 2, this.length)\n const val = this[offset + 1] | (this[offset] << 8)\n return (val & 0x8000) ? val | 0xFFFF0000 : val\n}\n\nBuffer.prototype.readInt32LE = function readInt32LE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return (this[offset]) |\n (this[offset + 1] << 8) |\n (this[offset + 2] << 16) |\n (this[offset + 3] << 24)\n}\n\nBuffer.prototype.readInt32BE = function readInt32BE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return (this[offset] << 24) |\n (this[offset + 1] << 16) |\n (this[offset + 2] << 8) |\n (this[offset + 3])\n}\n\nBuffer.prototype.readBigInt64LE = defineBigIntMethod(function readBigInt64LE (offset) {\n offset = offset >>> 0\n validateNumber(offset, 'offset')\n const first = this[offset]\n const last = this[offset + 7]\n if (first === undefined || last === undefined) {\n boundsError(offset, this.length - 8)\n }\n\n const val = this[offset + 4] +\n this[offset + 5] * 2 ** 8 +\n this[offset + 6] * 2 ** 16 +\n (last << 24) // Overflow\n\n return (BigInt(val) << BigInt(32)) +\n BigInt(first +\n this[++offset] * 2 ** 8 +\n this[++offset] * 2 ** 16 +\n this[++offset] * 2 ** 24)\n})\n\nBuffer.prototype.readBigInt64BE = defineBigIntMethod(function readBigInt64BE (offset) {\n offset = offset >>> 0\n validateNumber(offset, 'offset')\n const first = this[offset]\n const last = this[offset + 7]\n if (first === undefined || last === undefined) {\n boundsError(offset, this.length - 8)\n }\n\n const val = (first << 24) + // Overflow\n this[++offset] * 2 ** 16 +\n this[++offset] * 2 ** 8 +\n this[++offset]\n\n return (BigInt(val) << BigInt(32)) +\n BigInt(this[++offset] * 2 ** 24 +\n this[++offset] * 2 ** 16 +\n this[++offset] * 2 ** 8 +\n last)\n})\n\nBuffer.prototype.readFloatLE = function readFloatLE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n return ieee754.read(this, offset, true, 23, 4)\n}\n\nBuffer.prototype.readFloatBE = function readFloatBE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n return ieee754.read(this, offset, false, 23, 4)\n}\n\nBuffer.prototype.readDoubleLE = function readDoubleLE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 8, this.length)\n return ieee754.read(this, offset, true, 52, 8)\n}\n\nBuffer.prototype.readDoubleBE = function readDoubleBE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 8, this.length)\n return ieee754.read(this, offset, false, 52, 8)\n}\n\nfunction checkInt (buf, value, offset, ext, max, min) {\n if (!Buffer.isBuffer(buf)) throw new TypeError('\"buffer\" argument must be a Buffer instance')\n if (value > max || value < min) throw new RangeError('\"value\" argument is out of bounds')\n if (offset + ext > buf.length) throw new RangeError('Index out of range')\n}\n\nBuffer.prototype.writeUintLE =\nBuffer.prototype.writeUIntLE = function writeUIntLE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) {\n const maxBytes = Math.pow(2, 8 * byteLength) - 1\n checkInt(this, value, offset, byteLength, maxBytes, 0)\n }\n\n let mul = 1\n let i = 0\n this[offset] = value & 0xFF\n while (++i < byteLength && (mul *= 0x100)) {\n this[offset + i] = (value / mul) & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeUintBE =\nBuffer.prototype.writeUIntBE = function writeUIntBE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) {\n const maxBytes = Math.pow(2, 8 * byteLength) - 1\n checkInt(this, value, offset, byteLength, maxBytes, 0)\n }\n\n let i = byteLength - 1\n let mul = 1\n this[offset + i] = value & 0xFF\n while (--i >= 0 && (mul *= 0x100)) {\n this[offset + i] = (value / mul) & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeUint8 =\nBuffer.prototype.writeUInt8 = function writeUInt8 (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0)\n this[offset] = (value & 0xff)\n return offset + 1\n}\n\nBuffer.prototype.writeUint16LE =\nBuffer.prototype.writeUInt16LE = function writeUInt16LE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)\n this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n return offset + 2\n}\n\nBuffer.prototype.writeUint16BE =\nBuffer.prototype.writeUInt16BE = function writeUInt16BE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)\n this[offset] = (value >>> 8)\n this[offset + 1] = (value & 0xff)\n return offset + 2\n}\n\nBuffer.prototype.writeUint32LE =\nBuffer.prototype.writeUInt32LE = function writeUInt32LE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)\n this[offset + 3] = (value >>> 24)\n this[offset + 2] = (value >>> 16)\n this[offset + 1] = (value >>> 8)\n this[offset] = (value & 0xff)\n return offset + 4\n}\n\nBuffer.prototype.writeUint32BE =\nBuffer.prototype.writeUInt32BE = function writeUInt32BE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)\n this[offset] = (value >>> 24)\n this[offset + 1] = (value >>> 16)\n this[offset + 2] = (value >>> 8)\n this[offset + 3] = (value & 0xff)\n return offset + 4\n}\n\nfunction wrtBigUInt64LE (buf, value, offset, min, max) {\n checkIntBI(value, min, max, buf, offset, 7)\n\n let lo = Number(value & BigInt(0xffffffff))\n buf[offset++] = lo\n lo = lo >> 8\n buf[offset++] = lo\n lo = lo >> 8\n buf[offset++] = lo\n lo = lo >> 8\n buf[offset++] = lo\n let hi = Number(value >> BigInt(32) & BigInt(0xffffffff))\n buf[offset++] = hi\n hi = hi >> 8\n buf[offset++] = hi\n hi = hi >> 8\n buf[offset++] = hi\n hi = hi >> 8\n buf[offset++] = hi\n return offset\n}\n\nfunction wrtBigUInt64BE (buf, value, offset, min, max) {\n checkIntBI(value, min, max, buf, offset, 7)\n\n let lo = Number(value & BigInt(0xffffffff))\n buf[offset + 7] = lo\n lo = lo >> 8\n buf[offset + 6] = lo\n lo = lo >> 8\n buf[offset + 5] = lo\n lo = lo >> 8\n buf[offset + 4] = lo\n let hi = Number(value >> BigInt(32) & BigInt(0xffffffff))\n buf[offset + 3] = hi\n hi = hi >> 8\n buf[offset + 2] = hi\n hi = hi >> 8\n buf[offset + 1] = hi\n hi = hi >> 8\n buf[offset] = hi\n return offset + 8\n}\n\nBuffer.prototype.writeBigUInt64LE = defineBigIntMethod(function writeBigUInt64LE (value, offset = 0) {\n return wrtBigUInt64LE(this, value, offset, BigInt(0), BigInt('0xffffffffffffffff'))\n})\n\nBuffer.prototype.writeBigUInt64BE = defineBigIntMethod(function writeBigUInt64BE (value, offset = 0) {\n return wrtBigUInt64BE(this, value, offset, BigInt(0), BigInt('0xffffffffffffffff'))\n})\n\nBuffer.prototype.writeIntLE = function writeIntLE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) {\n const limit = Math.pow(2, (8 * byteLength) - 1)\n\n checkInt(this, value, offset, byteLength, limit - 1, -limit)\n }\n\n let i = 0\n let mul = 1\n let sub = 0\n this[offset] = value & 0xFF\n while (++i < byteLength && (mul *= 0x100)) {\n if (value < 0 && sub === 0 && this[offset + i - 1] !== 0) {\n sub = 1\n }\n this[offset + i] = ((value / mul) >> 0) - sub & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeIntBE = function writeIntBE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) {\n const limit = Math.pow(2, (8 * byteLength) - 1)\n\n checkInt(this, value, offset, byteLength, limit - 1, -limit)\n }\n\n let i = byteLength - 1\n let mul = 1\n let sub = 0\n this[offset + i] = value & 0xFF\n while (--i >= 0 && (mul *= 0x100)) {\n if (value < 0 && sub === 0 && this[offset + i + 1] !== 0) {\n sub = 1\n }\n this[offset + i] = ((value / mul) >> 0) - sub & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80)\n if (value < 0) value = 0xff + value + 1\n this[offset] = (value & 0xff)\n return offset + 1\n}\n\nBuffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)\n this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n return offset + 2\n}\n\nBuffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)\n this[offset] = (value >>> 8)\n this[offset + 1] = (value & 0xff)\n return offset + 2\n}\n\nBuffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)\n this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n this[offset + 2] = (value >>> 16)\n this[offset + 3] = (value >>> 24)\n return offset + 4\n}\n\nBuffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)\n if (value < 0) value = 0xffffffff + value + 1\n this[offset] = (value >>> 24)\n this[offset + 1] = (value >>> 16)\n this[offset + 2] = (value >>> 8)\n this[offset + 3] = (value & 0xff)\n return offset + 4\n}\n\nBuffer.prototype.writeBigInt64LE = defineBigIntMethod(function writeBigInt64LE (value, offset = 0) {\n return wrtBigUInt64LE(this, value, offset, -BigInt('0x8000000000000000'), BigInt('0x7fffffffffffffff'))\n})\n\nBuffer.prototype.writeBigInt64BE = defineBigIntMethod(function writeBigInt64BE (value, offset = 0) {\n return wrtBigUInt64BE(this, value, offset, -BigInt('0x8000000000000000'), BigInt('0x7fffffffffffffff'))\n})\n\nfunction checkIEEE754 (buf, value, offset, ext, max, min) {\n if (offset + ext > buf.length) throw new RangeError('Index out of range')\n if (offset < 0) throw new RangeError('Index out of range')\n}\n\nfunction writeFloat (buf, value, offset, littleEndian, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) {\n checkIEEE754(buf, value, offset, 4, 3.4028234663852886e+38, -3.4028234663852886e+38)\n }\n ieee754.write(buf, value, offset, littleEndian, 23, 4)\n return offset + 4\n}\n\nBuffer.prototype.writeFloatLE = function writeFloatLE (value, offset, noAssert) {\n return writeFloat(this, value, offset, true, noAssert)\n}\n\nBuffer.prototype.writeFloatBE = function writeFloatBE (value, offset, noAssert) {\n return writeFloat(this, value, offset, false, noAssert)\n}\n\nfunction writeDouble (buf, value, offset, littleEndian, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) {\n checkIEEE754(buf, value, offset, 8, 1.7976931348623157E+308, -1.7976931348623157E+308)\n }\n ieee754.write(buf, value, offset, littleEndian, 52, 8)\n return offset + 8\n}\n\nBuffer.prototype.writeDoubleLE = function writeDoubleLE (value, offset, noAssert) {\n return writeDouble(this, value, offset, true, noAssert)\n}\n\nBuffer.prototype.writeDoubleBE = function writeDoubleBE (value, offset, noAssert) {\n return writeDouble(this, value, offset, false, noAssert)\n}\n\n// copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length)\nBuffer.prototype.copy = function copy (target, targetStart, start, end) {\n if (!Buffer.isBuffer(target)) throw new TypeError('argument should be a Buffer')\n if (!start) start = 0\n if (!end && end !== 0) end = this.length\n if (targetStart >= target.length) targetStart = target.length\n if (!targetStart) targetStart = 0\n if (end > 0 && end < start) end = start\n\n // Copy 0 bytes; we're done\n if (end === start) return 0\n if (target.length === 0 || this.length === 0) return 0\n\n // Fatal error conditions\n if (targetStart < 0) {\n throw new RangeError('targetStart out of bounds')\n }\n if (start < 0 || start >= this.length) throw new RangeError('Index out of range')\n if (end < 0) throw new RangeError('sourceEnd out of bounds')\n\n // Are we oob?\n if (end > this.length) end = this.length\n if (target.length - targetStart < end - start) {\n end = target.length - targetStart + start\n }\n\n const len = end - start\n\n if (this === target && typeof Uint8Array.prototype.copyWithin === 'function') {\n // Use built-in when available, missing from IE11\n this.copyWithin(targetStart, start, end)\n } else {\n Uint8Array.prototype.set.call(\n target,\n this.subarray(start, end),\n targetStart\n )\n }\n\n return len\n}\n\n// Usage:\n// buffer.fill(number[, offset[, end]])\n// buffer.fill(buffer[, offset[, end]])\n// buffer.fill(string[, offset[, end]][, encoding])\nBuffer.prototype.fill = function fill (val, start, end, encoding) {\n // Handle string cases:\n if (typeof val === 'string') {\n if (typeof start === 'string') {\n encoding = start\n start = 0\n end = this.length\n } else if (typeof end === 'string') {\n encoding = end\n end = this.length\n }\n if (encoding !== undefined && typeof encoding !== 'string') {\n throw new TypeError('encoding must be a string')\n }\n if (typeof encoding === 'string' && !Buffer.isEncoding(encoding)) {\n throw new TypeError('Unknown encoding: ' + encoding)\n }\n if (val.length === 1) {\n const code = val.charCodeAt(0)\n if ((encoding === 'utf8' && code < 128) ||\n encoding === 'latin1') {\n // Fast path: If `val` fits into a single byte, use that numeric value.\n val = code\n }\n }\n } else if (typeof val === 'number') {\n val = val & 255\n } else if (typeof val === 'boolean') {\n val = Number(val)\n }\n\n // Invalid ranges are not set to a default, so can range check early.\n if (start < 0 || this.length < start || this.length < end) {\n throw new RangeError('Out of range index')\n }\n\n if (end <= start) {\n return this\n }\n\n start = start >>> 0\n end = end === undefined ? this.length : end >>> 0\n\n if (!val) val = 0\n\n let i\n if (typeof val === 'number') {\n for (i = start; i < end; ++i) {\n this[i] = val\n }\n } else {\n const bytes = Buffer.isBuffer(val)\n ? val\n : Buffer.from(val, encoding)\n const len = bytes.length\n if (len === 0) {\n throw new TypeError('The value \"' + val +\n '\" is invalid for argument \"value\"')\n }\n for (i = 0; i < end - start; ++i) {\n this[i + start] = bytes[i % len]\n }\n }\n\n return this\n}\n\n// CUSTOM ERRORS\n// =============\n\n// Simplified versions from Node, changed for Buffer-only usage\nconst errors = {}\nfunction E (sym, getMessage, Base) {\n errors[sym] = class NodeError extends Base {\n constructor () {\n super()\n\n Object.defineProperty(this, 'message', {\n value: getMessage.apply(this, arguments),\n writable: true,\n configurable: true\n })\n\n // Add the error code to the name to include it in the stack trace.\n this.name = `${this.name} [${sym}]`\n // Access the stack to generate the error message including the error code\n // from the name.\n this.stack // eslint-disable-line no-unused-expressions\n // Reset the name to the actual name.\n delete this.name\n }\n\n get code () {\n return sym\n }\n\n set code (value) {\n Object.defineProperty(this, 'code', {\n configurable: true,\n enumerable: true,\n value,\n writable: true\n })\n }\n\n toString () {\n return `${this.name} [${sym}]: ${this.message}`\n }\n }\n}\n\nE('ERR_BUFFER_OUT_OF_BOUNDS',\n function (name) {\n if (name) {\n return `${name} is outside of buffer bounds`\n }\n\n return 'Attempt to access memory outside buffer bounds'\n }, RangeError)\nE('ERR_INVALID_ARG_TYPE',\n function (name, actual) {\n return `The \"${name}\" argument must be of type number. Received type ${typeof actual}`\n }, TypeError)\nE('ERR_OUT_OF_RANGE',\n function (str, range, input) {\n let msg = `The value of \"${str}\" is out of range.`\n let received = input\n if (Number.isInteger(input) && Math.abs(input) > 2 ** 32) {\n received = addNumericalSeparator(String(input))\n } else if (typeof input === 'bigint') {\n received = String(input)\n if (input > BigInt(2) ** BigInt(32) || input < -(BigInt(2) ** BigInt(32))) {\n received = addNumericalSeparator(received)\n }\n received += 'n'\n }\n msg += ` It must be ${range}. Received ${received}`\n return msg\n }, RangeError)\n\nfunction addNumericalSeparator (val) {\n let res = ''\n let i = val.length\n const start = val[0] === '-' ? 1 : 0\n for (; i >= start + 4; i -= 3) {\n res = `_${val.slice(i - 3, i)}${res}`\n }\n return `${val.slice(0, i)}${res}`\n}\n\n// CHECK FUNCTIONS\n// ===============\n\nfunction checkBounds (buf, offset, byteLength) {\n validateNumber(offset, 'offset')\n if (buf[offset] === undefined || buf[offset + byteLength] === undefined) {\n boundsError(offset, buf.length - (byteLength + 1))\n }\n}\n\nfunction checkIntBI (value, min, max, buf, offset, byteLength) {\n if (value > max || value < min) {\n const n = typeof min === 'bigint' ? 'n' : ''\n let range\n if (byteLength > 3) {\n if (min === 0 || min === BigInt(0)) {\n range = `>= 0${n} and < 2${n} ** ${(byteLength + 1) * 8}${n}`\n } else {\n range = `>= -(2${n} ** ${(byteLength + 1) * 8 - 1}${n}) and < 2 ** ` +\n `${(byteLength + 1) * 8 - 1}${n}`\n }\n } else {\n range = `>= ${min}${n} and <= ${max}${n}`\n }\n throw new errors.ERR_OUT_OF_RANGE('value', range, value)\n }\n checkBounds(buf, offset, byteLength)\n}\n\nfunction validateNumber (value, name) {\n if (typeof value !== 'number') {\n throw new errors.ERR_INVALID_ARG_TYPE(name, 'number', value)\n }\n}\n\nfunction boundsError (value, length, type) {\n if (Math.floor(value) !== value) {\n validateNumber(value, type)\n throw new errors.ERR_OUT_OF_RANGE(type || 'offset', 'an integer', value)\n }\n\n if (length < 0) {\n throw new errors.ERR_BUFFER_OUT_OF_BOUNDS()\n }\n\n throw new errors.ERR_OUT_OF_RANGE(type || 'offset',\n `>= ${type ? 1 : 0} and <= ${length}`,\n value)\n}\n\n// HELPER FUNCTIONS\n// ================\n\nconst INVALID_BASE64_RE = /[^+/0-9A-Za-z-_]/g\n\nfunction base64clean (str) {\n // Node takes equal signs as end of the Base64 encoding\n str = str.split('=')[0]\n // Node strips out invalid characters like \\n and \\t from the string, base64-js does not\n str = str.trim().replace(INVALID_BASE64_RE, '')\n // Node converts strings with length < 2 to ''\n if (str.length < 2) return ''\n // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not\n while (str.length % 4 !== 0) {\n str = str + '='\n }\n return str\n}\n\nfunction utf8ToBytes (string, units) {\n units = units || Infinity\n let codePoint\n const length = string.length\n let leadSurrogate = null\n const bytes = []\n\n for (let i = 0; i < length; ++i) {\n codePoint = string.charCodeAt(i)\n\n // is surrogate component\n if (codePoint > 0xD7FF && codePoint < 0xE000) {\n // last char was a lead\n if (!leadSurrogate) {\n // no lead yet\n if (codePoint > 0xDBFF) {\n // unexpected trail\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n continue\n } else if (i + 1 === length) {\n // unpaired lead\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n continue\n }\n\n // valid lead\n leadSurrogate = codePoint\n\n continue\n }\n\n // 2 leads in a row\n if (codePoint < 0xDC00) {\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n leadSurrogate = codePoint\n continue\n }\n\n // valid surrogate pair\n codePoint = (leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00) + 0x10000\n } else if (leadSurrogate) {\n // valid bmp char, but last char was a lead\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n }\n\n leadSurrogate = null\n\n // encode utf8\n if (codePoint < 0x80) {\n if ((units -= 1) < 0) break\n bytes.push(codePoint)\n } else if (codePoint < 0x800) {\n if ((units -= 2) < 0) break\n bytes.push(\n codePoint >> 0x6 | 0xC0,\n codePoint & 0x3F | 0x80\n )\n } else if (codePoint < 0x10000) {\n if ((units -= 3) < 0) break\n bytes.push(\n codePoint >> 0xC | 0xE0,\n codePoint >> 0x6 & 0x3F | 0x80,\n codePoint & 0x3F | 0x80\n )\n } else if (codePoint < 0x110000) {\n if ((units -= 4) < 0) break\n bytes.push(\n codePoint >> 0x12 | 0xF0,\n codePoint >> 0xC & 0x3F | 0x80,\n codePoint >> 0x6 & 0x3F | 0x80,\n codePoint & 0x3F | 0x80\n )\n } else {\n throw new Error('Invalid code point')\n }\n }\n\n return bytes\n}\n\nfunction asciiToBytes (str) {\n const byteArray = []\n for (let i = 0; i < str.length; ++i) {\n // Node's code seems to be doing this and not & 0x7F..\n byteArray.push(str.charCodeAt(i) & 0xFF)\n }\n return byteArray\n}\n\nfunction utf16leToBytes (str, units) {\n let c, hi, lo\n const byteArray = []\n for (let i = 0; i < str.length; ++i) {\n if ((units -= 2) < 0) break\n\n c = str.charCodeAt(i)\n hi = c >> 8\n lo = c % 256\n byteArray.push(lo)\n byteArray.push(hi)\n }\n\n return byteArray\n}\n\nfunction base64ToBytes (str) {\n return base64.toByteArray(base64clean(str))\n}\n\nfunction blitBuffer (src, dst, offset, length) {\n let i\n for (i = 0; i < length; ++i) {\n if ((i + offset >= dst.length) || (i >= src.length)) break\n dst[i + offset] = src[i]\n }\n return i\n}\n\n// ArrayBuffer or Uint8Array objects from other contexts (i.e. iframes) do not pass\n// the `instanceof` check but they should be treated as of that type.\n// See: https://github.com/feross/buffer/issues/166\nfunction isInstance (obj, type) {\n return obj instanceof type ||\n (obj != null && obj.constructor != null && obj.constructor.name != null &&\n obj.constructor.name === type.name)\n}\nfunction numberIsNaN (obj) {\n // For IE11 support\n return obj !== obj // eslint-disable-line no-self-compare\n}\n\n// Create lookup table for `toString('hex')`\n// See: https://github.com/feross/buffer/issues/219\nconst hexSliceLookupTable = (function () {\n const alphabet = '0123456789abcdef'\n const table = new Array(256)\n for (let i = 0; i < 16; ++i) {\n const i16 = i * 16\n for (let j = 0; j < 16; ++j) {\n table[i16 + j] = alphabet[i] + alphabet[j]\n }\n }\n return table\n})()\n\n// Return not function with Error if BigInt not supported\nfunction defineBigIntMethod (fn) {\n return typeof BigInt === 'undefined' ? BufferBigIntNotDefined : fn\n}\n\nfunction BufferBigIntNotDefined () {\n throw new Error('BigInt not supported')\n}\n","var naiveFallback = function () {\n\tif (typeof self === \"object\" && self) return self;\n\tif (typeof window === \"object\" && window) return window;\n\tthrow new Error(\"Unable to resolve global `this`\");\n};\n\nmodule.exports = (function () {\n\tif (this) return this;\n\n\t// Unexpected strict mode (may happen if e.g. bundled into ESM module)\n\n\t// Fallback to standard globalThis if available\n\tif (typeof globalThis === \"object\" && globalThis) return globalThis;\n\n\t// Thanks @mathiasbynens -> https://mathiasbynens.be/notes/globalthis\n\t// In all ES5+ engines global object inherits from Object.prototype\n\t// (if you approached one that doesn't please report)\n\ttry {\n\t\tObject.defineProperty(Object.prototype, \"__global__\", {\n\t\t\tget: function () { return this; },\n\t\t\tconfigurable: true\n\t\t});\n\t} catch (error) {\n\t\t// Unfortunate case of updates to Object.prototype being restricted\n\t\t// via preventExtensions, seal or freeze\n\t\treturn naiveFallback();\n\t}\n\ttry {\n\t\t// Safari case (window.__global__ works, but __global__ does not)\n\t\tif (!__global__) return naiveFallback();\n\t\treturn __global__;\n\t} finally {\n\t\tdelete Object.prototype.__global__;\n\t}\n})();\n","/*! ieee754. BSD-3-Clause License. Feross Aboukhadijeh */\nexports.read = function (buffer, offset, isLE, mLen, nBytes) {\n var e, m\n var eLen = (nBytes * 8) - mLen - 1\n var eMax = (1 << eLen) - 1\n var eBias = eMax >> 1\n var nBits = -7\n var i = isLE ? (nBytes - 1) : 0\n var d = isLE ? -1 : 1\n var s = buffer[offset + i]\n\n i += d\n\n e = s & ((1 << (-nBits)) - 1)\n s >>= (-nBits)\n nBits += eLen\n for (; nBits > 0; e = (e * 256) + buffer[offset + i], i += d, nBits -= 8) {}\n\n m = e & ((1 << (-nBits)) - 1)\n e >>= (-nBits)\n nBits += mLen\n for (; nBits > 0; m = (m * 256) + buffer[offset + i], i += d, nBits -= 8) {}\n\n if (e === 0) {\n e = 1 - eBias\n } else if (e === eMax) {\n return m ? NaN : ((s ? -1 : 1) * Infinity)\n } else {\n m = m + Math.pow(2, mLen)\n e = e - eBias\n }\n return (s ? -1 : 1) * m * Math.pow(2, e - mLen)\n}\n\nexports.write = function (buffer, value, offset, isLE, mLen, nBytes) {\n var e, m, c\n var eLen = (nBytes * 8) - mLen - 1\n var eMax = (1 << eLen) - 1\n var eBias = eMax >> 1\n var rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0)\n var i = isLE ? 0 : (nBytes - 1)\n var d = isLE ? 1 : -1\n var s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0\n\n value = Math.abs(value)\n\n if (isNaN(value) || value === Infinity) {\n m = isNaN(value) ? 1 : 0\n e = eMax\n } else {\n e = Math.floor(Math.log(value) / Math.LN2)\n if (value * (c = Math.pow(2, -e)) < 1) {\n e--\n c *= 2\n }\n if (e + eBias >= 1) {\n value += rt / c\n } else {\n value += rt * Math.pow(2, 1 - eBias)\n }\n if (value * c >= 2) {\n e++\n c /= 2\n }\n\n if (e + eBias >= eMax) {\n m = 0\n e = eMax\n } else if (e + eBias >= 1) {\n m = ((value * c) - 1) * Math.pow(2, mLen)\n e = e + eBias\n } else {\n m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen)\n e = 0\n }\n }\n\n for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {}\n\n e = (e << mLen) | m\n eLen += mLen\n for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {}\n\n buffer[offset + i - d] |= s * 128\n}\n","exports.endianness = function () { return 'LE' };\n\nexports.hostname = function () {\n if (typeof location !== 'undefined') {\n return location.hostname\n }\n else return '';\n};\n\nexports.loadavg = function () { return [] };\n\nexports.uptime = function () { return 0 };\n\nexports.freemem = function () {\n return Number.MAX_VALUE;\n};\n\nexports.totalmem = function () {\n return Number.MAX_VALUE;\n};\n\nexports.cpus = function () { return [] };\n\nexports.type = function () { return 'Browser' };\n\nexports.release = function () {\n if (typeof navigator !== 'undefined') {\n return navigator.appVersion;\n }\n return '';\n};\n\nexports.networkInterfaces\n= exports.getNetworkInterfaces\n= function () { return {} };\n\nexports.arch = function () { return 'javascript' };\n\nexports.platform = function () { return 'browser' };\n\nexports.tmpdir = exports.tmpDir = function () {\n return '/tmp';\n};\n\nexports.EOL = '\\n';\n\nexports.homedir = function () {\n\treturn '/'\n};\n","/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n if (typeof b !== \"function\" && b !== null)\r\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\r\n}) : (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n});\r\n\r\nexport function __exportStar(m, o) {\r\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n}\r\n\r\nexport function __spreadArray(to, from, pack) {\r\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\r\n if (ar || !(i in from)) {\r\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\r\n ar[i] = from[i];\r\n }\r\n }\r\n return to.concat(ar || Array.prototype.slice.call(from));\r\n}\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nvar __setModuleDefault = Object.create ? (function(o, v) {\r\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\r\n}) : function(o, v) {\r\n o[\"default\"] = v;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\r\n __setModuleDefault(result, mod);\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\r\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\r\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\r\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\r\n}\r\n","var _globalThis;\nif (typeof globalThis === 'object') {\n\t_globalThis = globalThis;\n} else {\n\ttry {\n\t\t_globalThis = require('es5-ext/global');\n\t} catch (error) {\n\t} finally {\n\t\tif (!_globalThis && typeof window !== 'undefined') { _globalThis = window; }\n\t\tif (!_globalThis) { throw new Error('Could not determine global this'); }\n\t}\n}\n\nvar NativeWebSocket = _globalThis.WebSocket || _globalThis.MozWebSocket;\nvar websocket_version = require('./version');\n\n\n/**\n * Expose a W3C WebSocket class with just one or two arguments.\n */\nfunction W3CWebSocket(uri, protocols) {\n\tvar native_instance;\n\n\tif (protocols) {\n\t\tnative_instance = new NativeWebSocket(uri, protocols);\n\t}\n\telse {\n\t\tnative_instance = new NativeWebSocket(uri);\n\t}\n\n\t/**\n\t * 'native_instance' is an instance of nativeWebSocket (the browser's WebSocket\n\t * class). Since it is an Object it will be returned as it is when creating an\n\t * instance of W3CWebSocket via 'new W3CWebSocket()'.\n\t *\n\t * ECMAScript 5: http://bclary.com/2004/11/07/#a-13.2.2\n\t */\n\treturn native_instance;\n}\nif (NativeWebSocket) {\n\t['CONNECTING', 'OPEN', 'CLOSING', 'CLOSED'].forEach(function(prop) {\n\t\tObject.defineProperty(W3CWebSocket, prop, {\n\t\t\tget: function() { return NativeWebSocket[prop]; }\n\t\t});\n\t});\n}\n\n/**\n * Module exports.\n */\nmodule.exports = {\n 'w3cwebsocket' : NativeWebSocket ? W3CWebSocket : null,\n 'version' : websocket_version\n};\n","module.exports = require('../package.json').version;\n","import safariFix from 'safari-14-idb-fix';\n\nfunction promisifyRequest(request) {\n return new Promise((resolve, reject) => {\n // @ts-ignore - file size hacks\n request.oncomplete = request.onsuccess = () => resolve(request.result);\n // @ts-ignore - file size hacks\n request.onabort = request.onerror = () => reject(request.error);\n });\n}\nfunction createStore(dbName, storeName) {\n const dbp = safariFix().then(() => {\n const request = indexedDB.open(dbName);\n request.onupgradeneeded = () => request.result.createObjectStore(storeName);\n return promisifyRequest(request);\n });\n return (txMode, callback) => dbp.then((db) => callback(db.transaction(storeName, txMode).objectStore(storeName)));\n}\nlet defaultGetStoreFunc;\nfunction defaultGetStore() {\n if (!defaultGetStoreFunc) {\n defaultGetStoreFunc = createStore('keyval-store', 'keyval');\n }\n return defaultGetStoreFunc;\n}\n/**\n * Get a value by its key.\n *\n * @param key\n * @param customStore Method to get a custom store. Use with caution (see the docs).\n */\nfunction get(key, customStore = defaultGetStore()) {\n return customStore('readonly', (store) => promisifyRequest(store.get(key)));\n}\n/**\n * Set a value with a key.\n *\n * @param key\n * @param value\n * @param customStore Method to get a custom store. Use with caution (see the docs).\n */\nfunction set(key, value, customStore = defaultGetStore()) {\n return customStore('readwrite', (store) => {\n store.put(value, key);\n return promisifyRequest(store.transaction);\n });\n}\n/**\n * Set multiple values at once. This is faster than calling set() multiple times.\n * It's also atomic – if one of the pairs can't be added, none will be added.\n *\n * @param entries Array of entries, where each entry is an array of `[key, value]`.\n * @param customStore Method to get a custom store. Use with caution (see the docs).\n */\nfunction setMany(entries, customStore = defaultGetStore()) {\n return customStore('readwrite', (store) => {\n entries.forEach((entry) => store.put(entry[1], entry[0]));\n return promisifyRequest(store.transaction);\n });\n}\n/**\n * Get multiple values by their keys\n *\n * @param keys\n * @param customStore Method to get a custom store. Use with caution (see the docs).\n */\nfunction getMany(keys, customStore = defaultGetStore()) {\n return customStore('readonly', (store) => Promise.all(keys.map((key) => promisifyRequest(store.get(key)))));\n}\n/**\n * Update a value. This lets you see the old value and update it as an atomic operation.\n *\n * @param key\n * @param updater A callback that takes the old value and returns a new value.\n * @param customStore Method to get a custom store. Use with caution (see the docs).\n */\nfunction update(key, updater, customStore = defaultGetStore()) {\n return customStore('readwrite', (store) => \n // Need to create the promise manually.\n // If I try to chain promises, the transaction closes in browsers\n // that use a promise polyfill (IE10/11).\n new Promise((resolve, reject) => {\n store.get(key).onsuccess = function () {\n try {\n store.put(updater(this.result), key);\n resolve(promisifyRequest(store.transaction));\n }\n catch (err) {\n reject(err);\n }\n };\n }));\n}\n/**\n * Delete a particular key from the store.\n *\n * @param key\n * @param customStore Method to get a custom store. Use with caution (see the docs).\n */\nfunction del(key, customStore = defaultGetStore()) {\n return customStore('readwrite', (store) => {\n store.delete(key);\n return promisifyRequest(store.transaction);\n });\n}\n/**\n * Delete multiple keys at once.\n *\n * @param keys List of keys to delete.\n * @param customStore Method to get a custom store. Use with caution (see the docs).\n */\nfunction delMany(keys, customStore = defaultGetStore()) {\n return customStore('readwrite', (store) => {\n keys.forEach((key) => store.delete(key));\n return promisifyRequest(store.transaction);\n });\n}\n/**\n * Clear all values in the store.\n *\n * @param customStore Method to get a custom store. Use with caution (see the docs).\n */\nfunction clear(customStore = defaultGetStore()) {\n return customStore('readwrite', (store) => {\n store.clear();\n return promisifyRequest(store.transaction);\n });\n}\nfunction eachCursor(store, callback) {\n store.openCursor().onsuccess = function () {\n if (!this.result)\n return;\n callback(this.result);\n this.result.continue();\n };\n return promisifyRequest(store.transaction);\n}\n/**\n * Get all keys in the store.\n *\n * @param customStore Method to get a custom store. Use with caution (see the docs).\n */\nfunction keys(customStore = defaultGetStore()) {\n return customStore('readonly', (store) => {\n // Fast path for modern browsers\n if (store.getAllKeys) {\n return promisifyRequest(store.getAllKeys());\n }\n const items = [];\n return eachCursor(store, (cursor) => items.push(cursor.key)).then(() => items);\n });\n}\n/**\n * Get all values in the store.\n *\n * @param customStore Method to get a custom store. Use with caution (see the docs).\n */\nfunction values(customStore = defaultGetStore()) {\n return customStore('readonly', (store) => {\n // Fast path for modern browsers\n if (store.getAll) {\n return promisifyRequest(store.getAll());\n }\n const items = [];\n return eachCursor(store, (cursor) => items.push(cursor.value)).then(() => items);\n });\n}\n/**\n * Get all entries in the store. Each entry is an array of `[key, value]`.\n *\n * @param customStore Method to get a custom store. Use with caution (see the docs).\n */\nfunction entries(customStore = defaultGetStore()) {\n return customStore('readonly', (store) => {\n // Fast path for modern browsers\n // (although, hopefully we'll get a simpler path some day)\n if (store.getAll && store.getAllKeys) {\n return Promise.all([\n promisifyRequest(store.getAllKeys()),\n promisifyRequest(store.getAll()),\n ]).then(([keys, values]) => keys.map((key, i) => [key, values[i]]));\n }\n const items = [];\n return customStore('readonly', (store) => eachCursor(store, (cursor) => items.push([cursor.key, cursor.value])).then(() => items));\n });\n}\n\nexport { clear, createStore, del, delMany, entries, get, getMany, keys, promisifyRequest, set, setMany, update, values };\n","/**\n * Work around Safari 14 IndexedDB open bug.\n *\n * Safari has a horrible bug where IDB requests can hang while the browser is starting up. https://bugs.webkit.org/show_bug.cgi?id=226547\n * The only solution is to keep nudging it until it's awake.\n */\nfunction idbReady() {\n var isSafari = !navigator.userAgentData &&\n /Safari\\//.test(navigator.userAgent) &&\n !/Chrom(e|ium)\\//.test(navigator.userAgent);\n // No point putting other browsers or older versions of Safari through this mess.\n if (!isSafari || !indexedDB.databases)\n return Promise.resolve();\n var intervalId;\n return new Promise(function (resolve) {\n var tryIdb = function () { return indexedDB.databases().finally(resolve); };\n intervalId = setInterval(tryIdb, 100);\n tryIdb();\n }).finally(function () { return clearInterval(intervalId); });\n}\n\nexport default idbReady;\n"],"names":["S","Uint8Array","Si","T1","Uint32Array","T2","T3","T4","T5","T6","T7","T8","getWords","key","length","i","buf","pos","str","charCodeAt","Error","xor","left","right","to","x2","x4","s","tEnc","tDec","d","t","x","xInv","computeTables","AES","_key","this","encKey","decKey","set","tmp","rcon","j","prototype","encrypt","_message","a2","b2","c2","message","out","a","b","c","rounds","k","decrypt","AES_IGE","iv","blockSize","cipher","text","cipherText","prevX","subarray","prevY","yXOR","y","AES_IGE$1","counter","offset","incrementCounter","carry","Object","defineProperty","exports","value","tslib_1","Semaphore_1","Mutex","cancelError","_semaphore","default","acquire","__awaiter","__generator","_b","label","sent","runExclusive","callback","isLocked","waitForUnlock","release","cancel","errors_1","Semaphore","_maxConcurrency","_cancelError","E_CANCELED","_queue","_waiters","_value","_this","locked","ticketPromise","Promise","resolve","reject","push","_dispatch","_a","trys","_currentReleaser","releaser","undefined","forEach","ticket","nextTicket","shift","released","_resolveWaiters","waiter","E_ALREADY_LOCKED","E_TIMEOUT","tryAcquire","withTimeout","Mutex_1","enumerable","get","withTimeout_1","tryAcquire_1","__exportStar","sync","alreadyAcquiredError","timeout","timeoutError","isTimeout","handle","e_1","setTimeout","Array","isArray","clearTimeout","byteLength","b64","lens","getLens","validLen","placeHoldersLen","toByteArray","arr","Arr","_byteLength","curByte","len","revLookup","fromByteArray","uint8","extraBytes","parts","maxChunkLength","len2","encodeChunk","lookup","join","code","indexOf","start","end","num","output","BASE","MAX_INT","MAX_INT_ARR","smallToArray","DEFAULT_ALPHABET","supportsNativeBigInt","BigInt","Integer","v","radix","alphabet","caseSensitive","parseValue","parseBase","BigInteger","sign","isSmall","SmallInteger","NativeBigInt","isPrecise","n","Math","floor","arrayToSmall","trim","compareAbs","createArray","truncate","ceil","add","sum","l_a","l_b","r","base","addAny","addSmall","l","subtract","difference","a_l","b_l","borrow","subtractSmall","multiplyLong","product","a_i","multiplySmall","shiftLeft","concat","multiplyKaratsuba","max","slice","ac","bd","abcd","multiplySmallAndArray","square","divModSmall","lambda","q","remainder","divisor","quotient","divModAny","self","negate","abs","comparison","quotientDigit","result","divisorMostSignificantDigit","divMod1","guess","xlen","highx","highy","check","part","unshift","reverse","divMod2","qSign","mod","mSign","isBasicPrime","isUnit","equals","isEven","isDivisibleBy","lesser","millerRabinTest","nPrev","prev","divide","next","bigInt","modPow","create","plus","subtractAny","minus","small","multiply","l1","l2","times","_multiplyBySmall","divmod","over","pow","toString","_0","_1","_2","isNegative","exp","isZero","modInv","isPositive","isOdd","compare","Infinity","compareTo","eq","notEquals","neq","greater","gt","lt","greaterOrEquals","geq","lesserOrEquals","leq","isPrime","strict","bits","bitLength","logN","log","toJSNumber","isProbablePrime","iterations","rng","randBetween","lastT","lastR","zero","newT","one","newR","powersOfTwo","powers2Length","highestPower2","shift_isSmall","bitwise","fn","xSign","ySign","xRem","not","yRem","xDigit","yDigit","xDivMod","yDivMod","String","shiftRight","remQuo","and","or","LOBMASK_I","roughLOB","integerLogarithm","p","e","min","gcd","toLowerCase","absBase","alphabetValues","digits","parseBaseFromArray","val","toBase","apply","map","valueOf","neg","Number","digit","toBaseString","stringify","parseStringValue","split","decimalPlace","test","parseNumberValue","toArray","toJSON","parseInt","minusOne","lcm","isInstance","usedRNG","random","low","range","restricted","top","fromArray","module","hasOwnProperty","base64","ieee754","customInspectSymbol","Symbol","Buffer","SlowBuffer","alloc","INSPECT_MAX_BYTES","K_MAX_LENGTH","createBuffer","RangeError","setPrototypeOf","arg","encodingOrOffset","TypeError","allocUnsafe","from","string","encoding","isEncoding","actual","write","fromString","ArrayBuffer","isView","arrayView","copy","fromArrayBuffer","buffer","byteOffset","fromArrayLike","fromArrayView","SharedArrayBuffer","obj","isBuffer","checked","numberIsNaN","type","data","fromObject","toPrimitive","assertSize","size","array","mustMatch","arguments","loweredCase","utf8ToBytes","base64ToBytes","slowToString","hexSlice","utf8Slice","asciiSlice","latin1Slice","base64Slice","utf16leSlice","swap","m","bidirectionalIndexOf","dir","arrayIndexOf","call","lastIndexOf","indexSize","arrLength","valLength","read","readUInt16BE","foundIndex","found","hexWrite","remaining","strLen","parsed","substr","utf8Write","blitBuffer","asciiWrite","byteArray","asciiToBytes","base64Write","ucs2Write","units","hi","lo","utf16leToBytes","res","firstByte","codePoint","bytesPerSequence","secondByte","thirdByte","fourthByte","tempCodePoint","codePoints","MAX_ARGUMENTS_LENGTH","fromCharCode","decodeCodePointsArray","kMaxLength","TYPED_ARRAY_SUPPORT","proto","foo","typedArraySupport","console","error","poolSize","fill","allocUnsafeSlow","_isBuffer","list","swap16","swap32","swap64","toLocaleString","inspect","replace","target","thisStart","thisEnd","thisCopy","targetCopy","includes","isFinite","_arr","ret","hexSliceLookupTable","bytes","checkOffset","ext","checkInt","wrtBigUInt64LE","checkIntBI","wrtBigUInt64BE","checkIEEE754","writeFloat","littleEndian","noAssert","writeDouble","newBuf","readUintLE","readUIntLE","mul","readUintBE","readUIntBE","readUint8","readUInt8","readUint16LE","readUInt16LE","readUint16BE","readUint32LE","readUInt32LE","readUint32BE","readUInt32BE","readBigUInt64LE","defineBigIntMethod","validateNumber","first","last","boundsError","readBigUInt64BE","readIntLE","readIntBE","readInt8","readInt16LE","readInt16BE","readInt32LE","readInt32BE","readBigInt64LE","readBigInt64BE","readFloatLE","readFloatBE","readDoubleLE","readDoubleBE","writeUintLE","writeUIntLE","writeUintBE","writeUIntBE","writeUint8","writeUInt8","writeUint16LE","writeUInt16LE","writeUint16BE","writeUInt16BE","writeUint32LE","writeUInt32LE","writeUint32BE","writeUInt32BE","writeBigUInt64LE","writeBigUInt64BE","writeIntLE","limit","sub","writeIntBE","writeInt8","writeInt16LE","writeInt16BE","writeInt32LE","writeInt32BE","writeBigInt64LE","writeBigInt64BE","writeFloatLE","writeFloatBE","writeDoubleLE","writeDoubleBE","targetStart","copyWithin","errors","E","sym","getMessage","Base","constructor","super","writable","configurable","name","stack","addNumericalSeparator","ERR_OUT_OF_RANGE","checkBounds","ERR_INVALID_ARG_TYPE","ERR_BUFFER_OUT_OF_BOUNDS","input","msg","received","isInteger","INVALID_BASE64_RE","leadSurrogate","base64clean","src","dst","table","i16","BufferBigIntNotDefined","naiveFallback","window","globalThis","__global__","isLE","mLen","nBytes","eLen","eMax","eBias","nBits","NaN","rt","isNaN","LN2","endianness","hostname","location","loadavg","uptime","freemem","MAX_VALUE","totalmem","cpus","navigator","appVersion","networkInterfaces","getNetworkInterfaces","arch","platform","tmpdir","tmpDir","EOL","homedir","extendStatics","__proto__","__extends","__","__assign","assign","__rest","getOwnPropertySymbols","propertyIsEnumerable","__decorate","decorators","desc","getOwnPropertyDescriptor","Reflect","decorate","__param","paramIndex","decorator","__metadata","metadataKey","metadataValue","metadata","thisArg","_arguments","P","generator","fulfilled","step","rejected","done","then","body","f","g","_","ops","verb","iterator","op","pop","__createBinding","o","k2","__values","__read","ar","__spread","__spreadArrays","il","jl","__spreadArray","pack","__await","__asyncGenerator","asyncIterator","resume","fulfill","settle","__asyncDelegator","__asyncValues","__makeTemplateObject","cooked","raw","__setModuleDefault","__importStar","__esModule","__importDefault","__classPrivateFieldGet","receiver","state","kind","has","__classPrivateFieldSet","_globalThis","NativeWebSocket","WebSocket","MozWebSocket","websocket_version","W3CWebSocket","uri","protocols","prop","promisifyRequest","request","oncomplete","onsuccess","onabort","onerror","createStore","dbName","storeName","dbp","indexedDB","open","onupgradeneeded","createObjectStore","txMode","db","transaction","objectStore","defaultGetStoreFunc","defaultGetStore","customStore","store","put","setMany","entries","entry","getMany","keys","all","update","updater","err","del","delete","delMany","clear","eachCursor","openCursor","continue","getAllKeys","items","cursor","values","getAll","intervalId","userAgentData","userAgent","databases","tryIdb","finally","setInterval","clearInterval"],"sourceRoot":""} \ No newline at end of file diff --git a/dist/354.27d980b897e4dbb1cb45.js b/dist/354.27d980b897e4dbb1cb45.js deleted file mode 100644 index ac12c9b15..000000000 --- a/dist/354.27d980b897e4dbb1cb45.js +++ /dev/null @@ -1,2 +0,0 @@ -(()=>{"use strict";var e,r,t={2993:(e,r,t)=>{var n=t(5802);"undefined"!=typeof window&&window.innerHeight,Math.round(425),new Set(["newMessage","newScheduledMessage","deleteMessages","deleteScheduledMessages","deleteHistory"]);const a=new Set(["image/png","image/gif","image/jpeg"]),o=new Set(["video/mp4"]);new Set([...a,...o]),new Set(["AU","BD","CA","CO","EG","HN","IE","IN","JO","MX","MY","NI","NZ","PH","PK","SA","SV","US"]),self.onerror=e=>{console.error(e),i({type:"unhandledError",error:{message:e.error.message||"Uncaught exception in worker"}})},self.addEventListener("unhandledrejection",(e=>{console.error(e),i({type:"unhandledError",error:{message:e.reason.message||"Uncaught rejection in worker"}})}));const s=new Map;function i(e,r){r?postMessage(e,r):postMessage(e)}let c;self.importScripts("rlottie-wasm.js");const l=new Promise((e=>{Module.onRuntimeInitialized=()=>{c={init:Module.cwrap("lottie_init","",[]),destroy:Module.cwrap("lottie_destroy","",["number"]),resize:Module.cwrap("lottie_resize","",["number","number","number"]),buffer:Module.cwrap("lottie_buffer","number",["number"]),render:Module.cwrap("lottie_render","",["number","number"]),loadFromData:Module.cwrap("lottie_load_from_data","number",["number","number"])},e()}})),d=new Map;async function u(e){const r=await fetch(e),t=r.headers.get("Content-Type");if(null!=t&&t.startsWith("text/"))return r.text();const a=await r.arrayBuffer();return(0,n.inflate)(a,{to:"string"})}function m(e,r,t){const n=r?30:60,a=JSON.parse(e).fr||n,o=a%n==0?a/n:1;return{reduceFactor:o,msPerFrame:1e3/(a/o),reducedFramesCount:Math.ceil(t/o)}}var p;p={init:async function(e,r,t,n,a){c||await l;const o=await u(r),s=allocate(intArrayFromString(o),"i8",0),i=c.init(),p=c.loadFromData(i,s);c.resize(i,t,t);const{reduceFactor:g,msPerFrame:f,reducedFramesCount:h}=m(o,n,p);d.set(e,{imgSize:t,reduceFactor:g,handle:i}),a(g,f,h)},changeData:async function(e,r,t,n){c||await l;const a=await u(r),o=allocate(intArrayFromString(a),"i8",0),{handle:s}=d.get(e),i=c.loadFromData(s,o),{reduceFactor:p,msPerFrame:g,reducedFramesCount:f}=m(a,t,i);n(p,g,f)},renderFrames:async function(e,r,t,n){c||await l;const{imgSize:a,reduceFactor:o,handle:s}=d.get(e);for(let e=r;e<=t;e++){const r=e*o;c.render(s,r);const t=c.buffer(s),i=Module.HEAPU8.subarray(t,t+a*a*4);n(e,new Uint8ClampedArray(i).buffer)}},destroy:function(e){const r=d.get(e);c.destroy(r.handle),d.delete(e)}},onmessage=async e=>{const{data:r}=e;switch(r.type){case"callMethod":{const{messageId:e,name:t,args:n}=r;try{if(e){const r=function(){for(var r=arguments.length,t=new Array(r),n=0;n{var e=a.O(void 0,[802],(()=>a(2993)));return a.O(e)},e=[],a.O=(r,t,n,o)=>{if(!t){var s=1/0;for(d=0;d=o)&&Object.keys(a.O).every((e=>a.O[e](t[c])))?t.splice(c--,1):(i=!1,o0&&e[d-1][2]>o;d--)e[d]=e[d-1];e[d]=[t,n,o]},a.f={},a.e=e=>Promise.all(Object.keys(a.f).reduce(((r,t)=>(a.f[t](e,r),r)),[])),a.u=e=>e+".acd83f1b28a8893b9dba.js",a.miniCssF=e=>{},a.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),a.o=(e,r)=>Object.prototype.hasOwnProperty.call(e,r),(()=>{var e;a.g.importScripts&&(e=a.g.location+"");var r=a.g.document;if(!e&&r&&(r.currentScript&&(e=r.currentScript.src),!e)){var t=r.getElementsByTagName("script");t.length&&(e=t[t.length-1].src)}if(!e)throw new Error("Automatic publicPath is not supported in this browser");e=e.replace(/#.*$/,"").replace(/\?.*$/,"").replace(/\/[^\/]+$/,"/"),a.p=e})(),(()=>{var e={354:1};a.f.i=(r,t)=>{e[r]||importScripts(a.p+a.u(r))};var r=self.webpackChunktelegram_t=self.webpackChunktelegram_t||[],t=r.push.bind(r);r.push=r=>{var[n,o,s]=r;for(var i in o)a.o(o,i)&&(a.m[i]=o[i]);for(s&&s(a);n.length;)e[n.pop()]=1;t(r)}})(),r=a.x,a.x=()=>a.e(802).then(r),a.x()})(); -//# sourceMappingURL=354.27d980b897e4dbb1cb45.js.map \ No newline at end of file diff --git a/dist/354.27d980b897e4dbb1cb45.js.map b/dist/354.27d980b897e4dbb1cb45.js.map deleted file mode 100644 index 7dc3b4097..000000000 --- a/dist/354.27d980b897e4dbb1cb45.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"354.27d980b897e4dbb1cb45.js","mappings":"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","sources":["webpack://telegram-t/webpack/runtime/chunk loaded","webpack://telegram-t/webpack/runtime/startup chunk dependencies","webpack://telegram-t/./src/config.ts","webpack://telegram-t/./src/util/createWorkerInterface.ts","webpack://telegram-t/./src/lib/rlottie/rlottie.worker.ts","webpack://telegram-t/webpack/bootstrap","webpack://telegram-t/webpack/runtime/ensure chunk","webpack://telegram-t/webpack/runtime/get javascript chunk filename","webpack://telegram-t/webpack/runtime/get mini-css chunk filename","webpack://telegram-t/webpack/runtime/global","webpack://telegram-t/webpack/runtime/hasOwnProperty shorthand","webpack://telegram-t/webpack/runtime/publicPath","webpack://telegram-t/webpack/runtime/importScripts chunk loading","webpack://telegram-t/webpack/startup"],"sourcesContent":["var deferred = [];\n__webpack_require__.O = (result, chunkIds, fn, priority) => {\n\tif(chunkIds) {\n\t\tpriority = priority || 0;\n\t\tfor(var i = deferred.length; i > 0 && deferred[i - 1][2] > priority; i--) deferred[i] = deferred[i - 1];\n\t\tdeferred[i] = [chunkIds, fn, priority];\n\t\treturn;\n\t}\n\tvar notFulfilled = Infinity;\n\tfor (var i = 0; i < deferred.length; i++) {\n\t\tvar [chunkIds, fn, priority] = deferred[i];\n\t\tvar fulfilled = true;\n\t\tfor (var j = 0; j < chunkIds.length; j++) {\n\t\t\tif ((priority & 1 === 0 || notFulfilled >= priority) && Object.keys(__webpack_require__.O).every((key) => (__webpack_require__.O[key](chunkIds[j])))) {\n\t\t\t\tchunkIds.splice(j--, 1);\n\t\t\t} else {\n\t\t\t\tfulfilled = false;\n\t\t\t\tif(priority < notFulfilled) notFulfilled = priority;\n\t\t\t}\n\t\t}\n\t\tif(fulfilled) {\n\t\t\tdeferred.splice(i--, 1)\n\t\t\tvar r = fn();\n\t\t\tif (r !== undefined) result = r;\n\t\t}\n\t}\n\treturn result;\n};","var next = __webpack_require__.x;\n__webpack_require__.x = () => {\n\treturn __webpack_require__.e(802).then(next);\n};","export const APP_NAME = process.env.APP_NAME || 'Telegram WebZ';\nexport const APP_VERSION = process.env.APP_VERSION!;\n\nexport const DEBUG = (\n process.env.APP_ENV !== 'production' && process.env.APP_ENV !== 'perf' && process.env.APP_ENV !== 'test'\n);\nexport const DEBUG_MORE = false;\n\nexport const IS_TEST = process.env.APP_ENV === 'test';\nexport const IS_PERF = process.env.APP_ENV === 'perf';\n\nexport const DEBUG_ALERT_MSG = 'Shoot!\\nSomething went wrong, please see the error details in Dev Tools Console.';\nexport const DEBUG_GRAMJS = false;\n\nexport const PAGE_TITLE = 'Telegram';\nexport const INACTIVE_MARKER = ' [Inactive]';\n\nexport const DEBUG_PAYMENT_SMART_GLOCAL = false;\n\nexport const SESSION_USER_KEY = 'user_auth';\nexport const LEGACY_SESSION_KEY = 'GramJs:sessionId';\n\nexport const GLOBAL_STATE_CACHE_DISABLED = false;\nexport const GLOBAL_STATE_CACHE_KEY = 'tt-global-state';\nexport const GLOBAL_STATE_CACHE_USER_LIST_LIMIT = 500;\nexport const GLOBAL_STATE_CACHE_CHAT_LIST_LIMIT = 200;\nexport const GLOBAL_STATE_CACHE_CHATS_WITH_MESSAGES_LIMIT = 30;\n\nexport const MEDIA_CACHE_DISABLED = false;\nexport const MEDIA_CACHE_NAME = 'tt-media';\nexport const MEDIA_CACHE_NAME_AVATARS = 'tt-media-avatars';\nexport const MEDIA_PROGRESSIVE_CACHE_DISABLED = false;\nexport const MEDIA_PROGRESSIVE_CACHE_NAME = 'tt-media-progressive';\nexport const MEDIA_CACHE_MAX_BYTES = 512 * 1024; // 512 KB\nexport const CUSTOM_BG_CACHE_NAME = 'tt-custom-bg';\nexport const LANG_CACHE_NAME = 'tt-lang-packs-v8';\nexport const ASSET_CACHE_NAME = 'tt-assets';\nexport const AUTODOWNLOAD_FILESIZE_MB_LIMITS = [1, 5, 10, 50, 100, 500];\n\nexport const DOWNLOAD_WORKERS = 16;\nexport const UPLOAD_WORKERS = 16;\n\nconst isBigScreen = typeof window !== 'undefined' && window.innerHeight >= 900;\n\nexport const MIN_PASSWORD_LENGTH = 1;\n\nexport const MESSAGE_LIST_SLICE = isBigScreen ? 60 : 40;\nexport const MESSAGE_LIST_VIEWPORT_LIMIT = MESSAGE_LIST_SLICE * 2;\n\nexport const CHAT_HEIGHT_PX = 72;\nexport const CHAT_LIST_SLICE = isBigScreen ? 30 : 25;\nexport const CHAT_LIST_LOAD_SLICE = 100;\nexport const SHARED_MEDIA_SLICE = 42;\nexport const MESSAGE_SEARCH_SLICE = 42;\nexport const GLOBAL_SEARCH_SLICE = 20;\nexport const MEMBERS_SLICE = 30;\nexport const MEMBERS_LOAD_SLICE = 200;\nexport const PINNED_MESSAGES_LIMIT = 50;\nexport const BLOCKED_LIST_LIMIT = 100;\nexport const PROFILE_PHOTOS_LIMIT = 40;\nexport const PROFILE_SENSITIVE_AREA = 500;\nexport const COMMON_CHATS_LIMIT = 100;\nexport const GROUP_CALL_PARTICIPANTS_LIMIT = 100;\nexport const REACTION_LIST_LIMIT = 100;\n\nexport const TOP_CHAT_MESSAGES_PRELOAD_LIMIT = 20;\n\nexport const SPONSORED_MESSAGE_CACHE_MS = 300000; // 5 min\n\nexport const DEFAULT_VOLUME = 1;\nexport const DEFAULT_PLAYBACK_RATE = 1;\n\nexport const ANIMATION_LEVEL_MIN = 0;\nexport const ANIMATION_LEVEL_MED = 1;\nexport const ANIMATION_LEVEL_MAX = 2;\nexport const ANIMATION_LEVEL_DEFAULT = ANIMATION_LEVEL_MAX;\n\nexport const DEFAULT_MESSAGE_TEXT_SIZE_PX = 16;\nexport const IOS_DEFAULT_MESSAGE_TEXT_SIZE_PX = 17;\nexport const MACOS_DEFAULT_MESSAGE_TEXT_SIZE_PX = 15;\n\nexport const DRAFT_DEBOUNCE = 10000; // 10s\nexport const SEND_MESSAGE_ACTION_INTERVAL = 3000; // 3s\n\nexport const EDITABLE_INPUT_ID = 'editable-message-text';\nexport const EDITABLE_INPUT_MODAL_ID = 'editable-message-text-modal';\n\nexport const CUSTOM_APPENDIX_ATTRIBUTE = 'data-has-custom-appendix';\n\n// Screen width where Pinned Message / Audio Player in the Middle Header can be safely displayed\nexport const SAFE_SCREEN_WIDTH_FOR_STATIC_RIGHT_COLUMN = 1440; // px\n// Screen width where Pinned Message / Audio Player in the Middle Header shouldn't collapse with ChatInfo\nexport const SAFE_SCREEN_WIDTH_FOR_CHAT_INFO = 1150; // px\n\nexport const MIN_SCREEN_WIDTH_FOR_STATIC_RIGHT_COLUMN = 1275; // px\nexport const MIN_SCREEN_WIDTH_FOR_STATIC_LEFT_COLUMN = 925; // px\nexport const MOBILE_SCREEN_MAX_WIDTH = 600; // px\nexport const MOBILE_SCREEN_LANDSCAPE_MAX_WIDTH = 950; // px\nexport const MOBILE_SCREEN_LANDSCAPE_MAX_HEIGHT = 450; // px\n\nexport const LOCAL_MESSAGE_ID_BASE = 1e9;\nexport const TMP_CHAT_ID = '0';\n\nexport const ANIMATION_END_DELAY = 100;\n\nexport const FAST_SMOOTH_MAX_DISTANCE = 1500;\nexport const FAST_SMOOTH_MIN_DURATION = 250;\nexport const FAST_SMOOTH_MAX_DURATION = 600;\nexport const FAST_SMOOTH_SHORT_TRANSITION_MAX_DISTANCE = 500; // px\n\n// Average duration of message sending animation\nexport const API_UPDATE_THROTTLE = Math.round((FAST_SMOOTH_MIN_DURATION + FAST_SMOOTH_MAX_DURATION) / 2);\nexport const API_THROTTLE_RESET_UPDATES = new Set([\n 'newMessage', 'newScheduledMessage', 'deleteMessages', 'deleteScheduledMessages', 'deleteHistory',\n]);\n\nexport const STICKER_SIZE_INLINE_DESKTOP_FACTOR = 13;\nexport const STICKER_SIZE_INLINE_MOBILE_FACTOR = 11;\nexport const STICKER_SIZE_AUTH = 160;\nexport const STICKER_SIZE_AUTH_MOBILE = 120;\nexport const STICKER_SIZE_PICKER = 64;\nexport const STICKER_SIZE_GENERAL_SETTINGS = 48;\nexport const STICKER_SIZE_PICKER_HEADER = 32;\nexport const STICKER_SIZE_SEARCH = 64;\nexport const STICKER_SIZE_MODAL = 64;\nexport const STICKER_SIZE_TWO_FA = 160;\nexport const STICKER_SIZE_DISCUSSION_GROUPS = 140;\nexport const STICKER_SIZE_FOLDER_SETTINGS = 100;\nexport const STICKER_SIZE_INLINE_BOT_RESULT = 100;\nexport const STICKER_SIZE_JOIN_REQUESTS = 140;\nexport const STICKER_SIZE_INVITES = 140;\nexport const RECENT_STICKERS_LIMIT = 20;\nexport const NO_STICKER_SET_ID = 'NO_STICKER_SET';\n\nexport const BASE_EMOJI_KEYWORD_LANG = 'en';\n\nexport const MENU_TRANSITION_DURATION = 200;\nexport const SLIDE_TRANSITION_DURATION = 450;\n\nexport const VIDEO_MOV_TYPE = 'video/quicktime';\nexport const VIDEO_WEBM_TYPE = 'video/webm';\n\nexport const SUPPORTED_IMAGE_CONTENT_TYPES = new Set([\n 'image/png', 'image/gif', 'image/jpeg',\n]);\n\nexport const SUPPORTED_VIDEO_CONTENT_TYPES = new Set([\n 'video/mp4', // video/quicktime added dynamically in environment.ts\n]);\n\nexport const CONTENT_TYPES_WITH_PREVIEW = new Set([\n ...SUPPORTED_IMAGE_CONTENT_TYPES,\n ...SUPPORTED_VIDEO_CONTENT_TYPES,\n]);\n\nexport const CONTENT_NOT_SUPPORTED = 'The message is not supported on this version of Telegram.';\n\n// eslint-disable-next-line max-len\nexport const RE_LINK_TEMPLATE = '((ftp|https?):\\\\/\\\\/)?((www\\\\.)?[-a-zA-Z0-9@:%._+~#=]{1,256}\\\\.[a-zA-Z0-9()]{1,63})\\\\b([-a-zA-Z0-9()@:%_+.~#?&/=]*)';\nexport const RE_MENTION_TEMPLATE = '(@[\\\\w\\\\d_-]+)';\nexport const RE_TG_LINK = /^tg:(\\/\\/)?([?=&\\d\\w_-]+)?/gm;\nexport const RE_TME_LINK = /^(?:https?:\\/\\/)?(?:t\\.me\\/)/gm;\n\n// eslint-disable-next-line max-len\nexport const COUNTRIES_WITH_12H_TIME_FORMAT = new Set(['AU', 'BD', 'CA', 'CO', 'EG', 'HN', 'IE', 'IN', 'JO', 'MX', 'MY', 'NI', 'NZ', 'PH', 'PK', 'SA', 'SV', 'US']);\n\n// MTProto constants\nexport const SERVICE_NOTIFICATIONS_USER_ID = '777000';\nexport const REPLIES_USER_ID = '1271266957'; // TODO For Test connection ID must be equal to 708513\nexport const ALL_FOLDER_ID = 0;\nexport const ARCHIVED_FOLDER_ID = 1;\nexport const DELETED_COMMENTS_CHANNEL_ID = '-777';\nexport const MAX_MEDIA_FILES_FOR_ALBUM = 10;\nexport const MAX_ACTIVE_PINNED_CHATS = 5;\nexport const SCHEDULED_WHEN_ONLINE = 0x7FFFFFFE;\nexport const DEFAULT_LANG_CODE = 'en';\nexport const DEFAULT_LANG_PACK = 'android';\nexport const LANG_PACKS = ['android', 'ios', 'tdesktop', 'macos'] as const;\nexport const TIPS_USERNAME = 'TelegramTips';\nexport const LOCALIZED_TIPS = ['ar', 'pt-br', 'id', 'it', 'ko', 'ms', 'pl', 'es', 'tr'];\nexport const FEEDBACK_URL = 'https://bugs.telegram.org/?tag_ids=41&sort=time';\nexport const LIGHT_THEME_BG_COLOR = '#A2AF8E';\nexport const DARK_THEME_BG_COLOR = '#0F0F0F';\nexport const DARK_THEME_PATTERN_COLOR = '#0a0a0a8c';\nexport const DEFAULT_PATTERN_COLOR = 'rgba(90, 110, 70, 0.6)';\n\n// Group calls\nexport const GROUP_CALL_VOLUME_MULTIPLIER = 100;\nexport const GROUP_CALL_DEFAULT_VOLUME = 100 * GROUP_CALL_VOLUME_MULTIPLIER;\nexport const ENABLE_THUMBNAIL_VIDEO = false;\n","import { CancellableCallback, OriginMessageEvent, WorkerMessageData } from './WorkerConnector';\nimport { DEBUG } from '../config';\n\ndeclare const self: WorkerGlobalScope;\n\nhandleErrors();\n\nconst callbackState = new Map();\n\nexport default function createInterface(api: Record) {\n onmessage = async (message: OriginMessageEvent) => {\n const { data } = message;\n\n switch (data.type) {\n case 'callMethod': {\n const { messageId, name, args } = data;\n try {\n if (messageId) {\n const callback = (...callbackArgs: any[]) => {\n const lastArg = callbackArgs[callbackArgs.length - 1];\n\n sendToOrigin({\n type: 'methodCallback',\n messageId,\n callbackArgs,\n }, lastArg instanceof ArrayBuffer ? [lastArg] : undefined);\n };\n\n callbackState.set(messageId, callback);\n\n args.push(callback as never);\n }\n\n const [response, arrayBuffers] = (await api[name](...args)) || [];\n\n if (messageId) {\n sendToOrigin(\n {\n type: 'methodResponse',\n messageId,\n response,\n },\n arrayBuffers,\n );\n }\n } catch (error: any) {\n if (DEBUG) {\n // eslint-disable-next-line no-console\n console.error(error);\n }\n\n if (messageId) {\n sendToOrigin({\n type: 'methodResponse',\n messageId,\n error: { message: error.message },\n });\n }\n }\n\n if (messageId) {\n callbackState.delete(messageId);\n }\n\n break;\n }\n case 'cancelProgress': {\n const callback = callbackState.get(data.messageId);\n if (callback) {\n callback.isCanceled = true;\n }\n\n break;\n }\n }\n };\n}\n\nfunction handleErrors() {\n self.onerror = (e) => {\n // eslint-disable-next-line no-console\n console.error(e);\n sendToOrigin({ type: 'unhandledError', error: { message: e.error.message || 'Uncaught exception in worker' } });\n };\n\n self.addEventListener('unhandledrejection', (e) => {\n // eslint-disable-next-line no-console\n console.error(e);\n sendToOrigin({ type: 'unhandledError', error: { message: e.reason.message || 'Uncaught rejection in worker' } });\n });\n}\n\nfunction sendToOrigin(data: WorkerMessageData, arrayBuffers?: ArrayBuffer[]) {\n if (arrayBuffers) {\n postMessage(data, arrayBuffers);\n } else {\n postMessage(data);\n }\n}\n","import { inflate } from 'pako/dist/pako_inflate';\nimport createWorkerInterface from '../../util/createWorkerInterface';\nimport { CancellableCallback } from '../../util/WorkerConnector';\n\ndeclare const Module: any;\n\ndeclare function allocate(...args: any[]): string;\n\ndeclare function intArrayFromString(str: String): string;\n\ndeclare const self: WorkerGlobalScope;\n\nself.importScripts('rlottie-wasm.js');\n\nlet rLottieApi: Record;\nconst rLottieApiPromise = new Promise((resolve) => {\n Module.onRuntimeInitialized = () => {\n rLottieApi = {\n init: Module.cwrap('lottie_init', '', []),\n destroy: Module.cwrap('lottie_destroy', '', ['number']),\n resize: Module.cwrap('lottie_resize', '', ['number', 'number', 'number']),\n buffer: Module.cwrap('lottie_buffer', 'number', ['number']),\n render: Module.cwrap('lottie_render', '', ['number', 'number']),\n loadFromData: Module.cwrap('lottie_load_from_data', 'number', ['number', 'number']),\n };\n\n resolve();\n };\n});\n\nconst HIGH_PRIORITY_MAX_FPS = 60;\nconst LOW_PRIORITY_MAX_FPS = 30;\n\nconst renderers = new Map();\n\nasync function init(\n key: string,\n animationData: string,\n imgSize: number,\n isLowPriority: boolean,\n onInit: CancellableCallback,\n) {\n if (!rLottieApi) {\n await rLottieApiPromise;\n }\n\n const json = await extractJson(animationData);\n const stringOnWasmHeap = allocate(intArrayFromString(json), 'i8', 0);\n const handle = rLottieApi.init();\n const framesCount = rLottieApi.loadFromData(handle, stringOnWasmHeap);\n rLottieApi.resize(handle, imgSize, imgSize);\n\n const { reduceFactor, msPerFrame, reducedFramesCount } = calcParams(json, isLowPriority, framesCount);\n\n renderers.set(key, { imgSize, reduceFactor, handle });\n onInit(reduceFactor, msPerFrame, reducedFramesCount);\n}\n\nasync function changeData(\n key: string,\n animationData: string,\n isLowPriority: boolean,\n onInit: CancellableCallback,\n) {\n if (!rLottieApi) {\n await rLottieApiPromise;\n }\n\n const json = await extractJson(animationData);\n const stringOnWasmHeap = allocate(intArrayFromString(json), 'i8', 0);\n const { handle } = renderers.get(key)!;\n const framesCount = rLottieApi.loadFromData(handle, stringOnWasmHeap);\n\n const { reduceFactor, msPerFrame, reducedFramesCount } = calcParams(json, isLowPriority, framesCount);\n onInit(reduceFactor, msPerFrame, reducedFramesCount);\n}\n\nasync function extractJson(animationData: string) {\n const response = await fetch(animationData);\n const contentType = response.headers.get('Content-Type');\n\n // Support deprecated JSON format cached locally\n if (contentType?.startsWith('text/')) {\n return response.text();\n }\n\n const arrayBuffer = await response.arrayBuffer();\n return inflate(arrayBuffer, { to: 'string' });\n}\n\nfunction calcParams(json: string, isLowPriority: boolean, framesCount: number) {\n const animationData = JSON.parse(json);\n const maxFps = isLowPriority ? LOW_PRIORITY_MAX_FPS : HIGH_PRIORITY_MAX_FPS;\n const sourceFps = animationData.fr || maxFps;\n const reduceFactor = sourceFps % maxFps === 0 ? sourceFps / maxFps : 1;\n\n return {\n reduceFactor,\n msPerFrame: 1000 / (sourceFps / reduceFactor),\n reducedFramesCount: Math.ceil(framesCount / reduceFactor),\n };\n}\n\nasync function renderFrames(\n key: string, fromIndex: number, toIndex: number, onProgress: CancellableCallback,\n) {\n if (!rLottieApi) {\n await rLottieApiPromise;\n }\n\n const { imgSize, reduceFactor, handle } = renderers.get(key)!;\n\n for (let i = fromIndex; i <= toIndex; i++) {\n const realIndex = i * reduceFactor;\n\n rLottieApi.render(handle, realIndex);\n const bufferPointer = rLottieApi.buffer(handle);\n const data = Module.HEAPU8.subarray(bufferPointer, bufferPointer + (imgSize * imgSize * 4));\n const arrayBuffer = new Uint8ClampedArray(data).buffer;\n onProgress(i, arrayBuffer);\n }\n}\n\nfunction destroy(key: string) {\n const renderer = renderers.get(key)!;\n\n rLottieApi.destroy(renderer.handle);\n\n renderers.delete(key);\n}\n\ncreateWorkerInterface({\n init,\n changeData,\n renderFrames,\n destroy,\n});\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n// expose the modules object (__webpack_modules__)\n__webpack_require__.m = __webpack_modules__;\n\n// the startup function\n__webpack_require__.x = () => {\n\t// Load entry module and return exports\n\t// This entry module depends on other loaded chunks and execution need to be delayed\n\tvar __webpack_exports__ = __webpack_require__.O(undefined, [802], () => (__webpack_require__(2993)))\n\t__webpack_exports__ = __webpack_require__.O(__webpack_exports__);\n\treturn __webpack_exports__;\n};\n\n","__webpack_require__.f = {};\n// This file contains only the entry chunk.\n// The chunk loading function for additional chunks\n__webpack_require__.e = (chunkId) => {\n\treturn Promise.all(Object.keys(__webpack_require__.f).reduce((promises, key) => {\n\t\t__webpack_require__.f[key](chunkId, promises);\n\t\treturn promises;\n\t}, []));\n};","// This function allow to reference async chunks and sibling chunks for the entrypoint\n__webpack_require__.u = (chunkId) => {\n\t// return url for filenames based on template\n\treturn \"\" + chunkId + \".\" + \"acd83f1b28a8893b9dba\" + \".js\";\n};","// This function allow to reference async chunks and sibling chunks for the entrypoint\n__webpack_require__.miniCssF = (chunkId) => {\n\t// return url for filenames based on template\n\treturn undefined;\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","var scriptUrl;\nif (__webpack_require__.g.importScripts) scriptUrl = __webpack_require__.g.location + \"\";\nvar document = __webpack_require__.g.document;\nif (!scriptUrl && document) {\n\tif (document.currentScript)\n\t\tscriptUrl = document.currentScript.src\n\tif (!scriptUrl) {\n\t\tvar scripts = document.getElementsByTagName(\"script\");\n\t\tif(scripts.length) scriptUrl = scripts[scripts.length - 1].src\n\t}\n}\n// When supporting browsers where an automatic publicPath is not supported you must specify an output.publicPath manually via configuration\n// or pass an empty string (\"\") and set the __webpack_public_path__ variable from your code to use your own logic.\nif (!scriptUrl) throw new Error(\"Automatic publicPath is not supported in this browser\");\nscriptUrl = scriptUrl.replace(/#.*$/, \"\").replace(/\\?.*$/, \"\").replace(/\\/[^\\/]+$/, \"/\");\n__webpack_require__.p = scriptUrl;","// no baseURI\n\n// object to store loaded chunks\n// \"1\" means \"already loaded\"\nvar installedChunks = {\n\t354: 1\n};\n\n// importScripts chunk loading\nvar installChunk = (data) => {\n\tvar [chunkIds, moreModules, runtime] = data;\n\tfor(var moduleId in moreModules) {\n\t\tif(__webpack_require__.o(moreModules, moduleId)) {\n\t\t\t__webpack_require__.m[moduleId] = moreModules[moduleId];\n\t\t}\n\t}\n\tif(runtime) runtime(__webpack_require__);\n\twhile(chunkIds.length)\n\t\tinstalledChunks[chunkIds.pop()] = 1;\n\tparentChunkLoadingFunction(data);\n};\n__webpack_require__.f.i = (chunkId, promises) => {\n\t// \"1\" is the signal for \"already loaded\"\n\tif(!installedChunks[chunkId]) {\n\t\tif(true) { // all chunks have JS\n\t\t\timportScripts(__webpack_require__.p + __webpack_require__.u(chunkId));\n\t\t}\n\t}\n};\n\nvar chunkLoadingGlobal = self[\"webpackChunktelegram_t\"] = self[\"webpackChunktelegram_t\"] || [];\nvar parentChunkLoadingFunction = chunkLoadingGlobal.push.bind(chunkLoadingGlobal);\nchunkLoadingGlobal.push = installChunk;\n\n// no HMR\n\n// no HMR manifest","// run startup\nvar __webpack_exports__ = __webpack_require__.x();\n"],"names":["deferred","next","window","innerHeight","Math","round","Set","SUPPORTED_IMAGE_CONTENT_TYPES","SUPPORTED_VIDEO_CONTENT_TYPES","self","onerror","e","console","error","sendToOrigin","type","message","addEventListener","reason","callbackState","Map","data","arrayBuffers","postMessage","rLottieApi","importScripts","rLottieApiPromise","Promise","resolve","Module","onRuntimeInitialized","init","cwrap","destroy","resize","buffer","render","loadFromData","renderers","async","extractJson","animationData","response","fetch","contentType","headers","get","startsWith","text","arrayBuffer","inflate","to","calcParams","json","isLowPriority","framesCount","maxFps","sourceFps","JSON","parse","fr","reduceFactor","msPerFrame","reducedFramesCount","ceil","api","key","imgSize","onInit","stringOnWasmHeap","allocate","intArrayFromString","handle","set","changeData","renderFrames","fromIndex","toIndex","onProgress","i","realIndex","bufferPointer","HEAPU8","subarray","Uint8ClampedArray","renderer","delete","onmessage","messageId","name","args","callback","callbackArgs","lastArg","length","ArrayBuffer","undefined","push","isCanceled","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","exports","module","__webpack_modules__","call","m","x","__webpack_exports__","O","result","chunkIds","fn","priority","notFulfilled","Infinity","fulfilled","j","Object","keys","every","splice","r","f","chunkId","all","reduce","promises","u","miniCssF","g","globalThis","this","Function","o","obj","prop","prototype","hasOwnProperty","scriptUrl","location","document","currentScript","src","scripts","getElementsByTagName","Error","replace","p","installedChunks","chunkLoadingGlobal","parentChunkLoadingFunction","bind","moreModules","runtime","pop","then"],"sourceRoot":""} \ No newline at end of file diff --git a/dist/354.4cc07bd62173f885831f.js b/dist/354.4cc07bd62173f885831f.js new file mode 100644 index 000000000..1851a28ee --- /dev/null +++ b/dist/354.4cc07bd62173f885831f.js @@ -0,0 +1,2 @@ +(()=>{"use strict";var e,r,t={2993:(e,r,t)=>{var a=t(5802);"undefined"!=typeof window&&window.innerHeight,Math.round(425),new Set(["newMessage","newScheduledMessage","deleteMessages","deleteScheduledMessages","deleteHistory"]);const n=new Set(["image/png","image/gif","image/jpeg"]),o=new Set(["video/mp4"]);new Set(["audio/mp3","audio/ogg","audio/wav","audio/mpeg","audio/flac","audio/aac","audio/m4a","audio/mp4","audio/x-m4a"]),new Set([...n,...o]),new Set(["AU","BD","CA","CO","EG","HN","IE","IN","JO","MX","MY","NI","NZ","PH","PK","SA","SV","US"]),self.onerror=e=>{console.error(e),i({type:"unhandledError",error:{message:e.error.message||"Uncaught exception in worker"}})},self.addEventListener("unhandledrejection",(e=>{console.error(e),i({type:"unhandledError",error:{message:e.reason.message||"Uncaught rejection in worker"}})}));const s=new Map;function i(e,r){r?postMessage(e,r):postMessage(e)}let c;self.importScripts("rlottie-wasm.js");const d=new Promise((e=>{Module.onRuntimeInitialized=()=>{c={init:Module.cwrap("lottie_init","",[]),destroy:Module.cwrap("lottie_destroy","",["number"]),resize:Module.cwrap("lottie_resize","",["number","number","number"]),buffer:Module.cwrap("lottie_buffer","number",["number"]),render:Module.cwrap("lottie_render","",["number","number"]),loadFromData:Module.cwrap("lottie_load_from_data","number",["number","number"])},e()}})),u=new Map;async function l(e){const r=await fetch(e),t=r.headers.get("Content-Type");if(null!=t&&t.startsWith("text/"))return r.text();const n=await r.arrayBuffer();return(0,a.inflate)(n,{to:"string"})}function m(e,r,t){const a=r?30:60,n=JSON.parse(e).fr||a,o=n%a==0?n/a:1;return{reduceFactor:o,msPerFrame:1e3/(n/o),reducedFramesCount:Math.ceil(t/o)}}var p;p={init:async function(e,r,t,a,n){c||await d;const o=await l(r),s=allocate(intArrayFromString(o),"i8",0),i=c.init(),p=c.loadFromData(i,s);c.resize(i,t,t);const{reduceFactor:g,msPerFrame:f,reducedFramesCount:h}=m(o,a,p);u.set(e,{imgSize:t,reduceFactor:g,handle:i}),n(g,f,h)},changeData:async function(e,r,t,a){c||await d;const n=await l(r),o=allocate(intArrayFromString(n),"i8",0),{handle:s}=u.get(e),i=c.loadFromData(s,o),{reduceFactor:p,msPerFrame:g,reducedFramesCount:f}=m(n,t,i);a(p,g,f)},renderFrames:async function(e,r,t,a){c||await d;const{imgSize:n,reduceFactor:o,handle:s}=u.get(e);for(let e=r;e<=t;e++){const r=e*o;c.render(s,r);const t=c.buffer(s),i=Module.HEAPU8.subarray(t,t+n*n*4);a(e,new Uint8ClampedArray(i).buffer)}},destroy:function(e){const r=u.get(e);c.destroy(r.handle),u.delete(e)}},onmessage=async e=>{const{data:r}=e;switch(r.type){case"callMethod":{const{messageId:e,name:t,args:a}=r;try{if(e){const r=function(){for(var r=arguments.length,t=new Array(r),a=0;a{var e=n.O(void 0,[802],(()=>n(2993)));return n.O(e)},e=[],n.O=(r,t,a,o)=>{if(!t){var s=1/0;for(u=0;u=o)&&Object.keys(n.O).every((e=>n.O[e](t[c])))?t.splice(c--,1):(i=!1,o0&&e[u-1][2]>o;u--)e[u]=e[u-1];e[u]=[t,a,o]},n.f={},n.e=e=>Promise.all(Object.keys(n.f).reduce(((r,t)=>(n.f[t](e,r),r)),[])),n.u=e=>e+".acd83f1b28a8893b9dba.js",n.miniCssF=e=>{},n.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),n.o=(e,r)=>Object.prototype.hasOwnProperty.call(e,r),(()=>{var e;n.g.importScripts&&(e=n.g.location+"");var r=n.g.document;if(!e&&r&&(r.currentScript&&(e=r.currentScript.src),!e)){var t=r.getElementsByTagName("script");t.length&&(e=t[t.length-1].src)}if(!e)throw new Error("Automatic publicPath is not supported in this browser");e=e.replace(/#.*$/,"").replace(/\?.*$/,"").replace(/\/[^\/]+$/,"/"),n.p=e})(),(()=>{var e={354:1};n.f.i=(r,t)=>{e[r]||importScripts(n.p+n.u(r))};var r=self.webpackChunktelegram_t=self.webpackChunktelegram_t||[],t=r.push.bind(r);r.push=r=>{var[a,o,s]=r;for(var i in o)n.o(o,i)&&(n.m[i]=o[i]);for(s&&s(n);a.length;)e[a.pop()]=1;t(r)}})(),r=n.x,n.x=()=>n.e(802).then(r),n.x()})(); +//# sourceMappingURL=354.4cc07bd62173f885831f.js.map \ No newline at end of file diff --git a/dist/354.4cc07bd62173f885831f.js.map b/dist/354.4cc07bd62173f885831f.js.map new file mode 100644 index 000000000..aad62d78d --- /dev/null +++ b/dist/354.4cc07bd62173f885831f.js.map @@ -0,0 +1 @@ +{"version":3,"file":"354.4cc07bd62173f885831f.js","mappings":"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","sources":["webpack://telegram-t/webpack/runtime/chunk loaded","webpack://telegram-t/webpack/runtime/startup chunk dependencies","webpack://telegram-t/./src/config.ts","webpack://telegram-t/./src/util/createWorkerInterface.ts","webpack://telegram-t/./src/lib/rlottie/rlottie.worker.ts","webpack://telegram-t/webpack/bootstrap","webpack://telegram-t/webpack/runtime/ensure chunk","webpack://telegram-t/webpack/runtime/get javascript chunk filename","webpack://telegram-t/webpack/runtime/get mini-css chunk filename","webpack://telegram-t/webpack/runtime/global","webpack://telegram-t/webpack/runtime/hasOwnProperty shorthand","webpack://telegram-t/webpack/runtime/publicPath","webpack://telegram-t/webpack/runtime/importScripts chunk loading","webpack://telegram-t/webpack/startup"],"sourcesContent":["var deferred = [];\n__webpack_require__.O = (result, chunkIds, fn, priority) => {\n\tif(chunkIds) {\n\t\tpriority = priority || 0;\n\t\tfor(var i = deferred.length; i > 0 && deferred[i - 1][2] > priority; i--) deferred[i] = deferred[i - 1];\n\t\tdeferred[i] = [chunkIds, fn, priority];\n\t\treturn;\n\t}\n\tvar notFulfilled = Infinity;\n\tfor (var i = 0; i < deferred.length; i++) {\n\t\tvar [chunkIds, fn, priority] = deferred[i];\n\t\tvar fulfilled = true;\n\t\tfor (var j = 0; j < chunkIds.length; j++) {\n\t\t\tif ((priority & 1 === 0 || notFulfilled >= priority) && Object.keys(__webpack_require__.O).every((key) => (__webpack_require__.O[key](chunkIds[j])))) {\n\t\t\t\tchunkIds.splice(j--, 1);\n\t\t\t} else {\n\t\t\t\tfulfilled = false;\n\t\t\t\tif(priority < notFulfilled) notFulfilled = priority;\n\t\t\t}\n\t\t}\n\t\tif(fulfilled) {\n\t\t\tdeferred.splice(i--, 1)\n\t\t\tvar r = fn();\n\t\t\tif (r !== undefined) result = r;\n\t\t}\n\t}\n\treturn result;\n};","var next = __webpack_require__.x;\n__webpack_require__.x = () => {\n\treturn __webpack_require__.e(802).then(next);\n};","export const APP_NAME = process.env.APP_NAME || 'Telegram WebZ';\nexport const APP_VERSION = process.env.APP_VERSION!;\n\nexport const DEBUG = (\n process.env.APP_ENV !== 'production' && process.env.APP_ENV !== 'perf' && process.env.APP_ENV !== 'test'\n);\nexport const DEBUG_MORE = false;\n\nexport const IS_TEST = process.env.APP_ENV === 'test';\nexport const IS_PERF = process.env.APP_ENV === 'perf';\n\nexport const DEBUG_ALERT_MSG = 'Shoot!\\nSomething went wrong, please see the error details in Dev Tools Console.';\nexport const DEBUG_GRAMJS = false;\n\nexport const PAGE_TITLE = 'Telegram';\nexport const INACTIVE_MARKER = ' [Inactive]';\n\nexport const DEBUG_PAYMENT_SMART_GLOCAL = false;\n\nexport const SESSION_USER_KEY = 'user_auth';\nexport const LEGACY_SESSION_KEY = 'GramJs:sessionId';\n\nexport const GLOBAL_STATE_CACHE_DISABLED = false;\nexport const GLOBAL_STATE_CACHE_KEY = 'tt-global-state';\nexport const GLOBAL_STATE_CACHE_USER_LIST_LIMIT = 500;\nexport const GLOBAL_STATE_CACHE_CHAT_LIST_LIMIT = 200;\nexport const GLOBAL_STATE_CACHE_CHATS_WITH_MESSAGES_LIMIT = 30;\n\nexport const MEDIA_CACHE_DISABLED = false;\nexport const MEDIA_CACHE_NAME = 'tt-media';\nexport const MEDIA_CACHE_NAME_AVATARS = 'tt-media-avatars';\nexport const MEDIA_PROGRESSIVE_CACHE_DISABLED = false;\nexport const MEDIA_PROGRESSIVE_CACHE_NAME = 'tt-media-progressive';\nexport const MEDIA_CACHE_MAX_BYTES = 512 * 1024; // 512 KB\nexport const CUSTOM_BG_CACHE_NAME = 'tt-custom-bg';\nexport const LANG_CACHE_NAME = 'tt-lang-packs-v8';\nexport const ASSET_CACHE_NAME = 'tt-assets';\nexport const AUTODOWNLOAD_FILESIZE_MB_LIMITS = [1, 5, 10, 50, 100, 500];\n\nexport const DOWNLOAD_WORKERS = 16;\nexport const UPLOAD_WORKERS = 16;\n\nconst isBigScreen = typeof window !== 'undefined' && window.innerHeight >= 900;\n\nexport const MIN_PASSWORD_LENGTH = 1;\n\nexport const MESSAGE_LIST_SLICE = isBigScreen ? 60 : 40;\nexport const MESSAGE_LIST_VIEWPORT_LIMIT = MESSAGE_LIST_SLICE * 2;\n\nexport const CHAT_HEIGHT_PX = 72;\nexport const CHAT_LIST_SLICE = isBigScreen ? 30 : 25;\nexport const CHAT_LIST_LOAD_SLICE = 100;\nexport const SHARED_MEDIA_SLICE = 42;\nexport const MESSAGE_SEARCH_SLICE = 42;\nexport const GLOBAL_SEARCH_SLICE = 20;\nexport const MEMBERS_SLICE = 30;\nexport const MEMBERS_LOAD_SLICE = 200;\nexport const PINNED_MESSAGES_LIMIT = 50;\nexport const BLOCKED_LIST_LIMIT = 100;\nexport const PROFILE_PHOTOS_LIMIT = 40;\nexport const PROFILE_SENSITIVE_AREA = 500;\nexport const COMMON_CHATS_LIMIT = 100;\nexport const GROUP_CALL_PARTICIPANTS_LIMIT = 100;\nexport const REACTION_LIST_LIMIT = 100;\n\nexport const TOP_CHAT_MESSAGES_PRELOAD_LIMIT = 20;\n\nexport const SPONSORED_MESSAGE_CACHE_MS = 300000; // 5 min\n\nexport const DEFAULT_VOLUME = 1;\nexport const DEFAULT_PLAYBACK_RATE = 1;\n\nexport const ANIMATION_LEVEL_MIN = 0;\nexport const ANIMATION_LEVEL_MED = 1;\nexport const ANIMATION_LEVEL_MAX = 2;\nexport const ANIMATION_LEVEL_DEFAULT = ANIMATION_LEVEL_MAX;\n\nexport const DEFAULT_MESSAGE_TEXT_SIZE_PX = 16;\nexport const IOS_DEFAULT_MESSAGE_TEXT_SIZE_PX = 17;\nexport const MACOS_DEFAULT_MESSAGE_TEXT_SIZE_PX = 15;\n\nexport const DRAFT_DEBOUNCE = 10000; // 10s\nexport const SEND_MESSAGE_ACTION_INTERVAL = 3000; // 3s\n\nexport const EDITABLE_INPUT_ID = 'editable-message-text';\nexport const EDITABLE_INPUT_MODAL_ID = 'editable-message-text-modal';\n// eslint-disable-next-line max-len\nexport const EDITABLE_INPUT_CSS_SELECTOR = `.Transition__slide--active #${EDITABLE_INPUT_ID}, .Transition > .to #${EDITABLE_INPUT_ID}`;\n\nexport const CUSTOM_APPENDIX_ATTRIBUTE = 'data-has-custom-appendix';\n\n// Screen width where Pinned Message / Audio Player in the Middle Header can be safely displayed\nexport const SAFE_SCREEN_WIDTH_FOR_STATIC_RIGHT_COLUMN = 1440; // px\n// Screen width where Pinned Message / Audio Player in the Middle Header shouldn't collapse with ChatInfo\nexport const SAFE_SCREEN_WIDTH_FOR_CHAT_INFO = 1150; // px\n\nexport const MIN_SCREEN_WIDTH_FOR_STATIC_RIGHT_COLUMN = 1275; // px\nexport const MIN_SCREEN_WIDTH_FOR_STATIC_LEFT_COLUMN = 925; // px\nexport const MOBILE_SCREEN_MAX_WIDTH = 600; // px\nexport const MOBILE_SCREEN_LANDSCAPE_MAX_WIDTH = 950; // px\nexport const MOBILE_SCREEN_LANDSCAPE_MAX_HEIGHT = 450; // px\n\nexport const LOCAL_MESSAGE_ID_BASE = 1e9;\nexport const TMP_CHAT_ID = '0';\n\nexport const ANIMATION_END_DELAY = 100;\n\nexport const FAST_SMOOTH_MAX_DISTANCE = 1500;\nexport const FAST_SMOOTH_MIN_DURATION = 250;\nexport const FAST_SMOOTH_MAX_DURATION = 600;\nexport const FAST_SMOOTH_SHORT_TRANSITION_MAX_DISTANCE = 500; // px\n\n// Average duration of message sending animation\nexport const API_UPDATE_THROTTLE = Math.round((FAST_SMOOTH_MIN_DURATION + FAST_SMOOTH_MAX_DURATION) / 2);\nexport const API_THROTTLE_RESET_UPDATES = new Set([\n 'newMessage', 'newScheduledMessage', 'deleteMessages', 'deleteScheduledMessages', 'deleteHistory',\n]);\n\nexport const STICKER_SIZE_INLINE_DESKTOP_FACTOR = 13;\nexport const STICKER_SIZE_INLINE_MOBILE_FACTOR = 11;\nexport const STICKER_SIZE_AUTH = 160;\nexport const STICKER_SIZE_AUTH_MOBILE = 120;\nexport const STICKER_SIZE_PICKER = 64;\nexport const STICKER_SIZE_GENERAL_SETTINGS = 48;\nexport const STICKER_SIZE_PICKER_HEADER = 32;\nexport const STICKER_SIZE_SEARCH = 64;\nexport const STICKER_SIZE_MODAL = 64;\nexport const STICKER_SIZE_TWO_FA = 160;\nexport const STICKER_SIZE_DISCUSSION_GROUPS = 140;\nexport const STICKER_SIZE_FOLDER_SETTINGS = 100;\nexport const STICKER_SIZE_INLINE_BOT_RESULT = 100;\nexport const STICKER_SIZE_JOIN_REQUESTS = 140;\nexport const STICKER_SIZE_INVITES = 140;\nexport const RECENT_STICKERS_LIMIT = 20;\nexport const NO_STICKER_SET_ID = 'NO_STICKER_SET';\n\nexport const BASE_EMOJI_KEYWORD_LANG = 'en';\n\nexport const MENU_TRANSITION_DURATION = 200;\nexport const SLIDE_TRANSITION_DURATION = 450;\n\nexport const VIDEO_MOV_TYPE = 'video/quicktime';\nexport const VIDEO_WEBM_TYPE = 'video/webm';\n\nexport const SUPPORTED_IMAGE_CONTENT_TYPES = new Set([\n 'image/png', 'image/gif', 'image/jpeg',\n]);\n\nexport const SUPPORTED_VIDEO_CONTENT_TYPES = new Set([\n 'video/mp4', // video/quicktime added dynamically in environment.ts\n]);\n\nexport const SUPPORTED_AUDIO_CONTENT_TYPES = new Set([\n 'audio/mp3',\n 'audio/ogg',\n 'audio/wav',\n 'audio/mpeg',\n 'audio/flac',\n 'audio/aac',\n 'audio/m4a',\n 'audio/mp4',\n 'audio/x-m4a',\n]);\n\nexport const CONTENT_TYPES_WITH_PREVIEW = new Set([\n ...SUPPORTED_IMAGE_CONTENT_TYPES,\n ...SUPPORTED_VIDEO_CONTENT_TYPES,\n]);\n\nexport const CONTENT_NOT_SUPPORTED = 'The message is not supported on this version of Telegram.';\n\n// eslint-disable-next-line max-len\nexport const RE_LINK_TEMPLATE = '((ftp|https?):\\\\/\\\\/)?((www\\\\.)?[-a-zA-Z0-9@:%._+~#=]{1,256}\\\\.[a-zA-Z0-9()]{1,63})\\\\b([-a-zA-Z0-9()@:%_+.~#?&/=]*)';\nexport const RE_MENTION_TEMPLATE = '(@[\\\\w\\\\d_-]+)';\nexport const RE_TG_LINK = /^tg:(\\/\\/)?([?=&\\d\\w_-]+)?/gm;\nexport const RE_TME_LINK = /^(?:https?:\\/\\/)?(?:t\\.me\\/)/gm;\n\n// eslint-disable-next-line max-len\nexport const COUNTRIES_WITH_12H_TIME_FORMAT = new Set(['AU', 'BD', 'CA', 'CO', 'EG', 'HN', 'IE', 'IN', 'JO', 'MX', 'MY', 'NI', 'NZ', 'PH', 'PK', 'SA', 'SV', 'US']);\n\n// MTProto constants\nexport const SERVICE_NOTIFICATIONS_USER_ID = '777000';\nexport const REPLIES_USER_ID = '1271266957'; // TODO For Test connection ID must be equal to 708513\nexport const ALL_FOLDER_ID = 0;\nexport const ARCHIVED_FOLDER_ID = 1;\nexport const DELETED_COMMENTS_CHANNEL_ID = '-777';\nexport const MAX_MEDIA_FILES_FOR_ALBUM = 10;\nexport const MAX_ACTIVE_PINNED_CHATS = 5;\nexport const SCHEDULED_WHEN_ONLINE = 0x7FFFFFFE;\nexport const DEFAULT_LANG_CODE = 'en';\nexport const DEFAULT_LANG_PACK = 'android';\nexport const LANG_PACKS = ['android', 'ios', 'tdesktop', 'macos'] as const;\nexport const TIPS_USERNAME = 'TelegramTips';\nexport const LOCALIZED_TIPS = ['ar', 'pt-br', 'id', 'it', 'ko', 'ms', 'pl', 'es', 'tr'];\nexport const FEEDBACK_URL = 'https://bugs.telegram.org/?tag_ids=41&sort=time';\nexport const LIGHT_THEME_BG_COLOR = '#A2AF8E';\nexport const DARK_THEME_BG_COLOR = '#0F0F0F';\nexport const DARK_THEME_PATTERN_COLOR = '#0a0a0a8c';\nexport const DEFAULT_PATTERN_COLOR = 'rgba(90, 110, 70, 0.6)';\n\n// Group calls\nexport const GROUP_CALL_VOLUME_MULTIPLIER = 100;\nexport const GROUP_CALL_DEFAULT_VOLUME = 100 * GROUP_CALL_VOLUME_MULTIPLIER;\nexport const ENABLE_THUMBNAIL_VIDEO = false;\n","import { CancellableCallback, OriginMessageEvent, WorkerMessageData } from './WorkerConnector';\nimport { DEBUG } from '../config';\n\ndeclare const self: WorkerGlobalScope;\n\nhandleErrors();\n\nconst callbackState = new Map();\n\nexport default function createInterface(api: Record) {\n onmessage = async (message: OriginMessageEvent) => {\n const { data } = message;\n\n switch (data.type) {\n case 'callMethod': {\n const { messageId, name, args } = data;\n try {\n if (messageId) {\n const callback = (...callbackArgs: any[]) => {\n const lastArg = callbackArgs[callbackArgs.length - 1];\n\n sendToOrigin({\n type: 'methodCallback',\n messageId,\n callbackArgs,\n }, lastArg instanceof ArrayBuffer ? [lastArg] : undefined);\n };\n\n callbackState.set(messageId, callback);\n\n args.push(callback as never);\n }\n\n const [response, arrayBuffers] = (await api[name](...args)) || [];\n\n if (messageId) {\n sendToOrigin(\n {\n type: 'methodResponse',\n messageId,\n response,\n },\n arrayBuffers,\n );\n }\n } catch (error: any) {\n if (DEBUG) {\n // eslint-disable-next-line no-console\n console.error(error);\n }\n\n if (messageId) {\n sendToOrigin({\n type: 'methodResponse',\n messageId,\n error: { message: error.message },\n });\n }\n }\n\n if (messageId) {\n callbackState.delete(messageId);\n }\n\n break;\n }\n case 'cancelProgress': {\n const callback = callbackState.get(data.messageId);\n if (callback) {\n callback.isCanceled = true;\n }\n\n break;\n }\n }\n };\n}\n\nfunction handleErrors() {\n self.onerror = (e) => {\n // eslint-disable-next-line no-console\n console.error(e);\n sendToOrigin({ type: 'unhandledError', error: { message: e.error.message || 'Uncaught exception in worker' } });\n };\n\n self.addEventListener('unhandledrejection', (e) => {\n // eslint-disable-next-line no-console\n console.error(e);\n sendToOrigin({ type: 'unhandledError', error: { message: e.reason.message || 'Uncaught rejection in worker' } });\n });\n}\n\nfunction sendToOrigin(data: WorkerMessageData, arrayBuffers?: ArrayBuffer[]) {\n if (arrayBuffers) {\n postMessage(data, arrayBuffers);\n } else {\n postMessage(data);\n }\n}\n","import { inflate } from 'pako/dist/pako_inflate';\nimport createWorkerInterface from '../../util/createWorkerInterface';\nimport { CancellableCallback } from '../../util/WorkerConnector';\n\ndeclare const Module: any;\n\ndeclare function allocate(...args: any[]): string;\n\ndeclare function intArrayFromString(str: String): string;\n\ndeclare const self: WorkerGlobalScope;\n\nself.importScripts('rlottie-wasm.js');\n\nlet rLottieApi: Record;\nconst rLottieApiPromise = new Promise((resolve) => {\n Module.onRuntimeInitialized = () => {\n rLottieApi = {\n init: Module.cwrap('lottie_init', '', []),\n destroy: Module.cwrap('lottie_destroy', '', ['number']),\n resize: Module.cwrap('lottie_resize', '', ['number', 'number', 'number']),\n buffer: Module.cwrap('lottie_buffer', 'number', ['number']),\n render: Module.cwrap('lottie_render', '', ['number', 'number']),\n loadFromData: Module.cwrap('lottie_load_from_data', 'number', ['number', 'number']),\n };\n\n resolve();\n };\n});\n\nconst HIGH_PRIORITY_MAX_FPS = 60;\nconst LOW_PRIORITY_MAX_FPS = 30;\n\nconst renderers = new Map();\n\nasync function init(\n key: string,\n animationData: string,\n imgSize: number,\n isLowPriority: boolean,\n onInit: CancellableCallback,\n) {\n if (!rLottieApi) {\n await rLottieApiPromise;\n }\n\n const json = await extractJson(animationData);\n const stringOnWasmHeap = allocate(intArrayFromString(json), 'i8', 0);\n const handle = rLottieApi.init();\n const framesCount = rLottieApi.loadFromData(handle, stringOnWasmHeap);\n rLottieApi.resize(handle, imgSize, imgSize);\n\n const { reduceFactor, msPerFrame, reducedFramesCount } = calcParams(json, isLowPriority, framesCount);\n\n renderers.set(key, { imgSize, reduceFactor, handle });\n onInit(reduceFactor, msPerFrame, reducedFramesCount);\n}\n\nasync function changeData(\n key: string,\n animationData: string,\n isLowPriority: boolean,\n onInit: CancellableCallback,\n) {\n if (!rLottieApi) {\n await rLottieApiPromise;\n }\n\n const json = await extractJson(animationData);\n const stringOnWasmHeap = allocate(intArrayFromString(json), 'i8', 0);\n const { handle } = renderers.get(key)!;\n const framesCount = rLottieApi.loadFromData(handle, stringOnWasmHeap);\n\n const { reduceFactor, msPerFrame, reducedFramesCount } = calcParams(json, isLowPriority, framesCount);\n onInit(reduceFactor, msPerFrame, reducedFramesCount);\n}\n\nasync function extractJson(animationData: string) {\n const response = await fetch(animationData);\n const contentType = response.headers.get('Content-Type');\n\n // Support deprecated JSON format cached locally\n if (contentType?.startsWith('text/')) {\n return response.text();\n }\n\n const arrayBuffer = await response.arrayBuffer();\n return inflate(arrayBuffer, { to: 'string' });\n}\n\nfunction calcParams(json: string, isLowPriority: boolean, framesCount: number) {\n const animationData = JSON.parse(json);\n const maxFps = isLowPriority ? LOW_PRIORITY_MAX_FPS : HIGH_PRIORITY_MAX_FPS;\n const sourceFps = animationData.fr || maxFps;\n const reduceFactor = sourceFps % maxFps === 0 ? sourceFps / maxFps : 1;\n\n return {\n reduceFactor,\n msPerFrame: 1000 / (sourceFps / reduceFactor),\n reducedFramesCount: Math.ceil(framesCount / reduceFactor),\n };\n}\n\nasync function renderFrames(\n key: string, fromIndex: number, toIndex: number, onProgress: CancellableCallback,\n) {\n if (!rLottieApi) {\n await rLottieApiPromise;\n }\n\n const { imgSize, reduceFactor, handle } = renderers.get(key)!;\n\n for (let i = fromIndex; i <= toIndex; i++) {\n const realIndex = i * reduceFactor;\n\n rLottieApi.render(handle, realIndex);\n const bufferPointer = rLottieApi.buffer(handle);\n const data = Module.HEAPU8.subarray(bufferPointer, bufferPointer + (imgSize * imgSize * 4));\n const arrayBuffer = new Uint8ClampedArray(data).buffer;\n onProgress(i, arrayBuffer);\n }\n}\n\nfunction destroy(key: string) {\n const renderer = renderers.get(key)!;\n\n rLottieApi.destroy(renderer.handle);\n\n renderers.delete(key);\n}\n\ncreateWorkerInterface({\n init,\n changeData,\n renderFrames,\n destroy,\n});\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n// expose the modules object (__webpack_modules__)\n__webpack_require__.m = __webpack_modules__;\n\n// the startup function\n__webpack_require__.x = () => {\n\t// Load entry module and return exports\n\t// This entry module depends on other loaded chunks and execution need to be delayed\n\tvar __webpack_exports__ = __webpack_require__.O(undefined, [802], () => (__webpack_require__(2993)))\n\t__webpack_exports__ = __webpack_require__.O(__webpack_exports__);\n\treturn __webpack_exports__;\n};\n\n","__webpack_require__.f = {};\n// This file contains only the entry chunk.\n// The chunk loading function for additional chunks\n__webpack_require__.e = (chunkId) => {\n\treturn Promise.all(Object.keys(__webpack_require__.f).reduce((promises, key) => {\n\t\t__webpack_require__.f[key](chunkId, promises);\n\t\treturn promises;\n\t}, []));\n};","// This function allow to reference async chunks and sibling chunks for the entrypoint\n__webpack_require__.u = (chunkId) => {\n\t// return url for filenames based on template\n\treturn \"\" + chunkId + \".\" + \"acd83f1b28a8893b9dba\" + \".js\";\n};","// This function allow to reference async chunks and sibling chunks for the entrypoint\n__webpack_require__.miniCssF = (chunkId) => {\n\t// return url for filenames based on template\n\treturn undefined;\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","var scriptUrl;\nif (__webpack_require__.g.importScripts) scriptUrl = __webpack_require__.g.location + \"\";\nvar document = __webpack_require__.g.document;\nif (!scriptUrl && document) {\n\tif (document.currentScript)\n\t\tscriptUrl = document.currentScript.src\n\tif (!scriptUrl) {\n\t\tvar scripts = document.getElementsByTagName(\"script\");\n\t\tif(scripts.length) scriptUrl = scripts[scripts.length - 1].src\n\t}\n}\n// When supporting browsers where an automatic publicPath is not supported you must specify an output.publicPath manually via configuration\n// or pass an empty string (\"\") and set the __webpack_public_path__ variable from your code to use your own logic.\nif (!scriptUrl) throw new Error(\"Automatic publicPath is not supported in this browser\");\nscriptUrl = scriptUrl.replace(/#.*$/, \"\").replace(/\\?.*$/, \"\").replace(/\\/[^\\/]+$/, \"/\");\n__webpack_require__.p = scriptUrl;","// no baseURI\n\n// object to store loaded chunks\n// \"1\" means \"already loaded\"\nvar installedChunks = {\n\t354: 1\n};\n\n// importScripts chunk loading\nvar installChunk = (data) => {\n\tvar [chunkIds, moreModules, runtime] = data;\n\tfor(var moduleId in moreModules) {\n\t\tif(__webpack_require__.o(moreModules, moduleId)) {\n\t\t\t__webpack_require__.m[moduleId] = moreModules[moduleId];\n\t\t}\n\t}\n\tif(runtime) runtime(__webpack_require__);\n\twhile(chunkIds.length)\n\t\tinstalledChunks[chunkIds.pop()] = 1;\n\tparentChunkLoadingFunction(data);\n};\n__webpack_require__.f.i = (chunkId, promises) => {\n\t// \"1\" is the signal for \"already loaded\"\n\tif(!installedChunks[chunkId]) {\n\t\tif(true) { // all chunks have JS\n\t\t\timportScripts(__webpack_require__.p + __webpack_require__.u(chunkId));\n\t\t}\n\t}\n};\n\nvar chunkLoadingGlobal = self[\"webpackChunktelegram_t\"] = self[\"webpackChunktelegram_t\"] || [];\nvar parentChunkLoadingFunction = chunkLoadingGlobal.push.bind(chunkLoadingGlobal);\nchunkLoadingGlobal.push = installChunk;\n\n// no HMR\n\n// no HMR manifest","// run startup\nvar __webpack_exports__ = __webpack_require__.x();\n"],"names":["deferred","next","window","innerHeight","Math","round","Set","SUPPORTED_IMAGE_CONTENT_TYPES","SUPPORTED_VIDEO_CONTENT_TYPES","self","onerror","e","console","error","sendToOrigin","type","message","addEventListener","reason","callbackState","Map","data","arrayBuffers","postMessage","rLottieApi","importScripts","rLottieApiPromise","Promise","resolve","Module","onRuntimeInitialized","init","cwrap","destroy","resize","buffer","render","loadFromData","renderers","async","extractJson","animationData","response","fetch","contentType","headers","get","startsWith","text","arrayBuffer","inflate","to","calcParams","json","isLowPriority","framesCount","maxFps","sourceFps","JSON","parse","fr","reduceFactor","msPerFrame","reducedFramesCount","ceil","api","key","imgSize","onInit","stringOnWasmHeap","allocate","intArrayFromString","handle","set","changeData","renderFrames","fromIndex","toIndex","onProgress","i","realIndex","bufferPointer","HEAPU8","subarray","Uint8ClampedArray","renderer","delete","onmessage","messageId","name","args","callback","callbackArgs","lastArg","length","ArrayBuffer","undefined","push","isCanceled","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","exports","module","__webpack_modules__","call","m","x","__webpack_exports__","O","result","chunkIds","fn","priority","notFulfilled","Infinity","fulfilled","j","Object","keys","every","splice","r","f","chunkId","all","reduce","promises","u","miniCssF","g","globalThis","this","Function","o","obj","prop","prototype","hasOwnProperty","scriptUrl","location","document","currentScript","src","scripts","getElementsByTagName","Error","replace","p","installedChunks","chunkLoadingGlobal","parentChunkLoadingFunction","bind","moreModules","runtime","pop","then"],"sourceRoot":""} \ No newline at end of file diff --git a/dist/395.93d060131194800fb151.css b/dist/382.f977b0f032aa1cd3a3ee.css similarity index 85% rename from dist/395.93d060131194800fb151.css rename to dist/382.f977b0f032aa1cd3a3ee.css index a18eb8324..13f38287e 100644 --- a/dist/395.93d060131194800fb151.css +++ b/dist/382.f977b0f032aa1cd3a3ee.css @@ -16,7 +16,7 @@ .ReactorListModal{--color-reaction: var(--color-message-reaction);--hover-color-reaction: var(--color-message-reaction-hover);--accent-color: var(--color-primary)}.ReactorListModal .modal-content{overflow:hidden}.ReactorListModal .Reactions{margin-bottom:.5rem}.ReactorListModal .reaction-filter-emoji{margin-right:.25rem}.ReactorListModal .reactor-list{max-height:400px;overflow:auto;overflow-x:hidden}.ReactorListModal .reactors-list-item{margin:0}.ReactorListModal .reactors-list-item .ListItem-button{display:flex;align-items:center}.ReactorListModal .reactors-list-emoji{width:1.5rem;height:1.5rem;margin-inline-start:auto} .EmojiInteractionAnimation{--start-x: 0;--start-y: 0;--scale: 0;position:absolute;top:0;left:0;width:100%;height:100%;pointer-events:none;z-index:1000}@keyframes show-interaction{from{transform:translate(0, 0) scale(var(--scale, 0))}to{transform:translate(-50%, -50%) scale(1)}}@keyframes show-interaction-reversed{from{transform:translate(50%, 0) scaleX(-1) scale(var(--scale, 0))}to{transform:translate(100%, -50%) scaleX(-1) scale(1)}}.EmojiInteractionAnimation .AnimatedSticker{position:absolute;top:var(--start-y);left:var(--start-x);transform:scale(var(--scale), 0);transform-origin:left top;transition:.25s cubic-bezier(0.29, 0.81, 0.27, 0.99) opacity}.EmojiInteractionAnimation.reversed .AnimatedSticker{transform:scale(var(--scale), 0) scaleX(-1)}.EmojiInteractionAnimation.playing .AnimatedSticker{animation:show-interaction forwards .25s cubic-bezier(0.29, 0.81, 0.27, 0.99)}.EmojiInteractionAnimation.reversed.playing .AnimatedSticker{animation:show-interaction-reversed forwards .25s cubic-bezier(0.29, 0.81, 0.27, 0.99)}.EmojiInteractionAnimation.hiding .AnimatedSticker{opacity:0}.EmojiInteractionAnimation.reversed.hiding .AnimatedSticker{opacity:0} .RecentContacts .Loading{min-height:75vh}.RecentContacts .top-peers-section{padding:.5rem 1rem}.RecentContacts .top-peers{height:6rem;margin:0 -1rem;overflow-x:auto;overflow-y:hidden;white-space:nowrap;scrollbar-width:none;scrollbar-color:rgba(0,0,0,0)}.RecentContacts .top-peers::-webkit-scrollbar{height:0}.RecentContacts .top-peers::-webkit-scrollbar-thumb{background-color:rgba(0,0,0,0)}.RecentContacts .top-peer-item{display:inline-block;width:4.5rem;height:6rem;padding:.625rem .25rem;margin-left:.5rem;border-radius:var(--border-radius-default);cursor:pointer;position:relative;overflow:hidden}.RecentContacts .top-peer-item:first-child{margin-left:.125rem}.RecentContacts .top-peer-item:last-child{margin-right:.125rem}.RecentContacts .top-peer-item .Avatar{margin:0 auto .375rem}.RecentContacts .top-peer-item:hover{background:var(--color-chat-hover)}.RecentContacts .top-peer-item .top-peer-name{text-align:center;white-space:nowrap;font-size:.75rem;overflow:hidden;text-overflow:ellipsis}.RecentContacts .top-peer-item .top-peer-name .emoji-small{width:1rem;height:1rem;background-size:1rem;margin-inline-end:1px;vertical-align:-3px}.RecentContacts .recent-chats-header{display:flex;align-items:center}.RecentContacts .recent-chats-header .Button{margin-left:auto}.RecentContacts .recent-chats-header[dir=rtl] .Button{margin-left:0;margin-right:auto} -.ChatMessage:first-child{margin-top:.5rem}.ChatMessage:hover .Avatar.online::after,.ChatMessage.selected .Avatar.online::after{border-color:var(--color-chat-hover)}.ChatMessage .ListItem-button{padding:.25rem .5rem}.ChatMessage .info .title{flex-grow:1}.ChatMessage .info h3{font-size:1rem;width:auto}.ChatMessage .info .subtitle{color:var(--color-text-secondary)}.ChatMessage .info .subtitle .matching-text-highlight{color:var(--color-text);background:#cae3f7;border-radius:.25rem;padding:0 .125rem;display:inline-block}.theme-dark .ChatMessage .info .subtitle .matching-text-highlight{--color-text: #000}.ChatMessage .info .message{flex-grow:1;color:var(--color-text-secondary);overflow:hidden;text-overflow:ellipsis}.ChatMessage .info .message .sender-name{color:var(--color-text)}.ChatMessage .info .message .sender-name::after{content:": "}.ChatMessage .info .message img{width:1.25rem;height:1.25rem;object-fit:cover;border-radius:.125rem;vertical-align:-0.25rem;margin-right:.25rem}.ChatMessage .info .message .icon-play{position:relative;display:inline-block;font-size:.75rem;color:#fff;margin-inline-start:-1.25rem;margin-inline-end:.5rem;bottom:.0625rem}.ChatMessage .info-row{display:flex;justify-content:space-between}.ChatMessage[dir=rtl] .subtitle{text-align:right} +.ChatMessage:first-child{margin-top:.5rem}.ChatMessage:hover .Avatar.online::after,.ChatMessage.selected .Avatar.online::after{border-color:var(--color-chat-hover)}.ChatMessage .ListItem-button{padding:.25rem .5rem}.ChatMessage .info .title{flex-grow:1}.ChatMessage .info h3{font-size:1rem;width:auto}.ChatMessage .info .subtitle{color:var(--color-text-secondary)}.ChatMessage .info .subtitle .matching-text-highlight{color:var(--color-text);background:#cae3f7;border-radius:.25rem;padding:0 .125rem;display:inline-block}.theme-dark .ChatMessage .info .subtitle .matching-text-highlight{--color-text: #000}.ChatMessage .info .message{flex-grow:1;color:var(--color-text-secondary);overflow:hidden;text-overflow:ellipsis}.ChatMessage .info .message .sender-name{color:var(--color-text)}.ChatMessage .info .message .sender-name::after{content:": "}.ChatMessage .info .message .media-preview--image{width:1.25rem;height:1.25rem;object-fit:cover;border-radius:.125rem;vertical-align:-0.25rem;margin-right:.25rem}.ChatMessage .info .message .icon-play{position:relative;display:inline-block;font-size:.75rem;color:#fff;margin-inline-start:-1.25rem;margin-inline-end:.5rem;bottom:.0625rem}.ChatMessage .info-row{display:flex;justify-content:space-between}.ChatMessage[dir=rtl] .subtitle{text-align:right} .DateSuggest{display:flex;height:2rem;flex-direction:row;justify-content:space-between;margin-left:.5rem;margin-bottom:.5rem}.DateSuggest .date-item{display:flex;flex:1 1 auto;min-width:8rem;margin-top:.375rem;cursor:pointer;font-size:.875rem;font-weight:500;color:var(--color-text-secondary)}.DateSuggest .date-item .icon-calendar{font-size:1.25rem;margin-right:.25rem} .LeftSearch{display:flex;flex-direction:column;height:100%;overflow:hidden}.LeftSearch>.Transition{flex:1;overflow:hidden}.LeftSearch .TabList{padding-bottom:1px;z-index:1}.LeftSearch .documents-list{padding:0 1.25rem 1.25rem}.LeftSearch .documents-list .ListItem{padding:.625rem 0}.LeftSearch .section-heading{position:relative;padding-top:1.25rem;padding-left:1.25rem;margin:0 0 1rem -1.25rem !important;font-weight:500;font-size:.9375rem;color:var(--color-text-secondary)}.LeftSearch .section-heading::before{content:"";position:absolute;width:100%;height:1px;background:var(--color-borders);left:.625rem;top:-1px}.LeftSearch .section-heading[dir=rtl],.LeftSearch .section-heading[dir=auto]{padding-left:0;padding-right:1.25rem;margin:0 -1.25rem 0 1rem !important;text-align:initial}.LeftSearch .section-heading[dir=rtl]::before,.LeftSearch .section-heading[dir=auto]::before{left:auto;right:.625rem}.LeftSearch .LeftSearch .search-section .section-heading,.LeftSearch .RecentContacts .search-section .section-heading{margin-left:-1rem !important;width:calc(100% + 2rem);box-shadow:0 -1px 0 0 var(--color-borders)}.LeftSearch .LeftSearch .search-section .section-heading::before,.LeftSearch .RecentContacts .search-section .section-heading::before{display:none}.LeftSearch .WebLink{display:flex}.LeftSearch .content:not(.with-seekline){align-self:center;min-width:0;flex-grow:1;overflow:hidden;text-overflow:ellipsis;word-break:break-word}.LeftSearch .message-date{font-size:.75rem;color:var(--color-text-secondary);padding-left:1rem;white-space:nowrap}.LeftSearch .media-list{display:grid;padding:.5rem;grid-template-columns:repeat(3, 1fr);grid-auto-rows:1fr;grid-gap:.25rem}.LeftSearch .Audio .ProgressSpinner{margin:-0.1875rem 0 0 -0.1875rem}.LeftSearch .ListItem.search-result .ChatInfo .handle{unicode-bidi:plaintext;color:var(--color-primary)}.LeftSearch .ListItem.search-result .ChatInfo .handle::before{content:"@"}html[lang=ar] .LeftSearch .ListItem.search-result .ChatInfo .handle::before{content:" ،@";margin-inline-end:.25rem}.LeftSearch .ListItem.search-result .ChatInfo .handle::after{content:", ";color:var(--color-text-secondary)}html[lang=ar] .LeftSearch .ListItem.search-result .ChatInfo .handle::after{content:""}.LeftSearch .ListItem.search-result .ChatInfo[dir=rtl] .status{text-align:right}.LeftSearch .ListItem.search-result .ChatInfo[dir=rtl] .status .handle{float:right}.LeftSearch .ListItem.search-result-message .sender-name{color:var(--color-text)}.LeftSearch .ListItem.search-result-message .sender-name::after{content:": ";white-space:pre}@media(max-width: 600px){.LeftSearch .ListItem{margin:0 -0.625rem}}.LeftSearch .search-section{padding:0 1rem .5rem}.LeftSearch .search-section .section-heading{color:var(--color-text-secondary);font-size:.9375rem;font-weight:500;margin-bottom:0 !important;padding-top:.875rem}.LeftSearch .search-section .section-heading .Link{float:right;color:var(--color-links);font-weight:400;margin-right:1rem}.LeftSearch .search-section .section-heading .Link:focus,.LeftSearch .search-section .section-heading .Link:hover{text-decoration:underline}.LeftSearch .search-section .section-heading[dir=rtl] .Link,.LeftSearch .search-section .section-heading[dir=auto] .Link{float:left;margin-left:1rem;margin-right:0}.LeftSearch .search-section .Loading{height:4.5rem;margin-bottom:.5rem}.LeftSearch .chat-selection{padding-top:.5rem;display:flex;flex-shrink:0;flex-wrap:nowrap;justify-content:space-between;align-items:flex-end;box-shadow:inset 0 -1px 0 0 var(--color-borders);background-color:var(--color-background);-webkit-overflow-scrolling:touch;overflow-x:auto;overflow-y:hidden;scrollbar-color:rgba(0,0,0,0)}.LeftSearch .chat-selection>.PickerSelectedItem{flex:0 0 auto}.LeftSearch .chat-selection>.PickerSelectedItem:last-child{margin-right:auto}.LeftSearch .chat-selection[dir=rtl]>.PickerSelectedItem:last-child{margin-left:auto;margin-right:0}.LeftSearch .NothingFound{height:100%}.LeftSearch [dir=rtl] .message-date{padding-left:0;padding-right:1rem} .CropModal .modal-dialog{width:calc(100% - 2rem);max-width:35rem;height:calc(100% - 1rem);max-height:35rem;position:relative}.CropModal .modal-content,.CropModal #avatar-crop{overflow:hidden}.CropModal .confirm-button{position:absolute;bottom:1rem;right:1rem;box-shadow:0 1px 2px var(--color-default-shadow)}.CropModal #avatar-crop{max-width:25rem;margin:0 auto;position:relative}.CropModal #avatar-crop::before{content:"";display:block;padding-top:100%}.CropModal #avatar-crop .cr-boundary{position:absolute;top:0;left:0;border-radius:var(--border-radius-messages-small)}.CropModal #avatar-crop .cr-viewport{border:none;box-shadow:0 0 2000px 2000px rgba(127,127,127,.5)}.CropModal #avatar-crop .cr-slider::-webkit-slider-runnable-track{background:var(--color-borders)}.CropModal #avatar-crop .cr-slider::-moz-range-track{background:var(--color-borders)}.CropModal #avatar-crop .cr-slider::-ms-track{background:var(--color-borders)}.CropModal #avatar-crop .cr-slider::-webkit-slider-thumb{background:var(--color-primary);cursor:pointer;transform:scale(1);-webkit-transition:transform .25s ease-in-out;transition:transform .25s ease-in-out}.CropModal #avatar-crop .cr-slider::-webkit-slider-thumb:hover{transform:scale(1.2)}.CropModal #avatar-crop .cr-slider::-moz-range-thumb{background:var(--color-primary);cursor:pointer;transform:scale(1);-moz-transition:transform .25s ease-in-out;transition:transform .25s ease-in-out}.CropModal #avatar-crop .cr-slider::-moz-range-thumb:hover{transform:scale(1.2)}.CropModal #avatar-crop .cr-slider::-ms-thumb{background:var(--color-primary);cursor:pointer;transform:scale(1);-ms-transition:transform .25s ease-in-out;transition:transform .25s ease-in-out}.CropModal #avatar-crop .cr-slider::-ms-thumb:hover{transform:scale(1.2)} @@ -26,10 +26,11 @@ .settings-folders-recommended-item{width:100%;display:flex;align-items:center;justify-content:space-between}.settings-folders-list-item .ChatInfo{display:flex;align-items:center}.settings-folders-list-item .ChatInfo .Avatar{margin-left:-0.25rem;margin-right:1.5rem}.settings-folders-list-item .ChatInfo .title{display:flex;justify-content:flex-start;align-items:center}.settings-folders-list-item .ChatInfo .title h3{font-size:1rem;font-weight:500;line-height:1.3125;margin:0;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;text-align:left}.settings-folders-list-item .ChatInfo .status{display:none}.settings-folders-list-item .ChatInfo[dir=rtl] .title h3{text-align:right}.settings-folders-list-item .ListItem-button i{opacity:.9}.settings-folders-list-item.color-primary .ListItem-button{color:var(--color-primary)}.settings-folders-list-item.color-primary .ListItem-button i{opacity:1;color:inherit}.settings-folders-list-item[dir=rtl] .Avatar{margin-left:1.5rem;margin-right:-0.25rem}.settings-item .ShowMoreButton{margin:0 -1rem;width:calc(100% + 2rem);padding-left:1rem !important} .settings-item .SettingsStickerSet.ListItem{margin-bottom:.5rem}.SettingsStickerSet .StickerButton,.SettingsStickerSet .Button{width:3rem;height:3rem;margin:0 .5rem 0 0;padding:0;flex:0 0 3rem}.SettingsStickerSet img{max-width:100%;max-height:100%}.SettingsStickerSet .multiline-menu-item{display:flex;flex-direction:column;justify-content:center}.SettingsStickerSet[dir=rtl] .StickerButton,.SettingsStickerSet[dir=rtl] .Button{margin:0 0 0 .5rem} .WallpaperTile{height:0;padding-bottom:100%;cursor:pointer;position:relative}.WallpaperTile .media-inner,.WallpaperTile::after{position:absolute;left:0;top:0;width:100%;height:100%}.WallpaperTile .media-inner{overflow:hidden;transform:scale(1);transition:transform .15s ease}.WallpaperTile .media-inner img,.WallpaperTile .media-inner canvas{position:absolute;left:0;top:0;width:100%;height:100%;object-fit:cover}.WallpaperTile::after{content:"";display:block;border:2px solid var(--color-primary);opacity:0;transition:opacity .15s ease}.WallpaperTile.selected::after{opacity:1}.WallpaperTile.selected .media-inner{transform:scale(0.9)}.WallpaperTile .spinner-container{height:100%;display:flex;align-items:center;justify-content:center} -.SettingsGeneralBackground .settings-wallpapers{display:grid;padding:.5rem;grid-template-columns:repeat(3, 1fr);grid-auto-rows:1fr;grid-gap:.25rem}.SettingsGeneralBackground .Loading{height:auto !important;margin-top:5rem} -.SettingsGeneralBackgroundColor:not(.is-dragging) .handle{transition:transform 300ms ease}.SettingsGeneralBackgroundColor .color-picker,.SettingsGeneralBackgroundColor .hue-picker{position:relative}.SettingsGeneralBackgroundColor .color-picker{margin-top:1rem;height:12rem}.SettingsGeneralBackgroundColor .hue-picker{margin:2rem 0;height:.5rem}.SettingsGeneralBackgroundColor canvas{display:block;width:100%;height:100%;border-radius:var(--border-radius-default);cursor:pointer}.SettingsGeneralBackgroundColor .handle{position:absolute;top:-0.75rem;left:-0.75rem;width:1.5rem;height:1.5rem;border:.125rem solid var(--color-white);border-radius:.75rem;cursor:grab}.SettingsGeneralBackgroundColor .hue-picker .handle{top:-0.5rem}.SettingsGeneralBackgroundColor .tools{margin-bottom:.625rem;display:flex}.SettingsGeneralBackgroundColor .tools .input-group{margin-bottom:0}.SettingsGeneralBackgroundColor .tools .input-group[dir=rtl] label{transform:scale(0.75) translate(1.25rem, -2.25rem)}.SettingsGeneralBackgroundColor .tools .input-group:first-child{margin-right:.5rem}.SettingsGeneralBackgroundColor .tools .input-group:last-child{margin-left:.5rem}.SettingsGeneralBackgroundColor .predefined-colors{display:grid;padding:.5rem;grid-template-columns:repeat(3, 1fr);grid-auto-rows:1fr;grid-gap:.25rem}.SettingsGeneralBackgroundColor .predefined-colors div{cursor:pointer;box-shadow:inset 0 0 0 0 var(--color-background);transition:box-shadow 300ms ease}.SettingsGeneralBackgroundColor .predefined-colors div.active{border:.125rem solid var(--color-primary);box-shadow:inset 0 0 0 .3125rem var(--color-background)}.SettingsGeneralBackgroundColor .predefined-colors div:before{display:block;content:"";width:100%;padding-top:100%;pointer-events:none} +.SettingsGeneralBackground .settings-wallpapers{display:grid;grid-template-columns:repeat(3, 1fr);grid-auto-rows:1fr;grid-gap:.0625rem;background-color:var(--color-background);box-shadow:inset 0 -0.0625rem 0 0 var(--color-background-secondary-accent)}.SettingsGeneralBackground .Loading{height:auto !important;margin-top:5rem} +.SettingsGeneralBackgroundColor:not(.is-dragging) .handle{transition:transform 300ms ease}.SettingsGeneralBackgroundColor .color-picker,.SettingsGeneralBackgroundColor .hue-picker{position:relative}.SettingsGeneralBackgroundColor .color-picker{margin-top:1rem;height:12rem}.SettingsGeneralBackgroundColor .hue-picker{margin:2rem 0;height:.5rem}.SettingsGeneralBackgroundColor canvas{display:block;width:100%;height:100%;border-radius:var(--border-radius-default);cursor:pointer}.SettingsGeneralBackgroundColor .handle{position:absolute;top:-0.75rem;left:-0.75rem;width:1.5rem;height:1.5rem;border:.125rem solid var(--color-white);border-radius:.75rem;cursor:grab}.SettingsGeneralBackgroundColor .hue-picker .handle{top:-0.5rem}.SettingsGeneralBackgroundColor .tools{margin-bottom:.625rem;display:flex}.SettingsGeneralBackgroundColor .tools .input-group{margin-bottom:0}.SettingsGeneralBackgroundColor .tools .input-group[dir=rtl] label{transform:scale(0.75) translate(1.25rem, -2.25rem)}.SettingsGeneralBackgroundColor .tools .input-group:first-child{margin-right:.5rem}.SettingsGeneralBackgroundColor .tools .input-group:last-child{margin-left:.5rem}.SettingsGeneralBackgroundColor .predefined-colors{display:grid;grid-template-columns:repeat(3, 1fr);grid-auto-rows:1fr;grid-gap:.0625rem;background-color:var(--color-background);box-shadow:inset 0 -0.0625rem 0 0 var(--color-background-secondary-accent)}.SettingsGeneralBackgroundColor .predefined-colors div{cursor:pointer;box-shadow:inset 0 0 0 0 var(--color-background);transition:box-shadow 300ms ease}.SettingsGeneralBackgroundColor .predefined-colors div.active{border:.125rem solid var(--color-primary);box-shadow:inset 0 0 0 .3125rem var(--color-background)}.SettingsGeneralBackgroundColor .predefined-colors div:before{display:block;content:"";width:100%;padding-top:100%;pointer-events:none} +.SettingsActiveSessions .icon-device{width:2rem;height:2rem;background-repeat:no-repeat;background-size:2rem;flex:0 0 2rem;margin-inline-end:1.5rem !important}.SettingsActiveSessions .icon-device-android{background-image:url(android.3fd8913fc3ab8c48d039..svg)}.SettingsActiveSessions .icon-device-apple{background-image:url(apple.7e61086d966b3fbd562b..svg)}.SettingsActiveSessions .icon-device-brave{background-image:url(brave.5fc67acc240df66c9f63..svg)}.SettingsActiveSessions .icon-device-chrome{background-image:url(chrome.e6f5deb578a9563ebc14..svg)}.SettingsActiveSessions .icon-device-edge{background-image:url(edge.b03a02e7c8f76b0fe020..svg)}.SettingsActiveSessions .icon-device-firefox{background-image:url(firefox.d61f7f1396d1867cc631..svg)}.SettingsActiveSessions .icon-device-linux{background-image:url(linux.17838dc8e5bf69eb8e53..svg)}.SettingsActiveSessions .icon-device-opera{background-image:url(opera.c97c326dee36ae4426e1..svg)}.SettingsActiveSessions .icon-device-safari{background-image:url(safari.38e22a99575c5e8cc9cd..svg)}.SettingsActiveSessions .icon-device-samsung{background-image:url(samsung.cb5a46b8b3d340424c5f..svg)}.SettingsActiveSessions .icon-device-ubuntu{background-image:url(ubuntu.75a406b40e691fa18b17..svg)}.SettingsActiveSessions .icon-device-unknown{background-image:url(unknown.fa5280d9b0d1a0bd6402..svg)}.SettingsActiveSessions .icon-device-vivaldi{background-image:url(vivaldi.5d1833ca4b2f2b087a42..svg)}.SettingsActiveSessions .icon-device-windows{background-image:url(windows.3ec278d6200e130e0b42..svg)}.SettingsActiveSessions .icon-device-xbox{background-image:url(xbox.0c4b680a881da0b245bc..svg)} #monkey{position:relative;display:block;margin-left:auto;margin-right:auto;width:7.5rem;height:7.5rem;margin-bottom:1.75rem}@media(min-width: 600px)and (min-height: 450px){#monkey{width:10rem;height:10rem;margin-bottom:2.5rem}}#monkey.big{width:10rem;height:10rem}#monkey .AnimatedSticker{position:absolute;left:0;top:0;width:100%;height:100%}#monkey .AnimatedSticker.hidden{display:none}#monkey .monkey-preview{width:100%;height:100%;background:url(monkey.a3d5fcdc50b18dc55695..svg) center;background-size:100%} -#Settings{height:100%}#Settings>div{display:flex;flex-direction:column;overflow:hidden}#Settings .left-header{padding-right:.8125rem}.settings-main-header{display:flex;flex-grow:1;justify-content:space-between;align-items:center}.settings-more-menu .bubble{width:auto}.settings-more-menu .bubble .MenuItem button{padding-left:1rem !important;padding-right:2rem !important}.settings-content{background:var(--color-background);height:calc(100% - var(--header-height));overflow-y:auto}@supports(overflow-y: overlay){.settings-content{overflow-y:overlay;overflow-x:hidden}}.settings-content.infinite-scroll{display:flex;flex-direction:column}.settings-content.infinite-scroll>.custom-scroll{flex:1 1 auto;height:auto}.settings-content #monkey{margin-top:.5rem;margin-bottom:1rem}.settings-content .AnimatedEmoji{margin-top:.5rem;margin-bottom:1.5rem}.settings-content-header{display:flex;flex-direction:column;align-items:center;padding:0 1.5rem 1rem;text-align:center}.settings-content-header .input-group{width:100%}.settings-content-icon{width:5rem;height:5rem;margin-bottom:2.5rem;position:relative}.settings-content-icon .AnimatedSticker{position:absolute;left:0;top:0;width:100%;height:100%}.settings-content-icon .AnimatedSticker.hidden{display:none}.settings-main-menu{padding:0 .5rem .75rem}.settings-main-menu>.ChatExtra{padding:0 .5rem .3125rem;margin:0 -0.5rem .625rem;box-shadow:inset 0 -0.0625rem 0 0 var(--color-background-secondary-accent);border-bottom:.625rem solid var(--color-background-secondary)}.settings-main-menu>.ChatExtra .ListItem.narrow{margin-bottom:.25rem}.settings-item{border-top:1px solid var(--color-borders);padding:1.5rem 1.5rem 1rem}.settings-item.no-border{border-top:none}.settings-item-header{font-size:1rem;color:var(--color-text-secondary);margin-bottom:2rem;position:relative}.settings-item-header[dir=rtl]{text-align:right}.settings-item-slider{margin-top:2rem}.settings-item-description{font-size:.875rem;color:var(--color-text-secondary);margin-top:-0.5rem;margin-bottom:1.5rem}.settings-content.two-fa .settings-item-description{font-size:1rem}.settings-item-description[dir=rtl]{text-align:right;unicode-bidi:plaintext}.settings-item-description-larger{font-size:1rem;line-height:1.3125rem;color:var(--color-text-secondary);margin-top:2rem;margin-bottom:.75rem}.settings-item-description-larger[dir=rtl]{text-align:right}.settings-item .ListItem{margin:0 -1rem 1rem}.settings-item .ListItem:last-child{margin-bottom:0}.settings-item .ListItem .multiline-menu-item{white-space:initial}.settings-item .ListItem .multiline-menu-item.full-size{width:100%}.settings-item .ListItem .multiline-menu-item .date{float:right;font-size:.75rem;margin-left:1rem;color:var(--color-text-secondary)}.settings-item .ListItem .multiline-menu-item .title,.settings-item .ListItem .multiline-menu-item .subtitle{display:block;text-align:left}.settings-item .ListItem .multiline-menu-item .title{line-height:1.25rem}.settings-item .ListItem .multiline-menu-item .subtitle{font-size:.875rem;line-height:1.5rem;color:var(--color-text-secondary)}.settings-item .ListItem .multiline-menu-item .subtitle+.subtitle{margin-top:-0.25rem}.settings-item .ListItem .multiline-menu-item .subtitle.black{color:var(--color-text)}.settings-item .ListItem .multiline-menu-item .subtitle.tight{line-height:1.3125rem;margin-bottom:.1875rem}.settings-item .ListItem.destructive .ListItem-button{color:var(--color-error)}.settings-item .ListItem.destructive .ListItem-button i{color:inherit}.settings-item .ListItem.blocked-list-item{margin-bottom:.5rem}.settings-item .ListItem.blocked-list-item .ListItem-button{align-items:center;text-align:left;padding:.5rem}.settings-item .ListItem.blocked-list-item .Avatar{width:3rem;height:3rem;margin-right:1rem}.settings-item .ListItem.blocked-list-item .contact-name{font-size:1rem;line-height:1rem;margin-bottom:.25rem;font-weight:500}.settings-item .ListItem.blocked-list-item .contact-phone{font-size:.875rem;line-height:1rem;color:var(--color-text-secondary)}.settings-item .ListItem[dir=rtl] .multiline-menu-item .title,.settings-item .ListItem[dir=rtl] .multiline-menu-item .subtitle{text-align:right}.settings-item .ListItem[dir=rtl] .multiline-menu-item .date{float:left;margin-left:0;margin-right:1rem}.settings-item .RangeSlider{margin-bottom:1.0625rem}.settings-item .Checkbox,.settings-item .radio-group{margin:0 -1rem .5rem}.settings-item .radio-group .Radio:last-child{margin-bottom:0}.settings-item .Radio+.Radio,.settings-item .Checkbox+.Checkbox{margin-top:2rem}.settings-fab-wrapper{height:calc(100% - var(--header-height));position:relative;overflow:hidden}.settings-fab-wrapper .settings-content{height:100%}.settings-fab-wrapper .FloatingActionButton{right:1.5rem}.settings-edit-profile{padding:0 1.5rem}.username-link{color:var(--color-links)}.settings-quick-reaction .Radio-main .label{display:flex}.settings-quick-reaction .ReactionStaticEmoji{margin-inline-end:1rem;width:1.5rem}.SettingsDefaultReaction .ReactionStaticEmoji{width:1.5rem;height:1.5rem;margin-inline-end:2rem} +#Settings{height:100%}#Settings>div{display:flex;flex-direction:column;overflow:hidden}#Settings .left-header{padding-right:.8125rem}.settings-main-header{display:flex;flex-grow:1;justify-content:space-between;align-items:center}.settings-more-menu .bubble{width:auto}.settings-more-menu .bubble .MenuItem button{padding-left:1rem !important;padding-right:2rem !important}.settings-content{border-top:1px solid var(--color-borders);background-color:var(--color-background-secondary);height:calc(100% - var(--header-height));overflow-y:auto}@supports(overflow-y: overlay){.settings-content{overflow-y:overlay;overflow-x:hidden}}.settings-content.no-border,.settings-content.two-fa{border-top:none}.settings-content.infinite-scroll{display:flex;flex-direction:column}.settings-content.infinite-scroll>.custom-scroll{flex:1 1 auto;height:auto}.settings-content #monkey{margin-top:.5rem;margin-bottom:1rem}.settings-content .AnimatedEmoji{margin-top:.5rem;margin-bottom:1.5rem}.settings-content-header{display:flex;flex-direction:column;align-items:center;padding:0 1.5rem 1rem;text-align:center;background-color:var(--color-background);box-shadow:inset 0 -0.0625rem 0 0 var(--color-background-secondary-accent);margin-bottom:.625rem}.settings-content-header.no-border{margin-bottom:0;box-shadow:none}.settings-content-header .input-group{width:100%}.settings-content-icon{width:5rem;height:5rem;margin-bottom:2.5rem;position:relative}.settings-content-icon .AnimatedSticker{position:absolute;left:0;top:0;width:100%;height:100%}.settings-content-icon .AnimatedSticker.hidden{display:none}.settings-main-menu{padding:0 .5rem .75rem;background-color:var(--color-background)}.settings-main-menu>.ChatExtra{padding:0 .5rem .3125rem;margin:0 -0.5rem .625rem;box-shadow:inset 0 -0.0625rem 0 0 var(--color-background-secondary-accent);border-bottom:.625rem solid var(--color-background-secondary)}.settings-main-menu>.ChatExtra .ListItem.narrow{margin-bottom:.25rem}.settings-item{background-color:var(--color-background);padding:1.5rem 1.5rem 1rem;box-shadow:inset 0 -0.0625rem 0 0 var(--color-background-secondary-accent);margin-bottom:.625rem}.settings-item.no-border{margin-bottom:0;box-shadow:none}.settings-item-header{font-size:1rem;color:var(--color-text-secondary);margin-bottom:2rem;position:relative}.settings-item-header[dir=rtl]{text-align:right}.settings-item-slider{margin-top:2rem}.settings-item-description{font-size:.875rem;color:var(--color-text-secondary);margin-top:-0.5rem;margin-bottom:1.5rem}.settings-content.two-fa .settings-item-description{font-size:1rem}.settings-edit-profile .settings-item-description{margin-bottom:0;padding-bottom:1.5rem}.settings-item-description[dir=rtl]{text-align:right;unicode-bidi:plaintext}.settings-item-description-larger{font-size:1rem;line-height:1.3125rem;color:var(--color-text-secondary);margin-top:2rem;margin-bottom:.75rem}.settings-item-description-larger[dir=rtl]{text-align:right}.settings-item .ListItem{margin:0 -1rem 1rem}.settings-item .ListItem:last-child{margin-bottom:0}.settings-item .ListItem .multiline-menu-item{white-space:initial}.settings-item .ListItem .multiline-menu-item.full-size{width:100%}.settings-item .ListItem .multiline-menu-item .date{float:right;font-size:.75rem;margin-left:1rem;color:var(--color-text-secondary)}.settings-item .ListItem .multiline-menu-item .title,.settings-item .ListItem .multiline-menu-item .subtitle{display:block;text-align:left}.settings-item .ListItem .multiline-menu-item .title{line-height:1.25rem}.settings-item .ListItem .multiline-menu-item .subtitle{font-size:.875rem;line-height:1.5rem;color:var(--color-text-secondary)}.settings-item .ListItem .multiline-menu-item .subtitle+.subtitle{margin-top:-0.25rem}.settings-item .ListItem .multiline-menu-item .subtitle.black{color:var(--color-text)}.settings-item .ListItem .multiline-menu-item .subtitle.tight{line-height:1.3125rem;margin-bottom:.1875rem}.settings-item .ListItem.destructive .ListItem-button{color:var(--color-error)}.settings-item .ListItem.destructive .ListItem-button i{color:inherit}.settings-item .ListItem.blocked-list-item{margin-bottom:.5rem}.settings-item .ListItem.blocked-list-item .ListItem-button{align-items:center;text-align:left;padding:.5rem}.settings-item .ListItem.blocked-list-item .Avatar{width:3rem;height:3rem;margin-right:1rem}.settings-item .ListItem.blocked-list-item .contact-name{font-size:1rem;line-height:1rem;margin-bottom:.25rem;font-weight:500}.settings-item .ListItem.blocked-list-item .contact-phone{font-size:.875rem;line-height:1rem;color:var(--color-text-secondary)}.settings-item .ListItem[dir=rtl] .multiline-menu-item .title,.settings-item .ListItem[dir=rtl] .multiline-menu-item .subtitle{text-align:right}.settings-item .ListItem[dir=rtl] .multiline-menu-item .date{float:left;margin-left:0;margin-right:1rem}.settings-item .RangeSlider{margin-bottom:1.0625rem}.settings-item .Checkbox,.settings-item .radio-group{margin:0 -1rem .5rem}.settings-item .radio-group .Radio:last-child{margin-bottom:0}.settings-item .Radio+.Radio,.settings-item .Checkbox+.Checkbox{margin-top:2rem}.settings-item__current-value{margin-inline-start:auto;padding-inline-start:.5rem;font-size:.9375rem;color:var(--color-text-secondary)}.settings-fab-wrapper{height:calc(100% - var(--header-height));position:relative;overflow:hidden}.settings-fab-wrapper .settings-content{height:100%}.settings-fab-wrapper .FloatingActionButton{right:1.5rem}.settings-edit-profile{padding:0 1.5rem}.username-link{color:var(--color-links)}.settings-quick-reaction .Radio-main .label{display:flex}.settings-quick-reaction .ReactionStaticEmoji{margin-inline-end:1rem;width:1.5rem}.SettingsDefaultReaction .ReactionStaticEmoji{width:1.5rem;height:1.5rem;margin-inline-end:2rem} .NewChat{height:100%;overflow:hidden;position:relative}.NewChat-inner{height:calc(100% - var(--header-height));overflow:hidden}.NewChat-inner.step-2{padding:0 1.25rem;display:flex;flex-direction:column}.NewChat-inner.step-2 .note,.NewChat-inner.step-2 .error{font-size:.875rem;line-height:1.25rem;margin:1.5rem .25rem}.NewChat-inner.step-2 .error{color:var(--color-error)}.NewChat-inner.step-2 .note{margin-top:-0.5625rem;color:var(--color-text-secondary)}.NewChat-inner.step-2 .chat-members-heading{color:var(--color-text-secondary);font-size:1rem;font-weight:500;margin:1rem .25rem}.NewChat-inner.step-2 .chat-members-list{margin:0 -1.25rem;padding:0 1rem 1rem;overflow-x:hidden;flex-grow:1} .ArchivedChats{height:100%;overflow:hidden}.ArchivedChats .chat-list{height:calc(100% - var(--header-height))} .ReactionSelectorReaction{margin-left:.5rem;position:relative;min-width:2rem;min-height:2rem}.ReactionSelectorReaction:first-child{margin-left:0}.ReactionSelectorReaction__static{width:100%;height:100%;position:absolute;top:0;left:0;background:url(reaction-thumbs.f920d3f2147d986b6cbe..png) no-repeat;background-size:auto 100%}.ReactionSelectorReaction .AnimatedSticker{position:absolute;top:0;left:0}.ReactionSelectorReaction--compact{min-width:1.5rem;min-height:1.5rem} @@ -65,7 +66,7 @@ .Statistics{height:100%;overflow-x:hidden;overflow-y:hidden}.Statistics__messages{padding:1rem .75rem;border-top:1px solid var(--color-borders)}.Statistics__messages-title{padding-left:.25rem;font-size:16px;color:var(--text-color);line-height:30px;text-transform:lowercase}.Statistics__messages-title:first-letter{text-transform:uppercase}.Statistics.ready{overflow-y:scroll !important}.Statistics__graph{margin-bottom:1rem;border-bottom:1px solid var(--color-borders);opacity:1;transition:opacity .3s ease}.Statistics__graph:last-of-type{margin-bottom:0;border-bottom:none}.Statistics__graph.hidden{opacity:0}.Statistics .lovely-chart--container{font:inherit !important;font-size:13px !important}.Statistics .lovely-chart--header{margin:0 1rem}.Statistics .lovely-chart--header,.Statistics .lovely-chart--tooltip-title,.Statistics .lovely-chart--tooltip-dataset-value,.Statistics .lovely-chart--percentage-title{font-weight:500 !important}.Statistics .lovely-chart--container-type-pie.lovely-chart--state-zoomed-in>canvas{animation-name:pie-slim-in !important}.Statistics .lovely-chart--container-type-pie:not(.lovely-chart--state-zoomed-in)>canvas{animation-name:pie-slim-out !important}@keyframes pie-slim-in{0%{clip-path:circle(80% at center calc(50% - 7.5px));-webkit-clip-path:circle(80% at center calc(50% - 7.5px));transform:rotate(-360deg)}25%{clip-path:circle(40% at center calc(50% - 7.5px));-webkit-clip-path:circle(40% at center calc(50% - 7.5px));transform:rotate(-360deg)}75%{clip-path:circle(40% at center calc(50% - 7.5px));-webkit-clip-path:circle(40% at center calc(50% - 7.5px));transform:rotate(0)}}@keyframes pie-slim-out{0%{clip-path:circle(40% at center calc(50% - 7.5px));-webkit-clip-path:circle(40% at center calc(50% - 7.5px));transform:rotate(360deg)}50%{clip-path:circle(40% at center calc(50% - 7.5px));-webkit-clip-path:circle(40% at center calc(50% - 7.5px));transform:rotate(0)}75%{clip-path:circle(80% at center calc(50% - 7.5px));-webkit-clip-path:circle(80% at center calc(50% - 7.5px));transform:rotate(0)}} .PollAnswerResults{border-bottom:1px solid var(--color-borders);padding:0 .5rem .625rem;display:flex;flex-direction:column-reverse}.PollAnswerResults .answer-head{display:flex;align-items:center;font-size:.9375rem;line-height:1.3125rem;font-weight:500;color:var(--color-text-secondary);padding:1rem .75rem .5rem 1rem;position:sticky;top:0;background:var(--color-background)}@media(max-width: 600px){.PollAnswerResults .answer-head{padding:.5rem .25rem .5rem .5rem}}.PollAnswerResults .answer-percent{margin-left:auto}.PollAnswerResults .answer-percent[dir=auto]{margin-left:0;margin-right:auto}.PollAnswerResults .poll-voters{padding:0 .75rem;position:relative;min-height:3rem}@media(max-width: 600px){.PollAnswerResults .poll-voters{padding:0 .25rem}}.PollAnswerResults .poll-voters .Spinner{--spinner-size: 1.25rem}.PollAnswerResults .chat-item-clickable .ChatInfo .Avatar.size-tiny{margin-right:1.75rem}.PollAnswerResults .chat-item-clickable[dir=rtl] .ChatInfo .Avatar.size-tiny{margin-left:1.75rem;margin-right:0}.PollAnswerResults .ShowMoreButton{margin:.25rem 0 0 -0.5rem;width:calc(100% + 1rem)}.PollAnswerResults .ShowMoreButton[dir=rtl] .icon-down{margin-left:2rem;margin-right:0}.PollAnswerResults .icon-down{vertical-align:middle;margin-right:2rem;font-size:1.5rem} .PollResults{height:100%;position:relative;display:flex;flex-direction:column;pointer-events:auto}.PollResults>.Loading{position:absolute;top:0;left:0;bottom:0;right:0;background:rgba(255,255,255,.75)}.PollResults .poll-question{padding:.75rem 1.5rem;flex-shrink:0;font-size:1.25rem}@media(max-width: 600px){.PollResults .poll-question{padding:0 1rem}}.PollResults .poll-results-list{border-top:1px solid var(--color-borders);flex-grow:1;overflow:auto} -.Management{position:relative;height:100%}.Management>.custom-scroll{height:100%;overflow-y:scroll;overflow-x:hidden}.Management .section{padding:1rem 1.5rem;border-top:1px solid var(--color-borders)}.Management .section.wide{padding:1.5rem}.Management .section:first-of-type{border-top:none;padding-top:1rem}.Management .section.no-border{border-top:none}.Management .section>.ChatInfo{margin:0 0 2rem !important}.Management .section>.ChatInfo .title h3{margin-bottom:0}.Management .section .section-icon{width:8.75rem;height:8.75rem;margin:0 auto 2rem;position:relative}.Management .section .section-icon .AnimatedSticker{position:absolute;left:0;top:0;width:100%;height:100%}.Management .section .section-icon .AnimatedSticker.hidden{display:none}.Management .section .ListItem{margin:0 -0.75rem}.Management .section .ListItem .Reaction{display:flex;align-items:center}.Management .section .ListItem .ReactionStaticEmoji{width:1.5rem;margin-right:1rem}.Management .section .ListItem:last-child{margin-bottom:0}.Management .section .ListItem .multiline-item .subtitle{line-height:1.25rem;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.Management .section .ListItem:not(.picker-list-item) .Checkbox{margin-top:2rem;margin-bottom:2rem}.Management .section .ListItem.narrow .Checkbox{margin-top:1rem;margin-bottom:1rem}.Management .section .ListItem.exceptions-member .ChatInfo .status{white-space:pre-wrap}.Management .section .section-heading{font-weight:500;font-size:.9375rem;color:var(--color-text-secondary)}.Management .section .section-heading[dir=auto]{text-align:initial}.Management .section .section-help{color:var(--color-text-secondary);line-height:1.375rem}.Management .section .section-help[dir=auto]{text-align:initial}.Management .section .section-info{color:var(--color-text-secondary);font-size:.875rem}.Management .section[dir=rtl]{text-align:right}.Management textarea.form-control{height:auto}.Management .group-link{color:var(--color-text)}.Management .radio-group{margin-top:2rem}.Management .radio-group .Radio{padding-left:3.5rem;margin-bottom:2rem}.Management .radio-group .Radio:last-child{margin-bottom:.625rem}.Management .radio-group .Radio-main::before{left:.125rem;top:.25rem;transform:none}.Management .radio-group .Radio-main::after{left:.4375rem;top:.5625rem;transform:none}.Management__filter{padding:0 1rem .25rem .75rem;border-bottom:1px solid var(--color-borders);display:flex;flex-flow:row wrap;flex-shrink:0;overflow-y:auto;max-height:20rem}.Management__filter .input-group{margin-bottom:.5rem;margin-left:.5rem;flex-grow:1}.Management__filter .form-control{height:2rem;border:none;border-radius:0;padding:0;box-shadow:none}.Management .Spinner{margin:2rem auto}.ManageGroupMembers{padding:.5rem 1rem}.ManageInvites .primary-link{position:relative}.ManageInvites .primary-link-input{cursor:pointer;margin-bottom:1rem;padding-right:3rem}.ManageInvites .primary-link-more-menu{position:absolute;right:.5rem;top:50%;transform:translate(0, -50%);z-index:1}.ManageInvites .create-link{margin-bottom:.5rem}.ManageInvites .invite-title{white-space:nowrap}.ManageInvite .link-name{margin-bottom:1rem}.ManageInvite .expire-limit{margin-top:1rem}.ManageInvite .usage-limit{margin-top:1rem;-moz-appearance:textfield}.ManageInvite .usage-limit::-webkit-outer-spin-button,.ManageInvite .usage-limit::-webkit-inner-spin-button{-webkit-appearance:none}.ManageInvite .custom-scroll{padding-bottom:4rem}.ManageInviteInfo .copy-link{margin-top:1rem;margin-bottom:1rem}.ManageInviteInfo .link-title{text-align:center}.ManageJoinRequests .bulk-actions{display:flex;justify-content:space-around}.ManageJoinRequests .bulk-action-button{width:auto;height:auto}.ManageInvite .hint,.ManageInvites .hint{font-size:.875rem;margin-bottom:0;margin-top:.5rem} +.Management{position:relative;height:100%;background-color:var(--color-background-secondary)}.Management>.custom-scroll{height:100%;overflow-y:scroll;overflow-x:hidden}.Management .section{padding:1rem 1.5rem;background-color:var(--color-background);box-shadow:inset 0 -0.0625rem 0 0 var(--color-background-secondary-accent);margin-bottom:.625rem}.Management .section.wide{padding:1.5rem}.Management .section:first-of-type{padding-top:1rem}.Management .section.no-border{border-top:none}.Management .section>.ChatInfo{margin:0 0 2rem !important}.Management .section>.ChatInfo .title h3{margin-bottom:0}.Management .section .section-icon{width:8.75rem;height:8.75rem;margin:0 auto 2rem;position:relative}.Management .section .section-icon .AnimatedSticker{position:absolute;left:0;top:0;width:100%;height:100%}.Management .section .section-icon .AnimatedSticker.hidden{display:none}.Management .section .ListItem{margin:0 -0.75rem}.Management .section .ListItem .Reaction{display:flex;align-items:center}.Management .section .ListItem .ReactionStaticEmoji{width:1.5rem;margin-right:1rem}.Management .section .ListItem:last-child{margin-bottom:0}.Management .section .ListItem .multiline-item .subtitle{line-height:1.25rem;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.Management .section .ListItem:not(.picker-list-item) .Checkbox{margin-top:2rem;margin-bottom:2rem}.Management .section .ListItem.narrow .Checkbox{margin-top:1rem;margin-bottom:1rem}.Management .section .ListItem.exceptions-member .ChatInfo .status{white-space:pre-wrap}.Management .section .section-heading{font-weight:500;font-size:.9375rem;color:var(--color-text-secondary)}.Management .section .section-heading[dir=auto]{text-align:initial}.Management .section .section-help{color:var(--color-text-secondary);line-height:1.375rem}.Management .section .section-help[dir=auto]{text-align:initial}.Management .section .section-info{color:var(--color-text-secondary);font-size:.875rem}.Management .section[dir=rtl]{text-align:right}.Management textarea.form-control{height:auto}.Management .group-link{color:var(--color-text)}.Management .radio-group{margin-top:2rem}.Management .radio-group .Radio{padding-left:3.5rem;margin-bottom:2rem}.Management .radio-group .Radio:last-child{margin-bottom:.625rem}.Management .radio-group .Radio-main::before{left:.125rem;top:.25rem;transform:none}.Management .radio-group .Radio-main::after{left:.4375rem;top:.5625rem;transform:none}.Management__filter{padding:0 1rem .25rem .75rem;border-bottom:1px solid var(--color-borders);display:flex;flex-flow:row wrap;flex-shrink:0;overflow-y:auto;max-height:20rem}.Management__filter .input-group{margin-bottom:.5rem;margin-left:.5rem;flex-grow:1}.Management__filter .form-control{height:2rem;border:none;border-radius:0;padding:0;box-shadow:none}.Management .Spinner{margin:2rem auto}.ManageGroupMembers{padding:.5rem 1rem}.ManageInvites .primary-link{position:relative}.ManageInvites .primary-link-input{cursor:pointer;margin-bottom:1rem;padding-right:3rem}.ManageInvites .primary-link-more-menu{position:absolute;right:.5rem;top:50%;transform:translate(0, -50%);z-index:1}.ManageInvites .create-link{margin-bottom:.5rem}.ManageInvites .invite-title{white-space:nowrap}.ManageInvite .link-name{margin-bottom:1rem}.ManageInvite .expire-limit{margin-top:1rem}.ManageInvite .usage-limit{margin-top:1rem;-moz-appearance:textfield}.ManageInvite .usage-limit::-webkit-outer-spin-button,.ManageInvite .usage-limit::-webkit-inner-spin-button{-webkit-appearance:none}.ManageInvite .custom-scroll{padding-bottom:4rem}.ManageInviteInfo .copy-link{margin-top:1rem;margin-bottom:1rem}.ManageInviteInfo .link-title{text-align:center}.ManageJoinRequests .bulk-actions{display:flex;justify-content:space-around}.ManageJoinRequests .bulk-action-button{width:auto;height:auto}.ManageInvite .hint,.ManageInvites .hint{font-size:.875rem;margin-bottom:0;margin-top:.5rem} .JoinRequest{display:flex;flex-direction:column;padding:1rem 0}.JoinRequest:not(:last-child){border-bottom:1px solid var(--color-borders)}.JoinRequest__top{display:flex;cursor:pointer;padding:.5rem;border-radius:.5rem}.JoinRequest__top:hover{background-color:var(--color-chat-hover)}.JoinRequest__user{display:flex;flex-grow:1;min-width:0;overflow:hidden}.JoinRequest__user-info{display:flex;flex-direction:column;justify-content:center;overflow:hidden;margin-left:1rem}.JoinRequest__user-subtitle{color:var(--color-text-secondary);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.JoinRequest__user-name{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.JoinRequest__date{color:var(--color-text-secondary);font-size:.875rem;margin-left:1rem;white-space:nowrap}.JoinRequest__buttons{display:flex;justify-content:space-evenly;margin-top:1rem;gap:.5rem}.JoinRequest__button{width:auto;height:auto} .ShippingInfo{padding:.5rem 1rem}.ShippingInfo h5{font-size:.875rem;color:var(--color-text-secondary);margin:1rem 0 1.25rem} .Shipping{padding:.5rem 1rem}.Shipping form p{color:var(--color-text-secondary);font-weight:500;margin:.5rem 0 2rem}.Shipping form .Radio{margin-bottom:2rem} @@ -75,4 +76,4 @@ .ConfirmPayment{display:flex;height:100%;border-bottom-left-radius:var(--border-radius-default-small);border-bottom-right-radius:var(--border-radius-default-small);overflow:hidden}.ConfirmPayment__content{width:100%;height:100%;border:none} .PaymentModal .modal-backdrop{pointer-events:none}.PaymentModal .header{position:relative;border-top-left-radius:var(--border-radius-default-small);border-top-right-radius:var(--border-radius-default-small);width:100%;padding:.25rem 1rem;display:flex;align-items:center;flex-direction:row;background:var(--color-background);border-bottom:1px var(--color-borders) solid}.PaymentModal .header h3{margin-bottom:0;margin-left:1.5rem;unicode-bidi:plaintext;text-align:initial}.PaymentModal .Transition{height:25rem}.PaymentModal .empty-content{height:25rem;max-height:90%;display:flex;align-items:center;justify-content:center}.PaymentModal .receipt-content{height:25rem;overflow-y:auto}.PaymentModal .content{overflow:auto;width:100%;height:100%;position:relative}.PaymentModal .footer{position:relative;border-bottom-left-radius:var(--border-radius-default-small);border-bottom-right-radius:var(--border-radius-default-small);width:100%;padding:.75rem 1rem;background:var(--color-background);border-top:1px var(--color-borders) solid}.PaymentModal .footer button{text-transform:none;font-weight:500}.PaymentModal .modal-dialog{width:25rem}.PaymentModal .modal-content{padding:0;overflow:hidden}@media screen and (max-device-width: 640px)and (max-height: 640px)and (orientation: landscape){.PaymentModal .modal-dialog{max-height:100%}.PaymentModal .Transition{height:10rem}} -/*# sourceMappingURL=395.93d060131194800fb151.css.map*/ \ No newline at end of file +/*# sourceMappingURL=382.f977b0f032aa1cd3a3ee.css.map*/ \ No newline at end of file diff --git a/dist/382.f977b0f032aa1cd3a3ee.css.map b/dist/382.f977b0f032aa1cd3a3ee.css.map new file mode 100644 index 000000000..c96e4ba03 --- /dev/null +++ b/dist/382.f977b0f032aa1cd3a3ee.css.map @@ -0,0 +1 @@ +{"version":3,"file":"382.f977b0f032aa1cd3a3ee.css","mappings":"AAAA,oBACE,aACA,yBACA,4BAEA,4BACE,2BAIJ,2BACE,kBACA,wBAEA,4CACE,kBACA,MACA,O;ACjBJ,mBACE,kBACA,SACA,eACA,WACA,wBAEA,uCACE,aAGF,0BAXF,mBAYI,mBAGF,yBAfF,mBAgBI,mEAEA,gCACE,UACA,oBACA,oBAEA,wEACE,UACA,oBAKN,wCACE,UAGF,gDACE,kBACA,0CACA,YACA,eACA,WACA,wBAEA,sDACE,UAGF,yBAZF,gDAaI,WAIJ,6BACE,UAGF,+BACE,gBACA,cACA,gBACA,kBACA,2BACA,mBACA,uBACA,mBAEA,0BAVF,+BAWI,oBAGF,sCACE,eACA,gBACA,oBAIA,iDACE,WACA,kBACA,cACA,eACA,aACA,gBACA,2BACA,2CACA,uBAEA,yBAXF,iDAYI,aACA,iBAMR,qBACE,yBAEA,sDAEE,0B;ACpGN,aACE,kBACA,oBACA,sBACA,gBAEA,iCACE,kBACA,MACA,QACA,SACA,OACA,qCACE,sBACA,uBAEF,uCACE,2BAIJ,yBArBF,aAuBI,WAGF,yBA1BF,aA2BI,kBAGF,0BA9BF,aA+BI,sBACS,yBACP,iBAIJ,mBACE,cACA,iCACA,YACA,mBACA,aACA,WACA,YACA,6BACA,wBAEA,0BAXF,mBAYI,gCAIF,iCACE,oBAIJ,0BACE,kBACA,SACA,QACA,gCACA,cACA,eACA,2CACA,uDACE,uCAGF,qCACE,kBACA,kBACA,aAIJ,gCACE,kBACA,MACA,OACA,WACA,YACA,aACA,mBACA,uBAEA,2CACE,2BACA,WACA,iBACA,kBACA,cACA,aACA,UACA,kBACA,qBACA,qBAGF,iDACE,e;ACrGN,qBACE,aACA,mBACA,kBACA,OACA,SACA,WACA,yBACA,kBACA,mEACA,uBACA,UACA,oBAEA,yCACE,aAGF,yBAlBF,qBAmBI,eACA,6BACA,gBACA,+BAGF,4BACE,UACA,mBAGF,8BACE,aACA,mBACA,WAGF,6BACE,YAGF,mCACE,WACA,UACA,cACA,YAGF,oCACE,gBACA,qBACA,gCACA,QAEA,4BACA,qBACA,0CAEA,iCAEA,0CACE,gBACA,iCACA,8DACE,UAIJ,wDACE,gBACA,UACA,oCAIJ,kDACE,gBACA,iCACA,sEACE,UAIJ,kCACE,mBAGF,uCACE,mBACA,gBACA,uBACA,kBAGF,sCACE,kBACA,UACA,WACA,MACA,YACA,kBACA,eAEA,yBATF,sCAUI,UAGF,4CACE,kBACA,QACA,cACA,eACA,WACA,2BACA,uCACA,2CAGF,wIAGE,kBACA,MACA,OACA,YACA,2CAGF,+CACE,kBACA,sCAGF,6CACE,gCAEA,oDACE,WACA,kBACA,aACA,cACA,kBACA,sCACA,QACA,QACA,oCAKN,iDACE,eACA,kB;ACvJJ,oBACE,kBACA,MACA,OACA,QACA,SACA,eACA,gBACA,UACA,kBACA,YACA,oBACA,uBACA,mBAEA,+BACE,kBAEA,mCACE,kBACA,QACA,SACA,gCAIJ,wBACE,gBACA,iCACA,mBACA,yBAGF,qCACE,gBACA,YAGF,6BACE,Y;ACvCJ,mBACE,kBACA,aACA,YACA,iBACA,0BAEA,kCACA,WACA,gBAEA,kBACA,MACA,OACA,QACA,SAEA,qBACE,yBAIJ,kBACE,kBACA,MACA,OACA,QACA,SACA,YACA,cACA,UACA,kBACA,qBAEA,0BACE,U;ACnCJ,4BAEE,kBACA,WACA,YAGF,aACE,YACA,0CAGF,eACE,iCAEA,iCACE,gBAGF,uBACE,eACA,MACA,O;ACtBJ,YACE,aACA,qBACA,WACA,eAEA,WACA,wBAEA,kBACE,UAGF,oBACE,uBAEA,yBAHF,oBAII,cAIJ,kBACE,aACA,sBACA,uBACA,+BAGF,mBACE,sBACA,gBACA,gBACA,gBACA,uBAGF,kBACE,oBACA,kBACA,wB;ACvCJ,cACE,kBACA,eACA,SACA,0BACA,2CACA,WACA,gBACA,gBACA,yCACA,+BACA,oBAEA,mBACE,8BACA,mBAGF,+CAEE,kBACA,aACA,aACA,cACA,WAEA,mDACE,iBAIJ,wBACE,WAGF,uBACE,YAGF,wBACE,kBACA,aACA,cACA,aACA,YAEA,8BACE,kBACA,QACA,cACA,eACA,WACA,2BACA,sCACA,2CAGF,6DAEE,kBACA,MACA,OACA,YACA,2CAGF,+BACE,gBAEA,uBAEA,sCACE,WACA,kBACA,aACA,cACA,kBACA,oCACA,QACA,QACA,oCAIJ,8BACE,WACA,YACA,cACA,UACA,SACA,UACA,eACA,gBAEA,oDACE,iB;AC/FR,aACE,eACA,MACA,OACA,YACA,YACA,0BACA,WACA,8BAEA,aACA,2BACA,4BACA,kBACA,eACA,sBACA,mBAEA,yBAlBF,aAmBI,iBAIF,yBACE,yBACA,mBAIA,qNAIE,aAIJ,oCACE,mCAKA,sEACE,oBACA,gBAKF,gCACE,aAGF,uCACE,UAGF,sCACE,eACA,MACA,OACA,YACA,aACA,UACA,UAIJ,gCACE,aACA,mBACA,kBACA,mCACA,YACA,qDAEA,4CACE,WACA,YAGF,yBAbF,gCAcI,mDAEA,oDACE,qBAKN,mDAEE,oBAGF,+DAEE,kBACA,oBACA,kBACA,WACA,YACA,aACA,mBACA,gBAGF,yBACE,eACA,SACA,WACA,SACA,YACA,UACA,SACA,wCACA,iCACA,wBACA,UACA,wBACA,aACA,eACA,UAEA,yBAjBF,yBAkBI,YAGF,sEAEE,UAGF,8BACE,yDACA,6CAEA,+BAEA,uCACE,UACA,iCACA,qBAIJ,8BACE,iCACA,yDACA,0DAEA,uCACE,WACA,+BACA,qBAIJ,gCACE,qBACA,aACA,YACA,6BAEA,yBANF,gCAOI,UACA,gCACA,oBAEA,wDACE,UACA,oBAOV,OACE,kBACA,8BACA,8BACA,gBACA,gBACA,+CAEA,uBACE,4CAGF,cACE,kBAGF,mBACE,iFAGF,wBAEE,WACA,YACA,iBACA,yBACA,+C;AC7MJ,kBACE,8BAEA,gCACE,WACA,gBAEA,yBAJF,gCAKI,YAIJ,gCACE,aACA,mBACA,qBAEA,wCACE,mBAGF,6CACE,SACA,OAGF,8CACE,YACA,2BAEA,eACA,cACA,kBACA,oBACA,uBAIJ,iCACE,UACA,gBACA,aACA,sBAEA,8CACE,YACA,kBACA,gBACA,gBAIJ,8BACE,YACA,SACA,kBACA,aACA,mBACA,uBACA,kCAGF,oCACE,kBAGF,4BACE,kBACA,WAKE,yBADF,4EAEI,SAEA,6FACE,iB;AC7EV,SACE,eACA,MACA,OACA,YACA,aACA,uB;ACLA,6BACE,mBACA,4CACE,0BAIJ,2BACE,aACA,mBACA,uBACA,qBAEA,yCACE,eACA,kBAEA,qDACE,kBAEF,oDACE,iBAKN,uBACE,aACA,yBACA,sBAEA,+BACE,oBAEA,uCACE,iBAKN,+BACE,aACA,mBAEA,kCACE,OACA,qBACA,kBAEA,yBALF,kCAMI,oBAGF,0CACE,2BAIJ,8CACE,WACA,oBAIJ,2BACE,kBACA,mBACA,wBACA,gBACA,uBAEA,yBAPF,2BAQI,uBAGF,mCACE,gBACA,YAGF,qCACE,eAEA,2CACE,wDAGF,8CACE,sCACA,WAIJ,oCACE,YACA,oBAGF,mCACE,WACA,cACA,iBAGF,gCACE,kBACA,MACA,OACA,WACA,YACA,aACA,mBACA,uBACA,kBAIJ,iCACE,aACA,mBACA,uBACA,iBACA,4BAGF,8BACE,aACA,qCACA,W;AChIF,+BACE,gBAGF,8BACE,aAEA,yBAHF,8BAII,uBAGF,uCACE,OACA,yBACA,yBAHF,uCAII,sBACA,iBAKN,0BACE,aACA,mBACA,mBAEA,+BACE,yBAIJ,8BACE,kCAGF,+BACE,iBACA,gBAGF,4BACE,mBACA,kC;AC3CJ,sBACE,kBACA,iDACA,WACA,YACA,WACA,WACA,uBACA,SAwBA,UAtBA,mDACE,qBACA,sBAGF,mCACE,WACA,yBAFF,mCAGI,yBAIJ,yBAtBF,sBAuBI,UACA,WACA,eAEA,mCACE,cAMJ,kDACE,kCAGF,iIAEE,SAGF,6CACE,2BAGF,kCACE,UACA,oBAEA,+CACE,iDAGF,4EACE,2FAGF,kFACE,kEAIJ,8BACE,WACA,kDACA,WACA,UACA,WAGF,4BACE,WACA,kDACA,aACA,mBACA,eAEA,mCACA,4CACA,iDACA,gBAEA,oBACA,+EAEA,yBAfF,4BAgBI,UACA,gBAGF,oCACE,WACA,YAEA,yBAJF,oCAKI,eACA,iBAKN,4BACE,iBACA,mBACA,gBACA,uBACA,YAEA,yBAPF,4BAQI,oBAIJ,8BACE,iBACA,aAEA,oCACE,WACA,gBACA,uBACA,2BACA,wBACA,aACA,kBACA,gBACA,mBACA,mBACA,wBACA,oCACA,eACA,uBAEA,iBACA,kBAEA,sCACE,iBACA,kCAGF,gDACE,yBACA,kDACE,cAIJ,6CACE,WACA,eACA,oBAGF,0DACE,0CACA,2BAGF,qBACE,oFACE,yCACA,sB;ACpKV,kBACE,gDACA,4DACA,qCAEA,iCACE,gBAGF,6BACE,oBAGF,yCACE,oBAGF,gCACE,iBACA,cACA,kBAGF,sCACE,SAGF,uDACE,aACA,mBAGF,uCACE,aACA,cACA,yB;ACnCJ,2BACE,aACA,aACA,WACA,kBACA,MACA,OACA,WACA,YACA,oBACA,aAEA,4BACE,KACE,iDAGF,GACE,0CAIJ,qCACE,KACE,8DAGF,GACE,qDAIJ,4CACE,kBACA,mBACA,oBACA,iCACA,0BACA,6DAGF,qDACE,4CAGF,oDACE,8EAGF,6DACE,uFAGF,mDACE,UAGF,4DACE,U;ACzDF,yBACE,gBAGF,mCACE,mBAGF,2BACE,YACA,eACA,gBACA,kBACA,mBAEA,qBACA,8BAEA,8CACE,SAGF,oDACE,+BAIJ,+BACE,qBACA,aACA,YACA,uBACA,kBACA,2CACA,eACA,kBACA,gBAEA,2CACE,oBAGF,0CACE,qBAGF,uCACE,sBAGF,qCACE,mCAGF,8CACE,kBACA,mBACA,iBACA,gBACA,uBAEA,2DACE,WACA,YACA,qBACA,sBACA,oBAKN,qCACE,aACA,mBAEA,6CACE,iBAIA,sDACE,cACA,kB;AClFN,yBACE,iBAIA,qFACE,qCAIJ,8BACE,qBAIA,0BACE,YAGF,sBACE,eACA,WAGF,6BACE,kCAEA,sDACE,wBACA,mBACA,qBACA,kBACA,qBAEA,kEACE,mBAKN,4BACE,YACA,kCACA,gBACA,uBAEA,yCACE,wBAEA,gDACE,aAIJ,kDACE,cACA,eACA,iBACA,sBACA,wBACA,oBAGF,uCACE,kBACA,qBACA,iBACA,WACA,6BACA,wBACA,gBAKN,uBACE,aACA,8BAIA,gCACE,iB;ACnFN,aACE,aACA,YACA,mBACA,8BACA,kBACA,oBAEA,wBACE,aACA,cACA,eACA,mBACA,eACA,kBACA,gBACA,kCAEA,uCACE,kBACA,oB;ACpBN,wBACE,sBACA,YACA,gBACA,yBAEA,MACE,gBACA,sBAGF,kBACE,UACA,6BAGF,yBACE,uCAEA,iBACE,8BAIJ,iBACE,oBACA,qBACA,oCACA,gBAEA,mBACA,kCACA,sCAEA,UACE,kBACA,WACA,WACA,gCACA,aACA,SACA,8EAGF,cAEE,sBACA,oCACA,mBACA,8FAEA,SACE,cACA,uHAKN,4BAEE,wBACA,2CACA,uIAEA,YACE,sBAIJ,YACE,0CAGF,iBACE,YACA,YACA,gBACA,uBACA,sBACA,2BAGF,gBACE,kCACA,kBACA,mBACA,yBAGF,YACE,cACA,qCACA,mBACA,gBACA,qCAIA,gCACE,uDAMA,sBACE,2BACA,+DAEA,WACE,6EACA,aACE,yBACA,8DAIJ,YACE,kCACA,4EAEA,UACE,gEAMJ,gBACE,wEAEA,WACE,0DAQR,uBACE,iEAEA,YACE,gBACA,0BAKN,sBACE,kBACE,8BAIJ,oBACE,8CAEA,iCACE,mBACA,gBACA,2BACA,oBACA,oDAEA,WACE,yBACA,gBACA,kBACA,mHAEA,yBAEE,0HAMF,UACE,iBACA,eACA,sCAKN,aACE,oBACA,6BAIJ,iBACE,aACA,cACA,iBACA,8BACA,qBACA,iDACA,yCACA,iCACA,gBACA,kBACA,8BAEA,iDAEA,aACE,4DAEA,iBACE,qEAKF,gBACE,eACA,2BAKN,WACE,qCAIA,cACE,mBACA,C;AC5NJ,yBACE,wBACA,gBACA,yBACA,iBACA,kBAGF,kDAEE,gBAGF,2BACE,kBACA,YACA,WACA,iDAGF,wBACE,gBACA,cACA,kBAEA,gCACE,WACA,cACA,iBAGF,qCACE,kBACA,MACA,OACA,kDAGF,qCACE,YACA,kDAOA,kEACE,gCAGF,qDACE,gCAGF,8CACE,gCAGF,yDAtEJ,gCACA,eACA,mBACA,oFAEA,+DACE,qBAoEE,qDA1EJ,gCACA,eACA,mBACA,iFAEA,2DACE,qBAwEE,8CA9EJ,gCACA,eACA,mBACA,gFAEA,oDACE,qB;ACJF,sBACE,iBACA,kBACA,aACA,cACA,mBACA,wBACA,mBACA,uBACA,sCACA,kBACA,WACA,eACA,eACA,kBACA,gBACA,wBAEA,4BACE,aAGF,0BACE,kBACA,MACA,OACA,WACA,YAGF,wBACE,mBACA,iCACA,qCAKA,sYAGE,wBAGF,gIACE,2BAKF,8BACE,qBAIJ,6BACE,yCAEA,oCACE,WACA,cACA,kBACA,OACA,MACA,WACA,YACA,gCAIJ,+BACE,oBAEA,iCACE,aAGF,sCACE,a;ACjFR,gBACE,mCACA,aACA,mBACA,gBACA,oBACA,+BACA,qBAEA,kBACE,iBACA,kBACA,kCAGF,yBACE,a;AChBJ,4BACE,yCAEA,2CACE,+CAEA,8DACE,oBACA,kBACA,YACA,kCAIJ,yCACE,sBAEA,qDACE,aAKF,uFACE,uBAGF,kFACE,qBAGF,iEACE,iBACA,qBAGF,kEACE,eACA,gBACA,SAIA,0EACE,cACA,kBACA,eACA,sBAKN,kDACE,mBACA,gBACA,oBAGF,iDACE,uBACA,6C;AC5DJ,mCACE,WACA,aACA,mBACA,8BAIA,sCACE,aACA,mBAEA,8CACE,qBACA,oBAGF,6CACE,aACA,2BACA,mBAEA,gDACE,eACA,gBACA,mBACA,SACA,gBACA,mBACA,uBACA,gBAIJ,8CACE,aAIA,yDACE,iBAMJ,+CACE,WAIJ,2DACE,2BAEA,6DACE,UACA,cAKF,6CACE,mBACA,sBAKN,+BACE,eACA,wBACA,6B;ACtEA,4CACE,oBAGF,+DAEE,WACA,YACA,mBACA,UACA,cAGF,wBACE,eACA,gBAGF,yCACE,aACA,sBACA,uBAIA,iFAEE,mB;AC5BN,eACE,SACA,oBACA,eACA,kBAEA,kDAEE,kBACA,OACA,MACA,WACA,YAGF,4BACE,gBACA,mBACA,+BAEA,mEAEE,kBACA,OACA,MACA,WACA,YACA,iBAIJ,sBACE,WACA,cACA,sCACA,UACA,6BAIA,+BACE,UAGF,qCACE,qBAIJ,kCACE,YACA,aACA,mBACA,uB;ACpDF,gDACE,aACA,qCACA,mBACA,kBACA,yCACA,2EAGF,oCACE,uBACA,gB;ACXF,0DACE,gCAGF,0FAEE,kBAGF,8CACE,gBACA,aAGF,4CACE,cACA,aAGF,uCACE,cACA,WACA,YACA,2CACA,eAGF,wCACE,kBACA,aACA,cACA,aACA,cACA,wCACA,qBACA,YAGF,oDACE,YAGF,uCACE,sBACA,aAEA,oDACE,gBAGE,mEACE,mDAKN,gEACE,mBAGF,+DACE,kBAIJ,mDACE,aACA,qCACA,mBACA,kBACA,yCACA,2EAEA,uDACE,eACA,iDACA,iCAEA,8DACE,0CACA,wDAIF,8DACE,cACA,WACA,WACA,iBACA,oB;ACjFN,qCACE,WACA,YACA,4BACA,qBACA,cACA,oCAZF,6CACE,yDADF,2CACE,yDADF,2CACE,yDADF,4CACE,yDADF,0CACE,yDADF,6CACE,yDADF,2CACE,yDADF,2CACE,yDADF,4CACE,yDADF,6CACE,yDADF,4CACE,0DADF,6CACE,0DADF,6CACE,0DADF,6CACE,0DADF,0CACE,qB;ACJJ,QACE,kBACA,cACA,iBACA,kBACA,aACA,cACA,sBAEA,gDATF,QAUI,YACA,aACA,sBAGF,YACE,YACA,aAGF,yBACE,kBACA,OACA,MACA,WACA,YAEA,gCACE,aAIJ,wBACE,WACA,YACA,0DACA,mB;AClCJ,UACE,YAEA,cACE,aACA,sBACA,gBAGF,uBACE,uBAIJ,sBACE,aACA,YACA,8BACA,mBAIA,4BACE,WAEA,6CACE,6BACA,8BAKN,kBACE,0CACA,mDACA,yCAEA,gBC/BA,+BD0BF,kBCzBI,mBAGA,mBD8BF,qDACE,gBAGF,kCACE,aACA,sBAEA,iDACE,cACA,YAIJ,0BACE,iBACA,mBAGF,iCACE,iBACA,qBAIJ,yBACE,aACA,sBACA,mBACA,sBACA,kBACA,yCACA,2EACA,sBAEA,mCACE,gBACA,gBAGF,sCACE,WAIJ,uBACE,WACA,YACA,qBACA,kBAEA,wCACE,kBACA,OACA,MACA,WACA,YAEA,+CACE,aAKN,oBACE,uBACA,yCAEA,+BACE,yBACA,yBACA,2EACA,8DAEA,gDACE,qBAKN,eACE,yCACA,2BACA,2EACA,sBAEA,yBACE,gBACA,gBAGF,sBACE,eACA,kCACA,mBACA,kBAEA,+BACE,iBAIJ,sBACE,gBAGF,2BACE,kBACA,kCACA,mBACA,qBAEA,oDACE,eAGF,kDACE,gBACA,sBAGF,oCACE,iBACA,uBAIJ,kCACE,eACA,sBACA,kCACA,gBACA,qBAEA,2CACE,iBAIJ,yBACE,oBAEA,oCACE,gBAGF,8CACE,oBAEA,wDACE,WAGF,oDACE,YACA,iBACA,iBACA,kCAGF,6GAEE,cACA,gBAGF,qDACE,oBAGF,wDACE,kBACA,mBACA,kCAEA,kEACE,oBAGF,8DACE,wBAGF,8DACE,sBACA,uBAMJ,sDACE,yBAEA,wDACE,cAKN,2CACE,oBAEA,4DACE,mBACA,gBACA,cAGF,mDACE,WACA,YACA,kBAGF,yDACE,eACA,iBACA,qBACA,gBAGF,0DACE,kBACA,iBACA,kCAMA,+HAEE,iBAGF,6DACE,WACA,cACA,kBAMR,4BACE,wBAGF,qDAEE,qBAIA,8CACE,gBAIJ,gEAEE,gBAGF,8BACE,yBACA,2BACA,mBACA,kCAIJ,sBACE,yCACA,kBACA,gBAEA,wCACE,YAGF,4CACE,aAIJ,uBACE,iBAGF,eACE,yBAIA,4CACE,aAGF,8CACE,uBACA,aAKF,8CACE,aACA,cACA,uB;AEhWJ,SACE,YACA,gBACA,kBAEA,eACE,yCACA,gBAEA,sBACE,kBACA,aACA,sBAEA,yDACE,kBACA,oBACA,qBAGF,6BACE,yBAGF,4BACE,sBACA,kCAGF,4CACE,kCACA,eACA,gBACA,mBAGF,yCACE,kBACA,oBAEA,kBACA,Y;ACzCR,eACE,YACA,gBAEA,0BACE,yC;ACLJ,0BACE,kBACA,kBACA,eACA,gBAEA,sCACE,cAGF,kCACE,WACA,YACA,kBACA,MACA,OACA,6DACA,0BAGF,2CACE,kBACA,MACA,OAGF,mCACE,iBACA,yB;AC5BJ,kBACE,kBACA,YACA,mCACA,eACA,4BACA,YACA,mBACA,mEACA,YACA,YAEA,8BACE,2CACA,kBACA,cACA,WACA,aACA,eACA,WACA,YACA,aACA,cACA,eACA,0BACA,WAGF,gCACE,kBACA,cACA,WACA,cACA,gBACA,YACA,aACA,kBACA,mCAGF,iCACE,YACA,wDAGF,4FAEE,wDAGF,iCACE,WACA,YACA,gBACA,mBAGF,yBACE,eACA,WACA,YACA,gBACA,iBACA,kBACA,aACA,eACA,mBACA,mBAGF,2BACE,0DACA,YACA,YAGF,oDACE,gBAGF,yDACE,4DAGF,2DACE,0D;ACrFJ,oBACE,kBACA,eAEA,wCACE,cACA,iBACA,gBACA,4BAGF,gDACE,iBAGF,4BACE,4GACA,qBACA,iBACA,qBAGF,2CACE,kBAGF,8BACE,kBAGF,6BACE,gBAGF,mCACE,eACA,gBACA,uBAGF,6BACE,aACA,kBACA,yBACA,0BAEA,qCACE,8CACA,eACA,uBAEA,uDACE,uB;ACnDN,+BACE,eACA,eAGF,yBACE,+BACE,iBAIJ,+BACE,mBAGF,gCACE,kBACA,UAGF,2BACE,kBACA,WACA,aACA,gBACA,gBACA,iBACA,gBAGF,iCACE,gBACA,0CACA,+CAEA,wCACE,qBAIJ,0BACE,WACA,kBACA,kC;AC5CJ,qBACE,eACA,MACA,OACA,QACA,aACA,6BAEA,2BACE,kBACA,eAEA,qCACE,sCAGF,mCACE,6BACA,8B;AClBN,sBACE,kBACA,MACA,OACA,+BACA,WACA,cACA,mCACA,aACA,mBACA,mDACA,oDAEA,mCACE,mBACA,OAIJ,sBACE,kBACA,SACA,OACA,+BACA,WACA,cACA,mCACA,aACA,mBACA,iDACA,oDAEA,kDACE,2CACA,kDAGF,+BACE,OACA,kCAKF,sEAEE,8B;AC9CJ,gBACE,wBACA,gBACA,sBAEA,WAEA,yBAPF,gBAQI,yBAGF,8CACE,SAEA,+DACE,gBAGF,oDACE,aAGF,qDACE,0BACA,cAGF,sDACE,eAIA,+DACE,WAMJ,oCACE,iBAGF,kCACE,kBAIA,0CACE,YAIJ,uCACE,wB;ACtDN,iBACE,kCAEA,+BACE,mBACA,yBAFF,+BAGI,gBACA,uBAIJ,gCACE,+BACA,iCACA,yBAHF,gCAII,uBAIJ,gCACE,iBACA,cACA,aACA,eACA,qBAEA,0EAEE,OACA,yBACA,aACA,uBACA,2CACA,iBAEA,gGACE,YACA,iBACA,gBAGF,0GACE,qBAKN,mCACE,iBACA,cACA,cACA,aACA,sBACA,wBAEA,0DACE,qBAGF,8CACE,0BAIJ,6CACE,kBAEA,2DACE,mCAGF,6DACE,mBACA,UAIJ,8BACE,kBAEA,2EAEE,WACA,kBACA,OACA,MACA,QACA,SACA,2CACA,oBAEA,UACA,yBACA,UAGF,sCACE,mDACA,yCAGF,qCACE,sCACA,aACA,uBACA,mBACA,2BAKF,8CACE,YAGF,6CACE,UAGF,wIAGE,oBAGF,mFAEE,2CAIJ,+BACE,kBAGF,iCACE,YAEA,2DACE,WACA,aACA,YACA,e;AC7IJ,yBACE,mBACA,8BAGF,0BACE,+BACA,oBAGF,mCACE,mBAGF,2BACE,kCACA,eACA,gBACA,qBAGF,yBACE,6BACA,iBACA,6CACA,iBACA,cAEA,mCACE,gCAGF,yBAXF,yBAYI,gBACA,gBAEA,4DAEE,kBAKN,2BACE,kBAEA,yCACE,mBAGF,iDACE,kBACA,aACA,eAIJ,sBACE,kBAEA,sCACE,oBAGF,4BACE,iBAIJ,iBACE,kBACA,kCAGF,kBACE,kBACA,yBACA,2BAGF,mCACE,oB;AClFJ,aACE,oBACA,mBACA,uBACA,aACA,cACA,eACA,kDACA,eACA,kBACA,mBACA,6BACA,sCAEA,yBACE,oBAGF,sCAEE,kDAGF,iBACE,WACA,Y;ACzBJ,aACE,YAEA,kBACE,yBACA,gBACA,cAEA,yBALF,kBAMI,sBAGF,wCACE,aACA,eAIJ,oBACE,YACA,6CACA,aACA,mBACA,6BACA,+CAEA,yBARF,oBASI,gBACA,kBACA,cACA,mBACA,mBAEA,qBACA,8BAEA,uCACE,SAGF,6CACE,+BAGF,uCACE,oBACA,sBAIF,2BACE,WACA,cACA,cACA,UACA,a;ACvDR,eACE,YAEA,oBACE,kBACA,yBACA,gBACA,cAEA,yBANF,oBAOI,sBAIJ,sBACE,YACA,6CACA,kBACA,gBACA,kBACA,mBACA,+CAEA,qBACA,8BAEA,yCACE,SAGF,+CACE,+BAIF,6BACE,WACA,cACA,cACA,UACA,YAIF,0CACE,oBACA,sBACA,mBACA,uBAEA,wDACE,qBAEA,mMACE,YACA,aACA,WACA,YAIJ,6DACE,WACA,YACA,kBACA,aACA,mBACA,uBAEA,kNACE,WACA,YACA,kBACA,MACA,OAMR,qCACE,YACA,cAEA,yBAJF,qCAKI,YAIJ,mCACE,yBACA,eACA,gBACA,kD;AC7FJ,WACE,aACA,mBACA,uBACA,eACA,6BACA,kBAGE,oCACE,WAIJ,sBACE,mBAGF,oBACE,uBAGF,sBACE,uBAGF,uBACE,eAGF,sBACE,WACA,YACA,wCACA,iCAGF,qCACE,kBACA,MACA,OACA,WACA,YACA,iBAEA,2BACA,0CAGF,oBACE,kBACA,oBAGF,8BACE,kBACA,WACA,aACA,WACA,YACA,gBACA,qBACA,oCAMA,UACA,UALA,mCACE,iBAOJ,6BACE,kBAEA,qCACE,W;AC5EN,WACE,aACA,qCACA,uBACA,gBACA,qBACA,YACA,gBACA,eAEA,6BAVF,WAWI,oBAGF,gDACE,iBACA,0B;ACbF,wBACE,eACA,OACA,QACA,SACA,mCACA,UAEA,6CACA,yCACA,2CACA,uCACA,8HAMA,6BACE,+BAEA,uDACE,gGAIJ,+CACE,gBAGF,iDACE,8CAIJ,iBACE,iCACA,wFAGF,mBACE,wCACA,0CACA,aACA,mBACA,uBACA,+CACA,kBAEA,2BACE,cACA,0BACA,gBACA,gBACA,UAEA,qCACE,oBAGF,6CACE,gBAGF,gDACE,kBACA,YAGF,gDACE,kBACA,aAKN,8BACE,YAEA,uCACE,iCAKF,sCACE,kBACA,UACA,OACA,WACA,aACA,cAMF,wHACE,UACA,cAIJ,oBACE,8CACA,UACA,gBAEA,6BALF,oBAMI,gCAIJ,6BACE,iCACA,aACA,mBACA,uBACA,kCAGF,iCACE,aACA,kBACA,6CACA,yCAGF,+BACE,iCACE,eAKN,YACE,mBAEA,iBACE,eACA,sBACA,gBACA,SACA,mBACA,kDACA,gBACA,mBACA,uBACA,mBACA,uBAGF,sBACE,mBAGF,mBACE,cACA,0BACA,gBACA,gBACA,UjBlKF,oGiBsKE,gBAIA,8CACE,cAGF,0CACE,gB;ACjLN,YACE,oBAEA,6BACE,gBAGF,4BACE,eAEA,sCACE,mBACA,mBAKF,wCACE,UACA,aAGF,uCACE,O;ACvBN,mBACE,wBACA,gBACA,sBAEA,WAEA,yBAPF,mBAQI,yB;ACPF,gCACE,wBACA,gBACA,gBACA,cACA,sBAEA,yBAPF,gCAQI,yBAKF,0CACE,kBACA,UACA,OACA,WACA,aACA,c;ACpBN,gBACE,aACA,2DACA,oBACA,mBAEA,uBACE,a;ACPJ,gBACE,kBACA,cAGE,0CACE,kBACA,UACA,UACA,QACA,aAKJ,uCACE,mBAGF,wBACE,Y;ACpBJ,cACE,aACA,oBAEA,gBAIA,kBAHA,+BALF,cAMI,oBAIF,2BACE,gB;ACVF,iDACE,gCACA,iCAEA,wDACE,cACA,uBAIJ,mBACE,mDACA,cACA,WACA,YACA,iBACA,gDACA,oBACA,qBACA,uBACA,wBACA,gBACA,iBAEA,mCACE,WACA,iBAGF,6BACE,aACA,cACA,kBAIJ,2BACE,YAGF,mBACE,gBACA,gBACA,uBAGF,yBACE,mBACA,oBACA,qBACA,4BACA,gBACA,uBACA,gBACA,uBAEF,8DAEE,iB;AC3DJ,aACE,SACA,oBACA,gBACA,kBACA,eAEA,iBACE,kBACA,OACA,MACA,WACA,YACA,iB;ACZF,oCACE,cACA,gBAGF,0BACE,aACA,qCACA,aACA,UAEA,yBANF,0BAOI,sCAGF,qCACE,iBACA,sDACE,4BACA,6BAIJ,qCACE,wBAGF,yCACE,cACA,SACA,SACA,oBACA,gBAEA,uJAGE,kBACA,MACA,OACA,sBACA,uBAEA,yBATF,uJAUI,WACA,YACA,oCACA,sC;AC/CR,2BACE,gBACA,oBACA,sBACA,yBACA,mBAGF,4BACE,wBACA,gBACA,gBACA,cACA,sBAEA,yBAPF,4BAQI,yBAKF,sCACE,UACA,kBACA,UACA,OACA,WACA,aACA,cAKN,YACE,oBAGA,6BACE,oBACA,kBACA,2BACA,4BAEA,qCACE,cACA,WACA,kBACA,SACA,UACA,sCACA,uBACA,wBACA,kBAIJ,6BACE,iCACA,gBACA,mBAGF,kBACE,0BAGF,sBACE,mBACA,kCACA,mB;ACtEJ,aACE,YACA,gBACA,gBAEA,0BACE,aACA,sBACA,gBACA,kCACA,uBACA,mB;ACXJ,eACE,YACA,gBACA,gBAEA,4BACE,aACA,sBACA,gBACA,kCAGF,4BACE,mBAEA,mCACE,aACA,8BACA,cAEA,kDACE,gBAGF,0CACE,eACA,sBACA,SACA,gBACA,mBACA,uBAGF,0CACE,kCACA,SAGF,2CACE,cACA,iBAEA,oDACE,mCACA,kCAEA,qHAEE,+CAMR,iCACE,aACA,iBACA,gBAIA,oDACE,iBAGF,6CACE,cACA,kBAKN,8BACE,e;ACzEJ,WACE,YACA,eAEA,0BACE,YACA,cAEA,+BACE,aACA,qCACA,uBACA,gBACA,qBAIJ,wBACE,6BACA,gBACA,kB;ACpBJ,oBACE,oBACA,mBACA,6CAEA,4BACE,oBACA,gBACA,aACA,mBACA,8BAGF,2BACE,iBACA,oBACA,eACA,wBACA,iBACA,yBAEA,wCACE,yBAIJ,6BACE,iBACA,iBAGF,2BACE,WAEA,mCACE,mBACA,kCAGF,iCACE,gBACA,eAIJ,2BACE,mBACA,8BAEA,oCACE,yB;AClDN,yBACE,kBACA,kBAEA,kCACE,OACA,gBACA,mBACA,uBACA,oBAEA,wDACE,aACA,cACA,kBACA,OACA,MACA,iBACA,qBACA,yBAEA,8DACE,sBAIJ,6CACE,kBACA,qBACA,iBACA,WACA,6BACA,wBACA,gBAIJ,gCACE,aACA,mBACA,oBAGF,+BACE,aACA,mBACA,WACA,6BAGF,+BACE,iBAGF,+BACE,OACA,mB;ACxDJ,YACE,YACA,kBACA,kBAEA,sBACE,oBACA,0CAEA,4BACE,oBACA,eACA,wBACA,iBACA,yBAEA,yCACE,yBAKN,kBACE,6BAGF,mBACE,mBACA,6CAEA,UACA,4BAEA,gCACE,gBACA,mBAGF,0BACE,UAIJ,qCACE,wBACA,0BAGF,kCACE,cAGF,wKAIE,2BAIA,mFACE,sCAGF,yFACE,uCAKN,uBACE,GACE,kDACA,0DACA,0BAGF,IACE,kDACA,0DACA,0BAGF,IACE,kDACA,0DACA,qBAIJ,wBACE,GACE,kDACA,0DACA,yBAGF,IACE,kDACA,0DACA,oBAGF,IACE,kDACA,0DACA,qB;AC1GJ,mBACE,6CACA,wBACA,aACA,8BAEA,gCACE,aACA,mBACA,mBACA,sBACA,gBACA,kCACA,+BACA,gBACA,MACA,mCAEA,yBAZF,gCAaI,kCAIJ,mCACE,iBAEA,6CACE,cACA,kBAIJ,gCACE,iBACA,kBACA,gBAEA,yBALF,gCAMI,kBAGF,yCACE,wBAKF,oEACE,qBAIA,6EACE,oBACA,eAKN,mCACE,0BACA,wBAGE,uDACE,iBACA,eAKN,8BACE,sBACA,kBACA,iB;AC1EJ,aACE,YACA,kBACA,aACA,sBACA,oBAEA,sBACE,kBACA,MACA,OACA,SACA,QACA,iCAGF,4BACE,sBACA,cACA,kBAEA,yBALF,4BAMI,gBAIJ,gCACE,0CACA,YACA,c;AC7BJ,YACE,kBACA,YACA,mDAEA,2BACE,YACA,kBACA,kBAGF,qBACE,oBACA,yCACA,2EACA,sBAEA,0BACE,eAGF,mCACE,iBAGF,+BACE,gBAGF,+BACE,2BAEA,yCACE,gBAIJ,mCACE,cACA,eACA,mBACA,kBAEA,oDACE,kBACA,OACA,MACA,WACA,YAEA,2DACE,aAKN,+BACE,kBAEA,yCACE,aACA,mBAGF,oDACE,aACA,kBAGF,0CACE,gBAGF,yDACE,oBACA,mBACA,gBACA,uBAGF,gEACE,gBACA,mBAIA,gDACE,gBACA,mBAKF,mEACE,qBAKN,sCACE,gBACA,mBACA,kCAEA,gDACE,mBAIJ,mCACE,kCACA,qBAEA,6CACE,mBAIJ,mCACE,kCACA,kBAGF,8BACE,iBAIJ,kCACE,YAGF,wBACE,wBAGF,yBACE,gBAEA,gCACE,oBACA,mBAEA,2CACE,sBAKF,6CACE,aACA,WACA,eAGF,4CACE,cACA,aACA,eAKN,oBACE,6BACA,6CACA,aACA,mBACA,cAEA,gBACA,iBAEA,iCACE,oBACA,kBACA,YAGF,kCACE,YACA,YACA,gBACA,UACA,gBAIJ,qBACE,iBAIJ,oBACE,mBAIA,6BACE,kBAGF,mCACE,eACA,mBACA,mBAGF,uCACE,kBACA,YACA,QACA,6BACA,UAGF,4BACE,oBAGF,6BACE,mBAKF,yBACE,mBAGF,4BACE,gBAGF,2BACE,gBAEA,0BACA,4GAEE,wBAIJ,6BACE,oBAKF,6BACE,gBACA,mBAGF,8BACE,kBAKF,kCACE,aACA,6BAGF,wCACE,WACA,YAMF,yCACE,kBACA,gBACA,iB;ACrRJ,aACE,aACA,sBACA,eAEA,8BACE,6CAGF,kBACE,aACA,eACA,cACA,oBAEA,wBACE,yCAIJ,mBACE,aACA,YACA,YACA,gBAGF,wBACE,aACA,sBACA,uBACA,gBACA,iBAGF,4BACE,kCACA,gBACA,uBACA,mBAGF,wBACE,gBACA,uBACA,mBAGF,mBACE,kCACA,kBACA,iBACA,mBAGF,sBACE,aACA,6BACA,gBACA,UAGF,qBACE,WACA,Y;AChEJ,cACE,mBAEA,iBACE,kBACA,kCACA,sB;ACNJ,UACE,mBAGE,iBACE,kCACA,gBACA,oBAGF,sBACE,mB;ACXN,UACE,gBAEA,uBACE,aACA,mBACA,cAEA,2BACE,YACA,aAIA,gCACE,iBACA,mBAGF,+BACE,mBACA,iBACA,kCAKN,sBACE,YAEA,uCACE,kBACA,aACA,mBACA,4BACA,kCACA,gBAEA,4CACE,wBAGF,8CACE,aACA,YAKN,wBACE,0CACA,aAEA,4CACE,aACA,0BACA,gBAEA,8CACE,iBACA,kCACA,kBACA,aAGF,uDACE,4BACA,qBACA,mBACA,cAGF,8DACE,yDAGF,mEACE,yDAIA,yDACE,eACA,sBACA,gBACA,gBACA,sBACA,wBACA,0BAGF,wDACE,gBACA,kBACA,6C;AC9FV,WACE,kBAEA,qDACE,kBAGF,uBACE,kBACA,aACA,UACA,UAEA,2BACE,e;ACdN,aACE,mBAEA,gBACE,kBACA,kCACA,sBAGF,4BACE,aACA,8BAEA,yCACE,aACA,cACA,a;AChBN,gBACE,aACA,YACA,6DACA,8DACA,gBAEA,yBACE,WACA,YACA,Y;ACTF,8BACE,oBAGF,sBACE,kBACA,0DACA,2DACA,WACA,oBACA,aACA,mBACA,mBACA,mCACA,6CAEA,yBACE,gBACA,mBACA,uBACA,mBAIJ,0BACE,aAGF,6BACE,aACA,eACA,aACA,mBACA,uBAGF,+BACE,aACA,gBAGF,uBACE,cACA,WACA,YACA,kBAGF,sBACE,kBACA,6DACA,8DACA,WACA,oBACA,mCACA,0CAEA,6BACE,oBACA,gBAIJ,4BACE,YAGF,6BACE,UACA,gBAIJ,+FAEI,4BACE,gBAGF,0BACE,c","sources":["webpack://telegram-t/./src/components/mediaViewer/MediaViewerActions.scss","webpack://telegram-t/./src/components/mediaViewer/MediaViewerFooter.scss","webpack://telegram-t/./src/components/mediaViewer/VideoPlayer.scss","webpack://telegram-t/./src/components/mediaViewer/VideoPlayerControls.scss","webpack://telegram-t/./src/components/mediaViewer/MediaViewerContent.scss","webpack://telegram-t/./src/components/mediaViewer/MediaViewerSlides.scss","webpack://telegram-t/./src/components/mediaViewer/PanZoom.scss","webpack://telegram-t/./src/components/mediaViewer/SenderInfo.scss","webpack://telegram-t/./src/components/mediaViewer/ZoomControls.scss","webpack://telegram-t/./src/components/mediaViewer/MediaViewer.scss","webpack://telegram-t/./src/components/common/ChatOrUserPicker.scss","webpack://telegram-t/./src/components/main/Dialogs.scss","webpack://telegram-t/./src/components/common/CalendarModal.scss","webpack://telegram-t/./src/components/main/NewContactModal.scss","webpack://telegram-t/./src/components/middle/MessageSelectToolbar.scss","webpack://telegram-t/./src/components/middle/ReactorListModal.scss","webpack://telegram-t/./src/components/middle/EmojiInteractionAnimation.scss","webpack://telegram-t/./src/components/left/search/RecentContacts.scss","webpack://telegram-t/./src/components/left/search/ChatMessage.scss","webpack://telegram-t/./src/components/left/search/DateSuggest.scss","webpack://telegram-t/./src/components/left/search/LeftSearch.scss","webpack://telegram-t/./src/components/ui/CropModal.scss","webpack://telegram-t/./src/components/ui/AvatarEditable.scss","webpack://telegram-t/./src/components/ui/ShowMoreButton.scss","webpack://telegram-t/./src/components/left/settings/folders/SettingsFoldersChatsPicker.scss","webpack://telegram-t/./src/components/left/settings/folders/SettingsFolders.scss","webpack://telegram-t/./src/components/left/settings/SettingsStickerSet.scss","webpack://telegram-t/./src/components/left/settings/WallpaperTile.scss","webpack://telegram-t/./src/components/left/settings/SettingsGeneralBackground.scss","webpack://telegram-t/./src/components/left/settings/SettingsGeneralBackgroundColor.scss","webpack://telegram-t/./src/components/left/settings/SettingsActiveSessions.scss","webpack://telegram-t/./src/components/common/PasswordMonkey.scss","webpack://telegram-t/./src/components/left/settings/Settings.scss","webpack://telegram-t/./src/styles/_mixins.scss","webpack://telegram-t/./src/components/left/newChat/NewChat.scss","webpack://telegram-t/./src/components/left/ArchivedChats.scss","webpack://telegram-t/./src/components/middle/message/ReactionSelectorReaction.scss","webpack://telegram-t/./src/components/middle/message/ReactionSelector.scss","webpack://telegram-t/./src/components/middle/message/MessageContextMenu.scss","webpack://telegram-t/./src/components/common/StickerSetModal.scss","webpack://telegram-t/./src/components/middle/HeaderMenuContainer.scss","webpack://telegram-t/./src/components/middle/MobileSearch.scss","webpack://telegram-t/./src/components/middle/composer/MentionTooltip.scss","webpack://telegram-t/./src/components/middle/composer/AttachmentModal.scss","webpack://telegram-t/./src/components/middle/composer/PollModal.scss","webpack://telegram-t/./src/components/middle/composer/EmojiButton.scss","webpack://telegram-t/./src/components/middle/composer/EmojiPicker.scss","webpack://telegram-t/./src/components/middle/composer/StickerPicker.scss","webpack://telegram-t/./src/components/common/GifButton.scss","webpack://telegram-t/./src/components/middle/composer/GifPicker.scss","webpack://telegram-t/./src/components/middle/composer/SymbolMenu.scss","webpack://telegram-t/./src/components/middle/composer/BotCommand.scss","webpack://telegram-t/./src/components/middle/composer/BotCommandTooltip.scss","webpack://telegram-t/./src/components/middle/composer/BotCommandMenu.scss","webpack://telegram-t/./src/components/middle/composer/StickerTooltip.scss","webpack://telegram-t/./src/components/middle/composer/CustomSendMenu.scss","webpack://telegram-t/./src/components/middle/composer/EmojiTooltip.scss","webpack://telegram-t/./src/components/middle/composer/inlineResults/BaseResult.scss","webpack://telegram-t/./src/components/middle/composer/inlineResults/MediaResult.scss","webpack://telegram-t/./src/components/middle/composer/InlineBotTooltip.scss","webpack://telegram-t/./src/components/middle/composer/SendAsMenu.scss","webpack://telegram-t/./src/components/right/RightSearch.scss","webpack://telegram-t/./src/components/right/StickerSearch.scss","webpack://telegram-t/./src/components/right/GifSearch.scss","webpack://telegram-t/./src/components/right/statistics/StatisticsOverview.scss","webpack://telegram-t/./src/components/right/statistics/StatisticsRecentMessage.scss","webpack://telegram-t/./src/components/right/statistics/Statistics.scss","webpack://telegram-t/./src/components/right/PollAnswerResults.scss","webpack://telegram-t/./src/components/right/PollResults.scss","webpack://telegram-t/./src/components/right/management/Management.scss","webpack://telegram-t/./src/components/right/management/JoinRequest.scss","webpack://telegram-t/./src/components/payment/ShippingInfo.scss","webpack://telegram-t/./src/components/payment/Shipping.scss","webpack://telegram-t/./src/components/payment/Checkout.scss","webpack://telegram-t/./src/components/payment/CardInput.scss","webpack://telegram-t/./src/components/payment/PaymentInfo.scss","webpack://telegram-t/./src/components/payment/ConfirmPayment.scss","webpack://telegram-t/./src/components/payment/PaymentModal.scss"],"sourcesContent":[".MediaViewerActions {\n display: flex;\n margin-inline-start: auto;\n margin-inline-end: -0.375rem;\n\n .Button {\n margin-inline-start: 0.25rem;\n }\n}\n\n.MediaViewerActions-mobile {\n position: relative;\n color: var(--color-text);\n\n .ProgressSpinner {\n position: absolute;\n top: 0;\n left: 0;\n }\n}\n",".MediaViewerFooter {\n position: absolute;\n bottom: 0;\n padding: 1rem 0;\n width: 100%;\n transition: opacity 0.15s;\n\n #MediaViewer.zoomed & {\n display: none;\n }\n\n @media (max-height: 640px) {\n padding: 0.5rem 0 0;\n }\n\n @media (max-width: 600px) {\n background: linear-gradient(to top, #000 0%, rgba(0, 0, 0, 0) 100%);\n\n &.is-for-video {\n opacity: 0;\n pointer-events: none;\n padding-bottom: 5rem;\n\n .video-controls-visible &:not(.is-hidden) {\n opacity: 1;\n pointer-events: all;\n }\n }\n }\n\n body.ghost-animating & {\n opacity: 0;\n }\n\n .media-viewer-footer-content {\n position: relative;\n max-width: var(--messages-container-width);\n margin: auto;\n cursor: pointer;\n opacity: 0.5;\n transition: opacity 0.15s;\n\n &:hover {\n opacity: 1;\n }\n\n @media (max-width: 600px) {\n opacity: 1;\n }\n }\n\n &.is-hidden {\n opacity: 0;\n }\n\n .media-text {\n margin-bottom: 0;\n overflow: auto;\n padding: 0 0.5rem;\n text-align: center;\n color: rgba(255, 255, 255, 0.9);\n font-size: 0.9375rem;\n letter-spacing: 0.025rem;\n max-height: 4.25rem;\n\n @media (max-height: 640px) {\n max-height: 2.75rem;\n }\n\n .emoji {\n width: 0.9375rem;\n height: 0.9375rem;\n vertical-align: -2px;\n }\n\n &.multiline {\n &::before {\n content: \"\";\n position: absolute;\n left: -0.75rem;\n right: -0.75rem;\n top: -0.25rem;\n bottom: -0.25rem;\n background: rgba(0, 0, 0, 0.75);\n border-radius: var(--border-radius-default);\n z-index: var(--z-below);\n\n @media (max-width: 600px) {\n display: none;\n background: none;\n }\n }\n }\n }\n\n a {\n color: var(--color-links);\n\n &:hover,\n &:focus {\n text-decoration: underline;\n }\n }\n}\n",".VideoPlayer {\n position: relative;\n display: inline-flex;\n flex-direction: column;\n overflow: hidden;\n\n #MediaViewer.zoomed & {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n > div {\n width: 100% !important;\n height: 100% !important;\n }\n video {\n max-height: none !important;\n }\n }\n\n @media (min-width: 601px) {\n // Safari: custom controls are not displayed after exiting full screen mode.\n z-index: 1;\n }\n\n @media (max-width: 600px) {\n overflow: visible;\n }\n\n @media (max-height: 640px) {\n margin-bottom: 1.75rem;\n @at-root .has-footer #{&} {\n margin-bottom: 0;\n }\n }\n\n video {\n display: block;\n max-height: calc(100vh - 8.25rem);\n margin: auto;\n object-fit: contain;\n outline: none;\n width: 100%;\n height: 100%;\n background: no-repeat 50% 50%;\n background-size: contain;\n\n @media (max-height: 640px) {\n max-height: calc(100vh - 10rem);\n }\n\n // Disable fullscreen on double tap on mobile devices\n .is-touch-env & {\n pointer-events: none;\n }\n }\n\n .play-button {\n position: absolute;\n left: 50%;\n top: 50%;\n transform: translate(-50%, -50%);\n width: 3.25rem;\n height: 3.25rem;\n background-color: rgba(0, 0, 0, 0.5) !important;\n body:not(.animation-level-0) & {\n transition: opacity 0.3s ease !important;\n }\n\n .icon-play {\n font-size: 1.75rem;\n position: relative;\n left: 0.125rem;\n }\n }\n\n .spinner-container {\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n display: flex;\n align-items: center;\n justify-content: center;\n\n .buffering {\n background: rgba(0, 0, 0, 0.25);\n color: #fff;\n font-size: 0.75rem;\n position: absolute;\n left: 0.1875rem;\n top: 0.1875rem;\n z-index: 1;\n padding: 0 0.375rem;\n border-radius: 0.75rem;\n line-height: 1.125rem;\n }\n\n .ProgressSpinner {\n cursor: pointer;\n }\n }\n}\n",".VideoPlayerControls {\n display: flex;\n align-items: center;\n position: absolute;\n left: 0;\n bottom: 0;\n width: 100%;\n padding: 1rem 0.5rem 0.5rem;\n font-size: 0.875rem;\n background: linear-gradient(to top, #000 0%, rgba(0, 0, 0, 0) 100%);\n transition: opacity 0.3s;\n opacity: 0;\n pointer-events: none;\n\n #MediaViewer.zoomed & {\n display: none;\n }\n\n @media (max-width: 600px) {\n position: fixed;\n padding: 2.25rem 0.5rem 0.75rem;\n background: none;\n z-index: var(--z-media-viewer);\n }\n\n &.active {\n opacity: 1;\n pointer-events: all;\n }\n\n .buttons {\n display: flex;\n align-items: center;\n width: 100%;\n }\n\n .spacer {\n flex-grow: 1;\n }\n\n .Button.round {\n width: 2rem;\n padding: 0;\n margin: 0.25rem;\n height: 2rem;\n }\n\n .volume-slider {\n margin-bottom: 0;\n margin-left: -0.75rem;\n padding: 0.5rem 0.5rem 0.5rem 0.5rem;\n width: 0;\n\n --volume-slider-width: 4rem;\n --slider-color: #fff;\n --color-borders: rgba(255, 255, 255, 0.5);\n /* stylelint-disable-next-line plugin/no-low-performance-animation-properties */\n transition: width 0.2s ease-in-out;\n\n &:hover{\n overflow: hidden;\n width: var(--volume-slider-width);\n .RangeSlider__input {\n opacity: 1;\n }\n }\n\n .RangeSlider__input {\n margin-bottom: 0;\n opacity: 0;\n transition: opacity 0.15s ease-in-out;\n }\n }\n\n .volume:hover + .volume-slider {\n overflow: hidden;\n width: var(--volume-slider-width);\n .RangeSlider__input {\n opacity: 1;\n }\n }\n\n .player-time {\n white-space: nowrap;\n }\n\n .player-file-size {\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n margin-left: 0.5rem;\n }\n\n .player-seekline {\n position: absolute;\n left: 1rem;\n right: 1rem;\n top: 0;\n height: 1rem;\n touch-action: none;\n cursor: pointer;\n\n @media (max-width: 600px) {\n top: 1rem;\n }\n\n &-track {\n position: absolute;\n top: 50%;\n left: -0.25rem;\n right: -0.25rem;\n height: 5px;\n transform: translateY(-50%);\n background-color: rgba(255, 255, 255, 0.16);\n border-radius: var(--border-radius-default);\n }\n\n &-buffered,\n &-played,\n &-input {\n position: absolute;\n top: 0;\n left: 0;\n height: 100%;\n border-radius: var(--border-radius-default);\n }\n\n &-buffered {\n position: absolute;\n background-color: rgba(255, 255, 255, 0.5);\n }\n\n &-played {\n background: var(--color-primary);\n\n &::after {\n content: \"\";\n position: absolute;\n width: 0.75rem;\n height: 0.75rem;\n border-radius: 50%;\n background-color: var(--color-primary);\n right: 0;\n top: 50%;\n transform: translate(0.325rem, -50%);\n }\n }\n }\n\n .playback-rate-menu .bubble {\n min-width: 4rem;\n margin-right: 4rem;\n }\n}\n",".MediaViewerContent {\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n transform: none;\n overflow: hidden;\n z-index: 1;\n padding: 3.25rem 0;\n height: 100%;\n display: inline-flex;\n justify-content: center;\n align-items: center;\n\n .thumbnail {\n position: relative;\n\n img {\n position: absolute;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n }\n }\n\n > img {\n max-width: 100vw;\n max-height: calc(100vh - 8.25rem);\n object-fit: contain;\n transition: transform 0.2s;\n }\n\n .spinner-wrapper {\n max-width: 100vw;\n margin: auto;\n }\n\n .Spinner {\n margin: auto;\n }\n}\n",".MediaViewerSlides {\n position: absolute;\n display: flex;\n height: 100%;\n max-height: 100vh;\n min-height: -moz-available;\n /* stylelint-disable-next-line declaration-block-no-duplicate-properties */\n max-height: -webkit-fill-available;\n width: 100%;\n overflow: hidden;\n -ms-touch-action: none;\n touch-action: none;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n\n & * {\n -ms-scroll-chaining: none;\n }\n}\n\n.MediaViewerSlide {\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n height: 100%;\n flex: 100% 0 0;\n z-index: 0;\n touch-action: none;\n transform-origin: 0 0;\n\n &--active {\n z-index: 1;\n }\n}\n",".pan-wrapper,\n.pan-container {\n position: relative;\n width: 100%;\n height: 100%;\n}\n\n.pan-wrapper {\n cursor: move;\n user-select: none;\n}\n\n.pan-container {\n transition: transform 0.2s ease-in;\n\n .pan-wrapper.move & {\n transition: none;\n }\n\n .zoomed & {\n position: fixed;\n top: 0;\n left: 0;\n }\n}\n",".SenderInfo {\n display: flex;\n align-content: center;\n color: white;\n cursor: pointer;\n\n opacity: 0.5;\n transition: 0.15s opacity;\n\n &:hover {\n opacity: 1;\n }\n\n .Avatar {\n margin-inline-end: 1rem;\n\n @media (max-width: 600px) {\n display: none;\n }\n }\n\n .meta {\n display: flex;\n flex-direction: column;\n justify-content: center;\n max-width: calc(100% - 3.75rem);\n }\n\n .title {\n line-height: 1.4375rem;\n font-weight: 500;\n white-space: pre;\n overflow: hidden;\n text-overflow: ellipsis;\n }\n\n .date {\n line-height: 1.25rem;\n font-size: 0.875rem;\n letter-spacing: -0.01rem;\n }\n}\n",".ZoomControls {\n position: absolute;\n bottom: 1.25rem;\n left: 50%;\n background: rgba(0, 0, 0, 0.5);\n border-radius: var(--border-radius-default);\n width: 100%;\n height: 3.375rem;\n max-width: 274px;\n transform: translate3d(-50%, 0, 0.625rem);\n transition: opacity 0.3s ease-in;\n pointer-events: none;\n\n &.open {\n z-index: var(--z-media-viewer);\n pointer-events: all;\n }\n\n .zoom-out,\n .zoom-in {\n position: absolute;\n top: 0.4375rem;\n width: 2.5rem;\n height: 2.5rem;\n color: #fff;\n\n i {\n font-size: 1.5rem;\n }\n }\n\n .zoom-out {\n left: 0.5rem;\n }\n\n .zoom-in {\n right: 0.5rem;\n }\n\n .seekline {\n position: absolute;\n left: 3.25rem;\n right: 3.25rem;\n top: 1.125rem;\n height: 1rem;\n\n &-track {\n position: absolute;\n top: 50%;\n left: -0.25rem;\n right: -0.25rem;\n height: 2px;\n transform: translateY(-50%);\n background-color: rgba(255, 255, 255, 0.5);\n border-radius: var(--border-radius-default);\n }\n\n &-played,\n &-input {\n position: absolute;\n top: 0;\n left: 0;\n height: 100%;\n border-radius: var(--border-radius-default);\n }\n\n &-played {\n background: #fff;\n /* stylelint-disable-next-line plugin/no-low-performance-animation-properties */\n transition: width 200ms;\n\n &::after {\n content: \"\";\n position: absolute;\n width: 0.75rem;\n height: 0.75rem;\n border-radius: 50%;\n background-color: var(--color-white);\n right: 0;\n top: 50%;\n transform: translate(0.325rem, -50%);\n }\n }\n\n &-input {\n width: 100%;\n height: 1rem;\n top: -0.375rem;\n opacity: 0;\n margin: 0;\n padding: 0;\n cursor: pointer;\n overflow: hidden;\n\n &::-webkit-slider-thumb {\n margin-top: -2rem;\n }\n }\n }\n}\n","#MediaViewer {\n position: fixed;\n top: 0;\n left: 0;\n width: 100vw;\n height: 100%;\n background: rgba(0, 0, 0, 0.9);\n color: #fff;\n z-index: var(--z-media-viewer);\n\n display: grid;\n grid-template-columns: auto;\n grid-template-rows: auto 1fr;\n grid-column-gap: 0;\n grid-row-gap: 0;\n justify-items: stretch;\n align-items: center;\n\n @media (max-width: 600px) {\n background: rgba(0, 0, 0, 1);\n }\n\n // Potential perf improvement\n &:not(.shown) {\n display: block !important;\n transform: scale(0);\n }\n\n body.ghost-animating & {\n > .pan-wrapper,\n > button,\n .MediaViewerContent img,\n .MediaViewerContent .VideoPlayer {\n display: none;\n }\n }\n\n body.animation-level-2 & {\n transition-duration: 0.3s !important;\n }\n\n &:not(.open),\n .closing {\n .SenderInfo {\n pointer-events: none;\n transition: none;\n }\n }\n\n &.zoomed {\n .navigation {\n display: none;\n }\n\n .media-viewer-head {\n z-index: 2;\n }\n\n .MediaViewerSlide {\n position: fixed;\n top: 0;\n left: 0;\n width: 100vw;\n height: 100vh;\n padding: 0;\n z-index: 1;\n }\n }\n\n .media-viewer-head {\n display: flex;\n grid-area: 1 / 1 / 2 / -2;\n position: relative;\n z-index: var(--z-media-viewer-head);\n min-width: 0;\n padding: 0.5rem max(1.25rem, env(safe-area-inset-left));\n\n & > .Transition {\n width: 100%;\n min-width: 0;\n }\n\n @media (max-width: 600px) {\n padding: 0.5rem max(0.5rem, env(safe-area-inset-left));\n\n .media-viewer-close {\n margin-right: 1.5rem;\n }\n }\n }\n\n & > .Transition,\n & > .pan-wrapper {\n grid-area: 1 / 1 / -1 / -1;\n }\n\n & > .Transition,\n & > .pan-wrapper .Transition {\n position: relative;\n justify-self: center;\n text-align: center;\n width: 100%;\n height: 100%;\n display: flex;\n align-items: center;\n overflow: hidden;\n }\n\n .navigation {\n position: fixed;\n top: 4rem;\n width: 10vw;\n bottom: 0;\n border: none;\n padding: 0;\n margin: 0;\n appearance: none;\n background: transparent no-repeat;\n background-size: 1.25rem;\n opacity: 0;\n transition: opacity 0.15s;\n outline: none;\n cursor: pointer;\n z-index: 1;\n\n @media (max-width: 600px) {\n width: 20vw;\n }\n\n &:hover,\n .is-touch-env & {\n opacity: 1;\n }\n\n &.prev {\n background-image: url(\"../../assets/media_navigation_previous.svg\");\n background-position: 1.25rem calc(50% - 2rem);\n\n left: env(safe-area-inset-left);\n\n &[dir=\"rtl\"] {\n left: auto;\n right: env(safe-area-inset-right);\n transform: scaleX(-1);\n }\n }\n\n &.next {\n right: env(safe-area-inset-right);\n background-image: url(\"../../assets/media_navigation_next.svg\");\n background-position: calc(100% - 1.25rem) calc(50% - 2rem);\n\n &[dir=\"rtl\"] {\n right: auto;\n left: env(safe-area-inset-left);\n transform: scaleX(-1);\n }\n }\n\n &.inline {\n top: calc(50% - 3rem);\n bottom: unset;\n height: 6rem;\n background-position-y: center;\n\n @media (max-width: 600px) {\n opacity: 0;\n transition: opacity 0.15s ease-in;\n pointer-events: none;\n\n .video-controls-visible & {\n opacity: 1;\n pointer-events: all;\n }\n }\n }\n }\n}\n\n.ghost {\n position: absolute;\n z-index: var(--z-media-viewer);\n will-change: transform, opacity;\n overflow: hidden;\n border-radius: 0;\n transition: transform 0.2s ease, opacity 0.2s ease;\n\n &.rounded-corners {\n border-radius: var(--border-radius-messages);\n }\n\n &.circle {\n border-radius: 50%;\n }\n\n body.is-ios & {\n transition: transform 0.2s ease, opacity 0.2s ease, border-radius 0.2s ease !important;\n }\n\n img,\n video {\n width: 100%;\n height: 100%;\n user-select: none;\n -webkit-user-select: none;\n object-fit: cover;\n }\n}\n",".ChatOrUserPicker {\n z-index: var(--z-media-viewer);\n\n .modal-dialog {\n height: 70%;\n max-width: 25rem;\n\n @media (max-width: 600px) {\n height: 90%;\n }\n }\n\n .modal-header {\n display: flex;\n align-items: center;\n padding: 0.25rem 0.5rem;\n\n .Button {\n margin-right: 0.5rem;\n }\n\n .input-group {\n margin: 0;\n flex: 1;\n }\n\n .form-control {\n border: none;\n box-shadow: none !important;\n\n height: 2.75rem;\n padding: 0.5rem;\n font-size: 1.25rem;\n line-height: 1.75rem;\n unicode-bidi: plaintext;\n }\n }\n\n .modal-content {\n padding: 0;\n overflow: hidden;\n display: flex;\n flex-direction: column;\n\n .picker-list {\n height: 100%;\n overflow-x: hidden;\n overflow-y: auto;\n padding: 0 0.5rem;\n }\n }\n\n .no-results {\n height: 100%;\n margin: 0;\n padding: 1rem 1rem;\n display: flex;\n align-items: center;\n justify-content: center;\n color: var(--color-text-secondary);\n }\n\n .scroll-container {\n position: relative;\n }\n\n .ListItem {\n position: absolute;\n width: 100%;\n }\n\n .ListItem.chat-item-clickable {\n &:not(.force-rounded-corners) {\n @media (max-width: 600px) {\n margin: 0;\n\n .ListItem-button {\n border-radius: 0;\n }\n }\n }\n }\n}\n","#Dialogs {\n position: fixed;\n top: 0;\n left: 0;\n width: 100vw;\n height: 100vh;\n z-index: var(--z-modal);\n}\n",".CalendarModal {\n .modal-dialog {\n max-width: 26.25rem;\n .modal-content {\n padding: 0.375rem 1rem 1rem;\n }\n }\n\n .timepicker {\n display: flex;\n align-items: center;\n justify-content: center;\n margin-bottom: 1.5rem;\n\n .form-control {\n max-width: 5rem;\n text-align: center;\n\n &:first-child {\n margin-right: 1rem;\n }\n &:last-child {\n margin-left: 1rem;\n }\n }\n }\n\n .footer {\n display: flex;\n justify-content: flex-end;\n flex-direction: column;\n\n .Button {\n text-transform: none;\n\n + .Button {\n margin-top: 0.5rem;\n }\n }\n }\n\n .month-selector {\n display: flex;\n align-items: center;\n\n h4 {\n flex: 1;\n margin: 0 0 0 1.25rem;\n font-size: 1.25rem;\n\n @media (max-width: 600px) {\n margin-left: 0.75rem;\n }\n\n & ~ .Button {\n color: var(--color-primary);\n }\n }\n\n .Button.hidden {\n opacity: 0.5;\n pointer-events: none;\n }\n }\n\n .day-button {\n position: relative;\n border-radius: 4rem;\n outline: none !important;\n font-weight: 500;\n margin: 0.125rem 0.625rem;\n\n @media (max-width: 600px) {\n margin: 0.25rem 0.375rem;\n }\n\n &.weekday {\n margin-bottom: 0;\n height: 1rem;\n }\n\n &.clickable {\n cursor: pointer;\n\n &:hover {\n background-color: var(--color-interactive-element-hover);\n }\n\n &.selected {\n background-color: var(--color-primary);\n color: white;\n }\n }\n\n &.disabled {\n opacity: 0.25;\n pointer-events: none;\n }\n\n &::before {\n content: \"\";\n display: block;\n padding-top: 100%;\n }\n\n span {\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: 0.875rem;\n }\n }\n\n .calendar-wrapper {\n display: flex;\n align-items: center;\n justify-content: center;\n min-height: 17rem;\n margin: 1.5rem -0.5rem 0.5rem;\n }\n\n .calendar-grid {\n display: grid;\n grid-template-columns: repeat(7, 1fr);\n width: 100%;\n }\n}\n",".NewContactModal {\n .modal-dialog {\n max-width: 28rem;\n }\n\n &__new-contact {\n display: flex;\n\n @media (max-width: 500px) {\n flex-direction: column;\n }\n\n &-fieldset {\n flex: 1;\n margin-inline-start: 1rem;\n @media (max-width: 500px) {\n margin-inline-start: 0;\n margin-top: 1rem;\n }\n }\n }\n\n &__profile {\n display: flex;\n align-items: center;\n margin-bottom: 2rem;\n\n &-info {\n margin-inline-start: 1rem;\n }\n }\n\n &__user-status {\n color: var(--color-text-secondary);\n }\n\n &__phone-number {\n font-size: 1.5rem;\n margin-bottom: 0;\n }\n\n &__help-text {\n font-size: 0.9375rem;\n color: var(--color-text-secondary);\n }\n}\n",".MessageSelectToolbar {\n position: absolute;\n bottom: calc(0.5rem + env(safe-area-inset-bottom));\n left: 0.5rem;\n right: 0.5rem;\n width: auto;\n z-index: 20;\n justify-content: center;\n margin: 0;\n\n .mask-image-disabled &::before {\n left: auto !important;\n right: auto !important;\n }\n\n .no-composer & {\n width: 100%;\n @media (max-width: 600px) {\n width: calc(100% - 1rem);\n }\n }\n\n @media (min-width: 601px) {\n left: 1rem;\n right: 1rem;\n bottom: 1.25rem;\n\n .no-composer & {\n top: -4.75rem;\n }\n }\n\n opacity: 1;\n\n & .MessageSelectToolbar-inner {\n transform: scaleX(1) translateX(0);\n }\n\n .no-composer .middle-column-footer-button-container + &,\n .no-composer .messaging-disabled + & {\n top: auto;\n }\n\n body.animation-level-0 & {\n transition: none !important;\n }\n\n &:not(.shown) {\n opacity: 0;\n pointer-events: none;\n\n .shown-inner {\n transform: scaleX(var(--toolbar-hidden-scale, 1));\n }\n\n &.with-composer .MessageSelectToolbar-inner {\n transform: scaleX(var(--toolbar-hidden-scale, 1)) translateX(var(--toolbar-translate-x, 0));\n }\n\n &:not(.with-composer) .MessageSelectToolbar-inner {\n transform: scaleX(var(--toolbar-unpin-hidden-scale)) translateX(0);\n }\n }\n\n &::before {\n z-index: -1;\n max-width: calc(100% * var(--composer-hidden-scale));\n width: 100%;\n left: auto;\n right: auto;\n }\n\n &-inner {\n width: 100%;\n max-width: calc(100% * var(--composer-hidden-scale));\n display: flex;\n align-items: center;\n padding: 0.25rem;\n\n background: var(--color-background);\n border-radius: var(--border-radius-messages);\n box-shadow: 0 1px 2px var(--color-default-shadow);\n font-weight: 500;\n\n transform: scaleX(1);\n transition: transform var(--select-transition), opacity var(--select-transition);\n\n @media (max-width: 600px) {\n padding: 0;\n max-width: none;\n }\n\n > .Button {\n width: 3rem;\n height: 3rem;\n\n @media (max-width: 600px) {\n width: 2.875rem;\n height: 2.875rem;\n }\n }\n }\n\n &-count {\n margin-left: 1rem;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n flex-grow: 1;\n\n @media (max-width: 600px) {\n margin-right: 0.5rem;\n }\n }\n\n &-actions {\n margin-left: auto;\n display: flex;\n\n .item {\n width: 100%;\n background: none;\n border: none !important;\n box-shadow: none !important;\n outline: none !important;\n display: flex;\n position: relative;\n overflow: hidden;\n line-height: 1.5rem;\n white-space: nowrap;\n color: var(--color-text);\n --ripple-color: rgba(0, 0, 0, 0.08);\n cursor: pointer;\n unicode-bidi: plaintext;\n\n padding: 0.6875rem;\n border-radius: 50%;\n\n i {\n font-size: 1.5rem;\n color: var(--color-text-secondary);\n }\n\n &.destructive {\n color: var(--color-error);\n i {\n color: inherit;\n }\n }\n\n &.disabled {\n opacity: 0.5;\n cursor: default;\n pointer-events: none;\n }\n\n &:not(.disabled):active {\n background-color: var(--color-item-active);\n transition: none !important;\n }\n\n @media (hover: hover) {\n &:hover, &:focus {\n background-color: var(--color-chat-hover);\n text-decoration: none;\n }\n }\n }\n }\n}\n",".ReactorListModal {\n --color-reaction: var(--color-message-reaction);\n --hover-color-reaction: var(--color-message-reaction-hover);\n --accent-color: var(--color-primary);\n\n .modal-content {\n overflow: hidden;\n }\n\n .Reactions {\n margin-bottom: 0.5rem;\n }\n\n .reaction-filter-emoji {\n margin-right: 0.25rem;\n }\n\n .reactor-list {\n max-height: 400px;\n overflow: auto;\n overflow-x: hidden;\n }\n\n .reactors-list-item {\n margin: 0;\n }\n\n .reactors-list-item .ListItem-button {\n display: flex;\n align-items: center;\n }\n\n .reactors-list-emoji {\n width: 1.5rem;\n height: 1.5rem;\n margin-inline-start: auto;\n }\n}\n",".EmojiInteractionAnimation {\n --start-x: 0;\n --start-y: 0;\n --scale: 0;\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n pointer-events: none;\n z-index: 1000;\n\n @keyframes show-interaction {\n from {\n transform: translate(0, 0) scale(var(--scale, 0));\n }\n\n to {\n transform: translate(-50%, -50%) scale(1);\n }\n }\n\n @keyframes show-interaction-reversed {\n from {\n transform: translate(50%, 0) scaleX(-1) scale(var(--scale, 0));\n }\n\n to {\n transform: translate(100%, -50%) scaleX(-1) scale(1);\n }\n }\n\n .AnimatedSticker {\n position: absolute;\n top: var(--start-y);\n left: var(--start-x);\n transform: scale(var(--scale), 0);\n transform-origin: left top;\n transition: 0.25s cubic-bezier(0.29, 0.81, 0.27, 0.99) opacity;\n }\n\n &.reversed .AnimatedSticker {\n transform: scale(var(--scale), 0) scaleX(-1);\n }\n\n &.playing .AnimatedSticker {\n animation: show-interaction forwards 0.25s cubic-bezier(0.29, 0.81, 0.27, 0.99);\n }\n\n &.reversed.playing .AnimatedSticker {\n animation: show-interaction-reversed forwards 0.25s cubic-bezier(0.29, 0.81, 0.27, 0.99);\n }\n\n &.hiding .AnimatedSticker {\n opacity: 0;\n }\n\n &.reversed.hiding .AnimatedSticker {\n opacity: 0;\n }\n}\n",".RecentContacts {\n .Loading {\n min-height: 75vh;\n }\n\n .top-peers-section {\n padding: 0.5rem 1rem;\n }\n\n .top-peers {\n height: 6rem;\n margin: 0 -1rem;\n overflow-x: auto;\n overflow-y: hidden;\n white-space: nowrap;\n\n scrollbar-width: none;\n scrollbar-color: rgba(0, 0, 0, 0);\n\n &::-webkit-scrollbar {\n height: 0;\n }\n\n &::-webkit-scrollbar-thumb {\n background-color: rgba(0, 0, 0, 0);\n }\n }\n\n .top-peer-item {\n display: inline-block;\n width: 4.5rem;\n height: 6rem;\n padding: 0.625rem 0.25rem;\n margin-left: 0.5rem;\n border-radius: var(--border-radius-default);\n cursor: pointer;\n position: relative;\n overflow: hidden;\n\n &:first-child {\n margin-left: 0.125rem;\n }\n\n &:last-child {\n margin-right: 0.125rem;\n }\n\n .Avatar {\n margin: 0 auto 0.375rem;\n }\n\n &:hover {\n background: var(--color-chat-hover);\n }\n\n .top-peer-name {\n text-align: center;\n white-space: nowrap;\n font-size: 0.75rem;\n overflow: hidden;\n text-overflow: ellipsis;\n\n .emoji-small {\n width: 1rem;\n height: 1rem;\n background-size: 1rem;\n margin-inline-end: 1px;\n vertical-align: -3px;\n }\n }\n }\n\n .recent-chats-header {\n display: flex;\n align-items: center;\n\n .Button {\n margin-left: auto;\n }\n\n &[dir=\"rtl\"] {\n .Button {\n margin-left: 0;\n margin-right: auto;\n }\n }\n }\n}\n",".ChatMessage {\n &:first-child {\n margin-top: 0.5rem;\n }\n &:hover,\n &.selected {\n .Avatar.online::after {\n border-color: var(--color-chat-hover);\n }\n }\n\n .ListItem-button {\n padding: 0.25rem 0.5rem;\n }\n\n .info {\n .title {\n flex-grow: 1;\n }\n\n h3 {\n font-size: 1rem;\n width: auto;\n }\n\n .subtitle {\n color: var(--color-text-secondary);\n\n .matching-text-highlight {\n color: var(--color-text);\n background: #cae3f7;\n border-radius: 0.25rem;\n padding: 0 0.125rem;\n display: inline-block;\n\n .theme-dark & {\n --color-text: #000;\n }\n }\n }\n\n .message {\n flex-grow: 1;\n color: var(--color-text-secondary);\n overflow: hidden;\n text-overflow: ellipsis;\n\n .sender-name {\n color: var(--color-text);\n\n &::after {\n content: \": \";\n }\n }\n\n .media-preview--image {\n width: 1.25rem;\n height: 1.25rem;\n object-fit: cover;\n border-radius: 0.125rem;\n vertical-align: -0.25rem;\n margin-right: 0.25rem;\n }\n\n .icon-play {\n position: relative;\n display: inline-block;\n font-size: 0.75rem;\n color: #fff;\n margin-inline-start: -1.25rem;\n margin-inline-end: 0.5rem;\n bottom: 0.0625rem;\n }\n }\n }\n\n .info-row {\n display: flex;\n justify-content: space-between;\n }\n\n &[dir=\"rtl\"] {\n .subtitle {\n text-align: right;\n }\n }\n}\n",".DateSuggest {\n display: flex;\n height: 2rem;\n flex-direction: row;\n justify-content: space-between;\n margin-left: 0.5rem;\n margin-bottom: 0.5rem;\n\n .date-item {\n display: flex;\n flex: 1 1 auto;\n min-width: 8rem;\n margin-top: 0.375rem;\n cursor: pointer;\n font-size: 0.875rem;\n font-weight: 500;\n color: var(--color-text-secondary);\n\n .icon-calendar {\n font-size: 1.25rem;\n margin-right: 0.25rem;\n }\n }\n}\n",".LeftSearch {\n display: flex;\n flex-direction: column;\n height: 100%;\n overflow: hidden;\n\n & > .Transition {\n flex: 1;\n overflow: hidden;\n }\n\n .TabList {\n padding-bottom: 1px;\n z-index: 1;\n }\n\n .documents-list {\n padding: 0 1.25rem 1.25rem;\n\n .ListItem {\n padding: 0.625rem 0;\n }\n }\n\n .section-heading {\n position: relative;\n padding-top: 1.25rem;\n padding-left: 1.25rem;\n margin: 0 0 1rem -1.25rem !important;\n\n font-weight: 500;\n font-size: 0.9375rem;\n color: var(--color-text-secondary);\n\n &::before {\n content: \"\";\n position: absolute;\n width: 100%;\n height: 1px;\n background: var(--color-borders);\n left: 0.625rem;\n top: -1px;\n }\n\n &[dir=\"rtl\"],\n &[dir=\"auto\"] {\n padding-left: 0;\n padding-right: 1.25rem;\n margin: 0 -1.25rem 0 1rem !important;\n text-align: initial;\n\n &::before {\n left: auto;\n right: 0.625rem;\n }\n }\n }\n\n .LeftSearch .search-section .section-heading,\n .RecentContacts .search-section .section-heading {\n margin-left: -1rem !important;\n width: calc(100% + 2rem);\n box-shadow: 0 -1px 0 0 var(--color-borders);\n\n &::before {\n display: none;\n }\n }\n\n .WebLink {\n display: flex;\n }\n\n .content:not(.with-seekline) {\n align-self: center;\n min-width: 0;\n flex-grow: 1;\n overflow: hidden;\n text-overflow: ellipsis;\n word-break: break-word;\n }\n\n .message-date {\n font-size: 0.75rem;\n color: var(--color-text-secondary);\n padding-left: 1rem;\n white-space: nowrap;\n }\n\n .media-list {\n display: grid;\n padding: 0.5rem;\n grid-template-columns: repeat(3, 1fr);\n grid-auto-rows: 1fr;\n grid-gap: 0.25rem;\n }\n\n .Audio {\n .ProgressSpinner {\n margin: -0.1875rem 0 0 -0.1875rem;\n }\n }\n\n .ListItem.search-result {\n .ChatInfo {\n .handle {\n unicode-bidi: plaintext;\n color: var(--color-primary);\n\n &::before {\n content: \"@\";\n html[lang=\"ar\"] & {\n content: \" ،@\";\n margin-inline-end: 0.25rem;\n }\n }\n\n &::after {\n content: \", \";\n color: var(--color-text-secondary);\n\n html[lang=\"ar\"] & {\n content: \"\";\n }\n }\n }\n\n &[dir=\"rtl\"] {\n .status {\n text-align: right;\n\n .handle {\n float: right;\n }\n }\n }\n }\n }\n\n .ListItem.search-result-message {\n .sender-name {\n color: var(--color-text);\n\n &::after {\n content: \": \";\n white-space: pre;\n }\n }\n }\n\n @media (max-width: 600px) {\n .ListItem {\n margin: 0 -0.625rem;\n }\n }\n\n .search-section {\n padding: 0 1rem 0.5rem;\n\n .section-heading {\n color: var(--color-text-secondary);\n font-size: 0.9375rem;\n font-weight: 500;\n margin-bottom: 0 !important;\n padding-top: 0.875rem;\n\n .Link {\n float: right;\n color: var(--color-links);\n font-weight: 400;\n margin-right: 1rem;\n\n &:focus,\n &:hover {\n text-decoration: underline;\n }\n }\n\n &[dir=\"rtl\"],\n &[dir=\"auto\"] {\n .Link {\n float: left;\n margin-left: 1rem;\n margin-right: 0;\n }\n }\n }\n\n .Loading {\n height: 4.5rem;\n margin-bottom: 0.5rem;\n }\n }\n\n .chat-selection {\n padding-top: 0.5rem;\n display: flex;\n flex-shrink: 0;\n flex-wrap: nowrap;\n justify-content: space-between;\n align-items: flex-end;\n box-shadow: inset 0 -1px 0 0 var(--color-borders);\n background-color: var(--color-background);\n -webkit-overflow-scrolling: touch;\n overflow-x: auto;\n overflow-y: hidden;\n\n scrollbar-color: rgba(0, 0, 0, 0);\n\n > .PickerSelectedItem {\n flex: 0 0 auto;\n\n &:last-child {\n margin-right: auto;\n }\n }\n\n &[dir=\"rtl\"] {\n > .PickerSelectedItem:last-child {\n margin-left: auto;\n margin-right: 0;\n }\n }\n }\n\n .NothingFound {\n height: 100%;\n }\n\n [dir=\"rtl\"] {\n .message-date {\n padding-left: 0;\n padding-right: 1rem;\n }\n }\n}\n","@mixin thumb-styles() {\n background: var(--color-primary);\n cursor: pointer;\n transform: scale(1);\n transition: transform 0.25s ease-in-out;\n\n &:hover {\n transform: scale(1.2);\n }\n}\n\n.CropModal {\n .modal-dialog {\n width: calc(100% - 2rem);\n max-width: 35rem;\n height: calc(100% - 1rem);\n max-height: 35rem;\n position: relative;\n }\n\n .modal-content,\n #avatar-crop {\n overflow: hidden;\n }\n\n .confirm-button {\n position: absolute;\n bottom: 1rem;\n right: 1rem;\n box-shadow: 0 1px 2px var(--color-default-shadow);\n }\n\n #avatar-crop {\n max-width: 25rem;\n margin: 0 auto;\n position: relative;\n\n &::before {\n content: \"\";\n display: block;\n padding-top: 100%;\n }\n\n .cr-boundary {\n position: absolute;\n top: 0;\n left: 0;\n border-radius: var(--border-radius-messages-small);\n }\n\n .cr-viewport {\n border: none;\n box-shadow: 0 0 2000px 2000px rgba(#7f7f7f, 0.5);\n }\n\n .cr-slider {\n // Note that while we're repeating code here, that's necessary as you can't comma-separate these type of selectors.\n // Browsers will drop the entire selector if it doesn't understand a part of it.\n\n &::-webkit-slider-runnable-track {\n background: var(--color-borders);\n }\n\n &::-moz-range-track {\n background: var(--color-borders);\n }\n\n &::-ms-track {\n background: var(--color-borders);\n }\n\n &::-webkit-slider-thumb {\n @include thumb-styles();\n }\n\n &::-moz-range-thumb {\n @include thumb-styles();\n }\n\n &::-ms-thumb {\n @include thumb-styles();\n }\n }\n }\n}\n","@import \"../../styles/mixins\";\n\n.AvatarEditable {\n label {\n margin-left: auto;\n margin-right: auto;\n width: 7.5rem;\n height: 7.5rem;\n margin-bottom: 2rem;\n display: flex !important;\n align-items: center;\n justify-content: center;\n background-color: var(--color-primary);\n border-radius: 50%;\n color: white;\n font-size: 3rem;\n cursor: pointer;\n position: relative;\n overflow: hidden;\n outline: none !important;\n\n input {\n display: none;\n }\n\n img {\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n }\n\n i {\n transform: scale(1);\n transition: transform 0.15s linear;\n z-index: var(--z-register-add-avatar);\n }\n\n // @optimization The weirdest workaround for screen animation lag\n @include while-transition() {\n input,\n i,\n &::after {\n display: none !important;\n }\n\n img {\n position: static !important;\n }\n }\n\n &:hover {\n i {\n transform: scale(1.2);\n }\n }\n\n &.filled {\n background-color: var(--color-background);\n\n &::after {\n content: \"\";\n display: block;\n position: absolute;\n left: 0;\n top: 0;\n width: 100%;\n height: 100%;\n background-color: rgba(black, 0.4);\n }\n }\n\n &.disabled {\n pointer-events: none;\n\n i {\n display: none;\n }\n\n &::after {\n display: none;\n }\n }\n }\n}\n",".ShowMoreButton {\n color: var(--text-color) !important;\n display: flex;\n align-items: center;\n text-align: left;\n text-transform: none;\n padding-left: 0.75rem !important;\n opacity: 1 !important;\n\n i {\n font-size: 1.5rem;\n margin-right: 2rem;\n color: var(--color-text-secondary);\n }\n\n .Spinner {\n top: 0.4375rem;\n }\n}\n",".SettingsFoldersChatsPicker {\n height: calc(100% - var(--header-height));\n\n .picker-header {\n box-shadow: 0 0 2px var(--color-default-shadow);\n\n .max-items-reached {\n margin-bottom: 0.5rem;\n margin-left: 0.5rem;\n flex-grow: 1;\n color: var(--color-text-secondary);\n }\n }\n\n .picker-list {\n padding: 0 0.5rem 0.5rem;\n\n .no-results {\n height: 10rem;\n }\n }\n\n .ListItem.picker-list-item {\n &.chat-type-item .ListItem-button {\n padding: 0.875rem 0.75rem;\n }\n\n &.chat-item .ListItem-button {\n padding: 0.5rem 0.75rem;\n }\n\n .Checkbox {\n margin-left: auto;\n padding-left: 3.25rem;\n }\n\n .chat-type {\n font-size: 1rem;\n font-weight: 400;\n margin: 0;\n }\n\n &[dir=\"rtl\"] {\n .Checkbox {\n margin-left: 0;\n margin-right: auto;\n padding-left: 0;\n padding-right: 3.25rem;\n }\n }\n }\n\n .settings-item-header {\n margin-left: 0.75rem;\n margin-top: 1rem;\n margin-bottom: 0.5rem;\n }\n\n .picker-list-divider {\n margin: 0.5rem -0.5rem 0;\n border-bottom: 1px solid var(--color-borders);\n }\n}\n",".settings-folders-recommended-item {\n width: 100%;\n display: flex;\n align-items: center;\n justify-content: space-between;\n}\n\n.settings-folders-list-item {\n .ChatInfo {\n display: flex;\n align-items: center;\n\n .Avatar {\n margin-left: -0.25rem;\n margin-right: 1.5rem;\n }\n\n .title {\n display: flex;\n justify-content: flex-start;\n align-items: center;\n\n h3 {\n font-size: 1rem;\n font-weight: 500;\n line-height: 1.3125;\n margin: 0;\n overflow: hidden;\n white-space: nowrap;\n text-overflow: ellipsis;\n text-align: left;\n }\n }\n\n .status {\n display: none;\n }\n\n &[dir=\"rtl\"] {\n .title h3 {\n text-align: right;\n }\n }\n }\n\n .ListItem-button {\n i {\n opacity: 0.9;\n }\n }\n\n &.color-primary .ListItem-button {\n color: var(--color-primary);\n\n i {\n opacity: 1;\n color: inherit;\n }\n }\n\n &[dir=\"rtl\"] {\n .Avatar {\n margin-left: 1.5rem;\n margin-right: -0.25rem;\n }\n }\n}\n\n.settings-item .ShowMoreButton {\n margin: 0 -1rem;\n width: calc(100% + 2rem);\n padding-left: 1rem !important;\n}\n",".SettingsStickerSet {\n .settings-item &.ListItem {\n margin-bottom: 0.5rem;\n }\n\n .StickerButton,\n .Button {\n width: 3rem;\n height: 3rem;\n margin: 0 0.5rem 0 0;\n padding: 0;\n flex: 0 0 3rem;\n }\n\n img {\n max-width: 100%;\n max-height: 100%;\n }\n\n .multiline-menu-item {\n display: flex;\n flex-direction: column;\n justify-content: center;\n }\n\n &[dir=\"rtl\"] {\n .StickerButton,\n .Button {\n margin: 0 0 0 0.5rem;\n }\n }\n}\n",".WallpaperTile {\n height: 0;\n padding-bottom: 100%;\n cursor: pointer;\n position: relative;\n\n .media-inner,\n &::after {\n position: absolute;\n left: 0;\n top: 0;\n width: 100%;\n height: 100%;\n }\n\n .media-inner {\n overflow: hidden;\n transform: scale(1);\n transition: transform 0.15s ease;\n\n img,\n canvas {\n position: absolute;\n left: 0;\n top: 0;\n width: 100%;\n height: 100%;\n object-fit: cover;\n }\n }\n\n &::after {\n content: \"\";\n display: block;\n border: 2px solid var(--color-primary);\n opacity: 0;\n transition: opacity 0.15s ease;\n }\n\n &.selected {\n &::after {\n opacity: 1;\n }\n\n .media-inner {\n transform: scale(0.9);\n }\n }\n\n .spinner-container {\n height: 100%;\n display: flex;\n align-items: center;\n justify-content: center;\n }\n}\n",".SettingsGeneralBackground {\n .settings-wallpapers {\n display: grid;\n grid-template-columns: repeat(3, 1fr);\n grid-auto-rows: 1fr;\n grid-gap: 0.0625rem;\n background-color: var(--color-background);\n box-shadow: inset 0 -0.0625rem 0 0 var(--color-background-secondary-accent);\n }\n\n .Loading {\n height: auto !important;\n margin-top: 5rem;\n }\n}\n",".SettingsGeneralBackgroundColor {\n &:not(.is-dragging) .handle {\n transition: transform 300ms ease;\n }\n\n .color-picker,\n .hue-picker {\n position: relative;\n }\n\n .color-picker {\n margin-top: 1rem;\n height: 12rem;\n }\n\n .hue-picker {\n margin: 2rem 0;\n height: 0.5rem;\n }\n\n canvas {\n display: block;\n width: 100%;\n height: 100%;\n border-radius: var(--border-radius-default);\n cursor: pointer;\n }\n\n .handle {\n position: absolute;\n top: -0.75rem;\n left: -0.75rem;\n width: 1.5rem;\n height: 1.5rem;\n border: 0.125rem solid var(--color-white);\n border-radius: 0.75rem;\n cursor: grab;\n }\n\n .hue-picker .handle {\n top: -0.5rem;\n }\n\n .tools {\n margin-bottom: 0.625rem;\n display: flex;\n\n .input-group {\n margin-bottom: 0;\n\n &[dir=\"rtl\"] {\n label {\n transform: scale(0.75) translate(1.25rem, -2.25rem);\n }\n }\n }\n\n .input-group:first-child {\n margin-right: 0.5rem;\n }\n\n .input-group:last-child {\n margin-left: 0.5rem;\n }\n }\n\n .predefined-colors {\n display: grid;\n grid-template-columns: repeat(3, 1fr);\n grid-auto-rows: 1fr;\n grid-gap: 0.0625rem;\n background-color: var(--color-background);\n box-shadow: inset 0 -0.0625rem 0 0 var(--color-background-secondary-accent);\n\n div {\n cursor: pointer;\n box-shadow: inset 0 0 0 0 var(--color-background);\n transition: box-shadow 300ms ease;\n\n &.active {\n border: 0.125rem solid var(--color-primary);\n box-shadow: inset 0 0 0 0.3125rem var(--color-background);\n }\n\n // A hack to make a square\n &:before {\n display: block;\n content: \"\";\n width: 100%;\n padding-top: 100%;\n pointer-events: none;\n }\n }\n }\n}\n","$icons: \"android\", \"apple\", \"brave\", \"chrome\", \"edge\", \"firefox\", \"linux\", \"opera\", \"safari\", \"samsung\", \"ubuntu\", \"unknown\", \"vivaldi\", \"windows\", \"xbox\";\n\n@mixin device-icon($icon-name) {\n .icon-device-#{$icon-name} {\n background-image: url(\"../../../assets/devices/#{$icon-name}.svg\");\n }\n}\n\n.SettingsActiveSessions {\n .icon-device {\n width: 2rem;\n height:2rem;\n background-repeat: no-repeat;\n background-size: 2rem;\n flex: 0 0 2rem;\n margin-inline-end: 1.5rem !important;\n }\n\n @each $icon in $icons {\n @include device-icon($icon);\n }\n}\n","#monkey {\n position: relative;\n display: block;\n margin-left: auto;\n margin-right: auto;\n width: 7.5rem;\n height: 7.5rem;\n margin-bottom: 1.75rem;\n\n @media (min-width: 600px) and (min-height: 450px) {\n width: 10rem;\n height: 10rem;\n margin-bottom: 2.5rem;\n }\n\n &.big {\n width: 10rem;\n height: 10rem;\n }\n\n .AnimatedSticker {\n position: absolute;\n left: 0;\n top: 0;\n width: 100%;\n height: 100%;\n\n &.hidden {\n display: none\n }\n }\n\n .monkey-preview {\n width: 100%;\n height: 100%;\n background: url('../../assets/monkey.svg') center;\n background-size: 100%;\n }\n}\n","@import \"../../../styles/mixins\";\n\n#Settings {\n height: 100%;\n\n > div {\n display: flex;\n flex-direction: column;\n overflow: hidden;\n }\n\n .left-header {\n padding-right: 0.8125rem;\n }\n}\n\n.settings-main-header {\n display: flex;\n flex-grow: 1;\n justify-content: space-between;\n align-items: center;\n}\n\n.settings-more-menu {\n .bubble {\n width: auto;\n\n .MenuItem button {\n padding-left: 1rem !important;\n padding-right: 2rem !important;\n }\n }\n}\n\n.settings-content {\n border-top: 1px solid var(--color-borders);\n background-color: var(--color-background-secondary);\n height: calc(100% - var(--header-height));\n\n overflow-y: auto;\n @include overflow-y-overlay();\n\n &.no-border, &.two-fa {\n border-top: none;\n }\n\n &.infinite-scroll {\n display: flex;\n flex-direction: column;\n\n & > .custom-scroll {\n flex: 1 1 auto;\n height: auto;\n }\n }\n\n #monkey {\n margin-top: 0.5rem;\n margin-bottom: 1rem;\n }\n\n .AnimatedEmoji {\n margin-top: 0.5rem;\n margin-bottom: 1.5rem;\n }\n}\n\n.settings-content-header {\n display: flex;\n flex-direction: column;\n align-items: center;\n padding: 0 1.5rem 1rem;\n text-align: center;\n background-color: var(--color-background);\n box-shadow: inset 0 -0.0625rem 0 0 var(--color-background-secondary-accent);\n margin-bottom: 0.625rem;\n\n &.no-border {\n margin-bottom: 0;\n box-shadow: none;\n }\n\n .input-group {\n width: 100%;\n }\n}\n\n.settings-content-icon {\n width: 5rem;\n height: 5rem;\n margin-bottom: 2.5rem;\n position: relative;\n\n .AnimatedSticker {\n position: absolute;\n left: 0;\n top: 0;\n width: 100%;\n height: 100%;\n\n &.hidden {\n display: none;\n }\n }\n}\n\n.settings-main-menu {\n padding: 0 0.5rem 0.75rem;\n background-color: var(--color-background);\n\n > .ChatExtra {\n padding: 0 0.5rem 0.3125rem;\n margin: 0 -0.5rem 0.625rem;\n box-shadow: inset 0 -0.0625rem 0 0 var(--color-background-secondary-accent);\n border-bottom: 0.625rem solid var(--color-background-secondary);\n\n .ListItem.narrow {\n margin-bottom: 0.25rem;\n }\n }\n}\n\n.settings-item {\n background-color: var(--color-background);\n padding: 1.5rem 1.5rem 1rem;\n box-shadow: inset 0 -0.0625rem 0 0 var(--color-background-secondary-accent);\n margin-bottom: 0.625rem;\n\n &.no-border {\n margin-bottom: 0;\n box-shadow: none;\n }\n\n &-header {\n font-size: 1rem;\n color: var(--color-text-secondary);\n margin-bottom: 2rem;\n position: relative;\n\n &[dir=\"rtl\"] {\n text-align: right;\n }\n }\n\n &-slider {\n margin-top: 2rem;\n }\n\n &-description {\n font-size: 0.875rem;\n color: var(--color-text-secondary);\n margin-top: -0.5rem;\n margin-bottom: 1.5rem;\n\n .settings-content.two-fa & {\n font-size: 1rem;\n }\n\n .settings-edit-profile & {\n margin-bottom: 0;\n padding-bottom: 1.5rem;\n }\n\n &[dir=\"rtl\"] {\n text-align: right;\n unicode-bidi: plaintext;\n }\n }\n\n &-description-larger {\n font-size: 1rem;\n line-height: 1.3125rem;\n color: var(--color-text-secondary);\n margin-top: 2rem;\n margin-bottom: 0.75rem;\n\n &[dir=\"rtl\"] {\n text-align: right;\n }\n }\n\n .ListItem {\n margin: 0 -1rem 1rem;\n\n &:last-child {\n margin-bottom: 0;\n }\n\n .multiline-menu-item {\n white-space: initial;\n\n &.full-size {\n width: 100%;\n }\n\n .date {\n float: right;\n font-size: 0.75rem;\n margin-left: 1rem;\n color: var(--color-text-secondary);\n }\n\n .title,\n .subtitle {\n display: block;\n text-align: left;\n }\n\n .title {\n line-height: 1.25rem;\n }\n\n .subtitle {\n font-size: 0.875rem;\n line-height: 1.5rem;\n color: var(--color-text-secondary);\n\n & + .subtitle {\n margin-top: -0.25rem;\n }\n\n &.black {\n color: var(--color-text);\n }\n\n &.tight {\n line-height: 1.3125rem;\n margin-bottom: 0.1875rem;\n }\n }\n }\n\n &.destructive {\n .ListItem-button {\n color: var(--color-error);\n\n i {\n color: inherit;\n }\n }\n }\n\n &.blocked-list-item {\n margin-bottom: 0.5rem;\n\n .ListItem-button {\n align-items: center;\n text-align: left;\n padding: 0.5rem;\n }\n\n .Avatar {\n width: 3rem;\n height: 3rem;\n margin-right: 1rem;\n }\n\n .contact-name {\n font-size: 1rem;\n line-height: 1rem;\n margin-bottom: 0.25rem;\n font-weight: 500;\n }\n\n .contact-phone {\n font-size: 0.875rem;\n line-height: 1rem;\n color: var(--color-text-secondary);\n }\n }\n\n &[dir=\"rtl\"] {\n .multiline-menu-item {\n .title,\n .subtitle {\n text-align: right;\n }\n\n .date {\n float: left;\n margin-left: 0;\n margin-right: 1rem;\n }\n }\n }\n }\n\n .RangeSlider {\n margin-bottom: 1.0625rem;\n }\n\n .Checkbox,\n .radio-group {\n margin: 0 -1rem 0.5rem;\n }\n\n .radio-group {\n .Radio:last-child {\n margin-bottom: 0;\n }\n }\n\n .Radio + .Radio,\n .Checkbox + .Checkbox {\n margin-top: 2rem;\n }\n\n &__current-value {\n margin-inline-start: auto;\n padding-inline-start: 0.5rem;\n font-size: 0.9375rem;\n color: var(--color-text-secondary);\n }\n}\n\n.settings-fab-wrapper {\n height: calc(100% - var(--header-height));\n position: relative;\n overflow: hidden;\n\n .settings-content {\n height: 100%;\n }\n\n .FloatingActionButton {\n right: 1.5rem;\n }\n}\n\n.settings-edit-profile {\n padding: 0 1.5rem;\n}\n\n.username-link {\n color: var(--color-links);\n}\n\n.settings-quick-reaction {\n .Radio-main .label {\n display: flex;\n }\n\n .ReactionStaticEmoji {\n margin-inline-end: 1rem;\n width: 1.5rem;\n }\n}\n\n.SettingsDefaultReaction {\n .ReactionStaticEmoji {\n width: 1.5rem;\n height: 1.5rem;\n margin-inline-end: 2rem;\n }\n}\n","// @optimization\n@mixin while-transition() {\n .Transition > div:not(.Transition__slide--active) &, body.animating-right-column & {\n @content;\n }\n}\n\n@mixin overflow-y-overlay() {\n @supports (overflow-y: overlay) {\n overflow-y: overlay;\n\n //Workaround for Android <= 9\n overflow-x: hidden;\n }\n}\n\n@mixin reset-range() {\n input[type=\"range\"] {\n -webkit-appearance: none;\n display: block;\n width: 100%;\n height: 0.75rem;\n margin-bottom: 0.5rem;\n background: transparent;\n\n &:focus {\n outline: none;\n }\n\n &::-ms-track {\n width: 100%;\n cursor: pointer;\n\n background: transparent;\n border-color: transparent;\n color: transparent;\n }\n\n &::-webkit-slider-thumb {\n -webkit-appearance: none;\n }\n\n &::-moz-slider-thumb {\n -moz-appearance: none;\n }\n\n &::-webkit-slider-runnable-track {\n cursor: pointer;\n }\n\n &::-moz-range-track, &::-moz-range-progress {\n cursor: pointer;\n }\n }\n}\n",".NewChat {\n height: 100%;\n overflow: hidden;\n position: relative;\n\n &-inner {\n height: calc(100% - var(--header-height));\n overflow: hidden;\n\n &.step-2 {\n padding: 0 1.25rem;\n display: flex;\n flex-direction: column;\n\n .note, .error {\n font-size: 0.875rem;\n line-height: 1.25rem;\n margin: 1.5rem 0.25rem;\n }\n\n .error {\n color: var(--color-error);\n }\n\n .note {\n margin-top: -0.5625rem;\n color: var(--color-text-secondary);\n }\n\n .chat-members-heading {\n color: var(--color-text-secondary);\n font-size: 1rem;\n font-weight: 500;\n margin: 1rem 0.25rem;\n }\n\n .chat-members-list {\n margin: 0 -1.25rem;\n padding: 0 1rem 1rem;\n\n overflow-x: hidden;\n flex-grow: 1;\n }\n }\n }\n}\n",".ArchivedChats {\n height: 100%;\n overflow: hidden;\n\n .chat-list {\n height: calc(100% - var(--header-height));\n }\n}\n",".ReactionSelectorReaction {\n margin-left: 0.5rem;\n position: relative;\n min-width: 2rem;\n min-height: 2rem;\n\n &:first-child {\n margin-left: 0;\n }\n\n &__static {\n width: 100%;\n height: 100%;\n position: absolute;\n top: 0;\n left: 0;\n background: url('../../../assets/reaction-thumbs.png') no-repeat;\n background-size: auto 100%;\n }\n\n .AnimatedSticker {\n position: absolute;\n top: 0;\n left: 0;\n }\n\n &--compact {\n min-width: 1.5rem;\n min-height: 1.5rem;\n }\n}\n",".ReactionSelector {\n position: absolute;\n height: 3rem;\n background: var(--color-background);\n min-width: 3rem;\n max-width: calc(100% + 5rem);\n z-index: 100;\n border-radius: 3rem;\n filter: drop-shadow(0 0.25rem 0.125rem var(--color-default-shadow));\n right: -3rem;\n top: -3.5rem;\n\n &__bubble-big {\n border: 0.5rem solid var(--color-background);\n position: absolute;\n display: block;\n content: \"\";\n right: 1.5rem;\n bottom: -0.5rem;\n width: 1rem;\n height: 1rem;\n border-top: 0;\n border-left: 0;\n border-right: 0;\n border-radius: 0 0 50% 50%;\n z-index: -1;\n }\n\n &__bubble-small {\n position: absolute;\n display: block;\n content: \"\";\n right: 1.25rem;\n bottom: -1.25rem;\n width: 0.5rem;\n height: 0.5rem;\n border-radius: 50%;\n background: var(--color-background);\n }\n\n body.is-safari & {\n filter: none;\n box-shadow: 0 0.25rem 0.125rem var(--color-default-shadow);\n }\n\n body.is-safari &__bubble-small,\n body.is-safari &__bubble-big {\n box-shadow: 0 0.25rem 0.125rem var(--color-default-shadow);\n }\n\n &__items-wrapper {\n width: 100%;\n height: 100%;\n overflow: hidden;\n border-radius: 3rem;\n }\n\n &__items {\n padding: 0 1rem;\n width: 100%;\n height: 100%;\n overflow-x: auto;\n overflow: overlay;\n overflow-y: hidden;\n display: flex;\n cursor: pointer;\n align-items: center;\n border-radius: 3rem;\n }\n\n &--compact {\n background: var(--color-background-compact-menu-reactions);\n height: 2rem;\n top: -2.5rem;\n }\n\n &--compact &__items {\n padding: 0 0.5rem;\n }\n\n &--compact &__bubble-big {\n border-color: var(--color-background-compact-menu-reactions);\n }\n\n &--compact &__bubble-small {\n background: var(--color-background-compact-menu-reactions);\n }\n}\n",".MessageContextMenu {\n position: absolute;\n font-size: 1rem;\n\n .scrollable-content {\n overflow: auto;\n overflow: overlay;\n padding: 0.5rem 0;\n overscroll-behavior: contain;\n }\n\n &.compact .scrollable-content {\n padding: 0.25rem 0;\n }\n\n .bubble {\n transition: opacity 0.15s cubic-bezier(0.2, 0, 0.2, 1), transform 0.15s cubic-bezier(0.2, 0, 0.2, 1) !important;\n transform: scale(0.7);\n overflow: initial;\n padding: 0 !important;\n }\n\n &.with-reactions .bubble {\n margin-top: 3.5rem;\n }\n\n .backdrop {\n touch-action: none;\n }\n\n &--seen-by {\n max-width: 14rem;\n }\n\n &--seen-by-label {\n max-width: 100%;\n overflow: hidden;\n text-overflow: ellipsis;\n }\n\n .avatars {\n display: flex;\n align-self: center;\n margin-inline-start: auto;\n padding-inline-start: 1rem;\n\n .Avatar {\n border: 0.0625rem solid var(--color-background);\n margin-right: 0;\n box-sizing: content-box;\n\n &:not(:first-child) {\n margin-left: -0.1875rem;\n }\n }\n }\n}\n",".StickerSetModal {\n .modal-dialog {\n width: 26.25rem;\n max-width: 100%;\n }\n\n @media (max-width: 600px) {\n .modal-dialog {\n width: 18.875rem;\n }\n }\n\n .modal-header {\n padding: 0.5rem 1rem;\n }\n\n .modal-content {\n text-align: center;\n padding: 0;\n }\n\n .stickers {\n position: relative;\n width: 100%;\n height: 19rem;\n max-height: 50vh;\n overflow-y: auto;\n padding: 0 0.25rem;\n text-align: left;\n }\n\n .button-wrapper {\n padding: 0.5rem 0;\n border-top: 1px solid var(--color-borders);\n box-shadow: 0 0 2px var(--color-default-shadow);\n\n button {\n display: inline-block;\n }\n }\n\n .Loading {\n width: 100%;\n height: 22.8125rem;\n max-height: calc(50vh + 3.8125rem);\n }\n}\n\n",".HeaderMenuContainer {\n position: fixed;\n top: 0;\n left: 0;\n right: 0;\n height: 100vh;\n z-index: var(--z-header-menu);\n\n .Menu {\n position: absolute;\n font-size: 1rem;\n\n .backdrop {\n z-index: var(--z-header-menu-backdrop);\n }\n\n .bubble {\n z-index: var(--z-header-menu);\n --offset-y: calc(100% + 1rem);\n }\n }\n}\n","#MobileSearch > .header {\n position: absolute;\n top: 0;\n left: 0;\n z-index: var(--z-mobile-search);\n width: 100%;\n height: 3.5rem;\n background: var(--color-background);\n display: flex;\n align-items: center;\n padding-left: max(0.25rem, env(safe-area-inset-left));\n padding-right: max(0.5rem, env(safe-area-inset-right));\n\n > .SearchInput {\n margin-left: 0.25rem;\n flex: 1;\n }\n}\n\n#MobileSearch > .footer {\n position: absolute;\n bottom: 0;\n left: 0;\n z-index: var(--z-mobile-search);\n width: 100%;\n height: 3.5rem;\n background: var(--color-background);\n display: flex;\n align-items: center;\n padding-left: max(1rem, env(safe-area-inset-left));\n padding-right: max(0.5rem, env(safe-area-inset-right));\n\n body:not(.keyboard-visible) & {\n padding-bottom: env(safe-area-inset-bottom);\n height: calc(3.5rem + env(safe-area-inset-bottom));\n }\n\n > .counter {\n flex: 1;\n color: var(--color-text-secondary);\n }\n}\n\n#MobileSearch:not(.active) {\n .header, .footer {\n // `display: none` will prevent synchronous focus on iOS\n transform: translateX(-999rem);\n }\n}\n",".MentionTooltip {\n width: calc(100% - 4rem);\n max-width: 20rem;\n flex-direction: column;\n\n z-index: -1;\n\n @media (max-width: 600px) {\n width: calc(100% - 3rem);\n }\n\n .ListItem.chat-item-clickable {\n margin: 0;\n\n .ListItem-button {\n border-radius: 0;\n }\n\n .info {\n display: flex;\n }\n\n .title {\n margin-inline-end: 0.625rem;\n max-width: 70%;\n }\n\n .handle {\n font-size: 1rem;\n }\n\n &[dir=\"rtl\"] {\n .status {\n width: auto;\n }\n }\n }\n\n .ChatInfo {\n .title h3 {\n line-height: 1.25;\n }\n\n .Avatar {\n margin-right: 0.7em;\n }\n\n .handle {\n &::before {\n content: \"@\";\n }\n }\n\n .user-status {\n display: none !important;\n }\n }\n}\n",".AttachmentModal {\n --border-radius-default: 0.625rem;\n\n .modal-dialog {\n max-width: 26.25rem;\n @media (max-width: 600px) {\n max-height: 100%;\n padding-bottom: 1.5rem;\n }\n }\n\n .modal-content {\n padding: 0.5rem 1.25rem 1.875rem;\n max-height: calc(100vh - 3.25rem);\n @media (max-width: 600px) {\n padding-bottom: 0.25rem;\n }\n }\n\n .media-wrapper {\n max-height: 26rem;\n overflow: auto;\n display: flex;\n flex-wrap: wrap;\n margin-bottom: 1.5rem;\n\n video,\n img {\n flex: 1;\n width: calc(50% - 0.15rem);\n height: 12rem;\n margin-bottom: 0.3125rem;\n border-radius: var(--border-radius-default);\n object-fit: cover;\n\n &:only-child {\n height: auto;\n max-height: 25rem;\n margin-bottom: 0;\n }\n\n &:nth-child(even) {\n margin-left: 0.3125rem;\n }\n }\n }\n\n .document-wrapper {\n max-height: 25rem;\n overflow: auto;\n flex-shrink: 0;\n display: flex;\n flex-direction: column;\n margin: 0.75rem 0 1.75rem;\n\n .File:not(:last-child) {\n margin-bottom: 1.5rem;\n }\n\n .file-icon {\n cursor: default !important;\n }\n }\n\n .attachment-caption-wrapper {\n position: relative;\n\n .form-control {\n background: var(--color-background);\n }\n\n .MentionTooltip {\n right: 0 !important;\n z-index: 0;\n }\n }\n\n .drop-target {\n position: relative;\n\n &::before,\n &::after {\n content: \"\";\n position: absolute;\n left: 0;\n top: 0;\n right: 0;\n bottom: 0;\n border-radius: var(--border-radius-default);\n pointer-events: none;\n\n opacity: 0;\n transition: 250ms opacity;\n z-index: 1;\n }\n\n &::before {\n background-image: var(--drag-target-border-hovered);\n background-color: var(--color-background);\n }\n\n &::after {\n content: attr(data-attach-description);\n display: flex;\n justify-content: center;\n align-items: center;\n color: var(--color-primary);\n }\n }\n\n &.hovered {\n .drop-target::before {\n opacity: 0.95;\n }\n\n .drop-target::after {\n opacity: 1;\n }\n\n .attachment-caption-wrapper,\n .document-wrapper,\n .media-wrapper {\n pointer-events: none;\n }\n\n .document-wrapper,\n .media-wrapper {\n border-radius: var(--border-radius-default);\n }\n }\n\n &--send-wrapper {\n position: relative;\n }\n\n .CustomSendMenu {\n bottom: auto;\n\n .is-pointer-env & > .backdrop {\n width: 100%;\n top: -2.25rem;\n bottom: auto;\n height: 2.75rem;\n }\n }\n}\n",".PollModal {\n .modal-dialog {\n max-width: 26.25rem;\n max-height: calc(100vh - 5rem);\n }\n\n .modal-content {\n padding: 0.5rem 1.25rem 1.875rem;\n min-height: 4.875rem;\n }\n\n .modal-header-condensed {\n margin-bottom: 1rem;\n }\n\n .options-header {\n color: var(--color-text-secondary);\n font-size: 1rem;\n font-weight: 500;\n margin: 1.5rem 0.25rem;\n }\n\n .options-list {\n margin: 1rem -0.75rem -0.5rem;\n padding: 0 0.75rem;\n border-top: 1px solid var(--color-chat-hover);\n max-height: 20rem;\n overflow: auto;\n\n &.overflown {\n padding: 0 0.4375rem 0.5rem 0.75rem;\n }\n\n @media (max-width: 600px) {\n overflow: hidden;\n max-height: none;\n\n &,\n &.overflown {\n padding: 0 0.75rem;\n }\n }\n }\n\n .option-wrapper {\n position: relative;\n\n .form-control {\n padding-right: 3rem;\n }\n\n .option-remove-button {\n position: absolute;\n top: 0.3125rem;\n right: 0.3125rem;\n }\n }\n\n .quiz-mode {\n margin-top: 1.5rem;\n\n .options-header {\n margin-bottom: 0.5rem;\n }\n\n .note {\n margin-top: 0.5rem;\n }\n }\n\n .note {\n font-size: smaller;\n color: var(--color-text-secondary);\n }\n\n .error {\n font-size: smaller;\n color: var(--color-error);\n margin: -1rem 0 1rem 0.25rem;\n }\n\n .input-group:last-child {\n margin-bottom: 0.5rem;\n }\n}\n",".EmojiButton {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 2.5rem;\n height: 2.5rem;\n margin: 0.125rem;\n border-radius: var(--border-radius-messages-small);\n cursor: pointer;\n font-size: 1.75rem;\n line-height: 2.5rem;\n background-color: transparent;\n transition: background-color 0.15s ease;\n\n .mac-os-fix & {\n line-height: inherit;\n }\n\n &.focus,\n &:hover {\n background-color: var(--color-background-selected);\n }\n\n & > img {\n width: 2rem;\n height: 2rem;\n }\n}\n",".EmojiPicker {\n height: 100%;\n\n &-main {\n height: calc(100% - 3rem);\n overflow-y: auto;\n padding: 0.5rem;\n\n @media (max-width: 600px) {\n padding: 0.5rem 0.25rem;\n }\n\n .symbol-set-container {\n display: flex;\n flex-wrap: wrap;\n }\n }\n\n &-header {\n height: 3rem;\n border-bottom: 1px solid var(--color-borders);\n display: flex;\n align-items: center;\n justify-content: space-around;\n box-shadow: 0 0 2px var(--color-default-shadow);\n\n @media (max-width: 600px) {\n overflow-x: auto;\n overflow-y: hidden;\n display: block;\n white-space: nowrap;\n padding: 0.4375rem 0;\n\n scrollbar-width: none;\n scrollbar-color: rgba(0, 0, 0, 0);\n\n &::-webkit-scrollbar {\n height: 0;\n }\n\n &::-webkit-scrollbar-thumb {\n background-color: rgba(0, 0, 0, 0);\n }\n\n .symbol-set-button {\n display: inline-flex;\n vertical-align: middle;\n }\n\n // Spacer to counter last button margin not being accounted in scroll width\n &::after {\n content: \"\";\n display: block;\n flex-shrink: 0;\n width: 1px;\n height: 1rem;\n }\n }\n }\n}\n",".StickerPicker {\n height: 100%;\n\n &-main {\n position: relative;\n height: calc(100% - 3rem);\n overflow-y: auto;\n padding: 0.5rem;\n\n @media (max-width: 600px) {\n padding: 0.5rem 0.25rem;\n }\n }\n\n &-header {\n height: 3rem;\n border-bottom: 1px solid var(--color-borders);\n padding: 0.125rem 0;\n overflow-x: auto;\n overflow-y: hidden;\n white-space: nowrap;\n box-shadow: 0 0 2px var(--color-default-shadow);\n\n scrollbar-width: none;\n scrollbar-color: rgba(0, 0, 0, 0);\n\n &::-webkit-scrollbar {\n height: 0;\n }\n\n &::-webkit-scrollbar-thumb {\n background-color: rgba(0, 0, 0, 0);\n }\n\n // Spacer to counter last button margin not being accounted in scroll width\n &::after {\n content: \"\";\n display: block;\n flex-shrink: 0;\n width: 1px;\n height: 1rem;\n }\n\n\n .sticker-set-button {\n display: inline-flex;\n vertical-align: middle;\n align-items: center;\n justify-content: center;\n\n &.StickerButton {\n background-size: 2rem;\n\n video, img, .AnimatedSticker {\n top: 0.375rem;\n left: 0.375rem;\n width: 2rem;\n height: 2rem;\n }\n }\n\n .sticker-set-cover {\n width: 2rem;\n height: 2rem;\n position: relative;\n display: flex;\n align-items: center;\n justify-content: center;\n\n video, img, .AnimatedSticker {\n width: 100%;\n height: 100%;\n position: absolute;\n top: 0;\n left: 0;\n }\n }\n }\n }\n\n .symbol-set-container {\n width: 25rem;\n line-height: 0;\n\n @media (max-width: 600px) {\n width: 100%;\n }\n }\n\n .sticker-set-button {\n width: 2.75rem !important;\n height: 2.75rem;\n margin: 0 0.25rem;\n border-radius: var(--border-radius-messages-small);\n }\n}\n",".GifButton {\n display: flex;\n align-items: center;\n justify-content: center;\n height: 6.25rem;\n background-color: transparent;\n position: relative;\n\n &:hover {\n .gif-unsave-button {\n opacity: 0.8;\n }\n }\n\n &:last-child {\n margin-bottom: 1rem;\n }\n\n &.vertical {\n grid-column-end: span 1;\n }\n\n &.horizontal {\n grid-column-end: span 2;\n }\n\n &.interactive {\n cursor: pointer;\n }\n\n .thumbnail {\n width: 100%;\n height: 100%;\n background: transparent no-repeat center;\n background-size: cover !important;\n }\n\n .preview, video {\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n object-fit: cover;\n\n -webkit-touch-callout: none;\n user-select: none;\n }\n\n .Spinner {\n position: absolute;\n pointer-events: none;\n }\n\n .gif-unsave-button {\n position: absolute;\n top: 0.25rem;\n right: 0.25rem;\n width: 1rem;\n height: 1rem;\n padding: 0.125rem;\n border-radius: 0.25rem;\n transition: 0.15s opacity ease-in-out;\n\n &-icon {\n font-size: 0.75rem;\n }\n\n opacity: 0;\n z-index: 1;\n }\n\n .gif-context-menu {\n position: absolute;\n\n .bubble {\n width: auto;\n }\n }\n}\n",".GifPicker {\n display: grid;\n grid-template-columns: repeat(6, 1fr);\n grid-auto-rows: 6.25rem;\n grid-gap: 0.25rem;\n grid-auto-flow: dense;\n height: 100%;\n overflow-y: auto;\n padding: 0.25rem;\n\n @supports (overflow: overlay) {\n overflow-y: overlay;\n }\n\n .Loading, .picker-disabled {\n grid-column: 1 / -1;\n height: var(--menu-height);\n }\n}\n","@import \"../../../styles/mixins\";\n\n.SymbolMenu {\n &.mobile-menu {\n position: fixed;\n left: 0;\n right: 0;\n bottom: 0;\n background: var(--color-background);\n z-index: 1;\n\n transition: transform var(--layer-transition);\n padding-right: env(safe-area-inset-right);\n padding-bottom: env(safe-area-inset-bottom);\n padding-left: env(safe-area-inset-left);\n transform: translate3d(\n 0,\n calc(var(--symbol-menu-height) + var(--symbol-menu-footer-height) + env(safe-area-inset-bottom)),\n 0\n );\n\n &.open {\n transform: translate3d(0, 0, 0);\n\n body.is-media-viewer-open & {\n transform: translate3d(0, calc(var(--symbol-menu-height) + var(--symbol-menu-footer-height)), 0);\n }\n }\n\n body.animation-level-0 & {\n transition: none;\n }\n\n &:not(.middle-column-open) {\n transform: translate3d(100vw, 0, 0) !important;\n }\n }\n\n &-main {\n height: var(--symbol-menu-height);\n max-height: calc(100vh - var(--symbol-menu-footer-height) - env(safe-area-inset-bottom));\n }\n\n &-footer {\n height: var(--symbol-menu-footer-height);\n border-top: 1px solid var(--color-borders);\n display: flex;\n align-items: center;\n justify-content: center;\n box-shadow: 0 0 2px var(--color-default-shadow);\n position: relative;\n\n .Button {\n flex-shrink: 0;\n width: 2.125rem !important;\n height: 2.125rem;\n margin: 0 0.25rem;\n padding: 0;\n\n &.activated {\n pointer-events: none;\n }\n\n &.symbol-tab-button {\n margin: 0 0.75rem;\n }\n\n &.symbol-search-button {\n position: absolute;\n left: 0.25rem;\n }\n\n &.symbol-delete-button {\n position: absolute;\n right: 0.25rem;\n }\n }\n }\n\n .Transition.slide {\n height: 100%;\n\n .Loading {\n height: var(--symbol-menu-height);\n }\n }\n\n .is-pointer-env & {\n > .backdrop {\n position: absolute;\n top: -1rem;\n left: 0;\n right: auto;\n width: 3.5rem;\n height: 4.5rem;\n }\n }\n\n .Button.bot-commands ~ &,\n .Button.send-as-button ~ & {\n .is-pointer-env & > .backdrop {\n left: 3rem;\n width: 3.25rem;\n }\n }\n\n .bubble {\n width: calc(var(--symbol-menu-width) + 0.25rem); // Reserve width for scrollbar\n padding: 0;\n overflow: hidden;\n\n @supports (overflow: overlay) {\n width: var(--symbol-menu-width);\n }\n }\n\n .picker-disabled {\n height: var(--symbol-menu-height);\n display: flex;\n align-items: center;\n justify-content: center;\n color: var(--color-text-secondary);\n }\n\n .symbol-close-button {\n display: none;\n position: absolute;\n right: max(calc(0.25rem), env(safe-area-inset-right));\n top: max(calc(0.25rem), env(safe-area-inset-top));\n }\n\n @media (orientation: landscape) {\n .symbol-close-button {\n display: block;\n }\n }\n}\n\n.symbol-set {\n margin-bottom: 1rem;\n\n &-name {\n font-size: 1rem;\n line-height: 1.6875rem;\n font-weight: 500;\n margin: 0;\n padding-left: 0.5rem;\n color: rgba(var(--color-text-secondary-rgb), 0.75);\n overflow: hidden;\n white-space: nowrap;\n text-overflow: ellipsis;\n text-align: initial;\n unicode-bidi: plaintext;\n }\n\n &-container {\n text-align: initial;\n }\n\n &-button {\n flex-shrink: 0;\n width: 2.125rem !important;\n height: 2.125rem;\n margin: 0 0.25rem;\n padding: 0;\n }\n\n @include while-transition() {\n overflow: hidden;\n }\n\n .symbol-set-container {\n &:not(.shown) {\n display: block;\n }\n\n &.closing {\n transition: none;\n }\n }\n}\n",".BotCommand {\n margin: 0 !important;\n\n .ListItem-button {\n border-radius: 0;\n }\n\n .multiline-item {\n padding: 0 1rem;\n\n .subtitle {\n padding-top: 0.25rem;\n line-height: 1.3125;\n }\n }\n\n &.with-avatar {\n .multiline-item {\n padding: 0;\n display: flex;\n }\n\n .content-inner {\n flex: 1;\n }\n }\n}\n",".BotCommandTooltip {\n width: calc(100% - 4rem);\n max-width: 26rem;\n flex-direction: column;\n\n z-index: -1;\n\n @media (max-width: 600px) {\n width: calc(100% - 3rem);\n }\n}\n",".BotCommandMenu {\n .menu-container {\n width: calc(100% - 4rem);\n max-width: 20rem;\n max-height: 40vh;\n overflow: auto;\n flex-direction: column;\n\n @media (max-width: 600px) {\n width: calc(100% - 3rem);\n }\n }\n\n .is-pointer-env & {\n > .backdrop {\n position: absolute;\n top: -1rem;\n left: 0;\n right: auto;\n width: 3.5rem;\n height: 4.5rem;\n }\n }\n}\n",".StickerTooltip {\n display: grid;\n grid-template-columns: repeat(auto-fill, minmax(5rem, 1fr));\n grid-auto-rows: auto;\n place-items: center;\n\n &.hidden {\n display: none;\n }\n}\n",".CustomSendMenu {\n position: relative;\n bottom: 3.5rem;\n\n .is-pointer-env & {\n > .backdrop {\n position: absolute;\n top: -1rem;\n left: auto;\n right: 0;\n width: 3.5rem;\n }\n }\n\n\n .media-disabled > button {\n white-space: normal;\n }\n\n .bubble {\n width: 16rem;\n }\n}\n",".EmojiTooltip {\n display: flex;\n padding-left: 0.25rem;\n\n overflow-x: auto;\n @supports (overflow-x: overlay) {\n overflow-x: overlay;\n }\n overflow-y: hidden;\n\n .EmojiButton {\n flex: 0 0 2.5rem;\n }\n}\n",".BaseResult {\n &.chat-item-clickable > .ListItem-button {\n padding-left: 1.25rem !important;\n padding-right: 1.25rem !important;\n\n .title {\n display: block;\n text-overflow: ellipsis;\n }\n }\n\n .thumb {\n background-color: var(--color-background-secondary);\n flex: 0 0 3rem;\n width: 3rem;\n height: 3rem;\n line-height: 3rem;\n border-radius: var(--border-radius-default-tiny);\n display: inline-flex;\n align-content: center;\n justify-content: center;\n margin-inline-end: 0.5rem;\n overflow: hidden;\n font-size: 1.5rem;\n\n img:not(.emoji) {\n width: 100%;\n object-fit: cover;\n }\n\n img.emoji {\n width: 1.5rem;\n height: 1.5rem;\n margin: 0.75rem 0 0;\n }\n }\n\n .content-inner {\n min-width: 0;\n }\n\n .title {\n font-weight: 500;\n text-align: left;\n unicode-bidi: plaintext;\n }\n\n .description {\n white-space: normal;\n display: -webkit-box;\n -webkit-line-clamp: 2;\n -webkit-box-orient: vertical;\n overflow: hidden;\n text-overflow: ellipsis;\n text-align: left;\n unicode-bidi: plaintext;\n }\n &[dir=\"rtl\"] .title,\n &[dir=\"rtl\"] .description {\n text-align: right;\n }\n}\n",".MediaResult {\n height: 0;\n padding-bottom: 100%;\n overflow: hidden;\n position: relative;\n cursor: pointer;\n\n img {\n position: absolute;\n left: 0;\n top: 0;\n width: 100%;\n height: 100%;\n object-fit: cover;\n }\n}\n",".InlineBotTooltip {\n .switch-pm .title {\n margin: 0 auto;\n font-weight: 500;\n }\n\n &.gallery {\n display: grid;\n grid-template-columns: repeat(4, 1fr);\n grid-gap: 1px;\n padding: 0;\n\n @media (max-width: 600px) {\n grid-template-columns: repeat(3, 1fr);\n }\n\n .switch-pm {\n grid-column: 1 / -1;\n .ListItem-button {\n border-bottom-left-radius: 0;\n border-bottom-right-radius: 0;\n }\n }\n\n .GifButton {\n grid-column-end: initial;\n }\n\n .StickerButton {\n width: initial;\n height: 0;\n margin: 0;\n padding-bottom: 100%;\n border-radius: 0;\n\n .AnimatedSticker,\n img,\n canvas {\n position: absolute;\n top: 0;\n left: 0;\n width: 100% !important;\n height: 100% !important;\n\n @media (min-width: 600px) {\n top: 0.25rem;\n left: 0.25rem;\n width: calc(100% - 0.5rem) !important;\n height: calc(100% - 0.5rem) !important;\n }\n }\n }\n }\n}\n",".SendAsMenu {\n .send-as-title {\n font-weight: 500;\n line-height: 1.25rem;\n word-break: break-word;\n margin-inline-start: 1rem;\n margin-block: 0.5rem;\n }\n\n .menu-container {\n width: calc(100% - 4rem);\n max-width: 20rem;\n max-height: 40vh;\n overflow: auto;\n flex-direction: column;\n\n @media (max-width: 600px) {\n width: calc(100% - 3rem);\n }\n }\n\n .is-pointer-env & {\n > .backdrop {\n z-index: 2;\n position: absolute;\n top: -1rem;\n left: 0;\n right: auto;\n width: 3.5rem;\n height: 4.5rem;\n }\n }\n}\n\n.SendAsItem {\n margin: 0 !important;\n $border-size: 2px;\n\n .Avatar.selected {\n margin-right: 0.75rem;\n position: relative;\n width: calc(2.125rem - #{$border-size * 2});\n height: calc(2.125rem - #{$border-size * 2});\n\n &::before {\n display: block;\n content: \"\";\n position: absolute;\n top: #{-$border-size * 2};\n left: #{-$border-size * 2};\n border: $border-size solid var(--color-primary);\n width: calc(100% + #{$border-size * 4});\n height: calc(100% + #{$border-size * 4});\n border-radius: 50%;\n }\n }\n\n .ListItem-button {\n padding: 0.5625rem 1rem !important;\n border-radius: 0;\n align-items: center;\n }\n\n .info {\n margin-inline-start: 0.5rem;\n }\n\n .subtitle {\n font-size: 0.9375rem;\n color: var(--color-text-secondary);\n line-height: 1.3125;\n }\n}\n",".RightSearch {\n height: 100%;\n padding: 0 0.5rem;\n overflow-y: auto;\n\n .helper-text {\n padding: 1rem;\n margin-bottom: 0.125rem;\n font-weight: 500;\n color: var(--color-text-secondary);\n unicode-bidi: plaintext;\n text-align: initial;\n }\n}\n",".StickerSearch {\n height: 100%;\n padding: 0 0.5rem;\n overflow-y: auto;\n\n .helper-text {\n padding: 1rem;\n margin-bottom: 0.125rem;\n font-weight: 500;\n color: var(--color-text-secondary);\n }\n\n .sticker-set {\n margin-bottom: 1rem;\n\n &-header {\n display: flex;\n justify-content: space-between;\n padding: 0.5rem;\n\n .title-wrapper {\n overflow: hidden;\n }\n\n .title {\n font-size: 1rem;\n line-height: 1.6875rem;\n margin: 0;\n overflow: hidden;\n white-space: nowrap;\n text-overflow: ellipsis;\n }\n\n .count {\n color: var(--color-text-secondary);\n margin: 0;\n }\n\n .Button {\n flex-shrink: 0;\n margin-left: 1rem;\n\n &.is-added {\n background: var(--color-chat-hover);\n color: var(--color-text-secondary);\n\n &:hover,\n &:active {\n background: var(--color-item-active) !important;\n }\n }\n }\n }\n\n &-main {\n display: flex;\n flex-wrap: nowrap;\n overflow: hidden;\n }\n\n &[dir=\"rtl\"] {\n .title-wrapper {\n text-align: right;\n }\n\n .Button {\n margin-left: 0;\n margin-right: 1rem;\n }\n }\n }\n\n .StickerButton {\n margin: 0.125rem;\n }\n}\n",".GifSearch {\n height: 100%;\n padding: 0.25rem;\n\n .gif-container {\n height: 100%;\n overflow: auto;\n\n &.grid {\n display: grid;\n grid-template-columns: repeat(6, 1fr);\n grid-auto-rows: 6.25rem;\n grid-gap: 0.25rem;\n grid-auto-flow: dense;\n }\n }\n\n .helper-text {\n color: var(--color-text-meta);\n margin-top: 2rem;\n text-align: center;\n }\n}\n",".StatisticsOverview {\n padding: 1rem 0.75rem;\n margin-bottom: 1rem;\n border-bottom: 1px solid var(--color-borders);\n\n &__header {\n margin-bottom: 0.5rem;\n font-weight: 500;\n display: flex;\n align-items: center;\n justify-content: space-between;\n }\n\n &__title {\n margin-right: 2em;\n padding-left: 0.25rem;\n font-size: 16px;\n color: var(--text-color);\n line-height: 30px;\n text-transform: lowercase;\n\n &:first-letter {\n text-transform: uppercase;\n }\n }\n\n &__caption {\n font-size: 0.75rem;\n text-align: right;\n }\n\n &__table {\n width: 100%;\n\n &-heading {\n font-size: 0.9375rem;\n color: var(--color-text-secondary);\n }\n\n &-value {\n font-weight: 500;\n font-size: 1rem;\n }\n }\n\n &__value {\n font-size: 0.6875rem;\n color: var(--color-text-green);\n\n &.negative {\n color: var(--color-error);\n }\n }\n}\n",".StatisticsRecentMessage {\n position: relative;\n padding-left: 3rem;\n\n &__summary {\n flex: 1;\n overflow: hidden;\n white-space: nowrap;\n text-overflow: ellipsis;\n margin-right: 0.75rem;\n\n .media-preview__image {\n width: 2.5rem;\n height: 2.5rem;\n position: absolute;\n left: 0;\n top: 0;\n object-fit: cover;\n border-radius: 0.25rem;\n margin-inline-end: 0.25rem;\n\n &.round {\n border-radius: 0.625rem;\n }\n }\n\n .icon-play {\n position: relative;\n display: inline-block;\n font-size: 0.75rem;\n color: #fff;\n margin-inline-start: -1.25rem;\n margin-inline-end: 0.5rem;\n bottom: 0.0625rem;\n }\n }\n\n &__title {\n display: flex;\n align-items: center;\n line-height: 1.25rem;\n }\n\n &__info {\n display: flex;\n align-items: center;\n width: 100%;\n color: var(--color-text-meta);\n }\n\n &__meta {\n font-size: 0.75rem;\n }\n\n &__date {\n flex: 1;\n font-size: 0.8125rem;\n }\n}\n",".Statistics {\n height: 100%;\n overflow-x: hidden;\n overflow-y: hidden;\n\n &__messages {\n padding: 1rem 0.75rem;\n border-top: 1px solid var(--color-borders);\n\n &-title {\n padding-left: 0.25rem;\n font-size: 16px;\n color: var(--text-color);\n line-height: 30px;\n text-transform: lowercase;\n\n &:first-letter {\n text-transform: uppercase;\n }\n }\n }\n\n &.ready {\n overflow-y: scroll !important;\n }\n\n &__graph {\n margin-bottom: 1rem;\n border-bottom: 1px solid var(--color-borders);\n\n opacity: 1;\n transition: opacity 0.3s ease;\n\n &:last-of-type {\n margin-bottom: 0;\n border-bottom: none;\n }\n\n &.hidden {\n opacity: 0;\n }\n }\n\n .lovely-chart--container {\n font: inherit !important;\n font-size: 13px !important;\n }\n\n .lovely-chart--header {\n margin: 0 1rem;\n }\n\n .lovely-chart--header,\n .lovely-chart--tooltip-title,\n .lovely-chart--tooltip-dataset-value,\n .lovely-chart--percentage-title {\n font-weight: 500 !important;\n }\n\n .lovely-chart--container-type-pie {\n &.lovely-chart--state-zoomed-in > canvas {\n animation-name: pie-slim-in !important;\n }\n\n &:not(.lovely-chart--state-zoomed-in) > canvas {\n animation-name: pie-slim-out !important;\n }\n }\n}\n\n@keyframes pie-slim-in {\n 0% {\n clip-path: circle(80% at center calc(50% - 7.5px));\n -webkit-clip-path: circle(80% at center calc(50% - 7.5px));\n transform: rotate(-360deg);\n }\n\n 25% {\n clip-path: circle(40% at center calc(50% - 7.5px));\n -webkit-clip-path: circle(40% at center calc(50% - 7.5px));\n transform: rotate(-360deg);\n }\n\n 75% {\n clip-path: circle(40% at center calc(50% - 7.5px));\n -webkit-clip-path: circle(40% at center calc(50% - 7.5px));\n transform: rotate(0);\n }\n}\n\n@keyframes pie-slim-out {\n 0% {\n clip-path: circle(40% at center calc(50% - 7.5px));\n -webkit-clip-path: circle(40% at center calc(50% - 7.5px));\n transform: rotate(360deg);\n }\n\n 50% {\n clip-path: circle(40% at center calc(50% - 7.5px));\n -webkit-clip-path: circle(40% at center calc(50% - 7.5px));\n transform: rotate(0);\n }\n\n 75% {\n clip-path: circle(80% at center calc(50% - 7.5px));\n -webkit-clip-path: circle(80% at center calc(50% - 7.5px));\n transform: rotate(0);\n }\n}\n",".PollAnswerResults {\n border-bottom: 1px solid var(--color-borders);\n padding: 0 0.5rem 0.625rem;\n display: flex;\n flex-direction: column-reverse;\n\n .answer-head {\n display: flex;\n align-items: center;\n font-size: 0.9375rem;\n line-height: 1.3125rem;\n font-weight: 500;\n color: var(--color-text-secondary);\n padding: 1rem 0.75rem 0.5rem 1rem;\n position: sticky;\n top: 0;\n background: var(--color-background);\n\n @media (max-width: 600px) {\n padding: 0.5rem 0.25rem 0.5rem 0.5rem;\n }\n }\n\n .answer-percent {\n margin-left: auto;\n\n &[dir=\"auto\"] {\n margin-left: 0;\n margin-right: auto;\n }\n }\n\n .poll-voters {\n padding: 0 0.75rem;\n position: relative;\n min-height: 3rem;\n\n @media (max-width: 600px) {\n padding: 0 0.25rem;\n }\n\n .Spinner {\n --spinner-size: 1.25rem;\n }\n }\n\n .chat-item-clickable {\n .ChatInfo .Avatar.size-tiny {\n margin-right: 1.75rem;\n }\n\n &[dir=\"rtl\"] {\n .ChatInfo .Avatar.size-tiny {\n margin-left: 1.75rem;\n margin-right: 0;\n }\n }\n }\n\n .ShowMoreButton {\n margin: 0.25rem 0 0 -0.5rem;\n width: calc(100% + 1rem);\n\n &[dir=\"rtl\"] {\n .icon-down {\n margin-left: 2rem;\n margin-right: 0;\n }\n }\n }\n\n .icon-down {\n vertical-align: middle;\n margin-right: 2rem;\n font-size: 1.5rem;\n }\n}\n",".PollResults {\n height: 100%;\n position: relative;\n display: flex;\n flex-direction: column;\n pointer-events: auto;\n\n > .Loading {\n position: absolute;\n top: 0;\n left: 0;\n bottom: 0;\n right: 0;\n background: rgba(white, 0.75);\n }\n\n .poll-question {\n padding: 0.75rem 1.5rem;\n flex-shrink: 0;\n font-size: 1.25rem;\n\n @media (max-width: 600px) {\n padding: 0 1rem;\n }\n }\n\n .poll-results-list {\n border-top: 1px solid var(--color-borders);\n flex-grow: 1;\n overflow: auto;\n }\n}\n",".Management {\n position: relative;\n height: 100%;\n background-color: var(--color-background-secondary);\n\n & > .custom-scroll {\n height: 100%;\n overflow-y: scroll;\n overflow-x: hidden;\n }\n\n .section {\n padding: 1rem 1.5rem;\n background-color: var(--color-background);\n box-shadow: inset 0 -0.0625rem 0 0 var(--color-background-secondary-accent);\n margin-bottom: 0.625rem;\n\n &.wide {\n padding: 1.5rem;\n }\n\n &:first-of-type {\n padding-top: 1rem;\n }\n\n &.no-border {\n border-top: none;\n }\n\n > .ChatInfo {\n margin: 0 0 2rem !important;\n\n .title h3 {\n margin-bottom: 0;\n }\n }\n\n .section-icon {\n width: 8.75rem;\n height: 8.75rem;\n margin: 0 auto 2rem;\n position: relative;\n\n .AnimatedSticker {\n position: absolute;\n left: 0;\n top: 0;\n width: 100%;\n height: 100%;\n\n &.hidden {\n display: none;\n }\n }\n }\n\n .ListItem {\n margin: 0 -0.75rem;\n\n .Reaction {\n display: flex;\n align-items: center;\n }\n\n .ReactionStaticEmoji {\n width: 1.5rem;\n margin-right: 1rem;\n }\n\n &:last-child {\n margin-bottom: 0;\n }\n\n .multiline-item .subtitle {\n line-height: 1.25rem;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n }\n\n &:not(.picker-list-item) .Checkbox {\n margin-top: 2rem;\n margin-bottom: 2rem;\n }\n\n &.narrow {\n .Checkbox {\n margin-top: 1rem;\n margin-bottom: 1rem;\n }\n }\n\n &.exceptions-member {\n .ChatInfo .status {\n white-space: pre-wrap;\n }\n }\n }\n\n .section-heading {\n font-weight: 500;\n font-size: 0.9375rem;\n color: var(--color-text-secondary);\n\n &[dir=\"auto\"] {\n text-align: initial;\n }\n }\n\n .section-help {\n color: var(--color-text-secondary);\n line-height: 1.375rem;\n\n &[dir=\"auto\"] {\n text-align: initial;\n }\n }\n\n .section-info {\n color: var(--color-text-secondary);\n font-size: 0.875rem;\n }\n\n &[dir=\"rtl\"] {\n text-align: right;\n }\n }\n\n textarea.form-control {\n height: auto;\n }\n\n .group-link {\n color: var(--color-text);\n }\n\n .radio-group {\n margin-top: 2rem;\n\n .Radio {\n padding-left: 3.5rem;\n margin-bottom: 2rem;\n\n &:last-child {\n margin-bottom: 0.625rem;\n }\n }\n\n .Radio-main {\n &::before {\n left: 0.125rem;\n top: 0.25rem;\n transform: none;\n }\n\n &::after {\n left: 0.4375rem;\n top: 0.5625rem;\n transform: none;\n }\n }\n }\n\n &__filter {\n padding: 0 1rem 0.25rem 0.75rem;\n border-bottom: 1px solid var(--color-borders);\n display: flex;\n flex-flow: row wrap;\n flex-shrink: 0;\n\n overflow-y: auto;\n max-height: 20rem;\n\n .input-group {\n margin-bottom: 0.5rem;\n margin-left: 0.5rem;\n flex-grow: 1;\n }\n\n .form-control {\n height: 2rem;\n border: none;\n border-radius: 0;\n padding: 0;\n box-shadow: none;\n }\n }\n\n .Spinner {\n margin: 2rem auto;\n }\n}\n\n.ManageGroupMembers {\n padding: 0.5rem 1rem;\n}\n\n.ManageInvites {\n .primary-link {\n position: relative;\n }\n\n .primary-link-input {\n cursor: pointer;\n margin-bottom: 1rem;\n padding-right: 3rem;\n }\n\n .primary-link-more-menu {\n position: absolute;\n right: 0.5rem;\n top: 50%;\n transform: translate(0, -50%);\n z-index: 1;\n }\n\n .create-link {\n margin-bottom: 0.5rem;\n }\n\n .invite-title {\n white-space: nowrap;\n }\n}\n\n.ManageInvite {\n .link-name {\n margin-bottom: 1rem;\n }\n\n .expire-limit {\n margin-top: 1rem;\n }\n\n .usage-limit {\n margin-top: 1rem;\n\n -moz-appearance: textfield;\n &::-webkit-outer-spin-button,\n &::-webkit-inner-spin-button {\n -webkit-appearance: none;\n }\n }\n\n .custom-scroll {\n padding-bottom: 4rem;\n }\n}\n\n.ManageInviteInfo {\n .copy-link {\n margin-top: 1rem;\n margin-bottom: 1rem;\n }\n\n .link-title {\n text-align: center;\n }\n}\n\n.ManageJoinRequests {\n .bulk-actions {\n display: flex;\n justify-content: space-around;\n }\n\n .bulk-action-button {\n width: auto;\n height: auto;\n }\n}\n\n.ManageInvite,\n.ManageInvites {\n .hint {\n font-size: 0.875rem;\n margin-bottom: 0;\n margin-top: 0.5rem;\n }\n}\n",".JoinRequest {\n display: flex;\n flex-direction: column;\n padding: 1rem 0;\n\n &:not(:last-child) {\n border-bottom: 1px solid var(--color-borders);\n }\n\n &__top {\n display: flex;\n cursor: pointer;\n padding: 0.5rem;\n border-radius: 0.5rem;\n\n &:hover {\n background-color: var(--color-chat-hover);\n }\n }\n\n &__user {\n display: flex;\n flex-grow: 1;\n min-width: 0;\n overflow: hidden;\n }\n\n &__user-info {\n display: flex;\n flex-direction: column;\n justify-content: center;\n overflow: hidden;\n margin-left: 1rem;\n }\n\n &__user-subtitle {\n color: var(--color-text-secondary);\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n }\n\n &__user-name {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n }\n\n &__date {\n color: var(--color-text-secondary);\n font-size: 0.875rem;\n margin-left: 1rem;\n white-space: nowrap;\n }\n\n &__buttons {\n display: flex;\n justify-content: space-evenly;\n margin-top: 1rem;\n gap: 0.5rem;\n }\n\n &__button {\n width: auto;\n height: auto;\n }\n}\n",".ShippingInfo {\n padding: 0.5rem 1rem;\n\n h5 {\n font-size: 0.875rem;\n color: var(--color-text-secondary);\n margin: 1rem 0 1.25rem;\n }\n}\n",".Shipping {\n padding: 0.5rem 1rem;\n\n form {\n p {\n color: var(--color-text-secondary);\n font-weight: 500;\n margin: 0.5rem 0 2rem;\n }\n\n .Radio {\n margin-bottom: 2rem;\n }\n }\n}\n",".Checkout {\n padding: 0.5rem 0;\n\n .description {\n display: flex;\n flex-direction: row;\n margin: 0 1rem;\n\n img {\n height: 6rem;\n margin: 0.5rem;\n }\n\n .text {\n h5 {\n margin-top: 0.5rem;\n font-size: 1.125rem;\n }\n\n p {\n font-size: 0.8125rem;\n line-height: 1rem;\n color: var(--color-text-secondary);\n }\n }\n }\n\n .price-info {\n margin: 1rem;\n\n .price-info-item {\n margin: 1rem 0.5rem;\n display: flex;\n flex-direction: row;\n align-content: space-between;\n color: var(--color-text-secondary);\n font-weight: 500;\n\n &-main {\n color: var(--color-text);\n }\n\n .title {\n display: flex;\n flex: 1 auto;\n }\n }\n }\n\n .invoice-info {\n border-top: 1px var(--color-borders) solid;\n padding: 1rem;\n\n .checkout-info-item {\n display: flex;\n padding: 0.75rem 0.5rem 1rem;\n text-align: left;\n\n i {\n font-size: 1.5rem;\n color: var(--color-text-secondary);\n margin-right: 2rem;\n width: 1.5rem;\n }\n\n i.provider {\n background: no-repeat center;\n background-size: 2rem;\n border-radius: 1rem;\n height: 1.5rem;\n }\n\n i.provider.stripe {\n background-image: url(\"../../assets/stripe-logo.png\");\n }\n\n i.provider.smartglocal {\n background-image: url(\"../../assets/smartglocal-logo.png\");\n }\n\n .info {\n .title {\n font-size: 1rem;\n line-height: 1.4375rem;\n margin-bottom: 0;\n font-weight: 400;\n word-break: break-word;\n color: var(--color-text);\n text-transform: capitalize;\n }\n\n .data {\n margin-bottom: 0;\n font-size: 0.875rem;\n color: var(--color-text-secondary);\n }\n }\n }\n }\n}\n",".CardInput {\n position: relative;\n\n .input-group.has-left-addon .form-control{\n padding-left: 4rem;\n }\n\n .left-addon {\n position: absolute;\n top: 0.8125rem;\n left: 1rem;\n z-index: 8;\n\n img {\n max-width: 2rem;\n }\n }\n}\n",".PaymentInfo {\n padding: 0.5rem 1rem;\n\n h5 {\n font-size: 0.875rem;\n color: var(--color-text-secondary);\n margin: 1rem 0 1.25rem;\n }\n\n .inline-inputs {\n display: flex;\n justify-content: space-between;\n\n .input-group {\n flex: 1 10rem;\n max-width: 45%;\n display: flex;\n }\n }\n}\n",".ConfirmPayment {\n display: flex;\n height: 100%;\n border-bottom-left-radius: var(--border-radius-default-small);\n border-bottom-right-radius: var(--border-radius-default-small);\n overflow: hidden;\n\n &__content {\n width: 100%;\n height: 100%;\n border: none;\n }\n}\n",".PaymentModal {\n .modal-backdrop {\n pointer-events: none;\n }\n\n .header {\n position: relative;\n border-top-left-radius: var(--border-radius-default-small);\n border-top-right-radius: var(--border-radius-default-small);\n width: 100%;\n padding: 0.25rem 1rem;\n display: flex;\n align-items: center;\n flex-direction: row;\n background: var(--color-background);\n border-bottom: 1px var(--color-borders) solid;\n\n h3 {\n margin-bottom: 0;\n margin-left: 1.5rem;\n unicode-bidi: plaintext;\n text-align: initial;\n }\n }\n\n .Transition {\n height: 25rem;\n }\n\n .empty-content {\n height: 25rem;\n max-height: 90%;\n display: flex;\n align-items: center;\n justify-content: center;\n }\n\n .receipt-content {\n height: 25rem;\n overflow-y: auto;\n }\n\n .content {\n overflow: auto;\n width: 100%;\n height: 100%;\n position: relative;\n }\n\n .footer {\n position: relative;\n border-bottom-left-radius: var(--border-radius-default-small);\n border-bottom-right-radius: var(--border-radius-default-small);\n width: 100%;\n padding: 0.75rem 1rem;\n background: var(--color-background);\n border-top: 1px var(--color-borders) solid;\n\n button {\n text-transform: none;\n font-weight: 500;\n }\n }\n\n .modal-dialog {\n width: 25rem;\n }\n\n .modal-content {\n padding: 0;\n overflow: hidden;\n }\n}\n\n@media screen and (max-device-width: 640px) and (max-height: 640px) and (orientation: landscape) {\n .PaymentModal {\n .modal-dialog {\n max-height: 100%;\n }\n\n .Transition {\n height: 10rem;\n }\n }\n}\n"],"names":[],"sourceRoot":""} \ No newline at end of file diff --git a/dist/382.f977b0f032aa1cd3a3ee.js b/dist/382.f977b0f032aa1cd3a3ee.js new file mode 100644 index 000000000..02de695d6 --- /dev/null +++ b/dist/382.f977b0f032aa1cd3a3ee.js @@ -0,0 +1,2 @@ +"use strict";(self.webpackChunktelegram_t=self.webpackChunktelegram_t||[]).push([[382],{3382:(e,t,n)=>{n.r(t),n.d(t,{ArchivedChats:()=>ms,AttachmentModal:()=>sr,BotCommandMenu:()=>Br,BotCommandTooltip:()=>Fr,CalendarModal:()=>lt,ChatFolderModal:()=>hs,ContactList:()=>ss,ContextMenuContainer:()=>Fs,CustomSendMenu:()=>$r,DeleteMessageModal:()=>mt,Dialogs:()=>je,DropArea:()=>Dr.Z,EmojiInteractionAnimation:()=>Nt,EmojiTooltip:()=>Gr,ForwardPicker:()=>Ve,GifSearch:()=>tl,HeaderMenuContainer:()=>Ds,HistoryCalendar:()=>ot,InlineBotTooltip:()=>Hr,LeftSearch:()=>Pn,Management:()=>Vl,MediaViewer:()=>Le,MentionTooltip:()=>tr,MessageSelectToolbar:()=>Et,MobileSearch:()=>Gs,NewChat:()=>cs,NewChatStep1:()=>ls,NewChatStep2:()=>os,NewContactModal:()=>dt,Notifications:()=>Ke,PaymentModal:()=>fo,PinMessageModal:()=>ut,PollModal:()=>lr,PollResults:()=>vl,ReactorListModal:()=>It,ReceiptModal:()=>yo,RightSearch:()=>Kr,SafeLinkModal:()=>et,SeenByModal:()=>Ct,SendAsMenu:()=>jr,Settings:()=>ns,Statistics:()=>hl,StickerSearch:()=>el,StickerSetModal:()=>xs,StickerTooltip:()=>xr,SymbolMenu:()=>Ar,TextFormatter:()=>Or.Z,UnpinAllMessagesModal:()=>ht});var a=n(4050),s=n(3555),r=n(6137),l=n(1713),o=n(3716),i=n(7361),c=n(6264),d=n(9290),m=n(1394),u=n(5326);const h=new Map;function Z(e){const t=(0,a.sO)();let n=!1;(0,d.Z)((()=>{if(n=!0,t.current=void 0,!e)return;const a=new Image;if(a.src=e,!a.width)return;const s=(0,m.ao)(a);(0,c.Z)(s.getContext("2d"),0,0,s.width,s.height,2,2),t.current=s.toDataURL()}),[e]);const s=function(e){let t=arguments.length>1&&void 0!==arguments[1]&&arguments[1],n=arguments.length>2?arguments[2]:void 0;const s=(0,a.sO)(e?h.get(e):void 0),r=(0,a.sO)(),l=(0,u.Z)();return r.current&&t&&(clearTimeout(r.current),r.current=void 0),(0,a.d4)((()=>{if(!e||s.current||t)return;const a=new Image;a.onload=()=>{const t=(0,m.ao)(a);(0,c.Z)(t.getContext("2d"),0,0,t.width,t.height,2,2);const n=t.toDataURL();s.current=n,l(),h.size>=1e3&&h.clear(),h.set(e,n)},n?r.current=window.setTimeout((()=>{a.src=e}),n):a.src=e}),[e,n,l,t]),s.current}(e||void 0,Boolean(t.current));return t.current||!n&&s||e||void 0}var v=n(8674),P=n(6590),g=n(9107),p=n(6202),E=n(2566),C=n(7204),f=n(5806),b=n(1192),I=n(396),y=n(3989),S=n(1174),N=n(3858),k=n(4399),w=n(996),M=n(3227);function T(e,t){const n=document.createElement("div");n.classList.add("ghost");const a=new Image;if(a.draggable=!1,a.oncontextmenu=M.Z,"string"==typeof e?a.src=e:e instanceof HTMLVideoElement?a.src=e.poster:a.src=e.src,n.appendChild(a),t===l.bZ.ProfileAvatar||t===l.bZ.SettingsAvatar){n.classList.add("ProfileInfo"),t===l.bZ.SettingsAvatar&&n.classList.add("self");const e=document.querySelector(t===l.bZ.ProfileAvatar?"#RightColumn .ProfileInfo .info":"#Settings .ProfileInfo .info");e&&n.appendChild(e.cloneNode(!0))}return n}function R(e,t){const n=document.querySelector(".Transition__slide--active > .MessageList");let a=e.offsetTop+t.closest(".content-inner, .WebPage").offsetTop;return e.id.includes("album-media-")&&(a+=e.parentElement.offsetTop+e.closest(".Message").offsetTop),a>n.scrollTop&&a+t.offsetHeight .MessageList #album-media-${(0,f.d0)(t.id)}`,a=".full-media";break;case l.bZ.SharedMedia:n=`#shared-media${(0,f.d0)(t.id)}`,a="img";break;case l.bZ.SearchResult:n=`#search-media${(0,f.d0)(t.id)}`,a="img";break;case l.bZ.MiddleHeaderAvatar:n=".MiddleHeader .Transition__slide--active .ChatInfo .Avatar",a=".avatar-media";break;case l.bZ.SettingsAvatar:n="#Settings .ProfileInfo .Transition__slide--active .ProfilePhoto",a=".avatar-media";break;case l.bZ.ProfileAvatar:n="#RightColumn .ProfileInfo .Transition__slide--active .ProfilePhoto",a=".avatar-media";break;case l.bZ.ScheduledInline:case l.bZ.Inline:default:n=`.Transition__slide--active > .MessageList #${(0,f.d0)(t.id)}`,a=".message-content .full-media, .message-content .thumbnail"}const s=document.querySelector(n),r=s&&s.querySelectorAll(a);return{container:s,mediaEl:null==r?void 0:r[r.length-1]}}function F(e,t){switch(t){case l.bZ.Album:case l.bZ.ScheduledAlbum:case l.bZ.Inline:case l.bZ.ScheduledInline:e.classList.add("rounded-corners");break;case l.bZ.SharedMedia:case l.bZ.SettingsAvatar:case l.bZ.ProfileAvatar:case l.bZ.SearchResult:e.firstChild.style.objectFit="cover";break;case l.bZ.MiddleHeaderAvatar:e.classList.add("circle")}}var B=n(231),x=n(126),$=n(2255),D=n(3106),O=n(8964),U=n(9196);const G=(0,a.X$)((0,s.c$)(((e,t)=>{let{message:n}=t;return{isDownloading:!!n&&(0,b.te)(e,n),isProtected:(0,b.EV)(e,n)}}))((e=>{let{mediaData:t,isVideo:n,isZoomed:r,message:l,fileName:o,isAvatar:c,isDownloading:d,isProtected:m,onCloseMediaViewer:u,onForward:h,onZoomToggle:Z}=e;const{downloadMessageMedia:v,cancelMessageMediaDownload:P}=(0,s.Sv)(),{loadProgress:p}=(0,E.Z)(l&&(0,f.Ti)(l,"download"),!d),C=(0,a.I4)((()=>{d?P({message:l}):v({message:l})}),[P,v,d,l]),b=(0,g.Z)(),I=(0,a.Ye)((()=>e=>{let{onTrigger:t,isOpen:n}=e;return a.ZP.createElement(B.Z,{round:!0,size:"smaller",color:"translucent",className:n?"active":void 0,onClick:t,ariaLabel:"More actions"},a.ZP.createElement("i",{className:"icon-more"}))}),[]);if(i.wB){if(m)return;return a.ZP.createElement("div",{className:"MediaViewerActions-mobile"},a.ZP.createElement(D.Z,{trigger:I,positionX:"right"},!c&&a.ZP.createElement(O.Z,{icon:"forward",onClick:h},b("Forward")),n?a.ZP.createElement(O.Z,{icon:d?"close":"download",onClick:C},d?`${Math.round(100*p)}% Downloading...`:"Download"):a.ZP.createElement(O.Z,{icon:"download",href:t,download:o},b("AccActionDownload"))),d&&a.ZP.createElement(U.Z,{progress:p,size:"s",noCross:!0}))}return a.ZP.createElement("div",{className:"MediaViewerActions"},!c&&!m&&a.ZP.createElement(B.Z,{round:!0,size:"smaller",color:"translucent-white",ariaLabel:b("Forward"),onClick:h},a.ZP.createElement("i",{className:"icon-forward"})),function(){if(!m)return n?a.ZP.createElement(B.Z,{round:!0,size:"smaller",color:"translucent-white",ariaLabel:b("AccActionDownload"),onClick:C},d?a.ZP.createElement(U.Z,{progress:p,size:"s",onClick:C}):a.ZP.createElement("i",{className:"icon-download"})):a.ZP.createElement(B.Z,{href:t,download:o,round:!0,size:"smaller",color:"translucent-white",ariaLabel:b("AccActionDownload")},a.ZP.createElement("i",{className:"icon-download"}))}(),a.ZP.createElement(B.Z,{round:!0,size:"smaller",color:"translucent-white",ariaLabel:r?"Zoom Out":"Zoom In",onClick:Z},a.ZP.createElement("i",{className:r?"icon-zoom-out":"icon-zoom-in"})),a.ZP.createElement(B.Z,{round:!0,size:"smaller",color:"translucent-white",ariaLabel:b("Close"),onClick:u},a.ZP.createElement("i",{className:"icon-close"})))})));var _=n(2202),J=n(9933),X=n(275),z=n(9118),V=n(9204),Y=n(6752);const H=e=>{let{text:t="",isHidden:n,isForVideo:s,onClick:r}=e;const[l,o]=(0,a.eJ)(!1);(0,a.d4)((()=>{const e=document.querySelector(".MediaViewerFooter .media-text"),t=()=>{const t=e?e.clientHeight:0;o(t>2*k.Gw)};t();const n=(0,z.P2)(t,500,!0);return window.addEventListener("resize",n,!1),()=>{window.removeEventListener("resize",n,!1)}}),[]);const c=(0,Y.Z)("MediaViewerFooter",s&&"is-for-video",n&&"is-hidden");return a.ZP.createElement("div",{className:c,onClick:function(e){t&&e.stopPropagation()}},t&&a.ZP.createElement("div",{className:"media-viewer-footer-content",onClick:i.wB?void 0:r},a.ZP.createElement("p",{className:"media-text custom-scroll "+(l?"multiline":""),dir:"auto"},t)))};var j=n(2019);const q=void 0!==document.fullscreenElement?"fullscreenElement":void 0!==document.mozFullScreenElement?"mozFullScreenElement":void 0!==document.webkitFullscreenElement?"webkitFullscreenElement":"";var K=n(1212),W=n(6898),Q=n(4753),ee=n(706),te=n(790);const ne=["bytes","kB","MB","GB","TB","PB"],ae=e=>{const t=0===e?0:Math.floor(Math.log(e)/Math.log(1024));return`${(e/1024**Math.floor(t)).toFixed(1)} ${ne[t]}`};var se=n(8051),re=n(2328);const le=e=>{e.stopPropagation()},oe=[.5,1,1.5,2],ie=e=>{let{bufferedRanges:t,bufferedProgress:n,currentTime:s,duration:r,fileSize:l,isForceMobileVersion:o,isPlayed:c,isFullscreenSupported:d,isFullscreen:m,isVisible:u,isBuffered:h,volume:Z,isMuted:v,playbackRate:P,onChangeFullscreen:p,onVolumeClick:E,onVolumeChange:C,onPlaybackRateChange:f,onPlayPause:b,setVisibility:I,onSeek:y}=e;const[N,k,w]=(0,ee.Z)(),M=(0,a.sO)(null),T=(0,a.sO)(!1),R=T.current;(0,a.d4)((()=>{let e;if(u&&c&&!R&&!N)return e=window.setTimeout((()=>{I(!1)}),1500),()=>{e&&window.clearTimeout(e)};e&&window.clearTimeout(e)}),[c,u,R,I,N]),(0,a.d4)((()=>(u?document.body.classList.add("video-controls-visible"):document.body.classList.remove("video-controls-visible"),()=>{document.body.classList.remove("video-controls-visible")})),[u]),(0,a.d4)((()=>{u||w()}),[w,u]);const A=(0,g.Z)(),L=(0,a.I4)((e=>{if(T.current&&M.current){const{width:t,left:n}=M.current.getBoundingClientRect(),a=e instanceof MouseEvent?e.clientX:e.targetTouches[0].clientX;y(Math.max(Math.min(r*((a-n)/t),r),0))}}),[r,y]),F=(0,a.I4)((e=>{T.current=!0,L(e)}),[L]),x=(0,a.I4)((()=>{T.current=!1}),[]);(0,a.d4)((()=>{if(M.current&&u)return(0,S.sf)(M.current,{onCapture:F,onRelease:x,onClick:x,onDrag:L})}),[u,F,L,x]);const $=(0,a.Ye)((()=>0===Z||v?"icon-muted":Z<.3?"icon-volume-1":Z<.6?"icon-volume-2":"icon-volume-3"),[Z,v]);return a.ZP.createElement("div",{className:(0,Y.Z)("VideoPlayerControls",o&&"mobile",u&&"active"),onClick:le},function(e,t,n,s){const r=e/t*100;return a.ZP.createElement("div",{className:"player-seekline",ref:s},a.ZP.createElement("div",{className:"player-seekline-track"},n.map((e=>{let{start:t,end:n}=e;return a.ZP.createElement("div",{className:"player-seekline-buffered",style:`left: ${100*t}%; right: ${100-100*n}%`})})),a.ZP.createElement("div",{className:"player-seekline-played",style:`width: ${r||0}%`})))}(s,r,t,M),a.ZP.createElement("div",{className:"buttons"},a.ZP.createElement(B.Z,{ariaLabel:A("AccActionPlay"),size:"tiny",ripple:!i.wB,color:"translucent-white",className:"play",round:!0,onClick:b},a.ZP.createElement("i",{className:c?"icon-pause":"icon-play"})),a.ZP.createElement(B.Z,{ariaLabel:"Volume",size:"tiny",color:"translucent-white",className:"volume",round:!0,onClick:E},a.ZP.createElement("i",{className:$})),!i.cj&&a.ZP.createElement(se.Z,{bold:!0,className:"volume-slider",value:v?0:100*Z,onChange:C}),function(e,t){return a.ZP.createElement("div",{className:"player-time"},`${(0,te.k9)(e)} / ${(0,te.k9)(t)}`)}(s,r),!h&&(D=n,U=l,a.ZP.createElement("div",{className:"player-file-size"},`${ae(U*D)} / ${ae(U)}`)),a.ZP.createElement("div",{className:"spacer"}),a.ZP.createElement(B.Z,{ariaLabel:"Playback rate",size:"tiny",color:"translucent-white",className:"playback-rate",round:!0,onClick:k},`${P}x`),d&&a.ZP.createElement(B.Z,{ariaLabel:"Fullscreen",size:"tiny",color:"translucent-white",className:"fullscreen",round:!0,onClick:p},a.ZP.createElement("i",{className:m?"icon-smallscreen":"icon-fullscreen"}))),a.ZP.createElement(re.Z,{isOpen:N,className:"playback-rate-menu",positionX:"right",positionY:"bottom",autoClose:!0,onClose:w},oe.map((e=>a.ZP.createElement(O.Z,{disabled:P===e,onClick:()=>f(e)},`${e}x`)))));var D,U};function ce(){return ce=Object.assign||function(e){for(var t=1;t{let{url:t,isGif:n,posterData:r,posterSize:l,loadProgress:o,fileSize:c,isMediaViewerOpen:d,noPlay:m,volume:u,isMuted:h,playbackRate:Z,onClose:v,toggleControls:P,areControlsVisible:g}=e;const{setMediaViewerVolume:p,setMediaViewerMuted:E,setMediaViewerPlaybackRate:C}=(0,s.Sv)(),f=(0,a.sO)(null),[b,I]=(0,a.eJ)(!i.$b||!i.cj),[y,S]=(0,a.eJ)(0),[N,k,w]=function(e,t){const[n,s]=(0,a.eJ)(Boolean(q&&document[q]));return(0,a.bt)((()=>{const n=()=>{s(Boolean(q&&document[q]))},a=()=>{s(!0)},r=()=>{s(!1),t(!1)},l=e.current;return document.addEventListener("fullscreenchange",n,!1),document.addEventListener("webkitfullscreenchange",n,!1),document.addEventListener("mozfullscreenchange",n,!1),l&&(l.addEventListener("webkitbeginfullscreen",a,!1),l.addEventListener("webkitendfullscreen",r,!1)),()=>{document.removeEventListener("fullscreenchange",n,!1),document.removeEventListener("webkitfullscreenchange",n,!1),document.removeEventListener("mozfullscreenchange",n,!1),l&&(l.removeEventListener("webkitbeginfullscreen",a,!1),l.removeEventListener("webkitendfullscreen",r,!1))}}),[]),q||"iOS"===i.Lt?[n,()=>{e.current&&(q||"iOS"===i.Lt)&&(e.current.requestFullscreen?e.current.requestFullscreen():e.current.webkitRequestFullscreen?e.current.webkitRequestFullscreen():e.current.webkitEnterFullscreen?e.current.webkitEnterFullscreen():e.current.mozRequestFullScreen&&e.current.mozRequestFullScreen(),s(!0))},()=>{e.current&&(document.exitFullscreen?document.exitFullscreen():document.mozCancelFullScreen?document.mozCancelFullScreen():document.webkitCancelFullScreen?document.webkitCancelFullScreen():document.webkitExitFullscreen&&document.webkitExitFullscreen(),s(!1))}]:[!1]}(f,I),{isBuffered:M,bufferedRanges:T,bufferingHandlers:R,bufferedProgress:A}=(0,j.Z)(),{shouldRender:L,transitionClassNames:F}=(0,K.Z)(!M,void 0,void 0,"slow"),{shouldRender:x,transitionClassNames:$}=(0,K.Z)(i.cj&&!b&&!L,void 0,void 0,"slow");(0,a.d4)((()=>{m||!d?f.current.pause():t&&!i.$b&&(0,Q.Z)(f.current)}),[m,d,t]),(0,a.d4)((()=>{f.current.currentTime===f.current.duration?(S(0),I(!1)):S(f.current.currentTime)}),[y]),(0,a.d4)((()=>{f.current.volume=u}),[u]),(0,a.d4)((()=>{f.current.playbackRate=Z}),[Z]);const D=(0,a.I4)((e=>{e.stopPropagation(),b?(f.current.pause(),I(!1)):((0,Q.Z)(f.current),I(!0))}),[b]);(0,W.Z)(f,[]);const O=(0,a.I4)((()=>{P(!0)}),[P]),G=(0,a.I4)((e=>{e.target===f.current&&P(!1)}),[P]),_=(0,a.I4)((e=>{S(e.currentTarget.currentTime)}),[]),J=(0,a.I4)((()=>{S(0),I(!1),P(!0)}),[P]),X=(0,a.I4)((()=>{N&&w?w():!N&&k&&k()}),[w,N,k]),z=(0,a.I4)((e=>{f.current.currentTime=e}),[]),V=(0,a.I4)((e=>{p({volume:e/100})}),[p]),Y=(0,a.I4)((()=>{E({isMuted:!h})}),[h,E]),H=(0,a.I4)((e=>{C({playbackRate:e})}),[C]);(0,a.d4)((()=>{if(!d)return;const e=e=>{"Enter"!==e.key&&" "!==e.key||(e.preventDefault(),D(e))};return document.addEventListener("keydown",e,!1),()=>{document.removeEventListener("keydown",e,!1)}}),[D,d]);const ee=l&&`width: ${l.width}px; height: ${l.height}px`,te=`background-image: url(${r})`;return a.ZP.createElement("div",{className:"VideoPlayer",onMouseMove:n||i.$b?void 0:O,onMouseOut:n||i.$b?void 0:G},a.ZP.createElement("div",{style:ee},a.ZP.createElement("video",ce({ref:f,autoPlay:i.$b,playsInline:!0,loop:n,muted:n||h,id:"media-viewer-video",style:te,onPlay:i.cj?()=>I(!0):void 0,onEnded:J,onClick:i.wB?void 0:D,onDoubleClick:i.$b?void 0:X},R,{onTimeUpdate:_}),t&&a.ZP.createElement("source",{src:t}))),x&&a.ZP.createElement(B.Z,{round:!0,className:`play-button ${$}`,onClick:D},a.ZP.createElement("i",{className:"icon-play"})),L&&a.ZP.createElement("div",{className:["spinner-container",F].join(" ")},!M&&a.ZP.createElement("div",{className:"buffering"},"Buffering..."),a.ZP.createElement(U.Z,{size:"xl",progress:M?1:o,square:!0,onClick:v})),!n&&!L&&a.ZP.createElement(ie,{isPlayed:b,bufferedRanges:T,bufferedProgress:A,isBuffered:M,currentTime:y,isFullscreenSupported:Boolean(k),isFullscreen:N,fileSize:c,duration:f.current&&f.current.duration||0,isVisible:g,setVisibility:P,isForceMobileVersion:l&&l.width<400,onSeek:z,onChangeFullscreen:X,onPlayPause:D,volume:u,playbackRate:Z,isMuted:h,onVolumeClick:Y,onVolumeChange:V,onPlaybackRateChange:H}))})),me=(0,a.X$)((0,s.c$)(((e,t)=>{const{chatId:n,threadId:a,messageId:s,avatarOwnerId:r,profilePhotoIndex:o,origin:i}=t,{volume:c,isMuted:d,playbackRate:m}=e.mediaViewer;if(i===l.bZ.SearchResult){if(!n||!s)return{volume:c,isMuted:d,playbackRate:m};const t=(0,b.hj)(e,n,s);return t?{chatId:n,messageId:s,senderId:t.senderId,origin:i,message:t,isProtected:(0,b.EV)(e,t),volume:c,isMuted:d,playbackRate:m}:{volume:c,isMuted:d,playbackRate:m}}if(r)return{messageId:-1,senderId:r,avatarOwner:(0,b.dy)(e,r)||(0,b.Z1)(e,r),profilePhotoIndex:o||0,origin:i,volume:c,isMuted:d,playbackRate:m};if(!(n&&a&&s))return{volume:c,isMuted:d,playbackRate:m};let u;return u=i&&[l.bZ.ScheduledAlbum,l.bZ.ScheduledInline].includes(i)?(0,b.Tm)(e,n,s):(0,b.hj)(e,n,s),u?{chatId:n,threadId:a,messageId:s,senderId:u.senderId,origin:i,message:u,isProtected:(0,b.EV)(e,u),volume:c,isMuted:d,playbackRate:m}:{volume:c,isMuted:d,playbackRate:m}}))((e=>{const{messageId:t,isActive:n,avatarOwner:s,chatId:o,message:c,profilePhotoIndex:d,origin:m,animationLevel:u,isFooterHidden:h,isProtected:v,volume:P,playbackRate:g,isMuted:C,onClose:b,onFooterClick:I,setIsFooterHidden:y}=e,S=c?(0,f.O$)(c):void 0,N=c?(0,f.b7)(c):void 0,T=c?(0,f.F$)(c):void 0,R=c?(0,f.Cg)(c):void 0,A=!!c&&(0,f.rl)(c),L=!!c&&(0,f.hC)(c),F=Boolean(N||R||L),B=Boolean(!F&&(S||T||A)),{isGif:x}=N||R||{},$=Boolean(s||t),D=Boolean(s),O=m===l.bZ.SharedMedia,U=m===l.bZ.SearchResult,G=2===u;function _(e){if(D&&void 0!==d){const{photos:t}=s;return t&&t[d]?`photo${t[d].id}?size=c`:(0,f.RT)(s,e?"big":"normal")}return c&&(0,f.Ti)(c,e?"viewerFull":"viewerPreview")}const J=(0,p.Z)(c&&(O||U)&&(0,f.Ti)(c,"pictogram"),void 0,r.IU.BlobUrl,void 0,G&&350),X=_(),z=(0,p.Z)(X,void 0,r.IU.BlobUrl,void 0,G&&350),{mediaData:Y,loadProgress:j}=(0,E.Z)(_(!0),void 0,c&&(0,f.kG)(c,"viewerFull"),void 0,G&&350),q=(0,a.I4)((e=>{null==y||y(!e)}),[y]),K=S||N?(S||N).blobUrl:void 0;let W=!F&&(K||Y)||z||J;const Q=Z(!W&&c&&(0,f.DH)(c));W||m===l.bZ.SearchResult||(W=Q);const ee=c?(0,f.c0)(c):void 0;let te;if(c?A||L?te=(0,f.aE)(c).mediaSize:S||T?te=(0,f.bV)(S||T):(N||R)&&(te=(0,f.jC)(N||R)):te=k.vY,D)return a.ZP.createElement("div",{key:o,className:"MediaViewerContent"},ue(Y||z,(0,k.PA)(k.vY,!1),!i.wB&&!v));if(!c)return;const ne=(0,w.X)(c),ae=Boolean(ne);return a.ZP.createElement("div",{className:"MediaViewerContent "+(ae?"has-footer":"")},v&&a.ZP.createElement("div",{onContextMenu:M.Z,className:"protector"}),B&&ue(K||Y||z||J,c&&(0,k.PA)(te,ae),!i.wB&&!v),F&&(!n&&i.$b?function(e,t,n){const s=t&&`width: ${t.width}px; height: ${t.height}px`,r=`background-image: url(${e})`;return e?a.ZP.createElement("div",{className:"VideoPlayer"},a.ZP.createElement("div",{style:s},a.ZP.createElement("video",{style:r,draggable:Boolean(n)}))):a.ZP.createElement("div",{className:"spinner-wrapper",style:t?`width: ${t.width}px`:""},a.ZP.createElement(V.Z,{color:"white"}))}(W,c&&(0,k.PA)(te,ae,!0),!i.wB&&!v):a.ZP.createElement(de,{key:t,url:K||Y,isGif:x,posterData:W,posterSize:c&&(0,k.PA)(te,ae,!0),loadProgress:j,fileSize:ee,isMediaViewerOpen:$&&n,areControlsVisible:!h,toggleControls:q,noPlay:!n,onClose:b,isMuted:C,volume:P,playbackRate:g})),ne&&a.ZP.createElement(H,{text:ne,onClick:I,isHidden:h&&i.$b,isForVideo:F&&!x}))})));function ue(e,t,n){return e?a.ZP.createElement("img",{src:e,alt:"",style:t?`width: ${t.width}px`:"",draggable:Boolean(n)}):a.ZP.createElement("div",{className:"spinner-wrapper",style:t?`width: ${t.width}px`:""},a.ZP.createElement(V.Z,{color:"white"}))}var he=n(8183);function Ze(){return Ze=Object.assign||function(e){for(var t=1;t{let{messageId:t,getMessageId:n,selectMessage:s,isVideo:r,isGif:l,isPhoto:o,isOpen:c,isActive:d,hasFooter:m,...h}=e;const Z=(0,a.sO)(null),v=(0,a.sO)(null),P=(0,a.sO)({x:0,y:0,scale:1}),g=(0,a.sO)(void 0),p=(0,a.sO)(!0),[E,C]=(0,a.eJ)(t),f=(0,u.Z)(),[b,I]=(0,a.eJ)(!0),{isZoomed:y,onClose:N}=h,k=(0,a.I4)((e=>{P.current=e,f()}),[f]),w=(0,a.I4)((e=>{p.current=e,f()}),[f]),M=(0,_.Z)(350,!0),T=(0,_.Z)(500,!0),R=(0,_.Z)(800,!0),A=(0,a.I4)((e=>{if(!i.$b)return;const t=window.innerHeight-e.pageY<80;!t&&e.pageX<40||!t&&e.pageX>window.innerWidth-40||I(!b)}),[b]);if((0,he.Z)((()=>I(!1)),200),(0,a.d4)((()=>{if(!i.$b||!Z.current||y||!E)return;let e={x:0,y:0,scale:1};const t={x:0,y:0},a={x:0,y:0},r={x:0,y:0};let l,o,c=Date.now();const d=(0,z.Ds)((()=>{c=Date.now()}),500,!1,!0),m=t=>{if(1!==P.current.scale)return!1;let a=0;if(window.innerHeight-t.pageY<80)return!1;t.pageX<40?a=-1:t.pageX>window.innerWidth-40&&(a=1);const r=n(E,a);if(r){const t=(window.innerWidth+40)*a;P.current.x+=t,p.current=!1,C(r),M((()=>s(r))),R((()=>{w(!0)})),e={x:0,y:0,scale:1},Pe=(0,J.vr)({from:P.current.x,to:0,duration:ve,timing:J.M8.easeOutCubic,onUpdate:e=>k({y:0,x:e,scale:1})})}return 0!==a};return(0,S.sf)(Z.current,{isNotPassive:!0,excludedClosestSelector:".MediaViewerFooter",onCapture:e=>{if(!fe(e)&&(c=Date.now(),(0,X.Z)(P.current,{x:0,y:0,scale:1}))){if(!v.current)return;if(o=v.current.querySelector("img, video"),!o)return;l=o.getBoundingClientRect()}},onDrag:(n,a,s)=>{let{dragOffsetX:l,dragOffsetY:o}=s;if(fe(n))return;if(i.cj){const{pageX:e}=a.touches[0];if(e<=S.vJ||e>=window.innerWidth-S.vJ)return}Pe&&(Pe(),Pe=void 0),r.x=t.x-l,r.y=t.y-o,t.x=l,t.y=o;const c=Math.abs(l),m=Math.abs(o),{scale:u,x:h,y:Z}=P.current,v=10;if(d(),1===u)return g.current!==ge.Vertical&&(g.current===ge.Horizontal||Math.abs(h)>v||c>v&&mv||m>v&&c{let{zoomFactor:s,initialCenterX:r,initialCenterY:l,dragOffsetX:o,dragOffsetY:i,currentCenterX:c,currentCenterY:d}=n;const m=Math.min(12,Math.max(e.scale*s,.6)),u=m/e.scale,h=Math.abs(Math.min(e.x,0))+r,Z=Math.abs(Math.min(e.y,0))+l;a.x=c,a.y=d;const v=h-u*h,P=Z-u*Z;k({x:e.x+v+o,y:e.y+P+i,scale:m})},onClick(e){m(e)&&(e.preventDefault(),e.stopPropagation())},onDoubleClick(t,n){let{centerX:a,centerY:s}=n;if(m(t))return t.preventDefault(),void t.stopPropagation();const r=a-3*a,l=s-3*s,{scale:o,x:i,y:c}=P.current;if(1===o){if(0!==i||0!==c)return;e={x:r,y:l,scale:3}}else e={x:0,y:0,scale:1};return(0,J.vr)({from:[i,c,o],to:[e.x,e.y,e.scale],duration:ve,timing:J.M8.easeOutCubic,onUpdate:e=>k({x:e[0],y:e[1],scale:e[2]})})},onRelease:()=>{const i=Math.abs(P.current.x),d=Math.abs(P.current.y),{scale:m,x:u,y:h}=P.current;if(T((()=>{g.current=void 0})),R((()=>{w(!0)})),m<1)return e={x:0,y:0,scale:1},(0,J.vr)({from:[u,h,m],to:[0,0,1],duration:ve,timing:J.M8.easeOutCubic,onUpdate:e=>k({x:e[0],y:e[1],scale:e[2]})});if(m>1){if(!o||!l)return void(e={x:u,y:h,scale:m});const n=o.getBoundingClientRect(),s=Math.min(m,4),i=s/m;let d=u*i+(a.x-i*a.x),Z=h*i+(a.y-i*a.y);const v=.15;if(e.scale===m){const e=Math.abs(t.x)/(Date.now()-c),n=Math.abs(t.y)/(Date.now()-c);d-=Math.abs(t.x)*e*v*r.x,Z-=Math.abs(t.y)*n*v*r.y}if(n.width>window.innerWidth){const e=-l.left*s,t=window.innerWidth-l.right*s;d=Math.min(e,Math.max(t,d))}else d=(window.innerWidth-window.innerWidth*s)/2;if(n.height>window.innerHeight){const e=-l.top*s,t=window.innerHeight-l.bottom*s;Z=Math.min(e,Math.max(t,Z))}else Z=(window.innerHeight-window.innerHeight*s)/2;return e={x:d,y:Z,scale:s},void(Pe=(0,J.vr)({from:[u,h,m],to:[d,Z,s],duration:ve,timing:J.M8.easeOutCubic,onUpdate:e=>k({x:e[0],y:e[1],scale:e[2]})}))}if(e={x:u,y:h,scale:m},d>=50)return N();if(d>0)return(0,J.vr)({from:h,to:0,duration:ve,timing:J.M8.easeOutCubic,onUpdate:e=>k({x:0,y:e,scale:m})});const Z=u<0?1:-1,v=n(E,u<0?1:-1),p=r.x<0?-1:1;if(v&&i>=50&&Z===p){const e=(window.innerWidth+40)*Z;P.current.x+=e,C(v),M((()=>s(v)))}Pe=(0,J.vr)({from:P.current.x,to:0,duration:ve,timing:J.M8.easeOutCubic,onUpdate:e=>k({y:0,x:e,scale:P.current.scale})})}})}),[y,N,k,n,E,w]),!E)return;const L=n(E,1),F=n(E,-1),B=P.current.x,x=P.current.y,{scale:$}=P.current;return a.ZP.createElement("div",{className:"MediaViewerSlides",ref:Z},F&&1===$&&a.ZP.createElement("div",{className:"MediaViewerSlide",style:Ee(-window.innerWidth+B-40)},a.ZP.createElement(me,Ze({},h,{messageId:F}))),E&&a.ZP.createElement("div",{className:"MediaViewerSlide "+(d?"MediaViewerSlide--active":""),onClick:A,ref:v,style:Ee(B,x,$)},a.ZP.createElement(me,Ze({},h,{messageId:E,isActive:d&&p.current,setIsFooterHidden:I,isFooterHidden:b||y||1!==$}))),L&&1===$&&a.ZP.createElement("div",{className:"MediaViewerSlide",style:Ee(window.innerWidth+B+40)},a.ZP.createElement(me,Ze({},h,{messageId:L}))))}));function Ee(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:0,t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:1;return`transform: translate3d(${e.toFixed(3)}px, ${t.toFixed(3)}px, 0px) scale(${n.toFixed(3)});`}function Ce(e,t){return!!e&&(!!e.matches(t)||Boolean(e.closest(t)))}function fe(e){const t=e.target;return!!Ce(t,".VideoPlayerControls")&&(Ce(t,".play, .fullscreen, .volume, .volume-slider, .playback-rate, .playback-rate-menu")||e.preventDefault(),!0)}var be=n(782);const Ie=[1,0,0,1,0,0],ye={1:1,1.5:1.5,2:2.2,2.5:3.3,3:5.5},Se=150,Ne=(0,a.X$)((e=>{let{children:t,className:n,noWrap:s,canPan:r,zoomLevel:l,panDeltaX:o,panDeltaY:i,onPan:c}=e;const d=ye[l]||l,[m,u]=(0,a.eJ)(!1),[h,Z]=(0,a.eJ)({dx:o,dy:i,x:0,y:0}),[v,P]=(0,a.eJ)(Ie),g=(0,a.sO)(null),p=(0,a.sO)(null);return(0,a.d4)((()=>{const e=d||v[0],t=o||v[4],n=i||v[5],a=[...v];v[0]!==e&&(a[0]=e||a[0],a[3]=e||a[3]),v[4]!==t&&(a[4]=t),v[5]!==n&&(a[5]=n),(0,be.et)(v,a)||P(function(e,t,n){const a=n&&n.querySelector(".Transition__slide--active img");if(!n||!a)return t;const s=n.getBoundingClientRect(),r=a.getBoundingClientRect(),l=r.width/e*t[0],o=r.height/e*t[3],i=(s.width-l)/2+t[4],c=(s.height-o)/2+t[5];return s.width&&s.width-Se{r||P(Ie)}),[r]),(0,a.d4)((()=>{p.current&&(p.current.style.transform=`matrix(${v.toString()})`)}),[s,v]),s?t:a.ZP.createElement("div",{ref:g,className:`pan-wrapper ${n||""}`,onMouseDown:e=>{if(!r)return;e.stopPropagation(),e.preventDefault();const t={dx:v[4],dy:v[5],x:e.pageX,y:e.pageY};Z(t),u(!0),g.current&&g.current.classList.add("move")},onMouseUp:()=>{u(!1),g.current&&g.current.classList.remove("move"),c&&c(v[4],v[5])},onMouseMove:e=>{if(m){const t=function(e,t){const n=[...v],a=h.x-e,s=h.y-t;return n[4]=h.dx-a,n[5]=h.dy-s,n}(e.pageX,e.pageY);P(t),p.current&&(p.current.style.transform=`matrix(${v.toString()})`)}}},a.ZP.createElement("div",{ref:p,className:"pan-container"},t))}));var ke=n(2340),we=n(172);const Me=(0,s.c$)(((e,t)=>{let{chatId:n,messageId:a,isAvatar:s}=t;if(s&&n)return{sender:(0,f.YC)(n)?(0,b.dy)(e,n):(0,b.Z1)(e,n)};if(!a||!n)return{};const r=(0,b.hj)(e,n,a);return{message:r,sender:r&&(0,b.Ur)(e,r)}}))((e=>{let{chatId:t,messageId:n,sender:r,isAvatar:l,message:o}=e;const{closeMediaViewer:c,focusMessage:d,toggleChatInfo:m}=(0,s.Sv)(),u=(0,a.I4)((()=>{c(),i.wB?setTimeout((()=>{m(!1,{forceSyncOnIOs:!0}),d({chatId:t,messageId:n})}),350):d({chatId:t,messageId:n})}),[t,d,m,n,c]),h=(0,g.Z)();if(!r||!o&&!l)return;const Z=(0,f.OU)(h,r);return a.ZP.createElement("div",{className:"SenderInfo",onClick:u},(0,f.YC)(r.id)?a.ZP.createElement(we.Z,{key:r.id,size:"medium",user:r}):a.ZP.createElement(we.Z,{key:r.id,size:"medium",chat:r}),a.ZP.createElement("div",{className:"meta"},a.ZP.createElement("div",{className:"title",dir:"auto"},Z&&(0,ke.Z)(Z)),a.ZP.createElement("div",{className:"date",dir:"auto"},l?h("lng_mediaview_profile_photo"):(0,te.ZK)(h,1e3*o.date,!0))))})),Te=e=>{let{children:t,...n}=e;return i.$b?t(!0,!0,1):a.ZP.createElement($.Z,n,t)},Re=(0,a.X$)((e=>{let{isShown:t,onChangeZoom:n}=e;const{transitionClassNames:s}=(0,K.Z)(t),r=(0,C.Z)(t),l=(0,a.sO)(null),[o,c]=(0,a.eJ)(1),d=(0,a.sO)(!1);(0,a.d4)((()=>{t&&!r&&c(1.5)}),[t,r]);const m=(0,a.I4)((()=>{l.current&&c(Math.max(1,o-.5))}),[o]),u=(0,a.I4)((()=>{l.current&&c(Math.min(3,o+.5))}),[o]),h=(0,a.I4)((()=>{d.current=!0}),[]),Z=(0,a.I4)((()=>{d.current=!1,1===o&&n(o,!d.current)}),[n,o]);(0,a.d4)((()=>{n(o,!d.current)}),[o,n]);const v=(0,g.Z)(),P=(0,Y.Z)("ZoomControls",s);return a.ZP.createElement("div",{className:P},a.ZP.createElement(B.Z,{disabled:1===o,size:"tiny",color:"translucent-white",ariaLabel:v("ZoomOut"),className:"zoom-out",ripple:!i.wB,onClick:m},a.ZP.createElement("i",{className:"icon-zoom-out"})),a.ZP.createElement(B.Z,{disabled:3===o,size:"tiny",color:"translucent-white",ariaLabel:"Zoom In",className:"zoom-in",ripple:!i.wB,onClick:u},a.ZP.createElement("i",{className:"icon-zoom-in"})),a.ZP.createElement("div",{className:"seekline"},a.ZP.createElement("div",{className:"seekline-track"},a.ZP.createElement("div",{className:"seekline-played",style:`width: ${50*(o-1)}%`}),a.ZP.createElement("input",{ref:l,min:1,max:3,step:"0.5",value:o,type:"range",className:"seekline-input",onChange:e=>{c(Math.min(3,Math.max(Number(e.target.value),1)))},onMouseDown:h,onMouseUp:Z}))))})),Ae=350,Le=(0,a.X$)((0,s.c$)((e=>{const{chatId:t,threadId:n,messageId:a,avatarOwnerId:s,profilePhotoIndex:r,origin:o}=e.mediaViewer,{animationLevel:i}=e.settings.byKey;if(o===l.bZ.SearchResult){if(!t||!a)return{animationLevel:i};const n=(0,b.hj)(e,t,a);return n?{chatId:t,messageId:a,senderId:n.senderId,origin:o,message:n,animationLevel:i}:{animationLevel:i}}if(s)return{messageId:-1,senderId:s,avatarOwner:(0,b.dy)(e,s)||(0,b.Z1)(e,s),profilePhotoIndex:r||0,animationLevel:i,origin:o};if(!(t&&n&&a))return{animationLevel:i};let c,d,m;if(c=o&&[l.bZ.ScheduledAlbum,l.bZ.ScheduledInline].includes(o)?(0,b.Tm)(e,t,a):(0,b.hj)(e,t,a),!c)return{animationLevel:i};if(d=o&&[l.bZ.ScheduledAlbum,l.bZ.ScheduledInline].includes(o)?(0,b.Fn)(e,t):(0,b.Zw)(e,t),o===l.bZ.Inline||o===l.bZ.Album)m=(0,b.qC)(e,t,n)||(0,b.gb)(e,t,n);else if(o===l.bZ.SharedMedia){const t=(0,b.we)(e),{foundIds:n}=t&&t.resultsByType&&t.resultsByType.media||{};m=n}return{chatId:t,threadId:n,messageId:a,senderId:c.senderId,origin:o,message:c,chatMessages:d,collectionIds:m,animationLevel:i}}))((e=>{let{chatId:t,threadId:n,messageId:c,senderId:d,origin:m,avatarOwner:h,profilePhotoIndex:b,message:M,chatMessages:D,collectionIds:O,animationLevel:U}=e;const{openMediaViewer:_,closeMediaViewer:J,openForwardMenu:X,focusMessage:z,toggleChatInfo:V}=(0,s.Sv)(),Y=Boolean(h||c),H=m===l.bZ.SharedMedia,j=m===l.bZ.SearchResult,q=M?(0,f.O$)(M):void 0,K=M?(0,f.b7)(M):void 0,W=M?(0,f.F$)(M):void 0,Q=M?(0,f.Cg)(M):void 0,ee=!!M&&(0,f.rl)(M),te=!!M&&(0,f.hC)(M),ne=Boolean(K||Q||te),{isGif:ae}=K||Q||{},se=Boolean(!ne&&(q||W||ee)),re=Boolean(h),le=W||Q?c:void 0,oe=(0,a.Ye)((()=>le?[le]:(0,f.N0)(D||{},O||[],H)),[le,D,O,H]),ie=c?oe.indexOf(c):-1,ce=0===ie||-1===ie,de=ie===oe.length-1||-1===ie,me=(0,a.sO)(),ue=(0,C.Z)(d);!Y||ue&&ue===d&&me.current||(me.current=ie);const he=U>=1&&!i.$b?"mv-slide":"none",Ze=2===U?"slide-fade":"none",ve=2===U,[Pe,ge]=(0,a.eJ)(!1),[Ee,Ce]=(0,a.eJ)(!1),[fe,be]=(0,a.eJ)(1),[Ie,ye]=(0,a.eJ)({x:0,y:0});function Se(e){if(re&&void 0!==b){const{photos:t}=h;return t&&t[b]?`photo${t[b].id}?size=c`:(0,f.RT)(h,e?"big":"normal")}return M&&(0,f.Ti)(M,e?"viewerFull":"viewerPreview")}const ke=(0,p.Z)(M&&(H||j)&&(0,f.Ti)(M,"pictogram"),void 0,r.IU.BlobUrl,void 0,ve&&Ae),we=Se(),Le=(0,p.Z)(we,void 0,r.IU.BlobUrl,void 0,ve&&Ae),{mediaData:Fe}=(0,E.Z)(Se(!0),void 0,M&&(0,f.kG)(M,"viewerFull"),void 0,ve&&Ae),Be=q||K?(q||K).blobUrl:void 0;let xe=!ne&&(Be||Fe)||Le||ke;const $e=Z(!xe&&M&&(0,f.DH)(M));xe||m===l.bZ.SearchResult||(xe=$e);const De=M?(0,f.ep)(M):re?`avatar${h.id}-${b}.jpg`:void 0;let Oe;M?ee||te?Oe=(0,f.aE)(M).mediaSize:q||W?Oe=(0,f.bV)(q||W):(K||Q)&&(Oe=(0,f.jC)(K||Q)):Oe=k.vY,(0,a.d4)((()=>{i.wB&&document.body.classList.toggle("is-media-viewer-open",Y)}),[Y]);const Ue=(0,u.Z)();(0,a.d4)((()=>{const e=window.matchMedia(k.L6);return"function"==typeof e.addEventListener?e.addEventListener("change",Ue):"function"==typeof e.addListener&&e.addListener(Ue),()=>{"function"==typeof e.removeEventListener?e.removeEventListener("change",Ue):"function"==typeof e.removeListener&&e.removeListener(Ue)}}),[Ue]);const Ge=(0,C.Z)(M),_e=(0,C.Z)(m),Je=(0,C.Z)(h),Xe=(0,C.Z)(xe),ze=M?(0,w.X)(M):void 0,Ve=Boolean(ze);(0,a.d4)((()=>{ve&&Y&&!Ge&&!Je&&((0,v.YW)(Ae+o.fK),function(e,t,n,a,s,r){const{mediaEl:c}=L(t,r);if(!c)return;const{width:d}=N.Z.get(),{width:m,height:u}=(0,k.fM)(e,s),{width:h,height:Z}=(0,k.jg)(m,u,a.width,a.height),v=(d-h)/2,P=function(e){const t=window.matchMedia(k.L6);let n=4.125;return e&&!i.$b&&(n+=t.matches?.875:2.125),n*k.Gw}(e)+(u-Z)/2;let{top:g,left:p,width:E,height:C}=c.getBoundingClientRect();if([l.bZ.SharedMedia,l.bZ.Album,l.bZ.ScheduledAlbum,l.bZ.SearchResult].includes(t)){const e=function(e,t,n,a,s,r){if(e===t){const l=Math.max(s,r)*(e/t);a-=(l-s)/2,n-=(l-r)/2,s=l,r=l}else if(e>t){const n=s;a-=((s=r*(e/t))-n)/2}else if(t>e){const a=r;n-=((r=s*(t/e))-a)/2}return{top:n,left:a,width:s,height:r}}(h,Z,g,p,E,C);g=e.top,p=e.left,E=e.width,C=e.height}const f=p+E/2-(v+h/2),b=g+C/2-(P+Z/2),I=E/h,y=C/Z,S=T(n||c);A(S,{top:`${P}px`,left:`${v}px`,width:`${h}px`,height:`${Z}px`,transform:`translate3d(${f}px, ${b}px, 0) scale(${I}, ${y})`}),F(S,t),document.body.classList.add("ghost-animating"),requestAnimationFrame((()=>{document.body.appendChild(S),requestAnimationFrame((()=>{S.style.transform="",function(e){e.firstChild.style.objectFit="default",e.classList.remove("rounded-corners","circle")}(S),setTimeout((()=>{requestAnimationFrame((()=>{document.body.contains(S)&&document.body.removeChild(S),document.body.classList.remove("ghost-animating")}))}),200+o.fK)}))}))}(Ve,m,xe,Oe,ne,M)),ve&&!Y&&(Ge||Je)&&((0,v.YW)(Ae+o.fK),function(e,t,n){const{container:a,mediaEl:s}=L(e,n);if(!s)return;const r=document.getElementById("MediaViewer").querySelector(".MediaViewerSlide--active img, .MediaViewerSlide--active video");if(!r||!s)return;const{top:i,left:c,width:d,height:m}=r.getBoundingClientRect(),{top:u,left:h,width:Z,height:v}=s.getBoundingClientRect();let P=u;if(!function(e){if("none"===e.style.display)return!1;const t=e.getBoundingClientRect(),{height:n}=N.Z.get();return t.top<=n&&t.top+t.height>=0}(a)){const{height:e}=N.Z.get();P=uC?E=C:C>E&&(C=E));const b=document.getElementsByClassName("ghost")[0],I=b||T(t||s,e);b||A(I,{top:`${P}px`,left:`${h}px`,width:`${Z}px`,height:`${v}px`,transform:`translate3d(${g}px, ${p}px, 0) scale(${E}, ${C})`}),requestAnimationFrame((()=>{if(b){const{top:e,left:t,width:n,height:a}=b.getBoundingClientRect();A(I,{transition:"none",top:`${P}px`,left:`${h}px`,transformOrigin:"top left",transform:`translate3d(${t-h}px, ${e-P}px, 0) scale(${n/Z}, ${a/v})`,width:`${Z}px`,height:`${v}px`})}document.body.classList.add("ghost-animating"),b||document.body.appendChild(I),requestAnimationFrame((()=>{b&&(b.style.transition=""),I.style.transform="",f&&(I.style.opacity="0"),F(I,e),setTimeout((()=>{requestAnimationFrame((()=>{document.body.contains(I)&&document.body.removeChild(I),document.body.classList.remove("ghost-animating")}))}),200+o.fK)}))}))}(_e,Xe,Ge||void 0))}),[ve,Y,m,_e,M,Ge,Je,xe,Xe,Oe,ne,Ve]),(0,a.d4)((()=>{let e;return Ee?ge(!0):e=window.setTimeout((()=>{ge(!1)}),Ae),()=>{e&&window.clearTimeout(e)}}),[Ee]);const Ye=()=>{Ce(!1),be(1),ye({x:0,y:0})},He=(0,a.I4)((()=>{Ce(!Ee),be(Ee?1:1.5),Ee&&ye({x:0,y:0})}),[Ee]),je=(0,a.I4)((function(e){let t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];be(e),1===e&&t&&Ye()}),[]),qe=(0,a.I4)((()=>{J(),Ye()}),[J]),Ke=(0,a.I4)((()=>{qe(),i.wB?setTimeout((()=>{V(!1,{forceSyncOnIOs:!0}),z({chatId:t,threadId:n,messageId:c})}),Ae):z({chatId:t,threadId:n,messageId:c})}),[qe,t,n,z,V,c]),We=(0,a.I4)((()=>{X({fromChatId:t,messageIds:[c]}),Ye()}),[X,t,c]),Qe=(0,a.I4)((e=>_({chatId:t,threadId:n,messageId:e,origin:m},{forceOnHeavyAnimation:!0})),[t,_,m,n]);(0,a.d4)((()=>Y?(0,y.Z)((()=>{Ee?Ye():qe()})):void 0),[qe,Y,Ee]),(0,a.d4)((()=>{ne&&!ae&&(0,I.Es)()}),[ae,ne]),(0,a.d4)((()=>{if(Y)return N.Z.disableRefresh(),()=>{N.Z.enableRefresh()}}),[Y]);const et=(0,a.I4)(((e,t)=>{if(!e)return;const n=oe.indexOf(e);return-1===t&&n>0||1===t&&n{ye({x:e,y:t})}),[]),st=(0,g.Z)();return(0,P.ZP)(Y,J,_,{chatId:t,threadId:n,messageId:c,origin:m,avatarOwnerId:h&&h.id}),(0,a.d4)((()=>{if(Y)return document.addEventListener("keydown",e,!1),()=>{document.removeEventListener("keydown",e,!1)};function e(e){switch(e.key){case"Left":case"ArrowLeft":Qe(nt);break;case"Right":case"ArrowRight":Qe(tt)}}}),[Y,tt,nt,Qe]),(0,a.d4)((()=>{if(Ee||i.$b)return;const e=document.querySelector(".MediaViewerSlide--active");if(!e)return;const t=ae&&!i.cj;return(0,S.sf)(e,{excludedClosestSelector:".backdrop, .navigation, .media-viewer-head, .Spoiler, .media-viewer-footer"+(t?"":", .VideoPlayer"),onClick:qe})}),[qe,ae,Ee,c]),a.ZP.createElement(x.Z,{id:"MediaViewer",className:Ee?"zoomed":"",isOpen:Y},a.ZP.createElement("div",{className:"media-viewer-head",dir:st.isRtl?"rtl":void 0},i.wB&&a.ZP.createElement(B.Z,{className:"media-viewer-close",round:!0,size:"smaller",color:"translucent-white",ariaLabel:st("Close"),onClick:qe},a.ZP.createElement("i",{className:"icon-close"})),a.ZP.createElement($.Z,{activeKey:me.current,name:Ze},re?a.ZP.createElement(Me,{key:h.id,chatId:h.id,isAvatar:!0}):a.ZP.createElement(Me,{key:c,chatId:t,messageId:c})),a.ZP.createElement(G,{mediaData:Fe||Le,isVideo:ne,isZoomed:Ee,message:M,fileName:De,onCloseMediaViewer:qe,onForward:We,onZoomToggle:He,isAvatar:re})),a.ZP.createElement(Ne,{noWrap:!Pe,canPan:Ee,panDeltaX:Ie.x,panDeltaY:Ie.y,zoomLevel:fe,onPan:at},a.ZP.createElement(Te,{activeKey:ie,name:he},(e=>a.ZP.createElement(pe,{messageId:c,getMessageId:et,chatId:t,isPhoto:se,isGif:ae,threadId:n,avatarOwnerId:h&&h.id,profilePhotoIndex:b,origin:m,isOpen:Y,hasFooter:Ve,isZoomed:Ee,isActive:e,isVideo:ne,animationLevel:U,onClose:qe,selectMessage:Qe,onFooterClick:Ke})))),!ce&&!i.$b&&a.ZP.createElement("button",{type:"button",className:`navigation prev ${ne&&!ae&&"inline"}`,"aria-label":st("AccDescrPrevious"),dir:st.isRtl?"rtl":void 0,onClick:()=>Qe(nt)}),!de&&!i.$b&&a.ZP.createElement("button",{type:"button",className:`navigation next ${ne&&!ae&&"inline"}`,"aria-label":st("Next"),dir:st.isRtl?"rtl":void 0,onClick:()=>Qe(tt)}),a.ZP.createElement(Re,{isShown:Ee,onChangeZoom:je}))})));var Fe=n(8360),Be=n(7407),xe=n(2313),$e=n(2515),De=n(4288),Oe=n(3103),Ue=n(7687),Ge=n(1273),_e=n(1876),Je=n(8799),Xe=n(6058);const ze=(0,a.X$)((e=>{let{isOpen:t,currentUserId:n,chatOrUserIds:s,filterRef:r,filter:l,filterPlaceholder:i,loadMore:c,onFilterChange:d,onSelectChatOrUser:m,onClose:u,onCloseAnimationEnd:h}=e;const Z=(0,g.Z)(),[v,P]=(0,Be.Z)(c,s,Boolean(l)),p=(0,a.I4)((()=>{d("")}),[d]);(0,$e.Z)(r,t,p);const E=(0,a.sO)(null),C=(0,a.I4)((e=>{d(e.currentTarget.value)}),[d]),b=(0,xe.Z)(E,t,(e=>{v&&v.length>0&&m(v[-1===e?0:e])}),".ListItem-button",!0),I=a.ZP.createElement("div",{className:"modal-header",dir:Z.isRtl?"rtl":void 0},a.ZP.createElement(B.Z,{round:!0,color:"translucent",size:"smaller",ariaLabel:Z("Close"),onClick:u},a.ZP.createElement("i",{className:"icon-close"})),a.ZP.createElement(Ue.Z,{ref:r,value:l,onChange:C,onKeyDown:b,placeholder:i})),y=s.indexOf(v[0]);return a.ZP.createElement(Oe.Z,{isOpen:t,className:"ChatOrUserPicker",header:I,onClose:u,onCloseAnimationEnd:h},null!=v&&v.length?a.ZP.createElement(Ge.Z,{ref:E,className:"picker-list custom-scroll",items:v,onLoadMore:P,withAbsolutePositioning:!0,maxHeight:s.length*o.rS,onKeyDown:b},v.map(((e,t)=>a.ZP.createElement(_e.Z,{key:e,className:"chat-item-clickable force-rounded-corners",style:`top: ${(y+t)*o.rS}px;`,onClick:()=>m(e)},(0,f.YC)(e)?a.ZP.createElement(Xe.Z,{status:e===n?Z("SavedMessagesInfo"):void 0,userId:e}):a.ZP.createElement(Je.Z,{chatId:e}))))):v&&!v.length?a.ZP.createElement("p",{className:"no-results"},Z("lng_blocked_list_not_found")):a.ZP.createElement(De.Z,null))})),Ve=(0,a.X$)((0,s.c$)((e=>{var t;const{chats:{byId:n,listIds:a,orderedPinnedIds:s},currentUserId:r}=e;return{chatsById:n,activeListIds:a.active,archivedListIds:a.archived,pinnedIds:s.active,contactIds:null===(t=e.contactList)||void 0===t?void 0:t.userIds,currentUserId:r}}))((e=>{let{chatsById:t,activeListIds:n,archivedListIds:l,pinnedIds:o,contactIds:i,currentUserId:c,isOpen:d}=e;const{setForwardChatId:m,exitForwardMode:u}=(0,s.Sv)(),h=(0,g.Z)(),[Z,v]=(0,a.eJ)(""),P=(0,a.sO)(null),[p,E,C]=(0,ee.Z)();(0,a.d4)((()=>{d&&E()}),[d,E]);const b=(0,a.Ye)((()=>{if(!d)return;let e=o||[];c&&(e=(0,be.Tw)([c,...e]));const a=[...n||[],...l||[]].filter((e=>{const n=t[e];return n&&(0,f.Qm)(n,r._f)})),m=(0,s.Rd)().users.byId;return(0,f.ih)((0,be.Tw)([...(0,f.$l)(h,a,t,Z,c),...i?(0,f.kK)(i,m,Z):[]]),t,void 0,e)}),[n,l,t,i,c,Z,d,h,o]),I=(0,a.I4)((e=>{m({id:e})}),[m]),y=(0,Fe.Z)(b,!0);if(d||p)return a.ZP.createElement(ze,{currentUserId:c,isOpen:d,chatOrUserIds:y,filterRef:P,filterPlaceholder:h("ForwardTo"),filter:Z,onFilterChange:v,onSelectChatOrUser:I,onClose:u,onCloseAnimationEnd:C})})));var Ye=n(1947);function He(e){return e.isSlowMode?"Slowmode enabled":e.hasErrorKey?"Something went wrong":"Telegram"}const je=(0,a.X$)((0,s.c$)((e=>(0,be.ei)(e,["dialogs"])))((e=>{let{dialogs:t}=e;const{dismissDialog:n,acceptInviteConfirmation:r,sendMessage:l,showNotification:o}=(0,s.Sv)(),[i,c,d]=(0,ee.Z)(),m=(0,g.Z)();var u,h,Z;if((0,a.d4)((()=>{t.length>0&&c()}),[t,c]),t.length)return a.ZP.createElement("div",{id:"Dialogs"},Boolean(t.length)&&("hash"in(u=t[t.length-1])?(e=>{const{hash:t,title:s,about:l,participantsCount:c,isChannel:u,photo:h,isRequestNeeded:Z}=e,P=m(u?"Subscribers":"Members",c,"i"),g=m(u?"ChannelJoin":"JoinGroup"),p=m(u?"MemberRequests.RequestToJoinChannel":"MemberRequests.RequestToJoinGroup");return a.ZP.createElement(Oe.Z,{isOpen:i,onClose:d,className:"error",header:v(s,h),onCloseAnimationEnd:n},void 0!==c&&a.ZP.createElement("p",{className:"modal-help"},P),l&&a.ZP.createElement("p",{className:"modal-about"},(0,ke.Z)(l,["br"])),Z&&a.ZP.createElement("p",{className:"modal-help"},m(u?"MemberRequests.RequestToJoinDescriptionChannel":"MemberRequests.RequestToJoinDescriptionGroup")),a.ZP.createElement(B.Z,{isText:!0,className:"confirm-dialog-button",onClick:()=>{r({hash:t}),o({message:m(u?"RequestToJoinChannelSentDescription":"RequestToJoinGroupSentDescription")}),d()}},Z?p:g),a.ZP.createElement(B.Z,{isText:!0,className:"confirm-dialog-button",onClick:d},m("Cancel")))})(u):"phoneNumber"in u?(h=u,a.ZP.createElement(Oe.Z,{isOpen:i,onClose:d,className:"confirm",title:m("ShareYouPhoneNumberTitle"),onCloseAnimationEnd:n},m("AreYouSureShareMyContactInfoBot"),a.ZP.createElement("div",null,a.ZP.createElement(B.Z,{className:"confirm-dialog-button",isText:!0,onClick:()=>{l({contact:(0,be.ei)(h,["firstName","lastName","phoneNumber"])}),d()}},m("OK")),a.ZP.createElement(B.Z,{className:"confirm-dialog-button",isText:!0,onClick:d},m("Cancel"))))):(Z=u,a.ZP.createElement(Oe.Z,{isOpen:i,onClose:d,onCloseAnimationEnd:n,className:"error",title:He(Z)},Z.hasErrorKey?(0,Ye.ZP)(Z):(0,ke.Z)(Z.message,["emoji","br"]),a.ZP.createElement("div",null,a.ZP.createElement(B.Z,{isText:!0,onClick:d},m("OK")))))));function v(e,t){return a.ZP.createElement("div",{className:"modal-header"},t&&a.ZP.createElement(we.Z,{size:"small",photo:t}),a.ZP.createElement("div",{className:"modal-title"},(0,ke.Z)(e)),a.ZP.createElement(B.Z,{round:!0,color:"translucent",size:"smaller",ariaLabel:m("Close"),onClick:d},a.ZP.createElement("i",{className:"icon-close"})))}})));var qe=n(6937);const Ke=(0,a.X$)((0,s.c$)((e=>(0,be.ei)(e,["notifications"])))((e=>{let{notifications:t}=e;const{dismissNotification:n}=(0,s.Sv)();if(t.length)return a.ZP.createElement("div",{id:"Notifications"},t.map((e=>{let{message:t,localId:s}=e;return a.ZP.createElement(qe.Z,{message:(0,ke.Z)(t,["emoji","br","links","simple_markdown"]),onDismiss:()=>n({localId:s})})})))})));var We=n(1396),Qe=n(7551);const et=(0,a.X$)((e=>{let{url:t}=e;const{toggleSafeLinkModal:n}=(0,s.Sv)(),r=(0,g.Z)(),l=(0,a.I4)((()=>{window.open((0,We.X)(t)),n({url:void 0})}),[n,t]),o=(0,a.I4)((()=>{n({url:void 0})}),[n]),i=(0,Fe.Z)(t);return a.ZP.createElement(Qe.Z,{isOpen:Boolean(t),onClose:o,title:r("OpenUrlTitle"),textParts:(0,ke.Z)(r("OpenUrlAlert2",i),["links"]),confirmLabel:r("OpenUrlTitle"),confirmHandler:l})})),tt=2147483647e3,nt=["lng_weekday1","lng_weekday2","lng_weekday3","lng_weekday4","lng_weekday5","lng_weekday6","lng_weekday7"];function at(e,t,n,a,s){const r=new Date(e,t,n),l=a&&(0,te.$Y)(a),o=s&&(0,te.$Y)(s);return!!(o&&r>o)||!!(l&&r{let{selectedAt:t,minAt:n,maxAt:s,isFutureMode:r,isPastMode:l,isOpen:o,withTimePicker:i,submitButtonLabel:c,secondButtonLabel:d,onClose:m,onSubmit:u,onSecondButtonClick:h}=e;const Z=(0,g.Z)(),v=new Date,P=(0,a.Ye)((()=>r&&!n?new Date:new Date(Math.max(n||0,0))),[r,n]),p=(0,a.Ye)((()=>l&&!s?new Date:new Date(Math.min(s||tt,tt))),[l,s]),E=(0,a.Ye)((()=>t?new Date(t):new Date),[t]),f=(0,C.Z)(o),[b,I,y]=(0,ee.Z)(!1),[S,N]=(0,a.eJ)(E),[k,w]=(0,a.eJ)(new Date(S.getFullYear(),S.getMonth(),1)),[M,T]=(0,a.eJ)(st(E.getHours())),[R,A]=(0,a.eJ)(st(E.getMinutes())),L=rt(S.getFullYear(),S.getMonth(),S.getDate()),F=k.getFullYear(),x=k.getMonth();(0,a.d4)((()=>{!f&&o&&(N(E),w(new Date(E.getFullYear(),E.getMonth(),1)),i&&(T(st(E.getHours())),A(st(E.getMinutes()))))}),[E,o,f,i]),(0,a.d4)((()=>{r&&!b&&S.getTime(){l&&!b&&S.getTime()>p.getTime()&&(N(p),T(st(p.getHours())),A(st(p.getMinutes())))}),[r,l,b,p,P,S]),(0,a.d4)((()=>{if(t){const e=new Date(t);N(e),T(st(e.getHours())),A(st(e.getMinutes()))}}),[t]);const $=l&&F>=v.getFullYear()&&x>=v.getMonth()||p&&F>=p.getFullYear()&&x>=p.getMonth(),D=r&&F<=v.getFullYear()&&x<=v.getMonth(),{prevMonthGrid:O,currentMonthGrid:U,nextMonthGrid:G}=(0,a.Ye)((()=>function(e,t){const n=[],a=[],s=[],r=new Date;r.setDate(1),r.setMonth(t),r.setFullYear(e);const l=r.getDay()||7,o=new Date(e,t,0).getDate();for(let e=1;e0)for(let e=1;e<=7-i;e++)s.push(e);return{prevMonthGrid:n,currentMonthGrid:a,nextMonthGrid:s}}(F,x)),[x,F]),_=(0,a.Ye)((()=>c||function(e,t){const n=(0,te.xH)(t,e.code);return n===(0,te.xH)(new Date,e.code)?e("Conversation.ScheduleMessage.SendToday",(0,te.mr)(e,t)):e("Conversation.ScheduleMessage.SendOn",[n,(0,te.mr)(e,t)])}(Z,S)),[Z,S,c]),J=(0,a.I4)((()=>{u(S)}),[u,S]),X=(0,a.I4)((e=>{const t=e.target.value.replace(/[^\d]+/g,"");if(!t.length)return T(""),void(e.target.value="");const n=Math.max(0,Math.min(Number(t),23)),a=new Date(S.getTime());a.setHours(n),N(a);const s=st(n);T(s),e.target.value=s}),[S]),z=(0,a.I4)((e=>{const t=e.target.value.replace(/[^\d]+/g,"");if(!t.length)return A(""),void(e.target.value="");const n=Math.max(0,Math.min(Number(t),59)),a=new Date(S.getTime());a.setMinutes(n),N(a);const s=st(n);A(s),e.target.value=s}),[S]);return a.ZP.createElement(Oe.Z,{isOpen:o,onClose:m,className:"CalendarModal"},a.ZP.createElement("div",{className:"container"},a.ZP.createElement("div",{className:"month-selector"},a.ZP.createElement(B.Z,{round:!0,size:"smaller",color:"translucent",onClick:m},a.ZP.createElement("i",{className:"icon-close"})),a.ZP.createElement("h4",null,Z(`lng_month${x+1}`)," ",F),a.ZP.createElement(B.Z,{round:!0,size:"smaller",color:"translucent",disabled:D,onClick:D?void 0:function(){w((e=>{const t=new Date(e);return t.setMonth(t.getMonth()-1),t}))}},a.ZP.createElement("i",{className:"icon-previous"})),a.ZP.createElement(B.Z,{round:!0,size:"smaller",color:"translucent",disabled:$,onClick:$?void 0:function(){w((e=>{const t=new Date(e);return t.setMonth(t.getMonth()+1),t}))}},a.ZP.createElement("i",{className:"icon-next"})))),a.ZP.createElement("div",{className:"calendar-wrapper"},a.ZP.createElement("div",{className:"calendar-grid"},nt.map((e=>a.ZP.createElement("div",{className:"day-button faded weekday"},a.ZP.createElement("span",null,Z(e))))),O.map((e=>a.ZP.createElement("div",{className:"day-button disabled"},a.ZP.createElement("span",null,e)))),U.map((e=>a.ZP.createElement("div",{role:"button",tabIndex:0,onClick:()=>{return t=e,void N((e=>{const n=new Date(e);return n.setDate(t),n.setMonth(x),n.setFullYear(F),n}));var t},className:(0,Y.Z)("day-button",at(F,x,e,P,p)?"disabled":e?"clickable":"",L===rt(F,x,e)&&"selected")},Boolean(e)&&a.ZP.createElement("span",null,e)))),G.map((e=>a.ZP.createElement("div",{className:"day-button disabled"},a.ZP.createElement("span",null,e)))))),i&&a.ZP.createElement("div",{className:"timepicker"},a.ZP.createElement("input",{type:"text",className:"form-control",inputMode:"decimal",value:M,onChange:X,onFocus:I,onBlur:y}),":",a.ZP.createElement("input",{type:"text",className:"form-control",inputMode:"decimal",value:R,onChange:z,onFocus:I,onBlur:y})),a.ZP.createElement("div",{className:"footer"},a.ZP.createElement(B.Z,{onClick:J},_),d&&a.ZP.createElement(B.Z,{onClick:h,isText:!0},d)))})),ot=(0,a.X$)((0,s.c$)((e=>({selectedAt:e.historyCalendarSelectedAt})))((e=>{let{isOpen:t,selectedAt:n}=e;const{searchMessagesByDate:r,closeHistoryCalendar:l}=(0,s.Sv)(),o=(0,a.I4)((e=>{r({timestamp:e.valueOf()/1e3}),l()}),[l,r]),i=(0,g.Z)();return a.ZP.createElement(lt,{isOpen:t,selectedAt:n,isPastMode:!0,submitButtonLabel:i("JumpToDate"),onClose:l,onSubmit:o})})));var it=n(6272),ct=n(4605);const dt=(0,a.X$)((0,s.c$)(((e,t)=>{let{userId:n}=t;return{user:n?(0,b.dy)(e,n):void 0,userStatus:n?(0,b.ss)(e,n):void 0,serverTimeOffset:e.serverTimeOffset,phoneCodeList:e.countryList.phoneCodes}}))((e=>{var t,n,r;let{isOpen:l,userId:o,isByPhoneNumber:c,user:d,userStatus:m,phoneCodeList:u,serverTimeOffset:h}=e;const{updateContact:Z,importContact:v,closeNewContactDialog:P}=(0,s.Sv)(),p=(0,g.Z)(),E=(0,Fe.Z)(d),C=(0,Fe.Z)(c),b=(0,a.sO)(null),[I,y,S]=(0,ee.Z)(),[N,k]=(0,a.eJ)(null!==(t=null==E?void 0:E.firstName)&&void 0!==t?t:""),[w,M]=(0,a.eJ)(null!==(n=null==E?void 0:E.lastName)&&void 0!==n?n:""),[T,R]=(0,a.eJ)(null!==(r=null==E?void 0:E.phoneNumber)&&void 0!==r?r:""),[A,L]=(0,a.eJ)(!0),F=Boolean(N&&(!c||T));(0,a.d4)((()=>{var e,t,n;l&&(y(),k(null!==(e=null==E?void 0:E.firstName)&&void 0!==e?e:""),M(null!==(t=null==E?void 0:E.lastName)&&void 0!==t?t:""),R(null!==(n=null==E?void 0:E.phoneNumber)&&void 0!==n?n:""),L(!0))}),[l,y,null==E?void 0:E.firstName,null==E?void 0:E.lastName,null==E?void 0:E.phoneNumber]),(0,a.d4)((()=>{!i.$b&&I&&setTimeout((()=>{var e;null===(e=b.current)||void 0===e||e.focus()}),200)}),[I]);const x=(0,a.I4)((e=>{k(e.target.value)}),[]),$=(0,a.I4)((e=>{R((0,it.WZ)(u,e.target.value))}),[u]),D=(0,a.I4)((e=>{M(e.target.value)}),[]),O=(0,a.I4)((()=>{P(),k(""),M(""),R("")}),[P]),U=(0,a.I4)((()=>{c||!o?v({firstName:N,lastName:w,phoneNumber:T}):Z({userId:o,firstName:N,lastName:w,shouldSharePhoneNumber:A})}),[N,v,c,w,T,A,Z,o]);if(l||I)return a.ZP.createElement(Oe.Z,{className:"NewContactModal",title:p("NewContact"),isOpen:l,onClose:O,onCloseAnimationEnd:S},E&&a.ZP.createElement(a.ZP.Fragment,null,a.ZP.createElement("div",{className:"NewContactModal__profile",dir:p.isRtl?"rtl":void 0},a.ZP.createElement(we.Z,{size:"jumbo",user:E,text:`${N} ${w}`}),a.ZP.createElement("div",{className:"NewContactModal__profile-info"},a.ZP.createElement("p",{className:"NewContactModal__phone-number"},null!=E&&E.phoneNumber?(0,it.WZ)(u,E.phoneNumber):p("MobileHidden")),a.ZP.createElement("span",{className:"NewContactModal__user-status",dir:"auto"},(0,f.Tq)(p,E,m,h)))),a.ZP.createElement(Ue.Z,{ref:b,value:N,label:p("FirstName"),tabIndex:0,onChange:x}),a.ZP.createElement(Ue.Z,{value:w,label:p("LastName"),tabIndex:0,onChange:D}),a.ZP.createElement("p",{className:"NewContactModal__help-text"},(0,ke.Z)(p("NewContact.Phone.Hidden.Text",null==E?void 0:E.firstName),["emoji","simple_markdown"])),a.ZP.createElement(ct.Z,{checked:A,tabIndex:0,onCheck:L,label:p("lng_new_contact_share")}),a.ZP.createElement("p",{className:"NewContactModal__help-text"},(0,ke.Z)(p("AddContact.SharedContactExceptionInfo",null==E?void 0:E.firstName)))),C&&a.ZP.createElement("div",{className:"NewContactModal__new-contact",dir:p.isRtl?"rtl":void 0},a.ZP.createElement(we.Z,{size:"jumbo",text:`${N} ${w}`}),a.ZP.createElement("div",{className:"NewContactModal__new-contact-fieldset"},a.ZP.createElement(Ue.Z,{ref:b,value:T,inputMode:"tel",label:p("lng_contact_phone"),tabIndex:0,onChange:$}),a.ZP.createElement(Ue.Z,{value:N,label:p("FirstName"),tabIndex:0,onChange:x}),a.ZP.createElement(Ue.Z,{value:w,label:p("LastName"),tabIndex:0,onChange:D}))),a.ZP.createElement("div",{className:"dialog-buttons"},a.ZP.createElement(B.Z,{isText:!0,className:"confirm-dialog-button",onClick:O},p("Cancel")),a.ZP.createElement(B.Z,{isText:!0,className:"confirm-dialog-button",disabled:!F,onClick:U},p("Done"))))}))),mt=(0,a.X$)((0,s.c$)(((e,t)=>{let{message:n,isSchedule:a}=t;const{threadId:s}=(0,b.Bt)(e)||{},{canDeleteForAll:r}=s&&(0,b._k)(e,n,s)||{},l=(0,b.Z1)(e,n.chatId);return{canDeleteForAll:!a&&r,contactName:l&&(0,f.YC)(l.id)?(0,f.Vl)((0,b.dy)(e,(0,f.zX)(l))):void 0,willDeleteForCurrentUserOnly:l&&(0,f.G9)(l)&&!r,willDeleteForAll:l&&(0,f.ZV)(l)}}))((e=>{let{isOpen:t,isSchedule:n,message:r,album:l,canDeleteForAll:o,contactName:i,willDeleteForCurrentUserOnly:c,willDeleteForAll:d,onClose:m}=e;const{deleteMessages:u,deleteScheduledMessages:h}=(0,s.Sv)(),Z=(0,a.I4)((()=>{const e=null!=l&&l.messages?l.messages.map((e=>{let{id:t}=e;return t})):[r.id];u({messageIds:e,shouldDeleteForAll:!0}),m()}),[u,r.id,m,l]),v=(0,a.I4)((()=>{const e=null!=l&&l.messages?l.messages.map((e=>{let{id:t}=e;return t})):[r.id];n?h({messageIds:e}):u({messageIds:e,shouldDeleteForAll:!1}),m()}),[l,r.id,n,m,h,u]),P=(0,g.Z)();return a.ZP.createElement(Oe.Z,{isOpen:t,onClose:m,onEnter:t&&!o?v:void 0,className:"delete",title:P("DeleteSingleMessagesTitle")},a.ZP.createElement("p",null,P("AreYouSureDeleteSingleMessage")),c&&a.ZP.createElement("p",null,P("lng_delete_for_me_chat_hint",1,"i")),d&&a.ZP.createElement("p",null,P("lng_delete_for_everyone_hint",1,"i")),o&&a.ZP.createElement(B.Z,{color:"danger",className:"confirm-dialog-button",isText:!0,onClick:Z},i&&(0,ke.Z)(P("Conversation.DeleteMessagesFor",i)),!i&&P("Conversation.DeleteMessagesForEveryone")),a.ZP.createElement(B.Z,{color:"danger",className:"confirm-dialog-button",isText:!0,onClick:v},P(o?"ChatList.DeleteForCurrentUser":"Delete")),a.ZP.createElement(B.Z,{className:"confirm-dialog-button",isText:!0,onClick:m},P("Cancel")))}))),ut=(0,a.X$)((0,s.c$)(((e,t)=>{let{chatId:n}=t;const a=(0,f.YC)(n),s=(0,b.FM)(e,n),r=(0,b.Z1)(e,n),l=Boolean(r)&&(0,f.eA)(r),o=Boolean(r)&&(0,f.G9)(r),i=Boolean(r)&&(0,f.ZV)(r);return{isPrivateChat:a,isChatWithSelf:s,isChannel:l,isGroup:o,isSuperGroup:i,canPinForAll:a&&!s||i||o,contactName:r&&(0,f.YC)(r.id)?(0,f.Vl)((0,b.dy)(e,(0,f.zX)(r))):void 0}}))((e=>{let{isOpen:t,messageId:n,chatId:r,isChannel:l,isGroup:o,isSuperGroup:i,canPinForAll:c,contactName:d,onClose:m}=e;const{pinMessage:u}=(0,s.Sv)(),h=(0,a.I4)((()=>{u({chatId:r,messageId:n,isUnpin:!1}),m()}),[u,r,n,m]),Z=(0,a.I4)((()=>{u({chatId:r,messageId:n,isUnpin:!1,isOneSide:!0,isSilent:!0}),m()}),[r,n,m,u]),v=(0,g.Z)();return a.ZP.createElement(Oe.Z,{isOpen:t,onClose:m,className:"pin",title:v("PinMessageAlertTitle")},a.ZP.createElement("p",null,v(l?"PinMessageAlertChannel":o||i?"PinMessageAlert":"PinMessageAlertChat")),a.ZP.createElement(B.Z,{className:"confirm-dialog-button",isText:!0,onClick:Z},v("DialogPin")),c&&a.ZP.createElement(B.Z,{className:"confirm-dialog-button",isText:!0,onClick:h},d?(0,ke.Z)(v("Conversation.PinMessagesFor",d)):v("Conversation.PinMessageAlert.PinAndNotifyMembers")),a.ZP.createElement(B.Z,{className:"confirm-dialog-button",isText:!0,onClick:m},v("Cancel")))}))),ht=(0,a.X$)((e=>{let{isOpen:t,pinnedMessagesCount:n=0,onClose:s,onUnpin:r}=e;const l=(0,g.Z)();return a.ZP.createElement(Oe.Z,{isOpen:t,onClose:s,className:"unpin-all",title:l("Chat.PanelUnpinAllMessages")},a.ZP.createElement("p",null,l("Chat.UnpinAllMessagesConfirmation",n,"i")),a.ZP.createElement(B.Z,{className:"confirm-dialog-button",isText:!0,onClick:r},l("DialogUnpin")),a.ZP.createElement(B.Z,{className:"confirm-dialog-button",isText:!0,onClick:s},l("Cancel")))}));var Zt=n(517),vt=n(7529);const Pt=(0,a.X$)((0,s.c$)(((e,t)=>{let{isSchedule:n}=t;const{messageIds:a}=e.selectedMessages||{},{canDeleteForAll:s}=(0,b.xl)(e),r=(0,b.jr)(e);return{selectedMessageIds:a,canDeleteForAll:!n&&s,contactName:r&&(0,f.YC)(r.id)?(0,f.Vl)((0,b.dy)(e,(0,f.zX)(r))):void 0,willDeleteForCurrentUserOnly:r&&(0,f.G9)(r)&&!s,willDeleteForAll:r&&(0,f.ZV)(r)}}))((e=>{let{isOpen:t,isSchedule:n,selectedMessageIds:r,canDeleteForAll:l,contactName:o,willDeleteForCurrentUserOnly:i,willDeleteForAll:c,onClose:d}=e;const{deleteMessages:m,deleteScheduledMessages:u,exitMessageSelectMode:h}=(0,s.Sv)(),Z=(0,C.Z)(t),v=(0,a.I4)((()=>{d(),m({messageIds:r,shouldDeleteForAll:!0})}),[m,r,d]),P=(0,a.I4)((()=>{n?u({messageIds:r}):m({messageIds:r,shouldDeleteForAll:!1}),d()}),[n,d,u,r,m]),p=(0,g.Z)();if((0,a.d4)((()=>{!t&&Z&&h()}),[h,t,Z]),r)return a.ZP.createElement(Oe.Z,{isOpen:t,onClose:d,onEnter:l?void 0:P,className:"delete",title:p("Conversation.DeleteManyMessages")},a.ZP.createElement("p",null,p("AreYouSureDeleteFewMessages")),i&&a.ZP.createElement("p",null,"This will delete them just for you, not for other participants in the chat."),c&&a.ZP.createElement("p",null,"This will delete them for everyone in this chat."),l&&a.ZP.createElement(B.Z,{color:"danger",className:"confirm-dialog-button",isText:!0,onClick:v},o?(0,ke.Z)(p("ChatList.DeleteForEveryone",o)):p("Conversation.DeleteMessagesForEveryone")),a.ZP.createElement(B.Z,{color:"danger",className:"confirm-dialog-button",isText:!0,onClick:P},p(l?"ChatList.DeleteForCurrentUser":"Delete")),a.ZP.createElement(B.Z,{className:"confirm-dialog-button",isText:!0,onClick:d},p("Cancel")))})));var gt=n(4434);const pt=(0,a.X$)((e=>{let{isOpen:t,messageIds:n,onClose:r}=e;const{reportMessages:l,exitMessageSelectMode:o}=(0,s.Sv)(),[i,c]=(0,a.eJ)("spam"),[d,m]=(0,a.eJ)(""),u=(0,a.I4)((()=>{l({messageIds:n,reason:i,description:d}),o(),r()}),[d,o,n,r,l,i]),h=(0,a.I4)((e=>{c(e)}),[]),Z=(0,a.I4)((e=>{m(e.target.value)}),[]),v=(0,g.Z)(),P=[{value:"spam",label:v("lng_report_reason_spam")},{value:"violence",label:v("lng_report_reason_violence")},{value:"pornography",label:v("lng_report_reason_pornography")},{value:"childAbuse",label:v("lng_report_reason_child_abuse")},{value:"copyright",label:v("ReportPeer.ReasonCopyright")},{value:"illegalDrugs",label:"Illegal Drugs"},{value:"personalDetails",label:"Personal Details"},{value:"other",label:v("lng_report_reason_other")}];if(n)return a.ZP.createElement(Oe.Z,{isOpen:t,onClose:r,onEnter:t?u:void 0,className:"report",title:v("lng_report_message_title")},a.ZP.createElement(gt.Z,{name:"report-message",options:P,onChange:h,selected:i}),a.ZP.createElement(Ue.Z,{label:v("lng_report_reason_description"),value:d,onChange:Z}),a.ZP.createElement(B.Z,{color:"danger",className:"confirm-dialog-button",isText:!0,onClick:u},v("lng_report_button")),a.ZP.createElement(B.Z,{className:"confirm-dialog-button",isText:!0,onClick:r},v("Cancel")))})),Et=(0,a.X$)((0,s.c$)((e=>{const{type:t,chatId:n}=(0,b.Bt)(e)||{},{canDelete:a}=(0,b.xl)(e),s=(0,b.nB)(e),r=(0,b.Nu)(e),{messageIds:l}=e.selectedMessages||{},o=!!n&&(0,b.ku)(e,n,l);return{isSchedule:"scheduled"===t,selectedMessagesCount:(0,b.D7)(e),canDeleteMessages:a,canReportMessages:s,canDownloadMessages:r,selectedMessageIds:l,hasProtectedMessage:o}}))((e=>{let{canPost:t,isActive:n,messageListType:r,isSchedule:l,selectedMessagesCount:o,canDeleteMessages:c,canReportMessages:d,canDownloadMessages:m,hasProtectedMessage:u,selectedMessageIds:h}=e;const{exitMessageSelectMode:Z,openForwardMenuForSelectedMessages:v,downloadSelectedMessages:P,copySelectedMessages:p}=(0,s.Sv)(),[E,f,b]=(0,ee.Z)(),[I,y,S]=(0,ee.Z)();((e,t)=>{(0,a.d4)((()=>{function n(e){(i.jm&&e.metaKey||!i.jm&&e.ctrlKey)&&"c"===(0,vt.Z)(e)&&(e.preventDefault(),t())}return e&&document.addEventListener("keydown",n,!1),()=>{document.removeEventListener("keydown",n,!1)}}),[t,e])})(Boolean(n),p),(0,a.d4)((()=>!n||E||I?void 0:(0,Zt.Z)({onBackspace:f,onDelete:f,onEsc:Z})),[n,E,I,f,Z]);const N=(0,a.I4)((()=>{p(),Z()}),[p,Z]),k=(0,a.I4)((()=>{P(),Z()}),[P,Z]),w=(0,C.Z)(o||void 0,!0),M=n?o:w,T=(0,g.Z)(),R=T("VoiceOver.Chat.MessagesSelected",M,"i"),A=(0,Y.Z)("MessageSelectToolbar",t&&"with-composer",n&&"shown"),L=(e,t,n,s,r)=>a.ZP.createElement("div",{role:"button",tabIndex:0,className:(0,Y.Z)("item",s&&"disabled",r&&"destructive"),onClick:s?void 0:n,title:t},a.ZP.createElement("i",{className:`icon-${e}`}));return a.ZP.createElement("div",{className:A},a.ZP.createElement("div",{className:"MessageSelectToolbar-inner"},a.ZP.createElement(B.Z,{color:"translucent",round:!0,onClick:Z,ariaLabel:"Exit select mode"},a.ZP.createElement("i",{className:"icon-close"})),a.ZP.createElement("span",{className:"MessageSelectToolbar-count",title:R},R),Boolean(o)&&a.ZP.createElement("div",{className:"MessageSelectToolbar-actions"},"scheduled"!==r&&L("forward",T("Chat.ForwardActionHeader"),v,u),d&&L("flag",T("Conversation.ReportMessages"),y),m&&L("download",T("lng_media_download"),k,u),L("copy",T("lng_context_copy_selected_items"),N,u),L("delete",T("EditAdminGroupDeleteMessages"),f,!c,!0))),a.ZP.createElement(Pt,{isOpen:E,isSchedule:l,onClose:b}),a.ZP.createElement(pt,{isOpen:I,onClose:S,messageIds:h}))}))),Ct=(0,a.X$)((0,s.c$)((e=>{var t;const{chatId:n,messageId:a}=e.seenByModal||{};return n&&a?{memberIds:null===(t=(0,b.hj)(e,n,a))||void 0===t?void 0:t.seenByUserIds}:{}}))((e=>{let{isOpen:t,memberIds:n}=e;const{openChat:r,closeSeenByModal:l}=(0,s.Sv)(),o=(0,g.Z)(),i=(0,a.I4)((e=>{l(),setTimeout((()=>{r({id:e})}),100)}),[l,r]),c=(0,Fe.Z)(n,!0);return a.ZP.createElement(Oe.Z,{isOpen:t,onClose:l,className:"narrow",title:`Seen by ${null==n?void 0:n.length} users`},a.ZP.createElement("div",{dir:o.isRtl?"rtl":void 0},c&&c.map((e=>a.ZP.createElement(_e.Z,{key:e,className:"chat-item-clickable scroll-item small-icon",onClick:()=>i(e)},a.ZP.createElement(Xe.Z,{userId:e,noStatusOrTyping:!0}))))),a.ZP.createElement(B.Z,{className:"confirm-dialog-button",isText:!0,onClick:l},o("Close")))})));var ft=n(2155),bt=n(8198);const It=(0,a.X$)((0,s.c$)((e=>{const{chatId:t,messageId:n}=e.reactorModal||{},a=t&&n?(0,b.hj)(e,t,n):void 0;return{chatId:t,messageId:n,reactions:null==a?void 0:a.reactions,reactors:null==a?void 0:a.reactors,seenByUserIds:null==a?void 0:a.seenByUserIds}}))((e=>{let{isOpen:t,reactors:n,reactions:r,chatId:o,messageId:i,seenByUserIds:c}=e;const{loadReactors:d,closeReactorListModal:m,openChat:u}=(0,s.Sv)(),h=(0,s.Rd)().users.byId,Z=(0,g.Z)(),[v,P,p]=(0,ee.Z)(!1),[E,C]=(0,a.eJ)(void 0),b=n&&r&&n.count>=10&&r.results.length>1,I=(0,a.sO)();(0,a.d4)((()=>{v&&!t&&(p(),C(void 0))}),[v,t,p]);const y=(0,a.I4)((()=>{I.current&&u({id:I.current}),m()}),[m,u]),S=(0,a.I4)((()=>{P()}),[P]),N=(0,a.I4)((e=>{I.current=e,S()}),[S]),k=(0,a.I4)((()=>{d({chatId:o,messageId:i})}),[o,d,i]),w=(0,a.Ye)((()=>null!=n&&n.reactions?(0,be.Tw)(n.reactions.map((e=>e.reaction))):[]),[null==n?void 0:n.reactions]),M=(0,a.Ye)((()=>E?null==n?void 0:n.reactions.filter((e=>e.reaction===E)).map((e=>e.userId)):(0,be.Tw)((null==n?void 0:n.reactions.map((e=>e.userId)).concat(c||[]))||[])),[E,null==n?void 0:n.reactions,c]),[T,R]=(0,Be.Z)(k,M,n&&void 0===n.nextOffset);return(0,a.d4)((()=>{null==R||R({direction:l.Uq.Backwards})}),[R]),a.ZP.createElement(Oe.Z,{isOpen:t&&!v,onClose:S,className:"ReactorListModal narrow",title:Z("Reactions"),onCloseAnimationEnd:y},b&&a.ZP.createElement("div",{className:"Reactions"},a.ZP.createElement(B.Z,{className:(0,Y.Z)(!E&&"chosen"),size:"tiny",ripple:!0,onClick:()=>C(void 0)},a.ZP.createElement("i",{className:"icon-reaction-filled"}),(null==n?void 0:n.count)&&(0,ft.bi)(n.count)),w.map((e=>{var t;const n=null==r||null===(t=r.results.find((t=>t.reaction===e)))||void 0===t?void 0:t.count;return a.ZP.createElement(B.Z,{className:(0,Y.Z)(E===e&&"chosen"),size:"tiny",ripple:!0,onClick:()=>C(e)},a.ZP.createElement(bt.Z,{reaction:e,className:"reaction-filter-emoji"}),n&&(0,ft.bi)(n))}))),a.ZP.createElement("div",{dir:Z.isRtl?"rtl":void 0},null!=T&&T.length?a.ZP.createElement(Ge.Z,{className:"reactor-list custom-scroll",items:T,onLoadMore:R},null==T?void 0:T.map((e=>{var t;const s=h[e],r=(0,f.Js)(s),l=null==n||null===(t=n.reactions.find((t=>t.userId===e)))||void 0===t?void 0:t.reaction;return a.ZP.createElement(_e.Z,{key:e,className:"chat-item-clickable reactors-list-item",onClick:()=>N(e)},a.ZP.createElement(we.Z,{user:s,size:"medium"}),a.ZP.createElement("div",{className:"title"},a.ZP.createElement("h3",{dir:"auto"},r&&(0,ke.Z)(r))),l&&a.ZP.createElement(bt.Z,{className:"reactors-list-emoji",reaction:l}))}))):a.ZP.createElement(De.Z,null)),a.ZP.createElement(B.Z,{className:"confirm-dialog-button",isText:!0,onClick:m},Z("Close")))})));var yt=n(7324),St=n(7799);const Nt=(0,a.X$)((0,s.c$)(((e,t)=>{let{activeEmojiInteraction:n}=t;const a=void 0!==n.animatedEffect&&(0,b.tH)(e,n.animatedEffect);return{effectAnimationId:a?a.id:void 0,localEffectAnimation:!a&&n.animatedEffect&&Object.keys(yt.x).includes(n.animatedEffect)?n.animatedEffect:void 0}}))((e=>{let{effectAnimationId:t,localEffectAnimation:n,activeEmojiInteraction:l}=e;const{stopActiveEmojiInteraction:o}=(0,s.Sv)(),[c,d]=(0,ee.Z)(!1),[m,u]=(0,ee.Z)(!1),h=(0,a.sO)(),Z=(0,a.I4)((()=>{d(),h.current&&clearTimeout(h.current),setTimeout((()=>{o({id:l.id})}),250)}),[l.id,d,o]),P=(0,a.I4)((e=>{var t;null!==(t=e.target)&&void 0!==t&&t.closest(".AnimatedEmoji")||Z()}),[Z]);(0,a.d4)((()=>(document.addEventListener("touchstart",P),document.addEventListener("touchmove",P),document.addEventListener("mousedown",P),document.addEventListener("wheel",P),()=>{document.removeEventListener("touchstart",P),document.removeEventListener("touchmove",P),document.removeEventListener("mousedown",P),document.removeEventListener("wheel",P)})),[P]),(0,a.bt)((()=>{const e=(0,v.YW)();h.current=setTimeout((()=>{Z(),e()}),3e3)}),[Z]);const g=(0,p.Z)(`sticker${t}`,!t,r.IU.Lottie),[E,C]=(0,a.eJ)();if((0,a.d4)((()=>{n&&(0,yt.Z)(n).then((e=>{C(e)}))}),[n]),!l.startSize)return;const f=(l.startSize||0)/240;return a.ZP.createElement("div",{className:(0,Y.Z)("EmojiInteractionAnimation",c&&"hiding",m&&"playing",l.isReversed&&"reversed"),style:`--scale: ${f}; --start-x: ${l.x}px; --start-y: ${l.y}px;`},a.ZP.createElement(St.Z,{key:`effect_${t}`,id:`effect_${t}`,size:240,animationData:E||g,play:m,quality:i.wZ?.5:void 0,forceOnHeavyAnimation:!0,noLoop:!0,onLoad:u}))})));var kt=n(3133),wt=n(735),Mt=n(1470);const Tt=e=>{const t=(0,a.sO)(null),n=(0,a.I4)((n=>{"Enter"===n.key&&t.current===document.activeElement&&e()}),[e]);return(0,a.d4)((()=>(window.addEventListener("keydown",n,!1),()=>window.removeEventListener("keydown",n,!1))),[n]),t};var Rt=n(329),At=n(742);const Lt=(0,a.X$)((0,s.c$)(((e,t)=>{var n;let{chatId:a}=t;const s=(0,b.Z1)(e,a),r=s&&(0,f.zX)(s);return{chat:s,user:r?(0,b.dy)(e,r):void 0,isPinned:(0,b.ep)(e,a),isMuted:s?(0,f.i4)(s,(0,b.dZ)(e),(0,b.NJ)(e)):void 0,canChangeFolder:Boolean(null===(n=e.chatFolders.orderedIds)||void 0===n?void 0:n.length)}}))((e=>{let{chatId:t,withUsername:n,onClick:s,chat:r,user:l,isPinned:o,isMuted:i,canChangeFolder:c}=e;const[d,m,u]=(0,ee.Z)(),[h,Z,v]=(0,ee.Z)(),P=(0,Mt.Z)({chat:r,user:l,isPinned:o,isMuted:i,canChangeFolder:c,handleDelete:m,handleChatFolderChange:Z},!0),g=(0,a.I4)((()=>{s(t)}),[t,s]),p=Tt(g);if(r)return a.ZP.createElement(_e.Z,{className:"chat-item-clickable search-result",onClick:g,contextActions:P,buttonRef:p},(0,f.YC)(t)?a.ZP.createElement(Xe.Z,{userId:t,withUsername:n,avatarSize:"large"}):a.ZP.createElement(Je.Z,{chatId:t,withUsername:n,avatarSize:"large"}),a.ZP.createElement(Rt.Z,{isOpen:d,onClose:u,chat:r}),a.ZP.createElement(At.Z,{isOpen:h,onClose:v,chatId:t}))})));var Ft=n(8781);const Bt=(0,z.P2)((e=>e()),6e4,!0),xt=(0,a.X$)((0,s.c$)((e=>{const{userIds:t}=e.topPeers,n=e.users.byId,{recentlyFoundChatIds:a}=e.globalSearch;return{topUserIds:t,usersById:n,recentlyFoundChatIds:a}}))((e=>{let{topUserIds:t,usersById:n,recentlyFoundChatIds:r,onReset:l}=e;const{loadTopUsers:o,loadContactList:i,openChat:c,addRecentlyFoundChatId:d,clearRecentlyFoundChats:m}=(0,s.Sv)(),u=(0,a.sO)(null);(0,a.d4)((()=>{Bt((()=>{o(),i()}))}),[o,i]),(0,Ft.Z)(u.current,!t);const h=(0,a.I4)((e=>{c({id:e,shouldReplaceHistory:!0}),l(),setTimeout((()=>{d({id:e})}),250)}),[c,d,l]),Z=(0,g.Z)();return a.ZP.createElement("div",{className:"RecentContacts custom-scroll"},t&&a.ZP.createElement("div",{className:"top-peers-section",dir:Z.isRtl?"rtl":void 0},a.ZP.createElement("div",{ref:u,className:"top-peers no-selection"},t.map((e=>a.ZP.createElement("div",{className:"top-peer-item",onClick:()=>h(e),dir:Z.isRtl?"rtl":void 0},a.ZP.createElement(we.Z,{user:n[e]}),a.ZP.createElement("div",{className:"top-peer-name"},(0,ke.Z)((0,f.Vl)(n[e])||" "))))))),r&&a.ZP.createElement("div",{className:"search-section pt-1"},a.ZP.createElement("h3",{className:"section-heading mt-0 recent-chats-header",dir:Z.isRtl?"rtl":void 0},Z("Recent"),a.ZP.createElement(B.Z,{round:!0,size:"smaller",color:"translucent",ariaLabel:"Clear recent chats",onClick:m,isRtl:Z.isRtl},a.ZP.createElement("i",{className:"icon-close"}))),r.map((e=>a.ZP.createElement(Lt,{chatId:e,onClick:h})))))})));var $t=n(9411),Dt=n(8033);const Ot=(0,a.X$)((0,s.c$)(((e,t)=>{let{chatId:n}=t;const a=(0,b.Z1)(e,n);if(!a)return{};const s=(0,f.zX)(a);return{chat:a,lastSyncTime:e.lastSyncTime,...s&&{privateChatUser:(0,b.dy)(e,s)}}}))((e=>{let{message:t,searchQuery:n,chatId:r,chat:l,privateChatUser:o,lastSyncTime:c}=e;const{focusMessage:d}=(0,s.Sv)(),m=(0,f.DH)(t),u=(0,p.Z)((0,f.Ti)(t,"micro")),h=Boolean((0,f.Y5)(t)),Z=(0,a.I4)((()=>{d({chatId:r,messageId:t.id})}),[r,d,t.id]),v=(0,g.Z)(),P=Tt(Z);if(l)return a.ZP.createElement(_e.Z,{className:"ChatMessage chat-item-clickable",ripple:!i.wB,onClick:Z,buttonRef:P},a.ZP.createElement(we.Z,{chat:l,user:o,isSavedMessages:null==o?void 0:o.isSelf,lastSyncTime:c}),a.ZP.createElement("div",{className:"info"},a.ZP.createElement("div",{className:"info-row"},a.ZP.createElement("div",{className:"title"},a.ZP.createElement("h3",{dir:"auto"},(0,ke.Z)((0,f.U)(v,l,o))),l.isVerified&&a.ZP.createElement($t.Z,null)),a.ZP.createElement("div",{className:"message-date"},a.ZP.createElement(Dt.Z,{className:"date"},(0,te.VX)(v,1e3*t.date)))),a.ZP.createElement("div",{className:"subtitle"},a.ZP.createElement("div",{className:"message",dir:"auto"},function(e,t,n,s,r){return n?a.ZP.createElement("span",{className:"media-preview"},a.ZP.createElement("img",{src:n,alt:"",className:(0,Y.Z)("media-preview--image",r&&"round")}),(0,f.b7)(t)&&a.ZP.createElement("i",{className:"icon-play"}),(0,w.e)(e,t,!0,s)):(0,w.e)(e,t,void 0,s)}(v,t,u||m,n,h)))))}))),Ut=(0,a.X$)((e=>{let{searchDate:t,onSelect:n}=e;const s=(0,a.Ye)((()=>function(e){if(e.match(/^\d{2,4}-\d{2}-\d{2}$/g)){const t=new Date(e);return[{date:t,text:(0,te.xH)(t)}]}const t=[],n=new Date,a=n.getFullYear(),s=n.getTime()>new Date(`${a}-${e}`).getTime()?a:a-1;for(let n=0;n<8;n++){const a=new Date(`${s-n}-${e}`);t.push({date:a,text:(0,te.xH)(a)})}return t}(t)),[t]);return a.ZP.createElement("section",{className:"DateSuggest custom-scroll custom-scroll-x"},s.map((e=>{let{date:t,text:s}=e;return a.ZP.createElement("div",{onClick:()=>n(t),className:"date-item",key:s},a.ZP.createElement("i",{className:"icon-calendar"}),a.ZP.createElement("span",null,s))})))}));var Gt=n(7262),_t=n(9187);const Jt=(0,z.P2)((e=>e()),500,!0),Xt=(0,a.X$)((0,s.c$)((e=>{var t;const{byId:n}=e.chats,{userIds:a}=e.contactList||{};if(!a)return{chatsById:n};const{currentUserId:s,messages:r,lastSyncTime:l}=e,{fetchingStatus:o,globalResults:i,localResults:c,resultsByType:d}=e.globalSearch,{chatIds:m,userIds:u}=i||{},{chatIds:h,userIds:Z}=c||{},{byChatId:v}=r;return{currentUserId:s,localContactIds:a,localChatIds:h,localUserIds:Z,globalChatIds:m,globalUserIds:u,foundIds:null==d||null===(t=d.text)||void 0===t?void 0:t.foundIds,globalMessagesByChatId:v,chatsById:n,fetchingStatus:o,lastSyncTime:l}}))((e=>{let{searchQuery:t,searchDate:n,dateSearchQuery:r,currentUserId:o,localContactIds:c,localChatIds:d,localUserIds:m,globalChatIds:u,globalUserIds:h,foundIds:Z,globalMessagesByChatId:v,chatsById:P,fetchingStatus:p,lastSyncTime:E,onReset:C,onSearchDateSelect:b}=e;const{openChat:I,addRecentlyFoundChatId:y,searchMessagesGlobal:S,setGlobalSearchChatId:N}=(0,s.Sv)(),k=(0,g.Z)(),[M,T]=(0,a.eJ)(!1),[R,A]=(0,a.eJ)(!1),L=(0,a.I4)((e=>{let{direction:n}=e;E&&n===l.Uq.Backwards&&Jt((()=>{S({type:"text",query:t})}))}),[E,S,t]),F=(0,a.I4)((e=>{I({id:e,shouldReplaceHistory:!0}),e!==o&&y({id:e}),i.wB||C()}),[o,I,y,C]),B=(0,a.I4)((e=>{N({id:e})}),[N]),x=(0,a.Ye)((()=>{if(!t||t.startsWith("@")&&t.length<2)return wt.D;const e=[...o?[o]:[],...c||[]],n=(0,s.Rd)().users.byId,a=(0,f.kK)(e,n,t,o,k("SavedMessages"));return[...(0,f.ih)((0,be.Tw)([...a||[],...d||[],...m||[]]),P,void 0,o?[o]:void 0)]}),[t,o,c,k,d,m,P]),$=(0,a.Ye)((()=>!t||t.length<4||!u||!h?wt.D:(0,f.ih)((0,be.Tw)([...u,...h]),P,!0)),[P,u,h,t]),D=(0,a.Ye)((()=>(t||n)&&Z&&0!==Z.length?Z.map((e=>{var t;const[n,a]=e.split("_");return null==v||null===(t=v[n])||void 0===t?void 0:t.byId[Number(a)]})).filter(Boolean).sort(((e,t)=>t.date-e.date)):wt.D),[Z,v,t,n]),O=(0,a.I4)((()=>{T(!M)}),[M]),U=(0,a.I4)((()=>{A(!R)}),[R]),G=p&&!p.chats&&!p.messages&&!x.length&&!$.length&&!D.length;return t||n?a.ZP.createElement(Ge.Z,{className:"LeftSearch custom-scroll",items:D,onLoadMore:L,noScrollRestoreOnTop:!0,noFastList:!0},r&&a.ZP.createElement("div",{className:"chat-selection no-selection no-scrollbar"},a.ZP.createElement(Ut,{searchDate:r,onSelect:b})),G&&a.ZP.createElement(Gt.Z,{text:k("ChatList.Search.NoResults"),description:k("ChatList.Search.NoResultsDescription")}),Boolean(x.length)&&a.ZP.createElement("div",{className:"chat-selection no-selection no-scrollbar",dir:k.isRtl?"rtl":void 0},x.map((e=>a.ZP.createElement(_t.Z,{chatOrUserId:e,onClick:B,clickArg:e})))),Boolean(x.length)&&a.ZP.createElement("div",{className:"search-section"},a.ZP.createElement("h3",{className:"section-heading",dir:k.isRtl?"auto":void 0},x.length>5&&a.ZP.createElement(Dt.Z,{onClick:O},k(M?"ChatList.Search.ShowLess":"ChatList.Search.ShowMore")),k("DialogList.SearchSectionDialogs")),x.map(((e,t)=>{if(M||!(t>=5))return a.ZP.createElement(Lt,{chatId:e,onClick:F})}))),Boolean($.length)&&a.ZP.createElement("div",{className:"search-section"},a.ZP.createElement("h3",{className:"section-heading",dir:k.isRtl?"auto":void 0},$.length>5&&a.ZP.createElement(Dt.Z,{onClick:U},k(R?"ChatList.Search.ShowLess":"ChatList.Search.ShowMore")),k("DialogList.SearchSectionGlobal")),$.map(((e,t)=>{if(R||!(t>=5))return a.ZP.createElement(Lt,{chatId:e,withUsername:!0,onClick:F})}))),Boolean(D.length)&&a.ZP.createElement("div",{className:"search-section"},a.ZP.createElement("h3",{className:"section-heading",dir:k.isRtl?"auto":void 0},k("SearchMessages")),D.map((function(e){const n=(0,w.e)(k,e),s=P[e.chatId];if(n&&s)return a.ZP.createElement(Ot,{chatId:e.chatId,message:e,searchQuery:t})})))):a.ZP.createElement(xt,{onReset:C})}))),zt=(0,z.P2)((e=>e()),500,!0),Vt=(0,a.X$)((0,s.c$)((e=>{const{byId:t}=e.chats,{currentUserId:n,messages:{byChatId:a},lastSyncTime:s}=e,{fetchingStatus:r,resultsByType:l}=e.globalSearch,{foundIds:o}=(null==l?void 0:l.text)||{};return{currentUserId:n,foundIds:o,globalMessagesByChatId:a,chatsById:t,fetchingStatus:r,lastSyncTime:s}}))((e=>{let{searchQuery:t,currentUserId:n,dateSearchQuery:r,foundIds:o,globalMessagesByChatId:i,chatsById:c,fetchingStatus:d,lastSyncTime:m,onSearchDateSelect:u}=e;const{searchMessagesGlobal:h}=(0,s.Sv)(),Z=(0,g.Z)(),v=(0,a.I4)((e=>{let{direction:a}=e;m&&a===l.Uq.Backwards&&zt((()=>{h({type:"text",query:t,chatId:n})}))}),[n,m,h,t]),P=(0,a.Ye)((()=>o&&0!==o.length?o.map((e=>{var t;const[n,a]=e.split("_");return null==i||null===(t=i[n])||void 0===t?void 0:t.byId[Number(a)]})).filter(Boolean).sort(((e,t)=>t.date-e.date)):wt.D),[o,i]),p=d&&!d.chats&&!d.messages&&!P.length;return a.ZP.createElement("div",{className:"LeftSearch"},a.ZP.createElement(Ge.Z,{className:"search-content custom-scroll chat-list",items:P,onLoadMore:v,noFastList:!0},r&&a.ZP.createElement("div",{className:"chat-selection no-selection no-scrollbar"},a.ZP.createElement(Ut,{searchDate:r,onSelect:u})),p&&a.ZP.createElement(Gt.Z,{text:Z("ChatList.Search.NoResults"),description:Z("ChatList.Search.NoResultsDescription")}),P.map((function(e){const n=(0,w.e)(Z,e),s=c[e.chatId];if(n&&s)return a.ZP.createElement(Ot,{chatId:e.chatId,message:e,searchQuery:t})}))))})));function Yt(e){return(t,n)=>{var a,s;const{byId:r}=t.chats,{byId:l}=t.users,{fetchingStatus:o,resultsByType:i,chatId:c}=t.globalSearch,d="audio"!==e?e:null!=n&&n.isVoice?"voice":"audio",{byChatId:m}=t.messages,u=null==i||null===(a=i[d])||void 0===a?void 0:a.foundIds,h=t.activeDownloads.byChatId;return{theme:(0,b.Pu)(t),isLoading:void 0===u||!!o&&Boolean(o.chats||o.messages),chatsById:r,usersById:l,globalMessagesByChatId:m,foundIds:u,searchChatId:c,activeDownloads:h,isChatProtected:c?null===(s=(0,b.Z1)(t,c))||void 0===s?void 0:s.isProtected:void 0,lastSyncTime:t.lastSyncTime}}}var Ht=n(7891),jt=n(3657),qt=n(3709);const Kt="media",Wt=(0,z.P2)((e=>e()),500,!0),Qt=(0,a.X$)((0,s.c$)(Yt(Kt))((e=>{let{searchQuery:t,searchChatId:n,isLoading:r,globalMessagesByChatId:i,foundIds:c,lastSyncTime:d,isChatProtected:m}=e;const{searchMessagesGlobal:u,openMediaViewer:h}=(0,s.Sv)(),Z=(0,a.sO)(null),v=(0,g.Z)(),{observe:P}=(0,jt.S1)({rootRef:Z,throttleMs:500}),p=(0,a.I4)((e=>{let{direction:a}=e;d&&a===l.Uq.Backwards&&Wt((()=>{u({type:Kt,query:t,chatId:n})}))}),[d,u,t,n]),E=(0,a.Ye)((()=>c&&i?c.map((e=>{var t;const[n,a]=e.split("_");return null===(t=i[n])||void 0===t?void 0:t.byId[Number(a)]})).filter(Boolean):wt.D),[i,c]),C=(0,a.I4)(((e,t)=>{h({chatId:t,messageId:e,origin:l.bZ.SearchResult})}),[h]),f=(0,Ht.Z)([t],o.Y)&&!r,b=f&&c&&c.length>0&&!t,I=f&&c&&c.length>0&&t,y=(0,Y.Z)("search-content custom-scroll",I&&"chat-list");return a.ZP.createElement("div",{ref:Z,className:"LeftSearch"},a.ZP.createElement(Ge.Z,{className:y,items:E,itemSelector:t?".ListItem":".Media",onLoadMore:p,noFastList:!0},!f&&a.ZP.createElement(De.Z,null),f&&(!c||0===c.length)&&a.ZP.createElement(Gt.Z,{text:v("ChatList.Search.NoResults"),description:v("ChatList.Search.NoResultsDescription")}),b&&a.ZP.createElement("div",{className:"media-list",dir:v.isRtl?"rtl":void 0},E.map((e=>a.ZP.createElement(qt.Z,{key:e.id,idPrefix:"search-media",message:e,isProtected:m||e.isProtected,observeIntersection:P,onClick:C})))),I&&E.map((e=>a.ZP.createElement(Ot,{key:e.id,chatId:e.chatId,message:e})))))})));var en=n(91),tn=n(5418);const nn="links",an=(0,z.P2)((e=>e()),500,!0),sn=(0,a.X$)((0,s.c$)(Yt(nn))((e=>{let{searchQuery:t,searchChatId:n,isLoading:r,chatsById:i,usersById:c,globalMessagesByChatId:d,foundIds:m,lastSyncTime:u,isChatProtected:h}=e;const{searchMessagesGlobal:Z,focusMessage:v}=(0,s.Sv)(),P=(0,a.sO)(null),p=(0,g.Z)(),{observe:E}=(0,jt.S1)({rootRef:P,throttleMs:500}),C=(0,a.I4)((e=>{let{direction:a}=e;u&&a===l.Uq.Backwards&&an((()=>{Z({type:nn,query:t,chatId:n})}))}),[u,Z,t,n]),f=(0,a.Ye)((()=>m&&d?m.map((e=>{var t;const[n,a]=e.split("_");return null===(t=d[n])||void 0===t?void 0:t.byId[Number(a)]})).filter(Boolean):wt.D),[d,m]),b=(0,a.I4)(((e,t)=>{v({chatId:t,messageId:e})}),[v]),I=(0,Ht.Z)([t],o.Y)&&!r;return a.ZP.createElement("div",{ref:P,className:"LeftSearch"},a.ZP.createElement(Ge.Z,{className:"search-content documents-list custom-scroll",items:f,onLoadMore:C,noFastList:!0},!I&&a.ZP.createElement(De.Z,null),I&&(!m||0===m.length)&&a.ZP.createElement(Gt.Z,{text:p("ChatList.Search.NoResults"),description:p("ChatList.Search.NoResultsDescription")}),I&&m&&m.length>0&&f.map(((e,t)=>{const n=0===t||(0,te.kj)(e.date)!==(0,te.kj)(f[t-1].date);return a.ZP.createElement("div",{className:"ListItem small-icon",dir:p.isRtl?"rtl":void 0,key:e.id},n&&a.ZP.createElement("p",{className:"section-heading",dir:p.isRtl?"rtl":void 0},(0,te.np)(p,new Date(1e3*e.date))),a.ZP.createElement(tn.Z,{key:e.id,message:e,senderTitle:(0,en.F)(p,e,i,c),isProtected:h||e.isProtected,observeIntersection:E,onMessageClick:b}))}))))})));var rn=n(2535);const ln="documents",on=(0,z.P2)((e=>e()),500,!0),cn=(0,a.X$)((0,s.c$)(Yt(ln))((e=>{let{searchQuery:t,searchChatId:n,isLoading:r,chatsById:i,usersById:c,globalMessagesByChatId:d,foundIds:m,activeDownloads:u,lastSyncTime:h}=e;const{searchMessagesGlobal:Z,focusMessage:v}=(0,s.Sv)(),P=(0,a.sO)(null),p=(0,g.Z)(),{observe:E}=(0,jt.S1)({rootRef:P,throttleMs:500}),C=(0,a.I4)((e=>{let{direction:a}=e;h&&a===l.Uq.Backwards&&on((()=>{Z({type:ln,query:t,chatId:n})}))}),[h,Z,t,n]),b=(0,a.Ye)((()=>m&&d?m.map((e=>{var t;const[n,a]=e.split("_"),s=null===(t=d[n])||void 0===t?void 0:t.byId[Number(a)];return s&&(0,f.aE)(s)?s:void 0})).filter(Boolean):wt.D),[d,m]),I=(0,a.I4)(((e,t)=>{v({chatId:t,messageId:e})}),[v]),y=(0,Ht.Z)([t],o.Y)&&!r;return a.ZP.createElement("div",{ref:P,className:"LeftSearch"},a.ZP.createElement(Ge.Z,{className:"search-content documents-list custom-scroll",items:b,onLoadMore:C,noFastList:!0},!y&&a.ZP.createElement(De.Z,null),y&&(!m||0===m.length)&&a.ZP.createElement(Gt.Z,{text:p("ChatList.Search.NoResults"),description:p("ChatList.Search.NoResultsDescription")}),y&&m&&m.length>0&&b.map(((e,t)=>{var n;const s=0===t||(0,te.kj)(e.date)!==(0,te.kj)(b[t-1].date);return a.ZP.createElement("div",{className:"ListItem small-icon",key:e.id},s&&a.ZP.createElement("p",{className:"section-heading"},(0,te.np)(p,new Date(1e3*e.date))),a.ZP.createElement(rn.Z,{message:e,withDate:!0,datetime:e.date,smaller:!0,sender:(0,en.F)(p,e,i,c),className:"scroll-item",isDownloading:null===(n=u[e.chatId])||void 0===n?void 0:n.includes(e.id),observeIntersection:E,onDateClick:I}))}))))})));var dn=n(4752);const mn=(0,z.P2)((e=>e()),500,!0),un=(0,a.X$)((0,s.c$)(Yt("audio"))((e=>{let{theme:t,isVoice:n,searchQuery:r,searchChatId:i,isLoading:c,chatsById:d,usersById:m,globalMessagesByChatId:u,foundIds:h,lastSyncTime:Z,activeDownloads:v}=e;const{searchMessagesGlobal:P,focusMessage:p,openAudioPlayer:E}=(0,s.Sv)(),C=(0,g.Z)(),f=n?"voice":"audio",b=(0,a.I4)((e=>{let{direction:t}=e;Z&&t===l.Uq.Backwards&&mn((()=>{P({type:f,query:r,chatId:i})}))}),[f,Z,P,r,i]),I=(0,a.Ye)((()=>h&&u?h.map((e=>{var t;const[n,a]=e.split("_");return null===(t=u[n])||void 0===t?void 0:t.byId[Number(a)]})).filter(Boolean):wt.D),[u,h]),y=(0,a.I4)(((e,t)=>{p({chatId:t,messageId:e})}),[p]),S=(0,a.I4)(((e,t)=>{E({chatId:t,messageId:e})}),[E]),N=(0,Ht.Z)([r],o.Y)&&!c;return a.ZP.createElement("div",{className:"LeftSearch"},a.ZP.createElement(Ge.Z,{className:"search-content documents-list custom-scroll",items:I,onLoadMore:b,noFastList:!0},!N&&a.ZP.createElement(De.Z,null),N&&(!h||0===h.length)&&a.ZP.createElement(Gt.Z,{text:C("ChatList.Search.NoResults"),description:C("ChatList.Search.NoResultsDescription")}),N&&h&&h.length>0&&I.map(((e,n)=>{var s;const r=0===n||(0,te.kj)(e.date)!==(0,te.kj)(I[n-1].date);return a.ZP.createElement("div",{className:"ListItem small-icon",key:e.id},r&&a.ZP.createElement("p",{className:"section-heading",dir:C.isRtl?"rtl":void 0},(0,te.np)(C,new Date(1e3*e.date))),a.ZP.createElement(dn.Z,{key:e.id,theme:t,message:e,origin:l.Cr.Search,senderTitle:(0,en.F)(C,e,d,m),date:e.date,lastSyncTime:Z,className:"scroll-item",onPlay:S,onDateClick:y,isDownloading:null===(s=v[e.chatId])||void 0===s?void 0:s.includes(e.id)}))}))))}))),hn=[{type:l.nJ.ChatList,title:"SearchAllChatsShort"},{type:l.nJ.Media,title:"SharedMediaTab2"},{type:l.nJ.Links,title:"SharedLinksTab2"},{type:l.nJ.Files,title:"SharedFilesTab2"},{type:l.nJ.Music,title:"SharedMusicTab2"},{type:l.nJ.Voice,title:"SharedVoiceTab2"}],Zn=[{type:l.nJ.ChatList,title:"All Messages"},...hn.slice(1)],vn=Object.keys(l.nJ).length/2,Pn=(0,a.X$)((0,s.c$)((e=>{const{currentContent:t,chatId:n}=e.globalSearch;return{currentContent:t,chatId:n}}))((e=>{let{searchQuery:t,searchDate:n,isActive:r,currentContent:o=l.nJ.ChatList,chatId:i,onReset:c}=e;const{setGlobalSearchContent:d,setGlobalSearchDate:m}=(0,s.Sv)(),u=(0,g.Z)(),[h,Z]=(0,a.eJ)(o),v=(0,a.Ye)((()=>(0,te.xk)(t)),[t]),p=(0,a.I4)((e=>{const t=hn[e];d({content:t.type}),Z(e)}),[d]),E=(0,a.I4)((e=>{m({date:e.getTime()/1e3})}),[m]);(0,P.ZP)(r,c,void 0,void 0,!0);const C=(0,a.sO)(null),f=(0,xe.Z)(C,r,void 0,".ListItem-button",!0);return a.ZP.createElement("div",{className:"LeftSearch",ref:C,onKeyDown:f},a.ZP.createElement(kt.Z,{activeTab:h,tabs:i?Zn:hn,onSwitchTab:p}),a.ZP.createElement($.Z,{name:u.isRtl?"slide-optimized-rtl":"slide-optimized",renderCount:vn,activeKey:o},(()=>{switch(o){case l.nJ.ChatList:return i?a.ZP.createElement(Vt,{searchQuery:t,dateSearchQuery:v,onReset:c,onSearchDateSelect:E}):a.ZP.createElement(Xt,{searchQuery:t,searchDate:n,dateSearchQuery:v,onReset:c,onSearchDateSelect:E});case l.nJ.Media:return a.ZP.createElement(Qt,{searchQuery:t});case l.nJ.Links:return a.ZP.createElement(sn,{searchQuery:t});case l.nJ.Files:return a.ZP.createElement(cn,{searchQuery:t});case l.nJ.Music:return a.ZP.createElement(un,{key:"audio",searchQuery:t});case l.nJ.Voice:return a.ZP.createElement(un,{key:"voice",isVoice:!0,searchQuery:t});default:return}})()))})));var gn=n(1090);const pn={currentPassword:"",password:"",hint:"",email:""},En=(e,t)=>{switch(t.type){case"setCurrentPassword":return{...e,currentPassword:t.payload};case"setPassword":return{...e,password:t.payload};case"setHint":return{...e,hint:t.payload};case"setEmail":return{...e,email:t.payload};case"reset":return pn;default:return e}},Cn=(0,a.X$)((e=>{let{currentScreen:t,editedFolderId:n,onReset:r,onSaveFilter:o,onScreenSelect:c}=e;const{signOut:d,deleteChatFolder:m}=(0,s.Sv)(),[u,h]=(0,a.eJ)(!1),[Z,v]=(0,a.eJ)(!1),P=(0,a.I4)((()=>{h(!0)}),[]),p=(0,a.I4)((()=>{h(!1)}),[]),E=(0,a.I4)((()=>{v(!0)}),[]),C=(0,a.I4)((()=>{v(!1)}),[]),f=(0,a.I4)((()=>{p(),d()}),[p,d]),b=(0,a.I4)((()=>{C(),m({id:n}),r()}),[n,C,m,r]),I=(0,a.Ye)((()=>e=>{let{onTrigger:t,isOpen:n}=e;return a.ZP.createElement(B.Z,{round:!0,ripple:!i.wB,size:"smaller",color:"translucent",className:n?"active":"",onClick:t,ariaLabel:"More actions"},a.ZP.createElement("i",{className:"icon-more"}))}),[]),y=(0,g.Z)();return a.ZP.createElement("div",{className:"left-header"},a.ZP.createElement(B.Z,{round:!0,size:"smaller",color:"translucent",onClick:r,ariaLabel:y("AccDescrGoBack")},a.ZP.createElement("i",{className:"icon-arrow-left"})),function(){switch(t){case l.MT.EditProfile:return a.ZP.createElement("h3",null,y("lng_settings_information"));case l.MT.General:return a.ZP.createElement("h3",null,y("General"));case l.MT.QuickReaction:return a.ZP.createElement("h3",null,y("DoubleTapSetting"));case l.MT.Notifications:return a.ZP.createElement("h3",null,y("Notifications"));case l.MT.DataStorage:return a.ZP.createElement("h3",null,y("DataSettings"));case l.MT.Privacy:return a.ZP.createElement("h3",null,y("PrivacySettings"));case l.MT.Language:return a.ZP.createElement("h3",null,y("Language"));case l.MT.GeneralChatBackground:return a.ZP.createElement("h3",null,y("ChatBackground"));case l.MT.GeneralChatBackgroundColor:return a.ZP.createElement("h3",null,y("SetColor"));case l.MT.PrivacyPhoneNumber:return a.ZP.createElement("h3",null,y("PrivacyPhone"));case l.MT.PrivacyLastSeen:return a.ZP.createElement("h3",null,y("PrivacyLastSeen"));case l.MT.PrivacyProfilePhoto:return a.ZP.createElement("h3",null,y("Privacy.ProfilePhoto"));case l.MT.PrivacyForwarding:return a.ZP.createElement("h3",null,y("PrivacyForwards"));case l.MT.PrivacyGroupChats:return a.ZP.createElement("h3",null,y("AutodownloadGroupChats"));case l.MT.PrivacyPhoneNumberAllowedContacts:case l.MT.PrivacyLastSeenAllowedContacts:case l.MT.PrivacyProfilePhotoAllowedContacts:case l.MT.PrivacyForwardingAllowedContacts:case l.MT.PrivacyGroupChatsAllowedContacts:return a.ZP.createElement("h3",null,y("AlwaysShareWith"));case l.MT.PrivacyPhoneNumberDeniedContacts:case l.MT.PrivacyLastSeenDeniedContacts:case l.MT.PrivacyProfilePhotoDeniedContacts:case l.MT.PrivacyForwardingDeniedContacts:case l.MT.PrivacyGroupChatsDeniedContacts:return a.ZP.createElement("h3",null,y("NeverShareWith"));case l.MT.ActiveSessions:return a.ZP.createElement("h3",null,y("SessionsTitle"));case l.MT.PrivacyBlockedUsers:return a.ZP.createElement("h3",null,y("BlockedUsers"));case l.MT.TwoFaDisabled:case l.MT.TwoFaEnabled:return a.ZP.createElement("h3",null,y("TwoStepVerification"));case l.MT.TwoFaNewPassword:case l.MT.TwoFaChangePasswordNew:case l.MT.TwoFaChangePasswordConfirm:return a.ZP.createElement("h3",null,y("PleaseEnterCurrentPassword"));case l.MT.TwoFaNewPasswordConfirm:return a.ZP.createElement("h3",null,y("PleaseReEnterPassword"));case l.MT.TwoFaNewPasswordHint:case l.MT.TwoFaChangePasswordHint:return a.ZP.createElement("h3",null,y("PasswordHint"));case l.MT.TwoFaNewPasswordEmail:case l.MT.TwoFaRecoveryEmail:return a.ZP.createElement("h3",null,y("RecoveryEmailTitle"));case l.MT.TwoFaNewPasswordEmailCode:case l.MT.TwoFaRecoveryEmailCode:return a.ZP.createElement("h3",null,"Recovery Email Code");case l.MT.TwoFaCongratulations:return a.ZP.createElement("h3",null,y("TwoStepVerificationPasswordSet"));case l.MT.TwoFaChangePasswordCurrent:case l.MT.TwoFaTurnOff:case l.MT.TwoFaRecoveryEmailCurrentPassword:return a.ZP.createElement("h3",null,y("PleaseEnterCurrentPassword"));case l.MT.Folders:return a.ZP.createElement("h3",null,y("Filters"));case l.MT.FoldersCreateFolder:return a.ZP.createElement("h3",null,y("FilterNew"));case l.MT.FoldersEditFolder:case l.MT.FoldersEditFolderFromChatList:return a.ZP.createElement("div",{className:"settings-main-header"},a.ZP.createElement("h3",null,y("FilterEdit")),n&&a.ZP.createElement(D.Z,{className:"settings-more-menu",trigger:I,positionX:"right"},a.ZP.createElement(O.Z,{icon:"delete",destructive:!0,onClick:E},y("Delete"))));case l.MT.FoldersIncludedChats:case l.MT.FoldersIncludedChatsFromChatList:case l.MT.FoldersExcludedChats:case l.MT.FoldersExcludedChatsFromChatList:return a.ZP.createElement("div",{className:"settings-main-header"},t===l.MT.FoldersIncludedChats||t===l.MT.FoldersIncludedChatsFromChatList?a.ZP.createElement("h3",null,y("FilterInclude")):a.ZP.createElement("h3",null,y("FilterExclude")),a.ZP.createElement(B.Z,{round:!0,size:"smaller",color:"translucent",className:"color-primary",onClick:o,ariaLabel:y("AutoDeleteConfirm")},a.ZP.createElement("i",{className:"icon-check"})));default:return a.ZP.createElement("div",{className:"settings-main-header"},a.ZP.createElement("h3",null,y("SETTINGS")),a.ZP.createElement(B.Z,{round:!0,ripple:!i.wB,size:"smaller",color:"translucent",onClick:()=>c(l.MT.EditProfile),ariaLabel:y("lng_settings_information")},a.ZP.createElement("i",{className:"icon-edit"})),a.ZP.createElement(D.Z,{className:"settings-more-menu",trigger:I,positionX:"right"},a.ZP.createElement(O.Z,{icon:"logout",onClick:P},y("LogOutTitle"))))}}(),a.ZP.createElement(Qe.Z,{isOpen:u,onClose:p,text:y("lng_sure_logout"),confirmLabel:y("AccountSettings.Logout"),confirmHandler:f,confirmIsDestructive:!0}),a.ZP.createElement(Qe.Z,{isOpen:Z,onClose:C,text:y("FilterDeleteAlert"),confirmLabel:y("Delete"),confirmHandler:b,confirmIsDestructive:!0}))}));var fn=n(787),bn=n(180);const In=(0,a.X$)((0,s.c$)((e=>{const{currentUserId:t,lastSyncTime:n}=e;return{sessionCount:e.activeSessions.length,currentUser:t?(0,b.dy)(e,t):void 0,lastSyncTime:n}}))((e=>{let{isActive:t,onScreenSelect:n,onReset:r,currentUser:o,sessionCount:i,lastSyncTime:c}=e;const{loadProfilePhotos:d,loadAuthorizations:m}=(0,s.Sv)(),u=(0,g.Z)(),h=null==o?void 0:o.id;return(0,a.d4)((()=>{h&&c&&d({profileId:h})}),[c,h,d]),(0,P.ZP)(t,r,n,l.MT.Main),(0,a.d4)((()=>{c&&m()}),[c,m]),a.ZP.createElement("div",{className:"settings-content custom-scroll"},a.ZP.createElement("div",{className:"settings-main-menu"},o&&a.ZP.createElement(fn.Z,{userId:o.id,forceShowSelf:!0}),o&&a.ZP.createElement(bn.Z,{chatOrUserId:o.id,forceShowSelf:!0}),a.ZP.createElement(_e.Z,{icon:"settings",onClick:()=>n(l.MT.General)},u("Telegram.GeneralSettingsViewController")),a.ZP.createElement(_e.Z,{icon:"unmute",onClick:()=>n(l.MT.Notifications)},u("Notifications")),a.ZP.createElement(_e.Z,{icon:"data",onClick:()=>n(l.MT.DataStorage)},u("DataSettings")),a.ZP.createElement(_e.Z,{icon:"lock",onClick:()=>n(l.MT.Privacy)},u("PrivacySettings")),a.ZP.createElement(_e.Z,{icon:"folder",onClick:()=>n(l.MT.Folders)},u("Filters")),a.ZP.createElement(_e.Z,{icon:"active-sessions",onClick:()=>n(l.MT.ActiveSessions)},u("SessionsTitle"),i>0&&a.ZP.createElement("span",{className:"settings-item__current-value"},i)),a.ZP.createElement(_e.Z,{icon:"language",onClick:()=>n(l.MT.Language)},u("Language"),a.ZP.createElement("span",{className:"settings-item__current-value"},u.langName))))})));var yn=n(710),Sn=n(1151);const Nn="https://t.me/",kn=/https:\/\/t\.me\/?/i,wn=/^([a-zA-Z0-9_]+)$/,Mn=(0,z.Ds)((e=>e()),250,!1),Tn=(0,a.X$)((e=>{let{currentUsername:t,asLink:n,isLoading:s,isUsernameAvailable:r,checkUsername:l,onChange:o}=e;const[i,c]=(0,a.eJ)(t||""),d=(0,g.Z)(),m=n?"SetUrl":"Username",u=d(n?"SetUrlPlaceholder":"Username"),[h,Z]=(0,a.Ye)((()=>i.length?i.length<5?[void 0,`${u} is too short`]:i.length>32?[void 0,`${u} is too long`]:wn.test(i)?void 0===r?[]:[r?d(`${m}Available`,"Username"):void 0,!1===r?d(`${m}InUse`):void 0]:[void 0,`${u} contains invalid characters`]:[]),[i,r,d,m,u]);(0,a.d4)((()=>{c(t||"")}),[n,t]);const v=(0,a.I4)((e=>{const t=e.target.value.trim().replace(kn,"");c(t),e.target.value=`${n?Nn:""}${t}`;const a=function(e){return e.length>=5&&e.length<=32&&wn.test(e)}(t);a&&Mn((()=>{l({username:t})})),o&&o(!!a&&t)}),[n,l,o]);return a.ZP.createElement(Ue.Z,{value:`${n?Nn:""}${i}`,onChange:v,label:u,error:Z,success:h,readOnly:s})})),Rn=(0,z.P2)((e=>e()),6e4,!0),An="Please provide your first name",Ln="Bio can' be longer than 70 characters",Fn=(0,a.X$)((0,s.c$)((e=>{const{currentUserId:t}=e,{progress:n,isUsernameAvailable:a}=e.profileEdit||{},s=t?(0,b.dy)(e,t):void 0;if(!s)return{progress:n,isUsernameAvailable:a};const{firstName:r,lastName:l,username:o,fullInfo:i}=s,{bio:c}=i||{};return{currentAvatarHash:(0,f.RT)(s),currentFirstName:r,currentLastName:l,currentBio:c,currentUsername:o,progress:n,isUsernameAvailable:a}}))((e=>{let{isActive:t,onScreenSelect:n,onReset:o,currentAvatarHash:i,currentFirstName:c,currentLastName:d,currentBio:m,currentUsername:u,progress:h,isUsernameAvailable:Z}=e;const{loadCurrentUser:v,updateProfile:E,checkUsername:C}=(0,s.Sv)(),f=(0,g.Z)(),[b,I]=(0,a.eJ)(!1),[y,S]=(0,a.eJ)(!1),[N,k]=(0,a.eJ)(),[w,M]=(0,a.eJ)(),[T,R]=(0,a.eJ)(c||""),[A,L]=(0,a.eJ)(d||""),[F,B]=(0,a.eJ)(m||""),[x,$]=(0,a.eJ)(u||""),D=(0,p.Z)(i,!1,r.IU.BlobUrl),O=h===l.rN.InProgress,U=!1===x,G=(0,a.Ye)((()=>!U&&(Boolean(w)||y||!0===Z)),[w,y,U,Z]);(0,P.ZP)(t,o,n,l.MT.EditProfile),(0,a.d4)((()=>{Rn((()=>{v()}))}),[v]),(0,a.d4)((()=>{M(void 0)}),[D]),(0,a.d4)((()=>{R(c||""),L(d||""),B(m||"")}),[c,d,m]),(0,a.d4)((()=>{$(u||"")}),[u]),(0,a.d4)((()=>{h===l.rN.Complete&&(S(!1),I(!1),k(void 0))}),[h]);const _=(0,a.I4)((e=>{M(e)}),[]),J=(0,a.I4)((e=>{R(e.target.value),S(!0)}),[]),X=(0,a.I4)((e=>{L(e.target.value),S(!0)}),[]),z=(0,a.I4)((e=>{B(e.target.value),S(!0)}),[]),Y=(0,a.I4)((e=>{$(e),I(!0)}),[]),H=(0,a.I4)((()=>{const e=T.trim(),t=A.trim(),n=F.trim();e.length?n.length>70?k(Ln):E({photo:w,...y&&{firstName:e,lastName:t,bio:n},...b&&{username:x}}):k(An)}),[w,T,A,F,y,x,b,E]);return a.ZP.createElement("div",{className:"settings-fab-wrapper"},a.ZP.createElement("div",{className:"settings-content no-border custom-scroll"},a.ZP.createElement("div",{className:"settings-edit-profile settings-item"},a.ZP.createElement(yn.Z,{currentAvatarBlobUrl:D,onChange:_,title:"Edit your profile photo",disabled:O}),a.ZP.createElement(Ue.Z,{value:T,onChange:J,label:f("FirstName"),disabled:O,error:N===An?N:void 0}),a.ZP.createElement(Ue.Z,{value:A,onChange:X,label:f("LastName"),disabled:O}),a.ZP.createElement(Ue.Z,{value:F,onChange:z,label:f("UserBio"),disabled:O,error:N===Ln?N:void 0}),a.ZP.createElement("p",{className:"settings-item-description",dir:f.isRtl?"rtl":void 0},(0,ke.Z)(f("lng_settings_about_bio"),["br","simple_markdown"]))),a.ZP.createElement("div",{className:"settings-item"},a.ZP.createElement("h4",{className:"settings-item-header",dir:f.isRtl?"rtl":void 0},f("Username")),a.ZP.createElement(Tn,{currentUsername:x||"",isLoading:O,isUsernameAvailable:Z,checkUsername:C,onChange:Y}),a.ZP.createElement("p",{className:"settings-item-description",dir:f.isRtl?"rtl":void 0},(0,ke.Z)(f("UsernameHelp"),["br","simple_markdown"])),x&&a.ZP.createElement("p",{className:"settings-item-description",dir:f.isRtl?"rtl":void 0},f("lng_username_link"),a.ZP.createElement("br",null),a.ZP.createElement("span",{className:"username-link"},"https://t.me/",x)))),a.ZP.createElement(Sn.Z,{isShown:G,onClick:H,disabled:O,ariaLabel:"Save changes"},O?a.ZP.createElement(V.Z,{color:"white"}):a.ZP.createElement("i",{className:"icon-check"})))}))),Bn=(0,a.X$)((0,s.c$)((e=>(0,be.ei)(e.settings.byKey,["canAutoLoadPhotoFromContacts","canAutoLoadPhotoInPrivateChats","canAutoLoadPhotoInGroups","canAutoLoadPhotoInChannels","canAutoLoadVideoFromContacts","canAutoLoadVideoInPrivateChats","canAutoLoadVideoInGroups","canAutoLoadVideoInChannels","canAutoLoadFileFromContacts","canAutoLoadFileInPrivateChats","canAutoLoadFileInGroups","canAutoLoadFileInChannels","canAutoPlayGifs","canAutoPlayVideos","autoLoadFileMaxSizeMb"])))((e=>{let{isActive:t,onScreenSelect:n,onReset:r,canAutoLoadPhotoFromContacts:i,canAutoLoadPhotoInPrivateChats:c,canAutoLoadPhotoInGroups:d,canAutoLoadPhotoInChannels:m,canAutoLoadVideoFromContacts:u,canAutoLoadVideoInPrivateChats:h,canAutoLoadVideoInGroups:Z,canAutoLoadVideoInChannels:v,canAutoLoadFileFromContacts:p,canAutoLoadFileInPrivateChats:E,canAutoLoadFileInGroups:C,canAutoLoadFileInChannels:f,canAutoPlayGifs:b,canAutoPlayVideos:I,autoLoadFileMaxSizeMb:y}=e;const{setSettingOption:S}=(0,s.Sv)(),N=(0,g.Z)();(0,P.ZP)(t,r,n,l.MT.General);const k=(0,a.I4)((e=>N("AutodownloadSizeLimitUpTo",N("FileSize.MB",String(o.by[e]),"i"))),[N]),w=(0,a.I4)((e=>{S({autoLoadFileMaxSizeMb:o.by[e]})}),[S]),M=(0,a.I4)((e=>{S({canAutoPlayGifs:e})}),[S]),T=(0,a.I4)((e=>{S({canAutoPlayVideos:e})}),[S]);function R(e,t,n,s,r,l){return a.ZP.createElement("div",{className:"settings-item"},a.ZP.createElement("h4",{className:"settings-item-header",dir:N.isRtl?"rtl":void 0},e),a.ZP.createElement(ct.Z,{label:N("AutoDownloadSettings.Contacts"),checked:n,onCheck:e=>S({[`canAutoLoad${t}FromContacts`]:e})}),a.ZP.createElement(ct.Z,{label:N("AutoDownloadSettings.PrivateChats"),checked:s,onCheck:e=>S({[`canAutoLoad${t}InPrivateChats`]:e})}),a.ZP.createElement(ct.Z,{label:N("AutoDownloadSettings.GroupChats"),checked:r,onCheck:e=>S({[`canAutoLoad${t}InGroups`]:e})}),a.ZP.createElement(ct.Z,{label:N("AutoDownloadSettings.Channels"),checked:l,onCheck:e=>S({[`canAutoLoad${t}InChannels`]:e})}),"File"===t&&function(){const e=o.by.indexOf(y);return a.ZP.createElement("div",{className:"pt-5"},a.ZP.createElement(se.Z,{label:N("AutoDownloadMaxFileSize"),min:0,max:5,value:-1!==e?e:2,renderValue:k,onChange:w}))}())}return a.ZP.createElement("div",{className:"settings-content custom-scroll"},R(N("AutoDownloadPhotosTitle"),"Photo",i,c,d,m),R(N("AutoDownloadVideosTitle"),"Video",u,h,Z,v),R("Auto-download files","File",p,E,C,f),a.ZP.createElement("div",{className:"settings-item"},a.ZP.createElement("h4",{className:"settings-item-header",dir:N.isRtl?"rtl":void 0},N("AutoplayMedia")),a.ZP.createElement(ct.Z,{label:N("GifsTab2"),checked:b,onCheck:M}),a.ZP.createElement(ct.Z,{label:N("DataAndStorage.Autoplay.Videos"),checked:I,onCheck:T})))})));var xn=n(5616);const $n=(0,z.P2)((e=>e()),6e4,!0),Dn=(0,a.X$)((0,s.c$)((e=>{const{orderedIds:t,byId:n,recommended:a}=e.chatFolders;return{orderedFolderIds:t,foldersById:n,recommendedChatFolders:a}}))((e=>{let{isActive:t,onCreateFolder:n,onEditFolder:r,onScreenSelect:i,onReset:c,orderedFolderIds:d,foldersById:m,recommendedChatFolders:u}=e;const{loadRecommendedChatFolders:h,addChatFolder:Z,showDialog:v}=(0,s.Sv)(),[p,E]=(0,a.eJ)(),[C,b]=(0,a.eJ)(!1),I=(0,a.I4)((()=>b(!0)),[]);(0,a.d4)((()=>{p||(0,yt.Z)("FoldersAll").then(E)}),[p]),(0,a.d4)((()=>{$n((()=>{h()}))}),[h]);const y=(0,a.I4)((()=>{Object.keys(m).length>=10?v({data:{message:"DIALOG_FILTERS_TOO_MUCH",hasErrorKey:!0}}):n()}),[m,v,n]),S=(0,g.Z)();(0,P.ZP)(t,c,i,l.MT.Folders);const N=(0,xn.mE)(),k=(0,a.Ye)((()=>{if(d)return d.map((e=>{const t=m[e];return{id:t.id,title:t.title,subtitle:(0,f.SB)(S,t,N[t.id])}}))}),[d,m,S,N]),w=(0,a.I4)((e=>{Object.keys(m).length>=10?v({data:{message:"DIALOG_FILTERS_TOO_MUCH",hasErrorKey:!0}}):Z({folder:e})}),[m,Z,v]);return a.ZP.createElement("div",{className:"settings-content no-border custom-scroll"},a.ZP.createElement("div",{className:"settings-content-header"},a.ZP.createElement("div",{className:"settings-content-icon"},p&&a.ZP.createElement(St.Z,{id:"settingsFoldersMain",size:o.ku,animationData:p,play:C,noLoop:!0,onLoad:I})),a.ZP.createElement("p",{className:"settings-item-description mb-3",dir:"auto"},S("CreateNewFilterInfo")),a.ZP.createElement(B.Z,{className:"with-icon mb-2",color:"primary",size:"smaller",pill:!0,fluid:!0,onClick:y,isRtl:S.isRtl},a.ZP.createElement("i",{className:"icon-add"}),S("CreateNewFilter"))),a.ZP.createElement("div",{className:"settings-item pt-3"},a.ZP.createElement("h4",{className:"settings-item-header mb-3",dir:S.isRtl?"rtl":void 0},S("Filters")),null!=k&&k.length?k.map((e=>a.ZP.createElement(_e.Z,{className:"mb-2 no-icon",narrow:!0,multiline:!0,onClick:()=>r(m[e.id])},a.ZP.createElement("span",{className:"title"},e.title),a.ZP.createElement("span",{className:"subtitle"},e.subtitle)))):k&&!k.length?a.ZP.createElement("p",{className:"settings-item-description my-4",dir:"auto"},"You have no folders yet."):a.ZP.createElement(De.Z,null)),u&&Boolean(u.length)&&a.ZP.createElement("div",{className:"settings-item pt-3"},a.ZP.createElement("h4",{className:"settings-item-header mb-3",dir:S.isRtl?"rtl":void 0},S("FilterRecommended")),u.map((e=>a.ZP.createElement(_e.Z,{className:"mb-2",narrow:!0,onClick:()=>w(e)},a.ZP.createElement("div",{className:"settings-folders-recommended-item"},a.ZP.createElement("div",{className:"multiline-item"},a.ZP.createElement("span",{className:"title"},e.title),a.ZP.createElement("span",{className:"subtitle"},e.description)),a.ZP.createElement(B.Z,{className:"px-3",color:"primary",size:"tiny",pill:!0,fluid:!0,isRtl:S.isRtl},S("Add"))))))))})));var On=n(3455);const Un=e=>{let{count:t,itemName:n,itemPluralName:s,isLoading:r,onClick:l}=e;const o=(0,g.Z)();return a.ZP.createElement(B.Z,{className:"ShowMoreButton",color:"translucent",size:"smaller",isText:!0,isLoading:r,isRtl:o.isRtl,onClick:l},a.ZP.createElement("i",{className:"icon-down"}),"Show ",t," more ",t>1?s||`${n}s`:n)},Gn="Please provide a title for this folder.",_n="ChatList.Filter.Error.Empty",Jn=(0,a.X$)((0,s.c$)((e=>{const{listIds:t}=e.chats;return{loadedActiveChatIds:t.active,loadedArchivedChatIds:t.archived}}))((e=>{let{state:t,dispatch:n,onAddIncludedChats:r,onAddExcludedChats:i,isActive:c,onScreenSelect:d,onReset:m,onBack:u,loadedActiveChatIds:h,loadedArchivedChatIds:Z}=e;const{editChatFolder:v,addChatFolder:p}=(0,s.Sv)(),[E,C]=(0,a.eJ)(),[b,I]=(0,a.eJ)(!1),y=(0,a.I4)((()=>I(!0)),[]),[S,N]=(0,a.eJ)(!1),[k,w]=(0,a.eJ)(!1),{selectedChatIds:M,selectedChatTypes:T}=(0,On.vb)(t,"included"),{selectedChatIds:R,selectedChatTypes:A}=(0,On.vb)(t,"excluded");(0,a.d4)((()=>{E||(0,yt.Z)("FoldersNew").then(C)}),[E]),(0,a.d4)((()=>{N(!1),w(!1)}),[t.folderId]);const[L,F]=(0,a.Ye)((()=>{const e=new Set([...h||[],...Z||[]]),t=(0,be.eL)(M,e),n=(0,be.eL)(R,e);return[S?t:t.slice(0,5-T.length),k?n:n.slice(0,5-A.length)]}),[R,M,T,A,k,S,h,Z]),B=(0,g.Z)();(0,P.ZP)(c,u,d,"edit"===t.mode?l.MT.FoldersEditFolder:l.MT.FoldersCreateFolder);const x=(0,a.I4)((e=>{const{currentTarget:t}=e;n({type:"setTitle",payload:t.value.trim()})}),[n]),$=(0,a.I4)((()=>{const{title:e}=t.folder;e?M.length||Object.keys(T).length?(n({type:"setIsLoading",payload:!0}),"edit"===t.mode?v({id:t.folderId,folderUpdate:t.folder}):p({folder:t.folder}),setTimeout((()=>{m()}),500)):n({type:"setError",payload:_n}):n({type:"setError",payload:Gn})}),[p,n,v,M.length,T,m,t]);function D(e){const t="included"===e?T:A,n="included"===e?L:F,s="included"===e?S:k,r=("included"===e?M:R).length-t.length-n.length,l="included"===e?()=>N(!0):()=>w(!0);return a.ZP.createElement(a.ZP.Fragment,null,t.map((t=>function(e,t){const n="included"===t?On.fi.find((t=>{let{key:n}=t;return n===e})):On.Yy.find((t=>{let{key:n}=t;return n===e}));if(n)return a.ZP.createElement(_e.Z,{key:n.key,className:"settings-folders-list-item mb-1",icon:n.icon,narrow:!0,inactive:!0},B(n.title))}(t,e))),n.map((e=>a.ZP.createElement(_e.Z,{className:"settings-folders-list-item mb-1",narrow:!0,inactive:!0},(0,f.YC)(e)?a.ZP.createElement(Xe.Z,{avatarSize:"small",userId:e}):a.ZP.createElement(Je.Z,{avatarSize:"small",chatId:e})))),!s&&r>0&&a.ZP.createElement(Un,{count:r,itemName:"chat",onClick:l}))}return a.ZP.createElement("div",{className:"settings-fab-wrapper"},a.ZP.createElement("div",{className:"settings-content no-border custom-scroll"},a.ZP.createElement("div",{className:"settings-content-header"},a.ZP.createElement("div",{className:"settings-content-icon"},E&&a.ZP.createElement(St.Z,{id:"settingsFoldersEdit",size:o.ku,animationData:E,play:b&&String(t.folderId),noLoop:!0,onLoad:y})),"create"===t.mode&&a.ZP.createElement("p",{className:"settings-item-description mb-3",dir:B.isRtl?"rtl":void 0},B("FilterIncludeInfo")),a.ZP.createElement(Ue.Z,{className:"mb-0",label:B("FilterNameHint"),value:t.folder.title,onChange:x,error:t.error&&t.error===Gn?Gn:void 0})),a.ZP.createElement("div",{className:"settings-item no-border pt-3"},t.error&&t.error===_n&&a.ZP.createElement("p",{className:"settings-item-description color-danger mb-2",dir:B.isRtl?"rtl":void 0},B(t.error)),a.ZP.createElement("h4",{className:"settings-item-header mb-3",dir:B.isRtl?"rtl":void 0},B("FilterInclude")),a.ZP.createElement(_e.Z,{className:"settings-folders-list-item color-primary mb-0",icon:"add",onClick:r},B("FilterAddChats")),D("included")),a.ZP.createElement("div",{className:"settings-item pt-3"},a.ZP.createElement("h4",{className:"settings-item-header mb-3",dir:B.isRtl?"rtl":void 0},B("FilterExclude")),a.ZP.createElement(_e.Z,{className:"settings-folders-list-item color-primary mb-0",icon:"add",onClick:i},B("FilterAddChats")),D("excluded"))),a.ZP.createElement(Sn.Z,{isShown:Boolean(t.isTouched),disabled:t.isLoading,onClick:$,ariaLabel:"edit"===t.mode?"Save changes":"Create folder"},t.isLoading?a.ZP.createElement(V.Z,{color:"white"}):a.ZP.createElement("i",{className:"icon-check"})))}))),Xn=(0,a.X$)((e=>{let{mode:t,chatIds:n,selectedIds:s,selectedChatTypes:r,filterValue:l,onSelectedIdsChange:o,onSelectedChatTypesChange:i,onFilterChange:c}=e;const d=(0,a.sO)(null),m="included"===t?On.fi:On.Yy,u=s.length+r.length>10,h=s.length>=100;(0,a.d4)((()=>{setTimeout((()=>{requestAnimationFrame((()=>{d.current.focus()}))}),500)}),[]);const Z=(0,a.I4)((e=>{const t=[...s];t.includes(e)?t.splice(t.indexOf(e),1):t.push(e),o(t)}),[s,o]),v=(0,a.I4)((e=>{const t=[...r];t.includes(e)?t.splice(t.indexOf(e),1):t.push(e),i(t)}),[r,i]),P=(0,a.I4)((e=>{const{value:t}=e.currentTarget;c(t)}),[c]),p=(0,g.Z)(),[E,C]=(0,Be.Z)(void 0,n,Boolean(l));return a.ZP.createElement("div",{className:"Picker SettingsFoldersChatsPicker"},a.ZP.createElement("div",{className:"picker-header custom-scroll"},r.map((function(e){const t=m.find((t=>{let{key:n}=t;return e===n}));if(t)return a.ZP.createElement(_t.Z,{icon:t.icon,title:p(t.title),isMinimized:u,canClose:!0,onClick:v,clickArg:t.key})})),s.map(((e,t)=>a.ZP.createElement(_t.Z,{chatOrUserId:e,isMinimized:u&&tv(e.key),ripple:!0},a.ZP.createElement("i",{className:`icon-${e.icon}`}),a.ZP.createElement("h3",{className:"chat-type",dir:"auto"},p(e.title)),a.ZP.createElement(ct.Z,{label:"",checked:r.includes(e.key),round:!0}))})),a.ZP.createElement("div",{key:"divider",className:"picker-list-divider"}),a.ZP.createElement("h4",{key:"header2",className:"settings-item-header",dir:p.isRtl?"rtl":void 0},p("FilterChats"))),null!=E&&E.length?E.map((function(e){const t=s.includes(e);return a.ZP.createElement(_e.Z,{key:e,className:"chat-item-clickable picker-list-item chat-item",onClick:()=>Z(e),ripple:!0,disabled:!t&&h},(0,f.YC)(e)?a.ZP.createElement(Xe.Z,{userId:e}):a.ZP.createElement(Je.Z,{chatId:e,withChatType:!0}),a.ZP.createElement(ct.Z,{label:"",checked:t,round:!0}))})):E&&!E.length?a.ZP.createElement("p",{className:"no-results",key:"no-results"},"Sorry, nothing found."):a.ZP.createElement(De.Z,{key:"loading"})))})),zn=(0,a.X$)((e=>{let{mode:t,state:n,dispatch:r,isActive:i,onScreenSelect:c,onReset:d}=e;const{chatFilter:m}=n,{selectedChatIds:u,selectedChatTypes:h}=(0,On.vb)(n,t,!0),Z=(0,g.Z)(),v=(0,xn.d7)(o.Nf),p=(0,xn.d7)(o.WS),E=(0,a.Ye)((()=>{const e=(0,s.Rd)().chats.byId,t=[...v||[],...p||[]];return(0,be.Tw)([...u,...(0,f.$l)(Z,t,e,m)])}),[v,p,u,Z,m]),C=(0,a.I4)((e=>{r({type:"setChatFilter",payload:e})}),[r]),b=(0,a.I4)((e=>{r("included"===t?{type:"setIncludeFilters",payload:{...n.includeFilters,includedChatIds:e}}:{type:"setExcludeFilters",payload:{...n.excludeFilters,excludedChatIds:e}})}),[t,n,r]),I=(0,a.I4)((e=>{const n={};e.forEach((e=>{n[e]=!0})),r("included"===t?{type:"setIncludeFilters",payload:{includedChatIds:u,...n}}:{type:"setExcludeFilters",payload:{excludedChatIds:u,...n}})}),[t,u,r]);return(0,P.ZP)(i,d,c,"included"===t?l.MT.FoldersIncludedChats:l.MT.FoldersExcludedChats),E?a.ZP.createElement(Xn,{mode:t,chatIds:E,selectedIds:u,selectedChatTypes:h,filterValue:m,onSelectedIdsChange:b,onSelectedChatTypesChange:I,onFilterChange:C}):a.ZP.createElement(De.Z,null)})),Vn=(0,a.X$)((e=>{let{currentScreen:t,shownScreen:n,state:s,dispatch:r,isActive:o,onScreenSelect:i,onReset:c}=e;const d=(0,a.I4)((()=>{t!==l.MT.FoldersCreateFolder&&t!==l.MT.FoldersEditFolder&&t!==l.MT.FoldersEditFolderFromChatList||setTimeout((()=>{r({type:"reset"})}),200),t!==l.MT.FoldersIncludedChats&&t!==l.MT.FoldersExcludedChats?c():"create"===s.mode?i(l.MT.FoldersCreateFolder):i(l.MT.FoldersEditFolder)}),[s.mode,r,t,c,i]),m=(0,a.I4)((()=>{r({type:"reset"}),i(l.MT.FoldersCreateFolder)}),[i,r]),u=(0,a.I4)((e=>{r({type:"editFolder",payload:e}),i(l.MT.FoldersEditFolder)}),[r,i]),h=(0,a.I4)((()=>{r({type:"editIncludeFilters"}),i(t===l.MT.FoldersEditFolderFromChatList?l.MT.FoldersIncludedChatsFromChatList:l.MT.FoldersIncludedChats)}),[t,r,i]),Z=(0,a.I4)((()=>{r({type:"editExcludeFilters"}),i(t===l.MT.FoldersEditFolderFromChatList?l.MT.FoldersExcludedChatsFromChatList:l.MT.FoldersExcludedChats)}),[t,r,i]);switch(t){case l.MT.Folders:return a.ZP.createElement(Dn,{onCreateFolder:m,onEditFolder:u,onScreenSelect:i,isActive:o||[l.MT.FoldersCreateFolder,l.MT.FoldersEditFolder,l.MT.FoldersIncludedChats,l.MT.FoldersExcludedChats].includes(n),onReset:c});case l.MT.FoldersCreateFolder:case l.MT.FoldersEditFolder:case l.MT.FoldersEditFolderFromChatList:return a.ZP.createElement(Jn,{state:s,dispatch:r,onAddIncludedChats:h,onAddExcludedChats:Z,onReset:d,onScreenSelect:i,isActive:o||[l.MT.FoldersIncludedChats,l.MT.FoldersExcludedChats].includes(n),onBack:c});case l.MT.FoldersIncludedChats:case l.MT.FoldersIncludedChatsFromChatList:return a.ZP.createElement(zn,{mode:"included",state:s,dispatch:r,onReset:d,onScreenSelect:i,isActive:o});case l.MT.FoldersExcludedChats:case l.MT.FoldersExcludedChatsFromChatList:return a.ZP.createElement(zn,{mode:"excluded",state:s,dispatch:r,onReset:d,onScreenSelect:i,isActive:o});default:return}}));var Yn=n(711),Hn=n(692);const jn=(0,a.X$)((e=>{let{size:t=o.DC,stickerSet:n,observeIntersection:s}=e;const l=(0,a.sO)(null),i=(0,jt.Op)(l,s),c=`stickerSet${n.id}`,d=(0,p.Z)(c,!i,r.IU.Lottie),m=(0,Hn.Z)(d),u=(0,a.Ye)((()=>{if(!d)return(0,ft.Xv)(n.title,2)}),[d,n.title]);return a.ZP.createElement("div",{ref:l,className:"sticker-set-cover"},u,d&&a.ZP.createElement(St.Z,{id:c,size:t,animationData:d,className:m}))})),qn=(0,a.X$)((e=>{let{stickerSet:t,observeIntersection:n}=e;const s=(0,a.sO)(null),r=(0,jt.Op)(s,n),l=(0,p.Z)(t.hasThumbnail&&`stickerSet${t.id}`,!r),o=(0,Hn.Z)(l),c=t.isVideos,d=(0,a.Ye)((()=>{if(c&&!i.Hh||!l)return(0,ft.Xv)(t.title,2)}),[c,l,t.title]);return a.ZP.createElement("div",{ref:s,className:"sticker-set-cover"},d,c?a.ZP.createElement("video",{src:l,className:o,loop:!0,autoPlay:!0}):a.ZP.createElement("img",{src:l,className:o,alt:""}))}));var Kn=n(3547);const Wn=(0,a.X$)((e=>{var t;let{stickerSet:n,observeIntersection:s,onClick:r}=e;const l=(0,g.Z)();if(!n||!n.stickers)return;const i=null===(t=n.stickers)||void 0===t?void 0:t[0];return n.hasThumbnail||!i?a.ZP.createElement(_e.Z,{narrow:!0,className:"SettingsStickerSet",inactive:!i,onClick:()=>i&&r(i)},a.ZP.createElement(B.Z,{ariaLabel:n.title,color:"translucent",isRtl:l.isRtl},n.isLottie?a.ZP.createElement(jn,{size:o.Mw,stickerSet:n,observeIntersection:s}):a.ZP.createElement(qn,{stickerSet:n,observeIntersection:s})),a.ZP.createElement("div",{className:"multiline-menu-item"},a.ZP.createElement("div",{className:"title"},n.title),a.ZP.createElement("div",{className:"subtitle"},l("StickerPack.StickerCount",n.count,"i")))):a.ZP.createElement(_e.Z,{narrow:!0,className:"SettingsStickerSet",onClick:()=>r(i)},a.ZP.createElement(Kn.Z,{sticker:i,size:o.Mw,title:n.title,observeIntersection:s,clickArg:void 0,noContextMenu:!0}),a.ZP.createElement("div",{className:"multiline-menu-item"},a.ZP.createElement("div",{className:"title"},n.title),a.ZP.createElement("div",{className:"subtitle"},l("StickerPack.StickerCount",n.count,"i"))))}));var Qn=n(4851),ea=n(7370);const ta=["Solid and Steady","Nice and Fast","Lots of Stuff"],na=[{label:"12-hour",value:"12h"},{label:"24-hour",value:"24h"}],aa=(0,a.X$)((0,s.c$)((e=>{var t;const{theme:n,shouldUseSystemTheme:a}=e.settings.byKey;return{...(0,be.ei)(e.settings.byKey,["messageTextSize","animationLevel","messageSendKeyCombo","shouldSuggestStickers","shouldLoopStickers","isSensitiveEnabled","canChangeSensitive","timeFormat"]),stickerSetIds:e.stickers.added.setIds,stickerSetsById:e.stickers.setsById,defaultReaction:null===(t=e.appConfig)||void 0===t?void 0:t.defaultReaction,theme:n,shouldUseSystemTheme:a}}))((e=>{let{isActive:t,onScreenSelect:n,onReset:r,stickerSetIds:c,stickerSetsById:d,defaultReaction:m,messageTextSize:u,animationLevel:h,messageSendKeyCombo:Z,shouldSuggestStickers:v,shouldLoopStickers:p,timeFormat:E,theme:C,shouldUseSystemTheme:f}=e;const{setSettingOption:b}=(0,s.Sv)(),I=(0,a.sO)(null),{observe:y}=(0,jt.S1)({rootRef:I}),[S,N,k]=(0,ee.Z)(),[w,M]=(0,a.eJ)(),T=(0,g.Z)(),R=[{label:T("EmptyChat.Appearance.Light"),value:"light"},{label:T("EmptyChat.Appearance.Dark"),value:"dark"},{label:T("EmptyChat.Appearance.System"),value:"auto"}],A=i.$b?void 0:[{value:"enter",label:T("lng_settings_send_enter"),subLabel:"New line by Shift + Enter"},{value:"ctrl-enter",label:T(i.jm?"lng_settings_send_cmdenter":"lng_settings_send_ctrlenter"),subLabel:"New line by Enter"}],L=(0,a.I4)((e=>{ta.forEach(((t,n)=>{document.body.classList.toggle(`animation-level-${n}`,e===n)})),b({animationLevel:e})}),[b]),F=(0,a.I4)((e=>{document.documentElement.style.setProperty("--composer-text-size",`${Math.max(e,i.cj?16:15)}px`),document.documentElement.style.setProperty("--message-meta-height",`${Math.floor(1.3125*e)}px`),document.documentElement.style.setProperty("--message-text-size",`${e}px`),document.documentElement.setAttribute("data-message-text-size",e.toString()),b({messageTextSize:e})}),[b]),B=(0,a.I4)((e=>{const t="auto"===e?(0,i.vn)():e;b({theme:t}),b({shouldUseSystemTheme:"auto"===e}),t!==C&&(0,ea.Z)(t,h===o.zy)}),[h,b,C]),x=(0,a.I4)((e=>{b({timeFormat:e}),b({wasTimeFormatSetManually:!0}),(0,Yn.qf)(e)}),[b]),$=(0,a.I4)((e=>{M(e),N()}),[N]),D=(0,a.I4)((e=>{b({messageSendKeyCombo:e})}),[b]),O=(0,a.I4)((e=>{b({shouldSuggestStickers:e})}),[b]),U=(0,a.I4)((e=>{b({shouldLoopStickers:e})}),[b]),G=c&&c.map((e=>{var t;return!(null==d||null===(t=d[e])||void 0===t||!t.installedDate)&&d[e]})).filter(Boolean);return(0,P.ZP)(t,r,n,l.MT.General),a.ZP.createElement("div",{className:"settings-content custom-scroll"},a.ZP.createElement("div",{className:"settings-item pt-3"},a.ZP.createElement("h4",{className:"settings-item-header",dir:T.isRtl?"rtl":void 0},T("SETTINGS")),a.ZP.createElement(se.Z,{label:T("TextSize"),min:12,max:20,value:u,onChange:F}),a.ZP.createElement(_e.Z,{icon:"photo",onClick:()=>n(l.MT.GeneralChatBackground)},T("ChatBackground"))),a.ZP.createElement("div",{className:"settings-item"},a.ZP.createElement("h4",{className:"settings-item-header",dir:T.isRtl?"rtl":void 0},T("Theme")),a.ZP.createElement(gt.Z,{name:"theme",options:R,selected:f?"auto":C,onChange:B})),a.ZP.createElement("div",{className:"settings-item"},a.ZP.createElement("h4",{className:"settings-item-header",dir:T.isRtl?"rtl":void 0},"Time Format"),a.ZP.createElement(gt.Z,{name:"timeformat",options:na,selected:E,onChange:x})),a.ZP.createElement("div",{className:"settings-item"},a.ZP.createElement("h4",{className:"settings-item-header",dir:T.isRtl?"rtl":void 0},"Animation Level"),a.ZP.createElement("p",{className:"settings-item-description",dir:T.isRtl?"rtl":void 0},"Choose the desired animations amount."),a.ZP.createElement(se.Z,{options:ta,value:h,onChange:L})),A&&a.ZP.createElement("div",{className:"settings-item"},a.ZP.createElement("h4",{className:"settings-item-header",dir:T.isRtl?"rtl":void 0},T("VoiceOver.Keyboard")),a.ZP.createElement(gt.Z,{name:"keyboard-send-settings",options:A,onChange:D,selected:Z})),a.ZP.createElement("div",{className:"settings-item"},a.ZP.createElement("h4",{className:"settings-item-header",dir:T.isRtl?"rtl":void 0},T("AccDescrStickers")),m&&a.ZP.createElement(_e.Z,{className:"SettingsDefaultReaction",onClick:()=>n(l.MT.QuickReaction)},a.ZP.createElement(bt.Z,{reaction:m}),a.ZP.createElement("div",{className:"title"},T("DoubleTapSetting"))),a.ZP.createElement(ct.Z,{label:T("SuggestStickers"),checked:v,onCheck:O}),a.ZP.createElement(ct.Z,{label:T("LoopAnimatedStickers"),checked:p,onCheck:U}),a.ZP.createElement("div",{className:"mt-4",ref:I},G&&G.map((e=>a.ZP.createElement(Wn,{key:e.id,stickerSet:e,observeIntersection:y,onClick:$})))),w&&a.ZP.createElement(Qn.Z,{isOpen:S,fromSticker:w,onClose:k})))})));var sa=n(5655);function ra(e){return[parseInt(e.substring(0,2),16),parseInt(e.substring(2,4),16),parseInt(e.substring(4,6),16)]}function la(e){const t=e[0].toString(16),n=e[1].toString(16),a=e[2].toString(16);return(1==t.length?"0"+t:t)+(1==n.length?"0"+n:n)+(1==a.length?"0"+a:a)}function oa(e){let[t,n,a]=e;t/=255,n/=255,a/=255;let s,r,l=Math.max(t,n,a),o=Math.min(t,n,a),i=l,c=l-o;if(r=0==l?0:c/l,l==o)s=0;else{switch(l){case t:s=(n-a)/c+(n.5?Math.max(0,.65*a):Math.max(0,Math.min(1,1-.65*a)),`hsla(${360*t}, ${100*n}%, ${100*a}%, .4)`}var da=n(9524),ma=n(5866);const ua=(0,a.X$)((e=>{var t;let{wallpaper:n,theme:s,isSelected:r,onClick:i}=e;const{slug:c,document:d}=n,u=`wallpaper${d.id}`,h=d.previewBlobUrl,Z=(0,p.Z)(`${u}?size=m`),v=(0,ma.Z)(null===(t=d.thumbnail)||void 0===t?void 0:t.dataUri,Boolean(Z),!0),{transitionClassNames:P}=(0,K.Z)(Boolean(Z||h),void 0,void 0,"slow"),[g,f]=(0,a.eJ)(!1),{mediaData:b,loadProgress:I}=(0,E.Z)(u,!g),y=!1===(0,C.Z)(g),{shouldRender:S,transitionClassNames:N}=(0,K.Z)(g&&!b||c===l.mp,void 0,y,"slow"),k=(0,a.sO)();k.current=s;const w=(0,a.I4)((()=>{(async()=>{const e=await(0,m.gm)(b);await da.save(o.fo,k.current,e),i(c)})()}),[b,i,c]);(0,a.d4)((()=>{b&&w()}),[b,w]);const M=(0,a.I4)((()=>{b?w():f((e=>!e))}),[b,w]),T=(0,Y.Z)("WallpaperTile",r&&"selected");return a.ZP.createElement("div",{className:T,onClick:M},a.ZP.createElement("div",{className:"media-inner"},a.ZP.createElement("canvas",{ref:v,className:"thumbnail"}),a.ZP.createElement("img",{src:Z||h,className:(0,Y.Z)("full-media",P),alt:""}),S&&a.ZP.createElement("div",{className:(0,Y.Z)("spinner-container",N)},a.ZP.createElement(U.Z,{progress:I,onClick:M}))))})),ha=(0,z.P2)((e=>e()),6e4,!0),Za=(0,a.X$)((0,s.c$)((e=>{const t=(0,b.Pu)(e),{background:n,isBlurred:a}=e.settings.themes[t]||{},{loadedWallpapers:s}=e.settings;return{background:n,isBlurred:a,loadedWallpapers:s,theme:t}}))((e=>{let{isActive:t,onScreenSelect:n,onReset:r,background:i,isBlurred:c,loadedWallpapers:d,theme:u}=e;const{loadWallpapers:h,uploadWallpaper:Z,setThemeSettings:v}=(0,s.Sv)(),p=(0,a.sO)();p.current=u,(0,a.d4)((()=>{ha((()=>{h()}))}),[h]);const E=(0,a.I4)((e=>{const{files:t}=e.target;t&&t.length>0&&Z(t[0])}),[Z]),C=(0,a.I4)((()=>{(0,sa.g)("image/jpeg",E,!0)}),[E]),f=(0,a.I4)((()=>{n(l.MT.GeneralChatBackgroundColor)}),[n]),b=(0,a.I4)((()=>{v({theme:u,background:void 0,backgroundColor:void 0,isBlurred:!0,patternColor:"dark"===u?o.Vv:o.g})}),[v,u]),I=(0,a.I4)((e=>{v({theme:p.current,background:e});const t=d&&d.find((t=>t.slug===e));null!=t&&t.document.thumbnail&&async function(e){const t=[0,0,0];let n,a,s,r,l=-4,o=[0,0,0],i=0;const c=document.createElement("canvas"),d=c.getContext&&c.getContext("2d");if(!d)return t;const u=await(0,m.pt)(e);s=u.naturalHeight||u.offsetHeight||u.height,a=u.naturalWidth||u.offsetWidth||u.width,c.height=s,c.width=a,d.drawImage(u,0,0);try{n=d.getImageData(0,0,a,s)}catch(e){return t}for(r=n.data.length;(l+=20){const t=ca(e),n=`#${la(e)}`;v({theme:p.current,backgroundColor:n,patternColor:t})}))}),[d,v]),y=(0,a.I4)((e=>{v({theme:p.current,isBlurred:e.target.checked})}),[v]),S=(0,g.Z)();(0,P.ZP)(t,r,n,l.MT.GeneralChatBackground);const N=(null==d?void 0:d[0])&&d[0].slug===l.mp;return a.ZP.createElement("div",{className:"SettingsGeneralBackground settings-content custom-scroll"},a.ZP.createElement("div",{className:"settings-item pt-3"},a.ZP.createElement(_e.Z,{icon:"camera-add",className:"mb-0",disabled:N,onClick:C},S("UploadImage")),a.ZP.createElement(_e.Z,{icon:"colorize",className:"mb-0",onClick:f},S("SetColor")),a.ZP.createElement(_e.Z,{icon:"favorite",onClick:b},S("ThemeResetToDefaults")),a.ZP.createElement(ct.Z,{label:S("BackgroundBlurred"),checked:Boolean(c),onChange:y})),d?a.ZP.createElement("div",{className:"settings-wallpapers"},d.map((e=>a.ZP.createElement(ua,{wallpaper:e,theme:u,isSelected:i===e.slug,onClick:I})))):a.ZP.createElement(De.Z,null))}))),va=oa(ra("e6ebee")),Pa=["#e6ebee","#b2cee1","#008dd0","#c6e7cb","#c4e1a6","#60b16e","#ccd0af","#a6a997","#7a7072","#fdd7af","#fdb76e","#dd8851"];function ga(e,t){return{colorPosition:[Math.round(e[1]*(t.colorRect.width-1)),Math.round((1-e[2])*(t.colorRect.height-1))],huePosition:Math.round(e[0]*(t.hueRect.width-1))}}function pa(e,t){let{colorPosition:n,huePosition:a}=e;return[a/(t.hueRect.width-1),n[0]/(t.colorRect.width-1),1-n[1]/(t.colorRect.height-1)]}const Ea=(0,a.X$)((0,s.c$)((e=>{const t=(0,b.Pu)(e),{backgroundColor:n}=e.settings.themes[t]||{};return{backgroundColor:n,theme:t}}))((e=>{let{isActive:t,onScreenSelect:n,onReset:r,theme:o,backgroundColor:i}=e;const{setThemeSettings:c}=(0,s.Sv)(),d=(0,a.sO)();d.current=o;const m=(0,a.sO)(null),u=(0,a.sO)(null),h=(0,a.sO)(null),Z=(0,a.sO)(!0),[v,g]=(0,a.eJ)(function(e){return e&&e.startsWith("#")?oa(ra(e.replace("#",""))):va}(i)),p=(0,a.sO)(v);(0,a.d4)((()=>{p.current=v}),[v]);const[E,C,f]=(0,ee.Z)(),[b,I]=(0,a.eJ)(""),[y,N]=(0,a.eJ)(""),k=(0,a.sO)(),w=(0,a.sO)();(0,a.d4)((()=>{const e={offsetLeft:u.current.offsetLeft,...(0,be.ei)(u.current.getBoundingClientRect(),["top","width","height"])},t={offsetLeft:h.current.offsetLeft,...(0,be.ei)(h.current.getBoundingClientRect(),["width"])};function n(t){const n=[Math.min(Math.max(0,t.pageX-e.offsetLeft),e.width-1),Math.min(Math.max(0,t.pageY-e.top+m.current.scrollTop),e.height-1)],{huePosition:a}=ga(p.current,k.current);return g(pa({colorPosition:n,huePosition:a},k.current)),C(),!0}function a(e){const{colorPosition:n}=ga(p.current,k.current),a=Math.min(Math.max(0,e.pageX-t.offsetLeft),t.width-1);return g(pa({colorPosition:n,huePosition:a},k.current)),C(),!0}k.current={colorRect:e,hueRect:t},(0,S.sf)(u.current,{onCapture:n,onDrag:n,onRelease:f,onClick:f,selectorToPreventScroll:".SettingsGeneralBackgroundColor",withCursor:!0}),(0,S.sf)(h.current,{onCapture:a,onDrag:a,onRelease:f,onClick:f,selectorToPreventScroll:".SettingsGeneralBackgroundColor",withCursor:!0})}),[C,f]);const{colorPosition:M=[0,0],huePosition:T=0}=k.current?ga(v,k.current):{},R=la(ia(v)),A=v[0],L=la(ia([A,1,1]));(0,a.d4)((()=>{const e=ia(v),t=`#${la(e)}`;if(I(e.join(", ")),N(t),!Z.current){const n=ca(e);c({theme:d.current,background:void 0,backgroundColor:t,patternColor:n})}Z.current=!1}),[v,c]),(0,a.d4)((()=>{!function(e,t,n,a){let s,r,l;n.current&&a.current?(s=a.current.colorRect.width,r=a.current.colorRect.height,l=n.current):(s=e.offsetWidth,r=e.offsetHeight,l=e.getContext("2d"),e.width=s,e.height=r,n.current=l);const o=l.createImageData(s,r),i=o.data,c=ia([t,1,1]);let d=0;for(let e=0;e{!function(e){const t=e.offsetWidth;e.width=t,e.height=1;const n=e.getContext("2d"),a=n.createImageData(t,1),s=a.data;let r=0;for(let e=0;e{const t=e.currentTarget.value.replace(/[^\d, ]/g,"").slice(0,13);if(t.match(/^\d{1,3},\s?\d{1,3},\s?\d{1,3}$/)){const e=t.split(",").map((e=>Number(e.trim())));g(oa(e))}e.currentTarget.value=t}),[]),B=(0,a.I4)((e=>{const t=e.currentTarget.value.replace(/[^0-9a-fA-F]/g,"").slice(0,6);t.match(/^#?[0-9a-fA-F]{6}$/)&&g(oa(ra(t.replace("#","")))),e.currentTarget.value=t}),[]),x=(0,a.I4)((e=>{g(oa(ra(e.currentTarget.dataset.color.replace("#",""))))}),[]),$=(0,Y.Z)("SettingsGeneralBackgroundColor settings-content custom-scroll",E&&"is-dragging");return(0,P.ZP)(t,r,n,l.MT.GeneralChatBackgroundColor),a.ZP.createElement("div",{ref:m,className:$},a.ZP.createElement("div",{className:"settings-item pt-3"},a.ZP.createElement("div",{ref:u,className:"color-picker"},a.ZP.createElement("canvas",null),a.ZP.createElement("div",{className:"handle",style:`transform: translate(${M[0]}px, ${M[1]}px); background-color: #${R};`})),a.ZP.createElement("div",{ref:h,className:"hue-picker"},a.ZP.createElement("canvas",null),a.ZP.createElement("div",{className:"handle",style:`transform: translateX(${T}px); background-color: #${L};`})),a.ZP.createElement("div",{className:"tools"},a.ZP.createElement(Ue.Z,{value:y,label:"HEX",onChange:B}),a.ZP.createElement(Ue.Z,{value:b,label:"RGB",onChange:F}))),a.ZP.createElement("div",{className:"predefined-colors"},Pa.map((e=>a.ZP.createElement("div",{className:e===`#${R}`?"active":void 0,"data-color":e,style:`background-color: ${e};`,onClick:x})))))})));var Ca=n(8406);const fa=(0,a.X$)((0,s.c$)((e=>({hasPrivateChatsNotifications:Boolean(e.settings.byKey.hasPrivateChatsNotifications),hasPrivateChatsMessagePreview:Boolean(e.settings.byKey.hasPrivateChatsMessagePreview),hasGroupNotifications:Boolean(e.settings.byKey.hasGroupNotifications),hasGroupMessagePreview:Boolean(e.settings.byKey.hasGroupMessagePreview),hasBroadcastNotifications:Boolean(e.settings.byKey.hasBroadcastNotifications),hasBroadcastMessagePreview:Boolean(e.settings.byKey.hasBroadcastMessagePreview),hasContactJoinedNotifications:Boolean(e.settings.byKey.hasContactJoinedNotifications),hasWebNotifications:e.settings.byKey.hasWebNotifications,hasPushNotifications:e.settings.byKey.hasPushNotifications,notificationSoundVolume:e.settings.byKey.notificationSoundVolume})))((e=>{let{isActive:t,onScreenSelect:n,onReset:r,hasPrivateChatsNotifications:o,hasPrivateChatsMessagePreview:i,hasGroupNotifications:c,hasGroupMessagePreview:d,hasBroadcastNotifications:m,hasBroadcastMessagePreview:u,hasContactJoinedNotifications:h,hasPushNotifications:Z,hasWebNotifications:v,notificationSoundVolume:p}=e;const{loadNotificationSettings:E,updateContactSignUpNotification:C,updateNotificationSettings:f,updateWebNotificationSettings:b}=(0,s.Sv)();(0,a.d4)((()=>{E()}),[E]);const I=(0,_.Z)(500,!0),y=(0,a.I4)(((e,t,n)=>{const a="contact"===t?!o:!("group"===t?c:m),s="contact"===t?i:"group"===t?d:u;f({peerType:t,..."silent"===n&&{isSilent:!e.target.checked,shouldShowPreviews:s},..."showPreviews"===n&&{shouldShowPreviews:e.target.checked,isSilent:a}})}),[u,m,d,c,i,o,f]),S=(0,a.I4)((e=>{b({hasWebNotifications:e.target.checked})}),[b]),N=(0,a.I4)((e=>{b({hasPushNotifications:e.target.checked})}),[b]),k=(0,a.I4)((e=>{y(e,"contact","silent")}),[y]),w=(0,a.I4)((e=>{y(e,"contact","showPreviews")}),[y]),M=(0,a.I4)((e=>{y(e,"group","silent")}),[y]),T=(0,a.I4)((e=>{y(e,"group","showPreviews")}),[y]),R=(0,a.I4)((e=>{y(e,"broadcast","silent")}),[y]),A=(0,a.I4)((e=>{y(e,"broadcast","showPreviews")}),[y]),L=(0,a.I4)((e=>{C({isSilent:!e.target.checked})}),[C]),F=(0,a.I4)((e=>{b({notificationSoundVolume:e}),I((()=>(0,Ca.q3)(void 0,e)))}),[I,b]),B=(0,g.Z)();return(0,P.ZP)(t,r,n,l.MT.Notifications),a.ZP.createElement("div",{className:"settings-content custom-scroll"},a.ZP.createElement("div",{className:"settings-item"},a.ZP.createElement("h4",{className:"settings-item-header",dir:B.isRtl?"rtl":void 0},"Web notifications"),a.ZP.createElement(ct.Z,{label:"Web notifications",subLabel:B(v?"UserInfo.NotificationsEnabled":"UserInfo.NotificationsDisabled"),checked:v,onChange:S}),a.ZP.createElement(ct.Z,{label:"Offline notifications",disabled:!v,subLabel:B(Z?"UserInfo.NotificationsEnabled":"UserInfo.NotificationsDisabled"),checked:Z,onChange:N}),a.ZP.createElement("div",{className:"settings-item-slider"},a.ZP.createElement(se.Z,{label:"Sound",min:0,max:10,value:p,onChange:F}))),a.ZP.createElement("div",{className:"settings-item"},a.ZP.createElement("h4",{className:"settings-item-header",dir:B.isRtl?"rtl":void 0},B("AutodownloadPrivateChats")),a.ZP.createElement(ct.Z,{label:B("NotificationsForPrivateChats"),subLabel:B(o?"UserInfo.NotificationsEnabled":"UserInfo.NotificationsDisabled"),checked:o,onChange:k}),a.ZP.createElement(ct.Z,{label:B("MessagePreview"),disabled:!o,subLabel:B(i?"UserInfo.NotificationsEnabled":"UserInfo.NotificationsDisabled"),checked:i,onChange:w})),a.ZP.createElement("div",{className:"settings-item"},a.ZP.createElement("h4",{className:"settings-item-header",dir:B.isRtl?"rtl":void 0},B("FilterGroups")),a.ZP.createElement(ct.Z,{label:B("NotificationsForGroups"),subLabel:B(c?"UserInfo.NotificationsEnabled":"UserInfo.NotificationsDisabled"),checked:c,onChange:M}),a.ZP.createElement(ct.Z,{label:B("MessagePreview"),disabled:!c,subLabel:B(d?"UserInfo.NotificationsEnabled":"UserInfo.NotificationsDisabled"),checked:d,onChange:T})),a.ZP.createElement("div",{className:"settings-item"},a.ZP.createElement("h4",{className:"settings-item-header",dir:B.isRtl?"rtl":void 0},B("FilterChannels")),a.ZP.createElement(ct.Z,{label:B("NotificationsForChannels"),subLabel:B(m?"UserInfo.NotificationsEnabled":"UserInfo.NotificationsDisabled"),checked:m,onChange:R}),a.ZP.createElement(ct.Z,{label:B("MessagePreview"),disabled:!m,subLabel:B(u?"UserInfo.NotificationsEnabled":"UserInfo.NotificationsDisabled"),checked:u,onChange:A})),a.ZP.createElement("div",{className:"settings-item"},a.ZP.createElement("h4",{className:"settings-item-header",dir:B.isRtl?"rtl":void 0},B("PhoneOther")),a.ZP.createElement(ct.Z,{label:B("ContactJoined"),checked:h,onChange:L})))}))),ba=(0,a.X$)((0,s.c$)((e=>{var t,n,a,s,r;const{settings:{byKey:{hasPassword:l,isSensitiveEnabled:o,canChangeSensitive:i},privacy:c},blocked:d}=e;return{hasPassword:l,blockedCount:d.totalCount,isSensitiveEnabled:o,canChangeSensitive:i,visibilityPrivacyPhoneNumber:null===(t=c.phoneNumber)||void 0===t?void 0:t.visibility,visibilityPrivacyLastSeen:null===(n=c.lastSeen)||void 0===n?void 0:n.visibility,visibilityPrivacyProfilePhoto:null===(a=c.profilePhoto)||void 0===a?void 0:a.visibility,visibilityPrivacyForwarding:null===(s=c.forwards)||void 0===s?void 0:s.visibility,visibilityPrivacyGroupChats:null===(r=c.chatInvite)||void 0===r?void 0:r.visibility}}))((e=>{let{isActive:t,onScreenSelect:n,onReset:r,hasPassword:o,blockedCount:i,isSensitiveEnabled:c,canChangeSensitive:d,visibilityPrivacyPhoneNumber:m,visibilityPrivacyLastSeen:u,visibilityPrivacyProfilePhoto:h,visibilityPrivacyForwarding:Z,visibilityPrivacyGroupChats:v}=e;const{loadPrivacySettings:p,loadBlockedContacts:E,loadAuthorizations:C,loadContentSettings:f,updateContentSettings:b}=(0,s.Sv)();(0,a.d4)((()=>{E(),C(),p(),f()}),[E,C,p,f]);const I=(0,g.Z)();function y(e){switch(e){case"everybody":return I("P2PEverybody");case"contacts":return I("P2PContacts");case"nobody":return I("P2PNobody")}}return(0,P.ZP)(t,r,n,l.MT.Privacy),a.ZP.createElement("div",{className:"settings-content custom-scroll"},a.ZP.createElement("div",{className:"settings-item pt-3"},a.ZP.createElement(_e.Z,{icon:"delete-user",narrow:!0,onClick:()=>n(l.MT.PrivacyBlockedUsers)},a.ZP.createElement("div",{className:"multiline-menu-item"},a.ZP.createElement("span",{className:"title"},I("BlockedUsers")),i>0&&a.ZP.createElement("span",{className:"subtitle",dir:"auto"},I("Users",i)))),a.ZP.createElement(_e.Z,{icon:"lock",narrow:!0,onClick:()=>n(o?l.MT.TwoFaEnabled:l.MT.TwoFaDisabled)},a.ZP.createElement("div",{className:"multiline-menu-item"},a.ZP.createElement("span",{className:"title"},I("TwoStepVerification")),a.ZP.createElement("span",{className:"subtitle",dir:"auto"},I(o?"PasswordOn":"PasswordOff"))))),a.ZP.createElement("div",{className:"settings-item"},a.ZP.createElement("h4",{className:"settings-item-header mb-4",dir:I.isRtl?"rtl":void 0},I("PrivacyTitle")),a.ZP.createElement(_e.Z,{narrow:!0,className:"no-icon",onClick:()=>n(l.MT.PrivacyPhoneNumber)},a.ZP.createElement("div",{className:"multiline-menu-item"},a.ZP.createElement("span",{className:"title"},I("PrivacyPhoneTitle")),a.ZP.createElement("span",{className:"subtitle",dir:"auto"},y(m)))),a.ZP.createElement(_e.Z,{narrow:!0,className:"no-icon",onClick:()=>n(l.MT.PrivacyLastSeen)},a.ZP.createElement("div",{className:"multiline-menu-item"},a.ZP.createElement("span",{className:"title"},I("LastSeenTitle")),a.ZP.createElement("span",{className:"subtitle",dir:"auto"},y(u)))),a.ZP.createElement(_e.Z,{narrow:!0,className:"no-icon",onClick:()=>n(l.MT.PrivacyProfilePhoto)},a.ZP.createElement("div",{className:"multiline-menu-item"},a.ZP.createElement("span",{className:"title"},I("PrivacyProfilePhotoTitle")),a.ZP.createElement("span",{className:"subtitle",dir:"auto"},y(h)))),a.ZP.createElement(_e.Z,{narrow:!0,className:"no-icon",onClick:()=>n(l.MT.PrivacyForwarding)},a.ZP.createElement("div",{className:"multiline-menu-item"},a.ZP.createElement("span",{className:"title"},I("PrivacyForwardsTitle")),a.ZP.createElement("span",{className:"subtitle",dir:"auto"},y(Z)))),a.ZP.createElement(_e.Z,{narrow:!0,className:"no-icon",onClick:()=>n(l.MT.PrivacyGroupChats)},a.ZP.createElement("div",{className:"multiline-menu-item"},a.ZP.createElement("span",{className:"title"},I("WhoCanAddMe")),a.ZP.createElement("span",{className:"subtitle",dir:"auto"},y(v))))),d&&a.ZP.createElement("div",{className:"settings-item"},a.ZP.createElement("h4",{className:"settings-item-header",dir:I.isRtl?"rtl":void 0},I("lng_settings_sensitive_title")),a.ZP.createElement(ct.Z,{label:I("lng_settings_sensitive_disable_filtering"),subLabel:I("lng_settings_sensitive_about"),checked:Boolean(c),disabled:!d,onCheck:b})))}))),Ia=(0,a.X$)((0,s.c$)((e=>({languages:e.settings.byKey.languages,language:e.settings.byKey.language})))((e=>{let{isActive:t,onScreenSelect:n,onReset:r,languages:o,language:i}=e;const{loadLanguages:c,setSettingOption:d}=(0,s.Sv)(),[m,u]=(0,a.eJ)(i),[h,Z,v]=(0,ee.Z)();(0,a.d4)((()=>{c()}),[c]);const g=(0,a.I4)((e=>{u(e),Z(),(0,Yn.m0)(e,(()=>{v(),d({language:e})}))}),[Z,v,d]),p=(0,a.Ye)((()=>o?function(e){const t=(window.navigator.language||"en").toLowerCase(),n=t.substr(0,2);return e.map((e=>{let{langCode:t,nativeName:n,name:a}=e;return{value:t,label:n,subLabel:a}})).sort((e=>!t||e.value!==t&&e.value!==n?0:-1))}(o):void 0),[o]);return(0,P.ZP)(t,r,n,l.MT.Language),a.ZP.createElement("div",{className:"settings-content settings-item settings-language custom-scroll settings-item--first"},p?a.ZP.createElement(gt.Z,{name:"keyboard-send-settings",options:p,selected:m,loadingOption:h?m:void 0,onChange:g}):a.ZP.createElement(De.Z,null))})));function ya(e){switch(e){case l.MT.PrivacyPhoneNumber:case l.MT.PrivacyPhoneNumberAllowedContacts:case l.MT.PrivacyPhoneNumberDeniedContacts:return"phoneNumber";case l.MT.PrivacyLastSeen:case l.MT.PrivacyLastSeenAllowedContacts:case l.MT.PrivacyLastSeenDeniedContacts:return"lastSeen";case l.MT.PrivacyProfilePhoto:case l.MT.PrivacyProfilePhotoAllowedContacts:case l.MT.PrivacyProfilePhotoDeniedContacts:return"profilePhoto";case l.MT.PrivacyForwarding:case l.MT.PrivacyForwardingAllowedContacts:case l.MT.PrivacyForwardingDeniedContacts:return"forwards";case l.MT.PrivacyGroupChats:case l.MT.PrivacyGroupChatsAllowedContacts:case l.MT.PrivacyGroupChatsDeniedContacts:return"chatInvite"}}const Sa=(0,a.X$)((0,s.c$)(((e,t)=>{let n,{screen:a}=t;const{chats:{byId:s},settings:{privacy:r}}=e;switch(a){case l.MT.PrivacyPhoneNumber:n=r.phoneNumber;break;case l.MT.PrivacyLastSeen:n=r.lastSeen;break;case l.MT.PrivacyProfilePhoto:n=r.profilePhoto;break;case l.MT.PrivacyForwarding:n=r.forwards;break;case l.MT.PrivacyGroupChats:n=r.chatInvite}return n?{...n,chatsById:s}:{}}))((e=>{let{screen:t,isActive:n,onScreenSelect:r,onReset:o,visibility:i,allowUserIds:c,allowChatIds:d,blockUserIds:m,blockChatIds:u,chatsById:h}=e;const{setPrivacyVisibility:Z}=(0,s.Sv)(),v=(0,g.Z)(),p=(0,a.Ye)((()=>{switch(t){case l.MT.PrivacyProfilePhoto:case l.MT.PrivacyGroupChats:return[{value:"everybody",label:v("P2PEverybody")},{value:"contacts",label:v("P2PContacts")}];default:return[{value:"everybody",label:v("P2PEverybody")},{value:"contacts",label:v("P2PContacts")},{value:"nobody",label:v("P2PNobody")}]}}),[v,t]),E={shouldShowDenied:"nobody"!==i,shouldShowAllowed:"everybody"!==i},C=ya(t),f=(0,a.Ye)((()=>{switch(t){case l.MT.PrivacyPhoneNumber:return v("PrivacyPhoneTitle");case l.MT.PrivacyLastSeen:return v("LastSeenTitle");case l.MT.PrivacyProfilePhoto:return v("PrivacyProfilePhotoTitle");case l.MT.PrivacyForwarding:return v("PrivacyForwardsTitle");case l.MT.PrivacyGroupChats:return v("WhoCanAddMe");default:return}}),[v,t]);(0,P.ZP)(n,o,r,t);const b=(0,a.Ye)((()=>{if(t===l.MT.PrivacyLastSeen)return v("CustomHelp")}),[v,t]),I=(()=>{switch(t){case l.MT.PrivacyPhoneNumber:return l.MT.PrivacyPhoneNumberAllowedContacts;case l.MT.PrivacyLastSeen:return l.MT.PrivacyLastSeenAllowedContacts;case l.MT.PrivacyProfilePhoto:return l.MT.PrivacyProfilePhotoAllowedContacts;case l.MT.PrivacyForwarding:return l.MT.PrivacyForwardingAllowedContacts;default:return l.MT.PrivacyGroupChatsAllowedContacts}})(),y=(()=>{switch(t){case l.MT.PrivacyPhoneNumber:return l.MT.PrivacyPhoneNumberDeniedContacts;case l.MT.PrivacyLastSeen:return l.MT.PrivacyLastSeenDeniedContacts;case l.MT.PrivacyProfilePhoto:return l.MT.PrivacyProfilePhotoDeniedContacts;case l.MT.PrivacyForwarding:return l.MT.PrivacyForwardingDeniedContacts;default:return l.MT.PrivacyGroupChatsDeniedContacts}})(),S=(0,a.Ye)((()=>c&&d&&h?d.reduce(((e,t)=>e+(h[t]?h[t].membersCount:0)),c.length):0),[d,c,h]),N=(0,a.Ye)((()=>m&&u&&h?u.reduce(((e,t)=>e+(h[t]?h[t].membersCount:0)),m.length):0),[u,m,h]),k=(0,a.I4)((e=>{Z({privacyKey:C,visibility:e})}),[C,Z]);return a.ZP.createElement("div",{className:"settings-content custom-scroll"},a.ZP.createElement("div",{className:"settings-item"},a.ZP.createElement("h4",{className:"settings-item-header",dir:v.isRtl?"rtl":void 0},f),a.ZP.createElement(gt.Z,{name:`visibility-${C}`,options:p,onChange:k,selected:i}),b&&a.ZP.createElement("p",{className:"settings-item-description-larger",dir:v.isRtl?"rtl":void 0},b)),a.ZP.createElement("div",{className:"settings-item"},a.ZP.createElement("h4",{className:"settings-item-header mb-4",dir:v.isRtl?"rtl":void 0},v("PrivacyExceptions")),E.shouldShowAllowed&&a.ZP.createElement(_e.Z,{narrow:!0,icon:"add-user",onClick:()=>{r(I)}},a.ZP.createElement("div",{className:"multiline-menu-item full-size"},S>0&&a.ZP.createElement("span",{className:"date",dir:"auto"},"+",S),a.ZP.createElement("span",{className:"title"},v("AlwaysShareWith")),a.ZP.createElement("span",{className:"subtitle"},v("EditAdminAddUsers")))),E.shouldShowDenied&&a.ZP.createElement(_e.Z,{narrow:!0,icon:"delete-user",onClick:()=>{r(y)}},a.ZP.createElement("div",{className:"multiline-menu-item full-size"},N>0&&a.ZP.createElement("span",{className:"date",dir:"auto"},"−",N),a.ZP.createElement("span",{className:"title"},v("NeverShareWith")),a.ZP.createElement("span",{className:"subtitle"},v("EditAdminAddUsers"))))))})));function Na(e){const t=e.platform.toLowerCase(),n=e.deviceModel.toLowerCase(),a=e.systemVersion.toLowerCase();return n.includes("xbox")?"xbox":n.includes("chrome")&&!n.includes("chromebook")?"chrome":n.includes("brave")?"brave":n.includes("vivaldi")?"vivaldi":n.includes("safari")?"safari":n.includes("firefox")?"firefox":n.includes("opera")?"opera":n.includes("samsungbrowser")?"samsung":t.includes("android")?"android":n.includes("iphone")||n.includes("ipad")||t.includes("ios")||t.includes("macos")||a.includes("macos")?"apple":t.includes("ubuntu")||a.includes("ubuntu")?"ubuntu":t.includes("linux")||a.includes("linux")?"linux":t.includes("windows")||a.includes("windows")?"windows":"unknown"}function ka(e){return[e.region,e.country].filter(Boolean).join(", ")}const wa=(0,a.X$)((0,s.c$)((e=>({activeSessions:e.activeSessions})))((e=>{let{isActive:t,onScreenSelect:n,onReset:r,activeSessions:o}=e;const{terminateAuthorization:i,terminateAllAuthorizations:c}=(0,s.Sv)(),[d,m,u]=(0,ee.Z)(),h=(0,a.I4)((e=>{i({hash:e})}),[i]),Z=(0,a.I4)((()=>{u(),c()}),[u,c]),v=(0,a.Ye)((()=>o.find((e=>e.isCurrent))),[o]),p=(0,a.Ye)((()=>o.filter((e=>!e.isCurrent))),[o]),E=(0,g.Z)();return(0,P.ZP)(t,r,n,l.MT.ActiveSessions),a.ZP.createElement("div",{className:"settings-content custom-scroll SettingsActiveSessions"},v&&(f=v,a.ZP.createElement("div",{className:"settings-item"},a.ZP.createElement("h4",{className:"settings-item-header mb-4",dir:E.isRtl?"rtl":void 0},E("AuthSessions.CurrentSession")),a.ZP.createElement(_e.Z,{narrow:!0,inactive:!0,icon:`device-${Na(f)} icon-device`},a.ZP.createElement("div",{className:"multiline-menu-item",dir:"auto"},a.ZP.createElement("span",{className:"title",dir:"auto"},f.deviceModel),a.ZP.createElement("span",{className:"subtitle black tight"},f.appName," ",f.appVersion,", ",f.platform," ",f.systemVersion),a.ZP.createElement("span",{className:"subtitle"},f.ip," - ",ka(f)))),a.ZP.createElement(_e.Z,{className:"destructive mb-0 no-icon",icon:"stop",ripple:!0,narrow:!0,onClick:m},E("TerminateAllSessions")))),p&&(C=p,a.ZP.createElement("div",{className:"settings-item"},a.ZP.createElement("h4",{className:"settings-item-header mb-4",dir:E.isRtl?"rtl":void 0},E("OtherSessions")),C.map((function(e){return a.ZP.createElement(_e.Z,{key:e.hash,ripple:!0,narrow:!0,contextActions:[{title:"Terminate",icon:"stop",handler:()=>{h(e.hash)}}],icon:`device-${Na(e)} icon-device`},a.ZP.createElement("div",{className:"multiline-menu-item full-size",dir:"auto"},a.ZP.createElement("span",{className:"date"},(0,te.VX)(E,1e3*e.dateActive)),a.ZP.createElement("span",{className:"title"},e.deviceModel),a.ZP.createElement("span",{className:"subtitle black tight"},e.appName," ",e.appVersion,", ",e.platform," ",e.systemVersion),a.ZP.createElement("span",{className:"subtitle"},e.ip," ",ka(e))))})))),p&&a.ZP.createElement(Qe.Z,{isOpen:d,onClose:u,text:"Are you sure you want to terminate all other sessions?",confirmLabel:"Terminate All Other Sessions",confirmHandler:Z,confirmIsDestructive:!0}));var C,f}))),Ma=(0,a.X$)((0,s.c$)((e=>{const{users:{byId:t},blocked:{ids:n},contactList:a,currentUserId:s}=e;return{usersById:t,blockedIds:n,contactIds:null==a?void 0:a.userIds,localContactIds:e.userSearch.localUserIds,currentUserId:s}}))((e=>{let{usersById:t,blockedIds:n,contactIds:r,localContactIds:l,currentUserId:o,isOpen:i,onClose:c}=e;const{loadContactList:d,setUserSearchQuery:m,blockContact:u}=(0,s.Sv)(),h=(0,g.Z)(),[Z,v]=(0,a.eJ)(""),P=(0,a.sO)(null);(0,a.d4)((()=>{m({query:Z})}),[Z,m]);const p=(0,a.Ye)((()=>{const e=(0,be.Tw)([...r||[],...l||[]].filter((e=>e!==o&&!n.includes(e))));return(0,f.kK)(e,t,Z).sort(((e,n)=>{const a=(0,f.Js)(t[e])||"",s=(0,f.Js)(t[n])||"";return a.localeCompare(s)}))}),[n,r,o,Z,l,t]),E=(0,a.I4)((e=>{const{id:n,accessHash:a}=t[e]||{};n&&a&&(u({contactId:n,accessHash:a}),c())}),[u,c,t]);return a.ZP.createElement(ze,{isOpen:i,chatOrUserIds:p,filterRef:P,filterPlaceholder:h("BlockedUsers.BlockUser"),filter:Z,onFilterChange:v,loadMore:d,onSelectChatOrUser:E,onClose:c})}))),Ta=(0,a.X$)((0,s.c$)((e=>{const{chats:{byId:t},users:{byId:n},blocked:{ids:a},countryList:{phoneCodes:s}}=e;return{chatsByIds:t,usersByIds:n,blockedIds:a,phoneCodeList:s}}))((e=>{let{isActive:t,onScreenSelect:n,onReset:r,chatsByIds:i,usersByIds:c,blockedIds:d,phoneCodeList:m}=e;const{unblockContact:u}=(0,s.Sv)(),h=(0,g.Z)(),[Z,v,p]=(0,ee.Z)(),E=(0,a.I4)((e=>{u({contactId:e})}),[u]);return(0,P.ZP)(t,r,n,l.MT.PrivacyBlockedUsers),a.ZP.createElement("div",{className:"settings-fab-wrapper"},a.ZP.createElement("div",{className:"settings-content infinite-scroll"},a.ZP.createElement("div",{className:"settings-item no-border"},a.ZP.createElement("p",{className:"settings-item-description-larger mt-0 mb-2",dir:h.isRtl?"rtl":void 0},h("BlockedUsersInfo"))),a.ZP.createElement("div",{className:"chat-list custom-scroll"},null!=d&&d.length?a.ZP.createElement("div",{className:"scroll-container"},d.map(((e,t)=>function(e,t,n){const s=(0,f.YC)(e),r=s?c[e]:void 0,l=s?void 0:i[e],d=(0,Y.Z)("Chat chat-item-clickable blocked-list-item small-icon",s?"private":"group");return a.ZP.createElement(_e.Z,{key:e,className:d,ripple:!0,narrow:!0,contextActions:[{title:"Unblock",icon:"unlock",handler:()=>{E(e)}}],style:`top: ${(0+t)*o.rS}px;`},a.ZP.createElement(we.Z,{size:"medium",user:r,chat:l}),a.ZP.createElement("div",{className:"contact-info",dir:"auto"},a.ZP.createElement("h3",{dir:"auto"},(0,ke.Z)((s?(0,f.Js)(r):(0,f.U)(h,l))||"")),(null==r?void 0:r.phoneNumber)&&a.ZP.createElement("div",{className:"contact-phone",dir:"auto"},(0,it.WZ)(m,r.phoneNumber)),r&&!r.phoneNumber&&r.username&&a.ZP.createElement("div",{className:"contact-username",dir:"auto"},"@",r.username)))}(e,t)))):d&&!d.length?a.ZP.createElement("div",{className:"no-results",dir:"auto"},h("NoBlocked")):a.ZP.createElement(De.Z,{key:"loading"}))),a.ZP.createElement(Sn.Z,{isShown:!0,onClick:v,ariaLabel:h("BlockContact")},a.ZP.createElement("i",{className:"icon-add"})),a.ZP.createElement(Ma,{isOpen:Z,onClose:p}))})));var Ra=n(7854);const Aa=(0,a.X$)((0,s.c$)((e=>({animatedEmoji:(0,b.zB)(e,"🔐")})))((e=>{let{isActive:t,onReset:n,animatedEmoji:s,onScreenSelect:r}=e;const o=(0,g.Z)();return(0,P.ZP)(t,n,r,l.MT.TwoFaEnabled),a.ZP.createElement("div",{className:"settings-content two-fa custom-scroll"},a.ZP.createElement("div",{className:"settings-content-header no-border"},a.ZP.createElement(Ra.Z,{sticker:s,size:"large"}),a.ZP.createElement("p",{className:"settings-item-description mb-3",dir:"auto"},(0,ke.Z)(o("EnabledPasswordText"),["br"]))),a.ZP.createElement("div",{className:"settings-item pt-0"},a.ZP.createElement(_e.Z,{icon:"edit",onClick:()=>r(l.MT.TwoFaChangePasswordCurrent)},o("ChangePassword")),a.ZP.createElement(_e.Z,{icon:"password-off",onClick:()=>r(l.MT.TwoFaTurnOff)},o("TurnPasswordOff")),a.ZP.createElement(_e.Z,{icon:"email",onClick:()=>r(l.MT.TwoFaRecoveryEmailCurrentPassword)},o("SetRecoveryEmail"))))})));var La=n(3490),Fa=n(9364);const Ba=(0,a.X$)((e=>{let{screen:t,isActive:n,onScreenSelect:s,onReset:r,error:l,isLoading:o,expectedPassword:i,placeholder:c="Current Password",hint:d,submitLabel:m,clearError:u,onSubmit:h}=e;const[Z,v]=(0,a.eJ)(""),[p,E]=(0,a.eJ)(!1),C=(0,a.I4)((e=>{i&&e!==i?v("Passwords Should Be Equal"):h(e)}),[h,i]),f=(0,a.I4)((()=>{u&&u(),v("")}),[u]),b=(0,g.Z)();return(0,P.ZP)(n,r,s,t),a.ZP.createElement("div",{className:"settings-content two-fa custom-scroll"},a.ZP.createElement("div",{className:"settings-content-header no-border"},a.ZP.createElement(La.Z,{isBig:!0,isPasswordVisible:p})),a.ZP.createElement("div",{className:"settings-item pt-0"},a.ZP.createElement(Fa.Z,{error:Z||l,hint:d,placeholder:c,submitLabel:m||b("Next"),clearError:f,isLoading:o,isPasswordVisible:p,onChangePasswordVisibility:E,onSubmit:C})))})),xa=(0,a.X$)((0,s.c$)((e=>({animatedEmoji:(0,b.zB)(e,"🔐")})))((e=>{let{isActive:t,onScreenSelect:n,onReset:s,animatedEmoji:r,onStart:o}=e;const i=(0,g.Z)();return(0,P.ZP)(t,s,n,l.MT.TwoFaDisabled),a.ZP.createElement("div",{className:"settings-content two-fa custom-scroll"},a.ZP.createElement("div",{className:"settings-content-header no-border"},a.ZP.createElement(Ra.Z,{sticker:r,size:"large"}),a.ZP.createElement("p",{className:"settings-item-description mb-3",dir:"auto"},i("SetAdditionalPasswordInfo"))),a.ZP.createElement("div",{className:"settings-item pt-0"},a.ZP.createElement(B.Z,{onClick:o},i("EditAdminTransferSetPassword"))))}))),$a=i.wB?550:400,Da=(0,a.X$)((0,s.c$)(((e,t)=>{let{icon:n}=t;return{animatedEmoji:(0,b.zB)(e,"email"===n?"💌":"💡")}}))((e=>{let{animatedEmoji:t,type:n="text",isLoading:s,error:r,placeholder:l,shouldConfirm:o,clearError:c,onSubmit:d,isActive:m,onScreenSelect:u,onReset:h,screen:Z}=e;const v=(0,a.sO)(null),[p,E]=(0,a.eJ)(""),[C,f,b]=(0,ee.Z)(!1);(0,a.d4)((()=>{i.$b||setTimeout((()=>{v.current.focus()}),$a)}),[]);const I=(0,a.I4)((e=>{r&&c&&c(),E(e.target.value)}),[c,r]),y=(0,a.I4)((()=>{d()}),[d]),S=(0,a.I4)((()=>{b(),d()}),[d,b]),N=(0,g.Z)();return(0,P.ZP)(m,h,u,Z),a.ZP.createElement("div",{className:"settings-content two-fa custom-scroll"},a.ZP.createElement("div",{className:"settings-content-header no-border"},a.ZP.createElement(Ra.Z,{sticker:t,size:"large"})),a.ZP.createElement("div",{className:"settings-item pt-0"},a.ZP.createElement("form",{action:"",onSubmit:e=>{e.preventDefault(),v.current&&d(p)}},a.ZP.createElement(Ue.Z,{ref:v,value:p,inputMode:n,label:l,error:r,onChange:I}),p?a.ZP.createElement(B.Z,{type:"submit",isLoading:s,ripple:!0},N("Continue")):a.ZP.createElement(B.Z,{isText:!0,isLoading:s,ripple:!0,onClick:o?f:y},N("YourEmailSkip"))),o&&a.ZP.createElement(Oe.Z,{className:"narrow",isOpen:C,title:N("YourEmailSkipWarning"),onClose:b},(0,ke.Z)(N("YourEmailSkipWarningText"),["br","simple_markdown"]),a.ZP.createElement("div",{className:"dialog-buttons"},a.ZP.createElement(B.Z,{color:"danger",ripple:!0,isText:!0,className:"confirm-dialog-button",onClick:S},N("YourEmailSkip")),a.ZP.createElement(B.Z,{color:"primary",ripple:!0,isText:!0,className:"confirm-dialog-button",onClick:b},N("Cancel"))))))}))),Oa=(0,a.X$)((0,s.c$)((e=>({animatedEmoji:(0,b.zB)(e,"🥳")})))((e=>{let{isActive:t,onReset:n,animatedEmoji:s,onScreenSelect:r}=e;const o=(0,g.Z)(),i=(0,a.I4)((()=>{r(l.MT.Privacy)}),[r]);return(0,P.ZP)(t,n,r,l.MT.TwoFaCongratulations),a.ZP.createElement("div",{className:"settings-content two-fa custom-scroll"},a.ZP.createElement("div",{className:"settings-content-header no-border"},a.ZP.createElement(Ra.Z,{sticker:s,size:"large"}),a.ZP.createElement("p",{className:"settings-item-description mb-3",dir:"auto"},o("TwoStepVerificationPasswordSetInfo"))),a.ZP.createElement("div",{className:"settings-item pt-0"},a.ZP.createElement(B.Z,{onClick:i},o("TwoStepVerificationPasswordReturnSettings"))))}))),Ua=i.wB?550:400,Ga=(0,a.X$)((0,s.c$)((e=>({animatedEmoji:(0,b.zB)(e,"💌"),codeLength:e.twoFaSettings.waitingEmailCodeLength})))((e=>{let{animatedEmoji:t,codeLength:n,isLoading:s,error:r,clearError:l,onSubmit:o,isActive:c,onScreenSelect:d,onReset:m,screen:u}=e;const h=(0,a.sO)(null),[Z,v]=(0,a.eJ)("");(0,a.d4)((()=>{i.$b||setTimeout((()=>{h.current.focus()}),Ua)}),[]);const p=(0,g.Z)();(0,P.ZP)(c,m,d,u);const E=(0,a.I4)((e=>{r&&l&&l();const t=e.target.value.slice(0,n);t.length===n&&o(t),v(t),e.target.value=t}),[l,n,r,o]);return a.ZP.createElement("div",{className:"settings-content two-fa custom-scroll"},a.ZP.createElement("div",{className:"settings-content-header no-border"},a.ZP.createElement(Ra.Z,{sticker:t,size:"large"})),a.ZP.createElement("div",{className:"settings-item pt-0"},a.ZP.createElement(Ue.Z,{value:Z,ref:h,inputMode:"decimal",label:p("YourEmailCode"),error:r,onChange:E}),s&&a.ZP.createElement(De.Z,null)))}))),_a=(0,a.X$)((0,s.c$)((e=>({...e.twoFaSettings})))((e=>{let{currentScreen:t,shownScreen:n,state:r,hint:o,isLoading:i,error:c,waitingEmailCodeLength:d,dispatch:m,isActive:u,onScreenSelect:h,onReset:Z}=e;const{updatePassword:v,checkPassword:P,clearTwoFaError:p,updateRecoveryEmail:E,provideTwoFaEmailCode:C,clearPassword:f}=(0,s.Sv)();(0,a.d4)((()=>{d&&(t===l.MT.TwoFaNewPasswordEmail?h(l.MT.TwoFaNewPasswordEmailCode):t===l.MT.TwoFaRecoveryEmail&&h(l.MT.TwoFaRecoveryEmailCode))}),[t,h,d]);const b=(0,a.I4)((()=>{m({type:"reset"}),h(l.MT.TwoFaNewPassword)}),[m,h]),I=(0,a.I4)((e=>{m({type:"setPassword",payload:e}),h(l.MT.TwoFaNewPasswordConfirm)}),[m,h]),y=(0,a.I4)((()=>{h(l.MT.TwoFaNewPasswordHint)}),[h]),S=(0,a.I4)((e=>{m({type:"setHint",payload:e}),h(l.MT.TwoFaNewPasswordEmail)}),[m,h]),N=(0,a.I4)((e=>{m({type:"setEmail",payload:e}),v({...r,email:e,onSuccess:()=>{h(l.MT.TwoFaCongratulations)}})}),[m,h,r,v]),k=(0,a.I4)((e=>{m({type:"setCurrentPassword",payload:e}),P({currentPassword:e,onSuccess:()=>{h(l.MT.TwoFaChangePasswordNew)}})}),[P,m,h]),w=(0,a.I4)((e=>{m({type:"setPassword",payload:e}),h(l.MT.TwoFaChangePasswordConfirm)}),[m,h]),M=(0,a.I4)((()=>{h(l.MT.TwoFaChangePasswordHint)}),[h]),T=(0,a.I4)((e=>{m({type:"setHint",payload:e}),v({...r,hint:e,onSuccess:()=>{h(l.MT.TwoFaCongratulations)}})}),[m,h,r,v]),R=(0,a.I4)((e=>{f({currentPassword:e,onSuccess:()=>{h(l.MT.Privacy)}})}),[f,h]),A=(0,a.I4)((e=>{m({type:"setCurrentPassword",payload:e}),P({currentPassword:e,onSuccess:()=>{h(l.MT.TwoFaRecoveryEmail)}})}),[P,m,h]),L=(0,a.I4)((e=>{m({type:"setEmail",payload:e}),E({...r,email:e,onSuccess:()=>{h(l.MT.TwoFaCongratulations)}})}),[m,h,r,E]),F=(0,a.I4)((e=>{C({code:e})}),[C]),B=(0,g.Z)();switch(t){case l.MT.TwoFaDisabled:return a.ZP.createElement(xa,{onStart:b,onScreenSelect:h,isActive:u||[l.MT.TwoFaNewPassword,l.MT.TwoFaNewPasswordConfirm,l.MT.TwoFaNewPasswordHint,l.MT.TwoFaNewPasswordEmail,l.MT.TwoFaNewPasswordEmailCode,l.MT.TwoFaCongratulations].includes(n),onReset:Z});case l.MT.TwoFaNewPassword:return a.ZP.createElement(Ba,{screen:t,placeholder:B("PleaseEnterPassword"),submitLabel:B("Continue"),onSubmit:I,onScreenSelect:h,isActive:u||[l.MT.TwoFaNewPasswordConfirm,l.MT.TwoFaNewPasswordHint,l.MT.TwoFaNewPasswordEmail,l.MT.TwoFaNewPasswordEmailCode,l.MT.TwoFaCongratulations].includes(n),onReset:Z});case l.MT.TwoFaNewPasswordConfirm:return a.ZP.createElement(Ba,{screen:t,expectedPassword:r.password,placeholder:B("PleaseReEnterPassword"),submitLabel:B("Continue"),onSubmit:y,onScreenSelect:h,isActive:u||[l.MT.TwoFaNewPasswordHint,l.MT.TwoFaNewPasswordEmail,l.MT.TwoFaNewPasswordEmailCode,l.MT.TwoFaCongratulations].includes(n),onReset:Z});case l.MT.TwoFaNewPasswordHint:return a.ZP.createElement(Da,{icon:"hint",placeholder:B("PasswordHintPlaceholder"),onSubmit:S,screen:t,onScreenSelect:h,isActive:u||[l.MT.TwoFaNewPasswordEmail,l.MT.TwoFaNewPasswordEmailCode,l.MT.TwoFaCongratulations].includes(n),onReset:Z});case l.MT.TwoFaNewPasswordEmail:return a.ZP.createElement(Da,{icon:"email",type:"email",isLoading:i,error:c,clearError:p,placeholder:B("RecoveryEmailTitle"),shouldConfirm:!0,onSubmit:N,screen:t,onScreenSelect:h,isActive:u||[l.MT.TwoFaNewPasswordEmailCode,l.MT.TwoFaCongratulations].includes(n),onReset:Z});case l.MT.TwoFaNewPasswordEmailCode:return a.ZP.createElement(Ga,{isLoading:i,error:c,clearError:p,onSubmit:F,screen:t,onScreenSelect:h,isActive:u||n===l.MT.TwoFaCongratulations,onReset:Z});case l.MT.TwoFaCongratulations:return a.ZP.createElement(Oa,{onScreenSelect:h,isActive:u,onReset:Z});case l.MT.TwoFaEnabled:return a.ZP.createElement(Aa,{onScreenSelect:h,isActive:u||[l.MT.TwoFaChangePasswordCurrent,l.MT.TwoFaChangePasswordNew,l.MT.TwoFaChangePasswordConfirm,l.MT.TwoFaChangePasswordHint,l.MT.TwoFaTurnOff,l.MT.TwoFaRecoveryEmailCurrentPassword,l.MT.TwoFaRecoveryEmail,l.MT.TwoFaRecoveryEmailCode,l.MT.TwoFaCongratulations].includes(n),onReset:Z});case l.MT.TwoFaChangePasswordCurrent:return a.ZP.createElement(Ba,{screen:t,isLoading:i,error:c,clearError:p,hint:o,onSubmit:k,onScreenSelect:h,isActive:u||[l.MT.TwoFaChangePasswordNew,l.MT.TwoFaChangePasswordConfirm,l.MT.TwoFaChangePasswordHint,l.MT.TwoFaCongratulations].includes(n),onReset:Z});case l.MT.TwoFaChangePasswordNew:return a.ZP.createElement(Ba,{screen:t,placeholder:B("PleaseEnterNewFirstPassword"),onSubmit:w,onScreenSelect:h,isActive:u||[l.MT.TwoFaChangePasswordConfirm,l.MT.TwoFaChangePasswordHint,l.MT.TwoFaCongratulations].includes(n),onReset:Z});case l.MT.TwoFaChangePasswordConfirm:return a.ZP.createElement(Ba,{screen:t,expectedPassword:r.password,placeholder:B("PleaseReEnterPassword"),onSubmit:M,onScreenSelect:h,isActive:u||[l.MT.TwoFaChangePasswordHint,l.MT.TwoFaCongratulations].includes(n),onReset:Z});case l.MT.TwoFaChangePasswordHint:return a.ZP.createElement(Da,{isLoading:i,error:c,clearError:p,icon:"hint",placeholder:B("PasswordHintPlaceholder"),onSubmit:T,onScreenSelect:h,isActive:u||n===l.MT.TwoFaCongratulations,onReset:Z,screen:t});case l.MT.TwoFaTurnOff:return a.ZP.createElement(Ba,{isLoading:i,error:c,clearError:p,hint:o,onSubmit:R,onScreenSelect:h,isActive:u,onReset:Z,screen:t});case l.MT.TwoFaRecoveryEmailCurrentPassword:return a.ZP.createElement(Ba,{screen:t,isLoading:i,error:c,clearError:p,hint:o,onSubmit:A,onScreenSelect:h,isActive:u||[l.MT.TwoFaRecoveryEmail,l.MT.TwoFaRecoveryEmailCode,l.MT.TwoFaCongratulations].includes(n),onReset:Z});case l.MT.TwoFaRecoveryEmail:return a.ZP.createElement(Da,{screen:t,icon:"email",type:"email",placeholder:B("RecoveryEmailTitle"),onSubmit:L,onScreenSelect:h,isActive:u||[l.MT.TwoFaRecoveryEmailCode,l.MT.TwoFaCongratulations].includes(n),onReset:Z});case l.MT.TwoFaRecoveryEmailCode:return a.ZP.createElement(Ga,{screen:t,isLoading:i,error:c,clearError:p,onSubmit:F,onScreenSelect:h,isActive:u||n===l.MT.TwoFaCongratulations,onReset:Z});default:return}})));var Ja=n(1820);function Xa(e,t){const{privacy:n}=e.settings;switch(t){case l.MT.PrivacyPhoneNumberAllowedContacts:case l.MT.PrivacyPhoneNumberDeniedContacts:return n.phoneNumber;case l.MT.PrivacyLastSeenAllowedContacts:case l.MT.PrivacyLastSeenDeniedContacts:return n.lastSeen;case l.MT.PrivacyProfilePhotoAllowedContacts:case l.MT.PrivacyProfilePhotoDeniedContacts:return n.profilePhoto;case l.MT.PrivacyForwardingAllowedContacts:case l.MT.PrivacyForwardingDeniedContacts:return n.forwards;case l.MT.PrivacyGroupChatsDeniedContacts:case l.MT.PrivacyGroupChatsAllowedContacts:return n.chatInvite}}const za=(0,a.X$)((0,s.c$)(((e,t)=>{let{screen:n}=t;return{currentUserId:e.currentUserId,settings:Xa(e,n)}}))((e=>{let{isAllowList:t,screen:n,isActive:r,onScreenSelect:i,onReset:c,currentUserId:d,settings:m}=e;const{setPrivacySettings:u}=(0,s.Sv)(),h=(0,g.Z)(),Z=(0,a.Ye)((()=>m?t?[...m.allowUserIds,...m.allowChatIds]:[...m.blockUserIds,...m.blockChatIds]:[]),[t,m]),[v,p]=(0,a.eJ)(""),[E,C]=(0,a.eJ)(!1),[b,I]=(0,a.eJ)(Z),y=(0,xn.d7)(o.Nf),S=(0,xn.d7)(o.WS),N=(0,a.Ye)((()=>{const e=(0,s.Rd)().chats.byId,t=(0,be.Tw)([...y||[],...S||[]]).filter((t=>{const n=e[t];return n&&(0,f.YC)(n.id)&&n.id!==d}));return(0,be.Tw)([...Z,...(0,f.$l)(h,t,e,v)])}),[y,S,Z,h,v,d]),k=(0,a.I4)((e=>{I(e),C(!0)}),[]),w=(0,a.I4)((()=>{u({privacyKey:ya(n),isAllowList:Boolean(t),contactsIds:b}),i(l.MT.Privacy)}),[t,b,i,n,u]);return(0,P.ZP)(r,c,i,n),a.ZP.createElement("div",{className:"NewChat-inner step-1"},a.ZP.createElement(Ja.Z,{itemIds:N||[],selectedIds:b,filterValue:v,filterPlaceholder:h(t?"AlwaysShareWithPlaceholder":"NeverShareWithPlaceholder"),searchInputId:"new-group-picker-search",onSelectedIdsChange:k,onFilterChange:p}),a.ZP.createElement(Sn.Z,{isShown:E,onClick:w,ariaLabel:h(t?"AlwaysShareWithTitle":"NeverShareWithTitle")},a.ZP.createElement("i",{className:"icon-arrow-right"})))}))),Va=(0,a.X$)((0,s.c$)((e=>{const{availableReactions:t,appConfig:n}=e;return{availableReactions:t,selectedReaction:null==n?void 0:n.defaultReaction}}))((e=>{let{isActive:t,onReset:n,onScreenSelect:r,availableReactions:o,selectedReaction:i}=e;const{setDefaultReaction:c}=(0,s.Sv)();(0,P.ZP)(t,n,r,l.MT.General);const d=(null==o?void 0:o.filter((e=>!e.isInactive)).map((e=>({label:a.ZP.createElement(a.ZP.Fragment,null,a.ZP.createElement(bt.Z,{reaction:e.reaction}),e.title),value:e.reaction}))))||[],m=(0,a.I4)((e=>{c({reaction:e})}),[c]);return a.ZP.createElement("div",{className:"settings-content settings-item custom-scroll settings-quick-reaction"},a.ZP.createElement(gt.Z,{name:"quick-reaction-settings",options:d,selected:i,onChange:m}))}))),Ya=Object.keys(l.MT).length/2,Ha=[l.MT.TwoFaDisabled,l.MT.TwoFaNewPassword,l.MT.TwoFaNewPasswordConfirm,l.MT.TwoFaNewPasswordHint,l.MT.TwoFaNewPasswordEmail,l.MT.TwoFaNewPasswordEmailCode,l.MT.TwoFaCongratulations,l.MT.TwoFaEnabled,l.MT.TwoFaChangePasswordCurrent,l.MT.TwoFaChangePasswordNew,l.MT.TwoFaChangePasswordConfirm,l.MT.TwoFaChangePasswordHint,l.MT.TwoFaTurnOff,l.MT.TwoFaRecoveryEmailCurrentPassword,l.MT.TwoFaRecoveryEmail,l.MT.TwoFaRecoveryEmailCode],ja=[l.MT.Folders,l.MT.FoldersCreateFolder,l.MT.FoldersEditFolder,l.MT.FoldersEditFolderFromChatList,l.MT.FoldersIncludedChats,l.MT.FoldersIncludedChatsFromChatList,l.MT.FoldersExcludedChats,l.MT.FoldersExcludedChatsFromChatList],qa=[l.MT.PrivacyBlockedUsers,l.MT.ActiveSessions],Ka=[l.MT.PrivacyPhoneNumberAllowedContacts,l.MT.PrivacyPhoneNumberDeniedContacts],Wa=[l.MT.PrivacyLastSeenAllowedContacts,l.MT.PrivacyLastSeenDeniedContacts],Qa=[l.MT.PrivacyProfilePhotoAllowedContacts,l.MT.PrivacyProfilePhotoDeniedContacts],es=[l.MT.PrivacyForwardingAllowedContacts,l.MT.PrivacyForwardingDeniedContacts],ts=[l.MT.PrivacyGroupChatsAllowedContacts,l.MT.PrivacyGroupChatsDeniedContacts],ns=(0,a.X$)((e=>{let{isActive:t,currentScreen:n,foldersState:s,foldersDispatch:r,onScreenSelect:o,onReset:c,shouldSkipTransition:d}=e;const[m,u]=(0,gn.Z)(En,pn),h=(0,a.I4)((()=>{n!==l.MT.FoldersCreateFolder&&n!==l.MT.FoldersEditFolder&&n!==l.MT.FoldersEditFolderFromChatList||setTimeout((()=>{r({type:"reset"})}),200),n!==l.MT.FoldersIncludedChats&&n!==l.MT.FoldersExcludedChats?c():"create"===s.mode?o(l.MT.FoldersCreateFolder):o(l.MT.FoldersEditFolder)}),[s.mode,r,n,c,o]),Z=(0,a.I4)((()=>{r({type:"saveFilters"}),h()}),[r,h]);function v(e,i,c){return a.ZP.createElement(a.ZP.Fragment,null,a.ZP.createElement(Cn,{currentScreen:n,onReset:h,onSaveFilter:Z,onScreenSelect:o,editedFolderId:s.folderId}),function(e,i){const c={[l.MT.PrivacyPhoneNumber]:Ka.includes(i),[l.MT.PrivacyLastSeen]:Wa.includes(i),[l.MT.PrivacyProfilePhoto]:Qa.includes(i),[l.MT.PrivacyForwarding]:es.includes(i),[l.MT.PrivacyGroupChats]:ts.includes(i)},d=Ha.includes(i),Z=ja.includes(i),v=qa.includes(i)||d||Object.keys(c).includes(i.toString())||Object.values(c).find((e=>!0===e));switch(n){case l.MT.Main:return a.ZP.createElement(In,{onScreenSelect:o,isActive:t,onReset:h});case l.MT.EditProfile:return a.ZP.createElement(Fn,{onScreenSelect:o,isActive:t&&e,onReset:h});case l.MT.General:return a.ZP.createElement(aa,{onScreenSelect:o,isActive:e||i===l.MT.GeneralChatBackgroundColor||i===l.MT.GeneralChatBackground||i===l.MT.QuickReaction||v||Z,onReset:h});case l.MT.QuickReaction:return a.ZP.createElement(Va,{onScreenSelect:o,isActive:e,onReset:h});case l.MT.Notifications:return a.ZP.createElement(fa,{onScreenSelect:o,isActive:e,onReset:h});case l.MT.DataStorage:return a.ZP.createElement(Bn,{onScreenSelect:o,isActive:e,onReset:h});case l.MT.Privacy:return a.ZP.createElement(ba,{onScreenSelect:o,isActive:e||v||d,onReset:h});case l.MT.Language:return a.ZP.createElement(Ia,{onScreenSelect:o,isActive:e,onReset:h});case l.MT.GeneralChatBackground:return a.ZP.createElement(Za,{onScreenSelect:o,isActive:e||i===l.MT.GeneralChatBackgroundColor,onReset:h});case l.MT.GeneralChatBackgroundColor:return a.ZP.createElement(Ea,{onScreenSelect:o,isActive:e,onReset:h});case l.MT.ActiveSessions:return a.ZP.createElement(wa,{onScreenSelect:o,isActive:e,onReset:h});case l.MT.PrivacyBlockedUsers:return a.ZP.createElement(Ta,{onScreenSelect:o,isActive:e,onReset:h});case l.MT.PrivacyPhoneNumber:case l.MT.PrivacyLastSeen:case l.MT.PrivacyProfilePhoto:case l.MT.PrivacyForwarding:case l.MT.PrivacyGroupChats:return a.ZP.createElement(Sa,{screen:n,onScreenSelect:o,isActive:e||c[n],onReset:h});case l.MT.PrivacyPhoneNumberAllowedContacts:case l.MT.PrivacyLastSeenAllowedContacts:case l.MT.PrivacyProfilePhotoAllowedContacts:case l.MT.PrivacyForwardingAllowedContacts:case l.MT.PrivacyGroupChatsAllowedContacts:return a.ZP.createElement(za,{isAllowList:!0,screen:n,onScreenSelect:o,isActive:e||c[n],onReset:h});case l.MT.PrivacyPhoneNumberDeniedContacts:case l.MT.PrivacyLastSeenDeniedContacts:case l.MT.PrivacyProfilePhotoDeniedContacts:case l.MT.PrivacyForwardingDeniedContacts:case l.MT.PrivacyGroupChatsDeniedContacts:return a.ZP.createElement(za,{screen:n,onScreenSelect:o,isActive:e,onReset:h});case l.MT.Folders:case l.MT.FoldersCreateFolder:case l.MT.FoldersEditFolder:case l.MT.FoldersEditFolderFromChatList:case l.MT.FoldersIncludedChats:case l.MT.FoldersIncludedChatsFromChatList:case l.MT.FoldersExcludedChats:case l.MT.FoldersExcludedChatsFromChatList:return a.ZP.createElement(Vn,{currentScreen:n,shownScreen:i,state:s,dispatch:r,isActive:e,onScreenSelect:o,onReset:h});case l.MT.TwoFaDisabled:case l.MT.TwoFaNewPassword:case l.MT.TwoFaNewPasswordConfirm:case l.MT.TwoFaNewPasswordHint:case l.MT.TwoFaNewPasswordEmail:case l.MT.TwoFaNewPasswordEmailCode:case l.MT.TwoFaCongratulations:case l.MT.TwoFaEnabled:case l.MT.TwoFaChangePasswordCurrent:case l.MT.TwoFaChangePasswordNew:case l.MT.TwoFaChangePasswordConfirm:case l.MT.TwoFaChangePasswordHint:case l.MT.TwoFaTurnOff:case l.MT.TwoFaRecoveryEmailCurrentPassword:case l.MT.TwoFaRecoveryEmail:case l.MT.TwoFaRecoveryEmailCode:return a.ZP.createElement(_a,{currentScreen:n,state:m,dispatch:u,shownScreen:i,isActive:e,onScreenSelect:o,onReset:h});default:return}}(e,c))}return a.ZP.createElement($.Z,{id:"Settings",name:d?"none":i.s0,activeKey:n,renderCount:Ya},v)})),as=(0,z.P2)((e=>e()),6e4,!0),ss=(0,a.X$)((0,s.c$)((e=>{const{userIds:t}=e.contactList||{},{byId:n,statusesById:a}=e.users;return{usersById:n,userStatusesById:a,contactIds:t,serverTimeOffset:e.serverTimeOffset}}))((e=>{let{isActive:t,filter:n,usersById:r,userStatusesById:l,contactIds:o,serverTimeOffset:c,onReset:d}=e;const{loadContactList:m,openChat:u,openNewContactDialog:h}=(0,s.Sv)(),Z=(0,g.Z)();(0,a.d4)((()=>{as((()=>{m()}))})),(0,P.ZP)(t,d);const v=(0,a.I4)((e=>{u({id:e,shouldReplaceHistory:!0})}),[u]),p=(0,a.Ye)((()=>{if(!o)return;const e=(0,f.kK)(o,r,n);return(0,f.Z0)(e,r,l,void 0,c)}),[o,n,r,l,c]),[E,C]=(0,Be.Z)(void 0,p,Boolean(n));return a.ZP.createElement(Ge.Z,{items:E,onLoadMore:C,className:"chat-list custom-scroll"},null!=E&&E.length?E.map((e=>a.ZP.createElement(_e.Z,{key:e,className:"chat-item-clickable",onClick:()=>v(e),ripple:!i.wB},a.ZP.createElement(Xe.Z,{userId:e,forceShowSelf:!0,avatarSize:"large"})))):E&&!E.length?a.ZP.createElement("p",{className:"no-results",key:"no-results",dir:"auto"},n.length?"No contacts matched your search.":"Contact list is empty."):a.ZP.createElement(De.Z,{key:"loading"}),a.ZP.createElement(Sn.Z,{isShown:!0,onClick:h,ariaLabel:Z("CreateNewContact")},a.ZP.createElement("i",{className:"icon-add-user-filled"})))}))),rs=(0,z.P2)((e=>e()),6e4,!0),ls=(0,a.X$)((0,s.c$)((e=>{const{userIds:t}=e.contactList||{},{byId:n}=e.chats,{query:a,fetchingStatus:s,globalResults:r,localResults:l}=e.globalSearch,{userIds:o}=r||{},{userIds:i}=l||{};return{chatsById:n,localContactIds:t,searchQuery:a,isSearching:null==s?void 0:s.chats,globalUserIds:o,localUserIds:i}}))((e=>{let{isChannel:t,isActive:n,selectedMemberIds:r,onSelectedMemberIdsChange:l,onNextStep:o,onReset:i,chatsById:c,localContactIds:d,searchQuery:m,isSearching:u,localUserIds:h,globalUserIds:Z}=e;const{loadContactList:v,setGlobalSearchQuery:p}=(0,s.Sv)();(0,a.d4)((()=>{rs((()=>{v()}))}));const E=(0,g.Z)();(0,P.ZP)(n,i);const C=(0,a.I4)((e=>{p({query:e})}),[p]),b=(0,a.Ye)((()=>{const e=(0,s.Rd)().users.byId,t=d?(0,f.kK)(d,e,m):[];return(0,f.ih)((0,be.Tw)([...t,...h||[],...Z||[]]).filter((t=>{const n=e[t];return!n||!n.isSelf&&(n.canBeInvitedToGroup||!(0,f.cS)(n))})),c,!1,r)}),[d,c,m,h,Z,r]),I=(0,a.I4)((()=>{(r.length||t)&&(p({query:""}),o())}),[r.length,t,p,o]);return a.ZP.createElement("div",{className:"NewChat step-1"},a.ZP.createElement("div",{className:"left-header"},a.ZP.createElement(B.Z,{round:!0,size:"smaller",color:"translucent",onClick:i,ariaLabel:"Return to Chat List"},a.ZP.createElement("i",{className:"icon-arrow-left"})),a.ZP.createElement("h3",null,E("GroupAddMembers"))),a.ZP.createElement("div",{className:"NewChat-inner step-1"},a.ZP.createElement(Ja.Z,{itemIds:b,selectedIds:r,filterValue:m,filterPlaceholder:E("SendMessageTo"),searchInputId:"new-group-picker-search",isLoading:u,onSelectedIdsChange:l,onFilterChange:C}),a.ZP.createElement(Sn.Z,{isShown:Boolean(r.length||t),onClick:I,ariaLabel:t?"Continue To Channel Info":"Continue To Group Info"},a.ZP.createElement("i",{className:"icon-arrow-right"}))))}))),os=(0,a.X$)((0,s.c$)((e=>{const{progress:t,error:n}=e.chatCreation||{};return{creationProgress:t,creationError:n}}))((e=>{let{isChannel:t,isActive:n,memberIds:r,onReset:o,creationProgress:i,creationError:c}=e;const{createGroupChat:d,createChannel:m}=(0,s.Sv)(),u=(0,g.Z)();(0,P.ZP)(n,o);const[h,Z]=(0,a.eJ)(""),[v,p]=(0,a.eJ)(""),[E,C]=(0,a.eJ)(),[f,b]=(0,a.eJ)(),I="Chat title can't be empty",y="Channel title can't be empty",S="Sorry, creating supergroups is not yet supported",N=i===l.Nh.InProgress,k=(0,a.I4)((e=>{const{value:t}=e.currentTarget,n=t.replace(/^\s+/,"");Z(n),n!==t&&(e.currentTarget.value=n)}),[]),w=(0,a.I4)((e=>{p(e.currentTarget.value)}),[]),M=(0,a.I4)((()=>{h.length?r.length>199?b(S):d({title:h,photo:E,memberIds:r}):b(I)}),[h,r,d,E,I,S]),T=(0,a.I4)((()=>{h.length?m({title:h,about:v,photo:E,memberIds:r}):b(y)}),[h,m,v,E,r,y]);(0,a.d4)((()=>{i===l.Nh.Complete&&o(!0)}),[i,o]);const R=c&&u(c)||(f!==I&&f!==y?f:void 0);return a.ZP.createElement("div",{className:"NewChat"},a.ZP.createElement("div",{className:"left-header"},a.ZP.createElement(B.Z,{round:!0,size:"smaller",color:"translucent",onClick:()=>o(),ariaLabel:"Return to member selection"},a.ZP.createElement("i",{className:"icon-arrow-left"})),a.ZP.createElement("h3",null,u(t?"NewChannel":"NewGroup"))),a.ZP.createElement("div",{className:"NewChat-inner step-2"},a.ZP.createElement(yn.Z,{onChange:C,title:u("AddPhoto")}),a.ZP.createElement(Ue.Z,{value:h,onChange:k,label:u(t?"EnterChannelName":"GroupName"),error:f===I||f===y?f:void 0}),t&&a.ZP.createElement(a.ZP.Fragment,null,a.ZP.createElement(Ue.Z,{value:v,onChange:w,label:u("DescriptionOptionalPlaceholder")}),a.ZP.createElement("p",{className:"note"},u("DescriptionInfo"))),R&&a.ZP.createElement("p",{className:"error"},R),r.length>0&&a.ZP.createElement(a.ZP.Fragment,null,a.ZP.createElement("h3",{className:"chat-members-heading"},u("GroupInfo.ParticipantCount",r.length,"i")),a.ZP.createElement("div",{className:"chat-members-list custom-scroll"},r.map((e=>a.ZP.createElement(_e.Z,{inactive:!0,className:"chat-item-clickable"},a.ZP.createElement(Xe.Z,{userId:e}))))))),a.ZP.createElement(Sn.Z,{isShown:0!==h.length,onClick:t?T:M,disabled:N,ariaLabel:t?u("ChannelIntro.CreateChannel"):"Create Group"},N?a.ZP.createElement(V.Z,{color:"white"}):a.ZP.createElement("i",{className:"icon-arrow-right"})))}))),is=Object.keys(l.du).length/2,cs=(0,a.X$)((e=>{let{isActive:t,isChannel:n=!1,content:s,onContentChange:r,onReset:o}=e;const[c,d]=(0,a.eJ)([]),m=(0,a.I4)((()=>{r(n?l.du.NewChannelStep2:l.du.NewGroupStep2)}),[n,r]);return a.ZP.createElement($.Z,{id:"NewChat",name:i.s0,renderCount:is,activeKey:s},(e=>{switch(s){case l.du.NewChannelStep1:case l.du.NewGroupStep1:return a.ZP.createElement(ls,{isChannel:n,isActive:t,selectedMemberIds:c,onSelectedMemberIdsChange:d,onNextStep:m,onReset:o});case l.du.NewChannelStep2:case l.du.NewGroupStep2:return a.ZP.createElement(os,{isChannel:n,isActive:e&&t,memberIds:c,onReset:o});default:return}}))}));var ds=n(1080);const ms=(0,a.X$)((e=>{let{isActive:t,onReset:n,onContentChange:s}=e;const r=(0,g.Z)();return(0,P.ZP)(t,n,s,l.du.Archived),a.ZP.createElement("div",{className:"ArchivedChats"},a.ZP.createElement("div",{className:"left-header"},a.ZP.createElement(B.Z,{round:!0,size:"smaller",color:"translucent",onClick:n,ariaLabel:"Return to chat list"},a.ZP.createElement("i",{className:"icon-arrow-left"})),a.ZP.createElement("h3",null,r("ArchivedChats"))),a.ZP.createElement(ds.Z,{folderType:"archived",isActive:t}))}));var us=n(1218);const hs=(0,a.X$)((0,s.c$)((e=>{const{byId:t,orderedIds:n}=e.chatFolders;return{foldersById:t,folderOrderedIds:n}}))((e=>{let{isOpen:t,chatId:n,foldersById:r,folderOrderedIds:l,onClose:o,onCloseAnimationEnd:i}=e;const{editChatFolders:c}=(0,s.Sv)(),d=(0,g.Z)(),m=(0,a.Ye)((()=>r?Object.keys(r).reduce(((e,t)=>{const{includedChatIds:a,pinnedChatIds:s}=r[Number(t)];return(a.includes(n)||null!=s&&s.includes(n))&&e.push(t),e}),[]):[]),[n,r]),[u,h]=(0,a.eJ)(m),Z=(0,a.Ye)((()=>(null==l?void 0:l.map((e=>({label:r?r[e].title:"",value:String(e)}))))||[]),[l,r]),v=(0,a.I4)((()=>{const e=m.filter((e=>!u.includes(e))).map(Number),t=u.filter((e=>!m.includes(e))).map(Number);c({chatId:n,idsToRemove:e,idsToAdd:t}),o()}),[n,c,m,o,u]);if(r&&l)return a.ZP.createElement(Oe.Z,{isOpen:t,onClose:o,onCloseAnimationEnd:i,onEnter:v,className:"delete",title:d("FilterAddTo")},a.ZP.createElement(us.Z,{options:Z,selected:u,onChange:h,round:!0}),a.ZP.createElement(B.Z,{color:"primary",className:"confirm-dialog-button",isText:!0,onClick:v},d("FilterAddTo")),a.ZP.createElement(B.Z,{className:"confirm-dialog-button",isText:!0,onClick:o},d("Cancel")))})));var Zs=n(4319),vs=n(647),Ps=n(998);function gs(e){return e?"lng_context_copy_selected":"lng_context_copy_text"}let ps,Es;const Cs={Down:!0,ArrowDown:!0,Up:!0,ArrowUp:!0,Left:!0,ArrowLeft:!0,Right:!0,ArrowRight:!0," ":!0,PageUp:!0,PageDown:!0,End:!0,Home:!0,Tab:!0},fs=e=>"changedTouches"in e?e.changedTouches[0].clientY:0,bs=e=>{const t="deltaY"in e?e.deltaY:fs(e);if(!ps||!ps.contains(e.target)||ps.scrollTop<=0&&t<=0||ps.scrollTop>=ps.scrollHeight-ps.offsetHeight&&t>=0){if(Es&&e.target.closest(Es))return;e.preventDefault()}};function Is(e){Cs[e.key]&&!function(e){if(!(e&&e instanceof HTMLElement))return!1;const t=e,n=t.tagName.toLowerCase();if("textarea"===n)return!0;if("input"!==n)return!1;const a=t.getAttribute("type");return!!a&&["text","password","number","email","tel","url","search","date","datetime","datetime-local","time","month","week"].indexOf(a.toLowerCase())>-1}(e.target)&&e.preventDefault()}function ys(e,t){ps=e,Es=t,document.addEventListener("wheel",bs,{passive:!1}),document.addEventListener("touchmove",bs,{passive:!1}),document.onkeydown=Is}function Ss(){ps=void 0,Es=void 0,document.removeEventListener("wheel",bs),document.removeEventListener("touchmove",bs),document.onkeydown=null}var Ns=n(3394);const ks=i.FW?24:32,ws=(0,Y.y)("ReactionSelectorReaction"),Ms=(0,a.X$)((e=>{var t;let{reaction:n,previewIndex:s,onSendReaction:l,isReady:o}=e;const c=(0,a.sO)(null),d=(0,p.Z)(`document${null===(t=n.selectAnimation)||void 0===t?void 0:t.id}`,!o,r.IU.Lottie),[m,u,h]=(0,ee.Z)(),[Z,v]=(0,ee.Z)(),P=Boolean(o&&d),{transitionClassNames:g}=(0,K.Z)(P),{shouldRender:E,transitionClassNames:C}=(0,K.Z)(!o||!Z,void 0,!0);return a.ZP.createElement("div",{className:ws("&",i.FW&&"compact"),onClick:function(){if(!c.current)return;const{x:e,y:t}=c.current.getBoundingClientRect();l(n.reaction,e,t)},ref:c,onMouseEnter:o?u:void 0},E&&a.ZP.createElement("div",{className:ws("static",o?[C]:void 0),style:`background-position-x: ${s*-ks}px;`}),P&&a.ZP.createElement(St.Z,{id:`select_${n.reaction}`,className:ws("animated",[g]),animationData:d,play:m,noLoop:!0,size:ks,onLoad:v,onEnded:h}))})),Ts=(0,Y.y)("ReactionSelector"),Rs=(0,a.X$)((e=>{let{availableReactions:t,enabledReactions:n,onSendReaction:s,isPrivate:r,isReady:l}=e;const o=(0,a.sO)(null),[c,d]=(0,ee.Z)(!1);(0,Ft.Z)(o.current,!c),(0,a.bt)((()=>{d()}),[d]);const m=e=>{o&&("deltaY"in e?e.deltaY:fs(e))&&e.preventDefault()};if((r||null!=n&&n.length)&&t)return a.ZP.createElement("div",{className:Ts("&",i.FW&&"compact"),onWheelCapture:m,onTouchMove:m},a.ZP.createElement("div",{className:Ts("bubble-big")}),a.ZP.createElement("div",{className:Ts("bubble-small")}),a.ZP.createElement("div",{className:Ts("items-wrapper")},a.ZP.createElement("div",{className:Ts("items",["no-scrollbar"]),ref:o},null==t?void 0:t.map(((e,t)=>{if(!e.isInactive&&(r||n&&n.includes(e.reaction)))return a.ZP.createElement(Ms,{key:e.reaction,previewIndex:t,isReady:l,onSendReaction:s,reaction:e})})))))})),As=(0,a.X$)((e=>{var t,n,s,l,o;let{availableReactions:c,isOpen:d,message:m,isPrivate:u,enabledReactions:h,anchor:Z,canSendNow:v,canReschedule:P,canReply:p,canEdit:E,canPin:C,canUnpin:b,canDelete:I,canReport:y,canForward:S,canFaveSticker:N,canUnfaveSticker:k,canCopy:w,canCopyLink:M,canSelect:T,canDownload:R,canSaveGif:A,isDownloading:L,canShowSeenBy:F,canShowReactionsCount:B,canRemoveReaction:x,canShowReactionList:$,seenByRecentUsers:D,onReply:U,onEdit:G,onPin:_,onUnpin:J,onForward:X,onDelete:z,onReport:V,onFaveSticker:H,onUnfaveSticker:j,onSelect:q,onSend:K,onReschedule:W,onClose:Q,onCloseAnimationEnd:te,onCopyLink:ne,onDownload:ae,onSaveGif:se,onShowSeenBy:le,onShowReactors:oe,onSendReaction:ie,onCopyMessages:ce}=e;const de=(0,a.sO)(null),me=(0,a.sO)(null),ue=function(e,t,n,a){const s=[],l=(0,f.UD)(e),o=(0,f.O$)(e)||((0,f.Cg)(e)?void 0:(0,f.F$)(e)),i=(0,f.Ti)(e,"inline"),c=o&&(i||(0,f.BM)(e))&&Zs.yl,d=window.getSelection();if(c&&s.push({label:"lng_context_copy_image",icon:"copy-media",handler:()=>{Promise.resolve(i?vs.he(i,r.IU.BlobUrl):o.blobUrl).then(Zs.VP),t&&t()}}),l){var m;const n=Boolean((null==d||null===(m=d.anchorNode)||void 0===m?void 0:m.parentNode)&&d.anchorNode.parentNode.closest(".Message .content-inner")&&""!==d.toString().replace(/(?:\r\n|\r|\n)/g,""));s.push({label:gs(n),icon:"copy",handler:()=>{const s=(0,Ps.Z)();if(null!=s&&s.length&&a)a(s);else{const t=n&&d?d.toString():(0,f.EU)(e);(0,Zs.TE)(t)}t&&t()}})}return n&&s.push({label:"lng_context_copy_message_link",icon:"link",handler:()=>{n(),t&&t()}}),s}(m,Q,M?ne:void 0,ce),he=!(u||null!=h&&h.length),Ze=$&&!he,[ve,Pe,ge]=(0,ee.Z)(),pe=(0,a.I4)((()=>document.querySelector(`.Transition__slide--active > .MessageList div[data-message-id="${m.id}"]`)),[m.id]),Ee=(0,a.I4)((()=>document.querySelector(".Transition__slide--active > .MessageList")),[]),Ce=(0,a.I4)((()=>document.querySelector(".MessageContextMenu .bubble")),[]),fe=(0,a.I4)((()=>{var e;const t=i.wB&&(null===(e=document.querySelector(".AudioPlayer-content"))||void 0===e?void 0:e.offsetHeight)||0,n=document.querySelector(".HeaderPinnedMessage-wrapper"),a=(i.wB&&!t||!i.wB&&(null==n?void 0:n.classList.contains("full-width")))&&(null==n?void 0:n.offsetHeight)||0;return{extraPaddingX:10,extraTopPadding:document.querySelector(".MiddleHeader").offsetHeight,marginSides:Ze?32:void 0,extraMarginTop:a+t}}),[Ze]),be=(0,a.I4)((()=>{ie(void 0,0,0)}),[ie]);(0,a.d4)((()=>{d?setTimeout((()=>{Pe()}),200):ge()}),[d,Pe,ge]);const{positionX:Ie,positionY:ye,transformOriginX:Se,transformOriginY:Ne,style:ke,menuStyle:Me,withScroll:Te}=(0,Ns.Z)(Z,pe,Ee,Ce,fe);(0,a.d4)((()=>(ys(Te?me.current:void 0,".ReactionSelector"),Ss)),[Te]);const Re=(0,g.Z)();return a.ZP.createElement(re.Z,{ref:de,isOpen:d,transformOriginX:Se,transformOriginY:Ne,positionX:Ie,positionY:ye,style:ke,bubbleStyle:Me,className:(0,Y.Z)("MessageContextMenu","fluid",Ze&&"with-reactions"),onClose:Q,onCloseAnimationEnd:te},$&&a.ZP.createElement(Rs,{enabledReactions:h,onSendReaction:ie,isPrivate:u,availableReactions:c,isReady:ve}),a.ZP.createElement("div",{className:"scrollable-content custom-scroll",style:Me,ref:me},x&&a.ZP.createElement(O.Z,{icon:"reactions",onClick:be},"Remove Reaction"),v&&a.ZP.createElement(O.Z,{icon:"send-outline",onClick:K},Re("MessageScheduleSend")),P&&a.ZP.createElement(O.Z,{icon:"schedule",onClick:W},Re("MessageScheduleEditTime")),p&&a.ZP.createElement(O.Z,{icon:"reply",onClick:U},Re("Reply")),E&&a.ZP.createElement(O.Z,{icon:"edit",onClick:G},Re("Edit")),N&&a.ZP.createElement(O.Z,{icon:"favorite",onClick:H},Re("AddToFavorites")),k&&a.ZP.createElement(O.Z,{icon:"favorite",onClick:j},Re("Stickers.RemoveFromFavorites")),w&&ue.map((e=>a.ZP.createElement(O.Z,{key:e.label,icon:e.icon,onClick:e.handler},Re(e.label)))),C&&a.ZP.createElement(O.Z,{icon:"pin",onClick:_},Re("DialogPin")),b&&a.ZP.createElement(O.Z,{icon:"unpin",onClick:J},Re("DialogUnpin")),A&&a.ZP.createElement(O.Z,{icon:"gifs",onClick:se},Re("lng_context_save_gif")),R&&a.ZP.createElement(O.Z,{icon:"download",onClick:ae},Re(L?"lng_context_cancel_download":"lng_media_download")),S&&a.ZP.createElement(O.Z,{icon:"forward",onClick:X},Re("Forward")),T&&a.ZP.createElement(O.Z,{icon:"select",onClick:q},Re("Common.Select")),y&&a.ZP.createElement(O.Z,{icon:"flag",onClick:V},Re("lng_context_report_msg")),(F||B)&&a.ZP.createElement(O.Z,{className:"MessageContextMenu--seen-by",icon:B?"reactions":"group",onClick:B?oe:le,disabled:!(B||null!==(t=m.seenByUserIds)&&void 0!==t&&t.length)},a.ZP.createElement("span",{className:"MessageContextMenu--seen-by-label"},B&&null!==(n=m.reactors)&&void 0!==n&&n.count?F&&null!==(s=m.seenByUserIds)&&void 0!==s&&s.length?Re("Chat.OutgoingContextMixedReactionCount",[m.reactors.count,m.seenByUserIds.length]):Re("Chat.ContextReactionCount",m.reactors.count,"i"):1===(null===(l=m.seenByUserIds)||void 0===l?void 0:l.length)&&D?(0,f.Js)(D[0]):null!==(o=m.seenByUserIds)&&void 0!==o&&o.length?Re("Conversation.ContextMenuSeen",m.seenByUserIds.length,"i"):Re("Conversation.ContextMenuNoViews")),a.ZP.createElement("div",{className:"avatars"},null==D?void 0:D.map((e=>a.ZP.createElement(we.Z,{size:"micro",user:e}))))),I&&a.ZP.createElement(O.Z,{destructive:!0,icon:"delete",onClick:z},Re("Delete"))))})),Ls=2*k.Gw,Fs=(0,a.X$)((0,s.c$)(((e,t)=>{var n,a,s;let{message:r,messageListType:l}=t;const{threadId:i}=(0,b.Bt)(e)||{},c=(0,b.xs)(e,r.chatId),d=(0,b.Z1)(e,r.chatId),{seenByExpiresAt:m,seenByMaxChatMembers:u}=e.appConfig||{},{noOptions:h,canReply:Z,canPin:v,canUnpin:P,canDelete:g,canReport:p,canEdit:E,canForward:C,canFaveSticker:I,canUnfaveSticker:y,canCopy:S,canCopyLink:N,canSelect:k,canDownload:w,canSaveGif:M}=i&&(0,b._k)(e,r,i)||{},T="pinned"===l,R="scheduled"===l,A=d&&(0,f.eA)(d),L=(0,f.CI)(r),F=Boolean(d&&u&&m&&(0,f.Bf)(d)&&(0,f.B4)(r)&&!R&&d.membersCount&&d.membersCountDate.now()/1e3-m),B=d&&(0,f.YC)(d.id),x=(0,f.Lo)(r),$=!L&&!A&&!R&&!x&&!B&&r.reactions&&!(0,f.JE)(r.reactions)&&r.reactions.canSeeList,D=B&&(null===(n=r.reactions)||void 0===n||null===(a=n.results)||void 0===a?void 0:a.some((e=>e.isChosen))),O=(0,b.EV)(e,r);return{availableReactions:e.availableReactions,noOptions:h,canSendNow:R,canReschedule:R,canReply:!T&&!R&&Z,canPin:!R&&v,canUnpin:!R&&P,canDelete:g,canReport:p,canEdit:!T&&E,canForward:!O&&!R&&C,canFaveSticker:!R&&I,canUnfaveSticker:!R&&y,canCopy:!O&&S,canCopyLink:!O&&!R&&N,canSelect:k,canDownload:!O&&w,canSaveGif:!O&&M,activeDownloads:c,canShowSeenBy:F,enabledReactions:null!=d&&d.isForbidden||null==d||null===(s=d.fullInfo)||void 0===s?void 0:s.enabledReactions,isPrivate:B,hasFullInfo:Boolean(null==d?void 0:d.fullInfo),canShowReactionsCount:$,canShowReactionList:!L&&!x&&!R&&(null==d?void 0:d.id)!==o.aw,canRemoveReaction:D}}))((e=>{var t;let{availableReactions:n,isOpen:r,messageListType:l,chatUsername:o,message:i,album:c,anchor:d,onClose:m,onCloseAnimationEnd:u,noOptions:h,canSendNow:Z,hasFullInfo:v,canReschedule:P,canReply:g,canPin:p,canUnpin:E,canDelete:C,canReport:b,canShowReactionsCount:I,canShowReactionList:y,canRemoveReaction:S,canEdit:N,enabledReactions:k,isPrivate:w,canForward:M,canFaveSticker:T,canUnfaveSticker:R,canCopy:A,canCopyLink:L,canSelect:F,canDownload:B,canSaveGif:x,activeDownloads:$,canShowSeenBy:D}=e;const{setReplyingToId:O,setEditingId:U,pinMessage:G,openForwardMenu:_,faveSticker:J,unfaveSticker:X,toggleMessageSelection:z,sendScheduledMessages:V,rescheduleMessage:H,downloadMessageMedia:j,cancelMessageMediaDownload:q,loadSeenBy:W,openSeenByModal:Q,sendReaction:ne,openReactorListModal:ae,loadFullChat:se,loadReactors:re,copyMessagesByIds:le,saveGif:oe}=(0,s.Sv)(),{transitionClassNames:ie}=(0,K.Z)(r,u,void 0,!1),[ce,de]=(0,a.eJ)(!0),[me,ue]=(0,a.eJ)(!1),[he,Ze]=(0,a.eJ)(!1),[ve,Pe]=(0,a.eJ)(!1),[ge,pe,Ee]=(0,ee.Z)();(0,a.d4)((()=>{D&&r&&W({chatId:i.chatId,messageId:i.id})}),[W,r,i.chatId,i.id,D]),(0,a.d4)((()=>{I&&r&&re({chatId:i.chatId,messageId:i.id})}),[I,r,re,i.chatId,i.id]),(0,a.d4)((()=>{v||w||!r||se({chatId:i.chatId})}),[v,r,w,se,i.chatId]);const Ce=(0,a.Ye)((()=>{var e,t,n;if(null!==(e=i.reactions)&&void 0!==e&&null!==(t=e.recentReactions)&&void 0!==t&&t.length){var a,r;const e=(0,s.Rd)().users.byId;return null===(a=i.reactions)||void 0===a||null===(r=a.recentReactions)||void 0===r?void 0:r.slice(0,3).map((t=>{let{userId:n}=t;return e[n]})).filter(Boolean)}if(!i.seenByUserIds)return;const l=(0,s.Rd)().users.byId;return null===(n=i.seenByUserIds)||void 0===n?void 0:n.slice(0,3).map((e=>l[e])).filter(Boolean)}),[null===(t=i.reactions)||void 0===t?void 0:t.recentReactions,i.seenByUserIds]),fe=c?c.messages.some((e=>$.includes(e.id))):$.includes(i.id),be=(0,a.I4)((()=>{de(!1),ue(!0)}),[]),Ie=(0,a.I4)((()=>{de(!1),Ze(!0)}),[]),ye=(0,a.I4)((()=>{de(!1),m()}),[m]),Se=(0,a.I4)((()=>{ue(!1),m()}),[m]),Ne=(0,a.I4)((()=>{Ze(!1),m()}),[m]),ke=(0,a.I4)((()=>{Pe(!1),m()}),[m]),we=(0,a.I4)((()=>{Ee(),m()}),[Ee,m]),Me=(0,a.I4)((()=>{O({messageId:i.id}),ye()}),[O,i.id,ye]),Te=(0,a.I4)((()=>{U({messageId:i.id}),ye()}),[U,i.id,ye]),Re=(0,a.I4)((()=>{de(!1),Pe(!0)}),[]),Ae=(0,a.I4)((()=>{G({messageId:i.id,isUnpin:!0}),ye()}),[G,i.id,ye]),Le=(0,a.I4)((()=>{if(ye(),null!=c&&c.messages){const e=c.messages.map((e=>{let{id:t}=e;return t}));_({fromChatId:i.chatId,messageIds:e})}else _({fromChatId:i.chatId,messageIds:[i.id]})}),[_,i,ye,c]),Fe=(0,a.I4)((()=>{ye(),J({sticker:i.content.sticker})}),[ye,i.content.sticker,J]),Be=(0,a.I4)((()=>{ye(),X({sticker:i.content.sticker})}),[ye,i.content.sticker,X]),xe=(0,a.I4)((()=>{const e=null!=c&&c.messages?{messageId:i.id,childMessageIds:c.messages.map((e=>{let{id:t}=e;return t})),withShift:!1}:{messageId:i.id,withShift:!1};z(e),ye()}),[ye,i.id,z,c]),$e=(0,a.I4)((()=>{V({chatId:i.chatId,id:i.id}),ye()}),[ye,i.chatId,i.id,V]),De=(0,a.I4)((()=>{de(!1),pe()}),[pe]),Oe=(0,a.I4)((()=>{ye(),Q({chatId:i.chatId,messageId:i.id})}),[ye,i.chatId,i.id,Q]),Ue=(0,a.I4)((()=>{ye(),ae({chatId:i.chatId,messageId:i.id})}),[ye,ae,i.chatId,i.id]),Ge=(0,a.I4)((e=>{H({chatId:i.chatId,messageId:i.id,scheduledAt:Math.round(e.getTime()/1e3)})}),[i.chatId,i.id,H]),_e=(0,a.I4)((e=>{le({messageIds:e}),ye()}),[ye,le]),Je=(0,a.I4)((()=>{(0,Zs.TE)(`https://t.me/${o||`c/${i.chatId.replace("-","")}`}/${i.id}`),ye()}),[o,ye,i.chatId,i.id]),Xe=(0,a.I4)((()=>{((null==c?void 0:c.messages)||[i]).forEach((e=>{fe?q({message:e}):j({message:e})})),ye()}),[c,i,ye,fe,q,j]),ze=(0,a.I4)((()=>{const e=(0,f.b7)(i);oe({gif:e}),ye()}),[ye,i,oe]),Ve=(0,a.I4)(((e,t,n)=>{ne({chatId:i.chatId,messageId:i.id,reaction:e,x:t,y:n,startSize:Ls}),ye()}),[ye,i.chatId,i.id,ne]),Ye=(0,a.Ye)((()=>(c?c.messages:[i]).map((e=>{let{id:t}=e;return t}))),[c,i]);if(h)return void ye();const He=new Date;return He.setFullYear(He.getFullYear()+1),a.ZP.createElement("div",{className:(0,Y.Z)("ContextMenuContainer",ie)},a.ZP.createElement(As,{availableReactions:n,message:i,isPrivate:w,isOpen:ce,enabledReactions:k,anchor:d,canShowReactionsCount:I,canShowReactionList:y,canRemoveReaction:S,canSendNow:Z,canReschedule:P,canReply:g,canDelete:C,canReport:b,canPin:p,canUnpin:E,canEdit:N,canForward:M,canFaveSticker:T,canUnfaveSticker:R,canCopy:A,canCopyLink:L,canSelect:F,canDownload:B,canSaveGif:x,canShowSeenBy:D,isDownloading:fe,seenByRecentUsers:Ce,onReply:Me,onEdit:Te,onPin:Re,onUnpin:Ae,onForward:Le,onDelete:be,onReport:Ie,onFaveSticker:Fe,onUnfaveSticker:Be,onSelect:xe,onSend:$e,onReschedule:De,onClose:ye,onCopyLink:Je,onCopyMessages:_e,onDownload:Xe,onSaveGif:ze,onShowSeenBy:Oe,onSendReaction:Ve,onShowReactors:Ue}),a.ZP.createElement(mt,{isOpen:me,isSchedule:"scheduled"===l,onClose:Se,album:c,message:i}),a.ZP.createElement(pt,{isOpen:he,onClose:Ne,messageIds:Ye}),a.ZP.createElement(ut,{isOpen:ve,messageId:i.id,chatId:i.chatId,onClose:ke}),P&&a.ZP.createElement(lt,{isOpen:ge,withTimePicker:!0,selectedAt:1e3*i.date,maxAt:(0,te._F)(He),isFutureMode:!0,onClose:we,onSubmit:Ge}))})));var Bs=n(3057);const xs=(0,a.X$)((0,s.c$)(((e,t)=>{let{fromSticker:n,stickerSetShortName:a}=t;const s=(0,b.Bt)(e),{chatId:r,threadId:l}=s||{},o=r&&(0,b.Z1)(e,r),i=o?(0,f.H5)(o):void 0,c=Boolean(o&&l&&(0,f.Qm)(o,l)&&(null==i?void 0:i.canSendStickers)),d=Boolean(r)&&(0,b.FM)(e,r);return{canScheduleUntilOnline:Boolean(r)&&(0,b.Eh)(e,r),canSendStickers:c,isSavedMessages:d,shouldSchedule:(0,b.Aq)(e),stickerSet:n?(0,b.Ny)(e,n.stickerSetId):a?(0,b.E_)(e,a):void 0}}))((e=>{let{isOpen:t,fromSticker:n,stickerSetShortName:r,stickerSet:l,canSendStickers:i,canScheduleUntilOnline:c,shouldSchedule:d,isSavedMessages:m,onClose:u}=e;const{loadStickers:h,toggleStickerSet:Z,sendMessage:v}=(0,s.Sv)(),P=(0,a.sO)(null),p=(0,g.Z)(),[E,C]=(0,Bs.Z)(c),{observe:f}=(0,jt.S1)({rootRef:P,throttleMs:200,isDisabled:!t});(0,a.d4)((()=>{if(t)if(n){const{stickerSetId:e,stickerSetAccessHash:t}=n;h({stickerSetId:e,stickerSetAccessHash:t})}else r&&h({stickerSetShortName:r})}),[t,n,h,r]);const b=(0,a.I4)(((e,t,n)=>{e={...e,isPreloadedGlobally:!0},d||n?E((n=>{v({sticker:e,isSilent:t,scheduledAt:n}),u()})):(v({sticker:e,isSilent:t}),u())}),[u,E,v,d]),I=(0,a.I4)((()=>{l&&(Z({stickerSetId:l.id}),u())}),[u,l,Z]);return a.ZP.createElement(Oe.Z,{className:"StickerSetModal",isOpen:t,onClose:u,hasCloseButton:!0,title:l?(0,ke.Z)(l.title,["emoji","links"]):p("AccDescrStickerSet")},null!=l&&l.stickers?a.ZP.createElement(a.ZP.Fragment,null,a.ZP.createElement("div",{ref:P,className:"stickers custom-scroll"},l.stickers.map((e=>a.ZP.createElement(Kn.Z,{sticker:e,size:o.yK,observeIntersection:f,onClick:i?b:void 0,clickArg:e,isSavedMessages:m})))),a.ZP.createElement("div",{className:"button-wrapper"},a.ZP.createElement(B.Z,{size:"smaller",fluid:!0,color:l.installedDate?"danger":"primary",onClick:I},p(l.installedDate?"StickerPack.RemoveStickerCount":"StickerPack.AddStickerCount",l.count,"i")))):a.ZP.createElement(De.Z,null),C)})));var $s=n(2898);const Ds=(0,a.X$)((0,s.c$)(((e,t)=>{var n;let{chatId:a}=t;const s=(0,b.Z1)(e,a);if(!s||s.isRestricted)return{};const r=(0,f.YC)(s.id),l=r?(0,b.dy)(e,a):void 0,o=l&&(0,f.kw)(l);return{chat:s,isMuted:(0,f.i4)(s,(0,b.dZ)(e),(0,b.NJ)(e)),isPrivate:r,canAddContact:o,canDeleteChat:(0,f.cc)(s),hasLinkedChat:Boolean(null==s||null===(n=s.fullInfo)||void 0===n?void 0:n.linkedChatId)}}))((e=>{let{chatId:t,isOpen:n,withExtraActions:r,anchor:l,isChannel:o,canStartBot:c,canRestartBot:d,canSubscribe:m,canSearch:u,canCall:h,canMute:Z,canViewStatistics:v,canLeave:P,canEnterVoiceChat:p,canCreateVoiceChat:E,chat:C,isPrivate:f,isMuted:b,canDeleteChat:I,hasLinkedChat:y,canAddContact:S,onSubscribeChannel:N,onSearchClick:k,onClose:w,onCloseAnimationEnd:M}=e;const{updateChatMutedState:T,enterMessageSelectMode:R,sendBotCommand:A,restartBot:L,joinGroupCall:F,createGroupCall:B,openLinkedChat:x,openAddContactDialog:$,openCallFallbackConfirm:D,toggleStatistics:U}=(0,s.Sv)(),[G,_]=(0,a.eJ)(!0),[J,X]=(0,a.eJ)(!1),{x:z,y:V}=l;(0,K.Z)(n,M,void 0,!1);const Y=(0,a.I4)((()=>{_(!1),X(!0)}),[]),H=(0,a.I4)((()=>{_(!1),w()}),[w]),j=(0,a.I4)((()=>{X(!1),w()}),[w]),q=(0,a.I4)((()=>{A({command:"/start"})}),[A]),W=(0,a.I4)((()=>{L({chatId:t})}),[t,L]),Q=(0,a.I4)((()=>{T({chatId:t,isMuted:!b}),H()}),[t,H,b,T]),ee=(0,a.I4)((()=>{E?B({chatId:t}):F({chatId:t}),H()}),[H,E,t,F,B]),te=(0,a.I4)((()=>{x({id:t}),H()}),[t,H,x]),ne=(0,a.I4)((()=>{$({userId:t}),H()}),[$,t,H]),ae=(0,a.I4)((()=>{N(),H()}),[H,N]),se=(0,a.I4)((()=>{D(),H()}),[H,D]),le=(0,a.I4)((()=>{k(),H()}),[H,k]),oe=(0,a.I4)((()=>{U(),H()}),[H,U]),ie=(0,a.I4)((()=>{R(),H()}),[H,R]);(0,a.d4)((()=>(ys(),Ss)),[]);const ce=(0,g.Z)();return a.ZP.createElement($s.Z,null,a.ZP.createElement("div",{className:"HeaderMenuContainer"},a.ZP.createElement(re.Z,{isOpen:G,positionX:"right",style:`left: ${z}px;top: ${V}px;`,onClose:H},r&&c&&a.ZP.createElement(O.Z,{icon:"bots",onClick:q},ce("BotStart")),r&&d&&a.ZP.createElement(O.Z,{icon:"bots",onClick:W},ce("BotRestart")),r&&m&&a.ZP.createElement(O.Z,{icon:o?"channel":"group",onClick:ae},ce(o?"ProfileJoinChannel":"ProfileJoinGroup")),S&&a.ZP.createElement(O.Z,{icon:"add-user",onClick:ne},ce("AddContact")),i.wB&&h&&a.ZP.createElement(O.Z,{icon:"phone",onClick:se},ce("Call")),i.wB&&u&&a.ZP.createElement(O.Z,{icon:"search",onClick:le},ce("Search")),Z&&a.ZP.createElement(O.Z,{icon:b?"unmute":"mute",onClick:Q},ce(b?"ChatsUnmute":"ChatsMute")),(p||E)&&a.ZP.createElement(O.Z,{icon:"voice-chat",onClick:ee},ce(E?"StartVoipChat":"VoipGroupJoinCall")),y&&a.ZP.createElement(O.Z,{icon:o?"comments":"channel",onClick:te},ce(o?"ViewDiscussion":"lng_profile_view_channel")),a.ZP.createElement(O.Z,{icon:"select",onClick:ie},ce("ReportSelectMessages")),v&&a.ZP.createElement(O.Z,{icon:"stats",onClick:oe},ce("Statistics")),P&&a.ZP.createElement(O.Z,{destructive:!0,icon:"delete",onClick:Y},ce(f?"DeleteChatUser":I?"GroupInfo.DeleteAndExit":o?"LeaveChannel":"Group.LeaveGroup"))),C&&a.ZP.createElement(Rt.Z,{isOpen:J,onClose:j,chat:C})))})));var Os=n(9589);const Us=(0,z.Ds)((e=>e()),200,!1),Gs=(0,a.X$)((0,s.c$)((e=>{const t=(0,b.jr)(e);if(!t)return{};const{query:n,results:a}=(0,b.n5)(e)||{},{totalCount:s,foundIds:r}=a||{};return{chat:t,query:n,totalCount:s,foundIds:r,isHistoryCalendarOpen:Boolean(e.historyCalendarSelectedAt)}}))((e=>{let{isActive:t,chat:n,query:r,totalCount:l,foundIds:o,isHistoryCalendarOpen:i}=e;const{setLocalTextSearchQuery:c,searchTextMessagesLocal:d,focusMessage:m,closeLocalTextSearch:u,openHistoryCalendar:h}=(0,s.Sv)(),Z=(0,a.sO)(null),[v,P]=(0,a.eJ)(0);(0,a.d4)((()=>{const{visualViewport:e}=window;if(!e)return;const t=document.getElementById("Main"),n=()=>{const{activeElement:n}=document;if(n&&n===Z.current){const{pageTop:n,height:a}=e;t.style.transform=`translateY(${n}px)`,t.style.height=`${a}px`,document.documentElement.scrollTop=n}else t.style.transform="",t.style.height=""};return e.addEventListener("resize",n),()=>{e.removeEventListener("resize",n)}}),[]),(0,a.d4)((()=>{null!=n&&n.id&&null!=o&&o.length?(m({chatId:n.id,messageId:o[0]}),P(0)):P(-1)}),[null==n?void 0:n.id,m,o]),(0,a.d4)((()=>{Array.from(document.querySelectorAll("input")).forEach((e=>{e.disabled=Boolean(t&&e!==Z.current)})),Array.from(document.querySelectorAll("div[contenteditable]")).forEach((e=>{e.contentEditable=t?"false":"true"}))}),[t]),(0,a.d4)((()=>{t||Z.current.blur()}),[t]),(0,a.bt)((()=>{document.querySelector("#MobileSearch input").blur()}),[i]);const g=(0,a.I4)((e=>{c({query:e}),e.length&&Us(d)}),[d,c]),p=(0,a.I4)((()=>{if(n&&o){const e=v+1;m({chatId:n.id,messageId:o[e]}),P(e)}}),[n,v,m,o]),E=(0,a.I4)((()=>{if(n&&o){const e=v-1;m({chatId:n.id,messageId:o[e]}),P(e)}}),[n,v,m,o]);return a.ZP.createElement("div",{id:"MobileSearch",className:t?"active":""},a.ZP.createElement("div",{className:"header"},a.ZP.createElement(B.Z,{size:"smaller",round:!0,color:"translucent",onClick:u},a.ZP.createElement("i",{className:"icon-arrow-left"})),a.ZP.createElement(Os.Z,{ref:Z,value:r,onChange:g})),a.ZP.createElement("div",{className:"footer"},a.ZP.createElement("div",{className:"counter"},r?null!=o&&o.length?`${v+1} of ${l}`:o&&!o.length?"No results":"":a.ZP.createElement(B.Z,{round:!0,size:"smaller",color:"translucent",onClick:()=>h({selectedAt:(0,te._F)(Date.now())}),ariaLabel:"Search messages by date"},a.ZP.createElement("i",{className:"icon-calendar"}))),a.ZP.createElement(B.Z,{round:!0,size:"smaller",color:"translucent",onClick:p,disabled:!o||!o.length||v===o.length-1},a.ZP.createElement("i",{className:"icon-up"})),a.ZP.createElement(B.Z,{round:!0,size:"smaller",color:"translucent",onClick:E,disabled:!o||!o.length||0===v},a.ZP.createElement("i",{className:"icon-down"}))))})));var _s=n(5376),Js=n(9295),Xs=n(3575),zs=n(7240),Vs=n(971),Ys=n(7002),Hs=n(3616);function js(e,t){let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:0,a=arguments.length>3&&void 0!==arguments[3]&&arguments[3],s=arguments.length>4&&void 0!==arguments[4]&&arguments[4],r=arguments.length>5&&void 0!==arguments[5]&&arguments[5];const l=e[r?"scrollLeft":"scrollTop"],o=l+e[r?"offsetWidth":"offsetHeight"],i="string"==typeof t?e.querySelectorAll(t):t,{length:c}=i,d=[];let m=!1;for(let e=0;e=l-n&&u<=o+n:c<=o+n&&u>=l-n)d.push(e),m=!0;else if(m&&!a)break}return{allElements:i,visibleIndexes:d}}const qs=function(e,t){let n=arguments.length>2&&void 0!==arguments[2]&&arguments[2];const a=e[n?"scrollLeft":"scrollTop"],s=a+e[n?"offsetWidth":"offsetHeight"],r=t[n?"offsetLeft":"offsetTop"],l=r+t[n?"offsetWidth":"offsetHeight"];return r>a&&ls[s.length-1]?"start":"end";(0,Ks.Z)(a,r[t],e,10)}}var Qs=n(3570);function er(e){let{isActive:t,isHorizontal:n,shouldSaveSelectionOnUpdateItems:s,shouldRemoveSelectionOnReset:r,noArrowNavigation:l,items:o,shouldSelectOnTab:i,onSelect:c,onClose:d}=e;const[m,u]=(0,a.eJ)(-1),h=(0,a.I4)((e=>o?(0,Qs.Z)(o.length,e):-1),[o]),Z=(0,a.I4)(((e,t)=>{t.preventDefault(),u((t=>h(t+e)))}),[u,h]),v=(0,a.I4)((e=>{if(o&&o.length&&m>-1){const t=o[m];t&&(e.preventDefault(),c(t))}}),[o,c,m]),P=!o||m>o.length-1;return(0,a.d4)((()=>{s&&!P||u(r?-1:0)}),[P,r,s]),(0,a.d4)((()=>t?(0,Zt.Z)({onEsc:d,onUp:l||n?void 0:e=>Z(-1,e),onDown:l||n?void 0:e=>Z(1,e),onLeft:l||!n?void 0:e=>Z(-1,e),onRight:l||!n?void 0:e=>Z(1,e),onTab:i?v:void 0,onEnter:v}):void 0),[l,Z,v,t,n,d,i]),m}const tr=(0,a.X$)((e=>{let{isOpen:t,onClose:n,onInsertUserName:r,filteredUsers:l}=e;const o=(0,a.sO)(null),{shouldRender:i,transitionClassNames:c}=(0,K.Z)(t,void 0,void 0,!1),d=(0,a.I4)((function(e){let t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];const n=(0,s.Rd)().users.byId,a=n[e];a&&r(a,t)}),[r]),m=(0,a.I4)((e=>{d(e.id,!0)}),[d]),u=er({isActive:t,items:l,onSelect:m,shouldSelectOnTab:!0,shouldSaveSelectionOnUpdateItems:!0,onClose:n});(0,a.d4)((()=>{Ws(".chat-item-clickable",u,o)}),[u]),(0,a.d4)((()=>{l&&!l.length&&n()}),[l,n]);const h=(0,C.Z)(null!=l&&l.length?l:void 0,i),Z=l&&!l.length?h:l;if(!i||Z&&!Z.length)return;const v=(0,Y.Z)("MentionTooltip composer-tooltip custom-scroll",c);return a.ZP.createElement("div",{className:v,ref:o},null==Z?void 0:Z.map(((e,t)=>{let{id:n}=e;return a.ZP.createElement(_e.Z,{key:n,className:"chat-item-clickable scroll-item",onClick:()=>d(n),focus:u===t},a.ZP.createElement(Xe.Z,{userId:n,avatarSize:"small",withUsername:!0}))})))}));var nr=n(9830),ar=n(7146);const sr=(0,a.X$)((e=>{let{chatId:t,threadId:n,attachments:s,caption:r,canShowCustomSendMenu:l,isReady:i,isChatWithSelf:c,currentUserId:d,groupChatMembers:m,recentEmojis:u,baseEmojiKeywords:h,emojiKeywords:Z,shouldSchedule:v,addRecentEmoji:P,onCaptionUpdate:p,onSend:E,onFileAppend:f,onClear:b,onSendSilent:I,onSendScheduled:S}=e;const N=(0,Vs.Y)(r),k=(0,Vs.Y)(null),w=(0,a.sO)(),M=(0,C.Z)(s),T=s.length?s:M,R=Boolean(s.length),[A,L,F]=(0,ee.Z)(),x=Boolean(T&&T.every((e=>e.quick))),$=(0,g.Z)(),{isMentionTooltipOpen:D,closeMentionTooltip:O,insertMention:U,mentionFilteredUsers:G}=(0,Js.Z)(R,N,p,o.nY,m,void 0,d),{isEmojiTooltipOpen:_,closeEmojiTooltip:J,filteredEmojis:X,insertEmoji:z}=(0,Xs.Z)(R,N,u,o.nY,p,h,Z,!i);(0,a.d4)((()=>R?(0,y.Z)(b):void 0),[R,b]);const{isContextMenuOpen:V,handleContextMenu:Y,handleContextMenuClose:H,handleContextMenuHide:j}=(0,zs.Z)(k,!l||!R),q=(0,a.I4)((()=>{R&&(v?S():E())}),[R,S,E,v]),K=(0,a.I4)((e=>{e.preventDefault(),F();const{dataTransfer:{files:t}}=e;if(null!=t&&t.length){const e=x?Array.from(t).filter((e=>e.type&&o.dI.has(e.type))):Array.from(t);f(e,x)}}),[x,f,F]);if(!T)return;const W=T.every((e=>o.oG.has(e.mimeType))),Q=T.every((e=>o.wG.has(e.mimeType))),te=T.every((e=>o.e7.has(e.mimeType)));let ne="";return ne=$(W?"PreviewSender.SendPhoto":Q?"PreviewSender.SendVideo":te?"PreviewSender.SendAudio":"PreviewSender.SendFile",T.length,"i"),a.ZP.createElement(Oe.Z,{isOpen:R,onClose:b,header:function(){if(T)return a.ZP.createElement("div",{className:"modal-header-condensed",dir:$.isRtl?"rtl":void 0},a.ZP.createElement(B.Z,{round:!0,color:"translucent",size:"smaller",ariaLabel:"Cancel attachments",onClick:b},a.ZP.createElement("i",{className:"icon-close"})),a.ZP.createElement("div",{className:"modal-title"},ne),a.ZP.createElement("div",{className:"AttachmentModal--send-wrapper"},a.ZP.createElement(B.Z,{ref:k,color:"primary",size:"smaller",className:"modal-action-button",onClick:q,onContextMenu:l?Y:void 0},$("Send")),l&&a.ZP.createElement(ar.Z,{isOpen:V,isOpenToBottom:!0,onSendSilent:c?void 0:I,onSendSchedule:S,onClose:H,onCloseAnimationEnd:j,isSavedMessages:c})))}(),className:"AttachmentModal "+(A?"hovered":"")},a.ZP.createElement("div",{className:"drop-target",onDragEnter:L,onDrop:K,onDragOver:function(e){e.preventDefault(),e.stopPropagation(),w.current&&(window.clearTimeout(w.current),w.current=void 0)},onDragLeave:e=>{const{relatedTarget:t,target:n}=e;n.matches(".drop-target")&&!t&&(w.current=window.setTimeout(F,150)),n&&n.closest(".AttachmentModal.hovered")||(t&&e.stopPropagation(),F())},"data-attach-description":$("Preview.Dragging.AddItems",10)},x?a.ZP.createElement("div",{className:"media-wrapper custom-scroll"},T.map((e=>e.mimeType.startsWith("image/")?a.ZP.createElement("img",{src:e.blobUrl,alt:""}):a.ZP.createElement("video",{src:e.blobUrl,autoPlay:!0,muted:!0,loop:!0})))):a.ZP.createElement("div",{className:"document-wrapper custom-scroll"},T.map((e=>a.ZP.createElement(Ys.Z,{name:e.filename,extension:(0,_s.mD)(e.filename,e.mimeType),previewData:e.previewBlobUrl,size:e.size,smaller:!0})))),a.ZP.createElement("div",{className:"attachment-caption-wrapper"},a.ZP.createElement(tr,{isOpen:D,onClose:O,onInsertUserName:U,filteredUsers:G}),a.ZP.createElement(nr.Z,{isOpen:_,emojis:X,onClose:J,onEmojiSelect:z,addRecentEmoji:P}),a.ZP.createElement(Hs.Z,{id:"caption-input-text",chatId:t,threadId:n,isAttachmentModalInput:!0,html:r,editableInputId:o.nY,placeholder:$("Caption"),onUpdate:p,onSend:q,canAutoFocus:Boolean(i&&s.length)}))))}));var rr=n(3099);const lr=(0,a.X$)((e=>{let{isOpen:t,shouldBeAnonimous:n,onSend:s,onClear:r}=e;const l=(0,a.sO)(null),o=(0,a.sO)(null),i=(0,a.sO)(null),[c,d]=(0,a.eJ)(""),[m,u]=(0,a.eJ)([""]),[h,Z]=(0,a.eJ)(!0),[v,P]=(0,a.eJ)(!1),[p,E]=(0,a.eJ)(!1),[C,f]=(0,a.eJ)(),[b,I]=(0,a.eJ)(),[S,N]=(0,a.eJ)(!1),k=(0,g.Z)(),w=(0,a.I4)((e=>{t&&e.current&&e.current.focus()}),[t]);(0,a.d4)((()=>t?(0,y.Z)(r):void 0),[t,r]),(0,a.d4)((()=>{t||(d(""),u([""]),Z(!0),P(!1),E(!1),f(""),I(""),N(!1))}),[t]),(0,a.d4)((()=>w(l)),[w,t]),(0,a.bt)((()=>{const e=i.current;e&&C!==e.innerHTML&&(e.innerHTML=C)}),[C]);const M=(0,a.I4)((function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[];u([...e,""]),requestAnimationFrame((()=>{const e=o.current;e&&(e.classList.toggle("overflown",e.scrollHeight>320),e.scrollTo({top:e.scrollHeight,behavior:"smooth"}))}))}),[]),T=(0,a.I4)((()=>{if(N(!1),!t)return;const e=c.trim().substring(0,255),n=m.map((e=>e.trim().substring(0,100))).filter((e=>e.length));if(!e||n.length<2)return d(e),n.length?n.length<2?M(n):u(n):M(),void N(!0);if(p&&(!b||!n[Number(b)]))return void N(!0);const a={summary:{question:e,answers:n.map(((e,t)=>({text:e.trim(),option:String(t),...String(t)===b&&{correct:!0}}))),...!h&&{isPublic:!0},...v&&{multipleChoice:!0},...p&&{quiz:!0}}};if(p){const{text:e,entities:t}=C&&(0,rr.Z)(C.substring(0,200))||{};a.quiz={correctAnswers:[b],...e&&{solution:e},...t&&{solutionEntities:t}}}s(a)}),[t,c,m,p,b,h,v,s,M,C]),R=(0,a.I4)(((e,t)=>{const n=[...m];n[e]=t,n[n.length-1].trim().length&&n.length<10?M(n):u(n)}),[m,M]),A=(0,a.I4)((e=>{const t=[...m];t.splice(e,1),u(t),requestAnimationFrame((()=>{o.current&&o.current.classList.toggle("overflown",o.current.scrollHeight>320)}))}),[m]),L=(0,a.I4)((e=>{I(e)}),[I]),F=(0,a.I4)((e=>{Z(e.target.checked)}),[]),x=(0,a.I4)((e=>{P(e.target.checked)}),[]),$=(0,a.I4)((e=>{E(e.target.checked)}),[]),D=(0,a.I4)((e=>{13===e.keyCode&&T()}),[T]),O=(0,a.I4)((e=>{d(e.target.value)}),[]),U=(0,a.I4)((()=>{if(S&&!c.trim().length)return k("lng_polls_choose_question")}),[S,k,c]),G=(0,a.I4)((e=>{const t=m.map((e=>e.trim())).filter((e=>e.length));if(S&&t.length<2&&!m[e].trim().length)return k("lng_polls_choose_answers")}),[S,k,m]);function _(){return m.map(((e,t)=>a.ZP.createElement("div",{className:"option-wrapper"},a.ZP.createElement(Ue.Z,{label:t!==m.length-1||10===m.length?k("OptionHint"):k("CreatePoll.AddOption"),error:G(t),value:e,onChange:e=>R(t,e.currentTarget.value),onKeyPress:D}),t!==m.length-1&&a.ZP.createElement(B.Z,{className:"option-remove-button",round:!0,color:"translucent",size:"smaller",ariaLabel:k("Delete"),onClick:()=>A(t)},a.ZP.createElement("i",{className:"icon-close"})))))}return a.ZP.createElement(Oe.Z,{isOpen:t,onClose:r,header:a.ZP.createElement("div",{className:"modal-header-condensed"},a.ZP.createElement(B.Z,{round:!0,color:"translucent",size:"smaller",ariaLabel:"Cancel poll creation",onClick:r},a.ZP.createElement("i",{className:"icon-close"})),a.ZP.createElement("div",{className:"modal-title"},k("NewPoll")),a.ZP.createElement(B.Z,{color:"primary",size:"smaller",className:"modal-action-button",onClick:T},k("Create"))),className:"PollModal"},a.ZP.createElement(Ue.Z,{ref:l,label:k("AskAQuestion"),value:c,error:U(),onChange:O,onKeyPress:D}),a.ZP.createElement("div",{className:"options-divider"}),a.ZP.createElement("div",{className:"options-list custom-scroll",ref:o},a.ZP.createElement("h3",{className:"options-header"},k("PollOptions")),S&&function(){const e=m.map((e=>e.trim())).filter((e=>e.length));return p&&(!b||!e[Number(b)])&&a.ZP.createElement("p",{className:"error"},k("lng_polls_choose_correct"))}(),p?a.ZP.createElement(gt.Z,{name:"correctOption",options:_().map(((e,t)=>({value:String(t),label:e,hidden:t===m.length-1}))),onChange:L}):_()),a.ZP.createElement("div",{className:"options-divider"}),a.ZP.createElement("div",{className:"quiz-mode"},!n&&a.ZP.createElement(ct.Z,{label:k("PollAnonymous"),checked:h,onChange:F}),a.ZP.createElement(ct.Z,{label:k("PollMultiple"),checked:v,disabled:p,onChange:x}),a.ZP.createElement(ct.Z,{label:k("PollQuiz"),checked:p,disabled:v,onChange:$}),p&&a.ZP.createElement(a.ZP.Fragment,null,a.ZP.createElement("h3",{className:"options-header"},k("lng_polls_solution_title")),a.ZP.createElement("div",{ref:i,className:"form-control",contentEditable:!0,dir:"auto",onChange:e=>f(e.currentTarget.innerHTML)}),a.ZP.createElement("div",{className:"note"},k("CreatePoll.ExplanationInfo")))))}));var or=n(6503),ir=n(4284),cr=n(1367);const dr=(0,a.X$)((e=>{let{emoji:t,focus:n,onClick:s}=e;const r=(0,a.I4)((e=>{e.preventDefault(),s(t.native,t.id)}),[t,s]);return a.ZP.createElement("div",{className:"EmojiButton "+(n?"focus":""),onMouseDown:r,title:`:${t.names[0]}:`},i.op?t.native:a.ZP.createElement("img",{src:`./img-apple-64/${t.image}.png`,alt:t.native,loading:"lazy"}))})),mr=(0,a.X$)((e=>{let{category:t,index:n,allEmojis:s,observeIntersection:r,shouldRender:l,onEmojiSelect:o}=e;const c=(0,a.sO)(null);(0,jt._N)(c,r);const d=(0,Hn.Z)(l),m=(0,g.Z)(),u=i.wB?Math.floor((N.Z.get().width-8)/44):9,h=44*Math.ceil(t.emojis.length/u);return a.ZP.createElement("div",{ref:c,key:t.id,id:`emoji-category-${n}`,className:"symbol-set"},a.ZP.createElement("p",{className:"symbol-set-name",dir:"auto"},m("recent"===t.id?"RecentStickers":`Emoji${n}`)),a.ZP.createElement("div",{className:(0,Y.Z)("symbol-set-container",d),style:`height: ${h}px;`,dir:m.isRtl?"rtl":void 0},l&&t.emojis.map((e=>{const t=s[e];if(!t)return;const n="id"in t?t:t[1];return a.ZP.createElement(dr,{key:n.id,emoji:n,onClick:o})}))))})),ur={recent:"icon-recent",people:"icon-smile",nature:"icon-animals",foods:"icon-eats",activity:"icon-sport",places:"icon-car",objects:"icon-lamp",symbols:"icon-language",flags:"icon-flag"},hr=[];let Zr,vr,Pr;const gr=(0,a.X$)((0,s.c$)((e=>(0,be.ei)(e,["recentEmojis"])))((e=>{let{className:t,onEmojiSelect:s,recentEmojis:r}=e;const l=(0,a.sO)(null),c=(0,a.sO)(null),[d,m]=(0,a.eJ)(),[u,h]=(0,a.eJ)(),[Z,v]=(0,a.eJ)(0),{observe:P}=(0,jt.S1)({rootRef:l,throttleMs:200},(e=>{e.forEach((e=>{const{id:t}=e.target;if(!t||!t.startsWith("emoji-category-"))return;const n=Number(t.replace("emoji-category-",""));hr[n]=e.isIntersecting}));const t=hr.map(((e,t)=>({index:t,isIntersecting:e}))).filter((e=>{let{isIntersecting:t}=e;return t}));t.length&&v(t[Math.floor(t.length/2)].index)}));(0,Ft.Z)(c.current,!i.wB),(0,a.d4)((()=>{if(!d)return;const e=c.current;if(!e)return;const t=42*Z-e.offsetWidth/2+21;(0,cr.Z)(e,t)}),[d,Z]);const p=(0,g.Z)(),E=(0,a.Ye)((()=>{if(!d)return wt.D;const e=[...d];return null!=r&&r.length&&e.unshift({id:"recent",name:p("RecentStickers"),emojis:r}),e}),[d,p,r]);(0,a.d4)((()=>{setTimeout((()=>{const e=()=>{m(Pr.categories),h(Pr.emojis)};Pr?e():async function(){return Zr||(Zr=n.e(501).then(n.t.bind(n,7501,19)),vr=(await Zr).default,Pr=(0,ir.NM)(vr)),Zr}().then(e)}),200)}),[]);const C=(0,a.I4)((e=>{v(e);const t=document.getElementById(`emoji-category-${e}`);(0,Ks.Z)(l.current,t,"start",50,800)}),[]),f=(0,a.I4)(((e,t)=>{s(e,t)}),[s]),b=(0,Ht.Z)([],o.kU),I=(0,Y.Z)("EmojiPicker",t);return u&&b?a.ZP.createElement("div",{className:I},a.ZP.createElement("div",{ref:c,className:"EmojiPicker-header",dir:p.isRtl?"rtl":""},E.map((function(e,t){const n=ur[e.id];return n&&a.ZP.createElement(B.Z,{className:"symbol-set-button "+(t===Z?"activated":""),round:!0,faded:!0,color:"translucent",onClick:()=>C(t),ariaLabel:e.name},a.ZP.createElement("i",{className:n}))}))),a.ZP.createElement("div",{ref:l,className:(0,Y.Z)("EmojiPicker-main no-selection",i.$b?"no-scrollbar":"custom-scroll")},E.map(((e,t)=>a.ZP.createElement(mr,{category:e,index:t,allEmojis:u,observeIntersection:P,shouldRender:Z>=t-1&&Z<=t+1,onEmojiSelect:f}))))):a.ZP.createElement("div",{className:I},a.ZP.createElement(De.Z,null))})));var pr=n(6389);const Er=i.wB?8:16,Cr=(0,a.X$)((e=>{let{stickerSet:t,loadAndPlay:n,index:s,shouldRender:r,favoriteStickers:l,isSavedMessages:c,observeIntersection:d,onStickerSelect:m,onStickerUnfave:u,onStickerFave:h}=e;const Z=(0,a.sO)(null);(0,jt._N)(Z,d);const v=(0,Hn.Z)(r),P=i.wB?Math.floor((N.Z.get().width-8)/(o.Q+Er)):5,g=Math.ceil(t.count/P)*(o.Q+Er),p=(0,a.Ye)((()=>l?new Set(l.map((e=>{let{id:t}=e;return t}))):void 0),[l]);return a.ZP.createElement("div",{ref:Z,key:t.id,id:`sticker-set-${s}`,className:"symbol-set"},a.ZP.createElement("p",{className:"symbol-set-name"},t.title),a.ZP.createElement("div",{className:(0,Y.Z)("symbol-set-container",v),style:`height: ${g}px;`},r&&t.stickers&&t.stickers.map((e=>a.ZP.createElement(Kn.Z,{key:e.id,sticker:e,size:o.Q,observeIntersection:d,noAnimate:!n,onClick:m,clickArg:e,onUnfaveClick:null!=p&&p.has(e.id)?u:void 0,onFaveClick:null!=p&&p.has(e.id)?void 0:h,isSavedMessages:c})))))})),fr=[],br=(0,a.X$)((0,s.c$)(((e,t)=>{let{chatId:n}=t;const{setsById:a,added:s,recent:r,favorite:l}=e.stickers,o=(0,b.FM)(e,n);return{recentStickers:r.stickers,favoriteStickers:l.stickers,stickerSetsById:a,addedSetIds:s.setIds,shouldPlay:e.settings.byKey.shouldLoopStickers,isSavedMessages:o}}))((e=>{let{chatId:t,threadId:n,className:r,loadAndPlay:l,canSendStickers:c,recentStickers:d,favoriteStickers:m,addedSetIds:u,stickerSetsById:h,shouldPlay:Z,isSavedMessages:v,onStickerSelect:P}=e;const{loadRecentStickers:p,addRecentSticker:E,unfaveSticker:C,faveSticker:f}=(0,s.Sv)(),b=(0,a.sO)(null),I=(0,a.sO)(null),[y,S]=(0,a.eJ)(0),N=(0,pr.Z)(t,n),{observe:k}=(0,jt.S1)({rootRef:b,throttleMs:200},(e=>{e.forEach((e=>{const{id:t}=e.target;if(!t||!t.startsWith("sticker-set-"))return;const n=Number(t.replace("sticker-set-",""));fr[n]=e.isIntersecting}));const t=fr.map(((e,t)=>({index:t,isIntersecting:e}))).filter((e=>{let{isIntersecting:t}=e;return t}));t.length&&S(t[Math.floor(t.length/2)].index)})),{observe:w}=(0,jt.S1)({rootRef:I}),M=(0,g.Z)(),T=Boolean(u),R=(0,a.Ye)((()=>u?[{id:"recent",title:M("RecentStickers"),stickers:d,count:d.length},{id:"favorite",title:M("FavoriteStickers"),stickers:m,count:m.length},...u.map((e=>h[e])).filter(Boolean)]:wt.D),[u,M,d,m,h]),A=(0,a.Ye)((()=>T&&0===R.filter((e=>{var t;return null===(t=e.stickers)||void 0===t?void 0:t.length})).length),[R,T]);(0,a.d4)((()=>{l&&(p(),N({type:"chooseSticker"}))}),[l,p,N]),(0,Ft.Z)(I.current),(0,a.d4)((()=>{if(!T)return;const e=I.current;if(!e)return;const t=52*y-(e.offsetWidth/2-26);(0,cr.Z)(e,t)}),[T,y]);const L=(0,a.I4)((e=>{S(e);const t=document.getElementById(`sticker-set-${e}`);(0,Ks.Z)(b.current,t,"start",void 0,500)}),[]),F=(0,a.I4)(((e,t,n)=>{P(e,t,n),E({sticker:e})}),[E,P]),x=(0,a.I4)((e=>{C({sticker:e})}),[C]),$=(0,a.I4)((e=>{f({sticker:e})}),[f]),D=(0,a.I4)((()=>{N({type:"chooseSticker"})}),[N]),O=(0,Ht.Z)([],o.Y),U=(0,Y.Z)("StickerPicker",r);return T&&O&&!A&&c?a.ZP.createElement("div",{className:U},a.ZP.createElement("div",{ref:I,className:"StickerPicker-header no-selection no-scrollbar"},R.map((function(e,t){var n;const s=null===(n=e.stickers)||void 0===n?void 0:n[0],r=(0,Y.Z)("symbol-set-button sticker-set-button",t===y&&"activated");return"recent"===e.id||"favorite"===e.id||e.hasThumbnail||!s?a.ZP.createElement(B.Z,{key:e.id,className:r,ariaLabel:e.title,round:!0,faded:"recent"===e.id||"favorite"===e.id,color:"translucent",onClick:()=>L(t)},"recent"===e.id?a.ZP.createElement("i",{className:"icon-recent"}):"favorite"===e.id?a.ZP.createElement("i",{className:"icon-favorite"}):e.isLottie?a.ZP.createElement(jn,{stickerSet:e,observeIntersection:w}):a.ZP.createElement(qn,{stickerSet:e,observeIntersection:w})):a.ZP.createElement(Kn.Z,{key:e.id,sticker:s,size:o.DC,title:e.title,className:r,observeIntersection:w,onClick:L,clickArg:t,noContextMenu:!0})}))),a.ZP.createElement("div",{ref:b,onMouseMove:D,className:(0,Y.Z)("StickerPicker-main no-selection",i.$b?"no-scrollbar":"custom-scroll")},R.map(((e,t)=>a.ZP.createElement(Cr,{key:e.id,stickerSet:e,loadAndPlay:Boolean(Z&&l),index:t,observeIntersection:k,shouldRender:y>=t-1&&y<=t+1,onStickerSelect:F,onStickerUnfave:x,onStickerFave:$,favoriteStickers:m,isSavedMessages:v}))))):a.ZP.createElement("div",{className:U},c?A?a.ZP.createElement("div",{className:"picker-disabled"},M("NoStickers")):a.ZP.createElement(De.Z,null):a.ZP.createElement("div",{className:"picker-disabled"},M("ErrorSendRestrictedStickersAll")))})));var Ir=n(386);function yr(){return yr=Object.assign||function(e){for(var t=1;t{var t,n;let{gif:s,isDisabled:l,className:o,observeIntersection:c,onClick:d,onUnsaveClick:m,isSavedMessages:u}=e;const h=(0,a.sO)(null),Z=(0,a.sO)(null),v=(0,g.Z)(),P=Boolean(null===(t=s.thumbnail)||void 0===t?void 0:t.dataUri),E=`gif${s.id}`,C=(0,jt.Op)(h,c)&&!l,f=(0,p.Z)(`${E}?size=m`,!C,r.IU.BlobUrl),b=(0,ma.Z)(null===(n=s.thumbnail)||void 0===n?void 0:n.dataUri,Boolean(f)),I=(0,p.Z)(E,!C,r.IU.BlobUrl),y=Boolean(C&&I),{isBuffered:S,bufferingHandlers:N}=(0,j.Z)(!0),k=C&&!S,w=C&&S;(0,W.Z)(Z,[y]);const{isContextMenuOpen:M,contextMenuPosition:T,handleBeforeContextMenu:R,handleContextMenu:A,handleContextMenuClose:L,handleContextMenuHide:F}=(0,zs.Z)(h),x=(0,a.I4)((()=>h.current),[]),$=(0,a.I4)((()=>h.current.closest(".custom-scroll, .no-scrollbar")),[]),D=(0,a.I4)((()=>h.current.querySelector(".gif-context-menu .bubble")),[]),{positionX:U,positionY:G,transformOriginX:_,transformOriginY:J,style:X}=(0,Ns.Z)(T,x,$,D),z=(0,a.I4)((()=>{!M&&d&&d({...s,blobUrl:I})}),[M,d,s,I]),H=(0,a.I4)((e=>{e.stopPropagation(),e.preventDefault(),m(s)}),[m,s]),q=(0,a.I4)((()=>{null==m||m(s)}),[s,m]),K=(0,a.I4)((()=>{d({...s,blobUrl:I},!0)}),[s,d,I]),Q=(0,a.I4)((()=>{d({...s,blobUrl:I},void 0,!0)}),[s,d,I]),ee=(0,a.I4)((e=>{(0,Ir.b)(e),R(e)}),[R]);(0,a.d4)((()=>{l&&L()}),[L,l]);const te=(0,Y.Z)("GifButton",s.width&&s.height&&s.width{const{chatId:t}=(0,b.Bt)(e)||{},n=Boolean(t)&&(0,b.FM)(e,t);return{savedGifs:e.gifs.saved.gifs,isSavedMessages:n}}))((e=>{let{className:t,loadAndPlay:n,canSendGifs:r,savedGifs:l,isSavedMessages:c,onGifSelect:d}=e;const{loadSavedGifs:m,saveGif:u}=(0,s.Sv)(),h=(0,a.sO)(null),{observe:Z}=(0,jt.S1)({rootRef:h,debounceMs:300});(0,a.d4)((()=>{n&&m()}),[n,m]);const v=(0,a.I4)((e=>{u({gif:e,shouldUnsave:!0})}),[u]),P=(0,Ht.Z)([],o.Y);return a.ZP.createElement("div",{ref:h,className:(0,Y.Z)("GifPicker",t,i.$b?"no-scrollbar":"custom-scroll")},r?P&&l&&l.length?l.map((e=>a.ZP.createElement(Sr,{key:e.id,gif:e,observeIntersection:Z,isDisabled:!n,onClick:r?d:void 0,onUnsaveClick:v,isSavedMessages:c}))):P&&l?a.ZP.createElement("div",{className:"picker-disabled"},"No saved GIFs."):a.ZP.createElement(De.Z,null):a.ZP.createElement("div",{className:"picker-disabled"},"Sending GIFs is not allowed in this chat."))})));let kr;!function(e){e[e.Emoji=0]="Emoji",e[e.Stickers=1]="Stickers",e[e.GIFs=2]="GIFs"}(kr||(kr={}));const wr=Object.values(kr).filter((e=>"string"==typeof e)),Mr={[kr.Emoji]:"icon-smile",[kr.Stickers]:"icon-stickers",[kr.GIFs]:"icon-gifs"},Tr=(0,a.X$)((e=>{let{activeTab:t,onSwitchTab:n,onRemoveSymbol:s,onSearchOpen:r}=e;const l=(0,g.Z)();function o(e){return a.ZP.createElement(B.Z,{className:"symbol-tab-button "+(t===e?"activated":""),onClick:()=>n(e),ariaLabel:wr[e],round:!0,faded:!0,color:"translucent"},a.ZP.createElement("i",{className:Mr[e]}))}const i=(0,a.I4)((()=>{r(t===kr.Stickers?"stickers":"gifs")}),[t,r]);return a.ZP.createElement("div",{className:"SymbolMenu-footer",onClick:function(e){e.stopPropagation()},dir:l.isRtl?"rtl":void 0},t!==kr.Emoji&&a.ZP.createElement(B.Z,{className:"symbol-search-button",ariaLabel:t===kr.Stickers?"Search Stickers":"Search GIFs",round:!0,faded:!0,color:"translucent",onClick:i},a.ZP.createElement("i",{className:"icon-search"})),o(kr.Emoji),o(kr.Stickers),o(kr.GIFs),t===kr.Emoji&&a.ZP.createElement(B.Z,{className:"symbol-delete-button",onClick:s,ariaLabel:"Remove Symbol",round:!0,faded:!0,color:"translucent"},a.ZP.createElement("i",{className:"icon-delete-left"})))}));let Rr=!1;const Ar=(0,a.X$)((0,s.c$)((e=>({isLeftColumnShown:e.isLeftColumnShown})))((e=>{let{chatId:t,threadId:n,isOpen:s,canSendStickers:r,canSendGifs:l,isLeftColumnShown:o,onLoad:c,onClose:d,onEmojiSelect:m,onStickerSelect:u,onGifSelect:h,onRemoveSymbol:Z,onSearchOpen:v,addRecentEmoji:P}=e;const[p,E]=(0,a.eJ)(0),[C,f]=(0,a.eJ)([]),[b,I]=(0,or.Z)(s,d,void 0,i.wB),{shouldRender:y,transitionClassNames:S}=(0,K.Z)(s,d,!1,!1);!Rr&&s&&(Rr=!0),(0,a.d4)((()=>{c()}),[c]),(0,a.bt)((()=>{if(i.wB)return s&&(document.body.classList.add("enable-symbol-menu-transforms"),document.body.classList.add("is-symbol-menu-open")),()=>{s&&(0,z.T2)((()=>{document.body.classList.remove("is-symbol-menu-open"),setTimeout((()=>{document.body.classList.remove("enable-symbol-menu-transforms")}),350)}))}}),[s]);const N=(0,a.sO)(C);N.current=C,(0,a.d4)((()=>{N.current.length&&(N.current.forEach((e=>{P({emoji:e})})),f([]))}),[s,p,P]);const k=(0,a.I4)(((e,t)=>{f((e=>[...e,t])),m(e)}),[m]),w=(0,a.I4)((e=>{d(),v(e)}),[d,v]),M=(0,a.I4)(((e,t,n)=>{u(e,t,n,!0)}),[u]),T=(0,g.Z)();function R(e,o){switch(p){case kr.Emoji:return a.ZP.createElement(gr,{className:"picker-tab",onEmojiSelect:k});case kr.Stickers:return a.ZP.createElement(br,{className:"picker-tab",loadAndPlay:!!r&&s&&(e||o),canSendStickers:r,onStickerSelect:M,chatId:t,threadId:n});case kr.GIFs:return a.ZP.createElement(Nr,{className:"picker-tab",loadAndPlay:!!l&&s&&(e||o),canSendGifs:l,onGifSelect:h})}}const A=a.ZP.createElement(a.ZP.Fragment,null,a.ZP.createElement("div",{className:"SymbolMenu-main",onClick:function(e){e.stopPropagation()}},Rr&&a.ZP.createElement($.Z,{name:"slide",activeKey:p,renderCount:wr.length},R)),i.wB&&a.ZP.createElement(B.Z,{round:!0,faded:!0,color:"translucent",ariaLabel:T("Close"),className:"symbol-close-button",size:"tiny",onClick:d},a.ZP.createElement("i",{className:"icon-close"})),a.ZP.createElement(Tr,{activeTab:p,onSwitchTab:E,onRemoveSymbol:Z,onSearchOpen:w}));if(i.wB){if(!y)return;const e=(0,Y.Z)("SymbolMenu mobile-menu",S,!o&&"middle-column-open");return a.ZP.createElement($s.Z,null,a.ZP.createElement("div",{className:e},A))}return a.ZP.createElement(re.Z,{isOpen:s,positionX:"left",positionY:"bottom",onClose:d,className:"SymbolMenu",onCloseAnimationEnd:d,onMouseEnter:i.$b?void 0:b,onMouseLeave:i.$b?void 0:I,noCloseOnBackdrop:!i.$b,noCompact:!0},A)}))),Lr=(0,a.X$)((e=>{let{withAvatar:t,focus:n,botCommand:s,bot:r,onClick:l}=e;return a.ZP.createElement(_e.Z,{key:s.command,className:(0,Y.Z)("BotCommand chat-item-clickable scroll-item",t&&"with-avatar"),multiline:!0,onClick:()=>l(s),focus:n},t&&a.ZP.createElement(we.Z,{size:"small",user:r}),a.ZP.createElement("div",{className:"content-inner"},a.ZP.createElement("span",{className:"title"},"/",s.command),a.ZP.createElement("span",{className:"subtitle"},(0,ke.Z)(s.description))))})),Fr=(0,a.X$)((0,s.c$)((e=>({usersById:e.users.byId})))((e=>{let{usersById:t,isOpen:n,withUsername:r,botCommands:l,onClick:o,onClose:i}=e;const{sendBotCommand:c}=(0,s.Sv)(),d=(0,a.sO)(null),{shouldRender:m,transitionClassNames:u}=(0,K.Z)(n,void 0,void 0,!1),h=(0,a.I4)((e=>{let{botId:n,command:a}=e;const s=t[n];c({command:`/${a}${r&&s?`@${s.username}`:""}`,botId:n}),o()}),[o,c,t,r]),Z=er({isActive:n,items:l,onSelect:h,onClose:i});(0,a.d4)((()=>{l&&!l.length&&i()}),[l,i]),(0,a.d4)((()=>{Ws(".chat-item-clickable",Z,d)}),[Z]);const v=(0,C.Z)(l&&l.length?l:void 0,m),P=l&&!l.length?v:l;if(!m||P&&!P.length)return;const g=(0,Y.Z)("BotCommandTooltip composer-tooltip custom-scroll",u);return a.ZP.createElement("div",{className:g,ref:d},P&&P.map(((e,n)=>a.ZP.createElement(Lr,{key:`${e.botId}_${e.command}`,botCommand:e,bot:t[e.botId],withAvatar:!0,onClick:h,focus:Z===n}))))}))),Br=(0,a.X$)((e=>{let{isOpen:t,botCommands:n,onClose:r}=e;const{sendBotCommand:l}=(0,s.Sv)(),[o,c]=(0,or.Z)(t,r,void 0,i.wB),d=(0,a.I4)((e=>{l({command:`/${e.command}`,botId:e.botId}),r()}),[r,l]);return a.ZP.createElement(re.Z,{isOpen:t,positionX:"left",positionY:"bottom",onClose:r,className:"BotCommandMenu",onCloseAnimationEnd:r,onMouseEnter:i.$b?void 0:o,onMouseLeave:i.$b?void 0:c,noCloseOnBackdrop:!i.$b,noCompact:!0},n.map((e=>a.ZP.createElement(Lr,{key:e.command,botCommand:e,onClick:d}))))})),xr=(0,a.X$)((0,s.c$)(((e,t)=>{let{chatId:n}=t;const{stickers:a}=e.stickers.forEmoji;return{stickers:a,isSavedMessages:(0,b.FM)(e,n)}}))((e=>{let{chatId:t,threadId:n,isOpen:r,stickers:l,isSavedMessages:i,onStickerSelect:c}=e;const{clearStickersForEmoji:d}=(0,s.Sv)(),m=(0,a.sO)(null),{shouldRender:u,transitionClassNames:h}=(0,K.Z)(r,void 0,void 0,!1),Z=(0,C.Z)(l,!0),v=l||Z,P=(0,pr.Z)(t,n),{observe:g}=(0,jt.S1)({rootRef:m,throttleMs:200});(0,a.d4)((()=>r?(0,y.Z)(d):void 0),[r,d]);const p=(0,Y.Z)("StickerTooltip composer-tooltip custom-scroll",h,!(null!=v&&v.length)&&"hidden");return a.ZP.createElement("div",{ref:m,className:p,onMouseMove:()=>{P({type:"chooseSticker"})}},u&&v?v.map((e=>a.ZP.createElement(Kn.Z,{key:e.id,sticker:e,size:o.Q,observeIntersection:g,onClick:c,clickArg:e,isSavedMessages:i}))):u?a.ZP.createElement(De.Z,null):void 0)}))),$r=(0,a.X$)((e=>{let{isOpen:t,isOpenToBottom:n=!1,isSavedMessages:s,onSendSilent:r,onSendSchedule:l,onClose:o,onCloseAnimationEnd:c}=e;const[d,m]=(0,or.Z)(t,o),u=(0,g.Z)();return a.ZP.createElement(re.Z,{isOpen:t,autoClose:!0,positionX:"right",positionY:n?"top":"bottom",className:"CustomSendMenu",onClose:o,onCloseAnimationEnd:c,onMouseEnter:i.$b?void 0:d,onMouseLeave:i.$b?void 0:m,noCloseOnBackdrop:!i.$b},r&&a.ZP.createElement(O.Z,{icon:"mute",onClick:r},u("SendWithoutSound")),l&&a.ZP.createElement(O.Z,{icon:"schedule",onClick:l},u(s?"SetReminder":"ScheduleMessage")))}));var Dr=n(2420),Or=n(3283),Ur=n(2678);const Gr=(0,a.X$)((e=>{let{isOpen:t,emojis:n,onClose:s,onEmojiSelect:r,addRecentEmoji:l}=e;const o=(0,a.sO)(null),{shouldRender:i,transitionClassNames:c}=(0,K.Z)(t,void 0,void 0,!1),d=(0,Ur.Z)(n.length?n:void 0,350)||[],m=(0,a.I4)((e=>{r(e.native),l({emoji:e.id})}),[l,r]),u=(0,a.I4)(((e,t)=>{r(e),l({emoji:t})}),[l,r]),h=er({isActive:t,isHorizontal:!0,items:n,onSelect:m,onClose:s});(0,a.d4)((()=>{!function(e,t){const n=t.current;if(!n)return;const{visibleIndexes:a,allElements:s}=js(n,".EmojiButton",8,!0,!0,!0);if(!s.length||!s[e])return;const r=a[0];if(!a.includes(e)||e===r&&!qs(n,s[r],!0)){const t="start"==(e>a[a.length-1]?"start":"end")?44*e:0;(0,cr.Z)(n,t)}}(h,o)}),[h]);const Z=(0,Y.Z)("EmojiTooltip composer-tooltip custom-scroll-x",c);return a.ZP.createElement("div",{ref:o,className:Z},i&&d?d.map(((e,t)=>a.ZP.createElement(dr,{key:e.id,emoji:e,focus:h===t,onClick:u}))):i?a.ZP.createElement(De.Z,null):void 0)})),_r=(0,a.X$)((e=>{let{title:t,description:n,thumbnail:s,thumbUrl:r,focus:l,transitionClassNames:o="",onClick:i}=e,c="";const d=(0,p.Z)(s?`webDocument:${s.url}`:void 0);return r=r||d,r?c=a.ZP.createElement("img",{src:r,className:o,alt:"",decoding:"async",draggable:"false"}):t&&(c=(0,ft.Xv)(t,1)),a.ZP.createElement(_e.Z,{focus:l,className:"BaseResult chat-item-clickable",onMouseDown:Ir.b,onClick:i},a.ZP.createElement("span",{className:"thumb"},"string"==typeof c?(0,ke.Z)(c):c),a.ZP.createElement("div",{className:"content-inner"},t&&a.ZP.createElement("div",{className:"title"},t),n&&a.ZP.createElement("div",{className:"description"},n)))})),Jr=(0,a.X$)((e=>{var t;let n,s,r,{focus:l,isForGallery:o,inlineResult:i,onClick:c}=e;"photo"in i&&(n=i.photo),"thumbnail"in i&&(s=i.thumbnail),"webThumbnail"in i&&o&&(r=i.webThumbnail);const d=(0,p.Z)(r?`webDocument:${r.url}`:void 0),m=(0,p.Z)(n&&`photo${n.id}?size=m`),u=(0,Hn.Z)(m),h=(0,a.I4)((()=>{c(i)}),[i,c]);var Z,v;if(o)return a.ZP.createElement("div",{className:"MediaResult chat-item-clickable",onClick:h},a.ZP.createElement("img",{src:(null===(Z=n)||void 0===Z||null===(v=Z.thumbnail)||void 0===v?void 0:v.dataUri)||d,alt:""}),a.ZP.createElement("img",{src:m,className:(0,Y.Z)("full-media",u),alt:""}));const{title:P,description:g}=i;return a.ZP.createElement(_r,{focus:l,thumbUrl:m||(null===(t=s)||void 0===t?void 0:t.dataUri)||d,transitionClassNames:u,title:P,description:g,onClick:h})})),Xr=(0,a.X$)((e=>{let{focus:t,inlineResult:n,onClick:s}=e;const{title:r,url:l,description:o,webThumbnail:i}=n,c=(0,a.I4)((()=>{s(n)}),[n,s]);return a.ZP.createElement(_r,{focus:t,thumbnail:i,title:r||l,description:o,onClick:c})})),zr=(0,a.X$)((e=>{let{inlineResult:t,isSavedMessages:n,canSendGifs:s,observeIntersection:r,onClick:l}=e;const{gif:o}=t,i=(0,a.I4)(((e,n,a)=>{l(t,n,a)}),[t,l]);if(o)return a.ZP.createElement(Sr,{gif:o,observeIntersection:r,className:"chat-item-clickable",onClick:s?i:void 0,isSavedMessages:n})})),Vr=(0,a.X$)((e=>{let{inlineResult:t,isSavedMessages:n,observeIntersection:s,onClick:r}=e;const{sticker:l}=t;if(l)return a.ZP.createElement(Kn.Z,{sticker:l,size:o.zq,observeIntersection:s,title:l.emoji,className:"chat-item-clickable",onClick:r,clickArg:t,isSavedMessages:n})})),Yr=(0,z.P2)((e=>e()),500,!0),Hr=(0,a.X$)((e=>{let{isOpen:t,botId:n,isGallery:r,inlineBotResults:o,switchPm:c,isSavedMessages:d,canSendGifs:m,loadMore:u,onClose:h,onSelectResult:Z}=e;const{openChat:v,startBot:P}=(0,s.Sv)(),g=(0,a.sO)(null),{shouldRender:p,transitionClassNames:E}=(0,K.Z)(t,void 0,void 0,!1),{observe:f}=(0,jt.S1)({rootRef:g,debounceMs:200,isDisabled:!t}),b=(0,a.I4)((e=>{let{direction:t}=e;t===l.Uq.Backwards&&Yr(u)}),[u]),I=er({isActive:t,shouldRemoveSelectionOnReset:r,noArrowNavigation:r,items:o,onSelect:Z,onClose:h});(0,a.d4)((()=>{Ws(".chat-item-clickable",I,g)}),[I]);const y=(0,a.I4)((()=>{v({id:n}),P({botId:n,param:c.startParam})}),[n,v,P,c]),S=(0,C.Z)(null!=o&&o.length?o:void 0,p),N=o&&!o.length?S:o;if(!p||!(null!=N&&N.length||c))return;const k=(0,Y.Z)("InlineBotTooltip composer-tooltip",i.$b?"no-scrollbar":"custom-scroll",r&&"gallery",E);return a.ZP.createElement(Ge.Z,{ref:g,className:k,items:N,itemSelector:".chat-item-clickable",noFastList:!0,onLoadMore:b,sensitiveArea:160},c&&a.ZP.createElement(_e.Z,{ripple:!0,className:"switch-pm scroll-item",onClick:y},a.ZP.createElement("span",{className:"title"},c.text)),(null==N?void 0:N.length)&&N.map(((e,t)=>{switch(e.type){case"gif":return a.ZP.createElement(zr,{key:e.id,inlineResult:e,observeIntersection:f,onClick:Z,isSavedMessages:d,canSendGifs:m});case"photo":return a.ZP.createElement(Jr,{key:e.id,isForGallery:r,inlineResult:e,onClick:Z});case"sticker":return a.ZP.createElement(Vr,{key:e.id,inlineResult:e,observeIntersection:f,onClick:Z,isSavedMessages:d});case"video":case"file":case"game":return a.ZP.createElement(Jr,{key:e.id,focus:I===t,inlineResult:e,onClick:Z});case"article":case"audio":return a.ZP.createElement(Xr,{key:e.id,focus:I===t,inlineResult:e,onClick:Z});default:return}})))})),jr=(0,a.X$)((e=>{let{isOpen:t,onClose:n,chatId:r,selectedSendAsId:l,sendAsIds:o}=e;const{saveDefaultSendAs:c}=(0,s.Sv)(),d=(0,s.Rd)().users.byId,m=(0,s.Rd)().chats.byId,u=(0,g.Z)(),h=(0,a.sO)(null),[Z,v,P]=(0,or.Z)(t,n,void 0);(0,a.d4)((()=>{t&&P()}),[t,P]);const p=(0,a.I4)((e=>{n(),c({chatId:r,sendAsId:e})}),[r,n,c]),E=er({isActive:t,items:o,onSelect:p,shouldSelectOnTab:!0,shouldSaveSelectionOnUpdateItems:!0,onClose:n});return(0,a.d4)((()=>{Ws(".chat-item-clickable",E,h)}),[E]),(0,a.d4)((()=>{o&&!o.length&&n()}),[o,n]),a.ZP.createElement(re.Z,{isOpen:t,positionX:"left",positionY:"bottom",onClose:n,className:"SendAsMenu",onCloseAnimationEnd:n,onMouseEnter:i.$b?void 0:Z,onMouseLeave:i.$b?void 0:v,noCloseOnBackdrop:!i.$b,noCompact:!0},a.ZP.createElement("div",{className:"send-as-title",dir:"auto"},u("SendMessageAsTitle")),d&&m&&(null==o?void 0:o.map(((e,t)=>{const n=(0,f.YC)(e)?d[e]:void 0,s=n?void 0:m[e],r=n?(0,f.Js)(n):null==s?void 0:s.title;return a.ZP.createElement(_e.Z,{key:e,className:"SendAsItem chat-item-clickable scroll-item with-avatar",onClick:()=>p(e),focus:E===t},a.ZP.createElement(we.Z,{size:"small",user:n,chat:s,className:(0,Y.Z)(l===e&&"selected")}),a.ZP.createElement("div",{className:"info"},a.ZP.createElement("div",{className:"title"},a.ZP.createElement("h3",{dir:"auto"},r&&(0,ke.Z)(r))),a.ZP.createElement("span",{className:"subtitle"},n?u("VoipGroupPersonalAccount"):u("Subscribers",null==s?void 0:s.membersCount,"i"))))}))))}));var qr=n(6844);const Kr=(0,a.X$)((0,s.c$)(((e,t)=>{let{chatId:n}=t;const a=(0,b.Z1)(e,n),s=a&&(0,b.Zw)(e,a.id);if(!a||!s)return{};const{query:r,results:l}=(0,b.n5)(e)||{},{totalCount:o,foundIds:i}=l||{};return{chat:a,messagesById:s,query:r,totalCount:o,foundIds:i}}))((e=>{let{chatId:t,threadId:n,onClose:r,isActive:l,chat:o,messagesById:i,query:c,totalCount:d,foundIds:m}=e;const{searchTextMessagesLocal:u,focusMessage:h}=(0,s.Sv)(),Z=(0,a.sO)(null),v=(0,g.Z)();(0,P.ZP)(l,r);const[p,E]=(0,Be.Z)(u,m),C=(0,a.Ye)((()=>c&&null!=p&&p.length&&i?p.map((e=>{const a=i[e];if(!a)return;const r=a.senderId?(0,b.dy)((0,s.Rd)(),a.senderId):void 0;let l;if(o&&(0,f.eA)(o))l=o;else if(a.forwardInfo){const{isChannelPost:e,fromChatId:t}=a.forwardInfo;l=e&&t?(0,b.Z1)((0,s.Rd)(),t):void 0}else l=a.senderId?(0,b.Z1)((0,s.Rd)(),a.senderId):void 0;return{message:a,senderUser:r,senderChat:l,onClick:()=>h({chatId:t,threadId:n,messageId:e})}})).filter(Boolean):wt.D),[c,p,i,o,h,t,n]),I=(0,xe.Z)(Z,!0,(e=>{const t=null==C?void 0:C[-1===e?0:e];t&&t.onClick()}),".ListItem-button",!0),y=(null==p?void 0:p[0])===(null==m?void 0:m[0]);return a.ZP.createElement(Ge.Z,{ref:Z,className:"RightSearch custom-scroll",items:C,preloadBackwards:0,onLoadMore:E,onKeyDown:I},y&&a.ZP.createElement("p",{key:"helper-text",className:"helper-text",dir:"auto"},c?0!==d&&C.length?1===d?"1 message found":`${C.length&&(d||C.length)} messages found`:v("lng_search_no_results"):v("lng_dlg_search_for_messages")),C.map((e=>{let{message:t,senderUser:n,senderChat:s,onClick:r}=e;const l=s?(0,f.U)(v,s):(0,f.Js)(n),o=(0,w.e)(v,t,void 0,c);return a.ZP.createElement(_e.Z,{key:t.id,teactOrderKey:-t.date,className:"chat-item-clickable search-result-message m-0",onClick:r},a.ZP.createElement(we.Z,{chat:s,user:n}),a.ZP.createElement("div",{className:"info"},a.ZP.createElement("div",{className:"title"},a.ZP.createElement("h3",{dir:"auto"},l&&(0,ke.Z)(l)),a.ZP.createElement(qr.Z,{message:t})),a.ZP.createElement("div",{className:"subtitle",dir:"auto"},o)))})))}))),Wr=(0,a.X$)((0,s.c$)(((e,t)=>{let{stickerSetId:n}=t;return{set:(0,b.Ny)(e,n),shouldPlay:(0,b.yB)(e)}}))((e=>{let{stickerSetId:t,observeIntersection:n,set:r,shouldPlay:l,isSomeModalOpen:i,onModalToggle:c}=e;const{loadStickers:m,toggleStickerSet:u}=(0,s.Sv)(),h=(0,g.Z)(),Z=r&&Boolean(r.installedDate),v=Boolean(null==r?void 0:r.stickers),[P,p,E]=(0,ee.Z)();(0,d.Z)((()=>{c(P)}),[P,c]);const C=(0,a.Ye)((()=>{if(!r)return[];const e=(r.covers||[]).map((e=>{let{id:t}=e;return t})),t=r.stickers?r.stickers.filter((t=>{let{id:n}=t;return!e.includes(n)})):[];return[...r.covers||[],...t].slice(0,5)}),[r]);(0,a.d4)((()=>{!v&&C.length<5&&m({stickerSetId:t})}),[v,C.length,m,t]);const f=(0,a.I4)((()=>{u({stickerSetId:t})}),[u,t]);if(!r)return;const b=C.length>0;return a.ZP.createElement("div",{key:r.id,className:"sticker-set",dir:h.isRtl?"rtl":void 0},a.ZP.createElement("div",{className:"sticker-set-header"},a.ZP.createElement("div",{className:"title-wrapper"},a.ZP.createElement("h3",{className:"title",dir:"auto"},r.title),a.ZP.createElement("p",{className:"count",dir:"auto"},h("Stickers",r.count,"i"))),a.ZP.createElement(B.Z,{className:Z?"is-added":void 0,color:"primary",size:"tiny",pill:!0,fluid:!0,onClick:f},h(Z?"Stickers.Installed":"Stickers.Install"))),a.ZP.createElement("div",{className:"sticker-set-main"},!b&&a.ZP.createElement(V.Z,null),b&&C.map((e=>a.ZP.createElement(Kn.Z,{sticker:e,size:o.Y7,observeIntersection:n,noAnimate:!l||P||i,clickArg:void 0,onClick:p,noContextMenu:!0})))),b&&a.ZP.createElement(Qn.Z,{isOpen:P,fromSticker:C[0],onClose:E}))}))),Qr=(0,z.P2)((e=>e()),6e4,!0),el=(0,a.X$)((0,s.c$)((e=>{const t=(0,b.y5)(e),{query:n,resultIds:a}=t||{},{featured:s}=e.stickers;return{query:n,featuredIds:s.setIds,resultIds:a}}))((e=>{let{onClose:t,isActive:n,query:r,featuredIds:l,resultIds:o}=e;const{loadFeaturedStickers:i}=(0,s.Sv)(),c=(0,a.sO)(null),d=(0,g.Z)(),[m,u]=(0,a.eJ)(!1),{observe:h}=(0,jt.S1)({rootRef:c,throttleMs:200});return(0,a.d4)((()=>{Qr((()=>{i()}))})),(0,P.ZP)(n,t),a.ZP.createElement("div",{ref:c,className:"StickerSearch custom-scroll",dir:d.isRtl?"rtl":void 0},function(){if(void 0!==r)return!r&&l?l.map((e=>a.ZP.createElement(Wr,{key:e,stickerSetId:e,observeIntersection:h,isSomeModalOpen:m,onModalToggle:u}))):o?o.length?o.map((e=>a.ZP.createElement(Wr,{key:e,stickerSetId:e,observeIntersection:h,isSomeModalOpen:m,onModalToggle:u}))):a.ZP.createElement("p",{className:"helper-text",dir:"auto"},"Nothing found."):a.ZP.createElement(De.Z,null)}())}))),tl=(0,a.X$)((0,s.c$)((e=>{const t=(0,b.yN)(e),{query:n,results:a}=t||{},{chatId:s,threadId:r}=(0,b.Bt)(e)||{},l=s?(0,b.Z1)(e,s):void 0;return{query:n,results:a,chat:l,isChatWithBot:l?(0,b.xo)(e,l):void 0,isSavedMessages:Boolean(s)&&(0,b.FM)(e,s),canPostInChat:Boolean(l)&&Boolean(r)&&(0,f.Qm)(l,r),canScheduleUntilOnline:Boolean(s)&&(0,b.Eh)(e,s)}}))((e=>{let{isActive:t,query:n,results:r,chat:l,isChatWithBot:o,canScheduleUntilOnline:c,isSavedMessages:d,canPostInChat:m,onClose:u}=e;const{searchMoreGifs:h,sendMessage:Z,setGifSearchQuery:v}=(0,s.Sv)(),p=(0,a.sO)(null),[E,C]=(0,Bs.Z)(c),{observe:b}=(0,jt.S1)({rootRef:p,debounceMs:300}),I=m&&(0,f.H5)(l,o).canSendGifs,y=(0,a.I4)(((e,t,n)=>{I&&(n?E((n=>{Z({gif:e,scheduledAt:n,isSilent:t})})):Z({gif:e,isSilent:t})),i.$b&&v({query:void 0})}),[I,E,Z,v]),S=(0,g.Z)();(0,P.ZP)(t,u);const N=Boolean(void 0!==n&&r&&r.length);return a.ZP.createElement("div",{className:"GifSearch",dir:S.isRtl?"rtl":void 0},a.ZP.createElement(Ge.Z,{ref:p,className:(0,Y.Z)("gif-container custom-scroll",N&&"grid"),items:r,itemSelector:".GifButton",preloadBackwards:96,noFastList:!0,onLoadMore:h},function(){if(void 0!==n)return r?r.length?r.map((e=>a.ZP.createElement(Sr,{key:e.id,gif:e,observeIntersection:b,onClick:I?y:void 0,isSavedMessages:d}))):a.ZP.createElement("p",{className:"helper-text",dir:"auto"},S("NoGIFsFound")):a.ZP.createElement(De.Z,null)}()),C)})));var nl=n(1226);const al=[[{name:"followers",title:"ChannelStats.Overview.Followers"},{name:"enabledNotifications",title:"ChannelStats.Overview.EnabledNotifications",isPercentage:!0}],[{name:"viewsPerPost",title:"ChannelStats.Overview.ViewsPerPost"},{name:"sharesPerPost",title:"ChannelStats.Overview.SharesPerPost"}]],sl=[[{name:"members",title:"Stats.GroupMembers"},{name:"messages",title:"Stats.GroupMessages"}],[{name:"viewers",title:"Stats.GroupViewers"},{name:"posters",title:"Stats.GroupPosters"}]],rl=(0,a.X$)((e=>{let{isGroup:t,statistics:n}=e;const s=(0,g.Z)(),{period:r}=n;return a.ZP.createElement("div",{className:"StatisticsOverview"},a.ZP.createElement("div",{className:"StatisticsOverview__header"},a.ZP.createElement("div",{className:"StatisticsOverview__title"},s("ChannelStats.Overview")),r&&a.ZP.createElement("div",{className:"StatisticsOverview__caption"},(0,te.Tu)(s,1e3*r.minDate)," — ",(0,te.Tu)(s,1e3*r.maxDate))),a.ZP.createElement("table",{className:"StatisticsOverview__table"},(t?sl:al).map((e=>a.ZP.createElement("tr",null,e.map((e=>{const t=n[e.name];return e.isPercentage?a.ZP.createElement("td",null,a.ZP.createElement("b",{className:"StatisticsOverview__table-value"},t.percentage,"%"),a.ZP.createElement("h3",{className:"StatisticsOverview__table-heading"},s(e.title))):a.ZP.createElement("td",null,a.ZP.createElement("b",{className:"StatisticsOverview__table-value"},(0,ft.bi)(t.current))," ",(e=>{let{change:t,percentage:n}=e;if(!t)return;const s=Number(t)<0;return a.ZP.createElement("span",{className:(0,Y.Z)("StatisticsOverview__value",s&&"negative")},s?`-${(0,ft.bi)(Math.abs(t))}`:`+${(0,ft.bi)(t)}`,n&&a.ZP.createElement(a.ZP.Fragment,null," ","(",n,"%)"))})(t),a.ZP.createElement("h3",{className:"StatisticsOverview__table-heading"},s(e.title)))})))))))})),ll=(0,a.X$)((e=>{let{message:t}=e;const n=(0,g.Z)(),s=(0,f.DH)(t),r=(0,p.Z)((0,f.Ti)(t,"micro")),l=Boolean((0,f.Y5)(t));return a.ZP.createElement("p",{className:"StatisticsRecentMessage"},a.ZP.createElement("div",{className:"StatisticsRecentMessage__title"},a.ZP.createElement("div",{className:"StatisticsRecentMessage__summary"},function(e,t,n,s){return n?a.ZP.createElement("span",{className:"media-preview"},a.ZP.createElement("img",{src:n,alt:"",className:(0,Y.Z)("media-preview__image",s&&"round")}),(0,f.b7)(t)&&a.ZP.createElement("i",{className:"icon-play"}),(0,w.e)(e,t,!0)):(0,w.e)(e,t)}(n,t,r||s,l)),a.ZP.createElement("div",{className:"StatisticsRecentMessage__meta"},n("ChannelStats.ViewsCount",t.views))),a.ZP.createElement("div",{className:"StatisticsRecentMessage__info"},a.ZP.createElement("div",{className:"StatisticsRecentMessage__date"},(0,te.SA)(1e3*t.date,n.code)),a.ZP.createElement("div",{className:"StatisticsRecentMessage__meta"},t.forwards?n("ChannelStats.SharesCount",t.forwards):"No shares")))}));let ol,il;const cl={growthGraph:"ChannelStats.Graph.Growth",followersGraph:"ChannelStats.Graph.Followers",muteGraph:"ChannelStats.Graph.Notifications",topHoursGraph:"ChannelStats.Graph.ViewsByHours",viewsBySourceGraph:"ChannelStats.Graph.ViewsBySource",newFollowersBySourceGraph:"ChannelStats.Graph.NewFollowersBySource",languagesGraph:"ChannelStats.Graph.Language",interactionsGraph:"ChannelStats.Graph.Interactions"},dl=Object.keys(cl),ml={growthGraph:"Stats.GroupGrowthTitle",membersGraph:"Stats.GroupMembersTitle",languagesGraph:"Stats.GroupLanguagesTitle",messagesGraph:"Stats.GroupMessagesTitle",actionsGraph:"Stats.GroupActionsTitle",topHoursGraph:"Stats.GroupTopHoursTitle"},ul=Object.keys(ml),hl=(0,a.X$)((0,s.c$)(((e,t)=>{var n;let{chatId:a}=t;const s=(0,b.aT)(e,a),r=(0,b.Z1)(e,a);return{statistics:s,dcId:null==r||null===(n=r.fullInfo)||void 0===n?void 0:n.statisticsDcId,isGroup:"chatTypeSuperGroup"===(null==r?void 0:r.type)}}))((e=>{var t;let{chatId:r,isActive:l,statistics:o,dcId:i,isGroup:c}=e;const d=(0,g.Z)(),m=(0,a.sO)(null),[u,h]=(0,a.eJ)(!1),Z=(0,a.sO)([]),{loadStatistics:v,loadStatisticsAsyncGraph:P}=(0,s.Sv)();(0,a.d4)((()=>{v({chatId:r,isGroup:c})}),[r,v,c]),(0,a.d4)((()=>{l||(Z.current=[])}),[l]);const p=(0,a.Ye)((()=>c?ul:dl),[c]),E=(0,a.Ye)((()=>c?ml:cl),[c]);return(0,a.d4)((()=>{o&&p.forEach((e=>{const t=o[e];"string"==typeof t&&P({name:e,chatId:r,token:t,isPercentage:"languagesGraph"===e})}))}),[p,r,o,P]),(0,a.d4)((()=>{(async()=>{await async function(){return ol||(ol=n.e(878).then(n.bind(n,8878)),il=await ol),ol}(),u?o&&p.forEach(((e,t)=>{const n=o[e];if("string"==typeof n||Z.current.includes(e))return;const{zoomToken:a}=n;il.create(m.current.children[t],{title:d(E[e]),...a&&{onZoom:e=>(0,nl.t9)("fetchStatisticsAsyncGraph",{token:a,x:e,dcId:i}),zoomOutLabel:d("Graph.ZoomOut")},...n}),Z.current.push(e)})):h(!0)})()}),[p,E,u,o,d,r,P,i]),u&&o?a.ZP.createElement("div",{className:(0,Y.Z)("Statistics custom-scroll",u&&"ready")},a.ZP.createElement(rl,{statistics:o,isGroup:c}),!Z.current.length&&a.ZP.createElement(De.Z,null),a.ZP.createElement("div",{ref:m},p.map((e=>a.ZP.createElement("div",{className:(0,Y.Z)("Statistics__graph",!Z.current.includes(e)&&"hidden")})))),Boolean(null===(t=o.recentTopMessages)||void 0===t?void 0:t.length)&&a.ZP.createElement("div",{className:"Statistics__messages"},a.ZP.createElement("h2",{className:"Statistics__messages-title"},d("ChannelStats.Recent.Header")),o.recentTopMessages.map((e=>a.ZP.createElement(ll,{message:e}))))):a.ZP.createElement(De.Z,null)}))),Zl=(0,a.X$)((0,s.c$)(((e,t)=>{let{answer:n}=t;const{voters:a,offsets:s}=e.pollResults;return{voters:null==a?void 0:a[n.option],offset:(null==s?void 0:s[n.option])||""}}))((e=>{let{chat:t,message:n,answer:r,answerVote:l,totalVoters:o,voters:i,offset:c}=e;const{loadPollOptionResults:d,openChat:m,closePollResults:u}=(0,s.Sv)(),h=(0,C.Z)(l.votersCount),[Z,v]=(0,a.eJ)(!0),P=Boolean(i),{option:p,text:E}=r,f=(0,g.Z)();(0,a.d4)((()=>{P&&h===l.votersCount||d({chat:t,messageId:n.id,option:p,offset:c,limit:4,shouldResetVoters:!0})}),[l.votersCount,P]);const b=(0,a.I4)((()=>{v(!0),d({chat:t,messageId:n.id,option:p,offset:c,limit:50})}),[t,d,n.id,c,p]);(0,a.d4)((()=>{v(!1)}),[i]);const I=(0,a.I4)((e=>{m({id:e}),u()}),[u,m]);return a.ZP.createElement("div",{className:"PollAnswerResults"},a.ZP.createElement("div",{className:"poll-voters"},i?i.map((e=>a.ZP.createElement(_e.Z,{key:e,className:"chat-item-clickable",onClick:()=>I(e)},a.ZP.createElement(Xe.Z,{avatarSize:"tiny",userId:e,forceShowSelf:!0,noStatusOrTyping:!0})))):a.ZP.createElement(De.Z,null),i&&function(){const e=l.votersCount-i.length;return l.votersCount>4&&e>0&&a.ZP.createElement(Un,{count:e,itemName:"voter",isLoading:Z,onClick:b})}()),a.ZP.createElement("div",{className:"answer-head",dir:f.isRtl?"rtl":void 0},a.ZP.createElement("span",{className:"answer-title",dir:"auto"},E),a.ZP.createElement("span",{className:"answer-percent",dir:f.isRtl?"auto":void 0},(y=l.votersCount,(S=o)>0?(y/S*100).toFixed():0),"%")));var y,S}))),vl=(0,a.X$)((0,s.c$)((e=>{const{pollResults:{chatId:t,messageId:n},lastSyncTime:a}=e;return t&&n?{chat:(0,b.Z1)(e,t),message:(0,b.hj)(e,t,n),lastSyncTime:a}:{}}))((e=>{let{onClose:t,isActive:n,chat:s,message:r,lastSyncTime:l}=e;const o=(0,g.Z)();if((0,P.ZP)(n,t),!r||!s)return a.ZP.createElement(De.Z,null);const{summary:i,results:c}=(0,f.t9)(r);if(!c.results)return;const d=(0,be.ee)(c.results,"option");return a.ZP.createElement("div",{className:"PollResults",dir:o.isRtl?"rtl":void 0},a.ZP.createElement("h3",{className:"poll-question",dir:"auto"},(0,ke.Z)(i.question,["emoji","br"])),a.ZP.createElement("div",{className:"poll-results-list custom-scroll"},l&&i.answers.map((e=>a.ZP.createElement(Zl,{key:`${r.id}-${e.option}`,chat:s,message:r,answer:e,answerVote:d[e.option],totalVoters:c.totalVoters}))),!l&&a.ZP.createElement(De.Z,null)))}))),Pl="Please provide first name",gl=(0,a.X$)((0,s.c$)(((e,t)=>{let{userId:n}=t;const a=(0,b.dy)(e,n),s=(0,b.Z1)(e,n),{progress:r}=e.management;return{user:a,progress:r,isMuted:(0,f.i4)(s,(0,b.dZ)(e),(0,b.NJ)(e))}}))((e=>{let{userId:t,user:n,progress:r,isMuted:o,onClose:i,isActive:c}=e;const{updateContact:d,deleteContact:m,closeManagement:u}=(0,s.Sv)(),[h,Z,v]=(0,ee.Z)(),[p,E]=(0,a.eJ)(!1),[C,f]=(0,a.eJ)(),b=(0,g.Z)();(0,P.ZP)(c,i);const I=n&&n.firstName||"",y=n&&n.lastName||"",[S,N]=(0,a.eJ)(I),[k,w]=(0,a.eJ)(y),[M,T]=(0,a.eJ)(!o);(0,a.d4)((()=>{T(!o)}),[o]),(0,a.d4)((()=>{E(!1),v()}),[v,t]),(0,a.d4)((()=>{N(I),w(y)}),[I,y,n]),(0,a.d4)((()=>{r===l.wv.Complete&&(E(!1),f(void 0),v())}),[v,r]);const R=(0,a.I4)((e=>{N(e.target.value),E(!0)}),[]),A=(0,a.I4)((e=>{w(e.target.value),E(!0)}),[]),L=(0,a.I4)((e=>{T(e.target.checked),E(!0)}),[]),F=(0,a.I4)((()=>{const e=S.trim(),n=k.trim();e.length||f(Pl),d({userId:t,isMuted:!M,firstName:e,lastName:n})}),[S,k,d,t,M]),B=(0,a.I4)((()=>{m({userId:t}),v(),u()}),[v,u,m,t]);if(!n)return;const x=r===l.wv.InProgress;return a.ZP.createElement("div",{className:"Management"},a.ZP.createElement("div",{className:"custom-scroll"},a.ZP.createElement("div",{className:"section"},a.ZP.createElement(Xe.Z,{userId:n.id,avatarSize:"jumbo",status:"original name",withFullInfo:!0}),a.ZP.createElement(Ue.Z,{id:"user-first-name",label:b("UserInfo.FirstNamePlaceholder"),onChange:R,value:S,error:C===Pl?C:void 0}),a.ZP.createElement(Ue.Z,{id:"user-last-name",label:b("UserInfo.LastNamePlaceholder"),onChange:A,value:k}),a.ZP.createElement("div",{className:"ListItem no-selection narrow"},a.ZP.createElement(ct.Z,{checked:M,label:b("Notifications"),subLabel:b(M?"UserInfo.NotificationsEnabled":"UserInfo.NotificationsDisabled"),onChange:L}))),a.ZP.createElement("div",{className:"section"},a.ZP.createElement(_e.Z,{icon:"delete",ripple:!0,destructive:!0,onClick:Z},b("DeleteContact")))),a.ZP.createElement(Sn.Z,{isShown:p,onClick:F,disabled:x,ariaLabel:b("Save")},x?a.ZP.createElement(V.Z,{color:"white"}):a.ZP.createElement("i",{className:"icon-check"})),a.ZP.createElement(Qe.Z,{isOpen:h,onClose:v,text:b("AreYouSureDeleteContact"),confirmLabel:b("DeleteContact"),confirmHandler:B,confirmIsDestructive:!0}))}))),pl="Group title can't be empty",El=(0,a.X$)((0,s.c$)(((e,t)=>{var n,a;let{chatId:s}=t;const r=(0,b.Z1)(e,s),{progress:l}=e.management,o=Boolean(null===(n=r.fullInfo)||void 0===n?void 0:n.linkedChatId),i=(0,f.G9)(r),{invites:c}=e.management.byChatId[s]||{};return{chat:r,progress:l,isBasicGroup:i,hasLinkedChannel:o,canChangeInfo:i?r.isCreator:(0,f.VE)(r,"changeInfo"),canBanUsers:i?r.isCreator:(0,f.VE)(r,"banUsers"),canInvite:i?r.isCreator:(0,f.VE)(r,"inviteUsers"),exportedInvites:c,lastSyncTime:e.lastSyncTime,availableReactionsCount:null===(a=e.availableReactions)||void 0===a?void 0:a.filter((e=>!e.isInactive)).length}}))((e=>{var t,n,o,i,c,d;let{chatId:m,chat:u,progress:h,isBasicGroup:Z,hasLinkedChannel:v,canChangeInfo:E,canBanUsers:C,canInvite:b,onScreenSelect:I,onClose:y,isActive:S,exportedInvites:N,lastSyncTime:k,availableReactionsCount:w}=e;const{togglePreHistoryHidden:M,updateChat:T,deleteChat:R,leaveChannel:A,deleteChannel:L,closeManagement:F,openChat:B,loadExportedChatInvites:x,loadChatJoinRequests:$}=(0,s.Sv)(),[D,O,U]=(0,ee.Z)(),G=u.title,_=u.fullInfo&&u.fullInfo.about||"",[J,X]=(0,a.eJ)(!1),[z,Y]=(0,a.eJ)(G||""),[H,j]=(0,a.eJ)(_),[q,K]=(0,a.eJ)(),[W,Q]=(0,a.eJ)(),te=(0,f.RT)(u),ne=(0,p.Z)(te,!1,r.IU.BlobUrl),ae=u.username||v,se=(0,g.Z)();(0,P.ZP)(S,y),(0,a.d4)((()=>{k&&b&&(x({chatId:m}),x({chatId:m,isRevoked:!0}),$({chatId:m}))}),[m,x,k,b,$]),(0,a.d4)((()=>{h===l.wv.Complete&&(X(!1),Q(void 0))}),[h]);const re=(0,a.I4)((()=>{I(l.u1.ChatPrivacyType)}),[I]),le=(0,a.I4)((()=>{I(l.u1.Discussion)}),[I]),oe=(0,a.I4)((()=>{I(l.u1.Reactions)}),[I]),ie=(0,a.I4)((()=>{I(l.u1.GroupPermissions)}),[I]),ce=(0,a.I4)((()=>{I(l.u1.ChatAdministrators)}),[I]),de=(0,a.I4)((()=>{I(l.u1.Invites)}),[I]),me=(0,a.I4)((()=>{I(l.u1.JoinRequests)}),[I]),ue=(0,a.I4)((e=>{K(e),X(!0)}),[]),he=(0,a.I4)((e=>{Y(e.target.value),X(!0)}),[]),Ze=(0,a.I4)((e=>{j(e.target.value),X(!0)}),[]),ve=(0,a.I4)((()=>{const e=z.trim(),t=H.trim();e.length?T({chatId:m,title:e,about:t,photo:q}):Q(pl)}),[H,m,q,z,T]),Pe=(0,a.I4)((()=>{I(l.u1.GroupMembers)}),[I]),ge=(0,a.I4)((()=>{if(!u.fullInfo)return;const{isPreHistoryHidden:e}=u.fullInfo;M({chatId:u.id,isEnabled:!e})}),[u,M]),pe=(null===(t=u.fullInfo)||void 0===t||null===(n=t.enabledReactions)||void 0===n?void 0:n.length)||0,Ee=(0,a.Ye)((()=>{if(!u.defaultBannedRights)return 0;let e=["sendMessages","sendMedia","embedLinks","sendPolls","changeInfo","inviteUsers","pinMessages"].filter((e=>!u.defaultBannedRights[e])).length;const{sendStickers:t,sendGifs:n}=u.defaultBannedRights;return t||n||(e+=1),e}),[u]),Ce=(null===(o=u.fullInfo)||void 0===o||null===(i=o.adminMembers)||void 0===i?void 0:i.length)||0,fe=(0,a.I4)((()=>{Z?R({chatId:u.id}):u.isCreator?L({chatId:u.id}):A({chatId:u.id}),U(),F(),B({id:void 0})}),[Z,u.isCreator,u.id,U,F,A,L,R,B]);if(u.isRestricted||u.isForbidden)return;const be=h===l.wv.InProgress;return a.ZP.createElement("div",{className:"Management"},a.ZP.createElement("div",{className:"custom-scroll"},a.ZP.createElement("div",{className:"section"},a.ZP.createElement(yn.Z,{currentAvatarBlobUrl:ne,onChange:ue,disabled:!E}),a.ZP.createElement(Ue.Z,{id:"group-title",label:se("GroupName"),onChange:he,value:z,error:W===pl?W:void 0,disabled:!E}),a.ZP.createElement(Ue.Z,{id:"group-about",className:"mb-2",label:se("DescriptionPlaceholder"),onChange:Ze,value:H,disabled:!E}),u.isCreator&&a.ZP.createElement(_e.Z,{icon:"lock",multiline:!0,onClick:re},a.ZP.createElement("span",{className:"title"},se("GroupType")),a.ZP.createElement("span",{className:"subtitle"},u.username?se("TypePublic"):se("TypePrivate"))),v&&a.ZP.createElement(_e.Z,{icon:"message",multiline:!0,onClick:le},a.ZP.createElement("span",{className:"title"},se("LinkedChannel")),a.ZP.createElement("span",{className:"subtitle"},se("DiscussionUnlink"))),a.ZP.createElement(_e.Z,{icon:"permissions",multiline:!0,onClick:ie,disabled:!C},a.ZP.createElement("span",{className:"title"},se("ChannelPermissions")),a.ZP.createElement("span",{className:"subtitle",dir:"auto"},Ee,"/",8)),a.ZP.createElement(_e.Z,{icon:"reactions",multiline:!0,onClick:oe,disabled:!E},a.ZP.createElement("span",{className:"title"},se("Reactions")),a.ZP.createElement("span",{className:"subtitle",dir:"auto"},pe,"/",w)),a.ZP.createElement(_e.Z,{icon:"admin",multiline:!0,onClick:ce},a.ZP.createElement("span",{className:"title"},se("ChannelAdministrators")),a.ZP.createElement("span",{className:"subtitle"},(0,ft.kh)(Ce))),b&&a.ZP.createElement(_e.Z,{icon:"link",onClick:de,multiline:!0,disabled:!N},a.ZP.createElement("span",{className:"title"},se("GroupInfo.InviteLinks")),a.ZP.createElement("span",{className:"subtitle"},N?(0,ft.kh)(N.length):se("Loading"))),Boolean(null===(c=u.joinRequests)||void 0===c?void 0:c.length)&&a.ZP.createElement(_e.Z,{icon:"add-user-filled",onClick:me,multiline:!0},a.ZP.createElement("span",{className:"title"},se("MemberRequests")),a.ZP.createElement("span",{className:"subtitle"},(0,ft.kh)(u.joinRequests.length)))),a.ZP.createElement("div",{className:"section"},a.ZP.createElement(_e.Z,{icon:"group",multiline:!0,onClick:Pe},a.ZP.createElement("span",{className:"title"},se("GroupMembers")),a.ZP.createElement("span",{className:"subtitle"},(0,ft.kh)(null!==(d=u.membersCount)&&void 0!==d?d:0))),!ae&&u.fullInfo&&a.ZP.createElement("div",{className:"ListItem narrow no-selection"},a.ZP.createElement(ct.Z,{checked:!u.fullInfo.isPreHistoryHidden,label:se("ChatHistory"),onChange:ge,disabled:!C}))),a.ZP.createElement("div",{className:"section"},a.ZP.createElement(_e.Z,{icon:"delete",ripple:!0,destructive:!0,onClick:O},se("DeleteMega")))),a.ZP.createElement(Sn.Z,{isShown:J,onClick:ve,disabled:be,ariaLabel:se("Save")},be?a.ZP.createElement(V.Z,{color:"white"}):a.ZP.createElement("i",{className:"icon-check"})),a.ZP.createElement(Qe.Z,{isOpen:D,onClose:U,textParts:(0,ke.Z)(Z||!u.isCreator?se("AreYouSureDeleteAndExit"):se("AreYouSureDeleteThisChatWithGroup",u.title),["br","simple_markdown"]),confirmLabel:Z||!u.isCreator?se("DeleteMega"):se("DeleteGroupForAll"),confirmHandler:fe,confirmIsDestructive:!0}))}))),Cl=(0,a.X$)((0,s.c$)(((e,t)=>{let{chatId:n}=t;return{chat:(0,b.Z1)(e,n),currentUserId:e.currentUserId}}))((e=>{let{onScreenSelect:t,onChatMemberSelect:n,chat:r,currentUserId:o,onClose:i,isActive:c}=e;const{updateChatDefaultBannedRights:d}=(0,s.Sv)(),[m,u]=(0,a.eJ)({}),[h,Z]=(0,a.eJ)(!1),[v,p]=(0,a.eJ)(!1),E=(0,g.Z)();(0,P.ZP)(c,i);const C=(0,a.I4)((()=>{t(l.u1.GroupRemovedUsers)}),[t]),f=(0,a.I4)((()=>{t(l.u1.GroupUserPermissionsCreate)}),[t]),b=(0,a.I4)((e=>{n(e.userId,e.promotedByUserId===o),t(l.u1.GroupUserPermissions)}),[o,n,t]);(0,a.d4)((()=>{u((null==r?void 0:r.defaultBannedRights)||{}),Z(!1),setTimeout((()=>{p(!1)}),250)}),[r]);const I=(0,a.I4)((e=>{const{name:t}=e.target;function n(e){return!e||void 0}u((e=>({...e,[t]:n(e[t]),..."sendStickers"===t&&{sendGifs:n(e[t])}}))),Z(!0)}),[]),y=(0,a.I4)((()=>{r&&(p(!0),d({chatId:r.id,bannedRights:m}))}),[r,m,d]),S=(0,a.Ye)((()=>r&&r.fullInfo&&r.fullInfo.kickedMembers?r.fullInfo.kickedMembers.length:0),[r]),N=(0,a.Ye)((()=>r&&r.fullInfo&&r.fullInfo.members?r.fullInfo.members.filter((e=>{let{bannedRights:t}=e;return Boolean(t)})):[]),[r]),k=(0,a.I4)((e=>{const{bannedRights:t}=e;if(!t||!r)return;const{defaultBannedRights:n}=r;return Object.keys(t).reduce(((e,a)=>{if(!t[a]||null!=n&&n[a]||"sendInline"===a||"viewMessages"===a||"sendGames"===a)return e;const s=function(e){switch(e){case"sendMessages":return"UserRestrictionsNoSend";case"sendMedia":return"UserRestrictionsNoSendMedia";case"sendStickers":return"UserRestrictionsNoSendStickers";case"embedLinks":return"UserRestrictionsNoEmbedLinks";case"sendPolls":return"UserRestrictionsNoSendPolls";case"changeInfo":return"UserRestrictionsNoChangeInfo";case"inviteUsers":return"UserRestrictionsInviteUsers";case"pinMessages":return"UserRestrictionsPinMessages";default:return}}(a);if(!s)return e;const r=E(s);return`${e}${e.length?`, ${r}`:r}`}),"")}),[r,E]);return a.ZP.createElement("div",{className:"Management"},a.ZP.createElement("div",{className:"custom-scroll"},a.ZP.createElement("div",{className:"section"},a.ZP.createElement("h3",{className:"section-heading",dir:"auto"},E("ChannelPermissionsHeader")),a.ZP.createElement("div",{className:"ListItem no-selection"},a.ZP.createElement(ct.Z,{name:"sendMessages",checked:!m.sendMessages,label:E("UserRestrictionsSend"),blocking:!0,onChange:I})),a.ZP.createElement("div",{className:"ListItem no-selection"},a.ZP.createElement(ct.Z,{name:"sendMedia",checked:!m.sendMedia,label:E("UserRestrictionsSendMedia"),blocking:!0,onChange:I})),a.ZP.createElement("div",{className:"ListItem no-selection"},a.ZP.createElement(ct.Z,{name:"sendStickers",checked:!m.sendStickers&&!m.sendGifs,label:E("UserRestrictionsSendStickers"),blocking:!0,onChange:I})),a.ZP.createElement("div",{className:"ListItem no-selection"},a.ZP.createElement(ct.Z,{name:"sendPolls",checked:!m.sendPolls,label:E("UserRestrictionsSendPolls"),blocking:!0,onChange:I})),a.ZP.createElement("div",{className:"ListItem no-selection"},a.ZP.createElement(ct.Z,{name:"embedLinks",checked:!m.embedLinks,label:E("UserRestrictionsEmbedLinks"),blocking:!0,onChange:I})),a.ZP.createElement("div",{className:"ListItem no-selection"},a.ZP.createElement(ct.Z,{name:"inviteUsers",checked:!m.inviteUsers,label:E("UserRestrictionsInviteUsers"),blocking:!0,onChange:I})),a.ZP.createElement("div",{className:"ListItem no-selection"},a.ZP.createElement(ct.Z,{name:"pinMessages",checked:!m.pinMessages,label:E("UserRestrictionsPinMessages"),blocking:!0,onChange:I})),a.ZP.createElement("div",{className:"ListItem no-selection"},a.ZP.createElement(ct.Z,{name:"changeInfo",checked:!m.changeInfo,label:E("UserRestrictionsChangeInfo"),blocking:!0,onChange:I}))),a.ZP.createElement("div",{className:"section"},a.ZP.createElement(_e.Z,{icon:"delete-user",multiline:!0,narrow:!0,onClick:C},a.ZP.createElement("span",{className:"title"},E("ChannelBlockedUsers")),a.ZP.createElement("span",{className:"subtitle"},S))),a.ZP.createElement("div",{className:"section"},a.ZP.createElement("h3",{className:"section-heading",dir:"auto"},E("PrivacyExceptions")),a.ZP.createElement(_e.Z,{icon:"add-user",onClick:f},E("ChannelAddException")),N.map((e=>a.ZP.createElement(_e.Z,{key:e.userId,className:"chat-item-clickable exceptions-member",onClick:()=>b(e)},a.ZP.createElement(Xe.Z,{userId:e.userId,status:k(e)})))))),a.ZP.createElement(Sn.Z,{isShown:h,onClick:y,ariaLabel:E("Save"),disabled:v},v?a.ZP.createElement(V.Z,{color:"white"}):a.ZP.createElement("i",{className:"icon-check"})))}))),fl=(0,a.X$)((0,s.c$)((e=>{const{currentUserId:t}=e;return{currentUserId:t}}))((e=>{var t;let{chat:n,currentUserId:r,isOpen:l,onClose:o}=e;const{loadMoreMembers:i,deleteChatMember:c}=(0,s.Sv)(),d=(0,g.Z)(),[m,u]=(0,a.eJ)(""),h=(0,a.sO)(null),Z=(0,a.Ye)((()=>{var e;const t=((null===(e=n.fullInfo)||void 0===e?void 0:e.members)||[]).reduce(((e,t)=>(t.isAdmin||t.isOwner||t.userId===r||e.push(t.userId),e)),[]),a=(0,s.Rd)().users.byId;return(0,f.kK)(t,a,m)}),[null===(t=n.fullInfo)||void 0===t?void 0:t.members,r,m]),v=(0,a.I4)((e=>{c({chatId:n.id,userId:e}),o()}),[n.id,c,o]);return a.ZP.createElement(ze,{isOpen:l,chatOrUserIds:Z,filterRef:h,filterPlaceholder:d("ChannelBlockUser"),filter:m,onFilterChange:u,loadMore:i,onSelectChatOrUser:v,onClose:o})}))),bl=(0,a.X$)((0,s.c$)(((e,t)=>{let{chatId:n}=t;const a=(0,b.Z1)(e,n),{byId:s}=e.users;return{chat:a,usersById:s,canDeleteMembers:a&&((0,f.VE)(a,"banUsers")||a.isCreator),isChannel:a&&(0,f.eA)(a)}}))((e=>{let{chat:t,usersById:n,canDeleteMembers:r,isChannel:l,onClose:o,isActive:i}=e;const{updateChatMemberBannedRights:c}=(0,s.Sv)(),d=(0,g.Z)(),[m,u,h]=(0,ee.Z)();(0,P.ZP)(i,o);const Z=(0,a.Ye)((()=>t&&t.fullInfo&&t.fullInfo.kickedMembers?t.fullInfo.kickedMembers:[]),[t]),v=(0,a.I4)((e=>{if(!e.kickedByUserId)return;const t=n[e.kickedByUserId];return t?d("UserRemovedBy",(0,f.Js)(t)):void 0}),[d,n]),p=(0,a.I4)((e=>{if(t)return[{title:d("Unblock"),icon:"delete",destructive:!0,handler:()=>c({chatId:t.id,userId:e.userId,bannedRights:{}})}]}),[d,t,c]);return a.ZP.createElement("div",{className:"Management"},a.ZP.createElement("div",{className:"custom-scroll"},a.ZP.createElement("div",{className:"section",dir:d.isRtl?"rtl":void 0},a.ZP.createElement("p",{className:"text-muted"},d(l?"NoBlockedChannel2":"NoBlockedGroup2")),Z.map((e=>a.ZP.createElement(_e.Z,{key:e.userId,className:"chat-item-clickable",ripple:!0,contextActions:p(e)},a.ZP.createElement(Xe.Z,{userId:e.userId,status:v(e)})))),r&&a.ZP.createElement(Sn.Z,{isShown:!0,onClick:u,ariaLabel:d("Channel.EditAdmin.Permission.BanUsers")},a.ZP.createElement("i",{className:"icon-add-user-filled"})),t&&r&&a.ZP.createElement(fl,{chat:t,isOpen:m,onClose:h}))))}))),Il="Channel title can't be empty",yl=(0,a.X$)((0,s.c$)(((e,t)=>{var n;let{chatId:a}=t;const s=(0,b.Z1)(e,a),{progress:r}=e.management,l=Boolean(null==s?void 0:s.isSignaturesShown),{invites:o}=e.management.byChatId[a]||{};return{chat:s,progress:r,isSignaturesShown:l,canChangeInfo:(0,f.VE)(s,"changeInfo"),canInvite:(0,f.VE)(s,"inviteUsers"),lastSyncTime:e.lastSyncTime,exportedInvites:o,availableReactionsCount:null===(n=e.availableReactions)||void 0===n?void 0:n.filter((e=>!e.isInactive)).length}}))((e=>{var t,n,o,i,c,d,m,u,h;let{chatId:Z,chat:v,progress:E,isSignaturesShown:C,canChangeInfo:b,canInvite:I,exportedInvites:y,lastSyncTime:S,availableReactionsCount:N,onScreenSelect:k,onClose:w,isActive:M}=e;const{updateChat:T,toggleSignatures:R,closeManagement:A,leaveChannel:L,deleteChannel:F,openChat:B,loadExportedChatInvites:x,loadChatJoinRequests:$}=(0,s.Sv)(),D=v&&v.title||"",O=null!=v&&v.fullInfo&&v.fullInfo.about||"",U=null==v||null===(t=v.fullInfo)||void 0===t?void 0:t.linkedChatId,[G,_,J]=(0,ee.Z)(),[X,z]=(0,a.eJ)(!1),[Y,H]=(0,a.eJ)(D),[j,q]=(0,a.eJ)(O),[K,W]=(0,a.eJ)(),[Q,te]=(0,a.eJ)(),ne=v&&(0,f.RT)(v),ae=(0,p.Z)(ne,!1,r.IU.BlobUrl),se=(0,g.Z)();(0,P.ZP)(M,w),(0,a.d4)((()=>{S&&(x({chatId:Z}),x({chatId:Z,isRevoked:!0}),$({chatId:Z}))}),[Z,x,S,$]),(0,a.d4)((()=>{E===l.wv.Complete&&(z(!1),te(void 0))}),[E]);const re=(null==v||null===(n=v.fullInfo)||void 0===n||null===(o=n.adminMembers)||void 0===o?void 0:o.length)||0,le=(null==v||null===(i=v.fullInfo)||void 0===i||null===(c=i.kickedMembers)||void 0===c?void 0:c.length)||0,oe=(0,a.I4)((()=>{k(l.u1.ChatPrivacyType)}),[k]),ie=(0,a.I4)((()=>{k(l.u1.Discussion)}),[k]),ce=(0,a.I4)((()=>{k(l.u1.Reactions)}),[k]),de=(0,a.I4)((()=>{k(l.u1.ChatAdministrators)}),[k]),me=(0,a.I4)((()=>{k(l.u1.Invites)}),[k]),ue=(0,a.I4)((()=>{k(l.u1.JoinRequests)}),[k]),he=(0,a.I4)((e=>{W(e),z(!0)}),[]),Ze=(0,a.I4)((e=>{H(e.target.value),z(!0)}),[]),ve=(0,a.I4)((e=>{q(e.target.value),z(!0)}),[]),Pe=(0,a.I4)((()=>{const e=Y.trim(),t=j.trim();e.length?T({chatId:Z,title:e,about:t,photo:K}):te(Il)}),[j,Z,K,Y,T]),ge=(0,a.I4)((()=>{R({chatId:Z,isEnabled:!C})}),[Z,C,R]),pe=(0,a.I4)((()=>{k(l.u1.ChannelSubscribers)}),[k]),Ee=(0,a.I4)((()=>{k(l.u1.ChannelRemovedUsers)}),[k]),Ce=(0,a.I4)((()=>{v.isCreator?F({chatId:v.id}):L({chatId:v.id}),J(),A(),B({id:void 0})}),[v.isCreator,v.id,J,A,L,F,B]),fe=(null===(d=v.fullInfo)||void 0===d||null===(m=d.enabledReactions)||void 0===m?void 0:m.length)||0;if(v.isRestricted||v.isForbidden)return;const be=E===l.wv.InProgress;return a.ZP.createElement("div",{className:"Management"},a.ZP.createElement("div",{className:"custom-scroll"},a.ZP.createElement("div",{className:"section"},a.ZP.createElement(yn.Z,{currentAvatarBlobUrl:ae,onChange:he,disabled:!b}),a.ZP.createElement(Ue.Z,{id:"channel-title",label:se("EnterChannelName"),onChange:Ze,value:Y,error:Q===Il?Q:void 0,disabled:!b}),a.ZP.createElement(Ue.Z,{id:"channel-about",className:"mb-2",label:se("DescriptionPlaceholder"),onChange:ve,value:j,disabled:!b}),v.isCreator&&a.ZP.createElement(_e.Z,{icon:"lock",multiline:!0,onClick:oe},a.ZP.createElement("span",{className:"title"},se("ChannelType")),a.ZP.createElement("span",{className:"subtitle"},v.username?se("TypePublic"):se("TypePrivate"))),a.ZP.createElement(_e.Z,{icon:"message",multiline:!0,onClick:ie,disabled:!b},a.ZP.createElement("span",{className:"title"},se("Discussion")),a.ZP.createElement("span",{className:"subtitle"},se(U?"DiscussionUnlink":"Add"))),I&&a.ZP.createElement(_e.Z,{icon:"link",onClick:me,multiline:!0,disabled:!y},a.ZP.createElement("span",{className:"title"},se("GroupInfo.InviteLinks")),a.ZP.createElement("span",{className:"subtitle"},y?(0,ft.kh)(y.length):se("Loading"))),Boolean(null===(u=v.joinRequests)||void 0===u?void 0:u.length)&&a.ZP.createElement(_e.Z,{icon:"add-user-filled",onClick:ue,multiline:!0},a.ZP.createElement("span",{className:"title"},se("SubscribeRequests")),a.ZP.createElement("span",{className:"subtitle"},(0,ft.kh)(v.joinRequests.length))),a.ZP.createElement(_e.Z,{icon:"reactions",multiline:!0,onClick:ce,disabled:!b},a.ZP.createElement("span",{className:"title"},se("Reactions")),a.ZP.createElement("span",{className:"subtitle",dir:"auto"},fe,"/",N)),a.ZP.createElement("div",{className:"ListItem no-selection narrow"},a.ZP.createElement(ct.Z,{checked:C,label:se("ChannelSignMessages"),onChange:ge}))),a.ZP.createElement("div",{className:"section"},a.ZP.createElement(_e.Z,{icon:"admin",multiline:!0,onClick:de},a.ZP.createElement("span",{className:"title"},se("ChannelAdministrators")),a.ZP.createElement("span",{className:"subtitle"},re)),a.ZP.createElement(_e.Z,{icon:"group",multiline:!0,onClick:pe},a.ZP.createElement("span",{className:"title",dir:"auto"},se("ChannelSubscribers")),a.ZP.createElement("span",{className:"subtitle",dir:"auto"},se("Subscribers",null!==(h=v.membersCount)&&void 0!==h?h:0,"i"))),a.ZP.createElement(_e.Z,{icon:"delete-user",multiline:!0,narrow:!0,onClick:Ee},a.ZP.createElement("span",{className:"title"},se("ChannelBlockedUsers")),a.ZP.createElement("span",{className:"subtitle"},le))),a.ZP.createElement("div",{className:"section"},a.ZP.createElement(_e.Z,{icon:"delete",ripple:!0,destructive:!0,onClick:_},v.isCreator?se("ChannelDelete"):se("LeaveChannel")))),a.ZP.createElement(Sn.Z,{isShown:X,onClick:Pe,disabled:be,ariaLabel:se("Save")},be?a.ZP.createElement(V.Z,{color:"white"}):a.ZP.createElement("i",{className:"icon-check"})),a.ZP.createElement(Qe.Z,{isOpen:G,onClose:J,text:v.isCreator?se("ChannelDeleteAlert"):se("ChannelLeaveAlert"),confirmLabel:v.isCreator?se("ChannelDelete"):se("LeaveChannel"),confirmHandler:Ce,confirmIsDestructive:!0}))})));var Sl=n(88);const Nl=(0,a.X$)((0,s.c$)(((e,t)=>{let{chatId:n}=t;const a=(0,b.Z1)(e,n),{isUsernameAvailable:s}=(0,b.aW)(e,n);return{chat:a,isChannel:(0,f.eA)(a),progress:e.management.progress,isUsernameAvailable:s,isProtected:null==a?void 0:a.isProtected}}))((e=>{var t;let{chat:n,onClose:r,isActive:o,isChannel:i,progress:c,isUsernameAvailable:d,isProtected:m}=e;const{checkPublicLink:u,updatePublicLink:h,updatePrivateLink:Z,toggleIsProtected:v}=(0,s.Sv)(),p=Boolean(n.username),E=null===(t=n.fullInfo)||void 0===t?void 0:t.inviteLink,[C,f]=(0,a.eJ)(p?"public":"private"),[b,I]=(0,a.eJ)(),[y,S,N]=(0,ee.Z)(),k=Boolean("public"===C&&b&&d||"private"===C&&p);(0,P.ZP)(o,r),(0,a.d4)((()=>{C&&!E&&Z()}),[C,E,Z]);const w=(0,a.I4)((e=>{f(e)}),[]),M=(0,a.I4)((e=>{v({chatId:n.id,isProtected:"protected"===e})}),[n.id,v]),T=(0,a.I4)((()=>{h({username:"public"===C?b:""})}),[C,h,b]),R=(0,a.I4)((()=>{N(),Z()}),[N,Z]),A=(0,g.Z)(),L=i?"Channel":"Mega",F=i?"Channel":"Group",B=[{value:"private",label:A(`${L}Private`),subLabel:A(`${L}PrivateInfo`)},{value:"public",label:A(`${L}Public`),subLabel:A(`${L}PublicInfo`)}],x=[{value:"allowed",label:A("ChannelVisibility.Forwarding.Enabled")},{value:"protected",label:A("ChannelVisibility.Forwarding.Disabled")}],$=c===l.wv.InProgress;return a.ZP.createElement("div",{className:"Management"},a.ZP.createElement("div",{className:"custom-scroll"},a.ZP.createElement("div",{className:"section",dir:A.isRtl?"rtl":void 0},a.ZP.createElement("h3",{className:"section-heading"},A(`${F}Type`)),a.ZP.createElement(gt.Z,{selected:C,name:"channel-type",options:B,onChange:w})),"private"===C?a.ZP.createElement("div",{className:"section",dir:A.isRtl?"rtl":void 0},E?a.ZP.createElement(a.ZP.Fragment,null,a.ZP.createElement(Sl.Z,{url:E,className:"group-link",text:E}),a.ZP.createElement("p",{className:"section-info",dir:A.isRtl?"rtl":void 0},A(`${L}PrivateLinkHelp`)),a.ZP.createElement(_e.Z,{icon:"delete",ripple:!0,destructive:!0,onClick:S},A("RevokeLink")),a.ZP.createElement(Qe.Z,{isOpen:y,onClose:N,text:A("RevokeAlert"),confirmLabel:A("RevokeButton"),confirmHandler:R,confirmIsDestructive:!0})):a.ZP.createElement(De.Z,null)):a.ZP.createElement("div",{className:"section no-border"},a.ZP.createElement(Tn,{asLink:!0,currentUsername:n.username,isLoading:$,isUsernameAvailable:d,checkUsername:u,onChange:I}),a.ZP.createElement("p",{className:"section-info",dir:"auto"},A(`${F}.Username.CreatePublicLinkHelp`))),a.ZP.createElement("div",{className:"section",dir:A.isRtl?"rtl":void 0},a.ZP.createElement("h3",{className:"section-heading"},A(i?"ChannelVisibility.Forwarding.ChannelTitle":"ChannelVisibility.Forwarding.GroupTitle")),a.ZP.createElement(gt.Z,{selected:m?"protected":"allowed",name:"forwarding-type",options:x,onChange:M}),a.ZP.createElement("p",{className:"section-info"},A(i?"ChannelVisibility.Forwarding.ChannelInfo":"ChannelVisibility.Forwarding.GroupInfo")))),a.ZP.createElement(Sn.Z,{isShown:k,disabled:$,ariaLabel:A("Save"),onClick:T},$?a.ZP.createElement(V.Z,{color:"white"}):a.ZP.createElement("i",{className:"icon-check"})))}))),kl=(0,a.X$)((0,s.c$)(((e,t)=>{var n;let{chatId:a}=t;const s=(0,b.Z1)(e,a),{forDiscussionIds:r,byId:l}=e.chats;return{chat:s,chatsByIds:l,forDiscussionIds:r,linkedChat:null!=s&&null!==(n=s.fullInfo)&&void 0!==n&&n.linkedChatId?(0,b.Z1)(e,s.fullInfo.linkedChatId):void 0,isChannel:s&&(0,f.eA)(s)}}))((e=>{let{chat:t,onClose:n,isActive:r,chatId:i,chatsByIds:c,linkedChat:d,forDiscussionIds:m,isChannel:u,onScreenSelect:h}=e;const{loadGroupsForDiscussion:Z,linkDiscussionGroup:v,unlinkDiscussionGroup:p}=(0,s.Sv)(),[E,C]=(0,a.eJ)(),[f,b]=(0,a.eJ)(),[I,y]=(0,a.eJ)(!1),S=(0,a.I4)((()=>y(!0)),[]),[N,k,w]=(0,ee.Z)(),[M,T,R]=(0,ee.Z)(),A=(0,g.Z)(),L=null==d?void 0:d.id;(0,P.ZP)(r,n),(0,a.d4)((()=>{Z()}),[Z]),(0,a.d4)((()=>{f||(0,yt.Z)("DiscussionGroups").then(b)}),[f]);const F=(0,a.I4)((()=>{w(),p({channelId:u?i:L}),u||h(l.u1.Initial)}),[w,p,u,i,L,h]),B=(0,a.I4)((()=>{R(),v({channelId:i,chatId:E})}),[R,v,i,E]);return a.ZP.createElement("div",{className:"Management"},a.ZP.createElement("div",{className:"custom-scroll"},a.ZP.createElement("div",{className:"section"},a.ZP.createElement("div",{className:"section-icon"},f&&a.ZP.createElement(St.Z,{id:"discussionGroupsDucks",size:o.bM,animationData:f,play:I,noLoop:!0,onLoad:S})),d&&a.ZP.createElement("div",null,a.ZP.createElement(_e.Z,{className:"chat-item-clickable",inactive:!0},a.ZP.createElement(Je.Z,{chatId:d.id})),a.ZP.createElement(_e.Z,{icon:"delete",ripple:!0,destructive:!0,onClick:k},A(u?"DiscussionUnlinkGroup":"DiscussionUnlinkChannel")),a.ZP.createElement(Qe.Z,{isOpen:N,onClose:w,header:a.ZP.createElement("div",{className:"modal-header"},a.ZP.createElement(we.Z,{size:"tiny",chat:d}),a.ZP.createElement("div",{className:"modal-title"},A(u?"DiscussionUnlinkGroup":"DiscussionUnlinkChannel"))),textParts:(0,ke.Z)(A(u?"DiscussionUnlinkChannelAlert":"DiscussionUnlinkGroupAlert",d.title),["br","simple_markdown"]),confirmLabel:A(u?"DiscussionUnlinkGroup":"DiscussionUnlinkChannel"),confirmHandler:F,confirmIsDestructive:!0})),!d&&a.ZP.createElement("div",null,a.ZP.createElement("p",{className:"section-help",dir:"auto"},A("DiscussionChannelHelp")),a.ZP.createElement("div",{teactFastList:!0},a.ZP.createElement(_e.Z,{key:"create-group",icon:"group",ripple:!0,teactOrderKey:0,className:"not-implemented"},A("DiscussionCreateGroup")),m?m.map(((e,t)=>a.ZP.createElement(_e.Z,{key:e,teactOrderKey:t+1,className:"chat-item-clickable scroll-item",onClick:()=>{C(e),T()}},a.ZP.createElement(Je.Z,{chatId:e})))):a.ZP.createElement(Gt.Z,{key:"nothing-found",teactOrderKey:0,text:"No discussion groups found"})),a.ZP.createElement("p",{className:"mt-4 mb-0 section-help",dir:"auto"},A("DiscussionChannelHelp2")),a.ZP.createElement(Qe.Z,{isOpen:M,onClose:R,header:function(){const e=c[E];if(e)return a.ZP.createElement("div",{className:"modal-header"},a.ZP.createElement(we.Z,{size:"tiny",chat:e}),a.ZP.createElement("div",{className:"modal-title"},A("Channel.DiscussionGroup.LinkGroup")))}(),textParts:function(){const e=c[E];if(e)return e.hasPrivateLink?(0,ke.Z)(`Do you want to make **${e.title}** the discussion board for **${t.title}**?`,["br","simple_markdown"]):(0,ke.Z)(`Do you want to make **${e.title}** the discussion board for **${t.title}**?\n\nAnyone from the channel will be able to see messages in this group.`,["br","simple_markdown"])}(),confirmLabel:A("DiscussionLinkGroup"),confirmHandler:B,isButtonsInOneRow:!0})))))}))),wl=(0,a.X$)((0,s.c$)(((e,t)=>{let{chatId:n,isPromotedByCurrentUser:a}=t;const s=(0,b.Z1)(e,n);return{chat:s,isFormFullyDisabled:!(s.isCreator||a)}}))((e=>{let{chat:t,selectedChatMemberId:n,onScreenSelect:r,isFormFullyDisabled:o,onClose:i,isActive:c}=e;const{updateChatMemberBannedRights:d}=(0,s.Sv)(),[m,u]=(0,a.eJ)({}),[h,Z]=(0,a.eJ)(!1),[v,p]=(0,a.eJ)(!1),[E,C,f]=(0,ee.Z)(),b=(0,g.Z)();(0,P.ZP)(c,i);const I=(0,a.Ye)((()=>{if(t&&t.fullInfo&&t.fullInfo.members)return t.fullInfo.members.find((e=>{let{userId:t}=e;return t===n}))}),[t,n]);(0,a.d4)((()=>{null!=t&&t.fullInfo&&n&&!I&&r(l.u1.GroupPermissions)}),[t,r,I,n]),(0,a.d4)((()=>{u((null==I?void 0:I.bannedRights)||(null==t?void 0:t.defaultBannedRights)||{}),Z(!1),p(!1)}),[t,I]);const y=(0,a.I4)((e=>{const{name:t}=e.target;function n(e){return!e||void 0}u((e=>({...e,[t]:n(e[t]),..."sendStickers"===t&&{sendGifs:n(e[t])}}))),Z(!0)}),[]),S=(0,a.I4)((()=>{t&&n&&(p(!0),d({chatId:t.id,userId:n,bannedRights:m}))}),[t,n,m,d]),N=(0,a.I4)((()=>{t&&n&&d({chatId:t.id,userId:n,bannedRights:{viewMessages:!0}})}),[t,n,d]),k=(0,a.I4)((e=>!!o||!(!t||!t.defaultBannedRights)&&t.defaultBannedRights[e]),[t,o]);if(I)return a.ZP.createElement("div",{className:"Management"},a.ZP.createElement("div",{className:"custom-scroll"},a.ZP.createElement("div",{className:"section"},a.ZP.createElement(_e.Z,{inactive:!0,className:"chat-item-clickable"},a.ZP.createElement(Xe.Z,{userId:I.userId})),a.ZP.createElement("h3",{className:"section-heading mt-4",dir:"auto"},b("UserRestrictionsCanDo")),a.ZP.createElement("div",{className:"ListItem no-selection"},a.ZP.createElement(ct.Z,{name:"sendMessages",checked:!m.sendMessages,label:b("UserRestrictionsSend"),blocking:!0,disabled:k("sendMessages"),onChange:y})),a.ZP.createElement("div",{className:"ListItem no-selection"},a.ZP.createElement(ct.Z,{name:"sendMedia",checked:!m.sendMedia,label:b("UserRestrictionsSendMedia"),blocking:!0,disabled:k("sendMedia"),onChange:y})),a.ZP.createElement("div",{className:"ListItem no-selection"},a.ZP.createElement(ct.Z,{name:"sendStickers",checked:!m.sendStickers&&!m.sendGifs,label:b("UserRestrictionsSendStickers"),blocking:!0,disabled:k("sendStickers"),onChange:y})),a.ZP.createElement("div",{className:"ListItem no-selection"},a.ZP.createElement(ct.Z,{name:"sendPolls",checked:!m.sendPolls,label:b("UserRestrictionsSendPolls"),blocking:!0,disabled:k("sendPolls"),onChange:y})),a.ZP.createElement("div",{className:"ListItem no-selection"},a.ZP.createElement(ct.Z,{name:"embedLinks",checked:!m.embedLinks,label:b("UserRestrictionsEmbedLinks"),blocking:!0,disabled:k("embedLinks"),onChange:y})),a.ZP.createElement("div",{className:"ListItem no-selection"},a.ZP.createElement(ct.Z,{name:"inviteUsers",checked:!m.inviteUsers,label:b("UserRestrictionsInviteUsers"),blocking:!0,disabled:k("inviteUsers"),onChange:y})),a.ZP.createElement("div",{className:"ListItem no-selection"},a.ZP.createElement(ct.Z,{name:"pinMessages",checked:!m.pinMessages,label:b("UserRestrictionsPinMessages"),blocking:!0,disabled:k("pinMessages"),onChange:y})),a.ZP.createElement("div",{className:"ListItem no-selection"},a.ZP.createElement(ct.Z,{name:"changeInfo",checked:!m.changeInfo,label:b("UserRestrictionsChangeInfo"),blocking:!0,disabled:k("changeInfo"),onChange:y}))),!o&&a.ZP.createElement("div",{className:"section"},a.ZP.createElement(_e.Z,{icon:"delete-user",ripple:!0,destructive:!0,onClick:C},b("UserRestrictionsBlock")))),a.ZP.createElement(Sn.Z,{isShown:h,onClick:S,ariaLabel:b("Save"),disabled:v},v?a.ZP.createElement(V.Z,{color:"white"}):a.ZP.createElement("i",{className:"icon-check"})),a.ZP.createElement(Qe.Z,{isOpen:E,onClose:f,text:"Are you sure you want to ban and remove this user from the group?",confirmLabel:"Remove",confirmHandler:N,confirmIsDestructive:!0}))}))),Ml=(0,a.X$)((0,s.c$)(((e,t)=>{let{chatId:n}=t;const a=(0,b.Z1)(e,n);return{chat:a,currentUserId:e.currentUserId,isChannel:(0,f.eA)(a)}}))((e=>{let{chat:t,isChannel:n,currentUserId:r,onScreenSelect:o,onChatMemberSelect:i,onClose:c,isActive:d}=e;const m=(0,g.Z)();(0,P.ZP)(d,c);const u=(0,a.I4)((()=>{o(l.u1.GroupRecentActions)}),[o]),h=(0,a.Ye)((()=>t.fullInfo&&t.fullInfo.adminMembers?t.fullInfo.adminMembers.sort(((e,t)=>e.isOwner?-1:t.isOwner?1:0)):[]),[t]),Z=(0,a.I4)((e=>{i(e.userId,e.promotedByUserId===r),o(l.u1.ChatAdminRights)}),[r,i,o]),v=(0,a.I4)((()=>{o(l.u1.GroupAddAdmins)}),[o]),p=(0,a.I4)((e=>{if(e.isOwner)return m("ChannelCreator");const t=(0,s.Rd)().users.byId,n=e.promotedByUserId?t[e.promotedByUserId]:void 0;return n?m("EditAdminPromotedBy",(0,f.Js)(n)):m("ChannelAdmin")}),[m]);return a.ZP.createElement("div",{className:"Management"},a.ZP.createElement("div",{className:"custom-scroll"},a.ZP.createElement("div",{className:"section"},a.ZP.createElement(_e.Z,{icon:"recent",multiline:!0,onClick:u},a.ZP.createElement("span",{className:"title"},m("EventLog")),a.ZP.createElement("span",{className:"subtitle"},m(n?"EventLogInfoDetailChannel":"EventLogInfoDetail")))),a.ZP.createElement("div",{className:"section",dir:m.isRtl?"rtl":void 0},a.ZP.createElement("p",{className:"text-muted",dir:"auto"},n?"You can add administrators to help you manage your channel.":"You can add administrators to help you manage your group."),h.map((e=>a.ZP.createElement(_e.Z,{key:e.userId,className:"chat-item-clickable",onClick:()=>Z(e)},a.ZP.createElement(Xe.Z,{userId:e.userId,status:p(e),forceShowSelf:!0})))),a.ZP.createElement(Sn.Z,{isShown:!0,onClick:v,ariaLabel:m("Channel.Management.AddModerator")},a.ZP.createElement("i",{className:"icon-add-user-filled"})))))}))),Tl=(0,a.X$)((0,s.c$)(((e,t)=>{let{chatId:n}=t;return{chat:(0,b.Z1)(e,n)}}))((e=>{let{chat:t,onClose:n,isActive:s}=e;const r=(0,g.Z)();(0,P.ZP)(s,n);const l=(0,a.Ye)((()=>t&&t.fullInfo&&t.fullInfo.adminMembers?t.fullInfo.adminMembers.sort(((e,t)=>e.isOwner?-1:t.isOwner?1:0)):[]),[t]),o=(0,a.I4)((e=>e.isOwner?r("ChannelCreator"):r("ChannelAdmin")),[r]);return a.ZP.createElement("div",{className:"Management"},a.ZP.createElement("div",{className:"custom-scroll"},a.ZP.createElement("div",{className:"section not-implemented",dir:r.isRtl?"rtl":void 0},a.ZP.createElement("h3",{className:"section-heading",dir:"auto"},"Actions"),a.ZP.createElement("div",{className:"ListItem no-selection"},a.ZP.createElement(ct.Z,{name:"changeInfo",checked:!0,label:r("EventLogAllEvents"),onChange:void 0})),a.ZP.createElement("div",{className:"ListItem no-selection"},a.ZP.createElement(ct.Z,{name:"changeInfo",checked:!0,label:r("EventLogFilterNewAdmins"),onChange:void 0})),a.ZP.createElement("div",{className:"ListItem no-selection"},a.ZP.createElement(ct.Z,{name:"changeInfo",checked:!0,label:r("EventLogFilterNewMembers"),onChange:void 0})),a.ZP.createElement("div",{className:"ListItem no-selection"},a.ZP.createElement(ct.Z,{name:"changeInfo",checked:!0,label:r("EventLogFilterChannelInfo"),onChange:void 0})),a.ZP.createElement("div",{className:"ListItem no-selection"},a.ZP.createElement(ct.Z,{name:"changeInfo",checked:!0,label:r("EventLogFilterDeletedMessages"),onChange:void 0})),a.ZP.createElement("div",{className:"ListItem no-selection"},a.ZP.createElement(ct.Z,{name:"changeInfo",checked:!0,label:r("EventLogFilterEditedMessages"),onChange:void 0})),a.ZP.createElement("div",{className:"ListItem no-selection"},a.ZP.createElement(ct.Z,{name:"changeInfo",checked:!0,label:r("EventLogFilterLeavingMembers"),onChange:void 0}))),a.ZP.createElement("div",{className:"section not-implemented",dir:r.isRtl?"rtl":void 0},a.ZP.createElement("h3",{className:"section-heading",dir:"auto"},r("Channel.Management.Title")),a.ZP.createElement("div",{className:"ListItem no-selection"},a.ZP.createElement(ct.Z,{name:"changeInfo",checked:!0,label:r("EventLogAllAdmins"),onChange:void 0})),l.map((e=>a.ZP.createElement(_e.Z,{key:e.userId,className:"chat-item-clickable picker-list-item",onClick:void 0,ripple:!0},a.ZP.createElement(ct.Z,{label:"",checked:!0}),a.ZP.createElement(Xe.Z,{userId:e.userId,status:o(e),forceShowSelf:!0})))))))}))),Rl=(0,a.X$)((0,s.c$)(((e,t)=>{let{chatId:n,isPromotedByCurrentUser:a}=t;const s=(0,b.Z1)(e,n),{byId:r}=e.users,{currentUserId:l}=e;return{chat:s,usersById:r,currentUserId:l,isChannel:(0,f.eA)(s),isFormFullyDisabled:!(s.isCreator||a),defaultRights:s.adminRights}}))((e=>{var t;let{isNewAdmin:n,selectedUserId:r,defaultRights:o,onScreenSelect:i,chat:c,usersById:d,currentUserId:m,isChannel:u,isFormFullyDisabled:h,onClose:Z,isActive:v}=e;const{updateChatAdmin:p}=(0,s.Sv)(),[E,C]=(0,a.eJ)({}),[b,I]=(0,a.eJ)(Boolean(n)),[y,S]=(0,a.eJ)(!1),[N,k,w]=(0,ee.Z)(),[M,T]=(0,a.eJ)(""),R=(0,g.Z)();(0,P.ZP)(v,Z);const A=(0,a.Ye)((()=>{var e,t;const a=null===(e=c.fullInfo)||void 0===e||null===(t=e.adminMembers)||void 0===t?void 0:t.find((e=>{let{userId:t}=e;return t===r}));if(!n||!a&&r){if(n){const e=(0,s.Rd)().users.byId[r];return e?{userId:e.id,adminRights:o,customTitle:R("ChannelAdmin"),isOwner:!1,promotedByUserId:void 0}:void 0}return a}}),[null===(t=c.fullInfo)||void 0===t?void 0:t.adminMembers,o,n,R,r]);(0,a.d4)((()=>{null!=c&&c.fullInfo&&r&&!A&&i(l.u1.ChatAdministrators)}),[c,i,A,r]),(0,a.d4)((()=>{C((null==A?void 0:A.adminRights)||{}),T(((null==A?void 0:A.customTitle)||"").substr(0,16)),I(Boolean(n)),S(!1)}),[o,n,A]);const L=(0,a.I4)((e=>{const{name:t}=e.target;C((e=>{return{...e,[t]:(n=e[t],!n||void 0)};var n})),I(!0)}),[]),F=(0,a.I4)((()=>{r&&(S(!0),p({chatId:c.id,userId:r,adminRights:E,customTitle:M}))}),[r,p,c.id,E,M]),B=(0,a.I4)((()=>{r&&(p({chatId:c.id,userId:r,adminRights:{}}),w())}),[c.id,w,r,p]),x=(0,a.I4)((e=>!((0,f.G9)(c)||!h&&c.adminRights&&c.adminRights[e])),[c,h]),$=(0,a.Ye)((()=>{if(n||!A)return;if(A.isOwner)return R("ChannelCreator");const e=A.promotedByUserId?d[A.promotedByUserId]:void 0;return e?R("EditAdminPromotedBy",(0,f.Js)(e)):R("ChannelAdmin")}),[n,A,d,R]),D=(0,a.I4)((e=>{const{value:t}=e.target;T(t),I(!0)}),[]);if(A)return a.ZP.createElement("div",{className:"Management"},a.ZP.createElement("div",{className:"custom-scroll"},a.ZP.createElement("div",{className:"section"},a.ZP.createElement(_e.Z,{inactive:!0,className:"chat-item-clickable"},a.ZP.createElement(Xe.Z,{userId:A.userId,status:$,forceShowSelf:!0})),a.ZP.createElement("h3",{className:"section-heading mt-4",dir:"auto"},R("EditAdminWhatCanDo")),a.ZP.createElement("div",{className:"ListItem no-selection"},a.ZP.createElement(ct.Z,{name:"changeInfo",checked:Boolean(E.changeInfo),label:R(u?"EditAdminChangeChannelInfo":"EditAdminChangeGroupInfo"),blocking:!0,disabled:x("changeInfo"),onChange:L})),u&&a.ZP.createElement("div",{className:"ListItem no-selection"},a.ZP.createElement(ct.Z,{name:"postMessages",checked:Boolean(E.postMessages),label:R("EditAdminPostMessages"),blocking:!0,disabled:x("postMessages"),onChange:L})),u&&a.ZP.createElement("div",{className:"ListItem no-selection"},a.ZP.createElement(ct.Z,{name:"editMessages",checked:Boolean(E.editMessages),label:R("EditAdminEditMessages"),blocking:!0,disabled:x("editMessages"),onChange:L})),a.ZP.createElement("div",{className:"ListItem no-selection"},a.ZP.createElement(ct.Z,{name:"deleteMessages",checked:Boolean(E.deleteMessages),label:R(u?"EditAdminDeleteMessages":"EditAdminGroupDeleteMessages"),blocking:!0,disabled:x("deleteMessages"),onChange:L})),!u&&a.ZP.createElement("div",{className:"ListItem no-selection"},a.ZP.createElement(ct.Z,{name:"banUsers",checked:Boolean(E.banUsers),label:R("EditAdminBanUsers"),blocking:!0,disabled:x("banUsers"),onChange:L})),a.ZP.createElement("div",{className:"ListItem no-selection"},a.ZP.createElement(ct.Z,{name:"inviteUsers",checked:Boolean(E.inviteUsers),label:R("EditAdminAddUsers"),blocking:!0,disabled:x("inviteUsers"),onChange:L})),!u&&a.ZP.createElement("div",{className:"ListItem no-selection"},a.ZP.createElement(ct.Z,{name:"pinMessages",checked:Boolean(E.pinMessages),label:R("EditAdminPinMessages"),blocking:!0,disabled:x("pinMessages"),onChange:L})),a.ZP.createElement("div",{className:"ListItem no-selection"},a.ZP.createElement(ct.Z,{name:"addAdmins",checked:Boolean(E.addAdmins),label:R("EditAdminAddAdmins"),blocking:!0,disabled:x("addAdmins"),onChange:L})),a.ZP.createElement("div",{className:"ListItem no-selection"},a.ZP.createElement(ct.Z,{name:"manageCall",checked:Boolean(E.manageCall),label:R("StartVoipChatPermission"),blocking:!0,disabled:x("manageCall"),onChange:L})),!u&&a.ZP.createElement("div",{className:"ListItem no-selection"},a.ZP.createElement(ct.Z,{name:"anonymous",checked:Boolean(E.anonymous),label:R("EditAdminSendAnonymously"),blocking:!0,disabled:x("anonymous"),onChange:L})),h&&a.ZP.createElement("p",{className:"section-info mb-4",dir:"auto"},R("Channel.EditAdmin.CannotEdit")),!u&&a.ZP.createElement(Ue.Z,{id:"admin-title",label:R("EditAdminRank"),onChange:D,value:M,disabled:h,maxLength:16}),m!==r&&!h&&!n&&a.ZP.createElement(_e.Z,{icon:"delete",ripple:!0,destructive:!0,onClick:k},R("EditAdminRemoveAdmin")))),a.ZP.createElement(Sn.Z,{isShown:b,onClick:F,ariaLabel:R("Save"),disabled:y},y?a.ZP.createElement(V.Z,{color:"white"}):a.ZP.createElement("i",{className:"icon-check"})),!n&&a.ZP.createElement(Qe.Z,{isOpen:N,onClose:w,text:"Are you sure you want to dismiss this admin?",confirmLabel:R("Channel.Admin.Dismiss"),confirmHandler:B,confirmIsDestructive:!0}))}))),Al=(0,a.X$)((0,s.c$)(((e,t)=>{var n,a;let{chatId:s}=t;const r=(0,b.Z1)(e,s),{statusesById:l}=e.users,o=null==r||null===(n=r.fullInfo)||void 0===n?void 0:n.members,i=null==r||null===(a=r.fullInfo)||void 0===a?void 0:a.adminMembers,c=r&&(0,f.eA)(r),{userIds:d}=e.contactList||{},{query:m,fetchingStatus:u,globalUserIds:h,localUserIds:Z}=e.userSearch;return{members:o,adminMembers:i,userStatusesById:l,isChannel:c,localContactIds:d,searchQuery:m,isSearching:u,globalUserIds:h,localUserIds:Z,serverTimeOffset:e.serverTimeOffset}}))((e=>{let{noAdmins:t,members:n,adminMembers:r,userStatusesById:o,isChannel:i,isActive:c,globalUserIds:d,localContactIds:m,localUserIds:u,isSearching:h,searchQuery:Z,serverTimeOffset:v,onClose:p,onScreenSelect:E,onChatMemberSelect:C}=e;const{openChat:b,setUserSearchQuery:I,loadContactList:y}=(0,s.Sv)(),S=(0,g.Z)(),N=(0,a.sO)(null),k=(0,a.sO)(null),w=(0,a.Ye)((()=>t&&(null==r?void 0:r.map((e=>{let{userId:t}=e;return t})))||[]),[r,t]),M=(0,a.Ye)((()=>{const e=(0,s.Rd)().users.byId;if(!n||!e)return[];const a=(0,f.Z0)(n.map((e=>{let{userId:t}=e;return t})),e,o,void 0,v);return t?a.filter((e=>!w.includes(e))):a}),[n,o,v,t,w]),T=(0,a.Ye)((()=>{const e=(0,s.Rd)().users.byId,n=(0,s.Rd)().chats.byId,a=Boolean(Z),r=a?m?(0,f.kK)(m,e,Z):[]:M;return(0,f.ih)((0,be.Tw)([...r,...a&&u||[],...a&&d||[]]).filter((n=>{const a=e[n];return!a||(i||a.canBeInvitedToGroup||!(0,f.cS)(a))&&(!t||!w.includes(n))})),n,!0)}),[M,m,Z,u,d,i,t,w]),[R,A]=(0,Be.Z)(y,T,Boolean(Z)),L=(0,a.I4)((e=>{t?(C(e,!1),E(l.u1.ChatNewAdminRights)):b({id:e})}),[t,C,E,b]),F=(0,a.I4)((e=>{I({query:e.target.value})}),[I]),B=(0,xe.Z)(k,c,(e=>{R&&R.length>0&&L(R[-1===e?0:e])}),".ListItem-button",!0);return(0,P.ZP)(c,p),a.ZP.createElement("div",{className:"Management"},t&&a.ZP.createElement("div",{className:"Management__filter",dir:S.isRtl?"rtl":void 0},a.ZP.createElement(Ue.Z,{ref:N,value:Z,onChange:F,placeholder:S("Search")})),a.ZP.createElement("div",{className:"custom-scroll"},a.ZP.createElement("div",{className:"section"},null!=R&&R.length?a.ZP.createElement(Ge.Z,{className:"picker-list custom-scroll",items:T,onLoadMore:A,noScrollRestore:Boolean(Z),ref:k,onKeyDown:B},R.map((e=>a.ZP.createElement(_e.Z,{key:e,className:"chat-item-clickable scroll-item",onClick:()=>L(e)},a.ZP.createElement(Xe.Z,{userId:e,forceShowSelf:!0}))))):h||!R||R.length?a.ZP.createElement(De.Z,null):a.ZP.createElement(Gt.Z,{teactOrderKey:0,key:"nothing-found",text:i?"No subscribers found":"No members found"}))))}))),Ll=(0,a.X$)((0,s.c$)(((e,t)=>{var n;let{chatId:a}=t;const s=(0,b.Z1)(e,a),{byId:r,statusesById:l}=e.users;return{members:null==s||null===(n=s.fullInfo)||void 0===n?void 0:n.members,usersById:r,userStatusesById:l,isChannel:s&&(0,f.eA)(s),serverTimeOffset:e.serverTimeOffset}}))((e=>{let{usersById:t,userStatusesById:n,members:s,isChannel:r,onScreenSelect:o,onChatMemberSelect:i,onClose:c,isActive:d,serverTimeOffset:m}=e;(0,P.ZP)(d,c);const u=(0,a.Ye)((()=>{if(s&&t)return(0,f.Z0)(s.filter((e=>!e.isOwner)).map((e=>{let{userId:t}=e;return t})),t,n,void 0,m)}),[s,m,t,n]),h=(0,a.I4)((e=>{i(e),o(l.u1.GroupUserPermissions)}),[i,o]);return a.ZP.createElement("div",{className:"Management"},a.ZP.createElement("div",{className:"custom-scroll"},a.ZP.createElement("div",{className:"section",teactFastList:!0},u?u.map(((e,t)=>a.ZP.createElement(_e.Z,{key:e,teactOrderKey:t,className:"chat-item-clickable scroll-item",onClick:()=>h(e)},a.ZP.createElement(Xe.Z,{userId:e,forceShowSelf:!0})))):a.ZP.createElement(Gt.Z,{teactOrderKey:0,key:"nothing-found",text:r?"No subscribers found":"No members found"}))))})));var Fl=n(2357),Bl=n(2267);function xl(e,t){const{isPermanent:n,usage:a=0,date:s}=e,{isPermanent:r,usage:l=0,date:o}=t;return n||r?Number(n)-Number(r):a||l?l-a:o-s}const $l=(0,a.X$)((0,s.c$)(((e,t)=>{let{chatId:n}=t;const{invites:a,revokedInvites:s}=e.management.byChatId[n],r=(0,b.Z1)(e,n),l=r&&(0,f.eA)(r);return{exportedInvites:a,revokedExportedInvites:s,chat:r,serverTimeOffset:e.serverTimeOffset,isChannel:l}}))((e=>{let{chatId:t,chat:n,exportedInvites:r,revokedExportedInvites:c,isActive:d,isChannel:m,serverTimeOffset:h,onClose:Z,onScreenSelect:v}=e;const{setEditingExportedInvite:p,showNotification:E,editExportedChatInvite:C,deleteExportedChatInvite:f,deleteRevokedExportedChatInvites:b,setOpenedInviteInfo:I}=(0,s.Sv)(),y=(0,g.Z)(),[S,N,k]=(0,ee.Z)(),[w,M,T]=(0,ee.Z)(),[R,A]=(0,a.eJ)(),[L,F,x]=(0,ee.Z)(),[$,U]=(0,a.eJ)(),[G,_]=(0,a.eJ)(),[J,X]=(0,a.eJ)(!1),z=(0,a.I4)((()=>X(!0)),[]);(0,a.d4)((()=>{G||(0,yt.Z)("Invite").then(_)}),[G]),(0,P.ZP)(d,Z);const V=(0,a.Ye)((()=>{if(r)return r.some((e=>{let{expireDate:t}=e;return t&&t-(0,Bl.b)(h){Y()}),V?1e3:void 0);const H=null==r?void 0:r.find((e=>{let{isPermanent:t}=e;return t})),j=null!=n&&n.username?`t.me/${n.username}`:null==H?void 0:H.link,q=(0,a.Ye)((()=>{const e=null!=n&&n.username?r:null==r?void 0:r.filter((e=>{let{isPermanent:t}=e;return!t}));return null==e?void 0:e.sort(xl)}),[null==n?void 0:n.username,r]),K=(0,a.I4)((e=>{const{link:n,title:a,isRequestNeeded:s,expireDate:r,usageLimit:l}=e;C({chatId:t,link:n,title:a,isRequestNeeded:s,expireDate:r,usageLimit:l,isRevoked:!0})}),[t,C]),W=(0,a.I4)((e=>{A(e),M()}),[M]),Q=(0,a.I4)((()=>{R&&(K(R),A(void 0),T())}),[T,K,R]),ne=(0,a.I4)((()=>{v(l.u1.EditInvite)}),[v]),ae=(0,a.I4)((()=>{H&&W(H)}),[W,H]),se=(0,a.I4)((()=>{b({chatId:t}),k()}),[t,k,b]),re=(0,a.I4)((e=>{I({chatId:t,invite:e}),v(l.u1.InviteInfo)}),[t,v,I]),le=(0,a.I4)((e=>{f({chatId:t,link:e.link})}),[t,f]),oe=(0,a.I4)((e=>{U(e),F()}),[F]),ie=(0,a.I4)((()=>{$&&(le($),U(void 0),x())}),[x,le,$]),ce=(0,a.I4)((e=>{(0,Zs.TE)(e),E({message:y("LinkCopied")})}),[y,E]),de=(0,a.I4)((()=>{ce(j)}),[ce,j]),me=e=>{const{usage:t=0,usageLimit:n,expireDate:a,isPermanent:s,requested:r,isRevoked:l}=e;let o="";if(o=!l&&n&&t0?y("InviteLink.ExpiresIn",(0,te.D)(y,e)):y("InviteLink.Expired")}else s&&(o+=` • ${y("Permanent")}`);return o},ue=e=>{const n=[];return n.push({title:y("Copy"),icon:"copy",handler:()=>ce(e.link)}),e.isPermanent||e.isRevoked||n.push({title:y("Edit"),icon:"edit",handler:()=>(e=>{p({chatId:t,invite:e}),v(l.u1.EditInvite)})(e)}),e.isRevoked?n.push({title:y("DeleteLink"),icon:"delete",handler:()=>oe(e),destructive:!0}):n.push({title:y("RevokeButton"),icon:"delete",handler:()=>W(e),destructive:!0}),n},he=(0,a.Ye)((()=>e=>{let{onTrigger:t,isOpen:n}=e;return a.ZP.createElement(B.Z,{round:!0,ripple:!i.wB,size:"smaller",color:"translucent",className:n?"active":"",onClick:t,ariaLabel:"Actions"},a.ZP.createElement("i",{className:"icon-more"}))}),[]);return a.ZP.createElement("div",{className:"Management ManageInvites"},a.ZP.createElement("div",{className:"custom-scroll"},a.ZP.createElement("div",{className:"section"},a.ZP.createElement("div",{className:"section-icon"},G&&a.ZP.createElement(St.Z,{id:"inviteDuck",size:o.jV,animationData:G,play:J,onLoad:z})),a.ZP.createElement("p",{className:"text-muted"},y(m?"PrimaryLinkHelpChannel":"PrimaryLinkHelp"))),j&&a.ZP.createElement("div",{className:"section"},a.ZP.createElement("p",{className:"text-muted"},null!=n&&n.username?y("PublicLink"):y("lng_create_permanent_link_title")),a.ZP.createElement("div",{className:"primary-link"},a.ZP.createElement("input",{className:"form-control primary-link-input",value:j,readOnly:!0,onClick:de}),a.ZP.createElement(D.Z,{className:"primary-link-more-menu",trigger:he,positionX:"right"},a.ZP.createElement(O.Z,{icon:"copy",onClick:de},y("Copy")),!(null!=n&&n.username)&&a.ZP.createElement(O.Z,{icon:"delete",onClick:ae,destructive:!0},y("RevokeButton")))),a.ZP.createElement(B.Z,{onClick:de},y("CopyLink"))),a.ZP.createElement("div",{className:"section",teactFastList:!0},a.ZP.createElement(B.Z,{isText:!0,key:"create",className:"create-link",onClick:ne},y("CreateNewLink")),(!q||!q.length)&&a.ZP.createElement(Gt.Z,{text:"No links found",key:"nothing"}),null==q?void 0:q.map((e=>a.ZP.createElement(_e.Z,{icon:"link",secondaryIcon:"more",multiline:!0,onClick:()=>re(e),contextActions:ue(e),key:e.link},a.ZP.createElement("span",{className:"title invite-title"},e.title||e.link),a.ZP.createElement("span",{className:"subtitle",dir:"auto"},me(e))))),a.ZP.createElement("p",{className:"text-muted hint",key:"links-hint"},y("ManageLinksInfoHelp"))),c&&Boolean(c.length)&&a.ZP.createElement("div",{className:"section",teactFastList:!0},a.ZP.createElement("p",{className:"text-muted",key:"title"},y("RevokedLinks")),a.ZP.createElement(_e.Z,{icon:"delete",destructive:!0,key:"delete",onClick:N},a.ZP.createElement("span",{className:"title"},y("DeleteAllRevokedLinks"))),null==c?void 0:c.map((e=>a.ZP.createElement(_e.Z,{icon:"link",secondaryIcon:"more",multiline:!0,onClick:()=>re(e),contextActions:ue(e),key:e.link},a.ZP.createElement("span",{className:"title"},e.title||e.link),a.ZP.createElement("span",{className:"subtitle",dir:"auto"},me(e))))))),a.ZP.createElement(Qe.Z,{isOpen:S,onClose:k,title:y("DeleteAllRevokedLinks"),text:y("DeleteAllRevokedLinkHelp"),confirmIsDestructive:!0,confirmLabel:y("DeleteAll"),confirmHandler:se}),a.ZP.createElement(Qe.Z,{isOpen:w,onClose:T,title:y("RevokeLink"),text:y("RevokeAlert"),confirmIsDestructive:!0,confirmLabel:y("RevokeButton"),confirmHandler:Q}),a.ZP.createElement(Qe.Z,{isOpen:L,onClose:x,title:y("DeleteLink"),text:y("DeleteLinkHelp"),confirmIsDestructive:!0,confirmLabel:y("Delete"),confirmHandler:ie}))}))),Dl=[1,10,100],Ol={hour:36e5,day:864e5,week:6048e5},Ul=Ol.hour,Gl=(0,a.X$)((0,s.c$)(((e,t)=>{let{chatId:n}=t;const{editingInvite:a}=e.management.byChatId[n];return{editingInvite:a,serverTimeOffset:e.serverTimeOffset}}))((e=>{let{chatId:t,editingInvite:n,isActive:r,serverTimeOffset:o,onClose:i,onScreenSelect:c}=e;const{editExportedChatInvite:m,exportChatInvite:u}=(0,s.Sv)(),h=(0,g.Z)(),[Z,v,p]=(0,ee.Z)(),[E,C]=(0,a.eJ)(!1),[f,b]=(0,a.eJ)(""),[I,y]=(0,a.eJ)(Date.now()+Ul),[S,N]=(0,a.eJ)("unlimited"),[k,w]=(0,a.eJ)(10),[M,T]=(0,a.eJ)("0"),[R,A]=(0,a.eJ)(!1);(0,P.ZP)(r,i),(0,d.Z)((e=>{let[t]=e;if(t!==n)if(n){const{title:e,usageLimit:t,expireDate:a,isRequestNeeded:s}=n;if(e&&b(e),t&&(T(Dl.includes(t)?t.toString():"custom"),w(t)),a){const e=(0,Bl.b)(o)+Ul;N("custom"),y(1e3*Math.max(a,e))}s&&C(!0)}else b(""),N("unlimited"),T("0"),y(1e3*(0,Bl.b)(o)+Ul),w(10),C(!1)}),[n,o]);const L=(0,a.I4)((e=>{C(e.target.checked)}),[]),F=(0,a.I4)((e=>{b(e.target.value)}),[]),x=(0,a.I4)((e=>{w(Number.parseInt(e.target.value,10))}),[]),$=(0,a.I4)((e=>{y(e.getTime()),p()}),[p]),D=(0,a.I4)((()=>{A(!0);const e="custom"===M?k:M;let a;switch(S){case"custom":a=(0,Bl.b)(o)+(I-Date.now())/1e3;break;case"hour":case"day":case"week":a=(0,Bl.b)(o)+Ol[S]/1e3;break;default:a=void 0}n?m({link:n.link,chatId:t,title:f,isRequestNeeded:E,expireDate:a,usageLimit:e}):u({chatId:t,title:f,isRequestNeeded:E,expireDate:a,usageLimit:e}),c(l.u1.Invites)}),[t,I,k,m,n,u,E,S,M,f,c,o]);return a.ZP.createElement("div",{className:"Management ManageInvite"},a.ZP.createElement("div",{className:"custom-scroll"},a.ZP.createElement("div",{className:"section"},a.ZP.createElement(ct.Z,{label:h("ApproveNewMembers"),subLabel:h("ApproveNewMembersDescription"),checked:E,onChange:L})),a.ZP.createElement("div",{className:"section"},a.ZP.createElement(Ue.Z,{className:"link-name",placeholder:h("LinkNameHint"),value:f,onChange:F}),a.ZP.createElement("p",{className:"text-muted hint"},h("LinkNameHelp"))),a.ZP.createElement("div",{className:"section"},a.ZP.createElement("div",{className:"section-header"},h("LimitByPeriod")),a.ZP.createElement(gt.Z,{name:"expireOptions",options:[{value:"hour",label:h("Hours",1)},{value:"day",label:h("Days",1)},{value:"week",label:h("Weeks",1)},{value:"unlimited",label:h("NoLimit")},{value:"custom",label:h("lng_group_invite_expire_custom")}],onChange:N,selected:S}),"custom"===S&&a.ZP.createElement(B.Z,{className:"expire-limit",isText:!0,onClick:v},(0,te.Tu)(h,I)," ",(0,te.mr)(h,I)),a.ZP.createElement("p",{className:"text-muted hint"},h("TimeLimitHelp"))),!E&&a.ZP.createElement("div",{className:"section"},a.ZP.createElement("div",{className:"section-header"},h("LimitNumberOfUses")),a.ZP.createElement(gt.Z,{name:"usageOptions",options:[...Dl.map((e=>({value:e.toString(),label:e}))),{value:"0",label:h("NoLimit")},{value:"custom",label:h("lng_group_invite_usage_custom")}],onChange:T,selected:M}),"custom"===M&&a.ZP.createElement("input",{className:"form-control usage-limit",type:"number",min:"1",max:"99999",value:k,onChange:x}),a.ZP.createElement("p",{className:"text-muted hint"},h("UsesLimitHelp"))),a.ZP.createElement(Sn.Z,{isShown:!0,onClick:D,disabled:R,ariaLabel:h(n?"SaveLink":"CreateLink")},a.ZP.createElement("i",{className:"icon-check"}))),a.ZP.createElement(lt,{isOpen:Z,isFutureMode:!0,withTimePicker:!0,onClose:p,onSubmit:$,selectedAt:I,submitButtonLabel:h("Save")}))}))),_l=(0,a.X$)((0,s.c$)(((e,t)=>{var n;let{chatId:a}=t;const s=(0,b.Z1)(e,a);return{enabledReactions:null===(n=s.fullInfo)||void 0===n?void 0:n.enabledReactions,availableReactions:e.availableReactions,chat:s}}))((e=>{let{availableReactions:t,enabledReactions:n,chat:r,isActive:l,onClose:o}=e;const{setChatEnabledReactions:i}=(0,s.Sv)(),c=(0,g.Z)(),[d,m]=(0,a.eJ)(!1),[u,h]=(0,a.eJ)(!1),[Z,v]=(0,a.eJ)(n||[]);(0,P.ZP)(l,o);const p=(0,a.I4)((()=>{r&&(h(!0),i({chatId:r.id,enabledReactions:Z}))}),[r,Z,i]);(0,a.d4)((()=>{n&&(h(!1),m(!1),v(n))}),[n]);const E=(0,a.I4)((e=>{if(!r||!t)return;const{name:n,checked:a}=e.currentTarget,s="all"===n?a?t.map((e=>e.reaction)):[]:a?[...Z,n]:Z.filter((e=>e!==n));v(s),m(!0)}),[t,r,Z]);return a.ZP.createElement("div",{className:"Management"},a.ZP.createElement("div",{className:"custom-scroll"},a.ZP.createElement("div",{className:"section"},a.ZP.createElement("div",{className:"ListItem no-selection"},a.ZP.createElement(ct.Z,{name:"all",checked:!Z||Z.length>0,label:c("EnableReactions"),onChange:E})),null==t?void 0:t.filter((e=>!e.isInactive)).map((e=>{let{reaction:t,title:n}=e;return a.ZP.createElement("div",{className:"ListItem no-selection"},a.ZP.createElement(ct.Z,{name:t,checked:!Z||(null==Z?void 0:Z.includes(t)),disabled:0===(null==Z?void 0:Z.length),label:a.ZP.createElement("div",{className:"Reaction"},a.ZP.createElement(bt.Z,{reaction:t}),n),onChange:E}))})))),a.ZP.createElement(Sn.Z,{isShown:d,onClick:p,ariaLabel:c("Save"),disabled:u},u?a.ZP.createElement(V.Z,{color:"white"}):a.ZP.createElement("i",{className:"icon-check"})))}))),Jl=(0,a.X$)((0,s.c$)(((e,t)=>{let{chatId:n}=t;const{inviteInfo:a}=e.management.byChatId[n],{invite:s,importers:r,requesters:l}=a||{},o=(0,b.Z1)(e,n);return{invite:s,importers:r,requesters:l,isChannel:o&&(0,f.eA)(o),serverTimeOffset:e.serverTimeOffset}}))((e=>{let{chatId:t,invite:n,importers:r,requesters:l,isChannel:o,isActive:i,serverTimeOffset:c,onClose:d}=e;const{showNotification:m,loadChatInviteImporters:u,loadChatInviteRequesters:h,openChat:Z}=(0,s.Sv)(),v=(0,g.Z)(),{usage:p=0,usageLimit:E,link:C,adminId:f}=n||{},b=(null==n?void 0:n.expireDate)&&1e3*(n.expireDate-(0,Bl.b)(c))+Date.now(),I=((null==n?void 0:n.expireDate)||0)-(0,Bl.b)(c)<0;(0,a.d4)((()=>{C&&(u({chatId:t,link:C}),h({chatId:t,link:C}))}),[t,C,u,h]);const y=(0,a.I4)((()=>{(0,Zs.TE)(n.link),m({message:v("LinkCopied")})}),[n,v,m]);return(0,P.ZP)(i,d),a.ZP.createElement("div",{className:"Management ManageInviteInfo"},a.ZP.createElement("div",{className:"custom-scroll"},!n&&a.ZP.createElement("p",{className:"text-muted"},v("Loading")),n&&a.ZP.createElement(a.ZP.Fragment,null,a.ZP.createElement("div",{className:"section"},a.ZP.createElement("h3",{className:"link-title"},n.title||n.link),a.ZP.createElement("input",{className:"form-control",value:n.link,readOnly:!0,onClick:y}),a.ZP.createElement(B.Z,{className:"copy-link",onClick:y},v("CopyLink")),b&&a.ZP.createElement("p",{className:"text-muted"},I?v("ExpiredLink"):v("LinkExpiresIn",`${(0,te.Tu)(v,b)} ${(0,te.mr)(v,b)}`))),f&&a.ZP.createElement("div",{className:"section"},a.ZP.createElement("p",null,v("LinkCreatedeBy")),a.ZP.createElement(_e.Z,{className:"chat-item-clickable scroll-item small-icon",onClick:()=>Z({id:f})},a.ZP.createElement(Xe.Z,{userId:f,status:(0,te.ZK)(v,1e3*n.date,!0),forceShowSelf:!0}))),(()=>{if(null!=r&&r.length||null==l||!l.length)return r?a.ZP.createElement("div",{className:"section"},a.ZP.createElement("p",null,r.length?v("PeopleJoined",p):v("NoOneJoined")),a.ZP.createElement("p",{className:"text-muted"},!r.length&&(E?v("PeopleCanJoinViaLinkCount",E-p):v("NoOneJoinedYet")),r.map((e=>a.ZP.createElement(_e.Z,{className:"chat-item-clickable scroll-item small-icon",onClick:()=>Z({id:e.userId})},a.ZP.createElement(Xe.Z,{userId:e.userId,status:(0,te.ZK)(v,1e3*e.date,!0),forceShowSelf:!0})))))):a.ZP.createElement(V.Z,null)})(),(()=>{if(null==n||!n.isRevoked){if(!l&&r)return a.ZP.createElement(V.Z,null);if(null!=l&&l.length)return a.ZP.createElement("div",{className:"section"},a.ZP.createElement("p",null,v(o?"SubscribeRequests":"MemberRequests")),a.ZP.createElement("p",{className:"text-muted"},l.map((e=>a.ZP.createElement(_e.Z,{className:"chat-item-clickable scroll-item small-icon",onClick:()=>Z({id:e.userId})},a.ZP.createElement(Xe.Z,{userId:e.userId,status:(0,te.ZK)(v,1e3*e.date,!0),forceShowSelf:!0}))))))}})())))}))),Xl=(0,a.X$)((0,s.c$)(((e,t)=>{let{userId:n}=t;return{user:(0,b.dy)(e,n),serverTimeOffset:e.serverTimeOffset}}))((e=>{let{userId:t,about:n,date:r,isChannel:l,user:o,serverTimeOffset:i,chatId:c}=e;const{openChat:d,hideChatJoinRequest:m}=(0,s.Sv)(),u=(0,Y.y)("JoinRequest"),h=(0,g.Z)(),Z=(0,f.Js)(o),v=1e3*(r-(0,Bl.b)(i))+Date.now(),P=(0,te.zk)(new Date(v))?(0,te.mr)(h,v):(0,te.j1)(h,v,!0,!1,!0),p=(0,a.I4)((()=>{m({chatId:c,userId:t,isApproved:!0})}),[c,m,t]),E=(0,a.I4)((()=>{m({chatId:c,userId:t,isApproved:!1})}),[c,m,t]);return a.ZP.createElement("div",{className:u("&")},a.ZP.createElement("div",{className:u("top")},a.ZP.createElement("div",{className:u("user"),onClick:()=>{d({id:t})}},a.ZP.createElement(we.Z,{key:t,size:"medium",user:o}),a.ZP.createElement("div",{className:u("user-info")},a.ZP.createElement("div",{className:u("user-name")},Z),a.ZP.createElement("div",{className:u("user-subtitle")},n))),a.ZP.createElement("div",{className:u("date")},P)),a.ZP.createElement("div",{className:u("buttons")},a.ZP.createElement(B.Z,{className:u("button"),onClick:p},h(l?"ChannelAddToChannel":"ChannelAddToGroup")),a.ZP.createElement(B.Z,{className:u("button"),isText:!0,onClick:E},h("DismissRequest"))))}))),zl=(0,a.X$)((0,s.c$)(((e,t)=>{let{chatId:n}=t;const a=(0,b.Z1)(e,n);return{chat:a,serverTimeOffset:e.serverTimeOffset,isChannel:a&&(0,f.eA)(a)}}))((e=>{var t,n,r;let{chat:l,chatId:i,isActive:c,isChannel:d,onClose:m}=e;const{hideAllChatJoinRequests:u,loadChatJoinRequests:h}=(0,s.Sv)(),[Z,v,p]=(0,ee.Z)(),[E,C,b]=(0,ee.Z)(),I=(0,g.Z)(),[y,S]=(0,a.eJ)(),[N,k]=(0,a.eJ)(!1),w=(0,a.I4)((()=>k(!0)),[]);(0,a.d4)((()=>{y||(0,yt.Z)("JoinRequest").then(S)}),[y]),(0,P.ZP)(c,m),(0,a.d4)((()=>{null!=l&&l.joinRequests||(0,f.YC)(i)||h({chatId:i})}),[l,i,h]);const M=(0,a.I4)((()=>{u({chatId:i,isApproved:!0}),p()}),[u,i,p]),T=(0,a.I4)((()=>{u({chatId:i,isApproved:!1}),b()}),[u,i,b]);return a.ZP.createElement("div",{className:"Management ManageJoinRequests"},a.ZP.createElement("div",{className:"section"},a.ZP.createElement("div",{className:"section-icon"},y&&a.ZP.createElement(St.Z,{id:"joinRequestDucks",size:o.PM,animationData:y,play:N,onLoad:w})),Boolean(null==l||null===(t=l.joinRequests)||void 0===t?void 0:t.length)&&a.ZP.createElement("div",{className:"bulk-actions"},a.ZP.createElement(B.Z,{className:"bulk-action-button",onClick:v},"Accept all"),a.ZP.createElement(B.Z,{className:"bulk-action-button",onClick:C,isText:!0},"Dismiss all"))),a.ZP.createElement("div",{className:"section"},a.ZP.createElement("div",{className:"custom-scroll",teactFastList:!0},a.ZP.createElement("p",{key:"title"},null!=l&&l.joinRequests?l.joinRequests.length?I("JoinRequests",l.joinRequests.length):I("NoMemberRequests"):I("Loading")),!(null!=l&&l.joinRequests)&&a.ZP.createElement(V.Z,{key:"loading"}),0===(null==l||null===(n=l.joinRequests)||void 0===n?void 0:n.length)&&a.ZP.createElement("p",{className:"text-muted",key:"empty"},I(d?"NoSubscribeRequestsDescription":"NoMemberRequestsDescription")),null==l||null===(r=l.joinRequests)||void 0===r?void 0:r.map((e=>{let{userId:t,about:n,date:s}=e;return a.ZP.createElement(Xl,{userId:t,about:n,date:s,isChannel:d,chatId:i,key:t})})))),a.ZP.createElement(Qe.Z,{isOpen:Z,onClose:p,title:"Accept all requests?",text:"Are you sure you want to accept all requests?",confirmHandler:M}),a.ZP.createElement(Qe.Z,{isOpen:E,onClose:b,title:"Reject all requests?",text:"Are you sure you want to reject all requests?",confirmHandler:T}))}))),Vl=(0,a.X$)((0,s.c$)((e=>({managementType:(0,b.pP)(e)})))((e=>{let{chatId:t,currentScreen:n,selectedChatMemberId:s,isPromotedByCurrentUser:r,onScreenSelect:o,onChatMemberSelect:i,onClose:c,isActive:d,managementType:m}=e;switch(n){case l.u1.Initial:switch(m){case"user":return a.ZP.createElement(gl,{key:t,userId:t,onClose:c,isActive:d});case"group":return a.ZP.createElement(El,{key:t,chatId:t,onScreenSelect:o,onClose:c,isActive:d||[l.u1.ChatPrivacyType,l.u1.Discussion,l.u1.GroupPermissions,l.u1.ChatAdministrators,l.u1.GroupRemovedUsers,l.u1.GroupUserPermissionsCreate,l.u1.GroupUserPermissions,l.u1.ChatAdminRights,l.u1.ChatNewAdminRights,l.u1.GroupRecentActions].includes(n)});case"channel":return a.ZP.createElement(yl,{key:t,chatId:t,onScreenSelect:o,onClose:c,isActive:d||[l.u1.ChannelSubscribers,l.u1.ChatAdministrators,l.u1.ChannelRemovedUsers,l.u1.Discussion,l.u1.ChatPrivacyType,l.u1.ChatAdminRights,l.u1.ChatNewAdminRights,l.u1.GroupRecentActions].includes(n)})}break;case l.u1.ChatPrivacyType:return a.ZP.createElement(Nl,{chatId:t,isActive:d,onClose:c});case l.u1.Discussion:return a.ZP.createElement(kl,{chatId:t,onScreenSelect:o,isActive:d,onClose:c});case l.u1.GroupPermissions:return a.ZP.createElement(Cl,{chatId:t,onScreenSelect:o,onChatMemberSelect:i,isActive:d||[l.u1.GroupRemovedUsers,l.u1.GroupUserPermissionsCreate,l.u1.GroupUserPermissions].includes(n),onClose:c});case l.u1.ChannelRemovedUsers:case l.u1.GroupRemovedUsers:return a.ZP.createElement(bl,{chatId:t,isActive:d,onClose:c});case l.u1.GroupUserPermissionsCreate:return a.ZP.createElement(Ll,{chatId:t,onChatMemberSelect:i,onScreenSelect:o,isActive:d||[l.u1.GroupUserPermissions].includes(n),onClose:c});case l.u1.GroupUserPermissions:return a.ZP.createElement(wl,{chatId:t,selectedChatMemberId:s,isPromotedByCurrentUser:r,onScreenSelect:o,isActive:d,onClose:c});case l.u1.ChatAdministrators:return a.ZP.createElement(Ml,{chatId:t,onScreenSelect:o,onChatMemberSelect:i,isActive:d||[l.u1.ChatAdminRights,l.u1.ChatNewAdminRights,l.u1.GroupRecentActions].includes(n),onClose:c});case l.u1.GroupRecentActions:return a.ZP.createElement(Tl,{chatId:t,isActive:d,onClose:c});case l.u1.ChatNewAdminRights:case l.u1.ChatAdminRights:return a.ZP.createElement(Rl,{chatId:t,isNewAdmin:n===l.u1.ChatNewAdminRights,selectedUserId:s,isPromotedByCurrentUser:r,onScreenSelect:o,isActive:d,onClose:c});case l.u1.ChannelSubscribers:case l.u1.GroupMembers:return a.ZP.createElement(Al,{chatId:t,isActive:d,onClose:c});case l.u1.Invites:return a.ZP.createElement($l,{chatId:t,isActive:d,onClose:c,onScreenSelect:o});case l.u1.EditInvite:return a.ZP.createElement(Gl,{chatId:t,isActive:d,onClose:c,onScreenSelect:o});case l.u1.GroupAddAdmins:return a.ZP.createElement(Al,{chatId:t,noAdmins:!0,isActive:d,onClose:c,onScreenSelect:o,onChatMemberSelect:i});case l.u1.Reactions:return a.ZP.createElement(_l,{chatId:t,isActive:d,onClose:c});case l.u1.InviteInfo:return a.ZP.createElement(Jl,{chatId:t,isActive:d,onClose:c});case l.u1.JoinRequests:return a.ZP.createElement(zl,{chatId:t,isActive:d,onClose:c})}})));var Yl=n(9937);const Hl=/^4[0-9]{12}(?:[0-9]{1,3})?$/,jl=/^5[1-5][0-9]{11,14}$/,ql=/^2[2-7][0-9]{11,14}$/;let Kl;!function(e){e[e.Default=0]="Default",e[e.Visa=1]="Visa",e[e.Mastercard=2]="Mastercard"}(Kl||(Kl={}));const Wl={[Kl.Default]:"",[Kl.Visa]:"visa",[Kl.Mastercard]:"mastercard"};function Ql(e){return e=e.replace(/\s/g,""),Hl.test(e)?Kl.Visa:jl.test(e)||ql.test(e)?Kl.Mastercard:Kl.Default}const eo={},to=/(\d{1,3})(\d{1,3})?(\d{1,3})?(\d{1,3})?(\d{1,3})?/,no="AF🇦🇫93Afghanistan333\nAO🇦🇴244Angola333\nAL🇦🇱355Albania234\nAD🇦🇩376Andorra222\nAE🇦🇪971United Arab Emirates234\nAI🇦🇮1264Anguilla34\nAR🇦🇷54Argentina\nAM🇦🇲374Armenia233\nAG🇦🇬1268Antigua and Barbuda34\nAU🇦🇺61Australia333\nAS🇦🇸1684American Samoa34\nAT🇦🇹43Austria\nAW🇦🇼297Aruba34\nAZ🇦🇿994Azerbaijan2322\nBI🇧🇮257Burundi224\nBE🇧🇪32Belgium3222\nBJ🇧🇯229Benin233\nBF🇧🇫226Burkina Faso2222\nBD🇧🇩880Bangladesh\nBG🇧🇬359Bulgaria\nBH🇧🇭973Bahrain44\nBS🇧🇸1242Bahamas34\nBA🇧🇦387Bosnia and Herzegovina\nBY🇧🇾375Belarus2322\nBZ🇧🇿501Belize\nBO🇧🇴591Bolivia134\nBR🇧🇷55Brazil254\nBB🇧🇧1246Barbados34\nBM🇧🇲1441Bermuda34\nBN🇧🇳673Brunei34\nBQ🇧🇶599Bonaire, Sint Eustatius and Saba\nBT🇧🇹975Bhutan\nBW🇧🇼267Botswana233\nCF🇨🇫236Central African Republic2222\nCA🇨🇦1Canada334\nCH🇨🇭41Switzerland234\nCK🇨🇰682Cook Islands\nCL🇨🇱56Chile144\nCN🇨🇳86China344\nCI🇨🇮225Côte d`Ivoire233\nCM🇨🇲237Cameroon44\nCD🇨🇩243DR Congo234\nCG🇨🇬242Republic of the Congo234\nCO🇨🇴57Colombia334\nKM🇰🇲269Comoros34\nCV🇨🇻238Cape Verde34\nCR🇨🇷506Costa Rica\nCU🇨🇺53Cuba44\nCY🇨🇾357Cyprus44\nCW🇨🇼599Curaçao\nCZ🇨🇿420Czech Republic\nDE🇩🇪49Germany38\nDJ🇩🇯253Djibouti2222\nDM🇩🇲1767Dominica34\nDK🇩🇰45Denmark44\nDO🇩🇴1Dominican Republic334\nDZ🇩🇿213Algeria3222\nEC🇪🇨593Ecuador\nEG🇪🇬20Egypt234\nER🇪🇷291Eritrea133\nES🇪🇸34Spain333\nEE🇪🇪372Estonia\nET🇪🇹251Ethiopia234\nFI🇫🇮358Finland\nFJ🇫🇯679Fiji\nFK🇫🇰500Falkland Islands\nFM🇫🇲691Micronesia\nFO🇫🇴298Faroe Islands33\nFR🇫🇷33France12222\nGA🇬🇦241Gabon1222\nGB🇬🇧44United Kingdom46\nGE🇬🇪995Georgia\nGF🇬🇫594French Guiana\nGH🇬🇭233Ghana\nGI🇬🇮350Gibraltar44\nGL🇬🇱299Greenland33\nGN🇬🇳224Guinea333\nGM🇬🇲220Gambia34\nGP🇬🇵590Guadeloupe\nGU🇬🇺1671Guam34\nGW🇬🇼245Guinea-Bissau34\nGQ🇬🇶240Equatorial Guinea333\nGR🇬🇷30Greece244\nGD🇬🇩1473Grenada34\nGT🇬🇹502Guatemala134\nGY🇬🇾592Guyana\nHK🇭🇰852Hong Kong\nHN🇭🇳504Honduras44\nHR🇭🇷385Croatia\nHT🇭🇹509Haiti\nHU🇭🇺36Hungary234\nID🇮🇩62Indonesia\nIN🇮🇳91India55\nIO🇩🇬246Diego Garcia34\nIE🇮🇪353Ireland234\nIR🇮🇷98Iran334\nIQ🇮🇶964Iraq334\nIS🇮🇸354Iceland34\nIL🇮🇱972Israel234\nIT🇮🇹39Italy334\nJM🇯🇲1876Jamaica34\nJO🇯🇴962Jordan144\nJP🇯🇵81Japan244\nKZ🇰🇿7Kazakhstan3322\nKE🇰🇪254Kenya333\nKG🇰🇬996Kyrgyzstan\nKH🇰🇭855Cambodia\nKI🇰🇮686Kiribati\nKN🇰🇳1869Saint Kitts and Nevis34\nKR🇰🇷82South Korea\nKW🇰🇼965Kuwait44\nKY🇰🇾1345Cayman Islands34\nLA🇱🇦856Laos\nLB🇱🇧961Lebanon\nLR🇱🇷231Liberia\nLY🇱🇾218Libya234\nLC🇱🇨1758Saint Lucia34\nLI🇱🇮423Liechtenstein\nLK🇱🇰94Sri Lanka234\nLS🇱🇸266Lesotho233\nLT🇱🇹370Lithuania35\nLU🇱🇺352Luxembourg\nLV🇱🇻371Latvia35\nMA🇲🇦212Morocco234\nMC🇲🇨377Monaco44\nMD🇲🇩373Moldova233\nMG🇲🇬261Madagascar2232\nMP🇲🇵1670Northern Mariana Islands34\nMO🇲🇴853Macau\nMS🇲🇸1664Montserrat34\nMV🇲🇻960Maldives\nMX🇲🇽52Mexico\nMH🇲🇭692Marshall Islands\nMK🇲🇰389Macedonia\nML🇲🇱223Mali44\nMT🇲🇹356Malta2222\nMM🇲🇲95Myanmar\nME🇲🇪382Montenegro\nMN🇲🇳976Mongolia\nMZ🇲🇿258Mozambique234\nMQ🇲🇶596Martinique\nMR🇲🇷222Mauritania44\nMU🇲🇺230Mauritius\nMW🇲🇼265Malawi\nMY🇲🇾60Malaysia\nNA🇳🇦264Namibia234\nNC🇳🇨687New Caledonia6\nNE🇳🇪227Niger2222\nNF🇳🇫672Norfolk Island\nNG🇳🇬234Nigeria\nNI🇳🇮505Nicaragua44\nNL🇳🇱31Netherlands12222\nNO🇳🇴47Norway44\nNP🇳🇵977Nepal\nNU🇳🇺683Niue\nNR🇳🇷674Nauru\nNZ🇳🇿64New Zealand\nOM🇴🇲968Oman44\nPK🇵🇰92Pakistan334\nPA🇵🇦507Panama44\nPE🇵🇪51Peru333\nPF🇵🇫689French Polynesia\nPH🇵🇭63Philippines334\nPM🇵🇲508Saint Pierre and Miquelon\nPR🇵🇷1Puerto Rico334\nPS🇵🇸970Palestine324\nPW🇵🇼680Palau\nPG🇵🇬675Papua New Guinea\nPL🇵🇱48Poland333\nKP🇰🇵850North Korea\nPT🇵🇹351Portugal144\nPY🇵🇾595Paraguay333\nQA🇶🇦974Qatar\nRE🇷🇪262Réunion333\nRO🇷🇴40Romania333\nRU🇷🇺7Russia3322\nRW🇷🇼250Rwanda333\nSA🇸🇦966Saudi Arabia\nSD🇸🇩249Sudan234\nSN🇸🇳221Senegal234\nSG🇸🇬65Singapore44\nSH🇸🇭290Saint Helena23\nSH🇸🇭247Saint Helena4\nSB🇸🇧677Solomon Islands\nSL🇸🇱232Sierra Leone233\nSV🇸🇻503El Salvador44\nSM🇸🇲378San Marino334\nSO🇸🇴252Somalia233\nRS🇷🇸381Serbia234\nSS🇸🇸211South Sudan234\nST🇸🇹239São Tomé and Príncipe25\nSR🇸🇷597Suriname34\nSK🇸🇰421Slovakia\nSI🇸🇮386Slovenia\nSE🇸🇪46Sweden234\nSZ🇸🇿268Swaziland44\nSC🇸🇨248Seychelles1222\nSX🇸🇽1721Sint Maarten34\nSY🇸🇾963Syria\nTC🇹🇨1649Turks and Caicos Islands34\nTD🇹🇩235Chad2222\nTG🇹🇬228Togo233\nTH🇹🇭66Thailand144\nTJ🇹🇯992Tajikistan\nTK🇹🇰690Tokelau\nTM🇹🇲993Turkmenistan26\nTL🇹🇱670Timor-Leste\nTO🇹🇴676Tonga\nTT🇹🇹1868Trinidad and Tobago34\nTN🇹🇳216Tunisia233\nTR🇹🇷90Turkey334\nTV🇹🇻688Tuvalu\nTW🇹🇼886Taiwan\nTZ🇹🇿255Tanzania234\nUG🇺🇬256Uganda234\nUA🇺🇦380Ukraine2322\nUY🇺🇾598Uruguay44\nUS🇺🇸1United States334\nUZ🇺🇿998Uzbekistan27\nVA🇻🇦3Vatican City\nVC🇻🇨1784Saint Vincent and the Grenadines34\nVE🇻🇪58Venezuela334\nVG🇻🇬1284British Virgin Islands34\nVI🇻🇮1340US Virgin Islands34\nVN🇻🇳84Vietnam\nVU🇻🇺678Vanuatu\nWF🇼🇫681Wallis and Futuna\nWS🇼🇸685Samoa\nXK🇽🇰383Kosovo44\nYE🇾🇪967Yemen333\nZA🇿🇦27South Africa234\nZM🇿🇲260Zambia234\nZW🇿🇼263Zimbabwe234".split("\n").map((e=>({id:e.substr(0,2),flag:e.substr(2,4),code:`+${e.match(/\d+/)[0]}`,name:e.split(/\d+/)[1],phoneFormat:function(e){if(!e)return to;const t=e[0];let n;if(!eo[t]){const e=t.split("").map(Number);n=e.reduce(((e,t,n)=>`${e}(\\d{1,${t}})${n>0?"?":""}`),""),eo[t]=new RegExp(`${n}${"()?".repeat(5-e.length)}`)}return eo[t]}(e.match(/\d+$/))}))),ao={streetLine1:"",streetLine2:"",city:"",state:"",countryIso2:"",postCode:"",fullName:"",email:"",phone:"",shipping:"",cardNumber:"",cardholder:"",expiry:"",cvv:"",billingCountry:"",billingZip:"",saveInfo:!0,saveCredentials:!1,formErrors:{}},so=(e,t)=>{switch(t.type){case"changeAddress1":return{...e,streetLine1:t.payload,formErrors:{...e.formErrors,streetLine1:void 0}};case"changeAddress2":return{...e,streetLine2:t.payload,formErrors:{...e.formErrors,streetLine2:void 0}};case"changeCity":return{...e,city:t.payload,formErrors:{...e.formErrors,city:void 0}};case"changeState":return{...e,state:t.payload,formErrors:{...e.formErrors,state:void 0}};case"changeCountry":return{...e,countryIso2:t.payload,billingCountry:ro(t.payload),formErrors:{...e.formErrors,countryIso2:void 0}};case"changePostCode":return{...e,postCode:t.payload,formErrors:{...e.formErrors,postCode:void 0}};case"changeFullName":return{...e,fullName:t.payload,formErrors:{...e.formErrors,fullName:void 0}};case"changeEmail":return{...e,email:t.payload,formErrors:{...e.formErrors,email:void 0}};case"changePhone":return{...e,phone:t.payload,formErrors:{...e.formErrors,phone:void 0}};case"changeShipping":return{...e,shipping:t.payload};case"changeCardNumber":return{...e,cardNumber:t.payload,formErrors:{...e.formErrors,cardNumber:void 0}};case"changeCardholder":return{...e,cardholder:t.payload,formErrors:{...e.formErrors,cardholder:void 0}};case"changeExpiryDate":return{...e,expiry:t.payload,formErrors:{...e.formErrors,expiry:void 0}};case"changeCvvCode":return{...e,cvv:t.payload,formErrors:{...e.formErrors,cvv:void 0}};case"changeBillingCountry":return{...e,billingCountry:t.payload,formErrors:{...e.formErrors,billingCountry:void 0}};case"changeBillingZip":return{...e,billingZip:t.payload,formErrors:{...e.formErrors,billingZip:void 0}};case"changeSaveInfo":return{...e,saveInfo:t.payload};case"changeSaveCredentials":return{...e,saveCredentials:t.payload};case"updateUserInfo":return t.payload.countryIso2?{...e,...t.payload,billingCountry:ro(t.payload.countryIso2)}:{...e,...t.payload};case"setFormErrors":return{...e,formErrors:{...e.formErrors,...t.payload}};default:return e}};function ro(e){const t=no.find((t=>{let{id:n}=t;return n===e}));return t?t.name:""}function lo(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:400;(0,a.d4)((()=>{i.$b||setTimeout((()=>{(0,z.T2)((()=>{e.current&&e.current.focus()}))}),t)}),[e,t])}const oo=(0,a.X$)((e=>{const{id:t,value:n,label:s,hasArrow:r,error:l,ref:o,placeholder:i,onChange:c,children:d}=e,m=l||s,u=(0,Y.Z)("input-group",n&&"touched",l&&"error",m&&"with-label",r&&"with-arrow","input-group");return a.ZP.createElement("div",{className:u},a.ZP.createElement("select",{className:"form-control",id:t,value:n||"",onChange:c,placeholder:i||s,ref:o},d),m&&t&&a.ZP.createElement("label",{htmlFor:t},m))})),io=(0,a.X$)((e=>{let{state:t,needEmail:n,needPhone:s,needName:r,needAddress:l,dispatch:o}=e;const i=(0,a.sO)(null),c=(0,a.sO)(null),d=(0,a.sO)(null);(0,a.d4)((()=>{d.current&&d.current.value!==t.countryIso2&&(d.current.value=t.countryIso2)}),[t.countryIso2]);const m=(0,g.Z)();lo(i);const u=(0,a.I4)((e=>{o({type:"changeAddress1",payload:e.target.value})}),[o]),h=(0,a.I4)((e=>{o({type:"changeAddress2",payload:e.target.value})}),[o]),Z=(0,a.I4)((e=>{o({type:"changeCity",payload:e.target.value})}),[o]),v=(0,a.I4)((e=>{o({type:"changeState",payload:e.target.value})}),[o]),P=(0,a.I4)((e=>{o({type:"changeCountry",payload:e.target.value})}),[o]),p=(0,a.I4)((e=>{o({type:"changePostCode",payload:e.target.value})}),[o]),E=(0,a.I4)((e=>{o({type:"changeFullName",payload:e.target.value})}),[o]),C=(0,a.I4)((e=>{o({type:"changeEmail",payload:e.target.value})}),[o]),f=(0,a.I4)((e=>{let{value:t}=e.target;t=`+${t.replace(/\D/g,"")}`,c.current&&(c.current.value=t),o({type:"changePhone",payload:t})}),[o]),b=(0,a.I4)((e=>{o({type:"changeSaveInfo",payload:e.target.value})}),[o]),{formErrors:I}=t;return a.ZP.createElement("div",{className:"ShippingInfo"},a.ZP.createElement("form",null,l?a.ZP.createElement("div",null,a.ZP.createElement("h5",null,m("PaymentShippingAddress")),a.ZP.createElement(Ue.Z,{ref:i,label:m("PaymentShippingAddress1Placeholder"),onChange:u,value:t.streetLine1,inputMode:"text",error:I.streetLine1}),a.ZP.createElement(Ue.Z,{label:m("PaymentShippingAddress2Placeholder"),onChange:h,value:t.streetLine2,inputMode:"text",error:I.streetLine2}),a.ZP.createElement(Ue.Z,{label:m("PaymentShippingCityPlaceholder"),onChange:Z,value:t.city,inputMode:"text",error:I.city}),a.ZP.createElement(Ue.Z,{label:m("PaymentShippingStatePlaceholder"),onChange:v,value:t.state,inputMode:"text",error:I.state}),a.ZP.createElement(oo,{label:m("PaymentShippingCountry"),placeholder:m("PaymentShippingCountry"),onChange:P,value:t.countryIso2,hasArrow:Boolean(!0),id:"shipping-country",error:I.countryIso2,ref:d},no.map((e=>{let{name:t,id:n}=e;return a.ZP.createElement("option",{value:n,className:"county-item"},t)}))),a.ZP.createElement(Ue.Z,{label:m("PaymentShippingZipPlaceholder"),onChange:p,value:t.postCode,inputMode:"text",error:I.postCode})):void 0,r||n||s?a.ZP.createElement("h5",null,m("PaymentShippingReceiver")):void 0,r&&a.ZP.createElement(Ue.Z,{label:m("PaymentShippingName"),onChange:E,value:t.fullName,inputMode:"text",error:I.fullName}),n&&a.ZP.createElement(Ue.Z,{label:m("PaymentShippingEmailPlaceholder"),onChange:C,value:t.email,inputMode:"email",error:I.email}),s&&a.ZP.createElement(Ue.Z,{label:m("PaymentShippingPhoneNumber"),onChange:f,value:t.phone,inputMode:"tel",error:I.phone,ref:c}),a.ZP.createElement(ct.Z,{label:m("PaymentShippingSave"),subLabel:m("PaymentShippingSaveInfo"),checked:Boolean(t.saveInfo),onChange:b})))})),co=(0,a.X$)((e=>{let{state:t,shippingOptions:n,currency:s,dispatch:r}=e;const l=(0,g.Z)();(0,a.d4)((()=>{n&&!t.shipping&&r({type:"changeShipping",payload:n[0].id})}),[n,t.shipping,r]);const o=(0,a.I4)((e=>{r({type:"changeShipping",payload:e})}),[r]),i=(0,a.Ye)((()=>n.map((e=>{let{id:t,title:n,amount:a}=e;return{label:n,subLabel:(0,Yl.x)(a,s,l.code),value:t}}))),[n,s,l.code]);return a.ZP.createElement("div",{className:"Shipping"},a.ZP.createElement("form",null,a.ZP.createElement("p",null,l("PaymentShippingMethod")),a.ZP.createElement(gt.Z,{name:"shipping-options",options:i,onChange:o,selected:t.shipping})))}));function mo(e,t,n,s){let r=arguments.length>4&&void 0!==arguments[4]&&arguments[4];return a.ZP.createElement("div",{className:"price-info-item "+(r?"price-info-item-main":"")},a.ZP.createElement("div",{className:"title"},t),a.ZP.createElement("div",{className:"value"},(0,Yl.x)(n,s,e)))}function uo(e,t,n){return a.ZP.createElement("div",{className:"checkout-info-item"},a.ZP.createElement("i",{className:e}," "),a.ZP.createElement("div",{className:"info"},a.ZP.createElement("div",{className:"title"},t),a.ZP.createElement("p",{className:"data"},n)))}const ho=(0,a.X$)((e=>{let{invoiceContent:t,prices:n,shippingPrices:s,checkoutInfo:r,currency:l,totalPrice:o}=e;const i=(0,g.Z)(),{photoUrl:c,title:d,text:m}=t||{},{paymentMethod:u,paymentProvider:h,shippingAddress:Z,name:v,phone:P,shippingMethod:p}=r||{};return a.ZP.createElement("div",{className:"Checkout"},a.ZP.createElement("div",{className:"description has-image"},c&&a.ZP.createElement("img",{src:c,alt:""}),a.ZP.createElement("div",{className:"text"},a.ZP.createElement("h5",null,d),a.ZP.createElement("p",null,m))),a.ZP.createElement("div",{className:"price-info"},n&&n.map((e=>mo(i.code,e.label,e.amount,l))),s&&s.map((e=>mo(i.code,e.label,e.amount,l))),void 0!==o&&mo(i.code,i("Checkout.TotalAmount"),o,l,!0)),a.ZP.createElement("div",{className:"invoice-info"},u&&uo("icon-card",u,i("PaymentCheckoutMethod")),h&&uo((0,Y.Z)("provider",h.toLowerCase()),h,i("PaymentCheckoutProvider")),Z&&uo("icon-location",Z,i("PaymentShippingAddress")),v&&uo("icon-user",v,i("PaymentCheckoutName")),P&&uo("icon-phone",P,i("PaymentCheckoutPhoneNumber")),p&&uo("icon-truck",p,i("PaymentCheckoutShippingMethod"))))})),Zo=(0,a.X$)((e=>{let{value:t,error:n,onChange:s}=e;const r=(0,g.Z)(),l=(0,a.sO)(null),o=(0,a.I4)((e=>{if("Backspace"===e.key&&"/"===t.charAt(t.length-1)){const e=t.slice(0,t.length-1);l.current&&(l.current.value=e)}}),[t]),i=(0,a.I4)((e=>{s(function(e){const t=(e=e.replace(/[^\d]/g,"").slice(0,4)).match(/.{1,2}/g);return null!=t&&t[0]&&Number(t[0])>12&&(t[0]="12"),null!=t&&t[0]&&2===t[0].length&&!t[1]&&(t[1]=""),t?t.join("/"):""}(e.target.value))}),[s]);return a.ZP.createElement(Ue.Z,{label:r("PaymentCardExpireDate"),ref:l,onChange:i,onKeyDown:o,value:t,error:n,inputMode:"numeric",maxLength:5})}));var vo=n(6352),Po=n(5753);const go=(0,a.X$)((e=>{let{value:t,error:n,onChange:s}=e;const r=(0,g.Z)(),l=(0,a.sO)(null);lo(l);const[o,i]=(0,a.eJ)(Kl.Default);(0,a.d4)((()=>{const e=Ql(t);i(e)}),[]);const c=(0,a.I4)((e=>{const t=function(e){const t=(e=e.replace(/[^\d]/g,"")).match(/.{1,4}/g);return t?t.join(" "):""}(e.target.value),n=Ql(e.target.value);i(n),s(t),l.current&&(l.current.value=t)}),[s,l]),d=function(e){switch(e){case Kl.Mastercard:return a.ZP.createElement("img",{src:vo,alt:""});case Kl.Visa:return a.ZP.createElement("img",{src:Po,alt:""});default:return}}(o);return a.ZP.createElement("div",{className:"CardInput"},a.ZP.createElement("span",{className:"left-addon"},d),a.ZP.createElement(Ue.Z,{ref:l,label:r("PaymentCardNumber"),onChange:c,value:t,inputMode:"numeric",className:o?"has-left-addon":"",error:n,maxLength:23}))})),po=(0,a.X$)((e=>{let{state:t,canSaveCredentials:n,needCardholderName:s,needCountry:r,needZip:l,dispatch:o}=e;const i=(0,a.sO)(null);(0,a.d4)((()=>{i.current&&i.current.value!==t.billingCountry&&(i.current.value=t.billingCountry)}),[t.billingCountry]);const c=(0,a.I4)((e=>{o({type:"changeCardNumber",payload:e})}),[o]),d=(0,a.I4)((e=>{o({type:"changeCardholder",payload:e.target.value.toUpperCase()})}),[o]),m=(0,a.I4)((e=>{o({type:"changeExpiryDate",payload:e})}),[o]),u=(0,a.I4)((e=>{o({type:"changeCvvCode",payload:e.target.value})}),[o]),h=(0,a.I4)((e=>{o({type:"changeBillingCountry",payload:e.target.value})}),[o]),Z=(0,a.I4)((e=>{o({type:"changeBillingZip",payload:e.target.value})}),[o]),v=(0,a.I4)((e=>{o({type:"changeSaveCredentials",payload:e.target.value})}),[o]),P=(0,g.Z)(),{formErrors:p={}}=t;return a.ZP.createElement("div",{className:"PaymentInfo"},a.ZP.createElement("form",null,a.ZP.createElement("h5",null,P("PaymentCardTitle")),a.ZP.createElement(go,{onChange:c,value:t.cardNumber,error:p.cardNumber}),s&&a.ZP.createElement(Ue.Z,{label:P("PaymentCardName"),onChange:d,value:t.cardholder,inputMode:"text",error:p.cardholder}),a.ZP.createElement("section",{className:"inline-inputs"},a.ZP.createElement(Zo,{value:t.expiry,onChange:m,error:p.expiry}),a.ZP.createElement(Ue.Z,{label:P("lng_payments_card_cvc"),onChange:u,value:t.cvv,inputMode:"numeric",maxLength:3,error:p.cvv})),r||l?a.ZP.createElement("h5",null,P("PaymentBillingAddress")):void 0,r&&a.ZP.createElement(oo,{label:P("PaymentShippingCountry"),placeholder:P("PaymentShippingCountry"),onChange:h,value:t.billingCountry,hasArrow:Boolean(!0),id:"billing-country",error:p.billingCountry,ref:i},no.map((e=>{let{name:t}=e;return a.ZP.createElement("option",{value:t,className:"county-item"},t)}))),l&&a.ZP.createElement(Ue.Z,{label:P("PaymentShippingZipPlaceholder"),onChange:Z,value:t.billingZip,inputMode:"text",error:p.billingZip}),n&&a.ZP.createElement(ct.Z,{label:P("PaymentCardSavePaymentInformation"),checked:t.saveCredentials,onChange:v})))})),Eo=(0,a.X$)((e=>{let{url:t}=e;const n=(0,g.Z)();return a.ZP.createElement("div",{className:"ConfirmPayment"},a.ZP.createElement("iframe",{src:t,title:n("Checkout.WebConfirmation.Title"),allow:"payment",sandbox:"allow-forms allow-scripts allow-same-origin allow-top-navigation",className:"ConfirmPayment__content"}))})),Co=new Set(["stripe","smartglocal"]),fo=(0,a.X$)((0,s.c$)((e=>{const{step:t,shippingOptions:n,savedInfo:a,canSaveCredentials:s,invoice:r,invoiceContent:l,nativeProvider:o,nativeParams:i,passwordMissing:c,error:d,confirmPaymentUrl:m}=e.payment,u=Boolean(r&&(!o||!Co.has(o))),{needCardholderName:h,needCountry:Z,needZip:v}=i||{},{nameRequested:P,phoneRequested:g,emailRequested:p,shippingAddressRequested:E,flexible:C,phoneToProvider:f,emailToProvider:b,currency:I,prices:y}=r||{};return{step:t,shippingOptions:n,savedInfo:a,canSaveCredentials:s,nativeProvider:o,passwordMissing:c,nameRequested:P,shippingAddressRequested:E,phoneRequested:g,emailRequested:p,flexible:C,phoneToProvider:f,emailToProvider:b,currency:I,prices:y,isProviderError:u,invoiceContent:l,needCardholderName:h,needCountry:Z,needZip:v,error:d,confirmPaymentUrl:m}}))((e=>{let{isOpen:t,onClose:n,step:r,shippingOptions:o,savedInfo:i,canSaveCredentials:c,nameRequested:d,shippingAddressRequested:m,phoneRequested:u,emailRequested:h,phoneToProvider:Z,emailToProvider:v,currency:P,passwordMissing:p,isProviderError:E,invoiceContent:C,nativeProvider:f,prices:b,needCardholderName:I,needCountry:y,needZip:S,confirmPaymentUrl:N,error:k}=e;const{validateRequestedInfo:w,sendPaymentForm:M,setPaymentStep:T,sendCredentialsInfo:R,clearPaymentError:A}=(0,s.Sv)(),[L,F]=(0,gn.Z)(so,ao),[x,D]=(0,a.eJ)(!1),O=(0,g.Z)(),U=r!==l.KB.ConfirmPayment;(0,a.d4)((()=>{(r||k)&&D(!1)}),[r,k]),(0,a.d4)((()=>{null!=k&&k.field&&F({type:"setFormErrors",payload:{[k.field]:k.message}})}),[k,F]),(0,a.d4)((()=>{if(i){const{name:e,phone:t,email:n,shippingAddress:a}=i;F({type:"updateUserInfo",payload:{fullName:e,phone:t&&"+"!==t.charAt(0)?`+${t}`:t,email:n,...a||{}}})}}),[i,F]);const G=(0,a.I4)((()=>{A()}),[A]),_=(0,a.Ye)((()=>r!==l.KB.Checkout?0:function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[],t=arguments.length>1?arguments[1]:void 0,n=arguments.length>2?arguments[2]:void 0;const a=t?Io(t,n):[];let s=0;const r=e.concat(a||[]);return s=r.reduce(((e,t)=>e+t.amount),s),s}(b,o,L.shipping)),[r,L.shipping,b,o]),J=(0,a.Ye)((()=>{if(r===l.KB.Checkout)return function(e,t,n){const a=`${function(e){const t=Ql(e);return Wl[t]||""}(e.cardNumber)} *${e.cardNumber.slice(-4)}`,s=e.streetLine1?`${e.streetLine1}, ${e.city}, ${e.countryIso2}`:void 0,{phone:r,fullName:l}=e,o=t?bo(t,e.shipping):void 0;return{paymentMethod:a,paymentProvider:n,shippingAddress:s,name:l,phone:r,shippingMethod:null==o?void 0:o.title}}(L,o,f||"")}),[r,L,o,f]),X=(0,a.I4)((()=>{const{saveInfo:e}=L,t=function(e){const{streetLine1:t,streetLine2:n,city:a,state:s,countryIso2:r,postCode:l,fullName:o,phone:i,email:c}=e;return{name:o,phone:i,email:c,shippingAddress:{streetLine1:t,streetLine2:n,city:a,state:s,countryIso2:r,postCode:l}}}(L);w({requestInfo:t,saveInfo:e})}),[w,L]),z=(0,a.I4)((()=>{const e=function(e){const{cardNumber:t,cardholder:n,expiry:a,cvv:s,billingCountry:r,billingZip:l}=e,[o,i]=a.split("/");return{data:{cardNumber:t,cardholder:n,expiryMonth:o,expiryYear:i,cvv:s,country:r,zip:l}}}(L);R({credentials:e})}),[R,L]),Y=(0,a.I4)((()=>{M({shippingOptionId:L.shipping,saveCredentials:L.saveCredentials})}),[M,L]),H=(0,a.I4)((e=>{T({step:e})}),[T]),j=(0,a.I4)((()=>{switch(D(!0),r){case l.KB.ShippingInfo:return X();case l.KB.Shipping:return H(l.KB.PaymentInfo);case l.KB.PaymentInfo:return z();case l.KB.Checkout:return Y();default:return()=>{}}}),[r,X,H,z,Y]),q=(0,a.Ye)((()=>{switch(r){case l.KB.ShippingInfo:return O("PaymentShippingInfo");case l.KB.Shipping:return O("PaymentShippingMethod");case l.KB.PaymentInfo:return O("PaymentCardInfo");case l.KB.Checkout:return O("PaymentCheckout");case l.KB.ConfirmPayment:return O("Checkout.WebConfirmation.Title");default:return""}}),[r,O]),K=(0,a.Ye)((()=>r===l.KB.Checkout?O("Checkout.PayPrice",(0,Yl.x)(_,P,O.code)):O("Next")),[r,O,P,_]);return E?a.ZP.createElement(Oe.Z,{className:"error",isOpen:t,onClose:n},a.ZP.createElement("p",null,"Sorry, Telegram WebZ doesn't support payments with this provider yet. ",a.ZP.createElement("br",null),"Please use one of our mobile apps to do this."),a.ZP.createElement(B.Z,{isText:!0,onClick:n},O("OK"))):a.ZP.createElement(Oe.Z,{className:"PaymentModal",isOpen:t,onClose:n},a.ZP.createElement("div",{className:"header",dir:O.isRtl?"rtl":void 0},a.ZP.createElement(B.Z,{className:"close-button",color:"translucent",round:!0,size:"smaller",onClick:n,ariaLabel:"Close"},a.ZP.createElement("i",{className:"icon-close"})),a.ZP.createElement("h3",null,q)),void 0!==r?a.ZP.createElement($.Z,{name:"slide",activeKey:r},a.ZP.createElement("div",{className:"content custom-scroll"},function(e){switch(e){case l.KB.ShippingInfo:return a.ZP.createElement(io,{state:L,dispatch:F,needAddress:Boolean(m),needEmail:Boolean(h||v),needPhone:Boolean(u||Z),needName:Boolean(d)});case l.KB.Shipping:return a.ZP.createElement(co,{state:L,dispatch:F,shippingOptions:o||[],currency:P});case l.KB.PaymentInfo:return a.ZP.createElement(po,{state:L,dispatch:F,canSaveCredentials:Boolean(!p&&c),needCardholderName:I,needCountry:y,needZip:S});case l.KB.Checkout:return a.ZP.createElement(ho,{prices:b,shippingPrices:L.shipping&&o?Io(o,L.shipping):void 0,totalPrice:_,invoiceContent:C,checkoutInfo:J,currency:P});case l.KB.ConfirmPayment:return a.ZP.createElement(Eo,{url:N});default:return}}(r))):a.ZP.createElement("div",{className:"empty-content"},a.ZP.createElement(V.Z,{color:"gray"})),U&&a.ZP.createElement("div",{className:"footer"},a.ZP.createElement(B.Z,{type:"submit",onClick:j,disabled:x,isLoading:x},K)),k&&!k.field&&function(){if(k)return a.ZP.createElement(Oe.Z,{className:"error",isOpen:Boolean(k),onClose:G},a.ZP.createElement("h4",null,k.description||"Error"),a.ZP.createElement("p",null,k.description||"Error"),a.ZP.createElement(B.Z,{isText:!0,onClick:A},O("OK")))}())})));function bo(e,t){return e.find((e=>{let{id:n}=e;return n===t}))}function Io(e,t){const n=bo(e,t);return null==n?void 0:n.prices}const yo=(0,a.X$)((0,s.c$)((e=>{const{receipt:t}=e.payment,{currency:n,prices:a,info:s,totalAmount:r,credentialsTitle:l,shippingPrices:o,shippingMethod:i,photoUrl:c,text:d,title:m}=t||{};return{currency:n,prices:a,info:s,totalAmount:r,credentialsTitle:l,shippingPrices:o,shippingMethod:i,photoUrl:c,text:d,title:m}}))((e=>{let{isOpen:t,onClose:n,prices:s,shippingPrices:r,totalAmount:l,currency:o,info:i,photoUrl:c,text:d,title:m,credentialsTitle:u,shippingMethod:h}=e;const Z=(0,g.Z)(),v=(0,a.Ye)((()=>function(e,t,n){if(!t)return{paymentMethod:e};const{shippingAddress:a}=t,s=null!=a&&a.streetLine1?`${a.streetLine1}, ${a.city}, ${a.countryIso2}`:void 0,{phone:r,name:l}=t;return{paymentMethod:e,paymentProvider:"Stripe",shippingAddress:s,name:l,phone:r,shippingMethod:n}}(u,i,h)),[i,h,u]);return a.ZP.createElement(Oe.Z,{className:"PaymentModal PaymentModal-receipt",isOpen:t,onClose:n},a.ZP.createElement("div",null,a.ZP.createElement("div",{className:"header",dir:Z.isRtl?"rtl":void 0},a.ZP.createElement(B.Z,{className:"close-button",color:"translucent",round:!0,size:"smaller",onClick:n,ariaLabel:"Close"},a.ZP.createElement("i",{className:"icon-close"})),a.ZP.createElement("h3",null," ",Z("PaymentReceipt")," ")),a.ZP.createElement("div",{className:"receipt-content custom-scroll"},a.ZP.createElement(ho,{prices:s,shippingPrices:r,totalPrice:l,invoiceContent:{photoUrl:c,text:d,title:m},checkoutInfo:v,currency:o}))))})))},9364:(e,t,n)=>{n.d(t,{Z:()=>d});var a=n(4050),s=n(3716),r=n(7361),l=n(6752),o=n(9107),i=n(231);const c=r.wB?550:400,d=(0,a.X$)((e=>{let{isLoading:t=!1,isPasswordVisible:n,error:d,hint:m,placeholder:u="Password",submitLabel:h="Next",clearError:Z,onChangePasswordVisibility:v,onInputChange:P,onSubmit:g}=e;const p=(0,a.sO)(null),E=(0,o.Z)(),[C,f]=(0,a.eJ)(""),[b,I]=(0,a.eJ)(!1);return(0,a.d4)((()=>{r.$b||setTimeout((()=>{p.current.focus()}),c)}),[]),(0,a.d4)((()=>{d&&requestAnimationFrame((()=>{p.current.focus(),p.current.select()}))}),[d]),a.ZP.createElement("form",{action:"",onSubmit:function(e){e.preventDefault(),t||b&&g(C)},autoComplete:"off"},a.ZP.createElement("div",{className:(0,l.Z)("input-group password-input",C&&"touched",d&&"error"),dir:E.isRtl?"rtl":void 0},a.ZP.createElement("input",{ref:p,className:"form-control",type:n?"text":"password",id:"sign-in-password",value:C||"",autoComplete:"current-password",onChange:function(e){d&&Z();const{target:t}=e;f(t.value),I(t.value.length>=s.lo),P&&P(t.value)},dir:"auto"}),a.ZP.createElement("label",null,d||m||u),a.ZP.createElement("div",{className:"toggle-password",onClick:function(){v(!n)},role:"button",tabIndex:0,title:"Toggle password visibility"},a.ZP.createElement("i",{className:n?"icon-eye":"icon-eye-closed"}))),b&&a.ZP.createElement(i.Z,{type:"submit",ripple:!0,isLoading:t},h))}))},3490:(e,t,n)=>{n.d(t,{Z:()=>u});var a=n(4050),s=n(3716),r=n(7361),l=n(7324),o=n(7799);const i=[0,50],c=[0,20],d=[20,0],m=r.wB?s.qp:s.z7,u=(0,a.X$)((e=>{let{isPasswordVisible:t,isBig:n}=e;const[r,u]=(0,a.eJ)(),[h,Z]=(0,a.eJ)(),[v,P]=(0,a.eJ)(!1),[g,p]=(0,a.eJ)(!1);(0,a.d4)((()=>{r?setTimeout((()=>p(!0)),2e3):(0,l.Z)("MonkeyClose").then(u)}),[r]),(0,a.d4)((()=>{h||(0,l.Z)("MonkeyPeek").then(Z)}),[h]);const E=(0,a.I4)((()=>P(!0)),[]);return a.ZP.createElement("div",{id:"monkey",className:n?"big":""},!v&&a.ZP.createElement("div",{className:"monkey-preview"}),r&&a.ZP.createElement(o.Z,{id:"closeMonkey",size:n?s.K2:m,className:g?"hidden":"shown",animationData:r,playSegment:i,noLoop:!0,onLoad:E}),h&&a.ZP.createElement(o.Z,{id:"peekMonkey",size:n?s.K2:m,className:g?"shown":"hidden",animationData:h,playSegment:t?c:d,noLoop:!0}))}))},710:(e,t,n)=>{n.d(t,{Z:()=>P});var a=n(4050),s=n(6752),r=n(3716),l=n(1394),o=n(9107),i=n(231),c=n(3103),d=n(4288);const m={type:"blob",quality:1,format:"jpeg",circle:!1,size:{width:1024,height:1024}};let u,h,Z;const v=(0,a.X$)((e=>{let{file:t,onChange:s,onClose:v}=e;const[P,g]=(0,a.eJ)(!1);(0,a.d4)((()=>{t&&(P?async function(e){try{const t=document.getElementById("avatar-crop");if(!t)return;const{offsetWidth:n,offsetHeight:a}=t;Z=new u(t,{enableZoom:!0,boundary:{width:n,height:a},viewport:{width:n-16,height:a-16,type:"circle"}});const s=await(0,l.YJ)(e);await Z.bind({url:s})}catch(e){r.eM&&console.error(e)}}(t):async function(){return h||(h=Promise.all([n.e(99),n.e(472)]).then(n.bind(n,3472)),u=(await h).default),h}().then((()=>g(!0))))}),[t,P]);const p=(0,o.Z)(),E=(0,a.I4)((async()=>{if(!Z)return;const e=await Z.result(m),t="string"==typeof e?e:(0,l.hl)(e,"avatar.jpg");s(t)}),[s]);return a.ZP.createElement(c.Z,{isOpen:Boolean(t),onClose:v,title:"Drag to reposition",className:"CropModal",hasCloseButton:!0},P?a.ZP.createElement("div",{id:"avatar-crop"}):a.ZP.createElement(d.Z,null),a.ZP.createElement(i.Z,{className:"confirm-button",round:!0,color:"primary",onClick:E,ariaLabel:p("CropImage")},a.ZP.createElement("i",{className:"icon-check"})))})),P=(0,a.X$)((e=>{let{title:t="Change your profile picture",disabled:n,currentAvatarBlobUrl:r,onChange:l}=e;const[o,i]=(0,a.eJ)(),[c,d]=(0,a.eJ)(r);(0,a.d4)((()=>{d(r)}),[r]);const m=(0,a.I4)((e=>{i(void 0),l(e),c&&URL.revokeObjectURL(c),d(URL.createObjectURL(e))}),[c,l]),u=(0,a.I4)((()=>{i(void 0)}),[]),h=(0,s.Z)(c&&"filled",n&&"disabled");return a.ZP.createElement("div",{className:"AvatarEditable"},a.ZP.createElement("label",{className:h,role:"button",tabIndex:0,title:t},a.ZP.createElement("input",{type:"file",onChange:function(e){const t=e.target;t&&t.files&&t.files[0]&&(i(t.files[0]),t.value="")},accept:"image/png, image/jpeg"}),a.ZP.createElement("i",{className:"icon-camera-add"}),c&&a.ZP.createElement("img",{src:c,alt:"Avatar"})),a.ZP.createElement(v,{file:o,onClose:u,onChange:m}))}))},6352:(e,t,n)=>{e.exports=n.p+"mastercard.4216118edafe23cc2dec..svg"},5753:(e,t,n)=>{e.exports=n.p+"visa.e5a7c336e1deb4b92a63..svg"}}]); +//# sourceMappingURL=382.f977b0f032aa1cd3a3ee.js.map \ No newline at end of file diff --git a/dist/382.f977b0f032aa1cd3a3ee.js.map b/dist/382.f977b0f032aa1cd3a3ee.js.map new file mode 100644 index 000000000..e9f45b9d6 --- /dev/null +++ b/dist/382.f977b0f032aa1cd3a3ee.js.map @@ -0,0 +1 @@ +{"version":3,"file":"382.f977b0f032aa1cd3a3ee.js","mappings":"6tCAMA,MAIMA,EAAQ,IAAIC,ICAH,SAASC,EAAYC,GAClC,MAAMC,GAAaC,EAAAA,EAAAA,MAEnB,IAAIC,GAAY,GAEhBC,EAAAA,EAAAA,IAAY,KAKV,GAJAD,GAAY,EAEZF,EAAWI,aAAUC,GAEhBN,EACH,OAGF,MAAMO,EAAM,IAAIC,MAEhB,GADAD,EAAIE,IAAMT,GACLO,EAAIG,MACP,OAGF,MAAMC,GAASC,EAAAA,EAAAA,IAAYL,IAC3BM,EAAAA,EAAAA,GAASF,EAAOG,WAAW,MAAO,EAAG,EAAGH,EAAOD,MAAOC,EAAOI,OAxBlD,EACI,GAyBfd,EAAWI,QAAUM,EAAOK,cAC3B,CAAChB,IAIJ,MAAMiB,ED1BO,SAAiBjB,GAAsD,IAApCkB,EAAoC,wDAAhBC,EAAgB,uCACpF,MAAMlB,GAAaC,EAAAA,EAAAA,IAA2BF,EAAUH,EAAMuB,IAAIpB,QAAWM,GACvEe,GAAanB,EAAAA,EAAAA,MACboB,GAAcC,EAAAA,EAAAA,KAqCpB,OAnCIF,EAAWhB,SAAWa,IACxBM,aAAaH,EAAWhB,SACxBgB,EAAWhB,aAAUC,IAGvBmB,EAAAA,EAAAA,KAAU,KACR,IAAKzB,GAAWC,EAAWI,SAAWa,EACpC,OAGF,MAAMX,EAAM,IAAIC,MAEhBD,EAAImB,OAAS,KACX,MAAMf,GAASC,EAAAA,EAAAA,IAAYL,IAC3BM,EAAAA,EAAAA,GAASF,EAAOG,WAAW,MAAO,EAAG,EAAGH,EAAOD,MAAOC,EAAOI,OAzBpD,EACI,GAyBb,MAAMY,EAAiBhB,EAAOK,YAE9Bf,EAAWI,QAAUsB,EACrBL,IAEIzB,EAAM+B,MA7BO,KA8Bf/B,EAAMgC,QAERhC,EAAMiC,IAAI9B,EAAS2B,IAGjBR,EACFE,EAAWhB,QAAU0B,OAAOC,YAAW,KACrCzB,EAAIE,IAAMT,IACTmB,GAEHZ,EAAIE,IAAMT,IAEX,CAACA,EAASmB,EAAOG,EAAaJ,IAE1BjB,EAAWI,QCdG4B,CAAQjC,QAAWM,EAAW4B,QAAQjC,EAAWI,UAEtE,OAAOJ,EAAWI,UAAaF,GAAac,GAAiBjB,QAAWM,E,wJCwK1E,SAAS6B,EAAYC,EAAsDC,GACzE,MAAMC,EAAQC,SAASC,cAAc,OACrCF,EAAMG,UAAUC,IAAI,SAEpB,MAAMnC,EAAM,IAAIC,MAchB,GAbAD,EAAIoC,WAAY,EAChBpC,EAAIqC,cAAgBC,EAAAA,EAEE,iBAAXT,EACT7B,EAAIE,IAAM2B,EACDA,aAAkBU,iBAC3BvC,EAAIE,IAAM2B,EAAOW,OAEjBxC,EAAIE,IAAM2B,EAAO3B,IAGnB6B,EAAMU,YAAYzC,GAEd8B,IAAWY,EAAAA,GAAAA,eAAmCZ,IAAWY,EAAAA,GAAAA,eAAkC,CAC7FX,EAAMG,UAAUC,IAAI,eAChBL,IAAWY,EAAAA,GAAAA,gBACbX,EAAMG,UAAUC,IAAI,QAEtB,MAAMQ,EAAcX,SAASY,cAC3Bd,IAAWY,EAAAA,GAAAA,cACP,kCACA,gCAEFC,GACFZ,EAAMU,YAAYE,EAAYE,WAAU,IAI5C,OAAOd,EAoCT,SAASe,EAA2BC,EAAwBC,GAC1D,MAAMC,EAAqBjB,SAASY,cAA8B,6CAClE,IAAIM,EAAeH,EAAUI,UAAYH,EAAQI,QAAwB,4BAA6BD,UAKtG,OAJIJ,EAAUM,GAAGC,SAAS,kBACxBJ,GAAgBH,EAAUQ,cAAeJ,UAAYJ,EAAUK,QAAwB,YAAaD,WAG/FD,EAAeD,EAAmBO,WACpCN,EAAeF,EAAQS,aAAeR,EAAmBO,UAAYP,EAAmBQ,aAa/F,SAASC,EAAYC,EAAsBC,GACzCC,OAAOC,OAAOH,EAAQI,MAAOH,GAG/B,SAASI,EAASlC,EAA2BmC,GAC3C,IAAIC,EACAC,EAEJ,OAAQrC,GACN,KAAKY,EAAAA,GAAAA,MACL,KAAKA,EAAAA,GAAAA,eACHwB,EAAqB,2DAAyDE,EAAAA,EAAAA,IAAiBH,EAASZ,MACxGc,EAAgB,cAChB,MAEF,KAAKzB,EAAAA,GAAAA,YACHwB,EAAqB,iBAAeE,EAAAA,EAAAA,IAAiBH,EAASZ,MAC9Dc,EAAgB,MAChB,MAEF,KAAKzB,EAAAA,GAAAA,aACHwB,EAAqB,iBAAeE,EAAAA,EAAAA,IAAiBH,EAASZ,MAC9Dc,EAAgB,MAChB,MAEF,KAAKzB,EAAAA,GAAAA,mBACHwB,EAAoB,6DACpBC,EAAgB,gBAChB,MAEF,KAAKzB,EAAAA,GAAAA,eACHwB,EAAoB,kEACpBC,EAAgB,gBAChB,MAEF,KAAKzB,EAAAA,GAAAA,cACHwB,EAAoB,qEACpBC,EAAgB,gBAChB,MAEF,KAAKzB,EAAAA,GAAAA,gBACL,KAAKA,EAAAA,GAAAA,OACL,QACEwB,EAAqB,+CAA6CE,EAAAA,EAAAA,IAAiBH,EAASZ,MAC5Fc,EAAgB,4DAGpB,MAAMpB,EAAYf,SAASY,cAA2BsB,GAChDG,EAAWtB,GAAaA,EAAUuB,iBAAsDH,GAE9F,MAAO,CACLpB,UAAAA,EACAwB,QAASF,MAAAA,OAAF,EAAEA,EAAWA,EAASG,OAAS,IAI1C,SAASC,EAAW1C,EAAuBD,GACzC,OAAQA,GACN,KAAKY,EAAAA,GAAAA,MACL,KAAKA,EAAAA,GAAAA,eACL,KAAKA,EAAAA,GAAAA,OACL,KAAKA,EAAAA,GAAAA,gBACHX,EAAMG,UAAUC,IAAI,mBACpB,MAEF,KAAKO,EAAAA,GAAAA,YACL,KAAKA,EAAAA,GAAAA,eACL,KAAKA,EAAAA,GAAAA,cACL,KAAKA,EAAAA,GAAAA,aACFX,EAAM2C,WAA2BX,MAAMY,UAAY,QACpD,MAEF,KAAKjC,EAAAA,GAAAA,mBACHX,EAAMG,UAAUC,IAAI,W,8DC3U1B,MA8JA,GAAeyC,EAAAA,EAAAA,KAAKC,EAAAA,EAAAA,KAClB,CAACC,EAAD,KAAqC,IAA5B,QAAEb,GAA0B,EAInC,MAAO,CACLc,gBAJoBd,IAAUe,EAAAA,EAAAA,IAAoBF,EAAQb,GAK1DgB,aAJkBC,EAAAA,EAAAA,IAAyBJ,EAAQb,MAHrCY,EA9JkC,IAYhD,IAZiD,UACrDM,EADqD,QAErDC,EAFqD,SAGrDC,EAHqD,QAIrDpB,EAJqD,SAKrDqB,EALqD,SAMrDC,EANqD,cAOrDR,EAPqD,YAQrDE,EARqD,mBASrDO,EATqD,UAUrDC,EAVqD,aAWrDC,GACI,EACJ,MAAM,qBACJC,EADI,2BAEJC,IACEC,EAAAA,EAAAA,OAEIC,aAAcC,IAAqBC,EAAAA,EAAAA,GACzC/B,IAAWgC,EAAAA,EAAAA,IAAoBhC,EAAS,aACvCc,GAGGmB,GAAsBC,EAAAA,EAAAA,KAAY,KAClCpB,EACFa,EAA2B,CAAE3B,QAASA,IAEtC0B,EAAqB,CAAE1B,QAASA,MAEjC,CAAC2B,EAA4BD,EAAsBZ,EAAed,IAE/DmC,GAAOC,EAAAA,EAAAA,KAEPC,GAA8DC,EAAAA,EAAAA,KAAQ,IACnE,QAAC,UAAEC,EAAF,OAAaC,GAAd,SACL,mBAACC,EAAA,EAAD,CACEC,OAAK,EACLtF,KAAK,UACLuF,MAAM,cACNC,UAAWJ,EAAS,cAAW1G,EAC/B+G,QAASN,EACTO,UAAU,gBAEV,wBAAGF,UAAU,iBAGhB,IAmCH,GAAIG,EAAAA,GAAyB,CAC3B,GAAI/B,EACF,OAGF,OACE,0BAAK4B,UAAU,6BACb,mBAACI,EAAA,EAAD,CACEC,QAASZ,EACTa,UAAU,UAER5B,GACA,mBAAC6B,EAAA,EAAD,CACEC,KAAK,UACLP,QAASrB,GAERW,EAAK,YAGThB,EACC,mBAACgC,EAAA,EAAD,CACEC,KAAMtC,EAAgB,QAAU,WAChC+B,QAASZ,GAERnB,EAAiB,GAAEuC,KAAKX,MAAyB,IAAnBZ,qBAA4C,YAG7E,mBAACqB,EAAA,EAAD,CACEC,KAAK,WACLE,KAAMpC,EACNqC,SAAUlC,GAETc,EAAK,uBAIXrB,GAAiB,mBAAC0C,EAAA,EAAD,CAAiBC,SAAU3B,EAAkB1E,KAAK,IAAIsG,SAAO,KAKrF,OACE,0BAAKd,UAAU,uBACXtB,IAAaN,GACb,mBAACyB,EAAA,EAAD,CACEC,OAAK,EACLtF,KAAK,UACLuF,MAAM,oBACNG,UAAWX,EAAK,WAChBU,QAASrB,GAET,wBAAGoB,UAAU,kBApFrB,WACE,IAAI5B,EAIJ,OAAOG,EACL,mBAACsB,EAAA,EAAD,CACEC,OAAK,EACLtF,KAAK,UACLuF,MAAM,oBACNG,UAAWX,EAAK,qBAChBU,QAASZ,GAERnB,EACC,mBAAC0C,EAAA,EAAD,CAAiBC,SAAU3B,EAAkB1E,KAAK,IAAIyF,QAASZ,IAE/D,wBAAGW,UAAU,mBAIjB,mBAACH,EAAA,EAAD,CACEa,KAAMpC,EACNqC,SAAUlC,EACVqB,OAAK,EACLtF,KAAK,UACLuF,MAAM,oBACNG,UAAWX,EAAK,sBAEhB,wBAAGS,UAAU,mBA2Dde,GACD,mBAAClB,EAAA,EAAD,CACEC,OAAK,EACLtF,KAAK,UACLuF,MAAM,oBACNG,UAAW1B,EAAW,WAAa,UACnCyB,QAASpB,GAET,wBAAGmB,UAAWxB,EAAW,gBAAkB,kBAE7C,mBAACqB,EAAA,EAAD,CACEC,OAAK,EACLtF,KAAK,UACLuF,MAAM,oBACNG,UAAWX,EAAK,SAChBU,QAAStB,GAET,wBAAGqB,UAAU,qB,+DCtLrB,MAyDA,EAhDwC,IAElC,IAFmC,KACvCgB,EAAO,GADgC,SAC5BC,EAD4B,WAClBC,EADkB,QACNjB,GAC7B,EACJ,MAAOkB,EAAaC,IAAkBC,EAAAA,EAAAA,KAAS,IAC/ChH,EAAAA,EAAAA,KAAU,KACR,MAAMiH,EAAgBnG,SAASY,cAAc,kCAEvCwF,EAAmB,KACvB,MAAM5H,EAAS2H,EAAgBA,EAAcE,aAAe,EAE5DJ,EAAezH,EAAe,EAAN8H,EAAAA,KAI1BF,IAEA,MAAMG,GAAeC,EAAAA,EAAAA,IAASJ,EAzBP,KAyB6C,GAIpE,OAFA5G,OAAOiH,iBAAiB,SAAUF,GAAc,GAEzC,KACL/G,OAAOkH,oBAAoB,SAAUH,GAAc,MAEpD,IAQH,MAAMI,GAAaC,EAAAA,EAAAA,GACjB,oBACAb,GAAc,eACdD,GAAY,aAGd,OACE,0BAAKjB,UAAW8B,EAAY7B,QAb9B,SAAmB+B,GACbhB,GACFgB,EAAEC,oBAYDjB,GACC,0BAAKhB,UAAU,8BAA8BC,QAAUE,EAAAA,QAAoCjH,EAAV+G,GAC/E,wBAAGD,UAAY,6BAA2BmB,EAAc,YAAc,IAAMe,IAAI,QAAQlB,M,cClDlG,MAAMmB,OA+EsC,IAA/BhH,SAASiH,kBACX,yBAC2C,IAAlCjH,SAASkH,qBAClB,4BAC8C,IAArClH,SAASmH,wBAClB,0BAGF,G,sDCjGT,MAAMC,GAAQ,CAAC,QAAS,KAAM,KAAM,KAAM,KAAM,MAQhD,GANwBC,IACtB,MAAMC,EAAmB,IAAVD,EAAc,EAAI/B,KAAKiC,MAAMjC,KAAKkC,IAAIH,GAAS/B,KAAKkC,IAAI,OAEvE,MAAQ,IAAGH,EAAQ,MAAQ/B,KAAKiC,MAAMD,IAASG,QAAQ,MAAML,GAAME,M,0BCuCrE,MAAMhH,GAAauG,IACjBA,EAAEC,mBAGEY,GAAiB,CACrB,GACA,EACA,IACA,GA2NF,GAtN0C,IAsBpC,IAtBqC,eACzCC,EADyC,iBAEzCC,EAFyC,YAGzCC,EAHyC,SAIzCC,EAJyC,SAKzCC,EALyC,qBAMzCC,EANyC,SAOzCC,EAPyC,sBAQzCC,EARyC,aASzCC,EATyC,UAUzCC,EAVyC,WAWzCC,EAXyC,OAYzCC,EAZyC,QAazCC,EAbyC,aAczCC,EAdyC,mBAezCC,EAfyC,cAgBzCC,EAhByC,eAiBzCC,EAjByC,qBAkBzCC,EAlByC,YAmBzCC,EAnByC,cAoBzCC,EApByC,OAqBzCC,GACI,EACJ,MAAOC,EAAoBC,EAAkBC,IAAqBC,EAAAA,GAAAA,KAE5DC,GAAYzL,EAAAA,EAAAA,IAAuB,MACnC0L,GAAe1L,EAAAA,EAAAA,KAAgB,GAC/B2L,EAAYD,EAAavL,SAE/BoB,EAAAA,EAAAA,KAAU,KACR,IAAIqK,EACJ,GAAKnB,GAAcH,IAAYqB,IAAaN,EAO5C,OAHAO,EAAU/J,OAAOC,YAAW,KAC1BqJ,GAAc,KAtCa,MAwCtB,KACDS,GAAS/J,OAAOP,aAAasK,IAP7BA,GAAS/J,OAAOP,aAAasK,KASlC,CAACtB,EAAUG,EAAWkB,EAAWR,EAAeE,KAEnD9J,EAAAA,EAAAA,KAAU,KACJkJ,EACFpI,SAASwJ,KAAKtJ,UAAUC,IAAI,0BAE5BH,SAASwJ,KAAKtJ,UAAUuJ,OAAO,0BAE1B,KACLzJ,SAASwJ,KAAKtJ,UAAUuJ,OAAO,6BAEhC,CAACrB,KAEJlJ,EAAAA,EAAAA,KAAU,KACHkJ,GACHc,MAED,CAACA,EAAmBd,IAEvB,MAAMhE,GAAOC,EAAAA,EAAAA,KAEPqF,GAAavF,EAAAA,EAAAA,KAAa0C,IAC9B,GAAIwC,EAAavL,SAAWsL,EAAUtL,QAAS,CAC7C,MAAM,MACJK,EADI,KAEJwL,GACEP,EAAUtL,QAAQ8L,wBAChBC,EAAUhD,aAAaiD,WAAajD,EAAEgD,QAAUhD,EAAEkD,cAAc,GAAGF,QACzEd,EAAOzD,KAAK0E,IAAI1E,KAAK2E,IAAInC,IAAa+B,EAAUF,GAAQxL,GAAQ2J,GAAW,OAE5E,CAACA,EAAUiB,IAERmB,GAAkB/F,EAAAA,EAAAA,KAAa0C,IACnCwC,EAAavL,SAAU,EACvB4L,EAAW7C,KACV,CAAC6C,IAEES,GAAiBhG,EAAAA,EAAAA,KAAY,KACjCkF,EAAavL,SAAU,IACtB,KAEHoB,EAAAA,EAAAA,KAAU,KACR,GAAKkK,EAAUtL,SAAYsK,EAC3B,OAAOgC,EAAAA,EAAAA,IAAchB,EAAUtL,QAAS,CACtCuM,UAAWH,EACXI,UAAWH,EACXrF,QAASqF,EACTI,OAAQb,MAET,CAACtB,EAAW8B,EAAiBR,EAAYS,IAE5C,MAAMK,GAAajG,EAAAA,EAAAA,KAAQ,IACV,IAAX+D,GAAgBC,EAAgB,aAChCD,EAAS,GAAY,gBACrBA,EAAS,GAAY,gBAClB,iBACN,CAACA,EAAQC,IAEZ,OACE,0BACE1D,WAAW+B,EAAAA,EAAAA,GAAe,sBAAuBoB,GAAwB,SAAUI,GAAa,UAChGtD,QAASxE,IAyFf,SACEuH,EAAqBC,EAAkBH,EAAiCyB,GAExE,MAAMqB,EAAoB5C,EAAcC,EAAY,IAEpD,OACE,0BAAKjD,UAAU,kBAAkB6F,IAAKtB,GACpC,0BAAKvE,UAAU,yBACZ8C,EAAegD,KAAI,QAAC,MAAEC,EAAF,IAASC,GAAV,SAClB,0BACEhG,UAAU,2BACV9C,MAAQ,SAAgB,IAAR6I,cAAwB,IAAY,IAANC,UAGlD,0BACEhG,UAAU,yBACV9C,MAAQ,UAAS0I,GAAoB,SAvGxCK,CAAejD,EAAaC,EAAUH,EAAgByB,GACvD,0BAAKvE,UAAU,WACb,mBAACH,EAAA,EAAD,CACEK,UAAWX,EAAK,iBAChB/E,KAAK,OACL0L,QAAS/F,EAAAA,GACTJ,MAAM,oBACNC,UAAU,OACVF,OAAK,EACLG,QAAS+D,GAET,wBAAGhE,UAAWoD,EAAW,aAAe,eAE1C,mBAACvD,EAAA,EAAD,CACEK,UAAU,SACV1F,KAAK,OACLuF,MAAM,oBACNC,UAAU,SACVF,OAAK,EACLG,QAAS4D,GAET,wBAAG7D,UAAW2F,MAEdQ,EAAAA,IACA,mBAACC,GAAA,EAAD,CAAaC,MAAI,EAACrG,UAAU,gBAAgBsG,MAAO5C,EAAU,EAAa,IAATD,EAAc8C,SAAUzC,IA+CnG,SAAoBd,EAAqBC,GACvC,OACE,0BAAKjD,UAAU,eACX,IAAEwG,EAAAA,GAAAA,IAAoBxD,SAAkBwD,EAAAA,GAAAA,IAAoBvD,MAhD3DwD,CAAWzD,EAAaC,IACvBO,IAoDckD,EApDe3D,EAoDQ4D,EApDUzD,EAsDrD,0BAAKlD,UAAU,oBACX,GAAE4G,GAAeD,EAAYD,QAAoBE,GAAeD,OAtDhE,0BAAK3G,UAAU,WACf,mBAACH,EAAA,EAAD,CACEK,UAAU,gBACV1F,KAAK,OACLuF,MAAM,oBACNC,UAAU,gBACVF,OAAK,EACLG,QAASmE,GAEP,GAAET,MAELN,GACC,mBAACxD,EAAA,EAAD,CACEK,UAAU,aACV1F,KAAK,OACLuF,MAAM,oBACNC,UAAU,aACVF,OAAK,EACLG,QAAS2D,GAET,wBAAG5D,UAAWsD,EAAe,mBAAqB,sBAIxD,mBAACuD,GAAA,EAAD,CACEjH,OAAQuE,EACRnE,UAAU,qBACVM,UAAU,QACVwG,UAAU,SACVC,WAAS,EACTC,QAAS3C,GAERxB,GAAeiD,KAAKmB,GAEnB,mBAAC1G,EAAA,EAAD,CAAU2G,SAAUvD,IAAiBsD,EAAMhH,QAAS,IAAM8D,EAAqBkD,IAC3E,GAAEA,UAgBhB,IAAwBP,EAAuBC,G,mNC1M/C,MA6NA,IAAe5I,EAAAA,EAAAA,KA3NmB,IAe5B,IAf6B,IACjCoJ,EADiC,MAEjCC,EAFiC,WAGjCC,EAHiC,WAIjCC,EAJiC,aAKjCrI,EALiC,SAMjCiE,EANiC,kBAOjCqE,EAPiC,OAQjCC,EARiC,OASjC/D,EATiC,QAUjCC,EAViC,aAWjCC,EAXiC,QAYjCqD,EAZiC,eAajCS,EAbiC,mBAcjCC,GACI,EACJ,MAAM,qBACJC,EADI,oBAEJC,EAFI,2BAGJC,IACE7I,EAAAA,EAAAA,MAEE8I,GAAWhP,EAAAA,EAAAA,IAAyB,OACnCsK,EAAU2E,IAAe1G,EAAAA,EAAAA,KAAU2G,EAAAA,KAAiB7B,EAAAA,KACpDnD,EAAaiF,IAAkB5G,EAAAA,EAAAA,IAAS,IAExCiC,EAAc4E,EAAeC,GHtDvB,SAA6BC,EAAgBL,GAC1D,MAAOzE,EAAc+E,IAAmBhH,EAAAA,EAAAA,IAASvG,QAAQqH,GAAQhH,SAASgH,KAoE1E,OA9BAmG,EAAAA,EAAAA,KAAgB,KACd,MAAMC,EAAW,KAAQF,EAAgBvN,QAAQqH,GAAQhH,SAASgH,MAC5DqG,EAAgB,KAAQH,GAAgB,IACxCI,EAAe,KACnBJ,GAAgB,GAChBN,GAAY,IAERW,EAAQN,EAAMnP,QAWpB,OATAkC,SAASyG,iBAAiB,mBAAoB2G,GAAU,GACxDpN,SAASyG,iBAAiB,yBAA0B2G,GAAU,GAC9DpN,SAASyG,iBAAiB,sBAAuB2G,GAAU,GAEvDG,IACFA,EAAM9G,iBAAiB,wBAAyB4G,GAAe,GAC/DE,EAAM9G,iBAAiB,sBAAuB6G,GAAc,IAGvD,KACLtN,SAAS0G,oBAAoB,mBAAoB0G,GAAU,GAC3DpN,SAAS0G,oBAAoB,yBAA0B0G,GAAU,GACjEpN,SAAS0G,oBAAoB,sBAAuB0G,GAAU,GAC1DG,IACFA,EAAM7G,oBAAoB,wBAAyB2G,GAAe,GAClEE,EAAM7G,oBAAoB,sBAAuB4G,GAAc,OAIlE,IAEEtG,GAAyB,QAAjBwG,EAAAA,GAIN,CAACrF,EAtEc,KACf8E,EAAMnP,UAAakJ,GAAyB,QAAjBwG,EAAAA,MAI5BP,EAAMnP,QAAQ2P,kBAChBR,EAAMnP,QAAQ2P,oBACLR,EAAMnP,QAAQ4P,wBACvBT,EAAMnP,QAAQ4P,0BACLT,EAAMnP,QAAQ6P,sBACvBV,EAAMnP,QAAQ6P,wBACLV,EAAMnP,QAAQ8P,sBACvBX,EAAMnP,QAAQ8P,uBAGhBV,GAAgB,KAGK,KAChBD,EAAMnP,UAIPkC,SAASgN,eACXhN,SAASgN,iBACAhN,SAAS6N,oBAClB7N,SAAS6N,sBACA7N,SAAS8N,uBAClB9N,SAAS8N,yBACA9N,SAAS+N,sBAClB/N,SAAS+N,uBAGXb,GAAgB,MAkCT,EAAC,GGhB4Cc,CAAoBrB,EAAUC,IAE9E,WACJvE,EADI,eACQV,EADR,kBACwBsG,EADxB,iBAC2CrG,IAC7CsG,EAAAA,EAAAA,MAEFC,aAAcC,EACdC,qBAAsBC,IACpBC,EAAAA,EAAAA,IAAmBlG,OAAYtK,OAAWA,EAAW,SAEvDoQ,aAAcK,EACdH,qBAAsBI,IACpBF,EAAAA,EAAAA,GAAkBvD,EAAAA,KAAW/C,IAAamG,OAAqBrQ,OAAWA,EAAW,SAEzFmB,EAAAA,EAAAA,KAAU,KACJmN,IAAWD,EACbO,EAAS7O,QAAS4Q,QACT1C,IAAQa,EAAAA,KAIjB8B,EAAAA,EAAAA,GAAShC,EAAS7O,WAEnB,CAACuO,EAAQD,EAAmBJ,KAE/B9M,EAAAA,EAAAA,KAAU,KACJyN,EAAS7O,QAAS+J,cAAgB8E,EAAS7O,QAASgK,UACtDgF,EAAe,GACfF,GAAY,IAEZE,EAAeH,EAAS7O,QAAS+J,eAElC,CAACA,KAEJ3I,EAAAA,EAAAA,KAAU,KACRyN,EAAS7O,QAASwK,OAASA,IAC1B,CAACA,KAEJpJ,EAAAA,EAAAA,KAAU,KACRyN,EAAS7O,QAAS0K,aAAeA,IAChC,CAACA,IAEJ,MAAMoG,GAAkBzK,EAAAA,EAAAA,KAAa0C,IACnCA,EAAEC,kBACEmB,GACF0E,EAAS7O,QAAS4Q,QAClB9B,GAAY,MAEZ+B,EAAAA,EAAAA,GAAShC,EAAS7O,SAClB8O,GAAY,MAEb,CAAC3E,KAEJ4G,EAAAA,EAAAA,GAAgBlC,EAAU,IAE1B,MAAMmC,GAAkB3K,EAAAA,EAAAA,KAAY,KAClCmI,GAAe,KACd,CAACA,IAEEyC,GAAiB5K,EAAAA,EAAAA,KAAa0C,IAC9BA,EAAEmI,SAAWrC,EAAS7O,SACxBwO,GAAe,KAEhB,CAACA,IAEE2C,GAAmB9K,EAAAA,EAAAA,KAAa0C,IACpCiG,EAAejG,EAAEqI,cAAcrH,eAC9B,IAEGsH,GAAchL,EAAAA,EAAAA,KAAY,KAC9B2I,EAAe,GACfF,GAAY,GACZN,GAAe,KACd,CAACA,IAEE8C,GAAyBjL,EAAAA,EAAAA,KAAY,KACrCgE,GAAgB6E,EAClBA,KACU7E,GAAgB4E,GAC1BA,MAED,CAACC,EAAgB7E,EAAc4E,IAE5BrD,GAAavF,EAAAA,EAAAA,KAAakL,IAC9B1C,EAAS7O,QAAS+J,YAAcwH,IAC/B,IAEGC,GAAqBnL,EAAAA,EAAAA,KAAaoL,IACtC/C,EAAqB,CAAElE,OAAQiH,EAAY,QAC1C,CAAC/C,IAEEgD,GAAoBrL,EAAAA,EAAAA,KAAY,KACpCsI,EAAoB,CAAElE,SAAUA,MAC/B,CAACA,EAASkE,IAEPgD,GAA2BtL,EAAAA,EAAAA,KAAauL,IAC5ChD,EAA2B,CAAElE,aAAckH,MAC1C,CAAChD,KAEJxN,EAAAA,EAAAA,KAAU,KACR,IAAKkN,EAAmB,OACxB,MAAMuD,EAA4B9I,IAClB,UAAVA,EAAE+I,KAA6B,MAAV/I,EAAE+I,MACzB/I,EAAEgJ,iBACFjB,EAAgB/H,KAMpB,OAFA7G,SAASyG,iBAAiB,UAAWkJ,GAA0B,GAExD,KACL3P,SAAS0G,oBAAoB,UAAWiJ,GAA0B,MAEnE,CAACf,EAAiBxC,IAErB,MAAM0D,GAAe3D,GAAe,UAASA,EAAWhO,oBAAoBgO,EAAW3N,WACjFuR,GAAc,yBAAwB7D,KAE5C,OACE,0BACErH,UAAU,cACVmL,YAAc/D,GAAUY,EAAAA,QAAiC9O,EAAlB+Q,EACvCmB,WAAahE,GAAUY,EAAAA,QAAgC9O,EAAjBgR,GAEtC,0BACEhN,MAAO+N,IAGP,+BACEpF,IAAKiC,EACLuD,SAAUrD,EAAAA,GACVsD,aAAW,EACXC,KAAMnE,EAENoE,MAAOpE,GAAS1D,EAChBlH,GAAG,qBACHU,MAAOgO,GACPO,OAAQtF,EAAAA,GAAS,IAAM4B,GAAY,QAAQ7O,EAC3CwS,QAASpB,EACTrK,QAAUE,EAAAA,QAA4CjH,EAAlB6Q,EACpC4B,cAAgB3D,EAAAA,QAAwC9O,EAAzBqR,GAE3BnB,EAdN,CAeEwC,aAAcxB,IAEbjD,GAAO,6BAAQ9N,IAAK8N,MAGxBwC,GACC,mBAAC9J,EAAA,EAAD,CAAQC,OAAK,EAACE,UAAY,eAAc4J,IAAwB3J,QAAS8J,GACvE,wBAAG/J,UAAU,eAGhBuJ,GACC,0BAAKvJ,UAAW,CAAC,oBAAqByJ,GAAmBoC,KAAK,OAC1DrI,GAAc,0BAAKxD,UAAU,aAAf,gBAChB,mBAACY,EAAA,EAAD,CACEpG,KAAK,KACLqG,SAAU2C,EAAa,EAAIvE,EAC3B6M,QAAM,EACN7L,QAAS+G,MAIbI,IAAUmC,GACV,mBAAC,GAAD,CACEnG,SAAUA,EACVN,eAAgBA,EAChBC,iBAAkBA,EAClBS,WAAYA,EACZR,YAAaA,EACbK,sBAAuBvI,QAAQoN,GAC/B5E,aAAcA,EACdJ,SAAUA,EACVD,SAAU6E,EAAS7O,SAAU6O,EAAS7O,QAAQgK,UAAgB,EAC9DM,UAAWmE,EACXzD,cAAewD,EACftE,qBAAsBmE,GAAcA,EAAWhO,MA7MpB,IA8M3B4K,OAAQW,EACRjB,mBAAoB2G,EACpBvG,YAAa+F,EACbtG,OAAQA,EACRE,aAAcA,EACdD,QAASA,EACTG,cAAe8G,EACf7G,eAAgB2G,EAChB1G,qBAAsB6G,QChBhC,IAAe7M,EAAAA,EAAAA,KAAKC,EAAAA,EAAAA,KAClB,CAACC,EAAQ8N,KACP,MAAM,OACJC,EADI,SAEJC,EAFI,UAGJC,EAHI,cAIJC,EAJI,kBAKJC,EALI,OAMJnR,GACE8Q,GAEE,OACJtI,EADI,QAEJC,EAFI,aAGJC,GACE1F,EAAOoO,YAEX,GAAIpR,IAAWY,EAAAA,GAAAA,aAAgC,CAC7C,IAAMmQ,IAAUE,EACd,MAAO,CAAEzI,OAAAA,EAAQC,QAAAA,EAASC,aAAAA,GAG5B,MAAMvG,GAAUkP,EAAAA,EAAAA,IAAkBrO,EAAQ+N,EAAQE,GAClD,OAAK9O,EAIE,CACL4O,OAAAA,EACAE,UAAAA,EACAK,SAAUnP,EAAQmP,SAClBtR,OAAAA,EACAmC,QAAAA,EACAgB,aAAaC,EAAAA,EAAAA,IAAyBJ,EAAQb,GAC9CqG,OAAAA,EACAC,QAAAA,EACAC,aAAAA,GAZO,CAAEF,OAAAA,EAAQC,QAAAA,EAASC,aAAAA,GAgB9B,GAAIwI,EAGF,MAAO,CACLD,WAAY,EACZK,SAAUJ,EACVK,aALaC,EAAAA,EAAAA,IAAWxO,EAAQkO,KAAkBO,EAAAA,EAAAA,IAAWzO,EAAQkO,GAMrEC,kBAAmBA,GAAqB,EACxCnR,OAAAA,EACAwI,OAAAA,EACAC,QAAAA,EACAC,aAAAA,GAIJ,KAAMqI,GAAUC,GAAYC,GAC1B,MAAO,CAAEzI,OAAAA,EAAQC,QAAAA,EAASC,aAAAA,GAG5B,IAAIvG,EAOJ,OALEA,EADEnC,GAAU,CAACY,EAAAA,GAAAA,eAAkCA,EAAAA,GAAAA,iBAAmCY,SAASxB,IACjF0R,EAAAA,EAAAA,IAAuB1O,EAAQ+N,EAAQE,IAEvCI,EAAAA,EAAAA,IAAkBrO,EAAQ+N,EAAQE,GAGzC9O,EAIE,CACL4O,OAAAA,EACAC,SAAAA,EACAC,UAAAA,EACAK,SAAUnP,EAAQmP,SAClBtR,OAAAA,EACAmC,QAAAA,EACAgB,aAAaC,EAAAA,EAAAA,IAAyBJ,EAAQb,GAC9CqG,OAAAA,EACAC,QAAAA,EACAC,aAAAA,GAbO,CAAEF,OAAAA,EAAQC,QAAAA,EAASC,aAAAA,KAnEZ3F,EAnKmC4O,IACrD,MAAM,UACJV,EADI,SAEJW,EAFI,YAGJL,EAHI,OAIJR,EAJI,QAKJ5O,EALI,kBAMJgP,EANI,OAOJnR,EAPI,eAQJ6R,EARI,eASJC,EATI,YAUJ3O,EAVI,OAWJqF,EAXI,aAYJE,EAZI,QAaJD,EAbI,QAcJsD,EAdI,cAeJgG,EAfI,kBAgBJC,GACEL,EAEEM,EAAQ9P,GAAU+P,EAAAA,EAAAA,IAAgB/P,QAAWlE,EAC7CwP,EAAQtL,GAAUgQ,EAAAA,EAAAA,IAAgBhQ,QAAWlE,EAC7CmU,EAAejQ,GAAUkQ,EAAAA,EAAAA,IAAuBlQ,QAAWlE,EAC3DqU,EAAenQ,GAAUoQ,EAAAA,EAAAA,IAAuBpQ,QAAWlE,EAC3DuU,IAAkBrQ,IAAUsQ,EAAAA,EAAAA,IAAuBtQ,GACnDuQ,IAAkBvQ,IAAUwQ,EAAAA,EAAAA,IAAuBxQ,GACnDmB,EAAUzD,QAAQ4N,GAAS6E,GAAgBI,GAC3CE,EAAU/S,SAASyD,IAAY2O,GAASG,GAAgBI,KACxD,MAAErG,GAAUsB,GAAS6E,GAAgB,GAErC3N,EAAS9E,QAAQ0R,GAAeN,GAChCxN,EAAW5D,QAAQ0R,GAEnBsB,EAAoB7S,IAAWY,EAAAA,GAAAA,YAC/BkS,EAAe9S,IAAWY,EAAAA,GAAAA,aAE1BmS,EAAsC,IAAnBlB,EAGzB,SAASmB,EAAaC,GACpB,GAAIxP,QAAkCxF,IAAtBkT,EAAiC,CAC/C,MAAM,OAAE+B,GAAW3B,EACnB,OAAO2B,GAAUA,EAAO/B,GACnB,QAAO+B,EAAO/B,GAAmB5P,aAClC4R,EAAAA,EAAAA,IAAkB5B,EAAc0B,EAAS,MAAQ,UAGvD,OAAO9Q,IAAWgC,EAAAA,EAAAA,IAAoBhC,EAAS8Q,EAAS,aAAe,iBAGzE,MAAMG,GAAmBC,EAAAA,EAAAA,GACvBlR,IAAY0Q,GAAqBC,KAAiB3O,EAAAA,EAAAA,IAAoBhC,EAAS,kBAC/ElE,EACAqV,EAAAA,GAAAA,aACArV,EACA8U,GAzDuB,KA2DnBQ,EAAmBP,IACnBQ,GAAiBH,EAAAA,EAAAA,GACrBE,OACAtV,EACAqV,EAAAA,GAAAA,aACArV,EACA8U,GAjEuB,MAoEvB1P,UAAWoQ,EADP,aAEJzP,IACEE,EAAAA,EAAAA,GACF8O,GAAa,QACb/U,EACAkE,IAAWuR,EAAAA,EAAAA,IAAsBvR,EAAS,mBAC1ClE,EACA8U,GA3EuB,KA8EnBvG,GAAiBnI,EAAAA,EAAAA,KAAaiE,IAClC0J,MAAAA,GAAAA,GAAqB1J,KACpB,CAAC0J,IAEE2B,EAAgB1B,GAASxE,GAAUwE,GAASxE,GAAQmG,aAAU3V,EACpE,IAAI4V,GAAkBvQ,IAAYqQ,GAAgBF,IAAsBD,GAAkBJ,EAC1F,MAAMU,EAAepW,GAAamW,GAAiB1R,IAAW4R,EAAAA,EAAAA,IAA4B5R,IACrF0R,GAAiB7T,IAAWY,EAAAA,GAAAA,eAC/BiT,EAAgBC,GAGlB,MAAME,GAAY7R,GAAU8R,EAAAA,EAAAA,IAAmB9R,QAAWlE,EAE1D,IAAIiW,GAaJ,GAZI/R,EACEqQ,GAAmBE,EACrBwB,IAAaC,EAAAA,EAAAA,IAAmBhS,GAAUiS,UACjCnC,GAASG,EAClB8B,IAAaG,EAAAA,EAAAA,IAAwBpC,GAASG,IACrC3E,GAAS6E,KAClB4B,IAAaI,EAAAA,EAAAA,IAAoB7G,GAAS6E,IAG5C4B,GAAaK,EAAAA,GAGX9Q,EACF,OACE,0BAAKqM,IAAKiB,EAAQhM,UAAU,sBACzByP,GACCf,GAAoBD,GACpBiB,EAAAA,EAAAA,IAA+BF,EAAAA,IAAwB,IACtDrP,EAAAA,KAA4B/B,IAMrC,IAAKhB,EAAS,OACd,MAAMuS,IAAYC,EAAAA,EAAAA,GAAkBxS,GAC9ByS,GAAY/U,QAAQ6U,IAE1B,OACE,0BACE3P,UAAY,uBAAqB6P,GAAY,aAAe,KAE3DzR,GAAe,0BAAK0R,cAAerU,EAAAA,EAAWuE,UAAU,cACxD6N,GAAW4B,GACVb,GAAgBF,GAAoBD,GAAkBJ,EACtDjR,IAAWsS,EAAAA,EAAAA,IAA+BP,GAAaU,KACtD1P,EAAAA,KAA4B/B,GAE9BG,KAAcsO,GAAY7E,EAAAA,GA4IjC,SAA4B6G,EAAkBkB,EAA2BC,GACvE,MAAM/E,EAAe8E,GAAc,UAASA,EAAUzW,oBAAoByW,EAAUpW,WAC9EuR,EAAc,yBAAwB2D,KAC5C,OAAOA,EAEH,0BACE7O,UAAU,eAEV,0BACE9C,MAAO+N,GAGP,4BACE/N,MAAOgO,EACP3P,UAAWT,QAAQkV,OAMzB,0BACEhQ,UAAU,kBACV9C,MAAO6S,EAAa,UAASA,EAAUzW,UAAY,IAEnD,mBAAC2W,EAAA,EAAD,CAASlQ,MAAM,WApK0BmQ,CACzCpB,EACA1R,IAAWsS,EAAAA,EAAAA,IAA+BP,GAAaU,IAAW,IACjE1P,EAAAA,KAA4B/B,GAE7B,mBAAC,GAAD,CACE2M,IAAKmB,EACL/E,IAAKyH,GAAgBF,EACrBtH,MAAOA,EACPC,WAAYyH,EACZxH,WAAYlK,IAAWsS,EAAAA,EAAAA,IAA+BP,GAAaU,IAAW,GAC9E5Q,aAAcA,EACdiE,SAAU+L,GACV1H,kBAAmB3H,GAAUiN,EAC7BnF,oBAAqBqF,EACrBtF,eAAgBA,EAChBD,QAASqF,EACT7F,QAASA,EACTtD,QAASA,EACTD,OAAQA,EACRE,aAAcA,KAGjBgM,IACC,mBAAC,EAAD,CACE3O,KAAM2O,GACN1P,QAAS+M,EACT/L,SAAU8L,GAAkB/E,EAAAA,GAC5B9G,WAAY3C,IAAY6I,SA4FlC,SAASqI,GAAYZ,EAAkBkB,EAA2BC,GAChE,OAAOnB,EAEH,0BACExV,IAAKwV,EACLsB,IAAI,GACJjT,MAAO6S,EAAa,UAASA,EAAUzW,UAAY,GACnDiC,UAAWT,QAAQkV,KAIrB,0BACEhQ,UAAU,kBACV9C,MAAO6S,EAAa,UAASA,EAAUzW,UAAY,IAEnD,mBAAC2W,EAAA,EAAD,CAASlQ,MAAM,W,kOCxSvB,MAGMqQ,GAAqB,IAS3B,IAAIC,G,IAQCC,I,SAAAA,GAAAA,EAAAA,EAAAA,WAAAA,GAAAA,aAAAA,EAAAA,EAAAA,SAAAA,GAAAA,W,CAAAA,KAAAA,GAAAA,KAKL,MAyeA,IAAevS,EAAAA,EAAAA,KAzeyB,IAWlC,IAXmC,UACvCmO,EADuC,aAEvCqE,EAFuC,cAGvCC,EAHuC,QAIvCjS,EAJuC,MAKvC6I,EALuC,QAMvCyG,EANuC,OAOvCjO,EAPuC,SAQvCiN,EARuC,UASvCgD,KACGY,GACC,EAEJ,MAAMC,GAAe5X,EAAAA,EAAAA,IAAuB,MAEtC6X,GAAiB7X,EAAAA,EAAAA,IAAuB,MACxC8X,GAAe9X,EAAAA,EAAAA,IAAkB,CAAE+X,EAAG,EAAGC,EAAG,EAAGC,MAAO,IACtDC,GAAoBlY,EAAAA,EAAAA,SAAmCI,GACvD+X,GAAcnY,EAAAA,EAAAA,KAAO,IACpBoY,EAAiBC,IAAsB9P,EAAAA,EAAAA,IAA6B6K,GACrEhS,GAAcC,EAAAA,EAAAA,MACb4S,EAAgBE,IAAqB5L,EAAAA,EAAAA,KAAkB,IAExD,SACJ7C,EADI,QAEJwI,GACEyJ,EAEEW,GAAe9R,EAAAA,EAAAA,KAAagH,IAChCsK,EAAa3X,QAAUqN,EACvBpM,MACC,CAACA,IAEEmX,GAAc/R,EAAAA,EAAAA,KAAagH,IAC/B2K,EAAYhY,QAAUqN,EACtBpM,MACC,CAACA,IAEEoX,GAAqBC,EAAAA,EAAAA,GA3DJ,KA2DkC,GACnDC,GAAyBD,EAAAA,EAAAA,GA3DV,KA2DsC,GACrDE,GAAiBF,EAAAA,EAAAA,GA3DD,KA2D8B,GAE9CG,GAA+BpS,EAAAA,EAAAA,KAAa0C,IAChD,IAAKgG,EAAAA,GAAc,OACnB,MAAM2J,EAAWhX,OAAOiX,YAAc5P,EAAE6P,MA1DlB,IA2DjBF,GAAY3P,EAAE8P,MA5DG,KA6DjBH,GAAY3P,EAAE8P,MAAQnX,OAAOoX,WA7DZ,IA8DtB9E,GAAmBF,KAClB,CAACA,IAwYJ,IAtYAiF,EAAAA,GAAAA,IAAW,IAAM/E,GAAkB,IAAQmD,MAE3C/V,EAAAA,EAAAA,KAAU,KACR,IAAK2N,EAAAA,KAAiB0I,EAAazX,SAAWuF,IAAa0S,EACzD,OAEF,IAAIe,EAAgB,CAAEpB,EAAG,EAAGC,EAAG,EAAGC,MAAO,GACzC,MAAMmB,EAAiB,CACrBrB,EAAG,EACHC,EAAG,GAECqB,EAAiB,CACrBtB,EAAG,EACHC,EAAG,GAECsB,EAAW,CACfvB,EAAG,EACHC,EAAG,GAEL,IACIuB,EACAC,EAFAC,EAAkBC,KAAKC,MAG3B,MAAMC,GAAqBC,EAAAA,EAAAA,KAAS,KAClCJ,EAAkBC,KAAKC,QACtB,KAAK,GAAO,GAETG,EAAe5Q,IACnB,GAAmC,IAA/B4O,EAAa3X,QAAQ8X,MAAa,OAAO,EAC7C,IAAI8B,EAAY,EAChB,GAAIlY,OAAOiX,YAAc5P,EAAE6P,MA7FP,GA8FlB,OAAO,EAEL7P,EAAE8P,MAjGc,GAkGlBe,GAAa,EACJ7Q,EAAE8P,MAAQnX,OAAOoX,WAnGR,KAoGlBc,EAAY,GAEd,MAAMC,EAAMvC,EAAaW,EAAiB2B,GAC1C,GAAIC,EAAK,CACP,MAAMC,GAAUpY,OAAOoX,WAhHZ,IAgHuCc,EAClDjC,EAAa3X,QAAQ4X,GAAKkC,EAC1B9B,EAAYhY,SAAU,EACtBkY,EAAmB2B,GACnBxB,GAAmB,IAAMd,EAAcsC,KACvCrB,GAAe,KACbJ,GAAY,MAEdY,EAAgB,CAAEpB,EAAG,EAAGC,EAAG,EAAGC,MAAO,GACrCV,IAAkB2C,EAAAA,EAAAA,IAAc,CAC9BC,KAAMrC,EAAa3X,QAAQ4X,EAC3BqC,GAAI,EACJjQ,SAAUmN,GACV+C,OAAQC,EAAAA,GAAAA,aACRC,SAAW/M,GAAU8K,EAAa,CAChCN,EAAG,EACHD,EAAGvK,EACHyK,MAAO,MAIb,OAAqB,IAAd8B,GAGT,OAAOtN,EAAAA,EAAAA,IAAcmL,EAAazX,QAAS,CACzCqa,cAAc,EACdC,wBAAyB,qBACzB/N,UAAYxD,IACV,IAAIwR,GAAqBxR,KACzBuQ,EAAkBC,KAAKC,OACnBgB,EAAAA,EAAAA,GAAqB7C,EAAa3X,QAAS,CAAE4X,EAAG,EAAGC,EAAG,EAAGC,MAAO,KAAM,CACxE,IAAKJ,EAAe1X,QAAS,OAE7B,GADAqZ,EAAU3B,EAAe1X,QAAQ8C,cAAc,eAC1CuW,EAAS,OAEdD,EAAqBC,EAAQvN,0BAGjCW,OAAQ,CAACgO,EAAOC,EAAR,KAGF,IAHwB,YAC5BC,EAD4B,YAE5BC,GACI,EACJ,GAAIL,GAAqBE,GAAQ,OAEjC,GAAIvN,EAAAA,GAAQ,CACV,MAAM,MAAE2L,GAAW6B,EAAgCG,QAAQ,GAC3D,GAAIhC,GAASiC,EAAAA,IAA6BjC,GAASnX,OAAOoX,WAAagC,EAAAA,GACrE,OAGA1D,KACFA,KACAA,QAAkBnX,GAEpBkZ,EAASvB,EAAIqB,EAAerB,EAAI+C,EAChCxB,EAAStB,EAAIoB,EAAepB,EAAI+C,EAChC3B,EAAerB,EAAI+C,EACnB1B,EAAepB,EAAI+C,EACnB,MAAMG,EAAavT,KAAKwT,IAAIL,GACtBM,EAAazT,KAAKwT,IAAIJ,IACtB,MACJ9C,EADI,EAEJF,EAFI,EAGJC,GACEF,EAAa3X,QACXkb,EAAI,GAOV,GAHAzB,IAGc,IAAV3B,EAUJ,OAAIC,EAAkB/X,UAAYqX,GAAe8D,WAG3CpD,EAAkB/X,UAAYqX,GAAe+D,YAC5C5T,KAAKwT,IAAIpD,GAAKsD,GAAMH,EAAaG,GAAKD,EAAaC,IACtDnD,EAAkB/X,QAAUqX,GAAe+D,WAC3CpD,EAAYhY,SAAU,OACtBmY,EAAa,CACXP,EAAG+C,EACH9C,EAAG,EACHC,MAAAA,WAMFC,EAAkB/X,UAAYqX,GAAe8D,UAC5C3T,KAAKwT,IAAInD,GAAKqD,GAAMD,EAAaC,GAAKH,EAAaG,KACtDnD,EAAkB/X,QAAUqX,GAAe8D,SAC3ChD,EAAa,CACXP,EAAG,EACHC,EAAG+C,EACH9C,MAAAA,MA/BE,YAAa2C,GAAkC,IAAzBA,EAAMI,QAAQnW,QACtCyT,EAAa,CACXP,EAAGoB,EAAcpB,EAAI+C,EACrB9C,EAAGmB,EAAcnB,EAAI+C,EACrB9C,MAAAA,KA+BRuD,OAAQ,CAACtS,EAAD,KAQF,IARM,WACVuS,EADU,eAEVC,EAFU,eAGVC,EAHU,YAIVb,EAJU,YAKVC,EALU,eAMVa,EANU,eAOVC,GACI,EAEJ,MAAM5D,EAAQtQ,KAAK2E,IAAIwP,GAAcnU,KAAK0E,IAAI8M,EAAclB,MAAQwD,EAhO3D,KAiOHM,EAAc9D,EAAQkB,EAAclB,MAKpC+D,EAJUrU,KAAKwT,IAAIxT,KAAK2E,IAAI6M,EAAcpB,EAAG,IAInB2D,EAC1BO,EAJUtU,KAAKwT,IAAIxT,KAAK2E,IAAI6M,EAAcnB,EAAG,IAInB2D,EAGhCtC,EAAetB,EAAI6D,EACnBvC,EAAerB,EAAI6D,EAGnB,MAAMK,EAAgBF,EAAgBD,EAAcC,EAC9CG,EAAgBF,EAAgBF,EAAcE,EAEpD3D,EAAa,CACXP,EAAGoB,EAAcpB,EAAImE,EAAepB,EACpC9C,EAAGmB,EAAcnB,EAAImE,EAAepB,EACpC9C,MAAAA,KAGJ9Q,QAAQ+B,GACF4Q,EAAY5Q,KACdA,EAAEgJ,iBACFhJ,EAAEC,oBAGN0J,cAAc3J,EAAD,GAGV,IAHc,QACfkT,EADe,QAEfC,GACC,EACD,GAAIvC,EAAY5Q,GAGd,OAFAA,EAAEgJ,sBACFhJ,EAAEC,kBAIJ,MAAM+S,EAAgBE,EAtQN,EAsQkCA,EAC5CD,EAAgBE,EAvQN,EAuQkCA,GAC5C,MACJpE,EADI,EAEJF,EAFI,EAGJC,GACEF,EAAa3X,QACjB,GAAc,IAAV8X,EAAa,CACf,GAAU,IAANF,GAAiB,IAANC,EAAS,OACxBmB,EAAgB,CACdpB,EAAGmE,EACHlE,EAAGmE,EACHlE,MAlRY,QAqRdkB,EAAgB,CACdpB,EAAG,EACHC,EAAG,EACHC,MAAO,GAGX,OAAOiC,EAAAA,EAAAA,IAAc,CACnBC,KAAM,CAACpC,EAAGC,EAAGC,GACbmC,GAAI,CAACjB,EAAcpB,EAAGoB,EAAcnB,EAAGmB,EAAclB,OACrD9N,SAAUmN,GACV+C,OAAQC,EAAAA,GAAAA,aACRC,SAAW/M,GAAU8K,EAAa,CAChCP,EAAGvK,EAAM,GACTwK,EAAGxK,EAAM,GACTyK,MAAOzK,EAAM,QAInBb,UAAW,KACT,MAAM2P,EAAO3U,KAAKwT,IAAIrD,EAAa3X,QAAQ4X,GACrCwE,EAAO5U,KAAKwT,IAAIrD,EAAa3X,QAAQ6X,IACrC,MACJC,EADI,EAEJF,EAFI,EAGJC,GACEF,EAAa3X,QAUjB,GARAuY,GAAuB,KACrBR,EAAkB/X,aAAUC,KAE9BuY,GAAe,KACbJ,GAAY,MAIVN,EAAQ,EAEV,OADAkB,EAAgB,CAAEpB,EAAG,EAAGC,EAAG,EAAGC,MAAO,IAC9BiC,EAAAA,EAAAA,IAAc,CACnBC,KAAM,CAACpC,EAAGC,EAAGC,GACbmC,GAAI,CAAC,EAAG,EAAG,GACXjQ,SAAUmN,GACV+C,OAAQC,EAAAA,GAAAA,aACRC,SAAW/M,GAAU8K,EAAa,CAChCP,EAAGvK,EAAM,GACTwK,EAAGxK,EAAM,GACTyK,MAAOzK,EAAM,OAInB,GAAIyK,EAAQ,EAAG,CACb,IAAKuB,IAAYD,EAMf,YALAJ,EAAgB,CACdpB,EAAAA,EACAC,EAAAA,EACAC,MAAAA,IAKJ,MAAMuE,EAAahD,EAAQvN,wBACrBwQ,EAAK9U,KAAK2E,IAAI2L,EAnVb,GAoVD8D,EAAcU,EAAKxE,EAIzB,IAAIyE,EAAK3E,EAAIgE,GAAe1C,EAAetB,EAAIgE,EAAc1C,EAAetB,GACxE4E,EAAK3E,EAAI+D,GAAe1C,EAAerB,EAAI+D,EAAc1C,EAAerB,GAG5E,MAAM4E,EAAI,IAGV,GAAIzD,EAAclB,QAAUA,EAAO,CAEjC,MAAM4E,EAAKlV,KAAKwT,IAAI/B,EAAerB,IAAM2B,KAAKC,MAAQF,GAChDqD,EAAKnV,KAAKwT,IAAI/B,EAAepB,IAAM0B,KAAKC,MAAQF,GAGtDiD,GAAM/U,KAAKwT,IAAI/B,EAAerB,GAAK8E,EAAKD,EAAItD,EAASvB,EACrD4E,GAAMhV,KAAKwT,IAAI/B,EAAepB,GAAK8E,EAAKF,EAAItD,EAAStB,EAKvD,GAAIwE,EAAWhc,MAAQqB,OAAOoX,WAAY,CACxC,MAAM8D,GAAcxD,EAAmBvN,KAAOyQ,EACxCO,EAAanb,OAAOoX,WAAaM,EAAmB0D,MAAQR,EAClEC,EAAK/U,KAAK2E,IAAIyQ,EAAYpV,KAAK0E,IAAI2Q,EAAYN,SAG/CA,GAAM7a,OAAOoX,WAAapX,OAAOoX,WAAawD,GAAM,EAGtD,GAAID,EAAW3b,OAASgB,OAAOiX,YAAa,CAC1C,MAAMoE,GAAc3D,EAAmB4D,IAAMV,EACvCW,EAAavb,OAAOiX,YAAcS,EAAmB8D,OAASZ,EACpEE,EAAKhV,KAAK2E,IAAI4Q,EAAYvV,KAAK0E,IAAI+Q,EAAYT,SAE/CA,GAAM9a,OAAOiX,YAAcjX,OAAOiX,YAAc2D,GAAM,EAkBxD,OAhBAtD,EAAgB,CACdpB,EAAG2E,EACH1E,EAAG2E,EACH1E,MAAOwE,QAETlF,IAAkB2C,EAAAA,EAAAA,IAAc,CAC9BC,KAAM,CAACpC,EAAGC,EAAGC,GACbmC,GAAI,CAACsC,EAAIC,EAAIF,GACbtS,SAAUmN,GACV+C,OAAQC,EAAAA,GAAAA,aACRC,SAAW/M,GAAU8K,EAAa,CAChCP,EAAGvK,EAAM,GACTwK,EAAGxK,EAAM,GACTyK,MAAOzK,EAAM,QAUnB,GALA2L,EAAgB,CACdpB,EAAAA,EACAC,EAAAA,EACAC,MAAAA,GAEEsE,GAxZc,GAwZa,OAAOrO,IAEtC,GAAIqO,EAAO,EACT,OAAOrC,EAAAA,EAAAA,IAAc,CACnBC,KAAMnC,EACNoC,GAAI,EACJjQ,SAAUmN,GACV+C,OAAQC,EAAAA,GAAAA,aACRC,SAAW/M,GAAU8K,EAAa,CAChCP,EAAG,EACHC,EAAGxK,EACHyK,MAAAA,MAKN,MAAM8B,EAAYhC,EAAI,EAAI,GAAK,EACzBiC,EAAMvC,EAAaW,EAAiBL,EAAI,EAAI,GAAK,GAKjDuF,EAAOhE,EAASvB,EAAI,GAAK,EAAI,EACnC,GAAIiC,GAAOsC,GAhbO,IAgbsBvC,IAAcuD,EAAM,CAC1D,MAAMrD,GAAUpY,OAAOoX,WA/ad,IA+ayCc,EAGlDjC,EAAa3X,QAAQ4X,GAAKkC,EAC1B5B,EAAmB2B,GACnBxB,GAAmB,IAAMd,EAAcsC,KAGzCzC,IAAkB2C,EAAAA,EAAAA,IAAc,CAC9BC,KAAMrC,EAAa3X,QAAQ4X,EAC3BqC,GAAI,EACJjQ,SAAUmN,GACV+C,OAAQC,EAAAA,GAAAA,aACRC,SAAW/M,GAAU8K,EAAa,CAChCN,EAAG,EACHD,EAAGvK,EACHyK,MAAOH,EAAa3X,QAAQ8X,eAOnC,CACDvS,EACAwI,EACAoK,EACAb,EACAW,EACAG,KAGGH,EAAiB,OAEtB,MAAMmF,EAAgB9F,EAAaW,EAAiB,GAC9CoF,EAAoB/F,EAAaW,GAAkB,GACnDqF,EAAU3F,EAAa3X,QAAQ4X,EAC/B2F,EAAU5F,EAAa3X,QAAQ6X,GAC/B,MAAEC,GAAUH,EAAa3X,QAE/B,OACE,0BAAK+G,UAAU,oBAAoB6F,IAAK6K,GACrC4F,GAA+B,IAAVvF,GACpB,0BAAK/Q,UAAU,mBAAmB9C,MAAOuZ,IAAmB9b,OAAOoX,WAAawE,EA1drE,KA2dT,mBAAC,GAAD,MAEM9F,EAFN,CAGEvE,UAAWoK,MAIhBpF,GACC,0BACElR,UAAY,qBAAmB6M,EAAW,2BAA6B,IACvE5M,QAASyR,EACT7L,IAAK8K,EACLzT,MAAOuZ,GAAkBF,EAASC,EAASzF,IAE3C,mBAAC,GAAD,MAEMN,EAFN,CAGEvE,UAAWgF,EACXrE,SAAUA,GAAYoE,EAAYhY,QAClCgU,kBAAmBA,EACnBF,eAAgBA,GAAkBvO,GAAsB,IAAVuS,MAInDsF,GAA2B,IAAVtF,GAChB,0BAAK/Q,UAAU,mBAAmB9C,MAAOuZ,GAAkB9b,OAAOoX,WAAawE,EApfpE,KAqfT,mBAAC,GAAD,MAEM9F,EAFN,CAGEvE,UAAWmK,UAUvB,SAASI,KAA2C,IAAzB5F,EAAyB,uDAArB,EAAGC,EAAkB,uDAAd,EAAGC,EAAW,uDAAH,EAC/C,MAAQ,0BAAyBF,EAAEjO,QAAQ,SAASkO,EAAElO,QAAQ,oBAAoBmO,EAAMnO,QAAQ,OAGlG,SAAS8T,GAAsB5Z,EAAsB6Z,GACnD,QAAK7Z,MACDA,EAAQ8Z,QAAQD,IACb7b,QAAQgC,EAAQP,QAAQoa,KAGjC,SAASnD,GAAqBxR,GAC5B,MAAMmI,EAASnI,EAAEmI,OACjB,QAAIuM,GAAsBvM,EAAQ,0BAC5BuM,GACFvM,EACA,qFAIFnI,EAAEgJ,kBAFO,G,cC7hBb,MAAM6L,GAAiB,CACrB,EAAG,EAAG,EAAG,EAAG,EAAG,GAGXC,GAAe,CACnB,EAAG,EACH,IAAK,IACL,EAAG,IACH,IAAK,IACL,EAAG,KAGCC,GAAiB,IAsKvB,IAAehZ,EAAAA,EAAAA,KA1Ie,IASxB,IATyB,SAC7BiZ,EAD6B,UAE7BhX,EAF6B,OAG7BiX,EAH6B,OAI7BC,EAJ6B,UAK7BC,EAL6B,UAM7BC,EAN6B,UAO7BC,EAP6B,MAQ7BC,GACI,EACJ,MAAMC,EAAiBT,GAAaK,IAA2CA,GACxEK,EAAYC,IAAiBpW,EAAAA,EAAAA,KAAkB,IAC/CqW,EAAUC,IAAetW,EAAAA,EAAAA,IAAoB,CAClDuW,GAAIR,EAAWS,GAAIR,EAAWxG,EAAG,EAAGC,EAAG,KAGlCgH,EAAYC,IAAiB1W,EAAAA,EAAAA,IAAmBwV,IAGjDmB,GAAgBlf,EAAAA,EAAAA,IAAuB,MAGvCmf,GAAkBnf,EAAAA,EAAAA,IAAuB,MA8F/C,OA5FAuB,EAAAA,EAAAA,KAAU,KACR,MAAM6d,EAAeX,GAAkBO,EAAW,GAC5CK,EAAWf,GAAaU,EAAW,GACnCM,EAAWf,GAAaS,EAAW,GAEnCO,EAAgB,IAAIP,GACtBA,EAAW,KAAOI,IACpBG,EAAc,GAAKH,GAAgBG,EAAc,GACjDA,EAAc,GAAKH,GAAgBG,EAAc,IAE/CP,EAAW,KAAOK,IACpBE,EAAc,GAAKF,GAEjBL,EAAW,KAAOM,IACpBC,EAAc,GAAKD,IAGhBE,EAAAA,GAAAA,IAAqBR,EAAYO,IACpCN,EApEN,SAAiCQ,EAAkBT,EAAsBU,GACvE,MAAMC,EAAQD,GAAWA,EAAQzc,cAAc,kCAC/C,IAAKyc,IAAYC,EACf,OAAOX,EAET,MAAMY,EAAcF,EAAQzT,wBACtB4T,EAAYF,EAAM1T,wBAElB6T,EAAeD,EAAUrf,MAAQif,EAAYT,EAAW,GACxDe,EAAgBF,EAAUhf,OAAS4e,EAAYT,EAAW,GAC1DgB,GAAWJ,EAAYpf,MAAQsf,GAAe,EAAId,EAAW,GAC7DiB,GAAWL,EAAY/e,OAASkf,GAAgB,EAAIf,EAAW,GAYrE,OAXIY,EAAYpf,OAASof,EAAYpf,MAAQyd,GAAiB+B,EAC5DhB,EAAW,IAAMgB,EAAUJ,EAAYpf,MAAQyd,GACtC6B,GAAeA,EAAcE,EAAU/B,KAChDe,EAAW,IAAMc,EAAcE,EAAU/B,IAEvC2B,EAAY/e,QAAU+e,EAAY/e,OAASod,GAAiBgC,EAC9DjB,EAAW,IAAMiB,EAAUL,EAAY/e,OAASod,GACvC8B,GAAgBA,EAAeE,EAAUhC,KAClDe,EAAW,IAAMe,EAAeE,EAAUhC,IAGrCe,EA6CWkB,CAAwBlB,EAAW,GAAIO,EAAeL,EAAc/e,YAGnF,CAACme,EAAWC,EAAWE,KAE1Bld,EAAAA,EAAAA,KAAU,KACH6c,GACHa,EAAclB,MAEf,CAACK,KAEJ7c,EAAAA,EAAAA,KAAU,KACJ4d,EAAgBhf,UAClBgf,EAAgBhf,QAAQiE,MAAM+b,UAAa,UAASnB,EAAWoB,iBAEhE,CAACjC,EAAQa,IA2DRb,EACKD,EAIP,0BACEnR,IAAKmS,EACLhY,UAAY,eAAcA,GAAa,KACvCmZ,YAjEqBnX,IACvB,IAAKkV,EACH,OAGFlV,EAAEC,kBACFD,EAAEgJ,iBAEF,MAEMoO,EAAyB,CAC7BxB,GAHcE,EAAW,GAIzBD,GAHcC,EAAW,GAIzBjH,EAAG7O,EAAE8P,MACLhB,EAAG9O,EAAE6P,OAEP8F,EAAYyB,GACZ3B,GAAc,GAEVO,EAAc/e,SAChB+e,EAAc/e,QAAQoC,UAAUC,IAAI,SA8CpC+d,UA1CkB,KACpB5B,GAAc,GAEVO,EAAc/e,SAChB+e,EAAc/e,QAAQoC,UAAUuJ,OAAO,QAGrC0S,GACFA,EAAMQ,EAAW,GAAIA,EAAW,KAmChC3M,YArBqBnJ,IACvB,GAAIwV,EAAY,CACd,MAAMa,EAZV,SAA0BxH,EAAWC,GACnC,MAAMuH,EAAgB,IAAIP,GACpBwB,EAAS5B,EAAS7G,EAAIA,EACtB0I,EAAS7B,EAAS5G,EAAIA,EAI5B,OAHAuH,EAAc,GAAKX,EAASE,GAAK0B,EACjCjB,EAAc,GAAKX,EAASG,GAAK0B,EAE1BlB,EAKiBmB,CAAiBxX,EAAE8P,MAAO9P,EAAE6P,OAClDkG,EAAcM,GAEVJ,EAAgBhf,UAClBgf,EAAgBhf,QAAQiE,MAAM+b,UAAa,UAASnB,EAAWoB,kBAiBjE,0BACErT,IAAKoS,EACLjY,UAAU,iBAETgX,O,yBC5KT,MAyDA,IAAehZ,EAAAA,EAAAA,KACb,CAACC,EAAD,KAAyD,IAAhD,OAAE+N,EAAF,UAAUE,EAAV,SAAqBxN,GAA2B,EACvD,GAAIA,GAAYsN,EACd,MAAO,CACLyN,QAAQC,EAAAA,EAAAA,IAAS1N,IAAUS,EAAAA,EAAAA,IAAWxO,EAAQ+N,IAAUU,EAAAA,EAAAA,IAAWzO,EAAQ+N,IAI/E,IAAKE,IAAcF,EACjB,MAAO,GAGT,MAAM5O,GAAUkP,EAAAA,EAAAA,IAAkBrO,EAAQ+N,EAAQE,GAElD,MAAO,CACL9O,QAAAA,EACAqc,OAAQrc,IAAWuc,EAAAA,EAAAA,IAAa1b,EAAQb,MAhB9C,EAvD8C,IAMxC,IANyC,OAC7C4O,EAD6C,UAE7CE,EAF6C,OAG7CuN,EAH6C,SAI7C/a,EAJ6C,QAK7CtB,GACI,EACJ,MAAM,iBACJwc,EADI,aAEJC,EAFI,eAGJC,IACE9a,EAAAA,EAAAA,MAEE+a,GAAqBza,EAAAA,EAAAA,KAAY,KACrCsa,IAEIzZ,EAAAA,GACFvF,YAAW,KACTkf,GAAe,EAAO,CAAEE,gBAAgB,IACxCH,EAAa,CAAE7N,OAAAA,EAAQE,UAAAA,MArBJ,KAwBrB2N,EAAa,CAAE7N,OAAAA,EAAQE,UAAAA,MAExB,CAACF,EAAQ6N,EAAcC,EAAgB5N,EAAW0N,IAE/Cra,GAAOC,EAAAA,EAAAA,KAEb,IAAKia,IAAYrc,IAAYsB,EAC3B,OAGF,MAAMub,GAAcC,EAAAA,EAAAA,IAAe3a,EAAMka,GAEzC,OACE,0BAAKzZ,UAAU,aAAaC,QAAS8Z,IAClCL,EAAAA,EAAAA,IAASD,EAAOjd,IACf,mBAAC2d,GAAA,EAAD,CAAQpP,IAAK0O,EAAOjd,GAAIhC,KAAK,SAAS4f,KAAMX,IAE5C,mBAACU,GAAA,EAAD,CAAQpP,IAAK0O,EAAOjd,GAAIhC,KAAK,SAAS6f,KAAMZ,IAE9C,0BAAKzZ,UAAU,QACb,0BAAKA,UAAU,QAAQkC,IAAI,QACxB+X,IAAeK,EAAAA,GAAAA,GAAWL,IAE7B,0BAAKja,UAAU,OAAOkC,IAAI,QACvBxD,EACGa,EAAK,gCACLgb,EAAAA,GAAAA,IAAoBhb,EAAsB,IAAhBnC,EAASod,MAAa,SCtE9D,GANwE,IAA4B,IAA3B,SAAExD,KAAapK,GAAY,EAClG,OAAI5E,EAAAA,GAAqBgP,GAAS,GAAM,EAAM,GAEvC,mBAACyD,EAAA,EAAe7N,EAAQoK,ICmHjC,IAAejZ,EAAAA,EAAAA,KApGoB,IAA+B,IAA9B,QAAE2c,EAAF,aAAWC,GAAmB,EAChE,MAAM,qBAAEnR,IAAyBE,EAAAA,EAAAA,GAAkBgR,GAC7CE,GAAcC,EAAAA,EAAAA,GAAqBH,GAEnCI,GAAWhiB,EAAAA,EAAAA,IAAyB,OACnCqe,EAAW4D,IAAgB1Z,EAAAA,EAAAA,IAAS,GACrCoD,GAAY3L,EAAAA,EAAAA,KAAgB,IAElCuB,EAAAA,EAAAA,KAAU,KACJqgB,IAAYE,GACdG,EAZmB,OAcpB,CAACL,EAASE,IAEb,MAAMI,GAAgB1b,EAAAA,EAAAA,KAAY,KAC5Bwb,EAAS7hB,SACX8hB,EAAata,KAAK0E,IApBM,EAoBcgS,EAAY,OAEnD,CAACA,IAEE8D,GAAe3b,EAAAA,EAAAA,KAAY,KAC3Bwb,EAAS7hB,SACX8hB,EAAata,KAAK2E,IA3BM,EA2Bc+R,EAAY,OAEnD,CAACA,IAEE9R,GAAkB/F,EAAAA,EAAAA,KAAY,KAClCmF,EAAUxL,SAAU,IACnB,IAEGqM,GAAiBhG,EAAAA,EAAAA,KAAY,KACjCmF,EAAUxL,SAAU,EACF,IAAdke,GACFwD,EAAaxD,GAAY1S,EAAUxL,WAEpC,CAAC0hB,EAAcxD,KAMlB9c,EAAAA,EAAAA,KAAU,KACRsgB,EAAaxD,GAAY1S,EAAUxL,WAClC,CAACke,EAAWwD,IAEf,MAAMpb,GAAOC,EAAAA,EAAAA,KAEPQ,GAAY+B,EAAAA,EAAAA,GAChB,eACAyH,GAGF,OACE,0BAAKxJ,UAAWA,GACd,mBAACH,EAAA,EAAD,CACEqH,SA3DsB,IA2DZiQ,EACV3c,KAAK,OACLuF,MAAM,oBACNG,UAAWX,EAAK,WAChBS,UAAU,WACVkG,QAAS/F,EAAAA,GACTF,QAAS+a,GAET,wBAAGhb,UAAU,mBAEf,mBAACH,EAAA,EAAD,CACEqH,SAvEsB,IAuEZiQ,EACV3c,KAAK,OACLuF,MAAM,oBACNG,UAAU,UACVF,UAAU,UACVkG,QAAS/F,EAAAA,GACTF,QAASgb,GAET,wBAAGjb,UAAU,kBAEf,0BAAKA,UAAU,YACb,0BAAKA,UAAU,kBACb,0BACEA,UAAU,kBACV9C,MAAQ,UAnFK,IAmFKia,EAAY,QAEhC,4BACEtR,IAAKiV,EACL1V,IAxFkB,EAyFlBD,IA1FkB,EA2FlB+V,KAAK,MACL5U,MAAO6Q,EACPgE,KAAK,QACLnb,UAAU,iBACVuG,SArDoBvE,IAC5B+Y,EAAata,KAAK2E,IA3CQ,EA2CY3E,KAAK0E,IAAIiW,OAAOpZ,EAAEmI,OAAO7D,OA1CrC,MA+FlB6S,YAAa9T,EACbgU,UAAW/T,UClCjB8K,GAAqB,IAud3B,IAAerS,EAAAA,EAAAA,KAAKC,EAAAA,EAAAA,KACjBC,IACC,MAAM,OACJ+N,EADI,SAEJC,EAFI,UAGJC,EAHI,cAIJC,EAJI,kBAKJC,EALI,OAMJnR,GACEgD,EAAOoO,aACL,eACJS,GACE7O,EAAOod,SAASC,MAEpB,GAAIrgB,IAAWY,EAAAA,GAAAA,aAAgC,CAC7C,IAAMmQ,IAAUE,EACd,MAAO,CAAEY,eAAAA,GAGX,MAAM1P,GAAUkP,EAAAA,EAAAA,IAAkBrO,EAAQ+N,EAAQE,GAClD,OAAK9O,EAIE,CACL4O,OAAAA,EACAE,UAAAA,EACAK,SAAUnP,EAAQmP,SAClBtR,OAAAA,EACAmC,QAAAA,EACA0P,eAAAA,GATO,CAAEA,eAAAA,GAab,GAAIX,EAGF,MAAO,CACLD,WAAY,EACZK,SAAUJ,EACVK,aALaC,EAAAA,EAAAA,IAAWxO,EAAQkO,KAAkBO,EAAAA,EAAAA,IAAWzO,EAAQkO,GAMrEC,kBAAmBA,GAAqB,EACxCU,eAAAA,EACA7R,OAAAA,GAIJ,KAAM+Q,GAAUC,GAAYC,GAC1B,MAAO,CAAEY,eAAAA,GAGX,IAAI1P,EAWAme,EAOAC,EAXJ,GALEpe,EADEnC,GAAU,CAACY,EAAAA,GAAAA,eAAkCA,EAAAA,GAAAA,iBAAmCY,SAASxB,IACjF0R,EAAAA,EAAAA,IAAuB1O,EAAQ+N,EAAQE,IAEvCI,EAAAA,EAAAA,IAAkBrO,EAAQ+N,EAAQE,IAGzC9O,EACH,MAAO,CAAE0P,eAAAA,GAYX,GANEyO,EADEtgB,GAAU,CAACY,EAAAA,GAAAA,eAAkCA,EAAAA,GAAAA,iBAAmCY,SAASxB,IAC5EwgB,EAAAA,EAAAA,IAAwBxd,EAAQ+N,IAEhC0P,EAAAA,EAAAA,IAAmBzd,EAAQ+N,GAIxC/Q,IAAWY,EAAAA,GAAAA,QAA4BZ,IAAWY,EAAAA,GAAAA,MACpD2f,GAAgBG,EAAAA,EAAAA,IAAkB1d,EAAQ+N,EAAQC,KAAa2P,EAAAA,EAAAA,IAAgB3d,EAAQ+N,EAAQC,QAC1F,GAAIhR,IAAWY,EAAAA,GAAAA,YAA+B,CACnD,MAAMggB,GAAgBC,EAAAA,EAAAA,IAAyB7d,IACzC,SAAE8d,GAAcF,GAAiBA,EAAcG,eAAiBH,EAAcG,cAAcC,OAAU,GAC5GT,EAAgBO,EAGlB,MAAO,CACL/P,OAAAA,EACAC,SAAAA,EACAC,UAAAA,EACAK,SAAUnP,EAAQmP,SAClBtR,OAAAA,EACAmC,QAAAA,EACAme,aAAAA,EACAC,cAAAA,EACA1O,eAAAA,KAxFc9O,EArdgB,IAY9B,IAZ+B,OACnCgO,EADmC,SAEnCC,EAFmC,UAGnCC,EAHmC,SAInCK,EAJmC,OAKnCtR,EALmC,YAMnCuR,EANmC,kBAOnCJ,EAPmC,QAQnChP,EARmC,aASnCme,EATmC,cAUnCC,EAVmC,eAWnC1O,GACI,EACJ,MAAM,gBACJoP,EADI,iBAEJtC,EAFI,gBAGJuC,EAHI,aAIJtC,EAJI,eAKJC,IACE9a,EAAAA,EAAAA,MAEEY,EAAS9E,QAAQ0R,GAAeN,GAEhC4B,EAAoB7S,IAAWY,EAAAA,GAAAA,YAC/BkS,EAAe9S,IAAWY,EAAAA,GAAAA,aAG1BqR,EAAQ9P,GAAU+P,EAAAA,EAAAA,IAAgB/P,QAAWlE,EAC7CwP,EAAQtL,GAAUgQ,EAAAA,EAAAA,IAAgBhQ,QAAWlE,EAC7CmU,EAAejQ,GAAUkQ,EAAAA,EAAAA,IAAuBlQ,QAAWlE,EAC3DqU,EAAenQ,GAAUoQ,EAAAA,EAAAA,IAAuBpQ,QAAWlE,EAC3DuU,KAAkBrQ,IAAUsQ,EAAAA,EAAAA,IAAuBtQ,GACnDuQ,KAAkBvQ,IAAUwQ,EAAAA,EAAAA,IAAuBxQ,GACnDmB,GAAUzD,QAAQ4N,GAAS6E,GAAgBI,KAC3C,MAAEvG,IAAUsB,GAAS6E,GAAgB,GACrCM,GAAU/S,SAASyD,KAAY2O,GAASG,GAAgBI,KACxD/O,GAAW5D,QAAQ0R,GAGnB4P,GAAkB/O,GAAgBE,EAAerB,OAAYhT,EAE7DmjB,IAAa3c,EAAAA,EAAAA,KAAQ,IAClB0c,GACH,CAACA,KACDE,EAAAA,EAAAA,IAAuBf,GAAgB,GAAIC,GAAiB,GAAI1N,IACnE,CAACsO,GAAiBb,EAAcC,EAAe1N,IAE5CyO,GAA4BrQ,EAAYmQ,GAAWG,QAAQtQ,IAAc,EACzEuQ,GAAwC,IAA9BF,KAAkE,IAA/BA,GAC7CG,GAASH,KAA8BF,GAAW1e,OAAS,IAAoC,IAA/B4e,GAGhEI,IAAe7jB,EAAAA,EAAAA,MACf8jB,IAAe/B,EAAAA,EAAAA,GAAgCtO,IACjD3M,GAAYgd,IAAgBA,KAAiBrQ,GAAaoQ,GAAa1jB,UACzE0jB,GAAa1jB,QAAUsjB,IAEzB,MAAMM,GAAiB/P,GAAkB,IAAM9E,EAAAA,GAAe,WAAa,OACrE8U,GAAqC,IAAnBhQ,EAAuB,aAAe,OACxDkB,GAAsC,IAAnBlB,GAGlBiQ,GAAgBC,KAAqB3b,EAAAA,EAAAA,KAAS,IAC9C7C,GAAUye,KAAe5b,EAAAA,EAAAA,KAAkB,IAC3C8V,GAAW4D,KAAgB1Z,EAAAA,EAAAA,IAAiB,IAC5C+Q,GAAU8K,KAAe7b,EAAAA,EAAAA,IAAS,CACvCwP,EAAG,EACHC,EAAG,IAIL,SAAS7C,GAAaC,GACpB,GAAIxP,SAAkCxF,IAAtBkT,EAAiC,CAC/C,MAAM,OAAE+B,GAAW3B,EACnB,OAAO2B,GAAUA,EAAO/B,GACnB,QAAO+B,EAAO/B,GAAmB5P,aAClC4R,EAAAA,EAAAA,IAAkB5B,EAAc0B,EAAS,MAAQ,UAGvD,OAAO9Q,IAAWgC,EAAAA,EAAAA,IAAoBhC,EAAS8Q,EAAS,aAAe,iBAGzE,MAAMG,IAAmBC,EAAAA,EAAAA,GACvBlR,IAAY0Q,GAAqBC,KAAiB3O,EAAAA,EAAAA,IAAoBhC,EAAS,kBAC/ElE,EACAqV,EAAAA,GAAAA,aACArV,EACA8U,IAAoBoC,IAEhB5B,GAAmBP,KACnBQ,IAAiBH,EAAAA,EAAAA,GACrBE,QACAtV,EACAqV,EAAAA,GAAAA,aACArV,EACA8U,IAAoBoC,KAEd9R,UAAWoQ,KAAqBvP,EAAAA,EAAAA,GACtC8O,IAAa,QACb/U,EACAkE,IAAWuR,EAAAA,EAAAA,IAAsBvR,EAAS,mBAC1ClE,EACA8U,IAAoBoC,IAGhBxB,GAAgB1B,GAASxE,GAAUwE,GAASxE,GAAQmG,aAAU3V,EACpE,IAAI4V,IAAkBvQ,KAAYqQ,IAAgBF,KAAsBD,IAAkBJ,GAC1F,MAAMU,GAAepW,GAAamW,IAAiB1R,IAAW4R,EAAAA,EAAAA,IAA4B5R,IACrF0R,IAAiB7T,IAAWY,EAAAA,GAAAA,eAC/BiT,GAAgBC,IAGlB,MAAMtQ,GAAWrB,GACb+f,EAAAA,EAAAA,IAAmB/f,GACnBsB,GACG,SAAQ8N,EAAahQ,MAAM4P,aAC5BlT,EAEN,IAAIiW,GACA/R,EACEqQ,IAAmBE,GACrBwB,IAAaC,EAAAA,EAAAA,IAAmBhS,GAAUiS,UACjCnC,GAASG,EAClB8B,IAAaG,EAAAA,EAAAA,IAAwBpC,GAASG,IACrC3E,GAAS6E,KAClB4B,IAAaI,EAAAA,EAAAA,IAAoB7G,GAAS6E,IAG5C4B,GAAaK,EAAAA,IAGfnV,EAAAA,EAAAA,KAAU,KACH8F,EAAAA,IAILhF,SAASwJ,KAAKtJ,UAAU+hB,OAAO,uBAAwBxd,KACtD,CAACA,IAEJ,MAAM1F,IAAcC,EAAAA,EAAAA,MACpBE,EAAAA,EAAAA,KAAU,KACR,MAAMgjB,EAAM1iB,OAAO2iB,WAAWC,EAAAA,IAO9B,MANoC,mBAAzBF,EAAIzb,iBACbyb,EAAIzb,iBAAiB,SAAU1H,IACK,mBAApBmjB,EAAIG,aACpBH,EAAIG,YAAYtjB,IAGX,KACkC,mBAA5BmjB,EAAIxb,oBACbwb,EAAIxb,oBAAoB,SAAU3H,IACK,mBAAvBmjB,EAAII,gBACpBJ,EAAII,eAAevjB,OAGtB,CAACA,KAEJ,MAAMwjB,IAAc7C,EAAAA,EAAAA,GAAoCzd,GAClDugB,IAAa9C,EAAAA,EAAAA,GAAY5f,GACzB2iB,IAAkB/C,EAAAA,EAAAA,GAA2CrO,GAC7DqR,IAAoBhD,EAAAA,EAAAA,GAAY/L,IAChCa,GAAYvS,GAAUwS,EAAAA,EAAAA,GAAkBxS,QAAWlE,EACnD2W,GAAY/U,QAAQ6U,KAE1BtV,EAAAA,EAAAA,KAAU,KACJ2T,IAAoBpO,IAAW8d,KAAgBE,MACjDE,EAAAA,EAAAA,IAA4B1N,GAAqB2N,EAAAA,IbxOhD,SACLlO,EACA5U,EACA6T,EACAK,EACA5Q,EACAnB,GAEA,MAAQM,QAASsgB,GAAc7gB,EAASlC,EAAQmC,GAChD,IAAK4gB,EACH,OAGF,MAAQ1kB,MAAO2kB,GAAgBC,EAAAA,EAAAA,OAE7B5kB,MAAO6kB,EAAgBxkB,OAAQykB,IAC7BC,EAAAA,EAAAA,IAAkCxO,EAAWtR,IACzCjF,MAAOglB,EAAS3kB,OAAQ4kB,IAAaC,EAAAA,EAAAA,IAC3CL,EAAgBC,EAAiBjP,EAAW7V,MAAO6V,EAAWxV,QAE1D8kB,GAAUR,EAAcK,GAAW,EACnCI,EAyPR,SAAsB7O,GACpB,MAAMwN,EAAM1iB,OAAO2iB,WAAWC,EAAAA,IAC9B,IAAIoB,EAAe,MAKnB,OAJI9O,IAAc7H,EAAAA,KAChB2W,GAAgBtB,EAAIzG,QAAU,KAAQ,OAGjC+H,EAAeld,EAAAA,GAhQRmd,CAAa/O,IAAcuO,EAAkBG,GAAY,EAEvE,IACEtI,IAAK4I,EAAS/Z,KAAMga,EAAUxlB,MAAOylB,EAAWplB,OAAQqlB,GACtDhB,EAAUjZ,wBAEd,GAAI,CACFlJ,EAAAA,GAAAA,YACAA,EAAAA,GAAAA,MACAA,EAAAA,GAAAA,eACAA,EAAAA,GAAAA,cACAY,SAASxB,GAAS,CAClB,MAAMgkB,EAiMV,SAAiBC,EAAmBC,EAAoBlJ,EAAanR,EAAcxL,EAAeK,GAChG,GAAIulB,IAAcC,EAAY,CAC5B,MAAM3kB,EAAOiG,KAAK0E,IAAI7L,EAAOK,IAAWulB,EAAYC,GACpDra,IAAStK,EAAOlB,GAAS,EACzB2c,IAAQzb,EAAOb,GAAU,EACzBL,EAAQkB,EACRb,EAASa,OACJ,GAAI0kB,EAAYC,EAAY,CACjC,MAAMC,EAAW9lB,EAEjBwL,KADAxL,EAAQK,GAAUulB,EAAYC,IACbC,GAAY,OACxB,GAAID,EAAaD,EAAW,CACjC,MAAMG,EAAY1lB,EAElBsc,KADAtc,EAASL,GAAS6lB,EAAaD,IACdG,GAAa,EAGhC,MAAO,CACLpJ,IAAAA,EAAKnR,KAAAA,EAAMxL,MAAAA,EAAOK,OAAAA,GAnNA2lB,CAAQhB,EAASC,EAAUM,EAASC,EAAUC,EAAWC,GAC3EH,EAAUI,EAAUhJ,IACpB6I,EAAWG,EAAUna,KACrBia,EAAYE,EAAU3lB,MACtB0lB,EAAaC,EAAUtlB,OAGzB,MAAM4lB,EAAkBT,EAAWC,EAAY,GAAMN,EAASH,EAAU,GAClEkB,EAAkBX,EAAUG,EAAa,GAAMN,EAAQH,EAAW,GAClEkB,EAAaV,EAAYT,EACzBoB,EAAaV,EAAaT,EAE1BrjB,EAAQH,EAAY+T,GAAiBkP,GAC3CnhB,EAAY3B,EAAO,CACjB+a,IAAM,GAAEyI,MACR5Z,KAAO,GAAE2Z,MACTnlB,MAAQ,GAAEglB,MACV3kB,OAAS,GAAE4kB,MACXtF,UAAY,eAAcsG,QAAqBC,iBAA8BC,MAAeC,OAE9F9hB,EAAW1C,EAAOD,GAElBE,SAASwJ,KAAKtJ,UAAUC,IAAI,mBAE5BqkB,uBAAsB,KACpBxkB,SAASwJ,KAAK/I,YAAYV,GAE1BykB,uBAAsB,KACpBzkB,EAAMgC,MAAM+b,UAAY,GAyS9B,SAAoB/d,GACjBA,EAAM2C,WAA2BX,MAAMY,UAAY,UACpD5C,EAAMG,UAAUuJ,OAAO,kBAAmB,UA1StCgb,CAAW1kB,GAEXN,YAAW,KACT+kB,uBAAsB,KAChBxkB,SAASwJ,KAAKkb,SAAS3kB,IACzBC,SAASwJ,KAAKmb,YAAY5kB,GAE5BC,SAASwJ,KAAKtJ,UAAUuJ,OAAO,wBAvEd,IAyEGmZ,EAAAA,UakKxBgC,CAAelQ,GAAW5U,EAAS6T,GAAgBK,GAAY5Q,GAASnB,IAGtE4Q,KAAqBpO,IAAW8d,IAAeE,OACjDE,EAAAA,EAAAA,IAA4B1N,GAAqB2N,EAAAA,IbjKhD,SAAwB9iB,EAA2B6T,EAAuB1R,GAC/E,MAAM,UAAElB,EAAWwB,QAASsiB,GAAY7iB,EAASlC,EAAQmC,GACzD,IAAK4iB,EACH,OAGF,MAAMhC,EAAY7iB,SAAS8kB,eAAe,eAAgBlkB,cACxD,kEAEF,IAAKiiB,IAAcgC,EACjB,OAGF,MACE/J,IAAK4I,EAAS/Z,KAAMga,EAAUxlB,MAAOylB,EAAWplB,OAAQqlB,GACtDhB,EAAUjZ,yBAEZkR,IAAKiK,EAAWpb,KAAM2Z,EAAQnlB,MAAOglB,EAAS3kB,OAAQ4kB,GACpDyB,EAAQjb,wBAEZ,IAAI2Z,EAAQwB,EACZ,IAuJF,SAA6BC,GAC3B,GAAyB,SAArBA,EAAGjjB,MAAMkjB,QACX,OAAO,EAGT,MAAMC,EAAOF,EAAGpb,yBACRpL,OAAQ2mB,GAAiBpC,EAAAA,EAAAA,MAEjC,OAAQmC,EAAKpK,KAAOqK,GAAmBD,EAAKpK,IAAMoK,EAAK1mB,QAAW,EA/J7D4mB,CAAoBrkB,GAAY,CACnC,MAAQvC,OAAQ2mB,GAAiBpC,EAAAA,EAAAA,MACjCQ,EAAQwB,EAAYrB,GAAWN,EAAW+B,EAG5C,MAAMf,EAAkBT,EAAWC,EAAY,GAAMN,EAASH,EAAU,GAClEkB,EAAkBX,EAAUG,EAAa,GAAMN,EAAQH,EAAW,GACxE,IAAIkB,EAAaV,EAAYT,EACzBoB,EAAaV,EAAaT,EAE9B,MAAMiC,EACJ,CAAC3kB,EAAAA,GAAAA,OAA0BA,EAAAA,GAAAA,iBAAmCY,SAASxB,KACnEgB,EAA2BC,EAAW8jB,IAE1C,CAACnkB,EAAAA,GAAAA,MAAyBA,EAAAA,GAAAA,gBAAkCY,SAASxB,KACjEgB,EAA2BC,EAAW8jB,GAGxC,CACFnkB,EAAAA,GAAAA,YACAA,EAAAA,GAAAA,MACAA,EAAAA,GAAAA,eACAA,EAAAA,GAAAA,cACAY,SAASxB,KACLwkB,EAAaC,EACfD,EAAaC,EACJA,EAAaD,IACtBC,EAAaD,IAIjB,MAAMgB,EAAgBtlB,SAASulB,uBAAuB,SAAS,GAEzDxlB,EAAQulB,GAAiB1lB,EAAY+T,GAAiBkR,EAAS/kB,GAChEwlB,GACH5jB,EAAY3B,EAAO,CACjB+a,IAAM,GAAEyI,MACR5Z,KAAO,GAAE2Z,MACTnlB,MAAQ,GAAEglB,MACV3kB,OAAS,GAAE4kB,MACXtF,UAAY,eAAcsG,QAAqBC,iBAA8BC,MAAeC,OAIhGC,uBAAsB,KACpB,GAAIc,EAAe,CACjB,MAAM,IACJxK,EADI,KAEJnR,EAFI,MAGJxL,EAHI,OAIJK,GACE8mB,EAAc1b,wBAIlBlI,EAAY3B,EAAO,CACjBylB,WAAY,OACZ1K,IAAM,GAAEyI,MACR5Z,KAAO,GAAE2Z,MACTmC,gBAAiB,WACjB3H,UAAY,eAAcnU,EAAO2Z,QAAaxI,EAAMyI,iBARvCplB,EAAQglB,MACR3kB,EAAS4kB,KAQtBjlB,MAAQ,GAAEglB,MACV3kB,OAAS,GAAE4kB,QAGfpjB,SAASwJ,KAAKtJ,UAAUC,IAAI,mBACvBmlB,GAAetlB,SAASwJ,KAAK/I,YAAYV,GAE9CykB,uBAAsB,KAChBc,IACFA,EAAcvjB,MAAMyjB,WAAa,IAGnCzlB,EAAMgC,MAAM+b,UAAY,GAEpBuH,IACFtlB,EAAMgC,MAAM2jB,QAAU,KAGxBjjB,EAAW1C,EAAOD,GAElBL,YAAW,KACT+kB,uBAAsB,KAChBxkB,SAASwJ,KAAKkb,SAAS3kB,IACzBC,SAASwJ,KAAKmb,YAAY5kB,GAE5BC,SAASwJ,KAAKtJ,UAAUuJ,OAAO,wBAzLd,IA2LGmZ,EAAAA,UaqDxB+C,CAAenD,GAAaE,GAAoBH,SAAexkB,MAEhE,CACD8U,GAAkBpO,EAAQ3E,EAAQ0iB,GAAYvgB,EAASsgB,GAAaE,GACpE9O,GAAe+O,GAAmB1O,GAAY5Q,GAASsR,MAGzDxV,EAAAA,EAAAA,KAAU,KACR,IAAI0mB,EAUJ,OARIviB,GACFwe,IAAkB,GAElB+D,EAAQpmB,OAAOC,YAAW,KACxBoiB,IAAkB,KACjB5M,IAGE,KACD2Q,GACFpmB,OAAOP,aAAa2mB,MAGvB,CAACviB,KAEJ,MAAMwiB,GAAY,KAChB/D,IAAY,GACZlC,GAAa,GACbmC,GAAY,CACVrM,EAAG,EACHC,EAAG,KAIDmQ,IAAmB3hB,EAAAA,EAAAA,KAAY,KACnC2d,IAAaze,IACbuc,GAAcvc,GAAiB,EAAN,KACrBA,IACF0e,GAAY,CACVrM,EAAG,EACHC,EAAG,MAGN,CAACtS,KAEE0iB,IAAkB5hB,EAAAA,EAAAA,KAAY,SAAC6hB,GAAwC,IAAzBC,EAAyB,wDAC3ErG,GAAaoG,GACC,IAAVA,GAAeC,GACjBJ,OAED,IAEGK,IAAQ/hB,EAAAA,EAAAA,KAAY,KACxBsa,IACAoH,OACC,CAACpH,IAEE0H,IAAoBhiB,EAAAA,EAAAA,KAAY,KACpC+hB,KAEIlhB,EAAAA,GACFvF,YAAW,KACTkf,GAAe,EAAO,CAAEE,gBAAgB,IACxCH,EAAa,CAAE7N,OAAAA,EAAQC,SAAAA,EAAUC,UAAAA,MAChCkE,IAEHyJ,EAAa,CAAE7N,OAAAA,EAAQC,SAAAA,EAAUC,UAAAA,MAElC,CAACmV,GAAOrV,EAAQC,EAAU4N,EAAcC,EAAgB5N,IAErDqV,IAAgBjiB,EAAAA,EAAAA,KAAY,KAChC6c,EAAgB,CACdqF,WAAYxV,EACZqQ,WAAY,CAACnQ,KAEf8U,OACC,CAAC7E,EAAiBnQ,EAAQE,IAEvBsE,IAAgBlR,EAAAA,EAAAA,KAAa9C,GAAgB0f,EAAgB,CACjElQ,OAAAA,EACAC,SAAAA,EACAC,UAAW1P,EACXvB,OAAAA,GACC,CACDwmB,uBAAuB,KACrB,CAACzV,EAAQkQ,EAAiBjhB,EAAQgR,KAEtC5R,EAAAA,EAAAA,KAAU,IAAOuF,GAAS8hB,EAAAA,EAAAA,IAAsB,KAC1CljB,GACFwiB,KAEAK,aAECnoB,GAAY,CAACmoB,GAAOzhB,EAAQpB,MAEjCnE,EAAAA,EAAAA,KAAU,KACJkE,KAAY6I,KACdua,EAAAA,EAAAA,QAED,CAACva,GAAO7I,MAGXlE,EAAAA,EAAAA,KAAU,KACR,GAAKuF,EAML,OAFAse,EAAAA,EAAAA,iBAEO,KACLA,EAAAA,EAAAA,mBAED,CAACte,IAEJ,MAAM2Q,IAAejR,EAAAA,EAAAA,KAAY,CAACsiB,EAAiB/O,KACjD,IAAK+O,EAAQ,OACb,MAAMC,EAAQxF,GAAWG,QAAQoF,GACjC,OAAoB,IAAf/O,GAAoBgP,EAAQ,GAAqB,IAAdhP,GAAmBgP,EAAQxF,GAAW1e,OAAS,EAC9E0e,GAAWwF,EAAQhP,QAD5B,IAIC,CAACwJ,KAEEhG,GAAgB9F,GAAarE,EAAW,GACxCoK,GAAoB/F,GAAarE,GAAY,GAE7C4V,IAAYxiB,EAAAA,EAAAA,KAAY,CAACuR,EAAWC,KACxCoM,GAAY,CACVrM,EAAAA,EACAC,EAAAA,MAED,IAEGvR,IAAOC,EAAAA,EAAAA,KAoEb,OAlEAuiB,EAAAA,EAAAA,IAAeniB,EAAQga,EAAkBsC,EAAiB,CACxDlQ,OAAAA,EACAC,SAAAA,EACAC,UAAAA,EACAjR,OAAAA,EACAkR,cAAeK,GAAeA,EAAYhQ,MAG5CnC,EAAAA,EAAAA,KAAU,KACR,GAAKuF,EAoBL,OAFAzE,SAASyG,iBAAiB,UAAWogB,GAAe,GAE7C,KACL7mB,SAAS0G,oBAAoB,UAAWmgB,GAAe,IAjBzD,SAASA,EAAchgB,GACrB,OAAQA,EAAE+I,KACR,IAAK,OACL,IAAK,YACHyF,GAAc8F,IACd,MAEF,IAAK,QACL,IAAK,aACH9F,GAAc6F,QAUnB,CAACzW,EAAQyW,GAAeC,GAAmB9F,MAE9CnW,EAAAA,EAAAA,KAAU,KACR,GAAImE,IAAYwJ,EAAAA,GAAc,OAC9B,MAAMlL,EAAU3B,SAASY,cAA8B,6BACvD,IAAKe,EACH,OAGF,MAAMmlB,EAAqB7a,KAAUjB,EAAAA,GAErC,OAAOZ,EAAAA,EAAAA,IAAczI,EAAS,CAE5ByW,wBAA0B,8EAA6E0O,EAAwC,GAAnB,kBAC5HhiB,QAASohB,OAEV,CAACA,GAAOja,GAAO5I,GAAU0N,IAmB1B,mBAACgW,EAAA,EAAD,CACE1lB,GAAG,cACHwD,UAAWxB,GAAW,SAAW,GACjCoB,OAAQA,GAER,0BAAKI,UAAU,oBAAoBkC,IAAK3C,GAAK4iB,MAAQ,WAAQjpB,GAC1DiH,EAAAA,IACC,mBAACN,EAAA,EAAD,CACEG,UAAU,qBACVF,OAAK,EACLtF,KAAK,UACLuF,MAAM,oBACNG,UAAWX,GAAK,SAChBU,QAASohB,IAET,wBAAGrhB,UAAU,gBAGjB,mBAACya,EAAA,EAAD,CAAY2H,UAAWzF,GAAa1jB,QAAUopB,KAAMvF,IAlCjDpe,GACL,mBAAC,GAAD,CACEqM,IAAKyB,EAAahQ,GAClBwP,OAAQQ,EAAahQ,GACrBkC,UAAQ,IAGV,mBAAC,GAAD,CACEqM,IAAKmB,EACLF,OAAQA,EACRE,UAAWA,KA2BX,mBAAC,EAAD,CACE5N,UAAWoQ,IAAoBD,GAC/BlQ,QAASA,GACTC,SAAUA,GACVpB,QAASA,EACTqB,SAAUA,GACVE,mBAAoB0iB,GACpBziB,UAAW2iB,GACX1iB,aAAcoiB,GACdviB,SAAUA,MAGd,mBAAC,GAAD,CACEuY,QAAS8F,GACT7F,OAAQ1Y,GACR4Y,UAAWhF,GAASvB,EACpBwG,UAAWjF,GAAStB,EACpBqG,UAAWA,GACXG,MAAOwK,IAEP,mBAAC,GAAD,CACEM,UAAW7F,GACX8F,KAAMxF,KAEJhQ,GACA,mBAAC,GAAD,CACEX,UAAWA,EACXqE,aAAcA,GACdvE,OAAQA,EACR6B,QAASA,GACTzG,MAAOA,GACP6E,SAAUA,EACVE,cAAeK,GAAeA,EAAYhQ,GAC1C4P,kBAAmBA,EACnBnR,OAAQA,EACR2E,OAAQA,EACRiQ,UAAWA,GACXrR,SAAUA,GACVqO,SAAUA,EACVtO,QAASA,GACTuO,eAAgBA,EAChB9F,QAASqa,GACT7Q,cAAeA,GACfxD,cAAesU,SAKrB7E,KAAYzU,EAAAA,IACZ,6BACEmT,KAAK,SACLnb,UAAY,mBAAkBzB,KAAY6I,IAAS,WACnD,aAAY7H,GAAK,oBACjB2C,IAAK3C,GAAK4iB,MAAQ,WAAQjpB,EAC1B+G,QAAS,IAAMuQ,GAAc8F,OAG/BoG,KAAW1U,EAAAA,IACX,6BACEmT,KAAK,SACLnb,UAAY,mBAAkBzB,KAAY6I,IAAS,WACnD,aAAY7H,GAAK,QACjB2C,IAAK3C,GAAK4iB,MAAQ,WAAQjpB,EAC1B+G,QAAS,IAAMuQ,GAAc6F,MAGjC,mBAAC,GAAD,CACEqE,QAASlc,GACTmc,aAAcuG,U,6HC9ftB,MAkGA,IAAenjB,EAAAA,EAAAA,KAlGwB,IAYjC,IAZkC,OACtC6B,EADsC,cAEtC0iB,EAFsC,cAGtCC,EAHsC,UAItCC,EAJsC,OAKtCC,EALsC,kBAMtCC,EANsC,SAOtCC,EAPsC,eAQtCC,EARsC,mBAStCC,EATsC,QAUtC7b,EAVsC,oBAWtC8b,GACI,EACJ,MAAMvjB,GAAOC,EAAAA,EAAAA,MACNujB,EAAaC,IAAWC,EAAAA,GAAAA,GAAkBN,EAAUJ,EAAeznB,QAAQ2nB,IAE5ES,GAAc5jB,EAAAA,EAAAA,KAAY,KAC9BsjB,EAAe,MACd,CAACA,KACJO,EAAAA,GAAAA,GAAoBX,EAAW5iB,EAAQsjB,GAGvC,MAAMxS,GAAe5X,EAAAA,EAAAA,IAAuB,MACtCsqB,GAAqB9jB,EAAAA,EAAAA,KAAa0C,IACtC4gB,EAAe5gB,EAAEqI,cAAc/D,SAC9B,CAACsc,IACEZ,GAAgBqB,EAAAA,GAAAA,GAA0B3S,EAAc9Q,GAASiiB,IACjEkB,GAAeA,EAAYplB,OAAS,GACtCklB,EAAmBE,GAAuB,IAAXlB,EAAe,EAAIA,MAEnD,oBAAoB,GAEjByB,EACJ,0BAAKtjB,UAAU,eAAekC,IAAK3C,EAAK4iB,MAAQ,WAAQjpB,GACtD,mBAAC2G,EAAA,EAAD,CACEC,OAAK,EACLC,MAAM,cACNvF,KAAK,UACL0F,UAAWX,EAAK,SAChBU,QAAS+G,GAET,wBAAGhH,UAAU,gBAEf,mBAACujB,GAAA,EAAD,CACE1d,IAAK2c,EACLlc,MAAOmc,EACPlc,SAAU6c,EACVI,UAAWxB,EACXyB,YAAaf,KAKbgB,EAAiBnB,EAAe/F,QAAQuG,EAAa,IAE3D,OACE,mBAACY,GAAA,EAAD,CACE/jB,OAAQA,EACRI,UAAU,mBACV4jB,OAAQN,EACRtc,QAASA,EACT8b,oBAAqBA,GAEpBC,MAAAA,GAAAA,EAAaplB,OACZ,mBAACkmB,GAAA,EAAD,CACEhe,IAAK6K,EACL1Q,UAAU,4BACV8jB,MAAOf,EACPgB,WAAYf,EACZgB,yBAAuB,EACvBC,UAAW1B,EAAe5kB,OAASumB,EAAAA,GACnCV,UAAWxB,GAEVe,EAAYjd,KAAI,CAACtJ,EAAI2nB,IACpB,mBAACC,GAAA,EAAD,CACErZ,IAAKvO,EACLwD,UAAU,4CACV9C,MAAQ,SAAQwmB,EAAiBS,GAAKD,EAAAA,QAEtCjkB,QAAS,IAAM4iB,EAAmBrmB,KAEjCkd,EAAAA,EAAAA,IAASld,GACR,mBAAC6nB,GAAA,EAAD,CAAiBC,OAAQ9nB,IAAO8lB,EAAgB/iB,EAAK,0BAAuBrG,EAAWqrB,OAAQ/nB,IAE/F,mBAACgoB,GAAA,EAAD,CAAexY,OAAQxP,QAK7BumB,IAAgBA,EAAYplB,OAC9B,wBAAGqC,UAAU,cAAcT,EAAK,+BAEhC,mBAACklB,GAAA,EAAD,UChBR,IAAe1mB,EAAAA,EAAAA,KAAKC,EAAAA,EAAAA,KACjBC,IAAuB,MACtB,MACEymB,OACEC,KAAMC,EADD,QAELC,EAFK,iBAGLC,GAJE,cAMJxC,GACErkB,EAEJ,MAAO,CACL2mB,UAAAA,EACAG,cAAeF,EAAQG,OACvBC,gBAAiBJ,EAAQK,SACzBC,UAAWL,EAAiBE,OAC5BI,WAAU,UAAEnnB,EAAOonB,mBAAT,aAAE,EAAoBC,QAChChD,cAAAA,KAjBctkB,EAhF6B,IAQ3C,IAR4C,UAChD4mB,EADgD,cAEhDG,EAFgD,gBAGhDE,EAHgD,UAIhDE,EAJgD,WAKhDC,EALgD,cAMhD9C,EANgD,OAOhD1iB,GACI,EACJ,MAAM,iBACJ2lB,EADI,gBAEJC,IACExmB,EAAAA,EAAAA,MAEEO,GAAOC,EAAAA,EAAAA,MACNijB,EAAQgD,IAAapkB,EAAAA,EAAAA,IAAS,IAE/BmhB,GAAY1pB,EAAAA,EAAAA,IAAyB,OAEpC4hB,EAASgL,EAAaC,IAAiBrhB,EAAAA,GAAAA,MAC9CjK,EAAAA,EAAAA,KAAU,KACJuF,GACF8lB,MAED,CAAC9lB,EAAQ8lB,IAEZ,MAAME,GAAoBlmB,EAAAA,EAAAA,KAAQ,KAChC,IAAKE,EACH,OAGF,IAAIimB,EAAcV,GAAa,GAC3B7C,IACFuD,GAAcC,EAAAA,GAAAA,IAAO,CAACxD,KAAkBuD,KAG1C,MAAME,EAAU,IACVhB,GAAiB,MACjBE,GAAmB,IACvBxC,QAAQjmB,IACR,MAAM6d,EAAOuK,EAAUpoB,GAEvB,OAAO6d,IAAQ2L,EAAAA,EAAAA,IAAiB3L,EAAM4L,EAAAA,OAIlCC,GAAYC,EAAAA,EAAAA,MAAYC,MAAMzB,KAEpC,OAAO0B,EAAAA,EAAAA,KAAYP,EAAAA,GAAAA,IAAO,KACrBQ,EAAAA,EAAAA,IAAkB/mB,EAAMwmB,EAASnB,EAAWnC,EAAQH,MACnD8C,GAAamB,EAAAA,EAAAA,IAAkBnB,EAAYc,EAAWzD,GAAU,KAClEmC,OAAW1rB,EAAW2sB,KACzB,CAACd,EAAeE,EAAiBL,EAAWQ,EAAY9C,EAAeG,EAAQ7iB,EAAQL,EAAM4lB,IAE1FqB,GAAmBlnB,EAAAA,EAAAA,KAAailB,IACpCgB,EAAiB,CAAE/oB,GAAI+nB,MACtB,CAACgB,IAEEkB,GAA6BC,EAAAA,GAAAA,GAAiBd,GAAmB,GAEvE,GAAKhmB,GAAW8a,EAIhB,OACE,mBAAC,GAAD,CACE4H,cAAeA,EACf1iB,OAAQA,EACR2iB,cAAekE,EACfjE,UAAWA,EACXE,kBAAmBnjB,EAAK,aACxBkjB,OAAQA,EACRG,eAAgB6C,EAChB5C,mBAAoB2D,EACpBxf,QAASwe,EACT1C,oBAAqB6C,Q,eCuE3B,SAASgB,GAAeC,GACtB,OAAIA,EAAMC,WACD,mBAGJD,EAAME,YAIJ,uBAHE,WAMX,UAAe/oB,EAAAA,EAAAA,KAAKC,EAAAA,EAAAA,KACjBC,IAAuB8oB,EAAAA,GAAAA,IAAK9oB,EAAQ,CAAC,aADpBD,EAxKY,IAAiB,IAAhB,QAAEgpB,GAAc,EAC/C,MAAM,cACJC,EADI,yBAEJC,EAFI,YAGJC,EAHI,iBAIJC,IACEpoB,EAAAA,EAAAA,OACGqoB,EAAaC,EAAWC,IAAcjjB,EAAAA,GAAAA,KAEvC/E,GAAOC,EAAAA,EAAAA,KAgISgoB,IAAAA,EAjDQC,EAgCTb,EAvGrB,IANAvsB,EAAAA,EAAAA,KAAU,KACJ2sB,EAAQrpB,OAAS,GACnB2pB,MAED,CAACN,EAASM,IAERN,EAAQrpB,OAoIb,OACE,0BAAKnB,GAAG,WACL1B,QAAQksB,EAAQrpB,UAbf,SADgB6pB,EAcuBR,EAAQA,EAAQrpB,OAAS,IApHhD+pB,CAAAA,IACpB,MAAM,KACJC,EADI,MACEC,EADF,MACSC,EADT,kBACgBC,EADhB,UACmCC,EADnC,MAC8C7a,EAD9C,gBACqD8a,GACvDN,EAYEO,EACF1oB,EADqBwoB,EAChB,cACA,UADeD,EAAmB,KAGrCI,EAAuB3oB,EAAZwoB,EAAiB,cAAsB,aAClDI,EACF5oB,EADsBwoB,EACjB,sCAA8C,qCAEvD,OACE,mBAACpE,GAAA,EAAD,CACE/jB,OAAQynB,EACRrgB,QAASugB,EACTvnB,UAAU,QACV4jB,OAAQwE,EAAmBR,EAAO1a,GAClC4V,oBAAqBmE,QAEE/tB,IAAtB4uB,GAAmC,wBAAG9nB,UAAU,cAAcioB,GAC9DJ,GAAS,wBAAG7nB,UAAU,gBAAesa,EAAAA,GAAAA,GAAWuN,EAAO,CAAC,QACxDG,GACC,wBAAGhoB,UAAU,cAEPT,EADHwoB,EACQ,iDACA,iDAGb,mBAACloB,EAAA,EAAD,CACEwoB,QAAM,EACNroB,UAAU,wBAEVC,QAvCkB,KACtBinB,EAAyB,CACvBS,KAAAA,IAEFP,EAAiB,CACfhqB,QAAqBmC,EAAZwoB,EAAiB,sCAA8C,uCAE1ER,MAkCKS,EAAkBG,EAAoBD,GAEzC,mBAACroB,EAAA,EAAD,CAAQwoB,QAAM,EAACroB,UAAU,wBAAwBC,QAASsnB,GAAahoB,EAAK,aAwDvE+oB,CAAad,GAGlB,gBAAiBA,GAtDOC,EAuDED,EA9C5B,mBAAC7D,GAAA,EAAD,CACE/jB,OAAQynB,EACRrgB,QAASugB,EACTvnB,UAAU,UACV4nB,MAAOroB,EAAK,4BACZujB,oBAAqBmE,GAEpB1nB,EAAK,mCACN,8BACE,mBAACM,EAAA,EAAD,CACEG,UAAU,wBACVqoB,QAAM,EAENpoB,QArBc,KACpBknB,EAAY,CACVoB,SAASxB,EAAAA,GAAAA,IAAKU,EAAgB,CAAC,YAAa,WAAY,kBAE1DF,MAmBOhoB,EAAK,OAER,mBAACM,EAAA,EAAD,CAAQG,UAAU,wBAAwBqoB,QAAM,EAACpoB,QAASsnB,GAAahoB,EAAK,eAM/DqnB,EA0BAY,EAxBjB,mBAAC7D,GAAA,EAAD,CACE/jB,OAAQynB,EACRrgB,QAASugB,EACTzE,oBAAqBmE,EACrBjnB,UAAU,QACV4nB,MAAOjB,GAAeC,IAErBA,EAAME,aAAc0B,EAAAA,GAAAA,IAAqB5B,IAAStM,EAAAA,GAAAA,GAAWsM,EAAMxpB,QAAU,CAAC,QAAS,OACxF,8BACE,mBAACyC,EAAA,EAAD,CAAQwoB,QAAM,EAACpoB,QAASsnB,GAAahoB,EAAK,YA9GlD,SAAS6oB,EAAmBR,EAAe1a,GACzC,OACE,0BAAKlN,UAAU,gBACZkN,GAAS,mBAACiN,GAAA,EAAD,CAAQ3f,KAAK,QAAQ0S,MAAOA,IACtC,0BAAKlN,UAAU,gBACZsa,EAAAA,GAAAA,GAAWsN,IAEd,mBAAC/nB,EAAA,EAAD,CAAQC,OAAK,EAACC,MAAM,cAAcvF,KAAK,UAAU0F,UAAWX,EAAK,SAAUU,QAASsnB,GAClF,wBAAGvnB,UAAU,sB,eCtCvB,MAoBA,IAAejC,EAAAA,EAAAA,KAAKC,EAAAA,EAAAA,KACjBC,IAAuB8oB,EAAAA,GAAAA,IAAK9oB,EAAQ,CAAC,mBADpBD,EApBkB,IAAuB,IAAtB,cAAEyqB,GAAoB,EAC3D,MAAM,oBAAEC,IAAwB1pB,EAAAA,EAAAA,MAEhC,GAAKypB,EAAc9qB,OAInB,OACE,0BAAKnB,GAAG,iBACLisB,EAAc3iB,KAAI,QAAC,QAAE1I,EAAF,QAAWurB,GAAZ,SACjB,mBAACC,GAAA,EAAD,CACExrB,SAASkd,EAAAA,GAAAA,GAAWld,EAAS,CAAC,QAAS,KAAM,QAAS,oBAEtDyrB,UAAW,IAAMH,EAAoB,CAAEC,QAAAA,c,0BCbjD,MA4BA,IAAe5qB,EAAAA,EAAAA,KA5BqB,IAAa,IAAZ,IAAEoJ,GAAU,EAC/C,MAAM,oBAAE2hB,IAAwB9pB,EAAAA,EAAAA,MAE1BO,GAAOC,EAAAA,EAAAA,KAEPupB,GAAazpB,EAAAA,EAAAA,KAAY,KAC7B3E,OAAOquB,MAAKC,EAAAA,GAAAA,GAAe9hB,IAC3B2hB,EAAoB,CAAE3hB,SAAKjO,MAC1B,CAAC4vB,EAAqB3hB,IAEnB+hB,GAAgB5pB,EAAAA,EAAAA,KAAY,KAChCwpB,EAAoB,CAAE3hB,SAAKjO,MAC1B,CAAC4vB,IAEEK,GAAezC,EAAAA,GAAAA,GAAiBvf,GAEtC,OACE,mBAACiiB,GAAA,EAAD,CACExpB,OAAQ9E,QAAQqM,GAChBH,QAASkiB,EACTtB,MAAOroB,EAAK,gBACZoQ,WAAW2K,EAAAA,GAAAA,GAAW/a,EAAK,gBAAiB4pB,GAAe,CAAC,UAC5DE,aAAc9pB,EAAK,gBACnB+pB,eAAgBP,OCtBhBQ,GAAgB,aAkBhBC,GAAkB,CACtB,eACA,eACA,eACA,eACA,eACA,eACA,gBAkUF,SAASC,GAAcC,EAAcC,EAAeC,EAAaC,EAAgBC,GAC/E,MAAMC,EAAc,IAAIvX,KAAKkX,EAAMC,EAAOC,GACpCI,EAAeH,IAAWI,EAAAA,GAAAA,IAAYJ,GACtCK,EAAeJ,IAAWG,EAAAA,GAAAA,IAAYH,GAE5C,SAAII,GAAgBH,EAAcG,OAEvBF,GAAgBD,EAAcC,GAO3C,SAASG,GAAgB7jB,GACvB,OAAO8jB,OAAO9jB,GAAO+jB,SAAS,EAAG,KAGnC,SAASC,GAAUZ,EAAcC,EAAeC,GAC9C,MAAQ,GAAEF,KAAQC,EAAQ,KAAKC,IAcjC,UAAe7rB,EAAAA,EAAAA,KAhWqB,IAa9B,IAb+B,WACnCwsB,EADmC,MAEnCC,EAFmC,MAGnCC,EAHmC,aAInCC,EAJmC,WAKnCC,EALmC,OAMnC/qB,EANmC,eAOnCgrB,EAPmC,kBAQnCC,EARmC,kBASnCC,EATmC,QAUnC9jB,EAVmC,SAWnC+jB,EAXmC,oBAYnCC,GACI,EACJ,MAAMzrB,GAAOC,EAAAA,EAAAA,KACPiT,EAAM,IAAID,KAEVqX,GAAUnqB,EAAAA,EAAAA,KAAQ,IAClBgrB,IAAiBF,EAAc,IAAIhY,KAChC,IAAIA,KAAK/R,KAAK0E,IAAIqlB,GA9CP,OA+CjB,CAACE,EAAcF,IACZV,GAAUpqB,EAAAA,EAAAA,KAAQ,IAClBirB,IAAeF,EAAc,IAAIjY,KAC9B,IAAIA,KAAK/R,KAAK2E,IAAIqlB,GAASlB,GAAeA,MAChD,CAACoB,EAAYF,IAEVQ,GAAqBvrB,EAAAA,EAAAA,KAAQ,IAAO6qB,EAAa,IAAI/X,KAAK+X,GAAc,IAAI/X,MAAS,CAAC+X,IACtFW,GAAarQ,EAAAA,EAAAA,GAAYjb,IACxBurB,EAAoBC,EAAwBC,IAA4B/mB,EAAAA,GAAAA,IAAQ,IAEhFgnB,EAAcC,IAAmBlqB,EAAAA,EAAAA,IAAe4pB,IAChDO,EAAqBC,IAA0BpqB,EAAAA,EAAAA,IACpD,IAAImR,KAAK8Y,EAAaI,cAAeJ,EAAaK,WAAY,KAEzDC,EAAeC,IAAoBxqB,EAAAA,EAAAA,IACxC8oB,GAAgBc,EAAmBa,cAE9BC,EAAiBC,IAAsB3qB,EAAAA,EAAAA,IAC5C8oB,GAAgBc,EAAmBgB,eAG/BlC,EAAcO,GAAUgB,EAAaI,cAAeJ,EAAaK,WAAYL,EAAaY,WAC1FC,EAAcX,EAAoBE,cAClCU,EAAeZ,EAAoBG,YAEzCtxB,EAAAA,EAAAA,KAAU,MACH6wB,GAActrB,IACjB2rB,EAAgBN,GAChBQ,EAAuB,IAAIjZ,KAAKyY,EAAmBS,cAAeT,EAAmBU,WAAY,IAC7Ff,IACFiB,EAAiB1B,GAAgBc,EAAmBa,aACpDE,EAAmB7B,GAAgBc,EAAmBgB,mBAGzD,CAAChB,EAAoBrrB,EAAQsrB,EAAYN,KAE5CvwB,EAAAA,EAAAA,KAAU,KACJqwB,IAAiBS,GAAsBG,EAAae,UAAYxC,EAAQwC,YAC1Ed,EAAgB1B,GAChBgC,EAAiB1B,GAAgBN,EAAQiC,aACzCE,EAAmB7B,GAAgBN,EAAQoC,kBAE5C,CAACvB,EAAcS,EAAoBtB,EAASyB,KAE/CjxB,EAAAA,EAAAA,KAAU,KACJswB,IAAeQ,GAAsBG,EAAae,UAAYvC,EAAQuC,YACxEd,EAAgBzB,GAChB+B,EAAiB1B,GAAgBL,EAAQgC,aACzCE,EAAmB7B,GAAgBL,EAAQmC,kBAE5C,CAACvB,EAAcC,EAAYQ,EAAoBrB,EAASD,EAASyB,KAEpEjxB,EAAAA,EAAAA,KAAU,KACR,GAAIkwB,EAAY,CACd,MAAM+B,EAAkB,IAAI9Z,KAAK+X,GACjCgB,EAAgBe,GAChBT,EAAiB1B,GAAgBmC,EAAgBR,aACjDE,EAAmB7B,GAAgBmC,EAAgBL,kBAEpD,CAAC1B,IAEJ,MAAMgC,EAA0B5B,GAAcwB,GAAe1Z,EAAIiZ,eAAiBU,GAAgB3Z,EAAIkZ,YAChG7B,GAAWqC,GAAerC,EAAQ4B,eAAiBU,GAAgBtC,EAAQ6B,WAC3Ea,EAAyB9B,GAAgByB,GAAe1Z,EAAIiZ,eAAiBU,GAAgB3Z,EAAIkZ,YAEjG,cAAEc,EAAF,iBAAiBC,EAAjB,cAAmCC,IAAkBjtB,EAAAA,EAAAA,KAAQ,IA0MrE,SAA2BgqB,EAAcC,GACvC,MAAM8C,EAA0B,GAC1BC,EAA6B,GAC7BC,EAA0B,GAE1BnS,EAAO,IAAIhI,KACjBgI,EAAKoS,QAAQ,GACbpS,EAAKqS,SAASlD,GACdnP,EAAKsS,YAAYpD,GACjB,MAAMqD,EAAWvS,EAAKwS,UAAY,EAC5BC,EAAuB,IAAIza,KAAKkX,EAAMC,EAAO,GAAGuC,UAEtD,IAAK,IAAI/H,EAAI,EAAGA,EAAI4I,EAAU5I,IAC5BsI,EAAcS,KAAKD,EAAuBF,EAAW5I,EAAI,GAG3D,KAAO3J,EAAKmR,aAAehC,GAAO,CAChC,MAAMwD,EAAW3S,EAAK0R,UACtBQ,EAAiBQ,KAAKC,GACtB3S,EAAKoS,QAAQO,EAAW,GAG1B,MAAMC,GAAoBV,EAAiB/uB,OAAS8uB,EAAc9uB,QAAU,EAC5E,GAAIyvB,EAAmB,EACrB,IAAK,IAAIjJ,EAAI,EAAGA,GAAK,EAAIiJ,EAAkBjJ,IACzCwI,EAAcO,KAAK/I,GAIvB,MAAO,CAAEsI,cAAAA,EAAeC,iBAAAA,EAAkBC,cAAAA,GAtOxCU,CAAkBlB,EAAaC,IAC9B,CAACA,EAAcD,IAEZmB,GAAc5tB,EAAAA,EAAAA,KAAQ,IACnBmrB,GA2PX,SAA2BtrB,EAAcib,GACvC,MAAMoP,GAAM2D,EAAAA,GAAAA,IAAmB/S,EAAMjb,EAAKiuB,MAG1C,OAAI5D,KAFU2D,EAAAA,GAAAA,IAAmB,IAAI/a,KAAQjT,EAAKiuB,MAGzCjuB,EAAK,0CAA0CkuB,EAAAA,GAAAA,IAAWluB,EAAMib,IAGlEjb,EAAK,sCAAuC,CAACqqB,GAAK6D,EAAAA,GAAAA,IAAWluB,EAAMib,KAnQ5CkT,CAAkBnuB,EAAM+rB,IACnD,CAAC/rB,EAAM+rB,EAAcT,IA+BlB8C,GAAeruB,EAAAA,EAAAA,KAAY,KAC/ByrB,EAASO,KACR,CAACP,EAAUO,IAERsC,GAAoBtuB,EAAAA,EAAAA,KAAa0C,IACrC,MAAMsE,EAAQtE,EAAEmI,OAAO7D,MAAMunB,QAAQ,UAAW,IAChD,IAAKvnB,EAAM3I,OAGT,OAFAkuB,EAAiB,SACjB7pB,EAAEmI,OAAO7D,MAAQ,IAInB,MAAMwnB,EAAQrtB,KAAK0E,IAAI,EAAG1E,KAAK2E,IAAIgW,OAAO9U,GAAQ,KAE5CkU,EAAO,IAAIhI,KAAK8Y,EAAae,WACnC7R,EAAKuT,SAASD,GACdvC,EAAgB/Q,GAEhB,MAAMwT,EAAW7D,GAAgB2D,GACjCjC,EAAiBmC,GACjBhsB,EAAEmI,OAAO7D,MAAQ0nB,IAChB,CAAC1C,IAEE2C,GAAsB3uB,EAAAA,EAAAA,KAAa0C,IACvC,MAAMsE,EAAQtE,EAAEmI,OAAO7D,MAAMunB,QAAQ,UAAW,IAChD,IAAKvnB,EAAM3I,OAGT,OAFAquB,EAAmB,SACnBhqB,EAAEmI,OAAO7D,MAAQ,IAInB,MAAM4nB,EAAUztB,KAAK0E,IAAI,EAAG1E,KAAK2E,IAAIgW,OAAO9U,GAAQ,KAE9CkU,EAAO,IAAIhI,KAAK8Y,EAAae,WACnC7R,EAAK2T,WAAWD,GAChB3C,EAAgB/Q,GAEhB,MAAM4T,EAAajE,GAAgB+D,GACnClC,EAAmBoC,GACnBpsB,EAAEmI,OAAO7D,MAAQ8nB,IAChB,CAAC9C,IA4BJ,OACE,mBAAC3H,GAAA,EAAD,CACE/jB,OAAQA,EACRoH,QAASA,EACThH,UAAU,iBAEV,0BAAKA,UAAU,aACb,0BAAKA,UAAU,kBACb,mBAACH,EAAA,EAAD,CACEC,OAAK,EACLtF,KAAK,UACLuF,MAAM,cACNE,QAAS+G,GAET,wBAAGhH,UAAU,gBAGf,6BACGT,EAAM,YAAW6sB,EAAe,KAChC,IACAD,GAGH,mBAACtsB,EAAA,EAAD,CACEC,OAAK,EACLtF,KAAK,UACLuF,MAAM,cACNmH,SAAUslB,EACVvsB,QAAUusB,OAA2CtzB,EA7H/D,WACEuyB,GAAwB4C,IACtB,MAAMC,EAAW,IAAI9b,KAAK6b,GAG1B,OAFAC,EAASzB,SAASyB,EAAS3C,WAAa,GAEjC2C,OA0HD,wBAAGtuB,UAAU,mBAGf,mBAACH,EAAA,EAAD,CACEC,OAAK,EACLtF,KAAK,UACLuF,MAAM,cACNmH,SAAUqlB,EACVtsB,QAAUssB,OAA2CrzB,EA9H/D,WACEuyB,GAAwB4C,IACtB,MAAMC,EAAW,IAAI9b,KAAK6b,GAG1B,OAFAC,EAASzB,SAASyB,EAAS3C,WAAa,GAEjC2C,OA2HD,wBAAGtuB,UAAU,iBAKnB,0BAAKA,UAAU,oBACb,0BAAKA,UAAU,iBACZwpB,GAAgB1jB,KAAK8jB,GACpB,0BAAK5pB,UAAU,4BACb,+BAAOT,EAAKqqB,OAGf6C,EAAc3mB,KAAKqnB,GAClB,0BAAKntB,UAAU,uBAAsB,+BAAOmtB,MAE7CT,EAAiB5mB,KAAKqnB,GACrB,0BACEoB,KAAK,SACLC,SAAU,EACVvuB,QAAS,KAAMwuB,OA1IDjU,EA0IkB2S,OAzI1C5B,GAAiB8C,IACf,MAAMC,EAAW,IAAI9b,KAAK6b,GAK1B,OAJAC,EAAS1B,QAAQpS,GACjB8T,EAASzB,SAAST,GAClBkC,EAASxB,YAAYX,GAEdmC,KAPX,IAA0B9T,GA2Idxa,WAAW+B,EAAAA,EAAAA,GACT,aACA0nB,GACE0C,EAAaC,EAAce,EAAUtD,EAASC,GAE5C,WACGqD,EAAW,YAAc,GAChCpD,IAAgBO,GAAU6B,EAAaC,EAAce,IAAa,aAGnEryB,QAAQqyB,IACP,+BAAOA,MAIZR,EAAc7mB,KAAKqnB,GAClB,0BAAKntB,UAAU,uBAAsB,+BAAOmtB,QAKjDvC,GAzGD,0BAAK5qB,UAAU,cACb,4BACEmb,KAAK,OACLnb,UAAU,eACV0uB,UAAU,UACVpoB,MAAOslB,EACPrlB,SAAUqnB,EACVe,QAASvD,EACTwD,OAAQvD,IARZ,IAWE,4BACElQ,KAAK,OACLnb,UAAU,eACV0uB,UAAU,UACVpoB,MAAOylB,EACPxlB,SAAU0nB,EACVU,QAASvD,EACTwD,OAAQvD,KAyFZ,0BAAKrrB,UAAU,UACb,mBAACH,EAAA,EAAD,CAAQI,QAAS0tB,GACdL,GAEFxC,GACC,mBAACjrB,EAAA,EAAD,CAAQI,QAAS+qB,EAAqB3C,QAAM,GACzCyC,QC3Rb,IAAe/sB,EAAAA,EAAAA,KAAKC,EAAAA,EAAAA,KACjBC,IACQ,CAAEssB,WAAYtsB,EAAO4wB,6BAFZ7wB,EAxB+B,IAE7C,IAF8C,OAClD4B,EADkD,WAC1C2qB,GACJ,EACJ,MAAM,qBAAEuE,EAAF,qBAAwBC,IAAyB/vB,EAAAA,EAAAA,MAEjDgwB,GAAmB1vB,EAAAA,EAAAA,KAAakb,IACpCsU,EAAqB,CAAEG,UAAWzU,EAAK0U,UAAY,MACnDH,MACC,CAACA,EAAsBD,IAEpBvvB,GAAOC,EAAAA,EAAAA,KAEb,OACE,mBAAC,GAAD,CACEI,OAAQA,EACR2qB,WAAYA,EACZI,YAAU,EACVE,kBAAmBtrB,EAAK,cACxByH,QAAS+nB,EACThE,SAAUiE,Q,0BCVhB,MAyMA,IAAejxB,EAAAA,EAAAA,KAAKC,EAAAA,EAAAA,KAClB,CAACC,EAAD,KAAoC,IAA3B,OAAEsmB,GAAyB,EAClC,MAAO,CACLnK,KAAMmK,GAAS9X,EAAAA,EAAAA,IAAWxO,EAAQsmB,QAAUrrB,EAC5Ci2B,WAAY5K,GAAS6K,EAAAA,EAAAA,IAAiBnxB,EAAQsmB,QAAUrrB,EACxDm2B,iBAAkBpxB,EAAOoxB,iBACzBC,cAAerxB,EAAOsxB,YAAYC,cANpBxxB,EA1L+B,IAQ7C,cAR8C,OAClD4B,EADkD,OAElD2kB,EAFkD,gBAGlDkL,EAHkD,KAIlDrV,EAJkD,WAKlD+U,EALkD,cAMlDG,EANkD,iBAOlDD,GACI,EACJ,MAAM,cAAEK,EAAF,cAAiBC,EAAjB,sBAAgCC,IAA0B5wB,EAAAA,EAAAA,MAE1DO,GAAOC,EAAAA,EAAAA,KACPqwB,GAAgBnJ,EAAAA,GAAAA,GAAiBtM,GACjC0V,GAA2BpJ,EAAAA,GAAAA,GAAiB+I,GAE5C3U,GAAWhiB,EAAAA,EAAAA,IAAyB,OAEnC4hB,EAASgL,EAAaC,IAAiBrhB,EAAAA,GAAAA,MACvCyrB,EAAWC,IAAgB3uB,EAAAA,EAAAA,IAAQ,UAASwuB,MAAAA,OAAT,EAASA,EAAeE,iBAAxB,QAAqC,KACxEE,EAAUC,IAAe7uB,EAAAA,EAAAA,IAAQ,UAASwuB,MAAAA,OAAT,EAASA,EAAeI,gBAAxB,QAAoC,KACrEE,EAAOC,IAAY/uB,EAAAA,EAAAA,IAAQ,UAASwuB,MAAAA,OAAT,EAASA,EAAeQ,mBAAxB,QAAuC,KAClEC,EAAwBC,IAA6BlvB,EAAAA,EAAAA,KAAkB,GACxEmvB,EAAiB11B,QAAQi1B,KAAeN,GAAmBU,KAEjE91B,EAAAA,EAAAA,KAAU,KACI,UAARuF,IACF8lB,IACAsK,EAAY,UAACH,MAAAA,OAAD,EAACA,EAAeE,iBAAhB,QAA6B,IACzCG,EAAW,UAACL,MAAAA,OAAD,EAACA,EAAeI,gBAAhB,QAA4B,IACvCG,EAAQ,UAACP,MAAAA,OAAD,EAACA,EAAeQ,mBAAhB,QAA+B,IACvCE,GAA0B,MAE3B,CAAC3wB,EAAQ8lB,EAAamK,MAAAA,OAAtB,EAAsBA,EAAeE,UAAWF,MAAAA,OAAhD,EAAgDA,EAAeI,SAAUJ,MAAAA,OAAzE,EAAyEA,EAAeQ,eAE3Fh2B,EAAAA,EAAAA,KAAU,MACH2N,EAAAA,IAAgB0S,GACnB9f,YAAW,KAAM,MAAE,UAAAkgB,EAAS7hB,eAAT,SAAkBw3B,UAnDhB,OAqDtB,CAAC/V,IAEJ,MAAMgW,GAAwBpxB,EAAAA,EAAAA,KAAa0C,IACzCguB,EAAahuB,EAAEmI,OAAO7D,SACrB,IAEGqqB,GAAoBrxB,EAAAA,EAAAA,KAAa0C,IACrCouB,GAASQ,EAAAA,GAAAA,IAA0BtB,EAAettB,EAAEmI,OAAO7D,UAC1D,CAACgpB,IAEEuB,GAAuBvxB,EAAAA,EAAAA,KAAa0C,IACxCkuB,EAAYluB,EAAEmI,OAAO7D,SACpB,IAEGwqB,GAAcxxB,EAAAA,EAAAA,KAAY,KAC9BswB,IACAI,EAAa,IACbE,EAAY,IACZE,EAAS,MACR,CAACR,IAEEjC,GAAeruB,EAAAA,EAAAA,KAAY,KAC3BmwB,IAAoBlL,EACtBoL,EAAc,CACZI,UAAAA,EACAE,SAAAA,EACAI,YAAaF,IAGfT,EAAc,CACZnL,OAAAA,EACAwL,UAAAA,EACAE,SAAAA,EACAK,uBAAAA,MAGH,CAACP,EAAWJ,EAAeF,EAAiBQ,EAAUE,EAAOG,EAAwBZ,EAAenL,IAEvG,GAAK3kB,GAAW8a,EA+EhB,OACE,mBAACiJ,GAAA,EAAD,CACE3jB,UAAU,kBACV4nB,MAAOroB,EAAK,cACZK,OAAQA,EACRoH,QAAS8pB,EACThO,oBAAqB6C,GAEpBkK,GAjFD,sCACE,0BAAK7vB,UAAU,2BAA2BkC,IAAK3C,EAAK4iB,MAAQ,WAAQjpB,GAClE,mBAACihB,GAAA,EAAD,CAAQ3f,KAAK,QAAQ4f,KAAMyV,EAAe7uB,KAAO,GAAE+uB,KAAaE,MAChE,0BAAKjwB,UAAU,iCACb,wBAAGA,UAAU,iCACV6vB,MAAAA,GAAAA,EAAeQ,aACZO,EAAAA,GAAAA,IAA0BtB,EAAeO,EAAcQ,aACvD9wB,EAAK,iBAEX,2BAAMS,UAAU,+BAA+BkC,IAAI,SAChD6uB,EAAAA,EAAAA,IAAcxxB,EAAMswB,EAAgBV,EAAYE,MAIvD,mBAAC9L,GAAA,EAAD,CACE1d,IAAKiV,EACLxU,MAAOypB,EACPiB,MAAOzxB,EAAK,aACZivB,SAAU,EACVjoB,SAAUmqB,IAEZ,mBAACnN,GAAA,EAAD,CACEjd,MAAO2pB,EACPe,MAAOzxB,EAAK,YACZivB,SAAU,EACVjoB,SAAUsqB,IAEZ,wBAAG7wB,UAAU,+BACVsa,EAAAA,GAAAA,GAAW/a,EAAK,+BAAgCswB,MAAAA,OAAjC,EAAiCA,EAAeE,WAAY,CAAC,QAAS,qBAExF,mBAACkB,GAAA,EAAD,CACEC,QAASZ,EACT9B,SAAU,EACV2C,QAASZ,EACTS,MAAOzxB,EAAK,2BAEd,wBAAGS,UAAU,+BACVsa,EAAAA,GAAAA,GAAW/a,EAAK,wCAAyCswB,MAAAA,OAA1C,EAA0CA,EAAeE,cA6C5ED,GArCD,0BAAK9vB,UAAU,+BAA+BkC,IAAK3C,EAAK4iB,MAAQ,WAAQjpB,GACtE,mBAACihB,GAAA,EAAD,CAAQ3f,KAAK,QAAQwG,KAAO,GAAE+uB,KAAaE,MAC3C,0BAAKjwB,UAAU,yCACb,mBAACujB,GAAA,EAAD,CACE1d,IAAKiV,EACLxU,MAAO6pB,EACPzB,UAAU,MACVsC,MAAOzxB,EAAK,qBACZivB,SAAU,EACVjoB,SAAUoqB,IAEZ,mBAACpN,GAAA,EAAD,CACEjd,MAAOypB,EACPiB,MAAOzxB,EAAK,aACZivB,SAAU,EACVjoB,SAAUmqB,IAEZ,mBAACnN,GAAA,EAAD,CACEjd,MAAO2pB,EACPe,MAAOzxB,EAAK,YACZivB,SAAU,EACVjoB,SAAUsqB,MAiBhB,0BAAK7wB,UAAU,kBACb,mBAACH,EAAA,EAAD,CACEwoB,QAAM,EACNroB,UAAU,wBACVC,QAAS6wB,GAERvxB,EAAK,WAER,mBAACM,EAAA,EAAD,CACEwoB,QAAM,EACNroB,UAAU,wBACVkH,UAAWspB,EACXvwB,QAAS0tB,GAERpuB,EAAK,eC5GhB,IAAexB,EAAAA,EAAAA,KAAKC,EAAAA,EAAAA,KAClB,CAACC,EAAD,KAAiD,IAAxC,QAAEb,EAAF,WAAWg0B,GAA6B,EAC/C,MAAM,SAAEnlB,IAAaolB,EAAAA,EAAAA,IAAyBpzB,IAAW,IACnD,gBAAEqzB,GAAqBrlB,IAAYslB,EAAAA,EAAAA,IAA4BtzB,EAAQb,EAAS6O,IAAc,GAC9FoO,GAAO3N,EAAAA,EAAAA,IAAWzO,EAAQb,EAAQ4O,QAQxC,MAAO,CACLslB,iBAAkBF,GAAcE,EAChCE,YATkBnX,IAAQX,EAAAA,EAAAA,IAASW,EAAK7d,KACtCi1B,EAAAA,EAAAA,KAAuBhlB,EAAAA,EAAAA,IAAWxO,GAAQyzB,EAAAA,EAAAA,IAAqBrX,UAC/DnhB,EAQFy4B,6BANmCtX,IAAQuX,EAAAA,EAAAA,IAAiBvX,KAAUiX,EAOtEO,iBANuBxX,IAAQyX,EAAAA,EAAAA,IAAiBzX,MAVlCrc,EAtEkC,IAUhD,IAViD,OACrD4B,EADqD,WAErDwxB,EAFqD,QAGrDh0B,EAHqD,MAIrD20B,EAJqD,gBAKrDT,EALqD,YAMrDE,EANqD,6BAOrDG,EAPqD,iBAQrDE,EARqD,QASrD7qB,GACI,EACJ,MAAM,eACJgrB,EADI,wBAEJC,IACEjzB,EAAAA,EAAAA,MAEEkzB,GAA4B5yB,EAAAA,EAAAA,KAAY,KAC5C,MAAM+c,EAAa0V,MAAAA,GAAAA,EAAOI,SACtBJ,EAAMI,SAASrsB,KAAI,QAAC,GAAEtJ,GAAH,SAAYA,KAC/B,CAACY,EAAQZ,IACbw1B,EAAe,CAAE3V,WAAAA,EAAY+V,oBAAoB,IACjDprB,MACC,CAACgrB,EAAgB50B,EAAQZ,GAAIwK,EAAS+qB,IAEnCM,GAA6B/yB,EAAAA,EAAAA,KAAY,KAC7C,MAAM+c,EAAa0V,MAAAA,GAAAA,EAAOI,SACtBJ,EAAMI,SAASrsB,KAAI,QAAC,GAAEtJ,GAAH,SAAYA,KAC/B,CAACY,EAAQZ,IACT40B,EACFa,EAAwB,CAAE5V,WAAAA,IAE1B2V,EAAe,CACb3V,WAAAA,EACA+V,oBAAoB,IAGxBprB,MACC,CAAC+qB,EAAO30B,EAAQZ,GAAI40B,EAAYpqB,EAASirB,EAAyBD,IAE/DzyB,GAAOC,EAAAA,EAAAA,KAEb,OACE,mBAACmkB,GAAA,EAAD,CACE/jB,OAAQA,EACRoH,QAASA,EACTsrB,QAAS1yB,IAAW0xB,EAAkBe,OAA6Bn5B,EACnE8G,UAAU,SACV4nB,MAAOroB,EAAK,8BAEZ,4BAAIA,EAAK,kCACRoyB,GACC,4BAAIpyB,EAAK,8BAA+B,EAAG,MAE5CsyB,GACC,4BAAItyB,EAAK,+BAAgC,EAAG,MAE7C+xB,GACC,mBAACzxB,EAAA,EAAD,CAAQE,MAAM,SAASC,UAAU,wBAAwBqoB,QAAM,EAACpoB,QAASiyB,GACtEV,IAAelX,EAAAA,GAAAA,GAAW/a,EAAK,iCAAkCiyB,KAChEA,GAAejyB,EAAK,2CAG1B,mBAACM,EAAA,EAAD,CAAQE,MAAM,SAASC,UAAU,wBAAwBqoB,QAAM,EAACpoB,QAASoyB,GACtE9yB,EAAK+xB,EAAkB,gCAAkC,WAE5D,mBAACzxB,EAAA,EAAD,CAAQG,UAAU,wBAAwBqoB,QAAM,EAACpoB,QAAS+G,GAAUzH,EAAK,gBCN/E,IAAexB,EAAAA,EAAAA,KAAKC,EAAAA,EAAAA,KAClB,CAACC,EAAD,KAAoC,IAA3B,OAAE+N,GAAyB,EAClC,MAAMumB,GAAgB7Y,EAAAA,EAAAA,IAAS1N,GACzBwmB,GAAiBC,EAAAA,EAAAA,IAAqBx0B,EAAQ+N,GAC9CqO,GAAO3N,EAAAA,EAAAA,IAAWzO,EAAQ+N,GAC1B+b,EAAYjtB,QAAQuf,KAASqY,EAAAA,EAAAA,IAAcrY,GAC3CsY,EAAU73B,QAAQuf,KAASuX,EAAAA,EAAAA,IAAiBvX,GAC5CuY,EAAe93B,QAAQuf,KAASyX,EAAAA,EAAAA,IAAiBzX,GAMvD,MAAO,CACLkY,cAAAA,EACAC,eAAAA,EACAzK,UAAAA,EACA4K,QAAAA,EACAC,aAAAA,EACAC,aAXoBN,IAAkBC,GAAmBI,GAAgBD,EAYzEnB,YAXkBnX,IAAQX,EAAAA,EAAAA,IAASW,EAAK7d,KACtCi1B,EAAAA,EAAAA,KAAuBhlB,EAAAA,EAAAA,IAAWxO,GAAQyzB,EAAAA,EAAAA,IAAqBrX,UAC/DnhB,KAXY8E,EAhE+B,IAU7C,IAV8C,OAClD4B,EADkD,UAElDsM,EAFkD,OAGlDF,EAHkD,UAIlD+b,EAJkD,QAKlD4K,EALkD,aAMlDC,EANkD,aAOlDC,EAPkD,YAQlDrB,EARkD,QASlDxqB,GACI,EACJ,MAAM,WAAE8rB,IAAe9zB,EAAAA,EAAAA,MAEjB+zB,GAAyBzzB,EAAAA,EAAAA,KAAY,KACzCwzB,EAAW,CACT9mB,OAAAA,EAAQE,UAAAA,EAAW8mB,SAAS,IAE9BhsB,MACC,CAAC8rB,EAAY9mB,EAAQE,EAAWlF,IAE7BisB,GAAmB3zB,EAAAA,EAAAA,KAAY,KACnCwzB,EAAW,CACT9mB,OAAAA,EAAQE,UAAAA,EAAW8mB,SAAS,EAAOE,WAAW,EAAMC,UAAU,IAEhEnsB,MACC,CAACgF,EAAQE,EAAWlF,EAAS8rB,IAE1BvzB,GAAOC,EAAAA,EAAAA,KAcb,OACE,mBAACmkB,GAAA,EAAD,CACE/jB,OAAQA,EACRoH,QAASA,EACThH,UAAU,MACV4nB,MAAOroB,EAAK,yBAEZ,4BAjBOA,EADLwoB,EACU,yBAGV4K,GAAWC,EACD,kBAGF,wBAWV,mBAAC/yB,EAAA,EAAD,CAAQG,UAAU,wBAAwBqoB,QAAM,EAACpoB,QAASgzB,GACvD1zB,EAAK,cAEPszB,GACC,mBAAChzB,EAAA,EAAD,CAAQG,UAAU,wBAAwBqoB,QAAM,EAACpoB,QAAS8yB,GACvDvB,GACGlX,EAAAA,GAAAA,GAAW/a,EAAK,8BAA+BiyB,IAC/CjyB,EAAK,qDAGb,mBAACM,EAAA,EAAD,CAAQG,UAAU,wBAAwBqoB,QAAM,EAACpoB,QAAS+G,GAAUzH,EAAK,gBCvD/E,IAAexB,EAAAA,EAAAA,KAxB6B,IAKtC,IALuC,OAC3C6B,EAD2C,oBAE3CwzB,EAAsB,EAFqB,QAG3CpsB,EAH2C,QAI3CqsB,GACI,EACJ,MAAM9zB,GAAOC,EAAAA,EAAAA,KAEb,OACE,mBAACmkB,GAAA,EAAD,CACE/jB,OAAQA,EACRoH,QAASA,EACThH,UAAU,YACV4nB,MAAOroB,EAAK,+BAEZ,4BAAIA,EAAK,oCAAqC6zB,EAAqB,MACnE,mBAACvzB,EAAA,EAAD,CAAQG,UAAU,wBAAwBqoB,QAAM,EAACpoB,QAASozB,GACvD9zB,EAAK,gBAER,mBAACM,EAAA,EAAD,CAAQG,UAAU,wBAAwBqoB,QAAM,EAACpoB,QAAS+G,GAAUzH,EAAK,e,yBC9B/E,MC0GA,IAAexB,EAAAA,EAAAA,KAAKC,EAAAA,EAAAA,KAClB,CAACC,EAAD,KAAwC,IAA/B,WAAEmzB,GAA6B,EACtC,MAAQ/U,WAAYiX,GAAuBr1B,EAAOs1B,kBAAoB,IAChE,gBAAEjC,IAAoBkC,EAAAA,EAAAA,IAAgCv1B,GACtDoc,GAAOoZ,EAAAA,EAAAA,IAAkBx1B,GAQ/B,MAAO,CACLq1B,mBAAAA,EACAhC,iBAAkBF,GAAcE,EAChCE,YAVkBnX,IAAQX,EAAAA,EAAAA,IAASW,EAAK7d,KACtCi1B,EAAAA,EAAAA,KAAuBhlB,EAAAA,EAAAA,IAAWxO,GAAQyzB,EAAAA,EAAAA,IAAqBrX,UAC/DnhB,EASFy4B,6BAPmCtX,IAAQuX,EAAAA,EAAAA,IAAiBvX,KAAUiX,EAQtEO,iBAPuBxX,IAAQyX,EAAAA,EAAAA,IAAiBzX,MAVlCrc,EA5E0C,IASxD,IATyD,OAC7D4B,EAD6D,WAE7DwxB,EAF6D,mBAG7DkC,EAH6D,gBAI7DhC,EAJ6D,YAK7DE,EAL6D,6BAM7DG,EAN6D,iBAO7DE,EAP6D,QAQ7D7qB,GACI,EACJ,MAAM,eACJgrB,EADI,wBAEJC,EAFI,sBAGJyB,IACE10B,EAAAA,EAAAA,MAEEksB,GAAarQ,EAAAA,EAAAA,GAAYjb,GAEzBsyB,GAA4B5yB,EAAAA,EAAAA,KAAY,KAC5C0H,IACAgrB,EAAe,CAAE3V,WAAYiX,EAAoBlB,oBAAoB,MACpE,CAACJ,EAAgBsB,EAAoBtsB,IAElCqrB,GAA6B/yB,EAAAA,EAAAA,KAAY,KACzC8xB,EACFa,EAAwB,CAAE5V,WAAYiX,IAEtCtB,EAAe,CAAE3V,WAAYiX,EAAoBlB,oBAAoB,IAGvEprB,MACC,CAACoqB,EAAYpqB,EAASirB,EAAyBqB,EAAoBtB,IAEhEzyB,GAAOC,EAAAA,EAAAA,KASb,IANAnF,EAAAA,EAAAA,KAAU,MACHuF,GAAUsrB,GACbwI,MAED,CAACA,EAAuB9zB,EAAQsrB,IAE9BoI,EAIL,OACE,mBAAC3P,GAAA,EAAD,CACE/jB,OAAQA,EACRoH,QAASA,EACTsrB,QAAShB,OAAkBp4B,EAAYm5B,EACvCryB,UAAU,SACV4nB,MAAOroB,EAAK,oCAEZ,4BAAIA,EAAK,gCACRoyB,GACC,2GAEDE,GACC,gFAEDP,GACC,mBAACzxB,EAAA,EAAD,CAAQE,MAAM,SAASC,UAAU,wBAAwBqoB,QAAM,EAACpoB,QAASiyB,GACtEV,GACGlX,EAAAA,GAAAA,GAAW/a,EAAK,6BAA8BiyB,IAC9CjyB,EAAK,2CAGb,mBAACM,EAAA,EAAD,CAAQE,MAAM,SAASC,UAAU,wBAAwBqoB,QAAM,EAACpoB,QAASoyB,GACtE9yB,EAAK+xB,EAAkB,gCAAkC,WAE5D,mBAACzxB,EAAA,EAAD,CAAQG,UAAU,wBAAwBqoB,QAAM,EAACpoB,QAAS+G,GAAUzH,EAAK,gB,eCnF/E,MAuEA,IAAexB,EAAAA,EAAAA,KAvE0B,IAInC,IAJoC,OACxC6B,EADwC,WAExCyc,EAFwC,QAGxCrV,GACI,EACJ,MAAM,eACJ2sB,EADI,sBAEJD,IACE10B,EAAAA,EAAAA,OAEG40B,EAAgBC,IAAqBxyB,EAAAA,EAAAA,IAA0B,SAC/DyyB,EAAaC,IAAkB1yB,EAAAA,EAAAA,IAAS,IAEzC2yB,GAAe10B,EAAAA,EAAAA,KAAY,KAC/Bq0B,EAAe,CAAEtX,WAAAA,EAAY4X,OAAQL,EAAgBE,YAAAA,IACrDJ,IACA1sB,MACC,CAAC8sB,EAAaJ,EAAuBrX,EAAYrV,EAAS2sB,EAAgBC,IAEvEM,GAAqB50B,EAAAA,EAAAA,KAAagH,IACtCutB,EAAkBvtB,KACjB,IAEG6tB,GAA0B70B,EAAAA,EAAAA,KAAa0C,IAC3C+xB,EAAe/xB,EAAEmI,OAAO7D,SACvB,IAEG/G,GAAOC,EAAAA,EAAAA,KAEP40B,EAA8D,CAClE,CAAE9tB,MAAO,OAAQ0qB,MAAOzxB,EAAK,2BAC7B,CAAE+G,MAAO,WAAY0qB,MAAOzxB,EAAK,+BACjC,CAAE+G,MAAO,cAAe0qB,MAAOzxB,EAAK,kCACpC,CAAE+G,MAAO,aAAc0qB,MAAOzxB,EAAK,kCACnC,CAAE+G,MAAO,YAAa0qB,MAAOzxB,EAAK,+BAClC,CAAE+G,MAAO,eAAgB0qB,MAAO,iBAChC,CAAE1qB,MAAO,kBAAmB0qB,MAAO,oBACnC,CAAE1qB,MAAO,QAAS0qB,MAAOzxB,EAAK,6BAGhC,GAAK8c,EAIL,OACE,mBAACsH,GAAA,EAAD,CACE/jB,OAAQA,EACRoH,QAASA,EACTsrB,QAAS1yB,EAASo0B,OAAe96B,EACjC8G,UAAU,SACV4nB,MAAOroB,EAAK,6BAEZ,mBAAC80B,GAAA,EAAD,CACEhS,KAAK,iBACLiS,QAASF,EACT7tB,SAAU2tB,EACVK,SAAUX,IAEZ,mBAACrQ,GAAA,EAAD,CACEyN,MAAOzxB,EAAK,iCACZ+G,MAAOwtB,EACPvtB,SAAU4tB,IAEZ,mBAACt0B,EAAA,EAAD,CAAQE,MAAM,SAASC,UAAU,wBAAwBqoB,QAAM,EAACpoB,QAAS+zB,GACtEz0B,EAAK,sBAER,mBAACM,EAAA,EAAD,CAAQG,UAAU,wBAAwBqoB,QAAM,EAACpoB,QAAS+G,GAAUzH,EAAK,eCgF/E,IAAexB,EAAAA,EAAAA,KAAKC,EAAAA,EAAAA,KACjBC,IACC,MAAQkd,KAAMqZ,EAAR,OAAyBxoB,IAAWqlB,EAAAA,EAAAA,IAAyBpzB,IAAW,IACxE,UAAEw2B,IAAcjB,EAAAA,EAAAA,IAAgCv1B,GAChDy2B,GAAYC,EAAAA,EAAAA,IAAgC12B,GAC5C22B,GAAcC,EAAAA,EAAAA,IAAkC52B,IAC9Coe,WAAYiX,GAAuBr1B,EAAOs1B,kBAAoB,GAChEuB,IAAsB9oB,IAAS+oB,EAAAA,EAAAA,IAA0B92B,EAAQ+N,EAAQsnB,GAE/E,MAAO,CACLlC,WAAgC,cAApBoD,EACZQ,uBAAuBC,EAAAA,EAAAA,IAA4Bh3B,GACnDi3B,kBAAmBT,EACnBU,kBAAmBT,EACnBU,oBAAqBR,EACrBtB,mBAAAA,EACAwB,oBAAAA,KAhBc92B,EA3HoC,IAWlD,IAXmD,QACvDq3B,EADuD,SAEvDxoB,EAFuD,gBAGvD2nB,EAHuD,WAIvDpD,EAJuD,sBAKvD4D,EALuD,kBAMvDE,EANuD,kBAOvDC,EAPuD,oBAQvDC,EARuD,oBASvDN,EATuD,mBAUvDxB,GACI,EACJ,MAAM,sBACJI,EADI,mCAEJ4B,EAFI,yBAGJC,EAHI,qBAIJC,IACEx2B,EAAAA,EAAAA,OAEGy2B,EAAmBC,EAAiBC,IAAoBrxB,EAAAA,GAAAA,MACxDsxB,EAAmBC,EAAiBC,IAAoBxxB,EAAAA,GAAAA,KH7DjC,EAACuI,EAAmB2oB,MAClDn7B,EAAAA,EAAAA,KAAU,KACR,SAAS07B,EAAW/zB,IACZg0B,EAAAA,IAAah0B,EAAEi0B,UAAcD,EAAAA,IAAah0B,EAAEk0B,UAAoC,OAAvBC,EAAAA,GAAAA,GAAgBn0B,KAC7EA,EAAEgJ,iBACFwqB,KAQJ,OAJI3oB,GACF1R,SAASyG,iBAAiB,UAAWm0B,GAAY,GAG5C,KACL56B,SAAS0G,oBAAoB,UAAWk0B,GAAY,MAErD,CAACP,EAAsB3oB,KG+C1BupB,CAAwBt7B,QAAQ+R,GAAW2oB,IAC3Cn7B,EAAAA,EAAAA,KAAU,KACDwS,GAAa4oB,GAAsBG,OAMtC18B,GALAm9B,EAAAA,GAAAA,GAAyB,CACzBC,YAAaZ,EACba,SAAUb,EACVc,MAAO9C,KAGV,CAAC7mB,EAAU4oB,EAAmBG,EAAmBF,EAAiBhC,IAErE,MAAMqC,GAAaz2B,EAAAA,EAAAA,KAAY,KAC7Bk2B,IACA9B,MACC,CAAC8B,EAAsB9B,IAEpB+C,GAAiBn3B,EAAAA,EAAAA,KAAY,KACjCi2B,IACA7B,MACC,CAAC6B,EAA0B7B,IAExBgD,GAA4B7b,EAAAA,EAAAA,GAAYma,QAAyB97B,GAAW,GAC5Ey9B,EAAiC9pB,EAAWmoB,EAAwB0B,EAEpEn3B,GAAOC,EAAAA,EAAAA,KAEPo3B,EAAyBr3B,EAAK,kCAAmCo3B,EAAgC,KAEjG32B,GAAY+B,EAAAA,EAAAA,GAChB,uBACAszB,GAAW,gBACXxoB,GAAY,SAGRgqB,EAAe,CACnBr2B,EAAcwwB,EAAe/wB,EAA4BiH,EAAoB4vB,IAG3E,0BACEvI,KAAK,SACLC,SAAU,EACVxuB,WAAW+B,EAAAA,EAAAA,GACT,OACAmF,GAAY,WACZ4vB,GAAe,eAEjB72B,QAAUiH,OAAqBhO,EAAV+G,EACrB2nB,MAAOoJ,GAEP,wBAAGhxB,UAAY,QAAOQ,OAK5B,OACE,0BAAKR,UAAWA,GACd,0BAAKA,UAAU,8BACb,mBAACH,EAAA,EAAD,CACEE,MAAM,cACND,OAAK,EACLG,QAASyzB,EACTxzB,UAAU,oBAEV,wBAAGF,UAAU,gBAEf,2BAAMA,UAAU,6BAA6B4nB,MAAOgP,GACjDA,GAGF97B,QAAQk6B,IACP,0BAAKh1B,UAAU,gCACQ,cAApBw0B,GACCqC,EACE,UAAWt3B,EAAK,4BAA6B+1B,EAAoCR,GAGpFK,GACC0B,EAAa,OAAQt3B,EAAK,+BAAgCs2B,GAE3DT,GACCyB,EAAa,WAAYt3B,EAAK,sBAAuBk3B,EAAgB3B,GAEtE+B,EAAa,OAAQt3B,EAAK,mCAAoCw2B,EAAYjB,GAC1E+B,EAAa,SAAUt3B,EAAK,gCAAiCm2B,GAAkBR,GAAmB,KAIzG,mBAAC,GAAD,CACEt1B,OAAQ61B,EACRrE,WAAYA,EACZpqB,QAAS2uB,IAEX,mBAAC,GAAD,CACE/1B,OAAQg2B,EACR5uB,QAAS8uB,EACTzZ,WAAYiX,SCzFpB,IAAev1B,EAAAA,EAAAA,KAAKC,EAAAA,EAAAA,KACjBC,IAAuB,MACtB,MAAM,OAAE+N,EAAF,UAAUE,GAAcjO,EAAO84B,aAAe,GACpD,OAAK/qB,GAAWE,EAIT,CACL8qB,UAAS,WAAE1qB,EAAAA,EAAAA,IAAkBrO,EAAQ+N,EAAQE,UAApC,aAAE,EAA8C+qB,eAJlD,KAJOj5B,EAnD2B,IAGzC,IAH0C,OAC9C4B,EAD8C,UAE9Co3B,GACI,EACJ,MAAM,SACJE,EADI,iBAEJC,IACEn4B,EAAAA,EAAAA,MAEEO,GAAOC,EAAAA,EAAAA,KAEP43B,GAAc93B,EAAAA,EAAAA,KAAailB,IAC/B4S,IAEAv8B,YAAW,KACTs8B,EAAS,CAAE16B,GAAI+nB,MAjBY,OAmB5B,CAAC4S,EAAkBD,IAEhBG,GAAqB3Q,EAAAA,GAAAA,GAAiBsQ,GAAW,GAEvD,OACE,mBAACrT,GAAA,EAAD,CACE/jB,OAAQA,EACRoH,QAASmwB,EACTn3B,UAAU,SACV4nB,MAAQ,WAAUoP,MAAAA,OAAX,EAAWA,EAAWr5B,gBAE7B,0BAAKuE,IAAK3C,EAAK4iB,MAAQ,WAAQjpB,GAC5Bm+B,GAAsBA,EAAmBvxB,KAAKye,GAC7C,mBAACH,GAAA,EAAD,CACErZ,IAAKwZ,EACLvkB,UAAU,6CAEVC,QAAS,IAAMm3B,EAAY7S,IAE3B,mBAACF,GAAA,EAAD,CAAiBE,OAAQA,EAAQ+S,kBAAgB,QAIvD,mBAACz3B,EAAA,EAAD,CACEG,UAAU,wBACVqoB,QAAM,EACNpoB,QAASk3B,GAER53B,EAAK,e,0BCvCd,MAoKA,IAAexB,EAAAA,EAAAA,KAAKC,EAAAA,EAAAA,KACjBC,IACC,MAAM,OAAE+N,EAAF,UAAUE,GAAcjO,EAAOs5B,cAAgB,GAC/Cn6B,EAAU4O,GAAUE,GAAYI,EAAAA,EAAAA,IAAkBrO,EAAQ+N,EAAQE,QAAahT,EAErF,MAAO,CACL8S,OAAAA,EACAE,UAAAA,EACAsrB,UAAWp6B,MAAAA,OAAF,EAAEA,EAASo6B,UACpBC,SAAUr6B,MAAAA,OAAF,EAAEA,EAASq6B,SACnBR,cAAe75B,MAAAA,OAAF,EAAEA,EAAS65B,iBAVVj5B,EAzJgC,IAO9C,IAP+C,OACnD4B,EADmD,SAEnD63B,EAFmD,UAGnDD,EAHmD,OAInDxrB,EAJmD,UAKnDE,EALmD,cAMnD+qB,GACI,EACJ,MAAM,aACJS,EADI,sBAEJC,EAFI,SAGJT,IACEl4B,EAAAA,EAAAA,MAGEknB,GAAYC,EAAAA,EAAAA,MAAYC,MAAMzB,KAE9BplB,GAAOC,EAAAA,EAAAA,MACNo4B,EAAWC,EAAcC,IAAexzB,EAAAA,GAAAA,IAAQ,IAChDyzB,EAAWC,IAAgB32B,EAAAA,EAAAA,SAA6BnI,GACzD++B,EAAiBR,GAAYD,GAAaC,EAASS,OA/BnB,IAgCjCV,EAAUW,QAAQx6B,OAAS,EAC1By6B,GAAYt/B,EAAAA,EAAAA,OAElBuB,EAAAA,EAAAA,KAAU,KACJu9B,IAAch4B,IAChBk4B,IACAE,OAAa9+B,MAEd,CAAC0+B,EAAWh4B,EAAQk4B,IAEvB,MAAMO,GAA0B/4B,EAAAA,EAAAA,KAAY,KACtC84B,EAAUn/B,SACZi+B,EAAS,CAAE16B,GAAI47B,EAAUn/B,UAE3B0+B,MACC,CAACA,EAAuBT,IAErBpG,GAAcxxB,EAAAA,EAAAA,KAAY,KAC9Bu4B,MACC,CAACA,IAEET,GAAc93B,EAAAA,EAAAA,KAAailB,IAC/B6T,EAAUn/B,QAAUsrB,EACpBuM,MACC,CAACA,IAEEwH,GAAiBh5B,EAAAA,EAAAA,KAAY,KACjCo4B,EAAa,CACX1rB,OAAAA,EACAE,UAAAA,MAED,CAACF,EAAQ0rB,EAAcxrB,IAEpBqsB,GAAe74B,EAAAA,EAAAA,KAAQ,IACpB+3B,MAAAA,GAAAA,EAAUD,WAAY1R,EAAAA,GAAAA,IAAO2R,EAASD,UAAU1xB,KAAK0yB,GAAMA,EAAEC,YAAa,IAChF,CAAChB,MAAAA,OAAD,EAACA,EAAUD,YAERlS,GAAU5lB,EAAAA,EAAAA,KAAQ,IAClBq4B,EACKN,MAAAA,OAAP,EAAOA,EAAUD,UAAU/U,QAAQ+V,GAAMA,EAAEC,WAAaV,IAAWjyB,KAAK0yB,GAAMA,EAAEjU,UAE3EuB,EAAAA,GAAAA,KAAO2R,MAAAA,OAAA,EAAAA,EAAUD,UAAU1xB,KAAK0yB,GAAMA,EAAEjU,SAAQmU,OAAOzB,GAAiB,MAAO,KACrF,CAACc,EAAWN,MAAAA,OAAZ,EAAYA,EAAUD,UAAWP,KAE7BlU,EAAaC,IAAWC,EAAAA,GAAAA,GAC7BqV,EAAgBhT,EAASmS,QAAoCv+B,IAAxBu+B,EAASkB,YAOhD,OAJAt+B,EAAAA,EAAAA,KAAU,KACR2oB,MAAAA,GAAAA,EAAU,CAAEnQ,UAAW+lB,EAAAA,GAAAA,cACtB,CAAC5V,IAGF,mBAACW,GAAA,EAAD,CACE/jB,OAAQA,IAAWg4B,EACnB5wB,QAAS8pB,EACT9wB,UAAU,0BACV4nB,MAAOroB,EAAK,aACZujB,oBAAqBuV,GAEpBJ,GACC,0BAAKj4B,UAAU,aACb,mBAACH,EAAA,EAAD,CACEG,WAAW+B,EAAAA,EAAAA,IAAgBg2B,GAAa,UACxCv9B,KAAK,OACL0L,QAAM,EAENjG,QAAS,IAAM+3B,OAAa9+B,IAE5B,wBAAG8G,UAAU,0BACZy3B,MAAAA,OAAA,EAAAA,EAAUS,SAASW,EAAAA,GAAAA,IAAqBpB,EAASS,QAEnDK,EAAazyB,KAAK2yB,IAAa,MAC9B,MAAMP,EAAQV,MAAAA,GAAH,UAAGA,EAAWW,QAAQW,MAAMN,GAAMA,EAAEC,WAAaA,WAAjD,aAAG,EAAyDP,MACvE,OACE,mBAACr4B,EAAA,EAAD,CACEG,WAAW+B,EAAAA,EAAAA,GAAeg2B,IAAcU,GAAY,UACpDj+B,KAAK,OACL0L,QAAM,EAENjG,QAAS,IAAM+3B,EAAaS,IAE5B,mBAACM,GAAA,EAAD,CAAqBN,SAAUA,EAAUz4B,UAAU,0BAClDk4B,IAASW,EAAAA,GAAAA,IAAqBX,QAOzC,0BAAKh2B,IAAK3C,EAAK4iB,MAAQ,WAAQjpB,GAC5B6pB,MAAAA,GAAAA,EAAaplB,OACZ,mBAACkmB,GAAA,EAAD,CACE7jB,UAAU,6BACV8jB,MAAOf,EACPgB,WAAYf,GAEXD,MAAAA,OALH,EAKGA,EAAajd,KACXye,IAAW,MACV,MAAMnK,EAAO8L,EAAU3B,GACjByU,GAAWC,EAAAA,EAAAA,IAAgB7e,GAC3Bqe,EAAWhB,MAAAA,GAAH,UAAGA,EAAUD,UAAUsB,MAAMN,GAAMA,EAAEjU,SAAWA,WAAhD,aAAG,EAAsDkU,SACvE,OACE,mBAACrU,GAAA,EAAD,CACErZ,IAAKwZ,EACLvkB,UAAU,yCAEVC,QAAS,IAAMm3B,EAAY7S,IAE3B,mBAACpK,GAAA,EAAD,CAAQC,KAAMA,EAAM5f,KAAK,WACzB,0BAAKwF,UAAU,SACb,yBAAIkC,IAAI,QAAQ82B,IAAY1e,EAAAA,GAAAA,GAAW0e,KAExCP,GAAY,mBAACM,GAAA,EAAD,CAAqB/4B,UAAU,sBAAsBy4B,SAAUA,SAMpF,mBAAChU,GAAA,EAAD,OAEN,mBAAC5kB,EAAA,EAAD,CACEG,UAAU,wBACVqoB,QAAM,EACNpoB,QAAS03B,GAERp4B,EAAK,e,0BC3Jd,MAgGA,IAAexB,EAAAA,EAAAA,KAAKC,EAAAA,EAAAA,KAClB,CAACC,EAAD,KAAoD,IAA3C,uBAAEi7B,GAAyC,EAClD,MAAMC,OAA2DjgC,IAA1CggC,EAAuBC,iBACzCC,EAAAA,EAAAA,IAA0Bn7B,EAAQi7B,EAAuBC,gBAC9D,MAAO,CACLE,kBAAmBF,EAAiBA,EAAe38B,QAAKtD,EACxDogC,sBAAuBH,GAAkBD,EAAuBC,gBAC7Dn8B,OAAOu8B,KAAKC,GAAAA,GAAyB/8B,SAASy8B,EAAuBC,gBACpED,EAAuBC,oBAAiBjgC,KAR9B8E,EA5FyC,IAIvD,IAJwD,kBAC5Dq7B,EAD4D,qBAE5DC,EAF4D,uBAG5DJ,GACI,EACJ,MAAM,2BAAEO,IAA+Bz6B,EAAAA,EAAAA,OAEhC06B,EAAUC,IAAer1B,EAAAA,GAAAA,IAAQ,IACjCs1B,EAAWC,IAAgBv1B,EAAAA,GAAAA,IAAQ,GACpCrK,GAAanB,EAAAA,EAAAA,MAEbghC,GAAOx6B,EAAAA,EAAAA,KAAY,KACvBq6B,IACI1/B,EAAWhB,SACbmB,aAAaH,EAAWhB,SAE1B2B,YAAW,KACT6+B,EAA2B,CAAEj9B,GAAI08B,EAAuB18B,OArB9B,OAuB3B,CAAC08B,EAAuB18B,GAAIm9B,EAAaF,IAEtCM,GAAwBz6B,EAAAA,EAAAA,KAAa0C,IAAe,MACpD,UAAEA,EAAEmI,cAAJ,OAAC,EAA2B5N,QAAQ,mBACtCu9B,MAED,CAACA,KAEJz/B,EAAAA,EAAAA,KAAU,KACRc,SAASyG,iBAAiB,aAAcm4B,GACxC5+B,SAASyG,iBAAiB,YAAam4B,GACvC5+B,SAASyG,iBAAiB,YAAam4B,GACvC5+B,SAASyG,iBAAiB,QAASm4B,GAE5B,KACL5+B,SAAS0G,oBAAoB,aAAck4B,GAC3C5+B,SAAS0G,oBAAoB,YAAak4B,GAC1C5+B,SAAS0G,oBAAoB,YAAak4B,GAC1C5+B,SAAS0G,oBAAoB,QAASk4B,MAEvC,CAACA,KAEJzxB,EAAAA,EAAAA,KAAgB,KACd,MAAM0xB,GAA6Blc,EAAAA,EAAAA,MAEnC7jB,EAAWhB,QAAU2B,YAAW,KAC9Bk/B,IACAE,MAjDmB,OAmDpB,CAACF,IAEJ,MAAMG,GAAsB3rB,EAAAA,EAAAA,GAAU,UAAS+qB,KAAsBA,EAAmB9qB,EAAAA,GAAAA,SAEjF2rB,EAA0BC,IAA+B94B,EAAAA,EAAAA,MAShE,IARAhH,EAAAA,EAAAA,KAAU,KACJi/B,IACFc,EAAAA,GAAAA,GAAiBd,GAA8De,MAAMC,IACnFH,EAA4BG,QAG/B,CAAChB,KAECJ,EAAuBqB,UAC1B,OAGF,MAAMxpB,GAASmoB,EAAuBqB,WAAa,GAnEjC,IAqElB,OACE,0BACEv6B,WAAW+B,EAAAA,EAAAA,GACT,4BACA23B,GAAY,SACZE,GAAa,UACbV,EAAuBsB,YAAc,YAEvCt9B,MAAQ,YAAW6T,iBAAqBmoB,EAAuBroB,mBAAmBqoB,EAAuBpoB,QAEzG,mBAAC2pB,GAAA,EAAD,CACE1vB,IAAM,UAASsuB,IACf78B,GAAK,UAAS68B,IACd7+B,KAlFY,IAmFZkgC,cAAeR,GAA4BD,EAC3CU,KAAMf,EACNgB,QAASC,EAAAA,GAAa,QAAM3hC,EAC5BuoB,uBAAqB,EACrBqZ,QAAM,EACNC,OAAQlB,S,oCCvHhB,MAwBA,GAvBEmB,IAGA,MAAMC,GAAYniC,EAAAA,EAAAA,IAAuB,MAEnCkpB,GAAgB1iB,EAAAA,EAAAA,KAAa0C,IACnB,UAAVA,EAAE+I,KACYkwB,EAAUhiC,UAAYkC,SAAS+/B,eAG/CF,MAED,CAACA,IAQJ,OANA3gC,EAAAA,EAAAA,KAAU,KACRM,OAAOiH,iBAAiB,UAAWogB,GAAe,GAE3C,IAAMrnB,OAAOkH,oBAAoB,UAAWmgB,GAAe,KACjE,CAACA,IAEGiZ,G,wBCYT,MA2DA,IAAel9B,EAAAA,EAAAA,KAAKC,EAAAA,EAAAA,KAClB,CAACC,EAAD,KAAoC,UAA3B,OAAE+N,GAAyB,EAClC,MAAMqO,GAAO3N,EAAAA,EAAAA,IAAWzO,EAAQ+N,GAC1BmvB,EAAoB9gB,IAAQqX,EAAAA,EAAAA,IAAqBrX,GAOvD,MAAO,CACLA,KAAAA,EACAD,KARW+gB,GAAoB1uB,EAAAA,EAAAA,IAAWxO,EAAQk9B,QAAqBjiC,EASvEkiC,UAReC,EAAAA,EAAAA,IAAmBp9B,EAAQ+N,GAS1CtI,QARc2W,GACZihB,EAAAA,EAAAA,IAAkBjhB,GAAMkhB,EAAAA,EAAAA,IAAqBt9B,IAASu9B,EAAAA,EAAAA,IAAuBv9B,SAC7E/E,EAOFuiC,gBAAiB3gC,QAAO,UAACmD,EAAOy9B,YAAYC,kBAApB,aAAC,EAA+Bh+B,WAf1CK,EA3DoC,IASlD,IATmD,OACvDgO,EADuD,aAEvD4vB,EAFuD,QAGvD37B,EAHuD,KAIvDoa,EAJuD,KAKvDD,EALuD,SAMvDghB,EANuD,QAOvD13B,EAPuD,gBAQvD+3B,GACI,EACJ,MAAOhG,EAAmBC,EAAiBC,IAAoBrxB,EAAAA,GAAAA,MACxDu3B,EAAuBC,EAAqBC,IAAwBz3B,EAAAA,GAAAA,KAErE03B,GAAiBC,EAAAA,GAAAA,GAAsB,CAC3C5hB,KAAAA,EACAD,KAAAA,EACAghB,SAAAA,EACA13B,QAAAA,EACA+3B,gBAAAA,EACAS,aAAcxG,EACdyG,uBAAwBL,IACvB,GAEG1E,GAAc93B,EAAAA,EAAAA,KAAY,KAC9BW,EAAQ+L,KACP,CAACA,EAAQ/L,IAENg7B,EAAYmB,GAAmBhF,GAErC,GAAK/c,EAIL,OACE,mBAAC+J,GAAA,EAAD,CACEpkB,UAAU,oCACVC,QAASm3B,EACT4E,eAAgBA,EAChBf,UAAWA,IAEVvhB,EAAAA,EAAAA,IAAS1N,GACR,mBAACqY,GAAA,EAAD,CAAiBE,OAAQvY,EAAQ4vB,aAAcA,EAAcS,WAAW,UAExE,mBAAC7X,GAAA,EAAD,CAAexY,OAAQA,EAAQ4vB,aAAcA,EAAcS,WAAW,UAExE,mBAACC,GAAA,EAAD,CACE18B,OAAQ61B,EACRzuB,QAAS2uB,EACTtb,KAAMA,IAER,mBAAC,KAAD,CACEza,OAAQi8B,EACR70B,QAAS+0B,EACT/vB,OAAQA,S,eC3DhB,MAGMuwB,IAAe56B,EAAAA,EAAAA,KAAU66B,GAAOA,KAAM,KAAO,GA8EnD,IAAez+B,EAAAA,EAAAA,KAAKC,EAAAA,EAAAA,KACjBC,IACC,MAAQqnB,QAASmX,GAAex+B,EAAOy+B,SACjCxW,EAAYjoB,EAAOmoB,MAAMzB,MACzB,qBAAEgY,GAAyB1+B,EAAO2+B,aAExC,MAAO,CACLH,WAAAA,EACAvW,UAAAA,EACAyW,qBAAAA,KATc3+B,EA5E8B,IAG5C,IAH6C,WACjDy+B,EADiD,UACrCvW,EADqC,qBAC1ByW,EAD0B,QAEjDE,GACI,EACJ,MAAM,aACJC,EADI,gBACUC,EADV,SAC2B7F,EAD3B,uBAEJ8F,EAFI,wBAEoBC,IACtBj+B,EAAAA,EAAAA,MAGEk+B,GAAcpkC,EAAAA,EAAAA,IAAuB,OAI3CuB,EAAAA,EAAAA,KAAU,KACRkiC,IAAa,KACXO,IAEAC,SAED,CAACD,EAAcC,KAElBI,EAAAA,GAAAA,GAAoBD,EAAYjkC,SAAUwjC,GAE1C,MAAMrF,GAAc93B,EAAAA,EAAAA,KAAa9C,IAC/B06B,EAAS,CAAE16B,GAAAA,EAAI4gC,sBAAsB,IACrCP,IACAjiC,YAAW,KACToiC,EAAuB,CAAExgC,GAAAA,MAjCC,OAmC3B,CAAC06B,EAAU8F,EAAwBH,IAEhCt9B,GAAOC,EAAAA,EAAAA,KAEb,OACE,0BAAKQ,UAAU,gCACZy8B,GACC,0BAAKz8B,UAAU,oBAAoBkC,IAAK3C,EAAK4iB,MAAQ,WAAQjpB,GAC3D,0BAAK2M,IAAKq3B,EAAal9B,UAAU,0BAC9By8B,EAAW32B,KAAKye,GACf,0BAAKvkB,UAAU,gBAAgBC,QAAS,IAAMm3B,EAAY7S,GAASriB,IAAK3C,EAAK4iB,MAAQ,WAAQjpB,GAC3F,mBAACihB,GAAA,EAAD,CAAQC,KAAM8L,EAAU3B,KACxB,0BAAKvkB,UAAU,kBAAiBsa,EAAAA,GAAAA,IAAWmX,EAAAA,EAAAA,IAAuBvL,EAAU3B,KA9C/E,WAoDNoY,GACC,0BAAK38B,UAAU,uBACb,yBAAIA,UAAU,2CAA2CkC,IAAK3C,EAAK4iB,MAAQ,WAAQjpB,GAChFqG,EAAK,UAEN,mBAACM,EAAA,EAAD,CACEC,OAAK,EACLtF,KAAK,UACLuF,MAAM,cACNG,UAAU,qBACVD,QAASg9B,EACT9a,MAAO5iB,EAAK4iB,OAEZ,wBAAGniB,UAAU,iBAGhB28B,EAAqB72B,KAAKtJ,GACzB,mBAAC,GAAD,CACEwP,OAAQxP,EACRyD,QAASm3B,Y,0BCyBvB,UAAer5B,EAAAA,EAAAA,KAAKC,EAAAA,EAAAA,KAClB,CAACC,EAAD,KAAoC,IAA3B,OAAE+N,GAAyB,EAClC,MAAMqO,GAAO3N,EAAAA,EAAAA,IAAWzO,EAAQ+N,GAChC,IAAKqO,EACH,MAAO,GAGT,MAAM8gB,GAAoBzJ,EAAAA,EAAAA,IAAqBrX,GAE/C,MAAO,CACLA,KAAAA,EACAgjB,aAAcp/B,EAAOo/B,gBACjBlC,GAAqB,CAAEmC,iBAAiB7wB,EAAAA,EAAAA,IAAWxO,EAAQk9B,OAZjDn9B,EA9E2B,IAOzC,IAP0C,QAC9CZ,EAD8C,YAE9CmgC,EAF8C,OAG9CvxB,EAH8C,KAI9CqO,EAJ8C,gBAK9CijB,EAL8C,aAM9CD,GACI,EACJ,MAAM,aAAExjB,IAAiB7a,EAAAA,EAAAA,MAEnBw+B,GAAiBxuB,EAAAA,EAAAA,IAA4B5R,GAC7CqgC,GAAenvB,EAAAA,EAAAA,IAASlP,EAAAA,EAAAA,IAAoBhC,EAAS,UACrDsgC,EAAe5iC,SAAQ6iC,EAAAA,EAAAA,IAAqBvgC,IAE5Cg6B,GAAc93B,EAAAA,EAAAA,KAAY,KAC9Bua,EAAa,CAAE7N,OAAAA,EAAQE,UAAW9O,EAAQZ,OACzC,CAACwP,EAAQ6N,EAAczc,EAAQZ,KAE5B+C,GAAOC,EAAAA,EAAAA,KAEPy7B,EAAYmB,GAAmBhF,GAErC,GAAK/c,EAIL,OACE,mBAAC+J,GAAA,EAAD,CACEpkB,UAAU,kCACVkG,QAAS/F,EAAAA,GACTF,QAASm3B,EACT6D,UAAWA,GAEX,mBAAC9gB,GAAA,EAAD,CACEE,KAAMA,EACND,KAAMkjB,EACNM,gBAAiBN,MAAAA,OAAF,EAAEA,EAAiBO,OAClCR,aAAcA,IAEhB,0BAAKr9B,UAAU,QACb,0BAAKA,UAAU,YACb,0BAAKA,UAAU,SACb,yBAAIkC,IAAI,SAAQoY,EAAAA,GAAAA,IAAWwjB,EAAAA,EAAAA,GAAav+B,EAAM8a,EAAMijB,KACnDjjB,EAAK0jB,YAAc,mBAACC,GAAA,EAAD,OAEtB,0BAAKh+B,UAAU,gBACb,mBAACi+B,GAAA,EAAD,CAAMj+B,UAAU,SACbk+B,EAAAA,GAAAA,IAAoB3+B,EAAqB,IAAfnC,EAAQod,SAKzC,0BAAKxa,UAAU,YACb,0BAAKA,UAAU,UAAUkC,IAAI,QASvC,SACE3C,EAAcnC,EAAqByR,EAAkB0uB,EAAsBG,GAE3E,OAAK7uB,EAKH,2BAAM7O,UAAU,iBACd,0BAAK3G,IAAKwV,EAASsB,IAAI,GAAGnQ,WAAW+B,EAAAA,EAAAA,GAAe,uBAAwB27B,GAAgB,YAC3FtwB,EAAAA,EAAAA,IAAgBhQ,IAAY,wBAAG4C,UAAU,eACzCm+B,EAAAA,EAAAA,GAAqB5+B,EAAMnC,GAAS,EAAMmgC,KAPtCY,EAAAA,EAAAA,GAAqB5+B,EAAMnC,OAASlE,EAAWqkC,GAZ7Ca,CAAc7+B,EAAMnC,EAASqgC,GAAgBD,EAAgBD,EAAaG,WC9CvF,IAAe3/B,EAAAA,EAAAA,KA5CmB,IAE5B,IAF6B,WACjCsgC,EADiC,SACrBrD,GACR,EACJ,MAAMsD,GAAc5+B,EAAAA,EAAAA,KAAQ,IAmB9B,SAAgC2+B,GAE9B,GADgBA,EAAWE,MAAM,0BACpB,CACX,MAAM/jB,EAAO,IAAIhI,KAAK6rB,GACtB,MAAO,CAAC,CAAE7jB,KAAAA,EAAMxZ,MAAMusB,EAAAA,GAAAA,IAAmB/S,KAG3C,MAAMgkB,EAAa,GACbC,EAAc,IAAIjsB,KAClB2Z,EAAcsS,EAAY/S,cAC1BgT,EAAaD,EAAYpS,UAAa,IAAI7Z,KAAM,GAAE2Z,KAAekS,KAAehS,UAClFF,EACAA,EAAc,EAElB,IAAK,IAAIhI,EAAI,EAAGA,EA3CO,EA2CeA,IAAK,CACzC,MAAM3J,EAAO,IAAIhI,KAAM,GAAEksB,EAAava,KAAKka,KAC3CG,EAAWtR,KAAK,CAAE1S,KAAAA,EAAMxZ,MAAMusB,EAAAA,GAAAA,IAAmB/S,KAGnD,OAAOgkB,EAtC2BG,CAAuBN,IAAa,CAACA,IACvE,OACE,8BAASr+B,UAAU,6CAChBs+B,EAAYx4B,KAAI,IAAoB,IAAnB,KAAE0U,EAAF,KAAQxZ,GAAW,EACnC,OACE,0BACEf,QAAS,IAAM+6B,EAASxgB,GACxBxa,UAAU,YACV+K,IAAK/J,GAEL,wBAAGhB,UAAU,kBACb,+BAAOgB,W,0BCwBnB,MAGMu7B,IAAe56B,EAAAA,EAAAA,KAAU66B,GAAOA,KAAM,KAAK,GA+NjD,IAAez+B,EAAAA,EAAAA,KAAKC,EAAAA,EAAAA,KACjBC,IAAuB,MACtB,MAAQ0mB,KAAMC,GAAc3mB,EAAOymB,OAE3BY,QAASsZ,GAAoB3gC,EAAOonB,aAAe,GAE3D,IAAKuZ,EACH,MAAO,CACLha,UAAAA,GAIJ,MAAM,cACJtC,EADI,SACW6P,EADX,aACqBkL,GACvBp/B,GACE,eACJ4gC,EADI,cACYC,EADZ,aAC2BC,EAD3B,cACyC/iB,GAC3C/d,EAAO2+B,cACH7W,QAASiZ,EAAe1Z,QAAS2Z,GAAkBH,GAAiB,IACpE/Y,QAASmZ,EAAc5Z,QAAS6Z,GAAiBJ,GAAgB,IACjEK,SAAUC,GAA2BlN,EAG7C,MAAO,CACL7P,cAAAA,EACAsc,gBAAAA,EACAM,aAAAA,EACAC,aAAAA,EACAH,cAAAA,EACAC,cAAAA,EACAljB,SATeC,MAAAA,GAAH,UAAGA,EAAehb,YAAlB,aAAG,EAAqB+a,SAUpCsjB,uBAAAA,EACAza,UAAAA,EACAia,eAAAA,EACAxB,aAAAA,KAlCcr/B,EA7N2B,IAKzC,IAL0C,YAC9Cu/B,EAD8C,WACjCc,EADiC,gBACrBiB,EADqB,cACJhd,EADI,gBAE9Csc,EAF8C,aAE7BM,EAF6B,aAEfC,EAFe,cAEDH,EAFC,cAEcC,EAFd,SAG9CljB,EAH8C,uBAGpCsjB,EAHoC,UAGZza,EAHY,eAGDia,EAHC,aAGexB,EAHf,QAI9CR,EAJ8C,mBAIrC0C,GACL,EACJ,MAAM,SACJrI,EADI,uBACM8F,EADN,qBAC8BwC,EAD9B,sBACoDC,IACtDzgC,EAAAA,EAAAA,MAEEO,GAAOC,EAAAA,EAAAA,MAENkgC,EAAqBC,IAA0Bt+B,EAAAA,EAAAA,KAAkB,IACjEu+B,EAAsBC,IAA2Bx+B,EAAAA,EAAAA,KAAkB,GAEpEi3B,GAAiBh5B,EAAAA,EAAAA,KAAY,IAAqD,IAApD,UAAEuT,GAAkD,EAClFwqB,GAAgBxqB,IAAc+lB,EAAAA,GAAAA,WAChC2D,IAAa,KACXiD,EAAqB,CACnBrkB,KAAM,OACN2kB,MAAOvC,SAIZ,CAACF,EAAcmC,EAAsBjC,IAElCwC,GAAkBzgC,EAAAA,EAAAA,KACrB9C,IACC06B,EAAS,CAAE16B,GAAAA,EAAI4gC,sBAAsB,IAEjC5gC,IAAO8lB,GACT0a,EAAuB,CAAExgC,GAAAA,IAGtB2D,EAAAA,IACH08B,MAGJ,CAACva,EAAe4U,EAAU8F,EAAwBH,IAG9CmD,GAAwB1gC,EAAAA,EAAAA,KAAa9C,IACzCijC,EAAsB,CAAEjjC,GAAAA,MACvB,CAACijC,IAEEV,GAAer/B,EAAAA,EAAAA,KAAQ,KAC3B,IAAK69B,GAAgBA,EAAY0C,WAAW,MAAQ1C,EAAY5/B,OAAS,EACvE,OAAOuiC,GAAAA,EAGT,MAAMC,EAAmB,IACnB7d,EAAgB,CAACA,GAAiB,MAClCsc,GAAmB,IAGnB1Y,GAAYC,EAAAA,EAAAA,MAAYC,MAAMzB,KAC9Byb,GAAkB7Z,EAAAA,EAAAA,IACtB4Z,EAAkBja,EAAWqX,EAAajb,EAAe/iB,EAAK,kBAGhE,MAAO,KACF8mB,EAAAA,EAAAA,KAAYP,EAAAA,GAAAA,IAAO,IAChBsa,GAAmB,MACnBlB,GAAgB,MAChBC,GAAgB,KAClBva,OAAW1rB,EAAWopB,EAAgB,CAACA,QAAiBppB,MAE7D,CAACqkC,EAAajb,EAAesc,EAAiBr/B,EAAM2/B,EAAcC,EAAcva,IAE7Eka,GAAgBp/B,EAAAA,EAAAA,KAAQ,KACvB69B,GAAeA,EAAY5/B,OA3EO,IA2EyCqhC,IAAkBC,EACzFiB,GAAAA,GAGF7Z,EAAAA,EAAAA,KACLP,EAAAA,GAAAA,IAAO,IAAIkZ,KAAkBC,IAC7Bra,GACA,IAED,CAACA,EAAWoa,EAAeC,EAAe1B,IAEvC8C,GAAgB3gC,EAAAA,EAAAA,KAAQ,KACtB69B,GAAgBc,IAAgBtiB,GAAgC,IAApBA,EAASpe,OAIpDoe,EACJjW,KAAKtJ,IAAO,MACX,MAAOwP,EAAQE,GAAa1P,EAAG8jC,MAAM,KAErC,OAAOjB,MAAAA,GAAP,UAAOA,EAAyBrzB,UAAhC,aAAO,EAAkC2Y,KAAKvJ,OAAOlP,OAEtDuW,OAAmB3nB,SACnBylC,MAAK,CAACC,EAAGC,IAAMA,EAAEjmB,KAAOgmB,EAAEhmB,OAVpB0lB,GAAAA,GAWR,CAACnkB,EAAUsjB,EAAwB9B,EAAac,IAE7CqC,GAA2BphC,EAAAA,EAAAA,KAAY,KAC3CqgC,GAAwBD,KACvB,CAACA,IAEEiB,GAA4BrhC,EAAAA,EAAAA,KAAY,KAC5CugC,GAAyBD,KACxB,CAACA,IAmBEgB,EAAe/B,IAAmBA,EAAena,QAAUma,EAAe1M,WAC1E4M,EAAaphC,SAAWmhC,EAAcnhC,SAAW0iC,EAAc1iC,OAErE,OAAK4/B,GAAgBc,EAKnB,mBAACxa,GAAA,EAAD,CACE7jB,UAAU,2BACV8jB,MAAOuc,EACPtc,WAAYuU,EAEZuI,sBAAoB,EACpBC,YAAU,GAETxB,GACC,0BAAKt/B,UAAU,4CACb,mBAAC,GAAD,CACEq+B,WAAYiB,EACZtE,SAAUuE,KAIfqB,GACC,mBAACG,GAAA,EAAD,CACE//B,KAAMzB,EAAK,6BACXu0B,YAAav0B,EAAK,0CAGrBzE,QAAQikC,EAAaphC,SACpB,0BAAKqC,UAAU,2CAA2CkC,IAAK3C,EAAK4iB,MAAQ,WAAQjpB,GACjF6lC,EAAaj5B,KAAKtJ,GACjB,mBAACwkC,GAAA,EAAD,CACEC,aAAczkC,EACdyD,QAAS+/B,EACTkB,SAAU1kC,OAKjB1B,QAAQikC,EAAaphC,SACpB,0BAAKqC,UAAU,kBACb,yBAAIA,UAAU,kBAAkBkC,IAAK3C,EAAK4iB,MAAQ,YAASjpB,GACxD6lC,EAAaphC,OAzKK,GA0KjB,mBAACsgC,GAAA,EAAD,CAAMh+B,QAASygC,GACZnhC,EAAKmgC,EAAsB,2BAA6B,6BAG5DngC,EAAK,oCAEPw/B,EAAaj5B,KAAI,CAACtJ,EAAIqlB,KACrB,GAAK6d,KAAuB7d,GAjLT,GAqLnB,OACE,mBAAC,GAAD,CACE7V,OAAQxP,EACRyD,QAAS8/B,QAMlBjlC,QAAQgkC,EAAcnhC,SACrB,0BAAKqC,UAAU,kBACb,yBAAIA,UAAU,kBAAkBkC,IAAK3C,EAAK4iB,MAAQ,YAASjpB,GACxD4lC,EAAcnhC,OAjMI,GAkMjB,mBAACsgC,GAAA,EAAD,CAAMh+B,QAAS0gC,GACZphC,EAAKqgC,EAAuB,2BAA6B,6BAG7DrgC,EAAK,mCAEPu/B,EAAch5B,KAAI,CAACtJ,EAAIqlB,KACtB,GAAK+d,KAAwB/d,GAzMV,GA6MnB,OACE,mBAAC,GAAD,CACE7V,OAAQxP,EACRo/B,cAAY,EACZ37B,QAAS8/B,QAMlBjlC,QAAQulC,EAAc1iC,SACrB,0BAAKqC,UAAU,kBACb,yBAAIA,UAAU,kBAAkBkC,IAAK3C,EAAK4iB,MAAQ,YAASjpB,GAAYqG,EAAK,mBAC3E8gC,EAAcv6B,KA9GvB,SAA4B1I,GAC1B,MAAM4D,GAAOm9B,EAAAA,EAAAA,GAAqB5+B,EAAMnC,GAClCid,EAAOuK,EAAUxnB,EAAQ4O,QAE/B,GAAKhL,GAASqZ,EAId,OACE,mBAAC,GAAD,CACErO,OAAQ5O,EAAQ4O,OAChB5O,QAASA,EACTmgC,YAAaA,SASV,mBAAC,GAAD,CAAgBV,QAASA,QClJ9BN,IAAe56B,EAAAA,EAAAA,KAAU66B,GAAOA,KAAM,KAAK,GA0FjD,IAAez+B,EAAAA,EAAAA,KAAKC,EAAAA,EAAAA,KACjBC,IACC,MAAQ0mB,KAAMC,GAAc3mB,EAAOymB,OAC7B,cAAEpC,EAAe6P,UAAYiN,SAAUC,GAAvC,aAAiEhC,GAAiBp/B,GAClF,eAAE4gC,EAAF,cAAkB7iB,GAAkB/d,EAAO2+B,cAE3C,SAAE7gB,IAAcC,MAAAA,OAAD,EAACA,EAAehb,OAAS,GAE9C,MAAO,CACLshB,cAAAA,EACAvG,SAAAA,EACAsjB,uBAAAA,EACAza,UAAAA,EACAia,eAAAA,EACAxB,aAAAA,KAdcr/B,EAxFkC,IAUhD,IAViD,YACrDu/B,EADqD,cAErDjb,EAFqD,gBAGrDgd,EAHqD,SAIrDvjB,EAJqD,uBAKrDsjB,EALqD,UAMrDza,EANqD,eAOrDia,EAPqD,aAQrDxB,EARqD,mBASrDkC,GACI,EACJ,MAAM,qBAAEC,IAAyBxgC,EAAAA,EAAAA,MAE3BO,GAAOC,EAAAA,EAAAA,KACP84B,GAAiBh5B,EAAAA,EAAAA,KAAY,IAAqD,IAApD,UAAEuT,GAAkD,EAClFwqB,GAAgBxqB,IAAc+lB,EAAAA,GAAAA,WAChC2D,IAAa,KACXiD,EAAqB,CACnBrkB,KAAM,OACN2kB,MAAOvC,EACPvxB,OAAQsW,SAIb,CAACA,EAAe+a,EAAcmC,EAAsBjC,IAEjD8C,GAAgB3gC,EAAAA,EAAAA,KAAQ,IACvBqc,GAAgC,IAApBA,EAASpe,OAInBoe,EACJjW,KAAKtJ,IAAO,MACX,MAAOwP,EAAQE,GAAa1P,EAAG8jC,MAAM,KAErC,OAAOjB,MAAAA,GAAP,UAAOA,EAAyBrzB,UAAhC,aAAO,EAAkC2Y,KAAKvJ,OAAOlP,OAEtDuW,OAAmB3nB,SACnBylC,MAAK,CAACC,EAAGC,IAAMA,EAAEjmB,KAAOgmB,EAAEhmB,OAVpB0lB,GAAAA,GAWR,CAACnkB,EAAUsjB,IAmBRuB,EAAe/B,IAAmBA,EAAena,QAAUma,EAAe1M,WAAakO,EAAc1iC,OAE3G,OACE,0BAAKqC,UAAU,cACb,mBAAC6jB,GAAA,EAAD,CACE7jB,UAAU,yCACV8jB,MAAOuc,EACPtc,WAAYuU,EACZwI,YAAU,GAETxB,GACC,0BAAKt/B,UAAU,4CACb,mBAAC,GAAD,CACEq+B,WAAYiB,EACZtE,SAAUuE,KAIfqB,GACC,mBAACG,GAAA,EAAD,CACE//B,KAAMzB,EAAK,6BACXu0B,YAAav0B,EAAK,0CAGrB8gC,EAAcv6B,KAzCrB,SAA4B1I,GAC1B,MAAM4D,GAAOm9B,EAAAA,EAAAA,GAAqB5+B,EAAMnC,GAClCid,EAAOuK,EAAUxnB,EAAQ4O,QAE/B,GAAKhL,GAASqZ,EAId,OACE,mBAAC,GAAD,CACErO,OAAQ5O,EAAQ4O,OAChB5O,QAASA,EACTmgC,YAAaA,aCpEd,SAAS4D,GAAsBhmB,GACpC,MAAO,CAACld,EAAqB2O,KAAe,QAC1C,MAAQ+X,KAAMC,GAAc3mB,EAAOymB,OAC3BC,KAAMuB,GAAcjoB,EAAOmoB,OAC7B,eACJyY,EADI,cACY7iB,EADZ,OAC2BhQ,GAC7B/N,EAAO2+B,aAKLwE,EAAuB,UAATjmB,EAAmBA,EAAQvO,MAAAA,GAAAA,EAAOy0B,QAAU,QAAU,SAElEjC,SAAUC,GAA2BphC,EAAOk0B,SAC9CpW,EAAWC,MAAAA,GAAH,UAAGA,EAAgBolB,UAAnB,aAAG,EAA8BrlB,SAEzCulB,EAAkBrjC,EAAOqjC,gBAAgBlC,SAE/C,MAAO,CACLmC,OAAOC,EAAAA,EAAAA,IAAYvjC,GACnBwjC,eAAwBvoC,IAAb6iB,KACL8iB,GAAiB/jC,QAAQ+jC,EAAena,OAASma,EAAe1M,UACtEvN,UAAAA,EACAsB,UAAAA,EACAmZ,uBAAAA,EACAtjB,SAAAA,EACA2lB,aAAc11B,EACds1B,gBAAAA,EACAK,gBAAiB31B,EAAM,WAAGU,EAAAA,EAAAA,IAAWzO,EAAQ+N,UAAtB,aAAG,EAA4B5N,iBAAclF,EACpEmkC,aAAcp/B,EAAOo/B,e,qCCxB3B,MAAMuE,GAAe,QAGfrF,IAAe56B,EAAAA,EAAAA,KAAU66B,GAAOA,KAAM,KAAK,GAqHjD,IAAez+B,EAAAA,EAAAA,KAAKC,EAAAA,EAAAA,IAClBmjC,GAAsBS,IADJ5jC,EAnH4B,IAQ1C,IAR2C,YAC/Cu/B,EAD+C,aAE/CmE,EAF+C,UAG/CD,EAH+C,uBAI/CpC,EAJ+C,SAK/CtjB,EAL+C,aAM/CshB,EAN+C,gBAO/CsE,GACI,EACJ,MAAM,qBACJnC,EADI,gBAEJtjB,IACEld,EAAAA,EAAAA,MAGE0R,GAAe5X,EAAAA,EAAAA,IAAuB,MAEtCyG,GAAOC,EAAAA,EAAAA,MAELqiC,QAASC,IAAgCC,EAAAA,GAAAA,IAAwB,CACvEC,QAAStxB,EACTuxB,WAzB0B,MA4BtB3J,GAAiBh5B,EAAAA,EAAAA,KAAY,IAAqD,IAApD,UAAEuT,GAAkD,EAClFwqB,GAAgBxqB,IAAc+lB,EAAAA,GAAAA,WAChC2D,IAAa,KACXiD,EAAqB,CACnBrkB,KAAMymB,GACN9B,MAAOvC,EACPvxB,OAAQ01B,SAIb,CAACrE,EAAcmC,EAAsBjC,EAAamE,IAE/CrB,GAAgB3gC,EAAAA,EAAAA,KAAQ,IACvBqc,GAAasjB,EAIXtjB,EAASjW,KAAKtJ,IAAO,MAC1B,MAAOwP,EAAQE,GAAa1P,EAAG8jC,MAAM,KAErC,iBAAOjB,EAAuBrzB,UAA9B,aAAO,EAAgC2Y,KAAKvJ,OAAOlP,OAClDuW,OAAO3nB,SAPDolC,GAAAA,GAQR,CAACb,EAAwBtjB,IAEtBmmB,GAAoB5iC,EAAAA,EAAAA,KAAY,CAAC4M,EAAmBF,KACxDkQ,EAAgB,CACdlQ,OAAAA,EACAE,UAAAA,EACAjR,OAAQY,EAAAA,GAAAA,iBAET,CAACqgB,IA6BEimB,GAAoBC,EAAAA,GAAAA,GAAkB,CAAC7E,GAAc8E,EAAAA,KAA+BZ,EACpFa,EAAcH,GAAqBpmB,GAAYA,EAASpe,OAAS,IAAM4/B,EACvEgF,EAAgBJ,GAAqBpmB,GAAYA,EAASpe,OAAS,GAAK4/B,EAExEz7B,GAAaC,EAAAA,EAAAA,GACjB,+BACAwgC,GAAiB,aAGnB,OACE,0BAAK18B,IAAK6K,EAAc1Q,UAAU,cAChC,mBAAC6jB,GAAA,EAAD,CACE7jB,UAAW8B,EACXgiB,MAAOuc,EACPmC,aAAejF,EAAyB,YAAX,SAC7BxZ,WAAYuU,EACZwI,YAAU,IAERqB,GAAqB,mBAAC1d,GAAA,EAAD,MACtB0d,KAAuBpmB,GAAgC,IAApBA,EAASpe,SAC3C,mBAACojC,GAAA,EAAD,CACE//B,KAAMzB,EAAK,6BACXu0B,YAAav0B,EAAK,0CAGrB+iC,GAlDH,0BAAKtiC,UAAU,aAAakC,IAAK3C,EAAK4iB,MAAQ,WAAQjpB,GACnDmnC,EAAcv6B,KAAK1I,GAClB,mBAACqlC,GAAA,EAAD,CACE13B,IAAK3N,EAAQZ,GACbkmC,SAAS,eACTtlC,QAASA,EACTgB,YAAaujC,GAAmBvkC,EAAQgB,YACxCukC,oBAAqBb,EACrB7hC,QAASiiC,OA2CZK,GAnCElC,EAAcv6B,KAAK1I,GACxB,mBAAC,GAAD,CACE2N,IAAK3N,EAAQZ,GACbwP,OAAQ5O,EAAQ4O,OAChB5O,QAASA,Y,wBCnFjB,MAAMwkC,GAAe,QAGfrF,IAAe56B,EAAAA,EAAAA,KAAU66B,GAAOA,KAAM,KAAK,GA2GjD,IAAez+B,EAAAA,EAAAA,KAAKC,EAAAA,EAAAA,IAClBmjC,GAAsBS,IADJ5jC,EAzG2B,IAUzC,IAV0C,YAC9Cu/B,EAD8C,aAE9CmE,EAF8C,UAG9CD,EAH8C,UAI9C7c,EAJ8C,UAK9CsB,EAL8C,uBAM9CmZ,EAN8C,SAO9CtjB,EAP8C,aAQ9CshB,EAR8C,gBAS9CsE,GACI,EACJ,MAAM,qBACJnC,EADI,aAEJ3lB,IACE7a,EAAAA,EAAAA,MAGE0R,GAAe5X,EAAAA,EAAAA,IAAuB,MAEtCyG,GAAOC,EAAAA,EAAAA,MAELqiC,QAASC,IAAgCC,EAAAA,GAAAA,IAAwB,CACvEC,QAAStxB,EACTuxB,WA3B0B,MA8BtB3J,GAAiBh5B,EAAAA,EAAAA,KAAY,IAAqD,IAApD,UAAEuT,GAAkD,EAClFwqB,GAAgBxqB,IAAc+lB,EAAAA,GAAAA,WAChC2D,IAAa,KACXiD,EAAqB,CACnBrkB,KAAMymB,GACN9B,MAAOvC,EACPvxB,OAAQ01B,SAIb,CAACrE,EAAcmC,EAAsBjC,EAAamE,IAE/CrB,GAAgB3gC,EAAAA,EAAAA,KAAQ,IACvBqc,GAAasjB,EAIXtjB,EAASjW,KAAKtJ,IAAO,MAC1B,MAAOwP,EAAQE,GAAa1P,EAAG8jC,MAAM,KAErC,iBAAOjB,EAAuBrzB,UAA9B,aAAO,EAAgC2Y,KAAKvJ,OAAOlP,OAClDuW,OAAO3nB,SAPDolC,GAAAA,GAQR,CAACb,EAAwBtjB,IAEtB6mB,GAAqBtjC,EAAAA,EAAAA,KAAY,CAAC4M,EAAmBF,KACzD6N,EAAa,CAAE7N,OAAAA,EAAQE,UAAAA,MACtB,CAAC2N,IA8BEsoB,GAAoBC,EAAAA,GAAAA,GAAkB,CAAC7E,GAAc8E,EAAAA,KAA+BZ,EAE1F,OACE,0BAAK57B,IAAK6K,EAAc1Q,UAAU,cAChC,mBAAC6jB,GAAA,EAAD,CACE7jB,UAAU,8CACV8jB,MAAOuc,EACPtc,WAAYuU,EACZwI,YAAU,IAERqB,GAAqB,mBAAC1d,GAAA,EAAD,MACtB0d,KAAuBpmB,GAAgC,IAApBA,EAASpe,SAC3C,mBAACojC,GAAA,EAAD,CACE//B,KAAMzB,EAAK,6BACXu0B,YAAav0B,EAAK,0CAGrB4iC,GAAqBpmB,GAAYA,EAASpe,OAAS,GA5CjD0iC,EAAcv6B,KAAI,CAAC1I,EAASykB,KACjC,MAAMghB,EAAkC,IAAVhhB,IACzBihB,EAAAA,GAAAA,IAAY1lC,EAAQod,SAAUsoB,EAAAA,GAAAA,IAAYzC,EAAcxe,EAAQ,GAAGrH,MACxE,OACE,0BACExa,UAAU,sBACVkC,IAAK3C,EAAK4iB,MAAQ,WAAQjpB,EAC1B6R,IAAK3N,EAAQZ,IAEZqmC,GACC,wBAAG7iC,UAAU,kBAAkBkC,IAAK3C,EAAK4iB,MAAQ,WAAQjpB,IACtD6pC,EAAAA,GAAAA,IAAmBxjC,EAAM,IAAIiT,KAAoB,IAAfpV,EAAQod,QAG/C,mBAACwoB,GAAA,EAAD,CACEj4B,IAAK3N,EAAQZ,GACbY,QAASA,EACT6c,aAAagpB,EAAAA,GAAAA,GAAc1jC,EAAMnC,EAASwnB,EAAWsB,GACrD9nB,YAAaujC,GAAmBvkC,EAAQgB,YACxCukC,oBAAqBb,EACrBoB,eAAgBN,c,eC9E5B,MAAMhB,GAAe,YAGfrF,IAAe56B,EAAAA,EAAAA,KAAU66B,GAAOA,KAAM,KAAK,GA4GjD,IAAez+B,EAAAA,EAAAA,KAAKC,EAAAA,EAAAA,IAClBmjC,GAAsBS,IADJ5jC,EA1G2B,IAUzC,IAV0C,YAC9Cu/B,EAD8C,aAE9CmE,EAF8C,UAG9CD,EAH8C,UAI9C7c,EAJ8C,UAK9CsB,EAL8C,uBAM9CmZ,EAN8C,SAO9CtjB,EAP8C,gBAQ9CulB,EAR8C,aAS9CjE,GACI,EACJ,MAAM,qBACJmC,EADI,aAEJ3lB,IACE7a,EAAAA,EAAAA,MAGE0R,GAAe5X,EAAAA,EAAAA,IAAuB,MAEtCyG,GAAOC,EAAAA,EAAAA,MAELqiC,QAASC,IAAgCC,EAAAA,GAAAA,IAAwB,CACvEC,QAAStxB,EACTuxB,WA3B0B,MA8BtB3J,GAAiBh5B,EAAAA,EAAAA,KAAY,IAAqD,IAApD,UAAEuT,GAAkD,EAClFwqB,GAAgBxqB,IAAc+lB,EAAAA,GAAAA,WAChC2D,IAAa,KACXiD,EAAqB,CACnBrkB,KAAMymB,GACN9B,MAAOvC,EACPvxB,OAAQ01B,SAIb,CAACrE,EAAcmC,EAAsBjC,EAAamE,IAE/CrB,GAAgB3gC,EAAAA,EAAAA,KAAQ,IACvBqc,GAAasjB,EAIXtjB,EAASjW,KAAKtJ,IAAO,MAC1B,MAAOwP,EAAQE,GAAa1P,EAAG8jC,MAAM,KAC/BljC,EAAO,UAAGiiC,EAAuBrzB,UAA1B,aAAG,EAAgC2Y,KAAKvJ,OAAOlP,IAE5D,OAAO9O,IAAWgS,EAAAA,EAAAA,IAAmBhS,GAAWA,OAAUlE,KACzDupB,OAAO3nB,SARDolC,GAAAA,GASR,CAACb,EAAwBtjB,IAEtB6mB,GAAqBtjC,EAAAA,EAAAA,KAAY,CAAC4M,EAAmBF,KACzD6N,EAAa,CAAE7N,OAAAA,EAAQE,UAAAA,MACtB,CAAC2N,IA8BEsoB,GAAoBC,EAAAA,GAAAA,GAAkB,CAAC7E,GAAc8E,EAAAA,KAA+BZ,EAE1F,OACE,0BAAK57B,IAAK6K,EAAc1Q,UAAU,cAChC,mBAAC6jB,GAAA,EAAD,CACE7jB,UAAU,8CACV8jB,MAAOuc,EACPtc,WAAYuU,EACZwI,YAAU,IAERqB,GAAqB,mBAAC1d,GAAA,EAAD,MACtB0d,KAAuBpmB,GAAgC,IAApBA,EAASpe,SAC3C,mBAACojC,GAAA,EAAD,CACE//B,KAAMzB,EAAK,6BACXu0B,YAAav0B,EAAK,0CAGrB4iC,GAAqBpmB,GAAYA,EAASpe,OAAS,GA5CjD0iC,EAAcv6B,KAAI,CAAC1I,EAASykB,KAAU,MAC3C,MAAMghB,EAAkC,IAAVhhB,IACzBihB,EAAAA,GAAAA,IAAY1lC,EAAQod,SAAUsoB,EAAAA,GAAAA,IAAYzC,EAAcxe,EAAQ,GAAGrH,MACxE,OACE,0BACExa,UAAU,sBACV+K,IAAK3N,EAAQZ,IAEZqmC,GACC,wBAAG7iC,UAAU,oBAAmB+iC,EAAAA,GAAAA,IAAmBxjC,EAAM,IAAIiT,KAAoB,IAAfpV,EAAQod,QAE5E,mBAAC2oB,GAAA,EAAD,CACE/lC,QAASA,EACTgmC,UAAQ,EACRC,SAAUjmC,EAAQod,KAClB8oB,SAAO,EACP7pB,QAAQwpB,EAAAA,GAAAA,GAAc1jC,EAAMnC,EAASwnB,EAAWsB,GAChDlmB,UAAU,cACV9B,cAAa,UAAEojC,EAAgBlkC,EAAQ4O,eAA1B,aAAE,EAAiCvP,SAASW,EAAQZ,IACjEmmC,oBAAqBb,EACrByB,YAAaX,c,eCnFzB,MAAMrG,IAAe56B,EAAAA,EAAAA,KAAU66B,GAAOA,KAAM,KAAK,GA8GjD,IAAez+B,EAAAA,EAAAA,KAAKC,EAAAA,EAAAA,IAClBmjC,GAAsB,SADJnjC,EA5G4B,IAY1C,IAZ2C,MAC/CujC,EAD+C,QAE/CF,EAF+C,YAG/C9D,EAH+C,aAI/CmE,EAJ+C,UAK/CD,EAL+C,UAM/C7c,EAN+C,UAO/CsB,EAP+C,uBAQ/CmZ,EAR+C,SAS/CtjB,EAT+C,aAU/CshB,EAV+C,gBAW/CiE,GACI,EACJ,MAAM,qBACJ9B,EADI,aAEJ3lB,EAFI,gBAGJ2pB,IACExkC,EAAAA,EAAAA,MAEEO,GAAOC,EAAAA,EAAAA,KACP4hC,EAAcC,EAAU,QAAU,QAClC/I,GAAiBh5B,EAAAA,EAAAA,KAAY,IAAqD,IAApD,UAAEuT,GAAkD,EAClFwqB,GAAgBxqB,IAAc+lB,EAAAA,GAAAA,WAChC2D,IAAa,KACXiD,EAAqB,CACnBrkB,KAAMimB,EACNtB,MAAOvC,EACPvxB,OAAQ01B,SAIb,CAACN,EAAa/D,EAAcmC,EAAsBjC,EAAamE,IAE5DrB,GAAgB3gC,EAAAA,EAAAA,KAAQ,IACvBqc,GAAasjB,EAIXtjB,EAASjW,KAAKtJ,IAAO,MAC1B,MAAOwP,EAAQE,GAAa1P,EAAG8jC,MAAM,KAErC,iBAAOjB,EAAuBrzB,UAA9B,aAAO,EAAgC2Y,KAAKvJ,OAAOlP,OAClDuW,OAAO3nB,SAPDolC,GAAAA,GAQR,CAACb,EAAwBtjB,IAEtB6mB,GAAqBtjC,EAAAA,EAAAA,KAAY,CAAC4M,EAAmBF,KACzD6N,EAAa,CAAE7N,OAAAA,EAAQE,UAAAA,MACtB,CAAC2N,IAEE4pB,GAAkBnkC,EAAAA,EAAAA,KAAY,CAAC4M,EAAmBF,KACtDw3B,EAAgB,CAAEx3B,OAAAA,EAAQE,UAAAA,MACzB,CAACs3B,IAkCErB,GAAoBC,EAAAA,GAAAA,GAAkB,CAAC7E,GAAc8E,EAAAA,KAA+BZ,EAE1F,OACE,0BAAKzhC,UAAU,cACb,mBAAC6jB,GAAA,EAAD,CACE7jB,UAAU,8CACV8jB,MAAOuc,EACPtc,WAAYuU,EACZwI,YAAU,IAERqB,GAAqB,mBAAC1d,GAAA,EAAD,MACtB0d,KAAuBpmB,GAAgC,IAApBA,EAASpe,SAC3C,mBAACojC,GAAA,EAAD,CACE//B,KAAMzB,EAAK,6BACXu0B,YAAav0B,EAAK,0CAGrB4iC,GAAqBpmB,GAAYA,EAASpe,OAAS,GAhDjD0iC,EAAcv6B,KAAI,CAAC1I,EAASykB,KAAU,MAC3C,MAAMghB,EAAkC,IAAVhhB,IACzBihB,EAAAA,GAAAA,IAAY1lC,EAAQod,SAAUsoB,EAAAA,GAAAA,IAAYzC,EAAcxe,EAAQ,GAAGrH,MACxE,OACE,0BACExa,UAAU,sBACV+K,IAAK3N,EAAQZ,IAEZqmC,GACC,wBAAG7iC,UAAU,kBAAkBkC,IAAK3C,EAAK4iB,MAAQ,WAAQjpB,IACtD6pC,EAAAA,GAAAA,IAAmBxjC,EAAM,IAAIiT,KAAoB,IAAfpV,EAAQod,QAG/C,mBAACkpB,GAAA,EAAD,CACE34B,IAAK3N,EAAQZ,GACb+kC,MAAOA,EACPnkC,QAASA,EACTnC,OAAQ0oC,EAAAA,GAAAA,OACR1pB,aAAagpB,EAAAA,GAAAA,GAAc1jC,EAAMnC,EAASwnB,EAAWsB,GACrD1L,KAAMpd,EAAQod,KACd6iB,aAAcA,EACdr9B,UAAU,cACVyL,OAAQg4B,EACRF,YAAaX,EACb1kC,cAAa,UAAEojC,EAAgBlkC,EAAQ4O,eAA1B,aAAE,EAAiCvP,SAASW,EAAQZ,gBCvEvEonC,GAAO,CACX,CAAEzoB,KAAM0oB,EAAAA,GAAAA,SAA8Bjc,MAAO,uBAC7C,CAAEzM,KAAM0oB,EAAAA,GAAAA,MAA2Bjc,MAAO,mBAC1C,CAAEzM,KAAM0oB,EAAAA,GAAAA,MAA2Bjc,MAAO,mBAC1C,CAAEzM,KAAM0oB,EAAAA,GAAAA,MAA2Bjc,MAAO,mBAC1C,CAAEzM,KAAM0oB,EAAAA,GAAAA,MAA2Bjc,MAAO,mBAC1C,CAAEzM,KAAM0oB,EAAAA,GAAAA,MAA2Bjc,MAAO,oBAGtCkc,GAAY,CAChB,CAAE3oB,KAAM0oB,EAAAA,GAAAA,SAA8Bjc,MAAO,mBAC1Cgc,GAAKG,MAAM,IAGVC,GAA0BhnC,OAAOu8B,KAAKsK,EAAAA,IAAqBlmC,OAAS,EA+F1E,IAAeI,EAAAA,EAAAA,KAAKC,EAAAA,EAAAA,KACjBC,IACC,MAAM,eAAEgmC,EAAF,OAAkBj4B,GAAW/N,EAAO2+B,aAE1C,MAAO,CAAEqH,eAAAA,EAAgBj4B,OAAAA,KAJThO,EA7F0B,IAOxC,IAPyC,YAC7Cu/B,EAD6C,WAE7Cc,EAF6C,SAG7CxxB,EAH6C,eAI7Co3B,EAAiBJ,EAAAA,GAAAA,SAJ4B,OAK7C73B,EAL6C,QAM7C6wB,GACI,EACJ,MAAM,uBACJqH,EADI,oBAEJC,IACEnlC,EAAAA,EAAAA,MAEEO,GAAOC,EAAAA,EAAAA,MACN4kC,EAAWC,IAAgBhjC,EAAAA,EAAAA,IAAS4iC,GACrC3E,GAAkB5/B,EAAAA,EAAAA,KAAQ,KAAM4kC,EAAAA,GAAAA,IAAgB/G,IAAc,CAACA,IAE/DgH,GAAkBjlC,EAAAA,EAAAA,KAAauiB,IACnC,MAAM2iB,EAAMZ,GAAK/hB,GACjBqiB,EAAuB,CAAE5xB,QAASkyB,EAAIrpB,OACtCkpB,EAAaxiB,KACZ,CAACqiB,IAEEO,GAAyBnlC,EAAAA,EAAAA,KAAagH,IAC1C69B,EAAoB,CAAE3pB,KAAMlU,EAAM+lB,UAAY,QAC7C,CAAC8X,KAEJpiB,EAAAA,EAAAA,IAAelV,EAAUgwB,OAAS3jC,OAAWA,GAAW,GAGxD,MAAMwX,GAAe5X,EAAAA,EAAAA,IAAuB,MACtCkpB,GAAgBqB,EAAAA,GAAAA,GAA0B3S,EAAc7D,OAAU3T,EAAW,oBAAoB,GAEvG,OACE,0BAAK8G,UAAU,aAAa6F,IAAK6K,EAAc8S,UAAWxB,GACxD,mBAAC0iB,GAAA,EAAD,CAASN,UAAWA,EAAWO,KAAM34B,EAAS83B,GAAYF,GAAMgB,YAAaL,IAC7E,mBAAC9pB,EAAA,EAAD,CACE4H,KAAM9iB,EAAK4iB,MAAQ,sBAAwB,kBAC3C0iB,YAAab,GACb5hB,UAAW6hB,GAEV,MACC,OAAQA,GACN,KAAKJ,EAAAA,GAAAA,SACH,OAAI73B,EAEA,mBAAC,GAAD,CACEuxB,YAAaA,EACb+B,gBAAiBA,EACjBzC,QAASA,EACT0C,mBAAoBkF,IAKxB,mBAAC,GAAD,CACElH,YAAaA,EACbc,WAAYA,EACZiB,gBAAiBA,EACjBzC,QAASA,EACT0C,mBAAoBkF,IAG1B,KAAKZ,EAAAA,GAAAA,MACH,OAAO,mBAAC,GAAD,CAActG,YAAaA,IACpC,KAAKsG,EAAAA,GAAAA,MACH,OAAO,mBAAC,GAAD,CAAatG,YAAaA,IACnC,KAAKsG,EAAAA,GAAAA,MACH,OAAO,mBAAC,GAAD,CAAatG,YAAaA,IACnC,KAAKsG,EAAAA,GAAAA,MACH,OACE,mBAAC,GAAD,CACE94B,IAAI,QACJwyB,YAAaA,IAGnB,KAAKsG,EAAAA,GAAAA,MACH,OACE,mBAAC,GAAD,CACE94B,IAAI,QACJs2B,SAAO,EACP9D,YAAaA,IAGnB,QACE,SA5CL,S,eC9ET,MAAMuH,GAA4B,CAChCC,gBAAiB,GACjBC,SAAU,GACVC,KAAM,GACNC,MAAO,IAGHC,GAAuD,CAC3DC,EACAC,KAEA,OAAQA,EAAOlqB,MACb,IAAK,qBACH,MAAO,IACFiqB,EACHL,gBAAiBM,EAAOC,SAG5B,IAAK,cACH,MAAO,IACFF,EACHJ,SAAUK,EAAOC,SAGrB,IAAK,UACH,MAAO,IACFF,EACHH,KAAMI,EAAOC,SAGjB,IAAK,WACH,MAAO,IACFF,EACHF,MAAOG,EAAOC,SAGlB,IAAK,QACH,OAAOR,GAET,QACE,OAAOM,ICqNb,IAAernC,EAAAA,EAAAA,KApPsB,IAM/B,IANgC,cACpCwnC,EADoC,eAEpCC,EAFoC,QAGpC3I,EAHoC,aAIpC4I,EAJoC,eAKpCC,GACI,EACJ,MAAM,QACJC,EADI,iBAEJC,IACE5mC,EAAAA,EAAAA,OAEG6mC,EAAqBC,IAA0BzkC,EAAAA,EAAAA,KAAS,IACxD0kC,EAA0BC,IAA+B3kC,EAAAA,EAAAA,KAAS,GAEnE4kC,GAA0B3mC,EAAAA,EAAAA,KAAY,KAC1CwmC,GAAuB,KACtB,IAEGI,GAA2B5mC,EAAAA,EAAAA,KAAY,KAC3CwmC,GAAuB,KACtB,IAEGK,GAA+B7mC,EAAAA,EAAAA,KAAY,KAC/C0mC,GAA4B,KAC3B,IAEGI,GAAgC9mC,EAAAA,EAAAA,KAAY,KAChD0mC,GAA4B,KAC3B,IAEGK,GAAuB/mC,EAAAA,EAAAA,KAAY,KACvC4mC,IACAP,MACC,CAACO,EAA0BP,IAExBW,GAA4BhnC,EAAAA,EAAAA,KAAY,KAC5C8mC,IACAR,EAAiB,CAAEppC,GAAIgpC,IACvB3I,MACC,CAAC2I,EAAgBY,EAA+BR,EAAkB/I,IAE/D0J,GAAsE7mC,EAAAA,EAAAA,KAAQ,IAC3E,QAAC,UAAEC,EAAF,OAAaC,GAAd,SACL,mBAACC,EAAA,EAAD,CACEC,OAAK,EACLoG,QAAS/F,EAAAA,GACT3F,KAAK,UACLuF,MAAM,cACNC,UAAWJ,EAAS,SAAW,GAC/BK,QAASN,EACTO,UAAU,gBAEV,wBAAGF,UAAU,iBAGhB,IAEGT,GAAOC,EAAAA,EAAAA,KA0Jb,OACE,0BAAKQ,UAAU,eACb,mBAACH,EAAA,EAAD,CACEC,OAAK,EACLtF,KAAK,UACLuF,MAAM,cACNE,QAAS48B,EACT38B,UAAWX,EAAK,mBAEhB,wBAAGS,UAAU,qBAjKnB,WACE,OAAQulC,GACN,KAAKiB,EAAAA,GAAAA,YACH,OAAO,6BAAKjnC,EAAK,6BACnB,KAAKinC,EAAAA,GAAAA,QACH,OAAO,6BAAKjnC,EAAK,YACnB,KAAKinC,EAAAA,GAAAA,cACH,OAAO,6BAAKjnC,EAAK,qBACnB,KAAKinC,EAAAA,GAAAA,cACH,OAAO,6BAAKjnC,EAAK,kBACnB,KAAKinC,EAAAA,GAAAA,YACH,OAAO,6BAAKjnC,EAAK,iBACnB,KAAKinC,EAAAA,GAAAA,QACH,OAAO,6BAAKjnC,EAAK,oBACnB,KAAKinC,EAAAA,GAAAA,SACH,OAAO,6BAAKjnC,EAAK,aAEnB,KAAKinC,EAAAA,GAAAA,sBACH,OAAO,6BAAKjnC,EAAK,mBACnB,KAAKinC,EAAAA,GAAAA,2BACH,OAAO,6BAAKjnC,EAAK,aAEnB,KAAKinC,EAAAA,GAAAA,mBACH,OAAO,6BAAKjnC,EAAK,iBACnB,KAAKinC,EAAAA,GAAAA,gBACH,OAAO,6BAAKjnC,EAAK,oBACnB,KAAKinC,EAAAA,GAAAA,oBACH,OAAO,6BAAKjnC,EAAK,yBACnB,KAAKinC,EAAAA,GAAAA,kBACH,OAAO,6BAAKjnC,EAAK,oBACnB,KAAKinC,EAAAA,GAAAA,kBACH,OAAO,6BAAKjnC,EAAK,2BACnB,KAAKinC,EAAAA,GAAAA,kCACL,KAAKA,EAAAA,GAAAA,+BACL,KAAKA,EAAAA,GAAAA,mCACL,KAAKA,EAAAA,GAAAA,iCACL,KAAKA,EAAAA,GAAAA,iCACH,OAAO,6BAAKjnC,EAAK,oBACnB,KAAKinC,EAAAA,GAAAA,iCACL,KAAKA,EAAAA,GAAAA,8BACL,KAAKA,EAAAA,GAAAA,kCACL,KAAKA,EAAAA,GAAAA,gCACL,KAAKA,EAAAA,GAAAA,gCACH,OAAO,6BAAKjnC,EAAK,mBAEnB,KAAKinC,EAAAA,GAAAA,eACH,OAAO,6BAAKjnC,EAAK,kBACnB,KAAKinC,EAAAA,GAAAA,oBACH,OAAO,6BAAKjnC,EAAK,iBAEnB,KAAKinC,EAAAA,GAAAA,cACL,KAAKA,EAAAA,GAAAA,aACH,OAAO,6BAAKjnC,EAAK,wBACnB,KAAKinC,EAAAA,GAAAA,iBACL,KAAKA,EAAAA,GAAAA,uBACL,KAAKA,EAAAA,GAAAA,2BACH,OAAO,6BAAKjnC,EAAK,+BACnB,KAAKinC,EAAAA,GAAAA,wBACH,OAAO,6BAAKjnC,EAAK,0BACnB,KAAKinC,EAAAA,GAAAA,qBACL,KAAKA,EAAAA,GAAAA,wBACH,OAAO,6BAAKjnC,EAAK,iBACnB,KAAKinC,EAAAA,GAAAA,sBACL,KAAKA,EAAAA,GAAAA,mBACH,OAAO,6BAAKjnC,EAAK,uBACnB,KAAKinC,EAAAA,GAAAA,0BACL,KAAKA,EAAAA,GAAAA,uBACH,OAAO,oDACT,KAAKA,EAAAA,GAAAA,qBACH,OAAO,6BAAKjnC,EAAK,mCACnB,KAAKinC,EAAAA,GAAAA,2BACL,KAAKA,EAAAA,GAAAA,aACL,KAAKA,EAAAA,GAAAA,kCACH,OAAO,6BAAKjnC,EAAK,+BAEnB,KAAKinC,EAAAA,GAAAA,QACH,OAAO,6BAAKjnC,EAAK,YACnB,KAAKinC,EAAAA,GAAAA,oBACH,OAAO,6BAAKjnC,EAAK,cACnB,KAAKinC,EAAAA,GAAAA,kBACL,KAAKA,EAAAA,GAAAA,8BACH,OACE,0BAAKxmC,UAAU,wBACb,6BAAKT,EAAK,eAETimC,GACC,mBAACplC,EAAA,EAAD,CACEJ,UAAU,qBACVK,QAASkmC,EACTjmC,UAAU,SAEV,mBAACC,EAAA,EAAD,CAAUC,KAAK,SAASs2B,aAAW,EAAC72B,QAASkmC,GAC1C5mC,EAAK,aAMlB,KAAKinC,EAAAA,GAAAA,qBACL,KAAKA,EAAAA,GAAAA,iCACL,KAAKA,EAAAA,GAAAA,qBACL,KAAKA,EAAAA,GAAAA,iCACH,OACE,0BAAKxmC,UAAU,wBACXulC,IAAkBiB,EAAAA,GAAAA,sBACfjB,IAAkBiB,EAAAA,GAAAA,iCACnB,6BAAKjnC,EAAK,kBAEV,6BAAKA,EAAK,kBAGd,mBAACM,EAAA,EAAD,CACEC,OAAK,EACLtF,KAAK,UACLuF,MAAM,cACNC,UAAU,gBACVC,QAASwlC,EACTvlC,UAAWX,EAAK,sBAEhB,wBAAGS,UAAU,iBAKrB,QACE,OACE,0BAAKA,UAAU,wBACb,6BAAKT,EAAK,aAEV,mBAACM,EAAA,EAAD,CACEC,OAAK,EACLoG,QAAS/F,EAAAA,GACT3F,KAAK,UACLuF,MAAM,cAENE,QAAS,IAAMylC,EAAec,EAAAA,GAAAA,aAC9BtmC,UAAWX,EAAK,6BAEhB,wBAAGS,UAAU,eAEf,mBAACI,EAAA,EAAD,CACEJ,UAAU,qBACVK,QAASkmC,EACTjmC,UAAU,SAEV,mBAACC,EAAA,EAAD,CAAUC,KAAK,SAASP,QAASgmC,GAA0B1mC,EAAK,mBAkBvEknC,GACD,mBAACrd,GAAA,EAAD,CACExpB,OAAQimC,EACR7+B,QAASk/B,EACTllC,KAAMzB,EAAK,mBACX8pB,aAAc9pB,EAAK,0BACnB+pB,eAAgB+c,EAChBK,sBAAoB,IAEtB,mBAACtd,GAAA,EAAD,CACExpB,OAAQmmC,EACR/+B,QAASo/B,EACTplC,KAAMzB,EAAK,qBACX8pB,aAAc9pB,EAAK,UACnB+pB,eAAgBgd,EAChBI,sBAAoB,Q,wBC3O5B,MAkGA,IAAe3oC,EAAAA,EAAAA,KAAKC,EAAAA,EAAAA,KACjBC,IACC,MAAM,cAAEqkB,EAAF,aAAiB+a,GAAiBp/B,EAExC,MAAO,CACL0oC,aAAc1oC,EAAO2oC,eAAejpC,OACpCkpC,YAAavkB,GAAgB7V,EAAAA,EAAAA,IAAWxO,EAAQqkB,QAAiBppB,EACjEmkC,aAAAA,KAPcr/B,EAlG4B,IAO1C,IAP2C,SAC/C6O,EAD+C,eAE/C64B,EAF+C,QAG/C7I,EAH+C,YAI/CgK,EAJ+C,aAK/CF,EAL+C,aAM/CtJ,GACI,EACJ,MAAM,kBAAEyJ,EAAF,mBAAqBC,IAAuB/nC,EAAAA,EAAAA,MAE5CO,GAAOC,EAAAA,EAAAA,KACPwnC,EAAYH,MAAAA,OAAH,EAAGA,EAAarqC,GAgB/B,OAdAnC,EAAAA,EAAAA,KAAU,KACJ2sC,GAAa3J,GACfyJ,EAAkB,CAAEE,UAAAA,MAErB,CAAC3J,EAAc2J,EAAWF,KAE7B/kB,EAAAA,EAAAA,IAAelV,EAAUgwB,EAAS6I,EAAgBc,EAAAA,GAAAA,OAElDnsC,EAAAA,EAAAA,KAAU,KACJgjC,GACF0J,MAED,CAAC1J,EAAc0J,IAGhB,0BAAK/mC,UAAU,kCACb,0BAAKA,UAAU,sBACZ6mC,GACC,mBAACI,GAAA,EAAD,CACE1iB,OAAQsiB,EAAYrqC,GACpB0qC,eAAa,IAGhBL,GACC,mBAACM,GAAA,EAAD,CACElG,aAAc4F,EAAYrqC,GAC1B0qC,eAAa,IAGjB,mBAAC9iB,GAAA,EAAD,CACE5jB,KAAK,WAELP,QAAS,IAAMylC,EAAec,EAAAA,GAAAA,UAE7BjnC,EAAK,2CAER,mBAAC6kB,GAAA,EAAD,CACE5jB,KAAK,SAELP,QAAS,IAAMylC,EAAec,EAAAA,GAAAA,gBAE7BjnC,EAAK,kBAER,mBAAC6kB,GAAA,EAAD,CACE5jB,KAAK,OAELP,QAAS,IAAMylC,EAAec,EAAAA,GAAAA,cAE7BjnC,EAAK,iBAER,mBAAC6kB,GAAA,EAAD,CACE5jB,KAAK,OAELP,QAAS,IAAMylC,EAAec,EAAAA,GAAAA,UAE7BjnC,EAAK,oBAER,mBAAC6kB,GAAA,EAAD,CACE5jB,KAAK,SAELP,QAAS,IAAMylC,EAAec,EAAAA,GAAAA,UAE7BjnC,EAAK,YAER,mBAAC6kB,GAAA,EAAD,CACE5jB,KAAK,kBAELP,QAAS,IAAMylC,EAAec,EAAAA,GAAAA,iBAE7BjnC,EAAK,iBACLonC,EAAe,GAAM,2BAAM3mC,UAAU,gCAAgC2mC,IAExE,mBAACviB,GAAA,EAAD,CACE5jB,KAAK,WAELP,QAAS,IAAMylC,EAAec,EAAAA,GAAAA,WAE7BjnC,EAAK,YACN,2BAAMS,UAAU,gCAAgCT,EAAK6nC,iB,yBClG/D,MAEMC,GAAc,gBACdC,GAAoB,sBACpBC,GAAiB,oBAEjBC,IAA+B70B,EAAAA,EAAAA,KAAU6pB,GAAOA,KAAM,KAAK,GAkFjE,IAAez+B,EAAAA,EAAAA,KA1E2B,IAOpC,IAPqC,gBACzC0pC,EADyC,OAEzCC,EAFyC,UAGzCjG,EAHyC,oBAIzCkG,EAJyC,cAKzCC,EALyC,SAMzCrhC,GACI,EACJ,MAAOshC,EAAUC,IAAezmC,EAAAA,EAAAA,IAASomC,GAAmB,IAEtDloC,GAAOC,EAAAA,EAAAA,KACPuoC,EAAaL,EAAS,SAAW,WACjC1W,EAAiBzxB,EAATmoC,EAAc,oBAA4B,aAEjDM,EAAiBC,IAAiBvoC,EAAAA,EAAAA,KAAQ,IAC1CmoC,EAASlqC,OAIVkqC,EAASlqC,OAjCW,EAkCf,MAACzE,EAAY,GAAE83B,kBAEpB6W,EAASlqC,OAnCW,GAoCf,MAACzE,EAAY,GAAE83B,iBAEnBuW,GAAeW,KAAKL,QAIG3uC,IAAxByuC,EACK,GAIF,CACLA,EAAsBpoC,EAAM,GAAEwoC,aAAuB,iBAAc7uC,GAC3C,IAAxByuC,EAAgCpoC,EAAM,GAAEwoC,eAAqB7uC,GAVtD,MAACA,EAAY,GAAE83B,iCAVf,IAsBR,CAAC6W,EAAUF,EAAqBpoC,EAAMwoC,EAAY/W,KAErD32B,EAAAA,EAAAA,KAAU,KACRytC,EAAYL,GAAmB,MAC9B,CAACC,EAAQD,IAEZ,MAAMU,GAAuB7oC,EAAAA,EAAAA,KAAa0C,IACxC,MAAMomC,EAAcpmC,EAAEmI,OAAO7D,MAAM+hC,OAAOxa,QAAQyZ,GAAmB,IACrEQ,EAAYM,GACZpmC,EAAEmI,OAAO7D,MAAS,GAAEohC,EAASL,GAAc,KAAKe,IAEhD,MAAME,EAvDV,SAAyBT,GACvB,OAAOA,EAASlqC,QATU,GAUrBkqC,EAASlqC,QATY,IAUrB4pC,GAAeW,KAAKL,GAoDPU,CAAgBH,GAE5BE,GACFd,IAA6B,KAC3BI,EAAc,CAAEC,SAAUO,OAI1B7hC,GACFA,IAAS+hC,GAAUF,KAEpB,CAACV,EAAQE,EAAerhC,IAE3B,OACE,mBAACgd,GAAA,EAAD,CACEjd,MAAQ,GAAEohC,EAASL,GAAc,KAAKQ,IACtCthC,SAAU4hC,EACVnX,MAAOA,EACPpK,MAAOqhB,EACPO,QAASR,EACTS,SAAUhH,OC/DVlF,IAAe56B,EAAAA,EAAAA,KAAU66B,GAAOA,KAAM,KAAO,GAI7CkM,GAA2B,iCAC3BC,GAAqB,wCAiN3B,IAAe5qC,EAAAA,EAAAA,KAAKC,EAAAA,EAAAA,KACjBC,IACC,MAAM,cAAEqkB,GAAkBrkB,GACpB,SAAE4C,EAAF,oBAAY8mC,GAAwB1pC,EAAO2qC,aAAe,GAC1D/B,EAAcvkB,GAAgB7V,EAAAA,EAAAA,IAAWxO,EAAQqkB,QAAiBppB,EAExE,IAAK2tC,EACH,MAAO,CACLhmC,SAAAA,EACA8mC,oBAAAA,GAIJ,MACE5X,UAAW8Y,EACX5Y,SAAU6Y,EACVjB,SAAUJ,EAHN,SAIJsB,GACElC,GACImC,IAAKC,GAAeF,GAAY,GAGxC,MAAO,CACLG,mBAHwB96B,EAAAA,EAAAA,IAAkBy4B,GAI1CgC,iBAAAA,EACAC,gBAAAA,EACAG,WAAAA,EACAxB,gBAAAA,EACA5mC,SAAAA,EACA8mC,oBAAAA,KA7Bc3pC,EA/MmC,IAWjD,IAXkD,SACtD6O,EADsD,eAEtD64B,EAFsD,QAGtD7I,EAHsD,kBAItDqM,EAJsD,iBAKtDL,EALsD,gBAMtDC,EANsD,WAOtDG,EAPsD,gBAQtDxB,EARsD,SAStD5mC,EATsD,oBAUtD8mC,GACI,EACJ,MAAM,gBACJwB,EADI,cAEJC,EAFI,cAGJxB,IACE5oC,EAAAA,EAAAA,MAEEO,GAAOC,EAAAA,EAAAA,MAEN6pC,EAAmBC,IAAwBjoC,EAAAA,EAAAA,KAAS,IACpDkoC,EAAwBC,IAA6BnoC,EAAAA,EAAAA,KAAS,IAC9DulB,EAAO6iB,IAAYpoC,EAAAA,EAAAA,OAEnB6L,EAAOw8B,IAAYroC,EAAAA,EAAAA,OACnB0uB,EAAWC,IAAgB3uB,EAAAA,EAAAA,IAASwnC,GAAoB,KACxD5Y,EAAUC,IAAe7uB,EAAAA,EAAAA,IAASynC,GAAmB,KACrDE,EAAKW,IAAUtoC,EAAAA,EAAAA,IAAS4nC,GAAc,KACtCpB,EAAUC,IAAezmC,EAAAA,EAAAA,IAAyBomC,GAAmB,IAEtEmC,GAAuBt7B,EAAAA,EAAAA,GAAS46B,GAAmB,EAAO36B,EAAAA,GAAAA,SAE1DkzB,EAAY5gC,IAAagpC,EAAAA,GAAAA,WACzBC,GAA+B,IAAbjC,EAElBkC,GAAoBrqC,EAAAA,EAAAA,KAAQ,KAC5BoqC,IAIGhvC,QAAQoS,IAAUq8B,IAAkD,IAAxB5B,IAClD,CAACz6B,EAAOq8B,EAAwBO,EAAiBnC,KAEpD5lB,EAAAA,EAAAA,IAAelV,EAAUgwB,EAAS6I,EAAgBc,EAAAA,GAAAA,cAIlDnsC,EAAAA,EAAAA,KAAU,KACRkiC,IAAa,KACX4M,SAED,CAACA,KAEJ9uC,EAAAA,EAAAA,KAAU,KACRqvC,OAASxwC,KACR,CAAC0wC,KAEJvvC,EAAAA,EAAAA,KAAU,KACR21B,EAAa6Y,GAAoB,IACjC3Y,EAAY4Y,GAAmB,IAC/Ba,EAAOV,GAAc,MACpB,CAACJ,EAAkBC,EAAiBG,KAEvC5uC,EAAAA,EAAAA,KAAU,KACRytC,EAAYL,GAAmB,MAC9B,CAACA,KAEJptC,EAAAA,EAAAA,KAAU,KACJwG,IAAagpC,EAAAA,GAAAA,WACfL,GAA0B,GAC1BF,GAAqB,GACrBG,OAASvwC,MAEV,CAAC2H,IAEJ,MAAMmpC,GAAoB1qC,EAAAA,EAAAA,KAAa2qC,IACrCP,EAASO,KACR,IAEGvZ,GAAwBpxB,EAAAA,EAAAA,KAAa0C,IACzCguB,EAAahuB,EAAEmI,OAAO7D,OACtBkjC,GAA0B,KACzB,IAEG3Y,GAAuBvxB,EAAAA,EAAAA,KAAa0C,IACxCkuB,EAAYluB,EAAEmI,OAAO7D,OACrBkjC,GAA0B,KACzB,IAEGU,GAAkB5qC,EAAAA,EAAAA,KAAa0C,IACnC2nC,EAAO3nC,EAAEmI,OAAO7D,OAChBkjC,GAA0B,KACzB,IAEGrB,GAAuB7oC,EAAAA,EAAAA,KAAagH,IACxCwhC,EAAYxhC,GACZgjC,GAAqB,KACpB,IAEGa,GAAoB7qC,EAAAA,EAAAA,KAAY,KACpC,MAAM8qC,EAAmBra,EAAUsY,OAC7BgC,EAAkBpa,EAASoY,OAC3BiC,EAAatB,EAAIX,OAElB+B,EAAiBzsC,OAKlB2sC,EAAW3sC,OAlHI,GAmHjB8rC,EAASd,IAIXS,EAAc,CACZl8B,MAAAA,KACIq8B,GAA0B,CAC5BxZ,UAAWqa,EACXna,SAAUoa,EACVrB,IAAKsB,MAEHjB,GAAqB,CACvBxB,SAAAA,KAjBF4B,EAASf,MAoBV,CACDx7B,EACA6iB,EAAWE,EAAU+Y,EAAKO,EAC1B1B,EAAUwB,EACVD,IAGF,OACE,0BAAKppC,UAAU,wBACb,0BAAKA,UAAU,4CACb,0BAAKA,UAAU,uCACb,mBAACuqC,GAAA,EAAD,CACEX,qBAAsBA,EACtBrjC,SAAUyjC,EACVpiB,MAAM,0BACN1gB,SAAUu6B,IAEZ,mBAACle,GAAA,EAAD,CACEjd,MAAOypB,EACPxpB,SAAUmqB,EACVM,MAAOzxB,EAAK,aACZ2H,SAAUu6B,EACV7a,MAAOA,IAAU8hB,GAA2B9hB,OAAQ1tB,IAEtD,mBAACqqB,GAAA,EAAD,CACEjd,MAAO2pB,EACP1pB,SAAUsqB,EACVG,MAAOzxB,EAAK,YACZ2H,SAAUu6B,IAEZ,mBAACle,GAAA,EAAD,CACEjd,MAAO0iC,EACPziC,SAAU2jC,EACVlZ,MAAOzxB,EAAK,WACZ2H,SAAUu6B,EACV7a,MAAOA,IAAU+hB,GAAqB/hB,OAAQ1tB,IAGhD,wBAAG8G,UAAU,4BAA4BkC,IAAK3C,EAAK4iB,MAAQ,WAAQjpB,IAChEohB,EAAAA,GAAAA,GAAW/a,EAAK,0BAA2B,CAAC,KAAM,sBAIvD,0BAAKS,UAAU,iBACb,yBAAIA,UAAU,uBAAuBkC,IAAK3C,EAAK4iB,MAAQ,WAAQjpB,GAAYqG,EAAK,aAEhF,mBAACirC,GAAD,CACE/C,gBAAiBI,GAAY,GAC7BpG,UAAWA,EACXkG,oBAAqBA,EACrBC,cAAeA,EACfrhC,SAAU4hC,IAGZ,wBAAGnoC,UAAU,4BAA4BkC,IAAK3C,EAAK4iB,MAAQ,WAAQjpB,IAChEohB,EAAAA,GAAAA,GAAW/a,EAAK,gBAAiB,CAAC,KAAM,qBAE1CsoC,GACC,wBAAG7nC,UAAU,4BAA4BkC,IAAK3C,EAAK4iB,MAAQ,WAAQjpB,GAChEqG,EAAK,qBAAqB,8BAC3B,2BAAMS,UAAU,iBAAhB,gBAA8C6nC,MAMtD,mBAAC4C,GAAA,EAAD,CACE/vB,QAASqvB,EACT9pC,QAASkqC,EACTjjC,SAAUu6B,EACVvhC,UAAU,gBAETuhC,EACC,mBAACxxB,EAAA,EAAD,CAASlQ,MAAM,UAEf,wBAAGC,UAAU,qBC9DvB,IAAejC,EAAAA,EAAAA,KAAKC,EAAAA,EAAAA,KACjBC,IACQ8oB,EAAAA,GAAAA,IAAK9oB,EAAOod,SAASC,MAAO,CACjC,+BACA,iCACA,2BACA,6BACA,+BACA,iCACA,2BACA,6BACA,8BACA,gCACA,0BACA,4BACA,kBACA,oBACA,2BAjBctd,EAnJmC,IAmBjD,IAnBkD,SACtD6O,EADsD,eAEtD64B,EAFsD,QAGtD7I,EAHsD,6BAItD6N,EAJsD,+BAKtDC,EALsD,yBAMtDC,EANsD,2BAOtDC,EAPsD,6BAQtDC,EARsD,+BAStDC,EATsD,yBAUtDC,EAVsD,2BAWtDC,EAXsD,4BAYtDC,EAZsD,8BAatDC,EAbsD,wBActDC,EAdsD,0BAetDC,EAfsD,gBAgBtDC,EAhBsD,kBAiBtDC,EAjBsD,sBAkBtDC,GACI,EACJ,MAAM,iBAAEC,IAAqBzsC,EAAAA,EAAAA,MAEvBO,GAAOC,EAAAA,EAAAA,MAEbuiB,EAAAA,EAAAA,IAAelV,EAAUgwB,EAAS6I,EAAgBc,EAAAA,GAAAA,SAElD,MAAMkF,GAAyBpsC,EAAAA,EAAAA,KAAagH,GACnC/G,EAAK,4BAA6BA,EAAK,cAAe6qB,OAAOuhB,EAAAA,GAAgCrlC,IAAS,OAC5G,CAAC/G,IAEEqsC,GAAuBtsC,EAAAA,EAAAA,KAAagH,IACxCmlC,EAAiB,CAAED,sBAAuBG,EAAAA,GAAgCrlC,OACzE,CAACmlC,IAEEI,GAA8BvsC,EAAAA,EAAAA,KAAagH,IAC/CmlC,EAAiB,CAAEH,gBAAiBhlC,MACnC,CAACmlC,IAEEK,GAAgCxsC,EAAAA,EAAAA,KAAagH,IACjDmlC,EAAiB,CAAEF,kBAAmBjlC,MACrC,CAACmlC,IAmBJ,SAASM,EACPnkB,EACA7c,EACAihC,EACAC,EACAC,EACAC,GAEA,OACE,0BAAKnsC,UAAU,iBACb,yBAAIA,UAAU,uBAAuBkC,IAAK3C,EAAK4iB,MAAQ,WAAQjpB,GAAY0uB,GAE3E,mBAACqJ,GAAA,EAAD,CACED,MAAOzxB,EAAK,iCACZ2xB,QAAS8a,EAGT7a,QAAUib,GAAcX,EAAiB,CAAE,CAAE,cAAa1gC,iBAAoBqhC,MAEhF,mBAACnb,GAAA,EAAD,CACED,MAAOzxB,EAAK,qCACZ2xB,QAAS+a,EAET9a,QAAUib,GAAcX,EAAiB,CAAE,CAAE,cAAa1gC,mBAAsBqhC,MAElF,mBAACnb,GAAA,EAAD,CACED,MAAOzxB,EAAK,mCACZ2xB,QAASgb,EAET/a,QAAUib,GAAcX,EAAiB,CAAE,CAAE,cAAa1gC,aAAgBqhC,MAE5E,mBAACnb,GAAA,EAAD,CACED,MAAOzxB,EAAK,iCACZ2xB,QAASib,EAEThb,QAAUib,GAAcX,EAAiB,CAAE,CAAE,cAAa1gC,eAAkBqhC,MAGrE,SAARrhC,GAvDP,WACE,MAAMzE,EAAQqlC,EAAAA,GAAAA,QAAwCH,GAEtD,OACE,0BAAKxrC,UAAU,QACb,mBAACoG,GAAA,EAAD,CACE4qB,MAAOzxB,EAAK,2BACZ6F,IAAK,EACLD,IAAK,EACLmB,OAAkB,IAAXA,EAAeA,EAAQ,EAC9B+lC,YAAaX,EACbnlC,SAAUqlC,KA4COU,IAKzB,OACE,0BAAKtsC,UAAU,kCACZ+rC,EACCxsC,EAAK,2BACL,QACAmrC,EACAC,EACAC,EACAC,GAEDkB,EACCxsC,EAAK,2BACL,QACAurC,EACAC,EACAC,EACAC,GAEDc,EACC,sBACA,OACAb,EACAC,EACAC,EACAC,GAGF,0BAAKrrC,UAAU,iBACb,yBAAIA,UAAU,uBAAuBkC,IAAK3C,EAAK4iB,MAAQ,WAAQjpB,GAAYqG,EAAK,kBAEhF,mBAAC0xB,GAAA,EAAD,CACED,MAAOzxB,EAAK,YACZ2xB,QAASoa,EACTna,QAAS0a,IAEX,mBAAC5a,GAAA,EAAD,CACED,MAAOzxB,EAAK,kCACZ2xB,QAASqa,EACTpa,QAAS2a,U,eC9InB,MAAMS,IAAiC5qC,EAAAA,EAAAA,KAAU66B,GAAOA,KAAM,KAAO,GAuLrE,IAAez+B,EAAAA,EAAAA,KAAKC,EAAAA,EAAAA,KACjBC,IACC,MACE09B,WAAY6Q,EACZ7nB,KAAM8nB,EACNC,YAAaC,GACX1uC,EAAOy9B,YAEX,MAAO,CACL8Q,iBAAAA,EACAC,YAAAA,EACAE,uBAAAA,KAXc3uC,EAnLmC,IASjD,IATkD,SACtD6O,EADsD,eAEtD+/B,EAFsD,aAGtDC,EAHsD,eAItDnH,EAJsD,QAKtD7I,EALsD,iBAMtD2P,EANsD,YAOtDC,EAPsD,uBAQtDE,GACI,EACJ,MAAM,2BACJG,EADI,cAEJC,EAFI,WAGJC,IACEhuC,EAAAA,EAAAA,OAEG07B,EAAeuS,IAAoB5rC,EAAAA,EAAAA,OACnC6rC,EAAmBC,IAAwB9rC,EAAAA,EAAAA,KAAS,GACrD+rC,GAAsB9tC,EAAAA,EAAAA,KAAY,IAAM6tC,GAAqB,IAAO,KAE1E9yC,EAAAA,EAAAA,KAAU,KACHqgC,IACHN,EAAAA,GAAAA,GAAiB,cAAcC,KAAK4S,KAErC,CAACvS,KAIJrgC,EAAAA,EAAAA,KAAU,KACRkyC,IAA+B,KAC7BO,SAED,CAACA,IAEJ,MAAMO,GAAqB/tC,EAAAA,EAAAA,KAAY,KACjCtC,OAAOu8B,KAAKkT,GAAa9uC,QArCL,GAsCtBqvC,EAAW,CACT1S,KAAM,CACJl9B,QAAS,0BACT0pB,aAAa,KAOnB8lB,MACC,CAACH,EAAaO,EAAYJ,IAEvBrtC,GAAOC,EAAAA,EAAAA,MAEbuiB,EAAAA,EAAAA,IAAelV,EAAUgwB,EAAS6I,EAAgBc,EAAAA,GAAAA,SAElD,MAAM8G,GAAuBC,EAAAA,GAAAA,MACvBC,GAAc9tC,EAAAA,EAAAA,KAAQ,KAC1B,GAAK8sC,EAIL,OAAOA,EAAiB1mC,KAAKtJ,IAC3B,MAAMixC,EAAShB,EAAYjwC,GAE3B,MAAO,CACLA,GAAIixC,EAAOjxC,GACXorB,MAAO6lB,EAAO7lB,MACd8lB,UAAUC,EAAAA,EAAAA,IAAyBpuC,EAAMkuC,EAAQH,EAAqBG,EAAOjxC,WAGhF,CAACgwC,EAAkBC,EAAaltC,EAAM+tC,IAEnCM,GAAoCtuC,EAAAA,EAAAA,KAAamuC,IACjDzwC,OAAOu8B,KAAKkT,GAAa9uC,QAzEL,GA0EtBqvC,EAAW,CACT1S,KAAM,CACJl9B,QAAS,0BACT0pB,aAAa,KAOnBimB,EAAc,CAAEU,OAAAA,MACf,CAAChB,EAAaM,EAAeC,IAEhC,OACE,0BAAKhtC,UAAU,4CACb,0BAAKA,UAAU,2BACb,0BAAKA,UAAU,yBACZ06B,GACC,mBAACD,GAAA,EAAD,CACEj+B,GAAG,sBACHhC,KAAMqzC,EAAAA,GACNnT,cAAeA,EACfC,KAAMuS,EACNpS,QAAM,EACNC,OAAQqS,KAKd,wBAAGptC,UAAU,iCAAiCkC,IAAI,QAC/C3C,EAAK,wBAGR,mBAACM,EAAA,EAAD,CAEEG,UAAU,iBACVD,MAAM,UACNvF,KAAK,UACLszC,MAAI,EACJC,OAAK,EACL9tC,QAASotC,EACTlrB,MAAO5iB,EAAK4iB,OAEZ,wBAAGniB,UAAU,aACZT,EAAK,qBAIV,0BAAKS,UAAU,sBACb,yBAAIA,UAAU,4BAA4BkC,IAAK3C,EAAK4iB,MAAQ,WAAQjpB,GAAYqG,EAAK,YAEpFiuC,MAAAA,GAAAA,EAAa7vC,OAAS6vC,EAAY1nC,KAAK2nC,GACtC,mBAACrpB,GAAA,EAAD,CACEpkB,UAAU,eACVguC,QAAM,EACNC,WAAS,EAEThuC,QAAS,IAAM4sC,EAAaJ,EAAYgB,EAAOjxC,MAE/C,2BAAMwD,UAAU,SAASytC,EAAO7lB,OAChC,2BAAM5nB,UAAU,YAAYytC,EAAOC,aAElCF,IAAgBA,EAAY7vC,OAC/B,wBAAGqC,UAAU,iCAAiCkC,IAAI,QAAlD,4BAGE,mBAACuiB,GAAA,EAAD,OAGJkoB,GAA0B7xC,QAAQ6xC,EAAuBhvC,SACzD,0BAAKqC,UAAU,sBACb,yBAAIA,UAAU,4BAA4BkC,IAAK3C,EAAK4iB,MAAQ,WAAQjpB,GACjEqG,EAAK,sBAGPotC,EAAuB7mC,KAAK2nC,GAC3B,mBAACrpB,GAAA,EAAD,CACEpkB,UAAU,OACVguC,QAAM,EAEN/tC,QAAS,IAAM2tC,EAAkCH,IAEjD,0BAAKztC,UAAU,qCACb,0BAAKA,UAAU,kBACb,2BAAMA,UAAU,SAASytC,EAAO7lB,OAChC,2BAAM5nB,UAAU,YAAYytC,EAAO3Z,cAGrC,mBAACj0B,EAAA,EAAD,CACEG,UAAU,OACVD,MAAM,UACNvF,KAAK,OACLszC,MAAI,EACJC,OAAK,EACL5rB,MAAO5iB,EAAK4iB,OAEX5iB,EAAK,kB,eC/LxB,MAyBA,GAzBqC,IAM/B,IANgC,MACpC24B,EADoC,SAEpCgW,EAFoC,eAGpCC,EAHoC,UAIpC1M,EAJoC,QAKpCxhC,GACI,EACJ,MAAMV,GAAOC,EAAAA,EAAAA,KAEb,OACE,mBAACK,EAAA,EAAD,CACEG,UAAU,iBACVD,MAAM,cACNvF,KAAK,UACL6tB,QAAM,EACNoZ,UAAWA,EACXtf,MAAO5iB,EAAK4iB,MACZliB,QAASA,GAET,wBAAGD,UAAU,cATf,QAUQk4B,EAVR,SAUqBA,EAAQ,EAAIiW,GAAmB,GAAED,KAAcA,ICclEE,GAAiB,0CACjBC,GAAiB,8BAyPvB,IAAetwC,EAAAA,EAAAA,KAAKC,EAAAA,EAAAA,KACjBC,IACC,MAAM,QAAE4mB,GAAY5mB,EAAOymB,MAE3B,MAAO,CACL4pB,oBAAqBzpB,EAAQG,OAC7BupB,sBAAuB1pB,EAAQK,YANjBlnB,EAvPmC,IAWjD,IAXkD,MACtDonC,EADsD,SAEtDoJ,EAFsD,mBAGtDC,EAHsD,mBAItDC,EAJsD,SAKtD7hC,EALsD,eAMtD64B,EANsD,QAOtD7I,EAPsD,OAQtD8R,EARsD,oBAStDL,EATsD,sBAUtDC,GACI,EACJ,MAAM,eACJK,EADI,cAEJ7B,IACE/tC,EAAAA,EAAAA,OAEG07B,EAAeuS,IAAoB5rC,EAAAA,EAAAA,OACnC6rC,EAAmBC,IAAwB9rC,EAAAA,EAAAA,KAAS,GACrD+rC,GAAsB9tC,EAAAA,EAAAA,KAAY,IAAM6tC,GAAqB,IAAO,KAEnE0B,EAA6BC,IAAkCztC,EAAAA,EAAAA,KAAS,IACxE0tC,EAA6BC,IAAkC3tC,EAAAA,EAAAA,KAAS,IAG7E4tC,gBAAiBC,EACjBC,kBAAmBC,IACjBC,EAAAA,GAAAA,IAAkBjK,EAAO,aAE3B6J,gBAAiBK,EACjBH,kBAAmBI,IACjBF,EAAAA,GAAAA,IAAkBjK,EAAO,aAE7B/qC,EAAAA,EAAAA,KAAU,KACHqgC,IACHN,EAAAA,GAAAA,GAAiB,cAAcC,KAAK4S,KAErC,CAACvS,KAEJrgC,EAAAA,EAAAA,KAAU,KACRy0C,GAA+B,GAC/BE,GAA+B,KAC9B,CAAC5J,EAAMoK,WAEV,MAAOC,EAAwBC,IAA0BhwC,EAAAA,EAAAA,KAAQ,KAC/D,MAAMiwC,EAAoB,IAAIC,IAAI,IAC5BtB,GAAuB,MACvBC,GAAyB,KAGzBsB,GAAwBC,EAAAA,GAAAA,IAAwBZ,EAAiBS,GACjEI,GAAwBD,EAAAA,GAAAA,IAAwBR,EAAiBK,GAEvE,MAAO,CACLd,EACIgB,EACAA,EAAsB9L,MAAM,EA7DV,EA6DmCqL,EAAkBzxC,QAC3EoxC,EACIgB,EACAA,EAAsBhM,MAAM,EAhEV,EAgEmCwL,EAAkB5xC,WAE5E,CACD2xC,EAAiBJ,EAAiBE,EAAmBG,EACrDR,EAA6BF,EAC7BP,EAAqBC,IAGjBhvC,GAAOC,EAAAA,EAAAA,MAEbuiB,EAAAA,EAAAA,IAAelV,EAAU8hC,EAAQjJ,EAA+B,SAAfN,EAAM4K,KACnDxJ,EAAAA,GAAAA,kBACAA,EAAAA,GAAAA,qBAEJ,MAAMyJ,GAAe3wC,EAAAA,EAAAA,KAAaoU,IAChC,MAAM,cAAErJ,GAAkBqJ,EAC1B86B,EAAS,CAAErzB,KAAM,WAAYmqB,QAASj7B,EAAc/D,MAAM+hC,WACzD,CAACmG,IAEE7gB,GAAeruB,EAAAA,EAAAA,KAAY,KAC/B,MAAM,MAAEsoB,GAAUwd,EAAMqI,OAEnB7lB,EAKAsnB,EAAgBvxC,QAAWX,OAAOu8B,KAAK6V,GAAmBzxC,QAK/D6wC,EAAS,CAAErzB,KAAM,eAAgBmqB,SAAS,IACvB,SAAfF,EAAM4K,KACRpB,EAAe,CAAEpyC,GAAI4oC,EAAMoK,SAAUU,aAAc9K,EAAMqI,SAEzDV,EAAc,CAAEU,OAAQrI,EAAMqI,SAGhC7yC,YAAW,KACTiiC,MA1GiB,MA8FjB2R,EAAS,CAAErzB,KAAM,WAAYmqB,QAAS+I,KALtCG,EAAS,CAAErzB,KAAM,WAAYmqB,QAAS8I,OAmBvC,CAACrB,EAAeyB,EAAUI,EAAgBM,EAAgBvxC,OAAQyxC,EAAmBvS,EAASuI,IAwBjG,SAAS+K,EAAYH,GACnB,MAAMb,EAA6B,aAATa,EAAsBZ,EAAoBG,EAC9Da,EAA0B,aAATJ,EAAsBP,EAAyBC,EAEhEW,EAAsB,aAATL,EAAsBnB,EAA8BE,EAEjEuB,GADsB,aAATN,EAAsBd,EAAkBI,GACzB3xC,OAASwxC,EAAkBxxC,OAASyyC,EAAezyC,OAC/E4yC,EAAwB,aAATP,EACjB,IAAMlB,GAA+B,GACrC,IAAME,GAA+B,GAEzC,OACE,sCACGG,EAAkBrpC,KAAKiF,GAnC9B,SAAwBA,EAAailC,GACnC,MAAMQ,EAAoB,aAATR,EACbS,GAAAA,GAAAA,MAAyB,QAAG1lC,IAAK2lC,GAAR,SAAsBA,IAAY3lC,KAC3D4lC,GAAAA,GAAAA,MAAyB,QAAG5lC,IAAK2lC,GAAR,SAAsBA,IAAY3lC,KAE/D,GAAKylC,EAIL,OACE,mBAACpsB,GAAA,EAAD,CACErZ,IAAKylC,EAASzlC,IACd/K,UAAU,kCACVQ,KAAMgwC,EAAShwC,KACfwtC,QAAM,EACN4C,UAAQ,GAEPrxC,EAAKixC,EAAS5oB,QAkBiBipB,CAAe9lC,EAAKilC,KACnDI,EAAetqC,KAAKtJ,GACnB,mBAAC4nB,GAAA,EAAD,CACEpkB,UAAU,kCACVguC,QAAM,EACN4C,UAAQ,IAEPl3B,EAAAA,EAAAA,IAASld,GACR,mBAAC6nB,GAAA,EAAD,CAAiBgY,WAAW,QAAQ9X,OAAQ/nB,IAE5C,mBAACgoB,GAAA,EAAD,CAAe6X,WAAW,QAAQrwB,OAAQxP,QAI7C6zC,GAAcC,EAAiB,GAChC,mBAAC,GAAD,CACEpY,MAAOoY,EACPpC,SAAS,OAETjuC,QAASswC,KAOnB,OACE,0BAAKvwC,UAAU,wBACb,0BAAKA,UAAU,4CACb,0BAAKA,UAAU,2BACb,0BAAKA,UAAU,yBACZ06B,GACC,mBAACD,GAAA,EAAD,CACEj+B,GAAG,sBACHhC,KAAMqzC,EAAAA,GACNnT,cAAeA,EACfC,KAAMuS,GAAqB9iB,OAAOgb,EAAMoK,UACxC1U,QAAM,EACNC,OAAQqS,KAKE,WAAfhI,EAAM4K,MACL,wBAAGhwC,UAAU,iCAAiCkC,IAAK3C,EAAK4iB,MAAQ,WAAQjpB,GACrEqG,EAAK,sBAIV,mBAACgkB,GAAA,EAAD,CACEvjB,UAAU,OACVgxB,MAAOzxB,EAAK,kBACZ+G,MAAO8+B,EAAMqI,OAAO7lB,MACpBrhB,SAAU0pC,EACVrpB,MAAOwe,EAAMxe,OAASwe,EAAMxe,QAAUwnB,GAAiBA,QAAiBl1C,KAI5E,0BAAK8G,UAAU,gCACZolC,EAAMxe,OAASwe,EAAMxe,QAAUynB,IAC9B,wBAAGruC,UAAU,8CAA8CkC,IAAK3C,EAAK4iB,MAAQ,WAAQjpB,GAClFqG,EAAK6lC,EAAMxe,QAIhB,yBAAI5mB,UAAU,4BAA4BkC,IAAK3C,EAAK4iB,MAAQ,WAAQjpB,GAAYqG,EAAK,kBAErF,mBAAC6kB,GAAA,EAAD,CACEpkB,UAAU,gDACVQ,KAAK,MACLP,QAASwuC,GAERlvC,EAAK,mBAGP4wC,EAAY,aAGf,0BAAKnwC,UAAU,sBACb,yBAAIA,UAAU,4BAA4BkC,IAAK3C,EAAK4iB,MAAQ,WAAQjpB,GAAYqG,EAAK,kBAErF,mBAAC6kB,GAAA,EAAD,CACEpkB,UAAU,gDACVQ,KAAK,MACLP,QAASyuC,GAERnvC,EAAK,mBAGP4wC,EAAY,cAIjB,mBAAC1F,GAAA,EAAD,CACE/vB,QAAS5f,QAAQsqC,EAAM0L,WACvB5pC,SAAUk+B,EAAM3D,UAChBxhC,QAAS0tB,EACTztB,UAA0B,SAAfklC,EAAM4K,KAAkB,eAAiB,iBAEnD5K,EAAM3D,UACL,mBAACxxB,EAAA,EAAD,CAASlQ,MAAM,UAEf,wBAAGC,UAAU,qBC5EvB,IAAejC,EAAAA,EAAAA,KA9KkC,IAS3C,IAT4C,KAChDiyC,EADgD,QAEhDjqB,EAFgD,YAGhDgrB,EAHgD,kBAIhD5B,EAJgD,YAKhD6B,EALgD,oBAMhDC,EANgD,0BAOhDC,EAPgD,eAQhDtuB,GACI,EAEJ,MAAM9H,GAAWhiB,EAAAA,EAAAA,IAAyB,MACpCq4C,EAAqB,aAATnB,EAAsBS,GAAAA,GAAsBE,GAAAA,GACxDS,EAAiBL,EAAYpzC,OAASwxC,EAAkBxxC,OAhBzC,GAiBf0zC,EAAcN,EAAYpzC,QAlBhB,KAoBhBtD,EAAAA,EAAAA,KAAU,KACRO,YAAW,KACT+kB,uBAAsB,KACpB7E,EAAS7hB,QAASw3B,aAzBH,OA4BlB,IAEH,MAAM6gB,GAAkBhyC,EAAAA,EAAAA,KAAa9C,IACnC,MAAM+0C,EAAiB,IAAIR,GACvBQ,EAAe90C,SAASD,GAC1B+0C,EAAeC,OAAOD,EAAe/0B,QAAQhgB,GAAK,GAElD+0C,EAAerkB,KAAK1wB,GAEtBy0C,EAAoBM,KACnB,CAACR,EAAaE,IAEXQ,GAAsBnyC,EAAAA,EAAAA,KAAayL,IACvC,MAAM2mC,EAAuB,IAAIvC,GAC7BuC,EAAqBj1C,SAASsO,GAChC2mC,EAAqBF,OAAOE,EAAqBl1B,QAAQzR,GAAM,GAE/D2mC,EAAqBxkB,KAAKniB,GAE5BmmC,EAA0BQ,KACzB,CAACvC,EAAmB+B,IAEjB9tB,GAAqB9jB,EAAAA,EAAAA,KAAa0C,IACtC,MAAM,MAAEsE,GAAUtE,EAAEqI,cACpBuY,EAAetc,KACd,CAACsc,IAEErjB,GAAOC,EAAAA,EAAAA,MAkENujB,EAAaC,IAAWC,EAAAA,GAAAA,QAAkB/pB,EAAW6sB,EAASjrB,QAAQk2C,IAE7E,OACE,0BAAKhxC,UAAU,qCACb,0BAAKA,UAAU,+BACZmvC,EAAkBrpC,KArEzB,SAAgCiF,GAC9B,MAAM4mC,EAAeR,EAAUrY,MAAK,QAAG/tB,IAAK2lC,GAAR,SAAsB3lC,IAAQ2lC,KAClE,GAAKiB,EAIL,OACE,mBAAC3Q,GAAA,EAAD,CACExgC,KAAMmxC,EAAanxC,KACnBonB,MAAOroB,EAAKoyC,EAAa/pB,OACzBgqB,YAAaR,EACbS,UAAQ,EACR5xC,QAASwxC,EACTvQ,SAAUyQ,EAAa5mC,SAyDtBgmC,EAAYjrC,KAAI,CAACtJ,EAAI2nB,IACpB,mBAAC6c,GAAA,EAAD,CACEC,aAAczkC,EACdo1C,YAAaR,GAAkBjtB,EAAI4sB,EAAYpzC,OA9H3B,EA+HpBk0C,UAAQ,EACR5xC,QAASqxC,EACTpQ,SAAU1kC,MAGZ60C,EAQA,wBAAGrxC,UAAU,oBAAoBkC,IAAI,QACjC,6CARJ,mBAACqhB,GAAA,EAAD,CACE1d,IAAKiV,EACLxU,MAAO0qC,EACPzqC,SAAU6c,EACVK,YAAalkB,EAAK,aAQxB,mBAACskB,GAAA,EAAD,CACE7jB,UAAU,4BACVwiC,aAAa,aACb1e,MAAOf,EACPgB,WAAYf,KAETD,IAAgBA,EAAYplB,QAAUolB,EAAYtmB,SAASspB,EAAQ,MACpE,sCACE,yBAAIhb,IAAI,UAAU/K,UAAU,uBAAuBkC,IAAK3C,EAAK4iB,MAAQ,WAAQjpB,GAC1EqG,EAAK,oBAEP4xC,EAAUrrC,KArFrB,SAAwBqV,GACtB,OACE,mBAACiJ,GAAA,EAAD,CACErZ,IAAKoQ,EAAKpQ,IACV/K,UAAU,sDAEVC,QAAS,IAAMwxC,EAAoBt2B,EAAKpQ,KACxC7E,QAAM,GAEN,wBAAGlG,UAAY,QAAOmb,EAAK3a,SAC3B,yBAAIR,UAAU,YAAYkC,IAAI,QAAQ3C,EAAK4b,EAAKyM,QAChD,mBAACqJ,GAAA,EAAD,CACED,MAAM,GACNE,QAASie,EAAkB1yC,SAAS0e,EAAKpQ,KACzCjL,OAAK,QAwEH,0BAAKiL,IAAI,UAAU/K,UAAU,wBAC7B,yBAAI+K,IAAI,UAAU/K,UAAU,uBAAuBkC,IAAK3C,EAAK4iB,MAAQ,WAAQjpB,GAC1EqG,EAAK,iBAKXwjB,MAAAA,GAAAA,EAAaplB,OACZolB,EAAYjd,KA1EpB,SAAoBtJ,GAClB,MAAMs1C,EAAaf,EAAYt0C,SAASD,GAExC,OACE,mBAAC4nB,GAAA,EAAD,CACErZ,IAAKvO,EACLwD,UAAU,iDAEVC,QAAS,IAAMqxC,EAAgB90C,GAC/B0J,QAAM,EACNgB,UAAW4qC,GAAcT,IAExB33B,EAAAA,EAAAA,IAASld,GACR,mBAAC6nB,GAAA,EAAD,CAAiBE,OAAQ/nB,IAEzB,mBAACgoB,GAAA,EAAD,CAAexY,OAAQxP,EAAIu1C,cAAY,IAEzC,mBAAC9gB,GAAA,EAAD,CACED,MAAM,GACNE,QAAS4gB,EACThyC,OAAK,QAuDHijB,IAAgBA,EAAYplB,OAC9B,wBAAGqC,UAAU,aAAa+K,IAAI,cAA9B,yBAEA,mBAAC0Z,GAAA,EAAD,CAAS1Z,IAAI,iBChFvB,IAAehN,EAAAA,EAAAA,KAlGkC,IAO3C,IAP4C,KAChDiyC,EADgD,MAEhD5K,EAFgD,SAGhDoJ,EAHgD,SAIhD3hC,EAJgD,eAKhD64B,EALgD,QAMhD7I,GACI,EACJ,MAAM,WAAEmV,GAAe5M,GACjB,gBAAE6J,EAAF,kBAAmBE,IAAsBE,EAAAA,GAAAA,IAAkBjK,EAAO4K,GAAM,GAExEzwC,GAAOC,EAAAA,EAAAA,KAEPyyC,GAAsBC,EAAAA,GAAAA,IAA8BC,EAAAA,IACpDC,GAA2BF,EAAAA,GAAAA,IAA8BG,EAAAA,IAEzDC,GAAe5yC,EAAAA,EAAAA,KAAQ,KAE3B,MAAMklB,GAAYuB,EAAAA,EAAAA,MAAYzB,MAAMC,KAE9BoB,EAAU,IAAIksB,GAAuB,MAAOG,GAA4B,IAC9E,OAAOtsB,EAAAA,GAAAA,IAAO,IACTmpB,MACA3oB,EAAAA,EAAAA,IAAkB/mB,EAAMwmB,EAASnB,EAAWotB,OAEhD,CAACC,EAAqBG,EAA0BnD,EAAiB1vC,EAAMyyC,IAEpE5uB,GAAqB9jB,EAAAA,EAAAA,KAAaizC,IACtC/D,EAAS,CACPrzB,KAAM,gBACNmqB,QAASiN,MAEV,CAAC/D,IAEEgE,GAA0BlzC,EAAAA,EAAAA,KAAamzC,IAEzCjE,EADW,aAATwB,EACO,CACP70B,KAAM,oBACNmqB,QAAS,IAAKF,EAAMsN,eAAgBxD,gBAAiBuD,IAG9C,CACPt3B,KAAM,oBACNmqB,QAAS,IAAKF,EAAMuN,eAAgBrD,gBAAiBmD,OAGxD,CAACzC,EAAM5K,EAAOoJ,IAEXoE,GAAgCtzC,EAAAA,EAAAA,KAAai6B,IACjD,MAAMsZ,EAAsC,GAC5CtZ,EAAKuZ,SAAS/nC,IACZ8nC,EAAW9nC,IAAO,KAIlByjC,EADW,aAATwB,EACO,CACP70B,KAAM,oBACNmqB,QAAS,CACP4J,gBAAiBD,KACd4D,IAIE,CACP13B,KAAM,oBACNmqB,QAAS,CACPgK,gBAAiBL,KACd4D,OAIR,CAAC7C,EAAMf,EAAiBT,IAS3B,OAPAzsB,EAAAA,EAAAA,IACElV,EACAgwB,EACA6I,EACS,aAATsK,EAAsBxJ,EAAAA,GAAAA,qBAAuCA,EAAAA,GAAAA,sBAG1D8L,EAKH,mBAAC,GAAD,CACEtC,KAAMA,EACNjqB,QAASusB,EACTvB,YAAa9B,EACbE,kBAAmBA,EACnB6B,YAAagB,EACbf,oBAAqBuB,EACrBtB,0BAA2B0B,EAC3BhwB,eAAgBQ,IAZX,mBAACqB,GAAA,EAAD,SCsCX,IAAe1mB,EAAAA,EAAAA,KA9HuB,IAQhC,IARiC,cACrCwnC,EADqC,YAErCwN,EAFqC,MAGrC3N,EAHqC,SAIrCoJ,EAJqC,SAKrC3hC,EALqC,eAMrC64B,EANqC,QAOrC7I,GACI,EACJ,MAAMmW,GAAc1zC,EAAAA,EAAAA,KAAY,KAE5BimC,IAAkBiB,EAAAA,GAAAA,qBACfjB,IAAkBiB,EAAAA,GAAAA,mBAClBjB,IAAkBiB,EAAAA,GAAAA,+BAErB5rC,YAAW,KACT4zC,EAAS,CAAErzB,KAAM,YA5BG,KAiCtBoqB,IAAkBiB,EAAAA,GAAAA,sBACfjB,IAAkBiB,EAAAA,GAAAA,qBAUvB3J,IARqB,WAAfuI,EAAM4K,KACRtK,EAAec,EAAAA,GAAAA,qBAEfd,EAAec,EAAAA,GAAAA,qBAMlB,CACDpB,EAAM4K,KAAMxB,EACZjJ,EAAe1I,EAAS6I,IAGpB2H,GAAqB/tC,EAAAA,EAAAA,KAAY,KACrCkvC,EAAS,CAAErzB,KAAM,UACjBuqB,EAAec,EAAAA,GAAAA,uBACd,CAACd,EAAgB8I,IAEdyE,GAAmB3zC,EAAAA,EAAAA,KAAamuC,IACpCe,EAAS,CAAErzB,KAAM,aAAcmqB,QAASmI,IACxC/H,EAAec,EAAAA,GAAAA,qBACd,CAACgI,EAAU9I,IAERwN,GAAyB5zC,EAAAA,EAAAA,KAAY,KACzCkvC,EAAS,CAAErzB,KAAM,uBACjBuqB,EAAeH,IAAkBiB,EAAAA,GAAAA,8BAC7BA,EAAAA,GAAAA,iCACAA,EAAAA,GAAAA,wBACH,CAACjB,EAAeiJ,EAAU9I,IAEvByN,GAAyB7zC,EAAAA,EAAAA,KAAY,KACzCkvC,EAAS,CAAErzB,KAAM,uBACjBuqB,EAAeH,IAAkBiB,EAAAA,GAAAA,8BAC7BA,EAAAA,GAAAA,iCACAA,EAAAA,GAAAA,wBACH,CAACjB,EAAeiJ,EAAU9I,IAE7B,OAAQH,GACN,KAAKiB,EAAAA,GAAAA,QACH,OACE,mBAAC,GAAD,CACEoG,eAAgBS,EAChBR,aAAcoG,EACdvN,eAAgBA,EAChB74B,SAAUA,GAAY,CACpB25B,EAAAA,GAAAA,oBACAA,EAAAA,GAAAA,kBACAA,EAAAA,GAAAA,qBACAA,EAAAA,GAAAA,sBACA/pC,SAASs2C,GACXlW,QAASA,IAGf,KAAK2J,EAAAA,GAAAA,oBACL,KAAKA,EAAAA,GAAAA,kBACL,KAAKA,EAAAA,GAAAA,8BACH,OACE,mBAAC,GAAD,CACEpB,MAAOA,EACPoJ,SAAUA,EACVC,mBAAoByE,EACpBxE,mBAAoByE,EACpBtW,QAASmW,EACTtN,eAAgBA,EAChB74B,SAAUA,GAAY,CACpB25B,EAAAA,GAAAA,qBACAA,EAAAA,GAAAA,sBACA/pC,SAASs2C,GACXpE,OAAQ9R,IAGd,KAAK2J,EAAAA,GAAAA,qBACL,KAAKA,EAAAA,GAAAA,iCACH,OACE,mBAAC,GAAD,CACEwJ,KAAK,WACL5K,MAAOA,EACPoJ,SAAUA,EACV3R,QAASmW,EACTtN,eAAgBA,EAChB74B,SAAUA,IAGhB,KAAK25B,EAAAA,GAAAA,qBACL,KAAKA,EAAAA,GAAAA,iCACH,OACE,mBAAC,GAAD,CACEwJ,KAAK,WACL5K,MAAOA,EACPoJ,SAAUA,EACV3R,QAASmW,EACTtN,eAAgBA,EAChB74B,SAAUA,IAIhB,QACE,W,wBC/HN,MAmCA,IAAe9O,EAAAA,EAAAA,KAnC+B,IAIxC,IAJyC,KAC7CvD,EAAO44C,EAAAA,GADsC,WAE7CC,EAF6C,oBAG7C1Q,GACI,EAEJ,MAAM98B,GAAM/M,EAAAA,EAAAA,IAAuB,MAE7Bw6C,GAAiBC,EAAAA,GAAAA,IAAkB1tC,EAAK88B,GAExC6Q,EAAa,aAAYH,EAAW72C,KACpCi3C,GAAanlC,EAAAA,EAAAA,GAASklC,GAAYF,EAAgB/kC,EAAAA,GAAAA,QAClD/E,GAAuBkqC,EAAAA,GAAAA,GAAmBD,GAE1CE,GAAej0C,EAAAA,EAAAA,KAAQ,KAC3B,IAAI+zC,EAEJ,OAAOG,EAAAA,GAAAA,IAAgBP,EAAWzrB,MAAO,KACxC,CAAC6rB,EAAYJ,EAAWzrB,QAE3B,OACE,0BAAK/hB,IAAKA,EAAK7F,UAAU,qBACtB2zC,EACAF,GACC,mBAAChZ,GAAA,EAAD,CACEj+B,GAAIg3C,EACJh5C,KAAMA,EACNkgC,cAAe+Y,EACfzzC,UAAWwJ,QCJrB,IAAezL,EAAAA,EAAAA,KA3BuB,IAAyC,IAAxC,WAAEs1C,EAAF,oBAAc1Q,GAA0B,EAE7E,MAAM98B,GAAM/M,EAAAA,EAAAA,IAAuB,MAE7Bw6C,GAAiBC,EAAAA,GAAAA,IAAkB1tC,EAAK88B,GAExCrkC,GAAYgQ,EAAAA,EAAAA,GAAS+kC,EAAWQ,cAAiB,aAAYR,EAAW72C,MAAO82C,GAC/E9pC,GAAuBkqC,EAAAA,GAAAA,GAAmBp1C,GAC1CC,EAAU80C,EAAWS,SAErBH,GAAej0C,EAAAA,EAAAA,KAAQ,KAC3B,GAAKnB,IAAYw1C,EAAAA,KAAuBz1C,EAAW,OAAOs1C,EAAAA,GAAAA,IAAgBP,EAAWzrB,MAAO,KAE3F,CAACrpB,EAASD,EAAW+0C,EAAWzrB,QAEnC,OACE,0BAAK/hB,IAAKA,EAAK7F,UAAU,qBACtB2zC,EACAp1C,EACC,4BAAOlF,IAAKiF,EAAW0B,UAAWwJ,EAAsB+B,MAAI,EAACF,UAAQ,IAErE,0BAAKhS,IAAKiF,EAAW0B,UAAWwJ,EAAsB2G,IAAI,S,eCflE,MAuEA,IAAepS,EAAAA,EAAAA,KAvE0B,IAInC,UAJoC,WACxCs1C,EADwC,oBAExC1Q,EAFwC,QAGxC1iC,GACI,EACJ,MAAMV,GAAOC,EAAAA,EAAAA,KAEb,IAAK6zC,IAAeA,EAAWW,SAC7B,OAGF,MAAMC,EAAY,UAAGZ,EAAWW,gBAAd,aAAG,EAAsB,GAE3C,OAAIX,EAAWQ,eAAiBI,EAE5B,mBAAC7vB,GAAA,EAAD,CACE4pB,QAAM,EACNhuC,UAAU,qBACV4wC,UAAWqD,EAEXh0C,QAAS,IAAMg0C,GAAgBh0C,EAAQg0C,IAEvC,mBAACp0C,EAAA,EAAD,CACEK,UAAWmzC,EAAWzrB,MACtB7nB,MAAM,cACNoiB,MAAO5iB,EAAK4iB,OAEXkxB,EAAWa,SACV,mBAAC,GAAD,CACE15C,KAAM25C,EAAAA,GACNd,WAAYA,EACZ1Q,oBAAqBA,IAGvB,mBAAC,GAAD,CACE0Q,WAAYA,EACZ1Q,oBAAqBA,KAI3B,0BAAK3iC,UAAU,uBACb,0BAAKA,UAAU,SAASqzC,EAAWzrB,OACnC,0BAAK5nB,UAAU,YAAYT,EAAK,2BAA4B8zC,EAAWnb,MAAO,QAMlF,mBAAC9T,GAAA,EAAD,CACE4pB,QAAM,EACNhuC,UAAU,qBAEVC,QAAS,IAAMA,EAAQg0C,IAEvB,mBAACG,GAAA,EAAD,CACEC,QAASJ,EACTz5C,KAAM25C,EAAAA,GACNvsB,MAAOyrB,EAAWzrB,MAClB+a,oBAAqBA,EACrBzB,cAAUhoC,EACVo7C,eAAa,IAEf,0BAAKt0C,UAAU,uBACb,0BAAKA,UAAU,SAASqzC,EAAWzrB,OACnC,0BAAK5nB,UAAU,YAAYT,EAAK,2BAA4B8zC,EAAWnb,MAAO,W,0BCrCxF,MAAMqc,GAA0B,CAC9B,mBACA,gBACA,iBAGIC,GAAsC,CAAC,CAC3CxjB,MAAO,UACP1qB,MAAO,OACN,CACD0qB,MAAO,UACP1qB,MAAO,QAuOT,IAAevI,EAAAA,EAAAA,KAAKC,EAAAA,EAAAA,KACjBC,IAAuB,MACtB,MAAM,MAAEsjC,EAAF,qBAASkT,GAAyBx2C,EAAOod,SAASC,MAExD,MAAO,KACFyL,EAAAA,GAAAA,IAAK9oB,EAAOod,SAASC,MAAO,CAC7B,kBACA,iBACA,sBACA,wBACA,qBACA,qBACA,qBACA,eAEFo5B,cAAez2C,EAAO+1C,SAASW,MAAMC,OACrCC,gBAAiB52C,EAAO+1C,SAASc,SACjCC,gBAAe,UAAE92C,EAAO+2C,iBAAT,aAAE,EAAkBD,gBACnCxT,MAAAA,EACAkT,qBAAAA,KAnBcz2C,EApO+B,IAe7C,IAf8C,SAClD6O,EADkD,eAElD64B,EAFkD,QAGlD7I,EAHkD,cAIlD6X,EAJkD,gBAKlDG,EALkD,gBAMlDE,EANkD,gBAOlDE,EAPkD,eAQlDnoC,EARkD,oBASlDooC,EATkD,sBAUlDC,EAVkD,mBAWlDC,EAXkD,WAYlDC,EAZkD,MAalD9T,EAbkD,qBAclDkT,GACI,EACJ,MAAM,iBACJhJ,IACEzsC,EAAAA,EAAAA,MAGEs2C,GAAqBx8C,EAAAA,EAAAA,IAAuB,OAC1C+oC,QAAS0T,IAAiCxT,EAAAA,GAAAA,IAAwB,CAAEC,QAASsT,KAC9EjuB,EAAaC,EAAWC,IAAcjjB,EAAAA,GAAAA,MACtC+vC,EAASmB,IAAcn0C,EAAAA,EAAAA,MAExB9B,GAAOC,EAAAA,EAAAA,KAEPi2C,EAA2C,CAAC,CAChDzkB,MAAOzxB,EAAK,8BACZ+G,MAAO,SACN,CACD0qB,MAAOzxB,EAAK,6BACZ+G,MAAO,QACN,CACD0qB,MAAOzxB,EAAK,+BACZ+G,MAAO,SAGHovC,EAAyB1tC,EAAAA,QAO3B9O,EAP0C,CAC5C,CAAEoN,MAAO,QAAS0qB,MAAOzxB,EAAK,2BAA4Bo2C,SAAU,6BACpE,CACErvC,MAAO,aACP0qB,MAAOzxB,EAAKy2B,EAAAA,GAAY,6BAA+B,+BACvD2f,SAAU,sBAIRC,GAA6Bt2C,EAAAA,EAAAA,KAAau2C,IAC9CtB,GAAwBzB,SAAQ,CAACgD,EAAG3xB,KAClChpB,SAASwJ,KAAKtJ,UAAU+hB,OAAQ,mBAAkB+G,IAAK0xB,IAAa1xB,MAGtEsnB,EAAiB,CAAE3+B,eAAgB+oC,MAClC,CAACpK,IAEEsK,GAA8Bz2C,EAAAA,EAAAA,KAAa02C,IAC/C76C,SAAS86C,gBAAgB/4C,MAAMg5C,YAC7B,uBAAyB,GAAEz1C,KAAK0E,IAAI6wC,EAAS7vC,EAAAA,GAAS,GAAK,SAE7DhL,SAAS86C,gBAAgB/4C,MAAMg5C,YAAY,wBAA0B,GAAEz1C,KAAKiC,MAAgB,OAAVszC,QAClF76C,SAAS86C,gBAAgB/4C,MAAMg5C,YAAY,sBAAwB,GAAEF,OACrE76C,SAAS86C,gBAAgBE,aAAa,yBAA0BH,EAAQ98B,YAExEuyB,EAAiB,CAAEwJ,gBAAiBe,MACnC,CAACvK,IAEE2K,GAA8B92C,EAAAA,EAAAA,KAAagH,IAC/C,MAAM+vC,EAAqB,SAAV/vC,GAAmBgwC,EAAAA,EAAAA,MAAmBhwC,EAEvDmlC,EAAiB,CAAElK,MAAO8U,IAC1B5K,EAAiB,CAAEgJ,qBAAgC,SAAVnuC,IACrC+vC,IAAa9U,IACfgV,EAAAA,GAAAA,GAAYF,EAAUvpC,IAAmB0pC,EAAAA,MAE1C,CAAC1pC,EAAgB2+B,EAAkBlK,IAEhCkV,GAAyBn3C,EAAAA,EAAAA,KAAao3C,IAC1CjL,EAAiB,CAAE4J,WAAYqB,IAC/BjL,EAAiB,CAAEkL,0BAA0B,KAE7CC,EAAAA,GAAAA,IAAcF,KACb,CAACjL,IAEEoL,GAAwBv3C,EAAAA,EAAAA,KAAagH,IACzCkvC,EAAWlvC,GACXghB,MACC,CAACA,IAEEwvB,GAA+Bx3C,EAAAA,EAAAA,KAAay3C,IAChDtL,EAAiB,CAAEyJ,oBAAqB6B,MACvC,CAACtL,IAEEuL,GAA8B13C,EAAAA,EAAAA,KAAa23C,IAC/CxL,EAAiB,CAAE0J,sBAAuB8B,MACzC,CAACxL,IAEEyL,GAAiC53C,EAAAA,EAAAA,KAAa23C,IAClDxL,EAAiB,CAAE2J,mBAAoB6B,MACtC,CAACxL,IAEE0L,EAAczC,GAAiBA,EAAc5uC,KAAKtJ,IAAe,MACrE,QAAOq4C,MAAAA,GAAA,UAAAA,EAAkBr4C,UAAlB,UAAuB46C,gBAAgBvC,EAAgBr4C,MAC7DimB,OAAsB3nB,SAIzB,OAFAinB,EAAAA,EAAAA,IAAelV,EAAUgwB,EAAS6I,EAAgBc,EAAAA,GAAAA,SAGhD,0BAAKxmC,UAAU,kCACb,0BAAKA,UAAU,sBACb,yBAAIA,UAAU,uBAAuBkC,IAAK3C,EAAK4iB,MAAQ,WAAQjpB,GAAYqG,EAAK,aAEhF,mBAAC6G,GAAA,EAAD,CACE4qB,MAAOzxB,EAAK,YACZ6F,IAAK,GACLD,IAAK,GACLmB,MAAO2uC,EACP1uC,SAAUwvC,IAGZ,mBAAC3xB,GAAA,EAAD,CACE5jB,KAAK,QAELP,QAAS,IAAMylC,EAAec,EAAAA,GAAAA,wBAE7BjnC,EAAK,oBAIV,0BAAKS,UAAU,iBACb,yBAAIA,UAAU,uBAAuBkC,IAAK3C,EAAK4iB,MAAQ,WAAQjpB,GAC5DqG,EAAK,UAER,mBAAC80B,GAAA,EAAD,CACEhS,KAAK,QACLiS,QAASmhB,EACTlhB,SAAUkgB,EAAuB,OAASlT,EAC1Ch7B,SAAU6vC,KAId,0BAAKp2C,UAAU,iBACb,yBAAIA,UAAU,uBAAuBkC,IAAK3C,EAAK4iB,MAAQ,WAAQjpB,GAA/D,eAGA,mBAACm7B,GAAA,EAAD,CACEhS,KAAK,aACLiS,QAASkgB,GACTjgB,SAAU8gB,EACV9uC,SAAUkwC,KAId,0BAAKz2C,UAAU,iBACb,yBAAIA,UAAU,uBAAuBkC,IAAK3C,EAAK4iB,MAAQ,WAAQjpB,GAA/D,mBAGA,wBAAG8G,UAAU,4BAA4BkC,IAAK3C,EAAK4iB,MAAQ,WAAQjpB,GAAnE,yCAIA,mBAACkN,GAAA,EAAD,CACEkuB,QAASigB,GACTjuC,MAAOwG,EACPvG,SAAUqvC,KAIbF,GACC,0BAAK11C,UAAU,iBACb,yBAAIA,UAAU,uBAAuBkC,IAAK3C,EAAK4iB,MAAQ,WAAQjpB,GAAYqG,EAAK,uBAEhF,mBAAC80B,GAAA,EAAD,CACEhS,KAAK,yBACLiS,QAASohB,EACTnvC,SAAUuwC,EACVviB,SAAU2gB,KAKhB,0BAAKl1C,UAAU,iBACb,yBAAIA,UAAU,uBAAuBkC,IAAK3C,EAAK4iB,MAAQ,WAAQjpB,GAAYqG,EAAK,qBAE/Ew1C,GACC,mBAAC3wB,GAAA,EAAD,CACEpkB,UAAU,0BAEVC,QAAS,IAAMylC,EAAec,EAAAA,GAAAA,gBAE9B,mBAACzN,GAAA,EAAD,CAAqBN,SAAUsc,IAC/B,0BAAK/0C,UAAU,SAAST,EAAK,sBAIjC,mBAAC0xB,GAAA,EAAD,CACED,MAAOzxB,EAAK,mBACZ2xB,QAASikB,EACThkB,QAAS6lB,IAEX,mBAAC/lB,GAAA,EAAD,CACED,MAAOzxB,EAAK,wBACZ2xB,QAASkkB,EACTjkB,QAAS+lB,IAGX,0BAAKl3C,UAAU,OAAO6F,IAAKyvC,GACxB6B,GAAeA,EAAYrxC,KAAKutC,GAC/B,mBAAC,GAAD,CACEtoC,IAAKsoC,EAAW72C,GAChB62C,WAAYA,EACZ1Q,oBAAqB4S,EACrBt1C,QAAS42C,OAIdxC,GACC,mBAAC,KAAD,CACEz0C,OAAQynB,EACRgwB,YAAahD,EACbrtC,QAASugB,U,eC9Qd,SAAS+vB,GAAQC,GACtB,MAAO,CACLC,SAASD,EAAME,UAAU,EAAG,GAAI,IAChCD,SAASD,EAAME,UAAU,EAAG,GAAI,IAChCD,SAASD,EAAME,UAAU,EAAG,GAAI,KAS7B,SAASC,GAAQH,GACtB,MAAMI,EAAKJ,EAAM,GAAGr+B,SAAS,IACvB0+B,EAAKL,EAAM,GAAGr+B,SAAS,IACvB2+B,EAAKN,EAAM,GAAGr+B,SAAS,IAC7B,OAAqB,GAAby+B,EAAGh6C,OAAc,IAAMg6C,EAAKA,IAAoB,GAAbC,EAAGj6C,OAAc,IAAMi6C,EAAKA,IAAoB,GAAbC,EAAGl6C,OAAc,IAAMk6C,EAAKA,GAcrG,SAASC,GAAT,GAAgF,IAA9DC,EAAGC,EAAGvX,GAAwD,EACrFsX,GAAK,IACLC,GAAK,IACLvX,GAAK,IAEL,IACItsB,EAAY8jC,EADZ9yC,EAAM1E,KAAK0E,IAAI4yC,EAAGC,EAAGvX,GAAIr7B,EAAM3E,KAAK2E,IAAI2yC,EAAGC,EAAGvX,GACvByX,EAAY/yC,EAEnCkpB,EAAIlpB,EAAMC,EAGd,GAFA6yC,EAAW,GAAP9yC,EAAW,EAAIkpB,EAAIlpB,EAEnBA,GAAOC,EACT+O,EAAI,MACC,CACL,OAAQhP,GACN,KAAK4yC,EACH5jC,GAAK6jC,EAAIvX,GAAKpS,GAAK2pB,EAAIvX,EAAI,EAAI,GAC/B,MACF,KAAKuX,EACH7jC,GAAKssB,EAAIsX,GAAK1pB,EAAI,EAClB,MACF,KAAKoS,EACHtsB,GAAK4jC,EAAIC,GAAK3pB,EAAI,EAItBla,GAAK,EAGP,MAAO,CAACA,EAAG8jC,EAAGC,GAcT,SAASC,GAAT,GAAgF,IACjFJ,EAAYC,EAAYvX,GADLtsB,EAAG8jC,EAAGC,GAAwD,EAGjF/zB,EAAI1jB,KAAKiC,MAAU,EAAJyR,GACfikC,EAAQ,EAAJjkC,EAAQgQ,EACZk0B,EAAIH,GAAK,EAAID,GACbK,EAAIJ,GAAK,EAAIE,EAAIH,GACjBM,EAAIL,GAAK,GAAK,EAAIE,GAAKH,GAE3B,OAAQ9zB,EAAI,GACV,KAAK,EACH4zB,EAAIG,EACJF,EAAIO,EACJ9X,EAAI4X,EACJ,MACF,KAAK,EACHN,EAAIO,EACJN,EAAIE,EACJzX,EAAI4X,EACJ,MACF,KAAK,EACHN,EAAIM,EACJL,EAAIE,EACJzX,EAAI8X,EACJ,MACF,KAAK,EACHR,EAAIM,EACJL,EAAIM,EACJ7X,EAAIyX,EACJ,MACF,KAAK,EACHH,EAAIQ,EACJP,EAAIK,EACJ5X,EAAIyX,EACJ,MACF,KAAK,EACHH,EAAIG,EACJF,EAAIK,EACJ5X,EAAI6X,EAIR,MAAO,CACL73C,KAAKX,MAAU,IAAJi4C,GACXt3C,KAAKX,MAAU,IAAJk4C,GACXv3C,KAAKX,MAAU,IAAJ2gC,IAuDR,SAAS+X,GAAgBC,GAC9B,IAAKC,EAAKC,EAAYryC,GAASwxC,GAAQW,GAOvC,OALAE,EAAal4C,KAAK2E,IAAI,EAAGuzC,EAAa,IAAO,IAAO,EAAIA,IACxDryC,EAAQA,EAAQ,GACZ7F,KAAK0E,IAAI,EAAW,IAARmB,GACZ7F,KAAK0E,IAAI,EAAG1E,KAAK2E,IAAI,EAAG,EAAY,IAARkB,IAExB,QAAa,IAANoyC,MAA2B,IAAbC,OAA8B,IAARryC,U,0BCzKrD,MAiFA,IAAevI,EAAAA,EAAAA,KAjFqB,IAK9B,UAL+B,UACnC66C,EADmC,MAEnCrX,EAFmC,WAGnCuQ,EAHmC,QAInC7xC,GACI,EACJ,MAAM,KAAE44C,EAAF,SAAQ19C,GAAay9C,EACrBE,EAAkB,YAAW39C,EAASqB,KACtCoS,EAAezT,EAASsT,eACxBA,GAAiBH,EAAAA,EAAAA,GAAU,GAAEwqC,YAC7BC,GAAWC,EAAAA,GAAAA,GAAa,UAAC79C,EAAS89C,iBAAV,aAAC,EAAoBrgD,QAASkC,QAAQ2T,IAAiB,IAC/E,qBAAEjF,IAAyBE,EAAAA,EAAAA,GAC/B5O,QAAQ2T,GAAkBG,QAC1B1V,OACAA,EACA,SAEKggD,EAAeC,IAAoB93C,EAAAA,EAAAA,KAAS,IAEjD/C,UAAW86C,EADP,aACkBn6C,IACpBE,EAAAA,EAAAA,GAAyB25C,GAAiBI,GACxCG,GAAiD,KAA/Bx+B,EAAAA,EAAAA,GAAYq+B,IAC5B5vC,aAAcC,EAAqBC,qBAAsBC,IAAsBC,EAAAA,EAAAA,GACpFwvC,IAAkBE,GAAcP,IAASS,EAAAA,QAC1CpgD,EACAmgD,EACA,QAGIE,GAAczgD,EAAAA,EAAAA,MACpBygD,EAAYtgD,QAAUsoC,EAEtB,MAAMiY,GAAel6C,EAAAA,EAAAA,KAAY,KAC/B,WACE,MAAMm6C,QAAaC,EAAAA,EAAAA,IAAUN,SACvBO,GAASC,KAAKC,EAAAA,GAAsBN,EAAYtgD,QAAUwgD,GAChEx5C,EAAQ44C,IAHV,KAKC,CAACO,EAAWn5C,EAAS44C,KAExBx+C,EAAAA,EAAAA,KAAU,KACJ++C,GACFI,MAED,CAACJ,EAAWI,IAEf,MAAMpiB,GAAc93B,EAAAA,EAAAA,KAAY,KAC1B85C,EACFI,IAEAL,GAAkBW,IAAeA,MAElC,CAACV,EAAWI,IAETx5C,GAAY+B,EAAAA,EAAAA,GAChB,gBACA+vC,GAAc,YAGhB,OACE,0BAAK9xC,UAAWA,EAAWC,QAASm3B,GAClC,0BAAKp3B,UAAU,eACb,6BACE6F,IAAKkzC,EACL/4C,UAAU,cAEZ,0BACE3G,IAAKoV,GAAkBG,EACvB5O,WAAW+B,EAAAA,EAAAA,GAAe,aAAcyH,GACxC2G,IAAI,KAEL5G,GACC,0BAAKvJ,WAAW+B,EAAAA,EAAAA,GAAe,oBAAqB0H,IAClD,mBAAC7I,EAAA,EAAD,CAAiBC,SAAU5B,EAAcgB,QAASm3B,UC9DxDmF,IAAe56B,EAAAA,EAAAA,KAAU66B,GAAOA,KAAM,KAAO,GA6HnD,IAAez+B,EAAAA,EAAAA,KAAKC,EAAAA,EAAAA,KACjBC,IACC,MAAMsjC,GAAQC,EAAAA,EAAAA,IAAYvjC,IACpB,WAAE87C,EAAF,UAAcC,GAAc/7C,EAAOod,SAAS4+B,OAAO1Y,IAAU,IAC7D,iBAAE2Y,GAAqBj8C,EAAOod,SAEpC,MAAO,CACL0+B,WAAAA,EACAC,UAAAA,EACAE,iBAAAA,EACA3Y,MAAAA,KAVcvjC,EA3HyC,IAQvD,IARwD,SAC5D6O,EAD4D,eAE5D64B,EAF4D,QAG5D7I,EAH4D,WAI5Dkd,EAJ4D,UAK5DC,EAL4D,iBAM5DE,EAN4D,MAO5D3Y,GACI,EACJ,MAAM,eACJ4Y,EADI,gBAEJC,EAFI,iBAGJC,IACEr7C,EAAAA,EAAAA,MAEEs7C,GAAWxhD,EAAAA,EAAAA,MACjBwhD,EAASrhD,QAAUsoC,GAGnBlnC,EAAAA,EAAAA,KAAU,KACRkiC,IAAa,KACX4d,SAED,CAACA,IAEJ,MAAMI,GAAmBj7C,EAAAA,EAAAA,KAAa0C,IACpC,MAAM,MAAEw4C,GAAUx4C,EAAEmI,OAEhBqwC,GAASA,EAAM78C,OAAS,GAC1By8C,EAAgBI,EAAM,MAEvB,CAACJ,IAEEK,GAAwBn7C,EAAAA,EAAAA,KAAY,MACxCo7C,EAAAA,GAAAA,GAtCoB,aAsCmBH,GAAkB,KACxD,CAACA,IAEEI,GAAiBr7C,EAAAA,EAAAA,KAAY,KACjComC,EAAec,EAAAA,GAAAA,8BACd,CAACd,IAEEkV,GAAuBt7C,EAAAA,EAAAA,KAAY,KACvC+6C,EAAiB,CACf9Y,MAAAA,EACAwY,gBAAY7gD,EACZ2hD,qBAAiB3hD,EACjB8gD,WAAW,EACXc,aAAwB,SAAVvZ,EAAmBwZ,EAAAA,GAA2BC,EAAAA,MAE7D,CAACX,EAAkB9Y,IAEhB0Z,GAAwB37C,EAAAA,EAAAA,KAAau5C,IACzCwB,EAAiB,CAAE9Y,MAAO+Y,EAASrhD,QAAS8gD,WAAYlB,IACxD,MAAMqC,EAAmBhB,GAAoBA,EAAiBphB,MAAM8f,GAAcA,EAAUC,OAASA,IACjGqC,MAAAA,GAAAA,EAAkB//C,SAAS89C,WF2C5BkC,eAA+Bh0C,GAEpC,MACMi0C,EAAuC,CAAC,EAAG,EAAG,GACpD,IAAI9gB,EACAhhC,EACAK,EAEAgE,EADAwmB,GAAK,EAELk3B,EAAgC,CAAC,EAAG,EAAG,GACvCnjB,EAAQ,EAEZ,MAAM3+B,EAAS4B,SAASC,cAAc,UAChCkgD,EAAU/hD,EAAOG,YAAcH,EAAOG,WAAW,MACvD,IAAK4hD,EACH,OAAOF,EAGT,MAAM3iC,QAAc8iC,EAAAA,EAAAA,IAAap0C,GACjCxN,EAAS8e,EAAM+iC,eAAiB/iC,EAAM7b,cAAgB6b,EAAM9e,OAC5DL,EAAQmf,EAAMgjC,cAAgBhjC,EAAMijC,aAAejjC,EAAMnf,MACzDC,EAAOI,OAASA,EAChBJ,EAAOD,MAAQA,EAEfgiD,EAAQK,UAAUljC,EAAO,EAAG,GAE5B,IACE6hB,EAAOghB,EAAQM,aAAa,EAAG,EAAGtiD,EAAOK,GACzC,MAAOqI,GACP,OAAOo5C,EAMT,IAHAz9C,EAAS28B,EAAKA,KAAK38B,QAGXwmB,GAAK03B,IAAiBl+C,KAC1Bu6B,EACFmjB,EAAI,IAAM/gB,EAAKA,KAAKnW,GACpBk3B,EAAI,IAAM/gB,EAAKA,KAAKnW,EAAI,GACxBk3B,EAAI,IAAM/gB,EAAKA,KAAKnW,EAAI,GAO1B,OAJAk3B,EAAI,GAAK56C,KAAKiC,MAAM24C,EAAI,GAAKnjB,GAC7BmjB,EAAI,GAAK56C,KAAKiC,MAAM24C,EAAI,GAAKnjB,GAC7BmjB,EAAI,GAAK56C,KAAKiC,MAAM24C,EAAI,GAAKnjB,GAEtBmjB,EExFHS,CAAgBZ,EAAiB//C,SAAS89C,UAAUrgD,SACjDyhC,MAAMt6B,IACL,MAAM+6C,EAAetC,GAAgBz4C,GAC/B04C,EAAY,IAAGf,GAAQ33C,KAC7Bs6C,EAAiB,CAAE9Y,MAAO+Y,EAASrhD,QAAS4hD,gBAAiBpC,EAAUqC,aAAAA,SAG5E,CAACZ,EAAkBG,IAEhB0B,GAA4Bz8C,EAAAA,EAAAA,KAAa0C,IAC7Cq4C,EAAiB,CAAE9Y,MAAO+Y,EAASrhD,QAAS+gD,UAAWh4C,EAAEmI,OAAO+mB,YAC/D,CAACmpB,IAEE96C,GAAOC,EAAAA,EAAAA,MAEbuiB,EAAAA,EAAAA,IAAelV,EAAUgwB,EAAS6I,EAAgBc,EAAAA,GAAAA,uBAElD,MAAMwV,GAAc9B,MAAAA,OAAA,EAAAA,EAAmB,KAAMA,EAAiB,GAAGrB,OAASS,EAAAA,GAE1E,OACE,0BAAKt5C,UAAU,4DACb,0BAAKA,UAAU,sBACb,mBAACokB,GAAA,EAAD,CACE5jB,KAAK,aACLR,UAAU,OACVkH,SAAU80C,EACV/7C,QAASw6C,GAERl7C,EAAK,gBAGR,mBAAC6kB,GAAA,EAAD,CACE5jB,KAAK,WACLR,UAAU,OACVC,QAAS06C,GAERp7C,EAAK,aAGR,mBAAC6kB,GAAA,EAAD,CAAU5jB,KAAK,WAAWP,QAAS26C,GAChCr7C,EAAK,yBAGR,mBAAC0xB,GAAA,EAAD,CACED,MAAOzxB,EAAK,qBACZ2xB,QAASp2B,QAAQk/C,GACjBzzC,SAAUw1C,KAIb7B,EACC,0BAAKl6C,UAAU,uBACZk6C,EAAiBp0C,KAAK8yC,GACrB,mBAAC,GAAD,CACEA,UAAWA,EACXrX,MAAOA,EACPuQ,WAAYiI,IAAenB,EAAUC,KACrC54C,QAASg7C,OAKf,mBAACx2B,GAAA,EAAD,WC/GFw3B,GAAcnE,GAAQR,GAAQ,WAC9B4E,GAAoB,CACxB,UAAW,UAAW,UAAW,UAAW,UAAW,UACvD,UAAW,UAAW,UAAW,UAAW,UAAW,WA0MzD,SAASC,GAAcC,EAA+BC,GACpD,MAAO,CACLC,cAAe,CACb77C,KAAKX,MAAOs8C,EAAI,IAAOC,EAAME,UAAUjjD,MAAQ,IAC/CmH,KAAKX,OAAO,EAAIs8C,EAAI,KAAOC,EAAME,UAAU5iD,OAAS,KAEtD6iD,YAAa/7C,KAAKX,MAAMs8C,EAAI,IAAMC,EAAMI,QAAQnjD,MAAQ,KAI5D,SAASojD,GAAT,EAEEL,GAC0B,IAF1B,cAAEC,EAAF,YAAiBE,GAES,EAC1B,MAAO,CACLA,GAAeH,EAAMI,QAAQnjD,MAAQ,GACrCgjD,EAAc,IAAMD,EAAME,UAAUjjD,MAAQ,GAC5C,EAAIgjD,EAAc,IAAMD,EAAME,UAAU5iD,OAAS,IA8ErD,UAAeoE,EAAAA,EAAAA,KAAKC,EAAAA,EAAAA,KACjBC,IACC,MAAMsjC,GAAQC,EAAAA,EAAAA,IAAYvjC,IACpB,gBAAE48C,GAAoB58C,EAAOod,SAAS4+B,OAAO1Y,IAAU,GAC7D,MAAO,CACLsZ,gBAAAA,EACAtZ,MAAAA,KANcvjC,EAtSyC,IAMvD,IANwD,SAC5D6O,EAD4D,eAE5D64B,EAF4D,QAG5D7I,EAH4D,MAI5D0E,EAJ4D,gBAK5DsZ,GACI,EACJ,MAAM,iBAAER,IAAqBr7C,EAAAA,EAAAA,MAEvBs7C,GAAWxhD,EAAAA,EAAAA,MACjBwhD,EAASrhD,QAAUsoC,EAEnB,MAAM7wB,GAAe5X,EAAAA,EAAAA,IAAuB,MAEtC6jD,GAAiB7jD,EAAAA,EAAAA,IAAuB,MAExC8jD,GAAe9jD,EAAAA,EAAAA,IAAuB,MACtC+jD,GAAgB/jD,EAAAA,EAAAA,KAAO,IAEtBsjD,EAAKU,IAAUz7C,EAAAA,EAAAA,IA8KxB,SAAuBw5C,GACrB,OAAOA,GAAmBA,EAAgB5a,WAAW,KACjD6X,GAAQR,GAAQuD,EAAgBhtB,QAAQ,IAAK,MAC7CouB,GAjL2Bc,CAAclC,IAEvCmC,GAASlkD,EAAAA,EAAAA,IAAOsjD,IACtB/hD,EAAAA,EAAAA,KAAU,KACR2iD,EAAO/jD,QAAUmjD,IAChB,CAACA,IAEJ,MAAO5kC,EAAYylC,EAAgBC,IAAoB54C,EAAAA,GAAAA,MAChD64C,EAAUC,IAAe/7C,EAAAA,EAAAA,IAAS,KAClCg8C,EAAUC,IAAej8C,EAAAA,EAAAA,IAAS,IAEnCk8C,GAAWzkD,EAAAA,EAAAA,MACX0kD,GAAc1kD,EAAAA,EAAAA,OAGpBuB,EAAAA,EAAAA,KAAU,KAER,MAAMkiD,EAAY,CAChBkB,WAAYd,EAAe1jD,QAASwkD,eACjC12B,EAAAA,GAAAA,IAAK41B,EAAe1jD,QAAS8L,wBAAyB,CAAC,MAAO,QAAS,YAEtE03C,EAAU,CACdgB,WAAYb,EAAa3jD,QAASwkD,eAC/B12B,EAAAA,GAAAA,IAAK61B,EAAa3jD,QAAS8L,wBAAyB,CAAC,WAK1D,SAAS24C,EAAgB17C,GACvB,MAAMs6C,EAAgB,CACpB77C,KAAK2E,IAAI3E,KAAK0E,IAAI,EAAGnD,EAAE8P,MAASyqC,EAAUkB,YAAalB,EAAUjjD,MAAQ,GACzEmH,KAAK2E,IAAI3E,KAAK0E,IAAI,EAAGnD,EAAE6P,MAAS0qC,EAAUtmC,IAAMvF,EAAazX,QAAS0D,WAAY4/C,EAAU5iD,OAAS,KAGjG,YAAE6iD,GAAgBL,GAAca,EAAO/jD,QAASskD,EAAStkD,SAK/D,OAHA6jD,EAAOJ,GAAc,CAAEJ,cAAAA,EAAeE,YAAAA,GAAee,EAAStkD,UAC9DgkD,KAEO,EAYT,SAASU,EAAc37C,GACrB,MAAM,cAAEs6C,GAAkBH,GAAca,EAAO/jD,QAASskD,EAAStkD,SAC3DujD,EAAc/7C,KAAK2E,IAAI3E,KAAK0E,IAAI,EAAGnD,EAAE8P,MAAS2qC,EAAQgB,YAAahB,EAAQnjD,MAAQ,GAKzF,OAHAwjD,EAAOJ,GAAc,CAAEJ,cAAAA,EAAeE,YAAAA,GAAee,EAAStkD,UAC9DgkD,KAEO,EAhCTM,EAAStkD,QAAU,CAAEsjD,UAAAA,EAAWE,QAAAA,IAgBhCl3C,EAAAA,EAAAA,IAAco3C,EAAe1jD,QAAU,CACrCuM,UAAWk4C,EACXh4C,OAAQg4C,EACRj4C,UAAWy3C,EACXj9C,QAASi9C,EACTU,wBAAyB,kCACzBC,YAAY,KAadt4C,EAAAA,EAAAA,IAAcq3C,EAAa3jD,QAAU,CACnCuM,UAAWm4C,EACXj4C,OAAQi4C,EACRl4C,UAAWy3C,EACXj9C,QAASi9C,EACTU,wBAAyB,kCACzBC,YAAY,MAEb,CAACZ,EAAgBC,IAEpB,MAAM,cAAEZ,EAAgB,CAAC,EAAG,GAAtB,YAA0BE,EAAc,GAAMe,EAAStkD,QAAUkjD,GAAcC,EAAKmB,EAAStkD,SAAW,GACxG6kD,EAAMpG,GAAQS,GAAQiE,IACtB1D,EAAM0D,EAAI,GACV2B,EAASrG,GAAQS,GAAQ,CAACO,EAAK,EAAG,MAGxCr+C,EAAAA,EAAAA,KAAU,KACR,MAAMghD,EAAMlD,GAAQiE,GACdr8C,EAAS,IAAG23C,GAAQ2D,KAK1B,GAHA+B,EAAY/B,EAAIxvC,KAAK,OACrByxC,EAAYv9C,IAEP88C,EAAc5jD,QAAS,CAC1B,MAAM6hD,EAAetC,GAAgB6C,GACrChB,EAAiB,CACf9Y,MAAO+Y,EAASrhD,QAChB8gD,gBAAY7gD,EACZ2hD,gBAAiB96C,EACjB+6C,aAAAA,IAGJ+B,EAAc5jD,SAAU,IACvB,CAACmjD,EAAK/B,KAGThgD,EAAAA,EAAAA,KAAU,MAwGZ,SACEd,EACAm/C,EACA8E,EACAD,GAEA,IAAIS,EACA7pC,EACA8pC,EAECT,EAAYvkD,SAAYskD,EAAStkD,SAWpC+kD,EAAIT,EAAStkD,QAAQsjD,UAAUjjD,MAC/B6a,EAAIopC,EAAStkD,QAAQsjD,UAAU5iD,OAC/BskD,EAAMT,EAAYvkD,UAXlB+kD,EAAIzkD,EAAOmiD,YACXvnC,EAAI5a,EAAOqD,aACXqhD,EAAM1kD,EAAOG,WAAW,MAExBH,EAAOD,MAAQ0kD,EACfzkD,EAAOI,OAASwa,EAEhBqpC,EAAYvkD,QAAUglD,GAOxB,MAAMC,EAAUD,EAAKE,gBAAgBH,EAAG7pC,GAClCiqC,EAASF,EAAQ5jB,KACjB+jB,EAAMlG,GAAQ,CAACO,EAAK,EAAG,IAE7B,IAAI72B,EAAQ,EAEZ,IAAK,IAAI/Q,EAAI,EAAGA,EAAIqD,EAAGrD,IAAK,CAC1B,MAAMwtC,EAAO,EAAIxtC,GAAKqD,EAAI,GACpBoqC,EAAK,CAAC,IAAMD,EAAM,IAAMA,EAAM,IAAMA,GACpCE,EAAK,CAACH,EAAI,GAAKC,EAAMD,EAAI,GAAKC,EAAMD,EAAI,GAAKC,GACnD,IAAK,IAAIztC,EAAI,EAAGA,EAAImtC,EAAGntC,IAAK,CAC1B,MAAM4tC,EAAO5tC,GAAKmtC,EAAI,GACtBI,EAAOv8B,KAAW08B,EAAG,IAAMC,EAAG,GAAKD,EAAG,IAAME,EAC5CL,EAAOv8B,KAAW08B,EAAG,IAAMC,EAAG,GAAKD,EAAG,IAAME,EAC5CL,EAAOv8B,KAAW08B,EAAG,IAAMC,EAAG,GAAKD,EAAG,IAAME,EAC5CL,EAAOv8B,KAAW,KAItBo8B,EAAKS,aAAaR,EAAS,EAAG,GApJ5BS,CAAUhC,EAAe1jD,QAAS4E,WAAiC66C,EAAK8E,EAAaD,KACpF,CAAC7E,KAGJr+C,EAAAA,EAAAA,KAAU,MAmJZ,SAAiBd,GACf,MAAMykD,EAAIzkD,EAAOmiD,YAEjBniD,EAAOD,MAAQ0kD,EACfzkD,EAAOI,OAFG,EAGV,MAAMskD,EAAM1kD,EAAOG,WAAW,MAExBwkD,EAAUD,EAAIE,gBAAgBH,EAL1B,GAMJI,EAASF,EAAQ5jB,KAEvB,IAAIzY,EAAQ,EAEZ,IAAK,IAAIhR,EAAI,EAAGA,EAAImtC,EAAGntC,IAAK,CAC1B,MACMwqC,EAAMlD,GAAQ,CADRtnC,GAAKmtC,EAAI,GACK,EAAG,IAE7BI,EAAOv8B,KAAWw5B,EAAI,GACtB+C,EAAOv8B,KAAWw5B,EAAI,GACtB+C,EAAOv8B,KAAWw5B,EAAI,GAEtB+C,EAAOv8B,KAAW,IAGpBo8B,EAAIS,aAAaR,EAAS,EAAG,GAzK3BU,CAAQhC,EAAa3jD,QAAS4E,cAC7B,IAEH,MAAMghD,GAAkBv/C,EAAAA,EAAAA,KAAa0C,IACnC,MAAM88C,EAAW98C,EAAEqI,cAAc/D,MAAMunB,QAAQ,WAAY,IAAIkW,MAAM,EAAG,IAExE,GAAI+a,EAASvgB,MAAM,mCAAoC,CACrD,MAAM8c,EAAMyD,EAASxe,MAAM,KAAKx6B,KAAKi5C,GAAY3jC,OAAO2jC,EAAQ1W,UAChEyU,EAAOhF,GAAQuD,IAGjBr5C,EAAEqI,cAAc/D,MAAQw4C,IACvB,IAEGE,GAAkB1/C,EAAAA,EAAAA,KAAa0C,IACnC,MAAMi9C,EAAWj9C,EAAEqI,cAAc/D,MAAMunB,QAAQ,gBAAiB,IAAIkW,MAAM,EAAG,GAEzEkb,EAAS1gB,MAAM,uBACjBue,EAAOhF,GAAQR,GAAQ2H,EAASpxB,QAAQ,IAAK,OAG/C7rB,EAAEqI,cAAc/D,MAAQ24C,IACvB,IAEGC,GAA6B5/C,EAAAA,EAAAA,KAAa0C,IAC9C86C,EAAOhF,GAAQR,GAAQt1C,EAAEqI,cAAc80C,QAAQp/C,MAAO8tB,QAAQ,IAAK,SAClE,IAEG7tB,GAAY+B,EAAAA,EAAAA,GAChB,gEACAyV,GAAc,eAKhB,OAFAuK,EAAAA,EAAAA,IAAelV,EAAUgwB,EAAS6I,EAAgBc,EAAAA,GAAAA,4BAGhD,0BAAK3gC,IAAK6K,EAAc1Q,UAAWA,GACjC,0BAAKA,UAAU,sBACb,0BAAK6F,IAAK82C,EAAgB38C,UAAU,gBAClC,kCACA,0BACEA,UAAU,SACV9C,MAAQ,wBAAuBo/C,EAAc,SAASA,EAAc,6BAA6BwB,QAGrG,0BAAKj4C,IAAK+2C,EAAc58C,UAAU,cAChC,kCACA,0BACEA,UAAU,SACV9C,MAAQ,yBAAwBs/C,4BAAsCuB,QAG1E,0BAAK/9C,UAAU,SACb,mBAACujB,GAAA,EAAD,CAAWjd,MAAO+2C,EAAUrsB,MAAM,MAAMzqB,SAAUy4C,IAClD,mBAACz7B,GAAA,EAAD,CAAWjd,MAAO62C,EAAUnsB,MAAM,MAAMzqB,SAAUs4C,MAGtD,0BAAK7+C,UAAU,qBACZk8C,GAAkBp2C,KAAK/F,GACtB,0BACEC,UAAWD,IAAW,IAAG+9C,IAAQ,cAAW5kD,EAC5C,aAAY6G,EACZ7C,MAAQ,qBAAoB6C,KAC5BE,QAASi/C,Y,eC1MrB,MAiNA,IAAenhD,EAAAA,EAAAA,KAAKC,EAAAA,EAAAA,KACjBC,IACQ,CACLmhD,6BAA8BtkD,QAAQmD,EAAOod,SAASC,MAAM8jC,8BAC5DC,8BAA+BvkD,QAAQmD,EAAOod,SAASC,MAAM+jC,+BAC7DC,sBAAuBxkD,QAAQmD,EAAOod,SAASC,MAAMgkC,uBACrDC,uBAAwBzkD,QAAQmD,EAAOod,SAASC,MAAMikC,wBACtDC,0BAA2B1kD,QAAQmD,EAAOod,SAASC,MAAMkkC,2BACzDC,2BAA4B3kD,QAAQmD,EAAOod,SAASC,MAAMmkC,4BAC1DC,8BAA+B5kD,QAAQmD,EAAOod,SAASC,MAAMokC,+BAC7DC,oBAAqB1hD,EAAOod,SAASC,MAAMqkC,oBAC3CC,qBAAsB3hD,EAAOod,SAASC,MAAMskC,qBAC5CC,wBAAyB5hD,EAAOod,SAASC,MAAMukC,2BAZjC7hD,EAjNqC,IAcnD,IAdoD,SACxD6O,EADwD,eAExD64B,EAFwD,QAGxD7I,EAHwD,6BAIxDuiB,EAJwD,8BAKxDC,EALwD,sBAMxDC,EANwD,uBAOxDC,EAPwD,0BAQxDC,EARwD,2BASxDC,EATwD,8BAUxDC,EAVwD,qBAWxDE,EAXwD,oBAYxDD,EAZwD,wBAaxDE,GACI,EACJ,MAAM,yBACJC,EADI,gCAEJC,EAFI,2BAGJC,EAHI,8BAIJC,IACEjhD,EAAAA,EAAAA,OAEJ3E,EAAAA,EAAAA,KAAU,KACRylD,MACC,CAACA,IAEJ,MAAMI,GAAe3uC,EAAAA,EAAAA,GAAY,KAAK,GAEhC4uC,GAAuB7gD,EAAAA,EAAAA,KAAY,CACvC0C,EACAo+C,EACAC,KAEA,MAAMC,EAA+B,YAAbF,GACnBhB,IACc,UAAbgB,EAAuBd,EAAwBE,GAC/Ce,EAAyC,YAAbH,EAC9Bf,EACc,UAAbe,EAAuBb,EAAyBE,EAErDO,EAA2B,CACzBI,SAAAA,KACgB,WAAZC,GAAwB,CAAEltB,UAAWnxB,EAAEmI,OAAO+mB,QAASsvB,mBAAoBD,MAC/D,iBAAZF,GAA8B,CAAEG,mBAAoBx+C,EAAEmI,OAAO+mB,QAASiC,SAAUmtB,OAErF,CACDb,EAA4BD,EAC5BD,EAAwBD,EACxBD,EAA+BD,EAC/BY,IAGIS,GAA+BnhD,EAAAA,EAAAA,KAAa0C,IAChDi+C,EAA8B,CAC5BN,oBAAqB39C,EAAEmI,OAAO+mB,YAE/B,CAAC+uB,IAEES,GAAgCphD,EAAAA,EAAAA,KAAa0C,IACjDi+C,EAA8B,CAC5BL,qBAAsB59C,EAAEmI,OAAO+mB,YAEhC,CAAC+uB,IAEEU,GAAwCrhD,EAAAA,EAAAA,KAAa0C,IACzDm+C,EAAqBn+C,EAAG,UAAW,YAClC,CAACm+C,IAEES,GAAkCthD,EAAAA,EAAAA,KAAa0C,IACnDm+C,EAAqBn+C,EAAG,UAAW,kBAClC,CAACm+C,IAEEU,GAAkCvhD,EAAAA,EAAAA,KAAa0C,IACnDm+C,EAAqBn+C,EAAG,QAAS,YAChC,CAACm+C,IAEEW,GAA4BxhD,EAAAA,EAAAA,KAAa0C,IAC7Cm+C,EAAqBn+C,EAAG,QAAS,kBAChC,CAACm+C,IAEEY,GAAoCzhD,EAAAA,EAAAA,KAAa0C,IACrDm+C,EAAqBn+C,EAAG,YAAa,YACpC,CAACm+C,IAEEa,GAA8B1hD,EAAAA,EAAAA,KAAa0C,IAC/Cm+C,EAAqBn+C,EAAG,YAAa,kBACpC,CAACm+C,IAEEc,GAAkC3hD,EAAAA,EAAAA,KAAa0C,IACnD+9C,EAAgC,CAC9B5sB,UAAWnxB,EAAEmI,OAAO+mB,YAErB,CAAC6uB,IAEEt1C,GAAqBnL,EAAAA,EAAAA,KAAamE,IACtCw8C,EAA8B,CAC5BJ,wBAAyBp8C,IAE3By8C,GAAa,KAAMgB,EAAAA,GAAAA,SAAgBhoD,EAAWuK,OAC7C,CAACy8C,EAAcD,IAEZ1gD,GAAOC,EAAAA,EAAAA,KAIb,OAFAuiB,EAAAA,EAAAA,IAAelV,EAAUgwB,EAAS6I,EAAgBc,EAAAA,GAAAA,eAGhD,0BAAKxmC,UAAU,kCACb,0BAAKA,UAAU,iBACb,yBAAIA,UAAU,uBAAuBkC,IAAK3C,EAAK4iB,MAAQ,WAAQjpB,GAA/D,qBAGA,mBAAC+3B,GAAA,EAAD,CACED,MAAM,oBAEN2kB,SAAUp2C,EAAKogD,EAAsB,gCAAkC,kCACvEzuB,QAASyuB,EACTp5C,SAAUk6C,IAEZ,mBAACxvB,GAAA,EAAD,CACED,MAAM,wBACN9pB,UAAWy4C,EAEXhK,SAAUp2C,EAAKqgD,EAAuB,gCAAkC,kCACxE1uB,QAAS0uB,EACTr5C,SAAUm6C,IAEZ,0BAAK1gD,UAAU,wBACb,mBAACoG,GAAA,EAAD,CACE4qB,MAAM,QACN5rB,IAAK,EACLD,IAAK,GACLmB,MAAOu5C,EACPt5C,SAAUkE,MAIhB,0BAAKzK,UAAU,iBACb,yBAAIA,UAAU,uBAAuBkC,IAAK3C,EAAK4iB,MAAQ,WAAQjpB,GAC5DqG,EAAK,6BAGR,mBAAC0xB,GAAA,EAAD,CACED,MAAOzxB,EAAK,gCAEZo2C,SAAUp2C,EAAK6/C,EAA+B,gCAAkC,kCAChFluB,QAASkuB,EACT74C,SAAUo6C,IAEZ,mBAAC1vB,GAAA,EAAD,CACED,MAAOzxB,EAAK,kBACZ2H,UAAWk4C,EAEXzJ,SAAUp2C,EAAK8/C,EAAgC,gCAAkC,kCACjFnuB,QAASmuB,EACT94C,SAAUq6C,KAId,0BAAK5gD,UAAU,iBACb,yBAAIA,UAAU,uBAAuBkC,IAAK3C,EAAK4iB,MAAQ,WAAQjpB,GAAYqG,EAAK,iBAEhF,mBAAC0xB,GAAA,EAAD,CACED,MAAOzxB,EAAK,0BACZo2C,SAAUp2C,EAAK+/C,EAAwB,gCAAkC,kCACzEpuB,QAASouB,EACT/4C,SAAUs6C,IAEZ,mBAAC5vB,GAAA,EAAD,CACED,MAAOzxB,EAAK,kBACZ2H,UAAWo4C,EACX3J,SAAUp2C,EAAKggD,EAAyB,gCAAkC,kCAC1EruB,QAASquB,EACTh5C,SAAUu6C,KAId,0BAAK9gD,UAAU,iBACb,yBAAIA,UAAU,uBAAuBkC,IAAK3C,EAAK4iB,MAAQ,WAAQjpB,GAAYqG,EAAK,mBAEhF,mBAAC0xB,GAAA,EAAD,CACED,MAAOzxB,EAAK,4BAEZo2C,SAAUp2C,EAAKigD,EAA4B,gCAAkC,kCAC7EtuB,QAASsuB,EACTj5C,SAAUw6C,IAEZ,mBAAC9vB,GAAA,EAAD,CACED,MAAOzxB,EAAK,kBACZ2H,UAAWs4C,EAEX7J,SAAUp2C,EAAKkgD,EAA6B,gCAAkC,kCAC9EvuB,QAASuuB,EACTl5C,SAAUy6C,KAId,0BAAKhhD,UAAU,iBACb,yBAAIA,UAAU,uBAAuBkC,IAAK3C,EAAK4iB,MAAQ,WAAQjpB,GAAYqG,EAAK,eAEhF,mBAAC0xB,GAAA,EAAD,CACED,MAAOzxB,EAAK,iBACZ2xB,QAASwuB,EACTn5C,SAAU06C,UCpCpB,IAAeljD,EAAAA,EAAAA,KAAKC,EAAAA,EAAAA,KACjBC,IAAuB,cACtB,MACEod,UACEC,OAAO,YAAE6lC,EAAF,mBAAeC,EAAf,mBAAmCC,GADlC,QAERC,GAHE,QAKJC,GACEtjD,EAEJ,MAAO,CACLkjD,YAAAA,EACAK,aAAcD,EAAQE,WACtBL,mBAAAA,EACAC,mBAAAA,EACAK,6BAA4B,UAAEJ,EAAQjxB,mBAAV,aAAE,EAAqBsxB,WACnDC,0BAAyB,UAAEN,EAAQO,gBAAV,aAAE,EAAkBF,WAC7CG,8BAA6B,UAAER,EAAQS,oBAAV,aAAE,EAAsBJ,WACrDK,4BAA2B,UAAEV,EAAQW,gBAAV,aAAE,EAAkBN,WAC/CO,4BAA2B,UAAEZ,EAAQa,kBAAV,aAAE,EAAoBR,cAnBnC3jD,EA5K+B,IAc7C,IAd8C,SAClD6O,EADkD,eAElD64B,EAFkD,QAGlD7I,EAHkD,YAIlDskB,EAJkD,aAKlDK,EALkD,mBAMlDJ,EANkD,mBAOlDC,EAPkD,6BAQlDK,EARkD,0BASlDE,EATkD,8BAUlDE,EAVkD,4BAWlDE,EAXkD,4BAYlDE,GAEI,EACJ,MAAM,oBACJE,EADI,oBAEJC,EAFI,mBAGJtb,EAHI,oBAIJub,EAJI,sBAKJC,IACEvjD,EAAAA,EAAAA,OAEJ3E,EAAAA,EAAAA,KAAU,KACRgoD,IACAtb,IACAqb,IACAE,MACC,CAACD,EAAqBtb,EAAoBqb,EAAqBE,IAElE,MAAM/iD,GAAOC,EAAAA,EAAAA,KAIb,SAASgjD,EAAmBb,GAC1B,OAAQA,GACN,IAAK,YACH,OAAOpiD,EAAK,gBAEd,IAAK,WACH,OAAOA,EAAK,eAEd,IAAK,SACH,OAAOA,EAAK,cAMlB,OAjBAwiB,EAAAA,EAAAA,IAAelV,EAAUgwB,EAAS6I,EAAgBc,EAAAA,GAAAA,SAkBhD,0BAAKxmC,UAAU,kCACb,0BAAKA,UAAU,sBACb,mBAACokB,GAAA,EAAD,CACE5jB,KAAK,cACLwtC,QAAM,EAEN/tC,QAAS,IAAMylC,EAAec,EAAAA,GAAAA,sBAE9B,0BAAKxmC,UAAU,uBACb,2BAAMA,UAAU,SAAST,EAAK,iBAC7BiiD,EAAe,GACd,2BAAMxhD,UAAU,WAAWkC,IAAI,QAC5B3C,EAAK,QAASiiD,MAKvB,mBAACp9B,GAAA,EAAD,CACE5jB,KAAK,OACLwtC,QAAM,EAEN/tC,QAAS,IAAMylC,EACbyb,EAAc3a,EAAAA,GAAAA,aAA+BA,EAAAA,GAAAA,gBAG/C,0BAAKxmC,UAAU,uBACb,2BAAMA,UAAU,SAAST,EAAK,wBAC9B,2BAAMS,UAAU,WAAWkC,IAAI,QAC5B3C,EAAK4hD,EAAc,aAAe,mBAM3C,0BAAKnhD,UAAU,iBACb,yBAAIA,UAAU,4BAA4BkC,IAAK3C,EAAK4iB,MAAQ,WAAQjpB,GAAYqG,EAAK,iBAErF,mBAAC6kB,GAAA,EAAD,CACE4pB,QAAM,EACNhuC,UAAU,UAEVC,QAAS,IAAMylC,EAAec,EAAAA,GAAAA,qBAE9B,0BAAKxmC,UAAU,uBACb,2BAAMA,UAAU,SAAST,EAAK,sBAC9B,2BAAMS,UAAU,WAAWkC,IAAI,QAC5BsgD,EAAmBd,MAI1B,mBAACt9B,GAAA,EAAD,CACE4pB,QAAM,EACNhuC,UAAU,UAEVC,QAAS,IAAMylC,EAAec,EAAAA,GAAAA,kBAE9B,0BAAKxmC,UAAU,uBACb,2BAAMA,UAAU,SAAST,EAAK,kBAC9B,2BAAMS,UAAU,WAAWkC,IAAI,QAC5BsgD,EAAmBZ,MAI1B,mBAACx9B,GAAA,EAAD,CACE4pB,QAAM,EACNhuC,UAAU,UAEVC,QAAS,IAAMylC,EAAec,EAAAA,GAAAA,sBAE9B,0BAAKxmC,UAAU,uBACb,2BAAMA,UAAU,SAAST,EAAK,6BAC9B,2BAAMS,UAAU,WAAWkC,IAAI,QAC5BsgD,EAAmBV,MAI1B,mBAAC19B,GAAA,EAAD,CACE4pB,QAAM,EACNhuC,UAAU,UAEVC,QAAS,IAAMylC,EAAec,EAAAA,GAAAA,oBAE9B,0BAAKxmC,UAAU,uBACb,2BAAMA,UAAU,SAAST,EAAK,yBAC9B,2BAAMS,UAAU,WAAWkC,IAAI,QAC5BsgD,EAAmBR,MAI1B,mBAAC59B,GAAA,EAAD,CACE4pB,QAAM,EACNhuC,UAAU,UAEVC,QAAS,IAAMylC,EAAec,EAAAA,GAAAA,oBAE9B,0BAAKxmC,UAAU,uBACb,2BAAMA,UAAU,SAAST,EAAK,gBAC9B,2BAAMS,UAAU,WAAWkC,IAAI,QAC5BsgD,EAAmBN,OAM3Bb,GACC,0BAAKrhD,UAAU,iBACb,yBAAIA,UAAU,uBAAuBkC,IAAK3C,EAAK4iB,MAAQ,WAAQjpB,GAC5DqG,EAAK,iCAER,mBAAC0xB,GAAA,EAAD,CACED,MAAOzxB,EAAK,4CACZo2C,SAAUp2C,EAAK,gCACf2xB,QAASp2B,QAAQsmD,GACjBl6C,UAAWm6C,EACXlwB,QAASoxB,UCvGrB,IAAexkD,EAAAA,EAAAA,KAAKC,EAAAA,EAAAA,KACjBC,IACQ,CACLwkD,UAAWxkD,EAAOod,SAASC,MAAMmnC,UACjCC,SAAUzkD,EAAOod,SAASC,MAAMonC,YAJlB1kD,EAnEgC,IAM9C,IAN+C,SACnD6O,EADmD,eAEnD64B,EAFmD,QAGnD7I,EAHmD,UAInD4lB,EAJmD,SAKnDC,GACI,EACJ,MAAM,cACJC,EADI,iBAEJlX,IACEzsC,EAAAA,EAAAA,OAEG4jD,EAAkBC,IAAuBxhD,EAAAA,EAAAA,IAAiBqhD,IAC1DjhB,EAAWqhB,EAAeC,IAAmBz+C,EAAAA,GAAAA,MAGpDjK,EAAAA,EAAAA,KAAU,KACRsoD,MACC,CAACA,IAEJ,MAAM1S,GAAe3wC,EAAAA,EAAAA,KAAa0jD,IAChCH,EAAoBG,GACpBF,KAEKG,EAAAA,GAAAA,IAAYD,GAAsB,KACrCD,IAEAtX,EAAiB,CAAEiX,SAAUM,SAE9B,CAACF,EAAeC,EAAiBtX,IAE9BnX,GAAU50B,EAAAA,EAAAA,KAAQ,IACf+iD,EAsBX,SAAsBA,GACpB,MAAMS,GAAmBvoD,OAAOwoD,UAAUT,UAAY,MAAMU,cACtDC,EAAgBH,EAAgBI,OAAO,EAAG,GAEhD,OAAOb,EAAU38C,KAAI,QAAC,SAAEk9C,EAAF,WAAYO,EAAZ,KAAwBlhC,GAAzB,QAAqC,CACxD/b,MAAO08C,EACPhyB,MAAOuyB,EACP5N,SAAUtzB,MACRke,MAAMC,IACD0iB,GAAoB1iB,EAAEl6B,QAAU48C,GAAmB1iB,EAAEl6B,QAAU+8C,EAAsB,GAAJ,IA/BrEG,CAAaf,QAAavpD,GAC5C,CAACupD,IAIJ,OAFA1gC,EAAAA,EAAAA,IAAelV,EAAUgwB,EAAS6I,EAAgBc,EAAAA,GAAAA,UAGhD,0BAAKxmC,UAAU,uFACZs0B,EACC,mBAACD,GAAA,EAAD,CACEhS,KAAK,yBACLiS,QAASA,EACTC,SAAUquB,EACVa,cAAehiB,EAAYmhB,OAAmB1pD,EAC9CqN,SAAU0pC,IAGZ,mBAACxrB,GAAA,EAAD,WCrED,SAASi/B,GAAcC,GAC5B,OAAQA,GACN,KAAKnd,EAAAA,GAAAA,mBACL,KAAKA,EAAAA,GAAAA,kCACL,KAAKA,EAAAA,GAAAA,iCACH,MAAO,cACT,KAAKA,EAAAA,GAAAA,gBACL,KAAKA,EAAAA,GAAAA,+BACL,KAAKA,EAAAA,GAAAA,8BACH,MAAO,WACT,KAAKA,EAAAA,GAAAA,oBACL,KAAKA,EAAAA,GAAAA,mCACL,KAAKA,EAAAA,GAAAA,kCACH,MAAO,eACT,KAAKA,EAAAA,GAAAA,kBACL,KAAKA,EAAAA,GAAAA,iCACL,KAAKA,EAAAA,GAAAA,gCACH,MAAO,WACT,KAAKA,EAAAA,GAAAA,kBACL,KAAKA,EAAAA,GAAAA,iCACL,KAAKA,EAAAA,GAAAA,gCACH,MAAO,cCKb,MAuLA,IAAezoC,EAAAA,EAAAA,KAAKC,EAAAA,EAAAA,KAClB,CAACC,EAAD,KAAoC,IAC9B2lD,GADG,OAAED,GAAyB,EAGlC,MACEj/B,OAASC,KAAMC,GACfvJ,UAAU,QAAEimC,IACVrjD,EAEJ,OAAQ0lD,GACN,KAAKnd,EAAAA,GAAAA,mBACHod,EAAkBtC,EAAQjxB,YAC1B,MAEF,KAAKmW,EAAAA,GAAAA,gBACHod,EAAkBtC,EAAQO,SAC1B,MAEF,KAAKrb,EAAAA,GAAAA,oBACHod,EAAkBtC,EAAQS,aAC1B,MAEF,KAAKvb,EAAAA,GAAAA,kBACHod,EAAkBtC,EAAQW,SAC1B,MAEF,KAAKzb,EAAAA,GAAAA,kBACHod,EAAkBtC,EAAQa,WAI9B,OAAKyB,EAIE,IACFA,EACHh/B,UAAAA,GALO,KAhCO5mB,EAvLyC,IAWvD,IAXwD,OAC5D2lD,EAD4D,SAE5D92C,EAF4D,eAG5D64B,EAH4D,QAI5D7I,EAJ4D,WAK5D8kB,EAL4D,aAM5DkC,EAN4D,aAO5DC,EAP4D,aAQ5DC,EAR4D,aAS5DC,EAT4D,UAU5Dp/B,GACI,EACJ,MAAM,qBAAEq/B,IAAyBjlD,EAAAA,EAAAA,MAE3BO,GAAOC,EAAAA,EAAAA,KAEP0kD,GAAoBxkD,EAAAA,EAAAA,KAAQ,KAChC,OAAQikD,GACN,KAAKnd,EAAAA,GAAAA,oBACL,KAAKA,EAAAA,GAAAA,kBACH,MAAO,CACL,CAAElgC,MAAO,YAAa0qB,MAAOzxB,EAAK,iBAClC,CAAE+G,MAAO,WAAY0qB,MAAOzxB,EAAK,iBAGrC,QACE,MAAO,CACL,CAAE+G,MAAO,YAAa0qB,MAAOzxB,EAAK,iBAClC,CAAE+G,MAAO,WAAY0qB,MAAOzxB,EAAK,gBACjC,CAAE+G,MAAO,SAAU0qB,MAAOzxB,EAAK,kBAGpC,CAACA,EAAMokD,IAEJQ,EAAiB,CACrBC,iBAAiC,WAAfzC,EAClB0C,kBAAkC,cAAf1C,GAGf2C,EAAaZ,GAAcC,GAE3BY,GAAa7kD,EAAAA,EAAAA,KAAQ,KACzB,OAAQikD,GACN,KAAKnd,EAAAA,GAAAA,mBACH,OAAOjnC,EAAK,qBACd,KAAKinC,EAAAA,GAAAA,gBACH,OAAOjnC,EAAK,iBACd,KAAKinC,EAAAA,GAAAA,oBACH,OAAOjnC,EAAK,4BACd,KAAKinC,EAAAA,GAAAA,kBACH,OAAOjnC,EAAK,wBACd,KAAKinC,EAAAA,GAAAA,kBACH,OAAOjnC,EAAK,eACd,QACE,UAEH,CAACA,EAAMokD,KAEV5hC,EAAAA,EAAAA,IAAelV,EAAUgwB,EAAS6I,EAAgBie,GAElD,MAAMa,GAAkB9kD,EAAAA,EAAAA,KAAQ,KAC9B,GAAQikD,IACDnd,EAAAA,GAAAA,gBACH,OAAOjnC,EAAK,gBAIf,CAACA,EAAMokD,IAEJc,EAAwB,MAC5B,OAAQd,GACN,KAAKnd,EAAAA,GAAAA,mBACH,OAAOA,EAAAA,GAAAA,kCACT,KAAKA,EAAAA,GAAAA,gBACH,OAAOA,EAAAA,GAAAA,+BACT,KAAKA,EAAAA,GAAAA,oBACH,OAAOA,EAAAA,GAAAA,mCACT,KAAKA,EAAAA,GAAAA,kBACH,OAAOA,EAAAA,GAAAA,iCACT,QACE,OAAOA,EAAAA,GAAAA,mCAXiB,GAexBke,EAAuB,MAC3B,OAAQf,GACN,KAAKnd,EAAAA,GAAAA,mBACH,OAAOA,EAAAA,GAAAA,iCACT,KAAKA,EAAAA,GAAAA,gBACH,OAAOA,EAAAA,GAAAA,8BACT,KAAKA,EAAAA,GAAAA,oBACH,OAAOA,EAAAA,GAAAA,kCACT,KAAKA,EAAAA,GAAAA,kBACH,OAAOA,EAAAA,GAAAA,gCACT,QACE,OAAOA,EAAAA,GAAAA,kCAXgB,GAevBme,GAAejlD,EAAAA,EAAAA,KAAQ,IACtBmkD,GAAiBC,GAAiBl/B,EAIhCk/B,EAAac,QAAO,CAACC,EAAQ74C,IAC3B64C,GAAUjgC,EAAU5Y,GAAU4Y,EAAU5Y,GAAQ84C,aAAgB,IACtEjB,EAAalmD,QALP,GAMR,CAACmmD,EAAcD,EAAcj/B,IAE1BmgC,GAAarlD,EAAAA,EAAAA,KAAQ,IACpBqkD,GAAiBC,GAAiBp/B,EAIhCo/B,EAAaY,QAAO,CAACC,EAAQ74C,IAC3B64C,GAAUjgC,EAAU5Y,GAAU4Y,EAAU5Y,GAAQ84C,aAAgB,IACtEf,EAAapmD,QALP,GAMR,CAACqmD,EAAcD,EAAcn/B,IAE1BogC,GAAyB1lD,EAAAA,EAAAA,KAAagH,IAC1C29C,EAAqB,CACnBK,WAAAA,EACA3C,WAAYr7C,MAEb,CAACg+C,EAAYL,IAEhB,OACE,0BAAKjkD,UAAU,kCACb,0BAAKA,UAAU,iBACb,yBAAIA,UAAU,uBAAuBkC,IAAK3C,EAAK4iB,MAAQ,WAAQjpB,GAAYqrD,GAE3E,mBAAClwB,GAAA,EAAD,CACEhS,KAAO,cAAaiiC,IACpBhwB,QAAS4vB,EACT39C,SAAUy+C,EACVzwB,SAAUotB,IAGX6C,GACC,wBAAGxkD,UAAU,mCAAmCkC,IAAK3C,EAAK4iB,MAAQ,WAAQjpB,GAAYsrD,IAI1F,0BAAKxkD,UAAU,iBACb,yBAAIA,UAAU,4BAA4BkC,IAAK3C,EAAK4iB,MAAQ,WAAQjpB,GAAYqG,EAAK,sBAEpF4kD,EAAeE,mBACd,mBAACjgC,GAAA,EAAD,CACE4pB,QAAM,EACNxtC,KAAK,WAELP,QAAS,KACPylC,EAAe+e,KAGjB,0BAAKzkD,UAAU,iCACZ2kD,EAAe,GAAK,2BAAM3kD,UAAU,OAAOkC,IAAI,QAA3B,IAAoCyiD,GACzD,2BAAM3kD,UAAU,SAAST,EAAK,oBAC9B,2BAAMS,UAAU,YAAYT,EAAK,wBAItC4kD,EAAeC,kBACd,mBAAChgC,GAAA,EAAD,CACE4pB,QAAM,EACNxtC,KAAK,cAELP,QAAS,KACPylC,EAAegf,KAGjB,0BAAK1kD,UAAU,iCACZ+kD,EAAa,GAAK,2BAAM/kD,UAAU,OAAOkC,IAAI,QAA3B,IAA0C6iD,GAC7D,2BAAM/kD,UAAU,SAAST,EAAK,mBAC9B,2BAAMS,UAAU,YAAYT,EAAK,8BCxMhC,SAAS0lD,GAAeC,GACrC,MAAMC,EAAWD,EAAQC,SAAS/B,cAC5BgC,EAASF,EAAQG,YAAYjC,cAC7BkC,EAAgBJ,EAAQI,cAAclC,cAE5C,OAAIgC,EAAO3oD,SAAS,QACX,OAGL2oD,EAAO3oD,SAAS,YAAc2oD,EAAO3oD,SAAS,cACzC,SAEL2oD,EAAO3oD,SAAS,SACX,QAEL2oD,EAAO3oD,SAAS,WACX,UAEL2oD,EAAO3oD,SAAS,UACX,SAEL2oD,EAAO3oD,SAAS,WACX,UAEL2oD,EAAO3oD,SAAS,SACX,QAEL2oD,EAAO3oD,SAAS,kBACX,UAEL0oD,EAAS1oD,SAAS,WACb,UAGP2oD,EAAO3oD,SAAS,WACb2oD,EAAO3oD,SAAS,SAChB0oD,EAAS1oD,SAAS,QAClB0oD,EAAS1oD,SAAS,UAClB6oD,EAAc7oD,SAAS,SAEnB,QAEL0oD,EAAS1oD,SAAS,WAAa6oD,EAAc7oD,SAAS,UACjD,SAEL0oD,EAAS1oD,SAAS,UAAY6oD,EAAc7oD,SAAS,SAChD,QAEL0oD,EAAS1oD,SAAS,YAAc6oD,EAAc7oD,SAAS,WAClD,UAGF,UCgGT,SAAS8oD,GAAYL,GACnB,MAAO,CAACA,EAAQM,OAAQN,EAAQO,SAAShjC,OAAO3nB,SAAS+Q,KAAK,MAGhE,UAAe9N,EAAAA,EAAAA,KAAKC,EAAAA,EAAAA,KACjBC,IACQ,CACL2oC,eAAgB3oC,EAAO2oC,kBAHT5oC,EA7HsC,IAKpD,IALqD,SACzD6O,EADyD,eAEzD64B,EAFyD,QAGzD7I,EAHyD,eAIzD+J,GACI,EACJ,MAAM,uBACJ8e,EADI,2BAEJC,IACE3mD,EAAAA,EAAAA,OAEG4mD,EAAiCC,EAA+BC,IAAkCxhD,EAAAA,GAAAA,KAEnGyhD,GAA8BzmD,EAAAA,EAAAA,KAAaqoB,IAC/C+9B,EAAuB,CAAE/9B,KAAAA,MACxB,CAAC+9B,IAEEM,GAA6B1mD,EAAAA,EAAAA,KAAY,KAC7CwmD,IACAH,MACC,CAACG,EAAgCH,IAE9BM,GAAiBvmD,EAAAA,EAAAA,KAAQ,IACtBknC,EAAe9N,MAAMosB,GAAYA,EAAQgB,aAC/C,CAACtf,IAEEuf,GAAgBzmD,EAAAA,EAAAA,KAAQ,IACrBknC,EAAenkB,QAAQyiC,IAAaA,EAAQgB,aAClD,CAACtf,IAEErnC,GAAOC,EAAAA,EAAAA,KAyEb,OAvEAuiB,EAAAA,EAAAA,IAAelV,EAAUgwB,EAAS6I,EAAgBc,EAAAA,GAAAA,gBAwEhD,0BAAKxmC,UAAU,yDACZimD,IAvEyBf,EAuEce,EArExC,0BAAKjmD,UAAU,iBACb,yBAAIA,UAAU,4BAA4BkC,IAAK3C,EAAK4iB,MAAQ,WAAQjpB,GACjEqG,EAAK,gCAGR,mBAAC6kB,GAAA,EAAD,CAAU4pB,QAAM,EAAC4C,UAAQ,EAACpwC,KAAO,UAASykD,GAAeC,kBACvD,0BAAKllD,UAAU,sBAAsBkC,IAAI,QACvC,2BAAMlC,UAAU,QAAQkC,IAAI,QAAQgjD,EAAQG,aAC5C,2BAAMrlD,UAAU,wBACbklD,EAAQkB,QADX,IACqBlB,EAAQmB,WAD7B,KAC2CnB,EAAQC,SADnD,IAC8DD,EAAQI,eAEtE,2BAAMtlD,UAAU,YAAYklD,EAAQoB,GAApC,MAA2Cf,GAAYL,MAI3D,mBAAC9gC,GAAA,EAAD,CACEpkB,UAAU,2BACVQ,KAAK,OACL0F,QAAM,EACN8nC,QAAM,EACN/tC,QAAS4lD,GAERtmD,EAAK,2BAgDT4mD,IA1CwBI,EA0CaJ,EAxCtC,0BAAKnmD,UAAU,iBACb,yBAAIA,UAAU,4BAA4BkC,IAAK3C,EAAK4iB,MAAQ,WAAQjpB,GACjEqG,EAAK,kBAGPgnD,EAASzgD,KAKhB,SAAuBo/C,GACrB,OACE,mBAAC9gC,GAAA,EAAD,CACErZ,IAAKm6C,EAAQv9B,KACbzhB,QAAM,EACN8nC,QAAM,EACNhS,eAAgB,CAAC,CACfpU,MAAO,YACPpnB,KAAM,OACNgmD,QAAS,KACPT,EAA4Bb,EAAQv9B,SAGxCnnB,KAAO,UAASykD,GAAeC,kBAE/B,0BAAKllD,UAAU,gCAAgCkC,IAAI,QACjD,2BAAMlC,UAAU,SAAQk+B,EAAAA,GAAAA,IAAoB3+B,EAA2B,IAArB2lD,EAAQuB,aAC1D,2BAAMzmD,UAAU,SAASklD,EAAQG,aACjC,2BAAMrlD,UAAU,wBACbklD,EAAQkB,QADX,IACqBlB,EAAQmB,WAD7B,KAC2CnB,EAAQC,SADnD,IAC8DD,EAAQI,eAEtE,2BAAMtlD,UAAU,YAAYklD,EAAQoB,GAApC,IAAyCf,GAAYL,WAUxDiB,GACC,mBAAC/8B,GAAA,EAAD,CACExpB,OAAQgmD,EACR5+C,QAAS8+C,EACT9kD,KAAK,yDACLqoB,aAAa,+BACbC,eAAgB08B,EAChBtf,sBAAoB,KAlD5B,IAA6B6f,EA9BCrB,MC4BhC,IAAennD,EAAAA,EAAAA,KAAKC,EAAAA,EAAAA,KACjBC,IACC,MACEmoB,OACEzB,KAAMuB,GAERq7B,SACE9O,IAAKiU,GALH,YAOJrhC,EAPI,cAQJ/C,GACErkB,EAEJ,MAAO,CACLioB,UAAAA,EACAwgC,WAAAA,EACAthC,WAAYC,MAAAA,OAAF,EAAEA,EAAaC,QACzBsZ,gBAAiB3gC,EAAO0oD,WAAWxnB,aACnC7c,cAAAA,KAlBctkB,EAjE8B,IAQ5C,IAR6C,UACjDkoB,EADiD,WAEjDwgC,EAFiD,WAGjDthC,EAHiD,gBAIjDwZ,EAJiD,cAKjDtc,EALiD,OAMjD1iB,EANiD,QAOjDoH,GACI,EACJ,MAAM,gBACJ+1B,EADI,mBAEJ6pB,EAFI,aAGJC,IACE7nD,EAAAA,EAAAA,MAEEO,GAAOC,EAAAA,EAAAA,MACNijB,EAAQgD,IAAapkB,EAAAA,EAAAA,IAAS,IAE/BmhB,GAAY1pB,EAAAA,EAAAA,IAAyB,OAE3CuB,EAAAA,EAAAA,KAAU,KACRusD,EAAmB,CAAE9mB,MAAOrd,MAC3B,CAACA,EAAQmkC,IAEZ,MAAME,GAAqBpnD,EAAAA,EAAAA,KAAQ,KACjC,MAAMqnD,GAAsBjhC,EAAAA,GAAAA,IAAO,IAC7BV,GAAc,MACdwZ,GAAmB,IACvBnc,QAAQukC,GACDA,IAAc1kC,IAAkBokC,EAAWjqD,SAASuqD,MAG7D,OAAOzgC,EAAAA,EAAAA,IAAkBwgC,EAAqB7gC,EAAWzD,GACtD8d,MAAK,CAAC0mB,EAASC,KACd,MAAMn3B,GAAYkJ,EAAAA,EAAAA,IAAgB/S,EAAU+gC,KAAa,GACnDE,GAAaluB,EAAAA,EAAAA,IAAgB/S,EAAUghC,KAAc,GAE3D,OAAOn3B,EAAUq3B,cAAcD,QAElC,CAACT,EAAYthC,EAAY9C,EAAeG,EAAQmc,EAAiB1Y,IAE9DmhC,GAAmB/nD,EAAAA,EAAAA,KAAailB,IACpC,MAAQ/nB,GAAIwqD,EAAN,WAAiBM,GAAephC,EAAU3B,IAAW,GACtDyiC,GAAcM,IAGnBT,EAAa,CAAEG,UAAAA,EAAWM,WAAAA,IAC1BtgD,OACC,CAAC6/C,EAAc7/C,EAASkf,IAE3B,OACE,mBAAC,GAAD,CACEtmB,OAAQA,EACR2iB,cAAeukC,EACftkC,UAAWA,EACXE,kBAAmBnjB,EAAK,0BACxBkjB,OAAQA,EACRG,eAAgB6C,EAChB9C,SAAUoa,EACVla,mBAAoBwkC,EACpBrgD,QAASA,QC+Cf,IAAejJ,EAAAA,EAAAA,KAAKC,EAAAA,EAAAA,KACjBC,IACC,MACEymB,OACEC,KAAM4iC,GAERnhC,OACEzB,KAAM6iC,GAERjG,SAAS,IACP9O,GAEFljB,aACEC,WAAYF,IAEZrxB,EAEJ,MAAO,CACLspD,WAAAA,EACAC,WAAAA,EACAd,WAAYjU,EACZnjB,cAAAA,KArBctxB,EA/F2C,IAQzD,IAR0D,SAC9D6O,EAD8D,eAE9D64B,EAF8D,QAG9D7I,EAH8D,WAI9D0qB,EAJ8D,WAK9DC,EAL8D,WAM9Dd,EAN8D,cAO9Dp3B,GACI,EACJ,MAAM,eAAEm4B,IAAmBzoD,EAAAA,EAAAA,MAErBO,GAAOC,EAAAA,EAAAA,MACNkoD,EAAsBC,EAAoBC,IAAuBtjD,EAAAA,GAAAA,KAClEujD,GAAqBvoD,EAAAA,EAAAA,KAAa0nD,IACtCS,EAAe,CAAET,UAAAA,MAChB,CAACS,IA2CJ,OAzCA1lC,EAAAA,EAAAA,IAAelV,EAAUgwB,EAAS6I,EAAgBc,EAAAA,GAAAA,qBA0ChD,0BAAKxmC,UAAU,wBACb,0BAAKA,UAAU,oCACb,0BAAKA,UAAU,2BACb,wBAAGA,UAAU,6CAA6CkC,IAAK3C,EAAK4iB,MAAQ,WAAQjpB,GACjFqG,EAAK,sBAIV,0BAAKS,UAAU,2BACZ0mD,MAAAA,GAAAA,EAAY/oD,OACX,0BAAKqC,UAAU,oBACZ0mD,EAAY5gD,KAAI,CAACkhD,EAAW7iC,IAnDzC,SAAuB6iC,EAAmB7iC,EAAWT,GACnD,MAAMokC,GAAYpuC,EAAAA,EAAAA,IAASstC,GACrB5sC,EAAO0tC,EAAYN,EAAWR,QAAa9tD,EAC3CmhB,EAAQytC,OAAoC5uD,EAAxBquD,EAAWP,GAE/BhnD,GAAY+B,EAAAA,EAAAA,GAChB,wDACA+lD,EAAY,UAAY,SAG1B,OACE,mBAAC1jC,GAAA,EAAD,CACErZ,IAAKi8C,EACLhnD,UAAWA,EACXkG,QAAM,EACN8nC,QAAM,EACNhS,eAAgB,CAAC,CACfpU,MAAO,UACPpnB,KAAM,SACNgmD,QAAS,KACPqB,EAAmBb,MAGvB9pD,MAAQ,SA4B6D,EA5BpCinB,GAAKD,EAAAA,SAEtC,mBAAC/J,GAAA,EAAD,CAAQ3f,KAAK,SAAS4f,KAAMA,EAAMC,KAAMA,IACxC,0BAAKra,UAAU,eAAekC,IAAI,QAChC,yBAAIA,IAAI,SAAQoY,EAAAA,GAAAA,IAAYwtC,GAAY7uB,EAAAA,EAAAA,IAAgB7e,IAAQ0jB,EAAAA,EAAAA,GAAav+B,EAAM8a,KAAW,MAC7FD,MAAAA,OAAA,EAAAA,EAAMiW,cACL,0BAAKrwB,UAAU,gBAAgBkC,IAAI,SAAQ0uB,EAAAA,GAAAA,IAA0BtB,EAAelV,EAAKiW,cAE1FjW,IAASA,EAAKiW,aAAejW,EAAKytB,UACjC,0BAAK7nC,UAAU,mBAAmBkC,IAAI,QAAtC,IAA+CkY,EAAKytB,YAmBfkgB,CAAcf,EAAW7iC,MAE5DuiC,IAAeA,EAAW/oD,OAC5B,0BAAKqC,UAAU,aAAakC,IAAI,QAAQ3C,EAAK,cAE7C,mBAACklB,GAAA,EAAD,CAAS1Z,IAAI,cAKnB,mBAAC0/B,GAAA,EAAD,CACE/vB,SAAO,EACPza,QAAS0nD,EACTznD,UAAWX,EAAK,iBAEhB,wBAAGS,UAAU,cAEf,mBAAC,GAAD,CACEJ,OAAQ8nD,EACR1gD,QAAS4gD,S,eCvGjB,MA4CA,IAAe7pD,EAAAA,EAAAA,KAAKC,EAAAA,EAAAA,KAAsBC,IACjC,CACL+pD,eAAeC,EAAAA,EAAAA,IAAoBhqD,EAAQ,SAF3BD,EA5CoC,IAElD,IAFmD,SACvD6O,EADuD,QAC7CgwB,EAD6C,cACpCmrB,EADoC,eACrBtiB,GAC9B,EACJ,MAAMnmC,GAAOC,EAAAA,EAAAA,KAIb,OAFAuiB,EAAAA,EAAAA,IAAelV,EAAUgwB,EAAS6I,EAAgBc,EAAAA,GAAAA,cAGhD,0BAAKxmC,UAAU,yCACb,0BAAKA,UAAU,qCACb,mBAACkoD,GAAA,EAAD,CAAe7T,QAAS2T,EAAextD,KAAK,UAE5C,wBAAGwF,UAAU,iCAAiCkC,IAAI,SAC/CoY,EAAAA,GAAAA,GAAW/a,EAAK,uBAAwB,CAAC,SAI9C,0BAAKS,UAAU,sBACb,mBAACokB,GAAA,EAAD,CACE5jB,KAAK,OAELP,QAAS,IAAMylC,EAAec,EAAAA,GAAAA,6BAE7BjnC,EAAK,mBAER,mBAAC6kB,GAAA,EAAD,CACE5jB,KAAK,eAELP,QAAS,IAAMylC,EAAec,EAAAA,GAAAA,eAE7BjnC,EAAK,oBAER,mBAAC6kB,GAAA,EAAD,CACE5jB,KAAK,QAELP,QAAS,IAAMylC,EAAec,EAAAA,GAAAA,oCAE7BjnC,EAAK,2B,0BClChB,MA6DA,IAAexB,EAAAA,EAAAA,KA3D6B,IAatC,IAbuC,OAC3C4lD,EAD2C,SAE3C92C,EAF2C,eAG3C64B,EAH2C,QAI3C7I,EAJ2C,MAK3CjW,EAL2C,UAM3C6a,EAN2C,iBAO3C0mB,EAP2C,YAQ3C1kC,EAAc,mBAR6B,KAS3CwhB,EAT2C,YAU3C3X,EAV2C,WAW3C86B,EAX2C,SAY3Cr9B,GACI,EACJ,MAAOs9B,EAAiBC,IAAsBjnD,EAAAA,EAAAA,IAAiB,KACxDknD,EAAoBC,IAAyBnnD,EAAAA,EAAAA,KAAS,GAEvDssB,GAAeruB,EAAAA,EAAAA,KAAampD,IAC5BN,GAAoBM,IAAgBN,EACtCG,EArBuB,6BAuBvBv9B,EAAS09B,KAEV,CAAC19B,EAAUo9B,IAERO,GAAmBppD,EAAAA,EAAAA,KAAY,KAC/B8oD,GACFA,IAEFE,EAAmB,MAClB,CAACF,IAEE7oD,GAAOC,EAAAA,EAAAA,KAIb,OAFAuiB,EAAAA,EAAAA,IAAelV,EAAUgwB,EAAS6I,EAAgBie,GAGhD,0BAAK3jD,UAAU,yCACb,0BAAKA,UAAU,qCACb,mBAAC2oD,GAAA,EAAD,CAAgBC,OAAK,EAACC,kBAAmBN,KAG3C,0BAAKvoD,UAAU,sBACb,mBAAC8oD,GAAA,EAAD,CACEliC,MAAOyhC,GAAmBzhC,EAC1Bqe,KAAMA,EACNxhB,YAAaA,EACb6J,YAAaA,GAAe/tB,EAAK,QACjC6oD,WAAYM,EACZjnB,UAAWA,EACXonB,kBAAmBN,EACnBQ,2BAA4BP,EAC5Bz9B,SAAU4C,SCjCpB,IAAe5vB,EAAAA,EAAAA,KAAKC,EAAAA,EAAAA,KAAsBC,IACjC,CACL+pD,eAAeC,EAAAA,EAAAA,IAAoBhqD,EAAQ,SAF3BD,EAxBkC,IAEhD,IAFiD,SACrD6O,EADqD,eAC3C64B,EAD2C,QAC3B7I,EAD2B,cAClBmrB,EADkB,QACHgB,GAC9C,EACJ,MAAMzpD,GAAOC,EAAAA,EAAAA,KAIb,OAFAuiB,EAAAA,EAAAA,IAAelV,EAAUgwB,EAAS6I,EAAgBc,EAAAA,GAAAA,eAGhD,0BAAKxmC,UAAU,yCACb,0BAAKA,UAAU,qCACb,mBAACkoD,GAAA,EAAD,CAAe7T,QAAS2T,EAAextD,KAAK,UAE5C,wBAAGwF,UAAU,iCAAiCkC,IAAI,QAC/C3C,EAAK,+BAIV,0BAAKS,UAAU,sBACb,mBAACH,EAAA,EAAD,CAAQI,QAAS+oD,GAAUzpD,EAAK,uCCHlC0pD,GAAyB9oD,EAAAA,GAA0B,IAAM,IA8H/D,IAAepC,EAAAA,EAAAA,KAAKC,EAAAA,EAAAA,KAAqB,CAACC,EAAD,KAAsB,IAAb,KAAEuC,GAAW,EAC7D,MAAO,CACLwnD,eAAeC,EAAAA,EAAAA,IAAoBhqD,EAAiB,UAATuC,EAAmB,KAAO,SAFrDxC,EA5H0C,IAaxD,IAbyD,cAC7DgqD,EAD6D,KAE7D7sC,EAAO,OAFsD,UAG7DsmB,EAH6D,MAI7D7a,EAJ6D,YAK7DnD,EAL6D,cAM7DylC,EAN6D,WAO7Dd,EAP6D,SAQ7Dr9B,EAR6D,SAS7Dle,EAT6D,eAU7D64B,EAV6D,QAW7D7I,EAX6D,OAY7D8mB,GACI,EAEJ,MAAM7oC,GAAWhiB,EAAAA,EAAAA,IAAyB,OAEnCwN,EAAO6iD,IAAY9nD,EAAAA,EAAAA,IAAiB,KACpC+nD,EAAgBC,EAAoBC,IAAwBhlD,EAAAA,GAAAA,IAAQ,IAE3EjK,EAAAA,EAAAA,KAAU,KACH2N,EAAAA,IACHpN,YAAW,KACTkgB,EAAS7hB,QAASw3B,UACjBw4B,MAEJ,IAEH,MAAMM,GAAoBjqD,EAAAA,EAAAA,KAAa0C,IACjC4kB,GAASwhC,GACXA,IAGFe,EAASnnD,EAAEmI,OAAO7D,SACjB,CAAC8hD,EAAYxhC,IAYV4iC,GAAalqD,EAAAA,EAAAA,KAAY,KAC7ByrB,MACC,CAACA,IAEE0+B,GAAoBnqD,EAAAA,EAAAA,KAAY,KACpCgqD,IACAv+B,MACC,CAACA,EAAUu+B,IAER/pD,GAAOC,EAAAA,EAAAA,KAIb,OAFAuiB,EAAAA,EAAAA,IAAelV,EAAUgwB,EAAS6I,EAAgBie,GAGhD,0BAAK3jD,UAAU,yCACb,0BAAKA,UAAU,qCACb,mBAACkoD,GAAA,EAAD,CAAe7T,QAAS2T,EAAextD,KAAK,WAG9C,0BAAKwF,UAAU,sBACb,2BAAMqlC,OAAO,GAAGta,SA9BA/oB,IACpBA,EAAEgJ,iBAEG8P,EAAS7hB,SAId8xB,EAASzkB,KAwBH,mBAACid,GAAA,EAAD,CACE1d,IAAKiV,EACLxU,MAAOA,EACPooB,UAAWvT,EACX6V,MAAOvN,EACPmD,MAAOA,EACPrgB,SAAUgjD,IAGXjjD,EACC,mBAACzG,EAAA,EAAD,CAAQsb,KAAK,SAASsmB,UAAWA,EAAWv7B,QAAM,GAAE3G,EAAK,aAEzD,mBAACM,EAAA,EAAD,CACEwoB,QAAM,EACNoZ,UAAWA,EACXv7B,QAAM,EACNjG,QAASipD,EAAgBG,EAAqBG,GAE7CjqD,EAAK,mBAIX2pD,GACC,mBAACvlC,GAAA,EAAD,CACE3jB,UAAU,SACVJ,OAAQwpD,EACRxhC,MAAOroB,EAAK,wBACZyH,QAASsiD,IAERhvC,EAAAA,GAAAA,GAAW/a,EAAK,4BAA6B,CAAC,KAAM,oBACrD,0BAAKS,UAAU,kBACb,mBAACH,EAAA,EAAD,CACEE,MAAM,SACNmG,QAAM,EACNmiB,QAAM,EACNroB,UAAU,wBACVC,QAASwpD,GAERlqD,EAAK,kBAER,mBAACM,EAAA,EAAD,CACEE,MAAM,UACNmG,QAAM,EACNmiB,QAAM,EACNroB,UAAU,wBACVC,QAASqpD,GAER/pD,EAAK,mBCxGtB,IAAexB,EAAAA,EAAAA,KAAKC,EAAAA,EAAAA,KAAsBC,IACjC,CACL+pD,eAAeC,EAAAA,EAAAA,IAAoBhqD,EAAQ,SAF3BD,EA5B4C,IAE1D,IAF2D,SAC/D6O,EAD+D,QACrDgwB,EADqD,cAC5CmrB,EAD4C,eAC7BtiB,GAC9B,EACJ,MAAMnmC,GAAOC,EAAAA,EAAAA,KAEP43B,GAAc93B,EAAAA,EAAAA,KAAY,KAC9BomC,EAAec,EAAAA,GAAAA,WACd,CAACd,IAIJ,OAFA3jB,EAAAA,EAAAA,IAAelV,EAAUgwB,EAAS6I,EAAgBc,EAAAA,GAAAA,sBAGhD,0BAAKxmC,UAAU,yCACb,0BAAKA,UAAU,qCACb,mBAACkoD,GAAA,EAAD,CAAe7T,QAAS2T,EAAextD,KAAK,UAE5C,wBAAGwF,UAAU,iCAAiCkC,IAAI,QAC/C3C,EAAK,wCAIV,0BAAKS,UAAU,sBACb,mBAACH,EAAA,EAAD,CAAQI,QAASm3B,GAAc73B,EAAK,oDCZtC0pD,GAAyB9oD,EAAAA,GAA0B,IAAM,IAmE/D,IAAepC,EAAAA,EAAAA,KAAKC,EAAAA,EAAAA,KAAsBC,IACjC,CACL+pD,eAAeC,EAAAA,EAAAA,IAAoBhqD,EAAQ,MAC3CyrD,WAAYzrD,EAAO0rD,cAAcC,0BAHjB5rD,EAjEsC,IAWpD,IAXqD,cACzDgqD,EADyD,WAEzD0B,EAFyD,UAGzDjoB,EAHyD,MAIzD7a,EAJyD,WAKzDwhC,EALyD,SAMzDr9B,EANyD,SAOzDle,EAPyD,eAQzD64B,EARyD,QASzD7I,EATyD,OAUzD8mB,GACI,EAEJ,MAAM7oC,GAAWhiB,EAAAA,EAAAA,IAAyB,OAEnCwN,EAAO6iD,IAAY9nD,EAAAA,EAAAA,IAAiB,KAE3ChH,EAAAA,EAAAA,KAAU,KACH2N,EAAAA,IACHpN,YAAW,KACTkgB,EAAS7hB,QAASw3B,UACjBw4B,MAEJ,IAEH,MAAM1pD,GAAOC,EAAAA,EAAAA,MAEbuiB,EAAAA,EAAAA,IAAelV,EAAUgwB,EAAS6I,EAAgBie,GAElD,MAAM4F,GAAoBjqD,EAAAA,EAAAA,KAAa0C,IACjC4kB,GAASwhC,GACXA,IAGF,MAAMnR,EAAWj1C,EAAEmI,OAAO7D,MAAMy9B,MAAM,EAAG2lB,GAErCzS,EAASt5C,SAAW+rD,GACtB3+B,EAASksB,GAGXkS,EAASlS,GACTj1C,EAAEmI,OAAO7D,MAAQ2wC,IAChB,CAACmR,EAAYsB,EAAY9iC,EAAOmE,IAEnC,OACE,0BAAK/qB,UAAU,yCACb,0BAAKA,UAAU,qCACb,mBAACkoD,GAAA,EAAD,CAAe7T,QAAS2T,EAAextD,KAAK,WAG9C,0BAAKwF,UAAU,sBACb,mBAACujB,GAAA,EAAD,CACEjd,MAAOA,EACPT,IAAKiV,EACL4T,UAAU,UACVsC,MAAOzxB,EAAK,iBACZqnB,MAAOA,EACPrgB,SAAUgjD,IAEX9nB,GAAa,mBAAChd,GAAA,EAAD,YCkVtB,IAAe1mB,EAAAA,EAAAA,KAAKC,EAAAA,EAAAA,KACjBC,IAAD,IAA8BA,EAAO0rD,iBADnB3rD,EAlZ6B,IAY3C,IAZ4C,cAChDunC,EADgD,YAEhDwN,EAFgD,MAGhD3N,EAHgD,KAIhDH,EAJgD,UAKhDxD,EALgD,MAMhD7a,EANgD,uBAOhDgjC,EAPgD,SAQhDpb,EARgD,SAShD3hC,EATgD,eAUhD64B,EAVgD,QAWhD7I,GACI,EACJ,MAAM,eACJgtB,EADI,cAEJC,EAFI,gBAGJC,EAHI,oBAIJC,EAJI,sBAKJC,EALI,cAMJC,IACElrD,EAAAA,EAAAA,OAEJ3E,EAAAA,EAAAA,KAAU,KACJuvD,IACErkB,IAAkBiB,EAAAA,GAAAA,sBACpBd,EAAec,EAAAA,GAAAA,2BACNjB,IAAkBiB,EAAAA,GAAAA,oBAC3Bd,EAAec,EAAAA,GAAAA,2BAGlB,CAACjB,EAAeG,EAAgBkkB,IAEnC,MAAMO,GAAoB7qD,EAAAA,EAAAA,KAAY,KACpCkvC,EAAS,CAAErzB,KAAM,UACjBuqB,EAAec,EAAAA,GAAAA,oBACd,CAACgI,EAAU9I,IAER0kB,GAAoB9qD,EAAAA,EAAAA,KAAagH,IACrCkoC,EAAS,CAAErzB,KAAM,cAAemqB,QAASh/B,IACzCo/B,EAAec,EAAAA,GAAAA,2BACd,CAACgI,EAAU9I,IAER2kB,GAA2B/qD,EAAAA,EAAAA,KAAY,KAC3ComC,EAAec,EAAAA,GAAAA,wBACd,CAACd,IAEE4kB,GAAwBhrD,EAAAA,EAAAA,KAAagH,IACzCkoC,EAAS,CAAErzB,KAAM,UAAWmqB,QAASh/B,IACrCo/B,EAAec,EAAAA,GAAAA,yBACd,CAACgI,EAAU9I,IAER6kB,GAAyBjrD,EAAAA,EAAAA,KAAagH,IAC1CkoC,EAAS,CAAErzB,KAAM,WAAYmqB,QAASh/B,IACtCujD,EAAe,IACVzkB,EACHF,MAAO5+B,EACPkkD,UAAW,KACT9kB,EAAec,EAAAA,GAAAA,2BAGlB,CAACgI,EAAU9I,EAAgBN,EAAOykB,IAE/BY,GAA8BnrD,EAAAA,EAAAA,KAAagH,IAC/CkoC,EAAS,CAAErzB,KAAM,qBAAsBmqB,QAASh/B,IAChDwjD,EAAc,CACZ/kB,gBAAiBz+B,EACjBkkD,UAAW,KACT9kB,EAAec,EAAAA,GAAAA,6BAGlB,CAACsjB,EAAetb,EAAU9I,IAEvBglB,GAA0BprD,EAAAA,EAAAA,KAAagH,IAC3CkoC,EAAS,CAAErzB,KAAM,cAAemqB,QAASh/B,IACzCo/B,EAAec,EAAAA,GAAAA,8BACd,CAACgI,EAAU9I,IAERilB,GAA8BrrD,EAAAA,EAAAA,KAAY,KAC9ComC,EAAec,EAAAA,GAAAA,2BACd,CAACd,IAEEklB,GAA2BtrD,EAAAA,EAAAA,KAAagH,IAC5CkoC,EAAS,CAAErzB,KAAM,UAAWmqB,QAASh/B,IACrCujD,EAAe,IACVzkB,EACHH,KAAM3+B,EACNkkD,UAAW,KACT9kB,EAAec,EAAAA,GAAAA,2BAGlB,CAACgI,EAAU9I,EAAgBN,EAAOykB,IAE/BgB,GAAgBvrD,EAAAA,EAAAA,KAAagH,IACjC4jD,EAAc,CACZnlB,gBAAiBz+B,EACjBkkD,UAAW,KACT9kB,EAAec,EAAAA,GAAAA,cAGlB,CAAC0jB,EAAexkB,IAEbolB,GAAqCxrD,EAAAA,EAAAA,KAAagH,IACtDkoC,EAAS,CAAErzB,KAAM,qBAAsBmqB,QAASh/B,IAChDwjD,EAAc,CACZ/kB,gBAAiBz+B,EACjBkkD,UAAW,KACT9kB,EAAec,EAAAA,GAAAA,yBAGlB,CAACsjB,EAAetb,EAAU9I,IAEvBqlB,GAAsBzrD,EAAAA,EAAAA,KAAagH,IACvCkoC,EAAS,CAAErzB,KAAM,WAAYmqB,QAASh/B,IACtC0jD,EAAoB,IACf5kB,EACHF,MAAO5+B,EACPkkD,UAAW,KACT9kB,EAAec,EAAAA,GAAAA,2BAGlB,CAACgI,EAAU9I,EAAgBN,EAAO4kB,IAE/BgB,GAAkB1rD,EAAAA,EAAAA,KAAakuB,IACnCy8B,EAAsB,CAAEz8B,KAAAA,MACvB,CAACy8B,IAEE1qD,GAAOC,EAAAA,EAAAA,KAEb,OAAQ+lC,GACN,KAAKiB,EAAAA,GAAAA,cACH,OACE,mBAAC,GAAD,CACEwiB,QAASmB,EACTzkB,eAAgBA,EAChB74B,SAAUA,GAAY,CACpB25B,EAAAA,GAAAA,iBACAA,EAAAA,GAAAA,wBACAA,EAAAA,GAAAA,qBACAA,EAAAA,GAAAA,sBACAA,EAAAA,GAAAA,0BACAA,EAAAA,GAAAA,sBACA/pC,SAASs2C,GACXlW,QAASA,IAIf,KAAK2J,EAAAA,GAAAA,iBACH,OACE,mBAAC,GAAD,CACEmd,OAAQpe,EACR9hB,YAAalkB,EAAK,uBAClB+tB,YAAa/tB,EAAK,YAClBwrB,SAAUq/B,EACV1kB,eAAgBA,EAChB74B,SAAUA,GAAY,CACpB25B,EAAAA,GAAAA,wBACAA,EAAAA,GAAAA,qBACAA,EAAAA,GAAAA,sBACAA,EAAAA,GAAAA,0BACAA,EAAAA,GAAAA,sBACA/pC,SAASs2C,GACXlW,QAASA,IAIf,KAAK2J,EAAAA,GAAAA,wBACH,OACE,mBAAC,GAAD,CACEmd,OAAQpe,EACR4iB,iBAAkB/iB,EAAMJ,SACxBvhB,YAAalkB,EAAK,yBAClB+tB,YAAa/tB,EAAK,YAClBwrB,SAAUs/B,EACV3kB,eAAgBA,EAChB74B,SAAUA,GAAY,CACpB25B,EAAAA,GAAAA,qBACAA,EAAAA,GAAAA,sBACAA,EAAAA,GAAAA,0BACAA,EAAAA,GAAAA,sBACA/pC,SAASs2C,GACXlW,QAASA,IAIf,KAAK2J,EAAAA,GAAAA,qBACH,OACE,mBAAC,GAAD,CACEhmC,KAAK,OACLijB,YAAalkB,EAAK,2BAClBwrB,SAAUu/B,EACV3G,OAAQpe,EACRG,eAAgBA,EAChB74B,SAAUA,GAAY,CACpB25B,EAAAA,GAAAA,sBACAA,EAAAA,GAAAA,0BACAA,EAAAA,GAAAA,sBACA/pC,SAASs2C,GACXlW,QAASA,IAIf,KAAK2J,EAAAA,GAAAA,sBACH,OACE,mBAAC,GAAD,CACEhmC,KAAK,QACL2a,KAAK,QACLsmB,UAAWA,EACX7a,MAAOA,EACPwhC,WAAY2B,EACZtmC,YAAalkB,EAAK,sBAClB2pD,eAAa,EACbn+B,SAAUw/B,EACV5G,OAAQpe,EACRG,eAAgBA,EAChB74B,SAAUA,GAAY,CACpB25B,EAAAA,GAAAA,0BACAA,EAAAA,GAAAA,sBACA/pC,SAASs2C,GACXlW,QAASA,IAIf,KAAK2J,EAAAA,GAAAA,0BACH,OACE,mBAAC,GAAD,CACE/E,UAAWA,EACX7a,MAAOA,EACPwhC,WAAY2B,EACZh/B,SAAUigC,EACVrH,OAAQpe,EACRG,eAAgBA,EAChB74B,SAAUA,GAAYkmC,IAAgBvM,EAAAA,GAAAA,qBACtC3J,QAASA,IAIf,KAAK2J,EAAAA,GAAAA,qBACH,OACE,mBAAC,GAAD,CACEd,eAAgBA,EAChB74B,SAAUA,EACVgwB,QAASA,IAIf,KAAK2J,EAAAA,GAAAA,aACH,OACE,mBAAC,GAAD,CACEd,eAAgBA,EAChB74B,SAAUA,GAAY,CACpB25B,EAAAA,GAAAA,2BACAA,EAAAA,GAAAA,uBACAA,EAAAA,GAAAA,2BACAA,EAAAA,GAAAA,wBACAA,EAAAA,GAAAA,aACAA,EAAAA,GAAAA,kCACAA,EAAAA,GAAAA,mBACAA,EAAAA,GAAAA,uBACAA,EAAAA,GAAAA,sBACA/pC,SAASs2C,GACXlW,QAASA,IAIf,KAAK2J,EAAAA,GAAAA,2BACH,OACE,mBAAC,GAAD,CACEmd,OAAQpe,EACR9D,UAAWA,EACX7a,MAAOA,EACPwhC,WAAY2B,EACZ9kB,KAAMA,EACNla,SAAU0/B,EACV/kB,eAAgBA,EAChB74B,SAAUA,GAAY,CACpB25B,EAAAA,GAAAA,uBACAA,EAAAA,GAAAA,2BACAA,EAAAA,GAAAA,wBACAA,EAAAA,GAAAA,sBACA/pC,SAASs2C,GACXlW,QAASA,IAIf,KAAK2J,EAAAA,GAAAA,uBACH,OACE,mBAAC,GAAD,CACEmd,OAAQpe,EACR9hB,YAAalkB,EAAK,+BAClBwrB,SAAU2/B,EACVhlB,eAAgBA,EAChB74B,SAAUA,GAAY,CACpB25B,EAAAA,GAAAA,2BACAA,EAAAA,GAAAA,wBACAA,EAAAA,GAAAA,sBACA/pC,SAASs2C,GACXlW,QAASA,IAIf,KAAK2J,EAAAA,GAAAA,2BACH,OACE,mBAAC,GAAD,CACEmd,OAAQpe,EACR4iB,iBAAkB/iB,EAAMJ,SACxBvhB,YAAalkB,EAAK,yBAClBwrB,SAAU4/B,EACVjlB,eAAgBA,EAChB74B,SAAUA,GAAY,CACpB25B,EAAAA,GAAAA,wBACAA,EAAAA,GAAAA,sBACA/pC,SAASs2C,GACXlW,QAASA,IAIf,KAAK2J,EAAAA,GAAAA,wBACH,OACE,mBAAC,GAAD,CACE/E,UAAWA,EACX7a,MAAOA,EACPwhC,WAAY2B,EACZvpD,KAAK,OACLijB,YAAalkB,EAAK,2BAClBwrB,SAAU6/B,EACVllB,eAAgBA,EAChB74B,SAAUA,GAAYkmC,IAAgBvM,EAAAA,GAAAA,qBACtC3J,QAASA,EACT8mB,OAAQpe,IAId,KAAKiB,EAAAA,GAAAA,aACH,OACE,mBAAC,GAAD,CACE/E,UAAWA,EACX7a,MAAOA,EACPwhC,WAAY2B,EACZ9kB,KAAMA,EACNla,SAAU8/B,EACVnlB,eAAgBA,EAChB74B,SAAUA,EACVgwB,QAASA,EACT8mB,OAAQpe,IAId,KAAKiB,EAAAA,GAAAA,kCACH,OACE,mBAAC,GAAD,CACEmd,OAAQpe,EACR9D,UAAWA,EACX7a,MAAOA,EACPwhC,WAAY2B,EACZ9kB,KAAMA,EACNla,SAAU+/B,EACVplB,eAAgBA,EAChB74B,SAAUA,GAAY,CACpB25B,EAAAA,GAAAA,mBACAA,EAAAA,GAAAA,uBACAA,EAAAA,GAAAA,sBACA/pC,SAASs2C,GACXlW,QAASA,IAIf,KAAK2J,EAAAA,GAAAA,mBACH,OACE,mBAAC,GAAD,CACEmd,OAAQpe,EACR/kC,KAAK,QACL2a,KAAK,QACLsI,YAAalkB,EAAK,sBAClBwrB,SAAUggC,EACVrlB,eAAgBA,EAChB74B,SAAUA,GAAY,CACpB25B,EAAAA,GAAAA,uBACAA,EAAAA,GAAAA,sBACA/pC,SAASs2C,GACXlW,QAASA,IAIf,KAAK2J,EAAAA,GAAAA,uBACH,OACE,mBAAC,GAAD,CACEmd,OAAQpe,EACR9D,UAAWA,EACX7a,MAAOA,EACPwhC,WAAY2B,EACZh/B,SAAUigC,EACVtlB,eAAgBA,EAChB74B,SAAUA,GAAYkmC,IAAgBvM,EAAAA,GAAAA,qBACtC3J,QAASA,IAIf,QACE,Y,eCrTN,SAASouB,GAA0BhtD,EAAqB0lD,GACtD,MAAM,QAAErC,GAAYrjD,EAAOod,SAC3B,OAAQsoC,GACN,KAAKnd,EAAAA,GAAAA,kCACL,KAAKA,EAAAA,GAAAA,iCACH,OAAO8a,EAAQjxB,YACjB,KAAKmW,EAAAA,GAAAA,+BACL,KAAKA,EAAAA,GAAAA,8BACH,OAAO8a,EAAQO,SACjB,KAAKrb,EAAAA,GAAAA,mCACL,KAAKA,EAAAA,GAAAA,kCACH,OAAO8a,EAAQS,aACjB,KAAKvb,EAAAA,GAAAA,iCACL,KAAKA,EAAAA,GAAAA,gCACH,OAAO8a,EAAQW,SACjB,KAAKzb,EAAAA,GAAAA,gCACL,KAAKA,EAAAA,GAAAA,iCACH,OAAO8a,EAAQa,YAMrB,UAAepkD,EAAAA,EAAAA,KAAKC,EAAAA,EAAAA,KAClB,CAACC,EAAD,KAAoC,IAA3B,OAAE0lD,GAAyB,EAClC,MAAO,CACLrhC,cAAerkB,EAAOqkB,cACtBjH,SAAU4vC,GAA0BhtD,EAAQ0lD,MAJ9B3lD,EA9GsD,IAQpE,IARqE,YACzEktD,EADyE,OAEzEvH,EAFyE,SAGzE92C,EAHyE,eAIzE64B,EAJyE,QAKzE7I,EALyE,cAMzEva,EANyE,SAOzEjH,GACI,EACJ,MAAM,mBAAE8vC,IAAuBnsD,EAAAA,EAAAA,MAEzBO,GAAOC,EAAAA,EAAAA,KAEP4rD,GAAqB1rD,EAAAA,EAAAA,KAAQ,IAC5B2b,EAID6vC,EACK,IAAI7vC,EAASwoC,gBAAiBxoC,EAASyoC,cAEvC,IAAIzoC,EAAS0oC,gBAAiB1oC,EAAS2oC,cANvC,IAQR,CAACkH,EAAa7vC,KACVkiB,EAAa8tB,IAAkBhqD,EAAAA,EAAAA,IAAiB,KAChDiqD,EAAeC,IAAoBlqD,EAAAA,EAAAA,KAAkB,IACrDmqD,EAAuBC,IAA4BpqD,EAAAA,EAAAA,IAAmB+pD,GAEvEnZ,GAAsBC,EAAAA,GAAAA,IAA8BC,EAAAA,IACpDC,GAA2BF,EAAAA,GAAAA,IAA8BG,EAAAA,IACzDC,GAAe5yC,EAAAA,EAAAA,KAAQ,KAE3B,MAAMklB,GAAYuB,EAAAA,EAAAA,MAAYzB,MAAMC,KAE9BoB,GAAUD,EAAAA,GAAAA,IAAO,IAAImsB,GAAuB,MAAOG,GAA4B,KAClF3vB,QAAQzW,IACP,MAAMqO,EAAOuK,EAAU5Y,GAEvB,OAAOqO,IAAQX,EAAAA,EAAAA,IAASW,EAAK7d,KAAO6d,EAAK7d,KAAO8lB,KAGpD,OAAOwD,EAAAA,GAAAA,IAAO,IACTslC,MACA9kC,EAAAA,EAAAA,IAAkB/mB,EAAMwmB,EAASnB,EAAW2Y,OAEhD,CAAC0U,EAAqBG,EAA0BgZ,EAAoB7rD,EAAMg+B,EAAajb,IAEpFopC,GAAiCpsD,EAAAA,EAAAA,KAAagH,IAClDmlD,EAAyBnlD,GACzBilD,GAAiB,KAChB,IAEG59B,GAAeruB,EAAAA,EAAAA,KAAY,KAC/B6rD,EAAmB,CACjB7G,WAAYZ,GAAcC,GAC1BuH,YAAapwD,QAAQowD,GACrBS,YAAaH,IAGf9lB,EAAec,EAAAA,GAAAA,WACd,CAAC0kB,EAAaM,EAAuB9lB,EAAgBie,EAAQwH,IAIhE,OAFAppC,EAAAA,EAAAA,IAAelV,EAAUgwB,EAAS6I,EAAgBie,GAGhD,0BAAK3jD,UAAU,wBACb,mBAAC4rD,GAAA,EAAD,CACEC,QAASvZ,GAAgB,GACzBvB,YAAaya,EACbxa,YAAazT,EACb7a,kBAAiCnjB,EAAd2rD,EAAmB,6BAAqC,6BAC3EY,cAAc,0BACd7a,oBAAqBya,EACrB9oC,eAAgByoC,IAGlB,mBAAC5gB,GAAA,EAAD,CACE/vB,QAAS4wC,EACTrrD,QAAS0tB,EACTztB,UAAyBX,EAAd2rD,EAAmB,uBAA+B,wBAE7D,wBAAGlrD,UAAU,2BC1DrB,IAAejC,EAAAA,EAAAA,KAAKC,EAAAA,EAAAA,KACjBC,IACC,MAAM,mBAAE8tD,EAAF,UAAsB/W,GAAc/2C,EAE1C,MAAO,CACL8tD,mBAAAA,EACAC,iBAAkBhX,MAAAA,OAAF,EAAEA,EAAWD,mBANf/2C,EAjCqC,IAMnD,IANoD,SACxD6O,EADwD,QAExDgwB,EAFwD,eAGxD6I,EAHwD,mBAIxDqmB,EAJwD,iBAKxDC,GACI,EACJ,MAAM,mBAAEC,IAAuBjtD,EAAAA,EAAAA,OAC/B+iB,EAAAA,EAAAA,IAAelV,EAAUgwB,EAAS6I,EAAgBc,EAAAA,GAAAA,SAElD,MAAMlS,GAAUy3B,MAAAA,OAAA,EAAAA,EAAoBtpC,QAAQ+V,IAAOA,EAAE0zB,aAAYpmD,KAAK0yB,IAC7D,CACLxH,MAAO,sCAAE,mBAAC+H,GAAA,EAAD,CAAqBN,SAAUD,EAAEC,WAAaD,EAAE5Q,OACzDthB,MAAOkyB,EAAEC,eAEP,GAEAwX,GAAe3wC,EAAAA,EAAAA,KAAam5B,IAChCwzB,EAAmB,CAAExzB,SAAAA,MACpB,CAACwzB,IAEJ,OACE,0BAAKjsD,UAAU,wEACb,mBAACq0B,GAAA,EAAD,CACEhS,KAAK,0BACLiS,QAASA,EACTC,SAAUy3B,EACVzlD,SAAU0pC,SCpBZjM,GAA0BhnC,OAAOu8B,KAAKiN,EAAAA,IAAiB7oC,OAAS,EAGhEwuD,GAAiB,CACrB3lB,EAAAA,GAAAA,cACAA,EAAAA,GAAAA,iBACAA,EAAAA,GAAAA,wBACAA,EAAAA,GAAAA,qBACAA,EAAAA,GAAAA,sBACAA,EAAAA,GAAAA,0BACAA,EAAAA,GAAAA,qBACAA,EAAAA,GAAAA,aACAA,EAAAA,GAAAA,2BACAA,EAAAA,GAAAA,uBACAA,EAAAA,GAAAA,2BACAA,EAAAA,GAAAA,wBACAA,EAAAA,GAAAA,aACAA,EAAAA,GAAAA,kCACAA,EAAAA,GAAAA,mBACAA,EAAAA,GAAAA,wBAGI4lB,GAAkB,CACtB5lB,EAAAA,GAAAA,QACAA,EAAAA,GAAAA,oBACAA,EAAAA,GAAAA,kBACAA,EAAAA,GAAAA,8BACAA,EAAAA,GAAAA,qBACAA,EAAAA,GAAAA,iCACAA,EAAAA,GAAAA,qBACAA,EAAAA,GAAAA,kCAGI6lB,GAAkB,CACtB7lB,EAAAA,GAAAA,oBACAA,EAAAA,GAAAA,gBAGI8lB,GAA+B,CACnC9lB,EAAAA,GAAAA,kCACAA,EAAAA,GAAAA,kCAGI+lB,GAAkC,CACtC/lB,EAAAA,GAAAA,+BACAA,EAAAA,GAAAA,+BAGIgmB,GAAgC,CACpChmB,EAAAA,GAAAA,mCACAA,EAAAA,GAAAA,mCAGIimB,GAA6B,CACjCjmB,EAAAA,GAAAA,iCACAA,EAAAA,GAAAA,iCAGIkmB,GAA8B,CAClClmB,EAAAA,GAAAA,iCACAA,EAAAA,GAAAA,iCAsRF,IAAezoC,EAAAA,EAAAA,KAzQgB,IAQzB,IAR0B,SAC9B8O,EAD8B,cAE9B04B,EAF8B,aAG9BonB,EAH8B,gBAI9BC,EAJ8B,eAK9BlnB,EAL8B,QAM9B7I,EAN8B,qBAO9BgwB,GACI,EACJ,MAAOC,EAAYC,ItCpDZC,EAAAA,GAAAA,GAAW7nB,GAAcL,IsCsD1BkO,GAAc1zC,EAAAA,EAAAA,KAAY,KAE5BimC,IAAkBiB,EAAAA,GAAAA,qBACfjB,IAAkBiB,EAAAA,GAAAA,mBAClBjB,IAAkBiB,EAAAA,GAAAA,+BAErB5rC,YAAW,KACTgyD,EAAgB,CAAEzxC,KAAM,YA1FJ,KA+FtBoqB,IAAkBiB,EAAAA,GAAAA,sBACfjB,IAAkBiB,EAAAA,GAAAA,qBAUvB3J,IAR4B,WAAtB8vB,EAAa3c,KACftK,EAAec,EAAAA,GAAAA,qBAEfd,EAAec,EAAAA,GAAAA,qBAMlB,CACDmmB,EAAa3c,KAAM4c,EACnBrnB,EAAe1I,EAAS6I,IAGpBunB,GAAmB3tD,EAAAA,EAAAA,KAAY,KACnCstD,EAAgB,CAAEzxC,KAAM,gBACxB63B,MACC,CAAC4Z,EAAiB5Z,IAmMrB,SAASka,EAAqBC,EAAyBC,EAAiBC,GACtE,OACE,sCACE,mBAAC,GAAD,CACE9nB,cAAeA,EACf1I,QAASmW,EACTvN,aAAcwnB,EACdvnB,eAAgBA,EAChBF,eAAgBmnB,EAAand,WAzMrC,SAAqC2d,EAAyBxJ,GAC5D,MAAM2J,EAA+C,CACnD,CAAC9mB,EAAAA,GAAAA,oBAAqC8lB,GAA6B7vD,SAASknD,GAC5E,CAACnd,EAAAA,GAAAA,iBAAkC+lB,GAAgC9vD,SAASknD,GAC5E,CAACnd,EAAAA,GAAAA,qBAAsCgmB,GAA8B/vD,SAASknD,GAC9E,CAACnd,EAAAA,GAAAA,mBAAoCimB,GAA2BhwD,SAASknD,GACzE,CAACnd,EAAAA,GAAAA,mBAAoCkmB,GAA4BjwD,SAASknD,IAGtE4J,EAAgBpB,GAAe1vD,SAASknD,GACxC6J,EAAkBpB,GAAgB3vD,SAASknD,GAC3C8J,EAAkBpB,GAAgB5vD,SAASknD,IAC5C4J,GACAvwD,OAAOu8B,KAAK+zB,GAAqB7wD,SAASknD,EAAOzqC,aACjDlc,OAAO0wD,OAAOJ,GAAqBx0B,MAAM/tB,IAAgB,IAARA,IAEtD,OAAQw6B,GACN,KAAKiB,EAAAA,GAAAA,KACH,OACE,mBAAC,GAAD,CAAcd,eAAgBA,EAAgB74B,SAAUA,EAAUgwB,QAASmW,IAE/E,KAAKxM,EAAAA,GAAAA,YACH,OACE,mBAAC,GAAD,CACEd,eAAgBA,EAChB74B,SAAUA,GAAYsgD,EACtBtwB,QAASmW,IAGf,KAAKxM,EAAAA,GAAAA,QACH,OACE,mBAAC,GAAD,CACEd,eAAgBA,EAChB74B,SAAUsgD,GACPxJ,IAAWnd,EAAAA,GAAAA,4BACXmd,IAAWnd,EAAAA,GAAAA,uBACXmd,IAAWnd,EAAAA,GAAAA,eACXinB,GAAmBD,EACtB3wB,QAASmW,IAGf,KAAKxM,EAAAA,GAAAA,cACH,OACE,mBAAC,GAAD,CAAuBd,eAAgBA,EAAgB74B,SAAUsgD,EAAgBtwB,QAASmW,IAE9F,KAAKxM,EAAAA,GAAAA,cACH,OACE,mBAAC,GAAD,CAAuBd,eAAgBA,EAAgB74B,SAAUsgD,EAAgBtwB,QAASmW,IAE9F,KAAKxM,EAAAA,GAAAA,YACH,OACE,mBAAC,GAAD,CAAqBd,eAAgBA,EAAgB74B,SAAUsgD,EAAgBtwB,QAASmW,IAE5F,KAAKxM,EAAAA,GAAAA,QACH,OACE,mBAAC,GAAD,CACEd,eAAgBA,EAChB74B,SAAUsgD,GAAkBM,GAAmBF,EAC/C1wB,QAASmW,IAGf,KAAKxM,EAAAA,GAAAA,SACH,OACE,mBAAC,GAAD,CAAkBd,eAAgBA,EAAgB74B,SAAUsgD,EAAgBtwB,QAASmW,IAEzF,KAAKxM,EAAAA,GAAAA,sBACH,OACE,mBAAC,GAAD,CACEd,eAAgBA,EAChB74B,SAAUsgD,GAAkBxJ,IAAWnd,EAAAA,GAAAA,2BACvC3J,QAASmW,IAGf,KAAKxM,EAAAA,GAAAA,2BACH,OACE,mBAACmnB,GAAD,CACEjoB,eAAgBA,EAChB74B,SAAUsgD,EACVtwB,QAASmW,IAGf,KAAKxM,EAAAA,GAAAA,eACH,OACE,mBAAC,GAAD,CACEd,eAAgBA,EAChB74B,SAAUsgD,EACVtwB,QAASmW,IAGf,KAAKxM,EAAAA,GAAAA,oBACH,OACE,mBAAC,GAAD,CACEd,eAAgBA,EAChB74B,SAAUsgD,EACVtwB,QAASmW,IAGf,KAAKxM,EAAAA,GAAAA,mBACL,KAAKA,EAAAA,GAAAA,gBACL,KAAKA,EAAAA,GAAAA,oBACL,KAAKA,EAAAA,GAAAA,kBACL,KAAKA,EAAAA,GAAAA,kBACH,OACE,mBAAC,GAAD,CACEmd,OAAQpe,EACRG,eAAgBA,EAChB74B,SAAUsgD,GAAkBG,EAAoB/nB,GAChD1I,QAASmW,IAIf,KAAKxM,EAAAA,GAAAA,kCACL,KAAKA,EAAAA,GAAAA,+BACL,KAAKA,EAAAA,GAAAA,mCACL,KAAKA,EAAAA,GAAAA,iCACL,KAAKA,EAAAA,GAAAA,iCACH,OACE,mBAAC,GAAD,CACE0kB,aAAW,EACXvH,OAAQpe,EACRG,eAAgBA,EAChB74B,SAAUsgD,GAAkBG,EAAoB/nB,GAChD1I,QAASmW,IAIf,KAAKxM,EAAAA,GAAAA,iCACL,KAAKA,EAAAA,GAAAA,8BACL,KAAKA,EAAAA,GAAAA,kCACL,KAAKA,EAAAA,GAAAA,gCACL,KAAKA,EAAAA,GAAAA,gCACH,OACE,mBAAC,GAAD,CACEmd,OAAQpe,EACRG,eAAgBA,EAChB74B,SAAUsgD,EACVtwB,QAASmW,IAIf,KAAKxM,EAAAA,GAAAA,QACL,KAAKA,EAAAA,GAAAA,oBACL,KAAKA,EAAAA,GAAAA,kBACL,KAAKA,EAAAA,GAAAA,8BACL,KAAKA,EAAAA,GAAAA,qBACL,KAAKA,EAAAA,GAAAA,iCACL,KAAKA,EAAAA,GAAAA,qBACL,KAAKA,EAAAA,GAAAA,iCACH,OACE,mBAAC,GAAD,CACEjB,cAAeA,EACfwN,YAAa4Q,EACbve,MAAOunB,EACPne,SAAUoe,EACV//C,SAAUsgD,EACVznB,eAAgBA,EAChB7I,QAASmW,IAIf,KAAKxM,EAAAA,GAAAA,cACL,KAAKA,EAAAA,GAAAA,iBACL,KAAKA,EAAAA,GAAAA,wBACL,KAAKA,EAAAA,GAAAA,qBACL,KAAKA,EAAAA,GAAAA,sBACL,KAAKA,EAAAA,GAAAA,0BACL,KAAKA,EAAAA,GAAAA,qBACL,KAAKA,EAAAA,GAAAA,aACL,KAAKA,EAAAA,GAAAA,2BACL,KAAKA,EAAAA,GAAAA,uBACL,KAAKA,EAAAA,GAAAA,2BACL,KAAKA,EAAAA,GAAAA,wBACL,KAAKA,EAAAA,GAAAA,aACL,KAAKA,EAAAA,GAAAA,kCACL,KAAKA,EAAAA,GAAAA,mBACL,KAAKA,EAAAA,GAAAA,uBACH,OACE,mBAAC,GAAD,CACEjB,cAAeA,EACfH,MAAO0nB,EACPte,SAAUue,EACVha,YAAa4Q,EACb92C,SAAUsgD,EACVznB,eAAgBA,EAChB7I,QAASmW,IAIf,QACE,QAcC4a,CAA4BT,EAAgBE,IAKnD,OACE,mBAAC5yC,EAAA,EAAD,CACEje,GAAG,WACH6lB,KAAMwqC,EAAuB,OAASgB,EAAAA,GACtCzrC,UAAWmjB,EACXV,YAAab,IAEZkpB,MCzUD3wB,IAAe56B,EAAAA,EAAAA,KAAU66B,GAAOA,KAAM,KAAO,GA6EnD,IAAez+B,EAAAA,EAAAA,KAAKC,EAAAA,EAAAA,KACjBC,IACC,MAAQqnB,QAASF,GAAennB,EAAOonB,aAAe,IAC9CV,KAAMuB,EAAW4nC,aAAcC,GAAqB9vD,EAAOmoB,MAEnE,MAAO,CACLF,UAAAA,EACA6nC,iBAAAA,EACA3oC,WAAAA,EACAiK,iBAAkBpxB,EAAOoxB,oBATXrxB,EA3E2B,IAQzC,IAR0C,SAC9C6O,EAD8C,OAE9C4V,EAF8C,UAG9CyD,EAH8C,iBAI9C6nC,EAJ8C,WAK9C3oC,EAL8C,iBAM9CiK,EAN8C,QAO9CwN,GACI,EACJ,MAAM,gBACJE,EADI,SAEJ7F,EAFI,qBAGJ82B,IACEhvD,EAAAA,EAAAA,MAEEO,GAAOC,EAAAA,EAAAA,MAIbnF,EAAAA,EAAAA,KAAU,KACRkiC,IAAa,KACXQ,WAIJhb,EAAAA,EAAAA,IAAelV,EAAUgwB,GAEzB,MAAMzF,GAAc93B,EAAAA,EAAAA,KAAa9C,IAC/B06B,EAAS,CAAE16B,GAAAA,EAAI4gC,sBAAsB,MACpC,CAAClG,IAEErS,GAAUnlB,EAAAA,EAAAA,KAAQ,KACtB,IAAK0lB,EACH,OAGF,MAAM6oC,GAAc1nC,EAAAA,EAAAA,IAAkBnB,EAAYc,EAAWzD,GAE7D,OAAOyrC,EAAAA,EAAAA,IAAYD,EAAa/nC,EAAW6nC,OAAkB70D,EAAWm2B,KACvE,CAACjK,EAAY3C,EAAQyD,EAAW6nC,EAAkB1+B,KAE9CtM,EAAaC,IAAWC,EAAAA,GAAAA,QAAkB/pB,EAAW2rB,EAAS/pB,QAAQ2nB,IAE7E,OACE,mBAACoB,GAAA,EAAD,CAAgBC,MAAOf,EAAagB,WAAYf,EAAShjB,UAAU,2BAChE+iB,MAAAA,GAAAA,EAAaplB,OACZolB,EAAYjd,KAAKtJ,GACf,mBAAC4nB,GAAA,EAAD,CACErZ,IAAKvO,EACLwD,UAAU,sBAEVC,QAAS,IAAMm3B,EAAY56B,GAC3B0J,QAAS/F,EAAAA,IAET,mBAACkkB,GAAA,EAAD,CAAiBE,OAAQ/nB,EAAI0qC,eAAa,EAAC7K,WAAW,aAGxDtZ,IAAgBA,EAAYplB,OAC9B,wBAAGqC,UAAU,aAAa+K,IAAI,aAAa7I,IAAI,QAC5CugB,EAAO9kB,OAAS,mCAAqC,0BAGxD,mBAAC8mB,GAAA,EAAD,CAAS1Z,IAAI,YAEf,mBAAC0/B,GAAA,EAAD,CACE/vB,SAAO,EACPza,QAAS+tD,EACT9tD,UAAWX,EAAK,qBAEhB,wBAAGS,UAAU,+BCrEfu8B,IAAe56B,EAAAA,EAAAA,KAAU66B,GAAOA,KAAM,KAAO,GA0GnD,IAAez+B,EAAAA,EAAAA,KAAKC,EAAAA,EAAAA,KACjBC,IACC,MAAQqnB,QAASsZ,GAAoB3gC,EAAOonB,aAAe,IACnDV,KAAMC,GAAc3mB,EAAOymB,OAGjCob,MAAOvC,EADH,eAEJsB,EAFI,cAGJC,EAHI,aAIJC,GACE9gC,EAAO2+B,cACHtX,QAAS2Z,GAAkBH,GAAiB,IAC5CxZ,QAAS6Z,GAAiBJ,GAAgB,GAElD,MAAO,CACLna,UAAAA,EACAga,gBAAAA,EACArB,YAAAA,EACA4wB,YAAatvB,MAAAA,OAAF,EAAEA,EAAgBna,MAC7Bua,cAAAA,EACAE,aAAAA,KApBcnhC,EAxG4B,IAa1C,IAb2C,UAC/C+pB,EAD+C,SAE/Clb,EAF+C,kBAG/CuhD,EAH+C,0BAI/CC,EAJ+C,WAK/CC,EAL+C,QAM/CzxB,EAN+C,UAO/CjY,EAP+C,gBAQ/Cga,EAR+C,YAS/CrB,EAT+C,YAU/C4wB,EAV+C,aAW/ChvB,EAX+C,cAY/CF,GACI,EACJ,MAAM,gBACJlC,EADI,qBAEJwxB,IACEvvD,EAAAA,EAAAA,OAIJ3E,EAAAA,EAAAA,KAAU,KACRkiC,IAAa,KACXQ,UAIJ,MAAMx9B,GAAOC,EAAAA,EAAAA,MAEbuiB,EAAAA,EAAAA,IAAelV,EAAUgwB,GAEzB,MAAMzZ,GAAqB9jB,EAAAA,EAAAA,KAAawgC,IACtCyuB,EAAqB,CAAEzuB,MAAAA,MACtB,CAACyuB,IAEEjc,GAAe5yC,EAAAA,EAAAA,KAAQ,KAE3B,MAAMwmB,GAAYC,EAAAA,EAAAA,MAAYC,MAAMzB,KAC9Byb,EAAkBxB,GAAkBrY,EAAAA,EAAAA,IAAkBqY,EAAiB1Y,EAAWqX,GAAe,GAEvG,OAAOlX,EAAAA,EAAAA,KACLP,EAAAA,GAAAA,IAAO,IACFsa,KACCjB,GAAgB,MAChBF,GAAiB,KACpBxc,QAAQukC,IACT,MAAM5sC,EAAO8L,EAAU8gC,GACvB,OAAK5sC,IAIGA,EAAKyjB,SAAWzjB,EAAKo0C,uBAAwBC,EAAAA,EAAAA,IAAUr0C,OAEjEwK,GACA,EACAwpC,KAED,CAACxvB,EAAiBha,EAAW2Y,EAAa4B,EAAcF,EAAemvB,IAEpEM,GAAiBpvD,EAAAA,EAAAA,KAAY,MAC7B8uD,EAAkBzwD,QAAUoqB,KAC9BwmC,EAAqB,CAAEzuB,MAAO,KAC9BwuB,OAED,CAACF,EAAkBzwD,OAAQoqB,EAAWwmC,EAAsBD,IAE/D,OACE,0BAAKtuD,UAAU,kBACb,0BAAKA,UAAU,eACb,mBAACH,EAAA,EAAD,CACEC,OAAK,EACLtF,KAAK,UACLuF,MAAM,cACNE,QAAS48B,EACT38B,UAAU,uBAEV,wBAAGF,UAAU,qBAEf,6BAAKT,EAAK,qBAEZ,0BAAKS,UAAU,wBACb,mBAAC4rD,GAAA,EAAD,CACEC,QAASvZ,EACTvB,YAAaqd,EACbpd,YAAazT,EACb7a,kBAAmBnjB,EAAK,iBACxBusD,cAAc,0BACdrqB,UAAW0sB,EACXld,oBAAqBod,EACrBzrC,eAAgBQ,IAGlB,mBAACqnB,GAAA,EAAD,CACE/vB,QAAS5f,QAAQszD,EAAkBzwD,QAAUoqB,GAC7C9nB,QAASyuD,EACTxuD,UAAW6nB,EAAY,2BAA6B,0BAEpD,wBAAG/nB,UAAU,4BC0DvB,IAAejC,EAAAA,EAAAA,KAAKC,EAAAA,EAAAA,KACjBC,IACC,MACE4C,SAAU8tD,EACV/nC,MAAOgoC,GACL3wD,EAAO4wD,cAAgB,GAE3B,MAAO,CACLF,iBAAAA,EACAC,cAAAA,KATc5wD,EA/J6B,IAO3C,IAP4C,UAChD+pB,EADgD,SAEhDlb,EAFgD,UAGhDmqB,EAHgD,QAIhD6F,EAJgD,iBAKhD8xB,EALgD,cAMhDC,GACI,EACJ,MAAM,gBACJE,EADI,cAEJC,IACE/vD,EAAAA,EAAAA,MAEEO,GAAOC,EAAAA,EAAAA,MAEbuiB,EAAAA,EAAAA,IAAelV,EAAUgwB,GAEzB,MAAOjV,EAAOonC,IAAY3tD,EAAAA,EAAAA,IAAS,KAC5BwmB,EAAOonC,IAAY5tD,EAAAA,EAAAA,IAAS,KAC5B6L,EAAOw8B,IAAYroC,EAAAA,EAAAA,OACnBulB,EAAO6iB,IAAYpoC,EAAAA,EAAAA,MAEpB6tD,EAAsB,4BACtBC,EAAyB,+BACzBC,EAAwB,mDAExB3tB,EAAYktB,IAAqBU,EAAAA,GAAAA,WAEjCC,GAAoBhwD,EAAAA,EAAAA,KAAa0C,IACrC,MAAM,MAAEsE,GAAUtE,EAAEqI,cACd4sC,EAAW3wC,EAAMunB,QAAQ,OAAQ,IAEvCmhC,EAAS/X,GAELA,IAAa3wC,IACftE,EAAEqI,cAAc/D,MAAQ2wC,KAEzB,IAEG9iB,GAA0B70B,EAAAA,EAAAA,KAAa0C,IAC3CitD,EAASjtD,EAAEqI,cAAc/D,SACxB,IAEGipD,GAAoBjwD,EAAAA,EAAAA,KAAY,KAC/BsoB,EAAMjqB,OAKPq5B,EAAUr5B,OAnDgB,IAoD5B8rC,EAAS2lB,GAIXN,EAAgB,CACdlnC,MAAAA,EACA1a,MAAAA,EACA8pB,UAAAA,IAZAyS,EAASylB,KAcV,CAACtnC,EAAOoP,EAAW83B,EAAiB5hD,EAAOgiD,EAAqBE,IAE7DI,GAAsBlwD,EAAAA,EAAAA,KAAY,KACjCsoB,EAAMjqB,OAKXoxD,EAAc,CACZnnC,MAAAA,EACAC,MAAAA,EACA3a,MAAAA,EACA8pB,UAAAA,IARAyS,EAAS0lB,KAUV,CAACvnC,EAAOmnC,EAAelnC,EAAO3a,EAAO8pB,EAAWm4B,KAEnD90D,EAAAA,EAAAA,KAAU,KACJs0D,IAAqBU,EAAAA,GAAAA,UACvBxyB,GAAQ,KAET,CAAC8xB,EAAkB9xB,IAEtB,MAAM4yB,EAAiBb,GAAiBrvD,EAAKqvD,KAC3ChoC,IAAUsoC,GAAuBtoC,IAAUuoC,EACvCvoC,OACA1tB,GAGN,OACE,0BAAK8G,UAAU,WACb,0BAAKA,UAAU,eACb,mBAACH,EAAA,EAAD,CACEC,OAAK,EACLtF,KAAK,UACLuF,MAAM,cAENE,QAAS,IAAM48B,IACf38B,UAAU,8BAEV,wBAAGF,UAAU,qBAEf,6BAAKT,EAAKwoB,EAAY,aAAe,cAEvC,0BAAK/nB,UAAU,wBACb,mBAACuqC,GAAA,EAAD,CACEhkC,SAAUmjC,EACV9hB,MAAOroB,EAAK,cAEd,mBAACgkB,GAAA,EAAD,CACEjd,MAAOshB,EACPrhB,SAAU+oD,EACVt+B,MAAOzxB,EAAKwoB,EAAY,mBAAqB,aAC7CnB,MAAOA,IAAUsoC,GAAuBtoC,IAAUuoC,EAAyBvoC,OAAQ1tB,IAEpF6uB,GACC,sCACE,mBAACxE,GAAA,EAAD,CACEjd,MAAOuhB,EACPthB,SAAU4tB,EACVnD,MAAOzxB,EAAK,oCAEd,wBAAGS,UAAU,QAAQT,EAAK,qBAI7BkwD,GACC,wBAAGzvD,UAAU,SAASyvD,GAGvBz4B,EAAUr5B,OAAS,GAClB,sCACE,yBAAIqC,UAAU,wBAAwBT,EAAK,6BAA8By3B,EAAUr5B,OAAQ,MAE3F,0BAAKqC,UAAU,mCACZg3B,EAAUlxB,KAAKtJ,GACd,mBAAC4nB,GAAA,EAAD,CAAUwsB,UAAQ,EAAC5wC,UAAU,uBAC3B,mBAACqkB,GAAA,EAAD,CAAiBE,OAAQ/nB,UAQrC,mBAACiuC,GAAA,EAAD,CACE/vB,QAA0B,IAAjBkN,EAAMjqB,OACfsC,QAAS8nB,EAAYynC,EAAsBD,EAC3CroD,SAAUu6B,EACVvhC,UAAW6nB,EAAYxoB,EAAK,8BAAgC,gBAE3DkiC,EACC,mBAACxxB,EAAA,EAAD,CAASlQ,MAAM,UAEf,wBAAGC,UAAU,2BCnKjB0vD,GAAe1yD,OAAOu8B,KAAKo2B,EAAAA,IAAmBhyD,OAAS,EAsD7D,IAAeI,EAAAA,EAAAA,KApDe,IAMxB,IANyB,SAC7B8O,EAD6B,UAE7Bkb,GAAY,EAFiB,QAG7BzV,EAH6B,gBAI7Bs9C,EAJ6B,QAK7B/yB,GACI,EACJ,MAAOgzB,EAAkBC,IAAuBzuD,EAAAA,EAAAA,IAAmB,IAE7DqtD,GAAiBpvD,EAAAA,EAAAA,KAAY,KACjCswD,EAAgB7nC,EAAY4nC,EAAAA,GAAAA,gBAAoCA,EAAAA,GAAAA,iBAC/D,CAAC5nC,EAAW6nC,IAEf,OACE,mBAACn1C,EAAA,EAAD,CACEje,GAAG,UACH6lB,KAAMwrC,EAAAA,GACNhpB,YAAa6qB,GACbttC,UAAW9P,IAETy9C,IACA,OAAQz9C,GACN,KAAKq9C,EAAAA,GAAAA,gBACL,KAAKA,EAAAA,GAAAA,cACH,OACE,mBAAC,GAAD,CACE5nC,UAAWA,EACXlb,SAAUA,EACVuhD,kBAAmByB,EACnBxB,0BAA2ByB,EAC3BxB,WAAYI,EACZ7xB,QAASA,IAGf,KAAK8yB,EAAAA,GAAAA,gBACL,KAAKA,EAAAA,GAAAA,cACH,OACE,mBAAC,GAAD,CACE5nC,UAAWA,EACXlb,SAAUkjD,GAAgBljD,EAC1BmqB,UAAW64B,EACXhzB,QAASA,IAGf,QACE,c,eCpDZ,MAwBA,IAAe9+B,EAAAA,EAAAA,KAxBqB,IAA4C,IAA3C,SAAE8O,EAAF,QAAYgwB,EAAZ,gBAAqB+yB,GAAsB,EAC9E,MAAMrwD,GAAOC,EAAAA,EAAAA,KAIb,OAFAuiB,EAAAA,EAAAA,IAAelV,EAAUgwB,EAAS+yB,EAAiBD,EAAAA,GAAAA,UAGjD,0BAAK3vD,UAAU,iBACb,0BAAKA,UAAU,eACb,mBAACH,EAAA,EAAD,CACEC,OAAK,EACLtF,KAAK,UACLuF,MAAM,cACNE,QAAS48B,EACT38B,UAAU,uBAEV,wBAAGF,UAAU,qBAEf,6BAAKT,EAAK,mBAEZ,mBAACywD,GAAA,EAAD,CAAUC,WAAW,WAAWpjD,SAAUA,Q,eCXhD,MAuEA,IAAe9O,EAAAA,EAAAA,KAAKC,EAAAA,EAAAA,KACjBC,IACC,MAAQ0mB,KAAM8nB,EAAa9Q,WAAYu0B,GAAqBjyD,EAAOy9B,YAEnE,MAAO,CACL+Q,YAAAA,EACAyjB,iBAAAA,KANclyD,EAvE+B,IAO7C,IAP8C,OAClD4B,EADkD,OAElDoM,EAFkD,YAGlDygC,EAHkD,iBAIlDyjB,EAJkD,QAKlDlpD,EALkD,oBAMlD8b,GACI,EACJ,MAAM,gBAAEqtC,IAAoBnxD,EAAAA,EAAAA,MAEtBO,GAAOC,EAAAA,EAAAA,KAEP4wD,GAA2B1wD,EAAAA,EAAAA,KAAQ,IAClC+sC,EAIEzvC,OAAOu8B,KAAKkT,GAAamY,QAAO,CAACC,EAAQrV,KAC9C,MAAM,gBAAEN,EAAF,cAAmBmhB,GAAkB5jB,EAAYrxB,OAAOo0B,IAK9D,OAJIN,EAAgBzyC,SAASuP,IAAWqkD,MAAAA,GAAAA,EAAe5zD,SAASuP,KAC9D64C,EAAO33B,KAAKsiB,GAGPqV,IACN,IAVM,IAWR,CAAC74C,EAAQygC,KAEL6jB,EAAmBC,IAAwBlvD,EAAAA,EAAAA,IAAmB+uD,GAE/DI,GAAU9wD,EAAAA,EAAAA,KAAQ,KACfwwD,MAAAA,OAAA,EAAAA,EAAkBpqD,KAAK0pC,IAAD,CAC3Bxe,MAAOyb,EAAcA,EAAY+C,GAAU5nB,MAAQ,GACnDthB,MAAO8jB,OAAOolB,SACT,IACN,CAAC0gB,EAAkBzjB,IAEhB9e,GAAeruB,EAAAA,EAAAA,KAAY,KAC/B,MAAMmxD,EAAcL,EAAyB3tC,QAAQjmB,IAAQ8zD,EAAkB7zD,SAASD,KAAKsJ,IAAIsV,QAC3Fs1C,EAAWJ,EAAkB7tC,QAAQjmB,IAAQ4zD,EAAyB3zD,SAASD,KAAKsJ,IAAIsV,QAE9F+0C,EAAgB,CAAEnkD,OAAAA,EAAQykD,YAAAA,EAAaC,SAAAA,IACvC1pD,MACC,CAACgF,EAAQmkD,EAAiBC,EAA0BppD,EAASspD,IAEhE,GAAK7jB,GAAgByjB,EAIrB,OACE,mBAACvsC,GAAA,EAAD,CACE/jB,OAAQA,EACRoH,QAASA,EACT8b,oBAAqBA,EACrBwP,QAAS3E,EACT3tB,UAAU,SACV4nB,MAAOroB,EAAK,gBAEZ,mBAACoxD,GAAA,EAAD,CACEr8B,QAASk8B,EACTj8B,SAAU+7B,EACV/pD,SAAUgqD,EACVzwD,OAAK,IAEP,mBAACD,EAAA,EAAD,CAAQE,MAAM,UAAUC,UAAU,wBAAwBqoB,QAAM,EAACpoB,QAAS0tB,GACvEpuB,EAAK,gBAER,mBAACM,EAAA,EAAD,CAAQG,UAAU,wBAAwBqoB,QAAM,EAACpoB,QAAS+G,GAAUzH,EAAK,gB,mCCG/E,SAASqxD,GAAaC,GACpB,OAAIA,EACK,4BAEF,wBClGT,IAAIC,GACAv9C,GAEJ,MAAMw9C,GAAwC,CAC5CC,MAAM,EACNC,WAAW,EACXC,IAAI,EACJC,SAAS,EACTC,MAAM,EACNC,WAAW,EACXC,OAAO,EACPC,YAAY,EACZ,KAAK,EACLC,QAAQ,EACRC,UAAU,EACVC,KAAK,EACLC,MAAM,EACNC,KAAK,GAkBMC,GAAa7vD,GAChB,mBAAoBA,EAAIA,EAAE8vD,eAAe,GAAGC,QAAU,EAG1D/mD,GAAkBhJ,IACtB,MAAMuX,EAAS,WAAYvX,EAAIA,EAAEuX,OAASs4C,GAAU7vD,GAEpD,IACG8uD,KAEGA,GAAajxC,SAAS7d,EAAEmI,SAExB2mD,GAAan0D,WAAa,GAAK4c,GAAU,GAEzCu3C,GAAan0D,WAAcm0D,GAAakB,aAAelB,GAAal0D,cAAiB2c,GAAU,EACnG,CACA,GAAIhG,IAA4BvR,EAAEmI,OAAuB5N,QAAQgX,IAA0B,OAC3FvR,EAAEgJ,mBAIN,SAASinD,GAA4BjwD,GAC/B+uD,GAAa/uD,EAAE+I,OArCrB,SAAmBZ,GACjB,KAAKA,GAAYA,aAAkB+nD,aAAc,OAAO,EACxD,MAAMp1D,EAAUqN,EACVgoD,EAAUr1D,EAAQq1D,QAAQ/O,cAChC,GAAgB,aAAZ+O,EAAwB,OAAO,EACnC,GAAgB,UAAZA,EAAqB,OAAO,EAChC,MAAMh3C,EAAOre,EAAQs1D,aAAa,QAClC,QAAKj3C,GACc,CACjB,OAAQ,WAAY,SAAU,QAAS,MAAO,MAC9C,SAAU,OAAQ,WAAY,iBAAkB,OAAQ,QAAS,QAEjDqB,QAAQrB,EAAKioC,gBAAkB,EAyBrBiP,CAAUrwD,EAAEmI,SACtCnI,EAAEgJ,iBAIC,SAASsnD,GAAiBnyC,EAAyBoyC,GACxDzB,GAAe3wC,EACf5M,GAA0Bg/C,EAE1Bp3D,SAASyG,iBAAiB,QAASoJ,GAAgB,CAAEwnD,SAAS,IAC9Dr3D,SAASyG,iBAAiB,YAAaoJ,GAAgB,CAAEwnD,SAAS,IAClEr3D,SAASs3D,UAAYR,GAGhB,SAASS,KACd5B,QAAe53D,EACfqa,QAA0Bra,EAC1BiC,SAAS0G,oBAAoB,QAASmJ,IACtC7P,SAAS0G,oBAAoB,YAAamJ,IAE1C7P,SAASs3D,UAAY,K,eC7DvB,MAAME,GAAgBC,EAAAA,GAAkB,GAAK,GASvCC,IAAKC,EAAAA,EAAAA,GAAuB,4BA0DlC,IAAe/0D,EAAAA,EAAAA,KAxDgC,IAEzC,UAF0C,SAC9C06B,EAD8C,aACpCs6B,EADoC,eACtBC,EADsB,QACNC,GACpC,EAEJ,MAAMviD,GAAe5X,EAAAA,EAAAA,IAAuB,MAEtCwF,GAAYgQ,EAAAA,EAAAA,GAAU,WAAD,UAAWmqB,EAASy6B,uBAApB,aAAW,EAA0B12D,MAAOy2D,EAAS1kD,EAAAA,GAAAA,SAEzE4kD,EAAaC,EAAUC,IAAc/uD,EAAAA,GAAAA,MACrC4oC,EAAmBomB,IAAuBhvD,EAAAA,GAAAA,KAE3CivD,EAAuBz4D,QAAQm4D,GAAW30D,IACxCkL,qBAAsBgqD,IAAuB9pD,EAAAA,EAAAA,GAAkB6pD,IAC/DjqD,aAAcmqD,EAAoBjqD,qBAAsBkqD,IAAqBhqD,EAAAA,EAAAA,IAClFupD,IAAY/lB,OAAmBh0C,GAAW,GAU7C,OACE,0BACE8G,UAAW6yD,GAAG,IAAKD,EAAAA,IAAmB,WACtC3yD,QAVJ,WACE,IAAKyQ,EAAazX,QAAS,OAC3B,MAAM,EAAE4X,EAAF,EAAKC,GAAMJ,EAAazX,QAAQ8L,wBAEtCiuD,EAAev6B,EAASA,SAAU5nB,EAAGC,IAOnCjL,IAAK6K,EACLijD,aAAcV,EAAUG,OAAWl6D,GAElCu6D,GACC,0BACEzzD,UAAW6yD,GACT,SACAI,EAAU,CAACS,QAAoBx6D,GAEjCgE,MAAQ,0BAAyB61D,GAAgBJ,UAGpDY,GACC,mBAAC94B,GAAA,EAAD,CACEj+B,GAAK,UAASi8B,EAASA,WACvBz4B,UAAW6yD,GAAG,WAAY,CAACW,IAC3B94B,cAAep8B,EACfq8B,KAAMw4B,EACNr4B,QAAM,EACNtgC,KAAMm4D,GACN53B,OAAQu4B,EACR5nD,QAAS2nD,QCpDbR,IAAKC,EAAAA,EAAAA,GAAuB,oBAsDlC,IAAe/0D,EAAAA,EAAAA,KApDwB,IAMjC,IANkC,mBACtCguD,EADsC,iBAEtC6H,EAFsC,eAGtCZ,EAHsC,UAItClL,EAJsC,QAKtCmL,GACI,EAEJ,MAAMY,GAAiB/6D,EAAAA,EAAAA,IAAuB,OACvCg7D,EAA2BC,IAA0BzvD,EAAAA,GAAAA,IAAQ,IACpE64B,EAAAA,GAAAA,GAAoB02B,EAAe56D,SAAU66D,IAE7CxrD,EAAAA,EAAAA,KAAgB,KACdyrD,MACC,CAACA,IAEJ,MAAMC,EAAehyD,IACd6xD,IACU,WAAY7xD,EAAIA,EAAEuX,OAASs4C,GAAU7vD,KAGlDA,EAAEgJ,kBAIN,IAAM88C,GAAc8L,MAAAA,GAAAA,EAAkBj2D,SAAYouD,EAElD,OACE,0BAAK/rD,UAAW6yD,GAAG,IAAKD,EAAAA,IAAmB,WAAYqB,eAAgBD,EAAaE,YAAaF,GAC/F,0BAAKh0D,UAAW6yD,GAAG,gBACnB,0BAAK7yD,UAAW6yD,GAAG,kBACnB,0BAAK7yD,UAAW6yD,GAAG,kBACjB,0BAAK7yD,UAAW6yD,GAAG,QAAS,CAAC,iBAAkBhtD,IAAKguD,GACjD9H,MAAAA,OADH,EACGA,EAAoBjmD,KAAI,CAAC2yB,EAAUtU,KAClC,IAAIsU,EAASyzB,aACNpE,GAAe8L,GAAqBA,EAAiBn3D,SAASg8B,EAASA,WAC9E,OACE,mBAAC,GAAD,CACE1tB,IAAK0tB,EAASA,SACds6B,aAAc5uC,EACd8uC,QAASA,EACTD,eAAgBA,EAChBv6B,SAAUA,aCmO1B,IAAe16B,EAAAA,EAAAA,KAxN0B,IAkDnC,kBAlDoC,mBACxCguD,EADwC,OAExCnsD,EAFwC,QAGxCxC,EAHwC,UAIxC0qD,EAJwC,iBAKxC8L,EALwC,OAMxCO,EANwC,WAOxCC,EAPwC,cAQxCC,EARwC,SASxCC,EATwC,QAUxCC,EAVwC,OAWxCC,EAXwC,SAYxCC,EAZwC,UAaxChgC,EAbwC,UAcxCC,EAdwC,WAexCggC,EAfwC,eAgBxCC,EAhBwC,iBAiBxCC,EAjBwC,QAkBxCC,EAlBwC,YAmBxCC,EAnBwC,UAoBxCC,EApBwC,YAqBxCngC,EArBwC,WAsBxCogC,EAtBwC,cAuBxC92D,EAvBwC,cAwBxC+2D,EAxBwC,sBAyBxCC,EAzBwC,kBA0BxCC,EA1BwC,oBA2BxCC,EA3BwC,kBA4BxCC,EA5BwC,QA6BxCC,EA7BwC,OA8BxCC,EA9BwC,MA+BxCC,EA/BwC,QAgCxCniC,EAhCwC,UAiCxCz0B,EAjCwC,SAkCxC23B,EAlCwC,SAmCxCk/B,EAnCwC,cAoCxCC,EApCwC,gBAqCxCC,EArCwC,SAsCxC36B,EAtCwC,OAuCxC46B,EAvCwC,aAwCxCC,EAxCwC,QAyCxC7uD,EAzCwC,oBA0CxC8b,GA1CwC,WA2CxCgzC,GA3CwC,WA4CxCC,GA5CwC,UA6CxCC,GA7CwC,aA8CxCC,GA9CwC,eA+CxCC,GA/CwC,eAgDxClD,GAhDwC,eAiDxCmD,IACI,EAEJ,MAAMC,IAAUt9D,EAAAA,EAAAA,IAAuB,MAEjCu9D,IAAgBv9D,EAAAA,EAAAA,IAAuB,MACvCw9D,GJjHD,SACLl5D,EACAm5D,EACAT,EACAK,GAEA,MAAM7hC,EAAwB,GACxBtzB,GAAOw1D,EAAAA,EAAAA,IAAep5D,GACtB8P,GAAQC,EAAAA,EAAAA,IAAgB/P,MACvBoQ,EAAAA,EAAAA,IAAuBpQ,QAA6ClE,GAAlCoU,EAAAA,EAAAA,IAAuBlQ,IAC1Do2C,GAAYp0C,EAAAA,EAAAA,IAAoBhC,EAAS,UACzCq5D,EAAmBvpD,IAAUsmC,IAAakjB,EAAAA,EAAAA,IAAuBt5D,KAAau5D,GAAAA,GAC9EC,EAAYj8D,OAAOk8D,eAiBzB,GAfIJ,GACFniC,EAAQpH,KAAK,CACX8D,MAAO,yBACPxwB,KAAM,aACNgmD,QAAS,KACPsQ,QAAQC,QAAQvjB,EAAYwjB,GAAAA,GAAkBxjB,EAAWjlC,EAAAA,GAAAA,SAA0BrB,EAAO2B,SACvFwrB,KAAK48B,GAAAA,IAEJV,GACFA,OAMJv1D,EAAM,OAER,MAAM6vD,EAAe/1D,SACnB87D,MAAAA,GAAA,UAAAA,EAAWM,kBAAX,eAAuBC,aACnBP,EAAUM,WAAWC,WAA2B56D,QAAQ,4BACD,KAAxDq6D,EAAU19C,WAAW2U,QAAQ,kBAAmB,KAGrDyG,EAAQpH,KAAK,CACX8D,MAAO4/B,GAAaC,GACpBrwD,KAAM,OACNgmD,QAAS,KACP,MAAMnqC,GAAa+6C,EAAAA,GAAAA,KACnB,GAAI/6C,MAAAA,GAAAA,EAAY1e,QAAUw4D,EACxBA,EAAe95C,OACV,CACL,MAAMg7C,EAAgBxG,GAAgB+F,EAAYA,EAAU19C,YAAao+C,EAAAA,EAAAA,IAA2Bl6D,IACpGm6D,EAAAA,GAAAA,IAAoBF,GAGlBd,GACFA,OAoBR,OAdIT,GACFxhC,EAAQpH,KAAK,CACX8D,MAAO,gCACPxwB,KAAM,OACNgmD,QAAS,KACPsP,IAEIS,GACFA,OAMDjiC,EI2CakjC,CAAsBp6D,EAAS4J,EAAS8tD,EAAcgB,QAAa58D,EAAWi9D,IAC5FsB,KAAe3P,GAAc8L,MAAAA,GAAAA,EAAkBj2D,QAC/C+5D,GAAgBtC,IAAwBqC,IAEvCxE,GAAS0E,GAAaC,KAAiBtzD,EAAAA,GAAAA,KAExCuzD,IAAoBv4D,EAAAA,EAAAA,KAAY,IAC7BnE,SAASY,cAAe,kEAAiEqB,EAAQZ,SACvG,CAACY,EAAQZ,KAENs7D,IAAiBx4D,EAAAA,EAAAA,KACrB,IAAMnE,SAASY,cAAc,8CAC7B,IAGIg8D,IAAiBz4D,EAAAA,EAAAA,KACrB,IAAMnE,SAASY,cAAc,gCAC7B,IAGIi8D,IAAY14D,EAAAA,EAAAA,KAAY,KAAM,MAClC,MAAM24D,EAA0B93D,EAAAA,KAAuB,UACjDhF,SAASY,cAA2B,+BADa,aAClD,EAA+Da,eAAiB,EAC/Es7D,EAAgB/8D,SAASY,cAA2B,gCACpDo8D,GAAuBh4D,EAAAA,KAA4B83D,IAClD93D,EAAAA,KAA2B+3D,MAAAA,OAA5B,EAA4BA,EAAe78D,UAAUwkB,SAAS,kBAC/Dq4C,MAAAA,OAFsB,EAEtBA,EAAet7D,eAAiB,EAErC,MAAO,CACLw7D,cAxFkB,GAyFlBC,gBAAkBl9D,SAASY,cAA2B,iBAAmBa,aACzE07D,YAAaZ,GAzFiB,QAyF6Bx+D,EAC3Dq/D,eAAgBJ,EAAoBF,KAErC,CAACP,KAEEc,IAAuBl5D,EAAAA,EAAAA,KAAY,KACvC0zD,QAAe95D,EAAW,EAAG,KAC5B,CAAC85D,MAEJ34D,EAAAA,EAAAA,KAAU,KACHuF,EAKLhF,YAAW,KACT+8D,OAxGqB,KAmGrBC,OAOD,CAACh4D,EAAQ+3D,GAAaC,KAEzB,MAAM,UACJt3D,GADI,UACOwG,GADP,iBACkB2xD,GADlB,iBACoCC,GADpC,MACsDx7D,GADtD,UAC6Dy7D,GAD7D,WACwEC,KAC1EC,EAAAA,GAAAA,GAAuB1E,EAAQ0D,GAAmBC,GAAgBC,GAAgBC,KAEtF39D,EAAAA,EAAAA,KAAU,KACRi4D,GAAiBsG,GAAavC,GAAcp9D,aAAUC,EAAW,qBAE1Dw5D,KACN,CAACkG,KAEJ,MAAMr5D,IAAOC,EAAAA,EAAAA,KAEb,OACE,mBAACqH,GAAA,EAAD,CACEhB,IAAKuwD,GACLx2D,OAAQA,EACR64D,iBAAkBA,GAClBC,iBAAkBA,GAClBp4D,UAAWA,GACXwG,UAAWA,GACX5J,MAAOA,GACP47D,YAAaH,GACb34D,WAAW+B,EAAAA,EAAAA,GACT,qBAAsB,QAAS21D,IAAiB,kBAElD1wD,QAASA,EACT8b,oBAAqBA,IAEpBsyC,GACC,mBAAC,GAAD,CACExB,iBAAkBA,EAClBZ,eAAgBA,GAChBlL,UAAWA,EACXiE,mBAAoBA,EACpBkH,QAASA,KAIb,0BACEjzD,UAAU,mCACV9C,MAAOy7D,GACP9yD,IAAKwwD,IAEJlB,GAAqB,mBAAC50D,EAAA,EAAD,CAAUC,KAAK,YAAYP,QAASu4D,IAApC,mBACrBpE,GAAc,mBAAC7zD,EAAA,EAAD,CAAUC,KAAK,eAAeP,QAAS21D,GAASr2D,GAAK,wBACnE80D,GACC,mBAAC9zD,EAAA,EAAD,CAAUC,KAAK,WAAWP,QAAS41D,GAAet2D,GAAK,4BAExD+0D,GAAY,mBAAC/zD,EAAA,EAAD,CAAUC,KAAK,QAAQP,QAASq1D,GAAU/1D,GAAK,UAC3Dg1D,GAAW,mBAACh0D,EAAA,EAAD,CAAUC,KAAK,OAAOP,QAASs1D,GAASh2D,GAAK,SACxDo1D,GACC,mBAACp0D,EAAA,EAAD,CAAUC,KAAK,WAAWP,QAASy1D,GAAgBn2D,GAAK,mBAEzDq1D,GACC,mBAACr0D,EAAA,EAAD,CAAUC,KAAK,WAAWP,QAAS01D,GAAkBp2D,GAAK,iCAE3Ds1D,GAAWyB,GAAYxwD,KAAKizD,GAC3B,mBAACx4D,EAAA,EAAD,CAAUwK,IAAKguD,EAAO/nC,MAAOxwB,KAAMu4D,EAAOv4D,KAAMP,QAAS84D,EAAOvS,SAAUjnD,GAAKw5D,EAAO/nC,UAEvFwjC,GAAU,mBAACj0D,EAAA,EAAD,CAAUC,KAAK,MAAMP,QAASu1D,GAAQj2D,GAAK,cACrDk1D,GAAY,mBAACl0D,EAAA,EAAD,CAAUC,KAAK,QAAQP,QAASozB,GAAU9zB,GAAK,gBAC3Dy1D,GAAc,mBAACz0D,EAAA,EAAD,CAAUC,KAAK,OAAOP,QAAS+1D,IAAYz2D,GAAK,yBAC9Dq1B,GACC,mBAACr0B,EAAA,EAAD,CAAUC,KAAK,WAAWP,QAAS81D,IAChBx2D,GAAhBrB,EAAqB,8BAAsC,uBAG/Dw2D,GAAc,mBAACn0D,EAAA,EAAD,CAAUC,KAAK,UAAUP,QAASrB,GAAYW,GAAK,YACjEw1D,GAAa,mBAACx0D,EAAA,EAAD,CAAUC,KAAK,SAASP,QAAS+6B,GAAWz7B,GAAK,kBAC9Dm1B,GAAa,mBAACn0B,EAAA,EAAD,CAAUC,KAAK,OAAOP,QAASw1D,GAAWl2D,GAAK,4BAC3D01D,GAAiBC,IACjB,mBAAC30D,EAAA,EAAD,CACEP,UAAU,8BACVQ,KAAM00D,EAAwB,YAAc,QAC5Cj1D,QAASi1D,EAAwBgB,GAAiBD,GAClD/uD,WAAWguD,GAAyB,UAAC93D,EAAQ65B,qBAAT,OAAC,EAAuBt5B,SAE5D,2BAAMqC,UAAU,qCACbk1D,GAAqB,UAAI93D,EAAQq6B,gBAAZ,OAAI,EAAkBS,MAC1C+8B,GAAa,UAAI73D,EAAQ65B,qBAAZ,OAAI,EAAuBt5B,OACpC4B,GACA,yCACA,CAACnC,EAAQq6B,SAASS,MAAO96B,EAAQ65B,cAAct5B,SAE/C4B,GAAK,4BAA6BnC,EAAQq6B,SAASS,MAAO,KAE5B,KAAlC,UAAA96B,EAAQ65B,qBAAR,eAAuBt5B,SAAgB03D,GACnCp8B,EAAAA,EAAAA,IAAgBo8B,EAAkB,IACjC,UAAAj4D,EAAQ65B,qBAAR,SAAuBt5B,OACtB4B,GAAK,+BAAgCnC,EAAQ65B,cAAct5B,OAAQ,KACnE4B,GAAK,oCAIf,0BAAKS,UAAU,WACZq1D,MAAAA,OADH,EACGA,EAAmBvvD,KAAKsU,GACvB,mBAACD,GAAA,EAAD,CACE3f,KAAK,QACL4f,KAAMA,QAMfqa,GAAa,mBAACl0B,EAAA,EAAD,CAAUu2B,aAAW,EAACt2B,KAAK,SAASP,QAASs2B,GAAWh3B,GAAK,gBChQ7Ey5D,GAAa,EAAIv3D,EAAAA,GAuYvB,IAAe1D,EAAAA,EAAAA,KAAKC,EAAAA,EAAAA,KAClB,CAACC,EAAD,KAAsD,cAA7C,QAAEb,EAAF,gBAAWo3B,GAAkC,EACpD,MAAM,SAAEvoB,IAAaolB,EAAAA,EAAAA,IAAyBpzB,IAAW,GACnDqjC,GAAkB23B,EAAAA,EAAAA,IAAwBh7D,EAAQb,EAAQ4O,QAC1DqO,GAAO3N,EAAAA,EAAAA,IAAWzO,EAAQb,EAAQ4O,SAClC,gBAAEktD,EAAF,qBAAmBC,GAAyBl7D,EAAO+2C,WAAa,IAChE,UACJokB,EADI,SAEJ9E,EAFI,OAGJE,EAHI,SAIJC,EAJI,UAKJhgC,EALI,UAMJC,EANI,QAOJ6/B,EAPI,WAQJG,EARI,eASJC,EATI,iBAUJC,EAVI,QAWJC,EAXI,YAYJC,EAZI,UAaJC,EAbI,YAcJngC,EAdI,WAeJogC,GACG/oD,IAAYslB,EAAAA,EAAAA,IAA4BtzB,EAAQb,EAAS6O,IAAc,GACtEmvB,EAA+B,WAApB5G,EACX6kC,EAAkC,cAApB7kC,EACdzM,EAAY1N,IAAQqY,EAAAA,EAAAA,IAAcrY,GAClCi/C,GAAUC,EAAAA,EAAAA,IAAen8D,GACzB63D,EAAgBn6D,QAAQuf,GACzB8+C,GACAD,IACAM,EAAAA,EAAAA,IAAYn/C,KACZo/C,EAAAA,EAAAA,IAAar8D,KACZi8D,GACDh/C,EAAKyqC,cACLzqC,EAAKyqC,aAAeqU,GACpB/7D,EAAQod,KAAOhI,KAAKC,MAAQ,IAAOymD,GAClCpR,EAAYztC,IAAQX,EAAAA,EAAAA,IAASW,EAAK7d,IAClCk9D,GAAWC,EAAAA,EAAAA,IAAgBv8D,GAC3B83D,GAAyBoE,IAAYvxC,IAAcsxC,IAAgBK,IAAa5R,GAAa1qD,EAAQo6B,aACrGoiC,EAAAA,EAAAA,IAAkBx8D,EAAQo6B,YAAcp6B,EAAQo6B,UAAUqiC,WAC1D1E,EAAoBrN,IAAS,UAAI1qD,EAAQo6B,iBAAZ,iBAAI,EAAmBW,eAAvB,aAAI,EAA4B2hC,MAAMthC,GAAMA,EAAEuhC,YAC3E37D,GAAcC,EAAAA,EAAAA,IAAyBJ,EAAQb,GAErD,MAAO,CACL2uD,mBAAoB9tD,EAAO8tD,mBAC3BqN,UAAAA,EACAhF,WAAYiF,EACZhF,cAAegF,EACf/E,UAAWl5B,IAAai+B,GAAe/E,EACvCE,QAAS6E,GAAe7E,EACxBC,UAAW4E,GAAe5E,EAC1BhgC,UAAAA,EACAC,UAAAA,EACA6/B,SAAUn5B,GAAYm5B,EACtBG,YAAat2D,IAAgBi7D,GAAe3E,EAC5CC,gBAAiB0E,GAAe1E,EAChCC,kBAAmByE,GAAezE,EAClCC,SAAUz2D,GAAey2D,EACzBC,aAAc12D,IAAgBi7D,GAAevE,EAC7CC,UAAAA,EACAngC,aAAcx2B,GAAew2B,EAC7BogC,YAAa52D,GAAe42D,EAC5B1zB,gBAAAA,EACA2zB,cAAAA,EACArB,iBAAkBv5C,MAAAA,GAAAA,EAAM2/C,aAA0B3/C,MAAAA,GAAhC,UAAgCA,EAAM0uB,gBAAtC,WAAoB7vC,EAAY,EAAgB06D,iBAClE9L,UAAAA,EACAmS,YAAan/D,QAAQuf,MAAAA,OAAD,EAACA,EAAM0uB,UAC3BmsB,sBAAAA,EACAE,qBAAsBkE,IAAYI,IAAaL,IAAeh/C,MAAAA,OAAA,EAAAA,EAAM7d,MAAO09D,EAAAA,GAC3E/E,kBAAAA,KArEcn3D,EA7VoC,IAmClD,UAnCmD,mBACvD+tD,EADuD,OAEvDnsD,EAFuD,gBAGvD40B,EAHuD,aAIvD2lC,EAJuD,QAKvD/8D,EALuD,MAMvD20B,EANuD,OAOvDoiC,EAPuD,QAQvDntD,EARuD,oBASvD8b,EATuD,UAUvDs2C,EAVuD,WAWvDhF,EAXuD,YAYvD6F,EAZuD,cAavD5F,EAbuD,SAcvDC,EAduD,OAevDE,EAfuD,SAgBvDC,EAhBuD,UAiBvDhgC,EAjBuD,UAkBvDC,EAlBuD,sBAmBvDwgC,EAnBuD,oBAoBvDE,EApBuD,kBAqBvDD,EArBuD,QAsBvDZ,EAtBuD,iBAuBvDX,EAvBuD,UAwBvD9L,EAxBuD,WAyBvD4M,EAzBuD,eA0BvDC,EA1BuD,iBA2BvDC,EA3BuD,QA4BvDC,EA5BuD,YA6BvDC,EA7BuD,UA8BvDC,EA9BuD,YA+BvDngC,EA/BuD,WAgCvDogC,EAhCuD,gBAiCvD1zB,EAjCuD,cAkCvD2zB,GACI,EACJ,MAAM,gBACJmF,EADI,aAEJC,EAFI,WAGJvnC,EAHI,gBAIJ3W,EAJI,YAKJm+C,EALI,cAMJC,EANI,uBAOJC,EAPI,sBAQJC,EARI,kBASJC,EATI,qBAUJ57D,EAVI,2BAWJC,EAXI,WAYJ47D,EAZI,gBAaJC,EAbI,aAcJC,GAdI,qBAeJC,GAfI,aAgBJC,GAhBI,aAiBJrjC,GAjBI,kBAkBJsjC,GAlBI,QAmBJC,KACEj8D,EAAAA,EAAAA,OAEE,qBAAEwK,KAAyBE,EAAAA,EAAAA,GAAkB9J,EAAQkjB,OAAqB5pB,GAAW,IACpFgiE,GAAYC,KAAiB95D,EAAAA,EAAAA,KAAS,IACtCo0B,GAAmB2lC,KAAwB/5D,EAAAA,EAAAA,KAAS,IACpDu0B,GAAmBylC,KAAwBh6D,EAAAA,EAAAA,KAAS,IACpDi6D,GAAgBC,KAAqBl6D,EAAAA,EAAAA,KAAS,IAC9Cm6D,GAAgBC,GAAcC,KAAiBp3D,EAAAA,GAAAA,MAEtDjK,EAAAA,EAAAA,KAAU,KACJ46D,GAAiBr1D,GACnB+6D,EAAW,CAAE3uD,OAAQ5O,EAAQ4O,OAAQE,UAAW9O,EAAQZ,OAEzD,CAACm+D,EAAY/6D,EAAQxC,EAAQ4O,OAAQ5O,EAAQZ,GAAIy4D,KAEpD56D,EAAAA,EAAAA,KAAU,KACJ66D,GAAyBt1D,GAC3B83B,GAAa,CAAE1rB,OAAQ5O,EAAQ4O,OAAQE,UAAW9O,EAAQZ,OAE3D,CAAC04D,EAAuBt1D,EAAQ83B,GAAct6B,EAAQ4O,OAAQ5O,EAAQZ,MAEzEnC,EAAAA,EAAAA,KAAU,KACH4/D,GAAgBnS,IAAaloD,GAChCm7D,GAAa,CAAE/uD,OAAQ5O,EAAQ4O,WAEhC,CAACiuD,EAAar6D,EAAQkoD,EAAWiT,GAAc39D,EAAQ4O,SAE1D,MAAMqpD,IAAoB31D,EAAAA,EAAAA,KAAQ,KAAM,UACtC,aAAItC,EAAQo6B,iBAAZ,iBAAI,EAAmBmkC,uBAAvB,OAAI,EAAoCh+D,OAAQ,SAE9C,MAAMuoB,GAAYC,EAAAA,EAAAA,MAAYC,MAAMzB,KAEpC,iBAAOvnB,EAAQo6B,iBAAf,iBAAO,EAAmBmkC,uBAA1B,aAAO,EAAoC53B,MAAM,EAAG,GAAGj+B,KAAI,QAAC,OAAEye,GAAH,SAAgB2B,EAAU3B,MAAS9B,OAAO3nB,SAGvG,IAAKsC,EAAQ65B,cACX,OAIF,MAAM/Q,GAAYC,EAAAA,EAAAA,MAAYC,MAAMzB,KACpC,iBAAOvnB,EAAQ65B,qBAAf,aAAO,EAAuB8M,MAAM,EAAG,GAAGj+B,KAAKtJ,GAAO0pB,EAAU1pB,KAAKimB,OAAO3nB,WAC3E,WAACsC,EAAQo6B,iBAAT,aAAC,EAAmBmkC,gBAAiBv+D,EAAQ65B,gBAE1C/4B,GAAgB6zB,EAAQA,EAAMI,SAAS2nC,MAAM8B,GAAQt6B,EAAgB7kC,SAASm/D,EAAIp/D,MACpF8kC,EAAgB7kC,SAASW,EAAQZ,IAE/B0/B,IAAe58B,EAAAA,EAAAA,KAAY,KAC/B67D,IAAc,GACdC,IAAqB,KACpB,IAEGpnC,IAAe10B,EAAAA,EAAAA,KAAY,KAC/B67D,IAAc,GACdE,IAAqB,KACpB,IAEGQ,IAAYv8D,EAAAA,EAAAA,KAAY,KAC5B67D,IAAc,GACdn0D,MACC,CAACA,IAEE2uB,IAAmBr2B,EAAAA,EAAAA,KAAY,KACnC87D,IAAqB,GACrBp0D,MACC,CAACA,IAEE8uB,IAAmBx2B,EAAAA,EAAAA,KAAY,KACnC+7D,IAAqB,GACrBr0D,MACC,CAACA,IAEE80D,IAAgBx8D,EAAAA,EAAAA,KAAY,KAChCi8D,IAAkB,GAClBv0D,MACC,CAACA,IAEE+0D,IAAsBz8D,EAAAA,EAAAA,KAAY,KACtCo8D,KACA10D,MACC,CAAC00D,GAAe10D,IAEbg1D,IAAc18D,EAAAA,EAAAA,KAAY,KAC9B86D,EAAgB,CAAEluD,UAAW9O,EAAQZ,KACrCq/D,OACC,CAACzB,EAAiBh9D,EAAQZ,GAAIq/D,KAE3BI,IAAa38D,EAAAA,EAAAA,KAAY,KAC7B+6D,EAAa,CAAEnuD,UAAW9O,EAAQZ,KAClCq/D,OACC,CAACxB,EAAcj9D,EAAQZ,GAAIq/D,KAExBK,IAAY58D,EAAAA,EAAAA,KAAY,KAC5B67D,IAAc,GACdI,IAAkB,KACjB,IAEGY,IAAc78D,EAAAA,EAAAA,KAAY,KAC9BwzB,EAAW,CAAE5mB,UAAW9O,EAAQZ,GAAIw2B,SAAS,IAC7C6oC,OACC,CAAC/oC,EAAY11B,EAAQZ,GAAIq/D,KAEtBt6C,IAAgBjiB,EAAAA,EAAAA,KAAY,KAEhC,GADAu8D,KACI9pC,MAAAA,GAAAA,EAAOI,SAAU,CACnB,MAAM9V,EAAa0V,EAAMI,SAASrsB,KAAI,QAAC,GAAEtJ,GAAH,SAAYA,KAClD2f,EAAgB,CAAEqF,WAAYpkB,EAAQ4O,OAAQqQ,WAAAA,SAE9CF,EAAgB,CAAEqF,WAAYpkB,EAAQ4O,OAAQqQ,WAAY,CAACjf,EAAQZ,QAEpE,CAAC2f,EAAiB/e,EAASy+D,GAAW9pC,IAEnCqqC,IAAoB98D,EAAAA,EAAAA,KAAY,KACpCu8D,KACAvB,EAAY,CAAEjmB,QAASj3C,EAAQkV,QAAQ+hC,YACtC,CAACwnB,GAAWz+D,EAAQkV,QAAQ+hC,QAASimB,IAElC+B,IAAsB/8D,EAAAA,EAAAA,KAAY,KACtCu8D,KACAtB,EAAc,CAAElmB,QAASj3C,EAAQkV,QAAQ+hC,YACxC,CAACwnB,GAAWz+D,EAAQkV,QAAQ+hC,QAASkmB,IAElC+B,IAAsBh9D,EAAAA,EAAAA,KAAY,KACtC,MAAMi9D,EAASxqC,MAAAA,GAAAA,EAAOI,SAClB,CACAjmB,UAAW9O,EAAQZ,GACnBggE,gBAAiBzqC,EAAMI,SAASrsB,KAAI,QAAC,GAAEtJ,GAAH,SAAYA,KAChDigE,WAAW,GAEX,CAAEvwD,UAAW9O,EAAQZ,GAAIigE,WAAW,GAExCjC,EAAuB+B,GACvBV,OACC,CAACA,GAAWz+D,EAAQZ,GAAIg+D,EAAwBzoC,IAE7C2qC,IAA6Bp9D,EAAAA,EAAAA,KAAY,KAC7Cm7D,EAAsB,CAAEzuD,OAAQ5O,EAAQ4O,OAAQxP,GAAIY,EAAQZ,KAC5Dq/D,OACC,CAACA,GAAWz+D,EAAQ4O,OAAQ5O,EAAQZ,GAAIi+D,IAErCkC,IAAqBr9D,EAAAA,EAAAA,KAAY,KACrC67D,IAAc,GACdM,OACC,CAACA,KAEEmB,IAAwBt9D,EAAAA,EAAAA,KAAY,KACxCu8D,KACAjB,EAAgB,CAAE5uD,OAAQ5O,EAAQ4O,OAAQE,UAAW9O,EAAQZ,OAC5D,CAACq/D,GAAWz+D,EAAQ4O,OAAQ5O,EAAQZ,GAAIo+D,IAErCiC,IAA6Bv9D,EAAAA,EAAAA,KAAY,KAC7Cu8D,KACAf,GAAqB,CAAE9uD,OAAQ5O,EAAQ4O,OAAQE,UAAW9O,EAAQZ,OACjE,CAACq/D,GAAWf,GAAsB19D,EAAQ4O,OAAQ5O,EAAQZ,KAEvDsgE,IAA0Bx9D,EAAAA,EAAAA,KAAakb,IAC3CkgD,EAAkB,CAChB1uD,OAAQ5O,EAAQ4O,OAChBE,UAAW9O,EAAQZ,GACnBugE,YAAat8D,KAAKX,MAAM0a,EAAK6R,UAAY,SAE1C,CAACjvB,EAAQ4O,OAAQ5O,EAAQZ,GAAIk+D,IAE1BsC,IAAqB19D,EAAAA,EAAAA,KAAa+c,IACtC2+C,GAAkB,CAAE3+C,WAAAA,IACpBw/C,OACC,CAACA,GAAWb,KAETiC,IAAiB39D,EAAAA,EAAAA,KAAY,MACjCi4D,EAAAA,GAAAA,IAAqB,gBAAe4C,GAAiB,KAAI/8D,EAAQ4O,OAAO6hB,QAAQ,IAAK,SAASzwB,EAAQZ,MACtGq/D,OACC,CAAC1B,EAAc0B,GAAWz+D,EAAQ4O,OAAQ5O,EAAQZ,KAE/C6C,IAAsBC,EAAAA,EAAAA,KAAY,OACrCyyB,MAAAA,OAAA,EAAAA,EAAOI,WAAY,CAAC/0B,IAAU01C,SAAS8oB,IAClC19D,GACFa,EAA2B,CAAE3B,QAASw+D,IAEtC98D,EAAqB,CAAE1B,QAASw+D,OAGpCC,OACC,CAAC9pC,EAAO30B,EAASy+D,GAAW39D,GAAea,EAA4BD,IAEpEo+D,IAAgB59D,EAAAA,EAAAA,KAAY,KAChC,MAAMoJ,GAAQ0E,EAAAA,EAAAA,IAAgBhQ,GAC9B69D,GAAQ,CAAEkC,IAAKz0D,IACfmzD,OACC,CAACA,GAAWz+D,EAAS69D,KAElBmC,IAAqB99D,EAAAA,EAAAA,KAAY,CAACm5B,EAA8B5nB,EAAWC,KAC/E+pD,GAAa,CACX7uD,OAAQ5O,EAAQ4O,OAAQE,UAAW9O,EAAQZ,GAAIi8B,SAAAA,EAAU5nB,EAAAA,EAAGC,EAAAA,EAAGypB,UAAWy+B,KAE5E6C,OACC,CAACA,GAAWz+D,EAAQ4O,OAAQ5O,EAAQZ,GAAIq+D,KAErCwC,IAAmB39D,EAAAA,EAAAA,KAAQ,KAAOqyB,EAAQA,EAAMI,SAAW,CAAC/0B,IAAU0I,KAAI,QAAC,GAAEtJ,GAAH,SAAYA,MAAK,CAACu1B,EAAO30B,IAEzG,GAAIg8D,EAGF,YAFAyC,KAKF,MAAMyB,GAAmB,IAAI9qD,KAG7B,OAFA8qD,GAAiBxwC,YAAYwwC,GAAiB5xC,cAAgB,GAG5D,0BAAK1rB,WAAW+B,EAAAA,EAAAA,GAAe,uBAAwByH,KACrD,mBAAC,GAAD,CACEuiD,mBAAoBA,EACpB3uD,QAASA,EACT0qD,UAAWA,EACXloD,OAAQs7D,GACRtH,iBAAkBA,EAClBO,OAAQA,EACRe,sBAAuBA,EACvBE,oBAAqBA,EACrBD,kBAAmBA,EACnBf,WAAYA,EACZC,cAAeA,EACfC,SAAUA,EACV7/B,UAAWA,EACXC,UAAWA,EACX8/B,OAAQA,EACRC,SAAUA,EACVF,QAASA,EACTG,WAAYA,EACZC,eAAgBA,EAChBC,iBAAkBA,EAClBC,QAASA,EACTC,YAAaA,EACbC,UAAWA,EACXngC,YAAaA,EACbogC,WAAYA,EACZC,cAAeA,EACf/2D,cAAeA,GACfm3D,kBAAmBA,GACnBC,QAAS0G,GACTzG,OAAQ0G,GACRzG,MAAO0G,GACP7oC,QAAS8oC,GACTv9D,UAAW2iB,GACXgV,SAAU2F,GACVu5B,SAAUzhC,GACV0hC,cAAe0G,GACfzG,gBAAiB0G,GACjBrhC,SAAUshC,GACV1G,OAAQ8G,GACR7G,aAAc8G,GACd31D,QAAS60D,GACT/F,WAAYmH,GACZ9G,eAAgB6G,GAChBjH,WAAY12D,GACZ22D,UAAWkH,GACXjH,aAAc2G,GACd5J,eAAgBoK,GAChBlH,eAAgB2G,KAElB,mBAAC,GAAD,CACEj9D,OAAQ61B,GACRrE,WAAgC,cAApBoD,EACZxtB,QAAS2uB,GACT5D,MAAOA,EACP30B,QAASA,IAEX,mBAAC,GAAD,CACEwC,OAAQg2B,GACR5uB,QAAS8uB,GACTzZ,WAAYghD,KAEd,mBAAC,GAAD,CACEz9D,OAAQ07D,GACRpvD,UAAW9O,EAAQZ,GACnBwP,OAAQ5O,EAAQ4O,OAChBhF,QAAS80D,KAEVzH,GACC,mBAAC,GAAD,CACEz0D,OAAQ47D,GACR5wC,gBAAc,EACdL,WAA2B,IAAfntB,EAAQod,KACpBiQ,OAAO8yC,EAAAA,GAAAA,IAAcD,IACrB5yC,cAAY,EACZ1jB,QAAS+0D,GACThxC,SAAU+xC,U,eCpXpB,MAkHA,IAAe/+D,EAAAA,EAAAA,KAAKC,EAAAA,EAAAA,KAClB,CAACC,EAAD,KAA8D,IAArD,YAAEo5C,EAAF,oBAAemmB,GAAsC,EAC5D,MAAMC,GAAqBpsC,EAAAA,EAAAA,IAAyBpzB,IAC9C,OAAE+N,EAAF,SAAUC,GAAawxD,GAAsB,GAC7CpjD,EAAOrO,IAAUU,EAAAA,EAAAA,IAAWzO,EAAQ+N,GACpC0xD,EAAcrjD,GAAOsjD,EAAAA,EAAAA,IAA4BtjD,QAAQnhB,EACzD0kE,EAAkB9iE,QACtBuf,GAAQpO,IAAY+Z,EAAAA,EAAAA,IAAiB3L,EAAMpO,KAAayxD,MAAAA,OAAxD,EAAwDA,EAAaE,kBAEjEhgC,EAAkB9iC,QAAQkR,KAAWymB,EAAAA,EAAAA,IAAqBx0B,EAAQ+N,GAExE,MAAO,CACL6xD,uBAAwB/iE,QAAQkR,KAAW8xD,EAAAA,EAAAA,IAA6B7/D,EAAQ+N,GAChF4xD,gBAAAA,EACAhgC,gBAAAA,EACAmgC,gBAAgBC,EAAAA,EAAAA,IAAqB//D,GACrCo1C,WAAYgE,GACR4mB,EAAAA,EAAAA,IAAiBhgE,EAAQo5C,EAAY6mB,cACrCV,GACEW,EAAAA,EAAAA,IAA4BlgE,EAAQu/D,QACpCtkE,KApBQ8E,EAhH+B,IAU7C,IAV8C,OAClD4B,EADkD,YAElDy3C,EAFkD,oBAGlDmmB,EAHkD,WAIlDnqB,EAJkD,gBAKlDuqB,EALkD,uBAMlDC,EANkD,eAOlDE,EAPkD,gBAQlDngC,EARkD,QASlD52B,GACI,EACJ,MAAM,aACJo3D,EADI,iBAEJC,EAFI,YAGJl3C,IACEnoB,EAAAA,EAAAA,MAGE0R,GAAe5X,EAAAA,EAAAA,IAAuB,MACtCyG,GAAOC,EAAAA,EAAAA,MAEN8+D,EAAiBC,IAAYC,EAAAA,GAAAA,GAAYX,IAG9Ch8B,QAASc,IACPZ,EAAAA,GAAAA,IAAwB,CAAEC,QAAStxB,EAAcuxB,WA3BzB,IA2B4DnoC,YAAa8F,KAErGvF,EAAAA,EAAAA,KAAU,KACR,GAAIuF,EACF,GAAIy3C,EAAa,CACf,MAAM,aAAE6mB,EAAF,qBAAgBO,GAAyBpnB,EAC/C+mB,EAAa,CACXF,aAAAA,EACAO,qBAAAA,SAEOjB,GACTY,EAAa,CACXZ,oBAAAA,MAIL,CAAC59D,EAAQy3C,EAAa+mB,EAAcZ,IAEvC,MAAMhkB,GAAel6C,EAAAA,EAAAA,KAAY,CAAC+0C,EAAqBlhB,EAAoBurC,KACzErqB,EAAU,IACLA,EACHsqB,qBAAqB,GAGnBZ,GAAkBW,EACpBJ,GAAiBvB,IACf51C,EAAY,CAAEktB,QAAAA,EAASlhB,SAAAA,EAAU4pC,YAAAA,IACjC/1D,QAGFmgB,EAAY,CAAEktB,QAAAA,EAASlhB,SAAAA,IACvBnsB,OAED,CAACA,EAASs3D,EAAiBn3C,EAAa42C,IAErCa,GAAoBt/D,EAAAA,EAAAA,KAAY,KAChC+zC,IACFgrB,EAAiB,CAAEH,aAAc7qB,EAAW72C,KAC5CwK,OAED,CAACA,EAASqsC,EAAYgrB,IAEzB,OACE,mBAAC16C,GAAA,EAAD,CACE3jB,UAAU,kBACVJ,OAAQA,EACRoH,QAASA,EACT63D,gBAAc,EACdj3C,MAAOyrB,GAAa/4B,EAAAA,GAAAA,GAAW+4B,EAAWzrB,MAAO,CAAC,QAAS,UAAYroB,EAAK,uBAE3E8zC,MAAAA,GAAAA,EAAYW,SACX,sCACE,0BAAKnuC,IAAK6K,EAAc1Q,UAAU,0BAC/BqzC,EAAWW,SAASluC,KAAKuuC,GACxB,mBAACD,GAAA,EAAD,CACEC,QAASA,EACT75C,KAAMskE,EAAAA,GACNn8B,oBAAqBA,EACrB1iC,QAAS29D,EAAkBpkB,OAAetgD,EAC1CgoC,SAAUmT,EACVzW,gBAAiBA,OAIvB,0BAAK59B,UAAU,kBACb,mBAACH,EAAA,EAAD,CACErF,KAAK,UACLuzC,OAAK,EACLhuC,MAAOszC,EAAW+D,cAAgB,SAAW,UAC7Cn3C,QAAS2+D,GAERr/D,EACC8zC,EAAW+D,cAAgB,iCAAmC,8BAC9D/D,EAAWnb,MACX,QAMR,mBAACzT,GAAA,EAAD,MAED85C,O,eChGP,MA0PA,IAAexgE,EAAAA,EAAAA,KAAKC,EAAAA,EAAAA,KAClB,CAACC,EAAD,KAAoC,UAA3B,OAAE+N,GAAyB,EAClC,MAAMqO,GAAO3N,EAAAA,EAAAA,IAAWzO,EAAQ+N,GAChC,IAAKqO,GAAQA,EAAK0kD,aAChB,MAAO,GAET,MAAMjX,GAAYpuC,EAAAA,EAAAA,IAASW,EAAK7d,IAC1B4d,EAAO0tC,GAAYr7C,EAAAA,EAAAA,IAAWxO,EAAQ+N,QAAU9S,EAChD8lE,EAAgB5kD,IAAQ6kD,EAAAA,EAAAA,IAAiB7kD,GAE/C,MAAO,CACLC,KAAAA,EACA3W,SAAS43B,EAAAA,EAAAA,IAAkBjhB,GAAMkhB,EAAAA,EAAAA,IAAqBt9B,IAASu9B,EAAAA,EAAAA,IAAuBv9B,IACtF6pD,UAAAA,EACAkX,cAAAA,EACAE,eAAeC,EAAAA,EAAAA,IAAiB9kD,GAChC+kD,cAAetkE,QAAQuf,MAAAA,GAAD,UAACA,EAAM0uB,gBAAP,aAAC,EAAgBs2B,iBAhBzBrhE,EA1PmC,IA0BjD,IA1BkD,OACtDgO,EADsD,OAEtDpM,EAFsD,iBAGtD0/D,EAHsD,OAItDnL,EAJsD,UAKtDpsC,EALsD,YAMtDw3C,EANsD,cAOtDC,EAPsD,aAQtDC,EARsD,UAStDC,EATsD,QAUtDC,EAVsD,QAWtDC,EAXsD,kBAYtDC,EAZsD,SAatDC,EAbsD,kBActDC,EAdsD,mBAetDC,EAfsD,KAgBtD3lD,EAhBsD,UAiBtDytC,EAjBsD,QAkBtDpkD,EAlBsD,cAmBtDw7D,EAnBsD,cAoBtDE,EApBsD,cAqBtDJ,EArBsD,mBAsBtDiB,EAtBsD,cAuBtDC,EAvBsD,QAwBtDl5D,EAxBsD,oBAyBtD8b,GACI,EACJ,MAAM,qBACJq9C,EADI,uBAEJC,EAFI,eAGJC,EAHI,WAIJC,EAJI,cAKJC,EALI,gBAMJC,EANI,eAOJC,EAPI,qBAQJC,EARI,wBASJC,EATI,iBAUJC,IACE5hE,EAAAA,EAAAA,OAEGk8D,EAAYC,IAAiB95D,EAAAA,EAAAA,KAAS,IACtCo0B,EAAmB2lC,IAAwB/5D,EAAAA,EAAAA,KAAS,IACrD,EAAEwP,EAAF,EAAKC,GAAMqjD,GAEjBzqD,EAAAA,EAAAA,GAAkB9J,EAAQkjB,OAAqB5pB,GAAW,GAE1D,MAAMgjC,GAAe58B,EAAAA,EAAAA,KAAY,KAC/B67D,GAAc,GACdC,GAAqB,KACpB,IAEGS,GAAYv8D,EAAAA,EAAAA,KAAY,KAC5B67D,GAAc,GACdn0D,MACC,CAACA,IAEE2uB,GAAmBr2B,EAAAA,EAAAA,KAAY,KACnC87D,GAAqB,GACrBp0D,MACC,CAACA,IAEE65D,GAAiBvhE,EAAAA,EAAAA,KAAY,KACjC+gE,EAAe,CAAES,QAAS,aACzB,CAACT,IAEEU,GAAmBzhE,EAAAA,EAAAA,KAAY,KACnCghE,EAAW,CAAEt0D,OAAAA,MACZ,CAACA,EAAQs0D,IAENU,GAAwB1hE,EAAAA,EAAAA,KAAY,KACxC6gE,EAAqB,CAAEn0D,OAAAA,EAAQtI,SAAUA,IACzCm4D,MACC,CAAC7vD,EAAQ6vD,EAAWn4D,EAASy8D,IAE1Bc,IAA4B3hE,EAAAA,EAAAA,KAAY,KACxC0gE,EAEFQ,EAAgB,CACdx0D,OAAAA,IAGFu0D,EAAc,CACZv0D,OAAAA,IAGJ6vD,MACC,CAACA,EAAWmE,EAAoBh0D,EAAQu0D,EAAeC,IAEpDU,IAAwB5hE,EAAAA,EAAAA,KAAY,KACxCmhE,EAAe,CAAEjkE,GAAIwP,IACrB6vD,MACC,CAAC7vD,EAAQ6vD,EAAW4E,IAEjBU,IAAwB7hE,EAAAA,EAAAA,KAAY,KACxCohE,EAAqB,CAAEn8C,OAAQvY,IAC/B6vD,MACC,CAAC6E,EAAsB10D,EAAQ6vD,IAE5BuF,IAAkB9hE,EAAAA,EAAAA,KAAY,KAClC2gE,IACApE,MACC,CAACA,EAAWoE,IAEToB,IAAa/hE,EAAAA,EAAAA,KAAY,KAC7BqhE,IACA9E,MACC,CAACA,EAAW8E,IAETW,IAAehiE,EAAAA,EAAAA,KAAY,KAC/B4gE,IACArE,MACC,CAACA,EAAWqE,IAETqB,IAAwBjiE,EAAAA,EAAAA,KAAY,KACxCshE,IACA/E,MACC,CAACA,EAAW+E,IAETY,IAAuBliE,EAAAA,EAAAA,KAAY,KACvC8gE,IACAvE,MACC,CAACA,EAAWuE,KAEf/lE,EAAAA,EAAAA,KAAU,KACRi4D,KAEOI,KACN,IAEH,MAAMnzD,IAAOC,EAAAA,EAAAA,KAEb,OACE,mBAACiiE,GAAA,EAAD,KACE,0BAAKzhE,UAAU,uBACb,mBAAC6G,GAAA,EAAD,CACEjH,OAAQs7D,EACR56D,UAAU,QACVpD,MAAQ,SAAQ2T,YAAYC,OAC5B9J,QAAS60D,GAERyD,GAAoBC,GACnB,mBAACh/D,EAAA,EAAD,CACEC,KAAK,OACLP,QAAS4gE,GAERthE,GAAK,aAGT+/D,GAAoBE,GACnB,mBAACj/D,EAAA,EAAD,CACEC,KAAK,OACLP,QAAS8gE,GAERxhE,GAAK,eAGT+/D,GAAoBG,GACnB,mBAACl/D,EAAA,EAAD,CACEC,KAAMunB,EAAY,UAAY,QAC9B9nB,QAASmhE,IAER7hE,GAAKwoB,EAAY,qBAAuB,qBAG5Ci3C,GACC,mBAACz+D,EAAA,EAAD,CACEC,KAAK,WACLP,QAASkhE,IAER5hE,GAAK,eAGTY,EAAAA,IAA2Bw/D,GAC1B,mBAACp/D,EAAA,EAAD,CACEC,KAAK,QACLP,QAASohE,IAER9hE,GAAK,SAGTY,EAAAA,IAA2Bu/D,GAC1B,mBAACn/D,EAAA,EAAD,CACEC,KAAK,SACLP,QAASqhE,IAER/hE,GAAK,WAGTqgE,GACC,mBAACr/D,EAAA,EAAD,CACEC,KAAMkD,EAAU,SAAW,OAC3BzD,QAAS+gE,GAERzhE,GAAKmE,EAAU,cAAgB,eAGlCq8D,GAAqBC,IACrB,mBAACz/D,EAAA,EAAD,CACEC,KAAK,aACLP,QAASghE,IAER1hE,GAAKygE,EAAqB,gBAAkB,sBAGhDZ,GACC,mBAAC7+D,EAAA,EAAD,CACEC,KAAMunB,EAAY,WAAa,UAC/B9nB,QAASihE,IAER3hE,GAAKwoB,EAAY,iBAAmB,6BAGzC,mBAACxnB,EAAA,EAAD,CACEC,KAAK,SACLP,QAASuhE,IAERjiE,GAAK,yBAEPsgE,GACC,mBAACt/D,EAAA,EAAD,CACEC,KAAK,QACLP,QAASshE,IAERhiE,GAAK,eAGTugE,GACC,mBAACv/D,EAAA,EAAD,CACEu2B,aAAW,EACXt2B,KAAK,SACLP,QAASi8B,GAER38B,GAAKuoD,EACF,iBACCoX,EAAgB,0BAA6Bn3C,EAAY,eAAiB,sBAIpF1N,GACC,mBAACiiB,GAAA,EAAD,CACE18B,OAAQ61B,EACRzuB,QAAS2uB,EACTtb,KAAMA,U,eC/QlB,MAAMqnD,IAAwB/uD,EAAAA,EAAAA,KAAU6pB,GAAOA,KAAM,KAAK,GA0K1D,IAAez+B,EAAAA,EAAAA,KAAKC,EAAAA,EAAAA,KACjBC,IACC,MAAMoc,GAAOoZ,EAAAA,EAAAA,IAAkBx1B,GAC/B,IAAKoc,EACH,MAAO,GAGT,MAAM,MAAEylB,EAAF,QAAS3H,IAAYwpC,EAAAA,EAAAA,IAAwB1jE,IAAW,IACxD,WAAEwjD,EAAF,SAAc1lC,GAAaoc,GAAW,GAE5C,MAAO,CACL9d,KAAAA,EACAylB,MAAAA,EACA2hB,WAAAA,EACA1lC,SAAAA,EACA6lD,sBAAuB9mE,QAAQmD,EAAO4wB,8BAfxB7wB,EAxKuB,IAOrC,IAPsC,SAC1C6O,EAD0C,KAE1CwN,EAF0C,MAG1CylB,EAH0C,WAI1C2hB,EAJ0C,SAK1C1lC,EAL0C,sBAM1C6lD,GACI,EACJ,MAAM,wBACJC,EADI,wBAEJC,EAFI,aAGJjoD,EAHI,qBAIJkoD,EAJI,oBAKJC,IACEhjE,EAAAA,EAAAA,MAGE8b,GAAWhiB,EAAAA,EAAAA,IAAyB,OACnCmpE,EAAcC,IAAmB7gE,EAAAA,EAAAA,IAAS,IAGjDhH,EAAAA,EAAAA,KAAU,KACR,MAAM,eAAE8nE,GAAmBxnE,OAC3B,IAAKwnE,EACH,OAGF,MAAMC,EAASjnE,SAAS8kB,eAAe,QACjCve,EAAe,KACnB,MAAM,cAAEw5B,GAAkB//B,SAC1B,GAAI+/B,GAAkBA,IAAkBpgB,EAAS7hB,QAAU,CACzD,MAAM,QAAEopE,EAAF,OAAW1oE,GAAWwoE,EAC5BC,EAAOllE,MAAM+b,UAAa,cAAaopD,OACvCD,EAAOllE,MAAMvD,OAAU,GAAEA,MACzBwB,SAAS86C,gBAAgBt5C,UAAY0lE,OAErCD,EAAOllE,MAAM+b,UAAY,GACzBmpD,EAAOllE,MAAMvD,OAAS,IAM1B,OAFAwoE,EAAevgE,iBAAiB,SAAUF,GAEnC,KACLygE,EAAetgE,oBAAoB,SAAUH,MAE9C,KAGHrH,EAAAA,EAAAA,KAAU,KACJggB,MAAAA,GAAAA,EAAM7d,IAAN6d,MAAY0B,GAAAA,EAAUpe,QACxBkc,EAAa,CAAE7N,OAAQqO,EAAK7d,GAAI0P,UAAW6P,EAAS,KACpDmmD,EAAgB,IAEhBA,GAAiB,KAElB,CAAC7nD,MAAAA,OAAD,EAACA,EAAM7d,GAAIqd,EAAckC,KAG5B1hB,EAAAA,EAAAA,KAAU,KACRioE,MAAMrvD,KAAK9X,SAASsC,iBAAmC,UAAUq1C,SAASyvB,IACxEA,EAAMr7D,SAAWpM,QAAQ+R,GAAY01D,IAAUznD,EAAS7hB,YAG1DqpE,MAAMrvD,KAAK9X,SAASsC,iBAAiC,yBAAyBq1C,SAAS0vB,IACrFA,EAAIC,gBAAkB51D,EAAW,QAAU,YAE5C,CAACA,KAGJxS,EAAAA,EAAAA,KAAU,KACHwS,GACHiO,EAAS7hB,QAASypE,SAEnB,CAAC71D,KAEJvE,EAAAA,EAAAA,KAAgB,KACMnN,SAASY,cAAgC,uBACjD2mE,SACX,CAACd,IAEJ,MAAMe,GAAiCrjE,EAAAA,EAAAA,KAAasjE,IAClDf,EAAwB,CAAE/hC,MAAO8iC,IAE7BA,EAASjlE,QACX+jE,GAAsBI,KAEvB,CAACA,EAAyBD,IAEvBgB,GAAWvjE,EAAAA,EAAAA,KAAY,KAC3B,GAAI+a,GAAQ0B,EAAU,CACpB,MAAM+mD,EAAgBb,EAAe,EACrCpoD,EAAa,CAAE7N,OAAQqO,EAAK7d,GAAI0P,UAAW6P,EAAS+mD,KACpDZ,EAAgBY,MAEjB,CAACzoD,EAAM4nD,EAAcpoD,EAAckC,IAEhCgnD,GAAazjE,EAAAA,EAAAA,KAAY,KAC7B,GAAI+a,GAAQ0B,EAAU,CACpB,MAAM+mD,EAAgBb,EAAe,EACrCpoD,EAAa,CAAE7N,OAAQqO,EAAK7d,GAAI0P,UAAW6P,EAAS+mD,KACpDZ,EAAgBY,MAEjB,CAACzoD,EAAM4nD,EAAcpoD,EAAckC,IAEtC,OACE,0BAAKvf,GAAG,eAAewD,UAAW6M,EAAW,SAAW,IACtD,0BAAK7M,UAAU,UACb,mBAACH,EAAA,EAAD,CACErF,KAAK,UACLsF,OAAK,EACLC,MAAM,cACNE,QAAS8hE,GAET,wBAAG/hE,UAAU,qBAEf,mBAACgjE,GAAA,EAAD,CACEn9D,IAAKiV,EACLxU,MAAOw5B,EACPv5B,SAAUo8D,KAGd,0BAAK3iE,UAAU,UACb,0BAAKA,UAAU,WACZ8/B,EACC/jB,MAAAA,GAAAA,EAAUpe,OACP,GAAEskE,EAAe,QAAQxgB,IACxB1lC,IAAaA,EAASpe,OACxB,aAEA,GAGF,mBAACkC,EAAA,EAAD,CACEC,OAAK,EACLtF,KAAK,UACLuF,MAAM,cAENE,QAAS,IAAM+hE,EAAoB,CAAEz3C,YAAYgzC,EAAAA,GAAAA,IAAc/qD,KAAKC,SACpEvS,UAAU,2BAEV,wBAAGF,UAAU,oBAInB,mBAACH,EAAA,EAAD,CACEC,OAAK,EACLtF,KAAK,UACLuF,MAAM,cACNE,QAAS4iE,EACT37D,UAAW6U,IAAaA,EAASpe,QAAUskE,IAAiBlmD,EAASpe,OAAS,GAE9E,wBAAGqC,UAAU,aAEf,mBAACH,EAAA,EAAD,CACEC,OAAK,EACLtF,KAAK,UACLuF,MAAM,cACNE,QAAS8iE,EACT77D,UAAW6U,IAAaA,EAASpe,QAA2B,IAAjBskE,GAE3C,wBAAGjiE,UAAU,qB,gFChMR,SAASijE,GACtB/mE,EACAgnE,GAKA,IAJAC,EAIA,uDAJS,EACTC,EAGA,wDAFAC,EAEA,wDADAC,EACA,wDACA,MAAMC,EAAarnE,EAAUonE,EAAe,aAAe,aACrDE,EAAaD,EAAarnE,EAAUonE,EAAe,cAAgB,gBACnEG,EAA4C,iBAAvBP,EACvBhnE,EAAUuB,iBAA8BylE,GACxCA,GACE,OAAEvlE,GAAW8lE,EACbC,EAA2B,GACjC,IAAIC,GAAU,EAEd,IAAK,IAAIx/C,EAAI,EAAGA,EAAIxmB,EAAQwmB,IAAK,CAC/B,MAAMrnB,EAAU2mE,EAAYt/C,GACtB1O,EAAK3Y,EAAQwmE,EAAe,aAAe,aAC3CM,EAAKnuD,EAAK3Y,EAAQwmE,EAAe,cAAgB,gBAKvD,GAJkBD,EACdO,GAAML,EAAaJ,GAAUS,GAAMJ,EAAaL,EAChD1tD,GAAM+tD,EAAaL,GAAUS,GAAML,EAAaJ,EAGlDO,EAAex2C,KAAK/I,GACpBw/C,GAAU,OACL,GAAIA,IAAYP,EACrB,MAIJ,MAAO,CAAEK,YAAAA,EAAaC,eAAAA,GCzBxB,SARA,SAAwBxnE,EAAwBY,GAA4C,IAAtBwmE,EAAsB,wDAC1F,MAAMC,EAAarnE,EAAUonE,EAAe,aAAe,aACrDE,EAAaD,EAAarnE,EAAUonE,EAAe,cAAgB,gBACnE7tD,EAAK3Y,EAAQwmE,EAAe,aAAe,aAC3CM,EAAKnuD,EAAK3Y,EAAQwmE,EAAe,cAAgB,gBACvD,OAAO7tD,EAAK8tD,GAAcK,EAAKJ,G,cCElB,SAASK,GAAsBltD,EAAkBkL,EAAenR,GAC7E,MAAMxU,EAAYwU,EAAazX,QAC/B,IAAKiD,GAAa2lB,EAAQ,EACxB,OAEF,MAAM,eAAE6hD,EAAF,YAAkBD,GAAgBR,GACtC/mE,EACAya,EAVoB,GAYpB,GACA,GAGF,IAAK8sD,EAAY9lE,SAAW8lE,EAAY5hD,GACtC,OAEF,MAAMiiD,EAAQJ,EAAe,GAC7B,IAAKA,EAAejnE,SAASolB,IACvBA,IAAUiiD,IAAUC,GAAe7nE,EAAWunE,EAAYK,IAAU,CACxE,MAAMt5D,EAAWqX,EAAQ6hD,EAAeA,EAAe/lE,OAAS,GAAK,QAAU,OAC/EqmE,EAAAA,GAAAA,GAAiB9nE,EAAWunE,EAAY5hD,GAAQrX,EAtB9B,K,eCDf,SAASy5D,GAAT,GAoBJ,IApBmC,SACpCp3D,EADoC,aAEpCy2D,EAFoC,iCAGpCY,EAHoC,6BAIpCC,EAJoC,kBAKpCC,EALoC,MAMpCtgD,EANoC,kBAOpCugD,EAPoC,SAQpCrpC,EARoC,QASpCh0B,GAWC,EACD,MAAOs9D,EAAmBC,IAAwBljE,EAAAA,EAAAA,KAAU,GAEtDmjE,GAAmBllE,EAAAA,EAAAA,KAAamlE,GAC/B3gD,GAIE4gD,EAAAA,GAAAA,GAAc5gD,EAAMnmB,OAAQ8mE,IAHzB,GAIT,CAAC3gD,IAEE6gD,GAAiBrlE,EAAAA,EAAAA,KAAY,CAACgH,EAAetE,KACjDA,EAAEgJ,iBACFu5D,GAAsB1iD,GAAW2iD,EAAiB3iD,EAAQvb,OACzD,CAACi+D,EAAsBC,IAEpBI,GAAmBtlE,EAAAA,EAAAA,KAAa0C,IACpC,GAAI8hB,GAASA,EAAMnmB,QAAU2mE,GAAqB,EAAG,CACnD,MAAMO,EAAO/gD,EAAMwgD,GACfO,IACF7iE,EAAEgJ,iBACFgwB,EAAS6pC,OAGZ,CAAC/gD,EAAOkX,EAAUspC,IAEfQ,GAAyBhhD,GAASwgD,EAAoBxgD,EAAMnmB,OAAS,EAmB3E,OAlBAtD,EAAAA,EAAAA,KAAU,KACH6pE,IAAoCY,GACvCP,EAAqBJ,GAAgC,EAAI,KAE1D,CAACW,EAAuBX,EAA8BD,KAEzD7pE,EAAAA,EAAAA,KAAU,IAAOwS,GAAWwpB,EAAAA,GAAAA,GAAyB,CACnDG,MAAOxvB,EACP+9D,KAAMX,GAAqBd,OAAepqE,EAAa8I,GAAqB2iE,GAAgB,EAAG3iE,GAC/FgjE,OAAQZ,GAAqBd,OAAepqE,EAAa8I,GAAqB2iE,EAAe,EAAG3iE,GAChGijE,OAAQb,IAAsBd,OAAepqE,EAAa8I,GAAqB2iE,GAAgB,EAAG3iE,GAClGkjE,QAASd,IAAsBd,OAAepqE,EAAa8I,GAAqB2iE,EAAe,EAAG3iE,GAClGmjE,MAAOd,EAAoBO,OAAmB1rE,EAC9Co5B,QAASsyC,SACN1rE,GAAY,CACfkrE,EAAmBO,EAAgBC,EAAkB/3D,EAAUy2D,EAAct8D,EAASq9D,IAGjFC,EC5CT,MAoFA,IAAevmE,EAAAA,EAAAA,KApFsB,IAK/B,IALgC,OACpC6B,EADoC,QAEpCoH,EAFoC,iBAGpCo+D,EAHoC,cAIpCC,GACI,EAEJ,MAAM30D,GAAe5X,EAAAA,EAAAA,IAAuB,OACtC,aAAEwQ,EAAF,qBAAgBE,IAAyBE,EAAAA,EAAAA,GAAkB9J,OAAQ1G,OAAWA,GAAW,GAEzFosE,GAAmBhmE,EAAAA,EAAAA,KAAY,SAACilB,GAAuC,IAAvBghD,EAAuB,wDAE3E,MAAMr/C,GAAYC,EAAAA,EAAAA,MAAYC,MAAMzB,KAC9BvK,EAAO8L,EAAU3B,GAClBnK,GAILgrD,EAAiBhrD,EAAMmrD,KACtB,CAACH,IAEEI,GAAsBlmE,EAAAA,EAAAA,KAAammE,IACvCH,EAAiBG,EAAOjpE,IAAI,KAC3B,CAAC8oE,IAEEI,EAAuBzB,GAAsB,CACjDp3D,SAAUjN,EACVkkB,MAAOuhD,EACPrqC,SAAUwqC,EACVnB,mBAAmB,EACnBH,kCAAkC,EAClCl9D,QAAAA,KAGF3M,EAAAA,EAAAA,KAAU,KACRwpE,GAAsB,uBAAwB6B,EAAsBh1D,KACnE,CAACg1D,KAEJrrE,EAAAA,EAAAA,KAAU,KACJgrE,IAAkBA,EAAc1nE,QAClCqJ,MAED,CAACq+D,EAAer+D,IAEnB,MAAM2+D,GAAkB9qD,EAAAA,EAAAA,GACtBwqD,MAAAA,GAAAA,EAAe1nE,OACX0nE,OACAnsE,EACJoQ,GAEIs8D,EAAsBP,IAAkBA,EAAc1nE,OACxDgoE,EACAN,EAEJ,IAAK/7D,GAAiBs8D,IAAwBA,EAAoBjoE,OAChE,OAGF,MAAMqC,GAAY+B,EAAAA,EAAAA,GAChB,gDACAyH,GAGF,OACE,0BAAKxJ,UAAWA,EAAW6F,IAAK6K,GAC7Bk1D,MAAAA,OADH,EACGA,EAAqB9/D,KAAI,CAAC,EAAQ+b,KAAT,IAAC,GAAErlB,GAAH,SACxB,mBAAC4nB,GAAA,EAAD,CACErZ,IAAKvO,EACLwD,UAAU,kCAEVC,QAAS,IAAMqlE,EAAiB9oE,GAChCi0B,MAAOi1C,IAAyB7jD,GAEhC,mBAACwC,GAAA,EAAD,CACEE,OAAQ/nB,EACR6/B,WAAW,QACXT,cAAY,Y,0BC5CxB,MA2PA,IAAe79B,EAAAA,EAAAA,KAzPuB,IAqBhC,IArBiC,OACrCiO,EADqC,SAErCC,EAFqC,YAGrC45D,EAHqC,QAIrCC,EAJqC,sBAKrCC,EALqC,QAMrC9S,EANqC,eAOrCzgC,EAPqC,cAQrClQ,EARqC,iBASrC0jD,EATqC,aAUrCC,EAVqC,kBAWrCC,EAXqC,cAYrCC,EAZqC,eAarCpI,EAbqC,eAcrCqI,EAdqC,gBAerCC,EAfqC,OAgBrCzQ,EAhBqC,aAiBrC0Q,EAjBqC,QAkBrCC,EAlBqC,aAmBrCC,EAnBqC,gBAoBrCC,GACI,EACJ,MAAMC,GAAaC,EAAAA,GAAAA,GAAYb,GAEzBc,GAAgBD,EAAAA,GAAAA,GAAsC,MACtDE,GAAiB/tE,EAAAA,EAAAA,MACjBguE,GAAkBjsD,EAAAA,EAAAA,GAAYgrD,GAC9BkB,EAAuBlB,EAAYloE,OAASkoE,EAAciB,EAC1DlnE,EAAS9E,QAAQ+qE,EAAYloE,SAC5BqpE,EAAWC,EAAaC,IAAiB5iE,EAAAA,GAAAA,KAC1C6iE,EAAUrsE,QAAQisE,GAAwBA,EAAqBK,OAAO5mC,GAAMA,EAAE6mC,SAC9E9nE,GAAOC,EAAAA,EAAAA,MAEP,qBACJ8nE,EADI,oBACkBC,EADlB,cACuCC,EADvC,qBACsDC,IACxDC,EAAAA,GAAAA,GACF9nE,EACA8mE,EACAL,EACAsB,EAAAA,GACA3B,OACA9sE,EACAopB,IAEI,mBACJslD,EADI,kBACgBC,EADhB,eACmCC,EADnC,YACmDC,IACrDC,EAAAA,GAAAA,GACFpoE,EACA8mE,EACAT,EACA0B,EAAAA,GACAtB,EACAH,EACAC,GACClT,IAGH54D,EAAAA,EAAAA,KAAU,IAAOuF,GAAS8hB,EAAAA,EAAAA,GAAsB6kD,QAAWrtE,GAAY,CAAC0G,EAAQ2mE,IAEhF,MACE0B,kBAAmBC,EADf,kBAEJC,EAFI,uBAGJC,EAHI,sBAIJC,IACEC,EAAAA,GAAAA,GAAuB1B,GAAgBb,IAA0BnmE,GAE/D2oE,GAAkBjpE,EAAAA,EAAAA,KAAY,KAC9BM,IACEm+D,EACF0I,IAEA7Q,OAGH,CAACh2D,EAAQ6mE,EAAiB7Q,EAAQmI,IAsB/ByK,GAAkBlpE,EAAAA,EAAAA,KAAa0C,IACnCA,EAAEgJ,iBACFk8D,IAEA,MAAQuB,cAAc,MAAEjuB,IAAYx4C,EAEpC,GAAIw4C,MAAAA,GAAAA,EAAO78C,OAAQ,CACjB,MAAM+qE,EAAWvB,EACb7E,MAAMrvD,KAAKunC,GAAO/3B,QAAQkmD,GACnBA,EAAKxtD,MAAQytD,EAAAA,GAAAA,IAA+BD,EAAKxtD,QAExDmnD,MAAMrvD,KAAKunC,GAEf8rB,EAAaoC,EAAUvB,MAExB,CAACA,EAASb,EAAcY,IAY3B,IAAKH,EACH,OAGF,MAAM8B,EAAe9B,EAAqBK,OAAO5mC,GAAMsoC,EAAAA,GAAAA,IAAkCtoC,EAAEuoC,YACrFC,EAAejC,EAAqBK,OAAO5mC,GAAMyoC,EAAAA,GAAAA,IAAkCzoC,EAAEuoC,YACrFG,GAAenC,EAAqBK,OAAO5mC,GAAM2oC,EAAAA,GAAAA,IAAkC3oC,EAAEuoC,YAE3F,IAAInhD,GAAQ,GAiDZ,OA/CEA,GAAQroB,EADNspE,EACW,0BACJG,EACI,0BACJE,GACI,0BAEA,yBAN2BnC,EAAqBppE,OAAQ,KAgDrE,mBAACgmB,GAAA,EAAD,CACE/jB,OAAQA,EACRoH,QAASu/D,EACT3iD,OA1CJ,WACE,GAAKmjD,EAIL,OACE,0BAAK/mE,UAAU,yBAAyBkC,IAAK3C,EAAK4iB,MAAQ,WAAQjpB,GAChE,mBAAC2G,EAAA,EAAD,CAAQC,OAAK,EAACC,MAAM,cAAcvF,KAAK,UAAU0F,UAAU,qBAAqBD,QAASsmE,GACvF,wBAAGvmE,UAAU,gBAEf,0BAAKA,UAAU,eAAe4nB,IAC9B,0BAAK5nB,UAAU,iCACb,mBAACH,EAAA,EAAD,CACEgG,IAAK+gE,EACL7mE,MAAM,UACNvF,KAAK,UACLwF,UAAU,sBACVC,QAASsoE,EACTz4D,cAAei2D,EAAwBoC,OAAoBjvE,GAE1DqG,EAAK,SAEPwmE,GACC,mBAAC,KAAD,CACEnmE,OAAQsoE,EACRkB,gBAAc,EACd5C,aAAeh0C,OAAgCt5B,EAAfstE,EAChC6C,eAAgB5C,EAChBz/D,QAASohE,EACTtlD,oBAAqBulD,EACrBzqC,gBAAiBpL,MAYjB82C,GACRtpE,UAAY,oBAAkBgnE,EAAY,UAAY,KAEtD,0BACEhnE,UAAU,cACVupE,YAAatC,EACbuC,OAAQhB,EACRiB,WA9EN,SAAwBznE,GACtBA,EAAEgJ,iBACFhJ,EAAEC,kBAEE4kE,EAAe5tE,UACjB0B,OAAOP,aAAaysE,EAAe5tE,SACnC4tE,EAAe5tE,aAAUC,IAyEvBwwE,YApHmB1nE,IACvB,MAAQ2nE,cAAeC,EAAUz/D,OAAQ0/D,GAAe7nE,EAGnD6nE,EAA8BjzD,QAAQ,kBAAoBgzD,IAC7D/C,EAAe5tE,QAAU0B,OAAOC,WAAWssE,EAnFnB,MAuFtB2C,GAAeA,EAA2BttE,QAAQ,8BAIlDqtE,GACF5nE,EAAEC,kBAGJilE,MAoGI,0BAAyB3nE,EAAK,4BAA6B,KAE1D4nE,EACC,0BAAKnnE,UAAU,+BACZ+mE,EAAqBjhE,KAAKgkE,GACzBA,EAAWf,SAAS9oC,WAAW,UAC3B,0BAAK5mC,IAAKywE,EAAWj7D,QAASsB,IAAI,KAClC,4BAAO9W,IAAKywE,EAAWj7D,QAASxD,UAAQ,EAACG,OAAK,EAACD,MAAI,OAI3D,0BAAKvL,UAAU,kCACZ+mE,EAAqBjhE,KAAKgkE,GACzB,mBAACC,GAAA,EAAD,CACE1nD,KAAMynD,EAAWE,SACjBC,WAAWC,EAAAA,GAAAA,IAAiBJ,EAAWE,SAAUF,EAAWf,UAC5DoB,YAAaL,EAAWr7D,eACxBjU,KAAMsvE,EAAWtvE,KACjB8oC,SAAO,OAMf,0BAAKtjC,UAAU,8BACb,mBAAC,GAAD,CACEJ,OAAQ0nE,EACRtgE,QAASugE,EACTnC,iBAAkBoC,EAClBnC,cAAeoC,IAEjB,mBAAC,KAAD,CACE7nE,OAAQgoE,EACRwC,OAAQtC,EACR9gE,QAAS6gE,EACTwC,cAAetC,EACf3B,eAAgBA,IAElB,mBAACkE,GAAA,EAAD,CACE9tE,GAAG,qBACHwP,OAAQA,EACRC,SAAUA,EACVs+D,wBAAsB,EACtBC,KAAM1E,EACN2E,gBAAiB9C,EAAAA,GACjBlkD,YAAalkB,EAAK,WAClB8T,SAAUgzD,EACVzQ,OAAQ2S,EACRmC,aAAc5vE,QAAQm4D,GAAW4S,EAAYloE,gB,eClRzD,MA+UA,IAAeI,EAAAA,EAAAA,KAzUiB,IAE1B,IAF2B,OAC/B6B,EAD+B,kBACvB+qE,EADuB,OACJ/U,EADI,QACI2Q,GAC/B,EAEJ,MAAMqE,GAAmB9xE,EAAAA,EAAAA,IAAyB,MAE5C+xE,GAAiB/xE,EAAAA,EAAAA,IAAuB,MAExCgyE,GAAchyE,EAAAA,EAAAA,IAAuB,OAEpCiyE,EAAUC,IAAe3pE,EAAAA,EAAAA,IAAiB,KAC1CizB,EAAS22C,IAAc5pE,EAAAA,EAAAA,IAAmB,CAAC,MAC3C6pE,EAAaC,IAAkB9pE,EAAAA,EAAAA,KAAS,IACxC+pE,EAAmBC,IAAwBhqE,EAAAA,EAAAA,KAAS,IACpDiqE,EAAYC,IAAiBlqE,EAAAA,EAAAA,KAAS,IACtCmqE,EAAUC,IAAepqE,EAAAA,EAAAA,OACzBqqE,EAAeC,IAAoBtqE,EAAAA,EAAAA,OACnCuqE,EAAWC,IAAgBxqE,EAAAA,EAAAA,KAAkB,GAE9C9B,GAAOC,EAAAA,EAAAA,KAEPssE,GAAaxsE,EAAAA,EAAAA,KAAauG,IAC1BjG,GAAUiG,EAAI5M,SAChB4M,EAAI5M,QAAQw3B,UAEb,CAAC7wB,KAEJvF,EAAAA,EAAAA,KAAU,IAAOuF,GAAS8hB,EAAAA,EAAAA,GAAsB6kD,QAAWrtE,GAAY,CAAC0G,EAAQ2mE,KAChFlsE,EAAAA,EAAAA,KAAU,KACHuF,IACHorE,EAAY,IACZC,EAAW,CAAC,KACZE,GAAe,GACfE,GAAqB,GACrBE,GAAc,GACdE,EAAY,IACZE,EAAiB,IACjBE,GAAa,MAEd,CAACjsE,KAEJvF,EAAAA,EAAAA,KAAU,IAAMyxE,EAAWlB,IAAmB,CAACkB,EAAYlsE,KAE3D0I,EAAAA,EAAAA,KAAgB,KACd,MAAMyjE,EAAajB,EAAY7xE,QAE3B8yE,GAAcP,IAAaO,EAAWC,YACxCD,EAAWC,UAAYR,KAExB,CAACA,IAEJ,MAAMS,GAAe3sE,EAAAA,EAAAA,KAAY,WAA+B,IAA9B4sE,EAA8B,uDAAP,GACvDjB,EAAW,IAAIiB,EAAY,KAC3BvsD,uBAAsB,KACpB,MAAMwsD,EAAOtB,EAAe5xE,QACvBkzE,IAILA,EAAK9wE,UAAU+hB,OAAO,YAAa+uD,EAAKna,aAjEtB,KAkElBma,EAAKC,SAAS,CAAEn2D,IAAKk2D,EAAKna,aAAcqa,SAAU,iBAEnD,IAEGC,GAAehtE,EAAAA,EAAAA,KAAY,KAE/B,GADAusE,GAAa,IACRjsE,EACH,OAGF,MAAM2sE,EAAkBxB,EAAS1iC,OAAOoP,UAAU,EAzE1B,KA0ElB+0B,EAAiBl4C,EAAQxuB,KAAK2mE,GAAMA,EAAEpkC,OAAOoP,UAAU,EA3EvC,OA2E8Dh1B,QAAQgqD,GAAMA,EAAE9uE,SAEpG,IAAK4uE,GAAmBC,EAAe7uE,OAAS,EAY9C,OAXAqtE,EAAYuB,GACRC,EAAe7uE,OACb6uE,EAAe7uE,OAAS,EAC1BsuE,EAAaO,GAEbvB,EAAWuB,GAGbP,SAEFJ,GAAa,GAIf,GAAIP,KAAgBI,IAAkBc,EAAepxD,OAAOswD,KAE1D,YADAG,GAAa,GAIf,MAOMvmC,EAAsB,CAC1BonC,QAAS,CACP3B,SAAUwB,EACVI,QAVYH,EACb1mE,KAAI,CAAC9E,EAAM6gB,KAAP,CACH7gB,KAAMA,EAAKqnC,OACX0wB,OAAQ3uC,OAAOvI,MACXuI,OAAOvI,KAAW6pD,GAAiB,CAAEkB,SAAS,WAO7C1B,GAAe,CAAE2B,UAAU,MAC5BzB,GAAqB,CAAE0B,gBAAgB,MACvCxB,GAAc,CAAEyB,MAAM,KAI9B,GAAIzB,EAAY,CACd,MAAM,KAAEtqE,EAAF,SAAQgsE,GAAcxB,IAAYyB,EAAAA,GAAAA,GAAkBzB,EAAS/zB,UAAU,EAjHvD,OAiHoF,GAE1GnS,EAAQynC,KAAO,CACbG,eAAgB,CAACxB,MACb1qE,GAAQ,CAAEwqE,SAAUxqE,MACpBgsE,GAAY,CAAEG,iBAAkBH,IAIxCpX,EAAOtwB,KACN,CACD1lC,EACAmrE,EACAz2C,EACAg3C,EACAI,EACAR,EACAE,EACAxV,EACAqW,EACAT,IAGI4B,GAAe9tE,EAAAA,EAAAA,KAAY,CAACuiB,EAAe7gB,KAC/C,MAAMkrE,EAAa,IAAI53C,GACvB43C,EAAWrqD,GAAS7gB,EAChBkrE,EAAWA,EAAWvuE,OAAS,GAAG0qC,OAAO1qC,QAAUuuE,EAAWvuE,OA9I5C,GA+IpBsuE,EAAaC,GAEbjB,EAAWiB,KAEZ,CAAC53C,EAAS23C,IAEPoB,GAAe/tE,EAAAA,EAAAA,KAAauiB,IAChC,MAAMqqD,EAAa,IAAI53C,GACvB43C,EAAW16B,OAAO3vB,EAAO,GACzBopD,EAAWiB,GACXvsD,uBAAsB,KACfkrD,EAAe5xE,SAIpB4xE,EAAe5xE,QAAQoC,UAAU+hB,OAAO,YAAaytD,EAAe5xE,QAAQ+4D,aA/J1D,UAiKnB,CAAC19B,IAEEg5C,GAA4BhuE,EAAAA,EAAAA,KAAa23C,IAC7C00B,EAAiB10B,KAChB,CAAC00B,IAEE4B,GAA0BjuE,EAAAA,EAAAA,KAAa0C,IAC3CmpE,EAAenpE,EAAEmI,OAAO+mB,WACvB,IAEGs8C,GAA8BluE,EAAAA,EAAAA,KAAa0C,IAC/CqpE,EAAqBrpE,EAAEmI,OAAO+mB,WAC7B,IAEGu8C,GAAuBnuE,EAAAA,EAAAA,KAAa0C,IACxCupE,EAAcvpE,EAAEmI,OAAO+mB,WACtB,IAEGw8C,GAAiBpuE,EAAAA,EAAAA,KAAa0C,IAChB,KAAdA,EAAE2rE,SACJrB,MAED,CAACA,IAEEsB,GAAuBtuE,EAAAA,EAAAA,KAAa0C,IACxCgpE,EAAYhpE,EAAEmI,OAAO7D,SACpB,IAEGunE,GAAmBvuE,EAAAA,EAAAA,KAAY,KACnC,GAAIssE,IAAcb,EAAS1iC,OAAO1qC,OAChC,OAAO4B,EAAK,+BAIb,CAACqsE,EAAWrsE,EAAMwrE,IAEf+C,GAAkBxuE,EAAAA,EAAAA,KAAauiB,IACnC,MAAM2qD,EAAiBl4C,EAAQxuB,KAAK2mE,GAAMA,EAAEpkC,SAAQ5lB,QAAQgqD,GAAMA,EAAE9uE,SACpE,GAAIiuE,GAAaY,EAAe7uE,OAAS,IAAM22B,EAAQzS,GAAOwmB,OAAO1qC,OACnE,OAAO4B,EAAK,8BAGb,CAACqsE,EAAWrsE,EAAM+0B,IAqBrB,SAASy5C,IACP,OAAOz5C,EAAQxuB,KAAI,CAACizD,EAAQl3C,IAC1B,0BAAK7hB,UAAU,kBACb,mBAACujB,GAAA,EAAD,CACEyN,MAAOnP,IAAUyS,EAAQ32B,OAAS,GAnOlB,KAmOuB22B,EAAQ32B,OAC3C4B,EAAK,cACLA,EAAK,wBACTqnB,MAAOknD,EAAgBjsD,GACvBvb,MAAOyyD,EAEPxyD,SAAWvE,GAAMorE,EAAavrD,EAAO7f,EAAEqI,cAAc/D,OACrD0nE,WAAYN,IAEb7rD,IAAUyS,EAAQ32B,OAAS,GAC1B,mBAACkC,EAAA,EAAD,CACEG,UAAU,uBACVF,OAAK,EACLC,MAAM,cACNvF,KAAK,UACL0F,UAAWX,EAAK,UAEhBU,QAAS,IAAMotE,EAAaxrD,IAE5B,wBAAG7hB,UAAU,mBAoBvB,OACE,mBAAC2jB,GAAA,EAAD,CAAO/jB,OAAQA,EAAQoH,QAASu/D,EAAS3iD,OA7DvC,0BAAK5jB,UAAU,0BACb,mBAACH,EAAA,EAAD,CAAQC,OAAK,EAACC,MAAM,cAAcvF,KAAK,UAAU0F,UAAU,uBAAuBD,QAASsmE,GACzF,wBAAGvmE,UAAU,gBAEf,0BAAKA,UAAU,eAAeT,EAAK,YACnC,mBAACM,EAAA,EAAD,CACEE,MAAM,UACNvF,KAAK,UACLwF,UAAU,sBACVC,QAASqsE,GAER/sE,EAAK,YAkDqDS,UAAU,aACzE,mBAACujB,GAAA,EAAD,CACE1d,IAAK+kE,EACL55C,MAAOzxB,EAAK,gBACZ+G,MAAOykE,EACPnkD,MAAOinD,IACPtnE,SAAUqnE,EACVI,WAAYN,IAEd,0BAAK1tE,UAAU,oBAEf,0BAAKA,UAAU,6BAA6B6F,IAAKglE,GAC/C,yBAAI7qE,UAAU,kBAAkBT,EAAK,gBAEpCqsE,GAvBP,WACE,MAAMY,EAAiBl4C,EAAQxuB,KAAK2mE,GAAMA,EAAEpkC,SAAQ5lB,QAAQgqD,GAAMA,EAAE9uE,SAEpE,OAAO2tE,KAAgBI,IAAkBc,EAAepxD,OAAOswD,MAC7D,wBAAG1rE,UAAU,SAAST,EAAK,6BAmBX0uE,GACb3C,EACC,mBAACj3C,GAAA,EAAD,CACEhS,KAAK,gBACLiS,QA/BDy5C,IACJjoE,KAAI,CAACkrB,EAAOnP,KAAR,CAAqBvb,MAAO8jB,OAAOvI,GAAQmP,MAAAA,EAAOk9C,OAAQrsD,IAAUyS,EAAQ32B,OAAS,MA+BpF4I,SAAU+mE,IAGZS,KAKJ,0BAAK/tE,UAAU,oBAEf,0BAAKA,UAAU,cACX2qE,GACA,mBAAC15C,GAAA,EAAD,CACED,MAAOzxB,EAAK,iBACZ2xB,QAASg6C,EACT3kE,SAAUgnE,IAGd,mBAACt8C,GAAA,EAAD,CACED,MAAOzxB,EAAK,gBACZ2xB,QAASk6C,EACTlkE,SAAUokE,EACV/kE,SAAUinE,IAEZ,mBAACv8C,GAAA,EAAD,CACED,MAAOzxB,EAAK,YACZ2xB,QAASo6C,EACTpkE,SAAUkkE,EACV7kE,SAAUknE,IAEXnC,GACC,sCACE,yBAAItrE,UAAU,kBAAkBT,EAAK,6BACrC,0BACEsG,IAAKilE,EACL9qE,UAAU,eACVyiE,iBAAe,EACfvgE,IAAI,OACJqE,SAAWvE,GAAMypE,EAAYzpE,EAAEqI,cAAc2hE,aAE/C,0BAAKhsE,UAAU,QAAQT,EAAK,qC,qCCrVxC,MAqBA,IAAexB,EAAAA,EAAAA,KArBmB,IAA+B,IAA9B,MAAEowE,EAAF,MAAS19C,EAAT,QAAgBxwB,GAAc,EAC/D,MAAMm3B,GAAc93B,EAAAA,EAAAA,KAAa0C,IAE/BA,EAAEgJ,iBAEF/K,EAAQkuE,EAAMC,OAAQD,EAAM3xE,MAC3B,CAAC2xE,EAAOluE,IAEX,OACE,0BACED,UAAY,gBAAcywB,EAAQ,QAAU,IAC5CtX,YAAaie,EACbxP,MAAQ,IAAGumD,EAAME,MAAM,OAEtBC,EAAAA,GACGH,EAAMC,OACN,0BAAK/0E,IAAM,kBAAiB80E,EAAM11D,YAAatI,IAAKg+D,EAAMC,OAAQG,QAAQ,aCoDpF,IAAexwE,EAAAA,EAAAA,KAvDqB,IAE9B,IAF+B,SACnCywE,EADmC,MACzB3sD,EADyB,UAClB4sD,EADkB,oBACP9rC,EADO,aACcr5B,EADd,cAC4B+gE,GAC3D,EAEJ,MAAMxkE,GAAM/M,EAAAA,EAAAA,IAAuB,OAEnC41E,EAAAA,GAAAA,IAAe7oE,EAAK88B,GAEpB,MAAMn5B,GAAuBkqC,EAAAA,GAAAA,GAAmBpqC,GAE1C/J,GAAOC,EAAAA,EAAAA,KAEPmvE,EAAexuE,EAAAA,GACjBM,KAAKiC,OAAOwb,EAAAA,EAAAA,MAAiB5kB,MAzBF,GAyBhB,IA3BiB,EA6B1BK,EAAS,GAAA8G,KAAKmuE,KAAKJ,EAASpE,OAAOzsE,OAASgxE,GAElD,OACE,0BACE9oE,IAAKA,EACLkF,IAAKyjE,EAAShyE,GACdA,GAAK,kBAAiBqlB,IACtB7hB,UAAU,cAEV,wBAAGA,UAAU,kBAAkBkC,IAAI,QAChC3C,EAAqB,WAAhBivE,EAAShyE,GAAkB,iBAAoB,QAAOqlB,MAE9D,0BACE7hB,WAAW+B,EAAAA,EAAAA,GAAe,uBAAwByH,GAClDtM,MAAQ,WAAUvD,OAClBuI,IAAK3C,EAAK4iB,MAAQ,WAAQjpB,GAEzBoQ,GAAgBklE,EAASpE,OAAOtkE,KAAKuc,IACpC,MAAM8rD,EAAQM,EAAUpsD,GAExB,IAAK8rD,EACH,OAIF,MAAMU,EAAiB,OAAQV,EAAQA,EAAQA,EAAM,GAErD,OACE,mBAAC,GAAD,CACEpjE,IAAK8jE,EAAeryE,GACpB2xE,MAAOU,EACP5uE,QAASoqE,YChCjByE,GAA4C,CAChDC,OAAQ,cACRC,OAAQ,aACRC,OAAQ,eACRC,MAAO,YACPC,SAAU,aACVC,OAAQ,WACRC,QAAS,YACTC,QAAS,gBACTC,MAAO,aAUHC,GAAmC,GAEzC,IAAIC,GACAC,GACAC,GAwKJ,UAAe5xE,EAAAA,EAAAA,KAAKC,EAAAA,EAAAA,KACjBC,IAAuB8oB,EAAAA,GAAAA,IAAK9oB,EAAQ,CAAC,kBADpBD,EAtK2B,IAEzC,IAF0C,UAC9CgC,EAD8C,cACnCqqE,EADmC,aACpBpE,GACtB,EAEJ,MAAMv1D,GAAe5X,EAAAA,EAAAA,IAAuB,MAEtC82E,GAAY92E,EAAAA,EAAAA,IAAuB,OAElC+2E,EAAYC,IAAiBzuE,EAAAA,EAAAA,OAC7B+oE,EAAQ2F,IAAa1uE,EAAAA,EAAAA,OACrB2uE,EAAqBC,IAA0B5uE,EAAAA,EAAAA,IAAS,IAEvDwgC,QAASc,IAAwBZ,EAAAA,GAAAA,IAAwB,CAC/DC,QAAStxB,EACTuxB,WAtB0B,MAuBxBiuC,IACFA,EAAQp9B,SAASq9B,IACf,MAAM,GAAE3zE,GAAO2zE,EAAMhmE,OACrB,IAAK3N,IAAOA,EAAGyjC,WAAW,mBACxB,OAGF,MAAMpe,EAAQzG,OAAO5e,EAAGqxB,QAAQ,kBAAmB,KACnD2hD,GAAsB3tD,GAASsuD,EAAM78B,kBAGvC,MAAM88B,EAA0BZ,GAC7B1pE,KAAI,CAACwtC,EAAgBzxB,KAAjB,CAA8BA,MAAAA,EAAOyxB,eAAAA,MACzC7wB,QAAO,QAAC,eAAE6wB,GAAH,SAAwBA,KAE7B88B,EAAwBzyE,QAI7BsyE,EAAuBG,EAAwB3vE,KAAKiC,MAAM0tE,EAAwBzyE,OAAS,IAAIkkB,WAGjGsb,EAAAA,GAAAA,GAAoByyC,EAAU32E,SAAUkH,EAAAA,KAGxC9F,EAAAA,EAAAA,KAAU,KACR,IAAKw1E,EACH,OAGF,MAAMjsD,EAASgsD,EAAU32E,QACzB,IAAK2qB,EACH,OAGF,MAAMysD,EA3DkB,GA2DRL,EAA4CpsD,EAAO83B,YAAc,EAAI40B,IAErFC,EAAAA,GAAAA,GAA2B3sD,EAAQysD,KAClC,CAACR,EAAYG,IAEhB,MAAMzwE,GAAOC,EAAAA,EAAAA,KAEPgxE,GAAgB9wE,EAAAA,EAAAA,KAAQ,KAC5B,IAAKmwE,EACH,OAAO3vC,GAAAA,EAET,MAAMuwC,EAAkB,IAAIZ,GAS5B,OARI5J,MAAAA,GAAAA,EAActoE,QAChB8yE,EAAgBC,QAAQ,CACtBl0E,GAAI,SACJ6lB,KAAM9iB,EAAK,kBACX6qE,OAAQnE,IAILwK,IACN,CAACZ,EAAYtwE,EAAM0mE,KAGtB5rE,EAAAA,EAAAA,KAAU,KACRO,YAAW,KACT,MAAM+1E,EAAO,KACXb,EAAcH,GAAUE,YAExBE,EAAUJ,GAAUvF,SAGlBuF,GACFgB,IAwERx1B,iBAQE,OAPKs0B,KACHA,GAAmB,mCACnBC,UAAsBD,IAAkBmB,QAExCjB,IAAYkB,EAAAA,GAAAA,IAAgBnB,KAGvBD,GA9EDqB,GACGz2C,KAAKs2C,KAnGa,OAsGxB,IAEH,MAAMI,GAAiBzxE,EAAAA,EAAAA,KAAauiB,IAClCouD,EAAuBpuD,GACvB,MAAMmvD,EAAa71E,SAAS8kB,eAAgB,kBAAiB4B,MAC7DmiD,EAAAA,GAAAA,GAAiBtzD,EAAazX,QAAU+3E,EAAY,QAxGnC,GADU,OA0G1B,IAEGC,GAAoB3xE,EAAAA,EAAAA,KAAY,CAAC6uE,EAAe9rD,KACpDgoD,EAAc8D,EAAO9rD,KACpB,CAACgoD,IAEEloC,GAAoBC,EAAAA,GAAAA,GAAkB,GAAI8uC,EAAAA,IAoB1CC,GAAqBpvE,EAAAA,EAAAA,GAAe,cAAe/B,GAEzD,OAAKoqE,GAAWjoC,EASd,0BAAKniC,UAAWmxE,GACd,0BAAKtrE,IAAK+pE,EAAW5vE,UAAU,qBAAqBkC,IAAK3C,EAAK4iB,MAAQ,MAAQ,IAC3EquD,EAAc1qE,KA/BrB,SAA8B0oE,EAA6B3sD,GACzD,MAAMrhB,EAAOsuE,GAAkBN,EAAShyE,IAExC,OAAOgE,GACL,mBAACX,EAAA,EAAD,CACEG,UAAY,sBAAoB6hB,IAAUmuD,EAAsB,YAAc,IAC9ElwE,OAAK,EACLsxE,OAAK,EACLrxE,MAAM,cAENE,QAAS,IAAM8wE,EAAelvD,GAC9B3hB,UAAWsuE,EAASnsD,MAEpB,wBAAGriB,UAAWQ,SAoBhB,0BACEqF,IAAK6K,EACL1Q,WAAW+B,EAAAA,EAAAA,GAAe,gCAAiCiG,EAAAA,GAAe,eAAiB,kBAE1FwoE,EAAc1qE,KAAI,CAAC0oE,EAAUrqD,IAC5B,mBAAC,GAAD,CACEqqD,SAAUA,EACV3sD,MAAOsC,EACPsqD,UAAWrE,EACXznC,oBAAqBA,EACrBr5B,aAAc0mE,GAAuB7rD,EAAI,GAAK6rD,GAAuB7rD,EAAI,EACzEkmD,cAAe4G,QAtBrB,0BAAKjxE,UAAWmxE,GACd,mBAAC1sD,GAAA,EAAD,W,eChKR,MACM4sD,GAAiBlxE,EAAAA,GAA0B,EAAI,GA8DrD,IAAepC,EAAAA,EAAAA,KA3DkB,IAW3B,IAX4B,WAChCs1C,EADgC,YAEhCi+B,EAFgC,MAGhCzvD,EAHgC,aAIhCvY,EAJgC,iBAKhCioE,EALgC,gBAMhC3zC,EANgC,oBAOhC+E,EAPgC,gBAQhC6uC,EARgC,gBAShCC,EATgC,cAUhCC,GACI,EAEJ,MAAM7rE,GAAM/M,EAAAA,EAAAA,IAAuB,OAEnC41E,EAAAA,GAAAA,IAAe7oE,EAAK88B,GAEpB,MAAMn5B,GAAuBkqC,EAAAA,GAAAA,GAAmBpqC,GAE1CqoE,EAAiBxxE,EAAAA,GACnBM,KAAKiC,OAAOwb,EAAAA,EAAAA,MAAiB5kB,MAtBF,IAsBuCs4E,EAAAA,EAAsBP,KAxB1D,EA0B5B13E,EAAS8G,KAAKmuE,KAAKv7B,EAAWnb,MAAQy5C,IAAmBC,EAAAA,EAAsBP,IAE/EQ,GAAwBnyE,EAAAA,EAAAA,KAAQ,IACpC6xE,EAAmB,IAAI3hC,IAAI2hC,EAAiBzrE,KAAI,QAAC,GAAEtJ,GAAH,SAAYA,WAAOtD,GAClE,CAACq4E,IAEJ,OACE,0BACE1rE,IAAKA,EACLkF,IAAKsoC,EAAW72C,GAChBA,GAAK,eAAcqlB,IACnB7hB,UAAU,cAEV,wBAAGA,UAAU,mBAAmBqzC,EAAWzrB,OAC3C,0BACE5nB,WAAW+B,EAAAA,EAAAA,GAAe,uBAAwByH,GAClDtM,MAAQ,WAAUvD,QAEjB2P,GAAgB+pC,EAAWW,UAAYX,EAAWW,SAASluC,KAAKuuC,GAC/D,mBAACD,GAAA,EAAD,CACErpC,IAAKspC,EAAQ73C,GACb63C,QAASA,EACT75C,KAAMo3E,EAAAA,EACNjvC,oBAAqBA,EACrBmvC,WAAYR,EACZrxE,QAASuxE,EACTtwC,SAAUmT,EACV09B,cAAeF,MAAAA,GAAAA,EAAuBG,IAAI39B,EAAQ73C,IAAMi1E,OAAkBv4E,EAC1E+4E,YAAcJ,MAAAA,GAAAA,EAAuBG,IAAI39B,EAAQ73C,SAAsBtD,EAAhBw4E,EACvD9zC,gBAAiBA,WChCvBs0C,GAAqC,GA+O3C,IAAen0E,EAAAA,EAAAA,KAAKC,EAAAA,EAAAA,KAClB,CAACC,EAAD,KAAoC,IAA3B,OAAE+N,GAAyB,EAClC,MAAM,SACJ8oC,EADI,MAEJH,EAFI,OAGJo6B,EAHI,SAIJoD,GACEl0E,EAAO+1C,SAELpW,GAAkBnL,EAAAA,EAAAA,IAAqBx0B,EAAQ+N,GAErD,MAAO,CACLomE,eAAgBrD,EAAO/6B,SACvBu9B,iBAAkBY,EAASn+B,SAC3Ba,gBAAiBC,EACjBu9B,YAAa19B,EAAMC,OACnB09B,WAAYr0E,EAAOod,SAASC,MAAM85B,mBAClCxX,gBAAAA,KAjBc5/B,EA7O6B,IAa3C,IAb4C,OAChDgO,EADgD,SAEhDC,EAFgD,UAGhDjM,EAHgD,YAIhDsxE,EAJgD,gBAKhD1T,EALgD,eAMhDwU,EANgD,iBAOhDb,EAPgD,YAQhDc,EARgD,gBAShDx9B,EATgD,WAUhDy9B,EAVgD,gBAWhD10C,EAXgD,gBAYhD4zC,GACI,EACJ,MAAM,mBACJe,EADI,iBAEJC,EAFI,cAGJjY,EAHI,YAIJD,IACEt7D,EAAAA,EAAAA,MAGE0R,GAAe5X,EAAAA,EAAAA,IAAuB,MAEtC82E,GAAY92E,EAAAA,EAAAA,IAAuB,OAClC25E,EAAgBC,IAAqBrxE,EAAAA,EAAAA,IAAiB,GACvDsxE,GAAoBC,EAAAA,GAAAA,GAAqB5mE,EAAQC,IAE/C41B,QAASc,IAAwBZ,EAAAA,GAAAA,IAAwB,CAC/DC,QAAStxB,EACTuxB,WAlCkC,MAmChCiuC,IACFA,EAAQp9B,SAASq9B,IACf,MAAM,GAAE3zE,GAAO2zE,EAAMhmE,OACrB,IAAK3N,IAAOA,EAAGyjC,WAAW,gBACxB,OAGF,MAAMpe,EAAQzG,OAAO5e,EAAGqxB,QAAQ,eAAgB,KAChDqkD,GAAwBrwD,GAASsuD,EAAM78B,kBAGzC,MAAM88B,EAA0B8B,GAC7BpsE,KAAI,CAACwtC,EAAgBzxB,KAAjB,CAA8BA,MAAAA,EAAOyxB,eAAAA,MACzC7wB,QAAO,QAAC,eAAE6wB,GAAH,SAAwBA,KAE7B88B,EAAwBzyE,QAI7B+0E,EAAkBtC,EAAwB3vE,KAAKiC,MAAM0tE,EAAwBzyE,OAAS,IAAIkkB,WAEpFggB,QAAS0T,IAAiCxT,EAAAA,GAAAA,IAAwB,CAAEC,QAAS4tC,IAE/ErwE,GAAOC,EAAAA,EAAAA,KAEPqzE,EAAiB/3E,QAAQu3E,GAEzBS,GAAUpzE,EAAAA,EAAAA,KAAQ,IACjB2yE,EAIE,CACL,CACE71E,GAAI,SACJorB,MAAOroB,EAAK,kBACZy0C,SAAUo+B,EACVl6C,MAAOk6C,EAAez0E,QAExB,CACEnB,GAAI,WACJorB,MAAOroB,EAAK,oBACZy0C,SAAUu9B,EACVr5C,MAAOq5C,EAAiB5zE,WAEvB00E,EAAYvsE,KAAKtJ,GAAOq4C,EAAgBr4C,KAAKimB,OAAO3nB,UAhBhDolC,GAAAA,GAkBR,CAACmyC,EAAa9yE,EAAM6yE,EAAgBb,EAAkB18B,IAEnDk+B,GAAkBrzE,EAAAA,EAAAA,KAAQ,IAC9BmzE,GAC4D,IAAzDC,EAAQrwD,QAAQ/nB,IAAD,uBAASA,EAAIs5C,gBAAb,aAAS,EAAcr2C,UAAQA,QAChD,CAACm1E,EAASD,KAEbx4E,EAAAA,EAAAA,KAAU,KACJi3E,IACFiB,IACAI,EAAkB,CAAEx3D,KAAM,qBAE3B,CAACm2D,EAAaiB,EAAoBI,KAErCx1C,EAAAA,GAAAA,GAAoByyC,EAAU32E,UAG9BoB,EAAAA,EAAAA,KAAU,KACR,IAAKw4E,EACH,OAGF,MAAMjvD,EAASgsD,EAAU32E,QACzB,IAAK2qB,EACH,OAGF,MAAMysD,EA9GkB,GA8GRoC,GAAwC7uD,EAAO83B,YAAc,EAAI40B,KAEjFC,EAAAA,GAAAA,GAA2B3sD,EAAQysD,KAClC,CAACwC,EAAgBJ,IAEpB,MAAMxU,GAAmB3+D,EAAAA,EAAAA,KAAauiB,IACpC6wD,EAAkB7wD,GAClB,MAAMmxD,EAAe73E,SAAS8kB,eAAgB,eAAc4B,MAC5DmiD,EAAAA,GAAAA,GAAiBtzD,EAAazX,QAAU+5E,EAAc,aAAS95E,EAvHpC,OAwH1B,IAEG+5E,GAAsB3zE,EAAAA,EAAAA,KAAY,CAAC+0C,EAAqBlhB,EAAoB4qC,KAChFyT,EAAgBn9B,EAASlhB,EAAU4qC,GACnCyU,EAAiB,CAAEn+B,QAAAA,MAClB,CAACm+B,EAAkBhB,IAEhB0B,GAAsB5zE,EAAAA,EAAAA,KAAa+0C,IACvCkmB,EAAc,CAAElmB,QAAAA,MACf,CAACkmB,IAEE4Y,GAAoB7zE,EAAAA,EAAAA,KAAa+0C,IACrCimB,EAAY,CAAEjmB,QAAAA,MACb,CAACimB,IAEErwD,GAAkB3K,EAAAA,EAAAA,KAAY,KAClCqzE,EAAkB,CAAEx3D,KAAM,oBACzB,CAACw3D,IAEExwC,GAAoBC,EAAAA,GAAAA,GAAkB,GAAIC,EAAAA,GAuD1C+wC,GAAgBrxE,EAAAA,EAAAA,GAAe,gBAAiB/B,GAEtD,OAAK6yE,GAAmB1wC,IAAqB4wC,GAAoBnV,EAe/D,0BAAK59D,UAAWozE,GACd,0BACEvtE,IAAK+pE,EACL5vE,UAAU,kDAET8yE,EAAQhtE,KA3Ef,SAAqButC,EAAgCxxB,GAAe,MAClE,MAAMoyB,EAAY,UAAGZ,EAAWW,gBAAd,aAAG,EAAsB,GACrCq/B,GAAkBtxE,EAAAA,EAAAA,GACtB,uCACA8f,IAAU4wD,GAAkB,aAG9B,MAAsB,WAAlBp/B,EAAW72C,IAAqC,aAAlB62C,EAAW72C,IAAqB62C,EAAWQ,eAAiBI,EAE1F,mBAACp0C,EAAA,EAAD,CACEkL,IAAKsoC,EAAW72C,GAChBwD,UAAWqzE,EACXnzE,UAAWmzC,EAAWzrB,MACtB9nB,OAAK,EACLsxE,MAAyB,WAAlB/9B,EAAW72C,IAAqC,aAAlB62C,EAAW72C,GAChDuD,MAAM,cAENE,QAAS,IAAMg+D,EAAiBp8C,IAEb,WAAlBwxB,EAAW72C,GACV,wBAAGwD,UAAU,gBACO,aAAlBqzC,EAAW72C,GACb,wBAAGwD,UAAU,kBACXqzC,EAAWa,SACb,mBAAC,GAAD,CACEb,WAAYA,EACZ1Q,oBAAqB4S,IAGvB,mBAAC,GAAD,CACElC,WAAYA,EACZ1Q,oBAAqB4S,KAO3B,mBAACnB,GAAA,EAAD,CACErpC,IAAKsoC,EAAW72C,GAChB63C,QAASJ,EACTz5C,KAAM44C,EAAAA,GACNxrB,MAAOyrB,EAAWzrB,MAClB5nB,UAAWqzE,EACX1wC,oBAAqB4S,EACrBt1C,QAASg+D,EACT/8B,SAAUrf,EACVyyB,eAAa,QA8BjB,0BACEzuC,IAAK6K,EACLvF,YAAalB,EACbjK,WAAW+B,EAAAA,EAAAA,GAAe,kCAAmCiG,EAAAA,GAAe,eAAiB,kBAE5F8qE,EAAQhtE,KAAI,CAACutC,EAAYlvB,IACxB,mBAAC,GAAD,CACEpZ,IAAKsoC,EAAW72C,GAChB62C,WAAYA,EACZi+B,YAAax2E,QAAQw3E,GAAchB,GACnCzvD,MAAOsC,EACPwe,oBAAqBA,EACrBr5B,aAAcmpE,GAAkBtuD,EAAI,GAAKsuD,GAAkBtuD,EAAI,EAC/DqtD,gBAAiByB,EACjBxB,gBAAiByB,EACjBxB,cAAeyB,EACf5B,iBAAkBA,EAClB3zC,gBAAiBA,QArCvB,0BAAK59B,UAAWozE,GACZxV,EAEEmV,EACF,0BAAK/yE,UAAU,mBAAmBT,EAAK,eAEvC,mBAACklB,GAAA,EAAD,MAJA,0BAAKzkB,UAAU,mBAAmBT,EAAK,wC,iOCrNjD,MAsLA,IAAexB,EAAAA,EAAAA,KAtLiB,IAQ1B,YAR2B,IAC/Bo/D,EAD+B,WAE/BrjE,EAF+B,UAG/BkG,EAH+B,oBAI/B2iC,EAJ+B,QAK/B1iC,EAL+B,cAM/BqzE,EAN+B,gBAO/B11C,GACI,EAEJ,MAAM/3B,GAAM/M,EAAAA,EAAAA,IAAuB,MAE7BgP,GAAWhP,EAAAA,EAAAA,IAAyB,MAEpCyG,GAAOC,EAAAA,EAAAA,KAEPq0C,EAAe/4C,QAAO,UAACqiE,EAAIlkB,iBAAL,aAAC,EAAergD,SACtCkgD,EAAkB,MAAKqkB,EAAI3gE,KAE3B80E,GADiB/9B,EAAAA,GAAAA,IAAkB1tC,EAAK88B,KACP7oC,EACjC2U,GAAiBH,EAAAA,EAAAA,GAAU,GAAEwqC,YAA0Bw4B,EAAa/iE,EAAAA,GAAAA,SACpEwqC,GAAWC,EAAAA,GAAAA,GAAa,UAACmkB,EAAIlkB,iBAAL,aAAC,EAAergD,QAASkC,QAAQ2T,IACzD8kE,GAAYjlE,EAAAA,EAAAA,GAASwqC,GAAiBw4B,EAAa/iE,EAAAA,GAAAA,SACnDilE,EAAoB14E,QAAQw2E,GAAeiC,IAC3C,WAAE/vE,EAAF,kBAAc4F,IAAsBC,EAAAA,EAAAA,IAAa,GACjDE,EAAsB+nE,IAAgB9tE,EACtCiwE,EAAenC,GAAe9tE,GAEpCwG,EAAAA,EAAAA,GAAgBlC,EAAU,CAAC0rE,IAE3B,MAAM,kBACJvL,EADI,oBACeyL,EADf,wBAEJC,EAFI,kBAEqBxL,EAFrB,uBAGJC,EAHI,sBAGoBC,IACtBC,EAAAA,GAAAA,GAAuBziE,GAErBgyD,GAAoBv4D,EAAAA,EAAAA,KAAY,IAAMuG,EAAI5M,SAAS,IAEnD6+D,GAAiBx4D,EAAAA,EAAAA,KACrB,IAAMuG,EAAI5M,QAASsD,QAAQ,kCAC3B,IAGIw7D,GAAiBz4D,EAAAA,EAAAA,KACrB,IAAMuG,EAAI5M,QAAS8C,cAAc,8BACjC,KAGI,UACJuE,EADI,UACOwG,EADP,iBACkB2xD,EADlB,iBACoCC,EAAkBx7D,MAAOy7D,IAC/DE,EAAAA,GAAAA,GACF6a,EACA7b,EACAC,EACAC,GAGI3gC,GAAc93B,EAAAA,EAAAA,KAAY,MAC1B2oE,GAAsBhoE,GAC1BA,EAAQ,IACHk9D,EACHtuD,QAAS0kE,MAEV,CAACtL,EAAmBhoE,EAASk9D,EAAKoW,IAE/BK,GAAoBt0E,EAAAA,EAAAA,KAAa0C,IACrCA,EAAEC,kBACFD,EAAEgJ,iBACFsoE,EAAenW,KACd,CAACmW,EAAenW,IAEb0W,GAAsBv0E,EAAAA,EAAAA,KAAY,KACtCg0E,MAAAA,GAAAA,EAAgBnW,KACf,CAACA,EAAKmW,IAEHQ,GAAkBx0E,EAAAA,EAAAA,KAAY,KAClCW,EAAS,IACJk9D,EACHtuD,QAAS0kE,IACR,KACF,CAACpW,EAAKl9D,EAASszE,IAEZQ,GAAsBz0E,EAAAA,EAAAA,KAAY,KACtCW,EAAS,IACJk9D,EACHtuD,QAAS0kE,QACRr6E,GAAW,KACb,CAACikE,EAAKl9D,EAASszE,IAEZS,IAAkB10E,EAAAA,EAAAA,KAAa0C,KACnCiyE,EAAAA,GAAAA,GAAoCjyE,GACpC2xE,EAAwB3xE,KACvB,CAAC2xE,KAEJt5E,EAAAA,EAAAA,KAAU,KACJP,GAAYsuE,MACf,CAACA,EAAwBtuE,IAE5B,MAAMs5E,IAAgBrxE,EAAAA,EAAAA,GACpB,YACAo7D,EAAI7jE,OAAS6jE,EAAIxjE,QAAUwjE,EAAI7jE,MAAQ6jE,EAAIxjE,OAAS,WAAa,aACjEsG,GAAW,cACX64C,EACA94C,GAGF,OACE,0BACE6F,IAAKA,EACL7F,UAAWozE,GACXj6D,YAAa66D,GACb/zE,QAASm3B,EACTtnB,cAAeq4D,IAEbngE,EAAAA,IAAgBsrE,GAChB,mBAACzzE,EAAA,EAAD,CACEG,UAAU,oBACVD,MAAM,OACN+tC,MAAI,EACJ7tC,QAAS2zE,GAET,wBAAG5zE,UAAU,uCAGhB6zC,GACC,6BACEhuC,IAAKkzC,EACL/4C,UAAU,YAEV9C,MAAOu2E,EAAe,sBAAmBv6E,IAG5CuV,IAAmBglE,GAClB,0BACEp6E,IAAKoV,EACL0B,IAAI,GACJnQ,UAAU,YAGbwzE,GACC,+BACE3tE,IAAKiC,EACLuD,UAAQ,EACRE,MAAI,EACJC,OAAK,EACLF,aAAW,EACX4oE,QAAQ,QAEJ9qE,GAEJ,6BAAQ/P,IAAKk6E,KAGhBhqE,GACC,mBAAC0G,EAAA,EAAD,CAASlQ,MAAO0O,GAAkBolC,EAAe,QAAU,UAE5D5zC,QAAmC/G,IAAxBw6E,GACV,mBAAC7sE,GAAA,EAAD,CACEjH,OAAQqoE,EACRxP,iBAAkBA,EAClBC,iBAAkBA,EAClBp4D,UAAWA,EACXwG,UAAWA,EACX5J,MAAOy7D,EACP34D,UAAU,mBACV+G,WAAS,EACTC,QAASohE,EACTtlD,oBAAqBulD,IAEnBzqC,GAAmB,mBAACr9B,EAAA,EAAD,CAAUN,QAAS6zE,EAAiBtzE,KAAK,QAAQjB,EAAK,qBAC3E,mBAACgB,EAAA,EAAD,CAAUN,QAAS8zE,EAAqBvzE,KAAK,YAC1CjB,EAAKq+B,EAAkB,cAAgB,oBAEzC01C,GACC,mBAAC/yE,EAAA,EAAD,CAAUu2B,aAAW,EAACt2B,KAAK,SAASP,QAAS4zE,GAAsBt0E,EAAK,gBCvHpF,IAAexB,EAAAA,EAAAA,KAAKC,EAAAA,EAAAA,KACjBC,IACC,MAAM,OAAE+N,IAAWqlB,EAAAA,EAAAA,IAAyBpzB,IAAW,GACjD2/B,EAAkB9iC,QAAQkR,KAAWymB,EAAAA,EAAAA,IAAqBx0B,EAAQ+N,GACxE,MAAO,CACLmoE,UAAWl2E,EAAOm2E,KAAKC,MAAMD,KAC7Bx2C,gBAAAA,KANc5/B,EAzDyB,IAOvC,IAPwC,UAC5CgC,EAD4C,YAE5CsxE,EAF4C,YAG5CgD,EAH4C,UAI5CH,EAJ4C,gBAK5Cv2C,EAL4C,YAM5C22C,GACI,EACJ,MAAM,cAAEC,EAAF,QAAiBvZ,IAAYj8D,EAAAA,EAAAA,MAG7B0R,GAAe5X,EAAAA,EAAAA,IAAuB,OAG1C+oC,QAASc,IACPZ,EAAAA,GAAAA,IAAwB,CAAEC,QAAStxB,EAAc+jE,WAjBzB,OAmB5Bp6E,EAAAA,EAAAA,KAAU,KACJi3E,GACFkD,MAED,CAAClD,EAAakD,IAEjB,MAAMZ,GAAoBt0E,EAAAA,EAAAA,KAAa69D,IACrClC,EAAQ,CAAEkC,IAAAA,EAAKuX,cAAc,MAC5B,CAACzZ,IAEE94B,GAAoBC,EAAAA,GAAAA,GAAkB,GAAIC,EAAAA,GAEhD,OACE,0BACEx8B,IAAK6K,EACL1Q,WAAW+B,EAAAA,EAAAA,GAAe,YAAa/B,EAAWgI,EAAAA,GAAe,eAAiB,kBAEhFssE,EAEEnyC,GAAqBgyC,GAAaA,EAAUx2E,OAC9Cw2E,EAAUruE,KAAKq3D,GACb,mBAAC,GAAD,CACEpyD,IAAKoyD,EAAI3gE,GACT2gE,IAAKA,EACLx6B,oBAAqBA,EACrB7oC,YAAaw3E,EACbrxE,QAASq0E,EAAcC,OAAcr7E,EACrCo6E,cAAeM,EACfh2C,gBAAiBA,MAGnBuE,GAAqBgyC,EACvB,0BAAKn0E,UAAU,mBAAf,kBAEA,mBAACykB,GAAA,EAAD,MAhBA,0BAAKzkB,UAAU,mBAAf,kDCxDD,IAAK20E,I,SAAAA,GAAAA,EAAAA,EAAAA,MAAAA,GAAAA,QAAAA,EAAAA,EAAAA,SAAAA,GAAAA,WAAAA,EAAAA,EAAAA,KAAAA,GAAAA,O,CAAAA,KAAAA,GAAAA,KAQL,MAAMC,GAAyB53E,OAAO0wD,OAAOinB,IACjDlyD,QAAQnc,GAA4C,iBAAVA,IAEvCuuE,GAAwB,CAC5B,CAACF,GAAeG,OAAQ,aACxB,CAACH,GAAeI,UAAW,gBAC3B,CAACJ,GAAeK,MAAO,aAmEzB,IAAej3E,EAAAA,EAAAA,KAhEwB,IAEjC,IAFkC,UACtCqmC,EADsC,YAC3BQ,EAD2B,eACdqwC,EADc,aACEC,GACpC,EACJ,MAAM31E,GAAOC,EAAAA,EAAAA,KAEb,SAAS21E,EAAgB3wC,GACvB,OACE,mBAAC3kC,EAAA,EAAD,CACEG,UAAY,sBAAoBokC,IAAcI,EAAM,YAAc,IAElEvkC,QAAS,IAAM2kC,EAAYJ,GAC3BtkC,UAAW00E,GAAuBpwC,GAClC1kC,OAAK,EACLsxE,OAAK,EACLrxE,MAAM,eAEN,wBAAGC,UAAW60E,GAAsBrwC,MAK1C,MAAM4wC,GAAmB91E,EAAAA,EAAAA,KAAY,KACnC41E,EAAa9wC,IAAcuwC,GAAeI,SAAW,WAAa,UACjE,CAAC3wC,EAAW8wC,IAMf,OACE,0BAAKl1E,UAAU,oBAAoBC,QALrC,SAAyByT,GACvBA,EAAMzR,mBAIuDC,IAAK3C,EAAK4iB,MAAQ,WAAQjpB,GACpFkrC,IAAcuwC,GAAeG,OAC5B,mBAACj1E,EAAA,EAAD,CACEG,UAAU,uBACVE,UAAWkkC,IAAcuwC,GAAeI,SAAW,kBAAoB,cACvEj1E,OAAK,EACLsxE,OAAK,EACLrxE,MAAM,cACNE,QAASm1E,GAET,wBAAGp1E,UAAU,iBAIhBm1E,EAAgBR,GAAeG,OAC/BK,EAAgBR,GAAeI,UAC/BI,EAAgBR,GAAeK,MAE/B5wC,IAAcuwC,GAAeG,OAC5B,mBAACj1E,EAAA,EAAD,CACEG,UAAU,uBACVC,QAASg1E,EACT/0E,UAAU,gBACVJ,OAAK,EACLsxE,OAAK,EACLrxE,MAAM,eAEN,wBAAGC,UAAU,0BCtCvB,IAAImzD,IAAc,EAElB,MAgMA,IAAep1D,EAAAA,EAAAA,KAAKC,EAAAA,EAAAA,KACjBC,IACQ,CACLo3E,kBAAmBp3E,EAAOo3E,qBAHZr3E,EAhM0B,IAexC,IAfyC,OAC7CgO,EAD6C,SAE7CC,EAF6C,OAG7CrM,EAH6C,gBAI7Cg+D,EAJ6C,YAK7C0W,EAL6C,kBAM7Ce,EAN6C,OAO7Ct6C,EAP6C,QAQ7C/zB,EAR6C,cAS7CqjE,EAT6C,gBAU7CmH,EAV6C,YAW7C+C,EAX6C,eAY7CU,EAZ6C,aAa7CC,EAb6C,eAc7C9O,GACI,EACJ,MAAOhiC,EAAWC,IAAgBhjC,EAAAA,EAAAA,IAAiB,IAC5C4kE,EAAcqP,IAAmBj0E,EAAAA,EAAAA,IAAmB,KAEpDk0E,EAAkBC,IAAoBC,EAAAA,GAAAA,GAAe71E,EAAQoH,OAAS9N,EAAWiH,EAAAA,KAClF,aAAEmJ,EAAF,qBAAgBE,IAAyBE,EAAAA,EAAAA,GAAkB9J,EAAQoH,GAAS,GAAO,IAEpFmsD,IAAevzD,IAClBuzD,IAAc,IAGhB94D,EAAAA,EAAAA,KAAU,KACR0gC,MACC,CAACA,KAEJzyB,EAAAA,EAAAA,KAAgB,KACd,GAAKnI,EAAAA,GASL,OALIP,IACFzE,SAASwJ,KAAKtJ,UAAUC,IAAI,iCAC5BH,SAASwJ,KAAKtJ,UAAUC,IAAI,wBAGvB,KACDsE,IACF81E,EAAAA,EAAAA,KAAQ,KACNv6E,SAASwJ,KAAKtJ,UAAUuJ,OAAO,uBAC/BhK,YAAW,KACTO,SAASwJ,KAAKtJ,UAAUuJ,OAAO,mCAvEhB,WA4EtB,CAAChF,IAEJ,MAAM+1E,GAAkB78E,EAAAA,EAAAA,IAAOmtE,GAC/B0P,EAAgB18E,QAAUgtE,GAC1B5rE,EAAAA,EAAAA,KAAU,KACHs7E,EAAgB18E,QAAQ0E,SAI7Bg4E,EAAgB18E,QAAQ65C,SAASzwB,IAC/B+jD,EAAe,CAAE+H,MAAO9rD,OAG1BizD,EAAgB,OACf,CAAC11E,EAAQwkC,EAAWgiC,IAEvB,MAAM6K,GAAoB3xE,EAAAA,EAAAA,KAAY,CAAC6uE,EAAe9rD,KACpDizD,GAAiBlL,GACR,IAAIA,EAAQ/nD,KAGrBgoD,EAAc8D,KACb,CAAC9D,IAEE/I,GAAehiE,EAAAA,EAAAA,KAAa6b,IAChCnU,IACAkuE,EAAa/5D,KACZ,CAACnU,EAASkuE,IAEPjC,GAAsB3zE,EAAAA,EAAAA,KAAY,CAAC+0C,EAAqBlhB,EAAoB4qC,KAChFyT,EAAgBn9B,EAASlhB,EAAU4qC,GAAgB,KAClD,CAACyT,IAEEjyE,GAAOC,EAAAA,EAAAA,KAEb,SAASo2E,EAAc/oE,EAAmBugD,GACxC,OAAQhpB,GACN,KAAKuwC,GAAeG,MAClB,OACE,mBAAC,GAAD,CACE90E,UAAU,aACVqqE,cAAe4G,IAGrB,KAAK0D,GAAeI,SAClB,OACE,mBAAC,GAAD,CACE/0E,UAAU,aACVsxE,cAAa1T,GAAkBh+D,IAAWiN,GAAYugD,GACtDwQ,gBAAiBA,EACjB4T,gBAAiByB,EACjBjnE,OAAQA,EACRC,SAAUA,IAGhB,KAAK0oE,GAAeK,KAClB,OACE,mBAAC,GAAD,CACEh1E,UAAU,aACVsxE,cAAagD,GAAc10E,IAAWiN,GAAYugD,GAClDknB,YAAaA,EACbC,YAAaA,KAYvB,MAAMjiE,EACJ,sCACE,0BAAKtS,UAAU,kBAAkBC,QANrC,SAAyByT,GACvBA,EAAMzR,oBAMDkxD,IACC,mBAAC14C,EAAA,EAAD,CAAY4H,KAAK,QAAQD,UAAWgiB,EAAWS,YAAa+vC,GAAuBj3E,QAChFi4E,IAINz1E,EAAAA,IACC,mBAACN,EAAA,EAAD,CACEC,OAAK,EACLsxE,OAAK,EACLrxE,MAAM,cACNG,UAAWX,EAAK,SAChBS,UAAU,sBACVxF,KAAK,OACLyF,QAAS+G,GAET,wBAAGhH,UAAU,gBAGjB,mBAAC,GAAD,CACEokC,UAAWA,EACXQ,YAAaP,EACb4wC,eAAgBA,EAChBC,aAAc5T,KAKpB,GAAInhE,EAAAA,GAAyB,CAC3B,IAAKmJ,EACH,OAGF,MAAMtJ,GAAY+B,EAAAA,EAAAA,GAChB,yBACAyH,GACC6rE,GAAqB,sBAGxB,OACE,mBAAC5T,GAAA,EAAD,KACE,0BAAKzhE,UAAWA,GACbsS,IAMT,OACE,mBAACzL,GAAA,EAAD,CACEjH,OAAQA,EACRU,UAAU,OACVwG,UAAU,SACVE,QAASA,EACThH,UAAU,aACV8iB,oBAAqB9b,EACrB2sD,aAAe3rD,EAAAA,QAAkC9O,EAAnBq8E,EAC9BM,aAAe7tE,EAAAA,QAAkC9O,EAAnBs8E,EAC9BM,mBAAoB9tE,EAAAA,GACpB+tE,WAAS,GAERzjE,OC/LP,IAAevU,EAAAA,EAAAA,KA3BkB,IAM3B,IAN4B,WAChCi4E,EADgC,MAEhCvlD,EAFgC,WAGhCwlD,EAHgC,IAIhCC,EAJgC,QAKhCj2E,GACI,EACJ,OACE,mBAACmkB,GAAA,EAAD,CACErZ,IAAKkrE,EAAWnV,QAChB9gE,WAAW+B,EAAAA,EAAAA,GAAe,6CAA8Ci0E,GAAc,eACtF/nC,WAAS,EAEThuC,QAAS,IAAMA,EAAQg2E,GACvBxlD,MAAOA,GAENulD,GACC,mBAAC77D,GAAA,EAAD,CAAQ3f,KAAK,QAAQ4f,KAAM87D,IAE7B,0BAAKl2E,UAAU,iBACb,2BAAMA,UAAU,SAAhB,IAA0Bi2E,EAAWnV,SACrC,2BAAM9gE,UAAU,aAAYsa,EAAAA,GAAAA,GAAW27D,EAAWniD,mBCwD1D,IAAe/1B,EAAAA,EAAAA,KAAKC,EAAAA,EAAAA,KACjBC,IAAD,CACEioB,UAAWjoB,EAAOmoB,MAAMzB,QAFR3mB,EApEiC,IAO/C,IAPgD,UACpDkoB,EADoD,OAEpDtmB,EAFoD,aAGpDg8B,EAHoD,YAIpDu6C,EAJoD,QAKpDl2E,EALoD,QAMpD+G,GACI,EACJ,MAAM,eAAEq5D,IAAmBrhE,EAAAA,EAAAA,MAGrB0R,GAAe5X,EAAAA,EAAAA,IAAuB,OACtC,aAAEwQ,EAAF,qBAAgBE,IAAyBE,EAAAA,EAAAA,GAAkB9J,OAAQ1G,OAAWA,GAAW,GAEzFk9E,GAAoB92E,EAAAA,EAAAA,KAAY,IAAuC,IAAtC,MAAE+2E,EAAF,QAASvV,GAA6B,EAC3E,MAAMoV,EAAMhwD,EAAUmwD,GACtBhW,EAAe,CACbS,QAAU,IAAGA,IAAUllC,GAAgBs6C,EAAO,IAAGA,EAAIruC,WAAa,KAClEwuC,MAAAA,IAEFp2E,MACC,CAACA,EAASogE,EAAgBn6C,EAAW0V,IAElC06C,EAAuBrS,GAAsB,CACjDp3D,SAAUjN,EACVkkB,MAAOqyD,EACPn7C,SAAUo7C,EACVpvE,QAAAA,KAGF3M,EAAAA,EAAAA,KAAU,KACJ87E,IAAgBA,EAAYx4E,QAC9BqJ,MAED,CAACmvE,EAAanvE,KAEjB3M,EAAAA,EAAAA,KAAU,KACRwpE,GAAsB,uBAAwByS,EAAsB5lE,KACnE,CAAC4lE,IAEJ,MAAMC,GAAe17D,EAAAA,EAAAA,GAAYs7D,GAAeA,EAAYx4E,OAASw4E,OAAcj9E,EAAWoQ,GACxFktE,EAAmBL,IAAgBA,EAAYx4E,OAAS44E,EAAeJ,EAE7E,IAAK7sE,GAAiBktE,IAAqBA,EAAiB74E,OAC1D,OAGF,MAAMqC,GAAY+B,EAAAA,EAAAA,GAChB,mDACAyH,GAGF,OACE,0BAAKxJ,UAAWA,EAAW6F,IAAK6K,GAC7B8lE,GAAoBA,EAAiB1wE,KAAI,CAAC2wE,EAAgB50D,IACzD,mBAAC,GAAD,CACE9W,IAAM,GAAE0rE,EAAeJ,SAASI,EAAe3V,UAC/CmV,WAAYQ,EACZP,IAAKhwD,EAAUuwD,EAAeJ,OAC9BL,YAAU,EACV/1E,QAASm2E,EACT3lD,MAAO6lD,IAAyBz0D,WChC1C,IAAe9jB,EAAAA,EAAAA,KAvCsB,IAE/B,IAFgC,OACpC6B,EADoC,YAC5Bu2E,EAD4B,QACfnvE,GACjB,EACJ,MAAM,eAAEq5D,IAAmBrhE,EAAAA,EAAAA,OAEpBu2E,EAAkBC,IAAoBC,EAAAA,GAAAA,GAAe71E,EAAQoH,OAAS9N,EAAWiH,EAAAA,IAElFi3B,GAAc93B,EAAAA,EAAAA,KAAa22E,IAC/B5V,EAAe,CACbS,QAAU,IAAGmV,EAAWnV,UACxBuV,MAAOJ,EAAWI,QAEpBrvE,MACC,CAACA,EAASq5D,IAEb,OACE,mBAACx5D,GAAA,EAAD,CACEjH,OAAQA,EACRU,UAAU,OACVwG,UAAU,SACVE,QAASA,EACThH,UAAU,iBACV8iB,oBAAqB9b,EACrB2sD,aAAe3rD,EAAAA,QAAkC9O,EAAnBq8E,EAC9BM,aAAe7tE,EAAAA,QAAkC9O,EAAnBs8E,EAC9BM,mBAAoB9tE,EAAAA,GACpB+tE,WAAS,GAERI,EAAYrwE,KAAKmwE,GAChB,mBAAC,GAAD,CACElrE,IAAKkrE,EAAWnV,QAChBmV,WAAYA,EACZh2E,QAASm3B,UC0CnB,IAAer5B,EAAAA,EAAAA,KAAKC,EAAAA,EAAAA,KAClB,CAACC,EAAD,KAAoC,IAA3B,OAAE+N,GAAyB,EAClC,MAAM,SAAEgoC,GAAa/1C,EAAO+1C,SAAS0iC,SAGrC,MAAO,CAAE1iC,SAAAA,EAAUpW,iBAFKnL,EAAAA,EAAAA,IAAqBx0B,EAAQ+N,MAHrChO,EA1D8B,IAO5C,IAP6C,OACjDgO,EADiD,SAEjDC,EAFiD,OAGjDrM,EAHiD,SAIjDo0C,EAJiD,gBAKjDpW,EALiD,gBAMjD4zC,GACI,EACJ,MAAM,sBAAEmF,IAA0B33E,EAAAA,EAAAA,MAG5B0R,GAAe5X,EAAAA,EAAAA,IAAuB,OACtC,aAAEwQ,EAAF,qBAAgBE,IAAyBE,EAAAA,EAAAA,GAAkB9J,OAAQ1G,OAAWA,GAAW,GACzF09E,GAAe/7D,EAAAA,EAAAA,GAAYm5B,GAAU,GACrC6iC,EAAoB7iC,GAAY4iC,EAChCjE,GAAoBC,EAAAA,GAAAA,GAAqB5mE,EAAQC,IAGrD41B,QAASc,IACPZ,EAAAA,GAAAA,IAAwB,CAAEC,QAAStxB,EAAcuxB,WArBzB,OAuB5B5nC,EAAAA,EAAAA,KAAU,IAAOuF,GAAS8hB,EAAAA,EAAAA,GAAsBi1D,QAAyBz9E,GAAY,CAAC0G,EAAQ+2E,IAE9F,MAIM32E,GAAY+B,EAAAA,EAAAA,GAChB,gDACAyH,IACEqtE,MAAAA,GAAAA,EAAmBl5E,SAAW,UAGlC,OACE,0BACEkI,IAAK6K,EACL1Q,UAAWA,EACXmL,YAdoB,KACtBwnE,EAAkB,CAAEx3D,KAAM,oBAevB7R,GAAgButE,EACfA,EAAkB/wE,KAAKuuC,GACrB,mBAACD,GAAA,EAAD,CACErpC,IAAKspC,EAAQ73C,GACb63C,QAASA,EACT75C,KAAMo3E,EAAAA,EACNjvC,oBAAqBA,EACrB1iC,QAASuxE,EACTtwC,SAAUmT,EACVzW,gBAAiBA,MAGnBt0B,EACF,mBAACmb,GAAA,EAAD,WACEvrB,OC/BV,IAAe6E,EAAAA,EAAAA,KApCsB,IAQ/B,IARgC,OACpC6B,EADoC,eAEpCwpE,GAAiB,EAFmB,gBAGpCxrC,EAHoC,aAIpC4oC,EAJoC,eAKpC6C,EALoC,QAMpCriE,EANoC,oBAOpC8b,GACI,EACJ,MAAOyyD,EAAkBC,IAAoBC,EAAAA,GAAAA,GAAe71E,EAAQoH,GAE9DzH,GAAOC,EAAAA,EAAAA,KAEb,OACE,mBAACqH,GAAA,EAAD,CACEjH,OAAQA,EACRmH,WAAS,EACTzG,UAAU,QACVwG,UAAWsiE,EAAiB,MAAQ,SACpCppE,UAAU,iBACVgH,QAASA,EACT8b,oBAAqBA,EACrB6wC,aAAe3rD,EAAAA,QAAkC9O,EAAnBq8E,EAC9BM,aAAe7tE,EAAAA,QAAkC9O,EAAnBs8E,EAC9BM,mBAAoB9tE,EAAAA,IAEnBw+D,GAAgB,mBAACjmE,EAAA,EAAD,CAAUC,KAAK,OAAOP,QAASumE,GAAejnE,EAAK,qBACnE8pE,GACC,mBAAC9oE,EAAA,EAAD,CAAUC,KAAK,WAAWP,QAASopE,GAChC9pE,EAAKq+B,EAAkB,cAAgB,wB,qCCOlD,MA4DA,IAAe7/B,EAAAA,EAAAA,KA5DoB,IAM7B,IAN8B,OAClC6B,EADkC,OAElCwqE,EAFkC,QAGlCpjE,EAHkC,cAIlCqjE,EAJkC,eAKlCjE,GACI,EAEJ,MAAM11D,GAAe5X,EAAAA,EAAAA,IAAuB,OACtC,aAAEwQ,EAAF,qBAAgBE,IAAyBE,EAAAA,EAAAA,GAAkB9J,OAAQ1G,OAAWA,GAAW,GACzF49E,GAAsBC,EAAAA,GAAAA,GAAuB3M,EAAOzsE,OAASysE,OAASlxE,EAhDvD,MAgDqF,GAEpG89E,GAAoB13E,EAAAA,EAAAA,KAAa6uE,IACrC9D,EAAc8D,EAAMC,QACpBhI,EAAe,CAAE+H,MAAOA,EAAM3xE,OAC7B,CAAC4pE,EAAgBiE,IAEdjzC,GAAc93B,EAAAA,EAAAA,KAAY,CAAC8uE,EAAgB5xE,KAC/C6tE,EAAc+D,GACdhI,EAAe,CAAE+H,MAAO3xE,MACvB,CAAC4pE,EAAgBiE,IAEd4M,EAAgBhT,GAAsB,CAC1Cp3D,SAAUjN,EACV0jE,cAAc,EACdx/C,MAAOsmD,EACPpvC,SAAUg8C,EACVhwE,QAAAA,KAGF3M,EAAAA,EAAAA,KAAU,MAlEZ,SAAwBwnB,EAAenR,GACrC,MAAMxU,EAAYwU,EAAazX,QAC/B,IAAKiD,EACH,OAGF,MAAM,eAAEwnE,EAAF,YAAkBD,GAAgBR,GACtC/mE,EACA,eAZoB,GAcpB,GACA,GACA,GAGF,IAAKunE,EAAY9lE,SAAW8lE,EAAY5hD,GACtC,OAEF,MAAMiiD,EAAQJ,EAAe,GAC7B,IAAKA,EAAejnE,SAASolB,IACvBA,IAAUiiD,IAAUC,GAAe7nE,EAAWunE,EAAYK,IAAQ,GAAQ,CAC9E,MACMuM,EAAuB,UADZxuD,EAAQ6hD,EAAeA,EAAe/lE,OAAS,GAAK,QAAU,OAxBxD,GAyBgBkkB,EAA6B,GAEpE0uD,EAAAA,GAAAA,GAA2Br0E,EAAWm0E,IA2CtC6G,CAAeD,EAAevmE,KAC7B,CAACumE,IAEJ,MAAMj3E,GAAY+B,EAAAA,EAAAA,GAChB,gDACAyH,GAGF,OACE,0BACE3D,IAAK6K,EACL1Q,UAAWA,GAEVsJ,GAAgBwtE,EACfA,EAAWhxE,KAAI,CAACqoE,EAAOtsD,IACrB,mBAAC,GAAD,CACE9W,IAAKojE,EAAM3xE,GACX2xE,MAAOA,EACP19C,MAAOwmD,IAAkBp1D,EACzB5hB,QAASm3B,MAGX9tB,EACF,mBAACmb,GAAA,EAAD,WACEvrB,MCjDV,IAAe6E,EAAAA,EAAAA,KAxCkB,IAQ3B,IAR4B,MAChC6pB,EADgC,YAEhCkM,EAFgC,UAGhCmlB,EAHgC,SAIhCk+B,EAJgC,MAKhC1mD,EALgC,qBAMhCjnB,EAAuB,GANS,QAOhCvJ,GACI,EACAqS,EAA8B,GAElC,MAAM8kE,GAAmB9oE,EAAAA,EAAAA,GAAS2qC,EAAa,eAAcA,EAAU9xC,WAAQjO,GAW/E,OAVAi+E,EAAWA,GAAYC,EAEnBD,EACF7kE,EACE,0BAAKjZ,IAAK89E,EAAUn3E,UAAWwJ,EAAsB2G,IAAI,GAAGknE,SAAS,QAAQ97E,UAAU,UAEhFqsB,IACTtV,GAAUshC,EAAAA,GAAAA,IAAgBhsB,EAAO,IAIjC,mBAACxD,GAAA,EAAD,CACEqM,MAAOA,EACPzwB,UAAU,iCACVmZ,YAAa86D,GAAAA,EACbh0E,QAASA,GAET,2BAAMD,UAAU,SACM,iBAAZsS,GAAuBgI,EAAAA,GAAAA,GAAWhI,GAAWA,GAEvD,0BAAKtS,UAAU,iBACZ4nB,GAAU,0BAAK5nB,UAAU,SAAS4nB,GAClCkM,GAAgB,0BAAK9zB,UAAU,eAAe8zB,QCavD,IAAe/1B,EAAAA,EAAAA,KAjDmB,IAE5B,UACAmP,EACA+rC,EACAq+B,GAL6B,MACjC7mD,EADiC,aAC1B8mD,EAD0B,aACZC,EADY,QACEv3E,GAC/B,EAKA,UAAWu3E,IACbtqE,EAAQsqE,EAAatqE,OAGnB,cAAesqE,IACjBv+B,EAAYu+B,EAAav+B,WAEvB,iBAAkBu+B,GAAgBD,IACpCD,EAAeE,EAAaF,cAG9B,MAAMF,GAAmB9oE,EAAAA,EAAAA,GAASgpE,EAAgB,eAAcA,EAAanwE,WAAQjO,GAC/EukC,GAAenvB,EAAAA,EAAAA,GAASpB,GAAU,QAAOA,EAAM1Q,aAC/CgN,GAAuBkqC,EAAAA,GAAAA,GAAmBjW,GAE1CrG,GAAc93B,EAAAA,EAAAA,KAAY,KAC9BW,EAAQu3E,KACP,CAACA,EAAcv3E,IAEA,QAAlB,GAAIs3E,EACF,OACE,0BAAKv3E,UAAU,kCAAkCC,QAASm3B,GACxD,0BAAK/9B,KAAK,UAAC6T,SAAD,iBAAC,EAAO+rC,iBAAR,aAAC,EAAkBrgD,UAAYw+E,EAAkBjnE,IAAI,KAC/D,0BAAK9W,IAAKokC,EAAcz9B,WAAW+B,EAAAA,EAAAA,GAAe,aAAcyH,GAAuB2G,IAAI,MAKjG,MAAM,MAAEyX,EAAF,YAASkM,GAAgB0jD,EAE/B,OACE,mBAAC,GAAD,CACE/mD,MAAOA,EACP0mD,SAAU15C,IAA0B,QAAT,EAAAwb,SAAA,eAAWrgD,UAAWw+E,EACjD5tE,qBAAsBA,EACtBoe,MAAOA,EACPkM,YAAaA,EACb7zB,QAASm3B,OCjCf,IAAer5B,EAAAA,EAAAA,KApBqB,IAAsC,IAArC,MAAE0yB,EAAF,aAAS+mD,EAAT,QAAuBv3E,GAAc,EACxE,MAAM,MACJ2nB,EADI,IACGzgB,EADH,YACQ2sB,EADR,aACqBwjD,GACvBE,EAEEpgD,GAAc93B,EAAAA,EAAAA,KAAY,KAC9BW,EAAQu3E,KACP,CAACA,EAAcv3E,IAElB,OACE,mBAAC,GAAD,CACEwwB,MAAOA,EACPwoB,UAAWq+B,EACX1vD,MAAOA,GAASzgB,EAChB2sB,YAAaA,EACb7zB,QAASm3B,OCef,IAAer5B,EAAAA,EAAAA,KAxBiB,IAE1B,IAF2B,aAC/By5E,EAD+B,gBACjB55C,EADiB,YACA02C,EADA,oBACa3xC,EADb,QACkC1iC,GAC7D,EACJ,MAAM,IAAEk9D,GAAQqa,EAEVpgD,GAAc93B,EAAAA,EAAAA,KAAY,CAACm4E,EAAgBtkD,EAAoB4qC,KACnE99D,EAAQu3E,EAAcrkD,EAAU4qC,KAC/B,CAACyZ,EAAcv3E,IAElB,GAAKk9D,EAIL,OACE,mBAAC,GAAD,CACEA,IAAKA,EACLx6B,oBAAqBA,EACrB3iC,UAAU,sBACVC,QAASq0E,EAAcl9C,OAAcl+B,EACrC0kC,gBAAiBA,OCKvB,IAAe7/B,EAAAA,EAAAA,KA1BqB,IAK9B,IAL+B,aACnCy5E,EADmC,gBAEnC55C,EAFmC,oBAGnC+E,EAHmC,QAInC1iC,GACI,EACJ,MAAM,QAAEo0C,GAAYmjC,EAEpB,GAAKnjC,EAIL,OACE,mBAACD,GAAA,EAAD,CACEC,QAASA,EACT75C,KAAMk9E,EAAAA,GACN/0C,oBAAqBA,EACrB/a,MAAOysB,EAAQ85B,MACfnuE,UAAU,sBACVC,QAASA,EACTihC,SAAUs2C,EACV55C,gBAAiBA,OCVjBrB,IAAe56B,EAAAA,EAAAA,KAAU66B,GAAOA,KAAM,KAAK,GAkLjD,IAAez+B,EAAAA,EAAAA,KAjKwB,IAWjC,IAXkC,OACtC6B,EADsC,MAEtCy2E,EAFsC,UAGtCsB,EAHsC,iBAItCC,EAJsC,SAKtCC,EALsC,gBAMtCj6C,EANsC,YAOtC02C,EAPsC,SAQtC3xD,EARsC,QAStC3b,EATsC,eAUtC8wE,GACI,EACJ,MAAM,SACJ5gD,EADI,SAEJ6gD,IACE/4E,EAAAA,EAAAA,MAGE0R,GAAe5X,EAAAA,EAAAA,IAAuB,OACtC,aAAEwQ,EAAF,qBAAgBE,IAAyBE,EAAAA,EAAAA,GAAkB9J,OAAQ1G,OAAWA,GAAW,IAE7F2oC,QAASc,IACPZ,EAAAA,GAAAA,IAAwB,CAC1BC,QAAStxB,EACT+jE,WA1C6B,IA2C7B36E,YAAa8F,IAGT04B,GAAiBh5B,EAAAA,EAAAA,KAAY,IAAqD,IAApD,UAAEuT,GAAkD,EAClFA,IAAc+lB,EAAAA,GAAAA,WAChB2D,GAAa5Z,KAEd,CAACA,IAEEs0D,EAAgBhT,GAAsB,CAC1Cp3D,SAAUjN,EACVukE,6BAA8BwT,EAC9BvT,kBAAmBuT,EACnB7zD,MAAO8zD,EACP58C,SAAU88C,EACV9wE,QAAAA,KAGF3M,EAAAA,EAAAA,KAAU,KACRwpE,GAAsB,uBAAwBoT,EAAevmE,KAC5D,CAACumE,IAEJ,MAAMe,GAAe14E,EAAAA,EAAAA,KAAY,KAC/B43B,EAAS,CAAE16B,GAAI65E,IACf0B,EAAS,CAAE1B,MAAAA,EAAO9+B,MAAOsgC,EAAUI,eAClC,CAAC5B,EAAOn/C,EAAU6gD,EAAUF,IAEzBK,GAAuBr9D,EAAAA,EAAAA,GAC3B+8D,MAAAA,GAAAA,EAAkBj6E,OACdi6E,OACA1+E,EACJoQ,GAEI6uE,EAA2BP,IAAqBA,EAAiBj6E,OACnEu6E,EACAN,EAEJ,IAAKtuE,KAAkB6uE,MAAAA,GAAAA,EAA0Bx6E,QAAUk6E,GACzD,OAGF,MAAM73E,GAAY+B,EAAAA,EAAAA,GAChB,oCACAiG,EAAAA,GAAe,eAAiB,gBAChC2vE,GAAa,UACbnuE,GA2EF,OACE,mBAACqa,GAAA,EAAD,CACEhe,IAAK6K,EACL1Q,UAAWA,EACX8jB,MAAOq0D,EACP31C,aAAa,uBACb1B,YAAU,EACV/c,WAAYuU,EACZ8/C,cAAe,KAEdP,GAhFD,mBAACzzD,GAAA,EAAD,CAAUle,QAAM,EAAClG,UAAU,wBAAwBC,QAAS+3E,GAC1D,2BAAMh4E,UAAU,SAAS63E,EAAU72E,QAgFpCm3E,MAAAA,OAAA,EAAAA,EAA0Bx6E,SA1EtBw6E,EAA0BryE,KAAI,CAACuyE,EAAiBx2D,KACrD,OAAQw2D,EAAgBl9D,MACtB,IAAK,MACH,OACE,mBAAC,GAAD,CACEpQ,IAAKstE,EAAgB77E,GACrBg7E,aAAca,EACd11C,oBAAqBA,EACrB1iC,QAAS63E,EACTl6C,gBAAiBA,EACjB02C,YAAaA,IAInB,IAAK,QACH,OACE,mBAAC,GAAD,CACEvpE,IAAKstE,EAAgB77E,GACrB+6E,aAAcI,EACdH,aAAca,EACdp4E,QAAS63E,IAIf,IAAK,UACH,OACE,mBAAC,GAAD,CACE/sE,IAAKstE,EAAgB77E,GACrBg7E,aAAca,EACd11C,oBAAqBA,EACrB1iC,QAAS63E,EACTl6C,gBAAiBA,IAIvB,IAAK,QACL,IAAK,OACL,IAAK,OACH,OACE,mBAAC,GAAD,CACE7yB,IAAKstE,EAAgB77E,GACrBi0B,MAAOwmD,IAAkBp1D,EACzB21D,aAAca,EACdp4E,QAAS63E,IAGf,IAAK,UACL,IAAK,QACH,OACE,mBAAC,GAAD,CACE/sE,IAAKstE,EAAgB77E,GACrBi0B,MAAOwmD,IAAkBp1D,EACzB21D,aAAca,EACdp4E,QAAS63E,IAIf,QACE,eC1DV,IAAe/5E,EAAAA,EAAAA,KAlGkB,IAM3B,IAN4B,OAChC6B,EADgC,QAEhCoH,EAFgC,OAGhCgF,EAHgC,iBAIhCssE,EAJgC,UAKhCC,GACI,EACJ,MAAM,kBAAEC,IAAsBx5E,EAAAA,EAAAA,MAGxBknB,GAAYC,EAAAA,EAAAA,MAAYC,MAAMzB,KAC9BC,GAAYuB,EAAAA,EAAAA,MAAYzB,MAAMC,KAE9BplB,GAAOC,EAAAA,EAAAA,KAEPkR,GAAe5X,EAAAA,EAAAA,IAAuB,OAErCy8E,EAAkBC,EAAkBiD,IAAmBhD,EAAAA,GAAAA,GAAe71E,EAAQoH,OAAS9N,IAE9FmB,EAAAA,EAAAA,KAAU,KACJuF,GACF64E,MAED,CAAC74E,EAAQ64E,IAEZ,MAAMnT,GAAmBhmE,EAAAA,EAAAA,KAAa9C,IACpCwK,IACAwxE,EAAkB,CAAExsE,OAAAA,EAAQ0sE,SAAUl8E,MACrC,CAACwP,EAAQhF,EAASwxE,IAEfG,EAAsB1U,GAAsB,CAChDp3D,SAAUjN,EACVkkB,MAAOy0D,EACPv9C,SAAUsqC,EACVjB,mBAAmB,EACnBH,kCAAkC,EAClCl9D,QAAAA,IAaF,OAVA3M,EAAAA,EAAAA,KAAU,KACRwpE,GAAsB,uBAAwB8U,EAAqBjoE,KAClE,CAACioE,KAEJt+E,EAAAA,EAAAA,KAAU,KACJk+E,IAAcA,EAAU56E,QAC1BqJ,MAED,CAACuxE,EAAWvxE,IAGb,mBAACH,GAAA,EAAD,CACEjH,OAAQA,EACRU,UAAU,OACVwG,UAAU,SACVE,QAASA,EACThH,UAAU,aACV8iB,oBAAqB9b,EACrB2sD,aAAe3rD,EAAAA,QAAkC9O,EAAnBq8E,EAC9BM,aAAe7tE,EAAAA,QAAkC9O,EAAnBs8E,EAC9BM,mBAAoB9tE,EAAAA,GACpB+tE,WAAS,GAET,0BAAK/1E,UAAU,gBAAgBkC,IAAI,QAAQ3C,EAAK,uBAC/C2mB,GAAatB,IAAa2zD,MAAAA,OAA1B,EAA0BA,EAAWzyE,KAAI,CAACtJ,EAAIqlB,KAC7C,MAAMzH,GAAOV,EAAAA,EAAAA,IAASld,GAAM0pB,EAAU1pB,QAAMtD,EACtCmhB,EAAQD,OAAuBlhB,EAAhB0rB,EAAUpoB,GACzBw8B,EAAW5e,GAAO6e,EAAAA,EAAAA,IAAgB7e,GAAQC,MAAAA,OAA3B,EAA2BA,EAAMuN,MAEtD,OACE,mBAACxD,GAAA,EAAD,CACErZ,IAAKvO,EACLwD,UAAU,yDAEVC,QAAS,IAAMqlE,EAAiB9oE,GAChCi0B,MAAOkoD,IAAwB92D,GAE/B,mBAAC1H,GAAA,EAAD,CACE3f,KAAK,QACL4f,KAAMA,EACNC,KAAMA,EACNra,WAAW+B,EAAAA,EAAAA,GAAeu2E,IAAqB97E,GAAM,cAEvD,0BAAKwD,UAAU,QACb,0BAAKA,UAAU,SACb,yBAAIkC,IAAI,QAAQ82B,IAAY1e,EAAAA,GAAAA,GAAW0e,KAEzC,2BAAMh5B,UAAU,YAAYoa,EACxB7a,EAAK,4BACLA,EAAK,cAAe8a,MAAAA,OAAhB,EAAgBA,EAAMyqC,aAAc,gB,eCpE1D,MA4HA,IAAe/mD,EAAAA,EAAAA,KAAKC,EAAAA,EAAAA,KAClB,CAACC,EAAD,KAAoC,IAA3B,OAAE+N,GAAyB,EAClC,MAAMqO,GAAO3N,EAAAA,EAAAA,IAAWzO,EAAQ+N,GAC1B4sE,EAAev+D,IAAQqB,EAAAA,EAAAA,IAAmBzd,EAAQoc,EAAK7d,IAC7D,IAAK6d,IAASu+D,EACZ,MAAO,GAGT,MAAM,MAAE94C,EAAF,QAAS3H,IAAYwpC,EAAAA,EAAAA,IAAwB1jE,IAAW,IACxD,WAAEwjD,EAAF,SAAc1lC,GAAaoc,GAAW,GAE5C,MAAO,CACL9d,KAAAA,EACAu+D,aAAAA,EACA94C,MAAAA,EACA2hB,WAAAA,EACA1lC,SAAAA,KAhBc/d,EA5H2B,IAUzC,IAV0C,OAC9CgO,EAD8C,SAE9CC,EAF8C,QAG9CjF,EAH8C,SAI9C6F,EAJ8C,KAK9CwN,EAL8C,aAM9Cu+D,EAN8C,MAO9C94C,EAP8C,WAQ9C2hB,EAR8C,SAS9C1lC,GACI,EACJ,MAAM,wBACJ+lD,EADI,aAEJjoD,IACE7a,EAAAA,EAAAA,MAGE0R,GAAe5X,EAAAA,EAAAA,IAAuB,MAEtCyG,GAAOC,EAAAA,EAAAA,MACbuiB,EAAAA,EAAAA,IAAelV,EAAU7F,GAEzB,MAAO+b,EAAaC,IAAWC,EAAAA,GAAAA,GAAkB6+C,EAAyB/lD,GAEpE88D,GAAkBn5E,EAAAA,EAAAA,KAAQ,IACzBogC,GAAU/c,MAAAA,GAAAA,EAAaplB,QAAWi7E,EAIhC71D,EAAYjd,KAAKtJ,IACtB,MAAMY,EAAUw7E,EAAap8E,GAC7B,IAAKY,EACH,OAGF,MAAM07E,EAAa17E,EAAQmP,UAAWE,EAAAA,EAAAA,KAAW0Z,EAAAA,EAAAA,MAAa/oB,EAAQmP,eAAYrT,EAElF,IAAI6/E,EACJ,GAAI1+D,IAAQqY,EAAAA,EAAAA,IAAcrY,GACxB0+D,EAAa1+D,OACR,GAAIjd,EAAQ47E,YAAa,CAC9B,MAAM,cAAEC,EAAF,WAAiBz3D,GAAepkB,EAAQ47E,YAC9CD,EAAaE,GAAiBz3D,GAAa9U,EAAAA,EAAAA,KAAWyZ,EAAAA,EAAAA,MAAa3E,QAActoB,OAEjF6/E,EAAa37E,EAAQmP,UAAWG,EAAAA,EAAAA,KAAWyZ,EAAAA,EAAAA,MAAa/oB,EAAQmP,eAAYrT,EAG9E,MAAO,CACLkE,QAAAA,EACA07E,WAAAA,EACAC,WAAAA,EACA94E,QAAS,IAAM4Z,EAAa,CAAE7N,OAAAA,EAAQC,SAAAA,EAAUC,UAAW1P,QAE5DimB,OAAO3nB,SA3BDolC,GAAAA,GA4BR,CAACJ,EAAO/c,EAAa61D,EAAcv+D,EAAMR,EAAc7N,EAAQC,IAE5D+V,GAAgBqB,EAAAA,GAAAA,GAA0B3S,GAAc,GAAOmR,IACnE,MAAMq3D,EAAcL,MAAAA,OAAH,EAAGA,GAA6B,IAAXh3D,EAAe,EAAIA,GACrDq3D,GACFA,EAAYj5E,YAEb,oBAAoB,GAkCjBk5E,GAAUp2D,MAAAA,OAAA,EAAAA,EAAc,OAAOhH,MAAAA,OAArB,EAAqBA,EAAW,IAEhD,OACE,mBAAC8H,GAAA,EAAD,CACEhe,IAAK6K,EACL1Q,UAAU,4BACV8jB,MAAO+0D,EACPO,iBAAkB,EAClBr1D,WAAYf,EACZQ,UAAWxB,GAEVm3D,GACC,wBAAGpuE,IAAI,cAAc/K,UAAU,cAAckC,IAAI,QAC7C49B,EAEkB,IAAf2hB,GAAqBo3B,EAAgBl7E,OAEvB,IAAf8jD,EACF,kBAEC,GAAGo3B,EAAgBl7E,SAAW8jD,GAAco3B,EAAgBl7E,yBAJ7D4B,EAAK,yBAFLA,EAAK,gCAUVs5E,EAAgB/yE,KAxDM,IAOrB,IAPsB,QAC1B1I,EAD0B,WACjB07E,EADiB,WACLC,EADK,QACO94E,GAM7B,EACJ,MAAM2nB,EAAQmxD,GAAaj7C,EAAAA,EAAAA,GAAav+B,EAAMw5E,IAAc9/C,EAAAA,EAAAA,IAAgB6/C,GACtE93E,GAAOm9B,EAAAA,EAAAA,GAAqB5+B,EAAMnC,OAASlE,EAAW4mC,GAE5D,OACE,mBAAC1b,GAAA,EAAD,CACErZ,IAAK3N,EAAQZ,GACb68E,eAAgBj8E,EAAQod,KACxBxa,UAAU,gDACVC,QAASA,GAET,mBAACka,GAAA,EAAD,CAAQE,KAAM0+D,EAAY3+D,KAAM0+D,IAChC,0BAAK94E,UAAU,QACb,0BAAKA,UAAU,SACb,yBAAIkC,IAAI,QAAQ0lB,IAAStN,EAAAA,GAAAA,GAAWsN,IACpC,mBAAC0xD,GAAA,EAAD,CAAiBl8E,QAASA,KAE5B,0BAAK4C,UAAU,WAAWkC,IAAI,QAC3BlB,aChBb,IAAejD,EAAAA,EAAAA,KAAKC,EAAAA,EAAAA,KAClB,CAACC,EAAD,KAA0C,IAAjC,aAAEigE,GAA+B,EACxC,MAAO,CACLxjE,KAAKujE,EAAAA,EAAAA,IAAiBhgE,EAAQigE,GAC9BoU,YAAYiH,EAAAA,EAAAA,IAAyBt7E,MAJvBD,EAvFgC,IAG9C,IAH+C,aACnDkgE,EADmD,oBACrCv7B,EADqC,IAChBjoC,EADgB,WACX43E,EADW,gBAEnDkH,EAFmD,cAElCC,GACb,EACJ,MAAM,aAAErb,EAAF,iBAAgBC,IAAqBr/D,EAAAA,EAAAA,MAErCO,GAAOC,EAAAA,EAAAA,KACPk6E,EAAUh/E,GAAOI,QAAQJ,EAAI08C,eAC7BuiC,EAAoB7+E,QAAQJ,MAAAA,OAAD,EAACA,EAAKs5C,WAEhC3sB,EAAaC,EAAWC,IAAcjjB,EAAAA,GAAAA,MAE7CtL,EAAAA,EAAAA,IAAY,KACVygF,EAAcpyD,KACb,CAACA,EAAaoyD,IAEjB,MAAM5C,GAAoBn3E,EAAAA,EAAAA,KAAQ,KAChC,IAAKhF,EACH,MAAO,GAGT,MAAMk/E,GAAmBl/E,EAAIm/E,QAAU,IAAI/zE,KAAI,QAAC,GAAEtJ,GAAH,SAAYA,KACrDs9E,EAAgBp/E,EAAIs5C,SAAWt5C,EAAIs5C,SAASvxB,QAAO,QAAC,GAAEjmB,GAAH,SAAao9E,EAAgBn9E,SAASD,MAAO,GAEtG,MAAO,IAAK9B,EAAIm/E,QAAU,MAAQC,GAAe/1C,MAAM,EA1B/B,KA2BvB,CAACrpC,KAEJL,EAAAA,EAAAA,KAAU,MAEHs/E,GAAqB9C,EAAkBl5E,OA/BpB,GAgCtBygE,EAAa,CAAEF,aAAAA,MAEhB,CAACyb,EAAmB9C,EAAkBl5E,OAAQygE,EAAcF,IAE/D,MAAM6b,GAAiBz6E,EAAAA,EAAAA,KAAY,KACjC++D,EAAiB,CAAEH,aAAAA,MAClB,CAACG,EAAkBH,IAEtB,IAAKxjE,EACH,OAGF,MAAMs/E,EAAoBnD,EAAkBl5E,OAAS,EAErD,OACE,0BAAKoN,IAAKrQ,EAAI8B,GAAIwD,UAAU,cAAckC,IAAK3C,EAAK4iB,MAAQ,WAAQjpB,GAClE,0BAAK8G,UAAU,sBACb,0BAAKA,UAAU,iBACb,yBAAIA,UAAU,QAAQkC,IAAI,QAAQxH,EAAIktB,OACtC,wBAAG5nB,UAAU,QAAQkC,IAAI,QAAQ3C,EAAK,WAAY7E,EAAIw9B,MAAO,OAE/D,mBAACr4B,EAAA,EAAD,CACEG,UAAW05E,EAAU,gBAAaxgF,EAClC6G,MAAM,UACNvF,KAAK,OACLszC,MAAI,EACJC,OAAK,EACL9tC,QAAS85E,GAERx6E,EAAKm6E,EAAU,qBAAuB,sBAG3C,0BAAK15E,UAAU,qBACXg6E,GAAqB,mBAAC/pE,EAAA,EAAD,MACtB+pE,GAAqBnD,EAAkB/wE,KAAKuuC,GAC3C,mBAACD,GAAA,EAAD,CACEC,QAASA,EACT75C,KAAMy/E,EAAAA,GACNt3C,oBAAqBA,EACrBmvC,WAAYQ,GAAcjrD,GAAemyD,EACzCt4C,cAAUhoC,EACV+G,QAASqnB,EACTgtB,eAAa,OAIlB0lC,GACC,mBAAC,KAAD,CACEp6E,OAAQynB,EACRgwB,YAAaw/B,EAAkB,GAC/B7vE,QAASugB,SCpFbgV,IAAe56B,EAAAA,EAAAA,KAAU66B,GAAOA,KAAM,KAAO,GA2EnD,IAAez+B,EAAAA,EAAAA,KAAKC,EAAAA,EAAAA,KACjBC,IACC,MAAM4d,GAAgBq+D,EAAAA,EAAAA,IAA2Bj8E,IAC3C,MAAE6hC,EAAF,UAASq6C,GAAct+D,GAAiB,IACxC,SAAEu+D,GAAan8E,EAAO+1C,SAE5B,MAAO,CACLlU,MAAAA,EACAu6C,YAAaD,EAASxlC,OACtBulC,UAAAA,KATcn8E,EAzE6B,IAM3C,IAN4C,QAChDgJ,EADgD,SAEhD6F,EAFgD,MAGhDizB,EAHgD,YAIhDu6C,EAJgD,UAKhDF,GACI,EACJ,MAAM,qBAAEG,IAAyBt7E,EAAAA,EAAAA,MAG3B0R,GAAe5X,EAAAA,EAAAA,IAAuB,MAEtCyG,GAAOC,EAAAA,EAAAA,MAEN6nB,EAAakzD,IAAkBl5E,EAAAA,EAAAA,KAAS,IAG7CwgC,QAASc,IACPZ,EAAAA,GAAAA,IAAwB,CAAEC,QAAStxB,EAAcuxB,WAtBzB,MAsE5B,OA5CA5nC,EAAAA,EAAAA,KAAU,KACRkiC,IAAa,KACX+9C,WAIJv4D,EAAAA,EAAAA,IAAelV,EAAU7F,GAuCvB,0BAAKnB,IAAK6K,EAAc1Q,UAAU,8BAA8BkC,IAAK3C,EAAK4iB,MAAQ,WAAQjpB,GArC5F,WACE,QAAcA,IAAV4mC,EAIJ,OAAKA,GAASu6C,EACLA,EAAYv0E,KAAKtJ,GACtB,mBAAC,GAAD,CACEuO,IAAKvO,EACL0hE,aAAc1hE,EACdmmC,oBAAqBA,EACrB62C,gBAAiBnyD,EACjBoyD,cAAec,MAKjBJ,EACGA,EAAUx8E,OAIRw8E,EAAUr0E,KAAKtJ,GACpB,mBAAC,GAAD,CACEuO,IAAKvO,EACL0hE,aAAc1hE,EACdmmC,oBAAqBA,EACrB62C,gBAAiBnyD,EACjBoyD,cAAec,MATV,wBAAGv6E,UAAU,cAAckC,IAAI,QAA/B,kBAcJ,mBAACuiB,GAAA,EAAD,MAKJmxD,QC4CP,IAAe73E,EAAAA,EAAAA,KAAKC,EAAAA,EAAAA,KACjBC,IACC,MAAM4d,GAAgB2+D,EAAAA,EAAAA,IAAuBv8E,IACvC,MAAE6hC,EAAF,QAAS3H,GAAYtc,GAAiB,IACtC,OAAE7P,EAAF,SAAUC,IAAaolB,EAAAA,EAAAA,IAAyBpzB,IAAW,GAC3Doc,EAAOrO,GAASU,EAAAA,EAAAA,IAAWzO,EAAQ+N,QAAU9S,EAKnD,MAAO,CACL4mC,MAAAA,EACA3H,QAAAA,EACA9d,KAAAA,EACAogE,cARoBpgE,GAAOqgE,EAAAA,EAAAA,IAAoBz8E,EAAQoc,QAAQnhB,EAS/D0kC,gBARsB9iC,QAAQkR,KAAWymB,EAAAA,EAAAA,IAAqBx0B,EAAQ+N,GAStE2uE,cARoB7/E,QAAQuf,IAASvf,QAAQmR,KAAa+Z,EAAAA,EAAAA,IAAiB3L,EAAMpO,GASjF4xD,uBAAwB/iE,QAAQkR,KAAW8xD,EAAAA,EAAAA,IAA6B7/D,EAAQ+N,MAjBlEhO,EAhGyB,IAUvC,IAVwC,SAC5C6O,EAD4C,MAE5CizB,EAF4C,QAG5C3H,EAH4C,KAI5C9d,EAJ4C,cAK5CogE,EAL4C,uBAM5C5c,EAN4C,gBAO5CjgC,EAP4C,cAQ5C+8C,EAR4C,QAS5C3zE,GACI,EACJ,MAAM,eACJ4zE,EADI,YAEJzzD,EAFI,kBAGJ0zD,IACE77E,EAAAA,EAAAA,MAGE0R,GAAe5X,EAAAA,EAAAA,IAAuB,OAErCwlE,EAAiBC,IAAYC,EAAAA,GAAAA,GAAYX,IAG9Ch8B,QAASc,IACPZ,EAAAA,GAAAA,IAAwB,CAAEC,QAAStxB,EAAc+jE,WA1BzB,MA4BtBH,EAAcqG,IAAiBhd,EAAAA,EAAAA,IAA4BtjD,EAAMogE,GAAenG,YAEhFwG,GAAiBx7E,EAAAA,EAAAA,KAAY,CAAC69D,EAAehqC,EAAoB4qC,KACjEuW,IACEvW,EACFO,GAAiBvB,IACf51C,EAAY,CAAEg2C,IAAAA,EAAKJ,YAAAA,EAAa5pC,SAAAA,OAGlChM,EAAY,CAAEg2C,IAAAA,EAAKhqC,SAAAA,KAInBnrB,EAAAA,IACF6yE,EAAkB,CAAE/6C,WAAO5mC,MAE5B,CAACo7E,EAAahW,EAAiBn3C,EAAa0zD,IAEzCt7E,GAAOC,EAAAA,EAAAA,MAEbuiB,EAAAA,EAAAA,IAAelV,EAAU7F,GA8BzB,MAAM+zE,EAAajgF,aAAkB5B,IAAV4mC,GAAuB3H,GAAWA,EAAQx6B,QAErE,OACE,0BAAKqC,UAAU,YAAYkC,IAAK3C,EAAK4iB,MAAQ,WAAQjpB,GACnD,mBAAC2qB,GAAA,EAAD,CACEhe,IAAK6K,EACL1Q,WAAW+B,EAAAA,EAAAA,GAAe,8BAA+Bg5E,GAAc,QACvEj3D,MAAOqU,EACPqK,aAAa,aACb42C,iBAxFkB,GAyFlBt4C,YAAU,EACV/c,WAAY62D,GAvClB,WACE,QAAc1hF,IAAV4mC,EAIJ,OAAK3H,EAMAA,EAAQx6B,OAMNw6B,EAAQryB,KAAKq3D,GAClB,mBAAC,GAAD,CACEpyD,IAAKoyD,EAAI3gE,GACT2gE,IAAKA,EACLx6B,oBAAqBA,EACrB1iC,QAASq0E,EAAcwG,OAAiB5hF,EACxC0kC,gBAAiBA,MAVjB,wBAAG59B,UAAU,cAAckC,IAAI,QAAQ3C,EAAK,gBAN5C,mBAACklB,GAAA,EAAD,MAkCCmxD,IAEFrX,O,eCzHP,MAAMyc,GAAqC,CACzC,CACE,CAAE34D,KAAM,YAAauF,MAAO,mCAC5B,CAAEvF,KAAM,uBAAwBuF,MAAO,6CAA8CqzD,cAAc,IAErG,CACE,CAAE54D,KAAM,eAAgBuF,MAAO,sCAC/B,CAAEvF,KAAM,gBAAiBuF,MAAO,yCAI9BszD,GAAmC,CACvC,CACE,CAAE74D,KAAM,UAAWuF,MAAO,sBAC1B,CAAEvF,KAAM,WAAYuF,MAAO,wBAE7B,CACE,CAAEvF,KAAM,UAAWuF,MAAO,sBAC1B,CAAEvF,KAAM,UAAWuF,MAAO,wBA+E9B,IAAe7pB,EAAAA,EAAAA,KAtE0B,IAA6B,IAA5B,QAAE40B,EAAF,WAAWwoD,GAAiB,EACpE,MAAM57E,GAAOC,EAAAA,EAAAA,MAsBP,OAAE47E,GAAYD,EAEpB,OACE,0BAAKn7E,UAAU,sBACb,0BAAKA,UAAU,8BACb,0BAAKA,UAAU,6BAA6BT,EAAK,0BAEhD67E,GACC,0BAAKp7E,UAAU,gCACZq7E,EAAAA,GAAAA,IAAe97E,EAAuB,IAAjB67E,EAAOvxD,SAD/B,OACmDwxD,EAAAA,GAAAA,IAAe97E,EAAuB,IAAjB67E,EAAOtxD,WAKnF,4BAAO9pB,UAAU,8BACb2yB,EAAUuoD,GAAiBF,IAAkBl1E,KAAKw1E,GAClD,6BACGA,EAAIx1E,KAAKy1E,IACR,MAAMC,EAASL,EAAmBI,EAAKl5D,MAEvC,OAAIk5D,EAAKN,aAEL,6BACE,wBAAGj7E,UAAU,mCAAmCw7E,EAAMC,WAAtD,KACA,yBAAIz7E,UAAU,qCAAqCT,EAAKg8E,EAAK3zD,SAMjE,6BACE,wBAAG5nB,UAAU,oCACV64B,EAAAA,GAAAA,IAAqB2iD,EAAMviF,UAE7B,IAtDe,KAAoD,IAAnD,OAAEyiF,EAAF,WAAUD,GAAyC,EAClF,IAAKC,EACH,OAGF,MAAMC,EAAmBvgE,OAAOsgE,GAAU,EAE1C,OACE,2BAAM17E,WAAW+B,EAAAA,EAAAA,GAAe,4BAA6B45E,GAAoB,aAC9EA,EAAoB,KAAG9iD,EAAAA,GAAAA,IAAqBp4B,KAAKwT,IAAIynE,MAAc,KAAG7iD,EAAAA,GAAAA,IAAqB6iD,KAC3FD,GACC,sCACG,IADH,IAEIA,EAFJ,QA4CSG,CAAwBJ,GACzB,yBAAIx7E,UAAU,qCAAqCT,EAAKg8E,EAAK3zD,oBCpC/E,IAAe7pB,EAAAA,EAAAA,KA5C+B,IAAiB,IAAhB,QAAEX,GAAc,EAC7D,MAAMmC,GAAOC,EAAAA,EAAAA,KAEPg+B,GAAiBxuB,EAAAA,EAAAA,IAA4B5R,GAC7CqgC,GAAenvB,EAAAA,EAAAA,IAASlP,EAAAA,EAAAA,IAAoBhC,EAAS,UACrDsgC,EAAe5iC,SAAQ6iC,EAAAA,EAAAA,IAAqBvgC,IAElD,OACE,wBAAG4C,UAAU,2BACX,0BAAKA,UAAU,kCACb,0BAAKA,UAAU,oCAoBvB,SAAuBT,EAAcnC,EAAqByR,EAAkB6uB,GAC1E,OAAK7uB,EAKH,2BAAM7O,UAAU,iBACd,0BAAK3G,IAAKwV,EAASsB,IAAI,GAAGnQ,WAAW+B,EAAAA,EAAAA,GAAe,uBAAwB27B,GAAgB,YAC3FtwB,EAAAA,EAAAA,IAAgBhQ,IAAY,wBAAG4C,UAAU,eACzCm+B,EAAAA,EAAAA,GAAqB5+B,EAAMnC,GAAS,KAPhC+gC,EAAAA,EAAAA,GAAqB5+B,EAAMnC,GArB3BghC,CAAc7+B,EAAMnC,EAASqgC,GAAgBD,EAAgBE,IAEhE,0BAAK19B,UAAU,iCACZT,EAAK,0BAA2BnC,EAAQy+E,SAI7C,0BAAK77E,UAAU,iCACb,0BAAKA,UAAU,kCACZ87E,EAAAA,GAAAA,IAAsC,IAAf1+E,EAAQod,KAAajb,EAAKiuB,OAEpD,0BAAKxtB,UAAU,iCACZ5C,EAAQ6kD,SAAW1iD,EAAK,2BAA4BnC,EAAQ6kD,UAAY,kBCtBnF,IAAI85B,GACAC,GAWJ,MAAMC,GAAwB,CAC5BC,YAAa,4BACbC,eAAgB,+BAChBC,UAAW,mCACXC,cAAe,kCACfC,mBAAoB,mCACpBC,0BAA2B,0CAC3BC,eAAgB,8BAChBC,kBAAmB,mCAEfC,GAAiB1/E,OAAOu8B,KAAK0iD,IAE7BU,GAAsB,CAC1BT,YAAa,yBACbU,aAAc,0BACdJ,eAAgB,4BAChBK,cAAe,2BACfC,aAAc,0BACdT,cAAe,4BAEXU,GAAe//E,OAAOu8B,KAAKojD,IAyIjC,IAAe5+E,EAAAA,EAAAA,KAAKC,EAAAA,EAAAA,KAClB,CAACC,EAAD,KAAoC,UAA3B,OAAE+N,GAAyB,EAClC,MAAMmvE,GAAa6B,EAAAA,EAAAA,IAAiB/+E,EAAQ+N,GACtCqO,GAAO3N,EAAAA,EAAAA,IAAWzO,EAAQ+N,GAIhC,MAAO,CAAEmvE,WAAAA,EAAY8B,KAHR5iE,MAAAA,GAAH,UAAGA,EAAM0uB,gBAAT,aAAG,EAAgBm0C,eAGFvqD,QAFI,wBAAftY,MAAAA,OAAA,EAAAA,EAAMc,SALNnd,EA5H0B,IAMxC,UANyC,OAC7CgO,EAD6C,SAE7Ca,EAF6C,WAG7CsuE,EAH6C,KAI7C8B,EAJ6C,QAK7CtqD,GACI,EACJ,MAAMpzB,GAAOC,EAAAA,EAAAA,KAEPkR,GAAe5X,EAAAA,EAAAA,IAAuB,OACrCm6D,EAASkqB,IAAc97E,EAAAA,EAAAA,KAAS,GACjC+7E,GAAetkF,EAAAA,EAAAA,IAAiB,KAEhC,eAAEukF,EAAF,yBAAkBC,IAA6Bt+E,EAAAA,EAAAA,OAErD3E,EAAAA,EAAAA,KAAU,KACRgjF,EAAe,CAAErxE,OAAAA,EAAQ2mB,QAAAA,MACxB,CAAC3mB,EAAQqxE,EAAgB1qD,KAE5Bt4B,EAAAA,EAAAA,KAAU,KACHwS,IACHuwE,EAAankF,QAAU,MAExB,CAAC4T,IAEJ,MAAM0wE,GAAS79E,EAAAA,EAAAA,KAAQ,IACdizB,EAAUoqD,GAAeL,IAC/B,CAAC/pD,IAEE6qD,GAAc99E,EAAAA,EAAAA,KAAQ,IACnBizB,EAAUgqD,GAAsBV,IACtC,CAACtpD,IAgEJ,OA7DAt4B,EAAAA,EAAAA,KAAU,KACH8gF,GAILoC,EAAOzqC,SAASzwB,IACd,MAAMo7D,EAAQtC,EAAW94D,GACQ,iBAAVo7D,GAGrBH,EAAyB,CACvBj7D,KAAAA,EACArW,OAAAA,EACA0xE,MAAOD,EAEPxC,aAAuB,mBAAT54D,SAInB,CAACk7D,EAAQvxE,EAAQmvE,EAAYmC,KAEhCjjF,EAAAA,EAAAA,KAAU,KACR,iBAlGJ8gD,iBAME,OALK4gC,KACHA,GAAqB,8BACrBC,SAAoBD,IAGfA,GA6FG4B,GAED1qB,EAKAkoB,GAILoC,EAAOzqC,SAAQ,CAACzwB,EAAMR,KACpB,MAAM47D,EAAQtC,EAAW94D,GAGzB,GAFiC,iBAAVo7D,GAERL,EAAankF,QAAQwD,SAAS4lB,GAC3C,OAGF,MAAM,UAAEu7D,GAAcH,EAEtBzB,GAAY6B,OACVntE,EAAazX,QAAS+d,SAAS6K,GAC/B,CACE+F,MAAOroB,EAAMi+E,EAAuCn7D,OACjDu7D,GAAa,CACdtpE,OAASzD,IAAcitE,EAAAA,GAAAA,IAAQ,4BAA6B,CAAEJ,MAAOE,EAAW/sE,EAAAA,EAAGosE,KAAAA,IACnFc,aAAcx+E,EAAK,qBAElBk+E,IAIPL,EAAankF,QAAQi0B,KAAK7K,MA9B1B86D,GAAW,IAJf,KAqCC,CAACI,EAAQC,EAAavqB,EAASkoB,EAAY57E,EAAMyM,EAAQsxE,EAA0BL,IAEjFhqB,GAAYkoB,EAKf,0BAAKn7E,WAAW+B,EAAAA,EAAAA,GAAe,2BAA4BkxD,GAAW,UACpE,mBAAC,GAAD,CAAoBkoB,WAAYA,EAAYxoD,QAASA,KAEnDyqD,EAAankF,QAAQ0E,QAAU,mBAAC8mB,GAAA,EAAD,MAEjC,0BAAK5e,IAAK6K,GACP6sE,EAAOz3E,KAAK23E,GACX,0BAAKz9E,WAAW+B,EAAAA,EAAAA,GAAe,qBAAsBq7E,EAAankF,QAAQwD,SAASghF,IAAU,eAIhG3iF,QAAO,QAAE,EAAAqgF,EAAoC6C,yBAAtC,aAAC,EAAwDrgF,SAC/D,0BAAKqC,UAAU,wBACb,yBAAIA,UAAU,8BAA8BT,EAAK,+BAE/C47E,EAAoC6C,kBAAkBl4E,KAAK1I,GAC3D,mBAAC,GAAD,CAAyBA,QAASA,QApBnC,mBAACqnB,GAAA,EAAD,UChCX,IAAe1mB,EAAAA,EAAAA,KAAKC,EAAAA,EAAAA,KAClB,CAACC,EAAD,KAA8C,IAArC,OAAEggF,GAAmC,EAC5C,MAAM,OAAEC,EAAF,QAAUC,GAAYlgF,EAAOmgF,YAEnC,MAAO,CACLF,OAAQA,MAAAA,OAAF,EAAEA,EAASD,EAAOllB,QACxBhmD,QAASorE,MAAAA,OAAD,EAACA,EAAUF,EAAOllB,UAAY,MANxB/6D,EAhGiC,IAQ/C,IARgD,KACpDqc,EADoD,QAEpDjd,EAFoD,OAGpD6gF,EAHoD,WAIpDI,EAJoD,YAKpDC,EALoD,OAMpDJ,EANoD,OAOpDnrE,GACI,EACJ,MAAM,sBACJwrE,EADI,SAEJrnD,EAFI,iBAGJsnD,IACEx/E,EAAAA,EAAAA,MAEEy/E,GAAkB5jE,EAAAA,EAAAA,GAAoBwjE,EAAWK,cAChDj9C,EAAWk9C,IAAgBt9E,EAAAA,EAAAA,KAAkB,GAC9Cu9E,EAAkB9jF,QAAQojF,IAC1B,OAAEnlB,EAAF,KAAU/3D,GAASi9E,EACnB1+E,GAAOC,EAAAA,EAAAA,MAEbnF,EAAAA,EAAAA,KAAU,KAEHukF,GAAmBH,IAAoBJ,EAAWK,aACrDH,EAAsB,CACpBlkE,KAAAA,EAAMnO,UAAW9O,EAAQZ,GAAIu8D,OAAAA,EAAQhmD,OAAAA,EAAQ8rE,MA5B/B,EA4BqDC,mBAAmB,MAIzF,CAACT,EAAWK,YAAaE,IAE5B,MAAMG,GAAsBz/E,EAAAA,EAAAA,KAAY,KACtCq/E,GAAa,GACbJ,EAAsB,CACpBlkE,KAAAA,EAAMnO,UAAW9O,EAAQZ,GAAIu8D,OAAAA,EAAQhmD,OAAAA,EAAQ8rE,MApC3B,OAsCnB,CAACxkE,EAAMkkE,EAAuBnhF,EAAQZ,GAAIuW,EAAQgmD,KAErD1+D,EAAAA,EAAAA,KAAU,KACRskF,GAAa,KACZ,CAACT,IAEJ,MAAMc,GAAoB1/E,EAAAA,EAAAA,KAAa9C,IACrC06B,EAAS,CAAE16B,GAAAA,IACXgiF,MACC,CAACA,EAAkBtnD,IAetB,OACE,0BAAKl3B,UAAU,qBACb,0BAAKA,UAAU,eACZk+E,EACGA,EAAOp4E,KAAKtJ,GACZ,mBAAC4nB,GAAA,EAAD,CACErZ,IAAKvO,EACLwD,UAAU,sBAEVC,QAAS,IAAM++E,EAAkBxiF,IAEjC,mBAAC6nB,GAAA,EAAD,CACEgY,WAAW,OACX9X,OAAQ/nB,EACR0qC,eAAa,EACb5P,kBAAgB,OAIpB,mBAAC7S,GAAA,EAAD,MACHy5D,GAjCP,WACE,MAAMe,EAAkBZ,EAAWK,YAAcR,EAAQvgF,OAEzD,OAAO0gF,EAAWK,YArDA,GAqD+BO,EAAkB,GACjE,mBAAC,GAAD,CACE/mD,MAAO+mD,EACP/wC,SAAS,QACTzM,UAAWA,EACXxhC,QAAS8+E,IAyBEG,IAEb,0BAAKl/E,UAAU,cAAckC,IAAK3C,EAAK4iB,MAAQ,WAAQjpB,GACrD,2BAAM8G,UAAU,eAAekC,IAAI,QAAQlB,GAC3C,2BAAMhB,UAAU,iBAAiBkC,IAAK3C,EAAK4iB,MAAQ,YAASjpB,IAQ7CoN,EAPE+3E,EAAWK,aAOES,EAPWb,GAQhC,GAAMh4E,EAAQ64E,EAAS,KAAKv8E,UAAY,GATjD,OAQR,IAAuB0D,EAAe64E,MC7DtC,IAAephF,EAAAA,EAAAA,KAAKC,EAAAA,EAAAA,KACjBC,IACC,MACEmgF,aAAa,OAAEpyE,EAAF,UAAUE,GADnB,aAEJmxB,GACEp/B,EAEJ,OAAK+N,GAAWE,EAOT,CACLmO,MAJW3N,EAAAA,EAAAA,IAAWzO,EAAQ+N,GAK9B5O,SAJckP,EAAAA,EAAAA,IAAkBrO,EAAQ+N,EAAQE,GAKhDmxB,aAAAA,GATO,KAROr/B,EAzC2B,IAMzC,IAN0C,QAC9CgJ,EAD8C,SAE9C6F,EAF8C,KAG9CwN,EAH8C,QAI9Cjd,EAJ8C,aAK9CigC,GACI,EACJ,MAAM99B,GAAOC,EAAAA,EAAAA,KAGb,IAFAuiB,EAAAA,EAAAA,IAAelV,EAAU7F,IAEpB5J,IAAYid,EACf,OAAO,mBAACoK,GAAA,EAAD,MAGT,MAAM,QAAEioD,EAAF,QAAWv0C,IAAYinD,EAAAA,EAAAA,IAAehiF,GAC5C,IAAK+6B,EAAQA,QACX,OAGF,MAAMknD,GAAkBC,EAAAA,GAAAA,IAAqBnnD,EAAQA,QAAS,UAE9D,OACE,0BAAKn4B,UAAU,cAAckC,IAAK3C,EAAK4iB,MAAQ,WAAQjpB,GACrD,yBAAI8G,UAAU,gBAAgBkC,IAAI,SAAQoY,EAAAA,GAAAA,GAAWoyD,EAAQ3B,SAAU,CAAC,QAAS,QACjF,0BAAK/qE,UAAU,mCACZq9B,GAAgBqvC,EAAQC,QAAQ7mE,KAAKm4E,GACpC,mBAAC,GAAD,CACElzE,IAAM,GAAE3N,EAAQZ,MAAMyhF,EAAOllB,SAC7B1+C,KAAMA,EACNjd,QAASA,EACT6gF,OAAQA,EACRI,WAAYgB,EAAgBpB,EAAOllB,QACnCulB,YAAanmD,EAAQmmD,iBAGvBjhD,GAAgB,mBAAC5Y,GAAA,EAAD,YCvBpBikB,GAA2B,4BA+JjC,IAAe3qC,EAAAA,EAAAA,KAAKC,EAAAA,EAAAA,KAClB,CAACC,EAAD,KAAoC,IAA3B,OAAEsmB,GAAyB,EAClC,MAAMnK,GAAO3N,EAAAA,EAAAA,IAAWxO,EAAQsmB,GAC1BlK,GAAO3N,EAAAA,EAAAA,IAAWzO,EAAQsmB,IAC1B,SAAE1jB,GAAa5C,EAAOshF,WAG5B,MAAO,CACLnlE,KAAAA,EAAMvZ,SAAAA,EAAU6C,SAHF43B,EAAAA,EAAAA,IAAkBjhB,GAAMkhB,EAAAA,EAAAA,IAAqBt9B,IAASu9B,EAAAA,EAAAA,IAAuBv9B,OAL7ED,EA7J0B,IAOxC,IAPyC,OAC7CumB,EAD6C,KAE7CnK,EAF6C,SAG7CvZ,EAH6C,QAI7C6C,EAJ6C,QAK7CsD,EAL6C,SAM7C6F,GACI,EACJ,MAAM,cACJ6iB,EADI,cAEJ8vD,EAFI,gBAGJC,IACEzgF,EAAAA,EAAAA,OAEG0gF,EAAoBC,EAAkBC,IAAqBt7E,EAAAA,GAAAA,MAC3DilC,EAAwBC,IAA6BnoC,EAAAA,EAAAA,KAAS,IAC9DulB,EAAO6iB,IAAYpoC,EAAAA,EAAAA,MACpB9B,GAAOC,EAAAA,EAAAA,MAEbuiB,EAAAA,EAAAA,IAAelV,EAAU7F,GAEzB,MAAM6hC,EAAmBzuB,GAAQA,EAAK2V,WAAmB,GACnD+Y,EAAkB1uB,GAAQA,EAAK6V,UAAkB,IAEhDF,EAAWC,IAAgB3uB,EAAAA,EAAAA,IAASwnC,IACpC5Y,EAAUC,IAAe7uB,EAAAA,EAAAA,IAASynC,IAClC+2C,EAAwBC,IAA6Bz+E,EAAAA,EAAAA,KAAUqC,IAEtErJ,EAAAA,EAAAA,KAAU,KACRylF,GAA2Bp8E,KAC1B,CAACA,KAEJrJ,EAAAA,EAAAA,KAAU,KACRmvC,GAA0B,GAC1Bo2C,MACC,CAACA,EAAmBr7D,KAEvBlqB,EAAAA,EAAAA,KAAU,KACR21B,EAAa6Y,GACb3Y,EAAY4Y,KACX,CAACD,EAAkBC,EAAiB1uB,KAEvC/f,EAAAA,EAAAA,KAAU,KACJwG,IAAak/E,EAAAA,GAAAA,WACfv2C,GAA0B,GAC1BC,OAASvwC,GACT0mF,OAED,CAACA,EAAmB/+E,IAEvB,MAAM6vB,GAAwBpxB,EAAAA,EAAAA,KAAa0C,IACzCguB,EAAahuB,EAAEmI,OAAO7D,OACtBkjC,GAA0B,KACzB,IAEG3Y,GAAuBvxB,EAAAA,EAAAA,KAAa0C,IACxCkuB,EAAYluB,EAAEmI,OAAO7D,OACrBkjC,GAA0B,KACzB,IAEGw2C,GAA2B1gF,EAAAA,EAAAA,KAAa0C,IAC5C89E,EAA0B99E,EAAEmI,OAAO+mB,SACnCsY,GAA0B,KACzB,IAEGW,GAAoB7qC,EAAAA,EAAAA,KAAY,KACpC,MAAM8qC,EAAmBra,EAAUsY,OAC7BgC,EAAkBpa,EAASoY,OAE5B+B,EAAiBzsC,QACpB8rC,EAASf,IAGXhZ,EAAc,CACZnL,OAAAA,EACA7gB,SAAUm8E,EACV9vD,UAAWqa,EACXna,SAAUoa,MAEX,CAACta,EAAWE,EAAUP,EAAenL,EAAQs7D,IAE1CI,GAAsB3gF,EAAAA,EAAAA,KAAY,KACtCkgF,EAAc,CAAEj7D,OAAAA,IAChBq7D,IACAH,MACC,CAACG,EAAmBH,EAAiBD,EAAej7D,IAEvD,IAAKnK,EACH,OAGF,MAAMqnB,EAAY5gC,IAAak/E,EAAAA,GAAAA,WAE/B,OACE,0BAAK//E,UAAU,cACb,0BAAKA,UAAU,iBACb,0BAAKA,UAAU,WACb,mBAACqkB,GAAA,EAAD,CACEE,OAAQnK,EAAK5d,GACb6/B,WAAW,QACX/X,OAAO,gBACP47D,cAAY,IAEd,mBAAC38D,GAAA,EAAD,CACE/mB,GAAG,kBACHw0B,MAAOzxB,EAAK,iCACZgH,SAAUmqB,EACVpqB,MAAOypB,EACPnJ,MAAOA,IAAU8hB,GAA2B9hB,OAAQ1tB,IAEtD,mBAACqqB,GAAA,EAAD,CACE/mB,GAAG,iBACHw0B,MAAOzxB,EAAK,gCACZgH,SAAUsqB,EACVvqB,MAAO2pB,IAET,0BAAKjwB,UAAU,gCACb,mBAACixB,GAAA,EAAD,CACEC,QAAS2uD,EACT7uD,MAAOzxB,EAAK,iBACZo2C,SAAUp2C,EAAKsgF,EACX,gCACA,kCACJt5E,SAAUy5E,MAIhB,0BAAKhgF,UAAU,WACb,mBAACokB,GAAA,EAAD,CAAU5jB,KAAK,SAAS0F,QAAM,EAAC4wB,aAAW,EAAC72B,QAAS0/E,GACjDpgF,EAAK,oBAIZ,mBAACkrC,GAAA,EAAD,CACE/vB,QAAS6uB,EACTtpC,QAASkqC,EACTjjC,SAAUu6B,EACVvhC,UAAWX,EAAK,SAEfkiC,EACC,mBAACxxB,EAAA,EAAD,CAASlQ,MAAM,UAEf,wBAAGC,UAAU,gBAGjB,mBAACopB,GAAA,EAAD,CACExpB,OAAQ8/E,EACR14E,QAAS44E,EACT5+E,KAAMzB,EAAK,2BACX8pB,aAAc9pB,EAAK,iBACnB+pB,eAAgB22D,EAChBv5C,sBAAoB,SC9ItBy5C,GAAoB,6BAsV1B,IAAepiF,EAAAA,EAAAA,KAAKC,EAAAA,EAAAA,KAClB,CAACC,EAAD,KAAoC,YAA3B,OAAE+N,GAAyB,EAClC,MAAMqO,GAAO3N,EAAAA,EAAAA,IAAWzO,EAAQ+N,IAC1B,SAAEnL,GAAa5C,EAAOshF,WACtBa,EAAmBtlF,QAAO,UAACuf,EAAK0uB,gBAAN,aAAC,EAAes2B,cAC1CghB,GAAezuD,EAAAA,EAAAA,IAAiBvX,IAChC,QAAEimE,GAAYriF,EAAOshF,WAAWngD,SAASpzB,IAAW,GAE1D,MAAO,CACLqO,KAAAA,EACAxZ,SAAAA,EACAw/E,aAAAA,EACAD,iBAAAA,EACAG,cAAeF,EAAehmE,EAAKmmE,WAAYC,EAAAA,EAAAA,IAAiBpmE,EAAM,cACtEqmE,YAAaL,EAAehmE,EAAKmmE,WAAYC,EAAAA,EAAAA,IAAiBpmE,EAAM,YACpEsmE,UAAWN,EAAehmE,EAAKmmE,WAAYC,EAAAA,EAAAA,IAAiBpmE,EAAM,eAClEumE,gBAAiBN,EACjBjjD,aAAcp/B,EAAOo/B,aACrBwjD,wBAAuB,UAAE5iF,EAAO8tD,0BAAT,aAAE,EAA2BtpC,QAAQ+V,IAAOA,EAAE0zB,aAAYvuD,UAlBnEK,EAhV2B,IAezC,oBAf0C,OAC9CgO,EAD8C,KAE9CqO,EAF8C,SAG9CxZ,EAH8C,aAI9Cw/E,EAJ8C,iBAK9CD,EAL8C,cAM9CG,EAN8C,YAO9CG,EAP8C,UAQ9CC,EAR8C,eAS9Cj7C,EAT8C,QAU9C1+B,EAV8C,SAW9C6F,EAX8C,gBAY9C+zE,EAZ8C,aAa9CvjD,EAb8C,wBAc9CwjD,GACI,EACJ,MAAM,uBACJC,EADI,WAEJC,EAFI,WAGJC,EAHI,aAIJC,EAJI,cAKJC,EALI,gBAMJzB,EANI,SAOJvoD,EAPI,wBAQJiqD,EARI,qBASJC,IACEpiF,EAAAA,EAAAA,OAEG0gF,EAAoBC,EAAkBC,IAAqBt7E,EAAAA,GAAAA,KAC5D+8E,EAAehnE,EAAKuN,MACpB05D,EAAejnE,EAAK0uB,UAAY1uB,EAAK0uB,SAASlhB,OAAe,IAE5D0hB,EAAwBC,IAA6BnoC,EAAAA,EAAAA,KAAS,IAC9DumB,EAAOonC,IAAY3tD,EAAAA,EAAAA,IAASggF,GAAgB,KAC5Cx5D,EAAOonC,IAAY5tD,EAAAA,EAAAA,IAASigF,IAC5Bp0E,EAAOw8B,IAAYroC,EAAAA,EAAAA,OACnBulB,EAAO6iB,IAAYpoC,EAAAA,EAAAA,MACpBkgF,IAAYnzE,EAAAA,EAAAA,IAAkBiM,GAC9BuvB,IAAuBt7B,EAAAA,EAAAA,GAASizE,IAAW,EAAOhzE,EAAAA,GAAAA,SAClDizE,GAAgBnnE,EAAKwtB,UAAYu4C,EACjC7gF,IAAOC,EAAAA,EAAAA,MAEbuiB,EAAAA,EAAAA,IAAelV,EAAU7F,IAEzB3M,EAAAA,EAAAA,KAAU,KACJgjC,GAAgBsjD,IAClBQ,EAAwB,CAAEn1E,OAAAA,IAC1Bm1E,EAAwB,CAAEn1E,OAAAA,EAAQy1E,WAAW,IAC7CL,EAAqB,CAAEp1E,OAAAA,OAExB,CAACA,EAAQm1E,EAAyB9jD,EAAcsjD,EAAWS,KAE9D/mF,EAAAA,EAAAA,KAAU,KACJwG,IAAak/E,EAAAA,GAAAA,WACfv2C,GAA0B,GAC1BC,OAASvwC,MAEV,CAAC2H,IAEJ,MAAM6gF,IAAsBpiF,EAAAA,EAAAA,KAAY,KACtComC,EAAei8C,EAAAA,GAAAA,mBACd,CAACj8C,IAEEk8C,IAAwBtiF,EAAAA,EAAAA,KAAY,KACxComC,EAAei8C,EAAAA,GAAAA,cACd,CAACj8C,IAEEm8C,IAAuBviF,EAAAA,EAAAA,KAAY,KACvComC,EAAei8C,EAAAA,GAAAA,aACd,CAACj8C,IAEEo8C,IAAyBxiF,EAAAA,EAAAA,KAAY,KACzComC,EAAei8C,EAAAA,GAAAA,oBACd,CAACj8C,IAEEq8C,IAA4BziF,EAAAA,EAAAA,KAAY,KAC5ComC,EAAei8C,EAAAA,GAAAA,sBACd,CAACj8C,IAEEs8C,IAAqB1iF,EAAAA,EAAAA,KAAY,KACrComC,EAAei8C,EAAAA,GAAAA,WACd,CAACj8C,IAEEu8C,IAAsB3iF,EAAAA,EAAAA,KAAY,KACtComC,EAAei8C,EAAAA,GAAAA,gBACd,CAACj8C,IAEEw8C,IAAiB5iF,EAAAA,EAAAA,KAAaqpE,IAClCj/B,EAASi/B,GACTn/B,GAA0B,KACzB,IAEG8lB,IAAoBhwD,EAAAA,EAAAA,KAAa0C,IACrCgtD,EAAShtD,EAAEmI,OAAO7D,OAClBkjC,GAA0B,KACzB,IAEG24C,IAAoB7iF,EAAAA,EAAAA,KAAa0C,IACrCitD,EAASjtD,EAAEmI,OAAO7D,OAClBkjC,GAA0B,KACzB,IAEG44C,IAAoB9iF,EAAAA,EAAAA,KAAY,KACpC,MAAM+iF,EAAez6D,EAAMygB,OACrBi6C,EAAez6D,EAAMwgB,OAEtBg6C,EAAa1kF,OAKlBojF,EAAW,CACT/0E,OAAAA,EACA4b,MAAOy6D,EACPx6D,MAAOy6D,EACPp1E,MAAAA,IARAu8B,EAAS02C,MAUV,CAACt4D,EAAO7b,EAAQkB,EAAO0a,EAAOm5D,IAE3BwB,IAAqBjjF,EAAAA,EAAAA,KAAY,KACrComC,EAAei8C,EAAAA,GAAAA,gBACd,CAACj8C,IAEE88C,IAAyBljF,EAAAA,EAAAA,KAAY,KACzC,IAAK+a,EAAK0uB,SACR,OAGF,MAAM,mBAAE05C,GAAuBpoE,EAAK0uB,SAEpC+3C,EAAuB,CAAE90E,OAAQqO,EAAK7d,GAAIkmF,WAAYD,MACrD,CAACpoE,EAAMymE,IAEJ6B,IAAwB,UAAAtoE,EAAK0uB,gBAAL,mBAAe6qB,wBAAf,eAAiCj2D,SAAU,EAEnEilF,IAA0BljF,EAAAA,EAAAA,KAAQ,KACtC,IAAK2a,EAAKwoE,oBACR,OAAO,EAGT,IAAIphC,EAAa,CACf,eACA,YACA,aACA,YACA,aACA,cACA,eACAh/B,QACC1X,IAASsP,EAAKwoE,oBAAqB93E,KACpCpN,OAEF,MAAM,aAAEmlF,EAAF,SAAgBC,GAAa1oE,EAAKwoE,oBAOxC,OAJKC,GAAiBC,IACpBthC,GAAc,GAGTA,IACN,CAACpnC,IAEE2oE,IAAc,UAAC3oE,EAAK0uB,gBAAN,iBAAC,EAAek6C,oBAAhB,aAAC,EAA6BtlF,SAAW,EAEvDulF,IAAoB5jF,EAAAA,EAAAA,KAAY,KAChC+gF,EACFW,EAAW,CAAEh1E,OAAQqO,EAAK7d,KAChB6d,EAAKmmE,UAGfU,EAAc,CAAEl1E,OAAQqO,EAAK7d,KAF7BykF,EAAa,CAAEj1E,OAAQqO,EAAK7d,KAI9BojF,IACAH,IACAvoD,EAAS,CAAE16B,QAAItD,MACd,CACDmnF,EAAchmE,EAAKmmE,UAAWnmE,EAAK7d,GACnCojF,EAAmBH,EAAiBwB,EAAcC,EAAeF,EAAY9pD,IAG/E,GAAI7c,EAAK0kD,cAAgB1kD,EAAK2/C,YAC5B,OAGF,MAAMv4B,GAAY5gC,IAAak/E,EAAAA,GAAAA,WAE/B,OACE,0BAAK//E,UAAU,cACb,0BAAKA,UAAU,iBACb,0BAAKA,UAAU,WACb,mBAACuqC,GAAA,EAAD,CACEX,qBAAsBA,GACtBrjC,SAAU27E,GACVh7E,UAAWq5E,IAEb,mBAACh9D,GAAA,EAAD,CACE/mB,GAAG,cACHw0B,MAAOzxB,GAAK,aACZgH,SAAU+oD,GACVhpD,MAAOshB,EACPhB,MAAOA,IAAUu5D,GAAoBv5D,OAAQ1tB,EAC7CgO,UAAWq5E,IAEb,mBAACh9D,GAAA,EAAD,CACE/mB,GAAG,cACHwD,UAAU,OACVgxB,MAAOzxB,GAAK,0BACZgH,SAAU47E,GACV77E,MAAOuhB,EACP3gB,UAAWq5E,IAEZlmE,EAAKmmE,WACJ,mBAACp8D,GAAA,EAAD,CAAU5jB,KAAK,OAAOytC,WAAS,EAAChuC,QAASyhF,IACvC,2BAAM1hF,UAAU,SAAST,GAAK,cAC9B,2BAAMS,UAAU,YAAYqa,EAAKwtB,SAAWtoC,GAAK,cAAgBA,GAAK,iBAGzE6gF,GACC,mBAACh8D,GAAA,EAAD,CACE5jB,KAAK,UACLytC,WAAS,EACThuC,QAAS2hF,IAET,2BAAM5hF,UAAU,SAAST,GAAK,kBAC9B,2BAAMS,UAAU,YAAYT,GAAK,sBAGrC,mBAAC6kB,GAAA,EAAD,CACE5jB,KAAK,cACLytC,WAAS,EACThuC,QAAS6hF,GACT56E,UAAWw5E,GAEX,2BAAM1gF,UAAU,SAAST,GAAK,uBAC9B,2BAAMS,UAAU,WAAWkC,IAAI,QAC5B0gF,GADH,IA5OoB,IAiPtB,mBAACx+D,GAAA,EAAD,CACE5jB,KAAK,YACLytC,WAAS,EACThuC,QAAS4hF,GACT36E,UAAWq5E,GAEX,2BAAMvgF,UAAU,SAAST,GAAK,cAC9B,2BAAMS,UAAU,WAAWkC,IAAI,QAC5BygF,GADH,IAC2B9B,IAG7B,mBAACz8D,GAAA,EAAD,CACE5jB,KAAK,QACLytC,WAAS,EACThuC,QAAS8hF,IAET,2BAAM/hF,UAAU,SAAST,GAAK,0BAC9B,2BAAMS,UAAU,aAAYmjF,EAAAA,GAAAA,IAAcH,MAE3CrC,GACC,mBAACv8D,GAAA,EAAD,CACE5jB,KAAK,OACLP,QAAS+hF,GACT/zC,WAAS,EACT/mC,UAAW05E,GAEX,2BAAM5gF,UAAU,SAAST,GAAK,0BAC9B,2BAAMS,UAAU,YACb4gF,GAAkBuC,EAAAA,GAAAA,IAAcvC,EAAgBjjF,QAAU4B,GAAK,aAIrEzE,QAAO,UAACuf,EAAK+oE,oBAAN,aAAC,EAAmBzlF,SAC1B,mBAACymB,GAAA,EAAD,CACE5jB,KAAK,kBACLP,QAASgiF,GACTh0C,WAAS,GAET,2BAAMjuC,UAAU,SAAST,GAAK,mBAC9B,2BAAMS,UAAU,aACbmjF,EAAAA,GAAAA,IAAc9oE,EAAK+oE,aAAczlF,WAK1C,0BAAKqC,UAAU,WACb,mBAACokB,GAAA,EAAD,CAAU5jB,KAAK,QAAQytC,WAAS,EAAChuC,QAASsiF,IACxC,2BAAMviF,UAAU,SAAST,GAAK,iBAC9B,2BAAMS,UAAU,aAAYmjF,EAAAA,GAAAA,IAAa,UAAC9oE,EAAKyqC,oBAAN,QAAsB,MAG/D08B,IAAiBnnE,EAAK0uB,UACtB,0BAAK/oC,UAAU,gCACb,mBAACixB,GAAA,EAAD,CACEC,SAAU7W,EAAK0uB,SAAS05C,mBACxBzxD,MAAOzxB,GAAK,eACZgH,SAAUi8E,GACVt7E,UAAWw5E,MAKnB,0BAAK1gF,UAAU,WACb,mBAACokB,GAAA,EAAD,CAAU5jB,KAAK,SAAS0F,QAAM,EAAC4wB,aAAW,EAAC72B,QAAS0/E,GACjDpgF,GAAK,iBAIZ,mBAACkrC,GAAA,EAAD,CACE/vB,QAAS6uB,EACTtpC,QAASmiF,GACTl7E,SAAUu6B,GACVvhC,UAAWX,GAAK,SAEfkiC,GACC,mBAACxxB,EAAA,EAAD,CAASlQ,MAAM,UAEf,wBAAGC,UAAU,gBAGjB,mBAACopB,GAAA,EAAD,CACExpB,OAAQ8/E,EACR14E,QAAS44E,EACTjwE,WAAW2K,EAAAA,GAAAA,GACT+lE,IAAiBhmE,EAAKmmE,UAClBjhF,GAAK,2BACLA,GAAK,oCAAqC8a,EAAKuN,OACnD,CAAC,KAAM,oBAETyB,aAAcg3D,IAAiBhmE,EAAKmmE,UAAYjhF,GAAK,cAAgBA,GAAK,qBAC1E+pB,eAAgB45D,GAChBx8C,sBAAoB,SCvF5B,IAAe3oC,EAAAA,EAAAA,KAAKC,EAAAA,EAAAA,KAClB,CAACC,EAAD,KAAoC,IAA3B,OAAE+N,GAAyB,EAGlC,MAAO,CAAEqO,MAFI3N,EAAAA,EAAAA,IAAWzO,EAAQ+N,GAEjBsW,cAAerkB,EAAOqkB,iBAJrBtkB,EAnPsC,IAOpD,IAPqD,eACzD0nC,EADyD,mBAEzD29C,EAFyD,KAGzDhpE,EAHyD,cAIzDiI,EAJyD,QAKzDtb,EALyD,SAMzD6F,GACI,EACJ,MAAM,8BAAEy2E,IAAkCtkF,EAAAA,EAAAA,OAEnCukF,EAAaC,IAAkBniF,EAAAA,EAAAA,IAA8B,KAC7DoiF,EAAuBC,IAA4BriF,EAAAA,EAAAA,KAAS,IAC5DogC,EAAWk9C,IAAgBt9E,EAAAA,EAAAA,KAAS,GACrC9B,GAAOC,EAAAA,EAAAA,MAEbuiB,EAAAA,EAAAA,IAAelV,EAAU7F,GAEzB,MAAM28E,GAA0BrkF,EAAAA,EAAAA,KAAY,KAC1ComC,EAAei8C,EAAAA,GAAAA,qBACd,CAACj8C,IAEEk+C,GAA0BtkF,EAAAA,EAAAA,KAAY,KAC1ComC,EAAei8C,EAAAA,GAAAA,8BACd,CAACj8C,IAEEm+C,GAA6BvkF,EAAAA,EAAAA,KAAammE,IAC9C4d,EAAmB5d,EAAOlhD,OAAQkhD,EAAOqe,mBAAqBxhE,GAC9DojB,EAAei8C,EAAAA,GAAAA,wBACd,CAACr/D,EAAe+gE,EAAoB39C,KAEvCrrC,EAAAA,EAAAA,KAAU,KACRmpF,GAAgBnpE,MAAAA,OAAD,EAACA,EAAMwoE,sBAAwB,IAC9Ca,GAAyB,GACzB9oF,YAAW,KACT+jF,GAAa,KA3D0B,OA6DxC,CAACtkE,IAEJ,MAAM0pE,GAAyBzkF,EAAAA,EAAAA,KAAa0C,IAC1C,MAAM,KAAEqgB,GAASrgB,EAAEmI,OAEnB,SAAS65E,EAA0B19E,GACjC,OAAOA,QAAQpN,EAGjBsqF,GAAgBnrC,IAAD,IACVA,EACH,CAACh2B,GAAO2hE,EAA0B3rC,EAAEh2B,OACvB,iBAATA,GAA2B,CAC7B0gE,SAAUiB,EAA0B3rC,EAAEh2B,SAG1CqhE,GAAyB,KACxB,IAEGO,GAAwB3kF,EAAAA,EAAAA,KAAY,KACnC+a,IAILskE,GAAa,GACb2E,EAA8B,CAAEt3E,OAAQqO,EAAK7d,GAAI0nF,aAAcX,OAC9D,CAAClpE,EAAMkpE,EAAaD,IAEjBa,GAAoBzkF,EAAAA,EAAAA,KAAQ,IAC3B2a,GAASA,EAAK0uB,UAAa1uB,EAAK0uB,SAASq7C,cAIvC/pE,EAAK0uB,SAASq7C,cAAczmF,OAH1B,GAIR,CAAC0c,IAEEgqE,GAAmB3kF,EAAAA,EAAAA,KAAQ,IAC1B2a,GAASA,EAAK0uB,UAAa1uB,EAAK0uB,SAASu7C,QAIvCjqE,EAAK0uB,SAASu7C,QAAQ7hE,QAAO,QAAC,aAAEyhE,GAAH,SAAsBppF,QAAQopF,MAHzD,IAIR,CAAC7pE,IAEEkqE,GAAsBjlF,EAAAA,EAAAA,KAAammE,IACvC,MAAM,aAAEye,GAAiBze,EACzB,IAAKye,IAAiB7pE,EACpB,OAGF,MAAM,oBAAEwoE,GAAwBxoE,EAEhC,OAAOrd,OAAOu8B,KAAK2qD,GAAct/B,QAAO,CAACC,EAAQ95C,KAC/C,IACGm5E,EAAan5E,IACV83E,MAAAA,GAAAA,EAAsB93E,IACf,eAARA,GAAgC,iBAARA,GAAkC,cAARA,EAErD,OAAO85C,EAGT,MAAM2/B,EAxHZ,SAAqCz5E,GACnC,OAAQA,GACN,IAAK,eACH,MAAO,yBACT,IAAK,YACH,MAAO,8BACT,IAAK,eACH,MAAO,iCACT,IAAK,aACH,MAAO,+BACT,IAAK,YACH,MAAO,8BACT,IAAK,aACH,MAAO,+BACT,IAAK,cACH,MAAO,8BACT,IAAK,cACH,MAAO,8BACT,QACE,QAqGgB05E,CAA4B15E,GAE5C,IAAKy5E,EACH,OAAO3/B,EAGT,MAAM6/B,EAAmBnlF,EAAKilF,GAE9B,MAAQ,GAAE3/B,IAAUA,EAAOlnD,OAA6B,KAAI+mF,IAAxBA,MACnC,MACF,CAACrqE,EAAM9a,IAEV,OACE,0BAAKS,UAAU,cACb,0BAAKA,UAAU,iBACb,0BAAKA,UAAU,WACb,yBAAIA,UAAU,kBAAkBkC,IAAI,QAAQ3C,EAAK,6BAEjD,0BAAKS,UAAU,yBACb,mBAACixB,GAAA,EAAD,CACE5O,KAAK,eACL6O,SAAUqyD,EAAYoB,aACtB3zD,MAAOzxB,EAAK,wBACZqlF,UAAQ,EACRr+E,SAAUw9E,KAGd,0BAAK/jF,UAAU,yBACb,mBAACixB,GAAA,EAAD,CACE5O,KAAK,YACL6O,SAAUqyD,EAAYsB,UACtB7zD,MAAOzxB,EAAK,6BACZqlF,UAAQ,EACRr+E,SAAUw9E,KAGd,0BAAK/jF,UAAU,yBACb,mBAACixB,GAAA,EAAD,CACE5O,KAAK,eACL6O,SAAUqyD,EAAYT,eAAiBS,EAAYR,SACnD/xD,MAAOzxB,EAAK,gCACZqlF,UAAQ,EACRr+E,SAAUw9E,KAGd,0BAAK/jF,UAAU,yBACb,mBAACixB,GAAA,EAAD,CACE5O,KAAK,YACL6O,SAAUqyD,EAAYuB,UACtB9zD,MAAOzxB,EAAK,6BACZqlF,UAAQ,EACRr+E,SAAUw9E,KAGd,0BAAK/jF,UAAU,yBACb,mBAACixB,GAAA,EAAD,CACE5O,KAAK,aACL6O,SAAUqyD,EAAYwB,WACtB/zD,MAAOzxB,EAAK,8BACZqlF,UAAQ,EACRr+E,SAAUw9E,KAGd,0BAAK/jF,UAAU,yBACb,mBAACixB,GAAA,EAAD,CACE5O,KAAK,cACL6O,SAAUqyD,EAAYyB,YACtBh0D,MAAOzxB,EAAK,+BACZqlF,UAAQ,EACRr+E,SAAUw9E,KAGd,0BAAK/jF,UAAU,yBACb,mBAACixB,GAAA,EAAD,CACE5O,KAAK,cACL6O,SAAUqyD,EAAY0B,YACtBj0D,MAAOzxB,EAAK,+BACZqlF,UAAQ,EACRr+E,SAAUw9E,KAGd,0BAAK/jF,UAAU,yBACb,mBAACixB,GAAA,EAAD,CACE5O,KAAK,aACL6O,SAAUqyD,EAAY2B,WACtBl0D,MAAOzxB,EAAK,8BACZqlF,UAAQ,EACRr+E,SAAUw9E,MAKhB,0BAAK/jF,UAAU,WACb,mBAACokB,GAAA,EAAD,CACE5jB,KAAK,cACLytC,WAAS,EACTD,QAAM,EACN/tC,QAAS0jF,GAET,2BAAM3jF,UAAU,SAAST,EAAK,wBAC9B,2BAAMS,UAAU,YAAYmkF,KAIhC,0BAAKnkF,UAAU,WACb,yBAAIA,UAAU,kBAAkBkC,IAAI,QAAQ3C,EAAK,sBAEjD,mBAAC6kB,GAAA,EAAD,CACE5jB,KAAK,WACLP,QAAS2jF,GAERrkF,EAAK,wBAGP8kF,EAAiBv+E,KAAK2/D,GACrB,mBAACrhD,GAAA,EAAD,CACErZ,IAAK06D,EAAOlhD,OACZvkB,UAAU,wCAEVC,QAAS,IAAM4jF,EAA2Bpe,IAE1C,mBAACphD,GAAA,EAAD,CACEE,OAAQkhD,EAAOlhD,OACfD,OAAQigE,EAAoB9e,UAOtC,mBAACh7B,GAAA,EAAD,CACE/vB,QAAS+oE,EACTxjF,QAASgkF,EACT/jF,UAAWX,EAAK,QAChB2H,SAAUu6B,GAETA,EACC,mBAACxxB,EAAA,EAAD,CAASlQ,MAAM,UAEf,wBAAGC,UAAU,qBC3NvB,IAAejC,EAAAA,EAAAA,KAAKC,EAAAA,EAAAA,KACjBC,IACC,MAAM,cAAEqkB,GAAkBrkB,EAE1B,MAAO,CAAEqkB,cAAAA,KAJOtkB,EAnDoC,IAKlD,UALmD,KACvDqc,EADuD,cAEvDiI,EAFuD,OAGvD1iB,EAHuD,QAIvDoH,GACI,EACJ,MAAM,gBACJm+E,EADI,iBAEJC,IACEpmF,EAAAA,EAAAA,MAEEO,GAAOC,EAAAA,EAAAA,MACNijB,EAAQgD,IAAapkB,EAAAA,EAAAA,IAAS,IAE/BmhB,GAAY1pB,EAAAA,EAAAA,IAAyB,MAErCusF,GAAU3lF,EAAAA,EAAAA,KAAQ,KAAM,MAC5B,MAAM4lF,IAAsB,UAAAjrE,EAAK0uB,gBAAL,eAAeu7C,UAAW,IACnD1/B,QAAO,CAAC2gC,EAAe9f,KACjBA,EAAO+f,SAAY/f,EAAOggB,SAAWhgB,EAAOlhD,SAAWjC,GAC1DijE,EAAIr4D,KAAKu4C,EAAOlhD,QAEXghE,IACN,IAGCr/D,GAAYC,EAAAA,EAAAA,MAAYC,MAAMzB,KAEpC,OAAO4B,EAAAA,EAAAA,IAAkB++D,EAAoBp/D,EAAWzD,KACvD,WAACpI,EAAK0uB,gBAAN,aAAC,EAAeu7C,QAAShiE,EAAeG,IAErC4kC,GAAmB/nD,EAAAA,EAAAA,KAAailB,IACpC6gE,EAAiB,CAAEp5E,OAAQqO,EAAK7d,GAAI+nB,OAAAA,IACpCvd,MACC,CAACqT,EAAK7d,GAAI4oF,EAAkBp+E,IAE/B,OACE,mBAAC,GAAD,CACEpH,OAAQA,EACR2iB,cAAe8iE,EACf7iE,UAAWA,EACXE,kBAAmBnjB,EAAK,oBACxBkjB,OAAQA,EACRG,eAAgB6C,EAChB9C,SAAUwiE,EACVtiE,mBAAoBwkC,EACpBrgD,QAASA,QCyDf,IAAejJ,EAAAA,EAAAA,KAAKC,EAAAA,EAAAA,KAClB,CAACC,EAAD,KAAoC,IAA3B,OAAE+N,GAAyB,EAClC,MAAMqO,GAAO3N,EAAAA,EAAAA,IAAWzO,EAAQ+N,IACxB2Y,KAAMuB,GAAcjoB,EAAOmoB,MAGnC,MAAO,CACL/L,KAAAA,EACA6L,UAAAA,EACAw/D,iBALuBrrE,KAASomE,EAAAA,EAAAA,IAAiBpmE,EAAM,aAAeA,EAAKmmE,WAM3Ez4D,UAAW1N,IAAQqY,EAAAA,EAAAA,IAAcrY,MAVnBrc,EA9FsC,IAOpD,IAPqD,KACzDqc,EADyD,UAEzD6L,EAFyD,iBAGzDw/D,EAHyD,UAIzD39D,EAJyD,QAKzD/gB,EALyD,SAMzD6F,GACI,EACJ,MAAM,6BAAE84E,IAAiC3mF,EAAAA,EAAAA,MAEnCO,GAAOC,EAAAA,EAAAA,MACNomF,EAAuBC,EAAqBC,IAAwBxhF,EAAAA,GAAAA,MAE3Eyd,EAAAA,EAAAA,IAAelV,EAAU7F,GAEzB,MAAM++E,GAAiBrmF,EAAAA,EAAAA,KAAQ,IACxB2a,GAASA,EAAK0uB,UAAa1uB,EAAK0uB,SAASq7C,cAIvC/pE,EAAK0uB,SAASq7C,cAHZ,IAIR,CAAC/pE,IAEE2rE,GAAe1mF,EAAAA,EAAAA,KAAammE,IAChC,IAAKA,EAAOwgB,eACV,OAGF,MAAMC,EAAehgE,EAAUu/C,EAAOwgB,gBACtC,OAAKC,EAIE3mF,EAAK,iBAAiB05B,EAAAA,EAAAA,IAAgBitD,SAJ7C,IAKC,CAAC3mF,EAAM2mB,IAEJigE,GAAoB7mF,EAAAA,EAAAA,KAAammE,IACrC,GAAKprD,EAIL,MAAO,CAAC,CACNuN,MAAOroB,EAAK,WACZiB,KAAM,SACNs2B,aAAa,EACb0vB,QAAS,IAAMm/B,EAA6B,CAC1C35E,OAAQqO,EAAK7d,GACb+nB,OAAQkhD,EAAOlhD,OACf2/D,aAAc,SAGjB,CAAC3kF,EAAM8a,EAAMsrE,IAEhB,OACE,0BAAK3lF,UAAU,cACb,0BAAKA,UAAU,iBACb,0BAAKA,UAAU,UAAUkC,IAAK3C,EAAK4iB,MAAQ,WAAQjpB,GACjD,wBAAG8G,UAAU,cAAcT,EAAKwoB,EAAY,oBAAsB,oBAEjEg+D,EAAejgF,KAAK2/D,GACnB,mBAACrhD,GAAA,EAAD,CACErZ,IAAK06D,EAAOlhD,OACZvkB,UAAU,sBACVkG,QAAM,EACN81B,eAAgBmqD,EAAkB1gB,IAElC,mBAACphD,GAAA,EAAD,CACEE,OAAQkhD,EAAOlhD,OACfD,OAAQ0hE,EAAavgB,QAI1BigB,GACC,mBAACj7C,GAAA,EAAD,CACE/vB,SAAO,EACPza,QAAS4lF,EACT3lF,UAAWX,EAAK,0CAEhB,wBAAGS,UAAU,0BAGhBqa,GAAQqrE,GACP,mBAAC,GAAD,CACErrE,KAAMA,EACNza,OAAQgmF,EACR5+E,QAAS8+E,WCvEjBM,GAAsB,+BAkS5B,IAAeroF,EAAAA,EAAAA,KAAKC,EAAAA,EAAAA,KAClB,CAACC,EAAD,KAAoC,UAA3B,OAAE+N,GAAyB,EAClC,MAAMqO,GAAO3N,EAAAA,EAAAA,IAAWzO,EAAQ+N,IAC1B,SAAEnL,GAAa5C,EAAOshF,WACtB8G,EAAoBvrF,QAAQuf,MAAAA,OAAD,EAACA,EAAMgsE,oBAClC,QAAE/F,GAAYriF,EAAOshF,WAAWngD,SAASpzB,IAAW,GAE1D,MAAO,CACLqO,KAAAA,EACAxZ,SAAAA,EACAwlF,kBAAAA,EACA9F,eAAeE,EAAAA,EAAAA,IAAiBpmE,EAAM,cACtCsmE,WAAWF,EAAAA,EAAAA,IAAiBpmE,EAAM,eAClCgjB,aAAcp/B,EAAOo/B,aACrBujD,gBAAiBN,EACjBO,wBAAuB,UAAE5iF,EAAO8tD,0BAAT,aAAE,EAA2BtpC,QAAQ+V,IAAOA,EAAE0zB,aAAYvuD,UAfnEK,EAhS6B,IAa3C,0BAb4C,OAChDgO,EADgD,KAEhDqO,EAFgD,SAGhDxZ,EAHgD,kBAIhDwlF,EAJgD,cAKhD9F,EALgD,UAMhDI,EANgD,gBAOhDC,EAPgD,aAQhDvjD,EARgD,wBAShDwjD,EATgD,eAUhDn7C,EAVgD,QAWhD1+B,EAXgD,SAYhD6F,GACI,EACJ,MAAM,WACJk0E,EADI,iBAEJuF,EAFI,gBAGJ7G,EAHI,aAIJwB,EAJI,cAKJC,EALI,SAMJhqD,EANI,wBAOJiqD,EAPI,qBAQJC,IACEpiF,EAAAA,EAAAA,MAEEqiF,EAAehnE,GAAQA,EAAKuN,OAAe,GAC3C05D,EAAejnE,MAAAA,GAAAA,EAAM0uB,UAAY1uB,EAAK0uB,SAASlhB,OAAe,GAC9Du3C,EAAgB/kD,MAAAA,GAAH,UAAGA,EAAM0uB,gBAAT,aAAG,EAAgBs2B,cAE/BqgB,EAAoBC,EAAkBC,IAAqBt7E,EAAAA,GAAAA,MAC3DilC,EAAwBC,IAA6BnoC,EAAAA,EAAAA,KAAS,IAC9DumB,EAAOonC,IAAY3tD,EAAAA,EAAAA,IAASggF,IAC5Bx5D,EAAOonC,IAAY5tD,EAAAA,EAAAA,IAASigF,IAC5Bp0E,EAAOw8B,IAAYroC,EAAAA,EAAAA,OACnBulB,EAAO6iB,KAAYpoC,EAAAA,EAAAA,MACpBkgF,GAAYlnE,IAAQjM,EAAAA,EAAAA,IAAkBiM,GACtCuvB,IAAuBt7B,EAAAA,EAAAA,GAASizE,IAAW,EAAOhzE,EAAAA,GAAAA,SAClDhP,IAAOC,EAAAA,EAAAA,MAEbuiB,EAAAA,EAAAA,IAAelV,EAAU7F,IAEzB3M,EAAAA,EAAAA,KAAU,KACJgjC,IACF8jD,EAAwB,CAAEn1E,OAAAA,IAC1Bm1E,EAAwB,CAAEn1E,OAAAA,EAAQy1E,WAAW,IAC7CL,EAAqB,CAAEp1E,OAAAA,OAExB,CAACA,EAAQm1E,EAAyB9jD,EAAc+jD,KAEnD/mF,EAAAA,EAAAA,KAAU,KACJwG,IAAak/E,EAAAA,GAAAA,WACfv2C,GAA0B,GAC1BC,QAASvwC,MAEV,CAAC2H,IAEJ,MAAMmiF,IAAe3oE,MAAAA,GAAD,UAACA,EAAM0uB,gBAAP,iBAAC,EAAgBk6C,oBAAjB,aAAC,EAA8BtlF,SAAW,EACxDwmF,IAAqB9pE,MAAAA,GAAD,UAACA,EAAM0uB,gBAAP,iBAAC,EAAgBq7C,qBAAjB,aAAC,EAA+BzmF,SAAW,EAE/D+jF,IAAsBpiF,EAAAA,EAAAA,KAAY,KACtComC,EAAei8C,EAAAA,GAAAA,mBACd,CAACj8C,IAEEk8C,IAAwBtiF,EAAAA,EAAAA,KAAY,KACxComC,EAAei8C,EAAAA,GAAAA,cACd,CAACj8C,IAEEm8C,IAAuBviF,EAAAA,EAAAA,KAAY,KACvComC,EAAei8C,EAAAA,GAAAA,aACd,CAACj8C,IAEEq8C,IAA4BziF,EAAAA,EAAAA,KAAY,KAC5ComC,EAAei8C,EAAAA,GAAAA,sBACd,CAACj8C,IAEEs8C,IAAqB1iF,EAAAA,EAAAA,KAAY,KACrComC,EAAei8C,EAAAA,GAAAA,WACd,CAACj8C,IAEEu8C,IAAsB3iF,EAAAA,EAAAA,KAAY,KACtComC,EAAei8C,EAAAA,GAAAA,gBACd,CAACj8C,IAEEw8C,IAAiB5iF,EAAAA,EAAAA,KAAaqpE,IAClCj/B,EAASi/B,GACTn/B,GAA0B,KACzB,IAEG8lB,IAAoBhwD,EAAAA,EAAAA,KAAa0C,IACrCgtD,EAAShtD,EAAEmI,OAAO7D,OAClBkjC,GAA0B,KACzB,IAEG24C,IAAoB7iF,EAAAA,EAAAA,KAAa0C,IACrCitD,EAASjtD,EAAEmI,OAAO7D,OAClBkjC,GAA0B,KACzB,IAEG+8C,IAAsBjnF,EAAAA,EAAAA,KAAY,KACtC,MAAM+iF,EAAez6D,EAAMygB,OACrBi6C,EAAez6D,EAAMwgB,OAEtBg6C,EAAa1kF,OAKlBojF,EAAW,CACT/0E,OAAAA,EACA4b,MAAOy6D,EACPx6D,MAAOy6D,EACPp1E,MAAAA,IARAu8B,GAAS28C,MAUV,CAACv+D,EAAO7b,EAAQkB,EAAO0a,EAAOm5D,IAE3ByF,IAAyBlnF,EAAAA,EAAAA,KAAY,KACzCgnF,EAAiB,CAAEt6E,OAAAA,EAAQ02E,WAAY2D,MACtC,CAACr6E,EAAQq6E,EAAmBC,IAEzBG,IAAyBnnF,EAAAA,EAAAA,KAAY,KACzComC,EAAei8C,EAAAA,GAAAA,sBACd,CAACj8C,IAEEi+C,IAA0BrkF,EAAAA,EAAAA,KAAY,KAC1ComC,EAAei8C,EAAAA,GAAAA,uBACd,CAACj8C,IAEEghD,IAAsBpnF,EAAAA,EAAAA,KAAY,KAClC+a,EAAKmmE,UACPU,EAAc,CAAEl1E,OAAQqO,EAAK7d,KAE7BykF,EAAa,CAAEj1E,OAAQqO,EAAK7d,KAG9BojF,IACAH,IACAvoD,EAAS,CAAE16B,QAAItD,MACd,CAACmhB,EAAKmmE,UAAWnmE,EAAK7d,GAAIojF,EAAmBH,EAAiBwB,EAAcC,EAAehqD,IAExFyrD,IAAwB,UAAAtoE,EAAK0uB,gBAAL,mBAAe6qB,wBAAf,eAAiCj2D,SAAU,EAEzE,GAAI0c,EAAK0kD,cAAgB1kD,EAAK2/C,YAC5B,OAGF,MAAMv4B,GAAY5gC,IAAak/E,EAAAA,GAAAA,WAE/B,OACE,0BAAK//E,UAAU,cACb,0BAAKA,UAAU,iBACb,0BAAKA,UAAU,WACb,mBAACuqC,GAAA,EAAD,CACEX,qBAAsBA,GACtBrjC,SAAU27E,GACVh7E,UAAWq5E,IAEb,mBAACh9D,GAAA,EAAD,CACE/mB,GAAG,gBACHw0B,MAAOzxB,GAAK,oBACZgH,SAAU+oD,GACVhpD,MAAOshB,EACPhB,MAAOA,IAAUw/D,GAAsBx/D,OAAQ1tB,EAC/CgO,UAAWq5E,IAEb,mBAACh9D,GAAA,EAAD,CACE/mB,GAAG,gBACHwD,UAAU,OACVgxB,MAAOzxB,GAAK,0BACZgH,SAAU47E,GACV77E,MAAOuhB,EACP3gB,UAAWq5E,IAEZlmE,EAAKmmE,WACJ,mBAACp8D,GAAA,EAAD,CAAU5jB,KAAK,OAAOytC,WAAS,EAAChuC,QAASyhF,IACvC,2BAAM1hF,UAAU,SAAST,GAAK,gBAC9B,2BAAMS,UAAU,YAAYqa,EAAKwtB,SAAWtoC,GAAK,cAAgBA,GAAK,iBAG1E,mBAAC6kB,GAAA,EAAD,CACE5jB,KAAK,UACLytC,WAAS,EACThuC,QAAS2hF,GACT16E,UAAWq5E,GAEX,2BAAMvgF,UAAU,SAAST,GAAK,eAC9B,2BAAMS,UAAU,YAA4BT,GAAhB6/D,EAAqB,mBAA2B,SAE7EuhB,GACC,mBAACv8D,GAAA,EAAD,CACE5jB,KAAK,OACLP,QAAS+hF,GACT/zC,WAAS,EACT/mC,UAAW05E,GAEX,2BAAM5gF,UAAU,SAAST,GAAK,0BAC9B,2BAAMS,UAAU,YACb4gF,GAAkBuC,EAAAA,GAAAA,IAAcvC,EAAgBjjF,QAAU4B,GAAK,aAIrEzE,QAAO,UAACuf,EAAK+oE,oBAAN,aAAC,EAAmBzlF,SAC1B,mBAACymB,GAAA,EAAD,CACE5jB,KAAK,kBACLP,QAASgiF,GACTh0C,WAAS,GAET,2BAAMjuC,UAAU,SAAST,GAAK,sBAC9B,2BAAMS,UAAU,aACbmjF,EAAAA,GAAAA,IAAc9oE,EAAK+oE,aAAczlF,UAIxC,mBAACymB,GAAA,EAAD,CACE5jB,KAAK,YACLytC,WAAS,EACThuC,QAAS4hF,GACT36E,UAAWq5E,GAEX,2BAAMvgF,UAAU,SAAST,GAAK,cAC9B,2BAAMS,UAAU,WAAWkC,IAAI,QAC5BygF,GADH,IAC2B9B,IAG7B,0BAAK7gF,UAAU,gCACb,mBAACixB,GAAA,EAAD,CACEC,QAASm1D,EACTr1D,MAAOzxB,GAAK,uBACZgH,SAAUigF,OAIhB,0BAAKxmF,UAAU,WACb,mBAACokB,GAAA,EAAD,CACE5jB,KAAK,QACLytC,WAAS,EACThuC,QAAS8hF,IAET,2BAAM/hF,UAAU,SAAST,GAAK,0BAC9B,2BAAMS,UAAU,YAAYgjF,KAE9B,mBAAC5+D,GAAA,EAAD,CACE5jB,KAAK,QACLytC,WAAS,EACThuC,QAASwmF,IAET,2BAAMzmF,UAAU,QAAQkC,IAAI,QAAQ3C,GAAK,uBACzC,2BAAMS,UAAU,WAAWkC,IAAI,QAAQ3C,GAAK,cAAD,UAAgB8a,EAAKyqC,oBAArB,QAAqC,EAAG,OAErF,mBAAC1gC,GAAA,EAAD,CACE5jB,KAAK,cACLytC,WAAS,EACTD,QAAM,EACN/tC,QAAS0jF,IAET,2BAAM3jF,UAAU,SAAST,GAAK,wBAC9B,2BAAMS,UAAU,YAAYmkF,MAGhC,0BAAKnkF,UAAU,WACb,mBAACokB,GAAA,EAAD,CAAU5jB,KAAK,SAAS0F,QAAM,EAAC4wB,aAAW,EAAC72B,QAAS0/E,GACjDtlE,EAAKmmE,UAAYjhF,GAAK,iBAAmBA,GAAK,mBAIrD,mBAACkrC,GAAA,EAAD,CACE/vB,QAAS6uB,EACTtpC,QAASsmF,GACTr/E,SAAUu6B,GACVvhC,UAAWX,GAAK,SAEfkiC,GACC,mBAACxxB,EAAA,EAAD,CAASlQ,MAAM,UAEf,wBAAGC,UAAU,gBAGjB,mBAACopB,GAAA,EAAD,CACExpB,OAAQ8/E,EACR14E,QAAS44E,EACT5+E,KAAMqZ,EAAKmmE,UAAYjhF,GAAK,sBAAwBA,GAAK,qBACzD8pB,aAAchP,EAAKmmE,UAAYjhF,GAAK,iBAAmBA,GAAK,gBAC5D+pB,eAAgBo9D,GAChBhgD,sBAAoB,S,aClS5B,MAgKA,IAAe3oC,EAAAA,EAAAA,KAAKC,EAAAA,EAAAA,KAClB,CAACC,EAAD,KAAoC,IAA3B,OAAE+N,GAAyB,EAClC,MAAMqO,GAAO3N,EAAAA,EAAAA,IAAWzO,EAAQ+N,IAC1B,oBAAE27B,IAAwBg/C,EAAAA,EAAAA,IAAiB1oF,EAAQ+N,GAEzD,MAAO,CACLqO,KAAAA,EACA0N,WAAW2K,EAAAA,EAAAA,IAAcrY,GACzBxZ,SAAU5C,EAAOshF,WAAW1+E,SAC5B8mC,oBAAAA,EACAvpC,YAAaic,MAAAA,OAAF,EAAEA,EAAMjc,eAVLJ,EAhKqC,IAQnD,UARoD,KACxDqc,EADwD,QAExDrT,EAFwD,SAGxD6F,EAHwD,UAIxDkb,EAJwD,SAKxDlnB,EALwD,oBAMxD8mC,EANwD,YAOxDvpC,GACI,EACJ,MAAM,gBACJwoF,EADI,iBAEJC,EAFI,kBAGJC,EAHI,kBAIJC,IACE/nF,EAAAA,EAAAA,MAEE6tE,EAAW/xE,QAAQuf,EAAKwtB,UACxBm/C,EAAW,UAAG3sE,EAAK0uB,gBAAR,aAAG,EAAek+C,YAE5BC,EAAaC,IAAkB9lF,EAAAA,EAAAA,IAAsBwrE,EAAW,SAAW,YAC3EhlC,EAAUC,IAAezmC,EAAAA,EAAAA,OACzB+lF,EAA2BC,EAAyBC,IAA4BhjF,EAAAA,GAAAA,KAEjFijF,EAAYzsF,QACC,WAAhBosF,GAA4Br/C,GAAYF,GACrB,YAAhBu/C,GAA6Bra,IAGnC9qD,EAAAA,EAAAA,IAAelV,EAAU7F,IAEzB3M,EAAAA,EAAAA,KAAU,KACJ6sF,IAAgBF,GAClBF,MAED,CAACI,EAAaF,EAAaF,IAE9B,MAAMU,GAAqBloF,EAAAA,EAAAA,KAAagH,IACtC6gF,EAAe7gF,KACd,IAEGmhF,GAA+BnoF,EAAAA,EAAAA,KAAagH,IAChDygF,EAAkB,CAChB/6E,OAAQqO,EAAK7d,GACb4B,YAAuB,cAAVkI,MAEd,CAAC+T,EAAK7d,GAAIuqF,IAEPW,GAAapoF,EAAAA,EAAAA,KAAY,KAC7BunF,EAAiB,CAAEh/C,SAA0B,WAAhBq/C,EAA2Br/C,EAAW,OAClE,CAACq/C,EAAaL,EAAkBh/C,IAE7B8/C,GAA0BroF,EAAAA,EAAAA,KAAY,KAC1CgoF,IACAR,MACC,CAACQ,EAA0BR,IAExBvnF,GAAOC,EAAAA,EAAAA,KACPooF,EAAc7/D,EAAY,UAAY,OACtC8/D,EAAc9/D,EAAY,UAAY,QAEtCuM,EAAU,CACd,CAAEhuB,MAAO,UAAW0qB,MAAOzxB,EAAM,GAAEqoF,YAAuBjyC,SAAUp2C,EAAM,GAAEqoF,iBAC5E,CAAEthF,MAAO,SAAU0qB,MAAOzxB,EAAM,GAAEqoF,WAAsBjyC,SAAUp2C,EAAM,GAAEqoF,iBAGtEE,EAAoB,CAAC,CACzBxhF,MAAO,UACP0qB,MAAOzxB,EAAK,yCACX,CACD+G,MAAO,YACP0qB,MAAOzxB,EAAK,2CAGRkiC,EAAY5gC,IAAak/E,EAAAA,GAAAA,WAE/B,OACE,0BAAK//E,UAAU,cACb,0BAAKA,UAAU,iBACb,0BAAKA,UAAU,UAAUkC,IAAK3C,EAAK4iB,MAAQ,WAAQjpB,GACjD,yBAAI8G,UAAU,mBAAmBT,EAAM,GAAEsoF,UACzC,mBAACxzD,GAAA,EAAD,CACEE,SAAU2yD,EACV7kE,KAAK,eACLiS,QAASA,EACT/tB,SAAUihF,KAGG,YAAhBN,EACC,0BAAKlnF,UAAU,UAAUkC,IAAK3C,EAAK4iB,MAAQ,WAAQjpB,GAChD8tF,EACC,sCACE,mBAACe,GAAA,EAAD,CAAU5gF,IAAK6/E,EAAahnF,UAAU,aAAagB,KAAMgmF,IACzD,wBAAGhnF,UAAU,eAAekC,IAAK3C,EAAK4iB,MAAQ,WAAQjpB,GACnDqG,EAAM,GAAEqoF,qBAGX,mBAACxjE,GAAA,EAAD,CAAU5jB,KAAK,SAAS0F,QAAM,EAAC4wB,aAAW,EAAC72B,QAASonF,GACjD9nF,EAAK,eAER,mBAAC6pB,GAAA,EAAD,CACExpB,OAAQwnF,EACRpgF,QAASsgF,EACTtmF,KAAMzB,EAAK,eACX8pB,aAAc9pB,EAAK,gBACnB+pB,eAAgBq+D,EAChBjhD,sBAAoB,KAIxB,mBAACjiB,GAAA,EAAD,OAIJ,0BAAKzkB,UAAU,qBACb,mBAACwqC,GAAD,CACE9C,QAAM,EACND,gBAAiBptB,EAAKwtB,SACtBpG,UAAWA,EACXkG,oBAAqBA,EACrBC,cAAeg/C,EACfrgF,SAAUuhC,IAEZ,wBAAG9nC,UAAU,eAAekC,IAAI,QAC7B3C,EAAM,GAAEsoF,qCAIf,0BAAK7nF,UAAU,UAAUkC,IAAK3C,EAAK4iB,MAAQ,WAAQjpB,GACjD,yBAAI8G,UAAU,mBACXT,EAAKwoB,EAAY,4CAA8C,4CAElE,mBAACsM,GAAA,EAAD,CACEE,SAAUn2B,EAAc,YAAc,UACtCikB,KAAK,kBACLiS,QAASwzD,EACTvhF,SAAUkhF,IAEZ,wBAAGznF,UAAU,gBAEPT,EADHwoB,EACQ,2CACA,6CAIf,mBAAC0iB,GAAA,EAAD,CACE/vB,QAAS6sE,EACTrgF,SAAUu6B,EACVvhC,UAAWX,EAAK,QAChBU,QAASynF,GAERjmD,EACC,mBAACxxB,EAAA,EAAD,CAASlQ,MAAM,UAEf,wBAAGC,UAAU,qBCsEvB,IAAejC,EAAAA,EAAAA,KAAKC,EAAAA,EAAAA,KAClB,CAACC,EAAD,KAAoC,UAA3B,OAAE+N,GAAyB,EAClC,MAAMqO,GAAO3N,EAAAA,EAAAA,IAAWzO,EAAQ+N,IAC1B,iBAAEg8E,EAAkBrjE,KAAM4iC,GAAetpD,EAAOymB,MAKtD,MAAO,CACLrK,KAAAA,EACAktC,WAAAA,EACAygC,iBAAAA,EACAC,WARiB5tE,MAAAA,GAAA,UAAAA,EAAM0uB,gBAAN,SAAgBs2B,cAC/B3yD,EAAAA,EAAAA,IAAWzO,EAAQoc,EAAK0uB,SAASs2B,mBACjCnmE,EAOF6uB,UAAW1N,IAAQqY,EAAAA,EAAAA,IAAcrY,MAbnBrc,EA/NgC,IAU9C,IAV+C,KACnDqc,EADmD,QAEnDrT,EAFmD,SAGnD6F,EAHmD,OAInDb,EAJmD,WAKnDu7C,EALmD,WAMnD0gC,EANmD,iBAOnDD,EAPmD,UAQnDjgE,EARmD,eASnD2d,GACI,EACJ,MAAM,wBACJwiD,EADI,oBAEJC,EAFI,sBAGJC,IACEppF,EAAAA,EAAAA,OAEGqpF,EAAeC,IAAoBjnF,EAAAA,EAAAA,OACnCq5B,EAAeuS,IAAoB5rC,EAAAA,EAAAA,OACnC6rC,EAAmBC,IAAwB9rC,EAAAA,EAAAA,KAAS,GACrD+rC,GAAsB9tC,EAAAA,EAAAA,KAAY,IAAM6tC,GAAqB,IAAO,KACnEo7C,EAAgCC,EAA8BC,IAAiCnkF,EAAAA,GAAAA,MAC/FokF,EAA8BC,EAA4BC,IAA+BtkF,EAAAA,GAAAA,KAC1F/E,GAAOC,EAAAA,EAAAA,KACP6/D,EAAe4oB,MAAAA,OAAH,EAAGA,EAAYzrF,IAEjCulB,EAAAA,EAAAA,IAAelV,EAAU7F,IAEzB3M,EAAAA,EAAAA,KAAU,KACR6tF,MACC,CAACA,KAEJ7tF,EAAAA,EAAAA,KAAU,KACHqgC,IACHN,EAAAA,GAAAA,GAAiB,oBAAoBC,KAAK4S,KAE3C,CAACvS,IAEJ,MAAMmuD,GAA4BvpF,EAAAA,EAAAA,KAAY,KAC5CmpF,IACAL,EAAsB,CAAEU,UAAW/gE,EAAY/b,EAASqzD,IACnDt3C,GACH2d,EAAei8C,EAAAA,GAAAA,WAEhB,CAAC8G,EAA+BL,EAAuBrgE,EAAW/b,EAAQqzD,EAAc35B,IAErFqjD,GAA0BzpF,EAAAA,EAAAA,KAAY,KAC1CspF,IACAT,EAAoB,CAAEW,UAAW98E,EAAQA,OAAQq8E,MAChD,CAACO,EAA6BT,EAAqBn8E,EAAQq8E,IAsJ9D,OACE,0BAAKroF,UAAU,cACb,0BAAKA,UAAU,iBACb,0BAAKA,UAAU,WACb,0BAAKA,UAAU,gBACZ06B,GACC,mBAACD,GAAA,EAAD,CACEj+B,GAAG,wBACHhC,KAAMwuF,EAAAA,GACNtuD,cAAeA,EACfC,KAAMuS,EACNpS,QAAM,EACNC,OAAQqS,KAIb66C,GA9FL,8BACE,mBAAC7jE,GAAA,EAAD,CACEpkB,UAAU,sBACV4wC,UAAQ,GAER,mBAACpsB,GAAA,EAAD,CAAexY,OAAQi8E,EAAYzrF,MAErC,mBAAC4nB,GAAA,EAAD,CACE5jB,KAAK,SACL0F,QAAM,EACN4wB,aAAW,EACX72B,QAASuoF,GAERjpF,EAAKwoB,EAAY,wBAA0B,4BAE9C,mBAACqB,GAAA,EAAD,CACExpB,OAAQ2oF,EACRvhF,QAASyhF,EACT7kE,OAjFJ,0BAAK5jB,UAAU,gBACb,mBAACma,GAAA,EAAD,CACE3f,KAAK,OACL6f,KAAM4tE,IAER,0BAAKjoF,UAAU,eACZT,EAAKwoB,EAAY,wBAA0B,6BA4E5CpY,WAAW2K,EAAAA,GAAAA,GACT/a,EAAKwoB,EAAY,+BAAiC,6BAA8BkgE,EAAYrgE,OAC5F,CAAC,KAAM,oBAETyB,aAAc9pB,EAAKwoB,EAAY,wBAA0B,2BACzDuB,eAAgBu/D,EAChBniD,sBAAoB,MAsElBuhD,GA9DN,8BACE,wBAAGjoF,UAAU,eAAekC,IAAI,QAAQ3C,EAAK,0BAE7C,0BAAK0pF,eAAa,GAChB,mBAAC7kE,GAAA,EAAD,CACErZ,IAAI,eACJvK,KAAK,QACL0F,QAAM,EACNmzE,cAAe,EACfr5E,UAAU,mBAETT,EAAK,0BAEPyoF,EACCA,EAAiBliF,KAAI,CAACtJ,EAAI2nB,IACxB,mBAACC,GAAA,EAAD,CACErZ,IAAKvO,EACL68E,cAAel1D,EAAI,EACnBnkB,UAAU,kCAEVC,QAAS,KA1HrBqoF,EA2HgC9rF,GA1HhCmsF,MA6HY,mBAACnkE,GAAA,EAAD,CAAexY,OAAQxP,OAI3B,mBAACukC,GAAA,EAAD,CAAch2B,IAAI,gBAAgBsuE,cAAe,EAAGr4E,KAAK,gCAG7D,wBAAGhB,UAAU,yBAAyBkC,IAAI,QAAQ3C,EAAK,2BACvD,mBAAC6pB,GAAA,EAAD,CACExpB,OAAQ8oF,EACR1hF,QAAS4hF,EACThlE,OAvHR,WACE,MAAMslE,EAAc3hC,EAAW8gC,GAE/B,GAAKa,EAIL,OACE,0BAAKlpF,UAAU,gBACb,mBAACma,GAAA,EAAD,CACE3f,KAAK,OACL6f,KAAM6uE,IAER,0BAAKlpF,UAAU,eACZT,EAAK,uCAyGE4pF,GACRx5E,UApGR,WACE,MAAMu5E,EAAc3hC,EAAW8gC,GAE/B,GAAKa,EAIL,OAAIA,EAAYE,gBACP9uE,EAAAA,GAAAA,GACJ,yBAAwB4uE,EAAYthE,sCAAsCvN,EAAMuN,WACjF,CAAC,KAAM,qBAQJtN,EAAAA,GAAAA,GAEJ,yBAAwB4uE,EAAYthE,sCAAsCvN,EAAMuN,kFACjF,CAAC,KAAM,oBA+EQyhE,GACXhgE,aAAc9pB,EAAK,uBACnB+pB,eAAgBy/D,EAChBO,mBAAiB,YC0B3B,IAAevrF,EAAAA,EAAAA,KAAKC,EAAAA,EAAAA,KAClB,CAACC,EAAD,KAA6D,IAApD,OAAE+N,EAAF,wBAAUu9E,GAA0C,EAC3D,MAAMlvE,GAAO3N,EAAAA,EAAAA,IAAWzO,EAAQ+N,GAGhC,MAAO,CAAEqO,KAAAA,EAAMmvE,sBAFenvE,EAAKmmE,WAAa+I,MAHhCvrF,EAhO0C,IAOxD,IAPyD,KAC7Dqc,EAD6D,qBAE7DovE,EAF6D,eAG7D/jD,EAH6D,oBAI7D8jD,EAJ6D,QAK7DxiF,EAL6D,SAM7D6F,GACI,EACJ,MAAM,6BAAE84E,IAAiC3mF,EAAAA,EAAAA,OAElCukF,EAAaC,IAAkBniF,EAAAA,EAAAA,IAA8B,KAC7DoiF,EAAuBC,IAA4BriF,EAAAA,EAAAA,KAAS,IAC5DogC,EAAWk9C,IAAgBt9E,EAAAA,EAAAA,KAAS,IACpCqoF,EAA6BC,EAA2BC,IAA8BtlF,EAAAA,GAAAA,KACvF/E,GAAOC,EAAAA,EAAAA,MAEbuiB,EAAAA,EAAAA,IAAelV,EAAU7F,GAEzB,MAAM6iF,GAAqBnqF,EAAAA,EAAAA,KAAQ,KACjC,GAAK2a,GAASA,EAAK0uB,UAAa1uB,EAAK0uB,SAASu7C,QAI9C,OAAOjqE,EAAK0uB,SAASu7C,QAAQxrD,MAAK,QAAC,OAAEvU,GAAH,SAAgBA,IAAWklE,OAC5D,CAACpvE,EAAMovE,KAEVpvF,EAAAA,EAAAA,KAAU,KACJggB,MAAAA,GAAAA,EAAM0uB,UAAY0gD,IAAyBI,GAC7CnkD,EAAei8C,EAAAA,GAAAA,oBAEhB,CAACtnE,EAAMqrB,EAAgBmkD,EAAoBJ,KAE9CpvF,EAAAA,EAAAA,KAAU,KACRmpF,GAAgBqG,MAAAA,OAAD,EAACA,EAAoB3F,gBAAkB7pE,MAAAA,OAAvC,EAAuCA,EAAMwoE,sBAAwB,IACpFa,GAAyB,GACzB/E,GAAa,KACZ,CAACtkE,EAAMwvE,IAEV,MAAM9F,GAAyBzkF,EAAAA,EAAAA,KAAa0C,IAC1C,MAAM,KAAEqgB,GAASrgB,EAAEmI,OAEnB,SAAS65E,EAA0B19E,GACjC,OAAOA,QAAQpN,EAGjBsqF,GAAgBnrC,IAAD,IACVA,EACH,CAACh2B,GAAO2hE,EAA0B3rC,EAAEh2B,OACvB,iBAATA,GAA2B,CAC7B0gE,SAAUiB,EAA0B3rC,EAAEh2B,SAG1CqhE,GAAyB,KACxB,IAEGO,GAAwB3kF,EAAAA,EAAAA,KAAY,KACnC+a,GAASovE,IAId9K,GAAa,GACbgH,EAA6B,CAC3B35E,OAAQqO,EAAK7d,GACb+nB,OAAQklE,EACRvF,aAAcX,OAEf,CAAClpE,EAAMovE,EAAsBlG,EAAaoC,IAEvCmE,GAAqBxqF,EAAAA,EAAAA,KAAY,KAChC+a,GAASovE,GAId9D,EAA6B,CAC3B35E,OAAQqO,EAAK7d,GACb+nB,OAAQklE,EACRvF,aAAc,CACZ6F,cAAc,OAGjB,CAAC1vE,EAAMovE,EAAsB9D,IAE1BqE,GAAuB1qF,EAAAA,EAAAA,KAAayL,KACpCy+E,MAICnvE,IAASA,EAAKwoE,sBAIZxoE,EAAKwoE,oBAAoB93E,IAC/B,CAACsP,EAAMmvE,IAEV,GAAKK,EAIL,OACE,0BAAK7pF,UAAU,cACb,0BAAKA,UAAU,iBACb,0BAAKA,UAAU,WACb,mBAACokB,GAAA,EAAD,CAAUwsB,UAAQ,EAAC5wC,UAAU,uBAC3B,mBAACqkB,GAAA,EAAD,CAAiBE,OAAQslE,EAAmBtlE,UAG9C,yBAAIvkB,UAAU,uBAAuBkC,IAAI,QAAQ3C,EAAK,0BAEtD,0BAAKS,UAAU,yBACb,mBAACixB,GAAA,EAAD,CACE5O,KAAK,eACL6O,SAAUqyD,EAAYoB,aACtB3zD,MAAOzxB,EAAK,wBACZqlF,UAAQ,EACR19E,SAAU8iF,EAAqB,gBAC/BzjF,SAAUw9E,KAGd,0BAAK/jF,UAAU,yBACb,mBAACixB,GAAA,EAAD,CACE5O,KAAK,YACL6O,SAAUqyD,EAAYsB,UACtB7zD,MAAOzxB,EAAK,6BACZqlF,UAAQ,EACR19E,SAAU8iF,EAAqB,aAC/BzjF,SAAUw9E,KAGd,0BAAK/jF,UAAU,yBACb,mBAACixB,GAAA,EAAD,CACE5O,KAAK,eACL6O,SAAUqyD,EAAYT,eAAiBS,EAAYR,SACnD/xD,MAAOzxB,EAAK,gCACZqlF,UAAQ,EACR19E,SAAU8iF,EAAqB,gBAC/BzjF,SAAUw9E,KAGd,0BAAK/jF,UAAU,yBACb,mBAACixB,GAAA,EAAD,CACE5O,KAAK,YACL6O,SAAUqyD,EAAYuB,UACtB9zD,MAAOzxB,EAAK,6BACZqlF,UAAQ,EACR19E,SAAU8iF,EAAqB,aAC/BzjF,SAAUw9E,KAGd,0BAAK/jF,UAAU,yBACb,mBAACixB,GAAA,EAAD,CACE5O,KAAK,aACL6O,SAAUqyD,EAAYwB,WACtB/zD,MAAOzxB,EAAK,8BACZqlF,UAAQ,EACR19E,SAAU8iF,EAAqB,cAC/BzjF,SAAUw9E,KAGd,0BAAK/jF,UAAU,yBACb,mBAACixB,GAAA,EAAD,CACE5O,KAAK,cACL6O,SAAUqyD,EAAYyB,YACtBh0D,MAAOzxB,EAAK,+BACZqlF,UAAQ,EACR19E,SAAU8iF,EAAqB,eAC/BzjF,SAAUw9E,KAGd,0BAAK/jF,UAAU,yBACb,mBAACixB,GAAA,EAAD,CACE5O,KAAK,cACL6O,SAAUqyD,EAAY0B,YACtBj0D,MAAOzxB,EAAK,+BACZqlF,UAAQ,EACR19E,SAAU8iF,EAAqB,eAC/BzjF,SAAUw9E,KAGd,0BAAK/jF,UAAU,yBACb,mBAACixB,GAAA,EAAD,CACE5O,KAAK,aACL6O,SAAUqyD,EAAY2B,WACtBl0D,MAAOzxB,EAAK,8BACZqlF,UAAQ,EACR19E,SAAU8iF,EAAqB,cAC/BzjF,SAAUw9E,OAKdyF,GACA,0BAAKxpF,UAAU,WACb,mBAACokB,GAAA,EAAD,CAAU5jB,KAAK,cAAc0F,QAAM,EAAC4wB,aAAW,EAAC72B,QAAS0pF,GACtDpqF,EAAK,4BAMd,mBAACkrC,GAAA,EAAD,CACE/vB,QAAS+oE,EACTxjF,QAASgkF,EACT/jF,UAAWX,EAAK,QAChB2H,SAAUu6B,GAETA,EACC,mBAACxxB,EAAA,EAAD,CAASlQ,MAAM,UAEf,wBAAGC,UAAU,gBAIjB,mBAACopB,GAAA,EAAD,CACExpB,OAAQ8pF,EACR1iF,QAAS4iF,EACT5oF,KAAK,oEACLqoB,aAAa,SACbC,eAAgBwgE,EAChBpjD,sBAAoB,SClH5B,IAAe3oC,EAAAA,EAAAA,KAAKC,EAAAA,EAAAA,KAClB,CAACC,EAAD,KAAoC,IAA3B,OAAE+N,GAAyB,EAClC,MAAMqO,GAAO3N,EAAAA,EAAAA,IAAWzO,EAAQ+N,GAEhC,MAAO,CACLqO,KAAAA,EACAiI,cAAerkB,EAAOqkB,cACtByF,WAAW2K,EAAAA,EAAAA,IAAcrY,MAPXrc,EA3GwC,IAQtD,IARuD,KAC3Dqc,EAD2D,UAE3D0N,EAF2D,cAG3DzF,EAH2D,eAI3DojB,EAJ2D,mBAK3D29C,EAL2D,QAM3Dr8E,EAN2D,SAO3D6F,GACI,EACJ,MAAMtN,GAAOC,EAAAA,EAAAA,MAEbuiB,EAAAA,EAAAA,IAAelV,EAAU7F,GAEzB,MAAMijF,GAA2B3qF,EAAAA,EAAAA,KAAY,KAC3ComC,EAAei8C,EAAAA,GAAAA,sBACd,CAACj8C,IAEEu9C,GAAevjF,EAAAA,EAAAA,KAAQ,IACtB2a,EAAK0uB,UAAa1uB,EAAK0uB,SAASk6C,aAI9B5oE,EAAK0uB,SAASk6C,aAAa1iD,MAAK,CAACC,EAAGC,IACrCD,EAAEilD,SACI,EACChlD,EAAEglD,QACJ,EAGF,IAVA,IAYR,CAACprE,IAEE6vE,GAAyB5qF,EAAAA,EAAAA,KAAammE,IAC1C4d,EAAmB5d,EAAOlhD,OAAQkhD,EAAOqe,mBAAqBxhE,GAC9DojB,EAAei8C,EAAAA,GAAAA,mBACd,CAACr/D,EAAe+gE,EAAoB39C,IAEjCykD,GAAsB7qF,EAAAA,EAAAA,KAAY,KACtComC,EAAei8C,EAAAA,GAAAA,kBACd,CAACj8C,IAEE0kD,GAAkB9qF,EAAAA,EAAAA,KAAammE,IACnC,GAAIA,EAAOggB,QACT,OAAOlmF,EAAK,kBAId,MAAM2mB,GAAYC,EAAAA,EAAAA,MAAYC,MAAMzB,KAC9B0lE,EAAiB5kB,EAAOqe,iBAAmB59D,EAAUu/C,EAAOqe,uBAAoB5qF,EAEtF,OAAImxF,EACK9qF,EAAK,uBAAuB05B,EAAAA,EAAAA,IAAgBoxD,IAG9C9qF,EAAK,kBACX,CAACA,IAEJ,OACE,0BAAKS,UAAU,cACb,0BAAKA,UAAU,iBACb,0BAAKA,UAAU,WACb,mBAACokB,GAAA,EAAD,CACE5jB,KAAK,SACLytC,WAAS,EACThuC,QAASgqF,GAET,2BAAMjqF,UAAU,SAAST,EAAK,aAC9B,2BAAMS,UAAU,YAAYT,EAAKwoB,EAAY,4BAA8B,yBAI/E,0BAAK/nB,UAAU,UAAUkC,IAAK3C,EAAK4iB,MAAQ,WAAQjpB,GACjD,wBAAG8G,UAAU,aAAakC,IAAI,QAC3B6lB,EACG,8DACA,6DAGLk7D,EAAan9E,KAAK2/D,GACjB,mBAACrhD,GAAA,EAAD,CACErZ,IAAK06D,EAAOlhD,OACZvkB,UAAU,sBAEVC,QAAS,IAAMiqF,EAAuBzkB,IAEtC,mBAACphD,GAAA,EAAD,CACEE,OAAQkhD,EAAOlhD,OACfD,OAAQ8lE,EAAgB3kB,GACxBv+B,eAAa,OAKnB,mBAACuD,GAAA,EAAD,CACE/vB,SAAO,EACPza,QAASkqF,EACTjqF,UAAWX,EAAK,oCAEhB,wBAAGS,UAAU,iCCoBzB,IAAejC,EAAAA,EAAAA,KAAKC,EAAAA,EAAAA,KAClB,CAACC,EAAD,KAAoC,IAA3B,OAAE+N,GAAyB,EAGlC,MAAO,CAAEqO,MAFI3N,EAAAA,EAAAA,IAAWzO,EAAQ+N,MAFhBhO,EA9HwC,IAAiC,IAAhC,KAAEqc,EAAF,QAAQrT,EAAR,SAAiB6F,GAAe,EAC3F,MAAMtN,GAAOC,EAAAA,EAAAA,MAEbuiB,EAAAA,EAAAA,IAAelV,EAAU7F,GAEzB,MAAMi8E,GAAevjF,EAAAA,EAAAA,KAAQ,IACtB2a,GAASA,EAAK0uB,UAAa1uB,EAAK0uB,SAASk6C,aAIvC5oE,EAAK0uB,SAASk6C,aAAa1iD,MAAK,CAACC,EAAGC,IACrCD,EAAEilD,SACI,EACChlD,EAAEglD,QACJ,EAGF,IAVA,IAYR,CAACprE,IAEE+vE,GAAkB9qF,EAAAA,EAAAA,KAAammE,GAC/BA,EAAOggB,QACFlmF,EAAK,kBAGPA,EAAK,iBACX,CAACA,IAEJ,OACE,0BAAKS,UAAU,cACb,0BAAKA,UAAU,iBACb,0BAAKA,UAAU,0BAA0BkC,IAAK3C,EAAK4iB,MAAQ,WAAQjpB,GACjE,yBAAI8G,UAAU,kBAAkBkC,IAAI,QAApC,WAEA,0BAAKlC,UAAU,yBACb,mBAACixB,GAAA,EAAD,CACE5O,KAAK,aACL6O,SAAS,EACTF,MAAOzxB,EAAK,qBACZgH,cAAUrN,KAGd,0BAAK8G,UAAU,yBACb,mBAACixB,GAAA,EAAD,CACE5O,KAAK,aACL6O,SAAS,EACTF,MAAOzxB,EAAK,2BACZgH,cAAUrN,KAGd,0BAAK8G,UAAU,yBACb,mBAACixB,GAAA,EAAD,CACE5O,KAAK,aACL6O,SAAS,EACTF,MAAOzxB,EAAK,4BACZgH,cAAUrN,KAGd,0BAAK8G,UAAU,yBACb,mBAACixB,GAAA,EAAD,CACE5O,KAAK,aACL6O,SAAS,EACTF,MAAOzxB,EAAK,6BACZgH,cAAUrN,KAGd,0BAAK8G,UAAU,yBACb,mBAACixB,GAAA,EAAD,CACE5O,KAAK,aACL6O,SAAS,EACTF,MAAOzxB,EAAK,iCACZgH,cAAUrN,KAGd,0BAAK8G,UAAU,yBACb,mBAACixB,GAAA,EAAD,CACE5O,KAAK,aACL6O,SAAS,EACTF,MAAOzxB,EAAK,gCACZgH,cAAUrN,KAGd,0BAAK8G,UAAU,yBACb,mBAACixB,GAAA,EAAD,CACE5O,KAAK,aACL6O,SAAS,EACTF,MAAOzxB,EAAK,gCACZgH,cAAUrN,MAKhB,0BAAK8G,UAAU,0BAA0BkC,IAAK3C,EAAK4iB,MAAQ,WAAQjpB,GACjE,yBAAI8G,UAAU,kBAAkBkC,IAAI,QAAQ3C,EAAK,6BAEjD,0BAAKS,UAAU,yBACb,mBAACixB,GAAA,EAAD,CACE5O,KAAK,aACL6O,SAAS,EACTF,MAAOzxB,EAAK,qBACZgH,cAAUrN,KAIb+pF,EAAan9E,KAAK2/D,GACjB,mBAACrhD,GAAA,EAAD,CACErZ,IAAK06D,EAAOlhD,OACZvkB,UAAU,uCACVC,aAAS/G,EACTgN,QAAM,GAEN,mBAAC+qB,GAAA,EAAD,CAAUD,MAAM,GAAGE,SAAS,IAC5B,mBAAC7M,GAAA,EAAD,CACEE,OAAQkhD,EAAOlhD,OACfD,OAAQ8lE,EAAgB3kB,GACxBv+B,eAAa,cCgO7B,IAAenpC,EAAAA,EAAAA,KAAKC,EAAAA,EAAAA,KAClB,CAACC,EAAD,KAA6D,IAApD,OAAE+N,EAAF,wBAAUu9E,GAA0C,EAC3D,MAAMlvE,GAAO3N,EAAAA,EAAAA,IAAWzO,EAAQ+N,IACxB2Y,KAAMuB,GAAcjoB,EAAOmoB,OAC7B,cAAE9D,GAAkBrkB,EAI1B,MAAO,CACLoc,KAAAA,EACA6L,UAAAA,EACA5D,cAAAA,EACAyF,WAPgB2K,EAAAA,EAAAA,IAAcrY,GAQ9BmvE,sBAP4BnvE,EAAKmmE,WAAa+I,GAQ9Ce,cAAejwE,EAAKkwE,eAdNvsF,EAjUsC,IAYpD,UAZqD,WACzDwsF,EADyD,eAEzDC,EAFyD,cAGzDH,EAHyD,eAIzD5kD,EAJyD,KAKzDrrB,EALyD,UAMzD6L,EANyD,cAOzD5D,EAPyD,UAQzDyF,EARyD,oBASzDyhE,EATyD,QAUzDxiF,EAVyD,SAWzD6F,GACI,EACJ,MAAM,gBAAE69E,IAAoB1rF,EAAAA,EAAAA,OAErBukF,EAAaC,IAAkBniF,EAAAA,EAAAA,IAA6B,KAC5DyvC,EAAW65C,IAAgBtpF,EAAAA,EAAAA,IAASvG,QAAQ0vF,KAC5C/oD,EAAWk9C,IAAgBt9E,EAAAA,EAAAA,KAAS,IACpCupF,EAAiCC,EAA+BC,IAAkCxmF,EAAAA,GAAAA,MAClGymF,EAAaC,IAAkB3pF,EAAAA,EAAAA,IAAS,IACzC9B,GAAOC,EAAAA,EAAAA,MAEbuiB,EAAAA,EAAAA,IAAelV,EAAU7F,GAEzB,MAAM6iF,GAAqBnqF,EAAAA,EAAAA,KAAQ,KAAM,QACvC,MAAMurF,EAAmB,UAAG5wE,EAAK0uB,gBAAR,iBAAG,EAAek6C,oBAAlB,aAAG,EAA6BnqD,MAAK,QAAC,OAAEvU,GAAH,SAAgBA,IAAWkmE,KAIzF,IAAID,IAAeS,GAAwBR,EAA3C,CAIA,GAAID,EAAY,CACd,MAAMpwE,GAAO+L,EAAAA,EAAAA,MAAYC,MAAMzB,KAAK8lE,GAEpC,OAAOrwE,EAAO,CACZmK,OAAQnK,EAAK5d,GACb+tF,YAAaD,EACbS,YAAaxrF,EAAK,gBAClBkmF,SAAS,EACT3B,sBAAkB5qF,QAChBA,EAGN,OAAO+xF,KACN,WAAC5wE,EAAK0uB,gBAAN,aAAC,EAAek6C,aAAcqH,EAAeE,EAAYjrF,EAAMkrF,KAElEpwF,EAAAA,EAAAA,KAAU,KACJggB,MAAAA,GAAAA,EAAM0uB,UAAY0hD,IAAmBZ,GACvCnkD,EAAei8C,EAAAA,GAAAA,sBAEhB,CAACtnE,EAAMqrB,EAAgBmkD,EAAoBY,KAE9CpwF,EAAAA,EAAAA,KAAU,KACRmpF,GAAeqG,MAAAA,OAAA,EAAAA,EAAoBU,cAAe,IAClDS,IAAgBnB,MAAAA,OAAA,EAAAA,EAAoBkB,cAAe,IAAIznC,OAAO,EA1DlC,KA2D5BqnC,EAAa7vF,QAAQ0vF,IACrB7L,GAAa,KACZ,CAAC2L,EAAeE,EAAYX,IAE/B,MAAM9F,GAAyBzkF,EAAAA,EAAAA,KAAa0C,IAC1C,MAAM,KAAEqgB,GAASrgB,EAAEmI,OAMnBq5E,GAAgBnrC,IAAD,UACVA,EACH,CAACh2B,IANgC/b,EAMC+xC,EAAEh2B,IAL7B/b,QAAQpN,IADjB,IAAmCoN,KAQnCqkF,GAAa,KACZ,IAEG1G,GAAwB3kF,EAAAA,EAAAA,KAAY,KACnCmrF,IAIL9L,GAAa,GACb+L,EAAgB,CACd1+E,OAAQqO,EAAK7d,GACb+nB,OAAQkmE,EACRF,YAAahH,EACbwH,YAAAA,OAED,CAACN,EAAgBC,EAAiBrwE,EAAK7d,GAAI+mF,EAAawH,IAErDG,GAAqB5rF,EAAAA,EAAAA,KAAY,KAChCmrF,IAILC,EAAgB,CACd1+E,OAAQqO,EAAK7d,GACb+nB,OAAQkmE,EACRF,YAAa,KAEfO,OACC,CAACzwE,EAAK7d,GAAIsuF,EAAgCL,EAAgBC,IAEvDV,GAAuB1qF,EAAAA,EAAAA,KAAayL,MACpC6mB,EAAAA,EAAAA,IAAiBvX,KAIjBmvE,GAAwBnvE,EAAKkwE,aAIzBlwE,EAAKkwE,YAAax/E,KACzB,CAACsP,EAAMmvE,IAEJ2B,GAAezrF,EAAAA,EAAAA,KAAQ,KAC3B,GAAI8qF,IAAeX,EACjB,OAGF,GAAIA,EAAmBpE,QACrB,OAAOlmF,EAAK,kBAGd,MAAM8qF,EAAiBR,EAAmB/F,iBACtC59D,EAAU2jE,EAAmB/F,uBAC7B5qF,EAEJ,OAAImxF,EACK9qF,EAAK,uBAAuB05B,EAAAA,EAAAA,IAAgBoxD,IAG9C9qF,EAAK,kBACX,CAACirF,EAAYX,EAAoB3jE,EAAW3mB,IAEzC6rF,GAA0B9rF,EAAAA,EAAAA,KAAa0C,IAC3C,MAAM,MAAEsE,GAAUtE,EAAEmI,OACpB6gF,EAAe1kF,GACfqkF,GAAa,KACZ,IAEH,GAAKd,EAIL,OACE,0BAAK7pF,UAAU,cACb,0BAAKA,UAAU,iBACb,0BAAKA,UAAU,WACb,mBAACokB,GAAA,EAAD,CAAUwsB,UAAQ,EAAC5wC,UAAU,uBAC3B,mBAACqkB,GAAA,EAAD,CACEE,OAAQslE,EAAmBtlE,OAC3BD,OAAQ6mE,EACRjkD,eAAa,KAIjB,yBAAIlnC,UAAU,uBAAuBkC,IAAI,QAAQ3C,EAAK,uBAEtD,0BAAKS,UAAU,yBACb,mBAACixB,GAAA,EAAD,CACE5O,KAAK,aACL6O,QAASp2B,QAAQyoF,EAAY2B,YAC7Bl0D,MAAOzxB,EAAKwoB,EAAY,6BAA+B,4BACvD68D,UAAQ,EACR19E,SAAU8iF,EAAqB,cAC/BzjF,SAAUw9E,KAGbh8D,GACC,0BAAK/nB,UAAU,yBACb,mBAACixB,GAAA,EAAD,CACE5O,KAAK,eACL6O,QAASp2B,QAAQyoF,EAAY8H,cAC7Br6D,MAAOzxB,EAAK,yBACZqlF,UAAQ,EACR19E,SAAU8iF,EAAqB,gBAC/BzjF,SAAUw9E,KAIfh8D,GACC,0BAAK/nB,UAAU,yBACb,mBAACixB,GAAA,EAAD,CACE5O,KAAK,eACL6O,QAASp2B,QAAQyoF,EAAY+H,cAC7Bt6D,MAAOzxB,EAAK,yBACZqlF,UAAQ,EACR19E,SAAU8iF,EAAqB,gBAC/BzjF,SAAUw9E,KAIhB,0BAAK/jF,UAAU,yBACb,mBAACixB,GAAA,EAAD,CACE5O,KAAK,iBACL6O,QAASp2B,QAAQyoF,EAAYvxD,gBAC7BhB,MAAOzxB,EAAKwoB,EAAY,0BAA4B,gCACpD68D,UAAQ,EACR19E,SAAU8iF,EAAqB,kBAC/BzjF,SAAUw9E,MAGZh8D,GACA,0BAAK/nB,UAAU,yBACb,mBAACixB,GAAA,EAAD,CACE5O,KAAK,WACL6O,QAASp2B,QAAQyoF,EAAYgI,UAC7Bv6D,MAAOzxB,EAAK,qBACZqlF,UAAQ,EACR19E,SAAU8iF,EAAqB,YAC/BzjF,SAAUw9E,KAIhB,0BAAK/jF,UAAU,yBACb,mBAACixB,GAAA,EAAD,CACE5O,KAAK,cACL6O,QAASp2B,QAAQyoF,EAAYyB,aAC7Bh0D,MAAOzxB,EAAK,qBACZqlF,UAAQ,EACR19E,SAAU8iF,EAAqB,eAC/BzjF,SAAUw9E,MAGZh8D,GACA,0BAAK/nB,UAAU,yBACb,mBAACixB,GAAA,EAAD,CACE5O,KAAK,cACL6O,QAASp2B,QAAQyoF,EAAY0B,aAC7Bj0D,MAAOzxB,EAAK,wBACZqlF,UAAQ,EACR19E,SAAU8iF,EAAqB,eAC/BzjF,SAAUw9E,KAIhB,0BAAK/jF,UAAU,yBACb,mBAACixB,GAAA,EAAD,CACE5O,KAAK,YACL6O,QAASp2B,QAAQyoF,EAAYiI,WAC7Bx6D,MAAOzxB,EAAK,sBACZqlF,UAAQ,EACR19E,SAAU8iF,EAAqB,aAC/BzjF,SAAUw9E,KAGd,0BAAK/jF,UAAU,yBACb,mBAACixB,GAAA,EAAD,CACE5O,KAAK,aACL6O,QAASp2B,QAAQyoF,EAAYkI,YAC7Bz6D,MAAOzxB,EAAK,2BACZqlF,UAAQ,EACR19E,SAAU8iF,EAAqB,cAC/BzjF,SAAUw9E,MAGZh8D,GACA,0BAAK/nB,UAAU,yBACb,mBAACixB,GAAA,EAAD,CACE5O,KAAK,YACL6O,QAASp2B,QAAQyoF,EAAYmI,WAC7B16D,MAAOzxB,EAAK,4BACZqlF,UAAQ,EACR19E,SAAU8iF,EAAqB,aAC/BzjF,SAAUw9E,KAKfyF,GACC,wBAAGxpF,UAAU,oBAAoBkC,IAAI,QAClC3C,EAAK,kCAIRwoB,GACA,mBAACxE,GAAA,EAAD,CACE/mB,GAAG,cACHw0B,MAAOzxB,EAAK,iBACZgH,SAAU6kF,EACV9kF,MAAOykF,EACP7jF,SAAUsiF,EACVmC,UA5RkB,KAgSrBrpE,IAAkBmoE,IAAmBjB,IAAwBgB,GAC5D,mBAACpmE,GAAA,EAAD,CAAU5jB,KAAK,SAAS0F,QAAM,EAAC4wB,aAAW,EAAC72B,QAAS4qF,GACjDtrF,EAAK,2BAMd,mBAACkrC,GAAA,EAAD,CACE/vB,QAASo2B,EACT7wC,QAASgkF,EACT/jF,UAAWX,EAAK,QAChB2H,SAAUu6B,GAETA,EACC,mBAACxxB,EAAA,EAAD,CAASlQ,MAAM,UAEf,wBAAGC,UAAU,iBAIfwqF,GACA,mBAACphE,GAAA,EAAD,CACExpB,OAAQgrF,EACR5jF,QAAS8jF,EACT9pF,KAAK,+CACLqoB,aAAc9pB,EAAK,yBACnB+pB,eAAgB4hE,EAChBxkD,sBAAoB,SCjK9B,IAAe3oC,EAAAA,EAAAA,KAAKC,EAAAA,EAAAA,KAClB,CAACC,EAAD,KAAoC,YAA3B,OAAE+N,GAAyB,EAClC,MAAMqO,GAAO3N,EAAAA,EAAAA,IAAWzO,EAAQ+N,IACxB8hD,aAAcC,GAAqB9vD,EAAOmoB,MAC5Ck+D,EAAUjqE,MAAAA,GAAH,UAAGA,EAAM0uB,gBAAT,aAAG,EAAgBu7C,QAC1BrB,EAAe5oE,MAAAA,GAAH,UAAGA,EAAM0uB,gBAAT,aAAG,EAAgBk6C,aAC/Bl7D,EAAY1N,IAAQqY,EAAAA,EAAAA,IAAcrY,IAChCiL,QAASsZ,GAAoB3gC,EAAOonB,aAAe,IAGzDya,MAAOvC,EADH,eAEJsB,EAFI,cAGJI,EAHI,aAIJE,GACElhC,EAAO0oD,WAEX,MAAO,CACL29B,QAAAA,EACArB,aAAAA,EACAl1B,iBAAAA,EACAhmC,UAAAA,EACA6W,gBAAAA,EACArB,YAAAA,EACA4wB,YAAatvB,EACbI,cAAAA,EACAE,aAAAA,EACA9P,iBAAkBpxB,EAAOoxB,oBA1BXrxB,EArJkC,IAgBhD,IAhBiD,SACrD4tF,EADqD,QAErDtH,EAFqD,aAGrDrB,EAHqD,iBAIrDl1B,EAJqD,UAKrDhmC,EALqD,SAMrDlb,EANqD,cAOrDoyB,EAPqD,gBAQrDL,EARqD,aASrDO,EATqD,YAUrDgvB,EAVqD,YAWrD5wB,EAXqD,iBAYrDlO,EAZqD,QAarDroB,EAbqD,eAcrD0+B,EAdqD,mBAerD29C,GACI,EACJ,MAAM,SAAEnsD,EAAF,mBAAY0vB,EAAZ,gBAAgC7pB,IAAoB/9B,EAAAA,EAAAA,MACpDO,GAAOC,EAAAA,EAAAA,KAEPsb,GAAWhiB,EAAAA,EAAAA,IAAyB,MAEpC4X,GAAe5X,EAAAA,EAAAA,IAAuB,MAEtC+yF,GAAWnsF,EAAAA,EAAAA,KAAQ,IAChBksF,IAAW3I,MAAAA,OAAA,EAAAA,EAAcn9E,KAAI,QAAC,OAAEye,GAAH,SAAgBA,OAAgB,IACnE,CAAC0+D,EAAc2I,IAEZ50D,GAAYt3B,EAAAA,EAAAA,KAAQ,KAExB,MAAMwmB,GAAYC,EAAAA,EAAAA,MAAYC,MAAMzB,KACpC,IAAK2/D,IAAYp+D,EACf,MAAO,GAGT,MAAMZ,GAAU4oC,EAAAA,EAAAA,IACdo2B,EAAQx+E,KAAI,QAAC,OAAEye,GAAH,SAAgBA,KAC5B2B,EACA6nC,OACA70D,EACAm2B,GAGF,OAAOu8D,EAAWtmE,EAAQ7C,QAAQ8B,IAAYsnE,EAASpvF,SAAS8nB,KAAWe,IAC1E,CAACg/D,EAASv2B,EAAkB1+B,EAAkBu8D,EAAUC,IAErDv5C,GAAe5yC,EAAAA,EAAAA,KAAQ,KAE3B,MAAMwmB,GAAYC,EAAAA,EAAAA,MAAYC,MAAMzB,KAC9BC,GAAYuB,EAAAA,EAAAA,MAAYzB,MAAMC,KAC9BmnE,EAAyBhxF,QAAQyiC,GACjCwuD,EAAaD,EAEdltD,GAAkBrY,EAAAA,EAAAA,IAAkBqY,EAAiB1Y,EAAWqX,GAAe,GADhFvG,EAGJ,OAAO3Q,EAAAA,EAAAA,KACLP,EAAAA,GAAAA,IAAO,IACFimE,KACCD,GAAyB3sD,GAAqB,MAC9C2sD,GAAyB7sD,GAAsB,KAClDxc,QAAQukC,IACT,MAAM5sC,EAAO8L,EAAU8gC,GACvB,OAAK5sC,IAIG2N,GAAa3N,EAAKo0C,uBAAwBC,EAAAA,EAAAA,IAAUr0C,OACrDwxE,IAAaC,EAASpvF,SAASuqD,OAExCpiC,GACA,KAED,CAACoS,EAAW4H,EAAiBrB,EAAa4B,EAAcF,EAAelX,EAAW6jE,EAAUC,KAExF9oE,EAAaC,IAAWC,EAAAA,GAAAA,GAAkB8Z,EAAiBuV,EAAcx3C,QAAQyiC,IAElFyhD,GAAoB1/E,EAAAA,EAAAA,KAAa9C,IACjCovF,GACFvI,EAAoB7mF,GAAI,GACxBkpC,EAAgBi8C,EAAAA,GAAAA,qBAEhBzqD,EAAS,CAAE16B,GAAAA,MAEZ,CAACovF,EAAUvI,EAAoB39C,EAAgBxO,IAE5C9T,GAAqB9jB,EAAAA,EAAAA,KAAa0C,IACtC4kD,EAAmB,CAAE9mB,MAAO99B,EAAEmI,OAAO7D,UACpC,CAACsgD,IACE5kC,GAAgBqB,EAAAA,GAAAA,GAA0B3S,EAAc7D,GAAWgV,IACnEkB,GAAeA,EAAYplB,OAAS,GACtCqhF,EAAkBj8D,GAAuB,IAAXlB,EAAe,EAAIA,MAElD,oBAAoB,GAiBvB,OAfAE,EAAAA,EAAAA,IAAelV,EAAU7F,GAgBvB,0BAAKhH,UAAU,cACZ4rF,GAbD,0BAAK5rF,UAAU,qBAAqBkC,IAAK3C,EAAK4iB,MAAQ,WAAQjpB,GAC5D,mBAACqqB,GAAA,EAAD,CACE1d,IAAKiV,EACLxU,MAAOi3B,EACPh3B,SAAU6c,EACVK,YAAalkB,EAAK,aAStB,0BAAKS,UAAU,iBACb,0BAAKA,UAAU,WACZ+iB,MAAAA,GAAAA,EAAaplB,OACZ,mBAACkmB,GAAA,EAAD,CACE7jB,UAAU,4BACV8jB,MAAOwuB,EACPvuB,WAAYf,EACZgpE,gBAAiBlxF,QAAQyiC,GACzB13B,IAAK6K,EACL8S,UAAWxB,GAEVe,EAAYjd,KAAKtJ,GAChB,mBAAC4nB,GAAA,EAAD,CACErZ,IAAKvO,EACLwD,UAAU,kCAEVC,QAAS,IAAM++E,EAAkBxiF,IAEjC,mBAAC6nB,GAAA,EAAD,CAAiBE,OAAQ/nB,EAAI0qC,eAAa,QAI7CinB,IAAeprC,GAAgBA,EAAYplB,OAO9C,mBAAC8mB,GAAA,EAAD,MANA,mBAACsc,GAAA,EAAD,CACEs4C,cAAe,EACftuE,IAAI,gBACJ/J,KAAM+mB,EAAY,uBAAyB,4BC5FzD,IAAehqB,EAAAA,EAAAA,KAAKC,EAAAA,EAAAA,KAClB,CAACC,EAAD,KAAoC,UAA3B,OAAE+N,GAAyB,EAClC,MAAMqO,GAAO3N,EAAAA,EAAAA,IAAWzO,EAAQ+N,IACxB2Y,KAAMuB,EAAW4nC,aAAcC,GAAqB9vD,EAAOmoB,MAInE,MAAO,CACLk+D,QAJcjqE,MAAAA,GAAH,UAAGA,EAAM0uB,gBAAT,aAAG,EAAgBu7C,QAK9Bp+D,UAAAA,EACA6nC,iBAAAA,EACAhmC,UANgB1N,IAAQqY,EAAAA,EAAAA,IAAcrY,GAOtCgV,iBAAkBpxB,EAAOoxB,oBAZXrxB,EA7DgD,IAU9D,IAV+D,UACnEkoB,EADmE,iBAEnE6nC,EAFmE,QAGnEu2B,EAHmE,UAInEv8D,EAJmE,eAKnE2d,EALmE,mBAMnE29C,EANmE,QAOnEr8E,EAPmE,SAQnE6F,EARmE,iBASnEwiB,GACI,GACJtN,EAAAA,EAAAA,IAAelV,EAAU7F,GAEzB,MAAMgwB,GAAYt3B,EAAAA,EAAAA,KAAQ,KACxB,GAAK4kF,GAAYp+D,EAIjB,OAAOgoC,EAAAA,EAAAA,IACLo2B,EAAQ7hE,QAAQgjD,IAAYA,EAAOggB,UAAS3/E,KAAI,QAAC,OAAEye,GAAH,SAAgBA,KAChE2B,EACA6nC,OACA70D,EACAm2B,KAED,CAACi1D,EAASj1D,EAAkBnJ,EAAW6nC,IAEpC81B,GAA6BvkF,EAAAA,EAAAA,KAAa2sF,IAC9C5I,EAAmB4I,GACnBvmD,EAAei8C,EAAAA,GAAAA,wBACd,CAAC0B,EAAoB39C,IAExB,OACE,0BAAK1lC,UAAU,cACb,0BAAKA,UAAU,iBACb,0BAAKA,UAAU,UAAUipF,eAAa,GACnCjyD,EACCA,EAAUlxB,KAAI,CAACtJ,EAAI2nB,IACjB,mBAACC,GAAA,EAAD,CACErZ,IAAKvO,EACL68E,cAAel1D,EACfnkB,UAAU,kCAEVC,QAAS,IAAM4jF,EAA2BrnF,IAE1C,mBAAC6nB,GAAA,EAAD,CAAiBE,OAAQ/nB,EAAI0qC,eAAa,OAI9C,mBAACnG,GAAA,EAAD,CACEs4C,cAAe,EACftuE,IAAI,gBACJ/J,KAAM+mB,EAAY,uBAAyB,4B,0BCrCzD,SAASmkE,GAAiBC,EAAuBC,GAC/C,MAAQC,YAAaC,EAAeC,MAAOC,EAAU,EAAGhyE,KAAMiyE,GAAWN,GACjEE,YAAaK,EAAeH,MAAOI,EAAU,EAAGnyE,KAAMoyE,GAAWR,EACzE,OAAIE,GAAiBI,EAAsBtxE,OAAOkxE,GAAiBlxE,OAAOsxE,GACtEF,GAAWG,EAAgBA,EAAUH,EAClCI,EAASH,EAGlB,MAkWA,IAAe1uF,EAAAA,EAAAA,KAAKC,EAAAA,EAAAA,KAClB,CAACC,EAAD,KAAoC,IAA3B,OAAE+N,GAAyB,EAClC,MAAM,QAAEs0E,EAAF,eAAWuM,GAAmB5uF,EAAOshF,WAAWngD,SAASpzB,GACzDqO,GAAO3N,EAAAA,EAAAA,IAAWzO,EAAQ+N,GAC1B+b,EAAY1N,IAAQqY,EAAAA,EAAAA,IAAcrY,GAExC,MAAO,CACLumE,gBAAiBN,EACjBwM,uBAAwBD,EACxBxyE,KAAAA,EACAgV,iBAAkBpxB,EAAOoxB,iBACzBtH,UAAAA,KAXc/pB,EAlW6B,IAU3C,IAV4C,OAChDgO,EADgD,KAEhDqO,EAFgD,gBAGhDumE,EAHgD,uBAIhDkM,EAJgD,SAKhDjgF,EALgD,UAMhDkb,EANgD,iBAOhDsH,EAPgD,QAQhDroB,EARgD,eAShD0+B,GACI,EACJ,MAAM,yBACJqnD,EADI,iBAEJ3lE,EAFI,uBAGJ4lE,EAHI,yBAIJC,EAJI,iCAKJC,EALI,oBAMJC,IACEnuF,EAAAA,EAAAA,MAEEO,GAAOC,EAAAA,EAAAA,MAEN4tF,EAA6BC,EAA2BC,IAA8BhpF,EAAAA,GAAAA,MACtFipF,EAAoBC,EAAkBC,IAAqBnpF,EAAAA,GAAAA,MAC3DopF,EAAgBC,IAAqBtsF,EAAAA,EAAAA,OACrCq+E,EAAoBC,EAAkBC,IAAqBt7E,EAAAA,GAAAA,MAC3DspF,EAAgBC,IAAqBxsF,EAAAA,EAAAA,OAErCq5B,EAAeuS,IAAoB5rC,EAAAA,EAAAA,OACnC6rC,EAAmBC,IAAwB9rC,EAAAA,EAAAA,KAAS,GACrD+rC,GAAsB9tC,EAAAA,EAAAA,KAAY,IAAM6tC,GAAqB,IAAO,KAE1E9yC,EAAAA,EAAAA,KAAU,KACHqgC,IACHN,EAAAA,GAAAA,GAAiB,UAAUC,KAAK4S,KAEjC,CAACvS,KAEJ3Y,EAAAA,EAAAA,IAAelV,EAAU7F,GAEzB,MAAM8mF,GAAuBpuF,EAAAA,EAAAA,KAAQ,KACnC,GAAKkhF,EACL,OAAOA,EACJ9mB,MAAK,QAAC,WAAEi0B,GAAH,SACJA,GAAeA,GAAaC,EAAAA,GAAAA,GAAc3+D,GAAoB4+D,GAAAA,GAAsB,SAEvF,CAACrN,EAAiBvxD,IACfn1B,GAAcC,EAAAA,EAAAA,MACpB+zF,EAAAA,GAAAA,IAAY,KACVh0F,MACC4zF,EAAuB,SAAO50F,GAEjC,MAAMi1F,EAAgBvN,MAAAA,OAAH,EAAGA,EAAiB9nD,MAAK,QAAC,YAAEuzD,GAAH,SAAqBA,KAC3D+B,EAAoB/zE,MAAAA,GAAAA,EAAMwtB,SAAY,QAAOxtB,EAAKwtB,WAAasmD,MAAAA,OAA3C,EAA2CA,EAAeE,KAC9EC,GAAkB5uF,EAAAA,EAAAA,KAAQ,KAC9B,MAAM4gF,EAAUjmE,MAAAA,GAAAA,EAAMwtB,SAAW+4C,EAAkBA,MAAAA,OAAnC,EAAmCA,EAAiBn+D,QAAO,QAAC,YAAE4pE,GAAH,SAAsBA,KACjG,OAAO/L,MAAAA,OAAP,EAAOA,EAAS//C,KAAK2rD,MACpB,CAAC7xE,MAAAA,OAAD,EAACA,EAAMwtB,SAAU+4C,IAOd2N,GAAejvF,EAAAA,EAAAA,KAAaooB,IAChC,MAAM,KACJ2mE,EADI,MACEzmE,EADF,gBACSI,EADT,WAC0B+lE,EAD1B,WACsCS,GACxC9mE,EACJslE,EAAuB,CACrBhhF,OAAAA,EACAqiF,KAAAA,EACAzmE,MAAAA,EACAI,gBAAAA,EACA+lE,WAAAA,EACAS,WAAAA,EACA/M,WAAW,MAEZ,CAACz1E,EAAQghF,IAENyB,GAAcnvF,EAAAA,EAAAA,KAAaooB,IAC/BimE,EAAkBjmE,GAClB8lE,MACC,CAACA,IAEEkB,GAAepvF,EAAAA,EAAAA,KAAY,KAC1BouF,IACLa,EAAab,GACbC,OAAkBz0F,GAClBu0F,OACC,CAACA,EAAmBc,EAAcb,IAE/BiB,IAAuBrvF,EAAAA,EAAAA,KAAY,KACvComC,EAAei8C,EAAAA,GAAAA,cACd,CAACj8C,IAEEkpD,IAAsBtvF,EAAAA,EAAAA,KAAY,KAClC6uF,GACFM,EAAYN,KAEb,CAACM,EAAaN,IAEXU,IAAyBvvF,EAAAA,EAAAA,KAAY,KACzC4tF,EAAiC,CAAElhF,OAAAA,IACnCshF,MACC,CAACthF,EAAQshF,EAA4BJ,IAElC4B,IAAiBxvF,EAAAA,EAAAA,KAAaooB,IAClCylE,EAAoB,CAAEnhF,OAAAA,EAAQ0b,OAAAA,IAC9Bge,EAAei8C,EAAAA,GAAAA,cACd,CAAC31E,EAAQ05B,EAAgBynD,IAEtB4B,IAAezvF,EAAAA,EAAAA,KAAaooB,IAChCulE,EAAyB,CAAEjhF,OAAAA,EAAQqiF,KAAM3mE,EAAO2mE,SAC/C,CAACriF,EAAQihF,IAEN+B,IAAc1vF,EAAAA,EAAAA,KAAaooB,IAC/BmmE,EAAkBnmE,GAClBi4D,MACC,CAACA,IAEEzjD,IAAe58B,EAAAA,EAAAA,KAAY,KAC1BsuF,IACLmB,GAAanB,GACbC,OAAkB30F,GAClB0mF,OACC,CAACA,EAAmBmP,GAAcnB,IAE/BqB,IAAW3vF,EAAAA,EAAAA,KAAa+uF,KAC5B92B,EAAAA,GAAAA,IAAoB82B,GACpBjnE,EAAiB,CACfhqB,QAASmC,EAAK,kBAEf,CAACA,EAAM6nB,IAEJ8nE,IAA2B5vF,EAAAA,EAAAA,KAAY,KAC3C2vF,GAASb,KACR,CAACa,GAAUb,IAERe,GAAoBznE,IACxB,MAAM,MACJ6kE,EAAQ,EADJ,WACOiC,EADP,WACmBT,EADnB,YAC+B1B,EAD/B,UAC4C+C,EAD5C,UACuD3N,GACzD/5D,EACJ,IAAI1mB,EAAO,GASX,GAPEA,GADGygF,GAAa+M,GAAcjC,EAAQiC,EAC/BjvF,EAAK,UAAWivF,EAAajC,GAC3BA,EACFhtF,EAAK,eAAgBgtF,GAErBhtF,EAAK,eAGVkiF,EAEF,OADAzgF,GAAS,MAAazB,EAAK,aACpByB,EAOT,GAJIouF,IACFpuF,GAAS,MAAazB,EAAK,eAAgB6vF,WAG1Bl2F,IAAfs1F,GAA4BjC,IAAUiC,EACxCxtF,GAAS,MAAazB,EAAK,2BACtB,GAAIwuF,EAAY,CACrB,MAAMsB,EAAwD,KAAhDtB,GAAaC,EAAAA,GAAAA,GAAc3+D,IACzCruB,GAAS,MAEPA,GADEquF,EAAO,EACD9vF,EAAK,wBAAwB+vF,EAAAA,GAAAA,GAAgB/vF,EAAM8vF,IAEnD9vF,EAAK,2BAEN8sF,IACTrrF,GAAS,MAAazB,EAAK,gBAG7B,OAAOyB,GAGHuuF,GAAyB7nE,IAC7B,MAAM8nE,EAAU,GA8BhB,OA7BAA,EAAQtiE,KAAK,CACXtF,MAAOroB,EAAK,QACZiB,KAAM,OACNgmD,QAAS,IAAMyoC,GAASvnE,EAAO2mE,QAG5B3mE,EAAO2kE,aAAgB3kE,EAAO+5D,WACjC+N,EAAQtiE,KAAK,CACXtF,MAAOroB,EAAK,QACZiB,KAAM,OACNgmD,QAAS,IAlIK9+B,CAAAA,IAClBqlE,EAAyB,CAAE/gF,OAAAA,EAAQ0b,OAAAA,IACnCge,EAAei8C,EAAAA,GAAAA,aAgII8N,CAAW/nE,KAIzBA,EAAO+5D,UAQV+N,EAAQtiE,KAAK,CACXtF,MAAOroB,EAAK,cACZiB,KAAM,SACNgmD,QAAS,IAAMwoC,GAAYtnE,GAC3BoP,aAAa,IAXf04D,EAAQtiE,KAAK,CACXtF,MAAOroB,EAAK,gBACZiB,KAAM,SACNgmD,QAAS,IAAMioC,EAAY/mE,GAC3BoP,aAAa,IAUV04D,GAGHE,IAAyEhwF,EAAAA,EAAAA,KAAQ,IAC9E,QAAC,UAAEC,EAAF,OAAaC,GAAd,SACL,mBAACC,EAAA,EAAD,CACEC,OAAK,EACLoG,QAAS/F,EAAAA,GACT3F,KAAK,UACLuF,MAAM,cACNC,UAAWJ,EAAS,SAAW,GAC/BK,QAASN,EACTO,UAAU,WAEV,wBAAGF,UAAU,iBAGhB,IAEH,OACE,0BAAKA,UAAU,4BACb,0BAAKA,UAAU,iBACb,0BAAKA,UAAU,WACb,0BAAKA,UAAU,gBACZ06B,GACC,mBAACD,GAAA,EAAD,CACEj+B,GAAG,aACHhC,KAAMm1F,EAAAA,GACNj1D,cAAeA,EACfC,KAAMuS,EACNnS,OAAQqS,KAId,wBAAGptC,UAAU,cAA0BT,EAAZwoB,EAAiB,yBAAiC,qBAE9EqmE,GACC,0BAAKpuF,UAAU,WACb,wBAAGA,UAAU,cACVqa,MAAAA,GAAAA,EAAMwtB,SAAWtoC,EAAK,cAAgBA,EAAK,oCAE9C,0BAAKS,UAAU,gBACb,4BACEA,UAAU,kCACVsG,MAAO8nF,EACP3lD,UAAQ,EACRxoC,QAASivF,KAEX,mBAAC9uF,EAAA,EAAD,CACEJ,UAAU,yBACVK,QAASqvF,GACTpvF,UAAU,SAEV,mBAACC,EAAA,EAAD,CAAUC,KAAK,OAAOP,QAASivF,IAA2B3vF,EAAK,WAC7D8a,MAAAA,GAAAA,EAAMwtB,WACN,mBAACtnC,EAAA,EAAD,CAAUC,KAAK,SAASP,QAAS2uF,GAAqB93D,aAAW,GAAEv3B,EAAK,mBAI9E,mBAACM,EAAA,EAAD,CAAQI,QAASivF,IAA2B3vF,EAAK,cAGrD,0BAAKS,UAAU,UAAUipF,eAAa,GACpC,mBAACppF,EAAA,EAAD,CAAQwoB,QAAM,EAACtd,IAAI,SAAS/K,UAAU,cAAcC,QAAS0uF,IAC1DpvF,EAAK,oBAEL+uF,IAAoBA,EAAgB3wF,SAAW,mBAACojC,GAAA,EAAD,CAAc//B,KAAK,iBAAiB+J,IAAI,YACzFujF,MAAAA,OALH,EAKGA,EAAiBxoF,KAAK4hB,GACrB,mBAACtD,GAAA,EAAD,CACE5jB,KAAK,OACLovF,cAAc,OACd3hD,WAAS,EAEThuC,QAAS,IAAM6uF,GAAepnE,GAC9BsU,eAAgBuzD,GAAsB7nE,GACtC3c,IAAK2c,EAAO2mE,MAEZ,2BAAMruF,UAAU,sBAAsB0nB,EAAOE,OAASF,EAAO2mE,MAC7D,2BAAMruF,UAAU,WAAWkC,IAAI,QAC5BitF,GAAiBznE,OAIxB,wBAAG1nB,UAAU,kBAAkB+K,IAAI,cAAcxL,EAAK,yBAEvDutF,GAA0BhyF,QAAQgyF,EAAuBnvF,SACxD,0BAAKqC,UAAU,UAAUipF,eAAa,GACpC,wBAAGjpF,UAAU,aAAa+K,IAAI,SAASxL,EAAK,iBAC5C,mBAAC6kB,GAAA,EAAD,CACE5jB,KAAK,SACLs2B,aAAW,EACX/rB,IAAI,SACJ9K,QAASotF,GAET,2BAAMrtF,UAAU,SAAST,EAAK,2BAE/ButF,MAAAA,OAVH,EAUGA,EAAwBhnF,KAAK4hB,GAC5B,mBAACtD,GAAA,EAAD,CACE5jB,KAAK,OACLovF,cAAc,OACd3hD,WAAS,EAEThuC,QAAS,IAAM6uF,GAAepnE,GAC9BsU,eAAgBuzD,GAAsB7nE,GACtC3c,IAAK2c,EAAO2mE,MAEZ,2BAAMruF,UAAU,SAAS0nB,EAAOE,OAASF,EAAO2mE,MAChD,2BAAMruF,UAAU,WAAWkC,IAAI,QAC5BitF,GAAiBznE,SAO9B,mBAAC0B,GAAA,EAAD,CACExpB,OAAQwtF,EACRpmF,QAASsmF,EACT1lE,MAAOroB,EAAK,yBACZyB,KAAMzB,EAAK,4BACXmnC,sBAAoB,EACpBrd,aAAc9pB,EAAK,aACnB+pB,eAAgBulE,KAElB,mBAACzlE,GAAA,EAAD,CACExpB,OAAQ2tF,EACRvmF,QAASymF,EACT7lE,MAAOroB,EAAK,cACZyB,KAAMzB,EAAK,eACXmnC,sBAAoB,EACpBrd,aAAc9pB,EAAK,gBACnB+pB,eAAgBolE,IAElB,mBAACtlE,GAAA,EAAD,CACExpB,OAAQ8/E,EACR14E,QAAS44E,EACTh4D,MAAOroB,EAAK,cACZyB,KAAMzB,EAAK,kBACXmnC,sBAAoB,EACpBrd,aAAc9pB,EAAK,UACnB+pB,eAAgB4S,UC5XlB2zD,GAAuB,CAAC,EAAG,GAAI,KAC/BC,GAAsB,CAC1BC,KAAM,KACNnmE,IAAK,MACLomE,KAAM,QAEFC,GAA6BH,GAAoBC,KA2OvD,IAAehyF,EAAAA,EAAAA,KAAKC,EAAAA,EAAAA,KAClB,CAACC,EAAD,KAAoC,IAA3B,OAAE+N,GAAyB,EAClC,MAAM,cAAEkkF,GAAkBjyF,EAAOshF,WAAWngD,SAASpzB,GAErD,MAAO,CACLkkF,cAAAA,EACA7gE,iBAAkBpxB,EAAOoxB,oBANXrxB,EA7N4B,IAO1C,IAP2C,OAC/CgO,EAD+C,cAE/CkkF,EAF+C,SAG/CrjF,EAH+C,iBAI/CwiB,EAJ+C,QAK/CroB,EAL+C,eAM/C0+B,GACI,EACJ,MAAM,uBAAEsnD,EAAF,iBAA0BmD,IAAqBnxF,EAAAA,EAAAA,MAE/CO,GAAOC,EAAAA,EAAAA,MACN4wF,EAAkB30B,EAAcC,IAAiBp3D,EAAAA,GAAAA,MACjD0jB,EAAiBqoE,IAAsBhvF,EAAAA,EAAAA,KAAS,IAChDumB,EAAOonC,IAAY3tD,EAAAA,EAAAA,IAAS,KAC5BivF,EAAkBC,IAAuBlvF,EAAAA,EAAAA,IAAiBmR,KAAKC,MAAQw9E,KACvEO,EAAsBC,IAA2BpvF,EAAAA,EAAAA,IAAS,cAC1DqvF,EAAkBC,IAAuBtvF,EAAAA,EAAAA,IAA6B,KACtEuvF,EAAqBC,IAA0BxvF,EAAAA,EAAAA,IAAS,MACxDyvF,EAAiBC,IAAsB1vF,EAAAA,EAAAA,KAAS,IAEvD0gB,EAAAA,EAAAA,IAAelV,EAAU7F,IAEzBhO,EAAAA,EAAAA,IAAY,IAAwB,IAAtBg4F,GAAsB,EAClC,GAAIA,IAAqBd,EACzB,GAAKA,EAOE,CACL,MACEtoE,MAAOqpE,EADH,WACiBzC,EADjB,WAC6BT,EAAY/lE,gBAAiBkpE,GAC5DhB,EAMJ,GALIe,GAAcjiC,EAASiiC,GACvBzC,IACFqC,EAAuBhB,GAAqBpzF,SAAS+xF,GAAcA,EAAWt1E,WAAa,UAC3Fy3E,EAAoBnC,IAElBT,EAAY,CACd,MAAMoD,GAAcnD,EAAAA,GAAAA,GAAc3+D,GAAoB4gE,GACtDQ,EAAwB,UACxBF,EAAwD,IAApC9vF,KAAK0E,IAAI4oF,EAAYoD,IAEvCD,GACFb,GAAmB,QArBrBrhC,EAAS,IACTyhC,EAAwB,aACxBI,EAAuB,KACvBN,EAAsD,KAAlCvC,EAAAA,GAAAA,GAAc3+D,GAA2B4gE,IAC7DU,EAAoB,IACpBN,GAAmB,KAmBpB,CAACH,EAAe7gE,IAEnB,MAAM+hE,GAAwB9xF,EAAAA,EAAAA,KAAa0C,IACzCquF,EAAmBruF,EAAEmI,OAAO+mB,WAC3B,IAEGo+B,GAAoBhwD,EAAAA,EAAAA,KAAa0C,IACrCgtD,EAAShtD,EAAEmI,OAAO7D,SACjB,IAEG+qF,GAA+B/xF,EAAAA,EAAAA,KAAa0C,IAChD2uF,EAAoBv1E,OAAOo8B,SAASx1C,EAAEmI,OAAO7D,MAAO,OACnD,IAEGgrF,GAAyBhyF,EAAAA,EAAAA,KAAakb,IAC1C+1E,EAAoB/1E,EAAK6R,WACzBqvC,MACC,CAACA,IAEE61B,GAAkBjyF,EAAAA,EAAAA,KAAY,KAClCyxF,GAAmB,GACnB,MAAMvC,EAAqC,WAAxBoC,EAAmCF,EAAmBE,EACzE,IAAI7C,EACJ,OAAQyC,GACN,IAAK,SACHzC,GAAaC,EAAAA,GAAAA,GAAc3+D,IAAqBihE,EAAmB99E,KAAKC,OAAS,IACjF,MACF,IAAK,OACL,IAAK,MACL,IAAK,OACHs7E,GAAaC,EAAAA,GAAAA,GAAc3+D,GAAoBygE,GAAoBU,GAAwB,IAC3F,MAEF,QACEzC,OAAa70F,EAGbg3F,EACFlD,EAAuB,CACrBqB,KAAM6B,EAAc7B,KACpBriF,OAAAA,EACA4b,MAAAA,EACAI,gBAAAA,EACA+lE,WAAAA,EACAS,WAAAA,IAGF2B,EAAiB,CACfnkF,OAAAA,EACA4b,MAAAA,EACAI,gBAAAA,EACA+lE,WAAAA,EACAS,WAAAA,IAGJ9oD,EAAei8C,EAAAA,GAAAA,WACd,CACD31E,EAAQskF,EAAkBI,EAAkB1D,EAAwBkD,EACpEC,EAAkBnoE,EAAiBwoE,EAAsBI,EAAqBhpE,EAAO8d,EACrFrW,IAGF,OACE,0BAAKrvB,UAAU,2BACb,0BAAKA,UAAU,iBACb,0BAAKA,UAAU,WACb,mBAACixB,GAAA,EAAD,CACED,MAAOzxB,EAAK,qBACZo2C,SAAUp2C,EAAK,gCACf2xB,QAASlJ,EACTzhB,SAAU6qF,KAGd,0BAAKpxF,UAAU,WACb,mBAACujB,GAAA,EAAD,CACEvjB,UAAU,YACVyjB,YAAalkB,EAAK,gBAClB+G,MAAOshB,EACPrhB,SAAU+oD,IAEZ,wBAAGtvD,UAAU,mBAAmBT,EAAK,kBAEvC,0BAAKS,UAAU,WACb,0BAAKA,UAAU,kBAAkBT,EAAK,kBACtC,mBAAC80B,GAAA,EAAD,CACEhS,KAAK,gBACLiS,QAAS,CACP,CACEhuB,MAAO,OACP0qB,MAAOzxB,EAAK,QAAS,IAEvB,CACE+G,MAAO,MACP0qB,MAAOzxB,EAAK,OAAQ,IAEtB,CACE+G,MAAO,OACP0qB,MAAOzxB,EAAK,QAAS,IAEvB,CACE+G,MAAO,YACP0qB,MAAOzxB,EAAK,YAEd,CACE+G,MAAO,SACP0qB,MAAOzxB,EAAK,oCAGhBgH,SAAUkqF,EACVl8D,SAAUi8D,IAEc,WAAzBA,GACC,mBAAC3wF,EAAA,EAAD,CAAQG,UAAU,eAAeqoB,QAAM,EAACpoB,QAASw7D,IAC9C4f,EAAAA,GAAAA,IAAe97E,EAAM+wF,GADxB,KAC4C7iE,EAAAA,GAAAA,IAAWluB,EAAM+wF,IAG/D,wBAAGtwF,UAAU,mBAAmBT,EAAK,oBAErCyoB,GACA,0BAAKhoB,UAAU,WACb,0BAAKA,UAAU,kBAAkBT,EAAK,sBACtC,mBAAC80B,GAAA,EAAD,CACEhS,KAAK,eACLiS,QAAS,IACJu7D,GAAqB/pF,KAAK0rF,IAAD,CAAUlrF,MAAOkrF,EAAEt4E,WAAY8X,MAAOwgE,MAClE,CACElrF,MAAO,IACP0qB,MAAOzxB,EAAK,YAEd,CACE+G,MAAO,SACP0qB,MAAOzxB,EAAK,mCAGhBgH,SAAUsqF,EACVt8D,SAAUq8D,IAEa,WAAxBA,GACC,4BACE5wF,UAAU,2BACVmb,KAAK,SACL/V,IAAI,IACJD,IAAI,QACJmB,MAAOoqF,EACPnqF,SAAU8qF,IAGd,wBAAGrxF,UAAU,mBAAmBT,EAAK,mBAGzC,mBAACkrC,GAAA,EAAD,CACE/vB,SAAO,EACPza,QAASsxF,EACTrqF,SAAU4pF,EACV5wF,UAA2BX,EAAhB2wF,EAAqB,WAAmB,eAEnD,wBAAGlwF,UAAU,iBAGjB,mBAAC,GAAD,CACEJ,OAAQwwF,EACR1lE,cAAY,EACZE,gBAAc,EACd5jB,QAAS00D,EACT3wC,SAAUumE,EACV/mE,WAAY+lE,EACZzlE,kBAAmBtrB,EAAK,eCxIhC,IAAexB,EAAAA,EAAAA,KAAKC,EAAAA,EAAAA,KAClB,CAACC,EAAD,KAAoC,UAA3B,OAAE+N,GAAyB,EAClC,MAAMqO,GAAO3N,EAAAA,EAAAA,IAAWzO,EAAQ+N,GAEhC,MAAO,CACL4nD,iBAAgB,UAAEv5C,EAAK0uB,gBAAP,aAAE,EAAe6qB,iBACjC7H,mBAAoB9tD,EAAO8tD,mBAC3B1xC,KAAAA,KAPcrc,EA9F+B,IAM7C,IAN8C,mBAClD+tD,EADkD,iBAElD6H,EAFkD,KAGlDv5C,EAHkD,SAIlDxN,EAJkD,QAKlD7F,GACI,EACJ,MAAM,wBAAEyqF,IAA4BzyF,EAAAA,EAAAA,MAE9BO,GAAOC,EAAAA,EAAAA,MACNsxC,EAAW65C,IAAgBtpF,EAAAA,EAAAA,KAAS,IACpCogC,EAAWk9C,IAAgBt9E,EAAAA,EAAAA,KAAS,IACpCqwF,EAAuBC,IAA4BtwF,EAAAA,EAAAA,IAASuyD,GAAoB,KAEvF7xC,EAAAA,EAAAA,IAAelV,EAAU7F,GAEzB,MAAM4qF,GAAsBtyF,EAAAA,EAAAA,KAAY,KACjC+a,IACLskE,GAAa,GAEb8S,EAAwB,CACtBzlF,OAAQqO,EAAK7d,GACbo3D,iBAAkB89B,OAEnB,CAACr3E,EAAMq3E,EAAuBD,KAEjCp3F,EAAAA,EAAAA,KAAU,KACJu5D,IACF+qB,GAAa,GACbgM,GAAa,GACbgH,EAAyB/9B,MAE1B,CAACA,IAEJ,MAAMi+B,GAAuBvyF,EAAAA,EAAAA,KAAa0C,IACxC,IAAKqY,IAAS0xC,EAAoB,OAElC,MAAM,KAAE1pC,EAAF,QAAQ6O,GAAYlvB,EAAEqI,cACtBynF,EAA+B,QAATzvE,EAAkB6O,EAAU66B,EAAmBjmD,KAAK0yB,GAAMA,EAAEC,WAAY,GAC9FvH,EAEA,IAAIwgE,EAAuBrvE,GAD3BqvE,EAAsBjvE,QAAQ+V,GAAMA,IAAMnW,IAGhDsvE,EAAyBG,GACzBnH,GAAa,KACZ,CAAC5+B,EAAoB1xC,EAAMq3E,IAE9B,OACE,0BAAK1xF,UAAU,cACb,0BAAKA,UAAU,iBACb,0BAAKA,UAAU,WACb,0BAAKA,UAAU,yBACb,mBAACixB,GAAA,EAAD,CACE5O,KAAK,MACL6O,SAAUwgE,GAAyBA,EAAsB/zF,OAAS,EAClEqzB,MAAOzxB,EAAK,mBACZgH,SAAUsrF,KAGb9lC,MAAAA,OATH,EASGA,EAAoBtpC,QAAQ+V,IAAOA,EAAE0zB,aAAYpmD,KAAI,QAAC,SAAE2yB,EAAF,MAAY7Q,GAAb,SACpD,0BAAK5nB,UAAU,yBACb,mBAACixB,GAAA,EAAD,CACE5O,KAAMoW,EACNvH,SAAUwgE,IAAyBA,MAAAA,OAA1B,EAA0BA,EAAuBj1F,SAASg8B,IACnEvxB,SAA4C,KAAlCwqF,MAAAA,OAAA,EAAAA,EAAuB/zF,QACjCqzB,MACE,0BAAKhxB,UAAU,YACb,mBAAC+4B,GAAA,EAAD,CAAqBN,SAAUA,IAC9B7Q,GAGLrhB,SAAUsrF,UAOpB,mBAACpnD,GAAA,EAAD,CACE/vB,QAASo2B,EACT7wC,QAAS2xF,EACT1xF,UAAWX,EAAK,QAChB2H,SAAUu6B,GAETA,EACC,mBAACxxB,EAAA,EAAD,CAASlQ,MAAM,UAEf,wBAAGC,UAAU,qBCgEvB,IAAejC,EAAAA,EAAAA,KAAKC,EAAAA,EAAAA,KAClB,CAACC,EAAD,KAAoC,IAA3B,OAAE+N,GAAyB,EAClC,MAAM,WAAE+lF,GAAe9zF,EAAOshF,WAAWngD,SAASpzB,IAC5C,OAAE0b,EAAF,UAAUsqE,EAAV,WAAqBC,GAAeF,GAAc,GAClD13E,GAAO3N,EAAAA,EAAAA,IAAWzO,EAAQ+N,GAGhC,MAAO,CACL0b,OAAAA,EACAsqE,UAAAA,EACAC,WAAAA,EACAlqE,UANgB1N,IAAQqY,EAAAA,EAAAA,IAAcrY,GAOtCgV,iBAAkBpxB,EAAOoxB,oBAZXrxB,EAhJgC,IAS9C,IAT+C,OACnDgO,EADmD,OAEnD0b,EAFmD,UAGnDsqE,EAHmD,WAInDC,EAJmD,UAKnDlqE,EALmD,SAMnDlb,EANmD,iBAOnDwiB,EAPmD,QAQnDroB,GACI,EACJ,MAAM,iBACJogB,EADI,wBAEJ8qE,EAFI,yBAGJC,EAHI,SAIJj7D,IACEl4B,EAAAA,EAAAA,MAEEO,GAAOC,EAAAA,EAAAA,MACP,MACJ+sF,EAAQ,EADJ,WACOiC,EADP,KACmBH,EADnB,QACyB+D,GAC3B1qE,GAAU,GACRqmE,GAAarmE,MAAAA,OAAA,EAAAA,EAAQqmE,aAAsE,KAAvDrmE,EAAOqmE,YAAaC,EAAAA,GAAAA,GAAc3+D,IAA4B7c,KAAKC,MACvG4/E,IAAc3qE,MAAAA,OAAA,EAAAA,EAAQqmE,aAAc,IAAKC,EAAAA,GAAAA,GAAc3+D,GAAqB,GAElFh1B,EAAAA,EAAAA,KAAU,KACJg0F,IACF6D,EAAwB,CAAElmF,OAAAA,EAAQqiF,KAAAA,IAClC8D,EAAyB,CAAEnmF,OAAAA,EAAQqiF,KAAAA,OAEpC,CAACriF,EAAQqiF,EAAM6D,EAAyBC,IAE3C,MAAMG,GAAoBhzF,EAAAA,EAAAA,KAAY,MACpCi4D,EAAAA,GAAAA,IAAoB7vC,EAAQ2mE,MAC5BjnE,EAAiB,CACfhqB,QAASmC,EAAK,kBAEf,CAACmoB,EAAQnoB,EAAM6nB,IA0DlB,OAxDArF,EAAAA,EAAAA,IAAelV,EAAU7F,GAyDvB,0BAAKhH,UAAU,+BACb,0BAAKA,UAAU,kBACX0nB,GACA,wBAAG1nB,UAAU,cAAcT,EAAK,YAEjCmoB,GACC,sCACE,0BAAK1nB,UAAU,WACb,yBAAIA,UAAU,cAAc0nB,EAAOE,OAASF,EAAO2mE,MACnD,4BACEruF,UAAU,eACVsG,MAAOohB,EAAO2mE,KACd5lD,UAAQ,EACRxoC,QAASqyF,IAEX,mBAACzyF,EAAA,EAAD,CAAQG,UAAU,YAAYC,QAASqyF,GAAoB/yF,EAAK,aAC/DwuF,GACC,wBAAG/tF,UAAU,cACVqyF,EACG9yF,EAAK,eACLA,EAAK,gBAAkB,IAAE87E,EAAAA,GAAAA,IAAe97E,EAAMwuF,OAAetgE,EAAAA,GAAAA,IAAWluB,EAAMwuF,QAIvFqE,GACC,0BAAKpyF,UAAU,WACb,4BAAIT,EAAK,mBACT,mBAAC6kB,GAAA,EAAD,CACEpkB,UAAU,6CAEVC,QAAS,IAAMi3B,EAAS,CAAE16B,GAAI41F,KAE9B,mBAAC/tE,GAAA,EAAD,CACEE,OAAQ6tE,EACR9tE,QAAQ/J,EAAAA,GAAAA,IAAoBhb,EAAoB,IAAdmoB,EAAOlN,MAAa,GACtD0sB,eAAa,MA1FP,MACtB,GAAK8qD,MAAAA,GAAAA,EAAWr0F,QAAZ,MAAsBs0F,IAAAA,EAAYt0F,OACtC,OAAKq0F,EAEH,0BAAKhyF,UAAU,WACb,4BAAIgyF,EAAUr0F,OAAS4B,EAAK,eAAgBgtF,GAAShtF,EAAK,gBAC1D,wBAAGS,UAAU,eACTgyF,EAAUr0F,SACV6wF,EAAajvF,EAAK,4BAA6BivF,EAAajC,GAAShtF,EAAK,mBAE3EyyF,EAAUlsF,KAAKysF,GACd,mBAACnuE,GAAA,EAAD,CACEpkB,UAAU,6CAEVC,QAAS,IAAMi3B,EAAS,CAAE16B,GAAI+1F,EAAShuE,UAEvC,mBAACF,GAAA,EAAD,CACEE,OAAQguE,EAAShuE,OACjBD,QAAQ/J,EAAAA,GAAAA,IAAoBhb,EAAsB,IAAhBgzF,EAAS/3E,MAAa,GACxD0sB,eAAa,SAjBF,mBAACj3B,EAAA,EAAD,OA6FduiF,GAnEc,MACvB,GAAI9qE,MAAAA,IAAAA,EAAQ+5D,UAAZ,CACA,IAAKwQ,GAAcD,EAAW,OAAO,mBAAC/hF,EAAA,EAAD,MACrC,GAAKgiF,MAAAA,GAAAA,EAAYt0F,OACjB,OACE,0BAAKqC,UAAU,WACb,4BAAgBT,EAAZwoB,EAAiB,oBAA4B,mBACjD,wBAAG/nB,UAAU,cACViyF,EAAWnsF,KAAK2sF,GACf,mBAACruE,GAAA,EAAD,CACEpkB,UAAU,6CAEVC,QAAS,IAAMi3B,EAAS,CAAE16B,GAAIi2F,EAAUluE,UAExC,mBAACF,GAAA,EAAD,CACEE,OAAQkuE,EAAUluE,OAClBD,QAAQ/J,EAAAA,GAAAA,IAAoBhb,EAAuB,IAAjBkzF,EAAUj4E,MAAa,GACzD0sB,eAAa,WAmDhBwrD,UChFb,IAAe30F,EAAAA,EAAAA,KAAKC,EAAAA,EAAAA,KAClB,CAACC,EAAD,KAAoC,IAA3B,OAAEsmB,GAAyB,EAGlC,MAAO,CACLnK,MAHW3N,EAAAA,EAAAA,IAAWxO,EAAQsmB,GAI9B8K,iBAAkBpxB,EAAOoxB,oBANXrxB,EA5D2B,IAQzC,IAR0C,OAC9CumB,EAD8C,MAE9CsD,EAF8C,KAG9CrN,EAH8C,UAI9CuN,EAJ8C,KAK9C3N,EAL8C,iBAM9CiV,EAN8C,OAO9CrjB,GACI,EACJ,MAAM,SAAEkrB,EAAF,oBAAYy7D,IAAwB3zF,EAAAA,EAAAA,MAEpC+C,GAAiB+wD,EAAAA,EAAAA,GAAuB,eACxCvzD,GAAOC,EAAAA,EAAAA,KAEPw5B,GAAWC,EAAAA,EAAAA,IAAgB7e,GAC3Bw4E,EAAuD,KAA1Cp4E,GAAOwzE,EAAAA,GAAAA,GAAc3+D,IAA4B7c,KAAKC,MAEnEogF,GAAaC,EAAAA,GAAAA,IAAQ,IAAItgF,KAAKogF,KAChCnlE,EAAAA,GAAAA,IAAWluB,EAAMqzF,IAAaG,EAAAA,GAAAA,IAAgBxzF,EAAMqzF,GAAW,GAAM,GAAO,GAM1EI,GAAsB1zF,EAAAA,EAAAA,KAAY,KACtCqzF,EAAoB,CAAE3mF,OAAAA,EAAQuY,OAAAA,EAAQ0uE,YAAY,MACjD,CAACjnF,EAAQ2mF,EAAqBpuE,IAE3B2uE,GAAsB5zF,EAAAA,EAAAA,KAAY,KACtCqzF,EAAoB,CAAE3mF,OAAAA,EAAQuY,OAAAA,EAAQ0uE,YAAY,MACjD,CAACjnF,EAAQ2mF,EAAqBpuE,IAEjC,OACE,0BAAKvkB,UAAW+B,EAAe,MAC7B,0BAAK/B,UAAW+B,EAAe,QAC7B,0BAAK/B,UAAW+B,EAAe,QAAS9B,QAftB,KACtBi3B,EAAS,CAAE16B,GAAI+nB,MAeT,mBAACpK,GAAA,EAAD,CACEpP,IAAKwZ,EACL/pB,KAAK,SACL4f,KAAMA,IAER,0BAAKpa,UAAW+B,EAAe,cAC7B,0BAAK/B,UAAW+B,EAAe,cAAei3B,GAC9C,0BAAKh5B,UAAW+B,EAAe,kBAAmB8lB,KAGtD,0BAAK7nB,UAAW+B,EAAe,SAAU8wF,IAE3C,0BAAK7yF,UAAW+B,EAAe,YAC7B,mBAAClC,EAAA,EAAD,CAAQG,UAAW+B,EAAe,UAAW9B,QAAS+yF,GACvCzzF,EAAZwoB,EAAiB,sBAA8B,sBAElD,mBAACloB,EAAA,EAAD,CAAQG,UAAW+B,EAAe,UAAWsmB,QAAM,EAACpoB,QAASizF,GAC1D3zF,EAAK,yBCuDhB,IAAexB,EAAAA,EAAAA,KAAKC,EAAAA,EAAAA,KAClB,CAACC,EAAD,KAAoC,IAA3B,OAAE+N,GAAyB,EAClC,MAAMqO,GAAO3N,EAAAA,EAAAA,IAAWzO,EAAQ+N,GAEhC,MAAO,CACLqO,KAAAA,EACAgV,iBAAkBpxB,EAAOoxB,iBACzBtH,UAAW1N,IAAQqY,EAAAA,EAAAA,IAAcrY,MAPnBrc,EA1GkC,IAMhD,cANiD,KACrDqc,EADqD,OAErDrO,EAFqD,SAGrDa,EAHqD,UAIrDkb,EAJqD,QAKrD/gB,GACI,EACJ,MAAM,wBAAEmsF,EAAF,qBAA2B/R,IAAyBpiF,EAAAA,EAAAA,OACnDo0F,EAAuBC,EAAqBC,IAAwBhvF,EAAAA,GAAAA,MACpEivF,EAAuBC,EAAqBC,IAAwBnvF,EAAAA,GAAAA,KAErE/E,GAAOC,EAAAA,EAAAA,MAENk7B,EAAeuS,IAAoB5rC,EAAAA,EAAAA,OACnC6rC,EAAmBC,IAAwB9rC,EAAAA,EAAAA,KAAS,GACrD+rC,GAAsB9tC,EAAAA,EAAAA,KAAY,IAAM6tC,GAAqB,IAAO,KAE1E9yC,EAAAA,EAAAA,KAAU,KACHqgC,IACHN,EAAAA,GAAAA,GAAiB,eAAeC,KAAK4S,KAEtC,CAACvS,KAEJ3Y,EAAAA,EAAAA,IAAelV,EAAU7F,IAEzB3M,EAAAA,EAAAA,KAAU,KACHggB,MAAAA,GAAAA,EAAM+oE,eAAiB1pE,EAAAA,EAAAA,IAAS1N,IACnCo1E,EAAqB,CAAEp1E,OAAAA,MAExB,CAACqO,EAAMrO,EAAQo1E,IAElB,MAAMsS,GAA0Bp0F,EAAAA,EAAAA,KAAY,KAC1C6zF,EAAwB,CAAEnnF,OAAAA,EAAQinF,YAAY,IAC9CK,MACC,CAACH,EAAyBnnF,EAAQsnF,IAE/BK,GAA0Br0F,EAAAA,EAAAA,KAAY,KAC1C6zF,EAAwB,CAAEnnF,OAAAA,EAAQinF,YAAY,IAC9CQ,MACC,CAACN,EAAyBnnF,EAAQynF,IAErC,OACE,0BAAKzzF,UAAU,iCACb,0BAAKA,UAAU,WACb,0BAAKA,UAAU,gBACZ06B,GACC,mBAACD,GAAA,EAAD,CACEj+B,GAAG,mBACHhC,KAAMo5F,EAAAA,GACNl5D,cAAeA,EACfC,KAAMuS,EACNnS,OAAQqS,KAIbtyC,QAAQuf,MAAAA,GAAD,UAACA,EAAM+oE,oBAAP,aAAC,EAAoBzlF,SAC3B,0BAAKqC,UAAU,gBACb,mBAACH,EAAA,EAAD,CAAQG,UAAU,qBAAqBC,QAASozF,GAAhD,cACA,mBAACxzF,EAAA,EAAD,CAAQG,UAAU,qBAAqBC,QAASuzF,EAAqBnrE,QAAM,GAA3E,iBAIN,0BAAKroB,UAAU,WACb,0BAAKA,UAAU,gBAAgBipF,eAAa,GAC1C,wBAAGl+E,IAAI,SACHsP,MAAAA,GAAAA,EAAM+oE,aAAiC/oE,EAAK+oE,aAAazlF,OACvD4B,EAAK,eAAgB8a,EAAK+oE,aAAazlF,QAAU4B,EAAK,oBADnCA,EAAK,cAG5B8a,MAAAA,GAAAA,EAAM+oE,eACN,mBAACnzE,EAAA,EAAD,CAASlF,IAAI,YAEiB,KAA/BsP,MAAAA,GAAA,UAAAA,EAAM+oE,oBAAN,eAAoBzlF,SACnB,wBAAGqC,UAAU,aAAa+K,IAAI,SACfxL,EAAZwoB,EAAiB,iCAAyC,gCAG9D1N,MAAAA,GAbH,UAaGA,EAAM+oE,oBAbT,aAaG,EAAoBt9E,KAAI,QAAC,OAAEye,EAAF,MAAUsD,EAAV,KAAiBrN,GAAlB,SACvB,mBAAC,GAAD,CACE+J,OAAQA,EACRsD,MAAOA,EACPrN,KAAMA,EACNuN,UAAWA,EACX/b,OAAQA,EACRjB,IAAKwZ,SAKb,mBAAC6E,GAAA,EAAD,CACExpB,OAAQwzF,EACRpsF,QAASssF,EACT1rE,MAAM,uBACN5mB,KAAK,gDACLsoB,eAAgBoqE,IAElB,mBAACtqE,GAAA,EAAD,CACExpB,OAAQ2zF,EACRvsF,QAASysF,EACT7rE,MAAM,uBACN5mB,KAAK,gDACLsoB,eAAgBqqE,SCuJxB,IAAe51F,EAAAA,EAAAA,KAAKC,EAAAA,EAAAA,KACjBC,IAGQ,CACL41F,gBAHqBC,EAAAA,EAAAA,IAA4B71F,MAFnCD,EAnP0B,IAUxC,IAVyC,OAC7CgO,EAD6C,cAE7Cu5B,EAF6C,qBAG7CkkD,EAH6C,wBAI7CF,EAJ6C,eAK7C7jD,EAL6C,mBAM7C29C,EAN6C,QAO7Cr8E,EAP6C,SAQ7C6F,EAR6C,eAS7CgnF,GACI,EACJ,OAAQtuD,GACN,KAAKo8C,EAAAA,GAAAA,QACH,OAAQkS,GACN,IAAK,OACH,OACE,mBAAC,GAAD,CACE9oF,IAAKiB,EACLuY,OAAQvY,EACRhF,QAASA,EACT6F,SAAUA,IAGhB,IAAK,QACH,OACE,mBAAC,GAAD,CACE9B,IAAKiB,EACLA,OAAQA,EACR05B,eAAgBA,EAChB1+B,QAASA,EACT6F,SAAUA,GAAY,CACpB80E,EAAAA,GAAAA,gBACAA,EAAAA,GAAAA,WACAA,EAAAA,GAAAA,iBACAA,EAAAA,GAAAA,mBACAA,EAAAA,GAAAA,kBACAA,EAAAA,GAAAA,2BACAA,EAAAA,GAAAA,qBACAA,EAAAA,GAAAA,gBACAA,EAAAA,GAAAA,mBACAA,EAAAA,GAAAA,oBACAllF,SAAS8oC,KAGjB,IAAK,UACH,OACE,mBAAC,GAAD,CACEx6B,IAAKiB,EACLA,OAAQA,EACR05B,eAAgBA,EAChB1+B,QAASA,EACT6F,SAAUA,GAAY,CACpB80E,EAAAA,GAAAA,mBACAA,EAAAA,GAAAA,mBACAA,EAAAA,GAAAA,oBACAA,EAAAA,GAAAA,WACAA,EAAAA,GAAAA,gBACAA,EAAAA,GAAAA,gBACAA,EAAAA,GAAAA,mBACAA,EAAAA,GAAAA,oBACAllF,SAAS8oC,KAKnB,MAGF,KAAKo8C,EAAAA,GAAAA,gBACH,OACE,mBAAC,GAAD,CACE31E,OAAQA,EACRa,SAAUA,EACV7F,QAASA,IAIf,KAAK26E,EAAAA,GAAAA,WACH,OACE,mBAAC,GAAD,CACE31E,OAAQA,EACR05B,eAAgBA,EAChB74B,SAAUA,EACV7F,QAASA,IAIf,KAAK26E,EAAAA,GAAAA,iBACH,OACE,mBAAC,GAAD,CACE31E,OAAQA,EACR05B,eAAgBA,EAChB29C,mBAAoBA,EACpBx2E,SAAUA,GAAY,CACpB80E,EAAAA,GAAAA,kBACAA,EAAAA,GAAAA,2BACAA,EAAAA,GAAAA,sBACAllF,SAAS8oC,GACXv+B,QAASA,IAIf,KAAK26E,EAAAA,GAAAA,oBACL,KAAKA,EAAAA,GAAAA,kBACH,OACE,mBAAC,GAAD,CACE31E,OAAQA,EACRa,SAAUA,EACV7F,QAASA,IAIf,KAAK26E,EAAAA,GAAAA,2BACH,OACE,mBAAC,GAAD,CACE31E,OAAQA,EACRq3E,mBAAoBA,EACpB39C,eAAgBA,EAChB74B,SAAUA,GAAY,CACpB80E,EAAAA,GAAAA,sBACAllF,SAAS8oC,GACXv+B,QAASA,IAIf,KAAK26E,EAAAA,GAAAA,qBACH,OACE,mBAAC,GAAD,CACE31E,OAAQA,EACRy9E,qBAAsBA,EACtBF,wBAAyBA,EACzB7jD,eAAgBA,EAChB74B,SAAUA,EACV7F,QAASA,IAIf,KAAK26E,EAAAA,GAAAA,mBACH,OACE,mBAAC,GAAD,CACE31E,OAAQA,EACR05B,eAAgBA,EAChB29C,mBAAoBA,EACpBx2E,SAAUA,GAAY,CACpB80E,EAAAA,GAAAA,gBACAA,EAAAA,GAAAA,mBACAA,EAAAA,GAAAA,oBACAllF,SAAS8oC,GACXv+B,QAASA,IAIf,KAAK26E,EAAAA,GAAAA,mBACH,OACE,mBAAC,GAAD,CACE31E,OAAQA,EACRa,SAAUA,EACV7F,QAASA,IAIf,KAAK26E,EAAAA,GAAAA,mBACL,KAAKA,EAAAA,GAAAA,gBACH,OACE,mBAAC,GAAD,CACE31E,OAAQA,EACRw+E,WAAYjlD,IAAkBo8C,EAAAA,GAAAA,mBAC9B8I,eAAgBhB,EAChBF,wBAAyBA,EACzB7jD,eAAgBA,EAChB74B,SAAUA,EACV7F,QAASA,IAIf,KAAK26E,EAAAA,GAAAA,mBACL,KAAKA,EAAAA,GAAAA,aACH,OACE,mBAAC,GAAD,CACE31E,OAAQA,EACRa,SAAUA,EACV7F,QAASA,IAGf,KAAK26E,EAAAA,GAAAA,QACH,OACE,mBAAC,GAAD,CACE31E,OAAQA,EACRa,SAAUA,EACV7F,QAASA,EACT0+B,eAAgBA,IAGtB,KAAKi8C,EAAAA,GAAAA,WACH,OACE,mBAAC,GAAD,CACE31E,OAAQA,EACRa,SAAUA,EACV7F,QAASA,EACT0+B,eAAgBA,IAGtB,KAAKi8C,EAAAA,GAAAA,eACH,OACE,mBAAC,GAAD,CACE31E,OAAQA,EACR4/E,UAAQ,EACR/+E,SAAUA,EACV7F,QAASA,EACT0+B,eAAgBA,EAChB29C,mBAAoBA,IAI1B,KAAK1B,EAAAA,GAAAA,UACH,OACE,mBAAC,GAAD,CACE31E,OAAQA,EACRa,SAAUA,EACV7F,QAASA,IAGf,KAAK26E,EAAAA,GAAAA,WACH,OACE,mBAAC,GAAD,CACE31E,OAAQA,EACRa,SAAUA,EACV7F,QAASA,IAGf,KAAK26E,EAAAA,GAAAA,aACH,OACE,mBAAC,GAAD,CACE31E,OAAQA,EACRa,SAAUA,EACV7F,QAASA,S,eCpRnB,MAAM+sF,GAAO,8BACPC,GAAc,uBACdC,GAAc,uBAEb,IAAKC,I,SAAAA,GAAAA,EAAAA,EAAAA,QAAAA,GAAAA,UAAAA,EAAAA,EAAAA,KAAAA,GAAAA,OAAAA,EAAAA,EAAAA,WAAAA,GAAAA,a,CAAAA,KAAAA,GAAAA,KAMZ,MAAMC,GAAgC,CACpC,CAACD,GAASE,SAAU,GACpB,CAACF,GAASG,MAAO,OACjB,CAACH,GAASI,YAAa,cAGlB,SAASC,GAAeC,GAE7B,OADAA,EAAaA,EAAW3mE,QAAQ,MAAO,IACnCkmE,GAAK7rD,KAAKssD,GACLN,GAASG,KAEdL,GAAY9rD,KAAKssD,IAAeP,GAAY/rD,KAAKssD,GAC5CN,GAASI,WAEXJ,GAASE,QCvBlB,MA0OMK,GAAuC,GAChCC,GAA2B,oDAoCxC,GA/Qc,+8JA8OXp0D,MAAM,MACNx6B,KAAK6uF,IAQG,CACLn4F,GARSm4F,EAAIrxC,OAAO,EAAG,GAQnBsxC,KAPOD,EAAIrxC,OAAO,EAAG,GAOf91B,KANE,IAAGmnE,EAAIp2D,MAAM,OAAQ,KAMjBlc,KALLsyE,EAAIr0D,MAAM,OAAO,GAKNu0D,YAI5B,SAA8BC,GAC5B,IAAKA,EACH,OAAOJ,GAGT,MAAMK,EAAcD,EAAO,GAC3B,IAAIE,EAEJ,IAAKP,GAAaM,GAAc,CAC9B,MAAME,EAAoBF,EAAYz0D,MAAM,IAAIx6B,IAAIsV,QACpD45E,EAAoBC,EAAkBrwC,QAAO,CAACC,EAAQ3sB,EAAO/T,IACnD,GAAE0gC,WAAgB3sB,MAAU/T,EAAI,EAAI,IAAM,MACjD,IACHswE,GAAaM,GAAe,IAAIG,OAAQ,GAAEF,IAAoB,MAAMG,OAAO,EAAIF,EAAkBt3F,WAGnG,OAAO82F,GAAaM,GAvBEK,CADLT,EAAIp2D,MAAM,aCpNvBuG,GAA2B,CAC/BuwD,YAAa,GACbC,YAAa,GACbC,KAAM,GACNnwD,MAAO,GACPowD,YAAa,GACbC,SAAU,GACVz8D,SAAU,GACVkM,MAAO,GACP/U,MAAO,GACPulE,SAAU,GACVlB,WAAY,GACZmB,WAAY,GACZC,OAAQ,GACRC,IAAK,GACLC,eAAgB,GAChBC,WAAY,GACZC,UAAU,EACVC,iBAAiB,EACjBC,WAAY,IAGRC,GAAgD,CAAC/wD,EAAOC,KAC5D,OAAQA,EAAOlqB,MACb,IAAK,iBACH,MAAO,IACFiqB,EACHiwD,YAAahwD,EAAOC,QACpB4wD,WAAY,IACP9wD,EAAM8wD,WACTb,iBAAan8F,IAGnB,IAAK,iBACH,MAAO,IACFksC,EACHkwD,YAAajwD,EAAOC,QACpB4wD,WAAY,IACP9wD,EAAM8wD,WACTZ,iBAAap8F,IAGnB,IAAK,aACH,MAAO,IACFksC,EACHmwD,KAAMlwD,EAAOC,QACb4wD,WAAY,IACP9wD,EAAM8wD,WACTX,UAAMr8F,IAGZ,IAAK,cACH,MAAO,IACFksC,EACHA,MAAOC,EAAOC,QACd4wD,WAAY,IACP9wD,EAAM8wD,WACT9wD,WAAOlsC,IAGb,IAAK,gBACH,MAAO,IACFksC,EACHowD,YAAanwD,EAAOC,QACpBwwD,eAAgBM,GAAkB/wD,EAAOC,SACzC4wD,WAAY,IACP9wD,EAAM8wD,WACTV,iBAAat8F,IAGnB,IAAK,iBACH,MAAO,IACFksC,EACHqwD,SAAUpwD,EAAOC,QACjB4wD,WAAY,IACP9wD,EAAM8wD,WACTT,cAAUv8F,IAGhB,IAAK,iBACH,MAAO,IACFksC,EACHpM,SAAUqM,EAAOC,QACjB4wD,WAAY,IACP9wD,EAAM8wD,WACTl9D,cAAU9/B,IAGhB,IAAK,cACH,MAAO,IACFksC,EACHF,MAAOG,EAAOC,QACd4wD,WAAY,IACP9wD,EAAM8wD,WACThxD,WAAOhsC,IAGb,IAAK,cACH,MAAO,IACFksC,EACHjV,MAAOkV,EAAOC,QACd4wD,WAAY,IACP9wD,EAAM8wD,WACT/lE,WAAOj3B,IAGb,IAAK,iBACH,MAAO,IAAKksC,EAAOswD,SAAUrwD,EAAOC,SACtC,IAAK,mBACH,MAAO,IACFF,EACHovD,WAAYnvD,EAAOC,QACnB4wD,WAAY,IACP9wD,EAAM8wD,WACT1B,gBAAYt7F,IAGlB,IAAK,mBACH,MAAO,IACFksC,EACHuwD,WAAYtwD,EAAOC,QACnB4wD,WAAY,IACP9wD,EAAM8wD,WACTP,gBAAYz8F,IAGlB,IAAK,mBACH,MAAO,IACFksC,EACHwwD,OAAQvwD,EAAOC,QACf4wD,WAAY,IACP9wD,EAAM8wD,WACTN,YAAQ18F,IAGd,IAAK,gBACH,MAAO,IACFksC,EACHywD,IAAKxwD,EAAOC,QACZ4wD,WAAY,IACP9wD,EAAM8wD,WACTL,SAAK38F,IAGX,IAAK,uBACH,MAAO,IACFksC,EACH0wD,eAAgBzwD,EAAOC,QACvB4wD,WAAY,IACP9wD,EAAM8wD,WACTJ,oBAAgB58F,IAGtB,IAAK,mBACH,MAAO,IACFksC,EACH2wD,WAAY1wD,EAAOC,QACnB4wD,WAAY,IACP9wD,EAAM8wD,WACTH,gBAAY78F,IAGlB,IAAK,iBACH,MAAO,IAAKksC,EAAO4wD,SAAU3wD,EAAOC,SACtC,IAAK,wBACH,MAAO,IAAKF,EAAO6wD,gBAAiB5wD,EAAOC,SAC7C,IAAK,iBACH,OAAID,EAAOC,QAAQkwD,YACV,IACFpwD,KACAC,EAAOC,QACVwwD,eAAgBM,GAAkB/wD,EAAOC,QAAQkwD,cAG9C,IAAKpwD,KAAUC,EAAOC,SAC/B,IAAK,gBACH,MAAO,IACFF,EACH8wD,WAAY,IACP9wD,EAAM8wD,cACN7wD,EAAOC,UAGhB,QACE,OAAOF,IAIb,SAASgxD,GAAkBC,GACzB,MAAM5wC,EAAUl2B,GAAAA,MAAiB,QAAC,GAAE/yB,GAAH,SAAYA,IAAO65F,KACpD,OAAO5wC,EAAUA,EAAQpjC,KAAO,GCvNnB,SAASi0E,GACtBzwF,GACA,IADkC0wF,EAClC,uDAJuB,KAKvBl8F,EAAAA,EAAAA,KAAU,KACJ2N,EAAAA,IAIJpN,YAAW,MACT86E,EAAAA,EAAAA,KAAQ,KACF7vE,EAAI5M,SACN4M,EAAI5M,QAAQw3B,aAGf8lE,KACF,CAAC1wF,EAAK0wF,ICNX,MAyCA,IAAex4F,EAAAA,EAAAA,KAzCe6O,IAC5B,MAAM,GACJpQ,EADI,MAEJ8J,EAFI,MAGJ0qB,EAHI,SAIJwlE,EAJI,MAKJ5vE,EALI,IAMJ/gB,EANI,YAOJ4d,EAPI,SAQJld,EARI,SASJyQ,GACEpK,EACE6pF,EAAY7vE,GAASoK,EACrBoiD,GAAgBrxE,EAAAA,EAAAA,GACpB,cACAuE,GAAS,UACTsgB,GAAS,QACT6vE,GAAa,aACbD,GAAY,aACZ,eAGF,OACE,0BAAKx2F,UAAWozE,GACd,6BACEpzE,UAAU,eACVxD,GAAIA,EACJ8J,MAAOA,GAAS,GAChBC,SAAUA,EACVkd,YAAaA,GAAeuN,EAC5BnrB,IAAKA,GAEJmR,GAEFy/E,GAAaj6F,GACZ,4BAAOk6F,QAASl6F,GAAKi6F,OCsJ7B,IAAe14F,EAAAA,EAAAA,KAlLoB,IAO7B,IAP8B,MAClCqnC,EADkC,UAElCuxD,EAFkC,UAGlCC,EAHkC,SAIlCC,EAJkC,YAKlCC,EALkC,SAMlCtoD,GACI,EAEJ,MAAM1zB,GAAWhiB,EAAAA,EAAAA,IAAyB,MAEpCi+F,GAAWj+F,EAAAA,EAAAA,IAAyB,MAEpCk+F,GAAmBl+F,EAAAA,EAAAA,IAA0B,OAEnDuB,EAAAA,EAAAA,KAAU,KACJ28F,EAAiB/9F,SAChB+9F,EAAiB/9F,QAAQqN,QAAU8+B,EAAMowD,cAC5CwB,EAAiB/9F,QAAQqN,MAAQ8+B,EAAMowD,eAExC,CAACpwD,EAAMowD,cAEV,MAAMj2F,GAAOC,EAAAA,EAAAA,KAEb82F,GAAuBx7E,GAEvB,MAAMm8E,GAAuB33F,EAAAA,EAAAA,KAAa0C,IACxCwsC,EAAS,CAAErzB,KAAM,iBAAkBmqB,QAAStjC,EAAEmI,OAAO7D,UACpD,CAACkoC,IAEE0oD,GAAuB53F,EAAAA,EAAAA,KAAa0C,IACxCwsC,EAAS,CAAErzB,KAAM,iBAAkBmqB,QAAStjC,EAAEmI,OAAO7D,UACpD,CAACkoC,IAEE2oD,GAAmB73F,EAAAA,EAAAA,KAAa0C,IACpCwsC,EAAS,CAAErzB,KAAM,aAAcmqB,QAAStjC,EAAEmI,OAAO7D,UAChD,CAACkoC,IAEE4oD,GAAoB93F,EAAAA,EAAAA,KAAa0C,IACrCwsC,EAAS,CAAErzB,KAAM,cAAemqB,QAAStjC,EAAEmI,OAAO7D,UACjD,CAACkoC,IAEE6oD,GAAsB/3F,EAAAA,EAAAA,KAAa0C,IACvCwsC,EAAS,CAAErzB,KAAM,gBAAiBmqB,QAAStjC,EAAEmI,OAAO7D,UACnD,CAACkoC,IAEE8oD,GAAuBh4F,EAAAA,EAAAA,KAAa0C,IACxCwsC,EAAS,CAAErzB,KAAM,iBAAkBmqB,QAAStjC,EAAEmI,OAAO7D,UACpD,CAACkoC,IAEE+oD,GAAuBj4F,EAAAA,EAAAA,KAAa0C,IACxCwsC,EAAS,CAAErzB,KAAM,iBAAkBmqB,QAAStjC,EAAEmI,OAAO7D,UACpD,CAACkoC,IAEEgpD,GAAoBl4F,EAAAA,EAAAA,KAAa0C,IACrCwsC,EAAS,CAAErzB,KAAM,cAAemqB,QAAStjC,EAAEmI,OAAO7D,UACjD,CAACkoC,IAEE7d,GAAoBrxB,EAAAA,EAAAA,KAAa0C,IACrC,IAAI,MAAEsE,GAAUtE,EAAEmI,OAClB7D,EAAS,IAAGA,EAAMunB,QAAQ,MAAO,MAC7BkpE,EAAS99F,UACX89F,EAAS99F,QAAQqN,MAAQA,GAE3BkoC,EAAS,CAAErzB,KAAM,cAAemqB,QAASh/B,MACxC,CAACkoC,IAEEipD,GAAuBn4F,EAAAA,EAAAA,KAAa0C,IACxCwsC,EAAS,CAAErzB,KAAM,iBAAkBmqB,QAAStjC,EAAEmI,OAAO7D,UACpD,CAACkoC,KAEE,WAAE0nD,GAAe9wD,EACvB,OACE,0BAAKplC,UAAU,gBACb,+BACG82F,EACC,8BACE,6BAAKv3F,EAAK,2BACV,mBAACgkB,GAAA,EAAD,CACE1d,IAAKiV,EACLkW,MAAOzxB,EAAK,sCACZgH,SAAU0wF,EACV3wF,MAAO8+B,EAAMiwD,YACb3mE,UAAU,OACV9H,MAAOsvE,EAAWb,cAEpB,mBAAC9xE,GAAA,EAAD,CACEyN,MAAOzxB,EAAK,sCACZgH,SAAU2wF,EACV5wF,MAAO8+B,EAAMkwD,YACb5mE,UAAU,OACV9H,MAAOsvE,EAAWZ,cAEpB,mBAAC/xE,GAAA,EAAD,CACEyN,MAAOzxB,EAAK,kCACZgH,SAAU4wF,EACV7wF,MAAO8+B,EAAMmwD,KACb7mE,UAAU,OACV9H,MAAOsvE,EAAWX,OAEpB,mBAAChyE,GAAA,EAAD,CACEyN,MAAOzxB,EAAK,mCACZgH,SAAU6wF,EACV9wF,MAAO8+B,EAAMA,MACb1W,UAAU,OACV9H,MAAOsvE,EAAW9wD,QAEpB,mBAAC,GAAD,CACEpU,MAAOzxB,EAAK,0BACZkkB,YAAalkB,EAAK,0BAClBgH,SAAU8wF,EACV/wF,MAAO8+B,EAAMowD,YACbgB,SAAU17F,SAAQ,GAClB0B,GAAG,mBACHoqB,MAAOsvE,EAAWV,YAClB3vF,IAAKmxF,GAEJznE,GAAAA,KAAgB,QAAC,KAAElN,EAAF,GAAQ7lB,GAAT,SACf,6BACE8J,MAAO9J,EACPwD,UAAU,eAETqiB,OAKP,mBAACkB,GAAA,EAAD,CACEyN,MAAOzxB,EAAK,iCACZgH,SAAU+wF,EACVhxF,MAAO8+B,EAAMqwD,SACb/mE,UAAU,OACV9H,MAAOsvE,EAAWT,iBAGpBv8F,EACF29F,GAAYF,GAAaC,EACzB,6BAAKr3F,EAAK,iCACRrG,EACF29F,GACA,mBAACtzE,GAAA,EAAD,CACEyN,MAAOzxB,EAAK,uBACZgH,SAAUgxF,EACVjxF,MAAO8+B,EAAMpM,SACbtK,UAAU,OACV9H,MAAOsvE,EAAWl9D,WAGpB29D,GACA,mBAACpzE,GAAA,EAAD,CACEyN,MAAOzxB,EAAK,mCACZgH,SAAUixF,EACVlxF,MAAO8+B,EAAMF,MACbxW,UAAU,QACV9H,MAAOsvE,EAAWhxD,QAGpB0xD,GACA,mBAACrzE,GAAA,EAAD,CACEyN,MAAOzxB,EAAK,8BACZgH,SAAUoqB,EACVrqB,MAAO8+B,EAAMjV,MACbzB,UAAU,MACV9H,MAAOsvE,EAAW/lE,MAClBtqB,IAAKkxF,IAGT,mBAAC9lE,GAAA,EAAD,CACED,MAAOzxB,EAAK,uBACZo2C,SAAUp2C,EAAK,2BACf2xB,QAASp2B,QAAQsqC,EAAM4wD,UACvBzvF,SAAUkxF,SCtIpB,IAAe15F,EAAAA,EAAAA,KAxCgB,IAKzB,IAL0B,MAC9BqnC,EAD8B,gBAE9BsyD,EAF8B,SAG9BC,EAH8B,SAI9BnpD,GACI,EACJ,MAAMjvC,GAAOC,EAAAA,EAAAA,MAEbnF,EAAAA,EAAAA,KAAU,KACHq9F,IAAmBtyD,EAAMswD,UAG9BlnD,EAAS,CAAErzB,KAAM,iBAAkBmqB,QAASoyD,EAAgB,GAAGl7F,OAC9D,CAACk7F,EAAiBtyD,EAAMswD,SAAUlnD,IAErC,MAAMopD,GAAuBt4F,EAAAA,EAAAA,KAAagH,IACxCkoC,EAAS,CAAErzB,KAAM,iBAAkBmqB,QAASh/B,MAC3C,CAACkoC,IAEEla,GAAU50B,EAAAA,EAAAA,KAAQ,IAAOg4F,EAAgB5xF,KAAI,QAAGtJ,GAAI8J,EAAOshB,MAAOoJ,EAApB,OAA2B6mE,GAA5B,QAA0C,CAC3F7mE,MAAAA,EACA2kB,UAAUmiD,EAAAA,GAAAA,GAAeD,EAAQF,EAAUp4F,EAAKiuB,MAChDlnB,MAAAA,OACI,CAACoxF,EAAiBC,EAAUp4F,EAAKiuB,OAEvC,OACE,0BAAKxtB,UAAU,YACb,+BACE,4BAAIT,EAAK,0BACT,mBAAC80B,GAAA,EAAD,CACEhS,KAAK,mBACLiS,QAASA,EACT/tB,SAAUqxF,EACVrjE,SAAU6Q,EAAMswD,gBCkC1B,SAASqC,GACP/0C,EAAgCp7B,EAAethB,EAAeqxF,GAC9D,IADiFK,EACjF,wDACA,OACE,0BAAKh4F,UAAY,oBAAkBg4F,EAAO,uBAAyB,KACjE,0BAAKh4F,UAAU,SACX4nB,GAEJ,0BAAK5nB,UAAU,UACZ83F,EAAAA,GAAAA,GAAexxF,EAAOqxF,EAAU30C,KAMzC,SAASi1C,GAAmBz3F,EAAconB,EAAe0S,GACvD,OACE,0BAAKt6B,UAAU,sBACb,wBAAGA,UAAWQ,GAAd,KACA,0BAAKR,UAAU,QACb,0BAAKA,UAAU,SACX4nB,GAEJ,wBAAG5nB,UAAU,QACTs6B,KAOZ,UAAev8B,EAAAA,EAAAA,KAvFgB,IAOzB,IAP0B,eAC9Bm6F,EAD8B,OAE9BC,EAF8B,eAG9BC,EAH8B,aAI9BC,EAJ8B,SAK9BV,EAL8B,WAM9BW,GACI,EACJ,MAAM/4F,GAAOC,EAAAA,EAAAA,MAEP,SAAE+4F,EAAF,MAAY3wE,EAAZ,KAAmB5mB,GAASk3F,GAAkB,IAC9C,cACJM,EADI,gBAEJC,EAFI,gBAGJC,EAHI,KAIJr2E,EAJI,MAKJ8N,EALI,eAMJwoE,GACGN,GAAgB,GAErB,OACE,0BAAKr4F,UAAU,YACb,0BAAKA,UAAU,yBACZu4F,GAAY,0BAAKl/F,IAAKk/F,EAAUpoF,IAAI,KACrC,0BAAKnQ,UAAU,QACb,6BAAK4nB,GACL,4BAAI5mB,KAGR,0BAAKhB,UAAU,cACXm4F,GAAUA,EAAOryF,KAAK++D,GACtBkzB,GAAkBx4F,EAAKiuB,KAAMq3C,EAAK7zC,MAAO6zC,EAAKgzB,OAAQF,KAEtDS,GAAkBA,EAAetyF,KAAK++D,GACtCkzB,GAAkBx4F,EAAKiuB,KAAMq3C,EAAK7zC,MAAO6zC,EAAKgzB,OAAQF,UAEvCz+F,IAAfo/F,GACAP,GAAkBx4F,EAAKiuB,KAAMjuB,EAAK,wBAAyB+4F,EAAYX,GAAU,IAGrF,0BAAK33F,UAAU,gBACZw4F,GAAiBP,GAAmB,YAAaO,EAAej5F,EAAK,0BACrEk5F,GAAmBR,IAClBl2F,EAAAA,EAAAA,GAAe,WAAY02F,EAAgBr1C,eAC3Cq1C,EACAl5F,EAAK,4BAENm5F,GAAmBT,GAAmB,gBAAiBS,EAAiBn5F,EAAK,2BAC7E8iB,GAAQ41E,GAAmB,YAAa51E,EAAM9iB,EAAK,wBACnD4wB,GAAS8nE,GAAmB,aAAc9nE,EAAO5wB,EAAK,+BACtDo5F,GAAkBV,GAAmB,aAAcU,EAAgBp5F,EAAK,uCCjCjF,IAAexB,EAAAA,EAAAA,KAhCoB,IAAgC,IAA/B,MAAEuI,EAAF,MAASsgB,EAAT,SAAgBrgB,GAAe,EACjE,MAAMhH,GAAOC,EAAAA,EAAAA,KAEPo5F,GAAiB9/F,EAAAA,EAAAA,IAAyB,MAE1CkpB,GAAgB1iB,EAAAA,EAAAA,KAAa0C,IACjC,GAAc,cAAVA,EAAE+I,KAA0D,MAAnCzE,EAAMuyF,OAAOvyF,EAAM3I,OAAS,GAAY,CACnE,MAAMs5C,EAAW3wC,EAAMy9B,MAAM,EAAGz9B,EAAM3I,OAAS,GAC3Ci7F,EAAe3/F,UACjB2/F,EAAe3/F,QAAQqN,MAAQ2wC,MAGlC,CAAC3wC,IAEE2pC,GAAe3wC,EAAAA,EAAAA,KAAa0C,IAChCuE,EChCG,SAA0Bg8D,GAE/B,MAAMu2B,GADNv2B,EAAQA,EAAM10C,QAAQ,SAAU,IAAIkW,MAAM,EAAG,IACzBxF,MAAM,WAO1B,OANIu6D,MAAAA,GAAAA,EAAQ,IAAM19E,OAAO09E,EAAM,IAAM,KACnCA,EAAM,GAAK,MAETA,MAAAA,GAAAA,EAAQ,IAA0B,IAApBA,EAAM,GAAGn7F,SAAiBm7F,EAAM,KAChDA,EAAM,GAAK,IAENA,EAAQA,EAAMjtF,KAAK,KAAO,GDuBtBktF,CAAiB/2F,EAAEmI,OAAO7D,UAClC,CAACC,IAEJ,OACE,mBAACgd,GAAA,EAAD,CACEyN,MAAOzxB,EAAK,yBACZsG,IAAK+yF,EACLryF,SAAU0pC,EACVzsB,UAAWxB,EACX1b,MAAOA,EACPsgB,MAAOA,EACP8H,UAAU,UACVi9D,UAnCmB,O,0BEOzB,MAmDA,IAAe5tF,EAAAA,EAAAA,KA3CkB,IAAgC,IAA/B,MAAEuI,EAAF,MAASsgB,EAAT,SAAgBrgB,GAAe,EAC/D,MAAMhH,GAAOC,EAAAA,EAAAA,KAEPw5F,GAAgBlgG,EAAAA,EAAAA,IAAyB,MAE/Cw9F,GAAuB0C,GAEvB,MAAOC,EAAUC,IAAe73F,EAAAA,EAAAA,IAAiB6yF,GAASE,UAC1D/5F,EAAAA,EAAAA,KAAU,KACR,MAAM8+F,EAAc5E,GAAejuF,GACnC4yF,EAAYC,KAEX,IAEH,MAAMlpD,GAAe3wC,EAAAA,EAAAA,KAAa0C,IAChC,MAAMi1C,ED3BH,SAA0BsrB,GAE/B,MAAMu2B,GADNv2B,EAAQA,EAAM10C,QAAQ,SAAU,KACZ0Q,MAAM,WAC1B,OAAOu6D,EAAQA,EAAMjtF,KAAK,KAAO,GCwBdutF,CAAiBp3F,EAAEmI,OAAO7D,OACrC6yF,EAAc5E,GAAevyF,EAAEmI,OAAO7D,OAC5C4yF,EAAYC,GACZ5yF,EAAS0wC,GACL+hD,EAAc//F,UAChB+/F,EAAc//F,QAAQqN,MAAQ2wC,KAE/B,CAAC1wC,EAAUyyF,IAERK,EAqBR,SAAqBJ,GACnB,OAAQA,GACN,KAAK/E,GAASI,WACZ,OAAO,0BAAKj7F,IAAKigG,GAAoBnpF,IAAI,KAC3C,KAAK+jF,GAASG,KACZ,OAAO,0BAAKh7F,IAAKkgG,GAAcppF,IAAI,KACrC,QACE,QA5BaqpF,CAAYP,GAE7B,OACE,0BAAKj5F,UAAU,aACb,2BAAMA,UAAU,cAAcq5F,GAC9B,mBAAC91E,GAAA,EAAD,CACE1d,IAAKmzF,EACLhoE,MAAOzxB,EAAK,qBACZgH,SAAU0pC,EACV3pC,MAAOA,EACPooB,UAAU,UACV1uB,UAAWi5F,EAAW,iBAAmB,GACzCryE,MAAOA,EACP+kE,UA7CuB,SC2I/B,IAAe5tF,EAAAA,EAAAA,KAlImB,IAO5B,IAP6B,MACjCqnC,EADiC,mBAEjCq0D,EAFiC,mBAGjCC,EAHiC,YAIjCC,EAJiC,QAKjCC,EALiC,SAMjCprD,GACI,EAEJ,MAAMwoD,GAAmBl+F,EAAAA,EAAAA,IAA0B,OAEnDuB,EAAAA,EAAAA,KAAU,KACJ28F,EAAiB/9F,SAChB+9F,EAAiB/9F,QAAQqN,QAAU8+B,EAAM0wD,iBAC5CkB,EAAiB/9F,QAAQqN,MAAQ8+B,EAAM0wD,kBAExC,CAAC1wD,EAAM0wD,iBAEV,MAAM+D,GAAyBv6F,EAAAA,EAAAA,KAAagH,IAC1CkoC,EAAS,CAAErzB,KAAM,mBAAoBmqB,QAASh/B,MAC7C,CAACkoC,IAEEsrD,GAAyBx6F,EAAAA,EAAAA,KAAa0C,IAC1CwsC,EAAS,CAAErzB,KAAM,mBAAoBmqB,QAAStjC,EAAEmI,OAAO7D,MAAMyzF,kBAC5D,CAACvrD,IAEEwrD,GAAqB16F,EAAAA,EAAAA,KAAagH,IACtCkoC,EAAS,CAAErzB,KAAM,mBAAoBmqB,QAASh/B,MAC7C,CAACkoC,IAEEyrD,GAAkB36F,EAAAA,EAAAA,KAAa0C,IACnCwsC,EAAS,CAAErzB,KAAM,gBAAiBmqB,QAAStjC,EAAEmI,OAAO7D,UACnD,CAACkoC,IAEE6oD,GAAsB/3F,EAAAA,EAAAA,KAAa0C,IACvCwsC,EAAS,CAAErzB,KAAM,uBAAwBmqB,QAAStjC,EAAEmI,OAAO7D,UAC1D,CAACkoC,IAEE0rD,GAA8B56F,EAAAA,EAAAA,KAAa0C,IAC/CwsC,EAAS,CAAErzB,KAAM,mBAAoBmqB,QAAStjC,EAAEmI,OAAO7D,UACtD,CAACkoC,IAEE2rD,GAA8B76F,EAAAA,EAAAA,KAAa0C,IAC/CwsC,EAAS,CAAErzB,KAAM,wBAAyBmqB,QAAStjC,EAAEmI,OAAO7D,UAC3D,CAACkoC,IAEEjvC,GAAOC,EAAAA,EAAAA,MAEP,WAAE02F,EAAa,IAAO9wD,EAE5B,OACE,0BAAKplC,UAAU,eACb,+BACE,6BAAKT,EAAK,qBACV,mBAAC,GAAD,CACEgH,SAAUszF,EACVvzF,MAAO8+B,EAAMovD,WACb5tE,MAAOsvE,EAAW1B,aAElBkF,GACA,mBAACn2E,GAAA,EAAD,CACEyN,MAAOzxB,EAAK,mBACZgH,SAAUuzF,EACVxzF,MAAO8+B,EAAMuwD,WACbjnE,UAAU,OACV9H,MAAOsvE,EAAWP,aAGtB,8BAAS31F,UAAU,iBACjB,mBAAC,GAAD,CACEsG,MAAO8+B,EAAMwwD,OACbrvF,SAAUyzF,EACVpzE,MAAOsvE,EAAWN,SAEpB,mBAACryE,GAAA,EAAD,CACEyN,MAAOzxB,EAAK,yBACZgH,SAAU0zF,EACV3zF,MAAO8+B,EAAMywD,IACbnnE,UAAU,UACVi9D,UAAW,EACX/kE,MAAOsvE,EAAWL,OAGpB8D,GAAeC,EACf,6BAAKr6F,EAAK,+BACRrG,EACFygG,GACA,mBAAC,GAAD,CACE3oE,MAAOzxB,EAAK,0BACZkkB,YAAalkB,EAAK,0BAClBgH,SAAU8wF,EACV/wF,MAAO8+B,EAAM0wD,eACbU,SAAU17F,SAAQ,GAClB0B,GAAG,kBACHoqB,MAAOsvE,EAAWJ,eAClBjwF,IAAKmxF,GAGHznE,GAAAA,KAAgB,QAAC,KAAElN,GAAH,SACd,6BACE/b,MAAO+b,EACPriB,UAAU,eAETqiB,OAMTu3E,GACA,mBAACr2E,GAAA,EAAD,CACEyN,MAAOzxB,EAAK,iCACZgH,SAAU2zF,EACV5zF,MAAO8+B,EAAM2wD,WACbrnE,UAAU,OACV9H,MAAOsvE,EAAWH,aAGpB0D,GACA,mBAACxoE,GAAA,EAAD,CACED,MAAOzxB,EAAK,qCACZ2xB,QAASkU,EAAM6wD,gBACf1vF,SAAU4zF,SCzHtB,IAAep8F,EAAAA,EAAAA,KAhBsB,IAAa,IAAZ,IAAEoJ,GAAU,EAChD,MAAM5H,GAAOC,EAAAA,EAAAA,KAEb,OACE,0BAAKQ,UAAU,kBACb,6BACE3G,IAAK8N,EACLygB,MAAOroB,EAAK,kCACZ66F,MAAM,UACNC,QAAQ,mEACRr6F,UAAU,gCCOZs6F,GAAsB,IAAI1qD,IAAI,CAFX,SACD,gBAkVxB,IAAe7xC,EAAAA,EAAAA,KAAKC,EAAAA,EAAAA,KACjBC,IACC,MAAM,KACJid,EADI,gBAEJw8E,EAFI,UAGJ6C,EAHI,mBAIJd,EAJI,QAKJe,EALI,eAMJtC,EANI,eAOJuC,EAPI,aAQJC,EARI,gBASJC,EATI,MAUJ/zE,EAVI,kBAWJg0E,GACE38F,EAAO48F,QAELC,EAAkBhgG,QAAQ0/F,KAAaC,IAAmBH,GAAoBtoB,IAAIyoB,MAClF,mBAAEf,EAAF,YAAsBC,EAAtB,QAAmCC,GAAac,GAAgB,IAChE,cACJK,EADI,eAEJC,EAFI,eAGJC,EAHI,yBAIJC,EAJI,SAKJC,EALI,gBAMJC,EANI,gBAOJC,EAPI,SAQJ1D,EARI,OASJQ,GACGqC,GAAW,GAEhB,MAAO,CACLt/E,KAAAA,EACAw8E,gBAAAA,EACA6C,UAAAA,EACAd,mBAAAA,EACAgB,eAAAA,EACAE,gBAAAA,EACAI,cAAAA,EACAG,yBAAAA,EACAF,eAAAA,EACAC,eAAAA,EACAE,SAAAA,EACAC,gBAAAA,EACAC,gBAAAA,EACA1D,SAAAA,EACAQ,OAAAA,EACA2C,gBAAAA,EACA5C,eAAAA,EACAwB,mBAAAA,EACAC,YAAAA,EACAC,QAAAA,EACAhzE,MAAAA,EACAg0E,kBAAAA,KApDc58F,EAnT0C,IAwBxD,IAxByD,OAC7D4B,EAD6D,QAE7DoH,EAF6D,KAG7DkU,EAH6D,gBAI7Dw8E,EAJ6D,UAK7D6C,EAL6D,mBAM7Dd,EAN6D,cAO7DsB,EAP6D,yBAQ7DG,EAR6D,eAS7DF,EAT6D,eAU7DC,EAV6D,gBAW7DG,EAX6D,gBAY7DC,EAZ6D,SAa7D1D,EAb6D,gBAc7DgD,EAd6D,gBAe7DG,EAf6D,eAgB7D5C,EAhB6D,eAiB7DuC,EAjB6D,OAkB7DtC,EAlB6D,mBAmB7DuB,EAnB6D,YAoB7DC,EApB6D,QAqB7DC,EArB6D,kBAsB7DgB,EAtB6D,MAuB7Dh0E,GACI,EACJ,MAAM,sBACJ00E,EADI,gBAEJC,EAFI,eAGJC,EAHI,oBAIJC,EAJI,kBAKJC,IACE18F,EAAAA,EAAAA,OAEG28F,EAAcC,IXyId5uC,EAAAA,GAAAA,GAAWmpC,GAASrxD,KWxIpBrD,EAAWk9C,IAAgBt9E,EAAAA,EAAAA,KAAS,GACrC9B,GAAOC,EAAAA,EAAAA,KACPq8F,EAAkB3gF,IAAS4gF,EAAAA,GAAAA,gBAEjCzhG,EAAAA,EAAAA,KAAU,MACJ6gB,GAAQ0L,IACV+3D,GAAa,KAEd,CAACzjE,EAAM0L,KAEVvsB,EAAAA,EAAAA,KAAU,KACJusB,MAAAA,GAAAA,EAAO40D,OACTogB,EAAgB,CACdzgF,KAAM,gBACNmqB,QAAS,CACP,CAAC1e,EAAM40D,OAAQ50D,EAAMxpB,aAI1B,CAACwpB,EAAOg1E,KAEXvhG,EAAAA,EAAAA,KAAU,KACR,GAAIkgG,EAAW,CACb,MACEl4E,KAAM2W,EADF,MACY7I,EADZ,MACmB+U,EADnB,gBAC0BwzD,GAC5B6B,EACJqB,EAAgB,CACdzgF,KAAM,iBACNmqB,QAAS,CACPtM,SAAAA,EACA7I,MAAOA,GAA6B,MAApBA,EAAM0oE,OAAO,GACxB,IAAG1oE,IACJA,EACJ+U,MAAAA,KACIwzD,GAAmB,SAI5B,CAAC6B,EAAWqB,IAEf,MAAMG,GAAwBz8F,EAAAA,EAAAA,KAAY,KACxCo8F,MACC,CAACA,IAEEpD,GAAa54F,EAAAA,EAAAA,KAAQ,IACrBwb,IAAS4gF,EAAAA,GAAAA,SACJ,EAqSb,WAAoH,IAA7F3D,EAA6F,uDAA3E,GAAIT,EAAuE,uCAAxBsE,EAAwB,uCAClH,MAAM5D,EAAiBV,EACnBuE,GAAkBvE,EAAiBsE,GACnC,GACJ,IAAI7c,EAAQ,EACZ,MAAM+c,EAAc/D,EAAOz/D,OAAO0/D,GAAkB,IAIpD,OAHAjZ,EAAQ+c,EAAYt3C,QAAO,CAAC2gC,EAAK4W,IACxB5W,EAAM4W,EAAItE,QAChB1Y,GACIA,EA3SEid,CAAcjE,EAAQT,EAAiBiE,EAAajG,WAC1D,CAACx6E,EAAMygF,EAAajG,SAAUyC,EAAQT,IAEnCW,GAAe34F,EAAAA,EAAAA,KAAQ,KAC3B,GAAIwb,IAAS4gF,EAAAA,GAAAA,SAGb,OAuSJ,SAAyB12D,EAAkBsyD,EAA+Ce,GACxF,MACMD,EAAiB,GbjalB,SAA4BhE,GACjC,MAAMyE,EAAW1E,GAAeC,GAChC,OAAOL,GAAM8E,IAAuB,Ga8ZfoD,CAAmBj3D,EAAMovD,gBACJpvD,EAAMovD,WAAWzwD,OAAO,KAC5D20D,EAAkBtzD,EAAMiwD,YACzB,GAAEjwD,EAAMiwD,gBAAgBjwD,EAAMmwD,SAASnwD,EAAMowD,mBAC9Ct8F,GACE,MAAEi3B,EAAO6I,SAAU3W,GAAS+iB,EAC5B42D,EAAiBtE,EAAkB4E,GAAmB5E,EAAiBtyD,EAAMswD,eAAYx8F,EAE/F,MAAO,CACLs/F,cAAAA,EACAC,gBAAAA,EACAC,gBAAAA,EACAr2E,KAAAA,EACA8N,MAAAA,EACAwoE,eAPqBqD,MAAAA,OAAH,EAAGA,EAAgBp0E,OA/S9B20E,CAAgBZ,EAAcjE,EAAiB+C,GAAkB,MACvE,CAACv/E,EAAMygF,EAAcjE,EAAiB+C,IAiFnC+B,GAAkBl9F,EAAAA,EAAAA,KAAY,KAClC,MAAM,SAAE02F,GAAa2F,EACfc,EAsOV,SAAwBd,GACtB,MAAM,YACJtG,EADI,YAEJC,EAFI,KAGJC,EAHI,MAIJnwD,EAJI,YAKJowD,EALI,SAMJC,EACAz8D,SAAU3W,EAPN,MAQJ8N,EARI,MASJ+U,GACEy2D,EAWJ,MAAO,CACLt5E,KAAAA,EACA8N,MAAAA,EACA+U,MAAAA,EACAwzD,gBAbsB,CACtBrD,YAAAA,EACAC,YAAAA,EACAC,KAAAA,EACAnwD,MAAAA,EACAowD,YAAAA,EACAC,SAAAA,IAzPoBiH,CAAef,GACnCL,EAAsB,CAAEmB,YAAAA,EAAazG,SAAAA,MACpC,CAACsF,EAAuBK,IAErBgB,GAAkBr9F,EAAAA,EAAAA,KAAY,KAClC,MAAMs9F,EA+PV,SAAwBjB,GACtB,MAAM,WACJnH,EADI,WACQmB,EADR,OACoBC,EADpB,IAC4BC,EAD5B,eACiCC,EADjC,WACiDC,GACnD4F,GACGkB,EAAaC,GAAclH,EAAOt1D,MAAM,KAW/C,MAAO,CACLhG,KAXW,CACXk6D,WAAAA,EACAmB,WAAAA,EACAkH,YAAAA,EACAC,WAAAA,EACAjH,IAAAA,EACApwC,QAASqwC,EACTiH,IAAKhH,IA3QeiH,CAAerB,GACnCF,EAAoB,CAClBmB,YAAAA,MAED,CAACnB,EAAqBE,IAEnBsB,GAAW39F,EAAAA,EAAAA,KAAY,KAC3Bi8F,EAAgB,CACd2B,iBAAkBvB,EAAajG,SAC/BO,gBAAiB0F,EAAa1F,oBAE/B,CAACsF,EAAiBI,IAEfwB,GAAU79F,EAAAA,EAAAA,KAAa89F,IAC3B5B,EAAe,CAAEtgF,KAAMkiF,MACtB,CAAC5B,IAEE58B,GAAoBt/D,EAAAA,EAAAA,KAAY,KAEpC,OADAq/E,GAAa,GACLzjE,GACN,KAAK4gF,EAAAA,GAAAA,aACH,OAAOU,IACT,KAAKV,EAAAA,GAAAA,SACH,OAAOqB,EAAQrB,EAAAA,GAAAA,aACjB,KAAKA,EAAAA,GAAAA,YACH,OAAOa,IACT,KAAKb,EAAAA,GAAAA,SACH,OAAOmB,IACT,QACE,MAAO,UAGV,CAAC/hF,EAAMshF,EAAiBW,EAASR,EAAiBM,IAE/C35E,GAAc5jB,EAAAA,EAAAA,KAAQ,KAC1B,OAAQwb,GACN,KAAK4gF,EAAAA,GAAAA,aACH,OAAOv8F,EAAK,uBACd,KAAKu8F,EAAAA,GAAAA,SACH,OAAOv8F,EAAK,yBACd,KAAKu8F,EAAAA,GAAAA,YACH,OAAOv8F,EAAK,mBACd,KAAKu8F,EAAAA,GAAAA,SACH,OAAOv8F,EAAK,mBACd,KAAKu8F,EAAAA,GAAAA,eACH,OAAOv8F,EAAK,kCACd,QACE,MAAO,MAEV,CAAC2b,EAAM3b,IAEJ89F,GAAa39F,EAAAA,EAAAA,KAAQ,IACjBwb,IACD4gF,EAAAA,GAAAA,SACIv8F,EAAK,qBAAqBu4F,EAAAA,GAAAA,GAAeQ,EAAYX,EAAUp4F,EAAKiuB,OAEpEjuB,EAAK,SAEf,CAAC2b,EAAM3b,EAAMo4F,EAAUW,IAE1B,OAAIwC,EAEA,mBAACn3E,GAAA,EAAD,CACE3jB,UAAU,QACVJ,OAAQA,EACRoH,QAASA,GAET,qGAC6E,8BAD7E,iDAIA,mBAACnH,EAAA,EAAD,CACEwoB,QAAM,EACNpoB,QAAS+G,GAERzH,EAAK,QAOZ,mBAACokB,GAAA,EAAD,CACE3jB,UAAU,eACVJ,OAAQA,EACRoH,QAASA,GAET,0BAAKhH,UAAU,SAASkC,IAAK3C,EAAK4iB,MAAQ,WAAQjpB,GAChD,mBAAC2G,EAAA,EAAD,CACEG,UAAU,eACVD,MAAM,cACND,OAAK,EACLtF,KAAK,UACLyF,QAAS+G,EACT9G,UAAU,SAEV,wBAAGF,UAAU,gBAEf,6BAAKsjB,SAEGpqB,IAATgiB,EACC,mBAACT,EAAA,EAAD,CAAY4H,KAAK,QAAQD,UAAWlH,GAClC,0BAAKlb,UAAU,yBAtKvB,SAA4Bs9F,GAC1B,OAAQA,GACN,KAAKxB,EAAAA,GAAAA,aACH,OACE,mBAAC,GAAD,CACE12D,MAAOu2D,EACPntD,SAAUotD,EACV9E,YAAah8F,QAAQogG,GACrBvE,UAAW77F,QAAQmgG,GAAkBI,GACrCzE,UAAW97F,QAAQkgG,GAAkBI,GACrCvE,SAAU/7F,QAAQigG,KAGxB,KAAKe,EAAAA,GAAAA,SACH,OACE,mBAAC,GAAD,CACE12D,MAAOu2D,EACPntD,SAAUotD,EACVlE,gBAAiBA,GAAmB,GACpCC,SAAUA,IAGhB,KAAKmE,EAAAA,GAAAA,YACH,OACE,mBAAC,GAAD,CACE12D,MAAOu2D,EACPntD,SAAUotD,EACVnC,mBAAoB3+F,SAAS6/F,GAAmBlB,GAChDC,mBAAoBA,EACpBC,YAAaA,EACbC,QAASA,IAGf,KAAKkC,EAAAA,GAAAA,SACH,OACE,mBAAC,GAAD,CACE3D,OAAQA,EACRC,eAAgBuD,EAAajG,UAAYgC,EACrCuE,GAAkBvE,EAAiBiE,EAAajG,eAChDx8F,EACJo/F,WAAYA,EACZJ,eAAgBA,EAChBG,aAAcA,EACdV,SAAUA,IAGhB,KAAKmE,EAAAA,GAAAA,eACH,OACE,mBAAC,GAAD,CACE30F,IAAKyzF,IAGX,QACE,QAkHK2C,CAAmBriF,KAIxB,0BAAKlb,UAAU,iBACb,mBAACiQ,EAAA,EAAD,CAASlQ,MAAM,UAGlB87F,GACC,0BAAK77F,UAAU,UACb,mBAACH,EAAA,EAAD,CACEsb,KAAK,SACLlb,QAAS2+D,EACT13D,SAAUu6B,EACVA,UAAWA,GAEV47D,IAINz2E,IAAUA,EAAM40D,OAjNrB,WACE,GAAK50D,EAGL,OACE,mBAACjD,GAAA,EAAD,CACE3jB,UAAU,QACVJ,OAAQ9E,QAAQ8rB,GAChB5f,QAAS+0F,GAET,6BAAKn1E,EAAMkN,aAAe,SAC1B,4BAAIlN,EAAMkN,aAAe,SACzB,mBAACj0B,EAAA,EAAD,CACEwoB,QAAM,EACNpoB,QAASy7F,GAERn8F,EAAK,QAiMgBi+F,QA8DhC,SAASlB,GAAmB5E,EAAmC+F,GAC7D,OAAO/F,EAAgB5+D,MAAK,QAAC,GAAEt8B,GAAH,SAAYA,IAAOihG,KAGjD,SAASxB,GAAkBvE,EAAmCsE,GAC5D,MAAMjjC,EAASujC,GAAmB5E,EAAiBsE,GACnD,OAAOjjC,MAAAA,OAAP,EAAOA,EAAQo/B,OCrYjB,MA0DA,IAAep6F,EAAAA,EAAAA,KAAKC,EAAAA,EAAAA,KACjBC,IACC,MAAM,QAAEy/F,GAAYz/F,EAAO48F,SACrB,SACJlD,EADI,OAEJQ,EAFI,KAGJwF,EAHI,YAIJC,EAJI,iBAKJC,EALI,eAMJzF,EANI,eAOJO,EAPI,SAQJJ,EARI,KASJv3F,EATI,MAUJ4mB,GACG81E,GAAW,GAEhB,MAAO,CACL/F,SAAAA,EACAQ,OAAAA,EACAwF,KAAAA,EACAC,YAAAA,EACAC,iBAAAA,EACAzF,eAAAA,EACAO,eAAAA,EACAJ,SAAAA,EACAv3F,KAAAA,EACA4mB,MAAAA,KA1Bc5pB,EA1D4B,IAa1C,IAb2C,OAC/C4B,EAD+C,QAE/CoH,EAF+C,OAG/CmxF,EAH+C,eAI/CC,EAJ+C,YAK/CwF,EAL+C,SAM/CjG,EAN+C,KAO/CgG,EAP+C,SAQ/CpF,EAR+C,KAS/Cv3F,EAT+C,MAU/C4mB,EAV+C,iBAW/Ci2E,EAX+C,eAY/ClF,GACI,EACJ,MAAMp5F,GAAOC,EAAAA,EAAAA,KACP64F,GAAe34F,EAAAA,EAAAA,KAAQ,IA0E/B,SAAyB84F,EACvBmF,EAKAhF,GACA,IAAKgF,EACH,MAAO,CAAEnF,cAAAA,GAEX,MAAM,gBAAEE,GAAoBiF,EACtBG,EAAcpF,MAAAA,GAAAA,EAAiBrD,YAChC,GAAEqD,EAAgBrD,gBAAgBqD,EAAgBnD,SAASmD,EAAgBlD,mBAC5Et8F,GACE,MAAEi3B,EAAF,KAAS9N,GAASs7E,EACxB,MAAO,CACLnF,cAAAA,EACAC,gBAAiB,SACjBC,gBAAiBoF,EACjBz7E,KAAAA,EACA8N,MAAAA,EACAwoE,eAAAA,GA9FO4D,CAAgBsB,EAAkBF,EAAMhF,IAC9C,CAACgF,EAAMhF,EAAgBkF,IAE1B,OACE,mBAACl6E,GAAA,EAAD,CACE3jB,UAAU,oCACVJ,OAAQA,EACRoH,QAASA,GAET,8BACE,0BAAKhH,UAAU,SAASkC,IAAK3C,EAAK4iB,MAAQ,WAAQjpB,GAChD,mBAAC2G,EAAA,EAAD,CACEG,UAAU,eACVD,MAAM,cACND,OAAK,EACLtF,KAAK,UACLyF,QAAS+G,EACT9G,UAAU,SAEV,wBAAGF,UAAU,gBAEf,iCAAMT,EAAK,kBAAX,MAEF,0BAAKS,UAAU,iCACb,mBAAC,GAAD,CACEm4F,OAAQA,EACRC,eAAgBA,EAChBE,WAAYsF,EACZ1F,eAAgB,CACdK,SAAAA,EACAv3F,KAAAA,EACA4mB,MAAAA,GAEFywE,aAAcA,EACdV,SAAUA,Y,+FC/DtB,MAAM1uC,EAAyB9oD,EAAAA,GAA0B,IAAM,IAuG/D,GAAepC,EAAAA,EAAAA,KArGoB,IAW7B,IAX8B,UAClC0jC,GAAY,EADsB,kBAElConB,EAFkC,MAGlCjiC,EAHkC,KAIlCqe,EAJkC,YAKlCxhB,EAAc,WALoB,YAMlC6J,EAAc,OANoB,WAOlC86B,EAPkC,2BAQlCW,EARkC,cASlCg1C,EATkC,SAUlChzE,GACI,EAEJ,MAAMjQ,GAAWhiB,EAAAA,EAAAA,IAAyB,MACpCyG,GAAOC,EAAAA,EAAAA,MAENwlC,EAAUg5D,IAAe38F,EAAAA,EAAAA,IAAS,KAClC48F,EAAWC,IAAgB78F,EAAAA,EAAAA,KAAS,GAgD3C,OA9CAhH,EAAAA,EAAAA,KAAU,KACH2N,EAAAA,IACHpN,YAAW,KACTkgB,EAAS7hB,QAASw3B,UACjBw4B,KAEJ,KAEH5uD,EAAAA,EAAAA,KAAU,KACJusB,GACFjH,uBAAsB,KACpB7E,EAAS7hB,QAASw3B,QAClB3V,EAAS7hB,QAASklG,cAGrB,CAACv3E,IAgCF,2BAAMye,OAAO,GAAGta,SAblB,SAAsBrX,GACpBA,EAAM1I,iBAEFy2B,GAIAw8D,GACFlzE,EAASia,IAK6Bo5D,aAAa,OACnD,0BACEp+F,WAAW+B,EAAAA,EAAAA,GAAe,6BAA8BijC,GAAY,UAAWpe,GAAS,SACxF1kB,IAAK3C,EAAK4iB,MAAQ,WAAQjpB,GAE1B,4BACE2M,IAAKiV,EACL9a,UAAU,eACVmb,KAAM0tC,EAAoB,OAAS,WACnCrsD,GAAG,mBACH8J,MAAO0+B,GAAY,GACnBo5D,aAAa,mBACb73F,SA1CR,SAA0BvE,GACpB4kB,GACFwhC,IAGF,MAAM,OAAEj+C,GAAWnI,EACnBg8F,EAAY7zF,EAAO7D,OACnB43F,EAAa/zF,EAAO7D,MAAM3I,QAAU0gG,EAAAA,IAChCN,GACFA,EAAc5zF,EAAO7D,QAkCjBpE,IAAI,SAEN,gCAAQ0kB,GAASqe,GAAQxhB,GACzB,0BACEzjB,UAAU,kBACVC,QAnCR,WACE8oD,GAA4BF,IAmCtBt6B,KAAK,SACLC,SAAU,EACV5G,MAAM,8BAEN,wBAAG5nB,UAAW6oD,EAAoB,WAAa,sBAGlDo1C,GACC,mBAAC,IAAD,CAAQ9iF,KAAK,SAASjV,QAAM,EAACu7B,UAAWA,GACrCnU,Q,sFCxGX,MACMgxE,EAAuC,CAAC,EAAG,IAC3CC,EAAwC,CAAC,EAAG,IAC5CC,EAAsC,CAAC,GAAI,GAC3CC,EAAet+F,EAAAA,GAA0Bu+F,EAAAA,GAA2BC,EAAAA,GAsD1E,GAAe5gG,EAAAA,EAAAA,KApDsB,IAAkC,IAAjC,kBAAE8qD,EAAF,MAAqBD,GAAY,EACrE,MAAOg2C,EAAiBC,IAAsBx9F,EAAAA,EAAAA,OACvCy9F,EAAgBC,IAAqB19F,EAAAA,EAAAA,OACrC29F,EAAqBC,IAA0B59F,EAAAA,EAAAA,KAAS,IACxD69F,EAAaC,IAAkB99F,EAAAA,EAAAA,KAAS,IAE/ChH,EAAAA,EAAAA,KAAU,KACHukG,EAGHhkG,YAAW,IAAMukG,GAAe,IAhBP,MAczB/kE,EAAAA,EAAAA,GAAiB,eAAeC,KAAKwkE,KAItC,CAACD,KAEJvkG,EAAAA,EAAAA,KAAU,KACHykG,IACH1kE,EAAAA,EAAAA,GAAiB,cAAcC,KAAK0kE,KAErC,CAACD,IAEJ,MAAMM,GAAwB9/F,EAAAA,EAAAA,KAAY,IAAM2/F,GAAuB,IAAO,IAE9E,OACE,0BAAKziG,GAAG,SAASwD,UAAW4oD,EAAQ,MAAQ,KACxCo2C,GACA,0BAAKh/F,UAAU,mBAEhB4+F,GACC,mBAAC,IAAD,CACEpiG,GAAG,cACHhC,KAAMouD,EAAQy2C,EAAAA,GAAsBZ,EACpCz+F,UAAWk/F,EAAc,SAAW,QACpCxkE,cAAekkE,EACfU,YAAahB,EACbxjE,QAAM,EACNC,OAAQqkE,IAGXN,GACC,mBAAC,IAAD,CACEtiG,GAAG,aACHhC,KAAMouD,EAAQy2C,EAAAA,GAAsBZ,EACpCz+F,UAAWk/F,EAAc,QAAU,SACnCxkE,cAAeokE,EACfQ,YAAaz2C,EAAoB01C,EAAsBC,EACvD1jE,QAAM,S,kHCrDhB,MAAMykE,EAAiE,CACrEpkF,KAAM,OACNyf,QAAS,EACTk6D,OAAQ,OACR0K,QAAQ,EACRhlG,KAAM,CAAElB,MAAO,KAAMK,OAAQ,OAI/B,IAAI8lG,EACAC,EAWAC,EAwCJ,MAwDA,GAAe5hG,EAAAA,EAAAA,KAxDiB,IAA2C,IAA1C,KAAE4qE,EAAF,SAAQpiE,EAAR,QAAkBS,GAAwB,EACzE,MAAO44F,EAAgBC,IAAqBx+F,EAAAA,EAAAA,KAAS,IAErDhH,EAAAA,EAAAA,KAAU,KACHsuE,IAIAi3B,EA9CTzkD,eAA2B2kD,GACzB,IACE,MAAMC,EAAgB5kG,SAAS8kB,eAAe,eAC9C,IAAK8/E,EACH,OAGF,MAAM,YAAErkD,EAAF,aAAe9+C,GAAiBmjG,EAEtCJ,EAAU,IAAIF,EAAQM,EAAe,CACnCC,YAAY,EACZC,SAAU,CACR3mG,MAAOoiD,EACP/hD,OAAQiD,GAEVsjG,SAAU,CACR5mG,MAAOoiD,EAAc,GACrB/hD,OAAQiD,EAAe,GACvBue,KAAM,YAIV,MAAMviB,QAAgBunG,EAAAA,EAAAA,IAAcL,SAC9BH,EAAQS,KAAK,CAAEj5F,IAAKvO,IAC1B,MAAOynG,GACHC,EAAAA,IAEFC,QAAQ35E,MAAMy5E,IAyBhBG,CAAY73B,GA/DhBxtB,iBAME,OALKukD,IACHA,EAAiB,qDACjBD,SAAiBC,GAAgB9uB,SAG5B8uB,EAoDHe,GAAgBpmE,MAAK,IAAMwlE,GAAkB,QAM9C,CAACl3B,EAAMi3B,IAEV,MAAMrgG,GAAOC,EAAAA,EAAAA,KAEPkhG,GAAkBphG,EAAAA,EAAAA,KAAY67C,UAClC,IAAKwkD,EACH,OAGF,MAAM96C,QAA8B86C,EAAQ96C,OAAO06C,GAC7CoB,EAA+B,iBAAX97C,EAAsBA,GAAS+7C,EAAAA,EAAAA,IAAW/7C,EAAQ,cAE5Et+C,EAASo6F,KACR,CAACp6F,IAEJ,OACE,mBAACod,EAAA,EAAD,CACE/jB,OAAQ9E,QAAQ6tE,GAChB3hE,QAASA,EACT4gB,MAAM,qBACN5nB,UAAU,YACV6+D,gBAAc,GAEb+gC,EACC,0BAAKpjG,GAAG,gBAER,mBAACioB,EAAA,EAAD,MAEF,mBAAC5kB,EAAA,EAAD,CACEG,UAAU,iBACVF,OAAK,EACLC,MAAM,UACNE,QAASygG,EACTxgG,UAAWX,EAAK,cAEhB,wBAAGS,UAAU,oBC5CrB,GAAejC,EAAAA,EAAAA,KAhEsB,IAK/B,IALgC,MACpC6pB,EAAQ,8BAD4B,SAEpC1gB,EAFoC,qBAGpC0iC,EAHoC,SAIpCrjC,GACI,EACJ,MAAOs6F,EAAcC,IAAmBz/F,EAAAA,EAAAA,OACjC0/F,EAAgBC,IAAqB3/F,EAAAA,EAAAA,IAA6BuoC,IAEzEvvC,EAAAA,EAAAA,KAAU,KACR2mG,EAAkBp3D,KACjB,CAACA,IAaJ,MAAMq3D,GAAmB3hG,EAAAA,EAAAA,KAAaqhG,IACpCG,OAAgB5nG,GAChBqN,EAASo6F,GAELI,GACFG,IAAIC,gBAAgBJ,GAEtBC,EAAkBE,IAAIE,gBAAgBT,MACrC,CAACI,EAAgBx6F,IAEd86F,GAAmB/hG,EAAAA,EAAAA,KAAY,KACnCwhG,OAAgB5nG,KACf,IAEGooG,GAAiBv/F,EAAAA,EAAAA,GACrBg/F,GAAkB,SAClB75F,GAAY,YAGd,OACE,0BAAKlH,UAAU,kBACb,4BACEA,UAAWshG,EACX/yE,KAAK,SACLC,SAAU,EACV5G,MAAOA,GAEP,4BACEzM,KAAK,OACL5U,SAxCR,SAA0BmN,GACxB,MAAMvJ,EAASuJ,EAAMvJ,OAEhBA,GAAWA,EAAOqwC,OAAUrwC,EAAOqwC,MAAM,KAI9CsmD,EAAgB32F,EAAOqwC,MAAM,IAC7BrwC,EAAO7D,MAAQ,KAiCTi7F,OAAO,0BAET,wBAAGvhG,UAAU,oBACZ+gG,GAAkB,0BAAK1nG,IAAK0nG,EAAgB5wF,IAAI,YAEnD,mBAAC,EAAD,CAAWw4D,KAAMk4B,EAAc75F,QAASq6F,EAAkB96F,SAAU06F,S","sources":["webpack://telegram-t/./src/hooks/useBlur.ts","webpack://telegram-t/./src/hooks/useBlurSync.ts","webpack://telegram-t/./src/components/mediaViewer/helpers/ghostAnimation.ts","webpack://telegram-t/./src/components/mediaViewer/MediaViewerActions.tsx","webpack://telegram-t/./src/components/mediaViewer/MediaViewerFooter.tsx","webpack://telegram-t/./src/hooks/useFullscreen.ts","webpack://telegram-t/./src/components/mediaViewer/helpers/formatFileSize.ts","webpack://telegram-t/./src/components/mediaViewer/VideoPlayerControls.tsx","webpack://telegram-t/./src/components/mediaViewer/VideoPlayer.tsx","webpack://telegram-t/./src/components/mediaViewer/MediaViewerContent.tsx","webpack://telegram-t/./src/components/mediaViewer/MediaViewerSlides.tsx","webpack://telegram-t/./src/components/mediaViewer/PanZoom.tsx","webpack://telegram-t/./src/components/mediaViewer/SenderInfo.tsx","webpack://telegram-t/./src/components/mediaViewer/SlideTransition.tsx","webpack://telegram-t/./src/components/mediaViewer/ZoomControls.tsx","webpack://telegram-t/./src/components/mediaViewer/MediaViewer.tsx","webpack://telegram-t/./src/components/common/ChatOrUserPicker.tsx","webpack://telegram-t/./src/components/main/ForwardPicker.tsx","webpack://telegram-t/./src/components/main/Dialogs.tsx","webpack://telegram-t/./src/components/main/Notifications.tsx","webpack://telegram-t/./src/components/main/SafeLinkModal.tsx","webpack://telegram-t/./src/components/common/CalendarModal.tsx","webpack://telegram-t/./src/components/main/HistoryCalendar.tsx","webpack://telegram-t/./src/components/main/NewContactModal.tsx","webpack://telegram-t/./src/components/common/DeleteMessageModal.tsx","webpack://telegram-t/./src/components/common/PinMessageModal.tsx","webpack://telegram-t/./src/components/common/UnpinAllMessagesModal.tsx","webpack://telegram-t/./src/components/middle/hooks/useCopySelectedMessages.ts","webpack://telegram-t/./src/components/middle/DeleteSelectedMessageModal.tsx","webpack://telegram-t/./src/components/common/ReportMessageModal.tsx","webpack://telegram-t/./src/components/middle/MessageSelectToolbar.tsx","webpack://telegram-t/./src/components/common/SeenByModal.tsx","webpack://telegram-t/./src/components/middle/ReactorListModal.tsx","webpack://telegram-t/./src/components/middle/EmojiInteractionAnimation.tsx","webpack://telegram-t/./src/hooks/useSelectWithEnter.ts","webpack://telegram-t/./src/components/left/search/LeftSearchResultChat.tsx","webpack://telegram-t/./src/components/left/search/RecentContacts.tsx","webpack://telegram-t/./src/components/left/search/ChatMessage.tsx","webpack://telegram-t/./src/components/left/search/DateSuggest.tsx","webpack://telegram-t/./src/components/left/search/ChatResults.tsx","webpack://telegram-t/./src/components/left/search/ChatMessageResults.tsx","webpack://telegram-t/./src/components/left/search/helpers/createMapStateToProps.ts","webpack://telegram-t/./src/components/left/search/MediaResults.tsx","webpack://telegram-t/./src/components/left/search/LinkResults.tsx","webpack://telegram-t/./src/components/left/search/FileResults.tsx","webpack://telegram-t/./src/components/left/search/AudioResults.tsx","webpack://telegram-t/./src/components/left/search/LeftSearch.tsx","webpack://telegram-t/./src/hooks/reducers/useTwoFaReducer.ts","webpack://telegram-t/./src/components/left/settings/SettingsHeader.tsx","webpack://telegram-t/./src/components/left/settings/SettingsMain.tsx","webpack://telegram-t/./src/components/common/UsernameInput.tsx","webpack://telegram-t/./src/components/left/settings/SettingsEditProfile.tsx","webpack://telegram-t/./src/components/left/settings/SettingsDataStorage.tsx","webpack://telegram-t/./src/components/left/settings/folders/SettingsFoldersMain.tsx","webpack://telegram-t/./src/components/ui/ShowMoreButton.tsx","webpack://telegram-t/./src/components/left/settings/folders/SettingsFoldersEdit.tsx","webpack://telegram-t/./src/components/left/settings/folders/SettingsFoldersChatsPicker.tsx","webpack://telegram-t/./src/components/left/settings/folders/SettingsFoldersChatFilters.tsx","webpack://telegram-t/./src/components/left/settings/folders/SettingsFolders.tsx","webpack://telegram-t/./src/components/middle/composer/StickerSetCoverAnimated.tsx","webpack://telegram-t/./src/components/middle/composer/StickerSetCover.tsx","webpack://telegram-t/./src/components/left/settings/SettingsStickerSet.tsx","webpack://telegram-t/./src/components/left/settings/SettingsGeneral.tsx","webpack://telegram-t/./src/util/colors.ts","webpack://telegram-t/./src/components/left/settings/WallpaperTile.tsx","webpack://telegram-t/./src/components/left/settings/SettingsGeneralBackground.tsx","webpack://telegram-t/./src/components/left/settings/SettingsGeneralBackgroundColor.tsx","webpack://telegram-t/./src/components/left/settings/SettingsNotifications.tsx","webpack://telegram-t/./src/components/left/settings/SettingsPrivacy.tsx","webpack://telegram-t/./src/components/left/settings/SettingsLanguage.tsx","webpack://telegram-t/./src/components/left/settings/helpers/privacy.ts","webpack://telegram-t/./src/components/left/settings/SettingsPrivacyVisibility.tsx","webpack://telegram-t/./src/components/left/settings/helpers/getSessionIcon.ts","webpack://telegram-t/./src/components/left/settings/SettingsActiveSessions.tsx","webpack://telegram-t/./src/components/left/settings/BlockUserModal.tsx","webpack://telegram-t/./src/components/left/settings/SettingsPrivacyBlockedUsers.tsx","webpack://telegram-t/./src/components/left/settings/twoFa/SettingsTwoFaEnabled.tsx","webpack://telegram-t/./src/components/left/settings/twoFa/SettingsTwoFaPassword.tsx","webpack://telegram-t/./src/components/left/settings/twoFa/SettingsTwoFaStart.tsx","webpack://telegram-t/./src/components/left/settings/twoFa/SettingsTwoFaSkippableForm.tsx","webpack://telegram-t/./src/components/left/settings/twoFa/SettingsTwoFaCongratulations.tsx","webpack://telegram-t/./src/components/left/settings/twoFa/SettingsTwoFaEmailCode.tsx","webpack://telegram-t/./src/components/left/settings/twoFa/SettingsTwoFa.tsx","webpack://telegram-t/./src/components/left/settings/SettingsPrivacyVisibilityExceptionList.tsx","webpack://telegram-t/./src/components/left/settings/SettingsQuickReaction.tsx","webpack://telegram-t/./src/components/left/settings/Settings.tsx","webpack://telegram-t/./src/components/left/main/ContactList.tsx","webpack://telegram-t/./src/components/left/newChat/NewChatStep1.tsx","webpack://telegram-t/./src/components/left/newChat/NewChatStep2.tsx","webpack://telegram-t/./src/components/left/newChat/NewChat.tsx","webpack://telegram-t/./src/components/left/ArchivedChats.tsx","webpack://telegram-t/./src/components/left/ChatFolderModal.tsx","webpack://telegram-t/./src/components/middle/message/helpers/copyOptions.ts","webpack://telegram-t/./src/util/scrollLock.ts","webpack://telegram-t/./src/components/middle/message/ReactionSelectorReaction.tsx","webpack://telegram-t/./src/components/middle/message/ReactionSelector.tsx","webpack://telegram-t/./src/components/middle/message/MessageContextMenu.tsx","webpack://telegram-t/./src/components/middle/message/ContextMenuContainer.tsx","webpack://telegram-t/./src/components/common/StickerSetModal.tsx","webpack://telegram-t/./src/components/middle/HeaderMenuContainer.tsx","webpack://telegram-t/./src/components/middle/MobileSearch.tsx","webpack://telegram-t/./src/util/findInViewport.ts","webpack://telegram-t/./src/util/isFullyVisible.ts","webpack://telegram-t/./src/util/setTooltipItemVisible.ts","webpack://telegram-t/./src/components/middle/composer/hooks/useKeyboardNavigation.ts","webpack://telegram-t/./src/components/middle/composer/MentionTooltip.tsx","webpack://telegram-t/./src/components/middle/composer/AttachmentModal.tsx","webpack://telegram-t/./src/components/middle/composer/PollModal.tsx","webpack://telegram-t/./src/components/middle/composer/EmojiButton.tsx","webpack://telegram-t/./src/components/middle/composer/EmojiCategory.tsx","webpack://telegram-t/./src/components/middle/composer/EmojiPicker.tsx","webpack://telegram-t/./src/components/middle/composer/StickerSet.tsx","webpack://telegram-t/./src/components/middle/composer/StickerPicker.tsx","webpack://telegram-t/./src/components/common/GifButton.tsx","webpack://telegram-t/./src/components/middle/composer/GifPicker.tsx","webpack://telegram-t/./src/components/middle/composer/SymbolMenuFooter.tsx","webpack://telegram-t/./src/components/middle/composer/SymbolMenu.tsx","webpack://telegram-t/./src/components/middle/composer/BotCommand.tsx","webpack://telegram-t/./src/components/middle/composer/BotCommandTooltip.tsx","webpack://telegram-t/./src/components/middle/composer/BotCommandMenu.tsx","webpack://telegram-t/./src/components/middle/composer/StickerTooltip.tsx","webpack://telegram-t/./src/components/middle/composer/CustomSendMenu.tsx","webpack://telegram-t/./src/components/middle/composer/EmojiTooltip.tsx","webpack://telegram-t/./src/components/middle/composer/inlineResults/BaseResult.tsx","webpack://telegram-t/./src/components/middle/composer/inlineResults/MediaResult.tsx","webpack://telegram-t/./src/components/middle/composer/inlineResults/ArticleResult.tsx","webpack://telegram-t/./src/components/middle/composer/inlineResults/GifResult.tsx","webpack://telegram-t/./src/components/middle/composer/inlineResults/StickerResult.tsx","webpack://telegram-t/./src/components/middle/composer/InlineBotTooltip.tsx","webpack://telegram-t/./src/components/middle/composer/SendAsMenu.tsx","webpack://telegram-t/./src/components/right/RightSearch.tsx","webpack://telegram-t/./src/components/right/StickerSetResult.tsx","webpack://telegram-t/./src/components/right/StickerSearch.tsx","webpack://telegram-t/./src/components/right/GifSearch.tsx","webpack://telegram-t/./src/components/right/statistics/StatisticsOverview.tsx","webpack://telegram-t/./src/components/right/statistics/StatisticsRecentMessage.tsx","webpack://telegram-t/./src/components/right/statistics/Statistics.tsx","webpack://telegram-t/./src/components/right/PollAnswerResults.tsx","webpack://telegram-t/./src/components/right/PollResults.tsx","webpack://telegram-t/./src/components/right/management/ManageUser.tsx","webpack://telegram-t/./src/components/right/management/ManageGroup.tsx","webpack://telegram-t/./src/components/right/management/ManageGroupPermissions.tsx","webpack://telegram-t/./src/components/right/management/RemoveGroupUserModal.tsx","webpack://telegram-t/./src/components/right/management/ManageChatRemovedUsers.tsx","webpack://telegram-t/./src/components/right/management/ManageChannel.tsx","webpack://telegram-t/./src/components/right/management/ManageChatPrivacyType.tsx","webpack://telegram-t/./src/components/right/management/ManageDiscussion.tsx","webpack://telegram-t/./src/components/right/management/ManageGroupUserPermissions.tsx","webpack://telegram-t/./src/components/right/management/ManageChatAdministrators.tsx","webpack://telegram-t/./src/components/right/management/ManageGroupRecentActions.tsx","webpack://telegram-t/./src/components/right/management/ManageGroupAdminRights.tsx","webpack://telegram-t/./src/components/right/management/ManageGroupMembers.tsx","webpack://telegram-t/./src/components/right/management/ManageGroupUserPermissionsCreate.tsx","webpack://telegram-t/./src/components/right/management/ManageInvites.tsx","webpack://telegram-t/./src/components/right/management/ManageInvite.tsx","webpack://telegram-t/./src/components/right/management/ManageReactions.tsx","webpack://telegram-t/./src/components/right/management/ManageInviteInfo.tsx","webpack://telegram-t/./src/components/right/management/JoinRequest.tsx","webpack://telegram-t/./src/components/right/management/ManageJoinRequests.tsx","webpack://telegram-t/./src/components/right/management/Management.tsx","webpack://telegram-t/./src/components/common/helpers/detectCardType.ts","webpack://telegram-t/./src/util/countries.ts","webpack://telegram-t/./src/hooks/reducers/usePaymentReducer.ts","webpack://telegram-t/./src/hooks/useFocusAfterAnimation.tsx","webpack://telegram-t/./src/components/ui/Select.tsx","webpack://telegram-t/./src/components/payment/ShippingInfo.tsx","webpack://telegram-t/./src/components/payment/Shipping.tsx","webpack://telegram-t/./src/components/payment/Checkout.tsx","webpack://telegram-t/./src/components/payment/ExpiryInput.tsx","webpack://telegram-t/./src/components/middle/helpers/inputFormatters.ts","webpack://telegram-t/./src/components/payment/CardInput.tsx","webpack://telegram-t/./src/components/payment/PaymentInfo.tsx","webpack://telegram-t/./src/components/payment/ConfirmPayment.tsx","webpack://telegram-t/./src/components/payment/PaymentModal.tsx","webpack://telegram-t/./src/components/payment/ReceiptModal.tsx","webpack://telegram-t/./src/components/common/PasswordForm.tsx","webpack://telegram-t/./src/components/common/PasswordMonkey.tsx","webpack://telegram-t/./src/components/ui/CropModal.tsx","webpack://telegram-t/./src/components/ui/AvatarEditable.tsx"],"sourcesContent":["import { useEffect, useRef } from '../lib/teact/teact';\n\nimport fastBlur from '../lib/fastBlur';\nimport { imgToCanvas } from '../util/files';\nimport useForceUpdate from './useForceUpdate';\n\nconst RADIUS = 2;\nconst ITERATIONS = 2;\nconst MAX_CACHE_SIZE = 1000;\n\nconst cache = new Map();\n\nexport default function useBlur(dataUri?: string, isDisabled = false, delay?: number) {\n const blurredRef = useRef(dataUri ? cache.get(dataUri) : undefined);\n const timeoutRef = useRef();\n const forceUpdate = useForceUpdate();\n\n if (timeoutRef.current && isDisabled) {\n clearTimeout(timeoutRef.current);\n timeoutRef.current = undefined;\n }\n\n useEffect(() => {\n if (!dataUri || blurredRef.current || isDisabled) {\n return;\n }\n\n const img = new Image();\n\n img.onload = () => {\n const canvas = imgToCanvas(img);\n fastBlur(canvas.getContext('2d'), 0, 0, canvas.width, canvas.height, RADIUS, ITERATIONS);\n const blurredDataUri = canvas.toDataURL();\n\n blurredRef.current = blurredDataUri;\n forceUpdate();\n\n if (cache.size >= MAX_CACHE_SIZE) {\n cache.clear();\n }\n cache.set(dataUri, blurredDataUri);\n };\n\n if (delay) {\n timeoutRef.current = window.setTimeout(() => {\n img.src = dataUri;\n }, delay);\n } else {\n img.src = dataUri;\n }\n }, [dataUri, delay, forceUpdate, isDisabled]);\n\n return blurredRef.current;\n}\n","import { useRef } from '../lib/teact/teact';\n\nimport fastBlur from '../lib/fastBlur';\nimport useOnChange from './useOnChange';\nimport useBlur from './useBlur';\nimport { imgToCanvas } from '../util/files';\n\nconst RADIUS = 2;\nconst ITERATIONS = 2;\n\nexport default function useBlurSync(dataUri: string | false | undefined) {\n const blurredRef = useRef();\n\n let isChanged = false;\n\n useOnChange(() => {\n isChanged = true;\n\n blurredRef.current = undefined;\n\n if (!dataUri) {\n return;\n }\n\n const img = new Image();\n img.src = dataUri;\n if (!img.width) {\n return;\n }\n\n const canvas = imgToCanvas(img);\n fastBlur(canvas.getContext('2d'), 0, 0, canvas.width, canvas.height, RADIUS, ITERATIONS);\n\n blurredRef.current = canvas.toDataURL();\n }, [dataUri]);\n\n // Sometimes `Image` do not manage to load synchronously,\n // so we fall back the non-blurred variant and prepare the async one at least for the next time\n const blurredAsync = useBlur(dataUri || undefined, Boolean(blurredRef.current));\n\n return blurredRef.current || (!isChanged && blurredAsync) || dataUri || undefined;\n}\n","import { ApiMessage, ApiDimensions } from '../../../api/types';\n\nimport { MediaViewerOrigin } from '../../../types';\n\nimport { ANIMATION_END_DELAY } from '../../../config';\nimport {\n calculateDimensions,\n getMediaViewerAvailableDimensions,\n MEDIA_VIEWER_MEDIA_QUERY,\n REM,\n} from '../../common/helpers/mediaDimensions';\nimport windowSize from '../../../util/windowSize';\nimport stopEvent from '../../../util/stopEvent';\nimport { IS_TOUCH_ENV } from '../../../util/environment';\nimport { getMessageHtmlId } from '../../../global/helpers';\n\nconst ANIMATION_DURATION = 200;\n\nexport function animateOpening(\n hasFooter: boolean,\n origin: MediaViewerOrigin,\n bestImageData: string,\n dimensions: ApiDimensions,\n isVideo: boolean,\n message?: ApiMessage,\n) {\n const { mediaEl: fromImage } = getNodes(origin, message);\n if (!fromImage) {\n return;\n }\n\n const { width: windowWidth } = windowSize.get();\n const {\n width: availableWidth, height: availableHeight,\n } = getMediaViewerAvailableDimensions(hasFooter, isVideo);\n const { width: toWidth, height: toHeight } = calculateDimensions(\n availableWidth, availableHeight, dimensions.width, dimensions.height,\n );\n const toLeft = (windowWidth - toWidth) / 2;\n const toTop = getTopOffset(hasFooter) + (availableHeight - toHeight) / 2;\n\n let {\n top: fromTop, left: fromLeft, width: fromWidth, height: fromHeight,\n } = fromImage.getBoundingClientRect();\n\n if ([\n MediaViewerOrigin.SharedMedia,\n MediaViewerOrigin.Album,\n MediaViewerOrigin.ScheduledAlbum,\n MediaViewerOrigin.SearchResult,\n ].includes(origin)) {\n const uncovered = uncover(toWidth, toHeight, fromTop, fromLeft, fromWidth, fromHeight);\n fromTop = uncovered.top;\n fromLeft = uncovered.left;\n fromWidth = uncovered.width;\n fromHeight = uncovered.height;\n }\n\n const fromTranslateX = (fromLeft + fromWidth / 2) - (toLeft + toWidth / 2);\n const fromTranslateY = (fromTop + fromHeight / 2) - (toTop + toHeight / 2);\n const fromScaleX = fromWidth / toWidth;\n const fromScaleY = fromHeight / toHeight;\n\n const ghost = createGhost(bestImageData || fromImage);\n applyStyles(ghost, {\n top: `${toTop}px`,\n left: `${toLeft}px`,\n width: `${toWidth}px`,\n height: `${toHeight}px`,\n transform: `translate3d(${fromTranslateX}px, ${fromTranslateY}px, 0) scale(${fromScaleX}, ${fromScaleY})`,\n });\n applyShape(ghost, origin);\n\n document.body.classList.add('ghost-animating');\n\n requestAnimationFrame(() => {\n document.body.appendChild(ghost);\n\n requestAnimationFrame(() => {\n ghost.style.transform = '';\n clearShape(ghost);\n\n setTimeout(() => {\n requestAnimationFrame(() => {\n if (document.body.contains(ghost)) {\n document.body.removeChild(ghost);\n }\n document.body.classList.remove('ghost-animating');\n });\n }, ANIMATION_DURATION + ANIMATION_END_DELAY);\n });\n });\n}\n\nexport function animateClosing(origin: MediaViewerOrigin, bestImageData: string, message?: ApiMessage) {\n const { container, mediaEl: toImage } = getNodes(origin, message);\n if (!toImage) {\n return;\n }\n\n const fromImage = document.getElementById('MediaViewer')!.querySelector(\n '.MediaViewerSlide--active img, .MediaViewerSlide--active video',\n );\n if (!fromImage || !toImage) {\n return;\n }\n\n const {\n top: fromTop, left: fromLeft, width: fromWidth, height: fromHeight,\n } = fromImage.getBoundingClientRect();\n const {\n top: targetTop, left: toLeft, width: toWidth, height: toHeight,\n } = toImage.getBoundingClientRect();\n\n let toTop = targetTop;\n if (!isElementInViewport(container)) {\n const { height: windowHeight } = windowSize.get();\n toTop = targetTop < fromTop ? -toHeight : windowHeight;\n }\n\n const fromTranslateX = (fromLeft + fromWidth / 2) - (toLeft + toWidth / 2);\n const fromTranslateY = (fromTop + fromHeight / 2) - (toTop + toHeight / 2);\n let fromScaleX = fromWidth / toWidth;\n let fromScaleY = fromHeight / toHeight;\n\n const shouldFadeOut = (\n [MediaViewerOrigin.Inline, MediaViewerOrigin.ScheduledInline].includes(origin)\n && !isMessageImageFullyVisible(container, toImage)\n ) || (\n [MediaViewerOrigin.Album, MediaViewerOrigin.ScheduledAlbum].includes(origin)\n && !isMessageImageFullyVisible(container, toImage)\n );\n\n if ([\n MediaViewerOrigin.SharedMedia,\n MediaViewerOrigin.Album,\n MediaViewerOrigin.ScheduledAlbum,\n MediaViewerOrigin.SearchResult,\n ].includes(origin)) {\n if (fromScaleX > fromScaleY) {\n fromScaleX = fromScaleY;\n } else if (fromScaleY > fromScaleX) {\n fromScaleY = fromScaleX;\n }\n }\n\n const existingGhost = document.getElementsByClassName('ghost')[0] as HTMLDivElement;\n\n const ghost = existingGhost || createGhost(bestImageData || toImage, origin);\n if (!existingGhost) {\n applyStyles(ghost, {\n top: `${toTop}px`,\n left: `${toLeft}px`,\n width: `${toWidth}px`,\n height: `${toHeight}px`,\n transform: `translate3d(${fromTranslateX}px, ${fromTranslateY}px, 0) scale(${fromScaleX}, ${fromScaleY})`,\n });\n }\n\n requestAnimationFrame(() => {\n if (existingGhost) {\n const {\n top,\n left,\n width,\n height,\n } = existingGhost.getBoundingClientRect();\n const scaleX = width / toWidth;\n const scaleY = height / toHeight;\n\n applyStyles(ghost, {\n transition: 'none',\n top: `${toTop}px`,\n left: `${toLeft}px`,\n transformOrigin: 'top left',\n transform: `translate3d(${left - toLeft}px, ${top - toTop}px, 0) scale(${scaleX}, ${scaleY})`,\n width: `${toWidth}px`,\n height: `${toHeight}px`,\n });\n }\n document.body.classList.add('ghost-animating');\n if (!existingGhost) document.body.appendChild(ghost);\n\n requestAnimationFrame(() => {\n if (existingGhost) {\n existingGhost.style.transition = '';\n }\n\n ghost.style.transform = '';\n\n if (shouldFadeOut) {\n ghost.style.opacity = '0';\n }\n\n applyShape(ghost, origin);\n\n setTimeout(() => {\n requestAnimationFrame(() => {\n if (document.body.contains(ghost)) {\n document.body.removeChild(ghost);\n }\n document.body.classList.remove('ghost-animating');\n });\n }, ANIMATION_DURATION + ANIMATION_END_DELAY);\n });\n });\n}\n\nfunction createGhost(source: string | HTMLImageElement | HTMLVideoElement, origin?: MediaViewerOrigin) {\n const ghost = document.createElement('div');\n ghost.classList.add('ghost');\n\n const img = new Image();\n img.draggable = false;\n img.oncontextmenu = stopEvent;\n\n if (typeof source === 'string') {\n img.src = source;\n } else if (source instanceof HTMLVideoElement) {\n img.src = source.poster;\n } else {\n img.src = source.src;\n }\n\n ghost.appendChild(img);\n\n if (origin === MediaViewerOrigin.ProfileAvatar || origin === MediaViewerOrigin.SettingsAvatar) {\n ghost.classList.add('ProfileInfo');\n if (origin === MediaViewerOrigin.SettingsAvatar) {\n ghost.classList.add('self');\n }\n const profileInfo = document.querySelector(\n origin === MediaViewerOrigin.ProfileAvatar\n ? '#RightColumn .ProfileInfo .info'\n : '#Settings .ProfileInfo .info',\n );\n if (profileInfo) {\n ghost.appendChild(profileInfo.cloneNode(true));\n }\n }\n\n return ghost;\n}\n\nfunction uncover(realWidth: number, realHeight: number, top: number, left: number, width: number, height: number) {\n if (realWidth === realHeight) {\n const size = Math.max(width, height) * (realWidth / realHeight);\n left -= (size - width) / 2;\n top -= (size - height) / 2;\n width = size;\n height = size;\n } else if (realWidth > realHeight) {\n const srcWidth = width;\n width = height * (realWidth / realHeight);\n left -= (width - srcWidth) / 2;\n } else if (realHeight > realWidth) {\n const srcHeight = height;\n height = width * (realHeight / realWidth);\n top -= (height - srcHeight) / 2;\n }\n\n return {\n top, left, width, height,\n };\n}\n\nfunction isElementInViewport(el: HTMLElement) {\n if (el.style.display === 'none') {\n return false;\n }\n\n const rect = el.getBoundingClientRect();\n const { height: windowHeight } = windowSize.get();\n\n return (rect.top <= windowHeight) && ((rect.top + rect.height) >= 0);\n}\n\nfunction isMessageImageFullyVisible(container: HTMLElement, imageEl: HTMLElement) {\n const messageListElement = document.querySelector('.Transition__slide--active > .MessageList')!;\n let imgOffsetTop = container.offsetTop + imageEl.closest('.content-inner, .WebPage')!.offsetTop;\n if (container.id.includes('album-media-')) {\n imgOffsetTop += container.parentElement!.offsetTop + container.closest('.Message')!.offsetTop;\n }\n\n return imgOffsetTop > messageListElement.scrollTop\n && imgOffsetTop + imageEl.offsetHeight < messageListElement.scrollTop + messageListElement.offsetHeight;\n}\n\nfunction getTopOffset(hasFooter: boolean) {\n const mql = window.matchMedia(MEDIA_VIEWER_MEDIA_QUERY);\n let topOffsetRem = 4.125;\n if (hasFooter && !IS_TOUCH_ENV) {\n topOffsetRem += mql.matches ? 0.875 : 2.125;\n }\n\n return topOffsetRem * REM;\n}\n\nfunction applyStyles(element: HTMLElement, styles: Record) {\n Object.assign(element.style, styles);\n}\n\nfunction getNodes(origin: MediaViewerOrigin, message?: ApiMessage) {\n let containerSelector;\n let mediaSelector;\n\n switch (origin) {\n case MediaViewerOrigin.Album:\n case MediaViewerOrigin.ScheduledAlbum:\n containerSelector = `.Transition__slide--active > .MessageList #album-media-${getMessageHtmlId(message!.id)}`;\n mediaSelector = '.full-media';\n break;\n\n case MediaViewerOrigin.SharedMedia:\n containerSelector = `#shared-media${getMessageHtmlId(message!.id)}`;\n mediaSelector = 'img';\n break;\n\n case MediaViewerOrigin.SearchResult:\n containerSelector = `#search-media${getMessageHtmlId(message!.id)}`;\n mediaSelector = 'img';\n break;\n\n case MediaViewerOrigin.MiddleHeaderAvatar:\n containerSelector = '.MiddleHeader .Transition__slide--active .ChatInfo .Avatar';\n mediaSelector = '.avatar-media';\n break;\n\n case MediaViewerOrigin.SettingsAvatar:\n containerSelector = '#Settings .ProfileInfo .Transition__slide--active .ProfilePhoto';\n mediaSelector = '.avatar-media';\n break;\n\n case MediaViewerOrigin.ProfileAvatar:\n containerSelector = '#RightColumn .ProfileInfo .Transition__slide--active .ProfilePhoto';\n mediaSelector = '.avatar-media';\n break;\n\n case MediaViewerOrigin.ScheduledInline:\n case MediaViewerOrigin.Inline:\n default:\n containerSelector = `.Transition__slide--active > .MessageList #${getMessageHtmlId(message!.id)}`;\n mediaSelector = '.message-content .full-media, .message-content .thumbnail';\n }\n\n const container = document.querySelector(containerSelector)!;\n const mediaEls = container && container.querySelectorAll(mediaSelector);\n\n return {\n container,\n mediaEl: mediaEls?.[mediaEls.length - 1],\n };\n}\n\nfunction applyShape(ghost: HTMLDivElement, origin: MediaViewerOrigin) {\n switch (origin) {\n case MediaViewerOrigin.Album:\n case MediaViewerOrigin.ScheduledAlbum:\n case MediaViewerOrigin.Inline:\n case MediaViewerOrigin.ScheduledInline:\n ghost.classList.add('rounded-corners');\n break;\n\n case MediaViewerOrigin.SharedMedia:\n case MediaViewerOrigin.SettingsAvatar:\n case MediaViewerOrigin.ProfileAvatar:\n case MediaViewerOrigin.SearchResult:\n (ghost.firstChild as HTMLElement).style.objectFit = 'cover';\n break;\n\n case MediaViewerOrigin.MiddleHeaderAvatar:\n ghost.classList.add('circle');\n break;\n }\n}\n\nfunction clearShape(ghost: HTMLDivElement) {\n (ghost.firstChild as HTMLElement).style.objectFit = 'default';\n ghost.classList.remove('rounded-corners', 'circle');\n}\n","import React, {\n FC,\n memo,\n useCallback,\n useMemo,\n} from '../../lib/teact/teact';\nimport { getActions, withGlobal } from '../../global';\n\nimport { ApiMessage } from '../../api/types';\n\nimport { IS_SINGLE_COLUMN_LAYOUT } from '../../util/environment';\nimport { getMessageMediaHash } from '../../global/helpers';\nimport useLang from '../../hooks/useLang';\nimport useMediaWithLoadProgress from '../../hooks/useMediaWithLoadProgress';\nimport { selectIsDownloading, selectIsMessageProtected } from '../../global/selectors';\n\nimport Button from '../ui/Button';\nimport DropdownMenu from '../ui/DropdownMenu';\nimport MenuItem from '../ui/MenuItem';\nimport ProgressSpinner from '../ui/ProgressSpinner';\n\nimport './MediaViewerActions.scss';\n\ntype StateProps = {\n isDownloading: boolean;\n isProtected?: boolean;\n};\n\ntype OwnProps = {\n mediaData?: string;\n isVideo: boolean;\n isZoomed: boolean;\n message?: ApiMessage;\n fileName?: string;\n isAvatar?: boolean;\n onCloseMediaViewer: NoneToVoidFunction;\n onForward: NoneToVoidFunction;\n onZoomToggle: NoneToVoidFunction;\n};\n\nconst MediaViewerActions: FC = ({\n mediaData,\n isVideo,\n isZoomed,\n message,\n fileName,\n isAvatar,\n isDownloading,\n isProtected,\n onCloseMediaViewer,\n onForward,\n onZoomToggle,\n}) => {\n const {\n downloadMessageMedia,\n cancelMessageMediaDownload,\n } = getActions();\n\n const { loadProgress: downloadProgress } = useMediaWithLoadProgress(\n message && getMessageMediaHash(message, 'download'),\n !isDownloading,\n );\n\n const handleDownloadClick = useCallback(() => {\n if (isDownloading) {\n cancelMessageMediaDownload({ message: message! });\n } else {\n downloadMessageMedia({ message: message! });\n }\n }, [cancelMessageMediaDownload, downloadMessageMedia, isDownloading, message]);\n\n const lang = useLang();\n\n const MenuButton: FC<{ onTrigger: () => void; isOpen?: boolean }> = useMemo(() => {\n return ({ onTrigger, isOpen }) => (\n \n \n \n );\n }, []);\n\n function renderDownloadButton() {\n if (isProtected) {\n return undefined;\n }\n\n return isVideo ? (\n \n {isDownloading ? (\n \n ) : (\n \n )}\n \n ) : (\n \n \n \n );\n }\n\n if (IS_SINGLE_COLUMN_LAYOUT) {\n if (isProtected) {\n return undefined;\n }\n\n return (\n
\n \n {!isAvatar && (\n \n {lang('Forward')}\n \n )}\n {isVideo ? (\n \n {isDownloading ? `${Math.round(downloadProgress * 100)}% Downloading...` : 'Download'}\n \n ) : (\n \n {lang('AccActionDownload')}\n \n )}\n \n {isDownloading && }\n
\n );\n }\n\n return (\n
\n {!isAvatar && !isProtected && (\n \n \n \n )}\n {renderDownloadButton()}\n \n \n \n \n \n \n
\n );\n};\n\nexport default memo(withGlobal(\n (global, { message }): StateProps => {\n const isDownloading = message ? selectIsDownloading(global, message) : false;\n const isProtected = selectIsMessageProtected(global, message);\n\n return {\n isDownloading,\n isProtected,\n };\n },\n)(MediaViewerActions));\n","import React, { FC, useEffect, useState } from '../../lib/teact/teact';\n\nimport { IS_SINGLE_COLUMN_LAYOUT } from '../../util/environment';\nimport { throttle } from '../../util/schedulers';\nimport buildClassName from '../../util/buildClassName';\nimport { TextPart } from '../common/helpers/renderMessageText';\nimport { REM } from '../common/helpers/mediaDimensions';\n\nimport './MediaViewerFooter.scss';\n\nconst RESIZE_THROTTLE_MS = 500;\n\ntype OwnProps = {\n text: TextPart | TextPart[];\n onClick: () => void;\n isHidden?: boolean;\n isForVideo: boolean;\n};\n\nconst MediaViewerFooter: FC = ({\n text = '', isHidden, isForVideo, onClick,\n}) => {\n const [isMultiline, setIsMultiline] = useState(false);\n useEffect(() => {\n const footerContent = document.querySelector('.MediaViewerFooter .media-text') as HTMLDivElement | null;\n\n const checkIsMultiline = () => {\n const height = footerContent ? footerContent.clientHeight : 0;\n\n setIsMultiline(height > REM * 2);\n };\n\n // First run for initial detection of multiline footer text\n checkIsMultiline();\n\n const handleResize = throttle(checkIsMultiline, RESIZE_THROTTLE_MS, true);\n\n window.addEventListener('resize', handleResize, false);\n\n return () => {\n window.removeEventListener('resize', handleResize, false);\n };\n }, []);\n\n function stopEvent(e: React.MouseEvent) {\n if (text) {\n e.stopPropagation();\n }\n }\n\n const classNames = buildClassName(\n 'MediaViewerFooter',\n isForVideo && 'is-for-video',\n isHidden && 'is-hidden',\n );\n\n return (\n
\n {text && (\n
\n

{text}

\n
\n )}\n
\n );\n};\n\nexport default MediaViewerFooter;\n","import { useLayoutEffect, useState } from '../lib/teact/teact';\nimport { PLATFORM_ENV } from '../util/environment';\n\ntype RefType = {\n current: HTMLElement | null;\n};\n\ntype ReturnType = [boolean, () => void, () => void] | [false];\ntype CallbackType = (isPlayed: boolean) => void;\n\nconst prop = getBrowserFullscreenElementProp();\n\nexport default function useFullscreenStatus(elRef: RefType, setIsPlayed: CallbackType): ReturnType {\n const [isFullscreen, setIsFullscreen] = useState(Boolean(prop && document[prop]));\n\n const setFullscreen = () => {\n if (!elRef.current || !(prop || PLATFORM_ENV === 'iOS')) {\n return;\n }\n\n if (elRef.current.requestFullscreen) {\n elRef.current.requestFullscreen();\n } else if (elRef.current.webkitRequestFullscreen) {\n elRef.current.webkitRequestFullscreen();\n } else if (elRef.current.webkitEnterFullscreen) {\n elRef.current.webkitEnterFullscreen();\n } else if (elRef.current.mozRequestFullScreen) {\n elRef.current.mozRequestFullScreen();\n }\n\n setIsFullscreen(true);\n };\n\n const exitFullscreen = () => {\n if (!elRef.current) {\n return;\n }\n\n if (document.exitFullscreen) {\n document.exitFullscreen();\n } else if (document.mozCancelFullScreen) {\n document.mozCancelFullScreen();\n } else if (document.webkitCancelFullScreen) {\n document.webkitCancelFullScreen();\n } else if (document.webkitExitFullscreen) {\n document.webkitExitFullscreen();\n }\n\n setIsFullscreen(false);\n };\n\n useLayoutEffect(() => {\n const listener = () => { setIsFullscreen(Boolean(prop && document[prop])); };\n const listenerEnter = () => { setIsFullscreen(true); };\n const listenerExit = () => {\n setIsFullscreen(false);\n setIsPlayed(false);\n };\n const video = elRef.current;\n\n document.addEventListener('fullscreenchange', listener, false);\n document.addEventListener('webkitfullscreenchange', listener, false);\n document.addEventListener('mozfullscreenchange', listener, false);\n\n if (video) {\n video.addEventListener('webkitbeginfullscreen', listenerEnter, false);\n video.addEventListener('webkitendfullscreen', listenerExit, false);\n }\n\n return () => {\n document.removeEventListener('fullscreenchange', listener, false);\n document.removeEventListener('webkitfullscreenchange', listener, false);\n document.removeEventListener('mozfullscreenchange', listener, false);\n if (video) {\n video.removeEventListener('webkitbeginfullscreen', listenerEnter, false);\n video.removeEventListener('webkitendfullscreen', listenerExit, false);\n }\n };\n // eslint-disable-next-line\n }, []);\n\n if (!prop && PLATFORM_ENV !== 'iOS') {\n return [false];\n }\n\n return [isFullscreen, setFullscreen, exitFullscreen];\n}\n\nfunction getBrowserFullscreenElementProp() {\n if (typeof document.fullscreenElement !== 'undefined') {\n return 'fullscreenElement';\n } else if (typeof document.mozFullScreenElement !== 'undefined') {\n return 'mozFullScreenElement';\n } else if (typeof document.webkitFullscreenElement !== 'undefined') {\n return 'webkitFullscreenElement';\n }\n\n return '';\n}\n","const units = ['bytes', 'kB', 'MB', 'GB', 'TB', 'PB'];\n\nconst formatFileSize = (bytes: number) => {\n const number = bytes === 0 ? 0 : Math.floor(Math.log(bytes) / Math.log(1024));\n\n return `${(bytes / 1024 ** Math.floor(number)).toFixed(1)} ${units[number]}`;\n};\n\nexport default formatFileSize;\n","import React, {\n FC, useEffect, useRef, useCallback, useMemo,\n} from '../../lib/teact/teact';\nimport buildClassName from '../../util/buildClassName';\n\nimport useFlag from '../../hooks/useFlag';\nimport { IS_IOS, IS_SINGLE_COLUMN_LAYOUT } from '../../util/environment';\nimport { formatMediaDuration } from '../../util/dateFormat';\nimport formatFileSize from './helpers/formatFileSize';\nimport useLang from '../../hooks/useLang';\nimport { BufferedRange } from '../../hooks/useBuffering';\nimport { captureEvents } from '../../util/captureEvents';\n\nimport Button from '../ui/Button';\nimport RangeSlider from '../ui/RangeSlider';\nimport Menu from '../ui/Menu';\nimport MenuItem from '../ui/MenuItem';\n\nimport './VideoPlayerControls.scss';\n\ntype OwnProps = {\n bufferedRanges: BufferedRange[];\n bufferedProgress: number;\n currentTime: number;\n duration: number;\n fileSize: number;\n isForceMobileVersion?: boolean;\n isPlayed: boolean;\n isFullscreenSupported: boolean;\n isFullscreen: boolean;\n isVisible: boolean;\n isBuffered: boolean;\n volume: number;\n isMuted: boolean;\n playbackRate: number;\n onChangeFullscreen: (e: React.MouseEvent) => void;\n onVolumeClick: () => void;\n onVolumeChange: (volume: number) => void;\n onPlaybackRateChange: (playbackRate: number) => void;\n onPlayPause: (e: React.MouseEvent) => void;\n setVisibility: (isVisible: boolean) => void;\n onSeek: (position: number) => void;\n};\n\nconst stopEvent = (e: React.MouseEvent) => {\n e.stopPropagation();\n};\n\nconst PLAYBACK_RATES = [\n 0.5,\n 1,\n 1.5,\n 2,\n];\n\nconst HIDE_CONTROLS_TIMEOUT_MS = 1500;\n\nconst VideoPlayerControls: FC = ({\n bufferedRanges,\n bufferedProgress,\n currentTime,\n duration,\n fileSize,\n isForceMobileVersion,\n isPlayed,\n isFullscreenSupported,\n isFullscreen,\n isVisible,\n isBuffered,\n volume,\n isMuted,\n playbackRate,\n onChangeFullscreen,\n onVolumeClick,\n onVolumeChange,\n onPlaybackRateChange,\n onPlayPause,\n setVisibility,\n onSeek,\n}) => {\n const [isPlaybackMenuOpen, openPlaybackMenu, closePlaybackMenu] = useFlag();\n // eslint-disable-next-line no-null/no-null\n const seekerRef = useRef(null);\n const isSeekingRef = useRef(false);\n const isSeeking = isSeekingRef.current;\n\n useEffect(() => {\n let timeout: number | undefined;\n if (!isVisible || !isPlayed || isSeeking || isPlaybackMenuOpen) {\n if (timeout) window.clearTimeout(timeout);\n return undefined;\n }\n timeout = window.setTimeout(() => {\n setVisibility(false);\n }, HIDE_CONTROLS_TIMEOUT_MS);\n return () => {\n if (timeout) window.clearTimeout(timeout);\n };\n }, [isPlayed, isVisible, isSeeking, setVisibility, isPlaybackMenuOpen]);\n\n useEffect(() => {\n if (isVisible) {\n document.body.classList.add('video-controls-visible');\n } else {\n document.body.classList.remove('video-controls-visible');\n }\n return () => {\n document.body.classList.remove('video-controls-visible');\n };\n }, [isVisible]);\n\n useEffect(() => {\n if (!isVisible) {\n closePlaybackMenu();\n }\n }, [closePlaybackMenu, isVisible]);\n\n const lang = useLang();\n\n const handleSeek = useCallback((e: MouseEvent | TouchEvent) => {\n if (isSeekingRef.current && seekerRef.current) {\n const {\n width,\n left,\n } = seekerRef.current.getBoundingClientRect();\n const clientX = e instanceof MouseEvent ? e.clientX : e.targetTouches[0].clientX;\n onSeek(Math.max(Math.min(duration * ((clientX - left) / width), duration), 0));\n }\n }, [duration, onSeek]);\n\n const handleStartSeek = useCallback((e: MouseEvent | TouchEvent) => {\n isSeekingRef.current = true;\n handleSeek(e);\n }, [handleSeek]);\n\n const handleStopSeek = useCallback(() => {\n isSeekingRef.current = false;\n }, []);\n\n useEffect(() => {\n if (!seekerRef.current || !isVisible) return undefined;\n return captureEvents(seekerRef.current, {\n onCapture: handleStartSeek,\n onRelease: handleStopSeek,\n onClick: handleStopSeek,\n onDrag: handleSeek,\n });\n }, [isVisible, handleStartSeek, handleSeek, handleStopSeek]);\n\n const volumeIcon = useMemo(() => {\n if (volume === 0 || isMuted) return 'icon-muted';\n if (volume < 0.3) return 'icon-volume-1';\n if (volume < 0.6) return 'icon-volume-2';\n return 'icon-volume-3';\n }, [volume, isMuted]);\n\n return (\n \n {renderSeekLine(currentTime, duration, bufferedRanges, seekerRef)}\n
\n \n \n \n \n \n \n {!IS_IOS && (\n \n )}\n {renderTime(currentTime, duration)}\n {!isBuffered && renderFileSize(bufferedProgress, fileSize)}\n
\n \n {`${playbackRate}x`}\n \n {isFullscreenSupported && (\n \n \n \n )}\n
\n \n {PLAYBACK_RATES.map((rate) => (\n // eslint-disable-next-line react/jsx-no-bind\n onPlaybackRateChange(rate)}>\n {`${rate}x`}\n \n ))}\n \n
\n );\n};\n\nfunction renderTime(currentTime: number, duration: number) {\n return (\n
\n {`${formatMediaDuration(currentTime)} / ${formatMediaDuration(duration)}`}\n
\n );\n}\n\nfunction renderFileSize(loadedPercent: number, totalSize: number) {\n return (\n
\n {`${formatFileSize(totalSize * loadedPercent)} / ${formatFileSize(totalSize)}`}\n
\n );\n}\n\nfunction renderSeekLine(\n currentTime: number, duration: number, bufferedRanges: BufferedRange[], seekerRef: React.RefObject,\n) {\n const percentagePlayed = (currentTime / duration) * 100;\n\n return (\n
\n
\n {bufferedRanges.map(({ start, end }) => (\n \n ))}\n \n
\n
\n );\n}\n\nexport default VideoPlayerControls;\n","import React, {\n FC, memo, useCallback, useEffect, useRef, useState,\n} from '../../lib/teact/teact';\nimport { getActions } from '../../global';\n\nimport { ApiDimensions } from '../../api/types';\n\nimport useBuffering from '../../hooks/useBuffering';\nimport useFullscreenStatus from '../../hooks/useFullscreen';\nimport useShowTransition from '../../hooks/useShowTransition';\nimport useVideoCleanup from '../../hooks/useVideoCleanup';\nimport { IS_IOS, IS_SINGLE_COLUMN_LAYOUT, IS_TOUCH_ENV } from '../../util/environment';\nimport safePlay from '../../util/safePlay';\n\nimport Button from '../ui/Button';\nimport ProgressSpinner from '../ui/ProgressSpinner';\n\nimport './VideoPlayer.scss';\n\nimport VideoPlayerControls from './VideoPlayerControls';\n\ntype OwnProps = {\n url?: string;\n isGif?: boolean;\n posterData?: string;\n posterSize?: ApiDimensions;\n loadProgress?: number;\n fileSize: number;\n isMediaViewerOpen?: boolean;\n noPlay?: boolean;\n areControlsVisible: boolean;\n volume: number;\n isMuted: boolean;\n playbackRate: number;\n toggleControls: (isVisible: boolean) => void;\n onClose: (e: React.MouseEvent) => void;\n};\n\nconst MOBILE_VERSION_CONTROL_WIDTH = 400;\n\nconst VideoPlayer: FC = ({\n url,\n isGif,\n posterData,\n posterSize,\n loadProgress,\n fileSize,\n isMediaViewerOpen,\n noPlay,\n volume,\n isMuted,\n playbackRate,\n onClose,\n toggleControls,\n areControlsVisible,\n}) => {\n const {\n setMediaViewerVolume,\n setMediaViewerMuted,\n setMediaViewerPlaybackRate,\n } = getActions();\n // eslint-disable-next-line no-null/no-null\n const videoRef = useRef(null);\n const [isPlayed, setIsPlayed] = useState(!IS_TOUCH_ENV || !IS_IOS);\n const [currentTime, setCurrentTime] = useState(0);\n\n const [isFullscreen, setFullscreen, exitFullscreen] = useFullscreenStatus(videoRef, setIsPlayed);\n\n const {\n isBuffered, bufferedRanges, bufferingHandlers, bufferedProgress,\n } = useBuffering();\n const {\n shouldRender: shouldRenderSpinner,\n transitionClassNames: spinnerClassNames,\n } = useShowTransition(!isBuffered, undefined, undefined, 'slow');\n const {\n shouldRender: shouldRenderPlayButton,\n transitionClassNames: playButtonClassNames,\n } = useShowTransition(IS_IOS && !isPlayed && !shouldRenderSpinner, undefined, undefined, 'slow');\n\n useEffect(() => {\n if (noPlay || !isMediaViewerOpen) {\n videoRef.current!.pause();\n } else if (url && !IS_TOUCH_ENV) {\n // Chrome does not automatically start playing when `url` becomes available (even with `autoPlay`),\n // so we force it here. Contrary, iOS does not allow to call `play` without mouse event,\n // so we need to use `autoPlay` instead to allow pre-buffering.\n safePlay(videoRef.current!);\n }\n }, [noPlay, isMediaViewerOpen, url]);\n\n useEffect(() => {\n if (videoRef.current!.currentTime === videoRef.current!.duration) {\n setCurrentTime(0);\n setIsPlayed(false);\n } else {\n setCurrentTime(videoRef.current!.currentTime);\n }\n }, [currentTime]);\n\n useEffect(() => {\n videoRef.current!.volume = volume;\n }, [volume]);\n\n useEffect(() => {\n videoRef.current!.playbackRate = playbackRate;\n }, [playbackRate]);\n\n const togglePlayState = useCallback((e: React.MouseEvent | KeyboardEvent) => {\n e.stopPropagation();\n if (isPlayed) {\n videoRef.current!.pause();\n setIsPlayed(false);\n } else {\n safePlay(videoRef.current!);\n setIsPlayed(true);\n }\n }, [isPlayed]);\n\n useVideoCleanup(videoRef, []);\n\n const handleMouseMove = useCallback(() => {\n toggleControls(true);\n }, [toggleControls]);\n\n const handleMouseOut = useCallback((e: React.MouseEvent) => {\n if (e.target === videoRef.current) {\n toggleControls(false);\n }\n }, [toggleControls]);\n\n const handleTimeUpdate = useCallback((e: React.SyntheticEvent) => {\n setCurrentTime(e.currentTarget.currentTime);\n }, []);\n\n const handleEnded = useCallback(() => {\n setCurrentTime(0);\n setIsPlayed(false);\n toggleControls(true);\n }, [toggleControls]);\n\n const handleFullscreenChange = useCallback(() => {\n if (isFullscreen && exitFullscreen) {\n exitFullscreen();\n } else if (!isFullscreen && setFullscreen) {\n setFullscreen();\n }\n }, [exitFullscreen, isFullscreen, setFullscreen]);\n\n const handleSeek = useCallback((position: number) => {\n videoRef.current!.currentTime = position;\n }, []);\n\n const handleVolumeChange = useCallback((newVolume: number) => {\n setMediaViewerVolume({ volume: newVolume / 100 });\n }, [setMediaViewerVolume]);\n\n const handleVolumeMuted = useCallback(() => {\n setMediaViewerMuted({ isMuted: !isMuted });\n }, [isMuted, setMediaViewerMuted]);\n\n const handlePlaybackRateChange = useCallback((newPlaybackRate: number) => {\n setMediaViewerPlaybackRate({ playbackRate: newPlaybackRate });\n }, [setMediaViewerPlaybackRate]);\n\n useEffect(() => {\n if (!isMediaViewerOpen) return undefined;\n const togglePayingStateBySpace = (e: KeyboardEvent) => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n togglePlayState(e);\n }\n };\n\n document.addEventListener('keydown', togglePayingStateBySpace, false);\n\n return () => {\n document.removeEventListener('keydown', togglePayingStateBySpace, false);\n };\n }, [togglePlayState, isMediaViewerOpen]);\n\n const wrapperStyle = posterSize && `width: ${posterSize.width}px; height: ${posterSize.height}px`;\n const videoStyle = `background-image: url(${posterData})`;\n\n return (\n \n \n {/* eslint-disable-next-line jsx-a11y/media-has-caption */}\n setIsPlayed(true) : undefined}\n onEnded={handleEnded}\n onClick={!IS_SINGLE_COLUMN_LAYOUT ? togglePlayState : undefined}\n onDoubleClick={!IS_TOUCH_ENV ? handleFullscreenChange : undefined}\n // eslint-disable-next-line react/jsx-props-no-spreading\n {...bufferingHandlers}\n onTimeUpdate={handleTimeUpdate}\n >\n {url && }\n \n
\n {shouldRenderPlayButton && (\n \n )}\n {shouldRenderSpinner && (\n
\n {!isBuffered &&
Buffering...
}\n \n
\n )}\n {!isGif && !shouldRenderSpinner && (\n \n )}\n
\n );\n};\n\nexport default memo(VideoPlayer);\n","import React, { FC, memo, useCallback } from '../../lib/teact/teact';\nimport { withGlobal } from '../../global';\n\nimport {\n ApiChat, ApiDimensions, ApiMediaFormat, ApiMessage, ApiUser,\n} from '../../api/types';\nimport { MediaViewerOrigin } from '../../types';\n\nimport { IS_SINGLE_COLUMN_LAYOUT, IS_TOUCH_ENV } from '../../util/environment';\nimport useBlurSync from '../../hooks/useBlurSync';\nimport useMedia from '../../hooks/useMedia';\nimport useMediaWithLoadProgress from '../../hooks/useMediaWithLoadProgress';\nimport {\n getChatAvatarHash,\n getMessageDocument,\n getMessageFileSize,\n getMessageMediaFormat,\n getMessageMediaHash,\n getMessageMediaThumbDataUri,\n getMessagePhoto,\n getMessageVideo,\n getMessageWebPagePhoto,\n getMessageWebPageVideo,\n getPhotoFullDimensions,\n getVideoDimensions,\n isMessageDocumentPhoto,\n isMessageDocumentVideo,\n} from '../../global/helpers';\nimport {\n selectChat, selectChatMessage, selectIsMessageProtected, selectScheduledMessage, selectUser,\n} from '../../global/selectors';\nimport { AVATAR_FULL_DIMENSIONS, calculateMediaViewerDimensions } from '../common/helpers/mediaDimensions';\nimport { renderMessageText } from '../common/helpers/renderMessageText';\nimport stopEvent from '../../util/stopEvent';\n\nimport Spinner from '../ui/Spinner';\nimport MediaViewerFooter from './MediaViewerFooter';\nimport VideoPlayer from './VideoPlayer';\n\nimport './MediaViewerContent.scss';\n\ntype OwnProps = {\n messageId?: number;\n chatId?: string;\n threadId?: number;\n avatarOwnerId?: string;\n profilePhotoIndex?: number;\n origin?: MediaViewerOrigin;\n isActive?: boolean;\n animationLevel: 0 | 1 | 2;\n onClose: () => void;\n onFooterClick: () => void;\n setIsFooterHidden?: (isHidden: boolean) => void;\n isFooterHidden?: boolean;\n};\n\ntype StateProps = {\n chatId?: string;\n messageId?: number;\n senderId?: string;\n threadId?: number;\n avatarOwner?: ApiChat | ApiUser;\n profilePhotoIndex?: number;\n message?: ApiMessage;\n origin?: MediaViewerOrigin;\n isProtected?: boolean;\n volume: number;\n isMuted: boolean;\n playbackRate: number;\n};\n\nconst ANIMATION_DURATION = 350;\n\nconst MediaViewerContent: FC = (props) => {\n const {\n messageId,\n isActive,\n avatarOwner,\n chatId,\n message,\n profilePhotoIndex,\n origin,\n animationLevel,\n isFooterHidden,\n isProtected,\n volume,\n playbackRate,\n isMuted,\n onClose,\n onFooterClick,\n setIsFooterHidden,\n } = props;\n /* Content */\n const photo = message ? getMessagePhoto(message) : undefined;\n const video = message ? getMessageVideo(message) : undefined;\n const webPagePhoto = message ? getMessageWebPagePhoto(message) : undefined;\n const webPageVideo = message ? getMessageWebPageVideo(message) : undefined;\n const isDocumentPhoto = message ? isMessageDocumentPhoto(message) : false;\n const isDocumentVideo = message ? isMessageDocumentVideo(message) : false;\n const isVideo = Boolean(video || webPageVideo || isDocumentVideo);\n const isPhoto = Boolean(!isVideo && (photo || webPagePhoto || isDocumentPhoto));\n const { isGif } = video || webPageVideo || {};\n\n const isOpen = Boolean(avatarOwner || messageId);\n const isAvatar = Boolean(avatarOwner);\n\n const isFromSharedMedia = origin === MediaViewerOrigin.SharedMedia;\n const isFromSearch = origin === MediaViewerOrigin.SearchResult;\n\n const isGhostAnimation = animationLevel === 2;\n\n /* Media data */\n function getMediaHash(isFull?: boolean) {\n if (isAvatar && profilePhotoIndex !== undefined) {\n const { photos } = avatarOwner!;\n return photos && photos[profilePhotoIndex]\n ? `photo${photos[profilePhotoIndex].id}?size=c`\n : getChatAvatarHash(avatarOwner!, isFull ? 'big' : 'normal');\n }\n\n return message && getMessageMediaHash(message, isFull ? 'viewerFull' : 'viewerPreview');\n }\n\n const pictogramBlobUrl = useMedia(\n message && (isFromSharedMedia || isFromSearch) && getMessageMediaHash(message, 'pictogram'),\n undefined,\n ApiMediaFormat.BlobUrl,\n undefined,\n isGhostAnimation && ANIMATION_DURATION,\n );\n const previewMediaHash = getMediaHash();\n const previewBlobUrl = useMedia(\n previewMediaHash,\n undefined,\n ApiMediaFormat.BlobUrl,\n undefined,\n isGhostAnimation && ANIMATION_DURATION,\n );\n const {\n mediaData: fullMediaBlobUrl,\n loadProgress,\n } = useMediaWithLoadProgress(\n getMediaHash(true),\n undefined,\n message && getMessageMediaFormat(message, 'viewerFull'),\n undefined,\n isGhostAnimation && ANIMATION_DURATION,\n );\n\n const toggleControls = useCallback((isVisible) => {\n setIsFooterHidden?.(!isVisible);\n }, [setIsFooterHidden]);\n\n const localBlobUrl = (photo || video) ? (photo || video)!.blobUrl : undefined;\n let bestImageData = (!isVideo && (localBlobUrl || fullMediaBlobUrl)) || previewBlobUrl || pictogramBlobUrl;\n const thumbDataUri = useBlurSync(!bestImageData && message && getMessageMediaThumbDataUri(message));\n if (!bestImageData && origin !== MediaViewerOrigin.SearchResult) {\n bestImageData = thumbDataUri;\n }\n\n const videoSize = message ? getMessageFileSize(message) : undefined;\n\n let dimensions!: ApiDimensions;\n if (message) {\n if (isDocumentPhoto || isDocumentVideo) {\n dimensions = getMessageDocument(message)!.mediaSize!;\n } else if (photo || webPagePhoto) {\n dimensions = getPhotoFullDimensions((photo || webPagePhoto)!)!;\n } else if (video || webPageVideo) {\n dimensions = getVideoDimensions((video || webPageVideo)!)!;\n }\n } else {\n dimensions = AVATAR_FULL_DIMENSIONS;\n }\n\n if (isAvatar) {\n return (\n
\n {renderPhoto(\n fullMediaBlobUrl || previewBlobUrl,\n calculateMediaViewerDimensions(AVATAR_FULL_DIMENSIONS, false),\n !IS_SINGLE_COLUMN_LAYOUT && !isProtected,\n )}\n
\n );\n }\n\n if (!message) return undefined;\n const textParts = renderMessageText(message);\n const hasFooter = Boolean(textParts);\n\n return (\n \n {isProtected &&
}\n {isPhoto && renderPhoto(\n localBlobUrl || fullMediaBlobUrl || previewBlobUrl || pictogramBlobUrl,\n message && calculateMediaViewerDimensions(dimensions!, hasFooter),\n !IS_SINGLE_COLUMN_LAYOUT && !isProtected,\n )}\n {isVideo && ((!isActive && IS_TOUCH_ENV) ? renderVideoPreview(\n bestImageData,\n message && calculateMediaViewerDimensions(dimensions!, hasFooter, true),\n !IS_SINGLE_COLUMN_LAYOUT && !isProtected,\n ) : (\n \n ))}\n {textParts && (\n \n )}\n
\n );\n};\n\nexport default memo(withGlobal(\n (global, ownProps): StateProps => {\n const {\n chatId,\n threadId,\n messageId,\n avatarOwnerId,\n profilePhotoIndex,\n origin,\n } = ownProps;\n\n const {\n volume,\n isMuted,\n playbackRate,\n } = global.mediaViewer;\n\n if (origin === MediaViewerOrigin.SearchResult) {\n if (!(chatId && messageId)) {\n return { volume, isMuted, playbackRate };\n }\n\n const message = selectChatMessage(global, chatId, messageId);\n if (!message) {\n return { volume, isMuted, playbackRate };\n }\n\n return {\n chatId,\n messageId,\n senderId: message.senderId,\n origin,\n message,\n isProtected: selectIsMessageProtected(global, message),\n volume,\n isMuted,\n playbackRate,\n };\n }\n\n if (avatarOwnerId) {\n const sender = selectUser(global, avatarOwnerId) || selectChat(global, avatarOwnerId);\n\n return {\n messageId: -1,\n senderId: avatarOwnerId,\n avatarOwner: sender,\n profilePhotoIndex: profilePhotoIndex || 0,\n origin,\n volume,\n isMuted,\n playbackRate,\n };\n }\n\n if (!(chatId && threadId && messageId)) {\n return { volume, isMuted, playbackRate };\n }\n\n let message: ApiMessage | undefined;\n if (origin && [MediaViewerOrigin.ScheduledAlbum, MediaViewerOrigin.ScheduledInline].includes(origin)) {\n message = selectScheduledMessage(global, chatId, messageId);\n } else {\n message = selectChatMessage(global, chatId, messageId);\n }\n\n if (!message) {\n return { volume, isMuted, playbackRate };\n }\n\n return {\n chatId,\n threadId,\n messageId,\n senderId: message.senderId,\n origin,\n message,\n isProtected: selectIsMessageProtected(global, message),\n volume,\n isMuted,\n playbackRate,\n };\n },\n)(MediaViewerContent));\n\nfunction renderPhoto(blobUrl?: string, imageSize?: ApiDimensions, canDrag?: boolean) {\n return blobUrl\n ? (\n \n )\n : (\n \n \n
\n );\n}\n\nfunction renderVideoPreview(blobUrl?: string, imageSize?: ApiDimensions, canDrag?: boolean) {\n const wrapperStyle = imageSize && `width: ${imageSize.width}px; height: ${imageSize.height}px`;\n const videoStyle = `background-image: url(${blobUrl})`;\n return blobUrl\n ? (\n \n \n {/* eslint-disable-next-line jsx-a11y/media-has-caption */}\n \n
\n
\n )\n : (\n \n \n \n );\n}\n","import React, {\n FC, memo, useCallback, useEffect, useRef, useState,\n} from '../../lib/teact/teact';\n\nimport { MediaViewerOrigin } from '../../types';\n\nimport useDebounce from '../../hooks/useDebounce';\nimport useForceUpdate from '../../hooks/useForceUpdate';\nimport { animateNumber, timingFunctions } from '../../util/animation';\nimport arePropsShallowEqual from '../../util/arePropsShallowEqual';\nimport { captureEvents, IOS_SCREEN_EDGE_THRESHOLD, RealTouchEvent } from '../../util/captureEvents';\nimport { IS_IOS, IS_TOUCH_ENV } from '../../util/environment';\nimport { debounce } from '../../util/schedulers';\n\nimport MediaViewerContent from './MediaViewerContent';\n\nimport './MediaViewerSlides.scss';\nimport useTimeout from '../../hooks/useTimeout';\n\ntype OwnProps = {\n messageId?: number;\n getMessageId: (fromId?: number, direction?: number) => number | undefined;\n isVideo?: boolean;\n isGif?: boolean;\n isPhoto?: boolean;\n isOpen?: boolean;\n selectMessage: (id?: number) => void;\n chatId?: string;\n threadId?: number;\n isActive?: boolean;\n avatarOwnerId?: string;\n profilePhotoIndex?: number;\n origin?: MediaViewerOrigin;\n isZoomed?: boolean;\n animationLevel: 0 | 1 | 2;\n onClose: () => void;\n hasFooter?: boolean;\n onFooterClick: () => void;\n};\n\nconst SWIPE_X_THRESHOLD = 50;\nconst SWIPE_Y_THRESHOLD = 50;\nconst SLIDES_GAP = 40;\nconst ANIMATION_DURATION = 350;\nconst DEBOUNCE_MESSAGE = 350;\nconst DEBOUNCE_SWIPE = 500;\nconst DEBOUNCE_ACTIVE = 800;\nconst MAX_ZOOM = 4;\nconst MIN_ZOOM = 0.6;\nconst DOUBLE_TAP_ZOOM = 3;\nconst CLICK_X_THRESHOLD = 40;\nconst CLICK_Y_THRESHOLD = 80;\nlet cancelAnimation: Function | undefined;\n\ntype Transform = {\n x: number;\n y: number;\n scale: number;\n};\n\nenum SwipeDirection {\n Horizontal,\n Vertical,\n}\n\nconst MediaViewerSlides: FC = ({\n messageId,\n getMessageId,\n selectMessage,\n isVideo,\n isGif,\n isPhoto,\n isOpen,\n isActive,\n hasFooter,\n ...rest\n}) => {\n // eslint-disable-next-line no-null/no-null\n const containerRef = useRef(null);\n // eslint-disable-next-line no-null/no-null\n const activeSlideRef = useRef(null);\n const transformRef = useRef({ x: 0, y: 0, scale: 1 });\n const swipeDirectionRef = useRef(undefined);\n const isActiveRef = useRef(true);\n const [activeMessageId, setActiveMessageId] = useState(messageId);\n const forceUpdate = useForceUpdate();\n const [isFooterHidden, setIsFooterHidden] = useState(true);\n\n const {\n isZoomed,\n onClose,\n } = rest;\n\n const setTransform = useCallback((value: Transform) => {\n transformRef.current = value;\n forceUpdate();\n }, [forceUpdate]);\n\n const setIsActive = useCallback((value: boolean) => {\n isActiveRef.current = value;\n forceUpdate();\n }, [forceUpdate]);\n\n const debounceSetMessage = useDebounce(DEBOUNCE_MESSAGE, true);\n const debounceSwipeDirection = useDebounce(DEBOUNCE_SWIPE, true);\n const debounceActive = useDebounce(DEBOUNCE_ACTIVE, true);\n\n const handleToggleFooterVisibility = useCallback((e: React.MouseEvent) => {\n if (!IS_TOUCH_ENV) return;\n const isFooter = window.innerHeight - e.pageY < CLICK_Y_THRESHOLD;\n if (!isFooter && e.pageX < CLICK_X_THRESHOLD) return;\n if (!isFooter && e.pageX > window.innerWidth - CLICK_X_THRESHOLD) return;\n setIsFooterHidden(!isFooterHidden);\n }, [isFooterHidden]);\n\n useTimeout(() => setIsFooterHidden(false), ANIMATION_DURATION - 150);\n\n useEffect(() => {\n if (!IS_TOUCH_ENV || !containerRef.current || isZoomed || !activeMessageId) {\n return undefined;\n }\n let lastTransform = { x: 0, y: 0, scale: 1 };\n const lastDragOffset = {\n x: 0,\n y: 0,\n };\n const lastZoomCenter = {\n x: 0,\n y: 0,\n };\n const panDelta = {\n x: 0,\n y: 0,\n };\n let lastGestureTime = Date.now();\n let initialContentRect: DOMRect;\n let content: HTMLElement | null;\n const setLastGestureTime = debounce(() => {\n lastGestureTime = Date.now();\n }, 500, false, true);\n\n const changeSlide = (e: MouseEvent) => {\n if (transformRef.current.scale !== 1) return false;\n let direction = 0;\n if (window.innerHeight - e.pageY < CLICK_Y_THRESHOLD) {\n return false;\n }\n if (e.pageX < CLICK_X_THRESHOLD) {\n direction = -1;\n } else if (e.pageX > window.innerWidth - CLICK_X_THRESHOLD) {\n direction = 1;\n }\n const mId = getMessageId(activeMessageId, direction);\n if (mId) {\n const offset = (window.innerWidth + SLIDES_GAP) * direction;\n transformRef.current.x += offset;\n isActiveRef.current = false;\n setActiveMessageId(mId);\n debounceSetMessage(() => selectMessage(mId));\n debounceActive(() => {\n setIsActive(true);\n });\n lastTransform = { x: 0, y: 0, scale: 1 };\n cancelAnimation = animateNumber({\n from: transformRef.current.x,\n to: 0,\n duration: ANIMATION_DURATION,\n timing: timingFunctions.easeOutCubic,\n onUpdate: (value) => setTransform({\n y: 0,\n x: value,\n scale: 1,\n }),\n });\n }\n return direction !== 0;\n };\n\n return captureEvents(containerRef.current, {\n isNotPassive: true,\n excludedClosestSelector: '.MediaViewerFooter',\n onCapture: (e) => {\n if (checkIfControlTarget(e)) return;\n lastGestureTime = Date.now();\n if (arePropsShallowEqual(transformRef.current, { x: 0, y: 0, scale: 1 })) {\n if (!activeSlideRef.current) return;\n content = activeSlideRef.current.querySelector('img, video');\n if (!content) return;\n // Store initial content rect, without transformations\n initialContentRect = content.getBoundingClientRect();\n }\n },\n onDrag: (event, captureEvent, {\n dragOffsetX,\n dragOffsetY,\n }) => {\n if (checkIfControlTarget(event)) return;\n // Avoid conflicts with swipe-to-back gestures\n if (IS_IOS) {\n const { pageX } = (captureEvent as RealTouchEvent).touches[0];\n if (pageX <= IOS_SCREEN_EDGE_THRESHOLD || pageX >= window.innerWidth - IOS_SCREEN_EDGE_THRESHOLD) {\n return;\n }\n }\n if (cancelAnimation) {\n cancelAnimation();\n cancelAnimation = undefined;\n }\n panDelta.x = lastDragOffset.x - dragOffsetX;\n panDelta.y = lastDragOffset.y - dragOffsetY;\n lastDragOffset.x = dragOffsetX;\n lastDragOffset.y = dragOffsetY;\n const absOffsetX = Math.abs(dragOffsetX);\n const absOffsetY = Math.abs(dragOffsetY);\n const {\n scale,\n x,\n y,\n } = transformRef.current;\n const h = 10;\n\n // If user is inactive but is still touching the screen\n // we reset last gesture time\n setLastGestureTime();\n\n // If image is scaled we just need to pan it\n if (scale !== 1) {\n if ('touches' in event && event.touches.length === 1) {\n setTransform({\n x: lastTransform.x + dragOffsetX,\n y: lastTransform.y + dragOffsetY,\n scale,\n });\n }\n return;\n }\n if (swipeDirectionRef.current !== SwipeDirection.Vertical) {\n // If user is swiping horizontally or horizontal shift is dominant\n // we change only horizontal position\n if (swipeDirectionRef.current === SwipeDirection.Horizontal\n || Math.abs(x) > h || (absOffsetX > h && absOffsetY < h)) {\n swipeDirectionRef.current = SwipeDirection.Horizontal;\n isActiveRef.current = false;\n setTransform({\n x: dragOffsetX,\n y: 0,\n scale,\n });\n return;\n }\n }\n // If vertical shift is dominant we change only vertical position\n if (swipeDirectionRef.current === SwipeDirection.Vertical\n || Math.abs(y) > h || (absOffsetY > h && absOffsetX < h)) {\n swipeDirectionRef.current = SwipeDirection.Vertical;\n setTransform({\n x: 0,\n y: dragOffsetY,\n scale,\n });\n }\n },\n onZoom: (e, {\n zoomFactor,\n initialCenterX,\n initialCenterY,\n dragOffsetX,\n dragOffsetY,\n currentCenterX,\n currentCenterY,\n }) => {\n // Calculate current scale based on zoom factor and limits, add max zoom margin for bounce back effect\n const scale = Math.min(MAX_ZOOM * 3, Math.max(lastTransform.scale * zoomFactor, MIN_ZOOM));\n const scaleFactor = scale / lastTransform.scale;\n const offsetX = Math.abs(Math.min(lastTransform.x, 0));\n const offsetY = Math.abs(Math.min(lastTransform.y, 0));\n\n // Calculate new center relative to the shifted image\n const scaledCenterX = offsetX + initialCenterX;\n const scaledCenterY = offsetY + initialCenterY;\n\n // Save last zoom center for bounce back effect\n lastZoomCenter.x = currentCenterX;\n lastZoomCenter.y = currentCenterY;\n\n // Calculate how much we need to shift the image to keep the zoom center at the same position\n const scaleOffsetX = (scaledCenterX - scaleFactor * scaledCenterX);\n const scaleOffsetY = (scaledCenterY - scaleFactor * scaledCenterY);\n\n setTransform({\n x: lastTransform.x + scaleOffsetX + dragOffsetX,\n y: lastTransform.y + scaleOffsetY + dragOffsetY,\n scale,\n });\n },\n onClick(e) {\n if (changeSlide(e as MouseEvent)) {\n e.preventDefault();\n e.stopPropagation();\n }\n },\n onDoubleClick(e, {\n centerX,\n centerY,\n }) {\n if (changeSlide(e as MouseEvent)) {\n e.preventDefault();\n e.stopPropagation();\n return undefined;\n }\n // Calculate how much we need to shift the image to keep the zoom center at the same position\n const scaleOffsetX = (centerX - DOUBLE_TAP_ZOOM * centerX);\n const scaleOffsetY = (centerY - DOUBLE_TAP_ZOOM * centerY);\n const {\n scale,\n x,\n y,\n } = transformRef.current;\n if (scale === 1) {\n if (x !== 0 || y !== 0) return undefined;\n lastTransform = {\n x: scaleOffsetX,\n y: scaleOffsetY,\n scale: DOUBLE_TAP_ZOOM,\n };\n } else {\n lastTransform = {\n x: 0,\n y: 0,\n scale: 1,\n };\n }\n return animateNumber({\n from: [x, y, scale],\n to: [lastTransform.x, lastTransform.y, lastTransform.scale],\n duration: ANIMATION_DURATION,\n timing: timingFunctions.easeOutCubic,\n onUpdate: (value) => setTransform({\n x: value[0],\n y: value[1],\n scale: value[2],\n }),\n });\n },\n onRelease: () => {\n const absX = Math.abs(transformRef.current.x);\n const absY = Math.abs(transformRef.current.y);\n const {\n scale,\n x,\n y,\n } = transformRef.current;\n\n debounceSwipeDirection(() => {\n swipeDirectionRef.current = undefined;\n });\n debounceActive(() => {\n setIsActive(true);\n });\n\n // If scale is less than 1 we need to bounce back\n if (scale < 1) {\n lastTransform = { x: 0, y: 0, scale: 1 };\n return animateNumber({\n from: [x, y, scale],\n to: [0, 0, 1],\n duration: ANIMATION_DURATION,\n timing: timingFunctions.easeOutCubic,\n onUpdate: (value) => setTransform({\n x: value[0],\n y: value[1],\n scale: value[2],\n }),\n });\n }\n if (scale > 1) {\n if (!content || !initialContentRect) {\n lastTransform = {\n x,\n y,\n scale,\n };\n return undefined;\n }\n // Get current content boundaries\n const boundaries = content.getBoundingClientRect();\n const s1 = Math.min(scale, MAX_ZOOM);\n const scaleFactor = s1 / scale;\n\n // Calculate new position based on the last zoom center to keep the zoom center\n // at the same position when bouncing back from max zoom\n let x1 = x * scaleFactor + (lastZoomCenter.x - scaleFactor * lastZoomCenter.x);\n let y1 = y * scaleFactor + (lastZoomCenter.y - scaleFactor * lastZoomCenter.y);\n\n // Arbitrary pan velocity coefficient\n const k = 0.15;\n\n // If scale didn't change, we need to add inertia to pan gesture\n if (lastTransform.scale === scale) {\n // Calculate user gesture velocity\n const Vx = Math.abs(lastDragOffset.x) / (Date.now() - lastGestureTime);\n const Vy = Math.abs(lastDragOffset.y) / (Date.now() - lastGestureTime);\n\n // Add extra distance based on gesture velocity and last pan delta\n x1 -= Math.abs(lastDragOffset.x) * Vx * k * panDelta.x;\n y1 -= Math.abs(lastDragOffset.y) * Vy * k * panDelta.y;\n }\n\n // If content is outside window we calculate offset boundaries\n // based on initial content rect and current scale\n if (boundaries.width > window.innerWidth) {\n const minOffsetX = -initialContentRect.left * s1;\n const maxOffsetX = window.innerWidth - initialContentRect.right * s1;\n x1 = Math.min(minOffsetX, Math.max(maxOffsetX, x1));\n } else {\n // Else we center the content on the screen\n x1 = (window.innerWidth - window.innerWidth * s1) / 2;\n }\n\n if (boundaries.height > window.innerHeight) {\n const minOffsetY = -initialContentRect.top * s1;\n const maxOffsetY = window.innerHeight - initialContentRect.bottom * s1;\n y1 = Math.min(minOffsetY, Math.max(maxOffsetY, y1));\n } else {\n y1 = (window.innerHeight - window.innerHeight * s1) / 2;\n }\n lastTransform = {\n x: x1,\n y: y1,\n scale: s1,\n };\n cancelAnimation = animateNumber({\n from: [x, y, scale],\n to: [x1, y1, s1],\n duration: ANIMATION_DURATION,\n timing: timingFunctions.easeOutCubic,\n onUpdate: (value) => setTransform({\n x: value[0],\n y: value[1],\n scale: value[2],\n }),\n });\n return undefined;\n }\n lastTransform = {\n x,\n y,\n scale,\n };\n if (absY >= SWIPE_Y_THRESHOLD) return onClose();\n // Bounce back if vertical swipe is below threshold\n if (absY > 0) {\n return animateNumber({\n from: y,\n to: 0,\n duration: ANIMATION_DURATION,\n timing: timingFunctions.easeOutCubic,\n onUpdate: (value) => setTransform({\n x: 0,\n y: value,\n scale,\n }),\n });\n }\n // Get horizontal swipe direction\n const direction = x < 0 ? 1 : -1;\n const mId = getMessageId(activeMessageId, x < 0 ? 1 : -1);\n // Get the direction of the last pan gesture.\n // Could be different from the total horizontal swipe direction\n // if user starts a swipe in one direction and then changes the direction\n // we need to cancel slide transition\n const dirX = panDelta.x < 0 ? -1 : 1;\n if (mId && absX >= SWIPE_X_THRESHOLD && direction === dirX) {\n const offset = (window.innerWidth + SLIDES_GAP) * direction;\n // If image is shifted by more than SWIPE_X_THRESHOLD,\n // We shift everything by one screen width and then set new active message id\n transformRef.current.x += offset;\n setActiveMessageId(mId);\n debounceSetMessage(() => selectMessage(mId));\n }\n // Then we always return to the original position\n cancelAnimation = animateNumber({\n from: transformRef.current.x,\n to: 0,\n duration: ANIMATION_DURATION,\n timing: timingFunctions.easeOutCubic,\n onUpdate: (value) => setTransform({\n y: 0,\n x: value,\n scale: transformRef.current.scale,\n }),\n });\n return undefined;\n },\n });\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [\n isZoomed,\n onClose,\n setTransform,\n getMessageId,\n activeMessageId,\n setIsActive,\n ]);\n\n if (!activeMessageId) return undefined;\n\n const nextMessageId = getMessageId(activeMessageId, 1);\n const previousMessageId = getMessageId(activeMessageId, -1);\n const offsetX = transformRef.current.x;\n const offsetY = transformRef.current.y;\n const { scale } = transformRef.current;\n\n return (\n
\n {previousMessageId && scale === 1 && (\n
\n \n
\n )}\n {activeMessageId && (\n \n \n
\n )}\n {nextMessageId && scale === 1 && (\n
\n \n
\n )}\n \n );\n};\n\nexport default memo(MediaViewerSlides);\n\nfunction getAnimationStyle(x = 0, y = 0, scale = 1) {\n return `transform: translate3d(${x.toFixed(3)}px, ${y.toFixed(3)}px, 0px) scale(${scale.toFixed(3)});`;\n}\n\nfunction checkIfInsideSelector(element: HTMLElement, selector: string) {\n if (!element) return false;\n if (element.matches(selector)) return true;\n return Boolean(element.closest(selector));\n}\n\nfunction checkIfControlTarget(e: TouchEvent | MouseEvent) {\n const target = e.target as HTMLElement;\n if (checkIfInsideSelector(target, '.VideoPlayerControls')) {\n if (checkIfInsideSelector(\n target,\n '.play, .fullscreen, .volume, .volume-slider, .playback-rate, .playback-rate-menu',\n )) {\n return true;\n }\n e.preventDefault();\n return true;\n }\n return false;\n}\n","/*\n @source https://github.com/ajainarayanan/react-pan-zoom\n\n Heavily inspired/lifted from this idea: https://stackoverflow.com/a/39311435/661768\n without jqueryUI or jquery dependency.\n*/\nimport React, {\n FC, memo, useEffect, useRef, useState,\n} from '../../lib/teact/teact';\n\nimport { areSortedArraysEqual } from '../../util/iteratees';\n\nimport './PanZoom.scss';\n\nexport interface IDragData {\n x: number;\n y: number;\n dx: number;\n dy: number;\n}\n\nexport interface OwnProps {\n children: React.ReactNode;\n className?: string;\n noWrap: boolean;\n canPan: boolean;\n zoomLevel: number;\n panDeltaX: number;\n panDeltaY: number;\n onPan?: (x: number, y: number) => void;\n}\n\nconst INITIAL_MATRIX = [\n 1, 0, 0, 1, 0, 0,\n];\n\nconst SCALE_VALUES = {\n 1: 1,\n 1.5: 1.5,\n 2: 2.2,\n 2.5: 3.3,\n 3: 5.5,\n};\n\nconst ZOOM_SAFE_AREA = 150;\n\nfunction calculateSafeZoneOnZoom(oldScale: number, matrixData: number[], wrapper: HTMLDivElement | null) {\n const image = wrapper && wrapper.querySelector('.Transition__slide--active img');\n if (!wrapper || !image) {\n return matrixData;\n }\n const wrapperRect = wrapper.getBoundingClientRect();\n const imageRect = image.getBoundingClientRect();\n\n const newImgWidth = (imageRect.width / oldScale) * matrixData[0];\n const newImgHeight = (imageRect.height / oldScale) * matrixData[3];\n const newImgX = (wrapperRect.width - newImgWidth) / 2 + matrixData[4];\n const newImgY = (wrapperRect.height - newImgHeight) / 2 + matrixData[5];\n if (wrapperRect.width && wrapperRect.width - ZOOM_SAFE_AREA < newImgX) {\n matrixData[4] -= newImgX + wrapperRect.width - ZOOM_SAFE_AREA;\n } else if (newImgWidth && newImgWidth + newImgX < ZOOM_SAFE_AREA) {\n matrixData[4] -= newImgWidth + newImgX - ZOOM_SAFE_AREA;\n }\n if (wrapperRect.height && wrapperRect.height - ZOOM_SAFE_AREA < newImgY) {\n matrixData[5] -= newImgY + wrapperRect.height - ZOOM_SAFE_AREA;\n } else if (newImgHeight && newImgHeight + newImgY < ZOOM_SAFE_AREA) {\n matrixData[5] -= newImgHeight + newImgY - ZOOM_SAFE_AREA;\n }\n\n return matrixData;\n}\n\nconst PanZoom: FC = ({\n children,\n className,\n noWrap,\n canPan,\n zoomLevel,\n panDeltaX,\n panDeltaY,\n onPan,\n}) => {\n const tunedZoomLevel = SCALE_VALUES[zoomLevel as keyof typeof SCALE_VALUES] || zoomLevel;\n const [isDragging, setIsDragging] = useState(false);\n const [dragData, setDragData] = useState({\n dx: panDeltaX, dy: panDeltaY, x: 0, y: 0,\n });\n // [zoom, skew, skew, zoom, dx, dy] - see https://developer.mozilla.org/en-US/docs/Web/CSS/transform-function/matrix()\n const [matrixData, setMatrixData] = useState(INITIAL_MATRIX);\n // Used to set cursor while moving.\n // eslint-disable-next-line no-null/no-null\n const panWrapperRef = useRef(null);\n // Used to set transform for pan.\n // eslint-disable-next-line no-null/no-null\n const panContainerRef = useRef(null);\n\n useEffect(() => {\n const newZoomLevel = tunedZoomLevel || matrixData[0];\n const newPandx = panDeltaX || matrixData[4];\n const newPandy = panDeltaY || matrixData[5];\n\n const newMatrixData = [...matrixData];\n if (matrixData[0] !== newZoomLevel) {\n newMatrixData[0] = newZoomLevel || newMatrixData[0];\n newMatrixData[3] = newZoomLevel || newMatrixData[3];\n }\n if (matrixData[4] !== newPandx) {\n newMatrixData[4] = newPandx;\n }\n if (matrixData[5] !== newPandy) {\n newMatrixData[5] = newPandy;\n }\n\n if (!areSortedArraysEqual(matrixData, newMatrixData)) {\n setMatrixData(calculateSafeZoneOnZoom(matrixData[0], newMatrixData, panWrapperRef.current));\n }\n // eslint-disable-next-line\n }, [panDeltaX, panDeltaY, tunedZoomLevel]);\n\n useEffect(() => {\n if (!canPan) {\n setMatrixData(INITIAL_MATRIX);\n }\n }, [canPan]);\n\n useEffect(() => {\n if (panContainerRef.current) {\n panContainerRef.current.style.transform = `matrix(${matrixData.toString()})`;\n }\n }, [noWrap, matrixData]);\n\n const handleMouseDown = (e: React.MouseEvent) => {\n if (!canPan) {\n return;\n }\n\n e.stopPropagation();\n e.preventDefault();\n\n const offsetX = matrixData[4];\n const offsetY = matrixData[5];\n const newDragData: IDragData = {\n dx: offsetX,\n dy: offsetY,\n x: e.pageX,\n y: e.pageY,\n };\n setDragData(newDragData);\n setIsDragging(true);\n\n if (panWrapperRef.current) {\n panWrapperRef.current.classList.add('move');\n }\n };\n\n const handleMouseUp = () => {\n setIsDragging(false);\n\n if (panWrapperRef.current) {\n panWrapperRef.current.classList.remove('move');\n }\n\n if (onPan) {\n onPan(matrixData[4], matrixData[5]);\n }\n };\n\n function getNewMatrixData(x: number, y: number): number[] {\n const newMatrixData = [...matrixData];\n const deltaX = dragData.x - x;\n const deltaY = dragData.y - y;\n newMatrixData[4] = dragData.dx - deltaX;\n newMatrixData[5] = dragData.dy - deltaY;\n\n return newMatrixData;\n }\n\n const handleMouseMove = (e: React.MouseEvent) => {\n if (isDragging) {\n const newMatrixData = getNewMatrixData(e.pageX, e.pageY);\n setMatrixData(newMatrixData);\n\n if (panContainerRef.current) {\n panContainerRef.current.style.transform = `matrix(${matrixData.toString()})`;\n }\n }\n };\n\n if (noWrap) {\n return children;\n }\n\n return (\n \n \n {children}\n \n \n );\n};\n\nexport default memo(PanZoom);\n","import React, { FC, useCallback } from '../../lib/teact/teact';\nimport { getActions, withGlobal } from '../../global';\n\nimport { ApiChat, ApiMessage, ApiUser } from '../../api/types';\n\nimport { IS_SINGLE_COLUMN_LAYOUT } from '../../util/environment';\nimport { getSenderTitle, isUserId } from '../../global/helpers';\nimport { formatMediaDateTime } from '../../util/dateFormat';\nimport renderText from '../common/helpers/renderText';\nimport {\n selectChat,\n selectChatMessage,\n selectSender,\n selectUser,\n} from '../../global/selectors';\nimport useLang from '../../hooks/useLang';\n\nimport Avatar from '../common/Avatar';\n\nimport './SenderInfo.scss';\n\ntype OwnProps = {\n chatId?: string;\n messageId?: number;\n isAvatar?: boolean;\n};\n\ntype StateProps = {\n sender?: ApiUser | ApiChat;\n message?: ApiMessage;\n};\n\nconst ANIMATION_DURATION = 350;\n\nconst SenderInfo: FC = ({\n chatId,\n messageId,\n sender,\n isAvatar,\n message,\n}) => {\n const {\n closeMediaViewer,\n focusMessage,\n toggleChatInfo,\n } = getActions();\n\n const handleFocusMessage = useCallback(() => {\n closeMediaViewer();\n\n if (IS_SINGLE_COLUMN_LAYOUT) {\n setTimeout(() => {\n toggleChatInfo(false, { forceSyncOnIOs: true });\n focusMessage({ chatId, messageId });\n }, ANIMATION_DURATION);\n } else {\n focusMessage({ chatId, messageId });\n }\n }, [chatId, focusMessage, toggleChatInfo, messageId, closeMediaViewer]);\n\n const lang = useLang();\n\n if (!sender || (!message && !isAvatar)) {\n return undefined;\n }\n\n const senderTitle = getSenderTitle(lang, sender);\n\n return (\n
\n {isUserId(sender.id) ? (\n \n ) : (\n \n )}\n
\n
\n {senderTitle && renderText(senderTitle)}\n
\n
\n {isAvatar\n ? lang('lng_mediaview_profile_photo')\n : formatMediaDateTime(lang, message!.date * 1000, true)}\n
\n
\n
\n );\n};\n\nexport default withGlobal(\n (global, { chatId, messageId, isAvatar }): StateProps => {\n if (isAvatar && chatId) {\n return {\n sender: isUserId(chatId) ? selectUser(global, chatId) : selectChat(global, chatId),\n };\n }\n\n if (!messageId || !chatId) {\n return {};\n }\n\n const message = selectChatMessage(global, chatId, messageId);\n\n return {\n message,\n sender: message && selectSender(global, message),\n };\n },\n)(SenderInfo);\n","import React, { FC } from '../../lib/teact/teact';\n\nimport { IS_TOUCH_ENV } from '../../util/environment';\n\nimport Transition, { ChildrenFn, TransitionProps } from '../ui/Transition';\n\nconst SlideTransition: FC = ({ children, ...props }) => {\n if (IS_TOUCH_ENV) return children(true, true, 1);\n // eslint-disable-next-line react/jsx-props-no-spreading\n return {children};\n};\n\nexport default SlideTransition;\n","import React, {\n FC, memo, useCallback, useEffect, useRef, useState,\n} from '../../lib/teact/teact';\n\nimport { IS_SINGLE_COLUMN_LAYOUT } from '../../util/environment';\nimport buildClassName from '../../util/buildClassName';\nimport usePrevious from '../../hooks/usePrevious';\nimport useShowTransition from '../../hooks/useShowTransition';\nimport useLang from '../../hooks/useLang';\n\nimport Button from '../ui/Button';\n\nimport './ZoomControls.scss';\n\ntype OwnProps = {\n isShown: boolean;\n onChangeZoom: (level: number, canCloseZoom?: boolean) => void;\n};\n\nexport const MAX_ZOOM_LEVEL = 3;\nexport const MIN_ZOOM_LEVEL = 1;\nconst ONE_STEP_PERCENT = 100 / (MAX_ZOOM_LEVEL - MIN_ZOOM_LEVEL);\nconst RESET_ZOOM_LEVEL = 1.5;\n\nconst ZoomControls: FC = ({ isShown, onChangeZoom }) => {\n const { transitionClassNames } = useShowTransition(isShown);\n const prevIsShown = usePrevious(isShown);\n // eslint-disable-next-line no-null/no-null\n const inputRef = useRef(null);\n const [zoomLevel, setZoomLevel] = useState(1);\n const isSeeking = useRef(false);\n\n useEffect(() => {\n if (isShown && !prevIsShown) {\n setZoomLevel(RESET_ZOOM_LEVEL);\n }\n }, [isShown, prevIsShown]);\n\n const handleZoomOut = useCallback(() => {\n if (inputRef.current) {\n setZoomLevel(Math.max(MIN_ZOOM_LEVEL, zoomLevel - 0.5));\n }\n }, [zoomLevel]);\n\n const handleZoomIn = useCallback(() => {\n if (inputRef.current) {\n setZoomLevel(Math.min(MAX_ZOOM_LEVEL, zoomLevel + 0.5));\n }\n }, [zoomLevel]);\n\n const handleStartSeek = useCallback(() => {\n isSeeking.current = true;\n }, []);\n\n const handleStopSeek = useCallback(() => {\n isSeeking.current = false;\n if (zoomLevel === 1) {\n onChangeZoom(zoomLevel, !isSeeking.current);\n }\n }, [onChangeZoom, zoomLevel]);\n\n const handleSeeklineChange = (e:React.ChangeEvent) => {\n setZoomLevel(Math.min(MAX_ZOOM_LEVEL, Math.max(Number(e.target.value), MIN_ZOOM_LEVEL)));\n };\n\n useEffect(() => {\n onChangeZoom(zoomLevel, !isSeeking.current);\n }, [zoomLevel, onChangeZoom]);\n\n const lang = useLang();\n\n const className = buildClassName(\n 'ZoomControls',\n transitionClassNames,\n );\n\n return (\n
\n \n \n \n \n \n \n
\n
\n \n \n
\n
\n
\n );\n};\n\nexport default memo(ZoomControls);\n","import React, {\n FC, memo, useCallback, useEffect, useMemo, useRef, useState,\n} from '../../lib/teact/teact';\nimport { getActions, withGlobal } from '../../global';\n\nimport {\n ApiChat, ApiDimensions, ApiMediaFormat, ApiMessage, ApiUser,\n} from '../../api/types';\nimport { MediaViewerOrigin } from '../../types';\n\nimport { ANIMATION_END_DELAY } from '../../config';\nimport { IS_IOS, IS_SINGLE_COLUMN_LAYOUT, IS_TOUCH_ENV } from '../../util/environment';\nimport useBlurSync from '../../hooks/useBlurSync';\nimport useForceUpdate from '../../hooks/useForceUpdate';\nimport { dispatchHeavyAnimationEvent } from '../../hooks/useHeavyAnimationCheck';\nimport useHistoryBack from '../../hooks/useHistoryBack';\nimport useLang from '../../hooks/useLang';\nimport useMedia from '../../hooks/useMedia';\nimport useMediaWithLoadProgress from '../../hooks/useMediaWithLoadProgress';\nimport usePrevious from '../../hooks/usePrevious';\nimport {\n getChatAvatarHash,\n getChatMediaMessageIds,\n getMessageDocument,\n getMessageFileName,\n getMessageMediaFormat,\n getMessageMediaHash,\n getMessageMediaThumbDataUri,\n getMessagePhoto,\n getMessageVideo,\n getMessageWebPagePhoto,\n getMessageWebPageVideo,\n getPhotoFullDimensions,\n getVideoDimensions,\n isMessageDocumentPhoto,\n isMessageDocumentVideo,\n} from '../../global/helpers';\nimport {\n selectChat,\n selectChatMessage,\n selectChatMessages,\n selectCurrentMediaSearch,\n selectListedIds,\n selectOutlyingIds,\n selectScheduledMessage,\n selectScheduledMessages,\n selectUser,\n} from '../../global/selectors';\nimport { stopCurrentAudio } from '../../util/audioPlayer';\nimport captureEscKeyListener from '../../util/captureEscKeyListener';\nimport { captureEvents } from '../../util/captureEvents';\nimport windowSize from '../../util/windowSize';\nimport { AVATAR_FULL_DIMENSIONS, MEDIA_VIEWER_MEDIA_QUERY } from '../common/helpers/mediaDimensions';\nimport { renderMessageText } from '../common/helpers/renderMessageText';\nimport { animateClosing, animateOpening } from './helpers/ghostAnimation';\n\nimport Button from '../ui/Button';\nimport ShowTransition from '../ui/ShowTransition';\nimport Transition from '../ui/Transition';\nimport MediaViewerActions from './MediaViewerActions';\nimport MediaViewerSlides from './MediaViewerSlides';\nimport PanZoom from './PanZoom';\nimport SenderInfo from './SenderInfo';\nimport SlideTransition from './SlideTransition';\nimport ZoomControls from './ZoomControls';\n\nimport './MediaViewer.scss';\n\ntype StateProps = {\n chatId?: string;\n threadId?: number;\n messageId?: number;\n senderId?: string;\n origin?: MediaViewerOrigin;\n avatarOwner?: ApiChat | ApiUser;\n profilePhotoIndex?: number;\n message?: ApiMessage;\n chatMessages?: Record;\n collectionIds?: number[];\n animationLevel: 0 | 1 | 2;\n};\n\nconst ANIMATION_DURATION = 350;\n\nconst MediaViewer: FC = ({\n chatId,\n threadId,\n messageId,\n senderId,\n origin,\n avatarOwner,\n profilePhotoIndex,\n message,\n chatMessages,\n collectionIds,\n animationLevel,\n}) => {\n const {\n openMediaViewer,\n closeMediaViewer,\n openForwardMenu,\n focusMessage,\n toggleChatInfo,\n } = getActions();\n\n const isOpen = Boolean(avatarOwner || messageId);\n\n const isFromSharedMedia = origin === MediaViewerOrigin.SharedMedia;\n const isFromSearch = origin === MediaViewerOrigin.SearchResult;\n\n /* Content */\n const photo = message ? getMessagePhoto(message) : undefined;\n const video = message ? getMessageVideo(message) : undefined;\n const webPagePhoto = message ? getMessageWebPagePhoto(message) : undefined;\n const webPageVideo = message ? getMessageWebPageVideo(message) : undefined;\n const isDocumentPhoto = message ? isMessageDocumentPhoto(message) : false;\n const isDocumentVideo = message ? isMessageDocumentVideo(message) : false;\n const isVideo = Boolean(video || webPageVideo || isDocumentVideo);\n const { isGif } = video || webPageVideo || {};\n const isPhoto = Boolean(!isVideo && (photo || webPagePhoto || isDocumentPhoto));\n const isAvatar = Boolean(avatarOwner);\n\n /* Navigation */\n const singleMessageId = webPagePhoto || webPageVideo ? messageId : undefined;\n\n const messageIds = useMemo(() => {\n return singleMessageId\n ? [singleMessageId]\n : getChatMediaMessageIds(chatMessages || {}, collectionIds || [], isFromSharedMedia);\n }, [singleMessageId, chatMessages, collectionIds, isFromSharedMedia]);\n\n const selectedMediaMessageIndex = messageId ? messageIds.indexOf(messageId) : -1;\n const isFirst = selectedMediaMessageIndex === 0 || selectedMediaMessageIndex === -1;\n const isLast = selectedMediaMessageIndex === messageIds.length - 1 || selectedMediaMessageIndex === -1;\n\n /* Animation */\n const animationKey = useRef();\n const prevSenderId = usePrevious(senderId);\n if (isOpen && (!prevSenderId || prevSenderId !== senderId || !animationKey.current)) {\n animationKey.current = selectedMediaMessageIndex;\n }\n const slideAnimation = animationLevel >= 1 && !IS_TOUCH_ENV ? 'mv-slide' : 'none';\n const headerAnimation = animationLevel === 2 ? 'slide-fade' : 'none';\n const isGhostAnimation = animationLevel === 2;\n\n /* Controls */\n const [canPanZoomWrap, setCanPanZoomWrap] = useState(false);\n const [isZoomed, setIsZoomed] = useState(false);\n const [zoomLevel, setZoomLevel] = useState(1);\n const [panDelta, setPanDelta] = useState({\n x: 0,\n y: 0,\n });\n\n /* Media data */\n function getMediaHash(isFull?: boolean) {\n if (isAvatar && profilePhotoIndex !== undefined) {\n const { photos } = avatarOwner!;\n return photos && photos[profilePhotoIndex]\n ? `photo${photos[profilePhotoIndex].id}?size=c`\n : getChatAvatarHash(avatarOwner!, isFull ? 'big' : 'normal');\n }\n\n return message && getMessageMediaHash(message, isFull ? 'viewerFull' : 'viewerPreview');\n }\n\n const pictogramBlobUrl = useMedia(\n message && (isFromSharedMedia || isFromSearch) && getMessageMediaHash(message, 'pictogram'),\n undefined,\n ApiMediaFormat.BlobUrl,\n undefined,\n isGhostAnimation && ANIMATION_DURATION,\n );\n const previewMediaHash = getMediaHash();\n const previewBlobUrl = useMedia(\n previewMediaHash,\n undefined,\n ApiMediaFormat.BlobUrl,\n undefined,\n isGhostAnimation && ANIMATION_DURATION,\n );\n const { mediaData: fullMediaBlobUrl } = useMediaWithLoadProgress(\n getMediaHash(true),\n undefined,\n message && getMessageMediaFormat(message, 'viewerFull'),\n undefined,\n isGhostAnimation && ANIMATION_DURATION,\n );\n\n const localBlobUrl = (photo || video) ? (photo || video)!.blobUrl : undefined;\n let bestImageData = (!isVideo && (localBlobUrl || fullMediaBlobUrl)) || previewBlobUrl || pictogramBlobUrl;\n const thumbDataUri = useBlurSync(!bestImageData && message && getMessageMediaThumbDataUri(message));\n if (!bestImageData && origin !== MediaViewerOrigin.SearchResult) {\n bestImageData = thumbDataUri;\n }\n\n const fileName = message\n ? getMessageFileName(message)\n : isAvatar\n ? `avatar${avatarOwner!.id}-${profilePhotoIndex}.jpg`\n : undefined;\n\n let dimensions!: ApiDimensions;\n if (message) {\n if (isDocumentPhoto || isDocumentVideo) {\n dimensions = getMessageDocument(message)!.mediaSize!;\n } else if (photo || webPagePhoto) {\n dimensions = getPhotoFullDimensions((photo || webPagePhoto)!)!;\n } else if (video || webPageVideo) {\n dimensions = getVideoDimensions((video || webPageVideo)!)!;\n }\n } else {\n dimensions = AVATAR_FULL_DIMENSIONS;\n }\n\n useEffect(() => {\n if (!IS_SINGLE_COLUMN_LAYOUT) {\n return;\n }\n\n document.body.classList.toggle('is-media-viewer-open', isOpen);\n }, [isOpen]);\n\n const forceUpdate = useForceUpdate();\n useEffect(() => {\n const mql = window.matchMedia(MEDIA_VIEWER_MEDIA_QUERY);\n if (typeof mql.addEventListener === 'function') {\n mql.addEventListener('change', forceUpdate);\n } else if (typeof mql.addListener === 'function') {\n mql.addListener(forceUpdate);\n }\n\n return () => {\n if (typeof mql.removeEventListener === 'function') {\n mql.removeEventListener('change', forceUpdate);\n } else if (typeof mql.removeListener === 'function') {\n mql.removeListener(forceUpdate);\n }\n };\n }, [forceUpdate]);\n\n const prevMessage = usePrevious(message);\n const prevOrigin = usePrevious(origin);\n const prevAvatarOwner = usePrevious(avatarOwner);\n const prevBestImageData = usePrevious(bestImageData);\n const textParts = message ? renderMessageText(message) : undefined;\n const hasFooter = Boolean(textParts);\n\n useEffect(() => {\n if (isGhostAnimation && isOpen && !prevMessage && !prevAvatarOwner) {\n dispatchHeavyAnimationEvent(ANIMATION_DURATION + ANIMATION_END_DELAY);\n animateOpening(hasFooter, origin!, bestImageData!, dimensions, isVideo, message);\n }\n\n if (isGhostAnimation && !isOpen && (prevMessage || prevAvatarOwner)) {\n dispatchHeavyAnimationEvent(ANIMATION_DURATION + ANIMATION_END_DELAY);\n animateClosing(prevOrigin!, prevBestImageData!, prevMessage || undefined);\n }\n }, [\n isGhostAnimation, isOpen, origin, prevOrigin, message, prevMessage, prevAvatarOwner,\n bestImageData, prevBestImageData, dimensions, isVideo, hasFooter,\n ]);\n\n useEffect(() => {\n let timer: number | undefined;\n\n if (isZoomed) {\n setCanPanZoomWrap(true);\n } else {\n timer = window.setTimeout(() => {\n setCanPanZoomWrap(false);\n }, ANIMATION_DURATION);\n }\n\n return () => {\n if (timer) {\n window.clearTimeout(timer);\n }\n };\n }, [isZoomed]);\n\n const closeZoom = () => {\n setIsZoomed(false);\n setZoomLevel(1);\n setPanDelta({\n x: 0,\n y: 0,\n });\n };\n\n const handleZoomToggle = useCallback(() => {\n setIsZoomed(!isZoomed);\n setZoomLevel(!isZoomed ? 1.5 : 1);\n if (isZoomed) {\n setPanDelta({\n x: 0,\n y: 0,\n });\n }\n }, [isZoomed]);\n\n const handleZoomValue = useCallback((level: number, canCloseZoom = false) => {\n setZoomLevel(level);\n if (level === 1 && canCloseZoom) {\n closeZoom();\n }\n }, []);\n\n const close = useCallback(() => {\n closeMediaViewer();\n closeZoom();\n }, [closeMediaViewer]);\n\n const handleFooterClick = useCallback(() => {\n close();\n\n if (IS_SINGLE_COLUMN_LAYOUT) {\n setTimeout(() => {\n toggleChatInfo(false, { forceSyncOnIOs: true });\n focusMessage({ chatId, threadId, messageId });\n }, ANIMATION_DURATION);\n } else {\n focusMessage({ chatId, threadId, messageId });\n }\n }, [close, chatId, threadId, focusMessage, toggleChatInfo, messageId]);\n\n const handleForward = useCallback(() => {\n openForwardMenu({\n fromChatId: chatId,\n messageIds: [messageId],\n });\n closeZoom();\n }, [openForwardMenu, chatId, messageId]);\n\n const selectMessage = useCallback((id?: number) => openMediaViewer({\n chatId,\n threadId,\n messageId: id,\n origin,\n }, {\n forceOnHeavyAnimation: true,\n }), [chatId, openMediaViewer, origin, threadId]);\n\n useEffect(() => (isOpen ? captureEscKeyListener(() => {\n if (isZoomed) {\n closeZoom();\n } else {\n close();\n }\n }) : undefined), [close, isOpen, isZoomed]);\n\n useEffect(() => {\n if (isVideo && !isGif) {\n stopCurrentAudio();\n }\n }, [isGif, isVideo]);\n\n // Prevent refresh when rotating device to watch a video\n useEffect(() => {\n if (!isOpen) {\n return undefined;\n }\n\n windowSize.disableRefresh();\n\n return () => {\n windowSize.enableRefresh();\n };\n }, [isOpen]);\n\n const getMessageId = useCallback((fromId?: number, direction?: number): number | undefined => {\n if (!fromId) return undefined;\n const index = messageIds.indexOf(fromId);\n if ((direction === -1 && index > 0) || (direction === 1 && index < messageIds.length - 1)) {\n return messageIds[index + direction];\n }\n return undefined;\n }, [messageIds]);\n\n const nextMessageId = getMessageId(messageId, 1);\n const previousMessageId = getMessageId(messageId, -1);\n\n const handlePan = useCallback((x: number, y: number) => {\n setPanDelta({\n x,\n y,\n });\n }, []);\n\n const lang = useLang();\n\n useHistoryBack(isOpen, closeMediaViewer, openMediaViewer, {\n chatId,\n threadId,\n messageId,\n origin,\n avatarOwnerId: avatarOwner && avatarOwner.id,\n });\n\n useEffect(() => {\n if (!isOpen) {\n return undefined;\n }\n\n function handleKeyDown(e: KeyboardEvent) {\n switch (e.key) {\n case 'Left': // IE/Edge specific value\n case 'ArrowLeft':\n selectMessage(previousMessageId);\n break;\n\n case 'Right': // IE/Edge specific value\n case 'ArrowRight':\n selectMessage(nextMessageId);\n break;\n }\n }\n\n document.addEventListener('keydown', handleKeyDown, false);\n\n return () => {\n document.removeEventListener('keydown', handleKeyDown, false);\n };\n }, [isOpen, nextMessageId, previousMessageId, selectMessage]);\n\n useEffect(() => {\n if (isZoomed || IS_TOUCH_ENV) return undefined;\n const element = document.querySelector('.MediaViewerSlide--active');\n if (!element) {\n return undefined;\n }\n\n const shouldCloseOnVideo = isGif && !IS_IOS;\n\n return captureEvents(element, {\n // eslint-disable-next-line max-len\n excludedClosestSelector: `.backdrop, .navigation, .media-viewer-head, .Spoiler, .media-viewer-footer${!shouldCloseOnVideo ? ', .VideoPlayer' : ''}`,\n onClick: close,\n });\n }, [close, isGif, isZoomed, messageId]);\n\n function renderSenderInfo() {\n return isAvatar ? (\n \n ) : (\n \n );\n }\n\n return (\n \n
\n {IS_SINGLE_COLUMN_LAYOUT && (\n \n \n \n )}\n \n {renderSenderInfo()}\n \n \n
\n \n \n {(isActive: boolean) => (\n \n )}\n \n \n {!isFirst && !IS_TOUCH_ENV && (\n selectMessage(previousMessageId)}\n />\n )}\n {!isLast && !IS_TOUCH_ENV && (\n selectMessage(nextMessageId)}\n />\n )}\n \n \n );\n};\n\nexport default memo(withGlobal(\n (global): StateProps => {\n const {\n chatId,\n threadId,\n messageId,\n avatarOwnerId,\n profilePhotoIndex,\n origin,\n } = global.mediaViewer;\n const {\n animationLevel,\n } = global.settings.byKey;\n\n if (origin === MediaViewerOrigin.SearchResult) {\n if (!(chatId && messageId)) {\n return { animationLevel };\n }\n\n const message = selectChatMessage(global, chatId, messageId);\n if (!message) {\n return { animationLevel };\n }\n\n return {\n chatId,\n messageId,\n senderId: message.senderId,\n origin,\n message,\n animationLevel,\n };\n }\n\n if (avatarOwnerId) {\n const sender = selectUser(global, avatarOwnerId) || selectChat(global, avatarOwnerId);\n\n return {\n messageId: -1,\n senderId: avatarOwnerId,\n avatarOwner: sender,\n profilePhotoIndex: profilePhotoIndex || 0,\n animationLevel,\n origin,\n };\n }\n\n if (!(chatId && threadId && messageId)) {\n return { animationLevel };\n }\n\n let message: ApiMessage | undefined;\n if (origin && [MediaViewerOrigin.ScheduledAlbum, MediaViewerOrigin.ScheduledInline].includes(origin)) {\n message = selectScheduledMessage(global, chatId, messageId);\n } else {\n message = selectChatMessage(global, chatId, messageId);\n }\n\n if (!message) {\n return { animationLevel };\n }\n\n let chatMessages: Record | undefined;\n\n if (origin && [MediaViewerOrigin.ScheduledAlbum, MediaViewerOrigin.ScheduledInline].includes(origin)) {\n chatMessages = selectScheduledMessages(global, chatId);\n } else {\n chatMessages = selectChatMessages(global, chatId);\n }\n let collectionIds: number[] | undefined;\n\n if (origin === MediaViewerOrigin.Inline || origin === MediaViewerOrigin.Album) {\n collectionIds = selectOutlyingIds(global, chatId, threadId) || selectListedIds(global, chatId, threadId);\n } else if (origin === MediaViewerOrigin.SharedMedia) {\n const currentSearch = selectCurrentMediaSearch(global);\n const { foundIds } = (currentSearch && currentSearch.resultsByType && currentSearch.resultsByType.media) || {};\n collectionIds = foundIds;\n }\n\n return {\n chatId,\n threadId,\n messageId,\n senderId: message.senderId,\n origin,\n message,\n chatMessages,\n collectionIds,\n animationLevel,\n };\n },\n)(MediaViewer));\n","import { RefObject } from 'react';\nimport React, {\n FC, memo, useRef, useCallback,\n} from '../../lib/teact/teact';\n\nimport { CHAT_HEIGHT_PX } from '../../config';\nimport useInfiniteScroll from '../../hooks/useInfiniteScroll';\nimport useLang from '../../hooks/useLang';\nimport useKeyboardListNavigation from '../../hooks/useKeyboardListNavigation';\nimport useInputFocusOnOpen from '../../hooks/useInputFocusOnOpen';\nimport { isUserId } from '../../global/helpers';\n\nimport Loading from '../ui/Loading';\nimport Modal from '../ui/Modal';\nimport InputText from '../ui/InputText';\nimport Button from '../ui/Button';\nimport InfiniteScroll from '../ui/InfiniteScroll';\nimport ListItem from '../ui/ListItem';\nimport GroupChatInfo from './GroupChatInfo';\nimport PrivateChatInfo from './PrivateChatInfo';\n\nimport './ChatOrUserPicker.scss';\n\nexport type OwnProps = {\n currentUserId?: string;\n chatOrUserIds: string[];\n isOpen: boolean;\n filterRef: RefObject;\n filterPlaceholder: string;\n filter: string;\n loadMore?: NoneToVoidFunction;\n onFilterChange: (filter: string) => void;\n onSelectChatOrUser: (chatOrUserId: string) => void;\n onClose: NoneToVoidFunction;\n onCloseAnimationEnd?: NoneToVoidFunction;\n};\n\nconst ChatOrUserPicker: FC = ({\n isOpen,\n currentUserId,\n chatOrUserIds,\n filterRef,\n filter,\n filterPlaceholder,\n loadMore,\n onFilterChange,\n onSelectChatOrUser,\n onClose,\n onCloseAnimationEnd,\n}) => {\n const lang = useLang();\n const [viewportIds, getMore] = useInfiniteScroll(loadMore, chatOrUserIds, Boolean(filter));\n\n const resetFilter = useCallback(() => {\n onFilterChange('');\n }, [onFilterChange]);\n useInputFocusOnOpen(filterRef, isOpen, resetFilter);\n\n // eslint-disable-next-line no-null/no-null\n const containerRef = useRef(null);\n const handleFilterChange = useCallback((e: React.ChangeEvent) => {\n onFilterChange(e.currentTarget.value);\n }, [onFilterChange]);\n const handleKeyDown = useKeyboardListNavigation(containerRef, isOpen, (index) => {\n if (viewportIds && viewportIds.length > 0) {\n onSelectChatOrUser(viewportIds[index === -1 ? 0 : index]);\n }\n }, '.ListItem-button', true);\n\n const modalHeader = (\n
\n \n \n \n \n
\n );\n\n const viewportOffset = chatOrUserIds!.indexOf(viewportIds![0]);\n\n return (\n \n {viewportIds?.length ? (\n \n {viewportIds.map((id, i) => (\n onSelectChatOrUser(id)}\n >\n {isUserId(id) ? (\n \n ) : (\n \n )}\n \n ))}\n \n ) : viewportIds && !viewportIds.length ? (\n

{lang('lng_blocked_list_not_found')}

\n ) : (\n \n )}\n \n );\n};\n\nexport default memo(ChatOrUserPicker);\n","import React, {\n FC, useMemo, useState, memo, useRef, useCallback, useEffect,\n} from '../../lib/teact/teact';\nimport { getActions, getGlobal, withGlobal } from '../../global';\n\nimport { ApiChat, MAIN_THREAD_ID } from '../../api/types';\n\nimport {\n filterChatsByName,\n filterUsersByName,\n getCanPostInChat,\n sortChatIds,\n} from '../../global/helpers';\nimport { unique } from '../../util/iteratees';\nimport useLang from '../../hooks/useLang';\nimport useCurrentOrPrev from '../../hooks/useCurrentOrPrev';\nimport useFlag from '../../hooks/useFlag';\n\nimport ChatOrUserPicker from '../common/ChatOrUserPicker';\n\nexport type OwnProps = {\n isOpen: boolean;\n};\n\ntype StateProps = {\n chatsById: Record;\n activeListIds?: string[];\n archivedListIds?: string[];\n pinnedIds?: string[];\n contactIds?: string[];\n currentUserId?: string;\n};\n\nconst ForwardPicker: FC = ({\n chatsById,\n activeListIds,\n archivedListIds,\n pinnedIds,\n contactIds,\n currentUserId,\n isOpen,\n}) => {\n const {\n setForwardChatId,\n exitForwardMode,\n } = getActions();\n\n const lang = useLang();\n const [filter, setFilter] = useState('');\n // eslint-disable-next-line no-null/no-null\n const filterRef = useRef(null);\n\n const [isShown, markIsShown, unmarkIsShown] = useFlag();\n useEffect(() => {\n if (isOpen) {\n markIsShown();\n }\n }, [isOpen, markIsShown]);\n\n const chatAndContactIds = useMemo(() => {\n if (!isOpen) {\n return undefined;\n }\n\n let priorityIds = pinnedIds || [];\n if (currentUserId) {\n priorityIds = unique([currentUserId, ...priorityIds]);\n }\n\n const chatIds = [\n ...(activeListIds || []),\n ...(archivedListIds || []),\n ].filter((id) => {\n const chat = chatsById[id];\n\n return chat && getCanPostInChat(chat, MAIN_THREAD_ID);\n });\n\n // No need for expensive global updates on users, so we avoid them\n const usersById = getGlobal().users.byId;\n\n return sortChatIds(unique([\n ...filterChatsByName(lang, chatIds, chatsById, filter, currentUserId),\n ...(contactIds ? filterUsersByName(contactIds, usersById, filter) : []),\n ]), chatsById, undefined, priorityIds);\n }, [activeListIds, archivedListIds, chatsById, contactIds, currentUserId, filter, isOpen, lang, pinnedIds]);\n\n const handleSelectUser = useCallback((userId: string) => {\n setForwardChatId({ id: userId });\n }, [setForwardChatId]);\n\n const renderingChatAndContactIds = useCurrentOrPrev(chatAndContactIds, true)!;\n\n if (!isOpen && !isShown) {\n return undefined;\n }\n\n return (\n \n );\n};\n\nexport default memo(withGlobal(\n (global): StateProps => {\n const {\n chats: {\n byId: chatsById,\n listIds,\n orderedPinnedIds,\n },\n currentUserId,\n } = global;\n\n return {\n chatsById,\n activeListIds: listIds.active,\n archivedListIds: listIds.archived,\n pinnedIds: orderedPinnedIds.active,\n contactIds: global.contactList?.userIds,\n currentUserId,\n };\n },\n)(ForwardPicker));\n","import React, { FC, memo, useEffect } from '../../lib/teact/teact';\nimport { getActions, withGlobal } from '../../global';\n\nimport {\n ApiContact, ApiError, ApiInviteInfo, ApiPhoto,\n} from '../../api/types';\n\nimport getReadableErrorText from '../../util/getReadableErrorText';\nimport { pick } from '../../util/iteratees';\nimport renderText from '../common/helpers/renderText';\nimport useLang from '../../hooks/useLang';\nimport useFlag from '../../hooks/useFlag';\n\nimport Modal from '../ui/Modal';\nimport Button from '../ui/Button';\nimport Avatar from '../common/Avatar';\n\nimport './Dialogs.scss';\n\ntype StateProps = {\n dialogs: (ApiError | ApiInviteInfo)[];\n};\n\nconst Dialogs: FC = ({ dialogs }) => {\n const {\n dismissDialog,\n acceptInviteConfirmation,\n sendMessage,\n showNotification,\n } = getActions();\n const [isModalOpen, openModal, closeModal] = useFlag();\n\n const lang = useLang();\n\n useEffect(() => {\n if (dialogs.length > 0) {\n openModal();\n }\n }, [dialogs, openModal]);\n\n if (!dialogs.length) {\n return undefined;\n }\n\n function renderInviteHeader(title: string, photo?: ApiPhoto) {\n return (\n
\n {photo && }\n
\n {renderText(title)}\n
\n \n
\n );\n }\n\n const renderInvite = (invite: ApiInviteInfo) => {\n const {\n hash, title, about, participantsCount, isChannel, photo, isRequestNeeded,\n } = invite;\n\n const handleJoinClick = () => {\n acceptInviteConfirmation({\n hash,\n });\n showNotification({\n message: isChannel ? lang('RequestToJoinChannelSentDescription') : lang('RequestToJoinGroupSentDescription'),\n });\n closeModal();\n };\n\n const participantsText = isChannel\n ? lang('Subscribers', participantsCount, 'i')\n : lang('Members', participantsCount, 'i');\n\n const joinText = isChannel ? lang('ChannelJoin') : lang('JoinGroup');\n const requestToJoinText = isChannel\n ? lang('MemberRequests.RequestToJoinChannel') : lang('MemberRequests.RequestToJoinGroup');\n\n return (\n \n {participantsCount !== undefined &&

{participantsText}

}\n {about &&

{renderText(about, ['br'])}

}\n {isRequestNeeded && (\n

\n {isChannel\n ? lang('MemberRequests.RequestToJoinDescriptionChannel')\n : lang('MemberRequests.RequestToJoinDescriptionGroup')}\n

\n )}\n \n {isRequestNeeded ? requestToJoinText : joinText}\n \n \n \n );\n };\n\n const renderContactRequest = (contactRequest: ApiContact) => {\n const handleConfirm = () => {\n sendMessage({\n contact: pick(contactRequest, ['firstName', 'lastName', 'phoneNumber']),\n });\n closeModal();\n };\n\n return (\n \n {lang('AreYouSureShareMyContactInfoBot')}\n
\n \n {lang('OK')}\n \n \n
\n \n );\n };\n\n const renderError = (error: ApiError) => {\n return (\n \n {error.hasErrorKey ? getReadableErrorText(error) : renderText(error.message!, ['emoji', 'br'])}\n
\n \n
\n \n );\n };\n\n const renderDialog = (dialog: ApiError | ApiInviteInfo | ApiContact) => {\n if ('hash' in dialog) {\n return renderInvite(dialog);\n }\n\n if ('phoneNumber' in dialog) {\n return renderContactRequest(dialog);\n }\n\n return renderError(dialog);\n };\n\n return (\n
\n {Boolean(dialogs.length) && renderDialog(dialogs[dialogs.length - 1])}\n
\n );\n};\n\nfunction getErrorHeader(error: ApiError) {\n if (error.isSlowMode) {\n return 'Slowmode enabled';\n }\n\n if (!error.hasErrorKey) {\n return 'Telegram';\n }\n\n return 'Something went wrong';\n}\n\nexport default memo(withGlobal(\n (global): StateProps => pick(global, ['dialogs']),\n)(Dialogs));\n","import React, { FC, memo } from '../../lib/teact/teact';\nimport { getActions, withGlobal } from '../../global';\n\nimport { ApiNotification } from '../../api/types';\n\nimport { pick } from '../../util/iteratees';\nimport renderText from '../common/helpers/renderText';\n\nimport Notification from '../ui/Notification';\n\ntype StateProps = {\n notifications: ApiNotification[];\n};\n\nconst Notifications: FC = ({ notifications }) => {\n const { dismissNotification } = getActions();\n\n if (!notifications.length) {\n return undefined;\n }\n\n return (\n
\n {notifications.map(({ message, localId }) => (\n dismissNotification({ localId })}\n />\n ))}\n
\n );\n};\n\nexport default memo(withGlobal(\n (global): StateProps => pick(global, ['notifications']),\n)(Notifications));\n","import React, { FC, memo, useCallback } from '../../lib/teact/teact';\nimport { getActions } from '../../global';\n\nimport { ensureProtocol } from '../../util/ensureProtocol';\nimport renderText from '../common/helpers/renderText';\nimport useLang from '../../hooks/useLang';\nimport useCurrentOrPrev from '../../hooks/useCurrentOrPrev';\n\nimport ConfirmDialog from '../ui/ConfirmDialog';\n\nexport type OwnProps = {\n url?: string;\n};\n\nconst SafeLinkModal: FC = ({ url }) => {\n const { toggleSafeLinkModal } = getActions();\n\n const lang = useLang();\n\n const handleOpen = useCallback(() => {\n window.open(ensureProtocol(url));\n toggleSafeLinkModal({ url: undefined });\n }, [toggleSafeLinkModal, url]);\n\n const handleDismiss = useCallback(() => {\n toggleSafeLinkModal({ url: undefined });\n }, [toggleSafeLinkModal]);\n\n const renderingUrl = useCurrentOrPrev(url);\n\n return (\n \n );\n};\n\nexport default memo(SafeLinkModal);\n","import React, {\n FC, memo, useState, useEffect, useMemo, useCallback,\n} from '../../lib/teact/teact';\n\nimport buildClassName from '../../util/buildClassName';\nimport { formatTime, formatDateToString, getDayStart } from '../../util/dateFormat';\nimport useLang, { LangFn } from '../../hooks/useLang';\nimport usePrevious from '../../hooks/usePrevious';\nimport useFlag from '../../hooks/useFlag';\n\nimport Modal from '../ui/Modal';\nimport Button from '../ui/Button';\n\nimport './CalendarModal.scss';\n\nconst MAX_SAFE_DATE = 2147483647 * 1000; // API has int for dates\nconst MIN_SAFE_DATE = 0;\n\nexport type OwnProps = {\n selectedAt?: number;\n minAt?: number;\n maxAt?: number;\n isFutureMode?: boolean;\n isPastMode?: boolean;\n isOpen: boolean;\n withTimePicker?: boolean;\n submitButtonLabel?: string;\n secondButtonLabel?: string;\n onClose: () => void;\n onSubmit: (date: Date) => void;\n onSecondButtonClick?: NoneToVoidFunction;\n};\n\nconst WEEKDAY_LETTERS = [\n 'lng_weekday1',\n 'lng_weekday2',\n 'lng_weekday3',\n 'lng_weekday4',\n 'lng_weekday5',\n 'lng_weekday6',\n 'lng_weekday7',\n];\n\nconst CalendarModal: FC = ({\n selectedAt,\n minAt,\n maxAt,\n isFutureMode,\n isPastMode,\n isOpen,\n withTimePicker,\n submitButtonLabel,\n secondButtonLabel,\n onClose,\n onSubmit,\n onSecondButtonClick,\n}) => {\n const lang = useLang();\n const now = new Date();\n\n const minDate = useMemo(() => {\n if (isFutureMode && !minAt) return new Date();\n return new Date(Math.max(minAt || MIN_SAFE_DATE, MIN_SAFE_DATE));\n }, [isFutureMode, minAt]);\n const maxDate = useMemo(() => {\n if (isPastMode && !maxAt) return new Date();\n return new Date(Math.min(maxAt || MAX_SAFE_DATE, MAX_SAFE_DATE));\n }, [isPastMode, maxAt]);\n\n const passedSelectedDate = useMemo(() => (selectedAt ? new Date(selectedAt) : new Date()), [selectedAt]);\n const prevIsOpen = usePrevious(isOpen);\n const [isTimeInputFocused, markTimeInputAsFocused, unmarkTimeInputAsFocused] = useFlag(false);\n\n const [selectedDate, setSelectedDate] = useState(passedSelectedDate);\n const [currentMonthAndYear, setCurrentMonthAndYear] = useState(\n new Date(selectedDate.getFullYear(), selectedDate.getMonth(), 1),\n );\n const [selectedHours, setSelectedHours] = useState(\n formatInputTime(passedSelectedDate.getHours()),\n );\n const [selectedMinutes, setSelectedMinutes] = useState(\n formatInputTime(passedSelectedDate.getMinutes()),\n );\n\n const selectedDay = formatDay(selectedDate.getFullYear(), selectedDate.getMonth(), selectedDate.getDate());\n const currentYear = currentMonthAndYear.getFullYear();\n const currentMonth = currentMonthAndYear.getMonth();\n\n useEffect(() => {\n if (!prevIsOpen && isOpen) {\n setSelectedDate(passedSelectedDate);\n setCurrentMonthAndYear(new Date(passedSelectedDate.getFullYear(), passedSelectedDate.getMonth(), 1));\n if (withTimePicker) {\n setSelectedHours(formatInputTime(passedSelectedDate.getHours()));\n setSelectedMinutes(formatInputTime(passedSelectedDate.getMinutes()));\n }\n }\n }, [passedSelectedDate, isOpen, prevIsOpen, withTimePicker]);\n\n useEffect(() => {\n if (isFutureMode && !isTimeInputFocused && selectedDate.getTime() < minDate.getTime()) {\n setSelectedDate(minDate);\n setSelectedHours(formatInputTime(minDate.getHours()));\n setSelectedMinutes(formatInputTime(minDate.getMinutes()));\n }\n }, [isFutureMode, isTimeInputFocused, minDate, selectedDate]);\n\n useEffect(() => {\n if (isPastMode && !isTimeInputFocused && selectedDate.getTime() > maxDate.getTime()) {\n setSelectedDate(maxDate);\n setSelectedHours(formatInputTime(maxDate.getHours()));\n setSelectedMinutes(formatInputTime(maxDate.getMinutes()));\n }\n }, [isFutureMode, isPastMode, isTimeInputFocused, maxDate, minDate, selectedDate]);\n\n useEffect(() => {\n if (selectedAt) {\n const newSelectedDate = new Date(selectedAt);\n setSelectedDate(newSelectedDate);\n setSelectedHours(formatInputTime(newSelectedDate.getHours()));\n setSelectedMinutes(formatInputTime(newSelectedDate.getMinutes()));\n }\n }, [selectedAt]);\n\n const shouldDisableNextMonth = (isPastMode && currentYear >= now.getFullYear() && currentMonth >= now.getMonth())\n || (maxDate && currentYear >= maxDate.getFullYear() && currentMonth >= maxDate.getMonth());\n const shouldDisablePrevMonth = isFutureMode && currentYear <= now.getFullYear() && currentMonth <= now.getMonth();\n\n const { prevMonthGrid, currentMonthGrid, nextMonthGrid } = useMemo(() => (\n buildCalendarGrid(currentYear, currentMonth)\n ), [currentMonth, currentYear]);\n\n const submitLabel = useMemo(() => {\n return submitButtonLabel || formatSubmitLabel(lang, selectedDate);\n }, [lang, selectedDate, submitButtonLabel]);\n\n function handlePrevMonth() {\n setCurrentMonthAndYear((d) => {\n const dateCopy = new Date(d);\n dateCopy.setMonth(dateCopy.getMonth() - 1);\n\n return dateCopy;\n });\n }\n\n function handleNextMonth() {\n setCurrentMonthAndYear((d) => {\n const dateCopy = new Date(d);\n dateCopy.setMonth(dateCopy.getMonth() + 1);\n\n return dateCopy;\n });\n }\n\n function handleDateSelect(date: number) {\n setSelectedDate((d) => {\n const dateCopy = new Date(d);\n dateCopy.setDate(date);\n dateCopy.setMonth(currentMonth);\n dateCopy.setFullYear(currentYear);\n\n return dateCopy;\n });\n }\n\n const handleSubmit = useCallback(() => {\n onSubmit(selectedDate);\n }, [onSubmit, selectedDate]);\n\n const handleChangeHours = useCallback((e: React.ChangeEvent) => {\n const value = e.target.value.replace(/[^\\d]+/g, '');\n if (!value.length) {\n setSelectedHours('');\n e.target.value = '';\n return;\n }\n\n const hours = Math.max(0, Math.min(Number(value), 23));\n\n const date = new Date(selectedDate.getTime());\n date.setHours(hours);\n setSelectedDate(date);\n\n const hoursStr = formatInputTime(hours);\n setSelectedHours(hoursStr);\n e.target.value = hoursStr;\n }, [selectedDate]);\n\n const handleChangeMinutes = useCallback((e: React.ChangeEvent) => {\n const value = e.target.value.replace(/[^\\d]+/g, '');\n if (!value.length) {\n setSelectedMinutes('');\n e.target.value = '';\n return;\n }\n\n const minutes = Math.max(0, Math.min(Number(value), 59));\n\n const date = new Date(selectedDate.getTime());\n date.setMinutes(minutes);\n setSelectedDate(date);\n\n const minutesStr = formatInputTime(minutes);\n setSelectedMinutes(minutesStr);\n e.target.value = minutesStr;\n }, [selectedDate]);\n\n function renderTimePicker() {\n return (\n
\n \n :\n \n
\n );\n }\n\n return (\n \n
\n
\n \n \n \n\n

\n {lang(`lng_month${currentMonth + 1}`)}\n {' '}\n {currentYear}\n

\n\n \n \n \n\n \n \n \n
\n
\n\n
\n
\n {WEEKDAY_LETTERS.map((day) => (\n
\n {lang(day)}\n
\n ))}\n {prevMonthGrid.map((gridDate) => (\n
{gridDate}
\n ))}\n {currentMonthGrid.map((gridDate) => (\n handleDateSelect(gridDate)}\n className={buildClassName(\n 'day-button',\n isDisabledDay(\n currentYear, currentMonth, gridDate, minDate, maxDate,\n )\n ? 'disabled'\n : `${gridDate ? 'clickable' : ''}`,\n selectedDay === formatDay(currentYear, currentMonth, gridDate) && 'selected',\n )}\n >\n {Boolean(gridDate) && (\n {gridDate}\n )}\n
\n ))}\n {nextMonthGrid.map((gridDate) => (\n
{gridDate}
\n ))}\n
\n \n\n {withTimePicker && renderTimePicker()}\n\n
\n \n {secondButtonLabel && (\n \n )}\n
\n \n );\n};\n\nfunction buildCalendarGrid(year: number, month: number) {\n const prevMonthGrid: number[] = [];\n const currentMonthGrid: number[] = [];\n const nextMonthGrid: number[] = [];\n\n const date = new Date();\n date.setDate(1);\n date.setMonth(month);\n date.setFullYear(year);\n const firstDay = date.getDay() || 7;\n const totalDaysInPrevMonth = new Date(year, month, 0).getDate();\n\n for (let i = 1; i < firstDay; i++) {\n prevMonthGrid.push(totalDaysInPrevMonth - firstDay + i + 1);\n }\n\n while (date.getMonth() === month) {\n const gridDate = date.getDate();\n currentMonthGrid.push(gridDate);\n date.setDate(gridDate + 1);\n }\n\n const lastRowDaysCount = (currentMonthGrid.length + prevMonthGrid.length) % 7;\n if (lastRowDaysCount > 0) {\n for (let i = 1; i <= 7 - lastRowDaysCount; i++) {\n nextMonthGrid.push(i);\n }\n }\n\n return { prevMonthGrid, currentMonthGrid, nextMonthGrid };\n}\n\nfunction isDisabledDay(year: number, month: number, day: number, minDate?: Date, maxDate?: Date) {\n const selectedDay = new Date(year, month, day);\n const fixedMinDate = minDate && getDayStart(minDate);\n const fixedMaxDate = maxDate && getDayStart(maxDate);\n\n if (fixedMaxDate && selectedDay > fixedMaxDate) {\n return true;\n } else if (fixedMinDate && selectedDay < fixedMinDate) {\n return true;\n }\n\n return false;\n}\n\nfunction formatInputTime(value: string | number) {\n return String(value).padStart(2, '0');\n}\n\nfunction formatDay(year: number, month: number, day: number) {\n return `${year}-${month + 1}-${day}`;\n}\n\nfunction formatSubmitLabel(lang: LangFn, date: Date) {\n const day = formatDateToString(date, lang.code);\n const today = formatDateToString(new Date(), lang.code);\n\n if (day === today) {\n return lang('Conversation.ScheduleMessage.SendToday', formatTime(lang, date));\n }\n\n return lang('Conversation.ScheduleMessage.SendOn', [day, formatTime(lang, date)]);\n}\n\nexport default memo(CalendarModal);\n","import React, { FC, memo, useCallback } from '../../lib/teact/teact';\nimport { getActions, withGlobal } from '../../global';\n\nimport useLang from '../../hooks/useLang';\n\nimport CalendarModal from '../common/CalendarModal';\n\nexport type OwnProps = {\n isOpen: boolean;\n};\n\ntype StateProps = {\n selectedAt?: number;\n};\n\nconst HistoryCalendar: FC = ({\n isOpen, selectedAt,\n}) => {\n const { searchMessagesByDate, closeHistoryCalendar } = getActions();\n\n const handleJumpToDate = useCallback((date: Date) => {\n searchMessagesByDate({ timestamp: date.valueOf() / 1000 });\n closeHistoryCalendar();\n }, [closeHistoryCalendar, searchMessagesByDate]);\n\n const lang = useLang();\n\n return (\n \n );\n};\n\nexport default memo(withGlobal(\n (global): StateProps => {\n return { selectedAt: global.historyCalendarSelectedAt };\n },\n)(HistoryCalendar));\n","import React, {\n FC, memo, useCallback, useEffect, useRef, useState,\n} from '../../lib/teact/teact';\nimport { getActions, withGlobal } from '../../global';\n\nimport { ApiCountryCode, ApiUser, ApiUserStatus } from '../../api/types';\n\nimport { IS_TOUCH_ENV } from '../../util/environment';\nimport { getUserStatus } from '../../global/helpers';\nimport { selectUser, selectUserStatus } from '../../global/selectors';\nimport renderText from '../common/helpers/renderText';\nimport { formatPhoneNumberWithCode } from '../../util/phoneNumber';\nimport useLang from '../../hooks/useLang';\nimport useFlag from '../../hooks/useFlag';\nimport useCurrentOrPrev from '../../hooks/useCurrentOrPrev';\n\nimport Modal from '../ui/Modal';\nimport Avatar from '../common/Avatar';\nimport InputText from '../ui/InputText';\nimport Checkbox from '../ui/Checkbox';\nimport Button from '../ui/Button';\n\nimport './NewContactModal.scss';\n\nconst ANIMATION_DURATION = 200;\n\nexport type OwnProps = {\n isOpen: boolean;\n userId?: string;\n isByPhoneNumber?: boolean;\n};\n\ntype StateProps = {\n user?: ApiUser;\n userStatus?: ApiUserStatus;\n phoneCodeList: ApiCountryCode[];\n serverTimeOffset?: number;\n};\n\nconst NewContactModal: FC = ({\n isOpen,\n userId,\n isByPhoneNumber,\n user,\n userStatus,\n phoneCodeList,\n serverTimeOffset,\n}) => {\n const { updateContact, importContact, closeNewContactDialog } = getActions();\n\n const lang = useLang();\n const renderingUser = useCurrentOrPrev(user);\n const renderingIsByPhoneNumber = useCurrentOrPrev(isByPhoneNumber);\n // eslint-disable-next-line no-null/no-null\n const inputRef = useRef(null);\n\n const [isShown, markIsShown, unmarkIsShown] = useFlag();\n const [firstName, setFirstName] = useState(renderingUser?.firstName ?? '');\n const [lastName, setLastName] = useState(renderingUser?.lastName ?? '');\n const [phone, setPhone] = useState(renderingUser?.phoneNumber ?? '');\n const [shouldSharePhoneNumber, setShouldSharePhoneNumber] = useState(true);\n const canBeSubmitted = Boolean(firstName && (!isByPhoneNumber || phone));\n\n useEffect(() => {\n if (isOpen) {\n markIsShown();\n setFirstName(renderingUser?.firstName ?? '');\n setLastName(renderingUser?.lastName ?? '');\n setPhone(renderingUser?.phoneNumber ?? '');\n setShouldSharePhoneNumber(true);\n }\n }, [isOpen, markIsShown, renderingUser?.firstName, renderingUser?.lastName, renderingUser?.phoneNumber]);\n\n useEffect(() => {\n if (!IS_TOUCH_ENV && isShown) {\n setTimeout(() => { inputRef.current?.focus(); }, ANIMATION_DURATION);\n }\n }, [isShown]);\n\n const handleFirstNameChange = useCallback((e: React.ChangeEvent) => {\n setFirstName(e.target.value);\n }, []);\n\n const handlePhoneChange = useCallback((e: React.ChangeEvent) => {\n setPhone(formatPhoneNumberWithCode(phoneCodeList, e.target.value));\n }, [phoneCodeList]);\n\n const handleLastNameChange = useCallback((e: React.ChangeEvent) => {\n setLastName(e.target.value);\n }, []);\n\n const handleClose = useCallback(() => {\n closeNewContactDialog();\n setFirstName('');\n setLastName('');\n setPhone('');\n }, [closeNewContactDialog]);\n\n const handleSubmit = useCallback(() => {\n if (isByPhoneNumber || !userId) {\n importContact({\n firstName,\n lastName,\n phoneNumber: phone,\n });\n } else {\n updateContact({\n userId,\n firstName,\n lastName,\n shouldSharePhoneNumber,\n });\n }\n }, [firstName, importContact, isByPhoneNumber, lastName, phone, shouldSharePhoneNumber, updateContact, userId]);\n\n if (!isOpen && !isShown) {\n return undefined;\n }\n\n function renderAddContact() {\n return (\n <>\n
\n \n
\n

\n {renderingUser?.phoneNumber\n ? formatPhoneNumberWithCode(phoneCodeList, renderingUser.phoneNumber)\n : lang('MobileHidden')}\n

\n \n {getUserStatus(lang, renderingUser!, userStatus, serverTimeOffset!)}\n \n
\n
\n \n \n

\n {renderText(lang('NewContact.Phone.Hidden.Text', renderingUser?.firstName), ['emoji', 'simple_markdown'])}\n

\n \n

\n {renderText(lang('AddContact.SharedContactExceptionInfo', renderingUser?.firstName))}\n

\n \n );\n }\n\n function renderCreateContact() {\n return (\n
\n \n
\n \n \n \n
\n
\n );\n }\n\n return (\n \n {renderingUser && renderAddContact()}\n {renderingIsByPhoneNumber && renderCreateContact()}\n
\n \n {lang('Cancel')}\n \n \n {lang('Done')}\n \n
\n \n );\n};\n\nexport default memo(withGlobal(\n (global, { userId }): StateProps => {\n return {\n user: userId ? selectUser(global, userId) : undefined,\n userStatus: userId ? selectUserStatus(global, userId) : undefined,\n serverTimeOffset: global.serverTimeOffset,\n phoneCodeList: global.countryList.phoneCodes,\n };\n },\n)(NewContactModal));\n","import React, { FC, useCallback, memo } from '../../lib/teact/teact';\nimport { getActions, withGlobal } from '../../global';\n\nimport { ApiMessage } from '../../api/types';\nimport { IAlbum } from '../../types';\n\nimport {\n selectAllowedMessageActions,\n selectChat,\n selectCurrentMessageList,\n selectUser,\n} from '../../global/selectors';\nimport {\n isUserId,\n getUserFirstOrLastName,\n getPrivateChatUserId,\n isChatBasicGroup,\n isChatSuperGroup,\n} from '../../global/helpers';\nimport renderText from './helpers/renderText';\nimport useLang from '../../hooks/useLang';\n\nimport Modal from '../ui/Modal';\nimport Button from '../ui/Button';\n\nexport type OwnProps = {\n isOpen: boolean;\n isSchedule: boolean;\n message: ApiMessage;\n album?: IAlbum;\n onClose: () => void;\n};\n\ntype StateProps = {\n canDeleteForAll?: boolean;\n contactName?: string;\n willDeleteForCurrentUserOnly?: boolean;\n willDeleteForAll?: boolean;\n};\n\nconst DeleteMessageModal: FC = ({\n isOpen,\n isSchedule,\n message,\n album,\n canDeleteForAll,\n contactName,\n willDeleteForCurrentUserOnly,\n willDeleteForAll,\n onClose,\n}) => {\n const {\n deleteMessages,\n deleteScheduledMessages,\n } = getActions();\n\n const handleDeleteMessageForAll = useCallback(() => {\n const messageIds = album?.messages\n ? album.messages.map(({ id }) => id)\n : [message.id];\n deleteMessages({ messageIds, shouldDeleteForAll: true });\n onClose();\n }, [deleteMessages, message.id, onClose, album]);\n\n const handleDeleteMessageForSelf = useCallback(() => {\n const messageIds = album?.messages\n ? album.messages.map(({ id }) => id)\n : [message.id];\n if (isSchedule) {\n deleteScheduledMessages({ messageIds });\n } else {\n deleteMessages({\n messageIds,\n shouldDeleteForAll: false,\n });\n }\n onClose();\n }, [album, message.id, isSchedule, onClose, deleteScheduledMessages, deleteMessages]);\n\n const lang = useLang();\n\n return (\n \n

{lang('AreYouSureDeleteSingleMessage')}

\n {willDeleteForCurrentUserOnly && (\n

{lang('lng_delete_for_me_chat_hint', 1, 'i')}

\n )}\n {willDeleteForAll && (\n

{lang('lng_delete_for_everyone_hint', 1, 'i')}

\n )}\n {canDeleteForAll && (\n \n )}\n \n \n \n );\n};\n\nexport default memo(withGlobal(\n (global, { message, isSchedule }): StateProps => {\n const { threadId } = selectCurrentMessageList(global) || {};\n const { canDeleteForAll } = (threadId && selectAllowedMessageActions(global, message, threadId)) || {};\n const chat = selectChat(global, message.chatId);\n const contactName = chat && isUserId(chat.id)\n ? getUserFirstOrLastName(selectUser(global, getPrivateChatUserId(chat)!))\n : undefined;\n\n const willDeleteForCurrentUserOnly = chat && isChatBasicGroup(chat) && !canDeleteForAll;\n const willDeleteForAll = chat && isChatSuperGroup(chat);\n\n return {\n canDeleteForAll: !isSchedule && canDeleteForAll,\n contactName,\n willDeleteForCurrentUserOnly,\n willDeleteForAll,\n };\n },\n)(DeleteMessageModal));\n","import React, { FC, useCallback, memo } from '../../lib/teact/teact';\nimport { getActions, withGlobal } from '../../global';\n\nimport { selectChat, selectIsChatWithSelf, selectUser } from '../../global/selectors';\nimport {\n isUserId,\n getUserFirstOrLastName,\n getPrivateChatUserId,\n isChatBasicGroup,\n isChatSuperGroup,\n isChatChannel,\n} from '../../global/helpers';\nimport useLang from '../../hooks/useLang';\nimport renderText from './helpers/renderText';\n\nimport Modal from '../ui/Modal';\nimport Button from '../ui/Button';\n\nexport type OwnProps = {\n isOpen: boolean;\n chatId: string;\n messageId: number;\n onClose: () => void;\n};\n\ntype StateProps = {\n isChannel: boolean;\n isPrivateChat: boolean;\n isChatWithSelf: boolean;\n isGroup: boolean;\n isSuperGroup: boolean;\n canPinForAll: boolean;\n contactName?: string;\n};\n\nconst PinMessageModal: FC = ({\n isOpen,\n messageId,\n chatId,\n isChannel,\n isGroup,\n isSuperGroup,\n canPinForAll,\n contactName,\n onClose,\n}) => {\n const { pinMessage } = getActions();\n\n const handlePinMessageForAll = useCallback(() => {\n pinMessage({\n chatId, messageId, isUnpin: false,\n });\n onClose();\n }, [pinMessage, chatId, messageId, onClose]);\n\n const handlePinMessage = useCallback(() => {\n pinMessage({\n chatId, messageId, isUnpin: false, isOneSide: true, isSilent: true,\n });\n onClose();\n }, [chatId, messageId, onClose, pinMessage]);\n\n const lang = useLang();\n\n function renderMessage() {\n if (isChannel) {\n return lang('PinMessageAlertChannel');\n }\n\n if (isGroup || isSuperGroup) {\n return lang('PinMessageAlert');\n }\n\n return lang('PinMessageAlertChat');\n }\n\n return (\n \n

{renderMessage()}

\n \n {canPinForAll && (\n \n )}\n \n \n );\n};\n\nexport default memo(withGlobal(\n (global, { chatId }): StateProps => {\n const isPrivateChat = isUserId(chatId);\n const isChatWithSelf = selectIsChatWithSelf(global, chatId);\n const chat = selectChat(global, chatId);\n const isChannel = Boolean(chat) && isChatChannel(chat);\n const isGroup = Boolean(chat) && isChatBasicGroup(chat);\n const isSuperGroup = Boolean(chat) && isChatSuperGroup(chat);\n const canPinForAll = (isPrivateChat && !isChatWithSelf) || isSuperGroup || isGroup;\n const contactName = chat && isUserId(chat.id)\n ? getUserFirstOrLastName(selectUser(global, getPrivateChatUserId(chat)!))\n : undefined;\n\n return {\n isPrivateChat,\n isChatWithSelf,\n isChannel,\n isGroup,\n isSuperGroup,\n canPinForAll,\n contactName,\n };\n },\n)(PinMessageModal));\n","import React, { FC, memo } from '../../lib/teact/teact';\n\nimport useLang from '../../hooks/useLang';\n\nimport Modal from '../ui/Modal';\nimport Button from '../ui/Button';\n\nexport type OwnProps = {\n isOpen: boolean;\n chatId?: string;\n pinnedMessagesCount?: number;\n onClose: () => void;\n onUnpin: () => void;\n};\n\nconst UnpinAllMessagesModal: FC = ({\n isOpen,\n pinnedMessagesCount = 0,\n onClose,\n onUnpin,\n}) => {\n const lang = useLang();\n\n return (\n \n

{lang('Chat.UnpinAllMessagesConfirmation', pinnedMessagesCount, 'i')}

\n \n \n \n );\n};\n\nexport default memo(UnpinAllMessagesModal);\n","import { useEffect } from '../../../lib/teact/teact';\nimport { IS_MAC_OS } from '../../../util/environment';\nimport getKeyFromEvent from '../../../util/getKeyFromEvent';\n\nconst useCopySelectedMessages = (isActive: boolean, copySelectedMessages: NoneToVoidFunction) => {\n useEffect(() => {\n function handleCopy(e: KeyboardEvent) {\n if (((IS_MAC_OS && e.metaKey) || (!IS_MAC_OS && e.ctrlKey)) && getKeyFromEvent(e) === 'c') {\n e.preventDefault();\n copySelectedMessages();\n }\n }\n\n if (isActive) {\n document.addEventListener('keydown', handleCopy, false);\n }\n\n return () => {\n document.removeEventListener('keydown', handleCopy, false);\n };\n }, [copySelectedMessages, isActive]);\n};\n\nexport default useCopySelectedMessages;\n","import React, {\n FC, useCallback, memo, useEffect,\n} from '../../lib/teact/teact';\nimport { getActions, withGlobal } from '../../global';\n\nimport { selectCanDeleteSelectedMessages, selectCurrentChat, selectUser } from '../../global/selectors';\nimport {\n isUserId,\n getUserFirstOrLastName,\n getPrivateChatUserId,\n isChatBasicGroup,\n isChatSuperGroup,\n} from '../../global/helpers';\nimport renderText from '../common/helpers/renderText';\nimport useLang from '../../hooks/useLang';\nimport usePrevious from '../../hooks/usePrevious';\n\nimport Modal from '../ui/Modal';\nimport Button from '../ui/Button';\n\nexport type OwnProps = {\n isOpen: boolean;\n isSchedule: boolean;\n onClose: () => void;\n};\n\ntype StateProps = {\n selectedMessageIds?: number[];\n canDeleteForAll?: boolean;\n contactName?: string;\n willDeleteForCurrentUserOnly?: boolean;\n willDeleteForAll?: boolean;\n};\n\nconst DeleteSelectedMessageModal: FC = ({\n isOpen,\n isSchedule,\n selectedMessageIds,\n canDeleteForAll,\n contactName,\n willDeleteForCurrentUserOnly,\n willDeleteForAll,\n onClose,\n}) => {\n const {\n deleteMessages,\n deleteScheduledMessages,\n exitMessageSelectMode,\n } = getActions();\n\n const prevIsOpen = usePrevious(isOpen);\n\n const handleDeleteMessageForAll = useCallback(() => {\n onClose();\n deleteMessages({ messageIds: selectedMessageIds, shouldDeleteForAll: true });\n }, [deleteMessages, selectedMessageIds, onClose]);\n\n const handleDeleteMessageForSelf = useCallback(() => {\n if (isSchedule) {\n deleteScheduledMessages({ messageIds: selectedMessageIds });\n } else {\n deleteMessages({ messageIds: selectedMessageIds, shouldDeleteForAll: false });\n }\n\n onClose();\n }, [isSchedule, onClose, deleteScheduledMessages, selectedMessageIds, deleteMessages]);\n\n const lang = useLang();\n\n // Returning `undefined` from FC instead of `` doesn't trigger useHistoryBack\n useEffect(() => {\n if (!isOpen && prevIsOpen) {\n exitMessageSelectMode();\n }\n }, [exitMessageSelectMode, isOpen, prevIsOpen]);\n\n if (!selectedMessageIds) {\n return undefined;\n }\n\n return (\n \n

{lang('AreYouSureDeleteFewMessages')}

\n {willDeleteForCurrentUserOnly && (\n

This will delete them just for you, not for other participants in the chat.

\n )}\n {willDeleteForAll && (\n

This will delete them for everyone in this chat.

\n )}\n {canDeleteForAll && (\n \n )}\n \n \n
\n );\n};\n\nexport default memo(withGlobal(\n (global, { isSchedule }): StateProps => {\n const { messageIds: selectedMessageIds } = global.selectedMessages || {};\n const { canDeleteForAll } = selectCanDeleteSelectedMessages(global);\n const chat = selectCurrentChat(global);\n const contactName = chat && isUserId(chat.id)\n ? getUserFirstOrLastName(selectUser(global, getPrivateChatUserId(chat)!))\n : undefined;\n\n const willDeleteForCurrentUserOnly = chat && isChatBasicGroup(chat) && !canDeleteForAll;\n const willDeleteForAll = chat && isChatSuperGroup(chat);\n\n return {\n selectedMessageIds,\n canDeleteForAll: !isSchedule && canDeleteForAll,\n contactName,\n willDeleteForCurrentUserOnly,\n willDeleteForAll,\n };\n },\n)(DeleteSelectedMessageModal));\n","import { ChangeEvent } from 'react';\n\nimport React, {\n FC, memo, useCallback, useState,\n} from '../../lib/teact/teact';\nimport { getActions } from '../../global';\n\nimport { ApiReportReason } from '../../api/types';\n\nimport useLang from '../../hooks/useLang';\n\nimport Modal from '../ui/Modal';\nimport Button from '../ui/Button';\nimport RadioGroup from '../ui/RadioGroup';\nimport InputText from '../ui/InputText';\n\nexport type OwnProps = {\n isOpen: boolean;\n messageIds?: number[];\n onClose: () => void;\n};\n\nconst ReportMessageModal: FC = ({\n isOpen,\n messageIds,\n onClose,\n}) => {\n const {\n reportMessages,\n exitMessageSelectMode,\n } = getActions();\n\n const [selectedReason, setSelectedReason] = useState('spam');\n const [description, setDescription] = useState('');\n\n const handleReport = useCallback(() => {\n reportMessages({ messageIds, reason: selectedReason, description });\n exitMessageSelectMode();\n onClose();\n }, [description, exitMessageSelectMode, messageIds, onClose, reportMessages, selectedReason]);\n\n const handleSelectReason = useCallback((value: string) => {\n setSelectedReason(value as ApiReportReason);\n }, []);\n\n const handleDescriptionChange = useCallback((e: ChangeEvent) => {\n setDescription(e.target.value);\n }, []);\n\n const lang = useLang();\n\n const REPORT_OPTIONS: { value: ApiReportReason; label: string }[] = [\n { value: 'spam', label: lang('lng_report_reason_spam') },\n { value: 'violence', label: lang('lng_report_reason_violence') },\n { value: 'pornography', label: lang('lng_report_reason_pornography') },\n { value: 'childAbuse', label: lang('lng_report_reason_child_abuse') },\n { value: 'copyright', label: lang('ReportPeer.ReasonCopyright') },\n { value: 'illegalDrugs', label: 'Illegal Drugs' },\n { value: 'personalDetails', label: 'Personal Details' },\n { value: 'other', label: lang('lng_report_reason_other') },\n ];\n\n if (!messageIds) {\n return undefined;\n }\n\n return (\n \n \n \n \n \n \n );\n};\n\nexport default memo(ReportMessageModal);\n","import React, {\n FC, memo, useCallback, useEffect,\n} from '../../lib/teact/teact';\nimport { getActions, withGlobal } from '../../global';\n\nimport { MessageListType } from '../../global/types';\n\nimport {\n selectCanDeleteSelectedMessages,\n selectCanDownloadSelectedMessages,\n selectCanReportSelectedMessages,\n selectCurrentMessageList,\n selectHasProtectedMessage,\n selectSelectedMessagesCount,\n} from '../../global/selectors';\nimport useFlag from '../../hooks/useFlag';\nimport captureKeyboardListeners from '../../util/captureKeyboardListeners';\nimport buildClassName from '../../util/buildClassName';\nimport usePrevious from '../../hooks/usePrevious';\nimport useLang from '../../hooks/useLang';\nimport useCopySelectedMessages from './hooks/useCopySelectedMessages';\n\nimport Button from '../ui/Button';\n\nimport DeleteSelectedMessageModal from './DeleteSelectedMessageModal';\nimport ReportMessageModal from '../common/ReportMessageModal';\n\nimport './MessageSelectToolbar.scss';\n\nexport type OwnProps = {\n isActive?: boolean;\n canPost?: boolean;\n messageListType?: MessageListType;\n};\n\ntype StateProps = {\n isSchedule: boolean;\n selectedMessagesCount?: number;\n canDeleteMessages?: boolean;\n canReportMessages?: boolean;\n canDownloadMessages?: boolean;\n hasProtectedMessage?: boolean;\n selectedMessageIds?: number[];\n};\n\nconst MessageSelectToolbar: FC = ({\n canPost,\n isActive,\n messageListType,\n isSchedule,\n selectedMessagesCount,\n canDeleteMessages,\n canReportMessages,\n canDownloadMessages,\n hasProtectedMessage,\n selectedMessageIds,\n}) => {\n const {\n exitMessageSelectMode,\n openForwardMenuForSelectedMessages,\n downloadSelectedMessages,\n copySelectedMessages,\n } = getActions();\n\n const [isDeleteModalOpen, openDeleteModal, closeDeleteModal] = useFlag();\n const [isReportModalOpen, openReportModal, closeReportModal] = useFlag();\n\n useCopySelectedMessages(Boolean(isActive), copySelectedMessages);\n useEffect(() => {\n return isActive && !isDeleteModalOpen && !isReportModalOpen\n ? captureKeyboardListeners({\n onBackspace: openDeleteModal,\n onDelete: openDeleteModal,\n onEsc: exitMessageSelectMode,\n })\n : undefined;\n }, [isActive, isDeleteModalOpen, isReportModalOpen, openDeleteModal, exitMessageSelectMode]);\n\n const handleCopy = useCallback(() => {\n copySelectedMessages();\n exitMessageSelectMode();\n }, [copySelectedMessages, exitMessageSelectMode]);\n\n const handleDownload = useCallback(() => {\n downloadSelectedMessages();\n exitMessageSelectMode();\n }, [downloadSelectedMessages, exitMessageSelectMode]);\n\n const prevSelectedMessagesCount = usePrevious(selectedMessagesCount || undefined, true);\n const renderingSelectedMessagesCount = isActive ? selectedMessagesCount : prevSelectedMessagesCount;\n\n const lang = useLang();\n\n const formattedMessagesCount = lang('VoiceOver.Chat.MessagesSelected', renderingSelectedMessagesCount, 'i');\n\n const className = buildClassName(\n 'MessageSelectToolbar',\n canPost && 'with-composer',\n isActive && 'shown',\n );\n\n const renderButton = (\n icon: string, label: string, onClick: AnyToVoidFunction, disabled?: boolean, destructive?: boolean,\n ) => {\n return (\n \n \n \n );\n };\n\n return (\n
\n
\n \n \n \n \n {formattedMessagesCount}\n \n\n {Boolean(selectedMessagesCount) && (\n
\n {messageListType !== 'scheduled' && (\n renderButton(\n 'forward', lang('Chat.ForwardActionHeader'), openForwardMenuForSelectedMessages, hasProtectedMessage,\n )\n )}\n {canReportMessages && (\n renderButton('flag', lang('Conversation.ReportMessages'), openReportModal)\n )}\n {canDownloadMessages && (\n renderButton('download', lang('lng_media_download'), handleDownload, hasProtectedMessage)\n )}\n {renderButton('copy', lang('lng_context_copy_selected_items'), handleCopy, hasProtectedMessage)}\n {renderButton('delete', lang('EditAdminGroupDeleteMessages'), openDeleteModal, !canDeleteMessages, true)}\n
\n )}\n
\n \n \n
\n );\n};\n\nexport default memo(withGlobal(\n (global): StateProps => {\n const { type: messageListType, chatId } = selectCurrentMessageList(global) || {};\n const { canDelete } = selectCanDeleteSelectedMessages(global);\n const canReport = selectCanReportSelectedMessages(global);\n const canDownload = selectCanDownloadSelectedMessages(global);\n const { messageIds: selectedMessageIds } = global.selectedMessages || {};\n const hasProtectedMessage = chatId ? selectHasProtectedMessage(global, chatId, selectedMessageIds) : false;\n\n return {\n isSchedule: messageListType === 'scheduled',\n selectedMessagesCount: selectSelectedMessagesCount(global),\n canDeleteMessages: canDelete,\n canReportMessages: canReport,\n canDownloadMessages: canDownload,\n selectedMessageIds,\n hasProtectedMessage,\n };\n },\n)(MessageSelectToolbar));\n","import React, { FC, useCallback, memo } from '../../lib/teact/teact';\nimport { getActions, withGlobal } from '../../global';\n\nimport useLang from '../../hooks/useLang';\nimport { selectChatMessage } from '../../global/selectors';\nimport useCurrentOrPrev from '../../hooks/useCurrentOrPrev';\n\nimport Modal from '../ui/Modal';\nimport Button from '../ui/Button';\nimport PrivateChatInfo from './PrivateChatInfo';\nimport ListItem from '../ui/ListItem';\n\nexport type OwnProps = {\n isOpen: boolean;\n};\n\nexport type StateProps = {\n memberIds?: string[];\n};\n\nconst CLOSE_ANIMATION_DURATION = 100;\n\nconst SeenByModal: FC = ({\n isOpen,\n memberIds,\n}) => {\n const {\n openChat,\n closeSeenByModal,\n } = getActions();\n\n const lang = useLang();\n\n const handleClick = useCallback((userId: string) => {\n closeSeenByModal();\n\n setTimeout(() => {\n openChat({ id: userId });\n }, CLOSE_ANIMATION_DURATION);\n }, [closeSeenByModal, openChat]);\n\n const renderingMemberIds = useCurrentOrPrev(memberIds, true);\n\n return (\n \n
\n {renderingMemberIds && renderingMemberIds.map((userId) => (\n handleClick(userId)}\n >\n \n \n ))}\n
\n \n {lang('Close')}\n \n \n );\n};\n\nexport default memo(withGlobal(\n (global): StateProps => {\n const { chatId, messageId } = global.seenByModal || {};\n if (!chatId || !messageId) {\n return {};\n }\n\n return {\n memberIds: selectChatMessage(global, chatId, messageId)?.seenByUserIds,\n };\n },\n)(SeenByModal));\n","import React, {\n FC, useCallback, memo, useMemo, useEffect, useState, useRef,\n} from '../../lib/teact/teact';\nimport { getActions, getGlobal, withGlobal } from '../../global';\n\nimport { ApiMessage } from '../../api/types';\nimport { LoadMoreDirection } from '../../types';\n\nimport useLang from '../../hooks/useLang';\nimport { selectChatMessage } from '../../global/selectors';\nimport useInfiniteScroll from '../../hooks/useInfiniteScroll';\nimport { getUserFullName } from '../../global/helpers';\nimport renderText from '../common/helpers/renderText';\nimport useFlag from '../../hooks/useFlag';\nimport buildClassName from '../../util/buildClassName';\nimport { formatIntegerCompact } from '../../util/textFormat';\nimport { unique } from '../../util/iteratees';\n\nimport InfiniteScroll from '../ui/InfiniteScroll';\nimport Modal from '../ui/Modal';\nimport Button from '../ui/Button';\nimport Avatar from '../common/Avatar';\nimport ListItem from '../ui/ListItem';\nimport ReactionStaticEmoji from '../common/ReactionStaticEmoji';\nimport Loading from '../ui/Loading';\n\nimport './ReactorListModal.scss';\n\nconst MIN_REACTIONS_COUNT_FOR_FILTERS = 10;\n\nexport type OwnProps = {\n isOpen: boolean;\n};\n\nexport type StateProps = Pick & {\n chatId?: string;\n messageId?: number;\n};\n\nconst ReactorListModal: FC = ({\n isOpen,\n reactors,\n reactions,\n chatId,\n messageId,\n seenByUserIds,\n}) => {\n const {\n loadReactors,\n closeReactorListModal,\n openChat,\n } = getActions();\n\n // No need for expensive global updates on users, so we avoid them\n const usersById = getGlobal().users.byId;\n\n const lang = useLang();\n const [isClosing, startClosing, stopClosing] = useFlag(false);\n const [chosenTab, setChosenTab] = useState(undefined);\n const canShowFilters = reactors && reactions && reactors.count >= MIN_REACTIONS_COUNT_FOR_FILTERS\n && reactions.results.length > 1;\n const chatIdRef = useRef();\n\n useEffect(() => {\n if (isClosing && !isOpen) {\n stopClosing();\n setChosenTab(undefined);\n }\n }, [isClosing, isOpen, stopClosing]);\n\n const handleCloseAnimationEnd = useCallback(() => {\n if (chatIdRef.current) {\n openChat({ id: chatIdRef.current });\n }\n closeReactorListModal();\n }, [closeReactorListModal, openChat]);\n\n const handleClose = useCallback(() => {\n startClosing();\n }, [startClosing]);\n\n const handleClick = useCallback((userId: string) => {\n chatIdRef.current = userId;\n handleClose();\n }, [handleClose]);\n\n const handleLoadMore = useCallback(() => {\n loadReactors({\n chatId,\n messageId,\n });\n }, [chatId, loadReactors, messageId]);\n\n const allReactions = useMemo(() => {\n return reactors?.reactions ? unique(reactors.reactions.map((l) => l.reaction)) : [];\n }, [reactors?.reactions]);\n\n const userIds = useMemo(() => {\n if (chosenTab) {\n return reactors?.reactions.filter((l) => l.reaction === chosenTab).map((l) => l.userId);\n }\n return unique(reactors?.reactions.map((l) => l.userId).concat(seenByUserIds || []) || []);\n }, [chosenTab, reactors?.reactions, seenByUserIds]);\n\n const [viewportIds, getMore] = useInfiniteScroll(\n handleLoadMore, userIds, reactors && reactors.nextOffset === undefined,\n );\n\n useEffect(() => {\n getMore?.({ direction: LoadMoreDirection.Backwards });\n }, [getMore]);\n\n return (\n \n {canShowFilters && (\n
\n setChosenTab(undefined)}\n >\n \n {reactors?.count && formatIntegerCompact(reactors.count)}\n \n {allReactions.map((reaction) => {\n const count = reactions?.results.find((l) => l.reaction === reaction)?.count;\n return (\n setChosenTab(reaction)}\n >\n \n {count && formatIntegerCompact(count)}\n \n );\n })}\n
\n )}\n\n
\n {viewportIds?.length ? (\n \n {viewportIds?.map(\n (userId) => {\n const user = usersById[userId];\n const fullName = getUserFullName(user);\n const reaction = reactors?.reactions.find((l) => l.userId === userId)?.reaction;\n return (\n handleClick(userId)}\n >\n \n
\n

{fullName && renderText(fullName)}

\n
\n {reaction && }\n \n );\n },\n )}\n \n ) : }\n
\n \n {lang('Close')}\n \n \n );\n};\n\nexport default memo(withGlobal(\n (global): StateProps => {\n const { chatId, messageId } = global.reactorModal || {};\n const message = chatId && messageId ? selectChatMessage(global, chatId, messageId) : undefined;\n\n return {\n chatId,\n messageId,\n reactions: message?.reactions,\n reactors: message?.reactors,\n seenByUserIds: message?.seenByUserIds,\n };\n },\n)(ReactorListModal));\n","import React, {\n FC, memo, useCallback, useEffect, useLayoutEffect, useRef, useState,\n} from '../../lib/teact/teact';\nimport { getActions, withGlobal } from '../../global';\n\nimport { ActiveEmojiInteraction } from '../../global/types';\nimport { ApiMediaFormat } from '../../api/types';\n\nimport { IS_ANDROID } from '../../util/environment';\nimport useFlag from '../../hooks/useFlag';\nimport useMedia from '../../hooks/useMedia';\nimport buildClassName from '../../util/buildClassName';\nimport {\n selectAnimatedEmojiEffect,\n} from '../../global/selectors';\nimport getAnimationData, { ANIMATED_STICKERS_PATHS } from '../common/helpers/animatedAssets';\nimport { dispatchHeavyAnimationEvent } from '../../hooks/useHeavyAnimationCheck';\n\nimport AnimatedSticker from '../common/AnimatedSticker';\n\nimport './EmojiInteractionAnimation.scss';\n\nexport type OwnProps = {\n activeEmojiInteraction: ActiveEmojiInteraction;\n};\n\ntype StateProps = {\n effectAnimationId?: string;\n localEffectAnimation?: string;\n};\n\nconst HIDE_ANIMATION_DURATION = 250;\nconst PLAYING_DURATION = 3000;\nconst EFFECT_SIZE = 240;\n\nconst EmojiInteractionAnimation: FC = ({\n effectAnimationId,\n localEffectAnimation,\n activeEmojiInteraction,\n}) => {\n const { stopActiveEmojiInteraction } = getActions();\n\n const [isHiding, startHiding] = useFlag(false);\n const [isPlaying, startPlaying] = useFlag(false);\n const timeoutRef = useRef();\n\n const stop = useCallback(() => {\n startHiding();\n if (timeoutRef.current) {\n clearTimeout(timeoutRef.current);\n }\n setTimeout(() => {\n stopActiveEmojiInteraction({ id: activeEmojiInteraction.id });\n }, HIDE_ANIMATION_DURATION);\n }, [activeEmojiInteraction.id, startHiding, stopActiveEmojiInteraction]);\n\n const handleCancelAnimation = useCallback((e: UIEvent) => {\n if (!(e.target as HTMLElement)?.closest('.AnimatedEmoji')) {\n stop();\n }\n }, [stop]);\n\n useEffect(() => {\n document.addEventListener('touchstart', handleCancelAnimation);\n document.addEventListener('touchmove', handleCancelAnimation);\n document.addEventListener('mousedown', handleCancelAnimation);\n document.addEventListener('wheel', handleCancelAnimation);\n\n return () => {\n document.removeEventListener('touchstart', handleCancelAnimation);\n document.removeEventListener('touchmove', handleCancelAnimation);\n document.removeEventListener('mousedown', handleCancelAnimation);\n document.removeEventListener('wheel', handleCancelAnimation);\n };\n }, [handleCancelAnimation]);\n\n useLayoutEffect(() => {\n const dispatchHeavyAnimationStop = dispatchHeavyAnimationEvent();\n\n timeoutRef.current = setTimeout(() => {\n stop();\n dispatchHeavyAnimationStop();\n }, PLAYING_DURATION);\n }, [stop]);\n\n const effectAnimationData = useMedia(`sticker${effectAnimationId}`, !effectAnimationId, ApiMediaFormat.Lottie);\n\n const [localEffectAnimationData, setLocalEffectAnimationData] = useState();\n useEffect(() => {\n if (localEffectAnimation) {\n getAnimationData(localEffectAnimation as keyof typeof ANIMATED_STICKERS_PATHS).then((data) => {\n setLocalEffectAnimationData(data);\n });\n }\n }, [localEffectAnimation]);\n\n if (!activeEmojiInteraction.startSize) {\n return undefined;\n }\n\n const scale = (activeEmojiInteraction.startSize || 0) / EFFECT_SIZE;\n\n return (\n \n \n \n );\n};\n\nexport default memo(withGlobal(\n (global, { activeEmojiInteraction }): StateProps => {\n const animatedEffect = activeEmojiInteraction.animatedEffect !== undefined\n && selectAnimatedEmojiEffect(global, activeEmojiInteraction.animatedEffect);\n return {\n effectAnimationId: animatedEffect ? animatedEffect.id : undefined,\n localEffectAnimation: !animatedEffect && activeEmojiInteraction.animatedEffect\n && Object.keys(ANIMATED_STICKERS_PATHS).includes(activeEmojiInteraction.animatedEffect)\n ? activeEmojiInteraction.animatedEffect : undefined,\n };\n },\n)(EmojiInteractionAnimation));\n","import { useCallback, useEffect, useRef } from '../lib/teact/teact';\n\nconst useSendWithEnter = (\n onSelect: NoneToVoidFunction,\n) => {\n // eslint-disable-next-line no-null/no-null\n const buttonRef = useRef(null);\n\n const handleKeyDown = useCallback((e: KeyboardEvent) => {\n if (e.key !== 'Enter') return;\n const isFocused = buttonRef.current === document.activeElement;\n\n if (isFocused) {\n onSelect();\n }\n }, [onSelect]);\n\n useEffect(() => {\n window.addEventListener('keydown', handleKeyDown, false);\n\n return () => window.removeEventListener('keydown', handleKeyDown, false);\n }, [handleKeyDown]);\n\n return buttonRef;\n};\n\nexport default useSendWithEnter;\n","import React, {\n FC, memo, useCallback,\n} from '../../../lib/teact/teact';\nimport { withGlobal } from '../../../global';\n\nimport { ApiChat, ApiUser } from '../../../api/types';\n\nimport useChatContextActions from '../../../hooks/useChatContextActions';\nimport useFlag from '../../../hooks/useFlag';\nimport { isUserId, getPrivateChatUserId, selectIsChatMuted } from '../../../global/helpers';\nimport {\n selectChat, selectUser, selectIsChatPinned, selectNotifySettings, selectNotifyExceptions,\n} from '../../../global/selectors';\nimport useSelectWithEnter from '../../../hooks/useSelectWithEnter';\n\nimport PrivateChatInfo from '../../common/PrivateChatInfo';\nimport GroupChatInfo from '../../common/GroupChatInfo';\nimport DeleteChatModal from '../../common/DeleteChatModal';\nimport ListItem from '../../ui/ListItem';\nimport ChatFolderModal from '../ChatFolderModal.async';\n\ntype OwnProps = {\n chatId: string;\n withUsername?: boolean;\n onClick: (id: string) => void;\n};\n\ntype StateProps = {\n chat?: ApiChat;\n user?: ApiUser;\n isPinned?: boolean;\n isMuted?: boolean;\n canChangeFolder?: boolean;\n};\n\nconst LeftSearchResultChat: FC = ({\n chatId,\n withUsername,\n onClick,\n chat,\n user,\n isPinned,\n isMuted,\n canChangeFolder,\n}) => {\n const [isDeleteModalOpen, openDeleteModal, closeDeleteModal] = useFlag();\n const [isChatFolderModalOpen, openChatFolderModal, closeChatFolderModal] = useFlag();\n\n const contextActions = useChatContextActions({\n chat,\n user,\n isPinned,\n isMuted,\n canChangeFolder,\n handleDelete: openDeleteModal,\n handleChatFolderChange: openChatFolderModal,\n }, true);\n\n const handleClick = useCallback(() => {\n onClick(chatId);\n }, [chatId, onClick]);\n\n const buttonRef = useSelectWithEnter(handleClick);\n\n if (!chat) {\n return undefined;\n }\n\n return (\n \n {isUserId(chatId) ? (\n \n ) : (\n \n )}\n \n \n \n );\n};\n\nexport default memo(withGlobal(\n (global, { chatId }): StateProps => {\n const chat = selectChat(global, chatId);\n const privateChatUserId = chat && getPrivateChatUserId(chat);\n const user = privateChatUserId ? selectUser(global, privateChatUserId) : undefined;\n const isPinned = selectIsChatPinned(global, chatId);\n const isMuted = chat\n ? selectIsChatMuted(chat, selectNotifySettings(global), selectNotifyExceptions(global))\n : undefined;\n\n return {\n chat,\n user,\n isPinned,\n isMuted,\n canChangeFolder: Boolean(global.chatFolders.orderedIds?.length),\n };\n },\n)(LeftSearchResultChat));\n","import React, {\n FC, useEffect, useCallback, useRef, memo,\n} from '../../../lib/teact/teact';\nimport { getActions, withGlobal } from '../../../global';\n\nimport { ApiUser } from '../../../api/types';\n\nimport { getUserFirstOrLastName } from '../../../global/helpers';\nimport renderText from '../../common/helpers/renderText';\nimport { throttle } from '../../../util/schedulers';\nimport useHorizontalScroll from '../../../hooks/useHorizontalScroll';\nimport useLang from '../../../hooks/useLang';\n\nimport Avatar from '../../common/Avatar';\nimport Button from '../../ui/Button';\nimport LeftSearchResultChat from './LeftSearchResultChat';\n\nimport './RecentContacts.scss';\n\ntype OwnProps = {\n onReset: () => void;\n};\n\ntype StateProps = {\n topUserIds?: string[];\n usersById: Record;\n recentlyFoundChatIds?: string[];\n};\n\nconst SEARCH_CLOSE_TIMEOUT_MS = 250;\nconst NBSP = '\\u00A0';\n\nconst runThrottled = throttle((cb) => cb(), 60000, true);\n\nconst RecentContacts: FC = ({\n topUserIds, usersById, recentlyFoundChatIds,\n onReset,\n}) => {\n const {\n loadTopUsers, loadContactList, openChat,\n addRecentlyFoundChatId, clearRecentlyFoundChats,\n } = getActions();\n\n // eslint-disable-next-line no-null/no-null\n const topUsersRef = useRef(null);\n\n // Due to the parent Transition, this component never gets unmounted,\n // that's why we use throttled API call on every update.\n useEffect(() => {\n runThrottled(() => {\n loadTopUsers();\n // Loading full contact list for quick local search before user enters the query\n loadContactList();\n });\n }, [loadTopUsers, loadContactList]);\n\n useHorizontalScroll(topUsersRef.current, !topUserIds);\n\n const handleClick = useCallback((id: string) => {\n openChat({ id, shouldReplaceHistory: true });\n onReset();\n setTimeout(() => {\n addRecentlyFoundChatId({ id });\n }, SEARCH_CLOSE_TIMEOUT_MS);\n }, [openChat, addRecentlyFoundChatId, onReset]);\n\n const lang = useLang();\n\n return (\n
\n {topUserIds && (\n
\n
\n {topUserIds.map((userId) => (\n
handleClick(userId)} dir={lang.isRtl ? 'rtl' : undefined}>\n \n
{renderText(getUserFirstOrLastName(usersById[userId]) || NBSP)}
\n
\n ))}\n
\n
\n )}\n {recentlyFoundChatIds && (\n
\n

\n {lang('Recent')}\n\n \n \n \n

\n {recentlyFoundChatIds.map((id) => (\n \n ))}\n
\n )}\n
\n );\n};\n\nexport default memo(withGlobal(\n (global): StateProps => {\n const { userIds: topUserIds } = global.topPeers;\n const usersById = global.users.byId;\n const { recentlyFoundChatIds } = global.globalSearch;\n\n return {\n topUserIds,\n usersById,\n recentlyFoundChatIds,\n };\n },\n)(RecentContacts));\n","import React, {\n FC, memo, useCallback,\n} from '../../../lib/teact/teact';\nimport { getActions, withGlobal } from '../../../global';\n\nimport {\n ApiChat, ApiUser, ApiMessage, ApiMessageOutgoingStatus,\n} from '../../../api/types';\n\nimport { IS_SINGLE_COLUMN_LAYOUT } from '../../../util/environment';\nimport {\n getChatTitle,\n getPrivateChatUserId,\n getMessageMediaHash,\n getMessageMediaThumbDataUri,\n getMessageVideo,\n getMessageRoundVideo,\n} from '../../../global/helpers';\nimport { selectChat, selectUser } from '../../../global/selectors';\nimport buildClassName from '../../../util/buildClassName';\nimport renderText from '../../common/helpers/renderText';\nimport { formatPastTimeShort } from '../../../util/dateFormat';\nimport { renderMessageSummary } from '../../common/helpers/renderMessageText';\n\nimport useMedia from '../../../hooks/useMedia';\nimport useLang, { LangFn } from '../../../hooks/useLang';\nimport useSelectWithEnter from '../../../hooks/useSelectWithEnter';\n\nimport Avatar from '../../common/Avatar';\nimport VerifiedIcon from '../../common/VerifiedIcon';\nimport ListItem from '../../ui/ListItem';\nimport Link from '../../ui/Link';\n\nimport './ChatMessage.scss';\n\ntype OwnProps = {\n searchQuery?: string;\n message: ApiMessage;\n chatId: string;\n};\n\ntype StateProps = {\n chat?: ApiChat;\n privateChatUser?: ApiUser;\n lastMessageOutgoingStatus?: ApiMessageOutgoingStatus;\n lastSyncTime?: number;\n};\n\nconst ChatMessage: FC = ({\n message,\n searchQuery,\n chatId,\n chat,\n privateChatUser,\n lastSyncTime,\n}) => {\n const { focusMessage } = getActions();\n\n const mediaThumbnail = getMessageMediaThumbDataUri(message);\n const mediaBlobUrl = useMedia(getMessageMediaHash(message, 'micro'));\n const isRoundVideo = Boolean(getMessageRoundVideo(message));\n\n const handleClick = useCallback(() => {\n focusMessage({ chatId, messageId: message.id });\n }, [chatId, focusMessage, message.id]);\n\n const lang = useLang();\n\n const buttonRef = useSelectWithEnter(handleClick);\n\n if (!chat) {\n return undefined;\n }\n\n return (\n \n \n
\n
\n
\n

{renderText(getChatTitle(lang, chat, privateChatUser))}

\n {chat.isVerified && }\n
\n
\n \n {formatPastTimeShort(lang, message.date * 1000)}\n \n
\n\n
\n
\n
\n {renderSummary(lang, message, mediaBlobUrl || mediaThumbnail, searchQuery, isRoundVideo)}\n
\n
\n
\n \n );\n};\n\nfunction renderSummary(\n lang: LangFn, message: ApiMessage, blobUrl?: string, searchQuery?: string, isRoundVideo?: boolean,\n) {\n if (!blobUrl) {\n return renderMessageSummary(lang, message, undefined, searchQuery);\n }\n\n return (\n \n \"\"\n {getMessageVideo(message) && }\n {renderMessageSummary(lang, message, true, searchQuery)}\n \n );\n}\n\nexport default memo(withGlobal(\n (global, { chatId }): StateProps => {\n const chat = selectChat(global, chatId);\n if (!chat) {\n return {};\n }\n\n const privateChatUserId = getPrivateChatUserId(chat);\n\n return {\n chat,\n lastSyncTime: global.lastSyncTime,\n ...(privateChatUserId && { privateChatUser: selectUser(global, privateChatUserId) }),\n };\n },\n)(ChatMessage));\n","import React, { FC, memo, useMemo } from '../../../lib/teact/teact';\nimport { formatDateToString } from '../../../util/dateFormat';\n\nimport './DateSuggest.scss';\n\nconst SUGGESTION_COUNT = 8;\n\nexport type OwnProps = {\n searchDate: string;\n onSelect: (value: Date) => void;\n};\n\nconst DateSuggest: FC = ({\n searchDate, onSelect,\n}) => {\n const suggestions = useMemo(() => getSuggestionsFromDate(searchDate), [searchDate]);\n return (\n
\n {suggestions.map(({ date, text }) => {\n return (\n onSelect(date)}\n className=\"date-item\"\n key={text}\n >\n \n {text}\n \n );\n })}\n
\n );\n};\n\nfunction getSuggestionsFromDate(searchDate: string) {\n const hasYear = searchDate.match(/^\\d{2,4}-\\d{2}-\\d{2}$/g);\n if (hasYear) {\n const date = new Date(searchDate);\n return [{ date, text: formatDateToString(date) }];\n }\n\n const suggestion = [];\n const currentDate = new Date();\n const currentYear = currentDate.getFullYear();\n const latestYear = currentDate.getTime() > (new Date(`${currentYear}-${searchDate}`)).getTime()\n ? currentYear\n : currentYear - 1;\n\n for (let i = 0; i < SUGGESTION_COUNT; i++) {\n const date = new Date(`${latestYear - i}-${searchDate}`);\n suggestion.push({ date, text: formatDateToString(date) });\n }\n\n return suggestion;\n}\n\nexport default memo(DateSuggest);\n","import React, {\n FC, memo, useCallback, useMemo, useState,\n} from '../../../lib/teact/teact';\nimport { getActions, getGlobal, withGlobal } from '../../../global';\n\nimport { ApiChat, ApiMessage } from '../../../api/types';\nimport { LoadMoreDirection } from '../../../types';\n\nimport { IS_SINGLE_COLUMN_LAYOUT } from '../../../util/environment';\nimport { unique } from '../../../util/iteratees';\nimport {\n sortChatIds,\n filterUsersByName,\n} from '../../../global/helpers';\nimport { MEMO_EMPTY_ARRAY } from '../../../util/memo';\nimport { throttle } from '../../../util/schedulers';\nimport useLang from '../../../hooks/useLang';\nimport { renderMessageSummary } from '../../common/helpers/renderMessageText';\n\nimport InfiniteScroll from '../../ui/InfiniteScroll';\nimport LeftSearchResultChat from './LeftSearchResultChat';\nimport RecentContacts from './RecentContacts';\nimport ChatMessage from './ChatMessage';\nimport DateSuggest from './DateSuggest';\nimport Link from '../../ui/Link';\nimport NothingFound from '../../common/NothingFound';\nimport PickerSelectedItem from '../../common/PickerSelectedItem';\n\nexport type OwnProps = {\n searchQuery?: string;\n dateSearchQuery?: string;\n searchDate?: number;\n onReset: () => void;\n onSearchDateSelect: (value: Date) => void;\n};\n\ntype StateProps = {\n currentUserId?: string;\n localContactIds?: string[];\n localChatIds?: string[];\n localUserIds?: string[];\n globalChatIds?: string[];\n globalUserIds?: string[];\n foundIds?: string[];\n globalMessagesByChatId?: Record }>;\n chatsById: Record;\n fetchingStatus?: { chats?: boolean; messages?: boolean };\n lastSyncTime?: number;\n};\n\nconst MIN_QUERY_LENGTH_FOR_GLOBAL_SEARCH = 4;\nconst LESS_LIST_ITEMS_AMOUNT = 5;\n\nconst runThrottled = throttle((cb) => cb(), 500, true);\n\nconst ChatResults: FC = ({\n searchQuery, searchDate, dateSearchQuery, currentUserId,\n localContactIds, localChatIds, localUserIds, globalChatIds, globalUserIds,\n foundIds, globalMessagesByChatId, chatsById, fetchingStatus, lastSyncTime,\n onReset, onSearchDateSelect,\n}) => {\n const {\n openChat, addRecentlyFoundChatId, searchMessagesGlobal, setGlobalSearchChatId,\n } = getActions();\n\n const lang = useLang();\n\n const [shouldShowMoreLocal, setShouldShowMoreLocal] = useState(false);\n const [shouldShowMoreGlobal, setShouldShowMoreGlobal] = useState(false);\n\n const handleLoadMore = useCallback(({ direction }: { direction: LoadMoreDirection }) => {\n if (lastSyncTime && direction === LoadMoreDirection.Backwards) {\n runThrottled(() => {\n searchMessagesGlobal({\n type: 'text',\n query: searchQuery,\n });\n });\n }\n }, [lastSyncTime, searchMessagesGlobal, searchQuery]);\n\n const handleChatClick = useCallback(\n (id: string) => {\n openChat({ id, shouldReplaceHistory: true });\n\n if (id !== currentUserId) {\n addRecentlyFoundChatId({ id });\n }\n\n if (!IS_SINGLE_COLUMN_LAYOUT) {\n onReset();\n }\n },\n [currentUserId, openChat, addRecentlyFoundChatId, onReset],\n );\n\n const handlePickerItemClick = useCallback((id: string) => {\n setGlobalSearchChatId({ id });\n }, [setGlobalSearchChatId]);\n\n const localResults = useMemo(() => {\n if (!searchQuery || (searchQuery.startsWith('@') && searchQuery.length < 2)) {\n return MEMO_EMPTY_ARRAY;\n }\n\n const contactIdsWithMe = [\n ...(currentUserId ? [currentUserId] : []),\n ...(localContactIds || []),\n ];\n // No need for expensive global updates on users, so we avoid them\n const usersById = getGlobal().users.byId;\n const foundContactIds = filterUsersByName(\n contactIdsWithMe, usersById, searchQuery, currentUserId, lang('SavedMessages'),\n );\n\n return [\n ...sortChatIds(unique([\n ...(foundContactIds || []),\n ...(localChatIds || []),\n ...(localUserIds || []),\n ]), chatsById, undefined, currentUserId ? [currentUserId] : undefined),\n ];\n }, [searchQuery, currentUserId, localContactIds, lang, localChatIds, localUserIds, chatsById]);\n\n const globalResults = useMemo(() => {\n if (!searchQuery || searchQuery.length < MIN_QUERY_LENGTH_FOR_GLOBAL_SEARCH || !globalChatIds || !globalUserIds) {\n return MEMO_EMPTY_ARRAY;\n }\n\n return sortChatIds(\n unique([...globalChatIds, ...globalUserIds]),\n chatsById,\n true,\n );\n }, [chatsById, globalChatIds, globalUserIds, searchQuery]);\n\n const foundMessages = useMemo(() => {\n if ((!searchQuery && !searchDate) || !foundIds || foundIds.length === 0) {\n return MEMO_EMPTY_ARRAY;\n }\n\n return foundIds\n .map((id) => {\n const [chatId, messageId] = id.split('_');\n\n return globalMessagesByChatId?.[chatId]?.byId[Number(messageId)];\n })\n .filter(Boolean as any)\n .sort((a, b) => b.date - a.date);\n }, [foundIds, globalMessagesByChatId, searchQuery, searchDate]);\n\n const handleClickShowMoreLocal = useCallback(() => {\n setShouldShowMoreLocal(!shouldShowMoreLocal);\n }, [shouldShowMoreLocal]);\n\n const handleClickShowMoreGlobal = useCallback(() => {\n setShouldShowMoreGlobal(!shouldShowMoreGlobal);\n }, [shouldShowMoreGlobal]);\n\n function renderFoundMessage(message: ApiMessage) {\n const text = renderMessageSummary(lang, message);\n const chat = chatsById[message.chatId];\n\n if (!text || !chat) {\n return undefined;\n }\n\n return (\n \n );\n }\n\n const nothingFound = fetchingStatus && !fetchingStatus.chats && !fetchingStatus.messages\n && !localResults.length && !globalResults.length && !foundMessages.length;\n\n if (!searchQuery && !searchDate) {\n return ;\n }\n\n return (\n \n {dateSearchQuery && (\n
\n \n
\n )}\n {nothingFound && (\n \n )}\n {Boolean(localResults.length) && (\n
\n {localResults.map((id) => (\n \n ))}\n
\n )}\n {Boolean(localResults.length) && (\n
\n

\n {localResults.length > LESS_LIST_ITEMS_AMOUNT && (\n \n {lang(shouldShowMoreLocal ? 'ChatList.Search.ShowLess' : 'ChatList.Search.ShowMore')}\n \n )}\n {lang('DialogList.SearchSectionDialogs')}\n

\n {localResults.map((id, index) => {\n if (!shouldShowMoreLocal && index >= LESS_LIST_ITEMS_AMOUNT) {\n return undefined;\n }\n\n return (\n \n );\n })}\n
\n )}\n {Boolean(globalResults.length) && (\n
\n

\n {globalResults.length > LESS_LIST_ITEMS_AMOUNT && (\n \n {lang(shouldShowMoreGlobal ? 'ChatList.Search.ShowLess' : 'ChatList.Search.ShowMore')}\n \n )}\n {lang('DialogList.SearchSectionGlobal')}\n

\n {globalResults.map((id, index) => {\n if (!shouldShowMoreGlobal && index >= LESS_LIST_ITEMS_AMOUNT) {\n return undefined;\n }\n\n return (\n \n );\n })}\n
\n )}\n {Boolean(foundMessages.length) && (\n
\n

{lang('SearchMessages')}

\n {foundMessages.map(renderFoundMessage)}\n
\n )}\n \n );\n};\n\nexport default memo(withGlobal(\n (global): StateProps => {\n const { byId: chatsById } = global.chats;\n\n const { userIds: localContactIds } = global.contactList || {};\n\n if (!localContactIds) {\n return {\n chatsById,\n };\n }\n\n const {\n currentUserId, messages, lastSyncTime,\n } = global;\n const {\n fetchingStatus, globalResults, localResults, resultsByType,\n } = global.globalSearch;\n const { chatIds: globalChatIds, userIds: globalUserIds } = globalResults || {};\n const { chatIds: localChatIds, userIds: localUserIds } = localResults || {};\n const { byChatId: globalMessagesByChatId } = messages;\n const foundIds = resultsByType?.text?.foundIds;\n\n return {\n currentUserId,\n localContactIds,\n localChatIds,\n localUserIds,\n globalChatIds,\n globalUserIds,\n foundIds,\n globalMessagesByChatId,\n chatsById,\n fetchingStatus,\n lastSyncTime,\n };\n },\n)(ChatResults));\n","import React, {\n FC, memo, useCallback, useMemo,\n} from '../../../lib/teact/teact';\nimport { getActions, withGlobal } from '../../../global';\n\nimport { ApiChat, ApiMessage } from '../../../api/types';\nimport { LoadMoreDirection } from '../../../types';\n\nimport { MEMO_EMPTY_ARRAY } from '../../../util/memo';\nimport { throttle } from '../../../util/schedulers';\nimport useLang from '../../../hooks/useLang';\nimport { renderMessageSummary } from '../../common/helpers/renderMessageText';\n\nimport InfiniteScroll from '../../ui/InfiniteScroll';\nimport NothingFound from '../../common/NothingFound';\nimport ChatMessage from './ChatMessage';\nimport DateSuggest from './DateSuggest';\n\nexport type OwnProps = {\n searchQuery?: string;\n dateSearchQuery?: string;\n onReset: () => void;\n onSearchDateSelect: (value: Date) => void;\n};\n\ntype StateProps = {\n currentUserId?: string;\n foundIds?: string[];\n globalMessagesByChatId?: Record }>;\n chatsById: Record;\n fetchingStatus?: { chats?: boolean; messages?: boolean };\n lastSyncTime?: number;\n};\n\nconst runThrottled = throttle((cb) => cb(), 500, true);\n\nconst ChatMessageResults: FC = ({\n searchQuery,\n currentUserId,\n dateSearchQuery,\n foundIds,\n globalMessagesByChatId,\n chatsById,\n fetchingStatus,\n lastSyncTime,\n onSearchDateSelect,\n}) => {\n const { searchMessagesGlobal } = getActions();\n\n const lang = useLang();\n const handleLoadMore = useCallback(({ direction }: { direction: LoadMoreDirection }) => {\n if (lastSyncTime && direction === LoadMoreDirection.Backwards) {\n runThrottled(() => {\n searchMessagesGlobal({\n type: 'text',\n query: searchQuery,\n chatId: currentUserId,\n });\n });\n }\n }, [currentUserId, lastSyncTime, searchMessagesGlobal, searchQuery]);\n\n const foundMessages = useMemo(() => {\n if (!foundIds || foundIds.length === 0) {\n return MEMO_EMPTY_ARRAY;\n }\n\n return foundIds\n .map((id) => {\n const [chatId, messageId] = id.split('_');\n\n return globalMessagesByChatId?.[chatId]?.byId[Number(messageId)];\n })\n .filter(Boolean as any)\n .sort((a, b) => b.date - a.date);\n }, [foundIds, globalMessagesByChatId]);\n\n function renderFoundMessage(message: ApiMessage) {\n const text = renderMessageSummary(lang, message);\n const chat = chatsById[message.chatId];\n\n if (!text || !chat) {\n return undefined;\n }\n\n return (\n \n );\n }\n\n const nothingFound = fetchingStatus && !fetchingStatus.chats && !fetchingStatus.messages && !foundMessages.length;\n\n return (\n
\n \n {dateSearchQuery && (\n
\n \n
\n )}\n {nothingFound && (\n \n )}\n {foundMessages.map(renderFoundMessage)}\n \n
\n );\n};\n\nexport default memo(withGlobal(\n (global): StateProps => {\n const { byId: chatsById } = global.chats;\n const { currentUserId, messages: { byChatId: globalMessagesByChatId }, lastSyncTime } = global;\n const { fetchingStatus, resultsByType } = global.globalSearch;\n\n const { foundIds } = (resultsByType?.text) || {};\n\n return {\n currentUserId,\n foundIds,\n globalMessagesByChatId,\n chatsById,\n fetchingStatus,\n lastSyncTime,\n };\n },\n)(ChatMessageResults));\n","import { GlobalState } from '../../../../global/types';\nimport {\n ApiChat, ApiGlobalMessageSearchType, ApiMessage, ApiUser,\n} from '../../../../api/types';\nimport { ISettings } from '../../../../types';\n\nimport { selectChat, selectTheme } from '../../../../global/selectors';\n\nexport type StateProps = {\n theme: ISettings['theme'];\n isLoading?: boolean;\n chatsById: Record;\n usersById: Record;\n globalMessagesByChatId?: Record }>;\n foundIds?: string[];\n lastSyncTime?: number;\n searchChatId?: string;\n activeDownloads: Record;\n isChatProtected?: boolean;\n};\n\nexport function createMapStateToProps(type: ApiGlobalMessageSearchType) {\n return (global: GlobalState, props: any) => {\n const { byId: chatsById } = global.chats;\n const { byId: usersById } = global.users;\n const {\n fetchingStatus, resultsByType, chatId,\n } = global.globalSearch;\n\n // One component is used for two different types of results.\n // The differences between them are only in the isVoice property.\n // The rest of the search results use their own personal components.\n const currentType = type !== 'audio' ? type : (props?.isVoice ? 'voice' : 'audio');\n\n const { byChatId: globalMessagesByChatId } = global.messages;\n const foundIds = resultsByType?.[currentType]?.foundIds;\n\n const activeDownloads = global.activeDownloads.byChatId;\n\n return {\n theme: selectTheme(global),\n isLoading: foundIds === undefined\n || (fetchingStatus ? Boolean(fetchingStatus.chats || fetchingStatus.messages) : false),\n chatsById,\n usersById,\n globalMessagesByChatId,\n foundIds,\n searchChatId: chatId,\n activeDownloads,\n isChatProtected: chatId ? selectChat(global, chatId)?.isProtected : undefined,\n lastSyncTime: global.lastSyncTime,\n };\n };\n}\n","import React, {\n FC, memo, useCallback, useMemo, useRef,\n} from '../../../lib/teact/teact';\nimport { getActions, withGlobal } from '../../../global';\n\nimport { LoadMoreDirection, MediaViewerOrigin } from '../../../types';\n\nimport { MEMO_EMPTY_ARRAY } from '../../../util/memo';\nimport { SLIDE_TRANSITION_DURATION } from '../../../config';\nimport { createMapStateToProps, StateProps } from './helpers/createMapStateToProps';\nimport buildClassName from '../../../util/buildClassName';\nimport { throttle } from '../../../util/schedulers';\nimport useLang from '../../../hooks/useLang';\nimport useAsyncRendering from '../../right/hooks/useAsyncRendering';\nimport { useIntersectionObserver } from '../../../hooks/useIntersectionObserver';\n\nimport InfiniteScroll from '../../ui/InfiniteScroll';\nimport Media from '../../common/Media';\nimport ChatMessage from './ChatMessage';\nimport NothingFound from '../../common/NothingFound';\nimport Loading from '../../ui/Loading';\n\nexport type OwnProps = {\n searchQuery?: string;\n};\n\nconst CURRENT_TYPE = 'media';\nconst INTERSECTION_THROTTLE = 500;\n\nconst runThrottled = throttle((cb) => cb(), 500, true);\n\nconst MediaResults: FC = ({\n searchQuery,\n searchChatId,\n isLoading,\n globalMessagesByChatId,\n foundIds,\n lastSyncTime,\n isChatProtected,\n}) => {\n const {\n searchMessagesGlobal,\n openMediaViewer,\n } = getActions();\n\n // eslint-disable-next-line no-null/no-null\n const containerRef = useRef(null);\n\n const lang = useLang();\n\n const { observe: observeIntersectionForMedia } = useIntersectionObserver({\n rootRef: containerRef,\n throttleMs: INTERSECTION_THROTTLE,\n });\n\n const handleLoadMore = useCallback(({ direction }: { direction: LoadMoreDirection }) => {\n if (lastSyncTime && direction === LoadMoreDirection.Backwards) {\n runThrottled(() => {\n searchMessagesGlobal({\n type: CURRENT_TYPE,\n query: searchQuery,\n chatId: searchChatId,\n });\n });\n }\n }, [lastSyncTime, searchMessagesGlobal, searchQuery, searchChatId]);\n\n const foundMessages = useMemo(() => {\n if (!foundIds || !globalMessagesByChatId) {\n return MEMO_EMPTY_ARRAY;\n }\n\n return foundIds.map((id) => {\n const [chatId, messageId] = id.split('_');\n\n return globalMessagesByChatId[chatId]?.byId[Number(messageId)];\n }).filter(Boolean);\n }, [globalMessagesByChatId, foundIds]);\n\n const handleSelectMedia = useCallback((messageId: number, chatId: string) => {\n openMediaViewer({\n chatId,\n messageId,\n origin: MediaViewerOrigin.SearchResult,\n });\n }, [openMediaViewer]);\n\n function renderGallery() {\n return (\n
\n {foundMessages.map((message) => (\n \n ))}\n
\n );\n }\n\n function renderSearchResult() {\n return foundMessages.map((message) => (\n \n ));\n }\n\n const canRenderContents = useAsyncRendering([searchQuery], SLIDE_TRANSITION_DURATION) && !isLoading;\n const isMediaGrid = canRenderContents && foundIds && foundIds.length > 0 && !searchQuery;\n const isMessageList = canRenderContents && foundIds && foundIds.length > 0 && searchQuery;\n\n const classNames = buildClassName(\n 'search-content custom-scroll',\n isMessageList && 'chat-list',\n );\n\n return (\n
\n \n {!canRenderContents && }\n {canRenderContents && (!foundIds || foundIds.length === 0) && (\n \n )}\n {isMediaGrid && renderGallery()}\n {isMessageList && renderSearchResult()}\n \n
\n );\n};\n\nexport default memo(withGlobal(\n createMapStateToProps(CURRENT_TYPE),\n)(MediaResults));\n","import React, {\n FC, memo, useCallback, useMemo, useRef,\n} from '../../../lib/teact/teact';\nimport { getActions, withGlobal } from '../../../global';\n\nimport { LoadMoreDirection } from '../../../types';\n\nimport { SLIDE_TRANSITION_DURATION } from '../../../config';\nimport { MEMO_EMPTY_ARRAY } from '../../../util/memo';\nimport { createMapStateToProps, StateProps } from './helpers/createMapStateToProps';\nimport { formatMonthAndYear, toYearMonth } from '../../../util/dateFormat';\nimport { getSenderName } from './helpers/getSenderName';\nimport { throttle } from '../../../util/schedulers';\nimport useAsyncRendering from '../../right/hooks/useAsyncRendering';\nimport useLang from '../../../hooks/useLang';\nimport { useIntersectionObserver } from '../../../hooks/useIntersectionObserver';\n\nimport InfiniteScroll from '../../ui/InfiniteScroll';\nimport WebLink from '../../common/WebLink';\nimport NothingFound from '../../common/NothingFound';\nimport Loading from '../../ui/Loading';\n\nexport type OwnProps = {\n searchQuery?: string;\n};\n\nconst CURRENT_TYPE = 'links';\nconst INTERSECTION_THROTTLE = 500;\n\nconst runThrottled = throttle((cb) => cb(), 500, true);\n\nconst LinkResults: FC = ({\n searchQuery,\n searchChatId,\n isLoading,\n chatsById,\n usersById,\n globalMessagesByChatId,\n foundIds,\n lastSyncTime,\n isChatProtected,\n}) => {\n const {\n searchMessagesGlobal,\n focusMessage,\n } = getActions();\n\n // eslint-disable-next-line no-null/no-null\n const containerRef = useRef(null);\n\n const lang = useLang();\n\n const { observe: observeIntersectionForMedia } = useIntersectionObserver({\n rootRef: containerRef,\n throttleMs: INTERSECTION_THROTTLE,\n });\n\n const handleLoadMore = useCallback(({ direction }: { direction: LoadMoreDirection }) => {\n if (lastSyncTime && direction === LoadMoreDirection.Backwards) {\n runThrottled(() => {\n searchMessagesGlobal({\n type: CURRENT_TYPE,\n query: searchQuery,\n chatId: searchChatId,\n });\n });\n }\n }, [lastSyncTime, searchMessagesGlobal, searchQuery, searchChatId]);\n\n const foundMessages = useMemo(() => {\n if (!foundIds || !globalMessagesByChatId) {\n return MEMO_EMPTY_ARRAY;\n }\n\n return foundIds.map((id) => {\n const [chatId, messageId] = id.split('_');\n\n return globalMessagesByChatId[chatId]?.byId[Number(messageId)];\n }).filter(Boolean);\n }, [globalMessagesByChatId, foundIds]);\n\n const handleMessageFocus = useCallback((messageId: number, chatId: string) => {\n focusMessage({ chatId, messageId });\n }, [focusMessage]);\n\n function renderList() {\n return foundMessages.map((message, index) => {\n const shouldDrawDateDivider = index === 0\n || toYearMonth(message.date) !== toYearMonth(foundMessages[index - 1].date);\n return (\n \n {shouldDrawDateDivider && (\n

\n {formatMonthAndYear(lang, new Date(message.date * 1000))}\n

\n )}\n \n \n );\n });\n }\n\n const canRenderContents = useAsyncRendering([searchQuery], SLIDE_TRANSITION_DURATION) && !isLoading;\n\n return (\n
\n \n {!canRenderContents && }\n {canRenderContents && (!foundIds || foundIds.length === 0) && (\n \n )}\n {canRenderContents && foundIds && foundIds.length > 0 && renderList()}\n \n
\n );\n};\n\nexport default memo(withGlobal(\n createMapStateToProps(CURRENT_TYPE),\n)(LinkResults));\n","import React, {\n FC, memo, useCallback, useMemo, useRef,\n} from '../../../lib/teact/teact';\nimport { getActions, withGlobal } from '../../../global';\n\nimport { ApiMessage } from '../../../api/types';\nimport { LoadMoreDirection } from '../../../types';\n\nimport { SLIDE_TRANSITION_DURATION } from '../../../config';\nimport { MEMO_EMPTY_ARRAY } from '../../../util/memo';\nimport { createMapStateToProps, StateProps } from './helpers/createMapStateToProps';\nimport { formatMonthAndYear, toYearMonth } from '../../../util/dateFormat';\nimport { getSenderName } from './helpers/getSenderName';\nimport { throttle } from '../../../util/schedulers';\nimport { getMessageDocument } from '../../../global/helpers';\nimport useAsyncRendering from '../../right/hooks/useAsyncRendering';\nimport useLang from '../../../hooks/useLang';\nimport { useIntersectionObserver } from '../../../hooks/useIntersectionObserver';\n\nimport Document from '../../common/Document';\nimport InfiniteScroll from '../../ui/InfiniteScroll';\nimport NothingFound from '../../common/NothingFound';\nimport Loading from '../../ui/Loading';\n\nexport type OwnProps = {\n searchQuery?: string;\n};\n\nconst CURRENT_TYPE = 'documents';\nconst INTERSECTION_THROTTLE = 500;\n\nconst runThrottled = throttle((cb) => cb(), 500, true);\n\nconst FileResults: FC = ({\n searchQuery,\n searchChatId,\n isLoading,\n chatsById,\n usersById,\n globalMessagesByChatId,\n foundIds,\n activeDownloads,\n lastSyncTime,\n}) => {\n const {\n searchMessagesGlobal,\n focusMessage,\n } = getActions();\n\n // eslint-disable-next-line no-null/no-null\n const containerRef = useRef(null);\n\n const lang = useLang();\n\n const { observe: observeIntersectionForMedia } = useIntersectionObserver({\n rootRef: containerRef,\n throttleMs: INTERSECTION_THROTTLE,\n });\n\n const handleLoadMore = useCallback(({ direction }: { direction: LoadMoreDirection }) => {\n if (lastSyncTime && direction === LoadMoreDirection.Backwards) {\n runThrottled(() => {\n searchMessagesGlobal({\n type: CURRENT_TYPE,\n query: searchQuery,\n chatId: searchChatId,\n });\n });\n }\n }, [lastSyncTime, searchMessagesGlobal, searchQuery, searchChatId]);\n\n const foundMessages = useMemo(() => {\n if (!foundIds || !globalMessagesByChatId) {\n return MEMO_EMPTY_ARRAY;\n }\n\n return foundIds.map((id) => {\n const [chatId, messageId] = id.split('_');\n const message = globalMessagesByChatId[chatId]?.byId[Number(messageId)];\n\n return message && getMessageDocument(message) ? message : undefined;\n }).filter(Boolean) as ApiMessage[];\n }, [globalMessagesByChatId, foundIds]);\n\n const handleMessageFocus = useCallback((messageId: number, chatId: string) => {\n focusMessage({ chatId, messageId });\n }, [focusMessage]);\n\n function renderList() {\n return foundMessages.map((message, index) => {\n const shouldDrawDateDivider = index === 0\n || toYearMonth(message.date) !== toYearMonth(foundMessages[index - 1].date);\n return (\n \n {shouldDrawDateDivider && (\n

{formatMonthAndYear(lang, new Date(message.date * 1000))}

\n )}\n \n \n );\n });\n }\n\n const canRenderContents = useAsyncRendering([searchQuery], SLIDE_TRANSITION_DURATION) && !isLoading;\n\n return (\n
\n \n {!canRenderContents && }\n {canRenderContents && (!foundIds || foundIds.length === 0) && (\n \n )}\n {canRenderContents && foundIds && foundIds.length > 0 && renderList()}\n \n
\n );\n};\n\nexport default memo(withGlobal(\n createMapStateToProps(CURRENT_TYPE),\n)(FileResults));\n","import React, {\n FC, memo, useCallback, useMemo,\n} from '../../../lib/teact/teact';\nimport { getActions, withGlobal } from '../../../global';\n\nimport { AudioOrigin, LoadMoreDirection } from '../../../types';\n\nimport { SLIDE_TRANSITION_DURATION } from '../../../config';\nimport { MEMO_EMPTY_ARRAY } from '../../../util/memo';\nimport { createMapStateToProps, StateProps } from './helpers/createMapStateToProps';\nimport { formatMonthAndYear, toYearMonth } from '../../../util/dateFormat';\nimport { getSenderName } from './helpers/getSenderName';\nimport { throttle } from '../../../util/schedulers';\nimport useAsyncRendering from '../../right/hooks/useAsyncRendering';\nimport useLang from '../../../hooks/useLang';\n\nimport InfiniteScroll from '../../ui/InfiniteScroll';\nimport Audio from '../../common/Audio';\nimport NothingFound from '../../common/NothingFound';\nimport Loading from '../../ui/Loading';\n\nexport type OwnProps = {\n isVoice?: boolean;\n searchQuery?: string;\n};\n\nconst runThrottled = throttle((cb) => cb(), 500, true);\n\nconst AudioResults: FC = ({\n theme,\n isVoice,\n searchQuery,\n searchChatId,\n isLoading,\n chatsById,\n usersById,\n globalMessagesByChatId,\n foundIds,\n lastSyncTime,\n activeDownloads,\n}) => {\n const {\n searchMessagesGlobal,\n focusMessage,\n openAudioPlayer,\n } = getActions();\n\n const lang = useLang();\n const currentType = isVoice ? 'voice' : 'audio';\n const handleLoadMore = useCallback(({ direction }: { direction: LoadMoreDirection }) => {\n if (lastSyncTime && direction === LoadMoreDirection.Backwards) {\n runThrottled(() => {\n searchMessagesGlobal({\n type: currentType,\n query: searchQuery,\n chatId: searchChatId,\n });\n });\n }\n }, [currentType, lastSyncTime, searchMessagesGlobal, searchQuery, searchChatId]);\n\n const foundMessages = useMemo(() => {\n if (!foundIds || !globalMessagesByChatId) {\n return MEMO_EMPTY_ARRAY;\n }\n\n return foundIds.map((id) => {\n const [chatId, messageId] = id.split('_');\n\n return globalMessagesByChatId[chatId]?.byId[Number(messageId)];\n }).filter(Boolean);\n }, [globalMessagesByChatId, foundIds]);\n\n const handleMessageFocus = useCallback((messageId: number, chatId: string) => {\n focusMessage({ chatId, messageId });\n }, [focusMessage]);\n\n const handlePlayAudio = useCallback((messageId: number, chatId: string) => {\n openAudioPlayer({ chatId, messageId });\n }, [openAudioPlayer]);\n\n function renderList() {\n return foundMessages.map((message, index) => {\n const shouldDrawDateDivider = index === 0\n || toYearMonth(message.date) !== toYearMonth(foundMessages[index - 1].date);\n return (\n \n {shouldDrawDateDivider && (\n

\n {formatMonthAndYear(lang, new Date(message.date * 1000))}\n

\n )}\n \n \n );\n });\n }\n\n const canRenderContents = useAsyncRendering([searchQuery], SLIDE_TRANSITION_DURATION) && !isLoading;\n\n return (\n
\n \n {!canRenderContents && }\n {canRenderContents && (!foundIds || foundIds.length === 0) && (\n \n )}\n {canRenderContents && foundIds && foundIds.length > 0 && renderList()}\n \n
\n );\n};\n\nexport default memo(withGlobal(\n createMapStateToProps('audio'),\n)(AudioResults));\n","import React, {\n FC, memo, useCallback, useState, useMemo, useRef,\n} from '../../../lib/teact/teact';\nimport { getActions, withGlobal } from '../../../global';\n\nimport { GlobalSearchContent } from '../../../types';\n\nimport { parseDateString } from '../../../util/dateFormat';\nimport useKeyboardListNavigation from '../../../hooks/useKeyboardListNavigation';\nimport useLang from '../../../hooks/useLang';\nimport useHistoryBack from '../../../hooks/useHistoryBack';\n\nimport TabList from '../../ui/TabList';\nimport Transition from '../../ui/Transition';\nimport ChatResults from './ChatResults';\nimport UserChatResults from './ChatMessageResults';\nimport MediaResults from './MediaResults';\nimport LinkResults from './LinkResults';\nimport FileResults from './FileResults';\nimport AudioResults from './AudioResults';\n\nimport './LeftSearch.scss';\n\nexport type OwnProps = {\n searchQuery?: string;\n searchDate?: number;\n isActive: boolean;\n onReset: () => void;\n};\n\ntype StateProps = {\n currentContent?: GlobalSearchContent;\n chatId?: string;\n};\n\nconst TABS = [\n { type: GlobalSearchContent.ChatList, title: 'SearchAllChatsShort' },\n { type: GlobalSearchContent.Media, title: 'SharedMediaTab2' },\n { type: GlobalSearchContent.Links, title: 'SharedLinksTab2' },\n { type: GlobalSearchContent.Files, title: 'SharedFilesTab2' },\n { type: GlobalSearchContent.Music, title: 'SharedMusicTab2' },\n { type: GlobalSearchContent.Voice, title: 'SharedVoiceTab2' },\n];\n\nconst CHAT_TABS = [\n { type: GlobalSearchContent.ChatList, title: 'All Messages' },\n ...TABS.slice(1),\n];\n\nconst TRANSITION_RENDER_COUNT = Object.keys(GlobalSearchContent).length / 2;\n\nconst LeftSearch: FC = ({\n searchQuery,\n searchDate,\n isActive,\n currentContent = GlobalSearchContent.ChatList,\n chatId,\n onReset,\n}) => {\n const {\n setGlobalSearchContent,\n setGlobalSearchDate,\n } = getActions();\n\n const lang = useLang();\n const [activeTab, setActiveTab] = useState(currentContent);\n const dateSearchQuery = useMemo(() => parseDateString(searchQuery), [searchQuery]);\n\n const handleSwitchTab = useCallback((index: number) => {\n const tab = TABS[index];\n setGlobalSearchContent({ content: tab.type });\n setActiveTab(index);\n }, [setGlobalSearchContent]);\n\n const handleSearchDateSelect = useCallback((value: Date) => {\n setGlobalSearchDate({ date: value.getTime() / 1000 });\n }, [setGlobalSearchDate]);\n\n useHistoryBack(isActive, onReset, undefined, undefined, true);\n\n // eslint-disable-next-line no-null/no-null\n const containerRef = useRef(null);\n const handleKeyDown = useKeyboardListNavigation(containerRef, isActive, undefined, '.ListItem-button', true);\n\n return (\n
\n \n \n {(() => {\n switch (currentContent) {\n case GlobalSearchContent.ChatList:\n if (chatId) {\n return (\n \n );\n }\n return (\n \n );\n case GlobalSearchContent.Media:\n return ;\n case GlobalSearchContent.Links:\n return ;\n case GlobalSearchContent.Files:\n return ;\n case GlobalSearchContent.Music:\n return (\n \n );\n case GlobalSearchContent.Voice:\n return (\n \n );\n default:\n return undefined;\n }\n })()}\n \n
\n );\n};\n\nexport default memo(withGlobal(\n (global): StateProps => {\n const { currentContent, chatId } = global.globalSearch;\n\n return { currentContent, chatId };\n },\n)(LeftSearch));\n","import useReducer, { StateReducer, Dispatch } from '../useReducer';\n\nexport type TwoFaActions = (\n 'setCurrentPassword' | 'setPassword' | 'setHint' | 'setEmail' | 'reset'\n);\nexport type TwoFaDispatch = Dispatch;\n\nexport type TwoFaState = {\n currentPassword: string;\n password: string;\n hint: string;\n email: string;\n};\n\nconst INITIAL_STATE: TwoFaState = {\n currentPassword: '',\n password: '',\n hint: '',\n email: '',\n};\n\nconst twoFaReducer: StateReducer = (\n state,\n action,\n) => {\n switch (action.type) {\n case 'setCurrentPassword':\n return {\n ...state,\n currentPassword: action.payload,\n };\n\n case 'setPassword':\n return {\n ...state,\n password: action.payload,\n };\n\n case 'setHint':\n return {\n ...state,\n hint: action.payload,\n };\n\n case 'setEmail':\n return {\n ...state,\n email: action.payload,\n };\n\n case 'reset':\n return INITIAL_STATE;\n\n default:\n return state;\n }\n};\n\nconst useTwoFaReducer = () => {\n return useReducer(twoFaReducer, INITIAL_STATE);\n};\n\nexport default useTwoFaReducer;\n","import React, {\n FC, memo, useCallback, useMemo, useState,\n} from '../../../lib/teact/teact';\nimport { getActions } from '../../../global';\n\nimport { SettingsScreens } from '../../../types';\n\nimport { IS_SINGLE_COLUMN_LAYOUT } from '../../../util/environment';\nimport useLang from '../../../hooks/useLang';\n\nimport DropdownMenu from '../../ui/DropdownMenu';\nimport MenuItem from '../../ui/MenuItem';\nimport Button from '../../ui/Button';\nimport ConfirmDialog from '../../ui/ConfirmDialog';\n\ntype OwnProps = {\n currentScreen: SettingsScreens;\n editedFolderId?: number;\n onReset: () => void;\n onSaveFilter: () => void;\n onScreenSelect: (screen: SettingsScreens) => void;\n};\n\nconst SettingsHeader: FC = ({\n currentScreen,\n editedFolderId,\n onReset,\n onSaveFilter,\n onScreenSelect,\n}) => {\n const {\n signOut,\n deleteChatFolder,\n } = getActions();\n\n const [isSignOutDialogOpen, setIsSignOutDialogOpen] = useState(false);\n const [isDeleteFolderDialogOpen, setIsDeleteFolderDialogOpen] = useState(false);\n\n const openSignOutConfirmation = useCallback(() => {\n setIsSignOutDialogOpen(true);\n }, []);\n\n const closeSignOutConfirmation = useCallback(() => {\n setIsSignOutDialogOpen(false);\n }, []);\n\n const openDeleteFolderConfirmation = useCallback(() => {\n setIsDeleteFolderDialogOpen(true);\n }, []);\n\n const closeDeleteFolderConfirmation = useCallback(() => {\n setIsDeleteFolderDialogOpen(false);\n }, []);\n\n const handleSignOutMessage = useCallback(() => {\n closeSignOutConfirmation();\n signOut();\n }, [closeSignOutConfirmation, signOut]);\n\n const handleDeleteFolderMessage = useCallback(() => {\n closeDeleteFolderConfirmation();\n deleteChatFolder({ id: editedFolderId });\n onReset();\n }, [editedFolderId, closeDeleteFolderConfirmation, deleteChatFolder, onReset]);\n\n const SettingsMenuButton: FC<{ onTrigger: () => void; isOpen?: boolean }> = useMemo(() => {\n return ({ onTrigger, isOpen }) => (\n \n \n \n );\n }, []);\n\n const lang = useLang();\n\n function renderHeaderContent() {\n switch (currentScreen) {\n case SettingsScreens.EditProfile:\n return

{lang('lng_settings_information')}

;\n case SettingsScreens.General:\n return

{lang('General')}

;\n case SettingsScreens.QuickReaction:\n return

{lang('DoubleTapSetting')}

;\n case SettingsScreens.Notifications:\n return

{lang('Notifications')}

;\n case SettingsScreens.DataStorage:\n return

{lang('DataSettings')}

;\n case SettingsScreens.Privacy:\n return

{lang('PrivacySettings')}

;\n case SettingsScreens.Language:\n return

{lang('Language')}

;\n\n case SettingsScreens.GeneralChatBackground:\n return

{lang('ChatBackground')}

;\n case SettingsScreens.GeneralChatBackgroundColor:\n return

{lang('SetColor')}

;\n\n case SettingsScreens.PrivacyPhoneNumber:\n return

{lang('PrivacyPhone')}

;\n case SettingsScreens.PrivacyLastSeen:\n return

{lang('PrivacyLastSeen')}

;\n case SettingsScreens.PrivacyProfilePhoto:\n return

{lang('Privacy.ProfilePhoto')}

;\n case SettingsScreens.PrivacyForwarding:\n return

{lang('PrivacyForwards')}

;\n case SettingsScreens.PrivacyGroupChats:\n return

{lang('AutodownloadGroupChats')}

;\n case SettingsScreens.PrivacyPhoneNumberAllowedContacts:\n case SettingsScreens.PrivacyLastSeenAllowedContacts:\n case SettingsScreens.PrivacyProfilePhotoAllowedContacts:\n case SettingsScreens.PrivacyForwardingAllowedContacts:\n case SettingsScreens.PrivacyGroupChatsAllowedContacts:\n return

{lang('AlwaysShareWith')}

;\n case SettingsScreens.PrivacyPhoneNumberDeniedContacts:\n case SettingsScreens.PrivacyLastSeenDeniedContacts:\n case SettingsScreens.PrivacyProfilePhotoDeniedContacts:\n case SettingsScreens.PrivacyForwardingDeniedContacts:\n case SettingsScreens.PrivacyGroupChatsDeniedContacts:\n return

{lang('NeverShareWith')}

;\n\n case SettingsScreens.ActiveSessions:\n return

{lang('SessionsTitle')}

;\n case SettingsScreens.PrivacyBlockedUsers:\n return

{lang('BlockedUsers')}

;\n\n case SettingsScreens.TwoFaDisabled:\n case SettingsScreens.TwoFaEnabled:\n return

{lang('TwoStepVerification')}

;\n case SettingsScreens.TwoFaNewPassword:\n case SettingsScreens.TwoFaChangePasswordNew:\n case SettingsScreens.TwoFaChangePasswordConfirm:\n return

{lang('PleaseEnterCurrentPassword')}

;\n case SettingsScreens.TwoFaNewPasswordConfirm:\n return

{lang('PleaseReEnterPassword')}

;\n case SettingsScreens.TwoFaNewPasswordHint:\n case SettingsScreens.TwoFaChangePasswordHint:\n return

{lang('PasswordHint')}

;\n case SettingsScreens.TwoFaNewPasswordEmail:\n case SettingsScreens.TwoFaRecoveryEmail:\n return

{lang('RecoveryEmailTitle')}

;\n case SettingsScreens.TwoFaNewPasswordEmailCode:\n case SettingsScreens.TwoFaRecoveryEmailCode:\n return

Recovery Email Code

;\n case SettingsScreens.TwoFaCongratulations:\n return

{lang('TwoStepVerificationPasswordSet')}

;\n case SettingsScreens.TwoFaChangePasswordCurrent:\n case SettingsScreens.TwoFaTurnOff:\n case SettingsScreens.TwoFaRecoveryEmailCurrentPassword:\n return

{lang('PleaseEnterCurrentPassword')}

;\n\n case SettingsScreens.Folders:\n return

{lang('Filters')}

;\n case SettingsScreens.FoldersCreateFolder:\n return

{lang('FilterNew')}

;\n case SettingsScreens.FoldersEditFolder:\n case SettingsScreens.FoldersEditFolderFromChatList:\n return (\n
\n

{lang('FilterEdit')}

\n\n {editedFolderId && (\n \n \n {lang('Delete')}\n \n \n )}\n
\n );\n case SettingsScreens.FoldersIncludedChats:\n case SettingsScreens.FoldersIncludedChatsFromChatList:\n case SettingsScreens.FoldersExcludedChats:\n case SettingsScreens.FoldersExcludedChatsFromChatList:\n return (\n
\n {(currentScreen === SettingsScreens.FoldersIncludedChats\n || currentScreen === SettingsScreens.FoldersIncludedChatsFromChatList) ? (\n

{lang('FilterInclude')}

\n ) : (\n

{lang('FilterExclude')}

\n )}\n\n \n \n \n
\n );\n\n default:\n return (\n
\n

{lang('SETTINGS')}

\n\n onScreenSelect(SettingsScreens.EditProfile)}\n ariaLabel={lang('lng_settings_information')}\n >\n \n \n \n {lang('LogOutTitle')}\n \n
\n );\n }\n }\n\n return (\n
\n \n \n \n {renderHeaderContent()}\n \n \n
\n );\n};\n\nexport default memo(SettingsHeader);\n","import React, { FC, memo, useEffect } from '../../../lib/teact/teact';\nimport { getActions, withGlobal } from '../../../global';\n\nimport { SettingsScreens } from '../../../types';\nimport { ApiUser } from '../../../api/types';\n\nimport { selectUser } from '../../../global/selectors';\nimport useLang from '../../../hooks/useLang';\nimport useHistoryBack from '../../../hooks/useHistoryBack';\n\nimport ListItem from '../../ui/ListItem';\nimport ProfileInfo from '../../common/ProfileInfo';\nimport ChatExtra from '../../common/ChatExtra';\n\ntype OwnProps = {\n isActive?: boolean;\n onScreenSelect: (screen: SettingsScreens) => void;\n onReset: () => void;\n};\n\ntype StateProps = {\n sessionCount: number;\n currentUser?: ApiUser;\n lastSyncTime?: number;\n};\n\nconst SettingsMain: FC = ({\n isActive,\n onScreenSelect,\n onReset,\n currentUser,\n sessionCount,\n lastSyncTime,\n}) => {\n const { loadProfilePhotos, loadAuthorizations } = getActions();\n\n const lang = useLang();\n const profileId = currentUser?.id;\n\n useEffect(() => {\n if (profileId && lastSyncTime) {\n loadProfilePhotos({ profileId });\n }\n }, [lastSyncTime, profileId, loadProfilePhotos]);\n\n useHistoryBack(isActive, onReset, onScreenSelect, SettingsScreens.Main);\n \n useEffect(() => {\n if (lastSyncTime) {\n loadAuthorizations();\n }\n }, [lastSyncTime, loadAuthorizations]);\n\n return (\n
\n
\n {currentUser && (\n \n )}\n {currentUser && (\n \n )}\n onScreenSelect(SettingsScreens.General)}\n >\n {lang('Telegram.GeneralSettingsViewController')}\n \n onScreenSelect(SettingsScreens.Notifications)}\n >\n {lang('Notifications')}\n \n onScreenSelect(SettingsScreens.DataStorage)}\n >\n {lang('DataSettings')}\n \n onScreenSelect(SettingsScreens.Privacy)}\n >\n {lang('PrivacySettings')}\n \n onScreenSelect(SettingsScreens.Folders)}\n >\n {lang('Filters')}\n \n onScreenSelect(SettingsScreens.ActiveSessions)}\n >\n {lang('SessionsTitle')}\n {sessionCount > 0 && ({sessionCount})}\n \n onScreenSelect(SettingsScreens.Language)}\n >\n {lang('Language')}\n {lang.langName}\n \n
\n
\n );\n};\n\nexport default memo(withGlobal(\n (global): StateProps => {\n const { currentUserId, lastSyncTime } = global;\n\n return {\n sessionCount: global.activeSessions.length,\n currentUser: currentUserId ? selectUser(global, currentUserId) : undefined,\n lastSyncTime,\n };\n },\n)(SettingsMain));\n","import { ChangeEvent } from 'react';\nimport React, {\n FC, useState, useCallback, memo, useEffect, useMemo,\n} from '../../lib/teact/teact';\n\nimport { debounce } from '../../util/schedulers';\nimport useLang from '../../hooks/useLang';\n\nimport InputText from '../ui/InputText';\n\ntype OwnProps = {\n currentUsername?: string;\n asLink?: boolean;\n isLoading?: boolean;\n isUsernameAvailable?: boolean;\n checkUsername: AnyToVoidFunction;\n onChange: (value: string | false) => void;\n};\n\nconst MIN_USERNAME_LENGTH = 5;\nconst MAX_USERNAME_LENGTH = 32;\nconst LINK_PREFIX = 'https://t.me/';\nconst LINK_PREFIX_REGEX = /https:\\/\\/t\\.me\\/?/i;\nconst USERNAME_REGEX = /^([a-zA-Z0-9_]+)$/;\n\nconst runDebouncedForCheckUsername = debounce((cb) => cb(), 250, false);\n\nfunction isUsernameValid(username: string) {\n return username.length >= MIN_USERNAME_LENGTH\n && username.length <= MAX_USERNAME_LENGTH\n && USERNAME_REGEX.test(username);\n}\n\nconst SettingsEditProfile: FC = ({\n currentUsername,\n asLink,\n isLoading,\n isUsernameAvailable,\n checkUsername,\n onChange,\n}) => {\n const [username, setUsername] = useState(currentUsername || '');\n\n const lang = useLang();\n const langPrefix = asLink ? 'SetUrl' : 'Username';\n const label = asLink ? lang('SetUrlPlaceholder') : lang('Username');\n\n const [usernameSuccess, usernameError] = useMemo(() => {\n if (!username.length) {\n return [];\n }\n\n if (username.length < MIN_USERNAME_LENGTH) {\n return [undefined, `${label} is too short`];\n }\n if (username.length > MAX_USERNAME_LENGTH) {\n return [undefined, `${label} is too long`];\n }\n if (!USERNAME_REGEX.test(username)) {\n return [undefined, `${label} contains invalid characters`];\n }\n\n if (isUsernameAvailable === undefined) {\n return [];\n }\n\n // Variable `isUsernameAvailable` is initialized with `undefined`, so a strict false check is required\n return [\n isUsernameAvailable ? lang(`${langPrefix}Available`, 'Username') : undefined,\n isUsernameAvailable === false ? lang(`${langPrefix}InUse`) : undefined,\n ];\n }, [username, isUsernameAvailable, lang, langPrefix, label]);\n\n useEffect(() => {\n setUsername(currentUsername || '');\n }, [asLink, currentUsername]);\n\n const handleUsernameChange = useCallback((e: ChangeEvent) => {\n const newUsername = e.target.value.trim().replace(LINK_PREFIX_REGEX, '');\n setUsername(newUsername);\n e.target.value = `${asLink ? LINK_PREFIX : ''}${newUsername}`;\n\n const isValid = isUsernameValid(newUsername);\n\n if (isValid) {\n runDebouncedForCheckUsername(() => {\n checkUsername({ username: newUsername });\n });\n }\n\n if (onChange) {\n onChange(isValid ? newUsername : false);\n }\n }, [asLink, checkUsername, onChange]);\n\n return (\n \n );\n};\n\nexport default memo(SettingsEditProfile);\n","import { ChangeEvent } from 'react';\nimport React, {\n FC, useState, useCallback, memo, useEffect, useMemo,\n} from '../../../lib/teact/teact';\nimport { getActions, withGlobal } from '../../../global';\n\nimport { ApiMediaFormat } from '../../../api/types';\nimport { ProfileEditProgress, SettingsScreens } from '../../../types';\n\nimport { throttle } from '../../../util/schedulers';\nimport { selectUser } from '../../../global/selectors';\nimport { getChatAvatarHash } from '../../../global/helpers';\nimport useMedia from '../../../hooks/useMedia';\nimport useLang from '../../../hooks/useLang';\n\nimport AvatarEditable from '../../ui/AvatarEditable';\nimport FloatingActionButton from '../../ui/FloatingActionButton';\nimport Spinner from '../../ui/Spinner';\nimport InputText from '../../ui/InputText';\nimport renderText from '../../common/helpers/renderText';\nimport UsernameInput from '../../common/UsernameInput';\nimport useHistoryBack from '../../../hooks/useHistoryBack';\n\ntype OwnProps = {\n isActive: boolean;\n onScreenSelect: (screen: SettingsScreens) => void;\n onReset: () => void;\n};\n\ntype StateProps = {\n currentAvatarHash?: string;\n currentFirstName?: string;\n currentLastName?: string;\n currentBio?: string;\n currentUsername?: string;\n progress?: ProfileEditProgress;\n isUsernameAvailable?: boolean;\n};\n\nconst runThrottled = throttle((cb) => cb(), 60000, true);\n\nconst MAX_BIO_LENGTH = 70;\n\nconst ERROR_FIRST_NAME_MISSING = 'Please provide your first name';\nconst ERROR_BIO_TOO_LONG = 'Bio can\\' be longer than 70 characters';\n\nconst SettingsEditProfile: FC = ({\n isActive,\n onScreenSelect,\n onReset,\n currentAvatarHash,\n currentFirstName,\n currentLastName,\n currentBio,\n currentUsername,\n progress,\n isUsernameAvailable,\n}) => {\n const {\n loadCurrentUser,\n updateProfile,\n checkUsername,\n } = getActions();\n\n const lang = useLang();\n\n const [isUsernameTouched, setIsUsernameTouched] = useState(false);\n const [isProfileFieldsTouched, setIsProfileFieldsTouched] = useState(false);\n const [error, setError] = useState();\n\n const [photo, setPhoto] = useState();\n const [firstName, setFirstName] = useState(currentFirstName || '');\n const [lastName, setLastName] = useState(currentLastName || '');\n const [bio, setBio] = useState(currentBio || '');\n const [username, setUsername] = useState(currentUsername || '');\n\n const currentAvatarBlobUrl = useMedia(currentAvatarHash, false, ApiMediaFormat.BlobUrl);\n\n const isLoading = progress === ProfileEditProgress.InProgress;\n const isUsernameError = username === false;\n\n const isSaveButtonShown = useMemo(() => {\n if (isUsernameError) {\n return false;\n }\n\n return Boolean(photo) || isProfileFieldsTouched || isUsernameAvailable === true;\n }, [photo, isProfileFieldsTouched, isUsernameError, isUsernameAvailable]);\n\n useHistoryBack(isActive, onReset, onScreenSelect, SettingsScreens.EditProfile);\n\n // Due to the parent Transition, this component never gets unmounted,\n // that's why we use throttled API call on every update.\n useEffect(() => {\n runThrottled(() => {\n loadCurrentUser();\n });\n }, [loadCurrentUser]);\n\n useEffect(() => {\n setPhoto(undefined);\n }, [currentAvatarBlobUrl]);\n\n useEffect(() => {\n setFirstName(currentFirstName || '');\n setLastName(currentLastName || '');\n setBio(currentBio || '');\n }, [currentFirstName, currentLastName, currentBio]);\n\n useEffect(() => {\n setUsername(currentUsername || '');\n }, [currentUsername]);\n\n useEffect(() => {\n if (progress === ProfileEditProgress.Complete) {\n setIsProfileFieldsTouched(false);\n setIsUsernameTouched(false);\n setError(undefined);\n }\n }, [progress]);\n\n const handlePhotoChange = useCallback((newPhoto: File) => {\n setPhoto(newPhoto);\n }, []);\n\n const handleFirstNameChange = useCallback((e: ChangeEvent) => {\n setFirstName(e.target.value);\n setIsProfileFieldsTouched(true);\n }, []);\n\n const handleLastNameChange = useCallback((e: ChangeEvent) => {\n setLastName(e.target.value);\n setIsProfileFieldsTouched(true);\n }, []);\n\n const handleBioChange = useCallback((e: ChangeEvent) => {\n setBio(e.target.value);\n setIsProfileFieldsTouched(true);\n }, []);\n\n const handleUsernameChange = useCallback((value: string | false) => {\n setUsername(value);\n setIsUsernameTouched(true);\n }, []);\n\n const handleProfileSave = useCallback(() => {\n const trimmedFirstName = firstName.trim();\n const trimmedLastName = lastName.trim();\n const trimmedBio = bio.trim();\n\n if (!trimmedFirstName.length) {\n setError(ERROR_FIRST_NAME_MISSING);\n return;\n }\n\n if (trimmedBio.length > MAX_BIO_LENGTH) {\n setError(ERROR_BIO_TOO_LONG);\n return;\n }\n\n updateProfile({\n photo,\n ...(isProfileFieldsTouched && {\n firstName: trimmedFirstName,\n lastName: trimmedLastName,\n bio: trimmedBio,\n }),\n ...(isUsernameTouched && {\n username,\n }),\n });\n }, [\n photo,\n firstName, lastName, bio, isProfileFieldsTouched,\n username, isUsernameTouched,\n updateProfile,\n ]);\n\n return (\n
\n
\n
\n \n \n \n \n\n

\n {renderText(lang('lng_settings_about_bio'), ['br', 'simple_markdown'])}\n

\n
\n\n
\n

{lang('Username')}

\n\n \n\n

\n {renderText(lang('UsernameHelp'), ['br', 'simple_markdown'])}\n

\n {username && (\n

\n {lang('lng_username_link')}
\n https://t.me/{username}\n

\n )}\n
\n
\n\n \n {isLoading ? (\n \n ) : (\n \n )}\n \n
\n );\n};\n\nexport default memo(withGlobal(\n (global): StateProps => {\n const { currentUserId } = global;\n const { progress, isUsernameAvailable } = global.profileEdit || {};\n const currentUser = currentUserId ? selectUser(global, currentUserId) : undefined;\n\n if (!currentUser) {\n return {\n progress,\n isUsernameAvailable,\n };\n }\n\n const {\n firstName: currentFirstName,\n lastName: currentLastName,\n username: currentUsername,\n fullInfo,\n } = currentUser;\n const { bio: currentBio } = fullInfo || {};\n const currentAvatarHash = getChatAvatarHash(currentUser);\n\n return {\n currentAvatarHash,\n currentFirstName,\n currentLastName,\n currentBio,\n currentUsername,\n progress,\n isUsernameAvailable,\n };\n },\n)(SettingsEditProfile));\n","import React, { FC, memo, useCallback } from '../../../lib/teact/teact';\nimport { getActions, withGlobal } from '../../../global';\n\nimport { SettingsScreens, ISettings } from '../../../types';\n\nimport { AUTODOWNLOAD_FILESIZE_MB_LIMITS } from '../../../config';\nimport { pick } from '../../../util/iteratees';\nimport useLang from '../../../hooks/useLang';\nimport useHistoryBack from '../../../hooks/useHistoryBack';\n\nimport Checkbox from '../../ui/Checkbox';\nimport RangeSlider from '../../ui/RangeSlider';\n\ntype OwnProps = {\n isActive?: boolean;\n onScreenSelect: (screen: SettingsScreens) => void;\n onReset: () => void;\n};\n\ntype StateProps = Pick;\n\nconst SettingsDataStorage: FC = ({\n isActive,\n onScreenSelect,\n onReset,\n canAutoLoadPhotoFromContacts,\n canAutoLoadPhotoInPrivateChats,\n canAutoLoadPhotoInGroups,\n canAutoLoadPhotoInChannels,\n canAutoLoadVideoFromContacts,\n canAutoLoadVideoInPrivateChats,\n canAutoLoadVideoInGroups,\n canAutoLoadVideoInChannels,\n canAutoLoadFileFromContacts,\n canAutoLoadFileInPrivateChats,\n canAutoLoadFileInGroups,\n canAutoLoadFileInChannels,\n canAutoPlayGifs,\n canAutoPlayVideos,\n autoLoadFileMaxSizeMb,\n}) => {\n const { setSettingOption } = getActions();\n\n const lang = useLang();\n\n useHistoryBack(isActive, onReset, onScreenSelect, SettingsScreens.General);\n\n const renderFileSizeCallback = useCallback((value: number) => {\n return lang('AutodownloadSizeLimitUpTo', lang('FileSize.MB', String(AUTODOWNLOAD_FILESIZE_MB_LIMITS[value]), 'i'));\n }, [lang]);\n\n const handleFileSizeChange = useCallback((value: number) => {\n setSettingOption({ autoLoadFileMaxSizeMb: AUTODOWNLOAD_FILESIZE_MB_LIMITS[value] });\n }, [setSettingOption]);\n\n const handleCanAutoPlayGifsChange = useCallback((value: boolean) => {\n setSettingOption({ canAutoPlayGifs: value });\n }, [setSettingOption]);\n\n const handleCanAutoPlayVideosChange = useCallback((value: boolean) => {\n setSettingOption({ canAutoPlayVideos: value });\n }, [setSettingOption]);\n\n function renderContentSizeSlider() {\n const value = AUTODOWNLOAD_FILESIZE_MB_LIMITS.indexOf(autoLoadFileMaxSizeMb);\n\n return (\n
\n \n
\n );\n }\n\n function renderAutoDownloadBlock(\n title: string,\n key: 'Photo' | 'Video' | 'File',\n canAutoLoadFromContacts: boolean,\n canAutoLoadInPrivateChats: boolean,\n canAutoLoadInGroups: boolean,\n canAutoLoadInChannels: boolean,\n ) {\n return (\n
\n

{title}

\n\n setSettingOption({ [`canAutoLoad${key}FromContacts`]: isChecked })}\n />\n setSettingOption({ [`canAutoLoad${key}InPrivateChats`]: isChecked })}\n />\n setSettingOption({ [`canAutoLoad${key}InGroups`]: isChecked })}\n />\n setSettingOption({ [`canAutoLoad${key}InChannels`]: isChecked })}\n />\n\n {key === 'File' && renderContentSizeSlider()}\n
\n );\n }\n\n return (\n
\n {renderAutoDownloadBlock(\n lang('AutoDownloadPhotosTitle'),\n 'Photo',\n canAutoLoadPhotoFromContacts,\n canAutoLoadPhotoInPrivateChats,\n canAutoLoadPhotoInGroups,\n canAutoLoadPhotoInChannels,\n )}\n {renderAutoDownloadBlock(\n lang('AutoDownloadVideosTitle'),\n 'Video',\n canAutoLoadVideoFromContacts,\n canAutoLoadVideoInPrivateChats,\n canAutoLoadVideoInGroups,\n canAutoLoadVideoInChannels,\n )}\n {renderAutoDownloadBlock(\n 'Auto-download files', // Proper translation is not available yet\n 'File',\n canAutoLoadFileFromContacts,\n canAutoLoadFileInPrivateChats,\n canAutoLoadFileInGroups,\n canAutoLoadFileInChannels,\n )}\n\n
\n

{lang('AutoplayMedia')}

\n\n \n \n
\n
\n );\n};\n\nexport default memo(withGlobal(\n (global): StateProps => {\n return pick(global.settings.byKey, [\n 'canAutoLoadPhotoFromContacts',\n 'canAutoLoadPhotoInPrivateChats',\n 'canAutoLoadPhotoInGroups',\n 'canAutoLoadPhotoInChannels',\n 'canAutoLoadVideoFromContacts',\n 'canAutoLoadVideoInPrivateChats',\n 'canAutoLoadVideoInGroups',\n 'canAutoLoadVideoInChannels',\n 'canAutoLoadFileFromContacts',\n 'canAutoLoadFileInPrivateChats',\n 'canAutoLoadFileInGroups',\n 'canAutoLoadFileInChannels',\n 'canAutoPlayGifs',\n 'canAutoPlayVideos',\n 'autoLoadFileMaxSizeMb',\n ]);\n },\n)(SettingsDataStorage));\n","import React, {\n FC, memo, useMemo, useCallback, useState, useEffect,\n} from '../../../../lib/teact/teact';\nimport { getActions, withGlobal } from '../../../../global';\n\nimport { ApiChatFolder } from '../../../../api/types';\nimport { SettingsScreens } from '../../../../types';\n\nimport { STICKER_SIZE_FOLDER_SETTINGS } from '../../../../config';\nimport { throttle } from '../../../../util/schedulers';\nimport getAnimationData from '../../../common/helpers/animatedAssets';\nimport { getFolderDescriptionText } from '../../../../global/helpers';\nimport useLang from '../../../../hooks/useLang';\nimport useHistoryBack from '../../../../hooks/useHistoryBack';\nimport { useFolderManagerForChatsCount } from '../../../../hooks/useFolderManager';\n\nimport ListItem from '../../../ui/ListItem';\nimport Button from '../../../ui/Button';\nimport Loading from '../../../ui/Loading';\nimport AnimatedSticker from '../../../common/AnimatedSticker';\n\ntype OwnProps = {\n isActive?: boolean;\n onCreateFolder: () => void;\n onEditFolder: (folder: ApiChatFolder) => void;\n onScreenSelect: (screen: SettingsScreens) => void;\n onReset: () => void;\n};\n\ntype StateProps = {\n orderedFolderIds?: number[];\n foldersById: Record;\n recommendedChatFolders?: ApiChatFolder[];\n};\n\nconst runThrottledForLoadRecommended = throttle((cb) => cb(), 60000, true);\n\nconst MAX_ALLOWED_FOLDERS = 10;\n\nconst SettingsFoldersMain: FC = ({\n isActive,\n onCreateFolder,\n onEditFolder,\n onScreenSelect,\n onReset,\n orderedFolderIds,\n foldersById,\n recommendedChatFolders,\n}) => {\n const {\n loadRecommendedChatFolders,\n addChatFolder,\n showDialog,\n } = getActions();\n\n const [animationData, setAnimationData] = useState();\n const [isAnimationLoaded, setIsAnimationLoaded] = useState(false);\n const handleAnimationLoad = useCallback(() => setIsAnimationLoaded(true), []);\n\n useEffect(() => {\n if (!animationData) {\n getAnimationData('FoldersAll').then(setAnimationData);\n }\n }, [animationData]);\n\n // Due to the parent Transition, this component never gets unmounted,\n // that's why we use throttled API call on every update.\n useEffect(() => {\n runThrottledForLoadRecommended(() => {\n loadRecommendedChatFolders();\n });\n }, [loadRecommendedChatFolders]);\n\n const handleCreateFolder = useCallback(() => {\n if (Object.keys(foldersById).length >= MAX_ALLOWED_FOLDERS) {\n showDialog({\n data: {\n message: 'DIALOG_FILTERS_TOO_MUCH',\n hasErrorKey: true,\n },\n });\n\n return;\n }\n\n onCreateFolder();\n }, [foldersById, showDialog, onCreateFolder]);\n\n const lang = useLang();\n\n useHistoryBack(isActive, onReset, onScreenSelect, SettingsScreens.Folders);\n\n const chatsCountByFolderId = useFolderManagerForChatsCount();\n const userFolders = useMemo(() => {\n if (!orderedFolderIds) {\n return undefined;\n }\n\n return orderedFolderIds.map((id) => {\n const folder = foldersById[id];\n\n return {\n id: folder.id,\n title: folder.title,\n subtitle: getFolderDescriptionText(lang, folder, chatsCountByFolderId[folder.id]),\n };\n });\n }, [orderedFolderIds, foldersById, lang, chatsCountByFolderId]);\n\n const handleCreateFolderFromRecommended = useCallback((folder: ApiChatFolder) => {\n if (Object.keys(foldersById).length >= MAX_ALLOWED_FOLDERS) {\n showDialog({\n data: {\n message: 'DIALOG_FILTERS_TOO_MUCH',\n hasErrorKey: true,\n },\n });\n\n return;\n }\n\n addChatFolder({ folder });\n }, [foldersById, addChatFolder, showDialog]);\n\n return (\n
\n
\n
\n {animationData && (\n \n )}\n
\n\n

\n {lang('CreateNewFilterInfo')}\n

\n\n \n \n {lang('CreateNewFilter')}\n \n
\n\n
\n

{lang('Filters')}

\n\n {userFolders?.length ? userFolders.map((folder) => (\n onEditFolder(foldersById[folder.id])}\n >\n {folder.title}\n {folder.subtitle}\n \n )) : userFolders && !userFolders.length ? (\n

\n You have no folders yet.\n

\n ) : }\n
\n\n {(recommendedChatFolders && Boolean(recommendedChatFolders.length)) && (\n
\n

\n {lang('FilterRecommended')}\n

\n\n {recommendedChatFolders.map((folder) => (\n handleCreateFolderFromRecommended(folder)}\n >\n
\n
\n {folder.title}\n {folder.description}\n
\n\n \n {lang('Add')}\n \n
\n \n ))}\n
\n )}\n
\n );\n};\n\nexport default memo(withGlobal(\n (global): StateProps => {\n const {\n orderedIds: orderedFolderIds,\n byId: foldersById,\n recommended: recommendedChatFolders,\n } = global.chatFolders;\n\n return {\n orderedFolderIds,\n foldersById,\n recommendedChatFolders,\n };\n },\n)(SettingsFoldersMain));\n","import React, { FC } from '../../lib/teact/teact';\n\nimport useLang from '../../hooks/useLang';\n\nimport Button from './Button';\n\nimport './ShowMoreButton.scss';\n\ntype OwnProps = {\n count: number;\n itemName: string;\n itemPluralName?: string;\n isLoading?: boolean;\n onClick: () => void;\n};\n\nconst ShowMoreButton: FC = ({\n count,\n itemName,\n itemPluralName,\n isLoading,\n onClick,\n}) => {\n const lang = useLang();\n\n return (\n \n \n Show {count} more {count > 1 ? itemPluralName || `${itemName}s` : itemName}\n \n );\n};\n\nexport default ShowMoreButton;\n","import React, {\n FC, memo, useCallback, useEffect, useMemo, useState,\n} from '../../../../lib/teact/teact';\nimport { getActions, withGlobal } from '../../../../global';\n\nimport { SettingsScreens } from '../../../../types';\n\nimport { STICKER_SIZE_FOLDER_SETTINGS } from '../../../../config';\nimport { findIntersectionWithSet } from '../../../../util/iteratees';\nimport { isUserId } from '../../../../global/helpers';\nimport getAnimationData from '../../../common/helpers/animatedAssets';\nimport {\n EXCLUDED_CHAT_TYPES,\n FolderEditDispatch,\n FoldersState,\n INCLUDED_CHAT_TYPES,\n selectChatFilters,\n} from '../../../../hooks/reducers/useFoldersReducer';\nimport useLang from '../../../../hooks/useLang';\nimport useHistoryBack from '../../../../hooks/useHistoryBack';\n\nimport ListItem from '../../../ui/ListItem';\nimport AnimatedSticker from '../../../common/AnimatedSticker';\nimport InputText from '../../../ui/InputText';\nimport PrivateChatInfo from '../../../common/PrivateChatInfo';\nimport GroupChatInfo from '../../../common/GroupChatInfo';\nimport FloatingActionButton from '../../../ui/FloatingActionButton';\nimport Spinner from '../../../ui/Spinner';\nimport ShowMoreButton from '../../../ui/ShowMoreButton';\n\ntype OwnProps = {\n state: FoldersState;\n dispatch: FolderEditDispatch;\n onAddIncludedChats: () => void;\n onAddExcludedChats: () => void;\n isActive?: boolean;\n onScreenSelect: (screen: SettingsScreens) => void;\n onReset: () => void;\n onBack: () => void;\n};\n\ntype StateProps = {\n loadedActiveChatIds?: string[];\n loadedArchivedChatIds?: string[];\n};\n\nconst SUBMIT_TIMEOUT = 500;\n\nconst INITIAL_CHATS_LIMIT = 5;\n\nconst ERROR_NO_TITLE = 'Please provide a title for this folder.';\nconst ERROR_NO_CHATS = 'ChatList.Filter.Error.Empty';\n\nconst SettingsFoldersEdit: FC = ({\n state,\n dispatch,\n onAddIncludedChats,\n onAddExcludedChats,\n isActive,\n onScreenSelect,\n onReset,\n onBack,\n loadedActiveChatIds,\n loadedArchivedChatIds,\n}) => {\n const {\n editChatFolder,\n addChatFolder,\n } = getActions();\n\n const [animationData, setAnimationData] = useState();\n const [isAnimationLoaded, setIsAnimationLoaded] = useState(false);\n const handleAnimationLoad = useCallback(() => setIsAnimationLoaded(true), []);\n\n const [isIncludedChatsListExpanded, setIsIncludedChatsListExpanded] = useState(false);\n const [isExcludedChatsListExpanded, setIsExcludedChatsListExpanded] = useState(false);\n\n const {\n selectedChatIds: includedChatIds,\n selectedChatTypes: includedChatTypes,\n } = selectChatFilters(state, 'included');\n const {\n selectedChatIds: excludedChatIds,\n selectedChatTypes: excludedChatTypes,\n } = selectChatFilters(state, 'excluded');\n\n useEffect(() => {\n if (!animationData) {\n getAnimationData('FoldersNew').then(setAnimationData);\n }\n }, [animationData]);\n\n useEffect(() => {\n setIsIncludedChatsListExpanded(false);\n setIsExcludedChatsListExpanded(false);\n }, [state.folderId]);\n\n const [visibleIncludedChatIds, visibleExcludedChatIds] = useMemo(() => {\n const allLoadedChatsSet = new Set([\n ...(loadedActiveChatIds || []),\n ...(loadedArchivedChatIds || []),\n ]);\n\n const loadedIncludedChatIds = findIntersectionWithSet(includedChatIds, allLoadedChatsSet);\n const loadedExcludedChatIds = findIntersectionWithSet(excludedChatIds, allLoadedChatsSet);\n\n return [\n isIncludedChatsListExpanded\n ? loadedIncludedChatIds\n : loadedIncludedChatIds.slice(0, INITIAL_CHATS_LIMIT - includedChatTypes.length),\n isExcludedChatsListExpanded\n ? loadedExcludedChatIds\n : loadedExcludedChatIds.slice(0, INITIAL_CHATS_LIMIT - excludedChatTypes.length),\n ];\n }, [\n excludedChatIds, includedChatIds, includedChatTypes, excludedChatTypes,\n isExcludedChatsListExpanded, isIncludedChatsListExpanded,\n loadedActiveChatIds, loadedArchivedChatIds,\n ]);\n\n const lang = useLang();\n\n useHistoryBack(isActive, onBack, onScreenSelect, state.mode === 'edit'\n ? SettingsScreens.FoldersEditFolder\n : SettingsScreens.FoldersCreateFolder);\n\n const handleChange = useCallback((event: React.ChangeEvent) => {\n const { currentTarget } = event;\n dispatch({ type: 'setTitle', payload: currentTarget.value.trim() });\n }, [dispatch]);\n\n const handleSubmit = useCallback(() => {\n const { title } = state.folder;\n\n if (!title) {\n dispatch({ type: 'setError', payload: ERROR_NO_TITLE });\n return;\n }\n\n if (!includedChatIds.length && !Object.keys(includedChatTypes).length) {\n dispatch({ type: 'setError', payload: ERROR_NO_CHATS });\n return;\n }\n\n dispatch({ type: 'setIsLoading', payload: true });\n if (state.mode === 'edit') {\n editChatFolder({ id: state.folderId, folderUpdate: state.folder });\n } else {\n addChatFolder({ folder: state.folder });\n }\n\n setTimeout(() => {\n onReset();\n }, SUBMIT_TIMEOUT);\n }, [addChatFolder, dispatch, editChatFolder, includedChatIds.length, includedChatTypes, onReset, state]);\n\n function renderChatType(key: string, mode: 'included' | 'excluded') {\n const chatType = mode === 'included'\n ? INCLUDED_CHAT_TYPES.find(({ key: typeKey }) => typeKey === key)\n : EXCLUDED_CHAT_TYPES.find(({ key: typeKey }) => typeKey === key);\n\n if (!chatType) {\n return undefined;\n }\n\n return (\n \n {lang(chatType.title)}\n \n );\n }\n\n function renderChats(mode: 'included' | 'excluded') {\n const selectedChatTypes = mode === 'included' ? includedChatTypes : excludedChatTypes;\n const visibleChatIds = mode === 'included' ? visibleIncludedChatIds : visibleExcludedChatIds;\n\n const isExpanded = mode === 'included' ? isIncludedChatsListExpanded : isExcludedChatsListExpanded;\n const allChatIds = mode === 'included' ? includedChatIds : excludedChatIds;\n const leftChatsCount = allChatIds.length - selectedChatTypes.length - visibleChatIds.length;\n const clickHandler = mode === 'included'\n ? () => setIsIncludedChatsListExpanded(true)\n : () => setIsExcludedChatsListExpanded(true);\n\n return (\n <>\n {selectedChatTypes.map((key) => renderChatType(key, mode))}\n {visibleChatIds.map((id) => (\n \n {isUserId(id) ? (\n \n ) : (\n \n )}\n \n ))}\n {(!isExpanded && leftChatsCount > 0) && (\n \n )}\n \n );\n }\n\n return (\n
\n
\n
\n
\n {animationData && (\n \n )}\n
\n\n {state.mode === 'create' && (\n

\n {lang('FilterIncludeInfo')}\n

\n )}\n\n \n
\n\n
\n {state.error && state.error === ERROR_NO_CHATS && (\n

\n {lang(state.error)}\n

\n )}\n\n

{lang('FilterInclude')}

\n\n \n {lang('FilterAddChats')}\n \n\n {renderChats('included')}\n
\n\n
\n

{lang('FilterExclude')}

\n\n \n {lang('FilterAddChats')}\n \n\n {renderChats('excluded')}\n
\n
\n\n \n {state.isLoading ? (\n \n ) : (\n \n )}\n \n
\n );\n};\n\nexport default memo(withGlobal(\n (global): StateProps => {\n const { listIds } = global.chats;\n\n return {\n loadedActiveChatIds: listIds.active,\n loadedArchivedChatIds: listIds.archived,\n };\n },\n)(SettingsFoldersEdit));\n","import React, {\n FC, useCallback, useRef, useEffect, memo,\n} from '../../../../lib/teact/teact';\n\nimport { isUserId } from '../../../../global/helpers';\nimport {\n INCLUDED_CHAT_TYPES,\n EXCLUDED_CHAT_TYPES,\n FolderChatType,\n} from '../../../../hooks/reducers/useFoldersReducer';\nimport useInfiniteScroll from '../../../../hooks/useInfiniteScroll';\nimport useLang from '../../../../hooks/useLang';\n\nimport Checkbox from '../../../ui/Checkbox';\nimport InputText from '../../../ui/InputText';\nimport ListItem from '../../../ui/ListItem';\nimport PrivateChatInfo from '../../../common/PrivateChatInfo';\nimport GroupChatInfo from '../../../common/GroupChatInfo';\nimport PickerSelectedItem from '../../../common/PickerSelectedItem';\nimport InfiniteScroll from '../../../ui/InfiniteScroll';\nimport Loading from '../../../ui/Loading';\n\nimport '../../../common/Picker.scss';\nimport './SettingsFoldersChatsPicker.scss';\n\ntype OwnProps = {\n mode: 'included' | 'excluded';\n chatIds: string[];\n selectedIds: string[];\n selectedChatTypes: string[];\n filterValue?: string;\n onSelectedIdsChange: (ids: string[]) => void;\n onSelectedChatTypesChange: (types: string[]) => void;\n onFilterChange: (value: string) => void;\n};\n\n// Focus slows down animation, also it breaks transition layout in Chrome\nconst FOCUS_DELAY_MS = 500;\n\nconst MAX_CHATS = 100;\nconst MAX_FULL_ITEMS = 10;\nconst ALWAYS_FULL_ITEMS_COUNT = 5;\n\nconst SettingsFoldersChatsPicker: FC = ({\n mode,\n chatIds,\n selectedIds,\n selectedChatTypes,\n filterValue,\n onSelectedIdsChange,\n onSelectedChatTypesChange,\n onFilterChange,\n}) => {\n // eslint-disable-next-line no-null/no-null\n const inputRef = useRef(null);\n const chatTypes = mode === 'included' ? INCLUDED_CHAT_TYPES : EXCLUDED_CHAT_TYPES;\n const shouldMinimize = selectedIds.length + selectedChatTypes.length > MAX_FULL_ITEMS;\n const hasMaxChats = selectedIds.length >= MAX_CHATS;\n\n useEffect(() => {\n setTimeout(() => {\n requestAnimationFrame(() => {\n inputRef.current!.focus();\n });\n }, FOCUS_DELAY_MS);\n }, []);\n\n const handleItemClick = useCallback((id: string) => {\n const newSelectedIds = [...selectedIds];\n if (newSelectedIds.includes(id)) {\n newSelectedIds.splice(newSelectedIds.indexOf(id), 1);\n } else {\n newSelectedIds.push(id);\n }\n onSelectedIdsChange(newSelectedIds);\n }, [selectedIds, onSelectedIdsChange]);\n\n const handleChatTypeClick = useCallback((key: FolderChatType['key']) => {\n const newSelectedChatTypes = [...selectedChatTypes];\n if (newSelectedChatTypes.includes(key)) {\n newSelectedChatTypes.splice(newSelectedChatTypes.indexOf(key), 1);\n } else {\n newSelectedChatTypes.push(key);\n }\n onSelectedChatTypesChange(newSelectedChatTypes);\n }, [selectedChatTypes, onSelectedChatTypesChange]);\n\n const handleFilterChange = useCallback((e: React.ChangeEvent) => {\n const { value } = e.currentTarget;\n onFilterChange(value);\n }, [onFilterChange]);\n\n const lang = useLang();\n\n function renderSelectedChatType(key: string) {\n const selectedType = chatTypes.find(({ key: typeKey }) => key === typeKey);\n if (!selectedType) {\n return undefined;\n }\n\n return (\n \n );\n }\n\n function renderChatType(type: FolderChatType) {\n return (\n handleChatTypeClick(type.key)}\n ripple\n >\n \n

{lang(type.title)}

\n \n \n );\n }\n\n function renderItem(id: string) {\n const isSelected = selectedIds.includes(id);\n\n return (\n handleItemClick(id)}\n ripple\n disabled={!isSelected && hasMaxChats}\n >\n {isUserId(id) ? (\n \n ) : (\n \n )}\n \n \n );\n }\n\n const [viewportIds, getMore] = useInfiniteScroll(undefined, chatIds, Boolean(filterValue));\n\n return (\n
\n
\n {selectedChatTypes.map(renderSelectedChatType)}\n {selectedIds.map((id, i) => (\n \n ))}\n {!hasMaxChats ? (\n \n ) : (\n

\n {`Sorry, you can't add more than ${MAX_CHATS} chats.`}\n

\n )}\n
\n \n {(!viewportIds || !viewportIds.length || viewportIds.includes(chatIds[0])) && (\n <>\n

\n {lang('FilterChatTypes')}\n

\n {chatTypes.map(renderChatType)}\n
\n

\n {lang('FilterChats')}\n

\n \n )}\n\n {viewportIds?.length ? (\n viewportIds.map(renderItem)\n ) : viewportIds && !viewportIds.length ? (\n

Sorry, nothing found.

\n ) : (\n \n )}\n \n
\n );\n};\n\nexport default memo(SettingsFoldersChatsPicker);\n","import React, {\n FC, memo, useMemo, useCallback,\n} from '../../../../lib/teact/teact';\nimport { getGlobal } from '../../../../global';\n\nimport { SettingsScreens } from '../../../../types';\n\nimport { unique } from '../../../../util/iteratees';\n\nimport { ALL_FOLDER_ID, ARCHIVED_FOLDER_ID } from '../../../../config';\nimport { filterChatsByName } from '../../../../global/helpers';\nimport useLang from '../../../../hooks/useLang';\nimport useHistoryBack from '../../../../hooks/useHistoryBack';\nimport { useFolderManagerForOrderedIds } from '../../../../hooks/useFolderManager';\nimport {\n FoldersState,\n FolderEditDispatch,\n selectChatFilters,\n} from '../../../../hooks/reducers/useFoldersReducer';\n\nimport SettingsFoldersChatsPicker from './SettingsFoldersChatsPicker';\nimport Loading from '../../../ui/Loading';\n\ntype OwnProps = {\n mode: 'included' | 'excluded';\n state: FoldersState;\n dispatch: FolderEditDispatch;\n isActive?: boolean;\n onScreenSelect: (screen: SettingsScreens) => void;\n onReset: () => void;\n};\n\nconst SettingsFoldersChatFilters: FC = ({\n mode,\n state,\n dispatch,\n isActive,\n onScreenSelect,\n onReset,\n}) => {\n const { chatFilter } = state;\n const { selectedChatIds, selectedChatTypes } = selectChatFilters(state, mode, true);\n\n const lang = useLang();\n\n const folderAllOrderedIds = useFolderManagerForOrderedIds(ALL_FOLDER_ID);\n const folderArchivedOrderedIds = useFolderManagerForOrderedIds(ARCHIVED_FOLDER_ID);\n\n const displayedIds = useMemo(() => {\n // No need for expensive global updates on chats, so we avoid them\n const chatsById = getGlobal().chats.byId;\n\n const chatIds = [...folderAllOrderedIds || [], ...folderArchivedOrderedIds || []];\n return unique([\n ...selectedChatIds,\n ...filterChatsByName(lang, chatIds, chatsById, chatFilter),\n ]);\n }, [folderAllOrderedIds, folderArchivedOrderedIds, selectedChatIds, lang, chatFilter]);\n\n const handleFilterChange = useCallback((newFilter: string) => {\n dispatch({\n type: 'setChatFilter',\n payload: newFilter,\n });\n }, [dispatch]);\n\n const handleSelectedIdsChange = useCallback((ids: string[]) => {\n if (mode === 'included') {\n dispatch({\n type: 'setIncludeFilters',\n payload: { ...state.includeFilters, includedChatIds: ids },\n });\n } else {\n dispatch({\n type: 'setExcludeFilters',\n payload: { ...state.excludeFilters, excludedChatIds: ids },\n });\n }\n }, [mode, state, dispatch]);\n\n const handleSelectedChatTypesChange = useCallback((keys: string[]) => {\n const newFilters: Record = {};\n keys.forEach((key) => {\n newFilters[key] = true;\n });\n\n if (mode === 'included') {\n dispatch({\n type: 'setIncludeFilters',\n payload: {\n includedChatIds: selectedChatIds,\n ...newFilters,\n },\n });\n } else {\n dispatch({\n type: 'setExcludeFilters',\n payload: {\n excludedChatIds: selectedChatIds,\n ...newFilters,\n },\n });\n }\n }, [mode, selectedChatIds, dispatch]);\n\n useHistoryBack(\n isActive,\n onReset,\n onScreenSelect,\n mode === 'included' ? SettingsScreens.FoldersIncludedChats : SettingsScreens.FoldersExcludedChats,\n );\n\n if (!displayedIds) {\n return ;\n }\n\n return (\n \n );\n};\n\nexport default memo(SettingsFoldersChatFilters);\n","import React, { FC, memo, useCallback } from '../../../../lib/teact/teact';\n\nimport { ApiChatFolder } from '../../../../api/types';\nimport { SettingsScreens } from '../../../../types';\n\nimport { FolderEditDispatch, FoldersState } from '../../../../hooks/reducers/useFoldersReducer';\n\nimport SettingsFoldersMain from './SettingsFoldersMain';\nimport SettingsFoldersEdit from './SettingsFoldersEdit';\nimport SettingsFoldersChatFilters from './SettingsFoldersChatFilters';\n\nimport './SettingsFolders.scss';\n\nconst TRANSITION_DURATION = 200;\n\nexport type OwnProps = {\n currentScreen: SettingsScreens;\n shownScreen: SettingsScreens;\n state: FoldersState;\n dispatch: FolderEditDispatch;\n isActive?: boolean;\n onScreenSelect: (screen: SettingsScreens) => void;\n onReset: () => void;\n};\n\nconst SettingsFolders: FC = ({\n currentScreen,\n shownScreen,\n state,\n dispatch,\n isActive,\n onScreenSelect,\n onReset,\n}) => {\n const handleReset = useCallback(() => {\n if (\n currentScreen === SettingsScreens.FoldersCreateFolder\n || currentScreen === SettingsScreens.FoldersEditFolder\n || currentScreen === SettingsScreens.FoldersEditFolderFromChatList\n ) {\n setTimeout(() => {\n dispatch({ type: 'reset' });\n }, TRANSITION_DURATION);\n }\n\n if (\n currentScreen === SettingsScreens.FoldersIncludedChats\n || currentScreen === SettingsScreens.FoldersExcludedChats\n ) {\n if (state.mode === 'create') {\n onScreenSelect(SettingsScreens.FoldersCreateFolder);\n } else {\n onScreenSelect(SettingsScreens.FoldersEditFolder);\n }\n return;\n }\n\n onReset();\n }, [\n state.mode, dispatch,\n currentScreen, onReset, onScreenSelect,\n ]);\n\n const handleCreateFolder = useCallback(() => {\n dispatch({ type: 'reset' });\n onScreenSelect(SettingsScreens.FoldersCreateFolder);\n }, [onScreenSelect, dispatch]);\n\n const handleEditFolder = useCallback((folder: ApiChatFolder) => {\n dispatch({ type: 'editFolder', payload: folder });\n onScreenSelect(SettingsScreens.FoldersEditFolder);\n }, [dispatch, onScreenSelect]);\n\n const handleAddIncludedChats = useCallback(() => {\n dispatch({ type: 'editIncludeFilters' });\n onScreenSelect(currentScreen === SettingsScreens.FoldersEditFolderFromChatList\n ? SettingsScreens.FoldersIncludedChatsFromChatList\n : SettingsScreens.FoldersIncludedChats);\n }, [currentScreen, dispatch, onScreenSelect]);\n\n const handleAddExcludedChats = useCallback(() => {\n dispatch({ type: 'editExcludeFilters' });\n onScreenSelect(currentScreen === SettingsScreens.FoldersEditFolderFromChatList\n ? SettingsScreens.FoldersExcludedChatsFromChatList\n : SettingsScreens.FoldersExcludedChats);\n }, [currentScreen, dispatch, onScreenSelect]);\n\n switch (currentScreen) {\n case SettingsScreens.Folders:\n return (\n \n );\n case SettingsScreens.FoldersCreateFolder:\n case SettingsScreens.FoldersEditFolder:\n case SettingsScreens.FoldersEditFolderFromChatList:\n return (\n \n );\n case SettingsScreens.FoldersIncludedChats:\n case SettingsScreens.FoldersIncludedChatsFromChatList:\n return (\n \n );\n case SettingsScreens.FoldersExcludedChats:\n case SettingsScreens.FoldersExcludedChatsFromChatList:\n return (\n \n );\n\n default:\n return undefined;\n }\n};\n\nexport default memo(SettingsFolders);\n","import React, {\n FC, memo, useMemo, useRef,\n} from '../../../lib/teact/teact';\n\nimport { ApiMediaFormat, ApiStickerSet } from '../../../api/types';\n\nimport { STICKER_SIZE_PICKER_HEADER } from '../../../config';\nimport { ObserveFn, useIsIntersecting } from '../../../hooks/useIntersectionObserver';\nimport useMedia from '../../../hooks/useMedia';\nimport useMediaTransition from '../../../hooks/useMediaTransition';\nimport { getFirstLetters } from '../../../util/textFormat';\n\nimport AnimatedSticker from '../../common/AnimatedSticker';\n\ntype OwnProps = {\n size?: number;\n stickerSet: ApiStickerSet;\n observeIntersection: ObserveFn;\n};\n\nconst StickerSetCoverAnimated: FC = ({\n size = STICKER_SIZE_PICKER_HEADER,\n stickerSet,\n observeIntersection,\n}) => {\n // eslint-disable-next-line no-null/no-null\n const ref = useRef(null);\n\n const isIntersecting = useIsIntersecting(ref, observeIntersection);\n\n const mediaHash = `stickerSet${stickerSet.id}`;\n const lottieData = useMedia(mediaHash, !isIntersecting, ApiMediaFormat.Lottie);\n const transitionClassNames = useMediaTransition(lottieData);\n\n const firstLetters = useMemo(() => {\n if (lottieData) return undefined;\n\n return getFirstLetters(stickerSet.title, 2);\n }, [lottieData, stickerSet.title]);\n\n return (\n
\n {firstLetters}\n {lottieData && (\n \n )}\n
\n );\n};\n\nexport default memo(StickerSetCoverAnimated);\n","import React, {\n FC, memo, useMemo, useRef,\n} from '../../../lib/teact/teact';\n\nimport { ApiStickerSet } from '../../../api/types';\n\nimport { IS_WEBM_SUPPORTED } from '../../../util/environment';\nimport { getFirstLetters } from '../../../util/textFormat';\nimport { ObserveFn, useIsIntersecting } from '../../../hooks/useIntersectionObserver';\nimport useMedia from '../../../hooks/useMedia';\nimport useMediaTransition from '../../../hooks/useMediaTransition';\n\ntype OwnProps = {\n stickerSet: ApiStickerSet;\n observeIntersection: ObserveFn;\n};\n\nconst StickerSetCover: FC = ({ stickerSet, observeIntersection }) => {\n // eslint-disable-next-line no-null/no-null\n const ref = useRef(null);\n\n const isIntersecting = useIsIntersecting(ref, observeIntersection);\n\n const mediaData = useMedia(stickerSet.hasThumbnail && `stickerSet${stickerSet.id}`, !isIntersecting);\n const transitionClassNames = useMediaTransition(mediaData);\n const isVideo = stickerSet.isVideos;\n\n const firstLetters = useMemo(() => {\n if ((isVideo && !IS_WEBM_SUPPORTED) || !mediaData) return getFirstLetters(stickerSet.title, 2);\n return undefined;\n }, [isVideo, mediaData, stickerSet.title]);\n\n return (\n
\n {firstLetters}\n {isVideo ? (\n
\n );\n};\n\nexport default memo(StickerSetCover);\n","import React, {\n FC, memo,\n} from '../../../lib/teact/teact';\nimport { ApiSticker, ApiStickerSet } from '../../../api/types';\n\nimport { STICKER_SIZE_GENERAL_SETTINGS } from '../../../config';\nimport { ObserveFn } from '../../../hooks/useIntersectionObserver';\nimport useLang from '../../../hooks/useLang';\n\nimport ListItem from '../../ui/ListItem';\nimport Button from '../../ui/Button';\nimport StickerSetCoverAnimated from '../../middle/composer/StickerSetCoverAnimated';\nimport StickerSetCover from '../../middle/composer/StickerSetCover';\nimport StickerButton from '../../common/StickerButton';\n\nimport './SettingsStickerSet.scss';\n\ntype OwnProps = {\n stickerSet?: ApiStickerSet;\n observeIntersection: ObserveFn;\n onClick: (value: ApiSticker) => void;\n};\n\nconst SettingsStickerSet: FC = ({\n stickerSet,\n observeIntersection,\n onClick,\n}) => {\n const lang = useLang();\n\n if (!stickerSet || !stickerSet.stickers) {\n return undefined;\n }\n\n const firstSticker = stickerSet.stickers?.[0];\n\n if (stickerSet.hasThumbnail || !firstSticker) {\n return (\n firstSticker && onClick(firstSticker)}\n >\n \n {stickerSet.isLottie ? (\n \n ) : (\n \n )}\n \n
\n
{stickerSet.title}
\n
{lang('StickerPack.StickerCount', stickerSet.count, 'i')}
\n
\n \n );\n } else {\n return (\n onClick(firstSticker)}\n >\n \n
\n
{stickerSet.title}
\n
{lang('StickerPack.StickerCount', stickerSet.count, 'i')}
\n
\n \n );\n }\n};\n\nexport default memo(SettingsStickerSet);\n","import React, {\n FC, useCallback, memo, useRef, useState,\n} from '../../../lib/teact/teact';\nimport { getActions, withGlobal } from '../../../global';\n\nimport { SettingsScreens, ISettings, TimeFormat } from '../../../types';\nimport { ApiSticker, ApiStickerSet } from '../../../api/types';\n\nimport {\n getSystemTheme, IS_IOS, IS_MAC_OS, IS_TOUCH_ENV,\n} from '../../../util/environment';\nimport { pick } from '../../../util/iteratees';\nimport { setTimeFormat } from '../../../util/langProvider';\nimport useLang from '../../../hooks/useLang';\nimport useFlag from '../../../hooks/useFlag';\nimport { useIntersectionObserver } from '../../../hooks/useIntersectionObserver';\nimport useHistoryBack from '../../../hooks/useHistoryBack';\n\nimport ListItem from '../../ui/ListItem';\nimport RangeSlider from '../../ui/RangeSlider';\nimport Checkbox from '../../ui/Checkbox';\nimport RadioGroup, { IRadioOption } from '../../ui/RadioGroup';\nimport SettingsStickerSet from './SettingsStickerSet';\nimport StickerSetModal from '../../common/StickerSetModal.async';\nimport ReactionStaticEmoji from '../../common/ReactionStaticEmoji';\nimport switchTheme from '../../../util/switchTheme';\nimport { ANIMATION_LEVEL_MAX } from '../../../config';\n\ntype OwnProps = {\n isActive?: boolean;\n onScreenSelect: (screen: SettingsScreens) => void;\n onReset: () => void;\n};\n\ntype StateProps =\n Pick & {\n stickerSetIds?: string[];\n stickerSetsById?: Record;\n defaultReaction?: string;\n theme: ISettings['theme'];\n shouldUseSystemTheme: boolean;\n };\n\nconst ANIMATION_LEVEL_OPTIONS = [\n 'Solid and Steady',\n 'Nice and Fast',\n 'Lots of Stuff',\n];\n\nconst TIME_FORMAT_OPTIONS: IRadioOption[] = [{\n label: '12-hour',\n value: '12h',\n}, {\n label: '24-hour',\n value: '24h',\n}];\n\nconst SettingsGeneral: FC = ({\n isActive,\n onScreenSelect,\n onReset,\n stickerSetIds,\n stickerSetsById,\n defaultReaction,\n messageTextSize,\n animationLevel,\n messageSendKeyCombo,\n shouldSuggestStickers,\n shouldLoopStickers,\n timeFormat,\n theme,\n shouldUseSystemTheme,\n}) => {\n const {\n setSettingOption,\n } = getActions();\n\n // eslint-disable-next-line no-null/no-null\n const stickerSettingsRef = useRef(null);\n const { observe: observeIntersectionForCovers } = useIntersectionObserver({ rootRef: stickerSettingsRef });\n const [isModalOpen, openModal, closeModal] = useFlag();\n const [sticker, setSticker] = useState();\n\n const lang = useLang();\n\n const APPEARANCE_THEME_OPTIONS: IRadioOption[] = [{\n label: lang('EmptyChat.Appearance.Light'),\n value: 'light',\n }, {\n label: lang('EmptyChat.Appearance.Dark'),\n value: 'dark',\n }, {\n label: lang('EmptyChat.Appearance.System'),\n value: 'auto',\n }];\n\n const KEYBOARD_SEND_OPTIONS = !IS_TOUCH_ENV ? [\n { value: 'enter', label: lang('lng_settings_send_enter'), subLabel: 'New line by Shift + Enter' },\n {\n value: 'ctrl-enter',\n label: lang(IS_MAC_OS ? 'lng_settings_send_cmdenter' : 'lng_settings_send_ctrlenter'),\n subLabel: 'New line by Enter',\n },\n ] : undefined;\n\n const handleAnimationLevelChange = useCallback((newLevel: number) => {\n ANIMATION_LEVEL_OPTIONS.forEach((_, i) => {\n document.body.classList.toggle(`animation-level-${i}`, newLevel === i);\n });\n\n setSettingOption({ animationLevel: newLevel });\n }, [setSettingOption]);\n\n const handleMessageTextSizeChange = useCallback((newSize: number) => {\n document.documentElement.style.setProperty(\n '--composer-text-size', `${Math.max(newSize, IS_IOS ? 16 : 15)}px`,\n );\n document.documentElement.style.setProperty('--message-meta-height', `${Math.floor(newSize * 1.3125)}px`);\n document.documentElement.style.setProperty('--message-text-size', `${newSize}px`);\n document.documentElement.setAttribute('data-message-text-size', newSize.toString());\n\n setSettingOption({ messageTextSize: newSize });\n }, [setSettingOption]);\n\n const handleAppearanceThemeChange = useCallback((value: string) => {\n const newTheme = value === 'auto' ? getSystemTheme() : value as ISettings['theme'];\n\n setSettingOption({ theme: newTheme });\n setSettingOption({ shouldUseSystemTheme: value === 'auto' });\n if (newTheme !== theme) {\n switchTheme(newTheme, animationLevel === ANIMATION_LEVEL_MAX);\n }\n }, [animationLevel, setSettingOption, theme]);\n\n const handleTimeFormatChange = useCallback((newTimeFormat: string) => {\n setSettingOption({ timeFormat: newTimeFormat });\n setSettingOption({ wasTimeFormatSetManually: true });\n\n setTimeFormat(newTimeFormat as TimeFormat);\n }, [setSettingOption]);\n\n const handleStickerSetClick = useCallback((value: ApiSticker) => {\n setSticker(value);\n openModal();\n }, [openModal]);\n\n const handleMessageSendComboChange = useCallback((newCombo: string) => {\n setSettingOption({ messageSendKeyCombo: newCombo });\n }, [setSettingOption]);\n\n const handleSuggestStickersChange = useCallback((newValue: boolean) => {\n setSettingOption({ shouldSuggestStickers: newValue });\n }, [setSettingOption]);\n\n const handleShouldLoopStickersChange = useCallback((newValue: boolean) => {\n setSettingOption({ shouldLoopStickers: newValue });\n }, [setSettingOption]);\n\n const stickerSets = stickerSetIds && stickerSetIds.map((id: string) => {\n return stickerSetsById?.[id]?.installedDate ? stickerSetsById[id] : false;\n }).filter(Boolean as any);\n\n useHistoryBack(isActive, onReset, onScreenSelect, SettingsScreens.General);\n\n return (\n
\n
\n

{lang('SETTINGS')}

\n\n \n\n onScreenSelect(SettingsScreens.GeneralChatBackground)}\n >\n {lang('ChatBackground')}\n \n
\n\n
\n

\n {lang('Theme')}\n

\n \n
\n\n
\n

\n Time Format\n

\n \n
\n\n
\n

\n Animation Level\n

\n

\n Choose the desired animations amount.\n

\n\n \n
\n\n {KEYBOARD_SEND_OPTIONS && (\n
\n

{lang('VoiceOver.Keyboard')}

\n\n \n
\n )}\n\n
\n

{lang('AccDescrStickers')}

\n\n {defaultReaction && (\n onScreenSelect(SettingsScreens.QuickReaction)}\n >\n \n
{lang('DoubleTapSetting')}
\n \n )}\n\n \n \n\n
\n {stickerSets && stickerSets.map((stickerSet: ApiStickerSet) => (\n \n ))}\n
\n {sticker && (\n \n )}\n
\n
\n );\n};\n\nexport default memo(withGlobal(\n (global): StateProps => {\n const { theme, shouldUseSystemTheme } = global.settings.byKey;\n\n return {\n ...pick(global.settings.byKey, [\n 'messageTextSize',\n 'animationLevel',\n 'messageSendKeyCombo',\n 'shouldSuggestStickers',\n 'shouldLoopStickers',\n 'isSensitiveEnabled',\n 'canChangeSensitive',\n 'timeFormat',\n ]),\n stickerSetIds: global.stickers.added.setIds,\n stickerSetsById: global.stickers.setsById,\n defaultReaction: global.appConfig?.defaultReaction,\n theme,\n shouldUseSystemTheme,\n };\n },\n)(SettingsGeneral));\n","/* eslint-disable eqeqeq */\n/* eslint-disable prefer-template */\n/* eslint-disable prefer-const */\n/* eslint-disable prefer-destructuring */\n/* eslint-disable one-var */\n/* eslint-disable one-var-declaration-per-line */\n\nimport { preloadImage } from './files';\n\n/**\n * HEX > RGB\n * input: 'xxxxxx' (ex. 'ed15fa') case-insensitive\n * output: [r, g, b] ([0-255, 0-255, 0-255])\n */\nexport function hex2rgb(param: string): [number, number, number] {\n return [\n parseInt(param.substring(0, 2), 16),\n parseInt(param.substring(2, 4), 16),\n parseInt(param.substring(4, 6), 16),\n ];\n}\n\n/**\n * RGB > HEX\n * input: [r, g, b] ([0-255, 0-255, 0-255])\n * output: 'xxxxxx' (ex. 'ff0000')\n */\nexport function rgb2hex(param: [number, number, number]) {\n const p0 = param[0].toString(16);\n const p1 = param[1].toString(16);\n const p2 = param[2].toString(16);\n return (p0.length == 1 ? '0' + p0 : p0) + (p1.length == 1 ? '0' + p1 : p1) + (p2.length == 1 ? '0' + p2 : p2);\n}\n\n/**\n * Converts an RGB color value to HSV. Conversion formula\n * adapted from http://en.wikipedia.org/wiki/HSV_color_space.\n * Assumes r, g, and b are contained in the set [0, 255] and\n * returns h, s, and v in the set [0, 1].\n *\n * @param Number r The red color value\n * @param Number g The green color value\n * @param Number b The blue color value\n * @return Array The HSV representation\n */\nexport function rgb2hsb([r, g, b]: [number, number, number]): [number, number, number] {\n r /= 255;\n g /= 255;\n b /= 255;\n\n let max = Math.max(r, g, b), min = Math.min(r, g, b);\n let h!: number, s: number, v: number = max;\n\n let d = max - min;\n s = max == 0 ? 0 : d / max;\n\n if (max == min) {\n h = 0; // achromatic\n } else {\n switch (max) {\n case r:\n h = (g - b) / d + (g < b ? 6 : 0);\n break;\n case g:\n h = (b - r) / d + 2;\n break;\n case b:\n h = (r - g) / d + 4;\n break;\n }\n\n h /= 6;\n }\n\n return [h, s, v];\n}\n\n/**\n * Converts an HSV color value to RGB. Conversion formula\n * adapted from http://en.wikipedia.org/wiki/HSV_color_space.\n * Assumes h, s, and v are contained in the set [0, 1] and\n * returns r, g, and b in the set [0, 255].\n *\n * @param Number h The hue\n * @param Number s The saturation\n * @param Number v The value\n * @return Array The RGB representation\n */\nexport function hsb2rgb([h, s, v]: [number, number, number]): [number, number, number] {\n let r!: number, g!: number, b!: number;\n\n let i = Math.floor(h * 6);\n let f = h * 6 - i;\n let p = v * (1 - s);\n let q = v * (1 - f * s);\n let t = v * (1 - (1 - f) * s);\n\n switch (i % 6) {\n case 0:\n r = v;\n g = t;\n b = p;\n break;\n case 1:\n r = q;\n g = v;\n b = p;\n break;\n case 2:\n r = p;\n g = v;\n b = t;\n break;\n case 3:\n r = p;\n g = q;\n b = v;\n break;\n case 4:\n r = t;\n g = p;\n b = v;\n break;\n case 5:\n r = v;\n g = p;\n b = q;\n break;\n }\n\n return [\n Math.round(r * 255),\n Math.round(g * 255),\n Math.round(b * 255),\n ];\n}\n\nexport async function getAverageColor(url: string): Promise<[number, number, number]> {\n // Only visit every 5 pixels\n const blockSize = 5;\n const defaultRGB: [number, number, number] = [0, 0, 0];\n let data;\n let width;\n let height;\n let i = -4;\n let length;\n let rgb: [number, number, number] = [0, 0, 0];\n let count = 0;\n\n const canvas = document.createElement('canvas');\n const context = canvas.getContext && canvas.getContext('2d');\n if (!context) {\n return defaultRGB;\n }\n\n const image = await preloadImage(url);\n height = image.naturalHeight || image.offsetHeight || image.height;\n width = image.naturalWidth || image.offsetWidth || image.width;\n canvas.height = height;\n canvas.width = width;\n\n context.drawImage(image, 0, 0);\n\n try {\n data = context.getImageData(0, 0, width, height);\n } catch (e) {\n return defaultRGB;\n }\n\n length = data.data.length;\n\n // eslint-disable-next-line no-cond-assign\n while ((i += blockSize * 4) < length) {\n ++count;\n rgb[0] += data.data[i];\n rgb[1] += data.data[i + 1];\n rgb[2] += data.data[i + 2];\n }\n\n rgb[0] = Math.floor(rgb[0] / count);\n rgb[1] = Math.floor(rgb[1] / count);\n rgb[2] = Math.floor(rgb[2] / count);\n\n return rgb;\n}\n\n// eslint-disable-next-line max-len\n// Function was adapted from https://github.com/telegramdesktop/tdesktop/blob/35ff621b5b52f7e3553fb0f990ea13ade7101b8e/Telegram/SourceFiles/data/data_wall_paper.cpp#L518\nexport function getPatternColor(rgbColor: [number, number, number]) {\n let [hue, saturation, value] = rgb2hsb(rgbColor);\n\n saturation = Math.min(1, saturation + 0.05 + 0.1 * (1 - saturation));\n value = value > 0.5\n ? Math.max(0, value * 0.65)\n : Math.max(0, Math.min(1, 1 - value * 0.65));\n\n return `hsla(${hue * 360}, ${saturation * 100}%, ${value * 100}%, .4)`;\n}\n","import React, {\n FC, memo, useCallback, useEffect, useState, useRef,\n} from '../../../lib/teact/teact';\nimport { ApiWallpaper } from '../../../api/types';\nimport { ThemeKey, UPLOADING_WALLPAPER_SLUG } from '../../../types';\n\nimport { CUSTOM_BG_CACHE_NAME } from '../../../config';\nimport * as cacheApi from '../../../util/cacheApi';\nimport { fetchBlob } from '../../../util/files';\nimport buildClassName from '../../../util/buildClassName';\nimport useMedia from '../../../hooks/useMedia';\nimport useMediaWithLoadProgress from '../../../hooks/useMediaWithLoadProgress';\nimport useShowTransition from '../../../hooks/useShowTransition';\nimport usePrevious from '../../../hooks/usePrevious';\nimport useCanvasBlur from '../../../hooks/useCanvasBlur';\n\nimport ProgressSpinner from '../../ui/ProgressSpinner';\n\nimport './WallpaperTile.scss';\n\ntype OwnProps = {\n wallpaper: ApiWallpaper;\n theme: ThemeKey;\n isSelected: boolean;\n onClick: (slug: string) => void;\n};\n\nconst WallpaperTile: FC = ({\n wallpaper,\n theme,\n isSelected,\n onClick,\n}) => {\n const { slug, document } = wallpaper;\n const localMediaHash = `wallpaper${document.id!}`;\n const localBlobUrl = document.previewBlobUrl;\n const previewBlobUrl = useMedia(`${localMediaHash}?size=m`);\n const thumbRef = useCanvasBlur(document.thumbnail?.dataUri, Boolean(previewBlobUrl), true);\n const { transitionClassNames } = useShowTransition(\n Boolean(previewBlobUrl || localBlobUrl),\n undefined,\n undefined,\n 'slow',\n );\n const [isLoadAllowed, setIsLoadAllowed] = useState(false);\n const {\n mediaData: fullMedia, loadProgress,\n } = useMediaWithLoadProgress(localMediaHash, !isLoadAllowed);\n const wasLoadDisabled = usePrevious(isLoadAllowed) === false;\n const { shouldRender: shouldRenderSpinner, transitionClassNames: spinnerClassNames } = useShowTransition(\n (isLoadAllowed && !fullMedia) || slug === UPLOADING_WALLPAPER_SLUG,\n undefined,\n wasLoadDisabled,\n 'slow',\n );\n // To prevent triggering of the effect for useCallback\n const cacheKeyRef = useRef();\n cacheKeyRef.current = theme;\n\n const handleSelect = useCallback(() => {\n (async () => {\n const blob = await fetchBlob(fullMedia!);\n await cacheApi.save(CUSTOM_BG_CACHE_NAME, cacheKeyRef.current!, blob);\n onClick(slug);\n })();\n }, [fullMedia, onClick, slug]);\n\n useEffect(() => {\n if (fullMedia) {\n handleSelect();\n }\n }, [fullMedia, handleSelect]);\n\n const handleClick = useCallback(() => {\n if (fullMedia) {\n handleSelect();\n } else {\n setIsLoadAllowed((isAllowed) => !isAllowed);\n }\n }, [fullMedia, handleSelect]);\n\n const className = buildClassName(\n 'WallpaperTile',\n isSelected && 'selected',\n );\n\n return (\n
\n
\n \n \n {shouldRenderSpinner && (\n
\n \n
\n )}\n
\n
\n );\n};\n\nexport default memo(WallpaperTile);\n","import React, {\n FC, memo, useEffect, useCallback, useRef,\n} from '../../../lib/teact/teact';\nimport { getActions, withGlobal } from '../../../global';\n\nimport { SettingsScreens, ThemeKey, UPLOADING_WALLPAPER_SLUG } from '../../../types';\nimport { ApiWallpaper } from '../../../api/types';\n\nimport { DARK_THEME_PATTERN_COLOR, DEFAULT_PATTERN_COLOR } from '../../../config';\nimport { throttle } from '../../../util/schedulers';\nimport { openSystemFilesDialog } from '../../../util/systemFilesDialog';\nimport { getAverageColor, getPatternColor, rgb2hex } from '../../../util/colors';\nimport { selectTheme } from '../../../global/selectors';\nimport useLang from '../../../hooks/useLang';\nimport useHistoryBack from '../../../hooks/useHistoryBack';\n\nimport ListItem from '../../ui/ListItem';\nimport Checkbox from '../../ui/Checkbox';\nimport Loading from '../../ui/Loading';\nimport WallpaperTile from './WallpaperTile';\n\nimport './SettingsGeneralBackground.scss';\n\ntype OwnProps = {\n isActive?: boolean;\n onScreenSelect: (screen: SettingsScreens) => void;\n onReset: () => void;\n};\n\ntype StateProps = {\n background?: string;\n isBlurred?: boolean;\n loadedWallpapers?: ApiWallpaper[];\n theme: ThemeKey;\n};\n\nconst SUPPORTED_TYPES = 'image/jpeg';\n\nconst runThrottled = throttle((cb) => cb(), 60000, true);\n\nconst SettingsGeneralBackground: FC = ({\n isActive,\n onScreenSelect,\n onReset,\n background,\n isBlurred,\n loadedWallpapers,\n theme,\n}) => {\n const {\n loadWallpapers,\n uploadWallpaper,\n setThemeSettings,\n } = getActions();\n\n const themeRef = useRef();\n themeRef.current = theme;\n // Due to the parent Transition, this component never gets unmounted,\n // that's why we use throttled API call on every update.\n useEffect(() => {\n runThrottled(() => {\n loadWallpapers();\n });\n }, [loadWallpapers]);\n\n const handleFileSelect = useCallback((e: Event) => {\n const { files } = e.target as HTMLInputElement;\n\n if (files && files.length > 0) {\n uploadWallpaper(files[0]);\n }\n }, [uploadWallpaper]);\n\n const handleUploadWallpaper = useCallback(() => {\n openSystemFilesDialog(SUPPORTED_TYPES, handleFileSelect, true);\n }, [handleFileSelect]);\n\n const handleSetColor = useCallback(() => {\n onScreenSelect(SettingsScreens.GeneralChatBackgroundColor);\n }, [onScreenSelect]);\n\n const handleResetToDefault = useCallback(() => {\n setThemeSettings({\n theme,\n background: undefined,\n backgroundColor: undefined,\n isBlurred: true,\n patternColor: theme === 'dark' ? DARK_THEME_PATTERN_COLOR : DEFAULT_PATTERN_COLOR,\n });\n }, [setThemeSettings, theme]);\n\n const handleWallPaperSelect = useCallback((slug: string) => {\n setThemeSettings({ theme: themeRef.current, background: slug });\n const currentWallpaper = loadedWallpapers && loadedWallpapers.find((wallpaper) => wallpaper.slug === slug);\n if (currentWallpaper?.document.thumbnail) {\n getAverageColor(currentWallpaper.document.thumbnail.dataUri)\n .then((color) => {\n const patternColor = getPatternColor(color);\n const rgbColor = `#${rgb2hex(color)}`;\n setThemeSettings({ theme: themeRef.current, backgroundColor: rgbColor, patternColor });\n });\n }\n }, [loadedWallpapers, setThemeSettings]);\n\n const handleWallPaperBlurChange = useCallback((e: React.ChangeEvent) => {\n setThemeSettings({ theme: themeRef.current, isBlurred: e.target.checked });\n }, [setThemeSettings]);\n\n const lang = useLang();\n\n useHistoryBack(isActive, onReset, onScreenSelect, SettingsScreens.GeneralChatBackground);\n\n const isUploading = loadedWallpapers?.[0] && loadedWallpapers[0].slug === UPLOADING_WALLPAPER_SLUG;\n\n return (\n
\n
\n \n {lang('UploadImage')}\n \n\n \n {lang('SetColor')}\n \n\n \n {lang('ThemeResetToDefaults')}\n \n\n \n
\n\n {loadedWallpapers ? (\n
\n {loadedWallpapers.map((wallpaper) => (\n \n ))}\n
\n ) : (\n \n )}\n
\n );\n};\n\nexport default memo(withGlobal(\n (global): StateProps => {\n const theme = selectTheme(global);\n const { background, isBlurred } = global.settings.themes[theme] || {};\n const { loadedWallpapers } = global.settings;\n\n return {\n background,\n isBlurred,\n loadedWallpapers,\n theme,\n };\n },\n)(SettingsGeneralBackground));\n","import { ChangeEvent, MutableRefObject, RefObject } from 'react';\nimport React, {\n FC, memo, useCallback, useEffect, useRef, useState,\n} from '../../../lib/teact/teact';\nimport { getActions, withGlobal } from '../../../global';\n\nimport { SettingsScreens, ThemeKey } from '../../../types';\n\nimport { pick } from '../../../util/iteratees';\nimport {\n getPatternColor, hex2rgb, hsb2rgb, rgb2hex, rgb2hsb,\n} from '../../../util/colors';\nimport { captureEvents, RealTouchEvent } from '../../../util/captureEvents';\nimport { selectTheme } from '../../../global/selectors';\nimport useFlag from '../../../hooks/useFlag';\nimport buildClassName from '../../../util/buildClassName';\nimport useHistoryBack from '../../../hooks/useHistoryBack';\n\nimport InputText from '../../ui/InputText';\n\nimport './SettingsGeneralBackgroundColor.scss';\n\ntype OwnProps = {\n isActive?: boolean;\n onScreenSelect: (screen: SettingsScreens) => void;\n onReset: () => void;\n};\n\ntype StateProps = {\n backgroundColor?: string;\n theme: ThemeKey;\n};\n\ninterface CanvasRects {\n colorRect: {\n offsetLeft: number;\n top: number;\n width: number;\n height: number;\n };\n hueRect: {\n offsetLeft: number;\n width: number;\n };\n}\n\nconst DEFAULT_HSB = rgb2hsb(hex2rgb('e6ebee'));\nconst PREDEFINED_COLORS = [\n '#e6ebee', '#b2cee1', '#008dd0', '#c6e7cb', '#c4e1a6', '#60b16e',\n '#ccd0af', '#a6a997', '#7a7072', '#fdd7af', '#fdb76e', '#dd8851',\n];\n\nconst SettingsGeneralBackground: FC = ({\n isActive,\n onScreenSelect,\n onReset,\n theme,\n backgroundColor,\n}) => {\n const { setThemeSettings } = getActions();\n\n const themeRef = useRef();\n themeRef.current = theme;\n // eslint-disable-next-line no-null/no-null\n const containerRef = useRef(null);\n // eslint-disable-next-line no-null/no-null\n const colorPickerRef = useRef(null);\n // eslint-disable-next-line no-null/no-null\n const huePickerRef = useRef(null);\n const isFirstRunRef = useRef(true);\n\n const [hsb, setHsb] = useState(getInitialHsb(backgroundColor));\n // Cache for drag handlers\n const hsbRef = useRef(hsb);\n useEffect(() => {\n hsbRef.current = hsb;\n }, [hsb]);\n\n const [isDragging, markIsDragging, unmarkIsDragging] = useFlag();\n const [rgbInput, setRgbInput] = useState('');\n const [hexInput, setHexInput] = useState('');\n\n const rectsRef = useRef();\n const colorCtxRef = useRef();\n\n // Setup: cache rects, subscribe for drag events\n useEffect(() => {\n // We use `offsetLeft` instead of `left` to support screen transition\n const colorRect = {\n offsetLeft: colorPickerRef.current!.offsetLeft,\n ...pick(colorPickerRef.current!.getBoundingClientRect(), ['top', 'width', 'height']),\n };\n const hueRect = {\n offsetLeft: huePickerRef.current!.offsetLeft,\n ...pick(huePickerRef.current!.getBoundingClientRect(), ['width']),\n };\n\n rectsRef.current = { colorRect, hueRect };\n\n function handleColorDrag(e: MouseEvent | RealTouchEvent) {\n const colorPosition = [\n Math.min(Math.max(0, e.pageX! - colorRect.offsetLeft), colorRect.width - 1),\n Math.min(Math.max(0, e.pageY! - colorRect.top + containerRef.current!.scrollTop), colorRect.height - 1),\n ];\n\n const { huePosition } = hsb2positions(hsbRef.current, rectsRef.current!);\n\n setHsb(positions2hsb({ colorPosition, huePosition }, rectsRef.current!));\n markIsDragging();\n\n return true;\n }\n\n captureEvents(colorPickerRef.current!, {\n onCapture: handleColorDrag,\n onDrag: handleColorDrag,\n onRelease: unmarkIsDragging,\n onClick: unmarkIsDragging,\n selectorToPreventScroll: '.SettingsGeneralBackgroundColor',\n withCursor: true,\n });\n\n function handleHueDrag(e: MouseEvent | RealTouchEvent) {\n const { colorPosition } = hsb2positions(hsbRef.current, rectsRef.current!);\n const huePosition = Math.min(Math.max(0, e.pageX! - hueRect.offsetLeft), hueRect.width - 1);\n\n setHsb(positions2hsb({ colorPosition, huePosition }, rectsRef.current!));\n markIsDragging();\n\n return true;\n }\n\n captureEvents(huePickerRef.current!, {\n onCapture: handleHueDrag,\n onDrag: handleHueDrag,\n onRelease: unmarkIsDragging,\n onClick: unmarkIsDragging,\n selectorToPreventScroll: '.SettingsGeneralBackgroundColor',\n withCursor: true,\n });\n }, [markIsDragging, unmarkIsDragging]);\n\n const { colorPosition = [0, 0], huePosition = 0 } = rectsRef.current ? hsb2positions(hsb, rectsRef.current) : {};\n const hex = rgb2hex(hsb2rgb(hsb));\n const hue = hsb[0];\n const hueHex = rgb2hex(hsb2rgb([hue, 1, 1]));\n\n // Save value and update inputs when HSL changes\n useEffect(() => {\n const rgb = hsb2rgb(hsb);\n const color = `#${rgb2hex(rgb)}`;\n\n setRgbInput(rgb.join(', '));\n setHexInput(color);\n\n if (!isFirstRunRef.current) {\n const patternColor = getPatternColor(rgb);\n setThemeSettings({\n theme: themeRef.current,\n background: undefined,\n backgroundColor: color,\n patternColor,\n });\n }\n isFirstRunRef.current = false;\n }, [hsb, setThemeSettings]);\n\n // Redraw color picker when hue changes\n useEffect(() => {\n drawColor(colorPickerRef.current!.firstChild as HTMLCanvasElement, hue, colorCtxRef, rectsRef);\n }, [hue]);\n\n // Initially draw hue picker\n useEffect(() => {\n drawHue(huePickerRef.current!.firstChild as HTMLCanvasElement);\n }, []);\n\n const handleRgbChange = useCallback((e: ChangeEvent) => {\n const rgbValue = e.currentTarget.value.replace(/[^\\d, ]/g, '').slice(0, 13);\n\n if (rgbValue.match(/^\\d{1,3},\\s?\\d{1,3},\\s?\\d{1,3}$/)) {\n const rgb = rgbValue.split(',').map((channel) => Number(channel.trim())) as [number, number, number];\n setHsb(rgb2hsb(rgb));\n }\n\n e.currentTarget.value = rgbValue;\n }, []);\n\n const handleHexChange = useCallback((e: ChangeEvent) => {\n const hexValue = e.currentTarget.value.replace(/[^0-9a-fA-F]/g, '').slice(0, 6);\n\n if (hexValue.match(/^#?[0-9a-fA-F]{6}$/)) {\n setHsb(rgb2hsb(hex2rgb(hexValue.replace('#', ''))));\n }\n\n e.currentTarget.value = hexValue;\n }, []);\n\n const handlePredefinedColorClick = useCallback((e: React.MouseEvent) => {\n setHsb(rgb2hsb(hex2rgb(e.currentTarget.dataset.color!.replace('#', ''))));\n }, []);\n\n const className = buildClassName(\n 'SettingsGeneralBackgroundColor settings-content custom-scroll',\n isDragging && 'is-dragging',\n );\n\n useHistoryBack(isActive, onReset, onScreenSelect, SettingsScreens.GeneralChatBackgroundColor);\n\n return (\n
\n
\n
\n \n \n
\n
\n \n \n
\n
\n \n \n
\n
\n
\n {PREDEFINED_COLORS.map((color) => (\n \n ))}\n
\n
\n );\n};\n\nfunction getInitialHsb(backgroundColor?: string) {\n return backgroundColor && backgroundColor.startsWith('#')\n ? rgb2hsb(hex2rgb(backgroundColor.replace('#', '')))\n : DEFAULT_HSB;\n}\n\nfunction hsb2positions(hsb: [number, number, number], rects: CanvasRects) {\n return {\n colorPosition: [\n Math.round((hsb[1]) * (rects.colorRect.width - 1)),\n Math.round((1 - hsb[2]) * (rects.colorRect.height - 1)),\n ],\n huePosition: Math.round(hsb[0] * (rects.hueRect.width - 1)),\n };\n}\n\nfunction positions2hsb(\n { colorPosition, huePosition }: { colorPosition: number[]; huePosition: number },\n rects: CanvasRects,\n): [number, number, number] {\n return [\n huePosition / (rects.hueRect.width - 1),\n colorPosition[0] / (rects.colorRect.width - 1),\n 1 - colorPosition[1] / (rects.colorRect.height - 1),\n ];\n}\n\nfunction drawColor(\n canvas: HTMLCanvasElement,\n hue: number,\n colorCtxRef: MutableRefObject,\n rectsRef: RefObject,\n) {\n let w: number;\n let h: number;\n let ctx: CanvasRenderingContext2D;\n\n if (!colorCtxRef.current || !rectsRef.current) {\n // First run\n w = canvas.offsetWidth;\n h = canvas.offsetHeight;\n ctx = canvas.getContext('2d')!;\n\n canvas.width = w;\n canvas.height = h;\n\n colorCtxRef.current = ctx;\n } else {\n w = rectsRef.current.colorRect.width;\n h = rectsRef.current.colorRect.height;\n ctx = colorCtxRef.current;\n }\n\n const imgData = ctx!.createImageData(w, h);\n const pixels = imgData.data;\n const col = hsb2rgb([hue, 1, 1]);\n\n let index = 0;\n\n for (let y = 0; y < h; y++) {\n const perY = 1 - y / (h - 1);\n const st = [255 * perY, 255 * perY, 255 * perY];\n const ed = [col[0] * perY, col[1] * perY, col[2] * perY];\n for (let x = 0; x < w; x++) {\n const perX = x / (w - 1);\n pixels[index++] = st[0] + (ed[0] - st[0]) * perX;\n pixels[index++] = st[1] + (ed[1] - st[1]) * perX;\n pixels[index++] = st[2] + (ed[2] - st[2]) * perX;\n pixels[index++] = 255;\n }\n }\n\n ctx!.putImageData(imgData, 0, 0);\n}\n\nfunction drawHue(canvas: HTMLCanvasElement) {\n const w = canvas.offsetWidth;\n const h = 1;\n canvas.width = w;\n canvas.height = h;\n const ctx = canvas.getContext('2d')!;\n\n const imgData = ctx.createImageData(w, h);\n const pixels = imgData.data;\n\n let index = 0;\n\n for (let x = 0; x < w; x++) {\n const hue = x / (w - 1);\n const rgb = hsb2rgb([hue, 1, 1]);\n /* eslint-disable prefer-destructuring */\n pixels[index++] = rgb[0];\n pixels[index++] = rgb[1];\n pixels[index++] = rgb[2];\n /* eslint-enable prefer-destructuring */\n pixels[index++] = 255;\n }\n\n ctx.putImageData(imgData, 0, 0);\n}\n\nexport default memo(withGlobal(\n (global): StateProps => {\n const theme = selectTheme(global);\n const { backgroundColor } = global.settings.themes[theme] || {};\n return {\n backgroundColor,\n theme,\n };\n },\n)(SettingsGeneralBackground));\n","import { ChangeEvent } from 'react';\nimport useDebounce from '../../../hooks/useDebounce';\nimport React, {\n FC, memo, useCallback, useEffect,\n} from '../../../lib/teact/teact';\nimport { getActions, withGlobal } from '../../../global';\n\nimport { SettingsScreens } from '../../../types';\n\nimport useLang from '../../../hooks/useLang';\nimport useHistoryBack from '../../../hooks/useHistoryBack';\nimport { playNotifySound } from '../../../util/notifications';\n\nimport Checkbox from '../../ui/Checkbox';\nimport RangeSlider from '../../ui/RangeSlider';\n\ntype OwnProps = {\n isActive?: boolean;\n onScreenSelect: (screen: SettingsScreens) => void;\n onReset: () => void;\n};\n\ntype StateProps = {\n hasPrivateChatsNotifications: boolean;\n hasPrivateChatsMessagePreview: boolean;\n hasGroupNotifications: boolean;\n hasGroupMessagePreview: boolean;\n hasBroadcastNotifications: boolean;\n hasBroadcastMessagePreview: boolean;\n hasContactJoinedNotifications: boolean;\n hasWebNotifications: boolean;\n hasPushNotifications: boolean;\n notificationSoundVolume: number;\n};\n\nconst SettingsNotifications: FC = ({\n isActive,\n onScreenSelect,\n onReset,\n hasPrivateChatsNotifications,\n hasPrivateChatsMessagePreview,\n hasGroupNotifications,\n hasGroupMessagePreview,\n hasBroadcastNotifications,\n hasBroadcastMessagePreview,\n hasContactJoinedNotifications,\n hasPushNotifications,\n hasWebNotifications,\n notificationSoundVolume,\n}) => {\n const {\n loadNotificationSettings,\n updateContactSignUpNotification,\n updateNotificationSettings,\n updateWebNotificationSettings,\n } = getActions();\n\n useEffect(() => {\n loadNotificationSettings();\n }, [loadNotificationSettings]);\n\n const runDebounced = useDebounce(500, true);\n\n const handleSettingsChange = useCallback((\n e: ChangeEvent,\n peerType: 'contact' | 'group' | 'broadcast',\n setting: 'silent' | 'showPreviews',\n ) => {\n const currentIsSilent = peerType === 'contact'\n ? !hasPrivateChatsNotifications\n : !(peerType === 'group' ? hasGroupNotifications : hasBroadcastNotifications);\n const currentShouldShowPreviews = peerType === 'contact'\n ? hasPrivateChatsMessagePreview\n : (peerType === 'group' ? hasGroupMessagePreview : hasBroadcastMessagePreview);\n\n updateNotificationSettings({\n peerType,\n ...(setting === 'silent' && { isSilent: !e.target.checked, shouldShowPreviews: currentShouldShowPreviews }),\n ...(setting === 'showPreviews' && { shouldShowPreviews: e.target.checked, isSilent: currentIsSilent }),\n });\n }, [\n hasBroadcastMessagePreview, hasBroadcastNotifications,\n hasGroupMessagePreview, hasGroupNotifications,\n hasPrivateChatsMessagePreview, hasPrivateChatsNotifications,\n updateNotificationSettings,\n ]);\n\n const handleWebNotificationsChange = useCallback((e: ChangeEvent) => {\n updateWebNotificationSettings({\n hasWebNotifications: e.target.checked,\n });\n }, [updateWebNotificationSettings]);\n\n const handlePushNotificationsChange = useCallback((e: ChangeEvent) => {\n updateWebNotificationSettings({\n hasPushNotifications: e.target.checked,\n });\n }, [updateWebNotificationSettings]);\n\n const handlePrivateChatsNotificationsChange = useCallback((e: ChangeEvent) => {\n handleSettingsChange(e, 'contact', 'silent');\n }, [handleSettingsChange]);\n\n const handlePrivateChatsPreviewChange = useCallback((e: ChangeEvent) => {\n handleSettingsChange(e, 'contact', 'showPreviews');\n }, [handleSettingsChange]);\n\n const handleGroupsNotificationsChange = useCallback((e: ChangeEvent) => {\n handleSettingsChange(e, 'group', 'silent');\n }, [handleSettingsChange]);\n\n const handleGroupsPreviewChange = useCallback((e: ChangeEvent) => {\n handleSettingsChange(e, 'group', 'showPreviews');\n }, [handleSettingsChange]);\n\n const handleChannelsNotificationsChange = useCallback((e: ChangeEvent) => {\n handleSettingsChange(e, 'broadcast', 'silent');\n }, [handleSettingsChange]);\n\n const handleChannelsPreviewChange = useCallback((e: ChangeEvent) => {\n handleSettingsChange(e, 'broadcast', 'showPreviews');\n }, [handleSettingsChange]);\n\n const handleContactNotificationChange = useCallback((e: ChangeEvent) => {\n updateContactSignUpNotification({\n isSilent: !e.target.checked,\n });\n }, [updateContactSignUpNotification]);\n\n const handleVolumeChange = useCallback((volume: number) => {\n updateWebNotificationSettings({\n notificationSoundVolume: volume,\n });\n runDebounced(() => playNotifySound(undefined, volume));\n }, [runDebounced, updateWebNotificationSettings]);\n\n const lang = useLang();\n\n useHistoryBack(isActive, onReset, onScreenSelect, SettingsScreens.Notifications);\n\n return (\n
\n
\n

\n Web notifications\n

\n \n \n
\n \n
\n
\n
\n

\n {lang('AutodownloadPrivateChats')}\n

\n\n \n \n
\n\n
\n

{lang('FilterGroups')}

\n\n \n \n
\n\n
\n

{lang('FilterChannels')}

\n\n \n \n
\n\n
\n

{lang('PhoneOther')}

\n\n \n
\n
\n );\n};\n\nexport default memo(withGlobal(\n (global): StateProps => {\n return {\n hasPrivateChatsNotifications: Boolean(global.settings.byKey.hasPrivateChatsNotifications),\n hasPrivateChatsMessagePreview: Boolean(global.settings.byKey.hasPrivateChatsMessagePreview),\n hasGroupNotifications: Boolean(global.settings.byKey.hasGroupNotifications),\n hasGroupMessagePreview: Boolean(global.settings.byKey.hasGroupMessagePreview),\n hasBroadcastNotifications: Boolean(global.settings.byKey.hasBroadcastNotifications),\n hasBroadcastMessagePreview: Boolean(global.settings.byKey.hasBroadcastMessagePreview),\n hasContactJoinedNotifications: Boolean(global.settings.byKey.hasContactJoinedNotifications),\n hasWebNotifications: global.settings.byKey.hasWebNotifications,\n hasPushNotifications: global.settings.byKey.hasPushNotifications,\n notificationSoundVolume: global.settings.byKey.notificationSoundVolume,\n };\n },\n)(SettingsNotifications));\n","import React, { FC, memo, useEffect } from '../../../lib/teact/teact';\nimport { getActions, withGlobal } from '../../../global';\n\nimport { PrivacyVisibility, SettingsScreens } from '../../../types';\n\nimport useLang from '../../../hooks/useLang';\nimport useHistoryBack from '../../../hooks/useHistoryBack';\n\nimport ListItem from '../../ui/ListItem';\nimport Checkbox from '../../ui/Checkbox';\n\ntype OwnProps = {\n isActive?: boolean;\n onScreenSelect: (screen: SettingsScreens) => void;\n onReset: () => void;\n};\n\ntype StateProps = {\n hasPassword?: boolean;\n blockedCount: number;\n isSensitiveEnabled?: boolean;\n canChangeSensitive?: boolean;\n visibilityPrivacyPhoneNumber?: PrivacyVisibility;\n visibilityPrivacyLastSeen?: PrivacyVisibility;\n visibilityPrivacyProfilePhoto?: PrivacyVisibility;\n visibilityPrivacyForwarding?: PrivacyVisibility;\n visibilityPrivacyGroupChats?: PrivacyVisibility;\n};\n\nconst SettingsPrivacy: FC = ({\n isActive,\n onScreenSelect,\n onReset,\n hasPassword,\n blockedCount,\n isSensitiveEnabled,\n canChangeSensitive,\n visibilityPrivacyPhoneNumber,\n visibilityPrivacyLastSeen,\n visibilityPrivacyProfilePhoto,\n visibilityPrivacyForwarding,\n visibilityPrivacyGroupChats,\n\n}) => {\n const {\n loadPrivacySettings,\n loadBlockedContacts,\n loadAuthorizations,\n loadContentSettings,\n updateContentSettings,\n } = getActions();\n\n useEffect(() => {\n loadBlockedContacts();\n loadAuthorizations();\n loadPrivacySettings();\n loadContentSettings();\n }, [loadBlockedContacts, loadAuthorizations, loadPrivacySettings, loadContentSettings]);\n\n const lang = useLang();\n\n useHistoryBack(isActive, onReset, onScreenSelect, SettingsScreens.Privacy);\n\n function getVisibilityValue(visibility?: PrivacyVisibility) {\n switch (visibility) {\n case 'everybody':\n return lang('P2PEverybody');\n\n case 'contacts':\n return lang('P2PContacts');\n\n case 'nobody':\n return lang('P2PNobody');\n }\n\n return undefined;\n }\n\n return (\n
\n
\n onScreenSelect(SettingsScreens.PrivacyBlockedUsers)}\n >\n
\n {lang('BlockedUsers')}\n {blockedCount > 0 && (\n \n {lang('Users', blockedCount)}\n \n )}\n
\n \n onScreenSelect(\n hasPassword ? SettingsScreens.TwoFaEnabled : SettingsScreens.TwoFaDisabled,\n )}\n >\n
\n {lang('TwoStepVerification')}\n \n {lang(hasPassword ? 'PasswordOn' : 'PasswordOff')}\n \n
\n \n
\n\n
\n

{lang('PrivacyTitle')}

\n\n onScreenSelect(SettingsScreens.PrivacyPhoneNumber)}\n >\n
\n {lang('PrivacyPhoneTitle')}\n \n {getVisibilityValue(visibilityPrivacyPhoneNumber)}\n \n
\n \n onScreenSelect(SettingsScreens.PrivacyLastSeen)}\n >\n
\n {lang('LastSeenTitle')}\n \n {getVisibilityValue(visibilityPrivacyLastSeen)}\n \n
\n \n onScreenSelect(SettingsScreens.PrivacyProfilePhoto)}\n >\n
\n {lang('PrivacyProfilePhotoTitle')}\n \n {getVisibilityValue(visibilityPrivacyProfilePhoto)}\n \n
\n \n onScreenSelect(SettingsScreens.PrivacyForwarding)}\n >\n
\n {lang('PrivacyForwardsTitle')}\n \n {getVisibilityValue(visibilityPrivacyForwarding)}\n \n
\n \n onScreenSelect(SettingsScreens.PrivacyGroupChats)}\n >\n
\n {lang('WhoCanAddMe')}\n \n {getVisibilityValue(visibilityPrivacyGroupChats)}\n \n
\n \n
\n\n {canChangeSensitive && (\n
\n

\n {lang('lng_settings_sensitive_title')}\n

\n \n
\n )}\n
\n );\n};\n\nexport default memo(withGlobal(\n (global): StateProps => {\n const {\n settings: {\n byKey: { hasPassword, isSensitiveEnabled, canChangeSensitive },\n privacy,\n },\n blocked,\n } = global;\n\n return {\n hasPassword,\n blockedCount: blocked.totalCount,\n isSensitiveEnabled,\n canChangeSensitive,\n visibilityPrivacyPhoneNumber: privacy.phoneNumber?.visibility,\n visibilityPrivacyLastSeen: privacy.lastSeen?.visibility,\n visibilityPrivacyProfilePhoto: privacy.profilePhoto?.visibility,\n visibilityPrivacyForwarding: privacy.forwards?.visibility,\n visibilityPrivacyGroupChats: privacy.chatInvite?.visibility,\n };\n },\n)(SettingsPrivacy));\n","import React, {\n FC, memo, useCallback, useEffect, useMemo, useState,\n} from '../../../lib/teact/teact';\nimport { getActions, withGlobal } from '../../../global';\n\nimport { ISettings, LangCode, SettingsScreens } from '../../../types';\nimport { ApiLanguage } from '../../../api/types';\n\nimport { setLanguage } from '../../../util/langProvider';\n\nimport RadioGroup from '../../ui/RadioGroup';\nimport Loading from '../../ui/Loading';\nimport useFlag from '../../../hooks/useFlag';\nimport useHistoryBack from '../../../hooks/useHistoryBack';\n\ntype OwnProps = {\n isActive?: boolean;\n onScreenSelect: (screen: SettingsScreens) => void;\n onReset: () => void;\n};\n\ntype StateProps = Pick;\n\nconst SettingsLanguage: FC = ({\n isActive,\n onScreenSelect,\n onReset,\n languages,\n language,\n}) => {\n const {\n loadLanguages,\n setSettingOption,\n } = getActions();\n\n const [selectedLanguage, setSelectedLanguage] = useState(language);\n const [isLoading, markIsLoading, unmarkIsLoading] = useFlag();\n\n // TODO Throttle\n useEffect(() => {\n loadLanguages();\n }, [loadLanguages]);\n\n const handleChange = useCallback((langCode: string) => {\n setSelectedLanguage(langCode);\n markIsLoading();\n\n void setLanguage(langCode as LangCode, () => {\n unmarkIsLoading();\n\n setSettingOption({ language: langCode });\n });\n }, [markIsLoading, unmarkIsLoading, setSettingOption]);\n\n const options = useMemo(() => {\n return languages ? buildOptions(languages) : undefined;\n }, [languages]);\n\n useHistoryBack(isActive, onReset, onScreenSelect, SettingsScreens.Language);\n\n return (\n
\n {options ? (\n \n ) : (\n \n )}\n
\n );\n};\n\nfunction buildOptions(languages: ApiLanguage[]) {\n const currentLangCode = (window.navigator.language || 'en').toLowerCase();\n const shortLangCode = currentLangCode.substr(0, 2);\n\n return languages.map(({ langCode, nativeName, name }) => ({\n value: langCode,\n label: nativeName,\n subLabel: name,\n })).sort((a) => {\n return currentLangCode && (a.value === currentLangCode || a.value === shortLangCode) ? -1 : 0;\n });\n}\n\nexport default memo(withGlobal(\n (global): StateProps => {\n return {\n languages: global.settings.byKey.languages,\n language: global.settings.byKey.language,\n };\n },\n)(SettingsLanguage));\n","import { ApiPrivacyKey, SettingsScreens } from '../../../../types';\n\nexport function getPrivacyKey(screen: SettingsScreens): ApiPrivacyKey | undefined {\n switch (screen) {\n case SettingsScreens.PrivacyPhoneNumber:\n case SettingsScreens.PrivacyPhoneNumberAllowedContacts:\n case SettingsScreens.PrivacyPhoneNumberDeniedContacts:\n return 'phoneNumber';\n case SettingsScreens.PrivacyLastSeen:\n case SettingsScreens.PrivacyLastSeenAllowedContacts:\n case SettingsScreens.PrivacyLastSeenDeniedContacts:\n return 'lastSeen';\n case SettingsScreens.PrivacyProfilePhoto:\n case SettingsScreens.PrivacyProfilePhotoAllowedContacts:\n case SettingsScreens.PrivacyProfilePhotoDeniedContacts:\n return 'profilePhoto';\n case SettingsScreens.PrivacyForwarding:\n case SettingsScreens.PrivacyForwardingAllowedContacts:\n case SettingsScreens.PrivacyForwardingDeniedContacts:\n return 'forwards';\n case SettingsScreens.PrivacyGroupChats:\n case SettingsScreens.PrivacyGroupChatsAllowedContacts:\n case SettingsScreens.PrivacyGroupChatsDeniedContacts:\n return 'chatInvite';\n }\n\n return undefined;\n}\n","import React, {\n FC, memo, useCallback, useMemo,\n} from '../../../lib/teact/teact';\nimport { getActions, withGlobal } from '../../../global';\n\nimport { ApiChat, ApiUser } from '../../../api/types';\nimport { ApiPrivacySettings, SettingsScreens } from '../../../types';\n\nimport useLang from '../../../hooks/useLang';\nimport useHistoryBack from '../../../hooks/useHistoryBack';\n\nimport ListItem from '../../ui/ListItem';\nimport RadioGroup from '../../ui/RadioGroup';\nimport { getPrivacyKey } from './helpers/privacy';\n\ntype OwnProps = {\n screen: SettingsScreens;\n isActive?: boolean;\n onScreenSelect: (screen: SettingsScreens) => void;\n onReset: () => void;\n};\n\ntype StateProps =\n Partial & {\n chatsById?: Record;\n usersById?: Record;\n };\n\nconst SettingsPrivacyVisibility: FC = ({\n screen,\n isActive,\n onScreenSelect,\n onReset,\n visibility,\n allowUserIds,\n allowChatIds,\n blockUserIds,\n blockChatIds,\n chatsById,\n}) => {\n const { setPrivacyVisibility } = getActions();\n\n const lang = useLang();\n\n const visibilityOptions = useMemo(() => {\n switch (screen) {\n case SettingsScreens.PrivacyProfilePhoto:\n case SettingsScreens.PrivacyGroupChats:\n return [\n { value: 'everybody', label: lang('P2PEverybody') },\n { value: 'contacts', label: lang('P2PContacts') },\n ];\n\n default:\n return [\n { value: 'everybody', label: lang('P2PEverybody') },\n { value: 'contacts', label: lang('P2PContacts') },\n { value: 'nobody', label: lang('P2PNobody') },\n ];\n }\n }, [lang, screen]);\n\n const exceptionLists = {\n shouldShowDenied: visibility !== 'nobody',\n shouldShowAllowed: visibility !== 'everybody',\n };\n\n const privacyKey = getPrivacyKey(screen);\n\n const headerText = useMemo(() => {\n switch (screen) {\n case SettingsScreens.PrivacyPhoneNumber:\n return lang('PrivacyPhoneTitle');\n case SettingsScreens.PrivacyLastSeen:\n return lang('LastSeenTitle');\n case SettingsScreens.PrivacyProfilePhoto:\n return lang('PrivacyProfilePhotoTitle');\n case SettingsScreens.PrivacyForwarding:\n return lang('PrivacyForwardsTitle');\n case SettingsScreens.PrivacyGroupChats:\n return lang('WhoCanAddMe');\n default:\n return undefined;\n }\n }, [lang, screen]);\n\n useHistoryBack(isActive, onReset, onScreenSelect, screen);\n\n const descriptionText = useMemo(() => {\n switch (screen) {\n case SettingsScreens.PrivacyLastSeen:\n return lang('CustomHelp');\n default:\n return undefined;\n }\n }, [lang, screen]);\n\n const allowedContactsScreen = (() => {\n switch (screen) {\n case SettingsScreens.PrivacyPhoneNumber:\n return SettingsScreens.PrivacyPhoneNumberAllowedContacts;\n case SettingsScreens.PrivacyLastSeen:\n return SettingsScreens.PrivacyLastSeenAllowedContacts;\n case SettingsScreens.PrivacyProfilePhoto:\n return SettingsScreens.PrivacyProfilePhotoAllowedContacts;\n case SettingsScreens.PrivacyForwarding:\n return SettingsScreens.PrivacyForwardingAllowedContacts;\n default:\n return SettingsScreens.PrivacyGroupChatsAllowedContacts;\n }\n })();\n\n const deniedContactsScreen = (() => {\n switch (screen) {\n case SettingsScreens.PrivacyPhoneNumber:\n return SettingsScreens.PrivacyPhoneNumberDeniedContacts;\n case SettingsScreens.PrivacyLastSeen:\n return SettingsScreens.PrivacyLastSeenDeniedContacts;\n case SettingsScreens.PrivacyProfilePhoto:\n return SettingsScreens.PrivacyProfilePhotoDeniedContacts;\n case SettingsScreens.PrivacyForwarding:\n return SettingsScreens.PrivacyForwardingDeniedContacts;\n default:\n return SettingsScreens.PrivacyGroupChatsDeniedContacts;\n }\n })();\n\n const allowedCount = useMemo(() => {\n if (!allowUserIds || !allowChatIds || !chatsById) {\n return 0;\n }\n\n return allowChatIds.reduce((result, chatId) => {\n return result + (chatsById[chatId] ? chatsById[chatId].membersCount! : 0);\n }, allowUserIds.length);\n }, [allowChatIds, allowUserIds, chatsById]);\n\n const blockCount = useMemo(() => {\n if (!blockUserIds || !blockChatIds || !chatsById) {\n return 0;\n }\n\n return blockChatIds.reduce((result, chatId) => {\n return result + (chatsById[chatId] ? chatsById[chatId].membersCount! : 0);\n }, blockUserIds.length);\n }, [blockChatIds, blockUserIds, chatsById]);\n\n const handleVisibilityChange = useCallback((value) => {\n setPrivacyVisibility({\n privacyKey,\n visibility: value,\n });\n }, [privacyKey, setPrivacyVisibility]);\n\n return (\n
\n
\n

{headerText}

\n\n \n\n {descriptionText && (\n

{descriptionText}

\n )}\n
\n\n
\n

{lang('PrivacyExceptions')}

\n\n {exceptionLists.shouldShowAllowed && (\n {\n onScreenSelect(allowedContactsScreen);\n }}\n >\n
\n {allowedCount > 0 && +{allowedCount}}\n {lang('AlwaysShareWith')}\n {lang('EditAdminAddUsers')}\n
\n \n )}\n {exceptionLists.shouldShowDenied && (\n {\n onScreenSelect(deniedContactsScreen);\n }}\n >\n
\n {blockCount > 0 && −{blockCount}}\n {lang('NeverShareWith')}\n {lang('EditAdminAddUsers')}\n
\n \n )}\n
\n
\n );\n};\n\nexport default memo(withGlobal(\n (global, { screen }): StateProps => {\n let privacySettings: ApiPrivacySettings | undefined;\n\n const {\n chats: { byId: chatsById },\n settings: { privacy },\n } = global;\n\n switch (screen) {\n case SettingsScreens.PrivacyPhoneNumber:\n privacySettings = privacy.phoneNumber;\n break;\n\n case SettingsScreens.PrivacyLastSeen:\n privacySettings = privacy.lastSeen;\n break;\n\n case SettingsScreens.PrivacyProfilePhoto:\n privacySettings = privacy.profilePhoto;\n break;\n\n case SettingsScreens.PrivacyForwarding:\n privacySettings = privacy.forwards;\n break;\n\n case SettingsScreens.PrivacyGroupChats:\n privacySettings = privacy.chatInvite;\n break;\n }\n\n if (!privacySettings) {\n return {};\n }\n\n return {\n ...privacySettings,\n chatsById,\n };\n },\n)(SettingsPrivacyVisibility));\n","import { ApiSession } from '../../../../api/types';\n\nexport default function getSessionIcon(session: ApiSession): string {\n const platform = session.platform.toLowerCase();\n const device = session.deviceModel.toLowerCase();\n const systemVersion = session.systemVersion.toLowerCase();\n\n if (device.includes('xbox')) {\n return 'xbox';\n }\n\n if (device.includes('chrome') && !device.includes('chromebook')) {\n return 'chrome';\n }\n if (device.includes('brave')) {\n return 'brave';\n }\n if (device.includes('vivaldi')) {\n return 'vivaldi';\n }\n if (device.includes('safari')) {\n return 'safari';\n }\n if (device.includes('firefox')) {\n return 'firefox';\n }\n if (device.includes('opera')) {\n return 'opera';\n }\n if (device.includes('samsungbrowser')) {\n return 'samsung';\n }\n if (platform.includes('android')) {\n return 'android';\n }\n if (\n device.includes('iphone')\n || device.includes('ipad')\n || platform.includes('ios')\n || platform.includes('macos')\n || systemVersion.includes('macos')\n ) {\n return 'apple';\n }\n if (platform.includes('ubuntu') || systemVersion.includes('ubuntu')) {\n return 'ubuntu';\n }\n if (platform.includes('linux') || systemVersion.includes('linux')) {\n return 'linux';\n }\n if (platform.includes('windows') || systemVersion.includes('windows')) {\n return 'windows';\n }\n\n return 'unknown';\n}\n","import React, {\n FC, memo, useCallback, useMemo,\n} from '../../../lib/teact/teact';\nimport { getActions, withGlobal } from '../../../global';\n\nimport { ApiSession } from '../../../api/types';\nimport { SettingsScreens } from '../../../types';\n\nimport { formatPastTimeShort } from '../../../util/dateFormat';\nimport useFlag from '../../../hooks/useFlag';\nimport useLang from '../../../hooks/useLang';\nimport useHistoryBack from '../../../hooks/useHistoryBack';\nimport getSessionIcon from './helpers/getSessionIcon';\n\nimport ListItem from '../../ui/ListItem';\nimport ConfirmDialog from '../../ui/ConfirmDialog';\n\nimport './SettingsActiveSessions.scss';\n\ntype OwnProps = {\n isActive?: boolean;\n onScreenSelect: (screen: SettingsScreens) => void;\n onReset: () => void;\n};\n\ntype StateProps = {\n activeSessions: ApiSession[];\n};\n\nconst SettingsActiveSessions: FC = ({\n isActive,\n onScreenSelect,\n onReset,\n activeSessions,\n}) => {\n const {\n terminateAuthorization,\n terminateAllAuthorizations,\n } = getActions();\n\n const [isConfirmTerminateAllDialogOpen, openConfirmTerminateAllDialog, closeConfirmTerminateAllDialog] = useFlag();\n\n const handleTerminateSessionClick = useCallback((hash: string) => {\n terminateAuthorization({ hash });\n }, [terminateAuthorization]);\n\n const handleTerminateAllSessions = useCallback(() => {\n closeConfirmTerminateAllDialog();\n terminateAllAuthorizations();\n }, [closeConfirmTerminateAllDialog, terminateAllAuthorizations]);\n\n const currentSession = useMemo(() => {\n return activeSessions.find((session) => session.isCurrent);\n }, [activeSessions]);\n\n const otherSessions = useMemo(() => {\n return activeSessions.filter((session) => !session.isCurrent);\n }, [activeSessions]);\n\n const lang = useLang();\n\n useHistoryBack(isActive, onReset, onScreenSelect, SettingsScreens.ActiveSessions);\n\n function renderCurrentSession(session: ApiSession) {\n return (\n
\n

\n {lang('AuthSessions.CurrentSession')}\n

\n\n \n
\n {session.deviceModel}\n \n {session.appName} {session.appVersion}, {session.platform} {session.systemVersion}\n \n {session.ip} - {getLocation(session)}\n
\n
\n\n \n {lang('TerminateAllSessions')}\n \n
\n );\n }\n\n function renderOtherSessions(sessions: ApiSession[]) {\n return (\n
\n

\n {lang('OtherSessions')}\n

\n\n {sessions.map(renderSession)}\n
\n );\n }\n\n function renderSession(session: ApiSession) {\n return (\n {\n handleTerminateSessionClick(session.hash);\n },\n }]}\n icon={`device-${getSessionIcon(session)} icon-device`}\n >\n
\n {formatPastTimeShort(lang, session.dateActive * 1000)}\n {session.deviceModel}\n \n {session.appName} {session.appVersion}, {session.platform} {session.systemVersion}\n \n {session.ip} {getLocation(session)}\n
\n \n );\n }\n\n return (\n
\n {currentSession && renderCurrentSession(currentSession)}\n {otherSessions && renderOtherSessions(otherSessions)}\n {otherSessions && (\n \n )}\n
\n );\n};\n\nfunction getLocation(session: ApiSession) {\n return [session.region, session.country].filter(Boolean).join(', ');\n}\n\nexport default memo(withGlobal(\n (global): StateProps => {\n return {\n activeSessions: global.activeSessions,\n };\n },\n)(SettingsActiveSessions));\n","import React, {\n FC, useMemo, useState, memo, useRef, useCallback, useEffect,\n} from '../../../lib/teact/teact';\nimport { getActions, withGlobal } from '../../../global';\n\nimport { ApiUser } from '../../../api/types';\n\nimport { filterUsersByName, getUserFullName } from '../../../global/helpers';\nimport { unique } from '../../../util/iteratees';\nimport useLang from '../../../hooks/useLang';\n\nimport ChatOrUserPicker from '../../common/ChatOrUserPicker';\n\nexport type OwnProps = {\n isOpen: boolean;\n onClose: NoneToVoidFunction;\n};\n\ntype StateProps = {\n usersById: Record;\n blockedIds: string[];\n contactIds?: string[];\n localContactIds?: string[];\n currentUserId?: string;\n};\n\nconst BlockUserModal: FC = ({\n usersById,\n blockedIds,\n contactIds,\n localContactIds,\n currentUserId,\n isOpen,\n onClose,\n}) => {\n const {\n loadContactList,\n setUserSearchQuery,\n blockContact,\n } = getActions();\n\n const lang = useLang();\n const [filter, setFilter] = useState('');\n // eslint-disable-next-line no-null/no-null\n const filterRef = useRef(null);\n\n useEffect(() => {\n setUserSearchQuery({ query: filter });\n }, [filter, setUserSearchQuery]);\n\n const filteredContactIds = useMemo(() => {\n const availableContactIds = unique([\n ...(contactIds || []),\n ...(localContactIds || []),\n ].filter((contactId) => {\n return contactId !== currentUserId && !blockedIds.includes(contactId);\n }));\n\n return filterUsersByName(availableContactIds, usersById, filter)\n .sort((firstId, secondId) => {\n const firstName = getUserFullName(usersById[firstId]) || '';\n const secondName = getUserFullName(usersById[secondId]) || '';\n\n return firstName.localeCompare(secondName);\n });\n }, [blockedIds, contactIds, currentUserId, filter, localContactIds, usersById]);\n\n const handleRemoveUser = useCallback((userId: string) => {\n const { id: contactId, accessHash } = usersById[userId] || {};\n if (!contactId || !accessHash) {\n return;\n }\n blockContact({ contactId, accessHash });\n onClose();\n }, [blockContact, onClose, usersById]);\n\n return (\n \n );\n};\n\nexport default memo(withGlobal(\n (global): StateProps => {\n const {\n users: {\n byId: usersById,\n },\n blocked: {\n ids: blockedIds,\n },\n contactList,\n currentUserId,\n } = global;\n\n return {\n usersById,\n blockedIds,\n contactIds: contactList?.userIds,\n localContactIds: global.userSearch.localUserIds,\n currentUserId,\n };\n },\n)(BlockUserModal));\n","import React, {\n FC, memo, useCallback,\n} from '../../../lib/teact/teact';\nimport { getActions, withGlobal } from '../../../global';\n\nimport { ApiChat, ApiCountryCode, ApiUser } from '../../../api/types';\nimport { SettingsScreens } from '../../../types';\n\nimport { CHAT_HEIGHT_PX } from '../../../config';\nimport { formatPhoneNumberWithCode } from '../../../util/phoneNumber';\nimport {\n getChatTitle, getUserFullName, isUserId,\n} from '../../../global/helpers';\nimport renderText from '../../common/helpers/renderText';\nimport buildClassName from '../../../util/buildClassName';\nimport useLang from '../../../hooks/useLang';\nimport useHistoryBack from '../../../hooks/useHistoryBack';\nimport useFlag from '../../../hooks/useFlag';\n\nimport ListItem from '../../ui/ListItem';\nimport FloatingActionButton from '../../ui/FloatingActionButton';\nimport Avatar from '../../common/Avatar';\nimport Loading from '../../ui/Loading';\nimport BlockUserModal from './BlockUserModal';\n\ntype OwnProps = {\n isActive?: boolean;\n onScreenSelect: (screen: SettingsScreens) => void;\n onReset: () => void;\n};\n\ntype StateProps = {\n chatsByIds: Record;\n usersByIds: Record;\n blockedIds: string[];\n phoneCodeList: ApiCountryCode[];\n};\n\nconst SettingsPrivacyBlockedUsers: FC = ({\n isActive,\n onScreenSelect,\n onReset,\n chatsByIds,\n usersByIds,\n blockedIds,\n phoneCodeList,\n}) => {\n const { unblockContact } = getActions();\n\n const lang = useLang();\n const [isBlockUserModalOpen, openBlockUserModal, closeBlockUserModal] = useFlag();\n const handleUnblockClick = useCallback((contactId: string) => {\n unblockContact({ contactId });\n }, [unblockContact]);\n\n useHistoryBack(isActive, onReset, onScreenSelect, SettingsScreens.PrivacyBlockedUsers);\n\n function renderContact(contactId: string, i: number, viewportOffset: number) {\n const isPrivate = isUserId(contactId);\n const user = isPrivate ? usersByIds[contactId] : undefined;\n const chat = !isPrivate ? chatsByIds[contactId] : undefined;\n\n const className = buildClassName(\n 'Chat chat-item-clickable blocked-list-item small-icon',\n isPrivate ? 'private' : 'group',\n );\n\n return (\n {\n handleUnblockClick(contactId);\n },\n }]}\n style={`top: ${(viewportOffset + i) * CHAT_HEIGHT_PX}px;`}\n >\n \n
\n

{renderText((isPrivate ? getUserFullName(user) : getChatTitle(lang, chat!)) || '')}

\n {user?.phoneNumber && (\n
{formatPhoneNumberWithCode(phoneCodeList, user.phoneNumber)}
\n )}\n {user && !user.phoneNumber && user.username && (\n
@{user.username}
\n )}\n
\n \n );\n }\n\n return (\n
\n
\n
\n

\n {lang('BlockedUsersInfo')}\n

\n
\n\n
\n {blockedIds?.length ? (\n
\n {blockedIds!.map((contactId, i) => renderContact(contactId, i, 0))}\n
\n ) : blockedIds && !blockedIds.length ? (\n
{lang('NoBlocked')}
\n ) : (\n \n )}\n
\n
\n\n \n \n \n \n
\n );\n};\n\nexport default memo(withGlobal(\n (global): StateProps => {\n const {\n chats: {\n byId: chatsByIds,\n },\n users: {\n byId: usersByIds,\n },\n blocked: {\n ids,\n },\n countryList: {\n phoneCodes: phoneCodeList,\n },\n } = global;\n\n return {\n chatsByIds,\n usersByIds,\n blockedIds: ids,\n phoneCodeList,\n };\n },\n)(SettingsPrivacyBlockedUsers));\n","import React, { FC, memo } from '../../../../lib/teact/teact';\nimport { withGlobal } from '../../../../global';\n\nimport { ApiSticker } from '../../../../api/types';\nimport { SettingsScreens } from '../../../../types';\n\nimport { selectAnimatedEmoji } from '../../../../global/selectors';\nimport useLang from '../../../../hooks/useLang';\nimport useHistoryBack from '../../../../hooks/useHistoryBack';\n\nimport ListItem from '../../../ui/ListItem';\nimport AnimatedEmoji from '../../../common/AnimatedEmoji';\nimport renderText from '../../../common/helpers/renderText';\n\ntype OwnProps = {\n isActive?: boolean;\n onScreenSelect: (screen: SettingsScreens) => void;\n onReset: () => void;\n};\n\ntype StateProps = {\n animatedEmoji: ApiSticker;\n};\n\nconst SettingsTwoFaEnabled: FC = ({\n isActive, onReset, animatedEmoji, onScreenSelect,\n}) => {\n const lang = useLang();\n\n useHistoryBack(isActive, onReset, onScreenSelect, SettingsScreens.TwoFaEnabled);\n\n return (\n
\n
\n \n\n

\n {renderText(lang('EnabledPasswordText'), ['br'])}\n

\n
\n\n
\n onScreenSelect(SettingsScreens.TwoFaChangePasswordCurrent)}\n >\n {lang('ChangePassword')}\n \n onScreenSelect(SettingsScreens.TwoFaTurnOff)}\n >\n {lang('TurnPasswordOff')}\n \n onScreenSelect(SettingsScreens.TwoFaRecoveryEmailCurrentPassword)}\n >\n {lang('SetRecoveryEmail')}\n \n
\n
\n );\n};\n\nexport default memo(withGlobal((global) => {\n return {\n animatedEmoji: selectAnimatedEmoji(global, '🔐'),\n };\n})(SettingsTwoFaEnabled));\n","import React, {\n FC, memo, useCallback, useState,\n} from '../../../../lib/teact/teact';\n\nimport { SettingsScreens } from '../../../../types';\n\nimport useLang from '../../../../hooks/useLang';\nimport useHistoryBack from '../../../../hooks/useHistoryBack';\n\nimport PasswordMonkey from '../../../common/PasswordMonkey';\nimport PasswordForm from '../../../common/PasswordForm';\n\ntype OwnProps = {\n screen: SettingsScreens;\n error?: string;\n isLoading?: boolean;\n expectedPassword?: string;\n placeholder?: string;\n hint?: string;\n submitLabel?: string;\n clearError?: NoneToVoidFunction;\n onSubmit: (password: string) => void;\n isActive?: boolean;\n onScreenSelect: (screen: SettingsScreens) => void;\n onReset: () => void;\n};\n\nconst EQUAL_PASSWORD_ERROR = 'Passwords Should Be Equal';\n\nconst SettingsTwoFaPassword: FC = ({\n screen,\n isActive,\n onScreenSelect,\n onReset,\n error,\n isLoading,\n expectedPassword,\n placeholder = 'Current Password',\n hint,\n submitLabel,\n clearError,\n onSubmit,\n}) => {\n const [validationError, setValidationError] = useState('');\n const [shouldShowPassword, setShouldShowPassword] = useState(false);\n\n const handleSubmit = useCallback((newPassword) => {\n if (expectedPassword && newPassword !== expectedPassword) {\n setValidationError(EQUAL_PASSWORD_ERROR);\n } else {\n onSubmit(newPassword);\n }\n }, [onSubmit, expectedPassword]);\n\n const handleClearError = useCallback(() => {\n if (clearError) {\n clearError();\n }\n setValidationError('');\n }, [clearError]);\n\n const lang = useLang();\n\n useHistoryBack(isActive, onReset, onScreenSelect, screen);\n\n return (\n
\n
\n \n
\n\n
\n \n
\n
\n );\n};\n\nexport default memo(SettingsTwoFaPassword);\n","import React, { FC, memo } from '../../../../lib/teact/teact';\nimport { withGlobal } from '../../../../global';\n\nimport { ApiSticker } from '../../../../api/types';\nimport { SettingsScreens } from '../../../../types';\n\nimport { selectAnimatedEmoji } from '../../../../global/selectors';\nimport useLang from '../../../../hooks/useLang';\nimport useHistoryBack from '../../../../hooks/useHistoryBack';\n\nimport Button from '../../../ui/Button';\nimport AnimatedEmoji from '../../../common/AnimatedEmoji';\n\ntype OwnProps = {\n onStart: NoneToVoidFunction;\n isActive?: boolean;\n onScreenSelect: (screen: SettingsScreens) => void;\n onReset: () => void;\n};\n\ntype StateProps = {\n animatedEmoji: ApiSticker;\n};\n\nconst SettingsTwoFaStart: FC = ({\n isActive, onScreenSelect, onReset, animatedEmoji, onStart,\n}) => {\n const lang = useLang();\n\n useHistoryBack(isActive, onReset, onScreenSelect, SettingsScreens.TwoFaDisabled);\n\n return (\n
\n
\n \n\n

\n {lang('SetAdditionalPasswordInfo')}\n

\n
\n\n
\n \n
\n
\n );\n};\n\nexport default memo(withGlobal((global) => {\n return {\n animatedEmoji: selectAnimatedEmoji(global, '🔐'),\n };\n})(SettingsTwoFaStart));\n","import React, {\n FC, memo, useCallback, useEffect, useRef, useState,\n} from '../../../../lib/teact/teact';\nimport { withGlobal } from '../../../../global';\n\nimport { ApiSticker } from '../../../../api/types';\nimport { SettingsScreens } from '../../../../types';\n\nimport { IS_SINGLE_COLUMN_LAYOUT, IS_TOUCH_ENV } from '../../../../util/environment';\nimport { selectAnimatedEmoji } from '../../../../global/selectors';\nimport useFlag from '../../../../hooks/useFlag';\nimport useLang from '../../../../hooks/useLang';\nimport useHistoryBack from '../../../../hooks/useHistoryBack';\n\nimport Button from '../../../ui/Button';\nimport Modal from '../../../ui/Modal';\nimport AnimatedEmoji from '../../../common/AnimatedEmoji';\nimport InputText from '../../../ui/InputText';\nimport renderText from '../../../common/helpers/renderText';\n\ntype OwnProps = {\n icon: 'hint' | 'email';\n type?: 'text' | 'email';\n isLoading?: boolean;\n error?: string;\n placeholder: string;\n shouldConfirm?: boolean;\n clearError?: NoneToVoidFunction;\n onSubmit: (value?: string) => void;\n isActive?: boolean;\n onScreenSelect: (screen: SettingsScreens) => void;\n onReset: () => void;\n screen: SettingsScreens;\n};\n\ntype StateProps = {\n animatedEmoji: ApiSticker;\n};\n\nconst FOCUS_DELAY_TIMEOUT_MS = IS_SINGLE_COLUMN_LAYOUT ? 550 : 400;\n\nconst SettingsTwoFaSkippableForm: FC = ({\n animatedEmoji,\n type = 'text',\n isLoading,\n error,\n placeholder,\n shouldConfirm,\n clearError,\n onSubmit,\n isActive,\n onScreenSelect,\n onReset,\n screen,\n}) => {\n // eslint-disable-next-line no-null/no-null\n const inputRef = useRef(null);\n\n const [value, setValue] = useState('');\n const [isConfirmShown, markIsConfirmShown, unmarkIsConfirmShown] = useFlag(false);\n\n useEffect(() => {\n if (!IS_TOUCH_ENV) {\n setTimeout(() => {\n inputRef.current!.focus();\n }, FOCUS_DELAY_TIMEOUT_MS);\n }\n }, []);\n\n const handleInputChange = useCallback((e: React.ChangeEvent) => {\n if (error && clearError) {\n clearError();\n }\n\n setValue(e.target.value);\n }, [clearError, error]);\n\n const handleSubmit = (e: React.FormEvent) => {\n e.preventDefault();\n\n if (!inputRef.current) {\n return;\n }\n\n onSubmit(value);\n };\n\n const handleSkip = useCallback(() => {\n onSubmit();\n }, [onSubmit]);\n\n const handleSkipConfirm = useCallback(() => {\n unmarkIsConfirmShown();\n onSubmit();\n }, [onSubmit, unmarkIsConfirmShown]);\n\n const lang = useLang();\n\n useHistoryBack(isActive, onReset, onScreenSelect, screen);\n\n return (\n
\n
\n \n
\n\n
\n
\n \n\n {value ? (\n \n ) : (\n \n {lang('YourEmailSkip')}\n \n )}\n \n {shouldConfirm && (\n \n {renderText(lang('YourEmailSkipWarningText'), ['br', 'simple_markdown'])}\n
\n \n {lang('YourEmailSkip')}\n \n \n {lang('Cancel')}\n \n
\n \n )}\n
\n
\n );\n};\n\nexport default memo(withGlobal((global, { icon }) => {\n return {\n animatedEmoji: selectAnimatedEmoji(global, icon === 'email' ? '💌' : '💡'),\n };\n})(SettingsTwoFaSkippableForm));\n","import React, { FC, memo, useCallback } from '../../../../lib/teact/teact';\nimport { withGlobal } from '../../../../global';\n\nimport { ApiSticker } from '../../../../api/types';\nimport { SettingsScreens } from '../../../../types';\n\nimport { selectAnimatedEmoji } from '../../../../global/selectors';\nimport useLang from '../../../../hooks/useLang';\nimport useHistoryBack from '../../../../hooks/useHistoryBack';\n\nimport Button from '../../../ui/Button';\nimport AnimatedEmoji from '../../../common/AnimatedEmoji';\n\ntype OwnProps = {\n isActive?: boolean;\n onScreenSelect: (screen: SettingsScreens) => void;\n onReset: () => void;\n};\n\ntype StateProps = {\n animatedEmoji: ApiSticker;\n};\n\nconst SettingsTwoFaCongratulations: FC = ({\n isActive, onReset, animatedEmoji, onScreenSelect,\n}) => {\n const lang = useLang();\n\n const handleClick = useCallback(() => {\n onScreenSelect(SettingsScreens.Privacy);\n }, [onScreenSelect]);\n\n useHistoryBack(isActive, onReset, onScreenSelect, SettingsScreens.TwoFaCongratulations);\n\n return (\n
\n
\n \n\n

\n {lang('TwoStepVerificationPasswordSetInfo')}\n

\n
\n\n
\n \n
\n
\n );\n};\n\nexport default memo(withGlobal((global) => {\n return {\n animatedEmoji: selectAnimatedEmoji(global, '🥳'),\n };\n})(SettingsTwoFaCongratulations));\n","import React, {\n FC, memo, useCallback, useEffect, useRef, useState,\n} from '../../../../lib/teact/teact';\nimport { withGlobal } from '../../../../global';\n\nimport { ApiSticker } from '../../../../api/types';\nimport { SettingsScreens } from '../../../../types';\n\nimport { IS_SINGLE_COLUMN_LAYOUT, IS_TOUCH_ENV } from '../../../../util/environment';\nimport { selectAnimatedEmoji } from '../../../../global/selectors';\nimport useLang from '../../../../hooks/useLang';\nimport useHistoryBack from '../../../../hooks/useHistoryBack';\n\nimport AnimatedEmoji from '../../../common/AnimatedEmoji';\nimport InputText from '../../../ui/InputText';\nimport Loading from '../../../ui/Loading';\n\ntype OwnProps = {\n isLoading?: boolean;\n error?: string;\n clearError: NoneToVoidFunction;\n onSubmit: (hint: string) => void;\n isActive?: boolean;\n onScreenSelect: (screen: SettingsScreens) => void;\n onReset: () => void;\n screen: SettingsScreens;\n};\n\ntype StateProps = {\n animatedEmoji: ApiSticker;\n codeLength: number;\n};\n\nconst FOCUS_DELAY_TIMEOUT_MS = IS_SINGLE_COLUMN_LAYOUT ? 550 : 400;\n\nconst SettingsTwoFaEmailCode: FC = ({\n animatedEmoji,\n codeLength,\n isLoading,\n error,\n clearError,\n onSubmit,\n isActive,\n onScreenSelect,\n onReset,\n screen,\n}) => {\n // eslint-disable-next-line no-null/no-null\n const inputRef = useRef(null);\n\n const [value, setValue] = useState('');\n\n useEffect(() => {\n if (!IS_TOUCH_ENV) {\n setTimeout(() => {\n inputRef.current!.focus();\n }, FOCUS_DELAY_TIMEOUT_MS);\n }\n }, []);\n\n const lang = useLang();\n\n useHistoryBack(isActive, onReset, onScreenSelect, screen);\n\n const handleInputChange = useCallback((e: React.ChangeEvent) => {\n if (error && clearError) {\n clearError();\n }\n\n const newValue = e.target.value.slice(0, codeLength);\n\n if (newValue.length === codeLength) {\n onSubmit(newValue);\n }\n\n setValue(newValue);\n e.target.value = newValue;\n }, [clearError, codeLength, error, onSubmit]);\n\n return (\n
\n
\n \n
\n\n
\n \n {isLoading && }\n
\n
\n );\n};\n\nexport default memo(withGlobal((global) => {\n return {\n animatedEmoji: selectAnimatedEmoji(global, '💌'),\n codeLength: global.twoFaSettings.waitingEmailCodeLength,\n };\n})(SettingsTwoFaEmailCode));\n","import React, {\n FC, memo, useCallback, useEffect,\n} from '../../../../lib/teact/teact';\nimport { getActions, withGlobal } from '../../../../global';\n\nimport { GlobalState } from '../../../../global/types';\nimport { SettingsScreens } from '../../../../types';\n\nimport { TwoFaDispatch, TwoFaState } from '../../../../hooks/reducers/useTwoFaReducer';\nimport useLang from '../../../../hooks/useLang';\n\nimport SettingsTwoFaEnabled from './SettingsTwoFaEnabled';\nimport SettingsTwoFaPassword from './SettingsTwoFaPassword';\nimport SettingsTwoFaStart from './SettingsTwoFaStart';\nimport SettingsTwoFaSkippableForm from './SettingsTwoFaSkippableForm';\nimport SettingsTwoFaCongratulations from './SettingsTwoFaCongratulations';\nimport SettingsTwoFaEmailCode from './SettingsTwoFaEmailCode';\n\nexport type OwnProps = {\n state: TwoFaState;\n currentScreen: SettingsScreens;\n shownScreen: SettingsScreens;\n dispatch: TwoFaDispatch;\n isActive?: boolean;\n onScreenSelect: (screen: SettingsScreens) => void;\n onReset: () => void;\n};\n\ntype StateProps = GlobalState['twoFaSettings'];\n\nconst SettingsTwoFa: FC = ({\n currentScreen,\n shownScreen,\n state,\n hint,\n isLoading,\n error,\n waitingEmailCodeLength,\n dispatch,\n isActive,\n onScreenSelect,\n onReset,\n}) => {\n const {\n updatePassword,\n checkPassword,\n clearTwoFaError,\n updateRecoveryEmail,\n provideTwoFaEmailCode,\n clearPassword,\n } = getActions();\n\n useEffect(() => {\n if (waitingEmailCodeLength) {\n if (currentScreen === SettingsScreens.TwoFaNewPasswordEmail) {\n onScreenSelect(SettingsScreens.TwoFaNewPasswordEmailCode);\n } else if (currentScreen === SettingsScreens.TwoFaRecoveryEmail) {\n onScreenSelect(SettingsScreens.TwoFaRecoveryEmailCode);\n }\n }\n }, [currentScreen, onScreenSelect, waitingEmailCodeLength]);\n\n const handleStartWizard = useCallback(() => {\n dispatch({ type: 'reset' });\n onScreenSelect(SettingsScreens.TwoFaNewPassword);\n }, [dispatch, onScreenSelect]);\n\n const handleNewPassword = useCallback((value: string) => {\n dispatch({ type: 'setPassword', payload: value });\n onScreenSelect(SettingsScreens.TwoFaNewPasswordConfirm);\n }, [dispatch, onScreenSelect]);\n\n const handleNewPasswordConfirm = useCallback(() => {\n onScreenSelect(SettingsScreens.TwoFaNewPasswordHint);\n }, [onScreenSelect]);\n\n const handleNewPasswordHint = useCallback((value?: string) => {\n dispatch({ type: 'setHint', payload: value });\n onScreenSelect(SettingsScreens.TwoFaNewPasswordEmail);\n }, [dispatch, onScreenSelect]);\n\n const handleNewPasswordEmail = useCallback((value?: string) => {\n dispatch({ type: 'setEmail', payload: value });\n updatePassword({\n ...state,\n email: value,\n onSuccess: () => {\n onScreenSelect(SettingsScreens.TwoFaCongratulations);\n },\n });\n }, [dispatch, onScreenSelect, state, updatePassword]);\n\n const handleChangePasswordCurrent = useCallback((value: string) => {\n dispatch({ type: 'setCurrentPassword', payload: value });\n checkPassword({\n currentPassword: value,\n onSuccess: () => {\n onScreenSelect(SettingsScreens.TwoFaChangePasswordNew);\n },\n });\n }, [checkPassword, dispatch, onScreenSelect]);\n\n const handleChangePasswordNew = useCallback((value: string) => {\n dispatch({ type: 'setPassword', payload: value });\n onScreenSelect(SettingsScreens.TwoFaChangePasswordConfirm);\n }, [dispatch, onScreenSelect]);\n\n const handleChangePasswordConfirm = useCallback(() => {\n onScreenSelect(SettingsScreens.TwoFaChangePasswordHint);\n }, [onScreenSelect]);\n\n const handleChangePasswordHint = useCallback((value?: string) => {\n dispatch({ type: 'setHint', payload: value });\n updatePassword({\n ...state,\n hint: value,\n onSuccess: () => {\n onScreenSelect(SettingsScreens.TwoFaCongratulations);\n },\n });\n }, [dispatch, onScreenSelect, state, updatePassword]);\n\n const handleTurnOff = useCallback((value: string) => {\n clearPassword({\n currentPassword: value,\n onSuccess: () => {\n onScreenSelect(SettingsScreens.Privacy);\n },\n });\n }, [clearPassword, onScreenSelect]);\n\n const handleRecoveryEmailCurrentPassword = useCallback((value: string) => {\n dispatch({ type: 'setCurrentPassword', payload: value });\n checkPassword({\n currentPassword: value,\n onSuccess: () => {\n onScreenSelect(SettingsScreens.TwoFaRecoveryEmail);\n },\n });\n }, [checkPassword, dispatch, onScreenSelect]);\n\n const handleRecoveryEmail = useCallback((value?: string) => {\n dispatch({ type: 'setEmail', payload: value });\n updateRecoveryEmail({\n ...state,\n email: value,\n onSuccess: () => {\n onScreenSelect(SettingsScreens.TwoFaCongratulations);\n },\n });\n }, [dispatch, onScreenSelect, state, updateRecoveryEmail]);\n\n const handleEmailCode = useCallback((code: string) => {\n provideTwoFaEmailCode({ code });\n }, [provideTwoFaEmailCode]);\n\n const lang = useLang();\n\n switch (currentScreen) {\n case SettingsScreens.TwoFaDisabled:\n return (\n \n );\n\n case SettingsScreens.TwoFaNewPassword:\n return (\n \n );\n\n case SettingsScreens.TwoFaNewPasswordConfirm:\n return (\n \n );\n\n case SettingsScreens.TwoFaNewPasswordHint:\n return (\n \n );\n\n case SettingsScreens.TwoFaNewPasswordEmail:\n return (\n \n );\n\n case SettingsScreens.TwoFaNewPasswordEmailCode:\n return (\n \n );\n\n case SettingsScreens.TwoFaCongratulations:\n return (\n \n );\n\n case SettingsScreens.TwoFaEnabled:\n return (\n \n );\n\n case SettingsScreens.TwoFaChangePasswordCurrent:\n return (\n \n );\n\n case SettingsScreens.TwoFaChangePasswordNew:\n return (\n \n );\n\n case SettingsScreens.TwoFaChangePasswordConfirm:\n return (\n \n );\n\n case SettingsScreens.TwoFaChangePasswordHint:\n return (\n \n );\n\n case SettingsScreens.TwoFaTurnOff:\n return (\n \n );\n\n case SettingsScreens.TwoFaRecoveryEmailCurrentPassword:\n return (\n \n );\n\n case SettingsScreens.TwoFaRecoveryEmail:\n return (\n \n );\n\n case SettingsScreens.TwoFaRecoveryEmailCode:\n return (\n \n );\n\n default:\n return undefined;\n }\n};\n\nexport default memo(withGlobal(\n (global): StateProps => ({ ...global.twoFaSettings }),\n)(SettingsTwoFa));\n","import React, {\n FC, memo, useCallback, useMemo, useState,\n} from '../../../lib/teact/teact';\nimport { getActions, getGlobal, withGlobal } from '../../../global';\n\nimport { GlobalState } from '../../../global/types';\nimport { ApiPrivacySettings, SettingsScreens } from '../../../types';\n\nimport { ALL_FOLDER_ID, ARCHIVED_FOLDER_ID } from '../../../config';\nimport { unique } from '../../../util/iteratees';\nimport { filterChatsByName, isUserId } from '../../../global/helpers';\nimport useLang from '../../../hooks/useLang';\nimport useHistoryBack from '../../../hooks/useHistoryBack';\nimport { useFolderManagerForOrderedIds } from '../../../hooks/useFolderManager';\nimport { getPrivacyKey } from './helpers/privacy';\n\nimport Picker from '../../common/Picker';\nimport FloatingActionButton from '../../ui/FloatingActionButton';\n\nexport type OwnProps = {\n isAllowList?: boolean;\n screen: SettingsScreens;\n isActive?: boolean;\n onScreenSelect: (screen: SettingsScreens) => void;\n onReset: () => void;\n};\n\ntype StateProps = {\n currentUserId?: string;\n settings?: ApiPrivacySettings;\n};\n\nconst SettingsPrivacyVisibilityExceptionList: FC = ({\n isAllowList,\n screen,\n isActive,\n onScreenSelect,\n onReset,\n currentUserId,\n settings,\n}) => {\n const { setPrivacySettings } = getActions();\n\n const lang = useLang();\n\n const selectedContactIds = useMemo(() => {\n if (!settings) {\n return [];\n }\n\n if (isAllowList) {\n return [...settings.allowUserIds, ...settings.allowChatIds];\n } else {\n return [...settings.blockUserIds, ...settings.blockChatIds];\n }\n }, [isAllowList, settings]);\n const [searchQuery, setSearchQuery] = useState('');\n const [isSubmitShown, setIsSubmitShown] = useState(false);\n const [newSelectedContactIds, setNewSelectedContactIds] = useState(selectedContactIds);\n\n const folderAllOrderedIds = useFolderManagerForOrderedIds(ALL_FOLDER_ID);\n const folderArchivedOrderedIds = useFolderManagerForOrderedIds(ARCHIVED_FOLDER_ID);\n const displayedIds = useMemo(() => {\n // No need for expensive global updates on chats, so we avoid them\n const chatsById = getGlobal().chats.byId;\n\n const chatIds = unique([...folderAllOrderedIds || [], ...folderArchivedOrderedIds || []])\n .filter((chatId) => {\n const chat = chatsById[chatId];\n\n return chat && isUserId(chat.id) && chat.id !== currentUserId;\n });\n\n return unique([\n ...selectedContactIds,\n ...filterChatsByName(lang, chatIds, chatsById, searchQuery),\n ]);\n }, [folderAllOrderedIds, folderArchivedOrderedIds, selectedContactIds, lang, searchQuery, currentUserId]);\n\n const handleSelectedContactIdsChange = useCallback((value: string[]) => {\n setNewSelectedContactIds(value);\n setIsSubmitShown(true);\n }, []);\n\n const handleSubmit = useCallback(() => {\n setPrivacySettings({\n privacyKey: getPrivacyKey(screen),\n isAllowList: Boolean(isAllowList),\n contactsIds: newSelectedContactIds,\n });\n\n onScreenSelect(SettingsScreens.Privacy);\n }, [isAllowList, newSelectedContactIds, onScreenSelect, screen, setPrivacySettings]);\n\n useHistoryBack(isActive, onReset, onScreenSelect, screen);\n\n return (\n
\n \n\n \n \n \n
\n );\n};\n\nfunction getCurrentPrivacySettings(global: GlobalState, screen: SettingsScreens) {\n const { privacy } = global.settings;\n switch (screen) {\n case SettingsScreens.PrivacyPhoneNumberAllowedContacts:\n case SettingsScreens.PrivacyPhoneNumberDeniedContacts:\n return privacy.phoneNumber;\n case SettingsScreens.PrivacyLastSeenAllowedContacts:\n case SettingsScreens.PrivacyLastSeenDeniedContacts:\n return privacy.lastSeen;\n case SettingsScreens.PrivacyProfilePhotoAllowedContacts:\n case SettingsScreens.PrivacyProfilePhotoDeniedContacts:\n return privacy.profilePhoto;\n case SettingsScreens.PrivacyForwardingAllowedContacts:\n case SettingsScreens.PrivacyForwardingDeniedContacts:\n return privacy.forwards;\n case SettingsScreens.PrivacyGroupChatsDeniedContacts:\n case SettingsScreens.PrivacyGroupChatsAllowedContacts:\n return privacy.chatInvite;\n }\n\n return undefined;\n}\n\nexport default memo(withGlobal(\n (global, { screen }): StateProps => {\n return {\n currentUserId: global.currentUserId,\n settings: getCurrentPrivacySettings(global, screen),\n };\n },\n)(SettingsPrivacyVisibilityExceptionList));\n","import React, { FC, memo, useCallback } from '../../../lib/teact/teact';\nimport { getActions, withGlobal } from '../../../global';\n\nimport { SettingsScreens } from '../../../types';\nimport { ApiAvailableReaction } from '../../../api/types';\n\nimport useHistoryBack from '../../../hooks/useHistoryBack';\n\nimport ReactionStaticEmoji from '../../common/ReactionStaticEmoji';\nimport RadioGroup from '../../ui/RadioGroup';\n\ntype OwnProps = {\n isActive?: boolean;\n onScreenSelect: (screen: SettingsScreens) => void;\n onReset: () => void;\n};\n\ntype StateProps = {\n availableReactions?: ApiAvailableReaction[];\n selectedReaction?: string;\n};\n\nconst SettingsQuickReaction: FC = ({\n isActive,\n onReset,\n onScreenSelect,\n availableReactions,\n selectedReaction,\n}) => {\n const { setDefaultReaction } = getActions();\n useHistoryBack(isActive, onReset, onScreenSelect, SettingsScreens.General);\n\n const options = availableReactions?.filter((l) => !l.isInactive).map((l) => {\n return {\n label: <>{l.title},\n value: l.reaction,\n };\n }) || [];\n\n const handleChange = useCallback((reaction: string) => {\n setDefaultReaction({ reaction });\n }, [setDefaultReaction]);\n\n return (\n
\n \n
\n );\n};\n\nexport default memo(withGlobal(\n (global) => {\n const { availableReactions, appConfig } = global;\n\n return {\n availableReactions,\n selectedReaction: appConfig?.defaultReaction,\n };\n },\n)(SettingsQuickReaction));\n","import React, { FC, memo, useCallback } from '../../../lib/teact/teact';\n\nimport { SettingsScreens } from '../../../types';\nimport { FolderEditDispatch, FoldersState } from '../../../hooks/reducers/useFoldersReducer';\n\nimport { LAYERS_ANIMATION_NAME } from '../../../util/environment';\nimport useTwoFaReducer from '../../../hooks/reducers/useTwoFaReducer';\n\nimport Transition from '../../ui/Transition';\nimport SettingsHeader from './SettingsHeader';\nimport SettingsMain from './SettingsMain';\nimport SettingsEditProfile from './SettingsEditProfile';\nimport SettingsDataStorage from './SettingsDataStorage';\nimport SettingsFolders from './folders/SettingsFolders';\nimport SettingsGeneral from './SettingsGeneral';\nimport SettingsGeneralBackground from './SettingsGeneralBackground';\nimport SettingsGeneralBackgroundColor from './SettingsGeneralBackgroundColor';\nimport SettingsNotifications from './SettingsNotifications';\nimport SettingsPrivacy from './SettingsPrivacy';\nimport SettingsLanguage from './SettingsLanguage';\nimport SettingsPrivacyVisibility from './SettingsPrivacyVisibility';\nimport SettingsActiveSessions from './SettingsActiveSessions';\nimport SettingsPrivacyBlockedUsers from './SettingsPrivacyBlockedUsers';\nimport SettingsTwoFa from './twoFa/SettingsTwoFa';\nimport SettingsPrivacyVisibilityExceptionList from './SettingsPrivacyVisibilityExceptionList';\nimport SettingsQuickReaction from './SettingsQuickReaction';\n\nimport './Settings.scss';\n\nconst TRANSITION_RENDER_COUNT = Object.keys(SettingsScreens).length / 2;\nconst TRANSITION_DURATION = 200;\n\nconst TWO_FA_SCREENS = [\n SettingsScreens.TwoFaDisabled,\n SettingsScreens.TwoFaNewPassword,\n SettingsScreens.TwoFaNewPasswordConfirm,\n SettingsScreens.TwoFaNewPasswordHint,\n SettingsScreens.TwoFaNewPasswordEmail,\n SettingsScreens.TwoFaNewPasswordEmailCode,\n SettingsScreens.TwoFaCongratulations,\n SettingsScreens.TwoFaEnabled,\n SettingsScreens.TwoFaChangePasswordCurrent,\n SettingsScreens.TwoFaChangePasswordNew,\n SettingsScreens.TwoFaChangePasswordConfirm,\n SettingsScreens.TwoFaChangePasswordHint,\n SettingsScreens.TwoFaTurnOff,\n SettingsScreens.TwoFaRecoveryEmailCurrentPassword,\n SettingsScreens.TwoFaRecoveryEmail,\n SettingsScreens.TwoFaRecoveryEmailCode,\n];\n\nconst FOLDERS_SCREENS = [\n SettingsScreens.Folders,\n SettingsScreens.FoldersCreateFolder,\n SettingsScreens.FoldersEditFolder,\n SettingsScreens.FoldersEditFolderFromChatList,\n SettingsScreens.FoldersIncludedChats,\n SettingsScreens.FoldersIncludedChatsFromChatList,\n SettingsScreens.FoldersExcludedChats,\n SettingsScreens.FoldersExcludedChatsFromChatList,\n];\n\nconst PRIVACY_SCREENS = [\n SettingsScreens.PrivacyBlockedUsers,\n SettingsScreens.ActiveSessions,\n];\n\nconst PRIVACY_PHONE_NUMBER_SCREENS = [\n SettingsScreens.PrivacyPhoneNumberAllowedContacts,\n SettingsScreens.PrivacyPhoneNumberDeniedContacts,\n];\n\nconst PRIVACY_LAST_SEEN_PHONE_SCREENS = [\n SettingsScreens.PrivacyLastSeenAllowedContacts,\n SettingsScreens.PrivacyLastSeenDeniedContacts,\n];\n\nconst PRIVACY_PROFILE_PHOTO_SCREENS = [\n SettingsScreens.PrivacyProfilePhotoAllowedContacts,\n SettingsScreens.PrivacyProfilePhotoDeniedContacts,\n];\n\nconst PRIVACY_FORWARDING_SCREENS = [\n SettingsScreens.PrivacyForwardingAllowedContacts,\n SettingsScreens.PrivacyForwardingDeniedContacts,\n];\n\nconst PRIVACY_GROUP_CHATS_SCREENS = [\n SettingsScreens.PrivacyGroupChatsAllowedContacts,\n SettingsScreens.PrivacyGroupChatsDeniedContacts,\n];\n\nexport type OwnProps = {\n isActive: boolean;\n currentScreen: SettingsScreens;\n foldersState: FoldersState;\n foldersDispatch: FolderEditDispatch;\n onScreenSelect: (screen: SettingsScreens) => void;\n shouldSkipTransition?: boolean;\n onReset: () => void;\n};\n\nconst Settings: FC = ({\n isActive,\n currentScreen,\n foldersState,\n foldersDispatch,\n onScreenSelect,\n onReset,\n shouldSkipTransition,\n}) => {\n const [twoFaState, twoFaDispatch] = useTwoFaReducer();\n\n const handleReset = useCallback(() => {\n if (\n currentScreen === SettingsScreens.FoldersCreateFolder\n || currentScreen === SettingsScreens.FoldersEditFolder\n || currentScreen === SettingsScreens.FoldersEditFolderFromChatList\n ) {\n setTimeout(() => {\n foldersDispatch({ type: 'reset' });\n }, TRANSITION_DURATION);\n }\n\n if (\n currentScreen === SettingsScreens.FoldersIncludedChats\n || currentScreen === SettingsScreens.FoldersExcludedChats\n ) {\n if (foldersState.mode === 'create') {\n onScreenSelect(SettingsScreens.FoldersCreateFolder);\n } else {\n onScreenSelect(SettingsScreens.FoldersEditFolder);\n }\n return;\n }\n\n onReset();\n }, [\n foldersState.mode, foldersDispatch,\n currentScreen, onReset, onScreenSelect,\n ]);\n\n const handleSaveFilter = useCallback(() => {\n foldersDispatch({ type: 'saveFilters' });\n handleReset();\n }, [foldersDispatch, handleReset]);\n\n function renderCurrentSectionContent(isScreenActive: boolean, screen: SettingsScreens) {\n const privacyAllowScreens: Record = {\n [SettingsScreens.PrivacyPhoneNumber]: PRIVACY_PHONE_NUMBER_SCREENS.includes(screen),\n [SettingsScreens.PrivacyLastSeen]: PRIVACY_LAST_SEEN_PHONE_SCREENS.includes(screen),\n [SettingsScreens.PrivacyProfilePhoto]: PRIVACY_PROFILE_PHOTO_SCREENS.includes(screen),\n [SettingsScreens.PrivacyForwarding]: PRIVACY_FORWARDING_SCREENS.includes(screen),\n [SettingsScreens.PrivacyGroupChats]: PRIVACY_GROUP_CHATS_SCREENS.includes(screen),\n };\n\n const isTwoFaScreen = TWO_FA_SCREENS.includes(screen);\n const isFoldersScreen = FOLDERS_SCREENS.includes(screen);\n const isPrivacyScreen = PRIVACY_SCREENS.includes(screen)\n || isTwoFaScreen\n || Object.keys(privacyAllowScreens).includes(screen.toString())\n || Object.values(privacyAllowScreens).find((key) => key === true);\n\n switch (currentScreen) {\n case SettingsScreens.Main:\n return (\n \n );\n case SettingsScreens.EditProfile:\n return (\n \n );\n case SettingsScreens.General:\n return (\n \n );\n case SettingsScreens.QuickReaction:\n return (\n \n );\n case SettingsScreens.Notifications:\n return (\n \n );\n case SettingsScreens.DataStorage:\n return (\n \n );\n case SettingsScreens.Privacy:\n return (\n \n );\n case SettingsScreens.Language:\n return (\n \n );\n case SettingsScreens.GeneralChatBackground:\n return (\n \n );\n case SettingsScreens.GeneralChatBackgroundColor:\n return (\n \n );\n case SettingsScreens.ActiveSessions:\n return (\n \n );\n case SettingsScreens.PrivacyBlockedUsers:\n return (\n \n );\n case SettingsScreens.PrivacyPhoneNumber:\n case SettingsScreens.PrivacyLastSeen:\n case SettingsScreens.PrivacyProfilePhoto:\n case SettingsScreens.PrivacyForwarding:\n case SettingsScreens.PrivacyGroupChats:\n return (\n \n );\n\n case SettingsScreens.PrivacyPhoneNumberAllowedContacts:\n case SettingsScreens.PrivacyLastSeenAllowedContacts:\n case SettingsScreens.PrivacyProfilePhotoAllowedContacts:\n case SettingsScreens.PrivacyForwardingAllowedContacts:\n case SettingsScreens.PrivacyGroupChatsAllowedContacts:\n return (\n \n );\n\n case SettingsScreens.PrivacyPhoneNumberDeniedContacts:\n case SettingsScreens.PrivacyLastSeenDeniedContacts:\n case SettingsScreens.PrivacyProfilePhotoDeniedContacts:\n case SettingsScreens.PrivacyForwardingDeniedContacts:\n case SettingsScreens.PrivacyGroupChatsDeniedContacts:\n return (\n \n );\n\n case SettingsScreens.Folders:\n case SettingsScreens.FoldersCreateFolder:\n case SettingsScreens.FoldersEditFolder:\n case SettingsScreens.FoldersEditFolderFromChatList:\n case SettingsScreens.FoldersIncludedChats:\n case SettingsScreens.FoldersIncludedChatsFromChatList:\n case SettingsScreens.FoldersExcludedChats:\n case SettingsScreens.FoldersExcludedChatsFromChatList:\n return (\n \n );\n\n case SettingsScreens.TwoFaDisabled:\n case SettingsScreens.TwoFaNewPassword:\n case SettingsScreens.TwoFaNewPasswordConfirm:\n case SettingsScreens.TwoFaNewPasswordHint:\n case SettingsScreens.TwoFaNewPasswordEmail:\n case SettingsScreens.TwoFaNewPasswordEmailCode:\n case SettingsScreens.TwoFaCongratulations:\n case SettingsScreens.TwoFaEnabled:\n case SettingsScreens.TwoFaChangePasswordCurrent:\n case SettingsScreens.TwoFaChangePasswordNew:\n case SettingsScreens.TwoFaChangePasswordConfirm:\n case SettingsScreens.TwoFaChangePasswordHint:\n case SettingsScreens.TwoFaTurnOff:\n case SettingsScreens.TwoFaRecoveryEmailCurrentPassword:\n case SettingsScreens.TwoFaRecoveryEmail:\n case SettingsScreens.TwoFaRecoveryEmailCode:\n return (\n \n );\n\n default:\n return undefined;\n }\n }\n\n function renderCurrentSection(isScreenActive: boolean, isFrom: boolean, currentKey: SettingsScreens) {\n return (\n <>\n \n {renderCurrentSectionContent(isScreenActive, currentKey)}\n \n );\n }\n\n return (\n \n {renderCurrentSection}\n \n );\n};\n\nexport default memo(Settings);\n","import React, {\n FC, useEffect, useCallback, useMemo, memo,\n} from '../../../lib/teact/teact';\nimport { getActions, withGlobal } from '../../../global';\n\nimport { ApiUser, ApiUserStatus } from '../../../api/types';\n\nimport { IS_SINGLE_COLUMN_LAYOUT } from '../../../util/environment';\nimport { throttle } from '../../../util/schedulers';\nimport { filterUsersByName, sortUserIds } from '../../../global/helpers';\nimport useInfiniteScroll from '../../../hooks/useInfiniteScroll';\nimport useHistoryBack from '../../../hooks/useHistoryBack';\nimport useLang from '../../../hooks/useLang';\n\nimport PrivateChatInfo from '../../common/PrivateChatInfo';\nimport InfiniteScroll from '../../ui/InfiniteScroll';\nimport ListItem from '../../ui/ListItem';\nimport Loading from '../../ui/Loading';\nimport FloatingActionButton from '../../ui/FloatingActionButton';\n\nexport type OwnProps = {\n filter: string;\n isActive: boolean;\n onReset: () => void;\n};\n\ntype StateProps = {\n usersById: Record;\n userStatusesById: Record;\n contactIds?: string[];\n serverTimeOffset: number;\n};\n\nconst runThrottled = throttle((cb) => cb(), 60000, true);\n\nconst ContactList: FC = ({\n isActive,\n filter,\n usersById,\n userStatusesById,\n contactIds,\n serverTimeOffset,\n onReset,\n}) => {\n const {\n loadContactList,\n openChat,\n openNewContactDialog,\n } = getActions();\n\n const lang = useLang();\n\n // Due to the parent Transition, this component never gets unmounted,\n // that's why we use throttled API call on every update.\n useEffect(() => {\n runThrottled(() => {\n loadContactList();\n });\n });\n\n useHistoryBack(isActive, onReset);\n\n const handleClick = useCallback((id: string) => {\n openChat({ id, shouldReplaceHistory: true });\n }, [openChat]);\n\n const listIds = useMemo(() => {\n if (!contactIds) {\n return undefined;\n }\n\n const filteredIds = filterUsersByName(contactIds, usersById, filter);\n\n return sortUserIds(filteredIds, usersById, userStatusesById, undefined, serverTimeOffset);\n }, [contactIds, filter, usersById, userStatusesById, serverTimeOffset]);\n\n const [viewportIds, getMore] = useInfiniteScroll(undefined, listIds, Boolean(filter));\n\n return (\n \n {viewportIds?.length ? (\n viewportIds.map((id) => (\n handleClick(id)}\n ripple={!IS_SINGLE_COLUMN_LAYOUT}\n >\n \n \n ))\n ) : viewportIds && !viewportIds.length ? (\n

\n {filter.length ? 'No contacts matched your search.' : 'Contact list is empty.'}\n

\n ) : (\n \n )}\n \n \n \n
\n );\n};\n\nexport default memo(withGlobal(\n (global): StateProps => {\n const { userIds: contactIds } = global.contactList || {};\n const { byId: usersById, statusesById: userStatusesById } = global.users;\n\n return {\n usersById,\n userStatusesById,\n contactIds,\n serverTimeOffset: global.serverTimeOffset,\n };\n },\n)(ContactList));\n","import React, {\n FC, useCallback, useEffect, useMemo, memo,\n} from '../../../lib/teact/teact';\nimport { getActions, getGlobal, withGlobal } from '../../../global';\n\nimport { ApiChat } from '../../../api/types';\n\nimport { unique } from '../../../util/iteratees';\nimport { throttle } from '../../../util/schedulers';\nimport { filterUsersByName, isUserBot, sortChatIds } from '../../../global/helpers';\nimport useLang from '../../../hooks/useLang';\nimport useHistoryBack from '../../../hooks/useHistoryBack';\n\nimport Picker from '../../common/Picker';\nimport FloatingActionButton from '../../ui/FloatingActionButton';\nimport Button from '../../ui/Button';\n\nexport type OwnProps = {\n isChannel?: boolean;\n isActive: boolean;\n selectedMemberIds: string[];\n onSelectedMemberIdsChange: (ids: string[]) => void;\n onNextStep: () => void;\n onReset: () => void;\n};\n\ntype StateProps = {\n chatsById: Record;\n localContactIds?: string[];\n searchQuery?: string;\n isSearching?: boolean;\n localUserIds?: string[];\n globalUserIds?: string[];\n};\n\nconst runThrottled = throttle((cb) => cb(), 60000, true);\n\nconst NewChatStep1: FC = ({\n isChannel,\n isActive,\n selectedMemberIds,\n onSelectedMemberIdsChange,\n onNextStep,\n onReset,\n chatsById,\n localContactIds,\n searchQuery,\n isSearching,\n localUserIds,\n globalUserIds,\n}) => {\n const {\n loadContactList,\n setGlobalSearchQuery,\n } = getActions();\n\n // Due to the parent Transition, this component never gets unmounted,\n // that's why we use throttled API call on every update.\n useEffect(() => {\n runThrottled(() => {\n loadContactList();\n });\n });\n\n const lang = useLang();\n\n useHistoryBack(isActive, onReset);\n\n const handleFilterChange = useCallback((query: string) => {\n setGlobalSearchQuery({ query });\n }, [setGlobalSearchQuery]);\n\n const displayedIds = useMemo(() => {\n // No need for expensive global updates on users, so we avoid them\n const usersById = getGlobal().users.byId;\n const foundContactIds = localContactIds ? filterUsersByName(localContactIds, usersById, searchQuery) : [];\n\n return sortChatIds(\n unique([\n ...foundContactIds,\n ...(localUserIds || []),\n ...(globalUserIds || []),\n ]).filter((contactId) => {\n const user = usersById[contactId];\n if (!user) {\n return true;\n }\n\n return !user.isSelf && (user.canBeInvitedToGroup || !isUserBot(user));\n }),\n chatsById,\n false,\n selectedMemberIds,\n );\n }, [localContactIds, chatsById, searchQuery, localUserIds, globalUserIds, selectedMemberIds]);\n\n const handleNextStep = useCallback(() => {\n if (selectedMemberIds.length || isChannel) {\n setGlobalSearchQuery({ query: '' });\n onNextStep();\n }\n }, [selectedMemberIds.length, isChannel, setGlobalSearchQuery, onNextStep]);\n\n return (\n
\n
\n \n \n \n

{lang('GroupAddMembers')}

\n
\n
\n \n\n \n \n \n
\n
\n );\n};\n\nexport default memo(withGlobal(\n (global): StateProps => {\n const { userIds: localContactIds } = global.contactList || {};\n const { byId: chatsById } = global.chats;\n\n const {\n query: searchQuery,\n fetchingStatus,\n globalResults,\n localResults,\n } = global.globalSearch;\n const { userIds: globalUserIds } = globalResults || {};\n const { userIds: localUserIds } = localResults || {};\n\n return {\n chatsById,\n localContactIds,\n searchQuery,\n isSearching: fetchingStatus?.chats,\n globalUserIds,\n localUserIds,\n };\n },\n)(NewChatStep1));\n","import React, {\n FC, useState, useCallback, useEffect, memo,\n} from '../../../lib/teact/teact';\nimport { getActions, withGlobal } from '../../../global';\n\nimport { ChatCreationProgress } from '../../../types';\n\nimport useLang from '../../../hooks/useLang';\nimport useHistoryBack from '../../../hooks/useHistoryBack';\n\nimport InputText from '../../ui/InputText';\nimport FloatingActionButton from '../../ui/FloatingActionButton';\nimport Spinner from '../../ui/Spinner';\nimport AvatarEditable from '../../ui/AvatarEditable';\nimport Button from '../../ui/Button';\nimport ListItem from '../../ui/ListItem';\nimport PrivateChatInfo from '../../common/PrivateChatInfo';\n\nexport type OwnProps = {\n isChannel?: boolean;\n isActive: boolean;\n memberIds: string[];\n onReset: (forceReturnToChatList?: boolean) => void;\n};\n\ntype StateProps = {\n creationProgress?: ChatCreationProgress;\n creationError?: string;\n};\n\n// TODO @implement\nconst MAX_USERS_FOR_LEGACY_CHAT = 199; // Accounting for current user\n\nconst NewChatStep2: FC = ({\n isChannel,\n isActive,\n memberIds,\n onReset,\n creationProgress,\n creationError,\n}) => {\n const {\n createGroupChat,\n createChannel,\n } = getActions();\n\n const lang = useLang();\n\n useHistoryBack(isActive, onReset);\n\n const [title, setTitle] = useState('');\n const [about, setAbout] = useState('');\n const [photo, setPhoto] = useState();\n const [error, setError] = useState();\n\n const chatTitleEmptyError = 'Chat title can\\'t be empty';\n const channelTitleEmptyError = 'Channel title can\\'t be empty';\n const chatTooManyUsersError = 'Sorry, creating supergroups is not yet supported';\n\n const isLoading = creationProgress === ChatCreationProgress.InProgress;\n\n const handleTitleChange = useCallback((e: React.ChangeEvent) => {\n const { value } = e.currentTarget;\n const newValue = value.replace(/^\\s+/, '');\n\n setTitle(newValue);\n\n if (newValue !== value) {\n e.currentTarget.value = newValue;\n }\n }, []);\n\n const handleDescriptionChange = useCallback((e: React.ChangeEvent) => {\n setAbout(e.currentTarget.value);\n }, []);\n\n const handleCreateGroup = useCallback(() => {\n if (!title.length) {\n setError(chatTitleEmptyError);\n return;\n }\n\n if (memberIds.length > MAX_USERS_FOR_LEGACY_CHAT) {\n setError(chatTooManyUsersError);\n return;\n }\n\n createGroupChat({\n title,\n photo,\n memberIds,\n });\n }, [title, memberIds, createGroupChat, photo, chatTitleEmptyError, chatTooManyUsersError]);\n\n const handleCreateChannel = useCallback(() => {\n if (!title.length) {\n setError(channelTitleEmptyError);\n return;\n }\n\n createChannel({\n title,\n about,\n photo,\n memberIds,\n });\n }, [title, createChannel, about, photo, memberIds, channelTitleEmptyError]);\n\n useEffect(() => {\n if (creationProgress === ChatCreationProgress.Complete) {\n onReset(true);\n }\n }, [creationProgress, onReset]);\n\n const renderedError = (creationError && lang(creationError)) || (\n error !== chatTitleEmptyError && error !== channelTitleEmptyError\n ? error\n : undefined\n );\n\n return (\n
\n
\n onReset()}\n ariaLabel=\"Return to member selection\"\n >\n \n \n

{lang(isChannel ? 'NewChannel' : 'NewGroup')}

\n
\n
\n \n \n {isChannel && (\n <>\n \n

{lang('DescriptionInfo')}

\n \n )}\n\n {renderedError && (\n

{renderedError}

\n )}\n\n {memberIds.length > 0 && (\n <>\n

{lang('GroupInfo.ParticipantCount', memberIds.length, 'i')}

\n\n
\n {memberIds.map((id) => (\n \n \n \n ))}\n
\n \n )}\n
\n\n \n {isLoading ? (\n \n ) : (\n \n )}\n \n
\n );\n};\n\nexport default memo(withGlobal(\n (global): StateProps => {\n const {\n progress: creationProgress,\n error: creationError,\n } = global.chatCreation || {};\n\n return {\n creationProgress,\n creationError,\n };\n },\n)(NewChatStep2));\n","import React, {\n FC, memo, useCallback, useState,\n} from '../../../lib/teact/teact';\n\nimport { LeftColumnContent } from '../../../types';\n\nimport { LAYERS_ANIMATION_NAME } from '../../../util/environment';\n\nimport Transition from '../../ui/Transition';\nimport NewChatStep1 from './NewChatStep1';\nimport NewChatStep2 from './NewChatStep2';\n\nimport './NewChat.scss';\n\nexport type OwnProps = {\n isActive: boolean;\n isChannel?: boolean;\n content: LeftColumnContent;\n onContentChange: (content: LeftColumnContent) => void;\n onReset: () => void;\n};\n\nconst RENDER_COUNT = Object.keys(LeftColumnContent).length / 2;\n\nconst NewChat: FC = ({\n isActive,\n isChannel = false,\n content,\n onContentChange,\n onReset,\n}) => {\n const [newChatMemberIds, setNewChatMemberIds] = useState([]);\n\n const handleNextStep = useCallback(() => {\n onContentChange(isChannel ? LeftColumnContent.NewChannelStep2 : LeftColumnContent.NewGroupStep2);\n }, [isChannel, onContentChange]);\n\n return (\n \n {(isStepActive) => {\n switch (content) {\n case LeftColumnContent.NewChannelStep1:\n case LeftColumnContent.NewGroupStep1:\n return (\n \n );\n case LeftColumnContent.NewChannelStep2:\n case LeftColumnContent.NewGroupStep2:\n return (\n \n );\n default:\n return undefined;\n }\n }}\n \n );\n};\n\nexport default memo(NewChat);\n","import React, { FC, memo } from '../../lib/teact/teact';\n\nimport useLang from '../../hooks/useLang';\nimport useHistoryBack from '../../hooks/useHistoryBack';\n\nimport Button from '../ui/Button';\nimport ChatList from './main/ChatList';\nimport { LeftColumnContent } from '../../types';\n\nimport './ArchivedChats.scss';\n\nexport type OwnProps = {\n isActive: boolean;\n onReset: () => void;\n onContentChange: (content: LeftColumnContent) => void;\n};\n\nconst ArchivedChats: FC = ({ isActive, onReset, onContentChange }) => {\n const lang = useLang();\n\n useHistoryBack(isActive, onReset, onContentChange, LeftColumnContent.Archived);\n\n return (\n
\n
\n \n \n \n

{lang('ArchivedChats')}

\n
\n \n
\n );\n};\n\nexport default memo(ArchivedChats);\n","import React, {\n FC, useCallback, memo, useMemo, useState,\n} from '../../lib/teact/teact';\nimport { getActions, withGlobal } from '../../global';\n\nimport { ApiChatFolder } from '../../api/types';\n\nimport useLang from '../../hooks/useLang';\n\nimport Modal from '../ui/Modal';\nimport Button from '../ui/Button';\nimport CheckboxGroup from '../ui/CheckboxGroup';\n\nexport type OwnProps = {\n isOpen: boolean;\n chatId: string;\n onClose: () => void;\n onCloseAnimationEnd?: () => void;\n};\n\ntype StateProps = {\n foldersById?: Record;\n folderOrderedIds?: number[];\n};\n\nconst ChatFolderModal: FC = ({\n isOpen,\n chatId,\n foldersById,\n folderOrderedIds,\n onClose,\n onCloseAnimationEnd,\n}) => {\n const { editChatFolders } = getActions();\n\n const lang = useLang();\n\n const initialSelectedFolderIds = useMemo(() => {\n if (!foldersById) {\n return [];\n }\n\n return Object.keys(foldersById).reduce((result, folderId) => {\n const { includedChatIds, pinnedChatIds } = foldersById[Number(folderId)];\n if (includedChatIds.includes(chatId) || pinnedChatIds?.includes(chatId)) {\n result.push(folderId);\n }\n\n return result;\n }, [] as string[]);\n }, [chatId, foldersById]);\n\n const [selectedFolderIds, setSelectedFolderIds] = useState(initialSelectedFolderIds);\n\n const folders = useMemo(() => {\n return folderOrderedIds?.map((folderId) => ({\n label: foldersById ? foldersById[folderId].title : '',\n value: String(folderId),\n })) || [];\n }, [folderOrderedIds, foldersById]);\n\n const handleSubmit = useCallback(() => {\n const idsToRemove = initialSelectedFolderIds.filter((id) => !selectedFolderIds.includes(id)).map(Number);\n const idsToAdd = selectedFolderIds.filter((id) => !initialSelectedFolderIds.includes(id)).map(Number);\n\n editChatFolders({ chatId, idsToRemove, idsToAdd });\n onClose();\n }, [chatId, editChatFolders, initialSelectedFolderIds, onClose, selectedFolderIds]);\n\n if (!foldersById || !folderOrderedIds) {\n return undefined;\n }\n\n return (\n \n \n \n \n \n );\n};\n\nexport default memo(withGlobal(\n (global): StateProps => {\n const { byId: foldersById, orderedIds: folderOrderedIds } = global.chatFolders;\n\n return {\n foldersById,\n folderOrderedIds,\n };\n },\n)(ChatFolderModal));\n","import { ApiMediaFormat, ApiMessage } from '../../../../api/types';\n\nimport * as mediaLoader from '../../../../util/mediaLoader';\nimport {\n getMessageMediaHash,\n getMessagePhoto,\n getMessageText,\n getMessageTextWithSpoilers,\n getMessageWebPagePhoto,\n getMessageWebPageVideo,\n hasMessageLocalBlobUrl,\n} from '../../../../global/helpers';\nimport { CLIPBOARD_ITEM_SUPPORTED, copyImageToClipboard, copyTextToClipboard } from '../../../../util/clipboard';\nimport getMessageIdsForSelectedText from '../../../../util/getMessageIdsForSelectedText';\n\ntype ICopyOptions = {\n label: string;\n icon: string;\n handler: () => void;\n}[];\n\nexport function getMessageCopyOptions(\n message: ApiMessage,\n afterEffect?: () => void,\n onCopyLink?: () => void,\n onCopyMessages?: (messageIds: number[]) => void,\n): ICopyOptions {\n const options: ICopyOptions = [];\n const text = getMessageText(message);\n const photo = getMessagePhoto(message)\n || (!getMessageWebPageVideo(message) ? getMessageWebPagePhoto(message) : undefined);\n const mediaHash = getMessageMediaHash(message, 'inline');\n const canImageBeCopied = photo && (mediaHash || hasMessageLocalBlobUrl(message)) && CLIPBOARD_ITEM_SUPPORTED;\n const selection = window.getSelection();\n\n if (canImageBeCopied) {\n options.push({\n label: 'lng_context_copy_image',\n icon: 'copy-media',\n handler: () => {\n Promise.resolve(mediaHash ? mediaLoader.fetch(mediaHash, ApiMediaFormat.BlobUrl) : photo!.blobUrl)\n .then(copyImageToClipboard);\n\n if (afterEffect) {\n afterEffect();\n }\n },\n });\n }\n\n if (text) {\n // Detect if the user has selection in the current message\n const hasSelection = Boolean((\n selection?.anchorNode?.parentNode\n && (selection.anchorNode.parentNode as HTMLElement).closest('.Message .content-inner')\n && selection.toString().replace(/(?:\\r\\n|\\r|\\n)/g, '') !== ''\n ));\n\n options.push({\n label: getCopyLabel(hasSelection),\n icon: 'copy',\n handler: () => {\n const messageIds = getMessageIdsForSelectedText();\n if (messageIds?.length && onCopyMessages) {\n onCopyMessages(messageIds);\n } else {\n const clipboardText = hasSelection && selection ? selection.toString() : getMessageTextWithSpoilers(message)!;\n copyTextToClipboard(clipboardText);\n }\n\n if (afterEffect) {\n afterEffect();\n }\n },\n });\n }\n\n if (onCopyLink) {\n options.push({\n label: 'lng_context_copy_message_link',\n icon: 'link',\n handler: () => {\n onCopyLink();\n\n if (afterEffect) {\n afterEffect();\n }\n },\n });\n }\n\n return options;\n}\n\nfunction getCopyLabel(hasSelection: boolean): string {\n if (hasSelection) {\n return 'lng_context_copy_selected';\n }\n return 'lng_context_copy_text';\n}\n","let scrollLockEl: HTMLElement | null | undefined;\nlet excludedClosestSelector: string | undefined;\n\nconst IGNORED_KEYS: Record = {\n Down: true,\n ArrowDown: true,\n Up: true,\n ArrowUp: true,\n Left: true,\n ArrowLeft: true,\n Right: true,\n ArrowRight: true,\n ' ': true,\n PageUp: true,\n PageDown: true,\n End: true,\n Home: true,\n Tab: true,\n};\n\nfunction isTextBox(target: EventTarget | null) {\n if (!target || !(target instanceof HTMLElement)) return false;\n const element = target;\n const tagName = element.tagName.toLowerCase();\n if (tagName === 'textarea') return true;\n if (tagName !== 'input') return false;\n const type = element.getAttribute('type');\n if (!type) return false;\n const inputTypes = [\n 'text', 'password', 'number', 'email', 'tel', 'url',\n 'search', 'date', 'datetime', 'datetime-local', 'time', 'month', 'week',\n ];\n return inputTypes.indexOf(type.toLowerCase()) > -1;\n}\n\nexport const getTouchY = (e: WheelEvent | TouchEvent | React.WheelEvent | React.TouchEvent) => {\n return ('changedTouches' in e ? e.changedTouches[0].clientY : 0);\n};\n\nconst preventDefault = (e: WheelEvent | TouchEvent) => {\n const deltaY = 'deltaY' in e ? e.deltaY : getTouchY(e);\n\n if (\n !scrollLockEl\n // Allow overlay scrolling\n || !scrollLockEl.contains(e.target as HTMLElement)\n // Prevent top overscroll\n || (scrollLockEl.scrollTop <= 0 && deltaY <= 0)\n // Prevent bottom overscroll\n || (scrollLockEl.scrollTop >= (scrollLockEl.scrollHeight - scrollLockEl.offsetHeight) && deltaY >= 0)\n ) {\n if (excludedClosestSelector && (e.target as HTMLElement).closest(excludedClosestSelector)) return;\n e.preventDefault();\n }\n};\n\nfunction preventDefaultForScrollKeys(e: KeyboardEvent) {\n if (IGNORED_KEYS[e.key] && !isTextBox(e.target)) {\n e.preventDefault();\n }\n}\n\nexport function disableScrolling(el?: HTMLElement | null, _excludedClosestSelector?: string) {\n scrollLockEl = el;\n excludedClosestSelector = _excludedClosestSelector;\n // Disable scrolling in Chrome\n document.addEventListener('wheel', preventDefault, { passive: false });\n document.addEventListener('touchmove', preventDefault, { passive: false });\n document.onkeydown = preventDefaultForScrollKeys;\n}\n\nexport function enableScrolling() {\n scrollLockEl = undefined;\n excludedClosestSelector = undefined;\n document.removeEventListener('wheel', preventDefault); // Enable scrolling in Chrome\n document.removeEventListener('touchmove', preventDefault);\n // eslint-disable-next-line no-null/no-null\n document.onkeydown = null;\n}\n","import React, {\n FC, memo, useRef,\n} from '../../../lib/teact/teact';\n\nimport { ApiAvailableReaction, ApiMediaFormat } from '../../../api/types';\n\nimport useMedia from '../../../hooks/useMedia';\nimport useFlag from '../../../hooks/useFlag';\nimport useShowTransition from '../../../hooks/useShowTransition';\nimport { createClassNameBuilder } from '../../../util/buildClassName';\nimport { IS_COMPACT_MENU } from '../../../util/environment';\n\nimport AnimatedSticker from '../../common/AnimatedSticker';\n\nimport './ReactionSelectorReaction.scss';\n\nconst REACTION_SIZE = IS_COMPACT_MENU ? 24 : 32;\n\ntype OwnProps = {\n reaction: ApiAvailableReaction;\n previewIndex: number;\n isReady?: boolean;\n onSendReaction: (reaction: string, x: number, y: number) => void;\n};\n\nconst cn = createClassNameBuilder('ReactionSelectorReaction');\n\nconst ReactionSelectorReaction: FC = ({\n reaction, previewIndex, onSendReaction, isReady,\n}) => {\n // eslint-disable-next-line no-null/no-null\n const containerRef = useRef(null);\n\n const mediaData = useMedia(`document${reaction.selectAnimation?.id}`, !isReady, ApiMediaFormat.Lottie);\n\n const [isActivated, activate, deactivate] = useFlag();\n const [isAnimationLoaded, markAnimationLoaded] = useFlag();\n\n const shouldRenderAnimated = Boolean(isReady && mediaData);\n const { transitionClassNames: animatedClassNames } = useShowTransition(shouldRenderAnimated);\n const { shouldRender: shouldRenderStatic, transitionClassNames: staticClassNames } = useShowTransition(\n !isReady || !isAnimationLoaded, undefined, true,\n );\n\n function handleClick() {\n if (!containerRef.current) return;\n const { x, y } = containerRef.current.getBoundingClientRect();\n\n onSendReaction(reaction.reaction, x, y);\n }\n\n return (\n \n {shouldRenderStatic && (\n \n )}\n {shouldRenderAnimated && (\n \n )}\n
\n );\n};\n\nexport default memo(ReactionSelectorReaction);\n","import React, {\n FC, memo, useLayoutEffect, useRef,\n} from '../../../lib/teact/teact';\n\nimport { ApiAvailableReaction } from '../../../api/types';\n\nimport useHorizontalScroll from '../../../hooks/useHorizontalScroll';\nimport useFlag from '../../../hooks/useFlag';\nimport { getTouchY } from '../../../util/scrollLock';\nimport { createClassNameBuilder } from '../../../util/buildClassName';\nimport { IS_COMPACT_MENU } from '../../../util/environment';\n\nimport ReactionSelectorReaction from './ReactionSelectorReaction';\n\nimport './ReactionSelector.scss';\n\ntype OwnProps = {\n enabledReactions?: string[];\n onSendReaction: (reaction: string, x: number, y: number) => void;\n isPrivate?: boolean;\n availableReactions?: ApiAvailableReaction[];\n isReady?: boolean;\n};\n\nconst cn = createClassNameBuilder('ReactionSelector');\n\nconst ReactionSelector: FC = ({\n availableReactions,\n enabledReactions,\n onSendReaction,\n isPrivate,\n isReady,\n}) => {\n // eslint-disable-next-line no-null/no-null\n const itemsScrollRef = useRef(null);\n const [isHorizontalScrollEnabled, enableHorizontalScroll] = useFlag(false);\n useHorizontalScroll(itemsScrollRef.current, !isHorizontalScrollEnabled);\n\n useLayoutEffect(() => {\n enableHorizontalScroll();\n }, [enableHorizontalScroll]);\n\n const handleWheel = (e: React.WheelEvent | React.TouchEvent) => {\n if (!itemsScrollRef) return;\n const deltaY = 'deltaY' in e ? e.deltaY : getTouchY(e);\n\n if (deltaY) {\n e.preventDefault();\n }\n };\n\n if ((!isPrivate && !enabledReactions?.length) || !availableReactions) return undefined;\n\n return (\n
\n
\n
\n
\n
\n {availableReactions?.map((reaction, i) => {\n if (reaction.isInactive\n || (!isPrivate && (!enabledReactions || !enabledReactions.includes(reaction.reaction)))) return undefined;\n return (\n \n );\n })}\n
\n
\n
\n );\n};\n\nexport default memo(ReactionSelector);\n","import React, {\n FC, memo, useCallback, useEffect, useRef,\n} from '../../../lib/teact/teact';\n\nimport { ApiAvailableReaction, ApiMessage, ApiUser } from '../../../api/types';\nimport { IAnchorPosition } from '../../../types';\n\nimport { getMessageCopyOptions } from './helpers/copyOptions';\nimport { disableScrolling, enableScrolling } from '../../../util/scrollLock';\nimport { getUserFullName } from '../../../global/helpers';\nimport useContextMenuPosition from '../../../hooks/useContextMenuPosition';\nimport useLang from '../../../hooks/useLang';\nimport buildClassName from '../../../util/buildClassName';\nimport useFlag from '../../../hooks/useFlag';\nimport { IS_SINGLE_COLUMN_LAYOUT } from '../../../util/environment';\n\nimport Menu from '../../ui/Menu';\nimport MenuItem from '../../ui/MenuItem';\nimport Avatar from '../../common/Avatar';\nimport ReactionSelector from './ReactionSelector';\n\nimport './MessageContextMenu.scss';\n\ntype OwnProps = {\n availableReactions?: ApiAvailableReaction[];\n isOpen: boolean;\n anchor: IAnchorPosition;\n message: ApiMessage;\n canSendNow?: boolean;\n enabledReactions?: string[];\n canReschedule?: boolean;\n canReply?: boolean;\n canPin?: boolean;\n canUnpin?: boolean;\n canDelete?: boolean;\n canReport?: boolean;\n canShowReactionsCount?: boolean;\n canShowReactionList?: boolean;\n canRemoveReaction?: boolean;\n canEdit?: boolean;\n canForward?: boolean;\n canFaveSticker?: boolean;\n canUnfaveSticker?: boolean;\n canCopy?: boolean;\n canCopyLink?: boolean;\n canSelect?: boolean;\n isPrivate?: boolean;\n canDownload?: boolean;\n canSaveGif?: boolean;\n isDownloading?: boolean;\n canShowSeenBy?: boolean;\n seenByRecentUsers?: ApiUser[];\n onReply: () => void;\n onEdit: () => void;\n onPin: () => void;\n onUnpin: () => void;\n onForward: () => void;\n onDelete: () => void;\n onReport: () => void;\n onFaveSticker: () => void;\n onUnfaveSticker: () => void;\n onSelect: () => void;\n onSend: () => void;\n onReschedule: () => void;\n onClose: () => void;\n onCloseAnimationEnd?: () => void;\n onCopyLink?: () => void;\n onCopyMessages?: (messageIds: number[]) => void;\n onDownload?: () => void;\n onSaveGif?: () => void;\n onShowSeenBy?: () => void;\n onShowReactors?: () => void;\n onSendReaction: (reaction: string | undefined, x: number, y: number) => void;\n};\n\nconst SCROLLBAR_WIDTH = 10;\nconst REACTION_BUBBLE_EXTRA_WIDTH = 32;\nconst ANIMATION_DURATION = 200;\n\nconst MessageContextMenu: FC = ({\n availableReactions,\n isOpen,\n message,\n isPrivate,\n enabledReactions,\n anchor,\n canSendNow,\n canReschedule,\n canReply,\n canEdit,\n canPin,\n canUnpin,\n canDelete,\n canReport,\n canForward,\n canFaveSticker,\n canUnfaveSticker,\n canCopy,\n canCopyLink,\n canSelect,\n canDownload,\n canSaveGif,\n isDownloading,\n canShowSeenBy,\n canShowReactionsCount,\n canRemoveReaction,\n canShowReactionList,\n seenByRecentUsers,\n onReply,\n onEdit,\n onPin,\n onUnpin,\n onForward,\n onDelete,\n onReport,\n onFaveSticker,\n onUnfaveSticker,\n onSelect,\n onSend,\n onReschedule,\n onClose,\n onCloseAnimationEnd,\n onCopyLink,\n onDownload,\n onSaveGif,\n onShowSeenBy,\n onShowReactors,\n onSendReaction,\n onCopyMessages,\n}) => {\n // eslint-disable-next-line no-null/no-null\n const menuRef = useRef(null);\n // eslint-disable-next-line no-null/no-null\n const scrollableRef = useRef(null);\n const copyOptions = getMessageCopyOptions(message, onClose, canCopyLink ? onCopyLink : undefined, onCopyMessages);\n const noReactions = !isPrivate && !enabledReactions?.length;\n const withReactions = canShowReactionList && !noReactions;\n\n const [isReady, markIsReady, unmarkIsReady] = useFlag();\n\n const getTriggerElement = useCallback(() => {\n return document.querySelector(`.Transition__slide--active > .MessageList div[data-message-id=\"${message.id}\"]`);\n }, [message.id]);\n\n const getRootElement = useCallback(\n () => document.querySelector('.Transition__slide--active > .MessageList'),\n [],\n );\n\n const getMenuElement = useCallback(\n () => document.querySelector('.MessageContextMenu .bubble'),\n [],\n );\n\n const getLayout = useCallback(() => {\n const extraHeightAudioPlayer = (IS_SINGLE_COLUMN_LAYOUT\n && (document.querySelector('.AudioPlayer-content'))?.offsetHeight) || 0;\n const pinnedElement = document.querySelector('.HeaderPinnedMessage-wrapper');\n const extraHeightPinned = (((IS_SINGLE_COLUMN_LAYOUT && !extraHeightAudioPlayer)\n || (!IS_SINGLE_COLUMN_LAYOUT && pinnedElement?.classList.contains('full-width')))\n && pinnedElement?.offsetHeight) || 0;\n\n return {\n extraPaddingX: SCROLLBAR_WIDTH,\n extraTopPadding: (document.querySelector('.MiddleHeader')!).offsetHeight,\n marginSides: withReactions ? REACTION_BUBBLE_EXTRA_WIDTH : undefined,\n extraMarginTop: extraHeightPinned + extraHeightAudioPlayer,\n };\n }, [withReactions]);\n\n const handleRemoveReaction = useCallback(() => {\n onSendReaction(undefined, 0, 0);\n }, [onSendReaction]);\n\n useEffect(() => {\n if (!isOpen) {\n unmarkIsReady();\n return;\n }\n\n setTimeout(() => {\n markIsReady();\n }, ANIMATION_DURATION);\n }, [isOpen, markIsReady, unmarkIsReady]);\n\n const {\n positionX, positionY, transformOriginX, transformOriginY, style, menuStyle, withScroll,\n } = useContextMenuPosition(anchor, getTriggerElement, getRootElement, getMenuElement, getLayout);\n\n useEffect(() => {\n disableScrolling(withScroll ? scrollableRef.current : undefined, '.ReactionSelector');\n\n return enableScrolling;\n }, [withScroll]);\n\n const lang = useLang();\n\n return (\n \n {canShowReactionList && (\n \n )}\n\n \n {canRemoveReaction && Remove Reaction}\n {canSendNow && {lang('MessageScheduleSend')}}\n {canReschedule && (\n {lang('MessageScheduleEditTime')}\n )}\n {canReply && {lang('Reply')}}\n {canEdit && {lang('Edit')}}\n {canFaveSticker && (\n {lang('AddToFavorites')}\n )}\n {canUnfaveSticker && (\n {lang('Stickers.RemoveFromFavorites')}\n )}\n {canCopy && copyOptions.map((option) => (\n {lang(option.label)}\n ))}\n {canPin && {lang('DialogPin')}}\n {canUnpin && {lang('DialogUnpin')}}\n {canSaveGif && {lang('lng_context_save_gif')}}\n {canDownload && (\n \n {isDownloading ? lang('lng_context_cancel_download') : lang('lng_media_download')}\n \n )}\n {canForward && {lang('Forward')}}\n {canSelect && {lang('Common.Select')}}\n {canReport && {lang('lng_context_report_msg')}}\n {(canShowSeenBy || canShowReactionsCount) && (\n \n \n {canShowReactionsCount && message.reactors?.count ? (\n canShowSeenBy && message.seenByUserIds?.length\n ? lang(\n 'Chat.OutgoingContextMixedReactionCount',\n [message.reactors.count, message.seenByUserIds.length],\n )\n : lang('Chat.ContextReactionCount', message.reactors.count, 'i')\n ) : (\n message.seenByUserIds?.length === 1 && seenByRecentUsers\n ? getUserFullName(seenByRecentUsers[0])\n : (message.seenByUserIds?.length\n ? lang('Conversation.ContextMenuSeen', message.seenByUserIds.length, 'i')\n : lang('Conversation.ContextMenuNoViews')\n )\n )}\n \n
\n {seenByRecentUsers?.map((user) => (\n \n ))}\n
\n \n )}\n {canDelete && {lang('Delete')}}\n
\n \n );\n};\n\nexport default memo(MessageContextMenu);\n","import React, {\n FC, memo, useCallback, useEffect, useMemo, useState,\n} from '../../../lib/teact/teact';\nimport { getActions, getGlobal, withGlobal } from '../../../global';\n\nimport { MessageListType } from '../../../global/types';\nimport { ApiAvailableReaction, ApiMessage } from '../../../api/types';\nimport { IAlbum, IAnchorPosition } from '../../../types';\nimport {\n selectActiveDownloadIds,\n selectAllowedMessageActions,\n selectChat,\n selectCurrentMessageList,\n selectIsMessageProtected,\n} from '../../../global/selectors';\nimport {\n isActionMessage, isChatChannel,\n isChatGroup, isOwnMessage, areReactionsEmpty, isUserId, isMessageLocal, getMessageVideo,\n} from '../../../global/helpers';\nimport { SERVICE_NOTIFICATIONS_USER_ID } from '../../../config';\nimport { getDayStartAt } from '../../../util/dateFormat';\nimport { copyTextToClipboard } from '../../../util/clipboard';\nimport useShowTransition from '../../../hooks/useShowTransition';\nimport useFlag from '../../../hooks/useFlag';\nimport { REM } from '../../common/helpers/mediaDimensions';\n\nimport DeleteMessageModal from '../../common/DeleteMessageModal';\nimport ReportMessageModal from '../../common/ReportMessageModal';\nimport PinMessageModal from '../../common/PinMessageModal';\nimport MessageContextMenu from './MessageContextMenu';\nimport CalendarModal from '../../common/CalendarModal';\nimport buildClassName from '../../../util/buildClassName';\n\nconst START_SIZE = 2 * REM;\n\nexport type OwnProps = {\n isOpen: boolean;\n chatUsername?: string;\n message: ApiMessage;\n album?: IAlbum;\n anchor: IAnchorPosition;\n messageListType: MessageListType;\n onClose: () => void;\n onCloseAnimationEnd: () => void;\n};\n\ntype StateProps = {\n availableReactions?: ApiAvailableReaction[];\n noOptions?: boolean;\n canSendNow?: boolean;\n canReschedule?: boolean;\n canReply?: boolean;\n canPin?: boolean;\n canShowReactionsCount?: boolean;\n canShowReactionList?: boolean;\n canRemoveReaction?: boolean;\n canUnpin?: boolean;\n canDelete?: boolean;\n canReport?: boolean;\n canEdit?: boolean;\n canForward?: boolean;\n canFaveSticker?: boolean;\n canUnfaveSticker?: boolean;\n canCopy?: boolean;\n isPrivate?: boolean;\n hasFullInfo?: boolean;\n canCopyLink?: boolean;\n canSelect?: boolean;\n canDownload?: boolean;\n canSaveGif?: boolean;\n activeDownloads: number[];\n canShowSeenBy?: boolean;\n enabledReactions?: string[];\n};\n\nconst ContextMenuContainer: FC = ({\n availableReactions,\n isOpen,\n messageListType,\n chatUsername,\n message,\n album,\n anchor,\n onClose,\n onCloseAnimationEnd,\n noOptions,\n canSendNow,\n hasFullInfo,\n canReschedule,\n canReply,\n canPin,\n canUnpin,\n canDelete,\n canReport,\n canShowReactionsCount,\n canShowReactionList,\n canRemoveReaction,\n canEdit,\n enabledReactions,\n isPrivate,\n canForward,\n canFaveSticker,\n canUnfaveSticker,\n canCopy,\n canCopyLink,\n canSelect,\n canDownload,\n canSaveGif,\n activeDownloads,\n canShowSeenBy,\n}) => {\n const {\n setReplyingToId,\n setEditingId,\n pinMessage,\n openForwardMenu,\n faveSticker,\n unfaveSticker,\n toggleMessageSelection,\n sendScheduledMessages,\n rescheduleMessage,\n downloadMessageMedia,\n cancelMessageMediaDownload,\n loadSeenBy,\n openSeenByModal,\n sendReaction,\n openReactorListModal,\n loadFullChat,\n loadReactors,\n copyMessagesByIds,\n saveGif,\n } = getActions();\n\n const { transitionClassNames } = useShowTransition(isOpen, onCloseAnimationEnd, undefined, false);\n const [isMenuOpen, setIsMenuOpen] = useState(true);\n const [isDeleteModalOpen, setIsDeleteModalOpen] = useState(false);\n const [isReportModalOpen, setIsReportModalOpen] = useState(false);\n const [isPinModalOpen, setIsPinModalOpen] = useState(false);\n const [isCalendarOpen, openCalendar, closeCalendar] = useFlag();\n\n useEffect(() => {\n if (canShowSeenBy && isOpen) {\n loadSeenBy({ chatId: message.chatId, messageId: message.id });\n }\n }, [loadSeenBy, isOpen, message.chatId, message.id, canShowSeenBy]);\n\n useEffect(() => {\n if (canShowReactionsCount && isOpen) {\n loadReactors({ chatId: message.chatId, messageId: message.id });\n }\n }, [canShowReactionsCount, isOpen, loadReactors, message.chatId, message.id]);\n\n useEffect(() => {\n if (!hasFullInfo && !isPrivate && isOpen) {\n loadFullChat({ chatId: message.chatId });\n }\n }, [hasFullInfo, isOpen, isPrivate, loadFullChat, message.chatId]);\n\n const seenByRecentUsers = useMemo(() => {\n if (message.reactions?.recentReactions?.length) {\n // No need for expensive global updates on users, so we avoid them\n const usersById = getGlobal().users.byId;\n\n return message.reactions?.recentReactions?.slice(0, 3).map(({ userId }) => usersById[userId]).filter(Boolean);\n }\n\n if (!message.seenByUserIds) {\n return undefined;\n }\n\n // No need for expensive global updates on users, so we avoid them\n const usersById = getGlobal().users.byId;\n return message.seenByUserIds?.slice(0, 3).map((id) => usersById[id]).filter(Boolean);\n }, [message.reactions?.recentReactions, message.seenByUserIds]);\n\n const isDownloading = album ? album.messages.some((msg) => activeDownloads.includes(msg.id))\n : activeDownloads.includes(message.id);\n\n const handleDelete = useCallback(() => {\n setIsMenuOpen(false);\n setIsDeleteModalOpen(true);\n }, []);\n\n const handleReport = useCallback(() => {\n setIsMenuOpen(false);\n setIsReportModalOpen(true);\n }, []);\n\n const closeMenu = useCallback(() => {\n setIsMenuOpen(false);\n onClose();\n }, [onClose]);\n\n const closeDeleteModal = useCallback(() => {\n setIsDeleteModalOpen(false);\n onClose();\n }, [onClose]);\n\n const closeReportModal = useCallback(() => {\n setIsReportModalOpen(false);\n onClose();\n }, [onClose]);\n\n const closePinModal = useCallback(() => {\n setIsPinModalOpen(false);\n onClose();\n }, [onClose]);\n\n const handleCloseCalendar = useCallback(() => {\n closeCalendar();\n onClose();\n }, [closeCalendar, onClose]);\n\n const handleReply = useCallback(() => {\n setReplyingToId({ messageId: message.id });\n closeMenu();\n }, [setReplyingToId, message.id, closeMenu]);\n\n const handleEdit = useCallback(() => {\n setEditingId({ messageId: message.id });\n closeMenu();\n }, [setEditingId, message.id, closeMenu]);\n\n const handlePin = useCallback(() => {\n setIsMenuOpen(false);\n setIsPinModalOpen(true);\n }, []);\n\n const handleUnpin = useCallback(() => {\n pinMessage({ messageId: message.id, isUnpin: true });\n closeMenu();\n }, [pinMessage, message.id, closeMenu]);\n\n const handleForward = useCallback(() => {\n closeMenu();\n if (album?.messages) {\n const messageIds = album.messages.map(({ id }) => id);\n openForwardMenu({ fromChatId: message.chatId, messageIds });\n } else {\n openForwardMenu({ fromChatId: message.chatId, messageIds: [message.id] });\n }\n }, [openForwardMenu, message, closeMenu, album]);\n\n const handleFaveSticker = useCallback(() => {\n closeMenu();\n faveSticker({ sticker: message.content.sticker });\n }, [closeMenu, message.content.sticker, faveSticker]);\n\n const handleUnfaveSticker = useCallback(() => {\n closeMenu();\n unfaveSticker({ sticker: message.content.sticker });\n }, [closeMenu, message.content.sticker, unfaveSticker]);\n\n const handleSelectMessage = useCallback(() => {\n const params = album?.messages\n ? {\n messageId: message.id,\n childMessageIds: album.messages.map(({ id }) => id),\n withShift: false,\n }\n : { messageId: message.id, withShift: false };\n\n toggleMessageSelection(params);\n closeMenu();\n }, [closeMenu, message.id, toggleMessageSelection, album]);\n\n const handleScheduledMessageSend = useCallback(() => {\n sendScheduledMessages({ chatId: message.chatId, id: message.id });\n closeMenu();\n }, [closeMenu, message.chatId, message.id, sendScheduledMessages]);\n\n const handleOpenCalendar = useCallback(() => {\n setIsMenuOpen(false);\n openCalendar();\n }, [openCalendar]);\n\n const handleOpenSeenByModal = useCallback(() => {\n closeMenu();\n openSeenByModal({ chatId: message.chatId, messageId: message.id });\n }, [closeMenu, message.chatId, message.id, openSeenByModal]);\n\n const handleOpenReactorListModal = useCallback(() => {\n closeMenu();\n openReactorListModal({ chatId: message.chatId, messageId: message.id });\n }, [closeMenu, openReactorListModal, message.chatId, message.id]);\n\n const handleRescheduleMessage = useCallback((date: Date) => {\n rescheduleMessage({\n chatId: message.chatId,\n messageId: message.id,\n scheduledAt: Math.round(date.getTime() / 1000),\n });\n }, [message.chatId, message.id, rescheduleMessage]);\n\n const handleCopyMessages = useCallback((messageIds: number[]) => {\n copyMessagesByIds({ messageIds });\n closeMenu();\n }, [closeMenu, copyMessagesByIds]);\n\n const handleCopyLink = useCallback(() => {\n copyTextToClipboard(`https://t.me/${chatUsername || `c/${message.chatId.replace('-', '')}`}/${message.id}`);\n closeMenu();\n }, [chatUsername, closeMenu, message.chatId, message.id]);\n\n const handleDownloadClick = useCallback(() => {\n (album?.messages || [message]).forEach((msg) => {\n if (isDownloading) {\n cancelMessageMediaDownload({ message: msg });\n } else {\n downloadMessageMedia({ message: msg });\n }\n });\n closeMenu();\n }, [album, message, closeMenu, isDownloading, cancelMessageMediaDownload, downloadMessageMedia]);\n\n const handleSaveGif = useCallback(() => {\n const video = getMessageVideo(message);\n saveGif({ gif: video });\n closeMenu();\n }, [closeMenu, message, saveGif]);\n\n const handleSendReaction = useCallback((reaction: string | undefined, x: number, y: number) => {\n sendReaction({\n chatId: message.chatId, messageId: message.id, reaction, x, y, startSize: START_SIZE,\n });\n closeMenu();\n }, [closeMenu, message.chatId, message.id, sendReaction]);\n\n const reportMessageIds = useMemo(() => (album ? album.messages : [message]).map(({ id }) => id), [album, message]);\n\n if (noOptions) {\n closeMenu();\n\n return undefined;\n }\n\n const scheduledMaxDate = new Date();\n scheduledMaxDate.setFullYear(scheduledMaxDate.getFullYear() + 1);\n\n return (\n
\n \n \n \n \n {canReschedule && (\n \n )}\n
\n );\n};\n\nexport default memo(withGlobal(\n (global, { message, messageListType }): StateProps => {\n const { threadId } = selectCurrentMessageList(global) || {};\n const activeDownloads = selectActiveDownloadIds(global, message.chatId);\n const chat = selectChat(global, message.chatId);\n const { seenByExpiresAt, seenByMaxChatMembers } = global.appConfig || {};\n const {\n noOptions,\n canReply,\n canPin,\n canUnpin,\n canDelete,\n canReport,\n canEdit,\n canForward,\n canFaveSticker,\n canUnfaveSticker,\n canCopy,\n canCopyLink,\n canSelect,\n canDownload,\n canSaveGif,\n } = (threadId && selectAllowedMessageActions(global, message, threadId)) || {};\n const isPinned = messageListType === 'pinned';\n const isScheduled = messageListType === 'scheduled';\n const isChannel = chat && isChatChannel(chat);\n const isLocal = isMessageLocal(message);\n const canShowSeenBy = Boolean(chat\n && seenByMaxChatMembers\n && seenByExpiresAt\n && isChatGroup(chat)\n && isOwnMessage(message)\n && !isScheduled\n && chat.membersCount\n && chat.membersCount < seenByMaxChatMembers\n && message.date > Date.now() / 1000 - seenByExpiresAt);\n const isPrivate = chat && isUserId(chat.id);\n const isAction = isActionMessage(message);\n const canShowReactionsCount = !isLocal && !isChannel && !isScheduled && !isAction && !isPrivate && message.reactions\n && !areReactionsEmpty(message.reactions) && message.reactions.canSeeList;\n const canRemoveReaction = isPrivate && message.reactions?.results?.some((l) => l.isChosen);\n const isProtected = selectIsMessageProtected(global, message);\n\n return {\n availableReactions: global.availableReactions,\n noOptions,\n canSendNow: isScheduled,\n canReschedule: isScheduled,\n canReply: !isPinned && !isScheduled && canReply,\n canPin: !isScheduled && canPin,\n canUnpin: !isScheduled && canUnpin,\n canDelete,\n canReport,\n canEdit: !isPinned && canEdit,\n canForward: !isProtected && !isScheduled && canForward,\n canFaveSticker: !isScheduled && canFaveSticker,\n canUnfaveSticker: !isScheduled && canUnfaveSticker,\n canCopy: !isProtected && canCopy,\n canCopyLink: !isProtected && !isScheduled && canCopyLink,\n canSelect,\n canDownload: !isProtected && canDownload,\n canSaveGif: !isProtected && canSaveGif,\n activeDownloads,\n canShowSeenBy,\n enabledReactions: chat?.isForbidden ? undefined : chat?.fullInfo?.enabledReactions,\n isPrivate,\n hasFullInfo: Boolean(chat?.fullInfo),\n canShowReactionsCount,\n canShowReactionList: !isLocal && !isAction && !isScheduled && chat?.id !== SERVICE_NOTIFICATIONS_USER_ID,\n canRemoveReaction,\n };\n },\n)(ContextMenuContainer));\n","import React, {\n FC, memo, useCallback, useEffect, useRef,\n} from '../../lib/teact/teact';\nimport { getActions, withGlobal } from '../../global';\n\nimport { ApiSticker, ApiStickerSet } from '../../api/types';\n\nimport { STICKER_SIZE_MODAL } from '../../config';\nimport {\n selectCanScheduleUntilOnline,\n selectChat,\n selectCurrentMessageList,\n selectIsChatWithSelf,\n selectShouldSchedule,\n selectStickerSet,\n selectStickerSetByShortName,\n} from '../../global/selectors';\nimport { useIntersectionObserver } from '../../hooks/useIntersectionObserver';\nimport useLang from '../../hooks/useLang';\nimport renderText from './helpers/renderText';\nimport { getAllowedAttachmentOptions, getCanPostInChat } from '../../global/helpers';\nimport useSchedule from '../../hooks/useSchedule';\n\nimport Modal from '../ui/Modal';\nimport Button from '../ui/Button';\nimport Loading from '../ui/Loading';\nimport StickerButton from './StickerButton';\n\nimport './StickerSetModal.scss';\n\nexport type OwnProps = {\n isOpen: boolean;\n fromSticker?: ApiSticker;\n stickerSetShortName?: string;\n onClose: () => void;\n};\n\ntype StateProps = {\n canSendStickers?: boolean;\n stickerSet?: ApiStickerSet;\n canScheduleUntilOnline?: boolean;\n shouldSchedule?: boolean;\n isSavedMessages?: boolean;\n};\n\nconst INTERSECTION_THROTTLE = 200;\n\nconst StickerSetModal: FC = ({\n isOpen,\n fromSticker,\n stickerSetShortName,\n stickerSet,\n canSendStickers,\n canScheduleUntilOnline,\n shouldSchedule,\n isSavedMessages,\n onClose,\n}) => {\n const {\n loadStickers,\n toggleStickerSet,\n sendMessage,\n } = getActions();\n\n // eslint-disable-next-line no-null/no-null\n const containerRef = useRef(null);\n const lang = useLang();\n\n const [requestCalendar, calendar] = useSchedule(canScheduleUntilOnline);\n\n const {\n observe: observeIntersection,\n } = useIntersectionObserver({ rootRef: containerRef, throttleMs: INTERSECTION_THROTTLE, isDisabled: !isOpen });\n\n useEffect(() => {\n if (isOpen) {\n if (fromSticker) {\n const { stickerSetId, stickerSetAccessHash } = fromSticker;\n loadStickers({\n stickerSetId,\n stickerSetAccessHash,\n });\n } else if (stickerSetShortName) {\n loadStickers({\n stickerSetShortName,\n });\n }\n }\n }, [isOpen, fromSticker, loadStickers, stickerSetShortName]);\n\n const handleSelect = useCallback((sticker: ApiSticker, isSilent?: boolean, isScheduleRequested?: boolean) => {\n sticker = {\n ...sticker,\n isPreloadedGlobally: true,\n };\n\n if (shouldSchedule || isScheduleRequested) {\n requestCalendar((scheduledAt) => {\n sendMessage({ sticker, isSilent, scheduledAt });\n onClose();\n });\n } else {\n sendMessage({ sticker, isSilent });\n onClose();\n }\n }, [onClose, requestCalendar, sendMessage, shouldSchedule]);\n\n const handleButtonClick = useCallback(() => {\n if (stickerSet) {\n toggleStickerSet({ stickerSetId: stickerSet.id });\n onClose();\n }\n }, [onClose, stickerSet, toggleStickerSet]);\n\n return (\n \n {stickerSet?.stickers ? (\n <>\n
\n {stickerSet.stickers.map((sticker) => (\n \n ))}\n
\n
\n \n {lang(\n stickerSet.installedDate ? 'StickerPack.RemoveStickerCount' : 'StickerPack.AddStickerCount',\n stickerSet.count,\n 'i',\n )}\n \n
\n \n ) : (\n \n )}\n {calendar}\n \n );\n};\n\nexport default memo(withGlobal(\n (global, { fromSticker, stickerSetShortName }): StateProps => {\n const currentMessageList = selectCurrentMessageList(global);\n const { chatId, threadId } = currentMessageList || {};\n const chat = chatId && selectChat(global, chatId);\n const sendOptions = chat ? getAllowedAttachmentOptions(chat) : undefined;\n const canSendStickers = Boolean(\n chat && threadId && getCanPostInChat(chat, threadId) && sendOptions?.canSendStickers,\n );\n const isSavedMessages = Boolean(chatId) && selectIsChatWithSelf(global, chatId);\n\n return {\n canScheduleUntilOnline: Boolean(chatId) && selectCanScheduleUntilOnline(global, chatId),\n canSendStickers,\n isSavedMessages,\n shouldSchedule: selectShouldSchedule(global),\n stickerSet: fromSticker\n ? selectStickerSet(global, fromSticker.stickerSetId)\n : stickerSetShortName\n ? selectStickerSetByShortName(global, stickerSetShortName)\n : undefined,\n };\n },\n)(StickerSetModal));\n","import React, {\n FC, memo, useCallback, useEffect, useState,\n} from '../../lib/teact/teact';\nimport { getActions, withGlobal } from '../../global';\n\nimport { ApiChat } from '../../api/types';\nimport { IAnchorPosition } from '../../types';\n\nimport { IS_SINGLE_COLUMN_LAYOUT } from '../../util/environment';\nimport { disableScrolling, enableScrolling } from '../../util/scrollLock';\nimport {\n selectChat, selectNotifySettings, selectNotifyExceptions, selectUser,\n} from '../../global/selectors';\nimport {\n isUserId, getCanDeleteChat, selectIsChatMuted, getCanAddContact,\n} from '../../global/helpers';\nimport useShowTransition from '../../hooks/useShowTransition';\nimport useLang from '../../hooks/useLang';\n\nimport Portal from '../ui/Portal';\nimport Menu from '../ui/Menu';\nimport MenuItem from '../ui/MenuItem';\nimport DeleteChatModal from '../common/DeleteChatModal';\n\nimport './HeaderMenuContainer.scss';\n\nexport type OwnProps = {\n chatId: string;\n threadId: number;\n isOpen: boolean;\n withExtraActions: boolean;\n anchor: IAnchorPosition;\n isChannel?: boolean;\n canStartBot?: boolean;\n canRestartBot?: boolean;\n canSubscribe?: boolean;\n canSearch?: boolean;\n canCall?: boolean;\n canMute?: boolean;\n canViewStatistics?: boolean;\n canLeave?: boolean;\n canEnterVoiceChat?: boolean;\n canCreateVoiceChat?: boolean;\n onSubscribeChannel: () => void;\n onSearchClick: () => void;\n onClose: () => void;\n onCloseAnimationEnd: () => void;\n};\n\ntype StateProps = {\n chat?: ApiChat;\n isPrivate?: boolean;\n isMuted?: boolean;\n canAddContact?: boolean;\n canDeleteChat?: boolean;\n hasLinkedChat?: boolean;\n};\n\nconst HeaderMenuContainer: FC = ({\n chatId,\n isOpen,\n withExtraActions,\n anchor,\n isChannel,\n canStartBot,\n canRestartBot,\n canSubscribe,\n canSearch,\n canCall,\n canMute,\n canViewStatistics,\n canLeave,\n canEnterVoiceChat,\n canCreateVoiceChat,\n chat,\n isPrivate,\n isMuted,\n canDeleteChat,\n hasLinkedChat,\n canAddContact,\n onSubscribeChannel,\n onSearchClick,\n onClose,\n onCloseAnimationEnd,\n}) => {\n const {\n updateChatMutedState,\n enterMessageSelectMode,\n sendBotCommand,\n restartBot,\n joinGroupCall,\n createGroupCall,\n openLinkedChat,\n openAddContactDialog,\n openCallFallbackConfirm,\n toggleStatistics,\n } = getActions();\n\n const [isMenuOpen, setIsMenuOpen] = useState(true);\n const [isDeleteModalOpen, setIsDeleteModalOpen] = useState(false);\n const { x, y } = anchor;\n\n useShowTransition(isOpen, onCloseAnimationEnd, undefined, false);\n\n const handleDelete = useCallback(() => {\n setIsMenuOpen(false);\n setIsDeleteModalOpen(true);\n }, []);\n\n const closeMenu = useCallback(() => {\n setIsMenuOpen(false);\n onClose();\n }, [onClose]);\n\n const closeDeleteModal = useCallback(() => {\n setIsDeleteModalOpen(false);\n onClose();\n }, [onClose]);\n\n const handleStartBot = useCallback(() => {\n sendBotCommand({ command: '/start' });\n }, [sendBotCommand]);\n\n const handleRestartBot = useCallback(() => {\n restartBot({ chatId });\n }, [chatId, restartBot]);\n\n const handleToggleMuteClick = useCallback(() => {\n updateChatMutedState({ chatId, isMuted: !isMuted });\n closeMenu();\n }, [chatId, closeMenu, isMuted, updateChatMutedState]);\n\n const handleEnterVoiceChatClick = useCallback(() => {\n if (canCreateVoiceChat) {\n // TODO show popup to schedule\n createGroupCall({\n chatId,\n });\n } else {\n joinGroupCall({\n chatId,\n });\n }\n closeMenu();\n }, [closeMenu, canCreateVoiceChat, chatId, joinGroupCall, createGroupCall]);\n\n const handleLinkedChatClick = useCallback(() => {\n openLinkedChat({ id: chatId });\n closeMenu();\n }, [chatId, closeMenu, openLinkedChat]);\n\n const handleAddContactClick = useCallback(() => {\n openAddContactDialog({ userId: chatId });\n closeMenu();\n }, [openAddContactDialog, chatId, closeMenu]);\n\n const handleSubscribe = useCallback(() => {\n onSubscribeChannel();\n closeMenu();\n }, [closeMenu, onSubscribeChannel]);\n\n const handleCall = useCallback(() => {\n openCallFallbackConfirm();\n closeMenu();\n }, [closeMenu, openCallFallbackConfirm]);\n\n const handleSearch = useCallback(() => {\n onSearchClick();\n closeMenu();\n }, [closeMenu, onSearchClick]);\n\n const handleStatisticsClick = useCallback(() => {\n toggleStatistics();\n closeMenu();\n }, [closeMenu, toggleStatistics]);\n\n const handleSelectMessages = useCallback(() => {\n enterMessageSelectMode();\n closeMenu();\n }, [closeMenu, enterMessageSelectMode]);\n\n useEffect(() => {\n disableScrolling();\n\n return enableScrolling;\n }, []);\n\n const lang = useLang();\n\n return (\n \n
\n \n {withExtraActions && canStartBot && (\n \n {lang('BotStart')}\n \n )}\n {withExtraActions && canRestartBot && (\n \n {lang('BotRestart')}\n \n )}\n {withExtraActions && canSubscribe && (\n \n {lang(isChannel ? 'ProfileJoinChannel' : 'ProfileJoinGroup')}\n \n )}\n {canAddContact && (\n \n {lang('AddContact')}\n \n )}\n {IS_SINGLE_COLUMN_LAYOUT && canCall && (\n \n {lang('Call')}\n \n )}\n {IS_SINGLE_COLUMN_LAYOUT && canSearch && (\n \n {lang('Search')}\n \n )}\n {canMute && (\n \n {lang(isMuted ? 'ChatsUnmute' : 'ChatsMute')}\n \n )}\n {(canEnterVoiceChat || canCreateVoiceChat) && (\n \n {lang(canCreateVoiceChat ? 'StartVoipChat' : 'VoipGroupJoinCall')}\n \n )}\n {hasLinkedChat && (\n \n {lang(isChannel ? 'ViewDiscussion' : 'lng_profile_view_channel')}\n \n )}\n \n {lang('ReportSelectMessages')}\n \n {canViewStatistics && (\n \n {lang('Statistics')}\n \n )}\n {canLeave && (\n \n {lang(isPrivate\n ? 'DeleteChatUser'\n : (canDeleteChat ? 'GroupInfo.DeleteAndExit' : (isChannel ? 'LeaveChannel' : 'Group.LeaveGroup')))}\n \n )}\n \n {chat && (\n \n )}\n
\n
\n );\n};\n\nexport default memo(withGlobal(\n (global, { chatId }): StateProps => {\n const chat = selectChat(global, chatId);\n if (!chat || chat.isRestricted) {\n return {};\n }\n const isPrivate = isUserId(chat.id);\n const user = isPrivate ? selectUser(global, chatId) : undefined;\n const canAddContact = user && getCanAddContact(user);\n\n return {\n chat,\n isMuted: selectIsChatMuted(chat, selectNotifySettings(global), selectNotifyExceptions(global)),\n isPrivate,\n canAddContact,\n canDeleteChat: getCanDeleteChat(chat),\n hasLinkedChat: Boolean(chat?.fullInfo?.linkedChatId),\n };\n },\n)(HeaderMenuContainer));\n","import React, {\n FC, memo, useCallback, useEffect, useRef, useState, useLayoutEffect,\n} from '../../lib/teact/teact';\nimport { getActions, withGlobal } from '../../global';\n\nimport { ApiChat } from '../../api/types';\n\nimport { debounce } from '../../util/schedulers';\nimport { selectCurrentTextSearch, selectCurrentChat } from '../../global/selectors';\nimport { getDayStartAt } from '../../util/dateFormat';\n\nimport Button from '../ui/Button';\nimport SearchInput from '../ui/SearchInput';\n\nimport './MobileSearch.scss';\n\nexport type OwnProps = {\n isActive: boolean;\n};\n\ntype StateProps = {\n isActive?: boolean;\n chat?: ApiChat;\n query?: string;\n totalCount?: number;\n foundIds?: number[];\n isHistoryCalendarOpen?: boolean;\n};\n\nconst runDebouncedForSearch = debounce((cb) => cb(), 200, false);\n\nconst MobileSearchFooter: FC = ({\n isActive,\n chat,\n query,\n totalCount,\n foundIds,\n isHistoryCalendarOpen,\n}) => {\n const {\n setLocalTextSearchQuery,\n searchTextMessagesLocal,\n focusMessage,\n closeLocalTextSearch,\n openHistoryCalendar,\n } = getActions();\n\n // eslint-disable-next-line no-null/no-null\n const inputRef = useRef(null);\n const [focusedIndex, setFocusedIndex] = useState(0);\n\n // Fix for iOS keyboard\n useEffect(() => {\n const { visualViewport } = window as any;\n if (!visualViewport) {\n return undefined;\n }\n\n const mainEl = document.getElementById('Main') as HTMLDivElement;\n const handleResize = () => {\n const { activeElement } = document;\n if (activeElement && (activeElement === inputRef.current)) {\n const { pageTop, height } = visualViewport;\n mainEl.style.transform = `translateY(${pageTop}px)`;\n mainEl.style.height = `${height}px`;\n document.documentElement.scrollTop = pageTop;\n } else {\n mainEl.style.transform = '';\n mainEl.style.height = '';\n }\n };\n\n visualViewport.addEventListener('resize', handleResize);\n\n return () => {\n visualViewport.removeEventListener('resize', handleResize);\n };\n }, []);\n\n // Focus message\n useEffect(() => {\n if (chat?.id && foundIds?.length) {\n focusMessage({ chatId: chat.id, messageId: foundIds[0] });\n setFocusedIndex(0);\n } else {\n setFocusedIndex(-1);\n }\n }, [chat?.id, focusMessage, foundIds]);\n\n // Disable native up/down buttons on iOS\n useEffect(() => {\n Array.from(document.querySelectorAll('input')).forEach((input) => {\n input.disabled = Boolean(isActive && input !== inputRef.current);\n });\n\n Array.from(document.querySelectorAll('div[contenteditable]')).forEach((div) => {\n div.contentEditable = isActive ? 'false' : 'true';\n });\n }, [isActive]);\n\n // Blur on exit\n useEffect(() => {\n if (!isActive) {\n inputRef.current!.blur();\n }\n }, [isActive]);\n\n useLayoutEffect(() => {\n const searchInput = document.querySelector('#MobileSearch input')!;\n searchInput.blur();\n }, [isHistoryCalendarOpen]);\n\n const handleMessageSearchQueryChange = useCallback((newQuery: string) => {\n setLocalTextSearchQuery({ query: newQuery });\n\n if (newQuery.length) {\n runDebouncedForSearch(searchTextMessagesLocal);\n }\n }, [searchTextMessagesLocal, setLocalTextSearchQuery]);\n\n const handleUp = useCallback(() => {\n if (chat && foundIds) {\n const newFocusIndex = focusedIndex + 1;\n focusMessage({ chatId: chat.id, messageId: foundIds[newFocusIndex] });\n setFocusedIndex(newFocusIndex);\n }\n }, [chat, focusedIndex, focusMessage, foundIds]);\n\n const handleDown = useCallback(() => {\n if (chat && foundIds) {\n const newFocusIndex = focusedIndex - 1;\n focusMessage({ chatId: chat.id, messageId: foundIds[newFocusIndex] });\n setFocusedIndex(newFocusIndex);\n }\n }, [chat, focusedIndex, focusMessage, foundIds]);\n\n return (\n
\n
\n \n \n \n \n
\n
\n
\n {query ? (\n foundIds?.length ? (\n `${focusedIndex + 1} of ${totalCount}`\n ) : foundIds && !foundIds.length ? (\n 'No results'\n ) : (\n ''\n )\n ) : (\n openHistoryCalendar({ selectedAt: getDayStartAt(Date.now()) })}\n ariaLabel=\"Search messages by date\"\n >\n \n \n )}\n
\n \n \n \n \n \n \n
\n
\n );\n};\n\nexport default memo(withGlobal(\n (global): StateProps => {\n const chat = selectCurrentChat(global);\n if (!chat) {\n return {};\n }\n\n const { query, results } = selectCurrentTextSearch(global) || {};\n const { totalCount, foundIds } = results || {};\n\n return {\n chat,\n query,\n totalCount,\n foundIds,\n isHistoryCalendarOpen: Boolean(global.historyCalendarSelectedAt),\n };\n },\n)(MobileSearchFooter));\n","export default function findInViewport(\n container: HTMLElement,\n selectorOrElements: string | NodeListOf,\n margin = 0,\n isDense = false,\n shouldContainBottom = false,\n isHorizontal = false,\n) {\n const viewportY1 = container[isHorizontal ? 'scrollLeft' : 'scrollTop'];\n const viewportY2 = viewportY1 + container[isHorizontal ? 'offsetWidth' : 'offsetHeight'];\n const allElements = typeof selectorOrElements === 'string'\n ? container.querySelectorAll(selectorOrElements)\n : selectorOrElements;\n const { length } = allElements;\n const visibleIndexes: number[] = [];\n let isFound = false;\n\n for (let i = 0; i < length; i++) {\n const element = allElements[i];\n const y1 = element[isHorizontal ? 'offsetLeft' : 'offsetTop'];\n const y2 = y1 + element[isHorizontal ? 'offsetWidth' : 'offsetHeight'];\n const isVisible = shouldContainBottom\n ? y2 >= viewportY1 - margin && y2 <= viewportY2 + margin\n : y1 <= viewportY2 + margin && y2 >= viewportY1 - margin;\n\n if (isVisible) {\n visibleIndexes.push(i);\n isFound = true;\n } else if (isFound && !isDense) {\n break;\n }\n }\n\n return { allElements, visibleIndexes };\n}\n","function isFullyVisible(container: HTMLElement, element: HTMLElement, isHorizontal = false) {\n const viewportY1 = container[isHorizontal ? 'scrollLeft' : 'scrollTop'];\n const viewportY2 = viewportY1 + container[isHorizontal ? 'offsetWidth' : 'offsetHeight'];\n const y1 = element[isHorizontal ? 'offsetLeft' : 'offsetTop'];\n const y2 = y1 + element[isHorizontal ? 'offsetWidth' : 'offsetHeight'];\n return y1 > viewportY1 && y2 < viewportY2;\n}\n\nexport default isFullyVisible;\n","import findInViewport from './findInViewport';\nimport isFullyVisible from './isFullyVisible';\nimport fastSmoothScroll from './fastSmoothScroll';\n\nconst VIEWPORT_MARGIN = 8;\nconst SCROLL_MARGIN = 10;\n\nexport default function setTooltipItemVisible(selector: string, index: number, containerRef: Record) {\n const container = containerRef.current!;\n if (!container || index < 0) {\n return;\n }\n const { visibleIndexes, allElements } = findInViewport(\n container,\n selector,\n VIEWPORT_MARGIN,\n true,\n true,\n );\n\n if (!allElements.length || !allElements[index]) {\n return;\n }\n const first = visibleIndexes[0];\n if (!visibleIndexes.includes(index)\n || (index === first && !isFullyVisible(container, allElements[first]))) {\n const position = index > visibleIndexes[visibleIndexes.length - 1] ? 'start' : 'end';\n fastSmoothScroll(container, allElements[index], position, SCROLL_MARGIN);\n }\n}\n","import { useCallback, useEffect, useState } from '../../../../lib/teact/teact';\nimport captureKeyboardListeners from '../../../../util/captureKeyboardListeners';\nimport cycleRestrict from '../../../../util/cycleRestrict';\n\nexport function useKeyboardNavigation({\n isActive,\n isHorizontal,\n shouldSaveSelectionOnUpdateItems,\n shouldRemoveSelectionOnReset,\n noArrowNavigation,\n items,\n shouldSelectOnTab,\n onSelect,\n onClose,\n}: {\n isActive: boolean;\n isHorizontal?: boolean;\n shouldSaveSelectionOnUpdateItems?: boolean;\n shouldRemoveSelectionOnReset?: boolean;\n noArrowNavigation?: boolean;\n items?: any[];\n shouldSelectOnTab?: boolean;\n onSelect: AnyToVoidFunction;\n onClose: NoneToVoidFunction;\n}) {\n const [selectedItemIndex, setSelectedItemIndex] = useState(-1);\n\n const getSelectedIndex = useCallback((newIndex: number) => {\n if (!items) {\n return -1;\n }\n\n return cycleRestrict(items.length, newIndex);\n }, [items]);\n\n const handleArrowKey = useCallback((value: number, e: KeyboardEvent) => {\n e.preventDefault();\n setSelectedItemIndex((index) => (getSelectedIndex(index + value)));\n }, [setSelectedItemIndex, getSelectedIndex]);\n\n const handleItemSelect = useCallback((e: KeyboardEvent) => {\n if (items && items.length && selectedItemIndex > -1) {\n const item = items[selectedItemIndex];\n if (item) {\n e.preventDefault();\n onSelect(item);\n }\n }\n }, [items, onSelect, selectedItemIndex]);\n\n const isSelectionOutOfRange = !items || selectedItemIndex > items.length - 1;\n useEffect(() => {\n if (!shouldSaveSelectionOnUpdateItems || isSelectionOutOfRange) {\n setSelectedItemIndex(shouldRemoveSelectionOnReset ? -1 : 0);\n }\n }, [isSelectionOutOfRange, shouldRemoveSelectionOnReset, shouldSaveSelectionOnUpdateItems]);\n\n useEffect(() => (isActive ? captureKeyboardListeners({\n onEsc: onClose,\n onUp: noArrowNavigation || isHorizontal ? undefined : (e: KeyboardEvent) => handleArrowKey(-1, e),\n onDown: noArrowNavigation || isHorizontal ? undefined : (e: KeyboardEvent) => handleArrowKey(1, e),\n onLeft: noArrowNavigation || !isHorizontal ? undefined : (e: KeyboardEvent) => handleArrowKey(-1, e),\n onRight: noArrowNavigation || !isHorizontal ? undefined : (e: KeyboardEvent) => handleArrowKey(1, e),\n onTab: shouldSelectOnTab ? handleItemSelect : undefined,\n onEnter: handleItemSelect,\n }) : undefined), [\n noArrowNavigation, handleArrowKey, handleItemSelect, isActive, isHorizontal, onClose, shouldSelectOnTab,\n ]);\n\n return selectedItemIndex;\n}\n","import React, {\n FC, useCallback, useEffect, useRef, memo,\n} from '../../../lib/teact/teact';\nimport { getGlobal } from '../../../global';\n\nimport { ApiUser } from '../../../api/types';\n\nimport buildClassName from '../../../util/buildClassName';\nimport setTooltipItemVisible from '../../../util/setTooltipItemVisible';\nimport usePrevious from '../../../hooks/usePrevious';\nimport useShowTransition from '../../../hooks/useShowTransition';\nimport { useKeyboardNavigation } from './hooks/useKeyboardNavigation';\n\nimport ListItem from '../../ui/ListItem';\nimport PrivateChatInfo from '../../common/PrivateChatInfo';\n\nimport './MentionTooltip.scss';\n\nexport type OwnProps = {\n isOpen: boolean;\n onClose: () => void;\n onInsertUserName: (user: ApiUser, forceFocus?: boolean) => void;\n filteredUsers?: ApiUser[];\n};\n\nconst MentionTooltip: FC = ({\n isOpen,\n onClose,\n onInsertUserName,\n filteredUsers,\n}) => {\n // eslint-disable-next-line no-null/no-null\n const containerRef = useRef(null);\n const { shouldRender, transitionClassNames } = useShowTransition(isOpen, undefined, undefined, false);\n\n const handleUserSelect = useCallback((userId: string, forceFocus = false) => {\n // No need for expensive global updates on users, so we avoid them\n const usersById = getGlobal().users.byId;\n const user = usersById[userId];\n if (!user) {\n return;\n }\n\n onInsertUserName(user, forceFocus);\n }, [onInsertUserName]);\n\n const handleSelectMention = useCallback((member: ApiUser) => {\n handleUserSelect(member.id, true);\n }, [handleUserSelect]);\n\n const selectedMentionIndex = useKeyboardNavigation({\n isActive: isOpen,\n items: filteredUsers,\n onSelect: handleSelectMention,\n shouldSelectOnTab: true,\n shouldSaveSelectionOnUpdateItems: true,\n onClose,\n });\n\n useEffect(() => {\n setTooltipItemVisible('.chat-item-clickable', selectedMentionIndex, containerRef);\n }, [selectedMentionIndex]);\n\n useEffect(() => {\n if (filteredUsers && !filteredUsers.length) {\n onClose();\n }\n }, [filteredUsers, onClose]);\n\n const prevChatMembers = usePrevious(\n filteredUsers?.length\n ? filteredUsers\n : undefined,\n shouldRender,\n );\n const renderedChatMembers = filteredUsers && !filteredUsers.length\n ? prevChatMembers\n : filteredUsers;\n\n if (!shouldRender || (renderedChatMembers && !renderedChatMembers.length)) {\n return undefined;\n }\n\n const className = buildClassName(\n 'MentionTooltip composer-tooltip custom-scroll',\n transitionClassNames,\n );\n\n return (\n
\n {renderedChatMembers?.map(({ id }, index) => (\n handleUserSelect(id)}\n focus={selectedMentionIndex === index}\n >\n \n \n ))}\n
\n );\n};\n\nexport default memo(MentionTooltip);\n","import React, {\n FC, memo, useCallback, useEffect, useRef,\n} from '../../../lib/teact/teact';\n\nimport { ApiAttachment, ApiChatMember } from '../../../api/types';\n\nimport {\n CONTENT_TYPES_WITH_PREVIEW,\n EDITABLE_INPUT_MODAL_ID,\n SUPPORTED_AUDIO_CONTENT_TYPES,\n SUPPORTED_IMAGE_CONTENT_TYPES,\n SUPPORTED_VIDEO_CONTENT_TYPES,\n} from '../../../config';\nimport { getFileExtension } from '../../common/helpers/documentInfo';\nimport captureEscKeyListener from '../../../util/captureEscKeyListener';\n\nimport usePrevious from '../../../hooks/usePrevious';\nimport useMentionTooltip from './hooks/useMentionTooltip';\nimport useEmojiTooltip from './hooks/useEmojiTooltip';\nimport useLang from '../../../hooks/useLang';\nimport useFlag from '../../../hooks/useFlag';\nimport useContextMenuHandlers from '../../../hooks/useContextMenuHandlers';\nimport { useStateRef } from '../../../hooks/useStateRef';\n\nimport Button from '../../ui/Button';\nimport Modal from '../../ui/Modal';\nimport File from '../../common/File';\nimport MessageInput from './MessageInput';\nimport MentionTooltip from './MentionTooltip';\nimport EmojiTooltip from './EmojiTooltip.async';\nimport CustomSendMenu from './CustomSendMenu.async';\n\nimport './AttachmentModal.scss';\n\nexport type OwnProps = {\n chatId: string;\n threadId: number;\n attachments: ApiAttachment[];\n caption: string;\n canShowCustomSendMenu?: boolean;\n isReady?: boolean;\n isChatWithSelf?: boolean;\n currentUserId?: string;\n groupChatMembers?: ApiChatMember[];\n recentEmojis: string[];\n baseEmojiKeywords?: Record;\n emojiKeywords?: Record;\n shouldSchedule?: boolean;\n addRecentEmoji: AnyToVoidFunction;\n onCaptionUpdate: (html: string) => void;\n onSend: () => void;\n onFileAppend: (files: File[], isQuick: boolean) => void;\n onClear: () => void;\n onSendSilent: () => void;\n onSendScheduled: () => void;\n};\n\nconst DROP_LEAVE_TIMEOUT_MS = 150;\n\nconst AttachmentModal: FC = ({\n chatId,\n threadId,\n attachments,\n caption,\n canShowCustomSendMenu,\n isReady,\n isChatWithSelf,\n currentUserId,\n groupChatMembers,\n recentEmojis,\n baseEmojiKeywords,\n emojiKeywords,\n shouldSchedule,\n addRecentEmoji,\n onCaptionUpdate,\n onSend,\n onFileAppend,\n onClear,\n onSendSilent,\n onSendScheduled,\n}) => {\n const captionRef = useStateRef(caption);\n // eslint-disable-next-line no-null/no-null\n const mainButtonRef = useStateRef(null);\n const hideTimeoutRef = useRef();\n const prevAttachments = usePrevious(attachments);\n const renderingAttachments = attachments.length ? attachments : prevAttachments;\n const isOpen = Boolean(attachments.length);\n const [isHovered, markHovered, unmarkHovered] = useFlag();\n const isQuick = Boolean(renderingAttachments && renderingAttachments.every((a) => a.quick));\n const lang = useLang();\n\n const {\n isMentionTooltipOpen, closeMentionTooltip, insertMention, mentionFilteredUsers,\n } = useMentionTooltip(\n isOpen,\n captionRef,\n onCaptionUpdate,\n EDITABLE_INPUT_MODAL_ID,\n groupChatMembers,\n undefined,\n currentUserId,\n );\n const {\n isEmojiTooltipOpen, closeEmojiTooltip, filteredEmojis, insertEmoji,\n } = useEmojiTooltip(\n isOpen,\n captionRef,\n recentEmojis,\n EDITABLE_INPUT_MODAL_ID,\n onCaptionUpdate,\n baseEmojiKeywords,\n emojiKeywords,\n !isReady,\n );\n\n useEffect(() => (isOpen ? captureEscKeyListener(onClear) : undefined), [isOpen, onClear]);\n\n const {\n isContextMenuOpen: isCustomSendMenuOpen,\n handleContextMenu,\n handleContextMenuClose,\n handleContextMenuHide,\n } = useContextMenuHandlers(mainButtonRef, !canShowCustomSendMenu || !isOpen);\n\n const sendAttachments = useCallback(() => {\n if (isOpen) {\n if (shouldSchedule) {\n onSendScheduled();\n } else {\n onSend();\n }\n }\n }, [isOpen, onSendScheduled, onSend, shouldSchedule]);\n\n const handleDragLeave = (e: React.DragEvent) => {\n const { relatedTarget: toTarget, target: fromTarget } = e;\n\n // Esc button pressed during drag event\n if ((fromTarget as HTMLDivElement).matches('.drop-target') && !toTarget) {\n hideTimeoutRef.current = window.setTimeout(unmarkHovered, DROP_LEAVE_TIMEOUT_MS);\n }\n\n // Prevent DragLeave event from firing when the pointer moves inside the AttachmentModal drop target\n if (fromTarget && (fromTarget as HTMLElement).closest('.AttachmentModal.hovered')) {\n return;\n }\n\n if (toTarget) {\n e.stopPropagation();\n }\n\n unmarkHovered();\n };\n\n const handleFilesDrop = useCallback((e: React.DragEvent) => {\n e.preventDefault();\n unmarkHovered();\n\n const { dataTransfer: { files } } = e;\n\n if (files?.length) {\n const newFiles = isQuick\n ? Array.from(files).filter((file) => {\n return file.type && CONTENT_TYPES_WITH_PREVIEW.has(file.type);\n })\n : Array.from(files);\n\n onFileAppend(newFiles, isQuick);\n }\n }, [isQuick, onFileAppend, unmarkHovered]);\n\n function handleDragOver(e: React.MouseEvent) {\n e.preventDefault();\n e.stopPropagation();\n\n if (hideTimeoutRef.current) {\n window.clearTimeout(hideTimeoutRef.current);\n hideTimeoutRef.current = undefined;\n }\n }\n\n if (!renderingAttachments) {\n return undefined;\n }\n\n const areAllPhotos = renderingAttachments.every((a) => SUPPORTED_IMAGE_CONTENT_TYPES.has(a.mimeType));\n const areAllVideos = renderingAttachments.every((a) => SUPPORTED_VIDEO_CONTENT_TYPES.has(a.mimeType));\n const areAllAudios = renderingAttachments.every((a) => SUPPORTED_AUDIO_CONTENT_TYPES.has(a.mimeType));\n\n let title = '';\n if (areAllPhotos) {\n title = lang('PreviewSender.SendPhoto', renderingAttachments.length, 'i');\n } else if (areAllVideos) {\n title = lang('PreviewSender.SendVideo', renderingAttachments.length, 'i');\n } else if (areAllAudios) {\n title = lang('PreviewSender.SendAudio', renderingAttachments.length, 'i');\n } else {\n title = lang('PreviewSender.SendFile', renderingAttachments.length, 'i');\n }\n\n function renderHeader() {\n if (!renderingAttachments) {\n return undefined;\n }\n\n return (\n
\n \n
{title}
\n
\n \n {lang('Send')}\n \n {canShowCustomSendMenu && (\n \n )}\n
\n
\n );\n }\n\n return (\n \n \n {isQuick ? (\n
\n {renderingAttachments.map((attachment) => (\n attachment.mimeType.startsWith('image/')\n ? \"\"\n :
\n ) : (\n
\n {renderingAttachments.map((attachment) => (\n \n ))}\n
\n )}\n\n
\n \n \n \n
\n
\n \n );\n};\n\nexport default memo(AttachmentModal);\n","import { ChangeEvent, RefObject } from 'react';\nimport React, {\n FC, memo, useCallback, useEffect, useLayoutEffect, useRef, useState,\n} from '../../../lib/teact/teact';\n\nimport { ApiNewPoll } from '../../../api/types';\n\nimport captureEscKeyListener from '../../../util/captureEscKeyListener';\nimport parseMessageInput from '../../../util/parseMessageInput';\nimport useLang from '../../../hooks/useLang';\n\nimport Button from '../../ui/Button';\nimport Modal from '../../ui/Modal';\nimport InputText from '../../ui/InputText';\nimport Checkbox from '../../ui/Checkbox';\nimport RadioGroup from '../../ui/RadioGroup';\n\nimport './PollModal.scss';\n\nexport type OwnProps = {\n isOpen: boolean;\n shouldBeAnonimous?: boolean;\n onSend: (pollSummary: ApiNewPoll) => void;\n onClear: () => void;\n};\n\nconst MAX_LIST_HEIGHT = 320;\nconst MAX_OPTIONS_COUNT = 10;\nconst MAX_OPTION_LENGTH = 100;\nconst MAX_QUESTION_LENGTH = 255;\nconst MAX_SOLUTION_LENGTH = 200;\n\nconst PollModal: FC = ({\n isOpen, shouldBeAnonimous, onSend, onClear,\n}) => {\n // eslint-disable-next-line no-null/no-null\n const questionInputRef = useRef(null);\n // eslint-disable-next-line no-null/no-null\n const optionsListRef = useRef(null);\n // eslint-disable-next-line no-null/no-null\n const solutionRef = useRef(null);\n\n const [question, setQuestion] = useState('');\n const [options, setOptions] = useState(['']);\n const [isAnonymous, setIsAnonymous] = useState(true);\n const [isMultipleAnswers, setIsMultipleAnswers] = useState(false);\n const [isQuizMode, setIsQuizMode] = useState(false);\n const [solution, setSolution] = useState();\n const [correctOption, setCorrectOption] = useState();\n const [hasErrors, setHasErrors] = useState(false);\n\n const lang = useLang();\n\n const focusInput = useCallback((ref: RefObject) => {\n if (isOpen && ref.current) {\n ref.current.focus();\n }\n }, [isOpen]);\n\n useEffect(() => (isOpen ? captureEscKeyListener(onClear) : undefined), [isOpen, onClear]);\n useEffect(() => {\n if (!isOpen) {\n setQuestion('');\n setOptions(['']);\n setIsAnonymous(true);\n setIsMultipleAnswers(false);\n setIsQuizMode(false);\n setSolution('');\n setCorrectOption('');\n setHasErrors(false);\n }\n }, [isOpen]);\n\n useEffect(() => focusInput(questionInputRef), [focusInput, isOpen]);\n\n useLayoutEffect(() => {\n const solutionEl = solutionRef.current;\n\n if (solutionEl && solution !== solutionEl.innerHTML) {\n solutionEl.innerHTML = solution;\n }\n }, [solution]);\n\n const addNewOption = useCallback((newOptions: string[] = []) => {\n setOptions([...newOptions, '']);\n requestAnimationFrame(() => {\n const list = optionsListRef.current;\n if (!list) {\n return;\n }\n\n list.classList.toggle('overflown', list.scrollHeight > MAX_LIST_HEIGHT);\n list.scrollTo({ top: list.scrollHeight, behavior: 'smooth' });\n });\n }, []);\n\n const handleCreate = useCallback(() => {\n setHasErrors(false);\n if (!isOpen) {\n return;\n }\n\n const questionTrimmed = question.trim().substring(0, MAX_QUESTION_LENGTH);\n const optionsTrimmed = options.map((o) => o.trim().substring(0, MAX_OPTION_LENGTH)).filter((o) => o.length);\n\n if (!questionTrimmed || optionsTrimmed.length < 2) {\n setQuestion(questionTrimmed);\n if (optionsTrimmed.length) {\n if (optionsTrimmed.length < 2) {\n addNewOption(optionsTrimmed);\n } else {\n setOptions(optionsTrimmed);\n }\n } else {\n addNewOption();\n }\n setHasErrors(true);\n return;\n }\n\n if (isQuizMode && (!correctOption || !optionsTrimmed[Number(correctOption)])) {\n setHasErrors(true);\n return;\n }\n\n const answers = optionsTrimmed\n .map((text, index) => ({\n text: text.trim(),\n option: String(index),\n ...(String(index) === correctOption && { correct: true }),\n }));\n\n const payload: ApiNewPoll = {\n summary: {\n question: questionTrimmed,\n answers,\n ...(!isAnonymous && { isPublic: true }),\n ...(isMultipleAnswers && { multipleChoice: true }),\n ...(isQuizMode && { quiz: true }),\n },\n };\n\n if (isQuizMode) {\n const { text, entities } = (solution && parseMessageInput(solution.substring(0, MAX_SOLUTION_LENGTH))) || {};\n\n payload.quiz = {\n correctAnswers: [correctOption],\n ...(text && { solution: text }),\n ...(entities && { solutionEntities: entities }),\n };\n }\n\n onSend(payload);\n }, [\n isOpen,\n question,\n options,\n isQuizMode,\n correctOption,\n isAnonymous,\n isMultipleAnswers,\n onSend,\n addNewOption,\n solution,\n ]);\n\n const updateOption = useCallback((index: number, text: string) => {\n const newOptions = [...options];\n newOptions[index] = text;\n if (newOptions[newOptions.length - 1].trim().length && newOptions.length < MAX_OPTIONS_COUNT) {\n addNewOption(newOptions);\n } else {\n setOptions(newOptions);\n }\n }, [options, addNewOption]);\n\n const removeOption = useCallback((index: number) => {\n const newOptions = [...options];\n newOptions.splice(index, 1);\n setOptions(newOptions);\n requestAnimationFrame(() => {\n if (!optionsListRef.current) {\n return;\n }\n\n optionsListRef.current.classList.toggle('overflown', optionsListRef.current.scrollHeight > MAX_LIST_HEIGHT);\n });\n }, [options]);\n\n const handleCorrectOptionChange = useCallback((newValue: string) => {\n setCorrectOption(newValue);\n }, [setCorrectOption]);\n\n const handleIsAnonymousChange = useCallback((e: ChangeEvent) => {\n setIsAnonymous(e.target.checked);\n }, []);\n\n const handleMultipleAnswersChange = useCallback((e: ChangeEvent) => {\n setIsMultipleAnswers(e.target.checked);\n }, []);\n\n const handleQuizModeChange = useCallback((e: ChangeEvent) => {\n setIsQuizMode(e.target.checked);\n }, []);\n\n const handleKeyPress = useCallback((e: React.KeyboardEvent) => {\n if (e.keyCode === 13) {\n handleCreate();\n }\n }, [handleCreate]);\n\n const handleQuestionChange = useCallback((e: ChangeEvent) => {\n setQuestion(e.target.value);\n }, []);\n\n const getQuestionError = useCallback(() => {\n if (hasErrors && !question.trim().length) {\n return lang('lng_polls_choose_question');\n }\n\n return undefined;\n }, [hasErrors, lang, question]);\n\n const getOptionsError = useCallback((index: number) => {\n const optionsTrimmed = options.map((o) => o.trim()).filter((o) => o.length);\n if (hasErrors && optionsTrimmed.length < 2 && !options[index].trim().length) {\n return lang('lng_polls_choose_answers');\n }\n return undefined;\n }, [hasErrors, lang, options]);\n\n function renderHeader() {\n return (\n
\n \n
{lang('NewPoll')}
\n \n {lang('Create')}\n \n
\n );\n }\n\n function renderOptions() {\n return options.map((option, index) => (\n
\n updateOption(index, e.currentTarget.value)}\n onKeyPress={handleKeyPress}\n />\n {index !== options.length - 1 && (\n removeOption(index)}\n >\n \n \n )}\n
\n ));\n }\n\n function renderRadioOptions() {\n return renderOptions()\n .map((label, index) => ({ value: String(index), label, hidden: index === options.length - 1 }));\n }\n\n function renderQuizNoOptionError() {\n const optionsTrimmed = options.map((o) => o.trim()).filter((o) => o.length);\n\n return isQuizMode && (!correctOption || !optionsTrimmed[Number(correctOption)]) && (\n

{lang('lng_polls_choose_correct')}

\n );\n }\n\n return (\n \n \n
\n\n
\n

{lang('PollOptions')}

\n\n {hasErrors && renderQuizNoOptionError()}\n {isQuizMode ? (\n \n ) : (\n renderOptions()\n )}\n\n
\n\n
\n\n
\n {!shouldBeAnonimous && (\n \n )}\n \n \n {isQuizMode && (\n <>\n

{lang('lng_polls_solution_title')}

\n setSolution(e.currentTarget.innerHTML)}\n />\n
{lang('CreatePoll.ExplanationInfo')}
\n \n )}\n
\n \n );\n};\n\nexport default memo(PollModal);\n","import React, { FC, memo, useCallback } from '../../../lib/teact/teact';\n\nimport { IS_EMOJI_SUPPORTED } from '../../../util/environment';\n\nimport './EmojiButton.scss';\n\ntype OwnProps = {\n emoji: Emoji;\n focus?: boolean;\n onClick: (emoji: string, name: string) => void;\n};\n\nconst EmojiButton: FC = ({ emoji, focus, onClick }) => {\n const handleClick = useCallback((e: React.MouseEvent) => {\n // Preventing safari from losing focus on Composer MessageInput\n e.preventDefault();\n\n onClick(emoji.native, emoji.id);\n }, [emoji, onClick]);\n\n return (\n \n {IS_EMOJI_SUPPORTED\n ? emoji.native\n : {emoji.native}}\n
\n );\n};\n\nexport default memo(EmojiButton);\n","import React, { FC, memo, useRef } from '../../../lib/teact/teact';\n\nimport { IS_SINGLE_COLUMN_LAYOUT } from '../../../util/environment';\nimport buildClassName from '../../../util/buildClassName';\nimport windowSize from '../../../util/windowSize';\nimport { ObserveFn, useOnIntersect } from '../../../hooks/useIntersectionObserver';\nimport useMediaTransition from '../../../hooks/useMediaTransition';\nimport useLang from '../../../hooks/useLang';\n\nimport EmojiButton from './EmojiButton';\n\nconst EMOJIS_PER_ROW_ON_DESKTOP = 9;\nconst EMOJI_MARGIN = 4;\nconst MOBILE_CONTAINER_PADDING = 8;\nconst EMOJI_SIZE = 40;\n\ntype OwnProps = {\n category: EmojiCategory;\n index: number;\n allEmojis: AllEmojis;\n observeIntersection: ObserveFn;\n shouldRender: boolean;\n onEmojiSelect: (emoji: string, name: string) => void;\n};\n\nconst EmojiCategory: FC = ({\n category, index, allEmojis, observeIntersection, shouldRender, onEmojiSelect,\n}) => {\n // eslint-disable-next-line no-null/no-null\n const ref = useRef(null);\n\n useOnIntersect(ref, observeIntersection);\n\n const transitionClassNames = useMediaTransition(shouldRender);\n\n const lang = useLang();\n\n const emojisPerRow = IS_SINGLE_COLUMN_LAYOUT\n ? Math.floor((windowSize.get().width - MOBILE_CONTAINER_PADDING) / (EMOJI_SIZE + EMOJI_MARGIN))\n : EMOJIS_PER_ROW_ON_DESKTOP;\n const height = Math.ceil(category.emojis.length / emojisPerRow) * (EMOJI_SIZE + EMOJI_MARGIN);\n\n return (\n \n

\n {lang(category.id === 'recent' ? 'RecentStickers' : `Emoji${index}`)}\n

\n \n {shouldRender && category.emojis.map((name) => {\n const emoji = allEmojis[name];\n // Recent emojis may contain emoticons that are no longer in the list\n if (!emoji) {\n return undefined;\n }\n // Some emojis have multiple skins and are represented as an Object with emojis for all skins.\n // For now, we select only the first emoji with 'neutral' skin.\n const displayedEmoji = 'id' in emoji ? emoji : emoji[1];\n\n return (\n \n );\n })}\n
\n \n );\n};\n\nexport default memo(EmojiCategory);\n","import React, {\n FC, useState, useEffect, memo, useRef, useMemo, useCallback,\n} from '../../../lib/teact/teact';\nimport { withGlobal } from '../../../global';\n\nimport { GlobalState } from '../../../global/types';\n\nimport { MENU_TRANSITION_DURATION } from '../../../config';\nimport { IS_SINGLE_COLUMN_LAYOUT, IS_TOUCH_ENV } from '../../../util/environment';\nimport { MEMO_EMPTY_ARRAY } from '../../../util/memo';\nimport {\n EmojiModule,\n EmojiRawData,\n EmojiData,\n uncompressEmoji,\n} from '../../../util/emoji';\nimport fastSmoothScroll from '../../../util/fastSmoothScroll';\nimport buildClassName from '../../../util/buildClassName';\nimport { pick } from '../../../util/iteratees';\nimport fastSmoothScrollHorizontal from '../../../util/fastSmoothScrollHorizontal';\nimport useAsyncRendering from '../../right/hooks/useAsyncRendering';\nimport { useIntersectionObserver } from '../../../hooks/useIntersectionObserver';\nimport useHorizontalScroll from '../../../hooks/useHorizontalScroll';\nimport useLang from '../../../hooks/useLang';\n\nimport Button from '../../ui/Button';\nimport Loading from '../../ui/Loading';\nimport EmojiCategory from './EmojiCategory';\n\nimport './EmojiPicker.scss';\n\ntype OwnProps = {\n className?: string;\n onEmojiSelect: (emoji: string, name: string) => void;\n};\n\ntype StateProps = Pick;\ntype EmojiCategoryData = { id: string; name: string; emojis: string[] };\n\nconst ICONS_BY_CATEGORY: Record = {\n recent: 'icon-recent',\n people: 'icon-smile',\n nature: 'icon-animals',\n foods: 'icon-eats',\n activity: 'icon-sport',\n places: 'icon-car',\n objects: 'icon-lamp',\n symbols: 'icon-language',\n flags: 'icon-flag',\n};\n\nconst OPEN_ANIMATION_DELAY = 200;\n// Only a few categories are above this height.\nconst SMOOTH_SCROLL_DISTANCE = 800;\nconst FOCUS_MARGIN = 50;\nconst HEADER_BUTTON_WIDTH = 42; // px. Includes margins\nconst INTERSECTION_THROTTLE = 200;\n\nconst categoryIntersections: boolean[] = [];\n\nlet emojiDataPromise: Promise;\nlet emojiRawData: EmojiRawData;\nlet emojiData: EmojiData;\n\nconst EmojiPicker: FC = ({\n className, onEmojiSelect, recentEmojis,\n}) => {\n // eslint-disable-next-line no-null/no-null\n const containerRef = useRef(null);\n // eslint-disable-next-line no-null/no-null\n const headerRef = useRef(null);\n\n const [categories, setCategories] = useState();\n const [emojis, setEmojis] = useState();\n const [activeCategoryIndex, setActiveCategoryIndex] = useState(0);\n\n const { observe: observeIntersection } = useIntersectionObserver({\n rootRef: containerRef,\n throttleMs: INTERSECTION_THROTTLE,\n }, (entries) => {\n entries.forEach((entry) => {\n const { id } = entry.target as HTMLDivElement;\n if (!id || !id.startsWith('emoji-category-')) {\n return;\n }\n\n const index = Number(id.replace('emoji-category-', ''));\n categoryIntersections[index] = entry.isIntersecting;\n });\n\n const intersectingWithIndexes = categoryIntersections\n .map((isIntersecting, index) => ({ index, isIntersecting }))\n .filter(({ isIntersecting }) => isIntersecting);\n\n if (!intersectingWithIndexes.length) {\n return;\n }\n\n setActiveCategoryIndex(intersectingWithIndexes[Math.floor(intersectingWithIndexes.length / 2)].index);\n });\n\n useHorizontalScroll(headerRef.current, !IS_SINGLE_COLUMN_LAYOUT);\n\n // Scroll header when active set updates\n useEffect(() => {\n if (!categories) {\n return;\n }\n\n const header = headerRef.current;\n if (!header) {\n return;\n }\n\n const newLeft = activeCategoryIndex * HEADER_BUTTON_WIDTH - header.offsetWidth / 2 + HEADER_BUTTON_WIDTH / 2;\n\n fastSmoothScrollHorizontal(header, newLeft);\n }, [categories, activeCategoryIndex]);\n\n const lang = useLang();\n\n const allCategories = useMemo(() => {\n if (!categories) {\n return MEMO_EMPTY_ARRAY;\n }\n const themeCategories = [...categories];\n if (recentEmojis?.length) {\n themeCategories.unshift({\n id: 'recent',\n name: lang('RecentStickers'),\n emojis: recentEmojis,\n });\n }\n\n return themeCategories;\n }, [categories, lang, recentEmojis]);\n\n // Initialize data on first render.\n useEffect(() => {\n setTimeout(() => {\n const exec = () => {\n setCategories(emojiData.categories);\n\n setEmojis(emojiData.emojis as AllEmojis);\n };\n\n if (emojiData) {\n exec();\n } else {\n ensureEmojiData()\n .then(exec);\n }\n }, OPEN_ANIMATION_DELAY);\n }, []);\n\n const selectCategory = useCallback((index: number) => {\n setActiveCategoryIndex(index);\n const categoryEl = document.getElementById(`emoji-category-${index}`)!;\n fastSmoothScroll(containerRef.current!, categoryEl, 'start', FOCUS_MARGIN, SMOOTH_SCROLL_DISTANCE);\n }, []);\n\n const handleEmojiSelect = useCallback((emoji: string, name: string) => {\n onEmojiSelect(emoji, name);\n }, [onEmojiSelect]);\n\n const canRenderContents = useAsyncRendering([], MENU_TRANSITION_DURATION);\n\n function renderCategoryButton(category: EmojiCategoryData, index: number) {\n const icon = ICONS_BY_CATEGORY[category.id];\n\n return icon && (\n selectCategory(index)}\n ariaLabel={category.name}\n >\n \n \n );\n }\n\n const containerClassName = buildClassName('EmojiPicker', className);\n\n if (!emojis || !canRenderContents) {\n return (\n
\n \n
\n );\n }\n\n return (\n
\n
\n {allCategories.map(renderCategoryButton)}\n
\n \n {allCategories.map((category, i) => (\n = i - 1 && activeCategoryIndex <= i + 1}\n onEmojiSelect={handleEmojiSelect}\n />\n ))}\n
\n \n );\n};\n\nasync function ensureEmojiData() {\n if (!emojiDataPromise) {\n emojiDataPromise = import('emoji-data-ios/emoji-data.json') as unknown as Promise;\n emojiRawData = (await emojiDataPromise).default;\n\n emojiData = uncompressEmoji(emojiRawData);\n }\n\n return emojiDataPromise;\n}\n\nexport default memo(withGlobal(\n (global): StateProps => pick(global, ['recentEmojis']),\n)(EmojiPicker));\n","import React, {\n FC, memo, useMemo, useRef,\n} from '../../../lib/teact/teact';\n\nimport { ApiSticker } from '../../../api/types';\nimport { StickerSetOrRecent } from '../../../types';\nimport { ObserveFn, useOnIntersect } from '../../../hooks/useIntersectionObserver';\n\nimport { STICKER_SIZE_PICKER } from '../../../config';\nimport { IS_SINGLE_COLUMN_LAYOUT } from '../../../util/environment';\nimport windowSize from '../../../util/windowSize';\nimport buildClassName from '../../../util/buildClassName';\n\nimport useMediaTransition from '../../../hooks/useMediaTransition';\n\nimport StickerButton from '../../common/StickerButton';\n\ntype OwnProps = {\n stickerSet: StickerSetOrRecent;\n loadAndPlay: boolean;\n index: number;\n shouldRender: boolean;\n favoriteStickers?: ApiSticker[];\n isSavedMessages?: boolean;\n observeIntersection: ObserveFn;\n onStickerSelect: (sticker: ApiSticker, isSilent?: boolean, shouldSchedule?: boolean) => void;\n onStickerUnfave: (sticker: ApiSticker) => void;\n onStickerFave: (sticker: ApiSticker) => void;\n};\n\nconst STICKERS_PER_ROW_ON_DESKTOP = 5;\nconst STICKER_MARGIN = IS_SINGLE_COLUMN_LAYOUT ? 8 : 16;\nconst MOBILE_CONTAINER_PADDING = 8;\n\nconst StickerSet: FC = ({\n stickerSet,\n loadAndPlay,\n index,\n shouldRender,\n favoriteStickers,\n isSavedMessages,\n observeIntersection,\n onStickerSelect,\n onStickerUnfave,\n onStickerFave,\n}) => {\n // eslint-disable-next-line no-null/no-null\n const ref = useRef(null);\n\n useOnIntersect(ref, observeIntersection);\n\n const transitionClassNames = useMediaTransition(shouldRender);\n\n const stickersPerRow = IS_SINGLE_COLUMN_LAYOUT\n ? Math.floor((windowSize.get().width - MOBILE_CONTAINER_PADDING) / (STICKER_SIZE_PICKER + STICKER_MARGIN))\n : STICKERS_PER_ROW_ON_DESKTOP;\n const height = Math.ceil(stickerSet.count / stickersPerRow) * (STICKER_SIZE_PICKER + STICKER_MARGIN);\n\n const favoriteStickerIdsSet = useMemo(() => (\n favoriteStickers ? new Set(favoriteStickers.map(({ id }) => id)) : undefined\n ), [favoriteStickers]);\n\n return (\n \n

{stickerSet.title}

\n \n {shouldRender && stickerSet.stickers && stickerSet.stickers.map((sticker) => (\n \n ))}\n \n \n );\n};\n\nexport default memo(StickerSet);\n","import React, {\n FC, useState, useEffect, memo, useRef, useMemo, useCallback,\n} from '../../../lib/teact/teact';\nimport { getActions, withGlobal } from '../../../global';\n\nimport { ApiStickerSet, ApiSticker } from '../../../api/types';\nimport { StickerSetOrRecent } from '../../../types';\n\nimport { SLIDE_TRANSITION_DURATION, STICKER_SIZE_PICKER_HEADER } from '../../../config';\nimport { IS_TOUCH_ENV } from '../../../util/environment';\nimport { MEMO_EMPTY_ARRAY } from '../../../util/memo';\nimport fastSmoothScroll from '../../../util/fastSmoothScroll';\nimport buildClassName from '../../../util/buildClassName';\nimport fastSmoothScrollHorizontal from '../../../util/fastSmoothScrollHorizontal';\nimport { selectIsChatWithSelf } from '../../../global/selectors';\n\nimport useAsyncRendering from '../../right/hooks/useAsyncRendering';\nimport { useIntersectionObserver } from '../../../hooks/useIntersectionObserver';\nimport useHorizontalScroll from '../../../hooks/useHorizontalScroll';\nimport useLang from '../../../hooks/useLang';\nimport useSendMessageAction from '../../../hooks/useSendMessageAction';\n\nimport Loading from '../../ui/Loading';\nimport Button from '../../ui/Button';\nimport StickerButton from '../../common/StickerButton';\nimport StickerSet from './StickerSet';\nimport StickerSetCover from './StickerSetCover';\nimport StickerSetCoverAnimated from './StickerSetCoverAnimated';\n\nimport './StickerPicker.scss';\n\ntype OwnProps = {\n chatId: string;\n threadId?: number;\n className: string;\n loadAndPlay: boolean;\n canSendStickers: boolean;\n onStickerSelect: (sticker: ApiSticker, isSilent?: boolean, shouldSchedule?: boolean) => void;\n};\n\ntype StateProps = {\n recentStickers: ApiSticker[];\n favoriteStickers: ApiSticker[];\n stickerSetsById: Record;\n addedSetIds?: string[];\n shouldPlay?: boolean;\n isSavedMessages?: boolean;\n};\n\nconst SMOOTH_SCROLL_DISTANCE = 500;\nconst HEADER_BUTTON_WIDTH = 52; // px (including margin)\nconst STICKER_INTERSECTION_THROTTLE = 200;\n\nconst stickerSetIntersections: boolean[] = [];\n\nconst StickerPicker: FC = ({\n chatId,\n threadId,\n className,\n loadAndPlay,\n canSendStickers,\n recentStickers,\n favoriteStickers,\n addedSetIds,\n stickerSetsById,\n shouldPlay,\n isSavedMessages,\n onStickerSelect,\n}) => {\n const {\n loadRecentStickers,\n addRecentSticker,\n unfaveSticker,\n faveSticker,\n } = getActions();\n\n // eslint-disable-next-line no-null/no-null\n const containerRef = useRef(null);\n // eslint-disable-next-line no-null/no-null\n const headerRef = useRef(null);\n const [activeSetIndex, setActiveSetIndex] = useState(0);\n const sendMessageAction = useSendMessageAction(chatId, threadId);\n\n const { observe: observeIntersection } = useIntersectionObserver({\n rootRef: containerRef,\n throttleMs: STICKER_INTERSECTION_THROTTLE,\n }, (entries) => {\n entries.forEach((entry) => {\n const { id } = entry.target as HTMLDivElement;\n if (!id || !id.startsWith('sticker-set-')) {\n return;\n }\n\n const index = Number(id.replace('sticker-set-', ''));\n stickerSetIntersections[index] = entry.isIntersecting;\n });\n\n const intersectingWithIndexes = stickerSetIntersections\n .map((isIntersecting, index) => ({ index, isIntersecting }))\n .filter(({ isIntersecting }) => isIntersecting);\n\n if (!intersectingWithIndexes.length) {\n return;\n }\n\n setActiveSetIndex(intersectingWithIndexes[Math.floor(intersectingWithIndexes.length / 2)].index);\n });\n const { observe: observeIntersectionForCovers } = useIntersectionObserver({ rootRef: headerRef });\n\n const lang = useLang();\n\n const areAddedLoaded = Boolean(addedSetIds);\n\n const allSets = useMemo(() => {\n if (!addedSetIds) {\n return MEMO_EMPTY_ARRAY;\n }\n\n return [\n {\n id: 'recent',\n title: lang('RecentStickers'),\n stickers: recentStickers,\n count: recentStickers.length,\n },\n {\n id: 'favorite',\n title: lang('FavoriteStickers'),\n stickers: favoriteStickers,\n count: favoriteStickers.length,\n },\n ...addedSetIds.map((id) => stickerSetsById[id]).filter(Boolean),\n ];\n }, [addedSetIds, lang, recentStickers, favoriteStickers, stickerSetsById]);\n\n const noPopulatedSets = useMemo(() => (\n areAddedLoaded\n && allSets.filter((set) => set.stickers?.length).length === 0\n ), [allSets, areAddedLoaded]);\n\n useEffect(() => {\n if (loadAndPlay) {\n loadRecentStickers();\n sendMessageAction({ type: 'chooseSticker' });\n }\n }, [loadAndPlay, loadRecentStickers, sendMessageAction]);\n\n useHorizontalScroll(headerRef.current);\n\n // Scroll container and header when active set changes\n useEffect(() => {\n if (!areAddedLoaded) {\n return;\n }\n\n const header = headerRef.current;\n if (!header) {\n return;\n }\n\n const newLeft = activeSetIndex * HEADER_BUTTON_WIDTH - (header.offsetWidth / 2 - HEADER_BUTTON_WIDTH / 2);\n\n fastSmoothScrollHorizontal(header, newLeft);\n }, [areAddedLoaded, activeSetIndex]);\n\n const selectStickerSet = useCallback((index: number) => {\n setActiveSetIndex(index);\n const stickerSetEl = document.getElementById(`sticker-set-${index}`)!;\n fastSmoothScroll(containerRef.current!, stickerSetEl, 'start', undefined, SMOOTH_SCROLL_DISTANCE);\n }, []);\n\n const handleStickerSelect = useCallback((sticker: ApiSticker, isSilent?: boolean, shouldSchedule?: boolean) => {\n onStickerSelect(sticker, isSilent, shouldSchedule);\n addRecentSticker({ sticker });\n }, [addRecentSticker, onStickerSelect]);\n\n const handleStickerUnfave = useCallback((sticker: ApiSticker) => {\n unfaveSticker({ sticker });\n }, [unfaveSticker]);\n\n const handleStickerFave = useCallback((sticker: ApiSticker) => {\n faveSticker({ sticker });\n }, [faveSticker]);\n\n const handleMouseMove = useCallback(() => {\n sendMessageAction({ type: 'chooseSticker' });\n }, [sendMessageAction]);\n\n const canRenderContents = useAsyncRendering([], SLIDE_TRANSITION_DURATION);\n\n function renderCover(stickerSet: StickerSetOrRecent, index: number) {\n const firstSticker = stickerSet.stickers?.[0];\n const buttonClassName = buildClassName(\n 'symbol-set-button sticker-set-button',\n index === activeSetIndex && 'activated',\n );\n\n if (stickerSet.id === 'recent' || stickerSet.id === 'favorite' || stickerSet.hasThumbnail || !firstSticker) {\n return (\n selectStickerSet(index)}\n >\n {stickerSet.id === 'recent' ? (\n \n ) : stickerSet.id === 'favorite' ? (\n \n ) : stickerSet.isLottie ? (\n \n ) : (\n \n )}\n \n );\n } else {\n return (\n \n );\n }\n }\n\n const fullClassName = buildClassName('StickerPicker', className);\n\n if (!areAddedLoaded || !canRenderContents || noPopulatedSets || !canSendStickers) {\n return (\n
\n {!canSendStickers ? (\n
{lang('ErrorSendRestrictedStickersAll')}
\n ) : noPopulatedSets ? (\n
{lang('NoStickers')}
\n ) : (\n \n )}\n
\n );\n }\n\n return (\n
\n \n {allSets.map(renderCover)}\n
\n \n {allSets.map((stickerSet, i) => (\n = i - 1 && activeSetIndex <= i + 1}\n onStickerSelect={handleStickerSelect}\n onStickerUnfave={handleStickerUnfave}\n onStickerFave={handleStickerFave}\n favoriteStickers={favoriteStickers}\n isSavedMessages={isSavedMessages}\n />\n ))}\n \n \n );\n};\n\nexport default memo(withGlobal(\n (global, { chatId }): StateProps => {\n const {\n setsById,\n added,\n recent,\n favorite,\n } = global.stickers;\n\n const isSavedMessages = selectIsChatWithSelf(global, chatId);\n\n return {\n recentStickers: recent.stickers,\n favoriteStickers: favorite.stickers,\n stickerSetsById: setsById,\n addedSetIds: added.setIds,\n shouldPlay: global.settings.byKey.shouldLoopStickers,\n isSavedMessages,\n };\n },\n)(StickerPicker));\n","import React, {\n FC, memo, useCallback, useEffect, useRef,\n} from '../../lib/teact/teact';\n\nimport { ApiMediaFormat, ApiVideo } from '../../api/types';\n\nimport { IS_TOUCH_ENV } from '../../util/environment';\nimport buildClassName from '../../util/buildClassName';\nimport { ObserveFn, useIsIntersecting } from '../../hooks/useIntersectionObserver';\nimport { preventMessageInputBlurWithBubbling } from '../middle/helpers/preventMessageInputBlur';\n\nimport useMedia from '../../hooks/useMedia';\nimport useVideoCleanup from '../../hooks/useVideoCleanup';\nimport useBuffering from '../../hooks/useBuffering';\nimport useCanvasBlur from '../../hooks/useCanvasBlur';\nimport useLang from '../../hooks/useLang';\nimport useContextMenuPosition from '../../hooks/useContextMenuPosition';\nimport useContextMenuHandlers from '../../hooks/useContextMenuHandlers';\n\nimport Spinner from '../ui/Spinner';\nimport Button from '../ui/Button';\nimport Menu from '../ui/Menu';\nimport MenuItem from '../ui/MenuItem';\n\nimport './GifButton.scss';\n\ntype OwnProps = {\n gif: ApiVideo;\n observeIntersection: ObserveFn;\n isDisabled?: boolean;\n className?: string;\n onClick?: (gif: ApiVideo, isSilent?: boolean, shouldSchedule?: boolean) => void;\n onUnsaveClick?: (gif: ApiVideo) => void;\n isSavedMessages?: boolean;\n};\n\nconst GifButton: FC = ({\n gif,\n isDisabled,\n className,\n observeIntersection,\n onClick,\n onUnsaveClick,\n isSavedMessages,\n}) => {\n // eslint-disable-next-line no-null/no-null\n const ref = useRef(null);\n // eslint-disable-next-line no-null/no-null\n const videoRef = useRef(null);\n\n const lang = useLang();\n\n const hasThumbnail = Boolean(gif.thumbnail?.dataUri);\n const localMediaHash = `gif${gif.id}`;\n const isIntersecting = useIsIntersecting(ref, observeIntersection);\n const loadAndPlay = isIntersecting && !isDisabled;\n const previewBlobUrl = useMedia(`${localMediaHash}?size=m`, !loadAndPlay, ApiMediaFormat.BlobUrl);\n const thumbRef = useCanvasBlur(gif.thumbnail?.dataUri, Boolean(previewBlobUrl));\n const videoData = useMedia(localMediaHash, !loadAndPlay, ApiMediaFormat.BlobUrl);\n const shouldRenderVideo = Boolean(loadAndPlay && videoData);\n const { isBuffered, bufferingHandlers } = useBuffering(true);\n const shouldRenderSpinner = loadAndPlay && !isBuffered;\n const isVideoReady = loadAndPlay && isBuffered;\n\n useVideoCleanup(videoRef, [shouldRenderVideo]);\n\n const {\n isContextMenuOpen, contextMenuPosition,\n handleBeforeContextMenu, handleContextMenu,\n handleContextMenuClose, handleContextMenuHide,\n } = useContextMenuHandlers(ref);\n\n const getTriggerElement = useCallback(() => ref.current, []);\n\n const getRootElement = useCallback(\n () => ref.current!.closest('.custom-scroll, .no-scrollbar'),\n [],\n );\n\n const getMenuElement = useCallback(\n () => ref.current!.querySelector('.gif-context-menu .bubble'),\n [],\n );\n\n const {\n positionX, positionY, transformOriginX, transformOriginY, style: menuStyle,\n } = useContextMenuPosition(\n contextMenuPosition,\n getTriggerElement,\n getRootElement,\n getMenuElement,\n );\n\n const handleClick = useCallback(() => {\n if (isContextMenuOpen || !onClick) return;\n onClick({\n ...gif,\n blobUrl: videoData,\n });\n }, [isContextMenuOpen, onClick, gif, videoData]);\n\n const handleUnsaveClick = useCallback((e: React.MouseEvent) => {\n e.stopPropagation();\n e.preventDefault();\n onUnsaveClick!(gif);\n }, [onUnsaveClick, gif]);\n\n const handleContextDelete = useCallback(() => {\n onUnsaveClick?.(gif);\n }, [gif, onUnsaveClick]);\n\n const handleSendQuiet = useCallback(() => {\n onClick!({\n ...gif,\n blobUrl: videoData,\n }, true);\n }, [gif, onClick, videoData]);\n\n const handleSendScheduled = useCallback(() => {\n onClick!({\n ...gif,\n blobUrl: videoData,\n }, undefined, true);\n }, [gif, onClick, videoData]);\n\n const handleMouseDown = useCallback((e: React.MouseEvent) => {\n preventMessageInputBlurWithBubbling(e);\n handleBeforeContextMenu(e);\n }, [handleBeforeContextMenu]);\n\n useEffect(() => {\n if (isDisabled) handleContextMenuClose();\n }, [handleContextMenuClose, isDisabled]);\n\n const fullClassName = buildClassName(\n 'GifButton',\n gif.width && gif.height && gif.width < gif.height ? 'vertical' : 'horizontal',\n onClick && 'interactive',\n localMediaHash,\n className,\n );\n\n return (\n \n {!IS_TOUCH_ENV && onUnsaveClick && (\n \n \n \n )}\n {hasThumbnail && (\n \n )}\n {previewBlobUrl && !isVideoReady && (\n \n )}\n {shouldRenderVideo && (\n \n \n \n )}\n {shouldRenderSpinner && (\n \n )}\n {onClick && contextMenuPosition !== undefined && (\n \n {!isSavedMessages && {lang('SendWithoutSound')}}\n \n {lang(isSavedMessages ? 'SetReminder' : 'ScheduleMessage')}\n \n {onUnsaveClick && (\n {lang('Delete')}\n )}\n \n )}\n \n );\n};\n\nexport default memo(GifButton);\n","import React, {\n FC, useEffect, memo, useRef, useCallback,\n} from '../../../lib/teact/teact';\nimport { getActions, withGlobal } from '../../../global';\n\nimport { ApiVideo } from '../../../api/types';\n\nimport { SLIDE_TRANSITION_DURATION } from '../../../config';\nimport { IS_TOUCH_ENV } from '../../../util/environment';\nimport buildClassName from '../../../util/buildClassName';\nimport { selectCurrentMessageList, selectIsChatWithSelf } from '../../../global/selectors';\n\nimport { useIntersectionObserver } from '../../../hooks/useIntersectionObserver';\nimport useAsyncRendering from '../../right/hooks/useAsyncRendering';\n\nimport Loading from '../../ui/Loading';\nimport GifButton from '../../common/GifButton';\n\nimport './GifPicker.scss';\n\ntype OwnProps = {\n className: string;\n loadAndPlay: boolean;\n canSendGifs: boolean;\n onGifSelect: (gif: ApiVideo, isSilent?: boolean, shouldSchedule?: boolean) => void;\n};\n\ntype StateProps = {\n savedGifs?: ApiVideo[];\n isSavedMessages?: boolean;\n};\n\nconst INTERSECTION_DEBOUNCE = 300;\n\nconst GifPicker: FC = ({\n className,\n loadAndPlay,\n canSendGifs,\n savedGifs,\n isSavedMessages,\n onGifSelect,\n}) => {\n const { loadSavedGifs, saveGif } = getActions();\n\n // eslint-disable-next-line no-null/no-null\n const containerRef = useRef(null);\n\n const {\n observe: observeIntersection,\n } = useIntersectionObserver({ rootRef: containerRef, debounceMs: INTERSECTION_DEBOUNCE });\n\n useEffect(() => {\n if (loadAndPlay) {\n loadSavedGifs();\n }\n }, [loadAndPlay, loadSavedGifs]);\n\n const handleUnsaveClick = useCallback((gif: ApiVideo) => {\n saveGif({ gif, shouldUnsave: true });\n }, [saveGif]);\n\n const canRenderContents = useAsyncRendering([], SLIDE_TRANSITION_DURATION);\n\n return (\n \n {!canSendGifs ? (\n
Sending GIFs is not allowed in this chat.
\n ) : canRenderContents && savedGifs && savedGifs.length ? (\n savedGifs.map((gif) => (\n \n ))\n ) : canRenderContents && savedGifs ? (\n
No saved GIFs.
\n ) : (\n \n )}\n \n );\n};\n\nexport default memo(withGlobal(\n (global): StateProps => {\n const { chatId } = selectCurrentMessageList(global) || {};\n const isSavedMessages = Boolean(chatId) && selectIsChatWithSelf(global, chatId);\n return {\n savedGifs: global.gifs.saved.gifs,\n isSavedMessages,\n };\n },\n)(GifPicker));\n","import React, { FC, memo, useCallback } from '../../../lib/teact/teact';\n\nimport useLang from '../../../hooks/useLang';\n\nimport Button from '../../ui/Button';\n\ntype OwnProps = {\n activeTab: SymbolMenuTabs;\n onSwitchTab: (tab: SymbolMenuTabs) => void;\n onRemoveSymbol: () => void;\n onSearchOpen: (type: 'stickers' | 'gifs') => void;\n};\n\nexport enum SymbolMenuTabs {\n 'Emoji',\n 'Stickers',\n 'GIFs',\n}\n\n// Getting enum string values for display in Tabs.\n// See: https://www.typescriptlang.org/docs/handbook/enums.html#reverse-mappings\nexport const SYMBOL_MENU_TAB_TITLES = Object.values(SymbolMenuTabs)\n .filter((value): value is string => typeof value === 'string');\n\nconst SYMBOL_MENU_TAB_ICONS = {\n [SymbolMenuTabs.Emoji]: 'icon-smile',\n [SymbolMenuTabs.Stickers]: 'icon-stickers',\n [SymbolMenuTabs.GIFs]: 'icon-gifs',\n};\n\nconst SymbolMenuFooter: FC = ({\n activeTab, onSwitchTab, onRemoveSymbol, onSearchOpen,\n}) => {\n const lang = useLang();\n\n function renderTabButton(tab: SymbolMenuTabs) {\n return (\n onSwitchTab(tab)}\n ariaLabel={SYMBOL_MENU_TAB_TITLES[tab]}\n round\n faded\n color=\"translucent\"\n >\n \n \n );\n }\n\n const handleSearchOpen = useCallback(() => {\n onSearchOpen(activeTab === SymbolMenuTabs.Stickers ? 'stickers' : 'gifs');\n }, [activeTab, onSearchOpen]);\n\n function stopPropagation(event: any) {\n event.stopPropagation();\n }\n\n return (\n
\n {activeTab !== SymbolMenuTabs.Emoji && (\n \n \n \n )}\n\n {renderTabButton(SymbolMenuTabs.Emoji)}\n {renderTabButton(SymbolMenuTabs.Stickers)}\n {renderTabButton(SymbolMenuTabs.GIFs)}\n\n {activeTab === SymbolMenuTabs.Emoji && (\n \n \n \n )}\n
\n );\n};\n\nexport default memo(SymbolMenuFooter);\n","import React, {\n FC, memo, useCallback, useEffect, useLayoutEffect, useRef, useState,\n} from '../../../lib/teact/teact';\nimport { withGlobal } from '../../../global';\n\nimport { ApiSticker, ApiVideo } from '../../../api/types';\n\nimport { IS_SINGLE_COLUMN_LAYOUT, IS_TOUCH_ENV } from '../../../util/environment';\nimport { fastRaf } from '../../../util/schedulers';\nimport buildClassName from '../../../util/buildClassName';\nimport useShowTransition from '../../../hooks/useShowTransition';\nimport useMouseInside from '../../../hooks/useMouseInside';\nimport useLang from '../../../hooks/useLang';\n\nimport Button from '../../ui/Button';\nimport Menu from '../../ui/Menu';\nimport Transition from '../../ui/Transition';\nimport EmojiPicker from './EmojiPicker';\nimport StickerPicker from './StickerPicker';\nimport GifPicker from './GifPicker';\nimport SymbolMenuFooter, { SYMBOL_MENU_TAB_TITLES, SymbolMenuTabs } from './SymbolMenuFooter';\nimport Portal from '../../ui/Portal';\n\nimport './SymbolMenu.scss';\n\nconst ANIMATION_DURATION = 350;\n\nexport type OwnProps = {\n chatId: string;\n threadId?: number;\n isOpen: boolean;\n canSendStickers: boolean;\n canSendGifs: boolean;\n onLoad: () => void;\n onClose: () => void;\n onEmojiSelect: (emoji: string) => void;\n onStickerSelect: (\n sticker: ApiSticker, isSilent?: boolean, shouldSchedule?: boolean, shouldPreserveInput?: boolean\n ) => void;\n onGifSelect: (gif: ApiVideo, isSilent?: boolean, shouldSchedule?: boolean) => void;\n onRemoveSymbol: () => void;\n onSearchOpen: (type: 'stickers' | 'gifs') => void;\n addRecentEmoji: AnyToVoidFunction;\n};\n\ntype StateProps = {\n isLeftColumnShown: boolean;\n};\n\nlet isActivated = false;\n\nconst SymbolMenu: FC = ({\n chatId,\n threadId,\n isOpen,\n canSendStickers,\n canSendGifs,\n isLeftColumnShown,\n onLoad,\n onClose,\n onEmojiSelect,\n onStickerSelect,\n onGifSelect,\n onRemoveSymbol,\n onSearchOpen,\n addRecentEmoji,\n}) => {\n const [activeTab, setActiveTab] = useState(0);\n const [recentEmojis, setRecentEmojis] = useState([]);\n\n const [handleMouseEnter, handleMouseLeave] = useMouseInside(isOpen, onClose, undefined, IS_SINGLE_COLUMN_LAYOUT);\n const { shouldRender, transitionClassNames } = useShowTransition(isOpen, onClose, false, false);\n\n if (!isActivated && isOpen) {\n isActivated = true;\n }\n\n useEffect(() => {\n onLoad();\n }, [onLoad]);\n\n useLayoutEffect(() => {\n if (!IS_SINGLE_COLUMN_LAYOUT) {\n return undefined;\n }\n\n if (isOpen) {\n document.body.classList.add('enable-symbol-menu-transforms');\n document.body.classList.add('is-symbol-menu-open');\n }\n\n return () => {\n if (isOpen) {\n fastRaf(() => {\n document.body.classList.remove('is-symbol-menu-open');\n setTimeout(() => {\n document.body.classList.remove('enable-symbol-menu-transforms');\n }, ANIMATION_DURATION);\n });\n }\n };\n }, [isOpen]);\n\n const recentEmojisRef = useRef(recentEmojis);\n recentEmojisRef.current = recentEmojis;\n useEffect(() => {\n if (!recentEmojisRef.current.length) {\n return;\n }\n\n recentEmojisRef.current.forEach((name) => {\n addRecentEmoji({ emoji: name });\n });\n\n setRecentEmojis([]);\n }, [isOpen, activeTab, addRecentEmoji]);\n\n const handleEmojiSelect = useCallback((emoji: string, name: string) => {\n setRecentEmojis((emojis) => {\n return [...emojis, name];\n });\n\n onEmojiSelect(emoji);\n }, [onEmojiSelect]);\n\n const handleSearch = useCallback((type: 'stickers' | 'gifs') => {\n onClose();\n onSearchOpen(type);\n }, [onClose, onSearchOpen]);\n\n const handleStickerSelect = useCallback((sticker: ApiSticker, isSilent?: boolean, shouldSchedule?: boolean) => {\n onStickerSelect(sticker, isSilent, shouldSchedule, true);\n }, [onStickerSelect]);\n\n const lang = useLang();\n\n function renderContent(isActive: boolean, isFrom: boolean) {\n switch (activeTab) {\n case SymbolMenuTabs.Emoji:\n return (\n \n );\n case SymbolMenuTabs.Stickers:\n return (\n \n );\n case SymbolMenuTabs.GIFs:\n return (\n \n );\n }\n\n return undefined;\n }\n\n function stopPropagation(event: any) {\n event.stopPropagation();\n }\n\n const content = (\n <>\n
\n {isActivated && (\n \n {renderContent}\n \n )}\n
\n {IS_SINGLE_COLUMN_LAYOUT && (\n \n \n \n )}\n \n \n );\n\n if (IS_SINGLE_COLUMN_LAYOUT) {\n if (!shouldRender) {\n return undefined;\n }\n\n const className = buildClassName(\n 'SymbolMenu mobile-menu',\n transitionClassNames,\n !isLeftColumnShown && 'middle-column-open',\n );\n\n return (\n \n
\n {content}\n
\n
\n );\n }\n\n return (\n \n {content}\n \n );\n};\n\nexport default memo(withGlobal(\n (global): StateProps => {\n return {\n isLeftColumnShown: global.isLeftColumnShown,\n };\n },\n)(SymbolMenu));\n","import React, { FC, memo } from '../../../lib/teact/teact';\n\nimport { ApiBotCommand, ApiUser } from '../../../api/types';\n\nimport renderText from '../../common/helpers/renderText';\nimport buildClassName from '../../../util/buildClassName';\n\nimport ListItem from '../../ui/ListItem';\nimport Avatar from '../../common/Avatar';\n\nimport './BotCommand.scss';\n\ntype OwnProps = {\n botCommand: ApiBotCommand;\n bot?: ApiUser;\n withAvatar?: boolean;\n focus?: boolean;\n onClick: (botCommand: ApiBotCommand) => void;\n};\n\nconst BotCommand: FC = ({\n withAvatar,\n focus,\n botCommand,\n bot,\n onClick,\n}) => {\n return (\n onClick(botCommand)}\n focus={focus}\n >\n {withAvatar && (\n \n )}\n
\n /{botCommand.command}\n {renderText(botCommand.description)}\n
\n \n );\n};\n\nexport default memo(BotCommand);\n","import React, {\n FC, useCallback, useEffect, useRef, memo,\n} from '../../../lib/teact/teact';\nimport { getActions, withGlobal } from '../../../global';\n\nimport { ApiBotCommand, ApiUser } from '../../../api/types';\n\nimport buildClassName from '../../../util/buildClassName';\nimport setTooltipItemVisible from '../../../util/setTooltipItemVisible';\nimport useShowTransition from '../../../hooks/useShowTransition';\nimport usePrevious from '../../../hooks/usePrevious';\nimport { useKeyboardNavigation } from './hooks/useKeyboardNavigation';\n\nimport BotCommand from './BotCommand';\n\nimport './BotCommandTooltip.scss';\n\nexport type OwnProps = {\n isOpen: boolean;\n withUsername?: boolean;\n botCommands?: ApiBotCommand[];\n onClick: NoneToVoidFunction;\n onClose: NoneToVoidFunction;\n};\n\ntype StateProps = {\n usersById: Record;\n};\n\nconst BotCommandTooltip: FC = ({\n usersById,\n isOpen,\n withUsername,\n botCommands,\n onClick,\n onClose,\n}) => {\n const { sendBotCommand } = getActions();\n\n // eslint-disable-next-line no-null/no-null\n const containerRef = useRef(null);\n const { shouldRender, transitionClassNames } = useShowTransition(isOpen, undefined, undefined, false);\n\n const handleSendCommand = useCallback(({ botId, command }: ApiBotCommand) => {\n const bot = usersById[botId];\n sendBotCommand({\n command: `/${command}${withUsername && bot ? `@${bot.username}` : ''}`,\n botId,\n });\n onClick();\n }, [onClick, sendBotCommand, usersById, withUsername]);\n\n const selectedCommandIndex = useKeyboardNavigation({\n isActive: isOpen,\n items: botCommands,\n onSelect: handleSendCommand,\n onClose,\n });\n\n useEffect(() => {\n if (botCommands && !botCommands.length) {\n onClose();\n }\n }, [botCommands, onClose]);\n\n useEffect(() => {\n setTooltipItemVisible('.chat-item-clickable', selectedCommandIndex, containerRef);\n }, [selectedCommandIndex]);\n\n const prevCommands = usePrevious(botCommands && botCommands.length ? botCommands : undefined, shouldRender);\n const renderedCommands = botCommands && !botCommands.length ? prevCommands : botCommands;\n\n if (!shouldRender || (renderedCommands && !renderedCommands.length)) {\n return undefined;\n }\n\n const className = buildClassName(\n 'BotCommandTooltip composer-tooltip custom-scroll',\n transitionClassNames,\n );\n\n return (\n
\n {renderedCommands && renderedCommands.map((chatBotCommand, index) => (\n \n ))}\n
\n );\n};\n\nexport default memo(withGlobal(\n (global): StateProps => ({\n usersById: global.users.byId,\n }),\n)(BotCommandTooltip));\n","import React, { FC, memo, useCallback } from '../../../lib/teact/teact';\n\nimport { ApiBotCommand } from '../../../api/types';\n\nimport { IS_SINGLE_COLUMN_LAYOUT, IS_TOUCH_ENV } from '../../../util/environment';\nimport useMouseInside from '../../../hooks/useMouseInside';\n\nimport Menu from '../../ui/Menu';\nimport BotCommand from './BotCommand';\n\nimport './BotCommandMenu.scss';\nimport { getActions } from '../../../global';\n\nexport type OwnProps = {\n isOpen: boolean;\n botCommands: ApiBotCommand[];\n onClose: NoneToVoidFunction;\n};\n\nconst BotCommandMenu: FC = ({\n isOpen, botCommands, onClose,\n}) => {\n const { sendBotCommand } = getActions();\n\n const [handleMouseEnter, handleMouseLeave] = useMouseInside(isOpen, onClose, undefined, IS_SINGLE_COLUMN_LAYOUT);\n\n const handleClick = useCallback((botCommand: ApiBotCommand) => {\n sendBotCommand({\n command: `/${botCommand.command}`,\n botId: botCommand.botId,\n });\n onClose();\n }, [onClose, sendBotCommand]);\n\n return (\n \n {botCommands.map((botCommand) => (\n \n ))}\n \n );\n};\n\nexport default memo(BotCommandMenu);\n","import React, {\n FC, memo, useEffect, useRef,\n} from '../../../lib/teact/teact';\nimport { getActions, withGlobal } from '../../../global';\n\nimport { ApiSticker } from '../../../api/types';\n\nimport { STICKER_SIZE_PICKER } from '../../../config';\nimport buildClassName from '../../../util/buildClassName';\nimport captureEscKeyListener from '../../../util/captureEscKeyListener';\nimport { useIntersectionObserver } from '../../../hooks/useIntersectionObserver';\nimport useShowTransition from '../../../hooks/useShowTransition';\nimport usePrevious from '../../../hooks/usePrevious';\nimport useSendMessageAction from '../../../hooks/useSendMessageAction';\nimport { selectIsChatWithSelf } from '../../../global/selectors';\n\nimport Loading from '../../ui/Loading';\nimport StickerButton from '../../common/StickerButton';\n\nimport './StickerTooltip.scss';\n\nexport type OwnProps = {\n chatId: string;\n threadId?: number;\n isOpen: boolean;\n onStickerSelect: (sticker: ApiSticker, isSilent?: boolean, shouldSchedule?: boolean) => void;\n};\n\ntype StateProps = {\n stickers?: ApiSticker[];\n isSavedMessages?: boolean;\n};\n\nconst INTERSECTION_THROTTLE = 200;\n\nconst StickerTooltip: FC = ({\n chatId,\n threadId,\n isOpen,\n stickers,\n isSavedMessages,\n onStickerSelect,\n}) => {\n const { clearStickersForEmoji } = getActions();\n\n // eslint-disable-next-line no-null/no-null\n const containerRef = useRef(null);\n const { shouldRender, transitionClassNames } = useShowTransition(isOpen, undefined, undefined, false);\n const prevStickers = usePrevious(stickers, true);\n const displayedStickers = stickers || prevStickers;\n const sendMessageAction = useSendMessageAction(chatId, threadId);\n\n const {\n observe: observeIntersection,\n } = useIntersectionObserver({ rootRef: containerRef, throttleMs: INTERSECTION_THROTTLE });\n\n useEffect(() => (isOpen ? captureEscKeyListener(clearStickersForEmoji) : undefined), [isOpen, clearStickersForEmoji]);\n\n const handleMouseMove = () => {\n sendMessageAction({ type: 'chooseSticker' });\n };\n\n const className = buildClassName(\n 'StickerTooltip composer-tooltip custom-scroll',\n transitionClassNames,\n !(displayedStickers?.length) && 'hidden',\n );\n\n return (\n \n {shouldRender && displayedStickers ? (\n displayedStickers.map((sticker) => (\n \n ))\n ) : shouldRender ? (\n \n ) : undefined}\n \n );\n};\n\nexport default memo(withGlobal(\n (global, { chatId }): StateProps => {\n const { stickers } = global.stickers.forEmoji;\n const isSavedMessages = selectIsChatWithSelf(global, chatId);\n\n return { stickers, isSavedMessages };\n },\n)(StickerTooltip));\n","import React, { FC, memo } from '../../../lib/teact/teact';\n\nimport { IS_TOUCH_ENV } from '../../../util/environment';\nimport useMouseInside from '../../../hooks/useMouseInside';\nimport useLang from '../../../hooks/useLang';\n\nimport Menu from '../../ui/Menu';\nimport MenuItem from '../../ui/MenuItem';\n\nimport './CustomSendMenu.scss';\n\nexport type OwnProps = {\n isOpen: boolean;\n isOpenToBottom?: boolean;\n isSavedMessages?: boolean;\n onSendSilent?: NoneToVoidFunction;\n onSendSchedule?: NoneToVoidFunction;\n onClose: NoneToVoidFunction;\n onCloseAnimationEnd?: NoneToVoidFunction;\n};\n\nconst CustomSendMenu: FC = ({\n isOpen,\n isOpenToBottom = false,\n isSavedMessages,\n onSendSilent,\n onSendSchedule,\n onClose,\n onCloseAnimationEnd,\n}) => {\n const [handleMouseEnter, handleMouseLeave] = useMouseInside(isOpen, onClose);\n\n const lang = useLang();\n\n return (\n \n {onSendSilent && {lang('SendWithoutSound')}}\n {onSendSchedule && (\n \n {lang(isSavedMessages ? 'SetReminder' : 'ScheduleMessage')}\n \n )}\n \n );\n};\n\nexport default memo(CustomSendMenu);\n","import React, {\n FC, memo, useCallback, useEffect, useRef,\n} from '../../../lib/teact/teact';\n\nimport buildClassName from '../../../util/buildClassName';\nimport findInViewport from '../../../util/findInViewport';\nimport isFullyVisible from '../../../util/isFullyVisible';\nimport fastSmoothScrollHorizontal from '../../../util/fastSmoothScrollHorizontal';\nimport useShowTransition from '../../../hooks/useShowTransition';\nimport usePrevDuringAnimation from '../../../hooks/usePrevDuringAnimation';\nimport { useKeyboardNavigation } from './hooks/useKeyboardNavigation';\n\nimport Loading from '../../ui/Loading';\nimport EmojiButton from './EmojiButton';\n\nimport './EmojiTooltip.scss';\n\nconst VIEWPORT_MARGIN = 8;\nconst EMOJI_BUTTON_WIDTH = 44;\nconst CLOSE_DURATION = 350;\n\nfunction setItemVisible(index: number, containerRef: Record) {\n const container = containerRef.current!;\n if (!container) {\n return;\n }\n\n const { visibleIndexes, allElements } = findInViewport(\n container,\n '.EmojiButton',\n VIEWPORT_MARGIN,\n true,\n true,\n true,\n );\n\n if (!allElements.length || !allElements[index]) {\n return;\n }\n const first = visibleIndexes[0];\n if (!visibleIndexes.includes(index)\n || (index === first && !isFullyVisible(container, allElements[first], true))) {\n const position = index > visibleIndexes[visibleIndexes.length - 1] ? 'start' : 'end';\n const newLeft = position === 'start' ? index * EMOJI_BUTTON_WIDTH : 0;\n\n fastSmoothScrollHorizontal(container, newLeft);\n }\n}\n\nexport type OwnProps = {\n isOpen: boolean;\n onEmojiSelect: (text: string) => void;\n onClose: NoneToVoidFunction;\n addRecentEmoji: AnyToVoidFunction;\n emojis: Emoji[];\n};\n\nconst EmojiTooltip: FC = ({\n isOpen,\n emojis,\n onClose,\n onEmojiSelect,\n addRecentEmoji,\n}) => {\n // eslint-disable-next-line no-null/no-null\n const containerRef = useRef(null);\n const { shouldRender, transitionClassNames } = useShowTransition(isOpen, undefined, undefined, false);\n const listEmojis: Emoji[] = usePrevDuringAnimation(emojis.length ? emojis : undefined, CLOSE_DURATION) || [];\n\n const handleSelectEmoji = useCallback((emoji: Emoji) => {\n onEmojiSelect(emoji.native);\n addRecentEmoji({ emoji: emoji.id });\n }, [addRecentEmoji, onEmojiSelect]);\n\n const handleClick = useCallback((native: string, id: string) => {\n onEmojiSelect(native);\n addRecentEmoji({ emoji: id });\n }, [addRecentEmoji, onEmojiSelect]);\n\n const selectedIndex = useKeyboardNavigation({\n isActive: isOpen,\n isHorizontal: true,\n items: emojis,\n onSelect: handleSelectEmoji,\n onClose,\n });\n\n useEffect(() => {\n setItemVisible(selectedIndex, containerRef);\n }, [selectedIndex]);\n\n const className = buildClassName(\n 'EmojiTooltip composer-tooltip custom-scroll-x',\n transitionClassNames,\n );\n\n return (\n \n {shouldRender && listEmojis ? (\n listEmojis.map((emoji, index) => (\n \n ))\n ) : shouldRender ? (\n \n ) : undefined}\n \n );\n};\n\nexport default memo(EmojiTooltip);\n","import React, { FC, memo } from '../../../../lib/teact/teact';\n\nimport { ApiWebDocument } from '../../../../api/types';\n\nimport { getFirstLetters } from '../../../../util/textFormat';\nimport renderText from '../../../common/helpers/renderText';\nimport useMedia from '../../../../hooks/useMedia';\n\nimport ListItem from '../../../ui/ListItem';\n\nimport './BaseResult.scss';\nimport { preventMessageInputBlurWithBubbling } from '../../helpers/preventMessageInputBlur';\n\nexport type OwnProps = {\n focus?: boolean;\n thumbnail?: ApiWebDocument;\n thumbUrl?: string;\n title?: string;\n description?: string;\n transitionClassNames?: string;\n onClick: NoneToVoidFunction;\n};\n\nconst BaseResult: FC = ({\n title,\n description,\n thumbnail,\n thumbUrl,\n focus,\n transitionClassNames = '',\n onClick,\n}) => {\n let content: string | undefined = '';\n\n const thumbnailDataUrl = useMedia(thumbnail ? `webDocument:${thumbnail.url}` : undefined);\n thumbUrl = thumbUrl || thumbnailDataUrl;\n\n if (thumbUrl) {\n content = (\n \"\"\n );\n } else if (title) {\n content = getFirstLetters(title, 1);\n }\n\n return (\n \n \n {typeof content === 'string' ? renderText(content) : content}\n \n
\n {title && (
{title}
)}\n {description && (
{description}
)}\n
\n \n );\n};\n\nexport default memo(BaseResult);\n","import React, { FC, memo, useCallback } from '../../../../lib/teact/teact';\n\nimport {\n ApiBotInlineMediaResult, ApiBotInlineResult, ApiPhoto, ApiThumbnail, ApiWebDocument,\n} from '../../../../api/types';\n\nimport buildClassName from '../../../../util/buildClassName';\nimport useMedia from '../../../../hooks/useMedia';\nimport useMediaTransition from '../../../../hooks/useMediaTransition';\n\nimport BaseResult from './BaseResult';\n\nimport './MediaResult.scss';\n\nexport type OwnProps = {\n focus?: boolean;\n isForGallery?: boolean;\n inlineResult: ApiBotInlineMediaResult | ApiBotInlineResult;\n onClick: (result: ApiBotInlineResult) => void;\n};\n\nconst MediaResult: FC = ({\n focus, isForGallery, inlineResult, onClick,\n}) => {\n let photo: ApiPhoto | undefined;\n let thumbnail: ApiThumbnail | undefined;\n let webThumbnail: ApiWebDocument | undefined;\n\n if ('photo' in inlineResult) {\n photo = inlineResult.photo;\n }\n // For results with type=video (for example @stikstokbot)\n if ('thumbnail' in inlineResult) {\n thumbnail = inlineResult.thumbnail;\n }\n if ('webThumbnail' in inlineResult && isForGallery) {\n webThumbnail = inlineResult.webThumbnail;\n }\n\n const thumbnailDataUrl = useMedia(webThumbnail ? `webDocument:${webThumbnail.url}` : undefined);\n const mediaBlobUrl = useMedia(photo && `photo${photo.id}?size=m`);\n const transitionClassNames = useMediaTransition(mediaBlobUrl);\n\n const handleClick = useCallback(() => {\n onClick(inlineResult);\n }, [inlineResult, onClick]);\n\n if (isForGallery) {\n return (\n
\n \"\"\n \"\"\n
\n );\n }\n\n const { title, description } = inlineResult;\n\n return (\n \n );\n};\n\nexport default memo(MediaResult);\n","import React, { FC, memo, useCallback } from '../../../../lib/teact/teact';\n\nimport { ApiBotInlineResult } from '../../../../api/types';\n\nimport BaseResult from './BaseResult';\n\nexport type OwnProps = {\n focus?: boolean;\n inlineResult: ApiBotInlineResult;\n onClick: (result: ApiBotInlineResult) => void;\n};\n\nconst ArticleResult: FC = ({ focus, inlineResult, onClick }) => {\n const {\n title, url, description, webThumbnail,\n } = inlineResult;\n\n const handleClick = useCallback(() => {\n onClick(inlineResult);\n }, [inlineResult, onClick]);\n\n return (\n \n );\n};\n\nexport default memo(ArticleResult);\n","import React, {\n FC, memo, useCallback,\n} from '../../../../lib/teact/teact';\n\nimport { ApiBotInlineMediaResult, ApiBotInlineResult, ApiVideo } from '../../../../api/types';\n\nimport { ObserveFn } from '../../../../hooks/useIntersectionObserver';\n\nimport GifButton from '../../../common/GifButton';\n\ntype OwnProps = {\n inlineResult: ApiBotInlineMediaResult;\n isSavedMessages?: boolean;\n canSendGifs?: boolean;\n observeIntersection: ObserveFn;\n onClick: (result: ApiBotInlineResult, isSilent?: boolean, shouldSchedule?: boolean) => void;\n};\n\nconst GifResult: FC = ({\n inlineResult, isSavedMessages, canSendGifs, observeIntersection, onClick,\n}) => {\n const { gif } = inlineResult;\n\n const handleClick = useCallback((_gif: ApiVideo, isSilent?: boolean, shouldSchedule?: boolean) => {\n onClick(inlineResult, isSilent, shouldSchedule);\n }, [inlineResult, onClick]);\n\n if (!gif) {\n return undefined;\n }\n\n return (\n \n );\n};\n\nexport default memo(GifResult);\n","import React, { FC, memo } from '../../../../lib/teact/teact';\n\nimport { ApiBotInlineMediaResult, ApiBotInlineResult } from '../../../../api/types';\n\nimport { STICKER_SIZE_INLINE_BOT_RESULT } from '../../../../config';\nimport { ObserveFn } from '../../../../hooks/useIntersectionObserver';\n\nimport StickerButton from '../../../common/StickerButton';\n\ntype OwnProps = {\n inlineResult: ApiBotInlineMediaResult;\n isSavedMessages?: boolean;\n observeIntersection: ObserveFn;\n onClick: (result: ApiBotInlineResult, isSilent?: boolean, shouldSchedule?: boolean) => void;\n};\n\nconst StickerResult: FC = ({\n inlineResult,\n isSavedMessages,\n observeIntersection,\n onClick,\n}) => {\n const { sticker } = inlineResult;\n\n if (!sticker) {\n return undefined;\n }\n\n return (\n \n );\n};\n\nexport default memo(StickerResult);\n","import React, {\n FC, memo, useCallback, useEffect, useRef,\n} from '../../../lib/teact/teact';\nimport { getActions } from '../../../global';\n\nimport { ApiBotInlineMediaResult, ApiBotInlineResult, ApiBotInlineSwitchPm } from '../../../api/types';\nimport { LoadMoreDirection } from '../../../types';\n\nimport { IS_TOUCH_ENV } from '../../../util/environment';\nimport setTooltipItemVisible from '../../../util/setTooltipItemVisible';\nimport buildClassName from '../../../util/buildClassName';\nimport useShowTransition from '../../../hooks/useShowTransition';\nimport { throttle } from '../../../util/schedulers';\nimport { useIntersectionObserver } from '../../../hooks/useIntersectionObserver';\nimport usePrevious from '../../../hooks/usePrevious';\nimport { useKeyboardNavigation } from './hooks/useKeyboardNavigation';\n\nimport MediaResult from './inlineResults/MediaResult';\nimport ArticleResult from './inlineResults/ArticleResult';\nimport GifResult from './inlineResults/GifResult';\nimport StickerResult from './inlineResults/StickerResult';\nimport ListItem from '../../ui/ListItem';\nimport InfiniteScroll from '../../ui/InfiniteScroll';\n\nimport './InlineBotTooltip.scss';\n\nconst INTERSECTION_DEBOUNCE_MS = 200;\nconst runThrottled = throttle((cb) => cb(), 500, true);\n\nexport type OwnProps = {\n isOpen: boolean;\n botId?: string;\n isGallery?: boolean;\n inlineBotResults?: (ApiBotInlineResult | ApiBotInlineMediaResult)[];\n switchPm?: ApiBotInlineSwitchPm;\n isSavedMessages?: boolean;\n canSendGifs?: boolean;\n onSelectResult: (\n inlineResult: ApiBotInlineMediaResult | ApiBotInlineResult, isSilent?: boolean, shouldSchedule?: boolean\n ) => void;\n loadMore: NoneToVoidFunction;\n onClose: NoneToVoidFunction;\n};\n\nconst InlineBotTooltip: FC = ({\n isOpen,\n botId,\n isGallery,\n inlineBotResults,\n switchPm,\n isSavedMessages,\n canSendGifs,\n loadMore,\n onClose,\n onSelectResult,\n}) => {\n const {\n openChat,\n startBot,\n } = getActions();\n\n // eslint-disable-next-line no-null/no-null\n const containerRef = useRef(null);\n const { shouldRender, transitionClassNames } = useShowTransition(isOpen, undefined, undefined, false);\n const {\n observe: observeIntersection,\n } = useIntersectionObserver({\n rootRef: containerRef,\n debounceMs: INTERSECTION_DEBOUNCE_MS,\n isDisabled: !isOpen,\n });\n\n const handleLoadMore = useCallback(({ direction }: { direction: LoadMoreDirection }) => {\n if (direction === LoadMoreDirection.Backwards) {\n runThrottled(loadMore);\n }\n }, [loadMore]);\n\n const selectedIndex = useKeyboardNavigation({\n isActive: isOpen,\n shouldRemoveSelectionOnReset: isGallery,\n noArrowNavigation: isGallery,\n items: inlineBotResults,\n onSelect: onSelectResult,\n onClose,\n });\n\n useEffect(() => {\n setTooltipItemVisible('.chat-item-clickable', selectedIndex, containerRef);\n }, [selectedIndex]);\n\n const handleSendPm = useCallback(() => {\n openChat({ id: botId });\n startBot({ botId, param: switchPm!.startParam });\n }, [botId, openChat, startBot, switchPm]);\n\n const prevInlineBotResults = usePrevious(\n inlineBotResults?.length\n ? inlineBotResults\n : undefined,\n shouldRender,\n );\n const renderedInlineBotResults = inlineBotResults && !inlineBotResults.length\n ? prevInlineBotResults\n : inlineBotResults;\n\n if (!shouldRender || !(renderedInlineBotResults?.length || switchPm)) {\n return undefined;\n }\n\n const className = buildClassName(\n 'InlineBotTooltip composer-tooltip',\n IS_TOUCH_ENV ? 'no-scrollbar' : 'custom-scroll',\n isGallery && 'gallery',\n transitionClassNames,\n );\n\n function renderSwitchPm() {\n return (\n \n {switchPm!.text}\n \n );\n }\n\n function renderContent() {\n return renderedInlineBotResults!.map((inlineBotResult, index) => {\n switch (inlineBotResult.type) {\n case 'gif':\n return (\n \n );\n\n case 'photo':\n return (\n \n );\n\n case 'sticker':\n return (\n \n );\n\n case 'video':\n case 'file':\n case 'game':\n return (\n \n );\n case 'article':\n case 'audio':\n return (\n \n );\n\n default:\n return undefined;\n }\n });\n }\n\n return (\n \n {switchPm && renderSwitchPm()}\n {renderedInlineBotResults?.length && renderContent()}\n \n );\n};\n\nexport default memo(InlineBotTooltip);\n","import React, {\n FC, useCallback, useEffect, useRef, memo,\n} from '../../../lib/teact/teact';\n\nimport setTooltipItemVisible from '../../../util/setTooltipItemVisible';\nimport { useKeyboardNavigation } from './hooks/useKeyboardNavigation';\nimport { IS_TOUCH_ENV } from '../../../util/environment';\nimport renderText from '../../common/helpers/renderText';\nimport { getUserFullName, isUserId } from '../../../global/helpers';\nimport useMouseInside from '../../../hooks/useMouseInside';\nimport useLang from '../../../hooks/useLang';\nimport buildClassName from '../../../util/buildClassName';\nimport { getActions, getGlobal } from '../../../global';\n\nimport ListItem from '../../ui/ListItem';\nimport Avatar from '../../common/Avatar';\nimport Menu from '../../ui/Menu';\n\nimport './SendAsMenu.scss';\n\nexport type OwnProps = {\n isOpen: boolean;\n onClose: () => void;\n chatId?: string;\n selectedSendAsId?: string;\n sendAsIds?: string[];\n};\n\nconst SendAsMenu: FC = ({\n isOpen,\n onClose,\n chatId,\n selectedSendAsId,\n sendAsIds,\n}) => {\n const { saveDefaultSendAs } = getActions();\n\n // No need for expensive global updates on users and chats, so we avoid them\n const usersById = getGlobal().users.byId;\n const chatsById = getGlobal().chats.byId;\n\n const lang = useLang();\n // eslint-disable-next-line no-null/no-null\n const containerRef = useRef(null);\n\n const [handleMouseEnter, handleMouseLeave, markMouseInside] = useMouseInside(isOpen, onClose, undefined);\n\n useEffect(() => {\n if (isOpen) {\n markMouseInside();\n }\n }, [isOpen, markMouseInside]);\n\n const handleUserSelect = useCallback((id: string) => {\n onClose();\n saveDefaultSendAs({ chatId, sendAsId: id });\n }, [chatId, onClose, saveDefaultSendAs]);\n\n const selectedSendAsIndex = useKeyboardNavigation({\n isActive: isOpen,\n items: sendAsIds,\n onSelect: handleUserSelect,\n shouldSelectOnTab: true,\n shouldSaveSelectionOnUpdateItems: true,\n onClose,\n });\n\n useEffect(() => {\n setTooltipItemVisible('.chat-item-clickable', selectedSendAsIndex, containerRef);\n }, [selectedSendAsIndex]);\n\n useEffect(() => {\n if (sendAsIds && !sendAsIds.length) {\n onClose();\n }\n }, [sendAsIds, onClose]);\n\n return (\n \n
{lang('SendMessageAsTitle')}
\n {usersById && chatsById && sendAsIds?.map((id, index) => {\n const user = isUserId(id) ? usersById[id] : undefined;\n const chat = !user ? chatsById[id] : undefined;\n const fullName = user ? getUserFullName(user) : chat?.title;\n\n return (\n handleUserSelect(id)}\n focus={selectedSendAsIndex === index}\n >\n \n
\n
\n

{fullName && renderText(fullName)}

\n
\n {user\n ? lang('VoipGroupPersonalAccount')\n : lang('Subscribers', chat?.membersCount, 'i')}\n \n
\n \n );\n })}\n \n );\n};\n\nexport default memo(SendAsMenu);\n","import React, {\n FC, useMemo, memo, useRef,\n} from '../../lib/teact/teact';\nimport { getActions, getGlobal, withGlobal } from '../../global';\n\nimport { ApiMessage, ApiUser, ApiChat } from '../../api/types';\n\nimport { MEMO_EMPTY_ARRAY } from '../../util/memo';\nimport {\n selectUser,\n selectChatMessages,\n selectChat,\n selectCurrentTextSearch,\n} from '../../global/selectors';\nimport {\n getChatTitle,\n getUserFullName,\n isChatChannel,\n} from '../../global/helpers';\nimport useLang from '../../hooks/useLang';\nimport useKeyboardListNavigation from '../../hooks/useKeyboardListNavigation';\nimport useHistoryBack from '../../hooks/useHistoryBack';\nimport useInfiniteScroll from '../../hooks/useInfiniteScroll';\nimport { renderMessageSummary } from '../common/helpers/renderMessageText';\nimport renderText from '../common/helpers/renderText';\n\nimport InfiniteScroll from '../ui/InfiniteScroll';\nimport ListItem from '../ui/ListItem';\nimport LastMessageMeta from '../common/LastMessageMeta';\nimport Avatar from '../common/Avatar';\n\nimport './RightSearch.scss';\n\nexport type OwnProps = {\n chatId: string;\n threadId: number;\n onClose: NoneToVoidFunction;\n isActive: boolean;\n};\n\ntype StateProps = {\n chat?: ApiChat;\n messagesById?: Record;\n query?: string;\n totalCount?: number;\n foundIds?: number[];\n};\n\nconst RightSearch: FC = ({\n chatId,\n threadId,\n onClose,\n isActive,\n chat,\n messagesById,\n query,\n totalCount,\n foundIds,\n}) => {\n const {\n searchTextMessagesLocal,\n focusMessage,\n } = getActions();\n\n // eslint-disable-next-line no-null/no-null\n const containerRef = useRef(null);\n\n const lang = useLang();\n useHistoryBack(isActive, onClose);\n\n const [viewportIds, getMore] = useInfiniteScroll(searchTextMessagesLocal, foundIds);\n\n const viewportResults = useMemo(() => {\n if (!query || !viewportIds?.length || !messagesById) {\n return MEMO_EMPTY_ARRAY;\n }\n\n return viewportIds.map((id) => {\n const message = messagesById[id];\n if (!message) {\n return undefined;\n }\n\n const senderUser = message.senderId ? selectUser(getGlobal(), message.senderId) : undefined;\n\n let senderChat;\n if (chat && isChatChannel(chat)) {\n senderChat = chat;\n } else if (message.forwardInfo) {\n const { isChannelPost, fromChatId } = message.forwardInfo;\n senderChat = isChannelPost && fromChatId ? selectChat(getGlobal(), fromChatId) : undefined;\n } else {\n senderChat = message.senderId ? selectChat(getGlobal(), message.senderId) : undefined;\n }\n\n return {\n message,\n senderUser,\n senderChat,\n onClick: () => focusMessage({ chatId, threadId, messageId: id }),\n };\n }).filter(Boolean);\n }, [query, viewportIds, messagesById, chat, focusMessage, chatId, threadId]);\n\n const handleKeyDown = useKeyboardListNavigation(containerRef, true, (index) => {\n const foundResult = viewportResults?.[index === -1 ? 0 : index];\n if (foundResult) {\n foundResult.onClick();\n }\n }, '.ListItem-button', true);\n\n const renderSearchResult = ({\n message, senderUser, senderChat, onClick,\n }: {\n message: ApiMessage;\n senderUser?: ApiUser;\n senderChat?: ApiChat;\n onClick: NoneToVoidFunction;\n }) => {\n const title = senderChat ? getChatTitle(lang, senderChat) : getUserFullName(senderUser);\n const text = renderMessageSummary(lang, message, undefined, query);\n\n return (\n \n \n
\n
\n

{title && renderText(title)}

\n \n
\n
\n {text}\n
\n
\n \n );\n };\n\n const isOnTop = viewportIds?.[0] === foundIds?.[0];\n\n return (\n \n {isOnTop && (\n

\n {!query ? (\n lang('lng_dlg_search_for_messages')\n ) : (totalCount === 0 || !viewportResults.length) ? (\n lang('lng_search_no_results')\n ) : totalCount === 1 ? (\n '1 message found'\n ) : (\n `${(viewportResults.length && (totalCount || viewportResults.length))} messages found`\n )}\n

\n )}\n {viewportResults.map(renderSearchResult)}\n \n );\n};\n\nexport default memo(withGlobal(\n (global, { chatId }): StateProps => {\n const chat = selectChat(global, chatId);\n const messagesById = chat && selectChatMessages(global, chat.id);\n if (!chat || !messagesById) {\n return {};\n }\n\n const { query, results } = selectCurrentTextSearch(global) || {};\n const { totalCount, foundIds } = results || {};\n\n return {\n chat,\n messagesById,\n query,\n totalCount,\n foundIds,\n };\n },\n)(RightSearch));\n","import React, {\n FC, useEffect, memo, useMemo, useCallback,\n} from '../../lib/teact/teact';\nimport { getActions, withGlobal } from '../../global';\n\nimport { ApiStickerSet } from '../../api/types';\nimport { ObserveFn } from '../../hooks/useIntersectionObserver';\n\nimport { STICKER_SIZE_SEARCH } from '../../config';\nimport { selectShouldLoopStickers, selectStickerSet } from '../../global/selectors';\nimport useFlag from '../../hooks/useFlag';\nimport useOnChange from '../../hooks/useOnChange';\nimport useLang from '../../hooks/useLang';\n\nimport Button from '../ui/Button';\nimport StickerButton from '../common/StickerButton';\nimport StickerSetModal from '../common/StickerSetModal.async';\nimport Spinner from '../ui/Spinner';\n\ntype OwnProps = {\n stickerSetId: string;\n observeIntersection: ObserveFn;\n isSomeModalOpen: boolean;\n onModalToggle: (isOpen: boolean) => void;\n};\n\ntype StateProps = {\n set?: ApiStickerSet;\n shouldPlay?: boolean;\n};\n\nconst STICKERS_TO_DISPLAY = 5;\n\nconst StickerSetResult: FC = ({\n stickerSetId, observeIntersection, set, shouldPlay,\n isSomeModalOpen, onModalToggle,\n}) => {\n const { loadStickers, toggleStickerSet } = getActions();\n\n const lang = useLang();\n const isAdded = set && Boolean(set.installedDate);\n const areStickersLoaded = Boolean(set?.stickers);\n\n const [isModalOpen, openModal, closeModal] = useFlag();\n\n useOnChange(() => {\n onModalToggle(isModalOpen);\n }, [isModalOpen, onModalToggle]);\n\n const displayedStickers = useMemo(() => {\n if (!set) {\n return [];\n }\n\n const coverStickerIds = (set.covers || []).map(({ id }) => id);\n const otherStickers = set.stickers ? set.stickers.filter(({ id }) => !coverStickerIds.includes(id)) : [];\n\n return [...(set.covers || []), ...otherStickers].slice(0, STICKERS_TO_DISPLAY);\n }, [set]);\n\n useEffect(() => {\n // Featured stickers are initialized with one sticker in collection (cover of SickerSet)\n if (!areStickersLoaded && displayedStickers.length < STICKERS_TO_DISPLAY) {\n loadStickers({ stickerSetId });\n }\n }, [areStickersLoaded, displayedStickers.length, loadStickers, stickerSetId]);\n\n const handleAddClick = useCallback(() => {\n toggleStickerSet({ stickerSetId });\n }, [toggleStickerSet, stickerSetId]);\n\n if (!set) {\n return undefined;\n }\n\n const canRenderStickers = displayedStickers.length > 0;\n\n return (\n
\n
\n
\n

{set.title}

\n

{lang('Stickers', set.count, 'i')}

\n
\n \n {lang(isAdded ? 'Stickers.Installed' : 'Stickers.Install')}\n \n
\n
\n {!canRenderStickers && }\n {canRenderStickers && displayedStickers.map((sticker) => (\n \n ))}\n
\n {canRenderStickers && (\n \n )}\n
\n );\n};\n\nexport default memo(withGlobal(\n (global, { stickerSetId }): StateProps => {\n return {\n set: selectStickerSet(global, stickerSetId),\n shouldPlay: selectShouldLoopStickers(global),\n };\n },\n)(StickerSetResult));\n","import React, {\n FC, memo, useEffect, useRef, useState,\n} from '../../lib/teact/teact';\nimport { getActions, withGlobal } from '../../global';\n\nimport { throttle } from '../../util/schedulers';\nimport { selectCurrentStickerSearch } from '../../global/selectors';\nimport { useIntersectionObserver } from '../../hooks/useIntersectionObserver';\nimport useLang from '../../hooks/useLang';\nimport useHistoryBack from '../../hooks/useHistoryBack';\n\nimport Loading from '../ui/Loading';\nimport StickerSetResult from './StickerSetResult';\n\nimport './StickerSearch.scss';\n\ntype OwnProps = {\n onClose: NoneToVoidFunction;\n isActive: boolean;\n};\n\ntype StateProps = {\n query?: string;\n featuredIds?: string[];\n resultIds?: string[];\n};\n\nconst INTERSECTION_THROTTLE = 200;\n\nconst runThrottled = throttle((cb) => cb(), 60000, true);\n\nconst StickerSearch: FC = ({\n onClose,\n isActive,\n query,\n featuredIds,\n resultIds,\n}) => {\n const { loadFeaturedStickers } = getActions();\n\n // eslint-disable-next-line no-null/no-null\n const containerRef = useRef(null);\n\n const lang = useLang();\n\n const [isModalOpen, setIsModalOpen] = useState(false);\n\n const {\n observe: observeIntersection,\n } = useIntersectionObserver({ rootRef: containerRef, throttleMs: INTERSECTION_THROTTLE });\n\n // Due to the parent Transition, this component never gets unmounted,\n // that's why we use throttled API call on every update.\n useEffect(() => {\n runThrottled(() => {\n loadFeaturedStickers();\n });\n });\n\n useHistoryBack(isActive, onClose);\n\n function renderContent() {\n if (query === undefined) {\n return undefined;\n }\n\n if (!query && featuredIds) {\n return featuredIds.map((id) => (\n \n ));\n }\n\n if (resultIds) {\n if (!resultIds.length) {\n return

Nothing found.

;\n }\n\n return resultIds.map((id) => (\n \n ));\n }\n\n return ;\n }\n\n return (\n
\n {renderContent()}\n
\n );\n};\n\nexport default memo(withGlobal(\n (global): StateProps => {\n const currentSearch = selectCurrentStickerSearch(global);\n const { query, resultIds } = currentSearch || {};\n const { featured } = global.stickers;\n\n return {\n query,\n featuredIds: featured.setIds,\n resultIds,\n };\n },\n)(StickerSearch));\n","import React, {\n FC, memo, useRef, useCallback,\n} from '../../lib/teact/teact';\nimport { getActions, withGlobal } from '../../global';\n\nimport { ApiChat, ApiVideo } from '../../api/types';\n\nimport { IS_TOUCH_ENV } from '../../util/environment';\nimport {\n selectCurrentGifSearch,\n selectChat,\n selectIsChatWithBot,\n selectCurrentMessageList,\n selectCanScheduleUntilOnline,\n selectIsChatWithSelf,\n} from '../../global/selectors';\nimport { getAllowedAttachmentOptions, getCanPostInChat } from '../../global/helpers';\nimport buildClassName from '../../util/buildClassName';\nimport { useIntersectionObserver } from '../../hooks/useIntersectionObserver';\nimport useLang from '../../hooks/useLang';\nimport useHistoryBack from '../../hooks/useHistoryBack';\nimport useSchedule from '../../hooks/useSchedule';\n\nimport InfiniteScroll from '../ui/InfiniteScroll';\nimport GifButton from '../common/GifButton';\nimport Loading from '../ui/Loading';\n\nimport './GifSearch.scss';\n\ntype OwnProps = {\n onClose: NoneToVoidFunction;\n isActive: boolean;\n};\n\ntype StateProps = {\n query?: string;\n results?: ApiVideo[];\n chat?: ApiChat;\n isChatWithBot?: boolean;\n canScheduleUntilOnline?: boolean;\n isSavedMessages?: boolean;\n canPostInChat?: boolean;\n};\n\nconst PRELOAD_BACKWARDS = 96; // GIF Search bot results are multiplied by 24\nconst INTERSECTION_DEBOUNCE = 300;\n\nconst GifSearch: FC = ({\n isActive,\n query,\n results,\n chat,\n isChatWithBot,\n canScheduleUntilOnline,\n isSavedMessages,\n canPostInChat,\n onClose,\n}) => {\n const {\n searchMoreGifs,\n sendMessage,\n setGifSearchQuery,\n } = getActions();\n\n // eslint-disable-next-line no-null/no-null\n const containerRef = useRef(null);\n\n const [requestCalendar, calendar] = useSchedule(canScheduleUntilOnline);\n\n const {\n observe: observeIntersection,\n } = useIntersectionObserver({ rootRef: containerRef, debounceMs: INTERSECTION_DEBOUNCE });\n\n const canSendGifs = canPostInChat && getAllowedAttachmentOptions(chat, isChatWithBot).canSendGifs;\n\n const handleGifClick = useCallback((gif: ApiVideo, isSilent?: boolean, shouldSchedule?: boolean) => {\n if (canSendGifs) {\n if (shouldSchedule) {\n requestCalendar((scheduledAt) => {\n sendMessage({ gif, scheduledAt, isSilent });\n });\n } else {\n sendMessage({ gif, isSilent });\n }\n }\n\n if (IS_TOUCH_ENV) {\n setGifSearchQuery({ query: undefined });\n }\n }, [canSendGifs, requestCalendar, sendMessage, setGifSearchQuery]);\n\n const lang = useLang();\n\n useHistoryBack(isActive, onClose);\n\n function renderContent() {\n if (query === undefined) {\n return undefined;\n }\n\n if (!results) {\n return (\n \n );\n }\n\n if (!results.length) {\n return (\n

{lang('NoGIFsFound')}

\n );\n }\n\n return results.map((gif) => (\n \n ));\n }\n\n const hasResults = Boolean(query !== undefined && results && results.length);\n\n return (\n
\n \n {renderContent()}\n \n {calendar}\n
\n );\n};\n\nexport default memo(withGlobal(\n (global): StateProps => {\n const currentSearch = selectCurrentGifSearch(global);\n const { query, results } = currentSearch || {};\n const { chatId, threadId } = selectCurrentMessageList(global) || {};\n const chat = chatId ? selectChat(global, chatId) : undefined;\n const isChatWithBot = chat ? selectIsChatWithBot(global, chat) : undefined;\n const isSavedMessages = Boolean(chatId) && selectIsChatWithSelf(global, chatId);\n const canPostInChat = Boolean(chat) && Boolean(threadId) && getCanPostInChat(chat, threadId);\n\n return {\n query,\n results,\n chat,\n isChatWithBot,\n isSavedMessages,\n canPostInChat,\n canScheduleUntilOnline: Boolean(chatId) && selectCanScheduleUntilOnline(global, chatId),\n };\n },\n)(GifSearch));\n","import React, { FC, memo } from '../../../lib/teact/teact';\n\nimport { ApiChannelStatistics, ApiGroupStatistics, StatisticsOverviewItem } from '../../../api/types';\n\nimport { formatIntegerCompact } from '../../../util/textFormat';\nimport { formatFullDate } from '../../../util/dateFormat';\nimport buildClassName from '../../../util/buildClassName';\nimport useLang from '../../../hooks/useLang';\n\nimport './StatisticsOverview.scss';\n\ntype OverviewCell = {\n name: string;\n title: string;\n isPercentage?: boolean;\n};\n\nconst CHANNEL_OVERVIEW: OverviewCell[][] = [\n [\n { name: 'followers', title: 'ChannelStats.Overview.Followers' },\n { name: 'enabledNotifications', title: 'ChannelStats.Overview.EnabledNotifications', isPercentage: true },\n ],\n [\n { name: 'viewsPerPost', title: 'ChannelStats.Overview.ViewsPerPost' },\n { name: 'sharesPerPost', title: 'ChannelStats.Overview.SharesPerPost' },\n ],\n];\n\nconst GROUP_OVERVIEW: OverviewCell[][] = [\n [\n { name: 'members', title: 'Stats.GroupMembers' },\n { name: 'messages', title: 'Stats.GroupMessages' },\n ],\n [\n { name: 'viewers', title: 'Stats.GroupViewers' },\n { name: 'posters', title: 'Stats.GroupPosters' },\n ],\n];\n\nexport type OwnProps = {\n isGroup?: boolean;\n statistics: ApiChannelStatistics | ApiGroupStatistics;\n};\n\nconst StatisticsOverview: FC = ({ isGroup, statistics }) => {\n const lang = useLang();\n\n const renderOverviewItemValue = ({ change, percentage }: StatisticsOverviewItem) => {\n if (!change) {\n return undefined;\n }\n\n const isChangeNegative = Number(change) < 0;\n\n return (\n \n {isChangeNegative ? `-${formatIntegerCompact(Math.abs(change))}` : `+${formatIntegerCompact(change)}`}\n {percentage && (\n <>\n {' '}\n ({percentage}%)\n \n )}\n \n );\n };\n\n const { period } = (statistics as ApiGroupStatistics);\n\n return (\n
\n
\n
{lang('ChannelStats.Overview')}
\n\n {period && (\n
\n {formatFullDate(lang, period.minDate * 1000)} — {formatFullDate(lang, period.maxDate * 1000)}\n
\n )}\n
\n\n \n {(isGroup ? GROUP_OVERVIEW : CHANNEL_OVERVIEW).map((row) => (\n \n {row.map((cell: OverviewCell) => {\n const field = (statistics as any)[cell.name];\n\n if (cell.isPercentage) {\n return (\n \n );\n }\n\n return (\n \n );\n })}\n \n ))}\n
\n {field.percentage}%\n

{lang(cell.title)}

\n
\n \n {formatIntegerCompact(field.current)}\n \n {' '}\n {renderOverviewItemValue(field)}\n

{lang(cell.title)}

\n
\n
\n );\n};\n\nexport default memo(StatisticsOverview);\n","import React, { FC, memo } from '../../../lib/teact/teact';\n\nimport useLang, { LangFn } from '../../../hooks/useLang';\n\nimport { ApiMessage, StatisticsRecentMessage as StatisticsRecentMessageType } from '../../../api/types';\n\nimport buildClassName from '../../../util/buildClassName';\nimport { formatDateTimeToString } from '../../../util/dateFormat';\nimport {\n getMessageMediaHash,\n getMessageMediaThumbDataUri,\n getMessageVideo,\n getMessageRoundVideo,\n} from '../../../global/helpers';\nimport { renderMessageSummary } from '../../common/helpers/renderMessageText';\nimport useMedia from '../../../hooks/useMedia';\n\nimport './StatisticsRecentMessage.scss';\n\nexport type OwnProps = {\n message: ApiMessage & StatisticsRecentMessageType;\n};\n\nconst StatisticsRecentMessage: FC = ({ message }) => {\n const lang = useLang();\n\n const mediaThumbnail = getMessageMediaThumbDataUri(message);\n const mediaBlobUrl = useMedia(getMessageMediaHash(message, 'micro'));\n const isRoundVideo = Boolean(getMessageRoundVideo(message));\n\n return (\n

\n

\n
\n {renderSummary(lang, message, mediaBlobUrl || mediaThumbnail, isRoundVideo)}\n
\n
\n {lang('ChannelStats.ViewsCount', message.views)}\n
\n
\n\n
\n
\n {formatDateTimeToString(message.date * 1000, lang.code)}\n
\n
\n {message.forwards ? lang('ChannelStats.SharesCount', message.forwards) : 'No shares'}\n
\n
\n

\n );\n};\n\nfunction renderSummary(lang: LangFn, message: ApiMessage, blobUrl?: string, isRoundVideo?: boolean) {\n if (!blobUrl) {\n return renderMessageSummary(lang, message);\n }\n\n return (\n \n \"\"\n {getMessageVideo(message) && }\n {renderMessageSummary(lang, message, true)}\n \n );\n}\n\nexport default memo(StatisticsRecentMessage);\n","import React, {\n FC, memo, useState, useEffect, useRef, useMemo,\n} from '../../../lib/teact/teact';\nimport { getActions, withGlobal } from '../../../global';\n\nimport { callApi } from '../../../api/gramjs';\nimport {\n ApiMessage,\n ApiChannelStatistics,\n ApiGroupStatistics,\n StatisticsRecentMessage as StatisticsRecentMessageType,\n} from '../../../api/types';\nimport { selectChat, selectStatistics } from '../../../global/selectors';\n\nimport buildClassName from '../../../util/buildClassName';\nimport useLang from '../../../hooks/useLang';\n\nimport Loading from '../../ui/Loading';\nimport StatisticsOverview from './StatisticsOverview';\nimport StatisticsRecentMessage from './StatisticsRecentMessage';\n\nimport './Statistics.scss';\n\ntype ILovelyChart = { create: Function };\nlet lovelyChartPromise: Promise;\nlet LovelyChart: ILovelyChart;\n\nasync function ensureLovelyChart() {\n if (!lovelyChartPromise) {\n lovelyChartPromise = import('../../../lib/lovely-chart/LovelyChart') as Promise;\n LovelyChart = await lovelyChartPromise;\n }\n\n return lovelyChartPromise;\n}\n\nconst CHANNEL_GRAPHS_TITLES = {\n growthGraph: 'ChannelStats.Graph.Growth',\n followersGraph: 'ChannelStats.Graph.Followers',\n muteGraph: 'ChannelStats.Graph.Notifications',\n topHoursGraph: 'ChannelStats.Graph.ViewsByHours',\n viewsBySourceGraph: 'ChannelStats.Graph.ViewsBySource',\n newFollowersBySourceGraph: 'ChannelStats.Graph.NewFollowersBySource',\n languagesGraph: 'ChannelStats.Graph.Language',\n interactionsGraph: 'ChannelStats.Graph.Interactions',\n};\nconst CHANNEL_GRAPHS = Object.keys(CHANNEL_GRAPHS_TITLES) as (keyof ApiChannelStatistics)[];\n\nconst GROUP_GRAPHS_TITLES = {\n growthGraph: 'Stats.GroupGrowthTitle',\n membersGraph: 'Stats.GroupMembersTitle',\n languagesGraph: 'Stats.GroupLanguagesTitle',\n messagesGraph: 'Stats.GroupMessagesTitle',\n actionsGraph: 'Stats.GroupActionsTitle',\n topHoursGraph: 'Stats.GroupTopHoursTitle',\n};\nconst GROUP_GRAPHS = Object.keys(GROUP_GRAPHS_TITLES) as (keyof ApiGroupStatistics)[];\n\nexport type OwnProps = {\n chatId: string;\n isActive: boolean;\n};\n\nexport type StateProps = {\n statistics: ApiChannelStatistics | ApiGroupStatistics;\n dcId?: number;\n isGroup: boolean;\n};\n\nconst Statistics: FC = ({\n chatId,\n isActive,\n statistics,\n dcId,\n isGroup,\n}) => {\n const lang = useLang();\n // eslint-disable-next-line no-null/no-null\n const containerRef = useRef(null);\n const [isReady, setIsReady] = useState(false);\n const loadedCharts = useRef([]);\n\n const { loadStatistics, loadStatisticsAsyncGraph } = getActions();\n\n useEffect(() => {\n loadStatistics({ chatId, isGroup });\n }, [chatId, loadStatistics, isGroup]);\n\n useEffect(() => {\n if (!isActive) {\n loadedCharts.current = [];\n }\n }, [isActive]);\n\n const graphs = useMemo(() => {\n return isGroup ? GROUP_GRAPHS : CHANNEL_GRAPHS;\n }, [isGroup]);\n\n const graphTitles = useMemo(() => {\n return isGroup ? GROUP_GRAPHS_TITLES : CHANNEL_GRAPHS_TITLES;\n }, [isGroup]);\n\n // Load async graphs\n useEffect(() => {\n if (!statistics) {\n return;\n }\n\n graphs.forEach((name) => {\n const graph = statistics[name as keyof typeof statistics];\n const isAsync = typeof graph === 'string';\n\n if (isAsync) {\n loadStatisticsAsyncGraph({\n name,\n chatId,\n token: graph,\n // Hardcode percentage for languages graph, since API does not return `percentage` flag\n isPercentage: name === 'languagesGraph',\n });\n }\n });\n }, [graphs, chatId, statistics, loadStatisticsAsyncGraph]);\n\n useEffect(() => {\n (async () => {\n await ensureLovelyChart();\n\n if (!isReady) {\n setIsReady(true);\n return;\n }\n\n if (!statistics) {\n return;\n }\n\n graphs.forEach((name, index: number) => {\n const graph = statistics[name as keyof typeof statistics];\n const isAsync = typeof graph === 'string';\n\n if (isAsync || loadedCharts.current.includes(name)) {\n return;\n }\n\n const { zoomToken } = graph;\n\n LovelyChart.create(\n containerRef.current!.children[index],\n {\n title: lang((graphTitles as Record)[name]),\n ...zoomToken && {\n onZoom: (x: number) => callApi('fetchStatisticsAsyncGraph', { token: zoomToken, x, dcId }),\n zoomOutLabel: lang('Graph.ZoomOut'),\n },\n ...graph,\n },\n );\n\n loadedCharts.current.push(name);\n });\n })();\n }, [graphs, graphTitles, isReady, statistics, lang, chatId, loadStatisticsAsyncGraph, dcId]);\n\n if (!isReady || !statistics) {\n return ;\n }\n\n return (\n
\n \n\n {!loadedCharts.current.length && }\n\n
\n {graphs.map((graph) => (\n
\n ))}\n
\n\n {Boolean((statistics as ApiChannelStatistics).recentTopMessages?.length) && (\n
\n

{lang('ChannelStats.Recent.Header')}

\n\n {(statistics as ApiChannelStatistics).recentTopMessages.map((message) => (\n \n ))}\n
\n )}\n
\n );\n};\n\nexport default memo(withGlobal(\n (global, { chatId }): StateProps => {\n const statistics = selectStatistics(global, chatId);\n const chat = selectChat(global, chatId);\n const dcId = chat?.fullInfo?.statisticsDcId;\n const isGroup = chat?.type === 'chatTypeSuperGroup';\n\n return { statistics, dcId, isGroup };\n },\n)(Statistics));\n","import React, {\n FC, useCallback, useState, memo, useEffect,\n} from '../../lib/teact/teact';\nimport { getActions, withGlobal } from '../../global';\n\nimport {\n ApiChat,\n ApiMessage,\n ApiPollAnswer,\n ApiPollResult,\n} from '../../api/types';\nimport usePrevious from '../../hooks/usePrevious';\nimport useLang from '../../hooks/useLang';\n\nimport ShowMoreButton from '../ui/ShowMoreButton';\nimport Loading from '../ui/Loading';\nimport ListItem from '../ui/ListItem';\nimport PrivateChatInfo from '../common/PrivateChatInfo';\n\nimport './PollAnswerResults.scss';\n\ntype OwnProps = {\n chat: ApiChat;\n message: ApiMessage;\n answer: ApiPollAnswer;\n answerVote: ApiPollResult;\n totalVoters: number;\n};\n\ntype StateProps = {\n voters?: string[];\n offset: string;\n};\n\nconst INITIAL_LIMIT = 4;\nconst VIEW_MORE_LIMIT = 50;\n\nconst PollAnswerResults: FC = ({\n chat,\n message,\n answer,\n answerVote,\n totalVoters,\n voters,\n offset,\n}) => {\n const {\n loadPollOptionResults,\n openChat,\n closePollResults,\n } = getActions();\n\n const prevVotersCount = usePrevious(answerVote.votersCount);\n const [isLoading, setIsLoading] = useState(true);\n const areVotersLoaded = Boolean(voters);\n const { option, text } = answer;\n const lang = useLang();\n\n useEffect(() => {\n // For update when new votes arrive or when the user takes back his vote\n if (!areVotersLoaded || prevVotersCount !== answerVote.votersCount) {\n loadPollOptionResults({\n chat, messageId: message.id, option, offset, limit: INITIAL_LIMIT, shouldResetVoters: true,\n });\n }\n // eslint-disable-next-line\n }, [answerVote.votersCount, areVotersLoaded]);\n\n const handleViewMoreClick = useCallback(() => {\n setIsLoading(true);\n loadPollOptionResults({\n chat, messageId: message.id, option, offset, limit: VIEW_MORE_LIMIT,\n });\n }, [chat, loadPollOptionResults, message.id, offset, option]);\n\n useEffect(() => {\n setIsLoading(false);\n }, [voters]);\n\n const handleMemberClick = useCallback((id: string) => {\n openChat({ id });\n closePollResults();\n }, [closePollResults, openChat]);\n\n function renderViewMoreButton() {\n const leftVotersCount = answerVote.votersCount - voters!.length;\n\n return answerVote.votersCount > INITIAL_LIMIT && leftVotersCount > 0 && (\n \n );\n }\n\n return (\n
\n
\n {voters\n ? voters.map((id) => (\n handleMemberClick(id)}\n >\n \n \n ))\n : }\n {voters && renderViewMoreButton()}\n
\n
\n {text}\n \n {getPercentage(answerVote.votersCount, totalVoters)}%\n \n
\n
\n );\n};\n\nfunction getPercentage(value: number, total: number) {\n return total > 0 ? ((value / total) * 100).toFixed() : 0;\n}\n\nexport default memo(withGlobal(\n (global, { answer }: OwnProps): StateProps => {\n const { voters, offsets } = global.pollResults;\n\n return {\n voters: voters?.[answer.option],\n offset: (offsets?.[answer.option]) || '',\n };\n },\n)(PollAnswerResults));\n","import React, { FC, memo } from '../../lib/teact/teact';\nimport { withGlobal } from '../../global';\n\nimport { ApiMessage, ApiChat } from '../../api/types';\nimport { selectChat, selectChatMessage } from '../../global/selectors';\nimport { buildCollectionByKey } from '../../util/iteratees';\nimport { getMessagePoll } from '../../global/helpers';\nimport renderText from '../common/helpers/renderText';\nimport useLang from '../../hooks/useLang';\nimport useHistoryBack from '../../hooks/useHistoryBack';\n\nimport PollAnswerResults from './PollAnswerResults';\nimport Loading from '../ui/Loading';\n\nimport './PollResults.scss';\n\ntype OwnProps = {\n onClose: NoneToVoidFunction;\n isActive: boolean;\n};\n\ntype StateProps = {\n chat?: ApiChat;\n message?: ApiMessage;\n lastSyncTime?: number;\n};\n\nconst PollResults: FC = ({\n onClose,\n isActive,\n chat,\n message,\n lastSyncTime,\n}) => {\n const lang = useLang();\n useHistoryBack(isActive, onClose);\n\n if (!message || !chat) {\n return ;\n }\n\n const { summary, results } = getMessagePoll(message)!;\n if (!results.results) {\n return undefined;\n }\n\n const resultsByOption = buildCollectionByKey(results.results, 'option');\n\n return (\n
\n

{renderText(summary.question, ['emoji', 'br'])}

\n
\n {lastSyncTime && summary.answers.map((answer) => (\n \n ))}\n {!lastSyncTime && }\n
\n
\n );\n};\n\nexport default memo(withGlobal(\n (global): StateProps => {\n const {\n pollResults: { chatId, messageId },\n lastSyncTime,\n } = global;\n\n if (!chatId || !messageId) {\n return {};\n }\n\n const chat = selectChat(global, chatId);\n const message = selectChatMessage(global, chatId, messageId);\n\n return {\n chat,\n message,\n lastSyncTime,\n };\n },\n)(PollResults));\n","import { ChangeEvent } from 'react';\nimport React, {\n FC, memo, useCallback, useEffect, useState,\n} from '../../../lib/teact/teact';\nimport { getActions, withGlobal } from '../../../global';\n\nimport { ApiUser } from '../../../api/types';\nimport { ManagementProgress } from '../../../types';\n\nimport {\n selectChat, selectNotifyExceptions, selectNotifySettings, selectUser,\n} from '../../../global/selectors';\nimport { selectIsChatMuted } from '../../../global/helpers';\nimport useFlag from '../../../hooks/useFlag';\nimport useLang from '../../../hooks/useLang';\nimport useHistoryBack from '../../../hooks/useHistoryBack';\n\nimport InputText from '../../ui/InputText';\nimport ListItem from '../../ui/ListItem';\nimport Checkbox from '../../ui/Checkbox';\nimport FloatingActionButton from '../../ui/FloatingActionButton';\nimport Spinner from '../../ui/Spinner';\nimport PrivateChatInfo from '../../common/PrivateChatInfo';\nimport ConfirmDialog from '../../ui/ConfirmDialog';\n\nimport './Management.scss';\n\ntype OwnProps = {\n userId: string;\n onClose: NoneToVoidFunction;\n isActive: boolean;\n};\n\ntype StateProps = {\n user?: ApiUser;\n progress?: ManagementProgress;\n isMuted?: boolean;\n};\n\nconst ERROR_FIRST_NAME_MISSING = 'Please provide first name';\n\nconst ManageUser: FC = ({\n userId,\n user,\n progress,\n isMuted,\n onClose,\n isActive,\n}) => {\n const {\n updateContact,\n deleteContact,\n closeManagement,\n } = getActions();\n\n const [isDeleteDialogOpen, openDeleteDialog, closeDeleteDialog] = useFlag();\n const [isProfileFieldsTouched, setIsProfileFieldsTouched] = useState(false);\n const [error, setError] = useState();\n const lang = useLang();\n\n useHistoryBack(isActive, onClose);\n\n const currentFirstName = user ? (user.firstName || '') : '';\n const currentLastName = user ? (user.lastName || '') : '';\n\n const [firstName, setFirstName] = useState(currentFirstName);\n const [lastName, setLastName] = useState(currentLastName);\n const [isNotificationsEnabled, setIsNotificationsEnabled] = useState(!isMuted);\n\n useEffect(() => {\n setIsNotificationsEnabled(!isMuted);\n }, [isMuted]);\n\n useEffect(() => {\n setIsProfileFieldsTouched(false);\n closeDeleteDialog();\n }, [closeDeleteDialog, userId]);\n\n useEffect(() => {\n setFirstName(currentFirstName);\n setLastName(currentLastName);\n }, [currentFirstName, currentLastName, user]);\n\n useEffect(() => {\n if (progress === ManagementProgress.Complete) {\n setIsProfileFieldsTouched(false);\n setError(undefined);\n closeDeleteDialog();\n }\n }, [closeDeleteDialog, progress]);\n\n const handleFirstNameChange = useCallback((e: ChangeEvent) => {\n setFirstName(e.target.value);\n setIsProfileFieldsTouched(true);\n }, []);\n\n const handleLastNameChange = useCallback((e: ChangeEvent) => {\n setLastName(e.target.value);\n setIsProfileFieldsTouched(true);\n }, []);\n\n const handleNotificationChange = useCallback((e: ChangeEvent) => {\n setIsNotificationsEnabled(e.target.checked);\n setIsProfileFieldsTouched(true);\n }, []);\n\n const handleProfileSave = useCallback(() => {\n const trimmedFirstName = firstName.trim();\n const trimmedLastName = lastName.trim();\n\n if (!trimmedFirstName.length) {\n setError(ERROR_FIRST_NAME_MISSING);\n }\n\n updateContact({\n userId,\n isMuted: !isNotificationsEnabled,\n firstName: trimmedFirstName,\n lastName: trimmedLastName,\n });\n }, [firstName, lastName, updateContact, userId, isNotificationsEnabled]);\n\n const handleDeleteContact = useCallback(() => {\n deleteContact({ userId });\n closeDeleteDialog();\n closeManagement();\n }, [closeDeleteDialog, closeManagement, deleteContact, userId]);\n\n if (!user) {\n return undefined;\n }\n\n const isLoading = progress === ManagementProgress.InProgress;\n\n return (\n
\n
\n
\n \n \n \n
\n \n
\n
\n
\n \n {lang('DeleteContact')}\n \n
\n
\n \n {isLoading ? (\n \n ) : (\n \n )}\n \n \n
\n );\n};\n\nexport default memo(withGlobal(\n (global, { userId }): StateProps => {\n const user = selectUser(global, userId);\n const chat = selectChat(global, userId)!;\n const { progress } = global.management;\n const isMuted = selectIsChatMuted(chat, selectNotifySettings(global), selectNotifyExceptions(global));\n\n return {\n user, progress, isMuted,\n };\n },\n)(ManageUser));\n","import { ChangeEvent } from 'react';\nimport React, {\n FC, memo, useCallback, useEffect, useMemo, useState,\n} from '../../../lib/teact/teact';\nimport { getActions, withGlobal } from '../../../global';\n\nimport { ManagementScreens, ManagementProgress } from '../../../types';\nimport {\n ApiChat, ApiChatBannedRights, ApiExportedInvite, ApiMediaFormat,\n} from '../../../api/types';\n\nimport { getChatAvatarHash, getHasAdminRight, isChatBasicGroup } from '../../../global/helpers';\nimport useMedia from '../../../hooks/useMedia';\nimport useLang from '../../../hooks/useLang';\nimport useFlag from '../../../hooks/useFlag';\nimport { selectChat } from '../../../global/selectors';\nimport { formatInteger } from '../../../util/textFormat';\nimport renderText from '../../common/helpers/renderText';\nimport useHistoryBack from '../../../hooks/useHistoryBack';\n\nimport AvatarEditable from '../../ui/AvatarEditable';\nimport InputText from '../../ui/InputText';\nimport ListItem from '../../ui/ListItem';\nimport Checkbox from '../../ui/Checkbox';\nimport Spinner from '../../ui/Spinner';\nimport FloatingActionButton from '../../ui/FloatingActionButton';\nimport ConfirmDialog from '../../ui/ConfirmDialog';\n\nimport './Management.scss';\n\ntype OwnProps = {\n chatId: string;\n onScreenSelect: (screen: ManagementScreens) => void;\n onClose: NoneToVoidFunction;\n isActive: boolean;\n};\n\ntype StateProps = {\n chat: ApiChat;\n progress?: ManagementProgress;\n isBasicGroup: boolean;\n hasLinkedChannel: boolean;\n canChangeInfo?: boolean;\n canBanUsers?: boolean;\n canInvite?: boolean;\n exportedInvites?: ApiExportedInvite[];\n lastSyncTime?: number;\n availableReactionsCount?: number;\n};\n\nconst GROUP_TITLE_EMPTY = 'Group title can\\'t be empty';\n\n// Some checkboxes control multiple rights, and some rights are not controlled from Permissions screen,\n// so we need to define the amount manually\nconst TOTAL_PERMISSIONS_COUNT = 8;\n\nconst ManageGroup: FC = ({\n chatId,\n chat,\n progress,\n isBasicGroup,\n hasLinkedChannel,\n canChangeInfo,\n canBanUsers,\n canInvite,\n onScreenSelect,\n onClose,\n isActive,\n exportedInvites,\n lastSyncTime,\n availableReactionsCount,\n}) => {\n const {\n togglePreHistoryHidden,\n updateChat,\n deleteChat,\n leaveChannel,\n deleteChannel,\n closeManagement,\n openChat,\n loadExportedChatInvites,\n loadChatJoinRequests,\n } = getActions();\n\n const [isDeleteDialogOpen, openDeleteDialog, closeDeleteDialog] = useFlag();\n const currentTitle = chat.title;\n const currentAbout = chat.fullInfo ? (chat.fullInfo.about || '') : '';\n\n const [isProfileFieldsTouched, setIsProfileFieldsTouched] = useState(false);\n const [title, setTitle] = useState(currentTitle || '');\n const [about, setAbout] = useState(currentAbout);\n const [photo, setPhoto] = useState();\n const [error, setError] = useState();\n const imageHash = getChatAvatarHash(chat);\n const currentAvatarBlobUrl = useMedia(imageHash, false, ApiMediaFormat.BlobUrl);\n const isPublicGroup = chat.username || hasLinkedChannel;\n const lang = useLang();\n\n useHistoryBack(isActive, onClose);\n\n useEffect(() => {\n if (lastSyncTime && canInvite) {\n loadExportedChatInvites({ chatId });\n loadExportedChatInvites({ chatId, isRevoked: true });\n loadChatJoinRequests({ chatId });\n }\n }, [chatId, loadExportedChatInvites, lastSyncTime, canInvite, loadChatJoinRequests]);\n\n useEffect(() => {\n if (progress === ManagementProgress.Complete) {\n setIsProfileFieldsTouched(false);\n setError(undefined);\n }\n }, [progress]);\n\n const handleClickEditType = useCallback(() => {\n onScreenSelect(ManagementScreens.ChatPrivacyType);\n }, [onScreenSelect]);\n\n const handleClickDiscussion = useCallback(() => {\n onScreenSelect(ManagementScreens.Discussion);\n }, [onScreenSelect]);\n\n const handleClickReactions = useCallback(() => {\n onScreenSelect(ManagementScreens.Reactions);\n }, [onScreenSelect]);\n\n const handleClickPermissions = useCallback(() => {\n onScreenSelect(ManagementScreens.GroupPermissions);\n }, [onScreenSelect]);\n\n const handleClickAdministrators = useCallback(() => {\n onScreenSelect(ManagementScreens.ChatAdministrators);\n }, [onScreenSelect]);\n\n const handleClickInvites = useCallback(() => {\n onScreenSelect(ManagementScreens.Invites);\n }, [onScreenSelect]);\n\n const handleClickRequests = useCallback(() => {\n onScreenSelect(ManagementScreens.JoinRequests);\n }, [onScreenSelect]);\n\n const handleSetPhoto = useCallback((file: File) => {\n setPhoto(file);\n setIsProfileFieldsTouched(true);\n }, []);\n\n const handleTitleChange = useCallback((e: ChangeEvent) => {\n setTitle(e.target.value);\n setIsProfileFieldsTouched(true);\n }, []);\n\n const handleAboutChange = useCallback((e: ChangeEvent) => {\n setAbout(e.target.value);\n setIsProfileFieldsTouched(true);\n }, []);\n\n const handleUpdateGroup = useCallback(() => {\n const trimmedTitle = title.trim();\n const trimmedAbout = about.trim();\n\n if (!trimmedTitle.length) {\n setError(GROUP_TITLE_EMPTY);\n return;\n }\n\n updateChat({\n chatId,\n title: trimmedTitle,\n about: trimmedAbout,\n photo,\n });\n }, [about, chatId, photo, title, updateChat]);\n\n const handleClickMembers = useCallback(() => {\n onScreenSelect(ManagementScreens.GroupMembers);\n }, [onScreenSelect]);\n\n const handleTogglePreHistory = useCallback(() => {\n if (!chat.fullInfo) {\n return;\n }\n\n const { isPreHistoryHidden } = chat.fullInfo;\n\n togglePreHistoryHidden({ chatId: chat.id, isEnabled: !isPreHistoryHidden });\n }, [chat, togglePreHistoryHidden]);\n\n const enabledReactionsCount = chat.fullInfo?.enabledReactions?.length || 0;\n\n const enabledPermissionsCount = useMemo(() => {\n if (!chat.defaultBannedRights) {\n return 0;\n }\n\n let totalCount = [\n 'sendMessages',\n 'sendMedia',\n 'embedLinks',\n 'sendPolls',\n 'changeInfo',\n 'inviteUsers',\n 'pinMessages',\n ].filter(\n (key) => !chat.defaultBannedRights![key as keyof ApiChatBannedRights],\n ).length;\n\n const { sendStickers, sendGifs } = chat.defaultBannedRights;\n\n // These two rights are controlled with a single checkbox\n if (!sendStickers && !sendGifs) {\n totalCount += 1;\n }\n\n return totalCount;\n }, [chat]);\n\n const adminsCount = (chat.fullInfo?.adminMembers?.length) || 0;\n\n const handleDeleteGroup = useCallback(() => {\n if (isBasicGroup) {\n deleteChat({ chatId: chat.id });\n } else if (!chat.isCreator) {\n leaveChannel({ chatId: chat.id });\n } else {\n deleteChannel({ chatId: chat.id });\n }\n closeDeleteDialog();\n closeManagement();\n openChat({ id: undefined });\n }, [\n isBasicGroup, chat.isCreator, chat.id,\n closeDeleteDialog, closeManagement, leaveChannel, deleteChannel, deleteChat, openChat,\n ]);\n\n if (chat.isRestricted || chat.isForbidden) {\n return undefined;\n }\n\n const isLoading = progress === ManagementProgress.InProgress;\n\n return (\n
\n
\n
\n \n \n \n {chat.isCreator && (\n \n {lang('GroupType')}\n {chat.username ? lang('TypePublic') : lang('TypePrivate')}\n \n )}\n {hasLinkedChannel && (\n \n {lang('LinkedChannel')}\n {lang('DiscussionUnlink')}\n \n )}\n \n {lang('ChannelPermissions')}\n \n {enabledPermissionsCount}/{TOTAL_PERMISSIONS_COUNT}\n \n \n\n \n {lang('Reactions')}\n \n {enabledReactionsCount}/{availableReactionsCount}\n \n \n \n {lang('ChannelAdministrators')}\n {formatInteger(adminsCount)}\n \n {canInvite && (\n \n {lang('GroupInfo.InviteLinks')}\n \n {exportedInvites ? formatInteger(exportedInvites.length) : lang('Loading')}\n \n \n )}\n {Boolean(chat.joinRequests?.length) && (\n \n {lang('MemberRequests')}\n \n {formatInteger(chat.joinRequests!.length)}\n \n \n )}\n
\n
\n \n {lang('GroupMembers')}\n {formatInteger(chat.membersCount ?? 0)}\n \n\n {!isPublicGroup && chat.fullInfo && (\n
\n \n
\n )}\n
\n
\n \n {lang('DeleteMega')}\n \n
\n
\n \n {isLoading ? (\n \n ) : (\n \n )}\n \n \n
\n );\n};\n\nexport default memo(withGlobal(\n (global, { chatId }): StateProps => {\n const chat = selectChat(global, chatId)!;\n const { progress } = global.management;\n const hasLinkedChannel = Boolean(chat.fullInfo?.linkedChatId);\n const isBasicGroup = isChatBasicGroup(chat);\n const { invites } = global.management.byChatId[chatId] || {};\n\n return {\n chat,\n progress,\n isBasicGroup,\n hasLinkedChannel,\n canChangeInfo: isBasicGroup ? chat.isCreator : getHasAdminRight(chat, 'changeInfo'),\n canBanUsers: isBasicGroup ? chat.isCreator : getHasAdminRight(chat, 'banUsers'),\n canInvite: isBasicGroup ? chat.isCreator : getHasAdminRight(chat, 'inviteUsers'),\n exportedInvites: invites,\n lastSyncTime: global.lastSyncTime,\n availableReactionsCount: global.availableReactions?.filter((l) => !l.isInactive).length,\n };\n },\n)(ManageGroup));\n","import React, {\n FC, memo, useCallback, useEffect, useMemo, useState,\n} from '../../../lib/teact/teact';\nimport { getActions, withGlobal } from '../../../global';\n\nimport { ManagementScreens } from '../../../types';\nimport { ApiChat, ApiChatBannedRights, ApiChatMember } from '../../../api/types';\n\nimport useLang from '../../../hooks/useLang';\nimport { selectChat } from '../../../global/selectors';\nimport useHistoryBack from '../../../hooks/useHistoryBack';\n\nimport ListItem from '../../ui/ListItem';\nimport Checkbox from '../../ui/Checkbox';\nimport FloatingActionButton from '../../ui/FloatingActionButton';\nimport Spinner from '../../ui/Spinner';\nimport PrivateChatInfo from '../../common/PrivateChatInfo';\n\ntype OwnProps = {\n chatId: string;\n onScreenSelect: (screen: ManagementScreens) => void;\n onChatMemberSelect: (memberId: string, isPromotedByCurrentUser?: boolean) => void;\n onClose: NoneToVoidFunction;\n isActive: boolean;\n};\n\ntype StateProps = {\n chat?: ApiChat;\n currentUserId?: string;\n};\n\nconst FLOATING_BUTTON_ANIMATION_TIMEOUT_MS = 250;\n\nfunction getLangKeyForBannedRightKey(key: string) {\n switch (key) {\n case 'sendMessages':\n return 'UserRestrictionsNoSend';\n case 'sendMedia':\n return 'UserRestrictionsNoSendMedia';\n case 'sendStickers':\n return 'UserRestrictionsNoSendStickers';\n case 'embedLinks':\n return 'UserRestrictionsNoEmbedLinks';\n case 'sendPolls':\n return 'UserRestrictionsNoSendPolls';\n case 'changeInfo':\n return 'UserRestrictionsNoChangeInfo';\n case 'inviteUsers':\n return 'UserRestrictionsInviteUsers';\n case 'pinMessages':\n return 'UserRestrictionsPinMessages';\n default:\n return undefined;\n }\n}\n\nconst ManageGroupPermissions: FC = ({\n onScreenSelect,\n onChatMemberSelect,\n chat,\n currentUserId,\n onClose,\n isActive,\n}) => {\n const { updateChatDefaultBannedRights } = getActions();\n\n const [permissions, setPermissions] = useState({});\n const [havePermissionChanged, setHavePermissionChanged] = useState(false);\n const [isLoading, setIsLoading] = useState(false);\n const lang = useLang();\n\n useHistoryBack(isActive, onClose);\n\n const handleRemovedUsersClick = useCallback(() => {\n onScreenSelect(ManagementScreens.GroupRemovedUsers);\n }, [onScreenSelect]);\n\n const handleAddExceptionClick = useCallback(() => {\n onScreenSelect(ManagementScreens.GroupUserPermissionsCreate);\n }, [onScreenSelect]);\n\n const handleExceptionMemberClick = useCallback((member: ApiChatMember) => {\n onChatMemberSelect(member.userId, member.promotedByUserId === currentUserId);\n onScreenSelect(ManagementScreens.GroupUserPermissions);\n }, [currentUserId, onChatMemberSelect, onScreenSelect]);\n\n useEffect(() => {\n setPermissions((chat?.defaultBannedRights) || {});\n setHavePermissionChanged(false);\n setTimeout(() => {\n setIsLoading(false);\n }, FLOATING_BUTTON_ANIMATION_TIMEOUT_MS);\n }, [chat]);\n\n const handlePermissionChange = useCallback((e: React.ChangeEvent) => {\n const { name } = e.target;\n\n function getUpdatedPermissionValue(value: true | undefined) {\n return value ? undefined : true;\n }\n\n setPermissions((p) => ({\n ...p,\n [name]: getUpdatedPermissionValue(p[name as Exclude]),\n ...(name === 'sendStickers' && {\n sendGifs: getUpdatedPermissionValue(p[name]),\n }),\n }));\n setHavePermissionChanged(true);\n }, []);\n\n const handleSavePermissions = useCallback(() => {\n if (!chat) {\n return;\n }\n\n setIsLoading(true);\n updateChatDefaultBannedRights({ chatId: chat.id, bannedRights: permissions });\n }, [chat, permissions, updateChatDefaultBannedRights]);\n\n const removedUsersCount = useMemo(() => {\n if (!chat || !chat.fullInfo || !chat.fullInfo.kickedMembers) {\n return 0;\n }\n\n return chat.fullInfo.kickedMembers.length;\n }, [chat]);\n\n const exceptionMembers = useMemo(() => {\n if (!chat || !chat.fullInfo || !chat.fullInfo.members) {\n return [];\n }\n\n return chat.fullInfo.members.filter(({ bannedRights }) => Boolean(bannedRights));\n }, [chat]);\n\n const getMemberExceptions = useCallback((member: ApiChatMember) => {\n const { bannedRights } = member;\n if (!bannedRights || !chat) {\n return undefined;\n }\n\n const { defaultBannedRights } = chat;\n\n return Object.keys(bannedRights).reduce((result, key) => {\n if (\n !bannedRights[key as keyof ApiChatBannedRights]\n || (defaultBannedRights?.[key as keyof ApiChatBannedRights])\n || key === 'sendInline' || key === 'viewMessages' || key === 'sendGames'\n ) {\n return result;\n }\n\n const langKey = getLangKeyForBannedRightKey(key);\n\n if (!langKey) {\n return result;\n }\n\n const translatedString = lang(langKey);\n\n return `${result}${!result.length ? translatedString : `, ${translatedString}`}`;\n }, '');\n }, [chat, lang]);\n\n return (\n
\n
\n
\n

{lang('ChannelPermissionsHeader')}

\n\n
\n \n
\n
\n \n
\n
\n \n
\n
\n \n
\n
\n \n
\n
\n \n
\n
\n \n
\n
\n \n
\n
\n\n
\n \n {lang('ChannelBlockedUsers')}\n {removedUsersCount}\n \n
\n\n
\n

{lang('PrivacyExceptions')}

\n\n \n {lang('ChannelAddException')}\n \n\n {exceptionMembers.map((member) => (\n handleExceptionMemberClick(member)}\n >\n \n \n ))}\n
\n
\n\n \n {isLoading ? (\n \n ) : (\n \n )}\n \n
\n );\n};\n\nexport default memo(withGlobal(\n (global, { chatId }): StateProps => {\n const chat = selectChat(global, chatId);\n\n return { chat, currentUserId: global.currentUserId };\n },\n)(ManageGroupPermissions));\n","import React, {\n FC, useMemo, useState, memo, useRef, useCallback,\n} from '../../../lib/teact/teact';\nimport { getActions, getGlobal, withGlobal } from '../../../global';\n\nimport { ApiChat } from '../../../api/types';\n\nimport { filterUsersByName } from '../../../global/helpers';\nimport useLang from '../../../hooks/useLang';\n\nimport ChatOrUserPicker from '../../common/ChatOrUserPicker';\n\nexport type OwnProps = {\n chat: ApiChat;\n isOpen: boolean;\n onClose: NoneToVoidFunction;\n};\n\ntype StateProps = {\n currentUserId?: string;\n};\n\nconst RemoveGroupUserModal: FC = ({\n chat,\n currentUserId,\n isOpen,\n onClose,\n}) => {\n const {\n loadMoreMembers,\n deleteChatMember,\n } = getActions();\n\n const lang = useLang();\n const [filter, setFilter] = useState('');\n // eslint-disable-next-line no-null/no-null\n const filterRef = useRef(null);\n\n const usersId = useMemo(() => {\n const availableMemberIds = (chat.fullInfo?.members || [])\n .reduce((acc: string[], member) => {\n if (!member.isAdmin && !member.isOwner && member.userId !== currentUserId) {\n acc.push(member.userId);\n }\n return acc;\n }, []);\n\n // No need for expensive global updates on users, so we avoid them\n const usersById = getGlobal().users.byId;\n\n return filterUsersByName(availableMemberIds, usersById, filter);\n }, [chat.fullInfo?.members, currentUserId, filter]);\n\n const handleRemoveUser = useCallback((userId: string) => {\n deleteChatMember({ chatId: chat.id, userId });\n onClose();\n }, [chat.id, deleteChatMember, onClose]);\n\n return (\n \n );\n};\n\nexport default memo(withGlobal(\n (global): StateProps => {\n const { currentUserId } = global;\n\n return { currentUserId };\n },\n)(RemoveGroupUserModal));\n","import React, {\n FC, memo, useCallback, useMemo,\n} from '../../../lib/teact/teact';\nimport { getActions, withGlobal } from '../../../global';\n\nimport { ApiChat, ApiChatMember, ApiUser } from '../../../api/types';\n\nimport { selectChat } from '../../../global/selectors';\nimport { getHasAdminRight, getUserFullName, isChatChannel } from '../../../global/helpers';\nimport useLang from '../../../hooks/useLang';\nimport useHistoryBack from '../../../hooks/useHistoryBack';\nimport useFlag from '../../../hooks/useFlag';\n\nimport PrivateChatInfo from '../../common/PrivateChatInfo';\nimport ListItem from '../../ui/ListItem';\nimport FloatingActionButton from '../../ui/FloatingActionButton';\nimport RemoveGroupUserModal from './RemoveGroupUserModal';\n\ntype OwnProps = {\n chatId: string;\n onClose: NoneToVoidFunction;\n isActive: boolean;\n};\n\ntype StateProps = {\n chat?: ApiChat;\n usersById: Record;\n canDeleteMembers?: boolean;\n isChannel?: boolean;\n};\n\nconst ManageChatRemovedUsers: FC = ({\n chat,\n usersById,\n canDeleteMembers,\n isChannel,\n onClose,\n isActive,\n}) => {\n const { updateChatMemberBannedRights } = getActions();\n\n const lang = useLang();\n const [isRemoveUserModalOpen, openRemoveUserModal, closeRemoveUserModal] = useFlag();\n\n useHistoryBack(isActive, onClose);\n\n const removedMembers = useMemo(() => {\n if (!chat || !chat.fullInfo || !chat.fullInfo.kickedMembers) {\n return [];\n }\n\n return chat.fullInfo.kickedMembers;\n }, [chat]);\n\n const getRemovedBy = useCallback((member: ApiChatMember) => {\n if (!member.kickedByUserId) {\n return undefined;\n }\n\n const kickedByUser = usersById[member.kickedByUserId];\n if (!kickedByUser) {\n return undefined;\n }\n\n return lang('UserRemovedBy', getUserFullName(kickedByUser));\n }, [lang, usersById]);\n\n const getContextActions = useCallback((member: ApiChatMember) => {\n if (!chat) {\n return undefined;\n }\n\n return [{\n title: lang('Unblock'),\n icon: 'delete',\n destructive: true,\n handler: () => updateChatMemberBannedRights({\n chatId: chat.id,\n userId: member.userId,\n bannedRights: {},\n }),\n }];\n }, [lang, chat, updateChatMemberBannedRights]);\n\n return (\n
\n
\n
\n

{lang(isChannel ? 'NoBlockedChannel2' : 'NoBlockedGroup2')}

\n\n {removedMembers.map((member) => (\n \n \n \n ))}\n {canDeleteMembers && (\n \n \n \n )}\n {chat && canDeleteMembers && (\n \n )}\n
\n
\n
\n );\n};\n\nexport default memo(withGlobal(\n (global, { chatId }): StateProps => {\n const chat = selectChat(global, chatId);\n const { byId: usersById } = global.users;\n const canDeleteMembers = chat && (getHasAdminRight(chat, 'banUsers') || chat.isCreator);\n\n return {\n chat,\n usersById,\n canDeleteMembers,\n isChannel: chat && isChatChannel(chat),\n };\n },\n)(ManageChatRemovedUsers));\n","import { ChangeEvent } from 'react';\nimport React, {\n FC, memo, useCallback, useEffect, useState,\n} from '../../../lib/teact/teact';\nimport { getActions, withGlobal } from '../../../global';\n\nimport { ManagementScreens, ManagementProgress } from '../../../types';\nimport { ApiChat, ApiExportedInvite, ApiMediaFormat } from '../../../api/types';\n\nimport { getChatAvatarHash, getHasAdminRight } from '../../../global/helpers';\nimport useMedia from '../../../hooks/useMedia';\nimport useLang from '../../../hooks/useLang';\nimport { selectChat } from '../../../global/selectors';\nimport useFlag from '../../../hooks/useFlag';\nimport useHistoryBack from '../../../hooks/useHistoryBack';\nimport { formatInteger } from '../../../util/textFormat';\n\nimport AvatarEditable from '../../ui/AvatarEditable';\nimport InputText from '../../ui/InputText';\nimport ListItem from '../../ui/ListItem';\nimport Checkbox from '../../ui/Checkbox';\nimport Spinner from '../../ui/Spinner';\nimport FloatingActionButton from '../../ui/FloatingActionButton';\nimport ConfirmDialog from '../../ui/ConfirmDialog';\n\nimport './Management.scss';\n\ntype OwnProps = {\n chatId: string;\n onScreenSelect: (screen: ManagementScreens) => void;\n onClose: NoneToVoidFunction;\n isActive: boolean;\n};\n\ntype StateProps = {\n chat: ApiChat;\n progress?: ManagementProgress;\n isSignaturesShown: boolean;\n canChangeInfo?: boolean;\n canInvite?: boolean;\n exportedInvites?: ApiExportedInvite[];\n lastSyncTime?: number;\n availableReactionsCount?: number;\n};\n\nconst CHANNEL_TITLE_EMPTY = 'Channel title can\\'t be empty';\n\nconst ManageChannel: FC = ({\n chatId,\n chat,\n progress,\n isSignaturesShown,\n canChangeInfo,\n canInvite,\n exportedInvites,\n lastSyncTime,\n availableReactionsCount,\n onScreenSelect,\n onClose,\n isActive,\n}) => {\n const {\n updateChat,\n toggleSignatures,\n closeManagement,\n leaveChannel,\n deleteChannel,\n openChat,\n loadExportedChatInvites,\n loadChatJoinRequests,\n } = getActions();\n\n const currentTitle = chat ? (chat.title || '') : '';\n const currentAbout = chat?.fullInfo ? (chat.fullInfo.about || '') : '';\n const hasLinkedChat = chat?.fullInfo?.linkedChatId;\n\n const [isDeleteDialogOpen, openDeleteDialog, closeDeleteDialog] = useFlag();\n const [isProfileFieldsTouched, setIsProfileFieldsTouched] = useState(false);\n const [title, setTitle] = useState(currentTitle);\n const [about, setAbout] = useState(currentAbout);\n const [photo, setPhoto] = useState();\n const [error, setError] = useState();\n const imageHash = chat && getChatAvatarHash(chat);\n const currentAvatarBlobUrl = useMedia(imageHash, false, ApiMediaFormat.BlobUrl);\n const lang = useLang();\n\n useHistoryBack(isActive, onClose);\n\n useEffect(() => {\n if (lastSyncTime) {\n loadExportedChatInvites({ chatId });\n loadExportedChatInvites({ chatId, isRevoked: true });\n loadChatJoinRequests({ chatId });\n }\n }, [chatId, loadExportedChatInvites, lastSyncTime, loadChatJoinRequests]);\n\n useEffect(() => {\n if (progress === ManagementProgress.Complete) {\n setIsProfileFieldsTouched(false);\n setError(undefined);\n }\n }, [progress]);\n\n const adminsCount = (chat?.fullInfo?.adminMembers?.length) || 0;\n const removedUsersCount = (chat?.fullInfo?.kickedMembers?.length) || 0;\n\n const handleClickEditType = useCallback(() => {\n onScreenSelect(ManagementScreens.ChatPrivacyType);\n }, [onScreenSelect]);\n\n const handleClickDiscussion = useCallback(() => {\n onScreenSelect(ManagementScreens.Discussion);\n }, [onScreenSelect]);\n\n const handleClickReactions = useCallback(() => {\n onScreenSelect(ManagementScreens.Reactions);\n }, [onScreenSelect]);\n\n const handleClickAdministrators = useCallback(() => {\n onScreenSelect(ManagementScreens.ChatAdministrators);\n }, [onScreenSelect]);\n\n const handleClickInvites = useCallback(() => {\n onScreenSelect(ManagementScreens.Invites);\n }, [onScreenSelect]);\n\n const handleClickRequests = useCallback(() => {\n onScreenSelect(ManagementScreens.JoinRequests);\n }, [onScreenSelect]);\n\n const handleSetPhoto = useCallback((file: File) => {\n setPhoto(file);\n setIsProfileFieldsTouched(true);\n }, []);\n\n const handleTitleChange = useCallback((e: ChangeEvent) => {\n setTitle(e.target.value);\n setIsProfileFieldsTouched(true);\n }, []);\n\n const handleAboutChange = useCallback((e: ChangeEvent) => {\n setAbout(e.target.value);\n setIsProfileFieldsTouched(true);\n }, []);\n\n const handleUpdateChannel = useCallback(() => {\n const trimmedTitle = title.trim();\n const trimmedAbout = about.trim();\n\n if (!trimmedTitle.length) {\n setError(CHANNEL_TITLE_EMPTY);\n return;\n }\n\n updateChat({\n chatId,\n title: trimmedTitle,\n about: trimmedAbout,\n photo,\n });\n }, [about, chatId, photo, title, updateChat]);\n\n const handleToggleSignatures = useCallback(() => {\n toggleSignatures({ chatId, isEnabled: !isSignaturesShown });\n }, [chatId, isSignaturesShown, toggleSignatures]);\n\n const handleClickSubscribers = useCallback(() => {\n onScreenSelect(ManagementScreens.ChannelSubscribers);\n }, [onScreenSelect]);\n\n const handleRemovedUsersClick = useCallback(() => {\n onScreenSelect(ManagementScreens.ChannelRemovedUsers);\n }, [onScreenSelect]);\n\n const handleDeleteChannel = useCallback(() => {\n if (chat.isCreator) {\n deleteChannel({ chatId: chat.id });\n } else {\n leaveChannel({ chatId: chat.id });\n }\n\n closeDeleteDialog();\n closeManagement();\n openChat({ id: undefined });\n }, [chat.isCreator, chat.id, closeDeleteDialog, closeManagement, leaveChannel, deleteChannel, openChat]);\n\n const enabledReactionsCount = chat.fullInfo?.enabledReactions?.length || 0;\n\n if (chat.isRestricted || chat.isForbidden) {\n return undefined;\n }\n\n const isLoading = progress === ManagementProgress.InProgress;\n\n return (\n
\n
\n
\n \n \n \n {chat.isCreator && (\n \n {lang('ChannelType')}\n {chat.username ? lang('TypePublic') : lang('TypePrivate')}\n \n )}\n \n {lang('Discussion')}\n {hasLinkedChat ? lang('DiscussionUnlink') : lang('Add')}\n \n {canInvite && (\n \n {lang('GroupInfo.InviteLinks')}\n \n {exportedInvites ? formatInteger(exportedInvites.length) : lang('Loading')}\n \n \n )}\n {Boolean(chat.joinRequests?.length) && (\n \n {lang('SubscribeRequests')}\n \n {formatInteger(chat.joinRequests!.length)}\n \n \n )}\n \n {lang('Reactions')}\n \n {enabledReactionsCount}/{availableReactionsCount}\n \n \n
\n \n
\n
\n
\n \n {lang('ChannelAdministrators')}\n {adminsCount}\n \n \n {lang('ChannelSubscribers')}\n {lang('Subscribers', chat.membersCount ?? 0, 'i')}\n \n \n {lang('ChannelBlockedUsers')}\n {removedUsersCount}\n \n
\n
\n \n {chat.isCreator ? lang('ChannelDelete') : lang('LeaveChannel')}\n \n
\n
\n \n {isLoading ? (\n \n ) : (\n \n )}\n \n \n
\n );\n};\n\nexport default memo(withGlobal(\n (global, { chatId }): StateProps => {\n const chat = selectChat(global, chatId)!;\n const { progress } = global.management;\n const isSignaturesShown = Boolean(chat?.isSignaturesShown);\n const { invites } = global.management.byChatId[chatId] || {};\n\n return {\n chat,\n progress,\n isSignaturesShown,\n canChangeInfo: getHasAdminRight(chat, 'changeInfo'),\n canInvite: getHasAdminRight(chat, 'inviteUsers'),\n lastSyncTime: global.lastSyncTime,\n exportedInvites: invites,\n availableReactionsCount: global.availableReactions?.filter((l) => !l.isInactive).length,\n };\n },\n)(ManageChannel));\n","import React, {\n FC, memo, useCallback, useEffect, useState,\n} from '../../../lib/teact/teact';\nimport { getActions, withGlobal } from '../../../global';\n\nimport { ApiChat } from '../../../api/types';\nimport { ManagementProgress } from '../../../types';\n\nimport { selectChat, selectManagement } from '../../../global/selectors';\nimport { isChatChannel } from '../../../global/helpers';\nimport useFlag from '../../../hooks/useFlag';\nimport useLang from '../../../hooks/useLang';\nimport useHistoryBack from '../../../hooks/useHistoryBack';\n\nimport SafeLink from '../../common/SafeLink';\nimport ListItem from '../../ui/ListItem';\nimport RadioGroup from '../../ui/RadioGroup';\nimport Loading from '../../ui/Loading';\nimport Spinner from '../../ui/Spinner';\nimport FloatingActionButton from '../../ui/FloatingActionButton';\nimport UsernameInput from '../../common/UsernameInput';\nimport ConfirmDialog from '../../ui/ConfirmDialog';\n\ntype PrivacyType = 'private' | 'public';\n\ntype OwnProps = {\n chatId: string;\n onClose: NoneToVoidFunction;\n isActive: boolean;\n};\n\ntype StateProps = {\n chat: ApiChat;\n isChannel: boolean;\n progress?: ManagementProgress;\n isUsernameAvailable?: boolean;\n isProtected?: boolean;\n};\n\nconst ManageChatPrivacyType: FC = ({\n chat,\n onClose,\n isActive,\n isChannel,\n progress,\n isUsernameAvailable,\n isProtected,\n}) => {\n const {\n checkPublicLink,\n updatePublicLink,\n updatePrivateLink,\n toggleIsProtected,\n } = getActions();\n\n const isPublic = Boolean(chat.username);\n const privateLink = chat.fullInfo?.inviteLink;\n\n const [privacyType, setPrivacyType] = useState(isPublic ? 'public' : 'private');\n const [username, setUsername] = useState();\n const [isRevokeConfirmDialogOpen, openRevokeConfirmDialog, closeRevokeConfirmDialog] = useFlag();\n\n const canUpdate = Boolean(\n (privacyType === 'public' && username && isUsernameAvailable)\n || (privacyType === 'private' && isPublic),\n );\n\n useHistoryBack(isActive, onClose);\n\n useEffect(() => {\n if (privacyType && !privateLink) {\n updatePrivateLink();\n }\n }, [privacyType, privateLink, updatePrivateLink]);\n\n const handleOptionChange = useCallback((value: string) => {\n setPrivacyType(value as PrivacyType);\n }, []);\n\n const handleForwardingOptionChange = useCallback((value: string) => {\n toggleIsProtected({\n chatId: chat.id,\n isProtected: value === 'protected',\n });\n }, [chat.id, toggleIsProtected]);\n\n const handleSave = useCallback(() => {\n updatePublicLink({ username: privacyType === 'public' ? username : '' });\n }, [privacyType, updatePublicLink, username]);\n\n const handleRevokePrivateLink = useCallback(() => {\n closeRevokeConfirmDialog();\n updatePrivateLink();\n }, [closeRevokeConfirmDialog, updatePrivateLink]);\n\n const lang = useLang();\n const langPrefix1 = isChannel ? 'Channel' : 'Mega';\n const langPrefix2 = isChannel ? 'Channel' : 'Group';\n\n const options = [\n { value: 'private', label: lang(`${langPrefix1}Private`), subLabel: lang(`${langPrefix1}PrivateInfo`) },\n { value: 'public', label: lang(`${langPrefix1}Public`), subLabel: lang(`${langPrefix1}PublicInfo`) },\n ];\n\n const forwardingOptions = [{\n value: 'allowed',\n label: lang('ChannelVisibility.Forwarding.Enabled'),\n }, {\n value: 'protected',\n label: lang('ChannelVisibility.Forwarding.Disabled'),\n }];\n\n const isLoading = progress === ManagementProgress.InProgress;\n\n return (\n
\n
\n
\n

{lang(`${langPrefix2}Type`)}

\n \n
\n {privacyType === 'private' ? (\n
\n {privateLink ? (\n <>\n \n

\n {lang(`${langPrefix1}PrivateLinkHelp`)}\n

\n\n \n {lang('RevokeLink')}\n \n \n \n ) : (\n \n )}\n
\n ) : (\n
\n \n

\n {lang(`${langPrefix2}.Username.CreatePublicLinkHelp`)}\n

\n
\n )}\n
\n

\n {lang(isChannel ? 'ChannelVisibility.Forwarding.ChannelTitle' : 'ChannelVisibility.Forwarding.GroupTitle')}\n

\n \n

\n {isChannel\n ? lang('ChannelVisibility.Forwarding.ChannelInfo')\n : lang('ChannelVisibility.Forwarding.GroupInfo')}\n

\n
\n
\n \n {isLoading ? (\n \n ) : (\n \n )}\n \n
\n );\n};\n\nexport default memo(withGlobal(\n (global, { chatId }): StateProps => {\n const chat = selectChat(global, chatId)!;\n const { isUsernameAvailable } = selectManagement(global, chatId)!;\n\n return {\n chat,\n isChannel: isChatChannel(chat),\n progress: global.management.progress,\n isUsernameAvailable,\n isProtected: chat?.isProtected,\n };\n },\n)(ManageChatPrivacyType));\n","import React, {\n FC, memo, useCallback, useEffect, useState,\n} from '../../../lib/teact/teact';\nimport { getActions, withGlobal } from '../../../global';\n\nimport { ApiChat } from '../../../api/types';\nimport { ManagementScreens } from '../../../types';\n\nimport { STICKER_SIZE_DISCUSSION_GROUPS } from '../../../config';\nimport { selectChat } from '../../../global/selectors';\nimport getAnimationData from '../../common/helpers/animatedAssets';\nimport useLang from '../../../hooks/useLang';\nimport useHistoryBack from '../../../hooks/useHistoryBack';\n\nimport ListItem from '../../ui/ListItem';\nimport NothingFound from '../../common/NothingFound';\nimport GroupChatInfo from '../../common/GroupChatInfo';\nimport AnimatedSticker from '../../common/AnimatedSticker';\nimport ConfirmDialog from '../../ui/ConfirmDialog';\nimport useFlag from '../../../hooks/useFlag';\nimport renderText from '../../common/helpers/renderText';\nimport Avatar from '../../common/Avatar';\nimport { isChatChannel } from '../../../global/helpers';\n\ntype OwnProps = {\n chatId: string;\n onScreenSelect: (screen: ManagementScreens) => void;\n onClose: NoneToVoidFunction;\n isActive: boolean;\n};\n\ntype StateProps = {\n chat?: ApiChat;\n chatsByIds: Record;\n linkedChat?: ApiChat;\n forDiscussionIds?: string[];\n isChannel?: boolean;\n};\n\nconst ManageDiscussion: FC = ({\n chat,\n onClose,\n isActive,\n chatId,\n chatsByIds,\n linkedChat,\n forDiscussionIds,\n isChannel,\n onScreenSelect,\n}) => {\n const {\n loadGroupsForDiscussion,\n linkDiscussionGroup,\n unlinkDiscussionGroup,\n } = getActions();\n\n const [linkedGroupId, setLinkedGroupId] = useState();\n const [animationData, setAnimationData] = useState();\n const [isAnimationLoaded, setIsAnimationLoaded] = useState(false);\n const handleAnimationLoad = useCallback(() => setIsAnimationLoaded(true), []);\n const [isConfirmUnlinkGroupDialogOpen, openConfirmUnlinkGroupDialog, closeConfirmUnlinkGroupDialog] = useFlag();\n const [isConfirmLinkGroupDialogOpen, openConfirmLinkGroupDialog, closeConfirmLinkGroupDialog] = useFlag();\n const lang = useLang();\n const linkedChatId = linkedChat?.id;\n\n useHistoryBack(isActive, onClose);\n\n useEffect(() => {\n loadGroupsForDiscussion();\n }, [loadGroupsForDiscussion]);\n\n useEffect(() => {\n if (!animationData) {\n getAnimationData('DiscussionGroups').then(setAnimationData);\n }\n }, [animationData]);\n\n const handleUnlinkGroupSessions = useCallback(() => {\n closeConfirmUnlinkGroupDialog();\n unlinkDiscussionGroup({ channelId: isChannel ? chatId : linkedChatId });\n if (!isChannel) {\n onScreenSelect(ManagementScreens.Initial);\n }\n }, [closeConfirmUnlinkGroupDialog, unlinkDiscussionGroup, isChannel, chatId, linkedChatId, onScreenSelect]);\n\n const handleLinkGroupSessions = useCallback(() => {\n closeConfirmLinkGroupDialog();\n linkDiscussionGroup({ channelId: chatId, chatId: linkedGroupId });\n }, [closeConfirmLinkGroupDialog, linkDiscussionGroup, chatId, linkedGroupId]);\n\n const onDiscussionClick = (groupId: string) => {\n setLinkedGroupId(groupId);\n openConfirmLinkGroupDialog();\n };\n\n function renderUnlinkGroupHeader() {\n return (\n
\n \n
\n {lang(isChannel ? 'DiscussionUnlinkGroup' : 'DiscussionUnlinkChannel')}\n
\n
\n );\n }\n\n function renderLinkGroupHeader() {\n const linkedGroup = chatsByIds[linkedGroupId];\n\n if (!linkedGroup) {\n return undefined;\n }\n\n return (\n
\n \n
\n {lang('Channel.DiscussionGroup.LinkGroup')}\n
\n
\n );\n }\n\n function renderLinkGroupConfirmText() {\n const linkedGroup = chatsByIds[linkedGroupId];\n\n if (!linkedGroup) {\n return undefined;\n }\n\n if (linkedGroup.hasPrivateLink) {\n return renderText(\n `Do you want to make **${linkedGroup.title}** the discussion board for **${chat!.title}**?`,\n ['br', 'simple_markdown'],\n );\n // return renderText(\n // lang('DiscussionLinkGroupPublicAlert', linkedChat.title, chat!.title),\n // ['br', 'simple_markdown'],\n // );\n }\n\n return renderText(\n // eslint-disable-next-line max-len\n `Do you want to make **${linkedGroup.title}** the discussion board for **${chat!.title}**?\\n\\nAnyone from the channel will be able to see messages in this group.`,\n ['br', 'simple_markdown'],\n );\n // return renderText(\n // lang('DiscussionLinkGroupPrivateAlert', linkedChat.title, chat!.title),\n // ['br', 'simple_markdown'],\n // );\n }\n\n function renderLinkedGroup() {\n return (\n
\n \n \n \n \n {lang(isChannel ? 'DiscussionUnlinkGroup' : 'DiscussionUnlinkChannel')}\n \n \n
\n );\n }\n\n function renderDiscussionGroups() {\n return (\n
\n

{lang('DiscussionChannelHelp')}

\n\n
\n \n {lang('DiscussionCreateGroup')}\n \n {forDiscussionIds ? (\n forDiscussionIds.map((id, i) => (\n {\n onDiscussionClick(id);\n }}\n >\n \n \n ))\n ) : (\n \n )}\n
\n

{lang('DiscussionChannelHelp2')}

\n \n
\n );\n }\n\n return (\n
\n
\n
\n
\n {animationData && (\n \n )}\n
\n {linkedChat && renderLinkedGroup()}\n {!linkedChat && renderDiscussionGroups()}\n
\n
\n
\n );\n};\n\nexport default memo(withGlobal(\n (global, { chatId }): StateProps => {\n const chat = selectChat(global, chatId);\n const { forDiscussionIds, byId: chatsByIds } = global.chats;\n const linkedChat = chat?.fullInfo?.linkedChatId\n ? selectChat(global, chat.fullInfo.linkedChatId)\n : undefined;\n\n return {\n chat,\n chatsByIds,\n forDiscussionIds,\n linkedChat,\n isChannel: chat && isChatChannel(chat),\n };\n },\n)(ManageDiscussion));\n","import React, {\n FC, memo, useCallback, useEffect, useMemo, useState,\n} from '../../../lib/teact/teact';\nimport { getActions, withGlobal } from '../../../global';\n\nimport { ApiChat, ApiChatBannedRights } from '../../../api/types';\nimport { ManagementScreens } from '../../../types';\n\nimport { selectChat } from '../../../global/selectors';\nimport useLang from '../../../hooks/useLang';\nimport useFlag from '../../../hooks/useFlag';\nimport useHistoryBack from '../../../hooks/useHistoryBack';\n\nimport PrivateChatInfo from '../../common/PrivateChatInfo';\nimport ListItem from '../../ui/ListItem';\nimport Checkbox from '../../ui/Checkbox';\nimport FloatingActionButton from '../../ui/FloatingActionButton';\nimport Spinner from '../../ui/Spinner';\nimport ConfirmDialog from '../../ui/ConfirmDialog';\n\ntype OwnProps = {\n chatId: string;\n selectedChatMemberId?: string;\n isPromotedByCurrentUser?: boolean;\n onScreenSelect: (screen: ManagementScreens) => void;\n onClose: NoneToVoidFunction;\n isActive: boolean;\n};\n\ntype StateProps = {\n chat?: ApiChat;\n isFormFullyDisabled?: boolean;\n};\n\nconst ManageGroupUserPermissions: FC = ({\n chat,\n selectedChatMemberId,\n onScreenSelect,\n isFormFullyDisabled,\n onClose,\n isActive,\n}) => {\n const { updateChatMemberBannedRights } = getActions();\n\n const [permissions, setPermissions] = useState({});\n const [havePermissionChanged, setHavePermissionChanged] = useState(false);\n const [isLoading, setIsLoading] = useState(false);\n const [isBanConfirmationDialogOpen, openBanConfirmationDialog, closeBanConfirmationDialog] = useFlag();\n const lang = useLang();\n\n useHistoryBack(isActive, onClose);\n\n const selectedChatMember = useMemo(() => {\n if (!chat || !chat.fullInfo || !chat.fullInfo.members) {\n return undefined;\n }\n\n return chat.fullInfo.members.find(({ userId }) => userId === selectedChatMemberId);\n }, [chat, selectedChatMemberId]);\n\n useEffect(() => {\n if (chat?.fullInfo && selectedChatMemberId && !selectedChatMember) {\n onScreenSelect(ManagementScreens.GroupPermissions);\n }\n }, [chat, onScreenSelect, selectedChatMember, selectedChatMemberId]);\n\n useEffect(() => {\n setPermissions((selectedChatMember?.bannedRights) || (chat?.defaultBannedRights) || {});\n setHavePermissionChanged(false);\n setIsLoading(false);\n }, [chat, selectedChatMember]);\n\n const handlePermissionChange = useCallback((e: React.ChangeEvent) => {\n const { name } = e.target;\n\n function getUpdatedPermissionValue(value: true | undefined) {\n return value ? undefined : true;\n }\n\n setPermissions((p) => ({\n ...p,\n [name]: getUpdatedPermissionValue(p[name as Exclude]),\n ...(name === 'sendStickers' && {\n sendGifs: getUpdatedPermissionValue(p[name]),\n }),\n }));\n setHavePermissionChanged(true);\n }, []);\n\n const handleSavePermissions = useCallback(() => {\n if (!chat || !selectedChatMemberId) {\n return;\n }\n\n setIsLoading(true);\n updateChatMemberBannedRights({\n chatId: chat.id,\n userId: selectedChatMemberId,\n bannedRights: permissions,\n });\n }, [chat, selectedChatMemberId, permissions, updateChatMemberBannedRights]);\n\n const handleBanFromGroup = useCallback(() => {\n if (!chat || !selectedChatMemberId) {\n return;\n }\n\n updateChatMemberBannedRights({\n chatId: chat.id,\n userId: selectedChatMemberId,\n bannedRights: {\n viewMessages: true,\n },\n });\n }, [chat, selectedChatMemberId, updateChatMemberBannedRights]);\n\n const getControlIsDisabled = useCallback((key: Exclude) => {\n if (isFormFullyDisabled) {\n return true;\n }\n\n if (!chat || !chat.defaultBannedRights) {\n return false;\n }\n\n return chat.defaultBannedRights[key];\n }, [chat, isFormFullyDisabled]);\n\n if (!selectedChatMember) {\n return undefined;\n }\n\n return (\n
\n
\n
\n \n \n \n\n

{lang('UserRestrictionsCanDo')}

\n\n
\n \n
\n
\n \n
\n
\n \n
\n
\n \n
\n
\n \n
\n
\n \n
\n
\n \n
\n
\n \n
\n
\n\n {!isFormFullyDisabled && (\n
\n \n {lang('UserRestrictionsBlock')}\n \n
\n )}\n
\n\n \n {isLoading ? (\n \n ) : (\n \n )}\n \n\n \n
\n );\n};\n\nexport default memo(withGlobal(\n (global, { chatId, isPromotedByCurrentUser }): StateProps => {\n const chat = selectChat(global, chatId)!;\n const isFormFullyDisabled = !(chat.isCreator || isPromotedByCurrentUser);\n\n return { chat, isFormFullyDisabled };\n },\n)(ManageGroupUserPermissions));\n","import React, {\n FC, memo, useCallback, useMemo,\n} from '../../../lib/teact/teact';\nimport { getGlobal, withGlobal } from '../../../global';\n\nimport { ManagementScreens } from '../../../types';\nimport { ApiChat, ApiChatMember } from '../../../api/types';\n\nimport { getUserFullName, isChatChannel } from '../../../global/helpers';\nimport { selectChat } from '../../../global/selectors';\nimport useLang from '../../../hooks/useLang';\nimport useHistoryBack from '../../../hooks/useHistoryBack';\n\nimport ListItem from '../../ui/ListItem';\nimport PrivateChatInfo from '../../common/PrivateChatInfo';\nimport FloatingActionButton from '../../ui/FloatingActionButton';\n\ntype OwnProps = {\n chatId: string;\n onScreenSelect: (screen: ManagementScreens) => void;\n onChatMemberSelect: (memberId: string, isPromotedByCurrentUser?: boolean) => void;\n onClose: NoneToVoidFunction;\n isActive: boolean;\n};\n\ntype StateProps = {\n chat: ApiChat;\n currentUserId?: string;\n isChannel: boolean;\n};\n\nconst ManageChatAdministrators: FC = ({\n chat,\n isChannel,\n currentUserId,\n onScreenSelect,\n onChatMemberSelect,\n onClose,\n isActive,\n}) => {\n const lang = useLang();\n\n useHistoryBack(isActive, onClose);\n\n const handleRecentActionsClick = useCallback(() => {\n onScreenSelect(ManagementScreens.GroupRecentActions);\n }, [onScreenSelect]);\n\n const adminMembers = useMemo(() => {\n if (!chat.fullInfo || !chat.fullInfo.adminMembers) {\n return [];\n }\n\n return chat.fullInfo.adminMembers.sort((a, b) => {\n if (a.isOwner) {\n return -1;\n } else if (b.isOwner) {\n return 1;\n }\n\n return 0;\n });\n }, [chat]);\n\n const handleAdminMemberClick = useCallback((member: ApiChatMember) => {\n onChatMemberSelect(member.userId, member.promotedByUserId === currentUserId);\n onScreenSelect(ManagementScreens.ChatAdminRights);\n }, [currentUserId, onChatMemberSelect, onScreenSelect]);\n\n const handleAddAdminClick = useCallback(() => {\n onScreenSelect(ManagementScreens.GroupAddAdmins);\n }, [onScreenSelect]);\n\n const getMemberStatus = useCallback((member: ApiChatMember) => {\n if (member.isOwner) {\n return lang('ChannelCreator');\n }\n\n // No need for expensive global updates on users, so we avoid them\n const usersById = getGlobal().users.byId;\n const promotedByUser = member.promotedByUserId ? usersById[member.promotedByUserId] : undefined;\n\n if (promotedByUser) {\n return lang('EditAdminPromotedBy', getUserFullName(promotedByUser));\n }\n\n return lang('ChannelAdmin');\n }, [lang]);\n\n return (\n
\n
\n
\n \n {lang('EventLog')}\n {lang(isChannel ? 'EventLogInfoDetailChannel' : 'EventLogInfoDetail')}\n \n
\n\n
\n

\n {isChannel\n ? 'You can add administrators to help you manage your channel.'\n : 'You can add administrators to help you manage your group.'}\n

\n\n {adminMembers.map((member) => (\n handleAdminMemberClick(member)}\n >\n \n \n ))}\n\n \n \n \n
\n
\n
\n );\n};\n\nexport default memo(withGlobal(\n (global, { chatId }): StateProps => {\n const chat = selectChat(global, chatId)!;\n\n return {\n chat,\n currentUserId: global.currentUserId,\n isChannel: isChatChannel(chat),\n };\n },\n)(ManageChatAdministrators));\n","import React, {\n FC, memo, useCallback, useMemo,\n} from '../../../lib/teact/teact';\nimport { withGlobal } from '../../../global';\n\nimport { ApiChat, ApiChatMember } from '../../../api/types';\nimport useLang from '../../../hooks/useLang';\nimport { selectChat } from '../../../global/selectors';\nimport useHistoryBack from '../../../hooks/useHistoryBack';\n\nimport ListItem from '../../ui/ListItem';\nimport Checkbox from '../../ui/Checkbox';\nimport PrivateChatInfo from '../../common/PrivateChatInfo';\n\ntype OwnProps = {\n chatId: string;\n onClose: NoneToVoidFunction;\n isActive: boolean;\n};\n\ntype StateProps = {\n chat?: ApiChat;\n};\n\nconst ManageGroupRecentActions: FC = ({ chat, onClose, isActive }) => {\n const lang = useLang();\n\n useHistoryBack(isActive, onClose);\n\n const adminMembers = useMemo(() => {\n if (!chat || !chat.fullInfo || !chat.fullInfo.adminMembers) {\n return [];\n }\n\n return chat.fullInfo.adminMembers.sort((a, b) => {\n if (a.isOwner) {\n return -1;\n } else if (b.isOwner) {\n return 1;\n }\n\n return 0;\n });\n }, [chat]);\n\n const getMemberStatus = useCallback((member: ApiChatMember) => {\n if (member.isOwner) {\n return lang('ChannelCreator');\n }\n\n return lang('ChannelAdmin');\n }, [lang]);\n\n return (\n
\n
\n
\n

Actions

\n\n
\n \n
\n
\n \n
\n
\n \n
\n
\n \n
\n
\n \n
\n
\n \n
\n
\n \n
\n
\n\n
\n

{lang('Channel.Management.Title')}

\n\n
\n \n
\n\n {adminMembers.map((member) => (\n \n \n \n \n ))}\n
\n
\n
\n );\n};\n\nexport default memo(withGlobal(\n (global, { chatId }): StateProps => {\n const chat = selectChat(global, chatId);\n\n return { chat };\n },\n)(ManageGroupRecentActions));\n","import React, {\n FC, memo, useCallback, useEffect, useMemo, useState,\n} from '../../../lib/teact/teact';\nimport { getActions, getGlobal, withGlobal } from '../../../global';\n\nimport { ApiChat, ApiChatAdminRights, ApiUser } from '../../../api/types';\nimport { ManagementScreens } from '../../../types';\n\nimport { selectChat } from '../../../global/selectors';\nimport { getUserFullName, isChatBasicGroup, isChatChannel } from '../../../global/helpers';\nimport useLang from '../../../hooks/useLang';\nimport useFlag from '../../../hooks/useFlag';\nimport useHistoryBack from '../../../hooks/useHistoryBack';\n\nimport PrivateChatInfo from '../../common/PrivateChatInfo';\nimport ListItem from '../../ui/ListItem';\nimport Checkbox from '../../ui/Checkbox';\nimport FloatingActionButton from '../../ui/FloatingActionButton';\nimport Spinner from '../../ui/Spinner';\nimport ConfirmDialog from '../../ui/ConfirmDialog';\nimport InputText from '../../ui/InputText';\n\ntype OwnProps = {\n chatId: string;\n selectedUserId?: string;\n isPromotedByCurrentUser?: boolean;\n isNewAdmin?: boolean;\n onScreenSelect: (screen: ManagementScreens) => void;\n onClose: NoneToVoidFunction;\n isActive: boolean;\n};\n\ntype StateProps = {\n chat: ApiChat;\n usersById: Record;\n currentUserId?: string;\n isChannel: boolean;\n isFormFullyDisabled: boolean;\n defaultRights?: ApiChatAdminRights;\n};\n\nconst CUSTOM_TITLE_MAX_LENGTH = 16;\n\nconst ManageGroupAdminRights: FC = ({\n isNewAdmin,\n selectedUserId,\n defaultRights,\n onScreenSelect,\n chat,\n usersById,\n currentUserId,\n isChannel,\n isFormFullyDisabled,\n onClose,\n isActive,\n}) => {\n const { updateChatAdmin } = getActions();\n\n const [permissions, setPermissions] = useState({});\n const [isTouched, setIsTouched] = useState(Boolean(isNewAdmin));\n const [isLoading, setIsLoading] = useState(false);\n const [isDismissConfirmationDialogOpen, openDismissConfirmationDialog, closeDismissConfirmationDialog] = useFlag();\n const [customTitle, setCustomTitle] = useState('');\n const lang = useLang();\n\n useHistoryBack(isActive, onClose);\n\n const selectedChatMember = useMemo(() => {\n const selectedAdminMember = chat.fullInfo?.adminMembers?.find(({ userId }) => userId === selectedUserId);\n\n // If `selectedAdminMember` variable is filled with a value, then we have already saved the administrator,\n // so now we need to return to the list of administrators\n if (isNewAdmin && (selectedAdminMember || !selectedUserId)) {\n return undefined;\n }\n\n if (isNewAdmin) {\n const user = getGlobal().users.byId[selectedUserId!];\n\n return user ? {\n userId: user.id,\n adminRights: defaultRights,\n customTitle: lang('ChannelAdmin'),\n isOwner: false,\n promotedByUserId: undefined,\n } : undefined;\n }\n\n return selectedAdminMember;\n }, [chat.fullInfo?.adminMembers, defaultRights, isNewAdmin, lang, selectedUserId]);\n\n useEffect(() => {\n if (chat?.fullInfo && selectedUserId && !selectedChatMember) {\n onScreenSelect(ManagementScreens.ChatAdministrators);\n }\n }, [chat, onScreenSelect, selectedChatMember, selectedUserId]);\n\n useEffect(() => {\n setPermissions(selectedChatMember?.adminRights || {});\n setCustomTitle((selectedChatMember?.customTitle || '').substr(0, CUSTOM_TITLE_MAX_LENGTH));\n setIsTouched(Boolean(isNewAdmin));\n setIsLoading(false);\n }, [defaultRights, isNewAdmin, selectedChatMember]);\n\n const handlePermissionChange = useCallback((e: React.ChangeEvent) => {\n const { name } = e.target;\n\n function getUpdatedPermissionValue(value: true | undefined) {\n return value ? undefined : true;\n }\n\n setPermissions((p) => ({\n ...p,\n [name]: getUpdatedPermissionValue(p[name as keyof ApiChatAdminRights]),\n }));\n setIsTouched(true);\n }, []);\n\n const handleSavePermissions = useCallback(() => {\n if (!selectedUserId) {\n return;\n }\n\n setIsLoading(true);\n updateChatAdmin({\n chatId: chat.id,\n userId: selectedUserId,\n adminRights: permissions,\n customTitle,\n });\n }, [selectedUserId, updateChatAdmin, chat.id, permissions, customTitle]);\n\n const handleDismissAdmin = useCallback(() => {\n if (!selectedUserId) {\n return;\n }\n\n updateChatAdmin({\n chatId: chat.id,\n userId: selectedUserId,\n adminRights: {},\n });\n closeDismissConfirmationDialog();\n }, [chat.id, closeDismissConfirmationDialog, selectedUserId, updateChatAdmin]);\n\n const getControlIsDisabled = useCallback((key: keyof ApiChatAdminRights) => {\n if (isChatBasicGroup(chat)) {\n return false;\n }\n\n if (isFormFullyDisabled || !chat.adminRights) {\n return true;\n }\n\n return !chat.adminRights![key];\n }, [chat, isFormFullyDisabled]);\n\n const memberStatus = useMemo(() => {\n if (isNewAdmin || !selectedChatMember) {\n return undefined;\n }\n\n if (selectedChatMember.isOwner) {\n return lang('ChannelCreator');\n }\n\n const promotedByUser = selectedChatMember.promotedByUserId\n ? usersById[selectedChatMember.promotedByUserId]\n : undefined;\n\n if (promotedByUser) {\n return lang('EditAdminPromotedBy', getUserFullName(promotedByUser));\n }\n\n return lang('ChannelAdmin');\n }, [isNewAdmin, selectedChatMember, usersById, lang]);\n\n const handleCustomTitleChange = useCallback((e) => {\n const { value } = e.target;\n setCustomTitle(value);\n setIsTouched(true);\n }, []);\n\n if (!selectedChatMember) {\n return undefined;\n }\n\n return (\n
\n
\n
\n \n \n \n\n

{lang('EditAdminWhatCanDo')}

\n\n
\n \n
\n {isChannel && (\n
\n \n
\n )}\n {isChannel && (\n
\n \n
\n )}\n
\n \n
\n {!isChannel && (\n
\n \n
\n )}\n
\n \n
\n {!isChannel && (\n
\n \n
\n )}\n
\n \n
\n
\n \n
\n {!isChannel && (\n
\n \n
\n )}\n\n {isFormFullyDisabled && (\n

\n {lang('Channel.EditAdmin.CannotEdit')}\n

\n )}\n\n {!isChannel && (\n \n )}\n\n {currentUserId !== selectedUserId && !isFormFullyDisabled && !isNewAdmin && (\n \n {lang('EditAdminRemoveAdmin')}\n \n )}\n
\n
\n\n \n {isLoading ? (\n \n ) : (\n \n )}\n \n\n {!isNewAdmin && (\n \n )}\n
\n );\n};\n\nexport default memo(withGlobal(\n (global, { chatId, isPromotedByCurrentUser }): StateProps => {\n const chat = selectChat(global, chatId)!;\n const { byId: usersById } = global.users;\n const { currentUserId } = global;\n const isChannel = isChatChannel(chat);\n const isFormFullyDisabled = !(chat.isCreator || isPromotedByCurrentUser);\n\n return {\n chat,\n usersById,\n currentUserId,\n isChannel,\n isFormFullyDisabled,\n defaultRights: chat.adminRights,\n };\n },\n)(ManageGroupAdminRights));\n","import React, {\n FC, memo, useCallback, useMemo, useRef,\n} from '../../../lib/teact/teact';\nimport { getActions, getGlobal, withGlobal } from '../../../global';\n\nimport { ApiChatMember, ApiUserStatus } from '../../../api/types';\nimport { ManagementScreens } from '../../../types';\n\nimport { unique } from '../../../util/iteratees';\nimport { selectChat } from '../../../global/selectors';\nimport {\n sortUserIds, isChatChannel, filterUsersByName, sortChatIds, isUserBot,\n} from '../../../global/helpers';\nimport useLang from '../../../hooks/useLang';\nimport useHistoryBack from '../../../hooks/useHistoryBack';\nimport useInfiniteScroll from '../../../hooks/useInfiniteScroll';\nimport useKeyboardListNavigation from '../../../hooks/useKeyboardListNavigation';\n\nimport PrivateChatInfo from '../../common/PrivateChatInfo';\nimport NothingFound from '../../common/NothingFound';\nimport ListItem from '../../ui/ListItem';\nimport InputText from '../../ui/InputText';\nimport InfiniteScroll from '../../ui/InfiniteScroll';\nimport Loading from '../../ui/Loading';\n\ntype OwnProps = {\n chatId: string;\n isActive: boolean;\n noAdmins?: boolean;\n onClose: NoneToVoidFunction;\n onScreenSelect?: (screen: ManagementScreens) => void;\n onChatMemberSelect?: (memberId: string, isPromotedByCurrentUser?: boolean) => void;\n};\n\ntype StateProps = {\n userStatusesById: Record;\n members?: ApiChatMember[];\n adminMembers?: ApiChatMember[];\n isChannel?: boolean;\n localContactIds?: string[];\n searchQuery?: string;\n isSearching?: boolean;\n localUserIds?: string[];\n globalUserIds?: string[];\n serverTimeOffset: number;\n};\n\nconst ManageGroupMembers: FC = ({\n noAdmins,\n members,\n adminMembers,\n userStatusesById,\n isChannel,\n isActive,\n globalUserIds,\n localContactIds,\n localUserIds,\n isSearching,\n searchQuery,\n serverTimeOffset,\n onClose,\n onScreenSelect,\n onChatMemberSelect,\n}) => {\n const { openChat, setUserSearchQuery, loadContactList } = getActions();\n const lang = useLang();\n // eslint-disable-next-line no-null/no-null\n const inputRef = useRef(null);\n // eslint-disable-next-line no-null/no-null\n const containerRef = useRef(null);\n\n const adminIds = useMemo(() => {\n return noAdmins ? adminMembers?.map(({ userId }) => userId) || [] : [];\n }, [adminMembers, noAdmins]);\n\n const memberIds = useMemo(() => {\n // No need for expensive global updates on users, so we avoid them\n const usersById = getGlobal().users.byId;\n if (!members || !usersById) {\n return [];\n }\n\n const userIds = sortUserIds(\n members.map(({ userId }) => userId),\n usersById,\n userStatusesById,\n undefined,\n serverTimeOffset,\n );\n\n return noAdmins ? userIds.filter((userId) => !adminIds.includes(userId)) : userIds;\n }, [members, userStatusesById, serverTimeOffset, noAdmins, adminIds]);\n\n const displayedIds = useMemo(() => {\n // No need for expensive global updates on users, so we avoid them\n const usersById = getGlobal().users.byId;\n const chatsById = getGlobal().chats.byId;\n const shouldUseSearchResults = Boolean(searchQuery);\n const listedIds = !shouldUseSearchResults\n ? memberIds\n : (localContactIds ? filterUsersByName(localContactIds, usersById, searchQuery) : []);\n\n return sortChatIds(\n unique([\n ...listedIds,\n ...(shouldUseSearchResults ? localUserIds || [] : []),\n ...(shouldUseSearchResults ? globalUserIds || [] : []),\n ]).filter((contactId) => {\n const user = usersById[contactId];\n if (!user) {\n return true;\n }\n\n return (isChannel || user.canBeInvitedToGroup || !isUserBot(user))\n && (!noAdmins || !adminIds.includes(contactId));\n }),\n chatsById,\n true,\n );\n }, [memberIds, localContactIds, searchQuery, localUserIds, globalUserIds, isChannel, noAdmins, adminIds]);\n\n const [viewportIds, getMore] = useInfiniteScroll(loadContactList, displayedIds, Boolean(searchQuery));\n\n const handleMemberClick = useCallback((id: string) => {\n if (noAdmins) {\n onChatMemberSelect!(id, false);\n onScreenSelect!(ManagementScreens.ChatNewAdminRights);\n } else {\n openChat({ id });\n }\n }, [noAdmins, onChatMemberSelect, onScreenSelect, openChat]);\n\n const handleFilterChange = useCallback((e: React.ChangeEvent) => {\n setUserSearchQuery({ query: e.target.value });\n }, [setUserSearchQuery]);\n const handleKeyDown = useKeyboardListNavigation(containerRef, isActive, (index) => {\n if (viewportIds && viewportIds.length > 0) {\n handleMemberClick(viewportIds[index === -1 ? 0 : index]);\n }\n }, '.ListItem-button', true);\n\n useHistoryBack(isActive, onClose);\n\n function renderSearchField() {\n return (\n
\n \n
\n );\n }\n\n return (\n
\n {noAdmins && renderSearchField()}\n
\n
\n {viewportIds?.length ? (\n \n {viewportIds.map((id) => (\n handleMemberClick(id)}\n >\n \n \n ))}\n \n ) : !isSearching && viewportIds && !viewportIds.length ? (\n \n ) : (\n \n )}\n
\n
\n
\n );\n};\n\nexport default memo(withGlobal(\n (global, { chatId }): StateProps => {\n const chat = selectChat(global, chatId);\n const { statusesById: userStatusesById } = global.users;\n const members = chat?.fullInfo?.members;\n const adminMembers = chat?.fullInfo?.adminMembers;\n const isChannel = chat && isChatChannel(chat);\n const { userIds: localContactIds } = global.contactList || {};\n\n const {\n query: searchQuery,\n fetchingStatus,\n globalUserIds,\n localUserIds,\n } = global.userSearch;\n\n return {\n members,\n adminMembers,\n userStatusesById,\n isChannel,\n localContactIds,\n searchQuery,\n isSearching: fetchingStatus,\n globalUserIds,\n localUserIds,\n serverTimeOffset: global.serverTimeOffset,\n };\n },\n)(ManageGroupMembers));\n","import React, {\n FC, memo, useCallback, useMemo,\n} from '../../../lib/teact/teact';\nimport { withGlobal } from '../../../global';\n\nimport { ApiChatMember, ApiUser, ApiUserStatus } from '../../../api/types';\nimport { ManagementScreens } from '../../../types';\n\nimport { selectChat } from '../../../global/selectors';\nimport { sortUserIds, isChatChannel } from '../../../global/helpers';\nimport useHistoryBack from '../../../hooks/useHistoryBack';\n\nimport PrivateChatInfo from '../../common/PrivateChatInfo';\nimport ListItem from '../../ui/ListItem';\nimport NothingFound from '../../common/NothingFound';\n\ntype OwnProps = {\n chatId: string;\n onScreenSelect: (screen: ManagementScreens) => void;\n onChatMemberSelect: (memberId: string) => void;\n onClose: NoneToVoidFunction;\n isActive: boolean;\n};\n\ntype StateProps = {\n usersById: Record;\n userStatusesById: Record;\n members?: ApiChatMember[];\n isChannel?: boolean;\n serverTimeOffset: number;\n};\n\nconst ManageGroupUserPermissionsCreate: FC = ({\n usersById,\n userStatusesById,\n members,\n isChannel,\n onScreenSelect,\n onChatMemberSelect,\n onClose,\n isActive,\n serverTimeOffset,\n}) => {\n useHistoryBack(isActive, onClose);\n\n const memberIds = useMemo(() => {\n if (!members || !usersById) {\n return undefined;\n }\n\n return sortUserIds(\n members.filter((member) => !member.isOwner).map(({ userId }) => userId),\n usersById,\n userStatusesById,\n undefined,\n serverTimeOffset,\n );\n }, [members, serverTimeOffset, usersById, userStatusesById]);\n\n const handleExceptionMemberClick = useCallback((memberId: string) => {\n onChatMemberSelect(memberId);\n onScreenSelect(ManagementScreens.GroupUserPermissions);\n }, [onChatMemberSelect, onScreenSelect]);\n\n return (\n
\n
\n
\n {memberIds ? (\n memberIds.map((id, i) => (\n handleExceptionMemberClick(id)}\n >\n \n \n ))\n ) : (\n \n )}\n
\n
\n
\n );\n};\n\nexport default memo(withGlobal(\n (global, { chatId }): StateProps => {\n const chat = selectChat(global, chatId);\n const { byId: usersById, statusesById: userStatusesById } = global.users;\n const members = chat?.fullInfo?.members;\n const isChannel = chat && isChatChannel(chat);\n\n return {\n members,\n usersById,\n userStatusesById,\n isChannel,\n serverTimeOffset: global.serverTimeOffset,\n };\n },\n)(ManageGroupUserPermissionsCreate));\n","import React, {\n FC, memo, useCallback, useEffect, useMemo, useState,\n} from '../../../lib/teact/teact';\nimport { getActions, withGlobal } from '../../../global';\n\nimport { ApiChat, ApiExportedInvite } from '../../../api/types';\nimport { ManagementScreens } from '../../../types';\n\nimport { STICKER_SIZE_INVITES } from '../../../config';\nimport getAnimationData from '../../common/helpers/animatedAssets';\nimport useHistoryBack from '../../../hooks/useHistoryBack';\nimport useLang from '../../../hooks/useLang';\nimport { formatCountdown, MILLISECONDS_IN_DAY } from '../../../util/dateFormat';\nimport useInterval from '../../../hooks/useInterval';\nimport useForceUpdate from '../../../hooks/useForceUpdate';\nimport { selectChat } from '../../../global/selectors';\nimport { copyTextToClipboard } from '../../../util/clipboard';\nimport { IS_SINGLE_COLUMN_LAYOUT } from '../../../util/environment';\nimport { getServerTime } from '../../../util/serverTime';\nimport useFlag from '../../../hooks/useFlag';\nimport { isChatChannel } from '../../../global/helpers';\n\nimport ListItem from '../../ui/ListItem';\nimport NothingFound from '../../common/NothingFound';\nimport Button from '../../ui/Button';\nimport DropdownMenu from '../../ui/DropdownMenu';\nimport MenuItem from '../../ui/MenuItem';\nimport ConfirmDialog from '../../ui/ConfirmDialog';\nimport AnimatedSticker from '../../common/AnimatedSticker';\n\ntype OwnProps = {\n chatId: string;\n onClose: NoneToVoidFunction;\n onScreenSelect: (screen: ManagementScreens) => void;\n isActive: boolean;\n};\n\ntype StateProps = {\n chat?: ApiChat;\n isChannel?: boolean;\n exportedInvites?: ApiExportedInvite[];\n revokedExportedInvites?: ApiExportedInvite[];\n serverTimeOffset: number;\n};\n\nconst BULLET = '\\u2022';\n\nfunction inviteComparator(i1: ApiExportedInvite, i2: ApiExportedInvite) {\n const { isPermanent: i1IsPermanent, usage: i1Usage = 0, date: i1Date } = i1;\n const { isPermanent: i2IsPermanent, usage: i2Usage = 0, date: i2Date } = i2;\n if (i1IsPermanent || i2IsPermanent) return Number(i1IsPermanent) - Number(i2IsPermanent);\n if (i1Usage || i2Usage) return i2Usage - i1Usage;\n return i2Date - i1Date;\n}\n\nconst ManageInvites: FC = ({\n chatId,\n chat,\n exportedInvites,\n revokedExportedInvites,\n isActive,\n isChannel,\n serverTimeOffset,\n onClose,\n onScreenSelect,\n}) => {\n const {\n setEditingExportedInvite,\n showNotification,\n editExportedChatInvite,\n deleteExportedChatInvite,\n deleteRevokedExportedChatInvites,\n setOpenedInviteInfo,\n } = getActions();\n\n const lang = useLang();\n\n const [isDeleteRevokeAllDialogOpen, openDeleteRevokeAllDialog, closeDeleteRevokeAllDialog] = useFlag();\n const [isRevokeDialogOpen, openRevokeDialog, closeRevokeDialog] = useFlag();\n const [revokingInvite, setRevokingInvite] = useState();\n const [isDeleteDialogOpen, openDeleteDialog, closeDeleteDialog] = useFlag();\n const [deletingInvite, setDeletingInvite] = useState();\n\n const [animationData, setAnimationData] = useState();\n const [isAnimationLoaded, setIsAnimationLoaded] = useState(false);\n const handleAnimationLoad = useCallback(() => setIsAnimationLoaded(true), []);\n\n useEffect(() => {\n if (!animationData) {\n getAnimationData('Invite').then(setAnimationData);\n }\n }, [animationData]);\n\n useHistoryBack(isActive, onClose);\n\n const hasDetailedCountdown = useMemo(() => {\n if (!exportedInvites) return undefined;\n return exportedInvites\n .some(({ expireDate }) => (\n expireDate && (expireDate - getServerTime(serverTimeOffset) < MILLISECONDS_IN_DAY / 1000)\n ));\n }, [exportedInvites, serverTimeOffset]);\n const forceUpdate = useForceUpdate();\n useInterval(() => {\n forceUpdate();\n }, hasDetailedCountdown ? 1000 : undefined);\n\n const primaryInvite = exportedInvites?.find(({ isPermanent }) => isPermanent);\n const primaryInviteLink = chat?.username ? `t.me/${chat.username}` : primaryInvite?.link;\n const temporalInvites = useMemo(() => {\n const invites = chat?.username ? exportedInvites : exportedInvites?.filter(({ isPermanent }) => !isPermanent);\n return invites?.sort(inviteComparator);\n }, [chat?.username, exportedInvites]);\n\n const editInvite = (invite: ApiExportedInvite) => {\n setEditingExportedInvite({ chatId, invite });\n onScreenSelect(ManagementScreens.EditInvite);\n };\n\n const revokeInvite = useCallback((invite: ApiExportedInvite) => {\n const {\n link, title, isRequestNeeded, expireDate, usageLimit,\n } = invite;\n editExportedChatInvite({\n chatId,\n link,\n title,\n isRequestNeeded,\n expireDate,\n usageLimit,\n isRevoked: true,\n });\n }, [chatId, editExportedChatInvite]);\n\n const askToRevoke = useCallback((invite: ApiExportedInvite) => {\n setRevokingInvite(invite);\n openRevokeDialog();\n }, [openRevokeDialog]);\n\n const handleRevoke = useCallback(() => {\n if (!revokingInvite) return;\n revokeInvite(revokingInvite);\n setRevokingInvite(undefined);\n closeRevokeDialog();\n }, [closeRevokeDialog, revokeInvite, revokingInvite]);\n\n const handleCreateNewClick = useCallback(() => {\n onScreenSelect(ManagementScreens.EditInvite);\n }, [onScreenSelect]);\n\n const handlePrimaryRevoke = useCallback(() => {\n if (primaryInvite) {\n askToRevoke(primaryInvite);\n }\n }, [askToRevoke, primaryInvite]);\n\n const handleDeleteAllRevoked = useCallback(() => {\n deleteRevokedExportedChatInvites({ chatId });\n closeDeleteRevokeAllDialog();\n }, [chatId, closeDeleteRevokeAllDialog, deleteRevokedExportedChatInvites]);\n\n const showInviteInfo = useCallback((invite: ApiExportedInvite) => {\n setOpenedInviteInfo({ chatId, invite });\n onScreenSelect(ManagementScreens.InviteInfo);\n }, [chatId, onScreenSelect, setOpenedInviteInfo]);\n\n const deleteInvite = useCallback((invite: ApiExportedInvite) => {\n deleteExportedChatInvite({ chatId, link: invite.link });\n }, [chatId, deleteExportedChatInvite]);\n\n const askToDelete = useCallback((invite: ApiExportedInvite) => {\n setDeletingInvite(invite);\n openDeleteDialog();\n }, [openDeleteDialog]);\n\n const handleDelete = useCallback(() => {\n if (!deletingInvite) return;\n deleteInvite(deletingInvite);\n setDeletingInvite(undefined);\n closeDeleteDialog();\n }, [closeDeleteDialog, deleteInvite, deletingInvite]);\n\n const copyLink = useCallback((link: string) => {\n copyTextToClipboard(link);\n showNotification({\n message: lang('LinkCopied'),\n });\n }, [lang, showNotification]);\n\n const handleCopyPrimaryClicked = useCallback(() => {\n copyLink(primaryInviteLink!);\n }, [copyLink, primaryInviteLink]);\n\n const prepareUsageText = (invite: ApiExportedInvite) => {\n const {\n usage = 0, usageLimit, expireDate, isPermanent, requested, isRevoked,\n } = invite;\n let text = '';\n if (!isRevoked && usageLimit && usage < usageLimit) {\n text = lang('CanJoin', usageLimit - usage);\n } else if (usage) {\n text = lang('PeopleJoined', usage);\n } else {\n text = lang('NoOneJoined');\n }\n\n if (isRevoked) {\n text += ` ${BULLET} ${lang('Revoked')}`;\n return text;\n }\n\n if (requested) {\n text += ` ${BULLET} ${lang('JoinRequests', requested)}`;\n }\n\n if (usageLimit !== undefined && usage === usageLimit) {\n text += ` ${BULLET} ${lang('LinkLimitReached')}`;\n } else if (expireDate) {\n const diff = (expireDate - getServerTime(serverTimeOffset)) * 1000;\n text += ` ${BULLET} `;\n if (diff > 0) {\n text += lang('InviteLink.ExpiresIn', formatCountdown(lang, diff));\n } else {\n text += lang('InviteLink.Expired');\n }\n } else if (isPermanent) {\n text += ` ${BULLET} ${lang('Permanent')}`;\n }\n\n return text;\n };\n\n const prepareContextActions = (invite: ApiExportedInvite) => {\n const actions = [];\n actions.push({\n title: lang('Copy'),\n icon: 'copy',\n handler: () => copyLink(invite.link),\n });\n\n if (!invite.isPermanent && !invite.isRevoked) {\n actions.push({\n title: lang('Edit'),\n icon: 'edit',\n handler: () => editInvite(invite),\n });\n }\n\n if (!invite.isRevoked) {\n actions.push({\n title: lang('RevokeButton'),\n icon: 'delete',\n handler: () => askToRevoke(invite),\n destructive: true,\n });\n } else {\n actions.push({\n title: lang('DeleteLink'),\n icon: 'delete',\n handler: () => askToDelete(invite),\n destructive: true,\n });\n }\n return actions;\n };\n\n const PrimaryLinkMenuButton: FC<{ onTrigger: () => void; isOpen?: boolean }> = useMemo(() => {\n return ({ onTrigger, isOpen }) => (\n \n \n \n );\n }, []);\n\n return (\n
\n
\n
\n
\n {animationData && (\n \n )}\n
\n

{isChannel ? lang('PrimaryLinkHelpChannel') : lang('PrimaryLinkHelp')}

\n
\n {primaryInviteLink && (\n
\n

\n {chat?.username ? lang('PublicLink') : lang('lng_create_permanent_link_title')}\n

\n
\n \n \n {lang('Copy')}\n {!chat?.username && (\n {lang('RevokeButton')}\n )}\n \n
\n \n
\n )}\n
\n \n {(!temporalInvites || !temporalInvites.length) && }\n {temporalInvites?.map((invite) => (\n showInviteInfo(invite)}\n contextActions={prepareContextActions(invite)}\n key={invite.link}\n >\n {invite.title || invite.link}\n \n {prepareUsageText(invite)}\n \n \n ))}\n

{lang('ManageLinksInfoHelp')}

\n
\n {revokedExportedInvites && Boolean(revokedExportedInvites.length) && (\n
\n

{lang('RevokedLinks')}

\n \n {lang('DeleteAllRevokedLinks')}\n \n {revokedExportedInvites?.map((invite) => (\n showInviteInfo(invite)}\n contextActions={prepareContextActions(invite)}\n key={invite.link}\n >\n {invite.title || invite.link}\n \n {prepareUsageText(invite)}\n \n \n ))}\n
\n )}\n
\n \n \n \n
\n );\n};\n\nexport default memo(withGlobal(\n (global, { chatId }): StateProps => {\n const { invites, revokedInvites } = global.management.byChatId[chatId];\n const chat = selectChat(global, chatId);\n const isChannel = chat && isChatChannel(chat);\n\n return {\n exportedInvites: invites,\n revokedExportedInvites: revokedInvites,\n chat,\n serverTimeOffset: global.serverTimeOffset,\n isChannel,\n };\n },\n)(ManageInvites));\n","import { ChangeEvent } from 'react';\nimport React, {\n FC, memo, useCallback, useState,\n} from '../../../lib/teact/teact';\nimport { getActions, withGlobal } from '../../../global';\n\nimport { ApiExportedInvite } from '../../../api/types';\nimport { ManagementScreens } from '../../../types';\n\nimport useHistoryBack from '../../../hooks/useHistoryBack';\nimport useLang from '../../../hooks/useLang';\nimport { formatFullDate, formatTime } from '../../../util/dateFormat';\nimport useFlag from '../../../hooks/useFlag';\nimport { getServerTime } from '../../../util/serverTime';\n\nimport Checkbox from '../../ui/Checkbox';\nimport InputText from '../../ui/InputText';\nimport RadioGroup from '../../ui/RadioGroup';\nimport Button from '../../ui/Button';\nimport FloatingActionButton from '../../ui/FloatingActionButton';\nimport useOnChange from '../../../hooks/useOnChange';\nimport CalendarModal from '../../common/CalendarModal';\n\nconst DEFAULT_USAGE_LIMITS = [1, 10, 100];\nconst DEFAULT_EXPIRE_DATE = {\n hour: 3600000,\n day: 86400000,\n week: 604800000,\n};\nconst DEFAULT_CUSTOM_EXPIRE_DATE = DEFAULT_EXPIRE_DATE.hour;\n\ntype OwnProps = {\n chatId: string;\n onClose: NoneToVoidFunction;\n onScreenSelect: (screen: ManagementScreens) => void;\n isActive: boolean;\n};\n\ntype StateProps = {\n editingInvite?: ApiExportedInvite;\n serverTimeOffset: number;\n};\n\nconst ManageInvite: FC = ({\n chatId,\n editingInvite,\n isActive,\n serverTimeOffset,\n onClose,\n onScreenSelect,\n}) => {\n const { editExportedChatInvite, exportChatInvite } = getActions();\n\n const lang = useLang();\n const [isCalendarOpened, openCalendar, closeCalendar] = useFlag();\n const [isRequestNeeded, setIsRequestNeeded] = useState(false);\n const [title, setTitle] = useState('');\n const [customExpireDate, setCustomExpireDate] = useState(Date.now() + DEFAULT_CUSTOM_EXPIRE_DATE);\n const [selectedExpireOption, setSelectedExpireOption] = useState('unlimited');\n const [customUsageLimit, setCustomUsageLimit] = useState(10);\n const [selectedUsageOption, setSelectedUsageOption] = useState('0');\n const [isSubmitBlocked, setIsSubmitBlocked] = useState(false);\n\n useHistoryBack(isActive, onClose);\n\n useOnChange(([oldEditingInvite]) => {\n if (oldEditingInvite === editingInvite) return;\n if (!editingInvite) {\n setTitle('');\n setSelectedExpireOption('unlimited');\n setSelectedUsageOption('0');\n setCustomExpireDate(getServerTime(serverTimeOffset) * 1000 + DEFAULT_CUSTOM_EXPIRE_DATE);\n setCustomUsageLimit(10);\n setIsRequestNeeded(false);\n } else {\n const {\n title: editingTitle, usageLimit, expireDate, isRequestNeeded: editingIsRequestNeeded,\n } = editingInvite;\n if (editingTitle) setTitle(editingTitle);\n if (usageLimit) {\n setSelectedUsageOption(DEFAULT_USAGE_LIMITS.includes(usageLimit) ? usageLimit.toString() : 'custom');\n setCustomUsageLimit(usageLimit);\n }\n if (expireDate) {\n const minSafeDate = getServerTime(serverTimeOffset) + DEFAULT_CUSTOM_EXPIRE_DATE;\n setSelectedExpireOption('custom');\n setCustomExpireDate(Math.max(expireDate, minSafeDate) * 1000);\n }\n if (editingIsRequestNeeded) {\n setIsRequestNeeded(true);\n }\n }\n }, [editingInvite, serverTimeOffset]);\n\n const handleIsRequestChange = useCallback((e: ChangeEvent) => {\n setIsRequestNeeded(e.target.checked);\n }, []);\n\n const handleTitleChange = useCallback((e: ChangeEvent) => {\n setTitle(e.target.value);\n }, []);\n\n const handleCustomUsageLimitChange = useCallback((e: ChangeEvent) => {\n setCustomUsageLimit(Number.parseInt(e.target.value, 10));\n }, []);\n\n const handleExpireDateChange = useCallback((date: Date) => {\n setCustomExpireDate(date.getTime());\n closeCalendar();\n }, [closeCalendar]);\n\n const handleSaveClick = useCallback(() => {\n setIsSubmitBlocked(true);\n const usageLimit = selectedUsageOption === 'custom' ? customUsageLimit : selectedUsageOption;\n let expireDate;\n switch (selectedExpireOption) {\n case 'custom':\n expireDate = getServerTime(serverTimeOffset) + (customExpireDate - Date.now()) / 1000;\n break;\n case 'hour':\n case 'day':\n case 'week':\n expireDate = getServerTime(serverTimeOffset) + DEFAULT_EXPIRE_DATE[selectedExpireOption] / 1000;\n break;\n case 'unlimited':\n default:\n expireDate = undefined;\n }\n\n if (editingInvite) {\n editExportedChatInvite({\n link: editingInvite.link,\n chatId,\n title,\n isRequestNeeded,\n expireDate,\n usageLimit,\n });\n } else {\n exportChatInvite({\n chatId,\n title,\n isRequestNeeded,\n expireDate,\n usageLimit,\n });\n }\n onScreenSelect(ManagementScreens.Invites);\n }, [\n chatId, customExpireDate, customUsageLimit, editExportedChatInvite, editingInvite,\n exportChatInvite, isRequestNeeded, selectedExpireOption, selectedUsageOption, title, onScreenSelect,\n serverTimeOffset,\n ]);\n\n return (\n
\n
\n
\n \n
\n
\n \n

{lang('LinkNameHelp')}

\n
\n
\n
{lang('LimitByPeriod')}
\n \n {selectedExpireOption === 'custom' && (\n \n )}\n

{lang('TimeLimitHelp')}

\n
\n {!isRequestNeeded && (\n
\n
{lang('LimitNumberOfUses')}
\n ({ value: n.toString(), label: n })),\n {\n value: '0',\n label: lang('NoLimit'),\n },\n {\n value: 'custom',\n label: lang('lng_group_invite_usage_custom'),\n },\n ]}\n onChange={setSelectedUsageOption}\n selected={selectedUsageOption}\n />\n {selectedUsageOption === 'custom' && (\n \n )}\n

{lang('UsesLimitHelp')}

\n
\n )}\n \n \n \n
\n \n
\n );\n};\n\nexport default memo(withGlobal(\n (global, { chatId }): StateProps => {\n const { editingInvite } = global.management.byChatId[chatId];\n\n return {\n editingInvite,\n serverTimeOffset: global.serverTimeOffset,\n };\n },\n)(ManageInvite));\n","import React, {\n FC, memo, useCallback, useEffect, useState,\n} from '../../../lib/teact/teact';\nimport { getActions, withGlobal } from '../../../global';\n\nimport { ApiAvailableReaction, ApiChat } from '../../../api/types';\n\nimport { selectChat } from '../../../global/selectors';\nimport useLang from '../../../hooks/useLang';\nimport useHistoryBack from '../../../hooks/useHistoryBack';\n\nimport ReactionStaticEmoji from '../../common/ReactionStaticEmoji';\nimport Checkbox from '../../ui/Checkbox';\nimport FloatingActionButton from '../../ui/FloatingActionButton';\nimport Spinner from '../../ui/Spinner';\n\ntype OwnProps = {\n chatId: string;\n onClose: NoneToVoidFunction;\n isActive: boolean;\n};\n\ntype StateProps = {\n chat?: ApiChat;\n availableReactions?: ApiAvailableReaction[];\n enabledReactions?: string[];\n};\n\nconst ManageReactions: FC = ({\n availableReactions,\n enabledReactions,\n chat,\n isActive,\n onClose,\n}) => {\n const { setChatEnabledReactions } = getActions();\n\n const lang = useLang();\n const [isTouched, setIsTouched] = useState(false);\n const [isLoading, setIsLoading] = useState(false);\n const [localEnabledReactions, setLocalEnabledReactions] = useState(enabledReactions || []);\n\n useHistoryBack(isActive, onClose);\n\n const handleSaveReactions = useCallback(() => {\n if (!chat) return;\n setIsLoading(true);\n\n setChatEnabledReactions({\n chatId: chat.id,\n enabledReactions: localEnabledReactions,\n });\n }, [chat, localEnabledReactions, setChatEnabledReactions]);\n\n useEffect(() => {\n if (enabledReactions) {\n setIsLoading(false);\n setIsTouched(false);\n setLocalEnabledReactions(enabledReactions);\n }\n }, [enabledReactions]);\n\n const handleReactionChange = useCallback((e: React.ChangeEvent) => {\n if (!chat || !availableReactions) return;\n\n const { name, checked } = e.currentTarget;\n const newEnabledReactions = name === 'all' ? (checked ? availableReactions.map((l) => l.reaction) : [])\n : (!checked\n ? localEnabledReactions.filter((l) => l !== name)\n : [...localEnabledReactions, name]);\n\n setLocalEnabledReactions(newEnabledReactions);\n setIsTouched(true);\n }, [availableReactions, chat, localEnabledReactions]);\n\n return (\n
\n
\n
\n
\n 0}\n label={lang('EnableReactions')}\n onChange={handleReactionChange}\n />\n
\n {availableReactions?.filter((l) => !l.isInactive).map(({ reaction, title }) => (\n
\n \n \n {title}\n
\n )}\n onChange={handleReactionChange}\n />\n
\n ))}\n
\n
\n\n \n {isLoading ? (\n \n ) : (\n \n )}\n \n
\n );\n};\n\nexport default memo(withGlobal(\n (global, { chatId }): StateProps => {\n const chat = selectChat(global, chatId)!;\n\n return {\n enabledReactions: chat.fullInfo?.enabledReactions,\n availableReactions: global.availableReactions,\n chat,\n };\n },\n)(ManageReactions));\n","import React, {\n FC, memo, useCallback, useEffect,\n} from '../../../lib/teact/teact';\nimport { getActions, withGlobal } from '../../../global';\n\nimport { ApiChatInviteImporter, ApiExportedInvite, ApiUser } from '../../../api/types';\n\nimport useHistoryBack from '../../../hooks/useHistoryBack';\nimport useLang from '../../../hooks/useLang';\nimport { copyTextToClipboard } from '../../../util/clipboard';\nimport { getServerTime } from '../../../util/serverTime';\nimport { formatFullDate, formatMediaDateTime, formatTime } from '../../../util/dateFormat';\nimport { isChatChannel } from '../../../global/helpers';\nimport { selectChat } from '../../../global/selectors';\n\nimport PrivateChatInfo from '../../common/PrivateChatInfo';\nimport ListItem from '../../ui/ListItem';\nimport Button from '../../ui/Button';\nimport Spinner from '../../ui/Spinner';\n\ntype OwnProps = {\n chatId: string;\n onClose: NoneToVoidFunction;\n isActive: boolean;\n};\n\ntype StateProps = {\n invite?: ApiExportedInvite;\n importers?: ApiChatInviteImporter[];\n requesters?: ApiChatInviteImporter[];\n admin?: ApiUser;\n isChannel?: boolean;\n serverTimeOffset: number;\n};\n\nconst ManageInviteInfo: FC = ({\n chatId,\n invite,\n importers,\n requesters,\n isChannel,\n isActive,\n serverTimeOffset,\n onClose,\n}) => {\n const {\n showNotification,\n loadChatInviteImporters,\n loadChatInviteRequesters,\n openChat,\n } = getActions();\n\n const lang = useLang();\n const {\n usage = 0, usageLimit, link, adminId,\n } = invite || {};\n const expireDate = invite?.expireDate && (invite.expireDate - getServerTime(serverTimeOffset)) * 1000 + Date.now();\n const isExpired = ((invite?.expireDate || 0) - getServerTime(serverTimeOffset)) < 0;\n\n useEffect(() => {\n if (link) {\n loadChatInviteImporters({ chatId, link });\n loadChatInviteRequesters({ chatId, link });\n }\n }, [chatId, link, loadChatInviteImporters, loadChatInviteRequesters]);\n\n const handleCopyClicked = useCallback(() => {\n copyTextToClipboard(invite!.link);\n showNotification({\n message: lang('LinkCopied'),\n });\n }, [invite, lang, showNotification]);\n\n useHistoryBack(isActive, onClose);\n\n const renderImporters = () => {\n if (!importers?.length && requesters?.length) return undefined;\n if (!importers) return ;\n return (\n
\n

{importers.length ? lang('PeopleJoined', usage) : lang('NoOneJoined')}

\n

\n {!importers.length && (\n usageLimit ? lang('PeopleCanJoinViaLinkCount', usageLimit - usage) : lang('NoOneJoinedYet')\n )}\n {importers.map((importer) => (\n openChat({ id: importer.userId })}\n >\n \n \n ))}\n

\n
\n );\n };\n\n const renderRequesters = () => {\n if (invite?.isRevoked) return undefined;\n if (!requesters && importers) return ;\n if (!requesters?.length) return undefined;\n return (\n
\n

{isChannel ? lang('SubscribeRequests') : lang('MemberRequests')}

\n

\n {requesters.map((requester) => (\n openChat({ id: requester.userId })}\n >\n \n \n ))}\n

\n
\n );\n };\n\n return (\n
\n
\n {!invite && (\n

{lang('Loading')}

\n )}\n {invite && (\n <>\n
\n

{invite.title || invite.link}

\n \n \n {expireDate && (\n

\n {isExpired\n ? lang('ExpiredLink')\n : lang('LinkExpiresIn', `${formatFullDate(lang, expireDate)} ${formatTime(lang, expireDate)}`)}\n

\n )}\n
\n {adminId && (\n
\n

{lang('LinkCreatedeBy')}

\n openChat({ id: adminId })}\n >\n \n \n
\n )}\n {renderImporters()}\n {renderRequesters()}\n \n )}\n
\n
\n );\n};\n\nexport default memo(withGlobal(\n (global, { chatId }): StateProps => {\n const { inviteInfo } = global.management.byChatId[chatId];\n const { invite, importers, requesters } = inviteInfo || {};\n const chat = selectChat(global, chatId);\n const isChannel = chat && isChatChannel(chat);\n\n return {\n invite,\n importers,\n requesters,\n isChannel,\n serverTimeOffset: global.serverTimeOffset,\n };\n },\n)(ManageInviteInfo));\n","import React, { FC, memo, useCallback } from '../../../lib/teact/teact';\nimport { getActions, withGlobal } from '../../../global';\n\nimport { ApiUser } from '../../../api/types';\n\nimport useLang from '../../../hooks/useLang';\nimport { getUserFullName } from '../../../global/helpers';\nimport { selectUser } from '../../../global/selectors';\nimport { formatHumanDate, formatTime, isToday } from '../../../util/dateFormat';\nimport { getServerTime } from '../../../util/serverTime';\nimport { createClassNameBuilder } from '../../../util/buildClassName';\n\nimport Avatar from '../../common/Avatar';\nimport Button from '../../ui/Button';\n\nimport './JoinRequest.scss';\n\ntype OwnProps = {\n userId: string;\n about?: string;\n isChannel?: boolean;\n date: number;\n chatId: string;\n};\n\ntype StateProps = {\n user?: ApiUser;\n isSavedMessages?: boolean;\n serverTimeOffset: number;\n};\n\nconst JoinRequest: FC = ({\n userId,\n about,\n date,\n isChannel,\n user,\n serverTimeOffset,\n chatId,\n}) => {\n const { openChat, hideChatJoinRequest } = getActions();\n\n const buildClassName = createClassNameBuilder('JoinRequest');\n const lang = useLang();\n\n const fullName = getUserFullName(user);\n const fixedDate = (date - getServerTime(serverTimeOffset)) * 1000 + Date.now();\n\n const dateString = isToday(new Date(fixedDate))\n ? formatTime(lang, fixedDate) : formatHumanDate(lang, fixedDate, true, false, true);\n\n const handleUserClick = () => {\n openChat({ id: userId });\n };\n\n const handleAcceptRequest = useCallback(() => {\n hideChatJoinRequest({ chatId, userId, isApproved: true });\n }, [chatId, hideChatJoinRequest, userId]);\n\n const handleRejectRequest = useCallback(() => {\n hideChatJoinRequest({ chatId, userId, isApproved: false });\n }, [chatId, hideChatJoinRequest, userId]);\n\n return (\n
\n
\n
\n \n
\n
{fullName}
\n
{about}
\n
\n
\n
{dateString}
\n
\n
\n \n \n
\n
\n );\n};\n\nexport default memo(withGlobal(\n (global, { userId }): StateProps => {\n const user = selectUser(global, userId);\n\n return {\n user,\n serverTimeOffset: global.serverTimeOffset,\n };\n },\n)(JoinRequest));\n","import React, {\n FC, memo, useCallback, useEffect, useState,\n} from '../../../lib/teact/teact';\nimport { getActions, withGlobal } from '../../../global';\n\nimport { ApiChat } from '../../../api/types';\n\nimport { STICKER_SIZE_JOIN_REQUESTS } from '../../../config';\nimport useHistoryBack from '../../../hooks/useHistoryBack';\nimport { selectChat } from '../../../global/selectors';\nimport { isChatChannel, isUserId } from '../../../global/helpers';\nimport useLang from '../../../hooks/useLang';\nimport useFlag from '../../../hooks/useFlag';\nimport getAnimationData from '../../common/helpers/animatedAssets';\n\nimport JoinRequest from './JoinRequest';\nimport Button from '../../ui/Button';\nimport ConfirmDialog from '../../ui/ConfirmDialog';\nimport AnimatedSticker from '../../common/AnimatedSticker';\nimport Spinner from '../../ui/Spinner';\n\ntype OwnProps = {\n chatId: string;\n onClose: NoneToVoidFunction;\n isActive: boolean;\n};\n\ntype StateProps = {\n chat?: ApiChat;\n isChannel?: boolean;\n serverTimeOffset: number;\n};\n\nconst ManageJoinRequests: FC = ({\n chat,\n chatId,\n isActive,\n isChannel,\n onClose,\n}) => {\n const { hideAllChatJoinRequests, loadChatJoinRequests } = getActions();\n const [isAcceptAllDialogOpen, openAcceptAllDialog, closeAcceptAllDialog] = useFlag();\n const [isRejectAllDialogOpen, openRejectAllDialog, closeRejectAllDialog] = useFlag();\n\n const lang = useLang();\n\n const [animationData, setAnimationData] = useState();\n const [isAnimationLoaded, setIsAnimationLoaded] = useState(false);\n const handleAnimationLoad = useCallback(() => setIsAnimationLoaded(true), []);\n\n useEffect(() => {\n if (!animationData) {\n getAnimationData('JoinRequest').then(setAnimationData);\n }\n }, [animationData]);\n\n useHistoryBack(isActive, onClose);\n\n useEffect(() => {\n if (!chat?.joinRequests && !isUserId(chatId)) {\n loadChatJoinRequests({ chatId });\n }\n }, [chat, chatId, loadChatJoinRequests]);\n\n const handleAcceptAllRequests = useCallback(() => {\n hideAllChatJoinRequests({ chatId, isApproved: true });\n closeAcceptAllDialog();\n }, [hideAllChatJoinRequests, chatId, closeAcceptAllDialog]);\n\n const handleRejectAllRequests = useCallback(() => {\n hideAllChatJoinRequests({ chatId, isApproved: false });\n closeRejectAllDialog();\n }, [hideAllChatJoinRequests, chatId, closeRejectAllDialog]);\n\n return (\n
\n
\n
\n {animationData && (\n \n )}\n
\n {Boolean(chat?.joinRequests?.length) && (\n
\n \n \n
\n )}\n
\n
\n
\n

\n {!chat?.joinRequests ? lang('Loading') : chat.joinRequests.length\n ? lang('JoinRequests', chat.joinRequests.length) : lang('NoMemberRequests')}\n

\n {!chat?.joinRequests && (\n \n )}\n {chat?.joinRequests?.length === 0 && (\n

\n {isChannel ? lang('NoSubscribeRequestsDescription') : lang('NoMemberRequestsDescription')}\n

\n )}\n {chat?.joinRequests?.map(({ userId, about, date }) => (\n \n ))}\n
\n
\n \n \n
\n );\n};\n\nexport default memo(withGlobal(\n (global, { chatId }): StateProps => {\n const chat = selectChat(global, chatId);\n\n return {\n chat,\n serverTimeOffset: global.serverTimeOffset,\n isChannel: chat && isChatChannel(chat),\n };\n },\n)(ManageJoinRequests));\n","import React, { FC, memo } from '../../../lib/teact/teact';\nimport { withGlobal } from '../../../global';\n\nimport { ManagementScreens, ManagementType } from '../../../types';\n\nimport { selectCurrentManagementType } from '../../../global/selectors';\n\nimport ManageUser from './ManageUser';\nimport ManageGroup from './ManageGroup';\nimport ManageGroupPermissions from './ManageGroupPermissions';\nimport ManageChatRemovedUsers from './ManageChatRemovedUsers';\nimport ManageChannel from './ManageChannel';\nimport ManageChatPrivacyType from './ManageChatPrivacyType';\nimport ManageDiscussion from './ManageDiscussion';\nimport ManageGroupUserPermissions from './ManageGroupUserPermissions';\nimport ManageChatAdministrators from './ManageChatAdministrators';\nimport ManageGroupRecentActions from './ManageGroupRecentActions';\nimport ManageGroupAdminRights from './ManageGroupAdminRights';\nimport ManageGroupMembers from './ManageGroupMembers';\nimport ManageGroupUserPermissionsCreate from './ManageGroupUserPermissionsCreate';\nimport ManageInvites from './ManageInvites';\nimport ManageInvite from './ManageInvite';\nimport ManageReactions from './ManageReactions';\nimport ManageInviteInfo from './ManageInviteInfo';\nimport ManageJoinRequests from './ManageJoinRequests';\n\nexport type OwnProps = {\n chatId: string;\n currentScreen: ManagementScreens;\n selectedChatMemberId?: string;\n isPromotedByCurrentUser?: boolean;\n onScreenSelect: (screen: ManagementScreens) => void;\n onChatMemberSelect: (memberId: string, isPromotedByCurrentUser?: boolean) => void;\n onClose: NoneToVoidFunction;\n isActive: boolean;\n};\n\ntype StateProps = {\n managementType?: ManagementType;\n};\n\nconst Management: FC = ({\n chatId,\n currentScreen,\n selectedChatMemberId,\n isPromotedByCurrentUser,\n onScreenSelect,\n onChatMemberSelect,\n onClose,\n isActive,\n managementType,\n}) => {\n switch (currentScreen) {\n case ManagementScreens.Initial: {\n switch (managementType) {\n case 'user':\n return (\n \n );\n case 'group':\n return (\n \n );\n case 'channel':\n return (\n \n );\n }\n\n break;\n }\n\n case ManagementScreens.ChatPrivacyType:\n return (\n \n );\n\n case ManagementScreens.Discussion:\n return (\n \n );\n\n case ManagementScreens.GroupPermissions:\n return (\n \n );\n\n case ManagementScreens.ChannelRemovedUsers:\n case ManagementScreens.GroupRemovedUsers:\n return (\n \n );\n\n case ManagementScreens.GroupUserPermissionsCreate:\n return (\n \n );\n\n case ManagementScreens.GroupUserPermissions:\n return (\n \n );\n\n case ManagementScreens.ChatAdministrators:\n return (\n \n );\n\n case ManagementScreens.GroupRecentActions:\n return (\n \n );\n\n case ManagementScreens.ChatNewAdminRights:\n case ManagementScreens.ChatAdminRights:\n return (\n \n );\n\n case ManagementScreens.ChannelSubscribers:\n case ManagementScreens.GroupMembers:\n return (\n \n );\n case ManagementScreens.Invites:\n return (\n \n );\n case ManagementScreens.EditInvite:\n return (\n \n );\n case ManagementScreens.GroupAddAdmins:\n return (\n \n );\n\n case ManagementScreens.Reactions:\n return (\n \n );\n case ManagementScreens.InviteInfo:\n return (\n \n );\n case ManagementScreens.JoinRequests:\n return (\n \n );\n }\n\n return undefined; // Never reached\n};\n\nexport default memo(withGlobal(\n (global): StateProps => {\n const managementType = selectCurrentManagementType(global);\n\n return {\n managementType,\n };\n },\n)(Management));\n","const VISA = /^4[0-9]{12}(?:[0-9]{1,3})?$/;\nconst MASTERCARD1 = /^5[1-5][0-9]{11,14}$/;\nconst MASTERCARD2 = /^2[2-7][0-9]{11,14}$/;\n\nexport enum CardType {\n Default,\n Visa,\n Mastercard,\n}\n\nconst cards: Record = {\n [CardType.Default]: '',\n [CardType.Visa]: 'visa',\n [CardType.Mastercard]: 'mastercard',\n};\n\nexport function detectCardType(cardNumber: string): number {\n cardNumber = cardNumber.replace(/\\s/g, '');\n if (VISA.test(cardNumber)) {\n return CardType.Visa;\n }\n if (MASTERCARD1.test(cardNumber) || MASTERCARD2.test(cardNumber)) {\n return CardType.Mastercard;\n }\n return CardType.Default;\n}\n\nexport function detectCardTypeText(cardNumber: string): string {\n const cardType = detectCardType(cardNumber);\n return cards[cardType as number] || '';\n}\n","// This data was received from Telegram Desktop (Telegram/Resources/numbers.txt)\nconst DATA = `AF🇦🇫93Afghanistan333\nAO🇦🇴244Angola333\nAL🇦🇱355Albania234\nAD🇦🇩376Andorra222\nAE🇦🇪971United Arab Emirates234\nAI🇦🇮1264Anguilla34\nAR🇦🇷54Argentina\nAM🇦🇲374Armenia233\nAG🇦🇬1268Antigua and Barbuda34\nAU🇦🇺61Australia333\nAS🇦🇸1684American Samoa34\nAT🇦🇹43Austria\nAW🇦🇼297Aruba34\nAZ🇦🇿994Azerbaijan2322\nBI🇧🇮257Burundi224\nBE🇧🇪32Belgium3222\nBJ🇧🇯229Benin233\nBF🇧🇫226Burkina Faso2222\nBD🇧🇩880Bangladesh\nBG🇧🇬359Bulgaria\nBH🇧🇭973Bahrain44\nBS🇧🇸1242Bahamas34\nBA🇧🇦387Bosnia and Herzegovina\nBY🇧🇾375Belarus2322\nBZ🇧🇿501Belize\nBO🇧🇴591Bolivia134\nBR🇧🇷55Brazil254\nBB🇧🇧1246Barbados34\nBM🇧🇲1441Bermuda34\nBN🇧🇳673Brunei34\nBQ🇧🇶599Bonaire, Sint Eustatius and Saba\nBT🇧🇹975Bhutan\nBW🇧🇼267Botswana233\nCF🇨🇫236Central African Republic2222\nCA🇨🇦1Canada334\nCH🇨🇭41Switzerland234\nCK🇨🇰682Cook Islands\nCL🇨🇱56Chile144\nCN🇨🇳86China344\nCI🇨🇮225Côte d\\`Ivoire233\nCM🇨🇲237Cameroon44\nCD🇨🇩243DR Congo234\nCG🇨🇬242Republic of the Congo234\nCO🇨🇴57Colombia334\nKM🇰🇲269Comoros34\nCV🇨🇻238Cape Verde34\nCR🇨🇷506Costa Rica\nCU🇨🇺53Cuba44\nCY🇨🇾357Cyprus44\nCW🇨🇼599Curaçao\nCZ🇨🇿420Czech Republic\nDE🇩🇪49Germany38\nDJ🇩🇯253Djibouti2222\nDM🇩🇲1767Dominica34\nDK🇩🇰45Denmark44\nDO🇩🇴1Dominican Republic334\nDZ🇩🇿213Algeria3222\nEC🇪🇨593Ecuador\nEG🇪🇬20Egypt234\nER🇪🇷291Eritrea133\nES🇪🇸34Spain333\nEE🇪🇪372Estonia\nET🇪🇹251Ethiopia234\nFI🇫🇮358Finland\nFJ🇫🇯679Fiji\nFK🇫🇰500Falkland Islands\nFM🇫🇲691Micronesia\nFO🇫🇴298Faroe Islands33\nFR🇫🇷33France12222\nGA🇬🇦241Gabon1222\nGB🇬🇧44United Kingdom46\nGE🇬🇪995Georgia\nGF🇬🇫594French Guiana\nGH🇬🇭233Ghana\nGI🇬🇮350Gibraltar44\nGL🇬🇱299Greenland33\nGN🇬🇳224Guinea333\nGM🇬🇲220Gambia34\nGP🇬🇵590Guadeloupe\nGU🇬🇺1671Guam34\nGW🇬🇼245Guinea-Bissau34\nGQ🇬🇶240Equatorial Guinea333\nGR🇬🇷30Greece244\nGD🇬🇩1473Grenada34\nGT🇬🇹502Guatemala134\nGY🇬🇾592Guyana\nHK🇭🇰852Hong Kong\nHN🇭🇳504Honduras44\nHR🇭🇷385Croatia\nHT🇭🇹509Haiti\nHU🇭🇺36Hungary234\nID🇮🇩62Indonesia\nIN🇮🇳91India55\nIO🇩🇬246Diego Garcia34\nIE🇮🇪353Ireland234\nIR🇮🇷98Iran334\nIQ🇮🇶964Iraq334\nIS🇮🇸354Iceland34\nIL🇮🇱972Israel234\nIT🇮🇹39Italy334\nJM🇯🇲1876Jamaica34\nJO🇯🇴962Jordan144\nJP🇯🇵81Japan244\nKZ🇰🇿7Kazakhstan3322\nKE🇰🇪254Kenya333\nKG🇰🇬996Kyrgyzstan\nKH🇰🇭855Cambodia\nKI🇰🇮686Kiribati\nKN🇰🇳1869Saint Kitts and Nevis34\nKR🇰🇷82South Korea\nKW🇰🇼965Kuwait44\nKY🇰🇾1345Cayman Islands34\nLA🇱🇦856Laos\nLB🇱🇧961Lebanon\nLR🇱🇷231Liberia\nLY🇱🇾218Libya234\nLC🇱🇨1758Saint Lucia34\nLI🇱🇮423Liechtenstein\nLK🇱🇰94Sri Lanka234\nLS🇱🇸266Lesotho233\nLT🇱🇹370Lithuania35\nLU🇱🇺352Luxembourg\nLV🇱🇻371Latvia35\nMA🇲🇦212Morocco234\nMC🇲🇨377Monaco44\nMD🇲🇩373Moldova233\nMG🇲🇬261Madagascar2232\nMP🇲🇵1670Northern Mariana Islands34\nMO🇲🇴853Macau\nMS🇲🇸1664Montserrat34\nMV🇲🇻960Maldives\nMX🇲🇽52Mexico\nMH🇲🇭692Marshall Islands\nMK🇲🇰389Macedonia\nML🇲🇱223Mali44\nMT🇲🇹356Malta2222\nMM🇲🇲95Myanmar\nME🇲🇪382Montenegro\nMN🇲🇳976Mongolia\nMZ🇲🇿258Mozambique234\nMQ🇲🇶596Martinique\nMR🇲🇷222Mauritania44\nMU🇲🇺230Mauritius\nMW🇲🇼265Malawi\nMY🇲🇾60Malaysia\nNA🇳🇦264Namibia234\nNC🇳🇨687New Caledonia6\nNE🇳🇪227Niger2222\nNF🇳🇫672Norfolk Island\nNG🇳🇬234Nigeria\nNI🇳🇮505Nicaragua44\nNL🇳🇱31Netherlands12222\nNO🇳🇴47Norway44\nNP🇳🇵977Nepal\nNU🇳🇺683Niue\nNR🇳🇷674Nauru\nNZ🇳🇿64New Zealand\nOM🇴🇲968Oman44\nPK🇵🇰92Pakistan334\nPA🇵🇦507Panama44\nPE🇵🇪51Peru333\nPF🇵🇫689French Polynesia\nPH🇵🇭63Philippines334\nPM🇵🇲508Saint Pierre and Miquelon\nPR🇵🇷1Puerto Rico334\nPS🇵🇸970Palestine324\nPW🇵🇼680Palau\nPG🇵🇬675Papua New Guinea\nPL🇵🇱48Poland333\nKP🇰🇵850North Korea\nPT🇵🇹351Portugal144\nPY🇵🇾595Paraguay333\nQA🇶🇦974Qatar\nRE🇷🇪262Réunion333\nRO🇷🇴40Romania333\nRU🇷🇺7Russia3322\nRW🇷🇼250Rwanda333\nSA🇸🇦966Saudi Arabia\nSD🇸🇩249Sudan234\nSN🇸🇳221Senegal234\nSG🇸🇬65Singapore44\nSH🇸🇭290Saint Helena23\nSH🇸🇭247Saint Helena4\nSB🇸🇧677Solomon Islands\nSL🇸🇱232Sierra Leone233\nSV🇸🇻503El Salvador44\nSM🇸🇲378San Marino334\nSO🇸🇴252Somalia233\nRS🇷🇸381Serbia234\nSS🇸🇸211South Sudan234\nST🇸🇹239São Tomé and Príncipe25\nSR🇸🇷597Suriname34\nSK🇸🇰421Slovakia\nSI🇸🇮386Slovenia\nSE🇸🇪46Sweden234\nSZ🇸🇿268Swaziland44\nSC🇸🇨248Seychelles1222\nSX🇸🇽1721Sint Maarten34\nSY🇸🇾963Syria\nTC🇹🇨1649Turks and Caicos Islands34\nTD🇹🇩235Chad2222\nTG🇹🇬228Togo233\nTH🇹🇭66Thailand144\nTJ🇹🇯992Tajikistan\nTK🇹🇰690Tokelau\nTM🇹🇲993Turkmenistan26\nTL🇹🇱670Timor-Leste\nTO🇹🇴676Tonga\nTT🇹🇹1868Trinidad and Tobago34\nTN🇹🇳216Tunisia233\nTR🇹🇷90Turkey334\nTV🇹🇻688Tuvalu\nTW🇹🇼886Taiwan\nTZ🇹🇿255Tanzania234\nUG🇺🇬256Uganda234\nUA🇺🇦380Ukraine2322\nUY🇺🇾598Uruguay44\nUS🇺🇸1United States334\nUZ🇺🇿998Uzbekistan27\nVA🇻🇦3Vatican City\nVC🇻🇨1784Saint Vincent and the Grenadines34\nVE🇻🇪58Venezuela334\nVG🇻🇬1284British Virgin Islands34\nVI🇻🇮1340US Virgin Islands34\nVN🇻🇳84Vietnam\nVU🇻🇺678Vanuatu\nWF🇼🇫681Wallis and Futuna\nWS🇼🇸685Samoa\nXK🇽🇰383Kosovo44\nYE🇾🇪967Yemen333\nZA🇿🇦27South Africa234\nZM🇿🇲260Zambia234\nZW🇿🇼263Zimbabwe234`;\n\nconst formatsCache: Record = {};\nexport const defaultPhoneNumberFormat = /(\\d{1,3})(\\d{1,3})?(\\d{1,3})?(\\d{1,3})?(\\d{1,3})?/;\n\nconst parsed = DATA\n .split('\\n')\n .map((str) => {\n const id = str.substr(0, 2);\n const flag = str.substr(2, 4);\n const code = `+${str.match(/\\d+/)![0]}`;\n const name = str.split(/\\d+/)[1];\n const format = str.match(/\\d+$/);\n const phoneFormat = getPhoneNumberFormat(format);\n\n return {\n id, flag, code, name, phoneFormat,\n };\n });\n\nfunction getPhoneNumberFormat(format: RegExpMatchArray | null) {\n if (!format) {\n return defaultPhoneNumberFormat;\n }\n\n const formatValue = format[0] as string;\n let phoneNumberFormat;\n\n if (!formatsCache[formatValue]) {\n const phoneNumberGroups = formatValue.split('').map(Number);\n phoneNumberFormat = phoneNumberGroups.reduce((result, count, i) => {\n return `${result}(\\\\d{1,${count}})${i > 0 ? '?' : ''}`;\n }, '');\n formatsCache[formatValue] = new RegExp(`${phoneNumberFormat}${'()?'.repeat(5 - phoneNumberGroups.length)}`);\n }\n\n return formatsCache[formatValue];\n}\n\nexport default parsed;\n","import useReducer, { StateReducer, Dispatch } from '../useReducer';\nimport countryList from '../../util/countries';\n\nexport type FormState = {\n streetLine1: string;\n streetLine2: string;\n city: string;\n state: string;\n countryIso2: string;\n postCode: string;\n fullName: string;\n email: string;\n phone: string;\n shipping: string;\n cardNumber: string;\n cardholder: string;\n expiry: string;\n cvv: string;\n billingCountry: string;\n billingZip: string;\n saveInfo: boolean;\n saveCredentials: boolean;\n formErrors: Record;\n};\n\nexport type FormActions = (\n 'changeAddress1' | 'changeAddress2' | 'changeCity' | 'changeState' | 'changeCountry' |\n 'changePostCode' | 'changeFullName' | 'changeEmail' | 'changePhone' | 'changeShipping' | 'updateUserInfo' |\n 'changeCardNumber' | 'changeCardholder' | 'changeExpiryDate' | 'changeCvvCode' | 'changeBillingCountry' |\n 'changeBillingZip' | 'changeSaveInfo' | 'changeSaveCredentials' | 'setFormErrors'\n);\nexport type FormEditDispatch = Dispatch;\n\nconst INITIAL_STATE: FormState = {\n streetLine1: '',\n streetLine2: '',\n city: '',\n state: '',\n countryIso2: '',\n postCode: '',\n fullName: '',\n email: '',\n phone: '',\n shipping: '',\n cardNumber: '',\n cardholder: '',\n expiry: '',\n cvv: '',\n billingCountry: '',\n billingZip: '',\n saveInfo: true,\n saveCredentials: false,\n formErrors: {},\n};\n\nconst reducer: StateReducer = (state, action) => {\n switch (action.type) {\n case 'changeAddress1':\n return {\n ...state,\n streetLine1: action.payload,\n formErrors: {\n ...state.formErrors,\n streetLine1: undefined,\n },\n };\n case 'changeAddress2':\n return {\n ...state,\n streetLine2: action.payload,\n formErrors: {\n ...state.formErrors,\n streetLine2: undefined,\n },\n };\n case 'changeCity':\n return {\n ...state,\n city: action.payload,\n formErrors: {\n ...state.formErrors,\n city: undefined,\n },\n };\n case 'changeState':\n return {\n ...state,\n state: action.payload,\n formErrors: {\n ...state.formErrors,\n state: undefined,\n },\n };\n case 'changeCountry':\n return {\n ...state,\n countryIso2: action.payload,\n billingCountry: getBillingCountry(action.payload),\n formErrors: {\n ...state.formErrors,\n countryIso2: undefined,\n },\n };\n case 'changePostCode':\n return {\n ...state,\n postCode: action.payload,\n formErrors: {\n ...state.formErrors,\n postCode: undefined,\n },\n };\n case 'changeFullName':\n return {\n ...state,\n fullName: action.payload,\n formErrors: {\n ...state.formErrors,\n fullName: undefined,\n },\n };\n case 'changeEmail':\n return {\n ...state,\n email: action.payload,\n formErrors: {\n ...state.formErrors,\n email: undefined,\n },\n };\n case 'changePhone':\n return {\n ...state,\n phone: action.payload,\n formErrors: {\n ...state.formErrors,\n phone: undefined,\n },\n };\n case 'changeShipping':\n return { ...state, shipping: action.payload };\n case 'changeCardNumber':\n return {\n ...state,\n cardNumber: action.payload,\n formErrors: {\n ...state.formErrors,\n cardNumber: undefined,\n },\n };\n case 'changeCardholder':\n return {\n ...state,\n cardholder: action.payload,\n formErrors: {\n ...state.formErrors,\n cardholder: undefined,\n },\n };\n case 'changeExpiryDate':\n return {\n ...state,\n expiry: action.payload,\n formErrors: {\n ...state.formErrors,\n expiry: undefined,\n },\n };\n case 'changeCvvCode':\n return {\n ...state,\n cvv: action.payload,\n formErrors: {\n ...state.formErrors,\n cvv: undefined,\n },\n };\n case 'changeBillingCountry':\n return {\n ...state,\n billingCountry: action.payload,\n formErrors: {\n ...state.formErrors,\n billingCountry: undefined,\n },\n };\n case 'changeBillingZip':\n return {\n ...state,\n billingZip: action.payload,\n formErrors: {\n ...state.formErrors,\n billingZip: undefined,\n },\n };\n case 'changeSaveInfo':\n return { ...state, saveInfo: action.payload };\n case 'changeSaveCredentials':\n return { ...state, saveCredentials: action.payload };\n case 'updateUserInfo':\n if (action.payload.countryIso2) {\n return {\n ...state,\n ...action.payload,\n billingCountry: getBillingCountry(action.payload.countryIso2),\n };\n }\n return { ...state, ...action.payload };\n case 'setFormErrors':\n return {\n ...state,\n formErrors: {\n ...state.formErrors,\n ...action.payload,\n },\n };\n default:\n return state;\n }\n};\n\nfunction getBillingCountry(countryCode: string) {\n const country = countryList.find(({ id }) => id === countryCode);\n return country ? country.name : '';\n}\n\nconst usePaymentReducer = () => {\n return useReducer(reducer, INITIAL_STATE);\n};\n\nexport default usePaymentReducer;\n","import { RefObject } from 'react';\n\nimport { IS_TOUCH_ENV } from '../util/environment';\nimport { fastRaf } from '../util/schedulers';\nimport { useEffect } from '../lib/teact/teact';\n\nconst DEFAULT_DURATION = 400;\n\nexport default function useFocusAfterAnimation(\n ref: RefObject, animationDuration = DEFAULT_DURATION,\n) {\n useEffect(() => {\n if (IS_TOUCH_ENV) {\n return;\n }\n\n setTimeout(() => {\n fastRaf(() => {\n if (ref.current) {\n ref.current.focus();\n }\n });\n }, animationDuration);\n }, [ref, animationDuration]);\n}\n","import { ChangeEvent, RefObject } from 'react';\nimport React, { FC, memo } from '../../lib/teact/teact';\n\nimport buildClassName from '../../util/buildClassName';\n\ntype OwnProps = {\n id?: string;\n value?: string;\n label?: string;\n error?: string;\n ref?: RefObject;\n hasArrow?: boolean;\n placeholder?: string;\n onChange?: (e: ChangeEvent) => void;\n children: React.ReactNode;\n};\n\nconst Select: FC = (props) => {\n const {\n id,\n value,\n label,\n hasArrow,\n error,\n ref,\n placeholder,\n onChange,\n children,\n } = props;\n const labelText = error || label;\n const fullClassName = buildClassName(\n 'input-group',\n value && 'touched',\n error && 'error',\n labelText && 'with-label',\n hasArrow && 'with-arrow',\n 'input-group',\n );\n\n return (\n
\n \n {children}\n \n {labelText && id && (\n \n )}\n
\n );\n};\n\nexport default memo(Select);\n","import React, {\n FC, useRef, useCallback, useEffect, memo,\n} from '../../lib/teact/teact';\n\nimport { FormState, FormEditDispatch } from '../../hooks/reducers/usePaymentReducer';\nimport useFocusAfterAnimation from '../../hooks/useFocusAfterAnimation';\nimport useLang from '../../hooks/useLang';\nimport countryList from '../../util/countries';\n\nimport InputText from '../ui/InputText';\nimport Select from '../ui/Select';\nimport Checkbox from '../ui/Checkbox';\n\nimport './ShippingInfo.scss';\n\nexport type OwnProps = {\n state: FormState;\n needEmail: boolean;\n needPhone: boolean;\n needName: boolean;\n needAddress: boolean;\n dispatch: FormEditDispatch;\n};\n\nconst ShippingInfo: FC = ({\n state,\n needEmail,\n needPhone,\n needName,\n needAddress,\n dispatch,\n}) => {\n // eslint-disable-next-line no-null/no-null\n const inputRef = useRef(null);\n // eslint-disable-next-line no-null/no-null\n const phoneRef = useRef(null);\n // eslint-disable-next-line no-null/no-null\n const selectCountryRef = useRef(null);\n\n useEffect(() => {\n if (selectCountryRef.current\n && selectCountryRef.current.value !== state.countryIso2) {\n selectCountryRef.current.value = state.countryIso2;\n }\n }, [state.countryIso2]);\n\n const lang = useLang();\n\n useFocusAfterAnimation(inputRef);\n\n const handleAddress1Change = useCallback((e) => {\n dispatch({ type: 'changeAddress1', payload: e.target.value });\n }, [dispatch]);\n\n const handleAddress2Change = useCallback((e) => {\n dispatch({ type: 'changeAddress2', payload: e.target.value });\n }, [dispatch]);\n\n const handleCityChange = useCallback((e) => {\n dispatch({ type: 'changeCity', payload: e.target.value });\n }, [dispatch]);\n\n const handleStateChange = useCallback((e) => {\n dispatch({ type: 'changeState', payload: e.target.value });\n }, [dispatch]);\n\n const handleCountryChange = useCallback((e) => {\n dispatch({ type: 'changeCountry', payload: e.target.value });\n }, [dispatch]);\n\n const handlePostCodeChange = useCallback((e) => {\n dispatch({ type: 'changePostCode', payload: e.target.value });\n }, [dispatch]);\n\n const handleFullNameChange = useCallback((e) => {\n dispatch({ type: 'changeFullName', payload: e.target.value });\n }, [dispatch]);\n\n const handleEmailChange = useCallback((e) => {\n dispatch({ type: 'changeEmail', payload: e.target.value });\n }, [dispatch]);\n\n const handlePhoneChange = useCallback((e) => {\n let { value } = e.target;\n value = `+${value.replace(/\\D/g, '')}`;\n if (phoneRef.current) {\n phoneRef.current.value = value;\n }\n dispatch({ type: 'changePhone', payload: value });\n }, [dispatch]);\n\n const handleSaveInfoChange = useCallback((e) => {\n dispatch({ type: 'changeSaveInfo', payload: e.target.value });\n }, [dispatch]);\n\n const { formErrors } = state;\n return (\n
\n
\n {needAddress ? (\n
\n
{lang('PaymentShippingAddress')}
\n \n \n \n \n \n {countryList.map(({ name, id }) => (\n \n {name}\n \n ))}\n \n\n \n
\n ) : undefined}\n { needName || needEmail || needPhone ? (\n
{lang('PaymentShippingReceiver')}
\n ) : undefined }\n { needName && (\n \n ) }\n { needEmail && (\n \n ) }\n { needPhone && (\n \n ) }\n \n \n
\n );\n};\n\nexport default memo(ShippingInfo);\n","import React, {\n FC, useCallback, memo, useMemo, useEffect,\n} from '../../lib/teact/teact';\n\nimport { ShippingOption } from '../../types';\n\nimport { formatCurrency } from '../../util/formatCurrency';\nimport { FormState, FormEditDispatch } from '../../hooks/reducers/usePaymentReducer';\nimport useLang from '../../hooks/useLang';\n\nimport RadioGroup from '../ui/RadioGroup';\n\nimport './Shipping.scss';\n\nexport type OwnProps = {\n state: FormState;\n shippingOptions: ShippingOption[];\n currency?: string;\n dispatch: FormEditDispatch;\n};\n\nconst Shipping: FC = ({\n state,\n shippingOptions,\n currency,\n dispatch,\n}) => {\n const lang = useLang();\n\n useEffect(() => {\n if (!shippingOptions || state.shipping) {\n return;\n }\n dispatch({ type: 'changeShipping', payload: shippingOptions[0].id });\n }, [shippingOptions, state.shipping, dispatch]);\n\n const handleShippingSelect = useCallback((value) => {\n dispatch({ type: 'changeShipping', payload: value });\n }, [dispatch]);\n\n const options = useMemo(() => (shippingOptions.map(({ id: value, title: label, amount }) => ({\n label,\n subLabel: formatCurrency(amount, currency, lang.code),\n value,\n }))), [shippingOptions, currency, lang.code]);\n\n return (\n
\n
\n

{lang('PaymentShippingMethod')}

\n \n \n
\n );\n};\n\nexport default memo(Shipping);\n","import React, {\n FC, memo,\n} from '../../lib/teact/teact';\n\nimport { LangCode, Price } from '../../types';\n\nimport { formatCurrency } from '../../util/formatCurrency';\nimport buildClassName from '../../util/buildClassName';\nimport useLang from '../../hooks/useLang';\n\nimport './Checkout.scss';\n\nexport type OwnProps = {\n invoiceContent?: {\n title?: string;\n text?: string;\n photoUrl?: string;\n };\n checkoutInfo?: {\n paymentMethod?: string;\n paymentProvider?: string;\n shippingAddress?: string;\n name?: string;\n phone?: string;\n shippingMethod?: string;\n };\n prices?: Price[];\n totalPrice?: number;\n shippingPrices?: Price[];\n currency?: string;\n};\n\nconst Checkout: FC = ({\n invoiceContent,\n prices,\n shippingPrices,\n checkoutInfo,\n currency,\n totalPrice,\n}) => {\n const lang = useLang();\n\n const { photoUrl, title, text } = invoiceContent || {};\n const {\n paymentMethod,\n paymentProvider,\n shippingAddress,\n name,\n phone,\n shippingMethod,\n } = (checkoutInfo || {});\n\n return (\n
\n
\n {photoUrl && \"\"}\n
\n
{title}
\n

{text}

\n
\n
\n
\n { prices && prices.map((item) => (\n renderPaymentItem(lang.code, item.label, item.amount, currency)\n )) }\n { shippingPrices && shippingPrices.map((item) => (\n renderPaymentItem(lang.code, item.label, item.amount, currency)\n )) }\n { totalPrice !== undefined && (\n renderPaymentItem(lang.code, lang('Checkout.TotalAmount'), totalPrice, currency, true)\n ) }\n
\n
\n {paymentMethod && renderCheckoutItem('icon-card', paymentMethod, lang('PaymentCheckoutMethod'))}\n {paymentProvider && renderCheckoutItem(\n buildClassName('provider', paymentProvider.toLowerCase()),\n paymentProvider,\n lang('PaymentCheckoutProvider'),\n )}\n {shippingAddress && renderCheckoutItem('icon-location', shippingAddress, lang('PaymentShippingAddress'))}\n {name && renderCheckoutItem('icon-user', name, lang('PaymentCheckoutName'))}\n {phone && renderCheckoutItem('icon-phone', phone, lang('PaymentCheckoutPhoneNumber'))}\n {shippingMethod && renderCheckoutItem('icon-truck', shippingMethod, lang('PaymentCheckoutShippingMethod'))}\n
\n
\n );\n};\n\nfunction renderPaymentItem(\n langCode: LangCode | undefined, title: string, value: number, currency?: string, main = false,\n) {\n return (\n
\n
\n { title }\n
\n
\n {formatCurrency(value, currency, langCode)}\n
\n
\n );\n}\n\nfunction renderCheckoutItem(icon: string, title: string, data: string) {\n return (\n
\n \n
\n
\n { title }\n
\n

\n { data }\n

\n
\n
\n );\n}\n\nexport default memo(Checkout);\n","import React, {\n FC, memo, useCallback, useRef,\n} from '../../lib/teact/teact';\n\nimport { formatCardExpiry } from '../middle/helpers/inputFormatters';\n\nimport InputText from '../ui/InputText';\nimport useLang from '../../hooks/useLang';\n\nconst MAX_FIELD_LENGTH = 5;\n\nexport type OwnProps = {\n value: string;\n error?: string;\n onChange: (value: string) => void;\n};\n\nconst ExpiryInput : FC = ({ value, error, onChange }) => {\n const lang = useLang();\n // eslint-disable-next-line no-null/no-null\n const expiryInputRef = useRef(null);\n\n const handleKeyDown = useCallback((e) => {\n if (e.key === 'Backspace' && value.charAt(value.length - 1) === '/') {\n const newValue = value.slice(0, value.length - 1);\n if (expiryInputRef.current) {\n expiryInputRef.current.value = newValue;\n }\n }\n }, [value]);\n\n const handleChange = useCallback((e) => {\n onChange(formatCardExpiry(e.target.value));\n }, [onChange]);\n\n return (\n \n );\n};\n\nexport default memo(ExpiryInput);\n","export function formatCardExpiry(input: string) {\n input = input.replace(/[^\\d]/g, '').slice(0, 4);\n const parts = input.match(/.{1,2}/g);\n if (parts?.[0] && Number(parts[0]) > 12) {\n parts[0] = '12';\n }\n if (parts?.[0] && parts[0].length === 2 && !parts[1]) {\n parts[1] = '';\n }\n return parts ? parts.join('/') : '';\n}\n\nexport function formatCardNumber(input: string) {\n input = input.replace(/[^\\d]/g, '');\n const parts = input.match(/.{1,4}/g);\n return parts ? parts.join(' ') : '';\n}\n","import React, {\n FC, memo, useCallback, useState, useRef, useEffect,\n} from '../../lib/teact/teact';\n\nimport { formatCardNumber } from '../middle/helpers/inputFormatters';\nimport { detectCardType, CardType } from '../common/helpers/detectCardType';\nimport useFocusAfterAnimation from '../../hooks/useFocusAfterAnimation';\nimport useLang from '../../hooks/useLang';\n\nimport InputText from '../ui/InputText';\n\nimport './CardInput.scss';\n\nimport mastercardIconPath from '../../assets/mastercard.svg';\nimport visaIconPath from '../../assets/visa.svg';\n\nconst CARD_NUMBER_MAX_LENGTH = 23;\n\nexport type OwnProps = {\n value: string;\n error?: string;\n onChange: (value: string) => void;\n};\n\nconst CardInput : FC = ({ value, error, onChange }) => {\n const lang = useLang();\n // eslint-disable-next-line no-null/no-null\n const cardNumberRef = useRef(null);\n\n useFocusAfterAnimation(cardNumberRef);\n\n const [cardType, setCardType] = useState(CardType.Default);\n useEffect(() => {\n const newCardType = detectCardType(value);\n setCardType(newCardType);\n // eslint-disable-next-line\n }, []);\n\n const handleChange = useCallback((e) => {\n const newValue = formatCardNumber(e.target.value);\n const newCardType = detectCardType(e.target.value);\n setCardType(newCardType);\n onChange(newValue);\n if (cardNumberRef.current) {\n cardNumberRef.current.value = newValue;\n }\n }, [onChange, cardNumberRef]);\n\n const cardIcon = getCardIcon(cardType);\n\n return (\n
\n {cardIcon}\n \n
\n );\n};\n\nexport default memo(CardInput);\n\nfunction getCardIcon(cardType: CardType) {\n switch (cardType) {\n case CardType.Mastercard:\n return \"\";\n case CardType.Visa:\n return \"\";\n default:\n return undefined;\n }\n}\n","import React, {\n FC, useCallback, memo, useRef, useEffect,\n} from '../../lib/teact/teact';\n\nimport { FormState, FormEditDispatch } from '../../hooks/reducers/usePaymentReducer';\nimport useLang from '../../hooks/useLang';\nimport countryList from '../../util/countries';\n\nimport InputText from '../ui/InputText';\nimport Checkbox from '../ui/Checkbox';\nimport Select from '../ui/Select';\nimport ExpiryInput from './ExpiryInput';\nimport CardInput from './CardInput';\n\nimport './PaymentInfo.scss';\n\nexport type OwnProps = {\n state: FormState;\n canSaveCredentials: boolean;\n needCardholderName?: boolean;\n needCountry?: boolean;\n needZip?: boolean;\n dispatch: FormEditDispatch;\n};\n\nconst PaymentInfo: FC = ({\n state,\n canSaveCredentials,\n needCardholderName,\n needCountry,\n needZip,\n dispatch,\n}) => {\n // eslint-disable-next-line no-null/no-null\n const selectCountryRef = useRef(null);\n\n useEffect(() => {\n if (selectCountryRef.current\n && selectCountryRef.current.value !== state.billingCountry) {\n selectCountryRef.current.value = state.billingCountry;\n }\n }, [state.billingCountry]);\n\n const handleCardNumberChange = useCallback((value) => {\n dispatch({ type: 'changeCardNumber', payload: value });\n }, [dispatch]);\n\n const handleCardholderChange = useCallback((e) => {\n dispatch({ type: 'changeCardholder', payload: e.target.value.toUpperCase() });\n }, [dispatch]);\n\n const handleExpiryChange = useCallback((value) => {\n dispatch({ type: 'changeExpiryDate', payload: value });\n }, [dispatch]);\n\n const handleCvvChange = useCallback((e) => {\n dispatch({ type: 'changeCvvCode', payload: e.target.value });\n }, [dispatch]);\n\n const handleCountryChange = useCallback((e) => {\n dispatch({ type: 'changeBillingCountry', payload: e.target.value });\n }, [dispatch]);\n\n const handleBillingPostCodeChange = useCallback((e) => {\n dispatch({ type: 'changeBillingZip', payload: e.target.value });\n }, [dispatch]);\n\n const handleChangeSaveCredentials = useCallback((e) => {\n dispatch({ type: 'changeSaveCredentials', payload: e.target.value });\n }, [dispatch]);\n\n const lang = useLang();\n\n const { formErrors = {} } = state;\n\n return (\n
\n
\n
{lang('PaymentCardTitle')}
\n \n { needCardholderName && (\n \n )}\n
\n \n \n
\n { needCountry || needZip ? (\n
{lang('PaymentBillingAddress')}
\n ) : undefined }\n { needCountry && (\n \n {\n countryList.map(({ name }) => (\n \n {name}\n \n ))\n }\n \n ) }\n { needZip && (\n \n )}\n { canSaveCredentials && (\n \n ) }\n \n
\n );\n};\n\nexport default memo(PaymentInfo);\n","import React, { FC, memo } from '../../lib/teact/teact';\n\nimport useLang from '../../hooks/useLang';\n\nimport './ConfirmPayment.scss';\n\nexport type OwnProps = {\n url: string;\n};\n\nconst ConfirmPayment: FC = ({ url }) => {\n const lang = useLang();\n\n return (\n
\n \n
\n );\n};\n\nexport default memo(ConfirmPayment);\n","import React, {\n FC, memo, useCallback, useEffect, useMemo, useState,\n} from '../../lib/teact/teact';\nimport { getActions, withGlobal } from '../../global';\n\nimport { GlobalState } from '../../global/types';\nimport { PaymentStep, ShippingOption, Price } from '../../types';\n\nimport { formatCurrency } from '../../util/formatCurrency';\nimport { detectCardTypeText } from '../common/helpers/detectCardType';\nimport usePaymentReducer, { FormState } from '../../hooks/reducers/usePaymentReducer';\nimport useLang from '../../hooks/useLang';\n\nimport ShippingInfo from './ShippingInfo';\nimport Shipping from './Shipping';\nimport Checkout from './Checkout';\nimport PaymentInfo from './PaymentInfo';\nimport Button from '../ui/Button';\nimport Modal from '../ui/Modal';\nimport Transition from '../ui/Transition';\nimport Spinner from '../ui/Spinner';\nimport ConfirmPayment from './ConfirmPayment';\n\nimport './PaymentModal.scss';\n\nconst DEFAULT_PROVIDER = 'stripe';\nconst DONATE_PROVIDER = 'smartglocal';\nconst SUPPORTED_PROVIDERS = new Set([DEFAULT_PROVIDER, DONATE_PROVIDER]);\n\nexport type OwnProps = {\n isOpen: boolean;\n onClose: () => void;\n};\n\ntype StateProps = {\n nameRequested?: boolean;\n shippingAddressRequested?: boolean;\n phoneRequested?: boolean;\n emailRequested?: boolean;\n flexible?: boolean;\n phoneToProvider?: boolean;\n emailToProvider?: boolean;\n currency?: string;\n prices?: Price[];\n isProviderError: boolean;\n needCardholderName?: boolean;\n needCountry?: boolean;\n needZip?: boolean;\n confirmPaymentUrl?: string;\n};\n\ntype GlobalStateProps = Pick;\n\nconst Invoice: FC = ({\n isOpen,\n onClose,\n step,\n shippingOptions,\n savedInfo,\n canSaveCredentials,\n nameRequested,\n shippingAddressRequested,\n phoneRequested,\n emailRequested,\n phoneToProvider,\n emailToProvider,\n currency,\n passwordMissing,\n isProviderError,\n invoiceContent,\n nativeProvider,\n prices,\n needCardholderName,\n needCountry,\n needZip,\n confirmPaymentUrl,\n error,\n}) => {\n const {\n validateRequestedInfo,\n sendPaymentForm,\n setPaymentStep,\n sendCredentialsInfo,\n clearPaymentError,\n } = getActions();\n\n const [paymentState, paymentDispatch] = usePaymentReducer();\n const [isLoading, setIsLoading] = useState(false);\n const lang = useLang();\n const canRenderFooter = step !== PaymentStep.ConfirmPayment;\n\n useEffect(() => {\n if (step || error) {\n setIsLoading(false);\n }\n }, [step, error]);\n\n useEffect(() => {\n if (error?.field) {\n paymentDispatch({\n type: 'setFormErrors',\n payload: {\n [error.field]: error.message,\n },\n });\n }\n }, [error, paymentDispatch]);\n\n useEffect(() => {\n if (savedInfo) {\n const {\n name: fullName, phone, email, shippingAddress,\n } = savedInfo;\n paymentDispatch({\n type: 'updateUserInfo',\n payload: {\n fullName,\n phone: phone && phone.charAt(0) !== '+'\n ? `+${phone}`\n : phone,\n email,\n ...(shippingAddress || {}),\n },\n });\n }\n }, [savedInfo, paymentDispatch]);\n\n const handleErrorModalClose = useCallback(() => {\n clearPaymentError();\n }, [clearPaymentError]);\n\n const totalPrice = useMemo(() => {\n if (step !== PaymentStep.Checkout) {\n return 0;\n }\n\n return getTotalPrice(prices, shippingOptions, paymentState.shipping);\n }, [step, paymentState.shipping, prices, shippingOptions]);\n\n const checkoutInfo = useMemo(() => {\n if (step !== PaymentStep.Checkout) {\n return undefined;\n }\n return getCheckoutInfo(paymentState, shippingOptions, nativeProvider || '');\n }, [step, paymentState, shippingOptions, nativeProvider]);\n\n function renderError() {\n if (!error) {\n return undefined;\n }\n return (\n \n

{error.description || 'Error'}

\n

{error.description || 'Error'}

\n \n {lang('OK')}\n \n
\n );\n }\n\n function renderModalContent(currentStep: PaymentStep) {\n switch (currentStep) {\n case PaymentStep.ShippingInfo:\n return (\n \n );\n case PaymentStep.Shipping:\n return (\n \n );\n case PaymentStep.PaymentInfo:\n return (\n \n );\n case PaymentStep.Checkout:\n return (\n \n );\n case PaymentStep.ConfirmPayment:\n return (\n \n );\n default:\n return undefined;\n }\n }\n\n const validateRequest = useCallback(() => {\n const { saveInfo } = paymentState;\n const requestInfo = getRequestInfo(paymentState);\n validateRequestedInfo({ requestInfo, saveInfo });\n }, [validateRequestedInfo, paymentState]);\n\n const sendCredentials = useCallback(() => {\n const credentials = getCredentials(paymentState);\n sendCredentialsInfo({\n credentials,\n });\n }, [sendCredentialsInfo, paymentState]);\n\n const sendForm = useCallback(() => {\n sendPaymentForm({\n shippingOptionId: paymentState.shipping,\n saveCredentials: paymentState.saveCredentials,\n });\n }, [sendPaymentForm, paymentState]);\n\n const setStep = useCallback((nextStep) => {\n setPaymentStep({ step: nextStep });\n }, [setPaymentStep]);\n\n const handleButtonClick = useCallback(() => {\n setIsLoading(true);\n switch (step) {\n case PaymentStep.ShippingInfo:\n return validateRequest();\n case PaymentStep.Shipping:\n return setStep(PaymentStep.PaymentInfo);\n case PaymentStep.PaymentInfo:\n return sendCredentials();\n case PaymentStep.Checkout:\n return sendForm();\n default:\n return () => {\n };\n }\n }, [step, validateRequest, setStep, sendCredentials, sendForm]);\n\n const modalHeader = useMemo(() => {\n switch (step) {\n case PaymentStep.ShippingInfo:\n return lang('PaymentShippingInfo');\n case PaymentStep.Shipping:\n return lang('PaymentShippingMethod');\n case PaymentStep.PaymentInfo:\n return lang('PaymentCardInfo');\n case PaymentStep.Checkout:\n return lang('PaymentCheckout');\n case PaymentStep.ConfirmPayment:\n return lang('Checkout.WebConfirmation.Title');\n default:\n return '';\n }\n }, [step, lang]);\n\n const buttonText = useMemo(() => {\n switch (step) {\n case PaymentStep.Checkout:\n return lang('Checkout.PayPrice', formatCurrency(totalPrice, currency, lang.code));\n default:\n return lang('Next');\n }\n }, [step, lang, currency, totalPrice]);\n\n if (isProviderError) {\n return (\n \n

\n Sorry, Telegram WebZ doesn't support payments with this provider yet.
\n Please use one of our mobile apps to do this.\n

\n \n {lang('OK')}\n \n \n );\n }\n\n return (\n \n
\n \n \n \n

{modalHeader}

\n
\n {step !== undefined ? (\n \n
\n {renderModalContent(step)}\n
\n
\n ) : (\n
\n \n
\n )}\n {canRenderFooter && (\n
\n \n {buttonText}\n \n
\n )}\n {error && !error.field && renderError()}\n \n );\n};\n\nexport default memo(withGlobal(\n (global): StateProps & GlobalStateProps => {\n const {\n step,\n shippingOptions,\n savedInfo,\n canSaveCredentials,\n invoice,\n invoiceContent,\n nativeProvider,\n nativeParams,\n passwordMissing,\n error,\n confirmPaymentUrl,\n } = global.payment;\n\n const isProviderError = Boolean(invoice && (!nativeProvider || !SUPPORTED_PROVIDERS.has(nativeProvider)));\n const { needCardholderName, needCountry, needZip } = (nativeParams || {});\n const {\n nameRequested,\n phoneRequested,\n emailRequested,\n shippingAddressRequested,\n flexible,\n phoneToProvider,\n emailToProvider,\n currency,\n prices,\n } = (invoice || {});\n\n return {\n step,\n shippingOptions,\n savedInfo,\n canSaveCredentials,\n nativeProvider,\n passwordMissing,\n nameRequested,\n shippingAddressRequested,\n phoneRequested,\n emailRequested,\n flexible,\n phoneToProvider,\n emailToProvider,\n currency,\n prices,\n isProviderError,\n invoiceContent,\n needCardholderName,\n needCountry,\n needZip,\n error,\n confirmPaymentUrl,\n };\n },\n)(Invoice));\n\nfunction findShippingOption(shippingOptions: ShippingOption[], optionId: string) {\n return shippingOptions.find(({ id }) => id === optionId);\n}\n\nfunction getShippingPrices(shippingOptions: ShippingOption[], shippingOption: string) {\n const option = findShippingOption(shippingOptions, shippingOption);\n return option?.prices;\n}\n\nfunction getTotalPrice(prices: Price[] = [], shippingOptions: ShippingOption[] | undefined, shippingOption: string) {\n const shippingPrices = shippingOptions\n ? getShippingPrices(shippingOptions, shippingOption)\n : [];\n let total = 0;\n const totalPrices = prices.concat(shippingPrices || []);\n total = totalPrices.reduce((acc, cur) => {\n return acc + cur.amount;\n }, total);\n return total;\n}\n\nfunction getCheckoutInfo(state: FormState, shippingOptions: ShippingOption[] | undefined, paymentProvider: string) {\n const cardTypeText = detectCardTypeText(state.cardNumber);\n const paymentMethod = `${cardTypeText} *${state.cardNumber.slice(-4)}`;\n const shippingAddress = state.streetLine1\n ? `${state.streetLine1}, ${state.city}, ${state.countryIso2}`\n : undefined;\n const { phone, fullName: name } = state;\n const shippingOption = shippingOptions ? findShippingOption(shippingOptions, state.shipping) : undefined;\n const shippingMethod = shippingOption?.title;\n return {\n paymentMethod,\n paymentProvider,\n shippingAddress,\n name,\n phone,\n shippingMethod,\n };\n}\n\nfunction getRequestInfo(paymentState: FormState) {\n const {\n streetLine1,\n streetLine2,\n city,\n state,\n countryIso2,\n postCode,\n fullName: name,\n phone,\n email,\n } = paymentState;\n\n const shippingAddress = {\n streetLine1,\n streetLine2,\n city,\n state,\n countryIso2,\n postCode,\n };\n\n return {\n name,\n phone,\n email,\n shippingAddress,\n };\n}\n\nfunction getCredentials(paymentState: FormState) {\n const {\n cardNumber, cardholder, expiry, cvv, billingCountry, billingZip,\n } = paymentState;\n const [expiryMonth, expiryYear] = expiry.split('/');\n const data = {\n cardNumber,\n cardholder,\n expiryMonth,\n expiryYear,\n cvv,\n country: billingCountry,\n zip: billingZip,\n };\n\n return {\n data,\n };\n}\n","import React, {\n FC, memo, useMemo,\n} from '../../lib/teact/teact';\nimport { withGlobal } from '../../global';\n\nimport { Price } from '../../types';\nimport { ApiShippingAddress } from '../../api/types';\n\nimport useLang from '../../hooks/useLang';\n\nimport Checkout from './Checkout';\nimport Modal from '../ui/Modal';\nimport Button from '../ui/Button';\n\nimport './PaymentModal.scss';\n\nexport type OwnProps = {\n isOpen: boolean;\n onClose: () => void;\n};\n\ntype StateProps = {\n prices?: Price[];\n shippingPrices: any;\n totalAmount?: number;\n currency?: string;\n info?: {\n shippingAddress?: ApiShippingAddress;\n phone?: string;\n name?: string;\n };\n photoUrl?: string;\n text?: string;\n title?: string;\n credentialsTitle?: string;\n shippingMethod?: string;\n};\n\nconst ReceiptModal: FC = ({\n isOpen,\n onClose,\n prices,\n shippingPrices,\n totalAmount,\n currency,\n info,\n photoUrl,\n text,\n title,\n credentialsTitle,\n shippingMethod,\n}) => {\n const lang = useLang();\n const checkoutInfo = useMemo(() => {\n return getCheckoutInfo(credentialsTitle, info, shippingMethod);\n }, [info, shippingMethod, credentialsTitle]);\n\n return (\n \n
\n
\n \n \n \n

{lang('PaymentReceipt')}

\n
\n
\n \n
\n
\n \n );\n};\n\nexport default memo(withGlobal(\n (global): StateProps => {\n const { receipt } = global.payment;\n const {\n currency,\n prices,\n info,\n totalAmount,\n credentialsTitle,\n shippingPrices,\n shippingMethod,\n photoUrl,\n text,\n title,\n } = (receipt || {});\n\n return {\n currency,\n prices,\n info,\n totalAmount,\n credentialsTitle,\n shippingPrices,\n shippingMethod,\n photoUrl,\n text,\n title,\n };\n },\n)(ReceiptModal));\n\nfunction getCheckoutInfo(paymentMethod?: string,\n info?:\n { phone?: string;\n name?: string;\n shippingAddress?: ApiShippingAddress;\n },\n shippingMethod?: string) {\n if (!info) {\n return { paymentMethod };\n }\n const { shippingAddress } = info;\n const fullAddress = shippingAddress?.streetLine1\n ? `${shippingAddress.streetLine1}, ${shippingAddress.city}, ${shippingAddress.countryIso2}`\n : undefined;\n const { phone, name } = info;\n return {\n paymentMethod,\n paymentProvider: 'Stripe',\n shippingAddress: fullAddress,\n name,\n phone,\n shippingMethod,\n };\n}\n","import { ChangeEvent } from 'react';\nimport React, {\n FC, memo, useEffect, useRef, useState,\n} from '../../lib/teact/teact';\n\nimport { MIN_PASSWORD_LENGTH } from '../../config';\nimport { IS_TOUCH_ENV, IS_SINGLE_COLUMN_LAYOUT } from '../../util/environment';\nimport buildClassName from '../../util/buildClassName';\nimport useLang from '../../hooks/useLang';\n\nimport Button from '../ui/Button';\n\ntype OwnProps = {\n submitLabel?: string;\n error?: string;\n hint?: string;\n placeholder?: string;\n isLoading?: boolean;\n isPasswordVisible?: boolean;\n clearError: NoneToVoidFunction;\n onChangePasswordVisibility: (state: boolean) => void;\n onInputChange?: (password: string) => void;\n onSubmit: (password: string) => void;\n};\n\nconst FOCUS_DELAY_TIMEOUT_MS = IS_SINGLE_COLUMN_LAYOUT ? 550 : 400;\n\nconst PasswordForm: FC = ({\n isLoading = false,\n isPasswordVisible,\n error,\n hint,\n placeholder = 'Password',\n submitLabel = 'Next',\n clearError,\n onChangePasswordVisibility,\n onInputChange,\n onSubmit,\n}) => {\n // eslint-disable-next-line no-null/no-null\n const inputRef = useRef(null);\n const lang = useLang();\n\n const [password, setPassword] = useState('');\n const [canSubmit, setCanSubmit] = useState(false);\n\n useEffect(() => {\n if (!IS_TOUCH_ENV) {\n setTimeout(() => {\n inputRef.current!.focus();\n }, FOCUS_DELAY_TIMEOUT_MS);\n }\n }, []);\n\n useEffect(() => {\n if (error) {\n requestAnimationFrame(() => {\n inputRef.current!.focus();\n inputRef.current!.select();\n });\n }\n }, [error]);\n\n function onPasswordChange(e: ChangeEvent) {\n if (error) {\n clearError();\n }\n\n const { target } = e;\n setPassword(target.value);\n setCanSubmit(target.value.length >= MIN_PASSWORD_LENGTH);\n if (onInputChange) {\n onInputChange(target.value);\n }\n }\n\n function togglePasswordVisibility() {\n onChangePasswordVisibility(!isPasswordVisible);\n }\n\n function handleSubmit(event: React.FormEvent) {\n event.preventDefault();\n\n if (isLoading) {\n return;\n }\n\n if (canSubmit) {\n onSubmit(password);\n }\n }\n\n return (\n
\n \n \n \n \n \n \n \n {canSubmit && (\n \n )}\n \n );\n};\n\nexport default memo(PasswordForm);\n","import React, {\n FC, useState, useEffect, useCallback, memo,\n} from '../../lib/teact/teact';\n\nimport { STICKER_SIZE_AUTH, STICKER_SIZE_AUTH_MOBILE, STICKER_SIZE_TWO_FA } from '../../config';\nimport { IS_SINGLE_COLUMN_LAYOUT } from '../../util/environment';\nimport getAnimationData from './helpers/animatedAssets';\n\nimport AnimatedSticker from './AnimatedSticker';\n\nimport './PasswordMonkey.scss';\n\ntype OwnProps = {\n isPasswordVisible: boolean;\n isBig?: boolean;\n};\n\nconst PEEK_MONKEY_SHOW_DELAY = 2000;\nconst SEGMENT_COVER_EYES: [number, number] = [0, 50];\nconst SEGMENT_UNCOVER_EYE: [number, number] = [0, 20];\nconst SEGMENT_COVER_EYE: [number, number] = [20, 0];\nconst STICKER_SIZE = IS_SINGLE_COLUMN_LAYOUT ? STICKER_SIZE_AUTH_MOBILE : STICKER_SIZE_AUTH;\n\nconst PasswordMonkey: FC = ({ isPasswordVisible, isBig }) => {\n const [closeMonkeyData, setCloseMonkeyData] = useState();\n const [peekMonkeyData, setPeekMonkeyData] = useState();\n const [isFirstMonkeyLoaded, setIsFirstMonkeyLoaded] = useState(false);\n const [isPeekShown, setIsPeekShown] = useState(false);\n\n useEffect(() => {\n if (!closeMonkeyData) {\n getAnimationData('MonkeyClose').then(setCloseMonkeyData);\n } else {\n setTimeout(() => setIsPeekShown(true), PEEK_MONKEY_SHOW_DELAY);\n }\n }, [closeMonkeyData]);\n\n useEffect(() => {\n if (!peekMonkeyData) {\n getAnimationData('MonkeyPeek').then(setPeekMonkeyData);\n }\n }, [peekMonkeyData]);\n\n const handleFirstMonkeyLoad = useCallback(() => setIsFirstMonkeyLoaded(true), []);\n\n return (\n
\n {!isFirstMonkeyLoaded && (\n
\n )}\n {closeMonkeyData && (\n \n )}\n {peekMonkeyData && (\n \n )}\n
\n );\n};\n\nexport default memo(PasswordMonkey);\n","import React, {\n FC, useEffect, useState, memo, useCallback,\n} from '../../lib/teact/teact';\n\nimport { DEBUG } from '../../config';\nimport { blobToFile, blobToDataUri } from '../../util/files';\nimport useLang from '../../hooks/useLang';\n\nimport Button from './Button';\nimport Modal from './Modal';\nimport Loading from './Loading';\n\nimport './CropModal.scss';\n\n// Change to 'base64' to get base64-encoded string\nconst cropperResultOptions: Croppie.ResultOptions & { type: 'blob' } = {\n type: 'blob',\n quality: 1,\n format: 'jpeg',\n circle: false,\n size: { width: 1024, height: 1024 },\n};\n\ntype ICroppie = typeof import('croppie');\nlet Croppie: ICroppie;\nlet croppiePromise: Promise<{ default: ICroppie }>;\n\nasync function ensureCroppie() {\n if (!croppiePromise) {\n croppiePromise = import('../../lib/croppie') as unknown as Promise<{ default: ICroppie }>;\n Croppie = (await croppiePromise).default;\n }\n\n return croppiePromise;\n}\n\nlet cropper: Croppie;\n\nasync function initCropper(imgFile: File) {\n try {\n const cropContainer = document.getElementById('avatar-crop');\n if (!cropContainer) {\n return;\n }\n\n const { offsetWidth, offsetHeight } = cropContainer;\n\n cropper = new Croppie(cropContainer, {\n enableZoom: true,\n boundary: {\n width: offsetWidth,\n height: offsetHeight,\n },\n viewport: {\n width: offsetWidth - 16,\n height: offsetHeight - 16,\n type: 'circle',\n },\n });\n\n const dataUri = await blobToDataUri(imgFile);\n await cropper.bind({ url: dataUri });\n } catch (err) {\n if (DEBUG) {\n // eslint-disable-next-line no-console\n console.error(err);\n }\n }\n}\n\ntype OwnProps = {\n file?: File;\n onChange: (file: File) => void;\n onClose: () => void;\n};\n\nconst CropModal: FC = ({ file, onChange, onClose }: OwnProps) => {\n const [isCroppieReady, setIsCroppieReady] = useState(false);\n\n useEffect(() => {\n if (!file) {\n return;\n }\n\n if (!isCroppieReady) {\n ensureCroppie().then(() => setIsCroppieReady(true));\n\n return;\n }\n\n initCropper(file);\n }, [file, isCroppieReady]);\n\n const lang = useLang();\n\n const handleCropClick = useCallback(async () => {\n if (!cropper) {\n return;\n }\n\n const result: Blob | string = await cropper.result(cropperResultOptions);\n const croppedImg = typeof result === 'string' ? result : blobToFile(result, 'avatar.jpg');\n\n onChange(croppedImg);\n }, [onChange]);\n\n return (\n \n {isCroppieReady ? (\n
\n ) : (\n \n )}\n \n \n \n \n );\n};\n\nexport default memo(CropModal);\n","import { ChangeEvent } from 'react';\nimport React, {\n FC, useState, useEffect, memo, useCallback,\n} from '../../lib/teact/teact';\n\nimport buildClassName from '../../util/buildClassName';\n\nimport CropModal from './CropModal';\n\nimport './AvatarEditable.scss';\n\ninterface OwnProps {\n title?: string;\n disabled?: boolean;\n currentAvatarBlobUrl?: string;\n onChange: (file: File) => void;\n}\n\nconst AvatarEditable: FC = ({\n title = 'Change your profile picture',\n disabled,\n currentAvatarBlobUrl,\n onChange,\n}) => {\n const [selectedFile, setSelectedFile] = useState();\n const [croppedBlobUrl, setCroppedBlobUrl] = useState(currentAvatarBlobUrl);\n\n useEffect(() => {\n setCroppedBlobUrl(currentAvatarBlobUrl);\n }, [currentAvatarBlobUrl]);\n\n function handleSelectFile(event: ChangeEvent) {\n const target = event.target as HTMLInputElement;\n\n if (!target || !target.files || !target.files[0]) {\n return;\n }\n\n setSelectedFile(target.files[0]);\n target.value = '';\n }\n\n const handleAvatarCrop = useCallback((croppedImg: File) => {\n setSelectedFile(undefined);\n onChange(croppedImg);\n\n if (croppedBlobUrl) {\n URL.revokeObjectURL(croppedBlobUrl);\n }\n setCroppedBlobUrl(URL.createObjectURL(croppedImg));\n }, [croppedBlobUrl, onChange]);\n\n const handleModalClose = useCallback(() => {\n setSelectedFile(undefined);\n }, []);\n\n const labelClassName = buildClassName(\n croppedBlobUrl && 'filled',\n disabled && 'disabled',\n );\n\n return (\n
\n \n \n \n {croppedBlobUrl && \"Avatar\"}\n \n \n
\n );\n};\n\nexport default memo(AvatarEditable);\n"],"names":["cache","Map","useBlurSync","dataUri","blurredRef","useRef","isChanged","useOnChange","current","undefined","img","Image","src","width","canvas","imgToCanvas","fastBlur","getContext","height","toDataURL","blurredAsync","isDisabled","delay","get","timeoutRef","forceUpdate","useForceUpdate","clearTimeout","useEffect","onload","blurredDataUri","size","clear","set","window","setTimeout","useBlur","Boolean","createGhost","source","origin","ghost","document","createElement","classList","add","draggable","oncontextmenu","stopEvent","HTMLVideoElement","poster","appendChild","MediaViewerOrigin","profileInfo","querySelector","cloneNode","isMessageImageFullyVisible","container","imageEl","messageListElement","imgOffsetTop","offsetTop","closest","id","includes","parentElement","scrollTop","offsetHeight","applyStyles","element","styles","Object","assign","style","getNodes","message","containerSelector","mediaSelector","getMessageHtmlId","mediaEls","querySelectorAll","mediaEl","length","applyShape","firstChild","objectFit","memo","withGlobal","global","isDownloading","selectIsDownloading","isProtected","selectIsMessageProtected","mediaData","isVideo","isZoomed","fileName","isAvatar","onCloseMediaViewer","onForward","onZoomToggle","downloadMessageMedia","cancelMessageMediaDownload","getActions","loadProgress","downloadProgress","useMediaWithLoadProgress","getMessageMediaHash","handleDownloadClick","useCallback","lang","useLang","MenuButton","useMemo","onTrigger","isOpen","Button","round","color","className","onClick","ariaLabel","IS_SINGLE_COLUMN_LAYOUT","DropdownMenu","trigger","positionX","MenuItem","icon","Math","href","download","ProgressSpinner","progress","noCross","renderDownloadButton","text","isHidden","isForVideo","isMultiline","setIsMultiline","useState","footerContent","checkIsMultiline","clientHeight","REM","handleResize","throttle","addEventListener","removeEventListener","classNames","buildClassName","e","stopPropagation","dir","prop","fullscreenElement","mozFullScreenElement","webkitFullscreenElement","units","bytes","number","floor","log","toFixed","PLAYBACK_RATES","bufferedRanges","bufferedProgress","currentTime","duration","fileSize","isForceMobileVersion","isPlayed","isFullscreenSupported","isFullscreen","isVisible","isBuffered","volume","isMuted","playbackRate","onChangeFullscreen","onVolumeClick","onVolumeChange","onPlaybackRateChange","onPlayPause","setVisibility","onSeek","isPlaybackMenuOpen","openPlaybackMenu","closePlaybackMenu","useFlag","seekerRef","isSeekingRef","isSeeking","timeout","body","remove","handleSeek","left","getBoundingClientRect","clientX","MouseEvent","targetTouches","max","min","handleStartSeek","handleStopSeek","captureEvents","onCapture","onRelease","onDrag","volumeIcon","percentagePlayed","ref","map","start","end","renderSeekLine","ripple","IS_IOS","RangeSlider","bold","value","onChange","formatMediaDuration","renderTime","loadedPercent","totalSize","formatFileSize","Menu","positionY","autoClose","onClose","rate","disabled","url","isGif","posterData","posterSize","isMediaViewerOpen","noPlay","toggleControls","areControlsVisible","setMediaViewerVolume","setMediaViewerMuted","setMediaViewerPlaybackRate","videoRef","setIsPlayed","IS_TOUCH_ENV","setCurrentTime","setFullscreen","exitFullscreen","elRef","setIsFullscreen","useLayoutEffect","listener","listenerEnter","listenerExit","video","PLATFORM_ENV","requestFullscreen","webkitRequestFullscreen","webkitEnterFullscreen","mozRequestFullScreen","mozCancelFullScreen","webkitCancelFullScreen","webkitExitFullscreen","useFullscreenStatus","bufferingHandlers","useBuffering","shouldRender","shouldRenderSpinner","transitionClassNames","spinnerClassNames","useShowTransition","shouldRenderPlayButton","playButtonClassNames","pause","safePlay","togglePlayState","useVideoCleanup","handleMouseMove","handleMouseOut","target","handleTimeUpdate","currentTarget","handleEnded","handleFullscreenChange","position","handleVolumeChange","newVolume","handleVolumeMuted","handlePlaybackRateChange","newPlaybackRate","togglePayingStateBySpace","key","preventDefault","wrapperStyle","videoStyle","onMouseMove","onMouseOut","autoPlay","playsInline","loop","muted","onPlay","onEnded","onDoubleClick","onTimeUpdate","join","square","ownProps","chatId","threadId","messageId","avatarOwnerId","profilePhotoIndex","mediaViewer","selectChatMessage","senderId","avatarOwner","selectUser","selectChat","selectScheduledMessage","props","isActive","animationLevel","isFooterHidden","onFooterClick","setIsFooterHidden","photo","getMessagePhoto","getMessageVideo","webPagePhoto","getMessageWebPagePhoto","webPageVideo","getMessageWebPageVideo","isDocumentPhoto","isMessageDocumentPhoto","isDocumentVideo","isMessageDocumentVideo","isPhoto","isFromSharedMedia","isFromSearch","isGhostAnimation","getMediaHash","isFull","photos","getChatAvatarHash","pictogramBlobUrl","useMedia","ApiMediaFormat","previewMediaHash","previewBlobUrl","fullMediaBlobUrl","getMessageMediaFormat","localBlobUrl","blobUrl","bestImageData","thumbDataUri","getMessageMediaThumbDataUri","videoSize","getMessageFileSize","dimensions","getMessageDocument","mediaSize","getPhotoFullDimensions","getVideoDimensions","AVATAR_FULL_DIMENSIONS","renderPhoto","calculateMediaViewerDimensions","textParts","renderMessageText","hasFooter","onContextMenu","imageSize","canDrag","Spinner","renderVideoPreview","alt","ANIMATION_DURATION","cancelAnimation","SwipeDirection","getMessageId","selectMessage","rest","containerRef","activeSlideRef","transformRef","x","y","scale","swipeDirectionRef","isActiveRef","activeMessageId","setActiveMessageId","setTransform","setIsActive","debounceSetMessage","useDebounce","debounceSwipeDirection","debounceActive","handleToggleFooterVisibility","isFooter","innerHeight","pageY","pageX","innerWidth","useTimeout","lastTransform","lastDragOffset","lastZoomCenter","panDelta","initialContentRect","content","lastGestureTime","Date","now","setLastGestureTime","debounce","changeSlide","direction","mId","offset","animateNumber","from","to","timing","timingFunctions","onUpdate","isNotPassive","excludedClosestSelector","checkIfControlTarget","arePropsShallowEqual","event","captureEvent","dragOffsetX","dragOffsetY","touches","IOS_SCREEN_EDGE_THRESHOLD","absOffsetX","abs","absOffsetY","h","Vertical","Horizontal","onZoom","zoomFactor","initialCenterX","initialCenterY","currentCenterX","currentCenterY","MAX_ZOOM","scaleFactor","scaledCenterX","scaledCenterY","scaleOffsetX","scaleOffsetY","centerX","centerY","absX","absY","boundaries","s1","x1","y1","k","Vx","Vy","minOffsetX","maxOffsetX","right","minOffsetY","top","maxOffsetY","bottom","dirX","nextMessageId","previousMessageId","offsetX","offsetY","getAnimationStyle","checkIfInsideSelector","selector","matches","INITIAL_MATRIX","SCALE_VALUES","ZOOM_SAFE_AREA","children","noWrap","canPan","zoomLevel","panDeltaX","panDeltaY","onPan","tunedZoomLevel","isDragging","setIsDragging","dragData","setDragData","dx","dy","matrixData","setMatrixData","panWrapperRef","panContainerRef","newZoomLevel","newPandx","newPandy","newMatrixData","areSortedArraysEqual","oldScale","wrapper","image","wrapperRect","imageRect","newImgWidth","newImgHeight","newImgX","newImgY","calculateSafeZoneOnZoom","transform","toString","onMouseDown","newDragData","onMouseUp","deltaX","deltaY","getNewMatrixData","sender","isUserId","selectSender","closeMediaViewer","focusMessage","toggleChatInfo","handleFocusMessage","forceSyncOnIOs","senderTitle","getSenderTitle","Avatar","user","chat","renderText","formatMediaDateTime","date","Transition","isShown","onChangeZoom","prevIsShown","usePrevious","inputRef","setZoomLevel","handleZoomOut","handleZoomIn","step","type","Number","settings","byKey","chatMessages","collectionIds","selectScheduledMessages","selectChatMessages","selectOutlyingIds","selectListedIds","currentSearch","selectCurrentMediaSearch","foundIds","resultsByType","media","openMediaViewer","openForwardMenu","singleMessageId","messageIds","getChatMediaMessageIds","selectedMediaMessageIndex","indexOf","isFirst","isLast","animationKey","prevSenderId","slideAnimation","headerAnimation","canPanZoomWrap","setCanPanZoomWrap","setIsZoomed","setPanDelta","getMessageFileName","toggle","mql","matchMedia","MEDIA_VIEWER_MEDIA_QUERY","addListener","removeListener","prevMessage","prevOrigin","prevAvatarOwner","prevBestImageData","dispatchHeavyAnimationEvent","ANIMATION_END_DELAY","fromImage","windowWidth","windowSize","availableWidth","availableHeight","getMediaViewerAvailableDimensions","toWidth","toHeight","calculateDimensions","toLeft","toTop","topOffsetRem","getTopOffset","fromTop","fromLeft","fromWidth","fromHeight","uncovered","realWidth","realHeight","srcWidth","srcHeight","uncover","fromTranslateX","fromTranslateY","fromScaleX","fromScaleY","requestAnimationFrame","clearShape","contains","removeChild","animateOpening","toImage","getElementById","targetTop","el","display","rect","windowHeight","isElementInViewport","shouldFadeOut","existingGhost","getElementsByClassName","transition","transformOrigin","opacity","animateClosing","timer","closeZoom","handleZoomToggle","handleZoomValue","level","canCloseZoom","close","handleFooterClick","handleForward","fromChatId","forceOnHeavyAnimation","captureEscKeyListener","stopCurrentAudio","fromId","index","handlePan","useHistoryBack","handleKeyDown","shouldCloseOnVideo","ShowTransition","isRtl","activeKey","name","currentUserId","chatOrUserIds","filterRef","filter","filterPlaceholder","loadMore","onFilterChange","onSelectChatOrUser","onCloseAnimationEnd","viewportIds","getMore","useInfiniteScroll","resetFilter","useInputFocusOnOpen","handleFilterChange","useKeyboardListNavigation","modalHeader","InputText","onKeyDown","placeholder","viewportOffset","Modal","header","InfiniteScroll","items","onLoadMore","withAbsolutePositioning","maxHeight","CHAT_HEIGHT_PX","i","ListItem","PrivateChatInfo","status","userId","GroupChatInfo","Loading","chats","byId","chatsById","listIds","orderedPinnedIds","activeListIds","active","archivedListIds","archived","pinnedIds","contactIds","contactList","userIds","setForwardChatId","exitForwardMode","setFilter","markIsShown","unmarkIsShown","chatAndContactIds","priorityIds","unique","chatIds","getCanPostInChat","MAIN_THREAD_ID","usersById","getGlobal","users","sortChatIds","filterChatsByName","filterUsersByName","handleSelectUser","renderingChatAndContactIds","useCurrentOrPrev","getErrorHeader","error","isSlowMode","hasErrorKey","pick","dialogs","dismissDialog","acceptInviteConfirmation","sendMessage","showNotification","isModalOpen","openModal","closeModal","dialog","contactRequest","invite","hash","title","about","participantsCount","isChannel","isRequestNeeded","participantsText","joinText","requestToJoinText","renderInviteHeader","isText","renderInvite","contact","getReadableErrorText","notifications","dismissNotification","localId","Notification","onDismiss","toggleSafeLinkModal","handleOpen","open","ensureProtocol","handleDismiss","renderingUrl","ConfirmDialog","confirmLabel","confirmHandler","MAX_SAFE_DATE","WEEKDAY_LETTERS","isDisabledDay","year","month","day","minDate","maxDate","selectedDay","fixedMinDate","getDayStart","fixedMaxDate","formatInputTime","String","padStart","formatDay","selectedAt","minAt","maxAt","isFutureMode","isPastMode","withTimePicker","submitButtonLabel","secondButtonLabel","onSubmit","onSecondButtonClick","passedSelectedDate","prevIsOpen","isTimeInputFocused","markTimeInputAsFocused","unmarkTimeInputAsFocused","selectedDate","setSelectedDate","currentMonthAndYear","setCurrentMonthAndYear","getFullYear","getMonth","selectedHours","setSelectedHours","getHours","selectedMinutes","setSelectedMinutes","getMinutes","getDate","currentYear","currentMonth","getTime","newSelectedDate","shouldDisableNextMonth","shouldDisablePrevMonth","prevMonthGrid","currentMonthGrid","nextMonthGrid","setDate","setMonth","setFullYear","firstDay","getDay","totalDaysInPrevMonth","push","gridDate","lastRowDaysCount","buildCalendarGrid","submitLabel","formatDateToString","code","formatTime","formatSubmitLabel","handleSubmit","handleChangeHours","replace","hours","setHours","hoursStr","handleChangeMinutes","minutes","setMinutes","minutesStr","d","dateCopy","role","tabIndex","handleDateSelect","inputMode","onFocus","onBlur","historyCalendarSelectedAt","searchMessagesByDate","closeHistoryCalendar","handleJumpToDate","timestamp","valueOf","userStatus","selectUserStatus","serverTimeOffset","phoneCodeList","countryList","phoneCodes","isByPhoneNumber","updateContact","importContact","closeNewContactDialog","renderingUser","renderingIsByPhoneNumber","firstName","setFirstName","lastName","setLastName","phone","setPhone","phoneNumber","shouldSharePhoneNumber","setShouldSharePhoneNumber","canBeSubmitted","focus","handleFirstNameChange","handlePhoneChange","formatPhoneNumberWithCode","handleLastNameChange","handleClose","getUserStatus","label","Checkbox","checked","onCheck","isSchedule","selectCurrentMessageList","canDeleteForAll","selectAllowedMessageActions","contactName","getUserFirstOrLastName","getPrivateChatUserId","willDeleteForCurrentUserOnly","isChatBasicGroup","willDeleteForAll","isChatSuperGroup","album","deleteMessages","deleteScheduledMessages","handleDeleteMessageForAll","messages","shouldDeleteForAll","handleDeleteMessageForSelf","onEnter","isPrivateChat","isChatWithSelf","selectIsChatWithSelf","isChatChannel","isGroup","isSuperGroup","canPinForAll","pinMessage","handlePinMessageForAll","isUnpin","handlePinMessage","isOneSide","isSilent","pinnedMessagesCount","onUnpin","selectedMessageIds","selectedMessages","selectCanDeleteSelectedMessages","selectCurrentChat","exitMessageSelectMode","reportMessages","selectedReason","setSelectedReason","description","setDescription","handleReport","reason","handleSelectReason","handleDescriptionChange","REPORT_OPTIONS","RadioGroup","options","selected","messageListType","canDelete","canReport","selectCanReportSelectedMessages","canDownload","selectCanDownloadSelectedMessages","hasProtectedMessage","selectHasProtectedMessage","selectedMessagesCount","selectSelectedMessagesCount","canDeleteMessages","canReportMessages","canDownloadMessages","canPost","openForwardMenuForSelectedMessages","downloadSelectedMessages","copySelectedMessages","isDeleteModalOpen","openDeleteModal","closeDeleteModal","isReportModalOpen","openReportModal","closeReportModal","handleCopy","IS_MAC_OS","metaKey","ctrlKey","getKeyFromEvent","useCopySelectedMessages","captureKeyboardListeners","onBackspace","onDelete","onEsc","handleDownload","prevSelectedMessagesCount","renderingSelectedMessagesCount","formattedMessagesCount","renderButton","destructive","seenByModal","memberIds","seenByUserIds","openChat","closeSeenByModal","handleClick","renderingMemberIds","noStatusOrTyping","reactorModal","reactions","reactors","loadReactors","closeReactorListModal","isClosing","startClosing","stopClosing","chosenTab","setChosenTab","canShowFilters","count","results","chatIdRef","handleCloseAnimationEnd","handleLoadMore","allReactions","l","reaction","concat","nextOffset","LoadMoreDirection","formatIntegerCompact","find","ReactionStaticEmoji","fullName","getUserFullName","activeEmojiInteraction","animatedEffect","selectAnimatedEmojiEffect","effectAnimationId","localEffectAnimation","keys","ANIMATED_STICKERS_PATHS","stopActiveEmojiInteraction","isHiding","startHiding","isPlaying","startPlaying","stop","handleCancelAnimation","dispatchHeavyAnimationStop","effectAnimationData","localEffectAnimationData","setLocalEffectAnimationData","getAnimationData","then","data","startSize","isReversed","AnimatedSticker","animationData","play","quality","IS_ANDROID","noLoop","onLoad","onSelect","buttonRef","activeElement","privateChatUserId","isPinned","selectIsChatPinned","selectIsChatMuted","selectNotifySettings","selectNotifyExceptions","canChangeFolder","chatFolders","orderedIds","withUsername","isChatFolderModalOpen","openChatFolderModal","closeChatFolderModal","contextActions","useChatContextActions","handleDelete","handleChatFolderChange","useSelectWithEnter","avatarSize","DeleteChatModal","runThrottled","cb","topUserIds","topPeers","recentlyFoundChatIds","globalSearch","onReset","loadTopUsers","loadContactList","addRecentlyFoundChatId","clearRecentlyFoundChats","topUsersRef","useHorizontalScroll","shouldReplaceHistory","lastSyncTime","privateChatUser","searchQuery","mediaThumbnail","mediaBlobUrl","isRoundVideo","getMessageRoundVideo","isSavedMessages","isSelf","getChatTitle","isVerified","VerifiedIcon","Link","formatPastTimeShort","renderMessageSummary","renderSummary","searchDate","suggestions","match","suggestion","currentDate","latestYear","getSuggestionsFromDate","localContactIds","fetchingStatus","globalResults","localResults","globalChatIds","globalUserIds","localChatIds","localUserIds","byChatId","globalMessagesByChatId","dateSearchQuery","onSearchDateSelect","searchMessagesGlobal","setGlobalSearchChatId","shouldShowMoreLocal","setShouldShowMoreLocal","shouldShowMoreGlobal","setShouldShowMoreGlobal","query","handleChatClick","handlePickerItemClick","startsWith","MEMO_EMPTY_ARRAY","contactIdsWithMe","foundContactIds","foundMessages","split","sort","a","b","handleClickShowMoreLocal","handleClickShowMoreGlobal","nothingFound","noScrollRestoreOnTop","noFastList","NothingFound","PickerSelectedItem","chatOrUserId","clickArg","createMapStateToProps","currentType","isVoice","activeDownloads","theme","selectTheme","isLoading","searchChatId","isChatProtected","CURRENT_TYPE","observe","observeIntersectionForMedia","useIntersectionObserver","rootRef","throttleMs","handleSelectMedia","canRenderContents","useAsyncRendering","SLIDE_TRANSITION_DURATION","isMediaGrid","isMessageList","itemSelector","Media","idPrefix","observeIntersection","handleMessageFocus","shouldDrawDateDivider","toYearMonth","formatMonthAndYear","WebLink","getSenderName","onMessageClick","Document","withDate","datetime","smaller","onDateClick","openAudioPlayer","handlePlayAudio","Audio","AudioOrigin","TABS","GlobalSearchContent","CHAT_TABS","slice","TRANSITION_RENDER_COUNT","currentContent","setGlobalSearchContent","setGlobalSearchDate","activeTab","setActiveTab","parseDateString","handleSwitchTab","tab","handleSearchDateSelect","TabList","tabs","onSwitchTab","renderCount","INITIAL_STATE","currentPassword","password","hint","email","twoFaReducer","state","action","payload","currentScreen","editedFolderId","onSaveFilter","onScreenSelect","signOut","deleteChatFolder","isSignOutDialogOpen","setIsSignOutDialogOpen","isDeleteFolderDialogOpen","setIsDeleteFolderDialogOpen","openSignOutConfirmation","closeSignOutConfirmation","openDeleteFolderConfirmation","closeDeleteFolderConfirmation","handleSignOutMessage","handleDeleteFolderMessage","SettingsMenuButton","SettingsScreens","renderHeaderContent","confirmIsDestructive","sessionCount","activeSessions","currentUser","loadProfilePhotos","loadAuthorizations","profileId","ProfileInfo","forceShowSelf","ChatExtra","langName","LINK_PREFIX","LINK_PREFIX_REGEX","USERNAME_REGEX","runDebouncedForCheckUsername","currentUsername","asLink","isUsernameAvailable","checkUsername","username","setUsername","langPrefix","usernameSuccess","usernameError","test","handleUsernameChange","newUsername","trim","isValid","isUsernameValid","success","readOnly","ERROR_FIRST_NAME_MISSING","ERROR_BIO_TOO_LONG","profileEdit","currentFirstName","currentLastName","fullInfo","bio","currentBio","currentAvatarHash","loadCurrentUser","updateProfile","isUsernameTouched","setIsUsernameTouched","isProfileFieldsTouched","setIsProfileFieldsTouched","setError","setPhoto","setBio","currentAvatarBlobUrl","ProfileEditProgress","isUsernameError","isSaveButtonShown","handlePhotoChange","newPhoto","handleBioChange","handleProfileSave","trimmedFirstName","trimmedLastName","trimmedBio","AvatarEditable","UsernameInput","FloatingActionButton","canAutoLoadPhotoFromContacts","canAutoLoadPhotoInPrivateChats","canAutoLoadPhotoInGroups","canAutoLoadPhotoInChannels","canAutoLoadVideoFromContacts","canAutoLoadVideoInPrivateChats","canAutoLoadVideoInGroups","canAutoLoadVideoInChannels","canAutoLoadFileFromContacts","canAutoLoadFileInPrivateChats","canAutoLoadFileInGroups","canAutoLoadFileInChannels","canAutoPlayGifs","canAutoPlayVideos","autoLoadFileMaxSizeMb","setSettingOption","renderFileSizeCallback","AUTODOWNLOAD_FILESIZE_MB_LIMITS","handleFileSizeChange","handleCanAutoPlayGifsChange","handleCanAutoPlayVideosChange","renderAutoDownloadBlock","canAutoLoadFromContacts","canAutoLoadInPrivateChats","canAutoLoadInGroups","canAutoLoadInChannels","isChecked","renderValue","renderContentSizeSlider","runThrottledForLoadRecommended","orderedFolderIds","foldersById","recommended","recommendedChatFolders","onCreateFolder","onEditFolder","loadRecommendedChatFolders","addChatFolder","showDialog","setAnimationData","isAnimationLoaded","setIsAnimationLoaded","handleAnimationLoad","handleCreateFolder","chatsCountByFolderId","useFolderManagerForChatsCount","userFolders","folder","subtitle","getFolderDescriptionText","handleCreateFolderFromRecommended","STICKER_SIZE_FOLDER_SETTINGS","pill","fluid","narrow","multiline","itemName","itemPluralName","ERROR_NO_TITLE","ERROR_NO_CHATS","loadedActiveChatIds","loadedArchivedChatIds","dispatch","onAddIncludedChats","onAddExcludedChats","onBack","editChatFolder","isIncludedChatsListExpanded","setIsIncludedChatsListExpanded","isExcludedChatsListExpanded","setIsExcludedChatsListExpanded","selectedChatIds","includedChatIds","selectedChatTypes","includedChatTypes","selectChatFilters","excludedChatIds","excludedChatTypes","folderId","visibleIncludedChatIds","visibleExcludedChatIds","allLoadedChatsSet","Set","loadedIncludedChatIds","findIntersectionWithSet","loadedExcludedChatIds","mode","handleChange","folderUpdate","renderChats","visibleChatIds","isExpanded","leftChatsCount","clickHandler","chatType","INCLUDED_CHAT_TYPES","typeKey","EXCLUDED_CHAT_TYPES","inactive","renderChatType","isTouched","selectedIds","filterValue","onSelectedIdsChange","onSelectedChatTypesChange","chatTypes","shouldMinimize","hasMaxChats","handleItemClick","newSelectedIds","splice","handleChatTypeClick","newSelectedChatTypes","selectedType","isMinimized","canClose","isSelected","withChatType","chatFilter","folderAllOrderedIds","useFolderManagerForOrderedIds","ALL_FOLDER_ID","folderArchivedOrderedIds","ARCHIVED_FOLDER_ID","displayedIds","newFilter","handleSelectedIdsChange","ids","includeFilters","excludeFilters","handleSelectedChatTypesChange","newFilters","forEach","shownScreen","handleReset","handleEditFolder","handleAddIncludedChats","handleAddExcludedChats","STICKER_SIZE_PICKER_HEADER","stickerSet","isIntersecting","useIsIntersecting","mediaHash","lottieData","useMediaTransition","firstLetters","getFirstLetters","hasThumbnail","isVideos","IS_WEBM_SUPPORTED","stickers","firstSticker","isLottie","STICKER_SIZE_GENERAL_SETTINGS","StickerButton","sticker","noContextMenu","ANIMATION_LEVEL_OPTIONS","TIME_FORMAT_OPTIONS","shouldUseSystemTheme","stickerSetIds","added","setIds","stickerSetsById","setsById","defaultReaction","appConfig","messageTextSize","messageSendKeyCombo","shouldSuggestStickers","shouldLoopStickers","timeFormat","stickerSettingsRef","observeIntersectionForCovers","setSticker","APPEARANCE_THEME_OPTIONS","KEYBOARD_SEND_OPTIONS","subLabel","handleAnimationLevelChange","newLevel","_","handleMessageTextSizeChange","newSize","documentElement","setProperty","setAttribute","handleAppearanceThemeChange","newTheme","getSystemTheme","switchTheme","ANIMATION_LEVEL_MAX","handleTimeFormatChange","newTimeFormat","wasTimeFormatSetManually","setTimeFormat","handleStickerSetClick","handleMessageSendComboChange","newCombo","handleSuggestStickersChange","newValue","handleShouldLoopStickersChange","stickerSets","installedDate","fromSticker","hex2rgb","param","parseInt","substring","rgb2hex","p0","p1","p2","rgb2hsb","r","g","s","v","hsb2rgb","f","p","q","t","getPatternColor","rgbColor","hue","saturation","wallpaper","slug","localMediaHash","thumbRef","useCanvasBlur","thumbnail","isLoadAllowed","setIsLoadAllowed","fullMedia","wasLoadDisabled","UPLOADING_WALLPAPER_SLUG","cacheKeyRef","handleSelect","blob","fetchBlob","cacheApi","save","CUSTOM_BG_CACHE_NAME","isAllowed","background","isBlurred","themes","loadedWallpapers","loadWallpapers","uploadWallpaper","setThemeSettings","themeRef","handleFileSelect","files","handleUploadWallpaper","openSystemFilesDialog","handleSetColor","handleResetToDefault","backgroundColor","patternColor","DARK_THEME_PATTERN_COLOR","DEFAULT_PATTERN_COLOR","handleWallPaperSelect","currentWallpaper","async","defaultRGB","rgb","context","preloadImage","naturalHeight","naturalWidth","offsetWidth","drawImage","getImageData","blockSize","getAverageColor","handleWallPaperBlurChange","isUploading","DEFAULT_HSB","PREDEFINED_COLORS","hsb2positions","hsb","rects","colorPosition","colorRect","huePosition","hueRect","positions2hsb","colorPickerRef","huePickerRef","isFirstRunRef","setHsb","getInitialHsb","hsbRef","markIsDragging","unmarkIsDragging","rgbInput","setRgbInput","hexInput","setHexInput","rectsRef","colorCtxRef","offsetLeft","handleColorDrag","handleHueDrag","selectorToPreventScroll","withCursor","hex","hueHex","w","ctx","imgData","createImageData","pixels","col","perY","st","ed","perX","putImageData","drawColor","drawHue","handleRgbChange","rgbValue","channel","handleHexChange","hexValue","handlePredefinedColorClick","dataset","hasPrivateChatsNotifications","hasPrivateChatsMessagePreview","hasGroupNotifications","hasGroupMessagePreview","hasBroadcastNotifications","hasBroadcastMessagePreview","hasContactJoinedNotifications","hasWebNotifications","hasPushNotifications","notificationSoundVolume","loadNotificationSettings","updateContactSignUpNotification","updateNotificationSettings","updateWebNotificationSettings","runDebounced","handleSettingsChange","peerType","setting","currentIsSilent","currentShouldShowPreviews","shouldShowPreviews","handleWebNotificationsChange","handlePushNotificationsChange","handlePrivateChatsNotificationsChange","handlePrivateChatsPreviewChange","handleGroupsNotificationsChange","handleGroupsPreviewChange","handleChannelsNotificationsChange","handleChannelsPreviewChange","handleContactNotificationChange","playNotifySound","hasPassword","isSensitiveEnabled","canChangeSensitive","privacy","blocked","blockedCount","totalCount","visibilityPrivacyPhoneNumber","visibility","visibilityPrivacyLastSeen","lastSeen","visibilityPrivacyProfilePhoto","profilePhoto","visibilityPrivacyForwarding","forwards","visibilityPrivacyGroupChats","chatInvite","loadPrivacySettings","loadBlockedContacts","loadContentSettings","updateContentSettings","getVisibilityValue","languages","language","loadLanguages","selectedLanguage","setSelectedLanguage","markIsLoading","unmarkIsLoading","langCode","setLanguage","currentLangCode","navigator","toLowerCase","shortLangCode","substr","nativeName","buildOptions","loadingOption","getPrivacyKey","screen","privacySettings","allowUserIds","allowChatIds","blockUserIds","blockChatIds","setPrivacyVisibility","visibilityOptions","exceptionLists","shouldShowDenied","shouldShowAllowed","privacyKey","headerText","descriptionText","allowedContactsScreen","deniedContactsScreen","allowedCount","reduce","result","membersCount","blockCount","handleVisibilityChange","getSessionIcon","session","platform","device","deviceModel","systemVersion","getLocation","region","country","terminateAuthorization","terminateAllAuthorizations","isConfirmTerminateAllDialogOpen","openConfirmTerminateAllDialog","closeConfirmTerminateAllDialog","handleTerminateSessionClick","handleTerminateAllSessions","currentSession","isCurrent","otherSessions","appName","appVersion","ip","sessions","handler","dateActive","blockedIds","userSearch","setUserSearchQuery","blockContact","filteredContactIds","availableContactIds","contactId","firstId","secondId","secondName","localeCompare","handleRemoveUser","accessHash","chatsByIds","usersByIds","unblockContact","isBlockUserModalOpen","openBlockUserModal","closeBlockUserModal","handleUnblockClick","isPrivate","renderContact","animatedEmoji","selectAnimatedEmoji","AnimatedEmoji","expectedPassword","clearError","validationError","setValidationError","shouldShowPassword","setShouldShowPassword","newPassword","handleClearError","PasswordMonkey","isBig","isPasswordVisible","PasswordForm","onChangePasswordVisibility","onStart","FOCUS_DELAY_TIMEOUT_MS","shouldConfirm","setValue","isConfirmShown","markIsConfirmShown","unmarkIsConfirmShown","handleInputChange","handleSkip","handleSkipConfirm","codeLength","twoFaSettings","waitingEmailCodeLength","updatePassword","checkPassword","clearTwoFaError","updateRecoveryEmail","provideTwoFaEmailCode","clearPassword","handleStartWizard","handleNewPassword","handleNewPasswordConfirm","handleNewPasswordHint","handleNewPasswordEmail","onSuccess","handleChangePasswordCurrent","handleChangePasswordNew","handleChangePasswordConfirm","handleChangePasswordHint","handleTurnOff","handleRecoveryEmailCurrentPassword","handleRecoveryEmail","handleEmailCode","getCurrentPrivacySettings","isAllowList","setPrivacySettings","selectedContactIds","setSearchQuery","isSubmitShown","setIsSubmitShown","newSelectedContactIds","setNewSelectedContactIds","handleSelectedContactIdsChange","contactsIds","Picker","itemIds","searchInputId","availableReactions","selectedReaction","setDefaultReaction","isInactive","TWO_FA_SCREENS","FOLDERS_SCREENS","PRIVACY_SCREENS","PRIVACY_PHONE_NUMBER_SCREENS","PRIVACY_LAST_SEEN_PHONE_SCREENS","PRIVACY_PROFILE_PHOTO_SCREENS","PRIVACY_FORWARDING_SCREENS","PRIVACY_GROUP_CHATS_SCREENS","foldersState","foldersDispatch","shouldSkipTransition","twoFaState","twoFaDispatch","useReducer","handleSaveFilter","renderCurrentSection","isScreenActive","isFrom","currentKey","privacyAllowScreens","isTwoFaScreen","isFoldersScreen","isPrivacyScreen","values","SettingsGeneralBackgroundColor","renderCurrentSectionContent","LAYERS_ANIMATION_NAME","statusesById","userStatusesById","openNewContactDialog","filteredIds","sortUserIds","isSearching","selectedMemberIds","onSelectedMemberIdsChange","onNextStep","setGlobalSearchQuery","canBeInvitedToGroup","isUserBot","handleNextStep","creationProgress","creationError","chatCreation","createGroupChat","createChannel","setTitle","setAbout","chatTitleEmptyError","channelTitleEmptyError","chatTooManyUsersError","ChatCreationProgress","handleTitleChange","handleCreateGroup","handleCreateChannel","renderedError","RENDER_COUNT","LeftColumnContent","onContentChange","newChatMemberIds","setNewChatMemberIds","isStepActive","ChatList","folderType","folderOrderedIds","editChatFolders","initialSelectedFolderIds","pinnedChatIds","selectedFolderIds","setSelectedFolderIds","folders","idsToRemove","idsToAdd","CheckboxGroup","getCopyLabel","hasSelection","scrollLockEl","IGNORED_KEYS","Down","ArrowDown","Up","ArrowUp","Left","ArrowLeft","Right","ArrowRight","PageUp","PageDown","End","Home","Tab","getTouchY","changedTouches","clientY","scrollHeight","preventDefaultForScrollKeys","HTMLElement","tagName","getAttribute","isTextBox","disableScrolling","_excludedClosestSelector","passive","onkeydown","enableScrolling","REACTION_SIZE","IS_COMPACT_MENU","cn","createClassNameBuilder","previewIndex","onSendReaction","isReady","selectAnimation","isActivated","activate","deactivate","markAnimationLoaded","shouldRenderAnimated","animatedClassNames","shouldRenderStatic","staticClassNames","onMouseEnter","enabledReactions","itemsScrollRef","isHorizontalScrollEnabled","enableHorizontalScroll","handleWheel","onWheelCapture","onTouchMove","anchor","canSendNow","canReschedule","canReply","canEdit","canPin","canUnpin","canForward","canFaveSticker","canUnfaveSticker","canCopy","canCopyLink","canSelect","canSaveGif","canShowSeenBy","canShowReactionsCount","canRemoveReaction","canShowReactionList","seenByRecentUsers","onReply","onEdit","onPin","onReport","onFaveSticker","onUnfaveSticker","onSend","onReschedule","onCopyLink","onDownload","onSaveGif","onShowSeenBy","onShowReactors","onCopyMessages","menuRef","scrollableRef","copyOptions","afterEffect","getMessageText","canImageBeCopied","hasMessageLocalBlobUrl","CLIPBOARD_ITEM_SUPPORTED","selection","getSelection","Promise","resolve","mediaLoader","copyImageToClipboard","anchorNode","parentNode","getMessageIdsForSelectedText","clipboardText","getMessageTextWithSpoilers","copyTextToClipboard","getMessageCopyOptions","noReactions","withReactions","markIsReady","unmarkIsReady","getTriggerElement","getRootElement","getMenuElement","getLayout","extraHeightAudioPlayer","pinnedElement","extraHeightPinned","extraPaddingX","extraTopPadding","marginSides","extraMarginTop","handleRemoveReaction","transformOriginX","transformOriginY","menuStyle","withScroll","useContextMenuPosition","bubbleStyle","option","START_SIZE","selectActiveDownloadIds","seenByExpiresAt","seenByMaxChatMembers","noOptions","isScheduled","isLocal","isMessageLocal","isChatGroup","isOwnMessage","isAction","isActionMessage","areReactionsEmpty","canSeeList","some","isChosen","isForbidden","hasFullInfo","SERVICE_NOTIFICATIONS_USER_ID","chatUsername","setReplyingToId","setEditingId","faveSticker","unfaveSticker","toggleMessageSelection","sendScheduledMessages","rescheduleMessage","loadSeenBy","openSeenByModal","sendReaction","openReactorListModal","loadFullChat","copyMessagesByIds","saveGif","isMenuOpen","setIsMenuOpen","setIsDeleteModalOpen","setIsReportModalOpen","isPinModalOpen","setIsPinModalOpen","isCalendarOpen","openCalendar","closeCalendar","recentReactions","msg","closeMenu","closePinModal","handleCloseCalendar","handleReply","handleEdit","handlePin","handleUnpin","handleFaveSticker","handleUnfaveSticker","handleSelectMessage","params","childMessageIds","withShift","handleScheduledMessageSend","handleOpenCalendar","handleOpenSeenByModal","handleOpenReactorListModal","handleRescheduleMessage","scheduledAt","handleCopyMessages","handleCopyLink","handleSaveGif","gif","handleSendReaction","reportMessageIds","scheduledMaxDate","getDayStartAt","stickerSetShortName","currentMessageList","sendOptions","getAllowedAttachmentOptions","canSendStickers","canScheduleUntilOnline","selectCanScheduleUntilOnline","shouldSchedule","selectShouldSchedule","selectStickerSet","stickerSetId","selectStickerSetByShortName","loadStickers","toggleStickerSet","requestCalendar","calendar","useSchedule","stickerSetAccessHash","isScheduleRequested","isPreloadedGlobally","handleButtonClick","hasCloseButton","STICKER_SIZE_MODAL","isRestricted","canAddContact","getCanAddContact","canDeleteChat","getCanDeleteChat","hasLinkedChat","linkedChatId","withExtraActions","canStartBot","canRestartBot","canSubscribe","canSearch","canCall","canMute","canViewStatistics","canLeave","canEnterVoiceChat","canCreateVoiceChat","onSubscribeChannel","onSearchClick","updateChatMutedState","enterMessageSelectMode","sendBotCommand","restartBot","joinGroupCall","createGroupCall","openLinkedChat","openAddContactDialog","openCallFallbackConfirm","toggleStatistics","handleStartBot","command","handleRestartBot","handleToggleMuteClick","handleEnterVoiceChatClick","handleLinkedChatClick","handleAddContactClick","handleSubscribe","handleCall","handleSearch","handleStatisticsClick","handleSelectMessages","Portal","runDebouncedForSearch","selectCurrentTextSearch","isHistoryCalendarOpen","setLocalTextSearchQuery","searchTextMessagesLocal","closeLocalTextSearch","openHistoryCalendar","focusedIndex","setFocusedIndex","visualViewport","mainEl","pageTop","Array","input","div","contentEditable","blur","handleMessageSearchQueryChange","newQuery","handleUp","newFocusIndex","handleDown","SearchInput","findInViewport","selectorOrElements","margin","isDense","shouldContainBottom","isHorizontal","viewportY1","viewportY2","allElements","visibleIndexes","isFound","y2","setTooltipItemVisible","first","isFullyVisible","fastSmoothScroll","useKeyboardNavigation","shouldSaveSelectionOnUpdateItems","shouldRemoveSelectionOnReset","noArrowNavigation","shouldSelectOnTab","selectedItemIndex","setSelectedItemIndex","getSelectedIndex","newIndex","cycleRestrict","handleArrowKey","handleItemSelect","item","isSelectionOutOfRange","onUp","onDown","onLeft","onRight","onTab","onInsertUserName","filteredUsers","handleUserSelect","forceFocus","handleSelectMention","member","selectedMentionIndex","prevChatMembers","renderedChatMembers","attachments","caption","canShowCustomSendMenu","groupChatMembers","recentEmojis","baseEmojiKeywords","emojiKeywords","addRecentEmoji","onCaptionUpdate","onFileAppend","onClear","onSendSilent","onSendScheduled","captionRef","useStateRef","mainButtonRef","hideTimeoutRef","prevAttachments","renderingAttachments","isHovered","markHovered","unmarkHovered","isQuick","every","quick","isMentionTooltipOpen","closeMentionTooltip","insertMention","mentionFilteredUsers","useMentionTooltip","EDITABLE_INPUT_MODAL_ID","isEmojiTooltipOpen","closeEmojiTooltip","filteredEmojis","insertEmoji","useEmojiTooltip","isContextMenuOpen","isCustomSendMenuOpen","handleContextMenu","handleContextMenuClose","handleContextMenuHide","useContextMenuHandlers","sendAttachments","handleFilesDrop","dataTransfer","newFiles","file","CONTENT_TYPES_WITH_PREVIEW","areAllPhotos","SUPPORTED_IMAGE_CONTENT_TYPES","mimeType","areAllVideos","SUPPORTED_VIDEO_CONTENT_TYPES","areAllAudios","SUPPORTED_AUDIO_CONTENT_TYPES","isOpenToBottom","onSendSchedule","renderHeader","onDragEnter","onDrop","onDragOver","onDragLeave","relatedTarget","toTarget","fromTarget","attachment","File","filename","extension","getFileExtension","previewData","emojis","onEmojiSelect","MessageInput","isAttachmentModalInput","html","editableInputId","canAutoFocus","shouldBeAnonimous","questionInputRef","optionsListRef","solutionRef","question","setQuestion","setOptions","isAnonymous","setIsAnonymous","isMultipleAnswers","setIsMultipleAnswers","isQuizMode","setIsQuizMode","solution","setSolution","correctOption","setCorrectOption","hasErrors","setHasErrors","focusInput","solutionEl","innerHTML","addNewOption","newOptions","list","scrollTo","behavior","handleCreate","questionTrimmed","optionsTrimmed","o","summary","answers","correct","isPublic","multipleChoice","quiz","entities","parseMessageInput","correctAnswers","solutionEntities","updateOption","removeOption","handleCorrectOptionChange","handleIsAnonymousChange","handleMultipleAnswersChange","handleQuizModeChange","handleKeyPress","keyCode","handleQuestionChange","getQuestionError","getOptionsError","renderOptions","onKeyPress","renderQuizNoOptionError","hidden","emoji","native","names","IS_EMOJI_SUPPORTED","loading","category","allEmojis","useOnIntersect","emojisPerRow","ceil","displayedEmoji","ICONS_BY_CATEGORY","recent","people","nature","foods","activity","places","objects","symbols","flags","categoryIntersections","emojiDataPromise","emojiRawData","emojiData","headerRef","categories","setCategories","setEmojis","activeCategoryIndex","setActiveCategoryIndex","entries","entry","intersectingWithIndexes","newLeft","HEADER_BUTTON_WIDTH","fastSmoothScrollHorizontal","allCategories","themeCategories","unshift","exec","default","uncompressEmoji","ensureEmojiData","selectCategory","categoryEl","handleEmojiSelect","MENU_TRANSITION_DURATION","containerClassName","faded","STICKER_MARGIN","loadAndPlay","favoriteStickers","onStickerSelect","onStickerUnfave","onStickerFave","stickersPerRow","STICKER_SIZE_PICKER","favoriteStickerIdsSet","noAnimate","onUnfaveClick","has","onFaveClick","stickerSetIntersections","favorite","recentStickers","addedSetIds","shouldPlay","loadRecentStickers","addRecentSticker","activeSetIndex","setActiveSetIndex","sendMessageAction","useSendMessageAction","areAddedLoaded","allSets","noPopulatedSets","stickerSetEl","handleStickerSelect","handleStickerUnfave","handleStickerFave","fullClassName","buttonClassName","onUnsaveClick","videoData","shouldRenderVideo","isVideoReady","contextMenuPosition","handleBeforeContextMenu","handleUnsaveClick","handleContextDelete","handleSendQuiet","handleSendScheduled","handleMouseDown","preventMessageInputBlurWithBubbling","preload","savedGifs","gifs","saved","canSendGifs","onGifSelect","loadSavedGifs","debounceMs","shouldUnsave","SymbolMenuTabs","SYMBOL_MENU_TAB_TITLES","SYMBOL_MENU_TAB_ICONS","Emoji","Stickers","GIFs","onRemoveSymbol","onSearchOpen","renderTabButton","handleSearchOpen","isLeftColumnShown","setRecentEmojis","handleMouseEnter","handleMouseLeave","useMouseInside","fastRaf","recentEmojisRef","renderContent","onMouseLeave","noCloseOnBackdrop","noCompact","withAvatar","botCommand","bot","botCommands","handleSendCommand","botId","selectedCommandIndex","prevCommands","renderedCommands","chatBotCommand","forEmoji","clearStickersForEmoji","prevStickers","displayedStickers","listEmojis","usePrevDuringAnimation","handleSelectEmoji","selectedIndex","setItemVisible","thumbUrl","thumbnailDataUrl","decoding","webThumbnail","isForGallery","inlineResult","_gif","STICKER_SIZE_INLINE_BOT_RESULT","isGallery","inlineBotResults","switchPm","onSelectResult","startBot","handleSendPm","startParam","prevInlineBotResults","renderedInlineBotResults","sensitiveArea","inlineBotResult","selectedSendAsId","sendAsIds","saveDefaultSendAs","markMouseInside","sendAsId","selectedSendAsIndex","messagesById","viewportResults","senderUser","senderChat","forwardInfo","isChannelPost","foundResult","isOnTop","preloadBackwards","teactOrderKey","LastMessageMeta","selectShouldLoopStickers","isSomeModalOpen","onModalToggle","isAdded","areStickersLoaded","coverStickerIds","covers","otherStickers","handleAddClick","canRenderStickers","STICKER_SIZE_SEARCH","selectCurrentStickerSearch","resultIds","featured","featuredIds","loadFeaturedStickers","setIsModalOpen","selectCurrentGifSearch","isChatWithBot","selectIsChatWithBot","canPostInChat","searchMoreGifs","setGifSearchQuery","handleGifClick","hasResults","CHANNEL_OVERVIEW","isPercentage","GROUP_OVERVIEW","statistics","period","formatFullDate","row","cell","field","percentage","change","isChangeNegative","renderOverviewItemValue","views","formatDateTimeToString","lovelyChartPromise","LovelyChart","CHANNEL_GRAPHS_TITLES","growthGraph","followersGraph","muteGraph","topHoursGraph","viewsBySourceGraph","newFollowersBySourceGraph","languagesGraph","interactionsGraph","CHANNEL_GRAPHS","GROUP_GRAPHS_TITLES","membersGraph","messagesGraph","actionsGraph","GROUP_GRAPHS","selectStatistics","dcId","statisticsDcId","setIsReady","loadedCharts","loadStatistics","loadStatisticsAsyncGraph","graphs","graphTitles","graph","token","ensureLovelyChart","zoomToken","create","callApi","zoomOutLabel","recentTopMessages","answer","voters","offsets","pollResults","answerVote","totalVoters","loadPollOptionResults","closePollResults","prevVotersCount","votersCount","setIsLoading","areVotersLoaded","limit","shouldResetVoters","handleViewMoreClick","handleMemberClick","leftVotersCount","renderViewMoreButton","total","getMessagePoll","resultsByOption","buildCollectionByKey","management","deleteContact","closeManagement","isDeleteDialogOpen","openDeleteDialog","closeDeleteDialog","isNotificationsEnabled","setIsNotificationsEnabled","ManagementProgress","handleNotificationChange","handleDeleteContact","withFullInfo","GROUP_TITLE_EMPTY","hasLinkedChannel","isBasicGroup","invites","canChangeInfo","isCreator","getHasAdminRight","canBanUsers","canInvite","exportedInvites","availableReactionsCount","togglePreHistoryHidden","updateChat","deleteChat","leaveChannel","deleteChannel","loadExportedChatInvites","loadChatJoinRequests","currentTitle","currentAbout","imageHash","isPublicGroup","isRevoked","handleClickEditType","ManagementScreens","handleClickDiscussion","handleClickReactions","handleClickPermissions","handleClickAdministrators","handleClickInvites","handleClickRequests","handleSetPhoto","handleAboutChange","handleUpdateGroup","trimmedTitle","trimmedAbout","handleClickMembers","handleTogglePreHistory","isPreHistoryHidden","isEnabled","enabledReactionsCount","enabledPermissionsCount","defaultBannedRights","sendStickers","sendGifs","adminsCount","adminMembers","handleDeleteGroup","formatInteger","joinRequests","onChatMemberSelect","updateChatDefaultBannedRights","permissions","setPermissions","havePermissionChanged","setHavePermissionChanged","handleRemovedUsersClick","handleAddExceptionClick","handleExceptionMemberClick","promotedByUserId","handlePermissionChange","getUpdatedPermissionValue","handleSavePermissions","bannedRights","removedUsersCount","kickedMembers","exceptionMembers","members","getMemberExceptions","langKey","getLangKeyForBannedRightKey","translatedString","sendMessages","blocking","sendMedia","sendPolls","embedLinks","inviteUsers","pinMessages","changeInfo","loadMoreMembers","deleteChatMember","usersId","availableMemberIds","acc","isAdmin","isOwner","canDeleteMembers","updateChatMemberBannedRights","isRemoveUserModalOpen","openRemoveUserModal","closeRemoveUserModal","removedMembers","getRemovedBy","kickedByUserId","kickedByUser","getContextActions","CHANNEL_TITLE_EMPTY","isSignaturesShown","toggleSignatures","handleUpdateChannel","handleToggleSignatures","handleClickSubscribers","handleDeleteChannel","selectManagement","checkPublicLink","updatePublicLink","updatePrivateLink","toggleIsProtected","privateLink","inviteLink","privacyType","setPrivacyType","isRevokeConfirmDialogOpen","openRevokeConfirmDialog","closeRevokeConfirmDialog","canUpdate","handleOptionChange","handleForwardingOptionChange","handleSave","handleRevokePrivateLink","langPrefix1","langPrefix2","forwardingOptions","SafeLink","forDiscussionIds","linkedChat","loadGroupsForDiscussion","linkDiscussionGroup","unlinkDiscussionGroup","linkedGroupId","setLinkedGroupId","isConfirmUnlinkGroupDialogOpen","openConfirmUnlinkGroupDialog","closeConfirmUnlinkGroupDialog","isConfirmLinkGroupDialogOpen","openConfirmLinkGroupDialog","closeConfirmLinkGroupDialog","handleUnlinkGroupSessions","channelId","handleLinkGroupSessions","STICKER_SIZE_DISCUSSION_GROUPS","teactFastList","linkedGroup","renderLinkGroupHeader","hasPrivateLink","renderLinkGroupConfirmText","isButtonsInOneRow","isPromotedByCurrentUser","isFormFullyDisabled","selectedChatMemberId","isBanConfirmationDialogOpen","openBanConfirmationDialog","closeBanConfirmationDialog","selectedChatMember","handleBanFromGroup","viewMessages","getControlIsDisabled","handleRecentActionsClick","handleAdminMemberClick","handleAddAdminClick","getMemberStatus","promotedByUser","defaultRights","adminRights","isNewAdmin","selectedUserId","updateChatAdmin","setIsTouched","isDismissConfirmationDialogOpen","openDismissConfirmationDialog","closeDismissConfirmationDialog","customTitle","setCustomTitle","selectedAdminMember","handleDismissAdmin","memberStatus","handleCustomTitleChange","postMessages","editMessages","banUsers","addAdmins","manageCall","anonymous","maxLength","noAdmins","adminIds","shouldUseSearchResults","listedIds","noScrollRestore","memberId","inviteComparator","i1","i2","isPermanent","i1IsPermanent","usage","i1Usage","i1Date","i2IsPermanent","i2Usage","i2Date","revokedInvites","revokedExportedInvites","setEditingExportedInvite","editExportedChatInvite","deleteExportedChatInvite","deleteRevokedExportedChatInvites","setOpenedInviteInfo","isDeleteRevokeAllDialogOpen","openDeleteRevokeAllDialog","closeDeleteRevokeAllDialog","isRevokeDialogOpen","openRevokeDialog","closeRevokeDialog","revokingInvite","setRevokingInvite","deletingInvite","setDeletingInvite","hasDetailedCountdown","expireDate","getServerTime","MILLISECONDS_IN_DAY","useInterval","primaryInvite","primaryInviteLink","link","temporalInvites","revokeInvite","usageLimit","askToRevoke","handleRevoke","handleCreateNewClick","handlePrimaryRevoke","handleDeleteAllRevoked","showInviteInfo","deleteInvite","askToDelete","copyLink","handleCopyPrimaryClicked","prepareUsageText","requested","diff","formatCountdown","prepareContextActions","actions","editInvite","PrimaryLinkMenuButton","STICKER_SIZE_INVITES","secondaryIcon","DEFAULT_USAGE_LIMITS","DEFAULT_EXPIRE_DATE","hour","week","DEFAULT_CUSTOM_EXPIRE_DATE","editingInvite","exportChatInvite","isCalendarOpened","setIsRequestNeeded","customExpireDate","setCustomExpireDate","selectedExpireOption","setSelectedExpireOption","customUsageLimit","setCustomUsageLimit","selectedUsageOption","setSelectedUsageOption","isSubmitBlocked","setIsSubmitBlocked","oldEditingInvite","editingTitle","editingIsRequestNeeded","minSafeDate","handleIsRequestChange","handleCustomUsageLimitChange","handleExpireDateChange","handleSaveClick","n","setChatEnabledReactions","localEnabledReactions","setLocalEnabledReactions","handleSaveReactions","handleReactionChange","newEnabledReactions","inviteInfo","importers","requesters","loadChatInviteImporters","loadChatInviteRequesters","adminId","isExpired","handleCopyClicked","importer","renderImporters","requester","renderRequesters","hideChatJoinRequest","fixedDate","dateString","isToday","formatHumanDate","handleAcceptRequest","isApproved","handleRejectRequest","hideAllChatJoinRequests","isAcceptAllDialogOpen","openAcceptAllDialog","closeAcceptAllDialog","isRejectAllDialogOpen","openRejectAllDialog","closeRejectAllDialog","handleAcceptAllRequests","handleRejectAllRequests","STICKER_SIZE_JOIN_REQUESTS","managementType","selectCurrentManagementType","VISA","MASTERCARD1","MASTERCARD2","CardType","cards","Default","Visa","Mastercard","detectCardType","cardNumber","formatsCache","defaultPhoneNumberFormat","str","flag","phoneFormat","format","formatValue","phoneNumberFormat","phoneNumberGroups","RegExp","repeat","getPhoneNumberFormat","streetLine1","streetLine2","city","countryIso2","postCode","shipping","cardholder","expiry","cvv","billingCountry","billingZip","saveInfo","saveCredentials","formErrors","reducer","getBillingCountry","countryCode","useFocusAfterAnimation","animationDuration","hasArrow","labelText","htmlFor","needEmail","needPhone","needName","needAddress","phoneRef","selectCountryRef","handleAddress1Change","handleAddress2Change","handleCityChange","handleStateChange","handleCountryChange","handlePostCodeChange","handleFullNameChange","handleEmailChange","handleSaveInfoChange","shippingOptions","currency","handleShippingSelect","amount","formatCurrency","renderPaymentItem","main","renderCheckoutItem","invoiceContent","prices","shippingPrices","checkoutInfo","totalPrice","photoUrl","paymentMethod","paymentProvider","shippingAddress","shippingMethod","expiryInputRef","charAt","parts","formatCardExpiry","cardNumberRef","cardType","setCardType","newCardType","formatCardNumber","cardIcon","mastercardIconPath","visaIconPath","getCardIcon","canSaveCredentials","needCardholderName","needCountry","needZip","handleCardNumberChange","handleCardholderChange","toUpperCase","handleExpiryChange","handleCvvChange","handleBillingPostCodeChange","handleChangeSaveCredentials","allow","sandbox","SUPPORTED_PROVIDERS","savedInfo","invoice","nativeProvider","nativeParams","passwordMissing","confirmPaymentUrl","payment","isProviderError","nameRequested","phoneRequested","emailRequested","shippingAddressRequested","flexible","phoneToProvider","emailToProvider","validateRequestedInfo","sendPaymentForm","setPaymentStep","sendCredentialsInfo","clearPaymentError","paymentState","paymentDispatch","canRenderFooter","PaymentStep","handleErrorModalClose","shippingOption","getShippingPrices","totalPrices","cur","getTotalPrice","detectCardTypeText","findShippingOption","getCheckoutInfo","validateRequest","requestInfo","getRequestInfo","sendCredentials","credentials","expiryMonth","expiryYear","zip","getCredentials","sendForm","shippingOptionId","setStep","nextStep","buttonText","currentStep","renderModalContent","renderError","optionId","receipt","info","totalAmount","credentialsTitle","fullAddress","onInputChange","setPassword","canSubmit","setCanSubmit","select","autoComplete","MIN_PASSWORD_LENGTH","SEGMENT_COVER_EYES","SEGMENT_UNCOVER_EYE","SEGMENT_COVER_EYE","STICKER_SIZE","STICKER_SIZE_AUTH_MOBILE","STICKER_SIZE_AUTH","closeMonkeyData","setCloseMonkeyData","peekMonkeyData","setPeekMonkeyData","isFirstMonkeyLoaded","setIsFirstMonkeyLoaded","isPeekShown","setIsPeekShown","handleFirstMonkeyLoad","STICKER_SIZE_TWO_FA","playSegment","cropperResultOptions","circle","Croppie","croppiePromise","cropper","isCroppieReady","setIsCroppieReady","imgFile","cropContainer","enableZoom","boundary","viewport","blobToDataUri","bind","err","DEBUG","console","initCropper","ensureCroppie","handleCropClick","croppedImg","blobToFile","selectedFile","setSelectedFile","croppedBlobUrl","setCroppedBlobUrl","handleAvatarCrop","URL","revokeObjectURL","createObjectURL","handleModalClose","labelClassName","accept"],"sourceRoot":""} \ No newline at end of file diff --git a/dist/395.93d060131194800fb151.css.map b/dist/395.93d060131194800fb151.css.map deleted file mode 100644 index 564f4656b..000000000 --- a/dist/395.93d060131194800fb151.css.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"395.93d060131194800fb151.css","mappings":"AAAA,oBACE,aACA,yBACA,4BAEA,4BACE,2BAIJ,2BACE,kBACA,wBAEA,4CACE,kBACA,MACA,O;ACjBJ,mBACE,kBACA,SACA,eACA,WACA,wBAEA,uCACE,aAGF,0BAXF,mBAYI,mBAGF,yBAfF,mBAgBI,mEAEA,gCACE,UACA,oBACA,oBAEA,wEACE,UACA,oBAKN,wCACE,UAGF,gDACE,kBACA,0CACA,YACA,eACA,WACA,wBAEA,sDACE,UAGF,yBAZF,gDAaI,WAIJ,6BACE,UAGF,+BACE,gBACA,cACA,gBACA,kBACA,2BACA,mBACA,uBACA,mBAEA,0BAVF,+BAWI,oBAGF,sCACE,eACA,gBACA,oBAIA,iDACE,WACA,kBACA,cACA,eACA,aACA,gBACA,2BACA,2CACA,uBAEA,yBAXF,iDAYI,aACA,iBAMR,qBACE,yBAEA,sDAEE,0B;ACpGN,aACE,kBACA,oBACA,sBACA,gBAEA,iCACE,kBACA,MACA,QACA,SACA,OACA,qCACE,sBACA,uBAEF,uCACE,2BAIJ,yBArBF,aAuBI,WAGF,yBA1BF,aA2BI,kBAGF,0BA9BF,aA+BI,sBACS,yBACP,iBAIJ,mBACE,cACA,iCACA,YACA,mBACA,aACA,WACA,YACA,6BACA,wBAEA,0BAXF,mBAYI,gCAIF,iCACE,oBAIJ,0BACE,kBACA,SACA,QACA,gCACA,cACA,eACA,2CACA,uDACE,uCAGF,qCACE,kBACA,kBACA,aAIJ,gCACE,kBACA,MACA,OACA,WACA,YACA,aACA,mBACA,uBAEA,2CACE,2BACA,WACA,iBACA,kBACA,cACA,aACA,UACA,kBACA,qBACA,qBAGF,iDACE,e;ACrGN,qBACE,aACA,mBACA,kBACA,OACA,SACA,WACA,yBACA,kBACA,mEACA,uBACA,UACA,oBAEA,yCACE,aAGF,yBAlBF,qBAmBI,eACA,6BACA,gBACA,+BAGF,4BACE,UACA,mBAGF,8BACE,aACA,mBACA,WAGF,6BACE,YAGF,mCACE,WACA,UACA,cACA,YAGF,oCACE,gBACA,qBACA,gCACA,QAEA,4BACA,qBACA,0CAEA,iCAEA,0CACE,gBACA,iCACA,8DACE,UAIJ,wDACE,gBACA,UACA,oCAIJ,kDACE,gBACA,iCACA,sEACE,UAIJ,kCACE,mBAGF,uCACE,mBACA,gBACA,uBACA,kBAGF,sCACE,kBACA,UACA,WACA,MACA,YACA,kBACA,eAEA,yBATF,sCAUI,UAGF,4CACE,kBACA,QACA,cACA,eACA,WACA,2BACA,uCACA,2CAGF,wIAGE,kBACA,MACA,OACA,YACA,2CAGF,+CACE,kBACA,sCAGF,6CACE,gCAEA,oDACE,WACA,kBACA,aACA,cACA,kBACA,sCACA,QACA,QACA,oCAKN,iDACE,eACA,kB;ACvJJ,oBACE,kBACA,MACA,OACA,QACA,SACA,eACA,gBACA,UACA,kBACA,YACA,oBACA,uBACA,mBAEA,+BACE,kBAEA,mCACE,kBACA,QACA,SACA,gCAIJ,wBACE,gBACA,iCACA,mBACA,yBAGF,qCACE,gBACA,YAGF,6BACE,Y;ACvCJ,mBACE,kBACA,aACA,YACA,iBACA,0BAEA,kCACA,WACA,gBAEA,kBACA,MACA,OACA,QACA,SAEA,qBACE,yBAIJ,kBACE,kBACA,MACA,OACA,QACA,SACA,YACA,cACA,UACA,kBACA,qBAEA,0BACE,U;ACnCJ,4BAEE,kBACA,WACA,YAGF,aACE,YACA,0CAGF,eACE,iCAEA,iCACE,gBAGF,uBACE,eACA,MACA,O;ACtBJ,YACE,aACA,qBACA,WACA,eAEA,WACA,wBAEA,kBACE,UAGF,oBACE,uBAEA,yBAHF,oBAII,cAIJ,kBACE,aACA,sBACA,uBACA,+BAGF,mBACE,sBACA,gBACA,gBACA,gBACA,uBAGF,kBACE,oBACA,kBACA,wB;ACvCJ,cACE,kBACA,eACA,SACA,0BACA,2CACA,WACA,gBACA,gBACA,yCACA,+BACA,oBAEA,mBACE,8BACA,mBAGF,+CAEE,kBACA,aACA,aACA,cACA,WAEA,mDACE,iBAIJ,wBACE,WAGF,uBACE,YAGF,wBACE,kBACA,aACA,cACA,aACA,YAEA,8BACE,kBACA,QACA,cACA,eACA,WACA,2BACA,sCACA,2CAGF,6DAEE,kBACA,MACA,OACA,YACA,2CAGF,+BACE,gBAEA,uBAEA,sCACE,WACA,kBACA,aACA,cACA,kBACA,oCACA,QACA,QACA,oCAIJ,8BACE,WACA,YACA,cACA,UACA,SACA,UACA,eACA,gBAEA,oDACE,iB;AC/FR,aACE,eACA,MACA,OACA,YACA,YACA,0BACA,WACA,8BAEA,aACA,2BACA,4BACA,kBACA,eACA,sBACA,mBAEA,yBAlBF,aAmBI,iBAIF,yBACE,yBACA,mBAIA,qNAIE,aAIJ,oCACE,mCAKA,sEACE,oBACA,gBAKF,gCACE,aAGF,uCACE,UAGF,sCACE,eACA,MACA,OACA,YACA,aACA,UACA,UAIJ,gCACE,aACA,mBACA,kBACA,mCACA,YACA,qDAEA,4CACE,WACA,YAGF,yBAbF,gCAcI,mDAEA,oDACE,qBAKN,mDAEE,oBAGF,+DAEE,kBACA,oBACA,kBACA,WACA,YACA,aACA,mBACA,gBAGF,yBACE,eACA,SACA,WACA,SACA,YACA,UACA,SACA,wCACA,iCACA,wBACA,UACA,wBACA,aACA,eACA,UAEA,yBAjBF,yBAkBI,YAGF,sEAEE,UAGF,8BACE,yDACA,6CAEA,+BAEA,uCACE,UACA,iCACA,qBAIJ,8BACE,iCACA,yDACA,0DAEA,uCACE,WACA,+BACA,qBAIJ,gCACE,qBACA,aACA,YACA,6BAEA,yBANF,gCAOI,UACA,gCACA,oBAEA,wDACE,UACA,oBAOV,OACE,kBACA,8BACA,8BACA,gBACA,gBACA,+CAEA,uBACE,4CAGF,cACE,kBAGF,mBACE,iFAGF,wBAEE,WACA,YACA,iBACA,yBACA,+C;AC7MJ,kBACE,8BAEA,gCACE,WACA,gBAEA,yBAJF,gCAKI,YAIJ,gCACE,aACA,mBACA,qBAEA,wCACE,mBAGF,6CACE,SACA,OAGF,8CACE,YACA,2BAEA,eACA,cACA,kBACA,oBACA,uBAIJ,iCACE,UACA,gBACA,aACA,sBAEA,8CACE,YACA,kBACA,gBACA,gBAIJ,8BACE,YACA,SACA,kBACA,aACA,mBACA,uBACA,kCAGF,oCACE,kBAGF,4BACE,kBACA,WAKE,yBADF,4EAEI,SAEA,6FACE,iB;AC7EV,SACE,eACA,MACA,OACA,YACA,aACA,uB;ACLA,6BACE,mBACA,4CACE,0BAIJ,2BACE,aACA,mBACA,uBACA,qBAEA,yCACE,eACA,kBAEA,qDACE,kBAEF,oDACE,iBAKN,uBACE,aACA,yBACA,sBAEA,+BACE,oBAEA,uCACE,iBAKN,+BACE,aACA,mBAEA,kCACE,OACA,qBACA,kBAEA,yBALF,kCAMI,oBAGF,0CACE,2BAIJ,8CACE,WACA,oBAIJ,2BACE,kBACA,mBACA,wBACA,gBACA,uBAEA,yBAPF,2BAQI,uBAGF,mCACE,gBACA,YAGF,qCACE,eAEA,2CACE,wDAGF,8CACE,sCACA,WAIJ,oCACE,YACA,oBAGF,mCACE,WACA,cACA,iBAGF,gCACE,kBACA,MACA,OACA,WACA,YACA,aACA,mBACA,uBACA,kBAIJ,iCACE,aACA,mBACA,uBACA,iBACA,4BAGF,8BACE,aACA,qCACA,W;AChIF,+BACE,gBAGF,8BACE,aAEA,yBAHF,8BAII,uBAGF,uCACE,OACA,yBACA,yBAHF,uCAII,sBACA,iBAKN,0BACE,aACA,mBACA,mBAEA,+BACE,yBAIJ,8BACE,kCAGF,+BACE,iBACA,gBAGF,4BACE,mBACA,kC;AC3CJ,sBACE,kBACA,iDACA,WACA,YACA,WACA,WACA,uBACA,SAwBA,UAtBA,mDACE,qBACA,sBAGF,mCACE,WACA,yBAFF,mCAGI,yBAIJ,yBAtBF,sBAuBI,UACA,WACA,eAEA,mCACE,cAMJ,kDACE,kCAGF,iIAEE,SAGF,6CACE,2BAGF,kCACE,UACA,oBAEA,+CACE,iDAGF,4EACE,2FAGF,kFACE,kEAIJ,8BACE,WACA,kDACA,WACA,UACA,WAGF,4BACE,WACA,kDACA,aACA,mBACA,eAEA,mCACA,4CACA,iDACA,gBAEA,oBACA,+EAEA,yBAfF,4BAgBI,UACA,gBAGF,oCACE,WACA,YAEA,yBAJF,oCAKI,eACA,iBAKN,4BACE,iBACA,mBACA,gBACA,uBACA,YAEA,yBAPF,4BAQI,oBAIJ,8BACE,iBACA,aAEA,oCACE,WACA,gBACA,uBACA,2BACA,wBACA,aACA,kBACA,gBACA,mBACA,mBACA,wBACA,oCACA,eACA,uBAEA,iBACA,kBAEA,sCACE,iBACA,kCAGF,gDACE,yBACA,kDACE,cAIJ,6CACE,WACA,eACA,oBAGF,0DACE,0CACA,2BAGF,qBACE,oFACE,yCACA,sB;ACpKV,kBACE,gDACA,4DACA,qCAEA,iCACE,gBAGF,6BACE,oBAGF,yCACE,oBAGF,gCACE,iBACA,cACA,kBAGF,sCACE,SAGF,uDACE,aACA,mBAGF,uCACE,aACA,cACA,yB;ACnCJ,2BACE,aACA,aACA,WACA,kBACA,MACA,OACA,WACA,YACA,oBACA,aAEA,4BACE,KACE,iDAGF,GACE,0CAIJ,qCACE,KACE,8DAGF,GACE,qDAIJ,4CACE,kBACA,mBACA,oBACA,iCACA,0BACA,6DAGF,qDACE,4CAGF,oDACE,8EAGF,6DACE,uFAGF,mDACE,UAGF,4DACE,U;ACzDF,yBACE,gBAGF,mCACE,mBAGF,2BACE,YACA,eACA,gBACA,kBACA,mBAEA,qBACA,8BAEA,8CACE,SAGF,oDACE,+BAIJ,+BACE,qBACA,aACA,YACA,uBACA,kBACA,2CACA,eACA,kBACA,gBAEA,2CACE,oBAGF,0CACE,qBAGF,uCACE,sBAGF,qCACE,mCAGF,8CACE,kBACA,mBACA,iBACA,gBACA,uBAEA,2DACE,WACA,YACA,qBACA,sBACA,oBAKN,qCACE,aACA,mBAEA,6CACE,iBAIA,sDACE,cACA,kB;AClFN,yBACE,iBAIA,qFACE,qCAIJ,8BACE,qBAIA,0BACE,YAGF,sBACE,eACA,WAGF,6BACE,kCAEA,sDACE,wBACA,mBACA,qBACA,kBACA,qBAEA,kEACE,mBAKN,4BACE,YACA,kCACA,gBACA,uBAEA,yCACE,wBAEA,gDACE,aAIJ,gCACE,cACA,eACA,iBACA,sBACA,wBACA,oBAGF,uCACE,kBACA,qBACA,iBACA,WACA,6BACA,wBACA,gBAKN,uBACE,aACA,8BAIA,gCACE,iB;ACnFN,aACE,aACA,YACA,mBACA,8BACA,kBACA,oBAEA,wBACE,aACA,cACA,eACA,mBACA,eACA,kBACA,gBACA,kCAEA,uCACE,kBACA,oB;ACpBN,wBACE,sBACA,YACA,gBACA,yBAEA,MACE,gBACA,sBAGF,kBACE,UACA,6BAGF,yBACE,uCAEA,iBACE,8BAIJ,iBACE,oBACA,qBACA,oCACA,gBAEA,mBACA,kCACA,sCAEA,UACE,kBACA,WACA,WACA,gCACA,aACA,SACA,8EAGF,cAEE,sBACA,oCACA,mBACA,8FAEA,SACE,cACA,uHAKN,4BAEE,wBACA,2CACA,uIAEA,YACE,sBAIJ,YACE,0CAGF,iBACE,YACA,YACA,gBACA,uBACA,sBACA,2BAGF,gBACE,kCACA,kBACA,mBACA,yBAGF,YACE,cACA,qCACA,mBACA,gBACA,qCAIA,gCACE,uDAMA,sBACE,2BACA,+DAEA,WACE,6EACA,aACE,yBACA,8DAIJ,YACE,kCACA,4EAEA,UACE,gEAMJ,gBACE,wEAEA,WACE,0DAQR,uBACE,iEAEA,YACE,gBACA,0BAKN,sBACE,kBACE,8BAIJ,oBACE,8CAEA,iCACE,mBACA,gBACA,2BACA,oBACA,oDAEA,WACE,yBACA,gBACA,kBACA,mHAEA,yBAEE,0HAMF,UACE,iBACA,eACA,sCAKN,aACE,oBACA,6BAIJ,iBACE,aACA,cACA,iBACA,8BACA,qBACA,iDACA,yCACA,iCACA,gBACA,kBACA,8BAEA,iDAEA,aACE,4DAEA,iBACE,qEAKF,gBACE,eACA,2BAKN,WACE,qCAIA,cACE,mBACA,C;AC5NJ,yBACE,wBACA,gBACA,yBACA,iBACA,kBAGF,kDAEE,gBAGF,2BACE,kBACA,YACA,WACA,iDAGF,wBACE,gBACA,cACA,kBAEA,gCACE,WACA,cACA,iBAGF,qCACE,kBACA,MACA,OACA,kDAGF,qCACE,YACA,kDAOA,kEACE,gCAGF,qDACE,gCAGF,8CACE,gCAGF,yDAtEJ,gCACA,eACA,mBACA,oFAEA,+DACE,qBAoEE,qDA1EJ,gCACA,eACA,mBACA,iFAEA,2DACE,qBAwEE,8CA9EJ,gCACA,eACA,mBACA,gFAEA,oDACE,qB;ACJF,sBACE,iBACA,kBACA,aACA,cACA,mBACA,wBACA,mBACA,uBACA,sCACA,kBACA,WACA,eACA,eACA,kBACA,gBACA,wBAEA,4BACE,aAGF,0BACE,kBACA,MACA,OACA,WACA,YAGF,wBACE,mBACA,iCACA,qCAKA,sYAGE,wBAGF,gIACE,2BAKF,8BACE,qBAIJ,6BACE,yCAEA,oCACE,WACA,cACA,kBACA,OACA,MACA,WACA,YACA,gCAIJ,+BACE,oBAEA,iCACE,aAGF,sCACE,a;ACjFR,gBACE,mCACA,aACA,mBACA,gBACA,oBACA,+BACA,qBAEA,kBACE,iBACA,kBACA,kCAGF,yBACE,a;AChBJ,4BACE,yCAEA,2CACE,+CAEA,8DACE,oBACA,kBACA,YACA,kCAIJ,yCACE,sBAEA,qDACE,aAKF,uFACE,uBAGF,kFACE,qBAGF,iEACE,iBACA,qBAGF,kEACE,eACA,gBACA,SAIA,0EACE,cACA,kBACA,eACA,sBAKN,kDACE,mBACA,gBACA,oBAGF,iDACE,uBACA,6C;AC5DJ,mCACE,WACA,aACA,mBACA,8BAIA,sCACE,aACA,mBAEA,8CACE,qBACA,oBAGF,6CACE,aACA,2BACA,mBAEA,gDACE,eACA,gBACA,mBACA,SACA,gBACA,mBACA,uBACA,gBAIJ,8CACE,aAIA,yDACE,iBAMJ,+CACE,WAIJ,2DACE,2BAEA,6DACE,UACA,cAKF,6CACE,mBACA,sBAKN,+BACE,eACA,wBACA,6B;ACtEA,4CACE,oBAGF,+DAEE,WACA,YACA,mBACA,UACA,cAGF,wBACE,eACA,gBAGF,yCACE,aACA,sBACA,uBAIA,iFAEE,mB;AC5BN,eACE,SACA,oBACA,eACA,kBAEA,kDAEE,kBACA,OACA,MACA,WACA,YAGF,4BACE,gBACA,mBACA,+BAEA,mEAEE,kBACA,OACA,MACA,WACA,YACA,iBAIJ,sBACE,WACA,cACA,sCACA,UACA,6BAIA,+BACE,UAGF,qCACE,qBAIJ,kCACE,YACA,aACA,mBACA,uB;ACpDF,gDACE,aACA,cACA,qCACA,mBACA,gBAGF,oCACE,uBACA,gB;ACVF,0DACE,gCAGF,0FAEE,kBAGF,8CACE,gBACA,aAGF,4CACE,cACA,aAGF,uCACE,cACA,WACA,YACA,2CACA,eAGF,wCACE,kBACA,aACA,cACA,aACA,cACA,wCACA,qBACA,YAGF,oDACE,YAGF,uCACE,sBACA,aAEA,oDACE,gBAGE,mEACE,mDAKN,gEACE,mBAGF,+DACE,kBAIJ,mDACE,aACA,cACA,qCACA,mBACA,gBAEA,uDACE,eACA,iDACA,iCAEA,8DACE,0CACA,wDAIF,8DACE,cACA,WACA,WACA,iBACA,oB;ACzFR,QACE,kBACA,cACA,iBACA,kBACA,aACA,cACA,sBAEA,gDATF,QAUI,YACA,aACA,sBAGF,YACE,YACA,aAGF,yBACE,kBACA,OACA,MACA,WACA,YAEA,gCACE,aAIJ,wBACE,WACA,YACA,0DACA,mB;AClCJ,UACE,YAEA,cACE,aACA,sBACA,gBAGF,uBACE,uBAIJ,sBACE,aACA,YACA,8BACA,mBAIA,4BACE,WAEA,6CACE,6BACA,8BAKN,kBACE,mCACA,yCAEA,gBC9BA,+BD0BF,kBCzBI,mBAGA,mBD6BF,kCACE,aACA,sBAEA,iDACE,cACA,YAIJ,0BACE,iBACA,mBAGF,iCACE,iBACA,qBAIJ,yBACE,aACA,sBACA,mBACA,sBACA,kBAEA,sCACE,WAIJ,uBACE,WACA,YACA,qBACA,kBAEA,wCACE,kBACA,OACA,MACA,WACA,YAEA,+CACE,aAKN,oBACE,uBAEA,+BACE,yBACA,yBACA,2EACA,8DAEA,gDACE,qBAKN,eACE,0CACA,2BAEA,yBACE,gBAGF,sBACE,eACA,kCACA,mBACA,kBAEA,+BACE,iBAIJ,sBACE,gBAGF,2BACE,kBACA,kCACA,mBACA,qBAEA,oDACE,eAGF,oCACE,iBACA,uBAIJ,kCACE,eACA,sBACA,kCACA,gBACA,qBAEA,2CACE,iBAIJ,yBACE,oBAEA,oCACE,gBAGF,8CACE,oBAEA,wDACE,WAGF,oDACE,YACA,iBACA,iBACA,kCAGF,6GAEE,cACA,gBAGF,qDACE,oBAGF,wDACE,kBACA,mBACA,kCAEA,kEACE,oBAGF,8DACE,wBAGF,8DACE,sBACA,uBAMJ,sDACE,yBAEA,wDACE,cAKN,2CACE,oBAEA,4DACE,mBACA,gBACA,cAGF,mDACE,WACA,YACA,kBAGF,yDACE,eACA,iBACA,qBACA,gBAGF,0DACE,kBACA,iBACA,kCAMA,+HAEE,iBAGF,6DACE,WACA,cACA,kBAMR,4BACE,wBAGF,qDAEE,qBAIA,8CACE,gBAIJ,gEAEE,gBAIJ,sBACE,yCACA,kBACA,gBAEA,wCACE,YAGF,4CACE,aAIJ,uBACE,iBAGF,eACE,yBAIA,4CACE,aAGF,8CACE,uBACA,aAKF,8CACE,aACA,cACA,uB;AEnUJ,SACE,YACA,gBACA,kBAEA,eACE,yCACA,gBAEA,sBACE,kBACA,aACA,sBAEA,yDACE,kBACA,oBACA,qBAGF,6BACE,yBAGF,4BACE,sBACA,kCAGF,4CACE,kCACA,eACA,gBACA,mBAGF,yCACE,kBACA,oBAEA,kBACA,Y;ACzCR,eACE,YACA,gBAEA,0BACE,yC;ACLJ,0BACE,kBACA,kBACA,eACA,gBAEA,sCACE,cAGF,kCACE,WACA,YACA,kBACA,MACA,OACA,6DACA,0BAGF,2CACE,kBACA,MACA,OAGF,mCACE,iBACA,yB;AC5BJ,kBACE,kBACA,YACA,mCACA,eACA,4BACA,YACA,mBACA,mEACA,YACA,YAEA,8BACE,2CACA,kBACA,cACA,WACA,aACA,eACA,WACA,YACA,aACA,cACA,eACA,0BACA,WAGF,gCACE,kBACA,cACA,WACA,cACA,gBACA,YACA,aACA,kBACA,mCAGF,iCACE,YACA,wDAGF,4FAEE,wDAGF,iCACE,WACA,YACA,gBACA,mBAGF,yBACE,eACA,WACA,YACA,gBACA,iBACA,kBACA,aACA,eACA,mBACA,mBAGF,2BACE,0DACA,YACA,YAGF,oDACE,gBAGF,yDACE,4DAGF,2DACE,0D;ACrFJ,oBACE,kBACA,eAEA,wCACE,cACA,iBACA,gBACA,4BAGF,gDACE,iBAGF,4BACE,4GACA,qBACA,iBACA,qBAGF,2CACE,kBAGF,8BACE,kBAGF,6BACE,gBAGF,mCACE,eACA,gBACA,uBAGF,6BACE,aACA,kBACA,yBACA,0BAEA,qCACE,8CACA,eACA,uBAEA,uDACE,uB;ACnDN,+BACE,eACA,eAGF,yBACE,+BACE,iBAIJ,+BACE,mBAGF,gCACE,kBACA,UAGF,2BACE,kBACA,WACA,aACA,gBACA,gBACA,iBACA,gBAGF,iCACE,gBACA,0CACA,+CAEA,wCACE,qBAIJ,0BACE,WACA,kBACA,kC;AC5CJ,qBACE,eACA,MACA,OACA,QACA,aACA,6BAEA,2BACE,kBACA,eAEA,qCACE,sCAGF,mCACE,6BACA,8B;AClBN,sBACE,kBACA,MACA,OACA,+BACA,WACA,cACA,mCACA,aACA,mBACA,mDACA,oDAEA,mCACE,mBACA,OAIJ,sBACE,kBACA,SACA,OACA,+BACA,WACA,cACA,mCACA,aACA,mBACA,iDACA,oDAEA,kDACE,2CACA,kDAGF,+BACE,OACA,kCAKF,sEAEE,8B;AC9CJ,gBACE,wBACA,gBACA,sBAEA,WAEA,yBAPF,gBAQI,yBAGF,8CACE,SAEA,+DACE,gBAGF,oDACE,aAGF,qDACE,0BACA,cAGF,sDACE,eAIA,+DACE,WAMJ,oCACE,iBAGF,kCACE,kBAIA,0CACE,YAIJ,uCACE,wB;ACtDN,iBACE,kCAEA,+BACE,mBACA,yBAFF,+BAGI,gBACA,uBAIJ,gCACE,+BACA,iCACA,yBAHF,gCAII,uBAIJ,gCACE,iBACA,cACA,aACA,eACA,qBAEA,0EAEE,OACA,yBACA,aACA,uBACA,2CACA,iBAEA,gGACE,YACA,iBACA,gBAGF,0GACE,qBAKN,mCACE,iBACA,cACA,cACA,aACA,sBACA,wBAEA,0DACE,qBAGF,8CACE,0BAIJ,6CACE,kBAEA,2DACE,mCAGF,6DACE,mBACA,UAIJ,8BACE,kBAEA,2EAEE,WACA,kBACA,OACA,MACA,QACA,SACA,2CACA,oBAEA,UACA,yBACA,UAGF,sCACE,mDACA,yCAGF,qCACE,sCACA,aACA,uBACA,mBACA,2BAKF,8CACE,YAGF,6CACE,UAGF,wIAGE,oBAGF,mFAEE,2CAIJ,+BACE,kBAGF,iCACE,YAEA,2DACE,WACA,aACA,YACA,e;AC7IJ,yBACE,mBACA,8BAGF,0BACE,+BACA,oBAGF,mCACE,mBAGF,2BACE,kCACA,eACA,gBACA,qBAGF,yBACE,6BACA,iBACA,6CACA,iBACA,cAEA,mCACE,gCAGF,yBAXF,yBAYI,gBACA,gBAEA,4DAEE,kBAKN,2BACE,kBAEA,yCACE,mBAGF,iDACE,kBACA,aACA,eAIJ,sBACE,kBAEA,sCACE,oBAGF,4BACE,iBAIJ,iBACE,kBACA,kCAGF,kBACE,kBACA,yBACA,2BAGF,mCACE,oB;AClFJ,aACE,oBACA,mBACA,uBACA,aACA,cACA,eACA,kDACA,eACA,kBACA,mBACA,6BACA,sCAEA,yBACE,oBAGF,sCAEE,kDAGF,iBACE,WACA,Y;ACzBJ,aACE,YAEA,kBACE,yBACA,gBACA,cAEA,yBALF,kBAMI,sBAGF,wCACE,aACA,eAIJ,oBACE,YACA,6CACA,aACA,mBACA,6BACA,+CAEA,yBARF,oBASI,gBACA,kBACA,cACA,mBACA,mBAEA,qBACA,8BAEA,uCACE,SAGF,6CACE,+BAGF,uCACE,oBACA,sBAIF,2BACE,WACA,cACA,cACA,UACA,a;ACvDR,eACE,YAEA,oBACE,kBACA,yBACA,gBACA,cAEA,yBANF,oBAOI,sBAIJ,sBACE,YACA,6CACA,kBACA,gBACA,kBACA,mBACA,+CAEA,qBACA,8BAEA,yCACE,SAGF,+CACE,+BAIF,6BACE,WACA,cACA,cACA,UACA,YAIF,0CACE,oBACA,sBACA,mBACA,uBAEA,wDACE,qBAEA,mMACE,YACA,aACA,WACA,YAIJ,6DACE,WACA,YACA,kBACA,aACA,mBACA,uBAEA,kNACE,WACA,YACA,kBACA,MACA,OAMR,qCACE,YACA,cAEA,yBAJF,qCAKI,YAIJ,mCACE,yBACA,eACA,gBACA,kD;AC7FJ,WACE,aACA,mBACA,uBACA,eACA,6BACA,kBAGE,oCACE,WAIJ,sBACE,mBAGF,oBACE,uBAGF,sBACE,uBAGF,uBACE,eAGF,sBACE,WACA,YACA,wCACA,iCAGF,qCACE,kBACA,MACA,OACA,WACA,YACA,iBAEA,2BACA,0CAGF,oBACE,kBACA,oBAGF,8BACE,kBACA,WACA,aACA,WACA,YACA,gBACA,qBACA,oCAMA,UACA,UALA,mCACE,iBAOJ,6BACE,kBAEA,qCACE,W;AC5EN,WACE,aACA,qCACA,uBACA,gBACA,qBACA,YACA,gBACA,eAEA,6BAVF,WAWI,oBAGF,gDACE,iBACA,0B;ACbF,wBACE,eACA,OACA,QACA,SACA,mCACA,UAEA,6CACA,yCACA,2CACA,uCACA,8HAMA,6BACE,+BAEA,uDACE,gGAIJ,+CACE,gBAGF,iDACE,8CAIJ,iBACE,iCACA,wFAGF,mBACE,wCACA,0CACA,aACA,mBACA,uBACA,+CACA,kBAEA,2BACE,cACA,0BACA,gBACA,gBACA,UAEA,qCACE,oBAGF,6CACE,gBAGF,gDACE,kBACA,YAGF,gDACE,kBACA,aAKN,8BACE,YAEA,uCACE,iCAKF,sCACE,kBACA,UACA,OACA,WACA,aACA,cAMF,wHACE,UACA,cAIJ,oBACE,8CACA,UACA,gBAEA,6BALF,oBAMI,gCAIJ,6BACE,iCACA,aACA,mBACA,uBACA,kCAGF,iCACE,aACA,kBACA,6CACA,yCAGF,+BACE,iCACE,eAKN,YACE,mBAEA,iBACE,eACA,sBACA,gBACA,SACA,mBACA,kDACA,gBACA,mBACA,uBACA,mBACA,uBAGF,sBACE,mBAGF,mBACE,cACA,0BACA,gBACA,gBACA,UjBlKF,oGiBsKE,gBAIA,8CACE,cAGF,0CACE,gB;ACjLN,YACE,oBAEA,6BACE,gBAGF,4BACE,eAEA,sCACE,mBACA,mBAKF,wCACE,UACA,aAGF,uCACE,O;ACvBN,mBACE,wBACA,gBACA,sBAEA,WAEA,yBAPF,mBAQI,yB;ACPF,gCACE,wBACA,gBACA,gBACA,cACA,sBAEA,yBAPF,gCAQI,yBAKF,0CACE,kBACA,UACA,OACA,WACA,aACA,c;ACpBN,gBACE,aACA,2DACA,oBACA,mBAEA,uBACE,a;ACPJ,gBACE,kBACA,cAGE,0CACE,kBACA,UACA,UACA,QACA,aAKJ,uCACE,mBAGF,wBACE,Y;ACpBJ,cACE,aACA,oBAEA,gBAIA,kBAHA,+BALF,cAMI,oBAIF,2BACE,gB;ACVF,iDACE,gCACA,iCAEA,wDACE,cACA,uBAIJ,mBACE,mDACA,cACA,WACA,YACA,iBACA,gDACA,oBACA,qBACA,uBACA,wBACA,gBACA,iBAEA,mCACE,WACA,iBAGF,6BACE,aACA,cACA,kBAIJ,2BACE,YAGF,mBACE,gBACA,gBACA,uBAGF,yBACE,mBACA,oBACA,qBACA,4BACA,gBACA,uBACA,gBACA,uBAEF,8DAEE,iB;AC3DJ,aACE,SACA,oBACA,gBACA,kBACA,eAEA,iBACE,kBACA,OACA,MACA,WACA,YACA,iB;ACZF,oCACE,cACA,gBAGF,0BACE,aACA,qCACA,aACA,UAEA,yBANF,0BAOI,sCAGF,qCACE,iBACA,sDACE,4BACA,6BAIJ,qCACE,wBAGF,yCACE,cACA,SACA,SACA,oBACA,gBAEA,uJAGE,kBACA,MACA,OACA,sBACA,uBAEA,yBATF,uJAUI,WACA,YACA,oCACA,sC;AC/CR,2BACE,gBACA,oBACA,sBACA,yBACA,mBAGF,4BACE,wBACA,gBACA,gBACA,cACA,sBAEA,yBAPF,4BAQI,yBAKF,sCACE,UACA,kBACA,UACA,OACA,WACA,aACA,cAKN,YACE,oBAGA,6BACE,oBACA,kBACA,2BACA,4BAEA,qCACE,cACA,WACA,kBACA,SACA,UACA,sCACA,uBACA,wBACA,kBAIJ,6BACE,iCACA,gBACA,mBAGF,kBACE,0BAGF,sBACE,mBACA,kCACA,mB;ACtEJ,aACE,YACA,gBACA,gBAEA,0BACE,aACA,sBACA,gBACA,kCACA,uBACA,mB;ACXJ,eACE,YACA,gBACA,gBAEA,4BACE,aACA,sBACA,gBACA,kCAGF,4BACE,mBAEA,mCACE,aACA,8BACA,cAEA,kDACE,gBAGF,0CACE,eACA,sBACA,SACA,gBACA,mBACA,uBAGF,0CACE,kCACA,SAGF,2CACE,cACA,iBAEA,oDACE,mCACA,kCAEA,qHAEE,+CAMR,iCACE,aACA,iBACA,gBAIA,oDACE,iBAGF,6CACE,cACA,kBAKN,8BACE,e;ACzEJ,WACE,YACA,eAEA,0BACE,YACA,cAEA,+BACE,aACA,qCACA,uBACA,gBACA,qBAIJ,wBACE,6BACA,gBACA,kB;ACpBJ,oBACE,oBACA,mBACA,6CAEA,4BACE,oBACA,gBACA,aACA,mBACA,8BAGF,2BACE,iBACA,oBACA,eACA,wBACA,iBACA,yBAEA,wCACE,yBAIJ,6BACE,iBACA,iBAGF,2BACE,WAEA,mCACE,mBACA,kCAGF,iCACE,gBACA,eAIJ,2BACE,mBACA,8BAEA,oCACE,yB;AClDN,yBACE,kBACA,kBAEA,kCACE,OACA,gBACA,mBACA,uBACA,oBAEA,wDACE,aACA,cACA,kBACA,OACA,MACA,iBACA,qBACA,yBAEA,8DACE,sBAIJ,6CACE,kBACA,qBACA,iBACA,WACA,6BACA,wBACA,gBAIJ,gCACE,aACA,mBACA,oBAGF,+BACE,aACA,mBACA,WACA,6BAGF,+BACE,iBAGF,+BACE,OACA,mB;ACxDJ,YACE,YACA,kBACA,kBAEA,sBACE,oBACA,0CAEA,4BACE,oBACA,eACA,wBACA,iBACA,yBAEA,yCACE,yBAKN,kBACE,6BAGF,mBACE,mBACA,6CAEA,UACA,4BAEA,gCACE,gBACA,mBAGF,0BACE,UAIJ,qCACE,wBACA,0BAGF,kCACE,cAGF,wKAIE,2BAIA,mFACE,sCAGF,yFACE,uCAKN,uBACE,GACE,kDACA,0DACA,0BAGF,IACE,kDACA,0DACA,0BAGF,IACE,kDACA,0DACA,qBAIJ,wBACE,GACE,kDACA,0DACA,yBAGF,IACE,kDACA,0DACA,oBAGF,IACE,kDACA,0DACA,qB;AC1GJ,mBACE,6CACA,wBACA,aACA,8BAEA,gCACE,aACA,mBACA,mBACA,sBACA,gBACA,kCACA,+BACA,gBACA,MACA,mCAEA,yBAZF,gCAaI,kCAIJ,mCACE,iBAEA,6CACE,cACA,kBAIJ,gCACE,iBACA,kBACA,gBAEA,yBALF,gCAMI,kBAGF,yCACE,wBAKF,oEACE,qBAIA,6EACE,oBACA,eAKN,mCACE,0BACA,wBAGE,uDACE,iBACA,eAKN,8BACE,sBACA,kBACA,iB;AC1EJ,aACE,YACA,kBACA,aACA,sBACA,oBAEA,sBACE,kBACA,MACA,OACA,SACA,QACA,iCAGF,4BACE,sBACA,cACA,kBAEA,yBALF,4BAMI,gBAIJ,gCACE,0CACA,YACA,c;AC7BJ,YACE,kBACA,YAEA,2BACE,YACA,kBACA,kBAGF,qBACE,oBACA,0CAEA,0BACE,eAGF,mCACE,gBACA,iBAGF,+BACE,gBAGF,+BACE,2BAEA,yCACE,gBAIJ,mCACE,cACA,eACA,mBACA,kBAEA,oDACE,kBACA,OACA,MACA,WACA,YAEA,2DACE,aAKN,+BACE,kBAEA,yCACE,aACA,mBAGF,oDACE,aACA,kBAGF,0CACE,gBAGF,yDACE,oBACA,mBACA,gBACA,uBAGF,gEACE,gBACA,mBAIA,gDACE,gBACA,mBAKF,mEACE,qBAKN,sCACE,gBACA,mBACA,kCAEA,gDACE,mBAIJ,mCACE,kCACA,qBAEA,6CACE,mBAIJ,mCACE,kCACA,kBAGF,8BACE,iBAIJ,kCACE,YAGF,wBACE,wBAGF,yBACE,gBAEA,gCACE,oBACA,mBAEA,2CACE,sBAKF,6CACE,aACA,WACA,eAGF,4CACE,cACA,aACA,eAKN,oBACE,6BACA,6CACA,aACA,mBACA,cAEA,gBACA,iBAEA,iCACE,oBACA,kBACA,YAGF,kCACE,YACA,YACA,gBACA,UACA,gBAIJ,qBACE,iBAIJ,oBACE,mBAIA,6BACE,kBAGF,mCACE,eACA,mBACA,mBAGF,uCACE,kBACA,YACA,QACA,6BACA,UAGF,4BACE,oBAGF,6BACE,mBAKF,yBACE,mBAGF,4BACE,gBAGF,2BACE,gBAEA,0BACA,4GAEE,wBAIJ,6BACE,oBAKF,6BACE,gBACA,mBAGF,8BACE,kBAKF,kCACE,aACA,6BAGF,wCACE,WACA,YAMF,yCACE,kBACA,gBACA,iB;ACnRJ,aACE,aACA,sBACA,eAEA,8BACE,6CAGF,kBACE,aACA,eACA,cACA,oBAEA,wBACE,yCAIJ,mBACE,aACA,YACA,YACA,gBAGF,wBACE,aACA,sBACA,uBACA,gBACA,iBAGF,4BACE,kCACA,gBACA,uBACA,mBAGF,wBACE,gBACA,uBACA,mBAGF,mBACE,kCACA,kBACA,iBACA,mBAGF,sBACE,aACA,6BACA,gBACA,UAGF,qBACE,WACA,Y;AChEJ,cACE,mBAEA,iBACE,kBACA,kCACA,sB;ACNJ,UACE,mBAGE,iBACE,kCACA,gBACA,oBAGF,sBACE,mB;ACXN,UACE,gBAEA,uBACE,aACA,mBACA,cAEA,2BACE,YACA,aAIA,gCACE,iBACA,mBAGF,+BACE,mBACA,iBACA,kCAKN,sBACE,YAEA,uCACE,kBACA,aACA,mBACA,4BACA,kCACA,gBAEA,4CACE,wBAGF,8CACE,aACA,YAKN,wBACE,0CACA,aAEA,4CACE,aACA,0BACA,gBAEA,8CACE,iBACA,kCACA,kBACA,aAGF,uDACE,4BACA,qBACA,mBACA,cAGF,8DACE,yDAGF,mEACE,yDAIA,yDACE,eACA,sBACA,gBACA,gBACA,sBACA,wBACA,0BAGF,wDACE,gBACA,kBACA,6C;AC9FV,WACE,kBAEA,qDACE,kBAGF,uBACE,kBACA,aACA,UACA,UAEA,2BACE,e;ACdN,aACE,mBAEA,gBACE,kBACA,kCACA,sBAGF,4BACE,aACA,8BAEA,yCACE,aACA,cACA,a;AChBN,gBACE,aACA,YACA,6DACA,8DACA,gBAEA,yBACE,WACA,YACA,Y;ACTF,8BACE,oBAGF,sBACE,kBACA,0DACA,2DACA,WACA,oBACA,aACA,mBACA,mBACA,mCACA,6CAEA,yBACE,gBACA,mBACA,uBACA,mBAIJ,0BACE,aAGF,6BACE,aACA,eACA,aACA,mBACA,uBAGF,+BACE,aACA,gBAGF,uBACE,cACA,WACA,YACA,kBAGF,sBACE,kBACA,6DACA,8DACA,WACA,oBACA,mCACA,0CAEA,6BACE,oBACA,gBAIJ,4BACE,YAGF,6BACE,UACA,gBAIJ,+FAEI,4BACE,gBAGF,0BACE,c","sources":["webpack://telegram-t/./src/components/mediaViewer/MediaViewerActions.scss","webpack://telegram-t/./src/components/mediaViewer/MediaViewerFooter.scss","webpack://telegram-t/./src/components/mediaViewer/VideoPlayer.scss","webpack://telegram-t/./src/components/mediaViewer/VideoPlayerControls.scss","webpack://telegram-t/./src/components/mediaViewer/MediaViewerContent.scss","webpack://telegram-t/./src/components/mediaViewer/MediaViewerSlides.scss","webpack://telegram-t/./src/components/mediaViewer/PanZoom.scss","webpack://telegram-t/./src/components/mediaViewer/SenderInfo.scss","webpack://telegram-t/./src/components/mediaViewer/ZoomControls.scss","webpack://telegram-t/./src/components/mediaViewer/MediaViewer.scss","webpack://telegram-t/./src/components/common/ChatOrUserPicker.scss","webpack://telegram-t/./src/components/main/Dialogs.scss","webpack://telegram-t/./src/components/common/CalendarModal.scss","webpack://telegram-t/./src/components/main/NewContactModal.scss","webpack://telegram-t/./src/components/middle/MessageSelectToolbar.scss","webpack://telegram-t/./src/components/middle/ReactorListModal.scss","webpack://telegram-t/./src/components/middle/EmojiInteractionAnimation.scss","webpack://telegram-t/./src/components/left/search/RecentContacts.scss","webpack://telegram-t/./src/components/left/search/ChatMessage.scss","webpack://telegram-t/./src/components/left/search/DateSuggest.scss","webpack://telegram-t/./src/components/left/search/LeftSearch.scss","webpack://telegram-t/./src/components/ui/CropModal.scss","webpack://telegram-t/./src/components/ui/AvatarEditable.scss","webpack://telegram-t/./src/components/ui/ShowMoreButton.scss","webpack://telegram-t/./src/components/left/settings/folders/SettingsFoldersChatsPicker.scss","webpack://telegram-t/./src/components/left/settings/folders/SettingsFolders.scss","webpack://telegram-t/./src/components/left/settings/SettingsStickerSet.scss","webpack://telegram-t/./src/components/left/settings/WallpaperTile.scss","webpack://telegram-t/./src/components/left/settings/SettingsGeneralBackground.scss","webpack://telegram-t/./src/components/left/settings/SettingsGeneralBackgroundColor.scss","webpack://telegram-t/./src/components/common/PasswordMonkey.scss","webpack://telegram-t/./src/components/left/settings/Settings.scss","webpack://telegram-t/./src/styles/_mixins.scss","webpack://telegram-t/./src/components/left/newChat/NewChat.scss","webpack://telegram-t/./src/components/left/ArchivedChats.scss","webpack://telegram-t/./src/components/middle/message/ReactionSelectorReaction.scss","webpack://telegram-t/./src/components/middle/message/ReactionSelector.scss","webpack://telegram-t/./src/components/middle/message/MessageContextMenu.scss","webpack://telegram-t/./src/components/common/StickerSetModal.scss","webpack://telegram-t/./src/components/middle/HeaderMenuContainer.scss","webpack://telegram-t/./src/components/middle/MobileSearch.scss","webpack://telegram-t/./src/components/middle/composer/MentionTooltip.scss","webpack://telegram-t/./src/components/middle/composer/AttachmentModal.scss","webpack://telegram-t/./src/components/middle/composer/PollModal.scss","webpack://telegram-t/./src/components/middle/composer/EmojiButton.scss","webpack://telegram-t/./src/components/middle/composer/EmojiPicker.scss","webpack://telegram-t/./src/components/middle/composer/StickerPicker.scss","webpack://telegram-t/./src/components/common/GifButton.scss","webpack://telegram-t/./src/components/middle/composer/GifPicker.scss","webpack://telegram-t/./src/components/middle/composer/SymbolMenu.scss","webpack://telegram-t/./src/components/middle/composer/BotCommand.scss","webpack://telegram-t/./src/components/middle/composer/BotCommandTooltip.scss","webpack://telegram-t/./src/components/middle/composer/BotCommandMenu.scss","webpack://telegram-t/./src/components/middle/composer/StickerTooltip.scss","webpack://telegram-t/./src/components/middle/composer/CustomSendMenu.scss","webpack://telegram-t/./src/components/middle/composer/EmojiTooltip.scss","webpack://telegram-t/./src/components/middle/composer/inlineResults/BaseResult.scss","webpack://telegram-t/./src/components/middle/composer/inlineResults/MediaResult.scss","webpack://telegram-t/./src/components/middle/composer/InlineBotTooltip.scss","webpack://telegram-t/./src/components/middle/composer/SendAsMenu.scss","webpack://telegram-t/./src/components/right/RightSearch.scss","webpack://telegram-t/./src/components/right/StickerSearch.scss","webpack://telegram-t/./src/components/right/GifSearch.scss","webpack://telegram-t/./src/components/right/statistics/StatisticsOverview.scss","webpack://telegram-t/./src/components/right/statistics/StatisticsRecentMessage.scss","webpack://telegram-t/./src/components/right/statistics/Statistics.scss","webpack://telegram-t/./src/components/right/PollAnswerResults.scss","webpack://telegram-t/./src/components/right/PollResults.scss","webpack://telegram-t/./src/components/right/management/Management.scss","webpack://telegram-t/./src/components/right/management/JoinRequest.scss","webpack://telegram-t/./src/components/payment/ShippingInfo.scss","webpack://telegram-t/./src/components/payment/Shipping.scss","webpack://telegram-t/./src/components/payment/Checkout.scss","webpack://telegram-t/./src/components/payment/CardInput.scss","webpack://telegram-t/./src/components/payment/PaymentInfo.scss","webpack://telegram-t/./src/components/payment/ConfirmPayment.scss","webpack://telegram-t/./src/components/payment/PaymentModal.scss"],"sourcesContent":[".MediaViewerActions {\n display: flex;\n margin-inline-start: auto;\n margin-inline-end: -0.375rem;\n\n .Button {\n margin-inline-start: 0.25rem;\n }\n}\n\n.MediaViewerActions-mobile {\n position: relative;\n color: var(--color-text);\n\n .ProgressSpinner {\n position: absolute;\n top: 0;\n left: 0;\n }\n}\n",".MediaViewerFooter {\n position: absolute;\n bottom: 0;\n padding: 1rem 0;\n width: 100%;\n transition: opacity 0.15s;\n\n #MediaViewer.zoomed & {\n display: none;\n }\n\n @media (max-height: 640px) {\n padding: 0.5rem 0 0;\n }\n\n @media (max-width: 600px) {\n background: linear-gradient(to top, #000 0%, rgba(0, 0, 0, 0) 100%);\n\n &.is-for-video {\n opacity: 0;\n pointer-events: none;\n padding-bottom: 5rem;\n\n .video-controls-visible &:not(.is-hidden) {\n opacity: 1;\n pointer-events: all;\n }\n }\n }\n\n body.ghost-animating & {\n opacity: 0;\n }\n\n .media-viewer-footer-content {\n position: relative;\n max-width: var(--messages-container-width);\n margin: auto;\n cursor: pointer;\n opacity: 0.5;\n transition: opacity 0.15s;\n\n &:hover {\n opacity: 1;\n }\n\n @media (max-width: 600px) {\n opacity: 1;\n }\n }\n\n &.is-hidden {\n opacity: 0;\n }\n\n .media-text {\n margin-bottom: 0;\n overflow: auto;\n padding: 0 0.5rem;\n text-align: center;\n color: rgba(255, 255, 255, 0.9);\n font-size: 0.9375rem;\n letter-spacing: 0.025rem;\n max-height: 4.25rem;\n\n @media (max-height: 640px) {\n max-height: 2.75rem;\n }\n\n .emoji {\n width: 0.9375rem;\n height: 0.9375rem;\n vertical-align: -2px;\n }\n\n &.multiline {\n &::before {\n content: \"\";\n position: absolute;\n left: -0.75rem;\n right: -0.75rem;\n top: -0.25rem;\n bottom: -0.25rem;\n background: rgba(0, 0, 0, 0.75);\n border-radius: var(--border-radius-default);\n z-index: var(--z-below);\n\n @media (max-width: 600px) {\n display: none;\n background: none;\n }\n }\n }\n }\n\n a {\n color: var(--color-links);\n\n &:hover,\n &:focus {\n text-decoration: underline;\n }\n }\n}\n",".VideoPlayer {\n position: relative;\n display: inline-flex;\n flex-direction: column;\n overflow: hidden;\n\n #MediaViewer.zoomed & {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n > div {\n width: 100% !important;\n height: 100% !important;\n }\n video {\n max-height: none !important;\n }\n }\n\n @media (min-width: 601px) {\n // Safari: custom controls are not displayed after exiting full screen mode.\n z-index: 1;\n }\n\n @media (max-width: 600px) {\n overflow: visible;\n }\n\n @media (max-height: 640px) {\n margin-bottom: 1.75rem;\n @at-root .has-footer #{&} {\n margin-bottom: 0;\n }\n }\n\n video {\n display: block;\n max-height: calc(100vh - 8.25rem);\n margin: auto;\n object-fit: contain;\n outline: none;\n width: 100%;\n height: 100%;\n background: no-repeat 50% 50%;\n background-size: contain;\n\n @media (max-height: 640px) {\n max-height: calc(100vh - 10rem);\n }\n\n // Disable fullscreen on double tap on mobile devices\n .is-touch-env & {\n pointer-events: none;\n }\n }\n\n .play-button {\n position: absolute;\n left: 50%;\n top: 50%;\n transform: translate(-50%, -50%);\n width: 3.25rem;\n height: 3.25rem;\n background-color: rgba(0, 0, 0, 0.5) !important;\n body:not(.animation-level-0) & {\n transition: opacity 0.3s ease !important;\n }\n\n .icon-play {\n font-size: 1.75rem;\n position: relative;\n left: 0.125rem;\n }\n }\n\n .spinner-container {\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n display: flex;\n align-items: center;\n justify-content: center;\n\n .buffering {\n background: rgba(0, 0, 0, 0.25);\n color: #fff;\n font-size: 0.75rem;\n position: absolute;\n left: 0.1875rem;\n top: 0.1875rem;\n z-index: 1;\n padding: 0 0.375rem;\n border-radius: 0.75rem;\n line-height: 1.125rem;\n }\n\n .ProgressSpinner {\n cursor: pointer;\n }\n }\n}\n",".VideoPlayerControls {\n display: flex;\n align-items: center;\n position: absolute;\n left: 0;\n bottom: 0;\n width: 100%;\n padding: 1rem 0.5rem 0.5rem;\n font-size: 0.875rem;\n background: linear-gradient(to top, #000 0%, rgba(0, 0, 0, 0) 100%);\n transition: opacity 0.3s;\n opacity: 0;\n pointer-events: none;\n\n #MediaViewer.zoomed & {\n display: none;\n }\n\n @media (max-width: 600px) {\n position: fixed;\n padding: 2.25rem 0.5rem 0.75rem;\n background: none;\n z-index: var(--z-media-viewer);\n }\n\n &.active {\n opacity: 1;\n pointer-events: all;\n }\n\n .buttons {\n display: flex;\n align-items: center;\n width: 100%;\n }\n\n .spacer {\n flex-grow: 1;\n }\n\n .Button.round {\n width: 2rem;\n padding: 0;\n margin: 0.25rem;\n height: 2rem;\n }\n\n .volume-slider {\n margin-bottom: 0;\n margin-left: -0.75rem;\n padding: 0.5rem 0.5rem 0.5rem 0.5rem;\n width: 0;\n\n --volume-slider-width: 4rem;\n --slider-color: #fff;\n --color-borders: rgba(255, 255, 255, 0.5);\n /* stylelint-disable-next-line plugin/no-low-performance-animation-properties */\n transition: width 0.2s ease-in-out;\n\n &:hover{\n overflow: hidden;\n width: var(--volume-slider-width);\n .RangeSlider__input {\n opacity: 1;\n }\n }\n\n .RangeSlider__input {\n margin-bottom: 0;\n opacity: 0;\n transition: opacity 0.15s ease-in-out;\n }\n }\n\n .volume:hover + .volume-slider {\n overflow: hidden;\n width: var(--volume-slider-width);\n .RangeSlider__input {\n opacity: 1;\n }\n }\n\n .player-time {\n white-space: nowrap;\n }\n\n .player-file-size {\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n margin-left: 0.5rem;\n }\n\n .player-seekline {\n position: absolute;\n left: 1rem;\n right: 1rem;\n top: 0;\n height: 1rem;\n touch-action: none;\n cursor: pointer;\n\n @media (max-width: 600px) {\n top: 1rem;\n }\n\n &-track {\n position: absolute;\n top: 50%;\n left: -0.25rem;\n right: -0.25rem;\n height: 5px;\n transform: translateY(-50%);\n background-color: rgba(255, 255, 255, 0.16);\n border-radius: var(--border-radius-default);\n }\n\n &-buffered,\n &-played,\n &-input {\n position: absolute;\n top: 0;\n left: 0;\n height: 100%;\n border-radius: var(--border-radius-default);\n }\n\n &-buffered {\n position: absolute;\n background-color: rgba(255, 255, 255, 0.5);\n }\n\n &-played {\n background: var(--color-primary);\n\n &::after {\n content: \"\";\n position: absolute;\n width: 0.75rem;\n height: 0.75rem;\n border-radius: 50%;\n background-color: var(--color-primary);\n right: 0;\n top: 50%;\n transform: translate(0.325rem, -50%);\n }\n }\n }\n\n .playback-rate-menu .bubble {\n min-width: 4rem;\n margin-right: 4rem;\n }\n}\n",".MediaViewerContent {\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n transform: none;\n overflow: hidden;\n z-index: 1;\n padding: 3.25rem 0;\n height: 100%;\n display: inline-flex;\n justify-content: center;\n align-items: center;\n\n .thumbnail {\n position: relative;\n\n img {\n position: absolute;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n }\n }\n\n > img {\n max-width: 100vw;\n max-height: calc(100vh - 8.25rem);\n object-fit: contain;\n transition: transform 0.2s;\n }\n\n .spinner-wrapper {\n max-width: 100vw;\n margin: auto;\n }\n\n .Spinner {\n margin: auto;\n }\n}\n",".MediaViewerSlides {\n position: absolute;\n display: flex;\n height: 100%;\n max-height: 100vh;\n min-height: -moz-available;\n /* stylelint-disable-next-line declaration-block-no-duplicate-properties */\n max-height: -webkit-fill-available;\n width: 100%;\n overflow: hidden;\n -ms-touch-action: none;\n touch-action: none;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n\n & * {\n -ms-scroll-chaining: none;\n }\n}\n\n.MediaViewerSlide {\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n height: 100%;\n flex: 100% 0 0;\n z-index: 0;\n touch-action: none;\n transform-origin: 0 0;\n\n &--active {\n z-index: 1;\n }\n}\n",".pan-wrapper,\n.pan-container {\n position: relative;\n width: 100%;\n height: 100%;\n}\n\n.pan-wrapper {\n cursor: move;\n user-select: none;\n}\n\n.pan-container {\n transition: transform 0.2s ease-in;\n\n .pan-wrapper.move & {\n transition: none;\n }\n\n .zoomed & {\n position: fixed;\n top: 0;\n left: 0;\n }\n}\n",".SenderInfo {\n display: flex;\n align-content: center;\n color: white;\n cursor: pointer;\n\n opacity: 0.5;\n transition: 0.15s opacity;\n\n &:hover {\n opacity: 1;\n }\n\n .Avatar {\n margin-inline-end: 1rem;\n\n @media (max-width: 600px) {\n display: none;\n }\n }\n\n .meta {\n display: flex;\n flex-direction: column;\n justify-content: center;\n max-width: calc(100% - 3.75rem);\n }\n\n .title {\n line-height: 1.4375rem;\n font-weight: 500;\n white-space: pre;\n overflow: hidden;\n text-overflow: ellipsis;\n }\n\n .date {\n line-height: 1.25rem;\n font-size: 0.875rem;\n letter-spacing: -0.01rem;\n }\n}\n",".ZoomControls {\n position: absolute;\n bottom: 1.25rem;\n left: 50%;\n background: rgba(0, 0, 0, 0.5);\n border-radius: var(--border-radius-default);\n width: 100%;\n height: 3.375rem;\n max-width: 274px;\n transform: translate3d(-50%, 0, 0.625rem);\n transition: opacity 0.3s ease-in;\n pointer-events: none;\n\n &.open {\n z-index: var(--z-media-viewer);\n pointer-events: all;\n }\n\n .zoom-out,\n .zoom-in {\n position: absolute;\n top: 0.4375rem;\n width: 2.5rem;\n height: 2.5rem;\n color: #fff;\n\n i {\n font-size: 1.5rem;\n }\n }\n\n .zoom-out {\n left: 0.5rem;\n }\n\n .zoom-in {\n right: 0.5rem;\n }\n\n .seekline {\n position: absolute;\n left: 3.25rem;\n right: 3.25rem;\n top: 1.125rem;\n height: 1rem;\n\n &-track {\n position: absolute;\n top: 50%;\n left: -0.25rem;\n right: -0.25rem;\n height: 2px;\n transform: translateY(-50%);\n background-color: rgba(255, 255, 255, 0.5);\n border-radius: var(--border-radius-default);\n }\n\n &-played,\n &-input {\n position: absolute;\n top: 0;\n left: 0;\n height: 100%;\n border-radius: var(--border-radius-default);\n }\n\n &-played {\n background: #fff;\n /* stylelint-disable-next-line plugin/no-low-performance-animation-properties */\n transition: width 200ms;\n\n &::after {\n content: \"\";\n position: absolute;\n width: 0.75rem;\n height: 0.75rem;\n border-radius: 50%;\n background-color: var(--color-white);\n right: 0;\n top: 50%;\n transform: translate(0.325rem, -50%);\n }\n }\n\n &-input {\n width: 100%;\n height: 1rem;\n top: -0.375rem;\n opacity: 0;\n margin: 0;\n padding: 0;\n cursor: pointer;\n overflow: hidden;\n\n &::-webkit-slider-thumb {\n margin-top: -2rem;\n }\n }\n }\n}\n","#MediaViewer {\n position: fixed;\n top: 0;\n left: 0;\n width: 100vw;\n height: 100%;\n background: rgba(0, 0, 0, 0.9);\n color: #fff;\n z-index: var(--z-media-viewer);\n\n display: grid;\n grid-template-columns: auto;\n grid-template-rows: auto 1fr;\n grid-column-gap: 0;\n grid-row-gap: 0;\n justify-items: stretch;\n align-items: center;\n\n @media (max-width: 600px) {\n background: rgba(0, 0, 0, 1);\n }\n\n // Potential perf improvement\n &:not(.shown) {\n display: block !important;\n transform: scale(0);\n }\n\n body.ghost-animating & {\n > .pan-wrapper,\n > button,\n .MediaViewerContent img,\n .MediaViewerContent .VideoPlayer {\n display: none;\n }\n }\n\n body.animation-level-2 & {\n transition-duration: 0.3s !important;\n }\n\n &:not(.open),\n .closing {\n .SenderInfo {\n pointer-events: none;\n transition: none;\n }\n }\n\n &.zoomed {\n .navigation {\n display: none;\n }\n\n .media-viewer-head {\n z-index: 2;\n }\n\n .MediaViewerSlide {\n position: fixed;\n top: 0;\n left: 0;\n width: 100vw;\n height: 100vh;\n padding: 0;\n z-index: 1;\n }\n }\n\n .media-viewer-head {\n display: flex;\n grid-area: 1 / 1 / 2 / -2;\n position: relative;\n z-index: var(--z-media-viewer-head);\n min-width: 0;\n padding: 0.5rem max(1.25rem, env(safe-area-inset-left));\n\n & > .Transition {\n width: 100%;\n min-width: 0;\n }\n\n @media (max-width: 600px) {\n padding: 0.5rem max(0.5rem, env(safe-area-inset-left));\n\n .media-viewer-close {\n margin-right: 1.5rem;\n }\n }\n }\n\n & > .Transition,\n & > .pan-wrapper {\n grid-area: 1 / 1 / -1 / -1;\n }\n\n & > .Transition,\n & > .pan-wrapper .Transition {\n position: relative;\n justify-self: center;\n text-align: center;\n width: 100%;\n height: 100%;\n display: flex;\n align-items: center;\n overflow: hidden;\n }\n\n .navigation {\n position: fixed;\n top: 4rem;\n width: 10vw;\n bottom: 0;\n border: none;\n padding: 0;\n margin: 0;\n appearance: none;\n background: transparent no-repeat;\n background-size: 1.25rem;\n opacity: 0;\n transition: opacity 0.15s;\n outline: none;\n cursor: pointer;\n z-index: 1;\n\n @media (max-width: 600px) {\n width: 20vw;\n }\n\n &:hover,\n .is-touch-env & {\n opacity: 1;\n }\n\n &.prev {\n background-image: url(\"../../assets/media_navigation_previous.svg\");\n background-position: 1.25rem calc(50% - 2rem);\n\n left: env(safe-area-inset-left);\n\n &[dir=\"rtl\"] {\n left: auto;\n right: env(safe-area-inset-right);\n transform: scaleX(-1);\n }\n }\n\n &.next {\n right: env(safe-area-inset-right);\n background-image: url(\"../../assets/media_navigation_next.svg\");\n background-position: calc(100% - 1.25rem) calc(50% - 2rem);\n\n &[dir=\"rtl\"] {\n right: auto;\n left: env(safe-area-inset-left);\n transform: scaleX(-1);\n }\n }\n\n &.inline {\n top: calc(50% - 3rem);\n bottom: unset;\n height: 6rem;\n background-position-y: center;\n\n @media (max-width: 600px) {\n opacity: 0;\n transition: opacity 0.15s ease-in;\n pointer-events: none;\n\n .video-controls-visible & {\n opacity: 1;\n pointer-events: all;\n }\n }\n }\n }\n}\n\n.ghost {\n position: absolute;\n z-index: var(--z-media-viewer);\n will-change: transform, opacity;\n overflow: hidden;\n border-radius: 0;\n transition: transform 0.2s ease, opacity 0.2s ease;\n\n &.rounded-corners {\n border-radius: var(--border-radius-messages);\n }\n\n &.circle {\n border-radius: 50%;\n }\n\n body.is-ios & {\n transition: transform 0.2s ease, opacity 0.2s ease, border-radius 0.2s ease !important;\n }\n\n img,\n video {\n width: 100%;\n height: 100%;\n user-select: none;\n -webkit-user-select: none;\n object-fit: cover;\n }\n}\n",".ChatOrUserPicker {\n z-index: var(--z-media-viewer);\n\n .modal-dialog {\n height: 70%;\n max-width: 25rem;\n\n @media (max-width: 600px) {\n height: 90%;\n }\n }\n\n .modal-header {\n display: flex;\n align-items: center;\n padding: 0.25rem 0.5rem;\n\n .Button {\n margin-right: 0.5rem;\n }\n\n .input-group {\n margin: 0;\n flex: 1;\n }\n\n .form-control {\n border: none;\n box-shadow: none !important;\n\n height: 2.75rem;\n padding: 0.5rem;\n font-size: 1.25rem;\n line-height: 1.75rem;\n unicode-bidi: plaintext;\n }\n }\n\n .modal-content {\n padding: 0;\n overflow: hidden;\n display: flex;\n flex-direction: column;\n\n .picker-list {\n height: 100%;\n overflow-x: hidden;\n overflow-y: auto;\n padding: 0 0.5rem;\n }\n }\n\n .no-results {\n height: 100%;\n margin: 0;\n padding: 1rem 1rem;\n display: flex;\n align-items: center;\n justify-content: center;\n color: var(--color-text-secondary);\n }\n\n .scroll-container {\n position: relative;\n }\n\n .ListItem {\n position: absolute;\n width: 100%;\n }\n\n .ListItem.chat-item-clickable {\n &:not(.force-rounded-corners) {\n @media (max-width: 600px) {\n margin: 0;\n\n .ListItem-button {\n border-radius: 0;\n }\n }\n }\n }\n}\n","#Dialogs {\n position: fixed;\n top: 0;\n left: 0;\n width: 100vw;\n height: 100vh;\n z-index: var(--z-modal);\n}\n",".CalendarModal {\n .modal-dialog {\n max-width: 26.25rem;\n .modal-content {\n padding: 0.375rem 1rem 1rem;\n }\n }\n\n .timepicker {\n display: flex;\n align-items: center;\n justify-content: center;\n margin-bottom: 1.5rem;\n\n .form-control {\n max-width: 5rem;\n text-align: center;\n\n &:first-child {\n margin-right: 1rem;\n }\n &:last-child {\n margin-left: 1rem;\n }\n }\n }\n\n .footer {\n display: flex;\n justify-content: flex-end;\n flex-direction: column;\n\n .Button {\n text-transform: none;\n\n + .Button {\n margin-top: 0.5rem;\n }\n }\n }\n\n .month-selector {\n display: flex;\n align-items: center;\n\n h4 {\n flex: 1;\n margin: 0 0 0 1.25rem;\n font-size: 1.25rem;\n\n @media (max-width: 600px) {\n margin-left: 0.75rem;\n }\n\n & ~ .Button {\n color: var(--color-primary);\n }\n }\n\n .Button.hidden {\n opacity: 0.5;\n pointer-events: none;\n }\n }\n\n .day-button {\n position: relative;\n border-radius: 4rem;\n outline: none !important;\n font-weight: 500;\n margin: 0.125rem 0.625rem;\n\n @media (max-width: 600px) {\n margin: 0.25rem 0.375rem;\n }\n\n &.weekday {\n margin-bottom: 0;\n height: 1rem;\n }\n\n &.clickable {\n cursor: pointer;\n\n &:hover {\n background-color: var(--color-interactive-element-hover);\n }\n\n &.selected {\n background-color: var(--color-primary);\n color: white;\n }\n }\n\n &.disabled {\n opacity: 0.25;\n pointer-events: none;\n }\n\n &::before {\n content: \"\";\n display: block;\n padding-top: 100%;\n }\n\n span {\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: 0.875rem;\n }\n }\n\n .calendar-wrapper {\n display: flex;\n align-items: center;\n justify-content: center;\n min-height: 17rem;\n margin: 1.5rem -0.5rem 0.5rem;\n }\n\n .calendar-grid {\n display: grid;\n grid-template-columns: repeat(7, 1fr);\n width: 100%;\n }\n}\n",".NewContactModal {\n .modal-dialog {\n max-width: 28rem;\n }\n\n &__new-contact {\n display: flex;\n\n @media (max-width: 500px) {\n flex-direction: column;\n }\n\n &-fieldset {\n flex: 1;\n margin-inline-start: 1rem;\n @media (max-width: 500px) {\n margin-inline-start: 0;\n margin-top: 1rem;\n }\n }\n }\n\n &__profile {\n display: flex;\n align-items: center;\n margin-bottom: 2rem;\n\n &-info {\n margin-inline-start: 1rem;\n }\n }\n\n &__user-status {\n color: var(--color-text-secondary);\n }\n\n &__phone-number {\n font-size: 1.5rem;\n margin-bottom: 0;\n }\n\n &__help-text {\n font-size: 0.9375rem;\n color: var(--color-text-secondary);\n }\n}\n",".MessageSelectToolbar {\n position: absolute;\n bottom: calc(0.5rem + env(safe-area-inset-bottom));\n left: 0.5rem;\n right: 0.5rem;\n width: auto;\n z-index: 20;\n justify-content: center;\n margin: 0;\n\n .mask-image-disabled &::before {\n left: auto !important;\n right: auto !important;\n }\n\n .no-composer & {\n width: 100%;\n @media (max-width: 600px) {\n width: calc(100% - 1rem);\n }\n }\n\n @media (min-width: 601px) {\n left: 1rem;\n right: 1rem;\n bottom: 1.25rem;\n\n .no-composer & {\n top: -4.75rem;\n }\n }\n\n opacity: 1;\n\n & .MessageSelectToolbar-inner {\n transform: scaleX(1) translateX(0);\n }\n\n .no-composer .middle-column-footer-button-container + &,\n .no-composer .messaging-disabled + & {\n top: auto;\n }\n\n body.animation-level-0 & {\n transition: none !important;\n }\n\n &:not(.shown) {\n opacity: 0;\n pointer-events: none;\n\n .shown-inner {\n transform: scaleX(var(--toolbar-hidden-scale, 1));\n }\n\n &.with-composer .MessageSelectToolbar-inner {\n transform: scaleX(var(--toolbar-hidden-scale, 1)) translateX(var(--toolbar-translate-x, 0));\n }\n\n &:not(.with-composer) .MessageSelectToolbar-inner {\n transform: scaleX(var(--toolbar-unpin-hidden-scale)) translateX(0);\n }\n }\n\n &::before {\n z-index: -1;\n max-width: calc(100% * var(--composer-hidden-scale));\n width: 100%;\n left: auto;\n right: auto;\n }\n\n &-inner {\n width: 100%;\n max-width: calc(100% * var(--composer-hidden-scale));\n display: flex;\n align-items: center;\n padding: 0.25rem;\n\n background: var(--color-background);\n border-radius: var(--border-radius-messages);\n box-shadow: 0 1px 2px var(--color-default-shadow);\n font-weight: 500;\n\n transform: scaleX(1);\n transition: transform var(--select-transition), opacity var(--select-transition);\n\n @media (max-width: 600px) {\n padding: 0;\n max-width: none;\n }\n\n > .Button {\n width: 3rem;\n height: 3rem;\n\n @media (max-width: 600px) {\n width: 2.875rem;\n height: 2.875rem;\n }\n }\n }\n\n &-count {\n margin-left: 1rem;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n flex-grow: 1;\n\n @media (max-width: 600px) {\n margin-right: 0.5rem;\n }\n }\n\n &-actions {\n margin-left: auto;\n display: flex;\n\n .item {\n width: 100%;\n background: none;\n border: none !important;\n box-shadow: none !important;\n outline: none !important;\n display: flex;\n position: relative;\n overflow: hidden;\n line-height: 1.5rem;\n white-space: nowrap;\n color: var(--color-text);\n --ripple-color: rgba(0, 0, 0, 0.08);\n cursor: pointer;\n unicode-bidi: plaintext;\n\n padding: 0.6875rem;\n border-radius: 50%;\n\n i {\n font-size: 1.5rem;\n color: var(--color-text-secondary);\n }\n\n &.destructive {\n color: var(--color-error);\n i {\n color: inherit;\n }\n }\n\n &.disabled {\n opacity: 0.5;\n cursor: default;\n pointer-events: none;\n }\n\n &:not(.disabled):active {\n background-color: var(--color-item-active);\n transition: none !important;\n }\n\n @media (hover: hover) {\n &:hover, &:focus {\n background-color: var(--color-chat-hover);\n text-decoration: none;\n }\n }\n }\n }\n}\n",".ReactorListModal {\n --color-reaction: var(--color-message-reaction);\n --hover-color-reaction: var(--color-message-reaction-hover);\n --accent-color: var(--color-primary);\n\n .modal-content {\n overflow: hidden;\n }\n\n .Reactions {\n margin-bottom: 0.5rem;\n }\n\n .reaction-filter-emoji {\n margin-right: 0.25rem;\n }\n\n .reactor-list {\n max-height: 400px;\n overflow: auto;\n overflow-x: hidden;\n }\n\n .reactors-list-item {\n margin: 0;\n }\n\n .reactors-list-item .ListItem-button {\n display: flex;\n align-items: center;\n }\n\n .reactors-list-emoji {\n width: 1.5rem;\n height: 1.5rem;\n margin-inline-start: auto;\n }\n}\n",".EmojiInteractionAnimation {\n --start-x: 0;\n --start-y: 0;\n --scale: 0;\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n pointer-events: none;\n z-index: 1000;\n\n @keyframes show-interaction {\n from {\n transform: translate(0, 0) scale(var(--scale, 0));\n }\n\n to {\n transform: translate(-50%, -50%) scale(1);\n }\n }\n\n @keyframes show-interaction-reversed {\n from {\n transform: translate(50%, 0) scaleX(-1) scale(var(--scale, 0));\n }\n\n to {\n transform: translate(100%, -50%) scaleX(-1) scale(1);\n }\n }\n\n .AnimatedSticker {\n position: absolute;\n top: var(--start-y);\n left: var(--start-x);\n transform: scale(var(--scale), 0);\n transform-origin: left top;\n transition: 0.25s cubic-bezier(0.29, 0.81, 0.27, 0.99) opacity;\n }\n\n &.reversed .AnimatedSticker {\n transform: scale(var(--scale), 0) scaleX(-1);\n }\n\n &.playing .AnimatedSticker {\n animation: show-interaction forwards 0.25s cubic-bezier(0.29, 0.81, 0.27, 0.99);\n }\n\n &.reversed.playing .AnimatedSticker {\n animation: show-interaction-reversed forwards 0.25s cubic-bezier(0.29, 0.81, 0.27, 0.99);\n }\n\n &.hiding .AnimatedSticker {\n opacity: 0;\n }\n\n &.reversed.hiding .AnimatedSticker {\n opacity: 0;\n }\n}\n",".RecentContacts {\n .Loading {\n min-height: 75vh;\n }\n\n .top-peers-section {\n padding: 0.5rem 1rem;\n }\n\n .top-peers {\n height: 6rem;\n margin: 0 -1rem;\n overflow-x: auto;\n overflow-y: hidden;\n white-space: nowrap;\n\n scrollbar-width: none;\n scrollbar-color: rgba(0, 0, 0, 0);\n\n &::-webkit-scrollbar {\n height: 0;\n }\n\n &::-webkit-scrollbar-thumb {\n background-color: rgba(0, 0, 0, 0);\n }\n }\n\n .top-peer-item {\n display: inline-block;\n width: 4.5rem;\n height: 6rem;\n padding: 0.625rem 0.25rem;\n margin-left: 0.5rem;\n border-radius: var(--border-radius-default);\n cursor: pointer;\n position: relative;\n overflow: hidden;\n\n &:first-child {\n margin-left: 0.125rem;\n }\n\n &:last-child {\n margin-right: 0.125rem;\n }\n\n .Avatar {\n margin: 0 auto 0.375rem;\n }\n\n &:hover {\n background: var(--color-chat-hover);\n }\n\n .top-peer-name {\n text-align: center;\n white-space: nowrap;\n font-size: 0.75rem;\n overflow: hidden;\n text-overflow: ellipsis;\n\n .emoji-small {\n width: 1rem;\n height: 1rem;\n background-size: 1rem;\n margin-inline-end: 1px;\n vertical-align: -3px;\n }\n }\n }\n\n .recent-chats-header {\n display: flex;\n align-items: center;\n\n .Button {\n margin-left: auto;\n }\n\n &[dir=\"rtl\"] {\n .Button {\n margin-left: 0;\n margin-right: auto;\n }\n }\n }\n}\n",".ChatMessage {\n &:first-child {\n margin-top: 0.5rem;\n }\n &:hover,\n &.selected {\n .Avatar.online::after {\n border-color: var(--color-chat-hover);\n }\n }\n\n .ListItem-button {\n padding: 0.25rem 0.5rem;\n }\n\n .info {\n .title {\n flex-grow: 1;\n }\n\n h3 {\n font-size: 1rem;\n width: auto;\n }\n\n .subtitle {\n color: var(--color-text-secondary);\n\n .matching-text-highlight {\n color: var(--color-text);\n background: #cae3f7;\n border-radius: 0.25rem;\n padding: 0 0.125rem;\n display: inline-block;\n\n .theme-dark & {\n --color-text: #000;\n }\n }\n }\n\n .message {\n flex-grow: 1;\n color: var(--color-text-secondary);\n overflow: hidden;\n text-overflow: ellipsis;\n\n .sender-name {\n color: var(--color-text);\n\n &::after {\n content: \": \";\n }\n }\n\n img {\n width: 1.25rem;\n height: 1.25rem;\n object-fit: cover;\n border-radius: 0.125rem;\n vertical-align: -0.25rem;\n margin-right: 0.25rem;\n }\n\n .icon-play {\n position: relative;\n display: inline-block;\n font-size: 0.75rem;\n color: #fff;\n margin-inline-start: -1.25rem;\n margin-inline-end: 0.5rem;\n bottom: 0.0625rem;\n }\n }\n }\n\n .info-row {\n display: flex;\n justify-content: space-between;\n }\n\n &[dir=\"rtl\"] {\n .subtitle {\n text-align: right;\n }\n }\n}\n",".DateSuggest {\n display: flex;\n height: 2rem;\n flex-direction: row;\n justify-content: space-between;\n margin-left: 0.5rem;\n margin-bottom: 0.5rem;\n\n .date-item {\n display: flex;\n flex: 1 1 auto;\n min-width: 8rem;\n margin-top: 0.375rem;\n cursor: pointer;\n font-size: 0.875rem;\n font-weight: 500;\n color: var(--color-text-secondary);\n\n .icon-calendar {\n font-size: 1.25rem;\n margin-right: 0.25rem;\n }\n }\n}\n",".LeftSearch {\n display: flex;\n flex-direction: column;\n height: 100%;\n overflow: hidden;\n\n & > .Transition {\n flex: 1;\n overflow: hidden;\n }\n\n .TabList {\n padding-bottom: 1px;\n z-index: 1;\n }\n\n .documents-list {\n padding: 0 1.25rem 1.25rem;\n\n .ListItem {\n padding: 0.625rem 0;\n }\n }\n\n .section-heading {\n position: relative;\n padding-top: 1.25rem;\n padding-left: 1.25rem;\n margin: 0 0 1rem -1.25rem !important;\n\n font-weight: 500;\n font-size: 0.9375rem;\n color: var(--color-text-secondary);\n\n &::before {\n content: \"\";\n position: absolute;\n width: 100%;\n height: 1px;\n background: var(--color-borders);\n left: 0.625rem;\n top: -1px;\n }\n\n &[dir=\"rtl\"],\n &[dir=\"auto\"] {\n padding-left: 0;\n padding-right: 1.25rem;\n margin: 0 -1.25rem 0 1rem !important;\n text-align: initial;\n\n &::before {\n left: auto;\n right: 0.625rem;\n }\n }\n }\n\n .LeftSearch .search-section .section-heading,\n .RecentContacts .search-section .section-heading {\n margin-left: -1rem !important;\n width: calc(100% + 2rem);\n box-shadow: 0 -1px 0 0 var(--color-borders);\n\n &::before {\n display: none;\n }\n }\n\n .WebLink {\n display: flex;\n }\n\n .content:not(.with-seekline) {\n align-self: center;\n min-width: 0;\n flex-grow: 1;\n overflow: hidden;\n text-overflow: ellipsis;\n word-break: break-word;\n }\n\n .message-date {\n font-size: 0.75rem;\n color: var(--color-text-secondary);\n padding-left: 1rem;\n white-space: nowrap;\n }\n\n .media-list {\n display: grid;\n padding: 0.5rem;\n grid-template-columns: repeat(3, 1fr);\n grid-auto-rows: 1fr;\n grid-gap: 0.25rem;\n }\n\n .Audio {\n .ProgressSpinner {\n margin: -0.1875rem 0 0 -0.1875rem;\n }\n }\n\n .ListItem.search-result {\n .ChatInfo {\n .handle {\n unicode-bidi: plaintext;\n color: var(--color-primary);\n\n &::before {\n content: \"@\";\n html[lang=\"ar\"] & {\n content: \" ،@\";\n margin-inline-end: 0.25rem;\n }\n }\n\n &::after {\n content: \", \";\n color: var(--color-text-secondary);\n\n html[lang=\"ar\"] & {\n content: \"\";\n }\n }\n }\n\n &[dir=\"rtl\"] {\n .status {\n text-align: right;\n\n .handle {\n float: right;\n }\n }\n }\n }\n }\n\n .ListItem.search-result-message {\n .sender-name {\n color: var(--color-text);\n\n &::after {\n content: \": \";\n white-space: pre;\n }\n }\n }\n\n @media (max-width: 600px) {\n .ListItem {\n margin: 0 -0.625rem;\n }\n }\n\n .search-section {\n padding: 0 1rem 0.5rem;\n\n .section-heading {\n color: var(--color-text-secondary);\n font-size: 0.9375rem;\n font-weight: 500;\n margin-bottom: 0 !important;\n padding-top: 0.875rem;\n\n .Link {\n float: right;\n color: var(--color-links);\n font-weight: 400;\n margin-right: 1rem;\n\n &:focus,\n &:hover {\n text-decoration: underline;\n }\n }\n\n &[dir=\"rtl\"],\n &[dir=\"auto\"] {\n .Link {\n float: left;\n margin-left: 1rem;\n margin-right: 0;\n }\n }\n }\n\n .Loading {\n height: 4.5rem;\n margin-bottom: 0.5rem;\n }\n }\n\n .chat-selection {\n padding-top: 0.5rem;\n display: flex;\n flex-shrink: 0;\n flex-wrap: nowrap;\n justify-content: space-between;\n align-items: flex-end;\n box-shadow: inset 0 -1px 0 0 var(--color-borders);\n background-color: var(--color-background);\n -webkit-overflow-scrolling: touch;\n overflow-x: auto;\n overflow-y: hidden;\n\n scrollbar-color: rgba(0, 0, 0, 0);\n\n > .PickerSelectedItem {\n flex: 0 0 auto;\n\n &:last-child {\n margin-right: auto;\n }\n }\n\n &[dir=\"rtl\"] {\n > .PickerSelectedItem:last-child {\n margin-left: auto;\n margin-right: 0;\n }\n }\n }\n\n .NothingFound {\n height: 100%;\n }\n\n [dir=\"rtl\"] {\n .message-date {\n padding-left: 0;\n padding-right: 1rem;\n }\n }\n}\n","@mixin thumb-styles() {\n background: var(--color-primary);\n cursor: pointer;\n transform: scale(1);\n transition: transform 0.25s ease-in-out;\n\n &:hover {\n transform: scale(1.2);\n }\n}\n\n.CropModal {\n .modal-dialog {\n width: calc(100% - 2rem);\n max-width: 35rem;\n height: calc(100% - 1rem);\n max-height: 35rem;\n position: relative;\n }\n\n .modal-content,\n #avatar-crop {\n overflow: hidden;\n }\n\n .confirm-button {\n position: absolute;\n bottom: 1rem;\n right: 1rem;\n box-shadow: 0 1px 2px var(--color-default-shadow);\n }\n\n #avatar-crop {\n max-width: 25rem;\n margin: 0 auto;\n position: relative;\n\n &::before {\n content: \"\";\n display: block;\n padding-top: 100%;\n }\n\n .cr-boundary {\n position: absolute;\n top: 0;\n left: 0;\n border-radius: var(--border-radius-messages-small);\n }\n\n .cr-viewport {\n border: none;\n box-shadow: 0 0 2000px 2000px rgba(#7f7f7f, 0.5);\n }\n\n .cr-slider {\n // Note that while we're repeating code here, that's necessary as you can't comma-separate these type of selectors.\n // Browsers will drop the entire selector if it doesn't understand a part of it.\n\n &::-webkit-slider-runnable-track {\n background: var(--color-borders);\n }\n\n &::-moz-range-track {\n background: var(--color-borders);\n }\n\n &::-ms-track {\n background: var(--color-borders);\n }\n\n &::-webkit-slider-thumb {\n @include thumb-styles();\n }\n\n &::-moz-range-thumb {\n @include thumb-styles();\n }\n\n &::-ms-thumb {\n @include thumb-styles();\n }\n }\n }\n}\n","@import \"../../styles/mixins\";\n\n.AvatarEditable {\n label {\n margin-left: auto;\n margin-right: auto;\n width: 7.5rem;\n height: 7.5rem;\n margin-bottom: 2rem;\n display: flex !important;\n align-items: center;\n justify-content: center;\n background-color: var(--color-primary);\n border-radius: 50%;\n color: white;\n font-size: 3rem;\n cursor: pointer;\n position: relative;\n overflow: hidden;\n outline: none !important;\n\n input {\n display: none;\n }\n\n img {\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n }\n\n i {\n transform: scale(1);\n transition: transform 0.15s linear;\n z-index: var(--z-register-add-avatar);\n }\n\n // @optimization The weirdest workaround for screen animation lag\n @include while-transition() {\n input,\n i,\n &::after {\n display: none !important;\n }\n\n img {\n position: static !important;\n }\n }\n\n &:hover {\n i {\n transform: scale(1.2);\n }\n }\n\n &.filled {\n background-color: var(--color-background);\n\n &::after {\n content: \"\";\n display: block;\n position: absolute;\n left: 0;\n top: 0;\n width: 100%;\n height: 100%;\n background-color: rgba(black, 0.4);\n }\n }\n\n &.disabled {\n pointer-events: none;\n\n i {\n display: none;\n }\n\n &::after {\n display: none;\n }\n }\n }\n}\n",".ShowMoreButton {\n color: var(--text-color) !important;\n display: flex;\n align-items: center;\n text-align: left;\n text-transform: none;\n padding-left: 0.75rem !important;\n opacity: 1 !important;\n\n i {\n font-size: 1.5rem;\n margin-right: 2rem;\n color: var(--color-text-secondary);\n }\n\n .Spinner {\n top: 0.4375rem;\n }\n}\n",".SettingsFoldersChatsPicker {\n height: calc(100% - var(--header-height));\n\n .picker-header {\n box-shadow: 0 0 2px var(--color-default-shadow);\n\n .max-items-reached {\n margin-bottom: 0.5rem;\n margin-left: 0.5rem;\n flex-grow: 1;\n color: var(--color-text-secondary);\n }\n }\n\n .picker-list {\n padding: 0 0.5rem 0.5rem;\n\n .no-results {\n height: 10rem;\n }\n }\n\n .ListItem.picker-list-item {\n &.chat-type-item .ListItem-button {\n padding: 0.875rem 0.75rem;\n }\n\n &.chat-item .ListItem-button {\n padding: 0.5rem 0.75rem;\n }\n\n .Checkbox {\n margin-left: auto;\n padding-left: 3.25rem;\n }\n\n .chat-type {\n font-size: 1rem;\n font-weight: 400;\n margin: 0;\n }\n\n &[dir=\"rtl\"] {\n .Checkbox {\n margin-left: 0;\n margin-right: auto;\n padding-left: 0;\n padding-right: 3.25rem;\n }\n }\n }\n\n .settings-item-header {\n margin-left: 0.75rem;\n margin-top: 1rem;\n margin-bottom: 0.5rem;\n }\n\n .picker-list-divider {\n margin: 0.5rem -0.5rem 0;\n border-bottom: 1px solid var(--color-borders);\n }\n}\n",".settings-folders-recommended-item {\n width: 100%;\n display: flex;\n align-items: center;\n justify-content: space-between;\n}\n\n.settings-folders-list-item {\n .ChatInfo {\n display: flex;\n align-items: center;\n\n .Avatar {\n margin-left: -0.25rem;\n margin-right: 1.5rem;\n }\n\n .title {\n display: flex;\n justify-content: flex-start;\n align-items: center;\n\n h3 {\n font-size: 1rem;\n font-weight: 500;\n line-height: 1.3125;\n margin: 0;\n overflow: hidden;\n white-space: nowrap;\n text-overflow: ellipsis;\n text-align: left;\n }\n }\n\n .status {\n display: none;\n }\n\n &[dir=\"rtl\"] {\n .title h3 {\n text-align: right;\n }\n }\n }\n\n .ListItem-button {\n i {\n opacity: 0.9;\n }\n }\n\n &.color-primary .ListItem-button {\n color: var(--color-primary);\n\n i {\n opacity: 1;\n color: inherit;\n }\n }\n\n &[dir=\"rtl\"] {\n .Avatar {\n margin-left: 1.5rem;\n margin-right: -0.25rem;\n }\n }\n}\n\n.settings-item .ShowMoreButton {\n margin: 0 -1rem;\n width: calc(100% + 2rem);\n padding-left: 1rem !important;\n}\n",".SettingsStickerSet {\n .settings-item &.ListItem {\n margin-bottom: 0.5rem;\n }\n\n .StickerButton,\n .Button {\n width: 3rem;\n height: 3rem;\n margin: 0 0.5rem 0 0;\n padding: 0;\n flex: 0 0 3rem;\n }\n\n img {\n max-width: 100%;\n max-height: 100%;\n }\n\n .multiline-menu-item {\n display: flex;\n flex-direction: column;\n justify-content: center;\n }\n\n &[dir=\"rtl\"] {\n .StickerButton,\n .Button {\n margin: 0 0 0 0.5rem;\n }\n }\n}\n",".WallpaperTile {\n height: 0;\n padding-bottom: 100%;\n cursor: pointer;\n position: relative;\n\n .media-inner,\n &::after {\n position: absolute;\n left: 0;\n top: 0;\n width: 100%;\n height: 100%;\n }\n\n .media-inner {\n overflow: hidden;\n transform: scale(1);\n transition: transform 0.15s ease;\n\n img,\n canvas {\n position: absolute;\n left: 0;\n top: 0;\n width: 100%;\n height: 100%;\n object-fit: cover;\n }\n }\n\n &::after {\n content: \"\";\n display: block;\n border: 2px solid var(--color-primary);\n opacity: 0;\n transition: opacity 0.15s ease;\n }\n\n &.selected {\n &::after {\n opacity: 1;\n }\n\n .media-inner {\n transform: scale(0.9);\n }\n }\n\n .spinner-container {\n height: 100%;\n display: flex;\n align-items: center;\n justify-content: center;\n }\n}\n",".SettingsGeneralBackground {\n .settings-wallpapers {\n display: grid;\n padding: 0.5rem;\n grid-template-columns: repeat(3, 1fr);\n grid-auto-rows: 1fr;\n grid-gap: 0.25rem;\n }\n\n .Loading {\n height: auto !important;\n margin-top: 5rem;\n }\n}\n",".SettingsGeneralBackgroundColor {\n &:not(.is-dragging) .handle {\n transition: transform 300ms ease;\n }\n\n .color-picker,\n .hue-picker {\n position: relative;\n }\n\n .color-picker {\n margin-top: 1rem;\n height: 12rem;\n }\n\n .hue-picker {\n margin: 2rem 0;\n height: 0.5rem;\n }\n\n canvas {\n display: block;\n width: 100%;\n height: 100%;\n border-radius: var(--border-radius-default);\n cursor: pointer;\n }\n\n .handle {\n position: absolute;\n top: -0.75rem;\n left: -0.75rem;\n width: 1.5rem;\n height: 1.5rem;\n border: 0.125rem solid var(--color-white);\n border-radius: 0.75rem;\n cursor: grab;\n }\n\n .hue-picker .handle {\n top: -0.5rem;\n }\n\n .tools {\n margin-bottom: 0.625rem;\n display: flex;\n\n .input-group {\n margin-bottom: 0;\n\n &[dir=\"rtl\"] {\n label {\n transform: scale(0.75) translate(1.25rem, -2.25rem);\n }\n }\n }\n\n .input-group:first-child {\n margin-right: 0.5rem;\n }\n\n .input-group:last-child {\n margin-left: 0.5rem;\n }\n }\n\n .predefined-colors {\n display: grid;\n padding: 0.5rem;\n grid-template-columns: repeat(3, 1fr);\n grid-auto-rows: 1fr;\n grid-gap: 0.25rem;\n\n div {\n cursor: pointer;\n box-shadow: inset 0 0 0 0 var(--color-background);\n transition: box-shadow 300ms ease;\n\n &.active {\n border: 0.125rem solid var(--color-primary);\n box-shadow: inset 0 0 0 0.3125rem var(--color-background);\n }\n\n // A hack to make a square\n &:before {\n display: block;\n content: \"\";\n width: 100%;\n padding-top: 100%;\n pointer-events: none;\n }\n }\n }\n}\n","#monkey {\n position: relative;\n display: block;\n margin-left: auto;\n margin-right: auto;\n width: 7.5rem;\n height: 7.5rem;\n margin-bottom: 1.75rem;\n\n @media (min-width: 600px) and (min-height: 450px) {\n width: 10rem;\n height: 10rem;\n margin-bottom: 2.5rem;\n }\n\n &.big {\n width: 10rem;\n height: 10rem;\n }\n\n .AnimatedSticker {\n position: absolute;\n left: 0;\n top: 0;\n width: 100%;\n height: 100%;\n\n &.hidden {\n display: none\n }\n }\n\n .monkey-preview {\n width: 100%;\n height: 100%;\n background: url('../../assets/monkey.svg') center;\n background-size: 100%;\n }\n}\n","@import \"../../../styles/mixins\";\n\n#Settings {\n height: 100%;\n\n > div {\n display: flex;\n flex-direction: column;\n overflow: hidden;\n }\n\n .left-header {\n padding-right: 0.8125rem;\n }\n}\n\n.settings-main-header {\n display: flex;\n flex-grow: 1;\n justify-content: space-between;\n align-items: center;\n}\n\n.settings-more-menu {\n .bubble {\n width: auto;\n\n .MenuItem button {\n padding-left: 1rem !important;\n padding-right: 2rem !important;\n }\n }\n}\n\n.settings-content {\n background: var(--color-background);\n height: calc(100% - var(--header-height));\n\n overflow-y: auto;\n @include overflow-y-overlay();\n\n &.infinite-scroll {\n display: flex;\n flex-direction: column;\n\n & > .custom-scroll {\n flex: 1 1 auto;\n height: auto;\n }\n }\n\n #monkey {\n margin-top: 0.5rem;\n margin-bottom: 1rem;\n }\n\n .AnimatedEmoji {\n margin-top: 0.5rem;\n margin-bottom: 1.5rem;\n }\n}\n\n.settings-content-header {\n display: flex;\n flex-direction: column;\n align-items: center;\n padding: 0 1.5rem 1rem;\n text-align: center;\n\n .input-group {\n width: 100%;\n }\n}\n\n.settings-content-icon {\n width: 5rem;\n height: 5rem;\n margin-bottom: 2.5rem;\n position: relative;\n\n .AnimatedSticker {\n position: absolute;\n left: 0;\n top: 0;\n width: 100%;\n height: 100%;\n\n &.hidden {\n display: none;\n }\n }\n}\n\n.settings-main-menu {\n padding: 0 0.5rem 0.75rem;\n\n > .ChatExtra {\n padding: 0 0.5rem 0.3125rem;\n margin: 0 -0.5rem 0.625rem;\n box-shadow: inset 0 -0.0625rem 0 0 var(--color-background-secondary-accent);\n border-bottom: 0.625rem solid var(--color-background-secondary);\n\n .ListItem.narrow {\n margin-bottom: 0.25rem;\n }\n }\n}\n\n.settings-item {\n border-top: 1px solid var(--color-borders);\n padding: 1.5rem 1.5rem 1rem;\n\n &.no-border {\n border-top: none;\n }\n\n &-header {\n font-size: 1rem;\n color: var(--color-text-secondary);\n margin-bottom: 2rem;\n position: relative;\n\n &[dir=\"rtl\"] {\n text-align: right;\n }\n }\n\n &-slider {\n margin-top: 2rem;\n }\n\n &-description {\n font-size: 0.875rem;\n color: var(--color-text-secondary);\n margin-top: -0.5rem;\n margin-bottom: 1.5rem;\n\n .settings-content.two-fa & {\n font-size: 1rem;\n }\n\n &[dir=\"rtl\"] {\n text-align: right;\n unicode-bidi: plaintext;\n }\n }\n\n &-description-larger {\n font-size: 1rem;\n line-height: 1.3125rem;\n color: var(--color-text-secondary);\n margin-top: 2rem;\n margin-bottom: 0.75rem;\n\n &[dir=\"rtl\"] {\n text-align: right;\n }\n }\n\n .ListItem {\n margin: 0 -1rem 1rem;\n\n &:last-child {\n margin-bottom: 0;\n }\n\n .multiline-menu-item {\n white-space: initial;\n\n &.full-size {\n width: 100%;\n }\n\n .date {\n float: right;\n font-size: 0.75rem;\n margin-left: 1rem;\n color: var(--color-text-secondary);\n }\n\n .title,\n .subtitle {\n display: block;\n text-align: left;\n }\n\n .title {\n line-height: 1.25rem;\n }\n\n .subtitle {\n font-size: 0.875rem;\n line-height: 1.5rem;\n color: var(--color-text-secondary);\n\n & + .subtitle {\n margin-top: -0.25rem;\n }\n\n &.black {\n color: var(--color-text);\n }\n\n &.tight {\n line-height: 1.3125rem;\n margin-bottom: 0.1875rem;\n }\n }\n }\n\n &.destructive {\n .ListItem-button {\n color: var(--color-error);\n\n i {\n color: inherit;\n }\n }\n }\n\n &.blocked-list-item {\n margin-bottom: 0.5rem;\n\n .ListItem-button {\n align-items: center;\n text-align: left;\n padding: 0.5rem;\n }\n\n .Avatar {\n width: 3rem;\n height: 3rem;\n margin-right: 1rem;\n }\n\n .contact-name {\n font-size: 1rem;\n line-height: 1rem;\n margin-bottom: 0.25rem;\n font-weight: 500;\n }\n\n .contact-phone {\n font-size: 0.875rem;\n line-height: 1rem;\n color: var(--color-text-secondary);\n }\n }\n\n &[dir=\"rtl\"] {\n .multiline-menu-item {\n .title,\n .subtitle {\n text-align: right;\n }\n\n .date {\n float: left;\n margin-left: 0;\n margin-right: 1rem;\n }\n }\n }\n }\n\n .RangeSlider {\n margin-bottom: 1.0625rem;\n }\n\n .Checkbox,\n .radio-group {\n margin: 0 -1rem 0.5rem;\n }\n\n .radio-group {\n .Radio:last-child {\n margin-bottom: 0;\n }\n }\n\n .Radio + .Radio,\n .Checkbox + .Checkbox {\n margin-top: 2rem;\n }\n}\n\n.settings-fab-wrapper {\n height: calc(100% - var(--header-height));\n position: relative;\n overflow: hidden;\n\n .settings-content {\n height: 100%;\n }\n\n .FloatingActionButton {\n right: 1.5rem;\n }\n}\n\n.settings-edit-profile {\n padding: 0 1.5rem;\n}\n\n.username-link {\n color: var(--color-links);\n}\n\n.settings-quick-reaction {\n .Radio-main .label {\n display: flex;\n }\n\n .ReactionStaticEmoji {\n margin-inline-end: 1rem;\n width: 1.5rem;\n }\n}\n\n.SettingsDefaultReaction {\n .ReactionStaticEmoji {\n width: 1.5rem;\n height: 1.5rem;\n margin-inline-end: 2rem;\n }\n}\n","// @optimization\n@mixin while-transition() {\n .Transition > div:not(.Transition__slide--active) &, body.animating-right-column & {\n @content;\n }\n}\n\n@mixin overflow-y-overlay() {\n @supports (overflow-y: overlay) {\n overflow-y: overlay;\n\n //Workaround for Android <= 9\n overflow-x: hidden;\n }\n}\n\n@mixin reset-range() {\n input[type=\"range\"] {\n -webkit-appearance: none;\n display: block;\n width: 100%;\n height: 0.75rem;\n margin-bottom: 0.5rem;\n background: transparent;\n\n &:focus {\n outline: none;\n }\n\n &::-ms-track {\n width: 100%;\n cursor: pointer;\n\n background: transparent;\n border-color: transparent;\n color: transparent;\n }\n\n &::-webkit-slider-thumb {\n -webkit-appearance: none;\n }\n\n &::-moz-slider-thumb {\n -moz-appearance: none;\n }\n\n &::-webkit-slider-runnable-track {\n cursor: pointer;\n }\n\n &::-moz-range-track, &::-moz-range-progress {\n cursor: pointer;\n }\n }\n}\n",".NewChat {\n height: 100%;\n overflow: hidden;\n position: relative;\n\n &-inner {\n height: calc(100% - var(--header-height));\n overflow: hidden;\n\n &.step-2 {\n padding: 0 1.25rem;\n display: flex;\n flex-direction: column;\n\n .note, .error {\n font-size: 0.875rem;\n line-height: 1.25rem;\n margin: 1.5rem 0.25rem;\n }\n\n .error {\n color: var(--color-error);\n }\n\n .note {\n margin-top: -0.5625rem;\n color: var(--color-text-secondary);\n }\n\n .chat-members-heading {\n color: var(--color-text-secondary);\n font-size: 1rem;\n font-weight: 500;\n margin: 1rem 0.25rem;\n }\n\n .chat-members-list {\n margin: 0 -1.25rem;\n padding: 0 1rem 1rem;\n\n overflow-x: hidden;\n flex-grow: 1;\n }\n }\n }\n}\n",".ArchivedChats {\n height: 100%;\n overflow: hidden;\n\n .chat-list {\n height: calc(100% - var(--header-height));\n }\n}\n",".ReactionSelectorReaction {\n margin-left: 0.5rem;\n position: relative;\n min-width: 2rem;\n min-height: 2rem;\n\n &:first-child {\n margin-left: 0;\n }\n\n &__static {\n width: 100%;\n height: 100%;\n position: absolute;\n top: 0;\n left: 0;\n background: url('../../../assets/reaction-thumbs.png') no-repeat;\n background-size: auto 100%;\n }\n\n .AnimatedSticker {\n position: absolute;\n top: 0;\n left: 0;\n }\n\n &--compact {\n min-width: 1.5rem;\n min-height: 1.5rem;\n }\n}\n",".ReactionSelector {\n position: absolute;\n height: 3rem;\n background: var(--color-background);\n min-width: 3rem;\n max-width: calc(100% + 5rem);\n z-index: 100;\n border-radius: 3rem;\n filter: drop-shadow(0 0.25rem 0.125rem var(--color-default-shadow));\n right: -3rem;\n top: -3.5rem;\n\n &__bubble-big {\n border: 0.5rem solid var(--color-background);\n position: absolute;\n display: block;\n content: \"\";\n right: 1.5rem;\n bottom: -0.5rem;\n width: 1rem;\n height: 1rem;\n border-top: 0;\n border-left: 0;\n border-right: 0;\n border-radius: 0 0 50% 50%;\n z-index: -1;\n }\n\n &__bubble-small {\n position: absolute;\n display: block;\n content: \"\";\n right: 1.25rem;\n bottom: -1.25rem;\n width: 0.5rem;\n height: 0.5rem;\n border-radius: 50%;\n background: var(--color-background);\n }\n\n body.is-safari & {\n filter: none;\n box-shadow: 0 0.25rem 0.125rem var(--color-default-shadow);\n }\n\n body.is-safari &__bubble-small,\n body.is-safari &__bubble-big {\n box-shadow: 0 0.25rem 0.125rem var(--color-default-shadow);\n }\n\n &__items-wrapper {\n width: 100%;\n height: 100%;\n overflow: hidden;\n border-radius: 3rem;\n }\n\n &__items {\n padding: 0 1rem;\n width: 100%;\n height: 100%;\n overflow-x: auto;\n overflow: overlay;\n overflow-y: hidden;\n display: flex;\n cursor: pointer;\n align-items: center;\n border-radius: 3rem;\n }\n\n &--compact {\n background: var(--color-background-compact-menu-reactions);\n height: 2rem;\n top: -2.5rem;\n }\n\n &--compact &__items {\n padding: 0 0.5rem;\n }\n\n &--compact &__bubble-big {\n border-color: var(--color-background-compact-menu-reactions);\n }\n\n &--compact &__bubble-small {\n background: var(--color-background-compact-menu-reactions);\n }\n}\n",".MessageContextMenu {\n position: absolute;\n font-size: 1rem;\n\n .scrollable-content {\n overflow: auto;\n overflow: overlay;\n padding: 0.5rem 0;\n overscroll-behavior: contain;\n }\n\n &.compact .scrollable-content {\n padding: 0.25rem 0;\n }\n\n .bubble {\n transition: opacity 0.15s cubic-bezier(0.2, 0, 0.2, 1), transform 0.15s cubic-bezier(0.2, 0, 0.2, 1) !important;\n transform: scale(0.7);\n overflow: initial;\n padding: 0 !important;\n }\n\n &.with-reactions .bubble {\n margin-top: 3.5rem;\n }\n\n .backdrop {\n touch-action: none;\n }\n\n &--seen-by {\n max-width: 14rem;\n }\n\n &--seen-by-label {\n max-width: 100%;\n overflow: hidden;\n text-overflow: ellipsis;\n }\n\n .avatars {\n display: flex;\n align-self: center;\n margin-inline-start: auto;\n padding-inline-start: 1rem;\n\n .Avatar {\n border: 0.0625rem solid var(--color-background);\n margin-right: 0;\n box-sizing: content-box;\n\n &:not(:first-child) {\n margin-left: -0.1875rem;\n }\n }\n }\n}\n",".StickerSetModal {\n .modal-dialog {\n width: 26.25rem;\n max-width: 100%;\n }\n\n @media (max-width: 600px) {\n .modal-dialog {\n width: 18.875rem;\n }\n }\n\n .modal-header {\n padding: 0.5rem 1rem;\n }\n\n .modal-content {\n text-align: center;\n padding: 0;\n }\n\n .stickers {\n position: relative;\n width: 100%;\n height: 19rem;\n max-height: 50vh;\n overflow-y: auto;\n padding: 0 0.25rem;\n text-align: left;\n }\n\n .button-wrapper {\n padding: 0.5rem 0;\n border-top: 1px solid var(--color-borders);\n box-shadow: 0 0 2px var(--color-default-shadow);\n\n button {\n display: inline-block;\n }\n }\n\n .Loading {\n width: 100%;\n height: 22.8125rem;\n max-height: calc(50vh + 3.8125rem);\n }\n}\n\n",".HeaderMenuContainer {\n position: fixed;\n top: 0;\n left: 0;\n right: 0;\n height: 100vh;\n z-index: var(--z-header-menu);\n\n .Menu {\n position: absolute;\n font-size: 1rem;\n\n .backdrop {\n z-index: var(--z-header-menu-backdrop);\n }\n\n .bubble {\n z-index: var(--z-header-menu);\n --offset-y: calc(100% + 1rem);\n }\n }\n}\n","#MobileSearch > .header {\n position: absolute;\n top: 0;\n left: 0;\n z-index: var(--z-mobile-search);\n width: 100%;\n height: 3.5rem;\n background: var(--color-background);\n display: flex;\n align-items: center;\n padding-left: max(0.25rem, env(safe-area-inset-left));\n padding-right: max(0.5rem, env(safe-area-inset-right));\n\n > .SearchInput {\n margin-left: 0.25rem;\n flex: 1;\n }\n}\n\n#MobileSearch > .footer {\n position: absolute;\n bottom: 0;\n left: 0;\n z-index: var(--z-mobile-search);\n width: 100%;\n height: 3.5rem;\n background: var(--color-background);\n display: flex;\n align-items: center;\n padding-left: max(1rem, env(safe-area-inset-left));\n padding-right: max(0.5rem, env(safe-area-inset-right));\n\n body:not(.keyboard-visible) & {\n padding-bottom: env(safe-area-inset-bottom);\n height: calc(3.5rem + env(safe-area-inset-bottom));\n }\n\n > .counter {\n flex: 1;\n color: var(--color-text-secondary);\n }\n}\n\n#MobileSearch:not(.active) {\n .header, .footer {\n // `display: none` will prevent synchronous focus on iOS\n transform: translateX(-999rem);\n }\n}\n",".MentionTooltip {\n width: calc(100% - 4rem);\n max-width: 20rem;\n flex-direction: column;\n\n z-index: -1;\n\n @media (max-width: 600px) {\n width: calc(100% - 3rem);\n }\n\n .ListItem.chat-item-clickable {\n margin: 0;\n\n .ListItem-button {\n border-radius: 0;\n }\n\n .info {\n display: flex;\n }\n\n .title {\n margin-inline-end: 0.625rem;\n max-width: 70%;\n }\n\n .handle {\n font-size: 1rem;\n }\n\n &[dir=\"rtl\"] {\n .status {\n width: auto;\n }\n }\n }\n\n .ChatInfo {\n .title h3 {\n line-height: 1.25;\n }\n\n .Avatar {\n margin-right: 0.7em;\n }\n\n .handle {\n &::before {\n content: \"@\";\n }\n }\n\n .user-status {\n display: none !important;\n }\n }\n}\n",".AttachmentModal {\n --border-radius-default: 0.625rem;\n\n .modal-dialog {\n max-width: 26.25rem;\n @media (max-width: 600px) {\n max-height: 100%;\n padding-bottom: 1.5rem;\n }\n }\n\n .modal-content {\n padding: 0.5rem 1.25rem 1.875rem;\n max-height: calc(100vh - 3.25rem);\n @media (max-width: 600px) {\n padding-bottom: 0.25rem;\n }\n }\n\n .media-wrapper {\n max-height: 26rem;\n overflow: auto;\n display: flex;\n flex-wrap: wrap;\n margin-bottom: 1.5rem;\n\n video,\n img {\n flex: 1;\n width: calc(50% - 0.15rem);\n height: 12rem;\n margin-bottom: 0.3125rem;\n border-radius: var(--border-radius-default);\n object-fit: cover;\n\n &:only-child {\n height: auto;\n max-height: 25rem;\n margin-bottom: 0;\n }\n\n &:nth-child(even) {\n margin-left: 0.3125rem;\n }\n }\n }\n\n .document-wrapper {\n max-height: 25rem;\n overflow: auto;\n flex-shrink: 0;\n display: flex;\n flex-direction: column;\n margin: 0.75rem 0 1.75rem;\n\n .File:not(:last-child) {\n margin-bottom: 1.5rem;\n }\n\n .file-icon {\n cursor: default !important;\n }\n }\n\n .attachment-caption-wrapper {\n position: relative;\n\n .form-control {\n background: var(--color-background);\n }\n\n .MentionTooltip {\n right: 0 !important;\n z-index: 0;\n }\n }\n\n .drop-target {\n position: relative;\n\n &::before,\n &::after {\n content: \"\";\n position: absolute;\n left: 0;\n top: 0;\n right: 0;\n bottom: 0;\n border-radius: var(--border-radius-default);\n pointer-events: none;\n\n opacity: 0;\n transition: 250ms opacity;\n z-index: 1;\n }\n\n &::before {\n background-image: var(--drag-target-border-hovered);\n background-color: var(--color-background);\n }\n\n &::after {\n content: attr(data-attach-description);\n display: flex;\n justify-content: center;\n align-items: center;\n color: var(--color-primary);\n }\n }\n\n &.hovered {\n .drop-target::before {\n opacity: 0.95;\n }\n\n .drop-target::after {\n opacity: 1;\n }\n\n .attachment-caption-wrapper,\n .document-wrapper,\n .media-wrapper {\n pointer-events: none;\n }\n\n .document-wrapper,\n .media-wrapper {\n border-radius: var(--border-radius-default);\n }\n }\n\n &--send-wrapper {\n position: relative;\n }\n\n .CustomSendMenu {\n bottom: auto;\n\n .is-pointer-env & > .backdrop {\n width: 100%;\n top: -2.25rem;\n bottom: auto;\n height: 2.75rem;\n }\n }\n}\n",".PollModal {\n .modal-dialog {\n max-width: 26.25rem;\n max-height: calc(100vh - 5rem);\n }\n\n .modal-content {\n padding: 0.5rem 1.25rem 1.875rem;\n min-height: 4.875rem;\n }\n\n .modal-header-condensed {\n margin-bottom: 1rem;\n }\n\n .options-header {\n color: var(--color-text-secondary);\n font-size: 1rem;\n font-weight: 500;\n margin: 1.5rem 0.25rem;\n }\n\n .options-list {\n margin: 1rem -0.75rem -0.5rem;\n padding: 0 0.75rem;\n border-top: 1px solid var(--color-chat-hover);\n max-height: 20rem;\n overflow: auto;\n\n &.overflown {\n padding: 0 0.4375rem 0.5rem 0.75rem;\n }\n\n @media (max-width: 600px) {\n overflow: hidden;\n max-height: none;\n\n &,\n &.overflown {\n padding: 0 0.75rem;\n }\n }\n }\n\n .option-wrapper {\n position: relative;\n\n .form-control {\n padding-right: 3rem;\n }\n\n .option-remove-button {\n position: absolute;\n top: 0.3125rem;\n right: 0.3125rem;\n }\n }\n\n .quiz-mode {\n margin-top: 1.5rem;\n\n .options-header {\n margin-bottom: 0.5rem;\n }\n\n .note {\n margin-top: 0.5rem;\n }\n }\n\n .note {\n font-size: smaller;\n color: var(--color-text-secondary);\n }\n\n .error {\n font-size: smaller;\n color: var(--color-error);\n margin: -1rem 0 1rem 0.25rem;\n }\n\n .input-group:last-child {\n margin-bottom: 0.5rem;\n }\n}\n",".EmojiButton {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 2.5rem;\n height: 2.5rem;\n margin: 0.125rem;\n border-radius: var(--border-radius-messages-small);\n cursor: pointer;\n font-size: 1.75rem;\n line-height: 2.5rem;\n background-color: transparent;\n transition: background-color 0.15s ease;\n\n .mac-os-fix & {\n line-height: inherit;\n }\n\n &.focus,\n &:hover {\n background-color: var(--color-background-selected);\n }\n\n & > img {\n width: 2rem;\n height: 2rem;\n }\n}\n",".EmojiPicker {\n height: 100%;\n\n &-main {\n height: calc(100% - 3rem);\n overflow-y: auto;\n padding: 0.5rem;\n\n @media (max-width: 600px) {\n padding: 0.5rem 0.25rem;\n }\n\n .symbol-set-container {\n display: flex;\n flex-wrap: wrap;\n }\n }\n\n &-header {\n height: 3rem;\n border-bottom: 1px solid var(--color-borders);\n display: flex;\n align-items: center;\n justify-content: space-around;\n box-shadow: 0 0 2px var(--color-default-shadow);\n\n @media (max-width: 600px) {\n overflow-x: auto;\n overflow-y: hidden;\n display: block;\n white-space: nowrap;\n padding: 0.4375rem 0;\n\n scrollbar-width: none;\n scrollbar-color: rgba(0, 0, 0, 0);\n\n &::-webkit-scrollbar {\n height: 0;\n }\n\n &::-webkit-scrollbar-thumb {\n background-color: rgba(0, 0, 0, 0);\n }\n\n .symbol-set-button {\n display: inline-flex;\n vertical-align: middle;\n }\n\n // Spacer to counter last button margin not being accounted in scroll width\n &::after {\n content: \"\";\n display: block;\n flex-shrink: 0;\n width: 1px;\n height: 1rem;\n }\n }\n }\n}\n",".StickerPicker {\n height: 100%;\n\n &-main {\n position: relative;\n height: calc(100% - 3rem);\n overflow-y: auto;\n padding: 0.5rem;\n\n @media (max-width: 600px) {\n padding: 0.5rem 0.25rem;\n }\n }\n\n &-header {\n height: 3rem;\n border-bottom: 1px solid var(--color-borders);\n padding: 0.125rem 0;\n overflow-x: auto;\n overflow-y: hidden;\n white-space: nowrap;\n box-shadow: 0 0 2px var(--color-default-shadow);\n\n scrollbar-width: none;\n scrollbar-color: rgba(0, 0, 0, 0);\n\n &::-webkit-scrollbar {\n height: 0;\n }\n\n &::-webkit-scrollbar-thumb {\n background-color: rgba(0, 0, 0, 0);\n }\n\n // Spacer to counter last button margin not being accounted in scroll width\n &::after {\n content: \"\";\n display: block;\n flex-shrink: 0;\n width: 1px;\n height: 1rem;\n }\n\n\n .sticker-set-button {\n display: inline-flex;\n vertical-align: middle;\n align-items: center;\n justify-content: center;\n\n &.StickerButton {\n background-size: 2rem;\n\n video, img, .AnimatedSticker {\n top: 0.375rem;\n left: 0.375rem;\n width: 2rem;\n height: 2rem;\n }\n }\n\n .sticker-set-cover {\n width: 2rem;\n height: 2rem;\n position: relative;\n display: flex;\n align-items: center;\n justify-content: center;\n\n video, img, .AnimatedSticker {\n width: 100%;\n height: 100%;\n position: absolute;\n top: 0;\n left: 0;\n }\n }\n }\n }\n\n .symbol-set-container {\n width: 25rem;\n line-height: 0;\n\n @media (max-width: 600px) {\n width: 100%;\n }\n }\n\n .sticker-set-button {\n width: 2.75rem !important;\n height: 2.75rem;\n margin: 0 0.25rem;\n border-radius: var(--border-radius-messages-small);\n }\n}\n",".GifButton {\n display: flex;\n align-items: center;\n justify-content: center;\n height: 6.25rem;\n background-color: transparent;\n position: relative;\n\n &:hover {\n .gif-unsave-button {\n opacity: 0.8;\n }\n }\n\n &:last-child {\n margin-bottom: 1rem;\n }\n\n &.vertical {\n grid-column-end: span 1;\n }\n\n &.horizontal {\n grid-column-end: span 2;\n }\n\n &.interactive {\n cursor: pointer;\n }\n\n .thumbnail {\n width: 100%;\n height: 100%;\n background: transparent no-repeat center;\n background-size: cover !important;\n }\n\n .preview, video {\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n object-fit: cover;\n\n -webkit-touch-callout: none;\n user-select: none;\n }\n\n .Spinner {\n position: absolute;\n pointer-events: none;\n }\n\n .gif-unsave-button {\n position: absolute;\n top: 0.25rem;\n right: 0.25rem;\n width: 1rem;\n height: 1rem;\n padding: 0.125rem;\n border-radius: 0.25rem;\n transition: 0.15s opacity ease-in-out;\n\n &-icon {\n font-size: 0.75rem;\n }\n\n opacity: 0;\n z-index: 1;\n }\n\n .gif-context-menu {\n position: absolute;\n\n .bubble {\n width: auto;\n }\n }\n}\n",".GifPicker {\n display: grid;\n grid-template-columns: repeat(6, 1fr);\n grid-auto-rows: 6.25rem;\n grid-gap: 0.25rem;\n grid-auto-flow: dense;\n height: 100%;\n overflow-y: auto;\n padding: 0.25rem;\n\n @supports (overflow: overlay) {\n overflow-y: overlay;\n }\n\n .Loading, .picker-disabled {\n grid-column: 1 / -1;\n height: var(--menu-height);\n }\n}\n","@import \"../../../styles/mixins\";\n\n.SymbolMenu {\n &.mobile-menu {\n position: fixed;\n left: 0;\n right: 0;\n bottom: 0;\n background: var(--color-background);\n z-index: 1;\n\n transition: transform var(--layer-transition);\n padding-right: env(safe-area-inset-right);\n padding-bottom: env(safe-area-inset-bottom);\n padding-left: env(safe-area-inset-left);\n transform: translate3d(\n 0,\n calc(var(--symbol-menu-height) + var(--symbol-menu-footer-height) + env(safe-area-inset-bottom)),\n 0\n );\n\n &.open {\n transform: translate3d(0, 0, 0);\n\n body.is-media-viewer-open & {\n transform: translate3d(0, calc(var(--symbol-menu-height) + var(--symbol-menu-footer-height)), 0);\n }\n }\n\n body.animation-level-0 & {\n transition: none;\n }\n\n &:not(.middle-column-open) {\n transform: translate3d(100vw, 0, 0) !important;\n }\n }\n\n &-main {\n height: var(--symbol-menu-height);\n max-height: calc(100vh - var(--symbol-menu-footer-height) - env(safe-area-inset-bottom));\n }\n\n &-footer {\n height: var(--symbol-menu-footer-height);\n border-top: 1px solid var(--color-borders);\n display: flex;\n align-items: center;\n justify-content: center;\n box-shadow: 0 0 2px var(--color-default-shadow);\n position: relative;\n\n .Button {\n flex-shrink: 0;\n width: 2.125rem !important;\n height: 2.125rem;\n margin: 0 0.25rem;\n padding: 0;\n\n &.activated {\n pointer-events: none;\n }\n\n &.symbol-tab-button {\n margin: 0 0.75rem;\n }\n\n &.symbol-search-button {\n position: absolute;\n left: 0.25rem;\n }\n\n &.symbol-delete-button {\n position: absolute;\n right: 0.25rem;\n }\n }\n }\n\n .Transition.slide {\n height: 100%;\n\n .Loading {\n height: var(--symbol-menu-height);\n }\n }\n\n .is-pointer-env & {\n > .backdrop {\n position: absolute;\n top: -1rem;\n left: 0;\n right: auto;\n width: 3.5rem;\n height: 4.5rem;\n }\n }\n\n .Button.bot-commands ~ &,\n .Button.send-as-button ~ & {\n .is-pointer-env & > .backdrop {\n left: 3rem;\n width: 3.25rem;\n }\n }\n\n .bubble {\n width: calc(var(--symbol-menu-width) + 0.25rem); // Reserve width for scrollbar\n padding: 0;\n overflow: hidden;\n\n @supports (overflow: overlay) {\n width: var(--symbol-menu-width);\n }\n }\n\n .picker-disabled {\n height: var(--symbol-menu-height);\n display: flex;\n align-items: center;\n justify-content: center;\n color: var(--color-text-secondary);\n }\n\n .symbol-close-button {\n display: none;\n position: absolute;\n right: max(calc(0.25rem), env(safe-area-inset-right));\n top: max(calc(0.25rem), env(safe-area-inset-top));\n }\n\n @media (orientation: landscape) {\n .symbol-close-button {\n display: block;\n }\n }\n}\n\n.symbol-set {\n margin-bottom: 1rem;\n\n &-name {\n font-size: 1rem;\n line-height: 1.6875rem;\n font-weight: 500;\n margin: 0;\n padding-left: 0.5rem;\n color: rgba(var(--color-text-secondary-rgb), 0.75);\n overflow: hidden;\n white-space: nowrap;\n text-overflow: ellipsis;\n text-align: initial;\n unicode-bidi: plaintext;\n }\n\n &-container {\n text-align: initial;\n }\n\n &-button {\n flex-shrink: 0;\n width: 2.125rem !important;\n height: 2.125rem;\n margin: 0 0.25rem;\n padding: 0;\n }\n\n @include while-transition() {\n overflow: hidden;\n }\n\n .symbol-set-container {\n &:not(.shown) {\n display: block;\n }\n\n &.closing {\n transition: none;\n }\n }\n}\n",".BotCommand {\n margin: 0 !important;\n\n .ListItem-button {\n border-radius: 0;\n }\n\n .multiline-item {\n padding: 0 1rem;\n\n .subtitle {\n padding-top: 0.25rem;\n line-height: 1.3125;\n }\n }\n\n &.with-avatar {\n .multiline-item {\n padding: 0;\n display: flex;\n }\n\n .content-inner {\n flex: 1;\n }\n }\n}\n",".BotCommandTooltip {\n width: calc(100% - 4rem);\n max-width: 26rem;\n flex-direction: column;\n\n z-index: -1;\n\n @media (max-width: 600px) {\n width: calc(100% - 3rem);\n }\n}\n",".BotCommandMenu {\n .menu-container {\n width: calc(100% - 4rem);\n max-width: 20rem;\n max-height: 40vh;\n overflow: auto;\n flex-direction: column;\n\n @media (max-width: 600px) {\n width: calc(100% - 3rem);\n }\n }\n\n .is-pointer-env & {\n > .backdrop {\n position: absolute;\n top: -1rem;\n left: 0;\n right: auto;\n width: 3.5rem;\n height: 4.5rem;\n }\n }\n}\n",".StickerTooltip {\n display: grid;\n grid-template-columns: repeat(auto-fill, minmax(5rem, 1fr));\n grid-auto-rows: auto;\n place-items: center;\n\n &.hidden {\n display: none;\n }\n}\n",".CustomSendMenu {\n position: relative;\n bottom: 3.5rem;\n\n .is-pointer-env & {\n > .backdrop {\n position: absolute;\n top: -1rem;\n left: auto;\n right: 0;\n width: 3.5rem;\n }\n }\n\n\n .media-disabled > button {\n white-space: normal;\n }\n\n .bubble {\n width: 16rem;\n }\n}\n",".EmojiTooltip {\n display: flex;\n padding-left: 0.25rem;\n\n overflow-x: auto;\n @supports (overflow-x: overlay) {\n overflow-x: overlay;\n }\n overflow-y: hidden;\n\n .EmojiButton {\n flex: 0 0 2.5rem;\n }\n}\n",".BaseResult {\n &.chat-item-clickable > .ListItem-button {\n padding-left: 1.25rem !important;\n padding-right: 1.25rem !important;\n\n .title {\n display: block;\n text-overflow: ellipsis;\n }\n }\n\n .thumb {\n background-color: var(--color-background-secondary);\n flex: 0 0 3rem;\n width: 3rem;\n height: 3rem;\n line-height: 3rem;\n border-radius: var(--border-radius-default-tiny);\n display: inline-flex;\n align-content: center;\n justify-content: center;\n margin-inline-end: 0.5rem;\n overflow: hidden;\n font-size: 1.5rem;\n\n img:not(.emoji) {\n width: 100%;\n object-fit: cover;\n }\n\n img.emoji {\n width: 1.5rem;\n height: 1.5rem;\n margin: 0.75rem 0 0;\n }\n }\n\n .content-inner {\n min-width: 0;\n }\n\n .title {\n font-weight: 500;\n text-align: left;\n unicode-bidi: plaintext;\n }\n\n .description {\n white-space: normal;\n display: -webkit-box;\n -webkit-line-clamp: 2;\n -webkit-box-orient: vertical;\n overflow: hidden;\n text-overflow: ellipsis;\n text-align: left;\n unicode-bidi: plaintext;\n }\n &[dir=\"rtl\"] .title,\n &[dir=\"rtl\"] .description {\n text-align: right;\n }\n}\n",".MediaResult {\n height: 0;\n padding-bottom: 100%;\n overflow: hidden;\n position: relative;\n cursor: pointer;\n\n img {\n position: absolute;\n left: 0;\n top: 0;\n width: 100%;\n height: 100%;\n object-fit: cover;\n }\n}\n",".InlineBotTooltip {\n .switch-pm .title {\n margin: 0 auto;\n font-weight: 500;\n }\n\n &.gallery {\n display: grid;\n grid-template-columns: repeat(4, 1fr);\n grid-gap: 1px;\n padding: 0;\n\n @media (max-width: 600px) {\n grid-template-columns: repeat(3, 1fr);\n }\n\n .switch-pm {\n grid-column: 1 / -1;\n .ListItem-button {\n border-bottom-left-radius: 0;\n border-bottom-right-radius: 0;\n }\n }\n\n .GifButton {\n grid-column-end: initial;\n }\n\n .StickerButton {\n width: initial;\n height: 0;\n margin: 0;\n padding-bottom: 100%;\n border-radius: 0;\n\n .AnimatedSticker,\n img,\n canvas {\n position: absolute;\n top: 0;\n left: 0;\n width: 100% !important;\n height: 100% !important;\n\n @media (min-width: 600px) {\n top: 0.25rem;\n left: 0.25rem;\n width: calc(100% - 0.5rem) !important;\n height: calc(100% - 0.5rem) !important;\n }\n }\n }\n }\n}\n",".SendAsMenu {\n .send-as-title {\n font-weight: 500;\n line-height: 1.25rem;\n word-break: break-word;\n margin-inline-start: 1rem;\n margin-block: 0.5rem;\n }\n\n .menu-container {\n width: calc(100% - 4rem);\n max-width: 20rem;\n max-height: 40vh;\n overflow: auto;\n flex-direction: column;\n\n @media (max-width: 600px) {\n width: calc(100% - 3rem);\n }\n }\n\n .is-pointer-env & {\n > .backdrop {\n z-index: 2;\n position: absolute;\n top: -1rem;\n left: 0;\n right: auto;\n width: 3.5rem;\n height: 4.5rem;\n }\n }\n}\n\n.SendAsItem {\n margin: 0 !important;\n $border-size: 2px;\n\n .Avatar.selected {\n margin-right: 0.75rem;\n position: relative;\n width: calc(2.125rem - #{$border-size * 2});\n height: calc(2.125rem - #{$border-size * 2});\n\n &::before {\n display: block;\n content: \"\";\n position: absolute;\n top: #{-$border-size * 2};\n left: #{-$border-size * 2};\n border: $border-size solid var(--color-primary);\n width: calc(100% + #{$border-size * 4});\n height: calc(100% + #{$border-size * 4});\n border-radius: 50%;\n }\n }\n\n .ListItem-button {\n padding: 0.5625rem 1rem !important;\n border-radius: 0;\n align-items: center;\n }\n\n .info {\n margin-inline-start: 0.5rem;\n }\n\n .subtitle {\n font-size: 0.9375rem;\n color: var(--color-text-secondary);\n line-height: 1.3125;\n }\n}\n",".RightSearch {\n height: 100%;\n padding: 0 0.5rem;\n overflow-y: auto;\n\n .helper-text {\n padding: 1rem;\n margin-bottom: 0.125rem;\n font-weight: 500;\n color: var(--color-text-secondary);\n unicode-bidi: plaintext;\n text-align: initial;\n }\n}\n",".StickerSearch {\n height: 100%;\n padding: 0 0.5rem;\n overflow-y: auto;\n\n .helper-text {\n padding: 1rem;\n margin-bottom: 0.125rem;\n font-weight: 500;\n color: var(--color-text-secondary);\n }\n\n .sticker-set {\n margin-bottom: 1rem;\n\n &-header {\n display: flex;\n justify-content: space-between;\n padding: 0.5rem;\n\n .title-wrapper {\n overflow: hidden;\n }\n\n .title {\n font-size: 1rem;\n line-height: 1.6875rem;\n margin: 0;\n overflow: hidden;\n white-space: nowrap;\n text-overflow: ellipsis;\n }\n\n .count {\n color: var(--color-text-secondary);\n margin: 0;\n }\n\n .Button {\n flex-shrink: 0;\n margin-left: 1rem;\n\n &.is-added {\n background: var(--color-chat-hover);\n color: var(--color-text-secondary);\n\n &:hover,\n &:active {\n background: var(--color-item-active) !important;\n }\n }\n }\n }\n\n &-main {\n display: flex;\n flex-wrap: nowrap;\n overflow: hidden;\n }\n\n &[dir=\"rtl\"] {\n .title-wrapper {\n text-align: right;\n }\n\n .Button {\n margin-left: 0;\n margin-right: 1rem;\n }\n }\n }\n\n .StickerButton {\n margin: 0.125rem;\n }\n}\n",".GifSearch {\n height: 100%;\n padding: 0.25rem;\n\n .gif-container {\n height: 100%;\n overflow: auto;\n\n &.grid {\n display: grid;\n grid-template-columns: repeat(6, 1fr);\n grid-auto-rows: 6.25rem;\n grid-gap: 0.25rem;\n grid-auto-flow: dense;\n }\n }\n\n .helper-text {\n color: var(--color-text-meta);\n margin-top: 2rem;\n text-align: center;\n }\n}\n",".StatisticsOverview {\n padding: 1rem 0.75rem;\n margin-bottom: 1rem;\n border-bottom: 1px solid var(--color-borders);\n\n &__header {\n margin-bottom: 0.5rem;\n font-weight: 500;\n display: flex;\n align-items: center;\n justify-content: space-between;\n }\n\n &__title {\n margin-right: 2em;\n padding-left: 0.25rem;\n font-size: 16px;\n color: var(--text-color);\n line-height: 30px;\n text-transform: lowercase;\n\n &:first-letter {\n text-transform: uppercase;\n }\n }\n\n &__caption {\n font-size: 0.75rem;\n text-align: right;\n }\n\n &__table {\n width: 100%;\n\n &-heading {\n font-size: 0.9375rem;\n color: var(--color-text-secondary);\n }\n\n &-value {\n font-weight: 500;\n font-size: 1rem;\n }\n }\n\n &__value {\n font-size: 0.6875rem;\n color: var(--color-text-green);\n\n &.negative {\n color: var(--color-error);\n }\n }\n}\n",".StatisticsRecentMessage {\n position: relative;\n padding-left: 3rem;\n\n &__summary {\n flex: 1;\n overflow: hidden;\n white-space: nowrap;\n text-overflow: ellipsis;\n margin-right: 0.75rem;\n\n .media-preview__image {\n width: 2.5rem;\n height: 2.5rem;\n position: absolute;\n left: 0;\n top: 0;\n object-fit: cover;\n border-radius: 0.25rem;\n margin-inline-end: 0.25rem;\n\n &.round {\n border-radius: 0.625rem;\n }\n }\n\n .icon-play {\n position: relative;\n display: inline-block;\n font-size: 0.75rem;\n color: #fff;\n margin-inline-start: -1.25rem;\n margin-inline-end: 0.5rem;\n bottom: 0.0625rem;\n }\n }\n\n &__title {\n display: flex;\n align-items: center;\n line-height: 1.25rem;\n }\n\n &__info {\n display: flex;\n align-items: center;\n width: 100%;\n color: var(--color-text-meta);\n }\n\n &__meta {\n font-size: 0.75rem;\n }\n\n &__date {\n flex: 1;\n font-size: 0.8125rem;\n }\n}\n",".Statistics {\n height: 100%;\n overflow-x: hidden;\n overflow-y: hidden;\n\n &__messages {\n padding: 1rem 0.75rem;\n border-top: 1px solid var(--color-borders);\n\n &-title {\n padding-left: 0.25rem;\n font-size: 16px;\n color: var(--text-color);\n line-height: 30px;\n text-transform: lowercase;\n\n &:first-letter {\n text-transform: uppercase;\n }\n }\n }\n\n &.ready {\n overflow-y: scroll !important;\n }\n\n &__graph {\n margin-bottom: 1rem;\n border-bottom: 1px solid var(--color-borders);\n\n opacity: 1;\n transition: opacity 0.3s ease;\n\n &:last-of-type {\n margin-bottom: 0;\n border-bottom: none;\n }\n\n &.hidden {\n opacity: 0;\n }\n }\n\n .lovely-chart--container {\n font: inherit !important;\n font-size: 13px !important;\n }\n\n .lovely-chart--header {\n margin: 0 1rem;\n }\n\n .lovely-chart--header,\n .lovely-chart--tooltip-title,\n .lovely-chart--tooltip-dataset-value,\n .lovely-chart--percentage-title {\n font-weight: 500 !important;\n }\n\n .lovely-chart--container-type-pie {\n &.lovely-chart--state-zoomed-in > canvas {\n animation-name: pie-slim-in !important;\n }\n\n &:not(.lovely-chart--state-zoomed-in) > canvas {\n animation-name: pie-slim-out !important;\n }\n }\n}\n\n@keyframes pie-slim-in {\n 0% {\n clip-path: circle(80% at center calc(50% - 7.5px));\n -webkit-clip-path: circle(80% at center calc(50% - 7.5px));\n transform: rotate(-360deg);\n }\n\n 25% {\n clip-path: circle(40% at center calc(50% - 7.5px));\n -webkit-clip-path: circle(40% at center calc(50% - 7.5px));\n transform: rotate(-360deg);\n }\n\n 75% {\n clip-path: circle(40% at center calc(50% - 7.5px));\n -webkit-clip-path: circle(40% at center calc(50% - 7.5px));\n transform: rotate(0);\n }\n}\n\n@keyframes pie-slim-out {\n 0% {\n clip-path: circle(40% at center calc(50% - 7.5px));\n -webkit-clip-path: circle(40% at center calc(50% - 7.5px));\n transform: rotate(360deg);\n }\n\n 50% {\n clip-path: circle(40% at center calc(50% - 7.5px));\n -webkit-clip-path: circle(40% at center calc(50% - 7.5px));\n transform: rotate(0);\n }\n\n 75% {\n clip-path: circle(80% at center calc(50% - 7.5px));\n -webkit-clip-path: circle(80% at center calc(50% - 7.5px));\n transform: rotate(0);\n }\n}\n",".PollAnswerResults {\n border-bottom: 1px solid var(--color-borders);\n padding: 0 0.5rem 0.625rem;\n display: flex;\n flex-direction: column-reverse;\n\n .answer-head {\n display: flex;\n align-items: center;\n font-size: 0.9375rem;\n line-height: 1.3125rem;\n font-weight: 500;\n color: var(--color-text-secondary);\n padding: 1rem 0.75rem 0.5rem 1rem;\n position: sticky;\n top: 0;\n background: var(--color-background);\n\n @media (max-width: 600px) {\n padding: 0.5rem 0.25rem 0.5rem 0.5rem;\n }\n }\n\n .answer-percent {\n margin-left: auto;\n\n &[dir=\"auto\"] {\n margin-left: 0;\n margin-right: auto;\n }\n }\n\n .poll-voters {\n padding: 0 0.75rem;\n position: relative;\n min-height: 3rem;\n\n @media (max-width: 600px) {\n padding: 0 0.25rem;\n }\n\n .Spinner {\n --spinner-size: 1.25rem;\n }\n }\n\n .chat-item-clickable {\n .ChatInfo .Avatar.size-tiny {\n margin-right: 1.75rem;\n }\n\n &[dir=\"rtl\"] {\n .ChatInfo .Avatar.size-tiny {\n margin-left: 1.75rem;\n margin-right: 0;\n }\n }\n }\n\n .ShowMoreButton {\n margin: 0.25rem 0 0 -0.5rem;\n width: calc(100% + 1rem);\n\n &[dir=\"rtl\"] {\n .icon-down {\n margin-left: 2rem;\n margin-right: 0;\n }\n }\n }\n\n .icon-down {\n vertical-align: middle;\n margin-right: 2rem;\n font-size: 1.5rem;\n }\n}\n",".PollResults {\n height: 100%;\n position: relative;\n display: flex;\n flex-direction: column;\n pointer-events: auto;\n\n > .Loading {\n position: absolute;\n top: 0;\n left: 0;\n bottom: 0;\n right: 0;\n background: rgba(white, 0.75);\n }\n\n .poll-question {\n padding: 0.75rem 1.5rem;\n flex-shrink: 0;\n font-size: 1.25rem;\n\n @media (max-width: 600px) {\n padding: 0 1rem;\n }\n }\n\n .poll-results-list {\n border-top: 1px solid var(--color-borders);\n flex-grow: 1;\n overflow: auto;\n }\n}\n",".Management {\n position: relative;\n height: 100%;\n\n & > .custom-scroll {\n height: 100%;\n overflow-y: scroll;\n overflow-x: hidden;\n }\n\n .section {\n padding: 1rem 1.5rem;\n border-top: 1px solid var(--color-borders);\n\n &.wide {\n padding: 1.5rem;\n }\n\n &:first-of-type {\n border-top: none;\n padding-top: 1rem;\n }\n\n &.no-border {\n border-top: none;\n }\n\n > .ChatInfo {\n margin: 0 0 2rem !important;\n\n .title h3 {\n margin-bottom: 0;\n }\n }\n\n .section-icon {\n width: 8.75rem;\n height: 8.75rem;\n margin: 0 auto 2rem;\n position: relative;\n\n .AnimatedSticker {\n position: absolute;\n left: 0;\n top: 0;\n width: 100%;\n height: 100%;\n\n &.hidden {\n display: none;\n }\n }\n }\n\n .ListItem {\n margin: 0 -0.75rem;\n\n .Reaction {\n display: flex;\n align-items: center;\n }\n\n .ReactionStaticEmoji {\n width: 1.5rem;\n margin-right: 1rem;\n }\n\n &:last-child {\n margin-bottom: 0;\n }\n\n .multiline-item .subtitle {\n line-height: 1.25rem;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n }\n\n &:not(.picker-list-item) .Checkbox {\n margin-top: 2rem;\n margin-bottom: 2rem;\n }\n\n &.narrow {\n .Checkbox {\n margin-top: 1rem;\n margin-bottom: 1rem;\n }\n }\n\n &.exceptions-member {\n .ChatInfo .status {\n white-space: pre-wrap;\n }\n }\n }\n\n .section-heading {\n font-weight: 500;\n font-size: 0.9375rem;\n color: var(--color-text-secondary);\n\n &[dir=\"auto\"] {\n text-align: initial;\n }\n }\n\n .section-help {\n color: var(--color-text-secondary);\n line-height: 1.375rem;\n\n &[dir=\"auto\"] {\n text-align: initial;\n }\n }\n\n .section-info {\n color: var(--color-text-secondary);\n font-size: 0.875rem;\n }\n\n &[dir=\"rtl\"] {\n text-align: right;\n }\n }\n\n textarea.form-control {\n height: auto;\n }\n\n .group-link {\n color: var(--color-text);\n }\n\n .radio-group {\n margin-top: 2rem;\n\n .Radio {\n padding-left: 3.5rem;\n margin-bottom: 2rem;\n\n &:last-child {\n margin-bottom: 0.625rem;\n }\n }\n\n .Radio-main {\n &::before {\n left: 0.125rem;\n top: 0.25rem;\n transform: none;\n }\n\n &::after {\n left: 0.4375rem;\n top: 0.5625rem;\n transform: none;\n }\n }\n }\n\n &__filter {\n padding: 0 1rem 0.25rem 0.75rem;\n border-bottom: 1px solid var(--color-borders);\n display: flex;\n flex-flow: row wrap;\n flex-shrink: 0;\n\n overflow-y: auto;\n max-height: 20rem;\n\n .input-group {\n margin-bottom: 0.5rem;\n margin-left: 0.5rem;\n flex-grow: 1;\n }\n\n .form-control {\n height: 2rem;\n border: none;\n border-radius: 0;\n padding: 0;\n box-shadow: none;\n }\n }\n\n .Spinner {\n margin: 2rem auto;\n }\n}\n\n.ManageGroupMembers {\n padding: 0.5rem 1rem;\n}\n\n.ManageInvites {\n .primary-link {\n position: relative;\n }\n\n .primary-link-input {\n cursor: pointer;\n margin-bottom: 1rem;\n padding-right: 3rem;\n }\n\n .primary-link-more-menu {\n position: absolute;\n right: 0.5rem;\n top: 50%;\n transform: translate(0, -50%);\n z-index: 1;\n }\n\n .create-link {\n margin-bottom: 0.5rem;\n }\n\n .invite-title {\n white-space: nowrap;\n }\n}\n\n.ManageInvite {\n .link-name {\n margin-bottom: 1rem;\n }\n\n .expire-limit {\n margin-top: 1rem;\n }\n\n .usage-limit {\n margin-top: 1rem;\n\n -moz-appearance: textfield;\n &::-webkit-outer-spin-button,\n &::-webkit-inner-spin-button {\n -webkit-appearance: none;\n }\n }\n\n .custom-scroll {\n padding-bottom: 4rem;\n }\n}\n\n.ManageInviteInfo {\n .copy-link {\n margin-top: 1rem;\n margin-bottom: 1rem;\n }\n\n .link-title {\n text-align: center;\n }\n}\n\n.ManageJoinRequests {\n .bulk-actions {\n display: flex;\n justify-content: space-around;\n }\n\n .bulk-action-button {\n width: auto;\n height: auto;\n }\n}\n\n.ManageInvite,\n.ManageInvites {\n .hint {\n font-size: 0.875rem;\n margin-bottom: 0;\n margin-top: 0.5rem;\n }\n}\n",".JoinRequest {\n display: flex;\n flex-direction: column;\n padding: 1rem 0;\n\n &:not(:last-child) {\n border-bottom: 1px solid var(--color-borders);\n }\n\n &__top {\n display: flex;\n cursor: pointer;\n padding: 0.5rem;\n border-radius: 0.5rem;\n\n &:hover {\n background-color: var(--color-chat-hover);\n }\n }\n\n &__user {\n display: flex;\n flex-grow: 1;\n min-width: 0;\n overflow: hidden;\n }\n\n &__user-info {\n display: flex;\n flex-direction: column;\n justify-content: center;\n overflow: hidden;\n margin-left: 1rem;\n }\n\n &__user-subtitle {\n color: var(--color-text-secondary);\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n }\n\n &__user-name {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n }\n\n &__date {\n color: var(--color-text-secondary);\n font-size: 0.875rem;\n margin-left: 1rem;\n white-space: nowrap;\n }\n\n &__buttons {\n display: flex;\n justify-content: space-evenly;\n margin-top: 1rem;\n gap: 0.5rem;\n }\n\n &__button {\n width: auto;\n height: auto;\n }\n}\n",".ShippingInfo {\n padding: 0.5rem 1rem;\n\n h5 {\n font-size: 0.875rem;\n color: var(--color-text-secondary);\n margin: 1rem 0 1.25rem;\n }\n}\n",".Shipping {\n padding: 0.5rem 1rem;\n\n form {\n p {\n color: var(--color-text-secondary);\n font-weight: 500;\n margin: 0.5rem 0 2rem;\n }\n\n .Radio {\n margin-bottom: 2rem;\n }\n }\n}\n",".Checkout {\n padding: 0.5rem 0;\n\n .description {\n display: flex;\n flex-direction: row;\n margin: 0 1rem;\n\n img {\n height: 6rem;\n margin: 0.5rem;\n }\n\n .text {\n h5 {\n margin-top: 0.5rem;\n font-size: 1.125rem;\n }\n\n p {\n font-size: 0.8125rem;\n line-height: 1rem;\n color: var(--color-text-secondary);\n }\n }\n }\n\n .price-info {\n margin: 1rem;\n\n .price-info-item {\n margin: 1rem 0.5rem;\n display: flex;\n flex-direction: row;\n align-content: space-between;\n color: var(--color-text-secondary);\n font-weight: 500;\n\n &-main {\n color: var(--color-text);\n }\n\n .title {\n display: flex;\n flex: 1 auto;\n }\n }\n }\n\n .invoice-info {\n border-top: 1px var(--color-borders) solid;\n padding: 1rem;\n\n .checkout-info-item {\n display: flex;\n padding: 0.75rem 0.5rem 1rem;\n text-align: left;\n\n i {\n font-size: 1.5rem;\n color: var(--color-text-secondary);\n margin-right: 2rem;\n width: 1.5rem;\n }\n\n i.provider {\n background: no-repeat center;\n background-size: 2rem;\n border-radius: 1rem;\n height: 1.5rem;\n }\n\n i.provider.stripe {\n background-image: url(\"../../assets/stripe-logo.png\");\n }\n\n i.provider.smartglocal {\n background-image: url(\"../../assets/smartglocal-logo.png\");\n }\n\n .info {\n .title {\n font-size: 1rem;\n line-height: 1.4375rem;\n margin-bottom: 0;\n font-weight: 400;\n word-break: break-word;\n color: var(--color-text);\n text-transform: capitalize;\n }\n\n .data {\n margin-bottom: 0;\n font-size: 0.875rem;\n color: var(--color-text-secondary);\n }\n }\n }\n }\n}\n",".CardInput {\n position: relative;\n\n .input-group.has-left-addon .form-control{\n padding-left: 4rem;\n }\n\n .left-addon {\n position: absolute;\n top: 0.8125rem;\n left: 1rem;\n z-index: 8;\n\n img {\n max-width: 2rem;\n }\n }\n}\n",".PaymentInfo {\n padding: 0.5rem 1rem;\n\n h5 {\n font-size: 0.875rem;\n color: var(--color-text-secondary);\n margin: 1rem 0 1.25rem;\n }\n\n .inline-inputs {\n display: flex;\n justify-content: space-between;\n\n .input-group {\n flex: 1 10rem;\n max-width: 45%;\n display: flex;\n }\n }\n}\n",".ConfirmPayment {\n display: flex;\n height: 100%;\n border-bottom-left-radius: var(--border-radius-default-small);\n border-bottom-right-radius: var(--border-radius-default-small);\n overflow: hidden;\n\n &__content {\n width: 100%;\n height: 100%;\n border: none;\n }\n}\n",".PaymentModal {\n .modal-backdrop {\n pointer-events: none;\n }\n\n .header {\n position: relative;\n border-top-left-radius: var(--border-radius-default-small);\n border-top-right-radius: var(--border-radius-default-small);\n width: 100%;\n padding: 0.25rem 1rem;\n display: flex;\n align-items: center;\n flex-direction: row;\n background: var(--color-background);\n border-bottom: 1px var(--color-borders) solid;\n\n h3 {\n margin-bottom: 0;\n margin-left: 1.5rem;\n unicode-bidi: plaintext;\n text-align: initial;\n }\n }\n\n .Transition {\n height: 25rem;\n }\n\n .empty-content {\n height: 25rem;\n max-height: 90%;\n display: flex;\n align-items: center;\n justify-content: center;\n }\n\n .receipt-content {\n height: 25rem;\n overflow-y: auto;\n }\n\n .content {\n overflow: auto;\n width: 100%;\n height: 100%;\n position: relative;\n }\n\n .footer {\n position: relative;\n border-bottom-left-radius: var(--border-radius-default-small);\n border-bottom-right-radius: var(--border-radius-default-small);\n width: 100%;\n padding: 0.75rem 1rem;\n background: var(--color-background);\n border-top: 1px var(--color-borders) solid;\n\n button {\n text-transform: none;\n font-weight: 500;\n }\n }\n\n .modal-dialog {\n width: 25rem;\n }\n\n .modal-content {\n padding: 0;\n overflow: hidden;\n }\n}\n\n@media screen and (max-device-width: 640px) and (max-height: 640px) and (orientation: landscape) {\n .PaymentModal {\n .modal-dialog {\n max-height: 100%;\n }\n\n .Transition {\n height: 10rem;\n }\n }\n}\n"],"names":[],"sourceRoot":""} \ No newline at end of file diff --git a/dist/395.93d060131194800fb151.js b/dist/395.93d060131194800fb151.js deleted file mode 100644 index 109469f1a..000000000 --- a/dist/395.93d060131194800fb151.js +++ /dev/null @@ -1,2 +0,0 @@ -"use strict";(self.webpackChunktelegram_t=self.webpackChunktelegram_t||[]).push([[395],{1395:(e,t,n)=>{n.r(t),n.d(t,{ArchivedChats:()=>ds,AttachmentModal:()=>ar,BotCommandMenu:()=>Fr,BotCommandTooltip:()=>Lr,CalendarModal:()=>lt,ChatFolderModal:()=>us,ContactList:()=>as,ContextMenuContainer:()=>Ls,CustomSendMenu:()=>xr,DeleteMessageModal:()=>mt,Dialogs:()=>je,DropArea:()=>$r.Z,EmojiInteractionAnimation:()=>Nt,EmojiTooltip:()=>Ur,ForwardPicker:()=>Ye,GifSearch:()=>el,HeaderMenuContainer:()=>$s,HistoryCalendar:()=>ot,InlineBotTooltip:()=>Hr,LeftSearch:()=>Pn,Management:()=>zl,MediaViewer:()=>Le,MentionTooltip:()=>er,MessageSelectToolbar:()=>Et,MobileSearch:()=>Us,NewChat:()=>is,NewChatStep1:()=>rs,NewChatStep2:()=>ls,NewContactModal:()=>dt,Notifications:()=>Ke,PaymentModal:()=>Co,PinMessageModal:()=>ut,PollModal:()=>rr,PollResults:()=>Zl,ReactorListModal:()=>It,ReceiptModal:()=>Io,RightSearch:()=>qr,SafeLinkModal:()=>et,SeenByModal:()=>Ct,SendAsMenu:()=>Vr,Settings:()=>ts,Statistics:()=>ul,StickerSearch:()=>Qr,StickerSetModal:()=>Bs,StickerTooltip:()=>Br,SymbolMenu:()=>Rr,TextFormatter:()=>Dr.Z,UnpinAllMessagesModal:()=>ht});var a=n(4050),s=n(3555),r=n(6137),l=n(1713),o=n(3716),i=n(7361),c=n(6264),d=n(9290),m=n(1394),u=n(5326);const h=new Map;function Z(e){const t=(0,a.sO)();let n=!1;(0,d.Z)((()=>{if(n=!0,t.current=void 0,!e)return;const a=new Image;if(a.src=e,!a.width)return;const s=(0,m.ao)(a);(0,c.Z)(s.getContext("2d"),0,0,s.width,s.height,2,2),t.current=s.toDataURL()}),[e]);const s=function(e){let t=arguments.length>1&&void 0!==arguments[1]&&arguments[1],n=arguments.length>2?arguments[2]:void 0;const s=(0,a.sO)(e?h.get(e):void 0),r=(0,a.sO)(),l=(0,u.Z)();return r.current&&t&&(clearTimeout(r.current),r.current=void 0),(0,a.d4)((()=>{if(!e||s.current||t)return;const a=new Image;a.onload=()=>{const t=(0,m.ao)(a);(0,c.Z)(t.getContext("2d"),0,0,t.width,t.height,2,2);const n=t.toDataURL();s.current=n,l(),h.size>=1e3&&h.clear(),h.set(e,n)},n?r.current=window.setTimeout((()=>{a.src=e}),n):a.src=e}),[e,n,l,t]),s.current}(e||void 0,Boolean(t.current));return t.current||!n&&s||e||void 0}var v=n(8674),P=n(6590),g=n(9107),p=n(6202),E=n(2566),C=n(7204),f=n(5806),b=n(1192),I=n(396),y=n(3989),S=n(1174),N=n(3858),k=n(4399),w=n(996),M=n(3227);function T(e,t){const n=document.createElement("div");n.classList.add("ghost");const a=new Image;if(a.draggable=!1,a.oncontextmenu=M.Z,"string"==typeof e?a.src=e:e instanceof HTMLVideoElement?a.src=e.poster:a.src=e.src,n.appendChild(a),t===l.bZ.ProfileAvatar||t===l.bZ.SettingsAvatar){n.classList.add("ProfileInfo"),t===l.bZ.SettingsAvatar&&n.classList.add("self");const e=document.querySelector(t===l.bZ.ProfileAvatar?"#RightColumn .ProfileInfo .info":"#Settings .ProfileInfo .info");e&&n.appendChild(e.cloneNode(!0))}return n}function R(e,t){const n=document.querySelector(".Transition__slide--active > .MessageList");let a=e.offsetTop+t.closest(".content-inner, .WebPage").offsetTop;return e.id.includes("album-media-")&&(a+=e.parentElement.offsetTop+e.closest(".Message").offsetTop),a>n.scrollTop&&a+t.offsetHeight .MessageList #album-media-${(0,f.d0)(t.id)}`,a=".full-media";break;case l.bZ.SharedMedia:n=`#shared-media${(0,f.d0)(t.id)}`,a="img";break;case l.bZ.SearchResult:n=`#search-media${(0,f.d0)(t.id)}`,a="img";break;case l.bZ.MiddleHeaderAvatar:n=".MiddleHeader .Transition__slide--active .ChatInfo .Avatar",a=".avatar-media";break;case l.bZ.SettingsAvatar:n="#Settings .ProfileInfo .Transition__slide--active .ProfilePhoto",a=".avatar-media";break;case l.bZ.ProfileAvatar:n="#RightColumn .ProfileInfo .Transition__slide--active .ProfilePhoto",a=".avatar-media";break;case l.bZ.ScheduledInline:case l.bZ.Inline:default:n=`.Transition__slide--active > .MessageList #${(0,f.d0)(t.id)}`,a=".message-content .full-media, .message-content .thumbnail"}const s=document.querySelector(n),r=s&&s.querySelectorAll(a);return{container:s,mediaEl:null==r?void 0:r[r.length-1]}}function F(e,t){switch(t){case l.bZ.Album:case l.bZ.ScheduledAlbum:case l.bZ.Inline:case l.bZ.ScheduledInline:e.classList.add("rounded-corners");break;case l.bZ.SharedMedia:case l.bZ.SettingsAvatar:case l.bZ.ProfileAvatar:case l.bZ.SearchResult:e.firstChild.style.objectFit="cover";break;case l.bZ.MiddleHeaderAvatar:e.classList.add("circle")}}var B=n(231),x=n(126),$=n(2255),D=n(3106),O=n(8964),U=n(9196);const G=(0,a.X$)((0,s.c$)(((e,t)=>{let{message:n}=t;return{isDownloading:!!n&&(0,b.te)(e,n),isProtected:(0,b.EV)(e,n)}}))((e=>{let{mediaData:t,isVideo:n,isZoomed:r,message:l,fileName:o,isAvatar:c,isDownloading:d,isProtected:m,onCloseMediaViewer:u,onForward:h,onZoomToggle:Z}=e;const{downloadMessageMedia:v,cancelMessageMediaDownload:P}=(0,s.Sv)(),{loadProgress:p}=(0,E.Z)(l&&(0,f.Ti)(l,"download"),!d),C=(0,a.I4)((()=>{d?P({message:l}):v({message:l})}),[P,v,d,l]),b=(0,g.Z)(),I=(0,a.Ye)((()=>e=>{let{onTrigger:t,isOpen:n}=e;return a.ZP.createElement(B.Z,{round:!0,size:"smaller",color:"translucent",className:n?"active":void 0,onClick:t,ariaLabel:"More actions"},a.ZP.createElement("i",{className:"icon-more"}))}),[]);if(i.wB){if(m)return;return a.ZP.createElement("div",{className:"MediaViewerActions-mobile"},a.ZP.createElement(D.Z,{trigger:I,positionX:"right"},!c&&a.ZP.createElement(O.Z,{icon:"forward",onClick:h},b("Forward")),n?a.ZP.createElement(O.Z,{icon:d?"close":"download",onClick:C},d?`${Math.round(100*p)}% Downloading...`:"Download"):a.ZP.createElement(O.Z,{icon:"download",href:t,download:o},b("AccActionDownload"))),d&&a.ZP.createElement(U.Z,{progress:p,size:"s",noCross:!0}))}return a.ZP.createElement("div",{className:"MediaViewerActions"},!c&&!m&&a.ZP.createElement(B.Z,{round:!0,size:"smaller",color:"translucent-white",ariaLabel:b("Forward"),onClick:h},a.ZP.createElement("i",{className:"icon-forward"})),function(){if(!m)return n?a.ZP.createElement(B.Z,{round:!0,size:"smaller",color:"translucent-white",ariaLabel:b("AccActionDownload"),onClick:C},d?a.ZP.createElement(U.Z,{progress:p,size:"s",onClick:C}):a.ZP.createElement("i",{className:"icon-download"})):a.ZP.createElement(B.Z,{href:t,download:o,round:!0,size:"smaller",color:"translucent-white",ariaLabel:b("AccActionDownload")},a.ZP.createElement("i",{className:"icon-download"}))}(),a.ZP.createElement(B.Z,{round:!0,size:"smaller",color:"translucent-white",ariaLabel:r?"Zoom Out":"Zoom In",onClick:Z},a.ZP.createElement("i",{className:r?"icon-zoom-out":"icon-zoom-in"})),a.ZP.createElement(B.Z,{round:!0,size:"smaller",color:"translucent-white",ariaLabel:b("Close"),onClick:u},a.ZP.createElement("i",{className:"icon-close"})))})));var _=n(2202),J=n(9933),X=n(275),z=n(9118),Y=n(9204),H=n(6752);const V=e=>{let{text:t="",isHidden:n,isForVideo:s,onClick:r}=e;const[l,o]=(0,a.eJ)(!1);(0,a.d4)((()=>{const e=document.querySelector(".MediaViewerFooter .media-text"),t=()=>{const t=e?e.clientHeight:0;o(t>2*k.Gw)};t();const n=(0,z.P2)(t,500,!0);return window.addEventListener("resize",n,!1),()=>{window.removeEventListener("resize",n,!1)}}),[]);const c=(0,H.Z)("MediaViewerFooter",s&&"is-for-video",n&&"is-hidden");return a.ZP.createElement("div",{className:c,onClick:function(e){t&&e.stopPropagation()}},t&&a.ZP.createElement("div",{className:"media-viewer-footer-content",onClick:i.wB?void 0:r},a.ZP.createElement("p",{className:"media-text custom-scroll "+(l?"multiline":""),dir:"auto"},t)))};var j=n(2019);const q=void 0!==document.fullscreenElement?"fullscreenElement":void 0!==document.mozFullScreenElement?"mozFullScreenElement":void 0!==document.webkitFullscreenElement?"webkitFullscreenElement":"";var K=n(1212),W=n(6898),Q=n(4753),ee=n(706),te=n(790);const ne=["bytes","kB","MB","GB","TB","PB"],ae=e=>{const t=0===e?0:Math.floor(Math.log(e)/Math.log(1024));return`${(e/1024**Math.floor(t)).toFixed(1)} ${ne[t]}`};var se=n(8051),re=n(2328);const le=e=>{e.stopPropagation()},oe=[.5,1,1.5,2],ie=e=>{let{bufferedRanges:t,bufferedProgress:n,currentTime:s,duration:r,fileSize:l,isForceMobileVersion:o,isPlayed:c,isFullscreenSupported:d,isFullscreen:m,isVisible:u,isBuffered:h,volume:Z,isMuted:v,playbackRate:P,onChangeFullscreen:p,onVolumeClick:E,onVolumeChange:C,onPlaybackRateChange:f,onPlayPause:b,setVisibility:I,onSeek:y}=e;const[N,k,w]=(0,ee.Z)(),M=(0,a.sO)(null),T=(0,a.sO)(!1),R=T.current;(0,a.d4)((()=>{let e;if(u&&c&&!R&&!N)return e=window.setTimeout((()=>{I(!1)}),1500),()=>{e&&window.clearTimeout(e)};e&&window.clearTimeout(e)}),[c,u,R,I,N]),(0,a.d4)((()=>(u?document.body.classList.add("video-controls-visible"):document.body.classList.remove("video-controls-visible"),()=>{document.body.classList.remove("video-controls-visible")})),[u]),(0,a.d4)((()=>{u||w()}),[w,u]);const A=(0,g.Z)(),L=(0,a.I4)((e=>{if(T.current&&M.current){const{width:t,left:n}=M.current.getBoundingClientRect(),a=e instanceof MouseEvent?e.clientX:e.targetTouches[0].clientX;y(Math.max(Math.min(r*((a-n)/t),r),0))}}),[r,y]),F=(0,a.I4)((e=>{T.current=!0,L(e)}),[L]),x=(0,a.I4)((()=>{T.current=!1}),[]);(0,a.d4)((()=>{if(M.current&&u)return(0,S.sf)(M.current,{onCapture:F,onRelease:x,onClick:x,onDrag:L})}),[u,F,L,x]);const $=(0,a.Ye)((()=>0===Z||v?"icon-muted":Z<.3?"icon-volume-1":Z<.6?"icon-volume-2":"icon-volume-3"),[Z,v]);return a.ZP.createElement("div",{className:(0,H.Z)("VideoPlayerControls",o&&"mobile",u&&"active"),onClick:le},function(e,t,n,s){const r=e/t*100;return a.ZP.createElement("div",{className:"player-seekline",ref:s},a.ZP.createElement("div",{className:"player-seekline-track"},n.map((e=>{let{start:t,end:n}=e;return a.ZP.createElement("div",{className:"player-seekline-buffered",style:`left: ${100*t}%; right: ${100-100*n}%`})})),a.ZP.createElement("div",{className:"player-seekline-played",style:`width: ${r||0}%`})))}(s,r,t,M),a.ZP.createElement("div",{className:"buttons"},a.ZP.createElement(B.Z,{ariaLabel:A("AccActionPlay"),size:"tiny",ripple:!i.wB,color:"translucent-white",className:"play",round:!0,onClick:b},a.ZP.createElement("i",{className:c?"icon-pause":"icon-play"})),a.ZP.createElement(B.Z,{ariaLabel:"Volume",size:"tiny",color:"translucent-white",className:"volume",round:!0,onClick:E},a.ZP.createElement("i",{className:$})),!i.cj&&a.ZP.createElement(se.Z,{bold:!0,className:"volume-slider",value:v?0:100*Z,onChange:C}),function(e,t){return a.ZP.createElement("div",{className:"player-time"},`${(0,te.k9)(e)} / ${(0,te.k9)(t)}`)}(s,r),!h&&(D=n,U=l,a.ZP.createElement("div",{className:"player-file-size"},`${ae(U*D)} / ${ae(U)}`)),a.ZP.createElement("div",{className:"spacer"}),a.ZP.createElement(B.Z,{ariaLabel:"Playback rate",size:"tiny",color:"translucent-white",className:"playback-rate",round:!0,onClick:k},`${P}x`),d&&a.ZP.createElement(B.Z,{ariaLabel:"Fullscreen",size:"tiny",color:"translucent-white",className:"fullscreen",round:!0,onClick:p},a.ZP.createElement("i",{className:m?"icon-smallscreen":"icon-fullscreen"}))),a.ZP.createElement(re.Z,{isOpen:N,className:"playback-rate-menu",positionX:"right",positionY:"bottom",autoClose:!0,onClose:w},oe.map((e=>a.ZP.createElement(O.Z,{disabled:P===e,onClick:()=>f(e)},`${e}x`)))));var D,U};function ce(){return ce=Object.assign||function(e){for(var t=1;t{let{url:t,isGif:n,posterData:r,posterSize:l,loadProgress:o,fileSize:c,isMediaViewerOpen:d,noPlay:m,volume:u,isMuted:h,playbackRate:Z,onClose:v,toggleControls:P,areControlsVisible:g}=e;const{setMediaViewerVolume:p,setMediaViewerMuted:E,setMediaViewerPlaybackRate:C}=(0,s.Sv)(),f=(0,a.sO)(null),[b,I]=(0,a.eJ)(!i.$b||!i.cj),[y,S]=(0,a.eJ)(0),[N,k,w]=function(e,t){const[n,s]=(0,a.eJ)(Boolean(q&&document[q]));return(0,a.bt)((()=>{const n=()=>{s(Boolean(q&&document[q]))},a=()=>{s(!0)},r=()=>{s(!1),t(!1)},l=e.current;return document.addEventListener("fullscreenchange",n,!1),document.addEventListener("webkitfullscreenchange",n,!1),document.addEventListener("mozfullscreenchange",n,!1),l&&(l.addEventListener("webkitbeginfullscreen",a,!1),l.addEventListener("webkitendfullscreen",r,!1)),()=>{document.removeEventListener("fullscreenchange",n,!1),document.removeEventListener("webkitfullscreenchange",n,!1),document.removeEventListener("mozfullscreenchange",n,!1),l&&(l.removeEventListener("webkitbeginfullscreen",a,!1),l.removeEventListener("webkitendfullscreen",r,!1))}}),[]),q||"iOS"===i.Lt?[n,()=>{e.current&&(q||"iOS"===i.Lt)&&(e.current.requestFullscreen?e.current.requestFullscreen():e.current.webkitRequestFullscreen?e.current.webkitRequestFullscreen():e.current.webkitEnterFullscreen?e.current.webkitEnterFullscreen():e.current.mozRequestFullScreen&&e.current.mozRequestFullScreen(),s(!0))},()=>{e.current&&(document.exitFullscreen?document.exitFullscreen():document.mozCancelFullScreen?document.mozCancelFullScreen():document.webkitCancelFullScreen?document.webkitCancelFullScreen():document.webkitExitFullscreen&&document.webkitExitFullscreen(),s(!1))}]:[!1]}(f,I),{isBuffered:M,bufferedRanges:T,bufferingHandlers:R,bufferedProgress:A}=(0,j.Z)(),{shouldRender:L,transitionClassNames:F}=(0,K.Z)(!M,void 0,void 0,"slow"),{shouldRender:x,transitionClassNames:$}=(0,K.Z)(i.cj&&!b&&!L,void 0,void 0,"slow");(0,a.d4)((()=>{m||!d?f.current.pause():t&&!i.$b&&(0,Q.Z)(f.current)}),[m,d,t]),(0,a.d4)((()=>{f.current.currentTime===f.current.duration?(S(0),I(!1)):S(f.current.currentTime)}),[y]),(0,a.d4)((()=>{f.current.volume=u}),[u]),(0,a.d4)((()=>{f.current.playbackRate=Z}),[Z]);const D=(0,a.I4)((e=>{e.stopPropagation(),b?(f.current.pause(),I(!1)):((0,Q.Z)(f.current),I(!0))}),[b]);(0,W.Z)(f,[]);const O=(0,a.I4)((()=>{P(!0)}),[P]),G=(0,a.I4)((e=>{e.target===f.current&&P(!1)}),[P]),_=(0,a.I4)((e=>{S(e.currentTarget.currentTime)}),[]),J=(0,a.I4)((()=>{S(0),I(!1),P(!0)}),[P]),X=(0,a.I4)((()=>{N&&w?w():!N&&k&&k()}),[w,N,k]),z=(0,a.I4)((e=>{f.current.currentTime=e}),[]),Y=(0,a.I4)((e=>{p({volume:e/100})}),[p]),H=(0,a.I4)((()=>{E({isMuted:!h})}),[h,E]),V=(0,a.I4)((e=>{C({playbackRate:e})}),[C]);(0,a.d4)((()=>{if(!d)return;const e=e=>{"Enter"!==e.key&&" "!==e.key||(e.preventDefault(),D(e))};return document.addEventListener("keydown",e,!1),()=>{document.removeEventListener("keydown",e,!1)}}),[D,d]);const ee=l&&`width: ${l.width}px; height: ${l.height}px`,te=`background-image: url(${r})`;return a.ZP.createElement("div",{className:"VideoPlayer",onMouseMove:n||i.$b?void 0:O,onMouseOut:n||i.$b?void 0:G},a.ZP.createElement("div",{style:ee},a.ZP.createElement("video",ce({ref:f,autoPlay:i.$b,playsInline:!0,loop:n,muted:n||h,id:"media-viewer-video",style:te,onPlay:i.cj?()=>I(!0):void 0,onEnded:J,onClick:i.wB?void 0:D,onDoubleClick:i.$b?void 0:X},R,{onTimeUpdate:_}),t&&a.ZP.createElement("source",{src:t}))),x&&a.ZP.createElement(B.Z,{round:!0,className:`play-button ${$}`,onClick:D},a.ZP.createElement("i",{className:"icon-play"})),L&&a.ZP.createElement("div",{className:["spinner-container",F].join(" ")},!M&&a.ZP.createElement("div",{className:"buffering"},"Buffering..."),a.ZP.createElement(U.Z,{size:"xl",progress:M?1:o,square:!0,onClick:v})),!n&&!L&&a.ZP.createElement(ie,{isPlayed:b,bufferedRanges:T,bufferedProgress:A,isBuffered:M,currentTime:y,isFullscreenSupported:Boolean(k),isFullscreen:N,fileSize:c,duration:f.current&&f.current.duration||0,isVisible:g,setVisibility:P,isForceMobileVersion:l&&l.width<400,onSeek:z,onChangeFullscreen:X,onPlayPause:D,volume:u,playbackRate:Z,isMuted:h,onVolumeClick:H,onVolumeChange:Y,onPlaybackRateChange:V}))})),me=(0,a.X$)((0,s.c$)(((e,t)=>{const{chatId:n,threadId:a,messageId:s,avatarOwnerId:r,profilePhotoIndex:o,origin:i}=t,{volume:c,isMuted:d,playbackRate:m}=e.mediaViewer;if(i===l.bZ.SearchResult){if(!n||!s)return{volume:c,isMuted:d,playbackRate:m};const t=(0,b.hj)(e,n,s);return t?{chatId:n,messageId:s,senderId:t.senderId,origin:i,message:t,isProtected:(0,b.EV)(e,t),volume:c,isMuted:d,playbackRate:m}:{volume:c,isMuted:d,playbackRate:m}}if(r)return{messageId:-1,senderId:r,avatarOwner:(0,b.dy)(e,r)||(0,b.Z1)(e,r),profilePhotoIndex:o||0,origin:i,volume:c,isMuted:d,playbackRate:m};if(!(n&&a&&s))return{volume:c,isMuted:d,playbackRate:m};let u;return u=i&&[l.bZ.ScheduledAlbum,l.bZ.ScheduledInline].includes(i)?(0,b.Tm)(e,n,s):(0,b.hj)(e,n,s),u?{chatId:n,threadId:a,messageId:s,senderId:u.senderId,origin:i,message:u,isProtected:(0,b.EV)(e,u),volume:c,isMuted:d,playbackRate:m}:{volume:c,isMuted:d,playbackRate:m}}))((e=>{const{messageId:t,isActive:n,avatarOwner:s,chatId:o,message:c,profilePhotoIndex:d,origin:m,animationLevel:u,isFooterHidden:h,isProtected:v,volume:P,playbackRate:g,isMuted:C,onClose:b,onFooterClick:I,setIsFooterHidden:y}=e,S=c?(0,f.O$)(c):void 0,N=c?(0,f.b7)(c):void 0,T=c?(0,f.F$)(c):void 0,R=c?(0,f.Cg)(c):void 0,A=!!c&&(0,f.rl)(c),L=!!c&&(0,f.hC)(c),F=Boolean(N||R||L),B=Boolean(!F&&(S||T||A)),{isGif:x}=N||R||{},$=Boolean(s||t),D=Boolean(s),O=m===l.bZ.SharedMedia,U=m===l.bZ.SearchResult,G=2===u;function _(e){if(D&&void 0!==d){const{photos:t}=s;return t&&t[d]?`photo${t[d].id}?size=c`:(0,f.RT)(s,e?"big":"normal")}return c&&(0,f.Ti)(c,e?"viewerFull":"viewerPreview")}const J=(0,p.Z)(c&&(O||U)&&(0,f.Ti)(c,"pictogram"),void 0,r.IU.BlobUrl,void 0,G&&350),X=_(),z=(0,p.Z)(X,void 0,r.IU.BlobUrl,void 0,G&&350),{mediaData:H,loadProgress:j}=(0,E.Z)(_(!0),void 0,c&&(0,f.kG)(c,"viewerFull"),void 0,G&&350),q=(0,a.I4)((e=>{null==y||y(!e)}),[y]),K=S||N?(S||N).blobUrl:void 0;let W=!F&&(K||H)||z||J;const Q=Z(!W&&c&&(0,f.DH)(c));W||m===l.bZ.SearchResult||(W=Q);const ee=c?(0,f.c0)(c):void 0;let te;if(c?A||L?te=(0,f.aE)(c).mediaSize:S||T?te=(0,f.bV)(S||T):(N||R)&&(te=(0,f.jC)(N||R)):te=k.vY,D)return a.ZP.createElement("div",{key:o,className:"MediaViewerContent"},ue(H||z,(0,k.PA)(k.vY,!1),!i.wB&&!v));if(!c)return;const ne=(0,w.X)(c),ae=Boolean(ne);return a.ZP.createElement("div",{className:"MediaViewerContent "+(ae?"has-footer":"")},v&&a.ZP.createElement("div",{onContextMenu:M.Z,className:"protector"}),B&&ue(K||H||z||J,c&&(0,k.PA)(te,ae),!i.wB&&!v),F&&(!n&&i.$b?function(e,t,n){const s=t&&`width: ${t.width}px; height: ${t.height}px`,r=`background-image: url(${e})`;return e?a.ZP.createElement("div",{className:"VideoPlayer"},a.ZP.createElement("div",{style:s},a.ZP.createElement("video",{style:r,draggable:Boolean(n)}))):a.ZP.createElement("div",{className:"spinner-wrapper",style:t?`width: ${t.width}px`:""},a.ZP.createElement(Y.Z,{color:"white"}))}(W,c&&(0,k.PA)(te,ae,!0),!i.wB&&!v):a.ZP.createElement(de,{key:t,url:K||H,isGif:x,posterData:W,posterSize:c&&(0,k.PA)(te,ae,!0),loadProgress:j,fileSize:ee,isMediaViewerOpen:$&&n,areControlsVisible:!h,toggleControls:q,noPlay:!n,onClose:b,isMuted:C,volume:P,playbackRate:g})),ne&&a.ZP.createElement(V,{text:ne,onClick:I,isHidden:h&&i.$b,isForVideo:F&&!x}))})));function ue(e,t,n){return e?a.ZP.createElement("img",{src:e,alt:"",style:t?`width: ${t.width}px`:"",draggable:Boolean(n)}):a.ZP.createElement("div",{className:"spinner-wrapper",style:t?`width: ${t.width}px`:""},a.ZP.createElement(Y.Z,{color:"white"}))}var he=n(8183);function Ze(){return Ze=Object.assign||function(e){for(var t=1;t{let{messageId:t,getMessageId:n,selectMessage:s,isVideo:r,isGif:l,isPhoto:o,isOpen:c,isActive:d,hasFooter:m,...h}=e;const Z=(0,a.sO)(null),v=(0,a.sO)(null),P=(0,a.sO)({x:0,y:0,scale:1}),g=(0,a.sO)(void 0),p=(0,a.sO)(!0),[E,C]=(0,a.eJ)(t),f=(0,u.Z)(),[b,I]=(0,a.eJ)(!0),{isZoomed:y,onClose:N}=h,k=(0,a.I4)((e=>{P.current=e,f()}),[f]),w=(0,a.I4)((e=>{p.current=e,f()}),[f]),M=(0,_.Z)(350,!0),T=(0,_.Z)(500,!0),R=(0,_.Z)(800,!0),A=(0,a.I4)((e=>{if(!i.$b)return;const t=window.innerHeight-e.pageY<80;!t&&e.pageX<40||!t&&e.pageX>window.innerWidth-40||I(!b)}),[b]);if((0,he.Z)((()=>I(!1)),200),(0,a.d4)((()=>{if(!i.$b||!Z.current||y||!E)return;let e={x:0,y:0,scale:1};const t={x:0,y:0},a={x:0,y:0},r={x:0,y:0};let l,o,c=Date.now();const d=(0,z.Ds)((()=>{c=Date.now()}),500,!1,!0),m=t=>{if(1!==P.current.scale)return!1;let a=0;if(window.innerHeight-t.pageY<80)return!1;t.pageX<40?a=-1:t.pageX>window.innerWidth-40&&(a=1);const r=n(E,a);if(r){const t=(window.innerWidth+40)*a;P.current.x+=t,p.current=!1,C(r),M((()=>s(r))),R((()=>{w(!0)})),e={x:0,y:0,scale:1},Pe=(0,J.vr)({from:P.current.x,to:0,duration:ve,timing:J.M8.easeOutCubic,onUpdate:e=>k({y:0,x:e,scale:1})})}return 0!==a};return(0,S.sf)(Z.current,{isNotPassive:!0,excludedClosestSelector:".MediaViewerFooter",onCapture:e=>{if(!fe(e)&&(c=Date.now(),(0,X.Z)(P.current,{x:0,y:0,scale:1}))){if(!v.current)return;if(o=v.current.querySelector("img, video"),!o)return;l=o.getBoundingClientRect()}},onDrag:(n,a,s)=>{let{dragOffsetX:l,dragOffsetY:o}=s;if(fe(n))return;if(i.cj){const{pageX:e}=a.touches[0];if(e<=S.vJ||e>=window.innerWidth-S.vJ)return}Pe&&(Pe(),Pe=void 0),r.x=t.x-l,r.y=t.y-o,t.x=l,t.y=o;const c=Math.abs(l),m=Math.abs(o),{scale:u,x:h,y:Z}=P.current,v=10;if(d(),1===u)return g.current!==ge.Vertical&&(g.current===ge.Horizontal||Math.abs(h)>v||c>v&&mv||m>v&&c{let{zoomFactor:s,initialCenterX:r,initialCenterY:l,dragOffsetX:o,dragOffsetY:i,currentCenterX:c,currentCenterY:d}=n;const m=Math.min(12,Math.max(e.scale*s,.6)),u=m/e.scale,h=Math.abs(Math.min(e.x,0))+r,Z=Math.abs(Math.min(e.y,0))+l;a.x=c,a.y=d;const v=h-u*h,P=Z-u*Z;k({x:e.x+v+o,y:e.y+P+i,scale:m})},onClick(e){m(e)&&(e.preventDefault(),e.stopPropagation())},onDoubleClick(t,n){let{centerX:a,centerY:s}=n;if(m(t))return t.preventDefault(),void t.stopPropagation();const r=a-3*a,l=s-3*s,{scale:o,x:i,y:c}=P.current;if(1===o){if(0!==i||0!==c)return;e={x:r,y:l,scale:3}}else e={x:0,y:0,scale:1};return(0,J.vr)({from:[i,c,o],to:[e.x,e.y,e.scale],duration:ve,timing:J.M8.easeOutCubic,onUpdate:e=>k({x:e[0],y:e[1],scale:e[2]})})},onRelease:()=>{const i=Math.abs(P.current.x),d=Math.abs(P.current.y),{scale:m,x:u,y:h}=P.current;if(T((()=>{g.current=void 0})),R((()=>{w(!0)})),m<1)return e={x:0,y:0,scale:1},(0,J.vr)({from:[u,h,m],to:[0,0,1],duration:ve,timing:J.M8.easeOutCubic,onUpdate:e=>k({x:e[0],y:e[1],scale:e[2]})});if(m>1){if(!o||!l)return void(e={x:u,y:h,scale:m});const n=o.getBoundingClientRect(),s=Math.min(m,4),i=s/m;let d=u*i+(a.x-i*a.x),Z=h*i+(a.y-i*a.y);const v=.15;if(e.scale===m){const e=Math.abs(t.x)/(Date.now()-c),n=Math.abs(t.y)/(Date.now()-c);d-=Math.abs(t.x)*e*v*r.x,Z-=Math.abs(t.y)*n*v*r.y}if(n.width>window.innerWidth){const e=-l.left*s,t=window.innerWidth-l.right*s;d=Math.min(e,Math.max(t,d))}else d=(window.innerWidth-window.innerWidth*s)/2;if(n.height>window.innerHeight){const e=-l.top*s,t=window.innerHeight-l.bottom*s;Z=Math.min(e,Math.max(t,Z))}else Z=(window.innerHeight-window.innerHeight*s)/2;return e={x:d,y:Z,scale:s},void(Pe=(0,J.vr)({from:[u,h,m],to:[d,Z,s],duration:ve,timing:J.M8.easeOutCubic,onUpdate:e=>k({x:e[0],y:e[1],scale:e[2]})}))}if(e={x:u,y:h,scale:m},d>=50)return N();if(d>0)return(0,J.vr)({from:h,to:0,duration:ve,timing:J.M8.easeOutCubic,onUpdate:e=>k({x:0,y:e,scale:m})});const Z=u<0?1:-1,v=n(E,u<0?1:-1),p=r.x<0?-1:1;if(v&&i>=50&&Z===p){const e=(window.innerWidth+40)*Z;P.current.x+=e,C(v),M((()=>s(v)))}Pe=(0,J.vr)({from:P.current.x,to:0,duration:ve,timing:J.M8.easeOutCubic,onUpdate:e=>k({y:0,x:e,scale:P.current.scale})})}})}),[y,N,k,n,E,w]),!E)return;const L=n(E,1),F=n(E,-1),B=P.current.x,x=P.current.y,{scale:$}=P.current;return a.ZP.createElement("div",{className:"MediaViewerSlides",ref:Z},F&&1===$&&a.ZP.createElement("div",{className:"MediaViewerSlide",style:Ee(-window.innerWidth+B-40)},a.ZP.createElement(me,Ze({},h,{messageId:F}))),E&&a.ZP.createElement("div",{className:"MediaViewerSlide "+(d?"MediaViewerSlide--active":""),onClick:A,ref:v,style:Ee(B,x,$)},a.ZP.createElement(me,Ze({},h,{messageId:E,isActive:d&&p.current,setIsFooterHidden:I,isFooterHidden:b||y||1!==$}))),L&&1===$&&a.ZP.createElement("div",{className:"MediaViewerSlide",style:Ee(window.innerWidth+B+40)},a.ZP.createElement(me,Ze({},h,{messageId:L}))))}));function Ee(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:0,t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:1;return`transform: translate3d(${e.toFixed(3)}px, ${t.toFixed(3)}px, 0px) scale(${n.toFixed(3)});`}function Ce(e,t){return!!e&&(!!e.matches(t)||Boolean(e.closest(t)))}function fe(e){const t=e.target;return!!Ce(t,".VideoPlayerControls")&&(Ce(t,".play, .fullscreen, .volume, .volume-slider, .playback-rate, .playback-rate-menu")||e.preventDefault(),!0)}var be=n(782);const Ie=[1,0,0,1,0,0],ye={1:1,1.5:1.5,2:2.2,2.5:3.3,3:5.5},Se=150,Ne=(0,a.X$)((e=>{let{children:t,className:n,noWrap:s,canPan:r,zoomLevel:l,panDeltaX:o,panDeltaY:i,onPan:c}=e;const d=ye[l]||l,[m,u]=(0,a.eJ)(!1),[h,Z]=(0,a.eJ)({dx:o,dy:i,x:0,y:0}),[v,P]=(0,a.eJ)(Ie),g=(0,a.sO)(null),p=(0,a.sO)(null);return(0,a.d4)((()=>{const e=d||v[0],t=o||v[4],n=i||v[5],a=[...v];v[0]!==e&&(a[0]=e||a[0],a[3]=e||a[3]),v[4]!==t&&(a[4]=t),v[5]!==n&&(a[5]=n),(0,be.et)(v,a)||P(function(e,t,n){const a=n&&n.querySelector(".Transition__slide--active img");if(!n||!a)return t;const s=n.getBoundingClientRect(),r=a.getBoundingClientRect(),l=r.width/e*t[0],o=r.height/e*t[3],i=(s.width-l)/2+t[4],c=(s.height-o)/2+t[5];return s.width&&s.width-Se{r||P(Ie)}),[r]),(0,a.d4)((()=>{p.current&&(p.current.style.transform=`matrix(${v.toString()})`)}),[s,v]),s?t:a.ZP.createElement("div",{ref:g,className:`pan-wrapper ${n||""}`,onMouseDown:e=>{if(!r)return;e.stopPropagation(),e.preventDefault();const t={dx:v[4],dy:v[5],x:e.pageX,y:e.pageY};Z(t),u(!0),g.current&&g.current.classList.add("move")},onMouseUp:()=>{u(!1),g.current&&g.current.classList.remove("move"),c&&c(v[4],v[5])},onMouseMove:e=>{if(m){const t=function(e,t){const n=[...v],a=h.x-e,s=h.y-t;return n[4]=h.dx-a,n[5]=h.dy-s,n}(e.pageX,e.pageY);P(t),p.current&&(p.current.style.transform=`matrix(${v.toString()})`)}}},a.ZP.createElement("div",{ref:p,className:"pan-container"},t))}));var ke=n(2340),we=n(172);const Me=(0,s.c$)(((e,t)=>{let{chatId:n,messageId:a,isAvatar:s}=t;if(s&&n)return{sender:(0,f.YC)(n)?(0,b.dy)(e,n):(0,b.Z1)(e,n)};if(!a||!n)return{};const r=(0,b.hj)(e,n,a);return{message:r,sender:r&&(0,b.Ur)(e,r)}}))((e=>{let{chatId:t,messageId:n,sender:r,isAvatar:l,message:o}=e;const{closeMediaViewer:c,focusMessage:d,toggleChatInfo:m}=(0,s.Sv)(),u=(0,a.I4)((()=>{c(),i.wB?setTimeout((()=>{m(!1,{forceSyncOnIOs:!0}),d({chatId:t,messageId:n})}),350):d({chatId:t,messageId:n})}),[t,d,m,n,c]),h=(0,g.Z)();if(!r||!o&&!l)return;const Z=(0,f.OU)(h,r);return a.ZP.createElement("div",{className:"SenderInfo",onClick:u},(0,f.YC)(r.id)?a.ZP.createElement(we.Z,{key:r.id,size:"medium",user:r}):a.ZP.createElement(we.Z,{key:r.id,size:"medium",chat:r}),a.ZP.createElement("div",{className:"meta"},a.ZP.createElement("div",{className:"title",dir:"auto"},Z&&(0,ke.Z)(Z)),a.ZP.createElement("div",{className:"date",dir:"auto"},l?h("lng_mediaview_profile_photo"):(0,te.ZK)(h,1e3*o.date,!0))))})),Te=e=>{let{children:t,...n}=e;return i.$b?t(!0,!0,1):a.ZP.createElement($.Z,n,t)},Re=(0,a.X$)((e=>{let{isShown:t,onChangeZoom:n}=e;const{transitionClassNames:s}=(0,K.Z)(t),r=(0,C.Z)(t),l=(0,a.sO)(null),[o,c]=(0,a.eJ)(1),d=(0,a.sO)(!1);(0,a.d4)((()=>{t&&!r&&c(1.5)}),[t,r]);const m=(0,a.I4)((()=>{l.current&&c(Math.max(1,o-.5))}),[o]),u=(0,a.I4)((()=>{l.current&&c(Math.min(3,o+.5))}),[o]),h=(0,a.I4)((()=>{d.current=!0}),[]),Z=(0,a.I4)((()=>{d.current=!1,1===o&&n(o,!d.current)}),[n,o]);(0,a.d4)((()=>{n(o,!d.current)}),[o,n]);const v=(0,g.Z)(),P=(0,H.Z)("ZoomControls",s);return a.ZP.createElement("div",{className:P},a.ZP.createElement(B.Z,{disabled:1===o,size:"tiny",color:"translucent-white",ariaLabel:v("ZoomOut"),className:"zoom-out",ripple:!i.wB,onClick:m},a.ZP.createElement("i",{className:"icon-zoom-out"})),a.ZP.createElement(B.Z,{disabled:3===o,size:"tiny",color:"translucent-white",ariaLabel:"Zoom In",className:"zoom-in",ripple:!i.wB,onClick:u},a.ZP.createElement("i",{className:"icon-zoom-in"})),a.ZP.createElement("div",{className:"seekline"},a.ZP.createElement("div",{className:"seekline-track"},a.ZP.createElement("div",{className:"seekline-played",style:`width: ${50*(o-1)}%`}),a.ZP.createElement("input",{ref:l,min:1,max:3,step:"0.5",value:o,type:"range",className:"seekline-input",onChange:e=>{c(Math.min(3,Math.max(Number(e.target.value),1)))},onMouseDown:h,onMouseUp:Z}))))})),Ae=350,Le=(0,a.X$)((0,s.c$)((e=>{const{chatId:t,threadId:n,messageId:a,avatarOwnerId:s,profilePhotoIndex:r,origin:o}=e.mediaViewer,{animationLevel:i}=e.settings.byKey;if(o===l.bZ.SearchResult){if(!t||!a)return{animationLevel:i};const n=(0,b.hj)(e,t,a);return n?{chatId:t,messageId:a,senderId:n.senderId,origin:o,message:n,animationLevel:i}:{animationLevel:i}}if(s)return{messageId:-1,senderId:s,avatarOwner:(0,b.dy)(e,s)||(0,b.Z1)(e,s),profilePhotoIndex:r||0,animationLevel:i,origin:o};if(!(t&&n&&a))return{animationLevel:i};let c,d,m;if(c=o&&[l.bZ.ScheduledAlbum,l.bZ.ScheduledInline].includes(o)?(0,b.Tm)(e,t,a):(0,b.hj)(e,t,a),!c)return{animationLevel:i};if(d=o&&[l.bZ.ScheduledAlbum,l.bZ.ScheduledInline].includes(o)?(0,b.Fn)(e,t):(0,b.Zw)(e,t),o===l.bZ.Inline||o===l.bZ.Album)m=(0,b.qC)(e,t,n)||(0,b.gb)(e,t,n);else if(o===l.bZ.SharedMedia){const t=(0,b.we)(e),{foundIds:n}=t&&t.resultsByType&&t.resultsByType.media||{};m=n}return{chatId:t,threadId:n,messageId:a,senderId:c.senderId,origin:o,message:c,chatMessages:d,collectionIds:m,animationLevel:i}}))((e=>{let{chatId:t,threadId:n,messageId:c,senderId:d,origin:m,avatarOwner:h,profilePhotoIndex:b,message:M,chatMessages:D,collectionIds:O,animationLevel:U}=e;const{openMediaViewer:_,closeMediaViewer:J,openForwardMenu:X,focusMessage:z,toggleChatInfo:Y}=(0,s.Sv)(),H=Boolean(h||c),V=m===l.bZ.SharedMedia,j=m===l.bZ.SearchResult,q=M?(0,f.O$)(M):void 0,K=M?(0,f.b7)(M):void 0,W=M?(0,f.F$)(M):void 0,Q=M?(0,f.Cg)(M):void 0,ee=!!M&&(0,f.rl)(M),te=!!M&&(0,f.hC)(M),ne=Boolean(K||Q||te),{isGif:ae}=K||Q||{},se=Boolean(!ne&&(q||W||ee)),re=Boolean(h),le=W||Q?c:void 0,oe=(0,a.Ye)((()=>le?[le]:(0,f.N0)(D||{},O||[],V)),[le,D,O,V]),ie=c?oe.indexOf(c):-1,ce=0===ie||-1===ie,de=ie===oe.length-1||-1===ie,me=(0,a.sO)(),ue=(0,C.Z)(d);!H||ue&&ue===d&&me.current||(me.current=ie);const he=U>=1&&!i.$b?"mv-slide":"none",Ze=2===U?"slide-fade":"none",ve=2===U,[Pe,ge]=(0,a.eJ)(!1),[Ee,Ce]=(0,a.eJ)(!1),[fe,be]=(0,a.eJ)(1),[Ie,ye]=(0,a.eJ)({x:0,y:0});function Se(e){if(re&&void 0!==b){const{photos:t}=h;return t&&t[b]?`photo${t[b].id}?size=c`:(0,f.RT)(h,e?"big":"normal")}return M&&(0,f.Ti)(M,e?"viewerFull":"viewerPreview")}const ke=(0,p.Z)(M&&(V||j)&&(0,f.Ti)(M,"pictogram"),void 0,r.IU.BlobUrl,void 0,ve&&Ae),we=Se(),Le=(0,p.Z)(we,void 0,r.IU.BlobUrl,void 0,ve&&Ae),{mediaData:Fe}=(0,E.Z)(Se(!0),void 0,M&&(0,f.kG)(M,"viewerFull"),void 0,ve&&Ae),Be=q||K?(q||K).blobUrl:void 0;let xe=!ne&&(Be||Fe)||Le||ke;const $e=Z(!xe&&M&&(0,f.DH)(M));xe||m===l.bZ.SearchResult||(xe=$e);const De=M?(0,f.ep)(M):re?`avatar${h.id}-${b}.jpg`:void 0;let Oe;M?ee||te?Oe=(0,f.aE)(M).mediaSize:q||W?Oe=(0,f.bV)(q||W):(K||Q)&&(Oe=(0,f.jC)(K||Q)):Oe=k.vY,(0,a.d4)((()=>{i.wB&&document.body.classList.toggle("is-media-viewer-open",H)}),[H]);const Ue=(0,u.Z)();(0,a.d4)((()=>{const e=window.matchMedia(k.L6);return"function"==typeof e.addEventListener?e.addEventListener("change",Ue):"function"==typeof e.addListener&&e.addListener(Ue),()=>{"function"==typeof e.removeEventListener?e.removeEventListener("change",Ue):"function"==typeof e.removeListener&&e.removeListener(Ue)}}),[Ue]);const Ge=(0,C.Z)(M),_e=(0,C.Z)(m),Je=(0,C.Z)(h),Xe=(0,C.Z)(xe),ze=M?(0,w.X)(M):void 0,Ye=Boolean(ze);(0,a.d4)((()=>{ve&&H&&!Ge&&!Je&&((0,v.YW)(Ae+o.fK),function(e,t,n,a,s,r){const{mediaEl:c}=L(t,r);if(!c)return;const{width:d}=N.Z.get(),{width:m,height:u}=(0,k.fM)(e,s),{width:h,height:Z}=(0,k.jg)(m,u,a.width,a.height),v=(d-h)/2,P=function(e){const t=window.matchMedia(k.L6);let n=4.125;return e&&!i.$b&&(n+=t.matches?.875:2.125),n*k.Gw}(e)+(u-Z)/2;let{top:g,left:p,width:E,height:C}=c.getBoundingClientRect();if([l.bZ.SharedMedia,l.bZ.Album,l.bZ.ScheduledAlbum,l.bZ.SearchResult].includes(t)){const e=function(e,t,n,a,s,r){if(e===t){const l=Math.max(s,r)*(e/t);a-=(l-s)/2,n-=(l-r)/2,s=l,r=l}else if(e>t){const n=s;a-=((s=r*(e/t))-n)/2}else if(t>e){const a=r;n-=((r=s*(t/e))-a)/2}return{top:n,left:a,width:s,height:r}}(h,Z,g,p,E,C);g=e.top,p=e.left,E=e.width,C=e.height}const f=p+E/2-(v+h/2),b=g+C/2-(P+Z/2),I=E/h,y=C/Z,S=T(n||c);A(S,{top:`${P}px`,left:`${v}px`,width:`${h}px`,height:`${Z}px`,transform:`translate3d(${f}px, ${b}px, 0) scale(${I}, ${y})`}),F(S,t),document.body.classList.add("ghost-animating"),requestAnimationFrame((()=>{document.body.appendChild(S),requestAnimationFrame((()=>{S.style.transform="",function(e){e.firstChild.style.objectFit="default",e.classList.remove("rounded-corners","circle")}(S),setTimeout((()=>{requestAnimationFrame((()=>{document.body.contains(S)&&document.body.removeChild(S),document.body.classList.remove("ghost-animating")}))}),200+o.fK)}))}))}(Ye,m,xe,Oe,ne,M)),ve&&!H&&(Ge||Je)&&((0,v.YW)(Ae+o.fK),function(e,t,n){const{container:a,mediaEl:s}=L(e,n);if(!s)return;const r=document.getElementById("MediaViewer").querySelector(".MediaViewerSlide--active img, .MediaViewerSlide--active video");if(!r||!s)return;const{top:i,left:c,width:d,height:m}=r.getBoundingClientRect(),{top:u,left:h,width:Z,height:v}=s.getBoundingClientRect();let P=u;if(!function(e){if("none"===e.style.display)return!1;const t=e.getBoundingClientRect(),{height:n}=N.Z.get();return t.top<=n&&t.top+t.height>=0}(a)){const{height:e}=N.Z.get();P=uC?E=C:C>E&&(C=E));const b=document.getElementsByClassName("ghost")[0],I=b||T(t||s,e);b||A(I,{top:`${P}px`,left:`${h}px`,width:`${Z}px`,height:`${v}px`,transform:`translate3d(${g}px, ${p}px, 0) scale(${E}, ${C})`}),requestAnimationFrame((()=>{if(b){const{top:e,left:t,width:n,height:a}=b.getBoundingClientRect();A(I,{transition:"none",top:`${P}px`,left:`${h}px`,transformOrigin:"top left",transform:`translate3d(${t-h}px, ${e-P}px, 0) scale(${n/Z}, ${a/v})`,width:`${Z}px`,height:`${v}px`})}document.body.classList.add("ghost-animating"),b||document.body.appendChild(I),requestAnimationFrame((()=>{b&&(b.style.transition=""),I.style.transform="",f&&(I.style.opacity="0"),F(I,e),setTimeout((()=>{requestAnimationFrame((()=>{document.body.contains(I)&&document.body.removeChild(I),document.body.classList.remove("ghost-animating")}))}),200+o.fK)}))}))}(_e,Xe,Ge||void 0))}),[ve,H,m,_e,M,Ge,Je,xe,Xe,Oe,ne,Ye]),(0,a.d4)((()=>{let e;return Ee?ge(!0):e=window.setTimeout((()=>{ge(!1)}),Ae),()=>{e&&window.clearTimeout(e)}}),[Ee]);const He=()=>{Ce(!1),be(1),ye({x:0,y:0})},Ve=(0,a.I4)((()=>{Ce(!Ee),be(Ee?1:1.5),Ee&&ye({x:0,y:0})}),[Ee]),je=(0,a.I4)((function(e){let t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];be(e),1===e&&t&&He()}),[]),qe=(0,a.I4)((()=>{J(),He()}),[J]),Ke=(0,a.I4)((()=>{qe(),i.wB?setTimeout((()=>{Y(!1,{forceSyncOnIOs:!0}),z({chatId:t,threadId:n,messageId:c})}),Ae):z({chatId:t,threadId:n,messageId:c})}),[qe,t,n,z,Y,c]),We=(0,a.I4)((()=>{X({fromChatId:t,messageIds:[c]}),He()}),[X,t,c]),Qe=(0,a.I4)((e=>_({chatId:t,threadId:n,messageId:e,origin:m},{forceOnHeavyAnimation:!0})),[t,_,m,n]);(0,a.d4)((()=>H?(0,y.Z)((()=>{Ee?He():qe()})):void 0),[qe,H,Ee]),(0,a.d4)((()=>{ne&&!ae&&(0,I.Es)()}),[ae,ne]),(0,a.d4)((()=>{if(H)return N.Z.disableRefresh(),()=>{N.Z.enableRefresh()}}),[H]);const et=(0,a.I4)(((e,t)=>{if(!e)return;const n=oe.indexOf(e);return-1===t&&n>0||1===t&&n{ye({x:e,y:t})}),[]),st=(0,g.Z)();return(0,P.ZP)(H,J,_,{chatId:t,threadId:n,messageId:c,origin:m,avatarOwnerId:h&&h.id}),(0,a.d4)((()=>{if(H)return document.addEventListener("keydown",e,!1),()=>{document.removeEventListener("keydown",e,!1)};function e(e){switch(e.key){case"Left":case"ArrowLeft":Qe(nt);break;case"Right":case"ArrowRight":Qe(tt)}}}),[H,tt,nt,Qe]),(0,a.d4)((()=>{if(Ee||i.$b)return;const e=document.querySelector(".MediaViewerSlide--active");if(!e)return;const t=ae&&!i.cj;return(0,S.sf)(e,{excludedClosestSelector:".backdrop, .navigation, .media-viewer-head, .Spoiler, .media-viewer-footer"+(t?"":", .VideoPlayer"),onClick:qe})}),[qe,ae,Ee,c]),a.ZP.createElement(x.Z,{id:"MediaViewer",className:Ee?"zoomed":"",isOpen:H},a.ZP.createElement("div",{className:"media-viewer-head",dir:st.isRtl?"rtl":void 0},i.wB&&a.ZP.createElement(B.Z,{className:"media-viewer-close",round:!0,size:"smaller",color:"translucent-white",ariaLabel:st("Close"),onClick:qe},a.ZP.createElement("i",{className:"icon-close"})),a.ZP.createElement($.Z,{activeKey:me.current,name:Ze},re?a.ZP.createElement(Me,{key:h.id,chatId:h.id,isAvatar:!0}):a.ZP.createElement(Me,{key:c,chatId:t,messageId:c})),a.ZP.createElement(G,{mediaData:Fe||Le,isVideo:ne,isZoomed:Ee,message:M,fileName:De,onCloseMediaViewer:qe,onForward:We,onZoomToggle:Ve,isAvatar:re})),a.ZP.createElement(Ne,{noWrap:!Pe,canPan:Ee,panDeltaX:Ie.x,panDeltaY:Ie.y,zoomLevel:fe,onPan:at},a.ZP.createElement(Te,{activeKey:ie,name:he},(e=>a.ZP.createElement(pe,{messageId:c,getMessageId:et,chatId:t,isPhoto:se,isGif:ae,threadId:n,avatarOwnerId:h&&h.id,profilePhotoIndex:b,origin:m,isOpen:H,hasFooter:Ye,isZoomed:Ee,isActive:e,isVideo:ne,animationLevel:U,onClose:qe,selectMessage:Qe,onFooterClick:Ke})))),!ce&&!i.$b&&a.ZP.createElement("button",{type:"button",className:`navigation prev ${ne&&!ae&&"inline"}`,"aria-label":st("AccDescrPrevious"),dir:st.isRtl?"rtl":void 0,onClick:()=>Qe(nt)}),!de&&!i.$b&&a.ZP.createElement("button",{type:"button",className:`navigation next ${ne&&!ae&&"inline"}`,"aria-label":st("Next"),dir:st.isRtl?"rtl":void 0,onClick:()=>Qe(tt)}),a.ZP.createElement(Re,{isShown:Ee,onChangeZoom:je}))})));var Fe=n(8360),Be=n(7407),xe=n(2313),$e=n(2515),De=n(4288),Oe=n(3103),Ue=n(7687),Ge=n(1273),_e=n(1876),Je=n(8799),Xe=n(6058);const ze=(0,a.X$)((e=>{let{isOpen:t,currentUserId:n,chatOrUserIds:s,filterRef:r,filter:l,filterPlaceholder:i,loadMore:c,onFilterChange:d,onSelectChatOrUser:m,onClose:u,onCloseAnimationEnd:h}=e;const Z=(0,g.Z)(),[v,P]=(0,Be.Z)(c,s,Boolean(l)),p=(0,a.I4)((()=>{d("")}),[d]);(0,$e.Z)(r,t,p);const E=(0,a.sO)(null),C=(0,a.I4)((e=>{d(e.currentTarget.value)}),[d]),b=(0,xe.Z)(E,t,(e=>{v&&v.length>0&&m(v[-1===e?0:e])}),".ListItem-button",!0),I=a.ZP.createElement("div",{className:"modal-header",dir:Z.isRtl?"rtl":void 0},a.ZP.createElement(B.Z,{round:!0,color:"translucent",size:"smaller",ariaLabel:Z("Close"),onClick:u},a.ZP.createElement("i",{className:"icon-close"})),a.ZP.createElement(Ue.Z,{ref:r,value:l,onChange:C,onKeyDown:b,placeholder:i})),y=s.indexOf(v[0]);return a.ZP.createElement(Oe.Z,{isOpen:t,className:"ChatOrUserPicker",header:I,onClose:u,onCloseAnimationEnd:h},null!=v&&v.length?a.ZP.createElement(Ge.Z,{ref:E,className:"picker-list custom-scroll",items:v,onLoadMore:P,withAbsolutePositioning:!0,maxHeight:s.length*o.rS,onKeyDown:b},v.map(((e,t)=>a.ZP.createElement(_e.Z,{key:e,className:"chat-item-clickable force-rounded-corners",style:`top: ${(y+t)*o.rS}px;`,onClick:()=>m(e)},(0,f.YC)(e)?a.ZP.createElement(Xe.Z,{status:e===n?Z("SavedMessagesInfo"):void 0,userId:e}):a.ZP.createElement(Je.Z,{chatId:e}))))):v&&!v.length?a.ZP.createElement("p",{className:"no-results"},Z("lng_blocked_list_not_found")):a.ZP.createElement(De.Z,null))})),Ye=(0,a.X$)((0,s.c$)((e=>{var t;const{chats:{byId:n,listIds:a,orderedPinnedIds:s},currentUserId:r}=e;return{chatsById:n,activeListIds:a.active,archivedListIds:a.archived,pinnedIds:s.active,contactIds:null===(t=e.contactList)||void 0===t?void 0:t.userIds,currentUserId:r}}))((e=>{let{chatsById:t,activeListIds:n,archivedListIds:l,pinnedIds:o,contactIds:i,currentUserId:c,isOpen:d}=e;const{setForwardChatId:m,exitForwardMode:u}=(0,s.Sv)(),h=(0,g.Z)(),[Z,v]=(0,a.eJ)(""),P=(0,a.sO)(null),[p,E,C]=(0,ee.Z)();(0,a.d4)((()=>{d&&E()}),[d,E]);const b=(0,a.Ye)((()=>{if(!d)return;let e=o||[];c&&(e=(0,be.Tw)([c,...e]));const a=[...n||[],...l||[]].filter((e=>{const n=t[e];return n&&(0,f.Qm)(n,r._f)})),m=(0,s.Rd)().users.byId;return(0,f.ih)((0,be.Tw)([...(0,f.$l)(h,a,t,Z,c),...i?(0,f.kK)(i,m,Z):[]]),t,void 0,e)}),[n,l,t,i,c,Z,d,h,o]),I=(0,a.I4)((e=>{m({id:e})}),[m]),y=(0,Fe.Z)(b,!0);if(d||p)return a.ZP.createElement(ze,{currentUserId:c,isOpen:d,chatOrUserIds:y,filterRef:P,filterPlaceholder:h("ForwardTo"),filter:Z,onFilterChange:v,onSelectChatOrUser:I,onClose:u,onCloseAnimationEnd:C})})));var He=n(1947);function Ve(e){return e.isSlowMode?"Slowmode enabled":e.hasErrorKey?"Something went wrong":"Telegram"}const je=(0,a.X$)((0,s.c$)((e=>(0,be.ei)(e,["dialogs"])))((e=>{let{dialogs:t}=e;const{dismissDialog:n,acceptInviteConfirmation:r,sendMessage:l,showNotification:o}=(0,s.Sv)(),[i,c,d]=(0,ee.Z)(),m=(0,g.Z)();var u,h,Z;if((0,a.d4)((()=>{t.length>0&&c()}),[t,c]),t.length)return a.ZP.createElement("div",{id:"Dialogs"},Boolean(t.length)&&("hash"in(u=t[t.length-1])?(e=>{const{hash:t,title:s,about:l,participantsCount:c,isChannel:u,photo:h,isRequestNeeded:Z}=e,P=m(u?"Subscribers":"Members",c,"i"),g=m(u?"ChannelJoin":"JoinGroup"),p=m(u?"MemberRequests.RequestToJoinChannel":"MemberRequests.RequestToJoinGroup");return a.ZP.createElement(Oe.Z,{isOpen:i,onClose:d,className:"error",header:v(s,h),onCloseAnimationEnd:n},void 0!==c&&a.ZP.createElement("p",{className:"modal-help"},P),l&&a.ZP.createElement("p",{className:"modal-about"},(0,ke.Z)(l,["br"])),Z&&a.ZP.createElement("p",{className:"modal-help"},m(u?"MemberRequests.RequestToJoinDescriptionChannel":"MemberRequests.RequestToJoinDescriptionGroup")),a.ZP.createElement(B.Z,{isText:!0,className:"confirm-dialog-button",onClick:()=>{r({hash:t}),o({message:m(u?"RequestToJoinChannelSentDescription":"RequestToJoinGroupSentDescription")}),d()}},Z?p:g),a.ZP.createElement(B.Z,{isText:!0,className:"confirm-dialog-button",onClick:d},m("Cancel")))})(u):"phoneNumber"in u?(h=u,a.ZP.createElement(Oe.Z,{isOpen:i,onClose:d,className:"confirm",title:m("ShareYouPhoneNumberTitle"),onCloseAnimationEnd:n},m("AreYouSureShareMyContactInfoBot"),a.ZP.createElement("div",null,a.ZP.createElement(B.Z,{className:"confirm-dialog-button",isText:!0,onClick:()=>{l({contact:(0,be.ei)(h,["firstName","lastName","phoneNumber"])}),d()}},m("OK")),a.ZP.createElement(B.Z,{className:"confirm-dialog-button",isText:!0,onClick:d},m("Cancel"))))):(Z=u,a.ZP.createElement(Oe.Z,{isOpen:i,onClose:d,onCloseAnimationEnd:n,className:"error",title:Ve(Z)},Z.hasErrorKey?(0,He.ZP)(Z):(0,ke.Z)(Z.message,["emoji","br"]),a.ZP.createElement("div",null,a.ZP.createElement(B.Z,{isText:!0,onClick:d},m("OK")))))));function v(e,t){return a.ZP.createElement("div",{className:"modal-header"},t&&a.ZP.createElement(we.Z,{size:"small",photo:t}),a.ZP.createElement("div",{className:"modal-title"},(0,ke.Z)(e)),a.ZP.createElement(B.Z,{round:!0,color:"translucent",size:"smaller",ariaLabel:m("Close"),onClick:d},a.ZP.createElement("i",{className:"icon-close"})))}})));var qe=n(6937);const Ke=(0,a.X$)((0,s.c$)((e=>(0,be.ei)(e,["notifications"])))((e=>{let{notifications:t}=e;const{dismissNotification:n}=(0,s.Sv)();if(t.length)return a.ZP.createElement("div",{id:"Notifications"},t.map((e=>{let{message:t,localId:s}=e;return a.ZP.createElement(qe.Z,{message:(0,ke.Z)(t,["emoji","br","links","simple_markdown"]),onDismiss:()=>n({localId:s})})})))})));var We=n(1396),Qe=n(7551);const et=(0,a.X$)((e=>{let{url:t}=e;const{toggleSafeLinkModal:n}=(0,s.Sv)(),r=(0,g.Z)(),l=(0,a.I4)((()=>{window.open((0,We.X)(t)),n({url:void 0})}),[n,t]),o=(0,a.I4)((()=>{n({url:void 0})}),[n]),i=(0,Fe.Z)(t);return a.ZP.createElement(Qe.Z,{isOpen:Boolean(t),onClose:o,title:r("OpenUrlTitle"),textParts:(0,ke.Z)(r("OpenUrlAlert2",i),["links"]),confirmLabel:r("OpenUrlTitle"),confirmHandler:l})})),tt=2147483647e3,nt=["lng_weekday1","lng_weekday2","lng_weekday3","lng_weekday4","lng_weekday5","lng_weekday6","lng_weekday7"];function at(e,t,n,a,s){const r=new Date(e,t,n),l=a&&(0,te.$Y)(a),o=s&&(0,te.$Y)(s);return!!(o&&r>o)||!!(l&&r{let{selectedAt:t,minAt:n,maxAt:s,isFutureMode:r,isPastMode:l,isOpen:o,withTimePicker:i,submitButtonLabel:c,secondButtonLabel:d,onClose:m,onSubmit:u,onSecondButtonClick:h}=e;const Z=(0,g.Z)(),v=new Date,P=(0,a.Ye)((()=>r&&!n?new Date:new Date(Math.max(n||0,0))),[r,n]),p=(0,a.Ye)((()=>l&&!s?new Date:new Date(Math.min(s||tt,tt))),[l,s]),E=(0,a.Ye)((()=>t?new Date(t):new Date),[t]),f=(0,C.Z)(o),[b,I,y]=(0,ee.Z)(!1),[S,N]=(0,a.eJ)(E),[k,w]=(0,a.eJ)(new Date(S.getFullYear(),S.getMonth(),1)),[M,T]=(0,a.eJ)(st(E.getHours())),[R,A]=(0,a.eJ)(st(E.getMinutes())),L=rt(S.getFullYear(),S.getMonth(),S.getDate()),F=k.getFullYear(),x=k.getMonth();(0,a.d4)((()=>{!f&&o&&(N(E),w(new Date(E.getFullYear(),E.getMonth(),1)),i&&(T(st(E.getHours())),A(st(E.getMinutes()))))}),[E,o,f,i]),(0,a.d4)((()=>{r&&!b&&S.getTime(){l&&!b&&S.getTime()>p.getTime()&&(N(p),T(st(p.getHours())),A(st(p.getMinutes())))}),[r,l,b,p,P,S]),(0,a.d4)((()=>{if(t){const e=new Date(t);N(e),T(st(e.getHours())),A(st(e.getMinutes()))}}),[t]);const $=l&&F>=v.getFullYear()&&x>=v.getMonth()||p&&F>=p.getFullYear()&&x>=p.getMonth(),D=r&&F<=v.getFullYear()&&x<=v.getMonth(),{prevMonthGrid:O,currentMonthGrid:U,nextMonthGrid:G}=(0,a.Ye)((()=>function(e,t){const n=[],a=[],s=[],r=new Date;r.setDate(1),r.setMonth(t),r.setFullYear(e);const l=r.getDay(),o=new Date(e,t,0).getDate();for(let e=1;e0)for(let e=1;e<=7-i;e++)s.push(e);return{prevMonthGrid:n,currentMonthGrid:a,nextMonthGrid:s}}(F,x)),[x,F]),_=(0,a.Ye)((()=>c||function(e,t){const n=(0,te.xH)(t,e.code);return n===(0,te.xH)(new Date,e.code)?e("Conversation.ScheduleMessage.SendToday",(0,te.mr)(e,t)):e("Conversation.ScheduleMessage.SendOn",[n,(0,te.mr)(e,t)])}(Z,S)),[Z,S,c]),J=(0,a.I4)((()=>{u(S)}),[u,S]),X=(0,a.I4)((e=>{const t=e.target.value.replace(/[^\d]+/g,"");if(!t.length)return T(""),void(e.target.value="");const n=Math.max(0,Math.min(Number(t),23)),a=new Date(S.getTime());a.setHours(n),N(a);const s=st(n);T(s),e.target.value=s}),[S]),z=(0,a.I4)((e=>{const t=e.target.value.replace(/[^\d]+/g,"");if(!t.length)return A(""),void(e.target.value="");const n=Math.max(0,Math.min(Number(t),59)),a=new Date(S.getTime());a.setMinutes(n),N(a);const s=st(n);A(s),e.target.value=s}),[S]);return a.ZP.createElement(Oe.Z,{isOpen:o,onClose:m,className:"CalendarModal"},a.ZP.createElement("div",{className:"container"},a.ZP.createElement("div",{className:"month-selector"},a.ZP.createElement(B.Z,{round:!0,size:"smaller",color:"translucent",onClick:m},a.ZP.createElement("i",{className:"icon-close"})),a.ZP.createElement("h4",null,Z(`lng_month${x+1}`)," ",F),a.ZP.createElement(B.Z,{round:!0,size:"smaller",color:"translucent",disabled:D,onClick:D?void 0:function(){w((e=>{const t=new Date(e);return t.setMonth(t.getMonth()-1),t}))}},a.ZP.createElement("i",{className:"icon-previous"})),a.ZP.createElement(B.Z,{round:!0,size:"smaller",color:"translucent",disabled:$,onClick:$?void 0:function(){w((e=>{const t=new Date(e);return t.setMonth(t.getMonth()+1),t}))}},a.ZP.createElement("i",{className:"icon-next"})))),a.ZP.createElement("div",{className:"calendar-wrapper"},a.ZP.createElement("div",{className:"calendar-grid"},nt.map((e=>a.ZP.createElement("div",{className:"day-button faded weekday"},a.ZP.createElement("span",null,Z(e))))),O.map((e=>a.ZP.createElement("div",{className:"day-button disabled"},a.ZP.createElement("span",null,e)))),U.map((e=>a.ZP.createElement("div",{role:"button",tabIndex:0,onClick:()=>{return t=e,void N((e=>{const n=new Date(e);return n.setDate(t),n.setMonth(x),n.setFullYear(F),n}));var t},className:(0,H.Z)("day-button",at(F,x,e,P,p)?"disabled":e?"clickable":"",L===rt(F,x,e)&&"selected")},Boolean(e)&&a.ZP.createElement("span",null,e)))),G.map((e=>a.ZP.createElement("div",{className:"day-button disabled"},a.ZP.createElement("span",null,e)))))),i&&a.ZP.createElement("div",{className:"timepicker"},a.ZP.createElement("input",{type:"text",className:"form-control",inputMode:"decimal",value:M,onChange:X,onFocus:I,onBlur:y}),":",a.ZP.createElement("input",{type:"text",className:"form-control",inputMode:"decimal",value:R,onChange:z,onFocus:I,onBlur:y})),a.ZP.createElement("div",{className:"footer"},a.ZP.createElement(B.Z,{onClick:J},_),d&&a.ZP.createElement(B.Z,{onClick:h,isText:!0},d)))})),ot=(0,a.X$)((0,s.c$)((e=>({selectedAt:e.historyCalendarSelectedAt})))((e=>{let{isOpen:t,selectedAt:n}=e;const{searchMessagesByDate:r,closeHistoryCalendar:l}=(0,s.Sv)(),o=(0,a.I4)((e=>{r({timestamp:e.valueOf()/1e3}),l()}),[l,r]),i=(0,g.Z)();return a.ZP.createElement(lt,{isOpen:t,selectedAt:n,isPastMode:!0,submitButtonLabel:i("JumpToDate"),onClose:l,onSubmit:o})})));var it=n(6272),ct=n(4605);const dt=(0,a.X$)((0,s.c$)(((e,t)=>{let{userId:n}=t;return{user:n?(0,b.dy)(e,n):void 0,userStatus:n?(0,b.ss)(e,n):void 0,serverTimeOffset:e.serverTimeOffset,phoneCodeList:e.countryList.phoneCodes}}))((e=>{var t,n,r;let{isOpen:l,userId:o,isByPhoneNumber:c,user:d,userStatus:m,phoneCodeList:u,serverTimeOffset:h}=e;const{updateContact:Z,importContact:v,closeNewContactDialog:P}=(0,s.Sv)(),p=(0,g.Z)(),E=(0,Fe.Z)(d),C=(0,Fe.Z)(c),b=(0,a.sO)(null),[I,y,S]=(0,ee.Z)(),[N,k]=(0,a.eJ)(null!==(t=null==E?void 0:E.firstName)&&void 0!==t?t:""),[w,M]=(0,a.eJ)(null!==(n=null==E?void 0:E.lastName)&&void 0!==n?n:""),[T,R]=(0,a.eJ)(null!==(r=null==E?void 0:E.phoneNumber)&&void 0!==r?r:""),[A,L]=(0,a.eJ)(!0),F=Boolean(N&&(!c||T));(0,a.d4)((()=>{var e,t,n;l&&(y(),k(null!==(e=null==E?void 0:E.firstName)&&void 0!==e?e:""),M(null!==(t=null==E?void 0:E.lastName)&&void 0!==t?t:""),R(null!==(n=null==E?void 0:E.phoneNumber)&&void 0!==n?n:""),L(!0))}),[l,y,null==E?void 0:E.firstName,null==E?void 0:E.lastName,null==E?void 0:E.phoneNumber]),(0,a.d4)((()=>{!i.$b&&I&&setTimeout((()=>{var e;null===(e=b.current)||void 0===e||e.focus()}),200)}),[I]);const x=(0,a.I4)((e=>{k(e.target.value)}),[]),$=(0,a.I4)((e=>{R((0,it.WZ)(u,e.target.value))}),[u]),D=(0,a.I4)((e=>{M(e.target.value)}),[]),O=(0,a.I4)((()=>{P(),k(""),M(""),R("")}),[P]),U=(0,a.I4)((()=>{c||!o?v({firstName:N,lastName:w,phoneNumber:T}):Z({userId:o,firstName:N,lastName:w,shouldSharePhoneNumber:A})}),[N,v,c,w,T,A,Z,o]);if(l||I)return a.ZP.createElement(Oe.Z,{className:"NewContactModal",title:p("NewContact"),isOpen:l,onClose:O,onCloseAnimationEnd:S},E&&a.ZP.createElement(a.ZP.Fragment,null,a.ZP.createElement("div",{className:"NewContactModal__profile",dir:p.isRtl?"rtl":void 0},a.ZP.createElement(we.Z,{size:"jumbo",user:E,text:`${N} ${w}`}),a.ZP.createElement("div",{className:"NewContactModal__profile-info"},a.ZP.createElement("p",{className:"NewContactModal__phone-number"},null!=E&&E.phoneNumber?(0,it.WZ)(u,E.phoneNumber):p("MobileHidden")),a.ZP.createElement("span",{className:"NewContactModal__user-status",dir:"auto"},(0,f.Tq)(p,E,m,h)))),a.ZP.createElement(Ue.Z,{ref:b,value:N,label:p("FirstName"),tabIndex:0,onChange:x}),a.ZP.createElement(Ue.Z,{value:w,label:p("LastName"),tabIndex:0,onChange:D}),a.ZP.createElement("p",{className:"NewContactModal__help-text"},(0,ke.Z)(p("NewContact.Phone.Hidden.Text",null==E?void 0:E.firstName),["emoji","simple_markdown"])),a.ZP.createElement(ct.Z,{checked:A,tabIndex:0,onCheck:L,label:p("lng_new_contact_share")}),a.ZP.createElement("p",{className:"NewContactModal__help-text"},(0,ke.Z)(p("AddContact.SharedContactExceptionInfo",null==E?void 0:E.firstName)))),C&&a.ZP.createElement("div",{className:"NewContactModal__new-contact",dir:p.isRtl?"rtl":void 0},a.ZP.createElement(we.Z,{size:"jumbo",text:`${N} ${w}`}),a.ZP.createElement("div",{className:"NewContactModal__new-contact-fieldset"},a.ZP.createElement(Ue.Z,{ref:b,value:T,inputMode:"tel",label:p("lng_contact_phone"),tabIndex:0,onChange:$}),a.ZP.createElement(Ue.Z,{value:N,label:p("FirstName"),tabIndex:0,onChange:x}),a.ZP.createElement(Ue.Z,{value:w,label:p("LastName"),tabIndex:0,onChange:D}))),a.ZP.createElement("div",{className:"dialog-buttons"},a.ZP.createElement(B.Z,{isText:!0,className:"confirm-dialog-button",onClick:O},p("Cancel")),a.ZP.createElement(B.Z,{isText:!0,className:"confirm-dialog-button",disabled:!F,onClick:U},p("Done"))))}))),mt=(0,a.X$)((0,s.c$)(((e,t)=>{let{message:n,isSchedule:a}=t;const{threadId:s}=(0,b.Bt)(e)||{},{canDeleteForAll:r}=s&&(0,b._k)(e,n,s)||{},l=(0,b.Z1)(e,n.chatId);return{canDeleteForAll:!a&&r,contactName:l&&(0,f.YC)(l.id)?(0,f.Vl)((0,b.dy)(e,(0,f.zX)(l))):void 0,willDeleteForCurrentUserOnly:l&&(0,f.G9)(l)&&!r,willDeleteForAll:l&&(0,f.ZV)(l)}}))((e=>{let{isOpen:t,isSchedule:n,message:r,album:l,canDeleteForAll:o,contactName:i,willDeleteForCurrentUserOnly:c,willDeleteForAll:d,onClose:m}=e;const{deleteMessages:u,deleteScheduledMessages:h}=(0,s.Sv)(),Z=(0,a.I4)((()=>{const e=null!=l&&l.messages?l.messages.map((e=>{let{id:t}=e;return t})):[r.id];u({messageIds:e,shouldDeleteForAll:!0}),m()}),[u,r.id,m,l]),v=(0,a.I4)((()=>{const e=null!=l&&l.messages?l.messages.map((e=>{let{id:t}=e;return t})):[r.id];n?h({messageIds:e}):u({messageIds:e,shouldDeleteForAll:!1}),m()}),[l,r.id,n,m,h,u]),P=(0,g.Z)();return a.ZP.createElement(Oe.Z,{isOpen:t,onClose:m,onEnter:t&&!o?v:void 0,className:"delete",title:P("DeleteSingleMessagesTitle")},a.ZP.createElement("p",null,P("AreYouSureDeleteSingleMessage")),c&&a.ZP.createElement("p",null,P("lng_delete_for_me_chat_hint",1,"i")),d&&a.ZP.createElement("p",null,P("lng_delete_for_everyone_hint",1,"i")),o&&a.ZP.createElement(B.Z,{color:"danger",className:"confirm-dialog-button",isText:!0,onClick:Z},i&&(0,ke.Z)(P("Conversation.DeleteMessagesFor",i)),!i&&P("Conversation.DeleteMessagesForEveryone")),a.ZP.createElement(B.Z,{color:"danger",className:"confirm-dialog-button",isText:!0,onClick:v},P(o?"ChatList.DeleteForCurrentUser":"Delete")),a.ZP.createElement(B.Z,{className:"confirm-dialog-button",isText:!0,onClick:m},P("Cancel")))}))),ut=(0,a.X$)((0,s.c$)(((e,t)=>{let{chatId:n}=t;const a=(0,f.YC)(n),s=(0,b.FM)(e,n),r=(0,b.Z1)(e,n),l=Boolean(r)&&(0,f.eA)(r),o=Boolean(r)&&(0,f.G9)(r),i=Boolean(r)&&(0,f.ZV)(r);return{isPrivateChat:a,isChatWithSelf:s,isChannel:l,isGroup:o,isSuperGroup:i,canPinForAll:a&&!s||i||o,contactName:r&&(0,f.YC)(r.id)?(0,f.Vl)((0,b.dy)(e,(0,f.zX)(r))):void 0}}))((e=>{let{isOpen:t,messageId:n,chatId:r,isChannel:l,isGroup:o,isSuperGroup:i,canPinForAll:c,contactName:d,onClose:m}=e;const{pinMessage:u}=(0,s.Sv)(),h=(0,a.I4)((()=>{u({chatId:r,messageId:n,isUnpin:!1}),m()}),[u,r,n,m]),Z=(0,a.I4)((()=>{u({chatId:r,messageId:n,isUnpin:!1,isOneSide:!0,isSilent:!0}),m()}),[r,n,m,u]),v=(0,g.Z)();return a.ZP.createElement(Oe.Z,{isOpen:t,onClose:m,className:"pin",title:v("PinMessageAlertTitle")},a.ZP.createElement("p",null,v(l?"PinMessageAlertChannel":o||i?"PinMessageAlert":"PinMessageAlertChat")),a.ZP.createElement(B.Z,{className:"confirm-dialog-button",isText:!0,onClick:Z},v("DialogPin")),c&&a.ZP.createElement(B.Z,{className:"confirm-dialog-button",isText:!0,onClick:h},d?(0,ke.Z)(v("Conversation.PinMessagesFor",d)):v("Conversation.PinMessageAlert.PinAndNotifyMembers")),a.ZP.createElement(B.Z,{className:"confirm-dialog-button",isText:!0,onClick:m},v("Cancel")))}))),ht=(0,a.X$)((e=>{let{isOpen:t,pinnedMessagesCount:n=0,onClose:s,onUnpin:r}=e;const l=(0,g.Z)();return a.ZP.createElement(Oe.Z,{isOpen:t,onClose:s,className:"unpin-all",title:l("Chat.PanelUnpinAllMessages")},a.ZP.createElement("p",null,l("Chat.UnpinAllMessagesConfirmation",n,"i")),a.ZP.createElement(B.Z,{className:"confirm-dialog-button",isText:!0,onClick:r},l("DialogUnpin")),a.ZP.createElement(B.Z,{className:"confirm-dialog-button",isText:!0,onClick:s},l("Cancel")))}));var Zt=n(517),vt=n(7529);const Pt=(0,a.X$)((0,s.c$)(((e,t)=>{let{isSchedule:n}=t;const{messageIds:a}=e.selectedMessages||{},{canDeleteForAll:s}=(0,b.xl)(e),r=(0,b.jr)(e);return{selectedMessageIds:a,canDeleteForAll:!n&&s,contactName:r&&(0,f.YC)(r.id)?(0,f.Vl)((0,b.dy)(e,(0,f.zX)(r))):void 0,willDeleteForCurrentUserOnly:r&&(0,f.G9)(r)&&!s,willDeleteForAll:r&&(0,f.ZV)(r)}}))((e=>{let{isOpen:t,isSchedule:n,selectedMessageIds:r,canDeleteForAll:l,contactName:o,willDeleteForCurrentUserOnly:i,willDeleteForAll:c,onClose:d}=e;const{deleteMessages:m,deleteScheduledMessages:u,exitMessageSelectMode:h}=(0,s.Sv)(),Z=(0,C.Z)(t),v=(0,a.I4)((()=>{d(),m({messageIds:r,shouldDeleteForAll:!0})}),[m,r,d]),P=(0,a.I4)((()=>{n?u({messageIds:r}):m({messageIds:r,shouldDeleteForAll:!1}),d()}),[n,d,u,r,m]),p=(0,g.Z)();if((0,a.d4)((()=>{!t&&Z&&h()}),[h,t,Z]),r)return a.ZP.createElement(Oe.Z,{isOpen:t,onClose:d,onEnter:l?void 0:P,className:"delete",title:p("Conversation.DeleteManyMessages")},a.ZP.createElement("p",null,p("AreYouSureDeleteFewMessages")),i&&a.ZP.createElement("p",null,"This will delete them just for you, not for other participants in the chat."),c&&a.ZP.createElement("p",null,"This will delete them for everyone in this chat."),l&&a.ZP.createElement(B.Z,{color:"danger",className:"confirm-dialog-button",isText:!0,onClick:v},o?(0,ke.Z)(p("ChatList.DeleteForEveryone",o)):p("Conversation.DeleteMessagesForEveryone")),a.ZP.createElement(B.Z,{color:"danger",className:"confirm-dialog-button",isText:!0,onClick:P},p(l?"ChatList.DeleteForCurrentUser":"Delete")),a.ZP.createElement(B.Z,{className:"confirm-dialog-button",isText:!0,onClick:d},p("Cancel")))})));var gt=n(4434);const pt=(0,a.X$)((e=>{let{isOpen:t,messageIds:n,onClose:r}=e;const{reportMessages:l,exitMessageSelectMode:o}=(0,s.Sv)(),[i,c]=(0,a.eJ)("spam"),[d,m]=(0,a.eJ)(""),u=(0,a.I4)((()=>{l({messageIds:n,reason:i,description:d}),o(),r()}),[d,o,n,r,l,i]),h=(0,a.I4)((e=>{c(e)}),[]),Z=(0,a.I4)((e=>{m(e.target.value)}),[]),v=(0,g.Z)(),P=[{value:"spam",label:v("lng_report_reason_spam")},{value:"violence",label:v("lng_report_reason_violence")},{value:"pornography",label:v("lng_report_reason_pornography")},{value:"childAbuse",label:v("lng_report_reason_child_abuse")},{value:"copyright",label:v("ReportPeer.ReasonCopyright")},{value:"illegalDrugs",label:"Illegal Drugs"},{value:"personalDetails",label:"Personal Details"},{value:"other",label:v("lng_report_reason_other")}];if(n)return a.ZP.createElement(Oe.Z,{isOpen:t,onClose:r,onEnter:t?u:void 0,className:"report",title:v("lng_report_message_title")},a.ZP.createElement(gt.Z,{name:"report-message",options:P,onChange:h,selected:i}),a.ZP.createElement(Ue.Z,{label:v("lng_report_reason_description"),value:d,onChange:Z}),a.ZP.createElement(B.Z,{color:"danger",className:"confirm-dialog-button",isText:!0,onClick:u},v("lng_report_button")),a.ZP.createElement(B.Z,{className:"confirm-dialog-button",isText:!0,onClick:r},v("Cancel")))})),Et=(0,a.X$)((0,s.c$)((e=>{const{type:t,chatId:n}=(0,b.Bt)(e)||{},{canDelete:a}=(0,b.xl)(e),s=(0,b.nB)(e),r=(0,b.Nu)(e),{messageIds:l}=e.selectedMessages||{},o=!!n&&(0,b.ku)(e,n,l);return{isSchedule:"scheduled"===t,selectedMessagesCount:(0,b.D7)(e),canDeleteMessages:a,canReportMessages:s,canDownloadMessages:r,selectedMessageIds:l,hasProtectedMessage:o}}))((e=>{let{canPost:t,isActive:n,messageListType:r,isSchedule:l,selectedMessagesCount:o,canDeleteMessages:c,canReportMessages:d,canDownloadMessages:m,hasProtectedMessage:u,selectedMessageIds:h}=e;const{exitMessageSelectMode:Z,openForwardMenuForSelectedMessages:v,downloadSelectedMessages:P,copySelectedMessages:p}=(0,s.Sv)(),[E,f,b]=(0,ee.Z)(),[I,y,S]=(0,ee.Z)();((e,t)=>{(0,a.d4)((()=>{function n(e){(i.jm&&e.metaKey||!i.jm&&e.ctrlKey)&&"c"===(0,vt.Z)(e)&&(e.preventDefault(),t())}return e&&document.addEventListener("keydown",n,!1),()=>{document.removeEventListener("keydown",n,!1)}}),[t,e])})(Boolean(n),p),(0,a.d4)((()=>!n||E||I?void 0:(0,Zt.Z)({onBackspace:f,onDelete:f,onEsc:Z})),[n,E,I,f,Z]);const N=(0,a.I4)((()=>{p(),Z()}),[p,Z]),k=(0,a.I4)((()=>{P(),Z()}),[P,Z]),w=(0,C.Z)(o||void 0,!0),M=n?o:w,T=(0,g.Z)(),R=T("VoiceOver.Chat.MessagesSelected",M,"i"),A=(0,H.Z)("MessageSelectToolbar",t&&"with-composer",n&&"shown"),L=(e,t,n,s,r)=>a.ZP.createElement("div",{role:"button",tabIndex:0,className:(0,H.Z)("item",s&&"disabled",r&&"destructive"),onClick:s?void 0:n,title:t},a.ZP.createElement("i",{className:`icon-${e}`}));return a.ZP.createElement("div",{className:A},a.ZP.createElement("div",{className:"MessageSelectToolbar-inner"},a.ZP.createElement(B.Z,{color:"translucent",round:!0,onClick:Z,ariaLabel:"Exit select mode"},a.ZP.createElement("i",{className:"icon-close"})),a.ZP.createElement("span",{className:"MessageSelectToolbar-count",title:R},R),Boolean(o)&&a.ZP.createElement("div",{className:"MessageSelectToolbar-actions"},"scheduled"!==r&&L("forward",T("Chat.ForwardActionHeader"),v,u),d&&L("flag",T("Conversation.ReportMessages"),y),m&&L("download",T("lng_media_download"),k,u),L("copy",T("lng_context_copy_selected_items"),N,u),L("delete",T("EditAdminGroupDeleteMessages"),f,!c,!0))),a.ZP.createElement(Pt,{isOpen:E,isSchedule:l,onClose:b}),a.ZP.createElement(pt,{isOpen:I,onClose:S,messageIds:h}))}))),Ct=(0,a.X$)((0,s.c$)((e=>{var t;const{chatId:n,messageId:a}=e.seenByModal||{};return n&&a?{memberIds:null===(t=(0,b.hj)(e,n,a))||void 0===t?void 0:t.seenByUserIds}:{}}))((e=>{let{isOpen:t,memberIds:n}=e;const{openChat:r,closeSeenByModal:l}=(0,s.Sv)(),o=(0,g.Z)(),i=(0,a.I4)((e=>{l(),setTimeout((()=>{r({id:e})}),100)}),[l,r]),c=(0,Fe.Z)(n,!0);return a.ZP.createElement(Oe.Z,{isOpen:t,onClose:l,className:"narrow",title:`Seen by ${null==n?void 0:n.length} users`},a.ZP.createElement("div",{dir:o.isRtl?"rtl":void 0},c&&c.map((e=>a.ZP.createElement(_e.Z,{key:e,className:"chat-item-clickable scroll-item small-icon",onClick:()=>i(e)},a.ZP.createElement(Xe.Z,{userId:e,noStatusOrTyping:!0}))))),a.ZP.createElement(B.Z,{className:"confirm-dialog-button",isText:!0,onClick:l},o("Close")))})));var ft=n(2155),bt=n(8198);const It=(0,a.X$)((0,s.c$)((e=>{const{chatId:t,messageId:n}=e.reactorModal||{},a=t&&n?(0,b.hj)(e,t,n):void 0;return{chatId:t,messageId:n,reactions:null==a?void 0:a.reactions,reactors:null==a?void 0:a.reactors,seenByUserIds:null==a?void 0:a.seenByUserIds}}))((e=>{let{isOpen:t,reactors:n,reactions:r,chatId:o,messageId:i,seenByUserIds:c}=e;const{loadReactors:d,closeReactorListModal:m,openChat:u}=(0,s.Sv)(),h=(0,s.Rd)().users.byId,Z=(0,g.Z)(),[v,P,p]=(0,ee.Z)(!1),[E,C]=(0,a.eJ)(void 0),b=n&&r&&n.count>=10&&r.results.length>1,I=(0,a.sO)();(0,a.d4)((()=>{v&&!t&&(p(),C(void 0))}),[v,t,p]);const y=(0,a.I4)((()=>{I.current&&u({id:I.current}),m()}),[m,u]),S=(0,a.I4)((()=>{P()}),[P]),N=(0,a.I4)((e=>{I.current=e,S()}),[S]),k=(0,a.I4)((()=>{d({chatId:o,messageId:i})}),[o,d,i]),w=(0,a.Ye)((()=>null!=n&&n.reactions?(0,be.Tw)(n.reactions.map((e=>e.reaction))):[]),[null==n?void 0:n.reactions]),M=(0,a.Ye)((()=>E?null==n?void 0:n.reactions.filter((e=>e.reaction===E)).map((e=>e.userId)):(0,be.Tw)((null==n?void 0:n.reactions.map((e=>e.userId)).concat(c||[]))||[])),[E,null==n?void 0:n.reactions,c]),[T,R]=(0,Be.Z)(k,M,n&&void 0===n.nextOffset);return(0,a.d4)((()=>{null==R||R({direction:l.Uq.Backwards})}),[R]),a.ZP.createElement(Oe.Z,{isOpen:t&&!v,onClose:S,className:"ReactorListModal narrow",title:Z("Reactions"),onCloseAnimationEnd:y},b&&a.ZP.createElement("div",{className:"Reactions"},a.ZP.createElement(B.Z,{className:(0,H.Z)(!E&&"chosen"),size:"tiny",ripple:!0,onClick:()=>C(void 0)},a.ZP.createElement("i",{className:"icon-reaction-filled"}),(null==n?void 0:n.count)&&(0,ft.bi)(n.count)),w.map((e=>{var t;const n=null==r||null===(t=r.results.find((t=>t.reaction===e)))||void 0===t?void 0:t.count;return a.ZP.createElement(B.Z,{className:(0,H.Z)(E===e&&"chosen"),size:"tiny",ripple:!0,onClick:()=>C(e)},a.ZP.createElement(bt.Z,{reaction:e,className:"reaction-filter-emoji"}),n&&(0,ft.bi)(n))}))),a.ZP.createElement("div",{dir:Z.isRtl?"rtl":void 0},null!=T&&T.length?a.ZP.createElement(Ge.Z,{className:"reactor-list custom-scroll",items:T,onLoadMore:R},null==T?void 0:T.map((e=>{var t;const s=h[e],r=(0,f.Js)(s),l=null==n||null===(t=n.reactions.find((t=>t.userId===e)))||void 0===t?void 0:t.reaction;return a.ZP.createElement(_e.Z,{key:e,className:"chat-item-clickable reactors-list-item",onClick:()=>N(e)},a.ZP.createElement(we.Z,{user:s,size:"medium"}),a.ZP.createElement("div",{className:"title"},a.ZP.createElement("h3",{dir:"auto"},r&&(0,ke.Z)(r))),l&&a.ZP.createElement(bt.Z,{className:"reactors-list-emoji",reaction:l}))}))):a.ZP.createElement(De.Z,null)),a.ZP.createElement(B.Z,{className:"confirm-dialog-button",isText:!0,onClick:m},Z("Close")))})));var yt=n(7324),St=n(7799);const Nt=(0,a.X$)((0,s.c$)(((e,t)=>{let{activeEmojiInteraction:n}=t;const a=void 0!==n.animatedEffect&&(0,b.tH)(e,n.animatedEffect);return{effectAnimationId:a?a.id:void 0,localEffectAnimation:!a&&n.animatedEffect&&Object.keys(yt.x).includes(n.animatedEffect)?n.animatedEffect:void 0}}))((e=>{let{effectAnimationId:t,localEffectAnimation:n,activeEmojiInteraction:l}=e;const{stopActiveEmojiInteraction:o}=(0,s.Sv)(),[c,d]=(0,ee.Z)(!1),[m,u]=(0,ee.Z)(!1),h=(0,a.sO)(),Z=(0,a.I4)((()=>{d(),h.current&&clearTimeout(h.current),setTimeout((()=>{o({id:l.id})}),250)}),[l.id,d,o]),P=(0,a.I4)((e=>{var t;null!==(t=e.target)&&void 0!==t&&t.closest(".AnimatedEmoji")||Z()}),[Z]);(0,a.d4)((()=>(document.addEventListener("touchstart",P),document.addEventListener("touchmove",P),document.addEventListener("mousedown",P),document.addEventListener("wheel",P),()=>{document.removeEventListener("touchstart",P),document.removeEventListener("touchmove",P),document.removeEventListener("mousedown",P),document.removeEventListener("wheel",P)})),[P]),(0,a.bt)((()=>{const e=(0,v.YW)();h.current=setTimeout((()=>{Z(),e()}),3e3)}),[Z]);const g=(0,p.Z)(`sticker${t}`,!t,r.IU.Lottie),[E,C]=(0,a.eJ)();if((0,a.d4)((()=>{n&&(0,yt.Z)(n).then((e=>{C(e)}))}),[n]),!l.startSize)return;const f=(l.startSize||0)/240;return a.ZP.createElement("div",{className:(0,H.Z)("EmojiInteractionAnimation",c&&"hiding",m&&"playing",l.isReversed&&"reversed"),style:`--scale: ${f}; --start-x: ${l.x}px; --start-y: ${l.y}px;`},a.ZP.createElement(St.Z,{key:`effect_${t}`,id:`effect_${t}`,size:240,animationData:E||g,play:m,quality:i.wZ?.5:void 0,forceOnHeavyAnimation:!0,noLoop:!0,onLoad:u}))})));var kt=n(3133),wt=n(735),Mt=n(1470);const Tt=e=>{const t=(0,a.sO)(null),n=(0,a.I4)((n=>{"Enter"===n.key&&t.current===document.activeElement&&e()}),[e]);return(0,a.d4)((()=>(window.addEventListener("keydown",n,!1),()=>window.removeEventListener("keydown",n,!1))),[n]),t};var Rt=n(329),At=n(742);const Lt=(0,a.X$)((0,s.c$)(((e,t)=>{var n;let{chatId:a}=t;const s=(0,b.Z1)(e,a),r=s&&(0,f.zX)(s);return{chat:s,user:r?(0,b.dy)(e,r):void 0,isPinned:(0,b.ep)(e,a),isMuted:s?(0,f.i4)(s,(0,b.dZ)(e),(0,b.NJ)(e)):void 0,canChangeFolder:Boolean(null===(n=e.chatFolders.orderedIds)||void 0===n?void 0:n.length)}}))((e=>{let{chatId:t,withUsername:n,onClick:s,chat:r,user:l,isPinned:o,isMuted:i,canChangeFolder:c}=e;const[d,m,u]=(0,ee.Z)(),[h,Z,v]=(0,ee.Z)(),P=(0,Mt.Z)({chat:r,user:l,isPinned:o,isMuted:i,canChangeFolder:c,handleDelete:m,handleChatFolderChange:Z},!0),g=(0,a.I4)((()=>{s(t)}),[t,s]),p=Tt(g);if(r)return a.ZP.createElement(_e.Z,{className:"chat-item-clickable search-result",onClick:g,contextActions:P,buttonRef:p},(0,f.YC)(t)?a.ZP.createElement(Xe.Z,{userId:t,withUsername:n,avatarSize:"large"}):a.ZP.createElement(Je.Z,{chatId:t,withUsername:n,avatarSize:"large"}),a.ZP.createElement(Rt.Z,{isOpen:d,onClose:u,chat:r}),a.ZP.createElement(At.Z,{isOpen:h,onClose:v,chatId:t}))})));var Ft=n(8781);const Bt=(0,z.P2)((e=>e()),6e4,!0),xt=(0,a.X$)((0,s.c$)((e=>{const{userIds:t}=e.topPeers,n=e.users.byId,{recentlyFoundChatIds:a}=e.globalSearch;return{topUserIds:t,usersById:n,recentlyFoundChatIds:a}}))((e=>{let{topUserIds:t,usersById:n,recentlyFoundChatIds:r,onReset:l}=e;const{loadTopUsers:o,loadContactList:i,openChat:c,addRecentlyFoundChatId:d,clearRecentlyFoundChats:m}=(0,s.Sv)(),u=(0,a.sO)(null);(0,a.d4)((()=>{Bt((()=>{o(),i()}))}),[o,i]),(0,Ft.Z)(u.current,!t);const h=(0,a.I4)((e=>{c({id:e,shouldReplaceHistory:!0}),l(),setTimeout((()=>{d({id:e})}),250)}),[c,d,l]),Z=(0,g.Z)();return a.ZP.createElement("div",{className:"RecentContacts custom-scroll"},t&&a.ZP.createElement("div",{className:"top-peers-section",dir:Z.isRtl?"rtl":void 0},a.ZP.createElement("div",{ref:u,className:"top-peers no-selection"},t.map((e=>a.ZP.createElement("div",{className:"top-peer-item",onClick:()=>h(e),dir:Z.isRtl?"rtl":void 0},a.ZP.createElement(we.Z,{user:n[e]}),a.ZP.createElement("div",{className:"top-peer-name"},(0,ke.Z)((0,f.Vl)(n[e])||" "))))))),r&&a.ZP.createElement("div",{className:"search-section pt-1"},a.ZP.createElement("h3",{className:"section-heading mt-0 recent-chats-header",dir:Z.isRtl?"rtl":void 0},Z("Recent"),a.ZP.createElement(B.Z,{round:!0,size:"smaller",color:"translucent",ariaLabel:"Clear recent chats",onClick:m,isRtl:Z.isRtl},a.ZP.createElement("i",{className:"icon-close"}))),r.map((e=>a.ZP.createElement(Lt,{chatId:e,onClick:h})))))})));var $t=n(9411),Dt=n(8033);const Ot=(0,a.X$)((0,s.c$)(((e,t)=>{let{chatId:n}=t;const a=(0,b.Z1)(e,n);if(!a)return{};const s=(0,f.zX)(a);return{chat:a,lastSyncTime:e.lastSyncTime,...s&&{privateChatUser:(0,b.dy)(e,s)}}}))((e=>{let{message:t,searchQuery:n,chatId:r,chat:l,privateChatUser:o,lastSyncTime:c}=e;const{focusMessage:d}=(0,s.Sv)(),m=(0,f.DH)(t),u=(0,p.Z)((0,f.Ti)(t,"micro")),h=Boolean((0,f.Y5)(t)),Z=(0,a.I4)((()=>{d({chatId:r,messageId:t.id})}),[r,d,t.id]),v=(0,g.Z)(),P=Tt(Z);if(l)return a.ZP.createElement(_e.Z,{className:"ChatMessage chat-item-clickable",ripple:!i.wB,onClick:Z,buttonRef:P},a.ZP.createElement(we.Z,{chat:l,user:o,isSavedMessages:null==o?void 0:o.isSelf,lastSyncTime:c}),a.ZP.createElement("div",{className:"info"},a.ZP.createElement("div",{className:"info-row"},a.ZP.createElement("div",{className:"title"},a.ZP.createElement("h3",{dir:"auto"},(0,ke.Z)((0,f.U)(v,l,o))),l.isVerified&&a.ZP.createElement($t.Z,null)),a.ZP.createElement("div",{className:"message-date"},a.ZP.createElement(Dt.Z,{className:"date"},(0,te.VX)(v,1e3*t.date)))),a.ZP.createElement("div",{className:"subtitle"},a.ZP.createElement("div",{className:"message",dir:"auto"},function(e,t,n,s,r){return n?a.ZP.createElement("span",{className:"media-preview"},a.ZP.createElement("img",{src:n,alt:"",className:r?"round":void 0}),(0,f.b7)(t)&&a.ZP.createElement("i",{className:"icon-play"}),(0,w.e)(e,t,!0,s)):(0,w.e)(e,t,void 0,s)}(v,t,u||m,n,h)))))}))),Ut=(0,a.X$)((e=>{let{searchDate:t,onSelect:n}=e;const s=(0,a.Ye)((()=>function(e){if(e.match(/^\d{2,4}-\d{2}-\d{2}$/g)){const t=new Date(e);return[{date:t,text:(0,te.xH)(t)}]}const t=[],n=new Date,a=n.getFullYear(),s=n.getTime()>new Date(`${a}-${e}`).getTime()?a:a-1;for(let n=0;n<8;n++){const a=new Date(`${s-n}-${e}`);t.push({date:a,text:(0,te.xH)(a)})}return t}(t)),[t]);return a.ZP.createElement("section",{className:"DateSuggest custom-scroll custom-scroll-x"},s.map((e=>{let{date:t,text:s}=e;return a.ZP.createElement("div",{onClick:()=>n(t),className:"date-item",key:s},a.ZP.createElement("i",{className:"icon-calendar"}),a.ZP.createElement("span",null,s))})))}));var Gt=n(7262),_t=n(9187);const Jt=(0,z.P2)((e=>e()),500,!0),Xt=(0,a.X$)((0,s.c$)((e=>{var t;const{byId:n}=e.chats,{userIds:a}=e.contactList||{};if(!a)return{chatsById:n};const{currentUserId:s,messages:r,lastSyncTime:l}=e,{fetchingStatus:o,globalResults:i,localResults:c,resultsByType:d}=e.globalSearch,{chatIds:m,userIds:u}=i||{},{chatIds:h,userIds:Z}=c||{},{byChatId:v}=r;return{currentUserId:s,localContactIds:a,localChatIds:h,localUserIds:Z,globalChatIds:m,globalUserIds:u,foundIds:null==d||null===(t=d.text)||void 0===t?void 0:t.foundIds,globalMessagesByChatId:v,chatsById:n,fetchingStatus:o,lastSyncTime:l}}))((e=>{let{searchQuery:t,searchDate:n,dateSearchQuery:r,currentUserId:o,localContactIds:c,localChatIds:d,localUserIds:m,globalChatIds:u,globalUserIds:h,foundIds:Z,globalMessagesByChatId:v,chatsById:P,fetchingStatus:p,lastSyncTime:E,onReset:C,onSearchDateSelect:b}=e;const{openChat:I,addRecentlyFoundChatId:y,searchMessagesGlobal:S,setGlobalSearchChatId:N}=(0,s.Sv)(),k=(0,g.Z)(),[M,T]=(0,a.eJ)(!1),[R,A]=(0,a.eJ)(!1),L=(0,a.I4)((e=>{let{direction:n}=e;E&&n===l.Uq.Backwards&&Jt((()=>{S({type:"text",query:t})}))}),[E,S,t]),F=(0,a.I4)((e=>{I({id:e,shouldReplaceHistory:!0}),e!==o&&y({id:e}),i.wB||C()}),[o,I,y,C]),B=(0,a.I4)((e=>{N({id:e})}),[N]),x=(0,a.Ye)((()=>{if(!t||t.startsWith("@")&&t.length<2)return wt.D;const e=[...o?[o]:[],...c||[]],n=(0,s.Rd)().users.byId,a=(0,f.kK)(e,n,t,o,k("SavedMessages"));return[...(0,f.ih)((0,be.Tw)([...a||[],...d||[],...m||[]]),P,void 0,o?[o]:void 0)]}),[t,o,c,k,d,m,P]),$=(0,a.Ye)((()=>!t||t.length<4||!u||!h?wt.D:(0,f.ih)((0,be.Tw)([...u,...h]),P,!0)),[P,u,h,t]),D=(0,a.Ye)((()=>(t||n)&&Z&&0!==Z.length?Z.map((e=>{var t;const[n,a]=e.split("_");return null==v||null===(t=v[n])||void 0===t?void 0:t.byId[Number(a)]})).filter(Boolean).sort(((e,t)=>t.date-e.date)):wt.D),[Z,v,t,n]),O=(0,a.I4)((()=>{T(!M)}),[M]),U=(0,a.I4)((()=>{A(!R)}),[R]),G=p&&!p.chats&&!p.messages&&!x.length&&!$.length&&!D.length;return t||n?a.ZP.createElement(Ge.Z,{className:"LeftSearch custom-scroll",items:D,onLoadMore:L,noScrollRestoreOnTop:!0,noFastList:!0},r&&a.ZP.createElement("div",{className:"chat-selection no-selection no-scrollbar"},a.ZP.createElement(Ut,{searchDate:r,onSelect:b})),G&&a.ZP.createElement(Gt.Z,{text:k("ChatList.Search.NoResults"),description:k("ChatList.Search.NoResultsDescription")}),Boolean(x.length)&&a.ZP.createElement("div",{className:"chat-selection no-selection no-scrollbar",dir:k.isRtl?"rtl":void 0},x.map((e=>a.ZP.createElement(_t.Z,{chatOrUserId:e,onClick:B,clickArg:e})))),Boolean(x.length)&&a.ZP.createElement("div",{className:"search-section"},a.ZP.createElement("h3",{className:"section-heading",dir:k.isRtl?"auto":void 0},x.length>5&&a.ZP.createElement(Dt.Z,{onClick:O},k(M?"ChatList.Search.ShowLess":"ChatList.Search.ShowMore")),k("DialogList.SearchSectionDialogs")),x.map(((e,t)=>{if(M||!(t>=5))return a.ZP.createElement(Lt,{chatId:e,onClick:F})}))),Boolean($.length)&&a.ZP.createElement("div",{className:"search-section"},a.ZP.createElement("h3",{className:"section-heading",dir:k.isRtl?"auto":void 0},$.length>5&&a.ZP.createElement(Dt.Z,{onClick:U},k(R?"ChatList.Search.ShowLess":"ChatList.Search.ShowMore")),k("DialogList.SearchSectionGlobal")),$.map(((e,t)=>{if(R||!(t>=5))return a.ZP.createElement(Lt,{chatId:e,withUsername:!0,onClick:F})}))),Boolean(D.length)&&a.ZP.createElement("div",{className:"search-section"},a.ZP.createElement("h3",{className:"section-heading",dir:k.isRtl?"auto":void 0},k("SearchMessages")),D.map((function(e){const n=(0,w.e)(k,e),s=P[e.chatId];if(n&&s)return a.ZP.createElement(Ot,{chatId:e.chatId,message:e,searchQuery:t})})))):a.ZP.createElement(xt,{onReset:C})}))),zt=(0,z.P2)((e=>e()),500,!0),Yt=(0,a.X$)((0,s.c$)((e=>{const{byId:t}=e.chats,{currentUserId:n,messages:{byChatId:a},lastSyncTime:s}=e,{fetchingStatus:r,resultsByType:l}=e.globalSearch,{foundIds:o}=(null==l?void 0:l.text)||{};return{currentUserId:n,foundIds:o,globalMessagesByChatId:a,chatsById:t,fetchingStatus:r,lastSyncTime:s}}))((e=>{let{searchQuery:t,currentUserId:n,dateSearchQuery:r,foundIds:o,globalMessagesByChatId:i,chatsById:c,fetchingStatus:d,lastSyncTime:m,onSearchDateSelect:u}=e;const{searchMessagesGlobal:h}=(0,s.Sv)(),Z=(0,g.Z)(),v=(0,a.I4)((e=>{let{direction:a}=e;m&&a===l.Uq.Backwards&&zt((()=>{h({type:"text",query:t,chatId:n})}))}),[n,m,h,t]),P=(0,a.Ye)((()=>o&&0!==o.length?o.map((e=>{var t;const[n,a]=e.split("_");return null==i||null===(t=i[n])||void 0===t?void 0:t.byId[Number(a)]})).filter(Boolean).sort(((e,t)=>t.date-e.date)):wt.D),[o,i]),p=d&&!d.chats&&!d.messages&&!P.length;return a.ZP.createElement("div",{className:"LeftSearch"},a.ZP.createElement(Ge.Z,{className:"search-content custom-scroll chat-list",items:P,onLoadMore:v,noFastList:!0},r&&a.ZP.createElement("div",{className:"chat-selection no-selection no-scrollbar"},a.ZP.createElement(Ut,{searchDate:r,onSelect:u})),p&&a.ZP.createElement(Gt.Z,{text:Z("ChatList.Search.NoResults"),description:Z("ChatList.Search.NoResultsDescription")}),P.map((function(e){const n=(0,w.e)(Z,e),s=c[e.chatId];if(n&&s)return a.ZP.createElement(Ot,{chatId:e.chatId,message:e,searchQuery:t})}))))})));function Ht(e){return(t,n)=>{var a,s;const{byId:r}=t.chats,{byId:l}=t.users,{fetchingStatus:o,resultsByType:i,chatId:c}=t.globalSearch,d="audio"!==e?e:null!=n&&n.isVoice?"voice":"audio",{byChatId:m}=t.messages,u=null==i||null===(a=i[d])||void 0===a?void 0:a.foundIds,h=t.activeDownloads.byChatId;return{theme:(0,b.Pu)(t),isLoading:void 0===u||!!o&&Boolean(o.chats||o.messages),chatsById:r,usersById:l,globalMessagesByChatId:m,foundIds:u,searchChatId:c,activeDownloads:h,isChatProtected:c?null===(s=(0,b.Z1)(t,c))||void 0===s?void 0:s.isProtected:void 0,lastSyncTime:t.lastSyncTime}}}var Vt=n(7891),jt=n(3657),qt=n(3709);const Kt="media",Wt=(0,z.P2)((e=>e()),500,!0),Qt=(0,a.X$)((0,s.c$)(Ht(Kt))((e=>{let{searchQuery:t,searchChatId:n,isLoading:r,globalMessagesByChatId:i,foundIds:c,lastSyncTime:d,isChatProtected:m}=e;const{searchMessagesGlobal:u,openMediaViewer:h}=(0,s.Sv)(),Z=(0,a.sO)(null),v=(0,g.Z)(),{observe:P}=(0,jt.S1)({rootRef:Z,throttleMs:500}),p=(0,a.I4)((e=>{let{direction:a}=e;d&&a===l.Uq.Backwards&&Wt((()=>{u({type:Kt,query:t,chatId:n})}))}),[d,u,t,n]),E=(0,a.Ye)((()=>c&&i?c.map((e=>{var t;const[n,a]=e.split("_");return null===(t=i[n])||void 0===t?void 0:t.byId[Number(a)]})).filter(Boolean):wt.D),[i,c]),C=(0,a.I4)(((e,t)=>{h({chatId:t,messageId:e,origin:l.bZ.SearchResult})}),[h]),f=(0,Vt.Z)([t],o.Y)&&!r,b=f&&c&&c.length>0&&!t,I=f&&c&&c.length>0&&t,y=(0,H.Z)("search-content custom-scroll",I&&"chat-list");return a.ZP.createElement("div",{ref:Z,className:"LeftSearch"},a.ZP.createElement(Ge.Z,{className:y,items:E,itemSelector:t?".ListItem":".Media",onLoadMore:p,noFastList:!0},!f&&a.ZP.createElement(De.Z,null),f&&(!c||0===c.length)&&a.ZP.createElement(Gt.Z,{text:v("ChatList.Search.NoResults"),description:v("ChatList.Search.NoResultsDescription")}),b&&a.ZP.createElement("div",{className:"media-list",dir:v.isRtl?"rtl":void 0},E.map((e=>a.ZP.createElement(qt.Z,{key:e.id,idPrefix:"search-media",message:e,isProtected:m||e.isProtected,observeIntersection:P,onClick:C})))),I&&E.map((e=>a.ZP.createElement(Ot,{key:e.id,chatId:e.chatId,message:e})))))})));var en=n(91),tn=n(5418);const nn="links",an=(0,z.P2)((e=>e()),500,!0),sn=(0,a.X$)((0,s.c$)(Ht(nn))((e=>{let{searchQuery:t,searchChatId:n,isLoading:r,chatsById:i,usersById:c,globalMessagesByChatId:d,foundIds:m,lastSyncTime:u,isChatProtected:h}=e;const{searchMessagesGlobal:Z,focusMessage:v}=(0,s.Sv)(),P=(0,a.sO)(null),p=(0,g.Z)(),{observe:E}=(0,jt.S1)({rootRef:P,throttleMs:500}),C=(0,a.I4)((e=>{let{direction:a}=e;u&&a===l.Uq.Backwards&&an((()=>{Z({type:nn,query:t,chatId:n})}))}),[u,Z,t,n]),f=(0,a.Ye)((()=>m&&d?m.map((e=>{var t;const[n,a]=e.split("_");return null===(t=d[n])||void 0===t?void 0:t.byId[Number(a)]})).filter(Boolean):wt.D),[d,m]),b=(0,a.I4)(((e,t)=>{v({chatId:t,messageId:e})}),[v]),I=(0,Vt.Z)([t],o.Y)&&!r;return a.ZP.createElement("div",{ref:P,className:"LeftSearch"},a.ZP.createElement(Ge.Z,{className:"search-content documents-list custom-scroll",items:f,onLoadMore:C,noFastList:!0},!I&&a.ZP.createElement(De.Z,null),I&&(!m||0===m.length)&&a.ZP.createElement(Gt.Z,{text:p("ChatList.Search.NoResults"),description:p("ChatList.Search.NoResultsDescription")}),I&&m&&m.length>0&&f.map(((e,t)=>{const n=0===t||(0,te.kj)(e.date)!==(0,te.kj)(f[t-1].date);return a.ZP.createElement("div",{className:"ListItem small-icon",dir:p.isRtl?"rtl":void 0,key:e.id},n&&a.ZP.createElement("p",{className:"section-heading",dir:p.isRtl?"rtl":void 0},(0,te.np)(p,new Date(1e3*e.date))),a.ZP.createElement(tn.Z,{key:e.id,message:e,senderTitle:(0,en.F)(p,e,i,c),isProtected:h||e.isProtected,observeIntersection:E,onMessageClick:b}))}))))})));var rn=n(2535);const ln="documents",on=(0,z.P2)((e=>e()),500,!0),cn=(0,a.X$)((0,s.c$)(Ht(ln))((e=>{let{searchQuery:t,searchChatId:n,isLoading:r,chatsById:i,usersById:c,globalMessagesByChatId:d,foundIds:m,activeDownloads:u,lastSyncTime:h}=e;const{searchMessagesGlobal:Z,focusMessage:v}=(0,s.Sv)(),P=(0,a.sO)(null),p=(0,g.Z)(),{observe:E}=(0,jt.S1)({rootRef:P,throttleMs:500}),C=(0,a.I4)((e=>{let{direction:a}=e;h&&a===l.Uq.Backwards&&on((()=>{Z({type:ln,query:t,chatId:n})}))}),[h,Z,t,n]),b=(0,a.Ye)((()=>m&&d?m.map((e=>{var t;const[n,a]=e.split("_"),s=null===(t=d[n])||void 0===t?void 0:t.byId[Number(a)];return s&&(0,f.aE)(s)?s:void 0})).filter(Boolean):wt.D),[d,m]),I=(0,a.I4)(((e,t)=>{v({chatId:t,messageId:e})}),[v]),y=(0,Vt.Z)([t],o.Y)&&!r;return a.ZP.createElement("div",{ref:P,className:"LeftSearch"},a.ZP.createElement(Ge.Z,{className:"search-content documents-list custom-scroll",items:b,onLoadMore:C,noFastList:!0},!y&&a.ZP.createElement(De.Z,null),y&&(!m||0===m.length)&&a.ZP.createElement(Gt.Z,{text:p("ChatList.Search.NoResults"),description:p("ChatList.Search.NoResultsDescription")}),y&&m&&m.length>0&&b.map(((e,t)=>{var n;const s=0===t||(0,te.kj)(e.date)!==(0,te.kj)(b[t-1].date);return a.ZP.createElement("div",{className:"ListItem small-icon",key:e.id},s&&a.ZP.createElement("p",{className:"section-heading"},(0,te.np)(p,new Date(1e3*e.date))),a.ZP.createElement(rn.Z,{message:e,withDate:!0,datetime:e.date,smaller:!0,sender:(0,en.F)(p,e,i,c),className:"scroll-item",isDownloading:null===(n=u[e.chatId])||void 0===n?void 0:n.includes(e.id),observeIntersection:E,onDateClick:I}))}))))})));var dn=n(4752);const mn=(0,z.P2)((e=>e()),500,!0),un=(0,a.X$)((0,s.c$)(Ht("audio"))((e=>{let{theme:t,isVoice:n,searchQuery:r,searchChatId:i,isLoading:c,chatsById:d,usersById:m,globalMessagesByChatId:u,foundIds:h,lastSyncTime:Z,activeDownloads:v}=e;const{searchMessagesGlobal:P,focusMessage:p,openAudioPlayer:E}=(0,s.Sv)(),C=(0,g.Z)(),f=n?"voice":"audio",b=(0,a.I4)((e=>{let{direction:t}=e;Z&&t===l.Uq.Backwards&&mn((()=>{P({type:f,query:r,chatId:i})}))}),[f,Z,P,r,i]),I=(0,a.Ye)((()=>h&&u?h.map((e=>{var t;const[n,a]=e.split("_");return null===(t=u[n])||void 0===t?void 0:t.byId[Number(a)]})).filter(Boolean):wt.D),[u,h]),y=(0,a.I4)(((e,t)=>{p({chatId:t,messageId:e})}),[p]),S=(0,a.I4)(((e,t)=>{E({chatId:t,messageId:e})}),[E]),N=(0,Vt.Z)([r],o.Y)&&!c;return a.ZP.createElement("div",{className:"LeftSearch"},a.ZP.createElement(Ge.Z,{className:"search-content documents-list custom-scroll",items:I,onLoadMore:b,noFastList:!0},!N&&a.ZP.createElement(De.Z,null),N&&(!h||0===h.length)&&a.ZP.createElement(Gt.Z,{text:C("ChatList.Search.NoResults"),description:C("ChatList.Search.NoResultsDescription")}),N&&h&&h.length>0&&I.map(((e,n)=>{var s;const r=0===n||(0,te.kj)(e.date)!==(0,te.kj)(I[n-1].date);return a.ZP.createElement("div",{className:"ListItem small-icon",key:e.id},r&&a.ZP.createElement("p",{className:"section-heading",dir:C.isRtl?"rtl":void 0},(0,te.np)(C,new Date(1e3*e.date))),a.ZP.createElement(dn.Z,{key:e.id,theme:t,message:e,origin:l.Cr.Search,senderTitle:(0,en.F)(C,e,d,m),date:e.date,lastSyncTime:Z,className:"scroll-item",onPlay:S,onDateClick:y,isDownloading:null===(s=v[e.chatId])||void 0===s?void 0:s.includes(e.id)}))}))))}))),hn=[{type:l.nJ.ChatList,title:"SearchAllChatsShort"},{type:l.nJ.Media,title:"SharedMediaTab2"},{type:l.nJ.Links,title:"SharedLinksTab2"},{type:l.nJ.Files,title:"SharedFilesTab2"},{type:l.nJ.Music,title:"SharedMusicTab2"},{type:l.nJ.Voice,title:"SharedVoiceTab2"}],Zn=[{type:l.nJ.ChatList,title:"All Messages"},...hn.slice(1)],vn=Object.keys(l.nJ).length/2,Pn=(0,a.X$)((0,s.c$)((e=>{const{currentContent:t,chatId:n}=e.globalSearch;return{currentContent:t,chatId:n}}))((e=>{let{searchQuery:t,searchDate:n,isActive:r,currentContent:o=l.nJ.ChatList,chatId:i,onReset:c}=e;const{setGlobalSearchContent:d,setGlobalSearchDate:m}=(0,s.Sv)(),u=(0,g.Z)(),[h,Z]=(0,a.eJ)(o),v=(0,a.Ye)((()=>(0,te.xk)(t)),[t]),p=(0,a.I4)((e=>{const t=hn[e];d({content:t.type}),Z(e)}),[d]),E=(0,a.I4)((e=>{m({date:e.getTime()/1e3})}),[m]);(0,P.ZP)(r,c,void 0,void 0,!0);const C=(0,a.sO)(null),f=(0,xe.Z)(C,r,void 0,".ListItem-button",!0);return a.ZP.createElement("div",{className:"LeftSearch",ref:C,onKeyDown:f},a.ZP.createElement(kt.Z,{activeTab:h,tabs:i?Zn:hn,onSwitchTab:p}),a.ZP.createElement($.Z,{name:u.isRtl?"slide-optimized-rtl":"slide-optimized",renderCount:vn,activeKey:o},(()=>{switch(o){case l.nJ.ChatList:return i?a.ZP.createElement(Yt,{searchQuery:t,dateSearchQuery:v,onReset:c,onSearchDateSelect:E}):a.ZP.createElement(Xt,{searchQuery:t,searchDate:n,dateSearchQuery:v,onReset:c,onSearchDateSelect:E});case l.nJ.Media:return a.ZP.createElement(Qt,{searchQuery:t});case l.nJ.Links:return a.ZP.createElement(sn,{searchQuery:t});case l.nJ.Files:return a.ZP.createElement(cn,{searchQuery:t});case l.nJ.Music:return a.ZP.createElement(un,{key:"audio",searchQuery:t});case l.nJ.Voice:return a.ZP.createElement(un,{key:"voice",isVoice:!0,searchQuery:t});default:return}})()))})));var gn=n(1090);const pn={currentPassword:"",password:"",hint:"",email:""},En=(e,t)=>{switch(t.type){case"setCurrentPassword":return{...e,currentPassword:t.payload};case"setPassword":return{...e,password:t.payload};case"setHint":return{...e,hint:t.payload};case"setEmail":return{...e,email:t.payload};case"reset":return pn;default:return e}},Cn=(0,a.X$)((e=>{let{currentScreen:t,editedFolderId:n,onReset:r,onSaveFilter:o,onScreenSelect:c}=e;const{signOut:d,deleteChatFolder:m}=(0,s.Sv)(),[u,h]=(0,a.eJ)(!1),[Z,v]=(0,a.eJ)(!1),P=(0,a.I4)((()=>{h(!0)}),[]),p=(0,a.I4)((()=>{h(!1)}),[]),E=(0,a.I4)((()=>{v(!0)}),[]),C=(0,a.I4)((()=>{v(!1)}),[]),f=(0,a.I4)((()=>{p(),d()}),[p,d]),b=(0,a.I4)((()=>{C(),m({id:n}),r()}),[n,C,m,r]),I=(0,a.Ye)((()=>e=>{let{onTrigger:t,isOpen:n}=e;return a.ZP.createElement(B.Z,{round:!0,ripple:!i.wB,size:"smaller",color:"translucent",className:n?"active":"",onClick:t,ariaLabel:"More actions"},a.ZP.createElement("i",{className:"icon-more"}))}),[]),y=(0,g.Z)();return a.ZP.createElement("div",{className:"left-header"},a.ZP.createElement(B.Z,{round:!0,size:"smaller",color:"translucent",onClick:r,ariaLabel:y("AccDescrGoBack")},a.ZP.createElement("i",{className:"icon-arrow-left"})),function(){switch(t){case l.MT.EditProfile:return a.ZP.createElement("h3",null,y("lng_settings_information"));case l.MT.General:return a.ZP.createElement("h3",null,y("General"));case l.MT.QuickReaction:return a.ZP.createElement("h3",null,y("DoubleTapSetting"));case l.MT.Notifications:return a.ZP.createElement("h3",null,y("Notifications"));case l.MT.DataStorage:return a.ZP.createElement("h3",null,y("DataSettings"));case l.MT.Privacy:return a.ZP.createElement("h3",null,y("PrivacySettings"));case l.MT.Language:return a.ZP.createElement("h3",null,y("Language"));case l.MT.GeneralChatBackground:return a.ZP.createElement("h3",null,y("ChatBackground"));case l.MT.GeneralChatBackgroundColor:return a.ZP.createElement("h3",null,y("SetColor"));case l.MT.PrivacyPhoneNumber:return a.ZP.createElement("h3",null,y("PrivacyPhone"));case l.MT.PrivacyLastSeen:return a.ZP.createElement("h3",null,y("PrivacyLastSeen"));case l.MT.PrivacyProfilePhoto:return a.ZP.createElement("h3",null,y("Privacy.ProfilePhoto"));case l.MT.PrivacyForwarding:return a.ZP.createElement("h3",null,y("PrivacyForwards"));case l.MT.PrivacyGroupChats:return a.ZP.createElement("h3",null,y("AutodownloadGroupChats"));case l.MT.PrivacyPhoneNumberAllowedContacts:case l.MT.PrivacyLastSeenAllowedContacts:case l.MT.PrivacyProfilePhotoAllowedContacts:case l.MT.PrivacyForwardingAllowedContacts:case l.MT.PrivacyGroupChatsAllowedContacts:return a.ZP.createElement("h3",null,y("AlwaysShareWith"));case l.MT.PrivacyPhoneNumberDeniedContacts:case l.MT.PrivacyLastSeenDeniedContacts:case l.MT.PrivacyProfilePhotoDeniedContacts:case l.MT.PrivacyForwardingDeniedContacts:case l.MT.PrivacyGroupChatsDeniedContacts:return a.ZP.createElement("h3",null,y("NeverShareWith"));case l.MT.PrivacyActiveSessions:return a.ZP.createElement("h3",null,y("SessionsTitle"));case l.MT.PrivacyBlockedUsers:return a.ZP.createElement("h3",null,y("BlockedUsers"));case l.MT.TwoFaDisabled:case l.MT.TwoFaEnabled:return a.ZP.createElement("h3",null,y("TwoStepVerification"));case l.MT.TwoFaNewPassword:case l.MT.TwoFaChangePasswordNew:case l.MT.TwoFaChangePasswordConfirm:return a.ZP.createElement("h3",null,y("PleaseEnterCurrentPassword"));case l.MT.TwoFaNewPasswordConfirm:return a.ZP.createElement("h3",null,y("PleaseReEnterPassword"));case l.MT.TwoFaNewPasswordHint:case l.MT.TwoFaChangePasswordHint:return a.ZP.createElement("h3",null,y("PasswordHint"));case l.MT.TwoFaNewPasswordEmail:case l.MT.TwoFaRecoveryEmail:return a.ZP.createElement("h3",null,y("RecoveryEmailTitle"));case l.MT.TwoFaNewPasswordEmailCode:case l.MT.TwoFaRecoveryEmailCode:return a.ZP.createElement("h3",null,"Recovery Email Code");case l.MT.TwoFaCongratulations:return a.ZP.createElement("h3",null,y("TwoStepVerificationPasswordSet"));case l.MT.TwoFaChangePasswordCurrent:case l.MT.TwoFaTurnOff:case l.MT.TwoFaRecoveryEmailCurrentPassword:return a.ZP.createElement("h3",null,y("PleaseEnterCurrentPassword"));case l.MT.Folders:return a.ZP.createElement("h3",null,y("Filters"));case l.MT.FoldersCreateFolder:return a.ZP.createElement("h3",null,y("FilterNew"));case l.MT.FoldersEditFolder:case l.MT.FoldersEditFolderFromChatList:return a.ZP.createElement("div",{className:"settings-main-header"},a.ZP.createElement("h3",null,y("FilterEdit")),n&&a.ZP.createElement(D.Z,{className:"settings-more-menu",trigger:I,positionX:"right"},a.ZP.createElement(O.Z,{icon:"delete",destructive:!0,onClick:E},y("Delete"))));case l.MT.FoldersIncludedChats:case l.MT.FoldersIncludedChatsFromChatList:case l.MT.FoldersExcludedChats:case l.MT.FoldersExcludedChatsFromChatList:return a.ZP.createElement("div",{className:"settings-main-header"},t===l.MT.FoldersIncludedChats||t===l.MT.FoldersIncludedChatsFromChatList?a.ZP.createElement("h3",null,y("FilterInclude")):a.ZP.createElement("h3",null,y("FilterExclude")),a.ZP.createElement(B.Z,{round:!0,size:"smaller",color:"translucent",className:"color-primary",onClick:o,ariaLabel:y("AutoDeleteConfirm")},a.ZP.createElement("i",{className:"icon-check"})));default:return a.ZP.createElement("div",{className:"settings-main-header"},a.ZP.createElement("h3",null,y("SETTINGS")),a.ZP.createElement(B.Z,{round:!0,ripple:!i.wB,size:"smaller",color:"translucent",onClick:()=>c(l.MT.EditProfile),ariaLabel:y("lng_settings_information")},a.ZP.createElement("i",{className:"icon-edit"})),a.ZP.createElement(D.Z,{className:"settings-more-menu",trigger:I,positionX:"right"},a.ZP.createElement(O.Z,{icon:"logout",onClick:P},y("LogOutTitle"))))}}(),a.ZP.createElement(Qe.Z,{isOpen:u,onClose:p,text:y("lng_sure_logout"),confirmLabel:y("AccountSettings.Logout"),confirmHandler:f,confirmIsDestructive:!0}),a.ZP.createElement(Qe.Z,{isOpen:Z,onClose:C,text:y("FilterDeleteAlert"),confirmLabel:y("Delete"),confirmHandler:b,confirmIsDestructive:!0}))}));var fn=n(787),bn=n(180);const In=(0,a.X$)((0,s.c$)((e=>{const{currentUserId:t,lastSyncTime:n}=e;return{currentUser:t?(0,b.dy)(e,t):void 0,lastSyncTime:n}}))((e=>{let{isActive:t,onScreenSelect:n,onReset:r,currentUser:o,lastSyncTime:i}=e;const{loadProfilePhotos:c}=(0,s.Sv)(),d=(0,g.Z)(),m=null==o?void 0:o.id;return(0,a.d4)((()=>{m&&i&&c({profileId:m})}),[i,m,c]),(0,P.ZP)(t,r,n,l.MT.Main),a.ZP.createElement("div",{className:"settings-content custom-scroll"},a.ZP.createElement("div",{className:"settings-main-menu"},o&&a.ZP.createElement(fn.Z,{userId:o.id,forceShowSelf:!0}),o&&a.ZP.createElement(bn.Z,{chatOrUserId:o.id,forceShowSelf:!0}),a.ZP.createElement(_e.Z,{icon:"settings",onClick:()=>n(l.MT.General)},d("Telegram.GeneralSettingsViewController")),a.ZP.createElement(_e.Z,{icon:"unmute",onClick:()=>n(l.MT.Notifications)},d("Notifications")),a.ZP.createElement(_e.Z,{icon:"lock",onClick:()=>n(l.MT.Privacy)},d("PrivacySettings")),a.ZP.createElement(_e.Z,{icon:"data",onClick:()=>n(l.MT.DataStorage)},d("DataSettings")),a.ZP.createElement(_e.Z,{icon:"folder",onClick:()=>n(l.MT.Folders)},d("Filters")),a.ZP.createElement(_e.Z,{icon:"language",onClick:()=>n(l.MT.Language)},d("Language"))))})));var yn=n(710),Sn=n(1151);const Nn="https://t.me/",kn=/https:\/\/t\.me\/?/i,wn=/^([a-zA-Z0-9_]+)$/,Mn=(0,z.Ds)((e=>e()),250,!1),Tn=(0,a.X$)((e=>{let{currentUsername:t,asLink:n,isLoading:s,isUsernameAvailable:r,checkUsername:l,onChange:o}=e;const[i,c]=(0,a.eJ)(t||""),d=(0,g.Z)(),m=n?"SetUrl":"Username",u=d(n?"SetUrlPlaceholder":"Username"),[h,Z]=(0,a.Ye)((()=>i.length?i.length<5?[void 0,`${u} is too short`]:i.length>32?[void 0,`${u} is too long`]:wn.test(i)?void 0===r?[]:[r?d(`${m}Available`,"Username"):void 0,!1===r?d(`${m}InUse`):void 0]:[void 0,`${u} contains invalid characters`]:[]),[i,r,d,m,u]);(0,a.d4)((()=>{c(t||"")}),[n,t]);const v=(0,a.I4)((e=>{const t=e.target.value.trim().replace(kn,"");c(t),e.target.value=`${n?Nn:""}${t}`;const a=function(e){return e.length>=5&&e.length<=32&&wn.test(e)}(t);a&&Mn((()=>{l({username:t})})),o&&o(!!a&&t)}),[n,l,o]);return a.ZP.createElement(Ue.Z,{value:`${n?Nn:""}${i}`,onChange:v,label:u,error:Z,success:h,readOnly:s})})),Rn=(0,z.P2)((e=>e()),6e4,!0),An="Please provide your first name",Ln="Bio can' be longer than 70 characters",Fn=(0,a.X$)((0,s.c$)((e=>{const{currentUserId:t}=e,{progress:n,isUsernameAvailable:a}=e.profileEdit||{},s=t?(0,b.dy)(e,t):void 0;if(!s)return{progress:n,isUsernameAvailable:a};const{firstName:r,lastName:l,username:o,fullInfo:i}=s,{bio:c}=i||{};return{currentAvatarHash:(0,f.RT)(s),currentFirstName:r,currentLastName:l,currentBio:c,currentUsername:o,progress:n,isUsernameAvailable:a}}))((e=>{let{isActive:t,onScreenSelect:n,onReset:o,currentAvatarHash:i,currentFirstName:c,currentLastName:d,currentBio:m,currentUsername:u,progress:h,isUsernameAvailable:Z}=e;const{loadCurrentUser:v,updateProfile:E,checkUsername:C}=(0,s.Sv)(),f=(0,g.Z)(),[b,I]=(0,a.eJ)(!1),[y,S]=(0,a.eJ)(!1),[N,k]=(0,a.eJ)(),[w,M]=(0,a.eJ)(),[T,R]=(0,a.eJ)(c||""),[A,L]=(0,a.eJ)(d||""),[F,B]=(0,a.eJ)(m||""),[x,$]=(0,a.eJ)(u||""),D=(0,p.Z)(i,!1,r.IU.BlobUrl),O=h===l.rN.InProgress,U=!1===x,G=(0,a.Ye)((()=>!U&&(Boolean(w)||y||!0===Z)),[w,y,U,Z]);(0,P.ZP)(t,o,n,l.MT.EditProfile),(0,a.d4)((()=>{Rn((()=>{v()}))}),[v]),(0,a.d4)((()=>{M(void 0)}),[D]),(0,a.d4)((()=>{R(c||""),L(d||""),B(m||"")}),[c,d,m]),(0,a.d4)((()=>{$(u||"")}),[u]),(0,a.d4)((()=>{h===l.rN.Complete&&(S(!1),I(!1),k(void 0))}),[h]);const _=(0,a.I4)((e=>{M(e)}),[]),J=(0,a.I4)((e=>{R(e.target.value),S(!0)}),[]),X=(0,a.I4)((e=>{L(e.target.value),S(!0)}),[]),z=(0,a.I4)((e=>{B(e.target.value),S(!0)}),[]),H=(0,a.I4)((e=>{$(e),I(!0)}),[]),V=(0,a.I4)((()=>{const e=T.trim(),t=A.trim(),n=F.trim();e.length?n.length>70?k(Ln):E({photo:w,...y&&{firstName:e,lastName:t,bio:n},...b&&{username:x}}):k(An)}),[w,T,A,F,y,x,b,E]);return a.ZP.createElement("div",{className:"settings-fab-wrapper"},a.ZP.createElement("div",{className:"settings-content custom-scroll"},a.ZP.createElement("div",{className:"settings-edit-profile"},a.ZP.createElement(yn.Z,{currentAvatarBlobUrl:D,onChange:_,title:"Edit your profile photo",disabled:O}),a.ZP.createElement(Ue.Z,{value:T,onChange:J,label:f("FirstName"),disabled:O,error:N===An?N:void 0}),a.ZP.createElement(Ue.Z,{value:A,onChange:X,label:f("LastName"),disabled:O}),a.ZP.createElement(Ue.Z,{value:F,onChange:z,label:f("UserBio"),disabled:O,error:N===Ln?N:void 0}),a.ZP.createElement("p",{className:"settings-item-description",dir:f.isRtl?"rtl":void 0},(0,ke.Z)(f("lng_settings_about_bio"),["br","simple_markdown"]))),a.ZP.createElement("div",{className:"settings-item"},a.ZP.createElement("h4",{className:"settings-item-header",dir:f.isRtl?"rtl":void 0},f("Username")),a.ZP.createElement(Tn,{currentUsername:x||"",isLoading:O,isUsernameAvailable:Z,checkUsername:C,onChange:H}),a.ZP.createElement("p",{className:"settings-item-description",dir:f.isRtl?"rtl":void 0},(0,ke.Z)(f("UsernameHelp"),["br","simple_markdown"])),x&&a.ZP.createElement("p",{className:"settings-item-description",dir:f.isRtl?"rtl":void 0},f("lng_username_link"),a.ZP.createElement("br",null),a.ZP.createElement("span",{className:"username-link"},"https://t.me/",x)))),a.ZP.createElement(Sn.Z,{isShown:G,onClick:V,disabled:O,ariaLabel:"Save changes"},O?a.ZP.createElement(Y.Z,{color:"white"}):a.ZP.createElement("i",{className:"icon-check"})))}))),Bn=(0,a.X$)((0,s.c$)((e=>(0,be.ei)(e.settings.byKey,["canAutoLoadPhotoFromContacts","canAutoLoadPhotoInPrivateChats","canAutoLoadPhotoInGroups","canAutoLoadPhotoInChannels","canAutoLoadVideoFromContacts","canAutoLoadVideoInPrivateChats","canAutoLoadVideoInGroups","canAutoLoadVideoInChannels","canAutoLoadFileFromContacts","canAutoLoadFileInPrivateChats","canAutoLoadFileInGroups","canAutoLoadFileInChannels","canAutoPlayGifs","canAutoPlayVideos","autoLoadFileMaxSizeMb"])))((e=>{let{isActive:t,onScreenSelect:n,onReset:r,canAutoLoadPhotoFromContacts:i,canAutoLoadPhotoInPrivateChats:c,canAutoLoadPhotoInGroups:d,canAutoLoadPhotoInChannels:m,canAutoLoadVideoFromContacts:u,canAutoLoadVideoInPrivateChats:h,canAutoLoadVideoInGroups:Z,canAutoLoadVideoInChannels:v,canAutoLoadFileFromContacts:p,canAutoLoadFileInPrivateChats:E,canAutoLoadFileInGroups:C,canAutoLoadFileInChannels:f,canAutoPlayGifs:b,canAutoPlayVideos:I,autoLoadFileMaxSizeMb:y}=e;const{setSettingOption:S}=(0,s.Sv)(),N=(0,g.Z)();(0,P.ZP)(t,r,n,l.MT.General);const k=(0,a.I4)((e=>N("AutodownloadSizeLimitUpTo",N("FileSize.MB",String(o.by[e]),"i"))),[N]),w=(0,a.I4)((e=>{S({autoLoadFileMaxSizeMb:o.by[e]})}),[S]),M=(0,a.I4)((e=>{S({canAutoPlayGifs:e})}),[S]),T=(0,a.I4)((e=>{S({canAutoPlayVideos:e})}),[S]);function R(e,t,n,s,r,l){return a.ZP.createElement("div",{className:"settings-item"},a.ZP.createElement("h4",{className:"settings-item-header",dir:N.isRtl?"rtl":void 0},e),a.ZP.createElement(ct.Z,{label:N("AutoDownloadSettings.Contacts"),checked:n,onCheck:e=>S({[`canAutoLoad${t}FromContacts`]:e})}),a.ZP.createElement(ct.Z,{label:N("AutoDownloadSettings.PrivateChats"),checked:s,onCheck:e=>S({[`canAutoLoad${t}InPrivateChats`]:e})}),a.ZP.createElement(ct.Z,{label:N("AutoDownloadSettings.GroupChats"),checked:r,onCheck:e=>S({[`canAutoLoad${t}InGroups`]:e})}),a.ZP.createElement(ct.Z,{label:N("AutoDownloadSettings.Channels"),checked:l,onCheck:e=>S({[`canAutoLoad${t}InChannels`]:e})}),"File"===t&&function(){const e=o.by.indexOf(y);return a.ZP.createElement("div",{className:"pt-5"},a.ZP.createElement(se.Z,{label:N("AutoDownloadMaxFileSize"),min:0,max:5,value:-1!==e?e:2,renderValue:k,onChange:w}))}())}return a.ZP.createElement("div",{className:"settings-content custom-scroll"},R(N("AutoDownloadPhotosTitle"),"Photo",i,c,d,m),R(N("AutoDownloadVideosTitle"),"Video",u,h,Z,v),R("Auto-download files","File",p,E,C,f),a.ZP.createElement("div",{className:"settings-item"},a.ZP.createElement("h4",{className:"settings-item-header",dir:N.isRtl?"rtl":void 0},N("AutoplayMedia")),a.ZP.createElement(ct.Z,{label:N("GifsTab2"),checked:b,onCheck:M}),a.ZP.createElement(ct.Z,{label:N("DataAndStorage.Autoplay.Videos"),checked:I,onCheck:T})))})));var xn=n(1334);const $n=(0,z.P2)((e=>e()),6e4,!0),Dn=(0,a.X$)((0,s.c$)((e=>{const{orderedIds:t,byId:n,recommended:a}=e.chatFolders;return{orderedFolderIds:t,foldersById:n,recommendedChatFolders:a}}))((e=>{let{isActive:t,onCreateFolder:n,onEditFolder:r,onScreenSelect:i,onReset:c,orderedFolderIds:d,foldersById:m,recommendedChatFolders:u}=e;const{loadRecommendedChatFolders:h,addChatFolder:Z,showDialog:v}=(0,s.Sv)(),[p,E]=(0,a.eJ)(),[C,b]=(0,a.eJ)(!1),I=(0,a.I4)((()=>b(!0)),[]);(0,a.d4)((()=>{p||(0,yt.Z)("FoldersAll").then(E)}),[p]),(0,a.d4)((()=>{$n((()=>{h()}))}),[h]);const y=(0,a.I4)((()=>{Object.keys(m).length>=10?v({data:{message:"DIALOG_FILTERS_TOO_MUCH",hasErrorKey:!0}}):n()}),[m,v,n]),S=(0,g.Z)();(0,P.ZP)(t,c,i,l.MT.Folders);const N=(0,xn.mE)(),k=(0,a.Ye)((()=>{if(d)return d.map((e=>{const t=m[e];return{id:t.id,title:t.title,subtitle:(0,f.SB)(S,t,N[t.id])}}))}),[d,m,S,N]),w=(0,a.I4)((e=>{Object.keys(m).length>=10?v({data:{message:"DIALOG_FILTERS_TOO_MUCH",hasErrorKey:!0}}):Z({folder:e})}),[m,Z,v]);return a.ZP.createElement("div",{className:"settings-content custom-scroll"},a.ZP.createElement("div",{className:"settings-content-header"},a.ZP.createElement("div",{className:"settings-content-icon"},p&&a.ZP.createElement(St.Z,{id:"settingsFoldersMain",size:o.ku,animationData:p,play:C,noLoop:!0,onLoad:I})),a.ZP.createElement("p",{className:"settings-item-description mb-3",dir:"auto"},S("CreateNewFilterInfo")),a.ZP.createElement(B.Z,{className:"with-icon mb-2",color:"primary",size:"smaller",pill:!0,fluid:!0,onClick:y,isRtl:S.isRtl},a.ZP.createElement("i",{className:"icon-add"}),S("CreateNewFilter"))),a.ZP.createElement("div",{className:"settings-item pt-3"},a.ZP.createElement("h4",{className:"settings-item-header mb-3",dir:S.isRtl?"rtl":void 0},S("Filters")),null!=k&&k.length?k.map((e=>a.ZP.createElement(_e.Z,{className:"mb-2 no-icon",narrow:!0,multiline:!0,onClick:()=>r(m[e.id])},a.ZP.createElement("span",{className:"title"},e.title),a.ZP.createElement("span",{className:"subtitle"},e.subtitle)))):k&&!k.length?a.ZP.createElement("p",{className:"settings-item-description my-4",dir:"auto"},"You have no folders yet."):a.ZP.createElement(De.Z,null)),u&&Boolean(u.length)&&a.ZP.createElement("div",{className:"settings-item pt-3"},a.ZP.createElement("h4",{className:"settings-item-header mb-3",dir:S.isRtl?"rtl":void 0},S("FilterRecommended")),u.map((e=>a.ZP.createElement(_e.Z,{className:"mb-2",narrow:!0,onClick:()=>w(e)},a.ZP.createElement("div",{className:"settings-folders-recommended-item"},a.ZP.createElement("div",{className:"multiline-item"},a.ZP.createElement("span",{className:"title"},e.title),a.ZP.createElement("span",{className:"subtitle"},e.description)),a.ZP.createElement(B.Z,{className:"px-3",color:"primary",size:"tiny",pill:!0,fluid:!0,isRtl:S.isRtl},S("Add"))))))))})));var On=n(3455);const Un=e=>{let{count:t,itemName:n,itemPluralName:s,isLoading:r,onClick:l}=e;const o=(0,g.Z)();return a.ZP.createElement(B.Z,{className:"ShowMoreButton",color:"translucent",size:"smaller",isText:!0,isLoading:r,isRtl:o.isRtl,onClick:l},a.ZP.createElement("i",{className:"icon-down"}),"Show ",t," more ",t>1?s||`${n}s`:n)},Gn="Please provide a title for this folder.",_n="ChatList.Filter.Error.Empty",Jn=(0,a.X$)((0,s.c$)((e=>{const{listIds:t}=e.chats;return{loadedActiveChatIds:t.active,loadedArchivedChatIds:t.archived}}))((e=>{let{state:t,dispatch:n,onAddIncludedChats:r,onAddExcludedChats:i,isActive:c,onScreenSelect:d,onReset:m,onBack:u,loadedActiveChatIds:h,loadedArchivedChatIds:Z}=e;const{editChatFolder:v,addChatFolder:p}=(0,s.Sv)(),[E,C]=(0,a.eJ)(),[b,I]=(0,a.eJ)(!1),y=(0,a.I4)((()=>I(!0)),[]),[S,N]=(0,a.eJ)(!1),[k,w]=(0,a.eJ)(!1),{selectedChatIds:M,selectedChatTypes:T}=(0,On.vb)(t,"included"),{selectedChatIds:R,selectedChatTypes:A}=(0,On.vb)(t,"excluded");(0,a.d4)((()=>{E||(0,yt.Z)("FoldersNew").then(C)}),[E]),(0,a.d4)((()=>{N(!1),w(!1)}),[t.folderId]);const[L,F]=(0,a.Ye)((()=>{const e=new Set([...h||[],...Z||[]]),t=(0,be.eL)(M,e),n=(0,be.eL)(R,e);return[S?t:t.slice(0,5-T.length),k?n:n.slice(0,5-A.length)]}),[R,M,T,A,k,S,h,Z]),B=(0,g.Z)();(0,P.ZP)(c,u,d,"edit"===t.mode?l.MT.FoldersEditFolder:l.MT.FoldersCreateFolder);const x=(0,a.I4)((e=>{const{currentTarget:t}=e;n({type:"setTitle",payload:t.value.trim()})}),[n]),$=(0,a.I4)((()=>{const{title:e}=t.folder;e?M.length||Object.keys(T).length?(n({type:"setIsLoading",payload:!0}),"edit"===t.mode?v({id:t.folderId,folderUpdate:t.folder}):p({folder:t.folder}),setTimeout((()=>{m()}),500)):n({type:"setError",payload:_n}):n({type:"setError",payload:Gn})}),[p,n,v,M.length,T,m,t]);function D(e){const t="included"===e?T:A,n="included"===e?L:F,s="included"===e?S:k,r=("included"===e?M:R).length-t.length-n.length,l="included"===e?()=>N(!0):()=>w(!0);return a.ZP.createElement(a.ZP.Fragment,null,t.map((t=>function(e,t){const n="included"===t?On.fi.find((t=>{let{key:n}=t;return n===e})):On.Yy.find((t=>{let{key:n}=t;return n===e}));if(n)return a.ZP.createElement(_e.Z,{key:n.key,className:"settings-folders-list-item mb-1",icon:n.icon,narrow:!0,inactive:!0},B(n.title))}(t,e))),n.map((e=>a.ZP.createElement(_e.Z,{className:"settings-folders-list-item mb-1",narrow:!0,inactive:!0},(0,f.YC)(e)?a.ZP.createElement(Xe.Z,{avatarSize:"small",userId:e}):a.ZP.createElement(Je.Z,{avatarSize:"small",chatId:e})))),!s&&r>0&&a.ZP.createElement(Un,{count:r,itemName:"chat",onClick:l}))}return a.ZP.createElement("div",{className:"settings-fab-wrapper"},a.ZP.createElement("div",{className:"settings-content custom-scroll"},a.ZP.createElement("div",{className:"settings-content-header"},a.ZP.createElement("div",{className:"settings-content-icon"},E&&a.ZP.createElement(St.Z,{id:"settingsFoldersEdit",size:o.ku,animationData:E,play:b&&String(t.folderId),noLoop:!0,onLoad:y})),"create"===t.mode&&a.ZP.createElement("p",{className:"settings-item-description mb-3",dir:B.isRtl?"rtl":void 0},B("FilterIncludeInfo")),a.ZP.createElement(Ue.Z,{className:"mb-0",label:B("FilterNameHint"),value:t.folder.title,onChange:x,error:t.error&&t.error===Gn?Gn:void 0})),a.ZP.createElement("div",{className:"settings-item no-border pt-3"},t.error&&t.error===_n&&a.ZP.createElement("p",{className:"settings-item-description color-danger mb-2",dir:B.isRtl?"rtl":void 0},B(t.error)),a.ZP.createElement("h4",{className:"settings-item-header mb-3",dir:B.isRtl?"rtl":void 0},B("FilterInclude")),a.ZP.createElement(_e.Z,{className:"settings-folders-list-item color-primary mb-0",icon:"add",onClick:r},B("FilterAddChats")),D("included")),a.ZP.createElement("div",{className:"settings-item no-border pt-3"},a.ZP.createElement("h4",{className:"settings-item-header mb-3",dir:B.isRtl?"rtl":void 0},B("FilterExclude")),a.ZP.createElement(_e.Z,{className:"settings-folders-list-item color-primary mb-0",icon:"add",onClick:i},B("FilterAddChats")),D("excluded"))),a.ZP.createElement(Sn.Z,{isShown:Boolean(t.isTouched),disabled:t.isLoading,onClick:$,ariaLabel:"edit"===t.mode?"Save changes":"Create folder"},t.isLoading?a.ZP.createElement(Y.Z,{color:"white"}):a.ZP.createElement("i",{className:"icon-check"})))}))),Xn=(0,a.X$)((e=>{let{mode:t,chatIds:n,selectedIds:s,selectedChatTypes:r,filterValue:l,onSelectedIdsChange:o,onSelectedChatTypesChange:i,onFilterChange:c}=e;const d=(0,a.sO)(null),m="included"===t?On.fi:On.Yy,u=s.length+r.length>10,h=s.length>=100;(0,a.d4)((()=>{setTimeout((()=>{requestAnimationFrame((()=>{d.current.focus()}))}),500)}),[]);const Z=(0,a.I4)((e=>{const t=[...s];t.includes(e)?t.splice(t.indexOf(e),1):t.push(e),o(t)}),[s,o]),v=(0,a.I4)((e=>{const t=[...r];t.includes(e)?t.splice(t.indexOf(e),1):t.push(e),i(t)}),[r,i]),P=(0,a.I4)((e=>{const{value:t}=e.currentTarget;c(t)}),[c]),p=(0,g.Z)(),[E,C]=(0,Be.Z)(void 0,n,Boolean(l));return a.ZP.createElement("div",{className:"Picker SettingsFoldersChatsPicker"},a.ZP.createElement("div",{className:"picker-header custom-scroll"},r.map((function(e){const t=m.find((t=>{let{key:n}=t;return e===n}));if(t)return a.ZP.createElement(_t.Z,{icon:t.icon,title:p(t.title),isMinimized:u,canClose:!0,onClick:v,clickArg:t.key})})),s.map(((e,t)=>a.ZP.createElement(_t.Z,{chatOrUserId:e,isMinimized:u&&tv(e.key),ripple:!0},a.ZP.createElement("i",{className:`icon-${e.icon}`}),a.ZP.createElement("h3",{className:"chat-type",dir:"auto"},p(e.title)),a.ZP.createElement(ct.Z,{label:"",checked:r.includes(e.key),round:!0}))})),a.ZP.createElement("div",{key:"divider",className:"picker-list-divider"}),a.ZP.createElement("h4",{key:"header2",className:"settings-item-header",dir:p.isRtl?"rtl":void 0},p("FilterChats"))),null!=E&&E.length?E.map((function(e){const t=s.includes(e);return a.ZP.createElement(_e.Z,{key:e,className:"chat-item-clickable picker-list-item chat-item",onClick:()=>Z(e),ripple:!0,disabled:!t&&h},(0,f.YC)(e)?a.ZP.createElement(Xe.Z,{userId:e}):a.ZP.createElement(Je.Z,{chatId:e,withChatType:!0}),a.ZP.createElement(ct.Z,{label:"",checked:t,round:!0}))})):E&&!E.length?a.ZP.createElement("p",{className:"no-results",key:"no-results"},"Sorry, nothing found."):a.ZP.createElement(De.Z,{key:"loading"})))})),zn=(0,a.X$)((e=>{let{mode:t,state:n,dispatch:r,isActive:i,onScreenSelect:c,onReset:d}=e;const{chatFilter:m}=n,{selectedChatIds:u,selectedChatTypes:h}=(0,On.vb)(n,t,!0),Z=(0,g.Z)(),v=(0,xn.d7)(o.Nf),p=(0,xn.d7)(o.WS),E=(0,a.Ye)((()=>{const e=(0,s.Rd)().chats.byId,t=[...v||[],...p||[]];return(0,be.Tw)([...u,...(0,f.$l)(Z,t,e,m)])}),[v,p,u,Z,m]),C=(0,a.I4)((e=>{r({type:"setChatFilter",payload:e})}),[r]),b=(0,a.I4)((e=>{r("included"===t?{type:"setIncludeFilters",payload:{...n.includeFilters,includedChatIds:e}}:{type:"setExcludeFilters",payload:{...n.excludeFilters,excludedChatIds:e}})}),[t,n,r]),I=(0,a.I4)((e=>{const n={};e.forEach((e=>{n[e]=!0})),r("included"===t?{type:"setIncludeFilters",payload:{includedChatIds:u,...n}}:{type:"setExcludeFilters",payload:{excludedChatIds:u,...n}})}),[t,u,r]);return(0,P.ZP)(i,d,c,"included"===t?l.MT.FoldersIncludedChats:l.MT.FoldersExcludedChats),E?a.ZP.createElement(Xn,{mode:t,chatIds:E,selectedIds:u,selectedChatTypes:h,filterValue:m,onSelectedIdsChange:b,onSelectedChatTypesChange:I,onFilterChange:C}):a.ZP.createElement(De.Z,null)})),Yn=(0,a.X$)((e=>{let{currentScreen:t,shownScreen:n,state:s,dispatch:r,isActive:o,onScreenSelect:i,onReset:c}=e;const d=(0,a.I4)((()=>{t!==l.MT.FoldersCreateFolder&&t!==l.MT.FoldersEditFolder&&t!==l.MT.FoldersEditFolderFromChatList||setTimeout((()=>{r({type:"reset"})}),200),t!==l.MT.FoldersIncludedChats&&t!==l.MT.FoldersExcludedChats?c():"create"===s.mode?i(l.MT.FoldersCreateFolder):i(l.MT.FoldersEditFolder)}),[s.mode,r,t,c,i]),m=(0,a.I4)((()=>{r({type:"reset"}),i(l.MT.FoldersCreateFolder)}),[i,r]),u=(0,a.I4)((e=>{r({type:"editFolder",payload:e}),i(l.MT.FoldersEditFolder)}),[r,i]),h=(0,a.I4)((()=>{r({type:"editIncludeFilters"}),i(t===l.MT.FoldersEditFolderFromChatList?l.MT.FoldersIncludedChatsFromChatList:l.MT.FoldersIncludedChats)}),[t,r,i]),Z=(0,a.I4)((()=>{r({type:"editExcludeFilters"}),i(t===l.MT.FoldersEditFolderFromChatList?l.MT.FoldersExcludedChatsFromChatList:l.MT.FoldersExcludedChats)}),[t,r,i]);switch(t){case l.MT.Folders:return a.ZP.createElement(Dn,{onCreateFolder:m,onEditFolder:u,onScreenSelect:i,isActive:o||[l.MT.FoldersCreateFolder,l.MT.FoldersEditFolder,l.MT.FoldersIncludedChats,l.MT.FoldersExcludedChats].includes(n),onReset:c});case l.MT.FoldersCreateFolder:case l.MT.FoldersEditFolder:case l.MT.FoldersEditFolderFromChatList:return a.ZP.createElement(Jn,{state:s,dispatch:r,onAddIncludedChats:h,onAddExcludedChats:Z,onReset:d,onScreenSelect:i,isActive:o||[l.MT.FoldersIncludedChats,l.MT.FoldersExcludedChats].includes(n),onBack:c});case l.MT.FoldersIncludedChats:case l.MT.FoldersIncludedChatsFromChatList:return a.ZP.createElement(zn,{mode:"included",state:s,dispatch:r,onReset:d,onScreenSelect:i,isActive:o});case l.MT.FoldersExcludedChats:case l.MT.FoldersExcludedChatsFromChatList:return a.ZP.createElement(zn,{mode:"excluded",state:s,dispatch:r,onReset:d,onScreenSelect:i,isActive:o});default:return}}));var Hn=n(711),Vn=n(692);const jn=(0,a.X$)((e=>{let{size:t=o.DC,stickerSet:n,observeIntersection:s}=e;const l=(0,a.sO)(null),i=(0,jt.Op)(l,s),c=`stickerSet${n.id}`,d=(0,p.Z)(c,!i,r.IU.Lottie),m=(0,Vn.Z)(d),u=(0,a.Ye)((()=>{if(!d)return(0,ft.Xv)(n.title,2)}),[d,n.title]);return a.ZP.createElement("div",{ref:l,className:"sticker-set-cover"},u,d&&a.ZP.createElement(St.Z,{id:c,size:t,animationData:d,className:m}))})),qn=(0,a.X$)((e=>{let{stickerSet:t,observeIntersection:n}=e;const s=(0,a.sO)(null),r=(0,jt.Op)(s,n),l=(0,p.Z)(t.hasThumbnail&&`stickerSet${t.id}`,!r),o=(0,Vn.Z)(l),c=t.isVideos,d=(0,a.Ye)((()=>{if(c&&!i.Hh||!l)return(0,ft.Xv)(t.title,2)}),[c,l,t.title]);return a.ZP.createElement("div",{ref:s,className:"sticker-set-cover"},d,c?a.ZP.createElement("video",{src:l,className:o,loop:!0,autoPlay:!0}):a.ZP.createElement("img",{src:l,className:o,alt:""}))}));var Kn=n(3547);const Wn=(0,a.X$)((e=>{var t;let{stickerSet:n,observeIntersection:s,onClick:r}=e;const l=(0,g.Z)();if(!n||!n.stickers)return;const i=null===(t=n.stickers)||void 0===t?void 0:t[0];return n.hasThumbnail||!i?a.ZP.createElement(_e.Z,{narrow:!0,className:"SettingsStickerSet",inactive:!i,onClick:()=>i&&r(i)},a.ZP.createElement(B.Z,{ariaLabel:n.title,color:"translucent",isRtl:l.isRtl},n.isLottie?a.ZP.createElement(jn,{size:o.Mw,stickerSet:n,observeIntersection:s}):a.ZP.createElement(qn,{stickerSet:n,observeIntersection:s})),a.ZP.createElement("div",{className:"multiline-menu-item"},a.ZP.createElement("div",{className:"title"},n.title),a.ZP.createElement("div",{className:"subtitle"},l("StickerPack.StickerCount",n.count,"i")))):a.ZP.createElement(_e.Z,{narrow:!0,className:"SettingsStickerSet",onClick:()=>r(i)},a.ZP.createElement(Kn.Z,{sticker:i,size:o.Mw,title:n.title,observeIntersection:s,clickArg:void 0,noContextMenu:!0}),a.ZP.createElement("div",{className:"multiline-menu-item"},a.ZP.createElement("div",{className:"title"},n.title),a.ZP.createElement("div",{className:"subtitle"},l("StickerPack.StickerCount",n.count,"i"))))}));var Qn=n(4851);const ea=["Solid and Steady","Nice and Fast","Lots of Stuff"],ta=[{label:"12-hour",value:"12h"},{label:"24-hour",value:"24h"}],na=(0,a.X$)((0,s.c$)((e=>{var t;return{...(0,be.ei)(e.settings.byKey,["messageTextSize","animationLevel","messageSendKeyCombo","shouldSuggestStickers","shouldLoopStickers","isSensitiveEnabled","canChangeSensitive","timeFormat"]),stickerSetIds:e.stickers.added.setIds,stickerSetsById:e.stickers.setsById,defaultReaction:null===(t=e.appConfig)||void 0===t?void 0:t.defaultReaction}}))((e=>{let{isActive:t,onScreenSelect:n,onReset:r,stickerSetIds:o,stickerSetsById:c,defaultReaction:d,messageTextSize:m,animationLevel:u,messageSendKeyCombo:h,shouldSuggestStickers:Z,shouldLoopStickers:v,timeFormat:p}=e;const{setSettingOption:E}=(0,s.Sv)(),C=(0,a.sO)(null),{observe:f}=(0,jt.S1)({rootRef:C}),[b,I,y]=(0,ee.Z)(),[S,N]=(0,a.eJ)(),k=(0,g.Z)(),w=i.$b?void 0:[{value:"enter",label:k("lng_settings_send_enter"),subLabel:"New line by Shift + Enter"},{value:"ctrl-enter",label:k(i.jm?"lng_settings_send_cmdenter":"lng_settings_send_ctrlenter"),subLabel:"New line by Enter"}],M=(0,a.I4)((e=>{ea.forEach(((t,n)=>{document.body.classList.toggle(`animation-level-${n}`,e===n)})),E({animationLevel:e})}),[E]),T=(0,a.I4)((e=>{document.documentElement.style.setProperty("--composer-text-size",`${Math.max(e,i.cj?16:15)}px`),document.documentElement.style.setProperty("--message-meta-height",`${Math.floor(1.3125*e)}px`),document.documentElement.style.setProperty("--message-text-size",`${e}px`),document.documentElement.setAttribute("data-message-text-size",e.toString()),E({messageTextSize:e})}),[E]),R=(0,a.I4)((e=>{E({timeFormat:e}),E({wasTimeFormatSetManually:!0}),(0,Hn.qf)(e)}),[E]),A=(0,a.I4)((e=>{N(e),I()}),[I]),L=(0,a.I4)((e=>{E({messageSendKeyCombo:e})}),[E]),F=(0,a.I4)((e=>{E({shouldSuggestStickers:e})}),[E]),B=(0,a.I4)((e=>{E({shouldLoopStickers:e})}),[E]),x=o&&o.map((e=>{var t;return!(null==c||null===(t=c[e])||void 0===t||!t.installedDate)&&c[e]})).filter(Boolean);return(0,P.ZP)(t,r,n,l.MT.General),a.ZP.createElement("div",{className:"settings-content custom-scroll"},a.ZP.createElement("div",{className:"settings-item pt-3"},a.ZP.createElement("h4",{className:"settings-item-header",dir:k.isRtl?"rtl":void 0},k("SETTINGS")),a.ZP.createElement(se.Z,{label:k("TextSize"),min:12,max:20,value:m,onChange:T}),a.ZP.createElement(_e.Z,{icon:"photo",onClick:()=>n(l.MT.GeneralChatBackground)},k("ChatBackground"))),a.ZP.createElement("div",{className:"settings-item"},a.ZP.createElement("h4",{className:"settings-item-header",dir:k.isRtl?"rtl":void 0},"Time Format"),a.ZP.createElement(gt.Z,{name:"timeformat",options:ta,selected:p,onChange:R})),a.ZP.createElement("div",{className:"settings-item"},a.ZP.createElement("h4",{className:"settings-item-header",dir:k.isRtl?"rtl":void 0},"Animation Level"),a.ZP.createElement("p",{className:"settings-item-description",dir:k.isRtl?"rtl":void 0},"Choose the desired animations amount."),a.ZP.createElement(se.Z,{options:ea,value:u,onChange:M})),w&&a.ZP.createElement("div",{className:"settings-item"},a.ZP.createElement("h4",{className:"settings-item-header",dir:k.isRtl?"rtl":void 0},k("VoiceOver.Keyboard")),a.ZP.createElement(gt.Z,{name:"keyboard-send-settings",options:w,onChange:L,selected:h})),a.ZP.createElement("div",{className:"settings-item"},a.ZP.createElement("h4",{className:"settings-item-header",dir:k.isRtl?"rtl":void 0},k("AccDescrStickers")),d&&a.ZP.createElement(_e.Z,{className:"SettingsDefaultReaction",onClick:()=>n(l.MT.QuickReaction)},a.ZP.createElement(bt.Z,{reaction:d}),a.ZP.createElement("div",{className:"title"},k("DoubleTapSetting"))),a.ZP.createElement(ct.Z,{label:k("SuggestStickers"),checked:Z,onCheck:F}),a.ZP.createElement(ct.Z,{label:k("LoopAnimatedStickers"),checked:v,onCheck:B}),a.ZP.createElement("div",{className:"mt-4",ref:C},x&&x.map((e=>a.ZP.createElement(Wn,{key:e.id,stickerSet:e,observeIntersection:f,onClick:A})))),S&&a.ZP.createElement(Qn.Z,{isOpen:b,fromSticker:S,onClose:y})))})));var aa=n(5655);function sa(e){return[parseInt(e.substring(0,2),16),parseInt(e.substring(2,4),16),parseInt(e.substring(4,6),16)]}function ra(e){const t=e[0].toString(16),n=e[1].toString(16),a=e[2].toString(16);return(1==t.length?"0"+t:t)+(1==n.length?"0"+n:n)+(1==a.length?"0"+a:a)}function la(e){let[t,n,a]=e;t/=255,n/=255,a/=255;let s,r,l=Math.max(t,n,a),o=Math.min(t,n,a),i=l,c=l-o;if(r=0==l?0:c/l,l==o)s=0;else{switch(l){case t:s=(n-a)/c+(n.5?Math.max(0,.65*a):Math.max(0,Math.min(1,1-.65*a)),`hsla(${360*t}, ${100*n}%, ${100*a}%, .4)`}var ca=n(9524),da=n(5866);const ma=(0,a.X$)((e=>{var t;let{wallpaper:n,theme:s,isSelected:r,onClick:i}=e;const{slug:c,document:d}=n,u=`wallpaper${d.id}`,h=d.previewBlobUrl,Z=(0,p.Z)(`${u}?size=m`),v=(0,da.Z)(null===(t=d.thumbnail)||void 0===t?void 0:t.dataUri,Boolean(Z),!0),{transitionClassNames:P}=(0,K.Z)(Boolean(Z||h),void 0,void 0,"slow"),[g,f]=(0,a.eJ)(!1),{mediaData:b,loadProgress:I}=(0,E.Z)(u,!g),y=!1===(0,C.Z)(g),{shouldRender:S,transitionClassNames:N}=(0,K.Z)(g&&!b||c===l.mp,void 0,y,"slow"),k=(0,a.sO)();k.current=s;const w=(0,a.I4)((()=>{(async()=>{const e=await(0,m.gm)(b);await ca.save(o.fo,k.current,e),i(c)})()}),[b,i,c]);(0,a.d4)((()=>{b&&w()}),[b,w]);const M=(0,a.I4)((()=>{b?w():f((e=>!e))}),[b,w]),T=(0,H.Z)("WallpaperTile",r&&"selected");return a.ZP.createElement("div",{className:T,onClick:M},a.ZP.createElement("div",{className:"media-inner"},a.ZP.createElement("canvas",{ref:v,className:"thumbnail"}),a.ZP.createElement("img",{src:Z||h,className:(0,H.Z)("full-media",P),alt:""}),S&&a.ZP.createElement("div",{className:(0,H.Z)("spinner-container",N)},a.ZP.createElement(U.Z,{progress:I,onClick:M}))))})),ua=(0,z.P2)((e=>e()),6e4,!0),ha=(0,a.X$)((0,s.c$)((e=>{const t=(0,b.Pu)(e),{background:n,isBlurred:a}=e.settings.themes[t]||{},{loadedWallpapers:s}=e.settings;return{background:n,isBlurred:a,loadedWallpapers:s,theme:t}}))((e=>{let{isActive:t,onScreenSelect:n,onReset:r,background:i,isBlurred:c,loadedWallpapers:d,theme:u}=e;const{loadWallpapers:h,uploadWallpaper:Z,setThemeSettings:v}=(0,s.Sv)(),p=(0,a.sO)();p.current=u,(0,a.d4)((()=>{ua((()=>{h()}))}),[h]);const E=(0,a.I4)((e=>{const{files:t}=e.target;t&&t.length>0&&Z(t[0])}),[Z]),C=(0,a.I4)((()=>{(0,aa.g)("image/jpeg",E,!0)}),[E]),f=(0,a.I4)((()=>{n(l.MT.GeneralChatBackgroundColor)}),[n]),b=(0,a.I4)((()=>{v({theme:u,background:void 0,backgroundColor:void 0,isBlurred:!0,patternColor:"dark"===u?o.Vv:o.g})}),[v,u]),I=(0,a.I4)((e=>{v({theme:p.current,background:e});const t=d&&d.find((t=>t.slug===e));null!=t&&t.document.thumbnail&&async function(e){const t=[0,0,0];let n,a,s,r,l=-4,o=[0,0,0],i=0;const c=document.createElement("canvas"),d=c.getContext&&c.getContext("2d");if(!d)return t;const u=await(0,m.pt)(e);s=u.naturalHeight||u.offsetHeight||u.height,a=u.naturalWidth||u.offsetWidth||u.width,c.height=s,c.width=a,d.drawImage(u,0,0);try{n=d.getImageData(0,0,a,s)}catch(e){return t}for(r=n.data.length;(l+=20){const t=ia(e),n=`#${ra(e)}`;v({theme:p.current,backgroundColor:n,patternColor:t})}))}),[d,v]),y=(0,a.I4)((e=>{v({theme:p.current,isBlurred:e.target.checked})}),[v]),S=(0,g.Z)();(0,P.ZP)(t,r,n,l.MT.GeneralChatBackground);const N=(null==d?void 0:d[0])&&d[0].slug===l.mp;return a.ZP.createElement("div",{className:"SettingsGeneralBackground settings-content custom-scroll"},a.ZP.createElement("div",{className:"settings-item pt-3"},a.ZP.createElement(_e.Z,{icon:"camera-add",className:"mb-0",disabled:N,onClick:C},S("UploadImage")),a.ZP.createElement(_e.Z,{icon:"colorize",className:"mb-0",onClick:f},S("SetColor")),a.ZP.createElement(_e.Z,{icon:"favorite",onClick:b},S("ThemeResetToDefaults")),a.ZP.createElement(ct.Z,{label:S("BackgroundBlurred"),checked:Boolean(c),onChange:y})),d?a.ZP.createElement("div",{className:"settings-wallpapers"},d.map((e=>a.ZP.createElement(ma,{wallpaper:e,theme:u,isSelected:i===e.slug,onClick:I})))):a.ZP.createElement(De.Z,null))}))),Za=la(sa("e6ebee")),va=["#e6ebee","#b2cee1","#008dd0","#c6e7cb","#c4e1a6","#60b16e","#ccd0af","#a6a997","#7a7072","#fdd7af","#fdb76e","#dd8851"];function Pa(e,t){return{colorPosition:[Math.round(e[1]*(t.colorRect.width-1)),Math.round((1-e[2])*(t.colorRect.height-1))],huePosition:Math.round(e[0]*(t.hueRect.width-1))}}function ga(e,t){let{colorPosition:n,huePosition:a}=e;return[a/(t.hueRect.width-1),n[0]/(t.colorRect.width-1),1-n[1]/(t.colorRect.height-1)]}const pa=(0,a.X$)((0,s.c$)((e=>{const t=(0,b.Pu)(e),{backgroundColor:n}=e.settings.themes[t]||{};return{backgroundColor:n,theme:t}}))((e=>{let{isActive:t,onScreenSelect:n,onReset:r,theme:o,backgroundColor:i}=e;const{setThemeSettings:c}=(0,s.Sv)(),d=(0,a.sO)();d.current=o;const m=(0,a.sO)(null),u=(0,a.sO)(null),h=(0,a.sO)(null),Z=(0,a.sO)(!0),[v,g]=(0,a.eJ)(function(e){return e&&e.startsWith("#")?la(sa(e.replace("#",""))):Za}(i)),p=(0,a.sO)(v);(0,a.d4)((()=>{p.current=v}),[v]);const[E,C,f]=(0,ee.Z)(),[b,I]=(0,a.eJ)(""),[y,N]=(0,a.eJ)(""),k=(0,a.sO)(),w=(0,a.sO)();(0,a.d4)((()=>{const e={offsetLeft:u.current.offsetLeft,...(0,be.ei)(u.current.getBoundingClientRect(),["top","width","height"])},t={offsetLeft:h.current.offsetLeft,...(0,be.ei)(h.current.getBoundingClientRect(),["width"])};function n(t){const n=[Math.min(Math.max(0,t.pageX-e.offsetLeft),e.width-1),Math.min(Math.max(0,t.pageY-e.top+m.current.scrollTop),e.height-1)],{huePosition:a}=Pa(p.current,k.current);return g(ga({colorPosition:n,huePosition:a},k.current)),C(),!0}function a(e){const{colorPosition:n}=Pa(p.current,k.current),a=Math.min(Math.max(0,e.pageX-t.offsetLeft),t.width-1);return g(ga({colorPosition:n,huePosition:a},k.current)),C(),!0}k.current={colorRect:e,hueRect:t},(0,S.sf)(u.current,{onCapture:n,onDrag:n,onRelease:f,onClick:f,selectorToPreventScroll:".SettingsGeneralBackgroundColor",withCursor:!0}),(0,S.sf)(h.current,{onCapture:a,onDrag:a,onRelease:f,onClick:f,selectorToPreventScroll:".SettingsGeneralBackgroundColor",withCursor:!0})}),[C,f]);const{colorPosition:M=[0,0],huePosition:T=0}=k.current?Pa(v,k.current):{},R=ra(oa(v)),A=v[0],L=ra(oa([A,1,1]));(0,a.d4)((()=>{const e=oa(v),t=`#${ra(e)}`;if(I(e.join(", ")),N(t),!Z.current){const n=ia(e);c({theme:d.current,background:void 0,backgroundColor:t,patternColor:n})}Z.current=!1}),[v,c]),(0,a.d4)((()=>{!function(e,t,n,a){let s,r,l;n.current&&a.current?(s=a.current.colorRect.width,r=a.current.colorRect.height,l=n.current):(s=e.offsetWidth,r=e.offsetHeight,l=e.getContext("2d"),e.width=s,e.height=r,n.current=l);const o=l.createImageData(s,r),i=o.data,c=oa([t,1,1]);let d=0;for(let e=0;e{!function(e){const t=e.offsetWidth;e.width=t,e.height=1;const n=e.getContext("2d"),a=n.createImageData(t,1),s=a.data;let r=0;for(let e=0;e{const t=e.currentTarget.value.replace(/[^\d, ]/g,"").slice(0,13);if(t.match(/^\d{1,3},\s?\d{1,3},\s?\d{1,3}$/)){const e=t.split(",").map((e=>Number(e.trim())));g(la(e))}e.currentTarget.value=t}),[]),B=(0,a.I4)((e=>{const t=e.currentTarget.value.replace(/[^0-9a-fA-F]/g,"").slice(0,6);t.match(/^#?[0-9a-fA-F]{6}$/)&&g(la(sa(t.replace("#","")))),e.currentTarget.value=t}),[]),x=(0,a.I4)((e=>{g(la(sa(e.currentTarget.dataset.color.replace("#",""))))}),[]),$=(0,H.Z)("SettingsGeneralBackgroundColor settings-content custom-scroll",E&&"is-dragging");return(0,P.ZP)(t,r,n,l.MT.GeneralChatBackgroundColor),a.ZP.createElement("div",{ref:m,className:$},a.ZP.createElement("div",{className:"settings-item pt-3"},a.ZP.createElement("div",{ref:u,className:"color-picker"},a.ZP.createElement("canvas",null),a.ZP.createElement("div",{className:"handle",style:`transform: translate(${M[0]}px, ${M[1]}px); background-color: #${R};`})),a.ZP.createElement("div",{ref:h,className:"hue-picker"},a.ZP.createElement("canvas",null),a.ZP.createElement("div",{className:"handle",style:`transform: translateX(${T}px); background-color: #${L};`})),a.ZP.createElement("div",{className:"tools"},a.ZP.createElement(Ue.Z,{value:y,label:"HEX",onChange:B}),a.ZP.createElement(Ue.Z,{value:b,label:"RGB",onChange:F}))),a.ZP.createElement("div",{className:"predefined-colors"},va.map((e=>a.ZP.createElement("div",{className:e===`#${R}`?"active":void 0,"data-color":e,style:`background-color: ${e};`,onClick:x})))))})));var Ea=n(8406);const Ca=(0,a.X$)((0,s.c$)((e=>({hasPrivateChatsNotifications:Boolean(e.settings.byKey.hasPrivateChatsNotifications),hasPrivateChatsMessagePreview:Boolean(e.settings.byKey.hasPrivateChatsMessagePreview),hasGroupNotifications:Boolean(e.settings.byKey.hasGroupNotifications),hasGroupMessagePreview:Boolean(e.settings.byKey.hasGroupMessagePreview),hasBroadcastNotifications:Boolean(e.settings.byKey.hasBroadcastNotifications),hasBroadcastMessagePreview:Boolean(e.settings.byKey.hasBroadcastMessagePreview),hasContactJoinedNotifications:Boolean(e.settings.byKey.hasContactJoinedNotifications),hasWebNotifications:e.settings.byKey.hasWebNotifications,hasPushNotifications:e.settings.byKey.hasPushNotifications,notificationSoundVolume:e.settings.byKey.notificationSoundVolume})))((e=>{let{isActive:t,onScreenSelect:n,onReset:r,hasPrivateChatsNotifications:o,hasPrivateChatsMessagePreview:i,hasGroupNotifications:c,hasGroupMessagePreview:d,hasBroadcastNotifications:m,hasBroadcastMessagePreview:u,hasContactJoinedNotifications:h,hasPushNotifications:Z,hasWebNotifications:v,notificationSoundVolume:p}=e;const{loadNotificationSettings:E,updateContactSignUpNotification:C,updateNotificationSettings:f,updateWebNotificationSettings:b}=(0,s.Sv)();(0,a.d4)((()=>{E()}),[E]);const I=(0,_.Z)(500,!0),y=(0,a.I4)(((e,t,n)=>{const a="contact"===t?!o:!("group"===t?c:m),s="contact"===t?i:"group"===t?d:u;f({peerType:t,..."silent"===n&&{isSilent:!e.target.checked,shouldShowPreviews:s},..."showPreviews"===n&&{shouldShowPreviews:e.target.checked,isSilent:a}})}),[u,m,d,c,i,o,f]),S=(0,a.I4)((e=>{b({hasWebNotifications:e.target.checked})}),[b]),N=(0,a.I4)((e=>{b({hasPushNotifications:e.target.checked})}),[b]),k=(0,a.I4)((e=>{y(e,"contact","silent")}),[y]),w=(0,a.I4)((e=>{y(e,"contact","showPreviews")}),[y]),M=(0,a.I4)((e=>{y(e,"group","silent")}),[y]),T=(0,a.I4)((e=>{y(e,"group","showPreviews")}),[y]),R=(0,a.I4)((e=>{y(e,"broadcast","silent")}),[y]),A=(0,a.I4)((e=>{y(e,"broadcast","showPreviews")}),[y]),L=(0,a.I4)((e=>{C({isSilent:!e.target.checked})}),[C]),F=(0,a.I4)((e=>{b({notificationSoundVolume:e}),I((()=>(0,Ea.q3)(void 0,e)))}),[I,b]),B=(0,g.Z)();return(0,P.ZP)(t,r,n,l.MT.Notifications),a.ZP.createElement("div",{className:"settings-content custom-scroll"},a.ZP.createElement("div",{className:"settings-item"},a.ZP.createElement("h4",{className:"settings-item-header",dir:B.isRtl?"rtl":void 0},"Web notifications"),a.ZP.createElement(ct.Z,{label:"Web notifications",subLabel:B(v?"UserInfo.NotificationsEnabled":"UserInfo.NotificationsDisabled"),checked:v,onChange:S}),a.ZP.createElement(ct.Z,{label:"Offline notifications",disabled:!v,subLabel:B(Z?"UserInfo.NotificationsEnabled":"UserInfo.NotificationsDisabled"),checked:Z,onChange:N}),a.ZP.createElement("div",{className:"settings-item-slider"},a.ZP.createElement(se.Z,{label:"Sound",min:0,max:10,value:p,onChange:F}))),a.ZP.createElement("div",{className:"settings-item"},a.ZP.createElement("h4",{className:"settings-item-header",dir:B.isRtl?"rtl":void 0},B("AutodownloadPrivateChats")),a.ZP.createElement(ct.Z,{label:B("NotificationsForPrivateChats"),subLabel:B(o?"UserInfo.NotificationsEnabled":"UserInfo.NotificationsDisabled"),checked:o,onChange:k}),a.ZP.createElement(ct.Z,{label:B("MessagePreview"),disabled:!o,subLabel:B(i?"UserInfo.NotificationsEnabled":"UserInfo.NotificationsDisabled"),checked:i,onChange:w})),a.ZP.createElement("div",{className:"settings-item"},a.ZP.createElement("h4",{className:"settings-item-header",dir:B.isRtl?"rtl":void 0},B("FilterGroups")),a.ZP.createElement(ct.Z,{label:B("NotificationsForGroups"),subLabel:B(c?"UserInfo.NotificationsEnabled":"UserInfo.NotificationsDisabled"),checked:c,onChange:M}),a.ZP.createElement(ct.Z,{label:B("MessagePreview"),disabled:!c,subLabel:B(d?"UserInfo.NotificationsEnabled":"UserInfo.NotificationsDisabled"),checked:d,onChange:T})),a.ZP.createElement("div",{className:"settings-item"},a.ZP.createElement("h4",{className:"settings-item-header",dir:B.isRtl?"rtl":void 0},B("FilterChannels")),a.ZP.createElement(ct.Z,{label:B("NotificationsForChannels"),subLabel:B(m?"UserInfo.NotificationsEnabled":"UserInfo.NotificationsDisabled"),checked:m,onChange:R}),a.ZP.createElement(ct.Z,{label:B("MessagePreview"),disabled:!m,subLabel:B(u?"UserInfo.NotificationsEnabled":"UserInfo.NotificationsDisabled"),checked:u,onChange:A})),a.ZP.createElement("div",{className:"settings-item"},a.ZP.createElement("h4",{className:"settings-item-header",dir:B.isRtl?"rtl":void 0},B("PhoneOther")),a.ZP.createElement(ct.Z,{label:B("ContactJoined"),checked:h,onChange:L})))}))),fa=(0,a.X$)((0,s.c$)((e=>{var t,n,a,s,r;const{settings:{byKey:{hasPassword:l,isSensitiveEnabled:o,canChangeSensitive:i},privacy:c},blocked:d,activeSessions:m}=e;return{hasPassword:l,blockedCount:d.totalCount,sessionsCount:m.length,isSensitiveEnabled:o,canChangeSensitive:i,visibilityPrivacyPhoneNumber:null===(t=c.phoneNumber)||void 0===t?void 0:t.visibility,visibilityPrivacyLastSeen:null===(n=c.lastSeen)||void 0===n?void 0:n.visibility,visibilityPrivacyProfilePhoto:null===(a=c.profilePhoto)||void 0===a?void 0:a.visibility,visibilityPrivacyForwarding:null===(s=c.forwards)||void 0===s?void 0:s.visibility,visibilityPrivacyGroupChats:null===(r=c.chatInvite)||void 0===r?void 0:r.visibility}}))((e=>{let{isActive:t,onScreenSelect:n,onReset:r,hasPassword:o,blockedCount:i,sessionsCount:c,isSensitiveEnabled:d,canChangeSensitive:m,visibilityPrivacyPhoneNumber:u,visibilityPrivacyLastSeen:h,visibilityPrivacyProfilePhoto:Z,visibilityPrivacyForwarding:v,visibilityPrivacyGroupChats:p}=e;const{loadPrivacySettings:E,loadBlockedContacts:C,loadAuthorizations:f,loadContentSettings:b,updateContentSettings:I}=(0,s.Sv)();(0,a.d4)((()=>{C(),f(),E(),b()}),[C,f,E,b]);const y=(0,g.Z)();function S(e){switch(e){case"everybody":return y("P2PEverybody");case"contacts":return y("P2PContacts");case"nobody":return y("P2PNobody")}}return(0,P.ZP)(t,r,n,l.MT.Privacy),a.ZP.createElement("div",{className:"settings-content custom-scroll"},a.ZP.createElement("div",{className:"settings-item pt-3"},a.ZP.createElement(_e.Z,{icon:"delete-user",narrow:!0,onClick:()=>n(l.MT.PrivacyBlockedUsers)},a.ZP.createElement("div",{className:"multiline-menu-item"},a.ZP.createElement("span",{className:"title"},y("BlockedUsers")),i>0&&a.ZP.createElement("span",{className:"subtitle",dir:"auto"},y("Users",i)))),a.ZP.createElement(_e.Z,{icon:"lock",narrow:!0,onClick:()=>n(o?l.MT.TwoFaEnabled:l.MT.TwoFaDisabled)},a.ZP.createElement("div",{className:"multiline-menu-item"},a.ZP.createElement("span",{className:"title"},y("TwoStepVerification")),a.ZP.createElement("span",{className:"subtitle",dir:"auto"},y(o?"PasswordOn":"PasswordOff")))),a.ZP.createElement(_e.Z,{icon:"active-sessions",narrow:!0,onClick:()=>n(l.MT.PrivacyActiveSessions)},a.ZP.createElement("div",{className:"multiline-menu-item"},a.ZP.createElement("span",{className:"title"},y("SessionsTitle")),c>0&&a.ZP.createElement("span",{className:"subtitle",dir:"auto"},1===c?"1 session":`${c} sessions`)))),a.ZP.createElement("div",{className:"settings-item"},a.ZP.createElement("h4",{className:"settings-item-header mb-4",dir:y.isRtl?"rtl":void 0},y("PrivacyTitle")),a.ZP.createElement(_e.Z,{narrow:!0,className:"no-icon",onClick:()=>n(l.MT.PrivacyPhoneNumber)},a.ZP.createElement("div",{className:"multiline-menu-item"},a.ZP.createElement("span",{className:"title"},y("PrivacyPhoneTitle")),a.ZP.createElement("span",{className:"subtitle",dir:"auto"},S(u)))),a.ZP.createElement(_e.Z,{narrow:!0,className:"no-icon",onClick:()=>n(l.MT.PrivacyLastSeen)},a.ZP.createElement("div",{className:"multiline-menu-item"},a.ZP.createElement("span",{className:"title"},y("LastSeenTitle")),a.ZP.createElement("span",{className:"subtitle",dir:"auto"},S(h)))),a.ZP.createElement(_e.Z,{narrow:!0,className:"no-icon",onClick:()=>n(l.MT.PrivacyProfilePhoto)},a.ZP.createElement("div",{className:"multiline-menu-item"},a.ZP.createElement("span",{className:"title"},y("PrivacyProfilePhotoTitle")),a.ZP.createElement("span",{className:"subtitle",dir:"auto"},S(Z)))),a.ZP.createElement(_e.Z,{narrow:!0,className:"no-icon",onClick:()=>n(l.MT.PrivacyForwarding)},a.ZP.createElement("div",{className:"multiline-menu-item"},a.ZP.createElement("span",{className:"title"},y("PrivacyForwardsTitle")),a.ZP.createElement("span",{className:"subtitle",dir:"auto"},S(v)))),a.ZP.createElement(_e.Z,{narrow:!0,className:"no-icon",onClick:()=>n(l.MT.PrivacyGroupChats)},a.ZP.createElement("div",{className:"multiline-menu-item"},a.ZP.createElement("span",{className:"title"},y("WhoCanAddMe")),a.ZP.createElement("span",{className:"subtitle",dir:"auto"},S(p))))),m&&a.ZP.createElement("div",{className:"settings-item"},a.ZP.createElement("h4",{className:"settings-item-header",dir:y.isRtl?"rtl":void 0},y("lng_settings_sensitive_title")),a.ZP.createElement(ct.Z,{label:y("lng_settings_sensitive_disable_filtering"),subLabel:y("lng_settings_sensitive_about"),checked:Boolean(d),disabled:!m,onCheck:I})))}))),ba=(0,a.X$)((0,s.c$)((e=>({languages:e.settings.byKey.languages,language:e.settings.byKey.language})))((e=>{let{isActive:t,onScreenSelect:n,onReset:r,languages:o,language:i}=e;const{loadLanguages:c,setSettingOption:d}=(0,s.Sv)(),[m,u]=(0,a.eJ)(i),[h,Z,v]=(0,ee.Z)();(0,a.d4)((()=>{c()}),[c]);const g=(0,a.I4)((e=>{u(e),Z(),(0,Hn.m0)(e,(()=>{v(),d({language:e})}))}),[Z,v,d]),p=(0,a.Ye)((()=>o?function(e){const t=(window.navigator.language||"en").toLowerCase(),n=t.substr(0,2);return e.map((e=>{let{langCode:t,nativeName:n,name:a}=e;return{value:t,label:n,subLabel:a}})).sort((e=>!t||e.value!==t&&e.value!==n?0:-1))}(o):void 0),[o]);return(0,P.ZP)(t,r,n,l.MT.Language),a.ZP.createElement("div",{className:"settings-content settings-item settings-language custom-scroll"},p?a.ZP.createElement(gt.Z,{name:"keyboard-send-settings",options:p,selected:m,loadingOption:h?m:void 0,onChange:g}):a.ZP.createElement(De.Z,null))})));function Ia(e){switch(e){case l.MT.PrivacyPhoneNumber:case l.MT.PrivacyPhoneNumberAllowedContacts:case l.MT.PrivacyPhoneNumberDeniedContacts:return"phoneNumber";case l.MT.PrivacyLastSeen:case l.MT.PrivacyLastSeenAllowedContacts:case l.MT.PrivacyLastSeenDeniedContacts:return"lastSeen";case l.MT.PrivacyProfilePhoto:case l.MT.PrivacyProfilePhotoAllowedContacts:case l.MT.PrivacyProfilePhotoDeniedContacts:return"profilePhoto";case l.MT.PrivacyForwarding:case l.MT.PrivacyForwardingAllowedContacts:case l.MT.PrivacyForwardingDeniedContacts:return"forwards";case l.MT.PrivacyGroupChats:case l.MT.PrivacyGroupChatsAllowedContacts:case l.MT.PrivacyGroupChatsDeniedContacts:return"chatInvite"}}const ya=(0,a.X$)((0,s.c$)(((e,t)=>{let n,{screen:a}=t;const{chats:{byId:s},settings:{privacy:r}}=e;switch(a){case l.MT.PrivacyPhoneNumber:n=r.phoneNumber;break;case l.MT.PrivacyLastSeen:n=r.lastSeen;break;case l.MT.PrivacyProfilePhoto:n=r.profilePhoto;break;case l.MT.PrivacyForwarding:n=r.forwards;break;case l.MT.PrivacyGroupChats:n=r.chatInvite}return n?{...n,chatsById:s}:{}}))((e=>{let{screen:t,isActive:n,onScreenSelect:r,onReset:o,visibility:i,allowUserIds:c,allowChatIds:d,blockUserIds:m,blockChatIds:u,chatsById:h}=e;const{setPrivacyVisibility:Z}=(0,s.Sv)(),v=(0,g.Z)(),p=(0,a.Ye)((()=>{switch(t){case l.MT.PrivacyProfilePhoto:case l.MT.PrivacyGroupChats:return[{value:"everybody",label:v("P2PEverybody")},{value:"contacts",label:v("P2PContacts")}];default:return[{value:"everybody",label:v("P2PEverybody")},{value:"contacts",label:v("P2PContacts")},{value:"nobody",label:v("P2PNobody")}]}}),[v,t]),E={shouldShowDenied:"nobody"!==i,shouldShowAllowed:"everybody"!==i},C=Ia(t),f=(0,a.Ye)((()=>{switch(t){case l.MT.PrivacyPhoneNumber:return v("PrivacyPhoneTitle");case l.MT.PrivacyLastSeen:return v("LastSeenTitle");case l.MT.PrivacyProfilePhoto:return v("PrivacyProfilePhotoTitle");case l.MT.PrivacyForwarding:return v("PrivacyForwardsTitle");case l.MT.PrivacyGroupChats:return v("WhoCanAddMe");default:return}}),[v,t]);(0,P.ZP)(n,o,r,t);const b=(0,a.Ye)((()=>{if(t===l.MT.PrivacyLastSeen)return v("CustomHelp")}),[v,t]),I=(()=>{switch(t){case l.MT.PrivacyPhoneNumber:return l.MT.PrivacyPhoneNumberAllowedContacts;case l.MT.PrivacyLastSeen:return l.MT.PrivacyLastSeenAllowedContacts;case l.MT.PrivacyProfilePhoto:return l.MT.PrivacyProfilePhotoAllowedContacts;case l.MT.PrivacyForwarding:return l.MT.PrivacyForwardingAllowedContacts;default:return l.MT.PrivacyGroupChatsAllowedContacts}})(),y=(()=>{switch(t){case l.MT.PrivacyPhoneNumber:return l.MT.PrivacyPhoneNumberDeniedContacts;case l.MT.PrivacyLastSeen:return l.MT.PrivacyLastSeenDeniedContacts;case l.MT.PrivacyProfilePhoto:return l.MT.PrivacyProfilePhotoDeniedContacts;case l.MT.PrivacyForwarding:return l.MT.PrivacyForwardingDeniedContacts;default:return l.MT.PrivacyGroupChatsDeniedContacts}})(),S=(0,a.Ye)((()=>c&&d&&h?d.reduce(((e,t)=>e+(h[t]?h[t].membersCount:0)),c.length):0),[d,c,h]),N=(0,a.Ye)((()=>m&&u&&h?u.reduce(((e,t)=>e+(h[t]?h[t].membersCount:0)),m.length):0),[u,m,h]),k=(0,a.I4)((e=>{Z({privacyKey:C,visibility:e})}),[C,Z]);return a.ZP.createElement("div",{className:"settings-content custom-scroll"},a.ZP.createElement("div",{className:"settings-item"},a.ZP.createElement("h4",{className:"settings-item-header",dir:v.isRtl?"rtl":void 0},f),a.ZP.createElement(gt.Z,{name:`visibility-${C}`,options:p,onChange:k,selected:i}),b&&a.ZP.createElement("p",{className:"settings-item-description-larger",dir:v.isRtl?"rtl":void 0},b)),a.ZP.createElement("div",{className:"settings-item"},a.ZP.createElement("h4",{className:"settings-item-header mb-4",dir:v.isRtl?"rtl":void 0},v("PrivacyExceptions")),E.shouldShowAllowed&&a.ZP.createElement(_e.Z,{narrow:!0,icon:"add-user",onClick:()=>{r(I)}},a.ZP.createElement("div",{className:"multiline-menu-item full-size"},S>0&&a.ZP.createElement("span",{className:"date",dir:"auto"},"+",S),a.ZP.createElement("span",{className:"title"},v("AlwaysShareWith")),a.ZP.createElement("span",{className:"subtitle"},v("EditAdminAddUsers")))),E.shouldShowDenied&&a.ZP.createElement(_e.Z,{narrow:!0,icon:"delete-user",onClick:()=>{r(y)}},a.ZP.createElement("div",{className:"multiline-menu-item full-size"},N>0&&a.ZP.createElement("span",{className:"date",dir:"auto"},"−",N),a.ZP.createElement("span",{className:"title"},v("NeverShareWith")),a.ZP.createElement("span",{className:"subtitle"},v("EditAdminAddUsers"))))))})));function Sa(e){return[e.region,e.country].filter(Boolean).join(", ")}function Na(e){return`${e.deviceModel}${e.deviceModel?", ":""} ${e.platform} ${e.systemVersion}`}const ka=(0,a.X$)((0,s.c$)((e=>({activeSessions:e.activeSessions})))((e=>{let{isActive:t,onScreenSelect:n,onReset:r,activeSessions:o}=e;const{loadAuthorizations:i,terminateAuthorization:c,terminateAllAuthorizations:d}=(0,s.Sv)(),[m,u,h]=(0,ee.Z)();(0,a.d4)((()=>{i()}),[i]);const Z=(0,a.I4)((e=>{c({hash:e})}),[c]),v=(0,a.I4)((()=>{h(),d()}),[h,d]),p=(0,a.Ye)((()=>o.find((e=>e.isCurrent))),[o]),E=(0,a.Ye)((()=>o.filter((e=>!e.isCurrent))),[o]),C=(0,g.Z)();return(0,P.ZP)(t,r,n,l.MT.PrivacyActiveSessions),a.ZP.createElement("div",{className:"settings-content custom-scroll"},p&&(b=p,a.ZP.createElement("div",{className:"settings-item"},a.ZP.createElement("h4",{className:"settings-item-header mb-4",dir:C.isRtl?"rtl":void 0},C("AuthSessions.CurrentSession")),a.ZP.createElement(_e.Z,{narrow:!0,inactive:!0,className:"no-icon"},a.ZP.createElement("div",{className:"multiline-menu-item",dir:"auto"},a.ZP.createElement("span",{className:"title",dir:"auto"},b.appName),a.ZP.createElement("span",{className:"subtitle black tight"},Na(b)),a.ZP.createElement("span",{className:"subtitle"},b.ip," - ",Sa(b)))),a.ZP.createElement(_e.Z,{className:"destructive mb-0 no-icon",icon:"stop",ripple:!0,narrow:!0,onClick:u},C("TerminateAllSessions")))),E&&(f=E,a.ZP.createElement("div",{className:"settings-item"},a.ZP.createElement("h4",{className:"settings-item-header mb-4",dir:C.isRtl?"rtl":void 0},C("OtherSessions")),f.map((function(e){return a.ZP.createElement(_e.Z,{key:e.hash,ripple:!0,narrow:!0,contextActions:[{title:"Terminate",icon:"stop",handler:()=>{Z(e.hash)}}],className:"no-icon"},a.ZP.createElement("div",{className:"multiline-menu-item full-size",dir:"auto"},a.ZP.createElement("span",{className:"date"},(0,te.VX)(C,1e3*e.dateActive)),a.ZP.createElement("span",{className:"title"},e.appName),a.ZP.createElement("span",{className:"subtitle black tight"},Na(e)),a.ZP.createElement("span",{className:"subtitle"},e.ip," - ",Sa(e))))})))),E&&a.ZP.createElement(Qe.Z,{isOpen:m,onClose:h,text:"Are you sure you want to terminate all other sessions?",confirmLabel:"Terminate All Other Sessions",confirmHandler:v,confirmIsDestructive:!0}));var f,b}))),wa=(0,a.X$)((0,s.c$)((e=>{const{users:{byId:t},blocked:{ids:n},contactList:a,currentUserId:s}=e;return{usersById:t,blockedIds:n,contactIds:null==a?void 0:a.userIds,localContactIds:e.userSearch.localUserIds,currentUserId:s}}))((e=>{let{usersById:t,blockedIds:n,contactIds:r,localContactIds:l,currentUserId:o,isOpen:i,onClose:c}=e;const{loadContactList:d,setUserSearchQuery:m,blockContact:u}=(0,s.Sv)(),h=(0,g.Z)(),[Z,v]=(0,a.eJ)(""),P=(0,a.sO)(null);(0,a.d4)((()=>{m({query:Z})}),[Z,m]);const p=(0,a.Ye)((()=>{const e=(0,be.Tw)([...r||[],...l||[]].filter((e=>e!==o&&!n.includes(e))));return(0,f.kK)(e,t,Z).sort(((e,n)=>{const a=(0,f.Js)(t[e])||"",s=(0,f.Js)(t[n])||"";return a.localeCompare(s)}))}),[n,r,o,Z,l,t]),E=(0,a.I4)((e=>{const{id:n,accessHash:a}=t[e]||{};n&&a&&(u({contactId:n,accessHash:a}),c())}),[u,c,t]);return a.ZP.createElement(ze,{isOpen:i,chatOrUserIds:p,filterRef:P,filterPlaceholder:h("BlockedUsers.BlockUser"),filter:Z,onFilterChange:v,loadMore:d,onSelectChatOrUser:E,onClose:c})}))),Ma=(0,a.X$)((0,s.c$)((e=>{const{chats:{byId:t},users:{byId:n},blocked:{ids:a},countryList:{phoneCodes:s}}=e;return{chatsByIds:t,usersByIds:n,blockedIds:a,phoneCodeList:s}}))((e=>{let{isActive:t,onScreenSelect:n,onReset:r,chatsByIds:i,usersByIds:c,blockedIds:d,phoneCodeList:m}=e;const{unblockContact:u}=(0,s.Sv)(),h=(0,g.Z)(),[Z,v,p]=(0,ee.Z)(),E=(0,a.I4)((e=>{u({contactId:e})}),[u]);return(0,P.ZP)(t,r,n,l.MT.PrivacyBlockedUsers),a.ZP.createElement("div",{className:"settings-fab-wrapper"},a.ZP.createElement("div",{className:"settings-content infinite-scroll"},a.ZP.createElement("div",{className:"settings-item"},a.ZP.createElement("p",{className:"settings-item-description-larger mt-0 mb-2",dir:h.isRtl?"rtl":void 0},h("BlockedUsersInfo"))),a.ZP.createElement("div",{className:"chat-list custom-scroll"},null!=d&&d.length?a.ZP.createElement("div",{className:"scroll-container"},d.map(((e,t)=>function(e,t,n){const s=(0,f.YC)(e),r=s?c[e]:void 0,l=s?void 0:i[e],d=(0,H.Z)("Chat chat-item-clickable blocked-list-item small-icon",s?"private":"group");return a.ZP.createElement(_e.Z,{key:e,className:d,ripple:!0,narrow:!0,contextActions:[{title:"Unblock",icon:"unlock",handler:()=>{E(e)}}],style:`top: ${(0+t)*o.rS}px;`},a.ZP.createElement(we.Z,{size:"medium",user:r,chat:l}),a.ZP.createElement("div",{className:"contact-info",dir:"auto"},a.ZP.createElement("h3",{dir:"auto"},(0,ke.Z)((s?(0,f.Js)(r):(0,f.U)(h,l))||"")),(null==r?void 0:r.phoneNumber)&&a.ZP.createElement("div",{className:"contact-phone",dir:"auto"},(0,it.WZ)(m,r.phoneNumber)),r&&!r.phoneNumber&&r.username&&a.ZP.createElement("div",{className:"contact-username",dir:"auto"},"@",r.username)))}(e,t)))):d&&!d.length?a.ZP.createElement("div",{className:"no-results",dir:"auto"},h("NoBlocked")):a.ZP.createElement(De.Z,{key:"loading"}))),a.ZP.createElement(Sn.Z,{isShown:!0,onClick:v,ariaLabel:h("BlockContact")},a.ZP.createElement("i",{className:"icon-add"})),a.ZP.createElement(wa,{isOpen:Z,onClose:p}))})));var Ta=n(7854);const Ra=(0,a.X$)((0,s.c$)((e=>({animatedEmoji:(0,b.zB)(e,"🔐")})))((e=>{let{isActive:t,onReset:n,animatedEmoji:s,onScreenSelect:r}=e;const o=(0,g.Z)();return(0,P.ZP)(t,n,r,l.MT.TwoFaEnabled),a.ZP.createElement("div",{className:"settings-content two-fa custom-scroll"},a.ZP.createElement("div",{className:"settings-content-header"},a.ZP.createElement(Ta.Z,{sticker:s,size:"large"}),a.ZP.createElement("p",{className:"settings-item-description mb-3",dir:"auto"},(0,ke.Z)(o("EnabledPasswordText"),["br"]))),a.ZP.createElement("div",{className:"settings-item pt-0 no-border"},a.ZP.createElement(_e.Z,{icon:"edit",onClick:()=>r(l.MT.TwoFaChangePasswordCurrent)},o("ChangePassword")),a.ZP.createElement(_e.Z,{icon:"password-off",onClick:()=>r(l.MT.TwoFaTurnOff)},o("TurnPasswordOff")),a.ZP.createElement(_e.Z,{icon:"email",onClick:()=>r(l.MT.TwoFaRecoveryEmailCurrentPassword)},o("SetRecoveryEmail"))))})));var Aa=n(3490),La=n(9364);const Fa=(0,a.X$)((e=>{let{screen:t,isActive:n,onScreenSelect:s,onReset:r,error:l,isLoading:o,expectedPassword:i,placeholder:c="Current Password",hint:d,submitLabel:m,clearError:u,onSubmit:h}=e;const[Z,v]=(0,a.eJ)(""),[p,E]=(0,a.eJ)(!1),C=(0,a.I4)((e=>{i&&e!==i?v("Passwords Should Be Equal"):h(e)}),[h,i]),f=(0,a.I4)((()=>{u&&u(),v("")}),[u]),b=(0,g.Z)();return(0,P.ZP)(n,r,s,t),a.ZP.createElement("div",{className:"settings-content two-fa custom-scroll"},a.ZP.createElement("div",{className:"settings-content-header"},a.ZP.createElement(Aa.Z,{isBig:!0,isPasswordVisible:p})),a.ZP.createElement("div",{className:"settings-item pt-0 no-border"},a.ZP.createElement(La.Z,{error:Z||l,hint:d,placeholder:c,submitLabel:m||b("Next"),clearError:f,isLoading:o,isPasswordVisible:p,onChangePasswordVisibility:E,onSubmit:C})))})),Ba=(0,a.X$)((0,s.c$)((e=>({animatedEmoji:(0,b.zB)(e,"🔐")})))((e=>{let{isActive:t,onScreenSelect:n,onReset:s,animatedEmoji:r,onStart:o}=e;const i=(0,g.Z)();return(0,P.ZP)(t,s,n,l.MT.TwoFaDisabled),a.ZP.createElement("div",{className:"settings-content two-fa custom-scroll"},a.ZP.createElement("div",{className:"settings-content-header"},a.ZP.createElement(Ta.Z,{sticker:r,size:"large"}),a.ZP.createElement("p",{className:"settings-item-description mb-3",dir:"auto"},i("SetAdditionalPasswordInfo"))),a.ZP.createElement("div",{className:"settings-item pt-0 no-border"},a.ZP.createElement(B.Z,{onClick:o},i("EditAdminTransferSetPassword"))))}))),xa=i.wB?550:400,$a=(0,a.X$)((0,s.c$)(((e,t)=>{let{icon:n}=t;return{animatedEmoji:(0,b.zB)(e,"email"===n?"💌":"💡")}}))((e=>{let{animatedEmoji:t,type:n="text",isLoading:s,error:r,placeholder:l,shouldConfirm:o,clearError:c,onSubmit:d,isActive:m,onScreenSelect:u,onReset:h,screen:Z}=e;const v=(0,a.sO)(null),[p,E]=(0,a.eJ)(""),[C,f,b]=(0,ee.Z)(!1);(0,a.d4)((()=>{i.$b||setTimeout((()=>{v.current.focus()}),xa)}),[]);const I=(0,a.I4)((e=>{r&&c&&c(),E(e.target.value)}),[c,r]),y=(0,a.I4)((()=>{d()}),[d]),S=(0,a.I4)((()=>{b(),d()}),[d,b]),N=(0,g.Z)();return(0,P.ZP)(m,h,u,Z),a.ZP.createElement("div",{className:"settings-content two-fa custom-scroll"},a.ZP.createElement("div",{className:"settings-content-header"},a.ZP.createElement(Ta.Z,{sticker:t,size:"large"})),a.ZP.createElement("div",{className:"settings-item pt-0 no-border"},a.ZP.createElement("form",{action:"",onSubmit:e=>{e.preventDefault(),v.current&&d(p)}},a.ZP.createElement(Ue.Z,{ref:v,value:p,inputMode:n,label:l,error:r,onChange:I}),p?a.ZP.createElement(B.Z,{type:"submit",isLoading:s,ripple:!0},N("Continue")):a.ZP.createElement(B.Z,{isText:!0,isLoading:s,ripple:!0,onClick:o?f:y},N("YourEmailSkip"))),o&&a.ZP.createElement(Oe.Z,{className:"narrow",isOpen:C,title:N("YourEmailSkipWarning"),onClose:b},(0,ke.Z)(N("YourEmailSkipWarningText"),["br","simple_markdown"]),a.ZP.createElement("div",{className:"dialog-buttons"},a.ZP.createElement(B.Z,{color:"danger",ripple:!0,isText:!0,className:"confirm-dialog-button",onClick:S},N("YourEmailSkip")),a.ZP.createElement(B.Z,{color:"primary",ripple:!0,isText:!0,className:"confirm-dialog-button",onClick:b},N("Cancel"))))))}))),Da=(0,a.X$)((0,s.c$)((e=>({animatedEmoji:(0,b.zB)(e,"🥳")})))((e=>{let{isActive:t,onReset:n,animatedEmoji:s,onScreenSelect:r}=e;const o=(0,g.Z)(),i=(0,a.I4)((()=>{r(l.MT.Privacy)}),[r]);return(0,P.ZP)(t,n,r,l.MT.TwoFaCongratulations),a.ZP.createElement("div",{className:"settings-content two-fa custom-scroll"},a.ZP.createElement("div",{className:"settings-content-header"},a.ZP.createElement(Ta.Z,{sticker:s,size:"large"}),a.ZP.createElement("p",{className:"settings-item-description mb-3",dir:"auto"},o("TwoStepVerificationPasswordSetInfo"))),a.ZP.createElement("div",{className:"settings-item pt-0 no-border"},a.ZP.createElement(B.Z,{onClick:i},o("TwoStepVerificationPasswordReturnSettings"))))}))),Oa=i.wB?550:400,Ua=(0,a.X$)((0,s.c$)((e=>({animatedEmoji:(0,b.zB)(e,"💌"),codeLength:e.twoFaSettings.waitingEmailCodeLength})))((e=>{let{animatedEmoji:t,codeLength:n,isLoading:s,error:r,clearError:l,onSubmit:o,isActive:c,onScreenSelect:d,onReset:m,screen:u}=e;const h=(0,a.sO)(null),[Z,v]=(0,a.eJ)("");(0,a.d4)((()=>{i.$b||setTimeout((()=>{h.current.focus()}),Oa)}),[]);const p=(0,g.Z)();(0,P.ZP)(c,m,d,u);const E=(0,a.I4)((e=>{r&&l&&l();const t=e.target.value.slice(0,n);t.length===n&&o(t),v(t),e.target.value=t}),[l,n,r,o]);return a.ZP.createElement("div",{className:"settings-content two-fa custom-scroll"},a.ZP.createElement("div",{className:"settings-content-header"},a.ZP.createElement(Ta.Z,{sticker:t,size:"large"})),a.ZP.createElement("div",{className:"settings-item pt-0 no-border"},a.ZP.createElement(Ue.Z,{value:Z,ref:h,inputMode:"decimal",label:p("YourEmailCode"),error:r,onChange:E}),s&&a.ZP.createElement(De.Z,null)))}))),Ga=(0,a.X$)((0,s.c$)((e=>({...e.twoFaSettings})))((e=>{let{currentScreen:t,shownScreen:n,state:r,hint:o,isLoading:i,error:c,waitingEmailCodeLength:d,dispatch:m,isActive:u,onScreenSelect:h,onReset:Z}=e;const{updatePassword:v,checkPassword:P,clearTwoFaError:p,updateRecoveryEmail:E,provideTwoFaEmailCode:C,clearPassword:f}=(0,s.Sv)();(0,a.d4)((()=>{d&&(t===l.MT.TwoFaNewPasswordEmail?h(l.MT.TwoFaNewPasswordEmailCode):t===l.MT.TwoFaRecoveryEmail&&h(l.MT.TwoFaRecoveryEmailCode))}),[t,h,d]);const b=(0,a.I4)((()=>{m({type:"reset"}),h(l.MT.TwoFaNewPassword)}),[m,h]),I=(0,a.I4)((e=>{m({type:"setPassword",payload:e}),h(l.MT.TwoFaNewPasswordConfirm)}),[m,h]),y=(0,a.I4)((()=>{h(l.MT.TwoFaNewPasswordHint)}),[h]),S=(0,a.I4)((e=>{m({type:"setHint",payload:e}),h(l.MT.TwoFaNewPasswordEmail)}),[m,h]),N=(0,a.I4)((e=>{m({type:"setEmail",payload:e}),v({...r,email:e,onSuccess:()=>{h(l.MT.TwoFaCongratulations)}})}),[m,h,r,v]),k=(0,a.I4)((e=>{m({type:"setCurrentPassword",payload:e}),P({currentPassword:e,onSuccess:()=>{h(l.MT.TwoFaChangePasswordNew)}})}),[P,m,h]),w=(0,a.I4)((e=>{m({type:"setPassword",payload:e}),h(l.MT.TwoFaChangePasswordConfirm)}),[m,h]),M=(0,a.I4)((()=>{h(l.MT.TwoFaChangePasswordHint)}),[h]),T=(0,a.I4)((e=>{m({type:"setHint",payload:e}),v({...r,hint:e,onSuccess:()=>{h(l.MT.TwoFaCongratulations)}})}),[m,h,r,v]),R=(0,a.I4)((e=>{f({currentPassword:e,onSuccess:()=>{h(l.MT.Privacy)}})}),[f,h]),A=(0,a.I4)((e=>{m({type:"setCurrentPassword",payload:e}),P({currentPassword:e,onSuccess:()=>{h(l.MT.TwoFaRecoveryEmail)}})}),[P,m,h]),L=(0,a.I4)((e=>{m({type:"setEmail",payload:e}),E({...r,email:e,onSuccess:()=>{h(l.MT.TwoFaCongratulations)}})}),[m,h,r,E]),F=(0,a.I4)((e=>{C({code:e})}),[C]),B=(0,g.Z)();switch(t){case l.MT.TwoFaDisabled:return a.ZP.createElement(Ba,{onStart:b,onScreenSelect:h,isActive:u||[l.MT.TwoFaNewPassword,l.MT.TwoFaNewPasswordConfirm,l.MT.TwoFaNewPasswordHint,l.MT.TwoFaNewPasswordEmail,l.MT.TwoFaNewPasswordEmailCode,l.MT.TwoFaCongratulations].includes(n),onReset:Z});case l.MT.TwoFaNewPassword:return a.ZP.createElement(Fa,{screen:t,placeholder:B("PleaseEnterPassword"),submitLabel:B("Continue"),onSubmit:I,onScreenSelect:h,isActive:u||[l.MT.TwoFaNewPasswordConfirm,l.MT.TwoFaNewPasswordHint,l.MT.TwoFaNewPasswordEmail,l.MT.TwoFaNewPasswordEmailCode,l.MT.TwoFaCongratulations].includes(n),onReset:Z});case l.MT.TwoFaNewPasswordConfirm:return a.ZP.createElement(Fa,{screen:t,expectedPassword:r.password,placeholder:B("PleaseReEnterPassword"),submitLabel:B("Continue"),onSubmit:y,onScreenSelect:h,isActive:u||[l.MT.TwoFaNewPasswordHint,l.MT.TwoFaNewPasswordEmail,l.MT.TwoFaNewPasswordEmailCode,l.MT.TwoFaCongratulations].includes(n),onReset:Z});case l.MT.TwoFaNewPasswordHint:return a.ZP.createElement($a,{icon:"hint",placeholder:B("PasswordHintPlaceholder"),onSubmit:S,screen:t,onScreenSelect:h,isActive:u||[l.MT.TwoFaNewPasswordEmail,l.MT.TwoFaNewPasswordEmailCode,l.MT.TwoFaCongratulations].includes(n),onReset:Z});case l.MT.TwoFaNewPasswordEmail:return a.ZP.createElement($a,{icon:"email",type:"email",isLoading:i,error:c,clearError:p,placeholder:B("RecoveryEmailTitle"),shouldConfirm:!0,onSubmit:N,screen:t,onScreenSelect:h,isActive:u||[l.MT.TwoFaNewPasswordEmailCode,l.MT.TwoFaCongratulations].includes(n),onReset:Z});case l.MT.TwoFaNewPasswordEmailCode:return a.ZP.createElement(Ua,{isLoading:i,error:c,clearError:p,onSubmit:F,screen:t,onScreenSelect:h,isActive:u||n===l.MT.TwoFaCongratulations,onReset:Z});case l.MT.TwoFaCongratulations:return a.ZP.createElement(Da,{onScreenSelect:h,isActive:u,onReset:Z});case l.MT.TwoFaEnabled:return a.ZP.createElement(Ra,{onScreenSelect:h,isActive:u||[l.MT.TwoFaChangePasswordCurrent,l.MT.TwoFaChangePasswordNew,l.MT.TwoFaChangePasswordConfirm,l.MT.TwoFaChangePasswordHint,l.MT.TwoFaTurnOff,l.MT.TwoFaRecoveryEmailCurrentPassword,l.MT.TwoFaRecoveryEmail,l.MT.TwoFaRecoveryEmailCode,l.MT.TwoFaCongratulations].includes(n),onReset:Z});case l.MT.TwoFaChangePasswordCurrent:return a.ZP.createElement(Fa,{screen:t,isLoading:i,error:c,clearError:p,hint:o,onSubmit:k,onScreenSelect:h,isActive:u||[l.MT.TwoFaChangePasswordNew,l.MT.TwoFaChangePasswordConfirm,l.MT.TwoFaChangePasswordHint,l.MT.TwoFaCongratulations].includes(n),onReset:Z});case l.MT.TwoFaChangePasswordNew:return a.ZP.createElement(Fa,{screen:t,placeholder:B("PleaseEnterNewFirstPassword"),onSubmit:w,onScreenSelect:h,isActive:u||[l.MT.TwoFaChangePasswordConfirm,l.MT.TwoFaChangePasswordHint,l.MT.TwoFaCongratulations].includes(n),onReset:Z});case l.MT.TwoFaChangePasswordConfirm:return a.ZP.createElement(Fa,{screen:t,expectedPassword:r.password,placeholder:B("PleaseReEnterPassword"),onSubmit:M,onScreenSelect:h,isActive:u||[l.MT.TwoFaChangePasswordHint,l.MT.TwoFaCongratulations].includes(n),onReset:Z});case l.MT.TwoFaChangePasswordHint:return a.ZP.createElement($a,{isLoading:i,error:c,clearError:p,icon:"hint",placeholder:B("PasswordHintPlaceholder"),onSubmit:T,onScreenSelect:h,isActive:u||n===l.MT.TwoFaCongratulations,onReset:Z,screen:t});case l.MT.TwoFaTurnOff:return a.ZP.createElement(Fa,{isLoading:i,error:c,clearError:p,hint:o,onSubmit:R,onScreenSelect:h,isActive:u,onReset:Z,screen:t});case l.MT.TwoFaRecoveryEmailCurrentPassword:return a.ZP.createElement(Fa,{screen:t,isLoading:i,error:c,clearError:p,hint:o,onSubmit:A,onScreenSelect:h,isActive:u||[l.MT.TwoFaRecoveryEmail,l.MT.TwoFaRecoveryEmailCode,l.MT.TwoFaCongratulations].includes(n),onReset:Z});case l.MT.TwoFaRecoveryEmail:return a.ZP.createElement($a,{screen:t,icon:"email",type:"email",placeholder:B("RecoveryEmailTitle"),onSubmit:L,onScreenSelect:h,isActive:u||[l.MT.TwoFaRecoveryEmailCode,l.MT.TwoFaCongratulations].includes(n),onReset:Z});case l.MT.TwoFaRecoveryEmailCode:return a.ZP.createElement(Ua,{screen:t,isLoading:i,error:c,clearError:p,onSubmit:F,onScreenSelect:h,isActive:u||n===l.MT.TwoFaCongratulations,onReset:Z});default:return}})));var _a=n(1820);function Ja(e,t){const{privacy:n}=e.settings;switch(t){case l.MT.PrivacyPhoneNumberAllowedContacts:case l.MT.PrivacyPhoneNumberDeniedContacts:return n.phoneNumber;case l.MT.PrivacyLastSeenAllowedContacts:case l.MT.PrivacyLastSeenDeniedContacts:return n.lastSeen;case l.MT.PrivacyProfilePhotoAllowedContacts:case l.MT.PrivacyProfilePhotoDeniedContacts:return n.profilePhoto;case l.MT.PrivacyForwardingAllowedContacts:case l.MT.PrivacyForwardingDeniedContacts:return n.forwards;case l.MT.PrivacyGroupChatsDeniedContacts:case l.MT.PrivacyGroupChatsAllowedContacts:return n.chatInvite}}const Xa=(0,a.X$)((0,s.c$)(((e,t)=>{let{screen:n}=t;return{currentUserId:e.currentUserId,settings:Ja(e,n)}}))((e=>{let{isAllowList:t,screen:n,isActive:r,onScreenSelect:i,onReset:c,currentUserId:d,settings:m}=e;const{setPrivacySettings:u}=(0,s.Sv)(),h=(0,g.Z)(),Z=(0,a.Ye)((()=>m?t?[...m.allowUserIds,...m.allowChatIds]:[...m.blockUserIds,...m.blockChatIds]:[]),[t,m]),[v,p]=(0,a.eJ)(""),[E,C]=(0,a.eJ)(!1),[b,I]=(0,a.eJ)(Z),y=(0,xn.d7)(o.Nf),S=(0,xn.d7)(o.WS),N=(0,a.Ye)((()=>{const e=(0,s.Rd)().chats.byId,t=(0,be.Tw)([...y||[],...S||[]]).filter((t=>{const n=e[t];return n&&((0,f.YC)(n.id)&&n.id!==d||(0,f.Bf)(n))}));return(0,be.Tw)([...Z,...(0,f.$l)(h,t,e,v)])}),[y,S,Z,h,v,d]),k=(0,a.I4)((e=>{I(e),C(!0)}),[]),w=(0,a.I4)((()=>{u({privacyKey:Ia(n),isAllowList:Boolean(t),contactsIds:b}),i(l.MT.Privacy)}),[t,b,i,n,u]);return(0,P.ZP)(r,c,i,n),a.ZP.createElement("div",{className:"NewChat-inner step-1"},a.ZP.createElement(_a.Z,{itemIds:N||[],selectedIds:b,filterValue:v,filterPlaceholder:h(t?"AlwaysShareWithPlaceholder":"NeverShareWithPlaceholder"),searchInputId:"new-group-picker-search",onSelectedIdsChange:k,onFilterChange:p}),a.ZP.createElement(Sn.Z,{isShown:E,onClick:w,ariaLabel:h(t?"AlwaysShareWithTitle":"NeverShareWithTitle")},a.ZP.createElement("i",{className:"icon-arrow-right"})))}))),za=(0,a.X$)((0,s.c$)((e=>{const{availableReactions:t,appConfig:n}=e;return{availableReactions:t,selectedReaction:null==n?void 0:n.defaultReaction}}))((e=>{let{isActive:t,onReset:n,onScreenSelect:r,availableReactions:o,selectedReaction:i}=e;const{setDefaultReaction:c}=(0,s.Sv)();(0,P.ZP)(t,n,r,l.MT.General);const d=(null==o?void 0:o.filter((e=>!e.isInactive)).map((e=>({label:a.ZP.createElement(a.ZP.Fragment,null,a.ZP.createElement(bt.Z,{reaction:e.reaction}),e.title),value:e.reaction}))))||[],m=(0,a.I4)((e=>{c({reaction:e})}),[c]);return a.ZP.createElement("div",{className:"settings-content settings-item custom-scroll settings-quick-reaction"},a.ZP.createElement(gt.Z,{name:"quick-reaction-settings",options:d,selected:i,onChange:m}))}))),Ya=Object.keys(l.MT).length/2,Ha=[l.MT.TwoFaDisabled,l.MT.TwoFaNewPassword,l.MT.TwoFaNewPasswordConfirm,l.MT.TwoFaNewPasswordHint,l.MT.TwoFaNewPasswordEmail,l.MT.TwoFaNewPasswordEmailCode,l.MT.TwoFaCongratulations,l.MT.TwoFaEnabled,l.MT.TwoFaChangePasswordCurrent,l.MT.TwoFaChangePasswordNew,l.MT.TwoFaChangePasswordConfirm,l.MT.TwoFaChangePasswordHint,l.MT.TwoFaTurnOff,l.MT.TwoFaRecoveryEmailCurrentPassword,l.MT.TwoFaRecoveryEmail,l.MT.TwoFaRecoveryEmailCode],Va=[l.MT.Folders,l.MT.FoldersCreateFolder,l.MT.FoldersEditFolder,l.MT.FoldersEditFolderFromChatList,l.MT.FoldersIncludedChats,l.MT.FoldersIncludedChatsFromChatList,l.MT.FoldersExcludedChats,l.MT.FoldersExcludedChatsFromChatList],ja=[l.MT.PrivacyBlockedUsers,l.MT.PrivacyActiveSessions],qa=[l.MT.PrivacyPhoneNumberAllowedContacts,l.MT.PrivacyPhoneNumberDeniedContacts],Ka=[l.MT.PrivacyLastSeenAllowedContacts,l.MT.PrivacyLastSeenDeniedContacts],Wa=[l.MT.PrivacyProfilePhotoAllowedContacts,l.MT.PrivacyProfilePhotoDeniedContacts],Qa=[l.MT.PrivacyForwardingAllowedContacts,l.MT.PrivacyForwardingDeniedContacts],es=[l.MT.PrivacyGroupChatsAllowedContacts,l.MT.PrivacyGroupChatsDeniedContacts],ts=(0,a.X$)((e=>{let{isActive:t,currentScreen:n,foldersState:s,foldersDispatch:r,onScreenSelect:o,onReset:c,shouldSkipTransition:d}=e;const[m,u]=(0,gn.Z)(En,pn),h=(0,a.I4)((()=>{n!==l.MT.FoldersCreateFolder&&n!==l.MT.FoldersEditFolder&&n!==l.MT.FoldersEditFolderFromChatList||setTimeout((()=>{r({type:"reset"})}),200),n!==l.MT.FoldersIncludedChats&&n!==l.MT.FoldersExcludedChats?c():"create"===s.mode?o(l.MT.FoldersCreateFolder):o(l.MT.FoldersEditFolder)}),[s.mode,r,n,c,o]),Z=(0,a.I4)((()=>{r({type:"saveFilters"}),h()}),[r,h]);function v(e,i,c){return a.ZP.createElement(a.ZP.Fragment,null,a.ZP.createElement(Cn,{currentScreen:n,onReset:h,onSaveFilter:Z,onScreenSelect:o,editedFolderId:s.folderId}),function(e,i){const c={[l.MT.PrivacyPhoneNumber]:qa.includes(i),[l.MT.PrivacyLastSeen]:Ka.includes(i),[l.MT.PrivacyProfilePhoto]:Wa.includes(i),[l.MT.PrivacyForwarding]:Qa.includes(i),[l.MT.PrivacyGroupChats]:es.includes(i)},d=Ha.includes(i),Z=Va.includes(i),v=ja.includes(i)||d||Object.keys(c).includes(i.toString())||Object.values(c).find((e=>!0===e));switch(n){case l.MT.Main:return a.ZP.createElement(In,{onScreenSelect:o,isActive:t,onReset:h});case l.MT.EditProfile:return a.ZP.createElement(Fn,{onScreenSelect:o,isActive:t&&e,onReset:h});case l.MT.General:return a.ZP.createElement(na,{onScreenSelect:o,isActive:e||i===l.MT.GeneralChatBackgroundColor||i===l.MT.GeneralChatBackground||i===l.MT.QuickReaction||v||Z,onReset:h});case l.MT.QuickReaction:return a.ZP.createElement(za,{onScreenSelect:o,isActive:e,onReset:h});case l.MT.Notifications:return a.ZP.createElement(Ca,{onScreenSelect:o,isActive:e,onReset:h});case l.MT.DataStorage:return a.ZP.createElement(Bn,{onScreenSelect:o,isActive:e,onReset:h});case l.MT.Privacy:return a.ZP.createElement(fa,{onScreenSelect:o,isActive:e||v||d,onReset:h});case l.MT.Language:return a.ZP.createElement(ba,{onScreenSelect:o,isActive:e,onReset:h});case l.MT.GeneralChatBackground:return a.ZP.createElement(ha,{onScreenSelect:o,isActive:e||i===l.MT.GeneralChatBackgroundColor,onReset:h});case l.MT.GeneralChatBackgroundColor:return a.ZP.createElement(pa,{onScreenSelect:o,isActive:e,onReset:h});case l.MT.PrivacyActiveSessions:return a.ZP.createElement(ka,{onScreenSelect:o,isActive:e,onReset:h});case l.MT.PrivacyBlockedUsers:return a.ZP.createElement(Ma,{onScreenSelect:o,isActive:e,onReset:h});case l.MT.PrivacyPhoneNumber:case l.MT.PrivacyLastSeen:case l.MT.PrivacyProfilePhoto:case l.MT.PrivacyForwarding:case l.MT.PrivacyGroupChats:return a.ZP.createElement(ya,{screen:n,onScreenSelect:o,isActive:e||c[n],onReset:h});case l.MT.PrivacyPhoneNumberAllowedContacts:case l.MT.PrivacyLastSeenAllowedContacts:case l.MT.PrivacyProfilePhotoAllowedContacts:case l.MT.PrivacyForwardingAllowedContacts:case l.MT.PrivacyGroupChatsAllowedContacts:return a.ZP.createElement(Xa,{isAllowList:!0,screen:n,onScreenSelect:o,isActive:e||c[n],onReset:h});case l.MT.PrivacyPhoneNumberDeniedContacts:case l.MT.PrivacyLastSeenDeniedContacts:case l.MT.PrivacyProfilePhotoDeniedContacts:case l.MT.PrivacyForwardingDeniedContacts:case l.MT.PrivacyGroupChatsDeniedContacts:return a.ZP.createElement(Xa,{screen:n,onScreenSelect:o,isActive:e,onReset:h});case l.MT.Folders:case l.MT.FoldersCreateFolder:case l.MT.FoldersEditFolder:case l.MT.FoldersEditFolderFromChatList:case l.MT.FoldersIncludedChats:case l.MT.FoldersIncludedChatsFromChatList:case l.MT.FoldersExcludedChats:case l.MT.FoldersExcludedChatsFromChatList:return a.ZP.createElement(Yn,{currentScreen:n,shownScreen:i,state:s,dispatch:r,isActive:e,onScreenSelect:o,onReset:h});case l.MT.TwoFaDisabled:case l.MT.TwoFaNewPassword:case l.MT.TwoFaNewPasswordConfirm:case l.MT.TwoFaNewPasswordHint:case l.MT.TwoFaNewPasswordEmail:case l.MT.TwoFaNewPasswordEmailCode:case l.MT.TwoFaCongratulations:case l.MT.TwoFaEnabled:case l.MT.TwoFaChangePasswordCurrent:case l.MT.TwoFaChangePasswordNew:case l.MT.TwoFaChangePasswordConfirm:case l.MT.TwoFaChangePasswordHint:case l.MT.TwoFaTurnOff:case l.MT.TwoFaRecoveryEmailCurrentPassword:case l.MT.TwoFaRecoveryEmail:case l.MT.TwoFaRecoveryEmailCode:return a.ZP.createElement(Ga,{currentScreen:n,state:m,dispatch:u,shownScreen:i,isActive:e,onScreenSelect:o,onReset:h});default:return}}(e,c))}return a.ZP.createElement($.Z,{id:"Settings",name:d?"none":i.s0,activeKey:n,renderCount:Ya},v)})),ns=(0,z.P2)((e=>e()),6e4,!0),as=(0,a.X$)((0,s.c$)((e=>{const{userIds:t}=e.contactList||{},{byId:n,statusesById:a}=e.users;return{usersById:n,userStatusesById:a,contactIds:t,serverTimeOffset:e.serverTimeOffset}}))((e=>{let{isActive:t,filter:n,usersById:r,userStatusesById:l,contactIds:o,serverTimeOffset:c,onReset:d}=e;const{loadContactList:m,openChat:u,openNewContactDialog:h}=(0,s.Sv)(),Z=(0,g.Z)();(0,a.d4)((()=>{ns((()=>{m()}))})),(0,P.ZP)(t,d);const v=(0,a.I4)((e=>{u({id:e,shouldReplaceHistory:!0})}),[u]),p=(0,a.Ye)((()=>{if(!o)return;const e=(0,f.kK)(o,r,n);return(0,f.Z0)(e,r,l,void 0,c)}),[o,n,r,l,c]),[E,C]=(0,Be.Z)(void 0,p,Boolean(n));return a.ZP.createElement(Ge.Z,{items:E,onLoadMore:C,className:"chat-list custom-scroll"},null!=E&&E.length?E.map((e=>a.ZP.createElement(_e.Z,{key:e,className:"chat-item-clickable",onClick:()=>v(e),ripple:!i.wB},a.ZP.createElement(Xe.Z,{userId:e,forceShowSelf:!0,avatarSize:"large"})))):E&&!E.length?a.ZP.createElement("p",{className:"no-results",key:"no-results",dir:"auto"},n.length?"No contacts matched your search.":"Contact list is empty."):a.ZP.createElement(De.Z,{key:"loading"}),a.ZP.createElement(Sn.Z,{isShown:!0,onClick:h,ariaLabel:Z("CreateNewContact")},a.ZP.createElement("i",{className:"icon-add-user-filled"})))}))),ss=(0,z.P2)((e=>e()),6e4,!0),rs=(0,a.X$)((0,s.c$)((e=>{const{userIds:t}=e.contactList||{},{byId:n}=e.chats,{query:a,fetchingStatus:s,globalResults:r,localResults:l}=e.globalSearch,{userIds:o}=r||{},{userIds:i}=l||{};return{chatsById:n,localContactIds:t,searchQuery:a,isSearching:null==s?void 0:s.chats,globalUserIds:o,localUserIds:i}}))((e=>{let{isChannel:t,isActive:n,selectedMemberIds:r,onSelectedMemberIdsChange:l,onNextStep:o,onReset:i,chatsById:c,localContactIds:d,searchQuery:m,isSearching:u,localUserIds:h,globalUserIds:Z}=e;const{loadContactList:v,setGlobalSearchQuery:p}=(0,s.Sv)();(0,a.d4)((()=>{ss((()=>{v()}))}));const E=(0,g.Z)();(0,P.ZP)(n,i);const C=(0,a.I4)((e=>{p({query:e})}),[p]),b=(0,a.Ye)((()=>{const e=(0,s.Rd)().users.byId,t=d?(0,f.kK)(d,e,m):[];return(0,f.ih)((0,be.Tw)([...t,...h||[],...Z||[]]).filter((t=>{const n=e[t];return!n||!n.isSelf&&(n.canBeInvitedToGroup||!(0,f.cS)(n))})),c,!1,r)}),[d,c,m,h,Z,r]),I=(0,a.I4)((()=>{(r.length||t)&&(p({query:""}),o())}),[r.length,t,p,o]);return a.ZP.createElement("div",{className:"NewChat step-1"},a.ZP.createElement("div",{className:"left-header"},a.ZP.createElement(B.Z,{round:!0,size:"smaller",color:"translucent",onClick:i,ariaLabel:"Return to Chat List"},a.ZP.createElement("i",{className:"icon-arrow-left"})),a.ZP.createElement("h3",null,E("GroupAddMembers"))),a.ZP.createElement("div",{className:"NewChat-inner step-1"},a.ZP.createElement(_a.Z,{itemIds:b,selectedIds:r,filterValue:m,filterPlaceholder:E("SendMessageTo"),searchInputId:"new-group-picker-search",isLoading:u,onSelectedIdsChange:l,onFilterChange:C}),a.ZP.createElement(Sn.Z,{isShown:Boolean(r.length||t),onClick:I,ariaLabel:t?"Continue To Channel Info":"Continue To Group Info"},a.ZP.createElement("i",{className:"icon-arrow-right"}))))}))),ls=(0,a.X$)((0,s.c$)((e=>{const{progress:t,error:n}=e.chatCreation||{};return{creationProgress:t,creationError:n}}))((e=>{let{isChannel:t,isActive:n,memberIds:r,onReset:o,creationProgress:i,creationError:c}=e;const{createGroupChat:d,createChannel:m}=(0,s.Sv)(),u=(0,g.Z)();(0,P.ZP)(n,o);const[h,Z]=(0,a.eJ)(""),[v,p]=(0,a.eJ)(""),[E,C]=(0,a.eJ)(),[f,b]=(0,a.eJ)(),I="Chat title can't be empty",y="Channel title can't be empty",S="Sorry, creating supergroups is not yet supported",N=i===l.Nh.InProgress,k=(0,a.I4)((e=>{const{value:t}=e.currentTarget,n=t.replace(/^\s+/,"");Z(n),n!==t&&(e.currentTarget.value=n)}),[]),w=(0,a.I4)((e=>{p(e.currentTarget.value)}),[]),M=(0,a.I4)((()=>{h.length?r.length>199?b(S):d({title:h,photo:E,memberIds:r}):b(I)}),[h,r,d,E,I,S]),T=(0,a.I4)((()=>{h.length?m({title:h,about:v,photo:E,memberIds:r}):b(y)}),[h,m,v,E,r,y]);(0,a.d4)((()=>{i===l.Nh.Complete&&o(!0)}),[i,o]);const R=c&&u(c)||(f!==I&&f!==y?f:void 0);return a.ZP.createElement("div",{className:"NewChat"},a.ZP.createElement("div",{className:"left-header"},a.ZP.createElement(B.Z,{round:!0,size:"smaller",color:"translucent",onClick:()=>o(),ariaLabel:"Return to member selection"},a.ZP.createElement("i",{className:"icon-arrow-left"})),a.ZP.createElement("h3",null,u(t?"NewChannel":"NewGroup"))),a.ZP.createElement("div",{className:"NewChat-inner step-2"},a.ZP.createElement(yn.Z,{onChange:C,title:u("AddPhoto")}),a.ZP.createElement(Ue.Z,{value:h,onChange:k,label:u(t?"EnterChannelName":"GroupName"),error:f===I||f===y?f:void 0}),t&&a.ZP.createElement(a.ZP.Fragment,null,a.ZP.createElement(Ue.Z,{value:v,onChange:w,label:u("DescriptionOptionalPlaceholder")}),a.ZP.createElement("p",{className:"note"},u("DescriptionInfo"))),R&&a.ZP.createElement("p",{className:"error"},R),r.length>0&&a.ZP.createElement(a.ZP.Fragment,null,a.ZP.createElement("h3",{className:"chat-members-heading"},u("GroupInfo.ParticipantCount",r.length,"i")),a.ZP.createElement("div",{className:"chat-members-list custom-scroll"},r.map((e=>a.ZP.createElement(_e.Z,{inactive:!0,className:"chat-item-clickable"},a.ZP.createElement(Xe.Z,{userId:e}))))))),a.ZP.createElement(Sn.Z,{isShown:0!==h.length,onClick:t?T:M,disabled:N,ariaLabel:t?u("ChannelIntro.CreateChannel"):"Create Group"},N?a.ZP.createElement(Y.Z,{color:"white"}):a.ZP.createElement("i",{className:"icon-arrow-right"})))}))),os=Object.keys(l.du).length/2,is=(0,a.X$)((e=>{let{isActive:t,isChannel:n=!1,content:s,onContentChange:r,onReset:o}=e;const[c,d]=(0,a.eJ)([]),m=(0,a.I4)((()=>{r(n?l.du.NewChannelStep2:l.du.NewGroupStep2)}),[n,r]);return a.ZP.createElement($.Z,{id:"NewChat",name:i.s0,renderCount:os,activeKey:s},(e=>{switch(s){case l.du.NewChannelStep1:case l.du.NewGroupStep1:return a.ZP.createElement(rs,{isChannel:n,isActive:t,selectedMemberIds:c,onSelectedMemberIdsChange:d,onNextStep:m,onReset:o});case l.du.NewChannelStep2:case l.du.NewGroupStep2:return a.ZP.createElement(ls,{isChannel:n,isActive:e&&t,memberIds:c,onReset:o});default:return}}))}));var cs=n(1080);const ds=(0,a.X$)((e=>{let{isActive:t,onReset:n,onContentChange:s}=e;const r=(0,g.Z)();return(0,P.ZP)(t,n,s,l.du.Archived),a.ZP.createElement("div",{className:"ArchivedChats"},a.ZP.createElement("div",{className:"left-header"},a.ZP.createElement(B.Z,{round:!0,size:"smaller",color:"translucent",onClick:n,ariaLabel:"Return to chat list"},a.ZP.createElement("i",{className:"icon-arrow-left"})),a.ZP.createElement("h3",null,r("ArchivedChats"))),a.ZP.createElement(cs.Z,{folderType:"archived",isActive:t}))}));var ms=n(1218);const us=(0,a.X$)((0,s.c$)((e=>{const{byId:t,orderedIds:n}=e.chatFolders;return{foldersById:t,folderOrderedIds:n}}))((e=>{let{isOpen:t,chatId:n,foldersById:r,folderOrderedIds:l,onClose:o,onCloseAnimationEnd:i}=e;const{editChatFolders:c}=(0,s.Sv)(),d=(0,g.Z)(),m=(0,a.Ye)((()=>r?Object.keys(r).reduce(((e,t)=>{const{includedChatIds:a,pinnedChatIds:s}=r[Number(t)];return(a.includes(n)||null!=s&&s.includes(n))&&e.push(t),e}),[]):[]),[n,r]),[u,h]=(0,a.eJ)(m),Z=(0,a.Ye)((()=>(null==l?void 0:l.map((e=>({label:r?r[e].title:"",value:String(e)}))))||[]),[l,r]),v=(0,a.I4)((()=>{const e=m.filter((e=>!u.includes(e))).map(Number),t=u.filter((e=>!m.includes(e))).map(Number);c({chatId:n,idsToRemove:e,idsToAdd:t}),o()}),[n,c,m,o,u]);if(r&&l)return a.ZP.createElement(Oe.Z,{isOpen:t,onClose:o,onCloseAnimationEnd:i,onEnter:v,className:"delete",title:d("FilterAddTo")},a.ZP.createElement(ms.Z,{options:Z,selected:u,onChange:h,round:!0}),a.ZP.createElement(B.Z,{color:"primary",className:"confirm-dialog-button",isText:!0,onClick:v},d("FilterAddTo")),a.ZP.createElement(B.Z,{className:"confirm-dialog-button",isText:!0,onClick:o},d("Cancel")))})));var hs=n(4319),Zs=n(647),vs=n(998);function Ps(e){return e?"lng_context_copy_selected":"lng_context_copy_text"}let gs,ps;const Es={Down:!0,ArrowDown:!0,Up:!0,ArrowUp:!0,Left:!0,ArrowLeft:!0,Right:!0,ArrowRight:!0," ":!0,PageUp:!0,PageDown:!0,End:!0,Home:!0,Tab:!0},Cs=e=>"changedTouches"in e?e.changedTouches[0].clientY:0,fs=e=>{const t="deltaY"in e?e.deltaY:Cs(e);if(!gs||!gs.contains(e.target)||gs.scrollTop<=0&&t<=0||gs.scrollTop>=gs.scrollHeight-gs.offsetHeight&&t>=0){if(ps&&e.target.closest(ps))return;e.preventDefault()}};function bs(e){Es[e.key]&&!function(e){if(!(e&&e instanceof HTMLElement))return!1;const t=e,n=t.tagName.toLowerCase();if("textarea"===n)return!0;if("input"!==n)return!1;const a=t.getAttribute("type");return!!a&&["text","password","number","email","tel","url","search","date","datetime","datetime-local","time","month","week"].indexOf(a.toLowerCase())>-1}(e.target)&&e.preventDefault()}function Is(e,t){gs=e,ps=t,document.addEventListener("wheel",fs,{passive:!1}),document.addEventListener("touchmove",fs,{passive:!1}),document.onkeydown=bs}function ys(){gs=void 0,ps=void 0,document.removeEventListener("wheel",fs),document.removeEventListener("touchmove",fs),document.onkeydown=null}var Ss=n(3394);const Ns=i.FW?24:32,ks=(0,H.y)("ReactionSelectorReaction"),ws=(0,a.X$)((e=>{var t;let{reaction:n,previewIndex:s,onSendReaction:l,isReady:o}=e;const c=(0,a.sO)(null),d=(0,p.Z)(`document${null===(t=n.selectAnimation)||void 0===t?void 0:t.id}`,!o,r.IU.Lottie),[m,u,h]=(0,ee.Z)(),[Z,v]=(0,ee.Z)(),P=Boolean(o&&d),{transitionClassNames:g}=(0,K.Z)(P),{shouldRender:E,transitionClassNames:C}=(0,K.Z)(!o||!Z,void 0,!0);return a.ZP.createElement("div",{className:ks("&",i.FW&&"compact"),onClick:function(){if(!c.current)return;const{x:e,y:t}=c.current.getBoundingClientRect();l(n.reaction,e,t)},ref:c,onMouseEnter:o?u:void 0},E&&a.ZP.createElement("div",{className:ks("static",o?[C]:void 0),style:`background-position-x: ${s*-Ns}px;`}),P&&a.ZP.createElement(St.Z,{id:`select_${n.reaction}`,className:ks("animated",[g]),animationData:d,play:m,noLoop:!0,size:Ns,onLoad:v,onEnded:h}))})),Ms=(0,H.y)("ReactionSelector"),Ts=(0,a.X$)((e=>{let{availableReactions:t,enabledReactions:n,onSendReaction:s,isPrivate:r,isReady:l}=e;const o=(0,a.sO)(null),[c,d]=(0,ee.Z)(!1);(0,Ft.Z)(o.current,!c),(0,a.bt)((()=>{d()}),[d]);const m=e=>{o&&("deltaY"in e?e.deltaY:Cs(e))&&e.preventDefault()};if((r||null!=n&&n.length)&&t)return a.ZP.createElement("div",{className:Ms("&",i.FW&&"compact"),onWheelCapture:m,onTouchMove:m},a.ZP.createElement("div",{className:Ms("bubble-big")}),a.ZP.createElement("div",{className:Ms("bubble-small")}),a.ZP.createElement("div",{className:Ms("items-wrapper")},a.ZP.createElement("div",{className:Ms("items",["no-scrollbar"]),ref:o},null==t?void 0:t.map(((e,t)=>{if(!e.isInactive&&(r||n&&n.includes(e.reaction)))return a.ZP.createElement(ws,{key:e.reaction,previewIndex:t,isReady:l,onSendReaction:s,reaction:e})})))))})),Rs=(0,a.X$)((e=>{var t,n,s,l,o;let{availableReactions:c,isOpen:d,message:m,isPrivate:u,enabledReactions:h,anchor:Z,canSendNow:v,canReschedule:P,canReply:p,canEdit:E,canPin:C,canUnpin:b,canDelete:I,canReport:y,canForward:S,canFaveSticker:N,canUnfaveSticker:k,canCopy:w,canCopyLink:M,canSelect:T,canDownload:R,canSaveGif:A,isDownloading:L,canShowSeenBy:F,canShowReactionsCount:B,canRemoveReaction:x,canShowReactionList:$,seenByRecentUsers:D,onReply:U,onEdit:G,onPin:_,onUnpin:J,onForward:X,onDelete:z,onReport:Y,onFaveSticker:V,onUnfaveSticker:j,onSelect:q,onSend:K,onReschedule:W,onClose:Q,onCloseAnimationEnd:te,onCopyLink:ne,onDownload:ae,onSaveGif:se,onShowSeenBy:le,onShowReactors:oe,onSendReaction:ie,onCopyMessages:ce}=e;const de=(0,a.sO)(null),me=(0,a.sO)(null),ue=function(e,t,n,a){const s=[],l=(0,f.UD)(e),o=(0,f.O$)(e)||((0,f.Cg)(e)?void 0:(0,f.F$)(e)),i=(0,f.Ti)(e,"inline"),c=o&&(i||(0,f.BM)(e))&&hs.yl,d=window.getSelection();if(c&&s.push({label:"lng_context_copy_image",icon:"copy-media",handler:()=>{Promise.resolve(i?Zs.he(i,r.IU.BlobUrl):o.blobUrl).then(hs.VP),t&&t()}}),l){var m;const n=Boolean((null==d||null===(m=d.anchorNode)||void 0===m?void 0:m.parentNode)&&d.anchorNode.parentNode.closest(".Message .content-inner")&&""!==d.toString().replace(/(?:\r\n|\r|\n)/g,""));s.push({label:Ps(n),icon:"copy",handler:()=>{const s=(0,vs.Z)();if(null!=s&&s.length&&a)a(s);else{const t=n&&d?d.toString():(0,f.EU)(e);(0,hs.TE)(t)}t&&t()}})}return n&&s.push({label:"lng_context_copy_message_link",icon:"link",handler:()=>{n(),t&&t()}}),s}(m,Q,M?ne:void 0,ce),he=!(u||null!=h&&h.length),Ze=$&&!he,[ve,Pe,ge]=(0,ee.Z)(),pe=(0,a.I4)((()=>document.querySelector(`.Transition__slide--active > .MessageList div[data-message-id="${m.id}"]`)),[m.id]),Ee=(0,a.I4)((()=>document.querySelector(".Transition__slide--active > .MessageList")),[]),Ce=(0,a.I4)((()=>document.querySelector(".MessageContextMenu .bubble")),[]),fe=(0,a.I4)((()=>{var e;const t=i.wB&&(null===(e=document.querySelector(".AudioPlayer-content"))||void 0===e?void 0:e.offsetHeight)||0,n=document.querySelector(".HeaderPinnedMessage-wrapper"),a=(i.wB&&!t||!i.wB&&(null==n?void 0:n.classList.contains("full-width")))&&(null==n?void 0:n.offsetHeight)||0;return{extraPaddingX:10,extraTopPadding:document.querySelector(".MiddleHeader").offsetHeight,marginSides:Ze?32:void 0,extraMarginTop:a+t}}),[Ze]),be=(0,a.I4)((()=>{ie(void 0,0,0)}),[ie]);(0,a.d4)((()=>{d?setTimeout((()=>{Pe()}),200):ge()}),[d,Pe,ge]);const{positionX:Ie,positionY:ye,transformOriginX:Se,transformOriginY:Ne,style:ke,menuStyle:Me,withScroll:Te}=(0,Ss.Z)(Z,pe,Ee,Ce,fe);(0,a.d4)((()=>(Is(Te?me.current:void 0,".ReactionSelector"),ys)),[Te]);const Re=(0,g.Z)();return a.ZP.createElement(re.Z,{ref:de,isOpen:d,transformOriginX:Se,transformOriginY:Ne,positionX:Ie,positionY:ye,style:ke,bubbleStyle:Me,className:(0,H.Z)("MessageContextMenu","fluid",Ze&&"with-reactions"),onClose:Q,onCloseAnimationEnd:te},$&&a.ZP.createElement(Ts,{enabledReactions:h,onSendReaction:ie,isPrivate:u,availableReactions:c,isReady:ve}),a.ZP.createElement("div",{className:"scrollable-content custom-scroll",style:Me,ref:me},x&&a.ZP.createElement(O.Z,{icon:"reactions",onClick:be},"Remove Reaction"),v&&a.ZP.createElement(O.Z,{icon:"send-outline",onClick:K},Re("MessageScheduleSend")),P&&a.ZP.createElement(O.Z,{icon:"schedule",onClick:W},Re("MessageScheduleEditTime")),p&&a.ZP.createElement(O.Z,{icon:"reply",onClick:U},Re("Reply")),E&&a.ZP.createElement(O.Z,{icon:"edit",onClick:G},Re("Edit")),N&&a.ZP.createElement(O.Z,{icon:"favorite",onClick:V},Re("AddToFavorites")),k&&a.ZP.createElement(O.Z,{icon:"favorite",onClick:j},Re("Stickers.RemoveFromFavorites")),w&&ue.map((e=>a.ZP.createElement(O.Z,{key:e.label,icon:e.icon,onClick:e.handler},Re(e.label)))),C&&a.ZP.createElement(O.Z,{icon:"pin",onClick:_},Re("DialogPin")),b&&a.ZP.createElement(O.Z,{icon:"unpin",onClick:J},Re("DialogUnpin")),A&&a.ZP.createElement(O.Z,{icon:"gifs",onClick:se},Re("lng_context_save_gif")),R&&a.ZP.createElement(O.Z,{icon:"download",onClick:ae},Re(L?"lng_context_cancel_download":"lng_media_download")),S&&a.ZP.createElement(O.Z,{icon:"forward",onClick:X},Re("Forward")),T&&a.ZP.createElement(O.Z,{icon:"select",onClick:q},Re("Common.Select")),y&&a.ZP.createElement(O.Z,{icon:"flag",onClick:Y},Re("lng_context_report_msg")),(F||B)&&a.ZP.createElement(O.Z,{className:"MessageContextMenu--seen-by",icon:B?"reactions":"group",onClick:B?oe:le,disabled:!(B||null!==(t=m.seenByUserIds)&&void 0!==t&&t.length)},a.ZP.createElement("span",{className:"MessageContextMenu--seen-by-label"},B&&null!==(n=m.reactors)&&void 0!==n&&n.count?F&&null!==(s=m.seenByUserIds)&&void 0!==s&&s.length?Re("Chat.OutgoingContextMixedReactionCount",[m.reactors.count,m.seenByUserIds.length]):Re("Chat.ContextReactionCount",m.reactors.count,"i"):1===(null===(l=m.seenByUserIds)||void 0===l?void 0:l.length)&&D?(0,f.Js)(D[0]):null!==(o=m.seenByUserIds)&&void 0!==o&&o.length?Re("Conversation.ContextMenuSeen",m.seenByUserIds.length,"i"):Re("Conversation.ContextMenuNoViews")),a.ZP.createElement("div",{className:"avatars"},null==D?void 0:D.map((e=>a.ZP.createElement(we.Z,{size:"micro",user:e}))))),I&&a.ZP.createElement(O.Z,{destructive:!0,icon:"delete",onClick:z},Re("Delete"))))})),As=2*k.Gw,Ls=(0,a.X$)((0,s.c$)(((e,t)=>{var n,a,s;let{message:r,messageListType:l}=t;const{threadId:i}=(0,b.Bt)(e)||{},c=(0,b.xs)(e,r.chatId),d=(0,b.Z1)(e,r.chatId),{seenByExpiresAt:m,seenByMaxChatMembers:u}=e.appConfig||{},{noOptions:h,canReply:Z,canPin:v,canUnpin:P,canDelete:g,canReport:p,canEdit:E,canForward:C,canFaveSticker:I,canUnfaveSticker:y,canCopy:S,canCopyLink:N,canSelect:k,canDownload:w,canSaveGif:M}=i&&(0,b._k)(e,r,i)||{},T="pinned"===l,R="scheduled"===l,A=d&&(0,f.eA)(d),L=(0,f.CI)(r),F=Boolean(d&&u&&m&&(0,f.Bf)(d)&&(0,f.B4)(r)&&!R&&d.membersCount&&d.membersCountDate.now()/1e3-m),B=d&&(0,f.YC)(d.id),x=(0,f.Lo)(r),$=!L&&!A&&!R&&!x&&!B&&r.reactions&&!(0,f.JE)(r.reactions)&&r.reactions.canSeeList,D=B&&(null===(n=r.reactions)||void 0===n||null===(a=n.results)||void 0===a?void 0:a.some((e=>e.isChosen))),O=(0,b.EV)(e,r);return{availableReactions:e.availableReactions,noOptions:h,canSendNow:R,canReschedule:R,canReply:!T&&!R&&Z,canPin:!R&&v,canUnpin:!R&&P,canDelete:g,canReport:p,canEdit:!T&&E,canForward:!O&&!R&&C,canFaveSticker:!R&&I,canUnfaveSticker:!R&&y,canCopy:!O&&S,canCopyLink:!O&&!R&&N,canSelect:k,canDownload:!O&&w,canSaveGif:!O&&M,activeDownloads:c,canShowSeenBy:F,enabledReactions:null==d||null===(s=d.fullInfo)||void 0===s?void 0:s.enabledReactions,isPrivate:B,hasFullInfo:Boolean(null==d?void 0:d.fullInfo),canShowReactionsCount:$,canShowReactionList:!L&&!x&&!R&&(null==d?void 0:d.id)!==o.aw,canRemoveReaction:D}}))((e=>{var t;let{availableReactions:n,isOpen:r,messageListType:l,chatUsername:o,message:i,album:c,anchor:d,onClose:m,onCloseAnimationEnd:u,noOptions:h,canSendNow:Z,hasFullInfo:v,canReschedule:P,canReply:g,canPin:p,canUnpin:E,canDelete:C,canReport:b,canShowReactionsCount:I,canShowReactionList:y,canRemoveReaction:S,canEdit:N,enabledReactions:k,isPrivate:w,canForward:M,canFaveSticker:T,canUnfaveSticker:R,canCopy:A,canCopyLink:L,canSelect:F,canDownload:B,canSaveGif:x,activeDownloads:$,canShowSeenBy:D}=e;const{setReplyingToId:O,setEditingId:U,pinMessage:G,openForwardMenu:_,faveSticker:J,unfaveSticker:X,toggleMessageSelection:z,sendScheduledMessages:Y,rescheduleMessage:V,downloadMessageMedia:j,cancelMessageMediaDownload:q,loadSeenBy:W,openSeenByModal:Q,sendReaction:ne,openReactorListModal:ae,loadFullChat:se,loadReactors:re,copyMessagesByIds:le,saveGif:oe}=(0,s.Sv)(),{transitionClassNames:ie}=(0,K.Z)(r,u,void 0,!1),[ce,de]=(0,a.eJ)(!0),[me,ue]=(0,a.eJ)(!1),[he,Ze]=(0,a.eJ)(!1),[ve,Pe]=(0,a.eJ)(!1),[ge,pe,Ee]=(0,ee.Z)();(0,a.d4)((()=>{D&&r&&W({chatId:i.chatId,messageId:i.id})}),[W,r,i.chatId,i.id,D]),(0,a.d4)((()=>{I&&r&&re({chatId:i.chatId,messageId:i.id})}),[I,r,re,i.chatId,i.id]),(0,a.d4)((()=>{v||w||!r||se({chatId:i.chatId})}),[v,r,w,se,i.chatId]);const Ce=(0,a.Ye)((()=>{var e,t,n;if(null!==(e=i.reactions)&&void 0!==e&&null!==(t=e.recentReactions)&&void 0!==t&&t.length){var a,r;const e=(0,s.Rd)().users.byId;return null===(a=i.reactions)||void 0===a||null===(r=a.recentReactions)||void 0===r?void 0:r.slice(0,3).map((t=>{let{userId:n}=t;return e[n]})).filter(Boolean)}if(!i.seenByUserIds)return;const l=(0,s.Rd)().users.byId;return null===(n=i.seenByUserIds)||void 0===n?void 0:n.slice(0,3).map((e=>l[e])).filter(Boolean)}),[null===(t=i.reactions)||void 0===t?void 0:t.recentReactions,i.seenByUserIds]),fe=c?c.messages.some((e=>$.includes(e.id))):$.includes(i.id),be=(0,a.I4)((()=>{de(!1),ue(!0)}),[]),Ie=(0,a.I4)((()=>{de(!1),Ze(!0)}),[]),ye=(0,a.I4)((()=>{de(!1),m()}),[m]),Se=(0,a.I4)((()=>{ue(!1),m()}),[m]),Ne=(0,a.I4)((()=>{Ze(!1),m()}),[m]),ke=(0,a.I4)((()=>{Pe(!1),m()}),[m]),we=(0,a.I4)((()=>{Ee(),m()}),[Ee,m]),Me=(0,a.I4)((()=>{O({messageId:i.id}),ye()}),[O,i.id,ye]),Te=(0,a.I4)((()=>{U({messageId:i.id}),ye()}),[U,i.id,ye]),Re=(0,a.I4)((()=>{de(!1),Pe(!0)}),[]),Ae=(0,a.I4)((()=>{G({messageId:i.id,isUnpin:!0}),ye()}),[G,i.id,ye]),Le=(0,a.I4)((()=>{if(ye(),null!=c&&c.messages){const e=c.messages.map((e=>{let{id:t}=e;return t}));_({fromChatId:i.chatId,messageIds:e})}else _({fromChatId:i.chatId,messageIds:[i.id]})}),[_,i,ye,c]),Fe=(0,a.I4)((()=>{ye(),J({sticker:i.content.sticker})}),[ye,i.content.sticker,J]),Be=(0,a.I4)((()=>{ye(),X({sticker:i.content.sticker})}),[ye,i.content.sticker,X]),xe=(0,a.I4)((()=>{const e=null!=c&&c.messages?{messageId:i.id,childMessageIds:c.messages.map((e=>{let{id:t}=e;return t})),withShift:!1}:{messageId:i.id,withShift:!1};z(e),ye()}),[ye,i.id,z,c]),$e=(0,a.I4)((()=>{Y({chatId:i.chatId,id:i.id}),ye()}),[ye,i.chatId,i.id,Y]),De=(0,a.I4)((()=>{de(!1),pe()}),[pe]),Oe=(0,a.I4)((()=>{ye(),Q({chatId:i.chatId,messageId:i.id})}),[ye,i.chatId,i.id,Q]),Ue=(0,a.I4)((()=>{ye(),ae({chatId:i.chatId,messageId:i.id})}),[ye,ae,i.chatId,i.id]),Ge=(0,a.I4)((e=>{V({chatId:i.chatId,messageId:i.id,scheduledAt:Math.round(e.getTime()/1e3)})}),[i.chatId,i.id,V]),_e=(0,a.I4)((e=>{le({messageIds:e}),ye()}),[ye,le]),Je=(0,a.I4)((()=>{(0,hs.TE)(`https://t.me/${o||`c/${i.chatId.replace("-","")}`}/${i.id}`),ye()}),[o,ye,i.chatId,i.id]),Xe=(0,a.I4)((()=>{((null==c?void 0:c.messages)||[i]).forEach((e=>{fe?q({message:e}):j({message:e})})),ye()}),[c,i,ye,fe,q,j]),ze=(0,a.I4)((()=>{const e=(0,f.b7)(i);oe({gif:e}),ye()}),[ye,i,oe]),Ye=(0,a.I4)(((e,t,n)=>{ne({chatId:i.chatId,messageId:i.id,reaction:e,x:t,y:n,startSize:As}),ye()}),[ye,i.chatId,i.id,ne]),He=(0,a.Ye)((()=>(c?c.messages:[i]).map((e=>{let{id:t}=e;return t}))),[c,i]);if(h)return void ye();const Ve=new Date;return Ve.setFullYear(Ve.getFullYear()+1),a.ZP.createElement("div",{className:(0,H.Z)("ContextMenuContainer",ie)},a.ZP.createElement(Rs,{availableReactions:n,message:i,isPrivate:w,isOpen:ce,enabledReactions:k,anchor:d,canShowReactionsCount:I,canShowReactionList:y,canRemoveReaction:S,canSendNow:Z,canReschedule:P,canReply:g,canDelete:C,canReport:b,canPin:p,canUnpin:E,canEdit:N,canForward:M,canFaveSticker:T,canUnfaveSticker:R,canCopy:A,canCopyLink:L,canSelect:F,canDownload:B,canSaveGif:x,canShowSeenBy:D,isDownloading:fe,seenByRecentUsers:Ce,onReply:Me,onEdit:Te,onPin:Re,onUnpin:Ae,onForward:Le,onDelete:be,onReport:Ie,onFaveSticker:Fe,onUnfaveSticker:Be,onSelect:xe,onSend:$e,onReschedule:De,onClose:ye,onCopyLink:Je,onCopyMessages:_e,onDownload:Xe,onSaveGif:ze,onShowSeenBy:Oe,onSendReaction:Ye,onShowReactors:Ue}),a.ZP.createElement(mt,{isOpen:me,isSchedule:"scheduled"===l,onClose:Se,album:c,message:i}),a.ZP.createElement(pt,{isOpen:he,onClose:Ne,messageIds:He}),a.ZP.createElement(ut,{isOpen:ve,messageId:i.id,chatId:i.chatId,onClose:ke}),P&&a.ZP.createElement(lt,{isOpen:ge,withTimePicker:!0,selectedAt:1e3*i.date,maxAt:(0,te._F)(Ve),isFutureMode:!0,onClose:we,onSubmit:Ge}))})));var Fs=n(3057);const Bs=(0,a.X$)((0,s.c$)(((e,t)=>{let{fromSticker:n,stickerSetShortName:a}=t;const s=(0,b.Bt)(e),{chatId:r,threadId:l}=s||{},o=r&&(0,b.Z1)(e,r),i=o?(0,f.H5)(o):void 0,c=Boolean(o&&l&&(0,f.Qm)(o,l)&&(null==i?void 0:i.canSendStickers)),d=Boolean(r)&&(0,b.FM)(e,r);return{canScheduleUntilOnline:Boolean(r)&&(0,b.Eh)(e,r),canSendStickers:c,isSavedMessages:d,shouldSchedule:(0,b.Aq)(e),stickerSet:n?(0,b.Ny)(e,n.stickerSetId):a?(0,b.E_)(e,a):void 0}}))((e=>{let{isOpen:t,fromSticker:n,stickerSetShortName:r,stickerSet:l,canSendStickers:i,canScheduleUntilOnline:c,shouldSchedule:d,isSavedMessages:m,onClose:u}=e;const{loadStickers:h,toggleStickerSet:Z,sendMessage:v}=(0,s.Sv)(),P=(0,a.sO)(null),p=(0,g.Z)(),[E,C]=(0,Fs.Z)(c),{observe:f}=(0,jt.S1)({rootRef:P,throttleMs:200,isDisabled:!t});(0,a.d4)((()=>{if(t)if(n){const{stickerSetId:e,stickerSetAccessHash:t}=n;h({stickerSetId:e,stickerSetAccessHash:t})}else r&&h({stickerSetShortName:r})}),[t,n,h,r]);const b=(0,a.I4)(((e,t,n)=>{e={...e,isPreloadedGlobally:!0},d||n?E((n=>{v({sticker:e,isSilent:t,scheduledAt:n}),u()})):(v({sticker:e,isSilent:t}),u())}),[u,E,v,d]),I=(0,a.I4)((()=>{l&&(Z({stickerSetId:l.id}),u())}),[u,l,Z]);return a.ZP.createElement(Oe.Z,{className:"StickerSetModal",isOpen:t,onClose:u,hasCloseButton:!0,title:l?(0,ke.Z)(l.title,["emoji","links"]):p("AccDescrStickerSet")},null!=l&&l.stickers?a.ZP.createElement(a.ZP.Fragment,null,a.ZP.createElement("div",{ref:P,className:"stickers custom-scroll"},l.stickers.map((e=>a.ZP.createElement(Kn.Z,{sticker:e,size:o.yK,observeIntersection:f,onClick:i?b:void 0,clickArg:e,isSavedMessages:m})))),a.ZP.createElement("div",{className:"button-wrapper"},a.ZP.createElement(B.Z,{size:"smaller",fluid:!0,color:l.installedDate?"danger":"primary",onClick:I},p(l.installedDate?"StickerPack.RemoveStickerCount":"StickerPack.AddStickerCount",l.count,"i")))):a.ZP.createElement(De.Z,null),C)})));var xs=n(2898);const $s=(0,a.X$)((0,s.c$)(((e,t)=>{var n;let{chatId:a}=t;const s=(0,b.Z1)(e,a);if(!s||s.isRestricted)return{};const r=(0,f.YC)(s.id),l=r?(0,b.dy)(e,a):void 0,o=l&&(0,f.kw)(l);return{chat:s,isMuted:(0,f.i4)(s,(0,b.dZ)(e),(0,b.NJ)(e)),isPrivate:r,canAddContact:o,canDeleteChat:(0,f.cc)(s),hasLinkedChat:Boolean(null==s||null===(n=s.fullInfo)||void 0===n?void 0:n.linkedChatId)}}))((e=>{let{chatId:t,isOpen:n,withExtraActions:r,anchor:l,isChannel:o,canStartBot:c,canRestartBot:d,canSubscribe:m,canSearch:u,canCall:h,canMute:Z,canViewStatistics:v,canLeave:P,canEnterVoiceChat:p,canCreateVoiceChat:E,chat:C,isPrivate:f,isMuted:b,canDeleteChat:I,hasLinkedChat:y,canAddContact:S,onSubscribeChannel:N,onSearchClick:k,onClose:w,onCloseAnimationEnd:M}=e;const{updateChatMutedState:T,enterMessageSelectMode:R,sendBotCommand:A,restartBot:L,joinGroupCall:F,createGroupCall:B,openLinkedChat:x,openAddContactDialog:$,openCallFallbackConfirm:D,toggleStatistics:U}=(0,s.Sv)(),[G,_]=(0,a.eJ)(!0),[J,X]=(0,a.eJ)(!1),{x:z,y:Y}=l;(0,K.Z)(n,M,void 0,!1);const H=(0,a.I4)((()=>{_(!1),X(!0)}),[]),V=(0,a.I4)((()=>{_(!1),w()}),[w]),j=(0,a.I4)((()=>{X(!1),w()}),[w]),q=(0,a.I4)((()=>{A({command:"/start"})}),[A]),W=(0,a.I4)((()=>{L({chatId:t})}),[t,L]),Q=(0,a.I4)((()=>{T({chatId:t,isMuted:!b}),V()}),[t,V,b,T]),ee=(0,a.I4)((()=>{E?B({chatId:t}):F({chatId:t}),V()}),[V,E,t,F,B]),te=(0,a.I4)((()=>{x({id:t}),V()}),[t,V,x]),ne=(0,a.I4)((()=>{$({userId:t}),V()}),[$,t,V]),ae=(0,a.I4)((()=>{N(),V()}),[V,N]),se=(0,a.I4)((()=>{D(),V()}),[V,D]),le=(0,a.I4)((()=>{k(),V()}),[V,k]),oe=(0,a.I4)((()=>{U(),V()}),[V,U]),ie=(0,a.I4)((()=>{R(),V()}),[V,R]);(0,a.d4)((()=>(Is(),ys)),[]);const ce=(0,g.Z)();return a.ZP.createElement(xs.Z,null,a.ZP.createElement("div",{className:"HeaderMenuContainer"},a.ZP.createElement(re.Z,{isOpen:G,positionX:"right",style:`left: ${z}px;top: ${Y}px;`,onClose:V},r&&c&&a.ZP.createElement(O.Z,{icon:"bots",onClick:q},ce("BotStart")),r&&d&&a.ZP.createElement(O.Z,{icon:"bots",onClick:W},ce("BotRestart")),r&&m&&a.ZP.createElement(O.Z,{icon:o?"channel":"group",onClick:ae},ce(o?"ProfileJoinChannel":"ProfileJoinGroup")),S&&a.ZP.createElement(O.Z,{icon:"add-user",onClick:ne},ce("AddContact")),i.wB&&h&&a.ZP.createElement(O.Z,{icon:"phone",onClick:se},ce("Call")),i.wB&&u&&a.ZP.createElement(O.Z,{icon:"search",onClick:le},ce("Search")),Z&&a.ZP.createElement(O.Z,{icon:b?"unmute":"mute",onClick:Q},ce(b?"ChatsUnmute":"ChatsMute")),(p||E)&&a.ZP.createElement(O.Z,{icon:"voice-chat",onClick:ee},ce(E?"StartVoipChat":"VoipGroupJoinCall")),y&&a.ZP.createElement(O.Z,{icon:o?"comments":"channel",onClick:te},ce(o?"ViewDiscussion":"lng_profile_view_channel")),a.ZP.createElement(O.Z,{icon:"select",onClick:ie},ce("ReportSelectMessages")),v&&a.ZP.createElement(O.Z,{icon:"stats",onClick:oe},ce("Statistics")),P&&a.ZP.createElement(O.Z,{destructive:!0,icon:"delete",onClick:H},ce(f?"DeleteChatUser":I?"GroupInfo.DeleteAndExit":o?"LeaveChannel":"Group.LeaveGroup"))),C&&a.ZP.createElement(Rt.Z,{isOpen:J,onClose:j,chat:C})))})));var Ds=n(9589);const Os=(0,z.Ds)((e=>e()),200,!1),Us=(0,a.X$)((0,s.c$)((e=>{const t=(0,b.jr)(e);if(!t)return{};const{query:n,results:a}=(0,b.n5)(e)||{},{totalCount:s,foundIds:r}=a||{};return{chat:t,query:n,totalCount:s,foundIds:r,isHistoryCalendarOpen:Boolean(e.historyCalendarSelectedAt)}}))((e=>{let{isActive:t,chat:n,query:r,totalCount:l,foundIds:o,isHistoryCalendarOpen:i}=e;const{setLocalTextSearchQuery:c,searchTextMessagesLocal:d,focusMessage:m,closeLocalTextSearch:u,openHistoryCalendar:h}=(0,s.Sv)(),Z=(0,a.sO)(null),[v,P]=(0,a.eJ)(0);(0,a.d4)((()=>{const{visualViewport:e}=window;if(!e)return;const t=document.getElementById("Main"),n=()=>{const{activeElement:n}=document;if(n&&n===Z.current){const{pageTop:n,height:a}=e;t.style.transform=`translateY(${n}px)`,t.style.height=`${a}px`,document.documentElement.scrollTop=n}else t.style.transform="",t.style.height=""};return e.addEventListener("resize",n),()=>{e.removeEventListener("resize",n)}}),[]),(0,a.d4)((()=>{null!=n&&n.id&&null!=o&&o.length?(m({chatId:n.id,messageId:o[0]}),P(0)):P(-1)}),[null==n?void 0:n.id,m,o]),(0,a.d4)((()=>{Array.from(document.querySelectorAll("input")).forEach((e=>{e.disabled=Boolean(t&&e!==Z.current)})),Array.from(document.querySelectorAll("div[contenteditable]")).forEach((e=>{e.contentEditable=t?"false":"true"}))}),[t]),(0,a.d4)((()=>{t||Z.current.blur()}),[t]),(0,a.bt)((()=>{document.querySelector("#MobileSearch input").blur()}),[i]);const g=(0,a.I4)((e=>{c({query:e}),e.length&&Os(d)}),[d,c]),p=(0,a.I4)((()=>{if(n&&o){const e=v+1;m({chatId:n.id,messageId:o[e]}),P(e)}}),[n,v,m,o]),E=(0,a.I4)((()=>{if(n&&o){const e=v-1;m({chatId:n.id,messageId:o[e]}),P(e)}}),[n,v,m,o]);return a.ZP.createElement("div",{id:"MobileSearch",className:t?"active":""},a.ZP.createElement("div",{className:"header"},a.ZP.createElement(B.Z,{size:"smaller",round:!0,color:"translucent",onClick:u},a.ZP.createElement("i",{className:"icon-arrow-left"})),a.ZP.createElement(Ds.Z,{ref:Z,value:r,onChange:g})),a.ZP.createElement("div",{className:"footer"},a.ZP.createElement("div",{className:"counter"},r?null!=o&&o.length?`${v+1} of ${l}`:o&&!o.length?"No results":"":a.ZP.createElement(B.Z,{round:!0,size:"smaller",color:"translucent",onClick:()=>h({selectedAt:(0,te._F)(Date.now())}),ariaLabel:"Search messages by date"},a.ZP.createElement("i",{className:"icon-calendar"}))),a.ZP.createElement(B.Z,{round:!0,size:"smaller",color:"translucent",onClick:p,disabled:!o||!o.length||v===o.length-1},a.ZP.createElement("i",{className:"icon-up"})),a.ZP.createElement(B.Z,{round:!0,size:"smaller",color:"translucent",onClick:E,disabled:!o||!o.length||0===v},a.ZP.createElement("i",{className:"icon-down"}))))})));var Gs=n(5376),_s=n(9295),Js=n(3575),Xs=n(7240),zs=n(971),Ys=n(7002),Hs=n(3616);function Vs(e,t){let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:0,a=arguments.length>3&&void 0!==arguments[3]&&arguments[3],s=arguments.length>4&&void 0!==arguments[4]&&arguments[4],r=arguments.length>5&&void 0!==arguments[5]&&arguments[5];const l=e[r?"scrollLeft":"scrollTop"],o=l+e[r?"offsetWidth":"offsetHeight"],i="string"==typeof t?e.querySelectorAll(t):t,{length:c}=i,d=[];let m=!1;for(let e=0;e=l-n&&u<=o+n:c<=o+n&&u>=l-n)d.push(e),m=!0;else if(m&&!a)break}return{allElements:i,visibleIndexes:d}}const js=function(e,t){let n=arguments.length>2&&void 0!==arguments[2]&&arguments[2];const a=e[n?"scrollLeft":"scrollTop"],s=a+e[n?"offsetWidth":"offsetHeight"],r=t[n?"offsetLeft":"offsetTop"],l=r+t[n?"offsetWidth":"offsetHeight"];return r>a&&ls[s.length-1]?"start":"end";(0,qs.Z)(a,r[t],e,10)}}var Ws=n(3570);function Qs(e){let{isActive:t,isHorizontal:n,shouldSaveSelectionOnUpdateItems:s,shouldRemoveSelectionOnReset:r,noArrowNavigation:l,items:o,shouldSelectOnTab:i,onSelect:c,onClose:d}=e;const[m,u]=(0,a.eJ)(-1),h=(0,a.I4)((e=>o?(0,Ws.Z)(o.length,e):-1),[o]),Z=(0,a.I4)(((e,t)=>{t.preventDefault(),u((t=>h(t+e)))}),[u,h]),v=(0,a.I4)((e=>{if(o&&o.length&&m>-1){const t=o[m];t&&(e.preventDefault(),c(t))}}),[o,c,m]),P=!o||m>o.length-1;return(0,a.d4)((()=>{s&&!P||u(r?-1:0)}),[P,r,s]),(0,a.d4)((()=>t?(0,Zt.Z)({onEsc:d,onUp:l||n?void 0:e=>Z(-1,e),onDown:l||n?void 0:e=>Z(1,e),onLeft:l||!n?void 0:e=>Z(-1,e),onRight:l||!n?void 0:e=>Z(1,e),onTab:i?v:void 0,onEnter:v}):void 0),[l,Z,v,t,n,d,i]),m}const er=(0,a.X$)((e=>{let{isOpen:t,onClose:n,onInsertUserName:r,filteredUsers:l}=e;const o=(0,a.sO)(null),{shouldRender:i,transitionClassNames:c}=(0,K.Z)(t,void 0,void 0,!1),d=(0,a.I4)((function(e){let t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];const n=(0,s.Rd)().users.byId,a=n[e];a&&r(a,t)}),[r]),m=(0,a.I4)((e=>{d(e.id,!0)}),[d]),u=Qs({isActive:t,items:l,onSelect:m,shouldSelectOnTab:!0,shouldSaveSelectionOnUpdateItems:!0,onClose:n});(0,a.d4)((()=>{Ks(".chat-item-clickable",u,o)}),[u]),(0,a.d4)((()=>{l&&!l.length&&n()}),[l,n]);const h=(0,C.Z)(null!=l&&l.length?l:void 0,i),Z=l&&!l.length?h:l;if(!i||Z&&!Z.length)return;const v=(0,H.Z)("MentionTooltip composer-tooltip custom-scroll",c);return a.ZP.createElement("div",{className:v,ref:o},null==Z?void 0:Z.map(((e,t)=>{let{id:n}=e;return a.ZP.createElement(_e.Z,{key:n,className:"chat-item-clickable scroll-item",onClick:()=>d(n),focus:u===t},a.ZP.createElement(Xe.Z,{userId:n,avatarSize:"small",withUsername:!0}))})))}));var tr=n(9830),nr=n(7146);const ar=(0,a.X$)((e=>{let{chatId:t,threadId:n,attachments:s,caption:r,canShowCustomSendMenu:l,isReady:i,isChatWithSelf:c,currentUserId:d,groupChatMembers:m,recentEmojis:u,baseEmojiKeywords:h,emojiKeywords:Z,shouldSchedule:v,addRecentEmoji:P,onCaptionUpdate:p,onSend:E,onFileAppend:f,onClear:b,onSendSilent:I,onSendScheduled:S}=e;const N=(0,zs.Y)(r),k=(0,zs.Y)(null),w=(0,a.sO)(),M=(0,C.Z)(s),T=s.length?s:M,R=Boolean(s.length),[A,L,F]=(0,ee.Z)(),x=Boolean(T&&T.every((e=>e.quick))),$=(0,g.Z)(),{isMentionTooltipOpen:D,closeMentionTooltip:O,insertMention:U,mentionFilteredUsers:G}=(0,_s.Z)(R,N,p,o.nY,m,void 0,d),{isEmojiTooltipOpen:_,closeEmojiTooltip:J,filteredEmojis:X,insertEmoji:z}=(0,Js.Z)(R,N,u,o.nY,p,h,Z,!i);(0,a.d4)((()=>R?(0,y.Z)(b):void 0),[R,b]);const{isContextMenuOpen:Y,handleContextMenu:H,handleContextMenuClose:V,handleContextMenuHide:j}=(0,Xs.Z)(k,!l||!R),q=(0,a.I4)((()=>{R&&(v?S():E())}),[R,S,E,v]),K=(0,a.I4)((e=>{e.preventDefault(),F();const{dataTransfer:{files:t}}=e;if(null!=t&&t.length){const e=x?Array.from(t).filter((e=>e.type&&o.dI.has(e.type))):Array.from(t);f(e,x)}}),[x,f,F]);if(!T)return;const W=T.every((e=>o.oG.has(e.mimeType))),Q=T.every((e=>o.wG.has(e.mimeType))),te=T.every((e=>e.mimeType.startsWith("audio/")));let ne="";return ne=$(W?"PreviewSender.SendPhoto":Q?"PreviewSender.SendVideo":te?"PreviewSender.SendAudio":"PreviewSender.SendFile",T.length,"i"),a.ZP.createElement(Oe.Z,{isOpen:R,onClose:b,header:function(){if(T)return a.ZP.createElement("div",{className:"modal-header-condensed",dir:$.isRtl?"rtl":void 0},a.ZP.createElement(B.Z,{round:!0,color:"translucent",size:"smaller",ariaLabel:"Cancel attachments",onClick:b},a.ZP.createElement("i",{className:"icon-close"})),a.ZP.createElement("div",{className:"modal-title"},ne),a.ZP.createElement("div",{className:"AttachmentModal--send-wrapper"},a.ZP.createElement(B.Z,{ref:k,color:"primary",size:"smaller",className:"modal-action-button",onClick:q,onContextMenu:l?H:void 0},$("Send")),l&&a.ZP.createElement(nr.Z,{isOpen:Y,isOpenToBottom:!0,onSendSilent:c?void 0:I,onSendSchedule:S,onClose:V,onCloseAnimationEnd:j,isSavedMessages:c})))}(),className:"AttachmentModal "+(A?"hovered":"")},a.ZP.createElement("div",{className:"drop-target",onDragEnter:L,onDrop:K,onDragOver:function(e){e.preventDefault(),e.stopPropagation(),w.current&&(window.clearTimeout(w.current),w.current=void 0)},onDragLeave:e=>{const{relatedTarget:t,target:n}=e;n.matches(".drop-target")&&!t&&(w.current=window.setTimeout(F,150)),n&&n.closest(".AttachmentModal.hovered")||(t&&e.stopPropagation(),F())},"data-attach-description":$("Preview.Dragging.AddItems",10)},x?a.ZP.createElement("div",{className:"media-wrapper custom-scroll"},T.map((e=>e.mimeType.startsWith("image/")?a.ZP.createElement("img",{src:e.blobUrl,alt:""}):a.ZP.createElement("video",{src:e.blobUrl,autoPlay:!0,muted:!0,loop:!0})))):a.ZP.createElement("div",{className:"document-wrapper custom-scroll"},T.map((e=>a.ZP.createElement(Ys.Z,{name:e.filename,extension:(0,Gs.mD)(e.filename,e.mimeType),previewData:e.previewBlobUrl,size:e.size,smaller:!0})))),a.ZP.createElement("div",{className:"attachment-caption-wrapper"},a.ZP.createElement(er,{isOpen:D,onClose:O,onInsertUserName:U,filteredUsers:G}),a.ZP.createElement(tr.Z,{isOpen:_,emojis:X,onClose:J,onEmojiSelect:z,addRecentEmoji:P}),a.ZP.createElement(Hs.Z,{id:"caption-input-text",chatId:t,threadId:n,isAttachmentModalInput:!0,html:r,editableInputId:o.nY,placeholder:$("Caption"),onUpdate:p,onSend:q,canAutoFocus:Boolean(i&&s.length)}))))}));var sr=n(3099);const rr=(0,a.X$)((e=>{let{isOpen:t,shouldBeAnonimous:n,onSend:s,onClear:r}=e;const l=(0,a.sO)(null),o=(0,a.sO)(null),i=(0,a.sO)(null),[c,d]=(0,a.eJ)(""),[m,u]=(0,a.eJ)([""]),[h,Z]=(0,a.eJ)(!0),[v,P]=(0,a.eJ)(!1),[p,E]=(0,a.eJ)(!1),[C,f]=(0,a.eJ)(),[b,I]=(0,a.eJ)(),[S,N]=(0,a.eJ)(!1),k=(0,g.Z)(),w=(0,a.I4)((e=>{t&&e.current&&e.current.focus()}),[t]);(0,a.d4)((()=>t?(0,y.Z)(r):void 0),[t,r]),(0,a.d4)((()=>{t||(d(""),u([""]),Z(!0),P(!1),E(!1),f(""),I(""),N(!1))}),[t]),(0,a.d4)((()=>w(l)),[w,t]),(0,a.bt)((()=>{const e=i.current;e&&C!==e.innerHTML&&(e.innerHTML=C)}),[C]);const M=(0,a.I4)((function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[];u([...e,""]),requestAnimationFrame((()=>{const e=o.current;e&&(e.classList.toggle("overflown",e.scrollHeight>320),e.scrollTo({top:e.scrollHeight,behavior:"smooth"}))}))}),[]),T=(0,a.I4)((()=>{if(N(!1),!t)return;const e=c.trim().substring(0,255),n=m.map((e=>e.trim().substring(0,100))).filter((e=>e.length));if(!e||n.length<2)return d(e),n.length?n.length<2?M(n):u(n):M(),void N(!0);if(p&&(!b||!n[Number(b)]))return void N(!0);const a={summary:{question:e,answers:n.map(((e,t)=>({text:e.trim(),option:String(t),...String(t)===b&&{correct:!0}}))),...!h&&{isPublic:!0},...v&&{multipleChoice:!0},...p&&{quiz:!0}}};if(p){const{text:e,entities:t}=C&&(0,sr.Z)(C.substring(0,200))||{};a.quiz={correctAnswers:[b],...e&&{solution:e},...t&&{solutionEntities:t}}}s(a)}),[t,c,m,p,b,h,v,s,M,C]),R=(0,a.I4)(((e,t)=>{const n=[...m];n[e]=t,n[n.length-1].trim().length&&n.length<10?M(n):u(n)}),[m,M]),A=(0,a.I4)((e=>{const t=[...m];t.splice(e,1),u(t),requestAnimationFrame((()=>{o.current&&o.current.classList.toggle("overflown",o.current.scrollHeight>320)}))}),[m]),L=(0,a.I4)((e=>{I(e)}),[I]),F=(0,a.I4)((e=>{Z(e.target.checked)}),[]),x=(0,a.I4)((e=>{P(e.target.checked)}),[]),$=(0,a.I4)((e=>{E(e.target.checked)}),[]),D=(0,a.I4)((e=>{13===e.keyCode&&T()}),[T]),O=(0,a.I4)((e=>{d(e.target.value)}),[]),U=(0,a.I4)((()=>{if(S&&!c.trim().length)return k("lng_polls_choose_question")}),[S,k,c]),G=(0,a.I4)((e=>{const t=m.map((e=>e.trim())).filter((e=>e.length));if(S&&t.length<2&&!m[e].trim().length)return k("lng_polls_choose_answers")}),[S,k,m]);function _(){return m.map(((e,t)=>a.ZP.createElement("div",{className:"option-wrapper"},a.ZP.createElement(Ue.Z,{label:t!==m.length-1||10===m.length?k("OptionHint"):k("CreatePoll.AddOption"),error:G(t),value:e,onChange:e=>R(t,e.currentTarget.value),onKeyPress:D}),t!==m.length-1&&a.ZP.createElement(B.Z,{className:"option-remove-button",round:!0,color:"translucent",size:"smaller",ariaLabel:k("Delete"),onClick:()=>A(t)},a.ZP.createElement("i",{className:"icon-close"})))))}return a.ZP.createElement(Oe.Z,{isOpen:t,onClose:r,header:a.ZP.createElement("div",{className:"modal-header-condensed"},a.ZP.createElement(B.Z,{round:!0,color:"translucent",size:"smaller",ariaLabel:"Cancel poll creation",onClick:r},a.ZP.createElement("i",{className:"icon-close"})),a.ZP.createElement("div",{className:"modal-title"},k("NewPoll")),a.ZP.createElement(B.Z,{color:"primary",size:"smaller",className:"modal-action-button",onClick:T},k("Create"))),className:"PollModal"},a.ZP.createElement(Ue.Z,{ref:l,label:k("AskAQuestion"),value:c,error:U(),onChange:O,onKeyPress:D}),a.ZP.createElement("div",{className:"options-divider"}),a.ZP.createElement("div",{className:"options-list custom-scroll",ref:o},a.ZP.createElement("h3",{className:"options-header"},k("PollOptions")),S&&function(){const e=m.map((e=>e.trim())).filter((e=>e.length));return p&&(!b||!e[Number(b)])&&a.ZP.createElement("p",{className:"error"},k("lng_polls_choose_correct"))}(),p?a.ZP.createElement(gt.Z,{name:"correctOption",options:_().map(((e,t)=>({value:String(t),label:e,hidden:t===m.length-1}))),onChange:L}):_()),a.ZP.createElement("div",{className:"options-divider"}),a.ZP.createElement("div",{className:"quiz-mode"},!n&&a.ZP.createElement(ct.Z,{label:k("PollAnonymous"),checked:h,onChange:F}),a.ZP.createElement(ct.Z,{label:k("PollMultiple"),checked:v,disabled:p,onChange:x}),a.ZP.createElement(ct.Z,{label:k("PollQuiz"),checked:p,disabled:v,onChange:$}),p&&a.ZP.createElement(a.ZP.Fragment,null,a.ZP.createElement("h3",{className:"options-header"},k("lng_polls_solution_title")),a.ZP.createElement("div",{ref:i,className:"form-control",contentEditable:!0,dir:"auto",onChange:e=>f(e.currentTarget.innerHTML)}),a.ZP.createElement("div",{className:"note"},k("CreatePoll.ExplanationInfo")))))}));var lr=n(6503),or=n(4284),ir=n(1367);const cr=(0,a.X$)((e=>{let{emoji:t,focus:n,onClick:s}=e;const r=(0,a.I4)((e=>{e.preventDefault(),s(t.native,t.id)}),[t,s]);return a.ZP.createElement("div",{className:"EmojiButton "+(n?"focus":""),onMouseDown:r,title:`:${t.names[0]}:`},i.op?t.native:a.ZP.createElement("img",{src:`./img-apple-64/${t.image}.png`,alt:"",loading:"lazy"}))})),dr=(0,a.X$)((e=>{let{category:t,index:n,allEmojis:s,observeIntersection:r,shouldRender:l,onEmojiSelect:o}=e;const c=(0,a.sO)(null);(0,jt._N)(c,r);const d=(0,Vn.Z)(l),m=(0,g.Z)(),u=i.wB?Math.floor((N.Z.get().width-8)/44):9,h=44*Math.ceil(t.emojis.length/u);return a.ZP.createElement("div",{ref:c,key:t.id,id:`emoji-category-${n}`,className:"symbol-set"},a.ZP.createElement("p",{className:"symbol-set-name",dir:"auto"},m("recent"===t.id?"RecentStickers":`Emoji${n}`)),a.ZP.createElement("div",{className:(0,H.Z)("symbol-set-container",d),style:`height: ${h}px;`,dir:m.isRtl?"rtl":void 0},l&&t.emojis.map((e=>{const t=s[e];if(!t)return;const n="id"in t?t:t[1];return a.ZP.createElement(cr,{key:n.id,emoji:n,onClick:o})}))))})),mr={recent:"icon-recent",people:"icon-smile",nature:"icon-animals",foods:"icon-eats",activity:"icon-sport",places:"icon-car",objects:"icon-lamp",symbols:"icon-language",flags:"icon-flag"},ur=[];let hr,Zr,vr;const Pr=(0,a.X$)((0,s.c$)((e=>(0,be.ei)(e,["recentEmojis"])))((e=>{let{className:t,onEmojiSelect:s,recentEmojis:r}=e;const l=(0,a.sO)(null),c=(0,a.sO)(null),[d,m]=(0,a.eJ)(),[u,h]=(0,a.eJ)(),[Z,v]=(0,a.eJ)(0),{observe:P}=(0,jt.S1)({rootRef:l,throttleMs:200},(e=>{e.forEach((e=>{const{id:t}=e.target;if(!t||!t.startsWith("emoji-category-"))return;const n=Number(t.replace("emoji-category-",""));ur[n]=e.isIntersecting}));const t=ur.map(((e,t)=>({index:t,isIntersecting:e}))).filter((e=>{let{isIntersecting:t}=e;return t}));t.length&&v(t[Math.floor(t.length/2)].index)}));(0,Ft.Z)(c.current,!i.wB),(0,a.d4)((()=>{if(!d)return;const e=c.current;if(!e)return;const t=42*Z-e.offsetWidth/2+21;(0,ir.Z)(e,t)}),[d,Z]);const p=(0,g.Z)(),E=(0,a.Ye)((()=>{if(!d)return wt.D;const e=[...d];return null!=r&&r.length&&e.unshift({id:"recent",name:p("RecentStickers"),emojis:r}),e}),[d,p,r]);(0,a.d4)((()=>{setTimeout((()=>{const e=()=>{m(vr.categories),h(vr.emojis)};vr?e():async function(){return hr||(hr=n.e(501).then(n.t.bind(n,7501,19)),Zr=(await hr).default,vr=(0,or.NM)(Zr)),hr}().then(e)}),200)}),[]);const C=(0,a.I4)((e=>{v(e);const t=document.getElementById(`emoji-category-${e}`);(0,qs.Z)(l.current,t,"start",50,800)}),[]),f=(0,a.I4)(((e,t)=>{s(e,t)}),[s]),b=(0,Vt.Z)([],o.kU),I=(0,H.Z)("EmojiPicker",t);return u&&b?a.ZP.createElement("div",{className:I},a.ZP.createElement("div",{ref:c,className:"EmojiPicker-header",dir:p.isRtl?"rtl":""},E.map((function(e,t){const n=mr[e.id];return n&&a.ZP.createElement(B.Z,{className:"symbol-set-button "+(t===Z?"activated":""),round:!0,faded:!0,color:"translucent",onClick:()=>C(t),ariaLabel:e.name},a.ZP.createElement("i",{className:n}))}))),a.ZP.createElement("div",{ref:l,className:(0,H.Z)("EmojiPicker-main no-selection",i.$b?"no-scrollbar":"custom-scroll")},E.map(((e,t)=>a.ZP.createElement(dr,{category:e,index:t,allEmojis:u,observeIntersection:P,shouldRender:Z>=t-1&&Z<=t+1,onEmojiSelect:f}))))):a.ZP.createElement("div",{className:I},a.ZP.createElement(De.Z,null))})));var gr=n(6389);const pr=i.wB?8:16,Er=(0,a.X$)((e=>{let{stickerSet:t,loadAndPlay:n,index:s,shouldRender:r,favoriteStickers:l,isSavedMessages:c,observeIntersection:d,onStickerSelect:m,onStickerUnfave:u,onStickerFave:h}=e;const Z=(0,a.sO)(null);(0,jt._N)(Z,d);const v=(0,Vn.Z)(r),P=i.wB?Math.floor((N.Z.get().width-8)/(o.Q+pr)):5,g=Math.ceil(t.count/P)*(o.Q+pr),p=(0,a.Ye)((()=>l?new Set(l.map((e=>{let{id:t}=e;return t}))):void 0),[l]);return a.ZP.createElement("div",{ref:Z,key:t.id,id:`sticker-set-${s}`,className:"symbol-set"},a.ZP.createElement("p",{className:"symbol-set-name"},t.title),a.ZP.createElement("div",{className:(0,H.Z)("symbol-set-container",v),style:`height: ${g}px;`},r&&t.stickers&&t.stickers.map((e=>a.ZP.createElement(Kn.Z,{key:e.id,sticker:e,size:o.Q,observeIntersection:d,noAnimate:!n,onClick:m,clickArg:e,onUnfaveClick:null!=p&&p.has(e.id)?u:void 0,onFaveClick:null!=p&&p.has(e.id)?void 0:h,isSavedMessages:c})))))})),Cr=[],fr=(0,a.X$)((0,s.c$)(((e,t)=>{let{chatId:n}=t;const{setsById:a,added:s,recent:r,favorite:l}=e.stickers,o=(0,b.FM)(e,n);return{recentStickers:r.stickers,favoriteStickers:l.stickers,stickerSetsById:a,addedSetIds:s.setIds,shouldPlay:e.settings.byKey.shouldLoopStickers,isSavedMessages:o}}))((e=>{let{chatId:t,threadId:n,className:r,loadAndPlay:l,canSendStickers:c,recentStickers:d,favoriteStickers:m,addedSetIds:u,stickerSetsById:h,shouldPlay:Z,isSavedMessages:v,onStickerSelect:P}=e;const{loadRecentStickers:p,addRecentSticker:E,unfaveSticker:C,faveSticker:f}=(0,s.Sv)(),b=(0,a.sO)(null),I=(0,a.sO)(null),[y,S]=(0,a.eJ)(0),N=(0,gr.Z)(t,n),{observe:k}=(0,jt.S1)({rootRef:b,throttleMs:200},(e=>{e.forEach((e=>{const{id:t}=e.target;if(!t||!t.startsWith("sticker-set-"))return;const n=Number(t.replace("sticker-set-",""));Cr[n]=e.isIntersecting}));const t=Cr.map(((e,t)=>({index:t,isIntersecting:e}))).filter((e=>{let{isIntersecting:t}=e;return t}));t.length&&S(t[Math.floor(t.length/2)].index)})),{observe:w}=(0,jt.S1)({rootRef:I}),M=(0,g.Z)(),T=Boolean(u),R=(0,a.Ye)((()=>u?[{id:"recent",title:M("RecentStickers"),stickers:d,count:d.length},{id:"favorite",title:M("FavoriteStickers"),stickers:m,count:m.length},...u.map((e=>h[e])).filter(Boolean)]:wt.D),[u,M,d,m,h]),A=(0,a.Ye)((()=>T&&0===R.filter((e=>{var t;return null===(t=e.stickers)||void 0===t?void 0:t.length})).length),[R,T]);(0,a.d4)((()=>{l&&(p(),N({type:"chooseSticker"}))}),[l,p,N]),(0,Ft.Z)(I.current),(0,a.d4)((()=>{if(!T)return;const e=I.current;if(!e)return;const t=52*y-(e.offsetWidth/2-26);(0,ir.Z)(e,t)}),[T,y]);const L=(0,a.I4)((e=>{S(e);const t=document.getElementById(`sticker-set-${e}`);(0,qs.Z)(b.current,t,"start",void 0,500)}),[]),F=(0,a.I4)(((e,t,n)=>{P(e,t,n),E({sticker:e})}),[E,P]),x=(0,a.I4)((e=>{C({sticker:e})}),[C]),$=(0,a.I4)((e=>{f({sticker:e})}),[f]),D=(0,a.I4)((()=>{N({type:"chooseSticker"})}),[N]),O=(0,Vt.Z)([],o.Y),U=(0,H.Z)("StickerPicker",r);return T&&O&&!A&&c?a.ZP.createElement("div",{className:U},a.ZP.createElement("div",{ref:I,className:"StickerPicker-header no-selection no-scrollbar"},R.map((function(e,t){var n;const s=null===(n=e.stickers)||void 0===n?void 0:n[0],r=(0,H.Z)("symbol-set-button sticker-set-button",t===y&&"activated");return"recent"===e.id||"favorite"===e.id||e.hasThumbnail||!s?a.ZP.createElement(B.Z,{key:e.id,className:r,ariaLabel:e.title,round:!0,faded:"recent"===e.id||"favorite"===e.id,color:"translucent",onClick:()=>L(t)},"recent"===e.id?a.ZP.createElement("i",{className:"icon-recent"}):"favorite"===e.id?a.ZP.createElement("i",{className:"icon-favorite"}):e.isLottie?a.ZP.createElement(jn,{stickerSet:e,observeIntersection:w}):a.ZP.createElement(qn,{stickerSet:e,observeIntersection:w})):a.ZP.createElement(Kn.Z,{key:e.id,sticker:s,size:o.DC,title:e.title,className:r,observeIntersection:w,onClick:L,clickArg:t,noContextMenu:!0})}))),a.ZP.createElement("div",{ref:b,onMouseMove:D,className:(0,H.Z)("StickerPicker-main no-selection",i.$b?"no-scrollbar":"custom-scroll")},R.map(((e,t)=>a.ZP.createElement(Er,{key:e.id,stickerSet:e,loadAndPlay:Boolean(Z&&l),index:t,observeIntersection:k,shouldRender:y>=t-1&&y<=t+1,onStickerSelect:F,onStickerUnfave:x,onStickerFave:$,favoriteStickers:m,isSavedMessages:v}))))):a.ZP.createElement("div",{className:U},c?A?a.ZP.createElement("div",{className:"picker-disabled"},M("NoStickers")):a.ZP.createElement(De.Z,null):a.ZP.createElement("div",{className:"picker-disabled"},M("ErrorSendRestrictedStickersAll")))})));var br=n(386);function Ir(){return Ir=Object.assign||function(e){for(var t=1;t{var t,n;let{gif:s,isDisabled:l,className:o,observeIntersection:c,onClick:d,onUnsaveClick:m,isSavedMessages:u}=e;const h=(0,a.sO)(null),Z=(0,a.sO)(null),v=(0,g.Z)(),P=Boolean(null===(t=s.thumbnail)||void 0===t?void 0:t.dataUri),E=`gif${s.id}`,C=(0,jt.Op)(h,c)&&!l,f=(0,p.Z)(`${E}?size=m`,!C,r.IU.BlobUrl),b=(0,da.Z)(null===(n=s.thumbnail)||void 0===n?void 0:n.dataUri,Boolean(f)),I=(0,p.Z)(E,!C,r.IU.BlobUrl),y=Boolean(C&&I),{isBuffered:S,bufferingHandlers:N}=(0,j.Z)(!0),k=C&&!S,w=C&&S;(0,W.Z)(Z,[y]);const{isContextMenuOpen:M,contextMenuPosition:T,handleBeforeContextMenu:R,handleContextMenu:A,handleContextMenuClose:L,handleContextMenuHide:F}=(0,Xs.Z)(h),x=(0,a.I4)((()=>h.current),[]),$=(0,a.I4)((()=>h.current.closest(".custom-scroll, .no-scrollbar")),[]),D=(0,a.I4)((()=>h.current.querySelector(".gif-context-menu .bubble")),[]),{positionX:U,positionY:G,transformOriginX:_,transformOriginY:J,style:X}=(0,Ss.Z)(T,x,$,D),z=(0,a.I4)((()=>{!M&&d&&d({...s,blobUrl:I})}),[M,d,s,I]),V=(0,a.I4)((e=>{e.stopPropagation(),e.preventDefault(),m(s)}),[m,s]),q=(0,a.I4)((()=>{null==m||m(s)}),[s,m]),K=(0,a.I4)((()=>{d({...s,blobUrl:I},!0)}),[s,d,I]),Q=(0,a.I4)((()=>{d({...s,blobUrl:I},void 0,!0)}),[s,d,I]),ee=(0,a.I4)((e=>{(0,br.b)(e),R(e)}),[R]);(0,a.d4)((()=>{l&&L()}),[L,l]);const te=(0,H.Z)("GifButton",s.width&&s.height&&s.width{const{chatId:t}=(0,b.Bt)(e)||{},n=Boolean(t)&&(0,b.FM)(e,t);return{savedGifs:e.gifs.saved.gifs,isSavedMessages:n}}))((e=>{let{className:t,loadAndPlay:n,canSendGifs:r,savedGifs:l,isSavedMessages:c,onGifSelect:d}=e;const{loadSavedGifs:m,saveGif:u}=(0,s.Sv)(),h=(0,a.sO)(null),{observe:Z}=(0,jt.S1)({rootRef:h,debounceMs:300});(0,a.d4)((()=>{n&&m()}),[n,m]);const v=(0,a.I4)((e=>{u({gif:e,shouldUnsave:!0})}),[u]),P=(0,Vt.Z)([],o.Y);return a.ZP.createElement("div",{ref:h,className:(0,H.Z)("GifPicker",t,i.$b?"no-scrollbar":"custom-scroll")},r?P&&l&&l.length?l.map((e=>a.ZP.createElement(yr,{key:e.id,gif:e,observeIntersection:Z,isDisabled:!n,onClick:r?d:void 0,onUnsaveClick:v,isSavedMessages:c}))):P&&l?a.ZP.createElement("div",{className:"picker-disabled"},"No saved GIFs."):a.ZP.createElement(De.Z,null):a.ZP.createElement("div",{className:"picker-disabled"},"Sending GIFs is not allowed in this chat."))})));let Nr;!function(e){e[e.Emoji=0]="Emoji",e[e.Stickers=1]="Stickers",e[e.GIFs=2]="GIFs"}(Nr||(Nr={}));const kr=Object.values(Nr).filter((e=>"string"==typeof e)),wr={[Nr.Emoji]:"icon-smile",[Nr.Stickers]:"icon-stickers",[Nr.GIFs]:"icon-gifs"},Mr=(0,a.X$)((e=>{let{activeTab:t,onSwitchTab:n,onRemoveSymbol:s,onSearchOpen:r}=e;const l=(0,g.Z)();function o(e){return a.ZP.createElement(B.Z,{className:"symbol-tab-button "+(t===e?"activated":""),onClick:()=>n(e),ariaLabel:kr[e],round:!0,faded:!0,color:"translucent"},a.ZP.createElement("i",{className:wr[e]}))}const i=(0,a.I4)((()=>{r(t===Nr.Stickers?"stickers":"gifs")}),[t,r]);return a.ZP.createElement("div",{className:"SymbolMenu-footer",onClick:function(e){e.stopPropagation()},dir:l.isRtl?"rtl":void 0},t!==Nr.Emoji&&a.ZP.createElement(B.Z,{className:"symbol-search-button",ariaLabel:t===Nr.Stickers?"Search Stickers":"Search GIFs",round:!0,faded:!0,color:"translucent",onClick:i},a.ZP.createElement("i",{className:"icon-search"})),o(Nr.Emoji),o(Nr.Stickers),o(Nr.GIFs),t===Nr.Emoji&&a.ZP.createElement(B.Z,{className:"symbol-delete-button",onClick:s,ariaLabel:"Remove Symbol",round:!0,faded:!0,color:"translucent"},a.ZP.createElement("i",{className:"icon-delete-left"})))}));let Tr=!1;const Rr=(0,a.X$)((0,s.c$)((e=>({isLeftColumnShown:e.isLeftColumnShown})))((e=>{let{chatId:t,threadId:n,isOpen:s,canSendStickers:r,canSendGifs:l,isLeftColumnShown:o,onLoad:c,onClose:d,onEmojiSelect:m,onStickerSelect:u,onGifSelect:h,onRemoveSymbol:Z,onSearchOpen:v,addRecentEmoji:P}=e;const[p,E]=(0,a.eJ)(0),[C,f]=(0,a.eJ)([]),[b,I]=(0,lr.Z)(s,d,void 0,i.wB),{shouldRender:y,transitionClassNames:S}=(0,K.Z)(s,d,!1,!1);!Tr&&s&&(Tr=!0),(0,a.d4)((()=>{c()}),[c]),(0,a.bt)((()=>{if(i.wB)return s&&(document.body.classList.add("enable-symbol-menu-transforms"),document.body.classList.add("is-symbol-menu-open")),()=>{s&&(0,z.T2)((()=>{document.body.classList.remove("is-symbol-menu-open"),setTimeout((()=>{document.body.classList.remove("enable-symbol-menu-transforms")}),350)}))}}),[s]);const N=(0,a.sO)(C);N.current=C,(0,a.d4)((()=>{N.current.length&&(N.current.forEach((e=>{P({emoji:e})})),f([]))}),[s,p,P]);const k=(0,a.I4)(((e,t)=>{f((e=>[...e,t])),m(e)}),[m]),w=(0,a.I4)((e=>{d(),v(e)}),[d,v]),M=(0,a.I4)(((e,t,n)=>{u(e,t,n,!0)}),[u]),T=(0,g.Z)();function R(e,o){switch(p){case Nr.Emoji:return a.ZP.createElement(Pr,{className:"picker-tab",onEmojiSelect:k});case Nr.Stickers:return a.ZP.createElement(fr,{className:"picker-tab",loadAndPlay:!!r&&s&&(e||o),canSendStickers:r,onStickerSelect:M,chatId:t,threadId:n});case Nr.GIFs:return a.ZP.createElement(Sr,{className:"picker-tab",loadAndPlay:!!l&&s&&(e||o),canSendGifs:l,onGifSelect:h})}}const A=a.ZP.createElement(a.ZP.Fragment,null,a.ZP.createElement("div",{className:"SymbolMenu-main",onClick:function(e){e.stopPropagation()}},Tr&&a.ZP.createElement($.Z,{name:"slide",activeKey:p,renderCount:kr.length},R)),i.wB&&a.ZP.createElement(B.Z,{round:!0,faded:!0,color:"translucent",ariaLabel:T("Close"),className:"symbol-close-button",size:"tiny",onClick:d},a.ZP.createElement("i",{className:"icon-close"})),a.ZP.createElement(Mr,{activeTab:p,onSwitchTab:E,onRemoveSymbol:Z,onSearchOpen:w}));if(i.wB){if(!y)return;const e=(0,H.Z)("SymbolMenu mobile-menu",S,!o&&"middle-column-open");return a.ZP.createElement(xs.Z,null,a.ZP.createElement("div",{className:e},A))}return a.ZP.createElement(re.Z,{isOpen:s,positionX:"left",positionY:"bottom",onClose:d,className:"SymbolMenu",onCloseAnimationEnd:d,onMouseEnter:i.$b?void 0:b,onMouseLeave:i.$b?void 0:I,noCloseOnBackdrop:!i.$b,noCompact:!0},A)}))),Ar=(0,a.X$)((e=>{let{withAvatar:t,focus:n,botCommand:s,bot:r,onClick:l}=e;return a.ZP.createElement(_e.Z,{key:s.command,className:(0,H.Z)("BotCommand chat-item-clickable scroll-item",t&&"with-avatar"),multiline:!0,onClick:()=>l(s),focus:n},t&&a.ZP.createElement(we.Z,{size:"small",user:r}),a.ZP.createElement("div",{className:"content-inner"},a.ZP.createElement("span",{className:"title"},"/",s.command),a.ZP.createElement("span",{className:"subtitle"},(0,ke.Z)(s.description))))})),Lr=(0,a.X$)((0,s.c$)((e=>({usersById:e.users.byId})))((e=>{let{usersById:t,isOpen:n,withUsername:r,botCommands:l,onClick:o,onClose:i}=e;const{sendBotCommand:c}=(0,s.Sv)(),d=(0,a.sO)(null),{shouldRender:m,transitionClassNames:u}=(0,K.Z)(n,void 0,void 0,!1),h=(0,a.I4)((e=>{let{botId:n,command:a}=e;const s=t[n];c({command:`/${a}${r&&s?`@${s.username}`:""}`,botId:n}),o()}),[o,c,t,r]),Z=Qs({isActive:n,items:l,onSelect:h,onClose:i});(0,a.d4)((()=>{l&&!l.length&&i()}),[l,i]),(0,a.d4)((()=>{Ks(".chat-item-clickable",Z,d)}),[Z]);const v=(0,C.Z)(l&&l.length?l:void 0,m),P=l&&!l.length?v:l;if(!m||P&&!P.length)return;const g=(0,H.Z)("BotCommandTooltip composer-tooltip custom-scroll",u);return a.ZP.createElement("div",{className:g,ref:d},P&&P.map(((e,n)=>a.ZP.createElement(Ar,{key:`${e.botId}_${e.command}`,botCommand:e,bot:t[e.botId],withAvatar:!0,onClick:h,focus:Z===n}))))}))),Fr=(0,a.X$)((e=>{let{isOpen:t,botCommands:n,onClose:r}=e;const{sendBotCommand:l}=(0,s.Sv)(),[o,c]=(0,lr.Z)(t,r,void 0,i.wB),d=(0,a.I4)((e=>{l({command:`/${e.command}`,botId:e.botId}),r()}),[r,l]);return a.ZP.createElement(re.Z,{isOpen:t,positionX:"left",positionY:"bottom",onClose:r,className:"BotCommandMenu",onCloseAnimationEnd:r,onMouseEnter:i.$b?void 0:o,onMouseLeave:i.$b?void 0:c,noCloseOnBackdrop:!i.$b,noCompact:!0},n.map((e=>a.ZP.createElement(Ar,{key:e.command,botCommand:e,onClick:d}))))})),Br=(0,a.X$)((0,s.c$)(((e,t)=>{let{chatId:n}=t;const{stickers:a}=e.stickers.forEmoji;return{stickers:a,isSavedMessages:(0,b.FM)(e,n)}}))((e=>{let{chatId:t,threadId:n,isOpen:r,stickers:l,isSavedMessages:i,onStickerSelect:c}=e;const{clearStickersForEmoji:d}=(0,s.Sv)(),m=(0,a.sO)(null),{shouldRender:u,transitionClassNames:h}=(0,K.Z)(r,void 0,void 0,!1),Z=(0,C.Z)(l,!0),v=l||Z,P=(0,gr.Z)(t,n),{observe:g}=(0,jt.S1)({rootRef:m,throttleMs:200});(0,a.d4)((()=>r?(0,y.Z)(d):void 0),[r,d]);const p=(0,H.Z)("StickerTooltip composer-tooltip custom-scroll",h,!(null!=v&&v.length)&&"hidden");return a.ZP.createElement("div",{ref:m,className:p,onMouseMove:()=>{P({type:"chooseSticker"})}},u&&v?v.map((e=>a.ZP.createElement(Kn.Z,{key:e.id,sticker:e,size:o.Q,observeIntersection:g,onClick:c,clickArg:e,isSavedMessages:i}))):u?a.ZP.createElement(De.Z,null):void 0)}))),xr=(0,a.X$)((e=>{let{isOpen:t,isOpenToBottom:n=!1,isSavedMessages:s,onSendSilent:r,onSendSchedule:l,onClose:o,onCloseAnimationEnd:c}=e;const[d,m]=(0,lr.Z)(t,o),u=(0,g.Z)();return a.ZP.createElement(re.Z,{isOpen:t,autoClose:!0,positionX:"right",positionY:n?"top":"bottom",className:"CustomSendMenu",onClose:o,onCloseAnimationEnd:c,onMouseEnter:i.$b?void 0:d,onMouseLeave:i.$b?void 0:m,noCloseOnBackdrop:!i.$b},r&&a.ZP.createElement(O.Z,{icon:"mute",onClick:r},u("SendWithoutSound")),l&&a.ZP.createElement(O.Z,{icon:"schedule",onClick:l},u(s?"SetReminder":"ScheduleMessage")))}));var $r=n(2420),Dr=n(3283),Or=n(2678);const Ur=(0,a.X$)((e=>{let{isOpen:t,emojis:n,onClose:s,onEmojiSelect:r,addRecentEmoji:l}=e;const o=(0,a.sO)(null),{shouldRender:i,transitionClassNames:c}=(0,K.Z)(t,void 0,void 0,!1),d=(0,Or.Z)(n.length?n:void 0,350)||[],m=(0,a.I4)((e=>{r(e.native),l({emoji:e.id})}),[l,r]),u=(0,a.I4)(((e,t)=>{r(e),l({emoji:t})}),[l,r]),h=Qs({isActive:t,isHorizontal:!0,items:n,onSelect:m,onClose:s});(0,a.d4)((()=>{!function(e,t){const n=t.current;if(!n)return;const{visibleIndexes:a,allElements:s}=Vs(n,".EmojiButton",8,!0,!0,!0);if(!s.length||!s[e])return;const r=a[0];if(!a.includes(e)||e===r&&!js(n,s[r],!0)){const t="start"==(e>a[a.length-1]?"start":"end")?44*e:0;(0,ir.Z)(n,t)}}(h,o)}),[h]);const Z=(0,H.Z)("EmojiTooltip composer-tooltip custom-scroll-x",c);return a.ZP.createElement("div",{ref:o,className:Z},i&&d?d.map(((e,t)=>a.ZP.createElement(cr,{key:e.id,emoji:e,focus:h===t,onClick:u}))):i?a.ZP.createElement(De.Z,null):void 0)})),Gr=(0,a.X$)((e=>{let{title:t,description:n,thumbnail:s,thumbUrl:r,focus:l,transitionClassNames:o="",onClick:i}=e,c="";const d=(0,p.Z)(s?`webDocument:${s.url}`:void 0);return r=r||d,r?c=a.ZP.createElement("img",{src:r,className:o,alt:"",decoding:"async",draggable:"false"}):t&&(c=(0,ft.Xv)(t,1)),a.ZP.createElement(_e.Z,{focus:l,className:"BaseResult chat-item-clickable",onMouseDown:br.b,onClick:i},a.ZP.createElement("span",{className:"thumb"},"string"==typeof c?(0,ke.Z)(c):c),a.ZP.createElement("div",{className:"content-inner"},t&&a.ZP.createElement("div",{className:"title"},t),n&&a.ZP.createElement("div",{className:"description"},n)))})),_r=(0,a.X$)((e=>{var t;let n,s,r,{focus:l,isForGallery:o,inlineResult:i,onClick:c}=e;"photo"in i&&(n=i.photo),"thumbnail"in i&&(s=i.thumbnail),"webThumbnail"in i&&o&&(r=i.webThumbnail);const d=(0,p.Z)(r?`webDocument:${r.url}`:void 0),m=(0,p.Z)(n&&`photo${n.id}?size=m`),u=(0,Vn.Z)(m),h=(0,a.I4)((()=>{c(i)}),[i,c]);var Z,v;if(o)return a.ZP.createElement("div",{className:"MediaResult chat-item-clickable",onClick:h},a.ZP.createElement("img",{src:(null===(Z=n)||void 0===Z||null===(v=Z.thumbnail)||void 0===v?void 0:v.dataUri)||d,alt:""}),a.ZP.createElement("img",{src:m,className:(0,H.Z)("full-media",u),alt:""}));const{title:P,description:g}=i;return a.ZP.createElement(Gr,{focus:l,thumbUrl:m||(null===(t=s)||void 0===t?void 0:t.dataUri)||d,transitionClassNames:u,title:P,description:g,onClick:h})})),Jr=(0,a.X$)((e=>{let{focus:t,inlineResult:n,onClick:s}=e;const{title:r,url:l,description:o,webThumbnail:i}=n,c=(0,a.I4)((()=>{s(n)}),[n,s]);return a.ZP.createElement(Gr,{focus:t,thumbnail:i,title:r||l,description:o,onClick:c})})),Xr=(0,a.X$)((e=>{let{inlineResult:t,isSavedMessages:n,canSendGifs:s,observeIntersection:r,onClick:l}=e;const{gif:o}=t,i=(0,a.I4)(((e,n,a)=>{l(t,n,a)}),[t,l]);if(o)return a.ZP.createElement(yr,{gif:o,observeIntersection:r,className:"chat-item-clickable",onClick:s?i:void 0,isSavedMessages:n})})),zr=(0,a.X$)((e=>{let{inlineResult:t,isSavedMessages:n,observeIntersection:s,onClick:r}=e;const{sticker:l}=t;if(l)return a.ZP.createElement(Kn.Z,{sticker:l,size:o.zq,observeIntersection:s,title:l.emoji,className:"chat-item-clickable",onClick:r,clickArg:t,isSavedMessages:n})})),Yr=(0,z.P2)((e=>e()),500,!0),Hr=(0,a.X$)((e=>{let{isOpen:t,botId:n,isGallery:r,inlineBotResults:o,switchPm:c,isSavedMessages:d,canSendGifs:m,loadMore:u,onClose:h,onSelectResult:Z}=e;const{openChat:v,startBot:P}=(0,s.Sv)(),g=(0,a.sO)(null),{shouldRender:p,transitionClassNames:E}=(0,K.Z)(t,void 0,void 0,!1),{observe:f}=(0,jt.S1)({rootRef:g,debounceMs:200,isDisabled:!t}),b=(0,a.I4)((e=>{let{direction:t}=e;t===l.Uq.Backwards&&Yr(u)}),[u]),I=Qs({isActive:t,shouldRemoveSelectionOnReset:r,noArrowNavigation:r,items:o,onSelect:Z,onClose:h});(0,a.d4)((()=>{Ks(".chat-item-clickable",I,g)}),[I]);const y=(0,a.I4)((()=>{v({id:n}),P({botId:n,param:c.startParam})}),[n,v,P,c]),S=(0,C.Z)(null!=o&&o.length?o:void 0,p),N=o&&!o.length?S:o;if(!p||!(null!=N&&N.length||c))return;const k=(0,H.Z)("InlineBotTooltip composer-tooltip",i.$b?"no-scrollbar":"custom-scroll",r&&"gallery",E);return a.ZP.createElement(Ge.Z,{ref:g,className:k,items:N,itemSelector:".chat-item-clickable",noFastList:!0,onLoadMore:b,sensitiveArea:160},c&&a.ZP.createElement(_e.Z,{ripple:!0,className:"switch-pm scroll-item",onClick:y},a.ZP.createElement("span",{className:"title"},c.text)),(null==N?void 0:N.length)&&N.map(((e,t)=>{switch(e.type){case"gif":return a.ZP.createElement(Xr,{key:e.id,inlineResult:e,observeIntersection:f,onClick:Z,isSavedMessages:d,canSendGifs:m});case"photo":return a.ZP.createElement(_r,{key:e.id,isForGallery:r,inlineResult:e,onClick:Z});case"sticker":return a.ZP.createElement(zr,{key:e.id,inlineResult:e,observeIntersection:f,onClick:Z,isSavedMessages:d});case"video":case"file":case"game":return a.ZP.createElement(_r,{key:e.id,focus:I===t,inlineResult:e,onClick:Z});case"article":case"audio":return a.ZP.createElement(Jr,{key:e.id,focus:I===t,inlineResult:e,onClick:Z});default:return}})))})),Vr=(0,a.X$)((e=>{let{isOpen:t,onClose:n,chatId:r,selectedSendAsId:l,sendAsIds:o}=e;const{saveDefaultSendAs:c}=(0,s.Sv)(),d=(0,s.Rd)().users.byId,m=(0,s.Rd)().chats.byId,u=(0,g.Z)(),h=(0,a.sO)(null),[Z,v,P]=(0,lr.Z)(t,n,void 0);(0,a.d4)((()=>{t&&P()}),[t,P]);const p=(0,a.I4)((e=>{n(),c({chatId:r,sendAsId:e})}),[r,n,c]),E=Qs({isActive:t,items:o,onSelect:p,shouldSelectOnTab:!0,shouldSaveSelectionOnUpdateItems:!0,onClose:n});return(0,a.d4)((()=>{Ks(".chat-item-clickable",E,h)}),[E]),(0,a.d4)((()=>{o&&!o.length&&n()}),[o,n]),a.ZP.createElement(re.Z,{isOpen:t,positionX:"left",positionY:"bottom",onClose:n,className:"SendAsMenu",onCloseAnimationEnd:n,onMouseEnter:i.$b?void 0:Z,onMouseLeave:i.$b?void 0:v,noCloseOnBackdrop:!i.$b,noCompact:!0},a.ZP.createElement("div",{className:"send-as-title",dir:"auto"},u("SendMessageAsTitle")),d&&m&&(null==o?void 0:o.map(((e,t)=>{const n=(0,f.YC)(e)?d[e]:void 0,s=n?void 0:m[e],r=n?(0,f.Js)(n):null==s?void 0:s.title;return a.ZP.createElement(_e.Z,{key:e,className:"SendAsItem chat-item-clickable scroll-item with-avatar",onClick:()=>p(e),focus:E===t},a.ZP.createElement(we.Z,{size:"small",user:n,chat:s,className:(0,H.Z)(l===e&&"selected")}),a.ZP.createElement("div",{className:"info"},a.ZP.createElement("div",{className:"title"},a.ZP.createElement("h3",{dir:"auto"},r&&(0,ke.Z)(r))),a.ZP.createElement("span",{className:"subtitle"},n?u("VoipGroupPersonalAccount"):u("Subscribers",null==s?void 0:s.membersCount,"i"))))}))))}));var jr=n(6844);const qr=(0,a.X$)((0,s.c$)(((e,t)=>{let{chatId:n}=t;const a=(0,b.Z1)(e,n),s=a&&(0,b.Zw)(e,a.id);if(!a||!s)return{};const{query:r,results:l}=(0,b.n5)(e)||{},{totalCount:o,foundIds:i}=l||{};return{chat:a,messagesById:s,query:r,totalCount:o,foundIds:i}}))((e=>{let{chatId:t,threadId:n,onClose:r,isActive:l,chat:o,messagesById:i,query:c,totalCount:d,foundIds:m}=e;const{searchTextMessagesLocal:u,focusMessage:h}=(0,s.Sv)(),Z=(0,a.sO)(null),v=(0,g.Z)();(0,P.ZP)(l,r);const[p,E]=(0,Be.Z)(u,m),C=(0,a.Ye)((()=>c&&null!=p&&p.length&&i?p.map((e=>{const a=i[e];if(!a)return;const r=a.senderId?(0,b.dy)((0,s.Rd)(),a.senderId):void 0;let l;if(o&&(0,f.eA)(o))l=o;else if(a.forwardInfo){const{isChannelPost:e,fromChatId:t}=a.forwardInfo;l=e&&t?(0,b.Z1)((0,s.Rd)(),t):void 0}else l=a.senderId?(0,b.Z1)((0,s.Rd)(),a.senderId):void 0;return{message:a,senderUser:r,senderChat:l,onClick:()=>h({chatId:t,threadId:n,messageId:e})}})).filter(Boolean):wt.D),[c,p,i,o,h,t,n]),I=(0,xe.Z)(Z,!0,(e=>{const t=null==C?void 0:C[-1===e?0:e];t&&t.onClick()}),".ListItem-button",!0),y=(null==p?void 0:p[0])===(null==m?void 0:m[0]);return a.ZP.createElement(Ge.Z,{ref:Z,className:"RightSearch custom-scroll",items:C,preloadBackwards:0,onLoadMore:E,onKeyDown:I},y&&a.ZP.createElement("p",{key:"helper-text",className:"helper-text",dir:"auto"},c?0!==d&&C.length?1===d?"1 message found":`${C.length&&(d||C.length)} messages found`:v("lng_search_no_results"):v("lng_dlg_search_for_messages")),C.map((e=>{let{message:t,senderUser:n,senderChat:s,onClick:r}=e;const l=s?(0,f.U)(v,s):(0,f.Js)(n),o=(0,w.e)(v,t,void 0,c);return a.ZP.createElement(_e.Z,{key:t.id,teactOrderKey:-t.date,className:"chat-item-clickable search-result-message m-0",onClick:r},a.ZP.createElement(we.Z,{chat:s,user:n}),a.ZP.createElement("div",{className:"info"},a.ZP.createElement("div",{className:"title"},a.ZP.createElement("h3",{dir:"auto"},l&&(0,ke.Z)(l)),a.ZP.createElement(jr.Z,{message:t})),a.ZP.createElement("div",{className:"subtitle",dir:"auto"},o)))})))}))),Kr=(0,a.X$)((0,s.c$)(((e,t)=>{let{stickerSetId:n}=t;return{set:(0,b.Ny)(e,n),shouldPlay:(0,b.yB)(e)}}))((e=>{let{stickerSetId:t,observeIntersection:n,set:r,shouldPlay:l,isSomeModalOpen:i,onModalToggle:c}=e;const{loadStickers:m,toggleStickerSet:u}=(0,s.Sv)(),h=(0,g.Z)(),Z=r&&Boolean(r.installedDate),v=Boolean(null==r?void 0:r.stickers),[P,p,E]=(0,ee.Z)();(0,d.Z)((()=>{c(P)}),[P,c]);const C=(0,a.Ye)((()=>{if(!r)return[];const e=(r.covers||[]).map((e=>{let{id:t}=e;return t})),t=r.stickers?r.stickers.filter((t=>{let{id:n}=t;return!e.includes(n)})):[];return[...r.covers||[],...t].slice(0,5)}),[r]);(0,a.d4)((()=>{!v&&C.length<5&&m({stickerSetId:t})}),[v,C.length,m,t]);const f=(0,a.I4)((()=>{u({stickerSetId:t})}),[u,t]);if(!r)return;const b=C.length>0;return a.ZP.createElement("div",{key:r.id,className:"sticker-set",dir:h.isRtl?"rtl":void 0},a.ZP.createElement("div",{className:"sticker-set-header"},a.ZP.createElement("div",{className:"title-wrapper"},a.ZP.createElement("h3",{className:"title",dir:"auto"},r.title),a.ZP.createElement("p",{className:"count",dir:"auto"},h("Stickers",r.count,"i"))),a.ZP.createElement(B.Z,{className:Z?"is-added":void 0,color:"primary",size:"tiny",pill:!0,fluid:!0,onClick:f},h(Z?"Stickers.Installed":"Stickers.Install"))),a.ZP.createElement("div",{className:"sticker-set-main"},!b&&a.ZP.createElement(Y.Z,null),b&&C.map((e=>a.ZP.createElement(Kn.Z,{sticker:e,size:o.Y7,observeIntersection:n,noAnimate:!l||P||i,clickArg:void 0,onClick:p,noContextMenu:!0})))),b&&a.ZP.createElement(Qn.Z,{isOpen:P,fromSticker:C[0],onClose:E}))}))),Wr=(0,z.P2)((e=>e()),6e4,!0),Qr=(0,a.X$)((0,s.c$)((e=>{const t=(0,b.y5)(e),{query:n,resultIds:a}=t||{},{featured:s}=e.stickers;return{query:n,featuredIds:s.setIds,resultIds:a}}))((e=>{let{onClose:t,isActive:n,query:r,featuredIds:l,resultIds:o}=e;const{loadFeaturedStickers:i}=(0,s.Sv)(),c=(0,a.sO)(null),d=(0,g.Z)(),[m,u]=(0,a.eJ)(!1),{observe:h}=(0,jt.S1)({rootRef:c,throttleMs:200});return(0,a.d4)((()=>{Wr((()=>{i()}))})),(0,P.ZP)(n,t),a.ZP.createElement("div",{ref:c,className:"StickerSearch custom-scroll",dir:d.isRtl?"rtl":void 0},function(){if(void 0!==r)return!r&&l?l.map((e=>a.ZP.createElement(Kr,{key:e,stickerSetId:e,observeIntersection:h,isSomeModalOpen:m,onModalToggle:u}))):o?o.length?o.map((e=>a.ZP.createElement(Kr,{key:e,stickerSetId:e,observeIntersection:h,isSomeModalOpen:m,onModalToggle:u}))):a.ZP.createElement("p",{className:"helper-text",dir:"auto"},"Nothing found."):a.ZP.createElement(De.Z,null)}())}))),el=(0,a.X$)((0,s.c$)((e=>{const t=(0,b.yN)(e),{query:n,results:a}=t||{},{chatId:s,threadId:r}=(0,b.Bt)(e)||{},l=s?(0,b.Z1)(e,s):void 0;return{query:n,results:a,chat:l,isChatWithBot:l?(0,b.xo)(e,l):void 0,isSavedMessages:Boolean(s)&&(0,b.FM)(e,s),canPostInChat:Boolean(l)&&Boolean(r)&&(0,f.Qm)(l,r),canScheduleUntilOnline:Boolean(s)&&(0,b.Eh)(e,s)}}))((e=>{let{isActive:t,query:n,results:r,chat:l,isChatWithBot:o,canScheduleUntilOnline:c,isSavedMessages:d,canPostInChat:m,onClose:u}=e;const{searchMoreGifs:h,sendMessage:Z,setGifSearchQuery:v}=(0,s.Sv)(),p=(0,a.sO)(null),[E,C]=(0,Fs.Z)(c),{observe:b}=(0,jt.S1)({rootRef:p,debounceMs:300}),I=m&&(0,f.H5)(l,o).canSendGifs,y=(0,a.I4)(((e,t,n)=>{I&&(n?E((n=>{Z({gif:e,scheduledAt:n,isSilent:t})})):Z({gif:e,isSilent:t})),i.$b&&v({query:void 0})}),[I,E,Z,v]),S=(0,g.Z)();(0,P.ZP)(t,u);const N=Boolean(void 0!==n&&r&&r.length);return a.ZP.createElement("div",{className:"GifSearch",dir:S.isRtl?"rtl":void 0},a.ZP.createElement(Ge.Z,{ref:p,className:(0,H.Z)("gif-container custom-scroll",N&&"grid"),items:r,itemSelector:".GifButton",preloadBackwards:96,noFastList:!0,onLoadMore:h},function(){if(void 0!==n)return r?r.length?r.map((e=>a.ZP.createElement(yr,{key:e.id,gif:e,observeIntersection:b,onClick:I?y:void 0,isSavedMessages:d}))):a.ZP.createElement("p",{className:"helper-text",dir:"auto"},S("NoGIFsFound")):a.ZP.createElement(De.Z,null)}()),C)})));var tl=n(1226);const nl=[[{name:"followers",title:"ChannelStats.Overview.Followers"},{name:"enabledNotifications",title:"ChannelStats.Overview.EnabledNotifications",isPercentage:!0}],[{name:"viewsPerPost",title:"ChannelStats.Overview.ViewsPerPost"},{name:"sharesPerPost",title:"ChannelStats.Overview.SharesPerPost"}]],al=[[{name:"members",title:"Stats.GroupMembers"},{name:"messages",title:"Stats.GroupMessages"}],[{name:"viewers",title:"Stats.GroupViewers"},{name:"posters",title:"Stats.GroupPosters"}]],sl=(0,a.X$)((e=>{let{isGroup:t,statistics:n}=e;const s=(0,g.Z)(),{period:r}=n;return a.ZP.createElement("div",{className:"StatisticsOverview"},a.ZP.createElement("div",{className:"StatisticsOverview__header"},a.ZP.createElement("div",{className:"StatisticsOverview__title"},s("ChannelStats.Overview")),r&&a.ZP.createElement("div",{className:"StatisticsOverview__caption"},(0,te.Tu)(s,1e3*r.minDate)," — ",(0,te.Tu)(s,1e3*r.maxDate))),a.ZP.createElement("table",{className:"StatisticsOverview__table"},(t?al:nl).map((e=>a.ZP.createElement("tr",null,e.map((e=>{const t=n[e.name];return e.isPercentage?a.ZP.createElement("td",null,a.ZP.createElement("b",{className:"StatisticsOverview__table-value"},t.percentage,"%"),a.ZP.createElement("h3",{className:"StatisticsOverview__table-heading"},s(e.title))):a.ZP.createElement("td",null,a.ZP.createElement("b",{className:"StatisticsOverview__table-value"},(0,ft.bi)(t.current))," ",(e=>{let{change:t,percentage:n}=e;if(!t)return;const s=Number(t)<0;return a.ZP.createElement("span",{className:(0,H.Z)("StatisticsOverview__value",s&&"negative")},s?`-${(0,ft.bi)(Math.abs(t))}`:`+${(0,ft.bi)(t)}`,n&&a.ZP.createElement(a.ZP.Fragment,null," ","(",n,"%)"))})(t),a.ZP.createElement("h3",{className:"StatisticsOverview__table-heading"},s(e.title)))})))))))})),rl=(0,a.X$)((e=>{let{message:t}=e;const n=(0,g.Z)(),s=(0,f.DH)(t),r=(0,p.Z)((0,f.Ti)(t,"micro")),l=Boolean((0,f.Y5)(t));return a.ZP.createElement("p",{className:"StatisticsRecentMessage"},a.ZP.createElement("div",{className:"StatisticsRecentMessage__title"},a.ZP.createElement("div",{className:"StatisticsRecentMessage__summary"},function(e,t,n,s){return n?a.ZP.createElement("span",{className:"media-preview"},a.ZP.createElement("img",{src:n,alt:"",className:(0,H.Z)("media-preview__image",s&&"round")}),(0,f.b7)(t)&&a.ZP.createElement("i",{className:"icon-play"}),(0,w.e)(e,t,!0)):(0,w.e)(e,t)}(n,t,r||s,l)),a.ZP.createElement("div",{className:"StatisticsRecentMessage__meta"},n("ChannelStats.ViewsCount",t.views))),a.ZP.createElement("div",{className:"StatisticsRecentMessage__info"},a.ZP.createElement("div",{className:"StatisticsRecentMessage__date"},(0,te.SA)(1e3*t.date,n.code)),a.ZP.createElement("div",{className:"StatisticsRecentMessage__meta"},t.forwards?n("ChannelStats.SharesCount",t.forwards):"No shares")))}));let ll,ol;const il={growthGraph:"ChannelStats.Graph.Growth",followersGraph:"ChannelStats.Graph.Followers",muteGraph:"ChannelStats.Graph.Notifications",topHoursGraph:"ChannelStats.Graph.ViewsByHours",viewsBySourceGraph:"ChannelStats.Graph.ViewsBySource",newFollowersBySourceGraph:"ChannelStats.Graph.NewFollowersBySource",languagesGraph:"ChannelStats.Graph.Language",interactionsGraph:"ChannelStats.Graph.Interactions"},cl=Object.keys(il),dl={growthGraph:"Stats.GroupGrowthTitle",membersGraph:"Stats.GroupMembersTitle",languagesGraph:"Stats.GroupLanguagesTitle",messagesGraph:"Stats.GroupMessagesTitle",actionsGraph:"Stats.GroupActionsTitle",topHoursGraph:"Stats.GroupTopHoursTitle"},ml=Object.keys(dl),ul=(0,a.X$)((0,s.c$)(((e,t)=>{var n;let{chatId:a}=t;const s=(0,b.aT)(e,a),r=(0,b.Z1)(e,a);return{statistics:s,dcId:null==r||null===(n=r.fullInfo)||void 0===n?void 0:n.statisticsDcId,isGroup:"chatTypeSuperGroup"===(null==r?void 0:r.type)}}))((e=>{var t;let{chatId:r,isActive:l,statistics:o,dcId:i,isGroup:c}=e;const d=(0,g.Z)(),m=(0,a.sO)(null),[u,h]=(0,a.eJ)(!1),Z=(0,a.sO)([]),{loadStatistics:v,loadStatisticsAsyncGraph:P}=(0,s.Sv)();(0,a.d4)((()=>{v({chatId:r,isGroup:c})}),[r,v,c]),(0,a.d4)((()=>{l||(Z.current=[])}),[l]);const p=(0,a.Ye)((()=>c?ml:cl),[c]),E=(0,a.Ye)((()=>c?dl:il),[c]);return(0,a.d4)((()=>{o&&p.forEach((e=>{const t=o[e];"string"==typeof t&&P({name:e,chatId:r,token:t,isPercentage:"languagesGraph"===e})}))}),[p,r,o,P]),(0,a.d4)((()=>{(async()=>{await async function(){return ll||(ll=n.e(878).then(n.bind(n,8878)),ol=await ll),ll}(),u?o&&p.forEach(((e,t)=>{const n=o[e];if("string"==typeof n||Z.current.includes(e))return;const{zoomToken:a}=n;ol.create(m.current.children[t],{title:d(E[e]),...a&&{onZoom:e=>(0,tl.t9)("fetchStatisticsAsyncGraph",{token:a,x:e,dcId:i}),zoomOutLabel:d("Graph.ZoomOut")},...n}),Z.current.push(e)})):h(!0)})()}),[p,E,u,o,d,r,P,i]),u&&o?a.ZP.createElement("div",{className:(0,H.Z)("Statistics custom-scroll",u&&"ready")},a.ZP.createElement(sl,{statistics:o,isGroup:c}),!Z.current.length&&a.ZP.createElement(De.Z,null),a.ZP.createElement("div",{ref:m},p.map((e=>a.ZP.createElement("div",{className:(0,H.Z)("Statistics__graph",!Z.current.includes(e)&&"hidden")})))),Boolean(null===(t=o.recentTopMessages)||void 0===t?void 0:t.length)&&a.ZP.createElement("div",{className:"Statistics__messages"},a.ZP.createElement("h2",{className:"Statistics__messages-title"},d("ChannelStats.Recent.Header")),o.recentTopMessages.map((e=>a.ZP.createElement(rl,{message:e}))))):a.ZP.createElement(De.Z,null)}))),hl=(0,a.X$)((0,s.c$)(((e,t)=>{let{answer:n}=t;const{voters:a,offsets:s}=e.pollResults;return{voters:null==a?void 0:a[n.option],offset:(null==s?void 0:s[n.option])||""}}))((e=>{let{chat:t,message:n,answer:r,answerVote:l,totalVoters:o,voters:i,offset:c}=e;const{loadPollOptionResults:d,openChat:m,closePollResults:u}=(0,s.Sv)(),h=(0,C.Z)(l.votersCount),[Z,v]=(0,a.eJ)(!0),P=Boolean(i),{option:p,text:E}=r,f=(0,g.Z)();(0,a.d4)((()=>{P&&h===l.votersCount||d({chat:t,messageId:n.id,option:p,offset:c,limit:4,shouldResetVoters:!0})}),[l.votersCount,P]);const b=(0,a.I4)((()=>{v(!0),d({chat:t,messageId:n.id,option:p,offset:c,limit:50})}),[t,d,n.id,c,p]);(0,a.d4)((()=>{v(!1)}),[i]);const I=(0,a.I4)((e=>{m({id:e}),u()}),[u,m]);return a.ZP.createElement("div",{className:"PollAnswerResults"},a.ZP.createElement("div",{className:"poll-voters"},i?i.map((e=>a.ZP.createElement(_e.Z,{key:e,className:"chat-item-clickable",onClick:()=>I(e)},a.ZP.createElement(Xe.Z,{avatarSize:"tiny",userId:e,forceShowSelf:!0,noStatusOrTyping:!0})))):a.ZP.createElement(De.Z,null),i&&function(){const e=l.votersCount-i.length;return l.votersCount>4&&e>0&&a.ZP.createElement(Un,{count:e,itemName:"voter",isLoading:Z,onClick:b})}()),a.ZP.createElement("div",{className:"answer-head",dir:f.isRtl?"rtl":void 0},a.ZP.createElement("span",{className:"answer-title",dir:"auto"},E),a.ZP.createElement("span",{className:"answer-percent",dir:f.isRtl?"auto":void 0},(y=l.votersCount,(S=o)>0?(y/S*100).toFixed():0),"%")));var y,S}))),Zl=(0,a.X$)((0,s.c$)((e=>{const{pollResults:{chatId:t,messageId:n},lastSyncTime:a}=e;return t&&n?{chat:(0,b.Z1)(e,t),message:(0,b.hj)(e,t,n),lastSyncTime:a}:{}}))((e=>{let{onClose:t,isActive:n,chat:s,message:r,lastSyncTime:l}=e;const o=(0,g.Z)();if((0,P.ZP)(n,t),!r||!s)return a.ZP.createElement(De.Z,null);const{summary:i,results:c}=(0,f.t9)(r);if(!c.results)return;const d=(0,be.ee)(c.results,"option");return a.ZP.createElement("div",{className:"PollResults",dir:o.isRtl?"rtl":void 0},a.ZP.createElement("h3",{className:"poll-question",dir:"auto"},(0,ke.Z)(i.question,["emoji","br"])),a.ZP.createElement("div",{className:"poll-results-list custom-scroll"},l&&i.answers.map((e=>a.ZP.createElement(hl,{key:`${r.id}-${e.option}`,chat:s,message:r,answer:e,answerVote:d[e.option],totalVoters:c.totalVoters}))),!l&&a.ZP.createElement(De.Z,null)))}))),vl="Please provide first name",Pl=(0,a.X$)((0,s.c$)(((e,t)=>{let{userId:n}=t;const a=(0,b.dy)(e,n),s=(0,b.Z1)(e,n),{progress:r}=e.management;return{user:a,progress:r,isMuted:(0,f.i4)(s,(0,b.dZ)(e),(0,b.NJ)(e))}}))((e=>{let{userId:t,user:n,progress:r,isMuted:o,onClose:i,isActive:c}=e;const{updateContact:d,deleteContact:m,closeManagement:u}=(0,s.Sv)(),[h,Z,v]=(0,ee.Z)(),[p,E]=(0,a.eJ)(!1),[C,f]=(0,a.eJ)(),b=(0,g.Z)();(0,P.ZP)(c,i);const I=n&&n.firstName||"",y=n&&n.lastName||"",[S,N]=(0,a.eJ)(I),[k,w]=(0,a.eJ)(y),[M,T]=(0,a.eJ)(!o);(0,a.d4)((()=>{T(!o)}),[o]),(0,a.d4)((()=>{E(!1),v()}),[v,t]),(0,a.d4)((()=>{N(I),w(y)}),[I,y,n]),(0,a.d4)((()=>{r===l.wv.Complete&&(E(!1),f(void 0),v())}),[v,r]);const R=(0,a.I4)((e=>{N(e.target.value),E(!0)}),[]),A=(0,a.I4)((e=>{w(e.target.value),E(!0)}),[]),L=(0,a.I4)((e=>{T(e.target.checked),E(!0)}),[]),F=(0,a.I4)((()=>{const e=S.trim(),n=k.trim();e.length||f(vl),d({userId:t,isMuted:!M,firstName:e,lastName:n})}),[S,k,d,t,M]),B=(0,a.I4)((()=>{m({userId:t}),v(),u()}),[v,u,m,t]);if(!n)return;const x=r===l.wv.InProgress;return a.ZP.createElement("div",{className:"Management"},a.ZP.createElement("div",{className:"custom-scroll"},a.ZP.createElement("div",{className:"section"},a.ZP.createElement(Xe.Z,{userId:n.id,avatarSize:"jumbo",status:"original name",withFullInfo:!0}),a.ZP.createElement(Ue.Z,{id:"user-first-name",label:b("UserInfo.FirstNamePlaceholder"),onChange:R,value:S,error:C===vl?C:void 0}),a.ZP.createElement(Ue.Z,{id:"user-last-name",label:b("UserInfo.LastNamePlaceholder"),onChange:A,value:k}),a.ZP.createElement("div",{className:"ListItem no-selection narrow"},a.ZP.createElement(ct.Z,{checked:M,label:b("Notifications"),subLabel:b(M?"UserInfo.NotificationsEnabled":"UserInfo.NotificationsDisabled"),onChange:L}))),a.ZP.createElement("div",{className:"section"},a.ZP.createElement(_e.Z,{icon:"delete",ripple:!0,destructive:!0,onClick:Z},b("DeleteContact")))),a.ZP.createElement(Sn.Z,{isShown:p,onClick:F,disabled:x,ariaLabel:b("Save")},x?a.ZP.createElement(Y.Z,{color:"white"}):a.ZP.createElement("i",{className:"icon-check"})),a.ZP.createElement(Qe.Z,{isOpen:h,onClose:v,text:b("AreYouSureDeleteContact"),confirmLabel:b("DeleteContact"),confirmHandler:B,confirmIsDestructive:!0}))}))),gl="Group title can't be empty",pl=(0,a.X$)((0,s.c$)(((e,t)=>{var n,a;let{chatId:s}=t;const r=(0,b.Z1)(e,s),{progress:l}=e.management,o=Boolean(null===(n=r.fullInfo)||void 0===n?void 0:n.linkedChatId),i=(0,f.G9)(r),{invites:c}=e.management.byChatId[s]||{};return{chat:r,progress:l,isBasicGroup:i,hasLinkedChannel:o,canChangeInfo:i?r.isCreator:(0,f.VE)(r,"changeInfo"),canBanUsers:i?r.isCreator:(0,f.VE)(r,"banUsers"),canInvite:i?r.isCreator:(0,f.VE)(r,"inviteUsers"),exportedInvites:c,lastSyncTime:e.lastSyncTime,availableReactionsCount:null===(a=e.availableReactions)||void 0===a?void 0:a.filter((e=>!e.isInactive)).length}}))((e=>{var t,n,o,i,c,d;let{chatId:m,chat:u,progress:h,isBasicGroup:Z,hasLinkedChannel:v,canChangeInfo:E,canBanUsers:C,canInvite:b,onScreenSelect:I,onClose:y,isActive:S,exportedInvites:N,lastSyncTime:k,availableReactionsCount:w}=e;const{togglePreHistoryHidden:M,updateChat:T,deleteChat:R,leaveChannel:A,deleteChannel:L,closeManagement:F,openChat:B,loadExportedChatInvites:x,loadChatJoinRequests:$}=(0,s.Sv)(),[D,O,U]=(0,ee.Z)(),G=u.title,_=u.fullInfo&&u.fullInfo.about||"",[J,X]=(0,a.eJ)(!1),[z,H]=(0,a.eJ)(G||""),[V,j]=(0,a.eJ)(_),[q,K]=(0,a.eJ)(),[W,Q]=(0,a.eJ)(),te=(0,f.RT)(u),ne=(0,p.Z)(te,!1,r.IU.BlobUrl),ae=u.username||v,se=(0,g.Z)();(0,P.ZP)(S,y),(0,a.d4)((()=>{k&&b&&(x({chatId:m}),x({chatId:m,isRevoked:!0}),$({chatId:m}))}),[m,x,k,b,$]),(0,a.d4)((()=>{h===l.wv.Complete&&(X(!1),Q(void 0))}),[h]);const re=(0,a.I4)((()=>{I(l.u1.ChatPrivacyType)}),[I]),le=(0,a.I4)((()=>{I(l.u1.Discussion)}),[I]),oe=(0,a.I4)((()=>{I(l.u1.Reactions)}),[I]),ie=(0,a.I4)((()=>{I(l.u1.GroupPermissions)}),[I]),ce=(0,a.I4)((()=>{I(l.u1.ChatAdministrators)}),[I]),de=(0,a.I4)((()=>{I(l.u1.Invites)}),[I]),me=(0,a.I4)((()=>{I(l.u1.JoinRequests)}),[I]),ue=(0,a.I4)((e=>{K(e),X(!0)}),[]),he=(0,a.I4)((e=>{H(e.target.value),X(!0)}),[]),Ze=(0,a.I4)((e=>{j(e.target.value),X(!0)}),[]),ve=(0,a.I4)((()=>{const e=z.trim(),t=V.trim();e.length?T({chatId:m,title:e,about:t,photo:q}):Q(gl)}),[V,m,q,z,T]),Pe=(0,a.I4)((()=>{I(l.u1.GroupMembers)}),[I]),ge=(0,a.I4)((()=>{if(!u.fullInfo)return;const{isPreHistoryHidden:e}=u.fullInfo;M({chatId:u.id,isEnabled:!e})}),[u,M]),pe=(null===(t=u.fullInfo)||void 0===t||null===(n=t.enabledReactions)||void 0===n?void 0:n.length)||0,Ee=(0,a.Ye)((()=>{if(!u.defaultBannedRights)return 0;let e=["sendMessages","sendMedia","embedLinks","sendPolls","changeInfo","inviteUsers","pinMessages"].filter((e=>!u.defaultBannedRights[e])).length;const{sendStickers:t,sendGifs:n}=u.defaultBannedRights;return t||n||(e+=1),e}),[u]),Ce=(null===(o=u.fullInfo)||void 0===o||null===(i=o.adminMembers)||void 0===i?void 0:i.length)||0,fe=(0,a.I4)((()=>{Z?R({chatId:u.id}):u.isCreator?L({chatId:u.id}):A({chatId:u.id}),U(),F(),B({id:void 0})}),[Z,u.isCreator,u.id,U,F,A,L,R,B]);if(u.isRestricted)return;const be=h===l.wv.InProgress;return a.ZP.createElement("div",{className:"Management"},a.ZP.createElement("div",{className:"custom-scroll"},a.ZP.createElement("div",{className:"section"},a.ZP.createElement(yn.Z,{currentAvatarBlobUrl:ne,onChange:ue,disabled:!E}),a.ZP.createElement(Ue.Z,{id:"group-title",label:se("GroupName"),onChange:he,value:z,error:W===gl?W:void 0,disabled:!E}),a.ZP.createElement(Ue.Z,{id:"group-about",className:"mb-2",label:se("DescriptionPlaceholder"),onChange:Ze,value:V,disabled:!E}),u.isCreator&&a.ZP.createElement(_e.Z,{icon:"lock",multiline:!0,onClick:re},a.ZP.createElement("span",{className:"title"},se("GroupType")),a.ZP.createElement("span",{className:"subtitle"},u.username?se("TypePublic"):se("TypePrivate"))),v&&a.ZP.createElement(_e.Z,{icon:"message",multiline:!0,onClick:le},a.ZP.createElement("span",{className:"title"},se("LinkedChannel")),a.ZP.createElement("span",{className:"subtitle"},se("DiscussionUnlink"))),a.ZP.createElement(_e.Z,{icon:"permissions",multiline:!0,onClick:ie,disabled:!C},a.ZP.createElement("span",{className:"title"},se("ChannelPermissions")),a.ZP.createElement("span",{className:"subtitle",dir:"auto"},Ee,"/",8)),a.ZP.createElement(_e.Z,{icon:"reactions",multiline:!0,onClick:oe,disabled:!E},a.ZP.createElement("span",{className:"title"},se("Reactions")),a.ZP.createElement("span",{className:"subtitle",dir:"auto"},pe,"/",w)),a.ZP.createElement(_e.Z,{icon:"admin",multiline:!0,onClick:ce},a.ZP.createElement("span",{className:"title"},se("ChannelAdministrators")),a.ZP.createElement("span",{className:"subtitle"},(0,ft.kh)(Ce))),b&&a.ZP.createElement(_e.Z,{icon:"link",onClick:de,multiline:!0,disabled:!N},a.ZP.createElement("span",{className:"title"},se("GroupInfo.InviteLinks")),a.ZP.createElement("span",{className:"subtitle"},N?(0,ft.kh)(N.length):se("Loading"))),Boolean(null===(c=u.joinRequests)||void 0===c?void 0:c.length)&&a.ZP.createElement(_e.Z,{icon:"add-user-filled",onClick:me,multiline:!0},a.ZP.createElement("span",{className:"title"},se("MemberRequests")),a.ZP.createElement("span",{className:"subtitle"},(0,ft.kh)(u.joinRequests.length)))),a.ZP.createElement("div",{className:"section"},a.ZP.createElement(_e.Z,{icon:"group",multiline:!0,onClick:Pe},a.ZP.createElement("span",{className:"title"},se("GroupMembers")),a.ZP.createElement("span",{className:"subtitle"},(0,ft.kh)(null!==(d=u.membersCount)&&void 0!==d?d:0))),!ae&&u.fullInfo&&a.ZP.createElement("div",{className:"ListItem narrow no-selection"},a.ZP.createElement(ct.Z,{checked:!u.fullInfo.isPreHistoryHidden,label:se("ChatHistory"),onChange:ge,disabled:!C}))),a.ZP.createElement("div",{className:"section"},a.ZP.createElement(_e.Z,{icon:"delete",ripple:!0,destructive:!0,onClick:O},se("DeleteMega")))),a.ZP.createElement(Sn.Z,{isShown:J,onClick:ve,disabled:be,ariaLabel:se("Save")},be?a.ZP.createElement(Y.Z,{color:"white"}):a.ZP.createElement("i",{className:"icon-check"})),a.ZP.createElement(Qe.Z,{isOpen:D,onClose:U,textParts:(0,ke.Z)(Z||!u.isCreator?se("AreYouSureDeleteAndExit"):se("AreYouSureDeleteThisChatWithGroup",u.title),["br","simple_markdown"]),confirmLabel:Z||!u.isCreator?se("DeleteMega"):se("DeleteGroupForAll"),confirmHandler:fe,confirmIsDestructive:!0}))}))),El=(0,a.X$)((0,s.c$)(((e,t)=>{let{chatId:n}=t;return{chat:(0,b.Z1)(e,n),currentUserId:e.currentUserId}}))((e=>{let{onScreenSelect:t,onChatMemberSelect:n,chat:r,currentUserId:o,onClose:i,isActive:c}=e;const{updateChatDefaultBannedRights:d}=(0,s.Sv)(),[m,u]=(0,a.eJ)({}),[h,Z]=(0,a.eJ)(!1),[v,p]=(0,a.eJ)(!1),E=(0,g.Z)();(0,P.ZP)(c,i);const C=(0,a.I4)((()=>{t(l.u1.GroupRemovedUsers)}),[t]),f=(0,a.I4)((()=>{t(l.u1.GroupUserPermissionsCreate)}),[t]),b=(0,a.I4)((e=>{n(e.userId,e.promotedByUserId===o),t(l.u1.GroupUserPermissions)}),[o,n,t]);(0,a.d4)((()=>{u((null==r?void 0:r.defaultBannedRights)||{}),Z(!1),setTimeout((()=>{p(!1)}),250)}),[r]);const I=(0,a.I4)((e=>{const{name:t}=e.target;function n(e){return!e||void 0}u((e=>({...e,[t]:n(e[t]),..."sendStickers"===t&&{sendGifs:n(e[t])}}))),Z(!0)}),[]),y=(0,a.I4)((()=>{r&&(p(!0),d({chatId:r.id,bannedRights:m}))}),[r,m,d]),S=(0,a.Ye)((()=>r&&r.fullInfo&&r.fullInfo.kickedMembers?r.fullInfo.kickedMembers.length:0),[r]),N=(0,a.Ye)((()=>r&&r.fullInfo&&r.fullInfo.members?r.fullInfo.members.filter((e=>{let{bannedRights:t}=e;return Boolean(t)})):[]),[r]),k=(0,a.I4)((e=>{const{bannedRights:t}=e;if(!t||!r)return;const{defaultBannedRights:n}=r;return Object.keys(t).reduce(((e,a)=>{if(!t[a]||null!=n&&n[a]||"sendInline"===a||"viewMessages"===a||"sendGames"===a)return e;const s=function(e){switch(e){case"sendMessages":return"UserRestrictionsNoSend";case"sendMedia":return"UserRestrictionsNoSendMedia";case"sendStickers":return"UserRestrictionsNoSendStickers";case"embedLinks":return"UserRestrictionsNoEmbedLinks";case"sendPolls":return"UserRestrictionsNoSendPolls";case"changeInfo":return"UserRestrictionsNoChangeInfo";case"inviteUsers":return"UserRestrictionsInviteUsers";case"pinMessages":return"UserRestrictionsPinMessages";default:return}}(a);if(!s)return e;const r=E(s);return`${e}${e.length?`, ${r}`:r}`}),"")}),[r,E]);return a.ZP.createElement("div",{className:"Management"},a.ZP.createElement("div",{className:"custom-scroll"},a.ZP.createElement("div",{className:"section"},a.ZP.createElement("h3",{className:"section-heading",dir:"auto"},E("ChannelPermissionsHeader")),a.ZP.createElement("div",{className:"ListItem no-selection"},a.ZP.createElement(ct.Z,{name:"sendMessages",checked:!m.sendMessages,label:E("UserRestrictionsSend"),blocking:!0,onChange:I})),a.ZP.createElement("div",{className:"ListItem no-selection"},a.ZP.createElement(ct.Z,{name:"sendMedia",checked:!m.sendMedia,label:E("UserRestrictionsSendMedia"),blocking:!0,onChange:I})),a.ZP.createElement("div",{className:"ListItem no-selection"},a.ZP.createElement(ct.Z,{name:"sendStickers",checked:!m.sendStickers&&!m.sendGifs,label:E("UserRestrictionsSendStickers"),blocking:!0,onChange:I})),a.ZP.createElement("div",{className:"ListItem no-selection"},a.ZP.createElement(ct.Z,{name:"sendPolls",checked:!m.sendPolls,label:E("UserRestrictionsSendPolls"),blocking:!0,onChange:I})),a.ZP.createElement("div",{className:"ListItem no-selection"},a.ZP.createElement(ct.Z,{name:"embedLinks",checked:!m.embedLinks,label:E("UserRestrictionsEmbedLinks"),blocking:!0,onChange:I})),a.ZP.createElement("div",{className:"ListItem no-selection"},a.ZP.createElement(ct.Z,{name:"inviteUsers",checked:!m.inviteUsers,label:E("UserRestrictionsInviteUsers"),blocking:!0,onChange:I})),a.ZP.createElement("div",{className:"ListItem no-selection"},a.ZP.createElement(ct.Z,{name:"pinMessages",checked:!m.pinMessages,label:E("UserRestrictionsPinMessages"),blocking:!0,onChange:I})),a.ZP.createElement("div",{className:"ListItem no-selection"},a.ZP.createElement(ct.Z,{name:"changeInfo",checked:!m.changeInfo,label:E("UserRestrictionsChangeInfo"),blocking:!0,onChange:I}))),a.ZP.createElement("div",{className:"section"},a.ZP.createElement(_e.Z,{icon:"delete-user",multiline:!0,narrow:!0,onClick:C},a.ZP.createElement("span",{className:"title"},E("ChannelBlockedUsers")),a.ZP.createElement("span",{className:"subtitle"},S))),a.ZP.createElement("div",{className:"section"},a.ZP.createElement("h3",{className:"section-heading",dir:"auto"},E("PrivacyExceptions")),a.ZP.createElement(_e.Z,{icon:"add-user",onClick:f},E("ChannelAddException")),N.map((e=>a.ZP.createElement(_e.Z,{key:e.userId,className:"chat-item-clickable exceptions-member",onClick:()=>b(e)},a.ZP.createElement(Xe.Z,{userId:e.userId,status:k(e)})))))),a.ZP.createElement(Sn.Z,{isShown:h,onClick:y,ariaLabel:E("Save"),disabled:v},v?a.ZP.createElement(Y.Z,{color:"white"}):a.ZP.createElement("i",{className:"icon-check"})))}))),Cl=(0,a.X$)((0,s.c$)((e=>{const{currentUserId:t}=e;return{currentUserId:t}}))((e=>{var t;let{chat:n,currentUserId:r,isOpen:l,onClose:o}=e;const{loadMoreMembers:i,deleteChatMember:c}=(0,s.Sv)(),d=(0,g.Z)(),[m,u]=(0,a.eJ)(""),h=(0,a.sO)(null),Z=(0,a.Ye)((()=>{var e;const t=((null===(e=n.fullInfo)||void 0===e?void 0:e.members)||[]).reduce(((e,t)=>(t.isAdmin||t.isOwner||t.userId===r||e.push(t.userId),e)),[]),a=(0,s.Rd)().users.byId;return(0,f.kK)(t,a,m)}),[null===(t=n.fullInfo)||void 0===t?void 0:t.members,r,m]),v=(0,a.I4)((e=>{c({chatId:n.id,userId:e}),o()}),[n.id,c,o]);return a.ZP.createElement(ze,{isOpen:l,chatOrUserIds:Z,filterRef:h,filterPlaceholder:d("ChannelBlockUser"),filter:m,onFilterChange:u,loadMore:i,onSelectChatOrUser:v,onClose:o})}))),fl=(0,a.X$)((0,s.c$)(((e,t)=>{let{chatId:n}=t;const a=(0,b.Z1)(e,n),{byId:s}=e.users;return{chat:a,usersById:s,canDeleteMembers:a&&((0,f.VE)(a,"banUsers")||a.isCreator),isChannel:a&&(0,f.eA)(a)}}))((e=>{let{chat:t,usersById:n,canDeleteMembers:r,isChannel:l,onClose:o,isActive:i}=e;const{updateChatMemberBannedRights:c}=(0,s.Sv)(),d=(0,g.Z)(),[m,u,h]=(0,ee.Z)();(0,P.ZP)(i,o);const Z=(0,a.Ye)((()=>t&&t.fullInfo&&t.fullInfo.kickedMembers?t.fullInfo.kickedMembers:[]),[t]),v=(0,a.I4)((e=>{if(!e.kickedByUserId)return;const t=n[e.kickedByUserId];return t?d("UserRemovedBy",(0,f.Js)(t)):void 0}),[d,n]),p=(0,a.I4)((e=>{if(t)return[{title:d("Unblock"),icon:"delete",destructive:!0,handler:()=>c({chatId:t.id,userId:e.userId,bannedRights:{}})}]}),[d,t,c]);return a.ZP.createElement("div",{className:"Management"},a.ZP.createElement("div",{className:"custom-scroll"},a.ZP.createElement("div",{className:"section",dir:d.isRtl?"rtl":void 0},a.ZP.createElement("p",{className:"text-muted"},d(l?"NoBlockedChannel2":"NoBlockedGroup2")),Z.map((e=>a.ZP.createElement(_e.Z,{key:e.userId,className:"chat-item-clickable",ripple:!0,contextActions:p(e)},a.ZP.createElement(Xe.Z,{userId:e.userId,status:v(e)})))),r&&a.ZP.createElement(Sn.Z,{isShown:!0,onClick:u,ariaLabel:d("Channel.EditAdmin.Permission.BanUsers")},a.ZP.createElement("i",{className:"icon-add-user-filled"})),t&&r&&a.ZP.createElement(Cl,{chat:t,isOpen:m,onClose:h}))))}))),bl="Channel title can't be empty",Il=(0,a.X$)((0,s.c$)(((e,t)=>{var n;let{chatId:a}=t;const s=(0,b.Z1)(e,a),{progress:r}=e.management,l=Boolean(null==s?void 0:s.isSignaturesShown),{invites:o}=e.management.byChatId[a]||{};return{chat:s,progress:r,isSignaturesShown:l,canChangeInfo:(0,f.VE)(s,"changeInfo"),canInvite:(0,f.VE)(s,"inviteUsers"),lastSyncTime:e.lastSyncTime,exportedInvites:o,availableReactionsCount:null===(n=e.availableReactions)||void 0===n?void 0:n.filter((e=>!e.isInactive)).length}}))((e=>{var t,n,o,i,c,d,m,u,h;let{chatId:Z,chat:v,progress:E,isSignaturesShown:C,canChangeInfo:b,canInvite:I,exportedInvites:y,lastSyncTime:S,availableReactionsCount:N,onScreenSelect:k,onClose:w,isActive:M}=e;const{updateChat:T,toggleSignatures:R,closeManagement:A,leaveChannel:L,deleteChannel:F,openChat:B,loadExportedChatInvites:x,loadChatJoinRequests:$}=(0,s.Sv)(),D=v&&v.title||"",O=null!=v&&v.fullInfo&&v.fullInfo.about||"",U=null==v||null===(t=v.fullInfo)||void 0===t?void 0:t.linkedChatId,[G,_,J]=(0,ee.Z)(),[X,z]=(0,a.eJ)(!1),[H,V]=(0,a.eJ)(D),[j,q]=(0,a.eJ)(O),[K,W]=(0,a.eJ)(),[Q,te]=(0,a.eJ)(),ne=v&&(0,f.RT)(v),ae=(0,p.Z)(ne,!1,r.IU.BlobUrl),se=(0,g.Z)();(0,P.ZP)(M,w),(0,a.d4)((()=>{S&&(x({chatId:Z}),x({chatId:Z,isRevoked:!0}),$({chatId:Z}))}),[Z,x,S,$]),(0,a.d4)((()=>{E===l.wv.Complete&&(z(!1),te(void 0))}),[E]);const re=(null==v||null===(n=v.fullInfo)||void 0===n||null===(o=n.adminMembers)||void 0===o?void 0:o.length)||0,le=(null==v||null===(i=v.fullInfo)||void 0===i||null===(c=i.kickedMembers)||void 0===c?void 0:c.length)||0,oe=(0,a.I4)((()=>{k(l.u1.ChatPrivacyType)}),[k]),ie=(0,a.I4)((()=>{k(l.u1.Discussion)}),[k]),ce=(0,a.I4)((()=>{k(l.u1.Reactions)}),[k]),de=(0,a.I4)((()=>{k(l.u1.ChatAdministrators)}),[k]),me=(0,a.I4)((()=>{k(l.u1.Invites)}),[k]),ue=(0,a.I4)((()=>{k(l.u1.JoinRequests)}),[k]),he=(0,a.I4)((e=>{W(e),z(!0)}),[]),Ze=(0,a.I4)((e=>{V(e.target.value),z(!0)}),[]),ve=(0,a.I4)((e=>{q(e.target.value),z(!0)}),[]),Pe=(0,a.I4)((()=>{const e=H.trim(),t=j.trim();e.length?T({chatId:Z,title:e,about:t,photo:K}):te(bl)}),[j,Z,K,H,T]),ge=(0,a.I4)((()=>{R({chatId:Z,isEnabled:!C})}),[Z,C,R]),pe=(0,a.I4)((()=>{k(l.u1.ChannelSubscribers)}),[k]),Ee=(0,a.I4)((()=>{k(l.u1.ChannelRemovedUsers)}),[k]),Ce=(0,a.I4)((()=>{v.isCreator?F({chatId:v.id}):L({chatId:v.id}),J(),A(),B({id:void 0})}),[v.isCreator,v.id,J,A,L,F,B]),fe=(null===(d=v.fullInfo)||void 0===d||null===(m=d.enabledReactions)||void 0===m?void 0:m.length)||0;if(v.isRestricted)return;const be=E===l.wv.InProgress;return a.ZP.createElement("div",{className:"Management"},a.ZP.createElement("div",{className:"custom-scroll"},a.ZP.createElement("div",{className:"section"},a.ZP.createElement(yn.Z,{currentAvatarBlobUrl:ae,onChange:he,disabled:!b}),a.ZP.createElement(Ue.Z,{id:"channel-title",label:se("EnterChannelName"),onChange:Ze,value:H,error:Q===bl?Q:void 0,disabled:!b}),a.ZP.createElement(Ue.Z,{id:"channel-about",className:"mb-2",label:se("DescriptionPlaceholder"),onChange:ve,value:j,disabled:!b}),v.isCreator&&a.ZP.createElement(_e.Z,{icon:"lock",multiline:!0,onClick:oe},a.ZP.createElement("span",{className:"title"},se("ChannelType")),a.ZP.createElement("span",{className:"subtitle"},v.username?se("TypePublic"):se("TypePrivate"))),a.ZP.createElement(_e.Z,{icon:"message",multiline:!0,onClick:ie,disabled:!b},a.ZP.createElement("span",{className:"title"},se("Discussion")),a.ZP.createElement("span",{className:"subtitle"},se(U?"DiscussionUnlink":"Add"))),I&&a.ZP.createElement(_e.Z,{icon:"link",onClick:me,multiline:!0,disabled:!y},a.ZP.createElement("span",{className:"title"},se("GroupInfo.InviteLinks")),a.ZP.createElement("span",{className:"subtitle"},y?(0,ft.kh)(y.length):se("Loading"))),Boolean(null===(u=v.joinRequests)||void 0===u?void 0:u.length)&&a.ZP.createElement(_e.Z,{icon:"add-user-filled",onClick:ue,multiline:!0},a.ZP.createElement("span",{className:"title"},se("SubscribeRequests")),a.ZP.createElement("span",{className:"subtitle"},(0,ft.kh)(v.joinRequests.length))),a.ZP.createElement(_e.Z,{icon:"reactions",multiline:!0,onClick:ce,disabled:!b},a.ZP.createElement("span",{className:"title"},se("Reactions")),a.ZP.createElement("span",{className:"subtitle",dir:"auto"},fe,"/",N)),a.ZP.createElement("div",{className:"ListItem no-selection narrow"},a.ZP.createElement(ct.Z,{checked:C,label:se("ChannelSignMessages"),onChange:ge}))),a.ZP.createElement("div",{className:"section"},a.ZP.createElement(_e.Z,{icon:"admin",multiline:!0,onClick:de},a.ZP.createElement("span",{className:"title"},se("ChannelAdministrators")),a.ZP.createElement("span",{className:"subtitle"},re)),a.ZP.createElement(_e.Z,{icon:"group",multiline:!0,onClick:pe},a.ZP.createElement("span",{className:"title",dir:"auto"},se("ChannelSubscribers")),a.ZP.createElement("span",{className:"subtitle",dir:"auto"},se("Subscribers",null!==(h=v.membersCount)&&void 0!==h?h:0,"i"))),a.ZP.createElement(_e.Z,{icon:"delete-user",multiline:!0,narrow:!0,onClick:Ee},a.ZP.createElement("span",{className:"title"},se("ChannelBlockedUsers")),a.ZP.createElement("span",{className:"subtitle"},le))),a.ZP.createElement("div",{className:"section"},a.ZP.createElement(_e.Z,{icon:"delete",ripple:!0,destructive:!0,onClick:_},v.isCreator?se("ChannelDelete"):se("LeaveChannel")))),a.ZP.createElement(Sn.Z,{isShown:X,onClick:Pe,disabled:be,ariaLabel:se("Save")},be?a.ZP.createElement(Y.Z,{color:"white"}):a.ZP.createElement("i",{className:"icon-check"})),a.ZP.createElement(Qe.Z,{isOpen:G,onClose:J,text:v.isCreator?se("ChannelDeleteAlert"):se("ChannelLeaveAlert"),confirmLabel:v.isCreator?se("ChannelDelete"):se("LeaveChannel"),confirmHandler:Ce,confirmIsDestructive:!0}))})));var yl=n(88);const Sl=(0,a.X$)((0,s.c$)(((e,t)=>{let{chatId:n}=t;const a=(0,b.Z1)(e,n),{isUsernameAvailable:s}=(0,b.aW)(e,n);return{chat:a,isChannel:(0,f.eA)(a),progress:e.management.progress,isUsernameAvailable:s,isProtected:null==a?void 0:a.isProtected}}))((e=>{var t;let{chat:n,onClose:r,isActive:o,isChannel:i,progress:c,isUsernameAvailable:d,isProtected:m}=e;const{checkPublicLink:u,updatePublicLink:h,updatePrivateLink:Z,toggleIsProtected:v}=(0,s.Sv)(),p=Boolean(n.username),E=null===(t=n.fullInfo)||void 0===t?void 0:t.inviteLink,[C,f]=(0,a.eJ)(p?"public":"private"),[b,I]=(0,a.eJ)(),[y,S,N]=(0,ee.Z)(),k=Boolean("public"===C&&b&&d||"private"===C&&p);(0,P.ZP)(o,r),(0,a.d4)((()=>{C&&!E&&Z()}),[C,E,Z]);const w=(0,a.I4)((e=>{f(e)}),[]),M=(0,a.I4)((e=>{v({chatId:n.id,isProtected:"protected"===e})}),[n.id,v]),T=(0,a.I4)((()=>{h({username:"public"===C?b:""})}),[C,h,b]),R=(0,a.I4)((()=>{N(),Z()}),[N,Z]),A=(0,g.Z)(),L=i?"Channel":"Mega",F=i?"Channel":"Group",B=[{value:"private",label:A(`${L}Private`),subLabel:A(`${L}PrivateInfo`)},{value:"public",label:A(`${L}Public`),subLabel:A(`${L}PublicInfo`)}],x=[{value:"allowed",label:A("ChannelVisibility.Forwarding.Enabled")},{value:"protected",label:A("ChannelVisibility.Forwarding.Disabled")}],$=c===l.wv.InProgress;return a.ZP.createElement("div",{className:"Management"},a.ZP.createElement("div",{className:"custom-scroll"},a.ZP.createElement("div",{className:"section",dir:A.isRtl?"rtl":void 0},a.ZP.createElement("h3",{className:"section-heading"},A(`${F}Type`)),a.ZP.createElement(gt.Z,{selected:C,name:"channel-type",options:B,onChange:w})),"private"===C?a.ZP.createElement("div",{className:"section",dir:A.isRtl?"rtl":void 0},E?a.ZP.createElement(a.ZP.Fragment,null,a.ZP.createElement(yl.Z,{url:E,className:"group-link",text:E}),a.ZP.createElement("p",{className:"section-info",dir:A.isRtl?"rtl":void 0},A(`${L}PrivateLinkHelp`)),a.ZP.createElement(_e.Z,{icon:"delete",ripple:!0,destructive:!0,onClick:S},A("RevokeLink")),a.ZP.createElement(Qe.Z,{isOpen:y,onClose:N,text:A("RevokeAlert"),confirmLabel:A("RevokeButton"),confirmHandler:R,confirmIsDestructive:!0})):a.ZP.createElement(De.Z,null)):a.ZP.createElement("div",{className:"section no-border"},a.ZP.createElement(Tn,{asLink:!0,currentUsername:n.username,isLoading:$,isUsernameAvailable:d,checkUsername:u,onChange:I}),a.ZP.createElement("p",{className:"section-info",dir:"auto"},A(`${F}.Username.CreatePublicLinkHelp`))),a.ZP.createElement("div",{className:"section",dir:A.isRtl?"rtl":void 0},a.ZP.createElement("h3",{className:"section-heading"},A(i?"ChannelVisibility.Forwarding.ChannelTitle":"ChannelVisibility.Forwarding.GroupTitle")),a.ZP.createElement(gt.Z,{selected:m?"protected":"allowed",name:"forwarding-type",options:x,onChange:M}),a.ZP.createElement("p",{className:"section-info"},A(i?"ChannelVisibility.Forwarding.ChannelInfo":"ChannelVisibility.Forwarding.GroupInfo")))),a.ZP.createElement(Sn.Z,{isShown:k,disabled:$,ariaLabel:A("Save"),onClick:T},$?a.ZP.createElement(Y.Z,{color:"white"}):a.ZP.createElement("i",{className:"icon-check"})))}))),Nl=(0,a.X$)((0,s.c$)(((e,t)=>{var n;let{chatId:a}=t;const s=(0,b.Z1)(e,a),{forDiscussionIds:r,byId:l}=e.chats;return{chat:s,chatsByIds:l,forDiscussionIds:r,linkedChat:null!=s&&null!==(n=s.fullInfo)&&void 0!==n&&n.linkedChatId?(0,b.Z1)(e,s.fullInfo.linkedChatId):void 0,isChannel:s&&(0,f.eA)(s)}}))((e=>{let{chat:t,onClose:n,isActive:r,chatId:i,chatsByIds:c,linkedChat:d,forDiscussionIds:m,isChannel:u,onScreenSelect:h}=e;const{loadGroupsForDiscussion:Z,linkDiscussionGroup:v,unlinkDiscussionGroup:p}=(0,s.Sv)(),[E,C]=(0,a.eJ)(),[f,b]=(0,a.eJ)(),[I,y]=(0,a.eJ)(!1),S=(0,a.I4)((()=>y(!0)),[]),[N,k,w]=(0,ee.Z)(),[M,T,R]=(0,ee.Z)(),A=(0,g.Z)(),L=null==d?void 0:d.id;(0,P.ZP)(r,n),(0,a.d4)((()=>{Z()}),[Z]),(0,a.d4)((()=>{f||(0,yt.Z)("DiscussionGroups").then(b)}),[f]);const F=(0,a.I4)((()=>{w(),p({channelId:u?i:L}),u||h(l.u1.Initial)}),[w,p,u,i,L,h]),B=(0,a.I4)((()=>{R(),v({channelId:i,chatId:E})}),[R,v,i,E]);return a.ZP.createElement("div",{className:"Management"},a.ZP.createElement("div",{className:"custom-scroll"},a.ZP.createElement("div",{className:"section"},a.ZP.createElement("div",{className:"section-icon"},f&&a.ZP.createElement(St.Z,{id:"discussionGroupsDucks",size:o.bM,animationData:f,play:I,noLoop:!0,onLoad:S})),d&&a.ZP.createElement("div",null,a.ZP.createElement(_e.Z,{className:"chat-item-clickable",inactive:!0},a.ZP.createElement(Je.Z,{chatId:d.id})),a.ZP.createElement(_e.Z,{icon:"delete",ripple:!0,destructive:!0,onClick:k},A(u?"DiscussionUnlinkGroup":"DiscussionUnlinkChannel")),a.ZP.createElement(Qe.Z,{isOpen:N,onClose:w,header:a.ZP.createElement("div",{className:"modal-header"},a.ZP.createElement(we.Z,{size:"tiny",chat:d}),a.ZP.createElement("div",{className:"modal-title"},A(u?"DiscussionUnlinkGroup":"DiscussionUnlinkChannel"))),textParts:(0,ke.Z)(A(u?"DiscussionUnlinkChannelAlert":"DiscussionUnlinkGroupAlert",d.title),["br","simple_markdown"]),confirmLabel:A(u?"DiscussionUnlinkGroup":"DiscussionUnlinkChannel"),confirmHandler:F,confirmIsDestructive:!0})),!d&&a.ZP.createElement("div",null,a.ZP.createElement("p",{className:"section-help",dir:"auto"},A("DiscussionChannelHelp")),a.ZP.createElement("div",{teactFastList:!0},a.ZP.createElement(_e.Z,{key:"create-group",icon:"group",ripple:!0,teactOrderKey:0,className:"not-implemented"},A("DiscussionCreateGroup")),m?m.map(((e,t)=>a.ZP.createElement(_e.Z,{key:e,teactOrderKey:t+1,className:"chat-item-clickable scroll-item",onClick:()=>{C(e),T()}},a.ZP.createElement(Je.Z,{chatId:e})))):a.ZP.createElement(Gt.Z,{key:"nothing-found",teactOrderKey:0,text:"No discussion groups found"})),a.ZP.createElement("p",{className:"mt-4 mb-0 section-help",dir:"auto"},A("DiscussionChannelHelp2")),a.ZP.createElement(Qe.Z,{isOpen:M,onClose:R,header:function(){const e=c[E];if(e)return a.ZP.createElement("div",{className:"modal-header"},a.ZP.createElement(we.Z,{size:"tiny",chat:e}),a.ZP.createElement("div",{className:"modal-title"},A("Channel.DiscussionGroup.LinkGroup")))}(),textParts:function(){const e=c[E];if(e)return e.hasPrivateLink?(0,ke.Z)(`Do you want to make **${e.title}** the discussion board for **${t.title}**?`,["br","simple_markdown"]):(0,ke.Z)(`Do you want to make **${e.title}** the discussion board for **${t.title}**?\n\nAnyone from the channel will be able to see messages in this group.`,["br","simple_markdown"])}(),confirmLabel:A("DiscussionLinkGroup"),confirmHandler:B,isButtonsInOneRow:!0})))))}))),kl=(0,a.X$)((0,s.c$)(((e,t)=>{let{chatId:n,isPromotedByCurrentUser:a}=t;const s=(0,b.Z1)(e,n);return{chat:s,isFormFullyDisabled:!(s.isCreator||a)}}))((e=>{let{chat:t,selectedChatMemberId:n,onScreenSelect:r,isFormFullyDisabled:o,onClose:i,isActive:c}=e;const{updateChatMemberBannedRights:d}=(0,s.Sv)(),[m,u]=(0,a.eJ)({}),[h,Z]=(0,a.eJ)(!1),[v,p]=(0,a.eJ)(!1),[E,C,f]=(0,ee.Z)(),b=(0,g.Z)();(0,P.ZP)(c,i);const I=(0,a.Ye)((()=>{if(t&&t.fullInfo&&t.fullInfo.members)return t.fullInfo.members.find((e=>{let{userId:t}=e;return t===n}))}),[t,n]);(0,a.d4)((()=>{null!=t&&t.fullInfo&&n&&!I&&r(l.u1.GroupPermissions)}),[t,r,I,n]),(0,a.d4)((()=>{u((null==I?void 0:I.bannedRights)||(null==t?void 0:t.defaultBannedRights)||{}),Z(!1),p(!1)}),[t,I]);const y=(0,a.I4)((e=>{const{name:t}=e.target;function n(e){return!e||void 0}u((e=>({...e,[t]:n(e[t]),..."sendStickers"===t&&{sendGifs:n(e[t])}}))),Z(!0)}),[]),S=(0,a.I4)((()=>{t&&n&&(p(!0),d({chatId:t.id,userId:n,bannedRights:m}))}),[t,n,m,d]),N=(0,a.I4)((()=>{t&&n&&d({chatId:t.id,userId:n,bannedRights:{viewMessages:!0}})}),[t,n,d]),k=(0,a.I4)((e=>!!o||!(!t||!t.defaultBannedRights)&&t.defaultBannedRights[e]),[t,o]);if(I)return a.ZP.createElement("div",{className:"Management"},a.ZP.createElement("div",{className:"custom-scroll"},a.ZP.createElement("div",{className:"section"},a.ZP.createElement(_e.Z,{inactive:!0,className:"chat-item-clickable"},a.ZP.createElement(Xe.Z,{userId:I.userId})),a.ZP.createElement("h3",{className:"section-heading mt-4",dir:"auto"},b("UserRestrictionsCanDo")),a.ZP.createElement("div",{className:"ListItem no-selection"},a.ZP.createElement(ct.Z,{name:"sendMessages",checked:!m.sendMessages,label:b("UserRestrictionsSend"),blocking:!0,disabled:k("sendMessages"),onChange:y})),a.ZP.createElement("div",{className:"ListItem no-selection"},a.ZP.createElement(ct.Z,{name:"sendMedia",checked:!m.sendMedia,label:b("UserRestrictionsSendMedia"),blocking:!0,disabled:k("sendMedia"),onChange:y})),a.ZP.createElement("div",{className:"ListItem no-selection"},a.ZP.createElement(ct.Z,{name:"sendStickers",checked:!m.sendStickers&&!m.sendGifs,label:b("UserRestrictionsSendStickers"),blocking:!0,disabled:k("sendStickers"),onChange:y})),a.ZP.createElement("div",{className:"ListItem no-selection"},a.ZP.createElement(ct.Z,{name:"sendPolls",checked:!m.sendPolls,label:b("UserRestrictionsSendPolls"),blocking:!0,disabled:k("sendPolls"),onChange:y})),a.ZP.createElement("div",{className:"ListItem no-selection"},a.ZP.createElement(ct.Z,{name:"embedLinks",checked:!m.embedLinks,label:b("UserRestrictionsEmbedLinks"),blocking:!0,disabled:k("embedLinks"),onChange:y})),a.ZP.createElement("div",{className:"ListItem no-selection"},a.ZP.createElement(ct.Z,{name:"inviteUsers",checked:!m.inviteUsers,label:b("UserRestrictionsInviteUsers"),blocking:!0,disabled:k("inviteUsers"),onChange:y})),a.ZP.createElement("div",{className:"ListItem no-selection"},a.ZP.createElement(ct.Z,{name:"pinMessages",checked:!m.pinMessages,label:b("UserRestrictionsPinMessages"),blocking:!0,disabled:k("pinMessages"),onChange:y})),a.ZP.createElement("div",{className:"ListItem no-selection"},a.ZP.createElement(ct.Z,{name:"changeInfo",checked:!m.changeInfo,label:b("UserRestrictionsChangeInfo"),blocking:!0,disabled:k("changeInfo"),onChange:y}))),!o&&a.ZP.createElement("div",{className:"section"},a.ZP.createElement(_e.Z,{icon:"delete-user",ripple:!0,destructive:!0,onClick:C},b("UserRestrictionsBlock")))),a.ZP.createElement(Sn.Z,{isShown:h,onClick:S,ariaLabel:b("Save"),disabled:v},v?a.ZP.createElement(Y.Z,{color:"white"}):a.ZP.createElement("i",{className:"icon-check"})),a.ZP.createElement(Qe.Z,{isOpen:E,onClose:f,text:"Are you sure you want to ban and remove this user from the group?",confirmLabel:"Remove",confirmHandler:N,confirmIsDestructive:!0}))}))),wl=(0,a.X$)((0,s.c$)(((e,t)=>{let{chatId:n}=t;const a=(0,b.Z1)(e,n);return{chat:a,currentUserId:e.currentUserId,isChannel:(0,f.eA)(a)}}))((e=>{let{chat:t,isChannel:n,currentUserId:r,onScreenSelect:o,onChatMemberSelect:i,onClose:c,isActive:d}=e;const m=(0,g.Z)();(0,P.ZP)(d,c);const u=(0,a.I4)((()=>{o(l.u1.GroupRecentActions)}),[o]),h=(0,a.Ye)((()=>t.fullInfo&&t.fullInfo.adminMembers?t.fullInfo.adminMembers.sort(((e,t)=>e.isOwner?-1:t.isOwner?1:0)):[]),[t]),Z=(0,a.I4)((e=>{i(e.userId,e.promotedByUserId===r),o(l.u1.ChatAdminRights)}),[r,i,o]),v=(0,a.I4)((()=>{o(l.u1.GroupAddAdmins)}),[o]),p=(0,a.I4)((e=>{if(e.isOwner)return m("ChannelCreator");const t=(0,s.Rd)().users.byId,n=e.promotedByUserId?t[e.promotedByUserId]:void 0;return n?m("EditAdminPromotedBy",(0,f.Js)(n)):m("ChannelAdmin")}),[m]);return a.ZP.createElement("div",{className:"Management"},a.ZP.createElement("div",{className:"custom-scroll"},a.ZP.createElement("div",{className:"section"},a.ZP.createElement(_e.Z,{icon:"recent",multiline:!0,onClick:u},a.ZP.createElement("span",{className:"title"},m("EventLog")),a.ZP.createElement("span",{className:"subtitle"},m(n?"EventLogInfoDetailChannel":"EventLogInfoDetail")))),a.ZP.createElement("div",{className:"section",dir:m.isRtl?"rtl":void 0},a.ZP.createElement("p",{className:"text-muted",dir:"auto"},n?"You can add administrators to help you manage your channel.":"You can add administrators to help you manage your group."),h.map((e=>a.ZP.createElement(_e.Z,{key:e.userId,className:"chat-item-clickable",onClick:()=>Z(e)},a.ZP.createElement(Xe.Z,{userId:e.userId,status:p(e),forceShowSelf:!0})))),a.ZP.createElement(Sn.Z,{isShown:!0,onClick:v,ariaLabel:m("Channel.Management.AddModerator")},a.ZP.createElement("i",{className:"icon-add-user-filled"})))))}))),Ml=(0,a.X$)((0,s.c$)(((e,t)=>{let{chatId:n}=t;return{chat:(0,b.Z1)(e,n)}}))((e=>{let{chat:t,onClose:n,isActive:s}=e;const r=(0,g.Z)();(0,P.ZP)(s,n);const l=(0,a.Ye)((()=>t&&t.fullInfo&&t.fullInfo.adminMembers?t.fullInfo.adminMembers.sort(((e,t)=>e.isOwner?-1:t.isOwner?1:0)):[]),[t]),o=(0,a.I4)((e=>e.isOwner?r("ChannelCreator"):r("ChannelAdmin")),[r]);return a.ZP.createElement("div",{className:"Management"},a.ZP.createElement("div",{className:"custom-scroll"},a.ZP.createElement("div",{className:"section not-implemented",dir:r.isRtl?"rtl":void 0},a.ZP.createElement("h3",{className:"section-heading",dir:"auto"},"Actions"),a.ZP.createElement("div",{className:"ListItem no-selection"},a.ZP.createElement(ct.Z,{name:"changeInfo",checked:!0,label:r("EventLogAllEvents"),onChange:void 0})),a.ZP.createElement("div",{className:"ListItem no-selection"},a.ZP.createElement(ct.Z,{name:"changeInfo",checked:!0,label:r("EventLogFilterNewAdmins"),onChange:void 0})),a.ZP.createElement("div",{className:"ListItem no-selection"},a.ZP.createElement(ct.Z,{name:"changeInfo",checked:!0,label:r("EventLogFilterNewMembers"),onChange:void 0})),a.ZP.createElement("div",{className:"ListItem no-selection"},a.ZP.createElement(ct.Z,{name:"changeInfo",checked:!0,label:r("EventLogFilterChannelInfo"),onChange:void 0})),a.ZP.createElement("div",{className:"ListItem no-selection"},a.ZP.createElement(ct.Z,{name:"changeInfo",checked:!0,label:r("EventLogFilterDeletedMessages"),onChange:void 0})),a.ZP.createElement("div",{className:"ListItem no-selection"},a.ZP.createElement(ct.Z,{name:"changeInfo",checked:!0,label:r("EventLogFilterEditedMessages"),onChange:void 0})),a.ZP.createElement("div",{className:"ListItem no-selection"},a.ZP.createElement(ct.Z,{name:"changeInfo",checked:!0,label:r("EventLogFilterLeavingMembers"),onChange:void 0}))),a.ZP.createElement("div",{className:"section not-implemented",dir:r.isRtl?"rtl":void 0},a.ZP.createElement("h3",{className:"section-heading",dir:"auto"},r("Channel.Management.Title")),a.ZP.createElement("div",{className:"ListItem no-selection"},a.ZP.createElement(ct.Z,{name:"changeInfo",checked:!0,label:r("EventLogAllAdmins"),onChange:void 0})),l.map((e=>a.ZP.createElement(_e.Z,{key:e.userId,className:"chat-item-clickable picker-list-item",onClick:void 0,ripple:!0},a.ZP.createElement(ct.Z,{label:"",checked:!0}),a.ZP.createElement(Xe.Z,{userId:e.userId,status:o(e),forceShowSelf:!0})))))))}))),Tl=(0,a.X$)((0,s.c$)(((e,t)=>{let{chatId:n,isPromotedByCurrentUser:a}=t;const s=(0,b.Z1)(e,n),{byId:r}=e.users,{currentUserId:l}=e;return{chat:s,usersById:r,currentUserId:l,isChannel:(0,f.eA)(s),isFormFullyDisabled:!(s.isCreator||a),defaultRights:s.adminRights}}))((e=>{var t;let{isNewAdmin:n,selectedUserId:r,defaultRights:o,onScreenSelect:i,chat:c,usersById:d,currentUserId:m,isChannel:u,isFormFullyDisabled:h,onClose:Z,isActive:v}=e;const{updateChatAdmin:p}=(0,s.Sv)(),[E,C]=(0,a.eJ)({}),[b,I]=(0,a.eJ)(Boolean(n)),[y,S]=(0,a.eJ)(!1),[N,k,w]=(0,ee.Z)(),[M,T]=(0,a.eJ)(""),R=(0,g.Z)();(0,P.ZP)(v,Z);const A=(0,a.Ye)((()=>{var e,t;const a=null===(e=c.fullInfo)||void 0===e||null===(t=e.adminMembers)||void 0===t?void 0:t.find((e=>{let{userId:t}=e;return t===r}));if(!n||!a&&r){if(n){const e=(0,s.Rd)().users.byId[r];return e?{userId:e.id,adminRights:o,customTitle:R("ChannelAdmin"),isOwner:!1,promotedByUserId:void 0}:void 0}return a}}),[null===(t=c.fullInfo)||void 0===t?void 0:t.adminMembers,o,n,R,r]);(0,a.d4)((()=>{null!=c&&c.fullInfo&&r&&!A&&i(l.u1.ChatAdministrators)}),[c,i,A,r]),(0,a.d4)((()=>{C((null==A?void 0:A.adminRights)||{}),T(((null==A?void 0:A.customTitle)||"").substr(0,16)),I(Boolean(n)),S(!1)}),[o,n,A]);const L=(0,a.I4)((e=>{const{name:t}=e.target;C((e=>{return{...e,[t]:(n=e[t],!n||void 0)};var n})),I(!0)}),[]),F=(0,a.I4)((()=>{r&&(S(!0),p({chatId:c.id,userId:r,adminRights:E,customTitle:M}))}),[r,p,c.id,E,M]),B=(0,a.I4)((()=>{r&&(p({chatId:c.id,userId:r,adminRights:{}}),w())}),[c.id,w,r,p]),x=(0,a.I4)((e=>!((0,f.G9)(c)||!h&&c.adminRights&&c.adminRights[e])),[c,h]),$=(0,a.Ye)((()=>{if(n||!A)return;if(A.isOwner)return R("ChannelCreator");const e=A.promotedByUserId?d[A.promotedByUserId]:void 0;return e?R("EditAdminPromotedBy",(0,f.Js)(e)):R("ChannelAdmin")}),[n,A,d,R]),D=(0,a.I4)((e=>{const{value:t}=e.target;T(t),I(!0)}),[]);if(A)return a.ZP.createElement("div",{className:"Management"},a.ZP.createElement("div",{className:"custom-scroll"},a.ZP.createElement("div",{className:"section"},a.ZP.createElement(_e.Z,{inactive:!0,className:"chat-item-clickable"},a.ZP.createElement(Xe.Z,{userId:A.userId,status:$,forceShowSelf:!0})),a.ZP.createElement("h3",{className:"section-heading mt-4",dir:"auto"},R("EditAdminWhatCanDo")),a.ZP.createElement("div",{className:"ListItem no-selection"},a.ZP.createElement(ct.Z,{name:"changeInfo",checked:Boolean(E.changeInfo),label:R(u?"EditAdminChangeChannelInfo":"EditAdminChangeGroupInfo"),blocking:!0,disabled:x("changeInfo"),onChange:L})),u&&a.ZP.createElement("div",{className:"ListItem no-selection"},a.ZP.createElement(ct.Z,{name:"postMessages",checked:Boolean(E.postMessages),label:R("EditAdminPostMessages"),blocking:!0,disabled:x("postMessages"),onChange:L})),u&&a.ZP.createElement("div",{className:"ListItem no-selection"},a.ZP.createElement(ct.Z,{name:"editMessages",checked:Boolean(E.editMessages),label:R("EditAdminEditMessages"),blocking:!0,disabled:x("editMessages"),onChange:L})),a.ZP.createElement("div",{className:"ListItem no-selection"},a.ZP.createElement(ct.Z,{name:"deleteMessages",checked:Boolean(E.deleteMessages),label:R(u?"EditAdminDeleteMessages":"EditAdminGroupDeleteMessages"),blocking:!0,disabled:x("deleteMessages"),onChange:L})),!u&&a.ZP.createElement("div",{className:"ListItem no-selection"},a.ZP.createElement(ct.Z,{name:"banUsers",checked:Boolean(E.banUsers),label:R("EditAdminBanUsers"),blocking:!0,disabled:x("banUsers"),onChange:L})),a.ZP.createElement("div",{className:"ListItem no-selection"},a.ZP.createElement(ct.Z,{name:"inviteUsers",checked:Boolean(E.inviteUsers),label:R("EditAdminAddUsers"),blocking:!0,disabled:x("inviteUsers"),onChange:L})),!u&&a.ZP.createElement("div",{className:"ListItem no-selection"},a.ZP.createElement(ct.Z,{name:"pinMessages",checked:Boolean(E.pinMessages),label:R("EditAdminPinMessages"),blocking:!0,disabled:x("pinMessages"),onChange:L})),a.ZP.createElement("div",{className:"ListItem no-selection"},a.ZP.createElement(ct.Z,{name:"addAdmins",checked:Boolean(E.addAdmins),label:R("EditAdminAddAdmins"),blocking:!0,disabled:x("addAdmins"),onChange:L})),a.ZP.createElement("div",{className:"ListItem no-selection"},a.ZP.createElement(ct.Z,{name:"manageCall",checked:Boolean(E.manageCall),label:R("StartVoipChatPermission"),blocking:!0,disabled:x("manageCall"),onChange:L})),!u&&a.ZP.createElement("div",{className:"ListItem no-selection"},a.ZP.createElement(ct.Z,{name:"anonymous",checked:Boolean(E.anonymous),label:R("EditAdminSendAnonymously"),blocking:!0,disabled:x("anonymous"),onChange:L})),h&&a.ZP.createElement("p",{className:"section-info mb-4",dir:"auto"},R("Channel.EditAdmin.CannotEdit")),!u&&a.ZP.createElement(Ue.Z,{id:"admin-title",label:R("EditAdminRank"),onChange:D,value:M,disabled:h,maxLength:16}),m!==r&&!h&&!n&&a.ZP.createElement(_e.Z,{icon:"delete",ripple:!0,destructive:!0,onClick:k},R("EditAdminRemoveAdmin")))),a.ZP.createElement(Sn.Z,{isShown:b,onClick:F,ariaLabel:R("Save"),disabled:y},y?a.ZP.createElement(Y.Z,{color:"white"}):a.ZP.createElement("i",{className:"icon-check"})),!n&&a.ZP.createElement(Qe.Z,{isOpen:N,onClose:w,text:"Are you sure you want to dismiss this admin?",confirmLabel:R("Channel.Admin.Dismiss"),confirmHandler:B,confirmIsDestructive:!0}))}))),Rl=(0,a.X$)((0,s.c$)(((e,t)=>{var n,a;let{chatId:s}=t;const r=(0,b.Z1)(e,s),{statusesById:l}=e.users,o=null==r||null===(n=r.fullInfo)||void 0===n?void 0:n.members,i=null==r||null===(a=r.fullInfo)||void 0===a?void 0:a.adminMembers,c=r&&(0,f.eA)(r),{userIds:d}=e.contactList||{},{query:m,fetchingStatus:u,globalUserIds:h,localUserIds:Z}=e.userSearch;return{members:o,adminMembers:i,userStatusesById:l,isChannel:c,localContactIds:d,searchQuery:m,isSearching:u,globalUserIds:h,localUserIds:Z,serverTimeOffset:e.serverTimeOffset}}))((e=>{let{noAdmins:t,members:n,adminMembers:r,userStatusesById:o,isChannel:i,isActive:c,globalUserIds:d,localContactIds:m,localUserIds:u,isSearching:h,searchQuery:Z,serverTimeOffset:v,onClose:p,onScreenSelect:E,onChatMemberSelect:C}=e;const{openChat:b,setUserSearchQuery:I,loadContactList:y}=(0,s.Sv)(),S=(0,g.Z)(),N=(0,a.sO)(null),k=(0,a.sO)(null),w=(0,a.Ye)((()=>t&&(null==r?void 0:r.map((e=>{let{userId:t}=e;return t})))||[]),[r,t]),M=(0,a.Ye)((()=>{const e=(0,s.Rd)().users.byId;if(!n||!e)return[];const a=(0,f.Z0)(n.map((e=>{let{userId:t}=e;return t})),e,o,void 0,v);return t?a.filter((e=>!w.includes(e))):a}),[n,o,v,t,w]),T=(0,a.Ye)((()=>{const e=(0,s.Rd)().users.byId,n=(0,s.Rd)().chats.byId,a=Boolean(Z),r=a?m?(0,f.kK)(m,e,Z):[]:M;return(0,f.ih)((0,be.Tw)([...r,...a&&u||[],...a&&d||[]]).filter((n=>{const a=e[n];return!a||(i||a.canBeInvitedToGroup||!(0,f.cS)(a))&&(!t||!w.includes(n))})),n,!0)}),[M,m,Z,u,d,i,t,w]),[R,A]=(0,Be.Z)(y,T,Boolean(Z)),L=(0,a.I4)((e=>{t?(C(e,!1),E(l.u1.ChatNewAdminRights)):b({id:e})}),[t,C,E,b]),F=(0,a.I4)((e=>{I({query:e.target.value})}),[I]),B=(0,xe.Z)(k,c,(e=>{R&&R.length>0&&L(R[-1===e?0:e])}),".ListItem-button",!0);return(0,P.ZP)(c,p),a.ZP.createElement("div",{className:"Management"},t&&a.ZP.createElement("div",{className:"Management__filter",dir:S.isRtl?"rtl":void 0},a.ZP.createElement(Ue.Z,{ref:N,value:Z,onChange:F,placeholder:S("Search")})),a.ZP.createElement("div",{className:"custom-scroll"},a.ZP.createElement("div",{className:"section"},null!=R&&R.length?a.ZP.createElement(Ge.Z,{className:"picker-list custom-scroll",items:T,onLoadMore:A,noScrollRestore:Boolean(Z),ref:k,onKeyDown:B},R.map((e=>a.ZP.createElement(_e.Z,{key:e,className:"chat-item-clickable scroll-item",onClick:()=>L(e)},a.ZP.createElement(Xe.Z,{userId:e,forceShowSelf:!0}))))):h||!R||R.length?a.ZP.createElement(De.Z,null):a.ZP.createElement(Gt.Z,{teactOrderKey:0,key:"nothing-found",text:i?"No subscribers found":"No members found"}))))}))),Al=(0,a.X$)((0,s.c$)(((e,t)=>{var n;let{chatId:a}=t;const s=(0,b.Z1)(e,a),{byId:r,statusesById:l}=e.users;return{members:null==s||null===(n=s.fullInfo)||void 0===n?void 0:n.members,usersById:r,userStatusesById:l,isChannel:s&&(0,f.eA)(s),serverTimeOffset:e.serverTimeOffset}}))((e=>{let{usersById:t,userStatusesById:n,members:s,isChannel:r,onScreenSelect:o,onChatMemberSelect:i,onClose:c,isActive:d,serverTimeOffset:m}=e;(0,P.ZP)(d,c);const u=(0,a.Ye)((()=>{if(s&&t)return(0,f.Z0)(s.filter((e=>!e.isOwner)).map((e=>{let{userId:t}=e;return t})),t,n,void 0,m)}),[s,m,t,n]),h=(0,a.I4)((e=>{i(e),o(l.u1.GroupUserPermissions)}),[i,o]);return a.ZP.createElement("div",{className:"Management"},a.ZP.createElement("div",{className:"custom-scroll"},a.ZP.createElement("div",{className:"section",teactFastList:!0},u?u.map(((e,t)=>a.ZP.createElement(_e.Z,{key:e,teactOrderKey:t,className:"chat-item-clickable scroll-item",onClick:()=>h(e)},a.ZP.createElement(Xe.Z,{userId:e,forceShowSelf:!0})))):a.ZP.createElement(Gt.Z,{teactOrderKey:0,key:"nothing-found",text:r?"No subscribers found":"No members found"}))))})));var Ll=n(2357),Fl=n(2267);function Bl(e,t){const{isPermanent:n,usage:a=0,date:s}=e,{isPermanent:r,usage:l=0,date:o}=t;return n||r?Number(n)-Number(r):a||l?l-a:o-s}const xl=(0,a.X$)((0,s.c$)(((e,t)=>{let{chatId:n}=t;const{invites:a,revokedInvites:s}=e.management.byChatId[n],r=(0,b.Z1)(e,n),l=r&&(0,f.eA)(r);return{exportedInvites:a,revokedExportedInvites:s,chat:r,serverTimeOffset:e.serverTimeOffset,isChannel:l}}))((e=>{let{chatId:t,chat:n,exportedInvites:r,revokedExportedInvites:c,isActive:d,isChannel:m,serverTimeOffset:h,onClose:Z,onScreenSelect:v}=e;const{setEditingExportedInvite:p,showNotification:E,editExportedChatInvite:C,deleteExportedChatInvite:f,deleteRevokedExportedChatInvites:b,setOpenedInviteInfo:I}=(0,s.Sv)(),y=(0,g.Z)(),[S,N,k]=(0,ee.Z)(),[w,M,T]=(0,ee.Z)(),[R,A]=(0,a.eJ)(),[L,F,x]=(0,ee.Z)(),[$,U]=(0,a.eJ)(),[G,_]=(0,a.eJ)(),[J,X]=(0,a.eJ)(!1),z=(0,a.I4)((()=>X(!0)),[]);(0,a.d4)((()=>{G||(0,yt.Z)("Invite").then(_)}),[G]),(0,P.ZP)(d,Z);const Y=(0,a.Ye)((()=>{if(r)return r.some((e=>{let{expireDate:t}=e;return t&&t-(0,Fl.b)(h){H()}),Y?1e3:void 0);const V=null==r?void 0:r.find((e=>{let{isPermanent:t}=e;return t})),j=null!=n&&n.username?`t.me/${n.username}`:null==V?void 0:V.link,q=(0,a.Ye)((()=>{const e=null!=n&&n.username?r:null==r?void 0:r.filter((e=>{let{isPermanent:t}=e;return!t}));return null==e?void 0:e.sort(Bl)}),[null==n?void 0:n.username,r]),K=(0,a.I4)((e=>{const{link:n,title:a,isRequestNeeded:s,expireDate:r,usageLimit:l}=e;C({chatId:t,link:n,title:a,isRequestNeeded:s,expireDate:r,usageLimit:l,isRevoked:!0})}),[t,C]),W=(0,a.I4)((e=>{A(e),M()}),[M]),Q=(0,a.I4)((()=>{R&&(K(R),A(void 0),T())}),[T,K,R]),ne=(0,a.I4)((()=>{v(l.u1.EditInvite)}),[v]),ae=(0,a.I4)((()=>{V&&W(V)}),[W,V]),se=(0,a.I4)((()=>{b({chatId:t}),k()}),[t,k,b]),re=(0,a.I4)((e=>{I({chatId:t,invite:e}),v(l.u1.InviteInfo)}),[t,v,I]),le=(0,a.I4)((e=>{f({chatId:t,link:e.link})}),[t,f]),oe=(0,a.I4)((e=>{U(e),F()}),[F]),ie=(0,a.I4)((()=>{$&&(le($),U(void 0),x())}),[x,le,$]),ce=(0,a.I4)((e=>{(0,hs.TE)(e),E({message:y("LinkCopied")})}),[y,E]),de=(0,a.I4)((()=>{ce(j)}),[ce,j]),me=e=>{const{usage:t=0,usageLimit:n,expireDate:a,isPermanent:s,requested:r,isRevoked:l}=e;let o="";if(o=!l&&n&&t0?y("InviteLink.ExpiresIn",(0,te.D)(y,e)):y("InviteLink.Expired")}else s&&(o+=` • ${y("Permanent")}`);return o},ue=e=>{const n=[];return n.push({title:y("Copy"),icon:"copy",handler:()=>ce(e.link)}),e.isPermanent||e.isRevoked||n.push({title:y("Edit"),icon:"edit",handler:()=>(e=>{p({chatId:t,invite:e}),v(l.u1.EditInvite)})(e)}),e.isRevoked?n.push({title:y("DeleteLink"),icon:"delete",handler:()=>oe(e),destructive:!0}):n.push({title:y("RevokeButton"),icon:"delete",handler:()=>W(e),destructive:!0}),n},he=(0,a.Ye)((()=>e=>{let{onTrigger:t,isOpen:n}=e;return a.ZP.createElement(B.Z,{round:!0,ripple:!i.wB,size:"smaller",color:"translucent",className:n?"active":"",onClick:t,ariaLabel:"Actions"},a.ZP.createElement("i",{className:"icon-more"}))}),[]);return a.ZP.createElement("div",{className:"Management ManageInvites"},a.ZP.createElement("div",{className:"custom-scroll"},a.ZP.createElement("div",{className:"section"},a.ZP.createElement("div",{className:"section-icon"},G&&a.ZP.createElement(St.Z,{id:"inviteDuck",size:o.jV,animationData:G,play:J,onLoad:z})),a.ZP.createElement("p",{className:"text-muted"},y(m?"PrimaryLinkHelpChannel":"PrimaryLinkHelp"))),j&&a.ZP.createElement("div",{className:"section"},a.ZP.createElement("p",{className:"text-muted"},null!=n&&n.username?y("PublicLink"):y("lng_create_permanent_link_title")),a.ZP.createElement("div",{className:"primary-link"},a.ZP.createElement("input",{className:"form-control primary-link-input",value:j,readOnly:!0,onClick:de}),a.ZP.createElement(D.Z,{className:"primary-link-more-menu",trigger:he,positionX:"right"},a.ZP.createElement(O.Z,{icon:"copy",onClick:de},y("Copy")),!(null!=n&&n.username)&&a.ZP.createElement(O.Z,{icon:"delete",onClick:ae,destructive:!0},y("RevokeButton")))),a.ZP.createElement(B.Z,{onClick:de},y("CopyLink"))),a.ZP.createElement("div",{className:"section",teactFastList:!0},a.ZP.createElement(B.Z,{isText:!0,key:"create",className:"create-link",onClick:ne},y("CreateNewLink")),(!q||!q.length)&&a.ZP.createElement(Gt.Z,{text:"No links found",key:"nothing"}),null==q?void 0:q.map((e=>a.ZP.createElement(_e.Z,{icon:"link",secondaryIcon:"more",multiline:!0,onClick:()=>re(e),contextActions:ue(e),key:e.link},a.ZP.createElement("span",{className:"title invite-title"},e.title||e.link),a.ZP.createElement("span",{className:"subtitle",dir:"auto"},me(e))))),a.ZP.createElement("p",{className:"text-muted hint",key:"links-hint"},y("ManageLinksInfoHelp"))),c&&Boolean(c.length)&&a.ZP.createElement("div",{className:"section",teactFastList:!0},a.ZP.createElement("p",{className:"text-muted",key:"title"},y("RevokedLinks")),a.ZP.createElement(_e.Z,{icon:"delete",destructive:!0,key:"delete",onClick:N},a.ZP.createElement("span",{className:"title"},y("DeleteAllRevokedLinks"))),null==c?void 0:c.map((e=>a.ZP.createElement(_e.Z,{icon:"link",secondaryIcon:"more",multiline:!0,onClick:()=>re(e),contextActions:ue(e),key:e.link},a.ZP.createElement("span",{className:"title"},e.title||e.link),a.ZP.createElement("span",{className:"subtitle",dir:"auto"},me(e))))))),a.ZP.createElement(Qe.Z,{isOpen:S,onClose:k,title:y("DeleteAllRevokedLinks"),text:y("DeleteAllRevokedLinkHelp"),confirmIsDestructive:!0,confirmLabel:y("DeleteAll"),confirmHandler:se}),a.ZP.createElement(Qe.Z,{isOpen:w,onClose:T,title:y("RevokeLink"),text:y("RevokeAlert"),confirmIsDestructive:!0,confirmLabel:y("RevokeButton"),confirmHandler:Q}),a.ZP.createElement(Qe.Z,{isOpen:L,onClose:x,title:y("DeleteLink"),text:y("DeleteLinkHelp"),confirmIsDestructive:!0,confirmLabel:y("Delete"),confirmHandler:ie}))}))),$l=[1,10,100],Dl={hour:36e5,day:864e5,week:6048e5},Ol=Dl.hour,Ul=(0,a.X$)((0,s.c$)(((e,t)=>{let{chatId:n}=t;const{editingInvite:a}=e.management.byChatId[n];return{editingInvite:a,serverTimeOffset:e.serverTimeOffset}}))((e=>{let{chatId:t,editingInvite:n,isActive:r,serverTimeOffset:o,onClose:i,onScreenSelect:c}=e;const{editExportedChatInvite:m,exportChatInvite:u}=(0,s.Sv)(),h=(0,g.Z)(),[Z,v,p]=(0,ee.Z)(),[E,C]=(0,a.eJ)(!1),[f,b]=(0,a.eJ)(""),[I,y]=(0,a.eJ)(Date.now()+Ol),[S,N]=(0,a.eJ)("unlimited"),[k,w]=(0,a.eJ)(10),[M,T]=(0,a.eJ)("0"),[R,A]=(0,a.eJ)(!1);(0,P.ZP)(r,i),(0,d.Z)((e=>{let[t]=e;if(t!==n)if(n){const{title:e,usageLimit:t,expireDate:a,isRequestNeeded:s}=n;if(e&&b(e),t&&(T($l.includes(t)?t.toString():"custom"),w(t)),a){const e=(0,Fl.b)(o)+Ol;N("custom"),y(1e3*Math.max(a,e))}s&&C(!0)}else b(""),N("unlimited"),T("0"),y(1e3*(0,Fl.b)(o)+Ol),w(10),C(!1)}),[n,o]);const L=(0,a.I4)((e=>{C(e.target.checked)}),[]),F=(0,a.I4)((e=>{b(e.target.value)}),[]),x=(0,a.I4)((e=>{w(Number.parseInt(e.target.value,10))}),[]),$=(0,a.I4)((e=>{y(e.getTime()),p()}),[p]),D=(0,a.I4)((()=>{A(!0);const e="custom"===M?k:M;let a;switch(S){case"custom":a=(0,Fl.b)(o)+(I-Date.now())/1e3;break;case"hour":case"day":case"week":a=(0,Fl.b)(o)+Dl[S]/1e3;break;default:a=void 0}n?m({link:n.link,chatId:t,title:f,isRequestNeeded:E,expireDate:a,usageLimit:e}):u({chatId:t,title:f,isRequestNeeded:E,expireDate:a,usageLimit:e}),c(l.u1.Invites)}),[t,I,k,m,n,u,E,S,M,f,c,o]);return a.ZP.createElement("div",{className:"Management ManageInvite"},a.ZP.createElement("div",{className:"custom-scroll"},a.ZP.createElement("div",{className:"section"},a.ZP.createElement(ct.Z,{label:h("ApproveNewMembers"),subLabel:h("ApproveNewMembersDescription"),checked:E,onChange:L})),a.ZP.createElement("div",{className:"section"},a.ZP.createElement(Ue.Z,{className:"link-name",placeholder:h("LinkNameHint"),value:f,onChange:F}),a.ZP.createElement("p",{className:"text-muted hint"},h("LinkNameHelp"))),a.ZP.createElement("div",{className:"section"},a.ZP.createElement("div",{className:"section-header"},h("LimitByPeriod")),a.ZP.createElement(gt.Z,{name:"expireOptions",options:[{value:"hour",label:h("Hours",1)},{value:"day",label:h("Days",1)},{value:"week",label:h("Weeks",1)},{value:"unlimited",label:h("NoLimit")},{value:"custom",label:h("lng_group_invite_expire_custom")}],onChange:N,selected:S}),"custom"===S&&a.ZP.createElement(B.Z,{className:"expire-limit",isText:!0,onClick:v},(0,te.Tu)(h,I)," ",(0,te.mr)(h,I)),a.ZP.createElement("p",{className:"text-muted hint"},h("TimeLimitHelp"))),!E&&a.ZP.createElement("div",{className:"section"},a.ZP.createElement("div",{className:"section-header"},h("LimitNumberOfUses")),a.ZP.createElement(gt.Z,{name:"usageOptions",options:[...$l.map((e=>({value:e.toString(),label:e}))),{value:"0",label:h("NoLimit")},{value:"custom",label:h("lng_group_invite_usage_custom")}],onChange:T,selected:M}),"custom"===M&&a.ZP.createElement("input",{className:"form-control usage-limit",type:"number",min:"1",max:"99999",value:k,onChange:x}),a.ZP.createElement("p",{className:"text-muted hint"},h("UsesLimitHelp"))),a.ZP.createElement(Sn.Z,{isShown:!0,onClick:D,disabled:R,ariaLabel:h(n?"SaveLink":"CreateLink")},a.ZP.createElement("i",{className:"icon-check"}))),a.ZP.createElement(lt,{isOpen:Z,isFutureMode:!0,withTimePicker:!0,onClose:p,onSubmit:$,selectedAt:I,submitButtonLabel:h("Save")}))}))),Gl=(0,a.X$)((0,s.c$)(((e,t)=>{var n;let{chatId:a}=t;const s=(0,b.Z1)(e,a);return{enabledReactions:null===(n=s.fullInfo)||void 0===n?void 0:n.enabledReactions,availableReactions:e.availableReactions,chat:s}}))((e=>{let{availableReactions:t,enabledReactions:n,chat:r,isActive:l,onClose:o}=e;const{setChatEnabledReactions:i}=(0,s.Sv)(),c=(0,g.Z)(),[d,m]=(0,a.eJ)(!1),[u,h]=(0,a.eJ)(!1),[Z,v]=(0,a.eJ)(n||[]);(0,P.ZP)(l,o);const p=(0,a.I4)((()=>{r&&(h(!0),i({chatId:r.id,enabledReactions:Z}))}),[r,Z,i]);(0,a.d4)((()=>{n&&(h(!1),m(!1),v(n))}),[n]);const E=(0,a.I4)((e=>{if(!r||!t)return;const{name:n,checked:a}=e.currentTarget,s="all"===n?a?t.map((e=>e.reaction)):[]:a?[...Z,n]:Z.filter((e=>e!==n));v(s),m(!0)}),[t,r,Z]);return a.ZP.createElement("div",{className:"Management"},a.ZP.createElement("div",{className:"custom-scroll"},a.ZP.createElement("div",{className:"section"},a.ZP.createElement("div",{className:"ListItem no-selection"},a.ZP.createElement(ct.Z,{name:"all",checked:!Z||Z.length>0,label:c("EnableReactions"),onChange:E})),null==t?void 0:t.filter((e=>!e.isInactive)).map((e=>{let{reaction:t,title:n}=e;return a.ZP.createElement("div",{className:"ListItem no-selection"},a.ZP.createElement(ct.Z,{name:t,checked:!Z||(null==Z?void 0:Z.includes(t)),disabled:0===(null==Z?void 0:Z.length),label:a.ZP.createElement("div",{className:"Reaction"},a.ZP.createElement(bt.Z,{reaction:t}),n),onChange:E}))})))),a.ZP.createElement(Sn.Z,{isShown:d,onClick:p,ariaLabel:c("Save"),disabled:u},u?a.ZP.createElement(Y.Z,{color:"white"}):a.ZP.createElement("i",{className:"icon-check"})))}))),_l=(0,a.X$)((0,s.c$)(((e,t)=>{let{chatId:n}=t;const{inviteInfo:a}=e.management.byChatId[n],{invite:s,importers:r,requesters:l}=a||{},o=(0,b.Z1)(e,n);return{invite:s,importers:r,requesters:l,isChannel:o&&(0,f.eA)(o),serverTimeOffset:e.serverTimeOffset}}))((e=>{let{chatId:t,invite:n,importers:r,requesters:l,isChannel:o,isActive:i,serverTimeOffset:c,onClose:d}=e;const{showNotification:m,loadChatInviteImporters:u,loadChatInviteRequesters:h,openChat:Z}=(0,s.Sv)(),v=(0,g.Z)(),{usage:p=0,usageLimit:E,link:C,adminId:f}=n||{},b=(null==n?void 0:n.expireDate)&&1e3*(n.expireDate-(0,Fl.b)(c))+Date.now(),I=((null==n?void 0:n.expireDate)||0)-(0,Fl.b)(c)<0;(0,a.d4)((()=>{C&&(u({chatId:t,link:C}),h({chatId:t,link:C}))}),[t,C,u,h]);const y=(0,a.I4)((()=>{(0,hs.TE)(n.link),m({message:v("LinkCopied")})}),[n,v,m]);return(0,P.ZP)(i,d),a.ZP.createElement("div",{className:"Management ManageInviteInfo"},a.ZP.createElement("div",{className:"custom-scroll"},!n&&a.ZP.createElement("p",{className:"text-muted"},v("Loading")),n&&a.ZP.createElement(a.ZP.Fragment,null,a.ZP.createElement("div",{className:"section"},a.ZP.createElement("h3",{className:"link-title"},n.title||n.link),a.ZP.createElement("input",{className:"form-control",value:n.link,readOnly:!0,onClick:y}),a.ZP.createElement(B.Z,{className:"copy-link",onClick:y},v("CopyLink")),b&&a.ZP.createElement("p",{className:"text-muted"},I?v("ExpiredLink"):v("LinkExpiresIn",`${(0,te.Tu)(v,b)} ${(0,te.mr)(v,b)}`))),f&&a.ZP.createElement("div",{className:"section"},a.ZP.createElement("p",null,v("LinkCreatedeBy")),a.ZP.createElement(_e.Z,{className:"chat-item-clickable scroll-item small-icon",onClick:()=>Z({id:f})},a.ZP.createElement(Xe.Z,{userId:f,status:(0,te.ZK)(v,1e3*n.date,!0),forceShowSelf:!0}))),(()=>{if(null!=r&&r.length||null==l||!l.length)return r?a.ZP.createElement("div",{className:"section"},a.ZP.createElement("p",null,r.length?v("PeopleJoined",p):v("NoOneJoined")),a.ZP.createElement("p",{className:"text-muted"},!r.length&&(E?v("PeopleCanJoinViaLinkCount",E-p):v("NoOneJoinedYet")),r.map((e=>a.ZP.createElement(_e.Z,{className:"chat-item-clickable scroll-item small-icon",onClick:()=>Z({id:e.userId})},a.ZP.createElement(Xe.Z,{userId:e.userId,status:(0,te.ZK)(v,1e3*e.date,!0),forceShowSelf:!0})))))):a.ZP.createElement(Y.Z,null)})(),(()=>{if(null==n||!n.isRevoked){if(!l&&r)return a.ZP.createElement(Y.Z,null);if(null!=l&&l.length)return a.ZP.createElement("div",{className:"section"},a.ZP.createElement("p",null,v(o?"SubscribeRequests":"MemberRequests")),a.ZP.createElement("p",{className:"text-muted"},l.map((e=>a.ZP.createElement(_e.Z,{className:"chat-item-clickable scroll-item small-icon",onClick:()=>Z({id:e.userId})},a.ZP.createElement(Xe.Z,{userId:e.userId,status:(0,te.ZK)(v,1e3*e.date,!0),forceShowSelf:!0}))))))}})())))}))),Jl=(0,a.X$)((0,s.c$)(((e,t)=>{let{userId:n}=t;return{user:(0,b.dy)(e,n),serverTimeOffset:e.serverTimeOffset}}))((e=>{let{userId:t,about:n,date:r,isChannel:l,user:o,serverTimeOffset:i,chatId:c}=e;const{openChat:d,hideChatJoinRequest:m}=(0,s.Sv)(),u=(0,H.y)("JoinRequest"),h=(0,g.Z)(),Z=(0,f.Js)(o),v=1e3*(r-(0,Fl.b)(i))+Date.now(),P=(0,te.zk)(new Date(v))?(0,te.mr)(h,v):(0,te.j1)(h,v,!0,!1,!0),p=(0,a.I4)((()=>{m({chatId:c,userId:t,isApproved:!0})}),[c,m,t]),E=(0,a.I4)((()=>{m({chatId:c,userId:t,isApproved:!1})}),[c,m,t]);return a.ZP.createElement("div",{className:u("&")},a.ZP.createElement("div",{className:u("top")},a.ZP.createElement("div",{className:u("user"),onClick:()=>{d({id:t})}},a.ZP.createElement(we.Z,{key:t,size:"medium",user:o}),a.ZP.createElement("div",{className:u("user-info")},a.ZP.createElement("div",{className:u("user-name")},Z),a.ZP.createElement("div",{className:u("user-subtitle")},n))),a.ZP.createElement("div",{className:u("date")},P)),a.ZP.createElement("div",{className:u("buttons")},a.ZP.createElement(B.Z,{className:u("button"),onClick:p},h(l?"ChannelAddToChannel":"ChannelAddToGroup")),a.ZP.createElement(B.Z,{className:u("button"),isText:!0,onClick:E},h("DismissRequest"))))}))),Xl=(0,a.X$)((0,s.c$)(((e,t)=>{let{chatId:n}=t;const a=(0,b.Z1)(e,n);return{chat:a,serverTimeOffset:e.serverTimeOffset,isChannel:a&&(0,f.eA)(a)}}))((e=>{var t,n,r;let{chat:l,chatId:i,isActive:c,isChannel:d,onClose:m}=e;const{hideAllChatJoinRequests:u,loadChatJoinRequests:h}=(0,s.Sv)(),[Z,v,p]=(0,ee.Z)(),[E,C,b]=(0,ee.Z)(),I=(0,g.Z)(),[y,S]=(0,a.eJ)(),[N,k]=(0,a.eJ)(!1),w=(0,a.I4)((()=>k(!0)),[]);(0,a.d4)((()=>{y||(0,yt.Z)("JoinRequest").then(S)}),[y]),(0,P.ZP)(c,m),(0,a.d4)((()=>{null!=l&&l.joinRequests||(0,f.YC)(i)||h({chatId:i})}),[l,i,h]);const M=(0,a.I4)((()=>{u({chatId:i,isApproved:!0}),p()}),[u,i,p]),T=(0,a.I4)((()=>{u({chatId:i,isApproved:!1}),b()}),[u,i,b]);return a.ZP.createElement("div",{className:"Management ManageJoinRequests"},a.ZP.createElement("div",{className:"section"},a.ZP.createElement("div",{className:"section-icon"},y&&a.ZP.createElement(St.Z,{id:"joinRequestDucks",size:o.PM,animationData:y,play:N,onLoad:w})),Boolean(null==l||null===(t=l.joinRequests)||void 0===t?void 0:t.length)&&a.ZP.createElement("div",{className:"bulk-actions"},a.ZP.createElement(B.Z,{className:"bulk-action-button",onClick:v},"Accept all"),a.ZP.createElement(B.Z,{className:"bulk-action-button",onClick:C,isText:!0},"Dismiss all"))),a.ZP.createElement("div",{className:"section"},a.ZP.createElement("div",{className:"custom-scroll",teactFastList:!0},a.ZP.createElement("p",{key:"title"},null!=l&&l.joinRequests?l.joinRequests.length?I("JoinRequests",l.joinRequests.length):I("NoMemberRequests"):I("Loading")),!(null!=l&&l.joinRequests)&&a.ZP.createElement(Y.Z,{key:"loading"}),0===(null==l||null===(n=l.joinRequests)||void 0===n?void 0:n.length)&&a.ZP.createElement("p",{className:"text-muted",key:"empty"},I(d?"NoSubscribeRequestsDescription":"NoMemberRequestsDescription")),null==l||null===(r=l.joinRequests)||void 0===r?void 0:r.map((e=>{let{userId:t,about:n,date:s}=e;return a.ZP.createElement(Jl,{userId:t,about:n,date:s,isChannel:d,chatId:i,key:t})})))),a.ZP.createElement(Qe.Z,{isOpen:Z,onClose:p,title:"Accept all requests?",text:"Are you sure you want to accept all requests?",confirmHandler:M}),a.ZP.createElement(Qe.Z,{isOpen:E,onClose:b,title:"Reject all requests?",text:"Are you sure you want to reject all requests?",confirmHandler:T}))}))),zl=(0,a.X$)((0,s.c$)((e=>({managementType:(0,b.pP)(e)})))((e=>{let{chatId:t,currentScreen:n,selectedChatMemberId:s,isPromotedByCurrentUser:r,onScreenSelect:o,onChatMemberSelect:i,onClose:c,isActive:d,managementType:m}=e;switch(n){case l.u1.Initial:switch(m){case"user":return a.ZP.createElement(Pl,{key:t,userId:t,onClose:c,isActive:d});case"group":return a.ZP.createElement(pl,{key:t,chatId:t,onScreenSelect:o,onClose:c,isActive:d||[l.u1.ChatPrivacyType,l.u1.Discussion,l.u1.GroupPermissions,l.u1.ChatAdministrators,l.u1.GroupRemovedUsers,l.u1.GroupUserPermissionsCreate,l.u1.GroupUserPermissions,l.u1.ChatAdminRights,l.u1.ChatNewAdminRights,l.u1.GroupRecentActions].includes(n)});case"channel":return a.ZP.createElement(Il,{key:t,chatId:t,onScreenSelect:o,onClose:c,isActive:d||[l.u1.ChannelSubscribers,l.u1.ChatAdministrators,l.u1.ChannelRemovedUsers,l.u1.Discussion,l.u1.ChatPrivacyType,l.u1.ChatAdminRights,l.u1.ChatNewAdminRights,l.u1.GroupRecentActions].includes(n)})}break;case l.u1.ChatPrivacyType:return a.ZP.createElement(Sl,{chatId:t,isActive:d,onClose:c});case l.u1.Discussion:return a.ZP.createElement(Nl,{chatId:t,onScreenSelect:o,isActive:d,onClose:c});case l.u1.GroupPermissions:return a.ZP.createElement(El,{chatId:t,onScreenSelect:o,onChatMemberSelect:i,isActive:d||[l.u1.GroupRemovedUsers,l.u1.GroupUserPermissionsCreate,l.u1.GroupUserPermissions].includes(n),onClose:c});case l.u1.ChannelRemovedUsers:case l.u1.GroupRemovedUsers:return a.ZP.createElement(fl,{chatId:t,isActive:d,onClose:c});case l.u1.GroupUserPermissionsCreate:return a.ZP.createElement(Al,{chatId:t,onChatMemberSelect:i,onScreenSelect:o,isActive:d||[l.u1.GroupUserPermissions].includes(n),onClose:c});case l.u1.GroupUserPermissions:return a.ZP.createElement(kl,{chatId:t,selectedChatMemberId:s,isPromotedByCurrentUser:r,onScreenSelect:o,isActive:d,onClose:c});case l.u1.ChatAdministrators:return a.ZP.createElement(wl,{chatId:t,onScreenSelect:o,onChatMemberSelect:i,isActive:d||[l.u1.ChatAdminRights,l.u1.ChatNewAdminRights,l.u1.GroupRecentActions].includes(n),onClose:c});case l.u1.GroupRecentActions:return a.ZP.createElement(Ml,{chatId:t,isActive:d,onClose:c});case l.u1.ChatNewAdminRights:case l.u1.ChatAdminRights:return a.ZP.createElement(Tl,{chatId:t,isNewAdmin:n===l.u1.ChatNewAdminRights,selectedUserId:s,isPromotedByCurrentUser:r,onScreenSelect:o,isActive:d,onClose:c});case l.u1.ChannelSubscribers:case l.u1.GroupMembers:return a.ZP.createElement(Rl,{chatId:t,isActive:d,onClose:c});case l.u1.Invites:return a.ZP.createElement(xl,{chatId:t,isActive:d,onClose:c,onScreenSelect:o});case l.u1.EditInvite:return a.ZP.createElement(Ul,{chatId:t,isActive:d,onClose:c,onScreenSelect:o});case l.u1.GroupAddAdmins:return a.ZP.createElement(Rl,{chatId:t,noAdmins:!0,isActive:d,onClose:c,onScreenSelect:o,onChatMemberSelect:i});case l.u1.Reactions:return a.ZP.createElement(Gl,{chatId:t,isActive:d,onClose:c});case l.u1.InviteInfo:return a.ZP.createElement(_l,{chatId:t,isActive:d,onClose:c});case l.u1.JoinRequests:return a.ZP.createElement(Xl,{chatId:t,isActive:d,onClose:c})}})));var Yl=n(9937);const Hl=/^4[0-9]{12}(?:[0-9]{1,3})?$/,Vl=/^5[1-5][0-9]{11,14}$/,jl=/^2[2-7][0-9]{11,14}$/;let ql;!function(e){e[e.Default=0]="Default",e[e.Visa=1]="Visa",e[e.Mastercard=2]="Mastercard"}(ql||(ql={}));const Kl={[ql.Default]:"",[ql.Visa]:"visa",[ql.Mastercard]:"mastercard"};function Wl(e){return e=e.replace(/\s/g,""),Hl.test(e)?ql.Visa:Vl.test(e)||jl.test(e)?ql.Mastercard:ql.Default}const Ql={},eo=/(\d{1,3})(\d{1,3})?(\d{1,3})?(\d{1,3})?(\d{1,3})?/,to="AF🇦🇫93Afghanistan333\nAO🇦🇴244Angola333\nAL🇦🇱355Albania234\nAD🇦🇩376Andorra222\nAE🇦🇪971United Arab Emirates234\nAI🇦🇮1264Anguilla34\nAR🇦🇷54Argentina\nAM🇦🇲374Armenia233\nAG🇦🇬1268Antigua and Barbuda34\nAU🇦🇺61Australia333\nAS🇦🇸1684American Samoa34\nAT🇦🇹43Austria\nAW🇦🇼297Aruba34\nAZ🇦🇿994Azerbaijan2322\nBI🇧🇮257Burundi224\nBE🇧🇪32Belgium3222\nBJ🇧🇯229Benin233\nBF🇧🇫226Burkina Faso2222\nBD🇧🇩880Bangladesh\nBG🇧🇬359Bulgaria\nBH🇧🇭973Bahrain44\nBS🇧🇸1242Bahamas34\nBA🇧🇦387Bosnia and Herzegovina\nBY🇧🇾375Belarus2322\nBZ🇧🇿501Belize\nBO🇧🇴591Bolivia134\nBR🇧🇷55Brazil254\nBB🇧🇧1246Barbados34\nBM🇧🇲1441Bermuda34\nBN🇧🇳673Brunei34\nBQ🇧🇶599Bonaire, Sint Eustatius and Saba\nBT🇧🇹975Bhutan\nBW🇧🇼267Botswana233\nCF🇨🇫236Central African Republic2222\nCA🇨🇦1Canada334\nCH🇨🇭41Switzerland234\nCK🇨🇰682Cook Islands\nCL🇨🇱56Chile144\nCN🇨🇳86China344\nCI🇨🇮225Côte d`Ivoire233\nCM🇨🇲237Cameroon44\nCD🇨🇩243DR Congo234\nCG🇨🇬242Republic of the Congo234\nCO🇨🇴57Colombia334\nKM🇰🇲269Comoros34\nCV🇨🇻238Cape Verde34\nCR🇨🇷506Costa Rica\nCU🇨🇺53Cuba44\nCY🇨🇾357Cyprus44\nCW🇨🇼599Curaçao\nCZ🇨🇿420Czech Republic\nDE🇩🇪49Germany38\nDJ🇩🇯253Djibouti2222\nDM🇩🇲1767Dominica34\nDK🇩🇰45Denmark44\nDO🇩🇴1Dominican Republic334\nDZ🇩🇿213Algeria3222\nEC🇪🇨593Ecuador\nEG🇪🇬20Egypt234\nER🇪🇷291Eritrea133\nES🇪🇸34Spain333\nEE🇪🇪372Estonia\nET🇪🇹251Ethiopia234\nFI🇫🇮358Finland\nFJ🇫🇯679Fiji\nFK🇫🇰500Falkland Islands\nFM🇫🇲691Micronesia\nFO🇫🇴298Faroe Islands33\nFR🇫🇷33France12222\nGA🇬🇦241Gabon1222\nGB🇬🇧44United Kingdom46\nGE🇬🇪995Georgia\nGF🇬🇫594French Guiana\nGH🇬🇭233Ghana\nGI🇬🇮350Gibraltar44\nGL🇬🇱299Greenland33\nGN🇬🇳224Guinea333\nGM🇬🇲220Gambia34\nGP🇬🇵590Guadeloupe\nGU🇬🇺1671Guam34\nGW🇬🇼245Guinea-Bissau34\nGQ🇬🇶240Equatorial Guinea333\nGR🇬🇷30Greece244\nGD🇬🇩1473Grenada34\nGT🇬🇹502Guatemala134\nGY🇬🇾592Guyana\nHK🇭🇰852Hong Kong\nHN🇭🇳504Honduras44\nHR🇭🇷385Croatia\nHT🇭🇹509Haiti\nHU🇭🇺36Hungary234\nID🇮🇩62Indonesia\nIN🇮🇳91India55\nIO🇩🇬246Diego Garcia34\nIE🇮🇪353Ireland234\nIR🇮🇷98Iran334\nIQ🇮🇶964Iraq334\nIS🇮🇸354Iceland34\nIL🇮🇱972Israel234\nIT🇮🇹39Italy334\nJM🇯🇲1876Jamaica34\nJO🇯🇴962Jordan144\nJP🇯🇵81Japan244\nKZ🇰🇿7Kazakhstan3322\nKE🇰🇪254Kenya333\nKG🇰🇬996Kyrgyzstan\nKH🇰🇭855Cambodia\nKI🇰🇮686Kiribati\nKN🇰🇳1869Saint Kitts and Nevis34\nKR🇰🇷82South Korea\nKW🇰🇼965Kuwait44\nKY🇰🇾1345Cayman Islands34\nLA🇱🇦856Laos\nLB🇱🇧961Lebanon\nLR🇱🇷231Liberia\nLY🇱🇾218Libya234\nLC🇱🇨1758Saint Lucia34\nLI🇱🇮423Liechtenstein\nLK🇱🇰94Sri Lanka234\nLS🇱🇸266Lesotho233\nLT🇱🇹370Lithuania35\nLU🇱🇺352Luxembourg\nLV🇱🇻371Latvia35\nMA🇲🇦212Morocco234\nMC🇲🇨377Monaco44\nMD🇲🇩373Moldova233\nMG🇲🇬261Madagascar2232\nMP🇲🇵1670Northern Mariana Islands34\nMO🇲🇴853Macau\nMS🇲🇸1664Montserrat34\nMV🇲🇻960Maldives\nMX🇲🇽52Mexico\nMH🇲🇭692Marshall Islands\nMK🇲🇰389Macedonia\nML🇲🇱223Mali44\nMT🇲🇹356Malta2222\nMM🇲🇲95Myanmar\nME🇲🇪382Montenegro\nMN🇲🇳976Mongolia\nMZ🇲🇿258Mozambique234\nMQ🇲🇶596Martinique\nMR🇲🇷222Mauritania44\nMU🇲🇺230Mauritius\nMW🇲🇼265Malawi\nMY🇲🇾60Malaysia\nNA🇳🇦264Namibia234\nNC🇳🇨687New Caledonia6\nNE🇳🇪227Niger2222\nNF🇳🇫672Norfolk Island\nNG🇳🇬234Nigeria\nNI🇳🇮505Nicaragua44\nNL🇳🇱31Netherlands12222\nNO🇳🇴47Norway44\nNP🇳🇵977Nepal\nNU🇳🇺683Niue\nNR🇳🇷674Nauru\nNZ🇳🇿64New Zealand\nOM🇴🇲968Oman44\nPK🇵🇰92Pakistan334\nPA🇵🇦507Panama44\nPE🇵🇪51Peru333\nPF🇵🇫689French Polynesia\nPH🇵🇭63Philippines334\nPM🇵🇲508Saint Pierre and Miquelon\nPR🇵🇷1Puerto Rico334\nPS🇵🇸970Palestine324\nPW🇵🇼680Palau\nPG🇵🇬675Papua New Guinea\nPL🇵🇱48Poland333\nKP🇰🇵850North Korea\nPT🇵🇹351Portugal144\nPY🇵🇾595Paraguay333\nQA🇶🇦974Qatar\nRE🇷🇪262Réunion333\nRO🇷🇴40Romania333\nRU🇷🇺7Russia3322\nRW🇷🇼250Rwanda333\nSA🇸🇦966Saudi Arabia\nSD🇸🇩249Sudan234\nSN🇸🇳221Senegal234\nSG🇸🇬65Singapore44\nSH🇸🇭290Saint Helena23\nSH🇸🇭247Saint Helena4\nSB🇸🇧677Solomon Islands\nSL🇸🇱232Sierra Leone233\nSV🇸🇻503El Salvador44\nSM🇸🇲378San Marino334\nSO🇸🇴252Somalia233\nRS🇷🇸381Serbia234\nSS🇸🇸211South Sudan234\nST🇸🇹239São Tomé and Príncipe25\nSR🇸🇷597Suriname34\nSK🇸🇰421Slovakia\nSI🇸🇮386Slovenia\nSE🇸🇪46Sweden234\nSZ🇸🇿268Swaziland44\nSC🇸🇨248Seychelles1222\nSX🇸🇽1721Sint Maarten34\nSY🇸🇾963Syria\nTC🇹🇨1649Turks and Caicos Islands34\nTD🇹🇩235Chad2222\nTG🇹🇬228Togo233\nTH🇹🇭66Thailand144\nTJ🇹🇯992Tajikistan\nTK🇹🇰690Tokelau\nTM🇹🇲993Turkmenistan26\nTL🇹🇱670Timor-Leste\nTO🇹🇴676Tonga\nTT🇹🇹1868Trinidad and Tobago34\nTN🇹🇳216Tunisia233\nTR🇹🇷90Turkey334\nTV🇹🇻688Tuvalu\nTW🇹🇼886Taiwan\nTZ🇹🇿255Tanzania234\nUG🇺🇬256Uganda234\nUA🇺🇦380Ukraine2322\nUY🇺🇾598Uruguay44\nUS🇺🇸1United States334\nUZ🇺🇿998Uzbekistan27\nVA🇻🇦3Vatican City\nVC🇻🇨1784Saint Vincent and the Grenadines34\nVE🇻🇪58Venezuela334\nVG🇻🇬1284British Virgin Islands34\nVI🇻🇮1340US Virgin Islands34\nVN🇻🇳84Vietnam\nVU🇻🇺678Vanuatu\nWF🇼🇫681Wallis and Futuna\nWS🇼🇸685Samoa\nXK🇽🇰383Kosovo44\nYE🇾🇪967Yemen333\nZA🇿🇦27South Africa234\nZM🇿🇲260Zambia234\nZW🇿🇼263Zimbabwe234".split("\n").map((e=>({id:e.substr(0,2),flag:e.substr(2,4),code:`+${e.match(/\d+/)[0]}`,name:e.split(/\d+/)[1],phoneFormat:function(e){if(!e)return eo;const t=e[0];let n;if(!Ql[t]){const e=t.split("").map(Number);n=e.reduce(((e,t,n)=>`${e}(\\d{1,${t}})${n>0?"?":""}`),""),Ql[t]=new RegExp(`${n}${"()?".repeat(5-e.length)}`)}return Ql[t]}(e.match(/\d+$/))}))),no={streetLine1:"",streetLine2:"",city:"",state:"",countryIso2:"",postCode:"",fullName:"",email:"",phone:"",shipping:"",cardNumber:"",cardholder:"",expiry:"",cvv:"",billingCountry:"",billingZip:"",saveInfo:!0,saveCredentials:!1,formErrors:{}},ao=(e,t)=>{switch(t.type){case"changeAddress1":return{...e,streetLine1:t.payload,formErrors:{...e.formErrors,streetLine1:void 0}};case"changeAddress2":return{...e,streetLine2:t.payload,formErrors:{...e.formErrors,streetLine2:void 0}};case"changeCity":return{...e,city:t.payload,formErrors:{...e.formErrors,city:void 0}};case"changeState":return{...e,state:t.payload,formErrors:{...e.formErrors,state:void 0}};case"changeCountry":return{...e,countryIso2:t.payload,billingCountry:so(t.payload),formErrors:{...e.formErrors,countryIso2:void 0}};case"changePostCode":return{...e,postCode:t.payload,formErrors:{...e.formErrors,postCode:void 0}};case"changeFullName":return{...e,fullName:t.payload,formErrors:{...e.formErrors,fullName:void 0}};case"changeEmail":return{...e,email:t.payload,formErrors:{...e.formErrors,email:void 0}};case"changePhone":return{...e,phone:t.payload,formErrors:{...e.formErrors,phone:void 0}};case"changeShipping":return{...e,shipping:t.payload};case"changeCardNumber":return{...e,cardNumber:t.payload,formErrors:{...e.formErrors,cardNumber:void 0}};case"changeCardholder":return{...e,cardholder:t.payload,formErrors:{...e.formErrors,cardholder:void 0}};case"changeExpiryDate":return{...e,expiry:t.payload,formErrors:{...e.formErrors,expiry:void 0}};case"changeCvvCode":return{...e,cvv:t.payload,formErrors:{...e.formErrors,cvv:void 0}};case"changeBillingCountry":return{...e,billingCountry:t.payload,formErrors:{...e.formErrors,billingCountry:void 0}};case"changeBillingZip":return{...e,billingZip:t.payload,formErrors:{...e.formErrors,billingZip:void 0}};case"changeSaveInfo":return{...e,saveInfo:t.payload};case"changeSaveCredentials":return{...e,saveCredentials:t.payload};case"updateUserInfo":return t.payload.countryIso2?{...e,...t.payload,billingCountry:so(t.payload.countryIso2)}:{...e,...t.payload};case"setFormErrors":return{...e,formErrors:{...e.formErrors,...t.payload}};default:return e}};function so(e){const t=to.find((t=>{let{id:n}=t;return n===e}));return t?t.name:""}function ro(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:400;(0,a.d4)((()=>{i.$b||setTimeout((()=>{(0,z.T2)((()=>{e.current&&e.current.focus()}))}),t)}),[e,t])}const lo=(0,a.X$)((e=>{const{id:t,value:n,label:s,hasArrow:r,error:l,ref:o,placeholder:i,onChange:c,children:d}=e,m=l||s,u=(0,H.Z)("input-group",n&&"touched",l&&"error",m&&"with-label",r&&"with-arrow","input-group");return a.ZP.createElement("div",{className:u},a.ZP.createElement("select",{className:"form-control",id:t,value:n||"",onChange:c,placeholder:i||s,ref:o},d),m&&t&&a.ZP.createElement("label",{htmlFor:t},m))})),oo=(0,a.X$)((e=>{let{state:t,needEmail:n,needPhone:s,needName:r,needAddress:l,dispatch:o}=e;const i=(0,a.sO)(null),c=(0,a.sO)(null),d=(0,a.sO)(null);(0,a.d4)((()=>{d.current&&d.current.value!==t.countryIso2&&(d.current.value=t.countryIso2)}),[t.countryIso2]);const m=(0,g.Z)();ro(i);const u=(0,a.I4)((e=>{o({type:"changeAddress1",payload:e.target.value})}),[o]),h=(0,a.I4)((e=>{o({type:"changeAddress2",payload:e.target.value})}),[o]),Z=(0,a.I4)((e=>{o({type:"changeCity",payload:e.target.value})}),[o]),v=(0,a.I4)((e=>{o({type:"changeState",payload:e.target.value})}),[o]),P=(0,a.I4)((e=>{o({type:"changeCountry",payload:e.target.value})}),[o]),p=(0,a.I4)((e=>{o({type:"changePostCode",payload:e.target.value})}),[o]),E=(0,a.I4)((e=>{o({type:"changeFullName",payload:e.target.value})}),[o]),C=(0,a.I4)((e=>{o({type:"changeEmail",payload:e.target.value})}),[o]),f=(0,a.I4)((e=>{let{value:t}=e.target;t=`+${t.replace(/\D/g,"")}`,c.current&&(c.current.value=t),o({type:"changePhone",payload:t})}),[o]),b=(0,a.I4)((e=>{o({type:"changeSaveInfo",payload:e.target.value})}),[o]),{formErrors:I}=t;return a.ZP.createElement("div",{className:"ShippingInfo"},a.ZP.createElement("form",null,l?a.ZP.createElement("div",null,a.ZP.createElement("h5",null,m("PaymentShippingAddress")),a.ZP.createElement(Ue.Z,{ref:i,label:m("PaymentShippingAddress1Placeholder"),onChange:u,value:t.streetLine1,inputMode:"text",error:I.streetLine1}),a.ZP.createElement(Ue.Z,{label:m("PaymentShippingAddress2Placeholder"),onChange:h,value:t.streetLine2,inputMode:"text",error:I.streetLine2}),a.ZP.createElement(Ue.Z,{label:m("PaymentShippingCityPlaceholder"),onChange:Z,value:t.city,inputMode:"text",error:I.city}),a.ZP.createElement(Ue.Z,{label:m("PaymentShippingStatePlaceholder"),onChange:v,value:t.state,inputMode:"text",error:I.state}),a.ZP.createElement(lo,{label:m("PaymentShippingCountry"),placeholder:m("PaymentShippingCountry"),onChange:P,value:t.countryIso2,hasArrow:Boolean(!0),id:"shipping-country",error:I.countryIso2,ref:d},to.map((e=>{let{name:t,id:n}=e;return a.ZP.createElement("option",{value:n,className:"county-item"},t)}))),a.ZP.createElement(Ue.Z,{label:m("PaymentShippingZipPlaceholder"),onChange:p,value:t.postCode,inputMode:"text",error:I.postCode})):void 0,r||n||s?a.ZP.createElement("h5",null,m("PaymentShippingReceiver")):void 0,r&&a.ZP.createElement(Ue.Z,{label:m("PaymentShippingName"),onChange:E,value:t.fullName,inputMode:"text",error:I.fullName}),n&&a.ZP.createElement(Ue.Z,{label:m("PaymentShippingEmailPlaceholder"),onChange:C,value:t.email,inputMode:"email",error:I.email}),s&&a.ZP.createElement(Ue.Z,{label:m("PaymentShippingPhoneNumber"),onChange:f,value:t.phone,inputMode:"tel",error:I.phone,ref:c}),a.ZP.createElement(ct.Z,{label:m("PaymentShippingSave"),subLabel:m("PaymentShippingSaveInfo"),checked:Boolean(t.saveInfo),onChange:b})))})),io=(0,a.X$)((e=>{let{state:t,shippingOptions:n,currency:s,dispatch:r}=e;const l=(0,g.Z)();(0,a.d4)((()=>{n&&!t.shipping&&r({type:"changeShipping",payload:n[0].id})}),[n,t.shipping,r]);const o=(0,a.I4)((e=>{r({type:"changeShipping",payload:e})}),[r]),i=(0,a.Ye)((()=>n.map((e=>{let{id:t,title:n,amount:a}=e;return{label:n,subLabel:(0,Yl.x)(a,s,l.code),value:t}}))),[n,s,l.code]);return a.ZP.createElement("div",{className:"Shipping"},a.ZP.createElement("form",null,a.ZP.createElement("p",null,l("PaymentShippingMethod")),a.ZP.createElement(gt.Z,{name:"shipping-options",options:i,onChange:o,selected:t.shipping})))}));function co(e,t,n,s){let r=arguments.length>4&&void 0!==arguments[4]&&arguments[4];return a.ZP.createElement("div",{className:"price-info-item "+(r?"price-info-item-main":"")},a.ZP.createElement("div",{className:"title"},t),a.ZP.createElement("div",{className:"value"},(0,Yl.x)(n,s,e)))}function mo(e,t,n){return a.ZP.createElement("div",{className:"checkout-info-item"},a.ZP.createElement("i",{className:e}," "),a.ZP.createElement("div",{className:"info"},a.ZP.createElement("div",{className:"title"},t),a.ZP.createElement("p",{className:"data"},n)))}const uo=(0,a.X$)((e=>{let{invoiceContent:t,prices:n,shippingPrices:s,checkoutInfo:r,currency:l,totalPrice:o}=e;const i=(0,g.Z)(),{photoUrl:c,title:d,text:m}=t||{},{paymentMethod:u,paymentProvider:h,shippingAddress:Z,name:v,phone:P,shippingMethod:p}=r||{};return a.ZP.createElement("div",{className:"Checkout"},a.ZP.createElement("div",{className:"description has-image"},c&&a.ZP.createElement("img",{src:c,alt:""}),a.ZP.createElement("div",{className:"text"},a.ZP.createElement("h5",null,d),a.ZP.createElement("p",null,m))),a.ZP.createElement("div",{className:"price-info"},n&&n.map((e=>co(i.code,e.label,e.amount,l))),s&&s.map((e=>co(i.code,e.label,e.amount,l))),void 0!==o&&co(i.code,i("Checkout.TotalAmount"),o,l,!0)),a.ZP.createElement("div",{className:"invoice-info"},u&&mo("icon-card",u,i("PaymentCheckoutMethod")),h&&mo((0,H.Z)("provider",h.toLowerCase()),h,i("PaymentCheckoutProvider")),Z&&mo("icon-location",Z,i("PaymentShippingAddress")),v&&mo("icon-user",v,i("PaymentCheckoutName")),P&&mo("icon-phone",P,i("PaymentCheckoutPhoneNumber")),p&&mo("icon-truck",p,i("PaymentCheckoutShippingMethod"))))})),ho=(0,a.X$)((e=>{let{value:t,error:n,onChange:s}=e;const r=(0,g.Z)(),l=(0,a.sO)(null),o=(0,a.I4)((e=>{if("Backspace"===e.key&&"/"===t.charAt(t.length-1)){const e=t.slice(0,t.length-1);l.current&&(l.current.value=e)}}),[t]),i=(0,a.I4)((e=>{s(function(e){const t=(e=e.replace(/[^\d]/g,"").slice(0,4)).match(/.{1,2}/g);return null!=t&&t[0]&&Number(t[0])>12&&(t[0]="12"),null!=t&&t[0]&&2===t[0].length&&!t[1]&&(t[1]=""),t?t.join("/"):""}(e.target.value))}),[s]);return a.ZP.createElement(Ue.Z,{label:r("PaymentCardExpireDate"),ref:l,onChange:i,onKeyDown:o,value:t,error:n,inputMode:"numeric",maxLength:5})}));var Zo=n(6352),vo=n(5753);const Po=(0,a.X$)((e=>{let{value:t,error:n,onChange:s}=e;const r=(0,g.Z)(),l=(0,a.sO)(null);ro(l);const[o,i]=(0,a.eJ)(ql.Default);(0,a.d4)((()=>{const e=Wl(t);i(e)}),[]);const c=(0,a.I4)((e=>{const t=function(e){const t=(e=e.replace(/[^\d]/g,"")).match(/.{1,4}/g);return t?t.join(" "):""}(e.target.value),n=Wl(e.target.value);i(n),s(t),l.current&&(l.current.value=t)}),[s,l]),d=function(e){switch(e){case ql.Mastercard:return a.ZP.createElement("img",{src:Zo,alt:""});case ql.Visa:return a.ZP.createElement("img",{src:vo,alt:""});default:return}}(o);return a.ZP.createElement("div",{className:"CardInput"},a.ZP.createElement("span",{className:"left-addon"},d),a.ZP.createElement(Ue.Z,{ref:l,label:r("PaymentCardNumber"),onChange:c,value:t,inputMode:"numeric",className:o?"has-left-addon":"",error:n,maxLength:23}))})),go=(0,a.X$)((e=>{let{state:t,canSaveCredentials:n,needCardholderName:s,needCountry:r,needZip:l,dispatch:o}=e;const i=(0,a.sO)(null);(0,a.d4)((()=>{i.current&&i.current.value!==t.billingCountry&&(i.current.value=t.billingCountry)}),[t.billingCountry]);const c=(0,a.I4)((e=>{o({type:"changeCardNumber",payload:e})}),[o]),d=(0,a.I4)((e=>{o({type:"changeCardholder",payload:e.target.value.toUpperCase()})}),[o]),m=(0,a.I4)((e=>{o({type:"changeExpiryDate",payload:e})}),[o]),u=(0,a.I4)((e=>{o({type:"changeCvvCode",payload:e.target.value})}),[o]),h=(0,a.I4)((e=>{o({type:"changeBillingCountry",payload:e.target.value})}),[o]),Z=(0,a.I4)((e=>{o({type:"changeBillingZip",payload:e.target.value})}),[o]),v=(0,a.I4)((e=>{o({type:"changeSaveCredentials",payload:e.target.value})}),[o]),P=(0,g.Z)(),{formErrors:p={}}=t;return a.ZP.createElement("div",{className:"PaymentInfo"},a.ZP.createElement("form",null,a.ZP.createElement("h5",null,P("PaymentCardTitle")),a.ZP.createElement(Po,{onChange:c,value:t.cardNumber,error:p.cardNumber}),s&&a.ZP.createElement(Ue.Z,{label:P("PaymentCardName"),onChange:d,value:t.cardholder,inputMode:"text",error:p.cardholder}),a.ZP.createElement("section",{className:"inline-inputs"},a.ZP.createElement(ho,{value:t.expiry,onChange:m,error:p.expiry}),a.ZP.createElement(Ue.Z,{label:P("lng_payments_card_cvc"),onChange:u,value:t.cvv,inputMode:"numeric",maxLength:3,error:p.cvv})),r||l?a.ZP.createElement("h5",null,P("PaymentBillingAddress")):void 0,r&&a.ZP.createElement(lo,{label:P("PaymentShippingCountry"),placeholder:P("PaymentShippingCountry"),onChange:h,value:t.billingCountry,hasArrow:Boolean(!0),id:"billing-country",error:p.billingCountry,ref:i},to.map((e=>{let{name:t}=e;return a.ZP.createElement("option",{value:t,className:"county-item"},t)}))),l&&a.ZP.createElement(Ue.Z,{label:P("PaymentShippingZipPlaceholder"),onChange:Z,value:t.billingZip,inputMode:"text",error:p.billingZip}),n&&a.ZP.createElement(ct.Z,{label:P("PaymentCardSavePaymentInformation"),checked:t.saveCredentials,onChange:v})))})),po=(0,a.X$)((e=>{let{url:t}=e;const n=(0,g.Z)();return a.ZP.createElement("div",{className:"ConfirmPayment"},a.ZP.createElement("iframe",{src:t,title:n("Checkout.WebConfirmation.Title"),allow:"payment",sandbox:"allow-forms allow-scripts allow-same-origin allow-top-navigation",className:"ConfirmPayment__content"}))})),Eo=new Set(["stripe","smartglocal"]),Co=(0,a.X$)((0,s.c$)((e=>{const{step:t,shippingOptions:n,savedInfo:a,canSaveCredentials:s,invoice:r,invoiceContent:l,nativeProvider:o,nativeParams:i,passwordMissing:c,error:d,confirmPaymentUrl:m}=e.payment,u=Boolean(r&&(!o||!Eo.has(o))),{needCardholderName:h,needCountry:Z,needZip:v}=i||{},{nameRequested:P,phoneRequested:g,emailRequested:p,shippingAddressRequested:E,flexible:C,phoneToProvider:f,emailToProvider:b,currency:I,prices:y}=r||{};return{step:t,shippingOptions:n,savedInfo:a,canSaveCredentials:s,nativeProvider:o,passwordMissing:c,nameRequested:P,shippingAddressRequested:E,phoneRequested:g,emailRequested:p,flexible:C,phoneToProvider:f,emailToProvider:b,currency:I,prices:y,isProviderError:u,invoiceContent:l,needCardholderName:h,needCountry:Z,needZip:v,error:d,confirmPaymentUrl:m}}))((e=>{let{isOpen:t,onClose:n,step:r,shippingOptions:o,savedInfo:i,canSaveCredentials:c,nameRequested:d,shippingAddressRequested:m,phoneRequested:u,emailRequested:h,phoneToProvider:Z,emailToProvider:v,currency:P,passwordMissing:p,isProviderError:E,invoiceContent:C,nativeProvider:f,prices:b,needCardholderName:I,needCountry:y,needZip:S,confirmPaymentUrl:N,error:k}=e;const{validateRequestedInfo:w,sendPaymentForm:M,setPaymentStep:T,sendCredentialsInfo:R,clearPaymentError:A}=(0,s.Sv)(),[L,F]=(0,gn.Z)(ao,no),[x,D]=(0,a.eJ)(!1),O=(0,g.Z)(),U=r!==l.KB.ConfirmPayment;(0,a.d4)((()=>{(r||k)&&D(!1)}),[r,k]),(0,a.d4)((()=>{null!=k&&k.field&&F({type:"setFormErrors",payload:{[k.field]:k.message}})}),[k,F]),(0,a.d4)((()=>{if(i){const{name:e,phone:t,email:n,shippingAddress:a}=i;F({type:"updateUserInfo",payload:{fullName:e,phone:t&&"+"!==t.charAt(0)?`+${t}`:t,email:n,...a||{}}})}}),[i,F]);const G=(0,a.I4)((()=>{A()}),[A]),_=(0,a.Ye)((()=>r!==l.KB.Checkout?0:function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[],t=arguments.length>1?arguments[1]:void 0,n=arguments.length>2?arguments[2]:void 0;const a=t?bo(t,n):[];let s=0;const r=e.concat(a||[]);return s=r.reduce(((e,t)=>e+t.amount),s),s}(b,o,L.shipping)),[r,L.shipping,b,o]),J=(0,a.Ye)((()=>{if(r===l.KB.Checkout)return function(e,t,n){const a=`${function(e){const t=Wl(e);return Kl[t]||""}(e.cardNumber)} *${e.cardNumber.slice(-4)}`,s=e.streetLine1?`${e.streetLine1}, ${e.city}, ${e.countryIso2}`:void 0,{phone:r,fullName:l}=e,o=t?fo(t,e.shipping):void 0;return{paymentMethod:a,paymentProvider:n,shippingAddress:s,name:l,phone:r,shippingMethod:null==o?void 0:o.title}}(L,o,f||"")}),[r,L,o,f]),X=(0,a.I4)((()=>{const{saveInfo:e}=L,t=function(e){const{streetLine1:t,streetLine2:n,city:a,state:s,countryIso2:r,postCode:l,fullName:o,phone:i,email:c}=e;return{name:o,phone:i,email:c,shippingAddress:{streetLine1:t,streetLine2:n,city:a,state:s,countryIso2:r,postCode:l}}}(L);w({requestInfo:t,saveInfo:e})}),[w,L]),z=(0,a.I4)((()=>{const e=function(e){const{cardNumber:t,cardholder:n,expiry:a,cvv:s,billingCountry:r,billingZip:l}=e,[o,i]=a.split("/");return{data:{cardNumber:t,cardholder:n,expiryMonth:o,expiryYear:i,cvv:s,country:r,zip:l}}}(L);R({credentials:e})}),[R,L]),H=(0,a.I4)((()=>{M({shippingOptionId:L.shipping,saveCredentials:L.saveCredentials})}),[M,L]),V=(0,a.I4)((e=>{T({step:e})}),[T]),j=(0,a.I4)((()=>{switch(D(!0),r){case l.KB.ShippingInfo:return X();case l.KB.Shipping:return V(l.KB.PaymentInfo);case l.KB.PaymentInfo:return z();case l.KB.Checkout:return H();default:return()=>{}}}),[r,X,V,z,H]),q=(0,a.Ye)((()=>{switch(r){case l.KB.ShippingInfo:return O("PaymentShippingInfo");case l.KB.Shipping:return O("PaymentShippingMethod");case l.KB.PaymentInfo:return O("PaymentCardInfo");case l.KB.Checkout:return O("PaymentCheckout");case l.KB.ConfirmPayment:return O("Checkout.WebConfirmation.Title");default:return""}}),[r,O]),K=(0,a.Ye)((()=>r===l.KB.Checkout?O("Checkout.PayPrice",(0,Yl.x)(_,P,O.code)):O("Next")),[r,O,P,_]);return E?a.ZP.createElement(Oe.Z,{className:"error",isOpen:t,onClose:n},a.ZP.createElement("p",null,"Sorry, Telegram WebZ doesn't support payments with this provider yet. ",a.ZP.createElement("br",null),"Please use one of our mobile apps to do this."),a.ZP.createElement(B.Z,{isText:!0,onClick:n},O("OK"))):a.ZP.createElement(Oe.Z,{className:"PaymentModal",isOpen:t,onClose:n},a.ZP.createElement("div",{className:"header",dir:O.isRtl?"rtl":void 0},a.ZP.createElement(B.Z,{className:"close-button",color:"translucent",round:!0,size:"smaller",onClick:n,ariaLabel:"Close"},a.ZP.createElement("i",{className:"icon-close"})),a.ZP.createElement("h3",null,q)),void 0!==r?a.ZP.createElement($.Z,{name:"slide",activeKey:r},a.ZP.createElement("div",{className:"content custom-scroll"},function(e){switch(e){case l.KB.ShippingInfo:return a.ZP.createElement(oo,{state:L,dispatch:F,needAddress:Boolean(m),needEmail:Boolean(h||v),needPhone:Boolean(u||Z),needName:Boolean(d)});case l.KB.Shipping:return a.ZP.createElement(io,{state:L,dispatch:F,shippingOptions:o||[],currency:P});case l.KB.PaymentInfo:return a.ZP.createElement(go,{state:L,dispatch:F,canSaveCredentials:Boolean(!p&&c),needCardholderName:I,needCountry:y,needZip:S});case l.KB.Checkout:return a.ZP.createElement(uo,{prices:b,shippingPrices:L.shipping&&o?bo(o,L.shipping):void 0,totalPrice:_,invoiceContent:C,checkoutInfo:J,currency:P});case l.KB.ConfirmPayment:return a.ZP.createElement(po,{url:N});default:return}}(r))):a.ZP.createElement("div",{className:"empty-content"},a.ZP.createElement(Y.Z,{color:"gray"})),U&&a.ZP.createElement("div",{className:"footer"},a.ZP.createElement(B.Z,{type:"submit",onClick:j,disabled:x,isLoading:x},K)),k&&!k.field&&function(){if(k)return a.ZP.createElement(Oe.Z,{className:"error",isOpen:Boolean(k),onClose:G},a.ZP.createElement("h4",null,k.description||"Error"),a.ZP.createElement("p",null,k.description||"Error"),a.ZP.createElement(B.Z,{isText:!0,onClick:A},O("OK")))}())})));function fo(e,t){return e.find((e=>{let{id:n}=e;return n===t}))}function bo(e,t){const n=fo(e,t);return null==n?void 0:n.prices}const Io=(0,a.X$)((0,s.c$)((e=>{const{receipt:t}=e.payment,{currency:n,prices:a,info:s,totalAmount:r,credentialsTitle:l,shippingPrices:o,shippingMethod:i,photoUrl:c,text:d,title:m}=t||{};return{currency:n,prices:a,info:s,totalAmount:r,credentialsTitle:l,shippingPrices:o,shippingMethod:i,photoUrl:c,text:d,title:m}}))((e=>{let{isOpen:t,onClose:n,prices:s,shippingPrices:r,totalAmount:l,currency:o,info:i,photoUrl:c,text:d,title:m,credentialsTitle:u,shippingMethod:h}=e;const Z=(0,g.Z)(),v=(0,a.Ye)((()=>function(e,t,n){if(!t)return{paymentMethod:e};const{shippingAddress:a}=t,s=null!=a&&a.streetLine1?`${a.streetLine1}, ${a.city}, ${a.countryIso2}`:void 0,{phone:r,name:l}=t;return{paymentMethod:e,paymentProvider:"Stripe",shippingAddress:s,name:l,phone:r,shippingMethod:n}}(u,i,h)),[i,h,u]);return a.ZP.createElement(Oe.Z,{className:"PaymentModal PaymentModal-receipt",isOpen:t,onClose:n},a.ZP.createElement("div",null,a.ZP.createElement("div",{className:"header",dir:Z.isRtl?"rtl":void 0},a.ZP.createElement(B.Z,{className:"close-button",color:"translucent",round:!0,size:"smaller",onClick:n,ariaLabel:"Close"},a.ZP.createElement("i",{className:"icon-close"})),a.ZP.createElement("h3",null," ",Z("PaymentReceipt")," ")),a.ZP.createElement("div",{className:"receipt-content custom-scroll"},a.ZP.createElement(uo,{prices:s,shippingPrices:r,totalPrice:l,invoiceContent:{photoUrl:c,text:d,title:m},checkoutInfo:v,currency:o}))))})))},9364:(e,t,n)=>{n.d(t,{Z:()=>d});var a=n(4050),s=n(3716),r=n(7361),l=n(6752),o=n(9107),i=n(231);const c=r.wB?550:400,d=(0,a.X$)((e=>{let{isLoading:t=!1,isPasswordVisible:n,error:d,hint:m,placeholder:u="Password",submitLabel:h="Next",clearError:Z,onChangePasswordVisibility:v,onInputChange:P,onSubmit:g}=e;const p=(0,a.sO)(null),E=(0,o.Z)(),[C,f]=(0,a.eJ)(""),[b,I]=(0,a.eJ)(!1);return(0,a.d4)((()=>{r.$b||setTimeout((()=>{p.current.focus()}),c)}),[]),(0,a.d4)((()=>{d&&requestAnimationFrame((()=>{p.current.focus(),p.current.select()}))}),[d]),a.ZP.createElement("form",{action:"",onSubmit:function(e){e.preventDefault(),t||b&&g(C)},autoComplete:"off"},a.ZP.createElement("div",{className:(0,l.Z)("input-group password-input",C&&"touched",d&&"error"),dir:E.isRtl?"rtl":void 0},a.ZP.createElement("input",{ref:p,className:"form-control",type:n?"text":"password",id:"sign-in-password",value:C||"",autoComplete:"current-password",onChange:function(e){d&&Z();const{target:t}=e;f(t.value),I(t.value.length>=s.lo),P&&P(t.value)},dir:"auto"}),a.ZP.createElement("label",null,d||m||u),a.ZP.createElement("div",{className:"toggle-password",onClick:function(){v(!n)},role:"button",tabIndex:0,title:"Toggle password visibility"},a.ZP.createElement("i",{className:n?"icon-eye":"icon-eye-closed"}))),b&&a.ZP.createElement(i.Z,{type:"submit",ripple:!0,isLoading:t},h))}))},3490:(e,t,n)=>{n.d(t,{Z:()=>u});var a=n(4050),s=n(3716),r=n(7361),l=n(7324),o=n(7799);const i=[0,50],c=[0,20],d=[20,0],m=r.wB?s.qp:s.z7,u=(0,a.X$)((e=>{let{isPasswordVisible:t,isBig:n}=e;const[r,u]=(0,a.eJ)(),[h,Z]=(0,a.eJ)(),[v,P]=(0,a.eJ)(!1),[g,p]=(0,a.eJ)(!1);(0,a.d4)((()=>{r?setTimeout((()=>p(!0)),2e3):(0,l.Z)("MonkeyClose").then(u)}),[r]),(0,a.d4)((()=>{h||(0,l.Z)("MonkeyPeek").then(Z)}),[h]);const E=(0,a.I4)((()=>P(!0)),[]);return a.ZP.createElement("div",{id:"monkey",className:n?"big":""},!v&&a.ZP.createElement("div",{className:"monkey-preview"}),r&&a.ZP.createElement(o.Z,{id:"closeMonkey",size:n?s.K2:m,className:g?"hidden":"shown",animationData:r,playSegment:i,noLoop:!0,onLoad:E}),h&&a.ZP.createElement(o.Z,{id:"peekMonkey",size:n?s.K2:m,className:g?"shown":"hidden",animationData:h,playSegment:t?c:d,noLoop:!0}))}))},710:(e,t,n)=>{n.d(t,{Z:()=>P});var a=n(4050),s=n(6752),r=n(3716),l=n(1394),o=n(9107),i=n(231),c=n(3103),d=n(4288);const m={type:"blob",quality:1,format:"jpeg",circle:!1,size:{width:1024,height:1024}};let u,h,Z;const v=(0,a.X$)((e=>{let{file:t,onChange:s,onClose:v}=e;const[P,g]=(0,a.eJ)(!1);(0,a.d4)((()=>{t&&(P?async function(e){try{const t=document.getElementById("avatar-crop");if(!t)return;const{offsetWidth:n,offsetHeight:a}=t;Z=new u(t,{enableZoom:!0,boundary:{width:n,height:a},viewport:{width:n-16,height:a-16,type:"circle"}});const s=await(0,l.YJ)(e);await Z.bind({url:s})}catch(e){r.eM&&console.error(e)}}(t):async function(){return h||(h=Promise.all([n.e(99),n.e(472)]).then(n.bind(n,3472)),u=(await h).default),h}().then((()=>g(!0))))}),[t,P]);const p=(0,o.Z)(),E=(0,a.I4)((async()=>{if(!Z)return;const e=await Z.result(m),t="string"==typeof e?e:(0,l.hl)(e,"avatar.jpg");s(t)}),[s]);return a.ZP.createElement(c.Z,{isOpen:Boolean(t),onClose:v,title:"Drag to reposition",className:"CropModal",hasCloseButton:!0},P?a.ZP.createElement("div",{id:"avatar-crop"}):a.ZP.createElement(d.Z,null),a.ZP.createElement(i.Z,{className:"confirm-button",round:!0,color:"primary",onClick:E,ariaLabel:p("CropImage")},a.ZP.createElement("i",{className:"icon-check"})))})),P=(0,a.X$)((e=>{let{title:t="Change your profile picture",disabled:n,currentAvatarBlobUrl:r,onChange:l}=e;const[o,i]=(0,a.eJ)(),[c,d]=(0,a.eJ)(r);(0,a.d4)((()=>{d(r)}),[r]);const m=(0,a.I4)((e=>{i(void 0),l(e),c&&URL.revokeObjectURL(c),d(URL.createObjectURL(e))}),[c,l]),u=(0,a.I4)((()=>{i(void 0)}),[]),h=(0,s.Z)(c&&"filled",n&&"disabled");return a.ZP.createElement("div",{className:"AvatarEditable"},a.ZP.createElement("label",{className:h,role:"button",tabIndex:0,title:t},a.ZP.createElement("input",{type:"file",onChange:function(e){const t=e.target;t&&t.files&&t.files[0]&&(i(t.files[0]),t.value="")},accept:"image/png, image/jpeg"}),a.ZP.createElement("i",{className:"icon-camera-add"}),c&&a.ZP.createElement("img",{src:c,alt:"Avatar"})),a.ZP.createElement(v,{file:o,onClose:u,onChange:m}))}))},6352:(e,t,n)=>{e.exports=n.p+"mastercard.4216118edafe23cc2dec..svg"},5753:(e,t,n)=>{e.exports=n.p+"visa.e5a7c336e1deb4b92a63..svg"}}]); -//# sourceMappingURL=395.93d060131194800fb151.js.map \ No newline at end of file diff --git a/dist/395.93d060131194800fb151.js.map b/dist/395.93d060131194800fb151.js.map deleted file mode 100644 index 235d67d5e..000000000 --- a/dist/395.93d060131194800fb151.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"395.93d060131194800fb151.js","mappings":"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","sources":["webpack://telegram-t/./src/hooks/useBlur.ts","webpack://telegram-t/./src/hooks/useBlurSync.ts","webpack://telegram-t/./src/components/mediaViewer/helpers/ghostAnimation.ts","webpack://telegram-t/./src/components/mediaViewer/MediaViewerActions.tsx","webpack://telegram-t/./src/components/mediaViewer/MediaViewerFooter.tsx","webpack://telegram-t/./src/hooks/useFullscreen.ts","webpack://telegram-t/./src/components/mediaViewer/helpers/formatFileSize.ts","webpack://telegram-t/./src/components/mediaViewer/VideoPlayerControls.tsx","webpack://telegram-t/./src/components/mediaViewer/VideoPlayer.tsx","webpack://telegram-t/./src/components/mediaViewer/MediaViewerContent.tsx","webpack://telegram-t/./src/components/mediaViewer/MediaViewerSlides.tsx","webpack://telegram-t/./src/components/mediaViewer/PanZoom.tsx","webpack://telegram-t/./src/components/mediaViewer/SenderInfo.tsx","webpack://telegram-t/./src/components/mediaViewer/SlideTransition.tsx","webpack://telegram-t/./src/components/mediaViewer/ZoomControls.tsx","webpack://telegram-t/./src/components/mediaViewer/MediaViewer.tsx","webpack://telegram-t/./src/components/common/ChatOrUserPicker.tsx","webpack://telegram-t/./src/components/main/ForwardPicker.tsx","webpack://telegram-t/./src/components/main/Dialogs.tsx","webpack://telegram-t/./src/components/main/Notifications.tsx","webpack://telegram-t/./src/components/main/SafeLinkModal.tsx","webpack://telegram-t/./src/components/common/CalendarModal.tsx","webpack://telegram-t/./src/components/main/HistoryCalendar.tsx","webpack://telegram-t/./src/components/main/NewContactModal.tsx","webpack://telegram-t/./src/components/common/DeleteMessageModal.tsx","webpack://telegram-t/./src/components/common/PinMessageModal.tsx","webpack://telegram-t/./src/components/common/UnpinAllMessagesModal.tsx","webpack://telegram-t/./src/components/middle/hooks/useCopySelectedMessages.ts","webpack://telegram-t/./src/components/middle/DeleteSelectedMessageModal.tsx","webpack://telegram-t/./src/components/common/ReportMessageModal.tsx","webpack://telegram-t/./src/components/middle/MessageSelectToolbar.tsx","webpack://telegram-t/./src/components/common/SeenByModal.tsx","webpack://telegram-t/./src/components/middle/ReactorListModal.tsx","webpack://telegram-t/./src/components/middle/EmojiInteractionAnimation.tsx","webpack://telegram-t/./src/hooks/useSelectWithEnter.ts","webpack://telegram-t/./src/components/left/search/LeftSearchResultChat.tsx","webpack://telegram-t/./src/components/left/search/RecentContacts.tsx","webpack://telegram-t/./src/components/left/search/ChatMessage.tsx","webpack://telegram-t/./src/components/left/search/DateSuggest.tsx","webpack://telegram-t/./src/components/left/search/ChatResults.tsx","webpack://telegram-t/./src/components/left/search/ChatMessageResults.tsx","webpack://telegram-t/./src/components/left/search/helpers/createMapStateToProps.ts","webpack://telegram-t/./src/components/left/search/MediaResults.tsx","webpack://telegram-t/./src/components/left/search/LinkResults.tsx","webpack://telegram-t/./src/components/left/search/FileResults.tsx","webpack://telegram-t/./src/components/left/search/AudioResults.tsx","webpack://telegram-t/./src/components/left/search/LeftSearch.tsx","webpack://telegram-t/./src/hooks/reducers/useTwoFaReducer.ts","webpack://telegram-t/./src/components/left/settings/SettingsHeader.tsx","webpack://telegram-t/./src/components/left/settings/SettingsMain.tsx","webpack://telegram-t/./src/components/common/UsernameInput.tsx","webpack://telegram-t/./src/components/left/settings/SettingsEditProfile.tsx","webpack://telegram-t/./src/components/left/settings/SettingsDataStorage.tsx","webpack://telegram-t/./src/components/left/settings/folders/SettingsFoldersMain.tsx","webpack://telegram-t/./src/components/ui/ShowMoreButton.tsx","webpack://telegram-t/./src/components/left/settings/folders/SettingsFoldersEdit.tsx","webpack://telegram-t/./src/components/left/settings/folders/SettingsFoldersChatsPicker.tsx","webpack://telegram-t/./src/components/left/settings/folders/SettingsFoldersChatFilters.tsx","webpack://telegram-t/./src/components/left/settings/folders/SettingsFolders.tsx","webpack://telegram-t/./src/components/middle/composer/StickerSetCoverAnimated.tsx","webpack://telegram-t/./src/components/middle/composer/StickerSetCover.tsx","webpack://telegram-t/./src/components/left/settings/SettingsStickerSet.tsx","webpack://telegram-t/./src/components/left/settings/SettingsGeneral.tsx","webpack://telegram-t/./src/util/colors.ts","webpack://telegram-t/./src/components/left/settings/WallpaperTile.tsx","webpack://telegram-t/./src/components/left/settings/SettingsGeneralBackground.tsx","webpack://telegram-t/./src/components/left/settings/SettingsGeneralBackgroundColor.tsx","webpack://telegram-t/./src/components/left/settings/SettingsNotifications.tsx","webpack://telegram-t/./src/components/left/settings/SettingsPrivacy.tsx","webpack://telegram-t/./src/components/left/settings/SettingsLanguage.tsx","webpack://telegram-t/./src/components/left/settings/helper/privacy.ts","webpack://telegram-t/./src/components/left/settings/SettingsPrivacyVisibility.tsx","webpack://telegram-t/./src/components/left/settings/SettingsPrivacyActiveSessions.tsx","webpack://telegram-t/./src/components/left/settings/BlockUserModal.tsx","webpack://telegram-t/./src/components/left/settings/SettingsPrivacyBlockedUsers.tsx","webpack://telegram-t/./src/components/left/settings/twoFa/SettingsTwoFaEnabled.tsx","webpack://telegram-t/./src/components/left/settings/twoFa/SettingsTwoFaPassword.tsx","webpack://telegram-t/./src/components/left/settings/twoFa/SettingsTwoFaStart.tsx","webpack://telegram-t/./src/components/left/settings/twoFa/SettingsTwoFaSkippableForm.tsx","webpack://telegram-t/./src/components/left/settings/twoFa/SettingsTwoFaCongratulations.tsx","webpack://telegram-t/./src/components/left/settings/twoFa/SettingsTwoFaEmailCode.tsx","webpack://telegram-t/./src/components/left/settings/twoFa/SettingsTwoFa.tsx","webpack://telegram-t/./src/components/left/settings/SettingsPrivacyVisibilityExceptionList.tsx","webpack://telegram-t/./src/components/left/settings/SettingsQuickReaction.tsx","webpack://telegram-t/./src/components/left/settings/Settings.tsx","webpack://telegram-t/./src/components/left/main/ContactList.tsx","webpack://telegram-t/./src/components/left/newChat/NewChatStep1.tsx","webpack://telegram-t/./src/components/left/newChat/NewChatStep2.tsx","webpack://telegram-t/./src/components/left/newChat/NewChat.tsx","webpack://telegram-t/./src/components/left/ArchivedChats.tsx","webpack://telegram-t/./src/components/left/ChatFolderModal.tsx","webpack://telegram-t/./src/components/middle/message/helpers/copyOptions.ts","webpack://telegram-t/./src/util/scrollLock.ts","webpack://telegram-t/./src/components/middle/message/ReactionSelectorReaction.tsx","webpack://telegram-t/./src/components/middle/message/ReactionSelector.tsx","webpack://telegram-t/./src/components/middle/message/MessageContextMenu.tsx","webpack://telegram-t/./src/components/middle/message/ContextMenuContainer.tsx","webpack://telegram-t/./src/components/common/StickerSetModal.tsx","webpack://telegram-t/./src/components/middle/HeaderMenuContainer.tsx","webpack://telegram-t/./src/components/middle/MobileSearch.tsx","webpack://telegram-t/./src/util/findInViewport.ts","webpack://telegram-t/./src/util/isFullyVisible.ts","webpack://telegram-t/./src/util/setTooltipItemVisible.ts","webpack://telegram-t/./src/components/middle/composer/hooks/useKeyboardNavigation.ts","webpack://telegram-t/./src/components/middle/composer/MentionTooltip.tsx","webpack://telegram-t/./src/components/middle/composer/AttachmentModal.tsx","webpack://telegram-t/./src/components/middle/composer/PollModal.tsx","webpack://telegram-t/./src/components/middle/composer/EmojiButton.tsx","webpack://telegram-t/./src/components/middle/composer/EmojiCategory.tsx","webpack://telegram-t/./src/components/middle/composer/EmojiPicker.tsx","webpack://telegram-t/./src/components/middle/composer/StickerSet.tsx","webpack://telegram-t/./src/components/middle/composer/StickerPicker.tsx","webpack://telegram-t/./src/components/common/GifButton.tsx","webpack://telegram-t/./src/components/middle/composer/GifPicker.tsx","webpack://telegram-t/./src/components/middle/composer/SymbolMenuFooter.tsx","webpack://telegram-t/./src/components/middle/composer/SymbolMenu.tsx","webpack://telegram-t/./src/components/middle/composer/BotCommand.tsx","webpack://telegram-t/./src/components/middle/composer/BotCommandTooltip.tsx","webpack://telegram-t/./src/components/middle/composer/BotCommandMenu.tsx","webpack://telegram-t/./src/components/middle/composer/StickerTooltip.tsx","webpack://telegram-t/./src/components/middle/composer/CustomSendMenu.tsx","webpack://telegram-t/./src/components/middle/composer/EmojiTooltip.tsx","webpack://telegram-t/./src/components/middle/composer/inlineResults/BaseResult.tsx","webpack://telegram-t/./src/components/middle/composer/inlineResults/MediaResult.tsx","webpack://telegram-t/./src/components/middle/composer/inlineResults/ArticleResult.tsx","webpack://telegram-t/./src/components/middle/composer/inlineResults/GifResult.tsx","webpack://telegram-t/./src/components/middle/composer/inlineResults/StickerResult.tsx","webpack://telegram-t/./src/components/middle/composer/InlineBotTooltip.tsx","webpack://telegram-t/./src/components/middle/composer/SendAsMenu.tsx","webpack://telegram-t/./src/components/right/RightSearch.tsx","webpack://telegram-t/./src/components/right/StickerSetResult.tsx","webpack://telegram-t/./src/components/right/StickerSearch.tsx","webpack://telegram-t/./src/components/right/GifSearch.tsx","webpack://telegram-t/./src/components/right/statistics/StatisticsOverview.tsx","webpack://telegram-t/./src/components/right/statistics/StatisticsRecentMessage.tsx","webpack://telegram-t/./src/components/right/statistics/Statistics.tsx","webpack://telegram-t/./src/components/right/PollAnswerResults.tsx","webpack://telegram-t/./src/components/right/PollResults.tsx","webpack://telegram-t/./src/components/right/management/ManageUser.tsx","webpack://telegram-t/./src/components/right/management/ManageGroup.tsx","webpack://telegram-t/./src/components/right/management/ManageGroupPermissions.tsx","webpack://telegram-t/./src/components/right/management/RemoveGroupUserModal.tsx","webpack://telegram-t/./src/components/right/management/ManageChatRemovedUsers.tsx","webpack://telegram-t/./src/components/right/management/ManageChannel.tsx","webpack://telegram-t/./src/components/right/management/ManageChatPrivacyType.tsx","webpack://telegram-t/./src/components/right/management/ManageDiscussion.tsx","webpack://telegram-t/./src/components/right/management/ManageGroupUserPermissions.tsx","webpack://telegram-t/./src/components/right/management/ManageChatAdministrators.tsx","webpack://telegram-t/./src/components/right/management/ManageGroupRecentActions.tsx","webpack://telegram-t/./src/components/right/management/ManageGroupAdminRights.tsx","webpack://telegram-t/./src/components/right/management/ManageGroupMembers.tsx","webpack://telegram-t/./src/components/right/management/ManageGroupUserPermissionsCreate.tsx","webpack://telegram-t/./src/components/right/management/ManageInvites.tsx","webpack://telegram-t/./src/components/right/management/ManageInvite.tsx","webpack://telegram-t/./src/components/right/management/ManageReactions.tsx","webpack://telegram-t/./src/components/right/management/ManageInviteInfo.tsx","webpack://telegram-t/./src/components/right/management/JoinRequest.tsx","webpack://telegram-t/./src/components/right/management/ManageJoinRequests.tsx","webpack://telegram-t/./src/components/right/management/Management.tsx","webpack://telegram-t/./src/components/common/helpers/detectCardType.ts","webpack://telegram-t/./src/util/countries.ts","webpack://telegram-t/./src/hooks/reducers/usePaymentReducer.ts","webpack://telegram-t/./src/hooks/useFocusAfterAnimation.tsx","webpack://telegram-t/./src/components/ui/Select.tsx","webpack://telegram-t/./src/components/payment/ShippingInfo.tsx","webpack://telegram-t/./src/components/payment/Shipping.tsx","webpack://telegram-t/./src/components/payment/Checkout.tsx","webpack://telegram-t/./src/components/payment/ExpiryInput.tsx","webpack://telegram-t/./src/components/middle/helpers/inputFormatters.ts","webpack://telegram-t/./src/components/payment/CardInput.tsx","webpack://telegram-t/./src/components/payment/PaymentInfo.tsx","webpack://telegram-t/./src/components/payment/ConfirmPayment.tsx","webpack://telegram-t/./src/components/payment/PaymentModal.tsx","webpack://telegram-t/./src/components/payment/ReceiptModal.tsx","webpack://telegram-t/./src/components/common/PasswordForm.tsx","webpack://telegram-t/./src/components/common/PasswordMonkey.tsx","webpack://telegram-t/./src/components/ui/CropModal.tsx","webpack://telegram-t/./src/components/ui/AvatarEditable.tsx"],"sourcesContent":["import { useEffect, useRef } from '../lib/teact/teact';\n\nimport fastBlur from '../lib/fastBlur';\nimport { imgToCanvas } from '../util/files';\nimport useForceUpdate from './useForceUpdate';\n\nconst RADIUS = 2;\nconst ITERATIONS = 2;\nconst MAX_CACHE_SIZE = 1000;\n\nconst cache = new Map();\n\nexport default function useBlur(dataUri?: string, isDisabled = false, delay?: number) {\n const blurredRef = useRef(dataUri ? cache.get(dataUri) : undefined);\n const timeoutRef = useRef();\n const forceUpdate = useForceUpdate();\n\n if (timeoutRef.current && isDisabled) {\n clearTimeout(timeoutRef.current);\n timeoutRef.current = undefined;\n }\n\n useEffect(() => {\n if (!dataUri || blurredRef.current || isDisabled) {\n return;\n }\n\n const img = new Image();\n\n img.onload = () => {\n const canvas = imgToCanvas(img);\n fastBlur(canvas.getContext('2d'), 0, 0, canvas.width, canvas.height, RADIUS, ITERATIONS);\n const blurredDataUri = canvas.toDataURL();\n\n blurredRef.current = blurredDataUri;\n forceUpdate();\n\n if (cache.size >= MAX_CACHE_SIZE) {\n cache.clear();\n }\n cache.set(dataUri, blurredDataUri);\n };\n\n if (delay) {\n timeoutRef.current = window.setTimeout(() => {\n img.src = dataUri;\n }, delay);\n } else {\n img.src = dataUri;\n }\n }, [dataUri, delay, forceUpdate, isDisabled]);\n\n return blurredRef.current;\n}\n","import { useRef } from '../lib/teact/teact';\n\nimport fastBlur from '../lib/fastBlur';\nimport useOnChange from './useOnChange';\nimport useBlur from './useBlur';\nimport { imgToCanvas } from '../util/files';\n\nconst RADIUS = 2;\nconst ITERATIONS = 2;\n\nexport default function useBlurSync(dataUri: string | false | undefined) {\n const blurredRef = useRef();\n\n let isChanged = false;\n\n useOnChange(() => {\n isChanged = true;\n\n blurredRef.current = undefined;\n\n if (!dataUri) {\n return;\n }\n\n const img = new Image();\n img.src = dataUri;\n if (!img.width) {\n return;\n }\n\n const canvas = imgToCanvas(img);\n fastBlur(canvas.getContext('2d'), 0, 0, canvas.width, canvas.height, RADIUS, ITERATIONS);\n\n blurredRef.current = canvas.toDataURL();\n }, [dataUri]);\n\n // Sometimes `Image` do not manage to load synchronously,\n // so we fall back the non-blurred variant and prepare the async one at least for the next time\n const blurredAsync = useBlur(dataUri || undefined, Boolean(blurredRef.current));\n\n return blurredRef.current || (!isChanged && blurredAsync) || dataUri || undefined;\n}\n","import { ApiMessage, ApiDimensions } from '../../../api/types';\n\nimport { MediaViewerOrigin } from '../../../types';\n\nimport { ANIMATION_END_DELAY } from '../../../config';\nimport {\n calculateDimensions,\n getMediaViewerAvailableDimensions,\n MEDIA_VIEWER_MEDIA_QUERY,\n REM,\n} from '../../common/helpers/mediaDimensions';\nimport windowSize from '../../../util/windowSize';\nimport stopEvent from '../../../util/stopEvent';\nimport { IS_TOUCH_ENV } from '../../../util/environment';\nimport { getMessageHtmlId } from '../../../global/helpers';\n\nconst ANIMATION_DURATION = 200;\n\nexport function animateOpening(\n hasFooter: boolean,\n origin: MediaViewerOrigin,\n bestImageData: string,\n dimensions: ApiDimensions,\n isVideo: boolean,\n message?: ApiMessage,\n) {\n const { mediaEl: fromImage } = getNodes(origin, message);\n if (!fromImage) {\n return;\n }\n\n const { width: windowWidth } = windowSize.get();\n const {\n width: availableWidth, height: availableHeight,\n } = getMediaViewerAvailableDimensions(hasFooter, isVideo);\n const { width: toWidth, height: toHeight } = calculateDimensions(\n availableWidth, availableHeight, dimensions.width, dimensions.height,\n );\n const toLeft = (windowWidth - toWidth) / 2;\n const toTop = getTopOffset(hasFooter) + (availableHeight - toHeight) / 2;\n\n let {\n top: fromTop, left: fromLeft, width: fromWidth, height: fromHeight,\n } = fromImage.getBoundingClientRect();\n\n if ([\n MediaViewerOrigin.SharedMedia,\n MediaViewerOrigin.Album,\n MediaViewerOrigin.ScheduledAlbum,\n MediaViewerOrigin.SearchResult,\n ].includes(origin)) {\n const uncovered = uncover(toWidth, toHeight, fromTop, fromLeft, fromWidth, fromHeight);\n fromTop = uncovered.top;\n fromLeft = uncovered.left;\n fromWidth = uncovered.width;\n fromHeight = uncovered.height;\n }\n\n const fromTranslateX = (fromLeft + fromWidth / 2) - (toLeft + toWidth / 2);\n const fromTranslateY = (fromTop + fromHeight / 2) - (toTop + toHeight / 2);\n const fromScaleX = fromWidth / toWidth;\n const fromScaleY = fromHeight / toHeight;\n\n const ghost = createGhost(bestImageData || fromImage);\n applyStyles(ghost, {\n top: `${toTop}px`,\n left: `${toLeft}px`,\n width: `${toWidth}px`,\n height: `${toHeight}px`,\n transform: `translate3d(${fromTranslateX}px, ${fromTranslateY}px, 0) scale(${fromScaleX}, ${fromScaleY})`,\n });\n applyShape(ghost, origin);\n\n document.body.classList.add('ghost-animating');\n\n requestAnimationFrame(() => {\n document.body.appendChild(ghost);\n\n requestAnimationFrame(() => {\n ghost.style.transform = '';\n clearShape(ghost);\n\n setTimeout(() => {\n requestAnimationFrame(() => {\n if (document.body.contains(ghost)) {\n document.body.removeChild(ghost);\n }\n document.body.classList.remove('ghost-animating');\n });\n }, ANIMATION_DURATION + ANIMATION_END_DELAY);\n });\n });\n}\n\nexport function animateClosing(origin: MediaViewerOrigin, bestImageData: string, message?: ApiMessage) {\n const { container, mediaEl: toImage } = getNodes(origin, message);\n if (!toImage) {\n return;\n }\n\n const fromImage = document.getElementById('MediaViewer')!.querySelector(\n '.MediaViewerSlide--active img, .MediaViewerSlide--active video',\n );\n if (!fromImage || !toImage) {\n return;\n }\n\n const {\n top: fromTop, left: fromLeft, width: fromWidth, height: fromHeight,\n } = fromImage.getBoundingClientRect();\n const {\n top: targetTop, left: toLeft, width: toWidth, height: toHeight,\n } = toImage.getBoundingClientRect();\n\n let toTop = targetTop;\n if (!isElementInViewport(container)) {\n const { height: windowHeight } = windowSize.get();\n toTop = targetTop < fromTop ? -toHeight : windowHeight;\n }\n\n const fromTranslateX = (fromLeft + fromWidth / 2) - (toLeft + toWidth / 2);\n const fromTranslateY = (fromTop + fromHeight / 2) - (toTop + toHeight / 2);\n let fromScaleX = fromWidth / toWidth;\n let fromScaleY = fromHeight / toHeight;\n\n const shouldFadeOut = (\n [MediaViewerOrigin.Inline, MediaViewerOrigin.ScheduledInline].includes(origin)\n && !isMessageImageFullyVisible(container, toImage)\n ) || (\n [MediaViewerOrigin.Album, MediaViewerOrigin.ScheduledAlbum].includes(origin)\n && !isMessageImageFullyVisible(container, toImage)\n );\n\n if ([\n MediaViewerOrigin.SharedMedia,\n MediaViewerOrigin.Album,\n MediaViewerOrigin.ScheduledAlbum,\n MediaViewerOrigin.SearchResult,\n ].includes(origin)) {\n if (fromScaleX > fromScaleY) {\n fromScaleX = fromScaleY;\n } else if (fromScaleY > fromScaleX) {\n fromScaleY = fromScaleX;\n }\n }\n\n const existingGhost = document.getElementsByClassName('ghost')[0] as HTMLDivElement;\n\n const ghost = existingGhost || createGhost(bestImageData || toImage, origin);\n if (!existingGhost) {\n applyStyles(ghost, {\n top: `${toTop}px`,\n left: `${toLeft}px`,\n width: `${toWidth}px`,\n height: `${toHeight}px`,\n transform: `translate3d(${fromTranslateX}px, ${fromTranslateY}px, 0) scale(${fromScaleX}, ${fromScaleY})`,\n });\n }\n\n requestAnimationFrame(() => {\n if (existingGhost) {\n const {\n top,\n left,\n width,\n height,\n } = existingGhost.getBoundingClientRect();\n const scaleX = width / toWidth;\n const scaleY = height / toHeight;\n\n applyStyles(ghost, {\n transition: 'none',\n top: `${toTop}px`,\n left: `${toLeft}px`,\n transformOrigin: 'top left',\n transform: `translate3d(${left - toLeft}px, ${top - toTop}px, 0) scale(${scaleX}, ${scaleY})`,\n width: `${toWidth}px`,\n height: `${toHeight}px`,\n });\n }\n document.body.classList.add('ghost-animating');\n if (!existingGhost) document.body.appendChild(ghost);\n\n requestAnimationFrame(() => {\n if (existingGhost) {\n existingGhost.style.transition = '';\n }\n\n ghost.style.transform = '';\n\n if (shouldFadeOut) {\n ghost.style.opacity = '0';\n }\n\n applyShape(ghost, origin);\n\n setTimeout(() => {\n requestAnimationFrame(() => {\n if (document.body.contains(ghost)) {\n document.body.removeChild(ghost);\n }\n document.body.classList.remove('ghost-animating');\n });\n }, ANIMATION_DURATION + ANIMATION_END_DELAY);\n });\n });\n}\n\nfunction createGhost(source: string | HTMLImageElement | HTMLVideoElement, origin?: MediaViewerOrigin) {\n const ghost = document.createElement('div');\n ghost.classList.add('ghost');\n\n const img = new Image();\n img.draggable = false;\n img.oncontextmenu = stopEvent;\n\n if (typeof source === 'string') {\n img.src = source;\n } else if (source instanceof HTMLVideoElement) {\n img.src = source.poster;\n } else {\n img.src = source.src;\n }\n\n ghost.appendChild(img);\n\n if (origin === MediaViewerOrigin.ProfileAvatar || origin === MediaViewerOrigin.SettingsAvatar) {\n ghost.classList.add('ProfileInfo');\n if (origin === MediaViewerOrigin.SettingsAvatar) {\n ghost.classList.add('self');\n }\n const profileInfo = document.querySelector(\n origin === MediaViewerOrigin.ProfileAvatar\n ? '#RightColumn .ProfileInfo .info'\n : '#Settings .ProfileInfo .info',\n );\n if (profileInfo) {\n ghost.appendChild(profileInfo.cloneNode(true));\n }\n }\n\n return ghost;\n}\n\nfunction uncover(realWidth: number, realHeight: number, top: number, left: number, width: number, height: number) {\n if (realWidth === realHeight) {\n const size = Math.max(width, height) * (realWidth / realHeight);\n left -= (size - width) / 2;\n top -= (size - height) / 2;\n width = size;\n height = size;\n } else if (realWidth > realHeight) {\n const srcWidth = width;\n width = height * (realWidth / realHeight);\n left -= (width - srcWidth) / 2;\n } else if (realHeight > realWidth) {\n const srcHeight = height;\n height = width * (realHeight / realWidth);\n top -= (height - srcHeight) / 2;\n }\n\n return {\n top, left, width, height,\n };\n}\n\nfunction isElementInViewport(el: HTMLElement) {\n if (el.style.display === 'none') {\n return false;\n }\n\n const rect = el.getBoundingClientRect();\n const { height: windowHeight } = windowSize.get();\n\n return (rect.top <= windowHeight) && ((rect.top + rect.height) >= 0);\n}\n\nfunction isMessageImageFullyVisible(container: HTMLElement, imageEl: HTMLElement) {\n const messageListElement = document.querySelector('.Transition__slide--active > .MessageList')!;\n let imgOffsetTop = container.offsetTop + imageEl.closest('.content-inner, .WebPage')!.offsetTop;\n if (container.id.includes('album-media-')) {\n imgOffsetTop += container.parentElement!.offsetTop + container.closest('.Message')!.offsetTop;\n }\n\n return imgOffsetTop > messageListElement.scrollTop\n && imgOffsetTop + imageEl.offsetHeight < messageListElement.scrollTop + messageListElement.offsetHeight;\n}\n\nfunction getTopOffset(hasFooter: boolean) {\n const mql = window.matchMedia(MEDIA_VIEWER_MEDIA_QUERY);\n let topOffsetRem = 4.125;\n if (hasFooter && !IS_TOUCH_ENV) {\n topOffsetRem += mql.matches ? 0.875 : 2.125;\n }\n\n return topOffsetRem * REM;\n}\n\nfunction applyStyles(element: HTMLElement, styles: Record) {\n Object.assign(element.style, styles);\n}\n\nfunction getNodes(origin: MediaViewerOrigin, message?: ApiMessage) {\n let containerSelector;\n let mediaSelector;\n\n switch (origin) {\n case MediaViewerOrigin.Album:\n case MediaViewerOrigin.ScheduledAlbum:\n containerSelector = `.Transition__slide--active > .MessageList #album-media-${getMessageHtmlId(message!.id)}`;\n mediaSelector = '.full-media';\n break;\n\n case MediaViewerOrigin.SharedMedia:\n containerSelector = `#shared-media${getMessageHtmlId(message!.id)}`;\n mediaSelector = 'img';\n break;\n\n case MediaViewerOrigin.SearchResult:\n containerSelector = `#search-media${getMessageHtmlId(message!.id)}`;\n mediaSelector = 'img';\n break;\n\n case MediaViewerOrigin.MiddleHeaderAvatar:\n containerSelector = '.MiddleHeader .Transition__slide--active .ChatInfo .Avatar';\n mediaSelector = '.avatar-media';\n break;\n\n case MediaViewerOrigin.SettingsAvatar:\n containerSelector = '#Settings .ProfileInfo .Transition__slide--active .ProfilePhoto';\n mediaSelector = '.avatar-media';\n break;\n\n case MediaViewerOrigin.ProfileAvatar:\n containerSelector = '#RightColumn .ProfileInfo .Transition__slide--active .ProfilePhoto';\n mediaSelector = '.avatar-media';\n break;\n\n case MediaViewerOrigin.ScheduledInline:\n case MediaViewerOrigin.Inline:\n default:\n containerSelector = `.Transition__slide--active > .MessageList #${getMessageHtmlId(message!.id)}`;\n mediaSelector = '.message-content .full-media, .message-content .thumbnail';\n }\n\n const container = document.querySelector(containerSelector)!;\n const mediaEls = container && container.querySelectorAll(mediaSelector);\n\n return {\n container,\n mediaEl: mediaEls?.[mediaEls.length - 1],\n };\n}\n\nfunction applyShape(ghost: HTMLDivElement, origin: MediaViewerOrigin) {\n switch (origin) {\n case MediaViewerOrigin.Album:\n case MediaViewerOrigin.ScheduledAlbum:\n case MediaViewerOrigin.Inline:\n case MediaViewerOrigin.ScheduledInline:\n ghost.classList.add('rounded-corners');\n break;\n\n case MediaViewerOrigin.SharedMedia:\n case MediaViewerOrigin.SettingsAvatar:\n case MediaViewerOrigin.ProfileAvatar:\n case MediaViewerOrigin.SearchResult:\n (ghost.firstChild as HTMLElement).style.objectFit = 'cover';\n break;\n\n case MediaViewerOrigin.MiddleHeaderAvatar:\n ghost.classList.add('circle');\n break;\n }\n}\n\nfunction clearShape(ghost: HTMLDivElement) {\n (ghost.firstChild as HTMLElement).style.objectFit = 'default';\n ghost.classList.remove('rounded-corners', 'circle');\n}\n","import React, {\n FC,\n memo,\n useCallback,\n useMemo,\n} from '../../lib/teact/teact';\nimport { getActions, withGlobal } from '../../global';\n\nimport { ApiMessage } from '../../api/types';\n\nimport { IS_SINGLE_COLUMN_LAYOUT } from '../../util/environment';\nimport { getMessageMediaHash } from '../../global/helpers';\nimport useLang from '../../hooks/useLang';\nimport useMediaWithLoadProgress from '../../hooks/useMediaWithLoadProgress';\nimport { selectIsDownloading, selectIsMessageProtected } from '../../global/selectors';\n\nimport Button from '../ui/Button';\nimport DropdownMenu from '../ui/DropdownMenu';\nimport MenuItem from '../ui/MenuItem';\nimport ProgressSpinner from '../ui/ProgressSpinner';\n\nimport './MediaViewerActions.scss';\n\ntype StateProps = {\n isDownloading: boolean;\n isProtected?: boolean;\n};\n\ntype OwnProps = {\n mediaData?: string;\n isVideo: boolean;\n isZoomed: boolean;\n message?: ApiMessage;\n fileName?: string;\n isAvatar?: boolean;\n onCloseMediaViewer: NoneToVoidFunction;\n onForward: NoneToVoidFunction;\n onZoomToggle: NoneToVoidFunction;\n};\n\nconst MediaViewerActions: FC = ({\n mediaData,\n isVideo,\n isZoomed,\n message,\n fileName,\n isAvatar,\n isDownloading,\n isProtected,\n onCloseMediaViewer,\n onForward,\n onZoomToggle,\n}) => {\n const {\n downloadMessageMedia,\n cancelMessageMediaDownload,\n } = getActions();\n\n const { loadProgress: downloadProgress } = useMediaWithLoadProgress(\n message && getMessageMediaHash(message, 'download'),\n !isDownloading,\n );\n\n const handleDownloadClick = useCallback(() => {\n if (isDownloading) {\n cancelMessageMediaDownload({ message });\n } else {\n downloadMessageMedia({ message });\n }\n }, [cancelMessageMediaDownload, downloadMessageMedia, isDownloading, message]);\n\n const lang = useLang();\n\n const MenuButton: FC<{ onTrigger: () => void; isOpen?: boolean }> = useMemo(() => {\n return ({ onTrigger, isOpen }) => (\n \n \n \n );\n }, []);\n\n function renderDownloadButton() {\n if (isProtected) {\n return undefined;\n }\n\n return isVideo ? (\n \n {isDownloading ? (\n \n ) : (\n \n )}\n \n ) : (\n \n \n \n );\n }\n\n if (IS_SINGLE_COLUMN_LAYOUT) {\n if (isProtected) {\n return undefined;\n }\n\n return (\n
\n \n {!isAvatar && (\n \n {lang('Forward')}\n \n )}\n {isVideo ? (\n \n {isDownloading ? `${Math.round(downloadProgress * 100)}% Downloading...` : 'Download'}\n \n ) : (\n \n {lang('AccActionDownload')}\n \n )}\n \n {isDownloading && }\n
\n );\n }\n\n return (\n
\n {!isAvatar && !isProtected && (\n \n \n \n )}\n {renderDownloadButton()}\n \n \n \n \n \n \n
\n );\n};\n\nexport default memo(withGlobal(\n (global, { message }): StateProps => {\n const isDownloading = message ? selectIsDownloading(global, message) : false;\n const isProtected = selectIsMessageProtected(global, message);\n\n return {\n isDownloading,\n isProtected,\n };\n },\n)(MediaViewerActions));\n","import React, { FC, useEffect, useState } from '../../lib/teact/teact';\n\nimport { IS_SINGLE_COLUMN_LAYOUT } from '../../util/environment';\nimport { throttle } from '../../util/schedulers';\nimport buildClassName from '../../util/buildClassName';\nimport { TextPart } from '../common/helpers/renderMessageText';\nimport { REM } from '../common/helpers/mediaDimensions';\n\nimport './MediaViewerFooter.scss';\n\nconst RESIZE_THROTTLE_MS = 500;\n\ntype OwnProps = {\n text: TextPart | TextPart[];\n onClick: () => void;\n isHidden?: boolean;\n isForVideo: boolean;\n};\n\nconst MediaViewerFooter: FC = ({\n text = '', isHidden, isForVideo, onClick,\n}) => {\n const [isMultiline, setIsMultiline] = useState(false);\n useEffect(() => {\n const footerContent = document.querySelector('.MediaViewerFooter .media-text') as HTMLDivElement | null;\n\n const checkIsMultiline = () => {\n const height = footerContent ? footerContent.clientHeight : 0;\n\n setIsMultiline(height > REM * 2);\n };\n\n // First run for initial detection of multiline footer text\n checkIsMultiline();\n\n const handleResize = throttle(checkIsMultiline, RESIZE_THROTTLE_MS, true);\n\n window.addEventListener('resize', handleResize, false);\n\n return () => {\n window.removeEventListener('resize', handleResize, false);\n };\n }, []);\n\n function stopEvent(e: React.MouseEvent) {\n if (text) {\n e.stopPropagation();\n }\n }\n\n const classNames = buildClassName(\n 'MediaViewerFooter',\n isForVideo && 'is-for-video',\n isHidden && 'is-hidden',\n );\n\n return (\n
\n {text && (\n
\n

{text}

\n
\n )}\n
\n );\n};\n\nexport default MediaViewerFooter;\n","import { useLayoutEffect, useState } from '../lib/teact/teact';\nimport { PLATFORM_ENV } from '../util/environment';\n\ntype RefType = {\n current: HTMLElement | null;\n};\n\ntype ReturnType = [boolean, () => void, () => void] | [false];\ntype CallbackType = (isPlayed: boolean) => void;\n\nconst prop = getBrowserFullscreenElementProp();\n\nexport default function useFullscreenStatus(elRef: RefType, setIsPlayed: CallbackType): ReturnType {\n const [isFullscreen, setIsFullscreen] = useState(Boolean(prop && document[prop]));\n\n const setFullscreen = () => {\n if (!elRef.current || !(prop || PLATFORM_ENV === 'iOS')) {\n return;\n }\n\n if (elRef.current.requestFullscreen) {\n elRef.current.requestFullscreen();\n } else if (elRef.current.webkitRequestFullscreen) {\n elRef.current.webkitRequestFullscreen();\n } else if (elRef.current.webkitEnterFullscreen) {\n elRef.current.webkitEnterFullscreen();\n } else if (elRef.current.mozRequestFullScreen) {\n elRef.current.mozRequestFullScreen();\n }\n\n setIsFullscreen(true);\n };\n\n const exitFullscreen = () => {\n if (!elRef.current) {\n return;\n }\n\n if (document.exitFullscreen) {\n document.exitFullscreen();\n } else if (document.mozCancelFullScreen) {\n document.mozCancelFullScreen();\n } else if (document.webkitCancelFullScreen) {\n document.webkitCancelFullScreen();\n } else if (document.webkitExitFullscreen) {\n document.webkitExitFullscreen();\n }\n\n setIsFullscreen(false);\n };\n\n useLayoutEffect(() => {\n const listener = () => { setIsFullscreen(Boolean(prop && document[prop])); };\n const listenerEnter = () => { setIsFullscreen(true); };\n const listenerExit = () => {\n setIsFullscreen(false);\n setIsPlayed(false);\n };\n const video = elRef.current;\n\n document.addEventListener('fullscreenchange', listener, false);\n document.addEventListener('webkitfullscreenchange', listener, false);\n document.addEventListener('mozfullscreenchange', listener, false);\n\n if (video) {\n video.addEventListener('webkitbeginfullscreen', listenerEnter, false);\n video.addEventListener('webkitendfullscreen', listenerExit, false);\n }\n\n return () => {\n document.removeEventListener('fullscreenchange', listener, false);\n document.removeEventListener('webkitfullscreenchange', listener, false);\n document.removeEventListener('mozfullscreenchange', listener, false);\n if (video) {\n video.removeEventListener('webkitbeginfullscreen', listenerEnter, false);\n video.removeEventListener('webkitendfullscreen', listenerExit, false);\n }\n };\n // eslint-disable-next-line\n }, []);\n\n if (!prop && PLATFORM_ENV !== 'iOS') {\n return [false];\n }\n\n return [isFullscreen, setFullscreen, exitFullscreen];\n}\n\nfunction getBrowserFullscreenElementProp() {\n if (typeof document.fullscreenElement !== 'undefined') {\n return 'fullscreenElement';\n } else if (typeof document.mozFullScreenElement !== 'undefined') {\n return 'mozFullScreenElement';\n } else if (typeof document.webkitFullscreenElement !== 'undefined') {\n return 'webkitFullscreenElement';\n }\n\n return '';\n}\n","const units = ['bytes', 'kB', 'MB', 'GB', 'TB', 'PB'];\n\nconst formatFileSize = (bytes: number) => {\n const number = bytes === 0 ? 0 : Math.floor(Math.log(bytes) / Math.log(1024));\n\n return `${(bytes / 1024 ** Math.floor(number)).toFixed(1)} ${units[number]}`;\n};\n\nexport default formatFileSize;\n","import React, {\n FC, useEffect, useRef, useCallback, useMemo,\n} from '../../lib/teact/teact';\nimport buildClassName from '../../util/buildClassName';\n\nimport useFlag from '../../hooks/useFlag';\nimport { IS_IOS, IS_SINGLE_COLUMN_LAYOUT } from '../../util/environment';\nimport { formatMediaDuration } from '../../util/dateFormat';\nimport formatFileSize from './helpers/formatFileSize';\nimport useLang from '../../hooks/useLang';\nimport { BufferedRange } from '../../hooks/useBuffering';\nimport { captureEvents } from '../../util/captureEvents';\n\nimport Button from '../ui/Button';\nimport RangeSlider from '../ui/RangeSlider';\nimport Menu from '../ui/Menu';\nimport MenuItem from '../ui/MenuItem';\n\nimport './VideoPlayerControls.scss';\n\ntype OwnProps = {\n bufferedRanges: BufferedRange[];\n bufferedProgress: number;\n currentTime: number;\n duration: number;\n fileSize: number;\n isForceMobileVersion?: boolean;\n isPlayed: boolean;\n isFullscreenSupported: boolean;\n isFullscreen: boolean;\n isVisible: boolean;\n isBuffered: boolean;\n volume: number;\n isMuted: boolean;\n playbackRate: number;\n onChangeFullscreen: (e: React.MouseEvent) => void;\n onVolumeClick: () => void;\n onVolumeChange: (volume: number) => void;\n onPlaybackRateChange: (playbackRate: number) => void;\n onPlayPause: (e: React.MouseEvent) => void;\n setVisibility: (isVisible: boolean) => void;\n onSeek: (position: number) => void;\n};\n\nconst stopEvent = (e: React.MouseEvent) => {\n e.stopPropagation();\n};\n\nconst PLAYBACK_RATES = [\n 0.5,\n 1,\n 1.5,\n 2,\n];\n\nconst HIDE_CONTROLS_TIMEOUT_MS = 1500;\n\nconst VideoPlayerControls: FC = ({\n bufferedRanges,\n bufferedProgress,\n currentTime,\n duration,\n fileSize,\n isForceMobileVersion,\n isPlayed,\n isFullscreenSupported,\n isFullscreen,\n isVisible,\n isBuffered,\n volume,\n isMuted,\n playbackRate,\n onChangeFullscreen,\n onVolumeClick,\n onVolumeChange,\n onPlaybackRateChange,\n onPlayPause,\n setVisibility,\n onSeek,\n}) => {\n const [isPlaybackMenuOpen, openPlaybackMenu, closePlaybackMenu] = useFlag();\n // eslint-disable-next-line no-null/no-null\n const seekerRef = useRef(null);\n const isSeekingRef = useRef(false);\n const isSeeking = isSeekingRef.current;\n\n useEffect(() => {\n let timeout: number | undefined;\n if (!isVisible || !isPlayed || isSeeking || isPlaybackMenuOpen) {\n if (timeout) window.clearTimeout(timeout);\n return undefined;\n }\n timeout = window.setTimeout(() => {\n setVisibility(false);\n }, HIDE_CONTROLS_TIMEOUT_MS);\n return () => {\n if (timeout) window.clearTimeout(timeout);\n };\n }, [isPlayed, isVisible, isSeeking, setVisibility, isPlaybackMenuOpen]);\n\n useEffect(() => {\n if (isVisible) {\n document.body.classList.add('video-controls-visible');\n } else {\n document.body.classList.remove('video-controls-visible');\n }\n return () => {\n document.body.classList.remove('video-controls-visible');\n };\n }, [isVisible]);\n\n useEffect(() => {\n if (!isVisible) {\n closePlaybackMenu();\n }\n }, [closePlaybackMenu, isVisible]);\n\n const lang = useLang();\n\n const handleSeek = useCallback((e: MouseEvent | TouchEvent) => {\n if (isSeekingRef.current && seekerRef.current) {\n const {\n width,\n left,\n } = seekerRef.current.getBoundingClientRect();\n const clientX = e instanceof MouseEvent ? e.clientX : e.targetTouches[0].clientX;\n onSeek(Math.max(Math.min(duration * ((clientX - left) / width), duration), 0));\n }\n }, [duration, onSeek]);\n\n const handleStartSeek = useCallback((e: MouseEvent | TouchEvent) => {\n isSeekingRef.current = true;\n handleSeek(e);\n }, [handleSeek]);\n\n const handleStopSeek = useCallback(() => {\n isSeekingRef.current = false;\n }, []);\n\n useEffect(() => {\n if (!seekerRef.current || !isVisible) return undefined;\n return captureEvents(seekerRef.current, {\n onCapture: handleStartSeek,\n onRelease: handleStopSeek,\n onClick: handleStopSeek,\n onDrag: handleSeek,\n });\n }, [isVisible, handleStartSeek, handleSeek, handleStopSeek]);\n\n const volumeIcon = useMemo(() => {\n if (volume === 0 || isMuted) return 'icon-muted';\n if (volume < 0.3) return 'icon-volume-1';\n if (volume < 0.6) return 'icon-volume-2';\n return 'icon-volume-3';\n }, [volume, isMuted]);\n\n return (\n \n {renderSeekLine(currentTime, duration, bufferedRanges, seekerRef)}\n
\n \n \n \n \n \n \n {!IS_IOS && (\n \n )}\n {renderTime(currentTime, duration)}\n {!isBuffered && renderFileSize(bufferedProgress, fileSize)}\n
\n \n {`${playbackRate}x`}\n \n {isFullscreenSupported && (\n \n \n \n )}\n
\n \n {PLAYBACK_RATES.map((rate) => (\n // eslint-disable-next-line react/jsx-no-bind\n onPlaybackRateChange(rate)}>\n {`${rate}x`}\n \n ))}\n \n
\n );\n};\n\nfunction renderTime(currentTime: number, duration: number) {\n return (\n
\n {`${formatMediaDuration(currentTime)} / ${formatMediaDuration(duration)}`}\n
\n );\n}\n\nfunction renderFileSize(loadedPercent: number, totalSize: number) {\n return (\n
\n {`${formatFileSize(totalSize * loadedPercent)} / ${formatFileSize(totalSize)}`}\n
\n );\n}\n\nfunction renderSeekLine(\n currentTime: number, duration: number, bufferedRanges: BufferedRange[], seekerRef: React.RefObject,\n) {\n const percentagePlayed = (currentTime / duration) * 100;\n\n return (\n
\n
\n {bufferedRanges.map(({ start, end }) => (\n \n ))}\n \n
\n
\n );\n}\n\nexport default VideoPlayerControls;\n","import React, {\n FC, memo, useCallback, useEffect, useRef, useState,\n} from '../../lib/teact/teact';\nimport { getActions } from '../../global';\n\nimport { ApiDimensions } from '../../api/types';\n\nimport useBuffering from '../../hooks/useBuffering';\nimport useFullscreenStatus from '../../hooks/useFullscreen';\nimport useShowTransition from '../../hooks/useShowTransition';\nimport useVideoCleanup from '../../hooks/useVideoCleanup';\nimport { IS_IOS, IS_SINGLE_COLUMN_LAYOUT, IS_TOUCH_ENV } from '../../util/environment';\nimport safePlay from '../../util/safePlay';\n\nimport Button from '../ui/Button';\nimport ProgressSpinner from '../ui/ProgressSpinner';\n\nimport './VideoPlayer.scss';\n\nimport VideoPlayerControls from './VideoPlayerControls';\n\ntype OwnProps = {\n url?: string;\n isGif?: boolean;\n posterData?: string;\n posterSize?: ApiDimensions;\n loadProgress?: number;\n fileSize: number;\n isMediaViewerOpen?: boolean;\n noPlay?: boolean;\n areControlsVisible: boolean;\n volume: number;\n isMuted: boolean;\n playbackRate: number;\n toggleControls: (isVisible: boolean) => void;\n onClose: (e: React.MouseEvent) => void;\n};\n\nconst MOBILE_VERSION_CONTROL_WIDTH = 400;\n\nconst VideoPlayer: FC = ({\n url,\n isGif,\n posterData,\n posterSize,\n loadProgress,\n fileSize,\n isMediaViewerOpen,\n noPlay,\n volume,\n isMuted,\n playbackRate,\n onClose,\n toggleControls,\n areControlsVisible,\n}) => {\n const {\n setMediaViewerVolume,\n setMediaViewerMuted,\n setMediaViewerPlaybackRate,\n } = getActions();\n // eslint-disable-next-line no-null/no-null\n const videoRef = useRef(null);\n const [isPlayed, setIsPlayed] = useState(!IS_TOUCH_ENV || !IS_IOS);\n const [currentTime, setCurrentTime] = useState(0);\n\n const [isFullscreen, setFullscreen, exitFullscreen] = useFullscreenStatus(videoRef, setIsPlayed);\n\n const {\n isBuffered, bufferedRanges, bufferingHandlers, bufferedProgress,\n } = useBuffering();\n const {\n shouldRender: shouldRenderSpinner,\n transitionClassNames: spinnerClassNames,\n } = useShowTransition(!isBuffered, undefined, undefined, 'slow');\n const {\n shouldRender: shouldRenderPlayButton,\n transitionClassNames: playButtonClassNames,\n } = useShowTransition(IS_IOS && !isPlayed && !shouldRenderSpinner, undefined, undefined, 'slow');\n\n useEffect(() => {\n if (noPlay || !isMediaViewerOpen) {\n videoRef.current!.pause();\n } else if (url && !IS_TOUCH_ENV) {\n // Chrome does not automatically start playing when `url` becomes available (even with `autoPlay`),\n // so we force it here. Contrary, iOS does not allow to call `play` without mouse event,\n // so we need to use `autoPlay` instead to allow pre-buffering.\n safePlay(videoRef.current!);\n }\n }, [noPlay, isMediaViewerOpen, url]);\n\n useEffect(() => {\n if (videoRef.current!.currentTime === videoRef.current!.duration) {\n setCurrentTime(0);\n setIsPlayed(false);\n } else {\n setCurrentTime(videoRef.current!.currentTime);\n }\n }, [currentTime]);\n\n useEffect(() => {\n videoRef.current!.volume = volume;\n }, [volume]);\n\n useEffect(() => {\n videoRef.current!.playbackRate = playbackRate;\n }, [playbackRate]);\n\n const togglePlayState = useCallback((e: React.MouseEvent | KeyboardEvent) => {\n e.stopPropagation();\n if (isPlayed) {\n videoRef.current!.pause();\n setIsPlayed(false);\n } else {\n safePlay(videoRef.current!);\n setIsPlayed(true);\n }\n }, [isPlayed]);\n\n useVideoCleanup(videoRef, []);\n\n const handleMouseMove = useCallback(() => {\n toggleControls(true);\n }, [toggleControls]);\n\n const handleMouseOut = useCallback((e: React.MouseEvent) => {\n if (e.target === videoRef.current) {\n toggleControls(false);\n }\n }, [toggleControls]);\n\n const handleTimeUpdate = useCallback((e: React.SyntheticEvent) => {\n setCurrentTime(e.currentTarget.currentTime);\n }, []);\n\n const handleEnded = useCallback(() => {\n setCurrentTime(0);\n setIsPlayed(false);\n toggleControls(true);\n }, [toggleControls]);\n\n const handleFullscreenChange = useCallback(() => {\n if (isFullscreen && exitFullscreen) {\n exitFullscreen();\n } else if (!isFullscreen && setFullscreen) {\n setFullscreen();\n }\n }, [exitFullscreen, isFullscreen, setFullscreen]);\n\n const handleSeek = useCallback((position: number) => {\n videoRef.current!.currentTime = position;\n }, []);\n\n const handleVolumeChange = useCallback((newVolume: number) => {\n setMediaViewerVolume({ volume: newVolume / 100 });\n }, [setMediaViewerVolume]);\n\n const handleVolumeMuted = useCallback(() => {\n setMediaViewerMuted({ isMuted: !isMuted });\n }, [isMuted, setMediaViewerMuted]);\n\n const handlePlaybackRateChange = useCallback((newPlaybackRate: number) => {\n setMediaViewerPlaybackRate({ playbackRate: newPlaybackRate });\n }, [setMediaViewerPlaybackRate]);\n\n useEffect(() => {\n if (!isMediaViewerOpen) return undefined;\n const togglePayingStateBySpace = (e: KeyboardEvent) => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n togglePlayState(e);\n }\n };\n\n document.addEventListener('keydown', togglePayingStateBySpace, false);\n\n return () => {\n document.removeEventListener('keydown', togglePayingStateBySpace, false);\n };\n }, [togglePlayState, isMediaViewerOpen]);\n\n const wrapperStyle = posterSize && `width: ${posterSize.width}px; height: ${posterSize.height}px`;\n const videoStyle = `background-image: url(${posterData})`;\n\n return (\n \n \n {/* eslint-disable-next-line jsx-a11y/media-has-caption */}\n setIsPlayed(true) : undefined}\n onEnded={handleEnded}\n onClick={!IS_SINGLE_COLUMN_LAYOUT ? togglePlayState : undefined}\n onDoubleClick={!IS_TOUCH_ENV ? handleFullscreenChange : undefined}\n // eslint-disable-next-line react/jsx-props-no-spreading\n {...bufferingHandlers}\n onTimeUpdate={handleTimeUpdate}\n >\n {url && }\n \n
\n {shouldRenderPlayButton && (\n \n )}\n {shouldRenderSpinner && (\n
\n {!isBuffered &&
Buffering...
}\n \n
\n )}\n {!isGif && !shouldRenderSpinner && (\n \n )}\n
\n );\n};\n\nexport default memo(VideoPlayer);\n","import React, { FC, memo, useCallback } from '../../lib/teact/teact';\nimport { withGlobal } from '../../global';\n\nimport {\n ApiChat, ApiDimensions, ApiMediaFormat, ApiMessage, ApiUser,\n} from '../../api/types';\nimport { MediaViewerOrigin } from '../../types';\n\nimport { IS_SINGLE_COLUMN_LAYOUT, IS_TOUCH_ENV } from '../../util/environment';\nimport useBlurSync from '../../hooks/useBlurSync';\nimport useMedia from '../../hooks/useMedia';\nimport useMediaWithLoadProgress from '../../hooks/useMediaWithLoadProgress';\nimport {\n getChatAvatarHash,\n getMessageDocument,\n getMessageFileSize,\n getMessageMediaFormat,\n getMessageMediaHash,\n getMessageMediaThumbDataUri,\n getMessagePhoto,\n getMessageVideo,\n getMessageWebPagePhoto,\n getMessageWebPageVideo,\n getPhotoFullDimensions,\n getVideoDimensions,\n isMessageDocumentPhoto,\n isMessageDocumentVideo,\n} from '../../global/helpers';\nimport {\n selectChat, selectChatMessage, selectIsMessageProtected, selectScheduledMessage, selectUser,\n} from '../../global/selectors';\nimport { AVATAR_FULL_DIMENSIONS, calculateMediaViewerDimensions } from '../common/helpers/mediaDimensions';\nimport { renderMessageText } from '../common/helpers/renderMessageText';\nimport stopEvent from '../../util/stopEvent';\n\nimport Spinner from '../ui/Spinner';\nimport MediaViewerFooter from './MediaViewerFooter';\nimport VideoPlayer from './VideoPlayer';\n\nimport './MediaViewerContent.scss';\n\ntype OwnProps = {\n messageId?: number;\n chatId?: string;\n threadId?: number;\n avatarOwnerId?: string;\n profilePhotoIndex?: number;\n origin?: MediaViewerOrigin;\n isActive?: boolean;\n animationLevel: 0 | 1 | 2;\n onClose: () => void;\n onFooterClick: () => void;\n setIsFooterHidden?: (isHidden: boolean) => void;\n isFooterHidden?: boolean;\n};\n\ntype StateProps = {\n chatId?: string;\n messageId?: number;\n senderId?: string;\n threadId?: number;\n avatarOwner?: ApiChat | ApiUser;\n profilePhotoIndex?: number;\n message?: ApiMessage;\n origin?: MediaViewerOrigin;\n isProtected?: boolean;\n volume: number;\n isMuted: boolean;\n playbackRate: number;\n};\n\nconst ANIMATION_DURATION = 350;\n\nconst MediaViewerContent: FC = (props) => {\n const {\n messageId,\n isActive,\n avatarOwner,\n chatId,\n message,\n profilePhotoIndex,\n origin,\n animationLevel,\n isFooterHidden,\n isProtected,\n volume,\n playbackRate,\n isMuted,\n onClose,\n onFooterClick,\n setIsFooterHidden,\n } = props;\n /* Content */\n const photo = message ? getMessagePhoto(message) : undefined;\n const video = message ? getMessageVideo(message) : undefined;\n const webPagePhoto = message ? getMessageWebPagePhoto(message) : undefined;\n const webPageVideo = message ? getMessageWebPageVideo(message) : undefined;\n const isDocumentPhoto = message ? isMessageDocumentPhoto(message) : false;\n const isDocumentVideo = message ? isMessageDocumentVideo(message) : false;\n const isVideo = Boolean(video || webPageVideo || isDocumentVideo);\n const isPhoto = Boolean(!isVideo && (photo || webPagePhoto || isDocumentPhoto));\n const { isGif } = video || webPageVideo || {};\n\n const isOpen = Boolean(avatarOwner || messageId);\n const isAvatar = Boolean(avatarOwner);\n\n const isFromSharedMedia = origin === MediaViewerOrigin.SharedMedia;\n const isFromSearch = origin === MediaViewerOrigin.SearchResult;\n\n const isGhostAnimation = animationLevel === 2;\n\n /* Media data */\n function getMediaHash(isFull?: boolean) {\n if (isAvatar && profilePhotoIndex !== undefined) {\n const { photos } = avatarOwner!;\n return photos && photos[profilePhotoIndex]\n ? `photo${photos[profilePhotoIndex].id}?size=c`\n : getChatAvatarHash(avatarOwner!, isFull ? 'big' : 'normal');\n }\n\n return message && getMessageMediaHash(message, isFull ? 'viewerFull' : 'viewerPreview');\n }\n\n const pictogramBlobUrl = useMedia(\n message && (isFromSharedMedia || isFromSearch) && getMessageMediaHash(message, 'pictogram'),\n undefined,\n ApiMediaFormat.BlobUrl,\n undefined,\n isGhostAnimation && ANIMATION_DURATION,\n );\n const previewMediaHash = getMediaHash();\n const previewBlobUrl = useMedia(\n previewMediaHash,\n undefined,\n ApiMediaFormat.BlobUrl,\n undefined,\n isGhostAnimation && ANIMATION_DURATION,\n );\n const {\n mediaData: fullMediaBlobUrl,\n loadProgress,\n } = useMediaWithLoadProgress(\n getMediaHash(true),\n undefined,\n message && getMessageMediaFormat(message, 'viewerFull'),\n undefined,\n isGhostAnimation && ANIMATION_DURATION,\n );\n\n const toggleControls = useCallback((isVisible) => {\n setIsFooterHidden?.(!isVisible);\n }, [setIsFooterHidden]);\n\n const localBlobUrl = (photo || video) ? (photo || video)!.blobUrl : undefined;\n let bestImageData = (!isVideo && (localBlobUrl || fullMediaBlobUrl)) || previewBlobUrl || pictogramBlobUrl;\n const thumbDataUri = useBlurSync(!bestImageData && message && getMessageMediaThumbDataUri(message));\n if (!bestImageData && origin !== MediaViewerOrigin.SearchResult) {\n bestImageData = thumbDataUri;\n }\n\n const videoSize = message ? getMessageFileSize(message) : undefined;\n\n let dimensions!: ApiDimensions;\n if (message) {\n if (isDocumentPhoto || isDocumentVideo) {\n dimensions = getMessageDocument(message)!.mediaSize!;\n } else if (photo || webPagePhoto) {\n dimensions = getPhotoFullDimensions((photo || webPagePhoto)!)!;\n } else if (video || webPageVideo) {\n dimensions = getVideoDimensions((video || webPageVideo)!)!;\n }\n } else {\n dimensions = AVATAR_FULL_DIMENSIONS;\n }\n\n if (isAvatar) {\n return (\n
\n {renderPhoto(\n fullMediaBlobUrl || previewBlobUrl,\n calculateMediaViewerDimensions(AVATAR_FULL_DIMENSIONS, false),\n !IS_SINGLE_COLUMN_LAYOUT && !isProtected,\n )}\n
\n );\n }\n\n if (!message) return undefined;\n const textParts = renderMessageText(message);\n const hasFooter = Boolean(textParts);\n\n return (\n \n {isProtected &&
}\n {isPhoto && renderPhoto(\n localBlobUrl || fullMediaBlobUrl || previewBlobUrl || pictogramBlobUrl,\n message && calculateMediaViewerDimensions(dimensions!, hasFooter),\n !IS_SINGLE_COLUMN_LAYOUT && !isProtected,\n )}\n {isVideo && ((!isActive && IS_TOUCH_ENV) ? renderVideoPreview(\n bestImageData,\n message && calculateMediaViewerDimensions(dimensions!, hasFooter, true),\n !IS_SINGLE_COLUMN_LAYOUT && !isProtected,\n ) : (\n \n ))}\n {textParts && (\n \n )}\n
\n );\n};\n\nexport default memo(withGlobal(\n (global, ownProps): StateProps => {\n const {\n chatId,\n threadId,\n messageId,\n avatarOwnerId,\n profilePhotoIndex,\n origin,\n } = ownProps;\n\n const {\n volume,\n isMuted,\n playbackRate,\n } = global.mediaViewer;\n\n if (origin === MediaViewerOrigin.SearchResult) {\n if (!(chatId && messageId)) {\n return { volume, isMuted, playbackRate };\n }\n\n const message = selectChatMessage(global, chatId, messageId);\n if (!message) {\n return { volume, isMuted, playbackRate };\n }\n\n return {\n chatId,\n messageId,\n senderId: message.senderId,\n origin,\n message,\n isProtected: selectIsMessageProtected(global, message),\n volume,\n isMuted,\n playbackRate,\n };\n }\n\n if (avatarOwnerId) {\n const sender = selectUser(global, avatarOwnerId) || selectChat(global, avatarOwnerId);\n\n return {\n messageId: -1,\n senderId: avatarOwnerId,\n avatarOwner: sender,\n profilePhotoIndex: profilePhotoIndex || 0,\n origin,\n volume,\n isMuted,\n playbackRate,\n };\n }\n\n if (!(chatId && threadId && messageId)) {\n return { volume, isMuted, playbackRate };\n }\n\n let message: ApiMessage | undefined;\n if (origin && [MediaViewerOrigin.ScheduledAlbum, MediaViewerOrigin.ScheduledInline].includes(origin)) {\n message = selectScheduledMessage(global, chatId, messageId);\n } else {\n message = selectChatMessage(global, chatId, messageId);\n }\n\n if (!message) {\n return { volume, isMuted, playbackRate };\n }\n\n return {\n chatId,\n threadId,\n messageId,\n senderId: message.senderId,\n origin,\n message,\n isProtected: selectIsMessageProtected(global, message),\n volume,\n isMuted,\n playbackRate,\n };\n },\n)(MediaViewerContent));\n\nfunction renderPhoto(blobUrl?: string, imageSize?: ApiDimensions, canDrag?: boolean) {\n return blobUrl\n ? (\n \n )\n : (\n \n \n \n );\n}\n\nfunction renderVideoPreview(blobUrl?: string, imageSize?: ApiDimensions, canDrag?: boolean) {\n const wrapperStyle = imageSize && `width: ${imageSize.width}px; height: ${imageSize.height}px`;\n const videoStyle = `background-image: url(${blobUrl})`;\n return blobUrl\n ? (\n \n \n {/* eslint-disable-next-line jsx-a11y/media-has-caption */}\n \n \n \n )\n : (\n \n \n \n );\n}\n","import React, {\n FC, memo, useCallback, useEffect, useRef, useState,\n} from '../../lib/teact/teact';\n\nimport { MediaViewerOrigin } from '../../types';\n\nimport useDebounce from '../../hooks/useDebounce';\nimport useForceUpdate from '../../hooks/useForceUpdate';\nimport { animateNumber, timingFunctions } from '../../util/animation';\nimport arePropsShallowEqual from '../../util/arePropsShallowEqual';\nimport { captureEvents, IOS_SCREEN_EDGE_THRESHOLD, RealTouchEvent } from '../../util/captureEvents';\nimport { IS_IOS, IS_TOUCH_ENV } from '../../util/environment';\nimport { debounce } from '../../util/schedulers';\n\nimport MediaViewerContent from './MediaViewerContent';\n\nimport './MediaViewerSlides.scss';\nimport useTimeout from '../../hooks/useTimeout';\n\ntype OwnProps = {\n messageId?: number;\n getMessageId: (fromId?: number, direction?: number) => number | undefined;\n isVideo?: boolean;\n isGif?: boolean;\n isPhoto?: boolean;\n isOpen?: boolean;\n selectMessage: (id?: number) => void;\n chatId?: string;\n threadId?: number;\n isActive?: boolean;\n avatarOwnerId?: string;\n profilePhotoIndex?: number;\n origin?: MediaViewerOrigin;\n isZoomed?: boolean;\n animationLevel: 0 | 1 | 2;\n onClose: () => void;\n hasFooter?: boolean;\n onFooterClick: () => void;\n};\n\nconst SWIPE_X_THRESHOLD = 50;\nconst SWIPE_Y_THRESHOLD = 50;\nconst SLIDES_GAP = 40;\nconst ANIMATION_DURATION = 350;\nconst DEBOUNCE_MESSAGE = 350;\nconst DEBOUNCE_SWIPE = 500;\nconst DEBOUNCE_ACTIVE = 800;\nconst MAX_ZOOM = 4;\nconst MIN_ZOOM = 0.6;\nconst DOUBLE_TAP_ZOOM = 3;\nconst CLICK_X_THRESHOLD = 40;\nconst CLICK_Y_THRESHOLD = 80;\nlet cancelAnimation: Function | undefined;\n\ntype Transform = {\n x: number;\n y: number;\n scale: number;\n};\n\nenum SwipeDirection {\n Horizontal,\n Vertical,\n}\n\nconst MediaViewerSlides: FC = ({\n messageId,\n getMessageId,\n selectMessage,\n isVideo,\n isGif,\n isPhoto,\n isOpen,\n isActive,\n hasFooter,\n ...rest\n}) => {\n // eslint-disable-next-line no-null/no-null\n const containerRef = useRef(null);\n // eslint-disable-next-line no-null/no-null\n const activeSlideRef = useRef(null);\n const transformRef = useRef({ x: 0, y: 0, scale: 1 });\n const swipeDirectionRef = useRef(undefined);\n const isActiveRef = useRef(true);\n const [activeMessageId, setActiveMessageId] = useState(messageId);\n const forceUpdate = useForceUpdate();\n const [isFooterHidden, setIsFooterHidden] = useState(true);\n\n const {\n isZoomed,\n onClose,\n } = rest;\n\n const setTransform = useCallback((value: Transform) => {\n transformRef.current = value;\n forceUpdate();\n }, [forceUpdate]);\n\n const setIsActive = useCallback((value: boolean) => {\n isActiveRef.current = value;\n forceUpdate();\n }, [forceUpdate]);\n\n const debounceSetMessage = useDebounce(DEBOUNCE_MESSAGE, true);\n const debounceSwipeDirection = useDebounce(DEBOUNCE_SWIPE, true);\n const debounceActive = useDebounce(DEBOUNCE_ACTIVE, true);\n\n const handleToggleFooterVisibility = useCallback((e: React.MouseEvent) => {\n if (!IS_TOUCH_ENV) return;\n const isFooter = window.innerHeight - e.pageY < CLICK_Y_THRESHOLD;\n if (!isFooter && e.pageX < CLICK_X_THRESHOLD) return;\n if (!isFooter && e.pageX > window.innerWidth - CLICK_X_THRESHOLD) return;\n setIsFooterHidden(!isFooterHidden);\n }, [isFooterHidden]);\n\n useTimeout(() => setIsFooterHidden(false), ANIMATION_DURATION - 150);\n\n useEffect(() => {\n if (!IS_TOUCH_ENV || !containerRef.current || isZoomed || !activeMessageId) {\n return undefined;\n }\n let lastTransform = { x: 0, y: 0, scale: 1 };\n const lastDragOffset = {\n x: 0,\n y: 0,\n };\n const lastZoomCenter = {\n x: 0,\n y: 0,\n };\n const panDelta = {\n x: 0,\n y: 0,\n };\n let lastGestureTime = Date.now();\n let initialContentRect: DOMRect;\n let content: HTMLElement | null;\n const setLastGestureTime = debounce(() => {\n lastGestureTime = Date.now();\n }, 500, false, true);\n\n const changeSlide = (e: MouseEvent) => {\n if (transformRef.current.scale !== 1) return false;\n let direction = 0;\n if (window.innerHeight - e.pageY < CLICK_Y_THRESHOLD) {\n return false;\n }\n if (e.pageX < CLICK_X_THRESHOLD) {\n direction = -1;\n } else if (e.pageX > window.innerWidth - CLICK_X_THRESHOLD) {\n direction = 1;\n }\n const mId = getMessageId(activeMessageId, direction);\n if (mId) {\n const offset = (window.innerWidth + SLIDES_GAP) * direction;\n transformRef.current.x += offset;\n isActiveRef.current = false;\n setActiveMessageId(mId);\n debounceSetMessage(() => selectMessage(mId));\n debounceActive(() => {\n setIsActive(true);\n });\n lastTransform = { x: 0, y: 0, scale: 1 };\n cancelAnimation = animateNumber({\n from: transformRef.current.x,\n to: 0,\n duration: ANIMATION_DURATION,\n timing: timingFunctions.easeOutCubic,\n onUpdate: (value) => setTransform({\n y: 0,\n x: value,\n scale: 1,\n }),\n });\n }\n return direction !== 0;\n };\n\n return captureEvents(containerRef.current, {\n isNotPassive: true,\n excludedClosestSelector: '.MediaViewerFooter',\n onCapture: (e) => {\n if (checkIfControlTarget(e)) return;\n lastGestureTime = Date.now();\n if (arePropsShallowEqual(transformRef.current, { x: 0, y: 0, scale: 1 })) {\n if (!activeSlideRef.current) return;\n content = activeSlideRef.current.querySelector('img, video');\n if (!content) return;\n // Store initial content rect, without transformations\n initialContentRect = content.getBoundingClientRect();\n }\n },\n onDrag: (event, captureEvent, {\n dragOffsetX,\n dragOffsetY,\n }) => {\n if (checkIfControlTarget(event)) return;\n // Avoid conflicts with swipe-to-back gestures\n if (IS_IOS) {\n const { pageX } = (captureEvent as RealTouchEvent).touches[0];\n if (pageX <= IOS_SCREEN_EDGE_THRESHOLD || pageX >= window.innerWidth - IOS_SCREEN_EDGE_THRESHOLD) {\n return;\n }\n }\n if (cancelAnimation) {\n cancelAnimation();\n cancelAnimation = undefined;\n }\n panDelta.x = lastDragOffset.x - dragOffsetX;\n panDelta.y = lastDragOffset.y - dragOffsetY;\n lastDragOffset.x = dragOffsetX;\n lastDragOffset.y = dragOffsetY;\n const absOffsetX = Math.abs(dragOffsetX);\n const absOffsetY = Math.abs(dragOffsetY);\n const {\n scale,\n x,\n y,\n } = transformRef.current;\n const h = 10;\n\n // If user is inactive but is still touching the screen\n // we reset last gesture time\n setLastGestureTime();\n\n // If image is scaled we just need to pan it\n if (scale !== 1) {\n if ('touches' in event && event.touches.length === 1) {\n setTransform({\n x: lastTransform.x + dragOffsetX,\n y: lastTransform.y + dragOffsetY,\n scale,\n });\n }\n return;\n }\n if (swipeDirectionRef.current !== SwipeDirection.Vertical) {\n // If user is swiping horizontally or horizontal shift is dominant\n // we change only horizontal position\n if (swipeDirectionRef.current === SwipeDirection.Horizontal\n || Math.abs(x) > h || (absOffsetX > h && absOffsetY < h)) {\n swipeDirectionRef.current = SwipeDirection.Horizontal;\n isActiveRef.current = false;\n setTransform({\n x: dragOffsetX,\n y: 0,\n scale,\n });\n return;\n }\n }\n // If vertical shift is dominant we change only vertical position\n if (swipeDirectionRef.current === SwipeDirection.Vertical\n || Math.abs(y) > h || (absOffsetY > h && absOffsetX < h)) {\n swipeDirectionRef.current = SwipeDirection.Vertical;\n setTransform({\n x: 0,\n y: dragOffsetY,\n scale,\n });\n }\n },\n onZoom: (e, {\n zoomFactor,\n initialCenterX,\n initialCenterY,\n dragOffsetX,\n dragOffsetY,\n currentCenterX,\n currentCenterY,\n }) => {\n // Calculate current scale based on zoom factor and limits, add max zoom margin for bounce back effect\n const scale = Math.min(MAX_ZOOM * 3, Math.max(lastTransform.scale * zoomFactor, MIN_ZOOM));\n const scaleFactor = scale / lastTransform.scale;\n const offsetX = Math.abs(Math.min(lastTransform.x, 0));\n const offsetY = Math.abs(Math.min(lastTransform.y, 0));\n\n // Calculate new center relative to the shifted image\n const scaledCenterX = offsetX + initialCenterX;\n const scaledCenterY = offsetY + initialCenterY;\n\n // Save last zoom center for bounce back effect\n lastZoomCenter.x = currentCenterX;\n lastZoomCenter.y = currentCenterY;\n\n // Calculate how much we need to shift the image to keep the zoom center at the same position\n const scaleOffsetX = (scaledCenterX - scaleFactor * scaledCenterX);\n const scaleOffsetY = (scaledCenterY - scaleFactor * scaledCenterY);\n\n setTransform({\n x: lastTransform.x + scaleOffsetX + dragOffsetX,\n y: lastTransform.y + scaleOffsetY + dragOffsetY,\n scale,\n });\n },\n onClick(e) {\n if (changeSlide(e as MouseEvent)) {\n e.preventDefault();\n e.stopPropagation();\n }\n },\n onDoubleClick(e, {\n centerX,\n centerY,\n }) {\n if (changeSlide(e as MouseEvent)) {\n e.preventDefault();\n e.stopPropagation();\n return undefined;\n }\n // Calculate how much we need to shift the image to keep the zoom center at the same position\n const scaleOffsetX = (centerX - DOUBLE_TAP_ZOOM * centerX);\n const scaleOffsetY = (centerY - DOUBLE_TAP_ZOOM * centerY);\n const {\n scale,\n x,\n y,\n } = transformRef.current;\n if (scale === 1) {\n if (x !== 0 || y !== 0) return undefined;\n lastTransform = {\n x: scaleOffsetX,\n y: scaleOffsetY,\n scale: DOUBLE_TAP_ZOOM,\n };\n } else {\n lastTransform = {\n x: 0,\n y: 0,\n scale: 1,\n };\n }\n return animateNumber({\n from: [x, y, scale],\n to: [lastTransform.x, lastTransform.y, lastTransform.scale],\n duration: ANIMATION_DURATION,\n timing: timingFunctions.easeOutCubic,\n onUpdate: (value) => setTransform({\n x: value[0],\n y: value[1],\n scale: value[2],\n }),\n });\n },\n onRelease: () => {\n const absX = Math.abs(transformRef.current.x);\n const absY = Math.abs(transformRef.current.y);\n const {\n scale,\n x,\n y,\n } = transformRef.current;\n\n debounceSwipeDirection(() => {\n swipeDirectionRef.current = undefined;\n });\n debounceActive(() => {\n setIsActive(true);\n });\n\n // If scale is less than 1 we need to bounce back\n if (scale < 1) {\n lastTransform = { x: 0, y: 0, scale: 1 };\n return animateNumber({\n from: [x, y, scale],\n to: [0, 0, 1],\n duration: ANIMATION_DURATION,\n timing: timingFunctions.easeOutCubic,\n onUpdate: (value) => setTransform({\n x: value[0],\n y: value[1],\n scale: value[2],\n }),\n });\n }\n if (scale > 1) {\n if (!content || !initialContentRect) {\n lastTransform = {\n x,\n y,\n scale,\n };\n return undefined;\n }\n // Get current content boundaries\n const boundaries = content.getBoundingClientRect();\n const s1 = Math.min(scale, MAX_ZOOM);\n const scaleFactor = s1 / scale;\n\n // Calculate new position based on the last zoom center to keep the zoom center\n // at the same position when bouncing back from max zoom\n let x1 = x * scaleFactor + (lastZoomCenter.x - scaleFactor * lastZoomCenter.x);\n let y1 = y * scaleFactor + (lastZoomCenter.y - scaleFactor * lastZoomCenter.y);\n\n // Arbitrary pan velocity coefficient\n const k = 0.15;\n\n // If scale didn't change, we need to add inertia to pan gesture\n if (lastTransform.scale === scale) {\n // Calculate user gesture velocity\n const Vx = Math.abs(lastDragOffset.x) / (Date.now() - lastGestureTime);\n const Vy = Math.abs(lastDragOffset.y) / (Date.now() - lastGestureTime);\n\n // Add extra distance based on gesture velocity and last pan delta\n x1 -= Math.abs(lastDragOffset.x) * Vx * k * panDelta.x;\n y1 -= Math.abs(lastDragOffset.y) * Vy * k * panDelta.y;\n }\n\n // If content is outside window we calculate offset boundaries\n // based on initial content rect and current scale\n if (boundaries.width > window.innerWidth) {\n const minOffsetX = -initialContentRect.left * s1;\n const maxOffsetX = window.innerWidth - initialContentRect.right * s1;\n x1 = Math.min(minOffsetX, Math.max(maxOffsetX, x1));\n } else {\n // Else we center the content on the screen\n x1 = (window.innerWidth - window.innerWidth * s1) / 2;\n }\n\n if (boundaries.height > window.innerHeight) {\n const minOffsetY = -initialContentRect.top * s1;\n const maxOffsetY = window.innerHeight - initialContentRect.bottom * s1;\n y1 = Math.min(minOffsetY, Math.max(maxOffsetY, y1));\n } else {\n y1 = (window.innerHeight - window.innerHeight * s1) / 2;\n }\n lastTransform = {\n x: x1,\n y: y1,\n scale: s1,\n };\n cancelAnimation = animateNumber({\n from: [x, y, scale],\n to: [x1, y1, s1],\n duration: ANIMATION_DURATION,\n timing: timingFunctions.easeOutCubic,\n onUpdate: (value) => setTransform({\n x: value[0],\n y: value[1],\n scale: value[2],\n }),\n });\n return undefined;\n }\n lastTransform = {\n x,\n y,\n scale,\n };\n if (absY >= SWIPE_Y_THRESHOLD) return onClose();\n // Bounce back if vertical swipe is below threshold\n if (absY > 0) {\n return animateNumber({\n from: y,\n to: 0,\n duration: ANIMATION_DURATION,\n timing: timingFunctions.easeOutCubic,\n onUpdate: (value) => setTransform({\n x: 0,\n y: value,\n scale,\n }),\n });\n }\n // Get horizontal swipe direction\n const direction = x < 0 ? 1 : -1;\n const mId = getMessageId(activeMessageId, x < 0 ? 1 : -1);\n // Get the direction of the last pan gesture.\n // Could be different from the total horizontal swipe direction\n // if user starts a swipe in one direction and then changes the direction\n // we need to cancel slide transition\n const dirX = panDelta.x < 0 ? -1 : 1;\n if (mId && absX >= SWIPE_X_THRESHOLD && direction === dirX) {\n const offset = (window.innerWidth + SLIDES_GAP) * direction;\n // If image is shifted by more than SWIPE_X_THRESHOLD,\n // We shift everything by one screen width and then set new active message id\n transformRef.current.x += offset;\n setActiveMessageId(mId);\n debounceSetMessage(() => selectMessage(mId));\n }\n // Then we always return to the original position\n cancelAnimation = animateNumber({\n from: transformRef.current.x,\n to: 0,\n duration: ANIMATION_DURATION,\n timing: timingFunctions.easeOutCubic,\n onUpdate: (value) => setTransform({\n y: 0,\n x: value,\n scale: transformRef.current.scale,\n }),\n });\n return undefined;\n },\n });\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [\n isZoomed,\n onClose,\n setTransform,\n getMessageId,\n activeMessageId,\n setIsActive,\n ]);\n\n if (!activeMessageId) return undefined;\n\n const nextMessageId = getMessageId(activeMessageId, 1);\n const previousMessageId = getMessageId(activeMessageId, -1);\n const offsetX = transformRef.current.x;\n const offsetY = transformRef.current.y;\n const { scale } = transformRef.current;\n\n return (\n
\n {previousMessageId && scale === 1 && (\n
\n \n
\n )}\n {activeMessageId && (\n \n \n
\n )}\n {nextMessageId && scale === 1 && (\n
\n \n
\n )}\n \n );\n};\n\nexport default memo(MediaViewerSlides);\n\nfunction getAnimationStyle(x = 0, y = 0, scale = 1) {\n return `transform: translate3d(${x.toFixed(3)}px, ${y.toFixed(3)}px, 0px) scale(${scale.toFixed(3)});`;\n}\n\nfunction checkIfInsideSelector(element: HTMLElement, selector: string) {\n if (!element) return false;\n if (element.matches(selector)) return true;\n return Boolean(element.closest(selector));\n}\n\nfunction checkIfControlTarget(e: TouchEvent | MouseEvent) {\n const target = e.target as HTMLElement;\n if (checkIfInsideSelector(target, '.VideoPlayerControls')) {\n if (checkIfInsideSelector(\n target,\n '.play, .fullscreen, .volume, .volume-slider, .playback-rate, .playback-rate-menu',\n )) {\n return true;\n }\n e.preventDefault();\n return true;\n }\n return false;\n}\n","/*\n @source https://github.com/ajainarayanan/react-pan-zoom\n\n Heavily inspired/lifted from this idea: https://stackoverflow.com/a/39311435/661768\n without jqueryUI or jquery dependency.\n*/\nimport React, {\n FC, memo, useEffect, useRef, useState,\n} from '../../lib/teact/teact';\n\nimport { areSortedArraysEqual } from '../../util/iteratees';\n\nimport './PanZoom.scss';\n\nexport interface IDragData {\n x: number;\n y: number;\n dx: number;\n dy: number;\n}\n\nexport interface OwnProps {\n children: React.ReactNode;\n className?: string;\n noWrap: boolean;\n canPan: boolean;\n zoomLevel: number;\n panDeltaX: number;\n panDeltaY: number;\n onPan?: (x: number, y: number) => void;\n}\n\nconst INITIAL_MATRIX = [\n 1, 0, 0, 1, 0, 0,\n];\n\nconst SCALE_VALUES = {\n 1: 1,\n 1.5: 1.5,\n 2: 2.2,\n 2.5: 3.3,\n 3: 5.5,\n};\n\nconst ZOOM_SAFE_AREA = 150;\n\nfunction calculateSafeZoneOnZoom(oldScale: number, matrixData: number[], wrapper: HTMLDivElement | null) {\n const image = wrapper && wrapper.querySelector('.Transition__slide--active img');\n if (!wrapper || !image) {\n return matrixData;\n }\n const wrapperRect = wrapper.getBoundingClientRect();\n const imageRect = image.getBoundingClientRect();\n\n const newImgWidth = (imageRect.width / oldScale) * matrixData[0];\n const newImgHeight = (imageRect.height / oldScale) * matrixData[3];\n const newImgX = (wrapperRect.width - newImgWidth) / 2 + matrixData[4];\n const newImgY = (wrapperRect.height - newImgHeight) / 2 + matrixData[5];\n if (wrapperRect.width && wrapperRect.width - ZOOM_SAFE_AREA < newImgX) {\n matrixData[4] -= newImgX + wrapperRect.width - ZOOM_SAFE_AREA;\n } else if (newImgWidth && newImgWidth + newImgX < ZOOM_SAFE_AREA) {\n matrixData[4] -= newImgWidth + newImgX - ZOOM_SAFE_AREA;\n }\n if (wrapperRect.height && wrapperRect.height - ZOOM_SAFE_AREA < newImgY) {\n matrixData[5] -= newImgY + wrapperRect.height - ZOOM_SAFE_AREA;\n } else if (newImgHeight && newImgHeight + newImgY < ZOOM_SAFE_AREA) {\n matrixData[5] -= newImgHeight + newImgY - ZOOM_SAFE_AREA;\n }\n\n return matrixData;\n}\n\nconst PanZoom: FC = ({\n children,\n className,\n noWrap,\n canPan,\n zoomLevel,\n panDeltaX,\n panDeltaY,\n onPan,\n}) => {\n const tunedZoomLevel = SCALE_VALUES[zoomLevel as keyof typeof SCALE_VALUES] || zoomLevel;\n const [isDragging, setIsDragging] = useState(false);\n const [dragData, setDragData] = useState({\n dx: panDeltaX, dy: panDeltaY, x: 0, y: 0,\n });\n // [zoom, skew, skew, zoom, dx, dy] - see https://developer.mozilla.org/en-US/docs/Web/CSS/transform-function/matrix()\n const [matrixData, setMatrixData] = useState(INITIAL_MATRIX);\n // Used to set cursor while moving.\n // eslint-disable-next-line no-null/no-null\n const panWrapperRef = useRef(null);\n // Used to set transform for pan.\n // eslint-disable-next-line no-null/no-null\n const panContainerRef = useRef(null);\n\n useEffect(() => {\n const newZoomLevel = tunedZoomLevel || matrixData[0];\n const newPandx = panDeltaX || matrixData[4];\n const newPandy = panDeltaY || matrixData[5];\n\n const newMatrixData = [...matrixData];\n if (matrixData[0] !== newZoomLevel) {\n newMatrixData[0] = newZoomLevel || newMatrixData[0];\n newMatrixData[3] = newZoomLevel || newMatrixData[3];\n }\n if (matrixData[4] !== newPandx) {\n newMatrixData[4] = newPandx;\n }\n if (matrixData[5] !== newPandy) {\n newMatrixData[5] = newPandy;\n }\n\n if (!areSortedArraysEqual(matrixData, newMatrixData)) {\n setMatrixData(calculateSafeZoneOnZoom(matrixData[0], newMatrixData, panWrapperRef.current));\n }\n // eslint-disable-next-line\n }, [panDeltaX, panDeltaY, tunedZoomLevel]);\n\n useEffect(() => {\n if (!canPan) {\n setMatrixData(INITIAL_MATRIX);\n }\n }, [canPan]);\n\n useEffect(() => {\n if (panContainerRef.current) {\n panContainerRef.current.style.transform = `matrix(${matrixData.toString()})`;\n }\n }, [noWrap, matrixData]);\n\n const handleMouseDown = (e: React.MouseEvent) => {\n if (!canPan) {\n return;\n }\n\n e.stopPropagation();\n e.preventDefault();\n\n const offsetX = matrixData[4];\n const offsetY = matrixData[5];\n const newDragData: IDragData = {\n dx: offsetX,\n dy: offsetY,\n x: e.pageX,\n y: e.pageY,\n };\n setDragData(newDragData);\n setIsDragging(true);\n\n if (panWrapperRef.current) {\n panWrapperRef.current.classList.add('move');\n }\n };\n\n const handleMouseUp = () => {\n setIsDragging(false);\n\n if (panWrapperRef.current) {\n panWrapperRef.current.classList.remove('move');\n }\n\n if (onPan) {\n onPan(matrixData[4], matrixData[5]);\n }\n };\n\n function getNewMatrixData(x: number, y: number): number[] {\n const newMatrixData = [...matrixData];\n const deltaX = dragData.x - x;\n const deltaY = dragData.y - y;\n newMatrixData[4] = dragData.dx - deltaX;\n newMatrixData[5] = dragData.dy - deltaY;\n\n return newMatrixData;\n }\n\n const handleMouseMove = (e: React.MouseEvent) => {\n if (isDragging) {\n const newMatrixData = getNewMatrixData(e.pageX, e.pageY);\n setMatrixData(newMatrixData);\n\n if (panContainerRef.current) {\n panContainerRef.current.style.transform = `matrix(${matrixData.toString()})`;\n }\n }\n };\n\n if (noWrap) {\n return children;\n }\n\n return (\n \n \n {children}\n \n \n );\n};\n\nexport default memo(PanZoom);\n","import React, { FC, useCallback } from '../../lib/teact/teact';\nimport { getActions, withGlobal } from '../../global';\n\nimport { ApiChat, ApiMessage, ApiUser } from '../../api/types';\n\nimport { IS_SINGLE_COLUMN_LAYOUT } from '../../util/environment';\nimport { getSenderTitle, isUserId } from '../../global/helpers';\nimport { formatMediaDateTime } from '../../util/dateFormat';\nimport renderText from '../common/helpers/renderText';\nimport {\n selectChat,\n selectChatMessage,\n selectSender,\n selectUser,\n} from '../../global/selectors';\nimport useLang from '../../hooks/useLang';\n\nimport Avatar from '../common/Avatar';\n\nimport './SenderInfo.scss';\n\ntype OwnProps = {\n chatId?: string;\n messageId?: number;\n isAvatar?: boolean;\n};\n\ntype StateProps = {\n sender?: ApiUser | ApiChat;\n message?: ApiMessage;\n};\n\nconst ANIMATION_DURATION = 350;\n\nconst SenderInfo: FC = ({\n chatId,\n messageId,\n sender,\n isAvatar,\n message,\n}) => {\n const {\n closeMediaViewer,\n focusMessage,\n toggleChatInfo,\n } = getActions();\n\n const handleFocusMessage = useCallback(() => {\n closeMediaViewer();\n\n if (IS_SINGLE_COLUMN_LAYOUT) {\n setTimeout(() => {\n toggleChatInfo(false, { forceSyncOnIOs: true });\n focusMessage({ chatId, messageId });\n }, ANIMATION_DURATION);\n } else {\n focusMessage({ chatId, messageId });\n }\n }, [chatId, focusMessage, toggleChatInfo, messageId, closeMediaViewer]);\n\n const lang = useLang();\n\n if (!sender || (!message && !isAvatar)) {\n return undefined;\n }\n\n const senderTitle = getSenderTitle(lang, sender);\n\n return (\n
\n {isUserId(sender.id) ? (\n \n ) : (\n \n )}\n
\n
\n {senderTitle && renderText(senderTitle)}\n
\n
\n {isAvatar\n ? lang('lng_mediaview_profile_photo')\n : formatMediaDateTime(lang, message!.date * 1000, true)}\n
\n
\n
\n );\n};\n\nexport default withGlobal(\n (global, { chatId, messageId, isAvatar }): StateProps => {\n if (isAvatar && chatId) {\n return {\n sender: isUserId(chatId) ? selectUser(global, chatId) : selectChat(global, chatId),\n };\n }\n\n if (!messageId || !chatId) {\n return {};\n }\n\n const message = selectChatMessage(global, chatId, messageId);\n\n return {\n message,\n sender: message && selectSender(global, message),\n };\n },\n)(SenderInfo);\n","import React, { FC } from '../../lib/teact/teact';\n\nimport { IS_TOUCH_ENV } from '../../util/environment';\n\nimport Transition, { ChildrenFn, TransitionProps } from '../ui/Transition';\n\nconst SlideTransition: FC = ({ children, ...props }) => {\n if (IS_TOUCH_ENV) return children(true, true, 1);\n // eslint-disable-next-line react/jsx-props-no-spreading\n return {children};\n};\n\nexport default SlideTransition;\n","import React, {\n FC, memo, useCallback, useEffect, useRef, useState,\n} from '../../lib/teact/teact';\n\nimport { IS_SINGLE_COLUMN_LAYOUT } from '../../util/environment';\nimport buildClassName from '../../util/buildClassName';\nimport usePrevious from '../../hooks/usePrevious';\nimport useShowTransition from '../../hooks/useShowTransition';\nimport useLang from '../../hooks/useLang';\n\nimport Button from '../ui/Button';\n\nimport './ZoomControls.scss';\n\ntype OwnProps = {\n isShown: boolean;\n onChangeZoom: (level: number, canCloseZoom?: boolean) => void;\n};\n\nexport const MAX_ZOOM_LEVEL = 3;\nexport const MIN_ZOOM_LEVEL = 1;\nconst ONE_STEP_PERCENT = 100 / (MAX_ZOOM_LEVEL - MIN_ZOOM_LEVEL);\nconst RESET_ZOOM_LEVEL = 1.5;\n\nconst ZoomControls: FC = ({ isShown, onChangeZoom }) => {\n const { transitionClassNames } = useShowTransition(isShown);\n const prevIsShown = usePrevious(isShown);\n // eslint-disable-next-line no-null/no-null\n const inputRef = useRef(null);\n const [zoomLevel, setZoomLevel] = useState(1);\n const isSeeking = useRef(false);\n\n useEffect(() => {\n if (isShown && !prevIsShown) {\n setZoomLevel(RESET_ZOOM_LEVEL);\n }\n }, [isShown, prevIsShown]);\n\n const handleZoomOut = useCallback(() => {\n if (inputRef.current) {\n setZoomLevel(Math.max(MIN_ZOOM_LEVEL, zoomLevel - 0.5));\n }\n }, [zoomLevel]);\n\n const handleZoomIn = useCallback(() => {\n if (inputRef.current) {\n setZoomLevel(Math.min(MAX_ZOOM_LEVEL, zoomLevel + 0.5));\n }\n }, [zoomLevel]);\n\n const handleStartSeek = useCallback(() => {\n isSeeking.current = true;\n }, []);\n\n const handleStopSeek = useCallback(() => {\n isSeeking.current = false;\n if (zoomLevel === 1) {\n onChangeZoom(zoomLevel, !isSeeking.current);\n }\n }, [onChangeZoom, zoomLevel]);\n\n const handleSeeklineChange = (e:React.ChangeEvent) => {\n setZoomLevel(Math.min(MAX_ZOOM_LEVEL, Math.max(Number(e.target.value), MIN_ZOOM_LEVEL)));\n };\n\n useEffect(() => {\n onChangeZoom(zoomLevel, !isSeeking.current);\n }, [zoomLevel, onChangeZoom]);\n\n const lang = useLang();\n\n const className = buildClassName(\n 'ZoomControls',\n transitionClassNames,\n );\n\n return (\n
\n \n \n \n \n \n \n
\n
\n \n \n
\n
\n
\n );\n};\n\nexport default memo(ZoomControls);\n","import React, {\n FC, memo, useCallback, useEffect, useMemo, useRef, useState,\n} from '../../lib/teact/teact';\nimport { getActions, withGlobal } from '../../global';\n\nimport {\n ApiChat, ApiDimensions, ApiMediaFormat, ApiMessage, ApiUser,\n} from '../../api/types';\nimport { MediaViewerOrigin } from '../../types';\n\nimport { ANIMATION_END_DELAY } from '../../config';\nimport { IS_IOS, IS_SINGLE_COLUMN_LAYOUT, IS_TOUCH_ENV } from '../../util/environment';\nimport useBlurSync from '../../hooks/useBlurSync';\nimport useForceUpdate from '../../hooks/useForceUpdate';\nimport { dispatchHeavyAnimationEvent } from '../../hooks/useHeavyAnimationCheck';\nimport useHistoryBack from '../../hooks/useHistoryBack';\nimport useLang from '../../hooks/useLang';\nimport useMedia from '../../hooks/useMedia';\nimport useMediaWithLoadProgress from '../../hooks/useMediaWithLoadProgress';\nimport usePrevious from '../../hooks/usePrevious';\nimport {\n getChatAvatarHash,\n getChatMediaMessageIds,\n getMessageDocument,\n getMessageFileName,\n getMessageMediaFormat,\n getMessageMediaHash,\n getMessageMediaThumbDataUri,\n getMessagePhoto,\n getMessageVideo,\n getMessageWebPagePhoto,\n getMessageWebPageVideo,\n getPhotoFullDimensions,\n getVideoDimensions,\n isMessageDocumentPhoto,\n isMessageDocumentVideo,\n} from '../../global/helpers';\nimport {\n selectChat,\n selectChatMessage,\n selectChatMessages,\n selectCurrentMediaSearch,\n selectListedIds,\n selectOutlyingIds,\n selectScheduledMessage,\n selectScheduledMessages,\n selectUser,\n} from '../../global/selectors';\nimport { stopCurrentAudio } from '../../util/audioPlayer';\nimport captureEscKeyListener from '../../util/captureEscKeyListener';\nimport { captureEvents } from '../../util/captureEvents';\nimport windowSize from '../../util/windowSize';\nimport { AVATAR_FULL_DIMENSIONS, MEDIA_VIEWER_MEDIA_QUERY } from '../common/helpers/mediaDimensions';\nimport { renderMessageText } from '../common/helpers/renderMessageText';\nimport { animateClosing, animateOpening } from './helpers/ghostAnimation';\n\nimport Button from '../ui/Button';\nimport ShowTransition from '../ui/ShowTransition';\nimport Transition from '../ui/Transition';\nimport MediaViewerActions from './MediaViewerActions';\nimport MediaViewerSlides from './MediaViewerSlides';\nimport PanZoom from './PanZoom';\nimport SenderInfo from './SenderInfo';\nimport SlideTransition from './SlideTransition';\nimport ZoomControls from './ZoomControls';\n\nimport './MediaViewer.scss';\n\ntype StateProps = {\n chatId?: string;\n threadId?: number;\n messageId?: number;\n senderId?: string;\n origin?: MediaViewerOrigin;\n avatarOwner?: ApiChat | ApiUser;\n profilePhotoIndex?: number;\n message?: ApiMessage;\n chatMessages?: Record;\n collectionIds?: number[];\n animationLevel: 0 | 1 | 2;\n};\n\nconst ANIMATION_DURATION = 350;\n\nconst MediaViewer: FC = ({\n chatId,\n threadId,\n messageId,\n senderId,\n origin,\n avatarOwner,\n profilePhotoIndex,\n message,\n chatMessages,\n collectionIds,\n animationLevel,\n}) => {\n const {\n openMediaViewer,\n closeMediaViewer,\n openForwardMenu,\n focusMessage,\n toggleChatInfo,\n } = getActions();\n\n const isOpen = Boolean(avatarOwner || messageId);\n\n const isFromSharedMedia = origin === MediaViewerOrigin.SharedMedia;\n const isFromSearch = origin === MediaViewerOrigin.SearchResult;\n\n /* Content */\n const photo = message ? getMessagePhoto(message) : undefined;\n const video = message ? getMessageVideo(message) : undefined;\n const webPagePhoto = message ? getMessageWebPagePhoto(message) : undefined;\n const webPageVideo = message ? getMessageWebPageVideo(message) : undefined;\n const isDocumentPhoto = message ? isMessageDocumentPhoto(message) : false;\n const isDocumentVideo = message ? isMessageDocumentVideo(message) : false;\n const isVideo = Boolean(video || webPageVideo || isDocumentVideo);\n const { isGif } = video || webPageVideo || {};\n const isPhoto = Boolean(!isVideo && (photo || webPagePhoto || isDocumentPhoto));\n const isAvatar = Boolean(avatarOwner);\n\n /* Navigation */\n const singleMessageId = webPagePhoto || webPageVideo ? messageId : undefined;\n\n const messageIds = useMemo(() => {\n return singleMessageId\n ? [singleMessageId]\n : getChatMediaMessageIds(chatMessages || {}, collectionIds || [], isFromSharedMedia);\n }, [singleMessageId, chatMessages, collectionIds, isFromSharedMedia]);\n\n const selectedMediaMessageIndex = messageId ? messageIds.indexOf(messageId) : -1;\n const isFirst = selectedMediaMessageIndex === 0 || selectedMediaMessageIndex === -1;\n const isLast = selectedMediaMessageIndex === messageIds.length - 1 || selectedMediaMessageIndex === -1;\n\n /* Animation */\n const animationKey = useRef();\n const prevSenderId = usePrevious(senderId);\n if (isOpen && (!prevSenderId || prevSenderId !== senderId || !animationKey.current)) {\n animationKey.current = selectedMediaMessageIndex;\n }\n const slideAnimation = animationLevel >= 1 && !IS_TOUCH_ENV ? 'mv-slide' : 'none';\n const headerAnimation = animationLevel === 2 ? 'slide-fade' : 'none';\n const isGhostAnimation = animationLevel === 2;\n\n /* Controls */\n const [canPanZoomWrap, setCanPanZoomWrap] = useState(false);\n const [isZoomed, setIsZoomed] = useState(false);\n const [zoomLevel, setZoomLevel] = useState(1);\n const [panDelta, setPanDelta] = useState({\n x: 0,\n y: 0,\n });\n\n /* Media data */\n function getMediaHash(isFull?: boolean) {\n if (isAvatar && profilePhotoIndex !== undefined) {\n const { photos } = avatarOwner!;\n return photos && photos[profilePhotoIndex]\n ? `photo${photos[profilePhotoIndex].id}?size=c`\n : getChatAvatarHash(avatarOwner!, isFull ? 'big' : 'normal');\n }\n\n return message && getMessageMediaHash(message, isFull ? 'viewerFull' : 'viewerPreview');\n }\n\n const pictogramBlobUrl = useMedia(\n message && (isFromSharedMedia || isFromSearch) && getMessageMediaHash(message, 'pictogram'),\n undefined,\n ApiMediaFormat.BlobUrl,\n undefined,\n isGhostAnimation && ANIMATION_DURATION,\n );\n const previewMediaHash = getMediaHash();\n const previewBlobUrl = useMedia(\n previewMediaHash,\n undefined,\n ApiMediaFormat.BlobUrl,\n undefined,\n isGhostAnimation && ANIMATION_DURATION,\n );\n const { mediaData: fullMediaBlobUrl } = useMediaWithLoadProgress(\n getMediaHash(true),\n undefined,\n message && getMessageMediaFormat(message, 'viewerFull'),\n undefined,\n isGhostAnimation && ANIMATION_DURATION,\n );\n\n const localBlobUrl = (photo || video) ? (photo || video)!.blobUrl : undefined;\n let bestImageData = (!isVideo && (localBlobUrl || fullMediaBlobUrl)) || previewBlobUrl || pictogramBlobUrl;\n const thumbDataUri = useBlurSync(!bestImageData && message && getMessageMediaThumbDataUri(message));\n if (!bestImageData && origin !== MediaViewerOrigin.SearchResult) {\n bestImageData = thumbDataUri;\n }\n\n const fileName = message\n ? getMessageFileName(message)\n : isAvatar\n ? `avatar${avatarOwner!.id}-${profilePhotoIndex}.jpg`\n : undefined;\n\n let dimensions!: ApiDimensions;\n if (message) {\n if (isDocumentPhoto || isDocumentVideo) {\n dimensions = getMessageDocument(message)!.mediaSize!;\n } else if (photo || webPagePhoto) {\n dimensions = getPhotoFullDimensions((photo || webPagePhoto)!)!;\n } else if (video || webPageVideo) {\n dimensions = getVideoDimensions((video || webPageVideo)!)!;\n }\n } else {\n dimensions = AVATAR_FULL_DIMENSIONS;\n }\n\n useEffect(() => {\n if (!IS_SINGLE_COLUMN_LAYOUT) {\n return;\n }\n\n document.body.classList.toggle('is-media-viewer-open', isOpen);\n }, [isOpen]);\n\n const forceUpdate = useForceUpdate();\n useEffect(() => {\n const mql = window.matchMedia(MEDIA_VIEWER_MEDIA_QUERY);\n if (typeof mql.addEventListener === 'function') {\n mql.addEventListener('change', forceUpdate);\n } else if (typeof mql.addListener === 'function') {\n mql.addListener(forceUpdate);\n }\n\n return () => {\n if (typeof mql.removeEventListener === 'function') {\n mql.removeEventListener('change', forceUpdate);\n } else if (typeof mql.removeListener === 'function') {\n mql.removeListener(forceUpdate);\n }\n };\n }, [forceUpdate]);\n\n const prevMessage = usePrevious(message);\n const prevOrigin = usePrevious(origin);\n const prevAvatarOwner = usePrevious(avatarOwner);\n const prevBestImageData = usePrevious(bestImageData);\n const textParts = message ? renderMessageText(message) : undefined;\n const hasFooter = Boolean(textParts);\n\n useEffect(() => {\n if (isGhostAnimation && isOpen && !prevMessage && !prevAvatarOwner) {\n dispatchHeavyAnimationEvent(ANIMATION_DURATION + ANIMATION_END_DELAY);\n animateOpening(hasFooter, origin!, bestImageData!, dimensions, isVideo, message);\n }\n\n if (isGhostAnimation && !isOpen && (prevMessage || prevAvatarOwner)) {\n dispatchHeavyAnimationEvent(ANIMATION_DURATION + ANIMATION_END_DELAY);\n animateClosing(prevOrigin!, prevBestImageData!, prevMessage || undefined);\n }\n }, [\n isGhostAnimation, isOpen, origin, prevOrigin, message, prevMessage, prevAvatarOwner,\n bestImageData, prevBestImageData, dimensions, isVideo, hasFooter,\n ]);\n\n useEffect(() => {\n let timer: number | undefined;\n\n if (isZoomed) {\n setCanPanZoomWrap(true);\n } else {\n timer = window.setTimeout(() => {\n setCanPanZoomWrap(false);\n }, ANIMATION_DURATION);\n }\n\n return () => {\n if (timer) {\n window.clearTimeout(timer);\n }\n };\n }, [isZoomed]);\n\n const closeZoom = () => {\n setIsZoomed(false);\n setZoomLevel(1);\n setPanDelta({\n x: 0,\n y: 0,\n });\n };\n\n const handleZoomToggle = useCallback(() => {\n setIsZoomed(!isZoomed);\n setZoomLevel(!isZoomed ? 1.5 : 1);\n if (isZoomed) {\n setPanDelta({\n x: 0,\n y: 0,\n });\n }\n }, [isZoomed]);\n\n const handleZoomValue = useCallback((level: number, canCloseZoom = false) => {\n setZoomLevel(level);\n if (level === 1 && canCloseZoom) {\n closeZoom();\n }\n }, []);\n\n const close = useCallback(() => {\n closeMediaViewer();\n closeZoom();\n }, [closeMediaViewer]);\n\n const handleFooterClick = useCallback(() => {\n close();\n\n if (IS_SINGLE_COLUMN_LAYOUT) {\n setTimeout(() => {\n toggleChatInfo(false, { forceSyncOnIOs: true });\n focusMessage({ chatId, threadId, messageId });\n }, ANIMATION_DURATION);\n } else {\n focusMessage({ chatId, threadId, messageId });\n }\n }, [close, chatId, threadId, focusMessage, toggleChatInfo, messageId]);\n\n const handleForward = useCallback(() => {\n openForwardMenu({\n fromChatId: chatId,\n messageIds: [messageId],\n });\n closeZoom();\n }, [openForwardMenu, chatId, messageId]);\n\n const selectMessage = useCallback((id?: number) => openMediaViewer({\n chatId,\n threadId,\n messageId: id,\n origin,\n }, {\n forceOnHeavyAnimation: true,\n }), [chatId, openMediaViewer, origin, threadId]);\n\n useEffect(() => (isOpen ? captureEscKeyListener(() => {\n if (isZoomed) {\n closeZoom();\n } else {\n close();\n }\n }) : undefined), [close, isOpen, isZoomed]);\n\n useEffect(() => {\n if (isVideo && !isGif) {\n stopCurrentAudio();\n }\n }, [isGif, isVideo]);\n\n // Prevent refresh when rotating device to watch a video\n useEffect(() => {\n if (!isOpen) {\n return undefined;\n }\n\n windowSize.disableRefresh();\n\n return () => {\n windowSize.enableRefresh();\n };\n }, [isOpen]);\n\n const getMessageId = useCallback((fromId?: number, direction?: number): number | undefined => {\n if (!fromId) return undefined;\n const index = messageIds.indexOf(fromId);\n if ((direction === -1 && index > 0) || (direction === 1 && index < messageIds.length - 1)) {\n return messageIds[index + direction];\n }\n return undefined;\n }, [messageIds]);\n\n const nextMessageId = getMessageId(messageId, 1);\n const previousMessageId = getMessageId(messageId, -1);\n\n const handlePan = useCallback((x: number, y: number) => {\n setPanDelta({\n x,\n y,\n });\n }, []);\n\n const lang = useLang();\n\n useHistoryBack(isOpen, closeMediaViewer, openMediaViewer, {\n chatId,\n threadId,\n messageId,\n origin,\n avatarOwnerId: avatarOwner && avatarOwner.id,\n });\n\n useEffect(() => {\n if (!isOpen) {\n return undefined;\n }\n\n function handleKeyDown(e: KeyboardEvent) {\n switch (e.key) {\n case 'Left': // IE/Edge specific value\n case 'ArrowLeft':\n selectMessage(previousMessageId);\n break;\n\n case 'Right': // IE/Edge specific value\n case 'ArrowRight':\n selectMessage(nextMessageId);\n break;\n }\n }\n\n document.addEventListener('keydown', handleKeyDown, false);\n\n return () => {\n document.removeEventListener('keydown', handleKeyDown, false);\n };\n }, [isOpen, nextMessageId, previousMessageId, selectMessage]);\n\n useEffect(() => {\n if (isZoomed || IS_TOUCH_ENV) return undefined;\n const element = document.querySelector('.MediaViewerSlide--active');\n if (!element) {\n return undefined;\n }\n\n const shouldCloseOnVideo = isGif && !IS_IOS;\n\n return captureEvents(element, {\n // eslint-disable-next-line max-len\n excludedClosestSelector: `.backdrop, .navigation, .media-viewer-head, .Spoiler, .media-viewer-footer${!shouldCloseOnVideo ? ', .VideoPlayer' : ''}`,\n onClick: close,\n });\n }, [close, isGif, isZoomed, messageId]);\n\n function renderSenderInfo() {\n return isAvatar ? (\n \n ) : (\n \n );\n }\n\n return (\n \n
\n {IS_SINGLE_COLUMN_LAYOUT && (\n \n \n \n )}\n \n {renderSenderInfo()}\n \n \n
\n \n \n {(isActive: boolean) => (\n \n )}\n \n \n {!isFirst && !IS_TOUCH_ENV && (\n selectMessage(previousMessageId)}\n />\n )}\n {!isLast && !IS_TOUCH_ENV && (\n selectMessage(nextMessageId)}\n />\n )}\n \n \n );\n};\n\nexport default memo(withGlobal(\n (global): StateProps => {\n const {\n chatId,\n threadId,\n messageId,\n avatarOwnerId,\n profilePhotoIndex,\n origin,\n } = global.mediaViewer;\n const {\n animationLevel,\n } = global.settings.byKey;\n\n if (origin === MediaViewerOrigin.SearchResult) {\n if (!(chatId && messageId)) {\n return { animationLevel };\n }\n\n const message = selectChatMessage(global, chatId, messageId);\n if (!message) {\n return { animationLevel };\n }\n\n return {\n chatId,\n messageId,\n senderId: message.senderId,\n origin,\n message,\n animationLevel,\n };\n }\n\n if (avatarOwnerId) {\n const sender = selectUser(global, avatarOwnerId) || selectChat(global, avatarOwnerId);\n\n return {\n messageId: -1,\n senderId: avatarOwnerId,\n avatarOwner: sender,\n profilePhotoIndex: profilePhotoIndex || 0,\n animationLevel,\n origin,\n };\n }\n\n if (!(chatId && threadId && messageId)) {\n return { animationLevel };\n }\n\n let message: ApiMessage | undefined;\n if (origin && [MediaViewerOrigin.ScheduledAlbum, MediaViewerOrigin.ScheduledInline].includes(origin)) {\n message = selectScheduledMessage(global, chatId, messageId);\n } else {\n message = selectChatMessage(global, chatId, messageId);\n }\n\n if (!message) {\n return { animationLevel };\n }\n\n let chatMessages: Record | undefined;\n\n if (origin && [MediaViewerOrigin.ScheduledAlbum, MediaViewerOrigin.ScheduledInline].includes(origin)) {\n chatMessages = selectScheduledMessages(global, chatId);\n } else {\n chatMessages = selectChatMessages(global, chatId);\n }\n let collectionIds: number[] | undefined;\n\n if (origin === MediaViewerOrigin.Inline || origin === MediaViewerOrigin.Album) {\n collectionIds = selectOutlyingIds(global, chatId, threadId) || selectListedIds(global, chatId, threadId);\n } else if (origin === MediaViewerOrigin.SharedMedia) {\n const currentSearch = selectCurrentMediaSearch(global);\n const { foundIds } = (currentSearch && currentSearch.resultsByType && currentSearch.resultsByType.media) || {};\n collectionIds = foundIds;\n }\n\n return {\n chatId,\n threadId,\n messageId,\n senderId: message.senderId,\n origin,\n message,\n chatMessages,\n collectionIds,\n animationLevel,\n };\n },\n)(MediaViewer));\n","import { RefObject } from 'react';\nimport React, {\n FC, memo, useRef, useCallback,\n} from '../../lib/teact/teact';\n\nimport { CHAT_HEIGHT_PX } from '../../config';\nimport useInfiniteScroll from '../../hooks/useInfiniteScroll';\nimport useLang from '../../hooks/useLang';\nimport useKeyboardListNavigation from '../../hooks/useKeyboardListNavigation';\nimport useInputFocusOnOpen from '../../hooks/useInputFocusOnOpen';\nimport { isUserId } from '../../global/helpers';\n\nimport Loading from '../ui/Loading';\nimport Modal from '../ui/Modal';\nimport InputText from '../ui/InputText';\nimport Button from '../ui/Button';\nimport InfiniteScroll from '../ui/InfiniteScroll';\nimport ListItem from '../ui/ListItem';\nimport GroupChatInfo from './GroupChatInfo';\nimport PrivateChatInfo from './PrivateChatInfo';\n\nimport './ChatOrUserPicker.scss';\n\nexport type OwnProps = {\n currentUserId?: string;\n chatOrUserIds: string[];\n isOpen: boolean;\n filterRef: RefObject;\n filterPlaceholder: string;\n filter: string;\n loadMore?: NoneToVoidFunction;\n onFilterChange: (filter: string) => void;\n onSelectChatOrUser: (chatOrUserId: string) => void;\n onClose: NoneToVoidFunction;\n onCloseAnimationEnd?: NoneToVoidFunction;\n};\n\nconst ChatOrUserPicker: FC = ({\n isOpen,\n currentUserId,\n chatOrUserIds,\n filterRef,\n filter,\n filterPlaceholder,\n loadMore,\n onFilterChange,\n onSelectChatOrUser,\n onClose,\n onCloseAnimationEnd,\n}) => {\n const lang = useLang();\n const [viewportIds, getMore] = useInfiniteScroll(loadMore, chatOrUserIds, Boolean(filter));\n\n const resetFilter = useCallback(() => {\n onFilterChange('');\n }, [onFilterChange]);\n useInputFocusOnOpen(filterRef, isOpen, resetFilter);\n\n // eslint-disable-next-line no-null/no-null\n const containerRef = useRef(null);\n const handleFilterChange = useCallback((e: React.ChangeEvent) => {\n onFilterChange(e.currentTarget.value);\n }, [onFilterChange]);\n const handleKeyDown = useKeyboardListNavigation(containerRef, isOpen, (index) => {\n if (viewportIds && viewportIds.length > 0) {\n onSelectChatOrUser(viewportIds[index === -1 ? 0 : index]);\n }\n }, '.ListItem-button', true);\n\n const modalHeader = (\n
\n \n \n \n \n
\n );\n\n const viewportOffset = chatOrUserIds!.indexOf(viewportIds![0]);\n\n return (\n \n {viewportIds?.length ? (\n \n {viewportIds.map((id, i) => (\n onSelectChatOrUser(id)}\n >\n {isUserId(id) ? (\n \n ) : (\n \n )}\n \n ))}\n \n ) : viewportIds && !viewportIds.length ? (\n

{lang('lng_blocked_list_not_found')}

\n ) : (\n \n )}\n \n );\n};\n\nexport default memo(ChatOrUserPicker);\n","import React, {\n FC, useMemo, useState, memo, useRef, useCallback, useEffect,\n} from '../../lib/teact/teact';\nimport { getActions, getGlobal, withGlobal } from '../../global';\n\nimport { ApiChat, MAIN_THREAD_ID } from '../../api/types';\n\nimport {\n filterChatsByName,\n filterUsersByName,\n getCanPostInChat,\n sortChatIds,\n} from '../../global/helpers';\nimport { unique } from '../../util/iteratees';\nimport useLang from '../../hooks/useLang';\nimport useCurrentOrPrev from '../../hooks/useCurrentOrPrev';\nimport useFlag from '../../hooks/useFlag';\n\nimport ChatOrUserPicker from '../common/ChatOrUserPicker';\n\nexport type OwnProps = {\n isOpen: boolean;\n};\n\ntype StateProps = {\n chatsById: Record;\n activeListIds?: string[];\n archivedListIds?: string[];\n pinnedIds?: string[];\n contactIds?: string[];\n currentUserId?: string;\n};\n\nconst ForwardPicker: FC = ({\n chatsById,\n activeListIds,\n archivedListIds,\n pinnedIds,\n contactIds,\n currentUserId,\n isOpen,\n}) => {\n const {\n setForwardChatId,\n exitForwardMode,\n } = getActions();\n\n const lang = useLang();\n const [filter, setFilter] = useState('');\n // eslint-disable-next-line no-null/no-null\n const filterRef = useRef(null);\n\n const [isShown, markIsShown, unmarkIsShown] = useFlag();\n useEffect(() => {\n if (isOpen) {\n markIsShown();\n }\n }, [isOpen, markIsShown]);\n\n const chatAndContactIds = useMemo(() => {\n if (!isOpen) {\n return undefined;\n }\n\n let priorityIds = pinnedIds || [];\n if (currentUserId) {\n priorityIds = unique([currentUserId, ...priorityIds]);\n }\n\n const chatIds = [\n ...(activeListIds || []),\n ...(archivedListIds || []),\n ].filter((id) => {\n const chat = chatsById[id];\n\n return chat && getCanPostInChat(chat, MAIN_THREAD_ID);\n });\n\n // No need for expensive global updates on users, so we avoid them\n const usersById = getGlobal().users.byId;\n\n return sortChatIds(unique([\n ...filterChatsByName(lang, chatIds, chatsById, filter, currentUserId),\n ...(contactIds ? filterUsersByName(contactIds, usersById, filter) : []),\n ]), chatsById, undefined, priorityIds);\n }, [activeListIds, archivedListIds, chatsById, contactIds, currentUserId, filter, isOpen, lang, pinnedIds]);\n\n const handleSelectUser = useCallback((userId: string) => {\n setForwardChatId({ id: userId });\n }, [setForwardChatId]);\n\n const renderingChatAndContactIds = useCurrentOrPrev(chatAndContactIds, true)!;\n\n if (!isOpen && !isShown) {\n return undefined;\n }\n\n return (\n \n );\n};\n\nexport default memo(withGlobal(\n (global): StateProps => {\n const {\n chats: {\n byId: chatsById,\n listIds,\n orderedPinnedIds,\n },\n currentUserId,\n } = global;\n\n return {\n chatsById,\n activeListIds: listIds.active,\n archivedListIds: listIds.archived,\n pinnedIds: orderedPinnedIds.active,\n contactIds: global.contactList?.userIds,\n currentUserId,\n };\n },\n)(ForwardPicker));\n","import React, { FC, memo, useEffect } from '../../lib/teact/teact';\nimport { getActions, withGlobal } from '../../global';\n\nimport {\n ApiContact, ApiError, ApiInviteInfo, ApiPhoto,\n} from '../../api/types';\n\nimport getReadableErrorText from '../../util/getReadableErrorText';\nimport { pick } from '../../util/iteratees';\nimport renderText from '../common/helpers/renderText';\nimport useLang from '../../hooks/useLang';\nimport useFlag from '../../hooks/useFlag';\n\nimport Modal from '../ui/Modal';\nimport Button from '../ui/Button';\nimport Avatar from '../common/Avatar';\n\nimport './Dialogs.scss';\n\ntype StateProps = {\n dialogs: (ApiError | ApiInviteInfo)[];\n};\n\nconst Dialogs: FC = ({ dialogs }) => {\n const {\n dismissDialog,\n acceptInviteConfirmation,\n sendMessage,\n showNotification,\n } = getActions();\n const [isModalOpen, openModal, closeModal] = useFlag();\n\n const lang = useLang();\n\n useEffect(() => {\n if (dialogs.length > 0) {\n openModal();\n }\n }, [dialogs, openModal]);\n\n if (!dialogs.length) {\n return undefined;\n }\n\n function renderInviteHeader(title: string, photo?: ApiPhoto) {\n return (\n
\n {photo && }\n
\n {renderText(title)}\n
\n \n
\n );\n }\n\n const renderInvite = (invite: ApiInviteInfo) => {\n const {\n hash, title, about, participantsCount, isChannel, photo, isRequestNeeded,\n } = invite;\n\n const handleJoinClick = () => {\n acceptInviteConfirmation({\n hash,\n });\n showNotification({\n message: isChannel ? lang('RequestToJoinChannelSentDescription') : lang('RequestToJoinGroupSentDescription'),\n });\n closeModal();\n };\n\n const participantsText = isChannel\n ? lang('Subscribers', participantsCount, 'i')\n : lang('Members', participantsCount, 'i');\n\n const joinText = isChannel ? lang('ChannelJoin') : lang('JoinGroup');\n const requestToJoinText = isChannel\n ? lang('MemberRequests.RequestToJoinChannel') : lang('MemberRequests.RequestToJoinGroup');\n\n return (\n \n {participantsCount !== undefined &&

{participantsText}

}\n {about &&

{renderText(about, ['br'])}

}\n {isRequestNeeded && (\n

\n {isChannel\n ? lang('MemberRequests.RequestToJoinDescriptionChannel')\n : lang('MemberRequests.RequestToJoinDescriptionGroup')}\n

\n )}\n \n {isRequestNeeded ? requestToJoinText : joinText}\n \n \n \n );\n };\n\n const renderContactRequest = (contactRequest: ApiContact) => {\n const handleConfirm = () => {\n sendMessage({\n contact: pick(contactRequest, ['firstName', 'lastName', 'phoneNumber']),\n });\n closeModal();\n };\n\n return (\n \n {lang('AreYouSureShareMyContactInfoBot')}\n
\n \n {lang('OK')}\n \n \n
\n \n );\n };\n\n const renderError = (error: ApiError) => {\n return (\n \n {error.hasErrorKey ? getReadableErrorText(error) : renderText(error.message!, ['emoji', 'br'])}\n
\n \n
\n \n );\n };\n\n const renderDialog = (dialog: ApiError | ApiInviteInfo | ApiContact) => {\n if ('hash' in dialog) {\n return renderInvite(dialog);\n }\n\n if ('phoneNumber' in dialog) {\n return renderContactRequest(dialog);\n }\n\n return renderError(dialog);\n };\n\n return (\n
\n {Boolean(dialogs.length) && renderDialog(dialogs[dialogs.length - 1])}\n
\n );\n};\n\nfunction getErrorHeader(error: ApiError) {\n if (error.isSlowMode) {\n return 'Slowmode enabled';\n }\n\n if (!error.hasErrorKey) {\n return 'Telegram';\n }\n\n return 'Something went wrong';\n}\n\nexport default memo(withGlobal(\n (global): StateProps => pick(global, ['dialogs']),\n)(Dialogs));\n","import React, { FC, memo } from '../../lib/teact/teact';\nimport { getActions, withGlobal } from '../../global';\n\nimport { ApiNotification } from '../../api/types';\n\nimport { pick } from '../../util/iteratees';\nimport renderText from '../common/helpers/renderText';\n\nimport Notification from '../ui/Notification';\n\ntype StateProps = {\n notifications: ApiNotification[];\n};\n\nconst Notifications: FC = ({ notifications }) => {\n const { dismissNotification } = getActions();\n\n if (!notifications.length) {\n return undefined;\n }\n\n return (\n
\n {notifications.map(({ message, localId }) => (\n dismissNotification({ localId })}\n />\n ))}\n
\n );\n};\n\nexport default memo(withGlobal(\n (global): StateProps => pick(global, ['notifications']),\n)(Notifications));\n","import React, { FC, memo, useCallback } from '../../lib/teact/teact';\nimport { getActions } from '../../global';\n\nimport { ensureProtocol } from '../../util/ensureProtocol';\nimport renderText from '../common/helpers/renderText';\nimport useLang from '../../hooks/useLang';\nimport useCurrentOrPrev from '../../hooks/useCurrentOrPrev';\n\nimport ConfirmDialog from '../ui/ConfirmDialog';\n\nexport type OwnProps = {\n url?: string;\n};\n\nconst SafeLinkModal: FC = ({ url }) => {\n const { toggleSafeLinkModal } = getActions();\n\n const lang = useLang();\n\n const handleOpen = useCallback(() => {\n window.open(ensureProtocol(url));\n toggleSafeLinkModal({ url: undefined });\n }, [toggleSafeLinkModal, url]);\n\n const handleDismiss = useCallback(() => {\n toggleSafeLinkModal({ url: undefined });\n }, [toggleSafeLinkModal]);\n\n const renderingUrl = useCurrentOrPrev(url);\n\n return (\n \n );\n};\n\nexport default memo(SafeLinkModal);\n","import React, {\n FC, memo, useState, useEffect, useMemo, useCallback,\n} from '../../lib/teact/teact';\n\nimport buildClassName from '../../util/buildClassName';\nimport { formatTime, formatDateToString, getDayStart } from '../../util/dateFormat';\nimport useLang, { LangFn } from '../../hooks/useLang';\nimport usePrevious from '../../hooks/usePrevious';\nimport useFlag from '../../hooks/useFlag';\n\nimport Modal from '../ui/Modal';\nimport Button from '../ui/Button';\n\nimport './CalendarModal.scss';\n\nconst MAX_SAFE_DATE = 2147483647 * 1000; // API has int for dates\nconst MIN_SAFE_DATE = 0;\n\nexport type OwnProps = {\n selectedAt?: number;\n minAt?: number;\n maxAt?: number;\n isFutureMode?: boolean;\n isPastMode?: boolean;\n isOpen: boolean;\n withTimePicker?: boolean;\n submitButtonLabel?: string;\n secondButtonLabel?: string;\n onClose: () => void;\n onSubmit: (date: Date) => void;\n onSecondButtonClick?: NoneToVoidFunction;\n};\n\nconst WEEKDAY_LETTERS = [\n 'lng_weekday1',\n 'lng_weekday2',\n 'lng_weekday3',\n 'lng_weekday4',\n 'lng_weekday5',\n 'lng_weekday6',\n 'lng_weekday7',\n];\n\nconst CalendarModal: FC = ({\n selectedAt,\n minAt,\n maxAt,\n isFutureMode,\n isPastMode,\n isOpen,\n withTimePicker,\n submitButtonLabel,\n secondButtonLabel,\n onClose,\n onSubmit,\n onSecondButtonClick,\n}) => {\n const lang = useLang();\n const now = new Date();\n\n const minDate = useMemo(() => {\n if (isFutureMode && !minAt) return new Date();\n return new Date(Math.max(minAt || MIN_SAFE_DATE, MIN_SAFE_DATE));\n }, [isFutureMode, minAt]);\n const maxDate = useMemo(() => {\n if (isPastMode && !maxAt) return new Date();\n return new Date(Math.min(maxAt || MAX_SAFE_DATE, MAX_SAFE_DATE));\n }, [isPastMode, maxAt]);\n\n const passedSelectedDate = useMemo(() => (selectedAt ? new Date(selectedAt) : new Date()), [selectedAt]);\n const prevIsOpen = usePrevious(isOpen);\n const [isTimeInputFocused, markTimeInputAsFocused, unmarkTimeInputAsFocused] = useFlag(false);\n\n const [selectedDate, setSelectedDate] = useState(passedSelectedDate);\n const [currentMonthAndYear, setCurrentMonthAndYear] = useState(\n new Date(selectedDate.getFullYear(), selectedDate.getMonth(), 1),\n );\n const [selectedHours, setSelectedHours] = useState(\n formatInputTime(passedSelectedDate.getHours()),\n );\n const [selectedMinutes, setSelectedMinutes] = useState(\n formatInputTime(passedSelectedDate.getMinutes()),\n );\n\n const selectedDay = formatDay(selectedDate.getFullYear(), selectedDate.getMonth(), selectedDate.getDate());\n const currentYear = currentMonthAndYear.getFullYear();\n const currentMonth = currentMonthAndYear.getMonth();\n\n useEffect(() => {\n if (!prevIsOpen && isOpen) {\n setSelectedDate(passedSelectedDate);\n setCurrentMonthAndYear(new Date(passedSelectedDate.getFullYear(), passedSelectedDate.getMonth(), 1));\n if (withTimePicker) {\n setSelectedHours(formatInputTime(passedSelectedDate.getHours()));\n setSelectedMinutes(formatInputTime(passedSelectedDate.getMinutes()));\n }\n }\n }, [passedSelectedDate, isOpen, prevIsOpen, withTimePicker]);\n\n useEffect(() => {\n if (isFutureMode && !isTimeInputFocused && selectedDate.getTime() < minDate.getTime()) {\n setSelectedDate(minDate);\n setSelectedHours(formatInputTime(minDate.getHours()));\n setSelectedMinutes(formatInputTime(minDate.getMinutes()));\n }\n }, [isFutureMode, isTimeInputFocused, minDate, selectedDate]);\n\n useEffect(() => {\n if (isPastMode && !isTimeInputFocused && selectedDate.getTime() > maxDate.getTime()) {\n setSelectedDate(maxDate);\n setSelectedHours(formatInputTime(maxDate.getHours()));\n setSelectedMinutes(formatInputTime(maxDate.getMinutes()));\n }\n }, [isFutureMode, isPastMode, isTimeInputFocused, maxDate, minDate, selectedDate]);\n\n useEffect(() => {\n if (selectedAt) {\n const newSelectedDate = new Date(selectedAt);\n setSelectedDate(newSelectedDate);\n setSelectedHours(formatInputTime(newSelectedDate.getHours()));\n setSelectedMinutes(formatInputTime(newSelectedDate.getMinutes()));\n }\n }, [selectedAt]);\n\n const shouldDisableNextMonth = (isPastMode && currentYear >= now.getFullYear() && currentMonth >= now.getMonth())\n || (maxDate && currentYear >= maxDate.getFullYear() && currentMonth >= maxDate.getMonth());\n const shouldDisablePrevMonth = isFutureMode && currentYear <= now.getFullYear() && currentMonth <= now.getMonth();\n\n const { prevMonthGrid, currentMonthGrid, nextMonthGrid } = useMemo(() => (\n buildCalendarGrid(currentYear, currentMonth)\n ), [currentMonth, currentYear]);\n\n const submitLabel = useMemo(() => {\n return submitButtonLabel || formatSubmitLabel(lang, selectedDate);\n }, [lang, selectedDate, submitButtonLabel]);\n\n function handlePrevMonth() {\n setCurrentMonthAndYear((d) => {\n const dateCopy = new Date(d);\n dateCopy.setMonth(dateCopy.getMonth() - 1);\n\n return dateCopy;\n });\n }\n\n function handleNextMonth() {\n setCurrentMonthAndYear((d) => {\n const dateCopy = new Date(d);\n dateCopy.setMonth(dateCopy.getMonth() + 1);\n\n return dateCopy;\n });\n }\n\n function handleDateSelect(date: number) {\n setSelectedDate((d) => {\n const dateCopy = new Date(d);\n dateCopy.setDate(date);\n dateCopy.setMonth(currentMonth);\n dateCopy.setFullYear(currentYear);\n\n return dateCopy;\n });\n }\n\n const handleSubmit = useCallback(() => {\n onSubmit(selectedDate);\n }, [onSubmit, selectedDate]);\n\n const handleChangeHours = useCallback((e: React.ChangeEvent) => {\n const value = e.target.value.replace(/[^\\d]+/g, '');\n if (!value.length) {\n setSelectedHours('');\n e.target.value = '';\n return;\n }\n\n const hours = Math.max(0, Math.min(Number(value), 23));\n\n const date = new Date(selectedDate.getTime());\n date.setHours(hours);\n setSelectedDate(date);\n\n const hoursStr = formatInputTime(hours);\n setSelectedHours(hoursStr);\n e.target.value = hoursStr;\n }, [selectedDate]);\n\n const handleChangeMinutes = useCallback((e: React.ChangeEvent) => {\n const value = e.target.value.replace(/[^\\d]+/g, '');\n if (!value.length) {\n setSelectedMinutes('');\n e.target.value = '';\n return;\n }\n\n const minutes = Math.max(0, Math.min(Number(value), 59));\n\n const date = new Date(selectedDate.getTime());\n date.setMinutes(minutes);\n setSelectedDate(date);\n\n const minutesStr = formatInputTime(minutes);\n setSelectedMinutes(minutesStr);\n e.target.value = minutesStr;\n }, [selectedDate]);\n\n function renderTimePicker() {\n return (\n
\n \n :\n \n
\n );\n }\n\n return (\n \n
\n
\n \n \n \n\n

\n {lang(`lng_month${currentMonth + 1}`)}\n {' '}\n {currentYear}\n

\n\n \n \n \n\n \n \n \n
\n
\n\n
\n
\n {WEEKDAY_LETTERS.map((day) => (\n
\n {lang(day)}\n
\n ))}\n {prevMonthGrid.map((gridDate) => (\n
{gridDate}
\n ))}\n {currentMonthGrid.map((gridDate) => (\n handleDateSelect(gridDate)}\n className={buildClassName(\n 'day-button',\n isDisabledDay(\n currentYear, currentMonth, gridDate, minDate, maxDate,\n )\n ? 'disabled'\n : `${gridDate ? 'clickable' : ''}`,\n selectedDay === formatDay(currentYear, currentMonth, gridDate) && 'selected',\n )}\n >\n {Boolean(gridDate) && (\n {gridDate}\n )}\n
\n ))}\n {nextMonthGrid.map((gridDate) => (\n
{gridDate}
\n ))}\n
\n \n\n {withTimePicker && renderTimePicker()}\n\n
\n \n {secondButtonLabel && (\n \n )}\n
\n \n );\n};\n\nfunction buildCalendarGrid(year: number, month: number) {\n const prevMonthGrid: number[] = [];\n const currentMonthGrid: number[] = [];\n const nextMonthGrid: number[] = [];\n\n const date = new Date();\n date.setDate(1);\n date.setMonth(month);\n date.setFullYear(year);\n const firstDay = date.getDay();\n const totalDaysInPrevMonth = new Date(year, month, 0).getDate();\n\n for (let i = 1; i < firstDay; i++) {\n prevMonthGrid.push(totalDaysInPrevMonth - firstDay + i + 1);\n }\n\n while (date.getMonth() === month) {\n const gridDate = date.getDate();\n currentMonthGrid.push(gridDate);\n date.setDate(gridDate + 1);\n }\n\n const lastRowDaysCount = (currentMonthGrid.length + prevMonthGrid.length) % 7;\n if (lastRowDaysCount > 0) {\n for (let i = 1; i <= 7 - lastRowDaysCount; i++) {\n nextMonthGrid.push(i);\n }\n }\n\n return { prevMonthGrid, currentMonthGrid, nextMonthGrid };\n}\n\nfunction isDisabledDay(year: number, month: number, day: number, minDate?: Date, maxDate?: Date) {\n const selectedDay = new Date(year, month, day);\n const fixedMinDate = minDate && getDayStart(minDate);\n const fixedMaxDate = maxDate && getDayStart(maxDate);\n\n if (fixedMaxDate && selectedDay > fixedMaxDate) {\n return true;\n } else if (fixedMinDate && selectedDay < fixedMinDate) {\n return true;\n }\n\n return false;\n}\n\nfunction formatInputTime(value: string | number) {\n return String(value).padStart(2, '0');\n}\n\nfunction formatDay(year: number, month: number, day: number) {\n return `${year}-${month + 1}-${day}`;\n}\n\nfunction formatSubmitLabel(lang: LangFn, date: Date) {\n const day = formatDateToString(date, lang.code);\n const today = formatDateToString(new Date(), lang.code);\n\n if (day === today) {\n return lang('Conversation.ScheduleMessage.SendToday', formatTime(lang, date));\n }\n\n return lang('Conversation.ScheduleMessage.SendOn', [day, formatTime(lang, date)]);\n}\n\nexport default memo(CalendarModal);\n","import React, { FC, memo, useCallback } from '../../lib/teact/teact';\nimport { getActions, withGlobal } from '../../global';\n\nimport useLang from '../../hooks/useLang';\n\nimport CalendarModal from '../common/CalendarModal';\n\nexport type OwnProps = {\n isOpen: boolean;\n};\n\ntype StateProps = {\n selectedAt?: number;\n};\n\nconst HistoryCalendar: FC = ({\n isOpen, selectedAt,\n}) => {\n const { searchMessagesByDate, closeHistoryCalendar } = getActions();\n\n const handleJumpToDate = useCallback((date: Date) => {\n searchMessagesByDate({ timestamp: date.valueOf() / 1000 });\n closeHistoryCalendar();\n }, [closeHistoryCalendar, searchMessagesByDate]);\n\n const lang = useLang();\n\n return (\n \n );\n};\n\nexport default memo(withGlobal(\n (global): StateProps => {\n return { selectedAt: global.historyCalendarSelectedAt };\n },\n)(HistoryCalendar));\n","import React, {\n FC, memo, useCallback, useEffect, useRef, useState,\n} from '../../lib/teact/teact';\nimport { getActions, withGlobal } from '../../global';\n\nimport { ApiCountryCode, ApiUser, ApiUserStatus } from '../../api/types';\n\nimport { IS_TOUCH_ENV } from '../../util/environment';\nimport { getUserStatus } from '../../global/helpers';\nimport { selectUser, selectUserStatus } from '../../global/selectors';\nimport renderText from '../common/helpers/renderText';\nimport { formatPhoneNumberWithCode } from '../../util/phoneNumber';\nimport useLang from '../../hooks/useLang';\nimport useFlag from '../../hooks/useFlag';\nimport useCurrentOrPrev from '../../hooks/useCurrentOrPrev';\n\nimport Modal from '../ui/Modal';\nimport Avatar from '../common/Avatar';\nimport InputText from '../ui/InputText';\nimport Checkbox from '../ui/Checkbox';\nimport Button from '../ui/Button';\n\nimport './NewContactModal.scss';\n\nconst ANIMATION_DURATION = 200;\n\nexport type OwnProps = {\n isOpen: boolean;\n userId?: string;\n isByPhoneNumber?: boolean;\n};\n\ntype StateProps = {\n user?: ApiUser;\n userStatus?: ApiUserStatus;\n phoneCodeList: ApiCountryCode[];\n serverTimeOffset?: number;\n};\n\nconst NewContactModal: FC = ({\n isOpen,\n userId,\n isByPhoneNumber,\n user,\n userStatus,\n phoneCodeList,\n serverTimeOffset,\n}) => {\n const { updateContact, importContact, closeNewContactDialog } = getActions();\n\n const lang = useLang();\n const renderingUser = useCurrentOrPrev(user);\n const renderingIsByPhoneNumber = useCurrentOrPrev(isByPhoneNumber);\n // eslint-disable-next-line no-null/no-null\n const inputRef = useRef(null);\n\n const [isShown, markIsShown, unmarkIsShown] = useFlag();\n const [firstName, setFirstName] = useState(renderingUser?.firstName ?? '');\n const [lastName, setLastName] = useState(renderingUser?.lastName ?? '');\n const [phone, setPhone] = useState(renderingUser?.phoneNumber ?? '');\n const [shouldSharePhoneNumber, setShouldSharePhoneNumber] = useState(true);\n const canBeSubmitted = Boolean(firstName && (!isByPhoneNumber || phone));\n\n useEffect(() => {\n if (isOpen) {\n markIsShown();\n setFirstName(renderingUser?.firstName ?? '');\n setLastName(renderingUser?.lastName ?? '');\n setPhone(renderingUser?.phoneNumber ?? '');\n setShouldSharePhoneNumber(true);\n }\n }, [isOpen, markIsShown, renderingUser?.firstName, renderingUser?.lastName, renderingUser?.phoneNumber]);\n\n useEffect(() => {\n if (!IS_TOUCH_ENV && isShown) {\n setTimeout(() => { inputRef.current?.focus(); }, ANIMATION_DURATION);\n }\n }, [isShown]);\n\n const handleFirstNameChange = useCallback((e: React.ChangeEvent) => {\n setFirstName(e.target.value);\n }, []);\n\n const handlePhoneChange = useCallback((e: React.ChangeEvent) => {\n setPhone(formatPhoneNumberWithCode(phoneCodeList, e.target.value));\n }, [phoneCodeList]);\n\n const handleLastNameChange = useCallback((e: React.ChangeEvent) => {\n setLastName(e.target.value);\n }, []);\n\n const handleClose = useCallback(() => {\n closeNewContactDialog();\n setFirstName('');\n setLastName('');\n setPhone('');\n }, [closeNewContactDialog]);\n\n const handleSubmit = useCallback(() => {\n if (isByPhoneNumber || !userId) {\n importContact({\n firstName,\n lastName,\n phoneNumber: phone,\n });\n } else {\n updateContact({\n userId,\n firstName,\n lastName,\n shouldSharePhoneNumber,\n });\n }\n }, [firstName, importContact, isByPhoneNumber, lastName, phone, shouldSharePhoneNumber, updateContact, userId]);\n\n if (!isOpen && !isShown) {\n return undefined;\n }\n\n function renderAddContact() {\n return (\n <>\n
\n \n
\n

\n {renderingUser?.phoneNumber\n ? formatPhoneNumberWithCode(phoneCodeList, renderingUser.phoneNumber)\n : lang('MobileHidden')}\n

\n \n {getUserStatus(lang, renderingUser!, userStatus, serverTimeOffset!)}\n \n
\n
\n \n \n

\n {renderText(lang('NewContact.Phone.Hidden.Text', renderingUser?.firstName), ['emoji', 'simple_markdown'])}\n

\n \n

\n {renderText(lang('AddContact.SharedContactExceptionInfo', renderingUser?.firstName))}\n

\n \n );\n }\n\n function renderCreateContact() {\n return (\n
\n \n
\n \n \n \n
\n
\n );\n }\n\n return (\n \n {renderingUser && renderAddContact()}\n {renderingIsByPhoneNumber && renderCreateContact()}\n
\n \n {lang('Cancel')}\n \n \n {lang('Done')}\n \n
\n \n );\n};\n\nexport default memo(withGlobal(\n (global, { userId }): StateProps => {\n return {\n user: userId ? selectUser(global, userId) : undefined,\n userStatus: userId ? selectUserStatus(global, userId) : undefined,\n serverTimeOffset: global.serverTimeOffset,\n phoneCodeList: global.countryList.phoneCodes,\n };\n },\n)(NewContactModal));\n","import React, { FC, useCallback, memo } from '../../lib/teact/teact';\nimport { getActions, withGlobal } from '../../global';\n\nimport { ApiMessage } from '../../api/types';\nimport { IAlbum } from '../../types';\n\nimport {\n selectAllowedMessageActions,\n selectChat,\n selectCurrentMessageList,\n selectUser,\n} from '../../global/selectors';\nimport {\n isUserId,\n getUserFirstOrLastName,\n getPrivateChatUserId,\n isChatBasicGroup,\n isChatSuperGroup,\n} from '../../global/helpers';\nimport renderText from './helpers/renderText';\nimport useLang from '../../hooks/useLang';\n\nimport Modal from '../ui/Modal';\nimport Button from '../ui/Button';\n\nexport type OwnProps = {\n isOpen: boolean;\n isSchedule: boolean;\n message: ApiMessage;\n album?: IAlbum;\n onClose: () => void;\n};\n\ntype StateProps = {\n canDeleteForAll?: boolean;\n contactName?: string;\n willDeleteForCurrentUserOnly?: boolean;\n willDeleteForAll?: boolean;\n};\n\nconst DeleteMessageModal: FC = ({\n isOpen,\n isSchedule,\n message,\n album,\n canDeleteForAll,\n contactName,\n willDeleteForCurrentUserOnly,\n willDeleteForAll,\n onClose,\n}) => {\n const {\n deleteMessages,\n deleteScheduledMessages,\n } = getActions();\n\n const handleDeleteMessageForAll = useCallback(() => {\n const messageIds = album?.messages\n ? album.messages.map(({ id }) => id)\n : [message.id];\n deleteMessages({ messageIds, shouldDeleteForAll: true });\n onClose();\n }, [deleteMessages, message.id, onClose, album]);\n\n const handleDeleteMessageForSelf = useCallback(() => {\n const messageIds = album?.messages\n ? album.messages.map(({ id }) => id)\n : [message.id];\n if (isSchedule) {\n deleteScheduledMessages({ messageIds });\n } else {\n deleteMessages({\n messageIds,\n shouldDeleteForAll: false,\n });\n }\n onClose();\n }, [album, message.id, isSchedule, onClose, deleteScheduledMessages, deleteMessages]);\n\n const lang = useLang();\n\n return (\n \n

{lang('AreYouSureDeleteSingleMessage')}

\n {willDeleteForCurrentUserOnly && (\n

{lang('lng_delete_for_me_chat_hint', 1, 'i')}

\n )}\n {willDeleteForAll && (\n

{lang('lng_delete_for_everyone_hint', 1, 'i')}

\n )}\n {canDeleteForAll && (\n \n )}\n \n \n \n );\n};\n\nexport default memo(withGlobal(\n (global, { message, isSchedule }): StateProps => {\n const { threadId } = selectCurrentMessageList(global) || {};\n const { canDeleteForAll } = (threadId && selectAllowedMessageActions(global, message, threadId)) || {};\n const chat = selectChat(global, message.chatId);\n const contactName = chat && isUserId(chat.id)\n ? getUserFirstOrLastName(selectUser(global, getPrivateChatUserId(chat)!))\n : undefined;\n\n const willDeleteForCurrentUserOnly = chat && isChatBasicGroup(chat) && !canDeleteForAll;\n const willDeleteForAll = chat && isChatSuperGroup(chat);\n\n return {\n canDeleteForAll: !isSchedule && canDeleteForAll,\n contactName,\n willDeleteForCurrentUserOnly,\n willDeleteForAll,\n };\n },\n)(DeleteMessageModal));\n","import React, { FC, useCallback, memo } from '../../lib/teact/teact';\nimport { getActions, withGlobal } from '../../global';\n\nimport { selectChat, selectIsChatWithSelf, selectUser } from '../../global/selectors';\nimport {\n isUserId,\n getUserFirstOrLastName,\n getPrivateChatUserId,\n isChatBasicGroup,\n isChatSuperGroup,\n isChatChannel,\n} from '../../global/helpers';\nimport useLang from '../../hooks/useLang';\nimport renderText from './helpers/renderText';\n\nimport Modal from '../ui/Modal';\nimport Button from '../ui/Button';\n\nexport type OwnProps = {\n isOpen: boolean;\n chatId: string;\n messageId: number;\n onClose: () => void;\n};\n\ntype StateProps = {\n isChannel: boolean;\n isPrivateChat: boolean;\n isChatWithSelf: boolean;\n isGroup: boolean;\n isSuperGroup: boolean;\n canPinForAll: boolean;\n contactName?: string;\n};\n\nconst PinMessageModal: FC = ({\n isOpen,\n messageId,\n chatId,\n isChannel,\n isGroup,\n isSuperGroup,\n canPinForAll,\n contactName,\n onClose,\n}) => {\n const { pinMessage } = getActions();\n\n const handlePinMessageForAll = useCallback(() => {\n pinMessage({\n chatId, messageId, isUnpin: false,\n });\n onClose();\n }, [pinMessage, chatId, messageId, onClose]);\n\n const handlePinMessage = useCallback(() => {\n pinMessage({\n chatId, messageId, isUnpin: false, isOneSide: true, isSilent: true,\n });\n onClose();\n }, [chatId, messageId, onClose, pinMessage]);\n\n const lang = useLang();\n\n function renderMessage() {\n if (isChannel) {\n return lang('PinMessageAlertChannel');\n }\n\n if (isGroup || isSuperGroup) {\n return lang('PinMessageAlert');\n }\n\n return lang('PinMessageAlertChat');\n }\n\n return (\n \n

{renderMessage()}

\n \n {canPinForAll && (\n \n )}\n \n \n );\n};\n\nexport default memo(withGlobal(\n (global, { chatId }): StateProps => {\n const isPrivateChat = isUserId(chatId);\n const isChatWithSelf = selectIsChatWithSelf(global, chatId);\n const chat = selectChat(global, chatId);\n const isChannel = Boolean(chat) && isChatChannel(chat);\n const isGroup = Boolean(chat) && isChatBasicGroup(chat);\n const isSuperGroup = Boolean(chat) && isChatSuperGroup(chat);\n const canPinForAll = (isPrivateChat && !isChatWithSelf) || isSuperGroup || isGroup;\n const contactName = chat && isUserId(chat.id)\n ? getUserFirstOrLastName(selectUser(global, getPrivateChatUserId(chat)!))\n : undefined;\n\n return {\n isPrivateChat,\n isChatWithSelf,\n isChannel,\n isGroup,\n isSuperGroup,\n canPinForAll,\n contactName,\n };\n },\n)(PinMessageModal));\n","import React, { FC, memo } from '../../lib/teact/teact';\n\nimport useLang from '../../hooks/useLang';\n\nimport Modal from '../ui/Modal';\nimport Button from '../ui/Button';\n\nexport type OwnProps = {\n isOpen: boolean;\n chatId?: string;\n pinnedMessagesCount?: number;\n onClose: () => void;\n onUnpin: () => void;\n};\n\nconst UnpinAllMessagesModal: FC = ({\n isOpen,\n pinnedMessagesCount = 0,\n onClose,\n onUnpin,\n}) => {\n const lang = useLang();\n\n return (\n \n

{lang('Chat.UnpinAllMessagesConfirmation', pinnedMessagesCount, 'i')}

\n \n \n \n );\n};\n\nexport default memo(UnpinAllMessagesModal);\n","import { useEffect } from '../../../lib/teact/teact';\nimport { IS_MAC_OS } from '../../../util/environment';\nimport getKeyFromEvent from '../../../util/getKeyFromEvent';\n\nconst useCopySelectedMessages = (isActive: boolean, copySelectedMessages: NoneToVoidFunction) => {\n useEffect(() => {\n function handleCopy(e: KeyboardEvent) {\n if (((IS_MAC_OS && e.metaKey) || (!IS_MAC_OS && e.ctrlKey)) && getKeyFromEvent(e) === 'c') {\n e.preventDefault();\n copySelectedMessages();\n }\n }\n\n if (isActive) {\n document.addEventListener('keydown', handleCopy, false);\n }\n\n return () => {\n document.removeEventListener('keydown', handleCopy, false);\n };\n }, [copySelectedMessages, isActive]);\n};\n\nexport default useCopySelectedMessages;\n","import React, {\n FC, useCallback, memo, useEffect,\n} from '../../lib/teact/teact';\nimport { getActions, withGlobal } from '../../global';\n\nimport { selectCanDeleteSelectedMessages, selectCurrentChat, selectUser } from '../../global/selectors';\nimport {\n isUserId,\n getUserFirstOrLastName,\n getPrivateChatUserId,\n isChatBasicGroup,\n isChatSuperGroup,\n} from '../../global/helpers';\nimport renderText from '../common/helpers/renderText';\nimport useLang from '../../hooks/useLang';\nimport usePrevious from '../../hooks/usePrevious';\n\nimport Modal from '../ui/Modal';\nimport Button from '../ui/Button';\n\nexport type OwnProps = {\n isOpen: boolean;\n isSchedule: boolean;\n onClose: () => void;\n};\n\ntype StateProps = {\n selectedMessageIds?: number[];\n canDeleteForAll?: boolean;\n contactName?: string;\n willDeleteForCurrentUserOnly?: boolean;\n willDeleteForAll?: boolean;\n};\n\nconst DeleteSelectedMessageModal: FC = ({\n isOpen,\n isSchedule,\n selectedMessageIds,\n canDeleteForAll,\n contactName,\n willDeleteForCurrentUserOnly,\n willDeleteForAll,\n onClose,\n}) => {\n const {\n deleteMessages,\n deleteScheduledMessages,\n exitMessageSelectMode,\n } = getActions();\n\n const prevIsOpen = usePrevious(isOpen);\n\n const handleDeleteMessageForAll = useCallback(() => {\n onClose();\n deleteMessages({ messageIds: selectedMessageIds, shouldDeleteForAll: true });\n }, [deleteMessages, selectedMessageIds, onClose]);\n\n const handleDeleteMessageForSelf = useCallback(() => {\n if (isSchedule) {\n deleteScheduledMessages({ messageIds: selectedMessageIds });\n } else {\n deleteMessages({ messageIds: selectedMessageIds, shouldDeleteForAll: false });\n }\n\n onClose();\n }, [isSchedule, onClose, deleteScheduledMessages, selectedMessageIds, deleteMessages]);\n\n const lang = useLang();\n\n // Returning `undefined` from FC instead of `` doesn't trigger useHistoryBack\n useEffect(() => {\n if (!isOpen && prevIsOpen) {\n exitMessageSelectMode();\n }\n }, [exitMessageSelectMode, isOpen, prevIsOpen]);\n\n if (!selectedMessageIds) {\n return undefined;\n }\n\n return (\n \n

{lang('AreYouSureDeleteFewMessages')}

\n {willDeleteForCurrentUserOnly && (\n

This will delete them just for you, not for other participants in the chat.

\n )}\n {willDeleteForAll && (\n

This will delete them for everyone in this chat.

\n )}\n {canDeleteForAll && (\n \n )}\n \n \n
\n );\n};\n\nexport default memo(withGlobal(\n (global, { isSchedule }): StateProps => {\n const { messageIds: selectedMessageIds } = global.selectedMessages || {};\n const { canDeleteForAll } = selectCanDeleteSelectedMessages(global);\n const chat = selectCurrentChat(global);\n const contactName = chat && isUserId(chat.id)\n ? getUserFirstOrLastName(selectUser(global, getPrivateChatUserId(chat)!))\n : undefined;\n\n const willDeleteForCurrentUserOnly = chat && isChatBasicGroup(chat) && !canDeleteForAll;\n const willDeleteForAll = chat && isChatSuperGroup(chat);\n\n return {\n selectedMessageIds,\n canDeleteForAll: !isSchedule && canDeleteForAll,\n contactName,\n willDeleteForCurrentUserOnly,\n willDeleteForAll,\n };\n },\n)(DeleteSelectedMessageModal));\n","import { ChangeEvent } from 'react';\n\nimport React, {\n FC, memo, useCallback, useState,\n} from '../../lib/teact/teact';\nimport { getActions } from '../../global';\n\nimport { ApiReportReason } from '../../api/types';\n\nimport useLang from '../../hooks/useLang';\n\nimport Modal from '../ui/Modal';\nimport Button from '../ui/Button';\nimport RadioGroup from '../ui/RadioGroup';\nimport InputText from '../ui/InputText';\n\nexport type OwnProps = {\n isOpen: boolean;\n messageIds?: number[];\n onClose: () => void;\n};\n\nconst ReportMessageModal: FC = ({\n isOpen,\n messageIds,\n onClose,\n}) => {\n const {\n reportMessages,\n exitMessageSelectMode,\n } = getActions();\n\n const [selectedReason, setSelectedReason] = useState('spam');\n const [description, setDescription] = useState('');\n\n const handleReport = useCallback(() => {\n reportMessages({ messageIds, reason: selectedReason, description });\n exitMessageSelectMode();\n onClose();\n }, [description, exitMessageSelectMode, messageIds, onClose, reportMessages, selectedReason]);\n\n const handleSelectReason = useCallback((value: string) => {\n setSelectedReason(value as ApiReportReason);\n }, []);\n\n const handleDescriptionChange = useCallback((e: ChangeEvent) => {\n setDescription(e.target.value);\n }, []);\n\n const lang = useLang();\n\n const REPORT_OPTIONS: { value: ApiReportReason; label: string }[] = [\n { value: 'spam', label: lang('lng_report_reason_spam') },\n { value: 'violence', label: lang('lng_report_reason_violence') },\n { value: 'pornography', label: lang('lng_report_reason_pornography') },\n { value: 'childAbuse', label: lang('lng_report_reason_child_abuse') },\n { value: 'copyright', label: lang('ReportPeer.ReasonCopyright') },\n { value: 'illegalDrugs', label: 'Illegal Drugs' },\n { value: 'personalDetails', label: 'Personal Details' },\n { value: 'other', label: lang('lng_report_reason_other') },\n ];\n\n if (!messageIds) {\n return undefined;\n }\n\n return (\n \n \n \n \n \n \n );\n};\n\nexport default memo(ReportMessageModal);\n","import React, {\n FC, memo, useCallback, useEffect,\n} from '../../lib/teact/teact';\nimport { getActions, withGlobal } from '../../global';\n\nimport { MessageListType } from '../../global/types';\n\nimport {\n selectCanDeleteSelectedMessages,\n selectCanDownloadSelectedMessages,\n selectCanReportSelectedMessages,\n selectCurrentMessageList,\n selectHasProtectedMessage,\n selectSelectedMessagesCount,\n} from '../../global/selectors';\nimport useFlag from '../../hooks/useFlag';\nimport captureKeyboardListeners from '../../util/captureKeyboardListeners';\nimport buildClassName from '../../util/buildClassName';\nimport usePrevious from '../../hooks/usePrevious';\nimport useLang from '../../hooks/useLang';\nimport useCopySelectedMessages from './hooks/useCopySelectedMessages';\n\nimport Button from '../ui/Button';\n\nimport DeleteSelectedMessageModal from './DeleteSelectedMessageModal';\nimport ReportMessageModal from '../common/ReportMessageModal';\n\nimport './MessageSelectToolbar.scss';\n\nexport type OwnProps = {\n isActive?: boolean;\n canPost?: boolean;\n messageListType?: MessageListType;\n};\n\ntype StateProps = {\n isSchedule: boolean;\n selectedMessagesCount?: number;\n canDeleteMessages?: boolean;\n canReportMessages?: boolean;\n canDownloadMessages?: boolean;\n hasProtectedMessage?: boolean;\n selectedMessageIds?: number[];\n};\n\nconst MessageSelectToolbar: FC = ({\n canPost,\n isActive,\n messageListType,\n isSchedule,\n selectedMessagesCount,\n canDeleteMessages,\n canReportMessages,\n canDownloadMessages,\n hasProtectedMessage,\n selectedMessageIds,\n}) => {\n const {\n exitMessageSelectMode,\n openForwardMenuForSelectedMessages,\n downloadSelectedMessages,\n copySelectedMessages,\n } = getActions();\n\n const [isDeleteModalOpen, openDeleteModal, closeDeleteModal] = useFlag();\n const [isReportModalOpen, openReportModal, closeReportModal] = useFlag();\n\n useCopySelectedMessages(Boolean(isActive), copySelectedMessages);\n useEffect(() => {\n return isActive && !isDeleteModalOpen && !isReportModalOpen\n ? captureKeyboardListeners({\n onBackspace: openDeleteModal,\n onDelete: openDeleteModal,\n onEsc: exitMessageSelectMode,\n })\n : undefined;\n }, [isActive, isDeleteModalOpen, isReportModalOpen, openDeleteModal, exitMessageSelectMode]);\n\n const handleCopy = useCallback(() => {\n copySelectedMessages();\n exitMessageSelectMode();\n }, [copySelectedMessages, exitMessageSelectMode]);\n\n const handleDownload = useCallback(() => {\n downloadSelectedMessages();\n exitMessageSelectMode();\n }, [downloadSelectedMessages, exitMessageSelectMode]);\n\n const prevSelectedMessagesCount = usePrevious(selectedMessagesCount || undefined, true);\n const renderingSelectedMessagesCount = isActive ? selectedMessagesCount : prevSelectedMessagesCount;\n\n const lang = useLang();\n\n const formattedMessagesCount = lang('VoiceOver.Chat.MessagesSelected', renderingSelectedMessagesCount, 'i');\n\n const className = buildClassName(\n 'MessageSelectToolbar',\n canPost && 'with-composer',\n isActive && 'shown',\n );\n\n const renderButton = (\n icon: string, label: string, onClick: AnyToVoidFunction, disabled?: boolean, destructive?: boolean,\n ) => {\n return (\n \n \n \n );\n };\n\n return (\n
\n
\n \n \n \n \n {formattedMessagesCount}\n \n\n {Boolean(selectedMessagesCount) && (\n
\n {messageListType !== 'scheduled' && (\n renderButton(\n 'forward', lang('Chat.ForwardActionHeader'), openForwardMenuForSelectedMessages, hasProtectedMessage,\n )\n )}\n {canReportMessages && (\n renderButton('flag', lang('Conversation.ReportMessages'), openReportModal)\n )}\n {canDownloadMessages && (\n renderButton('download', lang('lng_media_download'), handleDownload, hasProtectedMessage)\n )}\n {renderButton('copy', lang('lng_context_copy_selected_items'), handleCopy, hasProtectedMessage)}\n {renderButton('delete', lang('EditAdminGroupDeleteMessages'), openDeleteModal, !canDeleteMessages, true)}\n
\n )}\n
\n \n \n
\n );\n};\n\nexport default memo(withGlobal(\n (global): StateProps => {\n const { type: messageListType, chatId } = selectCurrentMessageList(global) || {};\n const { canDelete } = selectCanDeleteSelectedMessages(global);\n const canReport = selectCanReportSelectedMessages(global);\n const canDownload = selectCanDownloadSelectedMessages(global);\n const { messageIds: selectedMessageIds } = global.selectedMessages || {};\n const hasProtectedMessage = chatId ? selectHasProtectedMessage(global, chatId, selectedMessageIds) : false;\n\n return {\n isSchedule: messageListType === 'scheduled',\n selectedMessagesCount: selectSelectedMessagesCount(global),\n canDeleteMessages: canDelete,\n canReportMessages: canReport,\n canDownloadMessages: canDownload,\n selectedMessageIds,\n hasProtectedMessage,\n };\n },\n)(MessageSelectToolbar));\n","import React, { FC, useCallback, memo } from '../../lib/teact/teact';\nimport { getActions, withGlobal } from '../../global';\n\nimport useLang from '../../hooks/useLang';\nimport { selectChatMessage } from '../../global/selectors';\nimport useCurrentOrPrev from '../../hooks/useCurrentOrPrev';\n\nimport Modal from '../ui/Modal';\nimport Button from '../ui/Button';\nimport PrivateChatInfo from './PrivateChatInfo';\nimport ListItem from '../ui/ListItem';\n\nexport type OwnProps = {\n isOpen: boolean;\n};\n\nexport type StateProps = {\n memberIds?: string[];\n};\n\nconst CLOSE_ANIMATION_DURATION = 100;\n\nconst SeenByModal: FC = ({\n isOpen,\n memberIds,\n}) => {\n const {\n openChat,\n closeSeenByModal,\n } = getActions();\n\n const lang = useLang();\n\n const handleClick = useCallback((userId: string) => {\n closeSeenByModal();\n\n setTimeout(() => {\n openChat({ id: userId });\n }, CLOSE_ANIMATION_DURATION);\n }, [closeSeenByModal, openChat]);\n\n const renderingMemberIds = useCurrentOrPrev(memberIds, true);\n\n return (\n \n
\n {renderingMemberIds && renderingMemberIds.map((userId) => (\n handleClick(userId)}\n >\n \n \n ))}\n
\n \n {lang('Close')}\n \n \n );\n};\n\nexport default memo(withGlobal(\n (global): StateProps => {\n const { chatId, messageId } = global.seenByModal || {};\n if (!chatId || !messageId) {\n return {};\n }\n\n return {\n memberIds: selectChatMessage(global, chatId, messageId)?.seenByUserIds,\n };\n },\n)(SeenByModal));\n","import React, {\n FC, useCallback, memo, useMemo, useEffect, useState, useRef,\n} from '../../lib/teact/teact';\nimport { getActions, getGlobal, withGlobal } from '../../global';\n\nimport { ApiMessage } from '../../api/types';\nimport { LoadMoreDirection } from '../../types';\n\nimport useLang from '../../hooks/useLang';\nimport { selectChatMessage } from '../../global/selectors';\nimport useInfiniteScroll from '../../hooks/useInfiniteScroll';\nimport { getUserFullName } from '../../global/helpers';\nimport renderText from '../common/helpers/renderText';\nimport useFlag from '../../hooks/useFlag';\nimport buildClassName from '../../util/buildClassName';\nimport { formatIntegerCompact } from '../../util/textFormat';\nimport { unique } from '../../util/iteratees';\n\nimport InfiniteScroll from '../ui/InfiniteScroll';\nimport Modal from '../ui/Modal';\nimport Button from '../ui/Button';\nimport Avatar from '../common/Avatar';\nimport ListItem from '../ui/ListItem';\nimport ReactionStaticEmoji from '../common/ReactionStaticEmoji';\nimport Loading from '../ui/Loading';\n\nimport './ReactorListModal.scss';\n\nconst MIN_REACTIONS_COUNT_FOR_FILTERS = 10;\n\nexport type OwnProps = {\n isOpen: boolean;\n};\n\nexport type StateProps = Pick & {\n chatId?: string;\n messageId?: number;\n};\n\nconst ReactorListModal: FC = ({\n isOpen,\n reactors,\n reactions,\n chatId,\n messageId,\n seenByUserIds,\n}) => {\n const {\n loadReactors,\n closeReactorListModal,\n openChat,\n } = getActions();\n\n // No need for expensive global updates on users, so we avoid them\n const usersById = getGlobal().users.byId;\n\n const lang = useLang();\n const [isClosing, startClosing, stopClosing] = useFlag(false);\n const [chosenTab, setChosenTab] = useState(undefined);\n const canShowFilters = reactors && reactions && reactors.count >= MIN_REACTIONS_COUNT_FOR_FILTERS\n && reactions.results.length > 1;\n const chatIdRef = useRef();\n\n useEffect(() => {\n if (isClosing && !isOpen) {\n stopClosing();\n setChosenTab(undefined);\n }\n }, [isClosing, isOpen, stopClosing]);\n\n const handleCloseAnimationEnd = useCallback(() => {\n if (chatIdRef.current) {\n openChat({ id: chatIdRef.current });\n }\n closeReactorListModal();\n }, [closeReactorListModal, openChat]);\n\n const handleClose = useCallback(() => {\n startClosing();\n }, [startClosing]);\n\n const handleClick = useCallback((userId: string) => {\n chatIdRef.current = userId;\n handleClose();\n }, [handleClose]);\n\n const handleLoadMore = useCallback(() => {\n loadReactors({\n chatId,\n messageId,\n });\n }, [chatId, loadReactors, messageId]);\n\n const allReactions = useMemo(() => {\n return reactors?.reactions ? unique(reactors.reactions.map((l) => l.reaction)) : [];\n }, [reactors?.reactions]);\n\n const userIds = useMemo(() => {\n if (chosenTab) {\n return reactors?.reactions.filter((l) => l.reaction === chosenTab).map((l) => l.userId);\n }\n return unique(reactors?.reactions.map((l) => l.userId).concat(seenByUserIds || []) || []);\n }, [chosenTab, reactors?.reactions, seenByUserIds]);\n\n const [viewportIds, getMore] = useInfiniteScroll(\n handleLoadMore, userIds, reactors && reactors.nextOffset === undefined,\n );\n\n useEffect(() => {\n getMore?.({ direction: LoadMoreDirection.Backwards });\n }, [getMore]);\n\n return (\n \n {canShowFilters && (\n
\n setChosenTab(undefined)}\n >\n \n {reactors?.count && formatIntegerCompact(reactors.count)}\n \n {allReactions.map((reaction) => {\n const count = reactions?.results.find((l) => l.reaction === reaction)?.count;\n return (\n setChosenTab(reaction)}\n >\n \n {count && formatIntegerCompact(count)}\n \n );\n })}\n
\n )}\n\n
\n {viewportIds?.length ? (\n \n {viewportIds?.map(\n (userId) => {\n const user = usersById[userId];\n const fullName = getUserFullName(user);\n const reaction = reactors?.reactions.find((l) => l.userId === userId)?.reaction;\n return (\n handleClick(userId)}\n >\n \n
\n

{fullName && renderText(fullName)}

\n
\n {reaction && }\n \n );\n },\n )}\n \n ) : }\n
\n \n {lang('Close')}\n \n \n );\n};\n\nexport default memo(withGlobal(\n (global): StateProps => {\n const { chatId, messageId } = global.reactorModal || {};\n const message = chatId && messageId ? selectChatMessage(global, chatId, messageId) : undefined;\n\n return {\n chatId,\n messageId,\n reactions: message?.reactions,\n reactors: message?.reactors,\n seenByUserIds: message?.seenByUserIds,\n };\n },\n)(ReactorListModal));\n","import React, {\n FC, memo, useCallback, useEffect, useLayoutEffect, useRef, useState,\n} from '../../lib/teact/teact';\nimport { getActions, withGlobal } from '../../global';\n\nimport { ActiveEmojiInteraction } from '../../global/types';\nimport { ApiMediaFormat } from '../../api/types';\n\nimport { IS_ANDROID } from '../../util/environment';\nimport useFlag from '../../hooks/useFlag';\nimport useMedia from '../../hooks/useMedia';\nimport buildClassName from '../../util/buildClassName';\nimport {\n selectAnimatedEmojiEffect,\n} from '../../global/selectors';\nimport getAnimationData, { ANIMATED_STICKERS_PATHS } from '../common/helpers/animatedAssets';\nimport { dispatchHeavyAnimationEvent } from '../../hooks/useHeavyAnimationCheck';\n\nimport AnimatedSticker from '../common/AnimatedSticker';\n\nimport './EmojiInteractionAnimation.scss';\n\nexport type OwnProps = {\n activeEmojiInteraction: ActiveEmojiInteraction;\n};\n\ntype StateProps = {\n effectAnimationId?: string;\n localEffectAnimation?: string;\n};\n\nconst HIDE_ANIMATION_DURATION = 250;\nconst PLAYING_DURATION = 3000;\nconst EFFECT_SIZE = 240;\n\nconst EmojiInteractionAnimation: FC = ({\n effectAnimationId,\n localEffectAnimation,\n activeEmojiInteraction,\n}) => {\n const { stopActiveEmojiInteraction } = getActions();\n\n const [isHiding, startHiding] = useFlag(false);\n const [isPlaying, startPlaying] = useFlag(false);\n const timeoutRef = useRef();\n\n const stop = useCallback(() => {\n startHiding();\n if (timeoutRef.current) {\n clearTimeout(timeoutRef.current);\n }\n setTimeout(() => {\n stopActiveEmojiInteraction({ id: activeEmojiInteraction.id });\n }, HIDE_ANIMATION_DURATION);\n }, [activeEmojiInteraction.id, startHiding, stopActiveEmojiInteraction]);\n\n const handleCancelAnimation = useCallback((e: UIEvent) => {\n if (!(e.target as HTMLElement)?.closest('.AnimatedEmoji')) {\n stop();\n }\n }, [stop]);\n\n useEffect(() => {\n document.addEventListener('touchstart', handleCancelAnimation);\n document.addEventListener('touchmove', handleCancelAnimation);\n document.addEventListener('mousedown', handleCancelAnimation);\n document.addEventListener('wheel', handleCancelAnimation);\n\n return () => {\n document.removeEventListener('touchstart', handleCancelAnimation);\n document.removeEventListener('touchmove', handleCancelAnimation);\n document.removeEventListener('mousedown', handleCancelAnimation);\n document.removeEventListener('wheel', handleCancelAnimation);\n };\n }, [handleCancelAnimation]);\n\n useLayoutEffect(() => {\n const dispatchHeavyAnimationStop = dispatchHeavyAnimationEvent();\n\n timeoutRef.current = setTimeout(() => {\n stop();\n dispatchHeavyAnimationStop();\n }, PLAYING_DURATION);\n }, [stop]);\n\n const effectAnimationData = useMedia(`sticker${effectAnimationId}`, !effectAnimationId, ApiMediaFormat.Lottie);\n\n const [localEffectAnimationData, setLocalEffectAnimationData] = useState();\n useEffect(() => {\n if (localEffectAnimation) {\n getAnimationData(localEffectAnimation as keyof typeof ANIMATED_STICKERS_PATHS).then((data) => {\n setLocalEffectAnimationData(data);\n });\n }\n }, [localEffectAnimation]);\n\n if (!activeEmojiInteraction.startSize) {\n return undefined;\n }\n\n const scale = (activeEmojiInteraction.startSize || 0) / EFFECT_SIZE;\n\n return (\n \n \n \n );\n};\n\nexport default memo(withGlobal(\n (global, { activeEmojiInteraction }): StateProps => {\n const animatedEffect = activeEmojiInteraction.animatedEffect !== undefined\n && selectAnimatedEmojiEffect(global, activeEmojiInteraction.animatedEffect);\n return {\n effectAnimationId: animatedEffect ? animatedEffect.id : undefined,\n localEffectAnimation: !animatedEffect && activeEmojiInteraction.animatedEffect\n && Object.keys(ANIMATED_STICKERS_PATHS).includes(activeEmojiInteraction.animatedEffect)\n ? activeEmojiInteraction.animatedEffect : undefined,\n };\n },\n)(EmojiInteractionAnimation));\n","import { useCallback, useEffect, useRef } from '../lib/teact/teact';\n\nconst useSendWithEnter = (\n onSelect: NoneToVoidFunction,\n) => {\n // eslint-disable-next-line no-null/no-null\n const buttonRef = useRef(null);\n\n const handleKeyDown = useCallback((e: KeyboardEvent) => {\n if (e.key !== 'Enter') return;\n const isFocused = buttonRef.current === document.activeElement;\n\n if (isFocused) {\n onSelect();\n }\n }, [onSelect]);\n\n useEffect(() => {\n window.addEventListener('keydown', handleKeyDown, false);\n\n return () => window.removeEventListener('keydown', handleKeyDown, false);\n }, [handleKeyDown]);\n\n return buttonRef;\n};\n\nexport default useSendWithEnter;\n","import React, {\n FC, memo, useCallback,\n} from '../../../lib/teact/teact';\nimport { withGlobal } from '../../../global';\n\nimport { ApiChat, ApiUser } from '../../../api/types';\n\nimport useChatContextActions from '../../../hooks/useChatContextActions';\nimport useFlag from '../../../hooks/useFlag';\nimport { isUserId, getPrivateChatUserId, selectIsChatMuted } from '../../../global/helpers';\nimport {\n selectChat, selectUser, selectIsChatPinned, selectNotifySettings, selectNotifyExceptions,\n} from '../../../global/selectors';\nimport useSelectWithEnter from '../../../hooks/useSelectWithEnter';\n\nimport PrivateChatInfo from '../../common/PrivateChatInfo';\nimport GroupChatInfo from '../../common/GroupChatInfo';\nimport DeleteChatModal from '../../common/DeleteChatModal';\nimport ListItem from '../../ui/ListItem';\nimport ChatFolderModal from '../ChatFolderModal.async';\n\ntype OwnProps = {\n chatId: string;\n withUsername?: boolean;\n onClick: (id: string) => void;\n};\n\ntype StateProps = {\n chat?: ApiChat;\n user?: ApiUser;\n isPinned?: boolean;\n isMuted?: boolean;\n canChangeFolder?: boolean;\n};\n\nconst LeftSearchResultChat: FC = ({\n chatId,\n withUsername,\n onClick,\n chat,\n user,\n isPinned,\n isMuted,\n canChangeFolder,\n}) => {\n const [isDeleteModalOpen, openDeleteModal, closeDeleteModal] = useFlag();\n const [isChatFolderModalOpen, openChatFolderModal, closeChatFolderModal] = useFlag();\n\n const contextActions = useChatContextActions({\n chat,\n user,\n isPinned,\n isMuted,\n canChangeFolder,\n handleDelete: openDeleteModal,\n handleChatFolderChange: openChatFolderModal,\n }, true);\n\n const handleClick = useCallback(() => {\n onClick(chatId);\n }, [chatId, onClick]);\n\n const buttonRef = useSelectWithEnter(handleClick);\n\n if (!chat) {\n return undefined;\n }\n\n return (\n \n {isUserId(chatId) ? (\n \n ) : (\n \n )}\n \n \n \n );\n};\n\nexport default memo(withGlobal(\n (global, { chatId }): StateProps => {\n const chat = selectChat(global, chatId);\n const privateChatUserId = chat && getPrivateChatUserId(chat);\n const user = privateChatUserId ? selectUser(global, privateChatUserId) : undefined;\n const isPinned = selectIsChatPinned(global, chatId);\n const isMuted = chat\n ? selectIsChatMuted(chat, selectNotifySettings(global), selectNotifyExceptions(global))\n : undefined;\n\n return {\n chat,\n user,\n isPinned,\n isMuted,\n canChangeFolder: Boolean(global.chatFolders.orderedIds?.length),\n };\n },\n)(LeftSearchResultChat));\n","import React, {\n FC, useEffect, useCallback, useRef, memo,\n} from '../../../lib/teact/teact';\nimport { getActions, withGlobal } from '../../../global';\n\nimport { ApiUser } from '../../../api/types';\n\nimport { getUserFirstOrLastName } from '../../../global/helpers';\nimport renderText from '../../common/helpers/renderText';\nimport { throttle } from '../../../util/schedulers';\nimport useHorizontalScroll from '../../../hooks/useHorizontalScroll';\nimport useLang from '../../../hooks/useLang';\n\nimport Avatar from '../../common/Avatar';\nimport Button from '../../ui/Button';\nimport LeftSearchResultChat from './LeftSearchResultChat';\n\nimport './RecentContacts.scss';\n\ntype OwnProps = {\n onReset: () => void;\n};\n\ntype StateProps = {\n topUserIds?: string[];\n usersById: Record;\n recentlyFoundChatIds?: string[];\n};\n\nconst SEARCH_CLOSE_TIMEOUT_MS = 250;\nconst NBSP = '\\u00A0';\n\nconst runThrottled = throttle((cb) => cb(), 60000, true);\n\nconst RecentContacts: FC = ({\n topUserIds, usersById, recentlyFoundChatIds,\n onReset,\n}) => {\n const {\n loadTopUsers, loadContactList, openChat,\n addRecentlyFoundChatId, clearRecentlyFoundChats,\n } = getActions();\n\n // eslint-disable-next-line no-null/no-null\n const topUsersRef = useRef(null);\n\n // Due to the parent Transition, this component never gets unmounted,\n // that's why we use throttled API call on every update.\n useEffect(() => {\n runThrottled(() => {\n loadTopUsers();\n // Loading full contact list for quick local search before user enters the query\n loadContactList();\n });\n }, [loadTopUsers, loadContactList]);\n\n useHorizontalScroll(topUsersRef.current, !topUserIds);\n\n const handleClick = useCallback((id: string) => {\n openChat({ id, shouldReplaceHistory: true });\n onReset();\n setTimeout(() => {\n addRecentlyFoundChatId({ id });\n }, SEARCH_CLOSE_TIMEOUT_MS);\n }, [openChat, addRecentlyFoundChatId, onReset]);\n\n const lang = useLang();\n\n return (\n
\n {topUserIds && (\n
\n
\n {topUserIds.map((userId) => (\n
handleClick(userId)} dir={lang.isRtl ? 'rtl' : undefined}>\n \n
{renderText(getUserFirstOrLastName(usersById[userId]) || NBSP)}
\n
\n ))}\n
\n
\n )}\n {recentlyFoundChatIds && (\n
\n

\n {lang('Recent')}\n\n \n \n \n

\n {recentlyFoundChatIds.map((id) => (\n \n ))}\n
\n )}\n
\n );\n};\n\nexport default memo(withGlobal(\n (global): StateProps => {\n const { userIds: topUserIds } = global.topPeers;\n const usersById = global.users.byId;\n const { recentlyFoundChatIds } = global.globalSearch;\n\n return {\n topUserIds,\n usersById,\n recentlyFoundChatIds,\n };\n },\n)(RecentContacts));\n","import React, {\n FC, memo, useCallback,\n} from '../../../lib/teact/teact';\nimport { getActions, withGlobal } from '../../../global';\n\nimport {\n ApiChat, ApiUser, ApiMessage, ApiMessageOutgoingStatus,\n} from '../../../api/types';\n\nimport { IS_SINGLE_COLUMN_LAYOUT } from '../../../util/environment';\nimport {\n getChatTitle,\n getPrivateChatUserId,\n getMessageMediaHash,\n getMessageMediaThumbDataUri,\n getMessageVideo,\n getMessageRoundVideo,\n} from '../../../global/helpers';\nimport { selectChat, selectUser } from '../../../global/selectors';\nimport renderText from '../../common/helpers/renderText';\nimport useMedia from '../../../hooks/useMedia';\nimport { formatPastTimeShort } from '../../../util/dateFormat';\nimport useLang, { LangFn } from '../../../hooks/useLang';\nimport useSelectWithEnter from '../../../hooks/useSelectWithEnter';\nimport { renderMessageSummary } from '../../common/helpers/renderMessageText';\n\nimport Avatar from '../../common/Avatar';\nimport VerifiedIcon from '../../common/VerifiedIcon';\nimport ListItem from '../../ui/ListItem';\nimport Link from '../../ui/Link';\n\nimport './ChatMessage.scss';\n\ntype OwnProps = {\n searchQuery?: string;\n message: ApiMessage;\n chatId: string;\n};\n\ntype StateProps = {\n chat?: ApiChat;\n privateChatUser?: ApiUser;\n lastMessageOutgoingStatus?: ApiMessageOutgoingStatus;\n lastSyncTime?: number;\n};\n\nconst ChatMessage: FC = ({\n message,\n searchQuery,\n chatId,\n chat,\n privateChatUser,\n lastSyncTime,\n}) => {\n const { focusMessage } = getActions();\n\n const mediaThumbnail = getMessageMediaThumbDataUri(message);\n const mediaBlobUrl = useMedia(getMessageMediaHash(message, 'micro'));\n const isRoundVideo = Boolean(getMessageRoundVideo(message));\n\n const handleClick = useCallback(() => {\n focusMessage({ chatId, messageId: message.id });\n }, [chatId, focusMessage, message.id]);\n\n const lang = useLang();\n\n const buttonRef = useSelectWithEnter(handleClick);\n\n if (!chat) {\n return undefined;\n }\n\n return (\n \n \n
\n
\n
\n

{renderText(getChatTitle(lang, chat, privateChatUser))}

\n {chat.isVerified && }\n
\n
\n \n {formatPastTimeShort(lang, message.date * 1000)}\n \n
\n\n
\n
\n
\n {renderSummary(lang, message, mediaBlobUrl || mediaThumbnail, searchQuery, isRoundVideo)}\n
\n
\n
\n \n );\n};\n\nfunction renderSummary(\n lang: LangFn, message: ApiMessage, blobUrl?: string, searchQuery?: string, isRoundVideo?: boolean,\n) {\n if (!blobUrl) {\n return renderMessageSummary(lang, message, undefined, searchQuery);\n }\n\n return (\n \n \"\"\n {getMessageVideo(message) && }\n {renderMessageSummary(lang, message, true, searchQuery)}\n \n );\n}\n\nexport default memo(withGlobal(\n (global, { chatId }): StateProps => {\n const chat = selectChat(global, chatId);\n if (!chat) {\n return {};\n }\n\n const privateChatUserId = getPrivateChatUserId(chat);\n\n return {\n chat,\n lastSyncTime: global.lastSyncTime,\n ...(privateChatUserId && { privateChatUser: selectUser(global, privateChatUserId) }),\n };\n },\n)(ChatMessage));\n","import React, { FC, memo, useMemo } from '../../../lib/teact/teact';\nimport { formatDateToString } from '../../../util/dateFormat';\n\nimport './DateSuggest.scss';\n\nconst SUGGESTION_COUNT = 8;\n\nexport type OwnProps = {\n searchDate: string;\n onSelect: (value: Date) => void;\n};\n\nconst DateSuggest: FC = ({\n searchDate, onSelect,\n}) => {\n const suggestions = useMemo(() => getSuggestionsFromDate(searchDate), [searchDate]);\n return (\n
\n {suggestions.map(({ date, text }) => {\n return (\n onSelect(date)}\n className=\"date-item\"\n key={text}\n >\n \n {text}\n \n );\n })}\n
\n );\n};\n\nfunction getSuggestionsFromDate(searchDate: string) {\n const hasYear = searchDate.match(/^\\d{2,4}-\\d{2}-\\d{2}$/g);\n if (hasYear) {\n const date = new Date(searchDate);\n return [{ date, text: formatDateToString(date) }];\n }\n\n const suggestion = [];\n const currentDate = new Date();\n const currentYear = currentDate.getFullYear();\n const latestYear = currentDate.getTime() > (new Date(`${currentYear}-${searchDate}`)).getTime()\n ? currentYear\n : currentYear - 1;\n\n for (let i = 0; i < SUGGESTION_COUNT; i++) {\n const date = new Date(`${latestYear - i}-${searchDate}`);\n suggestion.push({ date, text: formatDateToString(date) });\n }\n\n return suggestion;\n}\n\nexport default memo(DateSuggest);\n","import React, {\n FC, memo, useCallback, useMemo, useState,\n} from '../../../lib/teact/teact';\nimport { getActions, getGlobal, withGlobal } from '../../../global';\n\nimport { ApiChat, ApiMessage } from '../../../api/types';\nimport { LoadMoreDirection } from '../../../types';\n\nimport { IS_SINGLE_COLUMN_LAYOUT } from '../../../util/environment';\nimport { unique } from '../../../util/iteratees';\nimport {\n sortChatIds,\n filterUsersByName,\n} from '../../../global/helpers';\nimport { MEMO_EMPTY_ARRAY } from '../../../util/memo';\nimport { throttle } from '../../../util/schedulers';\nimport useLang from '../../../hooks/useLang';\nimport { renderMessageSummary } from '../../common/helpers/renderMessageText';\n\nimport InfiniteScroll from '../../ui/InfiniteScroll';\nimport LeftSearchResultChat from './LeftSearchResultChat';\nimport RecentContacts from './RecentContacts';\nimport ChatMessage from './ChatMessage';\nimport DateSuggest from './DateSuggest';\nimport Link from '../../ui/Link';\nimport NothingFound from '../../common/NothingFound';\nimport PickerSelectedItem from '../../common/PickerSelectedItem';\n\nexport type OwnProps = {\n searchQuery?: string;\n dateSearchQuery?: string;\n searchDate?: number;\n onReset: () => void;\n onSearchDateSelect: (value: Date) => void;\n};\n\ntype StateProps = {\n currentUserId?: string;\n localContactIds?: string[];\n localChatIds?: string[];\n localUserIds?: string[];\n globalChatIds?: string[];\n globalUserIds?: string[];\n foundIds?: string[];\n globalMessagesByChatId?: Record }>;\n chatsById: Record;\n fetchingStatus?: { chats?: boolean; messages?: boolean };\n lastSyncTime?: number;\n};\n\nconst MIN_QUERY_LENGTH_FOR_GLOBAL_SEARCH = 4;\nconst LESS_LIST_ITEMS_AMOUNT = 5;\n\nconst runThrottled = throttle((cb) => cb(), 500, true);\n\nconst ChatResults: FC = ({\n searchQuery, searchDate, dateSearchQuery, currentUserId,\n localContactIds, localChatIds, localUserIds, globalChatIds, globalUserIds,\n foundIds, globalMessagesByChatId, chatsById, fetchingStatus, lastSyncTime,\n onReset, onSearchDateSelect,\n}) => {\n const {\n openChat, addRecentlyFoundChatId, searchMessagesGlobal, setGlobalSearchChatId,\n } = getActions();\n\n const lang = useLang();\n\n const [shouldShowMoreLocal, setShouldShowMoreLocal] = useState(false);\n const [shouldShowMoreGlobal, setShouldShowMoreGlobal] = useState(false);\n\n const handleLoadMore = useCallback(({ direction }: { direction: LoadMoreDirection }) => {\n if (lastSyncTime && direction === LoadMoreDirection.Backwards) {\n runThrottled(() => {\n searchMessagesGlobal({\n type: 'text',\n query: searchQuery,\n });\n });\n }\n }, [lastSyncTime, searchMessagesGlobal, searchQuery]);\n\n const handleChatClick = useCallback(\n (id: string) => {\n openChat({ id, shouldReplaceHistory: true });\n\n if (id !== currentUserId) {\n addRecentlyFoundChatId({ id });\n }\n\n if (!IS_SINGLE_COLUMN_LAYOUT) {\n onReset();\n }\n },\n [currentUserId, openChat, addRecentlyFoundChatId, onReset],\n );\n\n const handlePickerItemClick = useCallback((id: string) => {\n setGlobalSearchChatId({ id });\n }, [setGlobalSearchChatId]);\n\n const localResults = useMemo(() => {\n if (!searchQuery || (searchQuery.startsWith('@') && searchQuery.length < 2)) {\n return MEMO_EMPTY_ARRAY;\n }\n\n const contactIdsWithMe = [\n ...(currentUserId ? [currentUserId] : []),\n ...(localContactIds || []),\n ];\n // No need for expensive global updates on users, so we avoid them\n const usersById = getGlobal().users.byId;\n const foundContactIds = filterUsersByName(\n contactIdsWithMe, usersById, searchQuery, currentUserId, lang('SavedMessages'),\n );\n\n return [\n ...sortChatIds(unique([\n ...(foundContactIds || []),\n ...(localChatIds || []),\n ...(localUserIds || []),\n ]), chatsById, undefined, currentUserId ? [currentUserId] : undefined),\n ];\n }, [searchQuery, currentUserId, localContactIds, lang, localChatIds, localUserIds, chatsById]);\n\n const globalResults = useMemo(() => {\n if (!searchQuery || searchQuery.length < MIN_QUERY_LENGTH_FOR_GLOBAL_SEARCH || !globalChatIds || !globalUserIds) {\n return MEMO_EMPTY_ARRAY;\n }\n\n return sortChatIds(\n unique([...globalChatIds, ...globalUserIds]),\n chatsById,\n true,\n );\n }, [chatsById, globalChatIds, globalUserIds, searchQuery]);\n\n const foundMessages = useMemo(() => {\n if ((!searchQuery && !searchDate) || !foundIds || foundIds.length === 0) {\n return MEMO_EMPTY_ARRAY;\n }\n\n return foundIds\n .map((id) => {\n const [chatId, messageId] = id.split('_');\n\n return globalMessagesByChatId?.[chatId]?.byId[Number(messageId)];\n })\n .filter(Boolean as any)\n .sort((a, b) => b.date - a.date);\n }, [foundIds, globalMessagesByChatId, searchQuery, searchDate]);\n\n const handleClickShowMoreLocal = useCallback(() => {\n setShouldShowMoreLocal(!shouldShowMoreLocal);\n }, [shouldShowMoreLocal]);\n\n const handleClickShowMoreGlobal = useCallback(() => {\n setShouldShowMoreGlobal(!shouldShowMoreGlobal);\n }, [shouldShowMoreGlobal]);\n\n function renderFoundMessage(message: ApiMessage) {\n const text = renderMessageSummary(lang, message);\n const chat = chatsById[message.chatId];\n\n if (!text || !chat) {\n return undefined;\n }\n\n return (\n \n );\n }\n\n const nothingFound = fetchingStatus && !fetchingStatus.chats && !fetchingStatus.messages\n && !localResults.length && !globalResults.length && !foundMessages.length;\n\n if (!searchQuery && !searchDate) {\n return ;\n }\n\n return (\n \n {dateSearchQuery && (\n
\n \n
\n )}\n {nothingFound && (\n \n )}\n {Boolean(localResults.length) && (\n
\n {localResults.map((id) => (\n \n ))}\n
\n )}\n {Boolean(localResults.length) && (\n
\n

\n {localResults.length > LESS_LIST_ITEMS_AMOUNT && (\n \n {lang(shouldShowMoreLocal ? 'ChatList.Search.ShowLess' : 'ChatList.Search.ShowMore')}\n \n )}\n {lang('DialogList.SearchSectionDialogs')}\n

\n {localResults.map((id, index) => {\n if (!shouldShowMoreLocal && index >= LESS_LIST_ITEMS_AMOUNT) {\n return undefined;\n }\n\n return (\n \n );\n })}\n
\n )}\n {Boolean(globalResults.length) && (\n
\n

\n {globalResults.length > LESS_LIST_ITEMS_AMOUNT && (\n \n {lang(shouldShowMoreGlobal ? 'ChatList.Search.ShowLess' : 'ChatList.Search.ShowMore')}\n \n )}\n {lang('DialogList.SearchSectionGlobal')}\n

\n {globalResults.map((id, index) => {\n if (!shouldShowMoreGlobal && index >= LESS_LIST_ITEMS_AMOUNT) {\n return undefined;\n }\n\n return (\n \n );\n })}\n
\n )}\n {Boolean(foundMessages.length) && (\n
\n

{lang('SearchMessages')}

\n {foundMessages.map(renderFoundMessage)}\n
\n )}\n \n );\n};\n\nexport default memo(withGlobal(\n (global): StateProps => {\n const { byId: chatsById } = global.chats;\n\n const { userIds: localContactIds } = global.contactList || {};\n\n if (!localContactIds) {\n return {\n chatsById,\n };\n }\n\n const {\n currentUserId, messages, lastSyncTime,\n } = global;\n const {\n fetchingStatus, globalResults, localResults, resultsByType,\n } = global.globalSearch;\n const { chatIds: globalChatIds, userIds: globalUserIds } = globalResults || {};\n const { chatIds: localChatIds, userIds: localUserIds } = localResults || {};\n const { byChatId: globalMessagesByChatId } = messages;\n const foundIds = resultsByType?.text?.foundIds;\n\n return {\n currentUserId,\n localContactIds,\n localChatIds,\n localUserIds,\n globalChatIds,\n globalUserIds,\n foundIds,\n globalMessagesByChatId,\n chatsById,\n fetchingStatus,\n lastSyncTime,\n };\n },\n)(ChatResults));\n","import React, {\n FC, memo, useCallback, useMemo,\n} from '../../../lib/teact/teact';\nimport { getActions, withGlobal } from '../../../global';\n\nimport { ApiChat, ApiMessage } from '../../../api/types';\nimport { LoadMoreDirection } from '../../../types';\n\nimport { MEMO_EMPTY_ARRAY } from '../../../util/memo';\nimport { throttle } from '../../../util/schedulers';\nimport useLang from '../../../hooks/useLang';\nimport { renderMessageSummary } from '../../common/helpers/renderMessageText';\n\nimport InfiniteScroll from '../../ui/InfiniteScroll';\nimport NothingFound from '../../common/NothingFound';\nimport ChatMessage from './ChatMessage';\nimport DateSuggest from './DateSuggest';\n\nexport type OwnProps = {\n searchQuery?: string;\n dateSearchQuery?: string;\n onReset: () => void;\n onSearchDateSelect: (value: Date) => void;\n};\n\ntype StateProps = {\n currentUserId?: string;\n foundIds?: string[];\n globalMessagesByChatId?: Record }>;\n chatsById: Record;\n fetchingStatus?: { chats?: boolean; messages?: boolean };\n lastSyncTime?: number;\n};\n\nconst runThrottled = throttle((cb) => cb(), 500, true);\n\nconst ChatMessageResults: FC = ({\n searchQuery,\n currentUserId,\n dateSearchQuery,\n foundIds,\n globalMessagesByChatId,\n chatsById,\n fetchingStatus,\n lastSyncTime,\n onSearchDateSelect,\n}) => {\n const { searchMessagesGlobal } = getActions();\n\n const lang = useLang();\n const handleLoadMore = useCallback(({ direction }: { direction: LoadMoreDirection }) => {\n if (lastSyncTime && direction === LoadMoreDirection.Backwards) {\n runThrottled(() => {\n searchMessagesGlobal({\n type: 'text',\n query: searchQuery,\n chatId: currentUserId,\n });\n });\n }\n }, [currentUserId, lastSyncTime, searchMessagesGlobal, searchQuery]);\n\n const foundMessages = useMemo(() => {\n if (!foundIds || foundIds.length === 0) {\n return MEMO_EMPTY_ARRAY;\n }\n\n return foundIds\n .map((id) => {\n const [chatId, messageId] = id.split('_');\n\n return globalMessagesByChatId?.[chatId]?.byId[Number(messageId)];\n })\n .filter(Boolean as any)\n .sort((a, b) => b.date - a.date);\n }, [foundIds, globalMessagesByChatId]);\n\n function renderFoundMessage(message: ApiMessage) {\n const text = renderMessageSummary(lang, message);\n const chat = chatsById[message.chatId];\n\n if (!text || !chat) {\n return undefined;\n }\n\n return (\n \n );\n }\n\n const nothingFound = fetchingStatus && !fetchingStatus.chats && !fetchingStatus.messages && !foundMessages.length;\n\n return (\n
\n \n {dateSearchQuery && (\n
\n \n
\n )}\n {nothingFound && (\n \n )}\n {foundMessages.map(renderFoundMessage)}\n \n
\n );\n};\n\nexport default memo(withGlobal(\n (global): StateProps => {\n const { byId: chatsById } = global.chats;\n const { currentUserId, messages: { byChatId: globalMessagesByChatId }, lastSyncTime } = global;\n const { fetchingStatus, resultsByType } = global.globalSearch;\n\n const { foundIds } = (resultsByType?.text) || {};\n\n return {\n currentUserId,\n foundIds,\n globalMessagesByChatId,\n chatsById,\n fetchingStatus,\n lastSyncTime,\n };\n },\n)(ChatMessageResults));\n","import { GlobalState } from '../../../../global/types';\nimport {\n ApiChat, ApiGlobalMessageSearchType, ApiMessage, ApiUser,\n} from '../../../../api/types';\nimport { ISettings } from '../../../../types';\n\nimport { selectChat, selectTheme } from '../../../../global/selectors';\n\nexport type StateProps = {\n theme: ISettings['theme'];\n isLoading?: boolean;\n chatsById: Record;\n usersById: Record;\n globalMessagesByChatId?: Record }>;\n foundIds?: string[];\n lastSyncTime?: number;\n searchChatId?: string;\n activeDownloads: Record;\n isChatProtected?: boolean;\n};\n\nexport function createMapStateToProps(type: ApiGlobalMessageSearchType) {\n return (global: GlobalState, props: any) => {\n const { byId: chatsById } = global.chats;\n const { byId: usersById } = global.users;\n const {\n fetchingStatus, resultsByType, chatId,\n } = global.globalSearch;\n\n // One component is used for two different types of results.\n // The differences between them are only in the isVoice property.\n // The rest of the search results use their own personal components.\n const currentType = type !== 'audio' ? type : (props?.isVoice ? 'voice' : 'audio');\n\n const { byChatId: globalMessagesByChatId } = global.messages;\n const foundIds = resultsByType?.[currentType]?.foundIds;\n\n const activeDownloads = global.activeDownloads.byChatId;\n\n return {\n theme: selectTheme(global),\n isLoading: foundIds === undefined\n || (fetchingStatus ? Boolean(fetchingStatus.chats || fetchingStatus.messages) : false),\n chatsById,\n usersById,\n globalMessagesByChatId,\n foundIds,\n searchChatId: chatId,\n activeDownloads,\n isChatProtected: chatId ? selectChat(global, chatId)?.isProtected : undefined,\n lastSyncTime: global.lastSyncTime,\n };\n };\n}\n","import React, {\n FC, memo, useCallback, useMemo, useRef,\n} from '../../../lib/teact/teact';\nimport { getActions, withGlobal } from '../../../global';\n\nimport { LoadMoreDirection, MediaViewerOrigin } from '../../../types';\n\nimport { MEMO_EMPTY_ARRAY } from '../../../util/memo';\nimport { SLIDE_TRANSITION_DURATION } from '../../../config';\nimport { createMapStateToProps, StateProps } from './helpers/createMapStateToProps';\nimport buildClassName from '../../../util/buildClassName';\nimport { throttle } from '../../../util/schedulers';\nimport useLang from '../../../hooks/useLang';\nimport useAsyncRendering from '../../right/hooks/useAsyncRendering';\nimport { useIntersectionObserver } from '../../../hooks/useIntersectionObserver';\n\nimport InfiniteScroll from '../../ui/InfiniteScroll';\nimport Media from '../../common/Media';\nimport ChatMessage from './ChatMessage';\nimport NothingFound from '../../common/NothingFound';\nimport Loading from '../../ui/Loading';\n\nexport type OwnProps = {\n searchQuery?: string;\n};\n\nconst CURRENT_TYPE = 'media';\nconst INTERSECTION_THROTTLE = 500;\n\nconst runThrottled = throttle((cb) => cb(), 500, true);\n\nconst MediaResults: FC = ({\n searchQuery,\n searchChatId,\n isLoading,\n globalMessagesByChatId,\n foundIds,\n lastSyncTime,\n isChatProtected,\n}) => {\n const {\n searchMessagesGlobal,\n openMediaViewer,\n } = getActions();\n\n // eslint-disable-next-line no-null/no-null\n const containerRef = useRef(null);\n\n const lang = useLang();\n\n const { observe: observeIntersectionForMedia } = useIntersectionObserver({\n rootRef: containerRef,\n throttleMs: INTERSECTION_THROTTLE,\n });\n\n const handleLoadMore = useCallback(({ direction }: { direction: LoadMoreDirection }) => {\n if (lastSyncTime && direction === LoadMoreDirection.Backwards) {\n runThrottled(() => {\n searchMessagesGlobal({\n type: CURRENT_TYPE,\n query: searchQuery,\n chatId: searchChatId,\n });\n });\n }\n }, [lastSyncTime, searchMessagesGlobal, searchQuery, searchChatId]);\n\n const foundMessages = useMemo(() => {\n if (!foundIds || !globalMessagesByChatId) {\n return MEMO_EMPTY_ARRAY;\n }\n\n return foundIds.map((id) => {\n const [chatId, messageId] = id.split('_');\n\n return globalMessagesByChatId[chatId]?.byId[Number(messageId)];\n }).filter(Boolean);\n }, [globalMessagesByChatId, foundIds]);\n\n const handleSelectMedia = useCallback((messageId: number, chatId: string) => {\n openMediaViewer({\n chatId,\n messageId,\n origin: MediaViewerOrigin.SearchResult,\n });\n }, [openMediaViewer]);\n\n function renderGallery() {\n return (\n
\n {foundMessages.map((message) => (\n \n ))}\n
\n );\n }\n\n function renderSearchResult() {\n return foundMessages.map((message) => (\n \n ));\n }\n\n const canRenderContents = useAsyncRendering([searchQuery], SLIDE_TRANSITION_DURATION) && !isLoading;\n const isMediaGrid = canRenderContents && foundIds && foundIds.length > 0 && !searchQuery;\n const isMessageList = canRenderContents && foundIds && foundIds.length > 0 && searchQuery;\n\n const classNames = buildClassName(\n 'search-content custom-scroll',\n isMessageList && 'chat-list',\n );\n\n return (\n
\n \n {!canRenderContents && }\n {canRenderContents && (!foundIds || foundIds.length === 0) && (\n \n )}\n {isMediaGrid && renderGallery()}\n {isMessageList && renderSearchResult()}\n \n
\n );\n};\n\nexport default memo(withGlobal(\n createMapStateToProps(CURRENT_TYPE),\n)(MediaResults));\n","import React, {\n FC, memo, useCallback, useMemo, useRef,\n} from '../../../lib/teact/teact';\nimport { getActions, withGlobal } from '../../../global';\n\nimport { LoadMoreDirection } from '../../../types';\n\nimport { SLIDE_TRANSITION_DURATION } from '../../../config';\nimport { MEMO_EMPTY_ARRAY } from '../../../util/memo';\nimport { createMapStateToProps, StateProps } from './helpers/createMapStateToProps';\nimport { formatMonthAndYear, toYearMonth } from '../../../util/dateFormat';\nimport { getSenderName } from './helpers/getSenderName';\nimport { throttle } from '../../../util/schedulers';\nimport useAsyncRendering from '../../right/hooks/useAsyncRendering';\nimport useLang from '../../../hooks/useLang';\nimport { useIntersectionObserver } from '../../../hooks/useIntersectionObserver';\n\nimport InfiniteScroll from '../../ui/InfiniteScroll';\nimport WebLink from '../../common/WebLink';\nimport NothingFound from '../../common/NothingFound';\nimport Loading from '../../ui/Loading';\n\nexport type OwnProps = {\n searchQuery?: string;\n};\n\nconst CURRENT_TYPE = 'links';\nconst INTERSECTION_THROTTLE = 500;\n\nconst runThrottled = throttle((cb) => cb(), 500, true);\n\nconst LinkResults: FC = ({\n searchQuery,\n searchChatId,\n isLoading,\n chatsById,\n usersById,\n globalMessagesByChatId,\n foundIds,\n lastSyncTime,\n isChatProtected,\n}) => {\n const {\n searchMessagesGlobal,\n focusMessage,\n } = getActions();\n\n // eslint-disable-next-line no-null/no-null\n const containerRef = useRef(null);\n\n const lang = useLang();\n\n const { observe: observeIntersectionForMedia } = useIntersectionObserver({\n rootRef: containerRef,\n throttleMs: INTERSECTION_THROTTLE,\n });\n\n const handleLoadMore = useCallback(({ direction }: { direction: LoadMoreDirection }) => {\n if (lastSyncTime && direction === LoadMoreDirection.Backwards) {\n runThrottled(() => {\n searchMessagesGlobal({\n type: CURRENT_TYPE,\n query: searchQuery,\n chatId: searchChatId,\n });\n });\n }\n }, [lastSyncTime, searchMessagesGlobal, searchQuery, searchChatId]);\n\n const foundMessages = useMemo(() => {\n if (!foundIds || !globalMessagesByChatId) {\n return MEMO_EMPTY_ARRAY;\n }\n\n return foundIds.map((id) => {\n const [chatId, messageId] = id.split('_');\n\n return globalMessagesByChatId[chatId]?.byId[Number(messageId)];\n }).filter(Boolean);\n }, [globalMessagesByChatId, foundIds]);\n\n const handleMessageFocus = useCallback((messageId: number, chatId: string) => {\n focusMessage({ chatId, messageId });\n }, [focusMessage]);\n\n function renderList() {\n return foundMessages.map((message, index) => {\n const shouldDrawDateDivider = index === 0\n || toYearMonth(message.date) !== toYearMonth(foundMessages[index - 1].date);\n return (\n \n {shouldDrawDateDivider && (\n

\n {formatMonthAndYear(lang, new Date(message.date * 1000))}\n

\n )}\n \n \n );\n });\n }\n\n const canRenderContents = useAsyncRendering([searchQuery], SLIDE_TRANSITION_DURATION) && !isLoading;\n\n return (\n
\n \n {!canRenderContents && }\n {canRenderContents && (!foundIds || foundIds.length === 0) && (\n \n )}\n {canRenderContents && foundIds && foundIds.length > 0 && renderList()}\n \n
\n );\n};\n\nexport default memo(withGlobal(\n createMapStateToProps(CURRENT_TYPE),\n)(LinkResults));\n","import React, {\n FC, memo, useCallback, useMemo, useRef,\n} from '../../../lib/teact/teact';\nimport { getActions, withGlobal } from '../../../global';\n\nimport { ApiMessage } from '../../../api/types';\nimport { LoadMoreDirection } from '../../../types';\n\nimport { SLIDE_TRANSITION_DURATION } from '../../../config';\nimport { MEMO_EMPTY_ARRAY } from '../../../util/memo';\nimport { createMapStateToProps, StateProps } from './helpers/createMapStateToProps';\nimport { formatMonthAndYear, toYearMonth } from '../../../util/dateFormat';\nimport { getSenderName } from './helpers/getSenderName';\nimport { throttle } from '../../../util/schedulers';\nimport { getMessageDocument } from '../../../global/helpers';\nimport useAsyncRendering from '../../right/hooks/useAsyncRendering';\nimport useLang from '../../../hooks/useLang';\nimport { useIntersectionObserver } from '../../../hooks/useIntersectionObserver';\n\nimport Document from '../../common/Document';\nimport InfiniteScroll from '../../ui/InfiniteScroll';\nimport NothingFound from '../../common/NothingFound';\nimport Loading from '../../ui/Loading';\n\nexport type OwnProps = {\n searchQuery?: string;\n};\n\nconst CURRENT_TYPE = 'documents';\nconst INTERSECTION_THROTTLE = 500;\n\nconst runThrottled = throttle((cb) => cb(), 500, true);\n\nconst FileResults: FC = ({\n searchQuery,\n searchChatId,\n isLoading,\n chatsById,\n usersById,\n globalMessagesByChatId,\n foundIds,\n activeDownloads,\n lastSyncTime,\n}) => {\n const {\n searchMessagesGlobal,\n focusMessage,\n } = getActions();\n\n // eslint-disable-next-line no-null/no-null\n const containerRef = useRef(null);\n\n const lang = useLang();\n\n const { observe: observeIntersectionForMedia } = useIntersectionObserver({\n rootRef: containerRef,\n throttleMs: INTERSECTION_THROTTLE,\n });\n\n const handleLoadMore = useCallback(({ direction }: { direction: LoadMoreDirection }) => {\n if (lastSyncTime && direction === LoadMoreDirection.Backwards) {\n runThrottled(() => {\n searchMessagesGlobal({\n type: CURRENT_TYPE,\n query: searchQuery,\n chatId: searchChatId,\n });\n });\n }\n }, [lastSyncTime, searchMessagesGlobal, searchQuery, searchChatId]);\n\n const foundMessages = useMemo(() => {\n if (!foundIds || !globalMessagesByChatId) {\n return MEMO_EMPTY_ARRAY;\n }\n\n return foundIds.map((id) => {\n const [chatId, messageId] = id.split('_');\n const message = globalMessagesByChatId[chatId]?.byId[Number(messageId)];\n\n return message && getMessageDocument(message) ? message : undefined;\n }).filter(Boolean) as ApiMessage[];\n }, [globalMessagesByChatId, foundIds]);\n\n const handleMessageFocus = useCallback((messageId: number, chatId: string) => {\n focusMessage({ chatId, messageId });\n }, [focusMessage]);\n\n function renderList() {\n return foundMessages.map((message, index) => {\n const shouldDrawDateDivider = index === 0\n || toYearMonth(message.date) !== toYearMonth(foundMessages[index - 1].date);\n return (\n \n {shouldDrawDateDivider && (\n

{formatMonthAndYear(lang, new Date(message.date * 1000))}

\n )}\n \n \n );\n });\n }\n\n const canRenderContents = useAsyncRendering([searchQuery], SLIDE_TRANSITION_DURATION) && !isLoading;\n\n return (\n
\n \n {!canRenderContents && }\n {canRenderContents && (!foundIds || foundIds.length === 0) && (\n \n )}\n {canRenderContents && foundIds && foundIds.length > 0 && renderList()}\n \n
\n );\n};\n\nexport default memo(withGlobal(\n createMapStateToProps(CURRENT_TYPE),\n)(FileResults));\n","import React, {\n FC, memo, useCallback, useMemo,\n} from '../../../lib/teact/teact';\nimport { getActions, withGlobal } from '../../../global';\n\nimport { AudioOrigin, LoadMoreDirection } from '../../../types';\n\nimport { SLIDE_TRANSITION_DURATION } from '../../../config';\nimport { MEMO_EMPTY_ARRAY } from '../../../util/memo';\nimport { createMapStateToProps, StateProps } from './helpers/createMapStateToProps';\nimport { formatMonthAndYear, toYearMonth } from '../../../util/dateFormat';\nimport { getSenderName } from './helpers/getSenderName';\nimport { throttle } from '../../../util/schedulers';\nimport useAsyncRendering from '../../right/hooks/useAsyncRendering';\nimport useLang from '../../../hooks/useLang';\n\nimport InfiniteScroll from '../../ui/InfiniteScroll';\nimport Audio from '../../common/Audio';\nimport NothingFound from '../../common/NothingFound';\nimport Loading from '../../ui/Loading';\n\nexport type OwnProps = {\n isVoice?: boolean;\n searchQuery?: string;\n};\n\nconst runThrottled = throttle((cb) => cb(), 500, true);\n\nconst AudioResults: FC = ({\n theme,\n isVoice,\n searchQuery,\n searchChatId,\n isLoading,\n chatsById,\n usersById,\n globalMessagesByChatId,\n foundIds,\n lastSyncTime,\n activeDownloads,\n}) => {\n const {\n searchMessagesGlobal,\n focusMessage,\n openAudioPlayer,\n } = getActions();\n\n const lang = useLang();\n const currentType = isVoice ? 'voice' : 'audio';\n const handleLoadMore = useCallback(({ direction }: { direction: LoadMoreDirection }) => {\n if (lastSyncTime && direction === LoadMoreDirection.Backwards) {\n runThrottled(() => {\n searchMessagesGlobal({\n type: currentType,\n query: searchQuery,\n chatId: searchChatId,\n });\n });\n }\n }, [currentType, lastSyncTime, searchMessagesGlobal, searchQuery, searchChatId]);\n\n const foundMessages = useMemo(() => {\n if (!foundIds || !globalMessagesByChatId) {\n return MEMO_EMPTY_ARRAY;\n }\n\n return foundIds.map((id) => {\n const [chatId, messageId] = id.split('_');\n\n return globalMessagesByChatId[chatId]?.byId[Number(messageId)];\n }).filter(Boolean);\n }, [globalMessagesByChatId, foundIds]);\n\n const handleMessageFocus = useCallback((messageId: number, chatId: string) => {\n focusMessage({ chatId, messageId });\n }, [focusMessage]);\n\n const handlePlayAudio = useCallback((messageId: number, chatId: string) => {\n openAudioPlayer({ chatId, messageId });\n }, [openAudioPlayer]);\n\n function renderList() {\n return foundMessages.map((message, index) => {\n const shouldDrawDateDivider = index === 0\n || toYearMonth(message.date) !== toYearMonth(foundMessages[index - 1].date);\n return (\n \n {shouldDrawDateDivider && (\n

\n {formatMonthAndYear(lang, new Date(message.date * 1000))}\n

\n )}\n \n \n );\n });\n }\n\n const canRenderContents = useAsyncRendering([searchQuery], SLIDE_TRANSITION_DURATION) && !isLoading;\n\n return (\n
\n \n {!canRenderContents && }\n {canRenderContents && (!foundIds || foundIds.length === 0) && (\n \n )}\n {canRenderContents && foundIds && foundIds.length > 0 && renderList()}\n \n
\n );\n};\n\nexport default memo(withGlobal(\n createMapStateToProps('audio'),\n)(AudioResults));\n","import React, {\n FC, memo, useCallback, useState, useMemo, useRef,\n} from '../../../lib/teact/teact';\nimport { getActions, withGlobal } from '../../../global';\n\nimport { GlobalSearchContent } from '../../../types';\n\nimport { parseDateString } from '../../../util/dateFormat';\nimport useKeyboardListNavigation from '../../../hooks/useKeyboardListNavigation';\nimport useLang from '../../../hooks/useLang';\nimport useHistoryBack from '../../../hooks/useHistoryBack';\n\nimport TabList from '../../ui/TabList';\nimport Transition from '../../ui/Transition';\nimport ChatResults from './ChatResults';\nimport UserChatResults from './ChatMessageResults';\nimport MediaResults from './MediaResults';\nimport LinkResults from './LinkResults';\nimport FileResults from './FileResults';\nimport AudioResults from './AudioResults';\n\nimport './LeftSearch.scss';\n\nexport type OwnProps = {\n searchQuery?: string;\n searchDate?: number;\n isActive: boolean;\n onReset: () => void;\n};\n\ntype StateProps = {\n currentContent?: GlobalSearchContent;\n chatId?: string;\n};\n\nconst TABS = [\n { type: GlobalSearchContent.ChatList, title: 'SearchAllChatsShort' },\n { type: GlobalSearchContent.Media, title: 'SharedMediaTab2' },\n { type: GlobalSearchContent.Links, title: 'SharedLinksTab2' },\n { type: GlobalSearchContent.Files, title: 'SharedFilesTab2' },\n { type: GlobalSearchContent.Music, title: 'SharedMusicTab2' },\n { type: GlobalSearchContent.Voice, title: 'SharedVoiceTab2' },\n];\n\nconst CHAT_TABS = [\n { type: GlobalSearchContent.ChatList, title: 'All Messages' },\n ...TABS.slice(1),\n];\n\nconst TRANSITION_RENDER_COUNT = Object.keys(GlobalSearchContent).length / 2;\n\nconst LeftSearch: FC = ({\n searchQuery,\n searchDate,\n isActive,\n currentContent = GlobalSearchContent.ChatList,\n chatId,\n onReset,\n}) => {\n const {\n setGlobalSearchContent,\n setGlobalSearchDate,\n } = getActions();\n\n const lang = useLang();\n const [activeTab, setActiveTab] = useState(currentContent);\n const dateSearchQuery = useMemo(() => parseDateString(searchQuery), [searchQuery]);\n\n const handleSwitchTab = useCallback((index: number) => {\n const tab = TABS[index];\n setGlobalSearchContent({ content: tab.type });\n setActiveTab(index);\n }, [setGlobalSearchContent]);\n\n const handleSearchDateSelect = useCallback((value: Date) => {\n setGlobalSearchDate({ date: value.getTime() / 1000 });\n }, [setGlobalSearchDate]);\n\n useHistoryBack(isActive, onReset, undefined, undefined, true);\n\n // eslint-disable-next-line no-null/no-null\n const containerRef = useRef(null);\n const handleKeyDown = useKeyboardListNavigation(containerRef, isActive, undefined, '.ListItem-button', true);\n\n return (\n
\n \n \n {(() => {\n switch (currentContent) {\n case GlobalSearchContent.ChatList:\n if (chatId) {\n return (\n \n );\n }\n return (\n \n );\n case GlobalSearchContent.Media:\n return ;\n case GlobalSearchContent.Links:\n return ;\n case GlobalSearchContent.Files:\n return ;\n case GlobalSearchContent.Music:\n return (\n \n );\n case GlobalSearchContent.Voice:\n return (\n \n );\n default:\n return undefined;\n }\n })()}\n \n
\n );\n};\n\nexport default memo(withGlobal(\n (global): StateProps => {\n const { currentContent, chatId } = global.globalSearch;\n\n return { currentContent, chatId };\n },\n)(LeftSearch));\n","import useReducer, { StateReducer, Dispatch } from '../useReducer';\n\nexport type TwoFaActions = (\n 'setCurrentPassword' | 'setPassword' | 'setHint' | 'setEmail' | 'reset'\n);\nexport type TwoFaDispatch = Dispatch;\n\nexport type TwoFaState = {\n currentPassword: string;\n password: string;\n hint: string;\n email: string;\n};\n\nconst INITIAL_STATE: TwoFaState = {\n currentPassword: '',\n password: '',\n hint: '',\n email: '',\n};\n\nconst twoFaReducer: StateReducer = (\n state,\n action,\n) => {\n switch (action.type) {\n case 'setCurrentPassword':\n return {\n ...state,\n currentPassword: action.payload,\n };\n\n case 'setPassword':\n return {\n ...state,\n password: action.payload,\n };\n\n case 'setHint':\n return {\n ...state,\n hint: action.payload,\n };\n\n case 'setEmail':\n return {\n ...state,\n email: action.payload,\n };\n\n case 'reset':\n return INITIAL_STATE;\n\n default:\n return state;\n }\n};\n\nconst useTwoFaReducer = () => {\n return useReducer(twoFaReducer, INITIAL_STATE);\n};\n\nexport default useTwoFaReducer;\n","import React, {\n FC, memo, useCallback, useMemo, useState,\n} from '../../../lib/teact/teact';\nimport { getActions } from '../../../global';\n\nimport { SettingsScreens } from '../../../types';\n\nimport { IS_SINGLE_COLUMN_LAYOUT } from '../../../util/environment';\nimport useLang from '../../../hooks/useLang';\n\nimport DropdownMenu from '../../ui/DropdownMenu';\nimport MenuItem from '../../ui/MenuItem';\nimport Button from '../../ui/Button';\nimport ConfirmDialog from '../../ui/ConfirmDialog';\n\ntype OwnProps = {\n currentScreen: SettingsScreens;\n editedFolderId?: number;\n onReset: () => void;\n onSaveFilter: () => void;\n onScreenSelect: (screen: SettingsScreens) => void;\n};\n\nconst SettingsHeader: FC = ({\n currentScreen,\n editedFolderId,\n onReset,\n onSaveFilter,\n onScreenSelect,\n}) => {\n const {\n signOut,\n deleteChatFolder,\n } = getActions();\n\n const [isSignOutDialogOpen, setIsSignOutDialogOpen] = useState(false);\n const [isDeleteFolderDialogOpen, setIsDeleteFolderDialogOpen] = useState(false);\n\n const openSignOutConfirmation = useCallback(() => {\n setIsSignOutDialogOpen(true);\n }, []);\n\n const closeSignOutConfirmation = useCallback(() => {\n setIsSignOutDialogOpen(false);\n }, []);\n\n const openDeleteFolderConfirmation = useCallback(() => {\n setIsDeleteFolderDialogOpen(true);\n }, []);\n\n const closeDeleteFolderConfirmation = useCallback(() => {\n setIsDeleteFolderDialogOpen(false);\n }, []);\n\n const handleSignOutMessage = useCallback(() => {\n closeSignOutConfirmation();\n signOut();\n }, [closeSignOutConfirmation, signOut]);\n\n const handleDeleteFolderMessage = useCallback(() => {\n closeDeleteFolderConfirmation();\n deleteChatFolder({ id: editedFolderId });\n onReset();\n }, [editedFolderId, closeDeleteFolderConfirmation, deleteChatFolder, onReset]);\n\n const SettingsMenuButton: FC<{ onTrigger: () => void; isOpen?: boolean }> = useMemo(() => {\n return ({ onTrigger, isOpen }) => (\n \n \n \n );\n }, []);\n\n const lang = useLang();\n\n function renderHeaderContent() {\n switch (currentScreen) {\n case SettingsScreens.EditProfile:\n return

{lang('lng_settings_information')}

;\n case SettingsScreens.General:\n return

{lang('General')}

;\n case SettingsScreens.QuickReaction:\n return

{lang('DoubleTapSetting')}

;\n case SettingsScreens.Notifications:\n return

{lang('Notifications')}

;\n case SettingsScreens.DataStorage:\n return

{lang('DataSettings')}

;\n case SettingsScreens.Privacy:\n return

{lang('PrivacySettings')}

;\n case SettingsScreens.Language:\n return

{lang('Language')}

;\n\n case SettingsScreens.GeneralChatBackground:\n return

{lang('ChatBackground')}

;\n case SettingsScreens.GeneralChatBackgroundColor:\n return

{lang('SetColor')}

;\n\n case SettingsScreens.PrivacyPhoneNumber:\n return

{lang('PrivacyPhone')}

;\n case SettingsScreens.PrivacyLastSeen:\n return

{lang('PrivacyLastSeen')}

;\n case SettingsScreens.PrivacyProfilePhoto:\n return

{lang('Privacy.ProfilePhoto')}

;\n case SettingsScreens.PrivacyForwarding:\n return

{lang('PrivacyForwards')}

;\n case SettingsScreens.PrivacyGroupChats:\n return

{lang('AutodownloadGroupChats')}

;\n case SettingsScreens.PrivacyPhoneNumberAllowedContacts:\n case SettingsScreens.PrivacyLastSeenAllowedContacts:\n case SettingsScreens.PrivacyProfilePhotoAllowedContacts:\n case SettingsScreens.PrivacyForwardingAllowedContacts:\n case SettingsScreens.PrivacyGroupChatsAllowedContacts:\n return

{lang('AlwaysShareWith')}

;\n case SettingsScreens.PrivacyPhoneNumberDeniedContacts:\n case SettingsScreens.PrivacyLastSeenDeniedContacts:\n case SettingsScreens.PrivacyProfilePhotoDeniedContacts:\n case SettingsScreens.PrivacyForwardingDeniedContacts:\n case SettingsScreens.PrivacyGroupChatsDeniedContacts:\n return

{lang('NeverShareWith')}

;\n\n case SettingsScreens.PrivacyActiveSessions:\n return

{lang('SessionsTitle')}

;\n case SettingsScreens.PrivacyBlockedUsers:\n return

{lang('BlockedUsers')}

;\n\n case SettingsScreens.TwoFaDisabled:\n case SettingsScreens.TwoFaEnabled:\n return

{lang('TwoStepVerification')}

;\n case SettingsScreens.TwoFaNewPassword:\n case SettingsScreens.TwoFaChangePasswordNew:\n case SettingsScreens.TwoFaChangePasswordConfirm:\n return

{lang('PleaseEnterCurrentPassword')}

;\n case SettingsScreens.TwoFaNewPasswordConfirm:\n return

{lang('PleaseReEnterPassword')}

;\n case SettingsScreens.TwoFaNewPasswordHint:\n case SettingsScreens.TwoFaChangePasswordHint:\n return

{lang('PasswordHint')}

;\n case SettingsScreens.TwoFaNewPasswordEmail:\n case SettingsScreens.TwoFaRecoveryEmail:\n return

{lang('RecoveryEmailTitle')}

;\n case SettingsScreens.TwoFaNewPasswordEmailCode:\n case SettingsScreens.TwoFaRecoveryEmailCode:\n return

Recovery Email Code

;\n case SettingsScreens.TwoFaCongratulations:\n return

{lang('TwoStepVerificationPasswordSet')}

;\n case SettingsScreens.TwoFaChangePasswordCurrent:\n case SettingsScreens.TwoFaTurnOff:\n case SettingsScreens.TwoFaRecoveryEmailCurrentPassword:\n return

{lang('PleaseEnterCurrentPassword')}

;\n\n case SettingsScreens.Folders:\n return

{lang('Filters')}

;\n case SettingsScreens.FoldersCreateFolder:\n return

{lang('FilterNew')}

;\n case SettingsScreens.FoldersEditFolder:\n case SettingsScreens.FoldersEditFolderFromChatList:\n return (\n
\n

{lang('FilterEdit')}

\n\n {editedFolderId && (\n \n \n {lang('Delete')}\n \n \n )}\n
\n );\n case SettingsScreens.FoldersIncludedChats:\n case SettingsScreens.FoldersIncludedChatsFromChatList:\n case SettingsScreens.FoldersExcludedChats:\n case SettingsScreens.FoldersExcludedChatsFromChatList:\n return (\n
\n {(currentScreen === SettingsScreens.FoldersIncludedChats\n || currentScreen === SettingsScreens.FoldersIncludedChatsFromChatList) ? (\n

{lang('FilterInclude')}

\n ) : (\n

{lang('FilterExclude')}

\n )}\n\n \n \n \n
\n );\n\n default:\n return (\n
\n

{lang('SETTINGS')}

\n\n onScreenSelect(SettingsScreens.EditProfile)}\n ariaLabel={lang('lng_settings_information')}\n >\n \n \n \n {lang('LogOutTitle')}\n \n
\n );\n }\n }\n\n return (\n
\n \n \n \n {renderHeaderContent()}\n \n \n
\n );\n};\n\nexport default memo(SettingsHeader);\n","import React, { FC, memo, useEffect } from '../../../lib/teact/teact';\nimport { getActions, withGlobal } from '../../../global';\n\nimport { SettingsScreens } from '../../../types';\nimport { ApiUser } from '../../../api/types';\n\nimport { selectUser } from '../../../global/selectors';\nimport useLang from '../../../hooks/useLang';\nimport useHistoryBack from '../../../hooks/useHistoryBack';\n\nimport ListItem from '../../ui/ListItem';\nimport ProfileInfo from '../../common/ProfileInfo';\nimport ChatExtra from '../../common/ChatExtra';\n\ntype OwnProps = {\n isActive?: boolean;\n onScreenSelect: (screen: SettingsScreens) => void;\n onReset: () => void;\n};\n\ntype StateProps = {\n currentUser?: ApiUser;\n lastSyncTime?: number;\n};\n\nconst SettingsMain: FC = ({\n isActive,\n onScreenSelect,\n onReset,\n currentUser,\n lastSyncTime,\n}) => {\n const { loadProfilePhotos } = getActions();\n\n const lang = useLang();\n const profileId = currentUser?.id;\n\n useEffect(() => {\n if (profileId && lastSyncTime) {\n loadProfilePhotos({ profileId });\n }\n }, [lastSyncTime, profileId, loadProfilePhotos]);\n\n useHistoryBack(isActive, onReset, onScreenSelect, SettingsScreens.Main);\n\n return (\n
\n
\n {currentUser && (\n \n )}\n {currentUser && (\n \n )}\n onScreenSelect(SettingsScreens.General)}\n >\n {lang('Telegram.GeneralSettingsViewController')}\n \n onScreenSelect(SettingsScreens.Notifications)}\n >\n {lang('Notifications')}\n \n onScreenSelect(SettingsScreens.Privacy)}\n >\n {lang('PrivacySettings')}\n \n onScreenSelect(SettingsScreens.DataStorage)}\n >\n {lang('DataSettings')}\n \n onScreenSelect(SettingsScreens.Folders)}\n >\n {lang('Filters')}\n \n onScreenSelect(SettingsScreens.Language)}\n >\n {lang('Language')}\n \n
\n
\n );\n};\n\nexport default memo(withGlobal(\n (global): StateProps => {\n const { currentUserId, lastSyncTime } = global;\n\n return {\n currentUser: currentUserId ? selectUser(global, currentUserId) : undefined,\n lastSyncTime,\n };\n },\n)(SettingsMain));\n","import { ChangeEvent } from 'react';\nimport React, {\n FC, useState, useCallback, memo, useEffect, useMemo,\n} from '../../lib/teact/teact';\n\nimport { debounce } from '../../util/schedulers';\nimport useLang from '../../hooks/useLang';\n\nimport InputText from '../ui/InputText';\n\ntype OwnProps = {\n currentUsername?: string;\n asLink?: boolean;\n isLoading?: boolean;\n isUsernameAvailable?: boolean;\n checkUsername: AnyToVoidFunction;\n onChange: (value: string | false) => void;\n};\n\nconst MIN_USERNAME_LENGTH = 5;\nconst MAX_USERNAME_LENGTH = 32;\nconst LINK_PREFIX = 'https://t.me/';\nconst LINK_PREFIX_REGEX = /https:\\/\\/t\\.me\\/?/i;\nconst USERNAME_REGEX = /^([a-zA-Z0-9_]+)$/;\n\nconst runDebouncedForCheckUsername = debounce((cb) => cb(), 250, false);\n\nfunction isUsernameValid(username: string) {\n return username.length >= MIN_USERNAME_LENGTH\n && username.length <= MAX_USERNAME_LENGTH\n && USERNAME_REGEX.test(username);\n}\n\nconst SettingsEditProfile: FC = ({\n currentUsername,\n asLink,\n isLoading,\n isUsernameAvailable,\n checkUsername,\n onChange,\n}) => {\n const [username, setUsername] = useState(currentUsername || '');\n\n const lang = useLang();\n const langPrefix = asLink ? 'SetUrl' : 'Username';\n const label = asLink ? lang('SetUrlPlaceholder') : lang('Username');\n\n const [usernameSuccess, usernameError] = useMemo(() => {\n if (!username.length) {\n return [];\n }\n\n if (username.length < MIN_USERNAME_LENGTH) {\n return [undefined, `${label} is too short`];\n }\n if (username.length > MAX_USERNAME_LENGTH) {\n return [undefined, `${label} is too long`];\n }\n if (!USERNAME_REGEX.test(username)) {\n return [undefined, `${label} contains invalid characters`];\n }\n\n if (isUsernameAvailable === undefined) {\n return [];\n }\n\n // Variable `isUsernameAvailable` is initialized with `undefined`, so a strict false check is required\n return [\n isUsernameAvailable ? lang(`${langPrefix}Available`, 'Username') : undefined,\n isUsernameAvailable === false ? lang(`${langPrefix}InUse`) : undefined,\n ];\n }, [username, isUsernameAvailable, lang, langPrefix, label]);\n\n useEffect(() => {\n setUsername(currentUsername || '');\n }, [asLink, currentUsername]);\n\n const handleUsernameChange = useCallback((e: ChangeEvent) => {\n const newUsername = e.target.value.trim().replace(LINK_PREFIX_REGEX, '');\n setUsername(newUsername);\n e.target.value = `${asLink ? LINK_PREFIX : ''}${newUsername}`;\n\n const isValid = isUsernameValid(newUsername);\n\n if (isValid) {\n runDebouncedForCheckUsername(() => {\n checkUsername({ username: newUsername });\n });\n }\n\n if (onChange) {\n onChange(isValid ? newUsername : false);\n }\n }, [asLink, checkUsername, onChange]);\n\n return (\n \n );\n};\n\nexport default memo(SettingsEditProfile);\n","import { ChangeEvent } from 'react';\nimport React, {\n FC, useState, useCallback, memo, useEffect, useMemo,\n} from '../../../lib/teact/teact';\nimport { getActions, withGlobal } from '../../../global';\n\nimport { ApiMediaFormat } from '../../../api/types';\nimport { ProfileEditProgress, SettingsScreens } from '../../../types';\n\nimport { throttle } from '../../../util/schedulers';\nimport { selectUser } from '../../../global/selectors';\nimport { getChatAvatarHash } from '../../../global/helpers';\nimport useMedia from '../../../hooks/useMedia';\nimport useLang from '../../../hooks/useLang';\n\nimport AvatarEditable from '../../ui/AvatarEditable';\nimport FloatingActionButton from '../../ui/FloatingActionButton';\nimport Spinner from '../../ui/Spinner';\nimport InputText from '../../ui/InputText';\nimport renderText from '../../common/helpers/renderText';\nimport UsernameInput from '../../common/UsernameInput';\nimport useHistoryBack from '../../../hooks/useHistoryBack';\n\ntype OwnProps = {\n isActive: boolean;\n onScreenSelect: (screen: SettingsScreens) => void;\n onReset: () => void;\n};\n\ntype StateProps = {\n currentAvatarHash?: string;\n currentFirstName?: string;\n currentLastName?: string;\n currentBio?: string;\n currentUsername?: string;\n progress?: ProfileEditProgress;\n isUsernameAvailable?: boolean;\n};\n\nconst runThrottled = throttle((cb) => cb(), 60000, true);\n\nconst MAX_BIO_LENGTH = 70;\n\nconst ERROR_FIRST_NAME_MISSING = 'Please provide your first name';\nconst ERROR_BIO_TOO_LONG = 'Bio can\\' be longer than 70 characters';\n\nconst SettingsEditProfile: FC = ({\n isActive,\n onScreenSelect,\n onReset,\n currentAvatarHash,\n currentFirstName,\n currentLastName,\n currentBio,\n currentUsername,\n progress,\n isUsernameAvailable,\n}) => {\n const {\n loadCurrentUser,\n updateProfile,\n checkUsername,\n } = getActions();\n\n const lang = useLang();\n\n const [isUsernameTouched, setIsUsernameTouched] = useState(false);\n const [isProfileFieldsTouched, setIsProfileFieldsTouched] = useState(false);\n const [error, setError] = useState();\n\n const [photo, setPhoto] = useState();\n const [firstName, setFirstName] = useState(currentFirstName || '');\n const [lastName, setLastName] = useState(currentLastName || '');\n const [bio, setBio] = useState(currentBio || '');\n const [username, setUsername] = useState(currentUsername || '');\n\n const currentAvatarBlobUrl = useMedia(currentAvatarHash, false, ApiMediaFormat.BlobUrl);\n\n const isLoading = progress === ProfileEditProgress.InProgress;\n const isUsernameError = username === false;\n\n const isSaveButtonShown = useMemo(() => {\n if (isUsernameError) {\n return false;\n }\n\n return Boolean(photo) || isProfileFieldsTouched || isUsernameAvailable === true;\n }, [photo, isProfileFieldsTouched, isUsernameError, isUsernameAvailable]);\n\n useHistoryBack(isActive, onReset, onScreenSelect, SettingsScreens.EditProfile);\n\n // Due to the parent Transition, this component never gets unmounted,\n // that's why we use throttled API call on every update.\n useEffect(() => {\n runThrottled(() => {\n loadCurrentUser();\n });\n }, [loadCurrentUser]);\n\n useEffect(() => {\n setPhoto(undefined);\n }, [currentAvatarBlobUrl]);\n\n useEffect(() => {\n setFirstName(currentFirstName || '');\n setLastName(currentLastName || '');\n setBio(currentBio || '');\n }, [currentFirstName, currentLastName, currentBio]);\n\n useEffect(() => {\n setUsername(currentUsername || '');\n }, [currentUsername]);\n\n useEffect(() => {\n if (progress === ProfileEditProgress.Complete) {\n setIsProfileFieldsTouched(false);\n setIsUsernameTouched(false);\n setError(undefined);\n }\n }, [progress]);\n\n const handlePhotoChange = useCallback((newPhoto: File) => {\n setPhoto(newPhoto);\n }, []);\n\n const handleFirstNameChange = useCallback((e: ChangeEvent) => {\n setFirstName(e.target.value);\n setIsProfileFieldsTouched(true);\n }, []);\n\n const handleLastNameChange = useCallback((e: ChangeEvent) => {\n setLastName(e.target.value);\n setIsProfileFieldsTouched(true);\n }, []);\n\n const handleBioChange = useCallback((e: ChangeEvent) => {\n setBio(e.target.value);\n setIsProfileFieldsTouched(true);\n }, []);\n\n const handleUsernameChange = useCallback((value: string | false) => {\n setUsername(value);\n setIsUsernameTouched(true);\n }, []);\n\n const handleProfileSave = useCallback(() => {\n const trimmedFirstName = firstName.trim();\n const trimmedLastName = lastName.trim();\n const trimmedBio = bio.trim();\n\n if (!trimmedFirstName.length) {\n setError(ERROR_FIRST_NAME_MISSING);\n return;\n }\n\n if (trimmedBio.length > MAX_BIO_LENGTH) {\n setError(ERROR_BIO_TOO_LONG);\n return;\n }\n\n updateProfile({\n photo,\n ...(isProfileFieldsTouched && {\n firstName: trimmedFirstName,\n lastName: trimmedLastName,\n bio: trimmedBio,\n }),\n ...(isUsernameTouched && {\n username,\n }),\n });\n }, [\n photo,\n firstName, lastName, bio, isProfileFieldsTouched,\n username, isUsernameTouched,\n updateProfile,\n ]);\n\n return (\n
\n
\n
\n \n \n \n \n\n

\n {renderText(lang('lng_settings_about_bio'), ['br', 'simple_markdown'])}\n

\n
\n\n
\n

{lang('Username')}

\n\n \n\n

\n {renderText(lang('UsernameHelp'), ['br', 'simple_markdown'])}\n

\n {username && (\n

\n {lang('lng_username_link')}
\n https://t.me/{username}\n

\n )}\n
\n
\n\n \n {isLoading ? (\n \n ) : (\n \n )}\n \n
\n );\n};\n\nexport default memo(withGlobal(\n (global): StateProps => {\n const { currentUserId } = global;\n const { progress, isUsernameAvailable } = global.profileEdit || {};\n const currentUser = currentUserId ? selectUser(global, currentUserId) : undefined;\n\n if (!currentUser) {\n return {\n progress,\n isUsernameAvailable,\n };\n }\n\n const {\n firstName: currentFirstName,\n lastName: currentLastName,\n username: currentUsername,\n fullInfo,\n } = currentUser;\n const { bio: currentBio } = fullInfo || {};\n const currentAvatarHash = getChatAvatarHash(currentUser);\n\n return {\n currentAvatarHash,\n currentFirstName,\n currentLastName,\n currentBio,\n currentUsername,\n progress,\n isUsernameAvailable,\n };\n },\n)(SettingsEditProfile));\n","import React, { FC, memo, useCallback } from '../../../lib/teact/teact';\nimport { getActions, withGlobal } from '../../../global';\n\nimport { SettingsScreens, ISettings } from '../../../types';\n\nimport { AUTODOWNLOAD_FILESIZE_MB_LIMITS } from '../../../config';\nimport { pick } from '../../../util/iteratees';\nimport useLang from '../../../hooks/useLang';\nimport useHistoryBack from '../../../hooks/useHistoryBack';\n\nimport Checkbox from '../../ui/Checkbox';\nimport RangeSlider from '../../ui/RangeSlider';\n\ntype OwnProps = {\n isActive?: boolean;\n onScreenSelect: (screen: SettingsScreens) => void;\n onReset: () => void;\n};\n\ntype StateProps = Pick;\n\nconst SettingsDataStorage: FC = ({\n isActive,\n onScreenSelect,\n onReset,\n canAutoLoadPhotoFromContacts,\n canAutoLoadPhotoInPrivateChats,\n canAutoLoadPhotoInGroups,\n canAutoLoadPhotoInChannels,\n canAutoLoadVideoFromContacts,\n canAutoLoadVideoInPrivateChats,\n canAutoLoadVideoInGroups,\n canAutoLoadVideoInChannels,\n canAutoLoadFileFromContacts,\n canAutoLoadFileInPrivateChats,\n canAutoLoadFileInGroups,\n canAutoLoadFileInChannels,\n canAutoPlayGifs,\n canAutoPlayVideos,\n autoLoadFileMaxSizeMb,\n}) => {\n const { setSettingOption } = getActions();\n\n const lang = useLang();\n\n useHistoryBack(isActive, onReset, onScreenSelect, SettingsScreens.General);\n\n const renderFileSizeCallback = useCallback((value: number) => {\n return lang('AutodownloadSizeLimitUpTo', lang('FileSize.MB', String(AUTODOWNLOAD_FILESIZE_MB_LIMITS[value]), 'i'));\n }, [lang]);\n\n const handleFileSizeChange = useCallback((value: number) => {\n setSettingOption({ autoLoadFileMaxSizeMb: AUTODOWNLOAD_FILESIZE_MB_LIMITS[value] });\n }, [setSettingOption]);\n\n const handleCanAutoPlayGifsChange = useCallback((value: boolean) => {\n setSettingOption({ canAutoPlayGifs: value });\n }, [setSettingOption]);\n\n const handleCanAutoPlayVideosChange = useCallback((value: boolean) => {\n setSettingOption({ canAutoPlayVideos: value });\n }, [setSettingOption]);\n\n function renderContentSizeSlider() {\n const value = AUTODOWNLOAD_FILESIZE_MB_LIMITS.indexOf(autoLoadFileMaxSizeMb);\n\n return (\n
\n \n
\n );\n }\n\n function renderAutoDownloadBlock(\n title: string,\n key: 'Photo' | 'Video' | 'File',\n canAutoLoadFromContacts: boolean,\n canAutoLoadInPrivateChats: boolean,\n canAutoLoadInGroups: boolean,\n canAutoLoadInChannels: boolean,\n ) {\n return (\n
\n

{title}

\n\n setSettingOption({ [`canAutoLoad${key}FromContacts`]: isChecked })}\n />\n setSettingOption({ [`canAutoLoad${key}InPrivateChats`]: isChecked })}\n />\n setSettingOption({ [`canAutoLoad${key}InGroups`]: isChecked })}\n />\n setSettingOption({ [`canAutoLoad${key}InChannels`]: isChecked })}\n />\n\n {key === 'File' && renderContentSizeSlider()}\n
\n );\n }\n\n return (\n
\n {renderAutoDownloadBlock(\n lang('AutoDownloadPhotosTitle'),\n 'Photo',\n canAutoLoadPhotoFromContacts,\n canAutoLoadPhotoInPrivateChats,\n canAutoLoadPhotoInGroups,\n canAutoLoadPhotoInChannels,\n )}\n {renderAutoDownloadBlock(\n lang('AutoDownloadVideosTitle'),\n 'Video',\n canAutoLoadVideoFromContacts,\n canAutoLoadVideoInPrivateChats,\n canAutoLoadVideoInGroups,\n canAutoLoadVideoInChannels,\n )}\n {renderAutoDownloadBlock(\n 'Auto-download files', // Proper translation is not available yet\n 'File',\n canAutoLoadFileFromContacts,\n canAutoLoadFileInPrivateChats,\n canAutoLoadFileInGroups,\n canAutoLoadFileInChannels,\n )}\n\n
\n

{lang('AutoplayMedia')}

\n\n \n \n
\n
\n );\n};\n\nexport default memo(withGlobal(\n (global): StateProps => {\n return pick(global.settings.byKey, [\n 'canAutoLoadPhotoFromContacts',\n 'canAutoLoadPhotoInPrivateChats',\n 'canAutoLoadPhotoInGroups',\n 'canAutoLoadPhotoInChannels',\n 'canAutoLoadVideoFromContacts',\n 'canAutoLoadVideoInPrivateChats',\n 'canAutoLoadVideoInGroups',\n 'canAutoLoadVideoInChannels',\n 'canAutoLoadFileFromContacts',\n 'canAutoLoadFileInPrivateChats',\n 'canAutoLoadFileInGroups',\n 'canAutoLoadFileInChannels',\n 'canAutoPlayGifs',\n 'canAutoPlayVideos',\n 'autoLoadFileMaxSizeMb',\n ]);\n },\n)(SettingsDataStorage));\n","import React, {\n FC, memo, useMemo, useCallback, useState, useEffect,\n} from '../../../../lib/teact/teact';\nimport { getActions, withGlobal } from '../../../../global';\n\nimport { ApiChatFolder } from '../../../../api/types';\nimport { SettingsScreens } from '../../../../types';\n\nimport { STICKER_SIZE_FOLDER_SETTINGS } from '../../../../config';\nimport { throttle } from '../../../../util/schedulers';\nimport getAnimationData from '../../../common/helpers/animatedAssets';\nimport { getFolderDescriptionText } from '../../../../global/helpers';\nimport useLang from '../../../../hooks/useLang';\nimport useHistoryBack from '../../../../hooks/useHistoryBack';\nimport { useFolderManagerForChatsCount } from '../../../../hooks/useFolderManager';\n\nimport ListItem from '../../../ui/ListItem';\nimport Button from '../../../ui/Button';\nimport Loading from '../../../ui/Loading';\nimport AnimatedSticker from '../../../common/AnimatedSticker';\n\ntype OwnProps = {\n isActive?: boolean;\n onCreateFolder: () => void;\n onEditFolder: (folder: ApiChatFolder) => void;\n onScreenSelect: (screen: SettingsScreens) => void;\n onReset: () => void;\n};\n\ntype StateProps = {\n orderedFolderIds?: number[];\n foldersById: Record;\n recommendedChatFolders?: ApiChatFolder[];\n};\n\nconst runThrottledForLoadRecommended = throttle((cb) => cb(), 60000, true);\n\nconst MAX_ALLOWED_FOLDERS = 10;\n\nconst SettingsFoldersMain: FC = ({\n isActive,\n onCreateFolder,\n onEditFolder,\n onScreenSelect,\n onReset,\n orderedFolderIds,\n foldersById,\n recommendedChatFolders,\n}) => {\n const {\n loadRecommendedChatFolders,\n addChatFolder,\n showDialog,\n } = getActions();\n\n const [animationData, setAnimationData] = useState();\n const [isAnimationLoaded, setIsAnimationLoaded] = useState(false);\n const handleAnimationLoad = useCallback(() => setIsAnimationLoaded(true), []);\n\n useEffect(() => {\n if (!animationData) {\n getAnimationData('FoldersAll').then(setAnimationData);\n }\n }, [animationData]);\n\n // Due to the parent Transition, this component never gets unmounted,\n // that's why we use throttled API call on every update.\n useEffect(() => {\n runThrottledForLoadRecommended(() => {\n loadRecommendedChatFolders();\n });\n }, [loadRecommendedChatFolders]);\n\n const handleCreateFolder = useCallback(() => {\n if (Object.keys(foldersById).length >= MAX_ALLOWED_FOLDERS) {\n showDialog({\n data: {\n message: 'DIALOG_FILTERS_TOO_MUCH',\n hasErrorKey: true,\n },\n });\n\n return;\n }\n\n onCreateFolder();\n }, [foldersById, showDialog, onCreateFolder]);\n\n const lang = useLang();\n\n useHistoryBack(isActive, onReset, onScreenSelect, SettingsScreens.Folders);\n\n const chatsCountByFolderId = useFolderManagerForChatsCount();\n const userFolders = useMemo(() => {\n if (!orderedFolderIds) {\n return undefined;\n }\n\n return orderedFolderIds.map((id) => {\n const folder = foldersById[id];\n\n return {\n id: folder.id,\n title: folder.title,\n subtitle: getFolderDescriptionText(lang, folder, chatsCountByFolderId[folder.id]),\n };\n });\n }, [orderedFolderIds, foldersById, lang, chatsCountByFolderId]);\n\n const handleCreateFolderFromRecommended = useCallback((folder: ApiChatFolder) => {\n if (Object.keys(foldersById).length >= MAX_ALLOWED_FOLDERS) {\n showDialog({\n data: {\n message: 'DIALOG_FILTERS_TOO_MUCH',\n hasErrorKey: true,\n },\n });\n\n return;\n }\n\n addChatFolder({ folder });\n }, [foldersById, addChatFolder, showDialog]);\n\n return (\n
\n
\n
\n {animationData && (\n \n )}\n
\n\n

\n {lang('CreateNewFilterInfo')}\n

\n\n \n \n {lang('CreateNewFilter')}\n \n
\n\n
\n

{lang('Filters')}

\n\n {userFolders?.length ? userFolders.map((folder) => (\n onEditFolder(foldersById[folder.id])}\n >\n {folder.title}\n {folder.subtitle}\n \n )) : userFolders && !userFolders.length ? (\n

\n You have no folders yet.\n

\n ) : }\n
\n\n {(recommendedChatFolders && Boolean(recommendedChatFolders.length)) && (\n
\n

\n {lang('FilterRecommended')}\n

\n\n {recommendedChatFolders.map((folder) => (\n handleCreateFolderFromRecommended(folder)}\n >\n
\n
\n {folder.title}\n {folder.description}\n
\n\n \n {lang('Add')}\n \n
\n \n ))}\n
\n )}\n
\n );\n};\n\nexport default memo(withGlobal(\n (global): StateProps => {\n const {\n orderedIds: orderedFolderIds,\n byId: foldersById,\n recommended: recommendedChatFolders,\n } = global.chatFolders;\n\n return {\n orderedFolderIds,\n foldersById,\n recommendedChatFolders,\n };\n },\n)(SettingsFoldersMain));\n","import React, { FC } from '../../lib/teact/teact';\n\nimport useLang from '../../hooks/useLang';\n\nimport Button from './Button';\n\nimport './ShowMoreButton.scss';\n\ntype OwnProps = {\n count: number;\n itemName: string;\n itemPluralName?: string;\n isLoading?: boolean;\n onClick: () => void;\n};\n\nconst ShowMoreButton: FC = ({\n count,\n itemName,\n itemPluralName,\n isLoading,\n onClick,\n}) => {\n const lang = useLang();\n\n return (\n \n \n Show {count} more {count > 1 ? itemPluralName || `${itemName}s` : itemName}\n \n );\n};\n\nexport default ShowMoreButton;\n","import React, {\n FC, memo, useCallback, useEffect, useMemo, useState,\n} from '../../../../lib/teact/teact';\nimport { getActions, withGlobal } from '../../../../global';\n\nimport { SettingsScreens } from '../../../../types';\n\nimport { STICKER_SIZE_FOLDER_SETTINGS } from '../../../../config';\nimport { findIntersectionWithSet } from '../../../../util/iteratees';\nimport { isUserId } from '../../../../global/helpers';\nimport getAnimationData from '../../../common/helpers/animatedAssets';\nimport {\n EXCLUDED_CHAT_TYPES,\n FolderEditDispatch,\n FoldersState,\n INCLUDED_CHAT_TYPES,\n selectChatFilters,\n} from '../../../../hooks/reducers/useFoldersReducer';\nimport useLang from '../../../../hooks/useLang';\nimport useHistoryBack from '../../../../hooks/useHistoryBack';\n\nimport ListItem from '../../../ui/ListItem';\nimport AnimatedSticker from '../../../common/AnimatedSticker';\nimport InputText from '../../../ui/InputText';\nimport PrivateChatInfo from '../../../common/PrivateChatInfo';\nimport GroupChatInfo from '../../../common/GroupChatInfo';\nimport FloatingActionButton from '../../../ui/FloatingActionButton';\nimport Spinner from '../../../ui/Spinner';\nimport ShowMoreButton from '../../../ui/ShowMoreButton';\n\ntype OwnProps = {\n state: FoldersState;\n dispatch: FolderEditDispatch;\n onAddIncludedChats: () => void;\n onAddExcludedChats: () => void;\n isActive?: boolean;\n onScreenSelect: (screen: SettingsScreens) => void;\n onReset: () => void;\n onBack: () => void;\n};\n\ntype StateProps = {\n loadedActiveChatIds?: string[];\n loadedArchivedChatIds?: string[];\n};\n\nconst SUBMIT_TIMEOUT = 500;\n\nconst INITIAL_CHATS_LIMIT = 5;\n\nconst ERROR_NO_TITLE = 'Please provide a title for this folder.';\nconst ERROR_NO_CHATS = 'ChatList.Filter.Error.Empty';\n\nconst SettingsFoldersEdit: FC = ({\n state,\n dispatch,\n onAddIncludedChats,\n onAddExcludedChats,\n isActive,\n onScreenSelect,\n onReset,\n onBack,\n loadedActiveChatIds,\n loadedArchivedChatIds,\n}) => {\n const {\n editChatFolder,\n addChatFolder,\n } = getActions();\n\n const [animationData, setAnimationData] = useState();\n const [isAnimationLoaded, setIsAnimationLoaded] = useState(false);\n const handleAnimationLoad = useCallback(() => setIsAnimationLoaded(true), []);\n\n const [isIncludedChatsListExpanded, setIsIncludedChatsListExpanded] = useState(false);\n const [isExcludedChatsListExpanded, setIsExcludedChatsListExpanded] = useState(false);\n\n const {\n selectedChatIds: includedChatIds,\n selectedChatTypes: includedChatTypes,\n } = selectChatFilters(state, 'included');\n const {\n selectedChatIds: excludedChatIds,\n selectedChatTypes: excludedChatTypes,\n } = selectChatFilters(state, 'excluded');\n\n useEffect(() => {\n if (!animationData) {\n getAnimationData('FoldersNew').then(setAnimationData);\n }\n }, [animationData]);\n\n useEffect(() => {\n setIsIncludedChatsListExpanded(false);\n setIsExcludedChatsListExpanded(false);\n }, [state.folderId]);\n\n const [visibleIncludedChatIds, visibleExcludedChatIds] = useMemo(() => {\n const allLoadedChatsSet = new Set([\n ...(loadedActiveChatIds || []),\n ...(loadedArchivedChatIds || []),\n ]);\n\n const loadedIncludedChatIds = findIntersectionWithSet(includedChatIds, allLoadedChatsSet);\n const loadedExcludedChatIds = findIntersectionWithSet(excludedChatIds, allLoadedChatsSet);\n\n return [\n isIncludedChatsListExpanded\n ? loadedIncludedChatIds\n : loadedIncludedChatIds.slice(0, INITIAL_CHATS_LIMIT - includedChatTypes.length),\n isExcludedChatsListExpanded\n ? loadedExcludedChatIds\n : loadedExcludedChatIds.slice(0, INITIAL_CHATS_LIMIT - excludedChatTypes.length),\n ];\n }, [\n excludedChatIds, includedChatIds, includedChatTypes, excludedChatTypes,\n isExcludedChatsListExpanded, isIncludedChatsListExpanded,\n loadedActiveChatIds, loadedArchivedChatIds,\n ]);\n\n const lang = useLang();\n\n useHistoryBack(isActive, onBack, onScreenSelect, state.mode === 'edit'\n ? SettingsScreens.FoldersEditFolder\n : SettingsScreens.FoldersCreateFolder);\n\n const handleChange = useCallback((event: React.ChangeEvent) => {\n const { currentTarget } = event;\n dispatch({ type: 'setTitle', payload: currentTarget.value.trim() });\n }, [dispatch]);\n\n const handleSubmit = useCallback(() => {\n const { title } = state.folder;\n\n if (!title) {\n dispatch({ type: 'setError', payload: ERROR_NO_TITLE });\n return;\n }\n\n if (!includedChatIds.length && !Object.keys(includedChatTypes).length) {\n dispatch({ type: 'setError', payload: ERROR_NO_CHATS });\n return;\n }\n\n dispatch({ type: 'setIsLoading', payload: true });\n if (state.mode === 'edit') {\n editChatFolder({ id: state.folderId, folderUpdate: state.folder });\n } else {\n addChatFolder({ folder: state.folder });\n }\n\n setTimeout(() => {\n onReset();\n }, SUBMIT_TIMEOUT);\n }, [addChatFolder, dispatch, editChatFolder, includedChatIds.length, includedChatTypes, onReset, state]);\n\n function renderChatType(key: string, mode: 'included' | 'excluded') {\n const chatType = mode === 'included'\n ? INCLUDED_CHAT_TYPES.find(({ key: typeKey }) => typeKey === key)\n : EXCLUDED_CHAT_TYPES.find(({ key: typeKey }) => typeKey === key);\n\n if (!chatType) {\n return undefined;\n }\n\n return (\n \n {lang(chatType.title)}\n \n );\n }\n\n function renderChats(mode: 'included' | 'excluded') {\n const selectedChatTypes = mode === 'included' ? includedChatTypes : excludedChatTypes;\n const visibleChatIds = mode === 'included' ? visibleIncludedChatIds : visibleExcludedChatIds;\n\n const isExpanded = mode === 'included' ? isIncludedChatsListExpanded : isExcludedChatsListExpanded;\n const allChatIds = mode === 'included' ? includedChatIds : excludedChatIds;\n const leftChatsCount = allChatIds.length - selectedChatTypes.length - visibleChatIds.length;\n const clickHandler = mode === 'included'\n ? () => setIsIncludedChatsListExpanded(true)\n : () => setIsExcludedChatsListExpanded(true);\n\n return (\n <>\n {selectedChatTypes.map((key) => renderChatType(key, mode))}\n {visibleChatIds.map((id) => (\n \n {isUserId(id) ? (\n \n ) : (\n \n )}\n \n ))}\n {(!isExpanded && leftChatsCount > 0) && (\n \n )}\n \n );\n }\n\n return (\n
\n
\n
\n
\n {animationData && (\n \n )}\n
\n\n {state.mode === 'create' && (\n

\n {lang('FilterIncludeInfo')}\n

\n )}\n\n \n
\n\n
\n {state.error && state.error === ERROR_NO_CHATS && (\n

\n {lang(state.error)}\n

\n )}\n\n

{lang('FilterInclude')}

\n\n \n {lang('FilterAddChats')}\n \n\n {renderChats('included')}\n
\n\n
\n

{lang('FilterExclude')}

\n\n \n {lang('FilterAddChats')}\n \n\n {renderChats('excluded')}\n
\n
\n\n \n {state.isLoading ? (\n \n ) : (\n \n )}\n \n
\n );\n};\n\nexport default memo(withGlobal(\n (global): StateProps => {\n const { listIds } = global.chats;\n\n return {\n loadedActiveChatIds: listIds.active,\n loadedArchivedChatIds: listIds.archived,\n };\n },\n)(SettingsFoldersEdit));\n","import React, {\n FC, useCallback, useRef, useEffect, memo,\n} from '../../../../lib/teact/teact';\n\nimport { isUserId } from '../../../../global/helpers';\nimport {\n INCLUDED_CHAT_TYPES,\n EXCLUDED_CHAT_TYPES,\n FolderChatType,\n} from '../../../../hooks/reducers/useFoldersReducer';\nimport useInfiniteScroll from '../../../../hooks/useInfiniteScroll';\nimport useLang from '../../../../hooks/useLang';\n\nimport Checkbox from '../../../ui/Checkbox';\nimport InputText from '../../../ui/InputText';\nimport ListItem from '../../../ui/ListItem';\nimport PrivateChatInfo from '../../../common/PrivateChatInfo';\nimport GroupChatInfo from '../../../common/GroupChatInfo';\nimport PickerSelectedItem from '../../../common/PickerSelectedItem';\nimport InfiniteScroll from '../../../ui/InfiniteScroll';\nimport Loading from '../../../ui/Loading';\n\nimport '../../../common/Picker.scss';\nimport './SettingsFoldersChatsPicker.scss';\n\ntype OwnProps = {\n mode: 'included' | 'excluded';\n chatIds: string[];\n selectedIds: string[];\n selectedChatTypes: string[];\n filterValue?: string;\n onSelectedIdsChange: (ids: string[]) => void;\n onSelectedChatTypesChange: (types: string[]) => void;\n onFilterChange: (value: string) => void;\n};\n\n// Focus slows down animation, also it breaks transition layout in Chrome\nconst FOCUS_DELAY_MS = 500;\n\nconst MAX_CHATS = 100;\nconst MAX_FULL_ITEMS = 10;\nconst ALWAYS_FULL_ITEMS_COUNT = 5;\n\nconst SettingsFoldersChatsPicker: FC = ({\n mode,\n chatIds,\n selectedIds,\n selectedChatTypes,\n filterValue,\n onSelectedIdsChange,\n onSelectedChatTypesChange,\n onFilterChange,\n}) => {\n // eslint-disable-next-line no-null/no-null\n const inputRef = useRef(null);\n const chatTypes = mode === 'included' ? INCLUDED_CHAT_TYPES : EXCLUDED_CHAT_TYPES;\n const shouldMinimize = selectedIds.length + selectedChatTypes.length > MAX_FULL_ITEMS;\n const hasMaxChats = selectedIds.length >= MAX_CHATS;\n\n useEffect(() => {\n setTimeout(() => {\n requestAnimationFrame(() => {\n inputRef.current!.focus();\n });\n }, FOCUS_DELAY_MS);\n }, []);\n\n const handleItemClick = useCallback((id: string) => {\n const newSelectedIds = [...selectedIds];\n if (newSelectedIds.includes(id)) {\n newSelectedIds.splice(newSelectedIds.indexOf(id), 1);\n } else {\n newSelectedIds.push(id);\n }\n onSelectedIdsChange(newSelectedIds);\n }, [selectedIds, onSelectedIdsChange]);\n\n const handleChatTypeClick = useCallback((key: FolderChatType['key']) => {\n const newSelectedChatTypes = [...selectedChatTypes];\n if (newSelectedChatTypes.includes(key)) {\n newSelectedChatTypes.splice(newSelectedChatTypes.indexOf(key), 1);\n } else {\n newSelectedChatTypes.push(key);\n }\n onSelectedChatTypesChange(newSelectedChatTypes);\n }, [selectedChatTypes, onSelectedChatTypesChange]);\n\n const handleFilterChange = useCallback((e: React.ChangeEvent) => {\n const { value } = e.currentTarget;\n onFilterChange(value);\n }, [onFilterChange]);\n\n const lang = useLang();\n\n function renderSelectedChatType(key: string) {\n const selectedType = chatTypes.find(({ key: typeKey }) => key === typeKey);\n if (!selectedType) {\n return undefined;\n }\n\n return (\n \n );\n }\n\n function renderChatType(type: FolderChatType) {\n return (\n handleChatTypeClick(type.key)}\n ripple\n >\n \n

{lang(type.title)}

\n \n \n );\n }\n\n function renderItem(id: string) {\n const isSelected = selectedIds.includes(id);\n\n return (\n handleItemClick(id)}\n ripple\n disabled={!isSelected && hasMaxChats}\n >\n {isUserId(id) ? (\n \n ) : (\n \n )}\n \n \n );\n }\n\n const [viewportIds, getMore] = useInfiniteScroll(undefined, chatIds, Boolean(filterValue));\n\n return (\n
\n
\n {selectedChatTypes.map(renderSelectedChatType)}\n {selectedIds.map((id, i) => (\n \n ))}\n {!hasMaxChats ? (\n \n ) : (\n

\n {`Sorry, you can't add more than ${MAX_CHATS} chats.`}\n

\n )}\n
\n \n {(!viewportIds || !viewportIds.length || viewportIds.includes(chatIds[0])) && (\n <>\n

\n {lang('FilterChatTypes')}\n

\n {chatTypes.map(renderChatType)}\n
\n

\n {lang('FilterChats')}\n

\n \n )}\n\n {viewportIds?.length ? (\n viewportIds.map(renderItem)\n ) : viewportIds && !viewportIds.length ? (\n

Sorry, nothing found.

\n ) : (\n \n )}\n \n
\n );\n};\n\nexport default memo(SettingsFoldersChatsPicker);\n","import React, {\n FC, memo, useMemo, useCallback,\n} from '../../../../lib/teact/teact';\nimport { getGlobal } from '../../../../global';\n\nimport { SettingsScreens } from '../../../../types';\n\nimport { unique } from '../../../../util/iteratees';\n\nimport { ALL_FOLDER_ID, ARCHIVED_FOLDER_ID } from '../../../../config';\nimport { filterChatsByName } from '../../../../global/helpers';\nimport useLang from '../../../../hooks/useLang';\nimport useHistoryBack from '../../../../hooks/useHistoryBack';\nimport { useFolderManagerForOrderedIds } from '../../../../hooks/useFolderManager';\nimport {\n FoldersState,\n FolderEditDispatch,\n selectChatFilters,\n} from '../../../../hooks/reducers/useFoldersReducer';\n\nimport SettingsFoldersChatsPicker from './SettingsFoldersChatsPicker';\nimport Loading from '../../../ui/Loading';\n\ntype OwnProps = {\n mode: 'included' | 'excluded';\n state: FoldersState;\n dispatch: FolderEditDispatch;\n isActive?: boolean;\n onScreenSelect: (screen: SettingsScreens) => void;\n onReset: () => void;\n};\n\nconst SettingsFoldersChatFilters: FC = ({\n mode,\n state,\n dispatch,\n isActive,\n onScreenSelect,\n onReset,\n}) => {\n const { chatFilter } = state;\n const { selectedChatIds, selectedChatTypes } = selectChatFilters(state, mode, true);\n\n const lang = useLang();\n\n const folderAllOrderedIds = useFolderManagerForOrderedIds(ALL_FOLDER_ID);\n const folderArchivedOrderedIds = useFolderManagerForOrderedIds(ARCHIVED_FOLDER_ID);\n\n const displayedIds = useMemo(() => {\n // No need for expensive global updates on chats, so we avoid them\n const chatsById = getGlobal().chats.byId;\n\n const chatIds = [...folderAllOrderedIds || [], ...folderArchivedOrderedIds || []];\n return unique([\n ...selectedChatIds,\n ...filterChatsByName(lang, chatIds, chatsById, chatFilter),\n ]);\n }, [folderAllOrderedIds, folderArchivedOrderedIds, selectedChatIds, lang, chatFilter]);\n\n const handleFilterChange = useCallback((newFilter: string) => {\n dispatch({\n type: 'setChatFilter',\n payload: newFilter,\n });\n }, [dispatch]);\n\n const handleSelectedIdsChange = useCallback((ids: string[]) => {\n if (mode === 'included') {\n dispatch({\n type: 'setIncludeFilters',\n payload: { ...state.includeFilters, includedChatIds: ids },\n });\n } else {\n dispatch({\n type: 'setExcludeFilters',\n payload: { ...state.excludeFilters, excludedChatIds: ids },\n });\n }\n }, [mode, state, dispatch]);\n\n const handleSelectedChatTypesChange = useCallback((keys: string[]) => {\n const newFilters: Record = {};\n keys.forEach((key) => {\n newFilters[key] = true;\n });\n\n if (mode === 'included') {\n dispatch({\n type: 'setIncludeFilters',\n payload: {\n includedChatIds: selectedChatIds,\n ...newFilters,\n },\n });\n } else {\n dispatch({\n type: 'setExcludeFilters',\n payload: {\n excludedChatIds: selectedChatIds,\n ...newFilters,\n },\n });\n }\n }, [mode, selectedChatIds, dispatch]);\n\n useHistoryBack(\n isActive,\n onReset,\n onScreenSelect,\n mode === 'included' ? SettingsScreens.FoldersIncludedChats : SettingsScreens.FoldersExcludedChats,\n );\n\n if (!displayedIds) {\n return ;\n }\n\n return (\n \n );\n};\n\nexport default memo(SettingsFoldersChatFilters);\n","import React, { FC, memo, useCallback } from '../../../../lib/teact/teact';\n\nimport { ApiChatFolder } from '../../../../api/types';\nimport { SettingsScreens } from '../../../../types';\n\nimport { FolderEditDispatch, FoldersState } from '../../../../hooks/reducers/useFoldersReducer';\n\nimport SettingsFoldersMain from './SettingsFoldersMain';\nimport SettingsFoldersEdit from './SettingsFoldersEdit';\nimport SettingsFoldersChatFilters from './SettingsFoldersChatFilters';\n\nimport './SettingsFolders.scss';\n\nconst TRANSITION_DURATION = 200;\n\nexport type OwnProps = {\n currentScreen: SettingsScreens;\n shownScreen: SettingsScreens;\n state: FoldersState;\n dispatch: FolderEditDispatch;\n isActive?: boolean;\n onScreenSelect: (screen: SettingsScreens) => void;\n onReset: () => void;\n};\n\nconst SettingsFolders: FC = ({\n currentScreen,\n shownScreen,\n state,\n dispatch,\n isActive,\n onScreenSelect,\n onReset,\n}) => {\n const handleReset = useCallback(() => {\n if (\n currentScreen === SettingsScreens.FoldersCreateFolder\n || currentScreen === SettingsScreens.FoldersEditFolder\n || currentScreen === SettingsScreens.FoldersEditFolderFromChatList\n ) {\n setTimeout(() => {\n dispatch({ type: 'reset' });\n }, TRANSITION_DURATION);\n }\n\n if (\n currentScreen === SettingsScreens.FoldersIncludedChats\n || currentScreen === SettingsScreens.FoldersExcludedChats\n ) {\n if (state.mode === 'create') {\n onScreenSelect(SettingsScreens.FoldersCreateFolder);\n } else {\n onScreenSelect(SettingsScreens.FoldersEditFolder);\n }\n return;\n }\n\n onReset();\n }, [\n state.mode, dispatch,\n currentScreen, onReset, onScreenSelect,\n ]);\n\n const handleCreateFolder = useCallback(() => {\n dispatch({ type: 'reset' });\n onScreenSelect(SettingsScreens.FoldersCreateFolder);\n }, [onScreenSelect, dispatch]);\n\n const handleEditFolder = useCallback((folder: ApiChatFolder) => {\n dispatch({ type: 'editFolder', payload: folder });\n onScreenSelect(SettingsScreens.FoldersEditFolder);\n }, [dispatch, onScreenSelect]);\n\n const handleAddIncludedChats = useCallback(() => {\n dispatch({ type: 'editIncludeFilters' });\n onScreenSelect(currentScreen === SettingsScreens.FoldersEditFolderFromChatList\n ? SettingsScreens.FoldersIncludedChatsFromChatList\n : SettingsScreens.FoldersIncludedChats);\n }, [currentScreen, dispatch, onScreenSelect]);\n\n const handleAddExcludedChats = useCallback(() => {\n dispatch({ type: 'editExcludeFilters' });\n onScreenSelect(currentScreen === SettingsScreens.FoldersEditFolderFromChatList\n ? SettingsScreens.FoldersExcludedChatsFromChatList\n : SettingsScreens.FoldersExcludedChats);\n }, [currentScreen, dispatch, onScreenSelect]);\n\n switch (currentScreen) {\n case SettingsScreens.Folders:\n return (\n \n );\n case SettingsScreens.FoldersCreateFolder:\n case SettingsScreens.FoldersEditFolder:\n case SettingsScreens.FoldersEditFolderFromChatList:\n return (\n \n );\n case SettingsScreens.FoldersIncludedChats:\n case SettingsScreens.FoldersIncludedChatsFromChatList:\n return (\n \n );\n case SettingsScreens.FoldersExcludedChats:\n case SettingsScreens.FoldersExcludedChatsFromChatList:\n return (\n \n );\n\n default:\n return undefined;\n }\n};\n\nexport default memo(SettingsFolders);\n","import React, {\n FC, memo, useMemo, useRef,\n} from '../../../lib/teact/teact';\n\nimport { ApiMediaFormat, ApiStickerSet } from '../../../api/types';\n\nimport { STICKER_SIZE_PICKER_HEADER } from '../../../config';\nimport { ObserveFn, useIsIntersecting } from '../../../hooks/useIntersectionObserver';\nimport useMedia from '../../../hooks/useMedia';\nimport useMediaTransition from '../../../hooks/useMediaTransition';\nimport { getFirstLetters } from '../../../util/textFormat';\n\nimport AnimatedSticker from '../../common/AnimatedSticker';\n\ntype OwnProps = {\n size?: number;\n stickerSet: ApiStickerSet;\n observeIntersection: ObserveFn;\n};\n\nconst StickerSetCoverAnimated: FC = ({\n size = STICKER_SIZE_PICKER_HEADER,\n stickerSet,\n observeIntersection,\n}) => {\n // eslint-disable-next-line no-null/no-null\n const ref = useRef(null);\n\n const isIntersecting = useIsIntersecting(ref, observeIntersection);\n\n const mediaHash = `stickerSet${stickerSet.id}`;\n const lottieData = useMedia(mediaHash, !isIntersecting, ApiMediaFormat.Lottie);\n const transitionClassNames = useMediaTransition(lottieData);\n\n const firstLetters = useMemo(() => {\n if (lottieData) return undefined;\n\n return getFirstLetters(stickerSet.title, 2);\n }, [lottieData, stickerSet.title]);\n\n return (\n
\n {firstLetters}\n {lottieData && (\n \n )}\n
\n );\n};\n\nexport default memo(StickerSetCoverAnimated);\n","import React, {\n FC, memo, useMemo, useRef,\n} from '../../../lib/teact/teact';\n\nimport { ApiStickerSet } from '../../../api/types';\n\nimport { IS_WEBM_SUPPORTED } from '../../../util/environment';\nimport { getFirstLetters } from '../../../util/textFormat';\nimport { ObserveFn, useIsIntersecting } from '../../../hooks/useIntersectionObserver';\nimport useMedia from '../../../hooks/useMedia';\nimport useMediaTransition from '../../../hooks/useMediaTransition';\n\ntype OwnProps = {\n stickerSet: ApiStickerSet;\n observeIntersection: ObserveFn;\n};\n\nconst StickerSetCover: FC = ({ stickerSet, observeIntersection }) => {\n // eslint-disable-next-line no-null/no-null\n const ref = useRef(null);\n\n const isIntersecting = useIsIntersecting(ref, observeIntersection);\n\n const mediaData = useMedia(stickerSet.hasThumbnail && `stickerSet${stickerSet.id}`, !isIntersecting);\n const transitionClassNames = useMediaTransition(mediaData);\n const isVideo = stickerSet.isVideos;\n\n const firstLetters = useMemo(() => {\n if ((isVideo && !IS_WEBM_SUPPORTED) || !mediaData) return getFirstLetters(stickerSet.title, 2);\n return undefined;\n }, [isVideo, mediaData, stickerSet.title]);\n\n return (\n
\n {firstLetters}\n {isVideo ? (\n
\n );\n};\n\nexport default memo(StickerSetCover);\n","import React, {\n FC, memo,\n} from '../../../lib/teact/teact';\nimport { ApiSticker, ApiStickerSet } from '../../../api/types';\n\nimport { STICKER_SIZE_GENERAL_SETTINGS } from '../../../config';\nimport { ObserveFn } from '../../../hooks/useIntersectionObserver';\nimport useLang from '../../../hooks/useLang';\n\nimport ListItem from '../../ui/ListItem';\nimport Button from '../../ui/Button';\nimport StickerSetCoverAnimated from '../../middle/composer/StickerSetCoverAnimated';\nimport StickerSetCover from '../../middle/composer/StickerSetCover';\nimport StickerButton from '../../common/StickerButton';\n\nimport './SettingsStickerSet.scss';\n\ntype OwnProps = {\n stickerSet?: ApiStickerSet;\n observeIntersection: ObserveFn;\n onClick: (value: ApiSticker) => void;\n};\n\nconst SettingsStickerSet: FC = ({\n stickerSet,\n observeIntersection,\n onClick,\n}) => {\n const lang = useLang();\n\n if (!stickerSet || !stickerSet.stickers) {\n return undefined;\n }\n\n const firstSticker = stickerSet.stickers?.[0];\n\n if (stickerSet.hasThumbnail || !firstSticker) {\n return (\n firstSticker && onClick(firstSticker)}\n >\n \n {stickerSet.isLottie ? (\n \n ) : (\n \n )}\n \n
\n
{stickerSet.title}
\n
{lang('StickerPack.StickerCount', stickerSet.count, 'i')}
\n
\n \n );\n } else {\n return (\n onClick(firstSticker)}\n >\n \n
\n
{stickerSet.title}
\n
{lang('StickerPack.StickerCount', stickerSet.count, 'i')}
\n
\n \n );\n }\n};\n\nexport default memo(SettingsStickerSet);\n","import React, {\n FC, useCallback, memo, useRef, useState,\n} from '../../../lib/teact/teact';\nimport { getActions, withGlobal } from '../../../global';\n\nimport { SettingsScreens, ISettings, TimeFormat } from '../../../types';\nimport { ApiSticker, ApiStickerSet } from '../../../api/types';\n\nimport { IS_IOS, IS_MAC_OS, IS_TOUCH_ENV } from '../../../util/environment';\nimport { pick } from '../../../util/iteratees';\nimport { setTimeFormat } from '../../../util/langProvider';\nimport useLang from '../../../hooks/useLang';\nimport useFlag from '../../../hooks/useFlag';\nimport { useIntersectionObserver } from '../../../hooks/useIntersectionObserver';\nimport useHistoryBack from '../../../hooks/useHistoryBack';\n\nimport ListItem from '../../ui/ListItem';\nimport RangeSlider from '../../ui/RangeSlider';\nimport Checkbox from '../../ui/Checkbox';\nimport RadioGroup, { IRadioOption } from '../../ui/RadioGroup';\nimport SettingsStickerSet from './SettingsStickerSet';\nimport StickerSetModal from '../../common/StickerSetModal.async';\nimport ReactionStaticEmoji from '../../common/ReactionStaticEmoji';\n\ntype OwnProps = {\n isActive?: boolean;\n onScreenSelect: (screen: SettingsScreens) => void;\n onReset: () => void;\n};\n\ntype StateProps =\n Pick & {\n stickerSetIds?: string[];\n stickerSetsById?: Record;\n defaultReaction?: string;\n };\n\nconst ANIMATION_LEVEL_OPTIONS = [\n 'Solid and Steady',\n 'Nice and Fast',\n 'Lots of Stuff',\n];\n\nconst TIME_FORMAT_OPTIONS: IRadioOption[] = [{\n label: '12-hour',\n value: '12h',\n}, {\n label: '24-hour',\n value: '24h',\n}];\n\nconst SettingsGeneral: FC = ({\n isActive,\n onScreenSelect,\n onReset,\n stickerSetIds,\n stickerSetsById,\n defaultReaction,\n messageTextSize,\n animationLevel,\n messageSendKeyCombo,\n shouldSuggestStickers,\n shouldLoopStickers,\n timeFormat,\n}) => {\n const {\n setSettingOption,\n } = getActions();\n\n // eslint-disable-next-line no-null/no-null\n const stickerSettingsRef = useRef(null);\n const { observe: observeIntersectionForCovers } = useIntersectionObserver({ rootRef: stickerSettingsRef });\n const [isModalOpen, openModal, closeModal] = useFlag();\n const [sticker, setSticker] = useState();\n\n const lang = useLang();\n\n const KEYBOARD_SEND_OPTIONS = !IS_TOUCH_ENV ? [\n { value: 'enter', label: lang('lng_settings_send_enter'), subLabel: 'New line by Shift + Enter' },\n {\n value: 'ctrl-enter',\n label: lang(IS_MAC_OS ? 'lng_settings_send_cmdenter' : 'lng_settings_send_ctrlenter'),\n subLabel: 'New line by Enter',\n },\n ] : undefined;\n\n const handleAnimationLevelChange = useCallback((newLevel: number) => {\n ANIMATION_LEVEL_OPTIONS.forEach((_, i) => {\n document.body.classList.toggle(`animation-level-${i}`, newLevel === i);\n });\n\n setSettingOption({ animationLevel: newLevel });\n }, [setSettingOption]);\n\n const handleMessageTextSizeChange = useCallback((newSize: number) => {\n document.documentElement.style.setProperty(\n '--composer-text-size', `${Math.max(newSize, IS_IOS ? 16 : 15)}px`,\n );\n document.documentElement.style.setProperty('--message-meta-height', `${Math.floor(newSize * 1.3125)}px`);\n document.documentElement.style.setProperty('--message-text-size', `${newSize}px`);\n document.documentElement.setAttribute('data-message-text-size', newSize.toString());\n\n setSettingOption({ messageTextSize: newSize });\n }, [setSettingOption]);\n\n const handleTimeFormatChange = useCallback((newTimeFormat: string) => {\n setSettingOption({ timeFormat: newTimeFormat });\n setSettingOption({ wasTimeFormatSetManually: true });\n\n setTimeFormat(newTimeFormat as TimeFormat);\n }, [setSettingOption]);\n\n const handleStickerSetClick = useCallback((value: ApiSticker) => {\n setSticker(value);\n openModal();\n }, [openModal]);\n\n const handleMessageSendComboChange = useCallback((newCombo: string) => {\n setSettingOption({ messageSendKeyCombo: newCombo });\n }, [setSettingOption]);\n\n const handleSuggestStickersChange = useCallback((newValue: boolean) => {\n setSettingOption({ shouldSuggestStickers: newValue });\n }, [setSettingOption]);\n\n const handleShouldLoopStickersChange = useCallback((newValue: boolean) => {\n setSettingOption({ shouldLoopStickers: newValue });\n }, [setSettingOption]);\n\n const stickerSets = stickerSetIds && stickerSetIds.map((id: string) => {\n return stickerSetsById?.[id]?.installedDate ? stickerSetsById[id] : false;\n }).filter(Boolean as any);\n\n useHistoryBack(isActive, onReset, onScreenSelect, SettingsScreens.General);\n\n return (\n
\n
\n

{lang('SETTINGS')}

\n\n \n\n onScreenSelect(SettingsScreens.GeneralChatBackground)}\n >\n {lang('ChatBackground')}\n \n
\n\n
\n

\n Time Format\n

\n \n
\n\n
\n

\n Animation Level\n

\n

\n Choose the desired animations amount.\n

\n\n \n
\n\n {KEYBOARD_SEND_OPTIONS && (\n
\n

{lang('VoiceOver.Keyboard')}

\n\n \n
\n )}\n\n
\n

{lang('AccDescrStickers')}

\n\n {defaultReaction && (\n onScreenSelect(SettingsScreens.QuickReaction)}\n >\n \n
{lang('DoubleTapSetting')}
\n \n )}\n\n \n \n\n
\n {stickerSets && stickerSets.map((stickerSet: ApiStickerSet) => (\n \n ))}\n
\n {sticker && (\n \n )}\n
\n
\n );\n};\n\nexport default memo(withGlobal(\n (global): StateProps => {\n return {\n ...pick(global.settings.byKey, [\n 'messageTextSize',\n 'animationLevel',\n 'messageSendKeyCombo',\n 'shouldSuggestStickers',\n 'shouldLoopStickers',\n 'isSensitiveEnabled',\n 'canChangeSensitive',\n 'timeFormat',\n ]),\n stickerSetIds: global.stickers.added.setIds,\n stickerSetsById: global.stickers.setsById,\n defaultReaction: global.appConfig?.defaultReaction,\n };\n },\n)(SettingsGeneral));\n","/* eslint-disable eqeqeq */\n/* eslint-disable prefer-template */\n/* eslint-disable prefer-const */\n/* eslint-disable prefer-destructuring */\n/* eslint-disable one-var */\n/* eslint-disable one-var-declaration-per-line */\n\nimport { preloadImage } from './files';\n\n/**\n * HEX > RGB\n * input: 'xxxxxx' (ex. 'ed15fa') case-insensitive\n * output: [r, g, b] ([0-255, 0-255, 0-255])\n */\nexport function hex2rgb(param: string): [number, number, number] {\n return [\n parseInt(param.substring(0, 2), 16),\n parseInt(param.substring(2, 4), 16),\n parseInt(param.substring(4, 6), 16),\n ];\n}\n\n/**\n * RGB > HEX\n * input: [r, g, b] ([0-255, 0-255, 0-255])\n * output: 'xxxxxx' (ex. 'ff0000')\n */\nexport function rgb2hex(param: [number, number, number]) {\n const p0 = param[0].toString(16);\n const p1 = param[1].toString(16);\n const p2 = param[2].toString(16);\n return (p0.length == 1 ? '0' + p0 : p0) + (p1.length == 1 ? '0' + p1 : p1) + (p2.length == 1 ? '0' + p2 : p2);\n}\n\n/**\n * Converts an RGB color value to HSV. Conversion formula\n * adapted from http://en.wikipedia.org/wiki/HSV_color_space.\n * Assumes r, g, and b are contained in the set [0, 255] and\n * returns h, s, and v in the set [0, 1].\n *\n * @param Number r The red color value\n * @param Number g The green color value\n * @param Number b The blue color value\n * @return Array The HSV representation\n */\nexport function rgb2hsb([r, g, b]: [number, number, number]): [number, number, number] {\n r /= 255;\n g /= 255;\n b /= 255;\n\n let max = Math.max(r, g, b), min = Math.min(r, g, b);\n let h!: number, s: number, v: number = max;\n\n let d = max - min;\n s = max == 0 ? 0 : d / max;\n\n if (max == min) {\n h = 0; // achromatic\n } else {\n switch (max) {\n case r:\n h = (g - b) / d + (g < b ? 6 : 0);\n break;\n case g:\n h = (b - r) / d + 2;\n break;\n case b:\n h = (r - g) / d + 4;\n break;\n }\n\n h /= 6;\n }\n\n return [h, s, v];\n}\n\n/**\n * Converts an HSV color value to RGB. Conversion formula\n * adapted from http://en.wikipedia.org/wiki/HSV_color_space.\n * Assumes h, s, and v are contained in the set [0, 1] and\n * returns r, g, and b in the set [0, 255].\n *\n * @param Number h The hue\n * @param Number s The saturation\n * @param Number v The value\n * @return Array The RGB representation\n */\nexport function hsb2rgb([h, s, v]: [number, number, number]): [number, number, number] {\n let r!: number, g!: number, b!: number;\n\n let i = Math.floor(h * 6);\n let f = h * 6 - i;\n let p = v * (1 - s);\n let q = v * (1 - f * s);\n let t = v * (1 - (1 - f) * s);\n\n switch (i % 6) {\n case 0:\n r = v;\n g = t;\n b = p;\n break;\n case 1:\n r = q;\n g = v;\n b = p;\n break;\n case 2:\n r = p;\n g = v;\n b = t;\n break;\n case 3:\n r = p;\n g = q;\n b = v;\n break;\n case 4:\n r = t;\n g = p;\n b = v;\n break;\n case 5:\n r = v;\n g = p;\n b = q;\n break;\n }\n\n return [\n Math.round(r * 255),\n Math.round(g * 255),\n Math.round(b * 255),\n ];\n}\n\nexport async function getAverageColor(url: string): Promise<[number, number, number]> {\n // Only visit every 5 pixels\n const blockSize = 5;\n const defaultRGB: [number, number, number] = [0, 0, 0];\n let data;\n let width;\n let height;\n let i = -4;\n let length;\n let rgb: [number, number, number] = [0, 0, 0];\n let count = 0;\n\n const canvas = document.createElement('canvas');\n const context = canvas.getContext && canvas.getContext('2d');\n if (!context) {\n return defaultRGB;\n }\n\n const image = await preloadImage(url);\n height = image.naturalHeight || image.offsetHeight || image.height;\n width = image.naturalWidth || image.offsetWidth || image.width;\n canvas.height = height;\n canvas.width = width;\n\n context.drawImage(image, 0, 0);\n\n try {\n data = context.getImageData(0, 0, width, height);\n } catch (e) {\n return defaultRGB;\n }\n\n length = data.data.length;\n\n // eslint-disable-next-line no-cond-assign\n while ((i += blockSize * 4) < length) {\n ++count;\n rgb[0] += data.data[i];\n rgb[1] += data.data[i + 1];\n rgb[2] += data.data[i + 2];\n }\n\n rgb[0] = Math.floor(rgb[0] / count);\n rgb[1] = Math.floor(rgb[1] / count);\n rgb[2] = Math.floor(rgb[2] / count);\n\n return rgb;\n}\n\n// eslint-disable-next-line max-len\n// Function was adapted from https://github.com/telegramdesktop/tdesktop/blob/35ff621b5b52f7e3553fb0f990ea13ade7101b8e/Telegram/SourceFiles/data/data_wall_paper.cpp#L518\nexport function getPatternColor(rgbColor: [number, number, number]) {\n let [hue, saturation, value] = rgb2hsb(rgbColor);\n\n saturation = Math.min(1, saturation + 0.05 + 0.1 * (1 - saturation));\n value = value > 0.5\n ? Math.max(0, value * 0.65)\n : Math.max(0, Math.min(1, 1 - value * 0.65));\n\n return `hsla(${hue * 360}, ${saturation * 100}%, ${value * 100}%, .4)`;\n}\n","import React, {\n FC, memo, useCallback, useEffect, useState, useRef,\n} from '../../../lib/teact/teact';\nimport { ApiWallpaper } from '../../../api/types';\nimport { ThemeKey, UPLOADING_WALLPAPER_SLUG } from '../../../types';\n\nimport { CUSTOM_BG_CACHE_NAME } from '../../../config';\nimport * as cacheApi from '../../../util/cacheApi';\nimport { fetchBlob } from '../../../util/files';\nimport buildClassName from '../../../util/buildClassName';\nimport useMedia from '../../../hooks/useMedia';\nimport useMediaWithLoadProgress from '../../../hooks/useMediaWithLoadProgress';\nimport useShowTransition from '../../../hooks/useShowTransition';\nimport usePrevious from '../../../hooks/usePrevious';\nimport useCanvasBlur from '../../../hooks/useCanvasBlur';\n\nimport ProgressSpinner from '../../ui/ProgressSpinner';\n\nimport './WallpaperTile.scss';\n\ntype OwnProps = {\n wallpaper: ApiWallpaper;\n theme: ThemeKey;\n isSelected: boolean;\n onClick: (slug: string) => void;\n};\n\nconst WallpaperTile: FC = ({\n wallpaper,\n theme,\n isSelected,\n onClick,\n}) => {\n const { slug, document } = wallpaper;\n const localMediaHash = `wallpaper${document.id!}`;\n const localBlobUrl = document.previewBlobUrl;\n const previewBlobUrl = useMedia(`${localMediaHash}?size=m`);\n const thumbRef = useCanvasBlur(document.thumbnail?.dataUri, Boolean(previewBlobUrl), true);\n const { transitionClassNames } = useShowTransition(\n Boolean(previewBlobUrl || localBlobUrl),\n undefined,\n undefined,\n 'slow',\n );\n const [isLoadAllowed, setIsLoadAllowed] = useState(false);\n const {\n mediaData: fullMedia, loadProgress,\n } = useMediaWithLoadProgress(localMediaHash, !isLoadAllowed);\n const wasLoadDisabled = usePrevious(isLoadAllowed) === false;\n const { shouldRender: shouldRenderSpinner, transitionClassNames: spinnerClassNames } = useShowTransition(\n (isLoadAllowed && !fullMedia) || slug === UPLOADING_WALLPAPER_SLUG,\n undefined,\n wasLoadDisabled,\n 'slow',\n );\n // To prevent triggering of the effect for useCallback\n const cacheKeyRef = useRef();\n cacheKeyRef.current = theme;\n\n const handleSelect = useCallback(() => {\n (async () => {\n const blob = await fetchBlob(fullMedia!);\n await cacheApi.save(CUSTOM_BG_CACHE_NAME, cacheKeyRef.current!, blob);\n onClick(slug);\n })();\n }, [fullMedia, onClick, slug]);\n\n useEffect(() => {\n if (fullMedia) {\n handleSelect();\n }\n }, [fullMedia, handleSelect]);\n\n const handleClick = useCallback(() => {\n if (fullMedia) {\n handleSelect();\n } else {\n setIsLoadAllowed((isAllowed) => !isAllowed);\n }\n }, [fullMedia, handleSelect]);\n\n const className = buildClassName(\n 'WallpaperTile',\n isSelected && 'selected',\n );\n\n return (\n
\n
\n \n \n {shouldRenderSpinner && (\n
\n \n
\n )}\n
\n
\n );\n};\n\nexport default memo(WallpaperTile);\n","import React, {\n FC, memo, useEffect, useCallback, useRef,\n} from '../../../lib/teact/teact';\nimport { getActions, withGlobal } from '../../../global';\n\nimport { SettingsScreens, ThemeKey, UPLOADING_WALLPAPER_SLUG } from '../../../types';\nimport { ApiWallpaper } from '../../../api/types';\n\nimport { DARK_THEME_PATTERN_COLOR, DEFAULT_PATTERN_COLOR } from '../../../config';\nimport { throttle } from '../../../util/schedulers';\nimport { openSystemFilesDialog } from '../../../util/systemFilesDialog';\nimport { getAverageColor, getPatternColor, rgb2hex } from '../../../util/colors';\nimport { selectTheme } from '../../../global/selectors';\nimport useLang from '../../../hooks/useLang';\nimport useHistoryBack from '../../../hooks/useHistoryBack';\n\nimport ListItem from '../../ui/ListItem';\nimport Checkbox from '../../ui/Checkbox';\nimport Loading from '../../ui/Loading';\nimport WallpaperTile from './WallpaperTile';\n\nimport './SettingsGeneralBackground.scss';\n\ntype OwnProps = {\n isActive?: boolean;\n onScreenSelect: (screen: SettingsScreens) => void;\n onReset: () => void;\n};\n\ntype StateProps = {\n background?: string;\n isBlurred?: boolean;\n loadedWallpapers?: ApiWallpaper[];\n theme: ThemeKey;\n};\n\nconst SUPPORTED_TYPES = 'image/jpeg';\n\nconst runThrottled = throttle((cb) => cb(), 60000, true);\n\nconst SettingsGeneralBackground: FC = ({\n isActive,\n onScreenSelect,\n onReset,\n background,\n isBlurred,\n loadedWallpapers,\n theme,\n}) => {\n const {\n loadWallpapers,\n uploadWallpaper,\n setThemeSettings,\n } = getActions();\n\n const themeRef = useRef();\n themeRef.current = theme;\n // Due to the parent Transition, this component never gets unmounted,\n // that's why we use throttled API call on every update.\n useEffect(() => {\n runThrottled(() => {\n loadWallpapers();\n });\n }, [loadWallpapers]);\n\n const handleFileSelect = useCallback((e: Event) => {\n const { files } = e.target as HTMLInputElement;\n\n if (files && files.length > 0) {\n uploadWallpaper(files[0]);\n }\n }, [uploadWallpaper]);\n\n const handleUploadWallpaper = useCallback(() => {\n openSystemFilesDialog(SUPPORTED_TYPES, handleFileSelect, true);\n }, [handleFileSelect]);\n\n const handleSetColor = useCallback(() => {\n onScreenSelect(SettingsScreens.GeneralChatBackgroundColor);\n }, [onScreenSelect]);\n\n const handleResetToDefault = useCallback(() => {\n setThemeSettings({\n theme,\n background: undefined,\n backgroundColor: undefined,\n isBlurred: true,\n patternColor: theme === 'dark' ? DARK_THEME_PATTERN_COLOR : DEFAULT_PATTERN_COLOR,\n });\n }, [setThemeSettings, theme]);\n\n const handleWallPaperSelect = useCallback((slug: string) => {\n setThemeSettings({ theme: themeRef.current, background: slug });\n const currentWallpaper = loadedWallpapers && loadedWallpapers.find((wallpaper) => wallpaper.slug === slug);\n if (currentWallpaper?.document.thumbnail) {\n getAverageColor(currentWallpaper.document.thumbnail.dataUri)\n .then((color) => {\n const patternColor = getPatternColor(color);\n const rgbColor = `#${rgb2hex(color)}`;\n setThemeSettings({ theme: themeRef.current, backgroundColor: rgbColor, patternColor });\n });\n }\n }, [loadedWallpapers, setThemeSettings]);\n\n const handleWallPaperBlurChange = useCallback((e: React.ChangeEvent) => {\n setThemeSettings({ theme: themeRef.current, isBlurred: e.target.checked });\n }, [setThemeSettings]);\n\n const lang = useLang();\n\n useHistoryBack(isActive, onReset, onScreenSelect, SettingsScreens.GeneralChatBackground);\n\n const isUploading = loadedWallpapers?.[0] && loadedWallpapers[0].slug === UPLOADING_WALLPAPER_SLUG;\n\n return (\n
\n
\n \n {lang('UploadImage')}\n \n\n \n {lang('SetColor')}\n \n\n \n {lang('ThemeResetToDefaults')}\n \n\n \n
\n\n {loadedWallpapers ? (\n
\n {loadedWallpapers.map((wallpaper) => (\n \n ))}\n
\n ) : (\n \n )}\n
\n );\n};\n\nexport default memo(withGlobal(\n (global): StateProps => {\n const theme = selectTheme(global);\n const { background, isBlurred } = global.settings.themes[theme] || {};\n const { loadedWallpapers } = global.settings;\n\n return {\n background,\n isBlurred,\n loadedWallpapers,\n theme,\n };\n },\n)(SettingsGeneralBackground));\n","import { ChangeEvent, MutableRefObject, RefObject } from 'react';\nimport React, {\n FC, memo, useCallback, useEffect, useRef, useState,\n} from '../../../lib/teact/teact';\nimport { getActions, withGlobal } from '../../../global';\n\nimport { SettingsScreens, ThemeKey } from '../../../types';\n\nimport { pick } from '../../../util/iteratees';\nimport {\n getPatternColor, hex2rgb, hsb2rgb, rgb2hex, rgb2hsb,\n} from '../../../util/colors';\nimport { captureEvents, RealTouchEvent } from '../../../util/captureEvents';\nimport { selectTheme } from '../../../global/selectors';\nimport useFlag from '../../../hooks/useFlag';\nimport buildClassName from '../../../util/buildClassName';\nimport useHistoryBack from '../../../hooks/useHistoryBack';\n\nimport InputText from '../../ui/InputText';\n\nimport './SettingsGeneralBackgroundColor.scss';\n\ntype OwnProps = {\n isActive?: boolean;\n onScreenSelect: (screen: SettingsScreens) => void;\n onReset: () => void;\n};\n\ntype StateProps = {\n backgroundColor?: string;\n theme: ThemeKey;\n};\n\ninterface CanvasRects {\n colorRect: {\n offsetLeft: number;\n top: number;\n width: number;\n height: number;\n };\n hueRect: {\n offsetLeft: number;\n width: number;\n };\n}\n\nconst DEFAULT_HSB = rgb2hsb(hex2rgb('e6ebee'));\nconst PREDEFINED_COLORS = [\n '#e6ebee', '#b2cee1', '#008dd0', '#c6e7cb', '#c4e1a6', '#60b16e',\n '#ccd0af', '#a6a997', '#7a7072', '#fdd7af', '#fdb76e', '#dd8851',\n];\n\nconst SettingsGeneralBackground: FC = ({\n isActive,\n onScreenSelect,\n onReset,\n theme,\n backgroundColor,\n}) => {\n const { setThemeSettings } = getActions();\n\n const themeRef = useRef();\n themeRef.current = theme;\n // eslint-disable-next-line no-null/no-null\n const containerRef = useRef(null);\n // eslint-disable-next-line no-null/no-null\n const colorPickerRef = useRef(null);\n // eslint-disable-next-line no-null/no-null\n const huePickerRef = useRef(null);\n const isFirstRunRef = useRef(true);\n\n const [hsb, setHsb] = useState(getInitialHsb(backgroundColor));\n // Cache for drag handlers\n const hsbRef = useRef(hsb);\n useEffect(() => {\n hsbRef.current = hsb;\n }, [hsb]);\n\n const [isDragging, markIsDragging, unmarkIsDragging] = useFlag();\n const [rgbInput, setRgbInput] = useState('');\n const [hexInput, setHexInput] = useState('');\n\n const rectsRef = useRef();\n const colorCtxRef = useRef();\n\n // Setup: cache rects, subscribe for drag events\n useEffect(() => {\n // We use `offsetLeft` instead of `left` to support screen transition\n const colorRect = {\n offsetLeft: colorPickerRef.current!.offsetLeft,\n ...pick(colorPickerRef.current!.getBoundingClientRect(), ['top', 'width', 'height']),\n };\n const hueRect = {\n offsetLeft: huePickerRef.current!.offsetLeft,\n ...pick(huePickerRef.current!.getBoundingClientRect(), ['width']),\n };\n\n rectsRef.current = { colorRect, hueRect };\n\n function handleColorDrag(e: MouseEvent | RealTouchEvent) {\n const colorPosition = [\n Math.min(Math.max(0, e.pageX! - colorRect.offsetLeft), colorRect.width - 1),\n Math.min(Math.max(0, e.pageY! - colorRect.top + containerRef.current!.scrollTop), colorRect.height - 1),\n ];\n\n const { huePosition } = hsb2positions(hsbRef.current, rectsRef.current!);\n\n setHsb(positions2hsb({ colorPosition, huePosition }, rectsRef.current!));\n markIsDragging();\n\n return true;\n }\n\n captureEvents(colorPickerRef.current!, {\n onCapture: handleColorDrag,\n onDrag: handleColorDrag,\n onRelease: unmarkIsDragging,\n onClick: unmarkIsDragging,\n selectorToPreventScroll: '.SettingsGeneralBackgroundColor',\n withCursor: true,\n });\n\n function handleHueDrag(e: MouseEvent | RealTouchEvent) {\n const { colorPosition } = hsb2positions(hsbRef.current, rectsRef.current!);\n const huePosition = Math.min(Math.max(0, e.pageX! - hueRect.offsetLeft), hueRect.width - 1);\n\n setHsb(positions2hsb({ colorPosition, huePosition }, rectsRef.current!));\n markIsDragging();\n\n return true;\n }\n\n captureEvents(huePickerRef.current!, {\n onCapture: handleHueDrag,\n onDrag: handleHueDrag,\n onRelease: unmarkIsDragging,\n onClick: unmarkIsDragging,\n selectorToPreventScroll: '.SettingsGeneralBackgroundColor',\n withCursor: true,\n });\n }, [markIsDragging, unmarkIsDragging]);\n\n const { colorPosition = [0, 0], huePosition = 0 } = rectsRef.current ? hsb2positions(hsb, rectsRef.current) : {};\n const hex = rgb2hex(hsb2rgb(hsb));\n const hue = hsb[0];\n const hueHex = rgb2hex(hsb2rgb([hue, 1, 1]));\n\n // Save value and update inputs when HSL changes\n useEffect(() => {\n const rgb = hsb2rgb(hsb);\n const color = `#${rgb2hex(rgb)}`;\n\n setRgbInput(rgb.join(', '));\n setHexInput(color);\n\n if (!isFirstRunRef.current) {\n const patternColor = getPatternColor(rgb);\n setThemeSettings({\n theme: themeRef.current,\n background: undefined,\n backgroundColor: color,\n patternColor,\n });\n }\n isFirstRunRef.current = false;\n }, [hsb, setThemeSettings]);\n\n // Redraw color picker when hue changes\n useEffect(() => {\n drawColor(colorPickerRef.current!.firstChild as HTMLCanvasElement, hue, colorCtxRef, rectsRef);\n }, [hue]);\n\n // Initially draw hue picker\n useEffect(() => {\n drawHue(huePickerRef.current!.firstChild as HTMLCanvasElement);\n }, []);\n\n const handleRgbChange = useCallback((e: ChangeEvent) => {\n const rgbValue = e.currentTarget.value.replace(/[^\\d, ]/g, '').slice(0, 13);\n\n if (rgbValue.match(/^\\d{1,3},\\s?\\d{1,3},\\s?\\d{1,3}$/)) {\n const rgb = rgbValue.split(',').map((channel) => Number(channel.trim())) as [number, number, number];\n setHsb(rgb2hsb(rgb));\n }\n\n e.currentTarget.value = rgbValue;\n }, []);\n\n const handleHexChange = useCallback((e: ChangeEvent) => {\n const hexValue = e.currentTarget.value.replace(/[^0-9a-fA-F]/g, '').slice(0, 6);\n\n if (hexValue.match(/^#?[0-9a-fA-F]{6}$/)) {\n setHsb(rgb2hsb(hex2rgb(hexValue.replace('#', ''))));\n }\n\n e.currentTarget.value = hexValue;\n }, []);\n\n const handlePredefinedColorClick = useCallback((e: React.MouseEvent) => {\n setHsb(rgb2hsb(hex2rgb(e.currentTarget.dataset.color!.replace('#', ''))));\n }, []);\n\n const className = buildClassName(\n 'SettingsGeneralBackgroundColor settings-content custom-scroll',\n isDragging && 'is-dragging',\n );\n\n useHistoryBack(isActive, onReset, onScreenSelect, SettingsScreens.GeneralChatBackgroundColor);\n\n return (\n
\n
\n
\n \n \n
\n
\n \n \n
\n
\n \n \n
\n
\n
\n {PREDEFINED_COLORS.map((color) => (\n \n ))}\n
\n
\n );\n};\n\nfunction getInitialHsb(backgroundColor?: string) {\n return backgroundColor && backgroundColor.startsWith('#')\n ? rgb2hsb(hex2rgb(backgroundColor.replace('#', '')))\n : DEFAULT_HSB;\n}\n\nfunction hsb2positions(hsb: [number, number, number], rects: CanvasRects) {\n return {\n colorPosition: [\n Math.round((hsb[1]) * (rects.colorRect.width - 1)),\n Math.round((1 - hsb[2]) * (rects.colorRect.height - 1)),\n ],\n huePosition: Math.round(hsb[0] * (rects.hueRect.width - 1)),\n };\n}\n\nfunction positions2hsb(\n { colorPosition, huePosition }: { colorPosition: number[]; huePosition: number },\n rects: CanvasRects,\n): [number, number, number] {\n return [\n huePosition / (rects.hueRect.width - 1),\n colorPosition[0] / (rects.colorRect.width - 1),\n 1 - colorPosition[1] / (rects.colorRect.height - 1),\n ];\n}\n\nfunction drawColor(\n canvas: HTMLCanvasElement,\n hue: number,\n colorCtxRef: MutableRefObject,\n rectsRef: RefObject,\n) {\n let w: number;\n let h: number;\n let ctx: CanvasRenderingContext2D;\n\n if (!colorCtxRef.current || !rectsRef.current) {\n // First run\n w = canvas.offsetWidth;\n h = canvas.offsetHeight;\n ctx = canvas.getContext('2d')!;\n\n canvas.width = w;\n canvas.height = h;\n\n colorCtxRef.current = ctx;\n } else {\n w = rectsRef.current.colorRect.width;\n h = rectsRef.current.colorRect.height;\n ctx = colorCtxRef.current;\n }\n\n const imgData = ctx!.createImageData(w, h);\n const pixels = imgData.data;\n const col = hsb2rgb([hue, 1, 1]);\n\n let index = 0;\n\n for (let y = 0; y < h; y++) {\n const perY = 1 - y / (h - 1);\n const st = [255 * perY, 255 * perY, 255 * perY];\n const ed = [col[0] * perY, col[1] * perY, col[2] * perY];\n for (let x = 0; x < w; x++) {\n const perX = x / (w - 1);\n pixels[index++] = st[0] + (ed[0] - st[0]) * perX;\n pixels[index++] = st[1] + (ed[1] - st[1]) * perX;\n pixels[index++] = st[2] + (ed[2] - st[2]) * perX;\n pixels[index++] = 255;\n }\n }\n\n ctx!.putImageData(imgData, 0, 0);\n}\n\nfunction drawHue(canvas: HTMLCanvasElement) {\n const w = canvas.offsetWidth;\n const h = 1;\n canvas.width = w;\n canvas.height = h;\n const ctx = canvas.getContext('2d')!;\n\n const imgData = ctx.createImageData(w, h);\n const pixels = imgData.data;\n\n let index = 0;\n\n for (let x = 0; x < w; x++) {\n const hue = x / (w - 1);\n const rgb = hsb2rgb([hue, 1, 1]);\n /* eslint-disable prefer-destructuring */\n pixels[index++] = rgb[0];\n pixels[index++] = rgb[1];\n pixels[index++] = rgb[2];\n /* eslint-enable prefer-destructuring */\n pixels[index++] = 255;\n }\n\n ctx.putImageData(imgData, 0, 0);\n}\n\nexport default memo(withGlobal(\n (global): StateProps => {\n const theme = selectTheme(global);\n const { backgroundColor } = global.settings.themes[theme] || {};\n return {\n backgroundColor,\n theme,\n };\n },\n)(SettingsGeneralBackground));\n","import { ChangeEvent } from 'react';\nimport useDebounce from '../../../hooks/useDebounce';\nimport React, {\n FC, memo, useCallback, useEffect,\n} from '../../../lib/teact/teact';\nimport { getActions, withGlobal } from '../../../global';\n\nimport { SettingsScreens } from '../../../types';\n\nimport useLang from '../../../hooks/useLang';\nimport useHistoryBack from '../../../hooks/useHistoryBack';\nimport { playNotifySound } from '../../../util/notifications';\n\nimport Checkbox from '../../ui/Checkbox';\nimport RangeSlider from '../../ui/RangeSlider';\n\ntype OwnProps = {\n isActive?: boolean;\n onScreenSelect: (screen: SettingsScreens) => void;\n onReset: () => void;\n};\n\ntype StateProps = {\n hasPrivateChatsNotifications: boolean;\n hasPrivateChatsMessagePreview: boolean;\n hasGroupNotifications: boolean;\n hasGroupMessagePreview: boolean;\n hasBroadcastNotifications: boolean;\n hasBroadcastMessagePreview: boolean;\n hasContactJoinedNotifications: boolean;\n hasWebNotifications: boolean;\n hasPushNotifications: boolean;\n notificationSoundVolume: number;\n};\n\nconst SettingsNotifications: FC = ({\n isActive,\n onScreenSelect,\n onReset,\n hasPrivateChatsNotifications,\n hasPrivateChatsMessagePreview,\n hasGroupNotifications,\n hasGroupMessagePreview,\n hasBroadcastNotifications,\n hasBroadcastMessagePreview,\n hasContactJoinedNotifications,\n hasPushNotifications,\n hasWebNotifications,\n notificationSoundVolume,\n}) => {\n const {\n loadNotificationSettings,\n updateContactSignUpNotification,\n updateNotificationSettings,\n updateWebNotificationSettings,\n } = getActions();\n\n useEffect(() => {\n loadNotificationSettings();\n }, [loadNotificationSettings]);\n\n const runDebounced = useDebounce(500, true);\n\n const handleSettingsChange = useCallback((\n e: ChangeEvent,\n peerType: 'contact' | 'group' | 'broadcast',\n setting: 'silent' | 'showPreviews',\n ) => {\n const currentIsSilent = peerType === 'contact'\n ? !hasPrivateChatsNotifications\n : !(peerType === 'group' ? hasGroupNotifications : hasBroadcastNotifications);\n const currentShouldShowPreviews = peerType === 'contact'\n ? hasPrivateChatsMessagePreview\n : (peerType === 'group' ? hasGroupMessagePreview : hasBroadcastMessagePreview);\n\n updateNotificationSettings({\n peerType,\n ...(setting === 'silent' && { isSilent: !e.target.checked, shouldShowPreviews: currentShouldShowPreviews }),\n ...(setting === 'showPreviews' && { shouldShowPreviews: e.target.checked, isSilent: currentIsSilent }),\n });\n }, [\n hasBroadcastMessagePreview, hasBroadcastNotifications,\n hasGroupMessagePreview, hasGroupNotifications,\n hasPrivateChatsMessagePreview, hasPrivateChatsNotifications,\n updateNotificationSettings,\n ]);\n\n const handleWebNotificationsChange = useCallback((e: ChangeEvent) => {\n updateWebNotificationSettings({\n hasWebNotifications: e.target.checked,\n });\n }, [updateWebNotificationSettings]);\n\n const handlePushNotificationsChange = useCallback((e: ChangeEvent) => {\n updateWebNotificationSettings({\n hasPushNotifications: e.target.checked,\n });\n }, [updateWebNotificationSettings]);\n\n const handlePrivateChatsNotificationsChange = useCallback((e: ChangeEvent) => {\n handleSettingsChange(e, 'contact', 'silent');\n }, [handleSettingsChange]);\n\n const handlePrivateChatsPreviewChange = useCallback((e: ChangeEvent) => {\n handleSettingsChange(e, 'contact', 'showPreviews');\n }, [handleSettingsChange]);\n\n const handleGroupsNotificationsChange = useCallback((e: ChangeEvent) => {\n handleSettingsChange(e, 'group', 'silent');\n }, [handleSettingsChange]);\n\n const handleGroupsPreviewChange = useCallback((e: ChangeEvent) => {\n handleSettingsChange(e, 'group', 'showPreviews');\n }, [handleSettingsChange]);\n\n const handleChannelsNotificationsChange = useCallback((e: ChangeEvent) => {\n handleSettingsChange(e, 'broadcast', 'silent');\n }, [handleSettingsChange]);\n\n const handleChannelsPreviewChange = useCallback((e: ChangeEvent) => {\n handleSettingsChange(e, 'broadcast', 'showPreviews');\n }, [handleSettingsChange]);\n\n const handleContactNotificationChange = useCallback((e: ChangeEvent) => {\n updateContactSignUpNotification({\n isSilent: !e.target.checked,\n });\n }, [updateContactSignUpNotification]);\n\n const handleVolumeChange = useCallback((volume: number) => {\n updateWebNotificationSettings({\n notificationSoundVolume: volume,\n });\n runDebounced(() => playNotifySound(undefined, volume));\n }, [runDebounced, updateWebNotificationSettings]);\n\n const lang = useLang();\n\n useHistoryBack(isActive, onReset, onScreenSelect, SettingsScreens.Notifications);\n\n return (\n
\n
\n

\n Web notifications\n

\n \n \n
\n \n
\n
\n
\n

\n {lang('AutodownloadPrivateChats')}\n

\n\n \n \n
\n\n
\n

{lang('FilterGroups')}

\n\n \n \n
\n\n
\n

{lang('FilterChannels')}

\n\n \n \n
\n\n
\n

{lang('PhoneOther')}

\n\n \n
\n
\n );\n};\n\nexport default memo(withGlobal(\n (global): StateProps => {\n return {\n hasPrivateChatsNotifications: Boolean(global.settings.byKey.hasPrivateChatsNotifications),\n hasPrivateChatsMessagePreview: Boolean(global.settings.byKey.hasPrivateChatsMessagePreview),\n hasGroupNotifications: Boolean(global.settings.byKey.hasGroupNotifications),\n hasGroupMessagePreview: Boolean(global.settings.byKey.hasGroupMessagePreview),\n hasBroadcastNotifications: Boolean(global.settings.byKey.hasBroadcastNotifications),\n hasBroadcastMessagePreview: Boolean(global.settings.byKey.hasBroadcastMessagePreview),\n hasContactJoinedNotifications: Boolean(global.settings.byKey.hasContactJoinedNotifications),\n hasWebNotifications: global.settings.byKey.hasWebNotifications,\n hasPushNotifications: global.settings.byKey.hasPushNotifications,\n notificationSoundVolume: global.settings.byKey.notificationSoundVolume,\n };\n },\n)(SettingsNotifications));\n","import React, { FC, memo, useEffect } from '../../../lib/teact/teact';\nimport { getActions, withGlobal } from '../../../global';\n\nimport { PrivacyVisibility, SettingsScreens } from '../../../types';\n\nimport useLang from '../../../hooks/useLang';\nimport useHistoryBack from '../../../hooks/useHistoryBack';\n\nimport ListItem from '../../ui/ListItem';\nimport Checkbox from '../../ui/Checkbox';\n\ntype OwnProps = {\n isActive?: boolean;\n onScreenSelect: (screen: SettingsScreens) => void;\n onReset: () => void;\n};\n\ntype StateProps = {\n hasPassword?: boolean;\n blockedCount: number;\n sessionsCount: number;\n isSensitiveEnabled?: boolean;\n canChangeSensitive?: boolean;\n visibilityPrivacyPhoneNumber?: PrivacyVisibility;\n visibilityPrivacyLastSeen?: PrivacyVisibility;\n visibilityPrivacyProfilePhoto?: PrivacyVisibility;\n visibilityPrivacyForwarding?: PrivacyVisibility;\n visibilityPrivacyGroupChats?: PrivacyVisibility;\n};\n\nconst SettingsPrivacy: FC = ({\n isActive,\n onScreenSelect,\n onReset,\n hasPassword,\n blockedCount,\n sessionsCount,\n isSensitiveEnabled,\n canChangeSensitive,\n visibilityPrivacyPhoneNumber,\n visibilityPrivacyLastSeen,\n visibilityPrivacyProfilePhoto,\n visibilityPrivacyForwarding,\n visibilityPrivacyGroupChats,\n\n}) => {\n const {\n loadPrivacySettings,\n loadBlockedContacts,\n loadAuthorizations,\n loadContentSettings,\n updateContentSettings,\n } = getActions();\n\n useEffect(() => {\n loadBlockedContacts();\n loadAuthorizations();\n loadPrivacySettings();\n loadContentSettings();\n }, [loadBlockedContacts, loadAuthorizations, loadPrivacySettings, loadContentSettings]);\n\n const lang = useLang();\n\n useHistoryBack(isActive, onReset, onScreenSelect, SettingsScreens.Privacy);\n\n function getVisibilityValue(visibility?: PrivacyVisibility) {\n switch (visibility) {\n case 'everybody':\n return lang('P2PEverybody');\n\n case 'contacts':\n return lang('P2PContacts');\n\n case 'nobody':\n return lang('P2PNobody');\n }\n\n return undefined;\n }\n\n return (\n
\n
\n onScreenSelect(SettingsScreens.PrivacyBlockedUsers)}\n >\n
\n {lang('BlockedUsers')}\n {blockedCount > 0 && (\n \n {lang('Users', blockedCount)}\n \n )}\n
\n \n onScreenSelect(\n hasPassword ? SettingsScreens.TwoFaEnabled : SettingsScreens.TwoFaDisabled,\n )}\n >\n
\n {lang('TwoStepVerification')}\n \n {lang(hasPassword ? 'PasswordOn' : 'PasswordOff')}\n \n
\n \n onScreenSelect(SettingsScreens.PrivacyActiveSessions)}\n >\n
\n {lang('SessionsTitle')}\n {sessionsCount > 0 && (\n \n {sessionsCount === 1 ? '1 session' : `${sessionsCount} sessions`}\n \n )}\n
\n \n
\n\n
\n

{lang('PrivacyTitle')}

\n\n onScreenSelect(SettingsScreens.PrivacyPhoneNumber)}\n >\n
\n {lang('PrivacyPhoneTitle')}\n \n {getVisibilityValue(visibilityPrivacyPhoneNumber)}\n \n
\n \n onScreenSelect(SettingsScreens.PrivacyLastSeen)}\n >\n
\n {lang('LastSeenTitle')}\n \n {getVisibilityValue(visibilityPrivacyLastSeen)}\n \n
\n \n onScreenSelect(SettingsScreens.PrivacyProfilePhoto)}\n >\n
\n {lang('PrivacyProfilePhotoTitle')}\n \n {getVisibilityValue(visibilityPrivacyProfilePhoto)}\n \n
\n \n onScreenSelect(SettingsScreens.PrivacyForwarding)}\n >\n
\n {lang('PrivacyForwardsTitle')}\n \n {getVisibilityValue(visibilityPrivacyForwarding)}\n \n
\n \n onScreenSelect(SettingsScreens.PrivacyGroupChats)}\n >\n
\n {lang('WhoCanAddMe')}\n \n {getVisibilityValue(visibilityPrivacyGroupChats)}\n \n
\n \n
\n\n {canChangeSensitive && (\n
\n

\n {lang('lng_settings_sensitive_title')}\n

\n \n
\n )}\n
\n );\n};\n\nexport default memo(withGlobal(\n (global): StateProps => {\n const {\n settings: {\n byKey: { hasPassword, isSensitiveEnabled, canChangeSensitive },\n privacy,\n },\n blocked,\n activeSessions,\n } = global;\n\n return {\n hasPassword,\n blockedCount: blocked.totalCount,\n sessionsCount: activeSessions.length,\n isSensitiveEnabled,\n canChangeSensitive,\n visibilityPrivacyPhoneNumber: privacy.phoneNumber?.visibility,\n visibilityPrivacyLastSeen: privacy.lastSeen?.visibility,\n visibilityPrivacyProfilePhoto: privacy.profilePhoto?.visibility,\n visibilityPrivacyForwarding: privacy.forwards?.visibility,\n visibilityPrivacyGroupChats: privacy.chatInvite?.visibility,\n };\n },\n)(SettingsPrivacy));\n","import React, {\n FC, memo, useCallback, useEffect, useMemo, useState,\n} from '../../../lib/teact/teact';\nimport { getActions, withGlobal } from '../../../global';\n\nimport { ISettings, LangCode, SettingsScreens } from '../../../types';\nimport { ApiLanguage } from '../../../api/types';\n\nimport { setLanguage } from '../../../util/langProvider';\n\nimport RadioGroup from '../../ui/RadioGroup';\nimport Loading from '../../ui/Loading';\nimport useFlag from '../../../hooks/useFlag';\nimport useHistoryBack from '../../../hooks/useHistoryBack';\n\ntype OwnProps = {\n isActive?: boolean;\n onScreenSelect: (screen: SettingsScreens) => void;\n onReset: () => void;\n};\n\ntype StateProps = Pick;\n\nconst SettingsLanguage: FC = ({\n isActive,\n onScreenSelect,\n onReset,\n languages,\n language,\n}) => {\n const {\n loadLanguages,\n setSettingOption,\n } = getActions();\n\n const [selectedLanguage, setSelectedLanguage] = useState(language);\n const [isLoading, markIsLoading, unmarkIsLoading] = useFlag();\n\n // TODO Throttle\n useEffect(() => {\n loadLanguages();\n }, [loadLanguages]);\n\n const handleChange = useCallback((langCode: string) => {\n setSelectedLanguage(langCode);\n markIsLoading();\n\n void setLanguage(langCode as LangCode, () => {\n unmarkIsLoading();\n\n setSettingOption({ language: langCode });\n });\n }, [markIsLoading, unmarkIsLoading, setSettingOption]);\n\n const options = useMemo(() => {\n return languages ? buildOptions(languages) : undefined;\n }, [languages]);\n\n useHistoryBack(isActive, onReset, onScreenSelect, SettingsScreens.Language);\n\n return (\n
\n {options ? (\n \n ) : (\n \n )}\n
\n );\n};\n\nfunction buildOptions(languages: ApiLanguage[]) {\n const currentLangCode = (window.navigator.language || 'en').toLowerCase();\n const shortLangCode = currentLangCode.substr(0, 2);\n\n return languages.map(({ langCode, nativeName, name }) => ({\n value: langCode,\n label: nativeName,\n subLabel: name,\n })).sort((a) => {\n return currentLangCode && (a.value === currentLangCode || a.value === shortLangCode) ? -1 : 0;\n });\n}\n\nexport default memo(withGlobal(\n (global): StateProps => {\n return {\n languages: global.settings.byKey.languages,\n language: global.settings.byKey.language,\n };\n },\n)(SettingsLanguage));\n","import { ApiPrivacyKey, SettingsScreens } from '../../../../types';\n\nexport function getPrivacyKey(screen: SettingsScreens): ApiPrivacyKey | undefined {\n switch (screen) {\n case SettingsScreens.PrivacyPhoneNumber:\n case SettingsScreens.PrivacyPhoneNumberAllowedContacts:\n case SettingsScreens.PrivacyPhoneNumberDeniedContacts:\n return 'phoneNumber';\n case SettingsScreens.PrivacyLastSeen:\n case SettingsScreens.PrivacyLastSeenAllowedContacts:\n case SettingsScreens.PrivacyLastSeenDeniedContacts:\n return 'lastSeen';\n case SettingsScreens.PrivacyProfilePhoto:\n case SettingsScreens.PrivacyProfilePhotoAllowedContacts:\n case SettingsScreens.PrivacyProfilePhotoDeniedContacts:\n return 'profilePhoto';\n case SettingsScreens.PrivacyForwarding:\n case SettingsScreens.PrivacyForwardingAllowedContacts:\n case SettingsScreens.PrivacyForwardingDeniedContacts:\n return 'forwards';\n case SettingsScreens.PrivacyGroupChats:\n case SettingsScreens.PrivacyGroupChatsAllowedContacts:\n case SettingsScreens.PrivacyGroupChatsDeniedContacts:\n return 'chatInvite';\n }\n\n return undefined;\n}\n","import React, {\n FC, memo, useCallback, useMemo,\n} from '../../../lib/teact/teact';\nimport { getActions, withGlobal } from '../../../global';\n\nimport { ApiChat, ApiUser } from '../../../api/types';\nimport { ApiPrivacySettings, SettingsScreens } from '../../../types';\n\nimport useLang from '../../../hooks/useLang';\nimport useHistoryBack from '../../../hooks/useHistoryBack';\n\nimport ListItem from '../../ui/ListItem';\nimport RadioGroup from '../../ui/RadioGroup';\nimport { getPrivacyKey } from './helper/privacy';\n\ntype OwnProps = {\n screen: SettingsScreens;\n isActive?: boolean;\n onScreenSelect: (screen: SettingsScreens) => void;\n onReset: () => void;\n};\n\ntype StateProps =\n Partial & {\n chatsById?: Record;\n usersById?: Record;\n };\n\nconst SettingsPrivacyVisibility: FC = ({\n screen,\n isActive,\n onScreenSelect,\n onReset,\n visibility,\n allowUserIds,\n allowChatIds,\n blockUserIds,\n blockChatIds,\n chatsById,\n}) => {\n const { setPrivacyVisibility } = getActions();\n\n const lang = useLang();\n\n const visibilityOptions = useMemo(() => {\n switch (screen) {\n case SettingsScreens.PrivacyProfilePhoto:\n case SettingsScreens.PrivacyGroupChats:\n return [\n { value: 'everybody', label: lang('P2PEverybody') },\n { value: 'contacts', label: lang('P2PContacts') },\n ];\n\n default:\n return [\n { value: 'everybody', label: lang('P2PEverybody') },\n { value: 'contacts', label: lang('P2PContacts') },\n { value: 'nobody', label: lang('P2PNobody') },\n ];\n }\n }, [lang, screen]);\n\n const exceptionLists = {\n shouldShowDenied: visibility !== 'nobody',\n shouldShowAllowed: visibility !== 'everybody',\n };\n\n const privacyKey = getPrivacyKey(screen);\n\n const headerText = useMemo(() => {\n switch (screen) {\n case SettingsScreens.PrivacyPhoneNumber:\n return lang('PrivacyPhoneTitle');\n case SettingsScreens.PrivacyLastSeen:\n return lang('LastSeenTitle');\n case SettingsScreens.PrivacyProfilePhoto:\n return lang('PrivacyProfilePhotoTitle');\n case SettingsScreens.PrivacyForwarding:\n return lang('PrivacyForwardsTitle');\n case SettingsScreens.PrivacyGroupChats:\n return lang('WhoCanAddMe');\n default:\n return undefined;\n }\n }, [lang, screen]);\n\n useHistoryBack(isActive, onReset, onScreenSelect, screen);\n\n const descriptionText = useMemo(() => {\n switch (screen) {\n case SettingsScreens.PrivacyLastSeen:\n return lang('CustomHelp');\n default:\n return undefined;\n }\n }, [lang, screen]);\n\n const allowedContactsScreen = (() => {\n switch (screen) {\n case SettingsScreens.PrivacyPhoneNumber:\n return SettingsScreens.PrivacyPhoneNumberAllowedContacts;\n case SettingsScreens.PrivacyLastSeen:\n return SettingsScreens.PrivacyLastSeenAllowedContacts;\n case SettingsScreens.PrivacyProfilePhoto:\n return SettingsScreens.PrivacyProfilePhotoAllowedContacts;\n case SettingsScreens.PrivacyForwarding:\n return SettingsScreens.PrivacyForwardingAllowedContacts;\n default:\n return SettingsScreens.PrivacyGroupChatsAllowedContacts;\n }\n })();\n\n const deniedContactsScreen = (() => {\n switch (screen) {\n case SettingsScreens.PrivacyPhoneNumber:\n return SettingsScreens.PrivacyPhoneNumberDeniedContacts;\n case SettingsScreens.PrivacyLastSeen:\n return SettingsScreens.PrivacyLastSeenDeniedContacts;\n case SettingsScreens.PrivacyProfilePhoto:\n return SettingsScreens.PrivacyProfilePhotoDeniedContacts;\n case SettingsScreens.PrivacyForwarding:\n return SettingsScreens.PrivacyForwardingDeniedContacts;\n default:\n return SettingsScreens.PrivacyGroupChatsDeniedContacts;\n }\n })();\n\n const allowedCount = useMemo(() => {\n if (!allowUserIds || !allowChatIds || !chatsById) {\n return 0;\n }\n\n return allowChatIds.reduce((result, chatId) => {\n return result + (chatsById[chatId] ? chatsById[chatId].membersCount! : 0);\n }, allowUserIds.length);\n }, [allowChatIds, allowUserIds, chatsById]);\n\n const blockCount = useMemo(() => {\n if (!blockUserIds || !blockChatIds || !chatsById) {\n return 0;\n }\n\n return blockChatIds.reduce((result, chatId) => {\n return result + (chatsById[chatId] ? chatsById[chatId].membersCount! : 0);\n }, blockUserIds.length);\n }, [blockChatIds, blockUserIds, chatsById]);\n\n const handleVisibilityChange = useCallback((value) => {\n setPrivacyVisibility({\n privacyKey,\n visibility: value,\n });\n }, [privacyKey, setPrivacyVisibility]);\n\n return (\n
\n
\n

{headerText}

\n\n \n\n {descriptionText && (\n

{descriptionText}

\n )}\n
\n\n
\n

{lang('PrivacyExceptions')}

\n\n {exceptionLists.shouldShowAllowed && (\n {\n onScreenSelect(allowedContactsScreen);\n }}\n >\n
\n {allowedCount > 0 && +{allowedCount}}\n {lang('AlwaysShareWith')}\n {lang('EditAdminAddUsers')}\n
\n \n )}\n {exceptionLists.shouldShowDenied && (\n {\n onScreenSelect(deniedContactsScreen);\n }}\n >\n
\n {blockCount > 0 && −{blockCount}}\n {lang('NeverShareWith')}\n {lang('EditAdminAddUsers')}\n
\n \n )}\n
\n
\n );\n};\n\nexport default memo(withGlobal(\n (global, { screen }): StateProps => {\n let privacySettings: ApiPrivacySettings | undefined;\n\n const {\n chats: { byId: chatsById },\n settings: { privacy },\n } = global;\n\n switch (screen) {\n case SettingsScreens.PrivacyPhoneNumber:\n privacySettings = privacy.phoneNumber;\n break;\n\n case SettingsScreens.PrivacyLastSeen:\n privacySettings = privacy.lastSeen;\n break;\n\n case SettingsScreens.PrivacyProfilePhoto:\n privacySettings = privacy.profilePhoto;\n break;\n\n case SettingsScreens.PrivacyForwarding:\n privacySettings = privacy.forwards;\n break;\n\n case SettingsScreens.PrivacyGroupChats:\n privacySettings = privacy.chatInvite;\n break;\n }\n\n if (!privacySettings) {\n return {};\n }\n\n return {\n ...privacySettings,\n chatsById,\n };\n },\n)(SettingsPrivacyVisibility));\n","import React, {\n FC, memo, useCallback, useEffect, useMemo,\n} from '../../../lib/teact/teact';\nimport { getActions, withGlobal } from '../../../global';\n\nimport { ApiSession } from '../../../api/types';\nimport { SettingsScreens } from '../../../types';\n\nimport { formatPastTimeShort } from '../../../util/dateFormat';\nimport useFlag from '../../../hooks/useFlag';\nimport useLang from '../../../hooks/useLang';\nimport useHistoryBack from '../../../hooks/useHistoryBack';\n\nimport ListItem from '../../ui/ListItem';\nimport ConfirmDialog from '../../ui/ConfirmDialog';\n\ntype OwnProps = {\n isActive?: boolean;\n onScreenSelect: (screen: SettingsScreens) => void;\n onReset: () => void;\n};\n\ntype StateProps = {\n activeSessions: ApiSession[];\n};\n\nconst SettingsPrivacyActiveSessions: FC = ({\n isActive,\n onScreenSelect,\n onReset,\n activeSessions,\n}) => {\n const {\n loadAuthorizations,\n terminateAuthorization,\n terminateAllAuthorizations,\n } = getActions();\n\n const [isConfirmTerminateAllDialogOpen, openConfirmTerminateAllDialog, closeConfirmTerminateAllDialog] = useFlag();\n useEffect(() => {\n loadAuthorizations();\n }, [loadAuthorizations]);\n\n const handleTerminateSessionClick = useCallback((hash: string) => {\n terminateAuthorization({ hash });\n }, [terminateAuthorization]);\n\n const handleTerminateAllSessions = useCallback(() => {\n closeConfirmTerminateAllDialog();\n terminateAllAuthorizations();\n }, [closeConfirmTerminateAllDialog, terminateAllAuthorizations]);\n\n const currentSession = useMemo(() => {\n return activeSessions.find((session) => session.isCurrent);\n }, [activeSessions]);\n\n const otherSessions = useMemo(() => {\n return activeSessions.filter((session) => !session.isCurrent);\n }, [activeSessions]);\n\n const lang = useLang();\n\n useHistoryBack(isActive, onReset, onScreenSelect, SettingsScreens.PrivacyActiveSessions);\n\n function renderCurrentSession(session: ApiSession) {\n return (\n
\n

\n {lang('AuthSessions.CurrentSession')}\n

\n\n \n
\n {session.appName}\n {getDeviceEnvironment(session)}\n {session.ip} - {getLocation(session)}\n
\n
\n\n \n {lang('TerminateAllSessions')}\n \n
\n );\n }\n\n function renderOtherSessions(sessions: ApiSession[]) {\n return (\n
\n

\n {lang('OtherSessions')}\n

\n\n {sessions.map(renderSession)}\n
\n );\n }\n\n function renderSession(session: ApiSession) {\n return (\n {\n handleTerminateSessionClick(session.hash);\n },\n }]}\n className=\"no-icon\"\n >\n
\n {formatPastTimeShort(lang, session.dateActive * 1000)}\n {session.appName}\n {getDeviceEnvironment(session)}\n {session.ip} - {getLocation(session)}\n
\n \n );\n }\n\n return (\n
\n {currentSession && renderCurrentSession(currentSession)}\n {otherSessions && renderOtherSessions(otherSessions)}\n {otherSessions && (\n \n )}\n
\n );\n};\n\nfunction getLocation(session: ApiSession) {\n return [session.region, session.country].filter(Boolean).join(', ');\n}\n\nfunction getDeviceEnvironment(session: ApiSession) {\n return `${session.deviceModel}${session.deviceModel ? ', ' : ''} ${session.platform} ${session.systemVersion}`;\n}\n\nexport default memo(withGlobal(\n (global): StateProps => {\n return {\n activeSessions: global.activeSessions,\n };\n },\n)(SettingsPrivacyActiveSessions));\n","import React, {\n FC, useMemo, useState, memo, useRef, useCallback, useEffect,\n} from '../../../lib/teact/teact';\nimport { getActions, withGlobal } from '../../../global';\n\nimport { ApiUser } from '../../../api/types';\n\nimport { filterUsersByName, getUserFullName } from '../../../global/helpers';\nimport { unique } from '../../../util/iteratees';\nimport useLang from '../../../hooks/useLang';\n\nimport ChatOrUserPicker from '../../common/ChatOrUserPicker';\n\nexport type OwnProps = {\n isOpen: boolean;\n onClose: NoneToVoidFunction;\n};\n\ntype StateProps = {\n usersById: Record;\n blockedIds: string[];\n contactIds?: string[];\n localContactIds?: string[];\n currentUserId?: string;\n};\n\nconst BlockUserModal: FC = ({\n usersById,\n blockedIds,\n contactIds,\n localContactIds,\n currentUserId,\n isOpen,\n onClose,\n}) => {\n const {\n loadContactList,\n setUserSearchQuery,\n blockContact,\n } = getActions();\n\n const lang = useLang();\n const [filter, setFilter] = useState('');\n // eslint-disable-next-line no-null/no-null\n const filterRef = useRef(null);\n\n useEffect(() => {\n setUserSearchQuery({ query: filter });\n }, [filter, setUserSearchQuery]);\n\n const filteredContactIds = useMemo(() => {\n const availableContactIds = unique([\n ...(contactIds || []),\n ...(localContactIds || []),\n ].filter((contactId) => {\n return contactId !== currentUserId && !blockedIds.includes(contactId);\n }));\n\n return filterUsersByName(availableContactIds, usersById, filter)\n .sort((firstId, secondId) => {\n const firstName = getUserFullName(usersById[firstId]) || '';\n const secondName = getUserFullName(usersById[secondId]) || '';\n\n return firstName.localeCompare(secondName);\n });\n }, [blockedIds, contactIds, currentUserId, filter, localContactIds, usersById]);\n\n const handleRemoveUser = useCallback((userId: string) => {\n const { id: contactId, accessHash } = usersById[userId] || {};\n if (!contactId || !accessHash) {\n return;\n }\n blockContact({ contactId, accessHash });\n onClose();\n }, [blockContact, onClose, usersById]);\n\n return (\n \n );\n};\n\nexport default memo(withGlobal(\n (global): StateProps => {\n const {\n users: {\n byId: usersById,\n },\n blocked: {\n ids: blockedIds,\n },\n contactList,\n currentUserId,\n } = global;\n\n return {\n usersById,\n blockedIds,\n contactIds: contactList?.userIds,\n localContactIds: global.userSearch.localUserIds,\n currentUserId,\n };\n },\n)(BlockUserModal));\n","import React, {\n FC, memo, useCallback,\n} from '../../../lib/teact/teact';\nimport { getActions, withGlobal } from '../../../global';\n\nimport { ApiChat, ApiCountryCode, ApiUser } from '../../../api/types';\nimport { SettingsScreens } from '../../../types';\n\nimport { CHAT_HEIGHT_PX } from '../../../config';\nimport { formatPhoneNumberWithCode } from '../../../util/phoneNumber';\nimport {\n getChatTitle, getUserFullName, isUserId,\n} from '../../../global/helpers';\nimport renderText from '../../common/helpers/renderText';\nimport buildClassName from '../../../util/buildClassName';\nimport useLang from '../../../hooks/useLang';\nimport useHistoryBack from '../../../hooks/useHistoryBack';\nimport useFlag from '../../../hooks/useFlag';\n\nimport ListItem from '../../ui/ListItem';\nimport FloatingActionButton from '../../ui/FloatingActionButton';\nimport Avatar from '../../common/Avatar';\nimport Loading from '../../ui/Loading';\nimport BlockUserModal from './BlockUserModal';\n\ntype OwnProps = {\n isActive?: boolean;\n onScreenSelect: (screen: SettingsScreens) => void;\n onReset: () => void;\n};\n\ntype StateProps = {\n chatsByIds: Record;\n usersByIds: Record;\n blockedIds: string[];\n phoneCodeList: ApiCountryCode[];\n};\n\nconst SettingsPrivacyBlockedUsers: FC = ({\n isActive,\n onScreenSelect,\n onReset,\n chatsByIds,\n usersByIds,\n blockedIds,\n phoneCodeList,\n}) => {\n const { unblockContact } = getActions();\n\n const lang = useLang();\n const [isBlockUserModalOpen, openBlockUserModal, closeBlockUserModal] = useFlag();\n const handleUnblockClick = useCallback((contactId: string) => {\n unblockContact({ contactId });\n }, [unblockContact]);\n\n useHistoryBack(isActive, onReset, onScreenSelect, SettingsScreens.PrivacyBlockedUsers);\n\n function renderContact(contactId: string, i: number, viewportOffset: number) {\n const isPrivate = isUserId(contactId);\n const user = isPrivate ? usersByIds[contactId] : undefined;\n const chat = !isPrivate ? chatsByIds[contactId] : undefined;\n\n const className = buildClassName(\n 'Chat chat-item-clickable blocked-list-item small-icon',\n isPrivate ? 'private' : 'group',\n );\n\n return (\n {\n handleUnblockClick(contactId);\n },\n }]}\n style={`top: ${(viewportOffset + i) * CHAT_HEIGHT_PX}px;`}\n >\n \n
\n

{renderText((isPrivate ? getUserFullName(user) : getChatTitle(lang, chat!)) || '')}

\n {user?.phoneNumber && (\n
{formatPhoneNumberWithCode(phoneCodeList, user.phoneNumber)}
\n )}\n {user && !user.phoneNumber && user.username && (\n
@{user.username}
\n )}\n
\n \n );\n }\n\n return (\n
\n
\n
\n

\n {lang('BlockedUsersInfo')}\n

\n
\n\n
\n {blockedIds?.length ? (\n
\n {blockedIds!.map((contactId, i) => renderContact(contactId, i, 0))}\n
\n ) : blockedIds && !blockedIds.length ? (\n
{lang('NoBlocked')}
\n ) : (\n \n )}\n
\n
\n\n \n \n \n \n
\n );\n};\n\nexport default memo(withGlobal(\n (global): StateProps => {\n const {\n chats: {\n byId: chatsByIds,\n },\n users: {\n byId: usersByIds,\n },\n blocked: {\n ids,\n },\n countryList: {\n phoneCodes: phoneCodeList,\n },\n } = global;\n\n return {\n chatsByIds,\n usersByIds,\n blockedIds: ids,\n phoneCodeList,\n };\n },\n)(SettingsPrivacyBlockedUsers));\n","import React, { FC, memo } from '../../../../lib/teact/teact';\nimport { withGlobal } from '../../../../global';\n\nimport { ApiSticker } from '../../../../api/types';\nimport { SettingsScreens } from '../../../../types';\n\nimport { selectAnimatedEmoji } from '../../../../global/selectors';\nimport useLang from '../../../../hooks/useLang';\nimport useHistoryBack from '../../../../hooks/useHistoryBack';\n\nimport ListItem from '../../../ui/ListItem';\nimport AnimatedEmoji from '../../../common/AnimatedEmoji';\nimport renderText from '../../../common/helpers/renderText';\n\ntype OwnProps = {\n isActive?: boolean;\n onScreenSelect: (screen: SettingsScreens) => void;\n onReset: () => void;\n};\n\ntype StateProps = {\n animatedEmoji: ApiSticker;\n};\n\nconst SettingsTwoFaEnabled: FC = ({\n isActive, onReset, animatedEmoji, onScreenSelect,\n}) => {\n const lang = useLang();\n\n useHistoryBack(isActive, onReset, onScreenSelect, SettingsScreens.TwoFaEnabled);\n\n return (\n
\n
\n \n\n

\n {renderText(lang('EnabledPasswordText'), ['br'])}\n

\n
\n\n
\n onScreenSelect(SettingsScreens.TwoFaChangePasswordCurrent)}\n >\n {lang('ChangePassword')}\n \n onScreenSelect(SettingsScreens.TwoFaTurnOff)}\n >\n {lang('TurnPasswordOff')}\n \n onScreenSelect(SettingsScreens.TwoFaRecoveryEmailCurrentPassword)}\n >\n {lang('SetRecoveryEmail')}\n \n
\n
\n );\n};\n\nexport default memo(withGlobal((global) => {\n return {\n animatedEmoji: selectAnimatedEmoji(global, '🔐'),\n };\n})(SettingsTwoFaEnabled));\n","import React, {\n FC, memo, useCallback, useState,\n} from '../../../../lib/teact/teact';\n\nimport { SettingsScreens } from '../../../../types';\n\nimport useLang from '../../../../hooks/useLang';\nimport useHistoryBack from '../../../../hooks/useHistoryBack';\n\nimport PasswordMonkey from '../../../common/PasswordMonkey';\nimport PasswordForm from '../../../common/PasswordForm';\n\ntype OwnProps = {\n screen: SettingsScreens;\n error?: string;\n isLoading?: boolean;\n expectedPassword?: string;\n placeholder?: string;\n hint?: string;\n submitLabel?: string;\n clearError?: NoneToVoidFunction;\n onSubmit: (password: string) => void;\n isActive?: boolean;\n onScreenSelect: (screen: SettingsScreens) => void;\n onReset: () => void;\n};\n\nconst EQUAL_PASSWORD_ERROR = 'Passwords Should Be Equal';\n\nconst SettingsTwoFaPassword: FC = ({\n screen,\n isActive,\n onScreenSelect,\n onReset,\n error,\n isLoading,\n expectedPassword,\n placeholder = 'Current Password',\n hint,\n submitLabel,\n clearError,\n onSubmit,\n}) => {\n const [validationError, setValidationError] = useState('');\n const [shouldShowPassword, setShouldShowPassword] = useState(false);\n\n const handleSubmit = useCallback((newPassword) => {\n if (expectedPassword && newPassword !== expectedPassword) {\n setValidationError(EQUAL_PASSWORD_ERROR);\n } else {\n onSubmit(newPassword);\n }\n }, [onSubmit, expectedPassword]);\n\n const handleClearError = useCallback(() => {\n if (clearError) {\n clearError();\n }\n setValidationError('');\n }, [clearError]);\n\n const lang = useLang();\n\n useHistoryBack(isActive, onReset, onScreenSelect, screen);\n\n return (\n
\n
\n \n
\n\n
\n \n
\n
\n );\n};\n\nexport default memo(SettingsTwoFaPassword);\n","import React, { FC, memo } from '../../../../lib/teact/teact';\nimport { withGlobal } from '../../../../global';\n\nimport { ApiSticker } from '../../../../api/types';\nimport { SettingsScreens } from '../../../../types';\n\nimport { selectAnimatedEmoji } from '../../../../global/selectors';\nimport useLang from '../../../../hooks/useLang';\nimport useHistoryBack from '../../../../hooks/useHistoryBack';\n\nimport Button from '../../../ui/Button';\nimport AnimatedEmoji from '../../../common/AnimatedEmoji';\n\ntype OwnProps = {\n onStart: NoneToVoidFunction;\n isActive?: boolean;\n onScreenSelect: (screen: SettingsScreens) => void;\n onReset: () => void;\n};\n\ntype StateProps = {\n animatedEmoji: ApiSticker;\n};\n\nconst SettingsTwoFaStart: FC = ({\n isActive, onScreenSelect, onReset, animatedEmoji, onStart,\n}) => {\n const lang = useLang();\n\n useHistoryBack(isActive, onReset, onScreenSelect, SettingsScreens.TwoFaDisabled);\n\n return (\n
\n
\n \n\n

\n {lang('SetAdditionalPasswordInfo')}\n

\n
\n\n
\n \n
\n
\n );\n};\n\nexport default memo(withGlobal((global) => {\n return {\n animatedEmoji: selectAnimatedEmoji(global, '🔐'),\n };\n})(SettingsTwoFaStart));\n","import React, {\n FC, memo, useCallback, useEffect, useRef, useState,\n} from '../../../../lib/teact/teact';\nimport { withGlobal } from '../../../../global';\n\nimport { ApiSticker } from '../../../../api/types';\nimport { SettingsScreens } from '../../../../types';\n\nimport { IS_SINGLE_COLUMN_LAYOUT, IS_TOUCH_ENV } from '../../../../util/environment';\nimport { selectAnimatedEmoji } from '../../../../global/selectors';\nimport useFlag from '../../../../hooks/useFlag';\nimport useLang from '../../../../hooks/useLang';\nimport useHistoryBack from '../../../../hooks/useHistoryBack';\n\nimport Button from '../../../ui/Button';\nimport Modal from '../../../ui/Modal';\nimport AnimatedEmoji from '../../../common/AnimatedEmoji';\nimport InputText from '../../../ui/InputText';\nimport renderText from '../../../common/helpers/renderText';\n\ntype OwnProps = {\n icon: 'hint' | 'email';\n type?: 'text' | 'email';\n isLoading?: boolean;\n error?: string;\n placeholder: string;\n shouldConfirm?: boolean;\n clearError?: NoneToVoidFunction;\n onSubmit: (value?: string) => void;\n isActive?: boolean;\n onScreenSelect: (screen: SettingsScreens) => void;\n onReset: () => void;\n screen: SettingsScreens;\n};\n\ntype StateProps = {\n animatedEmoji: ApiSticker;\n};\n\nconst FOCUS_DELAY_TIMEOUT_MS = IS_SINGLE_COLUMN_LAYOUT ? 550 : 400;\n\nconst SettingsTwoFaSkippableForm: FC = ({\n animatedEmoji,\n type = 'text',\n isLoading,\n error,\n placeholder,\n shouldConfirm,\n clearError,\n onSubmit,\n isActive,\n onScreenSelect,\n onReset,\n screen,\n}) => {\n // eslint-disable-next-line no-null/no-null\n const inputRef = useRef(null);\n\n const [value, setValue] = useState('');\n const [isConfirmShown, markIsConfirmShown, unmarkIsConfirmShown] = useFlag(false);\n\n useEffect(() => {\n if (!IS_TOUCH_ENV) {\n setTimeout(() => {\n inputRef.current!.focus();\n }, FOCUS_DELAY_TIMEOUT_MS);\n }\n }, []);\n\n const handleInputChange = useCallback((e: React.ChangeEvent) => {\n if (error && clearError) {\n clearError();\n }\n\n setValue(e.target.value);\n }, [clearError, error]);\n\n const handleSubmit = (e: React.FormEvent) => {\n e.preventDefault();\n\n if (!inputRef.current) {\n return;\n }\n\n onSubmit(value);\n };\n\n const handleSkip = useCallback(() => {\n onSubmit();\n }, [onSubmit]);\n\n const handleSkipConfirm = useCallback(() => {\n unmarkIsConfirmShown();\n onSubmit();\n }, [onSubmit, unmarkIsConfirmShown]);\n\n const lang = useLang();\n\n useHistoryBack(isActive, onReset, onScreenSelect, screen);\n\n return (\n
\n
\n \n
\n\n
\n
\n \n\n {value ? (\n \n ) : (\n \n {lang('YourEmailSkip')}\n \n )}\n \n {shouldConfirm && (\n \n {renderText(lang('YourEmailSkipWarningText'), ['br', 'simple_markdown'])}\n
\n \n {lang('YourEmailSkip')}\n \n \n {lang('Cancel')}\n \n
\n \n )}\n
\n
\n );\n};\n\nexport default memo(withGlobal((global, { icon }) => {\n return {\n animatedEmoji: selectAnimatedEmoji(global, icon === 'email' ? '💌' : '💡'),\n };\n})(SettingsTwoFaSkippableForm));\n","import React, { FC, memo, useCallback } from '../../../../lib/teact/teact';\nimport { withGlobal } from '../../../../global';\n\nimport { ApiSticker } from '../../../../api/types';\nimport { SettingsScreens } from '../../../../types';\n\nimport { selectAnimatedEmoji } from '../../../../global/selectors';\nimport useLang from '../../../../hooks/useLang';\nimport useHistoryBack from '../../../../hooks/useHistoryBack';\n\nimport Button from '../../../ui/Button';\nimport AnimatedEmoji from '../../../common/AnimatedEmoji';\n\ntype OwnProps = {\n isActive?: boolean;\n onScreenSelect: (screen: SettingsScreens) => void;\n onReset: () => void;\n};\n\ntype StateProps = {\n animatedEmoji: ApiSticker;\n};\n\nconst SettingsTwoFaCongratulations: FC = ({\n isActive, onReset, animatedEmoji, onScreenSelect,\n}) => {\n const lang = useLang();\n\n const handleClick = useCallback(() => {\n onScreenSelect(SettingsScreens.Privacy);\n }, [onScreenSelect]);\n\n useHistoryBack(isActive, onReset, onScreenSelect, SettingsScreens.TwoFaCongratulations);\n\n return (\n
\n
\n \n\n

\n {lang('TwoStepVerificationPasswordSetInfo')}\n

\n
\n\n
\n \n
\n
\n );\n};\n\nexport default memo(withGlobal((global) => {\n return {\n animatedEmoji: selectAnimatedEmoji(global, '🥳'),\n };\n})(SettingsTwoFaCongratulations));\n","import React, {\n FC, memo, useCallback, useEffect, useRef, useState,\n} from '../../../../lib/teact/teact';\nimport { withGlobal } from '../../../../global';\n\nimport { ApiSticker } from '../../../../api/types';\nimport { SettingsScreens } from '../../../../types';\n\nimport { IS_SINGLE_COLUMN_LAYOUT, IS_TOUCH_ENV } from '../../../../util/environment';\nimport { selectAnimatedEmoji } from '../../../../global/selectors';\nimport useLang from '../../../../hooks/useLang';\nimport useHistoryBack from '../../../../hooks/useHistoryBack';\n\nimport AnimatedEmoji from '../../../common/AnimatedEmoji';\nimport InputText from '../../../ui/InputText';\nimport Loading from '../../../ui/Loading';\n\ntype OwnProps = {\n isLoading?: boolean;\n error?: string;\n clearError: NoneToVoidFunction;\n onSubmit: (hint: string) => void;\n isActive?: boolean;\n onScreenSelect: (screen: SettingsScreens) => void;\n onReset: () => void;\n screen: SettingsScreens;\n};\n\ntype StateProps = {\n animatedEmoji: ApiSticker;\n codeLength: number;\n};\n\nconst FOCUS_DELAY_TIMEOUT_MS = IS_SINGLE_COLUMN_LAYOUT ? 550 : 400;\n\nconst SettingsTwoFaEmailCode: FC = ({\n animatedEmoji,\n codeLength,\n isLoading,\n error,\n clearError,\n onSubmit,\n isActive,\n onScreenSelect,\n onReset,\n screen,\n}) => {\n // eslint-disable-next-line no-null/no-null\n const inputRef = useRef(null);\n\n const [value, setValue] = useState('');\n\n useEffect(() => {\n if (!IS_TOUCH_ENV) {\n setTimeout(() => {\n inputRef.current!.focus();\n }, FOCUS_DELAY_TIMEOUT_MS);\n }\n }, []);\n\n const lang = useLang();\n\n useHistoryBack(isActive, onReset, onScreenSelect, screen);\n\n const handleInputChange = useCallback((e: React.ChangeEvent) => {\n if (error && clearError) {\n clearError();\n }\n\n const newValue = e.target.value.slice(0, codeLength);\n\n if (newValue.length === codeLength) {\n onSubmit(newValue);\n }\n\n setValue(newValue);\n e.target.value = newValue;\n }, [clearError, codeLength, error, onSubmit]);\n\n return (\n
\n
\n \n
\n\n
\n \n {isLoading && }\n
\n
\n );\n};\n\nexport default memo(withGlobal((global) => {\n return {\n animatedEmoji: selectAnimatedEmoji(global, '💌'),\n codeLength: global.twoFaSettings.waitingEmailCodeLength,\n };\n})(SettingsTwoFaEmailCode));\n","import React, {\n FC, memo, useCallback, useEffect,\n} from '../../../../lib/teact/teact';\nimport { getActions, withGlobal } from '../../../../global';\n\nimport { GlobalState } from '../../../../global/types';\nimport { SettingsScreens } from '../../../../types';\n\nimport { TwoFaDispatch, TwoFaState } from '../../../../hooks/reducers/useTwoFaReducer';\nimport useLang from '../../../../hooks/useLang';\n\nimport SettingsTwoFaEnabled from './SettingsTwoFaEnabled';\nimport SettingsTwoFaPassword from './SettingsTwoFaPassword';\nimport SettingsTwoFaStart from './SettingsTwoFaStart';\nimport SettingsTwoFaSkippableForm from './SettingsTwoFaSkippableForm';\nimport SettingsTwoFaCongratulations from './SettingsTwoFaCongratulations';\nimport SettingsTwoFaEmailCode from './SettingsTwoFaEmailCode';\n\nexport type OwnProps = {\n state: TwoFaState;\n currentScreen: SettingsScreens;\n shownScreen: SettingsScreens;\n dispatch: TwoFaDispatch;\n isActive?: boolean;\n onScreenSelect: (screen: SettingsScreens) => void;\n onReset: () => void;\n};\n\ntype StateProps = GlobalState['twoFaSettings'];\n\nconst SettingsTwoFa: FC = ({\n currentScreen,\n shownScreen,\n state,\n hint,\n isLoading,\n error,\n waitingEmailCodeLength,\n dispatch,\n isActive,\n onScreenSelect,\n onReset,\n}) => {\n const {\n updatePassword,\n checkPassword,\n clearTwoFaError,\n updateRecoveryEmail,\n provideTwoFaEmailCode,\n clearPassword,\n } = getActions();\n\n useEffect(() => {\n if (waitingEmailCodeLength) {\n if (currentScreen === SettingsScreens.TwoFaNewPasswordEmail) {\n onScreenSelect(SettingsScreens.TwoFaNewPasswordEmailCode);\n } else if (currentScreen === SettingsScreens.TwoFaRecoveryEmail) {\n onScreenSelect(SettingsScreens.TwoFaRecoveryEmailCode);\n }\n }\n }, [currentScreen, onScreenSelect, waitingEmailCodeLength]);\n\n const handleStartWizard = useCallback(() => {\n dispatch({ type: 'reset' });\n onScreenSelect(SettingsScreens.TwoFaNewPassword);\n }, [dispatch, onScreenSelect]);\n\n const handleNewPassword = useCallback((value: string) => {\n dispatch({ type: 'setPassword', payload: value });\n onScreenSelect(SettingsScreens.TwoFaNewPasswordConfirm);\n }, [dispatch, onScreenSelect]);\n\n const handleNewPasswordConfirm = useCallback(() => {\n onScreenSelect(SettingsScreens.TwoFaNewPasswordHint);\n }, [onScreenSelect]);\n\n const handleNewPasswordHint = useCallback((value?: string) => {\n dispatch({ type: 'setHint', payload: value });\n onScreenSelect(SettingsScreens.TwoFaNewPasswordEmail);\n }, [dispatch, onScreenSelect]);\n\n const handleNewPasswordEmail = useCallback((value?: string) => {\n dispatch({ type: 'setEmail', payload: value });\n updatePassword({\n ...state,\n email: value,\n onSuccess: () => {\n onScreenSelect(SettingsScreens.TwoFaCongratulations);\n },\n });\n }, [dispatch, onScreenSelect, state, updatePassword]);\n\n const handleChangePasswordCurrent = useCallback((value: string) => {\n dispatch({ type: 'setCurrentPassword', payload: value });\n checkPassword({\n currentPassword: value,\n onSuccess: () => {\n onScreenSelect(SettingsScreens.TwoFaChangePasswordNew);\n },\n });\n }, [checkPassword, dispatch, onScreenSelect]);\n\n const handleChangePasswordNew = useCallback((value: string) => {\n dispatch({ type: 'setPassword', payload: value });\n onScreenSelect(SettingsScreens.TwoFaChangePasswordConfirm);\n }, [dispatch, onScreenSelect]);\n\n const handleChangePasswordConfirm = useCallback(() => {\n onScreenSelect(SettingsScreens.TwoFaChangePasswordHint);\n }, [onScreenSelect]);\n\n const handleChangePasswordHint = useCallback((value?: string) => {\n dispatch({ type: 'setHint', payload: value });\n updatePassword({\n ...state,\n hint: value,\n onSuccess: () => {\n onScreenSelect(SettingsScreens.TwoFaCongratulations);\n },\n });\n }, [dispatch, onScreenSelect, state, updatePassword]);\n\n const handleTurnOff = useCallback((value: string) => {\n clearPassword({\n currentPassword: value,\n onSuccess: () => {\n onScreenSelect(SettingsScreens.Privacy);\n },\n });\n }, [clearPassword, onScreenSelect]);\n\n const handleRecoveryEmailCurrentPassword = useCallback((value: string) => {\n dispatch({ type: 'setCurrentPassword', payload: value });\n checkPassword({\n currentPassword: value,\n onSuccess: () => {\n onScreenSelect(SettingsScreens.TwoFaRecoveryEmail);\n },\n });\n }, [checkPassword, dispatch, onScreenSelect]);\n\n const handleRecoveryEmail = useCallback((value?: string) => {\n dispatch({ type: 'setEmail', payload: value });\n updateRecoveryEmail({\n ...state,\n email: value,\n onSuccess: () => {\n onScreenSelect(SettingsScreens.TwoFaCongratulations);\n },\n });\n }, [dispatch, onScreenSelect, state, updateRecoveryEmail]);\n\n const handleEmailCode = useCallback((code: string) => {\n provideTwoFaEmailCode({ code });\n }, [provideTwoFaEmailCode]);\n\n const lang = useLang();\n\n switch (currentScreen) {\n case SettingsScreens.TwoFaDisabled:\n return (\n \n );\n\n case SettingsScreens.TwoFaNewPassword:\n return (\n \n );\n\n case SettingsScreens.TwoFaNewPasswordConfirm:\n return (\n \n );\n\n case SettingsScreens.TwoFaNewPasswordHint:\n return (\n \n );\n\n case SettingsScreens.TwoFaNewPasswordEmail:\n return (\n \n );\n\n case SettingsScreens.TwoFaNewPasswordEmailCode:\n return (\n \n );\n\n case SettingsScreens.TwoFaCongratulations:\n return (\n \n );\n\n case SettingsScreens.TwoFaEnabled:\n return (\n \n );\n\n case SettingsScreens.TwoFaChangePasswordCurrent:\n return (\n \n );\n\n case SettingsScreens.TwoFaChangePasswordNew:\n return (\n \n );\n\n case SettingsScreens.TwoFaChangePasswordConfirm:\n return (\n \n );\n\n case SettingsScreens.TwoFaChangePasswordHint:\n return (\n \n );\n\n case SettingsScreens.TwoFaTurnOff:\n return (\n \n );\n\n case SettingsScreens.TwoFaRecoveryEmailCurrentPassword:\n return (\n \n );\n\n case SettingsScreens.TwoFaRecoveryEmail:\n return (\n \n );\n\n case SettingsScreens.TwoFaRecoveryEmailCode:\n return (\n \n );\n\n default:\n return undefined;\n }\n};\n\nexport default memo(withGlobal(\n (global): StateProps => ({ ...global.twoFaSettings }),\n)(SettingsTwoFa));\n","import React, {\n FC, memo, useCallback, useMemo, useState,\n} from '../../../lib/teact/teact';\nimport { getActions, getGlobal, withGlobal } from '../../../global';\n\nimport { GlobalState } from '../../../global/types';\nimport { ApiPrivacySettings, SettingsScreens } from '../../../types';\n\nimport { ALL_FOLDER_ID, ARCHIVED_FOLDER_ID } from '../../../config';\nimport { unique } from '../../../util/iteratees';\nimport { filterChatsByName, isChatGroup, isUserId } from '../../../global/helpers';\nimport useLang from '../../../hooks/useLang';\nimport useHistoryBack from '../../../hooks/useHistoryBack';\nimport { useFolderManagerForOrderedIds } from '../../../hooks/useFolderManager';\nimport { getPrivacyKey } from './helper/privacy';\n\nimport Picker from '../../common/Picker';\nimport FloatingActionButton from '../../ui/FloatingActionButton';\n\nexport type OwnProps = {\n isAllowList?: boolean;\n screen: SettingsScreens;\n isActive?: boolean;\n onScreenSelect: (screen: SettingsScreens) => void;\n onReset: () => void;\n};\n\ntype StateProps = {\n currentUserId?: string;\n settings?: ApiPrivacySettings;\n};\n\nconst SettingsPrivacyVisibilityExceptionList: FC = ({\n isAllowList,\n screen,\n isActive,\n onScreenSelect,\n onReset,\n currentUserId,\n settings,\n}) => {\n const { setPrivacySettings } = getActions();\n\n const lang = useLang();\n\n const selectedContactIds = useMemo(() => {\n if (!settings) {\n return [];\n }\n\n if (isAllowList) {\n return [...settings.allowUserIds, ...settings.allowChatIds];\n } else {\n return [...settings.blockUserIds, ...settings.blockChatIds];\n }\n }, [isAllowList, settings]);\n const [searchQuery, setSearchQuery] = useState('');\n const [isSubmitShown, setIsSubmitShown] = useState(false);\n const [newSelectedContactIds, setNewSelectedContactIds] = useState(selectedContactIds);\n\n const folderAllOrderedIds = useFolderManagerForOrderedIds(ALL_FOLDER_ID);\n const folderArchivedOrderedIds = useFolderManagerForOrderedIds(ARCHIVED_FOLDER_ID);\n const displayedIds = useMemo(() => {\n // No need for expensive global updates on chats, so we avoid them\n const chatsById = getGlobal().chats.byId;\n\n const chatIds = unique([...folderAllOrderedIds || [], ...folderArchivedOrderedIds || []])\n .filter((chatId) => {\n const chat = chatsById[chatId];\n return chat && ((isUserId(chat.id) && chat.id !== currentUserId) || isChatGroup(chat));\n });\n\n return unique([\n ...selectedContactIds,\n ...filterChatsByName(lang, chatIds, chatsById, searchQuery),\n ]);\n }, [folderAllOrderedIds, folderArchivedOrderedIds, selectedContactIds, lang, searchQuery, currentUserId]);\n\n const handleSelectedContactIdsChange = useCallback((value: string[]) => {\n setNewSelectedContactIds(value);\n setIsSubmitShown(true);\n }, []);\n\n const handleSubmit = useCallback(() => {\n setPrivacySettings({\n privacyKey: getPrivacyKey(screen),\n isAllowList: Boolean(isAllowList),\n contactsIds: newSelectedContactIds,\n });\n\n onScreenSelect(SettingsScreens.Privacy);\n }, [isAllowList, newSelectedContactIds, onScreenSelect, screen, setPrivacySettings]);\n\n useHistoryBack(isActive, onReset, onScreenSelect, screen);\n\n return (\n
\n \n\n \n \n \n
\n );\n};\n\nfunction getCurrentPrivacySettings(global: GlobalState, screen: SettingsScreens) {\n const { privacy } = global.settings;\n switch (screen) {\n case SettingsScreens.PrivacyPhoneNumberAllowedContacts:\n case SettingsScreens.PrivacyPhoneNumberDeniedContacts:\n return privacy.phoneNumber;\n case SettingsScreens.PrivacyLastSeenAllowedContacts:\n case SettingsScreens.PrivacyLastSeenDeniedContacts:\n return privacy.lastSeen;\n case SettingsScreens.PrivacyProfilePhotoAllowedContacts:\n case SettingsScreens.PrivacyProfilePhotoDeniedContacts:\n return privacy.profilePhoto;\n case SettingsScreens.PrivacyForwardingAllowedContacts:\n case SettingsScreens.PrivacyForwardingDeniedContacts:\n return privacy.forwards;\n case SettingsScreens.PrivacyGroupChatsDeniedContacts:\n case SettingsScreens.PrivacyGroupChatsAllowedContacts:\n return privacy.chatInvite;\n }\n\n return undefined;\n}\n\nexport default memo(withGlobal(\n (global, { screen }): StateProps => {\n return {\n currentUserId: global.currentUserId,\n settings: getCurrentPrivacySettings(global, screen),\n };\n },\n)(SettingsPrivacyVisibilityExceptionList));\n","import React, { FC, memo, useCallback } from '../../../lib/teact/teact';\nimport { getActions, withGlobal } from '../../../global';\n\nimport { SettingsScreens } from '../../../types';\nimport { ApiAvailableReaction } from '../../../api/types';\n\nimport useHistoryBack from '../../../hooks/useHistoryBack';\n\nimport ReactionStaticEmoji from '../../common/ReactionStaticEmoji';\nimport RadioGroup from '../../ui/RadioGroup';\n\ntype OwnProps = {\n isActive?: boolean;\n onScreenSelect: (screen: SettingsScreens) => void;\n onReset: () => void;\n};\n\ntype StateProps = {\n availableReactions?: ApiAvailableReaction[];\n selectedReaction?: string;\n};\n\nconst SettingsQuickReaction: FC = ({\n isActive,\n onReset,\n onScreenSelect,\n availableReactions,\n selectedReaction,\n}) => {\n const { setDefaultReaction } = getActions();\n useHistoryBack(isActive, onReset, onScreenSelect, SettingsScreens.General);\n\n const options = availableReactions?.filter((l) => !l.isInactive).map((l) => {\n return {\n label: <>{l.title},\n value: l.reaction,\n };\n }) || [];\n\n const handleChange = useCallback((reaction: string) => {\n setDefaultReaction({ reaction });\n }, [setDefaultReaction]);\n\n return (\n
\n \n
\n );\n};\n\nexport default memo(withGlobal(\n (global) => {\n const { availableReactions, appConfig } = global;\n\n return {\n availableReactions,\n selectedReaction: appConfig?.defaultReaction,\n };\n },\n)(SettingsQuickReaction));\n","import React, { FC, memo, useCallback } from '../../../lib/teact/teact';\n\nimport { SettingsScreens } from '../../../types';\nimport { FolderEditDispatch, FoldersState } from '../../../hooks/reducers/useFoldersReducer';\n\nimport { LAYERS_ANIMATION_NAME } from '../../../util/environment';\nimport useTwoFaReducer from '../../../hooks/reducers/useTwoFaReducer';\n\nimport Transition from '../../ui/Transition';\nimport SettingsHeader from './SettingsHeader';\nimport SettingsMain from './SettingsMain';\nimport SettingsEditProfile from './SettingsEditProfile';\nimport SettingsDataStorage from './SettingsDataStorage';\nimport SettingsFolders from './folders/SettingsFolders';\nimport SettingsGeneral from './SettingsGeneral';\nimport SettingsGeneralBackground from './SettingsGeneralBackground';\nimport SettingsGeneralBackgroundColor from './SettingsGeneralBackgroundColor';\nimport SettingsNotifications from './SettingsNotifications';\nimport SettingsPrivacy from './SettingsPrivacy';\nimport SettingsLanguage from './SettingsLanguage';\nimport SettingsPrivacyVisibility from './SettingsPrivacyVisibility';\nimport SettingsPrivacyActiveSessions from './SettingsPrivacyActiveSessions';\nimport SettingsPrivacyBlockedUsers from './SettingsPrivacyBlockedUsers';\nimport SettingsTwoFa from './twoFa/SettingsTwoFa';\nimport SettingsPrivacyVisibilityExceptionList from './SettingsPrivacyVisibilityExceptionList';\nimport SettingsQuickReaction from './SettingsQuickReaction';\n\nimport './Settings.scss';\n\nconst TRANSITION_RENDER_COUNT = Object.keys(SettingsScreens).length / 2;\nconst TRANSITION_DURATION = 200;\n\nconst TWO_FA_SCREENS = [\n SettingsScreens.TwoFaDisabled,\n SettingsScreens.TwoFaNewPassword,\n SettingsScreens.TwoFaNewPasswordConfirm,\n SettingsScreens.TwoFaNewPasswordHint,\n SettingsScreens.TwoFaNewPasswordEmail,\n SettingsScreens.TwoFaNewPasswordEmailCode,\n SettingsScreens.TwoFaCongratulations,\n SettingsScreens.TwoFaEnabled,\n SettingsScreens.TwoFaChangePasswordCurrent,\n SettingsScreens.TwoFaChangePasswordNew,\n SettingsScreens.TwoFaChangePasswordConfirm,\n SettingsScreens.TwoFaChangePasswordHint,\n SettingsScreens.TwoFaTurnOff,\n SettingsScreens.TwoFaRecoveryEmailCurrentPassword,\n SettingsScreens.TwoFaRecoveryEmail,\n SettingsScreens.TwoFaRecoveryEmailCode,\n];\n\nconst FOLDERS_SCREENS = [\n SettingsScreens.Folders,\n SettingsScreens.FoldersCreateFolder,\n SettingsScreens.FoldersEditFolder,\n SettingsScreens.FoldersEditFolderFromChatList,\n SettingsScreens.FoldersIncludedChats,\n SettingsScreens.FoldersIncludedChatsFromChatList,\n SettingsScreens.FoldersExcludedChats,\n SettingsScreens.FoldersExcludedChatsFromChatList,\n];\n\nconst PRIVACY_SCREENS = [\n SettingsScreens.PrivacyBlockedUsers,\n SettingsScreens.PrivacyActiveSessions,\n];\n\nconst PRIVACY_PHONE_NUMBER_SCREENS = [\n SettingsScreens.PrivacyPhoneNumberAllowedContacts,\n SettingsScreens.PrivacyPhoneNumberDeniedContacts,\n];\n\nconst PRIVACY_LAST_SEEN_PHONE_SCREENS = [\n SettingsScreens.PrivacyLastSeenAllowedContacts,\n SettingsScreens.PrivacyLastSeenDeniedContacts,\n];\n\nconst PRIVACY_PROFILE_PHOTO_SCREENS = [\n SettingsScreens.PrivacyProfilePhotoAllowedContacts,\n SettingsScreens.PrivacyProfilePhotoDeniedContacts,\n];\n\nconst PRIVACY_FORWARDING_SCREENS = [\n SettingsScreens.PrivacyForwardingAllowedContacts,\n SettingsScreens.PrivacyForwardingDeniedContacts,\n];\n\nconst PRIVACY_GROUP_CHATS_SCREENS = [\n SettingsScreens.PrivacyGroupChatsAllowedContacts,\n SettingsScreens.PrivacyGroupChatsDeniedContacts,\n];\n\nexport type OwnProps = {\n isActive: boolean;\n currentScreen: SettingsScreens;\n foldersState: FoldersState;\n foldersDispatch: FolderEditDispatch;\n onScreenSelect: (screen: SettingsScreens) => void;\n shouldSkipTransition?: boolean;\n onReset: () => void;\n};\n\nconst Settings: FC = ({\n isActive,\n currentScreen,\n foldersState,\n foldersDispatch,\n onScreenSelect,\n onReset,\n shouldSkipTransition,\n}) => {\n const [twoFaState, twoFaDispatch] = useTwoFaReducer();\n\n const handleReset = useCallback(() => {\n if (\n currentScreen === SettingsScreens.FoldersCreateFolder\n || currentScreen === SettingsScreens.FoldersEditFolder\n || currentScreen === SettingsScreens.FoldersEditFolderFromChatList\n ) {\n setTimeout(() => {\n foldersDispatch({ type: 'reset' });\n }, TRANSITION_DURATION);\n }\n\n if (\n currentScreen === SettingsScreens.FoldersIncludedChats\n || currentScreen === SettingsScreens.FoldersExcludedChats\n ) {\n if (foldersState.mode === 'create') {\n onScreenSelect(SettingsScreens.FoldersCreateFolder);\n } else {\n onScreenSelect(SettingsScreens.FoldersEditFolder);\n }\n return;\n }\n\n onReset();\n }, [\n foldersState.mode, foldersDispatch,\n currentScreen, onReset, onScreenSelect,\n ]);\n\n const handleSaveFilter = useCallback(() => {\n foldersDispatch({ type: 'saveFilters' });\n handleReset();\n }, [foldersDispatch, handleReset]);\n\n function renderCurrentSectionContent(isScreenActive: boolean, screen: SettingsScreens) {\n const privacyAllowScreens: Record = {\n [SettingsScreens.PrivacyPhoneNumber]: PRIVACY_PHONE_NUMBER_SCREENS.includes(screen),\n [SettingsScreens.PrivacyLastSeen]: PRIVACY_LAST_SEEN_PHONE_SCREENS.includes(screen),\n [SettingsScreens.PrivacyProfilePhoto]: PRIVACY_PROFILE_PHOTO_SCREENS.includes(screen),\n [SettingsScreens.PrivacyForwarding]: PRIVACY_FORWARDING_SCREENS.includes(screen),\n [SettingsScreens.PrivacyGroupChats]: PRIVACY_GROUP_CHATS_SCREENS.includes(screen),\n };\n\n const isTwoFaScreen = TWO_FA_SCREENS.includes(screen);\n const isFoldersScreen = FOLDERS_SCREENS.includes(screen);\n const isPrivacyScreen = PRIVACY_SCREENS.includes(screen)\n || isTwoFaScreen\n || Object.keys(privacyAllowScreens).includes(screen.toString())\n || Object.values(privacyAllowScreens).find((key) => key === true);\n\n switch (currentScreen) {\n case SettingsScreens.Main:\n return (\n \n );\n case SettingsScreens.EditProfile:\n return (\n \n );\n case SettingsScreens.General:\n return (\n \n );\n case SettingsScreens.QuickReaction:\n return (\n \n );\n case SettingsScreens.Notifications:\n return (\n \n );\n case SettingsScreens.DataStorage:\n return (\n \n );\n case SettingsScreens.Privacy:\n return (\n \n );\n case SettingsScreens.Language:\n return (\n \n );\n case SettingsScreens.GeneralChatBackground:\n return (\n \n );\n case SettingsScreens.GeneralChatBackgroundColor:\n return (\n \n );\n case SettingsScreens.PrivacyActiveSessions:\n return (\n \n );\n case SettingsScreens.PrivacyBlockedUsers:\n return (\n \n );\n case SettingsScreens.PrivacyPhoneNumber:\n case SettingsScreens.PrivacyLastSeen:\n case SettingsScreens.PrivacyProfilePhoto:\n case SettingsScreens.PrivacyForwarding:\n case SettingsScreens.PrivacyGroupChats:\n return (\n \n );\n\n case SettingsScreens.PrivacyPhoneNumberAllowedContacts:\n case SettingsScreens.PrivacyLastSeenAllowedContacts:\n case SettingsScreens.PrivacyProfilePhotoAllowedContacts:\n case SettingsScreens.PrivacyForwardingAllowedContacts:\n case SettingsScreens.PrivacyGroupChatsAllowedContacts:\n return (\n \n );\n\n case SettingsScreens.PrivacyPhoneNumberDeniedContacts:\n case SettingsScreens.PrivacyLastSeenDeniedContacts:\n case SettingsScreens.PrivacyProfilePhotoDeniedContacts:\n case SettingsScreens.PrivacyForwardingDeniedContacts:\n case SettingsScreens.PrivacyGroupChatsDeniedContacts:\n return (\n \n );\n\n case SettingsScreens.Folders:\n case SettingsScreens.FoldersCreateFolder:\n case SettingsScreens.FoldersEditFolder:\n case SettingsScreens.FoldersEditFolderFromChatList:\n case SettingsScreens.FoldersIncludedChats:\n case SettingsScreens.FoldersIncludedChatsFromChatList:\n case SettingsScreens.FoldersExcludedChats:\n case SettingsScreens.FoldersExcludedChatsFromChatList:\n return (\n \n );\n\n case SettingsScreens.TwoFaDisabled:\n case SettingsScreens.TwoFaNewPassword:\n case SettingsScreens.TwoFaNewPasswordConfirm:\n case SettingsScreens.TwoFaNewPasswordHint:\n case SettingsScreens.TwoFaNewPasswordEmail:\n case SettingsScreens.TwoFaNewPasswordEmailCode:\n case SettingsScreens.TwoFaCongratulations:\n case SettingsScreens.TwoFaEnabled:\n case SettingsScreens.TwoFaChangePasswordCurrent:\n case SettingsScreens.TwoFaChangePasswordNew:\n case SettingsScreens.TwoFaChangePasswordConfirm:\n case SettingsScreens.TwoFaChangePasswordHint:\n case SettingsScreens.TwoFaTurnOff:\n case SettingsScreens.TwoFaRecoveryEmailCurrentPassword:\n case SettingsScreens.TwoFaRecoveryEmail:\n case SettingsScreens.TwoFaRecoveryEmailCode:\n return (\n \n );\n\n default:\n return undefined;\n }\n }\n\n function renderCurrentSection(isScreenActive: boolean, isFrom: boolean, currentKey: SettingsScreens) {\n return (\n <>\n \n {renderCurrentSectionContent(isScreenActive, currentKey)}\n \n );\n }\n\n return (\n \n {renderCurrentSection}\n \n );\n};\n\nexport default memo(Settings);\n","import React, {\n FC, useEffect, useCallback, useMemo, memo,\n} from '../../../lib/teact/teact';\nimport { getActions, withGlobal } from '../../../global';\n\nimport { ApiUser, ApiUserStatus } from '../../../api/types';\n\nimport { IS_SINGLE_COLUMN_LAYOUT } from '../../../util/environment';\nimport { throttle } from '../../../util/schedulers';\nimport { filterUsersByName, sortUserIds } from '../../../global/helpers';\nimport useInfiniteScroll from '../../../hooks/useInfiniteScroll';\nimport useHistoryBack from '../../../hooks/useHistoryBack';\nimport useLang from '../../../hooks/useLang';\n\nimport PrivateChatInfo from '../../common/PrivateChatInfo';\nimport InfiniteScroll from '../../ui/InfiniteScroll';\nimport ListItem from '../../ui/ListItem';\nimport Loading from '../../ui/Loading';\nimport FloatingActionButton from '../../ui/FloatingActionButton';\n\nexport type OwnProps = {\n filter: string;\n isActive: boolean;\n onReset: () => void;\n};\n\ntype StateProps = {\n usersById: Record;\n userStatusesById: Record;\n contactIds?: string[];\n serverTimeOffset: number;\n};\n\nconst runThrottled = throttle((cb) => cb(), 60000, true);\n\nconst ContactList: FC = ({\n isActive,\n filter,\n usersById,\n userStatusesById,\n contactIds,\n serverTimeOffset,\n onReset,\n}) => {\n const {\n loadContactList,\n openChat,\n openNewContactDialog,\n } = getActions();\n\n const lang = useLang();\n\n // Due to the parent Transition, this component never gets unmounted,\n // that's why we use throttled API call on every update.\n useEffect(() => {\n runThrottled(() => {\n loadContactList();\n });\n });\n\n useHistoryBack(isActive, onReset);\n\n const handleClick = useCallback((id: string) => {\n openChat({ id, shouldReplaceHistory: true });\n }, [openChat]);\n\n const listIds = useMemo(() => {\n if (!contactIds) {\n return undefined;\n }\n\n const filteredIds = filterUsersByName(contactIds, usersById, filter);\n\n return sortUserIds(filteredIds, usersById, userStatusesById, undefined, serverTimeOffset);\n }, [contactIds, filter, usersById, userStatusesById, serverTimeOffset]);\n\n const [viewportIds, getMore] = useInfiniteScroll(undefined, listIds, Boolean(filter));\n\n return (\n \n {viewportIds?.length ? (\n viewportIds.map((id) => (\n handleClick(id)}\n ripple={!IS_SINGLE_COLUMN_LAYOUT}\n >\n \n \n ))\n ) : viewportIds && !viewportIds.length ? (\n

\n {filter.length ? 'No contacts matched your search.' : 'Contact list is empty.'}\n

\n ) : (\n \n )}\n \n \n \n
\n );\n};\n\nexport default memo(withGlobal(\n (global): StateProps => {\n const { userIds: contactIds } = global.contactList || {};\n const { byId: usersById, statusesById: userStatusesById } = global.users;\n\n return {\n usersById,\n userStatusesById,\n contactIds,\n serverTimeOffset: global.serverTimeOffset,\n };\n },\n)(ContactList));\n","import React, {\n FC, useCallback, useEffect, useMemo, memo,\n} from '../../../lib/teact/teact';\nimport { getActions, getGlobal, withGlobal } from '../../../global';\n\nimport { ApiChat } from '../../../api/types';\n\nimport { unique } from '../../../util/iteratees';\nimport { throttle } from '../../../util/schedulers';\nimport { filterUsersByName, isUserBot, sortChatIds } from '../../../global/helpers';\nimport useLang from '../../../hooks/useLang';\nimport useHistoryBack from '../../../hooks/useHistoryBack';\n\nimport Picker from '../../common/Picker';\nimport FloatingActionButton from '../../ui/FloatingActionButton';\nimport Button from '../../ui/Button';\n\nexport type OwnProps = {\n isChannel?: boolean;\n isActive: boolean;\n selectedMemberIds: string[];\n onSelectedMemberIdsChange: (ids: string[]) => void;\n onNextStep: () => void;\n onReset: () => void;\n};\n\ntype StateProps = {\n chatsById: Record;\n localContactIds?: string[];\n searchQuery?: string;\n isSearching?: boolean;\n localUserIds?: string[];\n globalUserIds?: string[];\n};\n\nconst runThrottled = throttle((cb) => cb(), 60000, true);\n\nconst NewChatStep1: FC = ({\n isChannel,\n isActive,\n selectedMemberIds,\n onSelectedMemberIdsChange,\n onNextStep,\n onReset,\n chatsById,\n localContactIds,\n searchQuery,\n isSearching,\n localUserIds,\n globalUserIds,\n}) => {\n const {\n loadContactList,\n setGlobalSearchQuery,\n } = getActions();\n\n // Due to the parent Transition, this component never gets unmounted,\n // that's why we use throttled API call on every update.\n useEffect(() => {\n runThrottled(() => {\n loadContactList();\n });\n });\n\n const lang = useLang();\n\n useHistoryBack(isActive, onReset);\n\n const handleFilterChange = useCallback((query: string) => {\n setGlobalSearchQuery({ query });\n }, [setGlobalSearchQuery]);\n\n const displayedIds = useMemo(() => {\n // No need for expensive global updates on users, so we avoid them\n const usersById = getGlobal().users.byId;\n const foundContactIds = localContactIds ? filterUsersByName(localContactIds, usersById, searchQuery) : [];\n\n return sortChatIds(\n unique([\n ...foundContactIds,\n ...(localUserIds || []),\n ...(globalUserIds || []),\n ]).filter((contactId) => {\n const user = usersById[contactId];\n if (!user) {\n return true;\n }\n\n return !user.isSelf && (user.canBeInvitedToGroup || !isUserBot(user));\n }),\n chatsById,\n false,\n selectedMemberIds,\n );\n }, [localContactIds, chatsById, searchQuery, localUserIds, globalUserIds, selectedMemberIds]);\n\n const handleNextStep = useCallback(() => {\n if (selectedMemberIds.length || isChannel) {\n setGlobalSearchQuery({ query: '' });\n onNextStep();\n }\n }, [selectedMemberIds.length, isChannel, setGlobalSearchQuery, onNextStep]);\n\n return (\n
\n
\n \n \n \n

{lang('GroupAddMembers')}

\n
\n
\n \n\n \n \n \n
\n
\n );\n};\n\nexport default memo(withGlobal(\n (global): StateProps => {\n const { userIds: localContactIds } = global.contactList || {};\n const { byId: chatsById } = global.chats;\n\n const {\n query: searchQuery,\n fetchingStatus,\n globalResults,\n localResults,\n } = global.globalSearch;\n const { userIds: globalUserIds } = globalResults || {};\n const { userIds: localUserIds } = localResults || {};\n\n return {\n chatsById,\n localContactIds,\n searchQuery,\n isSearching: fetchingStatus?.chats,\n globalUserIds,\n localUserIds,\n };\n },\n)(NewChatStep1));\n","import React, {\n FC, useState, useCallback, useEffect, memo,\n} from '../../../lib/teact/teact';\nimport { getActions, withGlobal } from '../../../global';\n\nimport { ChatCreationProgress } from '../../../types';\n\nimport useLang from '../../../hooks/useLang';\nimport useHistoryBack from '../../../hooks/useHistoryBack';\n\nimport InputText from '../../ui/InputText';\nimport FloatingActionButton from '../../ui/FloatingActionButton';\nimport Spinner from '../../ui/Spinner';\nimport AvatarEditable from '../../ui/AvatarEditable';\nimport Button from '../../ui/Button';\nimport ListItem from '../../ui/ListItem';\nimport PrivateChatInfo from '../../common/PrivateChatInfo';\n\nexport type OwnProps = {\n isChannel?: boolean;\n isActive: boolean;\n memberIds: string[];\n onReset: (forceReturnToChatList?: boolean) => void;\n};\n\ntype StateProps = {\n creationProgress?: ChatCreationProgress;\n creationError?: string;\n};\n\n// TODO @implement\nconst MAX_USERS_FOR_LEGACY_CHAT = 199; // Accounting for current user\n\nconst NewChatStep2: FC = ({\n isChannel,\n isActive,\n memberIds,\n onReset,\n creationProgress,\n creationError,\n}) => {\n const {\n createGroupChat,\n createChannel,\n } = getActions();\n\n const lang = useLang();\n\n useHistoryBack(isActive, onReset);\n\n const [title, setTitle] = useState('');\n const [about, setAbout] = useState('');\n const [photo, setPhoto] = useState();\n const [error, setError] = useState();\n\n const chatTitleEmptyError = 'Chat title can\\'t be empty';\n const channelTitleEmptyError = 'Channel title can\\'t be empty';\n const chatTooManyUsersError = 'Sorry, creating supergroups is not yet supported';\n\n const isLoading = creationProgress === ChatCreationProgress.InProgress;\n\n const handleTitleChange = useCallback((e: React.ChangeEvent) => {\n const { value } = e.currentTarget;\n const newValue = value.replace(/^\\s+/, '');\n\n setTitle(newValue);\n\n if (newValue !== value) {\n e.currentTarget.value = newValue;\n }\n }, []);\n\n const handleDescriptionChange = useCallback((e: React.ChangeEvent) => {\n setAbout(e.currentTarget.value);\n }, []);\n\n const handleCreateGroup = useCallback(() => {\n if (!title.length) {\n setError(chatTitleEmptyError);\n return;\n }\n\n if (memberIds.length > MAX_USERS_FOR_LEGACY_CHAT) {\n setError(chatTooManyUsersError);\n return;\n }\n\n createGroupChat({\n title,\n photo,\n memberIds,\n });\n }, [title, memberIds, createGroupChat, photo, chatTitleEmptyError, chatTooManyUsersError]);\n\n const handleCreateChannel = useCallback(() => {\n if (!title.length) {\n setError(channelTitleEmptyError);\n return;\n }\n\n createChannel({\n title,\n about,\n photo,\n memberIds,\n });\n }, [title, createChannel, about, photo, memberIds, channelTitleEmptyError]);\n\n useEffect(() => {\n if (creationProgress === ChatCreationProgress.Complete) {\n onReset(true);\n }\n }, [creationProgress, onReset]);\n\n const renderedError = (creationError && lang(creationError)) || (\n error !== chatTitleEmptyError && error !== channelTitleEmptyError\n ? error\n : undefined\n );\n\n return (\n
\n
\n onReset()}\n ariaLabel=\"Return to member selection\"\n >\n \n \n

{lang(isChannel ? 'NewChannel' : 'NewGroup')}

\n
\n
\n \n \n {isChannel && (\n <>\n \n

{lang('DescriptionInfo')}

\n \n )}\n\n {renderedError && (\n

{renderedError}

\n )}\n\n {memberIds.length > 0 && (\n <>\n

{lang('GroupInfo.ParticipantCount', memberIds.length, 'i')}

\n\n
\n {memberIds.map((id) => (\n \n \n \n ))}\n
\n \n )}\n
\n\n \n {isLoading ? (\n \n ) : (\n \n )}\n \n
\n );\n};\n\nexport default memo(withGlobal(\n (global): StateProps => {\n const {\n progress: creationProgress,\n error: creationError,\n } = global.chatCreation || {};\n\n return {\n creationProgress,\n creationError,\n };\n },\n)(NewChatStep2));\n","import React, {\n FC, memo, useCallback, useState,\n} from '../../../lib/teact/teact';\n\nimport { LeftColumnContent } from '../../../types';\n\nimport { LAYERS_ANIMATION_NAME } from '../../../util/environment';\n\nimport Transition from '../../ui/Transition';\nimport NewChatStep1 from './NewChatStep1';\nimport NewChatStep2 from './NewChatStep2';\n\nimport './NewChat.scss';\n\nexport type OwnProps = {\n isActive: boolean;\n isChannel?: boolean;\n content: LeftColumnContent;\n onContentChange: (content: LeftColumnContent) => void;\n onReset: () => void;\n};\n\nconst RENDER_COUNT = Object.keys(LeftColumnContent).length / 2;\n\nconst NewChat: FC = ({\n isActive,\n isChannel = false,\n content,\n onContentChange,\n onReset,\n}) => {\n const [newChatMemberIds, setNewChatMemberIds] = useState([]);\n\n const handleNextStep = useCallback(() => {\n onContentChange(isChannel ? LeftColumnContent.NewChannelStep2 : LeftColumnContent.NewGroupStep2);\n }, [isChannel, onContentChange]);\n\n return (\n \n {(isStepActive) => {\n switch (content) {\n case LeftColumnContent.NewChannelStep1:\n case LeftColumnContent.NewGroupStep1:\n return (\n \n );\n case LeftColumnContent.NewChannelStep2:\n case LeftColumnContent.NewGroupStep2:\n return (\n \n );\n default:\n return undefined;\n }\n }}\n \n );\n};\n\nexport default memo(NewChat);\n","import React, { FC, memo } from '../../lib/teact/teact';\n\nimport useLang from '../../hooks/useLang';\nimport useHistoryBack from '../../hooks/useHistoryBack';\n\nimport Button from '../ui/Button';\nimport ChatList from './main/ChatList';\nimport { LeftColumnContent } from '../../types';\n\nimport './ArchivedChats.scss';\n\nexport type OwnProps = {\n isActive: boolean;\n onReset: () => void;\n onContentChange: (content: LeftColumnContent) => void;\n};\n\nconst ArchivedChats: FC = ({ isActive, onReset, onContentChange }) => {\n const lang = useLang();\n\n useHistoryBack(isActive, onReset, onContentChange, LeftColumnContent.Archived);\n\n return (\n
\n
\n \n \n \n

{lang('ArchivedChats')}

\n
\n \n
\n );\n};\n\nexport default memo(ArchivedChats);\n","import React, {\n FC, useCallback, memo, useMemo, useState,\n} from '../../lib/teact/teact';\nimport { getActions, withGlobal } from '../../global';\n\nimport { ApiChatFolder } from '../../api/types';\n\nimport useLang from '../../hooks/useLang';\n\nimport Modal from '../ui/Modal';\nimport Button from '../ui/Button';\nimport CheckboxGroup from '../ui/CheckboxGroup';\n\nexport type OwnProps = {\n isOpen: boolean;\n chatId: string;\n onClose: () => void;\n onCloseAnimationEnd?: () => void;\n};\n\ntype StateProps = {\n foldersById?: Record;\n folderOrderedIds?: number[];\n};\n\nconst ChatFolderModal: FC = ({\n isOpen,\n chatId,\n foldersById,\n folderOrderedIds,\n onClose,\n onCloseAnimationEnd,\n}) => {\n const { editChatFolders } = getActions();\n\n const lang = useLang();\n\n const initialSelectedFolderIds = useMemo(() => {\n if (!foldersById) {\n return [];\n }\n\n return Object.keys(foldersById).reduce((result, folderId) => {\n const { includedChatIds, pinnedChatIds } = foldersById[Number(folderId)];\n if (includedChatIds.includes(chatId) || pinnedChatIds?.includes(chatId)) {\n result.push(folderId);\n }\n\n return result;\n }, [] as string[]);\n }, [chatId, foldersById]);\n\n const [selectedFolderIds, setSelectedFolderIds] = useState(initialSelectedFolderIds);\n\n const folders = useMemo(() => {\n return folderOrderedIds?.map((folderId) => ({\n label: foldersById ? foldersById[folderId].title : '',\n value: String(folderId),\n })) || [];\n }, [folderOrderedIds, foldersById]);\n\n const handleSubmit = useCallback(() => {\n const idsToRemove = initialSelectedFolderIds.filter((id) => !selectedFolderIds.includes(id)).map(Number);\n const idsToAdd = selectedFolderIds.filter((id) => !initialSelectedFolderIds.includes(id)).map(Number);\n\n editChatFolders({ chatId, idsToRemove, idsToAdd });\n onClose();\n }, [chatId, editChatFolders, initialSelectedFolderIds, onClose, selectedFolderIds]);\n\n if (!foldersById || !folderOrderedIds) {\n return undefined;\n }\n\n return (\n \n \n \n \n \n );\n};\n\nexport default memo(withGlobal(\n (global): StateProps => {\n const { byId: foldersById, orderedIds: folderOrderedIds } = global.chatFolders;\n\n return {\n foldersById,\n folderOrderedIds,\n };\n },\n)(ChatFolderModal));\n","import { ApiMediaFormat, ApiMessage } from '../../../../api/types';\n\nimport * as mediaLoader from '../../../../util/mediaLoader';\nimport {\n getMessageMediaHash,\n getMessagePhoto,\n getMessageText,\n getMessageTextWithSpoilers,\n getMessageWebPagePhoto,\n getMessageWebPageVideo,\n hasMessageLocalBlobUrl,\n} from '../../../../global/helpers';\nimport { CLIPBOARD_ITEM_SUPPORTED, copyImageToClipboard, copyTextToClipboard } from '../../../../util/clipboard';\nimport getMessageIdsForSelectedText from '../../../../util/getMessageIdsForSelectedText';\n\ntype ICopyOptions = {\n label: string;\n icon: string;\n handler: () => void;\n}[];\n\nexport function getMessageCopyOptions(\n message: ApiMessage,\n afterEffect?: () => void,\n onCopyLink?: () => void,\n onCopyMessages?: (messageIds: number[]) => void,\n): ICopyOptions {\n const options: ICopyOptions = [];\n const text = getMessageText(message);\n const photo = getMessagePhoto(message)\n || (!getMessageWebPageVideo(message) ? getMessageWebPagePhoto(message) : undefined);\n const mediaHash = getMessageMediaHash(message, 'inline');\n const canImageBeCopied = photo && (mediaHash || hasMessageLocalBlobUrl(message)) && CLIPBOARD_ITEM_SUPPORTED;\n const selection = window.getSelection();\n\n if (canImageBeCopied) {\n options.push({\n label: 'lng_context_copy_image',\n icon: 'copy-media',\n handler: () => {\n Promise.resolve(mediaHash ? mediaLoader.fetch(mediaHash, ApiMediaFormat.BlobUrl) : photo!.blobUrl)\n .then(copyImageToClipboard);\n\n if (afterEffect) {\n afterEffect();\n }\n },\n });\n }\n\n if (text) {\n // Detect if the user has selection in the current message\n const hasSelection = Boolean((\n selection?.anchorNode?.parentNode\n && (selection.anchorNode.parentNode as HTMLElement).closest('.Message .content-inner')\n && selection.toString().replace(/(?:\\r\\n|\\r|\\n)/g, '') !== ''\n ));\n\n options.push({\n label: getCopyLabel(hasSelection),\n icon: 'copy',\n handler: () => {\n const messageIds = getMessageIdsForSelectedText();\n if (messageIds?.length && onCopyMessages) {\n onCopyMessages(messageIds);\n } else {\n const clipboardText = hasSelection && selection ? selection.toString() : getMessageTextWithSpoilers(message)!;\n copyTextToClipboard(clipboardText);\n }\n\n if (afterEffect) {\n afterEffect();\n }\n },\n });\n }\n\n if (onCopyLink) {\n options.push({\n label: 'lng_context_copy_message_link',\n icon: 'link',\n handler: () => {\n onCopyLink();\n\n if (afterEffect) {\n afterEffect();\n }\n },\n });\n }\n\n return options;\n}\n\nfunction getCopyLabel(hasSelection: boolean): string {\n if (hasSelection) {\n return 'lng_context_copy_selected';\n }\n return 'lng_context_copy_text';\n}\n","let scrollLockEl: HTMLElement | null | undefined;\nlet excludedClosestSelector: string | undefined;\n\nconst IGNORED_KEYS: Record = {\n Down: true,\n ArrowDown: true,\n Up: true,\n ArrowUp: true,\n Left: true,\n ArrowLeft: true,\n Right: true,\n ArrowRight: true,\n ' ': true,\n PageUp: true,\n PageDown: true,\n End: true,\n Home: true,\n Tab: true,\n};\n\nfunction isTextBox(target: EventTarget | null) {\n if (!target || !(target instanceof HTMLElement)) return false;\n const element = target;\n const tagName = element.tagName.toLowerCase();\n if (tagName === 'textarea') return true;\n if (tagName !== 'input') return false;\n const type = element.getAttribute('type');\n if (!type) return false;\n const inputTypes = [\n 'text', 'password', 'number', 'email', 'tel', 'url',\n 'search', 'date', 'datetime', 'datetime-local', 'time', 'month', 'week',\n ];\n return inputTypes.indexOf(type.toLowerCase()) > -1;\n}\n\nexport const getTouchY = (e: WheelEvent | TouchEvent | React.WheelEvent | React.TouchEvent) => {\n return ('changedTouches' in e ? e.changedTouches[0].clientY : 0);\n};\n\nconst preventDefault = (e: WheelEvent | TouchEvent) => {\n const deltaY = 'deltaY' in e ? e.deltaY : getTouchY(e);\n\n if (\n !scrollLockEl\n // Allow overlay scrolling\n || !scrollLockEl.contains(e.target as HTMLElement)\n // Prevent top overscroll\n || (scrollLockEl.scrollTop <= 0 && deltaY <= 0)\n // Prevent bottom overscroll\n || (scrollLockEl.scrollTop >= (scrollLockEl.scrollHeight - scrollLockEl.offsetHeight) && deltaY >= 0)\n ) {\n if (excludedClosestSelector && (e.target as HTMLElement).closest(excludedClosestSelector)) return;\n e.preventDefault();\n }\n};\n\nfunction preventDefaultForScrollKeys(e: KeyboardEvent) {\n if (IGNORED_KEYS[e.key] && !isTextBox(e.target)) {\n e.preventDefault();\n }\n}\n\nexport function disableScrolling(el?: HTMLElement | null, _excludedClosestSelector?: string) {\n scrollLockEl = el;\n excludedClosestSelector = _excludedClosestSelector;\n // Disable scrolling in Chrome\n document.addEventListener('wheel', preventDefault, { passive: false });\n document.addEventListener('touchmove', preventDefault, { passive: false });\n document.onkeydown = preventDefaultForScrollKeys;\n}\n\nexport function enableScrolling() {\n scrollLockEl = undefined;\n excludedClosestSelector = undefined;\n document.removeEventListener('wheel', preventDefault); // Enable scrolling in Chrome\n document.removeEventListener('touchmove', preventDefault);\n // eslint-disable-next-line no-null/no-null\n document.onkeydown = null;\n}\n","import React, {\n FC, memo, useRef,\n} from '../../../lib/teact/teact';\n\nimport { ApiAvailableReaction, ApiMediaFormat } from '../../../api/types';\n\nimport useMedia from '../../../hooks/useMedia';\nimport useFlag from '../../../hooks/useFlag';\nimport useShowTransition from '../../../hooks/useShowTransition';\nimport { createClassNameBuilder } from '../../../util/buildClassName';\nimport { IS_COMPACT_MENU } from '../../../util/environment';\n\nimport AnimatedSticker from '../../common/AnimatedSticker';\n\nimport './ReactionSelectorReaction.scss';\n\nconst REACTION_SIZE = IS_COMPACT_MENU ? 24 : 32;\n\ntype OwnProps = {\n reaction: ApiAvailableReaction;\n previewIndex: number;\n isReady?: boolean;\n onSendReaction: (reaction: string, x: number, y: number) => void;\n};\n\nconst cn = createClassNameBuilder('ReactionSelectorReaction');\n\nconst ReactionSelectorReaction: FC = ({\n reaction, previewIndex, onSendReaction, isReady,\n}) => {\n // eslint-disable-next-line no-null/no-null\n const containerRef = useRef(null);\n\n const mediaData = useMedia(`document${reaction.selectAnimation?.id}`, !isReady, ApiMediaFormat.Lottie);\n\n const [isActivated, activate, deactivate] = useFlag();\n const [isAnimationLoaded, markAnimationLoaded] = useFlag();\n\n const shouldRenderAnimated = Boolean(isReady && mediaData);\n const { transitionClassNames: animatedClassNames } = useShowTransition(shouldRenderAnimated);\n const { shouldRender: shouldRenderStatic, transitionClassNames: staticClassNames } = useShowTransition(\n !isReady || !isAnimationLoaded, undefined, true,\n );\n\n function handleClick() {\n if (!containerRef.current) return;\n const { x, y } = containerRef.current.getBoundingClientRect();\n\n onSendReaction(reaction.reaction, x, y);\n }\n\n return (\n \n {shouldRenderStatic && (\n \n )}\n {shouldRenderAnimated && (\n \n )}\n
\n );\n};\n\nexport default memo(ReactionSelectorReaction);\n","import React, {\n FC, memo, useLayoutEffect, useRef,\n} from '../../../lib/teact/teact';\n\nimport { ApiAvailableReaction } from '../../../api/types';\n\nimport useHorizontalScroll from '../../../hooks/useHorizontalScroll';\nimport useFlag from '../../../hooks/useFlag';\nimport { getTouchY } from '../../../util/scrollLock';\nimport { createClassNameBuilder } from '../../../util/buildClassName';\nimport { IS_COMPACT_MENU } from '../../../util/environment';\n\nimport ReactionSelectorReaction from './ReactionSelectorReaction';\n\nimport './ReactionSelector.scss';\n\ntype OwnProps = {\n enabledReactions?: string[];\n onSendReaction: (reaction: string, x: number, y: number) => void;\n isPrivate?: boolean;\n availableReactions?: ApiAvailableReaction[];\n isReady?: boolean;\n};\n\nconst cn = createClassNameBuilder('ReactionSelector');\n\nconst ReactionSelector: FC = ({\n availableReactions,\n enabledReactions,\n onSendReaction,\n isPrivate,\n isReady,\n}) => {\n // eslint-disable-next-line no-null/no-null\n const itemsScrollRef = useRef(null);\n const [isHorizontalScrollEnabled, enableHorizontalScroll] = useFlag(false);\n useHorizontalScroll(itemsScrollRef.current, !isHorizontalScrollEnabled);\n\n useLayoutEffect(() => {\n enableHorizontalScroll();\n }, [enableHorizontalScroll]);\n\n const handleWheel = (e: React.WheelEvent | React.TouchEvent) => {\n if (!itemsScrollRef) return;\n const deltaY = 'deltaY' in e ? e.deltaY : getTouchY(e);\n\n if (deltaY) {\n e.preventDefault();\n }\n };\n\n if ((!isPrivate && !enabledReactions?.length) || !availableReactions) return undefined;\n\n return (\n
\n
\n
\n
\n
\n {availableReactions?.map((reaction, i) => {\n if (reaction.isInactive\n || (!isPrivate && (!enabledReactions || !enabledReactions.includes(reaction.reaction)))) return undefined;\n return (\n \n );\n })}\n
\n
\n
\n );\n};\n\nexport default memo(ReactionSelector);\n","import React, {\n FC, memo, useCallback, useEffect, useRef,\n} from '../../../lib/teact/teact';\n\nimport { ApiAvailableReaction, ApiMessage, ApiUser } from '../../../api/types';\nimport { IAnchorPosition } from '../../../types';\n\nimport { getMessageCopyOptions } from './helpers/copyOptions';\nimport { disableScrolling, enableScrolling } from '../../../util/scrollLock';\nimport { getUserFullName } from '../../../global/helpers';\nimport useContextMenuPosition from '../../../hooks/useContextMenuPosition';\nimport useLang from '../../../hooks/useLang';\nimport buildClassName from '../../../util/buildClassName';\nimport useFlag from '../../../hooks/useFlag';\nimport { IS_SINGLE_COLUMN_LAYOUT } from '../../../util/environment';\n\nimport Menu from '../../ui/Menu';\nimport MenuItem from '../../ui/MenuItem';\nimport Avatar from '../../common/Avatar';\nimport ReactionSelector from './ReactionSelector';\n\nimport './MessageContextMenu.scss';\n\ntype OwnProps = {\n availableReactions?: ApiAvailableReaction[];\n isOpen: boolean;\n anchor: IAnchorPosition;\n message: ApiMessage;\n canSendNow?: boolean;\n enabledReactions?: string[];\n canReschedule?: boolean;\n canReply?: boolean;\n canPin?: boolean;\n canUnpin?: boolean;\n canDelete?: boolean;\n canReport?: boolean;\n canShowReactionsCount?: boolean;\n canShowReactionList?: boolean;\n canRemoveReaction?: boolean;\n canEdit?: boolean;\n canForward?: boolean;\n canFaveSticker?: boolean;\n canUnfaveSticker?: boolean;\n canCopy?: boolean;\n canCopyLink?: boolean;\n canSelect?: boolean;\n isPrivate?: boolean;\n canDownload?: boolean;\n canSaveGif?: boolean;\n isDownloading?: boolean;\n canShowSeenBy?: boolean;\n seenByRecentUsers?: ApiUser[];\n onReply: () => void;\n onEdit: () => void;\n onPin: () => void;\n onUnpin: () => void;\n onForward: () => void;\n onDelete: () => void;\n onReport: () => void;\n onFaveSticker: () => void;\n onUnfaveSticker: () => void;\n onSelect: () => void;\n onSend: () => void;\n onReschedule: () => void;\n onClose: () => void;\n onCloseAnimationEnd?: () => void;\n onCopyLink?: () => void;\n onCopyMessages?: (messageIds: number[]) => void;\n onDownload?: () => void;\n onSaveGif?: () => void;\n onShowSeenBy?: () => void;\n onShowReactors?: () => void;\n onSendReaction: (reaction: string | undefined, x: number, y: number) => void;\n};\n\nconst SCROLLBAR_WIDTH = 10;\nconst REACTION_BUBBLE_EXTRA_WIDTH = 32;\nconst ANIMATION_DURATION = 200;\n\nconst MessageContextMenu: FC = ({\n availableReactions,\n isOpen,\n message,\n isPrivate,\n enabledReactions,\n anchor,\n canSendNow,\n canReschedule,\n canReply,\n canEdit,\n canPin,\n canUnpin,\n canDelete,\n canReport,\n canForward,\n canFaveSticker,\n canUnfaveSticker,\n canCopy,\n canCopyLink,\n canSelect,\n canDownload,\n canSaveGif,\n isDownloading,\n canShowSeenBy,\n canShowReactionsCount,\n canRemoveReaction,\n canShowReactionList,\n seenByRecentUsers,\n onReply,\n onEdit,\n onPin,\n onUnpin,\n onForward,\n onDelete,\n onReport,\n onFaveSticker,\n onUnfaveSticker,\n onSelect,\n onSend,\n onReschedule,\n onClose,\n onCloseAnimationEnd,\n onCopyLink,\n onDownload,\n onSaveGif,\n onShowSeenBy,\n onShowReactors,\n onSendReaction,\n onCopyMessages,\n}) => {\n // eslint-disable-next-line no-null/no-null\n const menuRef = useRef(null);\n // eslint-disable-next-line no-null/no-null\n const scrollableRef = useRef(null);\n const copyOptions = getMessageCopyOptions(message, onClose, canCopyLink ? onCopyLink : undefined, onCopyMessages);\n const noReactions = !isPrivate && !enabledReactions?.length;\n const withReactions = canShowReactionList && !noReactions;\n\n const [isReady, markIsReady, unmarkIsReady] = useFlag();\n\n const getTriggerElement = useCallback(() => {\n return document.querySelector(`.Transition__slide--active > .MessageList div[data-message-id=\"${message.id}\"]`);\n }, [message.id]);\n\n const getRootElement = useCallback(\n () => document.querySelector('.Transition__slide--active > .MessageList'),\n [],\n );\n\n const getMenuElement = useCallback(\n () => document.querySelector('.MessageContextMenu .bubble'),\n [],\n );\n\n const getLayout = useCallback(() => {\n const extraHeightAudioPlayer = (IS_SINGLE_COLUMN_LAYOUT\n && (document.querySelector('.AudioPlayer-content'))?.offsetHeight) || 0;\n const pinnedElement = document.querySelector('.HeaderPinnedMessage-wrapper');\n const extraHeightPinned = (((IS_SINGLE_COLUMN_LAYOUT && !extraHeightAudioPlayer)\n || (!IS_SINGLE_COLUMN_LAYOUT && pinnedElement?.classList.contains('full-width')))\n && pinnedElement?.offsetHeight) || 0;\n\n return {\n extraPaddingX: SCROLLBAR_WIDTH,\n extraTopPadding: (document.querySelector('.MiddleHeader')!).offsetHeight,\n marginSides: withReactions ? REACTION_BUBBLE_EXTRA_WIDTH : undefined,\n extraMarginTop: extraHeightPinned + extraHeightAudioPlayer,\n };\n }, [withReactions]);\n\n const handleRemoveReaction = useCallback(() => {\n onSendReaction(undefined, 0, 0);\n }, [onSendReaction]);\n\n useEffect(() => {\n if (!isOpen) {\n unmarkIsReady();\n return;\n }\n\n setTimeout(() => {\n markIsReady();\n }, ANIMATION_DURATION);\n }, [isOpen, markIsReady, unmarkIsReady]);\n\n const {\n positionX, positionY, transformOriginX, transformOriginY, style, menuStyle, withScroll,\n } = useContextMenuPosition(anchor, getTriggerElement, getRootElement, getMenuElement, getLayout);\n\n useEffect(() => {\n disableScrolling(withScroll ? scrollableRef.current : undefined, '.ReactionSelector');\n\n return enableScrolling;\n }, [withScroll]);\n\n const lang = useLang();\n\n return (\n \n {canShowReactionList && (\n \n )}\n\n \n {canRemoveReaction && Remove Reaction}\n {canSendNow && {lang('MessageScheduleSend')}}\n {canReschedule && (\n {lang('MessageScheduleEditTime')}\n )}\n {canReply && {lang('Reply')}}\n {canEdit && {lang('Edit')}}\n {canFaveSticker && (\n {lang('AddToFavorites')}\n )}\n {canUnfaveSticker && (\n {lang('Stickers.RemoveFromFavorites')}\n )}\n {canCopy && copyOptions.map((option) => (\n {lang(option.label)}\n ))}\n {canPin && {lang('DialogPin')}}\n {canUnpin && {lang('DialogUnpin')}}\n {canSaveGif && {lang('lng_context_save_gif')}}\n {canDownload && (\n \n {isDownloading ? lang('lng_context_cancel_download') : lang('lng_media_download')}\n \n )}\n {canForward && {lang('Forward')}}\n {canSelect && {lang('Common.Select')}}\n {canReport && {lang('lng_context_report_msg')}}\n {(canShowSeenBy || canShowReactionsCount) && (\n \n \n {canShowReactionsCount && message.reactors?.count ? (\n canShowSeenBy && message.seenByUserIds?.length\n ? lang(\n 'Chat.OutgoingContextMixedReactionCount',\n [message.reactors.count, message.seenByUserIds.length],\n )\n : lang('Chat.ContextReactionCount', message.reactors.count, 'i')\n ) : (\n message.seenByUserIds?.length === 1 && seenByRecentUsers\n ? getUserFullName(seenByRecentUsers[0])\n : (message.seenByUserIds?.length\n ? lang('Conversation.ContextMenuSeen', message.seenByUserIds.length, 'i')\n : lang('Conversation.ContextMenuNoViews')\n )\n )}\n \n
\n {seenByRecentUsers?.map((user) => (\n \n ))}\n
\n \n )}\n {canDelete && {lang('Delete')}}\n
\n \n );\n};\n\nexport default memo(MessageContextMenu);\n","import React, {\n FC, memo, useCallback, useEffect, useMemo, useState,\n} from '../../../lib/teact/teact';\nimport { getActions, getGlobal, withGlobal } from '../../../global';\n\nimport { MessageListType } from '../../../global/types';\nimport { ApiAvailableReaction, ApiMessage } from '../../../api/types';\nimport { IAlbum, IAnchorPosition } from '../../../types';\nimport {\n selectActiveDownloadIds,\n selectAllowedMessageActions,\n selectChat,\n selectCurrentMessageList,\n selectIsMessageProtected,\n} from '../../../global/selectors';\nimport {\n isActionMessage, isChatChannel,\n isChatGroup, isOwnMessage, areReactionsEmpty, isUserId, isMessageLocal, getMessageVideo,\n} from '../../../global/helpers';\nimport { SERVICE_NOTIFICATIONS_USER_ID } from '../../../config';\nimport { getDayStartAt } from '../../../util/dateFormat';\nimport { copyTextToClipboard } from '../../../util/clipboard';\nimport useShowTransition from '../../../hooks/useShowTransition';\nimport useFlag from '../../../hooks/useFlag';\nimport { REM } from '../../common/helpers/mediaDimensions';\n\nimport DeleteMessageModal from '../../common/DeleteMessageModal';\nimport ReportMessageModal from '../../common/ReportMessageModal';\nimport PinMessageModal from '../../common/PinMessageModal';\nimport MessageContextMenu from './MessageContextMenu';\nimport CalendarModal from '../../common/CalendarModal';\nimport buildClassName from '../../../util/buildClassName';\n\nconst START_SIZE = 2 * REM;\n\nexport type OwnProps = {\n isOpen: boolean;\n chatUsername?: string;\n message: ApiMessage;\n album?: IAlbum;\n anchor: IAnchorPosition;\n messageListType: MessageListType;\n onClose: () => void;\n onCloseAnimationEnd: () => void;\n};\n\ntype StateProps = {\n availableReactions?: ApiAvailableReaction[];\n noOptions?: boolean;\n canSendNow?: boolean;\n canReschedule?: boolean;\n canReply?: boolean;\n canPin?: boolean;\n canShowReactionsCount?: boolean;\n canShowReactionList?: boolean;\n canRemoveReaction?: boolean;\n canUnpin?: boolean;\n canDelete?: boolean;\n canReport?: boolean;\n canEdit?: boolean;\n canForward?: boolean;\n canFaveSticker?: boolean;\n canUnfaveSticker?: boolean;\n canCopy?: boolean;\n isPrivate?: boolean;\n hasFullInfo?: boolean;\n canCopyLink?: boolean;\n canSelect?: boolean;\n canDownload?: boolean;\n canSaveGif?: boolean;\n activeDownloads: number[];\n canShowSeenBy?: boolean;\n enabledReactions?: string[];\n};\n\nconst ContextMenuContainer: FC = ({\n availableReactions,\n isOpen,\n messageListType,\n chatUsername,\n message,\n album,\n anchor,\n onClose,\n onCloseAnimationEnd,\n noOptions,\n canSendNow,\n hasFullInfo,\n canReschedule,\n canReply,\n canPin,\n canUnpin,\n canDelete,\n canReport,\n canShowReactionsCount,\n canShowReactionList,\n canRemoveReaction,\n canEdit,\n enabledReactions,\n isPrivate,\n canForward,\n canFaveSticker,\n canUnfaveSticker,\n canCopy,\n canCopyLink,\n canSelect,\n canDownload,\n canSaveGif,\n activeDownloads,\n canShowSeenBy,\n}) => {\n const {\n setReplyingToId,\n setEditingId,\n pinMessage,\n openForwardMenu,\n faveSticker,\n unfaveSticker,\n toggleMessageSelection,\n sendScheduledMessages,\n rescheduleMessage,\n downloadMessageMedia,\n cancelMessageMediaDownload,\n loadSeenBy,\n openSeenByModal,\n sendReaction,\n openReactorListModal,\n loadFullChat,\n loadReactors,\n copyMessagesByIds,\n saveGif,\n } = getActions();\n\n const { transitionClassNames } = useShowTransition(isOpen, onCloseAnimationEnd, undefined, false);\n const [isMenuOpen, setIsMenuOpen] = useState(true);\n const [isDeleteModalOpen, setIsDeleteModalOpen] = useState(false);\n const [isReportModalOpen, setIsReportModalOpen] = useState(false);\n const [isPinModalOpen, setIsPinModalOpen] = useState(false);\n const [isCalendarOpen, openCalendar, closeCalendar] = useFlag();\n\n useEffect(() => {\n if (canShowSeenBy && isOpen) {\n loadSeenBy({ chatId: message.chatId, messageId: message.id });\n }\n }, [loadSeenBy, isOpen, message.chatId, message.id, canShowSeenBy]);\n\n useEffect(() => {\n if (canShowReactionsCount && isOpen) {\n loadReactors({ chatId: message.chatId, messageId: message.id });\n }\n }, [canShowReactionsCount, isOpen, loadReactors, message.chatId, message.id]);\n\n useEffect(() => {\n if (!hasFullInfo && !isPrivate && isOpen) {\n loadFullChat({ chatId: message.chatId });\n }\n }, [hasFullInfo, isOpen, isPrivate, loadFullChat, message.chatId]);\n\n const seenByRecentUsers = useMemo(() => {\n if (message.reactions?.recentReactions?.length) {\n // No need for expensive global updates on users, so we avoid them\n const usersById = getGlobal().users.byId;\n\n return message.reactions?.recentReactions?.slice(0, 3).map(({ userId }) => usersById[userId]).filter(Boolean);\n }\n\n if (!message.seenByUserIds) {\n return undefined;\n }\n\n // No need for expensive global updates on users, so we avoid them\n const usersById = getGlobal().users.byId;\n return message.seenByUserIds?.slice(0, 3).map((id) => usersById[id]).filter(Boolean);\n }, [message.reactions?.recentReactions, message.seenByUserIds]);\n\n const isDownloading = album ? album.messages.some((msg) => activeDownloads.includes(msg.id))\n : activeDownloads.includes(message.id);\n\n const handleDelete = useCallback(() => {\n setIsMenuOpen(false);\n setIsDeleteModalOpen(true);\n }, []);\n\n const handleReport = useCallback(() => {\n setIsMenuOpen(false);\n setIsReportModalOpen(true);\n }, []);\n\n const closeMenu = useCallback(() => {\n setIsMenuOpen(false);\n onClose();\n }, [onClose]);\n\n const closeDeleteModal = useCallback(() => {\n setIsDeleteModalOpen(false);\n onClose();\n }, [onClose]);\n\n const closeReportModal = useCallback(() => {\n setIsReportModalOpen(false);\n onClose();\n }, [onClose]);\n\n const closePinModal = useCallback(() => {\n setIsPinModalOpen(false);\n onClose();\n }, [onClose]);\n\n const handleCloseCalendar = useCallback(() => {\n closeCalendar();\n onClose();\n }, [closeCalendar, onClose]);\n\n const handleReply = useCallback(() => {\n setReplyingToId({ messageId: message.id });\n closeMenu();\n }, [setReplyingToId, message.id, closeMenu]);\n\n const handleEdit = useCallback(() => {\n setEditingId({ messageId: message.id });\n closeMenu();\n }, [setEditingId, message.id, closeMenu]);\n\n const handlePin = useCallback(() => {\n setIsMenuOpen(false);\n setIsPinModalOpen(true);\n }, []);\n\n const handleUnpin = useCallback(() => {\n pinMessage({ messageId: message.id, isUnpin: true });\n closeMenu();\n }, [pinMessage, message.id, closeMenu]);\n\n const handleForward = useCallback(() => {\n closeMenu();\n if (album?.messages) {\n const messageIds = album.messages.map(({ id }) => id);\n openForwardMenu({ fromChatId: message.chatId, messageIds });\n } else {\n openForwardMenu({ fromChatId: message.chatId, messageIds: [message.id] });\n }\n }, [openForwardMenu, message, closeMenu, album]);\n\n const handleFaveSticker = useCallback(() => {\n closeMenu();\n faveSticker({ sticker: message.content.sticker });\n }, [closeMenu, message.content.sticker, faveSticker]);\n\n const handleUnfaveSticker = useCallback(() => {\n closeMenu();\n unfaveSticker({ sticker: message.content.sticker });\n }, [closeMenu, message.content.sticker, unfaveSticker]);\n\n const handleSelectMessage = useCallback(() => {\n const params = album?.messages\n ? {\n messageId: message.id,\n childMessageIds: album.messages.map(({ id }) => id),\n withShift: false,\n }\n : { messageId: message.id, withShift: false };\n\n toggleMessageSelection(params);\n closeMenu();\n }, [closeMenu, message.id, toggleMessageSelection, album]);\n\n const handleScheduledMessageSend = useCallback(() => {\n sendScheduledMessages({ chatId: message.chatId, id: message.id });\n closeMenu();\n }, [closeMenu, message.chatId, message.id, sendScheduledMessages]);\n\n const handleOpenCalendar = useCallback(() => {\n setIsMenuOpen(false);\n openCalendar();\n }, [openCalendar]);\n\n const handleOpenSeenByModal = useCallback(() => {\n closeMenu();\n openSeenByModal({ chatId: message.chatId, messageId: message.id });\n }, [closeMenu, message.chatId, message.id, openSeenByModal]);\n\n const handleOpenReactorListModal = useCallback(() => {\n closeMenu();\n openReactorListModal({ chatId: message.chatId, messageId: message.id });\n }, [closeMenu, openReactorListModal, message.chatId, message.id]);\n\n const handleRescheduleMessage = useCallback((date: Date) => {\n rescheduleMessage({\n chatId: message.chatId,\n messageId: message.id,\n scheduledAt: Math.round(date.getTime() / 1000),\n });\n }, [message.chatId, message.id, rescheduleMessage]);\n\n const handleCopyMessages = useCallback((messageIds: number[]) => {\n copyMessagesByIds({ messageIds });\n closeMenu();\n }, [closeMenu, copyMessagesByIds]);\n\n const handleCopyLink = useCallback(() => {\n copyTextToClipboard(`https://t.me/${chatUsername || `c/${message.chatId.replace('-', '')}`}/${message.id}`);\n closeMenu();\n }, [chatUsername, closeMenu, message.chatId, message.id]);\n\n const handleDownloadClick = useCallback(() => {\n (album?.messages || [message]).forEach((msg) => {\n if (isDownloading) {\n cancelMessageMediaDownload({ message: msg });\n } else {\n downloadMessageMedia({ message: msg });\n }\n });\n closeMenu();\n }, [album, message, closeMenu, isDownloading, cancelMessageMediaDownload, downloadMessageMedia]);\n\n const handleSaveGif = useCallback(() => {\n const video = getMessageVideo(message);\n saveGif({ gif: video });\n closeMenu();\n }, [closeMenu, message, saveGif]);\n\n const handleSendReaction = useCallback((reaction: string | undefined, x: number, y: number) => {\n sendReaction({\n chatId: message.chatId, messageId: message.id, reaction, x, y, startSize: START_SIZE,\n });\n closeMenu();\n }, [closeMenu, message.chatId, message.id, sendReaction]);\n\n const reportMessageIds = useMemo(() => (album ? album.messages : [message]).map(({ id }) => id), [album, message]);\n\n if (noOptions) {\n closeMenu();\n\n return undefined;\n }\n\n const scheduledMaxDate = new Date();\n scheduledMaxDate.setFullYear(scheduledMaxDate.getFullYear() + 1);\n\n return (\n
\n \n \n \n \n {canReschedule && (\n \n )}\n
\n );\n};\n\nexport default memo(withGlobal(\n (global, { message, messageListType }): StateProps => {\n const { threadId } = selectCurrentMessageList(global) || {};\n const activeDownloads = selectActiveDownloadIds(global, message.chatId);\n const chat = selectChat(global, message.chatId);\n const { seenByExpiresAt, seenByMaxChatMembers } = global.appConfig || {};\n const {\n noOptions,\n canReply,\n canPin,\n canUnpin,\n canDelete,\n canReport,\n canEdit,\n canForward,\n canFaveSticker,\n canUnfaveSticker,\n canCopy,\n canCopyLink,\n canSelect,\n canDownload,\n canSaveGif,\n } = (threadId && selectAllowedMessageActions(global, message, threadId)) || {};\n const isPinned = messageListType === 'pinned';\n const isScheduled = messageListType === 'scheduled';\n const isChannel = chat && isChatChannel(chat);\n const isLocal = isMessageLocal(message);\n const canShowSeenBy = Boolean(chat\n && seenByMaxChatMembers\n && seenByExpiresAt\n && isChatGroup(chat)\n && isOwnMessage(message)\n && !isScheduled\n && chat.membersCount\n && chat.membersCount < seenByMaxChatMembers\n && message.date > Date.now() / 1000 - seenByExpiresAt);\n const isPrivate = chat && isUserId(chat.id);\n const isAction = isActionMessage(message);\n const canShowReactionsCount = !isLocal && !isChannel && !isScheduled && !isAction && !isPrivate && message.reactions\n && !areReactionsEmpty(message.reactions) && message.reactions.canSeeList;\n const canRemoveReaction = isPrivate && message.reactions?.results?.some((l) => l.isChosen);\n const isProtected = selectIsMessageProtected(global, message);\n\n return {\n availableReactions: global.availableReactions,\n noOptions,\n canSendNow: isScheduled,\n canReschedule: isScheduled,\n canReply: !isPinned && !isScheduled && canReply,\n canPin: !isScheduled && canPin,\n canUnpin: !isScheduled && canUnpin,\n canDelete,\n canReport,\n canEdit: !isPinned && canEdit,\n canForward: !isProtected && !isScheduled && canForward,\n canFaveSticker: !isScheduled && canFaveSticker,\n canUnfaveSticker: !isScheduled && canUnfaveSticker,\n canCopy: !isProtected && canCopy,\n canCopyLink: !isProtected && !isScheduled && canCopyLink,\n canSelect,\n canDownload: !isProtected && canDownload,\n canSaveGif: !isProtected && canSaveGif,\n activeDownloads,\n canShowSeenBy,\n enabledReactions: chat?.fullInfo?.enabledReactions,\n isPrivate,\n hasFullInfo: Boolean(chat?.fullInfo),\n canShowReactionsCount,\n canShowReactionList: !isLocal && !isAction && !isScheduled && chat?.id !== SERVICE_NOTIFICATIONS_USER_ID,\n canRemoveReaction,\n };\n },\n)(ContextMenuContainer));\n","import React, {\n FC, memo, useCallback, useEffect, useRef,\n} from '../../lib/teact/teact';\nimport { getActions, withGlobal } from '../../global';\n\nimport { ApiSticker, ApiStickerSet } from '../../api/types';\n\nimport { STICKER_SIZE_MODAL } from '../../config';\nimport {\n selectCanScheduleUntilOnline,\n selectChat,\n selectCurrentMessageList,\n selectIsChatWithSelf,\n selectShouldSchedule,\n selectStickerSet,\n selectStickerSetByShortName,\n} from '../../global/selectors';\nimport { useIntersectionObserver } from '../../hooks/useIntersectionObserver';\nimport useLang from '../../hooks/useLang';\nimport renderText from './helpers/renderText';\nimport { getAllowedAttachmentOptions, getCanPostInChat } from '../../global/helpers';\nimport useSchedule from '../../hooks/useSchedule';\n\nimport Modal from '../ui/Modal';\nimport Button from '../ui/Button';\nimport Loading from '../ui/Loading';\nimport StickerButton from './StickerButton';\n\nimport './StickerSetModal.scss';\n\nexport type OwnProps = {\n isOpen: boolean;\n fromSticker?: ApiSticker;\n stickerSetShortName?: string;\n onClose: () => void;\n};\n\ntype StateProps = {\n canSendStickers?: boolean;\n stickerSet?: ApiStickerSet;\n canScheduleUntilOnline?: boolean;\n shouldSchedule?: boolean;\n isSavedMessages?: boolean;\n};\n\nconst INTERSECTION_THROTTLE = 200;\n\nconst StickerSetModal: FC = ({\n isOpen,\n fromSticker,\n stickerSetShortName,\n stickerSet,\n canSendStickers,\n canScheduleUntilOnline,\n shouldSchedule,\n isSavedMessages,\n onClose,\n}) => {\n const {\n loadStickers,\n toggleStickerSet,\n sendMessage,\n } = getActions();\n\n // eslint-disable-next-line no-null/no-null\n const containerRef = useRef(null);\n const lang = useLang();\n\n const [requestCalendar, calendar] = useSchedule(canScheduleUntilOnline);\n\n const {\n observe: observeIntersection,\n } = useIntersectionObserver({ rootRef: containerRef, throttleMs: INTERSECTION_THROTTLE, isDisabled: !isOpen });\n\n useEffect(() => {\n if (isOpen) {\n if (fromSticker) {\n const { stickerSetId, stickerSetAccessHash } = fromSticker;\n loadStickers({\n stickerSetId,\n stickerSetAccessHash,\n });\n } else if (stickerSetShortName) {\n loadStickers({\n stickerSetShortName,\n });\n }\n }\n }, [isOpen, fromSticker, loadStickers, stickerSetShortName]);\n\n const handleSelect = useCallback((sticker: ApiSticker, isSilent?: boolean, isScheduleRequested?: boolean) => {\n sticker = {\n ...sticker,\n isPreloadedGlobally: true,\n };\n\n if (shouldSchedule || isScheduleRequested) {\n requestCalendar((scheduledAt) => {\n sendMessage({ sticker, isSilent, scheduledAt });\n onClose();\n });\n } else {\n sendMessage({ sticker, isSilent });\n onClose();\n }\n }, [onClose, requestCalendar, sendMessage, shouldSchedule]);\n\n const handleButtonClick = useCallback(() => {\n if (stickerSet) {\n toggleStickerSet({ stickerSetId: stickerSet.id });\n onClose();\n }\n }, [onClose, stickerSet, toggleStickerSet]);\n\n return (\n \n {stickerSet?.stickers ? (\n <>\n
\n {stickerSet.stickers.map((sticker) => (\n \n ))}\n
\n
\n \n {lang(\n stickerSet.installedDate ? 'StickerPack.RemoveStickerCount' : 'StickerPack.AddStickerCount',\n stickerSet.count,\n 'i',\n )}\n \n
\n \n ) : (\n \n )}\n {calendar}\n \n );\n};\n\nexport default memo(withGlobal(\n (global, { fromSticker, stickerSetShortName }): StateProps => {\n const currentMessageList = selectCurrentMessageList(global);\n const { chatId, threadId } = currentMessageList || {};\n const chat = chatId && selectChat(global, chatId);\n const sendOptions = chat ? getAllowedAttachmentOptions(chat) : undefined;\n const canSendStickers = Boolean(\n chat && threadId && getCanPostInChat(chat, threadId) && sendOptions?.canSendStickers,\n );\n const isSavedMessages = Boolean(chatId) && selectIsChatWithSelf(global, chatId);\n\n return {\n canScheduleUntilOnline: Boolean(chatId) && selectCanScheduleUntilOnline(global, chatId),\n canSendStickers,\n isSavedMessages,\n shouldSchedule: selectShouldSchedule(global),\n stickerSet: fromSticker\n ? selectStickerSet(global, fromSticker.stickerSetId)\n : stickerSetShortName\n ? selectStickerSetByShortName(global, stickerSetShortName)\n : undefined,\n };\n },\n)(StickerSetModal));\n","import React, {\n FC, memo, useCallback, useEffect, useState,\n} from '../../lib/teact/teact';\nimport { getActions, withGlobal } from '../../global';\n\nimport { ApiChat } from '../../api/types';\nimport { IAnchorPosition } from '../../types';\n\nimport { IS_SINGLE_COLUMN_LAYOUT } from '../../util/environment';\nimport { disableScrolling, enableScrolling } from '../../util/scrollLock';\nimport {\n selectChat, selectNotifySettings, selectNotifyExceptions, selectUser,\n} from '../../global/selectors';\nimport {\n isUserId, getCanDeleteChat, selectIsChatMuted, getCanAddContact,\n} from '../../global/helpers';\nimport useShowTransition from '../../hooks/useShowTransition';\nimport useLang from '../../hooks/useLang';\n\nimport Portal from '../ui/Portal';\nimport Menu from '../ui/Menu';\nimport MenuItem from '../ui/MenuItem';\nimport DeleteChatModal from '../common/DeleteChatModal';\n\nimport './HeaderMenuContainer.scss';\n\nexport type OwnProps = {\n chatId: string;\n threadId: number;\n isOpen: boolean;\n withExtraActions: boolean;\n anchor: IAnchorPosition;\n isChannel?: boolean;\n canStartBot?: boolean;\n canRestartBot?: boolean;\n canSubscribe?: boolean;\n canSearch?: boolean;\n canCall?: boolean;\n canMute?: boolean;\n canViewStatistics?: boolean;\n canLeave?: boolean;\n canEnterVoiceChat?: boolean;\n canCreateVoiceChat?: boolean;\n onSubscribeChannel: () => void;\n onSearchClick: () => void;\n onClose: () => void;\n onCloseAnimationEnd: () => void;\n};\n\ntype StateProps = {\n chat?: ApiChat;\n isPrivate?: boolean;\n isMuted?: boolean;\n canAddContact?: boolean;\n canDeleteChat?: boolean;\n hasLinkedChat?: boolean;\n};\n\nconst HeaderMenuContainer: FC = ({\n chatId,\n isOpen,\n withExtraActions,\n anchor,\n isChannel,\n canStartBot,\n canRestartBot,\n canSubscribe,\n canSearch,\n canCall,\n canMute,\n canViewStatistics,\n canLeave,\n canEnterVoiceChat,\n canCreateVoiceChat,\n chat,\n isPrivate,\n isMuted,\n canDeleteChat,\n hasLinkedChat,\n canAddContact,\n onSubscribeChannel,\n onSearchClick,\n onClose,\n onCloseAnimationEnd,\n}) => {\n const {\n updateChatMutedState,\n enterMessageSelectMode,\n sendBotCommand,\n restartBot,\n joinGroupCall,\n createGroupCall,\n openLinkedChat,\n openAddContactDialog,\n openCallFallbackConfirm,\n toggleStatistics,\n } = getActions();\n\n const [isMenuOpen, setIsMenuOpen] = useState(true);\n const [isDeleteModalOpen, setIsDeleteModalOpen] = useState(false);\n const { x, y } = anchor;\n\n useShowTransition(isOpen, onCloseAnimationEnd, undefined, false);\n\n const handleDelete = useCallback(() => {\n setIsMenuOpen(false);\n setIsDeleteModalOpen(true);\n }, []);\n\n const closeMenu = useCallback(() => {\n setIsMenuOpen(false);\n onClose();\n }, [onClose]);\n\n const closeDeleteModal = useCallback(() => {\n setIsDeleteModalOpen(false);\n onClose();\n }, [onClose]);\n\n const handleStartBot = useCallback(() => {\n sendBotCommand({ command: '/start' });\n }, [sendBotCommand]);\n\n const handleRestartBot = useCallback(() => {\n restartBot({ chatId });\n }, [chatId, restartBot]);\n\n const handleToggleMuteClick = useCallback(() => {\n updateChatMutedState({ chatId, isMuted: !isMuted });\n closeMenu();\n }, [chatId, closeMenu, isMuted, updateChatMutedState]);\n\n const handleEnterVoiceChatClick = useCallback(() => {\n if (canCreateVoiceChat) {\n // TODO show popup to schedule\n createGroupCall({\n chatId,\n });\n } else {\n joinGroupCall({\n chatId,\n });\n }\n closeMenu();\n }, [closeMenu, canCreateVoiceChat, chatId, joinGroupCall, createGroupCall]);\n\n const handleLinkedChatClick = useCallback(() => {\n openLinkedChat({ id: chatId });\n closeMenu();\n }, [chatId, closeMenu, openLinkedChat]);\n\n const handleAddContactClick = useCallback(() => {\n openAddContactDialog({ userId: chatId });\n closeMenu();\n }, [openAddContactDialog, chatId, closeMenu]);\n\n const handleSubscribe = useCallback(() => {\n onSubscribeChannel();\n closeMenu();\n }, [closeMenu, onSubscribeChannel]);\n\n const handleCall = useCallback(() => {\n openCallFallbackConfirm();\n closeMenu();\n }, [closeMenu, openCallFallbackConfirm]);\n\n const handleSearch = useCallback(() => {\n onSearchClick();\n closeMenu();\n }, [closeMenu, onSearchClick]);\n\n const handleStatisticsClick = useCallback(() => {\n toggleStatistics();\n closeMenu();\n }, [closeMenu, toggleStatistics]);\n\n const handleSelectMessages = useCallback(() => {\n enterMessageSelectMode();\n closeMenu();\n }, [closeMenu, enterMessageSelectMode]);\n\n useEffect(() => {\n disableScrolling();\n\n return enableScrolling;\n }, []);\n\n const lang = useLang();\n\n return (\n \n
\n \n {withExtraActions && canStartBot && (\n \n {lang('BotStart')}\n \n )}\n {withExtraActions && canRestartBot && (\n \n {lang('BotRestart')}\n \n )}\n {withExtraActions && canSubscribe && (\n \n {lang(isChannel ? 'ProfileJoinChannel' : 'ProfileJoinGroup')}\n \n )}\n {canAddContact && (\n \n {lang('AddContact')}\n \n )}\n {IS_SINGLE_COLUMN_LAYOUT && canCall && (\n \n {lang('Call')}\n \n )}\n {IS_SINGLE_COLUMN_LAYOUT && canSearch && (\n \n {lang('Search')}\n \n )}\n {canMute && (\n \n {lang(isMuted ? 'ChatsUnmute' : 'ChatsMute')}\n \n )}\n {(canEnterVoiceChat || canCreateVoiceChat) && (\n \n {lang(canCreateVoiceChat ? 'StartVoipChat' : 'VoipGroupJoinCall')}\n \n )}\n {hasLinkedChat && (\n \n {lang(isChannel ? 'ViewDiscussion' : 'lng_profile_view_channel')}\n \n )}\n \n {lang('ReportSelectMessages')}\n \n {canViewStatistics && (\n \n {lang('Statistics')}\n \n )}\n {canLeave && (\n \n {lang(isPrivate\n ? 'DeleteChatUser'\n : (canDeleteChat ? 'GroupInfo.DeleteAndExit' : (isChannel ? 'LeaveChannel' : 'Group.LeaveGroup')))}\n \n )}\n \n {chat && (\n \n )}\n
\n
\n );\n};\n\nexport default memo(withGlobal(\n (global, { chatId }): StateProps => {\n const chat = selectChat(global, chatId);\n if (!chat || chat.isRestricted) {\n return {};\n }\n const isPrivate = isUserId(chat.id);\n const user = isPrivate ? selectUser(global, chatId) : undefined;\n const canAddContact = user && getCanAddContact(user);\n\n return {\n chat,\n isMuted: selectIsChatMuted(chat, selectNotifySettings(global), selectNotifyExceptions(global)),\n isPrivate,\n canAddContact,\n canDeleteChat: getCanDeleteChat(chat),\n hasLinkedChat: Boolean(chat?.fullInfo?.linkedChatId),\n };\n },\n)(HeaderMenuContainer));\n","import React, {\n FC, memo, useCallback, useEffect, useRef, useState, useLayoutEffect,\n} from '../../lib/teact/teact';\nimport { getActions, withGlobal } from '../../global';\n\nimport { ApiChat } from '../../api/types';\n\nimport { debounce } from '../../util/schedulers';\nimport { selectCurrentTextSearch, selectCurrentChat } from '../../global/selectors';\nimport { getDayStartAt } from '../../util/dateFormat';\n\nimport Button from '../ui/Button';\nimport SearchInput from '../ui/SearchInput';\n\nimport './MobileSearch.scss';\n\nexport type OwnProps = {\n isActive: boolean;\n};\n\ntype StateProps = {\n isActive?: boolean;\n chat?: ApiChat;\n query?: string;\n totalCount?: number;\n foundIds?: number[];\n isHistoryCalendarOpen?: boolean;\n};\n\nconst runDebouncedForSearch = debounce((cb) => cb(), 200, false);\n\nconst MobileSearchFooter: FC = ({\n isActive,\n chat,\n query,\n totalCount,\n foundIds,\n isHistoryCalendarOpen,\n}) => {\n const {\n setLocalTextSearchQuery,\n searchTextMessagesLocal,\n focusMessage,\n closeLocalTextSearch,\n openHistoryCalendar,\n } = getActions();\n\n // eslint-disable-next-line no-null/no-null\n const inputRef = useRef(null);\n const [focusedIndex, setFocusedIndex] = useState(0);\n\n // Fix for iOS keyboard\n useEffect(() => {\n const { visualViewport } = window as any;\n if (!visualViewport) {\n return undefined;\n }\n\n const mainEl = document.getElementById('Main') as HTMLDivElement;\n const handleResize = () => {\n const { activeElement } = document;\n if (activeElement && (activeElement === inputRef.current)) {\n const { pageTop, height } = visualViewport;\n mainEl.style.transform = `translateY(${pageTop}px)`;\n mainEl.style.height = `${height}px`;\n document.documentElement.scrollTop = pageTop;\n } else {\n mainEl.style.transform = '';\n mainEl.style.height = '';\n }\n };\n\n visualViewport.addEventListener('resize', handleResize);\n\n return () => {\n visualViewport.removeEventListener('resize', handleResize);\n };\n }, []);\n\n // Focus message\n useEffect(() => {\n if (chat?.id && foundIds?.length) {\n focusMessage({ chatId: chat.id, messageId: foundIds[0] });\n setFocusedIndex(0);\n } else {\n setFocusedIndex(-1);\n }\n }, [chat?.id, focusMessage, foundIds]);\n\n // Disable native up/down buttons on iOS\n useEffect(() => {\n Array.from(document.querySelectorAll('input')).forEach((input) => {\n input.disabled = Boolean(isActive && input !== inputRef.current);\n });\n\n Array.from(document.querySelectorAll('div[contenteditable]')).forEach((div) => {\n div.contentEditable = isActive ? 'false' : 'true';\n });\n }, [isActive]);\n\n // Blur on exit\n useEffect(() => {\n if (!isActive) {\n inputRef.current!.blur();\n }\n }, [isActive]);\n\n useLayoutEffect(() => {\n const searchInput = document.querySelector('#MobileSearch input')!;\n searchInput.blur();\n }, [isHistoryCalendarOpen]);\n\n const handleMessageSearchQueryChange = useCallback((newQuery: string) => {\n setLocalTextSearchQuery({ query: newQuery });\n\n if (newQuery.length) {\n runDebouncedForSearch(searchTextMessagesLocal);\n }\n }, [searchTextMessagesLocal, setLocalTextSearchQuery]);\n\n const handleUp = useCallback(() => {\n if (chat && foundIds) {\n const newFocusIndex = focusedIndex + 1;\n focusMessage({ chatId: chat.id, messageId: foundIds[newFocusIndex] });\n setFocusedIndex(newFocusIndex);\n }\n }, [chat, focusedIndex, focusMessage, foundIds]);\n\n const handleDown = useCallback(() => {\n if (chat && foundIds) {\n const newFocusIndex = focusedIndex - 1;\n focusMessage({ chatId: chat.id, messageId: foundIds[newFocusIndex] });\n setFocusedIndex(newFocusIndex);\n }\n }, [chat, focusedIndex, focusMessage, foundIds]);\n\n return (\n
\n
\n \n \n \n \n
\n
\n
\n {query ? (\n foundIds?.length ? (\n `${focusedIndex + 1} of ${totalCount}`\n ) : foundIds && !foundIds.length ? (\n 'No results'\n ) : (\n ''\n )\n ) : (\n openHistoryCalendar({ selectedAt: getDayStartAt(Date.now()) })}\n ariaLabel=\"Search messages by date\"\n >\n \n \n )}\n
\n \n \n \n \n \n \n
\n
\n );\n};\n\nexport default memo(withGlobal(\n (global): StateProps => {\n const chat = selectCurrentChat(global);\n if (!chat) {\n return {};\n }\n\n const { query, results } = selectCurrentTextSearch(global) || {};\n const { totalCount, foundIds } = results || {};\n\n return {\n chat,\n query,\n totalCount,\n foundIds,\n isHistoryCalendarOpen: Boolean(global.historyCalendarSelectedAt),\n };\n },\n)(MobileSearchFooter));\n","export default function findInViewport(\n container: HTMLElement,\n selectorOrElements: string | NodeListOf,\n margin = 0,\n isDense = false,\n shouldContainBottom = false,\n isHorizontal = false,\n) {\n const viewportY1 = container[isHorizontal ? 'scrollLeft' : 'scrollTop'];\n const viewportY2 = viewportY1 + container[isHorizontal ? 'offsetWidth' : 'offsetHeight'];\n const allElements = typeof selectorOrElements === 'string'\n ? container.querySelectorAll(selectorOrElements)\n : selectorOrElements;\n const { length } = allElements;\n const visibleIndexes: number[] = [];\n let isFound = false;\n\n for (let i = 0; i < length; i++) {\n const element = allElements[i];\n const y1 = element[isHorizontal ? 'offsetLeft' : 'offsetTop'];\n const y2 = y1 + element[isHorizontal ? 'offsetWidth' : 'offsetHeight'];\n const isVisible = shouldContainBottom\n ? y2 >= viewportY1 - margin && y2 <= viewportY2 + margin\n : y1 <= viewportY2 + margin && y2 >= viewportY1 - margin;\n\n if (isVisible) {\n visibleIndexes.push(i);\n isFound = true;\n } else if (isFound && !isDense) {\n break;\n }\n }\n\n return { allElements, visibleIndexes };\n}\n","function isFullyVisible(container: HTMLElement, element: HTMLElement, isHorizontal = false) {\n const viewportY1 = container[isHorizontal ? 'scrollLeft' : 'scrollTop'];\n const viewportY2 = viewportY1 + container[isHorizontal ? 'offsetWidth' : 'offsetHeight'];\n const y1 = element[isHorizontal ? 'offsetLeft' : 'offsetTop'];\n const y2 = y1 + element[isHorizontal ? 'offsetWidth' : 'offsetHeight'];\n return y1 > viewportY1 && y2 < viewportY2;\n}\n\nexport default isFullyVisible;\n","import findInViewport from './findInViewport';\nimport isFullyVisible from './isFullyVisible';\nimport fastSmoothScroll from './fastSmoothScroll';\n\nconst VIEWPORT_MARGIN = 8;\nconst SCROLL_MARGIN = 10;\n\nexport default function setTooltipItemVisible(selector: string, index: number, containerRef: Record) {\n const container = containerRef.current!;\n if (!container || index < 0) {\n return;\n }\n const { visibleIndexes, allElements } = findInViewport(\n container,\n selector,\n VIEWPORT_MARGIN,\n true,\n true,\n );\n\n if (!allElements.length || !allElements[index]) {\n return;\n }\n const first = visibleIndexes[0];\n if (!visibleIndexes.includes(index)\n || (index === first && !isFullyVisible(container, allElements[first]))) {\n const position = index > visibleIndexes[visibleIndexes.length - 1] ? 'start' : 'end';\n fastSmoothScroll(container, allElements[index], position, SCROLL_MARGIN);\n }\n}\n","import { useCallback, useEffect, useState } from '../../../../lib/teact/teact';\nimport captureKeyboardListeners from '../../../../util/captureKeyboardListeners';\nimport cycleRestrict from '../../../../util/cycleRestrict';\n\nexport function useKeyboardNavigation({\n isActive,\n isHorizontal,\n shouldSaveSelectionOnUpdateItems,\n shouldRemoveSelectionOnReset,\n noArrowNavigation,\n items,\n shouldSelectOnTab,\n onSelect,\n onClose,\n}: {\n isActive: boolean;\n isHorizontal?: boolean;\n shouldSaveSelectionOnUpdateItems?: boolean;\n shouldRemoveSelectionOnReset?: boolean;\n noArrowNavigation?: boolean;\n items?: any[];\n shouldSelectOnTab?: boolean;\n onSelect: AnyToVoidFunction;\n onClose: NoneToVoidFunction;\n}) {\n const [selectedItemIndex, setSelectedItemIndex] = useState(-1);\n\n const getSelectedIndex = useCallback((newIndex: number) => {\n if (!items) {\n return -1;\n }\n\n return cycleRestrict(items.length, newIndex);\n }, [items]);\n\n const handleArrowKey = useCallback((value: number, e: KeyboardEvent) => {\n e.preventDefault();\n setSelectedItemIndex((index) => (getSelectedIndex(index + value)));\n }, [setSelectedItemIndex, getSelectedIndex]);\n\n const handleItemSelect = useCallback((e: KeyboardEvent) => {\n if (items && items.length && selectedItemIndex > -1) {\n const item = items[selectedItemIndex];\n if (item) {\n e.preventDefault();\n onSelect(item);\n }\n }\n }, [items, onSelect, selectedItemIndex]);\n\n const isSelectionOutOfRange = !items || selectedItemIndex > items.length - 1;\n useEffect(() => {\n if (!shouldSaveSelectionOnUpdateItems || isSelectionOutOfRange) {\n setSelectedItemIndex(shouldRemoveSelectionOnReset ? -1 : 0);\n }\n }, [isSelectionOutOfRange, shouldRemoveSelectionOnReset, shouldSaveSelectionOnUpdateItems]);\n\n useEffect(() => (isActive ? captureKeyboardListeners({\n onEsc: onClose,\n onUp: noArrowNavigation || isHorizontal ? undefined : (e: KeyboardEvent) => handleArrowKey(-1, e),\n onDown: noArrowNavigation || isHorizontal ? undefined : (e: KeyboardEvent) => handleArrowKey(1, e),\n onLeft: noArrowNavigation || !isHorizontal ? undefined : (e: KeyboardEvent) => handleArrowKey(-1, e),\n onRight: noArrowNavigation || !isHorizontal ? undefined : (e: KeyboardEvent) => handleArrowKey(1, e),\n onTab: shouldSelectOnTab ? handleItemSelect : undefined,\n onEnter: handleItemSelect,\n }) : undefined), [\n noArrowNavigation, handleArrowKey, handleItemSelect, isActive, isHorizontal, onClose, shouldSelectOnTab,\n ]);\n\n return selectedItemIndex;\n}\n","import React, {\n FC, useCallback, useEffect, useRef, memo,\n} from '../../../lib/teact/teact';\nimport { getGlobal } from '../../../global';\n\nimport { ApiUser } from '../../../api/types';\n\nimport buildClassName from '../../../util/buildClassName';\nimport setTooltipItemVisible from '../../../util/setTooltipItemVisible';\nimport usePrevious from '../../../hooks/usePrevious';\nimport useShowTransition from '../../../hooks/useShowTransition';\nimport { useKeyboardNavigation } from './hooks/useKeyboardNavigation';\n\nimport ListItem from '../../ui/ListItem';\nimport PrivateChatInfo from '../../common/PrivateChatInfo';\n\nimport './MentionTooltip.scss';\n\nexport type OwnProps = {\n isOpen: boolean;\n onClose: () => void;\n onInsertUserName: (user: ApiUser, forceFocus?: boolean) => void;\n filteredUsers?: ApiUser[];\n};\n\nconst MentionTooltip: FC = ({\n isOpen,\n onClose,\n onInsertUserName,\n filteredUsers,\n}) => {\n // eslint-disable-next-line no-null/no-null\n const containerRef = useRef(null);\n const { shouldRender, transitionClassNames } = useShowTransition(isOpen, undefined, undefined, false);\n\n const handleUserSelect = useCallback((userId: string, forceFocus = false) => {\n // No need for expensive global updates on users, so we avoid them\n const usersById = getGlobal().users.byId;\n const user = usersById[userId];\n if (!user) {\n return;\n }\n\n onInsertUserName(user, forceFocus);\n }, [onInsertUserName]);\n\n const handleSelectMention = useCallback((member: ApiUser) => {\n handleUserSelect(member.id, true);\n }, [handleUserSelect]);\n\n const selectedMentionIndex = useKeyboardNavigation({\n isActive: isOpen,\n items: filteredUsers,\n onSelect: handleSelectMention,\n shouldSelectOnTab: true,\n shouldSaveSelectionOnUpdateItems: true,\n onClose,\n });\n\n useEffect(() => {\n setTooltipItemVisible('.chat-item-clickable', selectedMentionIndex, containerRef);\n }, [selectedMentionIndex]);\n\n useEffect(() => {\n if (filteredUsers && !filteredUsers.length) {\n onClose();\n }\n }, [filteredUsers, onClose]);\n\n const prevChatMembers = usePrevious(\n filteredUsers?.length\n ? filteredUsers\n : undefined,\n shouldRender,\n );\n const renderedChatMembers = filteredUsers && !filteredUsers.length\n ? prevChatMembers\n : filteredUsers;\n\n if (!shouldRender || (renderedChatMembers && !renderedChatMembers.length)) {\n return undefined;\n }\n\n const className = buildClassName(\n 'MentionTooltip composer-tooltip custom-scroll',\n transitionClassNames,\n );\n\n return (\n
\n {renderedChatMembers?.map(({ id }, index) => (\n handleUserSelect(id)}\n focus={selectedMentionIndex === index}\n >\n \n \n ))}\n
\n );\n};\n\nexport default memo(MentionTooltip);\n","import React, {\n FC, memo, useCallback, useEffect, useRef,\n} from '../../../lib/teact/teact';\n\nimport { ApiAttachment, ApiChatMember } from '../../../api/types';\n\nimport {\n CONTENT_TYPES_WITH_PREVIEW,\n EDITABLE_INPUT_MODAL_ID,\n SUPPORTED_IMAGE_CONTENT_TYPES,\n SUPPORTED_VIDEO_CONTENT_TYPES,\n} from '../../../config';\nimport { getFileExtension } from '../../common/helpers/documentInfo';\nimport captureEscKeyListener from '../../../util/captureEscKeyListener';\n\nimport usePrevious from '../../../hooks/usePrevious';\nimport useMentionTooltip from './hooks/useMentionTooltip';\nimport useEmojiTooltip from './hooks/useEmojiTooltip';\nimport useLang from '../../../hooks/useLang';\nimport useFlag from '../../../hooks/useFlag';\nimport useContextMenuHandlers from '../../../hooks/useContextMenuHandlers';\nimport { useStateRef } from '../../../hooks/useStateRef';\n\nimport Button from '../../ui/Button';\nimport Modal from '../../ui/Modal';\nimport File from '../../common/File';\nimport MessageInput from './MessageInput';\nimport MentionTooltip from './MentionTooltip';\nimport EmojiTooltip from './EmojiTooltip.async';\nimport CustomSendMenu from './CustomSendMenu.async';\n\nimport './AttachmentModal.scss';\n\nexport type OwnProps = {\n chatId: string;\n threadId: number;\n attachments: ApiAttachment[];\n caption: string;\n canShowCustomSendMenu?: boolean;\n isReady?: boolean;\n isChatWithSelf?: boolean;\n currentUserId?: string;\n groupChatMembers?: ApiChatMember[];\n recentEmojis: string[];\n baseEmojiKeywords?: Record;\n emojiKeywords?: Record;\n shouldSchedule?: boolean;\n addRecentEmoji: AnyToVoidFunction;\n onCaptionUpdate: (html: string) => void;\n onSend: () => void;\n onFileAppend: (files: File[], isQuick: boolean) => void;\n onClear: () => void;\n onSendSilent: () => void;\n onSendScheduled: () => void;\n};\n\nconst DROP_LEAVE_TIMEOUT_MS = 150;\n\nconst AttachmentModal: FC = ({\n chatId,\n threadId,\n attachments,\n caption,\n canShowCustomSendMenu,\n isReady,\n isChatWithSelf,\n currentUserId,\n groupChatMembers,\n recentEmojis,\n baseEmojiKeywords,\n emojiKeywords,\n shouldSchedule,\n addRecentEmoji,\n onCaptionUpdate,\n onSend,\n onFileAppend,\n onClear,\n onSendSilent,\n onSendScheduled,\n}) => {\n const captionRef = useStateRef(caption);\n // eslint-disable-next-line no-null/no-null\n const mainButtonRef = useStateRef(null);\n const hideTimeoutRef = useRef();\n const prevAttachments = usePrevious(attachments);\n const renderingAttachments = attachments.length ? attachments : prevAttachments;\n const isOpen = Boolean(attachments.length);\n const [isHovered, markHovered, unmarkHovered] = useFlag();\n const isQuick = Boolean(renderingAttachments && renderingAttachments.every((a) => a.quick));\n const lang = useLang();\n\n const {\n isMentionTooltipOpen, closeMentionTooltip, insertMention, mentionFilteredUsers,\n } = useMentionTooltip(\n isOpen,\n captionRef,\n onCaptionUpdate,\n EDITABLE_INPUT_MODAL_ID,\n groupChatMembers,\n undefined,\n currentUserId,\n );\n const {\n isEmojiTooltipOpen, closeEmojiTooltip, filteredEmojis, insertEmoji,\n } = useEmojiTooltip(\n isOpen,\n captionRef,\n recentEmojis,\n EDITABLE_INPUT_MODAL_ID,\n onCaptionUpdate,\n baseEmojiKeywords,\n emojiKeywords,\n !isReady,\n );\n\n useEffect(() => (isOpen ? captureEscKeyListener(onClear) : undefined), [isOpen, onClear]);\n\n const {\n isContextMenuOpen: isCustomSendMenuOpen,\n handleContextMenu,\n handleContextMenuClose,\n handleContextMenuHide,\n } = useContextMenuHandlers(mainButtonRef, !canShowCustomSendMenu || !isOpen);\n\n const sendAttachments = useCallback(() => {\n if (isOpen) {\n if (shouldSchedule) {\n onSendScheduled();\n } else {\n onSend();\n }\n }\n }, [isOpen, onSendScheduled, onSend, shouldSchedule]);\n\n const handleDragLeave = (e: React.DragEvent) => {\n const { relatedTarget: toTarget, target: fromTarget } = e;\n\n // Esc button pressed during drag event\n if ((fromTarget as HTMLDivElement).matches('.drop-target') && !toTarget) {\n hideTimeoutRef.current = window.setTimeout(unmarkHovered, DROP_LEAVE_TIMEOUT_MS);\n }\n\n // Prevent DragLeave event from firing when the pointer moves inside the AttachmentModal drop target\n if (fromTarget && (fromTarget as HTMLElement).closest('.AttachmentModal.hovered')) {\n return;\n }\n\n if (toTarget) {\n e.stopPropagation();\n }\n\n unmarkHovered();\n };\n\n const handleFilesDrop = useCallback((e: React.DragEvent) => {\n e.preventDefault();\n unmarkHovered();\n\n const { dataTransfer: { files } } = e;\n\n if (files?.length) {\n const newFiles = isQuick\n ? Array.from(files).filter((file) => {\n return file.type && CONTENT_TYPES_WITH_PREVIEW.has(file.type);\n })\n : Array.from(files);\n\n onFileAppend(newFiles, isQuick);\n }\n }, [isQuick, onFileAppend, unmarkHovered]);\n\n function handleDragOver(e: React.MouseEvent) {\n e.preventDefault();\n e.stopPropagation();\n\n if (hideTimeoutRef.current) {\n window.clearTimeout(hideTimeoutRef.current);\n hideTimeoutRef.current = undefined;\n }\n }\n\n if (!renderingAttachments) {\n return undefined;\n }\n\n const areAllPhotos = renderingAttachments.every((a) => SUPPORTED_IMAGE_CONTENT_TYPES.has(a.mimeType));\n const areAllVideos = renderingAttachments.every((a) => SUPPORTED_VIDEO_CONTENT_TYPES.has(a.mimeType));\n const areAllAudios = renderingAttachments.every((a) => a.mimeType.startsWith('audio/'));\n\n let title = '';\n if (areAllPhotos) {\n title = lang('PreviewSender.SendPhoto', renderingAttachments.length, 'i');\n } else if (areAllVideos) {\n title = lang('PreviewSender.SendVideo', renderingAttachments.length, 'i');\n } else if (areAllAudios) {\n title = lang('PreviewSender.SendAudio', renderingAttachments.length, 'i');\n } else {\n title = lang('PreviewSender.SendFile', renderingAttachments.length, 'i');\n }\n\n function renderHeader() {\n if (!renderingAttachments) {\n return undefined;\n }\n\n return (\n
\n \n
{title}
\n
\n \n {lang('Send')}\n \n {canShowCustomSendMenu && (\n \n )}\n
\n
\n );\n }\n\n return (\n \n \n {isQuick ? (\n
\n {renderingAttachments.map((attachment) => (\n attachment.mimeType.startsWith('image/')\n ? \"\"\n :
\n ) : (\n
\n {renderingAttachments.map((attachment) => (\n \n ))}\n
\n )}\n\n
\n \n \n \n
\n
\n \n );\n};\n\nexport default memo(AttachmentModal);\n","import { ChangeEvent, RefObject } from 'react';\nimport React, {\n FC, memo, useCallback, useEffect, useLayoutEffect, useRef, useState,\n} from '../../../lib/teact/teact';\n\nimport { ApiNewPoll } from '../../../api/types';\n\nimport captureEscKeyListener from '../../../util/captureEscKeyListener';\nimport parseMessageInput from '../../../util/parseMessageInput';\nimport useLang from '../../../hooks/useLang';\n\nimport Button from '../../ui/Button';\nimport Modal from '../../ui/Modal';\nimport InputText from '../../ui/InputText';\nimport Checkbox from '../../ui/Checkbox';\nimport RadioGroup from '../../ui/RadioGroup';\n\nimport './PollModal.scss';\n\nexport type OwnProps = {\n isOpen: boolean;\n shouldBeAnonimous?: boolean;\n onSend: (pollSummary: ApiNewPoll) => void;\n onClear: () => void;\n};\n\nconst MAX_LIST_HEIGHT = 320;\nconst MAX_OPTIONS_COUNT = 10;\nconst MAX_OPTION_LENGTH = 100;\nconst MAX_QUESTION_LENGTH = 255;\nconst MAX_SOLUTION_LENGTH = 200;\n\nconst PollModal: FC = ({\n isOpen, shouldBeAnonimous, onSend, onClear,\n}) => {\n // eslint-disable-next-line no-null/no-null\n const questionInputRef = useRef(null);\n // eslint-disable-next-line no-null/no-null\n const optionsListRef = useRef(null);\n // eslint-disable-next-line no-null/no-null\n const solutionRef = useRef(null);\n\n const [question, setQuestion] = useState('');\n const [options, setOptions] = useState(['']);\n const [isAnonymous, setIsAnonymous] = useState(true);\n const [isMultipleAnswers, setIsMultipleAnswers] = useState(false);\n const [isQuizMode, setIsQuizMode] = useState(false);\n const [solution, setSolution] = useState();\n const [correctOption, setCorrectOption] = useState();\n const [hasErrors, setHasErrors] = useState(false);\n\n const lang = useLang();\n\n const focusInput = useCallback((ref: RefObject) => {\n if (isOpen && ref.current) {\n ref.current.focus();\n }\n }, [isOpen]);\n\n useEffect(() => (isOpen ? captureEscKeyListener(onClear) : undefined), [isOpen, onClear]);\n useEffect(() => {\n if (!isOpen) {\n setQuestion('');\n setOptions(['']);\n setIsAnonymous(true);\n setIsMultipleAnswers(false);\n setIsQuizMode(false);\n setSolution('');\n setCorrectOption('');\n setHasErrors(false);\n }\n }, [isOpen]);\n\n useEffect(() => focusInput(questionInputRef), [focusInput, isOpen]);\n\n useLayoutEffect(() => {\n const solutionEl = solutionRef.current;\n\n if (solutionEl && solution !== solutionEl.innerHTML) {\n solutionEl.innerHTML = solution;\n }\n }, [solution]);\n\n const addNewOption = useCallback((newOptions: string[] = []) => {\n setOptions([...newOptions, '']);\n requestAnimationFrame(() => {\n const list = optionsListRef.current;\n if (!list) {\n return;\n }\n\n list.classList.toggle('overflown', list.scrollHeight > MAX_LIST_HEIGHT);\n list.scrollTo({ top: list.scrollHeight, behavior: 'smooth' });\n });\n }, []);\n\n const handleCreate = useCallback(() => {\n setHasErrors(false);\n if (!isOpen) {\n return;\n }\n\n const questionTrimmed = question.trim().substring(0, MAX_QUESTION_LENGTH);\n const optionsTrimmed = options.map((o) => o.trim().substring(0, MAX_OPTION_LENGTH)).filter((o) => o.length);\n\n if (!questionTrimmed || optionsTrimmed.length < 2) {\n setQuestion(questionTrimmed);\n if (optionsTrimmed.length) {\n if (optionsTrimmed.length < 2) {\n addNewOption(optionsTrimmed);\n } else {\n setOptions(optionsTrimmed);\n }\n } else {\n addNewOption();\n }\n setHasErrors(true);\n return;\n }\n\n if (isQuizMode && (!correctOption || !optionsTrimmed[Number(correctOption)])) {\n setHasErrors(true);\n return;\n }\n\n const answers = optionsTrimmed\n .map((text, index) => ({\n text: text.trim(),\n option: String(index),\n ...(String(index) === correctOption && { correct: true }),\n }));\n\n const payload: ApiNewPoll = {\n summary: {\n question: questionTrimmed,\n answers,\n ...(!isAnonymous && { isPublic: true }),\n ...(isMultipleAnswers && { multipleChoice: true }),\n ...(isQuizMode && { quiz: true }),\n },\n };\n\n if (isQuizMode) {\n const { text, entities } = (solution && parseMessageInput(solution.substring(0, MAX_SOLUTION_LENGTH))) || {};\n\n payload.quiz = {\n correctAnswers: [correctOption],\n ...(text && { solution: text }),\n ...(entities && { solutionEntities: entities }),\n };\n }\n\n onSend(payload);\n }, [\n isOpen,\n question,\n options,\n isQuizMode,\n correctOption,\n isAnonymous,\n isMultipleAnswers,\n onSend,\n addNewOption,\n solution,\n ]);\n\n const updateOption = useCallback((index: number, text: string) => {\n const newOptions = [...options];\n newOptions[index] = text;\n if (newOptions[newOptions.length - 1].trim().length && newOptions.length < MAX_OPTIONS_COUNT) {\n addNewOption(newOptions);\n } else {\n setOptions(newOptions);\n }\n }, [options, addNewOption]);\n\n const removeOption = useCallback((index: number) => {\n const newOptions = [...options];\n newOptions.splice(index, 1);\n setOptions(newOptions);\n requestAnimationFrame(() => {\n if (!optionsListRef.current) {\n return;\n }\n\n optionsListRef.current.classList.toggle('overflown', optionsListRef.current.scrollHeight > MAX_LIST_HEIGHT);\n });\n }, [options]);\n\n const handleCorrectOptionChange = useCallback((newValue: string) => {\n setCorrectOption(newValue);\n }, [setCorrectOption]);\n\n const handleIsAnonymousChange = useCallback((e: ChangeEvent) => {\n setIsAnonymous(e.target.checked);\n }, []);\n\n const handleMultipleAnswersChange = useCallback((e: ChangeEvent) => {\n setIsMultipleAnswers(e.target.checked);\n }, []);\n\n const handleQuizModeChange = useCallback((e: ChangeEvent) => {\n setIsQuizMode(e.target.checked);\n }, []);\n\n const handleKeyPress = useCallback((e: React.KeyboardEvent) => {\n if (e.keyCode === 13) {\n handleCreate();\n }\n }, [handleCreate]);\n\n const handleQuestionChange = useCallback((e: ChangeEvent) => {\n setQuestion(e.target.value);\n }, []);\n\n const getQuestionError = useCallback(() => {\n if (hasErrors && !question.trim().length) {\n return lang('lng_polls_choose_question');\n }\n\n return undefined;\n }, [hasErrors, lang, question]);\n\n const getOptionsError = useCallback((index: number) => {\n const optionsTrimmed = options.map((o) => o.trim()).filter((o) => o.length);\n if (hasErrors && optionsTrimmed.length < 2 && !options[index].trim().length) {\n return lang('lng_polls_choose_answers');\n }\n return undefined;\n }, [hasErrors, lang, options]);\n\n function renderHeader() {\n return (\n
\n \n
{lang('NewPoll')}
\n \n {lang('Create')}\n \n
\n );\n }\n\n function renderOptions() {\n return options.map((option, index) => (\n
\n updateOption(index, e.currentTarget.value)}\n onKeyPress={handleKeyPress}\n />\n {index !== options.length - 1 && (\n removeOption(index)}\n >\n \n \n )}\n
\n ));\n }\n\n function renderRadioOptions() {\n return renderOptions()\n .map((label, index) => ({ value: String(index), label, hidden: index === options.length - 1 }));\n }\n\n function renderQuizNoOptionError() {\n const optionsTrimmed = options.map((o) => o.trim()).filter((o) => o.length);\n\n return isQuizMode && (!correctOption || !optionsTrimmed[Number(correctOption)]) && (\n

{lang('lng_polls_choose_correct')}

\n );\n }\n\n return (\n \n \n
\n\n
\n

{lang('PollOptions')}

\n\n {hasErrors && renderQuizNoOptionError()}\n {isQuizMode ? (\n \n ) : (\n renderOptions()\n )}\n\n
\n\n
\n\n
\n {!shouldBeAnonimous && (\n \n )}\n \n \n {isQuizMode && (\n <>\n

{lang('lng_polls_solution_title')}

\n setSolution(e.currentTarget.innerHTML)}\n />\n
{lang('CreatePoll.ExplanationInfo')}
\n \n )}\n
\n \n );\n};\n\nexport default memo(PollModal);\n","import React, { FC, memo, useCallback } from '../../../lib/teact/teact';\n\nimport { IS_EMOJI_SUPPORTED } from '../../../util/environment';\n\nimport './EmojiButton.scss';\n\ntype OwnProps = {\n emoji: Emoji;\n focus?: boolean;\n onClick: (emoji: string, name: string) => void;\n};\n\nconst EmojiButton: FC = ({ emoji, focus, onClick }) => {\n const handleClick = useCallback((e: React.MouseEvent) => {\n // Preventing safari from losing focus on Composer MessageInput\n e.preventDefault();\n\n onClick(emoji.native, emoji.id);\n }, [emoji, onClick]);\n\n return (\n \n {IS_EMOJI_SUPPORTED ? emoji.native : \"\"}\n
\n );\n};\n\nexport default memo(EmojiButton);\n","import React, { FC, memo, useRef } from '../../../lib/teact/teact';\n\nimport { IS_SINGLE_COLUMN_LAYOUT } from '../../../util/environment';\nimport buildClassName from '../../../util/buildClassName';\nimport windowSize from '../../../util/windowSize';\nimport { ObserveFn, useOnIntersect } from '../../../hooks/useIntersectionObserver';\nimport useMediaTransition from '../../../hooks/useMediaTransition';\nimport useLang from '../../../hooks/useLang';\n\nimport EmojiButton from './EmojiButton';\n\nconst EMOJIS_PER_ROW_ON_DESKTOP = 9;\nconst EMOJI_MARGIN = 4;\nconst MOBILE_CONTAINER_PADDING = 8;\nconst EMOJI_SIZE = 40;\n\ntype OwnProps = {\n category: EmojiCategory;\n index: number;\n allEmojis: AllEmojis;\n observeIntersection: ObserveFn;\n shouldRender: boolean;\n onEmojiSelect: (emoji: string, name: string) => void;\n};\n\nconst EmojiCategory: FC = ({\n category, index, allEmojis, observeIntersection, shouldRender, onEmojiSelect,\n}) => {\n // eslint-disable-next-line no-null/no-null\n const ref = useRef(null);\n\n useOnIntersect(ref, observeIntersection);\n\n const transitionClassNames = useMediaTransition(shouldRender);\n\n const lang = useLang();\n\n const emojisPerRow = IS_SINGLE_COLUMN_LAYOUT\n ? Math.floor((windowSize.get().width - MOBILE_CONTAINER_PADDING) / (EMOJI_SIZE + EMOJI_MARGIN))\n : EMOJIS_PER_ROW_ON_DESKTOP;\n const height = Math.ceil(category.emojis.length / emojisPerRow) * (EMOJI_SIZE + EMOJI_MARGIN);\n\n return (\n \n

\n {lang(category.id === 'recent' ? 'RecentStickers' : `Emoji${index}`)}\n

\n \n {shouldRender && category.emojis.map((name) => {\n const emoji = allEmojis[name];\n // Recent emojis may contain emoticons that are no longer in the list\n if (!emoji) {\n return undefined;\n }\n // Some emojis have multiple skins and are represented as an Object with emojis for all skins.\n // For now, we select only the first emoji with 'neutral' skin.\n const displayedEmoji = 'id' in emoji ? emoji : emoji[1];\n\n return (\n \n );\n })}\n
\n \n );\n};\n\nexport default memo(EmojiCategory);\n","import React, {\n FC, useState, useEffect, memo, useRef, useMemo, useCallback,\n} from '../../../lib/teact/teact';\nimport { withGlobal } from '../../../global';\n\nimport { GlobalState } from '../../../global/types';\n\nimport { MENU_TRANSITION_DURATION } from '../../../config';\nimport { IS_SINGLE_COLUMN_LAYOUT, IS_TOUCH_ENV } from '../../../util/environment';\nimport { MEMO_EMPTY_ARRAY } from '../../../util/memo';\nimport {\n EmojiModule,\n EmojiRawData,\n EmojiData,\n uncompressEmoji,\n} from '../../../util/emoji';\nimport fastSmoothScroll from '../../../util/fastSmoothScroll';\nimport buildClassName from '../../../util/buildClassName';\nimport { pick } from '../../../util/iteratees';\nimport fastSmoothScrollHorizontal from '../../../util/fastSmoothScrollHorizontal';\nimport useAsyncRendering from '../../right/hooks/useAsyncRendering';\nimport { useIntersectionObserver } from '../../../hooks/useIntersectionObserver';\nimport useHorizontalScroll from '../../../hooks/useHorizontalScroll';\nimport useLang from '../../../hooks/useLang';\n\nimport Button from '../../ui/Button';\nimport Loading from '../../ui/Loading';\nimport EmojiCategory from './EmojiCategory';\n\nimport './EmojiPicker.scss';\n\ntype OwnProps = {\n className?: string;\n onEmojiSelect: (emoji: string, name: string) => void;\n};\n\ntype StateProps = Pick;\ntype EmojiCategoryData = { id: string; name: string; emojis: string[] };\n\nconst ICONS_BY_CATEGORY: Record = {\n recent: 'icon-recent',\n people: 'icon-smile',\n nature: 'icon-animals',\n foods: 'icon-eats',\n activity: 'icon-sport',\n places: 'icon-car',\n objects: 'icon-lamp',\n symbols: 'icon-language',\n flags: 'icon-flag',\n};\n\nconst OPEN_ANIMATION_DELAY = 200;\n// Only a few categories are above this height.\nconst SMOOTH_SCROLL_DISTANCE = 800;\nconst FOCUS_MARGIN = 50;\nconst HEADER_BUTTON_WIDTH = 42; // px. Includes margins\nconst INTERSECTION_THROTTLE = 200;\n\nconst categoryIntersections: boolean[] = [];\n\nlet emojiDataPromise: Promise;\nlet emojiRawData: EmojiRawData;\nlet emojiData: EmojiData;\n\nconst EmojiPicker: FC = ({\n className, onEmojiSelect, recentEmojis,\n}) => {\n // eslint-disable-next-line no-null/no-null\n const containerRef = useRef(null);\n // eslint-disable-next-line no-null/no-null\n const headerRef = useRef(null);\n\n const [categories, setCategories] = useState();\n const [emojis, setEmojis] = useState();\n const [activeCategoryIndex, setActiveCategoryIndex] = useState(0);\n\n const { observe: observeIntersection } = useIntersectionObserver({\n rootRef: containerRef,\n throttleMs: INTERSECTION_THROTTLE,\n }, (entries) => {\n entries.forEach((entry) => {\n const { id } = entry.target as HTMLDivElement;\n if (!id || !id.startsWith('emoji-category-')) {\n return;\n }\n\n const index = Number(id.replace('emoji-category-', ''));\n categoryIntersections[index] = entry.isIntersecting;\n });\n\n const intersectingWithIndexes = categoryIntersections\n .map((isIntersecting, index) => ({ index, isIntersecting }))\n .filter(({ isIntersecting }) => isIntersecting);\n\n if (!intersectingWithIndexes.length) {\n return;\n }\n\n setActiveCategoryIndex(intersectingWithIndexes[Math.floor(intersectingWithIndexes.length / 2)].index);\n });\n\n useHorizontalScroll(headerRef.current, !IS_SINGLE_COLUMN_LAYOUT);\n\n // Scroll header when active set updates\n useEffect(() => {\n if (!categories) {\n return;\n }\n\n const header = headerRef.current;\n if (!header) {\n return;\n }\n\n const newLeft = activeCategoryIndex * HEADER_BUTTON_WIDTH - header.offsetWidth / 2 + HEADER_BUTTON_WIDTH / 2;\n\n fastSmoothScrollHorizontal(header, newLeft);\n }, [categories, activeCategoryIndex]);\n\n const lang = useLang();\n\n const allCategories = useMemo(() => {\n if (!categories) {\n return MEMO_EMPTY_ARRAY;\n }\n const themeCategories = [...categories];\n if (recentEmojis?.length) {\n themeCategories.unshift({\n id: 'recent',\n name: lang('RecentStickers'),\n emojis: recentEmojis,\n });\n }\n\n return themeCategories;\n }, [categories, lang, recentEmojis]);\n\n // Initialize data on first render.\n useEffect(() => {\n setTimeout(() => {\n const exec = () => {\n setCategories(emojiData.categories);\n\n setEmojis(emojiData.emojis as AllEmojis);\n };\n\n if (emojiData) {\n exec();\n } else {\n ensureEmojiData()\n .then(exec);\n }\n }, OPEN_ANIMATION_DELAY);\n }, []);\n\n const selectCategory = useCallback((index: number) => {\n setActiveCategoryIndex(index);\n const categoryEl = document.getElementById(`emoji-category-${index}`)!;\n fastSmoothScroll(containerRef.current!, categoryEl, 'start', FOCUS_MARGIN, SMOOTH_SCROLL_DISTANCE);\n }, []);\n\n const handleEmojiSelect = useCallback((emoji: string, name: string) => {\n onEmojiSelect(emoji, name);\n }, [onEmojiSelect]);\n\n const canRenderContents = useAsyncRendering([], MENU_TRANSITION_DURATION);\n\n function renderCategoryButton(category: EmojiCategoryData, index: number) {\n const icon = ICONS_BY_CATEGORY[category.id];\n\n return icon && (\n selectCategory(index)}\n ariaLabel={category.name}\n >\n \n \n );\n }\n\n const containerClassName = buildClassName('EmojiPicker', className);\n\n if (!emojis || !canRenderContents) {\n return (\n
\n \n
\n );\n }\n\n return (\n
\n
\n {allCategories.map(renderCategoryButton)}\n
\n \n {allCategories.map((category, i) => (\n = i - 1 && activeCategoryIndex <= i + 1}\n onEmojiSelect={handleEmojiSelect}\n />\n ))}\n
\n \n );\n};\n\nasync function ensureEmojiData() {\n if (!emojiDataPromise) {\n emojiDataPromise = import('emoji-data-ios/emoji-data.json') as unknown as Promise;\n emojiRawData = (await emojiDataPromise).default;\n\n emojiData = uncompressEmoji(emojiRawData);\n }\n\n return emojiDataPromise;\n}\n\nexport default memo(withGlobal(\n (global): StateProps => pick(global, ['recentEmojis']),\n)(EmojiPicker));\n","import React, {\n FC, memo, useMemo, useRef,\n} from '../../../lib/teact/teact';\n\nimport { ApiSticker } from '../../../api/types';\nimport { StickerSetOrRecent } from '../../../types';\nimport { ObserveFn, useOnIntersect } from '../../../hooks/useIntersectionObserver';\n\nimport { STICKER_SIZE_PICKER } from '../../../config';\nimport { IS_SINGLE_COLUMN_LAYOUT } from '../../../util/environment';\nimport windowSize from '../../../util/windowSize';\nimport buildClassName from '../../../util/buildClassName';\n\nimport useMediaTransition from '../../../hooks/useMediaTransition';\n\nimport StickerButton from '../../common/StickerButton';\n\ntype OwnProps = {\n stickerSet: StickerSetOrRecent;\n loadAndPlay: boolean;\n index: number;\n shouldRender: boolean;\n favoriteStickers?: ApiSticker[];\n isSavedMessages?: boolean;\n observeIntersection: ObserveFn;\n onStickerSelect: (sticker: ApiSticker, isSilent?: boolean, shouldSchedule?: boolean) => void;\n onStickerUnfave: (sticker: ApiSticker) => void;\n onStickerFave: (sticker: ApiSticker) => void;\n};\n\nconst STICKERS_PER_ROW_ON_DESKTOP = 5;\nconst STICKER_MARGIN = IS_SINGLE_COLUMN_LAYOUT ? 8 : 16;\nconst MOBILE_CONTAINER_PADDING = 8;\n\nconst StickerSet: FC = ({\n stickerSet,\n loadAndPlay,\n index,\n shouldRender,\n favoriteStickers,\n isSavedMessages,\n observeIntersection,\n onStickerSelect,\n onStickerUnfave,\n onStickerFave,\n}) => {\n // eslint-disable-next-line no-null/no-null\n const ref = useRef(null);\n\n useOnIntersect(ref, observeIntersection);\n\n const transitionClassNames = useMediaTransition(shouldRender);\n\n const stickersPerRow = IS_SINGLE_COLUMN_LAYOUT\n ? Math.floor((windowSize.get().width - MOBILE_CONTAINER_PADDING) / (STICKER_SIZE_PICKER + STICKER_MARGIN))\n : STICKERS_PER_ROW_ON_DESKTOP;\n const height = Math.ceil(stickerSet.count / stickersPerRow) * (STICKER_SIZE_PICKER + STICKER_MARGIN);\n\n const favoriteStickerIdsSet = useMemo(() => (\n favoriteStickers ? new Set(favoriteStickers.map(({ id }) => id)) : undefined\n ), [favoriteStickers]);\n\n return (\n \n

{stickerSet.title}

\n \n {shouldRender && stickerSet.stickers && stickerSet.stickers.map((sticker) => (\n \n ))}\n \n \n );\n};\n\nexport default memo(StickerSet);\n","import React, {\n FC, useState, useEffect, memo, useRef, useMemo, useCallback,\n} from '../../../lib/teact/teact';\nimport { getActions, withGlobal } from '../../../global';\n\nimport { ApiStickerSet, ApiSticker } from '../../../api/types';\nimport { StickerSetOrRecent } from '../../../types';\n\nimport { SLIDE_TRANSITION_DURATION, STICKER_SIZE_PICKER_HEADER } from '../../../config';\nimport { IS_TOUCH_ENV } from '../../../util/environment';\nimport { MEMO_EMPTY_ARRAY } from '../../../util/memo';\nimport fastSmoothScroll from '../../../util/fastSmoothScroll';\nimport buildClassName from '../../../util/buildClassName';\nimport fastSmoothScrollHorizontal from '../../../util/fastSmoothScrollHorizontal';\nimport { selectIsChatWithSelf } from '../../../global/selectors';\n\nimport useAsyncRendering from '../../right/hooks/useAsyncRendering';\nimport { useIntersectionObserver } from '../../../hooks/useIntersectionObserver';\nimport useHorizontalScroll from '../../../hooks/useHorizontalScroll';\nimport useLang from '../../../hooks/useLang';\nimport useSendMessageAction from '../../../hooks/useSendMessageAction';\n\nimport Loading from '../../ui/Loading';\nimport Button from '../../ui/Button';\nimport StickerButton from '../../common/StickerButton';\nimport StickerSet from './StickerSet';\nimport StickerSetCover from './StickerSetCover';\nimport StickerSetCoverAnimated from './StickerSetCoverAnimated';\n\nimport './StickerPicker.scss';\n\ntype OwnProps = {\n chatId: string;\n threadId?: number;\n className: string;\n loadAndPlay: boolean;\n canSendStickers: boolean;\n onStickerSelect: (sticker: ApiSticker, isSilent?: boolean, shouldSchedule?: boolean) => void;\n};\n\ntype StateProps = {\n recentStickers: ApiSticker[];\n favoriteStickers: ApiSticker[];\n stickerSetsById: Record;\n addedSetIds?: string[];\n shouldPlay?: boolean;\n isSavedMessages?: boolean;\n};\n\nconst SMOOTH_SCROLL_DISTANCE = 500;\nconst HEADER_BUTTON_WIDTH = 52; // px (including margin)\nconst STICKER_INTERSECTION_THROTTLE = 200;\n\nconst stickerSetIntersections: boolean[] = [];\n\nconst StickerPicker: FC = ({\n chatId,\n threadId,\n className,\n loadAndPlay,\n canSendStickers,\n recentStickers,\n favoriteStickers,\n addedSetIds,\n stickerSetsById,\n shouldPlay,\n isSavedMessages,\n onStickerSelect,\n}) => {\n const {\n loadRecentStickers,\n addRecentSticker,\n unfaveSticker,\n faveSticker,\n } = getActions();\n\n // eslint-disable-next-line no-null/no-null\n const containerRef = useRef(null);\n // eslint-disable-next-line no-null/no-null\n const headerRef = useRef(null);\n const [activeSetIndex, setActiveSetIndex] = useState(0);\n const sendMessageAction = useSendMessageAction(chatId, threadId);\n\n const { observe: observeIntersection } = useIntersectionObserver({\n rootRef: containerRef,\n throttleMs: STICKER_INTERSECTION_THROTTLE,\n }, (entries) => {\n entries.forEach((entry) => {\n const { id } = entry.target as HTMLDivElement;\n if (!id || !id.startsWith('sticker-set-')) {\n return;\n }\n\n const index = Number(id.replace('sticker-set-', ''));\n stickerSetIntersections[index] = entry.isIntersecting;\n });\n\n const intersectingWithIndexes = stickerSetIntersections\n .map((isIntersecting, index) => ({ index, isIntersecting }))\n .filter(({ isIntersecting }) => isIntersecting);\n\n if (!intersectingWithIndexes.length) {\n return;\n }\n\n setActiveSetIndex(intersectingWithIndexes[Math.floor(intersectingWithIndexes.length / 2)].index);\n });\n const { observe: observeIntersectionForCovers } = useIntersectionObserver({ rootRef: headerRef });\n\n const lang = useLang();\n\n const areAddedLoaded = Boolean(addedSetIds);\n\n const allSets = useMemo(() => {\n if (!addedSetIds) {\n return MEMO_EMPTY_ARRAY;\n }\n\n return [\n {\n id: 'recent',\n title: lang('RecentStickers'),\n stickers: recentStickers,\n count: recentStickers.length,\n },\n {\n id: 'favorite',\n title: lang('FavoriteStickers'),\n stickers: favoriteStickers,\n count: favoriteStickers.length,\n },\n ...addedSetIds.map((id) => stickerSetsById[id]).filter(Boolean),\n ];\n }, [addedSetIds, lang, recentStickers, favoriteStickers, stickerSetsById]);\n\n const noPopulatedSets = useMemo(() => (\n areAddedLoaded\n && allSets.filter((set) => set.stickers?.length).length === 0\n ), [allSets, areAddedLoaded]);\n\n useEffect(() => {\n if (loadAndPlay) {\n loadRecentStickers();\n sendMessageAction({ type: 'chooseSticker' });\n }\n }, [loadAndPlay, loadRecentStickers, sendMessageAction]);\n\n useHorizontalScroll(headerRef.current);\n\n // Scroll container and header when active set changes\n useEffect(() => {\n if (!areAddedLoaded) {\n return;\n }\n\n const header = headerRef.current;\n if (!header) {\n return;\n }\n\n const newLeft = activeSetIndex * HEADER_BUTTON_WIDTH - (header.offsetWidth / 2 - HEADER_BUTTON_WIDTH / 2);\n\n fastSmoothScrollHorizontal(header, newLeft);\n }, [areAddedLoaded, activeSetIndex]);\n\n const selectStickerSet = useCallback((index: number) => {\n setActiveSetIndex(index);\n const stickerSetEl = document.getElementById(`sticker-set-${index}`)!;\n fastSmoothScroll(containerRef.current!, stickerSetEl, 'start', undefined, SMOOTH_SCROLL_DISTANCE);\n }, []);\n\n const handleStickerSelect = useCallback((sticker: ApiSticker, isSilent?: boolean, shouldSchedule?: boolean) => {\n onStickerSelect(sticker, isSilent, shouldSchedule);\n addRecentSticker({ sticker });\n }, [addRecentSticker, onStickerSelect]);\n\n const handleStickerUnfave = useCallback((sticker: ApiSticker) => {\n unfaveSticker({ sticker });\n }, [unfaveSticker]);\n\n const handleStickerFave = useCallback((sticker: ApiSticker) => {\n faveSticker({ sticker });\n }, [faveSticker]);\n\n const handleMouseMove = useCallback(() => {\n sendMessageAction({ type: 'chooseSticker' });\n }, [sendMessageAction]);\n\n const canRenderContents = useAsyncRendering([], SLIDE_TRANSITION_DURATION);\n\n function renderCover(stickerSet: StickerSetOrRecent, index: number) {\n const firstSticker = stickerSet.stickers?.[0];\n const buttonClassName = buildClassName(\n 'symbol-set-button sticker-set-button',\n index === activeSetIndex && 'activated',\n );\n\n if (stickerSet.id === 'recent' || stickerSet.id === 'favorite' || stickerSet.hasThumbnail || !firstSticker) {\n return (\n selectStickerSet(index)}\n >\n {stickerSet.id === 'recent' ? (\n \n ) : stickerSet.id === 'favorite' ? (\n \n ) : stickerSet.isLottie ? (\n \n ) : (\n \n )}\n \n );\n } else {\n return (\n \n );\n }\n }\n\n const fullClassName = buildClassName('StickerPicker', className);\n\n if (!areAddedLoaded || !canRenderContents || noPopulatedSets || !canSendStickers) {\n return (\n
\n {!canSendStickers ? (\n
{lang('ErrorSendRestrictedStickersAll')}
\n ) : noPopulatedSets ? (\n
{lang('NoStickers')}
\n ) : (\n \n )}\n
\n );\n }\n\n return (\n
\n \n {allSets.map(renderCover)}\n
\n \n {allSets.map((stickerSet, i) => (\n = i - 1 && activeSetIndex <= i + 1}\n onStickerSelect={handleStickerSelect}\n onStickerUnfave={handleStickerUnfave}\n onStickerFave={handleStickerFave}\n favoriteStickers={favoriteStickers}\n isSavedMessages={isSavedMessages}\n />\n ))}\n \n \n );\n};\n\nexport default memo(withGlobal(\n (global, { chatId }): StateProps => {\n const {\n setsById,\n added,\n recent,\n favorite,\n } = global.stickers;\n\n const isSavedMessages = selectIsChatWithSelf(global, chatId);\n\n return {\n recentStickers: recent.stickers,\n favoriteStickers: favorite.stickers,\n stickerSetsById: setsById,\n addedSetIds: added.setIds,\n shouldPlay: global.settings.byKey.shouldLoopStickers,\n isSavedMessages,\n };\n },\n)(StickerPicker));\n","import React, {\n FC, memo, useCallback, useEffect, useRef,\n} from '../../lib/teact/teact';\n\nimport { ApiMediaFormat, ApiVideo } from '../../api/types';\n\nimport { IS_TOUCH_ENV } from '../../util/environment';\nimport buildClassName from '../../util/buildClassName';\nimport { ObserveFn, useIsIntersecting } from '../../hooks/useIntersectionObserver';\nimport { preventMessageInputBlurWithBubbling } from '../middle/helpers/preventMessageInputBlur';\n\nimport useMedia from '../../hooks/useMedia';\nimport useVideoCleanup from '../../hooks/useVideoCleanup';\nimport useBuffering from '../../hooks/useBuffering';\nimport useCanvasBlur from '../../hooks/useCanvasBlur';\nimport useLang from '../../hooks/useLang';\nimport useContextMenuPosition from '../../hooks/useContextMenuPosition';\nimport useContextMenuHandlers from '../../hooks/useContextMenuHandlers';\n\nimport Spinner from '../ui/Spinner';\nimport Button from '../ui/Button';\nimport Menu from '../ui/Menu';\nimport MenuItem from '../ui/MenuItem';\n\nimport './GifButton.scss';\n\ntype OwnProps = {\n gif: ApiVideo;\n observeIntersection: ObserveFn;\n isDisabled?: boolean;\n className?: string;\n onClick?: (gif: ApiVideo, isSilent?: boolean, shouldSchedule?: boolean) => void;\n onUnsaveClick?: (gif: ApiVideo) => void;\n isSavedMessages?: boolean;\n};\n\nconst GifButton: FC = ({\n gif,\n isDisabled,\n className,\n observeIntersection,\n onClick,\n onUnsaveClick,\n isSavedMessages,\n}) => {\n // eslint-disable-next-line no-null/no-null\n const ref = useRef(null);\n // eslint-disable-next-line no-null/no-null\n const videoRef = useRef(null);\n\n const lang = useLang();\n\n const hasThumbnail = Boolean(gif.thumbnail?.dataUri);\n const localMediaHash = `gif${gif.id}`;\n const isIntersecting = useIsIntersecting(ref, observeIntersection);\n const loadAndPlay = isIntersecting && !isDisabled;\n const previewBlobUrl = useMedia(`${localMediaHash}?size=m`, !loadAndPlay, ApiMediaFormat.BlobUrl);\n const thumbRef = useCanvasBlur(gif.thumbnail?.dataUri, Boolean(previewBlobUrl));\n const videoData = useMedia(localMediaHash, !loadAndPlay, ApiMediaFormat.BlobUrl);\n const shouldRenderVideo = Boolean(loadAndPlay && videoData);\n const { isBuffered, bufferingHandlers } = useBuffering(true);\n const shouldRenderSpinner = loadAndPlay && !isBuffered;\n const isVideoReady = loadAndPlay && isBuffered;\n\n useVideoCleanup(videoRef, [shouldRenderVideo]);\n\n const {\n isContextMenuOpen, contextMenuPosition,\n handleBeforeContextMenu, handleContextMenu,\n handleContextMenuClose, handleContextMenuHide,\n } = useContextMenuHandlers(ref);\n\n const getTriggerElement = useCallback(() => ref.current, []);\n\n const getRootElement = useCallback(\n () => ref.current!.closest('.custom-scroll, .no-scrollbar'),\n [],\n );\n\n const getMenuElement = useCallback(\n () => ref.current!.querySelector('.gif-context-menu .bubble'),\n [],\n );\n\n const {\n positionX, positionY, transformOriginX, transformOriginY, style: menuStyle,\n } = useContextMenuPosition(\n contextMenuPosition,\n getTriggerElement,\n getRootElement,\n getMenuElement,\n );\n\n const handleClick = useCallback(() => {\n if (isContextMenuOpen || !onClick) return;\n onClick({\n ...gif,\n blobUrl: videoData,\n });\n }, [isContextMenuOpen, onClick, gif, videoData]);\n\n const handleUnsaveClick = useCallback((e: React.MouseEvent) => {\n e.stopPropagation();\n e.preventDefault();\n onUnsaveClick!(gif);\n }, [onUnsaveClick, gif]);\n\n const handleContextDelete = useCallback(() => {\n onUnsaveClick?.(gif);\n }, [gif, onUnsaveClick]);\n\n const handleSendQuiet = useCallback(() => {\n onClick!({\n ...gif,\n blobUrl: videoData,\n }, true);\n }, [gif, onClick, videoData]);\n\n const handleSendScheduled = useCallback(() => {\n onClick!({\n ...gif,\n blobUrl: videoData,\n }, undefined, true);\n }, [gif, onClick, videoData]);\n\n const handleMouseDown = useCallback((e: React.MouseEvent) => {\n preventMessageInputBlurWithBubbling(e);\n handleBeforeContextMenu(e);\n }, [handleBeforeContextMenu]);\n\n useEffect(() => {\n if (isDisabled) handleContextMenuClose();\n }, [handleContextMenuClose, isDisabled]);\n\n const fullClassName = buildClassName(\n 'GifButton',\n gif.width && gif.height && gif.width < gif.height ? 'vertical' : 'horizontal',\n onClick && 'interactive',\n localMediaHash,\n className,\n );\n\n return (\n \n {!IS_TOUCH_ENV && onUnsaveClick && (\n \n \n \n )}\n {hasThumbnail && (\n \n )}\n {previewBlobUrl && !isVideoReady && (\n \n )}\n {shouldRenderVideo && (\n \n \n \n )}\n {shouldRenderSpinner && (\n \n )}\n {onClick && contextMenuPosition !== undefined && (\n \n {!isSavedMessages && {lang('SendWithoutSound')}}\n \n {lang(isSavedMessages ? 'SetReminder' : 'ScheduleMessage')}\n \n {onUnsaveClick && (\n {lang('Delete')}\n )}\n \n )}\n \n );\n};\n\nexport default memo(GifButton);\n","import React, {\n FC, useEffect, memo, useRef, useCallback,\n} from '../../../lib/teact/teact';\nimport { getActions, withGlobal } from '../../../global';\n\nimport { ApiVideo } from '../../../api/types';\n\nimport { SLIDE_TRANSITION_DURATION } from '../../../config';\nimport { IS_TOUCH_ENV } from '../../../util/environment';\nimport buildClassName from '../../../util/buildClassName';\nimport { selectCurrentMessageList, selectIsChatWithSelf } from '../../../global/selectors';\n\nimport { useIntersectionObserver } from '../../../hooks/useIntersectionObserver';\nimport useAsyncRendering from '../../right/hooks/useAsyncRendering';\n\nimport Loading from '../../ui/Loading';\nimport GifButton from '../../common/GifButton';\n\nimport './GifPicker.scss';\n\ntype OwnProps = {\n className: string;\n loadAndPlay: boolean;\n canSendGifs: boolean;\n onGifSelect: (gif: ApiVideo, isSilent?: boolean, shouldSchedule?: boolean) => void;\n};\n\ntype StateProps = {\n savedGifs?: ApiVideo[];\n isSavedMessages?: boolean;\n};\n\nconst INTERSECTION_DEBOUNCE = 300;\n\nconst GifPicker: FC = ({\n className,\n loadAndPlay,\n canSendGifs,\n savedGifs,\n isSavedMessages,\n onGifSelect,\n}) => {\n const { loadSavedGifs, saveGif } = getActions();\n\n // eslint-disable-next-line no-null/no-null\n const containerRef = useRef(null);\n\n const {\n observe: observeIntersection,\n } = useIntersectionObserver({ rootRef: containerRef, debounceMs: INTERSECTION_DEBOUNCE });\n\n useEffect(() => {\n if (loadAndPlay) {\n loadSavedGifs();\n }\n }, [loadAndPlay, loadSavedGifs]);\n\n const handleUnsaveClick = useCallback((gif: ApiVideo) => {\n saveGif({ gif, shouldUnsave: true });\n }, [saveGif]);\n\n const canRenderContents = useAsyncRendering([], SLIDE_TRANSITION_DURATION);\n\n return (\n \n {!canSendGifs ? (\n
Sending GIFs is not allowed in this chat.
\n ) : canRenderContents && savedGifs && savedGifs.length ? (\n savedGifs.map((gif) => (\n \n ))\n ) : canRenderContents && savedGifs ? (\n
No saved GIFs.
\n ) : (\n \n )}\n \n );\n};\n\nexport default memo(withGlobal(\n (global): StateProps => {\n const { chatId } = selectCurrentMessageList(global) || {};\n const isSavedMessages = Boolean(chatId) && selectIsChatWithSelf(global, chatId);\n return {\n savedGifs: global.gifs.saved.gifs,\n isSavedMessages,\n };\n },\n)(GifPicker));\n","import React, { FC, memo, useCallback } from '../../../lib/teact/teact';\n\nimport useLang from '../../../hooks/useLang';\n\nimport Button from '../../ui/Button';\n\ntype OwnProps = {\n activeTab: SymbolMenuTabs;\n onSwitchTab: (tab: SymbolMenuTabs) => void;\n onRemoveSymbol: () => void;\n onSearchOpen: (type: 'stickers' | 'gifs') => void;\n};\n\nexport enum SymbolMenuTabs {\n 'Emoji',\n 'Stickers',\n 'GIFs',\n}\n\n// Getting enum string values for display in Tabs.\n// See: https://www.typescriptlang.org/docs/handbook/enums.html#reverse-mappings\nexport const SYMBOL_MENU_TAB_TITLES = Object.values(SymbolMenuTabs)\n .filter((value): value is string => typeof value === 'string');\n\nconst SYMBOL_MENU_TAB_ICONS = {\n [SymbolMenuTabs.Emoji]: 'icon-smile',\n [SymbolMenuTabs.Stickers]: 'icon-stickers',\n [SymbolMenuTabs.GIFs]: 'icon-gifs',\n};\n\nconst SymbolMenuFooter: FC = ({\n activeTab, onSwitchTab, onRemoveSymbol, onSearchOpen,\n}) => {\n const lang = useLang();\n\n function renderTabButton(tab: SymbolMenuTabs) {\n return (\n onSwitchTab(tab)}\n ariaLabel={SYMBOL_MENU_TAB_TITLES[tab]}\n round\n faded\n color=\"translucent\"\n >\n \n \n );\n }\n\n const handleSearchOpen = useCallback(() => {\n onSearchOpen(activeTab === SymbolMenuTabs.Stickers ? 'stickers' : 'gifs');\n }, [activeTab, onSearchOpen]);\n\n function stopPropagation(event: any) {\n event.stopPropagation();\n }\n\n return (\n
\n {activeTab !== SymbolMenuTabs.Emoji && (\n \n \n \n )}\n\n {renderTabButton(SymbolMenuTabs.Emoji)}\n {renderTabButton(SymbolMenuTabs.Stickers)}\n {renderTabButton(SymbolMenuTabs.GIFs)}\n\n {activeTab === SymbolMenuTabs.Emoji && (\n \n \n \n )}\n
\n );\n};\n\nexport default memo(SymbolMenuFooter);\n","import React, {\n FC, memo, useCallback, useEffect, useLayoutEffect, useRef, useState,\n} from '../../../lib/teact/teact';\nimport { withGlobal } from '../../../global';\n\nimport { ApiSticker, ApiVideo } from '../../../api/types';\n\nimport { IS_SINGLE_COLUMN_LAYOUT, IS_TOUCH_ENV } from '../../../util/environment';\nimport { fastRaf } from '../../../util/schedulers';\nimport buildClassName from '../../../util/buildClassName';\nimport useShowTransition from '../../../hooks/useShowTransition';\nimport useMouseInside from '../../../hooks/useMouseInside';\nimport useLang from '../../../hooks/useLang';\n\nimport Button from '../../ui/Button';\nimport Menu from '../../ui/Menu';\nimport Transition from '../../ui/Transition';\nimport EmojiPicker from './EmojiPicker';\nimport StickerPicker from './StickerPicker';\nimport GifPicker from './GifPicker';\nimport SymbolMenuFooter, { SYMBOL_MENU_TAB_TITLES, SymbolMenuTabs } from './SymbolMenuFooter';\nimport Portal from '../../ui/Portal';\n\nimport './SymbolMenu.scss';\n\nconst ANIMATION_DURATION = 350;\n\nexport type OwnProps = {\n chatId: string;\n threadId?: number;\n isOpen: boolean;\n canSendStickers: boolean;\n canSendGifs: boolean;\n onLoad: () => void;\n onClose: () => void;\n onEmojiSelect: (emoji: string) => void;\n onStickerSelect: (\n sticker: ApiSticker, isSilent?: boolean, shouldSchedule?: boolean, shouldPreserveInput?: boolean\n ) => void;\n onGifSelect: (gif: ApiVideo, isSilent?: boolean, shouldSchedule?: boolean) => void;\n onRemoveSymbol: () => void;\n onSearchOpen: (type: 'stickers' | 'gifs') => void;\n addRecentEmoji: AnyToVoidFunction;\n};\n\ntype StateProps = {\n isLeftColumnShown: boolean;\n};\n\nlet isActivated = false;\n\nconst SymbolMenu: FC = ({\n chatId,\n threadId,\n isOpen,\n canSendStickers,\n canSendGifs,\n isLeftColumnShown,\n onLoad,\n onClose,\n onEmojiSelect,\n onStickerSelect,\n onGifSelect,\n onRemoveSymbol,\n onSearchOpen,\n addRecentEmoji,\n}) => {\n const [activeTab, setActiveTab] = useState(0);\n const [recentEmojis, setRecentEmojis] = useState([]);\n\n const [handleMouseEnter, handleMouseLeave] = useMouseInside(isOpen, onClose, undefined, IS_SINGLE_COLUMN_LAYOUT);\n const { shouldRender, transitionClassNames } = useShowTransition(isOpen, onClose, false, false);\n\n if (!isActivated && isOpen) {\n isActivated = true;\n }\n\n useEffect(() => {\n onLoad();\n }, [onLoad]);\n\n useLayoutEffect(() => {\n if (!IS_SINGLE_COLUMN_LAYOUT) {\n return undefined;\n }\n\n if (isOpen) {\n document.body.classList.add('enable-symbol-menu-transforms');\n document.body.classList.add('is-symbol-menu-open');\n }\n\n return () => {\n if (isOpen) {\n fastRaf(() => {\n document.body.classList.remove('is-symbol-menu-open');\n setTimeout(() => {\n document.body.classList.remove('enable-symbol-menu-transforms');\n }, ANIMATION_DURATION);\n });\n }\n };\n }, [isOpen]);\n\n const recentEmojisRef = useRef(recentEmojis);\n recentEmojisRef.current = recentEmojis;\n useEffect(() => {\n if (!recentEmojisRef.current.length) {\n return;\n }\n\n recentEmojisRef.current.forEach((name) => {\n addRecentEmoji({ emoji: name });\n });\n\n setRecentEmojis([]);\n }, [isOpen, activeTab, addRecentEmoji]);\n\n const handleEmojiSelect = useCallback((emoji: string, name: string) => {\n setRecentEmojis((emojis) => {\n return [...emojis, name];\n });\n\n onEmojiSelect(emoji);\n }, [onEmojiSelect]);\n\n const handleSearch = useCallback((type: 'stickers' | 'gifs') => {\n onClose();\n onSearchOpen(type);\n }, [onClose, onSearchOpen]);\n\n const handleStickerSelect = useCallback((sticker: ApiSticker, isSilent?: boolean, shouldSchedule?: boolean) => {\n onStickerSelect(sticker, isSilent, shouldSchedule, true);\n }, [onStickerSelect]);\n\n const lang = useLang();\n\n function renderContent(isActive: boolean, isFrom: boolean) {\n switch (activeTab) {\n case SymbolMenuTabs.Emoji:\n return (\n \n );\n case SymbolMenuTabs.Stickers:\n return (\n \n );\n case SymbolMenuTabs.GIFs:\n return (\n \n );\n }\n\n return undefined;\n }\n\n function stopPropagation(event: any) {\n event.stopPropagation();\n }\n\n const content = (\n <>\n
\n {isActivated && (\n \n {renderContent}\n \n )}\n
\n {IS_SINGLE_COLUMN_LAYOUT && (\n \n \n \n )}\n \n \n );\n\n if (IS_SINGLE_COLUMN_LAYOUT) {\n if (!shouldRender) {\n return undefined;\n }\n\n const className = buildClassName(\n 'SymbolMenu mobile-menu',\n transitionClassNames,\n !isLeftColumnShown && 'middle-column-open',\n );\n\n return (\n \n
\n {content}\n
\n
\n );\n }\n\n return (\n \n {content}\n \n );\n};\n\nexport default memo(withGlobal(\n (global): StateProps => {\n return {\n isLeftColumnShown: global.isLeftColumnShown,\n };\n },\n)(SymbolMenu));\n","import React, { FC, memo } from '../../../lib/teact/teact';\n\nimport { ApiBotCommand, ApiUser } from '../../../api/types';\n\nimport renderText from '../../common/helpers/renderText';\nimport buildClassName from '../../../util/buildClassName';\n\nimport ListItem from '../../ui/ListItem';\nimport Avatar from '../../common/Avatar';\n\nimport './BotCommand.scss';\n\ntype OwnProps = {\n botCommand: ApiBotCommand;\n bot?: ApiUser;\n withAvatar?: boolean;\n focus?: boolean;\n onClick: (botCommand: ApiBotCommand) => void;\n};\n\nconst BotCommand: FC = ({\n withAvatar,\n focus,\n botCommand,\n bot,\n onClick,\n}) => {\n return (\n onClick(botCommand)}\n focus={focus}\n >\n {withAvatar && (\n \n )}\n
\n /{botCommand.command}\n {renderText(botCommand.description)}\n
\n \n );\n};\n\nexport default memo(BotCommand);\n","import React, {\n FC, useCallback, useEffect, useRef, memo,\n} from '../../../lib/teact/teact';\nimport { getActions, withGlobal } from '../../../global';\n\nimport { ApiBotCommand, ApiUser } from '../../../api/types';\n\nimport buildClassName from '../../../util/buildClassName';\nimport setTooltipItemVisible from '../../../util/setTooltipItemVisible';\nimport useShowTransition from '../../../hooks/useShowTransition';\nimport usePrevious from '../../../hooks/usePrevious';\nimport { useKeyboardNavigation } from './hooks/useKeyboardNavigation';\n\nimport BotCommand from './BotCommand';\n\nimport './BotCommandTooltip.scss';\n\nexport type OwnProps = {\n isOpen: boolean;\n withUsername?: boolean;\n botCommands?: ApiBotCommand[];\n onClick: NoneToVoidFunction;\n onClose: NoneToVoidFunction;\n};\n\ntype StateProps = {\n usersById: Record;\n};\n\nconst BotCommandTooltip: FC = ({\n usersById,\n isOpen,\n withUsername,\n botCommands,\n onClick,\n onClose,\n}) => {\n const { sendBotCommand } = getActions();\n\n // eslint-disable-next-line no-null/no-null\n const containerRef = useRef(null);\n const { shouldRender, transitionClassNames } = useShowTransition(isOpen, undefined, undefined, false);\n\n const handleSendCommand = useCallback(({ botId, command }: ApiBotCommand) => {\n const bot = usersById[botId];\n sendBotCommand({\n command: `/${command}${withUsername && bot ? `@${bot.username}` : ''}`,\n botId,\n });\n onClick();\n }, [onClick, sendBotCommand, usersById, withUsername]);\n\n const selectedCommandIndex = useKeyboardNavigation({\n isActive: isOpen,\n items: botCommands,\n onSelect: handleSendCommand,\n onClose,\n });\n\n useEffect(() => {\n if (botCommands && !botCommands.length) {\n onClose();\n }\n }, [botCommands, onClose]);\n\n useEffect(() => {\n setTooltipItemVisible('.chat-item-clickable', selectedCommandIndex, containerRef);\n }, [selectedCommandIndex]);\n\n const prevCommands = usePrevious(botCommands && botCommands.length ? botCommands : undefined, shouldRender);\n const renderedCommands = botCommands && !botCommands.length ? prevCommands : botCommands;\n\n if (!shouldRender || (renderedCommands && !renderedCommands.length)) {\n return undefined;\n }\n\n const className = buildClassName(\n 'BotCommandTooltip composer-tooltip custom-scroll',\n transitionClassNames,\n );\n\n return (\n
\n {renderedCommands && renderedCommands.map((chatBotCommand, index) => (\n \n ))}\n
\n );\n};\n\nexport default memo(withGlobal(\n (global): StateProps => ({\n usersById: global.users.byId,\n }),\n)(BotCommandTooltip));\n","import React, { FC, memo, useCallback } from '../../../lib/teact/teact';\n\nimport { ApiBotCommand } from '../../../api/types';\n\nimport { IS_SINGLE_COLUMN_LAYOUT, IS_TOUCH_ENV } from '../../../util/environment';\nimport useMouseInside from '../../../hooks/useMouseInside';\n\nimport Menu from '../../ui/Menu';\nimport BotCommand from './BotCommand';\n\nimport './BotCommandMenu.scss';\nimport { getActions } from '../../../global';\n\nexport type OwnProps = {\n isOpen: boolean;\n botCommands: ApiBotCommand[];\n onClose: NoneToVoidFunction;\n};\n\nconst BotCommandMenu: FC = ({\n isOpen, botCommands, onClose,\n}) => {\n const { sendBotCommand } = getActions();\n\n const [handleMouseEnter, handleMouseLeave] = useMouseInside(isOpen, onClose, undefined, IS_SINGLE_COLUMN_LAYOUT);\n\n const handleClick = useCallback((botCommand: ApiBotCommand) => {\n sendBotCommand({\n command: `/${botCommand.command}`,\n botId: botCommand.botId,\n });\n onClose();\n }, [onClose, sendBotCommand]);\n\n return (\n \n {botCommands.map((botCommand) => (\n \n ))}\n \n );\n};\n\nexport default memo(BotCommandMenu);\n","import React, {\n FC, memo, useEffect, useRef,\n} from '../../../lib/teact/teact';\nimport { getActions, withGlobal } from '../../../global';\n\nimport { ApiSticker } from '../../../api/types';\n\nimport { STICKER_SIZE_PICKER } from '../../../config';\nimport buildClassName from '../../../util/buildClassName';\nimport captureEscKeyListener from '../../../util/captureEscKeyListener';\nimport { useIntersectionObserver } from '../../../hooks/useIntersectionObserver';\nimport useShowTransition from '../../../hooks/useShowTransition';\nimport usePrevious from '../../../hooks/usePrevious';\nimport useSendMessageAction from '../../../hooks/useSendMessageAction';\nimport { selectIsChatWithSelf } from '../../../global/selectors';\n\nimport Loading from '../../ui/Loading';\nimport StickerButton from '../../common/StickerButton';\n\nimport './StickerTooltip.scss';\n\nexport type OwnProps = {\n chatId: string;\n threadId?: number;\n isOpen: boolean;\n onStickerSelect: (sticker: ApiSticker, isSilent?: boolean, shouldSchedule?: boolean) => void;\n};\n\ntype StateProps = {\n stickers?: ApiSticker[];\n isSavedMessages?: boolean;\n};\n\nconst INTERSECTION_THROTTLE = 200;\n\nconst StickerTooltip: FC = ({\n chatId,\n threadId,\n isOpen,\n stickers,\n isSavedMessages,\n onStickerSelect,\n}) => {\n const { clearStickersForEmoji } = getActions();\n\n // eslint-disable-next-line no-null/no-null\n const containerRef = useRef(null);\n const { shouldRender, transitionClassNames } = useShowTransition(isOpen, undefined, undefined, false);\n const prevStickers = usePrevious(stickers, true);\n const displayedStickers = stickers || prevStickers;\n const sendMessageAction = useSendMessageAction(chatId, threadId);\n\n const {\n observe: observeIntersection,\n } = useIntersectionObserver({ rootRef: containerRef, throttleMs: INTERSECTION_THROTTLE });\n\n useEffect(() => (isOpen ? captureEscKeyListener(clearStickersForEmoji) : undefined), [isOpen, clearStickersForEmoji]);\n\n const handleMouseMove = () => {\n sendMessageAction({ type: 'chooseSticker' });\n };\n\n const className = buildClassName(\n 'StickerTooltip composer-tooltip custom-scroll',\n transitionClassNames,\n !(displayedStickers?.length) && 'hidden',\n );\n\n return (\n \n {shouldRender && displayedStickers ? (\n displayedStickers.map((sticker) => (\n \n ))\n ) : shouldRender ? (\n \n ) : undefined}\n \n );\n};\n\nexport default memo(withGlobal(\n (global, { chatId }): StateProps => {\n const { stickers } = global.stickers.forEmoji;\n const isSavedMessages = selectIsChatWithSelf(global, chatId);\n\n return { stickers, isSavedMessages };\n },\n)(StickerTooltip));\n","import React, { FC, memo } from '../../../lib/teact/teact';\n\nimport { IS_TOUCH_ENV } from '../../../util/environment';\nimport useMouseInside from '../../../hooks/useMouseInside';\nimport useLang from '../../../hooks/useLang';\n\nimport Menu from '../../ui/Menu';\nimport MenuItem from '../../ui/MenuItem';\n\nimport './CustomSendMenu.scss';\n\nexport type OwnProps = {\n isOpen: boolean;\n isOpenToBottom?: boolean;\n isSavedMessages?: boolean;\n onSendSilent?: NoneToVoidFunction;\n onSendSchedule?: NoneToVoidFunction;\n onClose: NoneToVoidFunction;\n onCloseAnimationEnd?: NoneToVoidFunction;\n};\n\nconst CustomSendMenu: FC = ({\n isOpen,\n isOpenToBottom = false,\n isSavedMessages,\n onSendSilent,\n onSendSchedule,\n onClose,\n onCloseAnimationEnd,\n}) => {\n const [handleMouseEnter, handleMouseLeave] = useMouseInside(isOpen, onClose);\n\n const lang = useLang();\n\n return (\n \n {onSendSilent && {lang('SendWithoutSound')}}\n {onSendSchedule && (\n \n {lang(isSavedMessages ? 'SetReminder' : 'ScheduleMessage')}\n \n )}\n \n );\n};\n\nexport default memo(CustomSendMenu);\n","import React, {\n FC, memo, useCallback, useEffect, useRef,\n} from '../../../lib/teact/teact';\n\nimport buildClassName from '../../../util/buildClassName';\nimport findInViewport from '../../../util/findInViewport';\nimport isFullyVisible from '../../../util/isFullyVisible';\nimport fastSmoothScrollHorizontal from '../../../util/fastSmoothScrollHorizontal';\nimport useShowTransition from '../../../hooks/useShowTransition';\nimport usePrevDuringAnimation from '../../../hooks/usePrevDuringAnimation';\nimport { useKeyboardNavigation } from './hooks/useKeyboardNavigation';\n\nimport Loading from '../../ui/Loading';\nimport EmojiButton from './EmojiButton';\n\nimport './EmojiTooltip.scss';\n\nconst VIEWPORT_MARGIN = 8;\nconst EMOJI_BUTTON_WIDTH = 44;\nconst CLOSE_DURATION = 350;\n\nfunction setItemVisible(index: number, containerRef: Record) {\n const container = containerRef.current!;\n if (!container) {\n return;\n }\n\n const { visibleIndexes, allElements } = findInViewport(\n container,\n '.EmojiButton',\n VIEWPORT_MARGIN,\n true,\n true,\n true,\n );\n\n if (!allElements.length || !allElements[index]) {\n return;\n }\n const first = visibleIndexes[0];\n if (!visibleIndexes.includes(index)\n || (index === first && !isFullyVisible(container, allElements[first], true))) {\n const position = index > visibleIndexes[visibleIndexes.length - 1] ? 'start' : 'end';\n const newLeft = position === 'start' ? index * EMOJI_BUTTON_WIDTH : 0;\n\n fastSmoothScrollHorizontal(container, newLeft);\n }\n}\n\nexport type OwnProps = {\n isOpen: boolean;\n onEmojiSelect: (text: string) => void;\n onClose: NoneToVoidFunction;\n addRecentEmoji: AnyToVoidFunction;\n emojis: Emoji[];\n};\n\nconst EmojiTooltip: FC = ({\n isOpen,\n emojis,\n onClose,\n onEmojiSelect,\n addRecentEmoji,\n}) => {\n // eslint-disable-next-line no-null/no-null\n const containerRef = useRef(null);\n const { shouldRender, transitionClassNames } = useShowTransition(isOpen, undefined, undefined, false);\n const listEmojis: Emoji[] = usePrevDuringAnimation(emojis.length ? emojis : undefined, CLOSE_DURATION) || [];\n\n const handleSelectEmoji = useCallback((emoji: Emoji) => {\n onEmojiSelect(emoji.native);\n addRecentEmoji({ emoji: emoji.id });\n }, [addRecentEmoji, onEmojiSelect]);\n\n const handleClick = useCallback((native: string, id: string) => {\n onEmojiSelect(native);\n addRecentEmoji({ emoji: id });\n }, [addRecentEmoji, onEmojiSelect]);\n\n const selectedIndex = useKeyboardNavigation({\n isActive: isOpen,\n isHorizontal: true,\n items: emojis,\n onSelect: handleSelectEmoji,\n onClose,\n });\n\n useEffect(() => {\n setItemVisible(selectedIndex, containerRef);\n }, [selectedIndex]);\n\n const className = buildClassName(\n 'EmojiTooltip composer-tooltip custom-scroll-x',\n transitionClassNames,\n );\n\n return (\n \n {shouldRender && listEmojis ? (\n listEmojis.map((emoji, index) => (\n \n ))\n ) : shouldRender ? (\n \n ) : undefined}\n \n );\n};\n\nexport default memo(EmojiTooltip);\n","import React, { FC, memo } from '../../../../lib/teact/teact';\n\nimport { ApiWebDocument } from '../../../../api/types';\n\nimport { getFirstLetters } from '../../../../util/textFormat';\nimport renderText from '../../../common/helpers/renderText';\nimport useMedia from '../../../../hooks/useMedia';\n\nimport ListItem from '../../../ui/ListItem';\n\nimport './BaseResult.scss';\nimport { preventMessageInputBlurWithBubbling } from '../../helpers/preventMessageInputBlur';\n\nexport type OwnProps = {\n focus?: boolean;\n thumbnail?: ApiWebDocument;\n thumbUrl?: string;\n title?: string;\n description?: string;\n transitionClassNames?: string;\n onClick: NoneToVoidFunction;\n};\n\nconst BaseResult: FC = ({\n title,\n description,\n thumbnail,\n thumbUrl,\n focus,\n transitionClassNames = '',\n onClick,\n}) => {\n let content: string | undefined = '';\n\n const thumbnailDataUrl = useMedia(thumbnail ? `webDocument:${thumbnail.url}` : undefined);\n thumbUrl = thumbUrl || thumbnailDataUrl;\n\n if (thumbUrl) {\n content = (\n \"\"\n );\n } else if (title) {\n content = getFirstLetters(title, 1);\n }\n\n return (\n \n \n {typeof content === 'string' ? renderText(content) : content}\n \n
\n {title && (
{title}
)}\n {description && (
{description}
)}\n
\n \n );\n};\n\nexport default memo(BaseResult);\n","import React, { FC, memo, useCallback } from '../../../../lib/teact/teact';\n\nimport {\n ApiBotInlineMediaResult, ApiBotInlineResult, ApiPhoto, ApiThumbnail, ApiWebDocument,\n} from '../../../../api/types';\n\nimport buildClassName from '../../../../util/buildClassName';\nimport useMedia from '../../../../hooks/useMedia';\nimport useMediaTransition from '../../../../hooks/useMediaTransition';\n\nimport BaseResult from './BaseResult';\n\nimport './MediaResult.scss';\n\nexport type OwnProps = {\n focus?: boolean;\n isForGallery?: boolean;\n inlineResult: ApiBotInlineMediaResult | ApiBotInlineResult;\n onClick: (result: ApiBotInlineResult) => void;\n};\n\nconst MediaResult: FC = ({\n focus, isForGallery, inlineResult, onClick,\n}) => {\n let photo: ApiPhoto | undefined;\n let thumbnail: ApiThumbnail | undefined;\n let webThumbnail: ApiWebDocument | undefined;\n\n if ('photo' in inlineResult) {\n photo = inlineResult.photo;\n }\n // For results with type=video (for example @stikstokbot)\n if ('thumbnail' in inlineResult) {\n thumbnail = inlineResult.thumbnail;\n }\n if ('webThumbnail' in inlineResult && isForGallery) {\n webThumbnail = inlineResult.webThumbnail;\n }\n\n const thumbnailDataUrl = useMedia(webThumbnail ? `webDocument:${webThumbnail.url}` : undefined);\n const mediaBlobUrl = useMedia(photo && `photo${photo.id}?size=m`);\n const transitionClassNames = useMediaTransition(mediaBlobUrl);\n\n const handleClick = useCallback(() => {\n onClick(inlineResult);\n }, [inlineResult, onClick]);\n\n if (isForGallery) {\n return (\n
\n \"\"\n \"\"\n
\n );\n }\n\n const { title, description } = inlineResult;\n\n return (\n \n );\n};\n\nexport default memo(MediaResult);\n","import React, { FC, memo, useCallback } from '../../../../lib/teact/teact';\n\nimport { ApiBotInlineResult } from '../../../../api/types';\n\nimport BaseResult from './BaseResult';\n\nexport type OwnProps = {\n focus?: boolean;\n inlineResult: ApiBotInlineResult;\n onClick: (result: ApiBotInlineResult) => void;\n};\n\nconst ArticleResult: FC = ({ focus, inlineResult, onClick }) => {\n const {\n title, url, description, webThumbnail,\n } = inlineResult;\n\n const handleClick = useCallback(() => {\n onClick(inlineResult);\n }, [inlineResult, onClick]);\n\n return (\n \n );\n};\n\nexport default memo(ArticleResult);\n","import React, {\n FC, memo, useCallback,\n} from '../../../../lib/teact/teact';\n\nimport { ApiBotInlineMediaResult, ApiBotInlineResult, ApiVideo } from '../../../../api/types';\n\nimport { ObserveFn } from '../../../../hooks/useIntersectionObserver';\n\nimport GifButton from '../../../common/GifButton';\n\ntype OwnProps = {\n inlineResult: ApiBotInlineMediaResult;\n isSavedMessages?: boolean;\n canSendGifs?: boolean;\n observeIntersection: ObserveFn;\n onClick: (result: ApiBotInlineResult, isSilent?: boolean, shouldSchedule?: boolean) => void;\n};\n\nconst GifResult: FC = ({\n inlineResult, isSavedMessages, canSendGifs, observeIntersection, onClick,\n}) => {\n const { gif } = inlineResult;\n\n const handleClick = useCallback((_gif: ApiVideo, isSilent?: boolean, shouldSchedule?: boolean) => {\n onClick(inlineResult, isSilent, shouldSchedule);\n }, [inlineResult, onClick]);\n\n if (!gif) {\n return undefined;\n }\n\n return (\n \n );\n};\n\nexport default memo(GifResult);\n","import React, { FC, memo } from '../../../../lib/teact/teact';\n\nimport { ApiBotInlineMediaResult, ApiBotInlineResult } from '../../../../api/types';\n\nimport { STICKER_SIZE_INLINE_BOT_RESULT } from '../../../../config';\nimport { ObserveFn } from '../../../../hooks/useIntersectionObserver';\n\nimport StickerButton from '../../../common/StickerButton';\n\ntype OwnProps = {\n inlineResult: ApiBotInlineMediaResult;\n isSavedMessages?: boolean;\n observeIntersection: ObserveFn;\n onClick: (result: ApiBotInlineResult, isSilent?: boolean, shouldSchedule?: boolean) => void;\n};\n\nconst StickerResult: FC = ({\n inlineResult,\n isSavedMessages,\n observeIntersection,\n onClick,\n}) => {\n const { sticker } = inlineResult;\n\n if (!sticker) {\n return undefined;\n }\n\n return (\n \n );\n};\n\nexport default memo(StickerResult);\n","import React, {\n FC, memo, useCallback, useEffect, useRef,\n} from '../../../lib/teact/teact';\nimport { getActions } from '../../../global';\n\nimport { ApiBotInlineMediaResult, ApiBotInlineResult, ApiBotInlineSwitchPm } from '../../../api/types';\nimport { LoadMoreDirection } from '../../../types';\n\nimport { IS_TOUCH_ENV } from '../../../util/environment';\nimport setTooltipItemVisible from '../../../util/setTooltipItemVisible';\nimport buildClassName from '../../../util/buildClassName';\nimport useShowTransition from '../../../hooks/useShowTransition';\nimport { throttle } from '../../../util/schedulers';\nimport { useIntersectionObserver } from '../../../hooks/useIntersectionObserver';\nimport usePrevious from '../../../hooks/usePrevious';\nimport { useKeyboardNavigation } from './hooks/useKeyboardNavigation';\n\nimport MediaResult from './inlineResults/MediaResult';\nimport ArticleResult from './inlineResults/ArticleResult';\nimport GifResult from './inlineResults/GifResult';\nimport StickerResult from './inlineResults/StickerResult';\nimport ListItem from '../../ui/ListItem';\nimport InfiniteScroll from '../../ui/InfiniteScroll';\n\nimport './InlineBotTooltip.scss';\n\nconst INTERSECTION_DEBOUNCE_MS = 200;\nconst runThrottled = throttle((cb) => cb(), 500, true);\n\nexport type OwnProps = {\n isOpen: boolean;\n botId?: string;\n isGallery?: boolean;\n inlineBotResults?: (ApiBotInlineResult | ApiBotInlineMediaResult)[];\n switchPm?: ApiBotInlineSwitchPm;\n isSavedMessages?: boolean;\n canSendGifs?: boolean;\n onSelectResult: (\n inlineResult: ApiBotInlineMediaResult | ApiBotInlineResult, isSilent?: boolean, shouldSchedule?: boolean\n ) => void;\n loadMore: NoneToVoidFunction;\n onClose: NoneToVoidFunction;\n};\n\nconst InlineBotTooltip: FC = ({\n isOpen,\n botId,\n isGallery,\n inlineBotResults,\n switchPm,\n isSavedMessages,\n canSendGifs,\n loadMore,\n onClose,\n onSelectResult,\n}) => {\n const {\n openChat,\n startBot,\n } = getActions();\n\n // eslint-disable-next-line no-null/no-null\n const containerRef = useRef(null);\n const { shouldRender, transitionClassNames } = useShowTransition(isOpen, undefined, undefined, false);\n const {\n observe: observeIntersection,\n } = useIntersectionObserver({\n rootRef: containerRef,\n debounceMs: INTERSECTION_DEBOUNCE_MS,\n isDisabled: !isOpen,\n });\n\n const handleLoadMore = useCallback(({ direction }: { direction: LoadMoreDirection }) => {\n if (direction === LoadMoreDirection.Backwards) {\n runThrottled(loadMore);\n }\n }, [loadMore]);\n\n const selectedIndex = useKeyboardNavigation({\n isActive: isOpen,\n shouldRemoveSelectionOnReset: isGallery,\n noArrowNavigation: isGallery,\n items: inlineBotResults,\n onSelect: onSelectResult,\n onClose,\n });\n\n useEffect(() => {\n setTooltipItemVisible('.chat-item-clickable', selectedIndex, containerRef);\n }, [selectedIndex]);\n\n const handleSendPm = useCallback(() => {\n openChat({ id: botId });\n startBot({ botId, param: switchPm!.startParam });\n }, [botId, openChat, startBot, switchPm]);\n\n const prevInlineBotResults = usePrevious(\n inlineBotResults?.length\n ? inlineBotResults\n : undefined,\n shouldRender,\n );\n const renderedInlineBotResults = inlineBotResults && !inlineBotResults.length\n ? prevInlineBotResults\n : inlineBotResults;\n\n if (!shouldRender || !(renderedInlineBotResults?.length || switchPm)) {\n return undefined;\n }\n\n const className = buildClassName(\n 'InlineBotTooltip composer-tooltip',\n IS_TOUCH_ENV ? 'no-scrollbar' : 'custom-scroll',\n isGallery && 'gallery',\n transitionClassNames,\n );\n\n function renderSwitchPm() {\n return (\n \n {switchPm!.text}\n \n );\n }\n\n function renderContent() {\n return renderedInlineBotResults!.map((inlineBotResult, index) => {\n switch (inlineBotResult.type) {\n case 'gif':\n return (\n \n );\n\n case 'photo':\n return (\n \n );\n\n case 'sticker':\n return (\n \n );\n\n case 'video':\n case 'file':\n case 'game':\n return (\n \n );\n case 'article':\n case 'audio':\n return (\n \n );\n\n default:\n return undefined;\n }\n });\n }\n\n return (\n \n {switchPm && renderSwitchPm()}\n {renderedInlineBotResults?.length && renderContent()}\n \n );\n};\n\nexport default memo(InlineBotTooltip);\n","import React, {\n FC, useCallback, useEffect, useRef, memo,\n} from '../../../lib/teact/teact';\n\nimport setTooltipItemVisible from '../../../util/setTooltipItemVisible';\nimport { useKeyboardNavigation } from './hooks/useKeyboardNavigation';\nimport { IS_TOUCH_ENV } from '../../../util/environment';\nimport renderText from '../../common/helpers/renderText';\nimport { getUserFullName, isUserId } from '../../../global/helpers';\nimport useMouseInside from '../../../hooks/useMouseInside';\nimport useLang from '../../../hooks/useLang';\nimport buildClassName from '../../../util/buildClassName';\nimport { getActions, getGlobal } from '../../../global';\n\nimport ListItem from '../../ui/ListItem';\nimport Avatar from '../../common/Avatar';\nimport Menu from '../../ui/Menu';\n\nimport './SendAsMenu.scss';\n\nexport type OwnProps = {\n isOpen: boolean;\n onClose: () => void;\n chatId?: string;\n selectedSendAsId?: string;\n sendAsIds?: string[];\n};\n\nconst SendAsMenu: FC = ({\n isOpen,\n onClose,\n chatId,\n selectedSendAsId,\n sendAsIds,\n}) => {\n const { saveDefaultSendAs } = getActions();\n\n // No need for expensive global updates on users and chats, so we avoid them\n const usersById = getGlobal().users.byId;\n const chatsById = getGlobal().chats.byId;\n\n const lang = useLang();\n // eslint-disable-next-line no-null/no-null\n const containerRef = useRef(null);\n\n const [handleMouseEnter, handleMouseLeave, markMouseInside] = useMouseInside(isOpen, onClose, undefined);\n\n useEffect(() => {\n if (isOpen) {\n markMouseInside();\n }\n }, [isOpen, markMouseInside]);\n\n const handleUserSelect = useCallback((id: string) => {\n onClose();\n saveDefaultSendAs({ chatId, sendAsId: id });\n }, [chatId, onClose, saveDefaultSendAs]);\n\n const selectedSendAsIndex = useKeyboardNavigation({\n isActive: isOpen,\n items: sendAsIds,\n onSelect: handleUserSelect,\n shouldSelectOnTab: true,\n shouldSaveSelectionOnUpdateItems: true,\n onClose,\n });\n\n useEffect(() => {\n setTooltipItemVisible('.chat-item-clickable', selectedSendAsIndex, containerRef);\n }, [selectedSendAsIndex]);\n\n useEffect(() => {\n if (sendAsIds && !sendAsIds.length) {\n onClose();\n }\n }, [sendAsIds, onClose]);\n\n return (\n \n
{lang('SendMessageAsTitle')}
\n {usersById && chatsById && sendAsIds?.map((id, index) => {\n const user = isUserId(id) ? usersById[id] : undefined;\n const chat = !user ? chatsById[id] : undefined;\n const fullName = user ? getUserFullName(user) : chat?.title;\n\n return (\n handleUserSelect(id)}\n focus={selectedSendAsIndex === index}\n >\n \n
\n
\n

{fullName && renderText(fullName)}

\n
\n {user\n ? lang('VoipGroupPersonalAccount')\n : lang('Subscribers', chat?.membersCount, 'i')}\n \n
\n \n );\n })}\n \n );\n};\n\nexport default memo(SendAsMenu);\n","import React, {\n FC, useMemo, memo, useRef,\n} from '../../lib/teact/teact';\nimport { getActions, getGlobal, withGlobal } from '../../global';\n\nimport { ApiMessage, ApiUser, ApiChat } from '../../api/types';\n\nimport { MEMO_EMPTY_ARRAY } from '../../util/memo';\nimport {\n selectUser,\n selectChatMessages,\n selectChat,\n selectCurrentTextSearch,\n} from '../../global/selectors';\nimport {\n getChatTitle,\n getUserFullName,\n isChatChannel,\n} from '../../global/helpers';\nimport useLang from '../../hooks/useLang';\nimport useKeyboardListNavigation from '../../hooks/useKeyboardListNavigation';\nimport useHistoryBack from '../../hooks/useHistoryBack';\nimport useInfiniteScroll from '../../hooks/useInfiniteScroll';\nimport { renderMessageSummary } from '../common/helpers/renderMessageText';\nimport renderText from '../common/helpers/renderText';\n\nimport InfiniteScroll from '../ui/InfiniteScroll';\nimport ListItem from '../ui/ListItem';\nimport LastMessageMeta from '../common/LastMessageMeta';\nimport Avatar from '../common/Avatar';\n\nimport './RightSearch.scss';\n\nexport type OwnProps = {\n chatId: string;\n threadId: number;\n onClose: NoneToVoidFunction;\n isActive: boolean;\n};\n\ntype StateProps = {\n chat?: ApiChat;\n messagesById?: Record;\n query?: string;\n totalCount?: number;\n foundIds?: number[];\n};\n\nconst RightSearch: FC = ({\n chatId,\n threadId,\n onClose,\n isActive,\n chat,\n messagesById,\n query,\n totalCount,\n foundIds,\n}) => {\n const {\n searchTextMessagesLocal,\n focusMessage,\n } = getActions();\n\n // eslint-disable-next-line no-null/no-null\n const containerRef = useRef(null);\n\n const lang = useLang();\n useHistoryBack(isActive, onClose);\n\n const [viewportIds, getMore] = useInfiniteScroll(searchTextMessagesLocal, foundIds);\n\n const viewportResults = useMemo(() => {\n if (!query || !viewportIds?.length || !messagesById) {\n return MEMO_EMPTY_ARRAY;\n }\n\n return viewportIds.map((id) => {\n const message = messagesById[id];\n if (!message) {\n return undefined;\n }\n\n const senderUser = message.senderId ? selectUser(getGlobal(), message.senderId) : undefined;\n\n let senderChat;\n if (chat && isChatChannel(chat)) {\n senderChat = chat;\n } else if (message.forwardInfo) {\n const { isChannelPost, fromChatId } = message.forwardInfo;\n senderChat = isChannelPost && fromChatId ? selectChat(getGlobal(), fromChatId) : undefined;\n } else {\n senderChat = message.senderId ? selectChat(getGlobal(), message.senderId) : undefined;\n }\n\n return {\n message,\n senderUser,\n senderChat,\n onClick: () => focusMessage({ chatId, threadId, messageId: id }),\n };\n }).filter(Boolean);\n }, [query, viewportIds, messagesById, chat, focusMessage, chatId, threadId]);\n\n const handleKeyDown = useKeyboardListNavigation(containerRef, true, (index) => {\n const foundResult = viewportResults?.[index === -1 ? 0 : index];\n if (foundResult) {\n foundResult.onClick();\n }\n }, '.ListItem-button', true);\n\n const renderSearchResult = ({\n message, senderUser, senderChat, onClick,\n }: {\n message: ApiMessage;\n senderUser?: ApiUser;\n senderChat?: ApiChat;\n onClick: NoneToVoidFunction;\n }) => {\n const title = senderChat ? getChatTitle(lang, senderChat) : getUserFullName(senderUser);\n const text = renderMessageSummary(lang, message, undefined, query);\n\n return (\n \n \n
\n
\n

{title && renderText(title)}

\n \n
\n
\n {text}\n
\n
\n \n );\n };\n\n const isOnTop = viewportIds?.[0] === foundIds?.[0];\n\n return (\n \n {isOnTop && (\n

\n {!query ? (\n lang('lng_dlg_search_for_messages')\n ) : (totalCount === 0 || !viewportResults.length) ? (\n lang('lng_search_no_results')\n ) : totalCount === 1 ? (\n '1 message found'\n ) : (\n `${(viewportResults.length && (totalCount || viewportResults.length))} messages found`\n )}\n

\n )}\n {viewportResults.map(renderSearchResult)}\n \n );\n};\n\nexport default memo(withGlobal(\n (global, { chatId }): StateProps => {\n const chat = selectChat(global, chatId);\n const messagesById = chat && selectChatMessages(global, chat.id);\n if (!chat || !messagesById) {\n return {};\n }\n\n const { query, results } = selectCurrentTextSearch(global) || {};\n const { totalCount, foundIds } = results || {};\n\n return {\n chat,\n messagesById,\n query,\n totalCount,\n foundIds,\n };\n },\n)(RightSearch));\n","import React, {\n FC, useEffect, memo, useMemo, useCallback,\n} from '../../lib/teact/teact';\nimport { getActions, withGlobal } from '../../global';\n\nimport { ApiStickerSet } from '../../api/types';\nimport { ObserveFn } from '../../hooks/useIntersectionObserver';\n\nimport { STICKER_SIZE_SEARCH } from '../../config';\nimport { selectShouldLoopStickers, selectStickerSet } from '../../global/selectors';\nimport useFlag from '../../hooks/useFlag';\nimport useOnChange from '../../hooks/useOnChange';\nimport useLang from '../../hooks/useLang';\n\nimport Button from '../ui/Button';\nimport StickerButton from '../common/StickerButton';\nimport StickerSetModal from '../common/StickerSetModal.async';\nimport Spinner from '../ui/Spinner';\n\ntype OwnProps = {\n stickerSetId: string;\n observeIntersection: ObserveFn;\n isSomeModalOpen: boolean;\n onModalToggle: (isOpen: boolean) => void;\n};\n\ntype StateProps = {\n set?: ApiStickerSet;\n shouldPlay?: boolean;\n};\n\nconst STICKERS_TO_DISPLAY = 5;\n\nconst StickerSetResult: FC = ({\n stickerSetId, observeIntersection, set, shouldPlay,\n isSomeModalOpen, onModalToggle,\n}) => {\n const { loadStickers, toggleStickerSet } = getActions();\n\n const lang = useLang();\n const isAdded = set && Boolean(set.installedDate);\n const areStickersLoaded = Boolean(set?.stickers);\n\n const [isModalOpen, openModal, closeModal] = useFlag();\n\n useOnChange(() => {\n onModalToggle(isModalOpen);\n }, [isModalOpen, onModalToggle]);\n\n const displayedStickers = useMemo(() => {\n if (!set) {\n return [];\n }\n\n const coverStickerIds = (set.covers || []).map(({ id }) => id);\n const otherStickers = set.stickers ? set.stickers.filter(({ id }) => !coverStickerIds.includes(id)) : [];\n\n return [...(set.covers || []), ...otherStickers].slice(0, STICKERS_TO_DISPLAY);\n }, [set]);\n\n useEffect(() => {\n // Featured stickers are initialized with one sticker in collection (cover of SickerSet)\n if (!areStickersLoaded && displayedStickers.length < STICKERS_TO_DISPLAY) {\n loadStickers({ stickerSetId });\n }\n }, [areStickersLoaded, displayedStickers.length, loadStickers, stickerSetId]);\n\n const handleAddClick = useCallback(() => {\n toggleStickerSet({ stickerSetId });\n }, [toggleStickerSet, stickerSetId]);\n\n if (!set) {\n return undefined;\n }\n\n const canRenderStickers = displayedStickers.length > 0;\n\n return (\n
\n
\n
\n

{set.title}

\n

{lang('Stickers', set.count, 'i')}

\n
\n \n {lang(isAdded ? 'Stickers.Installed' : 'Stickers.Install')}\n \n
\n
\n {!canRenderStickers && }\n {canRenderStickers && displayedStickers.map((sticker) => (\n \n ))}\n
\n {canRenderStickers && (\n \n )}\n
\n );\n};\n\nexport default memo(withGlobal(\n (global, { stickerSetId }): StateProps => {\n return {\n set: selectStickerSet(global, stickerSetId),\n shouldPlay: selectShouldLoopStickers(global),\n };\n },\n)(StickerSetResult));\n","import React, {\n FC, memo, useEffect, useRef, useState,\n} from '../../lib/teact/teact';\nimport { getActions, withGlobal } from '../../global';\n\nimport { throttle } from '../../util/schedulers';\nimport { selectCurrentStickerSearch } from '../../global/selectors';\nimport { useIntersectionObserver } from '../../hooks/useIntersectionObserver';\nimport useLang from '../../hooks/useLang';\nimport useHistoryBack from '../../hooks/useHistoryBack';\n\nimport Loading from '../ui/Loading';\nimport StickerSetResult from './StickerSetResult';\n\nimport './StickerSearch.scss';\n\ntype OwnProps = {\n onClose: NoneToVoidFunction;\n isActive: boolean;\n};\n\ntype StateProps = {\n query?: string;\n featuredIds?: string[];\n resultIds?: string[];\n};\n\nconst INTERSECTION_THROTTLE = 200;\n\nconst runThrottled = throttle((cb) => cb(), 60000, true);\n\nconst StickerSearch: FC = ({\n onClose,\n isActive,\n query,\n featuredIds,\n resultIds,\n}) => {\n const { loadFeaturedStickers } = getActions();\n\n // eslint-disable-next-line no-null/no-null\n const containerRef = useRef(null);\n\n const lang = useLang();\n\n const [isModalOpen, setIsModalOpen] = useState(false);\n\n const {\n observe: observeIntersection,\n } = useIntersectionObserver({ rootRef: containerRef, throttleMs: INTERSECTION_THROTTLE });\n\n // Due to the parent Transition, this component never gets unmounted,\n // that's why we use throttled API call on every update.\n useEffect(() => {\n runThrottled(() => {\n loadFeaturedStickers();\n });\n });\n\n useHistoryBack(isActive, onClose);\n\n function renderContent() {\n if (query === undefined) {\n return undefined;\n }\n\n if (!query && featuredIds) {\n return featuredIds.map((id) => (\n \n ));\n }\n\n if (resultIds) {\n if (!resultIds.length) {\n return

Nothing found.

;\n }\n\n return resultIds.map((id) => (\n \n ));\n }\n\n return ;\n }\n\n return (\n
\n {renderContent()}\n
\n );\n};\n\nexport default memo(withGlobal(\n (global): StateProps => {\n const currentSearch = selectCurrentStickerSearch(global);\n const { query, resultIds } = currentSearch || {};\n const { featured } = global.stickers;\n\n return {\n query,\n featuredIds: featured.setIds,\n resultIds,\n };\n },\n)(StickerSearch));\n","import React, {\n FC, memo, useRef, useCallback,\n} from '../../lib/teact/teact';\nimport { getActions, withGlobal } from '../../global';\n\nimport { ApiChat, ApiVideo } from '../../api/types';\n\nimport { IS_TOUCH_ENV } from '../../util/environment';\nimport {\n selectCurrentGifSearch,\n selectChat,\n selectIsChatWithBot,\n selectCurrentMessageList,\n selectCanScheduleUntilOnline,\n selectIsChatWithSelf,\n} from '../../global/selectors';\nimport { getAllowedAttachmentOptions, getCanPostInChat } from '../../global/helpers';\nimport buildClassName from '../../util/buildClassName';\nimport { useIntersectionObserver } from '../../hooks/useIntersectionObserver';\nimport useLang from '../../hooks/useLang';\nimport useHistoryBack from '../../hooks/useHistoryBack';\nimport useSchedule from '../../hooks/useSchedule';\n\nimport InfiniteScroll from '../ui/InfiniteScroll';\nimport GifButton from '../common/GifButton';\nimport Loading from '../ui/Loading';\n\nimport './GifSearch.scss';\n\ntype OwnProps = {\n onClose: NoneToVoidFunction;\n isActive: boolean;\n};\n\ntype StateProps = {\n query?: string;\n results?: ApiVideo[];\n chat?: ApiChat;\n isChatWithBot?: boolean;\n canScheduleUntilOnline?: boolean;\n isSavedMessages?: boolean;\n canPostInChat?: boolean;\n};\n\nconst PRELOAD_BACKWARDS = 96; // GIF Search bot results are multiplied by 24\nconst INTERSECTION_DEBOUNCE = 300;\n\nconst GifSearch: FC = ({\n isActive,\n query,\n results,\n chat,\n isChatWithBot,\n canScheduleUntilOnline,\n isSavedMessages,\n canPostInChat,\n onClose,\n}) => {\n const {\n searchMoreGifs,\n sendMessage,\n setGifSearchQuery,\n } = getActions();\n\n // eslint-disable-next-line no-null/no-null\n const containerRef = useRef(null);\n\n const [requestCalendar, calendar] = useSchedule(canScheduleUntilOnline);\n\n const {\n observe: observeIntersection,\n } = useIntersectionObserver({ rootRef: containerRef, debounceMs: INTERSECTION_DEBOUNCE });\n\n const canSendGifs = canPostInChat && getAllowedAttachmentOptions(chat, isChatWithBot).canSendGifs;\n\n const handleGifClick = useCallback((gif: ApiVideo, isSilent?: boolean, shouldSchedule?: boolean) => {\n if (canSendGifs) {\n if (shouldSchedule) {\n requestCalendar((scheduledAt) => {\n sendMessage({ gif, scheduledAt, isSilent });\n });\n } else {\n sendMessage({ gif, isSilent });\n }\n }\n\n if (IS_TOUCH_ENV) {\n setGifSearchQuery({ query: undefined });\n }\n }, [canSendGifs, requestCalendar, sendMessage, setGifSearchQuery]);\n\n const lang = useLang();\n\n useHistoryBack(isActive, onClose);\n\n function renderContent() {\n if (query === undefined) {\n return undefined;\n }\n\n if (!results) {\n return (\n \n );\n }\n\n if (!results.length) {\n return (\n

{lang('NoGIFsFound')}

\n );\n }\n\n return results.map((gif) => (\n \n ));\n }\n\n const hasResults = Boolean(query !== undefined && results && results.length);\n\n return (\n
\n \n {renderContent()}\n \n {calendar}\n
\n );\n};\n\nexport default memo(withGlobal(\n (global): StateProps => {\n const currentSearch = selectCurrentGifSearch(global);\n const { query, results } = currentSearch || {};\n const { chatId, threadId } = selectCurrentMessageList(global) || {};\n const chat = chatId ? selectChat(global, chatId) : undefined;\n const isChatWithBot = chat ? selectIsChatWithBot(global, chat) : undefined;\n const isSavedMessages = Boolean(chatId) && selectIsChatWithSelf(global, chatId);\n const canPostInChat = Boolean(chat) && Boolean(threadId) && getCanPostInChat(chat, threadId);\n\n return {\n query,\n results,\n chat,\n isChatWithBot,\n isSavedMessages,\n canPostInChat,\n canScheduleUntilOnline: Boolean(chatId) && selectCanScheduleUntilOnline(global, chatId),\n };\n },\n)(GifSearch));\n","import React, { FC, memo } from '../../../lib/teact/teact';\n\nimport { ApiChannelStatistics, ApiGroupStatistics, StatisticsOverviewItem } from '../../../api/types';\n\nimport { formatIntegerCompact } from '../../../util/textFormat';\nimport { formatFullDate } from '../../../util/dateFormat';\nimport buildClassName from '../../../util/buildClassName';\nimport useLang from '../../../hooks/useLang';\n\nimport './StatisticsOverview.scss';\n\ntype OverviewCell = {\n name: string;\n title: string;\n isPercentage?: boolean;\n};\n\nconst CHANNEL_OVERVIEW: OverviewCell[][] = [\n [\n { name: 'followers', title: 'ChannelStats.Overview.Followers' },\n { name: 'enabledNotifications', title: 'ChannelStats.Overview.EnabledNotifications', isPercentage: true },\n ],\n [\n { name: 'viewsPerPost', title: 'ChannelStats.Overview.ViewsPerPost' },\n { name: 'sharesPerPost', title: 'ChannelStats.Overview.SharesPerPost' },\n ],\n];\n\nconst GROUP_OVERVIEW: OverviewCell[][] = [\n [\n { name: 'members', title: 'Stats.GroupMembers' },\n { name: 'messages', title: 'Stats.GroupMessages' },\n ],\n [\n { name: 'viewers', title: 'Stats.GroupViewers' },\n { name: 'posters', title: 'Stats.GroupPosters' },\n ],\n];\n\nexport type OwnProps = {\n isGroup?: boolean;\n statistics: ApiChannelStatistics | ApiGroupStatistics;\n};\n\nconst StatisticsOverview: FC = ({ isGroup, statistics }) => {\n const lang = useLang();\n\n const renderOverviewItemValue = ({ change, percentage }: StatisticsOverviewItem) => {\n if (!change) {\n return undefined;\n }\n\n const isChangeNegative = Number(change) < 0;\n\n return (\n \n {isChangeNegative ? `-${formatIntegerCompact(Math.abs(change))}` : `+${formatIntegerCompact(change)}`}\n {percentage && (\n <>\n {' '}\n ({percentage}%)\n \n )}\n \n );\n };\n\n const { period } = (statistics as ApiGroupStatistics);\n\n return (\n
\n
\n
{lang('ChannelStats.Overview')}
\n\n {period && (\n
\n {formatFullDate(lang, period.minDate * 1000)} — {formatFullDate(lang, period.maxDate * 1000)}\n
\n )}\n
\n\n \n {(isGroup ? GROUP_OVERVIEW : CHANNEL_OVERVIEW).map((row) => (\n \n {row.map((cell: OverviewCell) => {\n const field = (statistics as any)[cell.name];\n\n if (cell.isPercentage) {\n return (\n \n );\n }\n\n return (\n \n );\n })}\n \n ))}\n
\n {field.percentage}%\n

{lang(cell.title)}

\n
\n \n {formatIntegerCompact(field.current)}\n \n {' '}\n {renderOverviewItemValue(field)}\n

{lang(cell.title)}

\n
\n
\n );\n};\n\nexport default memo(StatisticsOverview);\n","import React, { FC, memo } from '../../../lib/teact/teact';\n\nimport useLang, { LangFn } from '../../../hooks/useLang';\n\nimport { ApiMessage, StatisticsRecentMessage as StatisticsRecentMessageType } from '../../../api/types';\n\nimport buildClassName from '../../../util/buildClassName';\nimport { formatDateTimeToString } from '../../../util/dateFormat';\nimport {\n getMessageMediaHash,\n getMessageMediaThumbDataUri,\n getMessageVideo,\n getMessageRoundVideo,\n} from '../../../global/helpers';\nimport { renderMessageSummary } from '../../common/helpers/renderMessageText';\nimport useMedia from '../../../hooks/useMedia';\n\nimport './StatisticsRecentMessage.scss';\n\nexport type OwnProps = {\n message: ApiMessage & StatisticsRecentMessageType;\n};\n\nconst StatisticsRecentMessage: FC = ({ message }) => {\n const lang = useLang();\n\n const mediaThumbnail = getMessageMediaThumbDataUri(message);\n const mediaBlobUrl = useMedia(getMessageMediaHash(message, 'micro'));\n const isRoundVideo = Boolean(getMessageRoundVideo(message));\n\n return (\n

\n

\n
\n {renderSummary(lang, message, mediaBlobUrl || mediaThumbnail, isRoundVideo)}\n
\n
\n {lang('ChannelStats.ViewsCount', message.views)}\n
\n
\n\n
\n
\n {formatDateTimeToString(message.date * 1000, lang.code)}\n
\n
\n {message.forwards ? lang('ChannelStats.SharesCount', message.forwards) : 'No shares'}\n
\n
\n

\n );\n};\n\nfunction renderSummary(lang: LangFn, message: ApiMessage, blobUrl?: string, isRoundVideo?: boolean) {\n if (!blobUrl) {\n return renderMessageSummary(lang, message);\n }\n\n return (\n \n \"\"\n {getMessageVideo(message) && }\n {renderMessageSummary(lang, message, true)}\n \n );\n}\n\nexport default memo(StatisticsRecentMessage);\n","import React, {\n FC, memo, useState, useEffect, useRef, useMemo,\n} from '../../../lib/teact/teact';\nimport { getActions, withGlobal } from '../../../global';\n\nimport { callApi } from '../../../api/gramjs';\nimport {\n ApiMessage,\n ApiChannelStatistics,\n ApiGroupStatistics,\n StatisticsRecentMessage as StatisticsRecentMessageType,\n} from '../../../api/types';\nimport { selectChat, selectStatistics } from '../../../global/selectors';\n\nimport buildClassName from '../../../util/buildClassName';\nimport useLang from '../../../hooks/useLang';\n\nimport Loading from '../../ui/Loading';\nimport StatisticsOverview from './StatisticsOverview';\nimport StatisticsRecentMessage from './StatisticsRecentMessage';\n\nimport './Statistics.scss';\n\ntype ILovelyChart = { create: Function };\nlet lovelyChartPromise: Promise;\nlet LovelyChart: ILovelyChart;\n\nasync function ensureLovelyChart() {\n if (!lovelyChartPromise) {\n lovelyChartPromise = import('../../../lib/lovely-chart/LovelyChart') as Promise;\n LovelyChart = await lovelyChartPromise;\n }\n\n return lovelyChartPromise;\n}\n\nconst CHANNEL_GRAPHS_TITLES = {\n growthGraph: 'ChannelStats.Graph.Growth',\n followersGraph: 'ChannelStats.Graph.Followers',\n muteGraph: 'ChannelStats.Graph.Notifications',\n topHoursGraph: 'ChannelStats.Graph.ViewsByHours',\n viewsBySourceGraph: 'ChannelStats.Graph.ViewsBySource',\n newFollowersBySourceGraph: 'ChannelStats.Graph.NewFollowersBySource',\n languagesGraph: 'ChannelStats.Graph.Language',\n interactionsGraph: 'ChannelStats.Graph.Interactions',\n};\nconst CHANNEL_GRAPHS = Object.keys(CHANNEL_GRAPHS_TITLES) as (keyof ApiChannelStatistics)[];\n\nconst GROUP_GRAPHS_TITLES = {\n growthGraph: 'Stats.GroupGrowthTitle',\n membersGraph: 'Stats.GroupMembersTitle',\n languagesGraph: 'Stats.GroupLanguagesTitle',\n messagesGraph: 'Stats.GroupMessagesTitle',\n actionsGraph: 'Stats.GroupActionsTitle',\n topHoursGraph: 'Stats.GroupTopHoursTitle',\n};\nconst GROUP_GRAPHS = Object.keys(GROUP_GRAPHS_TITLES) as (keyof ApiGroupStatistics)[];\n\nexport type OwnProps = {\n chatId: string;\n isActive: boolean;\n};\n\nexport type StateProps = {\n statistics: ApiChannelStatistics | ApiGroupStatistics;\n dcId?: number;\n isGroup: boolean;\n};\n\nconst Statistics: FC = ({\n chatId,\n isActive,\n statistics,\n dcId,\n isGroup,\n}) => {\n const lang = useLang();\n // eslint-disable-next-line no-null/no-null\n const containerRef = useRef(null);\n const [isReady, setIsReady] = useState(false);\n const loadedCharts = useRef([]);\n\n const { loadStatistics, loadStatisticsAsyncGraph } = getActions();\n\n useEffect(() => {\n loadStatistics({ chatId, isGroup });\n }, [chatId, loadStatistics, isGroup]);\n\n useEffect(() => {\n if (!isActive) {\n loadedCharts.current = [];\n }\n }, [isActive]);\n\n const graphs = useMemo(() => {\n return isGroup ? GROUP_GRAPHS : CHANNEL_GRAPHS;\n }, [isGroup]);\n\n const graphTitles = useMemo(() => {\n return isGroup ? GROUP_GRAPHS_TITLES : CHANNEL_GRAPHS_TITLES;\n }, [isGroup]);\n\n // Load async graphs\n useEffect(() => {\n if (!statistics) {\n return;\n }\n\n graphs.forEach((name) => {\n const graph = statistics[name as keyof typeof statistics];\n const isAsync = typeof graph === 'string';\n\n if (isAsync) {\n loadStatisticsAsyncGraph({\n name,\n chatId,\n token: graph,\n // Hardcode percentage for languages graph, since API does not return `percentage` flag\n isPercentage: name === 'languagesGraph',\n });\n }\n });\n }, [graphs, chatId, statistics, loadStatisticsAsyncGraph]);\n\n useEffect(() => {\n (async () => {\n await ensureLovelyChart();\n\n if (!isReady) {\n setIsReady(true);\n return;\n }\n\n if (!statistics) {\n return;\n }\n\n graphs.forEach((name, index: number) => {\n const graph = statistics[name as keyof typeof statistics];\n const isAsync = typeof graph === 'string';\n\n if (isAsync || loadedCharts.current.includes(name)) {\n return;\n }\n\n const { zoomToken } = graph;\n\n LovelyChart.create(\n containerRef.current!.children[index],\n {\n title: lang((graphTitles as Record)[name]),\n ...zoomToken && {\n onZoom: (x: number) => callApi('fetchStatisticsAsyncGraph', { token: zoomToken, x, dcId }),\n zoomOutLabel: lang('Graph.ZoomOut'),\n },\n ...graph,\n },\n );\n\n loadedCharts.current.push(name);\n });\n })();\n }, [graphs, graphTitles, isReady, statistics, lang, chatId, loadStatisticsAsyncGraph, dcId]);\n\n if (!isReady || !statistics) {\n return ;\n }\n\n return (\n
\n \n\n {!loadedCharts.current.length && }\n\n
\n {graphs.map((graph) => (\n
\n ))}\n
\n\n {Boolean((statistics as ApiChannelStatistics).recentTopMessages?.length) && (\n
\n

{lang('ChannelStats.Recent.Header')}

\n\n {(statistics as ApiChannelStatistics).recentTopMessages.map((message) => (\n \n ))}\n
\n )}\n
\n );\n};\n\nexport default memo(withGlobal(\n (global, { chatId }): StateProps => {\n const statistics = selectStatistics(global, chatId);\n const chat = selectChat(global, chatId);\n const dcId = chat?.fullInfo?.statisticsDcId;\n const isGroup = chat?.type === 'chatTypeSuperGroup';\n\n return { statistics, dcId, isGroup };\n },\n)(Statistics));\n","import React, {\n FC, useCallback, useState, memo, useEffect,\n} from '../../lib/teact/teact';\nimport { getActions, withGlobal } from '../../global';\n\nimport {\n ApiChat,\n ApiMessage,\n ApiPollAnswer,\n ApiPollResult,\n} from '../../api/types';\nimport usePrevious from '../../hooks/usePrevious';\nimport useLang from '../../hooks/useLang';\n\nimport ShowMoreButton from '../ui/ShowMoreButton';\nimport Loading from '../ui/Loading';\nimport ListItem from '../ui/ListItem';\nimport PrivateChatInfo from '../common/PrivateChatInfo';\n\nimport './PollAnswerResults.scss';\n\ntype OwnProps = {\n chat: ApiChat;\n message: ApiMessage;\n answer: ApiPollAnswer;\n answerVote: ApiPollResult;\n totalVoters: number;\n};\n\ntype StateProps = {\n voters?: string[];\n offset: string;\n};\n\nconst INITIAL_LIMIT = 4;\nconst VIEW_MORE_LIMIT = 50;\n\nconst PollAnswerResults: FC = ({\n chat,\n message,\n answer,\n answerVote,\n totalVoters,\n voters,\n offset,\n}) => {\n const {\n loadPollOptionResults,\n openChat,\n closePollResults,\n } = getActions();\n\n const prevVotersCount = usePrevious(answerVote.votersCount);\n const [isLoading, setIsLoading] = useState(true);\n const areVotersLoaded = Boolean(voters);\n const { option, text } = answer;\n const lang = useLang();\n\n useEffect(() => {\n // For update when new votes arrive or when the user takes back his vote\n if (!areVotersLoaded || prevVotersCount !== answerVote.votersCount) {\n loadPollOptionResults({\n chat, messageId: message.id, option, offset, limit: INITIAL_LIMIT, shouldResetVoters: true,\n });\n }\n // eslint-disable-next-line\n }, [answerVote.votersCount, areVotersLoaded]);\n\n const handleViewMoreClick = useCallback(() => {\n setIsLoading(true);\n loadPollOptionResults({\n chat, messageId: message.id, option, offset, limit: VIEW_MORE_LIMIT,\n });\n }, [chat, loadPollOptionResults, message.id, offset, option]);\n\n useEffect(() => {\n setIsLoading(false);\n }, [voters]);\n\n const handleMemberClick = useCallback((id: string) => {\n openChat({ id });\n closePollResults();\n }, [closePollResults, openChat]);\n\n function renderViewMoreButton() {\n const leftVotersCount = answerVote.votersCount - voters!.length;\n\n return answerVote.votersCount > INITIAL_LIMIT && leftVotersCount > 0 && (\n \n );\n }\n\n return (\n
\n
\n {voters\n ? voters.map((id) => (\n handleMemberClick(id)}\n >\n \n \n ))\n : }\n {voters && renderViewMoreButton()}\n
\n
\n {text}\n \n {getPercentage(answerVote.votersCount, totalVoters)}%\n \n
\n
\n );\n};\n\nfunction getPercentage(value: number, total: number) {\n return total > 0 ? ((value / total) * 100).toFixed() : 0;\n}\n\nexport default memo(withGlobal(\n (global, { answer }: OwnProps): StateProps => {\n const { voters, offsets } = global.pollResults;\n\n return {\n voters: voters?.[answer.option],\n offset: (offsets?.[answer.option]) || '',\n };\n },\n)(PollAnswerResults));\n","import React, { FC, memo } from '../../lib/teact/teact';\nimport { withGlobal } from '../../global';\n\nimport { ApiMessage, ApiChat } from '../../api/types';\nimport { selectChat, selectChatMessage } from '../../global/selectors';\nimport { buildCollectionByKey } from '../../util/iteratees';\nimport { getMessagePoll } from '../../global/helpers';\nimport renderText from '../common/helpers/renderText';\nimport useLang from '../../hooks/useLang';\nimport useHistoryBack from '../../hooks/useHistoryBack';\n\nimport PollAnswerResults from './PollAnswerResults';\nimport Loading from '../ui/Loading';\n\nimport './PollResults.scss';\n\ntype OwnProps = {\n onClose: NoneToVoidFunction;\n isActive: boolean;\n};\n\ntype StateProps = {\n chat?: ApiChat;\n message?: ApiMessage;\n lastSyncTime?: number;\n};\n\nconst PollResults: FC = ({\n onClose,\n isActive,\n chat,\n message,\n lastSyncTime,\n}) => {\n const lang = useLang();\n useHistoryBack(isActive, onClose);\n\n if (!message || !chat) {\n return ;\n }\n\n const { summary, results } = getMessagePoll(message)!;\n if (!results.results) {\n return undefined;\n }\n\n const resultsByOption = buildCollectionByKey(results.results, 'option');\n\n return (\n
\n

{renderText(summary.question, ['emoji', 'br'])}

\n
\n {lastSyncTime && summary.answers.map((answer) => (\n \n ))}\n {!lastSyncTime && }\n
\n
\n );\n};\n\nexport default memo(withGlobal(\n (global): StateProps => {\n const {\n pollResults: { chatId, messageId },\n lastSyncTime,\n } = global;\n\n if (!chatId || !messageId) {\n return {};\n }\n\n const chat = selectChat(global, chatId);\n const message = selectChatMessage(global, chatId, messageId);\n\n return {\n chat,\n message,\n lastSyncTime,\n };\n },\n)(PollResults));\n","import { ChangeEvent } from 'react';\nimport React, {\n FC, memo, useCallback, useEffect, useState,\n} from '../../../lib/teact/teact';\nimport { getActions, withGlobal } from '../../../global';\n\nimport { ApiUser } from '../../../api/types';\nimport { ManagementProgress } from '../../../types';\n\nimport {\n selectChat, selectNotifyExceptions, selectNotifySettings, selectUser,\n} from '../../../global/selectors';\nimport { selectIsChatMuted } from '../../../global/helpers';\nimport useFlag from '../../../hooks/useFlag';\nimport useLang from '../../../hooks/useLang';\nimport useHistoryBack from '../../../hooks/useHistoryBack';\n\nimport InputText from '../../ui/InputText';\nimport ListItem from '../../ui/ListItem';\nimport Checkbox from '../../ui/Checkbox';\nimport FloatingActionButton from '../../ui/FloatingActionButton';\nimport Spinner from '../../ui/Spinner';\nimport PrivateChatInfo from '../../common/PrivateChatInfo';\nimport ConfirmDialog from '../../ui/ConfirmDialog';\n\nimport './Management.scss';\n\ntype OwnProps = {\n userId: string;\n onClose: NoneToVoidFunction;\n isActive: boolean;\n};\n\ntype StateProps = {\n user?: ApiUser;\n progress?: ManagementProgress;\n isMuted?: boolean;\n};\n\nconst ERROR_FIRST_NAME_MISSING = 'Please provide first name';\n\nconst ManageUser: FC = ({\n userId,\n user,\n progress,\n isMuted,\n onClose,\n isActive,\n}) => {\n const {\n updateContact,\n deleteContact,\n closeManagement,\n } = getActions();\n\n const [isDeleteDialogOpen, openDeleteDialog, closeDeleteDialog] = useFlag();\n const [isProfileFieldsTouched, setIsProfileFieldsTouched] = useState(false);\n const [error, setError] = useState();\n const lang = useLang();\n\n useHistoryBack(isActive, onClose);\n\n const currentFirstName = user ? (user.firstName || '') : '';\n const currentLastName = user ? (user.lastName || '') : '';\n\n const [firstName, setFirstName] = useState(currentFirstName);\n const [lastName, setLastName] = useState(currentLastName);\n const [isNotificationsEnabled, setIsNotificationsEnabled] = useState(!isMuted);\n\n useEffect(() => {\n setIsNotificationsEnabled(!isMuted);\n }, [isMuted]);\n\n useEffect(() => {\n setIsProfileFieldsTouched(false);\n closeDeleteDialog();\n }, [closeDeleteDialog, userId]);\n\n useEffect(() => {\n setFirstName(currentFirstName);\n setLastName(currentLastName);\n }, [currentFirstName, currentLastName, user]);\n\n useEffect(() => {\n if (progress === ManagementProgress.Complete) {\n setIsProfileFieldsTouched(false);\n setError(undefined);\n closeDeleteDialog();\n }\n }, [closeDeleteDialog, progress]);\n\n const handleFirstNameChange = useCallback((e: ChangeEvent) => {\n setFirstName(e.target.value);\n setIsProfileFieldsTouched(true);\n }, []);\n\n const handleLastNameChange = useCallback((e: ChangeEvent) => {\n setLastName(e.target.value);\n setIsProfileFieldsTouched(true);\n }, []);\n\n const handleNotificationChange = useCallback((e: ChangeEvent) => {\n setIsNotificationsEnabled(e.target.checked);\n setIsProfileFieldsTouched(true);\n }, []);\n\n const handleProfileSave = useCallback(() => {\n const trimmedFirstName = firstName.trim();\n const trimmedLastName = lastName.trim();\n\n if (!trimmedFirstName.length) {\n setError(ERROR_FIRST_NAME_MISSING);\n }\n\n updateContact({\n userId,\n isMuted: !isNotificationsEnabled,\n firstName: trimmedFirstName,\n lastName: trimmedLastName,\n });\n }, [firstName, lastName, updateContact, userId, isNotificationsEnabled]);\n\n const handleDeleteContact = useCallback(() => {\n deleteContact({ userId });\n closeDeleteDialog();\n closeManagement();\n }, [closeDeleteDialog, closeManagement, deleteContact, userId]);\n\n if (!user) {\n return undefined;\n }\n\n const isLoading = progress === ManagementProgress.InProgress;\n\n return (\n
\n
\n
\n \n \n \n
\n \n
\n
\n
\n \n {lang('DeleteContact')}\n \n
\n
\n \n {isLoading ? (\n \n ) : (\n \n )}\n \n \n
\n );\n};\n\nexport default memo(withGlobal(\n (global, { userId }): StateProps => {\n const user = selectUser(global, userId);\n const chat = selectChat(global, userId)!;\n const { progress } = global.management;\n const isMuted = selectIsChatMuted(chat, selectNotifySettings(global), selectNotifyExceptions(global));\n\n return {\n user, progress, isMuted,\n };\n },\n)(ManageUser));\n","import { ChangeEvent } from 'react';\nimport React, {\n FC, memo, useCallback, useEffect, useMemo, useState,\n} from '../../../lib/teact/teact';\nimport { getActions, withGlobal } from '../../../global';\n\nimport { ManagementScreens, ManagementProgress } from '../../../types';\nimport {\n ApiChat, ApiChatBannedRights, ApiExportedInvite, ApiMediaFormat,\n} from '../../../api/types';\n\nimport { getChatAvatarHash, getHasAdminRight, isChatBasicGroup } from '../../../global/helpers';\nimport useMedia from '../../../hooks/useMedia';\nimport useLang from '../../../hooks/useLang';\nimport useFlag from '../../../hooks/useFlag';\nimport { selectChat } from '../../../global/selectors';\nimport { formatInteger } from '../../../util/textFormat';\nimport renderText from '../../common/helpers/renderText';\nimport useHistoryBack from '../../../hooks/useHistoryBack';\n\nimport AvatarEditable from '../../ui/AvatarEditable';\nimport InputText from '../../ui/InputText';\nimport ListItem from '../../ui/ListItem';\nimport Checkbox from '../../ui/Checkbox';\nimport Spinner from '../../ui/Spinner';\nimport FloatingActionButton from '../../ui/FloatingActionButton';\nimport ConfirmDialog from '../../ui/ConfirmDialog';\n\nimport './Management.scss';\n\ntype OwnProps = {\n chatId: string;\n onScreenSelect: (screen: ManagementScreens) => void;\n onClose: NoneToVoidFunction;\n isActive: boolean;\n};\n\ntype StateProps = {\n chat: ApiChat;\n progress?: ManagementProgress;\n isBasicGroup: boolean;\n hasLinkedChannel: boolean;\n canChangeInfo?: boolean;\n canBanUsers?: boolean;\n canInvite?: boolean;\n exportedInvites?: ApiExportedInvite[];\n lastSyncTime?: number;\n availableReactionsCount?: number;\n};\n\nconst GROUP_TITLE_EMPTY = 'Group title can\\'t be empty';\n\n// Some checkboxes control multiple rights, and some rights are not controlled from Permissions screen,\n// so we need to define the amount manually\nconst TOTAL_PERMISSIONS_COUNT = 8;\n\nconst ManageGroup: FC = ({\n chatId,\n chat,\n progress,\n isBasicGroup,\n hasLinkedChannel,\n canChangeInfo,\n canBanUsers,\n canInvite,\n onScreenSelect,\n onClose,\n isActive,\n exportedInvites,\n lastSyncTime,\n availableReactionsCount,\n}) => {\n const {\n togglePreHistoryHidden,\n updateChat,\n deleteChat,\n leaveChannel,\n deleteChannel,\n closeManagement,\n openChat,\n loadExportedChatInvites,\n loadChatJoinRequests,\n } = getActions();\n\n const [isDeleteDialogOpen, openDeleteDialog, closeDeleteDialog] = useFlag();\n const currentTitle = chat.title;\n const currentAbout = chat.fullInfo ? (chat.fullInfo.about || '') : '';\n\n const [isProfileFieldsTouched, setIsProfileFieldsTouched] = useState(false);\n const [title, setTitle] = useState(currentTitle || '');\n const [about, setAbout] = useState(currentAbout);\n const [photo, setPhoto] = useState();\n const [error, setError] = useState();\n const imageHash = getChatAvatarHash(chat);\n const currentAvatarBlobUrl = useMedia(imageHash, false, ApiMediaFormat.BlobUrl);\n const isPublicGroup = chat.username || hasLinkedChannel;\n const lang = useLang();\n\n useHistoryBack(isActive, onClose);\n\n useEffect(() => {\n if (lastSyncTime && canInvite) {\n loadExportedChatInvites({ chatId });\n loadExportedChatInvites({ chatId, isRevoked: true });\n loadChatJoinRequests({ chatId });\n }\n }, [chatId, loadExportedChatInvites, lastSyncTime, canInvite, loadChatJoinRequests]);\n\n useEffect(() => {\n if (progress === ManagementProgress.Complete) {\n setIsProfileFieldsTouched(false);\n setError(undefined);\n }\n }, [progress]);\n\n const handleClickEditType = useCallback(() => {\n onScreenSelect(ManagementScreens.ChatPrivacyType);\n }, [onScreenSelect]);\n\n const handleClickDiscussion = useCallback(() => {\n onScreenSelect(ManagementScreens.Discussion);\n }, [onScreenSelect]);\n\n const handleClickReactions = useCallback(() => {\n onScreenSelect(ManagementScreens.Reactions);\n }, [onScreenSelect]);\n\n const handleClickPermissions = useCallback(() => {\n onScreenSelect(ManagementScreens.GroupPermissions);\n }, [onScreenSelect]);\n\n const handleClickAdministrators = useCallback(() => {\n onScreenSelect(ManagementScreens.ChatAdministrators);\n }, [onScreenSelect]);\n\n const handleClickInvites = useCallback(() => {\n onScreenSelect(ManagementScreens.Invites);\n }, [onScreenSelect]);\n\n const handleClickRequests = useCallback(() => {\n onScreenSelect(ManagementScreens.JoinRequests);\n }, [onScreenSelect]);\n\n const handleSetPhoto = useCallback((file: File) => {\n setPhoto(file);\n setIsProfileFieldsTouched(true);\n }, []);\n\n const handleTitleChange = useCallback((e: ChangeEvent) => {\n setTitle(e.target.value);\n setIsProfileFieldsTouched(true);\n }, []);\n\n const handleAboutChange = useCallback((e: ChangeEvent) => {\n setAbout(e.target.value);\n setIsProfileFieldsTouched(true);\n }, []);\n\n const handleUpdateGroup = useCallback(() => {\n const trimmedTitle = title.trim();\n const trimmedAbout = about.trim();\n\n if (!trimmedTitle.length) {\n setError(GROUP_TITLE_EMPTY);\n return;\n }\n\n updateChat({\n chatId,\n title: trimmedTitle,\n about: trimmedAbout,\n photo,\n });\n }, [about, chatId, photo, title, updateChat]);\n\n const handleClickMembers = useCallback(() => {\n onScreenSelect(ManagementScreens.GroupMembers);\n }, [onScreenSelect]);\n\n const handleTogglePreHistory = useCallback(() => {\n if (!chat.fullInfo) {\n return;\n }\n\n const { isPreHistoryHidden } = chat.fullInfo;\n\n togglePreHistoryHidden({ chatId: chat.id, isEnabled: !isPreHistoryHidden });\n }, [chat, togglePreHistoryHidden]);\n\n const enabledReactionsCount = chat.fullInfo?.enabledReactions?.length || 0;\n\n const enabledPermissionsCount = useMemo(() => {\n if (!chat.defaultBannedRights) {\n return 0;\n }\n\n let totalCount = [\n 'sendMessages',\n 'sendMedia',\n 'embedLinks',\n 'sendPolls',\n 'changeInfo',\n 'inviteUsers',\n 'pinMessages',\n ].filter(\n (key) => !chat.defaultBannedRights![key as keyof ApiChatBannedRights],\n ).length;\n\n const { sendStickers, sendGifs } = chat.defaultBannedRights;\n\n // These two rights are controlled with a single checkbox\n if (!sendStickers && !sendGifs) {\n totalCount += 1;\n }\n\n return totalCount;\n }, [chat]);\n\n const adminsCount = (chat.fullInfo?.adminMembers?.length) || 0;\n\n const handleDeleteGroup = useCallback(() => {\n if (isBasicGroup) {\n deleteChat({ chatId: chat.id });\n } else if (!chat.isCreator) {\n leaveChannel({ chatId: chat.id });\n } else {\n deleteChannel({ chatId: chat.id });\n }\n closeDeleteDialog();\n closeManagement();\n openChat({ id: undefined });\n }, [\n isBasicGroup, chat.isCreator, chat.id,\n closeDeleteDialog, closeManagement, leaveChannel, deleteChannel, deleteChat, openChat,\n ]);\n\n if (chat.isRestricted) {\n return undefined;\n }\n\n const isLoading = progress === ManagementProgress.InProgress;\n\n return (\n
\n
\n
\n \n \n \n {chat.isCreator && (\n \n {lang('GroupType')}\n {chat.username ? lang('TypePublic') : lang('TypePrivate')}\n \n )}\n {hasLinkedChannel && (\n \n {lang('LinkedChannel')}\n {lang('DiscussionUnlink')}\n \n )}\n \n {lang('ChannelPermissions')}\n \n {enabledPermissionsCount}/{TOTAL_PERMISSIONS_COUNT}\n \n \n\n \n {lang('Reactions')}\n \n {enabledReactionsCount}/{availableReactionsCount}\n \n \n \n {lang('ChannelAdministrators')}\n {formatInteger(adminsCount)}\n \n {canInvite && (\n \n {lang('GroupInfo.InviteLinks')}\n \n {exportedInvites ? formatInteger(exportedInvites.length) : lang('Loading')}\n \n \n )}\n {Boolean(chat.joinRequests?.length) && (\n \n {lang('MemberRequests')}\n \n {formatInteger(chat.joinRequests!.length)}\n \n \n )}\n
\n
\n \n {lang('GroupMembers')}\n {formatInteger(chat.membersCount ?? 0)}\n \n\n {!isPublicGroup && chat.fullInfo && (\n
\n \n
\n )}\n
\n
\n \n {lang('DeleteMega')}\n \n
\n
\n \n {isLoading ? (\n \n ) : (\n \n )}\n \n \n
\n );\n};\n\nexport default memo(withGlobal(\n (global, { chatId }): StateProps => {\n const chat = selectChat(global, chatId)!;\n const { progress } = global.management;\n const hasLinkedChannel = Boolean(chat.fullInfo?.linkedChatId);\n const isBasicGroup = isChatBasicGroup(chat);\n const { invites } = global.management.byChatId[chatId] || {};\n\n return {\n chat,\n progress,\n isBasicGroup,\n hasLinkedChannel,\n canChangeInfo: isBasicGroup ? chat.isCreator : getHasAdminRight(chat, 'changeInfo'),\n canBanUsers: isBasicGroup ? chat.isCreator : getHasAdminRight(chat, 'banUsers'),\n canInvite: isBasicGroup ? chat.isCreator : getHasAdminRight(chat, 'inviteUsers'),\n exportedInvites: invites,\n lastSyncTime: global.lastSyncTime,\n availableReactionsCount: global.availableReactions?.filter((l) => !l.isInactive).length,\n };\n },\n)(ManageGroup));\n","import React, {\n FC, memo, useCallback, useEffect, useMemo, useState,\n} from '../../../lib/teact/teact';\nimport { getActions, withGlobal } from '../../../global';\n\nimport { ManagementScreens } from '../../../types';\nimport { ApiChat, ApiChatBannedRights, ApiChatMember } from '../../../api/types';\n\nimport useLang from '../../../hooks/useLang';\nimport { selectChat } from '../../../global/selectors';\nimport useHistoryBack from '../../../hooks/useHistoryBack';\n\nimport ListItem from '../../ui/ListItem';\nimport Checkbox from '../../ui/Checkbox';\nimport FloatingActionButton from '../../ui/FloatingActionButton';\nimport Spinner from '../../ui/Spinner';\nimport PrivateChatInfo from '../../common/PrivateChatInfo';\n\ntype OwnProps = {\n chatId: string;\n onScreenSelect: (screen: ManagementScreens) => void;\n onChatMemberSelect: (memberId: string, isPromotedByCurrentUser?: boolean) => void;\n onClose: NoneToVoidFunction;\n isActive: boolean;\n};\n\ntype StateProps = {\n chat?: ApiChat;\n currentUserId?: string;\n};\n\nconst FLOATING_BUTTON_ANIMATION_TIMEOUT_MS = 250;\n\nfunction getLangKeyForBannedRightKey(key: string) {\n switch (key) {\n case 'sendMessages':\n return 'UserRestrictionsNoSend';\n case 'sendMedia':\n return 'UserRestrictionsNoSendMedia';\n case 'sendStickers':\n return 'UserRestrictionsNoSendStickers';\n case 'embedLinks':\n return 'UserRestrictionsNoEmbedLinks';\n case 'sendPolls':\n return 'UserRestrictionsNoSendPolls';\n case 'changeInfo':\n return 'UserRestrictionsNoChangeInfo';\n case 'inviteUsers':\n return 'UserRestrictionsInviteUsers';\n case 'pinMessages':\n return 'UserRestrictionsPinMessages';\n default:\n return undefined;\n }\n}\n\nconst ManageGroupPermissions: FC = ({\n onScreenSelect,\n onChatMemberSelect,\n chat,\n currentUserId,\n onClose,\n isActive,\n}) => {\n const { updateChatDefaultBannedRights } = getActions();\n\n const [permissions, setPermissions] = useState({});\n const [havePermissionChanged, setHavePermissionChanged] = useState(false);\n const [isLoading, setIsLoading] = useState(false);\n const lang = useLang();\n\n useHistoryBack(isActive, onClose);\n\n const handleRemovedUsersClick = useCallback(() => {\n onScreenSelect(ManagementScreens.GroupRemovedUsers);\n }, [onScreenSelect]);\n\n const handleAddExceptionClick = useCallback(() => {\n onScreenSelect(ManagementScreens.GroupUserPermissionsCreate);\n }, [onScreenSelect]);\n\n const handleExceptionMemberClick = useCallback((member: ApiChatMember) => {\n onChatMemberSelect(member.userId, member.promotedByUserId === currentUserId);\n onScreenSelect(ManagementScreens.GroupUserPermissions);\n }, [currentUserId, onChatMemberSelect, onScreenSelect]);\n\n useEffect(() => {\n setPermissions((chat?.defaultBannedRights) || {});\n setHavePermissionChanged(false);\n setTimeout(() => {\n setIsLoading(false);\n }, FLOATING_BUTTON_ANIMATION_TIMEOUT_MS);\n }, [chat]);\n\n const handlePermissionChange = useCallback((e: React.ChangeEvent) => {\n const { name } = e.target;\n\n function getUpdatedPermissionValue(value: true | undefined) {\n return value ? undefined : true;\n }\n\n setPermissions((p) => ({\n ...p,\n [name]: getUpdatedPermissionValue(p[name as Exclude]),\n ...(name === 'sendStickers' && {\n sendGifs: getUpdatedPermissionValue(p[name]),\n }),\n }));\n setHavePermissionChanged(true);\n }, []);\n\n const handleSavePermissions = useCallback(() => {\n if (!chat) {\n return;\n }\n\n setIsLoading(true);\n updateChatDefaultBannedRights({ chatId: chat.id, bannedRights: permissions });\n }, [chat, permissions, updateChatDefaultBannedRights]);\n\n const removedUsersCount = useMemo(() => {\n if (!chat || !chat.fullInfo || !chat.fullInfo.kickedMembers) {\n return 0;\n }\n\n return chat.fullInfo.kickedMembers.length;\n }, [chat]);\n\n const exceptionMembers = useMemo(() => {\n if (!chat || !chat.fullInfo || !chat.fullInfo.members) {\n return [];\n }\n\n return chat.fullInfo.members.filter(({ bannedRights }) => Boolean(bannedRights));\n }, [chat]);\n\n const getMemberExceptions = useCallback((member: ApiChatMember) => {\n const { bannedRights } = member;\n if (!bannedRights || !chat) {\n return undefined;\n }\n\n const { defaultBannedRights } = chat;\n\n return Object.keys(bannedRights).reduce((result, key) => {\n if (\n !bannedRights[key as keyof ApiChatBannedRights]\n || (defaultBannedRights?.[key as keyof ApiChatBannedRights])\n || key === 'sendInline' || key === 'viewMessages' || key === 'sendGames'\n ) {\n return result;\n }\n\n const langKey = getLangKeyForBannedRightKey(key);\n\n if (!langKey) {\n return result;\n }\n\n const translatedString = lang(langKey);\n\n return `${result}${!result.length ? translatedString : `, ${translatedString}`}`;\n }, '');\n }, [chat, lang]);\n\n return (\n
\n
\n
\n

{lang('ChannelPermissionsHeader')}

\n\n
\n \n
\n
\n \n
\n
\n \n
\n
\n \n
\n
\n \n
\n
\n \n
\n
\n \n
\n
\n \n
\n
\n\n
\n \n {lang('ChannelBlockedUsers')}\n {removedUsersCount}\n \n
\n\n
\n

{lang('PrivacyExceptions')}

\n\n \n {lang('ChannelAddException')}\n \n\n {exceptionMembers.map((member) => (\n handleExceptionMemberClick(member)}\n >\n \n \n ))}\n
\n
\n\n \n {isLoading ? (\n \n ) : (\n \n )}\n \n
\n );\n};\n\nexport default memo(withGlobal(\n (global, { chatId }): StateProps => {\n const chat = selectChat(global, chatId);\n\n return { chat, currentUserId: global.currentUserId };\n },\n)(ManageGroupPermissions));\n","import React, {\n FC, useMemo, useState, memo, useRef, useCallback,\n} from '../../../lib/teact/teact';\nimport { getActions, getGlobal, withGlobal } from '../../../global';\n\nimport { ApiChat } from '../../../api/types';\n\nimport { filterUsersByName } from '../../../global/helpers';\nimport useLang from '../../../hooks/useLang';\n\nimport ChatOrUserPicker from '../../common/ChatOrUserPicker';\n\nexport type OwnProps = {\n chat: ApiChat;\n isOpen: boolean;\n onClose: NoneToVoidFunction;\n};\n\ntype StateProps = {\n currentUserId?: string;\n};\n\nconst RemoveGroupUserModal: FC = ({\n chat,\n currentUserId,\n isOpen,\n onClose,\n}) => {\n const {\n loadMoreMembers,\n deleteChatMember,\n } = getActions();\n\n const lang = useLang();\n const [filter, setFilter] = useState('');\n // eslint-disable-next-line no-null/no-null\n const filterRef = useRef(null);\n\n const usersId = useMemo(() => {\n const availableMemberIds = (chat.fullInfo?.members || [])\n .reduce((acc: string[], member) => {\n if (!member.isAdmin && !member.isOwner && member.userId !== currentUserId) {\n acc.push(member.userId);\n }\n return acc;\n }, []);\n\n // No need for expensive global updates on users, so we avoid them\n const usersById = getGlobal().users.byId;\n\n return filterUsersByName(availableMemberIds, usersById, filter);\n }, [chat.fullInfo?.members, currentUserId, filter]);\n\n const handleRemoveUser = useCallback((userId: string) => {\n deleteChatMember({ chatId: chat.id, userId });\n onClose();\n }, [chat.id, deleteChatMember, onClose]);\n\n return (\n \n );\n};\n\nexport default memo(withGlobal(\n (global): StateProps => {\n const { currentUserId } = global;\n\n return { currentUserId };\n },\n)(RemoveGroupUserModal));\n","import React, {\n FC, memo, useCallback, useMemo,\n} from '../../../lib/teact/teact';\nimport { getActions, withGlobal } from '../../../global';\n\nimport { ApiChat, ApiChatMember, ApiUser } from '../../../api/types';\n\nimport { selectChat } from '../../../global/selectors';\nimport { getHasAdminRight, getUserFullName, isChatChannel } from '../../../global/helpers';\nimport useLang from '../../../hooks/useLang';\nimport useHistoryBack from '../../../hooks/useHistoryBack';\nimport useFlag from '../../../hooks/useFlag';\n\nimport PrivateChatInfo from '../../common/PrivateChatInfo';\nimport ListItem from '../../ui/ListItem';\nimport FloatingActionButton from '../../ui/FloatingActionButton';\nimport RemoveGroupUserModal from './RemoveGroupUserModal';\n\ntype OwnProps = {\n chatId: string;\n onClose: NoneToVoidFunction;\n isActive: boolean;\n};\n\ntype StateProps = {\n chat?: ApiChat;\n usersById: Record;\n canDeleteMembers?: boolean;\n isChannel?: boolean;\n};\n\nconst ManageChatRemovedUsers: FC = ({\n chat,\n usersById,\n canDeleteMembers,\n isChannel,\n onClose,\n isActive,\n}) => {\n const { updateChatMemberBannedRights } = getActions();\n\n const lang = useLang();\n const [isRemoveUserModalOpen, openRemoveUserModal, closeRemoveUserModal] = useFlag();\n\n useHistoryBack(isActive, onClose);\n\n const removedMembers = useMemo(() => {\n if (!chat || !chat.fullInfo || !chat.fullInfo.kickedMembers) {\n return [];\n }\n\n return chat.fullInfo.kickedMembers;\n }, [chat]);\n\n const getRemovedBy = useCallback((member: ApiChatMember) => {\n if (!member.kickedByUserId) {\n return undefined;\n }\n\n const kickedByUser = usersById[member.kickedByUserId];\n if (!kickedByUser) {\n return undefined;\n }\n\n return lang('UserRemovedBy', getUserFullName(kickedByUser));\n }, [lang, usersById]);\n\n const getContextActions = useCallback((member: ApiChatMember) => {\n if (!chat) {\n return undefined;\n }\n\n return [{\n title: lang('Unblock'),\n icon: 'delete',\n destructive: true,\n handler: () => updateChatMemberBannedRights({\n chatId: chat.id,\n userId: member.userId,\n bannedRights: {},\n }),\n }];\n }, [lang, chat, updateChatMemberBannedRights]);\n\n return (\n
\n
\n
\n

{lang(isChannel ? 'NoBlockedChannel2' : 'NoBlockedGroup2')}

\n\n {removedMembers.map((member) => (\n \n \n \n ))}\n {canDeleteMembers && (\n \n \n \n )}\n {chat && canDeleteMembers && (\n \n )}\n
\n
\n
\n );\n};\n\nexport default memo(withGlobal(\n (global, { chatId }): StateProps => {\n const chat = selectChat(global, chatId);\n const { byId: usersById } = global.users;\n const canDeleteMembers = chat && (getHasAdminRight(chat, 'banUsers') || chat.isCreator);\n\n return {\n chat,\n usersById,\n canDeleteMembers,\n isChannel: chat && isChatChannel(chat),\n };\n },\n)(ManageChatRemovedUsers));\n","import { ChangeEvent } from 'react';\nimport React, {\n FC, memo, useCallback, useEffect, useState,\n} from '../../../lib/teact/teact';\nimport { getActions, withGlobal } from '../../../global';\n\nimport { ManagementScreens, ManagementProgress } from '../../../types';\nimport { ApiChat, ApiExportedInvite, ApiMediaFormat } from '../../../api/types';\n\nimport { getChatAvatarHash, getHasAdminRight } from '../../../global/helpers';\nimport useMedia from '../../../hooks/useMedia';\nimport useLang from '../../../hooks/useLang';\nimport { selectChat } from '../../../global/selectors';\nimport useFlag from '../../../hooks/useFlag';\nimport useHistoryBack from '../../../hooks/useHistoryBack';\nimport { formatInteger } from '../../../util/textFormat';\n\nimport AvatarEditable from '../../ui/AvatarEditable';\nimport InputText from '../../ui/InputText';\nimport ListItem from '../../ui/ListItem';\nimport Checkbox from '../../ui/Checkbox';\nimport Spinner from '../../ui/Spinner';\nimport FloatingActionButton from '../../ui/FloatingActionButton';\nimport ConfirmDialog from '../../ui/ConfirmDialog';\n\nimport './Management.scss';\n\ntype OwnProps = {\n chatId: string;\n onScreenSelect: (screen: ManagementScreens) => void;\n onClose: NoneToVoidFunction;\n isActive: boolean;\n};\n\ntype StateProps = {\n chat: ApiChat;\n progress?: ManagementProgress;\n isSignaturesShown: boolean;\n canChangeInfo?: boolean;\n canInvite?: boolean;\n exportedInvites?: ApiExportedInvite[];\n lastSyncTime?: number;\n availableReactionsCount?: number;\n};\n\nconst CHANNEL_TITLE_EMPTY = 'Channel title can\\'t be empty';\n\nconst ManageChannel: FC = ({\n chatId,\n chat,\n progress,\n isSignaturesShown,\n canChangeInfo,\n canInvite,\n exportedInvites,\n lastSyncTime,\n availableReactionsCount,\n onScreenSelect,\n onClose,\n isActive,\n}) => {\n const {\n updateChat,\n toggleSignatures,\n closeManagement,\n leaveChannel,\n deleteChannel,\n openChat,\n loadExportedChatInvites,\n loadChatJoinRequests,\n } = getActions();\n\n const currentTitle = chat ? (chat.title || '') : '';\n const currentAbout = chat?.fullInfo ? (chat.fullInfo.about || '') : '';\n const hasLinkedChat = chat?.fullInfo?.linkedChatId;\n\n const [isDeleteDialogOpen, openDeleteDialog, closeDeleteDialog] = useFlag();\n const [isProfileFieldsTouched, setIsProfileFieldsTouched] = useState(false);\n const [title, setTitle] = useState(currentTitle);\n const [about, setAbout] = useState(currentAbout);\n const [photo, setPhoto] = useState();\n const [error, setError] = useState();\n const imageHash = chat && getChatAvatarHash(chat);\n const currentAvatarBlobUrl = useMedia(imageHash, false, ApiMediaFormat.BlobUrl);\n const lang = useLang();\n\n useHistoryBack(isActive, onClose);\n\n useEffect(() => {\n if (lastSyncTime) {\n loadExportedChatInvites({ chatId });\n loadExportedChatInvites({ chatId, isRevoked: true });\n loadChatJoinRequests({ chatId });\n }\n }, [chatId, loadExportedChatInvites, lastSyncTime, loadChatJoinRequests]);\n\n useEffect(() => {\n if (progress === ManagementProgress.Complete) {\n setIsProfileFieldsTouched(false);\n setError(undefined);\n }\n }, [progress]);\n\n const adminsCount = (chat?.fullInfo?.adminMembers?.length) || 0;\n const removedUsersCount = (chat?.fullInfo?.kickedMembers?.length) || 0;\n\n const handleClickEditType = useCallback(() => {\n onScreenSelect(ManagementScreens.ChatPrivacyType);\n }, [onScreenSelect]);\n\n const handleClickDiscussion = useCallback(() => {\n onScreenSelect(ManagementScreens.Discussion);\n }, [onScreenSelect]);\n\n const handleClickReactions = useCallback(() => {\n onScreenSelect(ManagementScreens.Reactions);\n }, [onScreenSelect]);\n\n const handleClickAdministrators = useCallback(() => {\n onScreenSelect(ManagementScreens.ChatAdministrators);\n }, [onScreenSelect]);\n\n const handleClickInvites = useCallback(() => {\n onScreenSelect(ManagementScreens.Invites);\n }, [onScreenSelect]);\n\n const handleClickRequests = useCallback(() => {\n onScreenSelect(ManagementScreens.JoinRequests);\n }, [onScreenSelect]);\n\n const handleSetPhoto = useCallback((file: File) => {\n setPhoto(file);\n setIsProfileFieldsTouched(true);\n }, []);\n\n const handleTitleChange = useCallback((e: ChangeEvent) => {\n setTitle(e.target.value);\n setIsProfileFieldsTouched(true);\n }, []);\n\n const handleAboutChange = useCallback((e: ChangeEvent) => {\n setAbout(e.target.value);\n setIsProfileFieldsTouched(true);\n }, []);\n\n const handleUpdateChannel = useCallback(() => {\n const trimmedTitle = title.trim();\n const trimmedAbout = about.trim();\n\n if (!trimmedTitle.length) {\n setError(CHANNEL_TITLE_EMPTY);\n return;\n }\n\n updateChat({\n chatId,\n title: trimmedTitle,\n about: trimmedAbout,\n photo,\n });\n }, [about, chatId, photo, title, updateChat]);\n\n const handleToggleSignatures = useCallback(() => {\n toggleSignatures({ chatId, isEnabled: !isSignaturesShown });\n }, [chatId, isSignaturesShown, toggleSignatures]);\n\n const handleClickSubscribers = useCallback(() => {\n onScreenSelect(ManagementScreens.ChannelSubscribers);\n }, [onScreenSelect]);\n\n const handleRemovedUsersClick = useCallback(() => {\n onScreenSelect(ManagementScreens.ChannelRemovedUsers);\n }, [onScreenSelect]);\n\n const handleDeleteChannel = useCallback(() => {\n if (chat.isCreator) {\n deleteChannel({ chatId: chat.id });\n } else {\n leaveChannel({ chatId: chat.id });\n }\n\n closeDeleteDialog();\n closeManagement();\n openChat({ id: undefined });\n }, [chat.isCreator, chat.id, closeDeleteDialog, closeManagement, leaveChannel, deleteChannel, openChat]);\n\n const enabledReactionsCount = chat.fullInfo?.enabledReactions?.length || 0;\n\n if (chat.isRestricted) {\n return undefined;\n }\n\n const isLoading = progress === ManagementProgress.InProgress;\n\n return (\n
\n
\n
\n \n \n \n {chat.isCreator && (\n \n {lang('ChannelType')}\n {chat.username ? lang('TypePublic') : lang('TypePrivate')}\n \n )}\n \n {lang('Discussion')}\n {hasLinkedChat ? lang('DiscussionUnlink') : lang('Add')}\n \n {canInvite && (\n \n {lang('GroupInfo.InviteLinks')}\n \n {exportedInvites ? formatInteger(exportedInvites.length) : lang('Loading')}\n \n \n )}\n {Boolean(chat.joinRequests?.length) && (\n \n {lang('SubscribeRequests')}\n \n {formatInteger(chat.joinRequests!.length)}\n \n \n )}\n \n {lang('Reactions')}\n \n {enabledReactionsCount}/{availableReactionsCount}\n \n \n
\n \n
\n
\n
\n \n {lang('ChannelAdministrators')}\n {adminsCount}\n \n \n {lang('ChannelSubscribers')}\n {lang('Subscribers', chat.membersCount ?? 0, 'i')}\n \n \n {lang('ChannelBlockedUsers')}\n {removedUsersCount}\n \n
\n
\n \n {chat.isCreator ? lang('ChannelDelete') : lang('LeaveChannel')}\n \n
\n
\n \n {isLoading ? (\n \n ) : (\n \n )}\n \n \n
\n );\n};\n\nexport default memo(withGlobal(\n (global, { chatId }): StateProps => {\n const chat = selectChat(global, chatId)!;\n const { progress } = global.management;\n const isSignaturesShown = Boolean(chat?.isSignaturesShown);\n const { invites } = global.management.byChatId[chatId] || {};\n\n return {\n chat,\n progress,\n isSignaturesShown,\n canChangeInfo: getHasAdminRight(chat, 'changeInfo'),\n canInvite: getHasAdminRight(chat, 'inviteUsers'),\n lastSyncTime: global.lastSyncTime,\n exportedInvites: invites,\n availableReactionsCount: global.availableReactions?.filter((l) => !l.isInactive).length,\n };\n },\n)(ManageChannel));\n","import React, {\n FC, memo, useCallback, useEffect, useState,\n} from '../../../lib/teact/teact';\nimport { getActions, withGlobal } from '../../../global';\n\nimport { ApiChat } from '../../../api/types';\nimport { ManagementProgress } from '../../../types';\n\nimport { selectChat, selectManagement } from '../../../global/selectors';\nimport { isChatChannel } from '../../../global/helpers';\nimport useFlag from '../../../hooks/useFlag';\nimport useLang from '../../../hooks/useLang';\nimport useHistoryBack from '../../../hooks/useHistoryBack';\n\nimport SafeLink from '../../common/SafeLink';\nimport ListItem from '../../ui/ListItem';\nimport RadioGroup from '../../ui/RadioGroup';\nimport Loading from '../../ui/Loading';\nimport Spinner from '../../ui/Spinner';\nimport FloatingActionButton from '../../ui/FloatingActionButton';\nimport UsernameInput from '../../common/UsernameInput';\nimport ConfirmDialog from '../../ui/ConfirmDialog';\n\ntype PrivacyType = 'private' | 'public';\n\ntype OwnProps = {\n chatId: string;\n onClose: NoneToVoidFunction;\n isActive: boolean;\n};\n\ntype StateProps = {\n chat: ApiChat;\n isChannel: boolean;\n progress?: ManagementProgress;\n isUsernameAvailable?: boolean;\n isProtected?: boolean;\n};\n\nconst ManageChatPrivacyType: FC = ({\n chat,\n onClose,\n isActive,\n isChannel,\n progress,\n isUsernameAvailable,\n isProtected,\n}) => {\n const {\n checkPublicLink,\n updatePublicLink,\n updatePrivateLink,\n toggleIsProtected,\n } = getActions();\n\n const isPublic = Boolean(chat.username);\n const privateLink = chat.fullInfo?.inviteLink;\n\n const [privacyType, setPrivacyType] = useState(isPublic ? 'public' : 'private');\n const [username, setUsername] = useState();\n const [isRevokeConfirmDialogOpen, openRevokeConfirmDialog, closeRevokeConfirmDialog] = useFlag();\n\n const canUpdate = Boolean(\n (privacyType === 'public' && username && isUsernameAvailable)\n || (privacyType === 'private' && isPublic),\n );\n\n useHistoryBack(isActive, onClose);\n\n useEffect(() => {\n if (privacyType && !privateLink) {\n updatePrivateLink();\n }\n }, [privacyType, privateLink, updatePrivateLink]);\n\n const handleOptionChange = useCallback((value: string) => {\n setPrivacyType(value as PrivacyType);\n }, []);\n\n const handleForwardingOptionChange = useCallback((value: string) => {\n toggleIsProtected({\n chatId: chat.id,\n isProtected: value === 'protected',\n });\n }, [chat.id, toggleIsProtected]);\n\n const handleSave = useCallback(() => {\n updatePublicLink({ username: privacyType === 'public' ? username : '' });\n }, [privacyType, updatePublicLink, username]);\n\n const handleRevokePrivateLink = useCallback(() => {\n closeRevokeConfirmDialog();\n updatePrivateLink();\n }, [closeRevokeConfirmDialog, updatePrivateLink]);\n\n const lang = useLang();\n const langPrefix1 = isChannel ? 'Channel' : 'Mega';\n const langPrefix2 = isChannel ? 'Channel' : 'Group';\n\n const options = [\n { value: 'private', label: lang(`${langPrefix1}Private`), subLabel: lang(`${langPrefix1}PrivateInfo`) },\n { value: 'public', label: lang(`${langPrefix1}Public`), subLabel: lang(`${langPrefix1}PublicInfo`) },\n ];\n\n const forwardingOptions = [{\n value: 'allowed',\n label: lang('ChannelVisibility.Forwarding.Enabled'),\n }, {\n value: 'protected',\n label: lang('ChannelVisibility.Forwarding.Disabled'),\n }];\n\n const isLoading = progress === ManagementProgress.InProgress;\n\n return (\n
\n
\n
\n

{lang(`${langPrefix2}Type`)}

\n \n
\n {privacyType === 'private' ? (\n
\n {privateLink ? (\n <>\n \n

\n {lang(`${langPrefix1}PrivateLinkHelp`)}\n

\n\n \n {lang('RevokeLink')}\n \n \n \n ) : (\n \n )}\n
\n ) : (\n
\n \n

\n {lang(`${langPrefix2}.Username.CreatePublicLinkHelp`)}\n

\n
\n )}\n
\n

\n {lang(isChannel ? 'ChannelVisibility.Forwarding.ChannelTitle' : 'ChannelVisibility.Forwarding.GroupTitle')}\n

\n \n

\n {isChannel\n ? lang('ChannelVisibility.Forwarding.ChannelInfo')\n : lang('ChannelVisibility.Forwarding.GroupInfo')}\n

\n
\n
\n \n {isLoading ? (\n \n ) : (\n \n )}\n \n
\n );\n};\n\nexport default memo(withGlobal(\n (global, { chatId }): StateProps => {\n const chat = selectChat(global, chatId)!;\n const { isUsernameAvailable } = selectManagement(global, chatId)!;\n\n return {\n chat,\n isChannel: isChatChannel(chat),\n progress: global.management.progress,\n isUsernameAvailable,\n isProtected: chat?.isProtected,\n };\n },\n)(ManageChatPrivacyType));\n","import React, {\n FC, memo, useCallback, useEffect, useState,\n} from '../../../lib/teact/teact';\nimport { getActions, withGlobal } from '../../../global';\n\nimport { ApiChat } from '../../../api/types';\nimport { ManagementScreens } from '../../../types';\n\nimport { STICKER_SIZE_DISCUSSION_GROUPS } from '../../../config';\nimport { selectChat } from '../../../global/selectors';\nimport getAnimationData from '../../common/helpers/animatedAssets';\nimport useLang from '../../../hooks/useLang';\nimport useHistoryBack from '../../../hooks/useHistoryBack';\n\nimport ListItem from '../../ui/ListItem';\nimport NothingFound from '../../common/NothingFound';\nimport GroupChatInfo from '../../common/GroupChatInfo';\nimport AnimatedSticker from '../../common/AnimatedSticker';\nimport ConfirmDialog from '../../ui/ConfirmDialog';\nimport useFlag from '../../../hooks/useFlag';\nimport renderText from '../../common/helpers/renderText';\nimport Avatar from '../../common/Avatar';\nimport { isChatChannel } from '../../../global/helpers';\n\ntype OwnProps = {\n chatId: string;\n onScreenSelect: (screen: ManagementScreens) => void;\n onClose: NoneToVoidFunction;\n isActive: boolean;\n};\n\ntype StateProps = {\n chat?: ApiChat;\n chatsByIds: Record;\n linkedChat?: ApiChat;\n forDiscussionIds?: string[];\n isChannel?: boolean;\n};\n\nconst ManageDiscussion: FC = ({\n chat,\n onClose,\n isActive,\n chatId,\n chatsByIds,\n linkedChat,\n forDiscussionIds,\n isChannel,\n onScreenSelect,\n}) => {\n const {\n loadGroupsForDiscussion,\n linkDiscussionGroup,\n unlinkDiscussionGroup,\n } = getActions();\n\n const [linkedGroupId, setLinkedGroupId] = useState();\n const [animationData, setAnimationData] = useState();\n const [isAnimationLoaded, setIsAnimationLoaded] = useState(false);\n const handleAnimationLoad = useCallback(() => setIsAnimationLoaded(true), []);\n const [isConfirmUnlinkGroupDialogOpen, openConfirmUnlinkGroupDialog, closeConfirmUnlinkGroupDialog] = useFlag();\n const [isConfirmLinkGroupDialogOpen, openConfirmLinkGroupDialog, closeConfirmLinkGroupDialog] = useFlag();\n const lang = useLang();\n const linkedChatId = linkedChat?.id;\n\n useHistoryBack(isActive, onClose);\n\n useEffect(() => {\n loadGroupsForDiscussion();\n }, [loadGroupsForDiscussion]);\n\n useEffect(() => {\n if (!animationData) {\n getAnimationData('DiscussionGroups').then(setAnimationData);\n }\n }, [animationData]);\n\n const handleUnlinkGroupSessions = useCallback(() => {\n closeConfirmUnlinkGroupDialog();\n unlinkDiscussionGroup({ channelId: isChannel ? chatId : linkedChatId });\n if (!isChannel) {\n onScreenSelect(ManagementScreens.Initial);\n }\n }, [closeConfirmUnlinkGroupDialog, unlinkDiscussionGroup, isChannel, chatId, linkedChatId, onScreenSelect]);\n\n const handleLinkGroupSessions = useCallback(() => {\n closeConfirmLinkGroupDialog();\n linkDiscussionGroup({ channelId: chatId, chatId: linkedGroupId });\n }, [closeConfirmLinkGroupDialog, linkDiscussionGroup, chatId, linkedGroupId]);\n\n const onDiscussionClick = (groupId: string) => {\n setLinkedGroupId(groupId);\n openConfirmLinkGroupDialog();\n };\n\n function renderUnlinkGroupHeader() {\n return (\n
\n \n
\n {lang(isChannel ? 'DiscussionUnlinkGroup' : 'DiscussionUnlinkChannel')}\n
\n
\n );\n }\n\n function renderLinkGroupHeader() {\n const linkedGroup = chatsByIds[linkedGroupId];\n\n if (!linkedGroup) {\n return undefined;\n }\n\n return (\n
\n \n
\n {lang('Channel.DiscussionGroup.LinkGroup')}\n
\n
\n );\n }\n\n function renderLinkGroupConfirmText() {\n const linkedGroup = chatsByIds[linkedGroupId];\n\n if (!linkedGroup) {\n return undefined;\n }\n\n if (linkedGroup.hasPrivateLink) {\n return renderText(\n `Do you want to make **${linkedGroup.title}** the discussion board for **${chat!.title}**?`,\n ['br', 'simple_markdown'],\n );\n // return renderText(\n // lang('DiscussionLinkGroupPublicAlert', linkedChat.title, chat!.title),\n // ['br', 'simple_markdown'],\n // );\n }\n\n return renderText(\n // eslint-disable-next-line max-len\n `Do you want to make **${linkedGroup.title}** the discussion board for **${chat!.title}**?\\n\\nAnyone from the channel will be able to see messages in this group.`,\n ['br', 'simple_markdown'],\n );\n // return renderText(\n // lang('DiscussionLinkGroupPrivateAlert', linkedChat.title, chat!.title),\n // ['br', 'simple_markdown'],\n // );\n }\n\n function renderLinkedGroup() {\n return (\n
\n \n \n \n \n {lang(isChannel ? 'DiscussionUnlinkGroup' : 'DiscussionUnlinkChannel')}\n \n \n
\n );\n }\n\n function renderDiscussionGroups() {\n return (\n
\n

{lang('DiscussionChannelHelp')}

\n\n
\n \n {lang('DiscussionCreateGroup')}\n \n {forDiscussionIds ? (\n forDiscussionIds.map((id, i) => (\n {\n onDiscussionClick(id);\n }}\n >\n \n \n ))\n ) : (\n \n )}\n
\n

{lang('DiscussionChannelHelp2')}

\n \n
\n );\n }\n\n return (\n
\n
\n
\n
\n {animationData && (\n \n )}\n
\n {linkedChat && renderLinkedGroup()}\n {!linkedChat && renderDiscussionGroups()}\n
\n
\n
\n );\n};\n\nexport default memo(withGlobal(\n (global, { chatId }): StateProps => {\n const chat = selectChat(global, chatId);\n const { forDiscussionIds, byId: chatsByIds } = global.chats;\n const linkedChat = chat?.fullInfo?.linkedChatId\n ? selectChat(global, chat.fullInfo.linkedChatId)\n : undefined;\n\n return {\n chat,\n chatsByIds,\n forDiscussionIds,\n linkedChat,\n isChannel: chat && isChatChannel(chat),\n };\n },\n)(ManageDiscussion));\n","import React, {\n FC, memo, useCallback, useEffect, useMemo, useState,\n} from '../../../lib/teact/teact';\nimport { getActions, withGlobal } from '../../../global';\n\nimport { ApiChat, ApiChatBannedRights } from '../../../api/types';\nimport { ManagementScreens } from '../../../types';\n\nimport { selectChat } from '../../../global/selectors';\nimport useLang from '../../../hooks/useLang';\nimport useFlag from '../../../hooks/useFlag';\nimport useHistoryBack from '../../../hooks/useHistoryBack';\n\nimport PrivateChatInfo from '../../common/PrivateChatInfo';\nimport ListItem from '../../ui/ListItem';\nimport Checkbox from '../../ui/Checkbox';\nimport FloatingActionButton from '../../ui/FloatingActionButton';\nimport Spinner from '../../ui/Spinner';\nimport ConfirmDialog from '../../ui/ConfirmDialog';\n\ntype OwnProps = {\n chatId: string;\n selectedChatMemberId?: string;\n isPromotedByCurrentUser?: boolean;\n onScreenSelect: (screen: ManagementScreens) => void;\n onClose: NoneToVoidFunction;\n isActive: boolean;\n};\n\ntype StateProps = {\n chat?: ApiChat;\n isFormFullyDisabled?: boolean;\n};\n\nconst ManageGroupUserPermissions: FC = ({\n chat,\n selectedChatMemberId,\n onScreenSelect,\n isFormFullyDisabled,\n onClose,\n isActive,\n}) => {\n const { updateChatMemberBannedRights } = getActions();\n\n const [permissions, setPermissions] = useState({});\n const [havePermissionChanged, setHavePermissionChanged] = useState(false);\n const [isLoading, setIsLoading] = useState(false);\n const [isBanConfirmationDialogOpen, openBanConfirmationDialog, closeBanConfirmationDialog] = useFlag();\n const lang = useLang();\n\n useHistoryBack(isActive, onClose);\n\n const selectedChatMember = useMemo(() => {\n if (!chat || !chat.fullInfo || !chat.fullInfo.members) {\n return undefined;\n }\n\n return chat.fullInfo.members.find(({ userId }) => userId === selectedChatMemberId);\n }, [chat, selectedChatMemberId]);\n\n useEffect(() => {\n if (chat?.fullInfo && selectedChatMemberId && !selectedChatMember) {\n onScreenSelect(ManagementScreens.GroupPermissions);\n }\n }, [chat, onScreenSelect, selectedChatMember, selectedChatMemberId]);\n\n useEffect(() => {\n setPermissions((selectedChatMember?.bannedRights) || (chat?.defaultBannedRights) || {});\n setHavePermissionChanged(false);\n setIsLoading(false);\n }, [chat, selectedChatMember]);\n\n const handlePermissionChange = useCallback((e: React.ChangeEvent) => {\n const { name } = e.target;\n\n function getUpdatedPermissionValue(value: true | undefined) {\n return value ? undefined : true;\n }\n\n setPermissions((p) => ({\n ...p,\n [name]: getUpdatedPermissionValue(p[name as Exclude]),\n ...(name === 'sendStickers' && {\n sendGifs: getUpdatedPermissionValue(p[name]),\n }),\n }));\n setHavePermissionChanged(true);\n }, []);\n\n const handleSavePermissions = useCallback(() => {\n if (!chat || !selectedChatMemberId) {\n return;\n }\n\n setIsLoading(true);\n updateChatMemberBannedRights({\n chatId: chat.id,\n userId: selectedChatMemberId,\n bannedRights: permissions,\n });\n }, [chat, selectedChatMemberId, permissions, updateChatMemberBannedRights]);\n\n const handleBanFromGroup = useCallback(() => {\n if (!chat || !selectedChatMemberId) {\n return;\n }\n\n updateChatMemberBannedRights({\n chatId: chat.id,\n userId: selectedChatMemberId,\n bannedRights: {\n viewMessages: true,\n },\n });\n }, [chat, selectedChatMemberId, updateChatMemberBannedRights]);\n\n const getControlIsDisabled = useCallback((key: Exclude) => {\n if (isFormFullyDisabled) {\n return true;\n }\n\n if (!chat || !chat.defaultBannedRights) {\n return false;\n }\n\n return chat.defaultBannedRights[key];\n }, [chat, isFormFullyDisabled]);\n\n if (!selectedChatMember) {\n return undefined;\n }\n\n return (\n
\n
\n
\n \n \n \n\n

{lang('UserRestrictionsCanDo')}

\n\n
\n \n
\n
\n \n
\n
\n \n
\n
\n \n
\n
\n \n
\n
\n \n
\n
\n \n
\n
\n \n
\n
\n\n {!isFormFullyDisabled && (\n
\n \n {lang('UserRestrictionsBlock')}\n \n
\n )}\n
\n\n \n {isLoading ? (\n \n ) : (\n \n )}\n \n\n \n
\n );\n};\n\nexport default memo(withGlobal(\n (global, { chatId, isPromotedByCurrentUser }): StateProps => {\n const chat = selectChat(global, chatId)!;\n const isFormFullyDisabled = !(chat.isCreator || isPromotedByCurrentUser);\n\n return { chat, isFormFullyDisabled };\n },\n)(ManageGroupUserPermissions));\n","import React, {\n FC, memo, useCallback, useMemo,\n} from '../../../lib/teact/teact';\nimport { getGlobal, withGlobal } from '../../../global';\n\nimport { ManagementScreens } from '../../../types';\nimport { ApiChat, ApiChatMember } from '../../../api/types';\n\nimport { getUserFullName, isChatChannel } from '../../../global/helpers';\nimport { selectChat } from '../../../global/selectors';\nimport useLang from '../../../hooks/useLang';\nimport useHistoryBack from '../../../hooks/useHistoryBack';\n\nimport ListItem from '../../ui/ListItem';\nimport PrivateChatInfo from '../../common/PrivateChatInfo';\nimport FloatingActionButton from '../../ui/FloatingActionButton';\n\ntype OwnProps = {\n chatId: string;\n onScreenSelect: (screen: ManagementScreens) => void;\n onChatMemberSelect: (memberId: string, isPromotedByCurrentUser?: boolean) => void;\n onClose: NoneToVoidFunction;\n isActive: boolean;\n};\n\ntype StateProps = {\n chat: ApiChat;\n currentUserId?: string;\n isChannel: boolean;\n};\n\nconst ManageChatAdministrators: FC = ({\n chat,\n isChannel,\n currentUserId,\n onScreenSelect,\n onChatMemberSelect,\n onClose,\n isActive,\n}) => {\n const lang = useLang();\n\n useHistoryBack(isActive, onClose);\n\n const handleRecentActionsClick = useCallback(() => {\n onScreenSelect(ManagementScreens.GroupRecentActions);\n }, [onScreenSelect]);\n\n const adminMembers = useMemo(() => {\n if (!chat.fullInfo || !chat.fullInfo.adminMembers) {\n return [];\n }\n\n return chat.fullInfo.adminMembers.sort((a, b) => {\n if (a.isOwner) {\n return -1;\n } else if (b.isOwner) {\n return 1;\n }\n\n return 0;\n });\n }, [chat]);\n\n const handleAdminMemberClick = useCallback((member: ApiChatMember) => {\n onChatMemberSelect(member.userId, member.promotedByUserId === currentUserId);\n onScreenSelect(ManagementScreens.ChatAdminRights);\n }, [currentUserId, onChatMemberSelect, onScreenSelect]);\n\n const handleAddAdminClick = useCallback(() => {\n onScreenSelect(ManagementScreens.GroupAddAdmins);\n }, [onScreenSelect]);\n\n const getMemberStatus = useCallback((member: ApiChatMember) => {\n if (member.isOwner) {\n return lang('ChannelCreator');\n }\n\n // No need for expensive global updates on users, so we avoid them\n const usersById = getGlobal().users.byId;\n const promotedByUser = member.promotedByUserId ? usersById[member.promotedByUserId] : undefined;\n\n if (promotedByUser) {\n return lang('EditAdminPromotedBy', getUserFullName(promotedByUser));\n }\n\n return lang('ChannelAdmin');\n }, [lang]);\n\n return (\n
\n
\n
\n \n {lang('EventLog')}\n {lang(isChannel ? 'EventLogInfoDetailChannel' : 'EventLogInfoDetail')}\n \n
\n\n
\n

\n {isChannel\n ? 'You can add administrators to help you manage your channel.'\n : 'You can add administrators to help you manage your group.'}\n

\n\n {adminMembers.map((member) => (\n handleAdminMemberClick(member)}\n >\n \n \n ))}\n\n \n \n \n
\n
\n
\n );\n};\n\nexport default memo(withGlobal(\n (global, { chatId }): StateProps => {\n const chat = selectChat(global, chatId)!;\n\n return {\n chat,\n currentUserId: global.currentUserId,\n isChannel: isChatChannel(chat),\n };\n },\n)(ManageChatAdministrators));\n","import React, {\n FC, memo, useCallback, useMemo,\n} from '../../../lib/teact/teact';\nimport { withGlobal } from '../../../global';\n\nimport { ApiChat, ApiChatMember } from '../../../api/types';\nimport useLang from '../../../hooks/useLang';\nimport { selectChat } from '../../../global/selectors';\nimport useHistoryBack from '../../../hooks/useHistoryBack';\n\nimport ListItem from '../../ui/ListItem';\nimport Checkbox from '../../ui/Checkbox';\nimport PrivateChatInfo from '../../common/PrivateChatInfo';\n\ntype OwnProps = {\n chatId: string;\n onClose: NoneToVoidFunction;\n isActive: boolean;\n};\n\ntype StateProps = {\n chat?: ApiChat;\n};\n\nconst ManageGroupRecentActions: FC = ({ chat, onClose, isActive }) => {\n const lang = useLang();\n\n useHistoryBack(isActive, onClose);\n\n const adminMembers = useMemo(() => {\n if (!chat || !chat.fullInfo || !chat.fullInfo.adminMembers) {\n return [];\n }\n\n return chat.fullInfo.adminMembers.sort((a, b) => {\n if (a.isOwner) {\n return -1;\n } else if (b.isOwner) {\n return 1;\n }\n\n return 0;\n });\n }, [chat]);\n\n const getMemberStatus = useCallback((member: ApiChatMember) => {\n if (member.isOwner) {\n return lang('ChannelCreator');\n }\n\n return lang('ChannelAdmin');\n }, [lang]);\n\n return (\n
\n
\n
\n

Actions

\n\n
\n \n
\n
\n \n
\n
\n \n
\n
\n \n
\n
\n \n
\n
\n \n
\n
\n \n
\n
\n\n
\n

{lang('Channel.Management.Title')}

\n\n
\n \n
\n\n {adminMembers.map((member) => (\n \n \n \n \n ))}\n
\n
\n
\n );\n};\n\nexport default memo(withGlobal(\n (global, { chatId }): StateProps => {\n const chat = selectChat(global, chatId);\n\n return { chat };\n },\n)(ManageGroupRecentActions));\n","import React, {\n FC, memo, useCallback, useEffect, useMemo, useState,\n} from '../../../lib/teact/teact';\nimport { getActions, getGlobal, withGlobal } from '../../../global';\n\nimport { ApiChat, ApiChatAdminRights, ApiUser } from '../../../api/types';\nimport { ManagementScreens } from '../../../types';\n\nimport { selectChat } from '../../../global/selectors';\nimport { getUserFullName, isChatBasicGroup, isChatChannel } from '../../../global/helpers';\nimport useLang from '../../../hooks/useLang';\nimport useFlag from '../../../hooks/useFlag';\nimport useHistoryBack from '../../../hooks/useHistoryBack';\n\nimport PrivateChatInfo from '../../common/PrivateChatInfo';\nimport ListItem from '../../ui/ListItem';\nimport Checkbox from '../../ui/Checkbox';\nimport FloatingActionButton from '../../ui/FloatingActionButton';\nimport Spinner from '../../ui/Spinner';\nimport ConfirmDialog from '../../ui/ConfirmDialog';\nimport InputText from '../../ui/InputText';\n\ntype OwnProps = {\n chatId: string;\n selectedUserId?: string;\n isPromotedByCurrentUser?: boolean;\n isNewAdmin?: boolean;\n onScreenSelect: (screen: ManagementScreens) => void;\n onClose: NoneToVoidFunction;\n isActive: boolean;\n};\n\ntype StateProps = {\n chat: ApiChat;\n usersById: Record;\n currentUserId?: string;\n isChannel: boolean;\n isFormFullyDisabled: boolean;\n defaultRights?: ApiChatAdminRights;\n};\n\nconst CUSTOM_TITLE_MAX_LENGTH = 16;\n\nconst ManageGroupAdminRights: FC = ({\n isNewAdmin,\n selectedUserId,\n defaultRights,\n onScreenSelect,\n chat,\n usersById,\n currentUserId,\n isChannel,\n isFormFullyDisabled,\n onClose,\n isActive,\n}) => {\n const { updateChatAdmin } = getActions();\n\n const [permissions, setPermissions] = useState({});\n const [isTouched, setIsTouched] = useState(Boolean(isNewAdmin));\n const [isLoading, setIsLoading] = useState(false);\n const [isDismissConfirmationDialogOpen, openDismissConfirmationDialog, closeDismissConfirmationDialog] = useFlag();\n const [customTitle, setCustomTitle] = useState('');\n const lang = useLang();\n\n useHistoryBack(isActive, onClose);\n\n const selectedChatMember = useMemo(() => {\n const selectedAdminMember = chat.fullInfo?.adminMembers?.find(({ userId }) => userId === selectedUserId);\n\n // If `selectedAdminMember` variable is filled with a value, then we have already saved the administrator,\n // so now we need to return to the list of administrators\n if (isNewAdmin && (selectedAdminMember || !selectedUserId)) {\n return undefined;\n }\n\n if (isNewAdmin) {\n const user = getGlobal().users.byId[selectedUserId!];\n\n return user ? {\n userId: user.id,\n adminRights: defaultRights,\n customTitle: lang('ChannelAdmin'),\n isOwner: false,\n promotedByUserId: undefined,\n } : undefined;\n }\n\n return selectedAdminMember;\n }, [chat.fullInfo?.adminMembers, defaultRights, isNewAdmin, lang, selectedUserId]);\n\n useEffect(() => {\n if (chat?.fullInfo && selectedUserId && !selectedChatMember) {\n onScreenSelect(ManagementScreens.ChatAdministrators);\n }\n }, [chat, onScreenSelect, selectedChatMember, selectedUserId]);\n\n useEffect(() => {\n setPermissions(selectedChatMember?.adminRights || {});\n setCustomTitle((selectedChatMember?.customTitle || '').substr(0, CUSTOM_TITLE_MAX_LENGTH));\n setIsTouched(Boolean(isNewAdmin));\n setIsLoading(false);\n }, [defaultRights, isNewAdmin, selectedChatMember]);\n\n const handlePermissionChange = useCallback((e: React.ChangeEvent) => {\n const { name } = e.target;\n\n function getUpdatedPermissionValue(value: true | undefined) {\n return value ? undefined : true;\n }\n\n setPermissions((p) => ({\n ...p,\n [name]: getUpdatedPermissionValue(p[name as keyof ApiChatAdminRights]),\n }));\n setIsTouched(true);\n }, []);\n\n const handleSavePermissions = useCallback(() => {\n if (!selectedUserId) {\n return;\n }\n\n setIsLoading(true);\n updateChatAdmin({\n chatId: chat.id,\n userId: selectedUserId,\n adminRights: permissions,\n customTitle,\n });\n }, [selectedUserId, updateChatAdmin, chat.id, permissions, customTitle]);\n\n const handleDismissAdmin = useCallback(() => {\n if (!selectedUserId) {\n return;\n }\n\n updateChatAdmin({\n chatId: chat.id,\n userId: selectedUserId,\n adminRights: {},\n });\n closeDismissConfirmationDialog();\n }, [chat.id, closeDismissConfirmationDialog, selectedUserId, updateChatAdmin]);\n\n const getControlIsDisabled = useCallback((key: keyof ApiChatAdminRights) => {\n if (isChatBasicGroup(chat)) {\n return false;\n }\n\n if (isFormFullyDisabled || !chat.adminRights) {\n return true;\n }\n\n return !chat.adminRights![key];\n }, [chat, isFormFullyDisabled]);\n\n const memberStatus = useMemo(() => {\n if (isNewAdmin || !selectedChatMember) {\n return undefined;\n }\n\n if (selectedChatMember.isOwner) {\n return lang('ChannelCreator');\n }\n\n const promotedByUser = selectedChatMember.promotedByUserId\n ? usersById[selectedChatMember.promotedByUserId]\n : undefined;\n\n if (promotedByUser) {\n return lang('EditAdminPromotedBy', getUserFullName(promotedByUser));\n }\n\n return lang('ChannelAdmin');\n }, [isNewAdmin, selectedChatMember, usersById, lang]);\n\n const handleCustomTitleChange = useCallback((e) => {\n const { value } = e.target;\n setCustomTitle(value);\n setIsTouched(true);\n }, []);\n\n if (!selectedChatMember) {\n return undefined;\n }\n\n return (\n
\n
\n
\n \n \n \n\n

{lang('EditAdminWhatCanDo')}

\n\n
\n \n
\n {isChannel && (\n
\n \n
\n )}\n {isChannel && (\n
\n \n
\n )}\n
\n \n
\n {!isChannel && (\n
\n \n
\n )}\n
\n \n
\n {!isChannel && (\n
\n \n
\n )}\n
\n \n
\n
\n \n
\n {!isChannel && (\n
\n \n
\n )}\n\n {isFormFullyDisabled && (\n

\n {lang('Channel.EditAdmin.CannotEdit')}\n

\n )}\n\n {!isChannel && (\n \n )}\n\n {currentUserId !== selectedUserId && !isFormFullyDisabled && !isNewAdmin && (\n \n {lang('EditAdminRemoveAdmin')}\n \n )}\n
\n
\n\n \n {isLoading ? (\n \n ) : (\n \n )}\n \n\n {!isNewAdmin && (\n \n )}\n
\n );\n};\n\nexport default memo(withGlobal(\n (global, { chatId, isPromotedByCurrentUser }): StateProps => {\n const chat = selectChat(global, chatId)!;\n const { byId: usersById } = global.users;\n const { currentUserId } = global;\n const isChannel = isChatChannel(chat);\n const isFormFullyDisabled = !(chat.isCreator || isPromotedByCurrentUser);\n\n return {\n chat,\n usersById,\n currentUserId,\n isChannel,\n isFormFullyDisabled,\n defaultRights: chat.adminRights,\n };\n },\n)(ManageGroupAdminRights));\n","import React, {\n FC, memo, useCallback, useMemo, useRef,\n} from '../../../lib/teact/teact';\nimport { getActions, getGlobal, withGlobal } from '../../../global';\n\nimport { ApiChatMember, ApiUserStatus } from '../../../api/types';\nimport { ManagementScreens } from '../../../types';\n\nimport { unique } from '../../../util/iteratees';\nimport { selectChat } from '../../../global/selectors';\nimport {\n sortUserIds, isChatChannel, filterUsersByName, sortChatIds, isUserBot,\n} from '../../../global/helpers';\nimport useLang from '../../../hooks/useLang';\nimport useHistoryBack from '../../../hooks/useHistoryBack';\nimport useInfiniteScroll from '../../../hooks/useInfiniteScroll';\nimport useKeyboardListNavigation from '../../../hooks/useKeyboardListNavigation';\n\nimport PrivateChatInfo from '../../common/PrivateChatInfo';\nimport NothingFound from '../../common/NothingFound';\nimport ListItem from '../../ui/ListItem';\nimport InputText from '../../ui/InputText';\nimport InfiniteScroll from '../../ui/InfiniteScroll';\nimport Loading from '../../ui/Loading';\n\ntype OwnProps = {\n chatId: string;\n isActive: boolean;\n noAdmins?: boolean;\n onClose: NoneToVoidFunction;\n onScreenSelect?: (screen: ManagementScreens) => void;\n onChatMemberSelect?: (memberId: string, isPromotedByCurrentUser?: boolean) => void;\n};\n\ntype StateProps = {\n userStatusesById: Record;\n members?: ApiChatMember[];\n adminMembers?: ApiChatMember[];\n isChannel?: boolean;\n localContactIds?: string[];\n searchQuery?: string;\n isSearching?: boolean;\n localUserIds?: string[];\n globalUserIds?: string[];\n serverTimeOffset: number;\n};\n\nconst ManageGroupMembers: FC = ({\n noAdmins,\n members,\n adminMembers,\n userStatusesById,\n isChannel,\n isActive,\n globalUserIds,\n localContactIds,\n localUserIds,\n isSearching,\n searchQuery,\n serverTimeOffset,\n onClose,\n onScreenSelect,\n onChatMemberSelect,\n}) => {\n const { openChat, setUserSearchQuery, loadContactList } = getActions();\n const lang = useLang();\n // eslint-disable-next-line no-null/no-null\n const inputRef = useRef(null);\n // eslint-disable-next-line no-null/no-null\n const containerRef = useRef(null);\n\n const adminIds = useMemo(() => {\n return noAdmins ? adminMembers?.map(({ userId }) => userId) || [] : [];\n }, [adminMembers, noAdmins]);\n\n const memberIds = useMemo(() => {\n // No need for expensive global updates on users, so we avoid them\n const usersById = getGlobal().users.byId;\n if (!members || !usersById) {\n return [];\n }\n\n const userIds = sortUserIds(\n members.map(({ userId }) => userId),\n usersById,\n userStatusesById,\n undefined,\n serverTimeOffset,\n );\n\n return noAdmins ? userIds.filter((userId) => !adminIds.includes(userId)) : userIds;\n }, [members, userStatusesById, serverTimeOffset, noAdmins, adminIds]);\n\n const displayedIds = useMemo(() => {\n // No need for expensive global updates on users, so we avoid them\n const usersById = getGlobal().users.byId;\n const chatsById = getGlobal().chats.byId;\n const shouldUseSearchResults = Boolean(searchQuery);\n const listedIds = !shouldUseSearchResults\n ? memberIds\n : (localContactIds ? filterUsersByName(localContactIds, usersById, searchQuery) : []);\n\n return sortChatIds(\n unique([\n ...listedIds,\n ...(shouldUseSearchResults ? localUserIds || [] : []),\n ...(shouldUseSearchResults ? globalUserIds || [] : []),\n ]).filter((contactId) => {\n const user = usersById[contactId];\n if (!user) {\n return true;\n }\n\n return (isChannel || user.canBeInvitedToGroup || !isUserBot(user))\n && (!noAdmins || !adminIds.includes(contactId));\n }),\n chatsById,\n true,\n );\n }, [memberIds, localContactIds, searchQuery, localUserIds, globalUserIds, isChannel, noAdmins, adminIds]);\n\n const [viewportIds, getMore] = useInfiniteScroll(loadContactList, displayedIds, Boolean(searchQuery));\n\n const handleMemberClick = useCallback((id: string) => {\n if (noAdmins) {\n onChatMemberSelect!(id, false);\n onScreenSelect!(ManagementScreens.ChatNewAdminRights);\n } else {\n openChat({ id });\n }\n }, [noAdmins, onChatMemberSelect, onScreenSelect, openChat]);\n\n const handleFilterChange = useCallback((e: React.ChangeEvent) => {\n setUserSearchQuery({ query: e.target.value });\n }, [setUserSearchQuery]);\n const handleKeyDown = useKeyboardListNavigation(containerRef, isActive, (index) => {\n if (viewportIds && viewportIds.length > 0) {\n handleMemberClick(viewportIds[index === -1 ? 0 : index]);\n }\n }, '.ListItem-button', true);\n\n useHistoryBack(isActive, onClose);\n\n function renderSearchField() {\n return (\n
\n \n
\n );\n }\n\n return (\n
\n {noAdmins && renderSearchField()}\n
\n
\n {viewportIds?.length ? (\n \n {viewportIds.map((id) => (\n handleMemberClick(id)}\n >\n \n \n ))}\n \n ) : !isSearching && viewportIds && !viewportIds.length ? (\n \n ) : (\n \n )}\n
\n
\n
\n );\n};\n\nexport default memo(withGlobal(\n (global, { chatId }): StateProps => {\n const chat = selectChat(global, chatId);\n const { statusesById: userStatusesById } = global.users;\n const members = chat?.fullInfo?.members;\n const adminMembers = chat?.fullInfo?.adminMembers;\n const isChannel = chat && isChatChannel(chat);\n const { userIds: localContactIds } = global.contactList || {};\n\n const {\n query: searchQuery,\n fetchingStatus,\n globalUserIds,\n localUserIds,\n } = global.userSearch;\n\n return {\n members,\n adminMembers,\n userStatusesById,\n isChannel,\n localContactIds,\n searchQuery,\n isSearching: fetchingStatus,\n globalUserIds,\n localUserIds,\n serverTimeOffset: global.serverTimeOffset,\n };\n },\n)(ManageGroupMembers));\n","import React, {\n FC, memo, useCallback, useMemo,\n} from '../../../lib/teact/teact';\nimport { withGlobal } from '../../../global';\n\nimport { ApiChatMember, ApiUser, ApiUserStatus } from '../../../api/types';\nimport { ManagementScreens } from '../../../types';\n\nimport { selectChat } from '../../../global/selectors';\nimport { sortUserIds, isChatChannel } from '../../../global/helpers';\nimport useHistoryBack from '../../../hooks/useHistoryBack';\n\nimport PrivateChatInfo from '../../common/PrivateChatInfo';\nimport ListItem from '../../ui/ListItem';\nimport NothingFound from '../../common/NothingFound';\n\ntype OwnProps = {\n chatId: string;\n onScreenSelect: (screen: ManagementScreens) => void;\n onChatMemberSelect: (memberId: string) => void;\n onClose: NoneToVoidFunction;\n isActive: boolean;\n};\n\ntype StateProps = {\n usersById: Record;\n userStatusesById: Record;\n members?: ApiChatMember[];\n isChannel?: boolean;\n serverTimeOffset: number;\n};\n\nconst ManageGroupUserPermissionsCreate: FC = ({\n usersById,\n userStatusesById,\n members,\n isChannel,\n onScreenSelect,\n onChatMemberSelect,\n onClose,\n isActive,\n serverTimeOffset,\n}) => {\n useHistoryBack(isActive, onClose);\n\n const memberIds = useMemo(() => {\n if (!members || !usersById) {\n return undefined;\n }\n\n return sortUserIds(\n members.filter((member) => !member.isOwner).map(({ userId }) => userId),\n usersById,\n userStatusesById,\n undefined,\n serverTimeOffset,\n );\n }, [members, serverTimeOffset, usersById, userStatusesById]);\n\n const handleExceptionMemberClick = useCallback((memberId: string) => {\n onChatMemberSelect(memberId);\n onScreenSelect(ManagementScreens.GroupUserPermissions);\n }, [onChatMemberSelect, onScreenSelect]);\n\n return (\n
\n
\n
\n {memberIds ? (\n memberIds.map((id, i) => (\n handleExceptionMemberClick(id)}\n >\n \n \n ))\n ) : (\n \n )}\n
\n
\n
\n );\n};\n\nexport default memo(withGlobal(\n (global, { chatId }): StateProps => {\n const chat = selectChat(global, chatId);\n const { byId: usersById, statusesById: userStatusesById } = global.users;\n const members = chat?.fullInfo?.members;\n const isChannel = chat && isChatChannel(chat);\n\n return {\n members,\n usersById,\n userStatusesById,\n isChannel,\n serverTimeOffset: global.serverTimeOffset,\n };\n },\n)(ManageGroupUserPermissionsCreate));\n","import React, {\n FC, memo, useCallback, useEffect, useMemo, useState,\n} from '../../../lib/teact/teact';\nimport { getActions, withGlobal } from '../../../global';\n\nimport { ApiChat, ApiExportedInvite } from '../../../api/types';\nimport { ManagementScreens } from '../../../types';\n\nimport { STICKER_SIZE_INVITES } from '../../../config';\nimport getAnimationData from '../../common/helpers/animatedAssets';\nimport useHistoryBack from '../../../hooks/useHistoryBack';\nimport useLang from '../../../hooks/useLang';\nimport { formatCountdown, MILLISECONDS_IN_DAY } from '../../../util/dateFormat';\nimport useInterval from '../../../hooks/useInterval';\nimport useForceUpdate from '../../../hooks/useForceUpdate';\nimport { selectChat } from '../../../global/selectors';\nimport { copyTextToClipboard } from '../../../util/clipboard';\nimport { IS_SINGLE_COLUMN_LAYOUT } from '../../../util/environment';\nimport { getServerTime } from '../../../util/serverTime';\nimport useFlag from '../../../hooks/useFlag';\nimport { isChatChannel } from '../../../global/helpers';\n\nimport ListItem from '../../ui/ListItem';\nimport NothingFound from '../../common/NothingFound';\nimport Button from '../../ui/Button';\nimport DropdownMenu from '../../ui/DropdownMenu';\nimport MenuItem from '../../ui/MenuItem';\nimport ConfirmDialog from '../../ui/ConfirmDialog';\nimport AnimatedSticker from '../../common/AnimatedSticker';\n\ntype OwnProps = {\n chatId: string;\n onClose: NoneToVoidFunction;\n onScreenSelect: (screen: ManagementScreens) => void;\n isActive: boolean;\n};\n\ntype StateProps = {\n chat?: ApiChat;\n isChannel?: boolean;\n exportedInvites?: ApiExportedInvite[];\n revokedExportedInvites?: ApiExportedInvite[];\n serverTimeOffset: number;\n};\n\nconst BULLET = '\\u2022';\n\nfunction inviteComparator(i1: ApiExportedInvite, i2: ApiExportedInvite) {\n const { isPermanent: i1IsPermanent, usage: i1Usage = 0, date: i1Date } = i1;\n const { isPermanent: i2IsPermanent, usage: i2Usage = 0, date: i2Date } = i2;\n if (i1IsPermanent || i2IsPermanent) return Number(i1IsPermanent) - Number(i2IsPermanent);\n if (i1Usage || i2Usage) return i2Usage - i1Usage;\n return i2Date - i1Date;\n}\n\nconst ManageInvites: FC = ({\n chatId,\n chat,\n exportedInvites,\n revokedExportedInvites,\n isActive,\n isChannel,\n serverTimeOffset,\n onClose,\n onScreenSelect,\n}) => {\n const {\n setEditingExportedInvite,\n showNotification,\n editExportedChatInvite,\n deleteExportedChatInvite,\n deleteRevokedExportedChatInvites,\n setOpenedInviteInfo,\n } = getActions();\n\n const lang = useLang();\n\n const [isDeleteRevokeAllDialogOpen, openDeleteRevokeAllDialog, closeDeleteRevokeAllDialog] = useFlag();\n const [isRevokeDialogOpen, openRevokeDialog, closeRevokeDialog] = useFlag();\n const [revokingInvite, setRevokingInvite] = useState();\n const [isDeleteDialogOpen, openDeleteDialog, closeDeleteDialog] = useFlag();\n const [deletingInvite, setDeletingInvite] = useState();\n\n const [animationData, setAnimationData] = useState();\n const [isAnimationLoaded, setIsAnimationLoaded] = useState(false);\n const handleAnimationLoad = useCallback(() => setIsAnimationLoaded(true), []);\n\n useEffect(() => {\n if (!animationData) {\n getAnimationData('Invite').then(setAnimationData);\n }\n }, [animationData]);\n\n useHistoryBack(isActive, onClose);\n\n const hasDetailedCountdown = useMemo(() => {\n if (!exportedInvites) return undefined;\n return exportedInvites\n .some(({ expireDate }) => (\n expireDate && (expireDate - getServerTime(serverTimeOffset) < MILLISECONDS_IN_DAY / 1000)\n ));\n }, [exportedInvites, serverTimeOffset]);\n const forceUpdate = useForceUpdate();\n useInterval(() => {\n forceUpdate();\n }, hasDetailedCountdown ? 1000 : undefined);\n\n const primaryInvite = exportedInvites?.find(({ isPermanent }) => isPermanent);\n const primaryInviteLink = chat?.username ? `t.me/${chat.username}` : primaryInvite?.link;\n const temporalInvites = useMemo(() => {\n const invites = chat?.username ? exportedInvites : exportedInvites?.filter(({ isPermanent }) => !isPermanent);\n return invites?.sort(inviteComparator);\n }, [chat?.username, exportedInvites]);\n\n const editInvite = (invite: ApiExportedInvite) => {\n setEditingExportedInvite({ chatId, invite });\n onScreenSelect(ManagementScreens.EditInvite);\n };\n\n const revokeInvite = useCallback((invite: ApiExportedInvite) => {\n const {\n link, title, isRequestNeeded, expireDate, usageLimit,\n } = invite;\n editExportedChatInvite({\n chatId,\n link,\n title,\n isRequestNeeded,\n expireDate,\n usageLimit,\n isRevoked: true,\n });\n }, [chatId, editExportedChatInvite]);\n\n const askToRevoke = useCallback((invite: ApiExportedInvite) => {\n setRevokingInvite(invite);\n openRevokeDialog();\n }, [openRevokeDialog]);\n\n const handleRevoke = useCallback(() => {\n if (!revokingInvite) return;\n revokeInvite(revokingInvite);\n setRevokingInvite(undefined);\n closeRevokeDialog();\n }, [closeRevokeDialog, revokeInvite, revokingInvite]);\n\n const handleCreateNewClick = useCallback(() => {\n onScreenSelect(ManagementScreens.EditInvite);\n }, [onScreenSelect]);\n\n const handlePrimaryRevoke = useCallback(() => {\n if (primaryInvite) {\n askToRevoke(primaryInvite);\n }\n }, [askToRevoke, primaryInvite]);\n\n const handleDeleteAllRevoked = useCallback(() => {\n deleteRevokedExportedChatInvites({ chatId });\n closeDeleteRevokeAllDialog();\n }, [chatId, closeDeleteRevokeAllDialog, deleteRevokedExportedChatInvites]);\n\n const showInviteInfo = useCallback((invite: ApiExportedInvite) => {\n setOpenedInviteInfo({ chatId, invite });\n onScreenSelect(ManagementScreens.InviteInfo);\n }, [chatId, onScreenSelect, setOpenedInviteInfo]);\n\n const deleteInvite = useCallback((invite: ApiExportedInvite) => {\n deleteExportedChatInvite({ chatId, link: invite.link });\n }, [chatId, deleteExportedChatInvite]);\n\n const askToDelete = useCallback((invite: ApiExportedInvite) => {\n setDeletingInvite(invite);\n openDeleteDialog();\n }, [openDeleteDialog]);\n\n const handleDelete = useCallback(() => {\n if (!deletingInvite) return;\n deleteInvite(deletingInvite);\n setDeletingInvite(undefined);\n closeDeleteDialog();\n }, [closeDeleteDialog, deleteInvite, deletingInvite]);\n\n const copyLink = useCallback((link: string) => {\n copyTextToClipboard(link);\n showNotification({\n message: lang('LinkCopied'),\n });\n }, [lang, showNotification]);\n\n const handleCopyPrimaryClicked = useCallback(() => {\n copyLink(primaryInviteLink!);\n }, [copyLink, primaryInviteLink]);\n\n const prepareUsageText = (invite: ApiExportedInvite) => {\n const {\n usage = 0, usageLimit, expireDate, isPermanent, requested, isRevoked,\n } = invite;\n let text = '';\n if (!isRevoked && usageLimit && usage < usageLimit) {\n text = lang('CanJoin', usageLimit - usage);\n } else if (usage) {\n text = lang('PeopleJoined', usage);\n } else {\n text = lang('NoOneJoined');\n }\n\n if (isRevoked) {\n text += ` ${BULLET} ${lang('Revoked')}`;\n return text;\n }\n\n if (requested) {\n text += ` ${BULLET} ${lang('JoinRequests', requested)}`;\n }\n\n if (usageLimit !== undefined && usage === usageLimit) {\n text += ` ${BULLET} ${lang('LinkLimitReached')}`;\n } else if (expireDate) {\n const diff = (expireDate - getServerTime(serverTimeOffset)) * 1000;\n text += ` ${BULLET} `;\n if (diff > 0) {\n text += lang('InviteLink.ExpiresIn', formatCountdown(lang, diff));\n } else {\n text += lang('InviteLink.Expired');\n }\n } else if (isPermanent) {\n text += ` ${BULLET} ${lang('Permanent')}`;\n }\n\n return text;\n };\n\n const prepareContextActions = (invite: ApiExportedInvite) => {\n const actions = [];\n actions.push({\n title: lang('Copy'),\n icon: 'copy',\n handler: () => copyLink(invite.link),\n });\n\n if (!invite.isPermanent && !invite.isRevoked) {\n actions.push({\n title: lang('Edit'),\n icon: 'edit',\n handler: () => editInvite(invite),\n });\n }\n\n if (!invite.isRevoked) {\n actions.push({\n title: lang('RevokeButton'),\n icon: 'delete',\n handler: () => askToRevoke(invite),\n destructive: true,\n });\n } else {\n actions.push({\n title: lang('DeleteLink'),\n icon: 'delete',\n handler: () => askToDelete(invite),\n destructive: true,\n });\n }\n return actions;\n };\n\n const PrimaryLinkMenuButton: FC<{ onTrigger: () => void; isOpen?: boolean }> = useMemo(() => {\n return ({ onTrigger, isOpen }) => (\n \n \n \n );\n }, []);\n\n return (\n
\n
\n
\n
\n {animationData && (\n \n )}\n
\n

{isChannel ? lang('PrimaryLinkHelpChannel') : lang('PrimaryLinkHelp')}

\n
\n {primaryInviteLink && (\n
\n

\n {chat?.username ? lang('PublicLink') : lang('lng_create_permanent_link_title')}\n

\n
\n \n \n {lang('Copy')}\n {!chat?.username && (\n {lang('RevokeButton')}\n )}\n \n
\n \n
\n )}\n
\n \n {(!temporalInvites || !temporalInvites.length) && }\n {temporalInvites?.map((invite) => (\n showInviteInfo(invite)}\n contextActions={prepareContextActions(invite)}\n key={invite.link}\n >\n {invite.title || invite.link}\n \n {prepareUsageText(invite)}\n \n \n ))}\n

{lang('ManageLinksInfoHelp')}

\n
\n {revokedExportedInvites && Boolean(revokedExportedInvites.length) && (\n
\n

{lang('RevokedLinks')}

\n \n {lang('DeleteAllRevokedLinks')}\n \n {revokedExportedInvites?.map((invite) => (\n showInviteInfo(invite)}\n contextActions={prepareContextActions(invite)}\n key={invite.link}\n >\n {invite.title || invite.link}\n \n {prepareUsageText(invite)}\n \n \n ))}\n
\n )}\n
\n \n \n \n
\n );\n};\n\nexport default memo(withGlobal(\n (global, { chatId }): StateProps => {\n const { invites, revokedInvites } = global.management.byChatId[chatId];\n const chat = selectChat(global, chatId);\n const isChannel = chat && isChatChannel(chat);\n\n return {\n exportedInvites: invites,\n revokedExportedInvites: revokedInvites,\n chat,\n serverTimeOffset: global.serverTimeOffset,\n isChannel,\n };\n },\n)(ManageInvites));\n","import { ChangeEvent } from 'react';\nimport React, {\n FC, memo, useCallback, useState,\n} from '../../../lib/teact/teact';\nimport { getActions, withGlobal } from '../../../global';\n\nimport { ApiExportedInvite } from '../../../api/types';\nimport { ManagementScreens } from '../../../types';\n\nimport useHistoryBack from '../../../hooks/useHistoryBack';\nimport useLang from '../../../hooks/useLang';\nimport { formatFullDate, formatTime } from '../../../util/dateFormat';\nimport useFlag from '../../../hooks/useFlag';\nimport { getServerTime } from '../../../util/serverTime';\n\nimport Checkbox from '../../ui/Checkbox';\nimport InputText from '../../ui/InputText';\nimport RadioGroup from '../../ui/RadioGroup';\nimport Button from '../../ui/Button';\nimport FloatingActionButton from '../../ui/FloatingActionButton';\nimport useOnChange from '../../../hooks/useOnChange';\nimport CalendarModal from '../../common/CalendarModal';\n\nconst DEFAULT_USAGE_LIMITS = [1, 10, 100];\nconst DEFAULT_EXPIRE_DATE = {\n hour: 3600000,\n day: 86400000,\n week: 604800000,\n};\nconst DEFAULT_CUSTOM_EXPIRE_DATE = DEFAULT_EXPIRE_DATE.hour;\n\ntype OwnProps = {\n chatId: string;\n onClose: NoneToVoidFunction;\n onScreenSelect: (screen: ManagementScreens) => void;\n isActive: boolean;\n};\n\ntype StateProps = {\n editingInvite?: ApiExportedInvite;\n serverTimeOffset: number;\n};\n\nconst ManageInvite: FC = ({\n chatId,\n editingInvite,\n isActive,\n serverTimeOffset,\n onClose,\n onScreenSelect,\n}) => {\n const { editExportedChatInvite, exportChatInvite } = getActions();\n\n const lang = useLang();\n const [isCalendarOpened, openCalendar, closeCalendar] = useFlag();\n const [isRequestNeeded, setIsRequestNeeded] = useState(false);\n const [title, setTitle] = useState('');\n const [customExpireDate, setCustomExpireDate] = useState(Date.now() + DEFAULT_CUSTOM_EXPIRE_DATE);\n const [selectedExpireOption, setSelectedExpireOption] = useState('unlimited');\n const [customUsageLimit, setCustomUsageLimit] = useState(10);\n const [selectedUsageOption, setSelectedUsageOption] = useState('0');\n const [isSubmitBlocked, setIsSubmitBlocked] = useState(false);\n\n useHistoryBack(isActive, onClose);\n\n useOnChange(([oldEditingInvite]) => {\n if (oldEditingInvite === editingInvite) return;\n if (!editingInvite) {\n setTitle('');\n setSelectedExpireOption('unlimited');\n setSelectedUsageOption('0');\n setCustomExpireDate(getServerTime(serverTimeOffset) * 1000 + DEFAULT_CUSTOM_EXPIRE_DATE);\n setCustomUsageLimit(10);\n setIsRequestNeeded(false);\n } else {\n const {\n title: editingTitle, usageLimit, expireDate, isRequestNeeded: editingIsRequestNeeded,\n } = editingInvite;\n if (editingTitle) setTitle(editingTitle);\n if (usageLimit) {\n setSelectedUsageOption(DEFAULT_USAGE_LIMITS.includes(usageLimit) ? usageLimit.toString() : 'custom');\n setCustomUsageLimit(usageLimit);\n }\n if (expireDate) {\n const minSafeDate = getServerTime(serverTimeOffset) + DEFAULT_CUSTOM_EXPIRE_DATE;\n setSelectedExpireOption('custom');\n setCustomExpireDate(Math.max(expireDate, minSafeDate) * 1000);\n }\n if (editingIsRequestNeeded) {\n setIsRequestNeeded(true);\n }\n }\n }, [editingInvite, serverTimeOffset]);\n\n const handleIsRequestChange = useCallback((e: ChangeEvent) => {\n setIsRequestNeeded(e.target.checked);\n }, []);\n\n const handleTitleChange = useCallback((e: ChangeEvent) => {\n setTitle(e.target.value);\n }, []);\n\n const handleCustomUsageLimitChange = useCallback((e: ChangeEvent) => {\n setCustomUsageLimit(Number.parseInt(e.target.value, 10));\n }, []);\n\n const handleExpireDateChange = useCallback((date: Date) => {\n setCustomExpireDate(date.getTime());\n closeCalendar();\n }, [closeCalendar]);\n\n const handleSaveClick = useCallback(() => {\n setIsSubmitBlocked(true);\n const usageLimit = selectedUsageOption === 'custom' ? customUsageLimit : selectedUsageOption;\n let expireDate;\n switch (selectedExpireOption) {\n case 'custom':\n expireDate = getServerTime(serverTimeOffset) + (customExpireDate - Date.now()) / 1000;\n break;\n case 'hour':\n case 'day':\n case 'week':\n expireDate = getServerTime(serverTimeOffset) + DEFAULT_EXPIRE_DATE[selectedExpireOption] / 1000;\n break;\n case 'unlimited':\n default:\n expireDate = undefined;\n }\n\n if (editingInvite) {\n editExportedChatInvite({\n link: editingInvite.link,\n chatId,\n title,\n isRequestNeeded,\n expireDate,\n usageLimit,\n });\n } else {\n exportChatInvite({\n chatId,\n title,\n isRequestNeeded,\n expireDate,\n usageLimit,\n });\n }\n onScreenSelect(ManagementScreens.Invites);\n }, [\n chatId, customExpireDate, customUsageLimit, editExportedChatInvite, editingInvite,\n exportChatInvite, isRequestNeeded, selectedExpireOption, selectedUsageOption, title, onScreenSelect,\n serverTimeOffset,\n ]);\n\n return (\n
\n
\n
\n \n
\n
\n \n

{lang('LinkNameHelp')}

\n
\n
\n
{lang('LimitByPeriod')}
\n \n {selectedExpireOption === 'custom' && (\n \n )}\n

{lang('TimeLimitHelp')}

\n
\n {!isRequestNeeded && (\n
\n
{lang('LimitNumberOfUses')}
\n ({ value: n.toString(), label: n })),\n {\n value: '0',\n label: lang('NoLimit'),\n },\n {\n value: 'custom',\n label: lang('lng_group_invite_usage_custom'),\n },\n ]}\n onChange={setSelectedUsageOption}\n selected={selectedUsageOption}\n />\n {selectedUsageOption === 'custom' && (\n \n )}\n

{lang('UsesLimitHelp')}

\n
\n )}\n \n \n \n
\n \n
\n );\n};\n\nexport default memo(withGlobal(\n (global, { chatId }): StateProps => {\n const { editingInvite } = global.management.byChatId[chatId];\n\n return {\n editingInvite,\n serverTimeOffset: global.serverTimeOffset,\n };\n },\n)(ManageInvite));\n","import React, {\n FC, memo, useCallback, useEffect, useState,\n} from '../../../lib/teact/teact';\nimport { getActions, withGlobal } from '../../../global';\n\nimport { ApiAvailableReaction, ApiChat } from '../../../api/types';\n\nimport { selectChat } from '../../../global/selectors';\nimport useLang from '../../../hooks/useLang';\nimport useHistoryBack from '../../../hooks/useHistoryBack';\n\nimport ReactionStaticEmoji from '../../common/ReactionStaticEmoji';\nimport Checkbox from '../../ui/Checkbox';\nimport FloatingActionButton from '../../ui/FloatingActionButton';\nimport Spinner from '../../ui/Spinner';\n\ntype OwnProps = {\n chatId: string;\n onClose: NoneToVoidFunction;\n isActive: boolean;\n};\n\ntype StateProps = {\n chat?: ApiChat;\n availableReactions?: ApiAvailableReaction[];\n enabledReactions?: string[];\n};\n\nconst ManageReactions: FC = ({\n availableReactions,\n enabledReactions,\n chat,\n isActive,\n onClose,\n}) => {\n const { setChatEnabledReactions } = getActions();\n\n const lang = useLang();\n const [isTouched, setIsTouched] = useState(false);\n const [isLoading, setIsLoading] = useState(false);\n const [localEnabledReactions, setLocalEnabledReactions] = useState(enabledReactions || []);\n\n useHistoryBack(isActive, onClose);\n\n const handleSaveReactions = useCallback(() => {\n if (!chat) return;\n setIsLoading(true);\n\n setChatEnabledReactions({\n chatId: chat.id,\n enabledReactions: localEnabledReactions,\n });\n }, [chat, localEnabledReactions, setChatEnabledReactions]);\n\n useEffect(() => {\n if (enabledReactions) {\n setIsLoading(false);\n setIsTouched(false);\n setLocalEnabledReactions(enabledReactions);\n }\n }, [enabledReactions]);\n\n const handleReactionChange = useCallback((e: React.ChangeEvent) => {\n if (!chat || !availableReactions) return;\n\n const { name, checked } = e.currentTarget;\n const newEnabledReactions = name === 'all' ? (checked ? availableReactions.map((l) => l.reaction) : [])\n : (!checked\n ? localEnabledReactions.filter((l) => l !== name)\n : [...localEnabledReactions, name]);\n\n setLocalEnabledReactions(newEnabledReactions);\n setIsTouched(true);\n }, [availableReactions, chat, localEnabledReactions]);\n\n return (\n
\n
\n
\n
\n 0}\n label={lang('EnableReactions')}\n onChange={handleReactionChange}\n />\n
\n {availableReactions?.filter((l) => !l.isInactive).map(({ reaction, title }) => (\n
\n \n \n {title}\n
\n )}\n onChange={handleReactionChange}\n />\n
\n ))}\n
\n
\n\n \n {isLoading ? (\n \n ) : (\n \n )}\n \n
\n );\n};\n\nexport default memo(withGlobal(\n (global, { chatId }): StateProps => {\n const chat = selectChat(global, chatId)!;\n\n return {\n enabledReactions: chat.fullInfo?.enabledReactions,\n availableReactions: global.availableReactions,\n chat,\n };\n },\n)(ManageReactions));\n","import React, {\n FC, memo, useCallback, useEffect,\n} from '../../../lib/teact/teact';\nimport { getActions, withGlobal } from '../../../global';\n\nimport { ApiChatInviteImporter, ApiExportedInvite, ApiUser } from '../../../api/types';\n\nimport useHistoryBack from '../../../hooks/useHistoryBack';\nimport useLang from '../../../hooks/useLang';\nimport { copyTextToClipboard } from '../../../util/clipboard';\nimport { getServerTime } from '../../../util/serverTime';\nimport { formatFullDate, formatMediaDateTime, formatTime } from '../../../util/dateFormat';\nimport { isChatChannel } from '../../../global/helpers';\nimport { selectChat } from '../../../global/selectors';\n\nimport PrivateChatInfo from '../../common/PrivateChatInfo';\nimport ListItem from '../../ui/ListItem';\nimport Button from '../../ui/Button';\nimport Spinner from '../../ui/Spinner';\n\ntype OwnProps = {\n chatId: string;\n onClose: NoneToVoidFunction;\n isActive: boolean;\n};\n\ntype StateProps = {\n invite?: ApiExportedInvite;\n importers?: ApiChatInviteImporter[];\n requesters?: ApiChatInviteImporter[];\n admin?: ApiUser;\n isChannel?: boolean;\n serverTimeOffset: number;\n};\n\nconst ManageInviteInfo: FC = ({\n chatId,\n invite,\n importers,\n requesters,\n isChannel,\n isActive,\n serverTimeOffset,\n onClose,\n}) => {\n const {\n showNotification,\n loadChatInviteImporters,\n loadChatInviteRequesters,\n openChat,\n } = getActions();\n\n const lang = useLang();\n const {\n usage = 0, usageLimit, link, adminId,\n } = invite || {};\n const expireDate = invite?.expireDate && (invite.expireDate - getServerTime(serverTimeOffset)) * 1000 + Date.now();\n const isExpired = ((invite?.expireDate || 0) - getServerTime(serverTimeOffset)) < 0;\n\n useEffect(() => {\n if (link) {\n loadChatInviteImporters({ chatId, link });\n loadChatInviteRequesters({ chatId, link });\n }\n }, [chatId, link, loadChatInviteImporters, loadChatInviteRequesters]);\n\n const handleCopyClicked = useCallback(() => {\n copyTextToClipboard(invite!.link);\n showNotification({\n message: lang('LinkCopied'),\n });\n }, [invite, lang, showNotification]);\n\n useHistoryBack(isActive, onClose);\n\n const renderImporters = () => {\n if (!importers?.length && requesters?.length) return undefined;\n if (!importers) return ;\n return (\n
\n

{importers.length ? lang('PeopleJoined', usage) : lang('NoOneJoined')}

\n

\n {!importers.length && (\n usageLimit ? lang('PeopleCanJoinViaLinkCount', usageLimit - usage) : lang('NoOneJoinedYet')\n )}\n {importers.map((importer) => (\n openChat({ id: importer.userId })}\n >\n \n \n ))}\n

\n
\n );\n };\n\n const renderRequesters = () => {\n if (invite?.isRevoked) return undefined;\n if (!requesters && importers) return ;\n if (!requesters?.length) return undefined;\n return (\n
\n

{isChannel ? lang('SubscribeRequests') : lang('MemberRequests')}

\n

\n {requesters.map((requester) => (\n openChat({ id: requester.userId })}\n >\n \n \n ))}\n

\n
\n );\n };\n\n return (\n
\n
\n {!invite && (\n

{lang('Loading')}

\n )}\n {invite && (\n <>\n
\n

{invite.title || invite.link}

\n \n \n {expireDate && (\n

\n {isExpired\n ? lang('ExpiredLink')\n : lang('LinkExpiresIn', `${formatFullDate(lang, expireDate)} ${formatTime(lang, expireDate)}`)}\n

\n )}\n
\n {adminId && (\n
\n

{lang('LinkCreatedeBy')}

\n openChat({ id: adminId })}\n >\n \n \n
\n )}\n {renderImporters()}\n {renderRequesters()}\n \n )}\n
\n
\n );\n};\n\nexport default memo(withGlobal(\n (global, { chatId }): StateProps => {\n const { inviteInfo } = global.management.byChatId[chatId];\n const { invite, importers, requesters } = inviteInfo || {};\n const chat = selectChat(global, chatId);\n const isChannel = chat && isChatChannel(chat);\n\n return {\n invite,\n importers,\n requesters,\n isChannel,\n serverTimeOffset: global.serverTimeOffset,\n };\n },\n)(ManageInviteInfo));\n","import React, { FC, memo, useCallback } from '../../../lib/teact/teact';\nimport { getActions, withGlobal } from '../../../global';\n\nimport { ApiUser } from '../../../api/types';\n\nimport useLang from '../../../hooks/useLang';\nimport { getUserFullName } from '../../../global/helpers';\nimport { selectUser } from '../../../global/selectors';\nimport { formatHumanDate, formatTime, isToday } from '../../../util/dateFormat';\nimport { getServerTime } from '../../../util/serverTime';\nimport { createClassNameBuilder } from '../../../util/buildClassName';\n\nimport Avatar from '../../common/Avatar';\nimport Button from '../../ui/Button';\n\nimport './JoinRequest.scss';\n\ntype OwnProps = {\n userId: string;\n about?: string;\n isChannel?: boolean;\n date: number;\n chatId: string;\n};\n\ntype StateProps = {\n user?: ApiUser;\n isSavedMessages?: boolean;\n serverTimeOffset: number;\n};\n\nconst JoinRequest: FC = ({\n userId,\n about,\n date,\n isChannel,\n user,\n serverTimeOffset,\n chatId,\n}) => {\n const { openChat, hideChatJoinRequest } = getActions();\n\n const buildClassName = createClassNameBuilder('JoinRequest');\n const lang = useLang();\n\n const fullName = getUserFullName(user);\n const fixedDate = (date - getServerTime(serverTimeOffset)) * 1000 + Date.now();\n\n const dateString = isToday(new Date(fixedDate))\n ? formatTime(lang, fixedDate) : formatHumanDate(lang, fixedDate, true, false, true);\n\n const handleUserClick = () => {\n openChat({ id: userId });\n };\n\n const handleAcceptRequest = useCallback(() => {\n hideChatJoinRequest({ chatId, userId, isApproved: true });\n }, [chatId, hideChatJoinRequest, userId]);\n\n const handleRejectRequest = useCallback(() => {\n hideChatJoinRequest({ chatId, userId, isApproved: false });\n }, [chatId, hideChatJoinRequest, userId]);\n\n return (\n
\n
\n
\n \n
\n
{fullName}
\n
{about}
\n
\n
\n
{dateString}
\n
\n
\n \n \n
\n
\n );\n};\n\nexport default memo(withGlobal(\n (global, { userId }): StateProps => {\n const user = selectUser(global, userId);\n\n return {\n user,\n serverTimeOffset: global.serverTimeOffset,\n };\n },\n)(JoinRequest));\n","import React, {\n FC, memo, useCallback, useEffect, useState,\n} from '../../../lib/teact/teact';\nimport { getActions, withGlobal } from '../../../global';\n\nimport { ApiChat } from '../../../api/types';\n\nimport { STICKER_SIZE_JOIN_REQUESTS } from '../../../config';\nimport useHistoryBack from '../../../hooks/useHistoryBack';\nimport { selectChat } from '../../../global/selectors';\nimport { isChatChannel, isUserId } from '../../../global/helpers';\nimport useLang from '../../../hooks/useLang';\nimport useFlag from '../../../hooks/useFlag';\nimport getAnimationData from '../../common/helpers/animatedAssets';\n\nimport JoinRequest from './JoinRequest';\nimport Button from '../../ui/Button';\nimport ConfirmDialog from '../../ui/ConfirmDialog';\nimport AnimatedSticker from '../../common/AnimatedSticker';\nimport Spinner from '../../ui/Spinner';\n\ntype OwnProps = {\n chatId: string;\n onClose: NoneToVoidFunction;\n isActive: boolean;\n};\n\ntype StateProps = {\n chat?: ApiChat;\n isChannel?: boolean;\n serverTimeOffset: number;\n};\n\nconst ManageJoinRequests: FC = ({\n chat,\n chatId,\n isActive,\n isChannel,\n onClose,\n}) => {\n const { hideAllChatJoinRequests, loadChatJoinRequests } = getActions();\n const [isAcceptAllDialogOpen, openAcceptAllDialog, closeAcceptAllDialog] = useFlag();\n const [isRejectAllDialogOpen, openRejectAllDialog, closeRejectAllDialog] = useFlag();\n\n const lang = useLang();\n\n const [animationData, setAnimationData] = useState();\n const [isAnimationLoaded, setIsAnimationLoaded] = useState(false);\n const handleAnimationLoad = useCallback(() => setIsAnimationLoaded(true), []);\n\n useEffect(() => {\n if (!animationData) {\n getAnimationData('JoinRequest').then(setAnimationData);\n }\n }, [animationData]);\n\n useHistoryBack(isActive, onClose);\n\n useEffect(() => {\n if (!chat?.joinRequests && !isUserId(chatId)) {\n loadChatJoinRequests({ chatId });\n }\n }, [chat, chatId, loadChatJoinRequests]);\n\n const handleAcceptAllRequests = useCallback(() => {\n hideAllChatJoinRequests({ chatId, isApproved: true });\n closeAcceptAllDialog();\n }, [hideAllChatJoinRequests, chatId, closeAcceptAllDialog]);\n\n const handleRejectAllRequests = useCallback(() => {\n hideAllChatJoinRequests({ chatId, isApproved: false });\n closeRejectAllDialog();\n }, [hideAllChatJoinRequests, chatId, closeRejectAllDialog]);\n\n return (\n
\n
\n
\n {animationData && (\n \n )}\n
\n {Boolean(chat?.joinRequests?.length) && (\n
\n \n \n
\n )}\n
\n
\n
\n

\n {!chat?.joinRequests ? lang('Loading') : chat.joinRequests.length\n ? lang('JoinRequests', chat.joinRequests.length) : lang('NoMemberRequests')}\n

\n {!chat?.joinRequests && (\n \n )}\n {chat?.joinRequests?.length === 0 && (\n

\n {isChannel ? lang('NoSubscribeRequestsDescription') : lang('NoMemberRequestsDescription')}\n

\n )}\n {chat?.joinRequests?.map(({ userId, about, date }) => (\n \n ))}\n
\n
\n \n \n
\n );\n};\n\nexport default memo(withGlobal(\n (global, { chatId }): StateProps => {\n const chat = selectChat(global, chatId);\n\n return {\n chat,\n serverTimeOffset: global.serverTimeOffset,\n isChannel: chat && isChatChannel(chat),\n };\n },\n)(ManageJoinRequests));\n","import React, { FC, memo } from '../../../lib/teact/teact';\nimport { withGlobal } from '../../../global';\n\nimport { ManagementScreens, ManagementType } from '../../../types';\n\nimport { selectCurrentManagementType } from '../../../global/selectors';\n\nimport ManageUser from './ManageUser';\nimport ManageGroup from './ManageGroup';\nimport ManageGroupPermissions from './ManageGroupPermissions';\nimport ManageChatRemovedUsers from './ManageChatRemovedUsers';\nimport ManageChannel from './ManageChannel';\nimport ManageChatPrivacyType from './ManageChatPrivacyType';\nimport ManageDiscussion from './ManageDiscussion';\nimport ManageGroupUserPermissions from './ManageGroupUserPermissions';\nimport ManageChatAdministrators from './ManageChatAdministrators';\nimport ManageGroupRecentActions from './ManageGroupRecentActions';\nimport ManageGroupAdminRights from './ManageGroupAdminRights';\nimport ManageGroupMembers from './ManageGroupMembers';\nimport ManageGroupUserPermissionsCreate from './ManageGroupUserPermissionsCreate';\nimport ManageInvites from './ManageInvites';\nimport ManageInvite from './ManageInvite';\nimport ManageReactions from './ManageReactions';\nimport ManageInviteInfo from './ManageInviteInfo';\nimport ManageJoinRequests from './ManageJoinRequests';\n\nexport type OwnProps = {\n chatId: string;\n currentScreen: ManagementScreens;\n selectedChatMemberId?: string;\n isPromotedByCurrentUser?: boolean;\n onScreenSelect: (screen: ManagementScreens) => void;\n onChatMemberSelect: (memberId: string, isPromotedByCurrentUser?: boolean) => void;\n onClose: NoneToVoidFunction;\n isActive: boolean;\n};\n\ntype StateProps = {\n managementType?: ManagementType;\n};\n\nconst Management: FC = ({\n chatId,\n currentScreen,\n selectedChatMemberId,\n isPromotedByCurrentUser,\n onScreenSelect,\n onChatMemberSelect,\n onClose,\n isActive,\n managementType,\n}) => {\n switch (currentScreen) {\n case ManagementScreens.Initial: {\n switch (managementType) {\n case 'user':\n return (\n \n );\n case 'group':\n return (\n \n );\n case 'channel':\n return (\n \n );\n }\n\n break;\n }\n\n case ManagementScreens.ChatPrivacyType:\n return (\n \n );\n\n case ManagementScreens.Discussion:\n return (\n \n );\n\n case ManagementScreens.GroupPermissions:\n return (\n \n );\n\n case ManagementScreens.ChannelRemovedUsers:\n case ManagementScreens.GroupRemovedUsers:\n return (\n \n );\n\n case ManagementScreens.GroupUserPermissionsCreate:\n return (\n \n );\n\n case ManagementScreens.GroupUserPermissions:\n return (\n \n );\n\n case ManagementScreens.ChatAdministrators:\n return (\n \n );\n\n case ManagementScreens.GroupRecentActions:\n return (\n \n );\n\n case ManagementScreens.ChatNewAdminRights:\n case ManagementScreens.ChatAdminRights:\n return (\n \n );\n\n case ManagementScreens.ChannelSubscribers:\n case ManagementScreens.GroupMembers:\n return (\n \n );\n case ManagementScreens.Invites:\n return (\n \n );\n case ManagementScreens.EditInvite:\n return (\n \n );\n case ManagementScreens.GroupAddAdmins:\n return (\n \n );\n\n case ManagementScreens.Reactions:\n return (\n \n );\n case ManagementScreens.InviteInfo:\n return (\n \n );\n case ManagementScreens.JoinRequests:\n return (\n \n );\n }\n\n return undefined; // Never reached\n};\n\nexport default memo(withGlobal(\n (global): StateProps => {\n const managementType = selectCurrentManagementType(global);\n\n return {\n managementType,\n };\n },\n)(Management));\n","const VISA = /^4[0-9]{12}(?:[0-9]{1,3})?$/;\nconst MASTERCARD1 = /^5[1-5][0-9]{11,14}$/;\nconst MASTERCARD2 = /^2[2-7][0-9]{11,14}$/;\n\nexport enum CardType {\n Default,\n Visa,\n Mastercard,\n}\n\nconst cards: Record = {\n [CardType.Default]: '',\n [CardType.Visa]: 'visa',\n [CardType.Mastercard]: 'mastercard',\n};\n\nexport function detectCardType(cardNumber: string): number {\n cardNumber = cardNumber.replace(/\\s/g, '');\n if (VISA.test(cardNumber)) {\n return CardType.Visa;\n }\n if (MASTERCARD1.test(cardNumber) || MASTERCARD2.test(cardNumber)) {\n return CardType.Mastercard;\n }\n return CardType.Default;\n}\n\nexport function detectCardTypeText(cardNumber: string): string {\n const cardType = detectCardType(cardNumber);\n return cards[cardType as number] || '';\n}\n","// This data was received from Telegram Desktop (Telegram/Resources/numbers.txt)\nconst DATA = `AF🇦🇫93Afghanistan333\nAO🇦🇴244Angola333\nAL🇦🇱355Albania234\nAD🇦🇩376Andorra222\nAE🇦🇪971United Arab Emirates234\nAI🇦🇮1264Anguilla34\nAR🇦🇷54Argentina\nAM🇦🇲374Armenia233\nAG🇦🇬1268Antigua and Barbuda34\nAU🇦🇺61Australia333\nAS🇦🇸1684American Samoa34\nAT🇦🇹43Austria\nAW🇦🇼297Aruba34\nAZ🇦🇿994Azerbaijan2322\nBI🇧🇮257Burundi224\nBE🇧🇪32Belgium3222\nBJ🇧🇯229Benin233\nBF🇧🇫226Burkina Faso2222\nBD🇧🇩880Bangladesh\nBG🇧🇬359Bulgaria\nBH🇧🇭973Bahrain44\nBS🇧🇸1242Bahamas34\nBA🇧🇦387Bosnia and Herzegovina\nBY🇧🇾375Belarus2322\nBZ🇧🇿501Belize\nBO🇧🇴591Bolivia134\nBR🇧🇷55Brazil254\nBB🇧🇧1246Barbados34\nBM🇧🇲1441Bermuda34\nBN🇧🇳673Brunei34\nBQ🇧🇶599Bonaire, Sint Eustatius and Saba\nBT🇧🇹975Bhutan\nBW🇧🇼267Botswana233\nCF🇨🇫236Central African Republic2222\nCA🇨🇦1Canada334\nCH🇨🇭41Switzerland234\nCK🇨🇰682Cook Islands\nCL🇨🇱56Chile144\nCN🇨🇳86China344\nCI🇨🇮225Côte d\\`Ivoire233\nCM🇨🇲237Cameroon44\nCD🇨🇩243DR Congo234\nCG🇨🇬242Republic of the Congo234\nCO🇨🇴57Colombia334\nKM🇰🇲269Comoros34\nCV🇨🇻238Cape Verde34\nCR🇨🇷506Costa Rica\nCU🇨🇺53Cuba44\nCY🇨🇾357Cyprus44\nCW🇨🇼599Curaçao\nCZ🇨🇿420Czech Republic\nDE🇩🇪49Germany38\nDJ🇩🇯253Djibouti2222\nDM🇩🇲1767Dominica34\nDK🇩🇰45Denmark44\nDO🇩🇴1Dominican Republic334\nDZ🇩🇿213Algeria3222\nEC🇪🇨593Ecuador\nEG🇪🇬20Egypt234\nER🇪🇷291Eritrea133\nES🇪🇸34Spain333\nEE🇪🇪372Estonia\nET🇪🇹251Ethiopia234\nFI🇫🇮358Finland\nFJ🇫🇯679Fiji\nFK🇫🇰500Falkland Islands\nFM🇫🇲691Micronesia\nFO🇫🇴298Faroe Islands33\nFR🇫🇷33France12222\nGA🇬🇦241Gabon1222\nGB🇬🇧44United Kingdom46\nGE🇬🇪995Georgia\nGF🇬🇫594French Guiana\nGH🇬🇭233Ghana\nGI🇬🇮350Gibraltar44\nGL🇬🇱299Greenland33\nGN🇬🇳224Guinea333\nGM🇬🇲220Gambia34\nGP🇬🇵590Guadeloupe\nGU🇬🇺1671Guam34\nGW🇬🇼245Guinea-Bissau34\nGQ🇬🇶240Equatorial Guinea333\nGR🇬🇷30Greece244\nGD🇬🇩1473Grenada34\nGT🇬🇹502Guatemala134\nGY🇬🇾592Guyana\nHK🇭🇰852Hong Kong\nHN🇭🇳504Honduras44\nHR🇭🇷385Croatia\nHT🇭🇹509Haiti\nHU🇭🇺36Hungary234\nID🇮🇩62Indonesia\nIN🇮🇳91India55\nIO🇩🇬246Diego Garcia34\nIE🇮🇪353Ireland234\nIR🇮🇷98Iran334\nIQ🇮🇶964Iraq334\nIS🇮🇸354Iceland34\nIL🇮🇱972Israel234\nIT🇮🇹39Italy334\nJM🇯🇲1876Jamaica34\nJO🇯🇴962Jordan144\nJP🇯🇵81Japan244\nKZ🇰🇿7Kazakhstan3322\nKE🇰🇪254Kenya333\nKG🇰🇬996Kyrgyzstan\nKH🇰🇭855Cambodia\nKI🇰🇮686Kiribati\nKN🇰🇳1869Saint Kitts and Nevis34\nKR🇰🇷82South Korea\nKW🇰🇼965Kuwait44\nKY🇰🇾1345Cayman Islands34\nLA🇱🇦856Laos\nLB🇱🇧961Lebanon\nLR🇱🇷231Liberia\nLY🇱🇾218Libya234\nLC🇱🇨1758Saint Lucia34\nLI🇱🇮423Liechtenstein\nLK🇱🇰94Sri Lanka234\nLS🇱🇸266Lesotho233\nLT🇱🇹370Lithuania35\nLU🇱🇺352Luxembourg\nLV🇱🇻371Latvia35\nMA🇲🇦212Morocco234\nMC🇲🇨377Monaco44\nMD🇲🇩373Moldova233\nMG🇲🇬261Madagascar2232\nMP🇲🇵1670Northern Mariana Islands34\nMO🇲🇴853Macau\nMS🇲🇸1664Montserrat34\nMV🇲🇻960Maldives\nMX🇲🇽52Mexico\nMH🇲🇭692Marshall Islands\nMK🇲🇰389Macedonia\nML🇲🇱223Mali44\nMT🇲🇹356Malta2222\nMM🇲🇲95Myanmar\nME🇲🇪382Montenegro\nMN🇲🇳976Mongolia\nMZ🇲🇿258Mozambique234\nMQ🇲🇶596Martinique\nMR🇲🇷222Mauritania44\nMU🇲🇺230Mauritius\nMW🇲🇼265Malawi\nMY🇲🇾60Malaysia\nNA🇳🇦264Namibia234\nNC🇳🇨687New Caledonia6\nNE🇳🇪227Niger2222\nNF🇳🇫672Norfolk Island\nNG🇳🇬234Nigeria\nNI🇳🇮505Nicaragua44\nNL🇳🇱31Netherlands12222\nNO🇳🇴47Norway44\nNP🇳🇵977Nepal\nNU🇳🇺683Niue\nNR🇳🇷674Nauru\nNZ🇳🇿64New Zealand\nOM🇴🇲968Oman44\nPK🇵🇰92Pakistan334\nPA🇵🇦507Panama44\nPE🇵🇪51Peru333\nPF🇵🇫689French Polynesia\nPH🇵🇭63Philippines334\nPM🇵🇲508Saint Pierre and Miquelon\nPR🇵🇷1Puerto Rico334\nPS🇵🇸970Palestine324\nPW🇵🇼680Palau\nPG🇵🇬675Papua New Guinea\nPL🇵🇱48Poland333\nKP🇰🇵850North Korea\nPT🇵🇹351Portugal144\nPY🇵🇾595Paraguay333\nQA🇶🇦974Qatar\nRE🇷🇪262Réunion333\nRO🇷🇴40Romania333\nRU🇷🇺7Russia3322\nRW🇷🇼250Rwanda333\nSA🇸🇦966Saudi Arabia\nSD🇸🇩249Sudan234\nSN🇸🇳221Senegal234\nSG🇸🇬65Singapore44\nSH🇸🇭290Saint Helena23\nSH🇸🇭247Saint Helena4\nSB🇸🇧677Solomon Islands\nSL🇸🇱232Sierra Leone233\nSV🇸🇻503El Salvador44\nSM🇸🇲378San Marino334\nSO🇸🇴252Somalia233\nRS🇷🇸381Serbia234\nSS🇸🇸211South Sudan234\nST🇸🇹239São Tomé and Príncipe25\nSR🇸🇷597Suriname34\nSK🇸🇰421Slovakia\nSI🇸🇮386Slovenia\nSE🇸🇪46Sweden234\nSZ🇸🇿268Swaziland44\nSC🇸🇨248Seychelles1222\nSX🇸🇽1721Sint Maarten34\nSY🇸🇾963Syria\nTC🇹🇨1649Turks and Caicos Islands34\nTD🇹🇩235Chad2222\nTG🇹🇬228Togo233\nTH🇹🇭66Thailand144\nTJ🇹🇯992Tajikistan\nTK🇹🇰690Tokelau\nTM🇹🇲993Turkmenistan26\nTL🇹🇱670Timor-Leste\nTO🇹🇴676Tonga\nTT🇹🇹1868Trinidad and Tobago34\nTN🇹🇳216Tunisia233\nTR🇹🇷90Turkey334\nTV🇹🇻688Tuvalu\nTW🇹🇼886Taiwan\nTZ🇹🇿255Tanzania234\nUG🇺🇬256Uganda234\nUA🇺🇦380Ukraine2322\nUY🇺🇾598Uruguay44\nUS🇺🇸1United States334\nUZ🇺🇿998Uzbekistan27\nVA🇻🇦3Vatican City\nVC🇻🇨1784Saint Vincent and the Grenadines34\nVE🇻🇪58Venezuela334\nVG🇻🇬1284British Virgin Islands34\nVI🇻🇮1340US Virgin Islands34\nVN🇻🇳84Vietnam\nVU🇻🇺678Vanuatu\nWF🇼🇫681Wallis and Futuna\nWS🇼🇸685Samoa\nXK🇽🇰383Kosovo44\nYE🇾🇪967Yemen333\nZA🇿🇦27South Africa234\nZM🇿🇲260Zambia234\nZW🇿🇼263Zimbabwe234`;\n\nconst formatsCache: Record = {};\nexport const defaultPhoneNumberFormat = /(\\d{1,3})(\\d{1,3})?(\\d{1,3})?(\\d{1,3})?(\\d{1,3})?/;\n\nconst parsed = DATA\n .split('\\n')\n .map((str) => {\n const id = str.substr(0, 2);\n const flag = str.substr(2, 4);\n const code = `+${str.match(/\\d+/)![0]}`;\n const name = str.split(/\\d+/)[1];\n const format = str.match(/\\d+$/);\n const phoneFormat = getPhoneNumberFormat(format);\n\n return {\n id, flag, code, name, phoneFormat,\n };\n });\n\nfunction getPhoneNumberFormat(format: RegExpMatchArray | null) {\n if (!format) {\n return defaultPhoneNumberFormat;\n }\n\n const formatValue = format[0] as string;\n let phoneNumberFormat;\n\n if (!formatsCache[formatValue]) {\n const phoneNumberGroups = formatValue.split('').map(Number);\n phoneNumberFormat = phoneNumberGroups.reduce((result, count, i) => {\n return `${result}(\\\\d{1,${count}})${i > 0 ? '?' : ''}`;\n }, '');\n formatsCache[formatValue] = new RegExp(`${phoneNumberFormat}${'()?'.repeat(5 - phoneNumberGroups.length)}`);\n }\n\n return formatsCache[formatValue];\n}\n\nexport default parsed;\n","import useReducer, { StateReducer, Dispatch } from '../useReducer';\nimport countryList from '../../util/countries';\n\nexport type FormState = {\n streetLine1: string;\n streetLine2: string;\n city: string;\n state: string;\n countryIso2: string;\n postCode: string;\n fullName: string;\n email: string;\n phone: string;\n shipping: string;\n cardNumber: string;\n cardholder: string;\n expiry: string;\n cvv: string;\n billingCountry: string;\n billingZip: string;\n saveInfo: boolean;\n saveCredentials: boolean;\n formErrors: Record;\n};\n\nexport type FormActions = (\n 'changeAddress1' | 'changeAddress2' | 'changeCity' | 'changeState' | 'changeCountry' |\n 'changePostCode' | 'changeFullName' | 'changeEmail' | 'changePhone' | 'changeShipping' | 'updateUserInfo' |\n 'changeCardNumber' | 'changeCardholder' | 'changeExpiryDate' | 'changeCvvCode' | 'changeBillingCountry' |\n 'changeBillingZip' | 'changeSaveInfo' | 'changeSaveCredentials' | 'setFormErrors'\n);\nexport type FormEditDispatch = Dispatch;\n\nconst INITIAL_STATE: FormState = {\n streetLine1: '',\n streetLine2: '',\n city: '',\n state: '',\n countryIso2: '',\n postCode: '',\n fullName: '',\n email: '',\n phone: '',\n shipping: '',\n cardNumber: '',\n cardholder: '',\n expiry: '',\n cvv: '',\n billingCountry: '',\n billingZip: '',\n saveInfo: true,\n saveCredentials: false,\n formErrors: {},\n};\n\nconst reducer: StateReducer = (state, action) => {\n switch (action.type) {\n case 'changeAddress1':\n return {\n ...state,\n streetLine1: action.payload,\n formErrors: {\n ...state.formErrors,\n streetLine1: undefined,\n },\n };\n case 'changeAddress2':\n return {\n ...state,\n streetLine2: action.payload,\n formErrors: {\n ...state.formErrors,\n streetLine2: undefined,\n },\n };\n case 'changeCity':\n return {\n ...state,\n city: action.payload,\n formErrors: {\n ...state.formErrors,\n city: undefined,\n },\n };\n case 'changeState':\n return {\n ...state,\n state: action.payload,\n formErrors: {\n ...state.formErrors,\n state: undefined,\n },\n };\n case 'changeCountry':\n return {\n ...state,\n countryIso2: action.payload,\n billingCountry: getBillingCountry(action.payload),\n formErrors: {\n ...state.formErrors,\n countryIso2: undefined,\n },\n };\n case 'changePostCode':\n return {\n ...state,\n postCode: action.payload,\n formErrors: {\n ...state.formErrors,\n postCode: undefined,\n },\n };\n case 'changeFullName':\n return {\n ...state,\n fullName: action.payload,\n formErrors: {\n ...state.formErrors,\n fullName: undefined,\n },\n };\n case 'changeEmail':\n return {\n ...state,\n email: action.payload,\n formErrors: {\n ...state.formErrors,\n email: undefined,\n },\n };\n case 'changePhone':\n return {\n ...state,\n phone: action.payload,\n formErrors: {\n ...state.formErrors,\n phone: undefined,\n },\n };\n case 'changeShipping':\n return { ...state, shipping: action.payload };\n case 'changeCardNumber':\n return {\n ...state,\n cardNumber: action.payload,\n formErrors: {\n ...state.formErrors,\n cardNumber: undefined,\n },\n };\n case 'changeCardholder':\n return {\n ...state,\n cardholder: action.payload,\n formErrors: {\n ...state.formErrors,\n cardholder: undefined,\n },\n };\n case 'changeExpiryDate':\n return {\n ...state,\n expiry: action.payload,\n formErrors: {\n ...state.formErrors,\n expiry: undefined,\n },\n };\n case 'changeCvvCode':\n return {\n ...state,\n cvv: action.payload,\n formErrors: {\n ...state.formErrors,\n cvv: undefined,\n },\n };\n case 'changeBillingCountry':\n return {\n ...state,\n billingCountry: action.payload,\n formErrors: {\n ...state.formErrors,\n billingCountry: undefined,\n },\n };\n case 'changeBillingZip':\n return {\n ...state,\n billingZip: action.payload,\n formErrors: {\n ...state.formErrors,\n billingZip: undefined,\n },\n };\n case 'changeSaveInfo':\n return { ...state, saveInfo: action.payload };\n case 'changeSaveCredentials':\n return { ...state, saveCredentials: action.payload };\n case 'updateUserInfo':\n if (action.payload.countryIso2) {\n return {\n ...state,\n ...action.payload,\n billingCountry: getBillingCountry(action.payload.countryIso2),\n };\n }\n return { ...state, ...action.payload };\n case 'setFormErrors':\n return {\n ...state,\n formErrors: {\n ...state.formErrors,\n ...action.payload,\n },\n };\n default:\n return state;\n }\n};\n\nfunction getBillingCountry(countryCode: string) {\n const country = countryList.find(({ id }) => id === countryCode);\n return country ? country.name : '';\n}\n\nconst usePaymentReducer = () => {\n return useReducer(reducer, INITIAL_STATE);\n};\n\nexport default usePaymentReducer;\n","import { RefObject } from 'react';\n\nimport { IS_TOUCH_ENV } from '../util/environment';\nimport { fastRaf } from '../util/schedulers';\nimport { useEffect } from '../lib/teact/teact';\n\nconst DEFAULT_DURATION = 400;\n\nexport default function useFocusAfterAnimation(\n ref: RefObject, animationDuration = DEFAULT_DURATION,\n) {\n useEffect(() => {\n if (IS_TOUCH_ENV) {\n return;\n }\n\n setTimeout(() => {\n fastRaf(() => {\n if (ref.current) {\n ref.current.focus();\n }\n });\n }, animationDuration);\n }, [ref, animationDuration]);\n}\n","import { ChangeEvent, RefObject } from 'react';\nimport React, { FC, memo } from '../../lib/teact/teact';\n\nimport buildClassName from '../../util/buildClassName';\n\ntype OwnProps = {\n id?: string;\n value?: string;\n label?: string;\n error?: string;\n ref?: RefObject;\n hasArrow?: boolean;\n placeholder?: string;\n onChange?: (e: ChangeEvent) => void;\n children: React.ReactNode;\n};\n\nconst Select: FC = (props) => {\n const {\n id,\n value,\n label,\n hasArrow,\n error,\n ref,\n placeholder,\n onChange,\n children,\n } = props;\n const labelText = error || label;\n const fullClassName = buildClassName(\n 'input-group',\n value && 'touched',\n error && 'error',\n labelText && 'with-label',\n hasArrow && 'with-arrow',\n 'input-group',\n );\n\n return (\n
\n \n {children}\n \n {labelText && id && (\n \n )}\n
\n );\n};\n\nexport default memo(Select);\n","import React, {\n FC, useRef, useCallback, useEffect, memo,\n} from '../../lib/teact/teact';\n\nimport { FormState, FormEditDispatch } from '../../hooks/reducers/usePaymentReducer';\nimport useFocusAfterAnimation from '../../hooks/useFocusAfterAnimation';\nimport useLang from '../../hooks/useLang';\nimport countryList from '../../util/countries';\n\nimport InputText from '../ui/InputText';\nimport Select from '../ui/Select';\nimport Checkbox from '../ui/Checkbox';\n\nimport './ShippingInfo.scss';\n\nexport type OwnProps = {\n state: FormState;\n needEmail: boolean;\n needPhone: boolean;\n needName: boolean;\n needAddress: boolean;\n dispatch: FormEditDispatch;\n};\n\nconst ShippingInfo: FC = ({\n state,\n needEmail,\n needPhone,\n needName,\n needAddress,\n dispatch,\n}) => {\n // eslint-disable-next-line no-null/no-null\n const inputRef = useRef(null);\n // eslint-disable-next-line no-null/no-null\n const phoneRef = useRef(null);\n // eslint-disable-next-line no-null/no-null\n const selectCountryRef = useRef(null);\n\n useEffect(() => {\n if (selectCountryRef.current\n && selectCountryRef.current.value !== state.countryIso2) {\n selectCountryRef.current.value = state.countryIso2;\n }\n }, [state.countryIso2]);\n\n const lang = useLang();\n\n useFocusAfterAnimation(inputRef);\n\n const handleAddress1Change = useCallback((e) => {\n dispatch({ type: 'changeAddress1', payload: e.target.value });\n }, [dispatch]);\n\n const handleAddress2Change = useCallback((e) => {\n dispatch({ type: 'changeAddress2', payload: e.target.value });\n }, [dispatch]);\n\n const handleCityChange = useCallback((e) => {\n dispatch({ type: 'changeCity', payload: e.target.value });\n }, [dispatch]);\n\n const handleStateChange = useCallback((e) => {\n dispatch({ type: 'changeState', payload: e.target.value });\n }, [dispatch]);\n\n const handleCountryChange = useCallback((e) => {\n dispatch({ type: 'changeCountry', payload: e.target.value });\n }, [dispatch]);\n\n const handlePostCodeChange = useCallback((e) => {\n dispatch({ type: 'changePostCode', payload: e.target.value });\n }, [dispatch]);\n\n const handleFullNameChange = useCallback((e) => {\n dispatch({ type: 'changeFullName', payload: e.target.value });\n }, [dispatch]);\n\n const handleEmailChange = useCallback((e) => {\n dispatch({ type: 'changeEmail', payload: e.target.value });\n }, [dispatch]);\n\n const handlePhoneChange = useCallback((e) => {\n let { value } = e.target;\n value = `+${value.replace(/\\D/g, '')}`;\n if (phoneRef.current) {\n phoneRef.current.value = value;\n }\n dispatch({ type: 'changePhone', payload: value });\n }, [dispatch]);\n\n const handleSaveInfoChange = useCallback((e) => {\n dispatch({ type: 'changeSaveInfo', payload: e.target.value });\n }, [dispatch]);\n\n const { formErrors } = state;\n return (\n
\n
\n {needAddress ? (\n
\n
{lang('PaymentShippingAddress')}
\n \n \n \n \n \n {countryList.map(({ name, id }) => (\n \n {name}\n \n ))}\n \n\n \n
\n ) : undefined}\n { needName || needEmail || needPhone ? (\n
{lang('PaymentShippingReceiver')}
\n ) : undefined }\n { needName && (\n \n ) }\n { needEmail && (\n \n ) }\n { needPhone && (\n \n ) }\n \n \n
\n );\n};\n\nexport default memo(ShippingInfo);\n","import React, {\n FC, useCallback, memo, useMemo, useEffect,\n} from '../../lib/teact/teact';\n\nimport { ShippingOption } from '../../types';\n\nimport { formatCurrency } from '../../util/formatCurrency';\nimport { FormState, FormEditDispatch } from '../../hooks/reducers/usePaymentReducer';\nimport useLang from '../../hooks/useLang';\n\nimport RadioGroup from '../ui/RadioGroup';\n\nimport './Shipping.scss';\n\nexport type OwnProps = {\n state: FormState;\n shippingOptions: ShippingOption[];\n currency?: string;\n dispatch: FormEditDispatch;\n};\n\nconst Shipping: FC = ({\n state,\n shippingOptions,\n currency,\n dispatch,\n}) => {\n const lang = useLang();\n\n useEffect(() => {\n if (!shippingOptions || state.shipping) {\n return;\n }\n dispatch({ type: 'changeShipping', payload: shippingOptions[0].id });\n }, [shippingOptions, state.shipping, dispatch]);\n\n const handleShippingSelect = useCallback((value) => {\n dispatch({ type: 'changeShipping', payload: value });\n }, [dispatch]);\n\n const options = useMemo(() => (shippingOptions.map(({ id: value, title: label, amount }) => ({\n label,\n subLabel: formatCurrency(amount, currency, lang.code),\n value,\n }))), [shippingOptions, currency, lang.code]);\n\n return (\n
\n
\n

{lang('PaymentShippingMethod')}

\n \n \n
\n );\n};\n\nexport default memo(Shipping);\n","import React, {\n FC, memo,\n} from '../../lib/teact/teact';\n\nimport { LangCode, Price } from '../../types';\n\nimport { formatCurrency } from '../../util/formatCurrency';\nimport buildClassName from '../../util/buildClassName';\nimport useLang from '../../hooks/useLang';\n\nimport './Checkout.scss';\n\nexport type OwnProps = {\n invoiceContent?: {\n title?: string;\n text?: string;\n photoUrl?: string;\n };\n checkoutInfo?: {\n paymentMethod?: string;\n paymentProvider?: string;\n shippingAddress?: string;\n name?: string;\n phone?: string;\n shippingMethod?: string;\n };\n prices?: Price[];\n totalPrice?: number;\n shippingPrices?: Price[];\n currency?: string;\n};\n\nconst Checkout: FC = ({\n invoiceContent,\n prices,\n shippingPrices,\n checkoutInfo,\n currency,\n totalPrice,\n}) => {\n const lang = useLang();\n\n const { photoUrl, title, text } = invoiceContent || {};\n const {\n paymentMethod,\n paymentProvider,\n shippingAddress,\n name,\n phone,\n shippingMethod,\n } = (checkoutInfo || {});\n\n return (\n
\n
\n {photoUrl && \"\"}\n
\n
{title}
\n

{text}

\n
\n
\n
\n { prices && prices.map((item) => (\n renderPaymentItem(lang.code, item.label, item.amount, currency)\n )) }\n { shippingPrices && shippingPrices.map((item) => (\n renderPaymentItem(lang.code, item.label, item.amount, currency)\n )) }\n { totalPrice !== undefined && (\n renderPaymentItem(lang.code, lang('Checkout.TotalAmount'), totalPrice, currency, true)\n ) }\n
\n
\n {paymentMethod && renderCheckoutItem('icon-card', paymentMethod, lang('PaymentCheckoutMethod'))}\n {paymentProvider && renderCheckoutItem(\n buildClassName('provider', paymentProvider.toLowerCase()),\n paymentProvider,\n lang('PaymentCheckoutProvider'),\n )}\n {shippingAddress && renderCheckoutItem('icon-location', shippingAddress, lang('PaymentShippingAddress'))}\n {name && renderCheckoutItem('icon-user', name, lang('PaymentCheckoutName'))}\n {phone && renderCheckoutItem('icon-phone', phone, lang('PaymentCheckoutPhoneNumber'))}\n {shippingMethod && renderCheckoutItem('icon-truck', shippingMethod, lang('PaymentCheckoutShippingMethod'))}\n
\n
\n );\n};\n\nfunction renderPaymentItem(\n langCode: LangCode | undefined, title: string, value: number, currency?: string, main = false,\n) {\n return (\n
\n
\n { title }\n
\n
\n {formatCurrency(value, currency, langCode)}\n
\n
\n );\n}\n\nfunction renderCheckoutItem(icon: string, title: string, data: string) {\n return (\n
\n \n
\n
\n { title }\n
\n

\n { data }\n

\n
\n
\n );\n}\n\nexport default memo(Checkout);\n","import React, {\n FC, memo, useCallback, useRef,\n} from '../../lib/teact/teact';\n\nimport { formatCardExpiry } from '../middle/helpers/inputFormatters';\n\nimport InputText from '../ui/InputText';\nimport useLang from '../../hooks/useLang';\n\nconst MAX_FIELD_LENGTH = 5;\n\nexport type OwnProps = {\n value: string;\n error?: string;\n onChange: (value: string) => void;\n};\n\nconst ExpiryInput : FC = ({ value, error, onChange }) => {\n const lang = useLang();\n // eslint-disable-next-line no-null/no-null\n const expiryInputRef = useRef(null);\n\n const handleKeyDown = useCallback((e) => {\n if (e.key === 'Backspace' && value.charAt(value.length - 1) === '/') {\n const newValue = value.slice(0, value.length - 1);\n if (expiryInputRef.current) {\n expiryInputRef.current.value = newValue;\n }\n }\n }, [value]);\n\n const handleChange = useCallback((e) => {\n onChange(formatCardExpiry(e.target.value));\n }, [onChange]);\n\n return (\n \n );\n};\n\nexport default memo(ExpiryInput);\n","export function formatCardExpiry(input: string) {\n input = input.replace(/[^\\d]/g, '').slice(0, 4);\n const parts = input.match(/.{1,2}/g);\n if (parts?.[0] && Number(parts[0]) > 12) {\n parts[0] = '12';\n }\n if (parts?.[0] && parts[0].length === 2 && !parts[1]) {\n parts[1] = '';\n }\n return parts ? parts.join('/') : '';\n}\n\nexport function formatCardNumber(input: string) {\n input = input.replace(/[^\\d]/g, '');\n const parts = input.match(/.{1,4}/g);\n return parts ? parts.join(' ') : '';\n}\n","import React, {\n FC, memo, useCallback, useState, useRef, useEffect,\n} from '../../lib/teact/teact';\n\nimport { formatCardNumber } from '../middle/helpers/inputFormatters';\nimport { detectCardType, CardType } from '../common/helpers/detectCardType';\nimport useFocusAfterAnimation from '../../hooks/useFocusAfterAnimation';\nimport useLang from '../../hooks/useLang';\n\nimport InputText from '../ui/InputText';\n\nimport './CardInput.scss';\n\nimport mastercardIconPath from '../../assets/mastercard.svg';\nimport visaIconPath from '../../assets/visa.svg';\n\nconst CARD_NUMBER_MAX_LENGTH = 23;\n\nexport type OwnProps = {\n value: string;\n error?: string;\n onChange: (value: string) => void;\n};\n\nconst CardInput : FC = ({ value, error, onChange }) => {\n const lang = useLang();\n // eslint-disable-next-line no-null/no-null\n const cardNumberRef = useRef(null);\n\n useFocusAfterAnimation(cardNumberRef);\n\n const [cardType, setCardType] = useState(CardType.Default);\n useEffect(() => {\n const newCardType = detectCardType(value);\n setCardType(newCardType);\n // eslint-disable-next-line\n }, []);\n\n const handleChange = useCallback((e) => {\n const newValue = formatCardNumber(e.target.value);\n const newCardType = detectCardType(e.target.value);\n setCardType(newCardType);\n onChange(newValue);\n if (cardNumberRef.current) {\n cardNumberRef.current.value = newValue;\n }\n }, [onChange, cardNumberRef]);\n\n const cardIcon = getCardIcon(cardType);\n\n return (\n
\n {cardIcon}\n \n
\n );\n};\n\nexport default memo(CardInput);\n\nfunction getCardIcon(cardType: CardType) {\n switch (cardType) {\n case CardType.Mastercard:\n return \"\";\n case CardType.Visa:\n return \"\";\n default:\n return undefined;\n }\n}\n","import React, {\n FC, useCallback, memo, useRef, useEffect,\n} from '../../lib/teact/teact';\n\nimport { FormState, FormEditDispatch } from '../../hooks/reducers/usePaymentReducer';\nimport useLang from '../../hooks/useLang';\nimport countryList from '../../util/countries';\n\nimport InputText from '../ui/InputText';\nimport Checkbox from '../ui/Checkbox';\nimport Select from '../ui/Select';\nimport ExpiryInput from './ExpiryInput';\nimport CardInput from './CardInput';\n\nimport './PaymentInfo.scss';\n\nexport type OwnProps = {\n state: FormState;\n canSaveCredentials: boolean;\n needCardholderName?: boolean;\n needCountry?: boolean;\n needZip?: boolean;\n dispatch: FormEditDispatch;\n};\n\nconst PaymentInfo: FC = ({\n state,\n canSaveCredentials,\n needCardholderName,\n needCountry,\n needZip,\n dispatch,\n}) => {\n // eslint-disable-next-line no-null/no-null\n const selectCountryRef = useRef(null);\n\n useEffect(() => {\n if (selectCountryRef.current\n && selectCountryRef.current.value !== state.billingCountry) {\n selectCountryRef.current.value = state.billingCountry;\n }\n }, [state.billingCountry]);\n\n const handleCardNumberChange = useCallback((value) => {\n dispatch({ type: 'changeCardNumber', payload: value });\n }, [dispatch]);\n\n const handleCardholderChange = useCallback((e) => {\n dispatch({ type: 'changeCardholder', payload: e.target.value.toUpperCase() });\n }, [dispatch]);\n\n const handleExpiryChange = useCallback((value) => {\n dispatch({ type: 'changeExpiryDate', payload: value });\n }, [dispatch]);\n\n const handleCvvChange = useCallback((e) => {\n dispatch({ type: 'changeCvvCode', payload: e.target.value });\n }, [dispatch]);\n\n const handleCountryChange = useCallback((e) => {\n dispatch({ type: 'changeBillingCountry', payload: e.target.value });\n }, [dispatch]);\n\n const handleBillingPostCodeChange = useCallback((e) => {\n dispatch({ type: 'changeBillingZip', payload: e.target.value });\n }, [dispatch]);\n\n const handleChangeSaveCredentials = useCallback((e) => {\n dispatch({ type: 'changeSaveCredentials', payload: e.target.value });\n }, [dispatch]);\n\n const lang = useLang();\n\n const { formErrors = {} } = state;\n\n return (\n
\n
\n
{lang('PaymentCardTitle')}
\n \n { needCardholderName && (\n \n )}\n
\n \n \n
\n { needCountry || needZip ? (\n
{lang('PaymentBillingAddress')}
\n ) : undefined }\n { needCountry && (\n \n {\n countryList.map(({ name }) => (\n \n {name}\n \n ))\n }\n \n ) }\n { needZip && (\n \n )}\n { canSaveCredentials && (\n \n ) }\n \n
\n );\n};\n\nexport default memo(PaymentInfo);\n","import React, { FC, memo } from '../../lib/teact/teact';\n\nimport useLang from '../../hooks/useLang';\n\nimport './ConfirmPayment.scss';\n\nexport type OwnProps = {\n url: string;\n};\n\nconst ConfirmPayment: FC = ({ url }) => {\n const lang = useLang();\n\n return (\n
\n \n
\n );\n};\n\nexport default memo(ConfirmPayment);\n","import React, {\n FC, memo, useCallback, useEffect, useMemo, useState,\n} from '../../lib/teact/teact';\nimport { getActions, withGlobal } from '../../global';\n\nimport { GlobalState } from '../../global/types';\nimport { PaymentStep, ShippingOption, Price } from '../../types';\n\nimport { formatCurrency } from '../../util/formatCurrency';\nimport { detectCardTypeText } from '../common/helpers/detectCardType';\nimport usePaymentReducer, { FormState } from '../../hooks/reducers/usePaymentReducer';\nimport useLang from '../../hooks/useLang';\n\nimport ShippingInfo from './ShippingInfo';\nimport Shipping from './Shipping';\nimport Checkout from './Checkout';\nimport PaymentInfo from './PaymentInfo';\nimport Button from '../ui/Button';\nimport Modal from '../ui/Modal';\nimport Transition from '../ui/Transition';\nimport Spinner from '../ui/Spinner';\nimport ConfirmPayment from './ConfirmPayment';\n\nimport './PaymentModal.scss';\n\nconst DEFAULT_PROVIDER = 'stripe';\nconst DONATE_PROVIDER = 'smartglocal';\nconst SUPPORTED_PROVIDERS = new Set([DEFAULT_PROVIDER, DONATE_PROVIDER]);\n\nexport type OwnProps = {\n isOpen: boolean;\n onClose: () => void;\n};\n\ntype StateProps = {\n nameRequested?: boolean;\n shippingAddressRequested?: boolean;\n phoneRequested?: boolean;\n emailRequested?: boolean;\n flexible?: boolean;\n phoneToProvider?: boolean;\n emailToProvider?: boolean;\n currency?: string;\n prices?: Price[];\n isProviderError: boolean;\n needCardholderName?: boolean;\n needCountry?: boolean;\n needZip?: boolean;\n confirmPaymentUrl?: string;\n};\n\ntype GlobalStateProps = Pick;\n\nconst Invoice: FC = ({\n isOpen,\n onClose,\n step,\n shippingOptions,\n savedInfo,\n canSaveCredentials,\n nameRequested,\n shippingAddressRequested,\n phoneRequested,\n emailRequested,\n phoneToProvider,\n emailToProvider,\n currency,\n passwordMissing,\n isProviderError,\n invoiceContent,\n nativeProvider,\n prices,\n needCardholderName,\n needCountry,\n needZip,\n confirmPaymentUrl,\n error,\n}) => {\n const {\n validateRequestedInfo,\n sendPaymentForm,\n setPaymentStep,\n sendCredentialsInfo,\n clearPaymentError,\n } = getActions();\n\n const [paymentState, paymentDispatch] = usePaymentReducer();\n const [isLoading, setIsLoading] = useState(false);\n const lang = useLang();\n const canRenderFooter = step !== PaymentStep.ConfirmPayment;\n\n useEffect(() => {\n if (step || error) {\n setIsLoading(false);\n }\n }, [step, error]);\n\n useEffect(() => {\n if (error?.field) {\n paymentDispatch({\n type: 'setFormErrors',\n payload: {\n [error.field]: error.message,\n },\n });\n }\n }, [error, paymentDispatch]);\n\n useEffect(() => {\n if (savedInfo) {\n const {\n name: fullName, phone, email, shippingAddress,\n } = savedInfo;\n paymentDispatch({\n type: 'updateUserInfo',\n payload: {\n fullName,\n phone: phone && phone.charAt(0) !== '+'\n ? `+${phone}`\n : phone,\n email,\n ...(shippingAddress || {}),\n },\n });\n }\n }, [savedInfo, paymentDispatch]);\n\n const handleErrorModalClose = useCallback(() => {\n clearPaymentError();\n }, [clearPaymentError]);\n\n const totalPrice = useMemo(() => {\n if (step !== PaymentStep.Checkout) {\n return 0;\n }\n\n return getTotalPrice(prices, shippingOptions, paymentState.shipping);\n }, [step, paymentState.shipping, prices, shippingOptions]);\n\n const checkoutInfo = useMemo(() => {\n if (step !== PaymentStep.Checkout) {\n return undefined;\n }\n return getCheckoutInfo(paymentState, shippingOptions, nativeProvider || '');\n }, [step, paymentState, shippingOptions, nativeProvider]);\n\n function renderError() {\n if (!error) {\n return undefined;\n }\n return (\n \n

{error.description || 'Error'}

\n

{error.description || 'Error'}

\n \n {lang('OK')}\n \n
\n );\n }\n\n function renderModalContent(currentStep: PaymentStep) {\n switch (currentStep) {\n case PaymentStep.ShippingInfo:\n return (\n \n );\n case PaymentStep.Shipping:\n return (\n \n );\n case PaymentStep.PaymentInfo:\n return (\n \n );\n case PaymentStep.Checkout:\n return (\n \n );\n case PaymentStep.ConfirmPayment:\n return (\n \n );\n default:\n return undefined;\n }\n }\n\n const validateRequest = useCallback(() => {\n const { saveInfo } = paymentState;\n const requestInfo = getRequestInfo(paymentState);\n validateRequestedInfo({ requestInfo, saveInfo });\n }, [validateRequestedInfo, paymentState]);\n\n const sendCredentials = useCallback(() => {\n const credentials = getCredentials(paymentState);\n sendCredentialsInfo({\n credentials,\n });\n }, [sendCredentialsInfo, paymentState]);\n\n const sendForm = useCallback(() => {\n sendPaymentForm({\n shippingOptionId: paymentState.shipping,\n saveCredentials: paymentState.saveCredentials,\n });\n }, [sendPaymentForm, paymentState]);\n\n const setStep = useCallback((nextStep) => {\n setPaymentStep({ step: nextStep });\n }, [setPaymentStep]);\n\n const handleButtonClick = useCallback(() => {\n setIsLoading(true);\n switch (step) {\n case PaymentStep.ShippingInfo:\n return validateRequest();\n case PaymentStep.Shipping:\n return setStep(PaymentStep.PaymentInfo);\n case PaymentStep.PaymentInfo:\n return sendCredentials();\n case PaymentStep.Checkout:\n return sendForm();\n default:\n return () => {\n };\n }\n }, [step, validateRequest, setStep, sendCredentials, sendForm]);\n\n const modalHeader = useMemo(() => {\n switch (step) {\n case PaymentStep.ShippingInfo:\n return lang('PaymentShippingInfo');\n case PaymentStep.Shipping:\n return lang('PaymentShippingMethod');\n case PaymentStep.PaymentInfo:\n return lang('PaymentCardInfo');\n case PaymentStep.Checkout:\n return lang('PaymentCheckout');\n case PaymentStep.ConfirmPayment:\n return lang('Checkout.WebConfirmation.Title');\n default:\n return '';\n }\n }, [step, lang]);\n\n const buttonText = useMemo(() => {\n switch (step) {\n case PaymentStep.Checkout:\n return lang('Checkout.PayPrice', formatCurrency(totalPrice, currency, lang.code));\n default:\n return lang('Next');\n }\n }, [step, lang, currency, totalPrice]);\n\n if (isProviderError) {\n return (\n \n

\n Sorry, Telegram WebZ doesn't support payments with this provider yet.
\n Please use one of our mobile apps to do this.\n

\n \n {lang('OK')}\n \n \n );\n }\n\n return (\n \n
\n \n \n \n

{modalHeader}

\n
\n {step !== undefined ? (\n \n
\n {renderModalContent(step)}\n
\n
\n ) : (\n
\n \n
\n )}\n {canRenderFooter && (\n
\n \n {buttonText}\n \n
\n )}\n {error && !error.field && renderError()}\n \n );\n};\n\nexport default memo(withGlobal(\n (global): StateProps & GlobalStateProps => {\n const {\n step,\n shippingOptions,\n savedInfo,\n canSaveCredentials,\n invoice,\n invoiceContent,\n nativeProvider,\n nativeParams,\n passwordMissing,\n error,\n confirmPaymentUrl,\n } = global.payment;\n\n const isProviderError = Boolean(invoice && (!nativeProvider || !SUPPORTED_PROVIDERS.has(nativeProvider)));\n const { needCardholderName, needCountry, needZip } = (nativeParams || {});\n const {\n nameRequested,\n phoneRequested,\n emailRequested,\n shippingAddressRequested,\n flexible,\n phoneToProvider,\n emailToProvider,\n currency,\n prices,\n } = (invoice || {});\n\n return {\n step,\n shippingOptions,\n savedInfo,\n canSaveCredentials,\n nativeProvider,\n passwordMissing,\n nameRequested,\n shippingAddressRequested,\n phoneRequested,\n emailRequested,\n flexible,\n phoneToProvider,\n emailToProvider,\n currency,\n prices,\n isProviderError,\n invoiceContent,\n needCardholderName,\n needCountry,\n needZip,\n error,\n confirmPaymentUrl,\n };\n },\n)(Invoice));\n\nfunction findShippingOption(shippingOptions: ShippingOption[], optionId: string) {\n return shippingOptions.find(({ id }) => id === optionId);\n}\n\nfunction getShippingPrices(shippingOptions: ShippingOption[], shippingOption: string) {\n const option = findShippingOption(shippingOptions, shippingOption);\n return option?.prices;\n}\n\nfunction getTotalPrice(prices: Price[] = [], shippingOptions: ShippingOption[] | undefined, shippingOption: string) {\n const shippingPrices = shippingOptions\n ? getShippingPrices(shippingOptions, shippingOption)\n : [];\n let total = 0;\n const totalPrices = prices.concat(shippingPrices || []);\n total = totalPrices.reduce((acc, cur) => {\n return acc + cur.amount;\n }, total);\n return total;\n}\n\nfunction getCheckoutInfo(state: FormState, shippingOptions: ShippingOption[] | undefined, paymentProvider: string) {\n const cardTypeText = detectCardTypeText(state.cardNumber);\n const paymentMethod = `${cardTypeText} *${state.cardNumber.slice(-4)}`;\n const shippingAddress = state.streetLine1\n ? `${state.streetLine1}, ${state.city}, ${state.countryIso2}`\n : undefined;\n const { phone, fullName: name } = state;\n const shippingOption = shippingOptions ? findShippingOption(shippingOptions, state.shipping) : undefined;\n const shippingMethod = shippingOption?.title;\n return {\n paymentMethod,\n paymentProvider,\n shippingAddress,\n name,\n phone,\n shippingMethod,\n };\n}\n\nfunction getRequestInfo(paymentState: FormState) {\n const {\n streetLine1,\n streetLine2,\n city,\n state,\n countryIso2,\n postCode,\n fullName: name,\n phone,\n email,\n } = paymentState;\n\n const shippingAddress = {\n streetLine1,\n streetLine2,\n city,\n state,\n countryIso2,\n postCode,\n };\n\n return {\n name,\n phone,\n email,\n shippingAddress,\n };\n}\n\nfunction getCredentials(paymentState: FormState) {\n const {\n cardNumber, cardholder, expiry, cvv, billingCountry, billingZip,\n } = paymentState;\n const [expiryMonth, expiryYear] = expiry.split('/');\n const data = {\n cardNumber,\n cardholder,\n expiryMonth,\n expiryYear,\n cvv,\n country: billingCountry,\n zip: billingZip,\n };\n\n return {\n data,\n };\n}\n","import React, {\n FC, memo, useMemo,\n} from '../../lib/teact/teact';\nimport { withGlobal } from '../../global';\n\nimport { Price } from '../../types';\nimport { ApiShippingAddress } from '../../api/types';\n\nimport useLang from '../../hooks/useLang';\n\nimport Checkout from './Checkout';\nimport Modal from '../ui/Modal';\nimport Button from '../ui/Button';\n\nimport './PaymentModal.scss';\n\nexport type OwnProps = {\n isOpen: boolean;\n onClose: () => void;\n};\n\ntype StateProps = {\n prices?: Price[];\n shippingPrices: any;\n totalAmount?: number;\n currency?: string;\n info?: {\n shippingAddress?: ApiShippingAddress;\n phone?: string;\n name?: string;\n };\n photoUrl?: string;\n text?: string;\n title?: string;\n credentialsTitle?: string;\n shippingMethod?: string;\n};\n\nconst ReceiptModal: FC = ({\n isOpen,\n onClose,\n prices,\n shippingPrices,\n totalAmount,\n currency,\n info,\n photoUrl,\n text,\n title,\n credentialsTitle,\n shippingMethod,\n}) => {\n const lang = useLang();\n const checkoutInfo = useMemo(() => {\n return getCheckoutInfo(credentialsTitle, info, shippingMethod);\n }, [info, shippingMethod, credentialsTitle]);\n\n return (\n \n
\n
\n \n \n \n

{lang('PaymentReceipt')}

\n
\n
\n \n
\n
\n \n );\n};\n\nexport default memo(withGlobal(\n (global): StateProps => {\n const { receipt } = global.payment;\n const {\n currency,\n prices,\n info,\n totalAmount,\n credentialsTitle,\n shippingPrices,\n shippingMethod,\n photoUrl,\n text,\n title,\n } = (receipt || {});\n\n return {\n currency,\n prices,\n info,\n totalAmount,\n credentialsTitle,\n shippingPrices,\n shippingMethod,\n photoUrl,\n text,\n title,\n };\n },\n)(ReceiptModal));\n\nfunction getCheckoutInfo(paymentMethod?: string,\n info?:\n { phone?: string;\n name?: string;\n shippingAddress?: ApiShippingAddress;\n },\n shippingMethod?: string) {\n if (!info) {\n return { paymentMethod };\n }\n const { shippingAddress } = info;\n const fullAddress = shippingAddress?.streetLine1\n ? `${shippingAddress.streetLine1}, ${shippingAddress.city}, ${shippingAddress.countryIso2}`\n : undefined;\n const { phone, name } = info;\n return {\n paymentMethod,\n paymentProvider: 'Stripe',\n shippingAddress: fullAddress,\n name,\n phone,\n shippingMethod,\n };\n}\n","import { ChangeEvent } from 'react';\nimport React, {\n FC, memo, useEffect, useRef, useState,\n} from '../../lib/teact/teact';\n\nimport { MIN_PASSWORD_LENGTH } from '../../config';\nimport { IS_TOUCH_ENV, IS_SINGLE_COLUMN_LAYOUT } from '../../util/environment';\nimport buildClassName from '../../util/buildClassName';\nimport useLang from '../../hooks/useLang';\n\nimport Button from '../ui/Button';\n\ntype OwnProps = {\n submitLabel?: string;\n error?: string;\n hint?: string;\n placeholder?: string;\n isLoading?: boolean;\n isPasswordVisible?: boolean;\n clearError: NoneToVoidFunction;\n onChangePasswordVisibility: (state: boolean) => void;\n onInputChange?: (password: string) => void;\n onSubmit: (password: string) => void;\n};\n\nconst FOCUS_DELAY_TIMEOUT_MS = IS_SINGLE_COLUMN_LAYOUT ? 550 : 400;\n\nconst PasswordForm: FC = ({\n isLoading = false,\n isPasswordVisible,\n error,\n hint,\n placeholder = 'Password',\n submitLabel = 'Next',\n clearError,\n onChangePasswordVisibility,\n onInputChange,\n onSubmit,\n}) => {\n // eslint-disable-next-line no-null/no-null\n const inputRef = useRef(null);\n const lang = useLang();\n\n const [password, setPassword] = useState('');\n const [canSubmit, setCanSubmit] = useState(false);\n\n useEffect(() => {\n if (!IS_TOUCH_ENV) {\n setTimeout(() => {\n inputRef.current!.focus();\n }, FOCUS_DELAY_TIMEOUT_MS);\n }\n }, []);\n\n useEffect(() => {\n if (error) {\n requestAnimationFrame(() => {\n inputRef.current!.focus();\n inputRef.current!.select();\n });\n }\n }, [error]);\n\n function onPasswordChange(e: ChangeEvent) {\n if (error) {\n clearError();\n }\n\n const { target } = e;\n setPassword(target.value);\n setCanSubmit(target.value.length >= MIN_PASSWORD_LENGTH);\n if (onInputChange) {\n onInputChange(target.value);\n }\n }\n\n function togglePasswordVisibility() {\n onChangePasswordVisibility(!isPasswordVisible);\n }\n\n function handleSubmit(event: React.FormEvent) {\n event.preventDefault();\n\n if (isLoading) {\n return;\n }\n\n if (canSubmit) {\n onSubmit(password);\n }\n }\n\n return (\n
\n \n \n \n \n \n \n \n {canSubmit && (\n \n )}\n \n );\n};\n\nexport default memo(PasswordForm);\n","import React, {\n FC, useState, useEffect, useCallback, memo,\n} from '../../lib/teact/teact';\n\nimport { STICKER_SIZE_AUTH, STICKER_SIZE_AUTH_MOBILE, STICKER_SIZE_TWO_FA } from '../../config';\nimport { IS_SINGLE_COLUMN_LAYOUT } from '../../util/environment';\nimport getAnimationData from './helpers/animatedAssets';\n\nimport AnimatedSticker from './AnimatedSticker';\n\nimport './PasswordMonkey.scss';\n\ntype OwnProps = {\n isPasswordVisible: boolean;\n isBig?: boolean;\n};\n\nconst PEEK_MONKEY_SHOW_DELAY = 2000;\nconst SEGMENT_COVER_EYES: [number, number] = [0, 50];\nconst SEGMENT_UNCOVER_EYE: [number, number] = [0, 20];\nconst SEGMENT_COVER_EYE: [number, number] = [20, 0];\nconst STICKER_SIZE = IS_SINGLE_COLUMN_LAYOUT ? STICKER_SIZE_AUTH_MOBILE : STICKER_SIZE_AUTH;\n\nconst PasswordMonkey: FC = ({ isPasswordVisible, isBig }) => {\n const [closeMonkeyData, setCloseMonkeyData] = useState();\n const [peekMonkeyData, setPeekMonkeyData] = useState();\n const [isFirstMonkeyLoaded, setIsFirstMonkeyLoaded] = useState(false);\n const [isPeekShown, setIsPeekShown] = useState(false);\n\n useEffect(() => {\n if (!closeMonkeyData) {\n getAnimationData('MonkeyClose').then(setCloseMonkeyData);\n } else {\n setTimeout(() => setIsPeekShown(true), PEEK_MONKEY_SHOW_DELAY);\n }\n }, [closeMonkeyData]);\n\n useEffect(() => {\n if (!peekMonkeyData) {\n getAnimationData('MonkeyPeek').then(setPeekMonkeyData);\n }\n }, [peekMonkeyData]);\n\n const handleFirstMonkeyLoad = useCallback(() => setIsFirstMonkeyLoaded(true), []);\n\n return (\n
\n {!isFirstMonkeyLoaded && (\n
\n )}\n {closeMonkeyData && (\n \n )}\n {peekMonkeyData && (\n \n )}\n
\n );\n};\n\nexport default memo(PasswordMonkey);\n","import React, {\n FC, useEffect, useState, memo, useCallback,\n} from '../../lib/teact/teact';\n\nimport { DEBUG } from '../../config';\nimport { blobToFile, blobToDataUri } from '../../util/files';\nimport useLang from '../../hooks/useLang';\n\nimport Button from './Button';\nimport Modal from './Modal';\nimport Loading from './Loading';\n\nimport './CropModal.scss';\n\n// Change to 'base64' to get base64-encoded string\nconst cropperResultOptions: Croppie.ResultOptions & { type: 'blob' } = {\n type: 'blob',\n quality: 1,\n format: 'jpeg',\n circle: false,\n size: { width: 1024, height: 1024 },\n};\n\ntype ICroppie = typeof import('croppie');\nlet Croppie: ICroppie;\nlet croppiePromise: Promise<{ default: ICroppie }>;\n\nasync function ensureCroppie() {\n if (!croppiePromise) {\n croppiePromise = import('../../lib/croppie') as unknown as Promise<{ default: ICroppie }>;\n Croppie = (await croppiePromise).default;\n }\n\n return croppiePromise;\n}\n\nlet cropper: Croppie;\n\nasync function initCropper(imgFile: File) {\n try {\n const cropContainer = document.getElementById('avatar-crop');\n if (!cropContainer) {\n return;\n }\n\n const { offsetWidth, offsetHeight } = cropContainer;\n\n cropper = new Croppie(cropContainer, {\n enableZoom: true,\n boundary: {\n width: offsetWidth,\n height: offsetHeight,\n },\n viewport: {\n width: offsetWidth - 16,\n height: offsetHeight - 16,\n type: 'circle',\n },\n });\n\n const dataUri = await blobToDataUri(imgFile);\n await cropper.bind({ url: dataUri });\n } catch (err) {\n if (DEBUG) {\n // eslint-disable-next-line no-console\n console.error(err);\n }\n }\n}\n\ntype OwnProps = {\n file?: File;\n onChange: (file: File) => void;\n onClose: () => void;\n};\n\nconst CropModal: FC = ({ file, onChange, onClose }: OwnProps) => {\n const [isCroppieReady, setIsCroppieReady] = useState(false);\n\n useEffect(() => {\n if (!file) {\n return;\n }\n\n if (!isCroppieReady) {\n ensureCroppie().then(() => setIsCroppieReady(true));\n\n return;\n }\n\n initCropper(file);\n }, [file, isCroppieReady]);\n\n const lang = useLang();\n\n const handleCropClick = useCallback(async () => {\n if (!cropper) {\n return;\n }\n\n const result: Blob | string = await cropper.result(cropperResultOptions);\n const croppedImg = typeof result === 'string' ? result : blobToFile(result, 'avatar.jpg');\n\n onChange(croppedImg);\n }, [onChange]);\n\n return (\n \n {isCroppieReady ? (\n
\n ) : (\n \n )}\n \n \n \n \n );\n};\n\nexport default memo(CropModal);\n","import { ChangeEvent } from 'react';\nimport React, {\n FC, useState, useEffect, memo, useCallback,\n} from '../../lib/teact/teact';\n\nimport buildClassName from '../../util/buildClassName';\n\nimport CropModal from './CropModal';\n\nimport './AvatarEditable.scss';\n\ninterface OwnProps {\n title?: string;\n disabled?: boolean;\n currentAvatarBlobUrl?: string;\n onChange: (file: File) => void;\n}\n\nconst AvatarEditable: FC = ({\n title = 'Change your profile picture',\n disabled,\n currentAvatarBlobUrl,\n onChange,\n}) => {\n const [selectedFile, setSelectedFile] = useState();\n const [croppedBlobUrl, setCroppedBlobUrl] = useState(currentAvatarBlobUrl);\n\n useEffect(() => {\n setCroppedBlobUrl(currentAvatarBlobUrl);\n }, [currentAvatarBlobUrl]);\n\n function handleSelectFile(event: ChangeEvent) {\n const target = event.target as HTMLInputElement;\n\n if (!target || !target.files || !target.files[0]) {\n return;\n }\n\n setSelectedFile(target.files[0]);\n target.value = '';\n }\n\n const handleAvatarCrop = useCallback((croppedImg: File) => {\n setSelectedFile(undefined);\n onChange(croppedImg);\n\n if (croppedBlobUrl) {\n URL.revokeObjectURL(croppedBlobUrl);\n }\n setCroppedBlobUrl(URL.createObjectURL(croppedImg));\n }, [croppedBlobUrl, onChange]);\n\n const handleModalClose = useCallback(() => {\n setSelectedFile(undefined);\n }, []);\n\n const labelClassName = buildClassName(\n croppedBlobUrl && 'filled',\n disabled && 'disabled',\n );\n\n return (\n
\n \n \n \n {croppedBlobUrl && \"Avatar\"}\n \n \n
\n );\n};\n\nexport default memo(AvatarEditable);\n"],"names":["cache","Map","useBlurSync","dataUri","blurredRef","useRef","isChanged","useOnChange","current","undefined","img","Image","src","width","canvas","imgToCanvas","fastBlur","getContext","height","toDataURL","blurredAsync","isDisabled","delay","get","timeoutRef","forceUpdate","useForceUpdate","clearTimeout","useEffect","onload","blurredDataUri","size","clear","set","window","setTimeout","useBlur","Boolean","createGhost","source","origin","ghost","document","createElement","classList","add","draggable","oncontextmenu","stopEvent","HTMLVideoElement","poster","appendChild","MediaViewerOrigin","profileInfo","querySelector","cloneNode","isMessageImageFullyVisible","container","imageEl","messageListElement","imgOffsetTop","offsetTop","closest","id","includes","parentElement","scrollTop","offsetHeight","applyStyles","element","styles","Object","assign","style","getNodes","message","containerSelector","mediaSelector","getMessageHtmlId","mediaEls","querySelectorAll","mediaEl","length","applyShape","firstChild","objectFit","memo","withGlobal","global","isDownloading","selectIsDownloading","isProtected","selectIsMessageProtected","mediaData","isVideo","isZoomed","fileName","isAvatar","onCloseMediaViewer","onForward","onZoomToggle","downloadMessageMedia","cancelMessageMediaDownload","getActions","loadProgress","downloadProgress","useMediaWithLoadProgress","getMessageMediaHash","handleDownloadClick","useCallback","lang","useLang","MenuButton","useMemo","onTrigger","isOpen","Button","round","color","className","onClick","ariaLabel","IS_SINGLE_COLUMN_LAYOUT","DropdownMenu","trigger","positionX","MenuItem","icon","Math","href","download","ProgressSpinner","progress","noCross","renderDownloadButton","text","isHidden","isForVideo","isMultiline","setIsMultiline","useState","footerContent","checkIsMultiline","clientHeight","REM","handleResize","throttle","addEventListener","removeEventListener","classNames","buildClassName","e","stopPropagation","dir","prop","fullscreenElement","mozFullScreenElement","webkitFullscreenElement","units","bytes","number","floor","log","toFixed","PLAYBACK_RATES","bufferedRanges","bufferedProgress","currentTime","duration","fileSize","isForceMobileVersion","isPlayed","isFullscreenSupported","isFullscreen","isVisible","isBuffered","volume","isMuted","playbackRate","onChangeFullscreen","onVolumeClick","onVolumeChange","onPlaybackRateChange","onPlayPause","setVisibility","onSeek","isPlaybackMenuOpen","openPlaybackMenu","closePlaybackMenu","useFlag","seekerRef","isSeekingRef","isSeeking","timeout","body","remove","handleSeek","left","getBoundingClientRect","clientX","MouseEvent","targetTouches","max","min","handleStartSeek","handleStopSeek","captureEvents","onCapture","onRelease","onDrag","volumeIcon","percentagePlayed","ref","map","start","end","renderSeekLine","ripple","IS_IOS","RangeSlider","bold","value","onChange","formatMediaDuration","renderTime","loadedPercent","totalSize","formatFileSize","Menu","positionY","autoClose","onClose","rate","disabled","url","isGif","posterData","posterSize","isMediaViewerOpen","noPlay","toggleControls","areControlsVisible","setMediaViewerVolume","setMediaViewerMuted","setMediaViewerPlaybackRate","videoRef","setIsPlayed","IS_TOUCH_ENV","setCurrentTime","setFullscreen","exitFullscreen","elRef","setIsFullscreen","useLayoutEffect","listener","listenerEnter","listenerExit","video","PLATFORM_ENV","requestFullscreen","webkitRequestFullscreen","webkitEnterFullscreen","mozRequestFullScreen","mozCancelFullScreen","webkitCancelFullScreen","webkitExitFullscreen","useFullscreenStatus","bufferingHandlers","useBuffering","shouldRender","shouldRenderSpinner","transitionClassNames","spinnerClassNames","useShowTransition","shouldRenderPlayButton","playButtonClassNames","pause","safePlay","togglePlayState","useVideoCleanup","handleMouseMove","handleMouseOut","target","handleTimeUpdate","currentTarget","handleEnded","handleFullscreenChange","position","handleVolumeChange","newVolume","handleVolumeMuted","handlePlaybackRateChange","newPlaybackRate","togglePayingStateBySpace","key","preventDefault","wrapperStyle","videoStyle","onMouseMove","onMouseOut","autoPlay","playsInline","loop","muted","onPlay","onEnded","onDoubleClick","onTimeUpdate","join","square","ownProps","chatId","threadId","messageId","avatarOwnerId","profilePhotoIndex","mediaViewer","selectChatMessage","senderId","avatarOwner","selectUser","selectChat","selectScheduledMessage","props","isActive","animationLevel","isFooterHidden","onFooterClick","setIsFooterHidden","photo","getMessagePhoto","getMessageVideo","webPagePhoto","getMessageWebPagePhoto","webPageVideo","getMessageWebPageVideo","isDocumentPhoto","isMessageDocumentPhoto","isDocumentVideo","isMessageDocumentVideo","isPhoto","isFromSharedMedia","isFromSearch","isGhostAnimation","getMediaHash","isFull","photos","getChatAvatarHash","pictogramBlobUrl","useMedia","ApiMediaFormat","previewMediaHash","previewBlobUrl","fullMediaBlobUrl","getMessageMediaFormat","localBlobUrl","blobUrl","bestImageData","thumbDataUri","getMessageMediaThumbDataUri","videoSize","getMessageFileSize","dimensions","getMessageDocument","mediaSize","getPhotoFullDimensions","getVideoDimensions","AVATAR_FULL_DIMENSIONS","renderPhoto","calculateMediaViewerDimensions","textParts","renderMessageText","hasFooter","onContextMenu","imageSize","canDrag","Spinner","renderVideoPreview","alt","ANIMATION_DURATION","cancelAnimation","SwipeDirection","getMessageId","selectMessage","rest","containerRef","activeSlideRef","transformRef","x","y","scale","swipeDirectionRef","isActiveRef","activeMessageId","setActiveMessageId","setTransform","setIsActive","debounceSetMessage","useDebounce","debounceSwipeDirection","debounceActive","handleToggleFooterVisibility","isFooter","innerHeight","pageY","pageX","innerWidth","useTimeout","lastTransform","lastDragOffset","lastZoomCenter","panDelta","initialContentRect","content","lastGestureTime","Date","now","setLastGestureTime","debounce","changeSlide","direction","mId","offset","animateNumber","from","to","timing","timingFunctions","onUpdate","isNotPassive","excludedClosestSelector","checkIfControlTarget","arePropsShallowEqual","event","captureEvent","dragOffsetX","dragOffsetY","touches","IOS_SCREEN_EDGE_THRESHOLD","absOffsetX","abs","absOffsetY","h","Vertical","Horizontal","onZoom","zoomFactor","initialCenterX","initialCenterY","currentCenterX","currentCenterY","MAX_ZOOM","scaleFactor","scaledCenterX","scaledCenterY","scaleOffsetX","scaleOffsetY","centerX","centerY","absX","absY","boundaries","s1","x1","y1","k","Vx","Vy","minOffsetX","maxOffsetX","right","minOffsetY","top","maxOffsetY","bottom","dirX","nextMessageId","previousMessageId","offsetX","offsetY","getAnimationStyle","checkIfInsideSelector","selector","matches","INITIAL_MATRIX","SCALE_VALUES","ZOOM_SAFE_AREA","children","noWrap","canPan","zoomLevel","panDeltaX","panDeltaY","onPan","tunedZoomLevel","isDragging","setIsDragging","dragData","setDragData","dx","dy","matrixData","setMatrixData","panWrapperRef","panContainerRef","newZoomLevel","newPandx","newPandy","newMatrixData","areSortedArraysEqual","oldScale","wrapper","image","wrapperRect","imageRect","newImgWidth","newImgHeight","newImgX","newImgY","calculateSafeZoneOnZoom","transform","toString","onMouseDown","newDragData","onMouseUp","deltaX","deltaY","getNewMatrixData","sender","isUserId","selectSender","closeMediaViewer","focusMessage","toggleChatInfo","handleFocusMessage","forceSyncOnIOs","senderTitle","getSenderTitle","Avatar","user","chat","renderText","formatMediaDateTime","date","Transition","isShown","onChangeZoom","prevIsShown","usePrevious","inputRef","setZoomLevel","handleZoomOut","handleZoomIn","step","type","Number","settings","byKey","chatMessages","collectionIds","selectScheduledMessages","selectChatMessages","selectOutlyingIds","selectListedIds","currentSearch","selectCurrentMediaSearch","foundIds","resultsByType","media","openMediaViewer","openForwardMenu","singleMessageId","messageIds","getChatMediaMessageIds","selectedMediaMessageIndex","indexOf","isFirst","isLast","animationKey","prevSenderId","slideAnimation","headerAnimation","canPanZoomWrap","setCanPanZoomWrap","setIsZoomed","setPanDelta","getMessageFileName","toggle","mql","matchMedia","MEDIA_VIEWER_MEDIA_QUERY","addListener","removeListener","prevMessage","prevOrigin","prevAvatarOwner","prevBestImageData","dispatchHeavyAnimationEvent","ANIMATION_END_DELAY","fromImage","windowWidth","windowSize","availableWidth","availableHeight","getMediaViewerAvailableDimensions","toWidth","toHeight","calculateDimensions","toLeft","toTop","topOffsetRem","getTopOffset","fromTop","fromLeft","fromWidth","fromHeight","uncovered","realWidth","realHeight","srcWidth","srcHeight","uncover","fromTranslateX","fromTranslateY","fromScaleX","fromScaleY","requestAnimationFrame","clearShape","contains","removeChild","animateOpening","toImage","getElementById","targetTop","el","display","rect","windowHeight","isElementInViewport","shouldFadeOut","existingGhost","getElementsByClassName","transition","transformOrigin","opacity","animateClosing","timer","closeZoom","handleZoomToggle","handleZoomValue","level","canCloseZoom","close","handleFooterClick","handleForward","fromChatId","forceOnHeavyAnimation","captureEscKeyListener","stopCurrentAudio","fromId","index","handlePan","useHistoryBack","handleKeyDown","shouldCloseOnVideo","ShowTransition","isRtl","activeKey","name","currentUserId","chatOrUserIds","filterRef","filter","filterPlaceholder","loadMore","onFilterChange","onSelectChatOrUser","onCloseAnimationEnd","viewportIds","getMore","useInfiniteScroll","resetFilter","useInputFocusOnOpen","handleFilterChange","useKeyboardListNavigation","modalHeader","InputText","onKeyDown","placeholder","viewportOffset","Modal","header","InfiniteScroll","items","onLoadMore","withAbsolutePositioning","maxHeight","CHAT_HEIGHT_PX","i","ListItem","PrivateChatInfo","status","userId","GroupChatInfo","Loading","chats","byId","chatsById","listIds","orderedPinnedIds","activeListIds","active","archivedListIds","archived","pinnedIds","contactIds","contactList","userIds","setForwardChatId","exitForwardMode","setFilter","markIsShown","unmarkIsShown","chatAndContactIds","priorityIds","unique","chatIds","getCanPostInChat","MAIN_THREAD_ID","usersById","getGlobal","users","sortChatIds","filterChatsByName","filterUsersByName","handleSelectUser","renderingChatAndContactIds","useCurrentOrPrev","getErrorHeader","error","isSlowMode","hasErrorKey","pick","dialogs","dismissDialog","acceptInviteConfirmation","sendMessage","showNotification","isModalOpen","openModal","closeModal","dialog","contactRequest","invite","hash","title","about","participantsCount","isChannel","isRequestNeeded","participantsText","joinText","requestToJoinText","renderInviteHeader","isText","renderInvite","contact","getReadableErrorText","notifications","dismissNotification","localId","Notification","onDismiss","toggleSafeLinkModal","handleOpen","open","ensureProtocol","handleDismiss","renderingUrl","ConfirmDialog","confirmLabel","confirmHandler","MAX_SAFE_DATE","WEEKDAY_LETTERS","isDisabledDay","year","month","day","minDate","maxDate","selectedDay","fixedMinDate","getDayStart","fixedMaxDate","formatInputTime","String","padStart","formatDay","selectedAt","minAt","maxAt","isFutureMode","isPastMode","withTimePicker","submitButtonLabel","secondButtonLabel","onSubmit","onSecondButtonClick","passedSelectedDate","prevIsOpen","isTimeInputFocused","markTimeInputAsFocused","unmarkTimeInputAsFocused","selectedDate","setSelectedDate","currentMonthAndYear","setCurrentMonthAndYear","getFullYear","getMonth","selectedHours","setSelectedHours","getHours","selectedMinutes","setSelectedMinutes","getMinutes","getDate","currentYear","currentMonth","getTime","newSelectedDate","shouldDisableNextMonth","shouldDisablePrevMonth","prevMonthGrid","currentMonthGrid","nextMonthGrid","setDate","setMonth","setFullYear","firstDay","getDay","totalDaysInPrevMonth","push","gridDate","lastRowDaysCount","buildCalendarGrid","submitLabel","formatDateToString","code","formatTime","formatSubmitLabel","handleSubmit","handleChangeHours","replace","hours","setHours","hoursStr","handleChangeMinutes","minutes","setMinutes","minutesStr","d","dateCopy","role","tabIndex","handleDateSelect","inputMode","onFocus","onBlur","historyCalendarSelectedAt","searchMessagesByDate","closeHistoryCalendar","handleJumpToDate","timestamp","valueOf","userStatus","selectUserStatus","serverTimeOffset","phoneCodeList","countryList","phoneCodes","isByPhoneNumber","updateContact","importContact","closeNewContactDialog","renderingUser","renderingIsByPhoneNumber","firstName","setFirstName","lastName","setLastName","phone","setPhone","phoneNumber","shouldSharePhoneNumber","setShouldSharePhoneNumber","canBeSubmitted","focus","handleFirstNameChange","handlePhoneChange","formatPhoneNumberWithCode","handleLastNameChange","handleClose","getUserStatus","label","Checkbox","checked","onCheck","isSchedule","selectCurrentMessageList","canDeleteForAll","selectAllowedMessageActions","contactName","getUserFirstOrLastName","getPrivateChatUserId","willDeleteForCurrentUserOnly","isChatBasicGroup","willDeleteForAll","isChatSuperGroup","album","deleteMessages","deleteScheduledMessages","handleDeleteMessageForAll","messages","shouldDeleteForAll","handleDeleteMessageForSelf","onEnter","isPrivateChat","isChatWithSelf","selectIsChatWithSelf","isChatChannel","isGroup","isSuperGroup","canPinForAll","pinMessage","handlePinMessageForAll","isUnpin","handlePinMessage","isOneSide","isSilent","pinnedMessagesCount","onUnpin","selectedMessageIds","selectedMessages","selectCanDeleteSelectedMessages","selectCurrentChat","exitMessageSelectMode","reportMessages","selectedReason","setSelectedReason","description","setDescription","handleReport","reason","handleSelectReason","handleDescriptionChange","REPORT_OPTIONS","RadioGroup","options","selected","messageListType","canDelete","canReport","selectCanReportSelectedMessages","canDownload","selectCanDownloadSelectedMessages","hasProtectedMessage","selectHasProtectedMessage","selectedMessagesCount","selectSelectedMessagesCount","canDeleteMessages","canReportMessages","canDownloadMessages","canPost","openForwardMenuForSelectedMessages","downloadSelectedMessages","copySelectedMessages","isDeleteModalOpen","openDeleteModal","closeDeleteModal","isReportModalOpen","openReportModal","closeReportModal","handleCopy","IS_MAC_OS","metaKey","ctrlKey","getKeyFromEvent","useCopySelectedMessages","captureKeyboardListeners","onBackspace","onDelete","onEsc","handleDownload","prevSelectedMessagesCount","renderingSelectedMessagesCount","formattedMessagesCount","renderButton","destructive","seenByModal","memberIds","seenByUserIds","openChat","closeSeenByModal","handleClick","renderingMemberIds","noStatusOrTyping","reactorModal","reactions","reactors","loadReactors","closeReactorListModal","isClosing","startClosing","stopClosing","chosenTab","setChosenTab","canShowFilters","count","results","chatIdRef","handleCloseAnimationEnd","handleLoadMore","allReactions","l","reaction","concat","nextOffset","LoadMoreDirection","formatIntegerCompact","find","ReactionStaticEmoji","fullName","getUserFullName","activeEmojiInteraction","animatedEffect","selectAnimatedEmojiEffect","effectAnimationId","localEffectAnimation","keys","ANIMATED_STICKERS_PATHS","stopActiveEmojiInteraction","isHiding","startHiding","isPlaying","startPlaying","stop","handleCancelAnimation","dispatchHeavyAnimationStop","effectAnimationData","localEffectAnimationData","setLocalEffectAnimationData","getAnimationData","then","data","startSize","isReversed","AnimatedSticker","animationData","play","quality","IS_ANDROID","noLoop","onLoad","onSelect","buttonRef","activeElement","privateChatUserId","isPinned","selectIsChatPinned","selectIsChatMuted","selectNotifySettings","selectNotifyExceptions","canChangeFolder","chatFolders","orderedIds","withUsername","isChatFolderModalOpen","openChatFolderModal","closeChatFolderModal","contextActions","useChatContextActions","handleDelete","handleChatFolderChange","useSelectWithEnter","avatarSize","DeleteChatModal","runThrottled","cb","topUserIds","topPeers","recentlyFoundChatIds","globalSearch","onReset","loadTopUsers","loadContactList","addRecentlyFoundChatId","clearRecentlyFoundChats","topUsersRef","useHorizontalScroll","shouldReplaceHistory","lastSyncTime","privateChatUser","searchQuery","mediaThumbnail","mediaBlobUrl","isRoundVideo","getMessageRoundVideo","isSavedMessages","isSelf","getChatTitle","isVerified","VerifiedIcon","Link","formatPastTimeShort","renderMessageSummary","renderSummary","searchDate","suggestions","match","suggestion","currentDate","latestYear","getSuggestionsFromDate","localContactIds","fetchingStatus","globalResults","localResults","globalChatIds","globalUserIds","localChatIds","localUserIds","byChatId","globalMessagesByChatId","dateSearchQuery","onSearchDateSelect","searchMessagesGlobal","setGlobalSearchChatId","shouldShowMoreLocal","setShouldShowMoreLocal","shouldShowMoreGlobal","setShouldShowMoreGlobal","query","handleChatClick","handlePickerItemClick","startsWith","MEMO_EMPTY_ARRAY","contactIdsWithMe","foundContactIds","foundMessages","split","sort","a","b","handleClickShowMoreLocal","handleClickShowMoreGlobal","nothingFound","noScrollRestoreOnTop","noFastList","NothingFound","PickerSelectedItem","chatOrUserId","clickArg","createMapStateToProps","currentType","isVoice","activeDownloads","theme","selectTheme","isLoading","searchChatId","isChatProtected","CURRENT_TYPE","observe","observeIntersectionForMedia","useIntersectionObserver","rootRef","throttleMs","handleSelectMedia","canRenderContents","useAsyncRendering","SLIDE_TRANSITION_DURATION","isMediaGrid","isMessageList","itemSelector","Media","idPrefix","observeIntersection","handleMessageFocus","shouldDrawDateDivider","toYearMonth","formatMonthAndYear","WebLink","getSenderName","onMessageClick","Document","withDate","datetime","smaller","onDateClick","openAudioPlayer","handlePlayAudio","Audio","AudioOrigin","TABS","GlobalSearchContent","CHAT_TABS","slice","TRANSITION_RENDER_COUNT","currentContent","setGlobalSearchContent","setGlobalSearchDate","activeTab","setActiveTab","parseDateString","handleSwitchTab","tab","handleSearchDateSelect","TabList","tabs","onSwitchTab","renderCount","INITIAL_STATE","currentPassword","password","hint","email","twoFaReducer","state","action","payload","currentScreen","editedFolderId","onSaveFilter","onScreenSelect","signOut","deleteChatFolder","isSignOutDialogOpen","setIsSignOutDialogOpen","isDeleteFolderDialogOpen","setIsDeleteFolderDialogOpen","openSignOutConfirmation","closeSignOutConfirmation","openDeleteFolderConfirmation","closeDeleteFolderConfirmation","handleSignOutMessage","handleDeleteFolderMessage","SettingsMenuButton","SettingsScreens","renderHeaderContent","confirmIsDestructive","currentUser","loadProfilePhotos","profileId","ProfileInfo","forceShowSelf","ChatExtra","LINK_PREFIX","LINK_PREFIX_REGEX","USERNAME_REGEX","runDebouncedForCheckUsername","currentUsername","asLink","isUsernameAvailable","checkUsername","username","setUsername","langPrefix","usernameSuccess","usernameError","test","handleUsernameChange","newUsername","trim","isValid","isUsernameValid","success","readOnly","ERROR_FIRST_NAME_MISSING","ERROR_BIO_TOO_LONG","profileEdit","currentFirstName","currentLastName","fullInfo","bio","currentBio","currentAvatarHash","loadCurrentUser","updateProfile","isUsernameTouched","setIsUsernameTouched","isProfileFieldsTouched","setIsProfileFieldsTouched","setError","setPhoto","setBio","currentAvatarBlobUrl","ProfileEditProgress","isUsernameError","isSaveButtonShown","handlePhotoChange","newPhoto","handleBioChange","handleProfileSave","trimmedFirstName","trimmedLastName","trimmedBio","AvatarEditable","UsernameInput","FloatingActionButton","canAutoLoadPhotoFromContacts","canAutoLoadPhotoInPrivateChats","canAutoLoadPhotoInGroups","canAutoLoadPhotoInChannels","canAutoLoadVideoFromContacts","canAutoLoadVideoInPrivateChats","canAutoLoadVideoInGroups","canAutoLoadVideoInChannels","canAutoLoadFileFromContacts","canAutoLoadFileInPrivateChats","canAutoLoadFileInGroups","canAutoLoadFileInChannels","canAutoPlayGifs","canAutoPlayVideos","autoLoadFileMaxSizeMb","setSettingOption","renderFileSizeCallback","AUTODOWNLOAD_FILESIZE_MB_LIMITS","handleFileSizeChange","handleCanAutoPlayGifsChange","handleCanAutoPlayVideosChange","renderAutoDownloadBlock","canAutoLoadFromContacts","canAutoLoadInPrivateChats","canAutoLoadInGroups","canAutoLoadInChannels","isChecked","renderValue","renderContentSizeSlider","runThrottledForLoadRecommended","orderedFolderIds","foldersById","recommended","recommendedChatFolders","onCreateFolder","onEditFolder","loadRecommendedChatFolders","addChatFolder","showDialog","setAnimationData","isAnimationLoaded","setIsAnimationLoaded","handleAnimationLoad","handleCreateFolder","chatsCountByFolderId","useFolderManagerForChatsCount","userFolders","folder","subtitle","getFolderDescriptionText","handleCreateFolderFromRecommended","STICKER_SIZE_FOLDER_SETTINGS","pill","fluid","narrow","multiline","itemName","itemPluralName","ERROR_NO_TITLE","ERROR_NO_CHATS","loadedActiveChatIds","loadedArchivedChatIds","dispatch","onAddIncludedChats","onAddExcludedChats","onBack","editChatFolder","isIncludedChatsListExpanded","setIsIncludedChatsListExpanded","isExcludedChatsListExpanded","setIsExcludedChatsListExpanded","selectedChatIds","includedChatIds","selectedChatTypes","includedChatTypes","selectChatFilters","excludedChatIds","excludedChatTypes","folderId","visibleIncludedChatIds","visibleExcludedChatIds","allLoadedChatsSet","Set","loadedIncludedChatIds","findIntersectionWithSet","loadedExcludedChatIds","mode","handleChange","folderUpdate","renderChats","visibleChatIds","isExpanded","leftChatsCount","clickHandler","chatType","INCLUDED_CHAT_TYPES","typeKey","EXCLUDED_CHAT_TYPES","inactive","renderChatType","isTouched","selectedIds","filterValue","onSelectedIdsChange","onSelectedChatTypesChange","chatTypes","shouldMinimize","hasMaxChats","handleItemClick","newSelectedIds","splice","handleChatTypeClick","newSelectedChatTypes","selectedType","isMinimized","canClose","isSelected","withChatType","chatFilter","folderAllOrderedIds","useFolderManagerForOrderedIds","ALL_FOLDER_ID","folderArchivedOrderedIds","ARCHIVED_FOLDER_ID","displayedIds","newFilter","handleSelectedIdsChange","ids","includeFilters","excludeFilters","handleSelectedChatTypesChange","newFilters","forEach","shownScreen","handleReset","handleEditFolder","handleAddIncludedChats","handleAddExcludedChats","STICKER_SIZE_PICKER_HEADER","stickerSet","isIntersecting","useIsIntersecting","mediaHash","lottieData","useMediaTransition","firstLetters","getFirstLetters","hasThumbnail","isVideos","IS_WEBM_SUPPORTED","stickers","firstSticker","isLottie","STICKER_SIZE_GENERAL_SETTINGS","StickerButton","sticker","noContextMenu","ANIMATION_LEVEL_OPTIONS","TIME_FORMAT_OPTIONS","stickerSetIds","added","setIds","stickerSetsById","setsById","defaultReaction","appConfig","messageTextSize","messageSendKeyCombo","shouldSuggestStickers","shouldLoopStickers","timeFormat","stickerSettingsRef","observeIntersectionForCovers","setSticker","KEYBOARD_SEND_OPTIONS","subLabel","handleAnimationLevelChange","newLevel","_","handleMessageTextSizeChange","newSize","documentElement","setProperty","setAttribute","handleTimeFormatChange","newTimeFormat","wasTimeFormatSetManually","setTimeFormat","handleStickerSetClick","handleMessageSendComboChange","newCombo","handleSuggestStickersChange","newValue","handleShouldLoopStickersChange","stickerSets","installedDate","fromSticker","hex2rgb","param","parseInt","substring","rgb2hex","p0","p1","p2","rgb2hsb","r","g","s","v","hsb2rgb","f","p","q","t","getPatternColor","rgbColor","hue","saturation","wallpaper","slug","localMediaHash","thumbRef","useCanvasBlur","thumbnail","isLoadAllowed","setIsLoadAllowed","fullMedia","wasLoadDisabled","UPLOADING_WALLPAPER_SLUG","cacheKeyRef","handleSelect","blob","fetchBlob","cacheApi","save","CUSTOM_BG_CACHE_NAME","isAllowed","background","isBlurred","themes","loadedWallpapers","loadWallpapers","uploadWallpaper","setThemeSettings","themeRef","handleFileSelect","files","handleUploadWallpaper","openSystemFilesDialog","handleSetColor","handleResetToDefault","backgroundColor","patternColor","DARK_THEME_PATTERN_COLOR","DEFAULT_PATTERN_COLOR","handleWallPaperSelect","currentWallpaper","async","defaultRGB","rgb","context","preloadImage","naturalHeight","naturalWidth","offsetWidth","drawImage","getImageData","blockSize","getAverageColor","handleWallPaperBlurChange","isUploading","DEFAULT_HSB","PREDEFINED_COLORS","hsb2positions","hsb","rects","colorPosition","colorRect","huePosition","hueRect","positions2hsb","colorPickerRef","huePickerRef","isFirstRunRef","setHsb","getInitialHsb","hsbRef","markIsDragging","unmarkIsDragging","rgbInput","setRgbInput","hexInput","setHexInput","rectsRef","colorCtxRef","offsetLeft","handleColorDrag","handleHueDrag","selectorToPreventScroll","withCursor","hex","hueHex","w","ctx","imgData","createImageData","pixels","col","perY","st","ed","perX","putImageData","drawColor","drawHue","handleRgbChange","rgbValue","channel","handleHexChange","hexValue","handlePredefinedColorClick","dataset","hasPrivateChatsNotifications","hasPrivateChatsMessagePreview","hasGroupNotifications","hasGroupMessagePreview","hasBroadcastNotifications","hasBroadcastMessagePreview","hasContactJoinedNotifications","hasWebNotifications","hasPushNotifications","notificationSoundVolume","loadNotificationSettings","updateContactSignUpNotification","updateNotificationSettings","updateWebNotificationSettings","runDebounced","handleSettingsChange","peerType","setting","currentIsSilent","currentShouldShowPreviews","shouldShowPreviews","handleWebNotificationsChange","handlePushNotificationsChange","handlePrivateChatsNotificationsChange","handlePrivateChatsPreviewChange","handleGroupsNotificationsChange","handleGroupsPreviewChange","handleChannelsNotificationsChange","handleChannelsPreviewChange","handleContactNotificationChange","playNotifySound","hasPassword","isSensitiveEnabled","canChangeSensitive","privacy","blocked","activeSessions","blockedCount","totalCount","sessionsCount","visibilityPrivacyPhoneNumber","visibility","visibilityPrivacyLastSeen","lastSeen","visibilityPrivacyProfilePhoto","profilePhoto","visibilityPrivacyForwarding","forwards","visibilityPrivacyGroupChats","chatInvite","loadPrivacySettings","loadBlockedContacts","loadAuthorizations","loadContentSettings","updateContentSettings","getVisibilityValue","languages","language","loadLanguages","selectedLanguage","setSelectedLanguage","markIsLoading","unmarkIsLoading","langCode","setLanguage","currentLangCode","navigator","toLowerCase","shortLangCode","substr","nativeName","buildOptions","loadingOption","getPrivacyKey","screen","privacySettings","allowUserIds","allowChatIds","blockUserIds","blockChatIds","setPrivacyVisibility","visibilityOptions","exceptionLists","shouldShowDenied","shouldShowAllowed","privacyKey","headerText","descriptionText","allowedContactsScreen","deniedContactsScreen","allowedCount","reduce","result","membersCount","blockCount","handleVisibilityChange","getLocation","session","region","country","getDeviceEnvironment","deviceModel","platform","systemVersion","terminateAuthorization","terminateAllAuthorizations","isConfirmTerminateAllDialogOpen","openConfirmTerminateAllDialog","closeConfirmTerminateAllDialog","handleTerminateSessionClick","handleTerminateAllSessions","currentSession","isCurrent","otherSessions","appName","ip","sessions","handler","dateActive","blockedIds","userSearch","setUserSearchQuery","blockContact","filteredContactIds","availableContactIds","contactId","firstId","secondId","secondName","localeCompare","handleRemoveUser","accessHash","chatsByIds","usersByIds","unblockContact","isBlockUserModalOpen","openBlockUserModal","closeBlockUserModal","handleUnblockClick","isPrivate","renderContact","animatedEmoji","selectAnimatedEmoji","AnimatedEmoji","expectedPassword","clearError","validationError","setValidationError","shouldShowPassword","setShouldShowPassword","newPassword","handleClearError","PasswordMonkey","isBig","isPasswordVisible","PasswordForm","onChangePasswordVisibility","onStart","FOCUS_DELAY_TIMEOUT_MS","shouldConfirm","setValue","isConfirmShown","markIsConfirmShown","unmarkIsConfirmShown","handleInputChange","handleSkip","handleSkipConfirm","codeLength","twoFaSettings","waitingEmailCodeLength","updatePassword","checkPassword","clearTwoFaError","updateRecoveryEmail","provideTwoFaEmailCode","clearPassword","handleStartWizard","handleNewPassword","handleNewPasswordConfirm","handleNewPasswordHint","handleNewPasswordEmail","onSuccess","handleChangePasswordCurrent","handleChangePasswordNew","handleChangePasswordConfirm","handleChangePasswordHint","handleTurnOff","handleRecoveryEmailCurrentPassword","handleRecoveryEmail","handleEmailCode","getCurrentPrivacySettings","isAllowList","setPrivacySettings","selectedContactIds","setSearchQuery","isSubmitShown","setIsSubmitShown","newSelectedContactIds","setNewSelectedContactIds","isChatGroup","handleSelectedContactIdsChange","contactsIds","Picker","itemIds","searchInputId","availableReactions","selectedReaction","setDefaultReaction","isInactive","TWO_FA_SCREENS","FOLDERS_SCREENS","PRIVACY_SCREENS","PRIVACY_PHONE_NUMBER_SCREENS","PRIVACY_LAST_SEEN_PHONE_SCREENS","PRIVACY_PROFILE_PHOTO_SCREENS","PRIVACY_FORWARDING_SCREENS","PRIVACY_GROUP_CHATS_SCREENS","foldersState","foldersDispatch","shouldSkipTransition","twoFaState","twoFaDispatch","useReducer","handleSaveFilter","renderCurrentSection","isScreenActive","isFrom","currentKey","privacyAllowScreens","isTwoFaScreen","isFoldersScreen","isPrivacyScreen","values","SettingsGeneralBackgroundColor","renderCurrentSectionContent","LAYERS_ANIMATION_NAME","statusesById","userStatusesById","openNewContactDialog","filteredIds","sortUserIds","isSearching","selectedMemberIds","onSelectedMemberIdsChange","onNextStep","setGlobalSearchQuery","canBeInvitedToGroup","isUserBot","handleNextStep","creationProgress","creationError","chatCreation","createGroupChat","createChannel","setTitle","setAbout","chatTitleEmptyError","channelTitleEmptyError","chatTooManyUsersError","ChatCreationProgress","handleTitleChange","handleCreateGroup","handleCreateChannel","renderedError","RENDER_COUNT","LeftColumnContent","onContentChange","newChatMemberIds","setNewChatMemberIds","isStepActive","ChatList","folderType","folderOrderedIds","editChatFolders","initialSelectedFolderIds","pinnedChatIds","selectedFolderIds","setSelectedFolderIds","folders","idsToRemove","idsToAdd","CheckboxGroup","getCopyLabel","hasSelection","scrollLockEl","IGNORED_KEYS","Down","ArrowDown","Up","ArrowUp","Left","ArrowLeft","Right","ArrowRight","PageUp","PageDown","End","Home","Tab","getTouchY","changedTouches","clientY","scrollHeight","preventDefaultForScrollKeys","HTMLElement","tagName","getAttribute","isTextBox","disableScrolling","_excludedClosestSelector","passive","onkeydown","enableScrolling","REACTION_SIZE","IS_COMPACT_MENU","cn","createClassNameBuilder","previewIndex","onSendReaction","isReady","selectAnimation","isActivated","activate","deactivate","markAnimationLoaded","shouldRenderAnimated","animatedClassNames","shouldRenderStatic","staticClassNames","onMouseEnter","enabledReactions","itemsScrollRef","isHorizontalScrollEnabled","enableHorizontalScroll","handleWheel","onWheelCapture","onTouchMove","anchor","canSendNow","canReschedule","canReply","canEdit","canPin","canUnpin","canForward","canFaveSticker","canUnfaveSticker","canCopy","canCopyLink","canSelect","canSaveGif","canShowSeenBy","canShowReactionsCount","canRemoveReaction","canShowReactionList","seenByRecentUsers","onReply","onEdit","onPin","onReport","onFaveSticker","onUnfaveSticker","onSend","onReschedule","onCopyLink","onDownload","onSaveGif","onShowSeenBy","onShowReactors","onCopyMessages","menuRef","scrollableRef","copyOptions","afterEffect","getMessageText","canImageBeCopied","hasMessageLocalBlobUrl","CLIPBOARD_ITEM_SUPPORTED","selection","getSelection","Promise","resolve","mediaLoader","copyImageToClipboard","anchorNode","parentNode","getMessageIdsForSelectedText","clipboardText","getMessageTextWithSpoilers","copyTextToClipboard","getMessageCopyOptions","noReactions","withReactions","markIsReady","unmarkIsReady","getTriggerElement","getRootElement","getMenuElement","getLayout","extraHeightAudioPlayer","pinnedElement","extraHeightPinned","extraPaddingX","extraTopPadding","marginSides","extraMarginTop","handleRemoveReaction","transformOriginX","transformOriginY","menuStyle","withScroll","useContextMenuPosition","bubbleStyle","option","START_SIZE","selectActiveDownloadIds","seenByExpiresAt","seenByMaxChatMembers","noOptions","isScheduled","isLocal","isMessageLocal","isOwnMessage","isAction","isActionMessage","areReactionsEmpty","canSeeList","some","isChosen","hasFullInfo","SERVICE_NOTIFICATIONS_USER_ID","chatUsername","setReplyingToId","setEditingId","faveSticker","unfaveSticker","toggleMessageSelection","sendScheduledMessages","rescheduleMessage","loadSeenBy","openSeenByModal","sendReaction","openReactorListModal","loadFullChat","copyMessagesByIds","saveGif","isMenuOpen","setIsMenuOpen","setIsDeleteModalOpen","setIsReportModalOpen","isPinModalOpen","setIsPinModalOpen","isCalendarOpen","openCalendar","closeCalendar","recentReactions","msg","closeMenu","closePinModal","handleCloseCalendar","handleReply","handleEdit","handlePin","handleUnpin","handleFaveSticker","handleUnfaveSticker","handleSelectMessage","params","childMessageIds","withShift","handleScheduledMessageSend","handleOpenCalendar","handleOpenSeenByModal","handleOpenReactorListModal","handleRescheduleMessage","scheduledAt","handleCopyMessages","handleCopyLink","handleSaveGif","gif","handleSendReaction","reportMessageIds","scheduledMaxDate","getDayStartAt","stickerSetShortName","currentMessageList","sendOptions","getAllowedAttachmentOptions","canSendStickers","canScheduleUntilOnline","selectCanScheduleUntilOnline","shouldSchedule","selectShouldSchedule","selectStickerSet","stickerSetId","selectStickerSetByShortName","loadStickers","toggleStickerSet","requestCalendar","calendar","useSchedule","stickerSetAccessHash","isScheduleRequested","isPreloadedGlobally","handleButtonClick","hasCloseButton","STICKER_SIZE_MODAL","isRestricted","canAddContact","getCanAddContact","canDeleteChat","getCanDeleteChat","hasLinkedChat","linkedChatId","withExtraActions","canStartBot","canRestartBot","canSubscribe","canSearch","canCall","canMute","canViewStatistics","canLeave","canEnterVoiceChat","canCreateVoiceChat","onSubscribeChannel","onSearchClick","updateChatMutedState","enterMessageSelectMode","sendBotCommand","restartBot","joinGroupCall","createGroupCall","openLinkedChat","openAddContactDialog","openCallFallbackConfirm","toggleStatistics","handleStartBot","command","handleRestartBot","handleToggleMuteClick","handleEnterVoiceChatClick","handleLinkedChatClick","handleAddContactClick","handleSubscribe","handleCall","handleSearch","handleStatisticsClick","handleSelectMessages","Portal","runDebouncedForSearch","selectCurrentTextSearch","isHistoryCalendarOpen","setLocalTextSearchQuery","searchTextMessagesLocal","closeLocalTextSearch","openHistoryCalendar","focusedIndex","setFocusedIndex","visualViewport","mainEl","pageTop","Array","input","div","contentEditable","blur","handleMessageSearchQueryChange","newQuery","handleUp","newFocusIndex","handleDown","SearchInput","findInViewport","selectorOrElements","margin","isDense","shouldContainBottom","isHorizontal","viewportY1","viewportY2","allElements","visibleIndexes","isFound","y2","setTooltipItemVisible","first","isFullyVisible","fastSmoothScroll","useKeyboardNavigation","shouldSaveSelectionOnUpdateItems","shouldRemoveSelectionOnReset","noArrowNavigation","shouldSelectOnTab","selectedItemIndex","setSelectedItemIndex","getSelectedIndex","newIndex","cycleRestrict","handleArrowKey","handleItemSelect","item","isSelectionOutOfRange","onUp","onDown","onLeft","onRight","onTab","onInsertUserName","filteredUsers","handleUserSelect","forceFocus","handleSelectMention","member","selectedMentionIndex","prevChatMembers","renderedChatMembers","attachments","caption","canShowCustomSendMenu","groupChatMembers","recentEmojis","baseEmojiKeywords","emojiKeywords","addRecentEmoji","onCaptionUpdate","onFileAppend","onClear","onSendSilent","onSendScheduled","captionRef","useStateRef","mainButtonRef","hideTimeoutRef","prevAttachments","renderingAttachments","isHovered","markHovered","unmarkHovered","isQuick","every","quick","isMentionTooltipOpen","closeMentionTooltip","insertMention","mentionFilteredUsers","useMentionTooltip","EDITABLE_INPUT_MODAL_ID","isEmojiTooltipOpen","closeEmojiTooltip","filteredEmojis","insertEmoji","useEmojiTooltip","isContextMenuOpen","isCustomSendMenuOpen","handleContextMenu","handleContextMenuClose","handleContextMenuHide","useContextMenuHandlers","sendAttachments","handleFilesDrop","dataTransfer","newFiles","file","CONTENT_TYPES_WITH_PREVIEW","areAllPhotos","SUPPORTED_IMAGE_CONTENT_TYPES","mimeType","areAllVideos","SUPPORTED_VIDEO_CONTENT_TYPES","areAllAudios","isOpenToBottom","onSendSchedule","renderHeader","onDragEnter","onDrop","onDragOver","onDragLeave","relatedTarget","toTarget","fromTarget","attachment","File","filename","extension","getFileExtension","previewData","emojis","onEmojiSelect","MessageInput","isAttachmentModalInput","html","editableInputId","canAutoFocus","shouldBeAnonimous","questionInputRef","optionsListRef","solutionRef","question","setQuestion","setOptions","isAnonymous","setIsAnonymous","isMultipleAnswers","setIsMultipleAnswers","isQuizMode","setIsQuizMode","solution","setSolution","correctOption","setCorrectOption","hasErrors","setHasErrors","focusInput","solutionEl","innerHTML","addNewOption","newOptions","list","scrollTo","behavior","handleCreate","questionTrimmed","optionsTrimmed","o","summary","answers","correct","isPublic","multipleChoice","quiz","entities","parseMessageInput","correctAnswers","solutionEntities","updateOption","removeOption","handleCorrectOptionChange","handleIsAnonymousChange","handleMultipleAnswersChange","handleQuizModeChange","handleKeyPress","keyCode","handleQuestionChange","getQuestionError","getOptionsError","renderOptions","onKeyPress","renderQuizNoOptionError","hidden","emoji","native","names","IS_EMOJI_SUPPORTED","loading","category","allEmojis","useOnIntersect","emojisPerRow","ceil","displayedEmoji","ICONS_BY_CATEGORY","recent","people","nature","foods","activity","places","objects","symbols","flags","categoryIntersections","emojiDataPromise","emojiRawData","emojiData","headerRef","categories","setCategories","setEmojis","activeCategoryIndex","setActiveCategoryIndex","entries","entry","intersectingWithIndexes","newLeft","HEADER_BUTTON_WIDTH","fastSmoothScrollHorizontal","allCategories","themeCategories","unshift","exec","default","uncompressEmoji","ensureEmojiData","selectCategory","categoryEl","handleEmojiSelect","MENU_TRANSITION_DURATION","containerClassName","faded","STICKER_MARGIN","loadAndPlay","favoriteStickers","onStickerSelect","onStickerUnfave","onStickerFave","stickersPerRow","STICKER_SIZE_PICKER","favoriteStickerIdsSet","noAnimate","onUnfaveClick","has","onFaveClick","stickerSetIntersections","favorite","recentStickers","addedSetIds","shouldPlay","loadRecentStickers","addRecentSticker","activeSetIndex","setActiveSetIndex","sendMessageAction","useSendMessageAction","areAddedLoaded","allSets","noPopulatedSets","stickerSetEl","handleStickerSelect","handleStickerUnfave","handleStickerFave","fullClassName","buttonClassName","onUnsaveClick","videoData","shouldRenderVideo","isVideoReady","contextMenuPosition","handleBeforeContextMenu","handleUnsaveClick","handleContextDelete","handleSendQuiet","handleSendScheduled","handleMouseDown","preventMessageInputBlurWithBubbling","preload","savedGifs","gifs","saved","canSendGifs","onGifSelect","loadSavedGifs","debounceMs","shouldUnsave","SymbolMenuTabs","SYMBOL_MENU_TAB_TITLES","SYMBOL_MENU_TAB_ICONS","Emoji","Stickers","GIFs","onRemoveSymbol","onSearchOpen","renderTabButton","handleSearchOpen","isLeftColumnShown","setRecentEmojis","handleMouseEnter","handleMouseLeave","useMouseInside","fastRaf","recentEmojisRef","renderContent","onMouseLeave","noCloseOnBackdrop","noCompact","withAvatar","botCommand","bot","botCommands","handleSendCommand","botId","selectedCommandIndex","prevCommands","renderedCommands","chatBotCommand","forEmoji","clearStickersForEmoji","prevStickers","displayedStickers","listEmojis","usePrevDuringAnimation","handleSelectEmoji","selectedIndex","setItemVisible","thumbUrl","thumbnailDataUrl","decoding","webThumbnail","isForGallery","inlineResult","_gif","STICKER_SIZE_INLINE_BOT_RESULT","isGallery","inlineBotResults","switchPm","onSelectResult","startBot","handleSendPm","startParam","prevInlineBotResults","renderedInlineBotResults","sensitiveArea","inlineBotResult","selectedSendAsId","sendAsIds","saveDefaultSendAs","markMouseInside","sendAsId","selectedSendAsIndex","messagesById","viewportResults","senderUser","senderChat","forwardInfo","isChannelPost","foundResult","isOnTop","preloadBackwards","teactOrderKey","LastMessageMeta","selectShouldLoopStickers","isSomeModalOpen","onModalToggle","isAdded","areStickersLoaded","coverStickerIds","covers","otherStickers","handleAddClick","canRenderStickers","STICKER_SIZE_SEARCH","selectCurrentStickerSearch","resultIds","featured","featuredIds","loadFeaturedStickers","setIsModalOpen","selectCurrentGifSearch","isChatWithBot","selectIsChatWithBot","canPostInChat","searchMoreGifs","setGifSearchQuery","handleGifClick","hasResults","CHANNEL_OVERVIEW","isPercentage","GROUP_OVERVIEW","statistics","period","formatFullDate","row","cell","field","percentage","change","isChangeNegative","renderOverviewItemValue","views","formatDateTimeToString","lovelyChartPromise","LovelyChart","CHANNEL_GRAPHS_TITLES","growthGraph","followersGraph","muteGraph","topHoursGraph","viewsBySourceGraph","newFollowersBySourceGraph","languagesGraph","interactionsGraph","CHANNEL_GRAPHS","GROUP_GRAPHS_TITLES","membersGraph","messagesGraph","actionsGraph","GROUP_GRAPHS","selectStatistics","dcId","statisticsDcId","setIsReady","loadedCharts","loadStatistics","loadStatisticsAsyncGraph","graphs","graphTitles","graph","token","ensureLovelyChart","zoomToken","create","callApi","zoomOutLabel","recentTopMessages","answer","voters","offsets","pollResults","answerVote","totalVoters","loadPollOptionResults","closePollResults","prevVotersCount","votersCount","setIsLoading","areVotersLoaded","limit","shouldResetVoters","handleViewMoreClick","handleMemberClick","leftVotersCount","renderViewMoreButton","total","getMessagePoll","resultsByOption","buildCollectionByKey","management","deleteContact","closeManagement","isDeleteDialogOpen","openDeleteDialog","closeDeleteDialog","isNotificationsEnabled","setIsNotificationsEnabled","ManagementProgress","handleNotificationChange","handleDeleteContact","withFullInfo","GROUP_TITLE_EMPTY","hasLinkedChannel","isBasicGroup","invites","canChangeInfo","isCreator","getHasAdminRight","canBanUsers","canInvite","exportedInvites","availableReactionsCount","togglePreHistoryHidden","updateChat","deleteChat","leaveChannel","deleteChannel","loadExportedChatInvites","loadChatJoinRequests","currentTitle","currentAbout","imageHash","isPublicGroup","isRevoked","handleClickEditType","ManagementScreens","handleClickDiscussion","handleClickReactions","handleClickPermissions","handleClickAdministrators","handleClickInvites","handleClickRequests","handleSetPhoto","handleAboutChange","handleUpdateGroup","trimmedTitle","trimmedAbout","handleClickMembers","handleTogglePreHistory","isPreHistoryHidden","isEnabled","enabledReactionsCount","enabledPermissionsCount","defaultBannedRights","sendStickers","sendGifs","adminsCount","adminMembers","handleDeleteGroup","formatInteger","joinRequests","onChatMemberSelect","updateChatDefaultBannedRights","permissions","setPermissions","havePermissionChanged","setHavePermissionChanged","handleRemovedUsersClick","handleAddExceptionClick","handleExceptionMemberClick","promotedByUserId","handlePermissionChange","getUpdatedPermissionValue","handleSavePermissions","bannedRights","removedUsersCount","kickedMembers","exceptionMembers","members","getMemberExceptions","langKey","getLangKeyForBannedRightKey","translatedString","sendMessages","blocking","sendMedia","sendPolls","embedLinks","inviteUsers","pinMessages","changeInfo","loadMoreMembers","deleteChatMember","usersId","availableMemberIds","acc","isAdmin","isOwner","canDeleteMembers","updateChatMemberBannedRights","isRemoveUserModalOpen","openRemoveUserModal","closeRemoveUserModal","removedMembers","getRemovedBy","kickedByUserId","kickedByUser","getContextActions","CHANNEL_TITLE_EMPTY","isSignaturesShown","toggleSignatures","handleUpdateChannel","handleToggleSignatures","handleClickSubscribers","handleDeleteChannel","selectManagement","checkPublicLink","updatePublicLink","updatePrivateLink","toggleIsProtected","privateLink","inviteLink","privacyType","setPrivacyType","isRevokeConfirmDialogOpen","openRevokeConfirmDialog","closeRevokeConfirmDialog","canUpdate","handleOptionChange","handleForwardingOptionChange","handleSave","handleRevokePrivateLink","langPrefix1","langPrefix2","forwardingOptions","SafeLink","forDiscussionIds","linkedChat","loadGroupsForDiscussion","linkDiscussionGroup","unlinkDiscussionGroup","linkedGroupId","setLinkedGroupId","isConfirmUnlinkGroupDialogOpen","openConfirmUnlinkGroupDialog","closeConfirmUnlinkGroupDialog","isConfirmLinkGroupDialogOpen","openConfirmLinkGroupDialog","closeConfirmLinkGroupDialog","handleUnlinkGroupSessions","channelId","handleLinkGroupSessions","STICKER_SIZE_DISCUSSION_GROUPS","teactFastList","linkedGroup","renderLinkGroupHeader","hasPrivateLink","renderLinkGroupConfirmText","isButtonsInOneRow","isPromotedByCurrentUser","isFormFullyDisabled","selectedChatMemberId","isBanConfirmationDialogOpen","openBanConfirmationDialog","closeBanConfirmationDialog","selectedChatMember","handleBanFromGroup","viewMessages","getControlIsDisabled","handleRecentActionsClick","handleAdminMemberClick","handleAddAdminClick","getMemberStatus","promotedByUser","defaultRights","adminRights","isNewAdmin","selectedUserId","updateChatAdmin","setIsTouched","isDismissConfirmationDialogOpen","openDismissConfirmationDialog","closeDismissConfirmationDialog","customTitle","setCustomTitle","selectedAdminMember","handleDismissAdmin","memberStatus","handleCustomTitleChange","postMessages","editMessages","banUsers","addAdmins","manageCall","anonymous","maxLength","noAdmins","adminIds","shouldUseSearchResults","listedIds","noScrollRestore","memberId","inviteComparator","i1","i2","isPermanent","i1IsPermanent","usage","i1Usage","i1Date","i2IsPermanent","i2Usage","i2Date","revokedInvites","revokedExportedInvites","setEditingExportedInvite","editExportedChatInvite","deleteExportedChatInvite","deleteRevokedExportedChatInvites","setOpenedInviteInfo","isDeleteRevokeAllDialogOpen","openDeleteRevokeAllDialog","closeDeleteRevokeAllDialog","isRevokeDialogOpen","openRevokeDialog","closeRevokeDialog","revokingInvite","setRevokingInvite","deletingInvite","setDeletingInvite","hasDetailedCountdown","expireDate","getServerTime","MILLISECONDS_IN_DAY","useInterval","primaryInvite","primaryInviteLink","link","temporalInvites","revokeInvite","usageLimit","askToRevoke","handleRevoke","handleCreateNewClick","handlePrimaryRevoke","handleDeleteAllRevoked","showInviteInfo","deleteInvite","askToDelete","copyLink","handleCopyPrimaryClicked","prepareUsageText","requested","diff","formatCountdown","prepareContextActions","actions","editInvite","PrimaryLinkMenuButton","STICKER_SIZE_INVITES","secondaryIcon","DEFAULT_USAGE_LIMITS","DEFAULT_EXPIRE_DATE","hour","week","DEFAULT_CUSTOM_EXPIRE_DATE","editingInvite","exportChatInvite","isCalendarOpened","setIsRequestNeeded","customExpireDate","setCustomExpireDate","selectedExpireOption","setSelectedExpireOption","customUsageLimit","setCustomUsageLimit","selectedUsageOption","setSelectedUsageOption","isSubmitBlocked","setIsSubmitBlocked","oldEditingInvite","editingTitle","editingIsRequestNeeded","minSafeDate","handleIsRequestChange","handleCustomUsageLimitChange","handleExpireDateChange","handleSaveClick","n","setChatEnabledReactions","localEnabledReactions","setLocalEnabledReactions","handleSaveReactions","handleReactionChange","newEnabledReactions","inviteInfo","importers","requesters","loadChatInviteImporters","loadChatInviteRequesters","adminId","isExpired","handleCopyClicked","importer","renderImporters","requester","renderRequesters","hideChatJoinRequest","fixedDate","dateString","isToday","formatHumanDate","handleAcceptRequest","isApproved","handleRejectRequest","hideAllChatJoinRequests","isAcceptAllDialogOpen","openAcceptAllDialog","closeAcceptAllDialog","isRejectAllDialogOpen","openRejectAllDialog","closeRejectAllDialog","handleAcceptAllRequests","handleRejectAllRequests","STICKER_SIZE_JOIN_REQUESTS","managementType","selectCurrentManagementType","VISA","MASTERCARD1","MASTERCARD2","CardType","cards","Default","Visa","Mastercard","detectCardType","cardNumber","formatsCache","defaultPhoneNumberFormat","str","flag","phoneFormat","format","formatValue","phoneNumberFormat","phoneNumberGroups","RegExp","repeat","getPhoneNumberFormat","streetLine1","streetLine2","city","countryIso2","postCode","shipping","cardholder","expiry","cvv","billingCountry","billingZip","saveInfo","saveCredentials","formErrors","reducer","getBillingCountry","countryCode","useFocusAfterAnimation","animationDuration","hasArrow","labelText","htmlFor","needEmail","needPhone","needName","needAddress","phoneRef","selectCountryRef","handleAddress1Change","handleAddress2Change","handleCityChange","handleStateChange","handleCountryChange","handlePostCodeChange","handleFullNameChange","handleEmailChange","handleSaveInfoChange","shippingOptions","currency","handleShippingSelect","amount","formatCurrency","renderPaymentItem","main","renderCheckoutItem","invoiceContent","prices","shippingPrices","checkoutInfo","totalPrice","photoUrl","paymentMethod","paymentProvider","shippingAddress","shippingMethod","expiryInputRef","charAt","parts","formatCardExpiry","cardNumberRef","cardType","setCardType","newCardType","formatCardNumber","cardIcon","mastercardIconPath","visaIconPath","getCardIcon","canSaveCredentials","needCardholderName","needCountry","needZip","handleCardNumberChange","handleCardholderChange","toUpperCase","handleExpiryChange","handleCvvChange","handleBillingPostCodeChange","handleChangeSaveCredentials","allow","sandbox","SUPPORTED_PROVIDERS","savedInfo","invoice","nativeProvider","nativeParams","passwordMissing","confirmPaymentUrl","payment","isProviderError","nameRequested","phoneRequested","emailRequested","shippingAddressRequested","flexible","phoneToProvider","emailToProvider","validateRequestedInfo","sendPaymentForm","setPaymentStep","sendCredentialsInfo","clearPaymentError","paymentState","paymentDispatch","canRenderFooter","PaymentStep","handleErrorModalClose","shippingOption","getShippingPrices","totalPrices","cur","getTotalPrice","detectCardTypeText","findShippingOption","getCheckoutInfo","validateRequest","requestInfo","getRequestInfo","sendCredentials","credentials","expiryMonth","expiryYear","zip","getCredentials","sendForm","shippingOptionId","setStep","nextStep","buttonText","currentStep","renderModalContent","renderError","optionId","receipt","info","totalAmount","credentialsTitle","fullAddress","onInputChange","setPassword","canSubmit","setCanSubmit","select","autoComplete","MIN_PASSWORD_LENGTH","SEGMENT_COVER_EYES","SEGMENT_UNCOVER_EYE","SEGMENT_COVER_EYE","STICKER_SIZE","STICKER_SIZE_AUTH_MOBILE","STICKER_SIZE_AUTH","closeMonkeyData","setCloseMonkeyData","peekMonkeyData","setPeekMonkeyData","isFirstMonkeyLoaded","setIsFirstMonkeyLoaded","isPeekShown","setIsPeekShown","handleFirstMonkeyLoad","STICKER_SIZE_TWO_FA","playSegment","cropperResultOptions","circle","Croppie","croppiePromise","cropper","isCroppieReady","setIsCroppieReady","imgFile","cropContainer","enableZoom","boundary","viewport","blobToDataUri","bind","err","DEBUG","console","initCropper","ensureCroppie","handleCropClick","croppedImg","blobToFile","selectedFile","setSelectedFile","croppedBlobUrl","setCroppedBlobUrl","handleAvatarCrop","URL","revokeObjectURL","createObjectURL","handleModalClose","labelClassName","accept"],"sourceRoot":""} \ No newline at end of file diff --git a/dist/463.61167f99e64c02fb46d6.js b/dist/463.61167f99e64c02fb46d6.js new file mode 100644 index 000000000..961395fcc --- /dev/null +++ b/dist/463.61167f99e64c02fb46d6.js @@ -0,0 +1,3 @@ +/*! For license information please see 463.61167f99e64c02fb46d6.js.LICENSE.txt */ +(self.webpackChunktelegram_t=self.webpackChunktelegram_t||[]).push([[463],{7811:(e,t)=>{"use strict";var a=/; *([!#$%&'*+.^_`|~0-9A-Za-z-]+) *= *("(?:[\u000b\u0020\u0021\u0023-\u005b\u005d-\u007e\u0080-\u00ff]|\\[\u000b\u0020-\u00ff])*"|[!#$%&'*+.^_`|~0-9A-Za-z-]+) */g,r=/^[\u000b\u0020-\u007e\u0080-\u00ff]+$/,i=/^[!#$%&'*+.^_`|~0-9A-Za-z-]+$/,n=/\\([\u000b\u0020-\u00ff])/g,s=/([\\"])/g,o=/^[!#$%&'*+.^_`|~0-9A-Za-z-]+\/[!#$%&'*+.^_`|~0-9A-Za-z-]+$/;function c(e){var t=String(e);if(i.test(t))return t;if(t.length>0&&!r.test(t))throw new TypeError("invalid parameter value");return'"'+t.replace(s,"\\$1")+'"'}function l(e){this.parameters=Object.create(null),this.type=e}t.format=function(e){if(!e||"object"!=typeof e)throw new TypeError("argument obj is required");var t=e.parameters,a=e.type;if(!a||!o.test(a))throw new TypeError("invalid type");var r=a;if(t&&"object"==typeof t)for(var n,s=Object.keys(t).sort(),l=0;l{var r=a(4155);t.formatArgs=function(t){if(t[0]=(this.useColors?"%c":"")+this.namespace+(this.useColors?" %c":" ")+t[0]+(this.useColors?"%c ":" ")+"+"+e.exports.humanize(this.diff),!this.useColors)return;const a="color: "+this.color;t.splice(1,0,a,"color: inherit");let r=0,i=0;t[0].replace(/%[a-zA-Z%]/g,(e=>{"%%"!==e&&(r++,"%c"===e&&(i=r))})),t.splice(i,0,a)},t.save=function(e){try{e?t.storage.setItem("debug",e):t.storage.removeItem("debug")}catch(e){}},t.load=function(){let e;try{e=t.storage.getItem("debug")}catch(e){}return!e&&void 0!==r&&"env"in r&&(e=r.env.DEBUG),e},t.useColors=function(){return!("undefined"==typeof window||!window.process||"renderer"!==window.process.type&&!window.process.__nwjs)||("undefined"==typeof navigator||!navigator.userAgent||!navigator.userAgent.toLowerCase().match(/(edge|trident)\/(\d+)/))&&("undefined"!=typeof document&&document.documentElement&&document.documentElement.style&&document.documentElement.style.WebkitAppearance||"undefined"!=typeof window&&window.console&&(window.console.firebug||window.console.exception&&window.console.table)||"undefined"!=typeof navigator&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/firefox\/(\d+)/)&&parseInt(RegExp.$1,10)>=31||"undefined"!=typeof navigator&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/applewebkit\/(\d+)/))},t.storage=function(){try{return localStorage}catch(e){}}(),t.destroy=(()=>{let e=!1;return()=>{e||(e=!0,console.warn("Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`."))}})(),t.colors=["#0000CC","#0000FF","#0033CC","#0033FF","#0066CC","#0066FF","#0099CC","#0099FF","#00CC00","#00CC33","#00CC66","#00CC99","#00CCCC","#00CCFF","#3300CC","#3300FF","#3333CC","#3333FF","#3366CC","#3366FF","#3399CC","#3399FF","#33CC00","#33CC33","#33CC66","#33CC99","#33CCCC","#33CCFF","#6600CC","#6600FF","#6633CC","#6633FF","#66CC00","#66CC33","#9900CC","#9900FF","#9933CC","#9933FF","#99CC00","#99CC33","#CC0000","#CC0033","#CC0066","#CC0099","#CC00CC","#CC00FF","#CC3300","#CC3333","#CC3366","#CC3399","#CC33CC","#CC33FF","#CC6600","#CC6633","#CC9900","#CC9933","#CCCC00","#CCCC33","#FF0000","#FF0033","#FF0066","#FF0099","#FF00CC","#FF00FF","#FF3300","#FF3333","#FF3366","#FF3399","#FF33CC","#FF33FF","#FF6600","#FF6633","#FF9900","#FF9933","#FFCC00","#FFCC33"],t.log=console.debug||console.log||(()=>{}),e.exports=a(2447)(t);const{formatters:i}=e.exports;i.j=function(e){try{return JSON.stringify(e)}catch(e){return"[UnexpectedJSONParseError]: "+e.message}}},2447:(e,t,a)=>{e.exports=function(e){function t(e){let a,i,n,s=null;function o(...e){if(!o.enabled)return;const r=o,i=Number(new Date),n=i-(a||i);r.diff=n,r.prev=a,r.curr=i,a=i,e[0]=t.coerce(e[0]),"string"!=typeof e[0]&&e.unshift("%O");let s=0;e[0]=e[0].replace(/%([a-zA-Z%])/g,((a,i)=>{if("%%"===a)return"%";s++;const n=t.formatters[i];if("function"==typeof n){const t=e[s];a=n.call(r,t),e.splice(s,1),s--}return a})),t.formatArgs.call(r,e),(r.log||t.log).apply(r,e)}return o.namespace=e,o.useColors=t.useColors(),o.color=t.selectColor(e),o.extend=r,o.destroy=t.destroy,Object.defineProperty(o,"enabled",{enumerable:!0,configurable:!1,get:()=>null!==s?s:(i!==t.namespaces&&(i=t.namespaces,n=t.enabled(e)),n),set:e=>{s=e}}),"function"==typeof t.init&&t.init(o),o}function r(e,a){const r=t(this.namespace+(void 0===a?":":a)+e);return r.log=this.log,r}function i(e){return e.toString().substring(2,e.toString().length-2).replace(/\.\*\?$/,"*")}return t.debug=t,t.default=t,t.coerce=function(e){return e instanceof Error?e.stack||e.message:e},t.disable=function(){const e=[...t.names.map(i),...t.skips.map(i).map((e=>"-"+e))].join(",");return t.enable(""),e},t.enable=function(e){let a;t.save(e),t.namespaces=e,t.names=[],t.skips=[];const r=("string"==typeof e?e:"").split(/[\s,]+/),i=r.length;for(a=0;a{t[a]=e[a]})),t.names=[],t.skips=[],t.formatters={},t.selectColor=function(e){let a=0;for(let t=0;t{"use strict";var t,a="object"==typeof Reflect?Reflect:null,r=a&&"function"==typeof a.apply?a.apply:function(e,t,a){return Function.prototype.apply.call(e,t,a)};t=a&&"function"==typeof a.ownKeys?a.ownKeys:Object.getOwnPropertySymbols?function(e){return Object.getOwnPropertyNames(e).concat(Object.getOwnPropertySymbols(e))}:function(e){return Object.getOwnPropertyNames(e)};var i=Number.isNaN||function(e){return e!=e};function n(){n.init.call(this)}e.exports=n,e.exports.once=function(e,t){return new Promise((function(a,r){function i(a){e.removeListener(t,n),r(a)}function n(){"function"==typeof e.removeListener&&e.removeListener("error",i),a([].slice.call(arguments))}h(e,t,n,{once:!0}),"error"!==t&&function(e,t,a){"function"==typeof e.on&&h(e,"error",t,{once:!0})}(e,i)}))},n.EventEmitter=n,n.prototype._events=void 0,n.prototype._eventsCount=0,n.prototype._maxListeners=void 0;var s=10;function o(e){if("function"!=typeof e)throw new TypeError('The "listener" argument must be of type Function. Received type '+typeof e)}function c(e){return void 0===e._maxListeners?n.defaultMaxListeners:e._maxListeners}function l(e,t,a,r){var i,n,s,l;if(o(a),void 0===(n=e._events)?(n=e._events=Object.create(null),e._eventsCount=0):(void 0!==n.newListener&&(e.emit("newListener",t,a.listener?a.listener:a),n=e._events),s=n[t]),void 0===s)s=n[t]=a,++e._eventsCount;else if("function"==typeof s?s=n[t]=r?[a,s]:[s,a]:r?s.unshift(a):s.push(a),(i=c(e))>0&&s.length>i&&!s.warned){s.warned=!0;var u=new Error("Possible EventEmitter memory leak detected. "+s.length+" "+String(t)+" listeners added. Use emitter.setMaxListeners() to increase limit");u.name="MaxListenersExceededWarning",u.emitter=e,u.type=t,u.count=s.length,l=u,console&&console.warn&&console.warn(l)}return e}function u(){if(!this.fired)return this.target.removeListener(this.type,this.wrapFn),this.fired=!0,0===arguments.length?this.listener.call(this.target):this.listener.apply(this.target,arguments)}function d(e,t,a){var r={fired:!1,wrapFn:void 0,target:e,type:t,listener:a},i=u.bind(r);return i.listener=a,r.wrapFn=i,i}function m(e,t,a){var r=e._events;if(void 0===r)return[];var i=r[t];return void 0===i?[]:"function"==typeof i?a?[i.listener||i]:[i]:a?function(e){for(var t=new Array(e.length),a=0;a0&&(s=t[0]),s instanceof Error)throw s;var o=new Error("Unhandled error."+(s?" ("+s.message+")":""));throw o.context=s,o}var c=n[e];if(void 0===c)return!1;if("function"==typeof c)r(c,this,t);else{var l=c.length,u=f(c,l);for(a=0;a=0;n--)if(a[n]===t||a[n].listener===t){s=a[n].listener,i=n;break}if(i<0)return this;0===i?a.shift():function(e,t){for(;t+1=0;r--)this.removeListener(e,t[r]);return this},n.prototype.listeners=function(e){return m(this,e,!0)},n.prototype.rawListeners=function(e){return m(this,e,!1)},n.listenerCount=function(e,t){return"function"==typeof e.listenerCount?e.listenerCount(t):p.call(e,t)},n.prototype.listenerCount=p,n.prototype.eventNames=function(){return this._eventsCount>0?t(this._events):[]}},1:(module,__unused_webpack_exports,__webpack_require__)=>{"use strict";var Buffer=__webpack_require__(8764).Buffer;const Token=__webpack_require__(3416),strtok3=__webpack_require__(5849),{stringToBytes,tarHeaderChecksumMatches,uint32SyncSafeToken}=__webpack_require__(6188),supported=__webpack_require__(9898),minimumBytes=4100;async function fromStream(e){const t=await strtok3.fromStream(e);try{return await fromTokenizer(t)}finally{await t.close()}}async function fromBuffer(e){if(!(e instanceof Uint8Array||e instanceof ArrayBuffer||Buffer.isBuffer(e)))throw new TypeError(`Expected the \`input\` argument to be of type \`Uint8Array\` or \`Buffer\` or \`ArrayBuffer\`, got \`${typeof e}\``);const t=e instanceof Buffer?e:Buffer.from(e);if(t&&t.length>1)return fromTokenizer(strtok3.fromBuffer(t))}function _check(e,t,a){a={offset:0,...a};for(const[r,i]of t.entries())if(a.mask){if(i!==(a.mask[r]&e[r+a.offset]))return!1}else if(i!==e[r+a.offset])return!1;return!0}async function fromTokenizer(e){try{return _fromTokenizer(e)}catch(e){if(!(e instanceof strtok3.EndOfStreamError))throw e}}async function _fromTokenizer(e){let t=Buffer.alloc(minimumBytes);const a=(e,a)=>_check(t,e,a),r=(e,t)=>a(stringToBytes(e),t);if(e.fileInfo.size||(e.fileInfo.size=Number.MAX_SAFE_INTEGER),await e.peekBuffer(t,{length:12,mayBeLess:!0}),a([66,77]))return{ext:"bmp",mime:"image/bmp"};if(a([11,119]))return{ext:"ac3",mime:"audio/vnd.dolby.dd-raw"};if(a([120,1]))return{ext:"dmg",mime:"application/x-apple-diskimage"};if(a([77,90]))return{ext:"exe",mime:"application/x-msdownload"};if(a([37,33]))return await e.peekBuffer(t,{length:24,mayBeLess:!0}),r("PS-Adobe-",{offset:2})&&r(" EPSF-",{offset:14})?{ext:"eps",mime:"application/eps"}:{ext:"ps",mime:"application/postscript"};if(a([31,160])||a([31,157]))return{ext:"Z",mime:"application/x-compress"};if(a([255,216,255]))return{ext:"jpg",mime:"image/jpeg"};if(a([73,73,188]))return{ext:"jxr",mime:"image/vnd.ms-photo"};if(a([31,139,8]))return{ext:"gz",mime:"application/gzip"};if(a([66,90,104]))return{ext:"bz2",mime:"application/x-bzip2"};if(r("ID3")){await e.ignore(6);const t=await e.readToken(uint32SyncSafeToken);return e.position+t>e.fileInfo.size?{ext:"mp3",mime:"audio/mpeg"}:(await e.ignore(t),fromTokenizer(e))}if(r("MP+"))return{ext:"mpc",mime:"audio/x-musepack"};if((67===t[0]||70===t[0])&&a([87,83],{offset:1}))return{ext:"swf",mime:"application/x-shockwave-flash"};if(a([71,73,70]))return{ext:"gif",mime:"image/gif"};if(r("FLIF"))return{ext:"flif",mime:"image/flif"};if(r("8BPS"))return{ext:"psd",mime:"image/vnd.adobe.photoshop"};if(r("WEBP",{offset:8}))return{ext:"webp",mime:"image/webp"};if(r("MPCK"))return{ext:"mpc",mime:"audio/x-musepack"};if(r("FORM"))return{ext:"aif",mime:"audio/aiff"};if(r("icns",{offset:0}))return{ext:"icns",mime:"image/icns"};if(a([80,75,3,4])){try{for(;e.position+30=0?a:t.length)}else await e.ignore(a.compressedSize)}}catch(e){if(!(e instanceof strtok3.EndOfStreamError))throw e}return{ext:"zip",mime:"application/zip"}}if(r("OggS")){await e.ignore(28);const t=Buffer.alloc(8);return await e.readBuffer(t),_check(t,[79,112,117,115,72,101,97,100])?{ext:"opus",mime:"audio/opus"}:_check(t,[128,116,104,101,111,114,97])?{ext:"ogv",mime:"video/ogg"}:_check(t,[1,118,105,100,101,111,0])?{ext:"ogm",mime:"video/ogg"}:_check(t,[127,70,76,65,67])?{ext:"oga",mime:"audio/ogg"}:_check(t,[83,112,101,101,120,32,32])?{ext:"spx",mime:"audio/ogg"}:_check(t,[1,118,111,114,98,105,115])?{ext:"ogg",mime:"audio/ogg"}:{ext:"ogx",mime:"application/ogg"}}if(a([80,75])&&(3===t[2]||5===t[2]||7===t[2])&&(4===t[3]||6===t[3]||8===t[3]))return{ext:"zip",mime:"application/zip"};if(r("ftyp",{offset:4})&&0!=(96&t[8])){const e=t.toString("binary",8,12).replace("\0"," ").trim();switch(e){case"avif":return{ext:"avif",mime:"image/avif"};case"mif1":return{ext:"heic",mime:"image/heif"};case"msf1":return{ext:"heic",mime:"image/heif-sequence"};case"heic":case"heix":return{ext:"heic",mime:"image/heic"};case"hevc":case"hevx":return{ext:"heic",mime:"image/heic-sequence"};case"qt":return{ext:"mov",mime:"video/quicktime"};case"M4V":case"M4VH":case"M4VP":return{ext:"m4v",mime:"video/x-m4v"};case"M4P":return{ext:"m4p",mime:"video/mp4"};case"M4B":return{ext:"m4b",mime:"audio/mp4"};case"M4A":return{ext:"m4a",mime:"audio/x-m4a"};case"F4V":return{ext:"f4v",mime:"video/mp4"};case"F4P":return{ext:"f4p",mime:"video/mp4"};case"F4A":return{ext:"f4a",mime:"audio/mp4"};case"F4B":return{ext:"f4b",mime:"audio/mp4"};case"crx":return{ext:"cr3",mime:"image/x-canon-cr3"};default:return e.startsWith("3g")?e.startsWith("3g2")?{ext:"3g2",mime:"video/3gpp2"}:{ext:"3gp",mime:"video/3gpp"}:{ext:"mp4",mime:"video/mp4"}}}if(r("MThd"))return{ext:"mid",mime:"audio/midi"};if(r("wOFF")&&(a([0,1,0,0],{offset:4})||r("OTTO",{offset:4})))return{ext:"woff",mime:"font/woff"};if(r("wOF2")&&(a([0,1,0,0],{offset:4})||r("OTTO",{offset:4})))return{ext:"woff2",mime:"font/woff2"};if(a([212,195,178,161])||a([161,178,195,212]))return{ext:"pcap",mime:"application/vnd.tcpdump.pcap"};if(r("DSD "))return{ext:"dsf",mime:"audio/x-dsf"};if(r("LZIP"))return{ext:"lz",mime:"application/x-lzip"};if(r("fLaC"))return{ext:"flac",mime:"audio/x-flac"};if(a([66,80,71,251]))return{ext:"bpg",mime:"image/bpg"};if(r("wvpk"))return{ext:"wv",mime:"audio/wavpack"};if(r("%PDF")){await e.ignore(1350);const t=10485760,a=Buffer.alloc(Math.min(t,e.fileInfo.size));return await e.readBuffer(a,{mayBeLess:!0}),a.includes(Buffer.from("AIPrivateData"))?{ext:"ai",mime:"application/postscript"}:{ext:"pdf",mime:"application/pdf"}}if(a([0,97,115,109]))return{ext:"wasm",mime:"application/wasm"};if(a([73,73,42,0]))return r("CR",{offset:8})?{ext:"cr2",mime:"image/x-canon-cr2"}:a([28,0,254,0],{offset:8})||a([31,0,11,0],{offset:8})?{ext:"nef",mime:"image/x-nikon-nef"}:a([8,0,0,0],{offset:4})&&(a([45,0,254,0],{offset:8})||a([39,0,254,0],{offset:8}))?{ext:"dng",mime:"image/x-adobe-dng"}:(t=Buffer.alloc(24),await e.peekBuffer(t),(a([16,251,134,1],{offset:4})||a([8,0,0,0],{offset:4}))&&a([0,254,0,4,0,1,0,0,0,1,0,0,0,3,1],{offset:9})?{ext:"arw",mime:"image/x-sony-arw"}:{ext:"tif",mime:"image/tiff"});if(a([77,77,0,42]))return{ext:"tif",mime:"image/tiff"};if(r("MAC "))return{ext:"ape",mime:"audio/ape"};if(a([26,69,223,163])){async function t(){const t=await e.peekNumber(Token.UINT8);let a=128,r=0;for(;0==(t&a);)++r,a>>=1;const i=Buffer.alloc(r+1);return await e.readBuffer(i),i}async function a(){const e=await t(),a=await t();a[0]^=128>>a.length-1;const r=Math.min(6,a.length);return{id:e.readUIntBE(0,e.length),len:a.readUIntBE(a.length-r,r)}}async function r(t,r){for(;r>0;){const t=await a();if(17026===t.id)return e.readToken(new Token.StringType(t.len,"utf-8"));await e.ignore(t.len),--r}}const i=await a();switch(await r(0,i.len)){case"webm":return{ext:"webm",mime:"video/webm"};case"matroska":return{ext:"mkv",mime:"video/x-matroska"};default:return}}if(a([82,73,70,70])){if(a([65,86,73],{offset:8}))return{ext:"avi",mime:"video/vnd.avi"};if(a([87,65,86,69],{offset:8}))return{ext:"wav",mime:"audio/vnd.wave"};if(a([81,76,67,77],{offset:8}))return{ext:"qcp",mime:"audio/qcelp"}}if(r("SQLi"))return{ext:"sqlite",mime:"application/x-sqlite3"};if(a([78,69,83,26]))return{ext:"nes",mime:"application/x-nintendo-nes-rom"};if(r("Cr24"))return{ext:"crx",mime:"application/x-google-chrome-extension"};if(r("MSCF")||r("ISc("))return{ext:"cab",mime:"application/vnd.ms-cab-compressed"};if(a([237,171,238,219]))return{ext:"rpm",mime:"application/x-rpm"};if(a([197,208,211,198]))return{ext:"eps",mime:"application/eps"};if(a([40,181,47,253]))return{ext:"zst",mime:"application/zstd"};if(a([79,84,84,79,0]))return{ext:"otf",mime:"font/otf"};if(r("#!AMR"))return{ext:"amr",mime:"audio/amr"};if(r("{\\rtf"))return{ext:"rtf",mime:"application/rtf"};if(a([70,76,86,1]))return{ext:"flv",mime:"video/x-flv"};if(r("IMPM"))return{ext:"it",mime:"audio/x-it"};if(r("-lh0-",{offset:2})||r("-lh1-",{offset:2})||r("-lh2-",{offset:2})||r("-lh3-",{offset:2})||r("-lh4-",{offset:2})||r("-lh5-",{offset:2})||r("-lh6-",{offset:2})||r("-lh7-",{offset:2})||r("-lzs-",{offset:2})||r("-lz4-",{offset:2})||r("-lz5-",{offset:2})||r("-lhd-",{offset:2}))return{ext:"lzh",mime:"application/x-lzh-compressed"};if(a([0,0,1,186])){if(a([33],{offset:4,mask:[241]}))return{ext:"mpg",mime:"video/MP1S"};if(a([68],{offset:4,mask:[196]}))return{ext:"mpg",mime:"video/MP2P"}}if(r("ITSF"))return{ext:"chm",mime:"application/vnd.ms-htmlhelp"};if(a([253,55,122,88,90,0]))return{ext:"xz",mime:"application/x-xz"};if(r(""))return await e.ignore(8),"debian-binary"===await e.readToken(new Token.StringType(13,"ascii"))?{ext:"deb",mime:"application/x-deb"}:{ext:"ar",mime:"application/x-unix-archive"};if(a([137,80,78,71,13,10,26,10])){async function t(){return{length:await e.readToken(Token.INT32_BE),type:await e.readToken(new Token.StringType(4,"binary"))}}await e.ignore(8);do{const a=await t();if(a.length<0)return;switch(a.type){case"IDAT":return{ext:"png",mime:"image/png"};case"acTL":return{ext:"apng",mime:"image/apng"};default:await e.ignore(a.length+4)}}while(e.position+8=16){const e=t.readUInt32LE(12);if(e>12&&t.length>=e+16)try{const a=t.slice(16,e+16).toString();if(JSON.parse(a).files)return{ext:"asar",mime:"application/x-asar"}}catch(e){}}if(a([6,14,43,52,2,5,1,1,13,1,2,1,1,2]))return{ext:"mxf",mime:"application/mxf"};if(r("SCRM",{offset:44}))return{ext:"s3m",mime:"audio/x-s3m"};if(a([71],{offset:4})&&(a([71],{offset:192})||a([71],{offset:196})))return{ext:"mts",mime:"video/mp2t"};if(a([66,79,79,75,77,79,66,73],{offset:60}))return{ext:"mobi",mime:"application/x-mobipocket-ebook"};if(a([68,73,67,77],{offset:128}))return{ext:"dcm",mime:"application/dicom"};if(a([76,0,0,0,1,20,2,0,0,0,0,0,192,0,0,0,0,0,0,70]))return{ext:"lnk",mime:"application/x.ms.shortcut"};if(a([98,111,111,107,0,0,0,0,109,97,114,107,0,0,0,0]))return{ext:"alias",mime:"application/x.apple.alias"};if(a([76,80],{offset:34})&&(a([0,0,1],{offset:8})||a([1,0,2],{offset:8})||a([2,0,2],{offset:8})))return{ext:"eot",mime:"application/vnd.ms-fontobject"};if(a([6,6,237,245,216,29,70,229,189,49,239,231,254,116,183,29]))return{ext:"indd",mime:"application/x-indesign"};if(await e.peekBuffer(t,{length:Math.min(512,e.fileInfo.size),mayBeLess:!0}),tarHeaderChecksumMatches(t))return{ext:"tar",mime:"application/x-tar"};if(a([255,254,255,14,83,0,107,0,101,0,116,0,99,0,104,0,85,0,112,0,32,0,77,0,111,0,100,0,101,0,108,0]))return{ext:"skp",mime:"application/vnd.sketchup.skp"};if(r("-----BEGIN PGP MESSAGE-----"))return{ext:"pgp",mime:"application/pgp-encrypted"};if(t.length>=2&&a([255,224],{offset:0,mask:[255,224]})){if(a([16],{offset:1,mask:[22]}))return a([8],{offset:1,mask:[8]}),{ext:"aac",mime:"audio/aac"};if(a([2],{offset:1,mask:[6]}))return{ext:"mp3",mime:"audio/mpeg"};if(a([4],{offset:1,mask:[6]}))return{ext:"mp2",mime:"audio/mpeg"};if(a([6],{offset:1,mask:[6]}))return{ext:"mp1",mime:"audio/mpeg"}}}const stream=readableStream=>new Promise(((resolve,reject)=>{const stream=eval("require")("stream");readableStream.on("error",reject),readableStream.once("readable",(async()=>{const e=new stream.PassThrough;let t;t=stream.pipeline?stream.pipeline(readableStream,e,(()=>{})):readableStream.pipe(e);const a=readableStream.read(minimumBytes)||readableStream.read()||Buffer.alloc(0);try{const t=await fromBuffer(a);e.fileType=t}catch(e){reject(e)}resolve(t)}))})),fileType={fromStream,fromTokenizer,fromBuffer,stream};Object.defineProperty(fileType,"extensions",{get:()=>new Set(supported.extensions)}),Object.defineProperty(fileType,"mimeTypes",{get:()=>new Set(supported.mimeTypes)}),module.exports=fileType},9898:e=>{"use strict";e.exports={extensions:["jpg","png","apng","gif","webp","flif","xcf","cr2","cr3","orf","arw","dng","nef","rw2","raf","tif","bmp","icns","jxr","psd","indd","zip","tar","rar","gz","bz2","7z","dmg","mp4","mid","mkv","webm","mov","avi","mpg","mp2","mp3","m4a","oga","ogg","ogv","opus","flac","wav","spx","amr","pdf","epub","exe","swf","rtf","wasm","woff","woff2","eot","ttf","otf","ico","flv","ps","xz","sqlite","nes","crx","xpi","cab","deb","ar","rpm","Z","lz","cfb","mxf","mts","blend","bpg","docx","pptx","xlsx","3gp","3g2","jp2","jpm","jpx","mj2","aif","qcp","odt","ods","odp","xml","mobi","heic","cur","ktx","ape","wv","dcm","ics","glb","pcap","dsf","lnk","alias","voc","ac3","m4v","m4p","m4b","f4v","f4p","f4b","f4a","mie","asf","ogm","ogx","mpc","arrow","shp","aac","mp1","it","s3m","xm","ai","skp","avif","eps","lzh","pgp","asar","stl","chm","3mf","zst","jxl","vcf"],mimeTypes:["image/jpeg","image/png","image/gif","image/webp","image/flif","image/x-xcf","image/x-canon-cr2","image/x-canon-cr3","image/tiff","image/bmp","image/vnd.ms-photo","image/vnd.adobe.photoshop","application/x-indesign","application/epub+zip","application/x-xpinstall","application/vnd.oasis.opendocument.text","application/vnd.oasis.opendocument.spreadsheet","application/vnd.oasis.opendocument.presentation","application/vnd.openxmlformats-officedocument.wordprocessingml.document","application/vnd.openxmlformats-officedocument.presentationml.presentation","application/vnd.openxmlformats-officedocument.spreadsheetml.sheet","application/zip","application/x-tar","application/x-rar-compressed","application/gzip","application/x-bzip2","application/x-7z-compressed","application/x-apple-diskimage","application/x-apache-arrow","video/mp4","audio/midi","video/x-matroska","video/webm","video/quicktime","video/vnd.avi","audio/vnd.wave","audio/qcelp","audio/x-ms-asf","video/x-ms-asf","application/vnd.ms-asf","video/mpeg","video/3gpp","audio/mpeg","audio/mp4","audio/opus","video/ogg","audio/ogg","application/ogg","audio/x-flac","audio/ape","audio/wavpack","audio/amr","application/pdf","application/x-msdownload","application/x-shockwave-flash","application/rtf","application/wasm","font/woff","font/woff2","application/vnd.ms-fontobject","font/ttf","font/otf","image/x-icon","video/x-flv","application/postscript","application/eps","application/x-xz","application/x-sqlite3","application/x-nintendo-nes-rom","application/x-google-chrome-extension","application/vnd.ms-cab-compressed","application/x-deb","application/x-unix-archive","application/x-rpm","application/x-compress","application/x-lzip","application/x-cfb","application/x-mie","application/mxf","video/mp2t","application/x-blender","image/bpg","image/jp2","image/jpx","image/jpm","image/mj2","audio/aiff","application/xml","application/x-mobipocket-ebook","image/heif","image/heif-sequence","image/heic","image/heic-sequence","image/icns","image/ktx","application/dicom","audio/x-musepack","text/calendar","text/vcard","model/gltf-binary","application/vnd.tcpdump.pcap","audio/x-dsf","application/x.ms.shortcut","application/x.apple.alias","audio/x-voc","audio/vnd.dolby.dd-raw","audio/x-m4a","image/apng","image/x-olympus-orf","image/x-sony-arw","image/x-adobe-dng","image/x-nikon-nef","image/x-panasonic-rw2","image/x-fujifilm-raf","video/x-m4v","video/3gpp2","application/x-esri-shape","audio/aac","audio/x-it","audio/x-s3m","audio/x-xm","video/MP1S","video/MP2P","application/vnd.sketchup.skp","image/avif","application/x-lzh-compressed","application/pgp-encrypted","application/x-asar","model/stl","application/vnd.ms-htmlhelp","model/3mf","image/jxl","application/zstd"]}},6188:(e,t)=>{"use strict";t.stringToBytes=e=>[...e].map((e=>e.charCodeAt(0))),t.tarHeaderChecksumMatches=(e,t=0)=>{const a=parseInt(e.toString("utf8",148,154).replace(/\0.*$/,"").trim(),8);if(isNaN(a))return!1;let r=256;for(let a=t;a127&e[t+3]|e[t+2]<<7|e[t+1]<<14|e[t]<<21,len:4}},5717:e=>{"function"==typeof Object.create?e.exports=function(e,t){t&&(e.super_=t,e.prototype=Object.create(t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}))}:e.exports=function(e,t){if(t){e.super_=t;var a=function(){};a.prototype=t.prototype,e.prototype=new a,e.prototype.constructor=e}}},7824:e=>{var t=1e3,a=60*t,r=60*a,i=24*r;function n(e,t,a,r){var i=t>=1.5*a;return Math.round(e/a)+" "+r+(i?"s":"")}e.exports=function(e,s){s=s||{};var o,c,l=typeof e;if("string"===l&&e.length>0)return function(e){if(!((e=String(e)).length>100)){var n=/^(-?(?:\d+)?\.?\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)?$/i.exec(e);if(n){var s=parseFloat(n[1]);switch((n[2]||"ms").toLowerCase()){case"years":case"year":case"yrs":case"yr":case"y":return 315576e5*s;case"weeks":case"week":case"w":return 6048e5*s;case"days":case"day":case"d":return s*i;case"hours":case"hour":case"hrs":case"hr":case"h":return s*r;case"minutes":case"minute":case"mins":case"min":case"m":return s*a;case"seconds":case"second":case"secs":case"sec":case"s":return s*t;case"milliseconds":case"millisecond":case"msecs":case"msec":case"ms":return s;default:return}}}}(e);if("number"===l&&isFinite(e))return s.long?(o=e,(c=Math.abs(o))>=i?n(o,c,i,"day"):c>=r?n(o,c,r,"hour"):c>=a?n(o,c,a,"minute"):c>=t?n(o,c,t,"second"):o+" ms"):function(e){var n=Math.abs(e);return n>=i?Math.round(e/i)+"d":n>=r?Math.round(e/r)+"h":n>=a?Math.round(e/a)+"m":n>=t?Math.round(e/t)+"s":e+"ms"}(e);throw new Error("val is not a non-empty string or a valid number. val="+JSON.stringify(e))}},2463:(e,t,a)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.fetchFromUrl=t.parseBlob=t.parseReadableStream=t.parseNodeStream=t.selectCover=t.ratingToStars=t.orderTags=t.parseFromTokenizer=t.parseBuffer=void 0;const r=a(1227),i=a(523),n=a(8090),s=r("music-metadata-browser:main");var o=a(523);async function c(e,a,r){const i=new n.ReadableWebToNodeStream(e),s=await(0,t.parseNodeStream)(i,"string"==typeof a?{mimeType:a}:a,r);return await i.close(),s}async function l(e,t){const a={mimeType:e.type,size:e.size};return e instanceof File&&(a.path=e.name),c(e.stream?e.stream():function(e){const t=new FileReader;return new ReadableStream({start(a){t.onloadend=e=>{let t=e.target.result;t instanceof ArrayBuffer&&(t=new Uint8Array(t)),a.enqueue(t),a.close()},t.onerror=e=>{a.close()},t.onabort=e=>{a.close()},t.readAsArrayBuffer(e)}})}(e),{mimeType:e.type,size:e.size},t)}Object.defineProperty(t,"parseBuffer",{enumerable:!0,get:function(){return o.parseBuffer}}),Object.defineProperty(t,"parseFromTokenizer",{enumerable:!0,get:function(){return o.parseFromTokenizer}}),Object.defineProperty(t,"orderTags",{enumerable:!0,get:function(){return o.orderTags}}),Object.defineProperty(t,"ratingToStars",{enumerable:!0,get:function(){return o.ratingToStars}}),Object.defineProperty(t,"selectCover",{enumerable:!0,get:function(){return o.selectCover}}),t.parseNodeStream=i.parseStream,t.parseReadableStream=c,t.parseBlob=l,t.fetchFromUrl=async function(e,t){const a=await fetch(e),r={size:parseInt(a.headers.get("Content-Length"),10),mimeType:a.headers.get("Content-Type")};if(a.ok){if(a.body){const e=await c(a.body,r,t);return s("Closing HTTP-readable-stream..."),a.body.locked||await a.body.cancel(),s("HTTP-readable-stream closed."),e}return l(await a.blob(),t)}throw new Error(`HTTP error status=${a.status}: ${a.statusText}`)}},3275:(e,t,a)=>{"use strict";var r=a(8764).Buffer;Object.defineProperty(t,"__esModule",{value:!0}),t.ParserFactory=t.parseHttpContentType=void 0;const i=a(1),n=a(7811),s=a(5762),o=a(1227),c=a(7584),l=a(5410),u=a(6742),d=a(1004),m=a(498),p=a(8841),f=a(60),h=a(9606),g=a(2152),T=a(2682),b=a(5870),y=a(1533),k=a(6789),v=a(78),w=(0,o.default)("music-metadata:parser:factory");function I(e){const t=n.parse(e),a=s.parse(t.type);return{type:a.type,subtype:a.subtype,suffix:a.suffix,parameters:t.parameters}}t.parseHttpContentType=I;class S{static async parseOnContentType(e,t){const{mimeType:a,path:r,url:i}=await e.fileInfo,n=S.getParserIdForMimeType(a)||S.getParserIdForExtension(r)||S.getParserIdForExtension(i);return n||w("No parser found for MIME-type / extension: "+a),this.parse(e,n,t)}static async parse(e,t,a){if(!t){w("Guess parser on content...");const a=r.alloc(4100);if(await e.peekBuffer(a,{mayBeLess:!0}),e.fileInfo.path&&(t=this.getParserIdForExtension(e.fileInfo.path)),!t){const e=await i.fromBuffer(a);if(!e)throw new Error("Failed to determine audio format");if(w(`Guessed file type is mime=${e.mime}, extension=${e.ext}`),!(t=S.getParserIdForMimeType(e.mime)))throw new Error("Guessed MIME-type not supported: "+e.mime)}}return async function(e,t,a={}){const r=await S.loadParser(t),i=new c.MetadataCollector(a);return await r.init(i,e,a).parse(),i.toCommonMetadata()}(e,t,a)}static getParserIdForExtension(e){if(e)switch(this.getExtension(e).toLocaleLowerCase()||e){case".mp2":case".mp3":case".m2a":case".aac":return"mpeg";case".ape":return"apev2";case".mp4":case".m4a":case".m4b":case".m4pa":case".m4v":case".m4r":case".3gp":return"mp4";case".wma":case".wmv":case".asf":return"asf";case".flac":return"flac";case".ogg":case".ogv":case".oga":case".ogm":case".ogx":case".opus":case".spx":return"ogg";case".aif":case".aiff":case".aifc":return"aiff";case".wav":case".bwf":return"riff";case".wv":case".wvp":return"wavpack";case".mpc":return"musepack";case".dsf":return"dsf";case".dff":return"dsdiff";case".mka":case".mkv":case".mk3d":case".mks":case".webm":return"matroska"}}static async loadParser(e){switch(e){case"aiff":return new l.AIFFParser;case"adts":case"mpeg":return new f.MpegParser;case"apev2":return new u.APEv2Parser;case"asf":return new d.AsfParser;case"dsf":return new y.DsfParser;case"dsdiff":return new k.DsdiffParser;case"flac":return new m.FlacParser;case"mp4":return new p.MP4Parser;case"musepack":return new h.default;case"ogg":return new g.OggParser;case"riff":return new T.WaveParser;case"wavpack":return new b.WavPackParser;case"matroska":return new v.MatroskaParser;default:throw new Error(`Unknown parser type: ${e}`)}}static getExtension(e){const t=e.lastIndexOf(".");return-1===t?"":e.slice(t)}static getParserIdForMimeType(e){let t;try{t=I(e)}catch(t){return void w(`Invalid HTTP Content-Type header value: ${e}`)}const a=0===t.subtype.indexOf("x-")?t.subtype.substring(2):t.subtype;switch(t.type){case"audio":switch(a){case"mp3":case"mpeg":return"mpeg";case"aac":case"aacp":return"adts";case"flac":return"flac";case"ape":case"monkeys-audio":return"apev2";case"mp4":case"m4a":return"mp4";case"ogg":case"opus":case"speex":return"ogg";case"ms-wma":case"ms-wmv":case"ms-asf":return"asf";case"aiff":case"aif":case"aifc":return"aiff";case"vnd.wave":case"wav":case"wave":return"riff";case"wavpack":return"wavpack";case"musepack":return"musepack";case"matroska":case"webm":return"matroska";case"dsf":return"dsf"}break;case"video":switch(a){case"ms-asf":case"ms-wmv":return"asf";case"m4v":case"mp4":return"mp4";case"ogg":return"ogg";case"matroska":case"webm":return"matroska"}break;case"application":switch(a){case"vnd.ms-asf":return"asf";case"ogg":return"ogg"}}}}t.ParserFactory=S},5410:(e,t,a)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.AIFFParser=void 0;const r=a(3416),i=a(1227),n=a(5849),s=a(8928),o=a(8049),c=a(7805),l=a(1162),u=a(4633),d=(0,i.default)("music-metadata:parser:aiff");class m extends c.BasicParser{async parse(){if("FORM"!==(await this.tokenizer.readToken(u.Header)).chunkID)throw new Error("Invalid Chunk-ID, expected 'FORM'");const e=await this.tokenizer.readToken(o.FourCcToken);switch(e){case"AIFF":this.metadata.setFormat("container",e),this.isCompressed=!1;break;case"AIFC":this.metadata.setFormat("container","AIFF-C"),this.isCompressed=!0;break;default:throw Error("Unsupported AIFF type: "+e)}this.metadata.setFormat("lossless",!this.isCompressed);try{for(;!this.tokenizer.fileInfo.size||this.tokenizer.fileInfo.size-this.tokenizer.position>=u.Header.len;){d("Reading AIFF chunk at offset="+this.tokenizer.position);const e=await this.tokenizer.readToken(u.Header);d(`Chunk id=${e.chunkID}`);const t=2*Math.round(e.chunkSize/2),a=await this.readData(e);await this.tokenizer.ignore(t-a)}}catch(e){if(!(e instanceof n.EndOfStreamError))throw e;d("End-of-stream")}}async readData(e){switch(e.chunkID){case"COMM":const t=await this.tokenizer.readToken(new l.Common(e,this.isCompressed));return this.metadata.setFormat("bitsPerSample",t.sampleSize),this.metadata.setFormat("sampleRate",t.sampleRate),this.metadata.setFormat("numberOfChannels",t.numChannels),this.metadata.setFormat("numberOfSamples",t.numSampleFrames),this.metadata.setFormat("duration",t.numSampleFrames/t.sampleRate),this.metadata.setFormat("codec",t.compressionName),e.chunkSize;case"ID3 ":const a=await this.tokenizer.readToken(new r.Uint8ArrayType(e.chunkSize)),i=n.fromBuffer(a);return await(new s.ID3v2Parser).parse(this.metadata,i,this.options),e.chunkSize;case"SSND":return this.metadata.format.duration&&this.metadata.setFormat("bitrate",8*e.chunkSize/this.metadata.format.duration),0;default:return 0}}}t.AIFFParser=m},1162:(e,t,a)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.Common=void 0;const r=a(3416),i=a(8049);t.Common=class{constructor(e,t){this.isAifc=t;const a=t?22:18;if(e.chunkSize>Math.abs(a):n<22){const a=e.readInt8(t+22);if(23+a+(a+1)%2!==this.len)throw new Error("Illegal pstring length");s.compressionName=new r.StringType(a,"binary").get(e,t+23)}}else s.compressionName="PCM";return s}}},6742:(e,t,a)=>{"use strict";var r=a(8764).Buffer;Object.defineProperty(t,"__esModule",{value:!0}),t.APEv2Parser=void 0;const i=a(1227),n=a(5849),s=a(3416),o=a(3769),c=a(7805),l=a(876),u=(0,i.default)("music-metadata:parser:APEv2"),d="APEv2",m="APETAGEX";class p extends c.BasicParser{constructor(){super(...arguments),this.ape={}}static tryParseApeHeader(e,t,a){const r=new p;return r.init(e,t,a),r.tryParseApeHeader()}static calculateDuration(e){let t=e.totalFrames>1?e.blocksPerFrame*(e.totalFrames-1):0;return t+=e.finalFrameBlocks,t/e.sampleRate}static async findApeFooterOffset(e,t){const a=r.alloc(l.TagFooter.len);await e.randomRead(a,0,l.TagFooter.len,t-l.TagFooter.len);const i=l.TagFooter.get(a,0);if("APETAGEX"===i.ID)return u(`APE footer header at offset=${t}`),{footer:i,offset:t-i.size}}static parseTagFooter(e,t,a){const r=l.TagFooter.get(t,t.length-l.TagFooter.len);if(r.ID!==m)throw new Error("Unexpected APEv2 Footer ID preamble value.");n.fromBuffer(t);const i=new p;return i.init(e,n.fromBuffer(t),a),i.parseTags(r)}async tryParseApeHeader(){if(this.tokenizer.fileInfo.size&&this.tokenizer.fileInfo.size-this.tokenizer.position0?this.parseDescriptorExpansion(t):this.parseHeader());return await this.tokenizer.ignore(a.forwardBytes),this.tryParseApeHeader()}async parseTags(e){const t=r.alloc(256);let a=e.size-l.TagFooter.len;u(`Parse APE tags at offset=${this.tokenizer.position}, size=${a}`);for(let i=0;i{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.APEv2TagMapper=void 0;const r=a(4132),i={Title:"title",Artist:"artist",Artists:"artists","Album Artist":"albumartist",Album:"album",Year:"date",Originalyear:"originalyear",Originaldate:"originaldate",Comment:"comment",Track:"track",Disc:"disk",DISCNUMBER:"disk",Genre:"genre","Cover Art (Front)":"picture","Cover Art (Back)":"picture",Composer:"composer",Lyrics:"lyrics",ALBUMSORT:"albumsort",TITLESORT:"titlesort",WORK:"work",ARTISTSORT:"artistsort",ALBUMARTISTSORT:"albumartistsort",COMPOSERSORT:"composersort",Lyricist:"lyricist",Writer:"writer",Conductor:"conductor",MixArtist:"remixer",Arranger:"arranger",Engineer:"engineer",Producer:"producer",DJMixer:"djmixer",Mixer:"mixer",Label:"label",Grouping:"grouping",Subtitle:"subtitle",DiscSubtitle:"discsubtitle",Compilation:"compilation",BPM:"bpm",Mood:"mood",Media:"media",CatalogNumber:"catalognumber",MUSICBRAINZ_ALBUMSTATUS:"releasestatus",MUSICBRAINZ_ALBUMTYPE:"releasetype",RELEASECOUNTRY:"releasecountry",Script:"script",Language:"language",Copyright:"copyright",LICENSE:"license",EncodedBy:"encodedby",EncoderSettings:"encodersettings",Barcode:"barcode",ISRC:"isrc",ASIN:"asin",musicbrainz_trackid:"musicbrainz_recordingid",musicbrainz_releasetrackid:"musicbrainz_trackid",MUSICBRAINZ_ALBUMID:"musicbrainz_albumid",MUSICBRAINZ_ARTISTID:"musicbrainz_artistid",MUSICBRAINZ_ALBUMARTISTID:"musicbrainz_albumartistid",MUSICBRAINZ_RELEASEGROUPID:"musicbrainz_releasegroupid",MUSICBRAINZ_WORKID:"musicbrainz_workid",MUSICBRAINZ_TRMID:"musicbrainz_trmid",MUSICBRAINZ_DISCID:"musicbrainz_discid",Acoustid_Id:"acoustid_id",ACOUSTID_FINGERPRINT:"acoustid_fingerprint",MUSICIP_PUID:"musicip_puid",Weblink:"website",REPLAYGAIN_TRACK_GAIN:"replaygain_track_gain",REPLAYGAIN_TRACK_PEAK:"replaygain_track_peak",MP3GAIN_MINMAX:"replaygain_track_minmax",MP3GAIN_UNDO:"replaygain_undo"};class n extends r.CaseInsensitiveTagMap{constructor(){super(["APEv2"],i)}}t.APEv2TagMapper=n},876:(e,t,a)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.isBitSet=t.parseTagFlags=t.TagField=t.TagItemHeader=t.TagFooter=t.Header=t.DescriptorParser=t.DataType=void 0;const r=a(3416),i=a(8049);var n;function s(e){return{containsHeader:o(e,31),containsFooter:o(e,30),isHeader:o(e,31),readOnly:o(e,0),dataType:(6&e)>>1}}function o(e,t){return 0!=(e&1<({ID:i.FourCcToken.get(e,t),version:r.UINT32_LE.get(e,t+4)/1e3,descriptorBytes:r.UINT32_LE.get(e,t+8),headerBytes:r.UINT32_LE.get(e,t+12),seekTableBytes:r.UINT32_LE.get(e,t+16),headerDataBytes:r.UINT32_LE.get(e,t+20),apeFrameDataBytes:r.UINT32_LE.get(e,t+24),apeFrameDataBytesHigh:r.UINT32_LE.get(e,t+28),terminatingDataBytes:r.UINT32_LE.get(e,t+32),fileMD5:new r.Uint8ArrayType(16).get(e,t+36)})},t.Header={len:24,get:(e,t)=>({compressionLevel:r.UINT16_LE.get(e,t),formatFlags:r.UINT16_LE.get(e,t+2),blocksPerFrame:r.UINT32_LE.get(e,t+4),finalFrameBlocks:r.UINT32_LE.get(e,t+8),totalFrames:r.UINT32_LE.get(e,t+12),bitsPerSample:r.UINT16_LE.get(e,t+16),channel:r.UINT16_LE.get(e,t+18),sampleRate:r.UINT32_LE.get(e,t+20)})},t.TagFooter={len:32,get:(e,t)=>({ID:new r.StringType(8,"ascii").get(e,t),version:r.UINT32_LE.get(e,t+8),size:r.UINT32_LE.get(e,t+12),fields:r.UINT32_LE.get(e,t+16),flags:s(r.UINT32_LE.get(e,t+20))})},t.TagItemHeader={len:8,get:(e,t)=>({size:r.UINT32_LE.get(e,t),flags:s(r.UINT32_LE.get(e,t+4))})},t.TagField=e=>new r.Uint8ArrayType(e.size-t.TagFooter.len),t.parseTagFlags=s,t.isBitSet=o},5174:(e,t,a)=>{"use strict";var r=a(8764).Buffer;Object.defineProperty(t,"__esModule",{value:!0}),t.WmPictureToken=t.MetadataLibraryObjectState=t.MetadataObjectState=t.ExtendedStreamPropertiesObjectState=t.ExtendedContentDescriptionObjectState=t.ContentDescriptionObjectState=t.readCodecEntries=t.HeaderExtensionObject=t.StreamPropertiesObject=t.FilePropertiesObject=t.IgnoreObjectState=t.State=t.HeaderObjectToken=t.TopLevelHeaderObjectToken=t.DataType=void 0;const i=a(3769),n=a(3416),s=a(8054),o=a(2252),c=a(8281);var l;(l=t.DataType||(t.DataType={}))[l.UnicodeString=0]="UnicodeString",l[l.ByteArray=1]="ByteArray",l[l.Bool=2]="Bool",l[l.DWord=3]="DWord",l[l.QWord=4]="QWord",l[l.Word=5]="Word",t.TopLevelHeaderObjectToken={len:30,get:(e,t)=>({objectId:s.default.fromBin(new n.BufferType(16).get(e,t)),objectSize:Number(n.UINT64_LE.get(e,t+16)),numberOfHeaderObjects:n.UINT32_LE.get(e,t+24)})},t.HeaderObjectToken={len:24,get:(e,t)=>({objectId:s.default.fromBin(new n.BufferType(16).get(e,t)),objectSize:Number(n.UINT64_LE.get(e,t+16))})};class u{constructor(e){this.len=Number(e.objectSize)-t.HeaderObjectToken.len}postProcessTag(e,t,a,r){if("WM/Picture"===t)e.push({id:t,value:I.fromBuffer(r)});else{const i=o.AsfUtil.getParserForAttr(a);if(!i)throw new Error("unexpected value headerType: "+a);e.push({id:t,value:i(r)})}}}t.State=u,t.IgnoreObjectState=class extends u{constructor(e){super(e)}get(e,t){return null}};class d extends u{constructor(e){super(e)}get(e,t){return{fileId:s.default.fromBin(e,t),fileSize:n.UINT64_LE.get(e,t+16),creationDate:n.UINT64_LE.get(e,t+24),dataPacketsCount:n.UINT64_LE.get(e,t+32),playDuration:n.UINT64_LE.get(e,t+40),sendDuration:n.UINT64_LE.get(e,t+48),preroll:n.UINT64_LE.get(e,t+56),flags:{broadcast:i.getBit(e,t+64,24),seekable:i.getBit(e,t+64,25)},minimumDataPacketSize:n.UINT32_LE.get(e,t+68),maximumDataPacketSize:n.UINT32_LE.get(e,t+72),maximumBitrate:n.UINT32_LE.get(e,t+76)}}}t.FilePropertiesObject=d,d.guid=s.default.FilePropertiesObject;class m extends u{constructor(e){super(e)}get(e,t){return{streamType:s.default.decodeMediaType(s.default.fromBin(e,t)),errorCorrectionType:s.default.fromBin(e,t+8)}}}t.StreamPropertiesObject=m,m.guid=s.default.StreamPropertiesObject;class p{constructor(){this.len=22}get(e,t){return{reserved1:s.default.fromBin(e,t),reserved2:e.readUInt16LE(t+16),extensionDataSize:e.readUInt32LE(t+18)}}}t.HeaderExtensionObject=p,p.guid=s.default.HeaderExtensionObject;const f={len:20,get:(e,t)=>({entryCount:e.readUInt16LE(t+16)})};async function h(e){const t=await e.readNumber(n.UINT16_LE);return(await e.readToken(new n.StringType(2*t,"utf16le"))).replace("\0","")}async function g(e){const t=await e.readNumber(n.UINT16_LE),a=r.alloc(t);return await e.readBuffer(a),a}async function T(e){const t=await e.readNumber(n.UINT16_LE);return{type:{videoCodec:1==(1&t),audioCodec:2==(2&t)},codecName:await h(e),description:await h(e),information:await g(e)}}t.readCodecEntries=async function(e){const t=await e.readToken(f),a=[];for(let r=0;r0){const t=b.contentDescTags[i],s=r+n;a.push({id:t,value:o.AsfUtil.parseUnicodeAttr(e.slice(r,s))}),r=s}}return a}}t.ContentDescriptionObjectState=b,b.guid=s.default.ContentDescriptionObject,b.contentDescTags=["Title","Author","Copyright","Description","Rating"];class y extends u{constructor(e){super(e)}get(e,t){const a=[],r=e.readUInt16LE(t);let i=t+2;for(let t=0;t{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.AsfParser=void 0;const r=a(1227),i=a(6032),n=a(8054),s=a(5174),o=a(7805),c=(0,r.default)("music-metadata:parser:ASF");class l extends o.BasicParser{async parse(){const e=await this.tokenizer.readToken(s.TopLevelHeaderObjectToken);if(!e.objectId.equals(n.default.HeaderObject))throw new Error("expected asf header; but was not found; got: "+e.objectId.str);try{await this.parseObjectHeader(e.numberOfHeaderObjects)}catch(e){c("Error while parsing ASF: %s",e)}}async parseObjectHeader(e){let t;do{const e=await this.tokenizer.readToken(s.HeaderObjectToken);switch(c("header GUID=%s",e.objectId.str),e.objectId.str){case s.FilePropertiesObject.guid.str:const a=await this.tokenizer.readToken(new s.FilePropertiesObject(e));this.metadata.setFormat("duration",Number(a.playDuration/BigInt(1e3))/1e4-Number(a.preroll)/1e3),this.metadata.setFormat("bitrate",a.maximumBitrate);break;case s.StreamPropertiesObject.guid.str:const r=await this.tokenizer.readToken(new s.StreamPropertiesObject(e));this.metadata.setFormat("container","ASF/"+r.streamType);break;case s.HeaderExtensionObject.guid.str:const o=await this.tokenizer.readToken(new s.HeaderExtensionObject);await this.parseExtensionObject(o.extensionDataSize);break;case s.ContentDescriptionObjectState.guid.str:t=await this.tokenizer.readToken(new s.ContentDescriptionObjectState(e)),this.addTags(t);break;case s.ExtendedContentDescriptionObjectState.guid.str:t=await this.tokenizer.readToken(new s.ExtendedContentDescriptionObjectState(e)),this.addTags(t);break;case n.default.CodecListObject.str:const l=await s.readCodecEntries(this.tokenizer);l.forEach((e=>{this.metadata.addStreamInfo({type:e.type.videoCodec?i.TrackType.video:i.TrackType.audio,codecName:e.codecName})}));const u=l.filter((e=>e.type.audioCodec)).map((e=>e.codecName)).join("/");this.metadata.setFormat("codec",u);break;case n.default.StreamBitratePropertiesObject.str:await this.tokenizer.ignore(e.objectSize-s.HeaderObjectToken.len);break;case n.default.PaddingObject.str:c("Padding: %s bytes",e.objectSize-s.HeaderObjectToken.len),await this.tokenizer.ignore(e.objectSize-s.HeaderObjectToken.len);break;default:this.metadata.addWarning("Ignore ASF-Object-GUID: "+e.objectId.str),c("Ignore ASF-Object-GUID: %s",e.objectId.str),await this.tokenizer.readToken(new s.IgnoreObjectState(e))}}while(--e)}addTags(e){e.forEach((e=>{this.metadata.addTag("asf",e.id,e.value)}))}async parseExtensionObject(e){do{const t=await this.tokenizer.readToken(s.HeaderObjectToken),a=t.objectSize-s.HeaderObjectToken.len;switch(t.objectId.str){case s.ExtendedStreamPropertiesObjectState.guid.str:await this.tokenizer.readToken(new s.ExtendedStreamPropertiesObjectState(t));break;case s.MetadataObjectState.guid.str:const e=await this.tokenizer.readToken(new s.MetadataObjectState(t));this.addTags(e);break;case s.MetadataLibraryObjectState.guid.str:const r=await this.tokenizer.readToken(new s.MetadataLibraryObjectState(t));this.addTags(r);break;case n.default.PaddingObject.str:await this.tokenizer.ignore(a);break;case n.default.CompatibilityObject.str:this.tokenizer.ignore(a);break;case n.default.ASF_Index_Placeholder_Object.str:await this.tokenizer.ignore(a);break;default:this.metadata.addWarning("Ignore ASF-Object-GUID: "+t.objectId.str),await this.tokenizer.readToken(new s.IgnoreObjectState(t))}e-=t.objectSize}while(e>0)}}t.AsfParser=l},9004:(e,t,a)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.AsfTagMapper=void 0;const r=a(9918),i={Title:"title",Author:"artist","WM/AlbumArtist":"albumartist","WM/AlbumTitle":"album","WM/Year":"date","WM/OriginalReleaseTime":"originaldate","WM/OriginalReleaseYear":"originalyear",Description:"comment","WM/TrackNumber":"track","WM/PartOfSet":"disk","WM/Genre":"genre","WM/Composer":"composer","WM/Lyrics":"lyrics","WM/AlbumSortOrder":"albumsort","WM/TitleSortOrder":"titlesort","WM/ArtistSortOrder":"artistsort","WM/AlbumArtistSortOrder":"albumartistsort","WM/ComposerSortOrder":"composersort","WM/Writer":"lyricist","WM/Conductor":"conductor","WM/ModifiedBy":"remixer","WM/Engineer":"engineer","WM/Producer":"producer","WM/DJMixer":"djmixer","WM/Mixer":"mixer","WM/Publisher":"label","WM/ContentGroupDescription":"grouping","WM/SubTitle":"subtitle","WM/SetSubTitle":"discsubtitle","WM/IsCompilation":"compilation","WM/SharedUserRating":"rating","WM/BeatsPerMinute":"bpm","WM/Mood":"mood","WM/Media":"media","WM/CatalogNo":"catalognumber","MusicBrainz/Album Status":"releasestatus","MusicBrainz/Album Type":"releasetype","MusicBrainz/Album Release Country":"releasecountry","WM/Script":"script","WM/Language":"language",Copyright:"copyright",LICENSE:"license","WM/EncodedBy":"encodedby","WM/EncodingSettings":"encodersettings","WM/Barcode":"barcode","WM/ISRC":"isrc","MusicBrainz/Track Id":"musicbrainz_recordingid","MusicBrainz/Release Track Id":"musicbrainz_trackid","MusicBrainz/Album Id":"musicbrainz_albumid","MusicBrainz/Artist Id":"musicbrainz_artistid","MusicBrainz/Album Artist Id":"musicbrainz_albumartistid","MusicBrainz/Release Group Id":"musicbrainz_releasegroupid","MusicBrainz/Work Id":"musicbrainz_workid","MusicBrainz/TRM Id":"musicbrainz_trmid","MusicBrainz/Disc Id":"musicbrainz_discid","Acoustid/Id":"acoustid_id","Acoustid/Fingerprint":"acoustid_fingerprint","MusicIP/PUID":"musicip_puid","WM/ARTISTS":"artists","WM/InitialKey":"key",ASIN:"asin","WM/Work":"work","WM/AuthorURL":"website","WM/Picture":"picture"};class n extends r.CommonTagMapper{static toRating(e){return{rating:parseFloat(e+1)/5}}constructor(){super(["asf"],i)}postMap(e){if("WM/SharedUserRating"===e.id){const t=e.id.split(":");e.value=n.toRating(e.value),e.id=t[0]}}}t.AsfTagMapper=n},2252:(e,t,a)=>{"use strict";var r=a(8764).Buffer;Object.defineProperty(t,"__esModule",{value:!0}),t.AsfUtil=void 0;const i=a(3416),n=a(3769);class s{static getParserForAttr(e){return s.attributeParsers[e]}static parseUnicodeAttr(e){return n.stripNulls(n.decodeString(e,"utf16le"))}static parseByteArrayAttr(e){return r.from(e)}static parseBoolAttr(e,t=0){return 1===s.parseWordAttr(e,t)}static parseDWordAttr(e,t=0){return e.readUInt32LE(t)}static parseQWordAttr(e,t=0){return i.UINT64_LE.get(e,t)}static parseWordAttr(e,t=0){return e.readUInt16LE(t)}}t.AsfUtil=s,s.attributeParsers=[s.parseUnicodeAttr,s.parseByteArrayAttr,s.parseBoolAttr,s.parseDWordAttr,s.parseQWordAttr,s.parseWordAttr,s.parseByteArrayAttr]},8054:(e,t,a)=>{"use strict";var r=a(8764).Buffer;Object.defineProperty(t,"__esModule",{value:!0});class i{constructor(e){this.str=e}static fromBin(e,t=0){return new i(this.decode(e,t))}static decode(e,t=0){return(e.readUInt32LE(t).toString(16)+"-"+e.readUInt16LE(t+4).toString(16)+"-"+e.readUInt16LE(t+6).toString(16)+"-"+e.readUInt16BE(t+8).toString(16)+"-"+e.slice(t+10,t+16).toString("hex")).toUpperCase()}static decodeMediaType(e){switch(e.str){case i.AudioMedia.str:return"audio";case i.VideoMedia.str:return"video";case i.CommandMedia.str:return"command";case i.Degradable_JPEG_Media.str:return"degradable-jpeg";case i.FileTransferMedia.str:return"file-transfer";case i.BinaryMedia.str:return"binary"}}static encode(e){const t=r.alloc(16);return t.writeUInt32LE(parseInt(e.slice(0,8),16),0),t.writeUInt16LE(parseInt(e.slice(9,13),16),4),t.writeUInt16LE(parseInt(e.slice(14,18),16),6),r.from(e.slice(19,23),"hex").copy(t,8),r.from(e.slice(24),"hex").copy(t,10),t}equals(e){return this.str===e.str}toBin(){return i.encode(this.str)}}t.default=i,i.HeaderObject=new i("75B22630-668E-11CF-A6D9-00AA0062CE6C"),i.DataObject=new i("75B22636-668E-11CF-A6D9-00AA0062CE6C"),i.SimpleIndexObject=new i("33000890-E5B1-11CF-89F4-00A0C90349CB"),i.IndexObject=new i("D6E229D3-35DA-11D1-9034-00A0C90349BE"),i.MediaObjectIndexObject=new i("FEB103F8-12AD-4C64-840F-2A1D2F7AD48C"),i.TimecodeIndexObject=new i("3CB73FD0-0C4A-4803-953D-EDF7B6228F0C"),i.FilePropertiesObject=new i("8CABDCA1-A947-11CF-8EE4-00C00C205365"),i.StreamPropertiesObject=new i("B7DC0791-A9B7-11CF-8EE6-00C00C205365"),i.HeaderExtensionObject=new i("5FBF03B5-A92E-11CF-8EE3-00C00C205365"),i.CodecListObject=new i("86D15240-311D-11D0-A3A4-00A0C90348F6"),i.ScriptCommandObject=new i("1EFB1A30-0B62-11D0-A39B-00A0C90348F6"),i.MarkerObject=new i("F487CD01-A951-11CF-8EE6-00C00C205365"),i.BitrateMutualExclusionObject=new i("D6E229DC-35DA-11D1-9034-00A0C90349BE"),i.ErrorCorrectionObject=new i("75B22635-668E-11CF-A6D9-00AA0062CE6C"),i.ContentDescriptionObject=new i("75B22633-668E-11CF-A6D9-00AA0062CE6C"),i.ExtendedContentDescriptionObject=new i("D2D0A440-E307-11D2-97F0-00A0C95EA850"),i.ContentBrandingObject=new i("2211B3FA-BD23-11D2-B4B7-00A0C955FC6E"),i.StreamBitratePropertiesObject=new i("7BF875CE-468D-11D1-8D82-006097C9A2B2"),i.ContentEncryptionObject=new i("2211B3FB-BD23-11D2-B4B7-00A0C955FC6E"),i.ExtendedContentEncryptionObject=new i("298AE614-2622-4C17-B935-DAE07EE9289C"),i.DigitalSignatureObject=new i("2211B3FC-BD23-11D2-B4B7-00A0C955FC6E"),i.PaddingObject=new i("1806D474-CADF-4509-A4BA-9AABCB96AAE8"),i.ExtendedStreamPropertiesObject=new i("14E6A5CB-C672-4332-8399-A96952065B5A"),i.AdvancedMutualExclusionObject=new i("A08649CF-4775-4670-8A16-6E35357566CD"),i.GroupMutualExclusionObject=new i("D1465A40-5A79-4338-B71B-E36B8FD6C249"),i.StreamPrioritizationObject=new i("D4FED15B-88D3-454F-81F0-ED5C45999E24"),i.BandwidthSharingObject=new i("A69609E6-517B-11D2-B6AF-00C04FD908E9"),i.LanguageListObject=new i("7C4346A9-EFE0-4BFC-B229-393EDE415C85"),i.MetadataObject=new i("C5F8CBEA-5BAF-4877-8467-AA8C44FA4CCA"),i.MetadataLibraryObject=new i("44231C94-9498-49D1-A141-1D134E457054"),i.IndexParametersObject=new i("D6E229DF-35DA-11D1-9034-00A0C90349BE"),i.MediaObjectIndexParametersObject=new i("6B203BAD-3F11-48E4-ACA8-D7613DE2CFA7"),i.TimecodeIndexParametersObject=new i("F55E496D-9797-4B5D-8C8B-604DFE9BFB24"),i.CompatibilityObject=new i("26F18B5D-4584-47EC-9F5F-0E651F0452C9"),i.AdvancedContentEncryptionObject=new i("43058533-6981-49E6-9B74-AD12CB86D58C"),i.AudioMedia=new i("F8699E40-5B4D-11CF-A8FD-00805F5C442B"),i.VideoMedia=new i("BC19EFC0-5B4D-11CF-A8FD-00805F5C442B"),i.CommandMedia=new i("59DACFC0-59E6-11D0-A3AC-00A0C90348F6"),i.JFIF_Media=new i("B61BE100-5B4E-11CF-A8FD-00805F5C442B"),i.Degradable_JPEG_Media=new i("35907DE0-E415-11CF-A917-00805F5C442B"),i.FileTransferMedia=new i("91BD222C-F21C-497A-8B6D-5AA86BFC0185"),i.BinaryMedia=new i("3AFB65E2-47EF-40F2-AC2C-70A90D71D343"),i.ASF_Index_Placeholder_Object=new i("D9AADE20-7C17-4F9C-BC28-8555DD98E2A2")},7805:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.BasicParser=void 0,t.BasicParser=class{init(e,t,a){return this.metadata=e,this.tokenizer=t,this.options=a,this}}},4132:(e,t,a)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.CaseInsensitiveTagMap=void 0;const r=a(9918);class i extends r.CommonTagMapper{constructor(e,t){const a={};for(const e of Object.keys(t))a[e.toUpperCase()]=t[e];super(e,a)}getCommonName(e){return this.tagMap[e.toUpperCase()]}}t.CaseInsensitiveTagMap=i},6592:(e,t,a)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.CombinedTagMapper=void 0;const r=a(2939),i=a(4005),n=a(9004),s=a(7183),o=a(8414),c=a(7852),l=a(9860),u=a(5756),d=a(5481);t.CombinedTagMapper=class{constructor(){this.tagMappers={},[new r.ID3v1TagMapper,new s.ID3v22TagMapper,new i.ID3v24TagMapper,new c.MP4TagMapper,new c.MP4TagMapper,new l.VorbisTagMapper,new o.APEv2TagMapper,new n.AsfTagMapper,new u.RiffInfoTagMapper,new d.MatroskaTagMapper].forEach((e=>{this.registerTagMapper(e)}))}mapTag(e,t,a){if(this.tagMappers[e])return this.tagMappers[e].mapGenericTag(t,a);throw new Error("No generic tag mapper defined for tag-format: "+e)}registerTagMapper(e){for(const t of e.tagTypes)this.tagMappers[t]=e}}},8049:(e,t,a)=>{"use strict";var r=a(8764).Buffer;Object.defineProperty(t,"__esModule",{value:!0}),t.FourCcToken=void 0;const i=a(3769),n=/^[\x21-\x7e©][\x20-\x7e\x00()]{3}/;t.FourCcToken={len:4,get:(e,a)=>{const r=e.toString("binary",a,a+t.FourCcToken.len);if(!r.match(n))throw new Error(`FourCC contains invalid characters: ${i.a2hex(r)} "${r}"`);return r},put:(e,t,a)=>{const i=r.from(a,"binary");if(4!==i.length)throw new Error("Invalid length");return i.copy(e,t)}}},9918:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.CommonTagMapper=void 0;class a{constructor(e,t){this.tagTypes=e,this.tagMap=t}static toIntOrNull(e){const t=parseInt(e,10);return isNaN(t)?null:t}static normalizeTrack(e){const t=e.toString().split("/");return{no:parseInt(t[0],10)||null,of:parseInt(t[1],10)||null}}mapGenericTag(e,t){e={id:e.id,value:e.value},this.postMap(e,t);const a=this.getCommonName(e.id);return a?{id:a,value:e.value}:null}getCommonName(e){return this.tagMap[e]}postMap(e,t){}}t.CommonTagMapper=a,a.maxRatingScore=1},103:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.isUnique=t.isSingleton=t.commonTags=void 0,t.commonTags={year:{multiple:!1},track:{multiple:!1},disk:{multiple:!1},title:{multiple:!1},artist:{multiple:!1},artists:{multiple:!0,unique:!0},albumartist:{multiple:!1},album:{multiple:!1},date:{multiple:!1},originaldate:{multiple:!1},originalyear:{multiple:!1},comment:{multiple:!0,unique:!1},genre:{multiple:!0,unique:!0},picture:{multiple:!0,unique:!0},composer:{multiple:!0,unique:!0},lyrics:{multiple:!0,unique:!1},albumsort:{multiple:!1,unique:!0},titlesort:{multiple:!1,unique:!0},work:{multiple:!1,unique:!0},artistsort:{multiple:!1,unique:!0},albumartistsort:{multiple:!1,unique:!0},composersort:{multiple:!1,unique:!0},lyricist:{multiple:!0,unique:!0},writer:{multiple:!0,unique:!0},conductor:{multiple:!0,unique:!0},remixer:{multiple:!0,unique:!0},arranger:{multiple:!0,unique:!0},engineer:{multiple:!0,unique:!0},producer:{multiple:!0,unique:!0},technician:{multiple:!0,unique:!0},djmixer:{multiple:!0,unique:!0},mixer:{multiple:!0,unique:!0},label:{multiple:!0,unique:!0},grouping:{multiple:!1},subtitle:{multiple:!0},discsubtitle:{multiple:!1},totaltracks:{multiple:!1},totaldiscs:{multiple:!1},compilation:{multiple:!1},rating:{multiple:!0},bpm:{multiple:!1},mood:{multiple:!1},media:{multiple:!1},catalognumber:{multiple:!0,unique:!0},tvShow:{multiple:!1},tvShowSort:{multiple:!1},tvSeason:{multiple:!1},tvEpisode:{multiple:!1},tvEpisodeId:{multiple:!1},tvNetwork:{multiple:!1},podcast:{multiple:!1},podcasturl:{multiple:!1},releasestatus:{multiple:!1},releasetype:{multiple:!0},releasecountry:{multiple:!1},script:{multiple:!1},language:{multiple:!1},copyright:{multiple:!1},license:{multiple:!1},encodedby:{multiple:!1},encodersettings:{multiple:!1},gapless:{multiple:!1},barcode:{multiple:!1},isrc:{multiple:!0},asin:{multiple:!1},musicbrainz_recordingid:{multiple:!1},musicbrainz_trackid:{multiple:!1},musicbrainz_albumid:{multiple:!1},musicbrainz_artistid:{multiple:!0},musicbrainz_albumartistid:{multiple:!0},musicbrainz_releasegroupid:{multiple:!1},musicbrainz_workid:{multiple:!1},musicbrainz_trmid:{multiple:!1},musicbrainz_discid:{multiple:!1},acoustid_id:{multiple:!1},acoustid_fingerprint:{multiple:!1},musicip_puid:{multiple:!1},musicip_fingerprint:{multiple:!1},website:{multiple:!1},"performer:instrument":{multiple:!0,unique:!0},averageLevel:{multiple:!1},peakLevel:{multiple:!1},notes:{multiple:!0,unique:!1},key:{multiple:!1},originalalbum:{multiple:!1},originalartist:{multiple:!1},discogs_artist_id:{multiple:!0,unique:!0},discogs_release_id:{multiple:!1},discogs_label_id:{multiple:!1},discogs_master_release_id:{multiple:!1},discogs_votes:{multiple:!1},discogs_rating:{multiple:!1},replaygain_track_peak:{multiple:!1},replaygain_track_gain:{multiple:!1},replaygain_album_peak:{multiple:!1},replaygain_album_gain:{multiple:!1},replaygain_track_minmax:{multiple:!1},replaygain_album_minmax:{multiple:!1},replaygain_undo:{multiple:!1},description:{multiple:!0},longDescription:{multiple:!1},category:{multiple:!0},hdVideo:{multiple:!1},keywords:{multiple:!0},movement:{multiple:!1},movementIndex:{multiple:!1},movementTotal:{multiple:!1},podcastId:{multiple:!1},showMovement:{multiple:!1},stik:{multiple:!1}},t.isSingleton=function(e){return t.commonTags.hasOwnProperty(e)&&!t.commonTags[e].multiple},t.isUnique=function(e){return!t.commonTags[e].multiple||t.commonTags[e].unique}},7584:(e,t,a)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.joinArtists=t.MetadataCollector=void 0;const r=a(6032),i=a(1227),n=a(103),s=a(6592),o=a(9918),c=a(3769),l=a(1),u=(0,i.default)("music-metadata:collector"),d=["matroska","APEv2","vorbis","ID3v2.4","ID3v2.3","ID3v2.2","exif","asf","iTunes","ID3v1"];function m(e){return e.length>2?e.slice(0,e.length-1).join(", ")+" & "+e[e.length-1]:e.join(" & ")}t.MetadataCollector=class{constructor(e){this.opts=e,this.format={tagTypes:[],trackInfo:[]},this.native={},this.common={track:{no:null,of:null},disk:{no:null,of:null},movementIndex:{}},this.quality={warnings:[]},this.commonOrigin={},this.originPriority={},this.tagMapper=new s.CombinedTagMapper;let t=1;for(const e of d)this.originPriority[e]=t++;this.originPriority.artificial=500,this.originPriority.id3v1=600}hasAny(){return Object.keys(this.native).length>0}addStreamInfo(e){u(`streamInfo: type=${r.TrackType[e.type]}, codec=${e.codecName}`),this.format.trackInfo.push(e)}setFormat(e,t){u(`format: ${e} = ${t}`),this.format[e]=t,this.opts.observer&&this.opts.observer({metadata:this,tag:{type:"format",id:e,value:t}})}addTag(e,t,a){u(`tag ${e}.${t} = ${a}`),this.native[e]||(this.format.tagTypes.push(e),this.native[e]=[]),this.native[e].push({id:t,value:a}),this.toCommon(e,t,a)}addWarning(e){this.quality.warnings.push({message:e})}postMap(e,t){switch(t.id){case"artist":if(this.commonOrigin.artist===this.originPriority[e])return this.postMap("artificial",{id:"artists",value:t.value});this.common.artists||this.setGenericTag("artificial",{id:"artists",value:t.value});break;case"artists":if(!(this.common.artist&&this.commonOrigin.artist!==this.originPriority.artificial||this.common.artists&&-1!==this.common.artists.indexOf(t.value))){const e={id:"artist",value:m((this.common.artists||[]).concat([t.value]))};this.setGenericTag("artificial",e)}break;case"picture":return void this.postFixPicture(t.value).then((a=>{null!==a&&(t.value=a,this.setGenericTag(e,t))}));case"totaltracks":return void(this.common.track.of=o.CommonTagMapper.toIntOrNull(t.value));case"totaldiscs":return void(this.common.disk.of=o.CommonTagMapper.toIntOrNull(t.value));case"movementTotal":return void(this.common.movementIndex.of=o.CommonTagMapper.toIntOrNull(t.value));case"track":case"disk":case"movementIndex":const a=this.common[t.id].of;return this.common[t.id]=o.CommonTagMapper.normalizeTrack(t.value),void(this.common[t.id].of=null!=a?a:this.common[t.id].of);case"bpm":case"year":case"originalyear":t.value=parseInt(t.value,10);break;case"date":const r=parseInt(t.value.substr(0,4),10);isNaN(r)||(this.common.year=r);break;case"discogs_label_id":case"discogs_release_id":case"discogs_master_release_id":case"discogs_artist_id":case"discogs_votes":t.value="string"==typeof t.value?parseInt(t.value,10):t.value;break;case"replaygain_track_gain":case"replaygain_track_peak":case"replaygain_album_gain":case"replaygain_album_peak":t.value=(0,c.toRatio)(t.value);break;case"replaygain_track_minmax":t.value=t.value.split(",").map((e=>parseInt(e,10)));break;case"replaygain_undo":const i=t.value.split(",").map((e=>parseInt(e,10)));t.value={leftChannel:i[0],rightChannel:i[1]};break;case"gapless":case"compilation":case"podcast":case"showMovement":t.value="1"===t.value||1===t.value;break;case"isrc":if(this.common[t.id]&&-1!==this.common[t.id].indexOf(t.value))return}null!==t.value&&this.setGenericTag(e,t)}toCommonMetadata(){return{format:this.format,native:this.native,quality:this.quality,common:this.common}}async postFixPicture(e){if(e.data&&e.data.length>0){if(!e.format){const t=await l.fromBuffer(e.data);if(!t)return null;e.format=t.mime}return e.format=e.format.toLocaleLowerCase(),"image/jpg"===e.format&&(e.format="image/jpeg"),e}return this.addWarning("Empty picture tag found"),null}toCommon(e,t,a){const r={id:t,value:a},i=this.tagMapper.mapTag(e,r,this);i&&this.postMap(e,i)}setGenericTag(e,t){u(`common.${t.id} = ${t.value}`);const a=this.commonOrigin[t.id]||1e3,r=this.originPriority[e];if((0,n.isSingleton)(t.id)){if(!(r<=a))return u(`Ignore native tag (singleton): ${e}.${t.id} = ${t.value}`);this.common[t.id]=t.value,this.commonOrigin[t.id]=r}else if(r===a)(0,n.isUnique)(t.id)&&-1!==this.common[t.id].indexOf(t.value)?u(`Ignore duplicate value: ${e}.${t.id} = ${t.value}`):this.common[t.id].push(t.value);else{if(!(r{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.RandomUint8ArrayReader=void 0,t.RandomUint8ArrayReader=class{constructor(e){this.uint8Array=e,this.fileSize=e.length}async randomRead(e,t,a,r){return e.set(this.uint8Array.subarray(r,r+a),t),a}}},3769:(e,t,a)=>{"use strict";var r=a(8764).Buffer;function i(e,t,a,r){const n=a%8;let s=e[t+~~(a/8)];s&=255>>n;const o=8-n,c=r-o;return c<0?s>>=8-n-r:c>0&&(s<<=c,s|=i(e,t,a+o,c)),s}function n(e){return 10*Math.log10(e)}function s(e){return Math.pow(10,e/10)}Object.defineProperty(t,"__esModule",{value:!0}),t.toRatio=t.dbToRatio=t.ratioToDb=t.a2hex=t.isBitSet=t.getBitAllignedNumber=t.stripNulls=t.decodeString=t.trimRightNull=t.findZero=t.getBit=void 0,t.getBit=function(e,t,a){return 0!=(e[t]&1<=a)return a;i+=2}return i}for(;0!==e[i];){if(i>=a)return a;i++}return i},t.trimRightNull=function(e){const t=e.indexOf("\0");return-1===t?e:e.substr(0,t)},t.decodeString=function e(t,a){if(255===t[0]&&254===t[1])return e(t.subarray(2),a);if("utf16le"===a&&254===t[0]&&255===t[1]){if(0!=(1&t.length))throw new Error("Expected even number of octets for 16-bit unicode string");return e(function(e){const t=e.length;if(0!=(1&t))throw new Error("Buffer length must be even");for(let a=0;ae.trim().toLowerCase()));if(t.length>=1){const e=parseFloat(t[0]);return 2===t.length&&"db"===t[1]?{dB:e,ratio:s(e)}:{dB:n(e),ratio:e}}}},523:(e,t,a)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.scanAppendingHeaders=t.selectCover=t.ratingToStars=t.orderTags=t.parseFromTokenizer=t.parseBuffer=t.parseStream=void 0;const r=a(5849),i=a(3275),n=a(9461),s=a(6742),o=a(2282),c=a(9941);function l(e,t){return i.ParserFactory.parseOnContentType(e,t)}async function u(e,t={}){let a=e.fileSize;await(0,o.hasID3v1Header)(e)&&(a-=128,a-=await(0,c.getLyricsHeaderLength)(e)),t.apeHeader=await s.APEv2Parser.findApeFooterOffset(e,a)}t.parseStream=function(e,t,a={}){return l(r.fromStream(e,"string"==typeof t?{mimeType:t}:t),a)},t.parseBuffer=async function(e,t,a={}){const i=new n.RandomUint8ArrayReader(e);return await u(i,a),l(r.fromBuffer(e,"string"==typeof t?{mimeType:t}:t),a)},t.parseFromTokenizer=l,t.orderTags=function(e){const t={};for(const a of e)(t[a.id]=t[a.id]||[]).push(a.value);return t},t.ratingToStars=function(e){return void 0===e?0:1+Math.round(4*e)},t.selectCover=function(e){return e?e.reduce(((e,t)=>t.name&&t.name.toLowerCase()in["front","cover","cover (front)"]?t:e)):null},t.scanAppendingHeaders=u},6789:(e,t,a)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.DsdiffParser=void 0;const r=a(3416),i=a(1227),n=a(5849),s=a(8049),o=a(7805),c=a(8928),l=a(6678),u=(0,i.default)("music-metadata:parser:aiff");class d extends o.BasicParser{async parse(){const e=await this.tokenizer.readToken(l.ChunkHeader64);if("FRM8"!==e.chunkID)throw new Error("Unexpected chunk-ID");const t=(await this.tokenizer.readToken(s.FourCcToken)).trim();if("DSD"===t)return this.metadata.setFormat("container",`DSDIFF/${t}`),this.metadata.setFormat("lossless",!0),this.readFmt8Chunks(e.chunkSize-BigInt(s.FourCcToken.len));throw Error(`Unsupported DSDIFF type: ${t}`)}async readFmt8Chunks(e){for(;e>=l.ChunkHeader64.len;){const t=await this.tokenizer.readToken(l.ChunkHeader64);u(`Chunk id=${t.chunkID}`),await this.readData(t),e-=BigInt(l.ChunkHeader64.len)+t.chunkSize}}async readData(e){u(`Reading data of chunk[ID=${e.chunkID}, size=${e.chunkSize}]`);const t=this.tokenizer.position;switch(e.chunkID.trim()){case"FVER":const t=await this.tokenizer.readToken(r.UINT32_LE);u(`DSDIFF version=${t}`);break;case"PROP":if("SND "!==await this.tokenizer.readToken(s.FourCcToken))throw new Error("Unexpected PROP-chunk ID");await this.handleSoundPropertyChunks(e.chunkSize-BigInt(s.FourCcToken.len));break;case"ID3":const a=await this.tokenizer.readToken(new r.Uint8ArrayType(Number(e.chunkSize))),i=n.fromBuffer(a);await(new c.ID3v2Parser).parse(this.metadata,i,this.options);break;default:u(`Ignore chunk[ID=${e.chunkID}, size=${e.chunkSize}]`);break;case"DSD":this.metadata.setFormat("numberOfSamples",Number(e.chunkSize*BigInt(8)/BigInt(this.metadata.format.numberOfChannels))),this.metadata.setFormat("duration",this.metadata.format.numberOfSamples/this.metadata.format.sampleRate)}const a=e.chunkSize-BigInt(this.tokenizer.position-t);a>0&&(u(`After Parsing chunk, remaining ${a} bytes`),await this.tokenizer.ignore(Number(a)))}async handleSoundPropertyChunks(e){for(u(`Parsing sound-property-chunks, remainingSize=${e}`);e>0;){const t=await this.tokenizer.readToken(l.ChunkHeader64);u(`Sound-property-chunk[ID=${t.chunkID}, size=${t.chunkSize}]`);const a=this.tokenizer.position;switch(t.chunkID.trim()){case"FS":const e=await this.tokenizer.readToken(r.UINT32_BE);this.metadata.setFormat("sampleRate",e);break;case"CHNL":const a=await this.tokenizer.readToken(r.UINT16_BE);this.metadata.setFormat("numberOfChannels",a),await this.handleChannelChunks(t.chunkSize-BigInt(r.UINT16_BE.len));break;case"CMPR":const i=(await this.tokenizer.readToken(s.FourCcToken)).trim(),n=await this.tokenizer.readToken(r.UINT8),o=await this.tokenizer.readToken(new r.StringType(n,"ascii"));"DSD"===i&&(this.metadata.setFormat("lossless",!0),this.metadata.setFormat("bitsPerSample",1)),this.metadata.setFormat("codec",`${i} (${o})`);break;case"ABSS":const c=await this.tokenizer.readToken(r.UINT16_BE),l=await this.tokenizer.readToken(r.UINT8),d=await this.tokenizer.readToken(r.UINT8),m=await this.tokenizer.readToken(r.UINT32_BE);u(`ABSS ${c}:${l}:${d}.${m}`);break;case"LSCO":const p=await this.tokenizer.readToken(r.UINT16_BE);u(`LSCO lsConfig=${p}`);break;default:u(`Unknown sound-property-chunk[ID=${t.chunkID}, size=${t.chunkSize}]`),await this.tokenizer.ignore(Number(t.chunkSize))}const i=t.chunkSize-BigInt(this.tokenizer.position-a);i>0&&(u(`After Parsing sound-property-chunk ${t.chunkSize}, remaining ${i} bytes`),await this.tokenizer.ignore(Number(i))),e-=BigInt(l.ChunkHeader64.len)+t.chunkSize,u(`Parsing sound-property-chunks, remainingSize=${e}`)}if(this.metadata.format.lossless&&this.metadata.format.sampleRate&&this.metadata.format.numberOfChannels&&this.metadata.format.bitsPerSample){const e=this.metadata.format.sampleRate*this.metadata.format.numberOfChannels*this.metadata.format.bitsPerSample;this.metadata.setFormat("bitrate",e)}}async handleChannelChunks(e){u(`Parsing channel-chunks, remainingSize=${e}`);const t=[];for(;e>=s.FourCcToken.len;){const a=await this.tokenizer.readToken(s.FourCcToken);u(`Channel[ID=${a}]`),t.push(a),e-=BigInt(s.FourCcToken.len)}return u(`Channels: ${t.join(", ")}`),t}}t.DsdiffParser=d},6678:(e,t,a)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.ChunkHeader64=void 0;const r=a(3416),i=a(8049);t.ChunkHeader64={len:12,get:(e,t)=>({chunkID:i.FourCcToken.get(e,t),chunkSize:r.INT64_BE.get(e,t+4)})}},4101:(e,t,a)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.FormatChunk=t.ChannelType=t.DsdChunk=t.ChunkHeader=void 0;const r=a(3416),i=a(8049);var n;t.ChunkHeader={len:12,get:(e,t)=>({id:i.FourCcToken.get(e,t),size:r.UINT64_LE.get(e,t+4)})},t.DsdChunk={len:16,get:(e,t)=>({fileSize:r.INT64_LE.get(e,t),metadataPointer:r.INT64_LE.get(e,t+8)})},(n=t.ChannelType||(t.ChannelType={}))[n.mono=1]="mono",n[n.stereo=2]="stereo",n[n.channels=3]="channels",n[n.quad=4]="quad",n[n["4 channels"]=5]="4 channels",n[n["5 channels"]=6]="5 channels",n[n["5.1 channels"]=7]="5.1 channels",t.FormatChunk={len:40,get:(e,t)=>({formatVersion:r.INT32_LE.get(e,t),formatID:r.INT32_LE.get(e,t+4),channelType:r.INT32_LE.get(e,t+8),channelNum:r.INT32_LE.get(e,t+12),samplingFrequency:r.INT32_LE.get(e,t+16),bitsPerSample:r.INT32_LE.get(e,t+20),sampleCount:r.INT64_LE.get(e,t+24),blockSizePerChannel:r.INT32_LE.get(e,t+32)})}},1533:(e,t,a)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.DsfParser=void 0;const r=a(1227),i=a(5159),n=a(4101),s=a(8928),o=(0,r.default)("music-metadata:parser:DSF");class c extends i.AbstractID3Parser{async postId3v2Parse(){const e=this.tokenizer.position,t=await this.tokenizer.readToken(n.ChunkHeader);if("DSD "!==t.id)throw new Error("Invalid chunk signature");this.metadata.setFormat("container","DSF"),this.metadata.setFormat("lossless",!0);const a=await this.tokenizer.readToken(n.DsdChunk);if(a.metadataPointer!==BigInt(0))return o(`expect ID3v2 at offset=${a.metadataPointer}`),await this.parseChunks(a.fileSize-t.size),await this.tokenizer.ignore(Number(a.metadataPointer)-this.tokenizer.position-e),(new s.ID3v2Parser).parse(this.metadata,this.tokenizer,this.options);o("No ID3v2 tag present")}async parseChunks(e){for(;e>=n.ChunkHeader.len;){const t=await this.tokenizer.readToken(n.ChunkHeader);if(o(`Parsing chunk name=${t.id} size=${t.size}`),"fmt "===t.id){const e=await this.tokenizer.readToken(n.FormatChunk);this.metadata.setFormat("numberOfChannels",e.channelNum),this.metadata.setFormat("sampleRate",e.samplingFrequency),this.metadata.setFormat("bitsPerSample",e.bitsPerSample),this.metadata.setFormat("numberOfSamples",e.sampleCount),this.metadata.setFormat("duration",Number(e.sampleCount)/e.samplingFrequency);const t=e.bitsPerSample*e.samplingFrequency*e.channelNum;return void this.metadata.setFormat("bitrate",t)}this.tokenizer.ignore(Number(t.size)-n.ChunkHeader.len),e-=t.size}}}t.DsfParser=c},498:(e,t,a)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.FlacParser=void 0;const r=a(3416),i=a(1227),n=a(3769),s=a(2127),o=a(5159),c=a(8049),l=a(4210),u=a(441),d=(0,i.default)("music-metadata:parser:FLAC");var m;!function(e){e[e.STREAMINFO=0]="STREAMINFO",e[e.PADDING=1]="PADDING",e[e.APPLICATION=2]="APPLICATION",e[e.SEEKTABLE=3]="SEEKTABLE",e[e.VORBIS_COMMENT=4]="VORBIS_COMMENT",e[e.CUESHEET=5]="CUESHEET",e[e.PICTURE=6]="PICTURE"}(m||(m={}));class p extends o.AbstractID3Parser{constructor(){super(...arguments),this.padding=0}init(e,t,a){return super.init(e,t,a),this.vorbisParser=new l.VorbisParser(e,a),this}async postId3v2Parse(){if("fLaC"!==(await this.tokenizer.readToken(c.FourCcToken)).toString())throw new Error("Invalid FLAC preamble");let e;do{e=await this.tokenizer.readToken(f.BlockHeader),await this.parseDataBlock(e)}while(!e.lastBlock);if(this.tokenizer.fileInfo.size&&this.metadata.format.duration){const e=this.tokenizer.fileInfo.size-this.tokenizer.position;this.metadata.setFormat("bitrate",8*e/this.metadata.format.duration)}}parseDataBlock(e){switch(d(`blockHeader type=${e.type}, length=${e.length}`),e.type){case m.STREAMINFO:return this.parseBlockStreamInfo(e.length);case m.PADDING:this.padding+=e.length;break;case m.APPLICATION:case m.SEEKTABLE:break;case m.VORBIS_COMMENT:return this.parseComment(e.length);case m.CUESHEET:break;case m.PICTURE:return this.parsePicture(e.length).then();default:this.metadata.addWarning("Unknown block type: "+e.type)}return this.tokenizer.ignore(e.length).then()}async parseBlockStreamInfo(e){if(e!==f.BlockStreamInfo.len)throw new Error("Unexpected block-stream-info length");const t=await this.tokenizer.readToken(f.BlockStreamInfo);this.metadata.setFormat("container","FLAC"),this.metadata.setFormat("codec","FLAC"),this.metadata.setFormat("lossless",!0),this.metadata.setFormat("numberOfChannels",t.channels),this.metadata.setFormat("bitsPerSample",t.bitsPerSample),this.metadata.setFormat("sampleRate",t.sampleRate),t.totalSamples>0&&this.metadata.setFormat("duration",t.totalSamples/t.sampleRate)}async parseComment(e){const t=await this.tokenizer.readToken(new r.Uint8ArrayType(e)),a=new u.VorbisDecoder(t,0);a.readStringUtf8();const i=a.readInt32();for(let e=0;e({lastBlock:n.getBit(e,t,7),type:n.getBitAllignedNumber(e,t,1,7),length:r.UINT24_BE.get(e,t+1)})},f.BlockStreamInfo={len:34,get:(e,t)=>({minimumBlockSize:r.UINT16_BE.get(e,t),maximumBlockSize:r.UINT16_BE.get(e,t+2)/1e3,minimumFrameSize:r.UINT24_BE.get(e,t+4),maximumFrameSize:r.UINT24_BE.get(e,t+7),sampleRate:r.UINT24_BE.get(e,t+10)>>4,channels:n.getBitAllignedNumber(e,t+12,4,3)+1,bitsPerSample:n.getBitAllignedNumber(e,t+12,7,5)+1,totalSamples:n.getBitAllignedNumber(e,t+13,4,36),fileMD5:new r.Uint8ArrayType(16).get(e,t+18)})}},2282:(e,t,a)=>{"use strict";var r=a(8764).Buffer;Object.defineProperty(t,"__esModule",{value:!0}),t.hasID3v1Header=t.ID3v1Parser=t.Genres=void 0;const i=a(1227),n=a(3416),s=a(3769),o=a(7805),c=a(6742),l=(0,i.default)("music-metadata:parser:ID3v1");t.Genres=["Blues","Classic Rock","Country","Dance","Disco","Funk","Grunge","Hip-Hop","Jazz","Metal","New Age","Oldies","Other","Pop","R&B","Rap","Reggae","Rock","Techno","Industrial","Alternative","Ska","Death Metal","Pranks","Soundtrack","Euro-Techno","Ambient","Trip-Hop","Vocal","Jazz+Funk","Fusion","Trance","Classical","Instrumental","Acid","House","Game","Sound Clip","Gospel","Noise","Alt. Rock","Bass","Soul","Punk","Space","Meditative","Instrumental Pop","Instrumental Rock","Ethnic","Gothic","Darkwave","Techno-Industrial","Electronic","Pop-Folk","Eurodance","Dream","Southern Rock","Comedy","Cult","Gangsta Rap","Top 40","Christian Rap","Pop/Funk","Jungle","Native American","Cabaret","New Wave","Psychedelic","Rave","Showtunes","Trailer","Lo-Fi","Tribal","Acid Punk","Acid Jazz","Polka","Retro","Musical","Rock & Roll","Hard Rock","Folk","Folk/Rock","National Folk","Swing","Fast-Fusion","Bebob","Latin","Revival","Celtic","Bluegrass","Avantgarde","Gothic Rock","Progressive Rock","Psychedelic Rock","Symphonic Rock","Slow Rock","Big Band","Chorus","Easy Listening","Acoustic","Humour","Speech","Chanson","Opera","Chamber Music","Sonata","Symphony","Booty Bass","Primus","Porn Groove","Satire","Slow Jam","Club","Tango","Samba","Folklore","Ballad","Power Ballad","Rhythmic Soul","Freestyle","Duet","Punk Rock","Drum Solo","A Cappella","Euro-House","Dance Hall","Goa","Drum & Bass","Club-House","Hardcore","Terror","Indie","BritPop","Negerpunk","Polsk Punk","Beat","Christian Gangsta Rap","Heavy Metal","Black Metal","Crossover","Contemporary Christian","Christian Rock","Merengue","Salsa","Thrash Metal","Anime","JPop","Synthpop","Abstract","Art Rock","Baroque","Bhangra","Big Beat","Breakbeat","Chillout","Downtempo","Dub","EBM","Eclectic","Electro","Electroclash","Emo","Experimental","Garage","Global","IDM","Illbient","Industro-Goth","Jam Band","Krautrock","Leftfield","Lounge","Math Rock","New Romantic","Nu-Breakz","Post-Punk","Post-Rock","Psytrance","Shoegaze","Space Rock","Trop Rock","World Music","Neoclassical","Audiobook","Audio Theatre","Neue Deutsche Welle","Podcast","Indie Rock","G-Funk","Dubstep","Garage Rock","Psybient"];const u={len:128,get:(e,t)=>{const a=new d(3).get(e,t);return"TAG"===a?{header:a,title:new d(30).get(e,t+3),artist:new d(30).get(e,t+33),album:new d(30).get(e,t+63),year:new d(4).get(e,t+93),comment:new d(28).get(e,t+97),zeroByte:n.UINT8.get(e,t+127),track:n.UINT8.get(e,t+126),genre:n.UINT8.get(e,t+127)}:null}};class d extends n.StringType{constructor(e){super(e,"binary")}get(e,t){let a=super.get(e,t);return a=s.trimRightNull(a),a=a.trim(),a.length>0?a:void 0}}class m extends o.BasicParser{static getGenre(e){if(ee)return void l("Already consumed the last 128 bytes");const t=await this.tokenizer.readToken(u,e);if(t){l("ID3v1 header found at: pos=%s",this.tokenizer.fileInfo.size-u.len);for(const e of["title","artist","album","comment","track","year"])t[e]&&""!==t[e]&&this.addTag(e,t[e]);const e=m.getGenre(t.genre);e&&this.addTag("genre",e)}else l("ID3v1 header not found at: pos=%s",this.tokenizer.fileInfo.size-u.len)}addTag(e,t){this.metadata.addTag("ID3v1",e,t)}}t.ID3v1Parser=m,t.hasID3v1Header=async function(e){if(e.fileSize>=128){const t=r.alloc(3);return await e.randomRead(t,0,t.length,e.fileSize-128),"TAG"===t.toString("binary")}return!1}},2939:(e,t,a)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.ID3v1TagMapper=void 0;const r=a(9918),i={title:"title",artist:"artist",album:"album",year:"year",comment:"comment",track:"track",genre:"genre"};class n extends r.CommonTagMapper{constructor(){super(["ID3v1"],i)}}t.ID3v1TagMapper=n},5159:(e,t,a)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.AbstractID3Parser=void 0;const r=a(5849),i=a(1227),n=a(8281),s=a(8928),o=a(2282),c=a(7805),l=(0,i.default)("music-metadata:parser:ID3");class u extends c.BasicParser{constructor(){super(...arguments),this.id3parser=new s.ID3v2Parser}static async startsWithID3v2Header(e){return"ID3"===(await e.peekToken(n.ID3v2Header)).fileIdentifier}async parse(){try{await this.parseID3v2()}catch(e){if(!(e instanceof r.EndOfStreamError))throw e;l("End-of-stream")}}finalize(){}async parseID3v2(){if(await this.tryReadId3v2Headers(),l("End of ID3v2 header, go to MPEG-parser: pos=%s",this.tokenizer.position),await this.postId3v2Parse(),this.options.skipPostHeaders&&this.metadata.hasAny())this.finalize();else{const e=new o.ID3v1Parser;await e.init(this.metadata,this.tokenizer,this.options).parse(),this.finalize()}}async tryReadId3v2Headers(){if("ID3"===(await this.tokenizer.peekToken(n.ID3v2Header)).fileIdentifier)return l("Found ID3v2 header, pos=%s",this.tokenizer.position),await this.id3parser.parse(this.metadata,this.tokenizer,this.options),this.tryReadId3v2Headers()}}t.AbstractID3Parser=u},907:(e,t,a)=>{"use strict";var r=a(8764).Buffer;Object.defineProperty(t,"__esModule",{value:!0}),t.FrameParser=t.parseGenre=void 0;const i=a(1227),n=a(3416),s=a(3769),o=a(8281),c=a(2282),l=(0,i.default)("music-metadata:id3v2:frame-parser"),u="latin1";function d(e){const t=[];let a,r="";for(const i of e)if("string"==typeof a)if("("===i&&""===a)r+="(",a=void 0;else if(")"===i){""!==r&&(t.push(r),r="");const e=m(a);e&&t.push(e),a=void 0}else a+=i;else"("===i?a="":r+=i;return r&&(0===t.length&&r.match(/^\d*$/)&&(r=c.Genres[r]),t.push(r)),t}function m(e){return"RX"===e?"Remix":"CR"===e?"Cover":e.match(/^\d*$/)?c.Genres[e]:void 0}t.parseGenre=d;class p{constructor(e,t){this.major=e,this.warningCollector=t}readData(e,t,a){if(0===e.length)return void this.warningCollector.addWarning(`id3v2.${this.major} header has empty tag type=${t}`);const{encoding:i,bom:c}=o.TextEncodingToken.get(e,0),m=e.length;let f=0,h=[];const g=p.getNullTerminatorLength(i);let T;const b={};switch(l(`Parsing tag type=${t}, encoding=${i}, bom=${c}`),"TXXX"!==t&&"T"===t[0]?"T*":t){case"T*":case"IPLS":case"MVIN":case"MVNM":case"PCS":case"PCST":let c;try{c=s.decodeString(e.slice(1),i).replace(/\x00+$/,"")}catch(e){this.warningCollector.addWarning(`id3v2.${this.major} type=${t} header has invalid string value: ${e.message}`)}switch(t){case"TMCL":case"TIPL":case"IPLS":h=this.splitValue(t,c),h=p.functionList(h);break;case"TRK":case"TRCK":case"TPOS":h=c;break;case"TCOM":case"TEXT":case"TOLY":case"TOPE":case"TPE1":case"TSRC":h=this.splitValue(t,c);break;case"TCO":case"TCON":h=this.splitValue(t,c).map((e=>d(e))).reduce(((e,t)=>e.concat(t)),[]);break;case"PCS":case"PCST":h=this.major>=4?this.splitValue(t,c):[c],h=Array.isArray(h)&&""===h[0]?1:0;break;default:h=this.major>=4?this.splitValue(t,c):[c]}break;case"TXXX":h=p.readIdentifierAndData(e,f+1,m,i),h={description:h.id,text:this.splitValue(t,s.decodeString(h.data,i).replace(/\x00+$/,""))};break;case"PIC":case"APIC":if(a){const t={};switch(f+=1,this.major){case 2:t.format=s.decodeString(e.slice(f,f+3),"latin1"),f+=3;break;case 3:case 4:T=s.findZero(e,f,m,u),t.format=s.decodeString(e.slice(f,T),u),f=T+1;break;default:throw new Error("Warning: unexpected major versionIndex: "+this.major)}t.format=p.fixPictureMimeType(t.format),t.type=o.AttachedPictureType[e[f]],f+=1,T=s.findZero(e,f,m,i),t.description=s.decodeString(e.slice(f,T),i),f=T+g,t.data=r.from(e.slice(f,m)),h=t}break;case"CNT":case"PCNT":h=n.UINT32_BE.get(e,0);break;case"SYLT":for(f+=7,h=[];f=5?n.UINT32_BE.get(e,f+1):void 0};break;case"GEOB":{T=s.findZero(e,f+1,m,i);const t=s.decodeString(e.slice(f+1,T),u);f=T+1,T=s.findZero(e,f,m-f,i);const a=s.decodeString(e.slice(f,T),u);f=T+1,T=s.findZero(e,f,m-f,i),h={type:t,filename:a,description:s.decodeString(e.slice(f,T),u),data:e.slice(f+1,m)};break}case"WCOM":case"WCOP":case"WOAF":case"WOAR":case"WOAS":case"WORS":case"WPAY":case"WPUB":h=s.decodeString(e.slice(f,T),u);break;case"WXXX":{T=s.findZero(e,f+1,m,i);const t=s.decodeString(e.slice(f+1,T),i);f=T+("utf16le"===i?2:1),h={description:t,url:s.decodeString(e.slice(f,m),u)};break}case"WFD":case"WFED":h=s.decodeString(e.slice(f+1,s.findZero(e,f+1,m,i)),i);break;case"MCDI":h=e.slice(0,m);break;default:l("Warning: unsupported id3v2-tag-type: "+t)}return h}static fixPictureMimeType(e){switch(e=e.toLocaleLowerCase()){case"jpg":return"image/jpeg";case"png":return"image/png"}return e}static functionList(e){const t={};for(let a=0;a+11?this.warningCollector.addWarning(`ID3v2.${this.major} ${e} uses non standard null-separator.`):a=t.split(/\//g)):a=t.split(/\x00/g),p.trimArray(a)}static trimArray(e){return e.map((e=>e.replace(/\x00+$/,"").trim()))}static readIdentifierAndData(e,t,a,r){const i=s.findZero(e,t,a,r),n=s.decodeString(e.slice(t,i),r);return t=i+p.getNullTerminatorLength(r),{id:n,data:e.slice(t,a)}}static getNullTerminatorLength(e){return"utf16le"===e?2:1}}t.FrameParser=p},7183:(e,t,a)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.ID3v22TagMapper=t.id3v22TagMap=void 0;const r=a(4132);t.id3v22TagMap={TT2:"title",TP1:"artist",TP2:"albumartist",TAL:"album",TYE:"year",COM:"comment",TRK:"track",TPA:"disk",TCO:"genre",PIC:"picture",TCM:"composer",TOR:"originaldate",TOT:"originalalbum",TXT:"lyricist",TP3:"conductor",TPB:"label",TT1:"grouping",TT3:"subtitle",TLA:"language",TCR:"copyright",WCP:"license",TEN:"encodedby",TSS:"encodersettings",WAR:"website","COM:iTunPGAP":"gapless",PCS:"podcast",TCP:"compilation",TDR:"date",TS2:"albumartistsort",TSA:"albumsort",TSC:"composersort",TSP:"artistsort",TST:"titlesort",WFD:"podcasturl",TBP:"bpm"};class i extends r.CaseInsensitiveTagMap{constructor(){super(["ID3v2.2"],t.id3v22TagMap)}}t.ID3v22TagMapper=i},4005:(e,t,a)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.ID3v24TagMapper=void 0;const r=a(9918),i=a(4132),n=a(3769),s={TIT2:"title",TPE1:"artist","TXXX:Artists":"artists",TPE2:"albumartist",TALB:"album",TDRV:"date",TORY:"originalyear",TPOS:"disk",TCON:"genre",APIC:"picture",TCOM:"composer","USLT:description":"lyrics",TSOA:"albumsort",TSOT:"titlesort",TOAL:"originalalbum",TSOP:"artistsort",TSO2:"albumartistsort",TSOC:"composersort",TEXT:"lyricist","TXXX:Writer":"writer",TPE3:"conductor",TPE4:"remixer","IPLS:arranger":"arranger","IPLS:engineer":"engineer","IPLS:producer":"producer","IPLS:DJ-mix":"djmixer","IPLS:mix":"mixer",TPUB:"label",TIT1:"grouping",TIT3:"subtitle",TRCK:"track",TCMP:"compilation",POPM:"rating",TBPM:"bpm",TMED:"media","TXXX:CATALOGNUMBER":"catalognumber","TXXX:MusicBrainz Album Status":"releasestatus","TXXX:MusicBrainz Album Type":"releasetype","TXXX:MusicBrainz Album Release Country":"releasecountry","TXXX:RELEASECOUNTRY":"releasecountry","TXXX:SCRIPT":"script",TLAN:"language",TCOP:"copyright",WCOP:"license",TENC:"encodedby",TSSE:"encodersettings","TXXX:BARCODE":"barcode","TXXX:ISRC":"isrc",TSRC:"isrc","TXXX:ASIN":"asin","TXXX:originalyear":"originalyear","UFID:http://musicbrainz.org":"musicbrainz_recordingid","TXXX:MusicBrainz Release Track Id":"musicbrainz_trackid","TXXX:MusicBrainz Album Id":"musicbrainz_albumid","TXXX:MusicBrainz Artist Id":"musicbrainz_artistid","TXXX:MusicBrainz Album Artist Id":"musicbrainz_albumartistid","TXXX:MusicBrainz Release Group Id":"musicbrainz_releasegroupid","TXXX:MusicBrainz Work Id":"musicbrainz_workid","TXXX:MusicBrainz TRM Id":"musicbrainz_trmid","TXXX:MusicBrainz Disc Id":"musicbrainz_discid","TXXX:ACOUSTID_ID":"acoustid_id","TXXX:Acoustid Id":"acoustid_id","TXXX:Acoustid Fingerprint":"acoustid_fingerprint","TXXX:MusicIP PUID":"musicip_puid","TXXX:MusicMagic Fingerprint":"musicip_fingerprint",WOAR:"website",TDRC:"date",TYER:"year",TDOR:"originaldate","TIPL:arranger":"arranger","TIPL:engineer":"engineer","TIPL:producer":"producer","TIPL:DJ-mix":"djmixer","TIPL:mix":"mixer",TMOO:"mood",SYLT:"lyrics",TSST:"discsubtitle",TKEY:"key",COMM:"comment",TOPE:"originalartist","PRIV:AverageLevel":"averageLevel","PRIV:PeakLevel":"peakLevel","TXXX:DISCOGS_ARTIST_ID":"discogs_artist_id","TXXX:DISCOGS_ARTISTS":"artists","TXXX:DISCOGS_ARTIST_NAME":"artists","TXXX:DISCOGS_ALBUM_ARTISTS":"albumartist","TXXX:DISCOGS_CATALOG":"catalognumber","TXXX:DISCOGS_COUNTRY":"releasecountry","TXXX:DISCOGS_DATE":"originaldate","TXXX:DISCOGS_LABEL":"label","TXXX:DISCOGS_LABEL_ID":"discogs_label_id","TXXX:DISCOGS_MASTER_RELEASE_ID":"discogs_master_release_id","TXXX:DISCOGS_RATING":"discogs_rating","TXXX:DISCOGS_RELEASED":"date","TXXX:DISCOGS_RELEASE_ID":"discogs_release_id","TXXX:DISCOGS_VOTES":"discogs_votes","TXXX:CATALOGID":"catalognumber","TXXX:STYLE":"genre","TXXX:REPLAYGAIN_TRACK_PEAK":"replaygain_track_peak","TXXX:REPLAYGAIN_TRACK_GAIN":"replaygain_track_gain","TXXX:REPLAYGAIN_ALBUM_PEAK":"replaygain_album_peak","TXXX:REPLAYGAIN_ALBUM_GAIN":"replaygain_album_gain","TXXX:MP3GAIN_MINMAX":"replaygain_track_minmax","TXXX:MP3GAIN_ALBUM_MINMAX":"replaygain_album_minmax","TXXX:MP3GAIN_UNDO":"replaygain_undo",MVNM:"movement",MVIN:"movementIndex",PCST:"podcast",TCAT:"category",TDES:"description",TDRL:"date",TGID:"podcastId",TKWD:"keywords",WFED:"podcasturl"};class o extends i.CaseInsensitiveTagMap{static toRating(e){return{source:e.email,rating:e.rating>0?(e.rating-1)/254*r.CommonTagMapper.maxRatingScore:void 0}}constructor(){super(["ID3v2.3","ID3v2.4"],s)}postMap(e,t){switch(e.id){case"UFID":"http://musicbrainz.org"===e.value.owner_identifier&&(e.id+=":"+e.value.owner_identifier,e.value=n.decodeString(e.value.identifier,"latin1"));break;case"PRIV":switch(e.value.owner_identifier){case"AverageLevel":case"PeakValue":e.id+=":"+e.value.owner_identifier,e.value=4===e.value.data.length?e.value.data.readUInt32LE(0):null,null===e.value&&t.addWarning("Failed to parse PRIV:PeakValue");break;default:t.addWarning(`Unknown PRIV owner-identifier: ${e.value.owner_identifier}`)}break;case"COMM":e.value=e.value?e.value.text:null;break;case"POPM":e.value=o.toRating(e.value)}}}t.ID3v24TagMapper=o},8928:(e,t,a)=>{"use strict";var r=a(8764).Buffer;Object.defineProperty(t,"__esModule",{value:!0}),t.ID3v2Parser=void 0;const i=a(3416),n=a(3769),s=a(907),o=a(8281);class c{static removeUnsyncBytes(e){let t=0,a=0;for(;t0?this.parseExtendedHeaderData(t,e.size):this.parseId3Data(this.id3Header.size-e.size)}async parseExtendedHeaderData(e,t){return await this.tokenizer.ignore(e),this.parseId3Data(this.id3Header.size-t)}async parseId3Data(e){const t=await this.tokenizer.readToken(new i.Uint8ArrayType(e));for(const e of this.parseMetadata(t))if("TXXX"===e.id){if(e.value)for(const t of e.value.text)this.addTag(c.makeDescriptionTagName(e.id,e.value.description),t)}else if("COM"===e.id)for(const t of e.value)this.addTag(c.makeDescriptionTagName(e.id,t.description),t.text);else if("COMM"===e.id)for(const t of e.value)this.addTag(c.makeDescriptionTagName(e.id,t.description),t);else if(Array.isArray(e.value))for(const t of e.value)this.addTag(e.id,t);else this.addTag(e.id,e.value)}addTag(e,t){this.metadata.addTag(this.headerType,e,t)}parseMetadata(e){let t=0;const a=[];for(;t!==e.length;){const r=c.getFrameHeaderLength(this.id3Header.version.major);if(t+r>e.length){this.metadata.addWarning("Illegal ID3v2 tag length");break}const i=e.slice(t,t+=r),n=this.readFrameHeader(i,this.id3Header.version.major),s=e.slice(t,t+=n.length),o=c.readFrameData(s,n,this.id3Header.version.major,!this.options.skipCovers,this.metadata);o&&a.push({id:n.id,value:o})}return a}readFrameHeader(e,t){let a;switch(t){case 2:a={id:r.from(e.slice(0,3)).toString("ascii"),length:i.UINT24_BE.get(e,3)},a.id.match(/[A-Z0-9]{3}/g)||this.metadata.addWarning(`Invalid ID3v2.${this.id3Header.version.major} frame-header-ID: ${a.id}`);break;case 3:case 4:a={id:r.from(e.slice(0,4)).toString("ascii"),length:(4===t?o.UINT32SYNCSAFE:i.UINT32_BE).get(e,4),flags:c.readFrameFlags(e.slice(8,10))},a.id.match(/[A-Z0-9]{4}/g)||this.metadata.addWarning(`Invalid ID3v2.${this.id3Header.version.major} frame-header-ID: ${a.id}`);break;default:throw new Error("Unexpected majorVer: "+t)}return a}}t.ID3v2Parser=c},8281:(e,t,a)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.TextEncodingToken=t.ExtendedHeader=t.ID3v2Header=t.UINT32SYNCSAFE=t.AttachedPictureType=void 0;const r=a(3416),i=a(3769);var n;(n=t.AttachedPictureType||(t.AttachedPictureType={}))[n.Other=0]="Other",n[n["32x32 pixels 'file icon' (PNG only)"]=1]="32x32 pixels 'file icon' (PNG only)",n[n["Other file icon"]=2]="Other file icon",n[n["Cover (front)"]=3]="Cover (front)",n[n["Cover (back)"]=4]="Cover (back)",n[n["Leaflet page"]=5]="Leaflet page",n[n["Media (e.g. label side of CD)"]=6]="Media (e.g. label side of CD)",n[n["Lead artist/lead performer/soloist"]=7]="Lead artist/lead performer/soloist",n[n["Artist/performer"]=8]="Artist/performer",n[n.Conductor=9]="Conductor",n[n["Band/Orchestra"]=10]="Band/Orchestra",n[n.Composer=11]="Composer",n[n["Lyricist/text writer"]=12]="Lyricist/text writer",n[n["Recording Location"]=13]="Recording Location",n[n["During recording"]=14]="During recording",n[n["During performance"]=15]="During performance",n[n["Movie/video screen capture"]=16]="Movie/video screen capture",n[n["A bright coloured fish"]=17]="A bright coloured fish",n[n.Illustration=18]="Illustration",n[n["Band/artist logotype"]=19]="Band/artist logotype",n[n["Publisher/Studio logotype"]=20]="Publisher/Studio logotype",t.UINT32SYNCSAFE={get:(e,t)=>127&e[t+3]|e[t+2]<<7|e[t+1]<<14|e[t]<<21,len:4},t.ID3v2Header={len:10,get:(e,a)=>({fileIdentifier:new r.StringType(3,"ascii").get(e,a),version:{major:r.INT8.get(e,a+3),revision:r.INT8.get(e,a+4)},flags:{unsynchronisation:i.getBit(e,a+5,7),isExtendedHeader:i.getBit(e,a+5,6),expIndicator:i.getBit(e,a+5,5),footer:i.getBit(e,a+5,4)},size:t.UINT32SYNCSAFE.get(e,a+6)})},t.ExtendedHeader={len:10,get:(e,t)=>({size:r.UINT32_BE.get(e,t),extendedFlags:r.UINT16_BE.get(e,t+4),sizeOfPadding:r.UINT32_BE.get(e,t+6),crcDataPresent:i.getBit(e,t+4,31)})},t.TextEncodingToken={len:1,get:(e,t)=>{switch(e.readUInt8(t)){case 0:return{encoding:"latin1"};case 1:return{encoding:"utf16le",bom:!0};case 2:return{encoding:"utf16le",bom:!1};default:return{encoding:"utf8",bom:!1}}}}},4633:(e,t,a)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.Header=void 0;const r=a(3416),i=a(8049);t.Header={len:8,get:(e,t)=>({chunkID:i.FourCcToken.get(e,t),chunkSize:Number(BigInt(r.UINT32_BE.get(e,t+4)))})}},9941:(e,t,a)=>{"use strict";var r=a(8764).Buffer;Object.defineProperty(t,"__esModule",{value:!0}),t.getLyricsHeaderLength=t.endTag2=void 0,t.endTag2="LYRICS200",t.getLyricsHeaderLength=async function(e){if(e.fileSize>=143){const a=r.alloc(15);await e.randomRead(a,0,a.length,e.fileSize-143);const i=a.toString("binary");if(i.substr(6)===t.endTag2)return parseInt(i.substr(0,6),10)+15}return 0}},3121:(e,t,a)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.elements=void 0;const r=a(8591);t.elements={440786851:{name:"ebml",container:{17030:{name:"ebmlVersion",value:r.DataType.uint},17143:{name:"ebmlReadVersion",value:r.DataType.uint},17138:{name:"ebmlMaxIDWidth",value:r.DataType.uint},17139:{name:"ebmlMaxSizeWidth",value:r.DataType.uint},17026:{name:"docType",value:r.DataType.string},17031:{name:"docTypeVersion",value:r.DataType.uint},17029:{name:"docTypeReadVersion",value:r.DataType.uint}}},408125543:{name:"segment",container:{290298740:{name:"seekHead",container:{19899:{name:"seek",container:{21419:{name:"seekId",value:r.DataType.binary},21420:{name:"seekPosition",value:r.DataType.uint}}}}},357149030:{name:"info",container:{29604:{name:"uid",value:r.DataType.uid},29572:{name:"filename",value:r.DataType.string},3979555:{name:"prevUID",value:r.DataType.uid},3965867:{name:"prevFilename",value:r.DataType.string},4110627:{name:"nextUID",value:r.DataType.uid},4096955:{name:"nextFilename",value:r.DataType.string},2807729:{name:"timecodeScale",value:r.DataType.uint},17545:{name:"duration",value:r.DataType.float},17505:{name:"dateUTC",value:r.DataType.uint},31657:{name:"title",value:r.DataType.string},19840:{name:"muxingApp",value:r.DataType.string},22337:{name:"writingApp",value:r.DataType.string}}},524531317:{name:"cluster",multiple:!0,container:{231:{name:"timecode",value:r.DataType.uid},163:{name:"unknown",value:r.DataType.binary},167:{name:"position",value:r.DataType.uid},171:{name:"prevSize",value:r.DataType.uid}}},374648427:{name:"tracks",container:{174:{name:"entries",multiple:!0,container:{215:{name:"trackNumber",value:r.DataType.uint},29637:{name:"uid",value:r.DataType.uid},131:{name:"trackType",value:r.DataType.uint},185:{name:"flagEnabled",value:r.DataType.bool},136:{name:"flagDefault",value:r.DataType.bool},21930:{name:"flagForced",value:r.DataType.bool},156:{name:"flagLacing",value:r.DataType.bool},28135:{name:"minCache",value:r.DataType.uint},28136:{name:"maxCache",value:r.DataType.uint},2352003:{name:"defaultDuration",value:r.DataType.uint},2306383:{name:"timecodeScale",value:r.DataType.float},21358:{name:"name",value:r.DataType.string},2274716:{name:"language",value:r.DataType.string},134:{name:"codecID",value:r.DataType.string},25506:{name:"codecPrivate",value:r.DataType.binary},2459272:{name:"codecName",value:r.DataType.string},3839639:{name:"codecSettings",value:r.DataType.string},3883072:{name:"codecInfoUrl",value:r.DataType.string},2536e3:{name:"codecDownloadUrl",value:r.DataType.string},170:{name:"codecDecodeAll",value:r.DataType.bool},28587:{name:"trackOverlay",value:r.DataType.uint},224:{name:"video",container:{154:{name:"flagInterlaced",value:r.DataType.bool},21432:{name:"stereoMode",value:r.DataType.uint},176:{name:"pixelWidth",value:r.DataType.uint},186:{name:"pixelHeight",value:r.DataType.uint},21680:{name:"displayWidth",value:r.DataType.uint},21690:{name:"displayHeight",value:r.DataType.uint},21683:{name:"aspectRatioType",value:r.DataType.uint},3061028:{name:"colourSpace",value:r.DataType.uint},3126563:{name:"gammaValue",value:r.DataType.float}}},225:{name:"audio",container:{181:{name:"samplingFrequency",value:r.DataType.float},30901:{name:"outputSamplingFrequency",value:r.DataType.float},159:{name:"channels",value:r.DataType.uint},148:{name:"channels",value:r.DataType.uint},32123:{name:"channelPositions",value:r.DataType.binary},25188:{name:"bitDepth",value:r.DataType.uint}}},28032:{name:"contentEncodings",container:{25152:{name:"contentEncoding",container:{20529:{name:"order",value:r.DataType.uint},20530:{name:"scope",value:r.DataType.bool},20531:{name:"type",value:r.DataType.uint},20532:{name:"contentEncoding",container:{16980:{name:"contentCompAlgo",value:r.DataType.uint},16981:{name:"contentCompSettings",value:r.DataType.binary}}},20533:{name:"contentEncoding",container:{18401:{name:"contentEncAlgo",value:r.DataType.uint},18402:{name:"contentEncKeyID",value:r.DataType.binary},18403:{name:"contentSignature ",value:r.DataType.binary},18404:{name:"ContentSigKeyID ",value:r.DataType.binary},18405:{name:"contentSigAlgo ",value:r.DataType.uint},18406:{name:"contentSigHashAlgo ",value:r.DataType.uint}}},25188:{name:"bitDepth",value:r.DataType.uint}}}}}}}}},475249515:{name:"cues",container:{187:{name:"cuePoint",container:{179:{name:"cueTime",value:r.DataType.uid},183:{name:"positions",container:{247:{name:"track",value:r.DataType.uint},241:{name:"clusterPosition",value:r.DataType.uint},21368:{name:"blockNumber",value:r.DataType.uint},234:{name:"codecState",value:r.DataType.uint},219:{name:"reference",container:{150:{name:"time",value:r.DataType.uint},151:{name:"cluster",value:r.DataType.uint},21343:{name:"number",value:r.DataType.uint},235:{name:"codecState",value:r.DataType.uint}}},240:{name:"relativePosition",value:r.DataType.uint}}}}}}},423732329:{name:"attachments",container:{24999:{name:"attachedFiles",multiple:!0,container:{18046:{name:"description",value:r.DataType.string},18030:{name:"name",value:r.DataType.string},18016:{name:"mimeType",value:r.DataType.string},18012:{name:"data",value:r.DataType.binary},18094:{name:"uid",value:r.DataType.uid}}}}},272869232:{name:"chapters",container:{17849:{name:"editionEntry",container:{182:{name:"chapterAtom",container:{29636:{name:"uid",value:r.DataType.uid},145:{name:"timeStart",value:r.DataType.uint},146:{name:"timeEnd",value:r.DataType.uid},152:{name:"hidden",value:r.DataType.bool},17816:{name:"enabled",value:r.DataType.uid},143:{name:"track",container:{137:{name:"trackNumber",value:r.DataType.uid},128:{name:"display",container:{133:{name:"string",value:r.DataType.string},17276:{name:"language ",value:r.DataType.string},17278:{name:"country ",value:r.DataType.string}}}}}}}}}}},307544935:{name:"tags",container:{29555:{name:"tag",multiple:!0,container:{25536:{name:"target",container:{25541:{name:"tagTrackUID",value:r.DataType.uid},25540:{name:"tagChapterUID",value:r.DataType.uint},25542:{name:"tagAttachmentUID",value:r.DataType.uid},25546:{name:"targetType",value:r.DataType.string},26826:{name:"targetTypeValue",value:r.DataType.uint},25545:{name:"tagEditionUID",value:r.DataType.uid}}},26568:{name:"simpleTags",multiple:!0,container:{17827:{name:"name",value:r.DataType.string},17543:{name:"string",value:r.DataType.string},17541:{name:"binary",value:r.DataType.binary},17530:{name:"language",value:r.DataType.string},17531:{name:"languageIETF",value:r.DataType.string},17540:{name:"default",value:r.DataType.bool}}}}}}}}}}},78:(e,t,a)=>{"use strict";var r=a(8764).Buffer;Object.defineProperty(t,"__esModule",{value:!0}),t.MatroskaParser=void 0;const i=a(3416),n=a(1227),s=a(7805),o=a(8591),c=a(3121),l=(0,n.default)("music-metadata:parser:matroska");class u extends s.BasicParser{constructor(){super(),this.padding=0,this.parserMap=new Map,this.ebmlMaxIDLength=4,this.ebmlMaxSizeLength=8,this.parserMap.set(o.DataType.uint,(e=>this.readUint(e))),this.parserMap.set(o.DataType.string,(e=>this.readString(e))),this.parserMap.set(o.DataType.binary,(e=>this.readBuffer(e))),this.parserMap.set(o.DataType.uid,(async e=>1===await this.readUint(e))),this.parserMap.set(o.DataType.bool,(e=>this.readFlag(e))),this.parserMap.set(o.DataType.float,(e=>this.readFloat(e)))}init(e,t,a){return super.init(e,t,a),this}async parse(){const e=await this.parseContainer(c.elements,this.tokenizer.fileInfo.size,[]);if(this.metadata.setFormat("container",`EBML/${e.ebml.docType}`),e.segment){const t=e.segment.info;if(t){const e=t.timecodeScale?t.timecodeScale:1e6,a=t.duration*e/1e9;this.addTag("segment:title",t.title),this.metadata.setFormat("duration",a)}const a=e.segment.tracks;if(a&&a.entries){a.entries.forEach((e=>{const t={codecName:e.codecID.replace("A_","").replace("V_",""),codecSettings:e.codecSettings,flagDefault:e.flagDefault,flagLacing:e.flagLacing,flagEnabled:e.flagEnabled,language:e.language,name:e.name,type:e.trackType,audio:e.audio,video:e.video};this.metadata.addStreamInfo(t)}));const t=a.entries.filter((e=>e.trackType===o.TrackType.audio.valueOf())).reduce(((e,t)=>e?!e.flagDefault&&t.flagDefault||t.trackNumber&&t.trackNumber{const t=e.target,a=(null==t?void 0:t.targetTypeValue)?o.TargetType[t.targetTypeValue]:(null==t?void 0:t.targetType)?t.targetType:"track";e.simpleTags.forEach((e=>{const t=e.string?e.string:e.binary;this.addTag(`${a}:${e.name}`,t)}))})),e.segment.attachments&&e.segment.attachments.attachedFiles.filter((e=>e.mimeType.startsWith("image/"))).map((e=>({data:e.data,format:e.mimeType,description:e.description,name:e.name}))).forEach((e=>{this.addTag("picture",e)}))}}}async parseContainer(e,t,a){const r={};for(;this.tokenizer.position=0?this.tokenizer.position+t.len:-1,a.concat([i.name]));i.multiple?(r[i.name]||(r[i.name]=[]),r[i.name].push(e)):r[i.name]=e}else r[i.name]=await this.parserMap.get(i.value)(t);else 236===t.id?(this.padding+=t.len,await this.tokenizer.ignore(t.len)):(l(`parseEbml: path=${a.join("/")}, unknown element: id=${t.id.toString(16)}`),this.padding+=t.len,await this.tokenizer.ignore(t.len))}return r}async readVintData(e){const t=await this.tokenizer.peekNumber(i.UINT8);let a=128,n=1;for(;0==(t&a);){if(n>e)throw new Error("VINT value exceeding maximum size");++n,a>>=1}const s=r.alloc(n);return await this.tokenizer.readBuffer(s),s}async readElement(){const e=await this.readVintData(this.ebmlMaxIDLength),t=await this.readVintData(this.ebmlMaxSizeLength);t[0]^=128>>t.length-1;const a=Math.min(6,t.length);return{id:e.readUIntBE(0,e.length),len:t.readUIntBE(t.length-a,a)}}isMaxValue(e){if(e.length===this.ebmlMaxSizeLength){for(let t=1;t{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.MatroskaTagMapper=void 0;const r=a(4132),i={"segment:title":"title","album:ARTIST":"albumartist","album:ARTISTSORT":"albumartistsort","album:TITLE":"album","album:DATE_RECORDED":"originaldate","album:PART_NUMBER":"disk","album:TOTAL_PARTS":"totaltracks","track:ARTIST":"artist","track:ARTISTSORT":"artistsort","track:TITLE":"title","track:PART_NUMBER":"track","track:MUSICBRAINZ_TRACKID":"musicbrainz_recordingid","track:MUSICBRAINZ_ALBUMID":"musicbrainz_albumid","track:MUSICBRAINZ_ARTISTID":"musicbrainz_artistid","track:PUBLISHER":"label","track:GENRE":"genre","track:ENCODER":"encodedby","track:ENCODER_OPTIONS":"encodersettings","edition:TOTAL_PARTS":"totaldiscs",picture:"picture"};class n extends r.CaseInsensitiveTagMap{constructor(){super(["matroska"],i)}}t.MatroskaTagMapper=n},8591:(e,t)=>{"use strict";var a,r,i;Object.defineProperty(t,"__esModule",{value:!0}),t.TrackType=t.TargetType=t.DataType=void 0,(i=t.DataType||(t.DataType={}))[i.string=0]="string",i[i.uint=1]="uint",i[i.uid=2]="uid",i[i.bool=3]="bool",i[i.binary=4]="binary",i[i.float=5]="float",(r=t.TargetType||(t.TargetType={}))[r.shot=10]="shot",r[r.scene=20]="scene",r[r.track=30]="track",r[r.part=40]="part",r[r.album=50]="album",r[r.edition=60]="edition",r[r.collection=70]="collection",(a=t.TrackType||(t.TrackType={}))[a.video=1]="video",a[a.audio=2]="audio",a[a.complex=3]="complex",a[a.logo=4]="logo",a[a.subtitle=17]="subtitle",a[a.button=18]="button",a[a.control=32]="control"},9134:(e,t,a)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.Atom=void 0;const r=a(1227),i=a(1060),n=(0,r.default)("music-metadata:parser:MP4:Atom");class s{constructor(e,t,a){this.header=e,this.extended=t,this.parent=a,this.children=[],this.atomPath=(this.parent?this.parent.atomPath+".":"")+this.header.name}static async readAtom(e,t,a,r){const o=e.position,c=await e.readToken(i.Header);c.length===BigInt(1)&&(c.length=await e.readToken(i.ExtendedSize));const l=new s(c,c.length===BigInt(1),a),u=l.getPayloadLength(r);return n(`parse atom name=${l.atomPath}, extended=${l.extended}, offset=${o}, len=${l.header.length}`),await l.readData(e,t,u),l}getHeaderLength(){return this.extended?16:8}getPayloadLength(e){return(this.header.length===BigInt(0)?e:Number(this.header.length))-this.getHeaderLength()}async readAtoms(e,t,a){for(;a>0;){const r=await s.readAtom(e,t,this,a);this.children.push(r),a-=r.header.length===BigInt(0)?a:Number(r.header.length)}}async readData(e,t,a){switch(this.header.name){case"moov":case"udta":case"trak":case"mdia":case"minf":case"stbl":case"":case"ilst":case"tref":return this.readAtoms(e,t,this.getPayloadLength(a));case"meta":return await e.ignore(4),this.readAtoms(e,t,this.getPayloadLength(a)-4);default:return t(this,a)}}}t.Atom=s},1060:(e,t,a)=>{"use strict";var r=a(8764).Buffer;Object.defineProperty(t,"__esModule",{value:!0}),t.ChapterText=t.StcoAtom=t.StszAtom=t.StscAtom=t.SampleToChunkToken=t.SttsAtom=t.TimeToSampleToken=t.SoundSampleDescriptionV0=t.SoundSampleDescriptionVersion=t.StsdAtom=t.TrackHeaderAtom=t.NameAtom=t.DataAtom=t.MvhdAtom=t.MdhdAtom=t.FixedLengthAtom=t.mhdr=t.tkhd=t.ftyp=t.ExtendedSize=t.Header=void 0;const i=a(3416),n=a(1227),s=a(8049),o=(0,n.default)("music-metadata:parser:MP4:atom");t.Header={len:8,get:(e,t)=>{const a=i.UINT32_BE.get(e,t);if(a<0)throw new Error("Invalid atom header length");return{length:BigInt(a),name:new i.StringType(4,"binary").get(e,t+4)}},put:(e,t,a)=>(i.UINT32_BE.put(e,t,Number(a.length)),s.FourCcToken.put(e,t+4,a.name))},t.ExtendedSize=i.UINT64_BE,t.ftyp={len:4,get:(e,t)=>({type:new i.StringType(4,"ascii").get(e,t)})},t.tkhd={len:4,get:(e,t)=>({type:new i.StringType(4,"ascii").get(e,t)})},t.mhdr={len:8,get:(e,t)=>({version:i.UINT8.get(e,t),flags:i.UINT24_BE.get(e,t+1),nextItemID:i.UINT32_BE.get(e,t+4)})};class c{constructor(e,t,a){if(this.len=e,et&&o(`Warning: atom ${a} expected to be ${t}, but was actually ${e} bytes long.`)}}t.FixedLengthAtom=c;const l=(e,t)=>{const a=i.UINT32_BE.get(e,t)-2082844800;return new Date(1e3*a)};t.MdhdAtom=class extends c{constructor(e){super(e,24,"mdhd"),this.len=e}get(e,t){return{version:i.UINT8.get(e,t+0),flags:i.UINT24_BE.get(e,t+1),creationTime:l(e,t+4),modificationTime:l(e,t+8),timeScale:i.UINT32_BE.get(e,t+12),duration:i.UINT32_BE.get(e,t+16),language:i.UINT16_BE.get(e,t+20),quality:i.UINT16_BE.get(e,t+22)}}},t.MvhdAtom=class extends c{constructor(e){super(e,100,"mvhd"),this.len=e}get(e,t){return{version:i.UINT8.get(e,t),flags:i.UINT24_BE.get(e,t+1),creationTime:l(e,t+4),modificationTime:l(e,t+8),timeScale:i.UINT32_BE.get(e,t+12),duration:i.UINT32_BE.get(e,t+16),preferredRate:i.UINT32_BE.get(e,t+20),preferredVolume:i.UINT16_BE.get(e,t+24),previewTime:i.UINT32_BE.get(e,t+72),previewDuration:i.UINT32_BE.get(e,t+76),posterTime:i.UINT32_BE.get(e,t+80),selectionTime:i.UINT32_BE.get(e,t+84),selectionDuration:i.UINT32_BE.get(e,t+88),currentTime:i.UINT32_BE.get(e,t+92),nextTrackID:i.UINT32_BE.get(e,t+96)}}},t.DataAtom=class{constructor(e){this.len=e}get(e,t){return{type:{set:i.UINT8.get(e,t+0),type:i.UINT24_BE.get(e,t+1)},locale:i.UINT24_BE.get(e,t+4),value:r.from(new i.Uint8ArrayType(this.len-8).get(e,t+8))}}},t.NameAtom=class{constructor(e){this.len=e}get(e,t){return{version:i.UINT8.get(e,t),flags:i.UINT24_BE.get(e,t+1),name:new i.StringType(this.len-4,"utf-8").get(e,t+4)}}},t.TrackHeaderAtom=class{constructor(e){this.len=e}get(e,t){return{version:i.UINT8.get(e,t),flags:i.UINT24_BE.get(e,t+1),creationTime:l(e,t+4),modificationTime:l(e,t+8),trackId:i.UINT32_BE.get(e,t+12),duration:i.UINT32_BE.get(e,t+20),layer:i.UINT16_BE.get(e,t+24),alternateGroup:i.UINT16_BE.get(e,t+26),volume:i.UINT16_BE.get(e,t+28)}}};class u{constructor(e){this.len=e}get(e,t){return{dataFormat:s.FourCcToken.get(e,t),dataReferenceIndex:i.UINT16_BE.get(e,t+10),description:new i.Uint8ArrayType(this.len-12).get(e,t+12)}}}t.StsdAtom=class{constructor(e){this.len=e}get(e,t){const a=((e,t)=>({version:i.UINT8.get(e,t),flags:i.UINT24_BE.get(e,t+1),numberOfEntries:i.UINT32_BE.get(e,t+4)}))(e,t);t+=8;const r=[];for(let n=0;n({version:i.INT16_BE.get(e,t),revision:i.INT16_BE.get(e,t+2),vendor:i.INT32_BE.get(e,t+4)})},t.SoundSampleDescriptionV0={len:12,get:(e,t)=>({numAudioChannels:i.INT16_BE.get(e,t+0),sampleSize:i.INT16_BE.get(e,t+2),compressionId:i.INT16_BE.get(e,t+4),packetSize:i.INT16_BE.get(e,t+6),sampleRate:i.UINT16_BE.get(e,t+8)+i.UINT16_BE.get(e,t+10)/1e4})};class d{constructor(e,t){this.len=e,this.token=t}get(e,t){const a=i.INT32_BE.get(e,t+4);return{version:i.INT8.get(e,t+0),flags:i.INT24_BE.get(e,t+1),numberOfEntries:a,entries:m(e,this.token,t+8,this.len-8,a)}}}function m(e,t,a,r,i){if(o(`remainingLen=${r}, numberOfEntries=${i} * token-len=${t.len}`),0===r)return[];if(r!==i*t.len)throw new Error("mismatch number-of-entries with remaining atom-length");const n=[];for(let r=0;r({count:i.INT32_BE.get(e,t+0),duration:i.INT32_BE.get(e,t+4)})},t.SttsAtom=class extends d{constructor(e){super(e,t.TimeToSampleToken),this.len=e}},t.SampleToChunkToken={len:12,get:(e,t)=>({firstChunk:i.INT32_BE.get(e,t),samplesPerChunk:i.INT32_BE.get(e,t+4),sampleDescriptionId:i.INT32_BE.get(e,t+8)})},t.StscAtom=class extends d{constructor(e){super(e,t.SampleToChunkToken),this.len=e}},t.StszAtom=class{constructor(e){this.len=e}get(e,t){const a=i.INT32_BE.get(e,t+8);return{version:i.INT8.get(e,t),flags:i.INT24_BE.get(e,t+1),sampleSize:i.INT32_BE.get(e,t+4),numberOfEntries:a,entries:m(e,i.INT32_BE,t+12,this.len-12,a)}}},t.StcoAtom=class extends d{constructor(e){super(e,i.INT32_BE),this.len=e}},t.ChapterText=class{constructor(e){this.len=e}get(e,t){const a=i.INT16_BE.get(e,t+0);return new i.StringType(a,"utf-8").get(e,t+2)}}},8841:(e,t,a)=>{"use strict";var r=a(8764).Buffer;Object.defineProperty(t,"__esModule",{value:!0}),t.MP4Parser=void 0;const i=a(1227),n=a(3416),s=a(7805),o=a(2282),c=a(6032),l=a(9134),u=a(1060),d=(0,i.default)("music-metadata:parser:MP4"),m={raw:{lossy:!1,format:"raw"},MAC3:{lossy:!0,format:"MACE 3:1"},MAC6:{lossy:!0,format:"MACE 6:1"},ima4:{lossy:!0,format:"IMA 4:1"},ulaw:{lossy:!0,format:"uLaw 2:1"},alaw:{lossy:!0,format:"uLaw 2:1"},Qclp:{lossy:!0,format:"QUALCOMM PureVoice"},".mp3":{lossy:!0,format:"MPEG-1 layer 3"},alac:{lossy:!1,format:"ALAC"},"ac-3":{lossy:!0,format:"AC-3"},mp4a:{lossy:!0,format:"MPEG-4/AAC"},mp4s:{lossy:!0,format:"MP4S"},c608:{lossy:!0,format:"CEA-608"},c708:{lossy:!0,format:"CEA-708"}};function p(e,t,a){return a.indexOf(e)===t}class f extends s.BasicParser{constructor(){super(...arguments),this.atomParsers={mvhd:async e=>{const t=await this.tokenizer.readToken(new u.MvhdAtom(e));this.metadata.setFormat("creationTime",t.creationTime),this.metadata.setFormat("modificationTime",t.modificationTime)},mdhd:async e=>{const t=await this.tokenizer.readToken(new u.MdhdAtom(e)),a=this.getTrackDescription();a.creationTime=t.creationTime,a.modificationTime=t.modificationTime,a.timeScale=t.timeScale,a.duration=t.duration},chap:async e=>{const t=this.getTrackDescription(),a=[];for(;e>=n.UINT32_BE.len;)a.push(await this.tokenizer.readNumber(n.UINT32_BE)),e-=n.UINT32_BE.len;t.chapterList=a},tkhd:async e=>{const t=await this.tokenizer.readToken(new u.TrackHeaderAtom(e));this.tracks.push(t)},mdat:async e=>{if(this.audioLengthInBytes=e,this.calculateBitRate(),this.options.includeChapters){const t=this.tracks.filter((e=>e.chapterList));if(1===t.length){const a=t[0].chapterList,r=this.tracks.filter((e=>-1!==a.indexOf(e.trackId)));if(1===r.length)return this.parseChapterTrack(r[0],t[0],e)}}await this.tokenizer.ignore(e)},ftyp:async e=>{const t=[];for(;e>0;){const a=await this.tokenizer.readToken(u.ftyp);e-=u.ftyp.len;const r=a.type.replace(/\W/g,"");r.length>0&&t.push(r)}d(`ftyp: ${t.join("/")}`);const a=t.filter(p).join("/");this.metadata.setFormat("container",a)},stsd:async e=>{const t=await this.tokenizer.readToken(new u.StsdAtom(e));this.getTrackDescription().soundSampleDescription=t.table.map((e=>this.parseSoundSampleDescription(e)))},stsc:async e=>{const t=await this.tokenizer.readToken(new u.StscAtom(e));this.getTrackDescription().sampleToChunkTable=t.entries},stts:async e=>{const t=await this.tokenizer.readToken(new u.SttsAtom(e));this.getTrackDescription().timeToSampleTable=t.entries},stsz:async e=>{const t=await this.tokenizer.readToken(new u.StszAtom(e)),a=this.getTrackDescription();a.sampleSize=t.sampleSize,a.sampleSizeTable=t.entries},stco:async e=>{const t=await this.tokenizer.readToken(new u.StcoAtom(e));this.getTrackDescription().chunkOffsetTable=t.entries},date:async e=>{const t=await this.tokenizer.readToken(new n.StringType(e,"utf-8"));this.addTag("date",t)}}}static read_BE_Integer(e,t){const a=(t?"INT":"UINT")+8*e.length+(e.length>1?"_BE":""),r=n[a];if(!r)throw new Error('Token for integer type not found: "'+a+'"');return Number(r.get(e,0))}async parse(){this.tracks=[];let e=this.tokenizer.fileInfo.size;for(;!this.tokenizer.fileInfo.size||e>0;){try{if("\0\0\0\0"===(await this.tokenizer.peekToken(u.Header)).name){const e=`Error at offset=${this.tokenizer.position}: box.id=0`;d(e),this.addWarning(e);break}}catch(e){const t=`Error at offset=${this.tokenizer.position}: ${e.message}`;d(t),this.addWarning(t);break}const t=await l.Atom.readAtom(this.tokenizer,((e,t)=>this.handleAtom(e,t)),null,e);e-=t.header.length===BigInt(0)?e:Number(t.header.length)}const t=[];this.tracks.forEach((e=>{const a=[];e.soundSampleDescription.forEach((e=>{const t={},r=m[e.dataFormat];if(r?(a.push(r.format),t.codecName=r.format):t.codecName=`<${e.dataFormat}>`,e.description){const{description:a}=e;a.sampleRate>0&&(t.type=c.TrackType.audio,t.audio={samplingFrequency:a.sampleRate,bitDepth:a.sampleSize,channels:a.numAudioChannels})}this.metadata.addStreamInfo(t)})),a.length>=1&&t.push(a.join("/"))})),t.length>0&&this.metadata.setFormat("codec",t.filter(p).join("+"));const a=this.tracks.filter((e=>e.soundSampleDescription.length>=1&&e.soundSampleDescription[0].description&&e.soundSampleDescription[0].description.numAudioChannels>0));if(a.length>=1){const e=a[0],t=e.duration/e.timeScale;this.metadata.setFormat("duration",t);const r=e.soundSampleDescription[0];r.description&&(this.metadata.setFormat("sampleRate",r.description.sampleRate),this.metadata.setFormat("bitsPerSample",r.description.sampleSize),this.metadata.setFormat("numberOfChannels",r.description.numAudioChannels));const i=m[r.dataFormat];i&&this.metadata.setFormat("lossless",!i.lossy),this.calculateBitRate()}}async handleAtom(e,t){if(e.parent)switch(e.parent.header.name){case"ilst":case"":return this.parseMetadataItemData(e)}if(this.atomParsers[e.header.name])return this.atomParsers[e.header.name](t);d(`No parser for atom path=${e.atomPath}, payload-len=${t}, ignoring atom`),await this.tokenizer.ignore(t)}getTrackDescription(){return this.tracks[this.tracks.length-1]}calculateBitRate(){this.audioLengthInBytes&&this.metadata.format.duration&&this.metadata.setFormat("bitrate",8*this.audioLengthInBytes/this.metadata.format.duration)}addTag(e,t){this.metadata.addTag("iTunes",e,t)}addWarning(e){d("Warning: "+e),this.metadata.addWarning(e)}parseMetadataItemData(e){let t=e.header.name;return e.readAtoms(this.tokenizer,(async(e,a)=>{const r=e.getPayloadLength(a);switch(e.header.name){case"data":return this.parseValueAtom(t,e);case"name":const a=await this.tokenizer.readToken(new u.NameAtom(r));t+=":"+a.name;break;case"mean":const i=await this.tokenizer.readToken(new u.NameAtom(r));t+=":"+i.name;break;default:const s=await this.tokenizer.readToken(new n.BufferType(r));this.addWarning("Unsupported meta-item: "+t+"["+e.header.name+"] => value="+s.toString("hex")+" ascii="+s.toString("ascii"))}}),e.getPayloadLength(0))}async parseValueAtom(e,t){const a=await this.tokenizer.readToken(new u.DataAtom(Number(t.header.length)-u.Header.len));if(0!==a.type.set)throw new Error("Unsupported type-set != 0: "+a.type.set);switch(a.type.type){case 0:switch(e){case"trkn":case"disk":const t=n.UINT8.get(a.value,3),r=n.UINT8.get(a.value,5);this.addTag(e,t+"/"+r);break;case"gnre":const i=n.UINT8.get(a.value,1),s=o.Genres[i-1];this.addTag(e,s)}break;case 1:case 18:this.addTag(e,a.value.toString("utf-8"));break;case 13:if(this.options.skipCovers)break;this.addTag(e,{format:"image/jpeg",data:r.from(a.value)});break;case 14:if(this.options.skipCovers)break;this.addTag(e,{format:"image/png",data:r.from(a.value)});break;case 21:this.addTag(e,f.read_BE_Integer(a.value,!0));break;case 22:this.addTag(e,f.read_BE_Integer(a.value,!1));break;case 65:this.addTag(e,a.value.readInt8(0));break;case 66:this.addTag(e,a.value.readInt16BE(0));break;case 67:this.addTag(e,a.value.readInt32BE(0));break;default:this.addWarning(`atom key=${e}, has unknown well-known-type (data-type): ${a.type.type}`)}}parseSoundSampleDescription(e){const t={dataFormat:e.dataFormat,dataReferenceIndex:e.dataReferenceIndex};let a=0;const r=u.SoundSampleDescriptionVersion.get(e.description,a);return a+=u.SoundSampleDescriptionVersion.len,0===r.version||1===r.version?t.description=u.SoundSampleDescriptionV0.get(e.description,a):d(`Warning: sound-sample-description ${r} not implemented`),t}async parseChapterTrack(e,t,a){if(!e.sampleSize&&e.chunkOffsetTable.length!==e.sampleSizeTable.length)throw new Error("Expected equal chunk-offset-table & sample-size-table length.");const r=[];for(let i=0;i0;++i){const n=e.chunkOffsetTable[i]-this.tokenizer.position,s=e.sampleSize>0?e.sampleSize:e.sampleSizeTable[i];if((a-=n+s)<0)throw new Error("Chapter chunk exceeding token length");await this.tokenizer.ignore(n);const o=await this.tokenizer.readToken(new u.ChapterText(s));d(`Chapter ${i+1}: ${o}`);const c={title:o,sampleOffset:this.findSampleOffset(t,this.tokenizer.position)};d(`Chapter title=${c.title}, offset=${c.sampleOffset}/${this.tracks[0].duration}`),r.push(c)}this.metadata.setFormat("chapters",r),await this.tokenizer.ignore(a)}findSampleOffset(e,t){let a=0;e.timeToSampleTable.forEach((e=>{a+=e.count*e.duration})),d(`Total duration=${a}`);let r=0;for(;r=t[a].firstChunk&&e{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.MP4TagMapper=t.tagType=void 0;const r=a(4132),i={"©nam":"title","©ART":"artist",aART:"albumartist","----:com.apple.iTunes:Band":"albumartist","©alb":"album","©day":"date","©cmt":"comment","©com":"comment",trkn:"track",disk:"disk","©gen":"genre",covr:"picture","©wrt":"composer","©lyr":"lyrics",soal:"albumsort",sonm:"titlesort",soar:"artistsort",soaa:"albumartistsort",soco:"composersort","----:com.apple.iTunes:LYRICIST":"lyricist","----:com.apple.iTunes:CONDUCTOR":"conductor","----:com.apple.iTunes:REMIXER":"remixer","----:com.apple.iTunes:ENGINEER":"engineer","----:com.apple.iTunes:PRODUCER":"producer","----:com.apple.iTunes:DJMIXER":"djmixer","----:com.apple.iTunes:MIXER":"mixer","----:com.apple.iTunes:LABEL":"label","©grp":"grouping","----:com.apple.iTunes:SUBTITLE":"subtitle","----:com.apple.iTunes:DISCSUBTITLE":"discsubtitle",cpil:"compilation",tmpo:"bpm","----:com.apple.iTunes:MOOD":"mood","----:com.apple.iTunes:MEDIA":"media","----:com.apple.iTunes:CATALOGNUMBER":"catalognumber",tvsh:"tvShow",tvsn:"tvSeason",tves:"tvEpisode",sosn:"tvShowSort",tven:"tvEpisodeId",tvnn:"tvNetwork",pcst:"podcast",purl:"podcasturl","----:com.apple.iTunes:MusicBrainz Album Status":"releasestatus","----:com.apple.iTunes:MusicBrainz Album Type":"releasetype","----:com.apple.iTunes:MusicBrainz Album Release Country":"releasecountry","----:com.apple.iTunes:SCRIPT":"script","----:com.apple.iTunes:LANGUAGE":"language",cprt:"copyright","©cpy":"copyright","----:com.apple.iTunes:LICENSE":"license","©too":"encodedby",pgap:"gapless","----:com.apple.iTunes:BARCODE":"barcode","----:com.apple.iTunes:ISRC":"isrc","----:com.apple.iTunes:ASIN":"asin","----:com.apple.iTunes:NOTES":"comment","----:com.apple.iTunes:MusicBrainz Track Id":"musicbrainz_recordingid","----:com.apple.iTunes:MusicBrainz Release Track Id":"musicbrainz_trackid","----:com.apple.iTunes:MusicBrainz Album Id":"musicbrainz_albumid","----:com.apple.iTunes:MusicBrainz Artist Id":"musicbrainz_artistid","----:com.apple.iTunes:MusicBrainz Album Artist Id":"musicbrainz_albumartistid","----:com.apple.iTunes:MusicBrainz Release Group Id":"musicbrainz_releasegroupid","----:com.apple.iTunes:MusicBrainz Work Id":"musicbrainz_workid","----:com.apple.iTunes:MusicBrainz TRM Id":"musicbrainz_trmid","----:com.apple.iTunes:MusicBrainz Disc Id":"musicbrainz_discid","----:com.apple.iTunes:Acoustid Id":"acoustid_id","----:com.apple.iTunes:Acoustid Fingerprint":"acoustid_fingerprint","----:com.apple.iTunes:MusicIP PUID":"musicip_puid","----:com.apple.iTunes:fingerprint":"musicip_fingerprint","----:com.apple.iTunes:replaygain_track_gain":"replaygain_track_gain","----:com.apple.iTunes:replaygain_track_peak":"replaygain_track_peak","----:com.apple.iTunes:replaygain_album_gain":"replaygain_album_gain","----:com.apple.iTunes:replaygain_album_peak":"replaygain_album_peak","----:com.apple.iTunes:replaygain_track_minmax":"replaygain_track_minmax","----:com.apple.iTunes:replaygain_album_minmax":"replaygain_album_minmax","----:com.apple.iTunes:replaygain_undo":"replaygain_undo",gnre:"genre","----:com.apple.iTunes:ALBUMARTISTSORT":"albumartistsort","----:com.apple.iTunes:ARTISTS":"artists","----:com.apple.iTunes:ORIGINALDATE":"originaldate","----:com.apple.iTunes:ORIGINALYEAR":"originalyear",desc:"description",ldes:"longDescription","©mvn":"movement","©mvi":"movementIndex","©mvc":"movementTotal","©wrk":"work",catg:"category",egid:"podcastId",hdvd:"hdVideo",keyw:"keywords",shwm:"showMovement",stik:"stik"};t.tagType="iTunes";class n extends r.CaseInsensitiveTagMap{constructor(){super([t.tagType],i)}}t.MP4TagMapper=n},5261:(e,t,a)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.ExtendedLameHeader=void 0;const r=a(3416),i=a(3769),n=a(6118);t.ExtendedLameHeader={len:27,get:(e,t)=>{const a=r.UINT32_BE.get(e,t+2);return{revision:i.getBitAllignedNumber(e,t,0,4),vbr_method:i.getBitAllignedNumber(e,t,4,4),lowpass_filter:100*r.UINT8.get(e,t+1),track_peak:0===a?void 0:a/Math.pow(2,23),track_gain:n.ReplayGain.get(e,6),album_gain:n.ReplayGain.get(e,8),music_length:r.UINT32_BE.get(e,t+20),music_crc:r.UINT8.get(e,t+24),header_crc:r.UINT16_BE.get(e,t+24)}}}},60:(e,t,a)=>{"use strict";var r=a(8764).Buffer;Object.defineProperty(t,"__esModule",{value:!0}),t.MpegParser=void 0;const i=a(3416),n=a(5849),s=a(1227),o=a(3769),c=a(5159),l=a(3566),u=(0,s.default)("music-metadata:parser:mpeg"),d={AudioObjectTypes:["AAC Main","AAC LC","AAC SSR","AAC LTP"],SamplingFrequencies:[96e3,88200,64e3,48e3,44100,32e3,24e3,22050,16e3,12e3,11025,8e3,7350,void 0,void 0,-1]},m=[void 0,["front-center"],["front-left","front-right"],["front-center","front-left","front-right"],["front-center","front-left","front-right","back-center"],["front-center","front-left","front-right","back-left","back-right"],["front-center","front-left","front-right","back-left","back-right","LFE-channel"],["front-center","front-left","front-right","side-left","side-right","back-left","back-right","LFE-channel"]];class p{constructor(e,t){this.versionIndex=o.getBitAllignedNumber(e,t+1,3,2),this.layer=p.LayerDescription[o.getBitAllignedNumber(e,t+1,5,2)],this.versionIndex>1&&0===this.layer?this.parseAdtsHeader(e,t):this.parseMpegHeader(e,t),this.isProtectedByCRC=!o.isBitSet(e,t+1,7)}calcDuration(e){return e*this.calcSamplesPerFrame()/this.samplingRate}calcSamplesPerFrame(){return p.samplesInFrameTable[1===this.version?0:1][this.layer]}calculateSideInfoLength(){if(3!==this.layer)return 2;if(3===this.channelModeIndex){if(1===this.version)return 17;if(2===this.version||2.5===this.version)return 9}else{if(1===this.version)return 32;if(2===this.version||2.5===this.version)return 17}}calcSlotSize(){return[null,4,1,1][this.layer]}parseMpegHeader(e,t){this.container="MPEG",this.bitrateIndex=o.getBitAllignedNumber(e,t+2,0,4),this.sampRateFreqIndex=o.getBitAllignedNumber(e,t+2,4,2),this.padding=o.isBitSet(e,t+2,6),this.privateBit=o.isBitSet(e,t+2,7),this.channelModeIndex=o.getBitAllignedNumber(e,t+3,0,2),this.modeExtension=o.getBitAllignedNumber(e,t+3,2,2),this.isCopyrighted=o.isBitSet(e,t+3,4),this.isOriginalMedia=o.isBitSet(e,t+3,5),this.emphasis=o.getBitAllignedNumber(e,t+3,7,2),this.version=p.VersionID[this.versionIndex],this.channelMode=p.ChannelMode[this.channelModeIndex],this.codec=`MPEG ${this.version} Layer ${this.layer}`;const a=this.calcBitrate();if(!a)throw new Error("Cannot determine bit-rate");if(this.bitrate=1e3*a,this.samplingRate=this.calcSamplingRate(),null==this.samplingRate)throw new Error("Cannot determine sampling-rate")}parseAdtsHeader(e,t){u("layer=0 => ADTS"),this.version=2===this.versionIndex?4:2,this.container="ADTS/MPEG-"+this.version;const a=o.getBitAllignedNumber(e,t+2,0,2);this.codec="AAC",this.codecProfile=d.AudioObjectTypes[a],u(`MPEG-4 audio-codec=${this.codec}`);const r=o.getBitAllignedNumber(e,t+2,2,4);this.samplingRate=d.SamplingFrequencies[r],u(`sampling-rate=${this.samplingRate}`);const i=o.getBitAllignedNumber(e,t+2,7,3);this.mp4ChannelConfig=m[i],u(`channel-config=${this.mp4ChannelConfig.join("+")}`),this.frameLength=o.getBitAllignedNumber(e,t+3,6,2)<<11}calcBitrate(){if(0===this.bitrateIndex||15===this.bitrateIndex)return;const e=`${Math.floor(this.version)}${this.layer}`;return p.bitrate_index[this.bitrateIndex][e]}calcSamplingRate(){return 3===this.sampRateFreqIndex?null:p.sampling_rate_freq_index[this.version][this.sampRateFreqIndex]}}p.SyncByte1=255,p.SyncByte2=224,p.VersionID=[2.5,null,2,1],p.LayerDescription=[0,3,2,1],p.ChannelMode=["stereo","joint_stereo","dual_channel","mono"],p.bitrate_index={1:{11:32,12:32,13:32,21:32,22:8,23:8},2:{11:64,12:48,13:40,21:48,22:16,23:16},3:{11:96,12:56,13:48,21:56,22:24,23:24},4:{11:128,12:64,13:56,21:64,22:32,23:32},5:{11:160,12:80,13:64,21:80,22:40,23:40},6:{11:192,12:96,13:80,21:96,22:48,23:48},7:{11:224,12:112,13:96,21:112,22:56,23:56},8:{11:256,12:128,13:112,21:128,22:64,23:64},9:{11:288,12:160,13:128,21:144,22:80,23:80},10:{11:320,12:192,13:160,21:160,22:96,23:96},11:{11:352,12:224,13:192,21:176,22:112,23:112},12:{11:384,12:256,13:224,21:192,22:128,23:128},13:{11:416,12:320,13:256,21:224,22:144,23:144},14:{11:448,12:384,13:320,21:256,22:160,23:160}},p.sampling_rate_freq_index={1:{0:44100,1:48e3,2:32e3},2:{0:22050,1:24e3,2:16e3},2.5:{0:11025,1:12e3,2:8e3}},p.samplesInFrameTable=[[0,384,1152,1152],[0,384,1152,576]];class f extends c.AbstractID3Parser{constructor(){super(...arguments),this.frameCount=0,this.syncFrameCount=-1,this.countSkipFrameData=0,this.totalDataLength=0,this.bitrates=[],this.calculateEofDuration=!1,this.buf_frame_header=r.alloc(4),this.syncPeek={buf:r.alloc(1024),len:0}}async postId3v2Parse(){this.metadata.setFormat("lossless",!1);try{let e=!1;for(;!e;)await this.sync(),e=await this.parseCommonMpegHeader()}catch(e){if(!(e instanceof n.EndOfStreamError))throw e;if(u("End-of-stream"),this.calculateEofDuration){const e=this.frameCount*this.samplesPerFrame;this.metadata.setFormat("numberOfSamples",e);const t=e/this.metadata.format.sampleRate;u(`Calculate duration at EOF: ${t} sec.`,t),this.metadata.setFormat("duration",t)}}}finalize(){const e=this.metadata.format,t=this.metadata.native.hasOwnProperty("ID3v1");if(e.duration&&this.tokenizer.fileInfo.size){const a=this.tokenizer.fileInfo.size-this.mpegOffset-(t?128:0);e.codecProfile&&"V"===e.codecProfile[0]&&this.metadata.setFormat("bitrate",8*a/e.duration)}else if(this.tokenizer.fileInfo.size&&"CBR"===e.codecProfile){const a=this.tokenizer.fileInfo.size-this.mpegOffset-(t?128:0),r=Math.round(a/this.frame_size)*this.samplesPerFrame;this.metadata.setFormat("numberOfSamples",r);const i=r/e.sampleRate;u("Calculate CBR duration based on file size: %s",i),this.metadata.setFormat("duration",i)}}async sync(){let e=!1;for(;;){let t=0;if(this.syncPeek.len=await this.tokenizer.peekBuffer(this.syncPeek.buf,{length:1024,mayBeLess:!0}),this.syncPeek.len<=163)throw new n.EndOfStreamError;for(;;){if(e&&224==(224&this.syncPeek.buf[t]))return this.buf_frame_header[0]=p.SyncByte1,this.buf_frame_header[1]=this.syncPeek.buf[t],await this.tokenizer.ignore(t),u(`Sync at offset=${this.tokenizer.position-1}, frameCount=${this.frameCount}`),this.syncFrameCount===this.frameCount&&(u(`Re-synced MPEG stream, frameCount=${this.frameCount}`),this.frameCount=0,this.frame_size=0),void(this.syncFrameCount=this.frameCount);if(e=!1,t=this.syncPeek.buf.indexOf(p.SyncByte1,t),-1===t){if(this.syncPeek.len=2&&0===e.layer?this.parseAdts(e):this.parseAudioFrameHeader(e)}async parseAudioFrameHeader(e){this.metadata.setFormat("numberOfChannels","mono"===e.channelMode?1:2),this.metadata.setFormat("bitrate",e.bitrate),this.frameCount<2e5&&u("offset=%s MP%s bitrate=%s sample-rate=%s",this.tokenizer.position-4,e.layer,e.bitrate,e.samplingRate);const t=e.calcSlotSize();if(null===t)throw new Error("invalid slot_size");const a=e.calcSamplesPerFrame();u(`samples_per_frame=${a}`);const r=a/8*e.bitrate/e.samplingRate+(e.padding?t:0);if(this.frame_size=Math.floor(r),this.audioFrameHeader=e,this.bitrates.push(e.bitrate),1===this.frameCount)return this.offset=4,await this.skipSideInformation(),!1;if(3===this.frameCount){if(this.areAllSame(this.bitrates)){if(this.samplesPerFrame=a,this.metadata.setFormat("codecProfile","CBR"),this.tokenizer.fileInfo.size)return!0}else if(this.metadata.format.duration)return!0;if(!this.options.duration)return!0}return this.options.duration&&4===this.frameCount&&(this.samplesPerFrame=a,this.calculateEofDuration=!0),this.offset=4,e.isProtectedByCRC?(await this.parseCrc(),!1):(await this.skipSideInformation(),!1)}async parseAdts(e){const t=r.alloc(3);await this.tokenizer.readBuffer(t),e.frameLength+=o.getBitAllignedNumber(t,0,0,11),this.totalDataLength+=e.frameLength,this.samplesPerFrame=1024;const a=e.samplingRate/this.samplesPerFrame,i=8*(0===this.frameCount?0:this.totalDataLength/this.frameCount)*a+.5;if(this.metadata.setFormat("bitrate",i),u(`frame-count=${this.frameCount}, size=${e.frameLength} bytes, bit-rate=${i}`),await this.tokenizer.ignore(e.frameLength>7?e.frameLength-7:1),3===this.frameCount){if(this.metadata.setFormat("codecProfile",e.codecProfile),e.mp4ChannelConfig&&this.metadata.setFormat("numberOfChannels",e.mp4ChannelConfig.length),!this.options.duration)return!0;this.calculateEofDuration=!0}return!1}async parseCrc(){return this.crc=await this.tokenizer.readNumber(i.INT16_BE),this.offset+=2,this.skipSideInformation()}async skipSideInformation(){const e=this.audioFrameHeader.calculateSideInfoLength();await this.tokenizer.readToken(new i.Uint8ArrayType(e)),this.offset+=e,await this.readXtraInfoHeader()}async readXtraInfoHeader(){const e=await this.tokenizer.readToken(l.InfoTagHeaderTag);switch(this.offset+=l.InfoTagHeaderTag.len,e){case"Info":return this.metadata.setFormat("codecProfile","CBR"),this.readXingInfoHeader();case"Xing":const e=(t=(await this.readXingInfoHeader()).vbrScale,"V"+Math.floor((100-t)/10));return this.metadata.setFormat("codecProfile",e),null;case"Xtra":break;case"LAME":const a=await this.tokenizer.readToken(l.LameEncoderVersion);if(this.frame_size>=this.offset+l.LameEncoderVersion.len)return this.offset+=l.LameEncoderVersion.len,this.metadata.setFormat("tool","LAME "+a),await this.skipFrameData(this.frame_size-this.offset),null;this.metadata.addWarning("Corrupt LAME header")}var t;const a=this.frame_size-this.offset;return a<0?this.metadata.addWarning("Frame "+this.frameCount+"corrupt: negative frameDataLeft"):await this.skipFrameData(a),null}async readXingInfoHeader(){const e=this.tokenizer.position,t=await(0,l.readXingHeader)(this.tokenizer);if(this.offset+=this.tokenizer.position-e,t.lame&&(this.metadata.setFormat("tool","LAME "+o.stripNulls(t.lame.version)),t.lame.extended&&(this.metadata.setFormat("trackPeakLevel",t.lame.extended.track_peak),t.lame.extended.track_gain&&this.metadata.setFormat("trackGain",t.lame.extended.track_gain.adjustment),t.lame.extended.album_gain&&this.metadata.setFormat("albumGain",t.lame.extended.album_gain.adjustment),this.metadata.setFormat("duration",t.lame.extended.music_length/1e3))),t.streamSize){const e=this.audioFrameHeader.calcDuration(t.numFrames);return this.metadata.setFormat("duration",e),u("Get duration from Xing header: %s",this.metadata.format.duration),t}const a=this.frame_size-this.offset;return await this.skipFrameData(a),t}async skipFrameData(e){if(e<0)throw new Error("frame-data-left cannot be negative");await this.tokenizer.ignore(e),this.countSkipFrameData+=e}areAllSame(e){const t=e[0];return e.every((e=>e===t))}}t.MpegParser=f},6118:(e,t,a)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.ReplayGain=void 0;const r=a(3769);var i,n;!function(e){e[e.not_set=0]="not_set",e[e.radio=1]="radio",e[e.audiophile=2]="audiophile"}(i||(i={})),function(e){e[e.unspecified=0]="unspecified",e[e.engineer=1]="engineer",e[e.user=2]="user",e[e.automatic=3]="automatic",e[e.rms_average=4]="rms_average"}(n||(n={})),t.ReplayGain={len:2,get:(e,t)=>{const a=r.getBitAllignedNumber(e,t,0,3),i=r.getBitAllignedNumber(e,t,6,1),n=r.getBitAllignedNumber(e,t,7,9)/10;if(a>0)return{type:r.getBitAllignedNumber(e,t,0,3),origin:r.getBitAllignedNumber(e,t,3,3),adjustment:i?-n:n}}}},3566:(e,t,a)=>{"use strict";var r=a(8764).Buffer;Object.defineProperty(t,"__esModule",{value:!0}),t.readXingHeader=t.XingHeaderFlags=t.LameEncoderVersion=t.InfoTagHeaderTag=void 0;const i=a(3416),n=a(3769),s=a(5261);t.InfoTagHeaderTag=new i.StringType(4,"ascii"),t.LameEncoderVersion=new i.StringType(6,"ascii"),t.XingHeaderFlags={len:4,get:(e,t)=>({frames:n.isBitSet(e,t,31),bytes:n.isBitSet(e,t,30),toc:n.isBitSet(e,t,29),vbrScale:n.isBitSet(e,t,28)})},t.readXingHeader=async function(e){const a=await e.readToken(t.XingHeaderFlags),n={};if(a.frames&&(n.numFrames=await e.readToken(i.UINT32_BE)),a.bytes&&(n.streamSize=await e.readToken(i.UINT32_BE)),a.toc&&(n.toc=r.alloc(100),await e.readBuffer(n.toc)),a.vbrScale&&(n.vbrScale=await e.readToken(i.UINT32_BE)),"LAME"===await e.peekToken(new i.StringType(4,"ascii"))&&(await e.ignore(4),n.lame={version:await e.readToken(new i.StringType(5,"ascii"))},n.lame.version.match(/\d+.\d+/g))){const t=n.lame.version.match(/\d+.\d+/g)[0].split(".").map((e=>parseInt(e,10)));t[0]>=3&&t[1]>=90&&(n.lame.extended=await e.readToken(s.ExtendedLameHeader))}return n}},9606:(e,t,a)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});const r=a(1227),i=a(3416),n=a(5159),s=a(5170),o=a(3928),c=(0,r.default)("music-metadata:parser:musepack");class l extends n.AbstractID3Parser{async postId3v2Parse(){let e;switch(await this.tokenizer.peekToken(new i.StringType(3,"binary"))){case"MP+":c("Musepack stream-version 7"),e=new o.MpcSv7Parser;break;case"MPC":c("Musepack stream-version 8"),e=new s.MpcSv8Parser;break;default:throw new Error("Invalid Musepack signature prefix")}return e.init(this.metadata,this.tokenizer,this.options),e.parse()}}t.default=l},2812:(e,t,a)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.BitReader=void 0;const r=a(3416);t.BitReader=class{constructor(e){this.tokenizer=e,this.pos=0,this.dword=void 0}async read(e){for(;void 0===this.dword;)this.dword=await this.tokenizer.readToken(r.UINT32_LE);let t=this.dword;return this.pos+=e,this.pos<32?(t>>>=32-this.pos,t&(1<>>32-this.pos),t&(1<0){const t=32-this.pos;this.dword=void 0,e-=t,this.pos=0}const t=e%32,a=(e-t)/32;return await this.tokenizer.ignore(4*a),this.read(t)}}},3928:(e,t,a)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.MpcSv7Parser=void 0;const r=a(1227),i=a(7805),n=a(6742),s=a(2812),o=a(8153),c=(0,r.default)("music-metadata:parser:musepack");class l extends i.BasicParser{constructor(){super(...arguments),this.audioLength=0}async parse(){const e=await this.tokenizer.readToken(o.Header);if("MP+"!==e.signature)throw new Error("Unexpected magic number");c(`stream-version=${e.streamMajorVersion}.${e.streamMinorVersion}`),this.metadata.setFormat("container","Musepack, SV7"),this.metadata.setFormat("sampleRate",e.sampleFrequency);const t=1152*(e.frameCount-1)+e.lastFrameLength;this.metadata.setFormat("numberOfSamples",t),this.duration=t/e.sampleFrequency,this.metadata.setFormat("duration",this.duration),this.bitreader=new s.BitReader(this.tokenizer),this.metadata.setFormat("numberOfChannels",e.midSideStereo||e.intensityStereo?2:1);const a=await this.bitreader.read(8);return this.metadata.setFormat("codec",(a/100).toFixed(2)),await this.skipAudioData(e.frameCount),c(`End of audio stream, switching to APEv2, offset=${this.tokenizer.position}`),n.APEv2Parser.tryParseApeHeader(this.metadata,this.tokenizer,this.options)}async skipAudioData(e){for(;e-- >0;){const e=await this.bitreader.read(20);this.audioLength+=20+e,await this.bitreader.ignore(e)}const t=await this.bitreader.read(11);this.audioLength+=t,this.metadata.setFormat("bitrate",this.audioLength/this.duration)}}t.MpcSv7Parser=l},8153:(e,t,a)=>{"use strict";var r=a(8764).Buffer;Object.defineProperty(t,"__esModule",{value:!0}),t.Header=void 0;const i=a(3416),n=a(3769);t.Header={len:24,get:(e,t)=>{const a={signature:r.from(e).toString("latin1",t,t+3),streamMinorVersion:n.getBitAllignedNumber(e,t+3,0,4),streamMajorVersion:n.getBitAllignedNumber(e,t+3,4,4),frameCount:i.UINT32_LE.get(e,t+4),maxLevel:i.UINT16_LE.get(e,t+8),sampleFrequency:[44100,48e3,37800,32e3][n.getBitAllignedNumber(e,t+10,0,2)],link:n.getBitAllignedNumber(e,t+10,2,2),profile:n.getBitAllignedNumber(e,t+10,4,4),maxBand:n.getBitAllignedNumber(e,t+11,0,6),intensityStereo:n.isBitSet(e,t+11,6),midSideStereo:n.isBitSet(e,t+11,7),titlePeak:i.UINT16_LE.get(e,t+12),titleGain:i.UINT16_LE.get(e,t+14),albumPeak:i.UINT16_LE.get(e,t+16),albumGain:i.UINT16_LE.get(e,t+18),lastFrameLength:i.UINT32_LE.get(e,t+20)>>>20&2047,trueGapless:n.isBitSet(e,t+23,0)};return a.lastFrameLength=a.trueGapless?i.UINT32_LE.get(e,20)>>>20&2047:0,a}}},5170:(e,t,a)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.MpcSv8Parser=void 0;const r=a(1227),i=a(7805),n=a(6742),s=a(8049),o=a(8850),c=(0,r.default)("music-metadata:parser:musepack");class l extends i.BasicParser{constructor(){super(...arguments),this.audioLength=0}async parse(){if("MPCK"!==await this.tokenizer.readToken(s.FourCcToken))throw new Error("Invalid Magic number");return this.metadata.setFormat("container","Musepack, SV8"),this.parsePacket()}async parsePacket(){const e=new o.StreamReader(this.tokenizer);for(;;){const t=await e.readPacketHeader();switch(c(`packet-header key=${t.key}, payloadLength=${t.payloadLength}`),t.key){case"SH":const a=await e.readStreamHeader(t.payloadLength);this.metadata.setFormat("numberOfSamples",a.sampleCount),this.metadata.setFormat("sampleRate",a.sampleFrequency),this.metadata.setFormat("duration",a.sampleCount/a.sampleFrequency),this.metadata.setFormat("numberOfChannels",a.channelCount);break;case"AP":this.audioLength+=t.payloadLength,await this.tokenizer.ignore(t.payloadLength);break;case"RG":case"EI":case"SO":case"ST":case"CT":await this.tokenizer.ignore(t.payloadLength);break;case"SE":return this.metadata.setFormat("bitrate",8*this.audioLength/this.metadata.format.duration),n.APEv2Parser.tryParseApeHeader(this.metadata,this.tokenizer,this.options);default:throw new Error(`Unexpected header: ${t.key}`)}}}}t.MpcSv8Parser=l},8850:(e,t,a)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.StreamReader=void 0;const r=a(3416),i=a(1227),n=a(3769),s=(0,i.default)("music-metadata:parser:musepack:sv8"),o=new r.StringType(2,"binary"),c={len:5,get:(e,t)=>({crc:r.UINT32_LE.get(e,t),streamVersion:r.UINT8.get(e,t+4)})},l={len:2,get:(e,t)=>({sampleFrequency:[44100,48e3,37800,32e3][n.getBitAllignedNumber(e,t,0,3)],maxUsedBands:n.getBitAllignedNumber(e,t,3,5),channelCount:n.getBitAllignedNumber(e,t+1,0,4)+1,msUsed:n.isBitSet(e,t+1,4),audioBlockFrames:n.getBitAllignedNumber(e,t+1,5,3)})};t.StreamReader=class{constructor(e){this.tokenizer=e}async readPacketHeader(){const e=await this.tokenizer.readToken(o),t=await this.readVariableSizeField();return{key:e,payloadLength:t.value-2-t.len}}async readStreamHeader(e){const t={};s(`Reading SH at offset=${this.tokenizer.position}`);const a=await this.tokenizer.readToken(c);e-=c.len,Object.assign(t,a),s(`SH.streamVersion = ${a.streamVersion}`);const r=await this.readVariableSizeField();e-=r.len,t.sampleCount=r.value;const i=await this.readVariableSizeField();e-=i.len,t.beginningOfSilence=i.value;const n=await this.tokenizer.readToken(l);return e-=l.len,Object.assign(t,n),await this.tokenizer.ignore(e),t}async readVariableSizeField(e=1,t=0){let a=await this.tokenizer.readNumber(r.UINT8);return 0==(128&a)?{len:e,value:t+a}:(a&=127,a+=t,this.readVariableSizeField(e+1,a<<7))}}},2152:(e,t,a)=>{"use strict";var r=a(8764).Buffer;Object.defineProperty(t,"__esModule",{value:!0}),t.OggParser=t.SegmentTable=void 0;const i=a(3416),n=a(5849),s=a(1227),o=a(3769),c=a(8049),l=a(7805),u=a(4210),d=a(1272),m=a(573),p=a(2630),f=(0,s.default)("music-metadata:parser:ogg");class h{constructor(e){this.len=e.page_segments}static sum(e,t,a){let r=0;for(let i=t;i0&&(this.metadata.addWarning("Invalid FourCC ID, maybe last OGG-page is not marked with last-page flag"),this.pageConsumer.flush())}}}}t.OggParser=g,g.Header={len:27,get:(e,t)=>({capturePattern:c.FourCcToken.get(e,t),version:i.UINT8.get(e,t+4),headerType:{continued:o.getBit(e,t+5,0),firstPage:o.getBit(e,t+5,1),lastPage:o.getBit(e,t+5,2)},absoluteGranulePosition:Number(i.UINT64_LE.get(e,t+6)),streamSerialNumber:i.UINT32_LE.get(e,t+14),pageSequenceNo:i.UINT32_LE.get(e,t+18),pageChecksum:i.UINT32_LE.get(e,t+22),page_segments:i.UINT8.get(e,t+26)})}},5044:(e,t,a)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.IdHeader=void 0;const r=a(3416);t.IdHeader=class{constructor(e){if(this.len=e,e<19)throw new Error("ID-header-page 0 should be at least 19 bytes long")}get(e,t){return{magicSignature:new r.StringType(8,"ascii").get(e,t+0),version:e.readUInt8(t+8),channelCount:e.readUInt8(t+9),preSkip:e.readInt16LE(t+10),inputSampleRate:e.readInt32LE(t+12),outputGain:e.readInt16LE(t+16),channelMapping:e.readUInt8(t+18)}}}},1272:(e,t,a)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.OpusParser=void 0;const r=a(3416),i=a(4210),n=a(5044);class s extends i.VorbisParser{constructor(e,t,a){super(e,t),this.tokenizer=a,this.lastPos=-1}parseFirstPage(e,t){if(this.metadata.setFormat("codec","Opus"),this.idHeader=new n.IdHeader(t.length).get(t,0),"OpusHead"!==this.idHeader.magicSignature)throw new Error("Illegal ogg/Opus magic-signature");this.metadata.setFormat("sampleRate",this.idHeader.inputSampleRate),this.metadata.setFormat("numberOfChannels",this.idHeader.channelCount)}parseFullPage(e){"OpusTags"===new r.StringType(8,"ascii").get(e,0)&&(this.parseUserCommentList(e,8),this.lastPos=this.tokenizer.position-e.length)}calculateDuration(e){if(this.metadata.format.sampleRate&&e.absoluteGranulePosition>=0){const t=e.absoluteGranulePosition-this.idHeader.preSkip;if(this.metadata.setFormat("numberOfSamples",t),this.metadata.setFormat("duration",t/48e3),-1!==this.lastPos&&this.tokenizer.fileInfo.size&&this.metadata.format.duration){const e=this.tokenizer.fileInfo.size-this.lastPos;this.metadata.setFormat("bitrate",8*e/this.metadata.format.duration)}}}}t.OpusParser=s},6666:(e,t,a)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.Header=void 0;const r=a(3416),i=a(3769);t.Header={len:80,get:(e,t)=>({speex:new r.StringType(8,"ascii").get(e,t+0),version:i.trimRightNull(new r.StringType(20,"ascii").get(e,t+8)),version_id:e.readInt32LE(t+28),header_size:e.readInt32LE(t+32),rate:e.readInt32LE(t+36),mode:e.readInt32LE(t+40),mode_bitstream_version:e.readInt32LE(t+44),nb_channels:e.readInt32LE(t+48),bitrate:e.readInt32LE(t+52),frame_size:e.readInt32LE(t+56),vbr:e.readInt32LE(t+60),frames_per_packet:e.readInt32LE(t+64),extra_headers:e.readInt32LE(t+68),reserved1:e.readInt32LE(t+72),reserved2:e.readInt32LE(t+76)})}},573:(e,t,a)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.SpeexParser=void 0;const r=a(1227),i=a(4210),n=a(6666),s=(0,r.default)("music-metadata:parser:ogg:speex");class o extends i.VorbisParser{constructor(e,t,a){super(e,t),this.tokenizer=a}parseFirstPage(e,t){s("First Ogg/Speex page");const a=n.Header.get(t,0);this.metadata.setFormat("codec",`Speex ${a.version}`),this.metadata.setFormat("numberOfChannels",a.nb_channels),this.metadata.setFormat("sampleRate",a.rate),-1!==a.bitrate&&this.metadata.setFormat("bitrate",a.bitrate)}}t.SpeexParser=o},5177:(e,t,a)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.IdentificationHeader=void 0;const r=a(3416);t.IdentificationHeader={len:42,get:(e,t)=>({id:new r.StringType(7,"ascii").get(e,t),vmaj:e.readUInt8(t+7),vmin:e.readUInt8(t+8),vrev:e.readUInt8(t+9),vmbw:e.readUInt16BE(t+10),vmbh:e.readUInt16BE(t+17),nombr:r.UINT24_BE.get(e,t+37),nqual:e.readUInt8(t+40)})}},2630:(e,t,a)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.TheoraParser=void 0;const r=a(1227),i=a(5177),n=(0,r.default)("music-metadata:parser:ogg:theora");t.TheoraParser=class{constructor(e,t,a){this.metadata=e,this.tokenizer=a}parsePage(e,t){e.headerType.firstPage&&this.parseFirstPage(e,t)}flush(){n("flush")}calculateDuration(e){n("duration calculation not implemented")}parseFirstPage(e,t){n("First Ogg/Theora page"),this.metadata.setFormat("codec","Theora");const a=i.IdentificationHeader.get(t,0);this.metadata.setFormat("bitrate",a.nombr)}}},2127:(e,t,a)=>{"use strict";var r=a(8764).Buffer;Object.defineProperty(t,"__esModule",{value:!0}),t.IdentificationHeader=t.CommonHeader=t.VorbisPictureToken=void 0;const i=a(3416),n=a(8281);class s{constructor(e){this.len=e}static fromBase64(e){return this.fromBuffer(r.from(e,"base64"))}static fromBuffer(e){return new s(e.length).get(e,0)}get(e,t){const a=n.AttachedPictureType[i.UINT32_BE.get(e,t)],s=i.UINT32_BE.get(e,t+=4),o=e.toString("utf-8",t+=4,t+s),c=i.UINT32_BE.get(e,t+=s),l=e.toString("utf-8",t+=4,t+c),u=i.UINT32_BE.get(e,t+=c),d=i.UINT32_BE.get(e,t+=4),m=i.UINT32_BE.get(e,t+=4),p=i.UINT32_BE.get(e,t+=4),f=i.UINT32_BE.get(e,t+=4);return{type:a,format:o,description:l,width:u,height:d,colour_depth:m,indexed_color:p,data:r.from(e.slice(t+=4,t+f))}}}t.VorbisPictureToken=s,t.CommonHeader={len:7,get:(e,t)=>({packetType:e.readUInt8(t),vorbis:new i.StringType(6,"ascii").get(e,t+1)})},t.IdentificationHeader={len:23,get:(e,t)=>{const a=new DataView(e.buffer,e.byteOffset);return{version:a.getUint32(t+0,!0),channelMode:a.getUint8(t+4),sampleRate:a.getUint32(t+5,!0),bitrateMax:a.getUint32(t+9,!0),bitrateNominal:a.getUint32(t+13,!0),bitrateMin:a.getUint32(t+17,!0)}}}},441:(e,t,a)=>{"use strict";var r=a(8764).Buffer;Object.defineProperty(t,"__esModule",{value:!0}),t.VorbisDecoder=void 0;const i=a(3416);t.VorbisDecoder=class{constructor(e,t){this.data=e,this.offset=t}readInt32(){const e=i.UINT32_LE.get(this.data,this.offset);return this.offset+=4,e}readStringUtf8(){const e=this.readInt32(),t=r.from(this.data).toString("utf-8",this.offset,this.offset+e);return this.offset+=e,t}parseUserComment(){const e=this.offset,t=this.readStringUtf8(),a=t.indexOf("=");return{key:t.slice(0,a).toUpperCase(),value:t.slice(a+1),len:this.offset-e}}}},4210:(e,t,a)=>{"use strict";var r=a(8764).Buffer;Object.defineProperty(t,"__esModule",{value:!0}),t.VorbisParser=void 0;const i=a(3416),n=a(1227),s=a(441),o=a(2127),c=(0,n.default)("music-metadata:parser:ogg:vorbis1");t.VorbisParser=class{constructor(e,t){this.metadata=e,this.options=t,this.pageSegments=[]}parsePage(e,t){if(e.headerType.firstPage)this.parseFirstPage(e,t);else{if(e.headerType.continued){if(0===this.pageSegments.length)throw new Error("Cannot continue on previous page");this.pageSegments.push(t)}if(e.headerType.lastPage||!e.headerType.continued){if(this.pageSegments.length>0){const e=r.concat(this.pageSegments);this.parseFullPage(e)}this.pageSegments=e.headerType.lastPage?[]:[t]}}e.headerType.lastPage&&this.calculateDuration(e)}flush(){this.parseFullPage(r.concat(this.pageSegments))}parseUserComment(e,t){const a=new s.VorbisDecoder(e,t).parseUserComment();return this.addTag(a.key,a.value),a.len}addTag(e,t){if("METADATA_BLOCK_PICTURE"===e&&"string"==typeof t){if(this.options.skipCovers)return void c("Ignore picture");t=o.VorbisPictureToken.fromBase64(t),c(`Push picture: id=${e}, format=${t.format}`)}else c(`Push tag: id=${e}, value=${t}`);this.metadata.addTag("vorbis",e,t)}calculateDuration(e){this.metadata.format.sampleRate&&e.absoluteGranulePosition>=0&&(this.metadata.setFormat("numberOfSamples",e.absoluteGranulePosition),this.metadata.setFormat("duration",this.metadata.format.numberOfSamples/this.metadata.format.sampleRate))}parseFirstPage(e,t){this.metadata.setFormat("codec","Vorbis I"),c("Parse first page");const a=o.CommonHeader.get(t,0);if("vorbis"!==a.vorbis)throw new Error("Metadata does not look like Vorbis");if(1!==a.packetType)throw new Error("First Ogg page should be type 1: the identification header");{const e=o.IdentificationHeader.get(t,o.CommonHeader.len);this.metadata.setFormat("sampleRate",e.sampleRate),this.metadata.setFormat("bitrate",e.bitrateNominal),this.metadata.setFormat("numberOfChannels",e.channelMode),c("sample-rate=%s[hz], bitrate=%s[b/s], channel-mode=%s",e.sampleRate,e.bitrateNominal,e.channelMode)}}parseFullPage(e){const t=o.CommonHeader.get(e,0);if(c("Parse full page: type=%s, byteLength=%s",t.packetType,e.byteLength),3===t.packetType)return this.parseUserCommentList(e,o.CommonHeader.len)}parseUserCommentList(e,t){const a=i.UINT32_LE.get(e,t);t+=4,t+=a;let r=i.UINT32_LE.get(e,t);for(t+=4;r-- >0;)t+=this.parseUserComment(e,t)}}},9860:(e,t,a)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.VorbisTagMapper=void 0;const r=a(9918),i={TITLE:"title",ARTIST:"artist",ARTISTS:"artists",ALBUMARTIST:"albumartist","ALBUM ARTIST":"albumartist",ALBUM:"album",DATE:"date",ORIGINALDATE:"originaldate",ORIGINALYEAR:"originalyear",COMMENT:"comment",TRACKNUMBER:"track",DISCNUMBER:"disk",GENRE:"genre",METADATA_BLOCK_PICTURE:"picture",COMPOSER:"composer",LYRICS:"lyrics",ALBUMSORT:"albumsort",TITLESORT:"titlesort",WORK:"work",ARTISTSORT:"artistsort",ALBUMARTISTSORT:"albumartistsort",COMPOSERSORT:"composersort",LYRICIST:"lyricist",WRITER:"writer",CONDUCTOR:"conductor",REMIXER:"remixer",ARRANGER:"arranger",ENGINEER:"engineer",PRODUCER:"producer",DJMIXER:"djmixer",MIXER:"mixer",LABEL:"label",GROUPING:"grouping",SUBTITLE:"subtitle",DISCSUBTITLE:"discsubtitle",TRACKTOTAL:"totaltracks",DISCTOTAL:"totaldiscs",COMPILATION:"compilation",RATING:"rating",BPM:"bpm",KEY:"key",MOOD:"mood",MEDIA:"media",CATALOGNUMBER:"catalognumber",RELEASESTATUS:"releasestatus",RELEASETYPE:"releasetype",RELEASECOUNTRY:"releasecountry",SCRIPT:"script",LANGUAGE:"language",COPYRIGHT:"copyright",LICENSE:"license",ENCODEDBY:"encodedby",ENCODERSETTINGS:"encodersettings",BARCODE:"barcode",ISRC:"isrc",ASIN:"asin",MUSICBRAINZ_TRACKID:"musicbrainz_recordingid",MUSICBRAINZ_RELEASETRACKID:"musicbrainz_trackid",MUSICBRAINZ_ALBUMID:"musicbrainz_albumid",MUSICBRAINZ_ARTISTID:"musicbrainz_artistid",MUSICBRAINZ_ALBUMARTISTID:"musicbrainz_albumartistid",MUSICBRAINZ_RELEASEGROUPID:"musicbrainz_releasegroupid",MUSICBRAINZ_WORKID:"musicbrainz_workid",MUSICBRAINZ_TRMID:"musicbrainz_trmid",MUSICBRAINZ_DISCID:"musicbrainz_discid",ACOUSTID_ID:"acoustid_id",ACOUSTID_ID_FINGERPRINT:"acoustid_fingerprint",MUSICIP_PUID:"musicip_puid",WEBSITE:"website",NOTES:"notes",TOTALTRACKS:"totaltracks",TOTALDISCS:"totaldiscs",DISCOGS_ARTIST_ID:"discogs_artist_id",DISCOGS_ARTISTS:"artists",DISCOGS_ARTIST_NAME:"artists",DISCOGS_ALBUM_ARTISTS:"albumartist",DISCOGS_CATALOG:"catalognumber",DISCOGS_COUNTRY:"releasecountry",DISCOGS_DATE:"originaldate",DISCOGS_LABEL:"label",DISCOGS_LABEL_ID:"discogs_label_id",DISCOGS_MASTER_RELEASE_ID:"discogs_master_release_id",DISCOGS_RATING:"discogs_rating",DISCOGS_RELEASED:"date",DISCOGS_RELEASE_ID:"discogs_release_id",DISCOGS_VOTES:"discogs_votes",CATALOGID:"catalognumber",STYLE:"genre",REPLAYGAIN_TRACK_GAIN:"replaygain_track_gain",REPLAYGAIN_TRACK_PEAK:"replaygain_track_peak",REPLAYGAIN_ALBUM_GAIN:"replaygain_album_gain",REPLAYGAIN_ALBUM_PEAK:"replaygain_album_peak",REPLAYGAIN_MINMAX:"replaygain_track_minmax",REPLAYGAIN_ALBUM_MINMAX:"replaygain_album_minmax",REPLAYGAIN_UNDO:"replaygain_undo"};class n extends r.CommonTagMapper{static toRating(e,t){return{source:e?e.toLowerCase():e,rating:parseFloat(t)*r.CommonTagMapper.maxRatingScore}}constructor(){super(["vorbis"],i)}postMap(e){if(0===e.id.indexOf("RATING:")){const t=e.id.split(":");e.value=n.toRating(t[1],e.value),e.id=t[0]}}}t.VorbisTagMapper=n},3211:(e,t,a)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.ListInfoTagValue=t.Header=void 0;const r=a(3416);t.Header={len:8,get:(e,t)=>({chunkID:e.toString("binary",t,t+4),chunkSize:r.UINT32_LE.get(e,4)})},t.ListInfoTagValue=class{constructor(e){this.tagHeader=e,this.len=e.chunkSize,this.len+=1&this.len}get(e,t){return new r.StringType(this.tagHeader.chunkSize,"ascii").get(e,t)}}},5756:(e,t,a)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.RiffInfoTagMapper=t.riffInfoTagMap=void 0;const r=a(9918);t.riffInfoTagMap={IART:"artist",ICRD:"date",INAM:"title",TITL:"title",IPRD:"album",ITRK:"track",COMM:"comment",ICMT:"comment",ICNT:"releasecountry",GNRE:"genre",IWRI:"writer",RATE:"rating",YEAR:"year",ISFT:"encodedby",CODE:"encodedby",TURL:"website",IGNR:"genre",IENG:"engineer",ITCH:"technician",IMED:"media",IRPD:"album"};class i extends r.CommonTagMapper{constructor(){super(["exif"],t.riffInfoTagMap)}}t.RiffInfoTagMapper=i},6032:(e,t,a)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.TrackType=void 0;var r=a(8591);Object.defineProperty(t,"TrackType",{enumerable:!0,get:function(){return r.TrackType}})},8053:(e,t,a)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.BroadcastAudioExtensionChunk=void 0;const r=a(3416);t.BroadcastAudioExtensionChunk={len:420,get:(e,t)=>({description:new r.StringType(256,"ascii").get(e,t).trim(),originator:new r.StringType(32,"ascii").get(e,t+256).trim(),originatorReference:new r.StringType(32,"ascii").get(e,t+288).trim(),originationDate:new r.StringType(10,"ascii").get(e,t+320).trim(),originationTime:new r.StringType(8,"ascii").get(e,t+330).trim(),timeReferenceLow:r.UINT32_LE.get(e,t+338),timeReferenceHigh:r.UINT32_LE.get(e,t+342),version:r.UINT16_LE.get(e,t+346),umid:new r.Uint8ArrayType(64).get(e,t+348),loudnessValue:r.UINT16_LE.get(e,t+412),maxTruePeakLevel:r.UINT16_LE.get(e,t+414),maxMomentaryLoudness:r.UINT16_LE.get(e,t+416),maxShortTermLoudness:r.UINT16_LE.get(e,t+418)})}},9975:(e,t)=>{"use strict";var a;Object.defineProperty(t,"__esModule",{value:!0}),t.FactChunk=t.Format=t.WaveFormat=void 0,(a=t.WaveFormat||(t.WaveFormat={}))[a.PCM=1]="PCM",a[a.ADPCM=2]="ADPCM",a[a.IEEE_FLOAT=3]="IEEE_FLOAT",a[a.MPEG_ADTS_AAC=5632]="MPEG_ADTS_AAC",a[a.MPEG_LOAS=5634]="MPEG_LOAS",a[a.RAW_AAC1=255]="RAW_AAC1",a[a.DOLBY_AC3_SPDIF=146]="DOLBY_AC3_SPDIF",a[a.DVM=8192]="DVM",a[a.RAW_SPORT=576]="RAW_SPORT",a[a.ESST_AC3=577]="ESST_AC3",a[a.DRM=9]="DRM",a[a.DTS2=8193]="DTS2",a[a.MPEG=80]="MPEG",t.Format=class{constructor(e){if(e.chunkSize<16)throw new Error("Invalid chunk size");this.len=e.chunkSize}get(e,t){return{wFormatTag:e.readUInt16LE(t),nChannels:e.readUInt16LE(t+2),nSamplesPerSec:e.readUInt32LE(t+4),nAvgBytesPerSec:e.readUInt32LE(t+8),nBlockAlign:e.readUInt16LE(t+12),wBitsPerSample:e.readUInt16LE(t+14)}}},t.FactChunk=class{constructor(e){if(e.chunkSize<4)throw new Error("Invalid fact chunk size.");this.len=e.chunkSize}get(e,t){return{dwSampleLength:e.readUInt32LE(t)}}}},2682:(e,t,a)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.WaveParser=void 0;const r=a(5849),i=a(3416),n=a(1227),s=a(3211),o=a(9975),c=a(8928),l=a(3769),u=a(8049),d=a(7805),m=a(8053),p=(0,n.default)("music-metadata:parser:RIFF");class f extends d.BasicParser{async parse(){const e=await this.tokenizer.readToken(s.Header);if(p(`pos=${this.tokenizer.position}, parse: chunkID=${e.chunkID}`),"RIFF"===e.chunkID)return this.parseRiffChunk(e.chunkSize).catch((e=>{if(!(e instanceof r.EndOfStreamError))throw e}))}async parseRiffChunk(e){const t=await this.tokenizer.readToken(u.FourCcToken);if(this.metadata.setFormat("container",t),"WAVE"===t)return this.readWaveChunk(e-u.FourCcToken.len);throw new Error(`Unsupported RIFF format: RIFF/${t}`)}async readWaveChunk(e){for(;e>=s.Header.len;){const t=await this.tokenizer.readToken(s.Header);switch(e-=s.Header.len+t.chunkSize,t.chunkSize>e&&this.metadata.addWarning("Data chunk size exceeds file size"),this.header=t,p(`pos=${this.tokenizer.position}, readChunk: chunkID=RIFF/WAVE/${t.chunkID}`),t.chunkID){case"LIST":await this.parseListTag(t);break;case"fact":this.metadata.setFormat("lossless",!1),this.fact=await this.tokenizer.readToken(new o.FactChunk(t));break;case"fmt ":const e=await this.tokenizer.readToken(new o.Format(t));let a=o.WaveFormat[e.wFormatTag];a||(p("WAVE/non-PCM format="+e.wFormatTag),a="non-PCM ("+e.wFormatTag+")"),this.metadata.setFormat("codec",a),this.metadata.setFormat("bitsPerSample",e.wBitsPerSample),this.metadata.setFormat("sampleRate",e.nSamplesPerSec),this.metadata.setFormat("numberOfChannels",e.nChannels),this.metadata.setFormat("bitrate",e.nBlockAlign*e.nSamplesPerSec*8),this.blockAlign=e.nBlockAlign;break;case"id3 ":case"ID3 ":const n=await this.tokenizer.readToken(new i.Uint8ArrayType(t.chunkSize)),s=r.fromBuffer(n);await(new c.ID3v2Parser).parse(this.metadata,s,this.options);break;case"data":!1!==this.metadata.format.lossless&&this.metadata.setFormat("lossless",!0);let l=t.chunkSize;if(this.tokenizer.fileInfo.size){const e=this.tokenizer.fileInfo.size-this.tokenizer.position;e{this.metadata.addTag("exif","bext."+e,d[e])}));break;case"\0\0\0\0":p(`Ignore padding chunk: RIFF/${t.chunkID} of ${t.chunkSize} bytes`),this.metadata.addWarning("Ignore chunk: RIFF/"+t.chunkID),await this.tokenizer.ignore(t.chunkSize);break;default:p(`Ignore chunk: RIFF/${t.chunkID} of ${t.chunkSize} bytes`),this.metadata.addWarning("Ignore chunk: RIFF/"+t.chunkID),await this.tokenizer.ignore(t.chunkSize)}this.header.chunkSize%2==1&&(p("Read odd padding byte"),await this.tokenizer.ignore(1))}}async parseListTag(e){const t=await this.tokenizer.readToken(new i.StringType(4,"binary"));return p("pos=%s, parseListTag: chunkID=RIFF/WAVE/LIST/%s",this.tokenizer.position,t),"INFO"===t?this.parseRiffInfoTags(e.chunkSize-4):(this.metadata.addWarning("Ignore chunk: RIFF/WAVE/LIST/"+t),p("Ignoring chunkID=RIFF/WAVE/LIST/"+t),this.tokenizer.ignore(e.chunkSize-4).then())}async parseRiffInfoTags(e){for(;e>=8;){const t=await this.tokenizer.readToken(s.Header),a=new s.ListInfoTagValue(t),r=await this.tokenizer.readToken(a);this.addTag(t.chunkID,l.stripNulls(r)),e-=8+a.len}if(0!==e)throw Error("Illegal remaining size: "+e)}addTag(e,t){this.metadata.addTag("exif",e,t)}}t.WaveParser=f},5870:(e,t,a)=>{"use strict";var r=a(8764).Buffer;Object.defineProperty(t,"__esModule",{value:!0}),t.WavPackParser=void 0;const i=a(3416),n=a(6742),s=a(8049),o=a(7805),c=a(2989),l=(0,a(1227).default)("music-metadata:parser:WavPack");class u extends o.BasicParser{async parse(){return this.audioDataSize=0,await this.parseWavPackBlocks(),n.APEv2Parser.tryParseApeHeader(this.metadata,this.tokenizer,this.options)}async parseWavPackBlocks(){do{if("wvpk"!==await this.tokenizer.peekToken(s.FourCcToken))break;const e=await this.tokenizer.readToken(c.WavPack.BlockHeaderToken);if("wvpk"!==e.BlockID)throw new Error("Invalid WavPack Block-ID");l(`WavPack header blockIndex=${e.blockIndex}, len=${c.WavPack.BlockHeaderToken.len}`),0!==e.blockIndex||this.metadata.format.container||(this.metadata.setFormat("container","WavPack"),this.metadata.setFormat("lossless",!e.flags.isHybrid),this.metadata.setFormat("bitsPerSample",e.flags.bitsPerSample),e.flags.isDSD||(this.metadata.setFormat("sampleRate",e.flags.samplingRate),this.metadata.setFormat("duration",e.totalSamples/e.flags.samplingRate)),this.metadata.setFormat("numberOfChannels",e.flags.isMono?1:2),this.metadata.setFormat("numberOfSamples",e.totalSamples),this.metadata.setFormat("codec",e.flags.isDSD?"DSD":"PCM"));const t=e.blockSize-(c.WavPack.BlockHeaderToken.len-8);await(0===e.blockIndex?this.parseMetadataSubBlock(e,t):this.tokenizer.ignore(t)),e.blockSamples>0&&(this.audioDataSize+=e.blockSize)}while(!this.tokenizer.fileInfo.size||this.tokenizer.fileInfo.size-this.tokenizer.position>=c.WavPack.BlockHeaderToken.len);this.metadata.setFormat("bitrate",8*this.audioDataSize/this.metadata.format.duration)}async parseMetadataSubBlock(e,t){for(;t>c.WavPack.MetadataIdToken.len;){const a=await this.tokenizer.readToken(c.WavPack.MetadataIdToken),n=await this.tokenizer.readNumber(a.largeBlock?i.UINT24_LE:i.UINT8),s=r.alloc(2*n-(a.isOddSize?1:0));switch(await this.tokenizer.readBuffer(s),l(`Metadata Sub-Blocks functionId=0x${a.functionId.toString(16)}, id.largeBlock=${a.largeBlock},data-size=${s.length}`),a.functionId){case 0:break;case 14:l("ID_DSD_BLOCK");const t=1<{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.WavPack=void 0;const r=a(3416),i=a(8049),n=[6e3,8e3,9600,11025,12e3,16e3,22050,24e3,32e3,44100,48e3,64e3,88200,96e3,192e3,-1];class s{static isBitSet(e,t){return 1===s.getBitAllignedNumber(e,t,1)}static getBitAllignedNumber(e,t,a){return e>>>t&4294967295>>>32-a}}t.WavPack=s,s.BlockHeaderToken={len:32,get:(e,t)=>{const a=r.UINT32_LE.get(e,t+24),o={BlockID:i.FourCcToken.get(e,t),blockSize:r.UINT32_LE.get(e,t+4),version:r.UINT16_LE.get(e,t+8),totalSamples:r.UINT32_LE.get(e,t+12),blockIndex:r.UINT32_LE.get(e,t+16),blockSamples:r.UINT32_LE.get(e,t+20),flags:{bitsPerSample:8*(1+s.getBitAllignedNumber(a,0,2)),isMono:s.isBitSet(a,2),isHybrid:s.isBitSet(a,3),isJointStereo:s.isBitSet(a,4),crossChannel:s.isBitSet(a,5),hybridNoiseShaping:s.isBitSet(a,6),floatingPoint:s.isBitSet(a,7),samplingRate:n[s.getBitAllignedNumber(a,23,4)],isDSD:s.isBitSet(a,31)},crc:new r.Uint8ArrayType(4).get(e,t+28)};return o.flags.isDSD&&(o.totalSamples*=8),o}},s.MetadataIdToken={len:1,get:(e,t)=>({functionId:s.getBitAllignedNumber(e[t],0,6),isOptional:s.isBitSet(e[t],5),isOddSize:s.isBitSet(e[t],6),largeBlock:s.isBitSet(e[t],7)})}},5762:(e,t)=>{"use strict";var a=/^[A-Za-z0-9][A-Za-z0-9!#$&^_.-]{0,126}$/,r=/^[A-Za-z0-9][A-Za-z0-9!#$&^_-]{0,126}$/,i=/^ *([A-Za-z0-9][A-Za-z0-9!#$&^_-]{0,126})\/([A-Za-z0-9][A-Za-z0-9!#$&^_.+-]{0,126}) *$/;function n(e,t,a){this.type=e,this.subtype=t,this.suffix=a}t.format=function(e){if(!e||"object"!=typeof e)throw new TypeError("argument obj is required");var t=e.subtype,i=e.suffix,n=e.type;if(!n||!r.test(n))throw new TypeError("invalid type");if(!t||!a.test(t))throw new TypeError("invalid subtype");var s=n+"/"+t;if(i){if(!r.test(i))throw new TypeError("invalid suffix");s+="+"+i}return s},t.parse=function(e){if(!e)throw new TypeError("argument string is required");if("string"!=typeof e)throw new TypeError("argument string is required to be a string");var t=i.exec(e.toLowerCase());if(!t)throw new TypeError("invalid media type");var a,r=t[1],s=t[2],o=s.lastIndexOf("+");return-1!==o&&(a=s.substr(o+1),s=s.substr(0,o)),new n(r,s,a)},t.test=function(e){if(!e)throw new TypeError("argument string is required");if("string"!=typeof e)throw new TypeError("argument string is required to be a string");return i.test(e.toLowerCase())}},8985:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.Deferred=void 0,t.Deferred=class{constructor(){this.resolve=()=>null,this.reject=()=>null,this.promise=new Promise(((e,t)=>{this.reject=t,this.resolve=e}))}}},7279:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.EndOfStreamError=t.defaultMessages=void 0,t.defaultMessages="End-Of-Stream";class a extends Error{constructor(){super(t.defaultMessages)}}t.EndOfStreamError=a},6654:(e,t,a)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.StreamReader=t.EndOfStreamError=void 0;const r=a(7279),i=a(8985);var n=a(7279);Object.defineProperty(t,"EndOfStreamError",{enumerable:!0,get:function(){return n.EndOfStreamError}}),t.StreamReader=class{constructor(e){if(this.s=e,this.deferred=null,this.endOfStream=!1,this.peekQueue=[],!e.read||!e.once)throw new Error("Expected an instance of stream.Readable");this.s.once("end",(()=>this.reject(new r.EndOfStreamError))),this.s.once("error",(e=>this.reject(e))),this.s.once("close",(()=>this.reject(new Error("Stream closed"))))}async peek(e,t,a){const r=await this.read(e,t,a);return this.peekQueue.push(e.subarray(t,t+r)),r}async read(e,t,a){if(0===a)return 0;if(0===this.peekQueue.length&&this.endOfStream)throw new r.EndOfStreamError;let i=a,n=0;for(;this.peekQueue.length>0&&i>0;){const a=this.peekQueue.pop();if(!a)throw new Error("peekData should be defined");const r=Math.min(a.length,i);e.set(a.subarray(0,r),t+n),n+=r,i-=r,r0&&!this.endOfStream;){const a=Math.min(i,1048576),r=await this.readFromStream(e,t+n,a);if(n+=r,r{this.readDeferred(r)})),r.deferred.promise}}readDeferred(e){const t=this.s.read(e.length);t?(e.buffer.set(t,e.offset),e.deferred.resolve(t.length),this.deferred=null):this.s.once("readable",(()=>{this.readDeferred(e)}))}reject(e){this.endOfStream=!0,this.deferred&&(this.deferred.reject(e),this.deferred=null)}}},5167:(e,t,a)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.StreamReader=t.EndOfStreamError=void 0;var r=a(7279);Object.defineProperty(t,"EndOfStreamError",{enumerable:!0,get:function(){return r.EndOfStreamError}});var i=a(6654);Object.defineProperty(t,"StreamReader",{enumerable:!0,get:function(){return i.StreamReader}})},4155:e=>{var t,a,r=e.exports={};function i(){throw new Error("setTimeout has not been defined")}function n(){throw new Error("clearTimeout has not been defined")}function s(e){if(t===setTimeout)return setTimeout(e,0);if((t===i||!t)&&setTimeout)return t=setTimeout,setTimeout(e,0);try{return t(e,0)}catch(a){try{return t.call(null,e,0)}catch(a){return t.call(this,e,0)}}}!function(){try{t="function"==typeof setTimeout?setTimeout:i}catch(e){t=i}try{a="function"==typeof clearTimeout?clearTimeout:n}catch(e){a=n}}();var o,c=[],l=!1,u=-1;function d(){l&&o&&(l=!1,o.length?c=o.concat(c):u=-1,c.length&&m())}function m(){if(!l){var e=s(d);l=!0;for(var t=c.length;t;){for(o=c,c=[];++u1)for(var a=1;a{"use strict";var t={};function a(e,a,r){r||(r=Error);var i=function(e){var t,r;function i(t,r,i){return e.call(this,function(e,t,r){return"string"==typeof a?a:a(e,t,r)}(t,r,i))||this}return r=e,(t=i).prototype=Object.create(r.prototype),t.prototype.constructor=t,t.__proto__=r,i}(r);i.prototype.name=r.name,i.prototype.code=e,t[e]=i}function r(e,t){if(Array.isArray(e)){var a=e.length;return e=e.map((function(e){return String(e)})),a>2?"one of ".concat(t," ").concat(e.slice(0,a-1).join(", "),", or ")+e[a-1]:2===a?"one of ".concat(t," ").concat(e[0]," or ").concat(e[1]):"of ".concat(t," ").concat(e[0])}return"of ".concat(t," ").concat(String(e))}a("ERR_INVALID_OPT_VALUE",(function(e,t){return'The value "'+t+'" is invalid for option "'+e+'"'}),TypeError),a("ERR_INVALID_ARG_TYPE",(function(e,t,a){var i,n,s,o,c;if("string"==typeof t&&(n="not ",t.substr(0,n.length)===n)?(i="must not be",t=t.replace(/^not /,"")):i="must be",function(e,t,a){return(void 0===a||a>e.length)&&(a=e.length),e.substring(a-t.length,a)===t}(e," argument"))s="The ".concat(e," ").concat(i," ").concat(r(t,"type"));else{var l=("number"!=typeof c&&(c=0),c+".".length>(o=e).length||-1===o.indexOf(".",c)?"argument":"property");s='The "'.concat(e,'" ').concat(l," ").concat(i," ").concat(r(t,"type"))}return s+". Received type ".concat(typeof a)}),TypeError),a("ERR_STREAM_PUSH_AFTER_EOF","stream.push() after EOF"),a("ERR_METHOD_NOT_IMPLEMENTED",(function(e){return"The "+e+" method is not implemented"})),a("ERR_STREAM_PREMATURE_CLOSE","Premature close"),a("ERR_STREAM_DESTROYED",(function(e){return"Cannot call "+e+" after a stream was destroyed"})),a("ERR_MULTIPLE_CALLBACK","Callback called multiple times"),a("ERR_STREAM_CANNOT_PIPE","Cannot pipe, not readable"),a("ERR_STREAM_WRITE_AFTER_END","write after end"),a("ERR_STREAM_NULL_VALUES","May not write null values to stream",TypeError),a("ERR_UNKNOWN_ENCODING",(function(e){return"Unknown encoding: "+e}),TypeError),a("ERR_STREAM_UNSHIFT_AFTER_END_EVENT","stream.unshift() after end event"),e.exports.q=t},6753:(e,t,a)=>{"use strict";var r=a(4155),i=Object.keys||function(e){var t=[];for(var a in e)t.push(a);return t};e.exports=u;var n=a(9481),s=a(4229);a(5717)(u,n);for(var o=i(s.prototype),c=0;c{"use strict";e.exports=i;var r=a(2303);function i(e){if(!(this instanceof i))return new i(e);r.call(this,e)}a(5717)(i,r),i.prototype._transform=function(e,t,a){a(null,e)}},9481:(e,t,a)=>{"use strict";var r,i=a(4155);e.exports=_,_.ReadableState=S,a(7187).EventEmitter;var n,s=function(e,t){return e.listeners(t).length},o=a(2503),c=a(8764).Buffer,l=a.g.Uint8Array||function(){},u=a(4616);n=u&&u.debuglog?u.debuglog("stream"):function(){};var d,m,p,f=a(7327),h=a(1195),g=a(2457).getHighWaterMark,T=a(4281).q,b=T.ERR_INVALID_ARG_TYPE,y=T.ERR_STREAM_PUSH_AFTER_EOF,k=T.ERR_METHOD_NOT_IMPLEMENTED,v=T.ERR_STREAM_UNSHIFT_AFTER_END_EVENT;a(5717)(_,o);var w=h.errorOrDestroy,I=["error","close","destroy","pause","resume"];function S(e,t,i){r=r||a(6753),e=e||{},"boolean"!=typeof i&&(i=t instanceof r),this.objectMode=!!e.objectMode,i&&(this.objectMode=this.objectMode||!!e.readableObjectMode),this.highWaterMark=g(this,e,"readableHighWaterMark",i),this.buffer=new f,this.length=0,this.pipes=null,this.pipesCount=0,this.flowing=null,this.ended=!1,this.endEmitted=!1,this.reading=!1,this.sync=!0,this.needReadable=!1,this.emittedReadable=!1,this.readableListening=!1,this.resumeScheduled=!1,this.paused=!0,this.emitClose=!1!==e.emitClose,this.autoDestroy=!!e.autoDestroy,this.destroyed=!1,this.defaultEncoding=e.defaultEncoding||"utf8",this.awaitDrain=0,this.readingMore=!1,this.decoder=null,this.encoding=null,e.encoding&&(d||(d=a(2553).s),this.decoder=new d(e.encoding),this.encoding=e.encoding)}function _(e){if(r=r||a(6753),!(this instanceof _))return new _(e);var t=this instanceof r;this._readableState=new S(e,this,t),this.readable=!0,e&&("function"==typeof e.read&&(this._read=e.read),"function"==typeof e.destroy&&(this._destroy=e.destroy)),o.call(this)}function E(e,t,a,r,i){n("readableAddChunk",t);var s,o=e._readableState;if(null===t)o.reading=!1,function(e,t){if(n("onEofChunk"),!t.ended){if(t.decoder){var a=t.decoder.end();a&&a.length&&(t.buffer.push(a),t.length+=t.objectMode?1:a.length)}t.ended=!0,t.sync?x(e):(t.needReadable=!1,t.emittedReadable||(t.emittedReadable=!0,B(e)))}}(e,o);else if(i||(s=function(e,t){var a,r;return r=t,c.isBuffer(r)||r instanceof l||"string"==typeof t||void 0===t||e.objectMode||(a=new b("chunk",["string","Buffer","Uint8Array"],t)),a}(o,t)),s)w(e,s);else if(o.objectMode||t&&t.length>0)if("string"==typeof t||o.objectMode||Object.getPrototypeOf(t)===c.prototype||(t=function(e){return c.from(e)}(t)),r)o.endEmitted?w(e,new v):C(e,o,t,!0);else if(o.ended)w(e,new y);else{if(o.destroyed)return!1;o.reading=!1,o.decoder&&!a?(t=o.decoder.write(t),o.objectMode||0!==t.length?C(e,o,t,!1):P(e,o)):C(e,o,t,!1)}else r||(o.reading=!1,P(e,o));return!o.ended&&(o.lengtht.highWaterMark&&(t.highWaterMark=function(e){return e>=A?e=A:(e--,e|=e>>>1,e|=e>>>2,e|=e>>>4,e|=e>>>8,e|=e>>>16,e++),e}(e)),e<=t.length?e:t.ended?t.length:(t.needReadable=!0,0))}function x(e){var t=e._readableState;n("emitReadable",t.needReadable,t.emittedReadable),t.needReadable=!1,t.emittedReadable||(n("emitReadable",t.flowing),t.emittedReadable=!0,i.nextTick(B,e))}function B(e){var t=e._readableState;n("emitReadable_",t.destroyed,t.length,t.ended),t.destroyed||!t.length&&!t.ended||(e.emit("readable"),t.emittedReadable=!1),t.needReadable=!t.flowing&&!t.ended&&t.length<=t.highWaterMark,z(e)}function P(e,t){t.readingMore||(t.readingMore=!0,i.nextTick(M,e,t))}function M(e,t){for(;!t.reading&&!t.ended&&(t.length0,t.resumeScheduled&&!t.paused?t.flowing=!0:e.listenerCount("data")>0&&e.resume()}function O(e){n("readable nexttick read 0"),e.read(0)}function R(e,t){n("resume",t.reading),t.reading||e.read(0),t.resumeScheduled=!1,e.emit("resume"),z(e),t.flowing&&!t.reading&&e.read(0)}function z(e){var t=e._readableState;for(n("flow",t.flowing);t.flowing&&null!==e.read(););}function N(e,t){return 0===t.length?null:(t.objectMode?a=t.buffer.shift():!e||e>=t.length?(a=t.decoder?t.buffer.join(""):1===t.buffer.length?t.buffer.first():t.buffer.concat(t.length),t.buffer.clear()):a=t.buffer.consume(e,t.decoder),a);var a}function L(e){var t=e._readableState;n("endReadable",t.endEmitted),t.endEmitted||(t.ended=!0,i.nextTick(U,t,e))}function U(e,t){if(n("endReadableNT",e.endEmitted,e.length),!e.endEmitted&&0===e.length&&(e.endEmitted=!0,t.readable=!1,t.emit("end"),e.autoDestroy)){var a=t._writableState;(!a||a.autoDestroy&&a.finished)&&t.destroy()}}function j(e,t){for(var a=0,r=e.length;a=t.highWaterMark:t.length>0)||t.ended))return n("read: emitReadable",t.length,t.ended),0===t.length&&t.ended?L(this):x(this),null;if(0===(e=D(e,t))&&t.ended)return 0===t.length&&L(this),null;var r,i=t.needReadable;return n("need readable",i),(0===t.length||t.length-e0?N(e,t):null)?(t.needReadable=t.length<=t.highWaterMark,e=0):(t.length-=e,t.awaitDrain=0),0===t.length&&(t.ended||(t.needReadable=!0),a!==e&&t.ended&&L(this)),null!==r&&this.emit("data",r),r},_.prototype._read=function(e){w(this,new k("_read()"))},_.prototype.pipe=function(e,t){var a=this,r=this._readableState;switch(r.pipesCount){case 0:r.pipes=e;break;case 1:r.pipes=[r.pipes,e];break;default:r.pipes.push(e)}r.pipesCount+=1,n("pipe count=%d opts=%j",r.pipesCount,t);var o=t&&!1===t.end||e===i.stdout||e===i.stderr?h:c;function c(){n("onend"),e.end()}r.endEmitted?i.nextTick(o):a.once("end",o),e.on("unpipe",(function t(i,s){n("onunpipe"),i===a&&s&&!1===s.hasUnpiped&&(s.hasUnpiped=!0,n("cleanup"),e.removeListener("close",p),e.removeListener("finish",f),e.removeListener("drain",l),e.removeListener("error",m),e.removeListener("unpipe",t),a.removeListener("end",c),a.removeListener("end",h),a.removeListener("data",d),u=!0,!r.awaitDrain||e._writableState&&!e._writableState.needDrain||l())}));var l=function(e){return function(){var t=e._readableState;n("pipeOnDrain",t.awaitDrain),t.awaitDrain&&t.awaitDrain--,0===t.awaitDrain&&s(e,"data")&&(t.flowing=!0,z(e))}}(a);e.on("drain",l);var u=!1;function d(t){n("ondata");var i=e.write(t);n("dest.write",i),!1===i&&((1===r.pipesCount&&r.pipes===e||r.pipesCount>1&&-1!==j(r.pipes,e))&&!u&&(n("false write response, pause",r.awaitDrain),r.awaitDrain++),a.pause())}function m(t){n("onerror",t),h(),e.removeListener("error",m),0===s(e,"error")&&w(e,t)}function p(){e.removeListener("finish",f),h()}function f(){n("onfinish"),e.removeListener("close",p),h()}function h(){n("unpipe"),a.unpipe(e)}return a.on("data",d),function(e,t,a){if("function"==typeof e.prependListener)return e.prependListener(t,a);e._events&&e._events.error?Array.isArray(e._events.error)?e._events.error.unshift(a):e._events.error=[a,e._events.error]:e.on(t,a)}(e,"error",m),e.once("close",p),e.once("finish",f),e.emit("pipe",a),r.flowing||(n("pipe resume"),a.resume()),e},_.prototype.unpipe=function(e){var t=this._readableState,a={hasUnpiped:!1};if(0===t.pipesCount)return this;if(1===t.pipesCount)return e&&e!==t.pipes||(e||(e=t.pipes),t.pipes=null,t.pipesCount=0,t.flowing=!1,e&&e.emit("unpipe",this,a)),this;if(!e){var r=t.pipes,i=t.pipesCount;t.pipes=null,t.pipesCount=0,t.flowing=!1;for(var n=0;n0,!1!==r.flowing&&this.resume()):"readable"===e&&(r.endEmitted||r.readableListening||(r.readableListening=r.needReadable=!0,r.flowing=!1,r.emittedReadable=!1,n("on readable",r.length,r.reading),r.length?x(this):r.reading||i.nextTick(O,this))),a},_.prototype.addListener=_.prototype.on,_.prototype.removeListener=function(e,t){var a=o.prototype.removeListener.call(this,e,t);return"readable"===e&&i.nextTick(F,this),a},_.prototype.removeAllListeners=function(e){var t=o.prototype.removeAllListeners.apply(this,arguments);return"readable"!==e&&void 0!==e||i.nextTick(F,this),t},_.prototype.resume=function(){var e=this._readableState;return e.flowing||(n("resume"),e.flowing=!e.readableListening,function(e,t){t.resumeScheduled||(t.resumeScheduled=!0,i.nextTick(R,e,t))}(this,e)),e.paused=!1,this},_.prototype.pause=function(){return n("call pause flowing=%j",this._readableState.flowing),!1!==this._readableState.flowing&&(n("pause"),this._readableState.flowing=!1,this.emit("pause")),this._readableState.paused=!0,this},_.prototype.wrap=function(e){var t=this,a=this._readableState,r=!1;for(var i in e.on("end",(function(){if(n("wrapped end"),a.decoder&&!a.ended){var e=a.decoder.end();e&&e.length&&t.push(e)}t.push(null)})),e.on("data",(function(i){n("wrapped data"),a.decoder&&(i=a.decoder.write(i)),a.objectMode&&null==i||(a.objectMode||i&&i.length)&&(t.push(i)||(r=!0,e.pause()))})),e)void 0===this[i]&&"function"==typeof e[i]&&(this[i]=function(t){return function(){return e[t].apply(e,arguments)}}(i));for(var s=0;s{"use strict";e.exports=u;var r=a(4281).q,i=r.ERR_METHOD_NOT_IMPLEMENTED,n=r.ERR_MULTIPLE_CALLBACK,s=r.ERR_TRANSFORM_ALREADY_TRANSFORMING,o=r.ERR_TRANSFORM_WITH_LENGTH_0,c=a(6753);function l(e,t){var a=this._transformState;a.transforming=!1;var r=a.writecb;if(null===r)return this.emit("error",new n);a.writechunk=null,a.writecb=null,null!=t&&this.push(t),r(e);var i=this._readableState;i.reading=!1,(i.needReadable||i.length{"use strict";var r,i=a(4155);function n(e){var t=this;this.next=null,this.entry=null,this.finish=function(){!function(e,t,a){var r=e.entry;for(e.entry=null;r;){var i=r.callback;t.pendingcb--,i(undefined),r=r.next}t.corkedRequestsFree.next=e}(t,e)}}e.exports=_,_.WritableState=S;var s,o={deprecate:a(4927)},c=a(2503),l=a(8764).Buffer,u=a.g.Uint8Array||function(){},d=a(1195),m=a(2457).getHighWaterMark,p=a(4281).q,f=p.ERR_INVALID_ARG_TYPE,h=p.ERR_METHOD_NOT_IMPLEMENTED,g=p.ERR_MULTIPLE_CALLBACK,T=p.ERR_STREAM_CANNOT_PIPE,b=p.ERR_STREAM_DESTROYED,y=p.ERR_STREAM_NULL_VALUES,k=p.ERR_STREAM_WRITE_AFTER_END,v=p.ERR_UNKNOWN_ENCODING,w=d.errorOrDestroy;function I(){}function S(e,t,s){r=r||a(6753),e=e||{},"boolean"!=typeof s&&(s=t instanceof r),this.objectMode=!!e.objectMode,s&&(this.objectMode=this.objectMode||!!e.writableObjectMode),this.highWaterMark=m(this,e,"writableHighWaterMark",s),this.finalCalled=!1,this.needDrain=!1,this.ending=!1,this.ended=!1,this.finished=!1,this.destroyed=!1;var o=!1===e.decodeStrings;this.decodeStrings=!o,this.defaultEncoding=e.defaultEncoding||"utf8",this.length=0,this.writing=!1,this.corked=0,this.sync=!0,this.bufferProcessing=!1,this.onwrite=function(e){!function(e,t){var a=e._writableState,r=a.sync,n=a.writecb;if("function"!=typeof n)throw new g;if(function(e){e.writing=!1,e.writecb=null,e.length-=e.writelen,e.writelen=0}(a),t)!function(e,t,a,r,n){--t.pendingcb,a?(i.nextTick(n,r),i.nextTick(B,e,t),e._writableState.errorEmitted=!0,w(e,r)):(n(r),e._writableState.errorEmitted=!0,w(e,r),B(e,t))}(e,a,r,t,n);else{var s=D(a)||e.destroyed;s||a.corked||a.bufferProcessing||!a.bufferedRequest||A(e,a),r?i.nextTick(C,e,a,s,n):C(e,a,s,n)}}(t,e)},this.writecb=null,this.writelen=0,this.bufferedRequest=null,this.lastBufferedRequest=null,this.pendingcb=0,this.prefinished=!1,this.errorEmitted=!1,this.emitClose=!1!==e.emitClose,this.autoDestroy=!!e.autoDestroy,this.bufferedRequestCount=0,this.corkedRequestsFree=new n(this)}function _(e){var t=this instanceof(r=r||a(6753));if(!t&&!s.call(_,this))return new _(e);this._writableState=new S(e,this,t),this.writable=!0,e&&("function"==typeof e.write&&(this._write=e.write),"function"==typeof e.writev&&(this._writev=e.writev),"function"==typeof e.destroy&&(this._destroy=e.destroy),"function"==typeof e.final&&(this._final=e.final)),c.call(this)}function E(e,t,a,r,i,n,s){t.writelen=r,t.writecb=s,t.writing=!0,t.sync=!0,t.destroyed?t.onwrite(new b("write")):a?e._writev(i,t.onwrite):e._write(i,n,t.onwrite),t.sync=!1}function C(e,t,a,r){a||function(e,t){0===t.length&&t.needDrain&&(t.needDrain=!1,e.emit("drain"))}(e,t),t.pendingcb--,r(),B(e,t)}function A(e,t){t.bufferProcessing=!0;var a=t.bufferedRequest;if(e._writev&&a&&a.next){var r=t.bufferedRequestCount,i=new Array(r),s=t.corkedRequestsFree;s.entry=a;for(var o=0,c=!0;a;)i[o]=a,a.isBuf||(c=!1),a=a.next,o+=1;i.allBuffers=c,E(e,t,!0,t.length,i,"",s.finish),t.pendingcb++,t.lastBufferedRequest=null,s.next?(t.corkedRequestsFree=s.next,s.next=null):t.corkedRequestsFree=new n(t),t.bufferedRequestCount=0}else{for(;a;){var l=a.chunk,u=a.encoding,d=a.callback;if(E(e,t,!1,t.objectMode?1:l.length,l,u,d),a=a.next,t.bufferedRequestCount--,t.writing)break}null===a&&(t.lastBufferedRequest=null)}t.bufferedRequest=a,t.bufferProcessing=!1}function D(e){return e.ending&&0===e.length&&null===e.bufferedRequest&&!e.finished&&!e.writing}function x(e,t){e._final((function(a){t.pendingcb--,a&&w(e,a),t.prefinished=!0,e.emit("prefinish"),B(e,t)}))}function B(e,t){var a=D(t);if(a&&(function(e,t){t.prefinished||t.finalCalled||("function"!=typeof e._final||t.destroyed?(t.prefinished=!0,e.emit("prefinish")):(t.pendingcb++,t.finalCalled=!0,i.nextTick(x,e,t)))}(e,t),0===t.pendingcb&&(t.finished=!0,e.emit("finish"),t.autoDestroy))){var r=e._readableState;(!r||r.autoDestroy&&r.endEmitted)&&e.destroy()}return a}a(5717)(_,c),S.prototype.getBuffer=function(){for(var e=this.bufferedRequest,t=[];e;)t.push(e),e=e.next;return t},function(){try{Object.defineProperty(S.prototype,"buffer",{get:o.deprecate((function(){return this.getBuffer()}),"_writableState.buffer is deprecated. Use _writableState.getBuffer instead.","DEP0003")})}catch(e){}}(),"function"==typeof Symbol&&Symbol.hasInstance&&"function"==typeof Function.prototype[Symbol.hasInstance]?(s=Function.prototype[Symbol.hasInstance],Object.defineProperty(_,Symbol.hasInstance,{value:function(e){return!!s.call(this,e)||this===_&&e&&e._writableState instanceof S}})):s=function(e){return e instanceof this},_.prototype.pipe=function(){w(this,new T)},_.prototype.write=function(e,t,a){var r,n=this._writableState,s=!1,o=!n.objectMode&&(r=e,l.isBuffer(r)||r instanceof u);return o&&!l.isBuffer(e)&&(e=function(e){return l.from(e)}(e)),"function"==typeof t&&(a=t,t=null),o?t="buffer":t||(t=n.defaultEncoding),"function"!=typeof a&&(a=I),n.ending?function(e,t){var a=new k;w(e,a),i.nextTick(t,a)}(this,a):(o||function(e,t,a,r){var n;return null===a?n=new y:"string"==typeof a||t.objectMode||(n=new f("chunk",["string","Buffer"],a)),!n||(w(e,n),i.nextTick(r,n),!1)}(this,n,e,a))&&(n.pendingcb++,s=function(e,t,a,r,i,n){if(!a){var s=function(e,t,a){return e.objectMode||!1===e.decodeStrings||"string"!=typeof t||(t=l.from(t,a)),t}(t,r,i);r!==s&&(a=!0,i="buffer",r=s)}var o=t.objectMode?1:r.length;t.length+=o;var c=t.length-1))throw new v(e);return this._writableState.defaultEncoding=e,this},Object.defineProperty(_.prototype,"writableBuffer",{enumerable:!1,get:function(){return this._writableState&&this._writableState.getBuffer()}}),Object.defineProperty(_.prototype,"writableHighWaterMark",{enumerable:!1,get:function(){return this._writableState.highWaterMark}}),_.prototype._write=function(e,t,a){a(new h("_write()"))},_.prototype._writev=null,_.prototype.end=function(e,t,a){var r=this._writableState;return"function"==typeof e?(a=e,e=null,t=null):"function"==typeof t&&(a=t,t=null),null!=e&&this.write(e,t),r.corked&&(r.corked=1,this.uncork()),r.ending||function(e,t,a){t.ending=!0,B(e,t),a&&(t.finished?i.nextTick(a):e.once("finish",a)),t.ended=!0,e.writable=!1}(this,r,a),this},Object.defineProperty(_.prototype,"writableLength",{enumerable:!1,get:function(){return this._writableState.length}}),Object.defineProperty(_.prototype,"destroyed",{enumerable:!1,get:function(){return void 0!==this._writableState&&this._writableState.destroyed},set:function(e){this._writableState&&(this._writableState.destroyed=e)}}),_.prototype.destroy=d.destroy,_.prototype._undestroy=d.undestroy,_.prototype._destroy=function(e,t){t(e)}},5850:(e,t,a)=>{"use strict";var r,i=a(4155);function n(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}var s=a(8610),o=Symbol("lastResolve"),c=Symbol("lastReject"),l=Symbol("error"),u=Symbol("ended"),d=Symbol("lastPromise"),m=Symbol("handlePromise"),p=Symbol("stream");function f(e,t){return{value:e,done:t}}function h(e){var t=e[o];if(null!==t){var a=e[p].read();null!==a&&(e[d]=null,e[o]=null,e[c]=null,t(f(a,!1)))}}function g(e){i.nextTick(h,e)}var T=Object.getPrototypeOf((function(){})),b=Object.setPrototypeOf((n(r={get stream(){return this[p]},next:function(){var e=this,t=this[l];if(null!==t)return Promise.reject(t);if(this[u])return Promise.resolve(f(void 0,!0));if(this[p].destroyed)return new Promise((function(t,a){i.nextTick((function(){e[l]?a(e[l]):t(f(void 0,!0))}))}));var a,r=this[d];if(r)a=new Promise(function(e,t){return function(a,r){e.then((function(){t[u]?a(f(void 0,!0)):t[m](a,r)}),r)}}(r,this));else{var n=this[p].read();if(null!==n)return Promise.resolve(f(n,!1));a=new Promise(this[m])}return this[d]=a,a}},Symbol.asyncIterator,(function(){return this})),n(r,"return",(function(){var e=this;return new Promise((function(t,a){e[p].destroy(null,(function(e){e?a(e):t(f(void 0,!0))}))}))})),r),T);e.exports=function(e){var t,a=Object.create(b,(n(t={},p,{value:e,writable:!0}),n(t,o,{value:null,writable:!0}),n(t,c,{value:null,writable:!0}),n(t,l,{value:null,writable:!0}),n(t,u,{value:e._readableState.endEmitted,writable:!0}),n(t,m,{value:function(e,t){var r=a[p].read();r?(a[d]=null,a[o]=null,a[c]=null,e(f(r,!1))):(a[o]=e,a[c]=t)},writable:!0}),t));return a[d]=null,s(e,(function(e){if(e&&"ERR_STREAM_PREMATURE_CLOSE"!==e.code){var t=a[c];return null!==t&&(a[d]=null,a[o]=null,a[c]=null,t(e)),void(a[l]=e)}var r=a[o];null!==r&&(a[d]=null,a[o]=null,a[c]=null,r(f(void 0,!0))),a[u]=!0})),e.on("readable",g.bind(null,a)),a}},7327:(e,t,a)=>{"use strict";function r(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,r)}return a}function i(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function n(e,t){for(var a=0;a0?this.tail.next=t:this.head=t,this.tail=t,++this.length}},{key:"unshift",value:function(e){var t={data:e,next:this.head};0===this.length&&(this.tail=t),this.head=t,++this.length}},{key:"shift",value:function(){if(0!==this.length){var e=this.head.data;return 1===this.length?this.head=this.tail=null:this.head=this.head.next,--this.length,e}}},{key:"clear",value:function(){this.head=this.tail=null,this.length=0}},{key:"join",value:function(e){if(0===this.length)return"";for(var t=this.head,a=""+t.data;t=t.next;)a+=e+t.data;return a}},{key:"concat",value:function(e){if(0===this.length)return s.alloc(0);for(var t,a,r,i=s.allocUnsafe(e>>>0),n=this.head,o=0;n;)t=n.data,a=i,r=o,s.prototype.copy.call(t,a,r),o+=n.data.length,n=n.next;return i}},{key:"consume",value:function(e,t){var a;return ei.length?i.length:e;if(n===i.length?r+=i:r+=i.slice(0,e),0==(e-=n)){n===i.length?(++a,t.next?this.head=t.next:this.head=this.tail=null):(this.head=t,t.data=i.slice(n));break}++a}return this.length-=a,r}},{key:"_getBuffer",value:function(e){var t=s.allocUnsafe(e),a=this.head,r=1;for(a.data.copy(t),e-=a.data.length;a=a.next;){var i=a.data,n=e>i.length?i.length:e;if(i.copy(t,t.length-e,0,n),0==(e-=n)){n===i.length?(++r,a.next?this.head=a.next:this.head=this.tail=null):(this.head=a,a.data=i.slice(n));break}++r}return this.length-=r,t}},{key:c,value:function(e,t){return o(this,function(e){for(var t=1;t{"use strict";var r=a(4155);function i(e,t){s(e,t),n(e)}function n(e){e._writableState&&!e._writableState.emitClose||e._readableState&&!e._readableState.emitClose||e.emit("close")}function s(e,t){e.emit("error",t)}e.exports={destroy:function(e,t){var a=this,o=this._readableState&&this._readableState.destroyed,c=this._writableState&&this._writableState.destroyed;return o||c?(t?t(e):e&&(this._writableState?this._writableState.errorEmitted||(this._writableState.errorEmitted=!0,r.nextTick(s,this,e)):r.nextTick(s,this,e)),this):(this._readableState&&(this._readableState.destroyed=!0),this._writableState&&(this._writableState.destroyed=!0),this._destroy(e||null,(function(e){!t&&e?a._writableState?a._writableState.errorEmitted?r.nextTick(n,a):(a._writableState.errorEmitted=!0,r.nextTick(i,a,e)):r.nextTick(i,a,e):t?(r.nextTick(n,a),t(e)):r.nextTick(n,a)})),this)},undestroy:function(){this._readableState&&(this._readableState.destroyed=!1,this._readableState.reading=!1,this._readableState.ended=!1,this._readableState.endEmitted=!1),this._writableState&&(this._writableState.destroyed=!1,this._writableState.ended=!1,this._writableState.ending=!1,this._writableState.finalCalled=!1,this._writableState.prefinished=!1,this._writableState.finished=!1,this._writableState.errorEmitted=!1)},errorOrDestroy:function(e,t){var a=e._readableState,r=e._writableState;a&&a.autoDestroy||r&&r.autoDestroy?e.destroy(t):e.emit("error",t)}}},8610:(e,t,a)=>{"use strict";var r=a(4281).q.ERR_STREAM_PREMATURE_CLOSE;function i(){}e.exports=function e(t,a,n){if("function"==typeof a)return e(t,null,a);a||(a={}),n=function(e){var t=!1;return function(){if(!t){t=!0;for(var a=arguments.length,r=new Array(a),i=0;i{e.exports=function(){throw new Error("Readable.from is not available in the browser")}},9946:(e,t,a)=>{"use strict";var r,i=a(4281).q,n=i.ERR_MISSING_ARGS,s=i.ERR_STREAM_DESTROYED;function o(e){if(e)throw e}function c(e,t,i,n){n=function(e){var t=!1;return function(){t||(t=!0,e.apply(void 0,arguments))}}(n);var o=!1;e.on("close",(function(){o=!0})),void 0===r&&(r=a(8610)),r(e,{readable:t,writable:i},(function(e){if(e)return n(e);o=!0,n()}));var c=!1;return function(t){if(!o&&!c)return c=!0,function(e){return e.setHeader&&"function"==typeof e.abort}(e)?e.abort():"function"==typeof e.destroy?e.destroy():void n(t||new s("pipe"))}}function l(e){e()}function u(e,t){return e.pipe(t)}function d(e){return e.length?"function"!=typeof e[e.length-1]?o:e.pop():o}e.exports=function(){for(var e=arguments.length,t=new Array(e),a=0;a0,(function(e){r||(r=e),e&&s.forEach(l),n||(s.forEach(l),i(r))}))}));return t.reduce(u)}},2457:(e,t,a)=>{"use strict";var r=a(4281).q.ERR_INVALID_OPT_VALUE;e.exports={getHighWaterMark:function(e,t,a,i){var n=function(e,t,a){return null!=e.highWaterMark?e.highWaterMark:t?e[a]:null}(t,i,a);if(null!=n){if(!isFinite(n)||Math.floor(n)!==n||n<0)throw new r(i?a:"highWaterMark",n);return Math.floor(n)}return e.objectMode?16:16384}}},2503:(e,t,a)=>{e.exports=a(7187).EventEmitter},8473:(e,t,a)=>{(t=e.exports=a(9481)).Stream=t,t.Readable=t,t.Writable=a(4229),t.Duplex=a(6753),t.Transform=a(2303),t.PassThrough=a(2725),t.finished=a(8610),t.pipeline=a(9946)},8090:(e,t,a)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.ReadableWebToNodeStream=void 0;const r=a(8473);class i extends r.Readable{constructor(e){super(),this.bytesRead=0,this.released=!1,this.reader=e.getReader()}async _read(){if(this.released)return void this.push(null);this.pendingRead=this.reader.read();const e=await this.pendingRead;delete this.pendingRead,e.done||this.released?this.push(null):(this.bytesRead+=e.value.length,this.push(e.value))}async waitForReadToComplete(){this.pendingRead&&await this.pendingRead}async close(){await this.syncAndRelease()}async syncAndRelease(){this.released=!0,await this.waitForReadToComplete(),await this.reader.releaseLock()}}t.ReadableWebToNodeStream=i},2553:(e,t,a)=>{"use strict";var r=a(3167).Buffer,i=r.isEncoding||function(e){switch((e=""+e)&&e.toLowerCase()){case"hex":case"utf8":case"utf-8":case"ascii":case"binary":case"base64":case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":case"raw":return!0;default:return!1}};function n(e){var t;switch(this.encoding=function(e){var t=function(e){if(!e)return"utf8";for(var t;;)switch(e){case"utf8":case"utf-8":return"utf8";case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return"utf16le";case"latin1":case"binary":return"latin1";case"base64":case"ascii":case"hex":return e;default:if(t)return;e=(""+e).toLowerCase(),t=!0}}(e);if("string"!=typeof t&&(r.isEncoding===i||!i(e)))throw new Error("Unknown encoding: "+e);return t||e}(e),this.encoding){case"utf16le":this.text=c,this.end=l,t=4;break;case"utf8":this.fillLast=o,t=4;break;case"base64":this.text=u,this.end=d,t=3;break;default:return this.write=m,void(this.end=p)}this.lastNeed=0,this.lastTotal=0,this.lastChar=r.allocUnsafe(t)}function s(e){return e<=127?0:e>>5==6?2:e>>4==14?3:e>>3==30?4:e>>6==2?-1:-2}function o(e){var t=this.lastTotal-this.lastNeed,a=function(e,t,a){if(128!=(192&t[0]))return e.lastNeed=0,"�";if(e.lastNeed>1&&t.length>1){if(128!=(192&t[1]))return e.lastNeed=1,"�";if(e.lastNeed>2&&t.length>2&&128!=(192&t[2]))return e.lastNeed=2,"�"}}(this,e);return void 0!==a?a:this.lastNeed<=e.length?(e.copy(this.lastChar,t,0,this.lastNeed),this.lastChar.toString(this.encoding,0,this.lastTotal)):(e.copy(this.lastChar,t,0,e.length),void(this.lastNeed-=e.length))}function c(e,t){if((e.length-t)%2==0){var a=e.toString("utf16le",t);if(a){var r=a.charCodeAt(a.length-1);if(r>=55296&&r<=56319)return this.lastNeed=2,this.lastTotal=4,this.lastChar[0]=e[e.length-2],this.lastChar[1]=e[e.length-1],a.slice(0,-1)}return a}return this.lastNeed=1,this.lastTotal=2,this.lastChar[0]=e[e.length-1],e.toString("utf16le",t,e.length-1)}function l(e){var t=e&&e.length?this.write(e):"";if(this.lastNeed){var a=this.lastTotal-this.lastNeed;return t+this.lastChar.toString("utf16le",0,a)}return t}function u(e,t){var a=(e.length-t)%3;return 0===a?e.toString("base64",t):(this.lastNeed=3-a,this.lastTotal=3,1===a?this.lastChar[0]=e[e.length-1]:(this.lastChar[0]=e[e.length-2],this.lastChar[1]=e[e.length-1]),e.toString("base64",t,e.length-a))}function d(e){var t=e&&e.length?this.write(e):"";return this.lastNeed?t+this.lastChar.toString("base64",0,3-this.lastNeed):t}function m(e){return e.toString(this.encoding)}function p(e){return e&&e.length?this.write(e):""}t.s=n,n.prototype.write=function(e){if(0===e.length)return"";var t,a;if(this.lastNeed){if(void 0===(t=this.fillLast(e)))return"";a=this.lastNeed,this.lastNeed=0}else a=0;return a=0?(i>0&&(e.lastNeed=i-1),i):--r=0?(i>0&&(e.lastNeed=i-2),i):--r=0?(i>0&&(2===i?i=0:e.lastNeed=i-3),i):0}(this,e,t);if(!this.lastNeed)return e.toString("utf8",t);this.lastTotal=a;var r=e.length-(a-this.lastNeed);return e.copy(this.lastChar,0,r),e.toString("utf8",t,r)},n.prototype.fillLast=function(e){if(this.lastNeed<=e.length)return e.copy(this.lastChar,this.lastTotal-this.lastNeed,0,this.lastNeed),this.lastChar.toString(this.encoding,0,this.lastTotal);e.copy(this.lastChar,this.lastTotal-this.lastNeed,0,e.length),this.lastNeed-=e.length}},3167:(e,t,a)=>{var r=a(8764),i=r.Buffer;function n(e,t){for(var a in e)t[a]=e[a]}function s(e,t,a){return i(e,t,a)}i.from&&i.alloc&&i.allocUnsafe&&i.allocUnsafeSlow?e.exports=r:(n(r,t),t.Buffer=s),s.prototype=Object.create(i.prototype),n(i,s),s.from=function(e,t,a){if("number"==typeof e)throw new TypeError("Argument must not be a number");return i(e,t,a)},s.alloc=function(e,t,a){if("number"!=typeof e)throw new TypeError("Argument must be a number");var r=i(e);return void 0!==t?"string"==typeof a?r.fill(t,a):r.fill(t):r.fill(0),r},s.allocUnsafe=function(e){if("number"!=typeof e)throw new TypeError("Argument must be a number");return i(e)},s.allocUnsafeSlow=function(e){if("number"!=typeof e)throw new TypeError("Argument must be a number");return r.SlowBuffer(e)}},842:(e,t,a)=>{"use strict";var r=a(8764).Buffer;Object.defineProperty(t,"__esModule",{value:!0}),t.AbstractTokenizer=void 0;const i=a(5167);t.AbstractTokenizer=class{constructor(e){this.position=0,this.numBuffer=new Uint8Array(8),this.fileInfo=e||{}}async readToken(e,t=this.position){const a=r.alloc(e.len);if(await this.readBuffer(a,{position:t})t)return this.position+=t,t}return this.position+=e,e}async close(){}normalizeOptions(e,t){if(t&&void 0!==t.position&&t.position{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.BufferTokenizer=void 0;const r=a(5167),i=a(842);class n extends i.AbstractTokenizer{constructor(e,t){super(t),this.uint8Array=e,this.fileInfo.size=this.fileInfo.size?this.fileInfo.size:e.length}async readBuffer(e,t){if(t&&t.position){if(t.position{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.ReadStreamTokenizer=void 0;const r=a(842),i=a(5167);class n extends r.AbstractTokenizer{constructor(e,t){super(t),this.streamReader=new i.StreamReader(e)}async getFileInfo(){return this.fileInfo}async readBuffer(e,t){const a=this.normalizeOptions(e,t),r=a.position-this.position;if(r>0)return await this.ignore(r),this.readBuffer(e,t);if(r<0)throw new Error("`options.position` must be equal or greater than `tokenizer.position`");if(0===a.length)return 0;const n=await this.streamReader.read(e,a.offset,a.length);if(this.position+=n,(!t||!t.mayBeLess)&&n0){const i=new Uint8Array(a.length+t);return r=await this.peekBuffer(i,{mayBeLess:a.mayBeLess}),e.set(i.subarray(t),a.offset),r-t}if(t<0)throw new Error("Cannot peek from a negative offset in a stream")}if(a.length>0){try{r=await this.streamReader.peek(e,a.offset,a.length)}catch(e){if(t&&t.mayBeLess&&e instanceof i.EndOfStreamError)return 0;throw e}if(!a.mayBeLess&&r{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.fromBuffer=t.fromStream=t.EndOfStreamError=void 0;const r=a(599),i=a(778);var n=a(5167);Object.defineProperty(t,"EndOfStreamError",{enumerable:!0,get:function(){return n.EndOfStreamError}}),t.fromStream=function(e,t){return t=t||{},new r.ReadStreamTokenizer(e,t)},t.fromBuffer=function(e,t){return new i.BufferTokenizer(e,t)}},3416:(e,t,a)=>{"use strict";var r=a(8764).Buffer;Object.defineProperty(t,"__esModule",{value:!0}),t.AnsiStringType=t.StringType=t.BufferType=t.Uint8ArrayType=t.IgnoreType=t.Float80_LE=t.Float80_BE=t.Float64_LE=t.Float64_BE=t.Float32_LE=t.Float32_BE=t.Float16_LE=t.Float16_BE=t.INT64_BE=t.UINT64_BE=t.INT64_LE=t.UINT64_LE=t.INT32_LE=t.INT32_BE=t.INT24_BE=t.INT24_LE=t.INT16_LE=t.INT16_BE=t.INT8=t.UINT32_BE=t.UINT32_LE=t.UINT24_BE=t.UINT24_LE=t.UINT16_BE=t.UINT16_LE=t.UINT8=void 0;const i=a(645);function n(e){return new DataView(e.buffer,e.byteOffset)}t.UINT8={len:1,get:(e,t)=>n(e).getUint8(t),put:(e,t,a)=>(n(e).setUint8(t,a),t+1)},t.UINT16_LE={len:2,get:(e,t)=>n(e).getUint16(t,!0),put:(e,t,a)=>(n(e).setUint16(t,a,!0),t+2)},t.UINT16_BE={len:2,get:(e,t)=>n(e).getUint16(t),put:(e,t,a)=>(n(e).setUint16(t,a),t+2)},t.UINT24_LE={len:3,get(e,t){const a=n(e);return a.getUint8(t)+(a.getUint16(t+1,!0)<<8)},put(e,t,a){const r=n(e);return r.setUint8(t,255&a),r.setUint16(t+1,a>>8,!0),t+3}},t.UINT24_BE={len:3,get(e,t){const a=n(e);return(a.getUint16(t)<<8)+a.getUint8(t+2)},put(e,t,a){const r=n(e);return r.setUint16(t,a>>8),r.setUint8(t+2,255&a),t+3}},t.UINT32_LE={len:4,get:(e,t)=>n(e).getUint32(t,!0),put:(e,t,a)=>(n(e).setUint32(t,a,!0),t+4)},t.UINT32_BE={len:4,get:(e,t)=>n(e).getUint32(t),put:(e,t,a)=>(n(e).setUint32(t,a),t+4)},t.INT8={len:1,get:(e,t)=>n(e).getInt8(t),put:(e,t,a)=>(n(e).setInt8(t,a),t+2)},t.INT16_BE={len:2,get:(e,t)=>n(e).getInt16(t),put:(e,t,a)=>(n(e).setInt16(t,a),t+2)},t.INT16_LE={len:2,get:(e,t)=>n(e).getInt16(t,!0),put:(e,t,a)=>(n(e).setInt16(t,a,!0),t+2)},t.INT24_LE={len:3,get(e,a){const r=t.UINT24_LE.get(e,a);return r>8388607?r-16777216:r},put(e,t,a){const r=n(e);return r.setUint8(t,255&a),r.setUint16(t+1,a>>8,!0),t+3}},t.INT24_BE={len:3,get(e,a){const r=t.UINT24_BE.get(e,a);return r>8388607?r-16777216:r},put(e,t,a){const r=n(e);return r.setUint16(t,a>>8),r.setUint8(t+2,255&a),t+3}},t.INT32_BE={len:4,get:(e,t)=>n(e).getInt32(t),put:(e,t,a)=>(n(e).setInt32(t,a),t+4)},t.INT32_LE={len:4,get:(e,t)=>n(e).getInt32(t,!0),put:(e,t,a)=>(n(e).setInt32(t,a,!0),t+4)},t.UINT64_LE={len:8,get:(e,t)=>n(e).getBigUint64(t,!0),put:(e,t,a)=>(n(e).setBigUint64(t,a,!0),t+8)},t.INT64_LE={len:8,get:(e,t)=>n(e).getBigInt64(t,!0),put:(e,t,a)=>(n(e).setBigInt64(t,a,!0),t+8)},t.UINT64_BE={len:8,get:(e,t)=>n(e).getBigUint64(t),put:(e,t,a)=>(n(e).setBigUint64(t,a),t+8)},t.INT64_BE={len:8,get:(e,t)=>n(e).getBigInt64(t),put:(e,t,a)=>(n(e).setBigInt64(t,a),t+8)},t.Float16_BE={len:2,get(e,t){return i.read(e,t,!1,10,this.len)},put(e,t,a){return i.write(e,a,t,!1,10,this.len),t+this.len}},t.Float16_LE={len:2,get(e,t){return i.read(e,t,!0,10,this.len)},put(e,t,a){return i.write(e,a,t,!0,10,this.len),t+this.len}},t.Float32_BE={len:4,get:(e,t)=>n(e).getFloat32(t),put:(e,t,a)=>(n(e).setFloat32(t,a),t+4)},t.Float32_LE={len:4,get:(e,t)=>n(e).getFloat32(t,!0),put:(e,t,a)=>(n(e).setFloat32(t,a,!0),t+4)},t.Float64_BE={len:8,get:(e,t)=>n(e).getFloat64(t),put:(e,t,a)=>(n(e).setFloat64(t,a),t+8)},t.Float64_LE={len:8,get:(e,t)=>n(e).getFloat64(t,!0),put:(e,t,a)=>(n(e).setFloat64(t,a,!0),t+8)},t.Float80_BE={len:10,get(e,t){return i.read(e,t,!1,63,this.len)},put(e,t,a){return i.write(e,a,t,!1,63,this.len),t+this.len}},t.Float80_LE={len:10,get(e,t){return i.read(e,t,!0,63,this.len)},put(e,t,a){return i.write(e,a,t,!0,63,this.len),t+this.len}},t.IgnoreType=class{constructor(e){this.len=e}get(e,t){}},t.Uint8ArrayType=class{constructor(e){this.len=e}get(e,t){return e.subarray(t,t+this.len)}},t.BufferType=class{constructor(e){this.len=e}get(e,t){return r.from(e.subarray(t,t+this.len))}},t.StringType=class{constructor(e,t){this.len=e,this.encoding=t}get(e,t){return r.from(e).toString(this.encoding,t,t+this.len)}};class s{constructor(e){this.len=e}static decode(e,t,a){let r="";for(let i=t;i>10),56320+(1023&e)))}static singleByteDecoder(e){if(s.inRange(e,0,127))return e;const t=s.windows1252[e-128];if(null===t)throw Error("invaliding encoding");return t}get(e,t=0){return s.decode(e,t,t+this.len)}}t.AnsiStringType=s,s.windows1252=[8364,129,8218,402,8222,8230,8224,8225,710,8240,352,8249,338,141,381,143,144,8216,8217,8220,8221,8226,8211,8212,732,8482,353,8250,339,157,382,376,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255]},4927:(e,t,a)=>{function r(e){try{if(!a.g.localStorage)return!1}catch(e){return!1}var t=a.g.localStorage[e];return null!=t&&"true"===String(t).toLowerCase()}e.exports=function(e,t){if(r("noDeprecation"))return e;var a=!1;return function(){if(!a){if(r("throwDeprecation"))throw new Error(t);r("traceDeprecation")?console.trace(t):console.warn(t),a=!0}return e.apply(this,arguments)}}}}]); +//# sourceMappingURL=463.61167f99e64c02fb46d6.js.map \ No newline at end of file diff --git a/dist/463.61167f99e64c02fb46d6.js.LICENSE.txt b/dist/463.61167f99e64c02fb46d6.js.LICENSE.txt new file mode 100644 index 000000000..dcb8f884b --- /dev/null +++ b/dist/463.61167f99e64c02fb46d6.js.LICENSE.txt @@ -0,0 +1,13 @@ +/*! + * content-type + * Copyright(c) 2015 Douglas Christopher Wilson + * MIT Licensed + */ + +/*! + * media-typer + * Copyright(c) 2014-2017 Douglas Christopher Wilson + * MIT Licensed + */ + +/*! safe-buffer. MIT License. Feross Aboukhadijeh */ diff --git a/dist/463.61167f99e64c02fb46d6.js.map b/dist/463.61167f99e64c02fb46d6.js.map new file mode 100644 index 000000000..97aeeecca --- /dev/null +++ b/dist/463.61167f99e64c02fb46d6.js.map @@ -0,0 +1 @@ +{"version":3,"file":"463.61167f99e64c02fb46d6.js","mappings":"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AAG,IACK,IAAIqN,IAAI3F,UAAU4F,cAI3B1T,OAAOiG,eAAeuN,SAAU,YAAa,CAC5CpN,IAAG,IACK,IAAIqN,IAAI3F,UAAU6F,aAI3B7R,OAAO5B,QAAUsT,gCCt7CjB1R,EAAO5B,QAAU,CAChBwT,WAAY,CACX,MACA,MACA,OACA,MACA,OACA,OACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,OACA,MACA,MACA,OACA,MACA,MACA,MACA,KACA,MACA,KACA,MACA,MACA,MACA,MACA,OACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,OACA,OACA,MACA,MACA,MACA,MACA,OACA,MACA,MACA,MACA,OACA,OACA,QACA,MACA,MACA,MACA,MACA,MACA,KACA,KACA,SACA,MACA,MACA,MACA,MACA,MACA,KACA,MACA,IACA,KACA,MACA,MACA,MACA,QACA,MACA,OACA,OACA,OACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,OACA,OACA,MACA,MACA,MACA,KACA,MACA,MACA,MACA,OACA,MACA,MACA,QACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,QACA,MACA,MACA,MACA,KACA,MACA,KACA,KACA,MACA,OACA,MACA,MACA,MACA,OACA,MACA,MACA,MACA,MACA,MACA,OAEDC,UAAW,CACV,aACA,YACA,YACA,aACA,aACA,cACA,oBACA,oBACA,aACA,YACA,qBACA,4BACA,yBACA,uBACA,0BACA,0CACA,iDACA,kDACA,0EACA,4EACA,oEACA,kBACA,oBACA,+BACA,mBACA,sBACA,8BACA,gCACA,6BACA,YACA,aACA,mBACA,aACA,kBACA,gBACA,iBACA,cACA,iBACA,iBACA,yBACA,aACA,aACA,aACA,YACA,aACA,YACA,YACA,kBACA,eACA,YACA,gBACA,YACA,kBACA,2BACA,gCACA,kBACA,mBACA,YACA,aACA,gCACA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","sources":["webpack://telegram-t/./node_modules/content-type/index.js","webpack://telegram-t/./node_modules/debug/src/browser.js","webpack://telegram-t/./node_modules/debug/src/common.js","webpack://telegram-t/./node_modules/events/events.js","webpack://telegram-t/./node_modules/file-type/core.js","webpack://telegram-t/./node_modules/file-type/supported.js","webpack://telegram-t/./node_modules/file-type/util.js","webpack://telegram-t/./node_modules/inherits/inherits_browser.js","webpack://telegram-t/./node_modules/ms/index.js","webpack://telegram-t/./node_modules/music-metadata-browser/lib/index.js","webpack://telegram-t/./node_modules/music-metadata/lib/ParserFactory.js","webpack://telegram-t/./node_modules/music-metadata/lib/aiff/AiffParser.js","webpack://telegram-t/./node_modules/music-metadata/lib/aiff/AiffToken.js","webpack://telegram-t/./node_modules/music-metadata/lib/apev2/APEv2Parser.js","webpack://telegram-t/./node_modules/music-metadata/lib/apev2/APEv2TagMapper.js","webpack://telegram-t/./node_modules/music-metadata/lib/apev2/APEv2Token.js","webpack://telegram-t/./node_modules/music-metadata/lib/asf/AsfObject.js","webpack://telegram-t/./node_modules/music-metadata/lib/asf/AsfParser.js","webpack://telegram-t/./node_modules/music-metadata/lib/asf/AsfTagMapper.js","webpack://telegram-t/./node_modules/music-metadata/lib/asf/AsfUtil.js","webpack://telegram-t/./node_modules/music-metadata/lib/asf/GUID.js","webpack://telegram-t/./node_modules/music-metadata/lib/common/BasicParser.js","webpack://telegram-t/./node_modules/music-metadata/lib/common/CaseInsensitiveTagMap.js","webpack://telegram-t/./node_modules/music-metadata/lib/common/CombinedTagMapper.js","webpack://telegram-t/./node_modules/music-metadata/lib/common/FourCC.js","webpack://telegram-t/./node_modules/music-metadata/lib/common/GenericTagMapper.js","webpack://telegram-t/./node_modules/music-metadata/lib/common/GenericTagTypes.js","webpack://telegram-t/./node_modules/music-metadata/lib/common/MetadataCollector.js","webpack://telegram-t/./node_modules/music-metadata/lib/common/RandomUint8ArrayReader.js","webpack://telegram-t/./node_modules/music-metadata/lib/common/Util.js","webpack://telegram-t/./node_modules/music-metadata/lib/core.js","webpack://telegram-t/./node_modules/music-metadata/lib/dsdiff/DsdiffParser.js","webpack://telegram-t/./node_modules/music-metadata/lib/dsdiff/DsdiffToken.js","webpack://telegram-t/./node_modules/music-metadata/lib/dsf/DsfChunk.js","webpack://telegram-t/./node_modules/music-metadata/lib/dsf/DsfParser.js","webpack://telegram-t/./node_modules/music-metadata/lib/flac/FlacParser.js","webpack://telegram-t/./node_modules/music-metadata/lib/id3v1/ID3v1Parser.js","webpack://telegram-t/./node_modules/music-metadata/lib/id3v1/ID3v1TagMap.js","webpack://telegram-t/./node_modules/music-metadata/lib/id3v2/AbstractID3Parser.js","webpack://telegram-t/./node_modules/music-metadata/lib/id3v2/FrameParser.js","webpack://telegram-t/./node_modules/music-metadata/lib/id3v2/ID3v22TagMapper.js","webpack://telegram-t/./node_modules/music-metadata/lib/id3v2/ID3v24TagMapper.js","webpack://telegram-t/./node_modules/music-metadata/lib/id3v2/ID3v2Parser.js","webpack://telegram-t/./node_modules/music-metadata/lib/id3v2/ID3v2Token.js","webpack://telegram-t/./node_modules/music-metadata/lib/iff/index.js","webpack://telegram-t/./node_modules/music-metadata/lib/lyrics3/Lyrics3.js","webpack://telegram-t/./node_modules/music-metadata/lib/matroska/MatroskaDtd.js","webpack://telegram-t/./node_modules/music-metadata/lib/matroska/MatroskaParser.js","webpack://telegram-t/./node_modules/music-metadata/lib/matroska/MatroskaTagMapper.js","webpack://telegram-t/./node_modules/music-metadata/lib/matroska/types.js","webpack://telegram-t/./node_modules/music-metadata/lib/mp4/Atom.js","webpack://telegram-t/./node_modules/music-metadata/lib/mp4/AtomToken.js","webpack://telegram-t/./node_modules/music-metadata/lib/mp4/MP4Parser.js","webpack://telegram-t/./node_modules/music-metadata/lib/mp4/MP4TagMapper.js","webpack://telegram-t/./node_modules/music-metadata/lib/mpeg/ExtendedLameHeader.js","webpack://telegram-t/./node_modules/music-metadata/lib/mpeg/MpegParser.js","webpack://telegram-t/./node_modules/music-metadata/lib/mpeg/ReplayGainDataFormat.js","webpack://telegram-t/./node_modules/music-metadata/lib/mpeg/XingTag.js","webpack://telegram-t/./node_modules/music-metadata/lib/musepack/index.js","webpack://telegram-t/./node_modules/music-metadata/lib/musepack/sv7/BitReader.js","webpack://telegram-t/./node_modules/music-metadata/lib/musepack/sv7/MpcSv7Parser.js","webpack://telegram-t/./node_modules/music-metadata/lib/musepack/sv7/StreamVersion7.js","webpack://telegram-t/./node_modules/music-metadata/lib/musepack/sv8/MpcSv8Parser.js","webpack://telegram-t/./node_modules/music-metadata/lib/musepack/sv8/StreamVersion8.js","webpack://telegram-t/./node_modules/music-metadata/lib/ogg/OggParser.js","webpack://telegram-t/./node_modules/music-metadata/lib/ogg/opus/Opus.js","webpack://telegram-t/./node_modules/music-metadata/lib/ogg/opus/OpusParser.js","webpack://telegram-t/./node_modules/music-metadata/lib/ogg/speex/Speex.js","webpack://telegram-t/./node_modules/music-metadata/lib/ogg/speex/SpeexParser.js","webpack://telegram-t/./node_modules/music-metadata/lib/ogg/theora/Theora.js","webpack://telegram-t/./node_modules/music-metadata/lib/ogg/theora/TheoraParser.js","webpack://telegram-t/./node_modules/music-metadata/lib/ogg/vorbis/Vorbis.js","webpack://telegram-t/./node_modules/music-metadata/lib/ogg/vorbis/VorbisDecoder.js","webpack://telegram-t/./node_modules/music-metadata/lib/ogg/vorbis/VorbisParser.js","webpack://telegram-t/./node_modules/music-metadata/lib/ogg/vorbis/VorbisTagMapper.js","webpack://telegram-t/./node_modules/music-metadata/lib/riff/RiffChunk.js","webpack://telegram-t/./node_modules/music-metadata/lib/riff/RiffInfoTagMap.js","webpack://telegram-t/./node_modules/music-metadata/lib/type.js","webpack://telegram-t/./node_modules/music-metadata/lib/wav/BwfChunk.js","webpack://telegram-t/./node_modules/music-metadata/lib/wav/WaveChunk.js","webpack://telegram-t/./node_modules/music-metadata/lib/wav/WaveParser.js","webpack://telegram-t/./node_modules/music-metadata/lib/wavpack/WavPackParser.js","webpack://telegram-t/./node_modules/music-metadata/lib/wavpack/WavPackToken.js","webpack://telegram-t/./node_modules/music-metadata/node_modules/media-typer/index.js","webpack://telegram-t/./node_modules/peek-readable/lib/Deferred.js","webpack://telegram-t/./node_modules/peek-readable/lib/EndOfFileStream.js","webpack://telegram-t/./node_modules/peek-readable/lib/StreamReader.js","webpack://telegram-t/./node_modules/peek-readable/lib/index.js","webpack://telegram-t/./node_modules/process/browser.js","webpack://telegram-t/./node_modules/readable-stream/errors-browser.js","webpack://telegram-t/./node_modules/readable-stream/lib/_stream_duplex.js","webpack://telegram-t/./node_modules/readable-stream/lib/_stream_passthrough.js","webpack://telegram-t/./node_modules/readable-stream/lib/_stream_readable.js","webpack://telegram-t/./node_modules/readable-stream/lib/_stream_transform.js","webpack://telegram-t/./node_modules/readable-stream/lib/_stream_writable.js","webpack://telegram-t/./node_modules/readable-stream/lib/internal/streams/async_iterator.js","webpack://telegram-t/./node_modules/readable-stream/lib/internal/streams/buffer_list.js","webpack://telegram-t/./node_modules/readable-stream/lib/internal/streams/destroy.js","webpack://telegram-t/./node_modules/readable-stream/lib/internal/streams/end-of-stream.js","webpack://telegram-t/./node_modules/readable-stream/lib/internal/streams/from-browser.js","webpack://telegram-t/./node_modules/readable-stream/lib/internal/streams/pipeline.js","webpack://telegram-t/./node_modules/readable-stream/lib/internal/streams/state.js","webpack://telegram-t/./node_modules/readable-stream/lib/internal/streams/stream-browser.js","webpack://telegram-t/./node_modules/readable-stream/readable-browser.js","webpack://telegram-t/./node_modules/readable-web-to-node-stream/lib/index.js","webpack://telegram-t/./node_modules/string_decoder/lib/string_decoder.js","webpack://telegram-t/./node_modules/string_decoder/node_modules/safe-buffer/index.js","webpack://telegram-t/./node_modules/strtok3/lib/AbstractTokenizer.js","webpack://telegram-t/./node_modules/strtok3/lib/BufferTokenizer.js","webpack://telegram-t/./node_modules/strtok3/lib/ReadStreamTokenizer.js","webpack://telegram-t/./node_modules/strtok3/lib/core.js","webpack://telegram-t/./node_modules/token-types/lib/index.js","webpack://telegram-t/./node_modules/util-deprecate/browser.js"],"sourcesContent":["/*!\n * content-type\n * Copyright(c) 2015 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict'\n\n/**\n * RegExp to match *( \";\" parameter ) in RFC 7231 sec 3.1.1.1\n *\n * parameter = token \"=\" ( token / quoted-string )\n * token = 1*tchar\n * tchar = \"!\" / \"#\" / \"$\" / \"%\" / \"&\" / \"'\" / \"*\"\n * / \"+\" / \"-\" / \".\" / \"^\" / \"_\" / \"`\" / \"|\" / \"~\"\n * / DIGIT / ALPHA\n * ; any VCHAR, except delimiters\n * quoted-string = DQUOTE *( qdtext / quoted-pair ) DQUOTE\n * qdtext = HTAB / SP / %x21 / %x23-5B / %x5D-7E / obs-text\n * obs-text = %x80-FF\n * quoted-pair = \"\\\" ( HTAB / SP / VCHAR / obs-text )\n */\nvar PARAM_REGEXP = /; *([!#$%&'*+.^_`|~0-9A-Za-z-]+) *= *(\"(?:[\\u000b\\u0020\\u0021\\u0023-\\u005b\\u005d-\\u007e\\u0080-\\u00ff]|\\\\[\\u000b\\u0020-\\u00ff])*\"|[!#$%&'*+.^_`|~0-9A-Za-z-]+) */g\nvar TEXT_REGEXP = /^[\\u000b\\u0020-\\u007e\\u0080-\\u00ff]+$/\nvar TOKEN_REGEXP = /^[!#$%&'*+.^_`|~0-9A-Za-z-]+$/\n\n/**\n * RegExp to match quoted-pair in RFC 7230 sec 3.2.6\n *\n * quoted-pair = \"\\\" ( HTAB / SP / VCHAR / obs-text )\n * obs-text = %x80-FF\n */\nvar QESC_REGEXP = /\\\\([\\u000b\\u0020-\\u00ff])/g\n\n/**\n * RegExp to match chars that must be quoted-pair in RFC 7230 sec 3.2.6\n */\nvar QUOTE_REGEXP = /([\\\\\"])/g\n\n/**\n * RegExp to match type in RFC 7231 sec 3.1.1.1\n *\n * media-type = type \"/\" subtype\n * type = token\n * subtype = token\n */\nvar TYPE_REGEXP = /^[!#$%&'*+.^_`|~0-9A-Za-z-]+\\/[!#$%&'*+.^_`|~0-9A-Za-z-]+$/\n\n/**\n * Module exports.\n * @public\n */\n\nexports.format = format\nexports.parse = parse\n\n/**\n * Format object to media type.\n *\n * @param {object} obj\n * @return {string}\n * @public\n */\n\nfunction format (obj) {\n if (!obj || typeof obj !== 'object') {\n throw new TypeError('argument obj is required')\n }\n\n var parameters = obj.parameters\n var type = obj.type\n\n if (!type || !TYPE_REGEXP.test(type)) {\n throw new TypeError('invalid type')\n }\n\n var string = type\n\n // append parameters\n if (parameters && typeof parameters === 'object') {\n var param\n var params = Object.keys(parameters).sort()\n\n for (var i = 0; i < params.length; i++) {\n param = params[i]\n\n if (!TOKEN_REGEXP.test(param)) {\n throw new TypeError('invalid parameter name')\n }\n\n string += '; ' + param + '=' + qstring(parameters[param])\n }\n }\n\n return string\n}\n\n/**\n * Parse media type to object.\n *\n * @param {string|object} string\n * @return {Object}\n * @public\n */\n\nfunction parse (string) {\n if (!string) {\n throw new TypeError('argument string is required')\n }\n\n // support req/res-like objects as argument\n var header = typeof string === 'object'\n ? getcontenttype(string)\n : string\n\n if (typeof header !== 'string') {\n throw new TypeError('argument string is required to be a string')\n }\n\n var index = header.indexOf(';')\n var type = index !== -1\n ? header.substr(0, index).trim()\n : header.trim()\n\n if (!TYPE_REGEXP.test(type)) {\n throw new TypeError('invalid media type')\n }\n\n var obj = new ContentType(type.toLowerCase())\n\n // parse parameters\n if (index !== -1) {\n var key\n var match\n var value\n\n PARAM_REGEXP.lastIndex = index\n\n while ((match = PARAM_REGEXP.exec(header))) {\n if (match.index !== index) {\n throw new TypeError('invalid parameter format')\n }\n\n index += match[0].length\n key = match[1].toLowerCase()\n value = match[2]\n\n if (value[0] === '\"') {\n // remove quotes and escapes\n value = value\n .substr(1, value.length - 2)\n .replace(QESC_REGEXP, '$1')\n }\n\n obj.parameters[key] = value\n }\n\n if (index !== header.length) {\n throw new TypeError('invalid parameter format')\n }\n }\n\n return obj\n}\n\n/**\n * Get content-type from req/res objects.\n *\n * @param {object}\n * @return {Object}\n * @private\n */\n\nfunction getcontenttype (obj) {\n var header\n\n if (typeof obj.getHeader === 'function') {\n // res-like\n header = obj.getHeader('content-type')\n } else if (typeof obj.headers === 'object') {\n // req-like\n header = obj.headers && obj.headers['content-type']\n }\n\n if (typeof header !== 'string') {\n throw new TypeError('content-type header is missing from object')\n }\n\n return header\n}\n\n/**\n * Quote a string if necessary.\n *\n * @param {string} val\n * @return {string}\n * @private\n */\n\nfunction qstring (val) {\n var str = String(val)\n\n // no need to quote tokens\n if (TOKEN_REGEXP.test(str)) {\n return str\n }\n\n if (str.length > 0 && !TEXT_REGEXP.test(str)) {\n throw new TypeError('invalid parameter value')\n }\n\n return '\"' + str.replace(QUOTE_REGEXP, '\\\\$1') + '\"'\n}\n\n/**\n * Class to represent a content type.\n * @private\n */\nfunction ContentType (type) {\n this.parameters = Object.create(null)\n this.type = type\n}\n","/* eslint-env browser */\n\n/**\n * This is the web browser implementation of `debug()`.\n */\n\nexports.formatArgs = formatArgs;\nexports.save = save;\nexports.load = load;\nexports.useColors = useColors;\nexports.storage = localstorage();\nexports.destroy = (() => {\n\tlet warned = false;\n\n\treturn () => {\n\t\tif (!warned) {\n\t\t\twarned = true;\n\t\t\tconsole.warn('Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.');\n\t\t}\n\t};\n})();\n\n/**\n * Colors.\n */\n\nexports.colors = [\n\t'#0000CC',\n\t'#0000FF',\n\t'#0033CC',\n\t'#0033FF',\n\t'#0066CC',\n\t'#0066FF',\n\t'#0099CC',\n\t'#0099FF',\n\t'#00CC00',\n\t'#00CC33',\n\t'#00CC66',\n\t'#00CC99',\n\t'#00CCCC',\n\t'#00CCFF',\n\t'#3300CC',\n\t'#3300FF',\n\t'#3333CC',\n\t'#3333FF',\n\t'#3366CC',\n\t'#3366FF',\n\t'#3399CC',\n\t'#3399FF',\n\t'#33CC00',\n\t'#33CC33',\n\t'#33CC66',\n\t'#33CC99',\n\t'#33CCCC',\n\t'#33CCFF',\n\t'#6600CC',\n\t'#6600FF',\n\t'#6633CC',\n\t'#6633FF',\n\t'#66CC00',\n\t'#66CC33',\n\t'#9900CC',\n\t'#9900FF',\n\t'#9933CC',\n\t'#9933FF',\n\t'#99CC00',\n\t'#99CC33',\n\t'#CC0000',\n\t'#CC0033',\n\t'#CC0066',\n\t'#CC0099',\n\t'#CC00CC',\n\t'#CC00FF',\n\t'#CC3300',\n\t'#CC3333',\n\t'#CC3366',\n\t'#CC3399',\n\t'#CC33CC',\n\t'#CC33FF',\n\t'#CC6600',\n\t'#CC6633',\n\t'#CC9900',\n\t'#CC9933',\n\t'#CCCC00',\n\t'#CCCC33',\n\t'#FF0000',\n\t'#FF0033',\n\t'#FF0066',\n\t'#FF0099',\n\t'#FF00CC',\n\t'#FF00FF',\n\t'#FF3300',\n\t'#FF3333',\n\t'#FF3366',\n\t'#FF3399',\n\t'#FF33CC',\n\t'#FF33FF',\n\t'#FF6600',\n\t'#FF6633',\n\t'#FF9900',\n\t'#FF9933',\n\t'#FFCC00',\n\t'#FFCC33'\n];\n\n/**\n * Currently only WebKit-based Web Inspectors, Firefox >= v31,\n * and the Firebug extension (any Firefox version) are known\n * to support \"%c\" CSS customizations.\n *\n * TODO: add a `localStorage` variable to explicitly enable/disable colors\n */\n\n// eslint-disable-next-line complexity\nfunction useColors() {\n\t// NB: In an Electron preload script, document will be defined but not fully\n\t// initialized. Since we know we're in Chrome, we'll just detect this case\n\t// explicitly\n\tif (typeof window !== 'undefined' && window.process && (window.process.type === 'renderer' || window.process.__nwjs)) {\n\t\treturn true;\n\t}\n\n\t// Internet Explorer and Edge do not support colors.\n\tif (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/(edge|trident)\\/(\\d+)/)) {\n\t\treturn false;\n\t}\n\n\t// Is webkit? http://stackoverflow.com/a/16459606/376773\n\t// document is undefined in react-native: https://github.com/facebook/react-native/pull/1632\n\treturn (typeof document !== 'undefined' && document.documentElement && document.documentElement.style && document.documentElement.style.WebkitAppearance) ||\n\t\t// Is firebug? http://stackoverflow.com/a/398120/376773\n\t\t(typeof window !== 'undefined' && window.console && (window.console.firebug || (window.console.exception && window.console.table))) ||\n\t\t// Is firefox >= v31?\n\t\t// https://developer.mozilla.org/en-US/docs/Tools/Web_Console#Styling_messages\n\t\t(typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/firefox\\/(\\d+)/) && parseInt(RegExp.$1, 10) >= 31) ||\n\t\t// Double check webkit in userAgent just in case we are in a worker\n\t\t(typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/applewebkit\\/(\\d+)/));\n}\n\n/**\n * Colorize log arguments if enabled.\n *\n * @api public\n */\n\nfunction formatArgs(args) {\n\targs[0] = (this.useColors ? '%c' : '') +\n\t\tthis.namespace +\n\t\t(this.useColors ? ' %c' : ' ') +\n\t\targs[0] +\n\t\t(this.useColors ? '%c ' : ' ') +\n\t\t'+' + module.exports.humanize(this.diff);\n\n\tif (!this.useColors) {\n\t\treturn;\n\t}\n\n\tconst c = 'color: ' + this.color;\n\targs.splice(1, 0, c, 'color: inherit');\n\n\t// The final \"%c\" is somewhat tricky, because there could be other\n\t// arguments passed either before or after the %c, so we need to\n\t// figure out the correct index to insert the CSS into\n\tlet index = 0;\n\tlet lastC = 0;\n\targs[0].replace(/%[a-zA-Z%]/g, match => {\n\t\tif (match === '%%') {\n\t\t\treturn;\n\t\t}\n\t\tindex++;\n\t\tif (match === '%c') {\n\t\t\t// We only are interested in the *last* %c\n\t\t\t// (the user may have provided their own)\n\t\t\tlastC = index;\n\t\t}\n\t});\n\n\targs.splice(lastC, 0, c);\n}\n\n/**\n * Invokes `console.debug()` when available.\n * No-op when `console.debug` is not a \"function\".\n * If `console.debug` is not available, falls back\n * to `console.log`.\n *\n * @api public\n */\nexports.log = console.debug || console.log || (() => {});\n\n/**\n * Save `namespaces`.\n *\n * @param {String} namespaces\n * @api private\n */\nfunction save(namespaces) {\n\ttry {\n\t\tif (namespaces) {\n\t\t\texports.storage.setItem('debug', namespaces);\n\t\t} else {\n\t\t\texports.storage.removeItem('debug');\n\t\t}\n\t} catch (error) {\n\t\t// Swallow\n\t\t// XXX (@Qix-) should we be logging these?\n\t}\n}\n\n/**\n * Load `namespaces`.\n *\n * @return {String} returns the previously persisted debug modes\n * @api private\n */\nfunction load() {\n\tlet r;\n\ttry {\n\t\tr = exports.storage.getItem('debug');\n\t} catch (error) {\n\t\t// Swallow\n\t\t// XXX (@Qix-) should we be logging these?\n\t}\n\n\t// If debug isn't set in LS, and we're in Electron, try to load $DEBUG\n\tif (!r && typeof process !== 'undefined' && 'env' in process) {\n\t\tr = process.env.DEBUG;\n\t}\n\n\treturn r;\n}\n\n/**\n * Localstorage attempts to return the localstorage.\n *\n * This is necessary because safari throws\n * when a user disables cookies/localstorage\n * and you attempt to access it.\n *\n * @return {LocalStorage}\n * @api private\n */\n\nfunction localstorage() {\n\ttry {\n\t\t// TVMLKit (Apple TV JS Runtime) does not have a window object, just localStorage in the global context\n\t\t// The Browser also has localStorage in the global context.\n\t\treturn localStorage;\n\t} catch (error) {\n\t\t// Swallow\n\t\t// XXX (@Qix-) should we be logging these?\n\t}\n}\n\nmodule.exports = require('./common')(exports);\n\nconst {formatters} = module.exports;\n\n/**\n * Map %j to `JSON.stringify()`, since no Web Inspectors do that by default.\n */\n\nformatters.j = function (v) {\n\ttry {\n\t\treturn JSON.stringify(v);\n\t} catch (error) {\n\t\treturn '[UnexpectedJSONParseError]: ' + error.message;\n\t}\n};\n","\n/**\n * This is the common logic for both the Node.js and web browser\n * implementations of `debug()`.\n */\n\nfunction setup(env) {\n\tcreateDebug.debug = createDebug;\n\tcreateDebug.default = createDebug;\n\tcreateDebug.coerce = coerce;\n\tcreateDebug.disable = disable;\n\tcreateDebug.enable = enable;\n\tcreateDebug.enabled = enabled;\n\tcreateDebug.humanize = require('ms');\n\tcreateDebug.destroy = destroy;\n\n\tObject.keys(env).forEach(key => {\n\t\tcreateDebug[key] = env[key];\n\t});\n\n\t/**\n\t* The currently active debug mode names, and names to skip.\n\t*/\n\n\tcreateDebug.names = [];\n\tcreateDebug.skips = [];\n\n\t/**\n\t* Map of special \"%n\" handling functions, for the debug \"format\" argument.\n\t*\n\t* Valid key names are a single, lower or upper-case letter, i.e. \"n\" and \"N\".\n\t*/\n\tcreateDebug.formatters = {};\n\n\t/**\n\t* Selects a color for a debug namespace\n\t* @param {String} namespace The namespace string for the debug instance to be colored\n\t* @return {Number|String} An ANSI color code for the given namespace\n\t* @api private\n\t*/\n\tfunction selectColor(namespace) {\n\t\tlet hash = 0;\n\n\t\tfor (let i = 0; i < namespace.length; i++) {\n\t\t\thash = ((hash << 5) - hash) + namespace.charCodeAt(i);\n\t\t\thash |= 0; // Convert to 32bit integer\n\t\t}\n\n\t\treturn createDebug.colors[Math.abs(hash) % createDebug.colors.length];\n\t}\n\tcreateDebug.selectColor = selectColor;\n\n\t/**\n\t* Create a debugger with the given `namespace`.\n\t*\n\t* @param {String} namespace\n\t* @return {Function}\n\t* @api public\n\t*/\n\tfunction createDebug(namespace) {\n\t\tlet prevTime;\n\t\tlet enableOverride = null;\n\t\tlet namespacesCache;\n\t\tlet enabledCache;\n\n\t\tfunction debug(...args) {\n\t\t\t// Disabled?\n\t\t\tif (!debug.enabled) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst self = debug;\n\n\t\t\t// Set `diff` timestamp\n\t\t\tconst curr = Number(new Date());\n\t\t\tconst ms = curr - (prevTime || curr);\n\t\t\tself.diff = ms;\n\t\t\tself.prev = prevTime;\n\t\t\tself.curr = curr;\n\t\t\tprevTime = curr;\n\n\t\t\targs[0] = createDebug.coerce(args[0]);\n\n\t\t\tif (typeof args[0] !== 'string') {\n\t\t\t\t// Anything else let's inspect with %O\n\t\t\t\targs.unshift('%O');\n\t\t\t}\n\n\t\t\t// Apply any `formatters` transformations\n\t\t\tlet index = 0;\n\t\t\targs[0] = args[0].replace(/%([a-zA-Z%])/g, (match, format) => {\n\t\t\t\t// If we encounter an escaped % then don't increase the array index\n\t\t\t\tif (match === '%%') {\n\t\t\t\t\treturn '%';\n\t\t\t\t}\n\t\t\t\tindex++;\n\t\t\t\tconst formatter = createDebug.formatters[format];\n\t\t\t\tif (typeof formatter === 'function') {\n\t\t\t\t\tconst val = args[index];\n\t\t\t\t\tmatch = formatter.call(self, val);\n\n\t\t\t\t\t// Now we need to remove `args[index]` since it's inlined in the `format`\n\t\t\t\t\targs.splice(index, 1);\n\t\t\t\t\tindex--;\n\t\t\t\t}\n\t\t\t\treturn match;\n\t\t\t});\n\n\t\t\t// Apply env-specific formatting (colors, etc.)\n\t\t\tcreateDebug.formatArgs.call(self, args);\n\n\t\t\tconst logFn = self.log || createDebug.log;\n\t\t\tlogFn.apply(self, args);\n\t\t}\n\n\t\tdebug.namespace = namespace;\n\t\tdebug.useColors = createDebug.useColors();\n\t\tdebug.color = createDebug.selectColor(namespace);\n\t\tdebug.extend = extend;\n\t\tdebug.destroy = createDebug.destroy; // XXX Temporary. Will be removed in the next major release.\n\n\t\tObject.defineProperty(debug, 'enabled', {\n\t\t\tenumerable: true,\n\t\t\tconfigurable: false,\n\t\t\tget: () => {\n\t\t\t\tif (enableOverride !== null) {\n\t\t\t\t\treturn enableOverride;\n\t\t\t\t}\n\t\t\t\tif (namespacesCache !== createDebug.namespaces) {\n\t\t\t\t\tnamespacesCache = createDebug.namespaces;\n\t\t\t\t\tenabledCache = createDebug.enabled(namespace);\n\t\t\t\t}\n\n\t\t\t\treturn enabledCache;\n\t\t\t},\n\t\t\tset: v => {\n\t\t\t\tenableOverride = v;\n\t\t\t}\n\t\t});\n\n\t\t// Env-specific initialization logic for debug instances\n\t\tif (typeof createDebug.init === 'function') {\n\t\t\tcreateDebug.init(debug);\n\t\t}\n\n\t\treturn debug;\n\t}\n\n\tfunction extend(namespace, delimiter) {\n\t\tconst newDebug = createDebug(this.namespace + (typeof delimiter === 'undefined' ? ':' : delimiter) + namespace);\n\t\tnewDebug.log = this.log;\n\t\treturn newDebug;\n\t}\n\n\t/**\n\t* Enables a debug mode by namespaces. This can include modes\n\t* separated by a colon and wildcards.\n\t*\n\t* @param {String} namespaces\n\t* @api public\n\t*/\n\tfunction enable(namespaces) {\n\t\tcreateDebug.save(namespaces);\n\t\tcreateDebug.namespaces = namespaces;\n\n\t\tcreateDebug.names = [];\n\t\tcreateDebug.skips = [];\n\n\t\tlet i;\n\t\tconst split = (typeof namespaces === 'string' ? namespaces : '').split(/[\\s,]+/);\n\t\tconst len = split.length;\n\n\t\tfor (i = 0; i < len; i++) {\n\t\t\tif (!split[i]) {\n\t\t\t\t// ignore empty strings\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tnamespaces = split[i].replace(/\\*/g, '.*?');\n\n\t\t\tif (namespaces[0] === '-') {\n\t\t\t\tcreateDebug.skips.push(new RegExp('^' + namespaces.substr(1) + '$'));\n\t\t\t} else {\n\t\t\t\tcreateDebug.names.push(new RegExp('^' + namespaces + '$'));\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t* Disable debug output.\n\t*\n\t* @return {String} namespaces\n\t* @api public\n\t*/\n\tfunction disable() {\n\t\tconst namespaces = [\n\t\t\t...createDebug.names.map(toNamespace),\n\t\t\t...createDebug.skips.map(toNamespace).map(namespace => '-' + namespace)\n\t\t].join(',');\n\t\tcreateDebug.enable('');\n\t\treturn namespaces;\n\t}\n\n\t/**\n\t* Returns true if the given mode name is enabled, false otherwise.\n\t*\n\t* @param {String} name\n\t* @return {Boolean}\n\t* @api public\n\t*/\n\tfunction enabled(name) {\n\t\tif (name[name.length - 1] === '*') {\n\t\t\treturn true;\n\t\t}\n\n\t\tlet i;\n\t\tlet len;\n\n\t\tfor (i = 0, len = createDebug.skips.length; i < len; i++) {\n\t\t\tif (createDebug.skips[i].test(name)) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\n\t\tfor (i = 0, len = createDebug.names.length; i < len; i++) {\n\t\t\tif (createDebug.names[i].test(name)) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\treturn false;\n\t}\n\n\t/**\n\t* Convert regexp to namespace\n\t*\n\t* @param {RegExp} regxep\n\t* @return {String} namespace\n\t* @api private\n\t*/\n\tfunction toNamespace(regexp) {\n\t\treturn regexp.toString()\n\t\t\t.substring(2, regexp.toString().length - 2)\n\t\t\t.replace(/\\.\\*\\?$/, '*');\n\t}\n\n\t/**\n\t* Coerce `val`.\n\t*\n\t* @param {Mixed} val\n\t* @return {Mixed}\n\t* @api private\n\t*/\n\tfunction coerce(val) {\n\t\tif (val instanceof Error) {\n\t\t\treturn val.stack || val.message;\n\t\t}\n\t\treturn val;\n\t}\n\n\t/**\n\t* XXX DO NOT USE. This is a temporary stub function.\n\t* XXX It WILL be removed in the next major release.\n\t*/\n\tfunction destroy() {\n\t\tconsole.warn('Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.');\n\t}\n\n\tcreateDebug.enable(createDebug.load());\n\n\treturn createDebug;\n}\n\nmodule.exports = setup;\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n'use strict';\n\nvar R = typeof Reflect === 'object' ? Reflect : null\nvar ReflectApply = R && typeof R.apply === 'function'\n ? R.apply\n : function ReflectApply(target, receiver, args) {\n return Function.prototype.apply.call(target, receiver, args);\n }\n\nvar ReflectOwnKeys\nif (R && typeof R.ownKeys === 'function') {\n ReflectOwnKeys = R.ownKeys\n} else if (Object.getOwnPropertySymbols) {\n ReflectOwnKeys = function ReflectOwnKeys(target) {\n return Object.getOwnPropertyNames(target)\n .concat(Object.getOwnPropertySymbols(target));\n };\n} else {\n ReflectOwnKeys = function ReflectOwnKeys(target) {\n return Object.getOwnPropertyNames(target);\n };\n}\n\nfunction ProcessEmitWarning(warning) {\n if (console && console.warn) console.warn(warning);\n}\n\nvar NumberIsNaN = Number.isNaN || function NumberIsNaN(value) {\n return value !== value;\n}\n\nfunction EventEmitter() {\n EventEmitter.init.call(this);\n}\nmodule.exports = EventEmitter;\nmodule.exports.once = once;\n\n// Backwards-compat with node 0.10.x\nEventEmitter.EventEmitter = EventEmitter;\n\nEventEmitter.prototype._events = undefined;\nEventEmitter.prototype._eventsCount = 0;\nEventEmitter.prototype._maxListeners = undefined;\n\n// By default EventEmitters will print a warning if more than 10 listeners are\n// added to it. This is a useful default which helps finding memory leaks.\nvar defaultMaxListeners = 10;\n\nfunction checkListener(listener) {\n if (typeof listener !== 'function') {\n throw new TypeError('The \"listener\" argument must be of type Function. Received type ' + typeof listener);\n }\n}\n\nObject.defineProperty(EventEmitter, 'defaultMaxListeners', {\n enumerable: true,\n get: function() {\n return defaultMaxListeners;\n },\n set: function(arg) {\n if (typeof arg !== 'number' || arg < 0 || NumberIsNaN(arg)) {\n throw new RangeError('The value of \"defaultMaxListeners\" is out of range. It must be a non-negative number. Received ' + arg + '.');\n }\n defaultMaxListeners = arg;\n }\n});\n\nEventEmitter.init = function() {\n\n if (this._events === undefined ||\n this._events === Object.getPrototypeOf(this)._events) {\n this._events = Object.create(null);\n this._eventsCount = 0;\n }\n\n this._maxListeners = this._maxListeners || undefined;\n};\n\n// Obviously not all Emitters should be limited to 10. This function allows\n// that to be increased. Set to zero for unlimited.\nEventEmitter.prototype.setMaxListeners = function setMaxListeners(n) {\n if (typeof n !== 'number' || n < 0 || NumberIsNaN(n)) {\n throw new RangeError('The value of \"n\" is out of range. It must be a non-negative number. Received ' + n + '.');\n }\n this._maxListeners = n;\n return this;\n};\n\nfunction _getMaxListeners(that) {\n if (that._maxListeners === undefined)\n return EventEmitter.defaultMaxListeners;\n return that._maxListeners;\n}\n\nEventEmitter.prototype.getMaxListeners = function getMaxListeners() {\n return _getMaxListeners(this);\n};\n\nEventEmitter.prototype.emit = function emit(type) {\n var args = [];\n for (var i = 1; i < arguments.length; i++) args.push(arguments[i]);\n var doError = (type === 'error');\n\n var events = this._events;\n if (events !== undefined)\n doError = (doError && events.error === undefined);\n else if (!doError)\n return false;\n\n // If there is no 'error' event listener then throw.\n if (doError) {\n var er;\n if (args.length > 0)\n er = args[0];\n if (er instanceof Error) {\n // Note: The comments on the `throw` lines are intentional, they show\n // up in Node's output if this results in an unhandled exception.\n throw er; // Unhandled 'error' event\n }\n // At least give some kind of context to the user\n var err = new Error('Unhandled error.' + (er ? ' (' + er.message + ')' : ''));\n err.context = er;\n throw err; // Unhandled 'error' event\n }\n\n var handler = events[type];\n\n if (handler === undefined)\n return false;\n\n if (typeof handler === 'function') {\n ReflectApply(handler, this, args);\n } else {\n var len = handler.length;\n var listeners = arrayClone(handler, len);\n for (var i = 0; i < len; ++i)\n ReflectApply(listeners[i], this, args);\n }\n\n return true;\n};\n\nfunction _addListener(target, type, listener, prepend) {\n var m;\n var events;\n var existing;\n\n checkListener(listener);\n\n events = target._events;\n if (events === undefined) {\n events = target._events = Object.create(null);\n target._eventsCount = 0;\n } else {\n // To avoid recursion in the case that type === \"newListener\"! Before\n // adding it to the listeners, first emit \"newListener\".\n if (events.newListener !== undefined) {\n target.emit('newListener', type,\n listener.listener ? listener.listener : listener);\n\n // Re-assign `events` because a newListener handler could have caused the\n // this._events to be assigned to a new object\n events = target._events;\n }\n existing = events[type];\n }\n\n if (existing === undefined) {\n // Optimize the case of one listener. Don't need the extra array object.\n existing = events[type] = listener;\n ++target._eventsCount;\n } else {\n if (typeof existing === 'function') {\n // Adding the second element, need to change to array.\n existing = events[type] =\n prepend ? [listener, existing] : [existing, listener];\n // If we've already got an array, just append.\n } else if (prepend) {\n existing.unshift(listener);\n } else {\n existing.push(listener);\n }\n\n // Check for listener leak\n m = _getMaxListeners(target);\n if (m > 0 && existing.length > m && !existing.warned) {\n existing.warned = true;\n // No error code for this since it is a Warning\n // eslint-disable-next-line no-restricted-syntax\n var w = new Error('Possible EventEmitter memory leak detected. ' +\n existing.length + ' ' + String(type) + ' listeners ' +\n 'added. Use emitter.setMaxListeners() to ' +\n 'increase limit');\n w.name = 'MaxListenersExceededWarning';\n w.emitter = target;\n w.type = type;\n w.count = existing.length;\n ProcessEmitWarning(w);\n }\n }\n\n return target;\n}\n\nEventEmitter.prototype.addListener = function addListener(type, listener) {\n return _addListener(this, type, listener, false);\n};\n\nEventEmitter.prototype.on = EventEmitter.prototype.addListener;\n\nEventEmitter.prototype.prependListener =\n function prependListener(type, listener) {\n return _addListener(this, type, listener, true);\n };\n\nfunction onceWrapper() {\n if (!this.fired) {\n this.target.removeListener(this.type, this.wrapFn);\n this.fired = true;\n if (arguments.length === 0)\n return this.listener.call(this.target);\n return this.listener.apply(this.target, arguments);\n }\n}\n\nfunction _onceWrap(target, type, listener) {\n var state = { fired: false, wrapFn: undefined, target: target, type: type, listener: listener };\n var wrapped = onceWrapper.bind(state);\n wrapped.listener = listener;\n state.wrapFn = wrapped;\n return wrapped;\n}\n\nEventEmitter.prototype.once = function once(type, listener) {\n checkListener(listener);\n this.on(type, _onceWrap(this, type, listener));\n return this;\n};\n\nEventEmitter.prototype.prependOnceListener =\n function prependOnceListener(type, listener) {\n checkListener(listener);\n this.prependListener(type, _onceWrap(this, type, listener));\n return this;\n };\n\n// Emits a 'removeListener' event if and only if the listener was removed.\nEventEmitter.prototype.removeListener =\n function removeListener(type, listener) {\n var list, events, position, i, originalListener;\n\n checkListener(listener);\n\n events = this._events;\n if (events === undefined)\n return this;\n\n list = events[type];\n if (list === undefined)\n return this;\n\n if (list === listener || list.listener === listener) {\n if (--this._eventsCount === 0)\n this._events = Object.create(null);\n else {\n delete events[type];\n if (events.removeListener)\n this.emit('removeListener', type, list.listener || listener);\n }\n } else if (typeof list !== 'function') {\n position = -1;\n\n for (i = list.length - 1; i >= 0; i--) {\n if (list[i] === listener || list[i].listener === listener) {\n originalListener = list[i].listener;\n position = i;\n break;\n }\n }\n\n if (position < 0)\n return this;\n\n if (position === 0)\n list.shift();\n else {\n spliceOne(list, position);\n }\n\n if (list.length === 1)\n events[type] = list[0];\n\n if (events.removeListener !== undefined)\n this.emit('removeListener', type, originalListener || listener);\n }\n\n return this;\n };\n\nEventEmitter.prototype.off = EventEmitter.prototype.removeListener;\n\nEventEmitter.prototype.removeAllListeners =\n function removeAllListeners(type) {\n var listeners, events, i;\n\n events = this._events;\n if (events === undefined)\n return this;\n\n // not listening for removeListener, no need to emit\n if (events.removeListener === undefined) {\n if (arguments.length === 0) {\n this._events = Object.create(null);\n this._eventsCount = 0;\n } else if (events[type] !== undefined) {\n if (--this._eventsCount === 0)\n this._events = Object.create(null);\n else\n delete events[type];\n }\n return this;\n }\n\n // emit removeListener for all listeners on all events\n if (arguments.length === 0) {\n var keys = Object.keys(events);\n var key;\n for (i = 0; i < keys.length; ++i) {\n key = keys[i];\n if (key === 'removeListener') continue;\n this.removeAllListeners(key);\n }\n this.removeAllListeners('removeListener');\n this._events = Object.create(null);\n this._eventsCount = 0;\n return this;\n }\n\n listeners = events[type];\n\n if (typeof listeners === 'function') {\n this.removeListener(type, listeners);\n } else if (listeners !== undefined) {\n // LIFO order\n for (i = listeners.length - 1; i >= 0; i--) {\n this.removeListener(type, listeners[i]);\n }\n }\n\n return this;\n };\n\nfunction _listeners(target, type, unwrap) {\n var events = target._events;\n\n if (events === undefined)\n return [];\n\n var evlistener = events[type];\n if (evlistener === undefined)\n return [];\n\n if (typeof evlistener === 'function')\n return unwrap ? [evlistener.listener || evlistener] : [evlistener];\n\n return unwrap ?\n unwrapListeners(evlistener) : arrayClone(evlistener, evlistener.length);\n}\n\nEventEmitter.prototype.listeners = function listeners(type) {\n return _listeners(this, type, true);\n};\n\nEventEmitter.prototype.rawListeners = function rawListeners(type) {\n return _listeners(this, type, false);\n};\n\nEventEmitter.listenerCount = function(emitter, type) {\n if (typeof emitter.listenerCount === 'function') {\n return emitter.listenerCount(type);\n } else {\n return listenerCount.call(emitter, type);\n }\n};\n\nEventEmitter.prototype.listenerCount = listenerCount;\nfunction listenerCount(type) {\n var events = this._events;\n\n if (events !== undefined) {\n var evlistener = events[type];\n\n if (typeof evlistener === 'function') {\n return 1;\n } else if (evlistener !== undefined) {\n return evlistener.length;\n }\n }\n\n return 0;\n}\n\nEventEmitter.prototype.eventNames = function eventNames() {\n return this._eventsCount > 0 ? ReflectOwnKeys(this._events) : [];\n};\n\nfunction arrayClone(arr, n) {\n var copy = new Array(n);\n for (var i = 0; i < n; ++i)\n copy[i] = arr[i];\n return copy;\n}\n\nfunction spliceOne(list, index) {\n for (; index + 1 < list.length; index++)\n list[index] = list[index + 1];\n list.pop();\n}\n\nfunction unwrapListeners(arr) {\n var ret = new Array(arr.length);\n for (var i = 0; i < ret.length; ++i) {\n ret[i] = arr[i].listener || arr[i];\n }\n return ret;\n}\n\nfunction once(emitter, name) {\n return new Promise(function (resolve, reject) {\n function errorListener(err) {\n emitter.removeListener(name, resolver);\n reject(err);\n }\n\n function resolver() {\n if (typeof emitter.removeListener === 'function') {\n emitter.removeListener('error', errorListener);\n }\n resolve([].slice.call(arguments));\n };\n\n eventTargetAgnosticAddListener(emitter, name, resolver, { once: true });\n if (name !== 'error') {\n addErrorHandlerIfEventEmitter(emitter, errorListener, { once: true });\n }\n });\n}\n\nfunction addErrorHandlerIfEventEmitter(emitter, handler, flags) {\n if (typeof emitter.on === 'function') {\n eventTargetAgnosticAddListener(emitter, 'error', handler, flags);\n }\n}\n\nfunction eventTargetAgnosticAddListener(emitter, name, listener, flags) {\n if (typeof emitter.on === 'function') {\n if (flags.once) {\n emitter.once(name, listener);\n } else {\n emitter.on(name, listener);\n }\n } else if (typeof emitter.addEventListener === 'function') {\n // EventTarget does not have `error` event semantics like Node\n // EventEmitters, we do not listen for `error` events here.\n emitter.addEventListener(name, function wrapListener(arg) {\n // IE does not have builtin `{ once: true }` support so we\n // have to do it manually.\n if (flags.once) {\n emitter.removeEventListener(name, wrapListener);\n }\n listener(arg);\n });\n } else {\n throw new TypeError('The \"emitter\" argument must be of type EventEmitter. Received type ' + typeof emitter);\n }\n}\n","'use strict';\nconst Token = require('token-types');\nconst strtok3 = require('strtok3/lib/core');\nconst {\n\tstringToBytes,\n\ttarHeaderChecksumMatches,\n\tuint32SyncSafeToken\n} = require('./util');\nconst supported = require('./supported');\n\nconst minimumBytes = 4100; // A fair amount of file-types are detectable within this range\n\nasync function fromStream(stream) {\n\tconst tokenizer = await strtok3.fromStream(stream);\n\ttry {\n\t\treturn await fromTokenizer(tokenizer);\n\t} finally {\n\t\tawait tokenizer.close();\n\t}\n}\n\nasync function fromBuffer(input) {\n\tif (!(input instanceof Uint8Array || input instanceof ArrayBuffer || Buffer.isBuffer(input))) {\n\t\tthrow new TypeError(`Expected the \\`input\\` argument to be of type \\`Uint8Array\\` or \\`Buffer\\` or \\`ArrayBuffer\\`, got \\`${typeof input}\\``);\n\t}\n\n\tconst buffer = input instanceof Buffer ? input : Buffer.from(input);\n\n\tif (!(buffer && buffer.length > 1)) {\n\t\treturn;\n\t}\n\n\tconst tokenizer = strtok3.fromBuffer(buffer);\n\treturn fromTokenizer(tokenizer);\n}\n\nfunction _check(buffer, headers, options) {\n\toptions = {\n\t\toffset: 0,\n\t\t...options\n\t};\n\n\tfor (const [index, header] of headers.entries()) {\n\t\t// If a bitmask is set\n\t\tif (options.mask) {\n\t\t\t// If header doesn't equal `buf` with bits masked off\n\t\t\tif (header !== (options.mask[index] & buffer[index + options.offset])) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t} else if (header !== buffer[index + options.offset]) {\n\t\t\treturn false;\n\t\t}\n\t}\n\n\treturn true;\n}\n\nasync function fromTokenizer(tokenizer) {\n\ttry {\n\t\treturn _fromTokenizer(tokenizer);\n\t} catch (error) {\n\t\tif (!(error instanceof strtok3.EndOfStreamError)) {\n\t\t\tthrow error;\n\t\t}\n\t}\n}\n\nasync function _fromTokenizer(tokenizer) {\n\tlet buffer = Buffer.alloc(minimumBytes);\n\tconst bytesRead = 12;\n\tconst check = (header, options) => _check(buffer, header, options);\n\tconst checkString = (header, options) => check(stringToBytes(header), options);\n\n\t// Keep reading until EOF if the file size is unknown.\n\tif (!tokenizer.fileInfo.size) {\n\t\ttokenizer.fileInfo.size = Number.MAX_SAFE_INTEGER;\n\t}\n\n\tawait tokenizer.peekBuffer(buffer, {length: bytesRead, mayBeLess: true});\n\n\t// -- 2-byte signatures --\n\n\tif (check([0x42, 0x4D])) {\n\t\treturn {\n\t\t\text: 'bmp',\n\t\t\tmime: 'image/bmp'\n\t\t};\n\t}\n\n\tif (check([0x0B, 0x77])) {\n\t\treturn {\n\t\t\text: 'ac3',\n\t\t\tmime: 'audio/vnd.dolby.dd-raw'\n\t\t};\n\t}\n\n\tif (check([0x78, 0x01])) {\n\t\treturn {\n\t\t\text: 'dmg',\n\t\t\tmime: 'application/x-apple-diskimage'\n\t\t};\n\t}\n\n\tif (check([0x4D, 0x5A])) {\n\t\treturn {\n\t\t\text: 'exe',\n\t\t\tmime: 'application/x-msdownload'\n\t\t};\n\t}\n\n\tif (check([0x25, 0x21])) {\n\t\tawait tokenizer.peekBuffer(buffer, {length: 24, mayBeLess: true});\n\n\t\tif (checkString('PS-Adobe-', {offset: 2}) &&\n\t\t\tcheckString(' EPSF-', {offset: 14})) {\n\t\t\treturn {\n\t\t\t\text: 'eps',\n\t\t\t\tmime: 'application/eps'\n\t\t\t};\n\t\t}\n\n\t\treturn {\n\t\t\text: 'ps',\n\t\t\tmime: 'application/postscript'\n\t\t};\n\t}\n\n\tif (\n\t\tcheck([0x1F, 0xA0]) ||\n\t\tcheck([0x1F, 0x9D])\n\t) {\n\t\treturn {\n\t\t\text: 'Z',\n\t\t\tmime: 'application/x-compress'\n\t\t};\n\t}\n\n\t// -- 3-byte signatures --\n\n\tif (check([0xFF, 0xD8, 0xFF])) {\n\t\treturn {\n\t\t\text: 'jpg',\n\t\t\tmime: 'image/jpeg'\n\t\t};\n\t}\n\n\tif (check([0x49, 0x49, 0xBC])) {\n\t\treturn {\n\t\t\text: 'jxr',\n\t\t\tmime: 'image/vnd.ms-photo'\n\t\t};\n\t}\n\n\tif (check([0x1F, 0x8B, 0x8])) {\n\t\treturn {\n\t\t\text: 'gz',\n\t\t\tmime: 'application/gzip'\n\t\t};\n\t}\n\n\tif (check([0x42, 0x5A, 0x68])) {\n\t\treturn {\n\t\t\text: 'bz2',\n\t\t\tmime: 'application/x-bzip2'\n\t\t};\n\t}\n\n\tif (checkString('ID3')) {\n\t\tawait tokenizer.ignore(6); // Skip ID3 header until the header size\n\t\tconst id3HeaderLen = await tokenizer.readToken(uint32SyncSafeToken);\n\t\tif (tokenizer.position + id3HeaderLen > tokenizer.fileInfo.size) {\n\t\t\t// Guess file type based on ID3 header for backward compatibility\n\t\t\treturn {\n\t\t\t\text: 'mp3',\n\t\t\t\tmime: 'audio/mpeg'\n\t\t\t};\n\t\t}\n\n\t\tawait tokenizer.ignore(id3HeaderLen);\n\t\treturn fromTokenizer(tokenizer); // Skip ID3 header, recursion\n\t}\n\n\t// Musepack, SV7\n\tif (checkString('MP+')) {\n\t\treturn {\n\t\t\text: 'mpc',\n\t\t\tmime: 'audio/x-musepack'\n\t\t};\n\t}\n\n\tif (\n\t\t(buffer[0] === 0x43 || buffer[0] === 0x46) &&\n\t\tcheck([0x57, 0x53], {offset: 1})\n\t) {\n\t\treturn {\n\t\t\text: 'swf',\n\t\t\tmime: 'application/x-shockwave-flash'\n\t\t};\n\t}\n\n\t// -- 4-byte signatures --\n\n\tif (check([0x47, 0x49, 0x46])) {\n\t\treturn {\n\t\t\text: 'gif',\n\t\t\tmime: 'image/gif'\n\t\t};\n\t}\n\n\tif (checkString('FLIF')) {\n\t\treturn {\n\t\t\text: 'flif',\n\t\t\tmime: 'image/flif'\n\t\t};\n\t}\n\n\tif (checkString('8BPS')) {\n\t\treturn {\n\t\t\text: 'psd',\n\t\t\tmime: 'image/vnd.adobe.photoshop'\n\t\t};\n\t}\n\n\tif (checkString('WEBP', {offset: 8})) {\n\t\treturn {\n\t\t\text: 'webp',\n\t\t\tmime: 'image/webp'\n\t\t};\n\t}\n\n\t// Musepack, SV8\n\tif (checkString('MPCK')) {\n\t\treturn {\n\t\t\text: 'mpc',\n\t\t\tmime: 'audio/x-musepack'\n\t\t};\n\t}\n\n\tif (checkString('FORM')) {\n\t\treturn {\n\t\t\text: 'aif',\n\t\t\tmime: 'audio/aiff'\n\t\t};\n\t}\n\n\tif (checkString('icns', {offset: 0})) {\n\t\treturn {\n\t\t\text: 'icns',\n\t\t\tmime: 'image/icns'\n\t\t};\n\t}\n\n\t// Zip-based file formats\n\t// Need to be before the `zip` check\n\tif (check([0x50, 0x4B, 0x3, 0x4])) { // Local file header signature\n\t\ttry {\n\t\t\twhile (tokenizer.position + 30 < tokenizer.fileInfo.size) {\n\t\t\t\tawait tokenizer.readBuffer(buffer, {length: 30});\n\n\t\t\t\t// https://en.wikipedia.org/wiki/Zip_(file_format)#File_headers\n\t\t\t\tconst zipHeader = {\n\t\t\t\t\tcompressedSize: buffer.readUInt32LE(18),\n\t\t\t\t\tuncompressedSize: buffer.readUInt32LE(22),\n\t\t\t\t\tfilenameLength: buffer.readUInt16LE(26),\n\t\t\t\t\textraFieldLength: buffer.readUInt16LE(28)\n\t\t\t\t};\n\n\t\t\t\tzipHeader.filename = await tokenizer.readToken(new Token.StringType(zipHeader.filenameLength, 'utf-8'));\n\t\t\t\tawait tokenizer.ignore(zipHeader.extraFieldLength);\n\n\t\t\t\t// Assumes signed `.xpi` from addons.mozilla.org\n\t\t\t\tif (zipHeader.filename === 'META-INF/mozilla.rsa') {\n\t\t\t\t\treturn {\n\t\t\t\t\t\text: 'xpi',\n\t\t\t\t\t\tmime: 'application/x-xpinstall'\n\t\t\t\t\t};\n\t\t\t\t}\n\n\t\t\t\tif (zipHeader.filename.endsWith('.rels') || zipHeader.filename.endsWith('.xml')) {\n\t\t\t\t\tconst type = zipHeader.filename.split('/')[0];\n\t\t\t\t\tswitch (type) {\n\t\t\t\t\t\tcase '_rels':\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase 'word':\n\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\text: 'docx',\n\t\t\t\t\t\t\t\tmime: 'application/vnd.openxmlformats-officedocument.wordprocessingml.document'\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\tcase 'ppt':\n\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\text: 'pptx',\n\t\t\t\t\t\t\t\tmime: 'application/vnd.openxmlformats-officedocument.presentationml.presentation'\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\tcase 'xl':\n\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\text: 'xlsx',\n\t\t\t\t\t\t\t\tmime: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (zipHeader.filename.startsWith('xl/')) {\n\t\t\t\t\treturn {\n\t\t\t\t\t\text: 'xlsx',\n\t\t\t\t\t\tmime: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'\n\t\t\t\t\t};\n\t\t\t\t}\n\n\t\t\t\tif (zipHeader.filename.startsWith('3D/') && zipHeader.filename.endsWith('.model')) {\n\t\t\t\t\treturn {\n\t\t\t\t\t\text: '3mf',\n\t\t\t\t\t\tmime: 'model/3mf'\n\t\t\t\t\t};\n\t\t\t\t}\n\n\t\t\t\t// The docx, xlsx and pptx file types extend the Office Open XML file format:\n\t\t\t\t// https://en.wikipedia.org/wiki/Office_Open_XML_file_formats\n\t\t\t\t// We look for:\n\t\t\t\t// - one entry named '[Content_Types].xml' or '_rels/.rels',\n\t\t\t\t// - one entry indicating specific type of file.\n\t\t\t\t// MS Office, OpenOffice and LibreOffice may put the parts in different order, so the check should not rely on it.\n\t\t\t\tif (zipHeader.filename === 'mimetype' && zipHeader.compressedSize === zipHeader.uncompressedSize) {\n\t\t\t\t\tconst mimeType = await tokenizer.readToken(new Token.StringType(zipHeader.compressedSize, 'utf-8'));\n\n\t\t\t\t\tswitch (mimeType) {\n\t\t\t\t\t\tcase 'application/epub+zip':\n\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\text: 'epub',\n\t\t\t\t\t\t\t\tmime: 'application/epub+zip'\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\tcase 'application/vnd.oasis.opendocument.text':\n\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\text: 'odt',\n\t\t\t\t\t\t\t\tmime: 'application/vnd.oasis.opendocument.text'\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\tcase 'application/vnd.oasis.opendocument.spreadsheet':\n\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\text: 'ods',\n\t\t\t\t\t\t\t\tmime: 'application/vnd.oasis.opendocument.spreadsheet'\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\tcase 'application/vnd.oasis.opendocument.presentation':\n\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\text: 'odp',\n\t\t\t\t\t\t\t\tmime: 'application/vnd.oasis.opendocument.presentation'\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Try to find next header manually when current one is corrupted\n\t\t\t\tif (zipHeader.compressedSize === 0) {\n\t\t\t\t\tlet nextHeaderIndex = -1;\n\n\t\t\t\t\twhile (nextHeaderIndex < 0 && (tokenizer.position < tokenizer.fileInfo.size)) {\n\t\t\t\t\t\tawait tokenizer.peekBuffer(buffer, {mayBeLess: true});\n\n\t\t\t\t\t\tnextHeaderIndex = buffer.indexOf('504B0304', 0, 'hex');\n\t\t\t\t\t\t// Move position to the next header if found, skip the whole buffer otherwise\n\t\t\t\t\t\tawait tokenizer.ignore(nextHeaderIndex >= 0 ? nextHeaderIndex : buffer.length);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tawait tokenizer.ignore(zipHeader.compressedSize);\n\t\t\t\t}\n\t\t\t}\n\t\t} catch (error) {\n\t\t\tif (!(error instanceof strtok3.EndOfStreamError)) {\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t}\n\n\t\treturn {\n\t\t\text: 'zip',\n\t\t\tmime: 'application/zip'\n\t\t};\n\t}\n\n\tif (checkString('OggS')) {\n\t\t// This is an OGG container\n\t\tawait tokenizer.ignore(28);\n\t\tconst type = Buffer.alloc(8);\n\t\tawait tokenizer.readBuffer(type);\n\n\t\t// Needs to be before `ogg` check\n\t\tif (_check(type, [0x4F, 0x70, 0x75, 0x73, 0x48, 0x65, 0x61, 0x64])) {\n\t\t\treturn {\n\t\t\t\text: 'opus',\n\t\t\t\tmime: 'audio/opus'\n\t\t\t};\n\t\t}\n\n\t\t// If ' theora' in header.\n\t\tif (_check(type, [0x80, 0x74, 0x68, 0x65, 0x6F, 0x72, 0x61])) {\n\t\t\treturn {\n\t\t\t\text: 'ogv',\n\t\t\t\tmime: 'video/ogg'\n\t\t\t};\n\t\t}\n\n\t\t// If '\\x01video' in header.\n\t\tif (_check(type, [0x01, 0x76, 0x69, 0x64, 0x65, 0x6F, 0x00])) {\n\t\t\treturn {\n\t\t\t\text: 'ogm',\n\t\t\t\tmime: 'video/ogg'\n\t\t\t};\n\t\t}\n\n\t\t// If ' FLAC' in header https://xiph.org/flac/faq.html\n\t\tif (_check(type, [0x7F, 0x46, 0x4C, 0x41, 0x43])) {\n\t\t\treturn {\n\t\t\t\text: 'oga',\n\t\t\t\tmime: 'audio/ogg'\n\t\t\t};\n\t\t}\n\n\t\t// 'Speex ' in header https://en.wikipedia.org/wiki/Speex\n\t\tif (_check(type, [0x53, 0x70, 0x65, 0x65, 0x78, 0x20, 0x20])) {\n\t\t\treturn {\n\t\t\t\text: 'spx',\n\t\t\t\tmime: 'audio/ogg'\n\t\t\t};\n\t\t}\n\n\t\t// If '\\x01vorbis' in header\n\t\tif (_check(type, [0x01, 0x76, 0x6F, 0x72, 0x62, 0x69, 0x73])) {\n\t\t\treturn {\n\t\t\t\text: 'ogg',\n\t\t\t\tmime: 'audio/ogg'\n\t\t\t};\n\t\t}\n\n\t\t// Default OGG container https://www.iana.org/assignments/media-types/application/ogg\n\t\treturn {\n\t\t\text: 'ogx',\n\t\t\tmime: 'application/ogg'\n\t\t};\n\t}\n\n\tif (\n\t\tcheck([0x50, 0x4B]) &&\n\t\t(buffer[2] === 0x3 || buffer[2] === 0x5 || buffer[2] === 0x7) &&\n\t\t(buffer[3] === 0x4 || buffer[3] === 0x6 || buffer[3] === 0x8)\n\t) {\n\t\treturn {\n\t\t\text: 'zip',\n\t\t\tmime: 'application/zip'\n\t\t};\n\t}\n\n\t//\n\n\t// File Type Box (https://en.wikipedia.org/wiki/ISO_base_media_file_format)\n\t// It's not required to be first, but it's recommended to be. Almost all ISO base media files start with `ftyp` box.\n\t// `ftyp` box must contain a brand major identifier, which must consist of ISO 8859-1 printable characters.\n\t// Here we check for 8859-1 printable characters (for simplicity, it's a mask which also catches one non-printable character).\n\tif (\n\t\tcheckString('ftyp', {offset: 4}) &&\n\t\t(buffer[8] & 0x60) !== 0x00 // Brand major, first character ASCII?\n\t) {\n\t\t// They all can have MIME `video/mp4` except `application/mp4` special-case which is hard to detect.\n\t\t// For some cases, we're specific, everything else falls to `video/mp4` with `mp4` extension.\n\t\tconst brandMajor = buffer.toString('binary', 8, 12).replace('\\0', ' ').trim();\n\t\tswitch (brandMajor) {\n\t\t\tcase 'avif':\n\t\t\t\treturn {ext: 'avif', mime: 'image/avif'};\n\t\t\tcase 'mif1':\n\t\t\t\treturn {ext: 'heic', mime: 'image/heif'};\n\t\t\tcase 'msf1':\n\t\t\t\treturn {ext: 'heic', mime: 'image/heif-sequence'};\n\t\t\tcase 'heic':\n\t\t\tcase 'heix':\n\t\t\t\treturn {ext: 'heic', mime: 'image/heic'};\n\t\t\tcase 'hevc':\n\t\t\tcase 'hevx':\n\t\t\t\treturn {ext: 'heic', mime: 'image/heic-sequence'};\n\t\t\tcase 'qt':\n\t\t\t\treturn {ext: 'mov', mime: 'video/quicktime'};\n\t\t\tcase 'M4V':\n\t\t\tcase 'M4VH':\n\t\t\tcase 'M4VP':\n\t\t\t\treturn {ext: 'm4v', mime: 'video/x-m4v'};\n\t\t\tcase 'M4P':\n\t\t\t\treturn {ext: 'm4p', mime: 'video/mp4'};\n\t\t\tcase 'M4B':\n\t\t\t\treturn {ext: 'm4b', mime: 'audio/mp4'};\n\t\t\tcase 'M4A':\n\t\t\t\treturn {ext: 'm4a', mime: 'audio/x-m4a'};\n\t\t\tcase 'F4V':\n\t\t\t\treturn {ext: 'f4v', mime: 'video/mp4'};\n\t\t\tcase 'F4P':\n\t\t\t\treturn {ext: 'f4p', mime: 'video/mp4'};\n\t\t\tcase 'F4A':\n\t\t\t\treturn {ext: 'f4a', mime: 'audio/mp4'};\n\t\t\tcase 'F4B':\n\t\t\t\treturn {ext: 'f4b', mime: 'audio/mp4'};\n\t\t\tcase 'crx':\n\t\t\t\treturn {ext: 'cr3', mime: 'image/x-canon-cr3'};\n\t\t\tdefault:\n\t\t\t\tif (brandMajor.startsWith('3g')) {\n\t\t\t\t\tif (brandMajor.startsWith('3g2')) {\n\t\t\t\t\t\treturn {ext: '3g2', mime: 'video/3gpp2'};\n\t\t\t\t\t}\n\n\t\t\t\t\treturn {ext: '3gp', mime: 'video/3gpp'};\n\t\t\t\t}\n\n\t\t\t\treturn {ext: 'mp4', mime: 'video/mp4'};\n\t\t}\n\t}\n\n\tif (checkString('MThd')) {\n\t\treturn {\n\t\t\text: 'mid',\n\t\t\tmime: 'audio/midi'\n\t\t};\n\t}\n\n\tif (\n\t\tcheckString('wOFF') &&\n\t\t(\n\t\t\tcheck([0x00, 0x01, 0x00, 0x00], {offset: 4}) ||\n\t\t\tcheckString('OTTO', {offset: 4})\n\t\t)\n\t) {\n\t\treturn {\n\t\t\text: 'woff',\n\t\t\tmime: 'font/woff'\n\t\t};\n\t}\n\n\tif (\n\t\tcheckString('wOF2') &&\n\t\t(\n\t\t\tcheck([0x00, 0x01, 0x00, 0x00], {offset: 4}) ||\n\t\t\tcheckString('OTTO', {offset: 4})\n\t\t)\n\t) {\n\t\treturn {\n\t\t\text: 'woff2',\n\t\t\tmime: 'font/woff2'\n\t\t};\n\t}\n\n\tif (check([0xD4, 0xC3, 0xB2, 0xA1]) || check([0xA1, 0xB2, 0xC3, 0xD4])) {\n\t\treturn {\n\t\t\text: 'pcap',\n\t\t\tmime: 'application/vnd.tcpdump.pcap'\n\t\t};\n\t}\n\n\t// Sony DSD Stream File (DSF)\n\tif (checkString('DSD ')) {\n\t\treturn {\n\t\t\text: 'dsf',\n\t\t\tmime: 'audio/x-dsf' // Non-standard\n\t\t};\n\t}\n\n\tif (checkString('LZIP')) {\n\t\treturn {\n\t\t\text: 'lz',\n\t\t\tmime: 'application/x-lzip'\n\t\t};\n\t}\n\n\tif (checkString('fLaC')) {\n\t\treturn {\n\t\t\text: 'flac',\n\t\t\tmime: 'audio/x-flac'\n\t\t};\n\t}\n\n\tif (check([0x42, 0x50, 0x47, 0xFB])) {\n\t\treturn {\n\t\t\text: 'bpg',\n\t\t\tmime: 'image/bpg'\n\t\t};\n\t}\n\n\tif (checkString('wvpk')) {\n\t\treturn {\n\t\t\text: 'wv',\n\t\t\tmime: 'audio/wavpack'\n\t\t};\n\t}\n\n\tif (checkString('%PDF')) {\n\t\tawait tokenizer.ignore(1350);\n\t\tconst maxBufferSize = 10 * 1024 * 1024;\n\t\tconst buffer = Buffer.alloc(Math.min(maxBufferSize, tokenizer.fileInfo.size));\n\t\tawait tokenizer.readBuffer(buffer, {mayBeLess: true});\n\n\t\t// Check if this is an Adobe Illustrator file\n\t\tif (buffer.includes(Buffer.from('AIPrivateData'))) {\n\t\t\treturn {\n\t\t\t\text: 'ai',\n\t\t\t\tmime: 'application/postscript'\n\t\t\t};\n\t\t}\n\n\t\t// Assume this is just a normal PDF\n\t\treturn {\n\t\t\text: 'pdf',\n\t\t\tmime: 'application/pdf'\n\t\t};\n\t}\n\n\tif (check([0x00, 0x61, 0x73, 0x6D])) {\n\t\treturn {\n\t\t\text: 'wasm',\n\t\t\tmime: 'application/wasm'\n\t\t};\n\t}\n\n\t// TIFF, little-endian type\n\tif (check([0x49, 0x49, 0x2A, 0x0])) {\n\t\tif (checkString('CR', {offset: 8})) {\n\t\t\treturn {\n\t\t\t\text: 'cr2',\n\t\t\t\tmime: 'image/x-canon-cr2'\n\t\t\t};\n\t\t}\n\n\t\tif (check([0x1C, 0x00, 0xFE, 0x00], {offset: 8}) || check([0x1F, 0x00, 0x0B, 0x00], {offset: 8})) {\n\t\t\treturn {\n\t\t\t\text: 'nef',\n\t\t\t\tmime: 'image/x-nikon-nef'\n\t\t\t};\n\t\t}\n\n\t\tif (\n\t\t\tcheck([0x08, 0x00, 0x00, 0x00], {offset: 4}) &&\n\t\t\t(check([0x2D, 0x00, 0xFE, 0x00], {offset: 8}) ||\n\t\t\t\tcheck([0x27, 0x00, 0xFE, 0x00], {offset: 8}))\n\t\t) {\n\t\t\treturn {\n\t\t\t\text: 'dng',\n\t\t\t\tmime: 'image/x-adobe-dng'\n\t\t\t};\n\t\t}\n\n\t\tbuffer = Buffer.alloc(24);\n\t\tawait tokenizer.peekBuffer(buffer);\n\t\tif (\n\t\t\t(check([0x10, 0xFB, 0x86, 0x01], {offset: 4}) || check([0x08, 0x00, 0x00, 0x00], {offset: 4})) &&\n\t\t\t// This pattern differentiates ARW from other TIFF-ish file types:\n\t\t\tcheck([0x00, 0xFE, 0x00, 0x04, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x03, 0x01], {offset: 9})\n\t\t) {\n\t\t\treturn {\n\t\t\t\text: 'arw',\n\t\t\t\tmime: 'image/x-sony-arw'\n\t\t\t};\n\t\t}\n\n\t\treturn {\n\t\t\text: 'tif',\n\t\t\tmime: 'image/tiff'\n\t\t};\n\t}\n\n\t// TIFF, big-endian type\n\tif (check([0x4D, 0x4D, 0x0, 0x2A])) {\n\t\treturn {\n\t\t\text: 'tif',\n\t\t\tmime: 'image/tiff'\n\t\t};\n\t}\n\n\tif (checkString('MAC ')) {\n\t\treturn {\n\t\t\text: 'ape',\n\t\t\tmime: 'audio/ape'\n\t\t};\n\t}\n\n\t// https://github.com/threatstack/libmagic/blob/master/magic/Magdir/matroska\n\tif (check([0x1A, 0x45, 0xDF, 0xA3])) { // Root element: EBML\n\t\tasync function readField() {\n\t\t\tconst msb = await tokenizer.peekNumber(Token.UINT8);\n\t\t\tlet mask = 0x80;\n\t\t\tlet ic = 0; // 0 = A, 1 = B, 2 = C, 3 = D\n\n\t\t\twhile ((msb & mask) === 0) {\n\t\t\t\t++ic;\n\t\t\t\tmask >>= 1;\n\t\t\t}\n\n\t\t\tconst id = Buffer.alloc(ic + 1);\n\t\t\tawait tokenizer.readBuffer(id);\n\t\t\treturn id;\n\t\t}\n\n\t\tasync function readElement() {\n\t\t\tconst id = await readField();\n\t\t\tconst lenField = await readField();\n\t\t\tlenField[0] ^= 0x80 >> (lenField.length - 1);\n\t\t\tconst nrLen = Math.min(6, lenField.length); // JavaScript can max read 6 bytes integer\n\t\t\treturn {\n\t\t\t\tid: id.readUIntBE(0, id.length),\n\t\t\t\tlen: lenField.readUIntBE(lenField.length - nrLen, nrLen)\n\t\t\t};\n\t\t}\n\n\t\tasync function readChildren(level, children) {\n\t\t\twhile (children > 0) {\n\t\t\t\tconst e = await readElement();\n\t\t\t\tif (e.id === 0x4282) {\n\t\t\t\t\treturn tokenizer.readToken(new Token.StringType(e.len, 'utf-8')); // Return DocType\n\t\t\t\t}\n\n\t\t\t\tawait tokenizer.ignore(e.len); // ignore payload\n\t\t\t\t--children;\n\t\t\t}\n\t\t}\n\n\t\tconst re = await readElement();\n\t\tconst docType = await readChildren(1, re.len);\n\n\t\tswitch (docType) {\n\t\t\tcase 'webm':\n\t\t\t\treturn {\n\t\t\t\t\text: 'webm',\n\t\t\t\t\tmime: 'video/webm'\n\t\t\t\t};\n\n\t\t\tcase 'matroska':\n\t\t\t\treturn {\n\t\t\t\t\text: 'mkv',\n\t\t\t\t\tmime: 'video/x-matroska'\n\t\t\t\t};\n\n\t\t\tdefault:\n\t\t\t\treturn;\n\t\t}\n\t}\n\n\t// RIFF file format which might be AVI, WAV, QCP, etc\n\tif (check([0x52, 0x49, 0x46, 0x46])) {\n\t\tif (check([0x41, 0x56, 0x49], {offset: 8})) {\n\t\t\treturn {\n\t\t\t\text: 'avi',\n\t\t\t\tmime: 'video/vnd.avi'\n\t\t\t};\n\t\t}\n\n\t\tif (check([0x57, 0x41, 0x56, 0x45], {offset: 8})) {\n\t\t\treturn {\n\t\t\t\text: 'wav',\n\t\t\t\tmime: 'audio/vnd.wave'\n\t\t\t};\n\t\t}\n\n\t\t// QLCM, QCP file\n\t\tif (check([0x51, 0x4C, 0x43, 0x4D], {offset: 8})) {\n\t\t\treturn {\n\t\t\t\text: 'qcp',\n\t\t\t\tmime: 'audio/qcelp'\n\t\t\t};\n\t\t}\n\t}\n\n\tif (checkString('SQLi')) {\n\t\treturn {\n\t\t\text: 'sqlite',\n\t\t\tmime: 'application/x-sqlite3'\n\t\t};\n\t}\n\n\tif (check([0x4E, 0x45, 0x53, 0x1A])) {\n\t\treturn {\n\t\t\text: 'nes',\n\t\t\tmime: 'application/x-nintendo-nes-rom'\n\t\t};\n\t}\n\n\tif (checkString('Cr24')) {\n\t\treturn {\n\t\t\text: 'crx',\n\t\t\tmime: 'application/x-google-chrome-extension'\n\t\t};\n\t}\n\n\tif (\n\t\tcheckString('MSCF') ||\n\t\tcheckString('ISc(')\n\t) {\n\t\treturn {\n\t\t\text: 'cab',\n\t\t\tmime: 'application/vnd.ms-cab-compressed'\n\t\t};\n\t}\n\n\tif (check([0xED, 0xAB, 0xEE, 0xDB])) {\n\t\treturn {\n\t\t\text: 'rpm',\n\t\t\tmime: 'application/x-rpm'\n\t\t};\n\t}\n\n\tif (check([0xC5, 0xD0, 0xD3, 0xC6])) {\n\t\treturn {\n\t\t\text: 'eps',\n\t\t\tmime: 'application/eps'\n\t\t};\n\t}\n\n\tif (check([0x28, 0xB5, 0x2F, 0xFD])) {\n\t\treturn {\n\t\t\text: 'zst',\n\t\t\tmime: 'application/zstd'\n\t\t};\n\t}\n\n\t// -- 5-byte signatures --\n\n\tif (check([0x4F, 0x54, 0x54, 0x4F, 0x00])) {\n\t\treturn {\n\t\t\text: 'otf',\n\t\t\tmime: 'font/otf'\n\t\t};\n\t}\n\n\tif (checkString('#!AMR')) {\n\t\treturn {\n\t\t\text: 'amr',\n\t\t\tmime: 'audio/amr'\n\t\t};\n\t}\n\n\tif (checkString('{\\\\rtf')) {\n\t\treturn {\n\t\t\text: 'rtf',\n\t\t\tmime: 'application/rtf'\n\t\t};\n\t}\n\n\tif (check([0x46, 0x4C, 0x56, 0x01])) {\n\t\treturn {\n\t\t\text: 'flv',\n\t\t\tmime: 'video/x-flv'\n\t\t};\n\t}\n\n\tif (checkString('IMPM')) {\n\t\treturn {\n\t\t\text: 'it',\n\t\t\tmime: 'audio/x-it'\n\t\t};\n\t}\n\n\tif (\n\t\tcheckString('-lh0-', {offset: 2}) ||\n\t\tcheckString('-lh1-', {offset: 2}) ||\n\t\tcheckString('-lh2-', {offset: 2}) ||\n\t\tcheckString('-lh3-', {offset: 2}) ||\n\t\tcheckString('-lh4-', {offset: 2}) ||\n\t\tcheckString('-lh5-', {offset: 2}) ||\n\t\tcheckString('-lh6-', {offset: 2}) ||\n\t\tcheckString('-lh7-', {offset: 2}) ||\n\t\tcheckString('-lzs-', {offset: 2}) ||\n\t\tcheckString('-lz4-', {offset: 2}) ||\n\t\tcheckString('-lz5-', {offset: 2}) ||\n\t\tcheckString('-lhd-', {offset: 2})\n\t) {\n\t\treturn {\n\t\t\text: 'lzh',\n\t\t\tmime: 'application/x-lzh-compressed'\n\t\t};\n\t}\n\n\t// MPEG program stream (PS or MPEG-PS)\n\tif (check([0x00, 0x00, 0x01, 0xBA])) {\n\t\t// MPEG-PS, MPEG-1 Part 1\n\t\tif (check([0x21], {offset: 4, mask: [0xF1]})) {\n\t\t\treturn {\n\t\t\t\text: 'mpg', // May also be .ps, .mpeg\n\t\t\t\tmime: 'video/MP1S'\n\t\t\t};\n\t\t}\n\n\t\t// MPEG-PS, MPEG-2 Part 1\n\t\tif (check([0x44], {offset: 4, mask: [0xC4]})) {\n\t\t\treturn {\n\t\t\t\text: 'mpg', // May also be .mpg, .m2p, .vob or .sub\n\t\t\t\tmime: 'video/MP2P'\n\t\t\t};\n\t\t}\n\t}\n\n\tif (checkString('ITSF')) {\n\t\treturn {\n\t\t\text: 'chm',\n\t\t\tmime: 'application/vnd.ms-htmlhelp'\n\t\t};\n\t}\n\n\t// -- 6-byte signatures --\n\n\tif (check([0xFD, 0x37, 0x7A, 0x58, 0x5A, 0x00])) {\n\t\treturn {\n\t\t\text: 'xz',\n\t\t\tmime: 'application/x-xz'\n\t\t};\n\t}\n\n\tif (checkString('')) {\n\t\tawait tokenizer.ignore(8);\n\t\tconst str = await tokenizer.readToken(new Token.StringType(13, 'ascii'));\n\t\tif (str === 'debian-binary') {\n\t\t\treturn {\n\t\t\t\text: 'deb',\n\t\t\t\tmime: 'application/x-deb'\n\t\t\t};\n\t\t}\n\n\t\treturn {\n\t\t\text: 'ar',\n\t\t\tmime: 'application/x-unix-archive'\n\t\t};\n\t}\n\n\t// -- 8-byte signatures --\n\n\tif (check([0x89, 0x50, 0x4E, 0x47, 0x0D, 0x0A, 0x1A, 0x0A])) {\n\t\t// APNG format (https://wiki.mozilla.org/APNG_Specification)\n\t\t// 1. Find the first IDAT (image data) chunk (49 44 41 54)\n\t\t// 2. Check if there is an \"acTL\" chunk before the IDAT one (61 63 54 4C)\n\n\t\t// Offset calculated as follows:\n\t\t// - 8 bytes: PNG signature\n\t\t// - 4 (length) + 4 (chunk type) + 13 (chunk data) + 4 (CRC): IHDR chunk\n\n\t\tawait tokenizer.ignore(8); // ignore PNG signature\n\n\t\tasync function readChunkHeader() {\n\t\t\treturn {\n\t\t\t\tlength: await tokenizer.readToken(Token.INT32_BE),\n\t\t\t\ttype: await tokenizer.readToken(new Token.StringType(4, 'binary'))\n\t\t\t};\n\t\t}\n\n\t\tdo {\n\t\t\tconst chunk = await readChunkHeader();\n\t\t\tif (chunk.length < 0) {\n\t\t\t\treturn; // Invalid chunk length\n\t\t\t}\n\n\t\t\tswitch (chunk.type) {\n\t\t\t\tcase 'IDAT':\n\t\t\t\t\treturn {\n\t\t\t\t\t\text: 'png',\n\t\t\t\t\t\tmime: 'image/png'\n\t\t\t\t\t};\n\t\t\t\tcase 'acTL':\n\t\t\t\t\treturn {\n\t\t\t\t\t\text: 'apng',\n\t\t\t\t\t\tmime: 'image/apng'\n\t\t\t\t\t};\n\t\t\t\tdefault:\n\t\t\t\t\tawait tokenizer.ignore(chunk.length + 4); // Ignore chunk-data + CRC\n\t\t\t}\n\t\t} while (tokenizer.position + 8 < tokenizer.fileInfo.size);\n\n\t\treturn {\n\t\t\text: 'png',\n\t\t\tmime: 'image/png'\n\t\t};\n\t}\n\n\tif (check([0x41, 0x52, 0x52, 0x4F, 0x57, 0x31, 0x00, 0x00])) {\n\t\treturn {\n\t\t\text: 'arrow',\n\t\t\tmime: 'application/x-apache-arrow'\n\t\t};\n\t}\n\n\tif (check([0x67, 0x6C, 0x54, 0x46, 0x02, 0x00, 0x00, 0x00])) {\n\t\treturn {\n\t\t\text: 'glb',\n\t\t\tmime: 'model/gltf-binary'\n\t\t};\n\t}\n\n\t// `mov` format variants\n\tif (\n\t\tcheck([0x66, 0x72, 0x65, 0x65], {offset: 4}) || // `free`\n\t\tcheck([0x6D, 0x64, 0x61, 0x74], {offset: 4}) || // `mdat` MJPEG\n\t\tcheck([0x6D, 0x6F, 0x6F, 0x76], {offset: 4}) || // `moov`\n\t\tcheck([0x77, 0x69, 0x64, 0x65], {offset: 4}) // `wide`\n\t) {\n\t\treturn {\n\t\t\text: 'mov',\n\t\t\tmime: 'video/quicktime'\n\t\t};\n\t}\n\n\t// -- 9-byte signatures --\n\n\tif (check([0x49, 0x49, 0x52, 0x4F, 0x08, 0x00, 0x00, 0x00, 0x18])) {\n\t\treturn {\n\t\t\text: 'orf',\n\t\t\tmime: 'image/x-olympus-orf'\n\t\t};\n\t}\n\n\tif (checkString('gimp xcf ')) {\n\t\treturn {\n\t\t\text: 'xcf',\n\t\t\tmime: 'image/x-xcf'\n\t\t};\n\t}\n\n\t// -- 12-byte signatures --\n\n\tif (check([0x49, 0x49, 0x55, 0x00, 0x18, 0x00, 0x00, 0x00, 0x88, 0xE7, 0x74, 0xD8])) {\n\t\treturn {\n\t\t\text: 'rw2',\n\t\t\tmime: 'image/x-panasonic-rw2'\n\t\t};\n\t}\n\n\t// ASF_Header_Object first 80 bytes\n\tif (check([0x30, 0x26, 0xB2, 0x75, 0x8E, 0x66, 0xCF, 0x11, 0xA6, 0xD9])) {\n\t\tasync function readHeader() {\n\t\t\tconst guid = Buffer.alloc(16);\n\t\t\tawait tokenizer.readBuffer(guid);\n\t\t\treturn {\n\t\t\t\tid: guid,\n\t\t\t\tsize: Number(await tokenizer.readToken(Token.UINT64_LE))\n\t\t\t};\n\t\t}\n\n\t\tawait tokenizer.ignore(30);\n\t\t// Search for header should be in first 1KB of file.\n\t\twhile (tokenizer.position + 24 < tokenizer.fileInfo.size) {\n\t\t\tconst header = await readHeader();\n\t\t\tlet payload = header.size - 24;\n\t\t\tif (_check(header.id, [0x91, 0x07, 0xDC, 0xB7, 0xB7, 0xA9, 0xCF, 0x11, 0x8E, 0xE6, 0x00, 0xC0, 0x0C, 0x20, 0x53, 0x65])) {\n\t\t\t\t// Sync on Stream-Properties-Object (B7DC0791-A9B7-11CF-8EE6-00C00C205365)\n\t\t\t\tconst typeId = Buffer.alloc(16);\n\t\t\t\tpayload -= await tokenizer.readBuffer(typeId);\n\n\t\t\t\tif (_check(typeId, [0x40, 0x9E, 0x69, 0xF8, 0x4D, 0x5B, 0xCF, 0x11, 0xA8, 0xFD, 0x00, 0x80, 0x5F, 0x5C, 0x44, 0x2B])) {\n\t\t\t\t\t// Found audio:\n\t\t\t\t\treturn {\n\t\t\t\t\t\text: 'asf',\n\t\t\t\t\t\tmime: 'audio/x-ms-asf'\n\t\t\t\t\t};\n\t\t\t\t}\n\n\t\t\t\tif (_check(typeId, [0xC0, 0xEF, 0x19, 0xBC, 0x4D, 0x5B, 0xCF, 0x11, 0xA8, 0xFD, 0x00, 0x80, 0x5F, 0x5C, 0x44, 0x2B])) {\n\t\t\t\t\t// Found video:\n\t\t\t\t\treturn {\n\t\t\t\t\t\text: 'asf',\n\t\t\t\t\t\tmime: 'video/x-ms-asf'\n\t\t\t\t\t};\n\t\t\t\t}\n\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tawait tokenizer.ignore(payload);\n\t\t}\n\n\t\t// Default to ASF generic extension\n\t\treturn {\n\t\t\text: 'asf',\n\t\t\tmime: 'application/vnd.ms-asf'\n\t\t};\n\t}\n\n\tif (check([0xAB, 0x4B, 0x54, 0x58, 0x20, 0x31, 0x31, 0xBB, 0x0D, 0x0A, 0x1A, 0x0A])) {\n\t\treturn {\n\t\t\text: 'ktx',\n\t\t\tmime: 'image/ktx'\n\t\t};\n\t}\n\n\tif ((check([0x7E, 0x10, 0x04]) || check([0x7E, 0x18, 0x04])) && check([0x30, 0x4D, 0x49, 0x45], {offset: 4})) {\n\t\treturn {\n\t\t\text: 'mie',\n\t\t\tmime: 'application/x-mie'\n\t\t};\n\t}\n\n\tif (check([0x27, 0x0A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], {offset: 2})) {\n\t\treturn {\n\t\t\text: 'shp',\n\t\t\tmime: 'application/x-esri-shape'\n\t\t};\n\t}\n\n\tif (check([0x00, 0x00, 0x00, 0x0C, 0x6A, 0x50, 0x20, 0x20, 0x0D, 0x0A, 0x87, 0x0A])) {\n\t\t// JPEG-2000 family\n\n\t\tawait tokenizer.ignore(20);\n\t\tconst type = await tokenizer.readToken(new Token.StringType(4, 'ascii'));\n\t\tswitch (type) {\n\t\t\tcase 'jp2 ':\n\t\t\t\treturn {\n\t\t\t\t\text: 'jp2',\n\t\t\t\t\tmime: 'image/jp2'\n\t\t\t\t};\n\t\t\tcase 'jpx ':\n\t\t\t\treturn {\n\t\t\t\t\text: 'jpx',\n\t\t\t\t\tmime: 'image/jpx'\n\t\t\t\t};\n\t\t\tcase 'jpm ':\n\t\t\t\treturn {\n\t\t\t\t\text: 'jpm',\n\t\t\t\t\tmime: 'image/jpm'\n\t\t\t\t};\n\t\t\tcase 'mjp2':\n\t\t\t\treturn {\n\t\t\t\t\text: 'mj2',\n\t\t\t\t\tmime: 'image/mj2'\n\t\t\t\t};\n\t\t\tdefault:\n\t\t\t\treturn;\n\t\t}\n\t}\n\n\tif (\n\t\tcheck([0xFF, 0x0A]) ||\n\t\tcheck([0x00, 0x00, 0x00, 0x0C, 0x4A, 0x58, 0x4C, 0x20, 0x0D, 0x0A, 0x87, 0x0A])\n\t) {\n\t\treturn {\n\t\t\text: 'jxl',\n\t\t\tmime: 'image/jxl'\n\t\t};\n\t}\n\n\t// -- Unsafe signatures --\n\n\tif (\n\t\tcheck([0x0, 0x0, 0x1, 0xBA]) ||\n\t\tcheck([0x0, 0x0, 0x1, 0xB3])\n\t) {\n\t\treturn {\n\t\t\text: 'mpg',\n\t\t\tmime: 'video/mpeg'\n\t\t};\n\t}\n\n\tif (check([0x00, 0x01, 0x00, 0x00, 0x00])) {\n\t\treturn {\n\t\t\text: 'ttf',\n\t\t\tmime: 'font/ttf'\n\t\t};\n\t}\n\n\tif (check([0x00, 0x00, 0x01, 0x00])) {\n\t\treturn {\n\t\t\text: 'ico',\n\t\t\tmime: 'image/x-icon'\n\t\t};\n\t}\n\n\tif (check([0x00, 0x00, 0x02, 0x00])) {\n\t\treturn {\n\t\t\text: 'cur',\n\t\t\tmime: 'image/x-icon'\n\t\t};\n\t}\n\n\tif (check([0xD0, 0xCF, 0x11, 0xE0, 0xA1, 0xB1, 0x1A, 0xE1])) {\n\t\t// Detected Microsoft Compound File Binary File (MS-CFB) Format.\n\t\treturn {\n\t\t\text: 'cfb',\n\t\t\tmime: 'application/x-cfb'\n\t\t};\n\t}\n\n\t// Increase sample size from 12 to 256.\n\tawait tokenizer.peekBuffer(buffer, {length: Math.min(256, tokenizer.fileInfo.size), mayBeLess: true});\n\n\t// -- 15-byte signatures --\n\n\tif (checkString('BEGIN:')) {\n\t\tif (checkString('VCARD', {offset: 6})) {\n\t\t\treturn {\n\t\t\t\text: 'vcf',\n\t\t\t\tmime: 'text/vcard'\n\t\t\t};\n\t\t}\n\n\t\tif (checkString('VCALENDAR', {offset: 6})) {\n\t\t\treturn {\n\t\t\t\text: 'ics',\n\t\t\t\tmime: 'text/calendar'\n\t\t\t};\n\t\t}\n\t}\n\n\t// `raf` is here just to keep all the raw image detectors together.\n\tif (checkString('FUJIFILMCCD-RAW')) {\n\t\treturn {\n\t\t\text: 'raf',\n\t\t\tmime: 'image/x-fujifilm-raf'\n\t\t};\n\t}\n\n\tif (checkString('Extended Module:')) {\n\t\treturn {\n\t\t\text: 'xm',\n\t\t\tmime: 'audio/x-xm'\n\t\t};\n\t}\n\n\tif (checkString('Creative Voice File')) {\n\t\treturn {\n\t\t\text: 'voc',\n\t\t\tmime: 'audio/x-voc'\n\t\t};\n\t}\n\n\tif (check([0x04, 0x00, 0x00, 0x00]) && buffer.length >= 16) { // Rough & quick check Pickle/ASAR\n\t\tconst jsonSize = buffer.readUInt32LE(12);\n\t\tif (jsonSize > 12 && buffer.length >= jsonSize + 16) {\n\t\t\ttry {\n\t\t\t\tconst header = buffer.slice(16, jsonSize + 16).toString();\n\t\t\t\tconst json = JSON.parse(header);\n\t\t\t\t// Check if Pickle is ASAR\n\t\t\t\tif (json.files) { // Final check, assuring Pickle/ASAR format\n\t\t\t\t\treturn {\n\t\t\t\t\t\text: 'asar',\n\t\t\t\t\t\tmime: 'application/x-asar'\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t} catch (_) {\n\t\t\t}\n\t\t}\n\t}\n\n\tif (check([0x06, 0x0E, 0x2B, 0x34, 0x02, 0x05, 0x01, 0x01, 0x0D, 0x01, 0x02, 0x01, 0x01, 0x02])) {\n\t\treturn {\n\t\t\text: 'mxf',\n\t\t\tmime: 'application/mxf'\n\t\t};\n\t}\n\n\tif (checkString('SCRM', {offset: 44})) {\n\t\treturn {\n\t\t\text: 's3m',\n\t\t\tmime: 'audio/x-s3m'\n\t\t};\n\t}\n\n\tif (check([0x47], {offset: 4}) && (check([0x47], {offset: 192}) || check([0x47], {offset: 196}))) {\n\t\treturn {\n\t\t\text: 'mts',\n\t\t\tmime: 'video/mp2t'\n\t\t};\n\t}\n\n\tif (check([0x42, 0x4F, 0x4F, 0x4B, 0x4D, 0x4F, 0x42, 0x49], {offset: 60})) {\n\t\treturn {\n\t\t\text: 'mobi',\n\t\t\tmime: 'application/x-mobipocket-ebook'\n\t\t};\n\t}\n\n\tif (check([0x44, 0x49, 0x43, 0x4D], {offset: 128})) {\n\t\treturn {\n\t\t\text: 'dcm',\n\t\t\tmime: 'application/dicom'\n\t\t};\n\t}\n\n\tif (check([0x4C, 0x00, 0x00, 0x00, 0x01, 0x14, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46])) {\n\t\treturn {\n\t\t\text: 'lnk',\n\t\t\tmime: 'application/x.ms.shortcut' // Invented by us\n\t\t};\n\t}\n\n\tif (check([0x62, 0x6F, 0x6F, 0x6B, 0x00, 0x00, 0x00, 0x00, 0x6D, 0x61, 0x72, 0x6B, 0x00, 0x00, 0x00, 0x00])) {\n\t\treturn {\n\t\t\text: 'alias',\n\t\t\tmime: 'application/x.apple.alias' // Invented by us\n\t\t};\n\t}\n\n\tif (\n\t\tcheck([0x4C, 0x50], {offset: 34}) &&\n\t\t(\n\t\t\tcheck([0x00, 0x00, 0x01], {offset: 8}) ||\n\t\t\tcheck([0x01, 0x00, 0x02], {offset: 8}) ||\n\t\t\tcheck([0x02, 0x00, 0x02], {offset: 8})\n\t\t)\n\t) {\n\t\treturn {\n\t\t\text: 'eot',\n\t\t\tmime: 'application/vnd.ms-fontobject'\n\t\t};\n\t}\n\n\tif (check([0x06, 0x06, 0xED, 0xF5, 0xD8, 0x1D, 0x46, 0xE5, 0xBD, 0x31, 0xEF, 0xE7, 0xFE, 0x74, 0xB7, 0x1D])) {\n\t\treturn {\n\t\t\text: 'indd',\n\t\t\tmime: 'application/x-indesign'\n\t\t};\n\t}\n\n\t// Increase sample size from 256 to 512\n\tawait tokenizer.peekBuffer(buffer, {length: Math.min(512, tokenizer.fileInfo.size), mayBeLess: true});\n\n\t// Requires a buffer size of 512 bytes\n\tif (tarHeaderChecksumMatches(buffer)) {\n\t\treturn {\n\t\t\text: 'tar',\n\t\t\tmime: 'application/x-tar'\n\t\t};\n\t}\n\n\tif (check([0xFF, 0xFE, 0xFF, 0x0E, 0x53, 0x00, 0x6B, 0x00, 0x65, 0x00, 0x74, 0x00, 0x63, 0x00, 0x68, 0x00, 0x55, 0x00, 0x70, 0x00, 0x20, 0x00, 0x4D, 0x00, 0x6F, 0x00, 0x64, 0x00, 0x65, 0x00, 0x6C, 0x00])) {\n\t\treturn {\n\t\t\text: 'skp',\n\t\t\tmime: 'application/vnd.sketchup.skp'\n\t\t};\n\t}\n\n\tif (checkString('-----BEGIN PGP MESSAGE-----')) {\n\t\treturn {\n\t\t\text: 'pgp',\n\t\t\tmime: 'application/pgp-encrypted'\n\t\t};\n\t}\n\n\t// Check MPEG 1 or 2 Layer 3 header, or 'layer 0' for ADTS (MPEG sync-word 0xFFE)\n\tif (buffer.length >= 2 && check([0xFF, 0xE0], {offset: 0, mask: [0xFF, 0xE0]})) {\n\t\tif (check([0x10], {offset: 1, mask: [0x16]})) {\n\t\t\t// Check for (ADTS) MPEG-2\n\t\t\tif (check([0x08], {offset: 1, mask: [0x08]})) {\n\t\t\t\treturn {\n\t\t\t\t\text: 'aac',\n\t\t\t\t\tmime: 'audio/aac'\n\t\t\t\t};\n\t\t\t}\n\n\t\t\t// Must be (ADTS) MPEG-4\n\t\t\treturn {\n\t\t\t\text: 'aac',\n\t\t\t\tmime: 'audio/aac'\n\t\t\t};\n\t\t}\n\n\t\t// MPEG 1 or 2 Layer 3 header\n\t\t// Check for MPEG layer 3\n\t\tif (check([0x02], {offset: 1, mask: [0x06]})) {\n\t\t\treturn {\n\t\t\t\text: 'mp3',\n\t\t\t\tmime: 'audio/mpeg'\n\t\t\t};\n\t\t}\n\n\t\t// Check for MPEG layer 2\n\t\tif (check([0x04], {offset: 1, mask: [0x06]})) {\n\t\t\treturn {\n\t\t\t\text: 'mp2',\n\t\t\t\tmime: 'audio/mpeg'\n\t\t\t};\n\t\t}\n\n\t\t// Check for MPEG layer 1\n\t\tif (check([0x06], {offset: 1, mask: [0x06]})) {\n\t\t\treturn {\n\t\t\t\text: 'mp1',\n\t\t\t\tmime: 'audio/mpeg'\n\t\t\t};\n\t\t}\n\t}\n}\n\nconst stream = readableStream => new Promise((resolve, reject) => {\n\t// Using `eval` to work around issues when bundling with Webpack\n\tconst stream = eval('require')('stream'); // eslint-disable-line no-eval\n\n\treadableStream.on('error', reject);\n\treadableStream.once('readable', async () => {\n\t\t// Set up output stream\n\t\tconst pass = new stream.PassThrough();\n\t\tlet outputStream;\n\t\tif (stream.pipeline) {\n\t\t\toutputStream = stream.pipeline(readableStream, pass, () => {\n\t\t\t});\n\t\t} else {\n\t\t\toutputStream = readableStream.pipe(pass);\n\t\t}\n\n\t\t// Read the input stream and detect the filetype\n\t\tconst chunk = readableStream.read(minimumBytes) || readableStream.read() || Buffer.alloc(0);\n\t\ttry {\n\t\t\tconst fileType = await fromBuffer(chunk);\n\t\t\tpass.fileType = fileType;\n\t\t} catch (error) {\n\t\t\treject(error);\n\t\t}\n\n\t\tresolve(outputStream);\n\t});\n});\n\nconst fileType = {\n\tfromStream,\n\tfromTokenizer,\n\tfromBuffer,\n\tstream\n};\n\nObject.defineProperty(fileType, 'extensions', {\n\tget() {\n\t\treturn new Set(supported.extensions);\n\t}\n});\n\nObject.defineProperty(fileType, 'mimeTypes', {\n\tget() {\n\t\treturn new Set(supported.mimeTypes);\n\t}\n});\n\nmodule.exports = fileType;\n","'use strict';\n\nmodule.exports = {\n\textensions: [\n\t\t'jpg',\n\t\t'png',\n\t\t'apng',\n\t\t'gif',\n\t\t'webp',\n\t\t'flif',\n\t\t'xcf',\n\t\t'cr2',\n\t\t'cr3',\n\t\t'orf',\n\t\t'arw',\n\t\t'dng',\n\t\t'nef',\n\t\t'rw2',\n\t\t'raf',\n\t\t'tif',\n\t\t'bmp',\n\t\t'icns',\n\t\t'jxr',\n\t\t'psd',\n\t\t'indd',\n\t\t'zip',\n\t\t'tar',\n\t\t'rar',\n\t\t'gz',\n\t\t'bz2',\n\t\t'7z',\n\t\t'dmg',\n\t\t'mp4',\n\t\t'mid',\n\t\t'mkv',\n\t\t'webm',\n\t\t'mov',\n\t\t'avi',\n\t\t'mpg',\n\t\t'mp2',\n\t\t'mp3',\n\t\t'm4a',\n\t\t'oga',\n\t\t'ogg',\n\t\t'ogv',\n\t\t'opus',\n\t\t'flac',\n\t\t'wav',\n\t\t'spx',\n\t\t'amr',\n\t\t'pdf',\n\t\t'epub',\n\t\t'exe',\n\t\t'swf',\n\t\t'rtf',\n\t\t'wasm',\n\t\t'woff',\n\t\t'woff2',\n\t\t'eot',\n\t\t'ttf',\n\t\t'otf',\n\t\t'ico',\n\t\t'flv',\n\t\t'ps',\n\t\t'xz',\n\t\t'sqlite',\n\t\t'nes',\n\t\t'crx',\n\t\t'xpi',\n\t\t'cab',\n\t\t'deb',\n\t\t'ar',\n\t\t'rpm',\n\t\t'Z',\n\t\t'lz',\n\t\t'cfb',\n\t\t'mxf',\n\t\t'mts',\n\t\t'blend',\n\t\t'bpg',\n\t\t'docx',\n\t\t'pptx',\n\t\t'xlsx',\n\t\t'3gp',\n\t\t'3g2',\n\t\t'jp2',\n\t\t'jpm',\n\t\t'jpx',\n\t\t'mj2',\n\t\t'aif',\n\t\t'qcp',\n\t\t'odt',\n\t\t'ods',\n\t\t'odp',\n\t\t'xml',\n\t\t'mobi',\n\t\t'heic',\n\t\t'cur',\n\t\t'ktx',\n\t\t'ape',\n\t\t'wv',\n\t\t'dcm',\n\t\t'ics',\n\t\t'glb',\n\t\t'pcap',\n\t\t'dsf',\n\t\t'lnk',\n\t\t'alias',\n\t\t'voc',\n\t\t'ac3',\n\t\t'm4v',\n\t\t'm4p',\n\t\t'm4b',\n\t\t'f4v',\n\t\t'f4p',\n\t\t'f4b',\n\t\t'f4a',\n\t\t'mie',\n\t\t'asf',\n\t\t'ogm',\n\t\t'ogx',\n\t\t'mpc',\n\t\t'arrow',\n\t\t'shp',\n\t\t'aac',\n\t\t'mp1',\n\t\t'it',\n\t\t's3m',\n\t\t'xm',\n\t\t'ai',\n\t\t'skp',\n\t\t'avif',\n\t\t'eps',\n\t\t'lzh',\n\t\t'pgp',\n\t\t'asar',\n\t\t'stl',\n\t\t'chm',\n\t\t'3mf',\n\t\t'zst',\n\t\t'jxl',\n\t\t'vcf'\n\t],\n\tmimeTypes: [\n\t\t'image/jpeg',\n\t\t'image/png',\n\t\t'image/gif',\n\t\t'image/webp',\n\t\t'image/flif',\n\t\t'image/x-xcf',\n\t\t'image/x-canon-cr2',\n\t\t'image/x-canon-cr3',\n\t\t'image/tiff',\n\t\t'image/bmp',\n\t\t'image/vnd.ms-photo',\n\t\t'image/vnd.adobe.photoshop',\n\t\t'application/x-indesign',\n\t\t'application/epub+zip',\n\t\t'application/x-xpinstall',\n\t\t'application/vnd.oasis.opendocument.text',\n\t\t'application/vnd.oasis.opendocument.spreadsheet',\n\t\t'application/vnd.oasis.opendocument.presentation',\n\t\t'application/vnd.openxmlformats-officedocument.wordprocessingml.document',\n\t\t'application/vnd.openxmlformats-officedocument.presentationml.presentation',\n\t\t'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',\n\t\t'application/zip',\n\t\t'application/x-tar',\n\t\t'application/x-rar-compressed',\n\t\t'application/gzip',\n\t\t'application/x-bzip2',\n\t\t'application/x-7z-compressed',\n\t\t'application/x-apple-diskimage',\n\t\t'application/x-apache-arrow',\n\t\t'video/mp4',\n\t\t'audio/midi',\n\t\t'video/x-matroska',\n\t\t'video/webm',\n\t\t'video/quicktime',\n\t\t'video/vnd.avi',\n\t\t'audio/vnd.wave',\n\t\t'audio/qcelp',\n\t\t'audio/x-ms-asf',\n\t\t'video/x-ms-asf',\n\t\t'application/vnd.ms-asf',\n\t\t'video/mpeg',\n\t\t'video/3gpp',\n\t\t'audio/mpeg',\n\t\t'audio/mp4', // RFC 4337\n\t\t'audio/opus',\n\t\t'video/ogg',\n\t\t'audio/ogg',\n\t\t'application/ogg',\n\t\t'audio/x-flac',\n\t\t'audio/ape',\n\t\t'audio/wavpack',\n\t\t'audio/amr',\n\t\t'application/pdf',\n\t\t'application/x-msdownload',\n\t\t'application/x-shockwave-flash',\n\t\t'application/rtf',\n\t\t'application/wasm',\n\t\t'font/woff',\n\t\t'font/woff2',\n\t\t'application/vnd.ms-fontobject',\n\t\t'font/ttf',\n\t\t'font/otf',\n\t\t'image/x-icon',\n\t\t'video/x-flv',\n\t\t'application/postscript',\n\t\t'application/eps',\n\t\t'application/x-xz',\n\t\t'application/x-sqlite3',\n\t\t'application/x-nintendo-nes-rom',\n\t\t'application/x-google-chrome-extension',\n\t\t'application/vnd.ms-cab-compressed',\n\t\t'application/x-deb',\n\t\t'application/x-unix-archive',\n\t\t'application/x-rpm',\n\t\t'application/x-compress',\n\t\t'application/x-lzip',\n\t\t'application/x-cfb',\n\t\t'application/x-mie',\n\t\t'application/mxf',\n\t\t'video/mp2t',\n\t\t'application/x-blender',\n\t\t'image/bpg',\n\t\t'image/jp2',\n\t\t'image/jpx',\n\t\t'image/jpm',\n\t\t'image/mj2',\n\t\t'audio/aiff',\n\t\t'application/xml',\n\t\t'application/x-mobipocket-ebook',\n\t\t'image/heif',\n\t\t'image/heif-sequence',\n\t\t'image/heic',\n\t\t'image/heic-sequence',\n\t\t'image/icns',\n\t\t'image/ktx',\n\t\t'application/dicom',\n\t\t'audio/x-musepack',\n\t\t'text/calendar',\n\t\t'text/vcard',\n\t\t'model/gltf-binary',\n\t\t'application/vnd.tcpdump.pcap',\n\t\t'audio/x-dsf', // Non-standard\n\t\t'application/x.ms.shortcut', // Invented by us\n\t\t'application/x.apple.alias', // Invented by us\n\t\t'audio/x-voc',\n\t\t'audio/vnd.dolby.dd-raw',\n\t\t'audio/x-m4a',\n\t\t'image/apng',\n\t\t'image/x-olympus-orf',\n\t\t'image/x-sony-arw',\n\t\t'image/x-adobe-dng',\n\t\t'image/x-nikon-nef',\n\t\t'image/x-panasonic-rw2',\n\t\t'image/x-fujifilm-raf',\n\t\t'video/x-m4v',\n\t\t'video/3gpp2',\n\t\t'application/x-esri-shape',\n\t\t'audio/aac',\n\t\t'audio/x-it',\n\t\t'audio/x-s3m',\n\t\t'audio/x-xm',\n\t\t'video/MP1S',\n\t\t'video/MP2P',\n\t\t'application/vnd.sketchup.skp',\n\t\t'image/avif',\n\t\t'application/x-lzh-compressed',\n\t\t'application/pgp-encrypted',\n\t\t'application/x-asar',\n\t\t'model/stl',\n\t\t'application/vnd.ms-htmlhelp',\n\t\t'model/3mf',\n\t\t'image/jxl',\n\t\t'application/zstd'\n\t]\n};\n","'use strict';\n\nexports.stringToBytes = string => [...string].map(character => character.charCodeAt(0));\n\n/**\nChecks whether the TAR checksum is valid.\n\n@param {Buffer} buffer - The TAR header `[offset ... offset + 512]`.\n@param {number} offset - TAR header offset.\n@returns {boolean} `true` if the TAR checksum is valid, otherwise `false`.\n*/\nexports.tarHeaderChecksumMatches = (buffer, offset = 0) => {\n\tconst readSum = parseInt(buffer.toString('utf8', 148, 154).replace(/\\0.*$/, '').trim(), 8); // Read sum in header\n\tif (isNaN(readSum)) {\n\t\treturn false;\n\t}\n\n\tlet sum = 8 * 0x20; // Initialize signed bit sum\n\n\tfor (let i = offset; i < offset + 148; i++) {\n\t\tsum += buffer[i];\n\t}\n\n\tfor (let i = offset + 156; i < offset + 512; i++) {\n\t\tsum += buffer[i];\n\t}\n\n\treturn readSum === sum;\n};\n\n/**\nID3 UINT32 sync-safe tokenizer token.\n28 bits (representing up to 256MB) integer, the msb is 0 to avoid \"false syncsignals\".\n*/\nexports.uint32SyncSafeToken = {\n\tget: (buffer, offset) => {\n\t\treturn (buffer[offset + 3] & 0x7F) | ((buffer[offset + 2]) << 7) | ((buffer[offset + 1]) << 14) | ((buffer[offset]) << 21);\n\t},\n\tlen: 4\n};\n","if (typeof Object.create === 'function') {\n // implementation from standard node.js 'util' module\n module.exports = function inherits(ctor, superCtor) {\n if (superCtor) {\n ctor.super_ = superCtor\n ctor.prototype = Object.create(superCtor.prototype, {\n constructor: {\n value: ctor,\n enumerable: false,\n writable: true,\n configurable: true\n }\n })\n }\n };\n} else {\n // old school shim for old browsers\n module.exports = function inherits(ctor, superCtor) {\n if (superCtor) {\n ctor.super_ = superCtor\n var TempCtor = function () {}\n TempCtor.prototype = superCtor.prototype\n ctor.prototype = new TempCtor()\n ctor.prototype.constructor = ctor\n }\n }\n}\n","/**\n * Helpers.\n */\n\nvar s = 1000;\nvar m = s * 60;\nvar h = m * 60;\nvar d = h * 24;\nvar w = d * 7;\nvar y = d * 365.25;\n\n/**\n * Parse or format the given `val`.\n *\n * Options:\n *\n * - `long` verbose formatting [false]\n *\n * @param {String|Number} val\n * @param {Object} [options]\n * @throws {Error} throw an error if val is not a non-empty string or a number\n * @return {String|Number}\n * @api public\n */\n\nmodule.exports = function(val, options) {\n options = options || {};\n var type = typeof val;\n if (type === 'string' && val.length > 0) {\n return parse(val);\n } else if (type === 'number' && isFinite(val)) {\n return options.long ? fmtLong(val) : fmtShort(val);\n }\n throw new Error(\n 'val is not a non-empty string or a valid number. val=' +\n JSON.stringify(val)\n );\n};\n\n/**\n * Parse the given `str` and return milliseconds.\n *\n * @param {String} str\n * @return {Number}\n * @api private\n */\n\nfunction parse(str) {\n str = String(str);\n if (str.length > 100) {\n return;\n }\n var match = /^(-?(?:\\d+)?\\.?\\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)?$/i.exec(\n str\n );\n if (!match) {\n return;\n }\n var n = parseFloat(match[1]);\n var type = (match[2] || 'ms').toLowerCase();\n switch (type) {\n case 'years':\n case 'year':\n case 'yrs':\n case 'yr':\n case 'y':\n return n * y;\n case 'weeks':\n case 'week':\n case 'w':\n return n * w;\n case 'days':\n case 'day':\n case 'd':\n return n * d;\n case 'hours':\n case 'hour':\n case 'hrs':\n case 'hr':\n case 'h':\n return n * h;\n case 'minutes':\n case 'minute':\n case 'mins':\n case 'min':\n case 'm':\n return n * m;\n case 'seconds':\n case 'second':\n case 'secs':\n case 'sec':\n case 's':\n return n * s;\n case 'milliseconds':\n case 'millisecond':\n case 'msecs':\n case 'msec':\n case 'ms':\n return n;\n default:\n return undefined;\n }\n}\n\n/**\n * Short format for `ms`.\n *\n * @param {Number} ms\n * @return {String}\n * @api private\n */\n\nfunction fmtShort(ms) {\n var msAbs = Math.abs(ms);\n if (msAbs >= d) {\n return Math.round(ms / d) + 'd';\n }\n if (msAbs >= h) {\n return Math.round(ms / h) + 'h';\n }\n if (msAbs >= m) {\n return Math.round(ms / m) + 'm';\n }\n if (msAbs >= s) {\n return Math.round(ms / s) + 's';\n }\n return ms + 'ms';\n}\n\n/**\n * Long format for `ms`.\n *\n * @param {Number} ms\n * @return {String}\n * @api private\n */\n\nfunction fmtLong(ms) {\n var msAbs = Math.abs(ms);\n if (msAbs >= d) {\n return plural(ms, msAbs, d, 'day');\n }\n if (msAbs >= h) {\n return plural(ms, msAbs, h, 'hour');\n }\n if (msAbs >= m) {\n return plural(ms, msAbs, m, 'minute');\n }\n if (msAbs >= s) {\n return plural(ms, msAbs, s, 'second');\n }\n return ms + ' ms';\n}\n\n/**\n * Pluralization helper.\n */\n\nfunction plural(ms, msAbs, n, name) {\n var isPlural = msAbs >= n * 1.5;\n return Math.round(ms / n) + ' ' + name + (isPlural ? 's' : '');\n}\n","\"use strict\";\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nexports.fetchFromUrl = exports.parseBlob = exports.parseReadableStream = exports.parseNodeStream = exports.selectCover = exports.ratingToStars = exports.orderTags = exports.parseFromTokenizer = exports.parseBuffer = void 0;\r\nconst initDebug = require(\"debug\");\r\nconst mm = require(\"music-metadata/lib/core\");\r\nconst readable_web_to_node_stream_1 = require(\"readable-web-to-node-stream\");\r\nconst debug = initDebug('music-metadata-browser:main');\r\nvar core_1 = require(\"music-metadata/lib/core\");\r\nObject.defineProperty(exports, \"parseBuffer\", { enumerable: true, get: function () { return core_1.parseBuffer; } });\r\nObject.defineProperty(exports, \"parseFromTokenizer\", { enumerable: true, get: function () { return core_1.parseFromTokenizer; } });\r\nObject.defineProperty(exports, \"orderTags\", { enumerable: true, get: function () { return core_1.orderTags; } });\r\nObject.defineProperty(exports, \"ratingToStars\", { enumerable: true, get: function () { return core_1.ratingToStars; } });\r\nObject.defineProperty(exports, \"selectCover\", { enumerable: true, get: function () { return core_1.selectCover; } });\r\n/**\r\n * Parse audio Stream\r\n * @param stream - ReadableStream\r\n * @param contentType - MIME-Type\r\n * @param options - Parsing options\r\n * @returns Metadata\r\n */\r\nexports.parseNodeStream = mm.parseStream;\r\n/**\r\n * Parse Web API ReadableStream: https://developer.mozilla.org/en-US/docs/Web/API/ReadableStream\r\n * @param stream - ReadableStream (web stream according WTWG Streams Standard)\r\n * @param fileInfo FileInfo object or MIME-Type\r\n * @param options - Parsing options\r\n * @returns Metadata\r\n */\r\nasync function parseReadableStream(stream, fileInfo, options) {\r\n const ns = new readable_web_to_node_stream_1.ReadableWebToNodeStream(stream);\r\n const res = await (0, exports.parseNodeStream)(ns, typeof fileInfo === 'string' ? { mimeType: fileInfo } : fileInfo, options);\r\n await ns.close();\r\n return res;\r\n}\r\nexports.parseReadableStream = parseReadableStream;\r\n/**\r\n * Parse Web API File\r\n * @param blob - Blob to parse\r\n * @param options - Parsing options\r\n * @returns Metadata\r\n */\r\nasync function parseBlob(blob, options) {\r\n const fileInfo = { mimeType: blob.type, size: blob.size };\r\n if (blob instanceof File) {\r\n fileInfo.path = blob.name;\r\n }\r\n const stream = blob.stream ? blob.stream() : convertBlobToReadableStream(blob);\r\n return parseReadableStream(stream, { mimeType: blob.type, size: blob.size }, options);\r\n}\r\nexports.parseBlob = parseBlob;\r\n/**\r\n * Convert Blob to ReadableStream\r\n * Fallback for Safari versions < 14.1\r\n * @param blob\r\n */\r\nfunction convertBlobToReadableStream(blob) {\r\n const fileReader = new FileReader();\r\n return new ReadableStream({\r\n start(controller) {\r\n // The following function handles each data chunk\r\n fileReader.onloadend = event => {\r\n let data = event.target.result;\r\n if (data instanceof ArrayBuffer) {\r\n data = new Uint8Array(data);\r\n }\r\n controller.enqueue(data);\r\n controller.close();\r\n };\r\n fileReader.onerror = error => {\r\n controller.close();\r\n };\r\n fileReader.onabort = error => {\r\n controller.close();\r\n };\r\n fileReader.readAsArrayBuffer(blob);\r\n }\r\n });\r\n}\r\n/**\r\n * Parse fetched file, using the Web Fetch API\r\n * @param audioTrackUrl - URL to download the audio track from\r\n * @param options - Parsing options\r\n * @returns Metadata\r\n */\r\nasync function fetchFromUrl(audioTrackUrl, options) {\r\n const response = await fetch(audioTrackUrl);\r\n const fileInfo = {\r\n size: parseInt(response.headers.get('Content-Length'), 10),\r\n mimeType: response.headers.get('Content-Type')\r\n };\r\n if (response.ok) {\r\n if (response.body) {\r\n const res = await parseReadableStream(response.body, fileInfo, options);\r\n debug('Closing HTTP-readable-stream...');\r\n if (!response.body.locked) { // Prevent error in Firefox\r\n await response.body.cancel();\r\n }\r\n debug('HTTP-readable-stream closed.');\r\n return res;\r\n }\r\n else {\r\n // Fall back on Blob\r\n return parseBlob(await response.blob(), options);\r\n }\r\n }\r\n else {\r\n throw new Error(`HTTP error status=${response.status}: ${response.statusText}`);\r\n }\r\n}\r\nexports.fetchFromUrl = fetchFromUrl;\r\n","\"use strict\";\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nexports.ParserFactory = exports.parseHttpContentType = void 0;\r\nconst FileType = require(\"file-type/core\");\r\nconst ContentType = require(\"content-type\");\r\nconst MimeType = require(\"media-typer\");\r\nconst debug_1 = require(\"debug\");\r\nconst MetadataCollector_1 = require(\"./common/MetadataCollector\");\r\nconst AiffParser_1 = require(\"./aiff/AiffParser\");\r\nconst APEv2Parser_1 = require(\"./apev2/APEv2Parser\");\r\nconst AsfParser_1 = require(\"./asf/AsfParser\");\r\nconst FlacParser_1 = require(\"./flac/FlacParser\");\r\nconst MP4Parser_1 = require(\"./mp4/MP4Parser\");\r\nconst MpegParser_1 = require(\"./mpeg/MpegParser\");\r\nconst musepack_1 = require(\"./musepack\");\r\nconst OggParser_1 = require(\"./ogg/OggParser\");\r\nconst WaveParser_1 = require(\"./wav/WaveParser\");\r\nconst WavPackParser_1 = require(\"./wavpack/WavPackParser\");\r\nconst DsfParser_1 = require(\"./dsf/DsfParser\");\r\nconst DsdiffParser_1 = require(\"./dsdiff/DsdiffParser\");\r\nconst MatroskaParser_1 = require(\"./matroska/MatroskaParser\");\r\nconst debug = (0, debug_1.default)('music-metadata:parser:factory');\r\nfunction parseHttpContentType(contentType) {\r\n const type = ContentType.parse(contentType);\r\n const mime = MimeType.parse(type.type);\r\n return {\r\n type: mime.type,\r\n subtype: mime.subtype,\r\n suffix: mime.suffix,\r\n parameters: type.parameters\r\n };\r\n}\r\nexports.parseHttpContentType = parseHttpContentType;\r\nasync function parse(tokenizer, parserId, opts = {}) {\r\n // Parser found, execute parser\r\n const parser = await ParserFactory.loadParser(parserId);\r\n const metadata = new MetadataCollector_1.MetadataCollector(opts);\r\n await parser.init(metadata, tokenizer, opts).parse();\r\n return metadata.toCommonMetadata();\r\n}\r\nclass ParserFactory {\r\n /**\r\n * Parse metadata from tokenizer\r\n * @param tokenizer - Tokenizer\r\n * @param opts - Options\r\n * @returns Native metadata\r\n */\r\n static async parseOnContentType(tokenizer, opts) {\r\n const { mimeType, path, url } = await tokenizer.fileInfo;\r\n // Resolve parser based on MIME-type or file extension\r\n const parserId = ParserFactory.getParserIdForMimeType(mimeType) || ParserFactory.getParserIdForExtension(path) || ParserFactory.getParserIdForExtension(url);\r\n if (!parserId) {\r\n debug('No parser found for MIME-type / extension: ' + mimeType);\r\n }\r\n return this.parse(tokenizer, parserId, opts);\r\n }\r\n static async parse(tokenizer, parserId, opts) {\r\n if (!parserId) {\r\n // Parser could not be determined on MIME-type or extension\r\n debug('Guess parser on content...');\r\n const buf = Buffer.alloc(4100);\r\n await tokenizer.peekBuffer(buf, { mayBeLess: true });\r\n if (tokenizer.fileInfo.path) {\r\n parserId = this.getParserIdForExtension(tokenizer.fileInfo.path);\r\n }\r\n if (!parserId) {\r\n const guessedType = await FileType.fromBuffer(buf);\r\n if (!guessedType) {\r\n throw new Error('Failed to determine audio format');\r\n }\r\n debug(`Guessed file type is mime=${guessedType.mime}, extension=${guessedType.ext}`);\r\n parserId = ParserFactory.getParserIdForMimeType(guessedType.mime);\r\n if (!parserId) {\r\n throw new Error('Guessed MIME-type not supported: ' + guessedType.mime);\r\n }\r\n }\r\n }\r\n // Parser found, execute parser\r\n return parse(tokenizer, parserId, opts);\r\n }\r\n /**\r\n * @param filePath - Path, filename or extension to audio file\r\n * @return Parser sub-module name\r\n */\r\n static getParserIdForExtension(filePath) {\r\n if (!filePath)\r\n return;\r\n const extension = this.getExtension(filePath).toLocaleLowerCase() || filePath;\r\n switch (extension) {\r\n case '.mp2':\r\n case '.mp3':\r\n case '.m2a':\r\n case '.aac': // Assume it is ADTS-container\r\n return 'mpeg';\r\n case '.ape':\r\n return 'apev2';\r\n case '.mp4':\r\n case '.m4a':\r\n case '.m4b':\r\n case '.m4pa':\r\n case '.m4v':\r\n case '.m4r':\r\n case '.3gp':\r\n return 'mp4';\r\n case '.wma':\r\n case '.wmv':\r\n case '.asf':\r\n return 'asf';\r\n case '.flac':\r\n return 'flac';\r\n case '.ogg':\r\n case '.ogv':\r\n case '.oga':\r\n case '.ogm':\r\n case '.ogx':\r\n case '.opus': // recommended filename extension for Ogg Opus\r\n case '.spx': // recommended filename extension for Ogg Speex\r\n return 'ogg';\r\n case '.aif':\r\n case '.aiff':\r\n case '.aifc':\r\n return 'aiff';\r\n case '.wav':\r\n case '.bwf': // Broadcast Wave Format\r\n return 'riff';\r\n case '.wv':\r\n case '.wvp':\r\n return 'wavpack';\r\n case '.mpc':\r\n return 'musepack';\r\n case '.dsf':\r\n return 'dsf';\r\n case '.dff':\r\n return 'dsdiff';\r\n case '.mka':\r\n case '.mkv':\r\n case '.mk3d':\r\n case '.mks':\r\n case '.webm':\r\n return 'matroska';\r\n }\r\n }\r\n static async loadParser(moduleName) {\r\n switch (moduleName) {\r\n case 'aiff': return new AiffParser_1.AIFFParser();\r\n case 'adts':\r\n case 'mpeg':\r\n return new MpegParser_1.MpegParser();\r\n case 'apev2': return new APEv2Parser_1.APEv2Parser();\r\n case 'asf': return new AsfParser_1.AsfParser();\r\n case 'dsf': return new DsfParser_1.DsfParser();\r\n case 'dsdiff': return new DsdiffParser_1.DsdiffParser();\r\n case 'flac': return new FlacParser_1.FlacParser();\r\n case 'mp4': return new MP4Parser_1.MP4Parser();\r\n case 'musepack': return new musepack_1.default();\r\n case 'ogg': return new OggParser_1.OggParser();\r\n case 'riff': return new WaveParser_1.WaveParser();\r\n case 'wavpack': return new WavPackParser_1.WavPackParser();\r\n case 'matroska': return new MatroskaParser_1.MatroskaParser();\r\n default:\r\n throw new Error(`Unknown parser type: ${moduleName}`);\r\n }\r\n }\r\n static getExtension(fname) {\r\n const i = fname.lastIndexOf('.');\r\n return i === -1 ? '' : fname.slice(i);\r\n }\r\n /**\r\n * @param httpContentType - HTTP Content-Type, extension, path or filename\r\n * @returns Parser sub-module name\r\n */\r\n static getParserIdForMimeType(httpContentType) {\r\n let mime;\r\n try {\r\n mime = parseHttpContentType(httpContentType);\r\n }\r\n catch (err) {\r\n debug(`Invalid HTTP Content-Type header value: ${httpContentType}`);\r\n return;\r\n }\r\n const subType = mime.subtype.indexOf('x-') === 0 ? mime.subtype.substring(2) : mime.subtype;\r\n switch (mime.type) {\r\n case 'audio':\r\n switch (subType) {\r\n case 'mp3': // Incorrect MIME-type, Chrome, in Web API File object\r\n case 'mpeg':\r\n return 'mpeg';\r\n case 'aac':\r\n case 'aacp':\r\n return 'adts';\r\n case 'flac':\r\n return 'flac';\r\n case 'ape':\r\n case 'monkeys-audio':\r\n return 'apev2';\r\n case 'mp4':\r\n case 'm4a':\r\n return 'mp4';\r\n case 'ogg': // RFC 7845\r\n case 'opus': // RFC 6716\r\n case 'speex': // RFC 5574\r\n return 'ogg';\r\n case 'ms-wma':\r\n case 'ms-wmv':\r\n case 'ms-asf':\r\n return 'asf';\r\n case 'aiff':\r\n case 'aif':\r\n case 'aifc':\r\n return 'aiff';\r\n case 'vnd.wave':\r\n case 'wav':\r\n case 'wave':\r\n return 'riff';\r\n case 'wavpack':\r\n return 'wavpack';\r\n case 'musepack':\r\n return 'musepack';\r\n case 'matroska':\r\n case 'webm':\r\n return 'matroska';\r\n case 'dsf':\r\n return 'dsf';\r\n }\r\n break;\r\n case 'video':\r\n switch (subType) {\r\n case 'ms-asf':\r\n case 'ms-wmv':\r\n return 'asf';\r\n case 'm4v':\r\n case 'mp4':\r\n return 'mp4';\r\n case 'ogg':\r\n return 'ogg';\r\n case 'matroska':\r\n case 'webm':\r\n return 'matroska';\r\n }\r\n break;\r\n case 'application':\r\n switch (subType) {\r\n case 'vnd.ms-asf':\r\n return 'asf';\r\n case 'ogg':\r\n return 'ogg';\r\n }\r\n break;\r\n }\r\n }\r\n}\r\nexports.ParserFactory = ParserFactory;\r\n","\"use strict\";\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nexports.AIFFParser = void 0;\r\nconst Token = require(\"token-types\");\r\nconst debug_1 = require(\"debug\");\r\nconst strtok3 = require(\"strtok3/lib/core\");\r\nconst ID3v2Parser_1 = require(\"../id3v2/ID3v2Parser\");\r\nconst FourCC_1 = require(\"../common/FourCC\");\r\nconst BasicParser_1 = require(\"../common/BasicParser\");\r\nconst AiffToken = require(\"./AiffToken\");\r\nconst iff = require(\"../iff\");\r\nconst debug = (0, debug_1.default)('music-metadata:parser:aiff');\r\n/**\r\n * AIFF - Audio Interchange File Format\r\n *\r\n * Ref:\r\n * - http://www-mmsp.ece.mcgill.ca/Documents/AudioFormats/AIFF/AIFF.html\r\n * - http://www-mmsp.ece.mcgill.ca/Documents/AudioFormats/AIFF/Docs/AIFF-1.3.pdf\r\n */\r\nclass AIFFParser extends BasicParser_1.BasicParser {\r\n async parse() {\r\n const header = await this.tokenizer.readToken(iff.Header);\r\n if (header.chunkID !== 'FORM')\r\n throw new Error('Invalid Chunk-ID, expected \\'FORM\\''); // Not AIFF format\r\n const type = await this.tokenizer.readToken(FourCC_1.FourCcToken);\r\n switch (type) {\r\n case 'AIFF':\r\n this.metadata.setFormat('container', type);\r\n this.isCompressed = false;\r\n break;\r\n case 'AIFC':\r\n this.metadata.setFormat('container', 'AIFF-C');\r\n this.isCompressed = true;\r\n break;\r\n default:\r\n throw Error('Unsupported AIFF type: ' + type);\r\n }\r\n this.metadata.setFormat('lossless', !this.isCompressed);\r\n try {\r\n while (!this.tokenizer.fileInfo.size || this.tokenizer.fileInfo.size - this.tokenizer.position >= iff.Header.len) {\r\n debug('Reading AIFF chunk at offset=' + this.tokenizer.position);\r\n const chunkHeader = await this.tokenizer.readToken(iff.Header);\r\n debug(`Chunk id=${chunkHeader.chunkID}`);\r\n const nextChunk = 2 * Math.round(chunkHeader.chunkSize / 2);\r\n const bytesRead = await this.readData(chunkHeader);\r\n await this.tokenizer.ignore(nextChunk - bytesRead);\r\n }\r\n }\r\n catch (err) {\r\n if (err instanceof strtok3.EndOfStreamError) {\r\n debug(`End-of-stream`);\r\n }\r\n else {\r\n throw err;\r\n }\r\n }\r\n }\r\n async readData(header) {\r\n switch (header.chunkID) {\r\n case 'COMM': // The Common Chunk\r\n const common = await this.tokenizer.readToken(new AiffToken.Common(header, this.isCompressed));\r\n this.metadata.setFormat('bitsPerSample', common.sampleSize);\r\n this.metadata.setFormat('sampleRate', common.sampleRate);\r\n this.metadata.setFormat('numberOfChannels', common.numChannels);\r\n this.metadata.setFormat('numberOfSamples', common.numSampleFrames);\r\n this.metadata.setFormat('duration', common.numSampleFrames / common.sampleRate);\r\n this.metadata.setFormat('codec', common.compressionName);\r\n return header.chunkSize;\r\n case 'ID3 ': // ID3-meta-data\r\n const id3_data = await this.tokenizer.readToken(new Token.Uint8ArrayType(header.chunkSize));\r\n const rst = strtok3.fromBuffer(id3_data);\r\n await new ID3v2Parser_1.ID3v2Parser().parse(this.metadata, rst, this.options);\r\n return header.chunkSize;\r\n case 'SSND': // Sound Data Chunk\r\n if (this.metadata.format.duration) {\r\n this.metadata.setFormat('bitrate', 8 * header.chunkSize / this.metadata.format.duration);\r\n }\r\n return 0;\r\n default:\r\n return 0;\r\n }\r\n }\r\n}\r\nexports.AIFFParser = AIFFParser;\r\n","\"use strict\";\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nexports.Common = void 0;\r\nconst Token = require(\"token-types\");\r\nconst FourCC_1 = require(\"../common/FourCC\");\r\nclass Common {\r\n constructor(header, isAifc) {\r\n this.isAifc = isAifc;\r\n const minimumChunkSize = isAifc ? 22 : 18;\r\n if (header.chunkSize < minimumChunkSize)\r\n throw new Error(`COMMON CHUNK size should always be at least ${minimumChunkSize}`);\r\n this.len = header.chunkSize;\r\n }\r\n get(buf, off) {\r\n // see: https://cycling74.com/forums/aiffs-80-bit-sample-rate-value\r\n const shift = buf.readUInt16BE(off + 8) - 16398;\r\n const baseSampleRate = buf.readUInt16BE(off + 8 + 2);\r\n const res = {\r\n numChannels: buf.readUInt16BE(off),\r\n numSampleFrames: buf.readUInt32BE(off + 2),\r\n sampleSize: buf.readUInt16BE(off + 6),\r\n sampleRate: shift < 0 ? baseSampleRate >> Math.abs(shift) : baseSampleRate << shift\r\n };\r\n if (this.isAifc) {\r\n res.compressionType = FourCC_1.FourCcToken.get(buf, off + 18);\r\n if (this.len > 22) {\r\n const strLen = buf.readInt8(off + 22);\r\n const padding = (strLen + 1) % 2;\r\n if (23 + strLen + padding === this.len) {\r\n res.compressionName = new Token.StringType(strLen, 'binary').get(buf, off + 23);\r\n }\r\n else {\r\n throw new Error('Illegal pstring length');\r\n }\r\n }\r\n }\r\n else {\r\n res.compressionName = 'PCM';\r\n }\r\n return res;\r\n }\r\n}\r\nexports.Common = Common;\r\n","\"use strict\";\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nexports.APEv2Parser = void 0;\r\nconst debug_1 = require(\"debug\");\r\nconst strtok3 = require(\"strtok3/lib/core\");\r\nconst token_types_1 = require(\"token-types\");\r\nconst util = require(\"../common/Util\");\r\nconst BasicParser_1 = require(\"../common/BasicParser\");\r\nconst APEv2Token_1 = require(\"./APEv2Token\");\r\nconst debug = (0, debug_1.default)('music-metadata:parser:APEv2');\r\nconst tagFormat = 'APEv2';\r\nconst preamble = 'APETAGEX';\r\nclass APEv2Parser extends BasicParser_1.BasicParser {\r\n constructor() {\r\n super(...arguments);\r\n this.ape = {};\r\n }\r\n static tryParseApeHeader(metadata, tokenizer, options) {\r\n const apeParser = new APEv2Parser();\r\n apeParser.init(metadata, tokenizer, options);\r\n return apeParser.tryParseApeHeader();\r\n }\r\n /**\r\n * Calculate the media file duration\r\n * @param ah ApeHeader\r\n * @return {number} duration in seconds\r\n */\r\n static calculateDuration(ah) {\r\n let duration = ah.totalFrames > 1 ? ah.blocksPerFrame * (ah.totalFrames - 1) : 0;\r\n duration += ah.finalFrameBlocks;\r\n return duration / ah.sampleRate;\r\n }\r\n /**\r\n * Calculates the APEv1 / APEv2 first field offset\r\n * @param reader\r\n * @param offset\r\n */\r\n static async findApeFooterOffset(reader, offset) {\r\n // Search for APE footer header at the end of the file\r\n const apeBuf = Buffer.alloc(APEv2Token_1.TagFooter.len);\r\n await reader.randomRead(apeBuf, 0, APEv2Token_1.TagFooter.len, offset - APEv2Token_1.TagFooter.len);\r\n const tagFooter = APEv2Token_1.TagFooter.get(apeBuf, 0);\r\n if (tagFooter.ID === 'APETAGEX') {\r\n debug(`APE footer header at offset=${offset}`);\r\n return { footer: tagFooter, offset: offset - tagFooter.size };\r\n }\r\n }\r\n static parseTagFooter(metadata, buffer, options) {\r\n const footer = APEv2Token_1.TagFooter.get(buffer, buffer.length - APEv2Token_1.TagFooter.len);\r\n if (footer.ID !== preamble)\r\n throw new Error('Unexpected APEv2 Footer ID preamble value.');\r\n strtok3.fromBuffer(buffer);\r\n const apeParser = new APEv2Parser();\r\n apeParser.init(metadata, strtok3.fromBuffer(buffer), options);\r\n return apeParser.parseTags(footer);\r\n }\r\n /**\r\n * Parse APEv1 / APEv2 header if header signature found\r\n */\r\n async tryParseApeHeader() {\r\n if (this.tokenizer.fileInfo.size && this.tokenizer.fileInfo.size - this.tokenizer.position < APEv2Token_1.TagFooter.len) {\r\n debug(`No APEv2 header found, end-of-file reached`);\r\n return;\r\n }\r\n const footer = await this.tokenizer.peekToken(APEv2Token_1.TagFooter);\r\n if (footer.ID === preamble) {\r\n await this.tokenizer.ignore(APEv2Token_1.TagFooter.len);\r\n return this.parseTags(footer);\r\n }\r\n else {\r\n debug(`APEv2 header not found at offset=${this.tokenizer.position}`);\r\n if (this.tokenizer.fileInfo.size) {\r\n // Try to read the APEv2 header using just the footer-header\r\n const remaining = this.tokenizer.fileInfo.size - this.tokenizer.position; // ToDo: take ID3v1 into account\r\n const buffer = Buffer.alloc(remaining);\r\n await this.tokenizer.readBuffer(buffer);\r\n return APEv2Parser.parseTagFooter(this.metadata, buffer, this.options);\r\n }\r\n }\r\n }\r\n async parse() {\r\n const descriptor = await this.tokenizer.readToken(APEv2Token_1.DescriptorParser);\r\n if (descriptor.ID !== 'MAC ')\r\n throw new Error('Unexpected descriptor ID');\r\n this.ape.descriptor = descriptor;\r\n const lenExp = descriptor.descriptorBytes - APEv2Token_1.DescriptorParser.len;\r\n const header = await (lenExp > 0 ? this.parseDescriptorExpansion(lenExp) : this.parseHeader());\r\n await this.tokenizer.ignore(header.forwardBytes);\r\n return this.tryParseApeHeader();\r\n }\r\n async parseTags(footer) {\r\n const keyBuffer = Buffer.alloc(256); // maximum tag key length\r\n let bytesRemaining = footer.size - APEv2Token_1.TagFooter.len;\r\n debug(`Parse APE tags at offset=${this.tokenizer.position}, size=${bytesRemaining}`);\r\n for (let i = 0; i < footer.fields; i++) {\r\n if (bytesRemaining < APEv2Token_1.TagItemHeader.len) {\r\n this.metadata.addWarning(`APEv2 Tag-header: ${footer.fields - i} items remaining, but no more tag data to read.`);\r\n break;\r\n }\r\n // Only APEv2 tag has tag item headers\r\n const tagItemHeader = await this.tokenizer.readToken(APEv2Token_1.TagItemHeader);\r\n bytesRemaining -= APEv2Token_1.TagItemHeader.len + tagItemHeader.size;\r\n await this.tokenizer.peekBuffer(keyBuffer, { length: Math.min(keyBuffer.length, bytesRemaining) });\r\n let zero = util.findZero(keyBuffer, 0, keyBuffer.length);\r\n const key = await this.tokenizer.readToken(new token_types_1.StringType(zero, 'ascii'));\r\n await this.tokenizer.ignore(1);\r\n bytesRemaining -= key.length + 1;\r\n switch (tagItemHeader.flags.dataType) {\r\n case APEv2Token_1.DataType.text_utf8: { // utf-8 text-string\r\n const value = await this.tokenizer.readToken(new token_types_1.StringType(tagItemHeader.size, 'utf8'));\r\n const values = value.split(/\\x00/g);\r\n for (const val of values) {\r\n this.metadata.addTag(tagFormat, key, val);\r\n }\r\n break;\r\n }\r\n case APEv2Token_1.DataType.binary: // binary (probably artwork)\r\n if (this.options.skipCovers) {\r\n await this.tokenizer.ignore(tagItemHeader.size);\r\n }\r\n else {\r\n const picData = Buffer.alloc(tagItemHeader.size);\r\n await this.tokenizer.readBuffer(picData);\r\n zero = util.findZero(picData, 0, picData.length);\r\n const description = picData.toString('utf8', 0, zero);\r\n const data = Buffer.from(picData.slice(zero + 1));\r\n this.metadata.addTag(tagFormat, key, {\r\n description,\r\n data\r\n });\r\n }\r\n break;\r\n case APEv2Token_1.DataType.external_info:\r\n debug(`Ignore external info ${key}`);\r\n await this.tokenizer.ignore(tagItemHeader.size);\r\n break;\r\n case APEv2Token_1.DataType.reserved:\r\n debug(`Ignore external info ${key}`);\r\n this.metadata.addWarning(`APEv2 header declares a reserved datatype for \"${key}\"`);\r\n await this.tokenizer.ignore(tagItemHeader.size);\r\n break;\r\n }\r\n }\r\n }\r\n async parseDescriptorExpansion(lenExp) {\r\n await this.tokenizer.ignore(lenExp);\r\n return this.parseHeader();\r\n }\r\n async parseHeader() {\r\n const header = await this.tokenizer.readToken(APEv2Token_1.Header);\r\n // ToDo before\r\n this.metadata.setFormat('lossless', true);\r\n this.metadata.setFormat('container', 'Monkey\\'s Audio');\r\n this.metadata.setFormat('bitsPerSample', header.bitsPerSample);\r\n this.metadata.setFormat('sampleRate', header.sampleRate);\r\n this.metadata.setFormat('numberOfChannels', header.channel);\r\n this.metadata.setFormat('duration', APEv2Parser.calculateDuration(header));\r\n return {\r\n forwardBytes: this.ape.descriptor.seekTableBytes + this.ape.descriptor.headerDataBytes +\r\n this.ape.descriptor.apeFrameDataBytes + this.ape.descriptor.terminatingDataBytes\r\n };\r\n }\r\n}\r\nexports.APEv2Parser = APEv2Parser;\r\n","\"use strict\";\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nexports.APEv2TagMapper = void 0;\r\nconst CaseInsensitiveTagMap_1 = require(\"../common/CaseInsensitiveTagMap\");\r\n/**\r\n * ID3v2.2 tag mappings\r\n */\r\nconst apev2TagMap = {\r\n Title: 'title',\r\n Artist: 'artist',\r\n Artists: 'artists',\r\n 'Album Artist': 'albumartist',\r\n Album: 'album',\r\n Year: 'date',\r\n Originalyear: 'originalyear',\r\n Originaldate: 'originaldate',\r\n Comment: 'comment',\r\n Track: 'track',\r\n Disc: 'disk',\r\n DISCNUMBER: 'disk',\r\n Genre: 'genre',\r\n 'Cover Art (Front)': 'picture',\r\n 'Cover Art (Back)': 'picture',\r\n Composer: 'composer',\r\n Lyrics: 'lyrics',\r\n ALBUMSORT: 'albumsort',\r\n TITLESORT: 'titlesort',\r\n WORK: 'work',\r\n ARTISTSORT: 'artistsort',\r\n ALBUMARTISTSORT: 'albumartistsort',\r\n COMPOSERSORT: 'composersort',\r\n Lyricist: 'lyricist',\r\n Writer: 'writer',\r\n Conductor: 'conductor',\r\n // 'Performer=artist (instrument)': 'performer:instrument',\r\n MixArtist: 'remixer',\r\n Arranger: 'arranger',\r\n Engineer: 'engineer',\r\n Producer: 'producer',\r\n DJMixer: 'djmixer',\r\n Mixer: 'mixer',\r\n Label: 'label',\r\n Grouping: 'grouping',\r\n Subtitle: 'subtitle',\r\n DiscSubtitle: 'discsubtitle',\r\n Compilation: 'compilation',\r\n BPM: 'bpm',\r\n Mood: 'mood',\r\n Media: 'media',\r\n CatalogNumber: 'catalognumber',\r\n MUSICBRAINZ_ALBUMSTATUS: 'releasestatus',\r\n MUSICBRAINZ_ALBUMTYPE: 'releasetype',\r\n RELEASECOUNTRY: 'releasecountry',\r\n Script: 'script',\r\n Language: 'language',\r\n Copyright: 'copyright',\r\n LICENSE: 'license',\r\n EncodedBy: 'encodedby',\r\n EncoderSettings: 'encodersettings',\r\n Barcode: 'barcode',\r\n ISRC: 'isrc',\r\n ASIN: 'asin',\r\n musicbrainz_trackid: 'musicbrainz_recordingid',\r\n musicbrainz_releasetrackid: 'musicbrainz_trackid',\r\n MUSICBRAINZ_ALBUMID: 'musicbrainz_albumid',\r\n MUSICBRAINZ_ARTISTID: 'musicbrainz_artistid',\r\n MUSICBRAINZ_ALBUMARTISTID: 'musicbrainz_albumartistid',\r\n MUSICBRAINZ_RELEASEGROUPID: 'musicbrainz_releasegroupid',\r\n MUSICBRAINZ_WORKID: 'musicbrainz_workid',\r\n MUSICBRAINZ_TRMID: 'musicbrainz_trmid',\r\n MUSICBRAINZ_DISCID: 'musicbrainz_discid',\r\n Acoustid_Id: 'acoustid_id',\r\n ACOUSTID_FINGERPRINT: 'acoustid_fingerprint',\r\n MUSICIP_PUID: 'musicip_puid',\r\n Weblink: 'website',\r\n REPLAYGAIN_TRACK_GAIN: 'replaygain_track_gain',\r\n REPLAYGAIN_TRACK_PEAK: 'replaygain_track_peak',\r\n MP3GAIN_MINMAX: 'replaygain_track_minmax',\r\n MP3GAIN_UNDO: 'replaygain_undo'\r\n};\r\nclass APEv2TagMapper extends CaseInsensitiveTagMap_1.CaseInsensitiveTagMap {\r\n constructor() {\r\n super(['APEv2'], apev2TagMap);\r\n }\r\n}\r\nexports.APEv2TagMapper = APEv2TagMapper;\r\n//# sourceMappingURL=APEv2TagMapper.js.map","\"use strict\";\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nexports.isBitSet = exports.parseTagFlags = exports.TagField = exports.TagItemHeader = exports.TagFooter = exports.Header = exports.DescriptorParser = exports.DataType = void 0;\r\nconst Token = require(\"token-types\");\r\nconst FourCC_1 = require(\"../common/FourCC\");\r\nvar DataType;\r\n(function (DataType) {\r\n DataType[DataType[\"text_utf8\"] = 0] = \"text_utf8\";\r\n DataType[DataType[\"binary\"] = 1] = \"binary\";\r\n DataType[DataType[\"external_info\"] = 2] = \"external_info\";\r\n DataType[DataType[\"reserved\"] = 3] = \"reserved\";\r\n})(DataType = exports.DataType || (exports.DataType = {}));\r\n/**\r\n * APE_DESCRIPTOR: defines the sizes (and offsets) of all the pieces, as well as the MD5 checksum\r\n */\r\nexports.DescriptorParser = {\r\n len: 52,\r\n get: (buf, off) => {\r\n return {\r\n // should equal 'MAC '\r\n ID: FourCC_1.FourCcToken.get(buf, off),\r\n // versionIndex number * 1000 (3.81 = 3810) (remember that 4-byte alignment causes this to take 4-bytes)\r\n version: Token.UINT32_LE.get(buf, off + 4) / 1000,\r\n // the number of descriptor bytes (allows later expansion of this header)\r\n descriptorBytes: Token.UINT32_LE.get(buf, off + 8),\r\n // the number of header APE_HEADER bytes\r\n headerBytes: Token.UINT32_LE.get(buf, off + 12),\r\n // the number of header APE_HEADER bytes\r\n seekTableBytes: Token.UINT32_LE.get(buf, off + 16),\r\n // the number of header data bytes (from original file)\r\n headerDataBytes: Token.UINT32_LE.get(buf, off + 20),\r\n // the number of bytes of APE frame data\r\n apeFrameDataBytes: Token.UINT32_LE.get(buf, off + 24),\r\n // the high order number of APE frame data bytes\r\n apeFrameDataBytesHigh: Token.UINT32_LE.get(buf, off + 28),\r\n // the terminating data of the file (not including tag data)\r\n terminatingDataBytes: Token.UINT32_LE.get(buf, off + 32),\r\n // the MD5 hash of the file (see notes for usage... it's a little tricky)\r\n fileMD5: new Token.Uint8ArrayType(16).get(buf, off + 36)\r\n };\r\n }\r\n};\r\n/**\r\n * APE_HEADER: describes all of the necessary information about the APE file\r\n */\r\nexports.Header = {\r\n len: 24,\r\n get: (buf, off) => {\r\n return {\r\n // the compression level (see defines I.E. COMPRESSION_LEVEL_FAST)\r\n compressionLevel: Token.UINT16_LE.get(buf, off),\r\n // any format flags (for future use)\r\n formatFlags: Token.UINT16_LE.get(buf, off + 2),\r\n // the number of audio blocks in one frame\r\n blocksPerFrame: Token.UINT32_LE.get(buf, off + 4),\r\n // the number of audio blocks in the final frame\r\n finalFrameBlocks: Token.UINT32_LE.get(buf, off + 8),\r\n // the total number of frames\r\n totalFrames: Token.UINT32_LE.get(buf, off + 12),\r\n // the bits per sample (typically 16)\r\n bitsPerSample: Token.UINT16_LE.get(buf, off + 16),\r\n // the number of channels (1 or 2)\r\n channel: Token.UINT16_LE.get(buf, off + 18),\r\n // the sample rate (typically 44100)\r\n sampleRate: Token.UINT32_LE.get(buf, off + 20)\r\n };\r\n }\r\n};\r\n/**\r\n * APE Tag Header/Footer Version 2.0\r\n * TAG: describes all the properties of the file [optional]\r\n */\r\nexports.TagFooter = {\r\n len: 32,\r\n get: (buf, off) => {\r\n return {\r\n // should equal 'APETAGEX'\r\n ID: new Token.StringType(8, 'ascii').get(buf, off),\r\n // equals CURRENT_APE_TAG_VERSION\r\n version: Token.UINT32_LE.get(buf, off + 8),\r\n // the complete size of the tag, including this footer (excludes header)\r\n size: Token.UINT32_LE.get(buf, off + 12),\r\n // the number of fields in the tag\r\n fields: Token.UINT32_LE.get(buf, off + 16),\r\n // reserved for later use (must be zero),\r\n flags: parseTagFlags(Token.UINT32_LE.get(buf, off + 20))\r\n };\r\n }\r\n};\r\n/**\r\n * APE Tag v2.0 Item Header\r\n */\r\nexports.TagItemHeader = {\r\n len: 8,\r\n get: (buf, off) => {\r\n return {\r\n // Length of assigned value in bytes\r\n size: Token.UINT32_LE.get(buf, off),\r\n // reserved for later use (must be zero),\r\n flags: parseTagFlags(Token.UINT32_LE.get(buf, off + 4))\r\n };\r\n }\r\n};\r\nconst TagField = footer => {\r\n return new Token.Uint8ArrayType(footer.size - exports.TagFooter.len);\r\n};\r\nexports.TagField = TagField;\r\nfunction parseTagFlags(flags) {\r\n return {\r\n containsHeader: isBitSet(flags, 31),\r\n containsFooter: isBitSet(flags, 30),\r\n isHeader: isBitSet(flags, 31),\r\n readOnly: isBitSet(flags, 0),\r\n dataType: (flags & 6) >> 1\r\n };\r\n}\r\nexports.parseTagFlags = parseTagFlags;\r\n/**\r\n * @param num {number}\r\n * @param bit 0 is least significant bit (LSB)\r\n * @return {boolean} true if bit is 1; otherwise false\r\n */\r\nfunction isBitSet(num, bit) {\r\n return (num & 1 << bit) !== 0;\r\n}\r\nexports.isBitSet = isBitSet;\r\n//# sourceMappingURL=APEv2Token.js.map","\"use strict\";\r\n// ASF Objects\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nexports.WmPictureToken = exports.MetadataLibraryObjectState = exports.MetadataObjectState = exports.ExtendedStreamPropertiesObjectState = exports.ExtendedContentDescriptionObjectState = exports.ContentDescriptionObjectState = exports.readCodecEntries = exports.HeaderExtensionObject = exports.StreamPropertiesObject = exports.FilePropertiesObject = exports.IgnoreObjectState = exports.State = exports.HeaderObjectToken = exports.TopLevelHeaderObjectToken = exports.DataType = void 0;\r\nconst util = require(\"../common/Util\");\r\nconst Token = require(\"token-types\");\r\nconst GUID_1 = require(\"./GUID\");\r\nconst AsfUtil_1 = require(\"./AsfUtil\");\r\nconst ID3v2Token_1 = require(\"../id3v2/ID3v2Token\");\r\n/**\r\n * Data Type: Specifies the type of information being stored. The following values are recognized.\r\n */\r\nvar DataType;\r\n(function (DataType) {\r\n /**\r\n * Unicode string. The data consists of a sequence of Unicode characters.\r\n */\r\n DataType[DataType[\"UnicodeString\"] = 0] = \"UnicodeString\";\r\n /**\r\n * BYTE array. The type of data is implementation-specific.\r\n */\r\n DataType[DataType[\"ByteArray\"] = 1] = \"ByteArray\";\r\n /**\r\n * BOOL. The data is 2 bytes long and should be interpreted as a 16-bit unsigned integer. Only 0x0000 or 0x0001 are permitted values.\r\n */\r\n DataType[DataType[\"Bool\"] = 2] = \"Bool\";\r\n /**\r\n * DWORD. The data is 4 bytes long and should be interpreted as a 32-bit unsigned integer.\r\n */\r\n DataType[DataType[\"DWord\"] = 3] = \"DWord\";\r\n /**\r\n * QWORD. The data is 8 bytes long and should be interpreted as a 64-bit unsigned integer.\r\n */\r\n DataType[DataType[\"QWord\"] = 4] = \"QWord\";\r\n /**\r\n * WORD. The data is 2 bytes long and should be interpreted as a 16-bit unsigned integer.\r\n */\r\n DataType[DataType[\"Word\"] = 5] = \"Word\";\r\n})(DataType = exports.DataType || (exports.DataType = {}));\r\n/**\r\n * Token for: 3. ASF top-level Header Object\r\n * Ref: http://drang.s4.xrea.com/program/tips/id3tag/wmp/03_asf_top_level_header_object.html#3\r\n */\r\nexports.TopLevelHeaderObjectToken = {\r\n len: 30,\r\n get: (buf, off) => {\r\n return {\r\n objectId: GUID_1.default.fromBin(new Token.BufferType(16).get(buf, off)),\r\n objectSize: Number(Token.UINT64_LE.get(buf, off + 16)),\r\n numberOfHeaderObjects: Token.UINT32_LE.get(buf, off + 24)\r\n // Reserved: 2 bytes\r\n };\r\n }\r\n};\r\n/**\r\n * Token for: 3.1 Header Object (mandatory, one only)\r\n * Ref: http://drang.s4.xrea.com/program/tips/id3tag/wmp/03_asf_top_level_header_object.html#3_1\r\n */\r\nexports.HeaderObjectToken = {\r\n len: 24,\r\n get: (buf, off) => {\r\n return {\r\n objectId: GUID_1.default.fromBin(new Token.BufferType(16).get(buf, off)),\r\n objectSize: Number(Token.UINT64_LE.get(buf, off + 16))\r\n };\r\n }\r\n};\r\nclass State {\r\n constructor(header) {\r\n this.len = Number(header.objectSize) - exports.HeaderObjectToken.len;\r\n }\r\n postProcessTag(tags, name, valueType, data) {\r\n if (name === 'WM/Picture') {\r\n tags.push({ id: name, value: WmPictureToken.fromBuffer(data) });\r\n }\r\n else {\r\n const parseAttr = AsfUtil_1.AsfUtil.getParserForAttr(valueType);\r\n if (!parseAttr) {\r\n throw new Error('unexpected value headerType: ' + valueType);\r\n }\r\n tags.push({ id: name, value: parseAttr(data) });\r\n }\r\n }\r\n}\r\nexports.State = State;\r\n// ToDo: use ignore type\r\nclass IgnoreObjectState extends State {\r\n constructor(header) {\r\n super(header);\r\n }\r\n get(buf, off) {\r\n return null;\r\n }\r\n}\r\nexports.IgnoreObjectState = IgnoreObjectState;\r\n/**\r\n * Token for: 3.2: File Properties Object (mandatory, one only)\r\n * Ref: http://drang.s4.xrea.com/program/tips/id3tag/wmp/03_asf_top_level_header_object.html#3_2\r\n */\r\nclass FilePropertiesObject extends State {\r\n constructor(header) {\r\n super(header);\r\n }\r\n get(buf, off) {\r\n return {\r\n fileId: GUID_1.default.fromBin(buf, off),\r\n fileSize: Token.UINT64_LE.get(buf, off + 16),\r\n creationDate: Token.UINT64_LE.get(buf, off + 24),\r\n dataPacketsCount: Token.UINT64_LE.get(buf, off + 32),\r\n playDuration: Token.UINT64_LE.get(buf, off + 40),\r\n sendDuration: Token.UINT64_LE.get(buf, off + 48),\r\n preroll: Token.UINT64_LE.get(buf, off + 56),\r\n flags: {\r\n broadcast: util.getBit(buf, off + 64, 24),\r\n seekable: util.getBit(buf, off + 64, 25)\r\n },\r\n // flagsNumeric: Token.UINT32_LE.get(buf, off + 64),\r\n minimumDataPacketSize: Token.UINT32_LE.get(buf, off + 68),\r\n maximumDataPacketSize: Token.UINT32_LE.get(buf, off + 72),\r\n maximumBitrate: Token.UINT32_LE.get(buf, off + 76)\r\n };\r\n }\r\n}\r\nexports.FilePropertiesObject = FilePropertiesObject;\r\nFilePropertiesObject.guid = GUID_1.default.FilePropertiesObject;\r\n/**\r\n * Token for: 3.3 Stream Properties Object (mandatory, one per stream)\r\n * Ref: http://drang.s4.xrea.com/program/tips/id3tag/wmp/03_asf_top_level_header_object.html#3_3\r\n */\r\nclass StreamPropertiesObject extends State {\r\n constructor(header) {\r\n super(header);\r\n }\r\n get(buf, off) {\r\n return {\r\n streamType: GUID_1.default.decodeMediaType(GUID_1.default.fromBin(buf, off)),\r\n errorCorrectionType: GUID_1.default.fromBin(buf, off + 8)\r\n // ToDo\r\n };\r\n }\r\n}\r\nexports.StreamPropertiesObject = StreamPropertiesObject;\r\nStreamPropertiesObject.guid = GUID_1.default.StreamPropertiesObject;\r\n/**\r\n * 3.4: Header Extension Object (mandatory, one only)\r\n * Ref: http://drang.s4.xrea.com/program/tips/id3tag/wmp/03_asf_top_level_header_object.html#3_4\r\n */\r\nclass HeaderExtensionObject {\r\n constructor() {\r\n this.len = 22;\r\n }\r\n get(buf, off) {\r\n return {\r\n reserved1: GUID_1.default.fromBin(buf, off),\r\n reserved2: buf.readUInt16LE(off + 16),\r\n extensionDataSize: buf.readUInt32LE(off + 18)\r\n };\r\n }\r\n}\r\nexports.HeaderExtensionObject = HeaderExtensionObject;\r\nHeaderExtensionObject.guid = GUID_1.default.HeaderExtensionObject;\r\n/**\r\n * 3.5: The Codec List Object provides user-friendly information about the codecs and formats used to encode the content found in the ASF file.\r\n * Ref: http://drang.s4.xrea.com/program/tips/id3tag/wmp/03_asf_top_level_header_object.html#3_5\r\n */\r\nconst CodecListObjectHeader = {\r\n len: 20,\r\n get: (buf, off) => {\r\n return {\r\n entryCount: buf.readUInt16LE(off + 16)\r\n };\r\n }\r\n};\r\nasync function readString(tokenizer) {\r\n const length = await tokenizer.readNumber(Token.UINT16_LE);\r\n return (await tokenizer.readToken(new Token.StringType(length * 2, 'utf16le'))).replace('\\0', '');\r\n}\r\n/**\r\n * 3.5: Read the Codec-List-Object, which provides user-friendly information about the codecs and formats used to encode the content found in the ASF file.\r\n * Ref: http://drang.s4.xrea.com/program/tips/id3tag/wmp/03_asf_top_level_header_object.html#3_5\r\n */\r\nasync function readCodecEntries(tokenizer) {\r\n const codecHeader = await tokenizer.readToken(CodecListObjectHeader);\r\n const entries = [];\r\n for (let i = 0; i < codecHeader.entryCount; ++i) {\r\n entries.push(await readCodecEntry(tokenizer));\r\n }\r\n return entries;\r\n}\r\nexports.readCodecEntries = readCodecEntries;\r\nasync function readInformation(tokenizer) {\r\n const length = await tokenizer.readNumber(Token.UINT16_LE);\r\n const buf = Buffer.alloc(length);\r\n await tokenizer.readBuffer(buf);\r\n return buf;\r\n}\r\n/**\r\n * Read Codec-Entries\r\n * @param tokenizer\r\n */\r\nasync function readCodecEntry(tokenizer) {\r\n const type = await tokenizer.readNumber(Token.UINT16_LE);\r\n return {\r\n type: {\r\n videoCodec: (type & 0x0001) === 0x0001,\r\n audioCodec: (type & 0x0002) === 0x0002\r\n },\r\n codecName: await readString(tokenizer),\r\n description: await readString(tokenizer),\r\n information: await readInformation(tokenizer)\r\n };\r\n}\r\n/**\r\n * 3.10 Content Description Object (optional, one only)\r\n * Ref: http://drang.s4.xrea.com/program/tips/id3tag/wmp/03_asf_top_level_header_object.html#3_10\r\n */\r\nclass ContentDescriptionObjectState extends State {\r\n constructor(header) {\r\n super(header);\r\n }\r\n get(buf, off) {\r\n const tags = [];\r\n let pos = off + 10;\r\n for (let i = 0; i < ContentDescriptionObjectState.contentDescTags.length; ++i) {\r\n const length = buf.readUInt16LE(off + i * 2);\r\n if (length > 0) {\r\n const tagName = ContentDescriptionObjectState.contentDescTags[i];\r\n const end = pos + length;\r\n tags.push({ id: tagName, value: AsfUtil_1.AsfUtil.parseUnicodeAttr(buf.slice(pos, end)) });\r\n pos = end;\r\n }\r\n }\r\n return tags;\r\n }\r\n}\r\nexports.ContentDescriptionObjectState = ContentDescriptionObjectState;\r\nContentDescriptionObjectState.guid = GUID_1.default.ContentDescriptionObject;\r\nContentDescriptionObjectState.contentDescTags = ['Title', 'Author', 'Copyright', 'Description', 'Rating'];\r\n/**\r\n * 3.11 Extended Content Description Object (optional, one only)\r\n * Ref: http://drang.s4.xrea.com/program/tips/id3tag/wmp/03_asf_top_level_header_object.html#3_11\r\n */\r\nclass ExtendedContentDescriptionObjectState extends State {\r\n constructor(header) {\r\n super(header);\r\n }\r\n get(buf, off) {\r\n const tags = [];\r\n const attrCount = buf.readUInt16LE(off);\r\n let pos = off + 2;\r\n for (let i = 0; i < attrCount; i += 1) {\r\n const nameLen = buf.readUInt16LE(pos);\r\n pos += 2;\r\n const name = AsfUtil_1.AsfUtil.parseUnicodeAttr(buf.slice(pos, pos + nameLen));\r\n pos += nameLen;\r\n const valueType = buf.readUInt16LE(pos);\r\n pos += 2;\r\n const valueLen = buf.readUInt16LE(pos);\r\n pos += 2;\r\n const value = buf.slice(pos, pos + valueLen);\r\n pos += valueLen;\r\n this.postProcessTag(tags, name, valueType, value);\r\n }\r\n return tags;\r\n }\r\n}\r\nexports.ExtendedContentDescriptionObjectState = ExtendedContentDescriptionObjectState;\r\nExtendedContentDescriptionObjectState.guid = GUID_1.default.ExtendedContentDescriptionObject;\r\n/**\r\n * 4.1 Extended Stream Properties Object (optional, 1 per media stream)\r\n * Ref: http://drang.s4.xrea.com/program/tips/id3tag/wmp/04_objects_in_the_asf_header_extension_object.html#4_1\r\n */\r\nclass ExtendedStreamPropertiesObjectState extends State {\r\n constructor(header) {\r\n super(header);\r\n }\r\n get(buf, off) {\r\n return {\r\n startTime: Token.UINT64_LE.get(buf, off),\r\n endTime: Token.UINT64_LE.get(buf, off + 8),\r\n dataBitrate: buf.readInt32LE(off + 12),\r\n bufferSize: buf.readInt32LE(off + 16),\r\n initialBufferFullness: buf.readInt32LE(off + 20),\r\n alternateDataBitrate: buf.readInt32LE(off + 24),\r\n alternateBufferSize: buf.readInt32LE(off + 28),\r\n alternateInitialBufferFullness: buf.readInt32LE(off + 32),\r\n maximumObjectSize: buf.readInt32LE(off + 36),\r\n flags: {\r\n reliableFlag: util.getBit(buf, off + 40, 0),\r\n seekableFlag: util.getBit(buf, off + 40, 1),\r\n resendLiveCleanpointsFlag: util.getBit(buf, off + 40, 2)\r\n },\r\n // flagsNumeric: Token.UINT32_LE.get(buf, off + 64),\r\n streamNumber: buf.readInt16LE(off + 42),\r\n streamLanguageId: buf.readInt16LE(off + 44),\r\n averageTimePerFrame: buf.readInt32LE(off + 52),\r\n streamNameCount: buf.readInt32LE(off + 54),\r\n payloadExtensionSystems: buf.readInt32LE(off + 56),\r\n streamNames: [],\r\n streamPropertiesObject: null\r\n };\r\n }\r\n}\r\nexports.ExtendedStreamPropertiesObjectState = ExtendedStreamPropertiesObjectState;\r\nExtendedStreamPropertiesObjectState.guid = GUID_1.default.ExtendedStreamPropertiesObject;\r\n/**\r\n * 4.7 Metadata Object (optional, 0 or 1)\r\n * Ref: http://drang.s4.xrea.com/program/tips/id3tag/wmp/04_objects_in_the_asf_header_extension_object.html#4_7\r\n */\r\nclass MetadataObjectState extends State {\r\n constructor(header) {\r\n super(header);\r\n }\r\n get(uint8Array, off) {\r\n const tags = [];\r\n const buf = Buffer.from(uint8Array);\r\n const descriptionRecordsCount = buf.readUInt16LE(off);\r\n let pos = off + 2;\r\n for (let i = 0; i < descriptionRecordsCount; i += 1) {\r\n pos += 4;\r\n const nameLen = buf.readUInt16LE(pos);\r\n pos += 2;\r\n const dataType = buf.readUInt16LE(pos);\r\n pos += 2;\r\n const dataLen = buf.readUInt32LE(pos);\r\n pos += 4;\r\n const name = AsfUtil_1.AsfUtil.parseUnicodeAttr(buf.slice(pos, pos + nameLen));\r\n pos += nameLen;\r\n const data = buf.slice(pos, pos + dataLen);\r\n pos += dataLen;\r\n this.postProcessTag(tags, name, dataType, data);\r\n }\r\n return tags;\r\n }\r\n}\r\nexports.MetadataObjectState = MetadataObjectState;\r\nMetadataObjectState.guid = GUID_1.default.MetadataObject;\r\n// 4.8\tMetadata Library Object (optional, 0 or 1)\r\nclass MetadataLibraryObjectState extends MetadataObjectState {\r\n constructor(header) {\r\n super(header);\r\n }\r\n}\r\nexports.MetadataLibraryObjectState = MetadataLibraryObjectState;\r\nMetadataLibraryObjectState.guid = GUID_1.default.MetadataLibraryObject;\r\n/**\r\n * Ref: https://msdn.microsoft.com/en-us/library/windows/desktop/dd757977(v=vs.85).aspx\r\n */\r\nclass WmPictureToken {\r\n constructor(len) {\r\n this.len = len;\r\n }\r\n static fromBase64(base64str) {\r\n return this.fromBuffer(Buffer.from(base64str, 'base64'));\r\n }\r\n static fromBuffer(buffer) {\r\n const pic = new WmPictureToken(buffer.length);\r\n return pic.get(buffer, 0);\r\n }\r\n get(buffer, offset) {\r\n const typeId = buffer.readUInt8(offset++);\r\n const size = buffer.readInt32LE(offset);\r\n let index = 5;\r\n while (buffer.readUInt16BE(index) !== 0) {\r\n index += 2;\r\n }\r\n const format = buffer.slice(5, index).toString('utf16le');\r\n while (buffer.readUInt16BE(index) !== 0) {\r\n index += 2;\r\n }\r\n const description = buffer.slice(5, index).toString('utf16le');\r\n return {\r\n type: ID3v2Token_1.AttachedPictureType[typeId],\r\n format,\r\n description,\r\n size,\r\n data: buffer.slice(index + 4)\r\n };\r\n }\r\n}\r\nexports.WmPictureToken = WmPictureToken;\r\n","\"use strict\";\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nexports.AsfParser = void 0;\r\nconst debug_1 = require(\"debug\");\r\nconst type_1 = require(\"../type\");\r\nconst GUID_1 = require(\"./GUID\");\r\nconst AsfObject = require(\"./AsfObject\");\r\nconst BasicParser_1 = require(\"../common/BasicParser\");\r\nconst debug = (0, debug_1.default)('music-metadata:parser:ASF');\r\nconst headerType = 'asf';\r\n/**\r\n * Windows Media Metadata Usage Guidelines\r\n * - Ref: https://msdn.microsoft.com/en-us/library/ms867702.aspx\r\n *\r\n * Ref:\r\n * - https://tools.ietf.org/html/draft-fleischman-asf-01\r\n * - https://hwiegman.home.xs4all.nl/fileformats/asf/ASF_Specification.pdf\r\n * - http://drang.s4.xrea.com/program/tips/id3tag/wmp/index.html\r\n * - https://msdn.microsoft.com/en-us/library/windows/desktop/ee663575(v=vs.85).aspx\r\n */\r\nclass AsfParser extends BasicParser_1.BasicParser {\r\n async parse() {\r\n const header = await this.tokenizer.readToken(AsfObject.TopLevelHeaderObjectToken);\r\n if (!header.objectId.equals(GUID_1.default.HeaderObject)) {\r\n throw new Error('expected asf header; but was not found; got: ' + header.objectId.str);\r\n }\r\n try {\r\n await this.parseObjectHeader(header.numberOfHeaderObjects);\r\n }\r\n catch (err) {\r\n debug('Error while parsing ASF: %s', err);\r\n }\r\n }\r\n async parseObjectHeader(numberOfObjectHeaders) {\r\n let tags;\r\n do {\r\n // Parse common header of the ASF Object (3.1)\r\n const header = await this.tokenizer.readToken(AsfObject.HeaderObjectToken);\r\n // Parse data part of the ASF Object\r\n debug('header GUID=%s', header.objectId.str);\r\n switch (header.objectId.str) {\r\n case AsfObject.FilePropertiesObject.guid.str: // 3.2\r\n const fpo = await this.tokenizer.readToken(new AsfObject.FilePropertiesObject(header));\r\n this.metadata.setFormat('duration', Number(fpo.playDuration / BigInt(1000)) / 10000 - Number(fpo.preroll) / 1000);\r\n this.metadata.setFormat('bitrate', fpo.maximumBitrate);\r\n break;\r\n case AsfObject.StreamPropertiesObject.guid.str: // 3.3\r\n const spo = await this.tokenizer.readToken(new AsfObject.StreamPropertiesObject(header));\r\n this.metadata.setFormat('container', 'ASF/' + spo.streamType);\r\n break;\r\n case AsfObject.HeaderExtensionObject.guid.str: // 3.4\r\n const extHeader = await this.tokenizer.readToken(new AsfObject.HeaderExtensionObject());\r\n await this.parseExtensionObject(extHeader.extensionDataSize);\r\n break;\r\n case AsfObject.ContentDescriptionObjectState.guid.str: // 3.10\r\n tags = await this.tokenizer.readToken(new AsfObject.ContentDescriptionObjectState(header));\r\n this.addTags(tags);\r\n break;\r\n case AsfObject.ExtendedContentDescriptionObjectState.guid.str: // 3.11\r\n tags = await this.tokenizer.readToken(new AsfObject.ExtendedContentDescriptionObjectState(header));\r\n this.addTags(tags);\r\n break;\r\n case GUID_1.default.CodecListObject.str:\r\n const codecs = await AsfObject.readCodecEntries(this.tokenizer);\r\n codecs.forEach(codec => {\r\n this.metadata.addStreamInfo({\r\n type: codec.type.videoCodec ? type_1.TrackType.video : type_1.TrackType.audio,\r\n codecName: codec.codecName\r\n });\r\n });\r\n const audioCodecs = codecs.filter(codec => codec.type.audioCodec).map(codec => codec.codecName).join('/');\r\n this.metadata.setFormat('codec', audioCodecs);\r\n break;\r\n case GUID_1.default.StreamBitratePropertiesObject.str:\r\n // ToDo?\r\n await this.tokenizer.ignore(header.objectSize - AsfObject.HeaderObjectToken.len);\r\n break;\r\n case GUID_1.default.PaddingObject.str:\r\n // ToDo: register bytes pad\r\n debug('Padding: %s bytes', header.objectSize - AsfObject.HeaderObjectToken.len);\r\n await this.tokenizer.ignore(header.objectSize - AsfObject.HeaderObjectToken.len);\r\n break;\r\n default:\r\n this.metadata.addWarning('Ignore ASF-Object-GUID: ' + header.objectId.str);\r\n debug('Ignore ASF-Object-GUID: %s', header.objectId.str);\r\n await this.tokenizer.readToken(new AsfObject.IgnoreObjectState(header));\r\n }\r\n } while (--numberOfObjectHeaders);\r\n // done\r\n }\r\n addTags(tags) {\r\n tags.forEach(tag => {\r\n this.metadata.addTag(headerType, tag.id, tag.value);\r\n });\r\n }\r\n async parseExtensionObject(extensionSize) {\r\n do {\r\n // Parse common header of the ASF Object (3.1)\r\n const header = await this.tokenizer.readToken(AsfObject.HeaderObjectToken);\r\n const remaining = header.objectSize - AsfObject.HeaderObjectToken.len;\r\n // Parse data part of the ASF Object\r\n switch (header.objectId.str) {\r\n case AsfObject.ExtendedStreamPropertiesObjectState.guid.str: // 4.1\r\n // ToDo: extended stream header properties are ignored\r\n await this.tokenizer.readToken(new AsfObject.ExtendedStreamPropertiesObjectState(header));\r\n break;\r\n case AsfObject.MetadataObjectState.guid.str: // 4.7\r\n const moTags = await this.tokenizer.readToken(new AsfObject.MetadataObjectState(header));\r\n this.addTags(moTags);\r\n break;\r\n case AsfObject.MetadataLibraryObjectState.guid.str: // 4.8\r\n const mlTags = await this.tokenizer.readToken(new AsfObject.MetadataLibraryObjectState(header));\r\n this.addTags(mlTags);\r\n break;\r\n case GUID_1.default.PaddingObject.str:\r\n // ToDo: register bytes pad\r\n await this.tokenizer.ignore(remaining);\r\n break;\r\n case GUID_1.default.CompatibilityObject.str:\r\n this.tokenizer.ignore(remaining);\r\n break;\r\n case GUID_1.default.ASF_Index_Placeholder_Object.str:\r\n await this.tokenizer.ignore(remaining);\r\n break;\r\n default:\r\n this.metadata.addWarning('Ignore ASF-Object-GUID: ' + header.objectId.str);\r\n // console.log(\"Ignore ASF-Object-GUID: %s\", header.objectId.str);\r\n await this.tokenizer.readToken(new AsfObject.IgnoreObjectState(header));\r\n break;\r\n }\r\n extensionSize -= header.objectSize;\r\n } while (extensionSize > 0);\r\n }\r\n}\r\nexports.AsfParser = AsfParser;\r\n","\"use strict\";\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nexports.AsfTagMapper = void 0;\r\nconst GenericTagMapper_1 = require(\"../common/GenericTagMapper\");\r\n/**\r\n * ASF Metadata tag mappings.\r\n * See http://msdn.microsoft.com/en-us/library/ms867702.aspx\r\n */\r\nconst asfTagMap = {\r\n Title: 'title',\r\n Author: 'artist',\r\n 'WM/AlbumArtist': 'albumartist',\r\n 'WM/AlbumTitle': 'album',\r\n 'WM/Year': 'date',\r\n 'WM/OriginalReleaseTime': 'originaldate',\r\n 'WM/OriginalReleaseYear': 'originalyear',\r\n Description: 'comment',\r\n 'WM/TrackNumber': 'track',\r\n 'WM/PartOfSet': 'disk',\r\n 'WM/Genre': 'genre',\r\n 'WM/Composer': 'composer',\r\n 'WM/Lyrics': 'lyrics',\r\n 'WM/AlbumSortOrder': 'albumsort',\r\n 'WM/TitleSortOrder': 'titlesort',\r\n 'WM/ArtistSortOrder': 'artistsort',\r\n 'WM/AlbumArtistSortOrder': 'albumartistsort',\r\n 'WM/ComposerSortOrder': 'composersort',\r\n 'WM/Writer': 'lyricist',\r\n 'WM/Conductor': 'conductor',\r\n 'WM/ModifiedBy': 'remixer',\r\n 'WM/Engineer': 'engineer',\r\n 'WM/Producer': 'producer',\r\n 'WM/DJMixer': 'djmixer',\r\n 'WM/Mixer': 'mixer',\r\n 'WM/Publisher': 'label',\r\n 'WM/ContentGroupDescription': 'grouping',\r\n 'WM/SubTitle': 'subtitle',\r\n 'WM/SetSubTitle': 'discsubtitle',\r\n // 'WM/PartOfSet': 'totaldiscs',\r\n 'WM/IsCompilation': 'compilation',\r\n 'WM/SharedUserRating': 'rating',\r\n 'WM/BeatsPerMinute': 'bpm',\r\n 'WM/Mood': 'mood',\r\n 'WM/Media': 'media',\r\n 'WM/CatalogNo': 'catalognumber',\r\n 'MusicBrainz/Album Status': 'releasestatus',\r\n 'MusicBrainz/Album Type': 'releasetype',\r\n 'MusicBrainz/Album Release Country': 'releasecountry',\r\n 'WM/Script': 'script',\r\n 'WM/Language': 'language',\r\n Copyright: 'copyright',\r\n LICENSE: 'license',\r\n 'WM/EncodedBy': 'encodedby',\r\n 'WM/EncodingSettings': 'encodersettings',\r\n 'WM/Barcode': 'barcode',\r\n 'WM/ISRC': 'isrc',\r\n 'MusicBrainz/Track Id': 'musicbrainz_recordingid',\r\n 'MusicBrainz/Release Track Id': 'musicbrainz_trackid',\r\n 'MusicBrainz/Album Id': 'musicbrainz_albumid',\r\n 'MusicBrainz/Artist Id': 'musicbrainz_artistid',\r\n 'MusicBrainz/Album Artist Id': 'musicbrainz_albumartistid',\r\n 'MusicBrainz/Release Group Id': 'musicbrainz_releasegroupid',\r\n 'MusicBrainz/Work Id': 'musicbrainz_workid',\r\n 'MusicBrainz/TRM Id': 'musicbrainz_trmid',\r\n 'MusicBrainz/Disc Id': 'musicbrainz_discid',\r\n 'Acoustid/Id': 'acoustid_id',\r\n 'Acoustid/Fingerprint': 'acoustid_fingerprint',\r\n 'MusicIP/PUID': 'musicip_puid',\r\n 'WM/ARTISTS': 'artists',\r\n 'WM/InitialKey': 'key',\r\n ASIN: 'asin',\r\n 'WM/Work': 'work',\r\n 'WM/AuthorURL': 'website',\r\n 'WM/Picture': 'picture'\r\n};\r\nclass AsfTagMapper extends GenericTagMapper_1.CommonTagMapper {\r\n static toRating(rating) {\r\n return {\r\n rating: parseFloat(rating + 1) / 5\r\n };\r\n }\r\n constructor() {\r\n super(['asf'], asfTagMap);\r\n }\r\n postMap(tag) {\r\n switch (tag.id) {\r\n case 'WM/SharedUserRating':\r\n const keys = tag.id.split(':');\r\n tag.value = AsfTagMapper.toRating(tag.value);\r\n tag.id = keys[0];\r\n break;\r\n }\r\n }\r\n}\r\nexports.AsfTagMapper = AsfTagMapper;\r\n//# sourceMappingURL=AsfTagMapper.js.map","\"use strict\";\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nexports.AsfUtil = void 0;\r\nconst Token = require(\"token-types\");\r\nconst util = require(\"../common/Util\");\r\nclass AsfUtil {\r\n static getParserForAttr(i) {\r\n return AsfUtil.attributeParsers[i];\r\n }\r\n static parseUnicodeAttr(uint8Array) {\r\n return util.stripNulls(util.decodeString(uint8Array, 'utf16le'));\r\n }\r\n static parseByteArrayAttr(buf) {\r\n return Buffer.from(buf);\r\n }\r\n static parseBoolAttr(buf, offset = 0) {\r\n return AsfUtil.parseWordAttr(buf, offset) === 1;\r\n }\r\n static parseDWordAttr(buf, offset = 0) {\r\n return buf.readUInt32LE(offset);\r\n }\r\n static parseQWordAttr(buf, offset = 0) {\r\n return Token.UINT64_LE.get(buf, offset);\r\n }\r\n static parseWordAttr(buf, offset = 0) {\r\n return buf.readUInt16LE(offset);\r\n }\r\n}\r\nexports.AsfUtil = AsfUtil;\r\nAsfUtil.attributeParsers = [\r\n AsfUtil.parseUnicodeAttr,\r\n AsfUtil.parseByteArrayAttr,\r\n AsfUtil.parseBoolAttr,\r\n AsfUtil.parseDWordAttr,\r\n AsfUtil.parseQWordAttr,\r\n AsfUtil.parseWordAttr,\r\n AsfUtil.parseByteArrayAttr\r\n];\r\n","\"use strict\";\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\n/**\r\n * Ref:\r\n * - https://tools.ietf.org/html/draft-fleischman-asf-01, Appendix A: ASF GUIDs\r\n * - http://drang.s4.xrea.com/program/tips/id3tag/wmp/10_asf_guids.html\r\n * - http://drang.s4.xrea.com/program/tips/id3tag/wmp/index.html\r\n * - http://drang.s4.xrea.com/program/tips/id3tag/wmp/10_asf_guids.html\r\n *\r\n * ASF File Structure:\r\n * - https://msdn.microsoft.com/en-us/library/windows/desktop/ee663575(v=vs.85).aspx\r\n *\r\n * ASF GUIDs:\r\n * - http://drang.s4.xrea.com/program/tips/id3tag/wmp/10_asf_guids.html\r\n * - https://github.com/dji-sdk/FFmpeg/blob/master/libavformat/asf.c\r\n */\r\nclass GUID {\r\n constructor(str) {\r\n this.str = str;\r\n }\r\n static fromBin(bin, offset = 0) {\r\n return new GUID(this.decode(bin, offset));\r\n }\r\n /**\r\n * Decode GUID in format like \"B503BF5F-2EA9-CF11-8EE3-00C00C205365\"\r\n * @param objectId Binary GUID\r\n * @param offset Read offset in bytes, default 0\r\n * @returns GUID as dashed hexadecimal representation\r\n */\r\n static decode(objectId, offset = 0) {\r\n const guid = objectId.readUInt32LE(offset).toString(16) + \"-\" +\r\n objectId.readUInt16LE(offset + 4).toString(16) + \"-\" +\r\n objectId.readUInt16LE(offset + 6).toString(16) + \"-\" +\r\n objectId.readUInt16BE(offset + 8).toString(16) + \"-\" +\r\n objectId.slice(offset + 10, offset + 16).toString('hex');\r\n return guid.toUpperCase();\r\n }\r\n /**\r\n * Decode stream type\r\n * @param mediaType Media type GUID\r\n * @returns Media type\r\n */\r\n static decodeMediaType(mediaType) {\r\n switch (mediaType.str) {\r\n case GUID.AudioMedia.str: return 'audio';\r\n case GUID.VideoMedia.str: return 'video';\r\n case GUID.CommandMedia.str: return 'command';\r\n case GUID.Degradable_JPEG_Media.str: return 'degradable-jpeg';\r\n case GUID.FileTransferMedia.str: return 'file-transfer';\r\n case GUID.BinaryMedia.str: return 'binary';\r\n }\r\n }\r\n /**\r\n * Encode GUID\r\n * @param guid GUID like: \"B503BF5F-2EA9-CF11-8EE3-00C00C205365\"\r\n * @returns Encoded Binary GUID\r\n */\r\n static encode(str) {\r\n const bin = Buffer.alloc(16);\r\n bin.writeUInt32LE(parseInt(str.slice(0, 8), 16), 0);\r\n bin.writeUInt16LE(parseInt(str.slice(9, 13), 16), 4);\r\n bin.writeUInt16LE(parseInt(str.slice(14, 18), 16), 6);\r\n Buffer.from(str.slice(19, 23), \"hex\").copy(bin, 8);\r\n Buffer.from(str.slice(24), \"hex\").copy(bin, 10);\r\n return bin;\r\n }\r\n equals(guid) {\r\n return this.str === guid.str;\r\n }\r\n toBin() {\r\n return GUID.encode(this.str);\r\n }\r\n}\r\nexports.default = GUID;\r\n// 10.1 Top-level ASF object GUIDs\r\nGUID.HeaderObject = new GUID(\"75B22630-668E-11CF-A6D9-00AA0062CE6C\");\r\nGUID.DataObject = new GUID(\"75B22636-668E-11CF-A6D9-00AA0062CE6C\");\r\nGUID.SimpleIndexObject = new GUID(\"33000890-E5B1-11CF-89F4-00A0C90349CB\");\r\nGUID.IndexObject = new GUID(\"D6E229D3-35DA-11D1-9034-00A0C90349BE\");\r\nGUID.MediaObjectIndexObject = new GUID(\"FEB103F8-12AD-4C64-840F-2A1D2F7AD48C\");\r\nGUID.TimecodeIndexObject = new GUID(\"3CB73FD0-0C4A-4803-953D-EDF7B6228F0C\");\r\n// 10.2 Header Object GUIDs\r\nGUID.FilePropertiesObject = new GUID(\"8CABDCA1-A947-11CF-8EE4-00C00C205365\");\r\nGUID.StreamPropertiesObject = new GUID(\"B7DC0791-A9B7-11CF-8EE6-00C00C205365\");\r\nGUID.HeaderExtensionObject = new GUID(\"5FBF03B5-A92E-11CF-8EE3-00C00C205365\");\r\nGUID.CodecListObject = new GUID(\"86D15240-311D-11D0-A3A4-00A0C90348F6\");\r\nGUID.ScriptCommandObject = new GUID(\"1EFB1A30-0B62-11D0-A39B-00A0C90348F6\");\r\nGUID.MarkerObject = new GUID(\"F487CD01-A951-11CF-8EE6-00C00C205365\");\r\nGUID.BitrateMutualExclusionObject = new GUID(\"D6E229DC-35DA-11D1-9034-00A0C90349BE\");\r\nGUID.ErrorCorrectionObject = new GUID(\"75B22635-668E-11CF-A6D9-00AA0062CE6C\");\r\nGUID.ContentDescriptionObject = new GUID(\"75B22633-668E-11CF-A6D9-00AA0062CE6C\");\r\nGUID.ExtendedContentDescriptionObject = new GUID(\"D2D0A440-E307-11D2-97F0-00A0C95EA850\");\r\nGUID.ContentBrandingObject = new GUID(\"2211B3FA-BD23-11D2-B4B7-00A0C955FC6E\");\r\nGUID.StreamBitratePropertiesObject = new GUID(\"7BF875CE-468D-11D1-8D82-006097C9A2B2\");\r\nGUID.ContentEncryptionObject = new GUID(\"2211B3FB-BD23-11D2-B4B7-00A0C955FC6E\");\r\nGUID.ExtendedContentEncryptionObject = new GUID(\"298AE614-2622-4C17-B935-DAE07EE9289C\");\r\nGUID.DigitalSignatureObject = new GUID(\"2211B3FC-BD23-11D2-B4B7-00A0C955FC6E\");\r\nGUID.PaddingObject = new GUID(\"1806D474-CADF-4509-A4BA-9AABCB96AAE8\");\r\n// 10.3 Header Extension Object GUIDs\r\nGUID.ExtendedStreamPropertiesObject = new GUID(\"14E6A5CB-C672-4332-8399-A96952065B5A\");\r\nGUID.AdvancedMutualExclusionObject = new GUID(\"A08649CF-4775-4670-8A16-6E35357566CD\");\r\nGUID.GroupMutualExclusionObject = new GUID(\"D1465A40-5A79-4338-B71B-E36B8FD6C249\");\r\nGUID.StreamPrioritizationObject = new GUID(\"D4FED15B-88D3-454F-81F0-ED5C45999E24\");\r\nGUID.BandwidthSharingObject = new GUID(\"A69609E6-517B-11D2-B6AF-00C04FD908E9\");\r\nGUID.LanguageListObject = new GUID(\"7C4346A9-EFE0-4BFC-B229-393EDE415C85\");\r\nGUID.MetadataObject = new GUID(\"C5F8CBEA-5BAF-4877-8467-AA8C44FA4CCA\");\r\nGUID.MetadataLibraryObject = new GUID(\"44231C94-9498-49D1-A141-1D134E457054\");\r\nGUID.IndexParametersObject = new GUID(\"D6E229DF-35DA-11D1-9034-00A0C90349BE\");\r\nGUID.MediaObjectIndexParametersObject = new GUID(\"6B203BAD-3F11-48E4-ACA8-D7613DE2CFA7\");\r\nGUID.TimecodeIndexParametersObject = new GUID(\"F55E496D-9797-4B5D-8C8B-604DFE9BFB24\");\r\nGUID.CompatibilityObject = new GUID(\"26F18B5D-4584-47EC-9F5F-0E651F0452C9\");\r\nGUID.AdvancedContentEncryptionObject = new GUID(\"43058533-6981-49E6-9B74-AD12CB86D58C\");\r\n// 10.4 Stream Properties Object Stream Type GUIDs\r\nGUID.AudioMedia = new GUID(\"F8699E40-5B4D-11CF-A8FD-00805F5C442B\");\r\nGUID.VideoMedia = new GUID(\"BC19EFC0-5B4D-11CF-A8FD-00805F5C442B\");\r\nGUID.CommandMedia = new GUID(\"59DACFC0-59E6-11D0-A3AC-00A0C90348F6\");\r\nGUID.JFIF_Media = new GUID(\"B61BE100-5B4E-11CF-A8FD-00805F5C442B\");\r\nGUID.Degradable_JPEG_Media = new GUID(\"35907DE0-E415-11CF-A917-00805F5C442B\");\r\nGUID.FileTransferMedia = new GUID(\"91BD222C-F21C-497A-8B6D-5AA86BFC0185\");\r\nGUID.BinaryMedia = new GUID(\"3AFB65E2-47EF-40F2-AC2C-70A90D71D343\");\r\nGUID.ASF_Index_Placeholder_Object = new GUID(\"D9AADE20-7C17-4F9C-BC28-8555DD98E2A2\");\r\n","\"use strict\";\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nexports.BasicParser = void 0;\r\nclass BasicParser {\r\n /**\r\n * Initialize parser with output (metadata), input (tokenizer) & parsing options (options).\r\n * @param {INativeMetadataCollector} metadata Output\r\n * @param {ITokenizer} tokenizer Input\r\n * @param {IOptions} options Parsing options\r\n */\r\n init(metadata, tokenizer, options) {\r\n this.metadata = metadata;\r\n this.tokenizer = tokenizer;\r\n this.options = options;\r\n return this;\r\n }\r\n}\r\nexports.BasicParser = BasicParser;\r\n","\"use strict\";\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nexports.CaseInsensitiveTagMap = void 0;\r\nconst GenericTagMapper_1 = require(\"./GenericTagMapper\");\r\nclass CaseInsensitiveTagMap extends GenericTagMapper_1.CommonTagMapper {\r\n constructor(tagTypes, tagMap) {\r\n const upperCaseMap = {};\r\n for (const tag of Object.keys(tagMap)) {\r\n upperCaseMap[tag.toUpperCase()] = tagMap[tag];\r\n }\r\n super(tagTypes, upperCaseMap);\r\n }\r\n /**\r\n * @tag Native header tag\r\n * @return common tag name (alias)\r\n */\r\n getCommonName(tag) {\r\n return this.tagMap[tag.toUpperCase()];\r\n }\r\n}\r\nexports.CaseInsensitiveTagMap = CaseInsensitiveTagMap;\r\n//# sourceMappingURL=CaseInsensitiveTagMap.js.map","\"use strict\";\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nexports.CombinedTagMapper = void 0;\r\nconst ID3v1TagMap_1 = require(\"../id3v1/ID3v1TagMap\");\r\nconst ID3v24TagMapper_1 = require(\"../id3v2/ID3v24TagMapper\");\r\nconst AsfTagMapper_1 = require(\"../asf/AsfTagMapper\");\r\nconst ID3v22TagMapper_1 = require(\"../id3v2/ID3v22TagMapper\");\r\nconst APEv2TagMapper_1 = require(\"../apev2/APEv2TagMapper\");\r\nconst MP4TagMapper_1 = require(\"../mp4/MP4TagMapper\");\r\nconst VorbisTagMapper_1 = require(\"../ogg/vorbis/VorbisTagMapper\");\r\nconst RiffInfoTagMap_1 = require(\"../riff/RiffInfoTagMap\");\r\nconst MatroskaTagMapper_1 = require(\"../matroska/MatroskaTagMapper\");\r\nclass CombinedTagMapper {\r\n constructor() {\r\n this.tagMappers = {};\r\n [\r\n new ID3v1TagMap_1.ID3v1TagMapper(),\r\n new ID3v22TagMapper_1.ID3v22TagMapper(),\r\n new ID3v24TagMapper_1.ID3v24TagMapper(),\r\n new MP4TagMapper_1.MP4TagMapper(),\r\n new MP4TagMapper_1.MP4TagMapper(),\r\n new VorbisTagMapper_1.VorbisTagMapper(),\r\n new APEv2TagMapper_1.APEv2TagMapper(),\r\n new AsfTagMapper_1.AsfTagMapper(),\r\n new RiffInfoTagMap_1.RiffInfoTagMapper(),\r\n new MatroskaTagMapper_1.MatroskaTagMapper()\r\n ].forEach(mapper => {\r\n this.registerTagMapper(mapper);\r\n });\r\n }\r\n /**\r\n * Convert native to generic (common) tags\r\n * @param tagType Originating tag format\r\n * @param tag Native tag to map to a generic tag id\r\n * @param warnings\r\n * @return Generic tag result (output of this function)\r\n */\r\n mapTag(tagType, tag, warnings) {\r\n const tagMapper = this.tagMappers[tagType];\r\n if (tagMapper) {\r\n return this.tagMappers[tagType].mapGenericTag(tag, warnings);\r\n }\r\n throw new Error('No generic tag mapper defined for tag-format: ' + tagType);\r\n }\r\n registerTagMapper(genericTagMapper) {\r\n for (const tagType of genericTagMapper.tagTypes) {\r\n this.tagMappers[tagType] = genericTagMapper;\r\n }\r\n }\r\n}\r\nexports.CombinedTagMapper = CombinedTagMapper;\r\n//# sourceMappingURL=CombinedTagMapper.js.map","\"use strict\";\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nexports.FourCcToken = void 0;\r\nconst util = require(\"./Util\");\r\nconst validFourCC = /^[\\x21-\\x7e©][\\x20-\\x7e\\x00()]{3}/;\r\n/**\r\n * Token for read FourCC\r\n * Ref: https://en.wikipedia.org/wiki/FourCC\r\n */\r\nexports.FourCcToken = {\r\n len: 4,\r\n get: (buf, off) => {\r\n const id = buf.toString('binary', off, off + exports.FourCcToken.len);\r\n switch (id) {\r\n default:\r\n if (!id.match(validFourCC)) {\r\n throw new Error(`FourCC contains invalid characters: ${util.a2hex(id)} \"${id}\"`);\r\n }\r\n }\r\n return id;\r\n },\r\n put: (buffer, offset, id) => {\r\n const str = Buffer.from(id, 'binary');\r\n if (str.length !== 4)\r\n throw new Error('Invalid length');\r\n return str.copy(buffer, offset);\r\n }\r\n};\r\n//# sourceMappingURL=FourCC.js.map","\"use strict\";\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nexports.CommonTagMapper = void 0;\r\nclass CommonTagMapper {\r\n constructor(tagTypes, tagMap) {\r\n this.tagTypes = tagTypes;\r\n this.tagMap = tagMap;\r\n }\r\n static toIntOrNull(str) {\r\n const cleaned = parseInt(str, 10);\r\n return isNaN(cleaned) ? null : cleaned;\r\n }\r\n // TODO: a string of 1of1 would fail to be converted\r\n // converts 1/10 to no : 1, of : 10\r\n // or 1 to no : 1, of : 0\r\n static normalizeTrack(origVal) {\r\n const split = origVal.toString().split('/');\r\n return {\r\n no: parseInt(split[0], 10) || null,\r\n of: parseInt(split[1], 10) || null\r\n };\r\n }\r\n /**\r\n * Process and set common tags\r\n * write common tags to\r\n * @param tag Native tag\r\n * @param warnings Register warnings\r\n * @return common name\r\n */\r\n mapGenericTag(tag, warnings) {\r\n tag = { id: tag.id, value: tag.value }; // clone object\r\n this.postMap(tag, warnings);\r\n // Convert native tag event to generic 'alias' tag\r\n const id = this.getCommonName(tag.id);\r\n return id ? { id, value: tag.value } : null;\r\n }\r\n /**\r\n * Convert native tag key to common tag key\r\n * @tag Native header tag\r\n * @return common tag name (alias)\r\n */\r\n getCommonName(tag) {\r\n return this.tagMap[tag];\r\n }\r\n /**\r\n * Handle post mapping exceptions / correction\r\n * @param tag Tag e.g. {\"©alb\", \"Buena Vista Social Club\")\r\n * @param warnings Used to register warnings\r\n */\r\n postMap(tag, warnings) {\r\n return;\r\n }\r\n}\r\nexports.CommonTagMapper = CommonTagMapper;\r\nCommonTagMapper.maxRatingScore = 1;\r\n//# sourceMappingURL=GenericTagMapper.js.map","\"use strict\";\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nexports.isUnique = exports.isSingleton = exports.commonTags = void 0;\r\nexports.commonTags = {\r\n year: { multiple: false },\r\n track: { multiple: false },\r\n disk: { multiple: false },\r\n title: { multiple: false },\r\n artist: { multiple: false },\r\n artists: { multiple: true, unique: true },\r\n albumartist: { multiple: false },\r\n album: { multiple: false },\r\n date: { multiple: false },\r\n originaldate: { multiple: false },\r\n originalyear: { multiple: false },\r\n comment: { multiple: true, unique: false },\r\n genre: { multiple: true, unique: true },\r\n picture: { multiple: true, unique: true },\r\n composer: { multiple: true, unique: true },\r\n lyrics: { multiple: true, unique: false },\r\n albumsort: { multiple: false, unique: true },\r\n titlesort: { multiple: false, unique: true },\r\n work: { multiple: false, unique: true },\r\n artistsort: { multiple: false, unique: true },\r\n albumartistsort: { multiple: false, unique: true },\r\n composersort: { multiple: false, unique: true },\r\n lyricist: { multiple: true, unique: true },\r\n writer: { multiple: true, unique: true },\r\n conductor: { multiple: true, unique: true },\r\n remixer: { multiple: true, unique: true },\r\n arranger: { multiple: true, unique: true },\r\n engineer: { multiple: true, unique: true },\r\n producer: { multiple: true, unique: true },\r\n technician: { multiple: true, unique: true },\r\n djmixer: { multiple: true, unique: true },\r\n mixer: { multiple: true, unique: true },\r\n label: { multiple: true, unique: true },\r\n grouping: { multiple: false },\r\n subtitle: { multiple: true },\r\n discsubtitle: { multiple: false },\r\n totaltracks: { multiple: false },\r\n totaldiscs: { multiple: false },\r\n compilation: { multiple: false },\r\n rating: { multiple: true },\r\n bpm: { multiple: false },\r\n mood: { multiple: false },\r\n media: { multiple: false },\r\n catalognumber: { multiple: true, unique: true },\r\n tvShow: { multiple: false },\r\n tvShowSort: { multiple: false },\r\n tvSeason: { multiple: false },\r\n tvEpisode: { multiple: false },\r\n tvEpisodeId: { multiple: false },\r\n tvNetwork: { multiple: false },\r\n podcast: { multiple: false },\r\n podcasturl: { multiple: false },\r\n releasestatus: { multiple: false },\r\n releasetype: { multiple: true },\r\n releasecountry: { multiple: false },\r\n script: { multiple: false },\r\n language: { multiple: false },\r\n copyright: { multiple: false },\r\n license: { multiple: false },\r\n encodedby: { multiple: false },\r\n encodersettings: { multiple: false },\r\n gapless: { multiple: false },\r\n barcode: { multiple: false },\r\n isrc: { multiple: true },\r\n asin: { multiple: false },\r\n musicbrainz_recordingid: { multiple: false },\r\n musicbrainz_trackid: { multiple: false },\r\n musicbrainz_albumid: { multiple: false },\r\n musicbrainz_artistid: { multiple: true },\r\n musicbrainz_albumartistid: { multiple: true },\r\n musicbrainz_releasegroupid: { multiple: false },\r\n musicbrainz_workid: { multiple: false },\r\n musicbrainz_trmid: { multiple: false },\r\n musicbrainz_discid: { multiple: false },\r\n acoustid_id: { multiple: false },\r\n acoustid_fingerprint: { multiple: false },\r\n musicip_puid: { multiple: false },\r\n musicip_fingerprint: { multiple: false },\r\n website: { multiple: false },\r\n 'performer:instrument': { multiple: true, unique: true },\r\n averageLevel: { multiple: false },\r\n peakLevel: { multiple: false },\r\n notes: { multiple: true, unique: false },\r\n key: { multiple: false },\r\n originalalbum: { multiple: false },\r\n originalartist: { multiple: false },\r\n discogs_artist_id: { multiple: true, unique: true },\r\n discogs_release_id: { multiple: false },\r\n discogs_label_id: { multiple: false },\r\n discogs_master_release_id: { multiple: false },\r\n discogs_votes: { multiple: false },\r\n discogs_rating: { multiple: false },\r\n replaygain_track_peak: { multiple: false },\r\n replaygain_track_gain: { multiple: false },\r\n replaygain_album_peak: { multiple: false },\r\n replaygain_album_gain: { multiple: false },\r\n replaygain_track_minmax: { multiple: false },\r\n replaygain_album_minmax: { multiple: false },\r\n replaygain_undo: { multiple: false },\r\n description: { multiple: true },\r\n longDescription: { multiple: false },\r\n category: { multiple: true },\r\n hdVideo: { multiple: false },\r\n keywords: { multiple: true },\r\n movement: { multiple: false },\r\n movementIndex: { multiple: false },\r\n movementTotal: { multiple: false },\r\n podcastId: { multiple: false },\r\n showMovement: { multiple: false },\r\n stik: { multiple: false }\r\n};\r\n/**\r\n * @param alias Name of common tag\r\n * @returns {boolean|*} true if given alias is mapped as a singleton', otherwise false\r\n */\r\nfunction isSingleton(alias) {\r\n return exports.commonTags.hasOwnProperty(alias) && !exports.commonTags[alias].multiple;\r\n}\r\nexports.isSingleton = isSingleton;\r\n/**\r\n * @param alias Common (generic) tag\r\n * @returns {boolean|*} true if given alias is a singleton or explicitly marked as unique\r\n */\r\nfunction isUnique(alias) {\r\n return !exports.commonTags[alias].multiple || exports.commonTags[alias].unique;\r\n}\r\nexports.isUnique = isUnique;\r\n//# sourceMappingURL=GenericTagTypes.js.map","\"use strict\";\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nexports.joinArtists = exports.MetadataCollector = void 0;\r\nconst type_1 = require(\"../type\");\r\nconst debug_1 = require(\"debug\");\r\nconst GenericTagTypes_1 = require(\"./GenericTagTypes\");\r\nconst CombinedTagMapper_1 = require(\"./CombinedTagMapper\");\r\nconst GenericTagMapper_1 = require(\"./GenericTagMapper\");\r\nconst Util_1 = require(\"./Util\");\r\nconst FileType = require(\"file-type/core\");\r\nconst debug = (0, debug_1.default)('music-metadata:collector');\r\nconst TagPriority = ['matroska', 'APEv2', 'vorbis', 'ID3v2.4', 'ID3v2.3', 'ID3v2.2', 'exif', 'asf', 'iTunes', 'ID3v1'];\r\n/**\r\n * Provided to the parser to uodate the metadata result.\r\n * Responsible for triggering async updates\r\n */\r\nclass MetadataCollector {\r\n constructor(opts) {\r\n this.opts = opts;\r\n this.format = {\r\n tagTypes: [],\r\n trackInfo: []\r\n };\r\n this.native = {};\r\n this.common = {\r\n track: { no: null, of: null },\r\n disk: { no: null, of: null },\r\n movementIndex: {}\r\n };\r\n this.quality = {\r\n warnings: []\r\n };\r\n /**\r\n * Keeps track of origin priority for each mapped id\r\n */\r\n this.commonOrigin = {};\r\n /**\r\n * Maps a tag type to a priority\r\n */\r\n this.originPriority = {};\r\n this.tagMapper = new CombinedTagMapper_1.CombinedTagMapper();\r\n let priority = 1;\r\n for (const tagType of TagPriority) {\r\n this.originPriority[tagType] = priority++;\r\n }\r\n this.originPriority.artificial = 500; // Filled using alternative tags\r\n this.originPriority.id3v1 = 600; // Consider worst due to field length limit\r\n }\r\n /**\r\n * @returns {boolean} true if one or more tags have been found\r\n */\r\n hasAny() {\r\n return Object.keys(this.native).length > 0;\r\n }\r\n addStreamInfo(streamInfo) {\r\n debug(`streamInfo: type=${type_1.TrackType[streamInfo.type]}, codec=${streamInfo.codecName}`);\r\n this.format.trackInfo.push(streamInfo);\r\n }\r\n setFormat(key, value) {\r\n debug(`format: ${key} = ${value}`);\r\n this.format[key] = value; // as any to override readonly\r\n if (this.opts.observer) {\r\n this.opts.observer({ metadata: this, tag: { type: 'format', id: key, value } });\r\n }\r\n }\r\n addTag(tagType, tagId, value) {\r\n debug(`tag ${tagType}.${tagId} = ${value}`);\r\n if (!this.native[tagType]) {\r\n this.format.tagTypes.push(tagType);\r\n this.native[tagType] = [];\r\n }\r\n this.native[tagType].push({ id: tagId, value });\r\n this.toCommon(tagType, tagId, value);\r\n }\r\n addWarning(warning) {\r\n this.quality.warnings.push({ message: warning });\r\n }\r\n postMap(tagType, tag) {\r\n // Common tag (alias) found\r\n // check if we need to do something special with common tag\r\n // if the event has been aliased then we need to clean it before\r\n // it is emitted to the user. e.g. genre (20) -> Electronic\r\n switch (tag.id) {\r\n case 'artist':\r\n if (this.commonOrigin.artist === this.originPriority[tagType]) {\r\n // Assume the artist field is used as artists\r\n return this.postMap('artificial', { id: 'artists', value: tag.value });\r\n }\r\n if (!this.common.artists) {\r\n // Fill artists using artist source\r\n this.setGenericTag('artificial', { id: 'artists', value: tag.value });\r\n }\r\n break;\r\n case 'artists':\r\n if (!this.common.artist || this.commonOrigin.artist === this.originPriority.artificial) {\r\n if (!this.common.artists || this.common.artists.indexOf(tag.value) === -1) {\r\n // Fill artist using artists source\r\n const artists = (this.common.artists || []).concat([tag.value]);\r\n const value = joinArtists(artists);\r\n const artistTag = { id: 'artist', value };\r\n this.setGenericTag('artificial', artistTag);\r\n }\r\n }\r\n break;\r\n case 'picture':\r\n this.postFixPicture(tag.value).then(picture => {\r\n if (picture !== null) {\r\n tag.value = picture;\r\n this.setGenericTag(tagType, tag);\r\n }\r\n });\r\n return;\r\n case 'totaltracks':\r\n this.common.track.of = GenericTagMapper_1.CommonTagMapper.toIntOrNull(tag.value);\r\n return;\r\n case 'totaldiscs':\r\n this.common.disk.of = GenericTagMapper_1.CommonTagMapper.toIntOrNull(tag.value);\r\n return;\r\n case 'movementTotal':\r\n this.common.movementIndex.of = GenericTagMapper_1.CommonTagMapper.toIntOrNull(tag.value);\r\n return;\r\n case 'track':\r\n case 'disk':\r\n case 'movementIndex':\r\n const of = this.common[tag.id].of; // store of value, maybe maybe overwritten\r\n this.common[tag.id] = GenericTagMapper_1.CommonTagMapper.normalizeTrack(tag.value);\r\n this.common[tag.id].of = of != null ? of : this.common[tag.id].of;\r\n return;\r\n case 'bpm':\r\n case 'year':\r\n case 'originalyear':\r\n tag.value = parseInt(tag.value, 10);\r\n break;\r\n case 'date':\r\n // ToDo: be more strict on 'YYYY...'\r\n const year = parseInt(tag.value.substr(0, 4), 10);\r\n if (!isNaN(year)) {\r\n this.common.year = year;\r\n }\r\n break;\r\n case 'discogs_label_id':\r\n case 'discogs_release_id':\r\n case 'discogs_master_release_id':\r\n case 'discogs_artist_id':\r\n case 'discogs_votes':\r\n tag.value = typeof tag.value === 'string' ? parseInt(tag.value, 10) : tag.value;\r\n break;\r\n case 'replaygain_track_gain':\r\n case 'replaygain_track_peak':\r\n case 'replaygain_album_gain':\r\n case 'replaygain_album_peak':\r\n tag.value = (0, Util_1.toRatio)(tag.value);\r\n break;\r\n case 'replaygain_track_minmax':\r\n tag.value = tag.value.split(',').map(v => parseInt(v, 10));\r\n break;\r\n case 'replaygain_undo':\r\n const minMix = tag.value.split(',').map(v => parseInt(v, 10));\r\n tag.value = {\r\n leftChannel: minMix[0],\r\n rightChannel: minMix[1]\r\n };\r\n break;\r\n case 'gapless': // iTunes gap-less flag\r\n case 'compilation':\r\n case 'podcast':\r\n case 'showMovement':\r\n tag.value = tag.value === '1' || tag.value === 1; // boolean\r\n break;\r\n case 'isrc': // Only keep unique values\r\n if (this.common[tag.id] && this.common[tag.id].indexOf(tag.value) !== -1)\r\n return;\r\n break;\r\n default:\r\n // nothing to do\r\n }\r\n if (tag.value !== null) {\r\n this.setGenericTag(tagType, tag);\r\n }\r\n }\r\n /**\r\n * Convert native tags to common tags\r\n * @returns {IAudioMetadata} Native + common tags\r\n */\r\n toCommonMetadata() {\r\n return {\r\n format: this.format,\r\n native: this.native,\r\n quality: this.quality,\r\n common: this.common\r\n };\r\n }\r\n /**\r\n * Fix some common issues with picture object\r\n * @param picture Picture\r\n */\r\n async postFixPicture(picture) {\r\n if (picture.data && picture.data.length > 0) {\r\n if (!picture.format) {\r\n const fileType = await FileType.fromBuffer(picture.data);\r\n if (fileType) {\r\n picture.format = fileType.mime;\r\n }\r\n else {\r\n return null;\r\n }\r\n }\r\n picture.format = picture.format.toLocaleLowerCase();\r\n switch (picture.format) {\r\n case 'image/jpg':\r\n picture.format = 'image/jpeg'; // ToDo: register warning\r\n }\r\n return picture;\r\n }\r\n this.addWarning(`Empty picture tag found`);\r\n return null;\r\n }\r\n /**\r\n * Convert native tag to common tags\r\n */\r\n toCommon(tagType, tagId, value) {\r\n const tag = { id: tagId, value };\r\n const genericTag = this.tagMapper.mapTag(tagType, tag, this);\r\n if (genericTag) {\r\n this.postMap(tagType, genericTag);\r\n }\r\n }\r\n /**\r\n * Set generic tag\r\n */\r\n setGenericTag(tagType, tag) {\r\n debug(`common.${tag.id} = ${tag.value}`);\r\n const prio0 = this.commonOrigin[tag.id] || 1000;\r\n const prio1 = this.originPriority[tagType];\r\n if ((0, GenericTagTypes_1.isSingleton)(tag.id)) {\r\n if (prio1 <= prio0) {\r\n this.common[tag.id] = tag.value;\r\n this.commonOrigin[tag.id] = prio1;\r\n }\r\n else {\r\n return debug(`Ignore native tag (singleton): ${tagType}.${tag.id} = ${tag.value}`);\r\n }\r\n }\r\n else {\r\n if (prio1 === prio0) {\r\n if (!(0, GenericTagTypes_1.isUnique)(tag.id) || this.common[tag.id].indexOf(tag.value) === -1) {\r\n this.common[tag.id].push(tag.value);\r\n }\r\n else {\r\n debug(`Ignore duplicate value: ${tagType}.${tag.id} = ${tag.value}`);\r\n }\r\n // no effect? this.commonOrigin[tag.id] = prio1;\r\n }\r\n else if (prio1 < prio0) {\r\n this.common[tag.id] = [tag.value];\r\n this.commonOrigin[tag.id] = prio1;\r\n }\r\n else {\r\n return debug(`Ignore native tag (list): ${tagType}.${tag.id} = ${tag.value}`);\r\n }\r\n }\r\n if (this.opts.observer) {\r\n this.opts.observer({ metadata: this, tag: { type: 'common', id: tag.id, value: tag.value } });\r\n }\r\n // ToDo: trigger metadata event\r\n }\r\n}\r\nexports.MetadataCollector = MetadataCollector;\r\nfunction joinArtists(artists) {\r\n if (artists.length > 2) {\r\n return artists.slice(0, artists.length - 1).join(', ') + ' & ' + artists[artists.length - 1];\r\n }\r\n return artists.join(' & ');\r\n}\r\nexports.joinArtists = joinArtists;\r\n//# sourceMappingURL=MetadataCollector.js.map","\"use strict\";\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nexports.RandomUint8ArrayReader = void 0;\r\n/**\r\n * Provides abstract Uint8Array access via the IRandomRead interface\r\n */\r\nclass RandomUint8ArrayReader {\r\n constructor(uint8Array) {\r\n this.uint8Array = uint8Array;\r\n this.fileSize = uint8Array.length;\r\n }\r\n /**\r\n * Read from a given position of an abstracted file or buffer.\r\n * @param uint8Array - Uint8Array that the data will be written to.\r\n * @param offset - Offset in the buffer to start writing at.\r\n * @param length - Integer specifying the number of bytes to read.\r\n * @param position - Specifies where to begin reading from in the file.\r\n * @return Promise providing bytes read\r\n */\r\n async randomRead(uint8Array, offset, length, position) {\r\n uint8Array.set(this.uint8Array.subarray(position, position + length), offset);\r\n return length;\r\n }\r\n}\r\nexports.RandomUint8ArrayReader = RandomUint8ArrayReader;\r\n","\"use strict\";\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nexports.toRatio = exports.dbToRatio = exports.ratioToDb = exports.a2hex = exports.isBitSet = exports.getBitAllignedNumber = exports.stripNulls = exports.decodeString = exports.trimRightNull = exports.findZero = exports.getBit = void 0;\r\nfunction getBit(buf, off, bit) {\r\n return (buf[off] & (1 << bit)) !== 0;\r\n}\r\nexports.getBit = getBit;\r\n/**\r\n * Found delimiting zero in uint8Array\r\n * @param uint8Array Uint8Array to find the zero delimiter in\r\n * @param start Offset in uint8Array\r\n * @param end Last position to parse in uint8Array\r\n * @param encoding The string encoding used\r\n * @return Absolute position on uint8Array where zero found\r\n */\r\nfunction findZero(uint8Array, start, end, encoding) {\r\n let i = start;\r\n if (encoding === 'utf16le') {\r\n while (uint8Array[i] !== 0 || uint8Array[i + 1] !== 0) {\r\n if (i >= end)\r\n return end;\r\n i += 2;\r\n }\r\n return i;\r\n }\r\n else {\r\n while (uint8Array[i] !== 0) {\r\n if (i >= end)\r\n return end;\r\n i++;\r\n }\r\n return i;\r\n }\r\n}\r\nexports.findZero = findZero;\r\nfunction trimRightNull(x) {\r\n const pos0 = x.indexOf('\\0');\r\n return pos0 === -1 ? x : x.substr(0, pos0);\r\n}\r\nexports.trimRightNull = trimRightNull;\r\nfunction swapBytes(uint8Array) {\r\n const l = uint8Array.length;\r\n if ((l & 1) !== 0)\r\n throw new Error('Buffer length must be even');\r\n for (let i = 0; i < l; i += 2) {\r\n const a = uint8Array[i];\r\n uint8Array[i] = uint8Array[i + 1];\r\n uint8Array[i + 1] = a;\r\n }\r\n return uint8Array;\r\n}\r\n/**\r\n * Decode string\r\n */\r\nfunction decodeString(uint8Array, encoding) {\r\n // annoying workaround for a double BOM issue\r\n // https://github.com/leetreveil/musicmetadata/issues/84\r\n if (uint8Array[0] === 0xFF && uint8Array[1] === 0xFE) { // little endian\r\n return decodeString(uint8Array.subarray(2), encoding);\r\n }\r\n else if (encoding === 'utf16le' && uint8Array[0] === 0xFE && uint8Array[1] === 0xFF) {\r\n // BOM, indicating big endian decoding\r\n if ((uint8Array.length & 1) !== 0)\r\n throw new Error('Expected even number of octets for 16-bit unicode string');\r\n return decodeString(swapBytes(uint8Array), encoding);\r\n }\r\n return Buffer.from(uint8Array).toString(encoding);\r\n}\r\nexports.decodeString = decodeString;\r\nfunction stripNulls(str) {\r\n str = str.replace(/^\\x00+/g, '');\r\n str = str.replace(/\\x00+$/g, '');\r\n return str;\r\n}\r\nexports.stripNulls = stripNulls;\r\n/**\r\n * Read bit-aligned number start from buffer\r\n * Total offset in bits = byteOffset * 8 + bitOffset\r\n * @param source Byte buffer\r\n * @param byteOffset Starting offset in bytes\r\n * @param bitOffset Starting offset in bits: 0 = lsb\r\n * @param len Length of number in bits\r\n * @return Decoded bit aligned number\r\n */\r\nfunction getBitAllignedNumber(source, byteOffset, bitOffset, len) {\r\n const byteOff = byteOffset + ~~(bitOffset / 8);\r\n const bitOff = bitOffset % 8;\r\n let value = source[byteOff];\r\n value &= 0xff >> bitOff;\r\n const bitsRead = 8 - bitOff;\r\n const bitsLeft = len - bitsRead;\r\n if (bitsLeft < 0) {\r\n value >>= (8 - bitOff - len);\r\n }\r\n else if (bitsLeft > 0) {\r\n value <<= bitsLeft;\r\n value |= getBitAllignedNumber(source, byteOffset, bitOffset + bitsRead, bitsLeft);\r\n }\r\n return value;\r\n}\r\nexports.getBitAllignedNumber = getBitAllignedNumber;\r\n/**\r\n * Read bit-aligned number start from buffer\r\n * Total offset in bits = byteOffset * 8 + bitOffset\r\n * @param source Byte Uint8Array\r\n * @param byteOffset Starting offset in bytes\r\n * @param bitOffset Starting offset in bits: 0 = most significant bit, 7 is the least significant bit\r\n * @return True if bit is set\r\n */\r\nfunction isBitSet(source, byteOffset, bitOffset) {\r\n return getBitAllignedNumber(source, byteOffset, bitOffset, 1) === 1;\r\n}\r\nexports.isBitSet = isBitSet;\r\nfunction a2hex(str) {\r\n const arr = [];\r\n for (let i = 0, l = str.length; i < l; i++) {\r\n const hex = Number(str.charCodeAt(i)).toString(16);\r\n arr.push(hex.length === 1 ? '0' + hex : hex);\r\n }\r\n return arr.join(' ');\r\n}\r\nexports.a2hex = a2hex;\r\n/**\r\n * Convert power ratio to DB\r\n * ratio: [0..1]\r\n */\r\nfunction ratioToDb(ratio) {\r\n return 10 * Math.log10(ratio);\r\n}\r\nexports.ratioToDb = ratioToDb;\r\n/**\r\n * Convert dB to ratio\r\n * db Decibels\r\n */\r\nfunction dbToRatio(dB) {\r\n return Math.pow(10, dB / 10);\r\n}\r\nexports.dbToRatio = dbToRatio;\r\n/**\r\n * Convert replay gain to ratio and Decibel\r\n * @param value string holding a ratio like '0.034' or '-7.54 dB'\r\n */\r\nfunction toRatio(value) {\r\n const ps = value.split(' ').map(p => p.trim().toLowerCase());\r\n // @ts-ignore\r\n if (ps.length >= 1) {\r\n const v = parseFloat(ps[0]);\r\n return ps.length === 2 && ps[1] === 'db' ? {\r\n dB: v,\r\n ratio: dbToRatio(v)\r\n } : {\r\n dB: ratioToDb(v),\r\n ratio: v\r\n };\r\n }\r\n}\r\nexports.toRatio = toRatio;\r\n//# sourceMappingURL=Util.js.map","\"use strict\";\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nexports.scanAppendingHeaders = exports.selectCover = exports.ratingToStars = exports.orderTags = exports.parseFromTokenizer = exports.parseBuffer = exports.parseStream = void 0;\r\nconst strtok3 = require(\"strtok3/lib/core\");\r\nconst ParserFactory_1 = require(\"./ParserFactory\");\r\nconst RandomUint8ArrayReader_1 = require(\"./common/RandomUint8ArrayReader\");\r\nconst APEv2Parser_1 = require(\"./apev2/APEv2Parser\");\r\nconst ID3v1Parser_1 = require(\"./id3v1/ID3v1Parser\");\r\nconst Lyrics3_1 = require(\"./lyrics3/Lyrics3\");\r\n/**\r\n * Parse audio from Node Stream.Readable\r\n * @param stream - Stream to read the audio track from\r\n * @param options - Parsing options\r\n * @param fileInfo - File information object or MIME-type string\r\n * @returns Metadata\r\n */\r\nfunction parseStream(stream, fileInfo, options = {}) {\r\n return parseFromTokenizer(strtok3.fromStream(stream, typeof fileInfo === 'string' ? { mimeType: fileInfo } : fileInfo), options);\r\n}\r\nexports.parseStream = parseStream;\r\n/**\r\n * Parse audio from Node Buffer\r\n * @param uint8Array - Uint8Array holding audio data\r\n * @param fileInfo - File information object or MIME-type string\r\n * @param options - Parsing options\r\n * @returns Metadata\r\n * Ref: https://github.com/Borewit/strtok3/blob/e6938c81ff685074d5eb3064a11c0b03ca934c1d/src/index.ts#L15\r\n */\r\nasync function parseBuffer(uint8Array, fileInfo, options = {}) {\r\n const bufferReader = new RandomUint8ArrayReader_1.RandomUint8ArrayReader(uint8Array);\r\n await scanAppendingHeaders(bufferReader, options);\r\n const tokenizer = strtok3.fromBuffer(uint8Array, typeof fileInfo === 'string' ? { mimeType: fileInfo } : fileInfo);\r\n return parseFromTokenizer(tokenizer, options);\r\n}\r\nexports.parseBuffer = parseBuffer;\r\n/**\r\n * Parse audio from ITokenizer source\r\n * @param tokenizer - Audio source implementing the tokenizer interface\r\n * @param options - Parsing options\r\n * @returns Metadata\r\n */\r\nfunction parseFromTokenizer(tokenizer, options) {\r\n return ParserFactory_1.ParserFactory.parseOnContentType(tokenizer, options);\r\n}\r\nexports.parseFromTokenizer = parseFromTokenizer;\r\n/**\r\n * Create a dictionary ordered by their tag id (key)\r\n * @param nativeTags list of tags\r\n * @returns tags indexed by id\r\n */\r\nfunction orderTags(nativeTags) {\r\n const tags = {};\r\n for (const tag of nativeTags) {\r\n (tags[tag.id] = (tags[tag.id] || [])).push(tag.value);\r\n }\r\n return tags;\r\n}\r\nexports.orderTags = orderTags;\r\n/**\r\n * Convert rating to 1-5 star rating\r\n * @param rating: Normalized rating [0..1] (common.rating[n].rating)\r\n * @returns Number of stars: 1, 2, 3, 4 or 5 stars\r\n */\r\nfunction ratingToStars(rating) {\r\n return rating === undefined ? 0 : 1 + Math.round(rating * 4);\r\n}\r\nexports.ratingToStars = ratingToStars;\r\n/**\r\n * Select most likely cover image.\r\n * @param pictures Usually metadata.common.picture\r\n * @return Cover image, if any, otherwise null\r\n */\r\nfunction selectCover(pictures) {\r\n return pictures ? pictures.reduce((acc, cur) => {\r\n if (cur.name && cur.name.toLowerCase() in ['front', 'cover', 'cover (front)'])\r\n return cur;\r\n return acc;\r\n }) : null;\r\n}\r\nexports.selectCover = selectCover;\r\nasync function scanAppendingHeaders(randomReader, options = {}) {\r\n let apeOffset = randomReader.fileSize;\r\n if (await (0, ID3v1Parser_1.hasID3v1Header)(randomReader)) {\r\n apeOffset -= 128;\r\n const lyricsLen = await (0, Lyrics3_1.getLyricsHeaderLength)(randomReader);\r\n apeOffset -= lyricsLen;\r\n }\r\n options.apeHeader = await APEv2Parser_1.APEv2Parser.findApeFooterOffset(randomReader, apeOffset);\r\n}\r\nexports.scanAppendingHeaders = scanAppendingHeaders;\r\n","\"use strict\";\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nexports.DsdiffParser = void 0;\r\nconst Token = require(\"token-types\");\r\nconst debug_1 = require(\"debug\");\r\nconst strtok3 = require(\"strtok3/lib/core\");\r\nconst FourCC_1 = require(\"../common/FourCC\");\r\nconst BasicParser_1 = require(\"../common/BasicParser\");\r\nconst ID3v2Parser_1 = require(\"../id3v2/ID3v2Parser\");\r\nconst DsdiffToken_1 = require(\"./DsdiffToken\");\r\nconst debug = (0, debug_1.default)('music-metadata:parser:aiff');\r\n/**\r\n * DSDIFF - Direct Stream Digital Interchange File Format (Phillips)\r\n *\r\n * Ref:\r\n * - http://www.sonicstudio.com/pdf/dsd/DSDIFF_1.5_Spec.pdf\r\n */\r\nclass DsdiffParser extends BasicParser_1.BasicParser {\r\n async parse() {\r\n const header = await this.tokenizer.readToken(DsdiffToken_1.ChunkHeader64);\r\n if (header.chunkID !== 'FRM8')\r\n throw new Error('Unexpected chunk-ID');\r\n const type = (await this.tokenizer.readToken(FourCC_1.FourCcToken)).trim();\r\n switch (type) {\r\n case 'DSD':\r\n this.metadata.setFormat('container', `DSDIFF/${type}`);\r\n this.metadata.setFormat('lossless', true);\r\n return this.readFmt8Chunks(header.chunkSize - BigInt(FourCC_1.FourCcToken.len));\r\n default:\r\n throw Error(`Unsupported DSDIFF type: ${type}`);\r\n }\r\n }\r\n async readFmt8Chunks(remainingSize) {\r\n while (remainingSize >= DsdiffToken_1.ChunkHeader64.len) {\r\n const chunkHeader = await this.tokenizer.readToken(DsdiffToken_1.ChunkHeader64);\r\n // If the data is an odd number of bytes in length, a pad byte must be added at the end\r\n debug(`Chunk id=${chunkHeader.chunkID}`);\r\n await this.readData(chunkHeader);\r\n remainingSize -= (BigInt(DsdiffToken_1.ChunkHeader64.len) + chunkHeader.chunkSize);\r\n }\r\n }\r\n async readData(header) {\r\n debug(`Reading data of chunk[ID=${header.chunkID}, size=${header.chunkSize}]`);\r\n const p0 = this.tokenizer.position;\r\n switch (header.chunkID.trim()) {\r\n case 'FVER': // 3.1 FORMAT VERSION CHUNK\r\n const version = await this.tokenizer.readToken(Token.UINT32_LE);\r\n debug(`DSDIFF version=${version}`);\r\n break;\r\n case 'PROP': // 3.2 PROPERTY CHUNK\r\n const propType = await this.tokenizer.readToken(FourCC_1.FourCcToken);\r\n if (propType !== 'SND ')\r\n throw new Error('Unexpected PROP-chunk ID');\r\n await this.handleSoundPropertyChunks(header.chunkSize - BigInt(FourCC_1.FourCcToken.len));\r\n break;\r\n case 'ID3': // Unofficial ID3 tag support\r\n const id3_data = await this.tokenizer.readToken(new Token.Uint8ArrayType(Number(header.chunkSize)));\r\n const rst = strtok3.fromBuffer(id3_data);\r\n await new ID3v2Parser_1.ID3v2Parser().parse(this.metadata, rst, this.options);\r\n break;\r\n default:\r\n debug(`Ignore chunk[ID=${header.chunkID}, size=${header.chunkSize}]`);\r\n break;\r\n case 'DSD':\r\n this.metadata.setFormat('numberOfSamples', Number(header.chunkSize * BigInt(8) / BigInt(this.metadata.format.numberOfChannels)));\r\n this.metadata.setFormat('duration', this.metadata.format.numberOfSamples / this.metadata.format.sampleRate);\r\n break;\r\n }\r\n const remaining = header.chunkSize - BigInt(this.tokenizer.position - p0);\r\n if (remaining > 0) {\r\n debug(`After Parsing chunk, remaining ${remaining} bytes`);\r\n await this.tokenizer.ignore(Number(remaining));\r\n }\r\n }\r\n async handleSoundPropertyChunks(remainingSize) {\r\n debug(`Parsing sound-property-chunks, remainingSize=${remainingSize}`);\r\n while (remainingSize > 0) {\r\n const sndPropHeader = await this.tokenizer.readToken(DsdiffToken_1.ChunkHeader64);\r\n debug(`Sound-property-chunk[ID=${sndPropHeader.chunkID}, size=${sndPropHeader.chunkSize}]`);\r\n const p0 = this.tokenizer.position;\r\n switch (sndPropHeader.chunkID.trim()) {\r\n case 'FS': // 3.2.1 Sample Rate Chunk\r\n const sampleRate = await this.tokenizer.readToken(Token.UINT32_BE);\r\n this.metadata.setFormat('sampleRate', sampleRate);\r\n break;\r\n case 'CHNL': // 3.2.2 Channels Chunk\r\n const numChannels = await this.tokenizer.readToken(Token.UINT16_BE);\r\n this.metadata.setFormat('numberOfChannels', numChannels);\r\n await this.handleChannelChunks(sndPropHeader.chunkSize - BigInt(Token.UINT16_BE.len));\r\n break;\r\n case 'CMPR': // 3.2.3 Compression Type Chunk\r\n const compressionIdCode = (await this.tokenizer.readToken(FourCC_1.FourCcToken)).trim();\r\n const count = await this.tokenizer.readToken(Token.UINT8);\r\n const compressionName = await this.tokenizer.readToken(new Token.StringType(count, 'ascii'));\r\n if (compressionIdCode === 'DSD') {\r\n this.metadata.setFormat('lossless', true);\r\n this.metadata.setFormat('bitsPerSample', 1);\r\n }\r\n this.metadata.setFormat('codec', `${compressionIdCode} (${compressionName})`);\r\n break;\r\n case 'ABSS': // 3.2.4 Absolute Start Time Chunk\r\n const hours = await this.tokenizer.readToken(Token.UINT16_BE);\r\n const minutes = await this.tokenizer.readToken(Token.UINT8);\r\n const seconds = await this.tokenizer.readToken(Token.UINT8);\r\n const samples = await this.tokenizer.readToken(Token.UINT32_BE);\r\n debug(`ABSS ${hours}:${minutes}:${seconds}.${samples}`);\r\n break;\r\n case 'LSCO': // 3.2.5 Loudspeaker Configuration Chunk\r\n const lsConfig = await this.tokenizer.readToken(Token.UINT16_BE);\r\n debug(`LSCO lsConfig=${lsConfig}`);\r\n break;\r\n case 'COMT':\r\n default:\r\n debug(`Unknown sound-property-chunk[ID=${sndPropHeader.chunkID}, size=${sndPropHeader.chunkSize}]`);\r\n await this.tokenizer.ignore(Number(sndPropHeader.chunkSize));\r\n }\r\n const remaining = sndPropHeader.chunkSize - BigInt(this.tokenizer.position - p0);\r\n if (remaining > 0) {\r\n debug(`After Parsing sound-property-chunk ${sndPropHeader.chunkSize}, remaining ${remaining} bytes`);\r\n await this.tokenizer.ignore(Number(remaining));\r\n }\r\n remainingSize -= BigInt(DsdiffToken_1.ChunkHeader64.len) + sndPropHeader.chunkSize;\r\n debug(`Parsing sound-property-chunks, remainingSize=${remainingSize}`);\r\n }\r\n if (this.metadata.format.lossless && this.metadata.format.sampleRate && this.metadata.format.numberOfChannels && this.metadata.format.bitsPerSample) {\r\n const bitrate = this.metadata.format.sampleRate * this.metadata.format.numberOfChannels * this.metadata.format.bitsPerSample;\r\n this.metadata.setFormat('bitrate', bitrate);\r\n }\r\n }\r\n async handleChannelChunks(remainingSize) {\r\n debug(`Parsing channel-chunks, remainingSize=${remainingSize}`);\r\n const channels = [];\r\n while (remainingSize >= FourCC_1.FourCcToken.len) {\r\n const channelId = await this.tokenizer.readToken(FourCC_1.FourCcToken);\r\n debug(`Channel[ID=${channelId}]`);\r\n channels.push(channelId);\r\n remainingSize -= BigInt(FourCC_1.FourCcToken.len);\r\n }\r\n debug(`Channels: ${channels.join(', ')}`);\r\n return channels;\r\n }\r\n}\r\nexports.DsdiffParser = DsdiffParser;\r\n","\"use strict\";\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nexports.ChunkHeader64 = void 0;\r\nconst Token = require(\"token-types\");\r\nconst FourCC_1 = require(\"../common/FourCC\");\r\n/**\r\n * DSDIFF chunk header\r\n * The data-size encoding is deviating from EA-IFF 85\r\n * Ref: http://www.sonicstudio.com/pdf/dsd/DSDIFF_1.5_Spec.pdf\r\n */\r\nexports.ChunkHeader64 = {\r\n len: 12,\r\n get: (buf, off) => {\r\n return {\r\n // Group-ID\r\n chunkID: FourCC_1.FourCcToken.get(buf, off),\r\n // Size\r\n chunkSize: Token.INT64_BE.get(buf, off + 4)\r\n };\r\n }\r\n};\r\n","\"use strict\";\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nexports.FormatChunk = exports.ChannelType = exports.DsdChunk = exports.ChunkHeader = void 0;\r\nconst Token = require(\"token-types\");\r\nconst FourCC_1 = require(\"../common/FourCC\");\r\n/**\r\n * Common chunk DSD header: the 'chunk name (Four-CC)' & chunk size\r\n */\r\nexports.ChunkHeader = {\r\n len: 12,\r\n get: (buf, off) => {\r\n return { id: FourCC_1.FourCcToken.get(buf, off), size: Token.UINT64_LE.get(buf, off + 4) };\r\n }\r\n};\r\n/**\r\n * Common chunk DSD header: the 'chunk name (Four-CC)' & chunk size\r\n */\r\nexports.DsdChunk = {\r\n len: 16,\r\n get: (buf, off) => {\r\n return {\r\n fileSize: Token.INT64_LE.get(buf, off),\r\n metadataPointer: Token.INT64_LE.get(buf, off + 8)\r\n };\r\n }\r\n};\r\nvar ChannelType;\r\n(function (ChannelType) {\r\n ChannelType[ChannelType[\"mono\"] = 1] = \"mono\";\r\n ChannelType[ChannelType[\"stereo\"] = 2] = \"stereo\";\r\n ChannelType[ChannelType[\"channels\"] = 3] = \"channels\";\r\n ChannelType[ChannelType[\"quad\"] = 4] = \"quad\";\r\n ChannelType[ChannelType[\"4 channels\"] = 5] = \"4 channels\";\r\n ChannelType[ChannelType[\"5 channels\"] = 6] = \"5 channels\";\r\n ChannelType[ChannelType[\"5.1 channels\"] = 7] = \"5.1 channels\";\r\n})(ChannelType = exports.ChannelType || (exports.ChannelType = {}));\r\n/**\r\n * Common chunk DSD header: the 'chunk name (Four-CC)' & chunk size\r\n */\r\nexports.FormatChunk = {\r\n len: 40,\r\n get: (buf, off) => {\r\n return {\r\n formatVersion: Token.INT32_LE.get(buf, off),\r\n formatID: Token.INT32_LE.get(buf, off + 4),\r\n channelType: Token.INT32_LE.get(buf, off + 8),\r\n channelNum: Token.INT32_LE.get(buf, off + 12),\r\n samplingFrequency: Token.INT32_LE.get(buf, off + 16),\r\n bitsPerSample: Token.INT32_LE.get(buf, off + 20),\r\n sampleCount: Token.INT64_LE.get(buf, off + 24),\r\n blockSizePerChannel: Token.INT32_LE.get(buf, off + 32)\r\n };\r\n }\r\n};\r\n","\"use strict\";\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nexports.DsfParser = void 0;\r\nconst debug_1 = require(\"debug\");\r\nconst AbstractID3Parser_1 = require(\"../id3v2/AbstractID3Parser\");\r\nconst DsfChunk_1 = require(\"./DsfChunk\");\r\nconst ID3v2Parser_1 = require(\"../id3v2/ID3v2Parser\");\r\nconst debug = (0, debug_1.default)('music-metadata:parser:DSF');\r\n/**\r\n * DSF (dsd stream file) File Parser\r\n * Ref: https://dsd-guide.com/sites/default/files/white-papers/DSFFileFormatSpec_E.pdf\r\n */\r\nclass DsfParser extends AbstractID3Parser_1.AbstractID3Parser {\r\n async postId3v2Parse() {\r\n const p0 = this.tokenizer.position; // mark start position, normally 0\r\n const chunkHeader = await this.tokenizer.readToken(DsfChunk_1.ChunkHeader);\r\n if (chunkHeader.id !== 'DSD ')\r\n throw new Error('Invalid chunk signature');\r\n this.metadata.setFormat('container', 'DSF');\r\n this.metadata.setFormat('lossless', true);\r\n const dsdChunk = await this.tokenizer.readToken(DsfChunk_1.DsdChunk);\r\n if (dsdChunk.metadataPointer === BigInt(0)) {\r\n debug(`No ID3v2 tag present`);\r\n }\r\n else {\r\n debug(`expect ID3v2 at offset=${dsdChunk.metadataPointer}`);\r\n await this.parseChunks(dsdChunk.fileSize - chunkHeader.size);\r\n // Jump to ID3 header\r\n await this.tokenizer.ignore(Number(dsdChunk.metadataPointer) - this.tokenizer.position - p0);\r\n return new ID3v2Parser_1.ID3v2Parser().parse(this.metadata, this.tokenizer, this.options);\r\n }\r\n }\r\n async parseChunks(bytesRemaining) {\r\n while (bytesRemaining >= DsfChunk_1.ChunkHeader.len) {\r\n const chunkHeader = await this.tokenizer.readToken(DsfChunk_1.ChunkHeader);\r\n debug(`Parsing chunk name=${chunkHeader.id} size=${chunkHeader.size}`);\r\n switch (chunkHeader.id) {\r\n case 'fmt ':\r\n const formatChunk = await this.tokenizer.readToken(DsfChunk_1.FormatChunk);\r\n this.metadata.setFormat('numberOfChannels', formatChunk.channelNum);\r\n this.metadata.setFormat('sampleRate', formatChunk.samplingFrequency);\r\n this.metadata.setFormat('bitsPerSample', formatChunk.bitsPerSample);\r\n this.metadata.setFormat('numberOfSamples', formatChunk.sampleCount);\r\n this.metadata.setFormat('duration', Number(formatChunk.sampleCount) / formatChunk.samplingFrequency);\r\n const bitrate = formatChunk.bitsPerSample * formatChunk.samplingFrequency * formatChunk.channelNum;\r\n this.metadata.setFormat('bitrate', bitrate);\r\n return; // We got what we want, stop further processing of chunks\r\n default:\r\n this.tokenizer.ignore(Number(chunkHeader.size) - DsfChunk_1.ChunkHeader.len);\r\n break;\r\n }\r\n bytesRemaining -= chunkHeader.size;\r\n }\r\n }\r\n}\r\nexports.DsfParser = DsfParser;\r\n","\"use strict\";\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nexports.FlacParser = void 0;\r\nconst token_types_1 = require(\"token-types\");\r\nconst debug_1 = require(\"debug\");\r\nconst util = require(\"../common/Util\");\r\nconst Vorbis_1 = require(\"../ogg/vorbis/Vorbis\");\r\nconst AbstractID3Parser_1 = require(\"../id3v2/AbstractID3Parser\");\r\nconst FourCC_1 = require(\"../common/FourCC\");\r\nconst VorbisParser_1 = require(\"../ogg/vorbis/VorbisParser\");\r\nconst VorbisDecoder_1 = require(\"../ogg/vorbis/VorbisDecoder\");\r\nconst debug = (0, debug_1.default)('music-metadata:parser:FLAC');\r\n/**\r\n * FLAC supports up to 128 kinds of metadata blocks; currently the following are defined:\r\n * ref: https://xiph.org/flac/format.html#metadata_block\r\n */\r\nvar BlockType;\r\n(function (BlockType) {\r\n BlockType[BlockType[\"STREAMINFO\"] = 0] = \"STREAMINFO\";\r\n BlockType[BlockType[\"PADDING\"] = 1] = \"PADDING\";\r\n BlockType[BlockType[\"APPLICATION\"] = 2] = \"APPLICATION\";\r\n BlockType[BlockType[\"SEEKTABLE\"] = 3] = \"SEEKTABLE\";\r\n BlockType[BlockType[\"VORBIS_COMMENT\"] = 4] = \"VORBIS_COMMENT\";\r\n BlockType[BlockType[\"CUESHEET\"] = 5] = \"CUESHEET\";\r\n BlockType[BlockType[\"PICTURE\"] = 6] = \"PICTURE\";\r\n})(BlockType || (BlockType = {}));\r\nclass FlacParser extends AbstractID3Parser_1.AbstractID3Parser {\r\n constructor() {\r\n super(...arguments);\r\n this.padding = 0;\r\n }\r\n /**\r\n * Initialize parser with output (metadata), input (tokenizer) & parsing options (options).\r\n * @param {INativeMetadataCollector} metadata Output\r\n * @param {ITokenizer} tokenizer Input\r\n * @param {IOptions} options Parsing options\r\n */\r\n init(metadata, tokenizer, options) {\r\n super.init(metadata, tokenizer, options);\r\n this.vorbisParser = new VorbisParser_1.VorbisParser(metadata, options);\r\n return this;\r\n }\r\n async postId3v2Parse() {\r\n const fourCC = await this.tokenizer.readToken(FourCC_1.FourCcToken);\r\n if (fourCC.toString() !== 'fLaC') {\r\n throw new Error('Invalid FLAC preamble');\r\n }\r\n let blockHeader;\r\n do {\r\n // Read block header\r\n blockHeader = await this.tokenizer.readToken(Metadata.BlockHeader);\r\n // Parse block data\r\n await this.parseDataBlock(blockHeader);\r\n } while (!blockHeader.lastBlock);\r\n if (this.tokenizer.fileInfo.size && this.metadata.format.duration) {\r\n const dataSize = this.tokenizer.fileInfo.size - this.tokenizer.position;\r\n this.metadata.setFormat('bitrate', 8 * dataSize / this.metadata.format.duration);\r\n }\r\n }\r\n parseDataBlock(blockHeader) {\r\n debug(`blockHeader type=${blockHeader.type}, length=${blockHeader.length}`);\r\n switch (blockHeader.type) {\r\n case BlockType.STREAMINFO:\r\n return this.parseBlockStreamInfo(blockHeader.length);\r\n case BlockType.PADDING:\r\n this.padding += blockHeader.length;\r\n break;\r\n case BlockType.APPLICATION:\r\n break;\r\n case BlockType.SEEKTABLE:\r\n break;\r\n case BlockType.VORBIS_COMMENT:\r\n return this.parseComment(blockHeader.length);\r\n case BlockType.CUESHEET:\r\n break;\r\n case BlockType.PICTURE:\r\n return this.parsePicture(blockHeader.length).then();\r\n default:\r\n this.metadata.addWarning('Unknown block type: ' + blockHeader.type);\r\n }\r\n // Ignore data block\r\n return this.tokenizer.ignore(blockHeader.length).then();\r\n }\r\n /**\r\n * Parse STREAMINFO\r\n */\r\n async parseBlockStreamInfo(dataLen) {\r\n if (dataLen !== Metadata.BlockStreamInfo.len)\r\n throw new Error('Unexpected block-stream-info length');\r\n const streamInfo = await this.tokenizer.readToken(Metadata.BlockStreamInfo);\r\n this.metadata.setFormat('container', 'FLAC');\r\n this.metadata.setFormat('codec', 'FLAC');\r\n this.metadata.setFormat('lossless', true);\r\n this.metadata.setFormat('numberOfChannels', streamInfo.channels);\r\n this.metadata.setFormat('bitsPerSample', streamInfo.bitsPerSample);\r\n this.metadata.setFormat('sampleRate', streamInfo.sampleRate);\r\n if (streamInfo.totalSamples > 0) {\r\n this.metadata.setFormat('duration', streamInfo.totalSamples / streamInfo.sampleRate);\r\n }\r\n }\r\n /**\r\n * Parse VORBIS_COMMENT\r\n * Ref: https://www.xiph.org/vorbis/doc/Vorbis_I_spec.html#x1-640004.2.3\r\n */\r\n async parseComment(dataLen) {\r\n const data = await this.tokenizer.readToken(new token_types_1.Uint8ArrayType(dataLen));\r\n const decoder = new VorbisDecoder_1.VorbisDecoder(data, 0);\r\n decoder.readStringUtf8(); // vendor (skip)\r\n const commentListLength = decoder.readInt32();\r\n for (let i = 0; i < commentListLength; i++) {\r\n const tag = decoder.parseUserComment();\r\n this.vorbisParser.addTag(tag.key, tag.value);\r\n }\r\n }\r\n async parsePicture(dataLen) {\r\n if (this.options.skipCovers) {\r\n return this.tokenizer.ignore(dataLen);\r\n }\r\n else {\r\n const picture = await this.tokenizer.readToken(new Vorbis_1.VorbisPictureToken(dataLen));\r\n this.vorbisParser.addTag('METADATA_BLOCK_PICTURE', picture);\r\n }\r\n }\r\n}\r\nexports.FlacParser = FlacParser;\r\nclass Metadata {\r\n}\r\nMetadata.BlockHeader = {\r\n len: 4,\r\n get: (buf, off) => {\r\n return {\r\n lastBlock: util.getBit(buf, off, 7),\r\n type: util.getBitAllignedNumber(buf, off, 1, 7),\r\n length: token_types_1.UINT24_BE.get(buf, off + 1)\r\n };\r\n }\r\n};\r\n/**\r\n * METADATA_BLOCK_DATA\r\n * Ref: https://xiph.org/flac/format.html#metadata_block_streaminfo\r\n */\r\nMetadata.BlockStreamInfo = {\r\n len: 34,\r\n get: (buf, off) => {\r\n return {\r\n // The minimum block size (in samples) used in the stream.\r\n minimumBlockSize: token_types_1.UINT16_BE.get(buf, off),\r\n // The maximum block size (in samples) used in the stream.\r\n // (Minimum blocksize == maximum blocksize) implies a fixed-blocksize stream.\r\n maximumBlockSize: token_types_1.UINT16_BE.get(buf, off + 2) / 1000,\r\n // The minimum frame size (in bytes) used in the stream.\r\n // May be 0 to imply the value is not known.\r\n minimumFrameSize: token_types_1.UINT24_BE.get(buf, off + 4),\r\n // The maximum frame size (in bytes) used in the stream.\r\n // May be 0 to imply the value is not known.\r\n maximumFrameSize: token_types_1.UINT24_BE.get(buf, off + 7),\r\n // Sample rate in Hz. Though 20 bits are available,\r\n // the maximum sample rate is limited by the structure of frame headers to 655350Hz.\r\n // Also, a value of 0 is invalid.\r\n sampleRate: token_types_1.UINT24_BE.get(buf, off + 10) >> 4,\r\n // probably slower: sampleRate: common.getBitAllignedNumber(buf, off + 10, 0, 20),\r\n // (number of channels)-1. FLAC supports from 1 to 8 channels\r\n channels: util.getBitAllignedNumber(buf, off + 12, 4, 3) + 1,\r\n // bits per sample)-1.\r\n // FLAC supports from 4 to 32 bits per sample. Currently the reference encoder and decoders only support up to 24 bits per sample.\r\n bitsPerSample: util.getBitAllignedNumber(buf, off + 12, 7, 5) + 1,\r\n // Total samples in stream.\r\n // 'Samples' means inter-channel sample, i.e. one second of 44.1Khz audio will have 44100 samples regardless of the number of channels.\r\n // A value of zero here means the number of total samples is unknown.\r\n totalSamples: util.getBitAllignedNumber(buf, off + 13, 4, 36),\r\n // the MD5 hash of the file (see notes for usage... it's a littly tricky)\r\n fileMD5: new token_types_1.Uint8ArrayType(16).get(buf, off + 18)\r\n };\r\n }\r\n};\r\n","\"use strict\";\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nexports.hasID3v1Header = exports.ID3v1Parser = exports.Genres = void 0;\r\nconst debug_1 = require(\"debug\");\r\nconst token_types_1 = require(\"token-types\");\r\nconst util = require(\"../common/Util\");\r\nconst BasicParser_1 = require(\"../common/BasicParser\");\r\nconst APEv2Parser_1 = require(\"../apev2/APEv2Parser\");\r\nconst debug = (0, debug_1.default)('music-metadata:parser:ID3v1');\r\n/**\r\n * ID3v1 Genre mappings\r\n * Ref: https://de.wikipedia.org/wiki/Liste_der_ID3v1-Genres\r\n */\r\nexports.Genres = [\r\n 'Blues', 'Classic Rock', 'Country', 'Dance', 'Disco', 'Funk', 'Grunge', 'Hip-Hop',\r\n 'Jazz', 'Metal', 'New Age', 'Oldies', 'Other', 'Pop', 'R&B', 'Rap', 'Reggae', 'Rock',\r\n 'Techno', 'Industrial', 'Alternative', 'Ska', 'Death Metal', 'Pranks', 'Soundtrack',\r\n 'Euro-Techno', 'Ambient', 'Trip-Hop', 'Vocal', 'Jazz+Funk', 'Fusion', 'Trance',\r\n 'Classical', 'Instrumental', 'Acid', 'House', 'Game', 'Sound Clip', 'Gospel', 'Noise',\r\n 'Alt. Rock', 'Bass', 'Soul', 'Punk', 'Space', 'Meditative', 'Instrumental Pop',\r\n 'Instrumental Rock', 'Ethnic', 'Gothic', 'Darkwave', 'Techno-Industrial',\r\n 'Electronic', 'Pop-Folk', 'Eurodance', 'Dream', 'Southern Rock', 'Comedy', 'Cult',\r\n 'Gangsta Rap', 'Top 40', 'Christian Rap', 'Pop/Funk', 'Jungle', 'Native American',\r\n 'Cabaret', 'New Wave', 'Psychedelic', 'Rave', 'Showtunes', 'Trailer', 'Lo-Fi', 'Tribal',\r\n 'Acid Punk', 'Acid Jazz', 'Polka', 'Retro', 'Musical', 'Rock & Roll', 'Hard Rock',\r\n 'Folk', 'Folk/Rock', 'National Folk', 'Swing', 'Fast-Fusion', 'Bebob', 'Latin', 'Revival',\r\n 'Celtic', 'Bluegrass', 'Avantgarde', 'Gothic Rock', 'Progressive Rock', 'Psychedelic Rock',\r\n 'Symphonic Rock', 'Slow Rock', 'Big Band', 'Chorus', 'Easy Listening', 'Acoustic', 'Humour',\r\n 'Speech', 'Chanson', 'Opera', 'Chamber Music', 'Sonata', 'Symphony', 'Booty Bass', 'Primus',\r\n 'Porn Groove', 'Satire', 'Slow Jam', 'Club', 'Tango', 'Samba', 'Folklore',\r\n 'Ballad', 'Power Ballad', 'Rhythmic Soul', 'Freestyle', 'Duet', 'Punk Rock', 'Drum Solo',\r\n 'A Cappella', 'Euro-House', 'Dance Hall', 'Goa', 'Drum & Bass', 'Club-House',\r\n 'Hardcore', 'Terror', 'Indie', 'BritPop', 'Negerpunk', 'Polsk Punk', 'Beat',\r\n 'Christian Gangsta Rap', 'Heavy Metal', 'Black Metal', 'Crossover', 'Contemporary Christian',\r\n 'Christian Rock', 'Merengue', 'Salsa', 'Thrash Metal', 'Anime', 'JPop', 'Synthpop',\r\n 'Abstract', 'Art Rock', 'Baroque', 'Bhangra', 'Big Beat', 'Breakbeat', 'Chillout',\r\n 'Downtempo', 'Dub', 'EBM', 'Eclectic', 'Electro', 'Electroclash', 'Emo', 'Experimental',\r\n 'Garage', 'Global', 'IDM', 'Illbient', 'Industro-Goth', 'Jam Band', 'Krautrock',\r\n 'Leftfield', 'Lounge', 'Math Rock', 'New Romantic', 'Nu-Breakz', 'Post-Punk', 'Post-Rock',\r\n 'Psytrance', 'Shoegaze', 'Space Rock', 'Trop Rock', 'World Music', 'Neoclassical', 'Audiobook',\r\n 'Audio Theatre', 'Neue Deutsche Welle', 'Podcast', 'Indie Rock', 'G-Funk', 'Dubstep',\r\n 'Garage Rock', 'Psybient'\r\n];\r\n/**\r\n * Spec: http://id3.org/ID3v1\r\n * Wiki: https://en.wikipedia.org/wiki/ID3\r\n */\r\nconst Iid3v1Token = {\r\n len: 128,\r\n /**\r\n * @param buf Buffer possibly holding the 128 bytes ID3v1.1 metadata header\r\n * @param off Offset in buffer in bytes\r\n * @returns ID3v1.1 header if first 3 bytes equals 'TAG', otherwise null is returned\r\n */\r\n get: (buf, off) => {\r\n const header = new Id3v1StringType(3).get(buf, off);\r\n return header === 'TAG' ? {\r\n header,\r\n title: new Id3v1StringType(30).get(buf, off + 3),\r\n artist: new Id3v1StringType(30).get(buf, off + 33),\r\n album: new Id3v1StringType(30).get(buf, off + 63),\r\n year: new Id3v1StringType(4).get(buf, off + 93),\r\n comment: new Id3v1StringType(28).get(buf, off + 97),\r\n // ID3v1.1 separator for track\r\n zeroByte: token_types_1.UINT8.get(buf, off + 127),\r\n // track: ID3v1.1 field added by Michael Mutschler\r\n track: token_types_1.UINT8.get(buf, off + 126),\r\n genre: token_types_1.UINT8.get(buf, off + 127)\r\n } : null;\r\n }\r\n};\r\nclass Id3v1StringType extends token_types_1.StringType {\r\n constructor(len) {\r\n super(len, 'binary');\r\n }\r\n get(buf, off) {\r\n let value = super.get(buf, off);\r\n value = util.trimRightNull(value);\r\n value = value.trim();\r\n return value.length > 0 ? value : undefined;\r\n }\r\n}\r\nclass ID3v1Parser extends BasicParser_1.BasicParser {\r\n static getGenre(genreIndex) {\r\n if (genreIndex < exports.Genres.length) {\r\n return exports.Genres[genreIndex];\r\n }\r\n return undefined; // ToDO: generate warning\r\n }\r\n async parse() {\r\n if (!this.tokenizer.fileInfo.size) {\r\n debug('Skip checking for ID3v1 because the file-size is unknown');\r\n return;\r\n }\r\n if (this.options.apeHeader) {\r\n this.tokenizer.ignore(this.options.apeHeader.offset - this.tokenizer.position);\r\n const apeParser = new APEv2Parser_1.APEv2Parser();\r\n apeParser.init(this.metadata, this.tokenizer, this.options);\r\n await apeParser.parseTags(this.options.apeHeader.footer);\r\n }\r\n const offset = this.tokenizer.fileInfo.size - Iid3v1Token.len;\r\n if (this.tokenizer.position > offset) {\r\n debug('Already consumed the last 128 bytes');\r\n return;\r\n }\r\n const header = await this.tokenizer.readToken(Iid3v1Token, offset);\r\n if (header) {\r\n debug('ID3v1 header found at: pos=%s', this.tokenizer.fileInfo.size - Iid3v1Token.len);\r\n for (const id of ['title', 'artist', 'album', 'comment', 'track', 'year']) {\r\n if (header[id] && header[id] !== '')\r\n this.addTag(id, header[id]);\r\n }\r\n const genre = ID3v1Parser.getGenre(header.genre);\r\n if (genre)\r\n this.addTag('genre', genre);\r\n }\r\n else {\r\n debug('ID3v1 header not found at: pos=%s', this.tokenizer.fileInfo.size - Iid3v1Token.len);\r\n }\r\n }\r\n addTag(id, value) {\r\n this.metadata.addTag('ID3v1', id, value);\r\n }\r\n}\r\nexports.ID3v1Parser = ID3v1Parser;\r\nasync function hasID3v1Header(reader) {\r\n if (reader.fileSize >= 128) {\r\n const tag = Buffer.alloc(3);\r\n await reader.randomRead(tag, 0, tag.length, reader.fileSize - 128);\r\n return tag.toString('binary') === 'TAG';\r\n }\r\n return false;\r\n}\r\nexports.hasID3v1Header = hasID3v1Header;\r\n","\"use strict\";\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nexports.ID3v1TagMapper = void 0;\r\nconst GenericTagMapper_1 = require(\"../common/GenericTagMapper\");\r\n/**\r\n * ID3v1 tag mappings\r\n */\r\nconst id3v1TagMap = {\r\n title: 'title',\r\n artist: 'artist',\r\n album: 'album',\r\n year: 'year',\r\n comment: 'comment',\r\n track: 'track',\r\n genre: 'genre'\r\n};\r\nclass ID3v1TagMapper extends GenericTagMapper_1.CommonTagMapper {\r\n constructor() {\r\n super(['ID3v1'], id3v1TagMap);\r\n }\r\n}\r\nexports.ID3v1TagMapper = ID3v1TagMapper;\r\n//# sourceMappingURL=ID3v1TagMap.js.map","\"use strict\";\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nexports.AbstractID3Parser = void 0;\r\nconst core_1 = require(\"strtok3/lib/core\");\r\nconst debug_1 = require(\"debug\");\r\nconst ID3v2Token_1 = require(\"./ID3v2Token\");\r\nconst ID3v2Parser_1 = require(\"./ID3v2Parser\");\r\nconst ID3v1Parser_1 = require(\"../id3v1/ID3v1Parser\");\r\nconst BasicParser_1 = require(\"../common/BasicParser\");\r\nconst debug = (0, debug_1.default)('music-metadata:parser:ID3');\r\n/**\r\n * Abstract parser which tries take ID3v2 and ID3v1 headers.\r\n */\r\nclass AbstractID3Parser extends BasicParser_1.BasicParser {\r\n constructor() {\r\n super(...arguments);\r\n this.id3parser = new ID3v2Parser_1.ID3v2Parser();\r\n }\r\n static async startsWithID3v2Header(tokenizer) {\r\n return (await tokenizer.peekToken(ID3v2Token_1.ID3v2Header)).fileIdentifier === 'ID3';\r\n }\r\n async parse() {\r\n try {\r\n await this.parseID3v2();\r\n }\r\n catch (err) {\r\n if (err instanceof core_1.EndOfStreamError) {\r\n debug(`End-of-stream`);\r\n }\r\n else {\r\n throw err;\r\n }\r\n }\r\n }\r\n finalize() {\r\n return;\r\n }\r\n async parseID3v2() {\r\n await this.tryReadId3v2Headers();\r\n debug('End of ID3v2 header, go to MPEG-parser: pos=%s', this.tokenizer.position);\r\n await this.postId3v2Parse();\r\n if (this.options.skipPostHeaders && this.metadata.hasAny()) {\r\n this.finalize();\r\n }\r\n else {\r\n const id3v1parser = new ID3v1Parser_1.ID3v1Parser();\r\n await id3v1parser.init(this.metadata, this.tokenizer, this.options).parse();\r\n this.finalize();\r\n }\r\n }\r\n async tryReadId3v2Headers() {\r\n const id3Header = await this.tokenizer.peekToken(ID3v2Token_1.ID3v2Header);\r\n if (id3Header.fileIdentifier === 'ID3') {\r\n debug('Found ID3v2 header, pos=%s', this.tokenizer.position);\r\n await this.id3parser.parse(this.metadata, this.tokenizer, this.options);\r\n return this.tryReadId3v2Headers();\r\n }\r\n }\r\n}\r\nexports.AbstractID3Parser = AbstractID3Parser;\r\n","\"use strict\";\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nexports.FrameParser = exports.parseGenre = void 0;\r\nconst debug_1 = require(\"debug\");\r\nconst Token = require(\"token-types\");\r\nconst util = require(\"../common/Util\");\r\nconst ID3v2Token_1 = require(\"./ID3v2Token\");\r\nconst ID3v1Parser_1 = require(\"../id3v1/ID3v1Parser\");\r\nconst debug = (0, debug_1.default)('music-metadata:id3v2:frame-parser');\r\nconst defaultEnc = 'latin1'; // latin1 == iso-8859-1;\r\nfunction parseGenre(origVal) {\r\n // match everything inside parentheses\r\n const genres = [];\r\n let code;\r\n let word = '';\r\n for (const c of origVal) {\r\n if (typeof code === 'string') {\r\n if (c === '(' && code === '') {\r\n word += '(';\r\n code = undefined;\r\n }\r\n else if (c === ')') {\r\n if (word !== '') {\r\n genres.push(word);\r\n word = '';\r\n }\r\n const genre = parseGenreCode(code);\r\n if (genre) {\r\n genres.push(genre);\r\n }\r\n code = undefined;\r\n }\r\n else\r\n code += c;\r\n }\r\n else if (c === '(') {\r\n code = '';\r\n }\r\n else {\r\n word += c;\r\n }\r\n }\r\n if (word) {\r\n if (genres.length === 0 && word.match(/^\\d*$/)) {\r\n word = ID3v1Parser_1.Genres[word];\r\n }\r\n genres.push(word);\r\n }\r\n return genres;\r\n}\r\nexports.parseGenre = parseGenre;\r\nfunction parseGenreCode(code) {\r\n if (code === 'RX')\r\n return 'Remix';\r\n if (code === 'CR')\r\n return 'Cover';\r\n if (code.match(/^\\d*$/)) {\r\n return ID3v1Parser_1.Genres[code];\r\n }\r\n}\r\nclass FrameParser {\r\n /**\r\n * Create id3v2 frame parser\r\n * @param major - Major version, e.g. (4) for id3v2.4\r\n * @param warningCollector - Used to collect decode issue\r\n */\r\n constructor(major, warningCollector) {\r\n this.major = major;\r\n this.warningCollector = warningCollector;\r\n }\r\n readData(uint8Array, type, includeCovers) {\r\n if (uint8Array.length === 0) {\r\n this.warningCollector.addWarning(`id3v2.${this.major} header has empty tag type=${type}`);\r\n return;\r\n }\r\n const { encoding, bom } = ID3v2Token_1.TextEncodingToken.get(uint8Array, 0);\r\n const length = uint8Array.length;\r\n let offset = 0;\r\n let output = []; // ToDo\r\n const nullTerminatorLength = FrameParser.getNullTerminatorLength(encoding);\r\n let fzero;\r\n const out = {};\r\n debug(`Parsing tag type=${type}, encoding=${encoding}, bom=${bom}`);\r\n switch (type !== 'TXXX' && type[0] === 'T' ? 'T*' : type) {\r\n case 'T*': // 4.2.1. Text information frames - details\r\n case 'IPLS': // v2.3: Involved people list\r\n case 'MVIN':\r\n case 'MVNM':\r\n case 'PCS':\r\n case 'PCST':\r\n let text;\r\n try {\r\n text = util.decodeString(uint8Array.slice(1), encoding).replace(/\\x00+$/, '');\r\n }\r\n catch (error) {\r\n this.warningCollector.addWarning(`id3v2.${this.major} type=${type} header has invalid string value: ${error.message}`);\r\n }\r\n switch (type) {\r\n case 'TMCL': // Musician credits list\r\n case 'TIPL': // Involved people list\r\n case 'IPLS': // Involved people list\r\n output = this.splitValue(type, text);\r\n output = FrameParser.functionList(output);\r\n break;\r\n case 'TRK':\r\n case 'TRCK':\r\n case 'TPOS':\r\n output = text;\r\n break;\r\n case 'TCOM':\r\n case 'TEXT':\r\n case 'TOLY':\r\n case 'TOPE':\r\n case 'TPE1':\r\n case 'TSRC':\r\n // id3v2.3 defines that TCOM, TEXT, TOLY, TOPE & TPE1 values are separated by /\r\n output = this.splitValue(type, text);\r\n break;\r\n case 'TCO':\r\n case 'TCON':\r\n output = this.splitValue(type, text).map(v => parseGenre(v)).reduce((acc, val) => acc.concat(val), []);\r\n break;\r\n case 'PCS':\r\n case 'PCST':\r\n // TODO: Why `default` not results `1` but `''`?\r\n output = this.major >= 4 ? this.splitValue(type, text) : [text];\r\n output = (Array.isArray(output) && output[0] === '') ? 1 : 0;\r\n break;\r\n default:\r\n output = this.major >= 4 ? this.splitValue(type, text) : [text];\r\n }\r\n break;\r\n case 'TXXX':\r\n output = FrameParser.readIdentifierAndData(uint8Array, offset + 1, length, encoding);\r\n output = {\r\n description: output.id,\r\n text: this.splitValue(type, util.decodeString(output.data, encoding).replace(/\\x00+$/, ''))\r\n };\r\n break;\r\n case 'PIC':\r\n case 'APIC':\r\n if (includeCovers) {\r\n const pic = {};\r\n offset += 1;\r\n switch (this.major) {\r\n case 2:\r\n pic.format = util.decodeString(uint8Array.slice(offset, offset + 3), 'latin1'); // 'latin1'; // latin1 == iso-8859-1;\r\n offset += 3;\r\n break;\r\n case 3:\r\n case 4:\r\n fzero = util.findZero(uint8Array, offset, length, defaultEnc);\r\n pic.format = util.decodeString(uint8Array.slice(offset, fzero), defaultEnc);\r\n offset = fzero + 1;\r\n break;\r\n default:\r\n throw new Error('Warning: unexpected major versionIndex: ' + this.major);\r\n }\r\n pic.format = FrameParser.fixPictureMimeType(pic.format);\r\n pic.type = ID3v2Token_1.AttachedPictureType[uint8Array[offset]];\r\n offset += 1;\r\n fzero = util.findZero(uint8Array, offset, length, encoding);\r\n pic.description = util.decodeString(uint8Array.slice(offset, fzero), encoding);\r\n offset = fzero + nullTerminatorLength;\r\n pic.data = Buffer.from(uint8Array.slice(offset, length));\r\n output = pic;\r\n }\r\n break;\r\n case 'CNT':\r\n case 'PCNT':\r\n output = Token.UINT32_BE.get(uint8Array, 0);\r\n break;\r\n case 'SYLT':\r\n // skip text encoding (1 byte),\r\n // language (3 bytes),\r\n // time stamp format (1 byte),\r\n // content tagTypes (1 byte),\r\n // content descriptor (1 byte)\r\n offset += 7;\r\n output = [];\r\n while (offset < length) {\r\n const txt = uint8Array.slice(offset, offset = util.findZero(uint8Array, offset, length, encoding));\r\n offset += 5; // push offset forward one + 4 byte timestamp\r\n output.push(util.decodeString(txt, encoding));\r\n }\r\n break;\r\n case 'ULT':\r\n case 'USLT':\r\n case 'COM':\r\n case 'COMM':\r\n offset += 1;\r\n out.language = util.decodeString(uint8Array.slice(offset, offset + 3), defaultEnc);\r\n offset += 3;\r\n fzero = util.findZero(uint8Array, offset, length, encoding);\r\n out.description = util.decodeString(uint8Array.slice(offset, fzero), encoding);\r\n offset = fzero + nullTerminatorLength;\r\n out.text = util.decodeString(uint8Array.slice(offset, length), encoding).replace(/\\x00+$/, '');\r\n output = [out];\r\n break;\r\n case 'UFID':\r\n output = FrameParser.readIdentifierAndData(uint8Array, offset, length, defaultEnc);\r\n output = { owner_identifier: output.id, identifier: output.data };\r\n break;\r\n case 'PRIV': // private frame\r\n output = FrameParser.readIdentifierAndData(uint8Array, offset, length, defaultEnc);\r\n output = { owner_identifier: output.id, data: output.data };\r\n break;\r\n case 'POPM': // Popularimeter\r\n fzero = util.findZero(uint8Array, offset, length, defaultEnc);\r\n const email = util.decodeString(uint8Array.slice(offset, fzero), defaultEnc);\r\n offset = fzero + 1;\r\n const dataLen = length - offset;\r\n output = {\r\n email,\r\n rating: Token.UINT8.get(uint8Array, offset),\r\n counter: dataLen >= 5 ? Token.UINT32_BE.get(uint8Array, offset + 1) : undefined\r\n };\r\n break;\r\n case 'GEOB': { // General encapsulated object\r\n fzero = util.findZero(uint8Array, offset + 1, length, encoding);\r\n const mimeType = util.decodeString(uint8Array.slice(offset + 1, fzero), defaultEnc);\r\n offset = fzero + 1;\r\n fzero = util.findZero(uint8Array, offset, length - offset, encoding);\r\n const filename = util.decodeString(uint8Array.slice(offset, fzero), defaultEnc);\r\n offset = fzero + 1;\r\n fzero = util.findZero(uint8Array, offset, length - offset, encoding);\r\n const description = util.decodeString(uint8Array.slice(offset, fzero), defaultEnc);\r\n output = {\r\n type: mimeType,\r\n filename,\r\n description,\r\n data: uint8Array.slice(offset + 1, length)\r\n };\r\n break;\r\n }\r\n // W-Frames:\r\n case 'WCOM':\r\n case 'WCOP':\r\n case 'WOAF':\r\n case 'WOAR':\r\n case 'WOAS':\r\n case 'WORS':\r\n case 'WPAY':\r\n case 'WPUB':\r\n // Decode URL\r\n output = util.decodeString(uint8Array.slice(offset, fzero), defaultEnc);\r\n break;\r\n case 'WXXX': {\r\n // Decode URL\r\n fzero = util.findZero(uint8Array, offset + 1, length, encoding);\r\n const description = util.decodeString(uint8Array.slice(offset + 1, fzero), encoding);\r\n offset = fzero + (encoding === 'utf16le' ? 2 : 1);\r\n output = { description, url: util.decodeString(uint8Array.slice(offset, length), defaultEnc) };\r\n break;\r\n }\r\n case 'WFD':\r\n case 'WFED':\r\n output = util.decodeString(uint8Array.slice(offset + 1, util.findZero(uint8Array, offset + 1, length, encoding)), encoding);\r\n break;\r\n case 'MCDI': {\r\n // Music CD identifier\r\n output = uint8Array.slice(0, length);\r\n break;\r\n }\r\n default:\r\n debug('Warning: unsupported id3v2-tag-type: ' + type);\r\n break;\r\n }\r\n return output;\r\n }\r\n static fixPictureMimeType(pictureType) {\r\n pictureType = pictureType.toLocaleLowerCase();\r\n switch (pictureType) {\r\n case 'jpg':\r\n return 'image/jpeg';\r\n case 'png':\r\n return 'image/png';\r\n }\r\n return pictureType;\r\n }\r\n /**\r\n * Converts TMCL (Musician credits list) or TIPL (Involved people list)\r\n * @param entries\r\n */\r\n static functionList(entries) {\r\n const res = {};\r\n for (let i = 0; i + 1 < entries.length; i += 2) {\r\n const names = entries[i + 1].split(',');\r\n res[entries[i]] = res.hasOwnProperty(entries[i]) ? res[entries[i]].concat(names) : names;\r\n }\r\n return res;\r\n }\r\n /**\r\n * id3v2.4 defines that multiple T* values are separated by 0x00\r\n * id3v2.3 defines that TCOM, TEXT, TOLY, TOPE & TPE1 values are separated by /\r\n * @param tag - Tag name\r\n * @param text - Concatenated tag value\r\n * @returns Split tag value\r\n */\r\n splitValue(tag, text) {\r\n let values;\r\n if (this.major < 4) {\r\n values = text.split(/\\x00/g);\r\n if (values.length > 1) {\r\n this.warningCollector.addWarning(`ID3v2.${this.major} ${tag} uses non standard null-separator.`);\r\n }\r\n else {\r\n values = text.split(/\\//g);\r\n }\r\n }\r\n else {\r\n values = text.split(/\\x00/g);\r\n }\r\n return FrameParser.trimArray(values);\r\n }\r\n static trimArray(values) {\r\n return values.map(value => value.replace(/\\x00+$/, '').trim());\r\n }\r\n static readIdentifierAndData(uint8Array, offset, length, encoding) {\r\n const fzero = util.findZero(uint8Array, offset, length, encoding);\r\n const id = util.decodeString(uint8Array.slice(offset, fzero), encoding);\r\n offset = fzero + FrameParser.getNullTerminatorLength(encoding);\r\n return { id, data: uint8Array.slice(offset, length) };\r\n }\r\n static getNullTerminatorLength(enc) {\r\n return enc === 'utf16le' ? 2 : 1;\r\n }\r\n}\r\nexports.FrameParser = FrameParser;\r\n","\"use strict\";\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nexports.ID3v22TagMapper = exports.id3v22TagMap = void 0;\r\nconst CaseInsensitiveTagMap_1 = require(\"../common/CaseInsensitiveTagMap\");\r\n/**\r\n * ID3v2.2 tag mappings\r\n */\r\nexports.id3v22TagMap = {\r\n TT2: 'title',\r\n TP1: 'artist',\r\n TP2: 'albumartist',\r\n TAL: 'album',\r\n TYE: 'year',\r\n COM: 'comment',\r\n TRK: 'track',\r\n TPA: 'disk',\r\n TCO: 'genre',\r\n PIC: 'picture',\r\n TCM: 'composer',\r\n TOR: 'originaldate',\r\n TOT: 'originalalbum',\r\n TXT: 'lyricist',\r\n TP3: 'conductor',\r\n TPB: 'label',\r\n TT1: 'grouping',\r\n TT3: 'subtitle',\r\n TLA: 'language',\r\n TCR: 'copyright',\r\n WCP: 'license',\r\n TEN: 'encodedby',\r\n TSS: 'encodersettings',\r\n WAR: 'website',\r\n 'COM:iTunPGAP': 'gapless'\r\n /* ToDo: iTunes tags:\r\n 'COM:iTunNORM': ,\r\n 'COM:iTunSMPB': 'encoder delay',\r\n 'COM:iTunes_CDDB_IDs'\r\n */ ,\r\n PCS: 'podcast',\r\n TCP: \"compilation\",\r\n TDR: 'date',\r\n TS2: 'albumartistsort',\r\n TSA: 'albumsort',\r\n TSC: 'composersort',\r\n TSP: 'artistsort',\r\n TST: 'titlesort',\r\n WFD: 'podcasturl',\r\n TBP: 'bpm'\r\n};\r\nclass ID3v22TagMapper extends CaseInsensitiveTagMap_1.CaseInsensitiveTagMap {\r\n constructor() {\r\n super(['ID3v2.2'], exports.id3v22TagMap);\r\n }\r\n}\r\nexports.ID3v22TagMapper = ID3v22TagMapper;\r\n//# sourceMappingURL=ID3v22TagMapper.js.map","\"use strict\";\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nexports.ID3v24TagMapper = void 0;\r\nconst GenericTagMapper_1 = require(\"../common/GenericTagMapper\");\r\nconst CaseInsensitiveTagMap_1 = require(\"../common/CaseInsensitiveTagMap\");\r\nconst util = require(\"../common/Util\");\r\n/**\r\n * ID3v2.3/ID3v2.4 tag mappings\r\n */\r\nconst id3v24TagMap = {\r\n // id3v2.3\r\n TIT2: 'title',\r\n TPE1: 'artist',\r\n 'TXXX:Artists': 'artists',\r\n TPE2: 'albumartist',\r\n TALB: 'album',\r\n TDRV: 'date',\r\n /**\r\n * Original release year\r\n */\r\n TORY: 'originalyear',\r\n TPOS: 'disk',\r\n TCON: 'genre',\r\n APIC: 'picture',\r\n TCOM: 'composer',\r\n 'USLT:description': 'lyrics',\r\n TSOA: 'albumsort',\r\n TSOT: 'titlesort',\r\n TOAL: 'originalalbum',\r\n TSOP: 'artistsort',\r\n TSO2: 'albumartistsort',\r\n TSOC: 'composersort',\r\n TEXT: 'lyricist',\r\n 'TXXX:Writer': 'writer',\r\n TPE3: 'conductor',\r\n // 'IPLS:instrument': 'performer:instrument', // ToDo\r\n TPE4: 'remixer',\r\n 'IPLS:arranger': 'arranger',\r\n 'IPLS:engineer': 'engineer',\r\n 'IPLS:producer': 'producer',\r\n 'IPLS:DJ-mix': 'djmixer',\r\n 'IPLS:mix': 'mixer',\r\n TPUB: 'label',\r\n TIT1: 'grouping',\r\n TIT3: 'subtitle',\r\n TRCK: 'track',\r\n TCMP: 'compilation',\r\n POPM: 'rating',\r\n TBPM: 'bpm',\r\n TMED: 'media',\r\n 'TXXX:CATALOGNUMBER': 'catalognumber',\r\n 'TXXX:MusicBrainz Album Status': 'releasestatus',\r\n 'TXXX:MusicBrainz Album Type': 'releasetype',\r\n /**\r\n * Release country as documented: https://picard.musicbrainz.org/docs/mappings/#cite_note-0\r\n */\r\n 'TXXX:MusicBrainz Album Release Country': 'releasecountry',\r\n /**\r\n * Release country as implemented // ToDo: report\r\n */\r\n 'TXXX:RELEASECOUNTRY': 'releasecountry',\r\n 'TXXX:SCRIPT': 'script',\r\n TLAN: 'language',\r\n TCOP: 'copyright',\r\n WCOP: 'license',\r\n TENC: 'encodedby',\r\n TSSE: 'encodersettings',\r\n 'TXXX:BARCODE': 'barcode',\r\n 'TXXX:ISRC': 'isrc',\r\n TSRC: 'isrc',\r\n 'TXXX:ASIN': 'asin',\r\n 'TXXX:originalyear': 'originalyear',\r\n 'UFID:http://musicbrainz.org': 'musicbrainz_recordingid',\r\n 'TXXX:MusicBrainz Release Track Id': 'musicbrainz_trackid',\r\n 'TXXX:MusicBrainz Album Id': 'musicbrainz_albumid',\r\n 'TXXX:MusicBrainz Artist Id': 'musicbrainz_artistid',\r\n 'TXXX:MusicBrainz Album Artist Id': 'musicbrainz_albumartistid',\r\n 'TXXX:MusicBrainz Release Group Id': 'musicbrainz_releasegroupid',\r\n 'TXXX:MusicBrainz Work Id': 'musicbrainz_workid',\r\n 'TXXX:MusicBrainz TRM Id': 'musicbrainz_trmid',\r\n 'TXXX:MusicBrainz Disc Id': 'musicbrainz_discid',\r\n 'TXXX:ACOUSTID_ID': 'acoustid_id',\r\n 'TXXX:Acoustid Id': 'acoustid_id',\r\n 'TXXX:Acoustid Fingerprint': 'acoustid_fingerprint',\r\n 'TXXX:MusicIP PUID': 'musicip_puid',\r\n 'TXXX:MusicMagic Fingerprint': 'musicip_fingerprint',\r\n WOAR: 'website',\r\n // id3v2.4\r\n // ToDo: In same sequence as defined at http://id3.org/id3v2.4.0-frames\r\n TDRC: 'date',\r\n TYER: 'year',\r\n TDOR: 'originaldate',\r\n // 'TMCL:instrument': 'performer:instrument',\r\n 'TIPL:arranger': 'arranger',\r\n 'TIPL:engineer': 'engineer',\r\n 'TIPL:producer': 'producer',\r\n 'TIPL:DJ-mix': 'djmixer',\r\n 'TIPL:mix': 'mixer',\r\n TMOO: 'mood',\r\n // additional mappings:\r\n SYLT: 'lyrics',\r\n TSST: 'discsubtitle',\r\n TKEY: 'key',\r\n COMM: 'comment',\r\n TOPE: 'originalartist',\r\n // Windows Media Player\r\n 'PRIV:AverageLevel': 'averageLevel',\r\n 'PRIV:PeakLevel': 'peakLevel',\r\n // Discogs\r\n 'TXXX:DISCOGS_ARTIST_ID': 'discogs_artist_id',\r\n 'TXXX:DISCOGS_ARTISTS': 'artists',\r\n 'TXXX:DISCOGS_ARTIST_NAME': 'artists',\r\n 'TXXX:DISCOGS_ALBUM_ARTISTS': 'albumartist',\r\n 'TXXX:DISCOGS_CATALOG': 'catalognumber',\r\n 'TXXX:DISCOGS_COUNTRY': 'releasecountry',\r\n 'TXXX:DISCOGS_DATE': 'originaldate',\r\n 'TXXX:DISCOGS_LABEL': 'label',\r\n 'TXXX:DISCOGS_LABEL_ID': 'discogs_label_id',\r\n 'TXXX:DISCOGS_MASTER_RELEASE_ID': 'discogs_master_release_id',\r\n 'TXXX:DISCOGS_RATING': 'discogs_rating',\r\n 'TXXX:DISCOGS_RELEASED': 'date',\r\n 'TXXX:DISCOGS_RELEASE_ID': 'discogs_release_id',\r\n 'TXXX:DISCOGS_VOTES': 'discogs_votes',\r\n 'TXXX:CATALOGID': 'catalognumber',\r\n 'TXXX:STYLE': 'genre',\r\n 'TXXX:REPLAYGAIN_TRACK_PEAK': 'replaygain_track_peak',\r\n 'TXXX:REPLAYGAIN_TRACK_GAIN': 'replaygain_track_gain',\r\n 'TXXX:REPLAYGAIN_ALBUM_PEAK': 'replaygain_album_peak',\r\n 'TXXX:REPLAYGAIN_ALBUM_GAIN': 'replaygain_album_gain',\r\n 'TXXX:MP3GAIN_MINMAX': 'replaygain_track_minmax',\r\n 'TXXX:MP3GAIN_ALBUM_MINMAX': 'replaygain_album_minmax',\r\n 'TXXX:MP3GAIN_UNDO': 'replaygain_undo',\r\n MVNM: 'movement',\r\n MVIN: 'movementIndex',\r\n PCST: 'podcast',\r\n TCAT: 'category',\r\n TDES: 'description',\r\n TDRL: 'date',\r\n TGID: 'podcastId',\r\n TKWD: 'keywords',\r\n WFED: 'podcasturl'\r\n};\r\nclass ID3v24TagMapper extends CaseInsensitiveTagMap_1.CaseInsensitiveTagMap {\r\n static toRating(popm) {\r\n return {\r\n source: popm.email,\r\n rating: popm.rating > 0 ? (popm.rating - 1) / 254 * GenericTagMapper_1.CommonTagMapper.maxRatingScore : undefined\r\n };\r\n }\r\n constructor() {\r\n super(['ID3v2.3', 'ID3v2.4'], id3v24TagMap);\r\n }\r\n /**\r\n * Handle post mapping exceptions / correction\r\n * @param tag to post map\r\n * @param warnings Wil be used to register (collect) warnings\r\n * @return Common value e.g. \"Buena Vista Social Club\"\r\n */\r\n postMap(tag, warnings) {\r\n switch (tag.id) {\r\n case 'UFID': // decode MusicBrainz Recording Id\r\n if (tag.value.owner_identifier === 'http://musicbrainz.org') {\r\n tag.id += ':' + tag.value.owner_identifier;\r\n tag.value = util.decodeString(tag.value.identifier, 'latin1'); // latin1 == iso-8859-1\r\n }\r\n break;\r\n case 'PRIV':\r\n switch (tag.value.owner_identifier) {\r\n // decode Windows Media Player\r\n case 'AverageLevel':\r\n case 'PeakValue':\r\n tag.id += ':' + tag.value.owner_identifier;\r\n tag.value = tag.value.data.length === 4 ? tag.value.data.readUInt32LE(0) : null;\r\n if (tag.value === null) {\r\n warnings.addWarning(`Failed to parse PRIV:PeakValue`);\r\n }\r\n break;\r\n default:\r\n warnings.addWarning(`Unknown PRIV owner-identifier: ${tag.value.owner_identifier}`);\r\n }\r\n break;\r\n case 'COMM':\r\n tag.value = tag.value ? tag.value.text : null;\r\n break;\r\n case 'POPM':\r\n tag.value = ID3v24TagMapper.toRating(tag.value);\r\n break;\r\n default:\r\n break;\r\n }\r\n }\r\n}\r\nexports.ID3v24TagMapper = ID3v24TagMapper;\r\n//# sourceMappingURL=ID3v24TagMapper.js.map","\"use strict\";\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nexports.ID3v2Parser = void 0;\r\nconst Token = require(\"token-types\");\r\nconst util = require(\"../common/Util\");\r\nconst FrameParser_1 = require(\"./FrameParser\");\r\nconst ID3v2Token_1 = require(\"./ID3v2Token\");\r\nclass ID3v2Parser {\r\n static removeUnsyncBytes(buffer) {\r\n let readI = 0;\r\n let writeI = 0;\r\n while (readI < buffer.length - 1) {\r\n if (readI !== writeI) {\r\n buffer[writeI] = buffer[readI];\r\n }\r\n readI += (buffer[readI] === 0xFF && buffer[readI + 1] === 0) ? 2 : 1;\r\n writeI++;\r\n }\r\n if (readI < buffer.length) {\r\n buffer[writeI++] = buffer[readI];\r\n }\r\n return buffer.slice(0, writeI);\r\n }\r\n static getFrameHeaderLength(majorVer) {\r\n switch (majorVer) {\r\n case 2:\r\n return 6;\r\n case 3:\r\n case 4:\r\n return 10;\r\n default:\r\n throw new Error('header versionIndex is incorrect');\r\n }\r\n }\r\n static readFrameFlags(b) {\r\n return {\r\n status: {\r\n tag_alter_preservation: util.getBit(b, 0, 6),\r\n file_alter_preservation: util.getBit(b, 0, 5),\r\n read_only: util.getBit(b, 0, 4)\r\n },\r\n format: {\r\n grouping_identity: util.getBit(b, 1, 7),\r\n compression: util.getBit(b, 1, 3),\r\n encryption: util.getBit(b, 1, 2),\r\n unsynchronisation: util.getBit(b, 1, 1),\r\n data_length_indicator: util.getBit(b, 1, 0)\r\n }\r\n };\r\n }\r\n static readFrameData(uint8Array, frameHeader, majorVer, includeCovers, warningCollector) {\r\n const frameParser = new FrameParser_1.FrameParser(majorVer, warningCollector);\r\n switch (majorVer) {\r\n case 2:\r\n return frameParser.readData(uint8Array, frameHeader.id, includeCovers);\r\n case 3:\r\n case 4:\r\n if (frameHeader.flags.format.unsynchronisation) {\r\n uint8Array = ID3v2Parser.removeUnsyncBytes(uint8Array);\r\n }\r\n if (frameHeader.flags.format.data_length_indicator) {\r\n uint8Array = uint8Array.slice(4, uint8Array.length);\r\n }\r\n return frameParser.readData(uint8Array, frameHeader.id, includeCovers);\r\n default:\r\n throw new Error('Unexpected majorVer: ' + majorVer);\r\n }\r\n }\r\n /**\r\n * Create a combined tag key, of tag & description\r\n * @param tag e.g.: COM\r\n * @param description e.g. iTunPGAP\r\n * @returns string e.g. COM:iTunPGAP\r\n */\r\n static makeDescriptionTagName(tag, description) {\r\n return tag + (description ? ':' + description : '');\r\n }\r\n async parse(metadata, tokenizer, options) {\r\n this.tokenizer = tokenizer;\r\n this.metadata = metadata;\r\n this.options = options;\r\n const id3Header = await this.tokenizer.readToken(ID3v2Token_1.ID3v2Header);\r\n if (id3Header.fileIdentifier !== 'ID3') {\r\n throw new Error('expected ID3-header file-identifier \\'ID3\\' was not found');\r\n }\r\n this.id3Header = id3Header;\r\n this.headerType = ('ID3v2.' + id3Header.version.major);\r\n return id3Header.flags.isExtendedHeader ? this.parseExtendedHeader() : this.parseId3Data(id3Header.size);\r\n }\r\n async parseExtendedHeader() {\r\n const extendedHeader = await this.tokenizer.readToken(ID3v2Token_1.ExtendedHeader);\r\n const dataRemaining = extendedHeader.size - ID3v2Token_1.ExtendedHeader.len;\r\n return dataRemaining > 0 ? this.parseExtendedHeaderData(dataRemaining, extendedHeader.size) : this.parseId3Data(this.id3Header.size - extendedHeader.size);\r\n }\r\n async parseExtendedHeaderData(dataRemaining, extendedHeaderSize) {\r\n await this.tokenizer.ignore(dataRemaining);\r\n return this.parseId3Data(this.id3Header.size - extendedHeaderSize);\r\n }\r\n async parseId3Data(dataLen) {\r\n const uint8Array = await this.tokenizer.readToken(new Token.Uint8ArrayType(dataLen));\r\n for (const tag of this.parseMetadata(uint8Array)) {\r\n if (tag.id === 'TXXX') {\r\n if (tag.value) {\r\n for (const text of tag.value.text) {\r\n this.addTag(ID3v2Parser.makeDescriptionTagName(tag.id, tag.value.description), text);\r\n }\r\n }\r\n }\r\n else if (tag.id === 'COM') {\r\n for (const value of tag.value) {\r\n this.addTag(ID3v2Parser.makeDescriptionTagName(tag.id, value.description), value.text);\r\n }\r\n }\r\n else if (tag.id === 'COMM') {\r\n for (const value of tag.value) {\r\n this.addTag(ID3v2Parser.makeDescriptionTagName(tag.id, value.description), value);\r\n }\r\n }\r\n else if (Array.isArray(tag.value)) {\r\n for (const value of tag.value) {\r\n this.addTag(tag.id, value);\r\n }\r\n }\r\n else {\r\n this.addTag(tag.id, tag.value);\r\n }\r\n }\r\n }\r\n addTag(id, value) {\r\n this.metadata.addTag(this.headerType, id, value);\r\n }\r\n parseMetadata(data) {\r\n let offset = 0;\r\n const tags = [];\r\n while (true) {\r\n if (offset === data.length)\r\n break;\r\n const frameHeaderLength = ID3v2Parser.getFrameHeaderLength(this.id3Header.version.major);\r\n if (offset + frameHeaderLength > data.length) {\r\n this.metadata.addWarning('Illegal ID3v2 tag length');\r\n break;\r\n }\r\n const frameHeaderBytes = data.slice(offset, offset += frameHeaderLength);\r\n const frameHeader = this.readFrameHeader(frameHeaderBytes, this.id3Header.version.major);\r\n const frameDataBytes = data.slice(offset, offset += frameHeader.length);\r\n const values = ID3v2Parser.readFrameData(frameDataBytes, frameHeader, this.id3Header.version.major, !this.options.skipCovers, this.metadata);\r\n if (values) {\r\n tags.push({ id: frameHeader.id, value: values });\r\n }\r\n }\r\n return tags;\r\n }\r\n readFrameHeader(uint8Array, majorVer) {\r\n let header;\r\n switch (majorVer) {\r\n case 2:\r\n header = {\r\n id: Buffer.from(uint8Array.slice(0, 3)).toString('ascii'),\r\n length: Token.UINT24_BE.get(uint8Array, 3)\r\n };\r\n if (!header.id.match(/[A-Z0-9]{3}/g)) {\r\n this.metadata.addWarning(`Invalid ID3v2.${this.id3Header.version.major} frame-header-ID: ${header.id}`);\r\n }\r\n break;\r\n case 3:\r\n case 4:\r\n header = {\r\n id: Buffer.from(uint8Array.slice(0, 4)).toString('ascii'),\r\n length: (majorVer === 4 ? ID3v2Token_1.UINT32SYNCSAFE : Token.UINT32_BE).get(uint8Array, 4),\r\n flags: ID3v2Parser.readFrameFlags(uint8Array.slice(8, 10))\r\n };\r\n if (!header.id.match(/[A-Z0-9]{4}/g)) {\r\n this.metadata.addWarning(`Invalid ID3v2.${this.id3Header.version.major} frame-header-ID: ${header.id}`);\r\n }\r\n break;\r\n default:\r\n throw new Error('Unexpected majorVer: ' + majorVer);\r\n }\r\n return header;\r\n }\r\n}\r\nexports.ID3v2Parser = ID3v2Parser;\r\n","\"use strict\";\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nexports.TextEncodingToken = exports.ExtendedHeader = exports.ID3v2Header = exports.UINT32SYNCSAFE = exports.AttachedPictureType = void 0;\r\nconst Token = require(\"token-types\");\r\nconst util = require(\"../common/Util\");\r\n/**\r\n * The picture type according to the ID3v2 APIC frame\r\n * Ref: http://id3.org/id3v2.3.0#Attached_picture\r\n */\r\nvar AttachedPictureType;\r\n(function (AttachedPictureType) {\r\n AttachedPictureType[AttachedPictureType[\"Other\"] = 0] = \"Other\";\r\n AttachedPictureType[AttachedPictureType[\"32x32 pixels 'file icon' (PNG only)\"] = 1] = \"32x32 pixels 'file icon' (PNG only)\";\r\n AttachedPictureType[AttachedPictureType[\"Other file icon\"] = 2] = \"Other file icon\";\r\n AttachedPictureType[AttachedPictureType[\"Cover (front)\"] = 3] = \"Cover (front)\";\r\n AttachedPictureType[AttachedPictureType[\"Cover (back)\"] = 4] = \"Cover (back)\";\r\n AttachedPictureType[AttachedPictureType[\"Leaflet page\"] = 5] = \"Leaflet page\";\r\n AttachedPictureType[AttachedPictureType[\"Media (e.g. label side of CD)\"] = 6] = \"Media (e.g. label side of CD)\";\r\n AttachedPictureType[AttachedPictureType[\"Lead artist/lead performer/soloist\"] = 7] = \"Lead artist/lead performer/soloist\";\r\n AttachedPictureType[AttachedPictureType[\"Artist/performer\"] = 8] = \"Artist/performer\";\r\n AttachedPictureType[AttachedPictureType[\"Conductor\"] = 9] = \"Conductor\";\r\n AttachedPictureType[AttachedPictureType[\"Band/Orchestra\"] = 10] = \"Band/Orchestra\";\r\n AttachedPictureType[AttachedPictureType[\"Composer\"] = 11] = \"Composer\";\r\n AttachedPictureType[AttachedPictureType[\"Lyricist/text writer\"] = 12] = \"Lyricist/text writer\";\r\n AttachedPictureType[AttachedPictureType[\"Recording Location\"] = 13] = \"Recording Location\";\r\n AttachedPictureType[AttachedPictureType[\"During recording\"] = 14] = \"During recording\";\r\n AttachedPictureType[AttachedPictureType[\"During performance\"] = 15] = \"During performance\";\r\n AttachedPictureType[AttachedPictureType[\"Movie/video screen capture\"] = 16] = \"Movie/video screen capture\";\r\n AttachedPictureType[AttachedPictureType[\"A bright coloured fish\"] = 17] = \"A bright coloured fish\";\r\n AttachedPictureType[AttachedPictureType[\"Illustration\"] = 18] = \"Illustration\";\r\n AttachedPictureType[AttachedPictureType[\"Band/artist logotype\"] = 19] = \"Band/artist logotype\";\r\n AttachedPictureType[AttachedPictureType[\"Publisher/Studio logotype\"] = 20] = \"Publisher/Studio logotype\";\r\n})(AttachedPictureType = exports.AttachedPictureType || (exports.AttachedPictureType = {}));\r\n/**\r\n * 28 bits (representing up to 256MB) integer, the msb is 0 to avoid 'false syncsignals'.\r\n * 4 * %0xxxxxxx\r\n */\r\nexports.UINT32SYNCSAFE = {\r\n get: (buf, off) => {\r\n return buf[off + 3] & 0x7f | ((buf[off + 2]) << 7) |\r\n ((buf[off + 1]) << 14) | ((buf[off]) << 21);\r\n },\r\n len: 4\r\n};\r\n/**\r\n * ID3v2 header\r\n * Ref: http://id3.org/id3v2.3.0#ID3v2_header\r\n * ToDo\r\n */\r\nexports.ID3v2Header = {\r\n len: 10,\r\n get: (buf, off) => {\r\n return {\r\n // ID3v2/file identifier \"ID3\"\r\n fileIdentifier: new Token.StringType(3, 'ascii').get(buf, off),\r\n // ID3v2 versionIndex\r\n version: {\r\n major: Token.INT8.get(buf, off + 3),\r\n revision: Token.INT8.get(buf, off + 4)\r\n },\r\n // ID3v2 flags\r\n flags: {\r\n // Unsynchronisation\r\n unsynchronisation: util.getBit(buf, off + 5, 7),\r\n // Extended header\r\n isExtendedHeader: util.getBit(buf, off + 5, 6),\r\n // Experimental indicator\r\n expIndicator: util.getBit(buf, off + 5, 5),\r\n footer: util.getBit(buf, off + 5, 4)\r\n },\r\n size: exports.UINT32SYNCSAFE.get(buf, off + 6)\r\n };\r\n }\r\n};\r\nexports.ExtendedHeader = {\r\n len: 10,\r\n get: (buf, off) => {\r\n return {\r\n // Extended header size\r\n size: Token.UINT32_BE.get(buf, off),\r\n // Extended Flags\r\n extendedFlags: Token.UINT16_BE.get(buf, off + 4),\r\n // Size of padding\r\n sizeOfPadding: Token.UINT32_BE.get(buf, off + 6),\r\n // CRC data present\r\n crcDataPresent: util.getBit(buf, off + 4, 31)\r\n };\r\n }\r\n};\r\nexports.TextEncodingToken = {\r\n len: 1,\r\n get: (buf, off) => {\r\n switch (buf.readUInt8(off)) {\r\n case 0x00:\r\n return { encoding: 'latin1' }; // binary\r\n case 0x01:\r\n return { encoding: 'utf16le', bom: true };\r\n case 0x02:\r\n return { encoding: 'utf16le', bom: false };\r\n case 0x03:\r\n return { encoding: 'utf8', bom: false };\r\n default:\r\n return { encoding: 'utf8', bom: false };\r\n }\r\n }\r\n};\r\n","\"use strict\";\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nexports.Header = void 0;\r\nconst Token = require(\"token-types\");\r\nconst FourCC_1 = require(\"../common/FourCC\");\r\n/**\r\n * Common AIFF chunk header\r\n */\r\nexports.Header = {\r\n len: 8,\r\n get: (buf, off) => {\r\n return {\r\n // Chunk type ID\r\n chunkID: FourCC_1.FourCcToken.get(buf, off),\r\n // Chunk size\r\n chunkSize: Number(BigInt(Token.UINT32_BE.get(buf, off + 4)))\r\n };\r\n }\r\n};\r\n","\"use strict\";\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nexports.getLyricsHeaderLength = exports.endTag2 = void 0;\r\nexports.endTag2 = 'LYRICS200';\r\nasync function getLyricsHeaderLength(reader) {\r\n if (reader.fileSize >= 143) {\r\n const buf = Buffer.alloc(15);\r\n await reader.randomRead(buf, 0, buf.length, reader.fileSize - 143);\r\n const txt = buf.toString('binary');\r\n const tag = txt.substr(6);\r\n if (tag === exports.endTag2) {\r\n return parseInt(txt.substr(0, 6), 10) + 15;\r\n }\r\n }\r\n return 0;\r\n}\r\nexports.getLyricsHeaderLength = getLyricsHeaderLength;\r\n","\"use strict\";\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nexports.elements = void 0;\r\nconst types_1 = require(\"./types\");\r\n/**\r\n * Elements of document type description\r\n * Derived from https://github.com/tungol/EBML/blob/master/doctypes/matroska.dtd\r\n * Extended with:\r\n * - https://www.matroska.org/technical/specs/index.html\r\n */\r\nexports.elements = {\r\n 0x1a45dfa3: {\r\n name: 'ebml',\r\n container: {\r\n 0x4286: { name: 'ebmlVersion', value: types_1.DataType.uint },\r\n 0x42f7: { name: 'ebmlReadVersion', value: types_1.DataType.uint },\r\n 0x42f2: { name: 'ebmlMaxIDWidth', value: types_1.DataType.uint },\r\n 0x42f3: { name: 'ebmlMaxSizeWidth', value: types_1.DataType.uint },\r\n 0x4282: { name: 'docType', value: types_1.DataType.string },\r\n 0x4287: { name: 'docTypeVersion', value: types_1.DataType.uint },\r\n 0x4285: { name: 'docTypeReadVersion', value: types_1.DataType.uint } // 5.1.7\r\n }\r\n },\r\n // Matroska segments\r\n 0x18538067: {\r\n name: 'segment',\r\n container: {\r\n // Meta Seek Information\r\n 0x114d9b74: {\r\n name: 'seekHead',\r\n container: {\r\n 0x4dbb: {\r\n name: 'seek',\r\n container: {\r\n 0x53ab: { name: 'seekId', value: types_1.DataType.binary },\r\n 0x53ac: { name: 'seekPosition', value: types_1.DataType.uint }\r\n }\r\n }\r\n }\r\n },\r\n // Segment Information\r\n 0x1549a966: {\r\n name: 'info',\r\n container: {\r\n 0x73a4: { name: 'uid', value: types_1.DataType.uid },\r\n 0x7384: { name: 'filename', value: types_1.DataType.string },\r\n 0x3cb923: { name: 'prevUID', value: types_1.DataType.uid },\r\n 0x3c83ab: { name: 'prevFilename', value: types_1.DataType.string },\r\n 0x3eb923: { name: 'nextUID', value: types_1.DataType.uid },\r\n 0x3e83bb: { name: 'nextFilename', value: types_1.DataType.string },\r\n 0x2ad7b1: { name: 'timecodeScale', value: types_1.DataType.uint },\r\n 0x4489: { name: 'duration', value: types_1.DataType.float },\r\n 0x4461: { name: 'dateUTC', value: types_1.DataType.uint },\r\n 0x7ba9: { name: 'title', value: types_1.DataType.string },\r\n 0x4d80: { name: 'muxingApp', value: types_1.DataType.string },\r\n 0x5741: { name: 'writingApp', value: types_1.DataType.string }\r\n }\r\n },\r\n // Cluster\r\n 0x1f43b675: {\r\n name: 'cluster',\r\n multiple: true,\r\n container: {\r\n 0xe7: { name: 'timecode', value: types_1.DataType.uid },\r\n 0xa3: { name: 'unknown', value: types_1.DataType.binary },\r\n 0xa7: { name: 'position', value: types_1.DataType.uid },\r\n 0xab: { name: 'prevSize', value: types_1.DataType.uid }\r\n }\r\n },\r\n // Track\r\n 0x1654ae6b: {\r\n name: 'tracks',\r\n container: {\r\n 0xae: {\r\n name: 'entries',\r\n multiple: true,\r\n container: {\r\n 0xd7: { name: 'trackNumber', value: types_1.DataType.uint },\r\n 0x73c5: { name: 'uid', value: types_1.DataType.uid },\r\n 0x83: { name: 'trackType', value: types_1.DataType.uint },\r\n 0xb9: { name: 'flagEnabled', value: types_1.DataType.bool },\r\n 0x88: { name: 'flagDefault', value: types_1.DataType.bool },\r\n 0x55aa: { name: 'flagForced', value: types_1.DataType.bool },\r\n 0x9c: { name: 'flagLacing', value: types_1.DataType.bool },\r\n 0x6de7: { name: 'minCache', value: types_1.DataType.uint },\r\n 0x6de8: { name: 'maxCache', value: types_1.DataType.uint },\r\n 0x23e383: { name: 'defaultDuration', value: types_1.DataType.uint },\r\n 0x23314f: { name: 'timecodeScale', value: types_1.DataType.float },\r\n 0x536e: { name: 'name', value: types_1.DataType.string },\r\n 0x22b59c: { name: 'language', value: types_1.DataType.string },\r\n 0x86: { name: 'codecID', value: types_1.DataType.string },\r\n 0x63a2: { name: 'codecPrivate', value: types_1.DataType.binary },\r\n 0x258688: { name: 'codecName', value: types_1.DataType.string },\r\n 0x3a9697: { name: 'codecSettings', value: types_1.DataType.string },\r\n 0x3b4040: { name: 'codecInfoUrl', value: types_1.DataType.string },\r\n 0x26b240: { name: 'codecDownloadUrl', value: types_1.DataType.string },\r\n 0xaa: { name: 'codecDecodeAll', value: types_1.DataType.bool },\r\n 0x6fab: { name: 'trackOverlay', value: types_1.DataType.uint },\r\n // Video\r\n 0xe0: {\r\n name: 'video',\r\n container: {\r\n 0x9a: { name: 'flagInterlaced', value: types_1.DataType.bool },\r\n 0x53b8: { name: 'stereoMode', value: types_1.DataType.uint },\r\n 0xb0: { name: 'pixelWidth', value: types_1.DataType.uint },\r\n 0xba: { name: 'pixelHeight', value: types_1.DataType.uint },\r\n 0x54b0: { name: 'displayWidth', value: types_1.DataType.uint },\r\n 0x54ba: { name: 'displayHeight', value: types_1.DataType.uint },\r\n 0x54b3: { name: 'aspectRatioType', value: types_1.DataType.uint },\r\n 0x2eb524: { name: 'colourSpace', value: types_1.DataType.uint },\r\n 0x2fb523: { name: 'gammaValue', value: types_1.DataType.float }\r\n }\r\n },\r\n // Audio\r\n 0xe1: {\r\n name: 'audio',\r\n container: {\r\n 0xb5: { name: 'samplingFrequency', value: types_1.DataType.float },\r\n 0x78b5: { name: 'outputSamplingFrequency', value: types_1.DataType.float },\r\n 0x9f: { name: 'channels', value: types_1.DataType.uint },\r\n 0x94: { name: 'channels', value: types_1.DataType.uint },\r\n 0x7d7b: { name: 'channelPositions', value: types_1.DataType.binary },\r\n 0x6264: { name: 'bitDepth', value: types_1.DataType.uint }\r\n }\r\n },\r\n // Content Encoding\r\n 0x6d80: {\r\n name: 'contentEncodings',\r\n container: {\r\n 0x6240: {\r\n name: 'contentEncoding',\r\n container: {\r\n 0x5031: { name: 'order', value: types_1.DataType.uint },\r\n 0x5032: { name: 'scope', value: types_1.DataType.bool },\r\n 0x5033: { name: 'type', value: types_1.DataType.uint },\r\n 0x5034: {\r\n name: 'contentEncoding',\r\n container: {\r\n 0x4254: { name: 'contentCompAlgo', value: types_1.DataType.uint },\r\n 0x4255: { name: 'contentCompSettings', value: types_1.DataType.binary }\r\n }\r\n },\r\n 0x5035: {\r\n name: 'contentEncoding',\r\n container: {\r\n 0x47e1: { name: 'contentEncAlgo', value: types_1.DataType.uint },\r\n 0x47e2: { name: 'contentEncKeyID', value: types_1.DataType.binary },\r\n 0x47e3: { name: 'contentSignature ', value: types_1.DataType.binary },\r\n 0x47e4: { name: 'ContentSigKeyID ', value: types_1.DataType.binary },\r\n 0x47e5: { name: 'contentSigAlgo ', value: types_1.DataType.uint },\r\n 0x47e6: { name: 'contentSigHashAlgo ', value: types_1.DataType.uint }\r\n }\r\n },\r\n 0x6264: { name: 'bitDepth', value: types_1.DataType.uint }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n },\r\n // Cueing Data\r\n 0x1c53bb6b: {\r\n name: 'cues',\r\n container: {\r\n 0xbb: {\r\n name: 'cuePoint',\r\n container: {\r\n 0xb3: { name: 'cueTime', value: types_1.DataType.uid },\r\n 0xb7: {\r\n name: 'positions',\r\n container: {\r\n 0xf7: { name: 'track', value: types_1.DataType.uint },\r\n 0xf1: { name: 'clusterPosition', value: types_1.DataType.uint },\r\n 0x5378: { name: 'blockNumber', value: types_1.DataType.uint },\r\n 0xea: { name: 'codecState', value: types_1.DataType.uint },\r\n 0xdb: {\r\n name: 'reference', container: {\r\n 0x96: { name: 'time', value: types_1.DataType.uint },\r\n 0x97: { name: 'cluster', value: types_1.DataType.uint },\r\n 0x535f: { name: 'number', value: types_1.DataType.uint },\r\n 0xeb: { name: 'codecState', value: types_1.DataType.uint }\r\n }\r\n },\r\n 0xf0: { name: 'relativePosition', value: types_1.DataType.uint } // extended\r\n }\r\n }\r\n }\r\n }\r\n }\r\n },\r\n // Attachment\r\n 0x1941a469: {\r\n name: 'attachments',\r\n container: {\r\n 0x61a7: {\r\n name: 'attachedFiles',\r\n multiple: true,\r\n container: {\r\n 0x467e: { name: 'description', value: types_1.DataType.string },\r\n 0x466e: { name: 'name', value: types_1.DataType.string },\r\n 0x4660: { name: 'mimeType', value: types_1.DataType.string },\r\n 0x465c: { name: 'data', value: types_1.DataType.binary },\r\n 0x46ae: { name: 'uid', value: types_1.DataType.uid }\r\n }\r\n }\r\n }\r\n },\r\n // Chapters\r\n 0x1043a770: {\r\n name: 'chapters',\r\n container: {\r\n 0x45b9: {\r\n name: 'editionEntry',\r\n container: {\r\n 0xb6: {\r\n name: 'chapterAtom',\r\n container: {\r\n 0x73c4: { name: 'uid', value: types_1.DataType.uid },\r\n 0x91: { name: 'timeStart', value: types_1.DataType.uint },\r\n 0x92: { name: 'timeEnd', value: types_1.DataType.uid },\r\n 0x98: { name: 'hidden', value: types_1.DataType.bool },\r\n 0x4598: { name: 'enabled', value: types_1.DataType.uid },\r\n 0x8f: { name: 'track', container: {\r\n 0x89: { name: 'trackNumber', value: types_1.DataType.uid },\r\n 0x80: {\r\n name: 'display', container: {\r\n 0x85: { name: 'string', value: types_1.DataType.string },\r\n 0x437c: { name: 'language ', value: types_1.DataType.string },\r\n 0x437e: { name: 'country ', value: types_1.DataType.string }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n },\r\n // Tagging\r\n 0x1254c367: {\r\n name: 'tags',\r\n container: {\r\n 0x7373: {\r\n name: 'tag',\r\n multiple: true,\r\n container: {\r\n 0x63c0: {\r\n name: 'target',\r\n container: {\r\n 0x63c5: { name: 'tagTrackUID', value: types_1.DataType.uid },\r\n 0x63c4: { name: 'tagChapterUID', value: types_1.DataType.uint },\r\n 0x63c6: { name: 'tagAttachmentUID', value: types_1.DataType.uid },\r\n 0x63ca: { name: 'targetType', value: types_1.DataType.string },\r\n 0x68ca: { name: 'targetTypeValue', value: types_1.DataType.uint },\r\n 0x63c9: { name: 'tagEditionUID', value: types_1.DataType.uid } // extended\r\n }\r\n },\r\n 0x67c8: {\r\n name: 'simpleTags',\r\n multiple: true,\r\n container: {\r\n 0x45a3: { name: 'name', value: types_1.DataType.string },\r\n 0x4487: { name: 'string', value: types_1.DataType.string },\r\n 0x4485: { name: 'binary', value: types_1.DataType.binary },\r\n 0x447a: { name: 'language', value: types_1.DataType.string },\r\n 0x447b: { name: 'languageIETF', value: types_1.DataType.string },\r\n 0x4484: { name: 'default', value: types_1.DataType.bool } // extended\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n};\r\n","\"use strict\";\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nexports.MatroskaParser = void 0;\r\nconst token_types_1 = require(\"token-types\");\r\nconst debug_1 = require(\"debug\");\r\nconst BasicParser_1 = require(\"../common/BasicParser\");\r\nconst types_1 = require(\"./types\");\r\nconst matroskaDtd = require(\"./MatroskaDtd\");\r\nconst debug = (0, debug_1.default)('music-metadata:parser:matroska');\r\n/**\r\n * Extensible Binary Meta Language (EBML) parser\r\n * https://en.wikipedia.org/wiki/Extensible_Binary_Meta_Language\r\n * http://matroska.sourceforge.net/technical/specs/rfc/index.html\r\n *\r\n * WEBM VP8 AUDIO FILE\r\n */\r\nclass MatroskaParser extends BasicParser_1.BasicParser {\r\n constructor() {\r\n super();\r\n this.padding = 0;\r\n this.parserMap = new Map();\r\n this.ebmlMaxIDLength = 4;\r\n this.ebmlMaxSizeLength = 8;\r\n this.parserMap.set(types_1.DataType.uint, e => this.readUint(e));\r\n this.parserMap.set(types_1.DataType.string, e => this.readString(e));\r\n this.parserMap.set(types_1.DataType.binary, e => this.readBuffer(e));\r\n this.parserMap.set(types_1.DataType.uid, async (e) => await this.readUint(e) === 1);\r\n this.parserMap.set(types_1.DataType.bool, e => this.readFlag(e));\r\n this.parserMap.set(types_1.DataType.float, e => this.readFloat(e));\r\n }\r\n /**\r\n * Initialize parser with output (metadata), input (tokenizer) & parsing options (options).\r\n * @param {INativeMetadataCollector} metadata Output\r\n * @param {ITokenizer} tokenizer Input\r\n * @param {IOptions} options Parsing options\r\n */\r\n init(metadata, tokenizer, options) {\r\n super.init(metadata, tokenizer, options);\r\n return this;\r\n }\r\n async parse() {\r\n const matroska = await this.parseContainer(matroskaDtd.elements, this.tokenizer.fileInfo.size, []);\r\n this.metadata.setFormat('container', `EBML/${matroska.ebml.docType}`);\r\n if (matroska.segment) {\r\n const info = matroska.segment.info;\r\n if (info) {\r\n const timecodeScale = info.timecodeScale ? info.timecodeScale : 1000000;\r\n const duration = info.duration * timecodeScale / 1000000000;\r\n this.addTag('segment:title', info.title);\r\n this.metadata.setFormat('duration', duration);\r\n }\r\n const audioTracks = matroska.segment.tracks;\r\n if (audioTracks && audioTracks.entries) {\r\n audioTracks.entries.forEach(entry => {\r\n const stream = {\r\n codecName: entry.codecID.replace('A_', '').replace('V_', ''),\r\n codecSettings: entry.codecSettings,\r\n flagDefault: entry.flagDefault,\r\n flagLacing: entry.flagLacing,\r\n flagEnabled: entry.flagEnabled,\r\n language: entry.language,\r\n name: entry.name,\r\n type: entry.trackType,\r\n audio: entry.audio,\r\n video: entry.video\r\n };\r\n this.metadata.addStreamInfo(stream);\r\n });\r\n const audioTrack = audioTracks.entries\r\n .filter(entry => {\r\n return entry.trackType === types_1.TrackType.audio.valueOf();\r\n })\r\n .reduce((acc, cur) => {\r\n if (!acc) {\r\n return cur;\r\n }\r\n if (!acc.flagDefault && cur.flagDefault) {\r\n return cur;\r\n }\r\n if (cur.trackNumber && cur.trackNumber < acc.trackNumber) {\r\n return cur;\r\n }\r\n return acc;\r\n }, null);\r\n if (audioTrack) {\r\n this.metadata.setFormat('codec', audioTrack.codecID.replace('A_', ''));\r\n this.metadata.setFormat('sampleRate', audioTrack.audio.samplingFrequency);\r\n this.metadata.setFormat('numberOfChannels', audioTrack.audio.channels);\r\n }\r\n if (matroska.segment.tags) {\r\n matroska.segment.tags.tag.forEach(tag => {\r\n const target = tag.target;\r\n const targetType = (target === null || target === void 0 ? void 0 : target.targetTypeValue) ? types_1.TargetType[target.targetTypeValue] : ((target === null || target === void 0 ? void 0 : target.targetType) ? target.targetType : 'track');\r\n tag.simpleTags.forEach(simpleTag => {\r\n const value = simpleTag.string ? simpleTag.string : simpleTag.binary;\r\n this.addTag(`${targetType}:${simpleTag.name}`, value);\r\n });\r\n });\r\n }\r\n if (matroska.segment.attachments) {\r\n matroska.segment.attachments.attachedFiles\r\n .filter(file => file.mimeType.startsWith('image/'))\r\n .map(file => {\r\n return {\r\n data: file.data,\r\n format: file.mimeType,\r\n description: file.description,\r\n name: file.name\r\n };\r\n }).forEach(picture => {\r\n this.addTag('picture', picture);\r\n });\r\n }\r\n }\r\n }\r\n }\r\n async parseContainer(container, posDone, path) {\r\n const tree = {};\r\n while (this.tokenizer.position < posDone) {\r\n let element;\r\n try {\r\n element = await this.readElement();\r\n }\r\n catch (error) {\r\n if (error.message === 'End-Of-Stream') {\r\n break;\r\n }\r\n throw error;\r\n }\r\n const type = container[element.id];\r\n if (type) {\r\n debug(`Element: name=${type.name}, container=${!!type.container}`);\r\n if (type.container) {\r\n const res = await this.parseContainer(type.container, element.len >= 0 ? this.tokenizer.position + element.len : -1, path.concat([type.name]));\r\n if (type.multiple) {\r\n if (!tree[type.name]) {\r\n tree[type.name] = [];\r\n }\r\n tree[type.name].push(res);\r\n }\r\n else {\r\n tree[type.name] = res;\r\n }\r\n }\r\n else {\r\n tree[type.name] = await this.parserMap.get(type.value)(element);\r\n }\r\n }\r\n else {\r\n switch (element.id) {\r\n case 0xec: // void\r\n this.padding += element.len;\r\n await this.tokenizer.ignore(element.len);\r\n break;\r\n default:\r\n debug(`parseEbml: path=${path.join('/')}, unknown element: id=${element.id.toString(16)}`);\r\n this.padding += element.len;\r\n await this.tokenizer.ignore(element.len);\r\n }\r\n }\r\n }\r\n return tree;\r\n }\r\n async readVintData(maxLength) {\r\n const msb = await this.tokenizer.peekNumber(token_types_1.UINT8);\r\n let mask = 0x80;\r\n let oc = 1;\r\n // Calculate VINT_WIDTH\r\n while ((msb & mask) === 0) {\r\n if (oc > maxLength) {\r\n throw new Error('VINT value exceeding maximum size');\r\n }\r\n ++oc;\r\n mask >>= 1;\r\n }\r\n const id = Buffer.alloc(oc);\r\n await this.tokenizer.readBuffer(id);\r\n return id;\r\n }\r\n async readElement() {\r\n const id = await this.readVintData(this.ebmlMaxIDLength);\r\n const lenField = await this.readVintData(this.ebmlMaxSizeLength);\r\n lenField[0] ^= 0x80 >> (lenField.length - 1);\r\n const nrLen = Math.min(6, lenField.length); // JavaScript can max read 6 bytes integer\r\n return {\r\n id: id.readUIntBE(0, id.length),\r\n len: lenField.readUIntBE(lenField.length - nrLen, nrLen)\r\n };\r\n }\r\n isMaxValue(vintData) {\r\n if (vintData.length === this.ebmlMaxSizeLength) {\r\n for (let n = 1; n < this.ebmlMaxSizeLength; ++n) {\r\n if (vintData[n] !== 0xff)\r\n return false;\r\n }\r\n return true;\r\n }\r\n return false;\r\n }\r\n async readFloat(e) {\r\n switch (e.len) {\r\n case 0:\r\n return 0.0;\r\n case 4:\r\n return this.tokenizer.readNumber(token_types_1.Float32_BE);\r\n case 8:\r\n return this.tokenizer.readNumber(token_types_1.Float64_BE);\r\n case 10:\r\n return this.tokenizer.readNumber(token_types_1.Float64_BE);\r\n default:\r\n throw new Error(`Invalid IEEE-754 float length: ${e.len}`);\r\n }\r\n }\r\n async readFlag(e) {\r\n return (await this.readUint(e)) === 1;\r\n }\r\n async readUint(e) {\r\n const buf = await this.readBuffer(e);\r\n const nrLen = Math.min(6, e.len); // JavaScript can max read 6 bytes integer\r\n return buf.readUIntBE(e.len - nrLen, nrLen);\r\n }\r\n async readString(e) {\r\n const rawString = await this.tokenizer.readToken(new token_types_1.StringType(e.len, 'utf-8'));\r\n return rawString.replace(/\\00.*$/g, '');\r\n }\r\n async readBuffer(e) {\r\n const buf = Buffer.alloc(e.len);\r\n await this.tokenizer.readBuffer(buf);\r\n return buf;\r\n }\r\n addTag(tagId, value) {\r\n this.metadata.addTag('matroska', tagId, value);\r\n }\r\n}\r\nexports.MatroskaParser = MatroskaParser;\r\n","\"use strict\";\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nexports.MatroskaTagMapper = void 0;\r\nconst CaseInsensitiveTagMap_1 = require(\"../common/CaseInsensitiveTagMap\");\r\n/**\r\n * EBML Tag map\r\n */\r\nconst ebmlTagMap = {\r\n 'segment:title': 'title',\r\n 'album:ARTIST': 'albumartist',\r\n 'album:ARTISTSORT': 'albumartistsort',\r\n 'album:TITLE': 'album',\r\n 'album:DATE_RECORDED': 'originaldate',\r\n 'album:PART_NUMBER': 'disk',\r\n 'album:TOTAL_PARTS': 'totaltracks',\r\n 'track:ARTIST': 'artist',\r\n 'track:ARTISTSORT': 'artistsort',\r\n 'track:TITLE': 'title',\r\n 'track:PART_NUMBER': 'track',\r\n 'track:MUSICBRAINZ_TRACKID': 'musicbrainz_recordingid',\r\n 'track:MUSICBRAINZ_ALBUMID': 'musicbrainz_albumid',\r\n 'track:MUSICBRAINZ_ARTISTID': 'musicbrainz_artistid',\r\n 'track:PUBLISHER': 'label',\r\n 'track:GENRE': 'genre',\r\n 'track:ENCODER': 'encodedby',\r\n 'track:ENCODER_OPTIONS': 'encodersettings',\r\n 'edition:TOTAL_PARTS': 'totaldiscs',\r\n picture: 'picture'\r\n};\r\nclass MatroskaTagMapper extends CaseInsensitiveTagMap_1.CaseInsensitiveTagMap {\r\n constructor() {\r\n super(['matroska'], ebmlTagMap);\r\n }\r\n}\r\nexports.MatroskaTagMapper = MatroskaTagMapper;\r\n//# sourceMappingURL=MatroskaTagMapper.js.map","\"use strict\";\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nexports.TrackType = exports.TargetType = exports.DataType = void 0;\r\nvar DataType;\r\n(function (DataType) {\r\n DataType[DataType[\"string\"] = 0] = \"string\";\r\n DataType[DataType[\"uint\"] = 1] = \"uint\";\r\n DataType[DataType[\"uid\"] = 2] = \"uid\";\r\n DataType[DataType[\"bool\"] = 3] = \"bool\";\r\n DataType[DataType[\"binary\"] = 4] = \"binary\";\r\n DataType[DataType[\"float\"] = 5] = \"float\";\r\n})(DataType = exports.DataType || (exports.DataType = {}));\r\nvar TargetType;\r\n(function (TargetType) {\r\n TargetType[TargetType[\"shot\"] = 10] = \"shot\";\r\n TargetType[TargetType[\"scene\"] = 20] = \"scene\";\r\n TargetType[TargetType[\"track\"] = 30] = \"track\";\r\n TargetType[TargetType[\"part\"] = 40] = \"part\";\r\n TargetType[TargetType[\"album\"] = 50] = \"album\";\r\n TargetType[TargetType[\"edition\"] = 60] = \"edition\";\r\n TargetType[TargetType[\"collection\"] = 70] = \"collection\";\r\n})(TargetType = exports.TargetType || (exports.TargetType = {}));\r\nvar TrackType;\r\n(function (TrackType) {\r\n TrackType[TrackType[\"video\"] = 1] = \"video\";\r\n TrackType[TrackType[\"audio\"] = 2] = \"audio\";\r\n TrackType[TrackType[\"complex\"] = 3] = \"complex\";\r\n TrackType[TrackType[\"logo\"] = 4] = \"logo\";\r\n TrackType[TrackType[\"subtitle\"] = 17] = \"subtitle\";\r\n TrackType[TrackType[\"button\"] = 18] = \"button\";\r\n TrackType[TrackType[\"control\"] = 32] = \"control\";\r\n})(TrackType = exports.TrackType || (exports.TrackType = {}));\r\n//# sourceMappingURL=types.js.map","\"use strict\";\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nexports.Atom = void 0;\r\nconst debug_1 = require(\"debug\");\r\nconst AtomToken = require(\"./AtomToken\");\r\nconst debug = (0, debug_1.default)('music-metadata:parser:MP4:Atom');\r\nclass Atom {\r\n constructor(header, extended, parent) {\r\n this.header = header;\r\n this.extended = extended;\r\n this.parent = parent;\r\n this.children = [];\r\n this.atomPath = (this.parent ? this.parent.atomPath + '.' : '') + this.header.name;\r\n }\r\n static async readAtom(tokenizer, dataHandler, parent, remaining) {\r\n // Parse atom header\r\n const offset = tokenizer.position;\r\n // debug(`Reading next token on offset=${offset}...`); // buf.toString('ascii')\r\n const header = await tokenizer.readToken(AtomToken.Header);\r\n const extended = header.length === BigInt(1);\r\n if (extended) {\r\n header.length = await tokenizer.readToken(AtomToken.ExtendedSize);\r\n }\r\n const atomBean = new Atom(header, header.length === BigInt(1), parent);\r\n const payloadLength = atomBean.getPayloadLength(remaining);\r\n debug(`parse atom name=${atomBean.atomPath}, extended=${atomBean.extended}, offset=${offset}, len=${atomBean.header.length}`); // buf.toString('ascii')\r\n await atomBean.readData(tokenizer, dataHandler, payloadLength);\r\n return atomBean;\r\n }\r\n getHeaderLength() {\r\n return this.extended ? 16 : 8;\r\n }\r\n getPayloadLength(remaining) {\r\n return (this.header.length === BigInt(0) ? remaining : Number(this.header.length)) - this.getHeaderLength();\r\n }\r\n async readAtoms(tokenizer, dataHandler, size) {\r\n while (size > 0) {\r\n const atomBean = await Atom.readAtom(tokenizer, dataHandler, this, size);\r\n this.children.push(atomBean);\r\n size -= atomBean.header.length === BigInt(0) ? size : Number(atomBean.header.length);\r\n }\r\n }\r\n async readData(tokenizer, dataHandler, remaining) {\r\n switch (this.header.name) {\r\n // \"Container\" atoms, contains nested atoms\r\n case 'moov': // The Movie Atom: contains other atoms\r\n case 'udta': // User defined atom\r\n case 'trak':\r\n case 'mdia': // Media atom\r\n case 'minf': // Media Information Atom\r\n case 'stbl': // The Sample Table Atom\r\n case '':\r\n case 'ilst':\r\n case 'tref':\r\n return this.readAtoms(tokenizer, dataHandler, this.getPayloadLength(remaining));\r\n case 'meta': // Metadata Atom, ref: https://developer.apple.com/library/content/documentation/QuickTime/QTFF/Metadata/Metadata.html#//apple_ref/doc/uid/TP40000939-CH1-SW8\r\n // meta has 4 bytes of padding, ignore\r\n await tokenizer.ignore(4);\r\n return this.readAtoms(tokenizer, dataHandler, this.getPayloadLength(remaining) - 4);\r\n case 'mdhd': // Media header atom\r\n case 'mvhd': // 'movie' => 'mvhd': movie header atom; child of Movie Atom\r\n case 'tkhd':\r\n case 'stsz':\r\n case 'mdat':\r\n default:\r\n return dataHandler(this, remaining);\r\n }\r\n }\r\n}\r\nexports.Atom = Atom;\r\n","\"use strict\";\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nexports.ChapterText = exports.StcoAtom = exports.StszAtom = exports.StscAtom = exports.SampleToChunkToken = exports.SttsAtom = exports.TimeToSampleToken = exports.SoundSampleDescriptionV0 = exports.SoundSampleDescriptionVersion = exports.StsdAtom = exports.TrackHeaderAtom = exports.NameAtom = exports.DataAtom = exports.MvhdAtom = exports.MdhdAtom = exports.FixedLengthAtom = exports.mhdr = exports.tkhd = exports.ftyp = exports.ExtendedSize = exports.Header = void 0;\r\nconst Token = require(\"token-types\");\r\nconst debug_1 = require(\"debug\");\r\nconst FourCC_1 = require(\"../common/FourCC\");\r\nconst debug = (0, debug_1.default)('music-metadata:parser:MP4:atom');\r\nexports.Header = {\r\n len: 8,\r\n get: (buf, off) => {\r\n const length = Token.UINT32_BE.get(buf, off);\r\n if (length < 0)\r\n throw new Error('Invalid atom header length');\r\n return {\r\n length: BigInt(length),\r\n name: new Token.StringType(4, 'binary').get(buf, off + 4)\r\n };\r\n },\r\n put: (buf, off, hdr) => {\r\n Token.UINT32_BE.put(buf, off, Number(hdr.length));\r\n return FourCC_1.FourCcToken.put(buf, off + 4, hdr.name);\r\n }\r\n};\r\n/**\r\n * Ref: https://developer.apple.com/library/archive/documentation/QuickTime/QTFF/QTFFChap1/qtff1.html#//apple_ref/doc/uid/TP40000939-CH203-38190\r\n */\r\nexports.ExtendedSize = Token.UINT64_BE;\r\nexports.ftyp = {\r\n len: 4,\r\n get: (buf, off) => {\r\n return {\r\n type: new Token.StringType(4, 'ascii').get(buf, off)\r\n };\r\n }\r\n};\r\nexports.tkhd = {\r\n len: 4,\r\n get: (buf, off) => {\r\n return {\r\n type: new Token.StringType(4, 'ascii').get(buf, off)\r\n };\r\n }\r\n};\r\n/**\r\n * Token: Movie Header Atom\r\n */\r\nexports.mhdr = {\r\n len: 8,\r\n get: (buf, off) => {\r\n return {\r\n version: Token.UINT8.get(buf, off),\r\n flags: Token.UINT24_BE.get(buf, off + 1),\r\n nextItemID: Token.UINT32_BE.get(buf, off + 4)\r\n };\r\n }\r\n};\r\n/**\r\n * Base class for 'fixed' length atoms.\r\n * In some cases these atoms are longer then the sum of the described fields.\r\n * Issue: https://github.com/Borewit/music-metadata/issues/120\r\n */\r\nclass FixedLengthAtom {\r\n /**\r\n *\r\n * @param {number} len Length as specified in the size field\r\n * @param {number} expLen Total length of sum of specified fields in the standard\r\n */\r\n constructor(len, expLen, atomId) {\r\n this.len = len;\r\n if (len < expLen) {\r\n throw new Error(`Atom ${atomId} expected to be ${expLen}, but specifies ${len} bytes long.`);\r\n }\r\n else if (len > expLen) {\r\n debug(`Warning: atom ${atomId} expected to be ${expLen}, but was actually ${len} bytes long.`);\r\n }\r\n }\r\n}\r\nexports.FixedLengthAtom = FixedLengthAtom;\r\n/**\r\n * Timestamp stored in seconds since Mac Epoch (1 January 1904)\r\n */\r\nconst SecondsSinceMacEpoch = {\r\n len: 4,\r\n get: (buf, off) => {\r\n const secondsSinceUnixEpoch = Token.UINT32_BE.get(buf, off) - 2082844800;\r\n return new Date(secondsSinceUnixEpoch * 1000);\r\n }\r\n};\r\n/**\r\n * Token: Media Header Atom\r\n * Ref:\r\n * - https://developer.apple.com/library/archive/documentation/QuickTime/QTFF/QTFFChap2/qtff2.html#//apple_ref/doc/uid/TP40000939-CH204-SW34\r\n * - https://wiki.multimedia.cx/index.php/QuickTime_container#mdhd\r\n */\r\nclass MdhdAtom extends FixedLengthAtom {\r\n constructor(len) {\r\n super(len, 24, 'mdhd');\r\n this.len = len;\r\n }\r\n get(buf, off) {\r\n return {\r\n version: Token.UINT8.get(buf, off + 0),\r\n flags: Token.UINT24_BE.get(buf, off + 1),\r\n creationTime: SecondsSinceMacEpoch.get(buf, off + 4),\r\n modificationTime: SecondsSinceMacEpoch.get(buf, off + 8),\r\n timeScale: Token.UINT32_BE.get(buf, off + 12),\r\n duration: Token.UINT32_BE.get(buf, off + 16),\r\n language: Token.UINT16_BE.get(buf, off + 20),\r\n quality: Token.UINT16_BE.get(buf, off + 22)\r\n };\r\n }\r\n}\r\nexports.MdhdAtom = MdhdAtom;\r\n/**\r\n * Token: Movie Header Atom\r\n */\r\nclass MvhdAtom extends FixedLengthAtom {\r\n constructor(len) {\r\n super(len, 100, 'mvhd');\r\n this.len = len;\r\n }\r\n get(buf, off) {\r\n return {\r\n version: Token.UINT8.get(buf, off),\r\n flags: Token.UINT24_BE.get(buf, off + 1),\r\n creationTime: SecondsSinceMacEpoch.get(buf, off + 4),\r\n modificationTime: SecondsSinceMacEpoch.get(buf, off + 8),\r\n timeScale: Token.UINT32_BE.get(buf, off + 12),\r\n duration: Token.UINT32_BE.get(buf, off + 16),\r\n preferredRate: Token.UINT32_BE.get(buf, off + 20),\r\n preferredVolume: Token.UINT16_BE.get(buf, off + 24),\r\n // ignore reserver: 10 bytes\r\n // ignore matrix structure: 36 bytes\r\n previewTime: Token.UINT32_BE.get(buf, off + 72),\r\n previewDuration: Token.UINT32_BE.get(buf, off + 76),\r\n posterTime: Token.UINT32_BE.get(buf, off + 80),\r\n selectionTime: Token.UINT32_BE.get(buf, off + 84),\r\n selectionDuration: Token.UINT32_BE.get(buf, off + 88),\r\n currentTime: Token.UINT32_BE.get(buf, off + 92),\r\n nextTrackID: Token.UINT32_BE.get(buf, off + 96)\r\n };\r\n }\r\n}\r\nexports.MvhdAtom = MvhdAtom;\r\n/**\r\n * Data Atom Structure\r\n */\r\nclass DataAtom {\r\n constructor(len) {\r\n this.len = len;\r\n }\r\n get(buf, off) {\r\n return {\r\n type: {\r\n set: Token.UINT8.get(buf, off + 0),\r\n type: Token.UINT24_BE.get(buf, off + 1)\r\n },\r\n locale: Token.UINT24_BE.get(buf, off + 4),\r\n value: Buffer.from(new Token.Uint8ArrayType(this.len - 8).get(buf, off + 8))\r\n };\r\n }\r\n}\r\nexports.DataAtom = DataAtom;\r\n/**\r\n * Data Atom Structure\r\n * Ref: https://developer.apple.com/library/content/documentation/QuickTime/QTFF/Metadata/Metadata.html#//apple_ref/doc/uid/TP40000939-CH1-SW31\r\n */\r\nclass NameAtom {\r\n constructor(len) {\r\n this.len = len;\r\n }\r\n get(buf, off) {\r\n return {\r\n version: Token.UINT8.get(buf, off),\r\n flags: Token.UINT24_BE.get(buf, off + 1),\r\n name: new Token.StringType(this.len - 4, 'utf-8').get(buf, off + 4)\r\n };\r\n }\r\n}\r\nexports.NameAtom = NameAtom;\r\n/**\r\n * Track Header Atoms structure\r\n * Ref: https://developer.apple.com/library/content/documentation/QuickTime/QTFF/QTFFChap2/qtff2.html#//apple_ref/doc/uid/TP40000939-CH204-25550\r\n */\r\nclass TrackHeaderAtom {\r\n constructor(len) {\r\n this.len = len;\r\n }\r\n get(buf, off) {\r\n return {\r\n version: Token.UINT8.get(buf, off),\r\n flags: Token.UINT24_BE.get(buf, off + 1),\r\n creationTime: SecondsSinceMacEpoch.get(buf, off + 4),\r\n modificationTime: SecondsSinceMacEpoch.get(buf, off + 8),\r\n trackId: Token.UINT32_BE.get(buf, off + 12),\r\n // reserved 4 bytes\r\n duration: Token.UINT32_BE.get(buf, off + 20),\r\n layer: Token.UINT16_BE.get(buf, off + 24),\r\n alternateGroup: Token.UINT16_BE.get(buf, off + 26),\r\n volume: Token.UINT16_BE.get(buf, off + 28) // ToDo: fixed point\r\n // ToDo: add remaining fields\r\n };\r\n }\r\n}\r\nexports.TrackHeaderAtom = TrackHeaderAtom;\r\n/**\r\n * Atom: Sample Description Atom ('stsd')\r\n * Ref: https://developer.apple.com/library/archive/documentation/QuickTime/QTFF/QTFFChap2/qtff2.html#//apple_ref/doc/uid/TP40000939-CH204-25691\r\n */\r\nconst stsdHeader = {\r\n len: 8,\r\n get: (buf, off) => {\r\n return {\r\n version: Token.UINT8.get(buf, off),\r\n flags: Token.UINT24_BE.get(buf, off + 1),\r\n numberOfEntries: Token.UINT32_BE.get(buf, off + 4)\r\n };\r\n }\r\n};\r\n/**\r\n * Atom: Sample Description Atom ('stsd')\r\n * Ref: https://developer.apple.com/library/archive/documentation/QuickTime/QTFF/QTFFChap2/qtff2.html#//apple_ref/doc/uid/TP40000939-CH204-25691\r\n */\r\nclass SampleDescriptionTable {\r\n constructor(len) {\r\n this.len = len;\r\n }\r\n get(buf, off) {\r\n return {\r\n dataFormat: FourCC_1.FourCcToken.get(buf, off),\r\n dataReferenceIndex: Token.UINT16_BE.get(buf, off + 10),\r\n description: new Token.Uint8ArrayType(this.len - 12).get(buf, off + 12)\r\n };\r\n }\r\n}\r\n/**\r\n * Atom: Sample-description Atom ('stsd')\r\n * Ref: https://developer.apple.com/library/archive/documentation/QuickTime/QTFF/QTFFChap2/qtff2.html#//apple_ref/doc/uid/TP40000939-CH204-25691\r\n */\r\nclass StsdAtom {\r\n constructor(len) {\r\n this.len = len;\r\n }\r\n get(buf, off) {\r\n const header = stsdHeader.get(buf, off);\r\n off += stsdHeader.len;\r\n const table = [];\r\n for (let n = 0; n < header.numberOfEntries; ++n) {\r\n const size = Token.UINT32_BE.get(buf, off); // Sample description size\r\n off += Token.UINT32_BE.len;\r\n table.push(new SampleDescriptionTable(size).get(buf, off));\r\n off += size;\r\n }\r\n return {\r\n header,\r\n table\r\n };\r\n }\r\n}\r\nexports.StsdAtom = StsdAtom;\r\n/**\r\n * Common Sound Sample Description (version & revision)\r\n * Ref: https://developer.apple.com/library/archive/documentation/QuickTime/QTFF/QTFFChap3/qtff3.html#//apple_ref/doc/uid/TP40000939-CH205-57317\r\n */\r\nexports.SoundSampleDescriptionVersion = {\r\n len: 8,\r\n get(buf, off) {\r\n return {\r\n version: Token.INT16_BE.get(buf, off),\r\n revision: Token.INT16_BE.get(buf, off + 2),\r\n vendor: Token.INT32_BE.get(buf, off + 4)\r\n };\r\n }\r\n};\r\n/**\r\n * Sound Sample Description (Version 0)\r\n * Ref: https://developer.apple.com/library/archive/documentation/QuickTime/QTFF/QTFFChap3/qtff3.html#//apple_ref/doc/uid/TP40000939-CH205-130736\r\n */\r\nexports.SoundSampleDescriptionV0 = {\r\n len: 12,\r\n get(buf, off) {\r\n return {\r\n numAudioChannels: Token.INT16_BE.get(buf, off + 0),\r\n sampleSize: Token.INT16_BE.get(buf, off + 2),\r\n compressionId: Token.INT16_BE.get(buf, off + 4),\r\n packetSize: Token.INT16_BE.get(buf, off + 6),\r\n sampleRate: Token.UINT16_BE.get(buf, off + 8) + Token.UINT16_BE.get(buf, off + 10) / 10000\r\n };\r\n }\r\n};\r\nclass SimpleTableAtom {\r\n constructor(len, token) {\r\n this.len = len;\r\n this.token = token;\r\n }\r\n get(buf, off) {\r\n const nrOfEntries = Token.INT32_BE.get(buf, off + 4);\r\n return {\r\n version: Token.INT8.get(buf, off + 0),\r\n flags: Token.INT24_BE.get(buf, off + 1),\r\n numberOfEntries: nrOfEntries,\r\n entries: readTokenTable(buf, this.token, off + 8, this.len - 8, nrOfEntries)\r\n };\r\n }\r\n}\r\nexports.TimeToSampleToken = {\r\n len: 8,\r\n get(buf, off) {\r\n return {\r\n count: Token.INT32_BE.get(buf, off + 0),\r\n duration: Token.INT32_BE.get(buf, off + 4)\r\n };\r\n }\r\n};\r\n/**\r\n * Time-to-sample('stts') atom.\r\n * Store duration information for a media’s samples.\r\n * Ref: https://developer.apple.com/library/archive/documentation/QuickTime/QTFF/QTFFChap2/qtff2.html#//apple_ref/doc/uid/TP40000939-CH204-25696\r\n */\r\nclass SttsAtom extends SimpleTableAtom {\r\n constructor(len) {\r\n super(len, exports.TimeToSampleToken);\r\n this.len = len;\r\n }\r\n}\r\nexports.SttsAtom = SttsAtom;\r\nexports.SampleToChunkToken = {\r\n len: 12,\r\n get(buf, off) {\r\n return {\r\n firstChunk: Token.INT32_BE.get(buf, off),\r\n samplesPerChunk: Token.INT32_BE.get(buf, off + 4),\r\n sampleDescriptionId: Token.INT32_BE.get(buf, off + 8)\r\n };\r\n }\r\n};\r\n/**\r\n * Sample-to-Chunk ('stsc') atom interface\r\n * Ref: https://developer.apple.com/library/archive/documentation/QuickTime/QTFF/QTFFChap2/qtff2.html#//apple_ref/doc/uid/TP40000939-CH204-25706\r\n */\r\nclass StscAtom extends SimpleTableAtom {\r\n constructor(len) {\r\n super(len, exports.SampleToChunkToken);\r\n this.len = len;\r\n }\r\n}\r\nexports.StscAtom = StscAtom;\r\n/**\r\n * Sample-size ('stsz') atom\r\n * Ref: https://developer.apple.com/library/archive/documentation/QuickTime/QTFF/QTFFChap2/qtff2.html#//apple_ref/doc/uid/TP40000939-CH204-25710\r\n */\r\nclass StszAtom {\r\n constructor(len) {\r\n this.len = len;\r\n }\r\n get(buf, off) {\r\n const nrOfEntries = Token.INT32_BE.get(buf, off + 8);\r\n return {\r\n version: Token.INT8.get(buf, off),\r\n flags: Token.INT24_BE.get(buf, off + 1),\r\n sampleSize: Token.INT32_BE.get(buf, off + 4),\r\n numberOfEntries: nrOfEntries,\r\n entries: readTokenTable(buf, Token.INT32_BE, off + 12, this.len - 12, nrOfEntries)\r\n };\r\n }\r\n}\r\nexports.StszAtom = StszAtom;\r\n/**\r\n * Chunk offset atom, 'stco'\r\n * Ref: https://developer.apple.com/library/archive/documentation/QuickTime/QTFF/QTFFChap2/qtff2.html#//apple_ref/doc/uid/TP40000939-CH204-25715\r\n */\r\nclass StcoAtom extends SimpleTableAtom {\r\n constructor(len) {\r\n super(len, Token.INT32_BE);\r\n this.len = len;\r\n }\r\n}\r\nexports.StcoAtom = StcoAtom;\r\n/**\r\n * Token used to decode text-track from 'mdat' atom (raw data stream)\r\n */\r\nclass ChapterText {\r\n constructor(len) {\r\n this.len = len;\r\n }\r\n get(buf, off) {\r\n const titleLen = Token.INT16_BE.get(buf, off + 0);\r\n const str = new Token.StringType(titleLen, 'utf-8');\r\n return str.get(buf, off + 2);\r\n }\r\n}\r\nexports.ChapterText = ChapterText;\r\nfunction readTokenTable(buf, token, off, remainingLen, numberOfEntries) {\r\n debug(`remainingLen=${remainingLen}, numberOfEntries=${numberOfEntries} * token-len=${token.len}`);\r\n if (remainingLen === 0)\r\n return [];\r\n if (remainingLen !== numberOfEntries * token.len)\r\n throw new Error('mismatch number-of-entries with remaining atom-length');\r\n const entries = [];\r\n // parse offset-table\r\n for (let n = 0; n < numberOfEntries; ++n) {\r\n entries.push(token.get(buf, off));\r\n off += token.len;\r\n }\r\n return entries;\r\n}\r\n","\"use strict\";\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nexports.MP4Parser = void 0;\r\nconst debug_1 = require(\"debug\");\r\nconst Token = require(\"token-types\");\r\nconst BasicParser_1 = require(\"../common/BasicParser\");\r\nconst ID3v1Parser_1 = require(\"../id3v1/ID3v1Parser\");\r\nconst type_1 = require(\"../type\");\r\nconst Atom_1 = require(\"./Atom\");\r\nconst AtomToken = require(\"./AtomToken\");\r\nconst debug = (0, debug_1.default)('music-metadata:parser:MP4');\r\nconst tagFormat = 'iTunes';\r\nconst encoderDict = {\r\n raw: {\r\n lossy: false,\r\n format: 'raw'\r\n },\r\n MAC3: {\r\n lossy: true,\r\n format: 'MACE 3:1'\r\n },\r\n MAC6: {\r\n lossy: true,\r\n format: 'MACE 6:1'\r\n },\r\n ima4: {\r\n lossy: true,\r\n format: 'IMA 4:1'\r\n },\r\n ulaw: {\r\n lossy: true,\r\n format: 'uLaw 2:1'\r\n },\r\n alaw: {\r\n lossy: true,\r\n format: 'uLaw 2:1'\r\n },\r\n Qclp: {\r\n lossy: true,\r\n format: 'QUALCOMM PureVoice'\r\n },\r\n '.mp3': {\r\n lossy: true,\r\n format: 'MPEG-1 layer 3'\r\n },\r\n alac: {\r\n lossy: false,\r\n format: 'ALAC'\r\n },\r\n 'ac-3': {\r\n lossy: true,\r\n format: 'AC-3'\r\n },\r\n mp4a: {\r\n lossy: true,\r\n format: 'MPEG-4/AAC'\r\n },\r\n mp4s: {\r\n lossy: true,\r\n format: 'MP4S'\r\n },\r\n // Closed Captioning Media, https://developer.apple.com/library/archive/documentation/QuickTime/QTFF/QTFFChap3/qtff3.html#//apple_ref/doc/uid/TP40000939-CH205-SW87\r\n c608: {\r\n lossy: true,\r\n format: 'CEA-608'\r\n },\r\n c708: {\r\n lossy: true,\r\n format: 'CEA-708'\r\n }\r\n};\r\nfunction distinct(value, index, self) {\r\n return self.indexOf(value) === index;\r\n}\r\n/*\r\n * Parser for the MP4 (MPEG-4 Part 14) container format\r\n * Standard: ISO/IEC 14496-14\r\n * supporting:\r\n * - QuickTime container\r\n * - MP4 File Format\r\n * - 3GPP file format\r\n * - 3GPP2 file format\r\n *\r\n * MPEG-4 Audio / Part 3 (.m4a)& MPEG 4 Video (m4v, mp4) extension.\r\n * Support for Apple iTunes tags as found in a M4A/M4V files.\r\n * Ref:\r\n * https://en.wikipedia.org/wiki/ISO_base_media_file_format\r\n * https://developer.apple.com/library/archive/documentation/QuickTime/QTFF/Metadata/Metadata.html\r\n * http://atomicparsley.sourceforge.net/mpeg-4files.html\r\n * https://github.com/sergiomb2/libmp4v2/wiki/iTunesMetadata\r\n * https://wiki.multimedia.cx/index.php/QuickTime_container\r\n */\r\nclass MP4Parser extends BasicParser_1.BasicParser {\r\n constructor() {\r\n super(...arguments);\r\n this.atomParsers = {\r\n /**\r\n * Parse movie header (mvhd) atom\r\n * Ref: https://developer.apple.com/library/archive/documentation/QuickTime/QTFF/QTFFChap2/qtff2.html#//apple_ref/doc/uid/TP40000939-CH204-56313\r\n */\r\n mvhd: async (len) => {\r\n const mvhd = await this.tokenizer.readToken(new AtomToken.MvhdAtom(len));\r\n this.metadata.setFormat('creationTime', mvhd.creationTime);\r\n this.metadata.setFormat('modificationTime', mvhd.modificationTime);\r\n },\r\n /**\r\n * Parse media header (mdhd) atom\r\n * Ref: https://developer.apple.com/library/archive/documentation/QuickTime/QTFF/QTFFChap2/qtff2.html#//apple_ref/doc/uid/TP40000939-CH204-25615\r\n */\r\n mdhd: async (len) => {\r\n const mdhd_data = await this.tokenizer.readToken(new AtomToken.MdhdAtom(len));\r\n // this.parse_mxhd(mdhd_data, this.currentTrack);\r\n const td = this.getTrackDescription();\r\n td.creationTime = mdhd_data.creationTime;\r\n td.modificationTime = mdhd_data.modificationTime;\r\n td.timeScale = mdhd_data.timeScale;\r\n td.duration = mdhd_data.duration;\r\n },\r\n chap: async (len) => {\r\n const td = this.getTrackDescription();\r\n const trackIds = [];\r\n while (len >= Token.UINT32_BE.len) {\r\n trackIds.push(await this.tokenizer.readNumber(Token.UINT32_BE));\r\n len -= Token.UINT32_BE.len;\r\n }\r\n td.chapterList = trackIds;\r\n },\r\n tkhd: async (len) => {\r\n const track = (await this.tokenizer.readToken(new AtomToken.TrackHeaderAtom(len)));\r\n this.tracks.push(track);\r\n },\r\n /**\r\n * Parse mdat atom.\r\n * Will scan for chapters\r\n */\r\n mdat: async (len) => {\r\n this.audioLengthInBytes = len;\r\n this.calculateBitRate();\r\n if (this.options.includeChapters) {\r\n const trackWithChapters = this.tracks.filter(track => track.chapterList);\r\n if (trackWithChapters.length === 1) {\r\n const chapterTrackIds = trackWithChapters[0].chapterList;\r\n const chapterTracks = this.tracks.filter(track => chapterTrackIds.indexOf(track.trackId) !== -1);\r\n if (chapterTracks.length === 1) {\r\n return this.parseChapterTrack(chapterTracks[0], trackWithChapters[0], len);\r\n }\r\n }\r\n }\r\n await this.tokenizer.ignore(len);\r\n },\r\n ftyp: async (len) => {\r\n const types = [];\r\n while (len > 0) {\r\n const ftype = await this.tokenizer.readToken(AtomToken.ftyp);\r\n len -= AtomToken.ftyp.len;\r\n const value = ftype.type.replace(/\\W/g, '');\r\n if (value.length > 0) {\r\n types.push(value); // unshift for backward compatibility\r\n }\r\n }\r\n debug(`ftyp: ${types.join('/')}`);\r\n const x = types.filter(distinct).join('/');\r\n this.metadata.setFormat('container', x);\r\n },\r\n /**\r\n * Parse sample description atom\r\n */\r\n stsd: async (len) => {\r\n const stsd = await this.tokenizer.readToken(new AtomToken.StsdAtom(len));\r\n const trackDescription = this.getTrackDescription();\r\n trackDescription.soundSampleDescription = stsd.table.map(dfEntry => this.parseSoundSampleDescription(dfEntry));\r\n },\r\n /**\r\n * sample-to-Chunk Atoms\r\n */\r\n stsc: async (len) => {\r\n const stsc = await this.tokenizer.readToken(new AtomToken.StscAtom(len));\r\n this.getTrackDescription().sampleToChunkTable = stsc.entries;\r\n },\r\n /**\r\n * time to sample\r\n */\r\n stts: async (len) => {\r\n const stts = await this.tokenizer.readToken(new AtomToken.SttsAtom(len));\r\n this.getTrackDescription().timeToSampleTable = stts.entries;\r\n },\r\n /**\r\n * Parse sample-sizes atom ('stsz')\r\n */\r\n stsz: async (len) => {\r\n const stsz = await this.tokenizer.readToken(new AtomToken.StszAtom(len));\r\n const td = this.getTrackDescription();\r\n td.sampleSize = stsz.sampleSize;\r\n td.sampleSizeTable = stsz.entries;\r\n },\r\n /**\r\n * Parse chunk-offset atom ('stco')\r\n */\r\n stco: async (len) => {\r\n const stco = await this.tokenizer.readToken(new AtomToken.StcoAtom(len));\r\n this.getTrackDescription().chunkOffsetTable = stco.entries; // remember chunk offsets\r\n },\r\n date: async (len) => {\r\n const date = await this.tokenizer.readToken(new Token.StringType(len, 'utf-8'));\r\n this.addTag('date', date);\r\n }\r\n };\r\n }\r\n static read_BE_Integer(array, signed) {\r\n const integerType = (signed ? 'INT' : 'UINT') + array.length * 8 + (array.length > 1 ? '_BE' : '');\r\n const token = Token[integerType];\r\n if (!token) {\r\n throw new Error('Token for integer type not found: \"' + integerType + '\"');\r\n }\r\n return Number(token.get(array, 0));\r\n }\r\n async parse() {\r\n this.tracks = [];\r\n let remainingFileSize = this.tokenizer.fileInfo.size;\r\n while (!this.tokenizer.fileInfo.size || remainingFileSize > 0) {\r\n try {\r\n const token = await this.tokenizer.peekToken(AtomToken.Header);\r\n if (token.name === '\\0\\0\\0\\0') {\r\n const errMsg = `Error at offset=${this.tokenizer.position}: box.id=0`;\r\n debug(errMsg);\r\n this.addWarning(errMsg);\r\n break;\r\n }\r\n }\r\n catch (error) {\r\n const errMsg = `Error at offset=${this.tokenizer.position}: ${error.message}`;\r\n debug(errMsg);\r\n this.addWarning(errMsg);\r\n break;\r\n }\r\n const rootAtom = await Atom_1.Atom.readAtom(this.tokenizer, (atom, remaining) => this.handleAtom(atom, remaining), null, remainingFileSize);\r\n remainingFileSize -= rootAtom.header.length === BigInt(0) ? remainingFileSize : Number(rootAtom.header.length);\r\n }\r\n // Post process metadata\r\n const formatList = [];\r\n this.tracks.forEach(track => {\r\n const trackFormats = [];\r\n track.soundSampleDescription.forEach(ssd => {\r\n const streamInfo = {};\r\n const encoderInfo = encoderDict[ssd.dataFormat];\r\n if (encoderInfo) {\r\n trackFormats.push(encoderInfo.format);\r\n streamInfo.codecName = encoderInfo.format;\r\n }\r\n else {\r\n streamInfo.codecName = `<${ssd.dataFormat}>`;\r\n }\r\n if (ssd.description) {\r\n const { description } = ssd;\r\n if (description.sampleRate > 0) {\r\n streamInfo.type = type_1.TrackType.audio;\r\n streamInfo.audio = {\r\n samplingFrequency: description.sampleRate,\r\n bitDepth: description.sampleSize,\r\n channels: description.numAudioChannels\r\n };\r\n }\r\n }\r\n this.metadata.addStreamInfo(streamInfo);\r\n });\r\n if (trackFormats.length >= 1) {\r\n formatList.push(trackFormats.join('/'));\r\n }\r\n });\r\n if (formatList.length > 0) {\r\n this.metadata.setFormat('codec', formatList.filter(distinct).join('+'));\r\n }\r\n const audioTracks = this.tracks.filter(track => {\r\n return track.soundSampleDescription.length >= 1 && track.soundSampleDescription[0].description && track.soundSampleDescription[0].description.numAudioChannels > 0;\r\n });\r\n if (audioTracks.length >= 1) {\r\n const audioTrack = audioTracks[0];\r\n const duration = audioTrack.duration / audioTrack.timeScale;\r\n this.metadata.setFormat('duration', duration); // calculate duration in seconds\r\n const ssd = audioTrack.soundSampleDescription[0];\r\n if (ssd.description) {\r\n this.metadata.setFormat('sampleRate', ssd.description.sampleRate);\r\n this.metadata.setFormat('bitsPerSample', ssd.description.sampleSize);\r\n this.metadata.setFormat('numberOfChannels', ssd.description.numAudioChannels);\r\n }\r\n const encoderInfo = encoderDict[ssd.dataFormat];\r\n if (encoderInfo) {\r\n this.metadata.setFormat('lossless', !encoderInfo.lossy);\r\n }\r\n this.calculateBitRate();\r\n }\r\n }\r\n async handleAtom(atom, remaining) {\r\n if (atom.parent) {\r\n switch (atom.parent.header.name) {\r\n case 'ilst':\r\n case '':\r\n return this.parseMetadataItemData(atom);\r\n }\r\n }\r\n // const payloadLength = atom.getPayloadLength(remaining);\r\n if (this.atomParsers[atom.header.name]) {\r\n return this.atomParsers[atom.header.name](remaining);\r\n }\r\n else {\r\n debug(`No parser for atom path=${atom.atomPath}, payload-len=${remaining}, ignoring atom`);\r\n await this.tokenizer.ignore(remaining);\r\n }\r\n }\r\n getTrackDescription() {\r\n return this.tracks[this.tracks.length - 1];\r\n }\r\n calculateBitRate() {\r\n if (this.audioLengthInBytes && this.metadata.format.duration) {\r\n this.metadata.setFormat('bitrate', 8 * this.audioLengthInBytes / this.metadata.format.duration);\r\n }\r\n }\r\n addTag(id, value) {\r\n this.metadata.addTag(tagFormat, id, value);\r\n }\r\n addWarning(message) {\r\n debug('Warning: ' + message);\r\n this.metadata.addWarning(message);\r\n }\r\n /**\r\n * Parse data of Meta-item-list-atom (item of 'ilst' atom)\r\n * @param metaAtom\r\n * Ref: https://developer.apple.com/library/content/documentation/QuickTime/QTFF/Metadata/Metadata.html#//apple_ref/doc/uid/TP40000939-CH1-SW8\r\n */\r\n parseMetadataItemData(metaAtom) {\r\n let tagKey = metaAtom.header.name;\r\n return metaAtom.readAtoms(this.tokenizer, async (child, remaining) => {\r\n const payLoadLength = child.getPayloadLength(remaining);\r\n switch (child.header.name) {\r\n case 'data': // value atom\r\n return this.parseValueAtom(tagKey, child);\r\n case 'name': // name atom (optional)\r\n const name = await this.tokenizer.readToken(new AtomToken.NameAtom(payLoadLength));\r\n tagKey += ':' + name.name;\r\n break;\r\n case 'mean': // name atom (optional)\r\n const mean = await this.tokenizer.readToken(new AtomToken.NameAtom(payLoadLength));\r\n // console.log(\" %s[%s] = %s\", tagKey, header.name, mean.name);\r\n tagKey += ':' + mean.name;\r\n break;\r\n default:\r\n const dataAtom = await this.tokenizer.readToken(new Token.BufferType(payLoadLength));\r\n this.addWarning('Unsupported meta-item: ' + tagKey + '[' + child.header.name + '] => value=' + dataAtom.toString('hex') + ' ascii=' + dataAtom.toString('ascii'));\r\n }\r\n }, metaAtom.getPayloadLength(0));\r\n }\r\n async parseValueAtom(tagKey, metaAtom) {\r\n const dataAtom = await this.tokenizer.readToken(new AtomToken.DataAtom(Number(metaAtom.header.length) - AtomToken.Header.len));\r\n if (dataAtom.type.set !== 0) {\r\n throw new Error('Unsupported type-set != 0: ' + dataAtom.type.set);\r\n }\r\n // Use well-known-type table\r\n // Ref: https://developer.apple.com/library/content/documentation/QuickTime/QTFF/Metadata/Metadata.html#//apple_ref/doc/uid/TP40000939-CH1-SW35\r\n switch (dataAtom.type.type) {\r\n case 0: // reserved: Reserved for use where no type needs to be indicated\r\n switch (tagKey) {\r\n case 'trkn':\r\n case 'disk':\r\n const num = Token.UINT8.get(dataAtom.value, 3);\r\n const of = Token.UINT8.get(dataAtom.value, 5);\r\n // console.log(\" %s[data] = %s/%s\", tagKey, num, of);\r\n this.addTag(tagKey, num + '/' + of);\r\n break;\r\n case 'gnre':\r\n const genreInt = Token.UINT8.get(dataAtom.value, 1);\r\n const genreStr = ID3v1Parser_1.Genres[genreInt - 1];\r\n // console.log(\" %s[data] = %s\", tagKey, genreStr);\r\n this.addTag(tagKey, genreStr);\r\n break;\r\n default:\r\n // console.log(\" reserved-data: name=%s, len=%s, set=%s, type=%s, locale=%s, value{ hex=%s, ascii=%s }\",\r\n // header.name, header.length, dataAtom.type.set, dataAtom.type.type, dataAtom.locale, dataAtom.value.toString('hex'), dataAtom.value.toString('ascii'));\r\n }\r\n break;\r\n case 1: // UTF-8: Without any count or NULL terminator\r\n case 18: // Unknown: Found in m4b in combination with a '©gen' tag\r\n this.addTag(tagKey, dataAtom.value.toString('utf-8'));\r\n break;\r\n case 13: // JPEG\r\n if (this.options.skipCovers)\r\n break;\r\n this.addTag(tagKey, {\r\n format: 'image/jpeg',\r\n data: Buffer.from(dataAtom.value)\r\n });\r\n break;\r\n case 14: // PNG\r\n if (this.options.skipCovers)\r\n break;\r\n this.addTag(tagKey, {\r\n format: 'image/png',\r\n data: Buffer.from(dataAtom.value)\r\n });\r\n break;\r\n case 21: // BE Signed Integer\r\n this.addTag(tagKey, MP4Parser.read_BE_Integer(dataAtom.value, true));\r\n break;\r\n case 22: // BE Unsigned Integer\r\n this.addTag(tagKey, MP4Parser.read_BE_Integer(dataAtom.value, false));\r\n break;\r\n case 65: // An 8-bit signed integer\r\n this.addTag(tagKey, dataAtom.value.readInt8(0));\r\n break;\r\n case 66: // A big-endian 16-bit signed integer\r\n this.addTag(tagKey, dataAtom.value.readInt16BE(0));\r\n break;\r\n case 67: // A big-endian 32-bit signed integer\r\n this.addTag(tagKey, dataAtom.value.readInt32BE(0));\r\n break;\r\n default:\r\n this.addWarning(`atom key=${tagKey}, has unknown well-known-type (data-type): ${dataAtom.type.type}`);\r\n }\r\n }\r\n /**\r\n * @param sampleDescription\r\n * Ref: https://developer.apple.com/library/archive/documentation/QuickTime/QTFF/QTFFChap3/qtff3.html#//apple_ref/doc/uid/TP40000939-CH205-128916\r\n */\r\n parseSoundSampleDescription(sampleDescription) {\r\n const ssd = {\r\n dataFormat: sampleDescription.dataFormat,\r\n dataReferenceIndex: sampleDescription.dataReferenceIndex\r\n };\r\n let offset = 0;\r\n const version = AtomToken.SoundSampleDescriptionVersion.get(sampleDescription.description, offset);\r\n offset += AtomToken.SoundSampleDescriptionVersion.len;\r\n if (version.version === 0 || version.version === 1) {\r\n // Sound Sample Description (Version 0)\r\n ssd.description = AtomToken.SoundSampleDescriptionV0.get(sampleDescription.description, offset);\r\n }\r\n else {\r\n debug(`Warning: sound-sample-description ${version} not implemented`);\r\n }\r\n return ssd;\r\n }\r\n async parseChapterTrack(chapterTrack, track, len) {\r\n if (!chapterTrack.sampleSize) {\r\n if (chapterTrack.chunkOffsetTable.length !== chapterTrack.sampleSizeTable.length)\r\n throw new Error('Expected equal chunk-offset-table & sample-size-table length.');\r\n }\r\n const chapters = [];\r\n for (let i = 0; i < chapterTrack.chunkOffsetTable.length && len > 0; ++i) {\r\n const chunkOffset = chapterTrack.chunkOffsetTable[i];\r\n const nextChunkLen = chunkOffset - this.tokenizer.position;\r\n const sampleSize = chapterTrack.sampleSize > 0 ? chapterTrack.sampleSize : chapterTrack.sampleSizeTable[i];\r\n len -= nextChunkLen + sampleSize;\r\n if (len < 0)\r\n throw new Error('Chapter chunk exceeding token length');\r\n await this.tokenizer.ignore(nextChunkLen);\r\n const title = await this.tokenizer.readToken(new AtomToken.ChapterText(sampleSize));\r\n debug(`Chapter ${i + 1}: ${title}`);\r\n const chapter = {\r\n title,\r\n sampleOffset: this.findSampleOffset(track, this.tokenizer.position)\r\n };\r\n debug(`Chapter title=${chapter.title}, offset=${chapter.sampleOffset}/${this.tracks[0].duration}`);\r\n chapters.push(chapter);\r\n }\r\n this.metadata.setFormat('chapters', chapters);\r\n await this.tokenizer.ignore(len);\r\n }\r\n findSampleOffset(track, chapterOffset) {\r\n let totalDuration = 0;\r\n track.timeToSampleTable.forEach(e => {\r\n totalDuration += e.count * e.duration;\r\n });\r\n debug(`Total duration=${totalDuration}`);\r\n let chunkIndex = 0;\r\n while (chunkIndex < track.chunkOffsetTable.length && track.chunkOffsetTable[chunkIndex] < chapterOffset) {\r\n ++chunkIndex;\r\n }\r\n return this.getChunkDuration(chunkIndex + 1, track);\r\n }\r\n getChunkDuration(chunkId, track) {\r\n let ttsi = 0;\r\n let ttsc = track.timeToSampleTable[ttsi].count;\r\n let ttsd = track.timeToSampleTable[ttsi].duration;\r\n let curChunkId = 1;\r\n let samplesPerChunk = this.getSamplesPerChunk(curChunkId, track.sampleToChunkTable);\r\n let totalDuration = 0;\r\n while (curChunkId < chunkId) {\r\n const nrOfSamples = Math.min(ttsc, samplesPerChunk);\r\n totalDuration += nrOfSamples * ttsd;\r\n ttsc -= nrOfSamples;\r\n samplesPerChunk -= nrOfSamples;\r\n if (samplesPerChunk === 0) {\r\n ++curChunkId;\r\n samplesPerChunk = this.getSamplesPerChunk(curChunkId, track.sampleToChunkTable);\r\n }\r\n else {\r\n ++ttsi;\r\n ttsc = track.timeToSampleTable[ttsi].count;\r\n ttsd = track.timeToSampleTable[ttsi].duration;\r\n }\r\n }\r\n return totalDuration;\r\n }\r\n getSamplesPerChunk(chunkId, stcTable) {\r\n for (let i = 0; i < stcTable.length - 1; ++i) {\r\n if (chunkId >= stcTable[i].firstChunk && chunkId < stcTable[i + 1].firstChunk) {\r\n return stcTable[i].samplesPerChunk;\r\n }\r\n }\r\n return stcTable[stcTable.length - 1].samplesPerChunk;\r\n }\r\n}\r\nexports.MP4Parser = MP4Parser;\r\n","\"use strict\";\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nexports.MP4TagMapper = exports.tagType = void 0;\r\nconst CaseInsensitiveTagMap_1 = require(\"../common/CaseInsensitiveTagMap\");\r\n/**\r\n * Ref: https://github.com/sergiomb2/libmp4v2/wiki/iTunesMetadata\r\n */\r\nconst mp4TagMap = {\r\n '©nam': 'title',\r\n '©ART': 'artist',\r\n aART: 'albumartist',\r\n /**\r\n * ToDo: Album artist seems to be stored here while Picard documentation says: aART\r\n */\r\n '----:com.apple.iTunes:Band': 'albumartist',\r\n '©alb': 'album',\r\n '©day': 'date',\r\n '©cmt': 'comment',\r\n '©com': 'comment',\r\n trkn: 'track',\r\n disk: 'disk',\r\n '©gen': 'genre',\r\n covr: 'picture',\r\n '©wrt': 'composer',\r\n '©lyr': 'lyrics',\r\n soal: 'albumsort',\r\n sonm: 'titlesort',\r\n soar: 'artistsort',\r\n soaa: 'albumartistsort',\r\n soco: 'composersort',\r\n '----:com.apple.iTunes:LYRICIST': 'lyricist',\r\n '----:com.apple.iTunes:CONDUCTOR': 'conductor',\r\n '----:com.apple.iTunes:REMIXER': 'remixer',\r\n '----:com.apple.iTunes:ENGINEER': 'engineer',\r\n '----:com.apple.iTunes:PRODUCER': 'producer',\r\n '----:com.apple.iTunes:DJMIXER': 'djmixer',\r\n '----:com.apple.iTunes:MIXER': 'mixer',\r\n '----:com.apple.iTunes:LABEL': 'label',\r\n '©grp': 'grouping',\r\n '----:com.apple.iTunes:SUBTITLE': 'subtitle',\r\n '----:com.apple.iTunes:DISCSUBTITLE': 'discsubtitle',\r\n cpil: 'compilation',\r\n tmpo: 'bpm',\r\n '----:com.apple.iTunes:MOOD': 'mood',\r\n '----:com.apple.iTunes:MEDIA': 'media',\r\n '----:com.apple.iTunes:CATALOGNUMBER': 'catalognumber',\r\n tvsh: 'tvShow',\r\n tvsn: 'tvSeason',\r\n tves: 'tvEpisode',\r\n sosn: 'tvShowSort',\r\n tven: 'tvEpisodeId',\r\n tvnn: 'tvNetwork',\r\n pcst: 'podcast',\r\n purl: 'podcasturl',\r\n '----:com.apple.iTunes:MusicBrainz Album Status': 'releasestatus',\r\n '----:com.apple.iTunes:MusicBrainz Album Type': 'releasetype',\r\n '----:com.apple.iTunes:MusicBrainz Album Release Country': 'releasecountry',\r\n '----:com.apple.iTunes:SCRIPT': 'script',\r\n '----:com.apple.iTunes:LANGUAGE': 'language',\r\n cprt: 'copyright',\r\n '©cpy': 'copyright',\r\n '----:com.apple.iTunes:LICENSE': 'license',\r\n '©too': 'encodedby',\r\n pgap: 'gapless',\r\n '----:com.apple.iTunes:BARCODE': 'barcode',\r\n '----:com.apple.iTunes:ISRC': 'isrc',\r\n '----:com.apple.iTunes:ASIN': 'asin',\r\n '----:com.apple.iTunes:NOTES': 'comment',\r\n '----:com.apple.iTunes:MusicBrainz Track Id': 'musicbrainz_recordingid',\r\n '----:com.apple.iTunes:MusicBrainz Release Track Id': 'musicbrainz_trackid',\r\n '----:com.apple.iTunes:MusicBrainz Album Id': 'musicbrainz_albumid',\r\n '----:com.apple.iTunes:MusicBrainz Artist Id': 'musicbrainz_artistid',\r\n '----:com.apple.iTunes:MusicBrainz Album Artist Id': 'musicbrainz_albumartistid',\r\n '----:com.apple.iTunes:MusicBrainz Release Group Id': 'musicbrainz_releasegroupid',\r\n '----:com.apple.iTunes:MusicBrainz Work Id': 'musicbrainz_workid',\r\n '----:com.apple.iTunes:MusicBrainz TRM Id': 'musicbrainz_trmid',\r\n '----:com.apple.iTunes:MusicBrainz Disc Id': 'musicbrainz_discid',\r\n '----:com.apple.iTunes:Acoustid Id': 'acoustid_id',\r\n '----:com.apple.iTunes:Acoustid Fingerprint': 'acoustid_fingerprint',\r\n '----:com.apple.iTunes:MusicIP PUID': 'musicip_puid',\r\n '----:com.apple.iTunes:fingerprint': 'musicip_fingerprint',\r\n '----:com.apple.iTunes:replaygain_track_gain': 'replaygain_track_gain',\r\n '----:com.apple.iTunes:replaygain_track_peak': 'replaygain_track_peak',\r\n '----:com.apple.iTunes:replaygain_album_gain': 'replaygain_album_gain',\r\n '----:com.apple.iTunes:replaygain_album_peak': 'replaygain_album_peak',\r\n '----:com.apple.iTunes:replaygain_track_minmax': 'replaygain_track_minmax',\r\n '----:com.apple.iTunes:replaygain_album_minmax': 'replaygain_album_minmax',\r\n '----:com.apple.iTunes:replaygain_undo': 'replaygain_undo',\r\n // Additional mappings:\r\n gnre: 'genre',\r\n '----:com.apple.iTunes:ALBUMARTISTSORT': 'albumartistsort',\r\n '----:com.apple.iTunes:ARTISTS': 'artists',\r\n '----:com.apple.iTunes:ORIGINALDATE': 'originaldate',\r\n '----:com.apple.iTunes:ORIGINALYEAR': 'originalyear',\r\n // '----:com.apple.iTunes:PERFORMER': 'performer'\r\n desc: 'description',\r\n ldes: 'longDescription',\r\n '©mvn': 'movement',\r\n '©mvi': 'movementIndex',\r\n '©mvc': 'movementTotal',\r\n '©wrk': 'work',\r\n catg: 'category',\r\n egid: 'podcastId',\r\n hdvd: 'hdVideo',\r\n keyw: 'keywords',\r\n shwm: 'showMovement',\r\n stik: 'stik'\r\n};\r\nexports.tagType = 'iTunes';\r\nclass MP4TagMapper extends CaseInsensitiveTagMap_1.CaseInsensitiveTagMap {\r\n constructor() {\r\n super([exports.tagType], mp4TagMap);\r\n }\r\n}\r\nexports.MP4TagMapper = MP4TagMapper;\r\n//# sourceMappingURL=MP4TagMapper.js.map","\"use strict\";\r\n/**\r\n * Extended Lame Header\r\n */\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nexports.ExtendedLameHeader = void 0;\r\nconst Token = require(\"token-types\");\r\nconst common = require(\"../common/Util\");\r\nconst ReplayGainDataFormat_1 = require(\"./ReplayGainDataFormat\");\r\n/**\r\n * Info Tag\r\n * @link http://gabriel.mp3-tech.org/mp3infotag.html\r\n * @link https://github.com/quodlibet/mutagen/blob/abd58ee58772224334a18817c3fb31103572f70e/mutagen/mp3/_util.py#L112\r\n */\r\nexports.ExtendedLameHeader = {\r\n len: 27,\r\n get: (buf, off) => {\r\n const track_peak = Token.UINT32_BE.get(buf, off + 2);\r\n return {\r\n revision: common.getBitAllignedNumber(buf, off, 0, 4),\r\n vbr_method: common.getBitAllignedNumber(buf, off, 4, 4),\r\n lowpass_filter: 100 * Token.UINT8.get(buf, off + 1),\r\n track_peak: track_peak === 0 ? undefined : track_peak / Math.pow(2, 23),\r\n track_gain: ReplayGainDataFormat_1.ReplayGain.get(buf, 6),\r\n album_gain: ReplayGainDataFormat_1.ReplayGain.get(buf, 8),\r\n music_length: Token.UINT32_BE.get(buf, off + 20),\r\n music_crc: Token.UINT8.get(buf, off + 24),\r\n header_crc: Token.UINT16_BE.get(buf, off + 24)\r\n };\r\n }\r\n};\r\n","\"use strict\";\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nexports.MpegParser = void 0;\r\nconst Token = require(\"token-types\");\r\nconst core_1 = require(\"strtok3/lib/core\");\r\nconst debug_1 = require(\"debug\");\r\nconst common = require(\"../common/Util\");\r\nconst AbstractID3Parser_1 = require(\"../id3v2/AbstractID3Parser\");\r\nconst XingTag_1 = require(\"./XingTag\");\r\nconst debug = (0, debug_1.default)('music-metadata:parser:mpeg');\r\n/**\r\n * Cache buffer size used for searching synchronization preabmle\r\n */\r\nconst maxPeekLen = 1024;\r\n/**\r\n * MPEG-4 Audio definitions\r\n * Ref: https://wiki.multimedia.cx/index.php/MPEG-4_Audio\r\n */\r\nconst MPEG4 = {\r\n /**\r\n * Audio Object Types\r\n */\r\n AudioObjectTypes: [\r\n 'AAC Main',\r\n 'AAC LC',\r\n 'AAC SSR',\r\n 'AAC LTP' // Long Term Prediction\r\n ],\r\n /**\r\n * Sampling Frequencies\r\n * https://wiki.multimedia.cx/index.php/MPEG-4_Audio#Sampling_Frequencies\r\n */\r\n SamplingFrequencies: [\r\n 96000, 88200, 64000, 48000, 44100, 32000, 24000, 22050, 16000, 12000, 11025, 8000, 7350, undefined, undefined, -1\r\n ]\r\n /**\r\n * Channel Configurations\r\n */\r\n};\r\nconst MPEG4_ChannelConfigurations = [\r\n undefined,\r\n ['front-center'],\r\n ['front-left', 'front-right'],\r\n ['front-center', 'front-left', 'front-right'],\r\n ['front-center', 'front-left', 'front-right', 'back-center'],\r\n ['front-center', 'front-left', 'front-right', 'back-left', 'back-right'],\r\n ['front-center', 'front-left', 'front-right', 'back-left', 'back-right', 'LFE-channel'],\r\n ['front-center', 'front-left', 'front-right', 'side-left', 'side-right', 'back-left', 'back-right', 'LFE-channel']\r\n];\r\n/**\r\n * MPEG Audio Layer I/II/III frame header\r\n * Ref: https://www.mp3-tech.org/programmer/frame_header.html\r\n * Bit layout: AAAAAAAA AAABBCCD EEEEFFGH IIJJKLMM\r\n * Ref: https://wiki.multimedia.cx/index.php/ADTS\r\n */\r\nclass MpegFrameHeader {\r\n constructor(buf, off) {\r\n // B(20,19): MPEG Audio versionIndex ID\r\n this.versionIndex = common.getBitAllignedNumber(buf, off + 1, 3, 2);\r\n // C(18,17): Layer description\r\n this.layer = MpegFrameHeader.LayerDescription[common.getBitAllignedNumber(buf, off + 1, 5, 2)];\r\n if (this.versionIndex > 1 && this.layer === 0) {\r\n this.parseAdtsHeader(buf, off); // Audio Data Transport Stream (ADTS)\r\n }\r\n else {\r\n this.parseMpegHeader(buf, off); // Conventional MPEG header\r\n }\r\n // D(16): Protection bit (if true 16-bit CRC follows header)\r\n this.isProtectedByCRC = !common.isBitSet(buf, off + 1, 7);\r\n }\r\n calcDuration(numFrames) {\r\n return numFrames * this.calcSamplesPerFrame() / this.samplingRate;\r\n }\r\n calcSamplesPerFrame() {\r\n return MpegFrameHeader.samplesInFrameTable[this.version === 1 ? 0 : 1][this.layer];\r\n }\r\n calculateSideInfoLength() {\r\n if (this.layer !== 3)\r\n return 2;\r\n if (this.channelModeIndex === 3) {\r\n // mono\r\n if (this.version === 1) {\r\n return 17;\r\n }\r\n else if (this.version === 2 || this.version === 2.5) {\r\n return 9;\r\n }\r\n }\r\n else {\r\n if (this.version === 1) {\r\n return 32;\r\n }\r\n else if (this.version === 2 || this.version === 2.5) {\r\n return 17;\r\n }\r\n }\r\n }\r\n calcSlotSize() {\r\n return [null, 4, 1, 1][this.layer];\r\n }\r\n parseMpegHeader(buf, off) {\r\n this.container = 'MPEG';\r\n // E(15,12): Bitrate index\r\n this.bitrateIndex = common.getBitAllignedNumber(buf, off + 2, 0, 4);\r\n // F(11,10): Sampling rate frequency index\r\n this.sampRateFreqIndex = common.getBitAllignedNumber(buf, off + 2, 4, 2);\r\n // G(9): Padding bit\r\n this.padding = common.isBitSet(buf, off + 2, 6);\r\n // H(8): Private bit\r\n this.privateBit = common.isBitSet(buf, off + 2, 7);\r\n // I(7,6): Channel Mode\r\n this.channelModeIndex = common.getBitAllignedNumber(buf, off + 3, 0, 2);\r\n // J(5,4): Mode extension (Only used in Joint stereo)\r\n this.modeExtension = common.getBitAllignedNumber(buf, off + 3, 2, 2);\r\n // K(3): Copyright\r\n this.isCopyrighted = common.isBitSet(buf, off + 3, 4);\r\n // L(2): Original\r\n this.isOriginalMedia = common.isBitSet(buf, off + 3, 5);\r\n // M(3): The original bit indicates, if it is set, that the frame is located on its original media.\r\n this.emphasis = common.getBitAllignedNumber(buf, off + 3, 7, 2);\r\n this.version = MpegFrameHeader.VersionID[this.versionIndex];\r\n this.channelMode = MpegFrameHeader.ChannelMode[this.channelModeIndex];\r\n this.codec = `MPEG ${this.version} Layer ${this.layer}`;\r\n // Calculate bitrate\r\n const bitrateInKbps = this.calcBitrate();\r\n if (!bitrateInKbps) {\r\n throw new Error('Cannot determine bit-rate');\r\n }\r\n this.bitrate = bitrateInKbps * 1000;\r\n // Calculate sampling rate\r\n this.samplingRate = this.calcSamplingRate();\r\n if (this.samplingRate == null) {\r\n throw new Error('Cannot determine sampling-rate');\r\n }\r\n }\r\n parseAdtsHeader(buf, off) {\r\n debug(`layer=0 => ADTS`);\r\n this.version = this.versionIndex === 2 ? 4 : 2;\r\n this.container = 'ADTS/MPEG-' + this.version;\r\n const profileIndex = common.getBitAllignedNumber(buf, off + 2, 0, 2);\r\n this.codec = 'AAC';\r\n this.codecProfile = MPEG4.AudioObjectTypes[profileIndex];\r\n debug(`MPEG-4 audio-codec=${this.codec}`);\r\n const samplingFrequencyIndex = common.getBitAllignedNumber(buf, off + 2, 2, 4);\r\n this.samplingRate = MPEG4.SamplingFrequencies[samplingFrequencyIndex];\r\n debug(`sampling-rate=${this.samplingRate}`);\r\n const channelIndex = common.getBitAllignedNumber(buf, off + 2, 7, 3);\r\n this.mp4ChannelConfig = MPEG4_ChannelConfigurations[channelIndex];\r\n debug(`channel-config=${this.mp4ChannelConfig.join('+')}`);\r\n this.frameLength = common.getBitAllignedNumber(buf, off + 3, 6, 2) << 11;\r\n }\r\n calcBitrate() {\r\n if (this.bitrateIndex === 0x00 || // free\r\n this.bitrateIndex === 0x0F) { // reserved\r\n return;\r\n }\r\n const codecIndex = `${Math.floor(this.version)}${this.layer}`;\r\n return MpegFrameHeader.bitrate_index[this.bitrateIndex][codecIndex];\r\n }\r\n calcSamplingRate() {\r\n if (this.sampRateFreqIndex === 0x03)\r\n return null; // 'reserved'\r\n return MpegFrameHeader.sampling_rate_freq_index[this.version][this.sampRateFreqIndex];\r\n }\r\n}\r\nMpegFrameHeader.SyncByte1 = 0xFF;\r\nMpegFrameHeader.SyncByte2 = 0xE0;\r\nMpegFrameHeader.VersionID = [2.5, null, 2, 1];\r\nMpegFrameHeader.LayerDescription = [0, 3, 2, 1];\r\nMpegFrameHeader.ChannelMode = ['stereo', 'joint_stereo', 'dual_channel', 'mono'];\r\nMpegFrameHeader.bitrate_index = {\r\n 0x01: { 11: 32, 12: 32, 13: 32, 21: 32, 22: 8, 23: 8 },\r\n 0x02: { 11: 64, 12: 48, 13: 40, 21: 48, 22: 16, 23: 16 },\r\n 0x03: { 11: 96, 12: 56, 13: 48, 21: 56, 22: 24, 23: 24 },\r\n 0x04: { 11: 128, 12: 64, 13: 56, 21: 64, 22: 32, 23: 32 },\r\n 0x05: { 11: 160, 12: 80, 13: 64, 21: 80, 22: 40, 23: 40 },\r\n 0x06: { 11: 192, 12: 96, 13: 80, 21: 96, 22: 48, 23: 48 },\r\n 0x07: { 11: 224, 12: 112, 13: 96, 21: 112, 22: 56, 23: 56 },\r\n 0x08: { 11: 256, 12: 128, 13: 112, 21: 128, 22: 64, 23: 64 },\r\n 0x09: { 11: 288, 12: 160, 13: 128, 21: 144, 22: 80, 23: 80 },\r\n 0x0A: { 11: 320, 12: 192, 13: 160, 21: 160, 22: 96, 23: 96 },\r\n 0x0B: { 11: 352, 12: 224, 13: 192, 21: 176, 22: 112, 23: 112 },\r\n 0x0C: { 11: 384, 12: 256, 13: 224, 21: 192, 22: 128, 23: 128 },\r\n 0x0D: { 11: 416, 12: 320, 13: 256, 21: 224, 22: 144, 23: 144 },\r\n 0x0E: { 11: 448, 12: 384, 13: 320, 21: 256, 22: 160, 23: 160 }\r\n};\r\nMpegFrameHeader.sampling_rate_freq_index = {\r\n 1: { 0x00: 44100, 0x01: 48000, 0x02: 32000 },\r\n 2: { 0x00: 22050, 0x01: 24000, 0x02: 16000 },\r\n 2.5: { 0x00: 11025, 0x01: 12000, 0x02: 8000 }\r\n};\r\nMpegFrameHeader.samplesInFrameTable = [\r\n /* Layer I II III */\r\n [0, 384, 1152, 1152],\r\n [0, 384, 1152, 576] // MPEG-2(.5\r\n];\r\n/**\r\n * MPEG Audio Layer I/II/III\r\n */\r\nconst FrameHeader = {\r\n len: 4,\r\n get: (buf, off) => {\r\n return new MpegFrameHeader(buf, off);\r\n }\r\n};\r\nfunction getVbrCodecProfile(vbrScale) {\r\n return 'V' + Math.floor((100 - vbrScale) / 10);\r\n}\r\nclass MpegParser extends AbstractID3Parser_1.AbstractID3Parser {\r\n constructor() {\r\n super(...arguments);\r\n this.frameCount = 0;\r\n this.syncFrameCount = -1;\r\n this.countSkipFrameData = 0;\r\n this.totalDataLength = 0;\r\n this.bitrates = [];\r\n this.calculateEofDuration = false;\r\n this.buf_frame_header = Buffer.alloc(4);\r\n this.syncPeek = {\r\n buf: Buffer.alloc(maxPeekLen),\r\n len: 0\r\n };\r\n }\r\n /**\r\n * Called after ID3 headers have been parsed\r\n */\r\n async postId3v2Parse() {\r\n this.metadata.setFormat('lossless', false);\r\n try {\r\n let quit = false;\r\n while (!quit) {\r\n await this.sync();\r\n quit = await this.parseCommonMpegHeader();\r\n }\r\n }\r\n catch (err) {\r\n if (err instanceof core_1.EndOfStreamError) {\r\n debug(`End-of-stream`);\r\n if (this.calculateEofDuration) {\r\n const numberOfSamples = this.frameCount * this.samplesPerFrame;\r\n this.metadata.setFormat('numberOfSamples', numberOfSamples);\r\n const duration = numberOfSamples / this.metadata.format.sampleRate;\r\n debug(`Calculate duration at EOF: ${duration} sec.`, duration);\r\n this.metadata.setFormat('duration', duration);\r\n }\r\n }\r\n else {\r\n throw err;\r\n }\r\n }\r\n }\r\n /**\r\n * Called after file has been fully parsed, this allows, if present, to exclude the ID3v1.1 header length\r\n */\r\n finalize() {\r\n const format = this.metadata.format;\r\n const hasID3v1 = this.metadata.native.hasOwnProperty('ID3v1');\r\n if (format.duration && this.tokenizer.fileInfo.size) {\r\n const mpegSize = this.tokenizer.fileInfo.size - this.mpegOffset - (hasID3v1 ? 128 : 0);\r\n if (format.codecProfile && format.codecProfile[0] === 'V') {\r\n this.metadata.setFormat('bitrate', mpegSize * 8 / format.duration);\r\n }\r\n }\r\n else if (this.tokenizer.fileInfo.size && format.codecProfile === 'CBR') {\r\n const mpegSize = this.tokenizer.fileInfo.size - this.mpegOffset - (hasID3v1 ? 128 : 0);\r\n const numberOfSamples = Math.round(mpegSize / this.frame_size) * this.samplesPerFrame;\r\n this.metadata.setFormat('numberOfSamples', numberOfSamples);\r\n const duration = numberOfSamples / format.sampleRate;\r\n debug(\"Calculate CBR duration based on file size: %s\", duration);\r\n this.metadata.setFormat('duration', duration);\r\n }\r\n }\r\n async sync() {\r\n let gotFirstSync = false;\r\n while (true) {\r\n let bo = 0;\r\n this.syncPeek.len = await this.tokenizer.peekBuffer(this.syncPeek.buf, { length: maxPeekLen, mayBeLess: true });\r\n if (this.syncPeek.len <= 163) {\r\n throw new core_1.EndOfStreamError();\r\n }\r\n while (true) {\r\n if (gotFirstSync && (this.syncPeek.buf[bo] & 0xE0) === 0xE0) {\r\n this.buf_frame_header[0] = MpegFrameHeader.SyncByte1;\r\n this.buf_frame_header[1] = this.syncPeek.buf[bo];\r\n await this.tokenizer.ignore(bo);\r\n debug(`Sync at offset=${this.tokenizer.position - 1}, frameCount=${this.frameCount}`);\r\n if (this.syncFrameCount === this.frameCount) {\r\n debug(`Re-synced MPEG stream, frameCount=${this.frameCount}`);\r\n this.frameCount = 0;\r\n this.frame_size = 0;\r\n }\r\n this.syncFrameCount = this.frameCount;\r\n return; // sync\r\n }\r\n else {\r\n gotFirstSync = false;\r\n bo = this.syncPeek.buf.indexOf(MpegFrameHeader.SyncByte1, bo);\r\n if (bo === -1) {\r\n if (this.syncPeek.len < this.syncPeek.buf.length) {\r\n throw new core_1.EndOfStreamError();\r\n }\r\n await this.tokenizer.ignore(this.syncPeek.len);\r\n break; // continue with next buffer\r\n }\r\n else {\r\n ++bo;\r\n gotFirstSync = true;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n /**\r\n * Combined ADTS & MPEG (MP2 & MP3) header handling\r\n * @return {Promise} true if parser should quit\r\n */\r\n async parseCommonMpegHeader() {\r\n if (this.frameCount === 0) {\r\n this.mpegOffset = this.tokenizer.position - 1;\r\n }\r\n await this.tokenizer.peekBuffer(this.buf_frame_header, { offset: 1, length: 3 });\r\n let header;\r\n try {\r\n header = FrameHeader.get(this.buf_frame_header, 0);\r\n }\r\n catch (err) {\r\n await this.tokenizer.ignore(1);\r\n this.metadata.addWarning('Parse error: ' + err.message);\r\n return false; // sync\r\n }\r\n await this.tokenizer.ignore(3);\r\n this.metadata.setFormat('container', header.container);\r\n this.metadata.setFormat('codec', header.codec);\r\n this.metadata.setFormat('lossless', false);\r\n this.metadata.setFormat('sampleRate', header.samplingRate);\r\n this.frameCount++;\r\n return header.version >= 2 && header.layer === 0 ? this.parseAdts(header) : this.parseAudioFrameHeader(header);\r\n }\r\n /**\r\n * @return {Promise} true if parser should quit\r\n */\r\n async parseAudioFrameHeader(header) {\r\n this.metadata.setFormat('numberOfChannels', header.channelMode === 'mono' ? 1 : 2);\r\n this.metadata.setFormat('bitrate', header.bitrate);\r\n if (this.frameCount < 20 * 10000) {\r\n debug('offset=%s MP%s bitrate=%s sample-rate=%s', this.tokenizer.position - 4, header.layer, header.bitrate, header.samplingRate);\r\n }\r\n const slot_size = header.calcSlotSize();\r\n if (slot_size === null) {\r\n throw new Error('invalid slot_size');\r\n }\r\n const samples_per_frame = header.calcSamplesPerFrame();\r\n debug(`samples_per_frame=${samples_per_frame}`);\r\n const bps = samples_per_frame / 8.0;\r\n const fsize = (bps * header.bitrate / header.samplingRate) +\r\n ((header.padding) ? slot_size : 0);\r\n this.frame_size = Math.floor(fsize);\r\n this.audioFrameHeader = header;\r\n this.bitrates.push(header.bitrate);\r\n // xtra header only exists in first frame\r\n if (this.frameCount === 1) {\r\n this.offset = FrameHeader.len;\r\n await this.skipSideInformation();\r\n return false;\r\n }\r\n if (this.frameCount === 3) {\r\n // the stream is CBR if the first 3 frame bitrates are the same\r\n if (this.areAllSame(this.bitrates)) {\r\n // Actual calculation will be done in finalize\r\n this.samplesPerFrame = samples_per_frame;\r\n this.metadata.setFormat('codecProfile', 'CBR');\r\n if (this.tokenizer.fileInfo.size)\r\n return true; // Will calculate duration based on the file size\r\n }\r\n else if (this.metadata.format.duration) {\r\n return true; // We already got the duration, stop processing MPEG stream any further\r\n }\r\n if (!this.options.duration) {\r\n return true; // Enforce duration not enabled, stop processing entire stream\r\n }\r\n }\r\n // once we know the file is VBR attach listener to end of\r\n // stream so we can do the duration calculation when we\r\n // have counted all the frames\r\n if (this.options.duration && this.frameCount === 4) {\r\n this.samplesPerFrame = samples_per_frame;\r\n this.calculateEofDuration = true;\r\n }\r\n this.offset = 4;\r\n if (header.isProtectedByCRC) {\r\n await this.parseCrc();\r\n return false;\r\n }\r\n else {\r\n await this.skipSideInformation();\r\n return false;\r\n }\r\n }\r\n async parseAdts(header) {\r\n const buf = Buffer.alloc(3);\r\n await this.tokenizer.readBuffer(buf);\r\n header.frameLength += common.getBitAllignedNumber(buf, 0, 0, 11);\r\n this.totalDataLength += header.frameLength;\r\n this.samplesPerFrame = 1024;\r\n const framesPerSec = header.samplingRate / this.samplesPerFrame;\r\n const bytesPerFrame = this.frameCount === 0 ? 0 : this.totalDataLength / this.frameCount;\r\n const bitrate = 8 * bytesPerFrame * framesPerSec + 0.5;\r\n this.metadata.setFormat('bitrate', bitrate);\r\n debug(`frame-count=${this.frameCount}, size=${header.frameLength} bytes, bit-rate=${bitrate}`);\r\n await this.tokenizer.ignore(header.frameLength > 7 ? header.frameLength - 7 : 1);\r\n // Consume remaining header and frame data\r\n if (this.frameCount === 3) {\r\n this.metadata.setFormat('codecProfile', header.codecProfile);\r\n if (header.mp4ChannelConfig) {\r\n this.metadata.setFormat('numberOfChannels', header.mp4ChannelConfig.length);\r\n }\r\n if (this.options.duration) {\r\n this.calculateEofDuration = true;\r\n }\r\n else {\r\n return true; // Stop parsing after the third frame\r\n }\r\n }\r\n return false;\r\n }\r\n async parseCrc() {\r\n this.crc = await this.tokenizer.readNumber(Token.INT16_BE);\r\n this.offset += 2;\r\n return this.skipSideInformation();\r\n }\r\n async skipSideInformation() {\r\n const sideinfo_length = this.audioFrameHeader.calculateSideInfoLength();\r\n // side information\r\n await this.tokenizer.readToken(new Token.Uint8ArrayType(sideinfo_length));\r\n this.offset += sideinfo_length;\r\n await this.readXtraInfoHeader();\r\n return;\r\n }\r\n async readXtraInfoHeader() {\r\n const headerTag = await this.tokenizer.readToken(XingTag_1.InfoTagHeaderTag);\r\n this.offset += XingTag_1.InfoTagHeaderTag.len; // 12\r\n switch (headerTag) {\r\n case 'Info':\r\n this.metadata.setFormat('codecProfile', 'CBR');\r\n return this.readXingInfoHeader();\r\n case 'Xing':\r\n const infoTag = await this.readXingInfoHeader();\r\n const codecProfile = getVbrCodecProfile(infoTag.vbrScale);\r\n this.metadata.setFormat('codecProfile', codecProfile);\r\n return null;\r\n case 'Xtra':\r\n // ToDo: ???\r\n break;\r\n case 'LAME':\r\n const version = await this.tokenizer.readToken(XingTag_1.LameEncoderVersion);\r\n if (this.frame_size >= this.offset + XingTag_1.LameEncoderVersion.len) {\r\n this.offset += XingTag_1.LameEncoderVersion.len;\r\n this.metadata.setFormat('tool', 'LAME ' + version);\r\n await this.skipFrameData(this.frame_size - this.offset);\r\n return null;\r\n }\r\n else {\r\n this.metadata.addWarning('Corrupt LAME header');\r\n break;\r\n }\r\n // ToDo: ???\r\n }\r\n // ToDo: promise duration???\r\n const frameDataLeft = this.frame_size - this.offset;\r\n if (frameDataLeft < 0) {\r\n this.metadata.addWarning('Frame ' + this.frameCount + 'corrupt: negative frameDataLeft');\r\n }\r\n else {\r\n await this.skipFrameData(frameDataLeft);\r\n }\r\n return null;\r\n }\r\n /**\r\n * Ref: http://gabriel.mp3-tech.org/mp3infotag.html\r\n * @returns {Promise}\r\n */\r\n async readXingInfoHeader() {\r\n const offset = this.tokenizer.position;\r\n const infoTag = await (0, XingTag_1.readXingHeader)(this.tokenizer);\r\n this.offset += this.tokenizer.position - offset;\r\n if (infoTag.lame) {\r\n this.metadata.setFormat('tool', 'LAME ' + common.stripNulls(infoTag.lame.version));\r\n if (infoTag.lame.extended) {\r\n // this.metadata.setFormat('trackGain', infoTag.lame.extended.track_gain);\r\n this.metadata.setFormat('trackPeakLevel', infoTag.lame.extended.track_peak);\r\n if (infoTag.lame.extended.track_gain) {\r\n this.metadata.setFormat('trackGain', infoTag.lame.extended.track_gain.adjustment);\r\n }\r\n if (infoTag.lame.extended.album_gain) {\r\n this.metadata.setFormat('albumGain', infoTag.lame.extended.album_gain.adjustment);\r\n }\r\n this.metadata.setFormat('duration', infoTag.lame.extended.music_length / 1000);\r\n }\r\n }\r\n if (infoTag.streamSize) {\r\n const duration = this.audioFrameHeader.calcDuration(infoTag.numFrames);\r\n this.metadata.setFormat('duration', duration);\r\n debug('Get duration from Xing header: %s', this.metadata.format.duration);\r\n return infoTag;\r\n }\r\n // frames field is not present\r\n const frameDataLeft = this.frame_size - this.offset;\r\n await this.skipFrameData(frameDataLeft);\r\n return infoTag;\r\n }\r\n async skipFrameData(frameDataLeft) {\r\n if (frameDataLeft < 0)\r\n throw new Error('frame-data-left cannot be negative');\r\n await this.tokenizer.ignore(frameDataLeft);\r\n this.countSkipFrameData += frameDataLeft;\r\n }\r\n areAllSame(array) {\r\n const first = array[0];\r\n return array.every(element => {\r\n return element === first;\r\n });\r\n }\r\n}\r\nexports.MpegParser = MpegParser;\r\n","\"use strict\";\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nexports.ReplayGain = void 0;\r\nconst common = require(\"../common/Util\");\r\n/**\r\n * https://github.com/Borewit/music-metadata/wiki/Replay-Gain-Data-Format#name-code\r\n */\r\nvar NameCode;\r\n(function (NameCode) {\r\n /**\r\n * not set\r\n */\r\n NameCode[NameCode[\"not_set\"] = 0] = \"not_set\";\r\n /**\r\n * Radio Gain Adjustment\r\n */\r\n NameCode[NameCode[\"radio\"] = 1] = \"radio\";\r\n /**\r\n * Audiophile Gain Adjustment\r\n */\r\n NameCode[NameCode[\"audiophile\"] = 2] = \"audiophile\";\r\n})(NameCode || (NameCode = {}));\r\n/**\r\n * https://github.com/Borewit/music-metadata/wiki/Replay-Gain-Data-Format#originator-code\r\n */\r\nvar ReplayGainOriginator;\r\n(function (ReplayGainOriginator) {\r\n /**\r\n * Replay Gain unspecified\r\n */\r\n ReplayGainOriginator[ReplayGainOriginator[\"unspecified\"] = 0] = \"unspecified\";\r\n /**\r\n * Replay Gain pre-set by artist/producer/mastering engineer\r\n */\r\n ReplayGainOriginator[ReplayGainOriginator[\"engineer\"] = 1] = \"engineer\";\r\n /**\r\n * Replay Gain set by user\r\n */\r\n ReplayGainOriginator[ReplayGainOriginator[\"user\"] = 2] = \"user\";\r\n /**\r\n * Replay Gain determined automatically, as described on this site\r\n */\r\n ReplayGainOriginator[ReplayGainOriginator[\"automatic\"] = 3] = \"automatic\";\r\n /**\r\n * Set by simple RMS average\r\n */\r\n ReplayGainOriginator[ReplayGainOriginator[\"rms_average\"] = 4] = \"rms_average\";\r\n})(ReplayGainOriginator || (ReplayGainOriginator = {}));\r\n/**\r\n * Replay Gain Data Format\r\n *\r\n * https://github.com/Borewit/music-metadata/wiki/Replay-Gain-Data-Format\r\n */\r\nexports.ReplayGain = {\r\n len: 2,\r\n get: (buf, off) => {\r\n const gain_type = common.getBitAllignedNumber(buf, off, 0, 3);\r\n const sign = common.getBitAllignedNumber(buf, off, 6, 1);\r\n const gain_adj = common.getBitAllignedNumber(buf, off, 7, 9) / 10.0;\r\n if (gain_type > 0) {\r\n return {\r\n type: common.getBitAllignedNumber(buf, off, 0, 3),\r\n origin: common.getBitAllignedNumber(buf, off, 3, 3),\r\n adjustment: (sign ? -gain_adj : gain_adj)\r\n };\r\n }\r\n return undefined;\r\n }\r\n};\r\n","\"use strict\";\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nexports.readXingHeader = exports.XingHeaderFlags = exports.LameEncoderVersion = exports.InfoTagHeaderTag = void 0;\r\nconst Token = require(\"token-types\");\r\nconst util = require(\"../common/Util\");\r\nconst ExtendedLameHeader_1 = require(\"./ExtendedLameHeader\");\r\n/**\r\n * Info Tag: Xing, LAME\r\n */\r\nexports.InfoTagHeaderTag = new Token.StringType(4, 'ascii');\r\n/**\r\n * LAME TAG value\r\n * Did not find any official documentation for this\r\n * Value e.g.: \"3.98.4\"\r\n */\r\nexports.LameEncoderVersion = new Token.StringType(6, 'ascii');\r\n/**\r\n * Info Tag\r\n * Ref: http://gabriel.mp3-tech.org/mp3infotag.html\r\n */\r\nexports.XingHeaderFlags = {\r\n len: 4,\r\n get: (buf, off) => {\r\n return {\r\n frames: util.isBitSet(buf, off, 31),\r\n bytes: util.isBitSet(buf, off, 30),\r\n toc: util.isBitSet(buf, off, 29),\r\n vbrScale: util.isBitSet(buf, off, 28)\r\n };\r\n }\r\n};\r\n// /**\r\n// * XING Header Tag\r\n// * Ref: http://gabriel.mp3-tech.org/mp3infotag.html\r\n// */\r\nasync function readXingHeader(tokenizer) {\r\n const flags = await tokenizer.readToken(exports.XingHeaderFlags);\r\n const xingInfoTag = {};\r\n if (flags.frames) {\r\n xingInfoTag.numFrames = await tokenizer.readToken(Token.UINT32_BE);\r\n }\r\n if (flags.bytes) {\r\n xingInfoTag.streamSize = await tokenizer.readToken(Token.UINT32_BE);\r\n }\r\n if (flags.toc) {\r\n xingInfoTag.toc = Buffer.alloc(100);\r\n await tokenizer.readBuffer(xingInfoTag.toc);\r\n }\r\n if (flags.vbrScale) {\r\n xingInfoTag.vbrScale = await tokenizer.readToken(Token.UINT32_BE);\r\n }\r\n const lameTag = await tokenizer.peekToken(new Token.StringType(4, 'ascii'));\r\n if (lameTag === 'LAME') {\r\n await tokenizer.ignore(4);\r\n xingInfoTag.lame = {\r\n version: await tokenizer.readToken(new Token.StringType(5, 'ascii'))\r\n };\r\n const match = xingInfoTag.lame.version.match(/\\d+.\\d+/g);\r\n if (match) {\r\n const majorMinorVersion = xingInfoTag.lame.version.match(/\\d+.\\d+/g)[0]; // e.g. 3.97\r\n const version = majorMinorVersion.split('.').map(n => parseInt(n, 10));\r\n if (version[0] >= 3 && version[1] >= 90) {\r\n xingInfoTag.lame.extended = await tokenizer.readToken(ExtendedLameHeader_1.ExtendedLameHeader);\r\n }\r\n }\r\n }\r\n return xingInfoTag;\r\n}\r\nexports.readXingHeader = readXingHeader;\r\n","\"use strict\";\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nconst debug_1 = require(\"debug\");\r\nconst Token = require(\"token-types\");\r\nconst AbstractID3Parser_1 = require(\"../id3v2/AbstractID3Parser\");\r\nconst MpcSv8Parser_1 = require(\"./sv8/MpcSv8Parser\");\r\nconst MpcSv7Parser_1 = require(\"./sv7/MpcSv7Parser\");\r\nconst debug = (0, debug_1.default)('music-metadata:parser:musepack');\r\nclass MusepackParser extends AbstractID3Parser_1.AbstractID3Parser {\r\n async postId3v2Parse() {\r\n const signature = await this.tokenizer.peekToken(new Token.StringType(3, 'binary'));\r\n let mpcParser;\r\n switch (signature) {\r\n case 'MP+': {\r\n debug('Musepack stream-version 7');\r\n mpcParser = new MpcSv7Parser_1.MpcSv7Parser();\r\n break;\r\n }\r\n case 'MPC': {\r\n debug('Musepack stream-version 8');\r\n mpcParser = new MpcSv8Parser_1.MpcSv8Parser();\r\n break;\r\n }\r\n default: {\r\n throw new Error('Invalid Musepack signature prefix');\r\n }\r\n }\r\n mpcParser.init(this.metadata, this.tokenizer, this.options);\r\n return mpcParser.parse();\r\n }\r\n}\r\nexports.default = MusepackParser;\r\n","\"use strict\";\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nexports.BitReader = void 0;\r\nconst Token = require(\"token-types\");\r\nclass BitReader {\r\n constructor(tokenizer) {\r\n this.tokenizer = tokenizer;\r\n this.pos = 0;\r\n this.dword = undefined;\r\n }\r\n /**\r\n *\r\n * @param bits 1..30 bits\r\n */\r\n async read(bits) {\r\n while (this.dword === undefined) {\r\n this.dword = await this.tokenizer.readToken(Token.UINT32_LE);\r\n }\r\n let out = this.dword;\r\n this.pos += bits;\r\n if (this.pos < 32) {\r\n out >>>= (32 - this.pos);\r\n return out & ((1 << bits) - 1);\r\n }\r\n else {\r\n this.pos -= 32;\r\n if (this.pos === 0) {\r\n this.dword = undefined;\r\n return out & ((1 << bits) - 1);\r\n }\r\n else {\r\n this.dword = await this.tokenizer.readToken(Token.UINT32_LE);\r\n if (this.pos) {\r\n out <<= this.pos;\r\n out |= this.dword >>> (32 - this.pos);\r\n }\r\n return out & ((1 << bits) - 1);\r\n }\r\n }\r\n }\r\n async ignore(bits) {\r\n if (this.pos > 0) {\r\n const remaining = 32 - this.pos;\r\n this.dword = undefined;\r\n bits -= remaining;\r\n this.pos = 0;\r\n }\r\n const remainder = bits % 32;\r\n const numOfWords = (bits - remainder) / 32;\r\n await this.tokenizer.ignore(numOfWords * 4);\r\n return this.read(remainder);\r\n }\r\n}\r\nexports.BitReader = BitReader;\r\n","\"use strict\";\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nexports.MpcSv7Parser = void 0;\r\nconst debug_1 = require(\"debug\");\r\nconst BasicParser_1 = require(\"../../common/BasicParser\");\r\nconst APEv2Parser_1 = require(\"../../apev2/APEv2Parser\");\r\nconst BitReader_1 = require(\"./BitReader\");\r\nconst SV7 = require(\"./StreamVersion7\");\r\nconst debug = (0, debug_1.default)('music-metadata:parser:musepack');\r\nclass MpcSv7Parser extends BasicParser_1.BasicParser {\r\n constructor() {\r\n super(...arguments);\r\n this.audioLength = 0;\r\n }\r\n async parse() {\r\n const header = await this.tokenizer.readToken(SV7.Header);\r\n if (header.signature !== 'MP+')\r\n throw new Error('Unexpected magic number');\r\n debug(`stream-version=${header.streamMajorVersion}.${header.streamMinorVersion}`);\r\n this.metadata.setFormat('container', 'Musepack, SV7');\r\n this.metadata.setFormat('sampleRate', header.sampleFrequency);\r\n const numberOfSamples = 1152 * (header.frameCount - 1) + header.lastFrameLength;\r\n this.metadata.setFormat('numberOfSamples', numberOfSamples);\r\n this.duration = numberOfSamples / header.sampleFrequency;\r\n this.metadata.setFormat('duration', this.duration);\r\n this.bitreader = new BitReader_1.BitReader(this.tokenizer);\r\n this.metadata.setFormat('numberOfChannels', header.midSideStereo || header.intensityStereo ? 2 : 1);\r\n const version = await this.bitreader.read(8);\r\n this.metadata.setFormat('codec', (version / 100).toFixed(2));\r\n await this.skipAudioData(header.frameCount);\r\n debug(`End of audio stream, switching to APEv2, offset=${this.tokenizer.position}`);\r\n return APEv2Parser_1.APEv2Parser.tryParseApeHeader(this.metadata, this.tokenizer, this.options);\r\n }\r\n async skipAudioData(frameCount) {\r\n while (frameCount-- > 0) {\r\n const frameLength = await this.bitreader.read(20);\r\n this.audioLength += 20 + frameLength;\r\n await this.bitreader.ignore(frameLength);\r\n }\r\n // last frame\r\n const lastFrameLength = await this.bitreader.read(11);\r\n this.audioLength += lastFrameLength;\r\n this.metadata.setFormat('bitrate', this.audioLength / this.duration);\r\n }\r\n}\r\nexports.MpcSv7Parser = MpcSv7Parser;\r\n","\"use strict\";\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nexports.Header = void 0;\r\nconst Token = require(\"token-types\");\r\nconst util = require(\"../../common/Util\");\r\n/**\r\n * BASIC STRUCTURE\r\n */\r\nexports.Header = {\r\n len: 6 * 4,\r\n get: (buf, off) => {\r\n const header = {\r\n // word 0\r\n signature: Buffer.from(buf).toString('latin1', off, off + 3),\r\n // versionIndex number * 1000 (3.81 = 3810) (remember that 4-byte alignment causes this to take 4-bytes)\r\n streamMinorVersion: util.getBitAllignedNumber(buf, off + 3, 0, 4),\r\n streamMajorVersion: util.getBitAllignedNumber(buf, off + 3, 4, 4),\r\n // word 1\r\n frameCount: Token.UINT32_LE.get(buf, off + 4),\r\n // word 2\r\n maxLevel: Token.UINT16_LE.get(buf, off + 8),\r\n sampleFrequency: [44100, 48000, 37800, 32000][util.getBitAllignedNumber(buf, off + 10, 0, 2)],\r\n link: util.getBitAllignedNumber(buf, off + 10, 2, 2),\r\n profile: util.getBitAllignedNumber(buf, off + 10, 4, 4),\r\n maxBand: util.getBitAllignedNumber(buf, off + 11, 0, 6),\r\n intensityStereo: util.isBitSet(buf, off + 11, 6),\r\n midSideStereo: util.isBitSet(buf, off + 11, 7),\r\n // word 3\r\n titlePeak: Token.UINT16_LE.get(buf, off + 12),\r\n titleGain: Token.UINT16_LE.get(buf, off + 14),\r\n // word 4\r\n albumPeak: Token.UINT16_LE.get(buf, off + 16),\r\n albumGain: Token.UINT16_LE.get(buf, off + 18),\r\n // word\r\n lastFrameLength: (Token.UINT32_LE.get(buf, off + 20) >>> 20) & 0x7FF,\r\n trueGapless: util.isBitSet(buf, off + 23, 0)\r\n };\r\n header.lastFrameLength = header.trueGapless ? (Token.UINT32_LE.get(buf, 20) >>> 20) & 0x7FF : 0;\r\n return header;\r\n }\r\n};\r\n","\"use strict\";\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nexports.MpcSv8Parser = void 0;\r\nconst debug_1 = require(\"debug\");\r\nconst BasicParser_1 = require(\"../../common/BasicParser\");\r\nconst APEv2Parser_1 = require(\"../../apev2/APEv2Parser\");\r\nconst FourCC_1 = require(\"../../common/FourCC\");\r\nconst SV8 = require(\"./StreamVersion8\");\r\nconst debug = (0, debug_1.default)('music-metadata:parser:musepack');\r\nclass MpcSv8Parser extends BasicParser_1.BasicParser {\r\n constructor() {\r\n super(...arguments);\r\n this.audioLength = 0;\r\n }\r\n async parse() {\r\n const signature = await this.tokenizer.readToken(FourCC_1.FourCcToken);\r\n if (signature !== 'MPCK')\r\n throw new Error('Invalid Magic number');\r\n this.metadata.setFormat('container', 'Musepack, SV8');\r\n return this.parsePacket();\r\n }\r\n async parsePacket() {\r\n const sv8reader = new SV8.StreamReader(this.tokenizer);\r\n do {\r\n const header = await sv8reader.readPacketHeader();\r\n debug(`packet-header key=${header.key}, payloadLength=${header.payloadLength}`);\r\n switch (header.key) {\r\n case 'SH': // Stream Header\r\n const sh = await sv8reader.readStreamHeader(header.payloadLength);\r\n this.metadata.setFormat('numberOfSamples', sh.sampleCount);\r\n this.metadata.setFormat('sampleRate', sh.sampleFrequency);\r\n this.metadata.setFormat('duration', sh.sampleCount / sh.sampleFrequency);\r\n this.metadata.setFormat('numberOfChannels', sh.channelCount);\r\n break;\r\n case 'AP': // Audio Packet\r\n this.audioLength += header.payloadLength;\r\n await this.tokenizer.ignore(header.payloadLength);\r\n break;\r\n case 'RG': // Replaygain\r\n case 'EI': // Encoder Info\r\n case 'SO': // Seek Table Offset\r\n case 'ST': // Seek Table\r\n case 'CT': // Chapter-Tag\r\n await this.tokenizer.ignore(header.payloadLength);\r\n break;\r\n case 'SE': // Stream End\r\n this.metadata.setFormat('bitrate', this.audioLength * 8 / this.metadata.format.duration);\r\n return APEv2Parser_1.APEv2Parser.tryParseApeHeader(this.metadata, this.tokenizer, this.options);\r\n default:\r\n throw new Error(`Unexpected header: ${header.key}`);\r\n }\r\n } while (true);\r\n }\r\n}\r\nexports.MpcSv8Parser = MpcSv8Parser;\r\n","\"use strict\";\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nexports.StreamReader = void 0;\r\nconst Token = require(\"token-types\");\r\nconst debug_1 = require(\"debug\");\r\nconst util = require(\"../../common/Util\");\r\nconst debug = (0, debug_1.default)('music-metadata:parser:musepack:sv8');\r\nconst PacketKey = new Token.StringType(2, 'binary');\r\n/**\r\n * Stream Header Packet part 1\r\n * Ref: http://trac.musepack.net/musepack/wiki/SV8Specification#StreamHeaderPacket\r\n */\r\nconst SH_part1 = {\r\n len: 5,\r\n get: (buf, off) => {\r\n return {\r\n crc: Token.UINT32_LE.get(buf, off),\r\n streamVersion: Token.UINT8.get(buf, off + 4)\r\n };\r\n }\r\n};\r\n/**\r\n * Stream Header Packet part 3\r\n * Ref: http://trac.musepack.net/musepack/wiki/SV8Specification#StreamHeaderPacket\r\n */\r\nconst SH_part3 = {\r\n len: 2,\r\n get: (buf, off) => {\r\n return {\r\n sampleFrequency: [44100, 48000, 37800, 32000][util.getBitAllignedNumber(buf, off, 0, 3)],\r\n maxUsedBands: util.getBitAllignedNumber(buf, off, 3, 5),\r\n channelCount: util.getBitAllignedNumber(buf, off + 1, 0, 4) + 1,\r\n msUsed: util.isBitSet(buf, off + 1, 4),\r\n audioBlockFrames: util.getBitAllignedNumber(buf, off + 1, 5, 3)\r\n };\r\n }\r\n};\r\nclass StreamReader {\r\n constructor(tokenizer) {\r\n this.tokenizer = tokenizer;\r\n }\r\n async readPacketHeader() {\r\n const key = await this.tokenizer.readToken(PacketKey);\r\n const size = await this.readVariableSizeField();\r\n return {\r\n key,\r\n payloadLength: size.value - 2 - size.len\r\n };\r\n }\r\n async readStreamHeader(size) {\r\n const streamHeader = {};\r\n debug(`Reading SH at offset=${this.tokenizer.position}`);\r\n const part1 = await this.tokenizer.readToken(SH_part1);\r\n size -= SH_part1.len;\r\n Object.assign(streamHeader, part1);\r\n debug(`SH.streamVersion = ${part1.streamVersion}`);\r\n const sampleCount = await this.readVariableSizeField();\r\n size -= sampleCount.len;\r\n streamHeader.sampleCount = sampleCount.value;\r\n const bs = await this.readVariableSizeField();\r\n size -= bs.len;\r\n streamHeader.beginningOfSilence = bs.value;\r\n const part3 = await this.tokenizer.readToken(SH_part3);\r\n size -= SH_part3.len;\r\n Object.assign(streamHeader, part3);\r\n // assert.equal(size, 0);\r\n await this.tokenizer.ignore(size);\r\n return streamHeader;\r\n }\r\n async readVariableSizeField(len = 1, hb = 0) {\r\n let n = await this.tokenizer.readNumber(Token.UINT8);\r\n if ((n & 0x80) === 0) {\r\n return { len, value: hb + n };\r\n }\r\n n &= 0x7F;\r\n n += hb;\r\n return this.readVariableSizeField(len + 1, n << 7);\r\n }\r\n}\r\nexports.StreamReader = StreamReader;\r\n","\"use strict\";\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nexports.OggParser = exports.SegmentTable = void 0;\r\nconst Token = require(\"token-types\");\r\nconst core_1 = require(\"strtok3/lib/core\");\r\nconst debug_1 = require(\"debug\");\r\nconst util = require(\"../common/Util\");\r\nconst FourCC_1 = require(\"../common/FourCC\");\r\nconst BasicParser_1 = require(\"../common/BasicParser\");\r\nconst VorbisParser_1 = require(\"./vorbis/VorbisParser\");\r\nconst OpusParser_1 = require(\"./opus/OpusParser\");\r\nconst SpeexParser_1 = require(\"./speex/SpeexParser\");\r\nconst TheoraParser_1 = require(\"./theora/TheoraParser\");\r\nconst debug = (0, debug_1.default)('music-metadata:parser:ogg');\r\nclass SegmentTable {\r\n constructor(header) {\r\n this.len = header.page_segments;\r\n }\r\n static sum(buf, off, len) {\r\n let s = 0;\r\n for (let i = off; i < off + len; ++i) {\r\n s += buf[i];\r\n }\r\n return s;\r\n }\r\n get(buf, off) {\r\n return {\r\n totalPageSize: SegmentTable.sum(buf, off, this.len)\r\n };\r\n }\r\n}\r\nexports.SegmentTable = SegmentTable;\r\n/**\r\n * Parser for Ogg logical bitstream framing\r\n */\r\nclass OggParser extends BasicParser_1.BasicParser {\r\n /**\r\n * Parse page\r\n * @returns {Promise}\r\n */\r\n async parse() {\r\n debug('pos=%s, parsePage()', this.tokenizer.position);\r\n try {\r\n let header;\r\n do {\r\n header = await this.tokenizer.readToken(OggParser.Header);\r\n if (header.capturePattern !== 'OggS')\r\n throw new Error('Invalid Ogg capture pattern');\r\n this.metadata.setFormat('container', 'Ogg');\r\n this.header = header;\r\n this.pageNumber = header.pageSequenceNo;\r\n debug('page#=%s, Ogg.id=%s', header.pageSequenceNo, header.capturePattern);\r\n const segmentTable = await this.tokenizer.readToken(new SegmentTable(header));\r\n debug('totalPageSize=%s', segmentTable.totalPageSize);\r\n const pageData = await this.tokenizer.readToken(new Token.Uint8ArrayType(segmentTable.totalPageSize));\r\n debug('firstPage=%s, lastPage=%s, continued=%s', header.headerType.firstPage, header.headerType.lastPage, header.headerType.continued);\r\n if (header.headerType.firstPage) {\r\n const id = new Token.StringType(7, 'ascii').get(Buffer.from(pageData), 0);\r\n switch (id) {\r\n case '\\x01vorbis': // Ogg/Vorbis\r\n debug('Set page consumer to Ogg/Vorbis');\r\n this.pageConsumer = new VorbisParser_1.VorbisParser(this.metadata, this.options);\r\n break;\r\n case 'OpusHea': // Ogg/Opus\r\n debug('Set page consumer to Ogg/Opus');\r\n this.pageConsumer = new OpusParser_1.OpusParser(this.metadata, this.options, this.tokenizer);\r\n break;\r\n case 'Speex ': // Ogg/Speex\r\n debug('Set page consumer to Ogg/Speex');\r\n this.pageConsumer = new SpeexParser_1.SpeexParser(this.metadata, this.options, this.tokenizer);\r\n break;\r\n case 'fishead':\r\n case '\\x00theora': // Ogg/Theora\r\n debug('Set page consumer to Ogg/Theora');\r\n this.pageConsumer = new TheoraParser_1.TheoraParser(this.metadata, this.options, this.tokenizer);\r\n break;\r\n default:\r\n throw new Error('gg audio-codec not recognized (id=' + id + ')');\r\n }\r\n }\r\n this.pageConsumer.parsePage(header, pageData);\r\n } while (!header.headerType.lastPage);\r\n }\r\n catch (err) {\r\n if (err instanceof core_1.EndOfStreamError) {\r\n this.metadata.addWarning('Last OGG-page is not marked with last-page flag');\r\n debug(`End-of-stream`);\r\n this.metadata.addWarning('Last OGG-page is not marked with last-page flag');\r\n if (this.header) {\r\n this.pageConsumer.calculateDuration(this.header);\r\n }\r\n }\r\n else if (err.message.startsWith('FourCC')) {\r\n if (this.pageNumber > 0) {\r\n // ignore this error: work-around if last OGG-page is not marked with last-page flag\r\n this.metadata.addWarning('Invalid FourCC ID, maybe last OGG-page is not marked with last-page flag');\r\n this.pageConsumer.flush();\r\n }\r\n }\r\n else {\r\n throw err;\r\n }\r\n }\r\n }\r\n}\r\nexports.OggParser = OggParser;\r\nOggParser.Header = {\r\n len: 27,\r\n get: (buf, off) => {\r\n return {\r\n capturePattern: FourCC_1.FourCcToken.get(buf, off),\r\n version: Token.UINT8.get(buf, off + 4),\r\n headerType: {\r\n continued: util.getBit(buf, off + 5, 0),\r\n firstPage: util.getBit(buf, off + 5, 1),\r\n lastPage: util.getBit(buf, off + 5, 2)\r\n },\r\n // packet_flag: buf.readUInt8(off + 5),\r\n absoluteGranulePosition: Number(Token.UINT64_LE.get(buf, off + 6)),\r\n streamSerialNumber: Token.UINT32_LE.get(buf, off + 14),\r\n pageSequenceNo: Token.UINT32_LE.get(buf, off + 18),\r\n pageChecksum: Token.UINT32_LE.get(buf, off + 22),\r\n page_segments: Token.UINT8.get(buf, off + 26)\r\n };\r\n }\r\n};\r\n","\"use strict\";\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nexports.IdHeader = void 0;\r\nconst Token = require(\"token-types\");\r\n/**\r\n * Opus ID Header parser\r\n * Ref: https://wiki.xiph.org/OggOpus#ID_Header\r\n */\r\nclass IdHeader {\r\n constructor(len) {\r\n this.len = len;\r\n if (len < 19) {\r\n throw new Error(\"ID-header-page 0 should be at least 19 bytes long\");\r\n }\r\n }\r\n get(buf, off) {\r\n return {\r\n magicSignature: new Token.StringType(8, 'ascii').get(buf, off + 0),\r\n version: buf.readUInt8(off + 8),\r\n channelCount: buf.readUInt8(off + 9),\r\n preSkip: buf.readInt16LE(off + 10),\r\n inputSampleRate: buf.readInt32LE(off + 12),\r\n outputGain: buf.readInt16LE(off + 16),\r\n channelMapping: buf.readUInt8(off + 18)\r\n };\r\n }\r\n}\r\nexports.IdHeader = IdHeader;\r\n","\"use strict\";\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nexports.OpusParser = void 0;\r\nconst Token = require(\"token-types\");\r\nconst VorbisParser_1 = require(\"../vorbis/VorbisParser\");\r\nconst Opus = require(\"./Opus\");\r\n/**\r\n * Opus parser\r\n * Internet Engineering Task Force (IETF) - RFC 6716\r\n * Used by OggParser\r\n */\r\nclass OpusParser extends VorbisParser_1.VorbisParser {\r\n constructor(metadata, options, tokenizer) {\r\n super(metadata, options);\r\n this.tokenizer = tokenizer;\r\n this.lastPos = -1;\r\n }\r\n /**\r\n * Parse first Opus Ogg page\r\n * @param {IPageHeader} header\r\n * @param {Buffer} pageData\r\n */\r\n parseFirstPage(header, pageData) {\r\n this.metadata.setFormat('codec', 'Opus');\r\n // Parse Opus ID Header\r\n this.idHeader = new Opus.IdHeader(pageData.length).get(pageData, 0);\r\n if (this.idHeader.magicSignature !== \"OpusHead\")\r\n throw new Error(\"Illegal ogg/Opus magic-signature\");\r\n this.metadata.setFormat('sampleRate', this.idHeader.inputSampleRate);\r\n this.metadata.setFormat('numberOfChannels', this.idHeader.channelCount);\r\n }\r\n parseFullPage(pageData) {\r\n const magicSignature = new Token.StringType(8, 'ascii').get(pageData, 0);\r\n switch (magicSignature) {\r\n case 'OpusTags':\r\n this.parseUserCommentList(pageData, 8);\r\n this.lastPos = this.tokenizer.position - pageData.length;\r\n break;\r\n default:\r\n break;\r\n }\r\n }\r\n calculateDuration(header) {\r\n if (this.metadata.format.sampleRate && header.absoluteGranulePosition >= 0) {\r\n // Calculate duration\r\n const pos_48bit = header.absoluteGranulePosition - this.idHeader.preSkip;\r\n this.metadata.setFormat('numberOfSamples', pos_48bit);\r\n this.metadata.setFormat('duration', pos_48bit / 48000);\r\n if (this.lastPos !== -1 && this.tokenizer.fileInfo.size && this.metadata.format.duration) {\r\n const dataSize = this.tokenizer.fileInfo.size - this.lastPos;\r\n this.metadata.setFormat('bitrate', 8 * dataSize / this.metadata.format.duration);\r\n }\r\n }\r\n }\r\n}\r\nexports.OpusParser = OpusParser;\r\n","\"use strict\";\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nexports.Header = void 0;\r\nconst Token = require(\"token-types\");\r\nconst util = require(\"../../common/Util\");\r\n/**\r\n * Speex Header Packet\r\n * Ref: https://www.speex.org/docs/manual/speex-manual/node8.html#SECTION00830000000000000000\r\n */\r\nexports.Header = {\r\n len: 80,\r\n get: (buf, off) => {\r\n return {\r\n speex: new Token.StringType(8, 'ascii').get(buf, off + 0),\r\n version: util.trimRightNull(new Token.StringType(20, 'ascii').get(buf, off + 8)),\r\n version_id: buf.readInt32LE(off + 28),\r\n header_size: buf.readInt32LE(off + 32),\r\n rate: buf.readInt32LE(off + 36),\r\n mode: buf.readInt32LE(off + 40),\r\n mode_bitstream_version: buf.readInt32LE(off + 44),\r\n nb_channels: buf.readInt32LE(off + 48),\r\n bitrate: buf.readInt32LE(off + 52),\r\n frame_size: buf.readInt32LE(off + 56),\r\n vbr: buf.readInt32LE(off + 60),\r\n frames_per_packet: buf.readInt32LE(off + 64),\r\n extra_headers: buf.readInt32LE(off + 68),\r\n reserved1: buf.readInt32LE(off + 72),\r\n reserved2: buf.readInt32LE(off + 76)\r\n };\r\n }\r\n};\r\n","\"use strict\";\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nexports.SpeexParser = void 0;\r\nconst debug_1 = require(\"debug\");\r\nconst VorbisParser_1 = require(\"../vorbis/VorbisParser\");\r\nconst Speex = require(\"./Speex\");\r\nconst debug = (0, debug_1.default)('music-metadata:parser:ogg:speex');\r\n/**\r\n * Speex, RFC 5574\r\n * Ref:\r\n * - https://www.speex.org/docs/manual/speex-manual/\r\n * - https://tools.ietf.org/html/rfc5574\r\n */\r\nclass SpeexParser extends VorbisParser_1.VorbisParser {\r\n constructor(metadata, options, tokenizer) {\r\n super(metadata, options);\r\n this.tokenizer = tokenizer;\r\n }\r\n /**\r\n * Parse first Speex Ogg page\r\n * @param {IPageHeader} header\r\n * @param {Buffer} pageData\r\n */\r\n parseFirstPage(header, pageData) {\r\n debug('First Ogg/Speex page');\r\n const speexHeader = Speex.Header.get(pageData, 0);\r\n this.metadata.setFormat('codec', `Speex ${speexHeader.version}`);\r\n this.metadata.setFormat('numberOfChannels', speexHeader.nb_channels);\r\n this.metadata.setFormat('sampleRate', speexHeader.rate);\r\n if (speexHeader.bitrate !== -1) {\r\n this.metadata.setFormat('bitrate', speexHeader.bitrate);\r\n }\r\n }\r\n}\r\nexports.SpeexParser = SpeexParser;\r\n","\"use strict\";\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nexports.IdentificationHeader = void 0;\r\nconst Token = require(\"token-types\");\r\n/**\r\n * 6.2 Identification Header\r\n * Ref: https://theora.org/doc/Theora.pdf: 6.2 Identification Header Decode\r\n */\r\nexports.IdentificationHeader = {\r\n len: 42,\r\n get: (buf, off) => {\r\n return {\r\n id: new Token.StringType(7, 'ascii').get(buf, off),\r\n vmaj: buf.readUInt8(off + 7),\r\n vmin: buf.readUInt8(off + 8),\r\n vrev: buf.readUInt8(off + 9),\r\n vmbw: buf.readUInt16BE(off + 10),\r\n vmbh: buf.readUInt16BE(off + 17),\r\n nombr: Token.UINT24_BE.get(buf, off + 37),\r\n nqual: buf.readUInt8(off + 40)\r\n };\r\n }\r\n};\r\n","\"use strict\";\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nexports.TheoraParser = void 0;\r\nconst debug_1 = require(\"debug\");\r\nconst Theora_1 = require(\"./Theora\");\r\nconst debug = (0, debug_1.default)('music-metadata:parser:ogg:theora');\r\n/**\r\n * Ref:\r\n * - https://theora.org/doc/Theora.pdf\r\n */\r\nclass TheoraParser {\r\n constructor(metadata, options, tokenizer) {\r\n this.metadata = metadata;\r\n this.tokenizer = tokenizer;\r\n }\r\n /**\r\n * Vorbis 1 parser\r\n * @param header Ogg Page Header\r\n * @param pageData Page data\r\n */\r\n parsePage(header, pageData) {\r\n if (header.headerType.firstPage) {\r\n this.parseFirstPage(header, pageData);\r\n }\r\n }\r\n flush() {\r\n debug('flush');\r\n }\r\n calculateDuration(header) {\r\n debug('duration calculation not implemented');\r\n }\r\n /**\r\n * Parse first Theora Ogg page. the initial identification header packet\r\n * @param {IPageHeader} header\r\n * @param {Buffer} pageData\r\n */\r\n parseFirstPage(header, pageData) {\r\n debug('First Ogg/Theora page');\r\n this.metadata.setFormat('codec', 'Theora');\r\n const idHeader = Theora_1.IdentificationHeader.get(pageData, 0);\r\n this.metadata.setFormat('bitrate', idHeader.nombr);\r\n }\r\n}\r\nexports.TheoraParser = TheoraParser;\r\n","\"use strict\";\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nexports.IdentificationHeader = exports.CommonHeader = exports.VorbisPictureToken = void 0;\r\nconst Token = require(\"token-types\");\r\nconst ID3v2Token_1 = require(\"../../id3v2/ID3v2Token\");\r\n/**\r\n * Parse the METADATA_BLOCK_PICTURE\r\n * Ref: https://wiki.xiph.org/VorbisComment#METADATA_BLOCK_PICTURE\r\n * Ref: https://xiph.org/flac/format.html#metadata_block_picture\r\n * // ToDo: move to ID3 / APIC?\r\n */\r\nclass VorbisPictureToken {\r\n constructor(len) {\r\n this.len = len;\r\n }\r\n static fromBase64(base64str) {\r\n return this.fromBuffer(Buffer.from(base64str, 'base64'));\r\n }\r\n static fromBuffer(buffer) {\r\n const pic = new VorbisPictureToken(buffer.length);\r\n return pic.get(buffer, 0);\r\n }\r\n get(buffer, offset) {\r\n const type = ID3v2Token_1.AttachedPictureType[Token.UINT32_BE.get(buffer, offset)];\r\n const mimeLen = Token.UINT32_BE.get(buffer, offset += 4);\r\n const format = buffer.toString('utf-8', offset += 4, offset + mimeLen);\r\n const descLen = Token.UINT32_BE.get(buffer, offset += mimeLen);\r\n const description = buffer.toString('utf-8', offset += 4, offset + descLen);\r\n const width = Token.UINT32_BE.get(buffer, offset += descLen);\r\n const height = Token.UINT32_BE.get(buffer, offset += 4);\r\n const colour_depth = Token.UINT32_BE.get(buffer, offset += 4);\r\n const indexed_color = Token.UINT32_BE.get(buffer, offset += 4);\r\n const picDataLen = Token.UINT32_BE.get(buffer, offset += 4);\r\n const data = Buffer.from(buffer.slice(offset += 4, offset + picDataLen));\r\n return {\r\n type,\r\n format,\r\n description,\r\n width,\r\n height,\r\n colour_depth,\r\n indexed_color,\r\n data\r\n };\r\n }\r\n}\r\nexports.VorbisPictureToken = VorbisPictureToken;\r\n/**\r\n * Comment header decoder\r\n * Ref: https://xiph.org/vorbis/doc/Vorbis_I_spec.html#x1-620004.2.1\r\n */\r\nexports.CommonHeader = {\r\n len: 7,\r\n get: (buf, off) => {\r\n return {\r\n packetType: buf.readUInt8(off),\r\n vorbis: new Token.StringType(6, 'ascii').get(buf, off + 1)\r\n };\r\n }\r\n};\r\n/**\r\n * Identification header decoder\r\n * Ref: https://xiph.org/vorbis/doc/Vorbis_I_spec.html#x1-630004.2.2\r\n */\r\nexports.IdentificationHeader = {\r\n len: 23,\r\n get: (uint8Array, off) => {\r\n const dataView = new DataView(uint8Array.buffer, uint8Array.byteOffset);\r\n return {\r\n version: dataView.getUint32(off + 0, true),\r\n channelMode: dataView.getUint8(off + 4),\r\n sampleRate: dataView.getUint32(off + 5, true),\r\n bitrateMax: dataView.getUint32(off + 9, true),\r\n bitrateNominal: dataView.getUint32(off + 13, true),\r\n bitrateMin: dataView.getUint32(off + 17, true)\r\n };\r\n }\r\n};\r\n","\"use strict\";\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nexports.VorbisDecoder = void 0;\r\nconst Token = require(\"token-types\");\r\nclass VorbisDecoder {\r\n constructor(data, offset) {\r\n this.data = data;\r\n this.offset = offset;\r\n }\r\n readInt32() {\r\n const value = Token.UINT32_LE.get(this.data, this.offset);\r\n this.offset += 4;\r\n return value;\r\n }\r\n readStringUtf8() {\r\n const len = this.readInt32();\r\n const value = Buffer.from(this.data).toString('utf-8', this.offset, this.offset + len);\r\n this.offset += len;\r\n return value;\r\n }\r\n parseUserComment() {\r\n const offset0 = this.offset;\r\n const v = this.readStringUtf8();\r\n const idx = v.indexOf('=');\r\n return {\r\n key: v.slice(0, idx).toUpperCase(),\r\n value: v.slice(idx + 1),\r\n len: this.offset - offset0\r\n };\r\n }\r\n}\r\nexports.VorbisDecoder = VorbisDecoder;\r\n","\"use strict\";\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nexports.VorbisParser = void 0;\r\nconst Token = require(\"token-types\");\r\nconst debug_1 = require(\"debug\");\r\nconst VorbisDecoder_1 = require(\"./VorbisDecoder\");\r\nconst Vorbis_1 = require(\"./Vorbis\");\r\nconst debug = (0, debug_1.default)('music-metadata:parser:ogg:vorbis1');\r\n/**\r\n * Vorbis 1 Parser.\r\n * Used by OggParser\r\n */\r\nclass VorbisParser {\r\n constructor(metadata, options) {\r\n this.metadata = metadata;\r\n this.options = options;\r\n this.pageSegments = [];\r\n }\r\n /**\r\n * Vorbis 1 parser\r\n * @param header Ogg Page Header\r\n * @param pageData Page data\r\n */\r\n parsePage(header, pageData) {\r\n if (header.headerType.firstPage) {\r\n this.parseFirstPage(header, pageData);\r\n }\r\n else {\r\n if (header.headerType.continued) {\r\n if (this.pageSegments.length === 0) {\r\n throw new Error(\"Cannot continue on previous page\");\r\n }\r\n this.pageSegments.push(pageData);\r\n }\r\n if (header.headerType.lastPage || !header.headerType.continued) {\r\n // Flush page segments\r\n if (this.pageSegments.length > 0) {\r\n const fullPage = Buffer.concat(this.pageSegments);\r\n this.parseFullPage(fullPage);\r\n }\r\n // Reset page segments\r\n this.pageSegments = header.headerType.lastPage ? [] : [pageData];\r\n }\r\n }\r\n if (header.headerType.lastPage) {\r\n this.calculateDuration(header);\r\n }\r\n }\r\n flush() {\r\n this.parseFullPage(Buffer.concat(this.pageSegments));\r\n }\r\n parseUserComment(pageData, offset) {\r\n const decoder = new VorbisDecoder_1.VorbisDecoder(pageData, offset);\r\n const tag = decoder.parseUserComment();\r\n this.addTag(tag.key, tag.value);\r\n return tag.len;\r\n }\r\n addTag(id, value) {\r\n if (id === 'METADATA_BLOCK_PICTURE' && (typeof value === 'string')) {\r\n if (this.options.skipCovers) {\r\n debug(`Ignore picture`);\r\n return;\r\n }\r\n value = Vorbis_1.VorbisPictureToken.fromBase64(value);\r\n debug(`Push picture: id=${id}, format=${value.format}`);\r\n }\r\n else {\r\n debug(`Push tag: id=${id}, value=${value}`);\r\n }\r\n this.metadata.addTag('vorbis', id, value);\r\n }\r\n calculateDuration(header) {\r\n if (this.metadata.format.sampleRate && header.absoluteGranulePosition >= 0) {\r\n // Calculate duration\r\n this.metadata.setFormat('numberOfSamples', header.absoluteGranulePosition);\r\n this.metadata.setFormat('duration', this.metadata.format.numberOfSamples / this.metadata.format.sampleRate);\r\n }\r\n }\r\n /**\r\n * Parse first Ogg/Vorbis page\r\n * @param {IPageHeader} header\r\n * @param {Buffer} pageData\r\n */\r\n parseFirstPage(header, pageData) {\r\n this.metadata.setFormat('codec', 'Vorbis I');\r\n debug(\"Parse first page\");\r\n // Parse Vorbis common header\r\n const commonHeader = Vorbis_1.CommonHeader.get(pageData, 0);\r\n if (commonHeader.vorbis !== 'vorbis')\r\n throw new Error('Metadata does not look like Vorbis');\r\n if (commonHeader.packetType === 1) {\r\n const idHeader = Vorbis_1.IdentificationHeader.get(pageData, Vorbis_1.CommonHeader.len);\r\n this.metadata.setFormat('sampleRate', idHeader.sampleRate);\r\n this.metadata.setFormat('bitrate', idHeader.bitrateNominal);\r\n this.metadata.setFormat('numberOfChannels', idHeader.channelMode);\r\n debug(\"sample-rate=%s[hz], bitrate=%s[b/s], channel-mode=%s\", idHeader.sampleRate, idHeader.bitrateNominal, idHeader.channelMode);\r\n }\r\n else\r\n throw new Error('First Ogg page should be type 1: the identification header');\r\n }\r\n parseFullPage(pageData) {\r\n // New page\r\n const commonHeader = Vorbis_1.CommonHeader.get(pageData, 0);\r\n debug(\"Parse full page: type=%s, byteLength=%s\", commonHeader.packetType, pageData.byteLength);\r\n switch (commonHeader.packetType) {\r\n case 3: // type 3: comment header\r\n return this.parseUserCommentList(pageData, Vorbis_1.CommonHeader.len);\r\n case 1: // type 1: the identification header\r\n case 5: // type 5: setup header type\r\n break; // ignore\r\n }\r\n }\r\n /**\r\n * Ref: https://xiph.org/vorbis/doc/Vorbis_I_spec.html#x1-840005.2\r\n */\r\n parseUserCommentList(pageData, offset) {\r\n const strLen = Token.UINT32_LE.get(pageData, offset);\r\n offset += 4;\r\n // const vendorString = new Token.StringType(strLen, 'utf-8').get(pageData, offset);\r\n offset += strLen;\r\n let userCommentListLength = Token.UINT32_LE.get(pageData, offset);\r\n offset += 4;\r\n while (userCommentListLength-- > 0) {\r\n offset += this.parseUserComment(pageData, offset);\r\n }\r\n }\r\n}\r\nexports.VorbisParser = VorbisParser;\r\n","\"use strict\";\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nexports.VorbisTagMapper = void 0;\r\nconst GenericTagMapper_1 = require(\"../../common/GenericTagMapper\");\r\n/**\r\n * Vorbis tag mappings\r\n *\r\n * Mapping from native header format to one or possibly more 'common' entries\r\n * The common entries aim to read the same information from different media files\r\n * independent of the underlying format\r\n */\r\nconst vorbisTagMap = {\r\n TITLE: 'title',\r\n ARTIST: 'artist',\r\n ARTISTS: 'artists',\r\n ALBUMARTIST: 'albumartist',\r\n 'ALBUM ARTIST': 'albumartist',\r\n ALBUM: 'album',\r\n DATE: 'date',\r\n ORIGINALDATE: 'originaldate',\r\n ORIGINALYEAR: 'originalyear',\r\n COMMENT: 'comment',\r\n TRACKNUMBER: 'track',\r\n DISCNUMBER: 'disk',\r\n GENRE: 'genre',\r\n METADATA_BLOCK_PICTURE: 'picture',\r\n COMPOSER: 'composer',\r\n LYRICS: 'lyrics',\r\n ALBUMSORT: 'albumsort',\r\n TITLESORT: 'titlesort',\r\n WORK: 'work',\r\n ARTISTSORT: 'artistsort',\r\n ALBUMARTISTSORT: 'albumartistsort',\r\n COMPOSERSORT: 'composersort',\r\n LYRICIST: 'lyricist',\r\n WRITER: 'writer',\r\n CONDUCTOR: 'conductor',\r\n // 'PERFORMER=artist (instrument)': 'performer:instrument', // ToDo\r\n REMIXER: 'remixer',\r\n ARRANGER: 'arranger',\r\n ENGINEER: 'engineer',\r\n PRODUCER: 'producer',\r\n DJMIXER: 'djmixer',\r\n MIXER: 'mixer',\r\n LABEL: 'label',\r\n GROUPING: 'grouping',\r\n SUBTITLE: 'subtitle',\r\n DISCSUBTITLE: 'discsubtitle',\r\n TRACKTOTAL: 'totaltracks',\r\n DISCTOTAL: 'totaldiscs',\r\n COMPILATION: 'compilation',\r\n RATING: 'rating',\r\n BPM: 'bpm',\r\n KEY: 'key',\r\n MOOD: 'mood',\r\n MEDIA: 'media',\r\n CATALOGNUMBER: 'catalognumber',\r\n RELEASESTATUS: 'releasestatus',\r\n RELEASETYPE: 'releasetype',\r\n RELEASECOUNTRY: 'releasecountry',\r\n SCRIPT: 'script',\r\n LANGUAGE: 'language',\r\n COPYRIGHT: 'copyright',\r\n LICENSE: 'license',\r\n ENCODEDBY: 'encodedby',\r\n ENCODERSETTINGS: 'encodersettings',\r\n BARCODE: 'barcode',\r\n ISRC: 'isrc',\r\n ASIN: 'asin',\r\n MUSICBRAINZ_TRACKID: 'musicbrainz_recordingid',\r\n MUSICBRAINZ_RELEASETRACKID: 'musicbrainz_trackid',\r\n MUSICBRAINZ_ALBUMID: 'musicbrainz_albumid',\r\n MUSICBRAINZ_ARTISTID: 'musicbrainz_artistid',\r\n MUSICBRAINZ_ALBUMARTISTID: 'musicbrainz_albumartistid',\r\n MUSICBRAINZ_RELEASEGROUPID: 'musicbrainz_releasegroupid',\r\n MUSICBRAINZ_WORKID: 'musicbrainz_workid',\r\n MUSICBRAINZ_TRMID: 'musicbrainz_trmid',\r\n MUSICBRAINZ_DISCID: 'musicbrainz_discid',\r\n ACOUSTID_ID: 'acoustid_id',\r\n ACOUSTID_ID_FINGERPRINT: 'acoustid_fingerprint',\r\n MUSICIP_PUID: 'musicip_puid',\r\n // 'FINGERPRINT=MusicMagic Fingerprint {fingerprint}': 'musicip_fingerprint', // ToDo\r\n WEBSITE: 'website',\r\n NOTES: 'notes',\r\n TOTALTRACKS: 'totaltracks',\r\n TOTALDISCS: 'totaldiscs',\r\n // Discogs\r\n DISCOGS_ARTIST_ID: 'discogs_artist_id',\r\n DISCOGS_ARTISTS: 'artists',\r\n DISCOGS_ARTIST_NAME: 'artists',\r\n DISCOGS_ALBUM_ARTISTS: 'albumartist',\r\n DISCOGS_CATALOG: 'catalognumber',\r\n DISCOGS_COUNTRY: 'releasecountry',\r\n DISCOGS_DATE: 'originaldate',\r\n DISCOGS_LABEL: 'label',\r\n DISCOGS_LABEL_ID: 'discogs_label_id',\r\n DISCOGS_MASTER_RELEASE_ID: 'discogs_master_release_id',\r\n DISCOGS_RATING: 'discogs_rating',\r\n DISCOGS_RELEASED: 'date',\r\n DISCOGS_RELEASE_ID: 'discogs_release_id',\r\n DISCOGS_VOTES: 'discogs_votes',\r\n CATALOGID: 'catalognumber',\r\n STYLE: 'genre',\r\n //\r\n REPLAYGAIN_TRACK_GAIN: 'replaygain_track_gain',\r\n REPLAYGAIN_TRACK_PEAK: 'replaygain_track_peak',\r\n REPLAYGAIN_ALBUM_GAIN: 'replaygain_album_gain',\r\n REPLAYGAIN_ALBUM_PEAK: 'replaygain_album_peak',\r\n // To Sure if these (REPLAYGAIN_MINMAX, REPLAYGAIN_ALBUM_MINMAX & REPLAYGAIN_UNDO) are used for Vorbis:\r\n REPLAYGAIN_MINMAX: 'replaygain_track_minmax',\r\n REPLAYGAIN_ALBUM_MINMAX: 'replaygain_album_minmax',\r\n REPLAYGAIN_UNDO: 'replaygain_undo'\r\n};\r\nclass VorbisTagMapper extends GenericTagMapper_1.CommonTagMapper {\r\n static toRating(email, rating) {\r\n return {\r\n source: email ? email.toLowerCase() : email,\r\n rating: parseFloat(rating) * GenericTagMapper_1.CommonTagMapper.maxRatingScore\r\n };\r\n }\r\n constructor() {\r\n super(['vorbis'], vorbisTagMap);\r\n }\r\n postMap(tag) {\r\n if (tag.id.indexOf('RATING:') === 0) {\r\n const keys = tag.id.split(':');\r\n tag.value = VorbisTagMapper.toRating(keys[1], tag.value);\r\n tag.id = keys[0];\r\n }\r\n }\r\n}\r\nexports.VorbisTagMapper = VorbisTagMapper;\r\n//# sourceMappingURL=VorbisTagMapper.js.map","\"use strict\";\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nexports.ListInfoTagValue = exports.Header = void 0;\r\nconst Token = require(\"token-types\");\r\n/**\r\n * Common RIFF chunk header\r\n */\r\nexports.Header = {\r\n len: 8,\r\n get: (buf, off) => {\r\n return {\r\n // Group-ID\r\n chunkID: buf.toString('binary', off, off + 4),\r\n // Size\r\n chunkSize: Token.UINT32_LE.get(buf, 4)\r\n };\r\n }\r\n};\r\n/**\r\n * Token to parse RIFF-INFO tag value\r\n */\r\nclass ListInfoTagValue {\r\n constructor(tagHeader) {\r\n this.tagHeader = tagHeader;\r\n this.len = tagHeader.chunkSize;\r\n this.len += this.len & 1; // if it is an odd length, round up to even\r\n }\r\n get(buf, off) {\r\n return new Token.StringType(this.tagHeader.chunkSize, 'ascii').get(buf, off);\r\n }\r\n}\r\nexports.ListInfoTagValue = ListInfoTagValue;\r\n","\"use strict\";\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nexports.RiffInfoTagMapper = exports.riffInfoTagMap = void 0;\r\nconst GenericTagMapper_1 = require(\"../common/GenericTagMapper\");\r\n/**\r\n * RIFF Info Tags; part of the EXIF 2.3\r\n * Ref: http://owl.phy.queensu.ca/~phil/exiftool/TagNames/RIFF.html#Info\r\n */\r\nexports.riffInfoTagMap = {\r\n IART: 'artist',\r\n ICRD: 'date',\r\n INAM: 'title',\r\n TITL: 'title',\r\n IPRD: 'album',\r\n ITRK: 'track',\r\n COMM: 'comment',\r\n ICMT: 'comment',\r\n ICNT: 'releasecountry',\r\n GNRE: 'genre',\r\n IWRI: 'writer',\r\n RATE: 'rating',\r\n YEAR: 'year',\r\n ISFT: 'encodedby',\r\n CODE: 'encodedby',\r\n TURL: 'website',\r\n IGNR: 'genre',\r\n IENG: 'engineer',\r\n ITCH: 'technician',\r\n IMED: 'media',\r\n IRPD: 'album' // Product, where the file was intended for\r\n};\r\nclass RiffInfoTagMapper extends GenericTagMapper_1.CommonTagMapper {\r\n constructor() {\r\n super(['exif'], exports.riffInfoTagMap);\r\n }\r\n}\r\nexports.RiffInfoTagMapper = RiffInfoTagMapper;\r\n//# sourceMappingURL=RiffInfoTagMap.js.map","\"use strict\";\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nexports.TrackType = void 0;\r\nvar types_1 = require(\"./matroska/types\");\r\nObject.defineProperty(exports, \"TrackType\", { enumerable: true, get: function () { return types_1.TrackType; } });\r\n//# sourceMappingURL=type.js.map","\"use strict\";\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nexports.BroadcastAudioExtensionChunk = void 0;\r\nconst Token = require(\"token-types\");\r\n/**\r\n * Broadcast Audio Extension Chunk\r\n * Ref: https://tech.ebu.ch/docs/tech/tech3285.pdf\r\n */\r\nexports.BroadcastAudioExtensionChunk = {\r\n len: 420,\r\n get: (uint8array, off) => {\r\n return {\r\n description: new Token.StringType(256, 'ascii').get(uint8array, off).trim(),\r\n originator: new Token.StringType(32, 'ascii').get(uint8array, off + 256).trim(),\r\n originatorReference: new Token.StringType(32, 'ascii').get(uint8array, off + 288).trim(),\r\n originationDate: new Token.StringType(10, 'ascii').get(uint8array, off + 320).trim(),\r\n originationTime: new Token.StringType(8, 'ascii').get(uint8array, off + 330).trim(),\r\n timeReferenceLow: Token.UINT32_LE.get(uint8array, off + 338),\r\n timeReferenceHigh: Token.UINT32_LE.get(uint8array, off + 342),\r\n version: Token.UINT16_LE.get(uint8array, off + 346),\r\n umid: new Token.Uint8ArrayType(64).get(uint8array, off + 348),\r\n loudnessValue: Token.UINT16_LE.get(uint8array, off + 412),\r\n maxTruePeakLevel: Token.UINT16_LE.get(uint8array, off + 414),\r\n maxMomentaryLoudness: Token.UINT16_LE.get(uint8array, off + 416),\r\n maxShortTermLoudness: Token.UINT16_LE.get(uint8array, off + 418)\r\n };\r\n }\r\n};\r\n","\"use strict\";\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nexports.FactChunk = exports.Format = exports.WaveFormat = void 0;\r\n/**\r\n * Ref: https://msdn.microsoft.com/en-us/library/windows/desktop/dd317599(v=vs.85).aspx\r\n */\r\nvar WaveFormat;\r\n(function (WaveFormat) {\r\n WaveFormat[WaveFormat[\"PCM\"] = 1] = \"PCM\";\r\n // MPEG-4 and AAC Audio Types\r\n WaveFormat[WaveFormat[\"ADPCM\"] = 2] = \"ADPCM\";\r\n WaveFormat[WaveFormat[\"IEEE_FLOAT\"] = 3] = \"IEEE_FLOAT\";\r\n WaveFormat[WaveFormat[\"MPEG_ADTS_AAC\"] = 5632] = \"MPEG_ADTS_AAC\";\r\n WaveFormat[WaveFormat[\"MPEG_LOAS\"] = 5634] = \"MPEG_LOAS\";\r\n WaveFormat[WaveFormat[\"RAW_AAC1\"] = 255] = \"RAW_AAC1\";\r\n // Dolby Audio Types\r\n WaveFormat[WaveFormat[\"DOLBY_AC3_SPDIF\"] = 146] = \"DOLBY_AC3_SPDIF\";\r\n WaveFormat[WaveFormat[\"DVM\"] = 8192] = \"DVM\";\r\n WaveFormat[WaveFormat[\"RAW_SPORT\"] = 576] = \"RAW_SPORT\";\r\n WaveFormat[WaveFormat[\"ESST_AC3\"] = 577] = \"ESST_AC3\";\r\n WaveFormat[WaveFormat[\"DRM\"] = 9] = \"DRM\";\r\n WaveFormat[WaveFormat[\"DTS2\"] = 8193] = \"DTS2\";\r\n WaveFormat[WaveFormat[\"MPEG\"] = 80] = \"MPEG\";\r\n})(WaveFormat = exports.WaveFormat || (exports.WaveFormat = {}));\r\n/**\r\n * format chunk; chunk-id is \"fmt \"\r\n * http://soundfile.sapp.org/doc/WaveFormat/\r\n */\r\nclass Format {\r\n constructor(header) {\r\n if (header.chunkSize < 16)\r\n throw new Error('Invalid chunk size');\r\n this.len = header.chunkSize;\r\n }\r\n get(buf, off) {\r\n return {\r\n wFormatTag: buf.readUInt16LE(off),\r\n nChannels: buf.readUInt16LE(off + 2),\r\n nSamplesPerSec: buf.readUInt32LE(off + 4),\r\n nAvgBytesPerSec: buf.readUInt32LE(off + 8),\r\n nBlockAlign: buf.readUInt16LE(off + 12),\r\n wBitsPerSample: buf.readUInt16LE(off + 14)\r\n };\r\n }\r\n}\r\nexports.Format = Format;\r\n/**\r\n * Fact chunk; chunk-id is \"fact\"\r\n * http://www-mmsp.ece.mcgill.ca/Documents/AudioFormats/WAVE/WAVE.html\r\n * http://www.recordingblogs.com/wiki/fact-chunk-of-a-wave-file\r\n */\r\nclass FactChunk {\r\n constructor(header) {\r\n if (header.chunkSize < 4) {\r\n throw new Error('Invalid fact chunk size.');\r\n }\r\n this.len = header.chunkSize;\r\n }\r\n get(buf, off) {\r\n return {\r\n dwSampleLength: buf.readUInt32LE(off)\r\n };\r\n }\r\n}\r\nexports.FactChunk = FactChunk;\r\n","\"use strict\";\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nexports.WaveParser = void 0;\r\nconst strtok3 = require(\"strtok3/lib/core\");\r\nconst Token = require(\"token-types\");\r\nconst debug_1 = require(\"debug\");\r\nconst riff = require(\"../riff/RiffChunk\");\r\nconst WaveChunk = require(\"./../wav/WaveChunk\");\r\nconst ID3v2Parser_1 = require(\"../id3v2/ID3v2Parser\");\r\nconst util = require(\"../common/Util\");\r\nconst FourCC_1 = require(\"../common/FourCC\");\r\nconst BasicParser_1 = require(\"../common/BasicParser\");\r\nconst BwfChunk_1 = require(\"../wav/BwfChunk\");\r\nconst debug = (0, debug_1.default)('music-metadata:parser:RIFF');\r\n/**\r\n * Resource Interchange File Format (RIFF) Parser\r\n *\r\n * WAVE PCM soundfile format\r\n *\r\n * Ref:\r\n * - http://www.johnloomis.org/cpe102/asgn/asgn1/riff.html\r\n * - http://soundfile.sapp.org/doc/WaveFormat\r\n *\r\n * ToDo: Split WAVE part from RIFF parser\r\n */\r\nclass WaveParser extends BasicParser_1.BasicParser {\r\n async parse() {\r\n const riffHeader = await this.tokenizer.readToken(riff.Header);\r\n debug(`pos=${this.tokenizer.position}, parse: chunkID=${riffHeader.chunkID}`);\r\n if (riffHeader.chunkID !== 'RIFF')\r\n return; // Not RIFF format\r\n return this.parseRiffChunk(riffHeader.chunkSize).catch(err => {\r\n if (!(err instanceof strtok3.EndOfStreamError)) {\r\n throw err;\r\n }\r\n });\r\n }\r\n async parseRiffChunk(chunkSize) {\r\n const type = await this.tokenizer.readToken(FourCC_1.FourCcToken);\r\n this.metadata.setFormat('container', type);\r\n switch (type) {\r\n case 'WAVE':\r\n return this.readWaveChunk(chunkSize - FourCC_1.FourCcToken.len);\r\n default:\r\n throw new Error(`Unsupported RIFF format: RIFF/${type}`);\r\n }\r\n }\r\n async readWaveChunk(remaining) {\r\n while (remaining >= riff.Header.len) {\r\n const header = await this.tokenizer.readToken(riff.Header);\r\n remaining -= riff.Header.len + header.chunkSize;\r\n if (header.chunkSize > remaining) {\r\n this.metadata.addWarning('Data chunk size exceeds file size');\r\n }\r\n this.header = header;\r\n debug(`pos=${this.tokenizer.position}, readChunk: chunkID=RIFF/WAVE/${header.chunkID}`);\r\n switch (header.chunkID) {\r\n case 'LIST':\r\n await this.parseListTag(header);\r\n break;\r\n case 'fact': // extended Format chunk,\r\n this.metadata.setFormat('lossless', false);\r\n this.fact = await this.tokenizer.readToken(new WaveChunk.FactChunk(header));\r\n break;\r\n case 'fmt ': // The Util Chunk, non-PCM Formats\r\n const fmt = await this.tokenizer.readToken(new WaveChunk.Format(header));\r\n let subFormat = WaveChunk.WaveFormat[fmt.wFormatTag];\r\n if (!subFormat) {\r\n debug('WAVE/non-PCM format=' + fmt.wFormatTag);\r\n subFormat = 'non-PCM (' + fmt.wFormatTag + ')';\r\n }\r\n this.metadata.setFormat('codec', subFormat);\r\n this.metadata.setFormat('bitsPerSample', fmt.wBitsPerSample);\r\n this.metadata.setFormat('sampleRate', fmt.nSamplesPerSec);\r\n this.metadata.setFormat('numberOfChannels', fmt.nChannels);\r\n this.metadata.setFormat('bitrate', fmt.nBlockAlign * fmt.nSamplesPerSec * 8);\r\n this.blockAlign = fmt.nBlockAlign;\r\n break;\r\n case 'id3 ': // The way Picard, FooBar currently stores, ID3 meta-data\r\n case 'ID3 ': // The way Mp3Tags stores ID3 meta-data\r\n const id3_data = await this.tokenizer.readToken(new Token.Uint8ArrayType(header.chunkSize));\r\n const rst = strtok3.fromBuffer(id3_data);\r\n await new ID3v2Parser_1.ID3v2Parser().parse(this.metadata, rst, this.options);\r\n break;\r\n case 'data': // PCM-data\r\n if (this.metadata.format.lossless !== false) {\r\n this.metadata.setFormat('lossless', true);\r\n }\r\n let chunkSize = header.chunkSize;\r\n if (this.tokenizer.fileInfo.size) {\r\n const calcRemaining = this.tokenizer.fileInfo.size - this.tokenizer.position;\r\n if (calcRemaining < chunkSize) {\r\n this.metadata.addWarning('data chunk length exceeding file length');\r\n chunkSize = calcRemaining;\r\n }\r\n }\r\n const numberOfSamples = this.fact ? this.fact.dwSampleLength : (chunkSize === 0xffffffff ? undefined : chunkSize / this.blockAlign);\r\n if (numberOfSamples) {\r\n this.metadata.setFormat('numberOfSamples', numberOfSamples);\r\n this.metadata.setFormat('duration', numberOfSamples / this.metadata.format.sampleRate);\r\n }\r\n this.metadata.setFormat('bitrate', this.metadata.format.numberOfChannels * this.blockAlign * this.metadata.format.sampleRate); // ToDo: check me\r\n await this.tokenizer.ignore(header.chunkSize);\r\n break;\r\n case 'bext': // Broadcast Audio Extension chunk\thttps://tech.ebu.ch/docs/tech/tech3285.pdf\r\n const bext = await this.tokenizer.readToken(BwfChunk_1.BroadcastAudioExtensionChunk);\r\n Object.keys(bext).forEach(key => {\r\n this.metadata.addTag('exif', 'bext.' + key, bext[key]);\r\n });\r\n break;\r\n case '\\x00\\x00\\x00\\x00': // padding ??\r\n debug(`Ignore padding chunk: RIFF/${header.chunkID} of ${header.chunkSize} bytes`);\r\n this.metadata.addWarning('Ignore chunk: RIFF/' + header.chunkID);\r\n await this.tokenizer.ignore(header.chunkSize);\r\n break;\r\n default:\r\n debug(`Ignore chunk: RIFF/${header.chunkID} of ${header.chunkSize} bytes`);\r\n this.metadata.addWarning('Ignore chunk: RIFF/' + header.chunkID);\r\n await this.tokenizer.ignore(header.chunkSize);\r\n }\r\n if (this.header.chunkSize % 2 === 1) {\r\n debug('Read odd padding byte'); // https://wiki.multimedia.cx/index.php/RIFF\r\n await this.tokenizer.ignore(1);\r\n }\r\n }\r\n }\r\n async parseListTag(listHeader) {\r\n const listType = await this.tokenizer.readToken(new Token.StringType(4, 'binary'));\r\n debug('pos=%s, parseListTag: chunkID=RIFF/WAVE/LIST/%s', this.tokenizer.position, listType);\r\n switch (listType) {\r\n case 'INFO':\r\n return this.parseRiffInfoTags(listHeader.chunkSize - 4);\r\n case 'adtl':\r\n default:\r\n this.metadata.addWarning('Ignore chunk: RIFF/WAVE/LIST/' + listType);\r\n debug('Ignoring chunkID=RIFF/WAVE/LIST/' + listType);\r\n return this.tokenizer.ignore(listHeader.chunkSize - 4).then();\r\n }\r\n }\r\n async parseRiffInfoTags(chunkSize) {\r\n while (chunkSize >= 8) {\r\n const header = await this.tokenizer.readToken(riff.Header);\r\n const valueToken = new riff.ListInfoTagValue(header);\r\n const value = await this.tokenizer.readToken(valueToken);\r\n this.addTag(header.chunkID, util.stripNulls(value));\r\n chunkSize -= (8 + valueToken.len);\r\n }\r\n if (chunkSize !== 0) {\r\n throw Error('Illegal remaining size: ' + chunkSize);\r\n }\r\n }\r\n addTag(id, value) {\r\n this.metadata.addTag('exif', id, value);\r\n }\r\n}\r\nexports.WaveParser = WaveParser;\r\n","\"use strict\";\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nexports.WavPackParser = void 0;\r\nconst Token = require(\"token-types\");\r\nconst APEv2Parser_1 = require(\"../apev2/APEv2Parser\");\r\nconst FourCC_1 = require(\"../common/FourCC\");\r\nconst BasicParser_1 = require(\"../common/BasicParser\");\r\nconst WavPackToken_1 = require(\"./WavPackToken\");\r\nconst debug_1 = require(\"debug\");\r\nconst debug = (0, debug_1.default)('music-metadata:parser:WavPack');\r\n/**\r\n * WavPack Parser\r\n */\r\nclass WavPackParser extends BasicParser_1.BasicParser {\r\n async parse() {\r\n this.audioDataSize = 0;\r\n // First parse all WavPack blocks\r\n await this.parseWavPackBlocks();\r\n // try to parse APEv2 header\r\n return APEv2Parser_1.APEv2Parser.tryParseApeHeader(this.metadata, this.tokenizer, this.options);\r\n }\r\n async parseWavPackBlocks() {\r\n do {\r\n const blockId = await this.tokenizer.peekToken(FourCC_1.FourCcToken);\r\n if (blockId !== 'wvpk')\r\n break;\r\n const header = await this.tokenizer.readToken(WavPackToken_1.WavPack.BlockHeaderToken);\r\n if (header.BlockID !== 'wvpk')\r\n throw new Error('Invalid WavPack Block-ID');\r\n debug(`WavPack header blockIndex=${header.blockIndex}, len=${WavPackToken_1.WavPack.BlockHeaderToken.len}`);\r\n if (header.blockIndex === 0 && !this.metadata.format.container) {\r\n this.metadata.setFormat('container', 'WavPack');\r\n this.metadata.setFormat('lossless', !header.flags.isHybrid);\r\n // tagTypes: this.type,\r\n this.metadata.setFormat('bitsPerSample', header.flags.bitsPerSample);\r\n if (!header.flags.isDSD) {\r\n // In case isDSD, these values will ne set in ID_DSD_BLOCK\r\n this.metadata.setFormat('sampleRate', header.flags.samplingRate);\r\n this.metadata.setFormat('duration', header.totalSamples / header.flags.samplingRate);\r\n }\r\n this.metadata.setFormat('numberOfChannels', header.flags.isMono ? 1 : 2);\r\n this.metadata.setFormat('numberOfSamples', header.totalSamples);\r\n this.metadata.setFormat('codec', header.flags.isDSD ? 'DSD' : 'PCM');\r\n }\r\n const ignoreBytes = header.blockSize - (WavPackToken_1.WavPack.BlockHeaderToken.len - 8);\r\n await (header.blockIndex === 0 ? this.parseMetadataSubBlock(header, ignoreBytes) : this.tokenizer.ignore(ignoreBytes));\r\n if (header.blockSamples > 0) {\r\n this.audioDataSize += header.blockSize; // Count audio data for bit-rate calculation\r\n }\r\n } while (!this.tokenizer.fileInfo.size || this.tokenizer.fileInfo.size - this.tokenizer.position >= WavPackToken_1.WavPack.BlockHeaderToken.len);\r\n this.metadata.setFormat('bitrate', this.audioDataSize * 8 / this.metadata.format.duration);\r\n }\r\n /**\r\n * Ref: http://www.wavpack.com/WavPack5FileFormat.pdf, 3.0 Metadata Sub-blocks\r\n * @param remainingLength\r\n */\r\n async parseMetadataSubBlock(header, remainingLength) {\r\n while (remainingLength > WavPackToken_1.WavPack.MetadataIdToken.len) {\r\n const id = await this.tokenizer.readToken(WavPackToken_1.WavPack.MetadataIdToken);\r\n const dataSizeInWords = await this.tokenizer.readNumber(id.largeBlock ? Token.UINT24_LE : Token.UINT8);\r\n const data = Buffer.alloc(dataSizeInWords * 2 - (id.isOddSize ? 1 : 0));\r\n await this.tokenizer.readBuffer(data);\r\n debug(`Metadata Sub-Blocks functionId=0x${id.functionId.toString(16)}, id.largeBlock=${id.largeBlock},data-size=${data.length}`);\r\n switch (id.functionId) {\r\n case 0x0: // ID_DUMMY: could be used to pad WavPack blocks\r\n break;\r\n case 0xe: // ID_DSD_BLOCK\r\n debug('ID_DSD_BLOCK');\r\n // https://github.com/dbry/WavPack/issues/71#issuecomment-483094813\r\n const mp = 1 << data.readUInt8(0);\r\n const samplingRate = header.flags.samplingRate * mp * 8; // ToDo: second factor should be read from DSD-metadata block https://github.com/dbry/WavPack/issues/71#issuecomment-483094813\r\n if (!header.flags.isDSD)\r\n throw new Error('Only expect DSD block if DSD-flag is set');\r\n this.metadata.setFormat('sampleRate', samplingRate);\r\n this.metadata.setFormat('duration', header.totalSamples / samplingRate);\r\n break;\r\n case 0x24: // ID_ALT_TRAILER: maybe used to embed original ID3 tag header\r\n debug('ID_ALT_TRAILER: trailer for non-wav files');\r\n break;\r\n case 0x26: // ID_MD5_CHECKSUM\r\n this.metadata.setFormat('audioMD5', data);\r\n break;\r\n case 0x2f: // ID_BLOCK_CHECKSUM\r\n debug(`ID_BLOCK_CHECKSUM: checksum=${data.toString('hex')}`);\r\n break;\r\n default:\r\n debug(`Ignore unsupported meta-sub-block-id functionId=0x${id.functionId.toString(16)}`);\r\n break;\r\n }\r\n remainingLength -= WavPackToken_1.WavPack.MetadataIdToken.len + (id.largeBlock ? Token.UINT24_LE.len : Token.UINT8.len) + dataSizeInWords * 2;\r\n debug(`remainingLength=${remainingLength}`);\r\n if (id.isOddSize)\r\n this.tokenizer.ignore(1);\r\n }\r\n if (remainingLength !== 0)\r\n throw new Error('metadata-sub-block should fit it remaining length');\r\n }\r\n}\r\nexports.WavPackParser = WavPackParser;\r\n","\"use strict\";\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nexports.WavPack = void 0;\r\nconst Token = require(\"token-types\");\r\nconst FourCC_1 = require(\"../common/FourCC\");\r\nconst SampleRates = [6000, 8000, 9600, 11025, 12000, 16000, 22050, 24000, 32000, 44100,\r\n 48000, 64000, 88200, 96000, 192000, -1];\r\nclass WavPack {\r\n static isBitSet(flags, bitOffset) {\r\n return WavPack.getBitAllignedNumber(flags, bitOffset, 1) === 1;\r\n }\r\n static getBitAllignedNumber(flags, bitOffset, len) {\r\n return (flags >>> bitOffset) & (0xffffffff >>> (32 - len));\r\n }\r\n}\r\nexports.WavPack = WavPack;\r\n/**\r\n * WavPack Block Header\r\n *\r\n * 32-byte little-endian header at the front of every WavPack block\r\n *\r\n * Ref: http://www.wavpack.com/WavPack5FileFormat.pdf (page 2/6: 2.0 \"Block Header\")\r\n */\r\nWavPack.BlockHeaderToken = {\r\n len: 32,\r\n get: (buf, off) => {\r\n const flags = Token.UINT32_LE.get(buf, off + 24);\r\n const res = {\r\n // should equal 'wvpk'\r\n BlockID: FourCC_1.FourCcToken.get(buf, off),\r\n // 0x402 to 0x410 are valid for decode\r\n blockSize: Token.UINT32_LE.get(buf, off + 4),\r\n // 0x402 (1026) to 0x410 are valid for decode\r\n version: Token.UINT16_LE.get(buf, off + 8),\r\n // 40-bit total samples for entire file (if block_index == 0 and a value of -1 indicates an unknown length)\r\n totalSamples: /* replace with bigint? (Token.UINT8.get(buf, off + 11) << 32) + */ Token.UINT32_LE.get(buf, off + 12),\r\n // 40-bit block_index\r\n blockIndex: /* replace with bigint? (Token.UINT8.get(buf, off + 10) << 32) + */ Token.UINT32_LE.get(buf, off + 16),\r\n // 40-bit total samples for entire file (if block_index == 0 and a value of -1 indicates an unknown length)\r\n blockSamples: Token.UINT32_LE.get(buf, off + 20),\r\n // various flags for id and decoding\r\n flags: {\r\n bitsPerSample: (1 + WavPack.getBitAllignedNumber(flags, 0, 2)) * 8,\r\n isMono: WavPack.isBitSet(flags, 2),\r\n isHybrid: WavPack.isBitSet(flags, 3),\r\n isJointStereo: WavPack.isBitSet(flags, 4),\r\n crossChannel: WavPack.isBitSet(flags, 5),\r\n hybridNoiseShaping: WavPack.isBitSet(flags, 6),\r\n floatingPoint: WavPack.isBitSet(flags, 7),\r\n samplingRate: SampleRates[WavPack.getBitAllignedNumber(flags, 23, 4)],\r\n isDSD: WavPack.isBitSet(flags, 31)\r\n },\r\n // crc for actual decoded data\r\n crc: new Token.Uint8ArrayType(4).get(buf, off + 28)\r\n };\r\n if (res.flags.isDSD) {\r\n res.totalSamples *= 8;\r\n }\r\n return res;\r\n }\r\n};\r\n/**\r\n * 3.0 Metadata Sub-Blocks\r\n * Ref: http://www.wavpack.com/WavPack5FileFormat.pdf (page 4/6: 3.0 \"Metadata Sub-Block\")\r\n */\r\nWavPack.MetadataIdToken = {\r\n len: 1,\r\n get: (buf, off) => {\r\n return {\r\n functionId: WavPack.getBitAllignedNumber(buf[off], 0, 6),\r\n isOptional: WavPack.isBitSet(buf[off], 5),\r\n isOddSize: WavPack.isBitSet(buf[off], 6),\r\n largeBlock: WavPack.isBitSet(buf[off], 7)\r\n };\r\n }\r\n};\r\n","/*!\n * media-typer\n * Copyright(c) 2014-2017 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict'\n\n/**\n * RegExp to match type in RFC 6838\n *\n * type-name = restricted-name\n * subtype-name = restricted-name\n * restricted-name = restricted-name-first *126restricted-name-chars\n * restricted-name-first = ALPHA / DIGIT\n * restricted-name-chars = ALPHA / DIGIT / \"!\" / \"#\" /\n * \"$\" / \"&\" / \"-\" / \"^\" / \"_\"\n * restricted-name-chars =/ \".\" ; Characters before first dot always\n * ; specify a facet name\n * restricted-name-chars =/ \"+\" ; Characters after last plus always\n * ; specify a structured syntax suffix\n * ALPHA = %x41-5A / %x61-7A ; A-Z / a-z\n * DIGIT = %x30-39 ; 0-9\n */\nvar SUBTYPE_NAME_REGEXP = /^[A-Za-z0-9][A-Za-z0-9!#$&^_.-]{0,126}$/\nvar TYPE_NAME_REGEXP = /^[A-Za-z0-9][A-Za-z0-9!#$&^_-]{0,126}$/\nvar TYPE_REGEXP = /^ *([A-Za-z0-9][A-Za-z0-9!#$&^_-]{0,126})\\/([A-Za-z0-9][A-Za-z0-9!#$&^_.+-]{0,126}) *$/\n\n/**\n * Module exports.\n */\n\nexports.format = format\nexports.parse = parse\nexports.test = test\n\n/**\n * Format object to media type.\n *\n * @param {object} obj\n * @return {string}\n * @public\n */\n\nfunction format (obj) {\n if (!obj || typeof obj !== 'object') {\n throw new TypeError('argument obj is required')\n }\n\n var subtype = obj.subtype\n var suffix = obj.suffix\n var type = obj.type\n\n if (!type || !TYPE_NAME_REGEXP.test(type)) {\n throw new TypeError('invalid type')\n }\n\n if (!subtype || !SUBTYPE_NAME_REGEXP.test(subtype)) {\n throw new TypeError('invalid subtype')\n }\n\n // format as type/subtype\n var string = type + '/' + subtype\n\n // append +suffix\n if (suffix) {\n if (!TYPE_NAME_REGEXP.test(suffix)) {\n throw new TypeError('invalid suffix')\n }\n\n string += '+' + suffix\n }\n\n return string\n}\n\n/**\n * Test media type.\n *\n * @param {string} string\n * @return {object}\n * @public\n */\n\nfunction test (string) {\n if (!string) {\n throw new TypeError('argument string is required')\n }\n\n if (typeof string !== 'string') {\n throw new TypeError('argument string is required to be a string')\n }\n\n return TYPE_REGEXP.test(string.toLowerCase())\n}\n\n/**\n * Parse media type to object.\n *\n * @param {string} string\n * @return {object}\n * @public\n */\n\nfunction parse (string) {\n if (!string) {\n throw new TypeError('argument string is required')\n }\n\n if (typeof string !== 'string') {\n throw new TypeError('argument string is required to be a string')\n }\n\n var match = TYPE_REGEXP.exec(string.toLowerCase())\n\n if (!match) {\n throw new TypeError('invalid media type')\n }\n\n var type = match[1]\n var subtype = match[2]\n var suffix\n\n // suffix after last +\n var index = subtype.lastIndexOf('+')\n if (index !== -1) {\n suffix = subtype.substr(index + 1)\n subtype = subtype.substr(0, index)\n }\n\n return new MediaType(type, subtype, suffix)\n}\n\n/**\n * Class for MediaType object.\n * @public\n */\n\nfunction MediaType (type, subtype, suffix) {\n this.type = type\n this.subtype = subtype\n this.suffix = suffix\n}\n","\"use strict\";\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nexports.Deferred = void 0;\r\nclass Deferred {\r\n constructor() {\r\n this.resolve = () => null;\r\n this.reject = () => null;\r\n this.promise = new Promise((resolve, reject) => {\r\n this.reject = reject;\r\n this.resolve = resolve;\r\n });\r\n }\r\n}\r\nexports.Deferred = Deferred;\r\n","\"use strict\";\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nexports.EndOfStreamError = exports.defaultMessages = void 0;\r\nexports.defaultMessages = 'End-Of-Stream';\r\n/**\r\n * Thrown on read operation of the end of file or stream has been reached\r\n */\r\nclass EndOfStreamError extends Error {\r\n constructor() {\r\n super(exports.defaultMessages);\r\n }\r\n}\r\nexports.EndOfStreamError = EndOfStreamError;\r\n","\"use strict\";\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nexports.StreamReader = exports.EndOfStreamError = void 0;\r\nconst EndOfFileStream_1 = require(\"./EndOfFileStream\");\r\nconst Deferred_1 = require(\"./Deferred\");\r\nvar EndOfFileStream_2 = require(\"./EndOfFileStream\");\r\nObject.defineProperty(exports, \"EndOfStreamError\", { enumerable: true, get: function () { return EndOfFileStream_2.EndOfStreamError; } });\r\nconst maxStreamReadSize = 1 * 1024 * 1024; // Maximum request length on read-stream operation\r\nclass StreamReader {\r\n constructor(s) {\r\n this.s = s;\r\n /**\r\n * Deferred used for postponed read request (as not data is yet available to read)\r\n */\r\n this.deferred = null;\r\n this.endOfStream = false;\r\n /**\r\n * Store peeked data\r\n * @type {Array}\r\n */\r\n this.peekQueue = [];\r\n if (!s.read || !s.once) {\r\n throw new Error('Expected an instance of stream.Readable');\r\n }\r\n this.s.once('end', () => this.reject(new EndOfFileStream_1.EndOfStreamError()));\r\n this.s.once('error', err => this.reject(err));\r\n this.s.once('close', () => this.reject(new Error('Stream closed')));\r\n }\r\n /**\r\n * Read ahead (peek) from stream. Subsequent read or peeks will return the same data\r\n * @param uint8Array - Uint8Array (or Buffer) to store data read from stream in\r\n * @param offset - Offset target\r\n * @param length - Number of bytes to read\r\n * @returns Number of bytes peeked\r\n */\r\n async peek(uint8Array, offset, length) {\r\n const bytesRead = await this.read(uint8Array, offset, length);\r\n this.peekQueue.push(uint8Array.subarray(offset, offset + bytesRead)); // Put read data back to peek buffer\r\n return bytesRead;\r\n }\r\n /**\r\n * Read chunk from stream\r\n * @param buffer - Target Uint8Array (or Buffer) to store data read from stream in\r\n * @param offset - Offset target\r\n * @param length - Number of bytes to read\r\n * @returns Number of bytes read\r\n */\r\n async read(buffer, offset, length) {\r\n if (length === 0) {\r\n return 0;\r\n }\r\n if (this.peekQueue.length === 0 && this.endOfStream) {\r\n throw new EndOfFileStream_1.EndOfStreamError();\r\n }\r\n let remaining = length;\r\n let bytesRead = 0;\r\n // consume peeked data first\r\n while (this.peekQueue.length > 0 && remaining > 0) {\r\n const peekData = this.peekQueue.pop(); // Front of queue\r\n if (!peekData)\r\n throw new Error('peekData should be defined');\r\n const lenCopy = Math.min(peekData.length, remaining);\r\n buffer.set(peekData.subarray(0, lenCopy), offset + bytesRead);\r\n bytesRead += lenCopy;\r\n remaining -= lenCopy;\r\n if (lenCopy < peekData.length) {\r\n // remainder back to queue\r\n this.peekQueue.push(peekData.subarray(lenCopy));\r\n }\r\n }\r\n // continue reading from stream if required\r\n while (remaining > 0 && !this.endOfStream) {\r\n const reqLen = Math.min(remaining, maxStreamReadSize);\r\n const chunkLen = await this.readFromStream(buffer, offset + bytesRead, reqLen);\r\n bytesRead += chunkLen;\r\n if (chunkLen < reqLen)\r\n break;\r\n remaining -= chunkLen;\r\n }\r\n return bytesRead;\r\n }\r\n /**\r\n * Read chunk from stream\r\n * @param buffer Target Uint8Array (or Buffer) to store data read from stream in\r\n * @param offset Offset target\r\n * @param length Number of bytes to read\r\n * @returns Number of bytes read\r\n */\r\n async readFromStream(buffer, offset, length) {\r\n const readBuffer = this.s.read(length);\r\n if (readBuffer) {\r\n buffer.set(readBuffer, offset);\r\n return readBuffer.length;\r\n }\r\n else {\r\n const request = {\r\n buffer,\r\n offset,\r\n length,\r\n deferred: new Deferred_1.Deferred()\r\n };\r\n this.deferred = request.deferred;\r\n this.s.once('readable', () => {\r\n this.readDeferred(request);\r\n });\r\n return request.deferred.promise;\r\n }\r\n }\r\n /**\r\n * Process deferred read request\r\n * @param request Deferred read request\r\n */\r\n readDeferred(request) {\r\n const readBuffer = this.s.read(request.length);\r\n if (readBuffer) {\r\n request.buffer.set(readBuffer, request.offset);\r\n request.deferred.resolve(readBuffer.length);\r\n this.deferred = null;\r\n }\r\n else {\r\n this.s.once('readable', () => {\r\n this.readDeferred(request);\r\n });\r\n }\r\n }\r\n reject(err) {\r\n this.endOfStream = true;\r\n if (this.deferred) {\r\n this.deferred.reject(err);\r\n this.deferred = null;\r\n }\r\n }\r\n}\r\nexports.StreamReader = StreamReader;\r\n","\"use strict\";\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nexports.StreamReader = exports.EndOfStreamError = void 0;\r\nvar EndOfFileStream_1 = require(\"./EndOfFileStream\");\r\nObject.defineProperty(exports, \"EndOfStreamError\", { enumerable: true, get: function () { return EndOfFileStream_1.EndOfStreamError; } });\r\nvar StreamReader_1 = require(\"./StreamReader\");\r\nObject.defineProperty(exports, \"StreamReader\", { enumerable: true, get: function () { return StreamReader_1.StreamReader; } });\r\n","// shim for using process in browser\nvar process = module.exports = {};\n\n// cached from whatever global is present so that test runners that stub it\n// don't break things. But we need to wrap it in a try catch in case it is\n// wrapped in strict mode code which doesn't define any globals. It's inside a\n// function because try/catches deoptimize in certain engines.\n\nvar cachedSetTimeout;\nvar cachedClearTimeout;\n\nfunction defaultSetTimout() {\n throw new Error('setTimeout has not been defined');\n}\nfunction defaultClearTimeout () {\n throw new Error('clearTimeout has not been defined');\n}\n(function () {\n try {\n if (typeof setTimeout === 'function') {\n cachedSetTimeout = setTimeout;\n } else {\n cachedSetTimeout = defaultSetTimout;\n }\n } catch (e) {\n cachedSetTimeout = defaultSetTimout;\n }\n try {\n if (typeof clearTimeout === 'function') {\n cachedClearTimeout = clearTimeout;\n } else {\n cachedClearTimeout = defaultClearTimeout;\n }\n } catch (e) {\n cachedClearTimeout = defaultClearTimeout;\n }\n} ())\nfunction runTimeout(fun) {\n if (cachedSetTimeout === setTimeout) {\n //normal enviroments in sane situations\n return setTimeout(fun, 0);\n }\n // if setTimeout wasn't available but was latter defined\n if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {\n cachedSetTimeout = setTimeout;\n return setTimeout(fun, 0);\n }\n try {\n // when when somebody has screwed with setTimeout but no I.E. maddness\n return cachedSetTimeout(fun, 0);\n } catch(e){\n try {\n // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n return cachedSetTimeout.call(null, fun, 0);\n } catch(e){\n // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error\n return cachedSetTimeout.call(this, fun, 0);\n }\n }\n\n\n}\nfunction runClearTimeout(marker) {\n if (cachedClearTimeout === clearTimeout) {\n //normal enviroments in sane situations\n return clearTimeout(marker);\n }\n // if clearTimeout wasn't available but was latter defined\n if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {\n cachedClearTimeout = clearTimeout;\n return clearTimeout(marker);\n }\n try {\n // when when somebody has screwed with setTimeout but no I.E. maddness\n return cachedClearTimeout(marker);\n } catch (e){\n try {\n // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n return cachedClearTimeout.call(null, marker);\n } catch (e){\n // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error.\n // Some versions of I.E. have different rules for clearTimeout vs setTimeout\n return cachedClearTimeout.call(this, marker);\n }\n }\n\n\n\n}\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\n\nfunction cleanUpNextTick() {\n if (!draining || !currentQueue) {\n return;\n }\n draining = false;\n if (currentQueue.length) {\n queue = currentQueue.concat(queue);\n } else {\n queueIndex = -1;\n }\n if (queue.length) {\n drainQueue();\n }\n}\n\nfunction drainQueue() {\n if (draining) {\n return;\n }\n var timeout = runTimeout(cleanUpNextTick);\n draining = true;\n\n var len = queue.length;\n while(len) {\n currentQueue = queue;\n queue = [];\n while (++queueIndex < len) {\n if (currentQueue) {\n currentQueue[queueIndex].run();\n }\n }\n queueIndex = -1;\n len = queue.length;\n }\n currentQueue = null;\n draining = false;\n runClearTimeout(timeout);\n}\n\nprocess.nextTick = function (fun) {\n var args = new Array(arguments.length - 1);\n if (arguments.length > 1) {\n for (var i = 1; i < arguments.length; i++) {\n args[i - 1] = arguments[i];\n }\n }\n queue.push(new Item(fun, args));\n if (queue.length === 1 && !draining) {\n runTimeout(drainQueue);\n }\n};\n\n// v8 likes predictible objects\nfunction Item(fun, array) {\n this.fun = fun;\n this.array = array;\n}\nItem.prototype.run = function () {\n this.fun.apply(null, this.array);\n};\nprocess.title = 'browser';\nprocess.browser = true;\nprocess.env = {};\nprocess.argv = [];\nprocess.version = ''; // empty string to avoid regexp issues\nprocess.versions = {};\n\nfunction noop() {}\n\nprocess.on = noop;\nprocess.addListener = noop;\nprocess.once = noop;\nprocess.off = noop;\nprocess.removeListener = noop;\nprocess.removeAllListeners = noop;\nprocess.emit = noop;\nprocess.prependListener = noop;\nprocess.prependOnceListener = noop;\n\nprocess.listeners = function (name) { return [] }\n\nprocess.binding = function (name) {\n throw new Error('process.binding is not supported');\n};\n\nprocess.cwd = function () { return '/' };\nprocess.chdir = function (dir) {\n throw new Error('process.chdir is not supported');\n};\nprocess.umask = function() { return 0; };\n","'use strict';\n\nfunction _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; subClass.__proto__ = superClass; }\n\nvar codes = {};\n\nfunction createErrorType(code, message, Base) {\n if (!Base) {\n Base = Error;\n }\n\n function getMessage(arg1, arg2, arg3) {\n if (typeof message === 'string') {\n return message;\n } else {\n return message(arg1, arg2, arg3);\n }\n }\n\n var NodeError =\n /*#__PURE__*/\n function (_Base) {\n _inheritsLoose(NodeError, _Base);\n\n function NodeError(arg1, arg2, arg3) {\n return _Base.call(this, getMessage(arg1, arg2, arg3)) || this;\n }\n\n return NodeError;\n }(Base);\n\n NodeError.prototype.name = Base.name;\n NodeError.prototype.code = code;\n codes[code] = NodeError;\n} // https://github.com/nodejs/node/blob/v10.8.0/lib/internal/errors.js\n\n\nfunction oneOf(expected, thing) {\n if (Array.isArray(expected)) {\n var len = expected.length;\n expected = expected.map(function (i) {\n return String(i);\n });\n\n if (len > 2) {\n return \"one of \".concat(thing, \" \").concat(expected.slice(0, len - 1).join(', '), \", or \") + expected[len - 1];\n } else if (len === 2) {\n return \"one of \".concat(thing, \" \").concat(expected[0], \" or \").concat(expected[1]);\n } else {\n return \"of \".concat(thing, \" \").concat(expected[0]);\n }\n } else {\n return \"of \".concat(thing, \" \").concat(String(expected));\n }\n} // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/startsWith\n\n\nfunction startsWith(str, search, pos) {\n return str.substr(!pos || pos < 0 ? 0 : +pos, search.length) === search;\n} // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/endsWith\n\n\nfunction endsWith(str, search, this_len) {\n if (this_len === undefined || this_len > str.length) {\n this_len = str.length;\n }\n\n return str.substring(this_len - search.length, this_len) === search;\n} // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/includes\n\n\nfunction includes(str, search, start) {\n if (typeof start !== 'number') {\n start = 0;\n }\n\n if (start + search.length > str.length) {\n return false;\n } else {\n return str.indexOf(search, start) !== -1;\n }\n}\n\ncreateErrorType('ERR_INVALID_OPT_VALUE', function (name, value) {\n return 'The value \"' + value + '\" is invalid for option \"' + name + '\"';\n}, TypeError);\ncreateErrorType('ERR_INVALID_ARG_TYPE', function (name, expected, actual) {\n // determiner: 'must be' or 'must not be'\n var determiner;\n\n if (typeof expected === 'string' && startsWith(expected, 'not ')) {\n determiner = 'must not be';\n expected = expected.replace(/^not /, '');\n } else {\n determiner = 'must be';\n }\n\n var msg;\n\n if (endsWith(name, ' argument')) {\n // For cases like 'first argument'\n msg = \"The \".concat(name, \" \").concat(determiner, \" \").concat(oneOf(expected, 'type'));\n } else {\n var type = includes(name, '.') ? 'property' : 'argument';\n msg = \"The \\\"\".concat(name, \"\\\" \").concat(type, \" \").concat(determiner, \" \").concat(oneOf(expected, 'type'));\n }\n\n msg += \". Received type \".concat(typeof actual);\n return msg;\n}, TypeError);\ncreateErrorType('ERR_STREAM_PUSH_AFTER_EOF', 'stream.push() after EOF');\ncreateErrorType('ERR_METHOD_NOT_IMPLEMENTED', function (name) {\n return 'The ' + name + ' method is not implemented';\n});\ncreateErrorType('ERR_STREAM_PREMATURE_CLOSE', 'Premature close');\ncreateErrorType('ERR_STREAM_DESTROYED', function (name) {\n return 'Cannot call ' + name + ' after a stream was destroyed';\n});\ncreateErrorType('ERR_MULTIPLE_CALLBACK', 'Callback called multiple times');\ncreateErrorType('ERR_STREAM_CANNOT_PIPE', 'Cannot pipe, not readable');\ncreateErrorType('ERR_STREAM_WRITE_AFTER_END', 'write after end');\ncreateErrorType('ERR_STREAM_NULL_VALUES', 'May not write null values to stream', TypeError);\ncreateErrorType('ERR_UNKNOWN_ENCODING', function (arg) {\n return 'Unknown encoding: ' + arg;\n}, TypeError);\ncreateErrorType('ERR_STREAM_UNSHIFT_AFTER_END_EVENT', 'stream.unshift() after end event');\nmodule.exports.codes = codes;\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n// a duplex stream is just a stream that is both readable and writable.\n// Since JS doesn't have multiple prototypal inheritance, this class\n// prototypally inherits from Readable, and then parasitically from\n// Writable.\n'use strict';\n/**/\n\nvar objectKeys = Object.keys || function (obj) {\n var keys = [];\n\n for (var key in obj) {\n keys.push(key);\n }\n\n return keys;\n};\n/**/\n\n\nmodule.exports = Duplex;\n\nvar Readable = require('./_stream_readable');\n\nvar Writable = require('./_stream_writable');\n\nrequire('inherits')(Duplex, Readable);\n\n{\n // Allow the keys array to be GC'ed.\n var keys = objectKeys(Writable.prototype);\n\n for (var v = 0; v < keys.length; v++) {\n var method = keys[v];\n if (!Duplex.prototype[method]) Duplex.prototype[method] = Writable.prototype[method];\n }\n}\n\nfunction Duplex(options) {\n if (!(this instanceof Duplex)) return new Duplex(options);\n Readable.call(this, options);\n Writable.call(this, options);\n this.allowHalfOpen = true;\n\n if (options) {\n if (options.readable === false) this.readable = false;\n if (options.writable === false) this.writable = false;\n\n if (options.allowHalfOpen === false) {\n this.allowHalfOpen = false;\n this.once('end', onend);\n }\n }\n}\n\nObject.defineProperty(Duplex.prototype, 'writableHighWaterMark', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n return this._writableState.highWaterMark;\n }\n});\nObject.defineProperty(Duplex.prototype, 'writableBuffer', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n return this._writableState && this._writableState.getBuffer();\n }\n});\nObject.defineProperty(Duplex.prototype, 'writableLength', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n return this._writableState.length;\n }\n}); // the no-half-open enforcer\n\nfunction onend() {\n // If the writable side ended, then we're ok.\n if (this._writableState.ended) return; // no more data can be written.\n // But allow more writes to happen in this tick.\n\n process.nextTick(onEndNT, this);\n}\n\nfunction onEndNT(self) {\n self.end();\n}\n\nObject.defineProperty(Duplex.prototype, 'destroyed', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n if (this._readableState === undefined || this._writableState === undefined) {\n return false;\n }\n\n return this._readableState.destroyed && this._writableState.destroyed;\n },\n set: function set(value) {\n // we ignore the value if the stream\n // has not been initialized yet\n if (this._readableState === undefined || this._writableState === undefined) {\n return;\n } // backward compatibility, the user is explicitly\n // managing destroyed\n\n\n this._readableState.destroyed = value;\n this._writableState.destroyed = value;\n }\n});","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n// a passthrough stream.\n// basically just the most minimal sort of Transform stream.\n// Every written chunk gets output as-is.\n'use strict';\n\nmodule.exports = PassThrough;\n\nvar Transform = require('./_stream_transform');\n\nrequire('inherits')(PassThrough, Transform);\n\nfunction PassThrough(options) {\n if (!(this instanceof PassThrough)) return new PassThrough(options);\n Transform.call(this, options);\n}\n\nPassThrough.prototype._transform = function (chunk, encoding, cb) {\n cb(null, chunk);\n};","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n'use strict';\n\nmodule.exports = Readable;\n/**/\n\nvar Duplex;\n/**/\n\nReadable.ReadableState = ReadableState;\n/**/\n\nvar EE = require('events').EventEmitter;\n\nvar EElistenerCount = function EElistenerCount(emitter, type) {\n return emitter.listeners(type).length;\n};\n/**/\n\n/**/\n\n\nvar Stream = require('./internal/streams/stream');\n/**/\n\n\nvar Buffer = require('buffer').Buffer;\n\nvar OurUint8Array = global.Uint8Array || function () {};\n\nfunction _uint8ArrayToBuffer(chunk) {\n return Buffer.from(chunk);\n}\n\nfunction _isUint8Array(obj) {\n return Buffer.isBuffer(obj) || obj instanceof OurUint8Array;\n}\n/**/\n\n\nvar debugUtil = require('util');\n\nvar debug;\n\nif (debugUtil && debugUtil.debuglog) {\n debug = debugUtil.debuglog('stream');\n} else {\n debug = function debug() {};\n}\n/**/\n\n\nvar BufferList = require('./internal/streams/buffer_list');\n\nvar destroyImpl = require('./internal/streams/destroy');\n\nvar _require = require('./internal/streams/state'),\n getHighWaterMark = _require.getHighWaterMark;\n\nvar _require$codes = require('../errors').codes,\n ERR_INVALID_ARG_TYPE = _require$codes.ERR_INVALID_ARG_TYPE,\n ERR_STREAM_PUSH_AFTER_EOF = _require$codes.ERR_STREAM_PUSH_AFTER_EOF,\n ERR_METHOD_NOT_IMPLEMENTED = _require$codes.ERR_METHOD_NOT_IMPLEMENTED,\n ERR_STREAM_UNSHIFT_AFTER_END_EVENT = _require$codes.ERR_STREAM_UNSHIFT_AFTER_END_EVENT; // Lazy loaded to improve the startup performance.\n\n\nvar StringDecoder;\nvar createReadableStreamAsyncIterator;\nvar from;\n\nrequire('inherits')(Readable, Stream);\n\nvar errorOrDestroy = destroyImpl.errorOrDestroy;\nvar kProxyEvents = ['error', 'close', 'destroy', 'pause', 'resume'];\n\nfunction prependListener(emitter, event, fn) {\n // Sadly this is not cacheable as some libraries bundle their own\n // event emitter implementation with them.\n if (typeof emitter.prependListener === 'function') return emitter.prependListener(event, fn); // This is a hack to make sure that our error handler is attached before any\n // userland ones. NEVER DO THIS. This is here only because this code needs\n // to continue to work with older versions of Node.js that do not include\n // the prependListener() method. The goal is to eventually remove this hack.\n\n if (!emitter._events || !emitter._events[event]) emitter.on(event, fn);else if (Array.isArray(emitter._events[event])) emitter._events[event].unshift(fn);else emitter._events[event] = [fn, emitter._events[event]];\n}\n\nfunction ReadableState(options, stream, isDuplex) {\n Duplex = Duplex || require('./_stream_duplex');\n options = options || {}; // Duplex streams are both readable and writable, but share\n // the same options object.\n // However, some cases require setting options to different\n // values for the readable and the writable sides of the duplex stream.\n // These options can be provided separately as readableXXX and writableXXX.\n\n if (typeof isDuplex !== 'boolean') isDuplex = stream instanceof Duplex; // object stream flag. Used to make read(n) ignore n and to\n // make all the buffer merging and length checks go away\n\n this.objectMode = !!options.objectMode;\n if (isDuplex) this.objectMode = this.objectMode || !!options.readableObjectMode; // the point at which it stops calling _read() to fill the buffer\n // Note: 0 is a valid value, means \"don't call _read preemptively ever\"\n\n this.highWaterMark = getHighWaterMark(this, options, 'readableHighWaterMark', isDuplex); // A linked list is used to store data chunks instead of an array because the\n // linked list can remove elements from the beginning faster than\n // array.shift()\n\n this.buffer = new BufferList();\n this.length = 0;\n this.pipes = null;\n this.pipesCount = 0;\n this.flowing = null;\n this.ended = false;\n this.endEmitted = false;\n this.reading = false; // a flag to be able to tell if the event 'readable'/'data' is emitted\n // immediately, or on a later tick. We set this to true at first, because\n // any actions that shouldn't happen until \"later\" should generally also\n // not happen before the first read call.\n\n this.sync = true; // whenever we return null, then we set a flag to say\n // that we're awaiting a 'readable' event emission.\n\n this.needReadable = false;\n this.emittedReadable = false;\n this.readableListening = false;\n this.resumeScheduled = false;\n this.paused = true; // Should close be emitted on destroy. Defaults to true.\n\n this.emitClose = options.emitClose !== false; // Should .destroy() be called after 'end' (and potentially 'finish')\n\n this.autoDestroy = !!options.autoDestroy; // has it been destroyed\n\n this.destroyed = false; // Crypto is kind of old and crusty. Historically, its default string\n // encoding is 'binary' so we have to make this configurable.\n // Everything else in the universe uses 'utf8', though.\n\n this.defaultEncoding = options.defaultEncoding || 'utf8'; // the number of writers that are awaiting a drain event in .pipe()s\n\n this.awaitDrain = 0; // if true, a maybeReadMore has been scheduled\n\n this.readingMore = false;\n this.decoder = null;\n this.encoding = null;\n\n if (options.encoding) {\n if (!StringDecoder) StringDecoder = require('string_decoder/').StringDecoder;\n this.decoder = new StringDecoder(options.encoding);\n this.encoding = options.encoding;\n }\n}\n\nfunction Readable(options) {\n Duplex = Duplex || require('./_stream_duplex');\n if (!(this instanceof Readable)) return new Readable(options); // Checking for a Stream.Duplex instance is faster here instead of inside\n // the ReadableState constructor, at least with V8 6.5\n\n var isDuplex = this instanceof Duplex;\n this._readableState = new ReadableState(options, this, isDuplex); // legacy\n\n this.readable = true;\n\n if (options) {\n if (typeof options.read === 'function') this._read = options.read;\n if (typeof options.destroy === 'function') this._destroy = options.destroy;\n }\n\n Stream.call(this);\n}\n\nObject.defineProperty(Readable.prototype, 'destroyed', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n if (this._readableState === undefined) {\n return false;\n }\n\n return this._readableState.destroyed;\n },\n set: function set(value) {\n // we ignore the value if the stream\n // has not been initialized yet\n if (!this._readableState) {\n return;\n } // backward compatibility, the user is explicitly\n // managing destroyed\n\n\n this._readableState.destroyed = value;\n }\n});\nReadable.prototype.destroy = destroyImpl.destroy;\nReadable.prototype._undestroy = destroyImpl.undestroy;\n\nReadable.prototype._destroy = function (err, cb) {\n cb(err);\n}; // Manually shove something into the read() buffer.\n// This returns true if the highWaterMark has not been hit yet,\n// similar to how Writable.write() returns true if you should\n// write() some more.\n\n\nReadable.prototype.push = function (chunk, encoding) {\n var state = this._readableState;\n var skipChunkCheck;\n\n if (!state.objectMode) {\n if (typeof chunk === 'string') {\n encoding = encoding || state.defaultEncoding;\n\n if (encoding !== state.encoding) {\n chunk = Buffer.from(chunk, encoding);\n encoding = '';\n }\n\n skipChunkCheck = true;\n }\n } else {\n skipChunkCheck = true;\n }\n\n return readableAddChunk(this, chunk, encoding, false, skipChunkCheck);\n}; // Unshift should *always* be something directly out of read()\n\n\nReadable.prototype.unshift = function (chunk) {\n return readableAddChunk(this, chunk, null, true, false);\n};\n\nfunction readableAddChunk(stream, chunk, encoding, addToFront, skipChunkCheck) {\n debug('readableAddChunk', chunk);\n var state = stream._readableState;\n\n if (chunk === null) {\n state.reading = false;\n onEofChunk(stream, state);\n } else {\n var er;\n if (!skipChunkCheck) er = chunkInvalid(state, chunk);\n\n if (er) {\n errorOrDestroy(stream, er);\n } else if (state.objectMode || chunk && chunk.length > 0) {\n if (typeof chunk !== 'string' && !state.objectMode && Object.getPrototypeOf(chunk) !== Buffer.prototype) {\n chunk = _uint8ArrayToBuffer(chunk);\n }\n\n if (addToFront) {\n if (state.endEmitted) errorOrDestroy(stream, new ERR_STREAM_UNSHIFT_AFTER_END_EVENT());else addChunk(stream, state, chunk, true);\n } else if (state.ended) {\n errorOrDestroy(stream, new ERR_STREAM_PUSH_AFTER_EOF());\n } else if (state.destroyed) {\n return false;\n } else {\n state.reading = false;\n\n if (state.decoder && !encoding) {\n chunk = state.decoder.write(chunk);\n if (state.objectMode || chunk.length !== 0) addChunk(stream, state, chunk, false);else maybeReadMore(stream, state);\n } else {\n addChunk(stream, state, chunk, false);\n }\n }\n } else if (!addToFront) {\n state.reading = false;\n maybeReadMore(stream, state);\n }\n } // We can push more data if we are below the highWaterMark.\n // Also, if we have no data yet, we can stand some more bytes.\n // This is to work around cases where hwm=0, such as the repl.\n\n\n return !state.ended && (state.length < state.highWaterMark || state.length === 0);\n}\n\nfunction addChunk(stream, state, chunk, addToFront) {\n if (state.flowing && state.length === 0 && !state.sync) {\n state.awaitDrain = 0;\n stream.emit('data', chunk);\n } else {\n // update the buffer info.\n state.length += state.objectMode ? 1 : chunk.length;\n if (addToFront) state.buffer.unshift(chunk);else state.buffer.push(chunk);\n if (state.needReadable) emitReadable(stream);\n }\n\n maybeReadMore(stream, state);\n}\n\nfunction chunkInvalid(state, chunk) {\n var er;\n\n if (!_isUint8Array(chunk) && typeof chunk !== 'string' && chunk !== undefined && !state.objectMode) {\n er = new ERR_INVALID_ARG_TYPE('chunk', ['string', 'Buffer', 'Uint8Array'], chunk);\n }\n\n return er;\n}\n\nReadable.prototype.isPaused = function () {\n return this._readableState.flowing === false;\n}; // backwards compatibility.\n\n\nReadable.prototype.setEncoding = function (enc) {\n if (!StringDecoder) StringDecoder = require('string_decoder/').StringDecoder;\n var decoder = new StringDecoder(enc);\n this._readableState.decoder = decoder; // If setEncoding(null), decoder.encoding equals utf8\n\n this._readableState.encoding = this._readableState.decoder.encoding; // Iterate over current buffer to convert already stored Buffers:\n\n var p = this._readableState.buffer.head;\n var content = '';\n\n while (p !== null) {\n content += decoder.write(p.data);\n p = p.next;\n }\n\n this._readableState.buffer.clear();\n\n if (content !== '') this._readableState.buffer.push(content);\n this._readableState.length = content.length;\n return this;\n}; // Don't raise the hwm > 1GB\n\n\nvar MAX_HWM = 0x40000000;\n\nfunction computeNewHighWaterMark(n) {\n if (n >= MAX_HWM) {\n // TODO(ronag): Throw ERR_VALUE_OUT_OF_RANGE.\n n = MAX_HWM;\n } else {\n // Get the next highest power of 2 to prevent increasing hwm excessively in\n // tiny amounts\n n--;\n n |= n >>> 1;\n n |= n >>> 2;\n n |= n >>> 4;\n n |= n >>> 8;\n n |= n >>> 16;\n n++;\n }\n\n return n;\n} // This function is designed to be inlinable, so please take care when making\n// changes to the function body.\n\n\nfunction howMuchToRead(n, state) {\n if (n <= 0 || state.length === 0 && state.ended) return 0;\n if (state.objectMode) return 1;\n\n if (n !== n) {\n // Only flow one buffer at a time\n if (state.flowing && state.length) return state.buffer.head.data.length;else return state.length;\n } // If we're asking for more than the current hwm, then raise the hwm.\n\n\n if (n > state.highWaterMark) state.highWaterMark = computeNewHighWaterMark(n);\n if (n <= state.length) return n; // Don't have enough\n\n if (!state.ended) {\n state.needReadable = true;\n return 0;\n }\n\n return state.length;\n} // you can override either this method, or the async _read(n) below.\n\n\nReadable.prototype.read = function (n) {\n debug('read', n);\n n = parseInt(n, 10);\n var state = this._readableState;\n var nOrig = n;\n if (n !== 0) state.emittedReadable = false; // if we're doing read(0) to trigger a readable event, but we\n // already have a bunch of data in the buffer, then just trigger\n // the 'readable' event and move on.\n\n if (n === 0 && state.needReadable && ((state.highWaterMark !== 0 ? state.length >= state.highWaterMark : state.length > 0) || state.ended)) {\n debug('read: emitReadable', state.length, state.ended);\n if (state.length === 0 && state.ended) endReadable(this);else emitReadable(this);\n return null;\n }\n\n n = howMuchToRead(n, state); // if we've ended, and we're now clear, then finish it up.\n\n if (n === 0 && state.ended) {\n if (state.length === 0) endReadable(this);\n return null;\n } // All the actual chunk generation logic needs to be\n // *below* the call to _read. The reason is that in certain\n // synthetic stream cases, such as passthrough streams, _read\n // may be a completely synchronous operation which may change\n // the state of the read buffer, providing enough data when\n // before there was *not* enough.\n //\n // So, the steps are:\n // 1. Figure out what the state of things will be after we do\n // a read from the buffer.\n //\n // 2. If that resulting state will trigger a _read, then call _read.\n // Note that this may be asynchronous, or synchronous. Yes, it is\n // deeply ugly to write APIs this way, but that still doesn't mean\n // that the Readable class should behave improperly, as streams are\n // designed to be sync/async agnostic.\n // Take note if the _read call is sync or async (ie, if the read call\n // has returned yet), so that we know whether or not it's safe to emit\n // 'readable' etc.\n //\n // 3. Actually pull the requested chunks out of the buffer and return.\n // if we need a readable event, then we need to do some reading.\n\n\n var doRead = state.needReadable;\n debug('need readable', doRead); // if we currently have less than the highWaterMark, then also read some\n\n if (state.length === 0 || state.length - n < state.highWaterMark) {\n doRead = true;\n debug('length less than watermark', doRead);\n } // however, if we've ended, then there's no point, and if we're already\n // reading, then it's unnecessary.\n\n\n if (state.ended || state.reading) {\n doRead = false;\n debug('reading or ended', doRead);\n } else if (doRead) {\n debug('do read');\n state.reading = true;\n state.sync = true; // if the length is currently zero, then we *need* a readable event.\n\n if (state.length === 0) state.needReadable = true; // call internal read method\n\n this._read(state.highWaterMark);\n\n state.sync = false; // If _read pushed data synchronously, then `reading` will be false,\n // and we need to re-evaluate how much data we can return to the user.\n\n if (!state.reading) n = howMuchToRead(nOrig, state);\n }\n\n var ret;\n if (n > 0) ret = fromList(n, state);else ret = null;\n\n if (ret === null) {\n state.needReadable = state.length <= state.highWaterMark;\n n = 0;\n } else {\n state.length -= n;\n state.awaitDrain = 0;\n }\n\n if (state.length === 0) {\n // If we have nothing in the buffer, then we want to know\n // as soon as we *do* get something into the buffer.\n if (!state.ended) state.needReadable = true; // If we tried to read() past the EOF, then emit end on the next tick.\n\n if (nOrig !== n && state.ended) endReadable(this);\n }\n\n if (ret !== null) this.emit('data', ret);\n return ret;\n};\n\nfunction onEofChunk(stream, state) {\n debug('onEofChunk');\n if (state.ended) return;\n\n if (state.decoder) {\n var chunk = state.decoder.end();\n\n if (chunk && chunk.length) {\n state.buffer.push(chunk);\n state.length += state.objectMode ? 1 : chunk.length;\n }\n }\n\n state.ended = true;\n\n if (state.sync) {\n // if we are sync, wait until next tick to emit the data.\n // Otherwise we risk emitting data in the flow()\n // the readable code triggers during a read() call\n emitReadable(stream);\n } else {\n // emit 'readable' now to make sure it gets picked up.\n state.needReadable = false;\n\n if (!state.emittedReadable) {\n state.emittedReadable = true;\n emitReadable_(stream);\n }\n }\n} // Don't emit readable right away in sync mode, because this can trigger\n// another read() call => stack overflow. This way, it might trigger\n// a nextTick recursion warning, but that's not so bad.\n\n\nfunction emitReadable(stream) {\n var state = stream._readableState;\n debug('emitReadable', state.needReadable, state.emittedReadable);\n state.needReadable = false;\n\n if (!state.emittedReadable) {\n debug('emitReadable', state.flowing);\n state.emittedReadable = true;\n process.nextTick(emitReadable_, stream);\n }\n}\n\nfunction emitReadable_(stream) {\n var state = stream._readableState;\n debug('emitReadable_', state.destroyed, state.length, state.ended);\n\n if (!state.destroyed && (state.length || state.ended)) {\n stream.emit('readable');\n state.emittedReadable = false;\n } // The stream needs another readable event if\n // 1. It is not flowing, as the flow mechanism will take\n // care of it.\n // 2. It is not ended.\n // 3. It is below the highWaterMark, so we can schedule\n // another readable later.\n\n\n state.needReadable = !state.flowing && !state.ended && state.length <= state.highWaterMark;\n flow(stream);\n} // at this point, the user has presumably seen the 'readable' event,\n// and called read() to consume some data. that may have triggered\n// in turn another _read(n) call, in which case reading = true if\n// it's in progress.\n// However, if we're not ended, or reading, and the length < hwm,\n// then go ahead and try to read some more preemptively.\n\n\nfunction maybeReadMore(stream, state) {\n if (!state.readingMore) {\n state.readingMore = true;\n process.nextTick(maybeReadMore_, stream, state);\n }\n}\n\nfunction maybeReadMore_(stream, state) {\n // Attempt to read more data if we should.\n //\n // The conditions for reading more data are (one of):\n // - Not enough data buffered (state.length < state.highWaterMark). The loop\n // is responsible for filling the buffer with enough data if such data\n // is available. If highWaterMark is 0 and we are not in the flowing mode\n // we should _not_ attempt to buffer any extra data. We'll get more data\n // when the stream consumer calls read() instead.\n // - No data in the buffer, and the stream is in flowing mode. In this mode\n // the loop below is responsible for ensuring read() is called. Failing to\n // call read here would abort the flow and there's no other mechanism for\n // continuing the flow if the stream consumer has just subscribed to the\n // 'data' event.\n //\n // In addition to the above conditions to keep reading data, the following\n // conditions prevent the data from being read:\n // - The stream has ended (state.ended).\n // - There is already a pending 'read' operation (state.reading). This is a\n // case where the the stream has called the implementation defined _read()\n // method, but they are processing the call asynchronously and have _not_\n // called push() with new data. In this case we skip performing more\n // read()s. The execution ends in this method again after the _read() ends\n // up calling push() with more data.\n while (!state.reading && !state.ended && (state.length < state.highWaterMark || state.flowing && state.length === 0)) {\n var len = state.length;\n debug('maybeReadMore read 0');\n stream.read(0);\n if (len === state.length) // didn't get any data, stop spinning.\n break;\n }\n\n state.readingMore = false;\n} // abstract method. to be overridden in specific implementation classes.\n// call cb(er, data) where data is <= n in length.\n// for virtual (non-string, non-buffer) streams, \"length\" is somewhat\n// arbitrary, and perhaps not very meaningful.\n\n\nReadable.prototype._read = function (n) {\n errorOrDestroy(this, new ERR_METHOD_NOT_IMPLEMENTED('_read()'));\n};\n\nReadable.prototype.pipe = function (dest, pipeOpts) {\n var src = this;\n var state = this._readableState;\n\n switch (state.pipesCount) {\n case 0:\n state.pipes = dest;\n break;\n\n case 1:\n state.pipes = [state.pipes, dest];\n break;\n\n default:\n state.pipes.push(dest);\n break;\n }\n\n state.pipesCount += 1;\n debug('pipe count=%d opts=%j', state.pipesCount, pipeOpts);\n var doEnd = (!pipeOpts || pipeOpts.end !== false) && dest !== process.stdout && dest !== process.stderr;\n var endFn = doEnd ? onend : unpipe;\n if (state.endEmitted) process.nextTick(endFn);else src.once('end', endFn);\n dest.on('unpipe', onunpipe);\n\n function onunpipe(readable, unpipeInfo) {\n debug('onunpipe');\n\n if (readable === src) {\n if (unpipeInfo && unpipeInfo.hasUnpiped === false) {\n unpipeInfo.hasUnpiped = true;\n cleanup();\n }\n }\n }\n\n function onend() {\n debug('onend');\n dest.end();\n } // when the dest drains, it reduces the awaitDrain counter\n // on the source. This would be more elegant with a .once()\n // handler in flow(), but adding and removing repeatedly is\n // too slow.\n\n\n var ondrain = pipeOnDrain(src);\n dest.on('drain', ondrain);\n var cleanedUp = false;\n\n function cleanup() {\n debug('cleanup'); // cleanup event handlers once the pipe is broken\n\n dest.removeListener('close', onclose);\n dest.removeListener('finish', onfinish);\n dest.removeListener('drain', ondrain);\n dest.removeListener('error', onerror);\n dest.removeListener('unpipe', onunpipe);\n src.removeListener('end', onend);\n src.removeListener('end', unpipe);\n src.removeListener('data', ondata);\n cleanedUp = true; // if the reader is waiting for a drain event from this\n // specific writer, then it would cause it to never start\n // flowing again.\n // So, if this is awaiting a drain, then we just call it now.\n // If we don't know, then assume that we are waiting for one.\n\n if (state.awaitDrain && (!dest._writableState || dest._writableState.needDrain)) ondrain();\n }\n\n src.on('data', ondata);\n\n function ondata(chunk) {\n debug('ondata');\n var ret = dest.write(chunk);\n debug('dest.write', ret);\n\n if (ret === false) {\n // If the user unpiped during `dest.write()`, it is possible\n // to get stuck in a permanently paused state if that write\n // also returned false.\n // => Check whether `dest` is still a piping destination.\n if ((state.pipesCount === 1 && state.pipes === dest || state.pipesCount > 1 && indexOf(state.pipes, dest) !== -1) && !cleanedUp) {\n debug('false write response, pause', state.awaitDrain);\n state.awaitDrain++;\n }\n\n src.pause();\n }\n } // if the dest has an error, then stop piping into it.\n // however, don't suppress the throwing behavior for this.\n\n\n function onerror(er) {\n debug('onerror', er);\n unpipe();\n dest.removeListener('error', onerror);\n if (EElistenerCount(dest, 'error') === 0) errorOrDestroy(dest, er);\n } // Make sure our error handler is attached before userland ones.\n\n\n prependListener(dest, 'error', onerror); // Both close and finish should trigger unpipe, but only once.\n\n function onclose() {\n dest.removeListener('finish', onfinish);\n unpipe();\n }\n\n dest.once('close', onclose);\n\n function onfinish() {\n debug('onfinish');\n dest.removeListener('close', onclose);\n unpipe();\n }\n\n dest.once('finish', onfinish);\n\n function unpipe() {\n debug('unpipe');\n src.unpipe(dest);\n } // tell the dest that it's being piped to\n\n\n dest.emit('pipe', src); // start the flow if it hasn't been started already.\n\n if (!state.flowing) {\n debug('pipe resume');\n src.resume();\n }\n\n return dest;\n};\n\nfunction pipeOnDrain(src) {\n return function pipeOnDrainFunctionResult() {\n var state = src._readableState;\n debug('pipeOnDrain', state.awaitDrain);\n if (state.awaitDrain) state.awaitDrain--;\n\n if (state.awaitDrain === 0 && EElistenerCount(src, 'data')) {\n state.flowing = true;\n flow(src);\n }\n };\n}\n\nReadable.prototype.unpipe = function (dest) {\n var state = this._readableState;\n var unpipeInfo = {\n hasUnpiped: false\n }; // if we're not piping anywhere, then do nothing.\n\n if (state.pipesCount === 0) return this; // just one destination. most common case.\n\n if (state.pipesCount === 1) {\n // passed in one, but it's not the right one.\n if (dest && dest !== state.pipes) return this;\n if (!dest) dest = state.pipes; // got a match.\n\n state.pipes = null;\n state.pipesCount = 0;\n state.flowing = false;\n if (dest) dest.emit('unpipe', this, unpipeInfo);\n return this;\n } // slow case. multiple pipe destinations.\n\n\n if (!dest) {\n // remove all.\n var dests = state.pipes;\n var len = state.pipesCount;\n state.pipes = null;\n state.pipesCount = 0;\n state.flowing = false;\n\n for (var i = 0; i < len; i++) {\n dests[i].emit('unpipe', this, {\n hasUnpiped: false\n });\n }\n\n return this;\n } // try to find the right one.\n\n\n var index = indexOf(state.pipes, dest);\n if (index === -1) return this;\n state.pipes.splice(index, 1);\n state.pipesCount -= 1;\n if (state.pipesCount === 1) state.pipes = state.pipes[0];\n dest.emit('unpipe', this, unpipeInfo);\n return this;\n}; // set up data events if they are asked for\n// Ensure readable listeners eventually get something\n\n\nReadable.prototype.on = function (ev, fn) {\n var res = Stream.prototype.on.call(this, ev, fn);\n var state = this._readableState;\n\n if (ev === 'data') {\n // update readableListening so that resume() may be a no-op\n // a few lines down. This is needed to support once('readable').\n state.readableListening = this.listenerCount('readable') > 0; // Try start flowing on next tick if stream isn't explicitly paused\n\n if (state.flowing !== false) this.resume();\n } else if (ev === 'readable') {\n if (!state.endEmitted && !state.readableListening) {\n state.readableListening = state.needReadable = true;\n state.flowing = false;\n state.emittedReadable = false;\n debug('on readable', state.length, state.reading);\n\n if (state.length) {\n emitReadable(this);\n } else if (!state.reading) {\n process.nextTick(nReadingNextTick, this);\n }\n }\n }\n\n return res;\n};\n\nReadable.prototype.addListener = Readable.prototype.on;\n\nReadable.prototype.removeListener = function (ev, fn) {\n var res = Stream.prototype.removeListener.call(this, ev, fn);\n\n if (ev === 'readable') {\n // We need to check if there is someone still listening to\n // readable and reset the state. However this needs to happen\n // after readable has been emitted but before I/O (nextTick) to\n // support once('readable', fn) cycles. This means that calling\n // resume within the same tick will have no\n // effect.\n process.nextTick(updateReadableListening, this);\n }\n\n return res;\n};\n\nReadable.prototype.removeAllListeners = function (ev) {\n var res = Stream.prototype.removeAllListeners.apply(this, arguments);\n\n if (ev === 'readable' || ev === undefined) {\n // We need to check if there is someone still listening to\n // readable and reset the state. However this needs to happen\n // after readable has been emitted but before I/O (nextTick) to\n // support once('readable', fn) cycles. This means that calling\n // resume within the same tick will have no\n // effect.\n process.nextTick(updateReadableListening, this);\n }\n\n return res;\n};\n\nfunction updateReadableListening(self) {\n var state = self._readableState;\n state.readableListening = self.listenerCount('readable') > 0;\n\n if (state.resumeScheduled && !state.paused) {\n // flowing needs to be set to true now, otherwise\n // the upcoming resume will not flow.\n state.flowing = true; // crude way to check if we should resume\n } else if (self.listenerCount('data') > 0) {\n self.resume();\n }\n}\n\nfunction nReadingNextTick(self) {\n debug('readable nexttick read 0');\n self.read(0);\n} // pause() and resume() are remnants of the legacy readable stream API\n// If the user uses them, then switch into old mode.\n\n\nReadable.prototype.resume = function () {\n var state = this._readableState;\n\n if (!state.flowing) {\n debug('resume'); // we flow only if there is no one listening\n // for readable, but we still have to call\n // resume()\n\n state.flowing = !state.readableListening;\n resume(this, state);\n }\n\n state.paused = false;\n return this;\n};\n\nfunction resume(stream, state) {\n if (!state.resumeScheduled) {\n state.resumeScheduled = true;\n process.nextTick(resume_, stream, state);\n }\n}\n\nfunction resume_(stream, state) {\n debug('resume', state.reading);\n\n if (!state.reading) {\n stream.read(0);\n }\n\n state.resumeScheduled = false;\n stream.emit('resume');\n flow(stream);\n if (state.flowing && !state.reading) stream.read(0);\n}\n\nReadable.prototype.pause = function () {\n debug('call pause flowing=%j', this._readableState.flowing);\n\n if (this._readableState.flowing !== false) {\n debug('pause');\n this._readableState.flowing = false;\n this.emit('pause');\n }\n\n this._readableState.paused = true;\n return this;\n};\n\nfunction flow(stream) {\n var state = stream._readableState;\n debug('flow', state.flowing);\n\n while (state.flowing && stream.read() !== null) {\n ;\n }\n} // wrap an old-style stream as the async data source.\n// This is *not* part of the readable stream interface.\n// It is an ugly unfortunate mess of history.\n\n\nReadable.prototype.wrap = function (stream) {\n var _this = this;\n\n var state = this._readableState;\n var paused = false;\n stream.on('end', function () {\n debug('wrapped end');\n\n if (state.decoder && !state.ended) {\n var chunk = state.decoder.end();\n if (chunk && chunk.length) _this.push(chunk);\n }\n\n _this.push(null);\n });\n stream.on('data', function (chunk) {\n debug('wrapped data');\n if (state.decoder) chunk = state.decoder.write(chunk); // don't skip over falsy values in objectMode\n\n if (state.objectMode && (chunk === null || chunk === undefined)) return;else if (!state.objectMode && (!chunk || !chunk.length)) return;\n\n var ret = _this.push(chunk);\n\n if (!ret) {\n paused = true;\n stream.pause();\n }\n }); // proxy all the other methods.\n // important when wrapping filters and duplexes.\n\n for (var i in stream) {\n if (this[i] === undefined && typeof stream[i] === 'function') {\n this[i] = function methodWrap(method) {\n return function methodWrapReturnFunction() {\n return stream[method].apply(stream, arguments);\n };\n }(i);\n }\n } // proxy certain important events.\n\n\n for (var n = 0; n < kProxyEvents.length; n++) {\n stream.on(kProxyEvents[n], this.emit.bind(this, kProxyEvents[n]));\n } // when we try to consume some more bytes, simply unpause the\n // underlying stream.\n\n\n this._read = function (n) {\n debug('wrapped _read', n);\n\n if (paused) {\n paused = false;\n stream.resume();\n }\n };\n\n return this;\n};\n\nif (typeof Symbol === 'function') {\n Readable.prototype[Symbol.asyncIterator] = function () {\n if (createReadableStreamAsyncIterator === undefined) {\n createReadableStreamAsyncIterator = require('./internal/streams/async_iterator');\n }\n\n return createReadableStreamAsyncIterator(this);\n };\n}\n\nObject.defineProperty(Readable.prototype, 'readableHighWaterMark', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n return this._readableState.highWaterMark;\n }\n});\nObject.defineProperty(Readable.prototype, 'readableBuffer', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n return this._readableState && this._readableState.buffer;\n }\n});\nObject.defineProperty(Readable.prototype, 'readableFlowing', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n return this._readableState.flowing;\n },\n set: function set(state) {\n if (this._readableState) {\n this._readableState.flowing = state;\n }\n }\n}); // exposed for testing purposes only.\n\nReadable._fromList = fromList;\nObject.defineProperty(Readable.prototype, 'readableLength', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n return this._readableState.length;\n }\n}); // Pluck off n bytes from an array of buffers.\n// Length is the combined lengths of all the buffers in the list.\n// This function is designed to be inlinable, so please take care when making\n// changes to the function body.\n\nfunction fromList(n, state) {\n // nothing buffered\n if (state.length === 0) return null;\n var ret;\n if (state.objectMode) ret = state.buffer.shift();else if (!n || n >= state.length) {\n // read it all, truncate the list\n if (state.decoder) ret = state.buffer.join('');else if (state.buffer.length === 1) ret = state.buffer.first();else ret = state.buffer.concat(state.length);\n state.buffer.clear();\n } else {\n // read part of list\n ret = state.buffer.consume(n, state.decoder);\n }\n return ret;\n}\n\nfunction endReadable(stream) {\n var state = stream._readableState;\n debug('endReadable', state.endEmitted);\n\n if (!state.endEmitted) {\n state.ended = true;\n process.nextTick(endReadableNT, state, stream);\n }\n}\n\nfunction endReadableNT(state, stream) {\n debug('endReadableNT', state.endEmitted, state.length); // Check that we didn't get one last unshift.\n\n if (!state.endEmitted && state.length === 0) {\n state.endEmitted = true;\n stream.readable = false;\n stream.emit('end');\n\n if (state.autoDestroy) {\n // In case of duplex streams we need a way to detect\n // if the writable side is ready for autoDestroy as well\n var wState = stream._writableState;\n\n if (!wState || wState.autoDestroy && wState.finished) {\n stream.destroy();\n }\n }\n }\n}\n\nif (typeof Symbol === 'function') {\n Readable.from = function (iterable, opts) {\n if (from === undefined) {\n from = require('./internal/streams/from');\n }\n\n return from(Readable, iterable, opts);\n };\n}\n\nfunction indexOf(xs, x) {\n for (var i = 0, l = xs.length; i < l; i++) {\n if (xs[i] === x) return i;\n }\n\n return -1;\n}","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n// a transform stream is a readable/writable stream where you do\n// something with the data. Sometimes it's called a \"filter\",\n// but that's not a great name for it, since that implies a thing where\n// some bits pass through, and others are simply ignored. (That would\n// be a valid example of a transform, of course.)\n//\n// While the output is causally related to the input, it's not a\n// necessarily symmetric or synchronous transformation. For example,\n// a zlib stream might take multiple plain-text writes(), and then\n// emit a single compressed chunk some time in the future.\n//\n// Here's how this works:\n//\n// The Transform stream has all the aspects of the readable and writable\n// stream classes. When you write(chunk), that calls _write(chunk,cb)\n// internally, and returns false if there's a lot of pending writes\n// buffered up. When you call read(), that calls _read(n) until\n// there's enough pending readable data buffered up.\n//\n// In a transform stream, the written data is placed in a buffer. When\n// _read(n) is called, it transforms the queued up data, calling the\n// buffered _write cb's as it consumes chunks. If consuming a single\n// written chunk would result in multiple output chunks, then the first\n// outputted bit calls the readcb, and subsequent chunks just go into\n// the read buffer, and will cause it to emit 'readable' if necessary.\n//\n// This way, back-pressure is actually determined by the reading side,\n// since _read has to be called to start processing a new chunk. However,\n// a pathological inflate type of transform can cause excessive buffering\n// here. For example, imagine a stream where every byte of input is\n// interpreted as an integer from 0-255, and then results in that many\n// bytes of output. Writing the 4 bytes {ff,ff,ff,ff} would result in\n// 1kb of data being output. In this case, you could write a very small\n// amount of input, and end up with a very large amount of output. In\n// such a pathological inflating mechanism, there'd be no way to tell\n// the system to stop doing the transform. A single 4MB write could\n// cause the system to run out of memory.\n//\n// However, even in such a pathological case, only a single written chunk\n// would be consumed, and then the rest would wait (un-transformed) until\n// the results of the previous transformed chunk were consumed.\n'use strict';\n\nmodule.exports = Transform;\n\nvar _require$codes = require('../errors').codes,\n ERR_METHOD_NOT_IMPLEMENTED = _require$codes.ERR_METHOD_NOT_IMPLEMENTED,\n ERR_MULTIPLE_CALLBACK = _require$codes.ERR_MULTIPLE_CALLBACK,\n ERR_TRANSFORM_ALREADY_TRANSFORMING = _require$codes.ERR_TRANSFORM_ALREADY_TRANSFORMING,\n ERR_TRANSFORM_WITH_LENGTH_0 = _require$codes.ERR_TRANSFORM_WITH_LENGTH_0;\n\nvar Duplex = require('./_stream_duplex');\n\nrequire('inherits')(Transform, Duplex);\n\nfunction afterTransform(er, data) {\n var ts = this._transformState;\n ts.transforming = false;\n var cb = ts.writecb;\n\n if (cb === null) {\n return this.emit('error', new ERR_MULTIPLE_CALLBACK());\n }\n\n ts.writechunk = null;\n ts.writecb = null;\n if (data != null) // single equals check for both `null` and `undefined`\n this.push(data);\n cb(er);\n var rs = this._readableState;\n rs.reading = false;\n\n if (rs.needReadable || rs.length < rs.highWaterMark) {\n this._read(rs.highWaterMark);\n }\n}\n\nfunction Transform(options) {\n if (!(this instanceof Transform)) return new Transform(options);\n Duplex.call(this, options);\n this._transformState = {\n afterTransform: afterTransform.bind(this),\n needTransform: false,\n transforming: false,\n writecb: null,\n writechunk: null,\n writeencoding: null\n }; // start out asking for a readable event once data is transformed.\n\n this._readableState.needReadable = true; // we have implemented the _read method, and done the other things\n // that Readable wants before the first _read call, so unset the\n // sync guard flag.\n\n this._readableState.sync = false;\n\n if (options) {\n if (typeof options.transform === 'function') this._transform = options.transform;\n if (typeof options.flush === 'function') this._flush = options.flush;\n } // When the writable side finishes, then flush out anything remaining.\n\n\n this.on('prefinish', prefinish);\n}\n\nfunction prefinish() {\n var _this = this;\n\n if (typeof this._flush === 'function' && !this._readableState.destroyed) {\n this._flush(function (er, data) {\n done(_this, er, data);\n });\n } else {\n done(this, null, null);\n }\n}\n\nTransform.prototype.push = function (chunk, encoding) {\n this._transformState.needTransform = false;\n return Duplex.prototype.push.call(this, chunk, encoding);\n}; // This is the part where you do stuff!\n// override this function in implementation classes.\n// 'chunk' is an input chunk.\n//\n// Call `push(newChunk)` to pass along transformed output\n// to the readable side. You may call 'push' zero or more times.\n//\n// Call `cb(err)` when you are done with this chunk. If you pass\n// an error, then that'll put the hurt on the whole operation. If you\n// never call cb(), then you'll never get another chunk.\n\n\nTransform.prototype._transform = function (chunk, encoding, cb) {\n cb(new ERR_METHOD_NOT_IMPLEMENTED('_transform()'));\n};\n\nTransform.prototype._write = function (chunk, encoding, cb) {\n var ts = this._transformState;\n ts.writecb = cb;\n ts.writechunk = chunk;\n ts.writeencoding = encoding;\n\n if (!ts.transforming) {\n var rs = this._readableState;\n if (ts.needTransform || rs.needReadable || rs.length < rs.highWaterMark) this._read(rs.highWaterMark);\n }\n}; // Doesn't matter what the args are here.\n// _transform does all the work.\n// That we got here means that the readable side wants more data.\n\n\nTransform.prototype._read = function (n) {\n var ts = this._transformState;\n\n if (ts.writechunk !== null && !ts.transforming) {\n ts.transforming = true;\n\n this._transform(ts.writechunk, ts.writeencoding, ts.afterTransform);\n } else {\n // mark that we need a transform, so that any data that comes in\n // will get processed, now that we've asked for it.\n ts.needTransform = true;\n }\n};\n\nTransform.prototype._destroy = function (err, cb) {\n Duplex.prototype._destroy.call(this, err, function (err2) {\n cb(err2);\n });\n};\n\nfunction done(stream, er, data) {\n if (er) return stream.emit('error', er);\n if (data != null) // single equals check for both `null` and `undefined`\n stream.push(data); // TODO(BridgeAR): Write a test for these two error cases\n // if there's nothing in the write buffer, then that means\n // that nothing more will ever be provided\n\n if (stream._writableState.length) throw new ERR_TRANSFORM_WITH_LENGTH_0();\n if (stream._transformState.transforming) throw new ERR_TRANSFORM_ALREADY_TRANSFORMING();\n return stream.push(null);\n}","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n// A bit simpler than readable streams.\n// Implement an async ._write(chunk, encoding, cb), and it'll handle all\n// the drain event emission and buffering.\n'use strict';\n\nmodule.exports = Writable;\n/* */\n\nfunction WriteReq(chunk, encoding, cb) {\n this.chunk = chunk;\n this.encoding = encoding;\n this.callback = cb;\n this.next = null;\n} // It seems a linked list but it is not\n// there will be only 2 of these for each stream\n\n\nfunction CorkedRequest(state) {\n var _this = this;\n\n this.next = null;\n this.entry = null;\n\n this.finish = function () {\n onCorkedFinish(_this, state);\n };\n}\n/* */\n\n/**/\n\n\nvar Duplex;\n/**/\n\nWritable.WritableState = WritableState;\n/**/\n\nvar internalUtil = {\n deprecate: require('util-deprecate')\n};\n/**/\n\n/**/\n\nvar Stream = require('./internal/streams/stream');\n/**/\n\n\nvar Buffer = require('buffer').Buffer;\n\nvar OurUint8Array = global.Uint8Array || function () {};\n\nfunction _uint8ArrayToBuffer(chunk) {\n return Buffer.from(chunk);\n}\n\nfunction _isUint8Array(obj) {\n return Buffer.isBuffer(obj) || obj instanceof OurUint8Array;\n}\n\nvar destroyImpl = require('./internal/streams/destroy');\n\nvar _require = require('./internal/streams/state'),\n getHighWaterMark = _require.getHighWaterMark;\n\nvar _require$codes = require('../errors').codes,\n ERR_INVALID_ARG_TYPE = _require$codes.ERR_INVALID_ARG_TYPE,\n ERR_METHOD_NOT_IMPLEMENTED = _require$codes.ERR_METHOD_NOT_IMPLEMENTED,\n ERR_MULTIPLE_CALLBACK = _require$codes.ERR_MULTIPLE_CALLBACK,\n ERR_STREAM_CANNOT_PIPE = _require$codes.ERR_STREAM_CANNOT_PIPE,\n ERR_STREAM_DESTROYED = _require$codes.ERR_STREAM_DESTROYED,\n ERR_STREAM_NULL_VALUES = _require$codes.ERR_STREAM_NULL_VALUES,\n ERR_STREAM_WRITE_AFTER_END = _require$codes.ERR_STREAM_WRITE_AFTER_END,\n ERR_UNKNOWN_ENCODING = _require$codes.ERR_UNKNOWN_ENCODING;\n\nvar errorOrDestroy = destroyImpl.errorOrDestroy;\n\nrequire('inherits')(Writable, Stream);\n\nfunction nop() {}\n\nfunction WritableState(options, stream, isDuplex) {\n Duplex = Duplex || require('./_stream_duplex');\n options = options || {}; // Duplex streams are both readable and writable, but share\n // the same options object.\n // However, some cases require setting options to different\n // values for the readable and the writable sides of the duplex stream,\n // e.g. options.readableObjectMode vs. options.writableObjectMode, etc.\n\n if (typeof isDuplex !== 'boolean') isDuplex = stream instanceof Duplex; // object stream flag to indicate whether or not this stream\n // contains buffers or objects.\n\n this.objectMode = !!options.objectMode;\n if (isDuplex) this.objectMode = this.objectMode || !!options.writableObjectMode; // the point at which write() starts returning false\n // Note: 0 is a valid value, means that we always return false if\n // the entire buffer is not flushed immediately on write()\n\n this.highWaterMark = getHighWaterMark(this, options, 'writableHighWaterMark', isDuplex); // if _final has been called\n\n this.finalCalled = false; // drain event flag.\n\n this.needDrain = false; // at the start of calling end()\n\n this.ending = false; // when end() has been called, and returned\n\n this.ended = false; // when 'finish' is emitted\n\n this.finished = false; // has it been destroyed\n\n this.destroyed = false; // should we decode strings into buffers before passing to _write?\n // this is here so that some node-core streams can optimize string\n // handling at a lower level.\n\n var noDecode = options.decodeStrings === false;\n this.decodeStrings = !noDecode; // Crypto is kind of old and crusty. Historically, its default string\n // encoding is 'binary' so we have to make this configurable.\n // Everything else in the universe uses 'utf8', though.\n\n this.defaultEncoding = options.defaultEncoding || 'utf8'; // not an actual buffer we keep track of, but a measurement\n // of how much we're waiting to get pushed to some underlying\n // socket or file.\n\n this.length = 0; // a flag to see when we're in the middle of a write.\n\n this.writing = false; // when true all writes will be buffered until .uncork() call\n\n this.corked = 0; // a flag to be able to tell if the onwrite cb is called immediately,\n // or on a later tick. We set this to true at first, because any\n // actions that shouldn't happen until \"later\" should generally also\n // not happen before the first write call.\n\n this.sync = true; // a flag to know if we're processing previously buffered items, which\n // may call the _write() callback in the same tick, so that we don't\n // end up in an overlapped onwrite situation.\n\n this.bufferProcessing = false; // the callback that's passed to _write(chunk,cb)\n\n this.onwrite = function (er) {\n onwrite(stream, er);\n }; // the callback that the user supplies to write(chunk,encoding,cb)\n\n\n this.writecb = null; // the amount that is being written when _write is called.\n\n this.writelen = 0;\n this.bufferedRequest = null;\n this.lastBufferedRequest = null; // number of pending user-supplied write callbacks\n // this must be 0 before 'finish' can be emitted\n\n this.pendingcb = 0; // emit prefinish if the only thing we're waiting for is _write cbs\n // This is relevant for synchronous Transform streams\n\n this.prefinished = false; // True if the error was already emitted and should not be thrown again\n\n this.errorEmitted = false; // Should close be emitted on destroy. Defaults to true.\n\n this.emitClose = options.emitClose !== false; // Should .destroy() be called after 'finish' (and potentially 'end')\n\n this.autoDestroy = !!options.autoDestroy; // count buffered requests\n\n this.bufferedRequestCount = 0; // allocate the first CorkedRequest, there is always\n // one allocated and free to use, and we maintain at most two\n\n this.corkedRequestsFree = new CorkedRequest(this);\n}\n\nWritableState.prototype.getBuffer = function getBuffer() {\n var current = this.bufferedRequest;\n var out = [];\n\n while (current) {\n out.push(current);\n current = current.next;\n }\n\n return out;\n};\n\n(function () {\n try {\n Object.defineProperty(WritableState.prototype, 'buffer', {\n get: internalUtil.deprecate(function writableStateBufferGetter() {\n return this.getBuffer();\n }, '_writableState.buffer is deprecated. Use _writableState.getBuffer ' + 'instead.', 'DEP0003')\n });\n } catch (_) {}\n})(); // Test _writableState for inheritance to account for Duplex streams,\n// whose prototype chain only points to Readable.\n\n\nvar realHasInstance;\n\nif (typeof Symbol === 'function' && Symbol.hasInstance && typeof Function.prototype[Symbol.hasInstance] === 'function') {\n realHasInstance = Function.prototype[Symbol.hasInstance];\n Object.defineProperty(Writable, Symbol.hasInstance, {\n value: function value(object) {\n if (realHasInstance.call(this, object)) return true;\n if (this !== Writable) return false;\n return object && object._writableState instanceof WritableState;\n }\n });\n} else {\n realHasInstance = function realHasInstance(object) {\n return object instanceof this;\n };\n}\n\nfunction Writable(options) {\n Duplex = Duplex || require('./_stream_duplex'); // Writable ctor is applied to Duplexes, too.\n // `realHasInstance` is necessary because using plain `instanceof`\n // would return false, as no `_writableState` property is attached.\n // Trying to use the custom `instanceof` for Writable here will also break the\n // Node.js LazyTransform implementation, which has a non-trivial getter for\n // `_writableState` that would lead to infinite recursion.\n // Checking for a Stream.Duplex instance is faster here instead of inside\n // the WritableState constructor, at least with V8 6.5\n\n var isDuplex = this instanceof Duplex;\n if (!isDuplex && !realHasInstance.call(Writable, this)) return new Writable(options);\n this._writableState = new WritableState(options, this, isDuplex); // legacy.\n\n this.writable = true;\n\n if (options) {\n if (typeof options.write === 'function') this._write = options.write;\n if (typeof options.writev === 'function') this._writev = options.writev;\n if (typeof options.destroy === 'function') this._destroy = options.destroy;\n if (typeof options.final === 'function') this._final = options.final;\n }\n\n Stream.call(this);\n} // Otherwise people can pipe Writable streams, which is just wrong.\n\n\nWritable.prototype.pipe = function () {\n errorOrDestroy(this, new ERR_STREAM_CANNOT_PIPE());\n};\n\nfunction writeAfterEnd(stream, cb) {\n var er = new ERR_STREAM_WRITE_AFTER_END(); // TODO: defer error events consistently everywhere, not just the cb\n\n errorOrDestroy(stream, er);\n process.nextTick(cb, er);\n} // Checks that a user-supplied chunk is valid, especially for the particular\n// mode the stream is in. Currently this means that `null` is never accepted\n// and undefined/non-string values are only allowed in object mode.\n\n\nfunction validChunk(stream, state, chunk, cb) {\n var er;\n\n if (chunk === null) {\n er = new ERR_STREAM_NULL_VALUES();\n } else if (typeof chunk !== 'string' && !state.objectMode) {\n er = new ERR_INVALID_ARG_TYPE('chunk', ['string', 'Buffer'], chunk);\n }\n\n if (er) {\n errorOrDestroy(stream, er);\n process.nextTick(cb, er);\n return false;\n }\n\n return true;\n}\n\nWritable.prototype.write = function (chunk, encoding, cb) {\n var state = this._writableState;\n var ret = false;\n\n var isBuf = !state.objectMode && _isUint8Array(chunk);\n\n if (isBuf && !Buffer.isBuffer(chunk)) {\n chunk = _uint8ArrayToBuffer(chunk);\n }\n\n if (typeof encoding === 'function') {\n cb = encoding;\n encoding = null;\n }\n\n if (isBuf) encoding = 'buffer';else if (!encoding) encoding = state.defaultEncoding;\n if (typeof cb !== 'function') cb = nop;\n if (state.ending) writeAfterEnd(this, cb);else if (isBuf || validChunk(this, state, chunk, cb)) {\n state.pendingcb++;\n ret = writeOrBuffer(this, state, isBuf, chunk, encoding, cb);\n }\n return ret;\n};\n\nWritable.prototype.cork = function () {\n this._writableState.corked++;\n};\n\nWritable.prototype.uncork = function () {\n var state = this._writableState;\n\n if (state.corked) {\n state.corked--;\n if (!state.writing && !state.corked && !state.bufferProcessing && state.bufferedRequest) clearBuffer(this, state);\n }\n};\n\nWritable.prototype.setDefaultEncoding = function setDefaultEncoding(encoding) {\n // node::ParseEncoding() requires lower case.\n if (typeof encoding === 'string') encoding = encoding.toLowerCase();\n if (!(['hex', 'utf8', 'utf-8', 'ascii', 'binary', 'base64', 'ucs2', 'ucs-2', 'utf16le', 'utf-16le', 'raw'].indexOf((encoding + '').toLowerCase()) > -1)) throw new ERR_UNKNOWN_ENCODING(encoding);\n this._writableState.defaultEncoding = encoding;\n return this;\n};\n\nObject.defineProperty(Writable.prototype, 'writableBuffer', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n return this._writableState && this._writableState.getBuffer();\n }\n});\n\nfunction decodeChunk(state, chunk, encoding) {\n if (!state.objectMode && state.decodeStrings !== false && typeof chunk === 'string') {\n chunk = Buffer.from(chunk, encoding);\n }\n\n return chunk;\n}\n\nObject.defineProperty(Writable.prototype, 'writableHighWaterMark', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n return this._writableState.highWaterMark;\n }\n}); // if we're already writing something, then just put this\n// in the queue, and wait our turn. Otherwise, call _write\n// If we return false, then we need a drain event, so set that flag.\n\nfunction writeOrBuffer(stream, state, isBuf, chunk, encoding, cb) {\n if (!isBuf) {\n var newChunk = decodeChunk(state, chunk, encoding);\n\n if (chunk !== newChunk) {\n isBuf = true;\n encoding = 'buffer';\n chunk = newChunk;\n }\n }\n\n var len = state.objectMode ? 1 : chunk.length;\n state.length += len;\n var ret = state.length < state.highWaterMark; // we must ensure that previous needDrain will not be reset to false.\n\n if (!ret) state.needDrain = true;\n\n if (state.writing || state.corked) {\n var last = state.lastBufferedRequest;\n state.lastBufferedRequest = {\n chunk: chunk,\n encoding: encoding,\n isBuf: isBuf,\n callback: cb,\n next: null\n };\n\n if (last) {\n last.next = state.lastBufferedRequest;\n } else {\n state.bufferedRequest = state.lastBufferedRequest;\n }\n\n state.bufferedRequestCount += 1;\n } else {\n doWrite(stream, state, false, len, chunk, encoding, cb);\n }\n\n return ret;\n}\n\nfunction doWrite(stream, state, writev, len, chunk, encoding, cb) {\n state.writelen = len;\n state.writecb = cb;\n state.writing = true;\n state.sync = true;\n if (state.destroyed) state.onwrite(new ERR_STREAM_DESTROYED('write'));else if (writev) stream._writev(chunk, state.onwrite);else stream._write(chunk, encoding, state.onwrite);\n state.sync = false;\n}\n\nfunction onwriteError(stream, state, sync, er, cb) {\n --state.pendingcb;\n\n if (sync) {\n // defer the callback if we are being called synchronously\n // to avoid piling up things on the stack\n process.nextTick(cb, er); // this can emit finish, and it will always happen\n // after error\n\n process.nextTick(finishMaybe, stream, state);\n stream._writableState.errorEmitted = true;\n errorOrDestroy(stream, er);\n } else {\n // the caller expect this to happen before if\n // it is async\n cb(er);\n stream._writableState.errorEmitted = true;\n errorOrDestroy(stream, er); // this can emit finish, but finish must\n // always follow error\n\n finishMaybe(stream, state);\n }\n}\n\nfunction onwriteStateUpdate(state) {\n state.writing = false;\n state.writecb = null;\n state.length -= state.writelen;\n state.writelen = 0;\n}\n\nfunction onwrite(stream, er) {\n var state = stream._writableState;\n var sync = state.sync;\n var cb = state.writecb;\n if (typeof cb !== 'function') throw new ERR_MULTIPLE_CALLBACK();\n onwriteStateUpdate(state);\n if (er) onwriteError(stream, state, sync, er, cb);else {\n // Check if we're actually ready to finish, but don't emit yet\n var finished = needFinish(state) || stream.destroyed;\n\n if (!finished && !state.corked && !state.bufferProcessing && state.bufferedRequest) {\n clearBuffer(stream, state);\n }\n\n if (sync) {\n process.nextTick(afterWrite, stream, state, finished, cb);\n } else {\n afterWrite(stream, state, finished, cb);\n }\n }\n}\n\nfunction afterWrite(stream, state, finished, cb) {\n if (!finished) onwriteDrain(stream, state);\n state.pendingcb--;\n cb();\n finishMaybe(stream, state);\n} // Must force callback to be called on nextTick, so that we don't\n// emit 'drain' before the write() consumer gets the 'false' return\n// value, and has a chance to attach a 'drain' listener.\n\n\nfunction onwriteDrain(stream, state) {\n if (state.length === 0 && state.needDrain) {\n state.needDrain = false;\n stream.emit('drain');\n }\n} // if there's something in the buffer waiting, then process it\n\n\nfunction clearBuffer(stream, state) {\n state.bufferProcessing = true;\n var entry = state.bufferedRequest;\n\n if (stream._writev && entry && entry.next) {\n // Fast case, write everything using _writev()\n var l = state.bufferedRequestCount;\n var buffer = new Array(l);\n var holder = state.corkedRequestsFree;\n holder.entry = entry;\n var count = 0;\n var allBuffers = true;\n\n while (entry) {\n buffer[count] = entry;\n if (!entry.isBuf) allBuffers = false;\n entry = entry.next;\n count += 1;\n }\n\n buffer.allBuffers = allBuffers;\n doWrite(stream, state, true, state.length, buffer, '', holder.finish); // doWrite is almost always async, defer these to save a bit of time\n // as the hot path ends with doWrite\n\n state.pendingcb++;\n state.lastBufferedRequest = null;\n\n if (holder.next) {\n state.corkedRequestsFree = holder.next;\n holder.next = null;\n } else {\n state.corkedRequestsFree = new CorkedRequest(state);\n }\n\n state.bufferedRequestCount = 0;\n } else {\n // Slow case, write chunks one-by-one\n while (entry) {\n var chunk = entry.chunk;\n var encoding = entry.encoding;\n var cb = entry.callback;\n var len = state.objectMode ? 1 : chunk.length;\n doWrite(stream, state, false, len, chunk, encoding, cb);\n entry = entry.next;\n state.bufferedRequestCount--; // if we didn't call the onwrite immediately, then\n // it means that we need to wait until it does.\n // also, that means that the chunk and cb are currently\n // being processed, so move the buffer counter past them.\n\n if (state.writing) {\n break;\n }\n }\n\n if (entry === null) state.lastBufferedRequest = null;\n }\n\n state.bufferedRequest = entry;\n state.bufferProcessing = false;\n}\n\nWritable.prototype._write = function (chunk, encoding, cb) {\n cb(new ERR_METHOD_NOT_IMPLEMENTED('_write()'));\n};\n\nWritable.prototype._writev = null;\n\nWritable.prototype.end = function (chunk, encoding, cb) {\n var state = this._writableState;\n\n if (typeof chunk === 'function') {\n cb = chunk;\n chunk = null;\n encoding = null;\n } else if (typeof encoding === 'function') {\n cb = encoding;\n encoding = null;\n }\n\n if (chunk !== null && chunk !== undefined) this.write(chunk, encoding); // .end() fully uncorks\n\n if (state.corked) {\n state.corked = 1;\n this.uncork();\n } // ignore unnecessary end() calls.\n\n\n if (!state.ending) endWritable(this, state, cb);\n return this;\n};\n\nObject.defineProperty(Writable.prototype, 'writableLength', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n return this._writableState.length;\n }\n});\n\nfunction needFinish(state) {\n return state.ending && state.length === 0 && state.bufferedRequest === null && !state.finished && !state.writing;\n}\n\nfunction callFinal(stream, state) {\n stream._final(function (err) {\n state.pendingcb--;\n\n if (err) {\n errorOrDestroy(stream, err);\n }\n\n state.prefinished = true;\n stream.emit('prefinish');\n finishMaybe(stream, state);\n });\n}\n\nfunction prefinish(stream, state) {\n if (!state.prefinished && !state.finalCalled) {\n if (typeof stream._final === 'function' && !state.destroyed) {\n state.pendingcb++;\n state.finalCalled = true;\n process.nextTick(callFinal, stream, state);\n } else {\n state.prefinished = true;\n stream.emit('prefinish');\n }\n }\n}\n\nfunction finishMaybe(stream, state) {\n var need = needFinish(state);\n\n if (need) {\n prefinish(stream, state);\n\n if (state.pendingcb === 0) {\n state.finished = true;\n stream.emit('finish');\n\n if (state.autoDestroy) {\n // In case of duplex streams we need a way to detect\n // if the readable side is ready for autoDestroy as well\n var rState = stream._readableState;\n\n if (!rState || rState.autoDestroy && rState.endEmitted) {\n stream.destroy();\n }\n }\n }\n }\n\n return need;\n}\n\nfunction endWritable(stream, state, cb) {\n state.ending = true;\n finishMaybe(stream, state);\n\n if (cb) {\n if (state.finished) process.nextTick(cb);else stream.once('finish', cb);\n }\n\n state.ended = true;\n stream.writable = false;\n}\n\nfunction onCorkedFinish(corkReq, state, err) {\n var entry = corkReq.entry;\n corkReq.entry = null;\n\n while (entry) {\n var cb = entry.callback;\n state.pendingcb--;\n cb(err);\n entry = entry.next;\n } // reuse the free corkReq.\n\n\n state.corkedRequestsFree.next = corkReq;\n}\n\nObject.defineProperty(Writable.prototype, 'destroyed', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n if (this._writableState === undefined) {\n return false;\n }\n\n return this._writableState.destroyed;\n },\n set: function set(value) {\n // we ignore the value if the stream\n // has not been initialized yet\n if (!this._writableState) {\n return;\n } // backward compatibility, the user is explicitly\n // managing destroyed\n\n\n this._writableState.destroyed = value;\n }\n});\nWritable.prototype.destroy = destroyImpl.destroy;\nWritable.prototype._undestroy = destroyImpl.undestroy;\n\nWritable.prototype._destroy = function (err, cb) {\n cb(err);\n};","'use strict';\n\nvar _Object$setPrototypeO;\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nvar finished = require('./end-of-stream');\n\nvar kLastResolve = Symbol('lastResolve');\nvar kLastReject = Symbol('lastReject');\nvar kError = Symbol('error');\nvar kEnded = Symbol('ended');\nvar kLastPromise = Symbol('lastPromise');\nvar kHandlePromise = Symbol('handlePromise');\nvar kStream = Symbol('stream');\n\nfunction createIterResult(value, done) {\n return {\n value: value,\n done: done\n };\n}\n\nfunction readAndResolve(iter) {\n var resolve = iter[kLastResolve];\n\n if (resolve !== null) {\n var data = iter[kStream].read(); // we defer if data is null\n // we can be expecting either 'end' or\n // 'error'\n\n if (data !== null) {\n iter[kLastPromise] = null;\n iter[kLastResolve] = null;\n iter[kLastReject] = null;\n resolve(createIterResult(data, false));\n }\n }\n}\n\nfunction onReadable(iter) {\n // we wait for the next tick, because it might\n // emit an error with process.nextTick\n process.nextTick(readAndResolve, iter);\n}\n\nfunction wrapForNext(lastPromise, iter) {\n return function (resolve, reject) {\n lastPromise.then(function () {\n if (iter[kEnded]) {\n resolve(createIterResult(undefined, true));\n return;\n }\n\n iter[kHandlePromise](resolve, reject);\n }, reject);\n };\n}\n\nvar AsyncIteratorPrototype = Object.getPrototypeOf(function () {});\nvar ReadableStreamAsyncIteratorPrototype = Object.setPrototypeOf((_Object$setPrototypeO = {\n get stream() {\n return this[kStream];\n },\n\n next: function next() {\n var _this = this;\n\n // if we have detected an error in the meanwhile\n // reject straight away\n var error = this[kError];\n\n if (error !== null) {\n return Promise.reject(error);\n }\n\n if (this[kEnded]) {\n return Promise.resolve(createIterResult(undefined, true));\n }\n\n if (this[kStream].destroyed) {\n // We need to defer via nextTick because if .destroy(err) is\n // called, the error will be emitted via nextTick, and\n // we cannot guarantee that there is no error lingering around\n // waiting to be emitted.\n return new Promise(function (resolve, reject) {\n process.nextTick(function () {\n if (_this[kError]) {\n reject(_this[kError]);\n } else {\n resolve(createIterResult(undefined, true));\n }\n });\n });\n } // if we have multiple next() calls\n // we will wait for the previous Promise to finish\n // this logic is optimized to support for await loops,\n // where next() is only called once at a time\n\n\n var lastPromise = this[kLastPromise];\n var promise;\n\n if (lastPromise) {\n promise = new Promise(wrapForNext(lastPromise, this));\n } else {\n // fast path needed to support multiple this.push()\n // without triggering the next() queue\n var data = this[kStream].read();\n\n if (data !== null) {\n return Promise.resolve(createIterResult(data, false));\n }\n\n promise = new Promise(this[kHandlePromise]);\n }\n\n this[kLastPromise] = promise;\n return promise;\n }\n}, _defineProperty(_Object$setPrototypeO, Symbol.asyncIterator, function () {\n return this;\n}), _defineProperty(_Object$setPrototypeO, \"return\", function _return() {\n var _this2 = this;\n\n // destroy(err, cb) is a private API\n // we can guarantee we have that here, because we control the\n // Readable class this is attached to\n return new Promise(function (resolve, reject) {\n _this2[kStream].destroy(null, function (err) {\n if (err) {\n reject(err);\n return;\n }\n\n resolve(createIterResult(undefined, true));\n });\n });\n}), _Object$setPrototypeO), AsyncIteratorPrototype);\n\nvar createReadableStreamAsyncIterator = function createReadableStreamAsyncIterator(stream) {\n var _Object$create;\n\n var iterator = Object.create(ReadableStreamAsyncIteratorPrototype, (_Object$create = {}, _defineProperty(_Object$create, kStream, {\n value: stream,\n writable: true\n }), _defineProperty(_Object$create, kLastResolve, {\n value: null,\n writable: true\n }), _defineProperty(_Object$create, kLastReject, {\n value: null,\n writable: true\n }), _defineProperty(_Object$create, kError, {\n value: null,\n writable: true\n }), _defineProperty(_Object$create, kEnded, {\n value: stream._readableState.endEmitted,\n writable: true\n }), _defineProperty(_Object$create, kHandlePromise, {\n value: function value(resolve, reject) {\n var data = iterator[kStream].read();\n\n if (data) {\n iterator[kLastPromise] = null;\n iterator[kLastResolve] = null;\n iterator[kLastReject] = null;\n resolve(createIterResult(data, false));\n } else {\n iterator[kLastResolve] = resolve;\n iterator[kLastReject] = reject;\n }\n },\n writable: true\n }), _Object$create));\n iterator[kLastPromise] = null;\n finished(stream, function (err) {\n if (err && err.code !== 'ERR_STREAM_PREMATURE_CLOSE') {\n var reject = iterator[kLastReject]; // reject if we are waiting for data in the Promise\n // returned by next() and store the error\n\n if (reject !== null) {\n iterator[kLastPromise] = null;\n iterator[kLastResolve] = null;\n iterator[kLastReject] = null;\n reject(err);\n }\n\n iterator[kError] = err;\n return;\n }\n\n var resolve = iterator[kLastResolve];\n\n if (resolve !== null) {\n iterator[kLastPromise] = null;\n iterator[kLastResolve] = null;\n iterator[kLastReject] = null;\n resolve(createIterResult(undefined, true));\n }\n\n iterator[kEnded] = true;\n });\n stream.on('readable', onReadable.bind(null, iterator));\n return iterator;\n};\n\nmodule.exports = createReadableStreamAsyncIterator;","'use strict';\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nvar _require = require('buffer'),\n Buffer = _require.Buffer;\n\nvar _require2 = require('util'),\n inspect = _require2.inspect;\n\nvar custom = inspect && inspect.custom || 'inspect';\n\nfunction copyBuffer(src, target, offset) {\n Buffer.prototype.copy.call(src, target, offset);\n}\n\nmodule.exports =\n/*#__PURE__*/\nfunction () {\n function BufferList() {\n _classCallCheck(this, BufferList);\n\n this.head = null;\n this.tail = null;\n this.length = 0;\n }\n\n _createClass(BufferList, [{\n key: \"push\",\n value: function push(v) {\n var entry = {\n data: v,\n next: null\n };\n if (this.length > 0) this.tail.next = entry;else this.head = entry;\n this.tail = entry;\n ++this.length;\n }\n }, {\n key: \"unshift\",\n value: function unshift(v) {\n var entry = {\n data: v,\n next: this.head\n };\n if (this.length === 0) this.tail = entry;\n this.head = entry;\n ++this.length;\n }\n }, {\n key: \"shift\",\n value: function shift() {\n if (this.length === 0) return;\n var ret = this.head.data;\n if (this.length === 1) this.head = this.tail = null;else this.head = this.head.next;\n --this.length;\n return ret;\n }\n }, {\n key: \"clear\",\n value: function clear() {\n this.head = this.tail = null;\n this.length = 0;\n }\n }, {\n key: \"join\",\n value: function join(s) {\n if (this.length === 0) return '';\n var p = this.head;\n var ret = '' + p.data;\n\n while (p = p.next) {\n ret += s + p.data;\n }\n\n return ret;\n }\n }, {\n key: \"concat\",\n value: function concat(n) {\n if (this.length === 0) return Buffer.alloc(0);\n var ret = Buffer.allocUnsafe(n >>> 0);\n var p = this.head;\n var i = 0;\n\n while (p) {\n copyBuffer(p.data, ret, i);\n i += p.data.length;\n p = p.next;\n }\n\n return ret;\n } // Consumes a specified amount of bytes or characters from the buffered data.\n\n }, {\n key: \"consume\",\n value: function consume(n, hasStrings) {\n var ret;\n\n if (n < this.head.data.length) {\n // `slice` is the same for buffers and strings.\n ret = this.head.data.slice(0, n);\n this.head.data = this.head.data.slice(n);\n } else if (n === this.head.data.length) {\n // First chunk is a perfect match.\n ret = this.shift();\n } else {\n // Result spans more than one buffer.\n ret = hasStrings ? this._getString(n) : this._getBuffer(n);\n }\n\n return ret;\n }\n }, {\n key: \"first\",\n value: function first() {\n return this.head.data;\n } // Consumes a specified amount of characters from the buffered data.\n\n }, {\n key: \"_getString\",\n value: function _getString(n) {\n var p = this.head;\n var c = 1;\n var ret = p.data;\n n -= ret.length;\n\n while (p = p.next) {\n var str = p.data;\n var nb = n > str.length ? str.length : n;\n if (nb === str.length) ret += str;else ret += str.slice(0, n);\n n -= nb;\n\n if (n === 0) {\n if (nb === str.length) {\n ++c;\n if (p.next) this.head = p.next;else this.head = this.tail = null;\n } else {\n this.head = p;\n p.data = str.slice(nb);\n }\n\n break;\n }\n\n ++c;\n }\n\n this.length -= c;\n return ret;\n } // Consumes a specified amount of bytes from the buffered data.\n\n }, {\n key: \"_getBuffer\",\n value: function _getBuffer(n) {\n var ret = Buffer.allocUnsafe(n);\n var p = this.head;\n var c = 1;\n p.data.copy(ret);\n n -= p.data.length;\n\n while (p = p.next) {\n var buf = p.data;\n var nb = n > buf.length ? buf.length : n;\n buf.copy(ret, ret.length - n, 0, nb);\n n -= nb;\n\n if (n === 0) {\n if (nb === buf.length) {\n ++c;\n if (p.next) this.head = p.next;else this.head = this.tail = null;\n } else {\n this.head = p;\n p.data = buf.slice(nb);\n }\n\n break;\n }\n\n ++c;\n }\n\n this.length -= c;\n return ret;\n } // Make sure the linked list only shows the minimal necessary information.\n\n }, {\n key: custom,\n value: function value(_, options) {\n return inspect(this, _objectSpread({}, options, {\n // Only inspect one level.\n depth: 0,\n // It should not recurse.\n customInspect: false\n }));\n }\n }]);\n\n return BufferList;\n}();","'use strict'; // undocumented cb() API, needed for core, not for public API\n\nfunction destroy(err, cb) {\n var _this = this;\n\n var readableDestroyed = this._readableState && this._readableState.destroyed;\n var writableDestroyed = this._writableState && this._writableState.destroyed;\n\n if (readableDestroyed || writableDestroyed) {\n if (cb) {\n cb(err);\n } else if (err) {\n if (!this._writableState) {\n process.nextTick(emitErrorNT, this, err);\n } else if (!this._writableState.errorEmitted) {\n this._writableState.errorEmitted = true;\n process.nextTick(emitErrorNT, this, err);\n }\n }\n\n return this;\n } // we set destroyed to true before firing error callbacks in order\n // to make it re-entrance safe in case destroy() is called within callbacks\n\n\n if (this._readableState) {\n this._readableState.destroyed = true;\n } // if this is a duplex stream mark the writable part as destroyed as well\n\n\n if (this._writableState) {\n this._writableState.destroyed = true;\n }\n\n this._destroy(err || null, function (err) {\n if (!cb && err) {\n if (!_this._writableState) {\n process.nextTick(emitErrorAndCloseNT, _this, err);\n } else if (!_this._writableState.errorEmitted) {\n _this._writableState.errorEmitted = true;\n process.nextTick(emitErrorAndCloseNT, _this, err);\n } else {\n process.nextTick(emitCloseNT, _this);\n }\n } else if (cb) {\n process.nextTick(emitCloseNT, _this);\n cb(err);\n } else {\n process.nextTick(emitCloseNT, _this);\n }\n });\n\n return this;\n}\n\nfunction emitErrorAndCloseNT(self, err) {\n emitErrorNT(self, err);\n emitCloseNT(self);\n}\n\nfunction emitCloseNT(self) {\n if (self._writableState && !self._writableState.emitClose) return;\n if (self._readableState && !self._readableState.emitClose) return;\n self.emit('close');\n}\n\nfunction undestroy() {\n if (this._readableState) {\n this._readableState.destroyed = false;\n this._readableState.reading = false;\n this._readableState.ended = false;\n this._readableState.endEmitted = false;\n }\n\n if (this._writableState) {\n this._writableState.destroyed = false;\n this._writableState.ended = false;\n this._writableState.ending = false;\n this._writableState.finalCalled = false;\n this._writableState.prefinished = false;\n this._writableState.finished = false;\n this._writableState.errorEmitted = false;\n }\n}\n\nfunction emitErrorNT(self, err) {\n self.emit('error', err);\n}\n\nfunction errorOrDestroy(stream, err) {\n // We have tests that rely on errors being emitted\n // in the same tick, so changing this is semver major.\n // For now when you opt-in to autoDestroy we allow\n // the error to be emitted nextTick. In a future\n // semver major update we should change the default to this.\n var rState = stream._readableState;\n var wState = stream._writableState;\n if (rState && rState.autoDestroy || wState && wState.autoDestroy) stream.destroy(err);else stream.emit('error', err);\n}\n\nmodule.exports = {\n destroy: destroy,\n undestroy: undestroy,\n errorOrDestroy: errorOrDestroy\n};","// Ported from https://github.com/mafintosh/end-of-stream with\n// permission from the author, Mathias Buus (@mafintosh).\n'use strict';\n\nvar ERR_STREAM_PREMATURE_CLOSE = require('../../../errors').codes.ERR_STREAM_PREMATURE_CLOSE;\n\nfunction once(callback) {\n var called = false;\n return function () {\n if (called) return;\n called = true;\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n callback.apply(this, args);\n };\n}\n\nfunction noop() {}\n\nfunction isRequest(stream) {\n return stream.setHeader && typeof stream.abort === 'function';\n}\n\nfunction eos(stream, opts, callback) {\n if (typeof opts === 'function') return eos(stream, null, opts);\n if (!opts) opts = {};\n callback = once(callback || noop);\n var readable = opts.readable || opts.readable !== false && stream.readable;\n var writable = opts.writable || opts.writable !== false && stream.writable;\n\n var onlegacyfinish = function onlegacyfinish() {\n if (!stream.writable) onfinish();\n };\n\n var writableEnded = stream._writableState && stream._writableState.finished;\n\n var onfinish = function onfinish() {\n writable = false;\n writableEnded = true;\n if (!readable) callback.call(stream);\n };\n\n var readableEnded = stream._readableState && stream._readableState.endEmitted;\n\n var onend = function onend() {\n readable = false;\n readableEnded = true;\n if (!writable) callback.call(stream);\n };\n\n var onerror = function onerror(err) {\n callback.call(stream, err);\n };\n\n var onclose = function onclose() {\n var err;\n\n if (readable && !readableEnded) {\n if (!stream._readableState || !stream._readableState.ended) err = new ERR_STREAM_PREMATURE_CLOSE();\n return callback.call(stream, err);\n }\n\n if (writable && !writableEnded) {\n if (!stream._writableState || !stream._writableState.ended) err = new ERR_STREAM_PREMATURE_CLOSE();\n return callback.call(stream, err);\n }\n };\n\n var onrequest = function onrequest() {\n stream.req.on('finish', onfinish);\n };\n\n if (isRequest(stream)) {\n stream.on('complete', onfinish);\n stream.on('abort', onclose);\n if (stream.req) onrequest();else stream.on('request', onrequest);\n } else if (writable && !stream._writableState) {\n // legacy streams\n stream.on('end', onlegacyfinish);\n stream.on('close', onlegacyfinish);\n }\n\n stream.on('end', onend);\n stream.on('finish', onfinish);\n if (opts.error !== false) stream.on('error', onerror);\n stream.on('close', onclose);\n return function () {\n stream.removeListener('complete', onfinish);\n stream.removeListener('abort', onclose);\n stream.removeListener('request', onrequest);\n if (stream.req) stream.req.removeListener('finish', onfinish);\n stream.removeListener('end', onlegacyfinish);\n stream.removeListener('close', onlegacyfinish);\n stream.removeListener('finish', onfinish);\n stream.removeListener('end', onend);\n stream.removeListener('error', onerror);\n stream.removeListener('close', onclose);\n };\n}\n\nmodule.exports = eos;","module.exports = function () {\n throw new Error('Readable.from is not available in the browser')\n};\n","// Ported from https://github.com/mafintosh/pump with\n// permission from the author, Mathias Buus (@mafintosh).\n'use strict';\n\nvar eos;\n\nfunction once(callback) {\n var called = false;\n return function () {\n if (called) return;\n called = true;\n callback.apply(void 0, arguments);\n };\n}\n\nvar _require$codes = require('../../../errors').codes,\n ERR_MISSING_ARGS = _require$codes.ERR_MISSING_ARGS,\n ERR_STREAM_DESTROYED = _require$codes.ERR_STREAM_DESTROYED;\n\nfunction noop(err) {\n // Rethrow the error if it exists to avoid swallowing it\n if (err) throw err;\n}\n\nfunction isRequest(stream) {\n return stream.setHeader && typeof stream.abort === 'function';\n}\n\nfunction destroyer(stream, reading, writing, callback) {\n callback = once(callback);\n var closed = false;\n stream.on('close', function () {\n closed = true;\n });\n if (eos === undefined) eos = require('./end-of-stream');\n eos(stream, {\n readable: reading,\n writable: writing\n }, function (err) {\n if (err) return callback(err);\n closed = true;\n callback();\n });\n var destroyed = false;\n return function (err) {\n if (closed) return;\n if (destroyed) return;\n destroyed = true; // request.destroy just do .end - .abort is what we want\n\n if (isRequest(stream)) return stream.abort();\n if (typeof stream.destroy === 'function') return stream.destroy();\n callback(err || new ERR_STREAM_DESTROYED('pipe'));\n };\n}\n\nfunction call(fn) {\n fn();\n}\n\nfunction pipe(from, to) {\n return from.pipe(to);\n}\n\nfunction popCallback(streams) {\n if (!streams.length) return noop;\n if (typeof streams[streams.length - 1] !== 'function') return noop;\n return streams.pop();\n}\n\nfunction pipeline() {\n for (var _len = arguments.length, streams = new Array(_len), _key = 0; _key < _len; _key++) {\n streams[_key] = arguments[_key];\n }\n\n var callback = popCallback(streams);\n if (Array.isArray(streams[0])) streams = streams[0];\n\n if (streams.length < 2) {\n throw new ERR_MISSING_ARGS('streams');\n }\n\n var error;\n var destroys = streams.map(function (stream, i) {\n var reading = i < streams.length - 1;\n var writing = i > 0;\n return destroyer(stream, reading, writing, function (err) {\n if (!error) error = err;\n if (err) destroys.forEach(call);\n if (reading) return;\n destroys.forEach(call);\n callback(error);\n });\n });\n return streams.reduce(pipe);\n}\n\nmodule.exports = pipeline;","'use strict';\n\nvar ERR_INVALID_OPT_VALUE = require('../../../errors').codes.ERR_INVALID_OPT_VALUE;\n\nfunction highWaterMarkFrom(options, isDuplex, duplexKey) {\n return options.highWaterMark != null ? options.highWaterMark : isDuplex ? options[duplexKey] : null;\n}\n\nfunction getHighWaterMark(state, options, duplexKey, isDuplex) {\n var hwm = highWaterMarkFrom(options, isDuplex, duplexKey);\n\n if (hwm != null) {\n if (!(isFinite(hwm) && Math.floor(hwm) === hwm) || hwm < 0) {\n var name = isDuplex ? duplexKey : 'highWaterMark';\n throw new ERR_INVALID_OPT_VALUE(name, hwm);\n }\n\n return Math.floor(hwm);\n } // Default value\n\n\n return state.objectMode ? 16 : 16 * 1024;\n}\n\nmodule.exports = {\n getHighWaterMark: getHighWaterMark\n};","module.exports = require('events').EventEmitter;\n","exports = module.exports = require('./lib/_stream_readable.js');\nexports.Stream = exports;\nexports.Readable = exports;\nexports.Writable = require('./lib/_stream_writable.js');\nexports.Duplex = require('./lib/_stream_duplex.js');\nexports.Transform = require('./lib/_stream_transform.js');\nexports.PassThrough = require('./lib/_stream_passthrough.js');\nexports.finished = require('./lib/internal/streams/end-of-stream.js');\nexports.pipeline = require('./lib/internal/streams/pipeline.js');\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.ReadableWebToNodeStream = void 0;\nconst readable_stream_1 = require(\"readable-stream\");\n/**\n * Converts a Web-API stream into Node stream.Readable class\n * Node stream readable: https://nodejs.org/api/stream.html#stream_readable_streams\n * Web API readable-stream: https://developer.mozilla.org/en-US/docs/Web/API/ReadableStream\n * Node readable stream: https://nodejs.org/api/stream.html#stream_readable_streams\n */\nclass ReadableWebToNodeStream extends readable_stream_1.Readable {\n /**\n *\n * @param stream Readable​Stream: https://developer.mozilla.org/en-US/docs/Web/API/ReadableStream\n */\n constructor(stream) {\n super();\n this.bytesRead = 0;\n this.released = false;\n this.reader = stream.getReader();\n }\n /**\n * Implementation of readable._read(size).\n * When readable._read() is called, if data is available from the resource,\n * the implementation should begin pushing that data into the read queue\n * https://nodejs.org/api/stream.html#stream_readable_read_size_1\n */\n async _read() {\n // Should start pushing data into the queue\n // Read data from the underlying Web-API-readable-stream\n if (this.released) {\n this.push(null); // Signal EOF\n return;\n }\n this.pendingRead = this.reader.read();\n const data = await this.pendingRead;\n // clear the promise before pushing pushing new data to the queue and allow sequential calls to _read()\n delete this.pendingRead;\n if (data.done || this.released) {\n this.push(null); // Signal EOF\n }\n else {\n this.bytesRead += data.value.length;\n this.push(data.value); // Push new data to the queue\n }\n }\n /**\n * If there is no unresolved read call to Web-API Readable​Stream immediately returns;\n * otherwise will wait until the read is resolved.\n */\n async waitForReadToComplete() {\n if (this.pendingRead) {\n await this.pendingRead;\n }\n }\n /**\n * Close wrapper\n */\n async close() {\n await this.syncAndRelease();\n }\n async syncAndRelease() {\n this.released = true;\n await this.waitForReadToComplete();\n await this.reader.releaseLock();\n }\n}\nexports.ReadableWebToNodeStream = ReadableWebToNodeStream;\n//# sourceMappingURL=index.js.map","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n'use strict';\n\n/**/\n\nvar Buffer = require('safe-buffer').Buffer;\n/**/\n\nvar isEncoding = Buffer.isEncoding || function (encoding) {\n encoding = '' + encoding;\n switch (encoding && encoding.toLowerCase()) {\n case 'hex':case 'utf8':case 'utf-8':case 'ascii':case 'binary':case 'base64':case 'ucs2':case 'ucs-2':case 'utf16le':case 'utf-16le':case 'raw':\n return true;\n default:\n return false;\n }\n};\n\nfunction _normalizeEncoding(enc) {\n if (!enc) return 'utf8';\n var retried;\n while (true) {\n switch (enc) {\n case 'utf8':\n case 'utf-8':\n return 'utf8';\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return 'utf16le';\n case 'latin1':\n case 'binary':\n return 'latin1';\n case 'base64':\n case 'ascii':\n case 'hex':\n return enc;\n default:\n if (retried) return; // undefined\n enc = ('' + enc).toLowerCase();\n retried = true;\n }\n }\n};\n\n// Do not cache `Buffer.isEncoding` when checking encoding names as some\n// modules monkey-patch it to support additional encodings\nfunction normalizeEncoding(enc) {\n var nenc = _normalizeEncoding(enc);\n if (typeof nenc !== 'string' && (Buffer.isEncoding === isEncoding || !isEncoding(enc))) throw new Error('Unknown encoding: ' + enc);\n return nenc || enc;\n}\n\n// StringDecoder provides an interface for efficiently splitting a series of\n// buffers into a series of JS strings without breaking apart multi-byte\n// characters.\nexports.StringDecoder = StringDecoder;\nfunction StringDecoder(encoding) {\n this.encoding = normalizeEncoding(encoding);\n var nb;\n switch (this.encoding) {\n case 'utf16le':\n this.text = utf16Text;\n this.end = utf16End;\n nb = 4;\n break;\n case 'utf8':\n this.fillLast = utf8FillLast;\n nb = 4;\n break;\n case 'base64':\n this.text = base64Text;\n this.end = base64End;\n nb = 3;\n break;\n default:\n this.write = simpleWrite;\n this.end = simpleEnd;\n return;\n }\n this.lastNeed = 0;\n this.lastTotal = 0;\n this.lastChar = Buffer.allocUnsafe(nb);\n}\n\nStringDecoder.prototype.write = function (buf) {\n if (buf.length === 0) return '';\n var r;\n var i;\n if (this.lastNeed) {\n r = this.fillLast(buf);\n if (r === undefined) return '';\n i = this.lastNeed;\n this.lastNeed = 0;\n } else {\n i = 0;\n }\n if (i < buf.length) return r ? r + this.text(buf, i) : this.text(buf, i);\n return r || '';\n};\n\nStringDecoder.prototype.end = utf8End;\n\n// Returns only complete characters in a Buffer\nStringDecoder.prototype.text = utf8Text;\n\n// Attempts to complete a partial non-UTF-8 character using bytes from a Buffer\nStringDecoder.prototype.fillLast = function (buf) {\n if (this.lastNeed <= buf.length) {\n buf.copy(this.lastChar, this.lastTotal - this.lastNeed, 0, this.lastNeed);\n return this.lastChar.toString(this.encoding, 0, this.lastTotal);\n }\n buf.copy(this.lastChar, this.lastTotal - this.lastNeed, 0, buf.length);\n this.lastNeed -= buf.length;\n};\n\n// Checks the type of a UTF-8 byte, whether it's ASCII, a leading byte, or a\n// continuation byte. If an invalid byte is detected, -2 is returned.\nfunction utf8CheckByte(byte) {\n if (byte <= 0x7F) return 0;else if (byte >> 5 === 0x06) return 2;else if (byte >> 4 === 0x0E) return 3;else if (byte >> 3 === 0x1E) return 4;\n return byte >> 6 === 0x02 ? -1 : -2;\n}\n\n// Checks at most 3 bytes at the end of a Buffer in order to detect an\n// incomplete multi-byte UTF-8 character. The total number of bytes (2, 3, or 4)\n// needed to complete the UTF-8 character (if applicable) are returned.\nfunction utf8CheckIncomplete(self, buf, i) {\n var j = buf.length - 1;\n if (j < i) return 0;\n var nb = utf8CheckByte(buf[j]);\n if (nb >= 0) {\n if (nb > 0) self.lastNeed = nb - 1;\n return nb;\n }\n if (--j < i || nb === -2) return 0;\n nb = utf8CheckByte(buf[j]);\n if (nb >= 0) {\n if (nb > 0) self.lastNeed = nb - 2;\n return nb;\n }\n if (--j < i || nb === -2) return 0;\n nb = utf8CheckByte(buf[j]);\n if (nb >= 0) {\n if (nb > 0) {\n if (nb === 2) nb = 0;else self.lastNeed = nb - 3;\n }\n return nb;\n }\n return 0;\n}\n\n// Validates as many continuation bytes for a multi-byte UTF-8 character as\n// needed or are available. If we see a non-continuation byte where we expect\n// one, we \"replace\" the validated continuation bytes we've seen so far with\n// a single UTF-8 replacement character ('\\ufffd'), to match v8's UTF-8 decoding\n// behavior. The continuation byte check is included three times in the case\n// where all of the continuation bytes for a character exist in the same buffer.\n// It is also done this way as a slight performance increase instead of using a\n// loop.\nfunction utf8CheckExtraBytes(self, buf, p) {\n if ((buf[0] & 0xC0) !== 0x80) {\n self.lastNeed = 0;\n return '\\ufffd';\n }\n if (self.lastNeed > 1 && buf.length > 1) {\n if ((buf[1] & 0xC0) !== 0x80) {\n self.lastNeed = 1;\n return '\\ufffd';\n }\n if (self.lastNeed > 2 && buf.length > 2) {\n if ((buf[2] & 0xC0) !== 0x80) {\n self.lastNeed = 2;\n return '\\ufffd';\n }\n }\n }\n}\n\n// Attempts to complete a multi-byte UTF-8 character using bytes from a Buffer.\nfunction utf8FillLast(buf) {\n var p = this.lastTotal - this.lastNeed;\n var r = utf8CheckExtraBytes(this, buf, p);\n if (r !== undefined) return r;\n if (this.lastNeed <= buf.length) {\n buf.copy(this.lastChar, p, 0, this.lastNeed);\n return this.lastChar.toString(this.encoding, 0, this.lastTotal);\n }\n buf.copy(this.lastChar, p, 0, buf.length);\n this.lastNeed -= buf.length;\n}\n\n// Returns all complete UTF-8 characters in a Buffer. If the Buffer ended on a\n// partial character, the character's bytes are buffered until the required\n// number of bytes are available.\nfunction utf8Text(buf, i) {\n var total = utf8CheckIncomplete(this, buf, i);\n if (!this.lastNeed) return buf.toString('utf8', i);\n this.lastTotal = total;\n var end = buf.length - (total - this.lastNeed);\n buf.copy(this.lastChar, 0, end);\n return buf.toString('utf8', i, end);\n}\n\n// For UTF-8, a replacement character is added when ending on a partial\n// character.\nfunction utf8End(buf) {\n var r = buf && buf.length ? this.write(buf) : '';\n if (this.lastNeed) return r + '\\ufffd';\n return r;\n}\n\n// UTF-16LE typically needs two bytes per character, but even if we have an even\n// number of bytes available, we need to check if we end on a leading/high\n// surrogate. In that case, we need to wait for the next two bytes in order to\n// decode the last character properly.\nfunction utf16Text(buf, i) {\n if ((buf.length - i) % 2 === 0) {\n var r = buf.toString('utf16le', i);\n if (r) {\n var c = r.charCodeAt(r.length - 1);\n if (c >= 0xD800 && c <= 0xDBFF) {\n this.lastNeed = 2;\n this.lastTotal = 4;\n this.lastChar[0] = buf[buf.length - 2];\n this.lastChar[1] = buf[buf.length - 1];\n return r.slice(0, -1);\n }\n }\n return r;\n }\n this.lastNeed = 1;\n this.lastTotal = 2;\n this.lastChar[0] = buf[buf.length - 1];\n return buf.toString('utf16le', i, buf.length - 1);\n}\n\n// For UTF-16LE we do not explicitly append special replacement characters if we\n// end on a partial character, we simply let v8 handle that.\nfunction utf16End(buf) {\n var r = buf && buf.length ? this.write(buf) : '';\n if (this.lastNeed) {\n var end = this.lastTotal - this.lastNeed;\n return r + this.lastChar.toString('utf16le', 0, end);\n }\n return r;\n}\n\nfunction base64Text(buf, i) {\n var n = (buf.length - i) % 3;\n if (n === 0) return buf.toString('base64', i);\n this.lastNeed = 3 - n;\n this.lastTotal = 3;\n if (n === 1) {\n this.lastChar[0] = buf[buf.length - 1];\n } else {\n this.lastChar[0] = buf[buf.length - 2];\n this.lastChar[1] = buf[buf.length - 1];\n }\n return buf.toString('base64', i, buf.length - n);\n}\n\nfunction base64End(buf) {\n var r = buf && buf.length ? this.write(buf) : '';\n if (this.lastNeed) return r + this.lastChar.toString('base64', 0, 3 - this.lastNeed);\n return r;\n}\n\n// Pass bytes on through for single-byte encodings (e.g. ascii, latin1, hex)\nfunction simpleWrite(buf) {\n return buf.toString(this.encoding);\n}\n\nfunction simpleEnd(buf) {\n return buf && buf.length ? this.write(buf) : '';\n}","/*! safe-buffer. MIT License. Feross Aboukhadijeh */\n/* eslint-disable node/no-deprecated-api */\nvar buffer = require('buffer')\nvar Buffer = buffer.Buffer\n\n// alternative to using Object.keys for old browsers\nfunction copyProps (src, dst) {\n for (var key in src) {\n dst[key] = src[key]\n }\n}\nif (Buffer.from && Buffer.alloc && Buffer.allocUnsafe && Buffer.allocUnsafeSlow) {\n module.exports = buffer\n} else {\n // Copy properties from require('buffer')\n copyProps(buffer, exports)\n exports.Buffer = SafeBuffer\n}\n\nfunction SafeBuffer (arg, encodingOrOffset, length) {\n return Buffer(arg, encodingOrOffset, length)\n}\n\nSafeBuffer.prototype = Object.create(Buffer.prototype)\n\n// Copy static methods from Buffer\ncopyProps(Buffer, SafeBuffer)\n\nSafeBuffer.from = function (arg, encodingOrOffset, length) {\n if (typeof arg === 'number') {\n throw new TypeError('Argument must not be a number')\n }\n return Buffer(arg, encodingOrOffset, length)\n}\n\nSafeBuffer.alloc = function (size, fill, encoding) {\n if (typeof size !== 'number') {\n throw new TypeError('Argument must be a number')\n }\n var buf = Buffer(size)\n if (fill !== undefined) {\n if (typeof encoding === 'string') {\n buf.fill(fill, encoding)\n } else {\n buf.fill(fill)\n }\n } else {\n buf.fill(0)\n }\n return buf\n}\n\nSafeBuffer.allocUnsafe = function (size) {\n if (typeof size !== 'number') {\n throw new TypeError('Argument must be a number')\n }\n return Buffer(size)\n}\n\nSafeBuffer.allocUnsafeSlow = function (size) {\n if (typeof size !== 'number') {\n throw new TypeError('Argument must be a number')\n }\n return buffer.SlowBuffer(size)\n}\n","\"use strict\";\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nexports.AbstractTokenizer = void 0;\r\nconst peek_readable_1 = require(\"peek-readable\");\r\n/**\r\n * Core tokenizer\r\n */\r\nclass AbstractTokenizer {\r\n constructor(fileInfo) {\r\n /**\r\n * Tokenizer-stream position\r\n */\r\n this.position = 0;\r\n this.numBuffer = new Uint8Array(8);\r\n this.fileInfo = fileInfo ? fileInfo : {};\r\n }\r\n /**\r\n * Read a token from the tokenizer-stream\r\n * @param token - The token to read\r\n * @param position - If provided, the desired position in the tokenizer-stream\r\n * @returns Promise with token data\r\n */\r\n async readToken(token, position = this.position) {\r\n const uint8Array = Buffer.alloc(token.len);\r\n const len = await this.readBuffer(uint8Array, { position });\r\n if (len < token.len)\r\n throw new peek_readable_1.EndOfStreamError();\r\n return token.get(uint8Array, 0);\r\n }\r\n /**\r\n * Peek a token from the tokenizer-stream.\r\n * @param token - Token to peek from the tokenizer-stream.\r\n * @param position - Offset where to begin reading within the file. If position is null, data will be read from the current file position.\r\n * @returns Promise with token data\r\n */\r\n async peekToken(token, position = this.position) {\r\n const uint8Array = Buffer.alloc(token.len);\r\n const len = await this.peekBuffer(uint8Array, { position });\r\n if (len < token.len)\r\n throw new peek_readable_1.EndOfStreamError();\r\n return token.get(uint8Array, 0);\r\n }\r\n /**\r\n * Read a numeric token from the stream\r\n * @param token - Numeric token\r\n * @returns Promise with number\r\n */\r\n async readNumber(token) {\r\n const len = await this.readBuffer(this.numBuffer, { length: token.len });\r\n if (len < token.len)\r\n throw new peek_readable_1.EndOfStreamError();\r\n return token.get(this.numBuffer, 0);\r\n }\r\n /**\r\n * Read a numeric token from the stream\r\n * @param token - Numeric token\r\n * @returns Promise with number\r\n */\r\n async peekNumber(token) {\r\n const len = await this.peekBuffer(this.numBuffer, { length: token.len });\r\n if (len < token.len)\r\n throw new peek_readable_1.EndOfStreamError();\r\n return token.get(this.numBuffer, 0);\r\n }\r\n /**\r\n * Ignore number of bytes, advances the pointer in under tokenizer-stream.\r\n * @param length - Number of bytes to ignore\r\n * @return resolves the number of bytes ignored, equals length if this available, otherwise the number of bytes available\r\n */\r\n async ignore(length) {\r\n if (this.fileInfo.size !== undefined) {\r\n const bytesLeft = this.fileInfo.size - this.position;\r\n if (length > bytesLeft) {\r\n this.position += bytesLeft;\r\n return bytesLeft;\r\n }\r\n }\r\n this.position += length;\r\n return length;\r\n }\r\n async close() {\r\n // empty\r\n }\r\n normalizeOptions(uint8Array, options) {\r\n if (options && options.position !== undefined && options.position < this.position) {\r\n throw new Error('`options.position` must be equal or greater than `tokenizer.position`');\r\n }\r\n if (options) {\r\n return {\r\n mayBeLess: options.mayBeLess === true,\r\n offset: options.offset ? options.offset : 0,\r\n length: options.length ? options.length : (uint8Array.length - (options.offset ? options.offset : 0)),\r\n position: options.position ? options.position : this.position\r\n };\r\n }\r\n return {\r\n mayBeLess: false,\r\n offset: 0,\r\n length: uint8Array.length,\r\n position: this.position\r\n };\r\n }\r\n}\r\nexports.AbstractTokenizer = AbstractTokenizer;\r\n","\"use strict\";\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nexports.BufferTokenizer = void 0;\r\nconst peek_readable_1 = require(\"peek-readable\");\r\nconst AbstractTokenizer_1 = require(\"./AbstractTokenizer\");\r\nclass BufferTokenizer extends AbstractTokenizer_1.AbstractTokenizer {\r\n /**\r\n * Construct BufferTokenizer\r\n * @param uint8Array - Uint8Array to tokenize\r\n * @param fileInfo - Pass additional file information to the tokenizer\r\n */\r\n constructor(uint8Array, fileInfo) {\r\n super(fileInfo);\r\n this.uint8Array = uint8Array;\r\n this.fileInfo.size = this.fileInfo.size ? this.fileInfo.size : uint8Array.length;\r\n }\r\n /**\r\n * Read buffer from tokenizer\r\n * @param uint8Array - Uint8Array to tokenize\r\n * @param options - Read behaviour options\r\n * @returns {Promise}\r\n */\r\n async readBuffer(uint8Array, options) {\r\n if (options && options.position) {\r\n if (options.position < this.position) {\r\n throw new Error('`options.position` must be equal or greater than `tokenizer.position`');\r\n }\r\n this.position = options.position;\r\n }\r\n const bytesRead = await this.peekBuffer(uint8Array, options);\r\n this.position += bytesRead;\r\n return bytesRead;\r\n }\r\n /**\r\n * Peek (read ahead) buffer from tokenizer\r\n * @param uint8Array\r\n * @param options - Read behaviour options\r\n * @returns {Promise}\r\n */\r\n async peekBuffer(uint8Array, options) {\r\n const normOptions = this.normalizeOptions(uint8Array, options);\r\n const bytes2read = Math.min(this.uint8Array.length - normOptions.position, normOptions.length);\r\n if ((!normOptions.mayBeLess) && bytes2read < normOptions.length) {\r\n throw new peek_readable_1.EndOfStreamError();\r\n }\r\n else {\r\n uint8Array.set(this.uint8Array.subarray(normOptions.position, normOptions.position + bytes2read), normOptions.offset);\r\n return bytes2read;\r\n }\r\n }\r\n async close() {\r\n // empty\r\n }\r\n}\r\nexports.BufferTokenizer = BufferTokenizer;\r\n","\"use strict\";\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nexports.ReadStreamTokenizer = void 0;\r\nconst AbstractTokenizer_1 = require(\"./AbstractTokenizer\");\r\nconst peek_readable_1 = require(\"peek-readable\");\r\nconst maxBufferSize = 256000;\r\nclass ReadStreamTokenizer extends AbstractTokenizer_1.AbstractTokenizer {\r\n constructor(stream, fileInfo) {\r\n super(fileInfo);\r\n this.streamReader = new peek_readable_1.StreamReader(stream);\r\n }\r\n /**\r\n * Get file information, an HTTP-client may implement this doing a HEAD request\r\n * @return Promise with file information\r\n */\r\n async getFileInfo() {\r\n return this.fileInfo;\r\n }\r\n /**\r\n * Read buffer from tokenizer\r\n * @param uint8Array - Target Uint8Array to fill with data read from the tokenizer-stream\r\n * @param options - Read behaviour options\r\n * @returns Promise with number of bytes read\r\n */\r\n async readBuffer(uint8Array, options) {\r\n const normOptions = this.normalizeOptions(uint8Array, options);\r\n const skipBytes = normOptions.position - this.position;\r\n if (skipBytes > 0) {\r\n await this.ignore(skipBytes);\r\n return this.readBuffer(uint8Array, options);\r\n }\r\n else if (skipBytes < 0) {\r\n throw new Error('`options.position` must be equal or greater than `tokenizer.position`');\r\n }\r\n if (normOptions.length === 0) {\r\n return 0;\r\n }\r\n const bytesRead = await this.streamReader.read(uint8Array, normOptions.offset, normOptions.length);\r\n this.position += bytesRead;\r\n if ((!options || !options.mayBeLess) && bytesRead < normOptions.length) {\r\n throw new peek_readable_1.EndOfStreamError();\r\n }\r\n return bytesRead;\r\n }\r\n /**\r\n * Peek (read ahead) buffer from tokenizer\r\n * @param uint8Array - Uint8Array (or Buffer) to write data to\r\n * @param options - Read behaviour options\r\n * @returns Promise with number of bytes peeked\r\n */\r\n async peekBuffer(uint8Array, options) {\r\n const normOptions = this.normalizeOptions(uint8Array, options);\r\n let bytesRead = 0;\r\n if (normOptions.position) {\r\n const skipBytes = normOptions.position - this.position;\r\n if (skipBytes > 0) {\r\n const skipBuffer = new Uint8Array(normOptions.length + skipBytes);\r\n bytesRead = await this.peekBuffer(skipBuffer, { mayBeLess: normOptions.mayBeLess });\r\n uint8Array.set(skipBuffer.subarray(skipBytes), normOptions.offset);\r\n return bytesRead - skipBytes;\r\n }\r\n else if (skipBytes < 0) {\r\n throw new Error('Cannot peek from a negative offset in a stream');\r\n }\r\n }\r\n if (normOptions.length > 0) {\r\n try {\r\n bytesRead = await this.streamReader.peek(uint8Array, normOptions.offset, normOptions.length);\r\n }\r\n catch (err) {\r\n if (options && options.mayBeLess && err instanceof peek_readable_1.EndOfStreamError) {\r\n return 0;\r\n }\r\n throw err;\r\n }\r\n if ((!normOptions.mayBeLess) && bytesRead < normOptions.length) {\r\n throw new peek_readable_1.EndOfStreamError();\r\n }\r\n }\r\n return bytesRead;\r\n }\r\n async ignore(length) {\r\n // debug(`ignore ${this.position}...${this.position + length - 1}`);\r\n const bufSize = Math.min(maxBufferSize, length);\r\n const buf = new Uint8Array(bufSize);\r\n let totBytesRead = 0;\r\n while (totBytesRead < length) {\r\n const remaining = length - totBytesRead;\r\n const bytesRead = await this.readBuffer(buf, { length: Math.min(bufSize, remaining) });\r\n if (bytesRead < 0) {\r\n return bytesRead;\r\n }\r\n totBytesRead += bytesRead;\r\n }\r\n return totBytesRead;\r\n }\r\n}\r\nexports.ReadStreamTokenizer = ReadStreamTokenizer;\r\n","\"use strict\";\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nexports.fromBuffer = exports.fromStream = exports.EndOfStreamError = void 0;\r\nconst ReadStreamTokenizer_1 = require(\"./ReadStreamTokenizer\");\r\nconst BufferTokenizer_1 = require(\"./BufferTokenizer\");\r\nvar peek_readable_1 = require(\"peek-readable\");\r\nObject.defineProperty(exports, \"EndOfStreamError\", { enumerable: true, get: function () { return peek_readable_1.EndOfStreamError; } });\r\n/**\r\n * Construct ReadStreamTokenizer from given Stream.\r\n * Will set fileSize, if provided given Stream has set the .path property/\r\n * @param stream - Read from Node.js Stream.Readable\r\n * @param fileInfo - Pass the file information, like size and MIME-type of the corresponding stream.\r\n * @returns ReadStreamTokenizer\r\n */\r\nfunction fromStream(stream, fileInfo) {\r\n fileInfo = fileInfo ? fileInfo : {};\r\n return new ReadStreamTokenizer_1.ReadStreamTokenizer(stream, fileInfo);\r\n}\r\nexports.fromStream = fromStream;\r\n/**\r\n * Construct ReadStreamTokenizer from given Buffer.\r\n * @param uint8Array - Uint8Array to tokenize\r\n * @param fileInfo - Pass additional file information to the tokenizer\r\n * @returns BufferTokenizer\r\n */\r\nfunction fromBuffer(uint8Array, fileInfo) {\r\n return new BufferTokenizer_1.BufferTokenizer(uint8Array, fileInfo);\r\n}\r\nexports.fromBuffer = fromBuffer;\r\n","\"use strict\";\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nexports.AnsiStringType = exports.StringType = exports.BufferType = exports.Uint8ArrayType = exports.IgnoreType = exports.Float80_LE = exports.Float80_BE = exports.Float64_LE = exports.Float64_BE = exports.Float32_LE = exports.Float32_BE = exports.Float16_LE = exports.Float16_BE = exports.INT64_BE = exports.UINT64_BE = exports.INT64_LE = exports.UINT64_LE = exports.INT32_LE = exports.INT32_BE = exports.INT24_BE = exports.INT24_LE = exports.INT16_LE = exports.INT16_BE = exports.INT8 = exports.UINT32_BE = exports.UINT32_LE = exports.UINT24_BE = exports.UINT24_LE = exports.UINT16_BE = exports.UINT16_LE = exports.UINT8 = void 0;\r\nconst ieee754 = require(\"ieee754\");\r\n// Primitive types\r\nfunction dv(array) {\r\n return new DataView(array.buffer, array.byteOffset);\r\n}\r\n/**\r\n * 8-bit unsigned integer\r\n */\r\nexports.UINT8 = {\r\n len: 1,\r\n get(array, offset) {\r\n return dv(array).getUint8(offset);\r\n },\r\n put(array, offset, value) {\r\n dv(array).setUint8(offset, value);\r\n return offset + 1;\r\n }\r\n};\r\n/**\r\n * 16-bit unsigned integer, Little Endian byte order\r\n */\r\nexports.UINT16_LE = {\r\n len: 2,\r\n get(array, offset) {\r\n return dv(array).getUint16(offset, true);\r\n },\r\n put(array, offset, value) {\r\n dv(array).setUint16(offset, value, true);\r\n return offset + 2;\r\n }\r\n};\r\n/**\r\n * 16-bit unsigned integer, Big Endian byte order\r\n */\r\nexports.UINT16_BE = {\r\n len: 2,\r\n get(array, offset) {\r\n return dv(array).getUint16(offset);\r\n },\r\n put(array, offset, value) {\r\n dv(array).setUint16(offset, value);\r\n return offset + 2;\r\n }\r\n};\r\n/**\r\n * 24-bit unsigned integer, Little Endian byte order\r\n */\r\nexports.UINT24_LE = {\r\n len: 3,\r\n get(array, offset) {\r\n const dataView = dv(array);\r\n return dataView.getUint8(offset) + (dataView.getUint16(offset + 1, true) << 8);\r\n },\r\n put(array, offset, value) {\r\n const dataView = dv(array);\r\n dataView.setUint8(offset, value & 0xff);\r\n dataView.setUint16(offset + 1, value >> 8, true);\r\n return offset + 3;\r\n }\r\n};\r\n/**\r\n * 24-bit unsigned integer, Big Endian byte order\r\n */\r\nexports.UINT24_BE = {\r\n len: 3,\r\n get(array, offset) {\r\n const dataView = dv(array);\r\n return (dataView.getUint16(offset) << 8) + dataView.getUint8(offset + 2);\r\n },\r\n put(array, offset, value) {\r\n const dataView = dv(array);\r\n dataView.setUint16(offset, value >> 8);\r\n dataView.setUint8(offset + 2, value & 0xff);\r\n return offset + 3;\r\n }\r\n};\r\n/**\r\n * 32-bit unsigned integer, Little Endian byte order\r\n */\r\nexports.UINT32_LE = {\r\n len: 4,\r\n get(array, offset) {\r\n return dv(array).getUint32(offset, true);\r\n },\r\n put(array, offset, value) {\r\n dv(array).setUint32(offset, value, true);\r\n return offset + 4;\r\n }\r\n};\r\n/**\r\n * 32-bit unsigned integer, Big Endian byte order\r\n */\r\nexports.UINT32_BE = {\r\n len: 4,\r\n get(array, offset) {\r\n return dv(array).getUint32(offset);\r\n },\r\n put(array, offset, value) {\r\n dv(array).setUint32(offset, value);\r\n return offset + 4;\r\n }\r\n};\r\n/**\r\n * 8-bit signed integer\r\n */\r\nexports.INT8 = {\r\n len: 1,\r\n get(array, offset) {\r\n return dv(array).getInt8(offset);\r\n },\r\n put(array, offset, value) {\r\n dv(array).setInt8(offset, value);\r\n return offset + 2;\r\n }\r\n};\r\n/**\r\n * 16-bit signed integer, Big Endian byte order\r\n */\r\nexports.INT16_BE = {\r\n len: 2,\r\n get(array, offset) {\r\n return dv(array).getInt16(offset);\r\n },\r\n put(array, offset, value) {\r\n dv(array).setInt16(offset, value);\r\n return offset + 2;\r\n }\r\n};\r\n/**\r\n * 16-bit signed integer, Little Endian byte order\r\n */\r\nexports.INT16_LE = {\r\n len: 2,\r\n get(array, offset) {\r\n return dv(array).getInt16(offset, true);\r\n },\r\n put(array, offset, value) {\r\n dv(array).setInt16(offset, value, true);\r\n return offset + 2;\r\n }\r\n};\r\n/**\r\n * 24-bit signed integer, Little Endian byte order\r\n */\r\nexports.INT24_LE = {\r\n len: 3,\r\n get(array, offset) {\r\n const unsigned = exports.UINT24_LE.get(array, offset);\r\n return unsigned > 0x7fffff ? unsigned - 0x1000000 : unsigned;\r\n },\r\n put(array, offset, value) {\r\n const dataView = dv(array);\r\n dataView.setUint8(offset, value & 0xff);\r\n dataView.setUint16(offset + 1, value >> 8, true);\r\n return offset + 3;\r\n }\r\n};\r\n/**\r\n * 24-bit signed integer, Big Endian byte order\r\n */\r\nexports.INT24_BE = {\r\n len: 3,\r\n get(array, offset) {\r\n const unsigned = exports.UINT24_BE.get(array, offset);\r\n return unsigned > 0x7fffff ? unsigned - 0x1000000 : unsigned;\r\n },\r\n put(array, offset, value) {\r\n const dataView = dv(array);\r\n dataView.setUint16(offset, value >> 8);\r\n dataView.setUint8(offset + 2, value & 0xff);\r\n return offset + 3;\r\n }\r\n};\r\n/**\r\n * 32-bit signed integer, Big Endian byte order\r\n */\r\nexports.INT32_BE = {\r\n len: 4,\r\n get(array, offset) {\r\n return dv(array).getInt32(offset);\r\n },\r\n put(array, offset, value) {\r\n dv(array).setInt32(offset, value);\r\n return offset + 4;\r\n }\r\n};\r\n/**\r\n * 32-bit signed integer, Big Endian byte order\r\n */\r\nexports.INT32_LE = {\r\n len: 4,\r\n get(array, offset) {\r\n return dv(array).getInt32(offset, true);\r\n },\r\n put(array, offset, value) {\r\n dv(array).setInt32(offset, value, true);\r\n return offset + 4;\r\n }\r\n};\r\n/**\r\n * 64-bit unsigned integer, Little Endian byte order\r\n */\r\nexports.UINT64_LE = {\r\n len: 8,\r\n get(array, offset) {\r\n return dv(array).getBigUint64(offset, true);\r\n },\r\n put(array, offset, value) {\r\n dv(array).setBigUint64(offset, value, true);\r\n return offset + 8;\r\n }\r\n};\r\n/**\r\n * 64-bit signed integer, Little Endian byte order\r\n */\r\nexports.INT64_LE = {\r\n len: 8,\r\n get(array, offset) {\r\n return dv(array).getBigInt64(offset, true);\r\n },\r\n put(array, offset, value) {\r\n dv(array).setBigInt64(offset, value, true);\r\n return offset + 8;\r\n }\r\n};\r\n/**\r\n * 64-bit unsigned integer, Big Endian byte order\r\n */\r\nexports.UINT64_BE = {\r\n len: 8,\r\n get(array, offset) {\r\n return dv(array).getBigUint64(offset);\r\n },\r\n put(array, offset, value) {\r\n dv(array).setBigUint64(offset, value);\r\n return offset + 8;\r\n }\r\n};\r\n/**\r\n * 64-bit signed integer, Big Endian byte order\r\n */\r\nexports.INT64_BE = {\r\n len: 8,\r\n get(array, offset) {\r\n return dv(array).getBigInt64(offset);\r\n },\r\n put(array, offset, value) {\r\n dv(array).setBigInt64(offset, value);\r\n return offset + 8;\r\n }\r\n};\r\n/**\r\n * IEEE 754 16-bit (half precision) float, big endian\r\n */\r\nexports.Float16_BE = {\r\n len: 2,\r\n get(dataView, offset) {\r\n return ieee754.read(dataView, offset, false, 10, this.len);\r\n },\r\n put(dataView, offset, value) {\r\n ieee754.write(dataView, value, offset, false, 10, this.len);\r\n return offset + this.len;\r\n }\r\n};\r\n/**\r\n * IEEE 754 16-bit (half precision) float, little endian\r\n */\r\nexports.Float16_LE = {\r\n len: 2,\r\n get(array, offset) {\r\n return ieee754.read(array, offset, true, 10, this.len);\r\n },\r\n put(array, offset, value) {\r\n ieee754.write(array, value, offset, true, 10, this.len);\r\n return offset + this.len;\r\n }\r\n};\r\n/**\r\n * IEEE 754 32-bit (single precision) float, big endian\r\n */\r\nexports.Float32_BE = {\r\n len: 4,\r\n get(array, offset) {\r\n return dv(array).getFloat32(offset);\r\n },\r\n put(array, offset, value) {\r\n dv(array).setFloat32(offset, value);\r\n return offset + 4;\r\n }\r\n};\r\n/**\r\n * IEEE 754 32-bit (single precision) float, little endian\r\n */\r\nexports.Float32_LE = {\r\n len: 4,\r\n get(array, offset) {\r\n return dv(array).getFloat32(offset, true);\r\n },\r\n put(array, offset, value) {\r\n dv(array).setFloat32(offset, value, true);\r\n return offset + 4;\r\n }\r\n};\r\n/**\r\n * IEEE 754 64-bit (double precision) float, big endian\r\n */\r\nexports.Float64_BE = {\r\n len: 8,\r\n get(array, offset) {\r\n return dv(array).getFloat64(offset);\r\n },\r\n put(array, offset, value) {\r\n dv(array).setFloat64(offset, value);\r\n return offset + 8;\r\n }\r\n};\r\n/**\r\n * IEEE 754 64-bit (double precision) float, little endian\r\n */\r\nexports.Float64_LE = {\r\n len: 8,\r\n get(array, offset) {\r\n return dv(array).getFloat64(offset, true);\r\n },\r\n put(array, offset, value) {\r\n dv(array).setFloat64(offset, value, true);\r\n return offset + 8;\r\n }\r\n};\r\n/**\r\n * IEEE 754 80-bit (extended precision) float, big endian\r\n */\r\nexports.Float80_BE = {\r\n len: 10,\r\n get(array, offset) {\r\n return ieee754.read(array, offset, false, 63, this.len);\r\n },\r\n put(array, offset, value) {\r\n ieee754.write(array, value, offset, false, 63, this.len);\r\n return offset + this.len;\r\n }\r\n};\r\n/**\r\n * IEEE 754 80-bit (extended precision) float, little endian\r\n */\r\nexports.Float80_LE = {\r\n len: 10,\r\n get(array, offset) {\r\n return ieee754.read(array, offset, true, 63, this.len);\r\n },\r\n put(array, offset, value) {\r\n ieee754.write(array, value, offset, true, 63, this.len);\r\n return offset + this.len;\r\n }\r\n};\r\n/**\r\n * Ignore a given number of bytes\r\n */\r\nclass IgnoreType {\r\n /**\r\n * @param len number of bytes to ignore\r\n */\r\n constructor(len) {\r\n this.len = len;\r\n }\r\n // ToDo: don't read, but skip data\r\n get(array, off) {\r\n }\r\n}\r\nexports.IgnoreType = IgnoreType;\r\nclass Uint8ArrayType {\r\n constructor(len) {\r\n this.len = len;\r\n }\r\n get(array, offset) {\r\n return array.subarray(offset, offset + this.len);\r\n }\r\n}\r\nexports.Uint8ArrayType = Uint8ArrayType;\r\nclass BufferType {\r\n constructor(len) {\r\n this.len = len;\r\n }\r\n get(uint8Array, off) {\r\n return Buffer.from(uint8Array.subarray(off, off + this.len));\r\n }\r\n}\r\nexports.BufferType = BufferType;\r\n/**\r\n * Consume a fixed number of bytes from the stream and return a string with a specified encoding.\r\n */\r\nclass StringType {\r\n constructor(len, encoding) {\r\n this.len = len;\r\n this.encoding = encoding;\r\n }\r\n get(uint8Array, offset) {\r\n return Buffer.from(uint8Array).toString(this.encoding, offset, offset + this.len);\r\n }\r\n}\r\nexports.StringType = StringType;\r\n/**\r\n * ANSI Latin 1 String\r\n * Using windows-1252 / ISO 8859-1 decoding\r\n */\r\nclass AnsiStringType {\r\n constructor(len) {\r\n this.len = len;\r\n }\r\n static decode(buffer, offset, until) {\r\n let str = '';\r\n for (let i = offset; i < until; ++i) {\r\n str += AnsiStringType.codePointToString(AnsiStringType.singleByteDecoder(buffer[i]));\r\n }\r\n return str;\r\n }\r\n static inRange(a, min, max) {\r\n return min <= a && a <= max;\r\n }\r\n static codePointToString(cp) {\r\n if (cp <= 0xFFFF) {\r\n return String.fromCharCode(cp);\r\n }\r\n else {\r\n cp -= 0x10000;\r\n return String.fromCharCode((cp >> 10) + 0xD800, (cp & 0x3FF) + 0xDC00);\r\n }\r\n }\r\n static singleByteDecoder(bite) {\r\n if (AnsiStringType.inRange(bite, 0x00, 0x7F)) {\r\n return bite;\r\n }\r\n const codePoint = AnsiStringType.windows1252[bite - 0x80];\r\n if (codePoint === null) {\r\n throw Error('invaliding encoding');\r\n }\r\n return codePoint;\r\n }\r\n get(buffer, offset = 0) {\r\n return AnsiStringType.decode(buffer, offset, offset + this.len);\r\n }\r\n}\r\nexports.AnsiStringType = AnsiStringType;\r\nAnsiStringType.windows1252 = [8364, 129, 8218, 402, 8222, 8230, 8224, 8225, 710, 8240, 352,\r\n 8249, 338, 141, 381, 143, 144, 8216, 8217, 8220, 8221, 8226, 8211, 8212, 732,\r\n 8482, 353, 8250, 339, 157, 382, 376, 160, 161, 162, 163, 164, 165, 166, 167, 168,\r\n 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184,\r\n 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200,\r\n 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216,\r\n 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232,\r\n 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247,\r\n 248, 249, 250, 251, 252, 253, 254, 255];\r\n","\n/**\n * Module exports.\n */\n\nmodule.exports = deprecate;\n\n/**\n * Mark that a method should not be used.\n * Returns a modified function which warns once by default.\n *\n * If `localStorage.noDeprecation = true` is set, then it is a no-op.\n *\n * If `localStorage.throwDeprecation = true` is set, then deprecated functions\n * will throw an Error when invoked.\n *\n * If `localStorage.traceDeprecation = true` is set, then deprecated functions\n * will invoke `console.trace()` instead of `console.error()`.\n *\n * @param {Function} fn - the function to deprecate\n * @param {String} msg - the string to print to the console when `fn` is invoked\n * @returns {Function} a new \"deprecated\" version of `fn`\n * @api public\n */\n\nfunction deprecate (fn, msg) {\n if (config('noDeprecation')) {\n return fn;\n }\n\n var warned = false;\n function deprecated() {\n if (!warned) {\n if (config('throwDeprecation')) {\n throw new Error(msg);\n } else if (config('traceDeprecation')) {\n console.trace(msg);\n } else {\n console.warn(msg);\n }\n warned = true;\n }\n return fn.apply(this, arguments);\n }\n\n return deprecated;\n}\n\n/**\n * Checks `localStorage` for boolean values for the given `name`.\n *\n * @param {String} name\n * @returns {Boolean}\n * @api private\n */\n\nfunction config (name) {\n // accessing global.localStorage can trigger a DOMException in sandboxed iframes\n try {\n if (!global.localStorage) return false;\n } catch (_) {\n return false;\n }\n var val = global.localStorage[name];\n if (null == val) return false;\n return String(val).toLowerCase() === 'true';\n}\n"],"names":["PARAM_REGEXP","TEXT_REGEXP","TOKEN_REGEXP","QESC_REGEXP","QUOTE_REGEXP","TYPE_REGEXP","qstring","val","str","String","test","length","TypeError","replace","ContentType","type","this","parameters","Object","create","exports","format","obj","string","param","params","keys","sort","i","parse","header","getHeader","headers","getcontenttype","index","indexOf","substr","trim","toLowerCase","key","match","value","lastIndex","exec","formatArgs","args","useColors","namespace","module","humanize","diff","c","color","splice","lastC","save","namespaces","storage","setItem","removeItem","error","load","r","getItem","process","env","DEBUG","window","__nwjs","navigator","userAgent","document","documentElement","style","WebkitAppearance","console","firebug","exception","table","parseInt","RegExp","$1","localStorage","localstorage","destroy","warned","warn","colors","log","debug","formatters","j","v","JSON","stringify","message","createDebug","prevTime","namespacesCache","enabledCache","enableOverride","enabled","self","curr","Number","Date","ms","prev","coerce","unshift","formatter","call","apply","selectColor","extend","defineProperty","enumerable","configurable","get","set","init","delimiter","newDebug","toNamespace","regexp","toString","substring","default","Error","stack","disable","names","map","skips","join","enable","split","len","push","name","forEach","hash","charCodeAt","Math","abs","ReflectOwnKeys","R","Reflect","ReflectApply","target","receiver","Function","prototype","ownKeys","getOwnPropertySymbols","getOwnPropertyNames","concat","NumberIsNaN","isNaN","EventEmitter","once","emitter","Promise","resolve","reject","errorListener","err","removeListener","resolver","slice","arguments","eventTargetAgnosticAddListener","handler","flags","on","addErrorHandlerIfEventEmitter","_events","undefined","_eventsCount","_maxListeners","defaultMaxListeners","checkListener","listener","_getMaxListeners","that","_addListener","prepend","m","events","existing","warning","newListener","emit","w","count","onceWrapper","fired","wrapFn","_onceWrap","state","wrapped","bind","_listeners","unwrap","evlistener","arr","ret","Array","unwrapListeners","arrayClone","listenerCount","n","copy","addEventListener","wrapListener","arg","removeEventListener","RangeError","getPrototypeOf","setMaxListeners","getMaxListeners","doError","er","context","listeners","addListener","prependListener","prependOnceListener","list","position","originalListener","shift","pop","spliceOne","off","removeAllListeners","rawListeners","eventNames","Token","strtok3","supported","minimumBytes","async","fromStream","stream","tokenizer","fromTokenizer","close","fromBuffer","input","Uint8Array","ArrayBuffer","Buffer","isBuffer","buffer","from","_check","options","offset","entries","mask","_fromTokenizer","EndOfStreamError","alloc","check","checkString","stringToBytes","fileInfo","size","MAX_SAFE_INTEGER","peekBuffer","mayBeLess","ext","mime","ignore","id3HeaderLen","readToken","uint32SyncSafeToken","readBuffer","zipHeader","compressedSize","readUInt32LE","uncompressedSize","filenameLength","readUInt16LE","extraFieldLength","filename","StringType","endsWith","startsWith","nextHeaderIndex","brandMajor","maxBufferSize","min","includes","readField","msb","peekNumber","UINT8","ic","id","readElement","lenField","nrLen","readUIntBE","readChildren","level","children","e","re","readChunkHeader","INT32_BE","chunk","readHeader","guid","UINT64_LE","payload","typeId","jsonSize","files","_","tarHeaderChecksumMatches","readableStream","eval","pass","PassThrough","outputStream","pipeline","pipe","read","fileType","Set","extensions","mimeTypes","character","readSum","sum","ctor","superCtor","super_","constructor","writable","TempCtor","s","h","d","plural","msAbs","isPlural","round","parseFloat","isFinite","long","fmtShort","fetchFromUrl","parseBlob","parseReadableStream","parseNodeStream","selectCover","ratingToStars","orderTags","parseFromTokenizer","parseBuffer","initDebug","mm","readable_web_to_node_stream_1","core_1","ns","ReadableWebToNodeStream","res","mimeType","blob","File","path","fileReader","FileReader","ReadableStream","start","controller","onloadend","event","data","result","enqueue","onerror","onabort","readAsArrayBuffer","convertBlobToReadableStream","parseStream","audioTrackUrl","response","fetch","ok","body","locked","cancel","status","statusText","ParserFactory","parseHttpContentType","FileType","MimeType","debug_1","MetadataCollector_1","AiffParser_1","APEv2Parser_1","AsfParser_1","FlacParser_1","MP4Parser_1","MpegParser_1","musepack_1","OggParser_1","WaveParser_1","WavPackParser_1","DsfParser_1","DsdiffParser_1","MatroskaParser_1","contentType","subtype","suffix","static","opts","url","parserId","getParserIdForMimeType","getParserIdForExtension","buf","guessedType","parser","loadParser","metadata","MetadataCollector","toCommonMetadata","filePath","getExtension","toLocaleLowerCase","moduleName","AIFFParser","MpegParser","APEv2Parser","AsfParser","DsfParser","DsdiffParser","FlacParser","MP4Parser","OggParser","WaveParser","WavPackParser","MatroskaParser","fname","lastIndexOf","httpContentType","subType","ID3v2Parser_1","FourCC_1","BasicParser_1","AiffToken","iff","BasicParser","Header","chunkID","FourCcToken","setFormat","isCompressed","chunkHeader","nextChunk","chunkSize","bytesRead","readData","common","Common","sampleSize","sampleRate","numChannels","numSampleFrames","compressionName","id3_data","Uint8ArrayType","rst","ID3v2Parser","duration","isAifc","minimumChunkSize","readUInt16BE","baseSampleRate","readUInt32BE","compressionType","strLen","readInt8","token_types_1","util","APEv2Token_1","tagFormat","preamble","super","ape","apeParser","tryParseApeHeader","ah","totalFrames","blocksPerFrame","finalFrameBlocks","reader","apeBuf","TagFooter","randomRead","tagFooter","ID","footer","parseTags","peekToken","remaining","parseTagFooter","descriptor","DescriptorParser","lenExp","descriptorBytes","parseDescriptorExpansion","parseHeader","forwardBytes","keyBuffer","bytesRemaining","fields","TagItemHeader","addWarning","tagItemHeader","zero","findZero","dataType","DataType","text_utf8","values","addTag","binary","skipCovers","picData","description","external_info","reserved","bitsPerSample","channel","calculateDuration","seekTableBytes","headerDataBytes","apeFrameDataBytes","terminatingDataBytes","APEv2TagMapper","CaseInsensitiveTagMap_1","apev2TagMap","Title","Artist","Artists","Album","Year","Originalyear","Originaldate","Comment","Track","Disc","DISCNUMBER","Genre","Composer","Lyrics","ALBUMSORT","TITLESORT","WORK","ARTISTSORT","ALBUMARTISTSORT","COMPOSERSORT","Lyricist","Writer","Conductor","MixArtist","Arranger","Engineer","Producer","DJMixer","Mixer","Label","Grouping","Subtitle","DiscSubtitle","Compilation","BPM","Mood","Media","CatalogNumber","MUSICBRAINZ_ALBUMSTATUS","MUSICBRAINZ_ALBUMTYPE","RELEASECOUNTRY","Script","Language","Copyright","LICENSE","EncodedBy","EncoderSettings","Barcode","ISRC","ASIN","musicbrainz_trackid","musicbrainz_releasetrackid","MUSICBRAINZ_ALBUMID","MUSICBRAINZ_ARTISTID","MUSICBRAINZ_ALBUMARTISTID","MUSICBRAINZ_RELEASEGROUPID","MUSICBRAINZ_WORKID","MUSICBRAINZ_TRMID","MUSICBRAINZ_DISCID","Acoustid_Id","ACOUSTID_FINGERPRINT","MUSICIP_PUID","Weblink","REPLAYGAIN_TRACK_GAIN","REPLAYGAIN_TRACK_PEAK","MP3GAIN_MINMAX","MP3GAIN_UNDO","CaseInsensitiveTagMap","isBitSet","parseTagFlags","TagField","containsHeader","containsFooter","isHeader","readOnly","num","bit","version","UINT32_LE","headerBytes","apeFrameDataBytesHigh","fileMD5","compressionLevel","UINT16_LE","formatFlags","WmPictureToken","MetadataLibraryObjectState","MetadataObjectState","ExtendedStreamPropertiesObjectState","ExtendedContentDescriptionObjectState","ContentDescriptionObjectState","readCodecEntries","HeaderExtensionObject","StreamPropertiesObject","FilePropertiesObject","IgnoreObjectState","State","HeaderObjectToken","TopLevelHeaderObjectToken","GUID_1","AsfUtil_1","ID3v2Token_1","objectId","fromBin","BufferType","objectSize","numberOfHeaderObjects","postProcessTag","tags","valueType","parseAttr","AsfUtil","getParserForAttr","fileId","fileSize","creationDate","dataPacketsCount","playDuration","sendDuration","preroll","broadcast","getBit","seekable","minimumDataPacketSize","maximumDataPacketSize","maximumBitrate","streamType","decodeMediaType","errorCorrectionType","reserved1","reserved2","extensionDataSize","CodecListObjectHeader","entryCount","readString","readNumber","readInformation","readCodecEntry","videoCodec","audioCodec","codecName","information","codecHeader","pos","contentDescTags","tagName","end","parseUnicodeAttr","ContentDescriptionObject","attrCount","nameLen","valueLen","ExtendedContentDescriptionObject","startTime","endTime","dataBitrate","readInt32LE","bufferSize","initialBufferFullness","alternateDataBitrate","alternateBufferSize","alternateInitialBufferFullness","maximumObjectSize","reliableFlag","seekableFlag","resendLiveCleanpointsFlag","streamNumber","readInt16LE","streamLanguageId","averageTimePerFrame","streamNameCount","payloadExtensionSystems","streamNames","streamPropertiesObject","ExtendedStreamPropertiesObject","uint8Array","descriptionRecordsCount","dataLen","MetadataObject","MetadataLibraryObject","base64str","readUInt8","AttachedPictureType","type_1","AsfObject","equals","HeaderObject","parseObjectHeader","numberOfObjectHeaders","fpo","BigInt","spo","extHeader","parseExtensionObject","addTags","CodecListObject","codecs","codec","addStreamInfo","TrackType","video","audio","audioCodecs","filter","StreamBitratePropertiesObject","PaddingObject","tag","extensionSize","moTags","mlTags","CompatibilityObject","ASF_Index_Placeholder_Object","AsfTagMapper","GenericTagMapper_1","asfTagMap","Author","Description","CommonTagMapper","rating","postMap","toRating","attributeParsers","stripNulls","decodeString","parseWordAttr","parseByteArrayAttr","parseBoolAttr","parseDWordAttr","parseQWordAttr","GUID","bin","decode","toUpperCase","mediaType","AudioMedia","VideoMedia","CommandMedia","Degradable_JPEG_Media","FileTransferMedia","BinaryMedia","writeUInt32LE","writeUInt16LE","toBin","encode","DataObject","SimpleIndexObject","IndexObject","MediaObjectIndexObject","TimecodeIndexObject","ScriptCommandObject","MarkerObject","BitrateMutualExclusionObject","ErrorCorrectionObject","ContentBrandingObject","ContentEncryptionObject","ExtendedContentEncryptionObject","DigitalSignatureObject","AdvancedMutualExclusionObject","GroupMutualExclusionObject","StreamPrioritizationObject","BandwidthSharingObject","LanguageListObject","IndexParametersObject","MediaObjectIndexParametersObject","TimecodeIndexParametersObject","AdvancedContentEncryptionObject","JFIF_Media","tagTypes","tagMap","upperCaseMap","getCommonName","CombinedTagMapper","ID3v1TagMap_1","ID3v24TagMapper_1","AsfTagMapper_1","ID3v22TagMapper_1","APEv2TagMapper_1","MP4TagMapper_1","VorbisTagMapper_1","RiffInfoTagMap_1","MatroskaTagMapper_1","tagMappers","ID3v1TagMapper","ID3v22TagMapper","ID3v24TagMapper","MP4TagMapper","VorbisTagMapper","RiffInfoTagMapper","MatroskaTagMapper","mapper","registerTagMapper","mapTag","tagType","warnings","mapGenericTag","genericTagMapper","validFourCC","a2hex","put","cleaned","origVal","no","of","maxRatingScore","isUnique","isSingleton","commonTags","year","multiple","track","disk","title","artist","artists","unique","albumartist","album","date","originaldate","originalyear","comment","genre","picture","composer","lyrics","albumsort","titlesort","work","artistsort","albumartistsort","composersort","lyricist","writer","conductor","remixer","arranger","engineer","producer","technician","djmixer","mixer","label","grouping","subtitle","discsubtitle","totaltracks","totaldiscs","compilation","bpm","mood","media","catalognumber","tvShow","tvShowSort","tvSeason","tvEpisode","tvEpisodeId","tvNetwork","podcast","podcasturl","releasestatus","releasetype","releasecountry","script","language","copyright","license","encodedby","encodersettings","gapless","barcode","isrc","asin","musicbrainz_recordingid","musicbrainz_albumid","musicbrainz_artistid","musicbrainz_albumartistid","musicbrainz_releasegroupid","musicbrainz_workid","musicbrainz_trmid","musicbrainz_discid","acoustid_id","acoustid_fingerprint","musicip_puid","musicip_fingerprint","website","averageLevel","peakLevel","notes","originalalbum","originalartist","discogs_artist_id","discogs_release_id","discogs_label_id","discogs_master_release_id","discogs_votes","discogs_rating","replaygain_track_peak","replaygain_track_gain","replaygain_album_peak","replaygain_album_gain","replaygain_track_minmax","replaygain_album_minmax","replaygain_undo","longDescription","category","hdVideo","keywords","movement","movementIndex","movementTotal","podcastId","showMovement","stik","alias","hasOwnProperty","joinArtists","GenericTagTypes_1","CombinedTagMapper_1","Util_1","TagPriority","trackInfo","native","quality","commonOrigin","originPriority","tagMapper","priority","artificial","id3v1","hasAny","streamInfo","observer","tagId","toCommon","setGenericTag","artistTag","postFixPicture","then","toIntOrNull","normalizeTrack","toRatio","minMix","leftChannel","rightChannel","genericTag","prio0","prio1","RandomUint8ArrayReader","subarray","getBitAllignedNumber","source","byteOffset","bitOffset","bitOff","bitsRead","bitsLeft","ratioToDb","ratio","log10","dbToRatio","dB","pow","trimRightNull","encoding","x","pos0","l","a","swapBytes","hex","ps","p","scanAppendingHeaders","ParserFactory_1","RandomUint8ArrayReader_1","ID3v1Parser_1","Lyrics3_1","parseOnContentType","randomReader","apeOffset","hasID3v1Header","getLyricsHeaderLength","apeHeader","findApeFooterOffset","bufferReader","nativeTags","pictures","reduce","acc","cur","DsdiffToken_1","ChunkHeader64","readFmt8Chunks","remainingSize","p0","handleSoundPropertyChunks","numberOfChannels","numberOfSamples","sndPropHeader","UINT32_BE","UINT16_BE","handleChannelChunks","compressionIdCode","hours","minutes","seconds","samples","lsConfig","lossless","bitrate","channels","channelId","INT64_BE","FormatChunk","ChannelType","DsdChunk","ChunkHeader","INT64_LE","metadataPointer","formatVersion","INT32_LE","formatID","channelType","channelNum","samplingFrequency","sampleCount","blockSizePerChannel","AbstractID3Parser_1","DsfChunk_1","AbstractID3Parser","dsdChunk","parseChunks","formatChunk","Vorbis_1","VorbisParser_1","VorbisDecoder_1","BlockType","padding","vorbisParser","VorbisParser","blockHeader","Metadata","BlockHeader","parseDataBlock","lastBlock","dataSize","STREAMINFO","parseBlockStreamInfo","PADDING","APPLICATION","SEEKTABLE","VORBIS_COMMENT","parseComment","CUESHEET","PICTURE","parsePicture","BlockStreamInfo","totalSamples","decoder","VorbisDecoder","readStringUtf8","commentListLength","readInt32","parseUserComment","VorbisPictureToken","UINT24_BE","minimumBlockSize","maximumBlockSize","minimumFrameSize","maximumFrameSize","ID3v1Parser","Genres","Iid3v1Token","Id3v1StringType","zeroByte","genreIndex","getGenre","id3v1TagMap","id3parser","ID3v2Header","fileIdentifier","parseID3v2","finalize","tryReadId3v2Headers","postId3v2Parse","skipPostHeaders","id3v1parser","FrameParser","parseGenre","defaultEnc","genres","code","word","parseGenreCode","major","warningCollector","includeCovers","bom","TextEncodingToken","output","nullTerminatorLength","getNullTerminatorLength","fzero","out","text","splitValue","functionList","isArray","readIdentifierAndData","pic","fixPictureMimeType","txt","owner_identifier","identifier","email","counter","pictureType","trimArray","enc","id3v22TagMap","TT2","TP1","TP2","TAL","TYE","COM","TRK","TPA","TCO","PIC","TCM","TOR","TOT","TXT","TP3","TPB","TT1","TT3","TLA","TCR","WCP","TEN","TSS","WAR","PCS","TCP","TDR","TS2","TSA","TSC","TSP","TST","WFD","TBP","id3v24TagMap","TIT2","TPE1","TPE2","TALB","TDRV","TORY","TPOS","TCON","APIC","TCOM","TSOA","TSOT","TOAL","TSOP","TSO2","TSOC","TEXT","TPE3","TPE4","TPUB","TIT1","TIT3","TRCK","TCMP","POPM","TBPM","TMED","TLAN","TCOP","WCOP","TENC","TSSE","TSRC","WOAR","TDRC","TYER","TDOR","TMOO","SYLT","TSST","TKEY","COMM","TOPE","MVNM","MVIN","PCST","TCAT","TDES","TDRL","TGID","TKWD","WFED","popm","FrameParser_1","readI","writeI","majorVer","b","tag_alter_preservation","file_alter_preservation","read_only","grouping_identity","compression","encryption","unsynchronisation","data_length_indicator","frameHeader","frameParser","removeUnsyncBytes","id3Header","headerType","isExtendedHeader","parseExtendedHeader","parseId3Data","extendedHeader","ExtendedHeader","dataRemaining","parseExtendedHeaderData","extendedHeaderSize","parseMetadata","makeDescriptionTagName","frameHeaderLength","getFrameHeaderLength","frameHeaderBytes","readFrameHeader","frameDataBytes","readFrameData","UINT32SYNCSAFE","readFrameFlags","INT8","revision","expIndicator","extendedFlags","sizeOfPadding","crcDataPresent","endTag2","elements","types_1","container","uint","uid","float","bool","matroskaDtd","parserMap","Map","ebmlMaxIDLength","ebmlMaxSizeLength","readUint","readFlag","readFloat","matroska","parseContainer","ebml","docType","segment","info","timecodeScale","audioTracks","tracks","entry","codecID","codecSettings","flagDefault","flagLacing","flagEnabled","trackType","audioTrack","valueOf","trackNumber","targetType","targetTypeValue","TargetType","simpleTags","simpleTag","attachments","attachedFiles","file","posDone","tree","element","maxLength","oc","readVintData","isMaxValue","vintData","Float32_BE","Float64_BE","ebmlTagMap","Atom","AtomToken","extended","parent","atomPath","dataHandler","ExtendedSize","atomBean","payloadLength","getPayloadLength","getHeaderLength","readAtom","readAtoms","ChapterText","StcoAtom","StszAtom","StscAtom","SampleToChunkToken","SttsAtom","TimeToSampleToken","SoundSampleDescriptionV0","SoundSampleDescriptionVersion","StsdAtom","TrackHeaderAtom","NameAtom","DataAtom","MvhdAtom","MdhdAtom","FixedLengthAtom","mhdr","tkhd","ftyp","hdr","UINT64_BE","nextItemID","expLen","atomId","SecondsSinceMacEpoch","secondsSinceUnixEpoch","creationTime","modificationTime","timeScale","preferredRate","preferredVolume","previewTime","previewDuration","posterTime","selectionTime","selectionDuration","currentTime","nextTrackID","locale","trackId","layer","alternateGroup","volume","SampleDescriptionTable","dataFormat","dataReferenceIndex","numberOfEntries","stsdHeader","INT16_BE","vendor","numAudioChannels","compressionId","packetSize","SimpleTableAtom","token","nrOfEntries","INT24_BE","readTokenTable","remainingLen","firstChunk","samplesPerChunk","sampleDescriptionId","titleLen","Atom_1","encoderDict","raw","lossy","MAC3","MAC6","ima4","ulaw","alaw","Qclp","alac","mp4a","mp4s","c608","c708","distinct","atomParsers","mvhd","mdhd","mdhd_data","td","getTrackDescription","chap","trackIds","chapterList","mdat","audioLengthInBytes","calculateBitRate","includeChapters","trackWithChapters","chapterTrackIds","chapterTracks","parseChapterTrack","types","ftype","stsd","soundSampleDescription","dfEntry","parseSoundSampleDescription","stsc","sampleToChunkTable","stts","timeToSampleTable","stsz","sampleSizeTable","stco","chunkOffsetTable","array","signed","integerType","remainingFileSize","errMsg","rootAtom","atom","handleAtom","formatList","trackFormats","ssd","encoderInfo","bitDepth","parseMetadataItemData","metaAtom","tagKey","child","payLoadLength","parseValueAtom","mean","dataAtom","genreInt","genreStr","read_BE_Integer","readInt16BE","readInt32BE","sampleDescription","chapterTrack","chapters","nextChunkLen","chapter","sampleOffset","findSampleOffset","chapterOffset","totalDuration","chunkIndex","getChunkDuration","chunkId","ttsi","ttsc","ttsd","curChunkId","getSamplesPerChunk","nrOfSamples","stcTable","mp4TagMap","aART","trkn","covr","soal","sonm","soar","soaa","soco","cpil","tmpo","tvsh","tvsn","tves","sosn","tven","tvnn","pcst","purl","cprt","pgap","gnre","desc","ldes","catg","egid","hdvd","keyw","shwm","ExtendedLameHeader","ReplayGainDataFormat_1","track_peak","vbr_method","lowpass_filter","track_gain","ReplayGain","album_gain","music_length","music_crc","header_crc","XingTag_1","MPEG4","AudioObjectTypes","SamplingFrequencies","MPEG4_ChannelConfigurations","MpegFrameHeader","versionIndex","LayerDescription","parseAdtsHeader","parseMpegHeader","isProtectedByCRC","calcDuration","numFrames","calcSamplesPerFrame","samplingRate","samplesInFrameTable","calculateSideInfoLength","channelModeIndex","calcSlotSize","bitrateIndex","sampRateFreqIndex","privateBit","modeExtension","isCopyrighted","isOriginalMedia","emphasis","VersionID","channelMode","ChannelMode","bitrateInKbps","calcBitrate","calcSamplingRate","profileIndex","codecProfile","samplingFrequencyIndex","channelIndex","mp4ChannelConfig","frameLength","codecIndex","floor","bitrate_index","sampling_rate_freq_index","SyncByte1","SyncByte2","frameCount","syncFrameCount","countSkipFrameData","totalDataLength","bitrates","calculateEofDuration","buf_frame_header","syncPeek","quit","sync","parseCommonMpegHeader","samplesPerFrame","hasID3v1","mpegSize","mpegOffset","frame_size","gotFirstSync","bo","parseAdts","parseAudioFrameHeader","slot_size","samples_per_frame","fsize","audioFrameHeader","skipSideInformation","areAllSame","parseCrc","framesPerSec","crc","sideinfo_length","readXtraInfoHeader","headerTag","InfoTagHeaderTag","readXingInfoHeader","vbrScale","LameEncoderVersion","skipFrameData","frameDataLeft","infoTag","readXingHeader","lame","adjustment","streamSize","first","every","NameCode","ReplayGainOriginator","gain_type","sign","gain_adj","origin","XingHeaderFlags","ExtendedLameHeader_1","frames","bytes","toc","xingInfoTag","MpcSv8Parser_1","MpcSv7Parser_1","MusepackParser","mpcParser","MpcSv7Parser","MpcSv8Parser","BitReader","dword","bits","remainder","numOfWords","BitReader_1","SV7","audioLength","signature","streamMajorVersion","streamMinorVersion","sampleFrequency","lastFrameLength","bitreader","midSideStereo","intensityStereo","toFixed","skipAudioData","maxLevel","link","profile","maxBand","titlePeak","titleGain","albumPeak","albumGain","trueGapless","SV8","parsePacket","sv8reader","StreamReader","readPacketHeader","sh","readStreamHeader","channelCount","PacketKey","SH_part1","streamVersion","SH_part3","maxUsedBands","msUsed","audioBlockFrames","readVariableSizeField","streamHeader","part1","assign","bs","beginningOfSilence","part3","hb","SegmentTable","OpusParser_1","SpeexParser_1","TheoraParser_1","page_segments","totalPageSize","capturePattern","pageNumber","pageSequenceNo","segmentTable","pageData","firstPage","lastPage","continued","pageConsumer","OpusParser","SpeexParser","TheoraParser","parsePage","flush","absoluteGranulePosition","streamSerialNumber","pageChecksum","IdHeader","magicSignature","preSkip","inputSampleRate","outputGain","channelMapping","Opus","lastPos","parseFirstPage","idHeader","parseFullPage","parseUserCommentList","pos_48bit","speex","version_id","header_size","rate","mode","mode_bitstream_version","nb_channels","vbr","frames_per_packet","extra_headers","Speex","speexHeader","IdentificationHeader","vmaj","vmin","vrev","vmbw","vmbh","nombr","nqual","Theora_1","CommonHeader","mimeLen","descLen","width","height","colour_depth","indexed_color","picDataLen","packetType","vorbis","dataView","DataView","getUint32","getUint8","bitrateMax","bitrateNominal","bitrateMin","offset0","idx","pageSegments","fullPage","fromBase64","commonHeader","byteLength","userCommentListLength","vorbisTagMap","TITLE","ARTIST","ARTISTS","ALBUMARTIST","ALBUM","DATE","ORIGINALDATE","ORIGINALYEAR","COMMENT","TRACKNUMBER","GENRE","METADATA_BLOCK_PICTURE","COMPOSER","LYRICS","LYRICIST","WRITER","CONDUCTOR","REMIXER","ARRANGER","ENGINEER","PRODUCER","DJMIXER","MIXER","LABEL","GROUPING","SUBTITLE","DISCSUBTITLE","TRACKTOTAL","DISCTOTAL","COMPILATION","RATING","KEY","MOOD","MEDIA","CATALOGNUMBER","RELEASESTATUS","RELEASETYPE","SCRIPT","LANGUAGE","COPYRIGHT","ENCODEDBY","ENCODERSETTINGS","BARCODE","MUSICBRAINZ_TRACKID","MUSICBRAINZ_RELEASETRACKID","ACOUSTID_ID","ACOUSTID_ID_FINGERPRINT","WEBSITE","NOTES","TOTALTRACKS","TOTALDISCS","DISCOGS_ARTIST_ID","DISCOGS_ARTISTS","DISCOGS_ARTIST_NAME","DISCOGS_ALBUM_ARTISTS","DISCOGS_CATALOG","DISCOGS_COUNTRY","DISCOGS_DATE","DISCOGS_LABEL","DISCOGS_LABEL_ID","DISCOGS_MASTER_RELEASE_ID","DISCOGS_RATING","DISCOGS_RELEASED","DISCOGS_RELEASE_ID","DISCOGS_VOTES","CATALOGID","STYLE","REPLAYGAIN_ALBUM_GAIN","REPLAYGAIN_ALBUM_PEAK","REPLAYGAIN_MINMAX","REPLAYGAIN_ALBUM_MINMAX","REPLAYGAIN_UNDO","ListInfoTagValue","tagHeader","riffInfoTagMap","IART","ICRD","INAM","TITL","IPRD","ITRK","ICMT","ICNT","GNRE","IWRI","RATE","YEAR","ISFT","CODE","TURL","IGNR","IENG","ITCH","IMED","IRPD","BroadcastAudioExtensionChunk","uint8array","originator","originatorReference","originationDate","originationTime","timeReferenceLow","timeReferenceHigh","umid","loudnessValue","maxTruePeakLevel","maxMomentaryLoudness","maxShortTermLoudness","WaveFormat","FactChunk","Format","wFormatTag","nChannels","nSamplesPerSec","nAvgBytesPerSec","nBlockAlign","wBitsPerSample","dwSampleLength","riff","WaveChunk","BwfChunk_1","riffHeader","parseRiffChunk","catch","readWaveChunk","parseListTag","fact","fmt","subFormat","blockAlign","calcRemaining","bext","listHeader","listType","parseRiffInfoTags","valueToken","WavPackToken_1","audioDataSize","parseWavPackBlocks","WavPack","BlockHeaderToken","BlockID","blockIndex","isHybrid","isDSD","isMono","ignoreBytes","blockSize","parseMetadataSubBlock","blockSamples","remainingLength","MetadataIdToken","dataSizeInWords","largeBlock","UINT24_LE","isOddSize","functionId","mp","SampleRates","isJointStereo","crossChannel","hybridNoiseShaping","floatingPoint","isOptional","SUBTYPE_NAME_REGEXP","TYPE_NAME_REGEXP","MediaType","Deferred","promise","defaultMessages","EndOfFileStream_1","Deferred_1","EndOfFileStream_2","deferred","endOfStream","peekQueue","peekData","lenCopy","reqLen","chunkLen","readFromStream","request","readDeferred","StreamReader_1","cachedSetTimeout","cachedClearTimeout","defaultSetTimout","defaultClearTimeout","runTimeout","fun","setTimeout","clearTimeout","currentQueue","queue","draining","queueIndex","cleanUpNextTick","drainQueue","timeout","run","marker","runClearTimeout","Item","noop","nextTick","browser","argv","versions","binding","cwd","chdir","dir","umask","codes","createErrorType","Base","NodeError","_Base","subClass","superClass","arg1","arg2","arg3","getMessage","__proto__","oneOf","expected","thing","actual","determiner","search","msg","this_len","objectKeys","Duplex","Readable","Writable","method","allowHalfOpen","readable","onend","_writableState","ended","onEndNT","highWaterMark","getBuffer","_readableState","destroyed","Transform","_transform","cb","ReadableState","EElistenerCount","Stream","OurUint8Array","g","debugUtil","debuglog","StringDecoder","createReadableStreamAsyncIterator","BufferList","destroyImpl","getHighWaterMark","_require$codes","ERR_INVALID_ARG_TYPE","ERR_STREAM_PUSH_AFTER_EOF","ERR_METHOD_NOT_IMPLEMENTED","ERR_STREAM_UNSHIFT_AFTER_END_EVENT","errorOrDestroy","kProxyEvents","isDuplex","objectMode","readableObjectMode","pipes","pipesCount","flowing","endEmitted","reading","needReadable","emittedReadable","readableListening","resumeScheduled","paused","emitClose","autoDestroy","defaultEncoding","awaitDrain","readingMore","_read","_destroy","readableAddChunk","addToFront","skipChunkCheck","emitReadable","emitReadable_","onEofChunk","chunkInvalid","_uint8ArrayToBuffer","addChunk","write","maybeReadMore","_undestroy","undestroy","isPaused","setEncoding","head","content","next","clear","MAX_HWM","howMuchToRead","computeNewHighWaterMark","flow","maybeReadMore_","updateReadableListening","resume","nReadingNextTick","resume_","fromList","consume","endReadable","endReadableNT","wState","finished","xs","nOrig","doRead","dest","pipeOpts","src","endFn","stdout","stderr","unpipe","onunpipe","unpipeInfo","hasUnpiped","onclose","onfinish","ondrain","ondata","cleanedUp","needDrain","pipeOnDrain","pause","fn","dests","ev","wrap","_this","Symbol","asyncIterator","_fromList","iterable","ERR_MULTIPLE_CALLBACK","ERR_TRANSFORM_ALREADY_TRANSFORMING","ERR_TRANSFORM_WITH_LENGTH_0","afterTransform","ts","_transformState","transforming","writecb","writechunk","rs","needTransform","writeencoding","transform","_flush","prefinish","done","_write","err2","CorkedRequest","finish","corkReq","callback","pendingcb","onCorkedFinish","corkedRequestsFree","WritableState","realHasInstance","internalUtil","deprecate","ERR_STREAM_CANNOT_PIPE","ERR_STREAM_DESTROYED","ERR_STREAM_NULL_VALUES","ERR_STREAM_WRITE_AFTER_END","ERR_UNKNOWN_ENCODING","nop","writableObjectMode","finalCalled","ending","noDecode","decodeStrings","writing","corked","bufferProcessing","onwrite","writelen","onwriteStateUpdate","finishMaybe","errorEmitted","onwriteError","needFinish","bufferedRequest","clearBuffer","afterWrite","lastBufferedRequest","prefinished","bufferedRequestCount","writev","_writev","final","_final","doWrite","onwriteDrain","holder","allBuffers","isBuf","callFinal","need","rState","current","hasInstance","object","writeAfterEnd","validChunk","newChunk","decodeChunk","last","writeOrBuffer","cork","uncork","setDefaultEncoding","endWritable","_Object$setPrototypeO","_defineProperty","kLastResolve","kLastReject","kError","kEnded","kLastPromise","kHandlePromise","kStream","createIterResult","readAndResolve","iter","onReadable","AsyncIteratorPrototype","ReadableStreamAsyncIteratorPrototype","setPrototypeOf","lastPromise","wrapForNext","_this2","_Object$create","iterator","enumerableOnly","symbols","sym","getOwnPropertyDescriptor","_defineProperties","props","inspect","custom","instance","Constructor","_classCallCheck","tail","protoProps","allocUnsafe","hasStrings","_getString","_getBuffer","nb","getOwnPropertyDescriptors","defineProperties","_objectSpread","depth","customInspect","emitErrorAndCloseNT","emitErrorNT","emitCloseNT","readableDestroyed","writableDestroyed","ERR_STREAM_PREMATURE_CLOSE","eos","called","_len","_key","onlegacyfinish","writableEnded","readableEnded","onrequest","req","setHeader","abort","isRequest","ERR_MISSING_ARGS","destroyer","closed","to","popCallback","streams","destroys","ERR_INVALID_OPT_VALUE","duplexKey","hwm","highWaterMarkFrom","readable_stream_1","released","getReader","pendingRead","syncAndRelease","waitForReadToComplete","releaseLock","isEncoding","nenc","retried","_normalizeEncoding","normalizeEncoding","utf16Text","utf16End","fillLast","utf8FillLast","base64Text","base64End","simpleWrite","simpleEnd","lastNeed","lastTotal","lastChar","utf8CheckByte","byte","utf8CheckExtraBytes","total","utf8CheckIncomplete","copyProps","dst","SafeBuffer","encodingOrOffset","allocUnsafeSlow","fill","SlowBuffer","AbstractTokenizer","peek_readable_1","numBuffer","bytesLeft","normalizeOptions","BufferTokenizer","AbstractTokenizer_1","normOptions","bytes2read","ReadStreamTokenizer","streamReader","skipBytes","skipBuffer","peek","bufSize","totBytesRead","ReadStreamTokenizer_1","BufferTokenizer_1","AnsiStringType","IgnoreType","Float80_LE","Float80_BE","Float64_LE","Float32_LE","Float16_LE","Float16_BE","INT24_LE","INT16_LE","ieee754","dv","setUint8","getUint16","setUint16","setUint32","getInt8","setInt8","getInt16","setInt16","unsigned","getInt32","setInt32","getBigUint64","setBigUint64","getBigInt64","setBigInt64","getFloat32","setFloat32","getFloat64","setFloat64","until","codePointToString","singleByteDecoder","max","cp","fromCharCode","bite","inRange","codePoint","windows1252","config","trace"],"sourceRoot":""} \ No newline at end of file diff --git a/dist/501.17afb8957510497ebb61.js b/dist/501.17afb8957510497ebb61.js deleted file mode 100644 index 0fb573f31..000000000 --- a/dist/501.17afb8957510497ebb61.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunktelegram_t=self.webpackChunktelegram_t||[]).push([[501],{7501:F=>{F.exports=JSON.parse('[["people",["Smileys & People"]],[["1F600",["grinning"]],["1F603",["smiley"]],["1F604",["smile"]],["1F601",["grin"]],["1F606",["laughing","satisfied"]],["1F605",["sweat_smile"]],["1F923",["rolling_on_the_floor_laughing"]],["1F602",["joy"]],["1F642",["slightly_smiling_face"]],["1F643",["upside_down_face"]],["1F609",["wink"]],["1F60A",["blush"]],["1F607",["innocent"]],["1F970",["smiling_face_with_3_hearts"]],["1F60D",["heart_eyes"]],["1F929",["star-struck","grinning_face_with_star_eyes"]],["1F618",["kissing_heart"]],["1F617",["kissing"]],["263A-FE0F",["relaxed"]],["1F61A",["kissing_closed_eyes"]],["1F619",["kissing_smiling_eyes"]],["1F972",["smiling_face_with_tear"]],["1F60B",["yum"]],["1F61B",["stuck_out_tongue"]],["1F61C",["stuck_out_tongue_winking_eye"]],["1F92A",["zany_face","grinning_face_with_one_large_and_one_small_eye"]],["1F61D",["stuck_out_tongue_closed_eyes"]],["1F911",["money_mouth_face"]],["1F917",["hugging_face"]],["1F92D",["face_with_hand_over_mouth","smiling_face_with_smiling_eyes_and_hand_covering_mouth"]],["1F92B",["shushing_face","face_with_finger_covering_closed_lips"]],["1F914",["thinking_face"]],["1F910",["zipper_mouth_face"]],["1F928",["face_with_raised_eyebrow","face_with_one_eyebrow_raised"]],["1F610",["neutral_face"]],["1F611",["expressionless"]],["1F636",["no_mouth"]],["1F636-200D-1F32B-FE0F",["face_in_clouds"]],["1F60F",["smirk"]],["1F612",["unamused"]],["1F644",["face_with_rolling_eyes"]],["1F62C",["grimacing"]],["1F62E-200D-1F4A8",["face_exhaling"]],["1F925",["lying_face"]],["1F60C",["relieved"]],["1F614",["pensive"]],["1F62A",["sleepy"]],["1F924",["drooling_face"]],["1F634",["sleeping"]],["1F637",["mask"]],["1F912",["face_with_thermometer"]],["1F915",["face_with_head_bandage"]],["1F922",["nauseated_face"]],["1F92E",["face_vomiting","face_with_open_mouth_vomiting"]],["1F927",["sneezing_face"]],["1F975",["hot_face"]],["1F976",["cold_face"]],["1F974",["woozy_face"]],["1F635",["dizzy_face"]],["1F635-200D-1F4AB",["face_with_spiral_eyes"]],["1F92F",["exploding_head","shocked_face_with_exploding_head"]],["1F920",["face_with_cowboy_hat"]],["1F973",["partying_face"]],["1F978",["disguised_face"]],["1F60E",["sunglasses"]],["1F913",["nerd_face"]],["1F9D0",["face_with_monocle"]],["1F615",["confused"]],["1F61F",["worried"]],["1F641",["slightly_frowning_face"]],["2639-FE0F",["white_frowning_face"]],["1F62E",["open_mouth"]],["1F62F",["hushed"]],["1F632",["astonished"]],["1F633",["flushed"]],["1F97A",["pleading_face"]],["1F626",["frowning"]],["1F627",["anguished"]],["1F628",["fearful"]],["1F630",["cold_sweat"]],["1F625",["disappointed_relieved"]],["1F622",["cry"]],["1F62D",["sob"]],["1F631",["scream"]],["1F616",["confounded"]],["1F623",["persevere"]],["1F61E",["disappointed"]],["1F613",["sweat"]],["1F629",["weary"]],["1F62B",["tired_face"]],["1F971",["yawning_face"]],["1F624",["triumph"]],["1F621",["rage"]],["1F620",["angry"]],["1F92C",["face_with_symbols_on_mouth","serious_face_with_symbols_covering_mouth"]],["1F608",["smiling_imp"]],["1F47F",["imp"]],["1F480",["skull"]],["2620-FE0F",["skull_and_crossbones"]],["1F4A9",["hankey","poop","shit"]],["1F921",["clown_face"]],["1F479",["japanese_ogre"]],["1F47A",["japanese_goblin"]],["1F47B",["ghost"]],["1F47D",["alien"]],["1F47E",["space_invader"]],["1F916",["robot_face"]],["1F63A",["smiley_cat"]],["1F638",["smile_cat"]],["1F639",["joy_cat"]],["1F63B",["heart_eyes_cat"]],["1F63C",["smirk_cat"]],["1F63D",["kissing_cat"]],["1F640",["scream_cat"]],["1F63F",["crying_cat_face"]],["1F63E",["pouting_cat"]],["1F648",["see_no_evil"]],["1F649",["hear_no_evil"]],["1F64A",["speak_no_evil"]],["1F48B",["kiss"]],["1F48C",["love_letter"]],["1F498",["cupid"]],["1F49D",["gift_heart"]],["1F496",["sparkling_heart"]],["1F497",["heartpulse"]],["1F493",["heartbeat"]],["1F49E",["revolving_hearts"]],["1F495",["two_hearts"]],["1F49F",["heart_decoration"]],["2763-FE0F",["heavy_heart_exclamation_mark_ornament"]],["1F494",["broken_heart"]],["2764-FE0F-200D-1F525",["heart_on_fire"]],["2764-FE0F-200D-1FA79",["mending_heart"]],["2764-FE0F",["heart"]],["1F9E1",["orange_heart"]],["1F49B",["yellow_heart"]],["1F49A",["green_heart"]],["1F499",["blue_heart"]],["1F49C",["purple_heart"]],["1F90E",["brown_heart"]],["1F5A4",["black_heart"]],["1F90D",["white_heart"]],["1F4AF",["100"]],["1F4A2",["anger"]],["1F4A5",["boom","collision"]],["1F4AB",["dizzy"]],["1F4A6",["sweat_drops"]],["1F4A8",["dash"]],["1F573-FE0F",["hole"]],["1F4A3",["bomb"]],["1F4AC",["speech_balloon"]],["1F441-FE0F-200D-1F5E8-FE0F",["eye-in-speech-bubble"]],["1F5E8-FE0F",["left_speech_bubble"]],["1F5EF-FE0F",["right_anger_bubble"]],["1F4AD",["thought_balloon"]],["1F4A4",["zzz"]],["1F44B",["wave"]],["1F91A",["raised_back_of_hand"]],["1F590-FE0F",["raised_hand_with_fingers_splayed"]],["270B",["hand","raised_hand"]],["1F596",["spock-hand"]],["1F44C",["ok_hand"]],["1F90C",["pinched_fingers"]],["1F90F",["pinching_hand"]],["270C-FE0F",["v"]],["1F91E",["crossed_fingers","hand_with_index_and_middle_fingers_crossed"]],["1F91F",["i_love_you_hand_sign"]],["1F918",["the_horns","sign_of_the_horns"]],["1F919",["call_me_hand"]],["1F448",["point_left"]],["1F449",["point_right"]],["1F446",["point_up_2"]],["1F595",["middle_finger","reversed_hand_with_middle_finger_extended"]],["1F447",["point_down"]],["261D-FE0F",["point_up"]],["1F44D",["+1","thumbsup"]],["1F44E",["-1","thumbsdown"]],["270A",["fist"]],["1F44A",["facepunch","punch"]],["1F91B",["left-facing_fist"]],["1F91C",["right-facing_fist"]],["1F44F",["clap"]],["1F64C",["raised_hands"]],["1F450",["open_hands"]],["1F932",["palms_up_together"]],["1F91D",["handshake"]],["1F64F",["pray"]],["270D-FE0F",["writing_hand"]],["1F485",["nail_care"]],["1F933",["selfie"]],["1F4AA",["muscle"]],["1F9BE",["mechanical_arm"]],["1F9BF",["mechanical_leg"]],["1F9B5",["leg"]],["1F9B6",["foot"]],["1F442",["ear"]],["1F9BB",["ear_with_hearing_aid"]],["1F443",["nose"]],["1F9E0",["brain"]],["1FAC0",["anatomical_heart"]],["1FAC1",["lungs"]],["1F9B7",["tooth"]],["1F9B4",["bone"]],["1F440",["eyes"]],["1F441-FE0F",["eye"]],["1F445",["tongue"]],["1F444",["lips"]],["1F476",["baby"]],["1F9D2",["child"]],["1F466",["boy"]],["1F467",["girl"]],["1F9D1",["adult"]],["1F471",["person_with_blond_hair"]],["1F468",["man"]],["1F9D4",["bearded_person"]],["1F9D4-200D-2642-FE0F",["man_with_beard"]],["1F9D4-200D-2640-FE0F",["woman_with_beard"]],["1F468-200D-1F9B0",["red_haired_man"]],["1F468-200D-1F9B1",["curly_haired_man"]],["1F468-200D-1F9B3",["white_haired_man"]],["1F468-200D-1F9B2",["bald_man"]],["1F469",["woman"]],["1F469-200D-1F9B0",["red_haired_woman"]],["1F9D1-200D-1F9B0",["red_haired_person"]],["1F469-200D-1F9B1",["curly_haired_woman"]],["1F9D1-200D-1F9B1",["curly_haired_person"]],["1F469-200D-1F9B3",["white_haired_woman"]],["1F9D1-200D-1F9B3",["white_haired_person"]],["1F469-200D-1F9B2",["bald_woman"]],["1F9D1-200D-1F9B2",["bald_person"]],["1F471-200D-2640-FE0F",["blond-haired-woman"]],["1F471-200D-2642-FE0F",["blond-haired-man"]],["1F9D3",["older_adult"]],["1F474",["older_man"]],["1F475",["older_woman"]],["1F64D",["person_frowning"]],["1F64D-200D-2642-FE0F",["man-frowning"]],["1F64D-200D-2640-FE0F",["woman-frowning"]],["1F64E",["person_with_pouting_face"]],["1F64E-200D-2642-FE0F",["man-pouting"]],["1F64E-200D-2640-FE0F",["woman-pouting"]],["1F645",["no_good"]],["1F645-200D-2642-FE0F",["man-gesturing-no"]],["1F645-200D-2640-FE0F",["woman-gesturing-no"]],["1F646",["ok_woman"]],["1F646-200D-2642-FE0F",["man-gesturing-ok"]],["1F646-200D-2640-FE0F",["woman-gesturing-ok"]],["1F481",["information_desk_person"]],["1F481-200D-2642-FE0F",["man-tipping-hand"]],["1F481-200D-2640-FE0F",["woman-tipping-hand"]],["1F64B",["raising_hand"]],["1F64B-200D-2642-FE0F",["man-raising-hand"]],["1F64B-200D-2640-FE0F",["woman-raising-hand"]],["1F9CF",["deaf_person"]],["1F9CF-200D-2642-FE0F",["deaf_man"]],["1F9CF-200D-2640-FE0F",["deaf_woman"]],["1F647",["bow"]],["1F647-200D-2642-FE0F",["man-bowing"]],["1F647-200D-2640-FE0F",["woman-bowing"]],["1F926",["face_palm"]],["1F926-200D-2642-FE0F",["man-facepalming"]],["1F926-200D-2640-FE0F",["woman-facepalming"]],["1F937",["shrug"]],["1F937-200D-2642-FE0F",["man-shrugging"]],["1F937-200D-2640-FE0F",["woman-shrugging"]],["1F9D1-200D-2695-FE0F",["health_worker"]],["1F468-200D-2695-FE0F",["male-doctor"]],["1F469-200D-2695-FE0F",["female-doctor"]],["1F9D1-200D-1F393",["student"]],["1F468-200D-1F393",["male-student"]],["1F469-200D-1F393",["female-student"]],["1F9D1-200D-1F3EB",["teacher"]],["1F468-200D-1F3EB",["male-teacher"]],["1F469-200D-1F3EB",["female-teacher"]],["1F9D1-200D-2696-FE0F",["judge"]],["1F468-200D-2696-FE0F",["male-judge"]],["1F469-200D-2696-FE0F",["female-judge"]],["1F9D1-200D-1F33E",["farmer"]],["1F468-200D-1F33E",["male-farmer"]],["1F469-200D-1F33E",["female-farmer"]],["1F9D1-200D-1F373",["cook"]],["1F468-200D-1F373",["male-cook"]],["1F469-200D-1F373",["female-cook"]],["1F9D1-200D-1F527",["mechanic"]],["1F468-200D-1F527",["male-mechanic"]],["1F469-200D-1F527",["female-mechanic"]],["1F9D1-200D-1F3ED",["factory_worker"]],["1F468-200D-1F3ED",["male-factory-worker"]],["1F469-200D-1F3ED",["female-factory-worker"]],["1F9D1-200D-1F4BC",["office_worker"]],["1F468-200D-1F4BC",["male-office-worker"]],["1F469-200D-1F4BC",["female-office-worker"]],["1F9D1-200D-1F52C",["scientist"]],["1F468-200D-1F52C",["male-scientist"]],["1F469-200D-1F52C",["female-scientist"]],["1F9D1-200D-1F4BB",["technologist"]],["1F468-200D-1F4BB",["male-technologist"]],["1F469-200D-1F4BB",["female-technologist"]],["1F9D1-200D-1F3A4",["singer"]],["1F468-200D-1F3A4",["male-singer"]],["1F469-200D-1F3A4",["female-singer"]],["1F9D1-200D-1F3A8",["artist"]],["1F468-200D-1F3A8",["male-artist"]],["1F469-200D-1F3A8",["female-artist"]],["1F9D1-200D-2708-FE0F",["pilot"]],["1F468-200D-2708-FE0F",["male-pilot"]],["1F469-200D-2708-FE0F",["female-pilot"]],["1F9D1-200D-1F680",["astronaut"]],["1F468-200D-1F680",["male-astronaut"]],["1F469-200D-1F680",["female-astronaut"]],["1F9D1-200D-1F692",["firefighter"]],["1F468-200D-1F692",["male-firefighter"]],["1F469-200D-1F692",["female-firefighter"]],["1F46E",["cop"]],["1F46E-200D-2642-FE0F",["male-police-officer"]],["1F46E-200D-2640-FE0F",["female-police-officer"]],["1F575-FE0F",["sleuth_or_spy"]],["1F575-FE0F-200D-2642-FE0F",["male-detective"]],["1F575-FE0F-200D-2640-FE0F",["female-detective"]],["1F482",["guardsman"]],["1F482-200D-2642-FE0F",["male-guard"]],["1F482-200D-2640-FE0F",["female-guard"]],["1F977",["ninja"]],["1F477",["construction_worker"]],["1F477-200D-2642-FE0F",["male-construction-worker"]],["1F477-200D-2640-FE0F",["female-construction-worker"]],["1F934",["prince"]],["1F478",["princess"]],["1F473",["man_with_turban"]],["1F473-200D-2642-FE0F",["man-wearing-turban"]],["1F473-200D-2640-FE0F",["woman-wearing-turban"]],["1F472",["man_with_gua_pi_mao"]],["1F9D5",["person_with_headscarf"]],["1F935",["person_in_tuxedo"]],["1F935-200D-2642-FE0F",["man_in_tuxedo"]],["1F935-200D-2640-FE0F",["woman_in_tuxedo"]],["1F470",["bride_with_veil"]],["1F470-200D-2642-FE0F",["man_with_veil"]],["1F470-200D-2640-FE0F",["woman_with_veil"]],["1F930",["pregnant_woman"]],["1F931",["breast-feeding"]],["1F469-200D-1F37C",["woman_feeding_baby"]],["1F468-200D-1F37C",["man_feeding_baby"]],["1F9D1-200D-1F37C",["person_feeding_baby"]],["1F47C",["angel"]],["1F385",["santa"]],["1F936",["mrs_claus","mother_christmas"]],["1F9D1-200D-1F384",["mx_claus"]],["1F9B8",["superhero"]],["1F9B8-200D-2642-FE0F",["male_superhero"]],["1F9B8-200D-2640-FE0F",["female_superhero"]],["1F9B9",["supervillain"]],["1F9B9-200D-2642-FE0F",["male_supervillain"]],["1F9B9-200D-2640-FE0F",["female_supervillain"]],["1F9D9",["mage"]],["1F9D9-200D-2642-FE0F",["male_mage"]],["1F9D9-200D-2640-FE0F",["female_mage"]],["1F9DA",["fairy"]],["1F9DA-200D-2642-FE0F",["male_fairy"]],["1F9DA-200D-2640-FE0F",["female_fairy"]],["1F9DB",["vampire"]],["1F9DB-200D-2642-FE0F",["male_vampire"]],["1F9DB-200D-2640-FE0F",["female_vampire"]],["1F9DC",["merperson"]],["1F9DC-200D-2642-FE0F",["merman"]],["1F9DC-200D-2640-FE0F",["mermaid"]],["1F9DD",["elf"]],["1F9DD-200D-2642-FE0F",["male_elf"]],["1F9DD-200D-2640-FE0F",["female_elf"]],["1F9DE",["genie"]],["1F9DE-200D-2642-FE0F",["male_genie"]],["1F9DE-200D-2640-FE0F",["female_genie"]],["1F9DF",["zombie"]],["1F9DF-200D-2642-FE0F",["male_zombie"]],["1F9DF-200D-2640-FE0F",["female_zombie"]],["1F486",["massage"]],["1F486-200D-2642-FE0F",["man-getting-massage"]],["1F486-200D-2640-FE0F",["woman-getting-massage"]],["1F487",["haircut"]],["1F487-200D-2642-FE0F",["man-getting-haircut"]],["1F487-200D-2640-FE0F",["woman-getting-haircut"]],["1F6B6",["walking"]],["1F6B6-200D-2642-FE0F",["man-walking"]],["1F6B6-200D-2640-FE0F",["woman-walking"]],["1F9CD",["standing_person"]],["1F9CD-200D-2642-FE0F",["man_standing"]],["1F9CD-200D-2640-FE0F",["woman_standing"]],["1F9CE",["kneeling_person"]],["1F9CE-200D-2642-FE0F",["man_kneeling"]],["1F9CE-200D-2640-FE0F",["woman_kneeling"]],["1F9D1-200D-1F9AF",["person_with_probing_cane"]],["1F468-200D-1F9AF",["man_with_probing_cane"]],["1F469-200D-1F9AF",["woman_with_probing_cane"]],["1F9D1-200D-1F9BC",["person_in_motorized_wheelchair"]],["1F468-200D-1F9BC",["man_in_motorized_wheelchair"]],["1F469-200D-1F9BC",["woman_in_motorized_wheelchair"]],["1F9D1-200D-1F9BD",["person_in_manual_wheelchair"]],["1F468-200D-1F9BD",["man_in_manual_wheelchair"]],["1F469-200D-1F9BD",["woman_in_manual_wheelchair"]],["1F3C3",["runner","running"]],["1F3C3-200D-2642-FE0F",["man-running"]],["1F3C3-200D-2640-FE0F",["woman-running"]],["1F483",["dancer"]],["1F57A",["man_dancing"]],["1F574-FE0F",["man_in_business_suit_levitating"]],["1F46F",["dancers"]],["1F46F-200D-2642-FE0F",["men-with-bunny-ears-partying","man-with-bunny-ears-partying"]],["1F46F-200D-2640-FE0F",["women-with-bunny-ears-partying","woman-with-bunny-ears-partying"]],["1F9D6",["person_in_steamy_room"]],["1F9D6-200D-2642-FE0F",["man_in_steamy_room"]],["1F9D6-200D-2640-FE0F",["woman_in_steamy_room"]],["1F9D7",["person_climbing"]],["1F9D7-200D-2642-FE0F",["man_climbing"]],["1F9D7-200D-2640-FE0F",["woman_climbing"]],["1F93A",["fencer"]],["1F3C7",["horse_racing"]],["26F7-FE0F",["skier"]],["1F3C2",["snowboarder"]],["1F3CC-FE0F",["golfer"]],["1F3CC-FE0F-200D-2642-FE0F",["man-golfing"]],["1F3CC-FE0F-200D-2640-FE0F",["woman-golfing"]],["1F3C4",["surfer"]],["1F3C4-200D-2642-FE0F",["man-surfing"]],["1F3C4-200D-2640-FE0F",["woman-surfing"]],["1F6A3",["rowboat"]],["1F6A3-200D-2642-FE0F",["man-rowing-boat"]],["1F6A3-200D-2640-FE0F",["woman-rowing-boat"]],["1F3CA",["swimmer"]],["1F3CA-200D-2642-FE0F",["man-swimming"]],["1F3CA-200D-2640-FE0F",["woman-swimming"]],["26F9-FE0F",["person_with_ball"]],["26F9-FE0F-200D-2642-FE0F",["man-bouncing-ball"]],["26F9-FE0F-200D-2640-FE0F",["woman-bouncing-ball"]],["1F3CB-FE0F",["weight_lifter"]],["1F3CB-FE0F-200D-2642-FE0F",["man-lifting-weights"]],["1F3CB-FE0F-200D-2640-FE0F",["woman-lifting-weights"]],["1F6B4",["bicyclist"]],["1F6B4-200D-2642-FE0F",["man-biking"]],["1F6B4-200D-2640-FE0F",["woman-biking"]],["1F6B5",["mountain_bicyclist"]],["1F6B5-200D-2642-FE0F",["man-mountain-biking"]],["1F6B5-200D-2640-FE0F",["woman-mountain-biking"]],["1F938",["person_doing_cartwheel"]],["1F938-200D-2642-FE0F",["man-cartwheeling"]],["1F938-200D-2640-FE0F",["woman-cartwheeling"]],["1F93C",["wrestlers"]],["1F93C-200D-2642-FE0F",["man-wrestling"]],["1F93C-200D-2640-FE0F",["woman-wrestling"]],["1F93D",["water_polo"]],["1F93D-200D-2642-FE0F",["man-playing-water-polo"]],["1F93D-200D-2640-FE0F",["woman-playing-water-polo"]],["1F93E",["handball"]],["1F93E-200D-2642-FE0F",["man-playing-handball"]],["1F93E-200D-2640-FE0F",["woman-playing-handball"]],["1F939",["juggling"]],["1F939-200D-2642-FE0F",["man-juggling"]],["1F939-200D-2640-FE0F",["woman-juggling"]],["1F9D8",["person_in_lotus_position"]],["1F9D8-200D-2642-FE0F",["man_in_lotus_position"]],["1F9D8-200D-2640-FE0F",["woman_in_lotus_position"]],["1F6C0",["bath"]],["1F6CC",["sleeping_accommodation"]],["1F9D1-200D-1F91D-200D-1F9D1",["people_holding_hands"]],["1F46D",["two_women_holding_hands","women_holding_hands"]],["1F46B",["man_and_woman_holding_hands","woman_and_man_holding_hands","couple"]],["1F46C",["two_men_holding_hands","men_holding_hands"]],["1F48F",["couplekiss"]],["1F469-200D-2764-FE0F-200D-1F48B-200D-1F468",["woman-kiss-man"]],["1F468-200D-2764-FE0F-200D-1F48B-200D-1F468",["man-kiss-man"]],["1F469-200D-2764-FE0F-200D-1F48B-200D-1F469",["woman-kiss-woman"]],["1F491",["couple_with_heart"]],["1F469-200D-2764-FE0F-200D-1F468",["woman-heart-man"]],["1F468-200D-2764-FE0F-200D-1F468",["man-heart-man"]],["1F469-200D-2764-FE0F-200D-1F469",["woman-heart-woman"]],["1F46A",["family"]],["1F468-200D-1F469-200D-1F466",["man-woman-boy"]],["1F468-200D-1F469-200D-1F467",["man-woman-girl"]],["1F468-200D-1F469-200D-1F467-200D-1F466",["man-woman-girl-boy"]],["1F468-200D-1F469-200D-1F466-200D-1F466",["man-woman-boy-boy"]],["1F468-200D-1F469-200D-1F467-200D-1F467",["man-woman-girl-girl"]],["1F468-200D-1F468-200D-1F466",["man-man-boy"]],["1F468-200D-1F468-200D-1F467",["man-man-girl"]],["1F468-200D-1F468-200D-1F467-200D-1F466",["man-man-girl-boy"]],["1F468-200D-1F468-200D-1F466-200D-1F466",["man-man-boy-boy"]],["1F468-200D-1F468-200D-1F467-200D-1F467",["man-man-girl-girl"]],["1F469-200D-1F469-200D-1F466",["woman-woman-boy"]],["1F469-200D-1F469-200D-1F467",["woman-woman-girl"]],["1F469-200D-1F469-200D-1F467-200D-1F466",["woman-woman-girl-boy"]],["1F469-200D-1F469-200D-1F466-200D-1F466",["woman-woman-boy-boy"]],["1F469-200D-1F469-200D-1F467-200D-1F467",["woman-woman-girl-girl"]],["1F468-200D-1F466",["man-boy"]],["1F468-200D-1F466-200D-1F466",["man-boy-boy"]],["1F468-200D-1F467",["man-girl"]],["1F468-200D-1F467-200D-1F466",["man-girl-boy"]],["1F468-200D-1F467-200D-1F467",["man-girl-girl"]],["1F469-200D-1F466",["woman-boy"]],["1F469-200D-1F466-200D-1F466",["woman-boy-boy"]],["1F469-200D-1F467",["woman-girl"]],["1F469-200D-1F467-200D-1F466",["woman-girl-boy"]],["1F469-200D-1F467-200D-1F467",["woman-girl-girl"]],["1F5E3-FE0F",["speaking_head_in_silhouette"]],["1F464",["bust_in_silhouette"]],["1F465",["busts_in_silhouette"]],["1FAC2",["people_hugging"]],["1F463",["footprints"]]],["nature",["Animals & Nature"]],[["1F435",["monkey_face"]],["1F412",["monkey"]],["1F98D",["gorilla"]],["1F9A7",["orangutan"]],["1F436",["dog"]],["1F415",["dog2"]],["1F9AE",["guide_dog"]],["1F415-200D-1F9BA",["service_dog"]],["1F429",["poodle"]],["1F43A",["wolf"]],["1F98A",["fox_face"]],["1F99D",["raccoon"]],["1F431",["cat"]],["1F408",["cat2"]],["1F408-200D-2B1B",["black_cat"]],["1F981",["lion_face"]],["1F42F",["tiger"]],["1F405",["tiger2"]],["1F406",["leopard"]],["1F434",["horse"]],["1F40E",["racehorse"]],["1F984",["unicorn_face"]],["1F993",["zebra_face"]],["1F98C",["deer"]],["1F9AC",["bison"]],["1F42E",["cow"]],["1F402",["ox"]],["1F403",["water_buffalo"]],["1F404",["cow2"]],["1F437",["pig"]],["1F416",["pig2"]],["1F417",["boar"]],["1F43D",["pig_nose"]],["1F40F",["ram"]],["1F411",["sheep"]],["1F410",["goat"]],["1F42A",["dromedary_camel"]],["1F42B",["camel"]],["1F999",["llama"]],["1F992",["giraffe_face"]],["1F418",["elephant"]],["1F9A3",["mammoth"]],["1F98F",["rhinoceros"]],["1F99B",["hippopotamus"]],["1F42D",["mouse"]],["1F401",["mouse2"]],["1F400",["rat"]],["1F439",["hamster"]],["1F430",["rabbit"]],["1F407",["rabbit2"]],["1F43F-FE0F",["chipmunk"]],["1F9AB",["beaver"]],["1F994",["hedgehog"]],["1F987",["bat"]],["1F43B",["bear"]],["1F43B-200D-2744-FE0F",["polar_bear"]],["1F428",["koala"]],["1F43C",["panda_face"]],["1F9A5",["sloth"]],["1F9A6",["otter"]],["1F9A8",["skunk"]],["1F998",["kangaroo"]],["1F9A1",["badger"]],["1F43E",["feet","paw_prints"]],["1F983",["turkey"]],["1F414",["chicken"]],["1F413",["rooster"]],["1F423",["hatching_chick"]],["1F424",["baby_chick"]],["1F425",["hatched_chick"]],["1F426",["bird"]],["1F427",["penguin"]],["1F54A-FE0F",["dove_of_peace"]],["1F985",["eagle"]],["1F986",["duck"]],["1F9A2",["swan"]],["1F989",["owl"]],["1F9A4",["dodo"]],["1FAB6",["feather"]],["1F9A9",["flamingo"]],["1F99A",["peacock"]],["1F99C",["parrot"]],["1F438",["frog"]],["1F40A",["crocodile"]],["1F422",["turtle"]],["1F98E",["lizard"]],["1F40D",["snake"]],["1F432",["dragon_face"]],["1F409",["dragon"]],["1F995",["sauropod"]],["1F996",["t-rex"]],["1F433",["whale"]],["1F40B",["whale2"]],["1F42C",["dolphin","flipper"]],["1F9AD",["seal"]],["1F41F",["fish"]],["1F420",["tropical_fish"]],["1F421",["blowfish"]],["1F988",["shark"]],["1F419",["octopus"]],["1F41A",["shell"]],["1F40C",["snail"]],["1F98B",["butterfly"]],["1F41B",["bug"]],["1F41C",["ant"]],["1F41D",["bee","honeybee"]],["1FAB2",["beetle"]],["1F41E",["ladybug","lady_beetle"]],["1F997",["cricket"]],["1FAB3",["cockroach"]],["1F577-FE0F",["spider"]],["1F578-FE0F",["spider_web"]],["1F982",["scorpion"]],["1F99F",["mosquito"]],["1FAB0",["fly"]],["1FAB1",["worm"]],["1F9A0",["microbe"]],["1F490",["bouquet"]],["1F338",["cherry_blossom"]],["1F4AE",["white_flower"]],["1F3F5-FE0F",["rosette"]],["1F339",["rose"]],["1F940",["wilted_flower"]],["1F33A",["hibiscus"]],["1F33B",["sunflower"]],["1F33C",["blossom"]],["1F337",["tulip"]],["1F331",["seedling"]],["1FAB4",["potted_plant"]],["1F332",["evergreen_tree"]],["1F333",["deciduous_tree"]],["1F334",["palm_tree"]],["1F335",["cactus"]],["1F33E",["ear_of_rice"]],["1F33F",["herb"]],["2618-FE0F",["shamrock"]],["1F340",["four_leaf_clover"]],["1F341",["maple_leaf"]],["1F342",["fallen_leaf"]],["1F343",["leaves"]]],["foods",["Food & Drink"]],[["1F347",["grapes"]],["1F348",["melon"]],["1F349",["watermelon"]],["1F34A",["tangerine"]],["1F34B",["lemon"]],["1F34C",["banana"]],["1F34D",["pineapple"]],["1F96D",["mango"]],["1F34E",["apple"]],["1F34F",["green_apple"]],["1F350",["pear"]],["1F351",["peach"]],["1F352",["cherries"]],["1F353",["strawberry"]],["1FAD0",["blueberries"]],["1F95D",["kiwifruit"]],["1F345",["tomato"]],["1FAD2",["olive"]],["1F965",["coconut"]],["1F951",["avocado"]],["1F346",["eggplant"]],["1F954",["potato"]],["1F955",["carrot"]],["1F33D",["corn"]],["1F336-FE0F",["hot_pepper"]],["1FAD1",["bell_pepper"]],["1F952",["cucumber"]],["1F96C",["leafy_green"]],["1F966",["broccoli"]],["1F9C4",["garlic"]],["1F9C5",["onion"]],["1F344",["mushroom"]],["1F95C",["peanuts"]],["1F330",["chestnut"]],["1F35E",["bread"]],["1F950",["croissant"]],["1F956",["baguette_bread"]],["1FAD3",["flatbread"]],["1F968",["pretzel"]],["1F96F",["bagel"]],["1F95E",["pancakes"]],["1F9C7",["waffle"]],["1F9C0",["cheese_wedge"]],["1F356",["meat_on_bone"]],["1F357",["poultry_leg"]],["1F969",["cut_of_meat"]],["1F953",["bacon"]],["1F354",["hamburger"]],["1F35F",["fries"]],["1F355",["pizza"]],["1F32D",["hotdog"]],["1F96A",["sandwich"]],["1F32E",["taco"]],["1F32F",["burrito"]],["1FAD4",["tamale"]],["1F959",["stuffed_flatbread"]],["1F9C6",["falafel"]],["1F95A",["egg"]],["1F373",["fried_egg","cooking"]],["1F958",["shallow_pan_of_food"]],["1F372",["stew"]],["1FAD5",["fondue"]],["1F963",["bowl_with_spoon"]],["1F957",["green_salad"]],["1F37F",["popcorn"]],["1F9C8",["butter"]],["1F9C2",["salt"]],["1F96B",["canned_food"]],["1F371",["bento"]],["1F358",["rice_cracker"]],["1F359",["rice_ball"]],["1F35A",["rice"]],["1F35B",["curry"]],["1F35C",["ramen"]],["1F35D",["spaghetti"]],["1F360",["sweet_potato"]],["1F362",["oden"]],["1F363",["sushi"]],["1F364",["fried_shrimp"]],["1F365",["fish_cake"]],["1F96E",["moon_cake"]],["1F361",["dango"]],["1F95F",["dumpling"]],["1F960",["fortune_cookie"]],["1F961",["takeout_box"]],["1F980",["crab"]],["1F99E",["lobster"]],["1F990",["shrimp"]],["1F991",["squid"]],["1F9AA",["oyster"]],["1F366",["icecream"]],["1F367",["shaved_ice"]],["1F368",["ice_cream"]],["1F369",["doughnut"]],["1F36A",["cookie"]],["1F382",["birthday"]],["1F370",["cake"]],["1F9C1",["cupcake"]],["1F967",["pie"]],["1F36B",["chocolate_bar"]],["1F36C",["candy"]],["1F36D",["lollipop"]],["1F36E",["custard"]],["1F36F",["honey_pot"]],["1F37C",["baby_bottle"]],["1F95B",["glass_of_milk"]],["2615",["coffee"]],["1FAD6",["teapot"]],["1F375",["tea"]],["1F376",["sake"]],["1F37E",["champagne"]],["1F377",["wine_glass"]],["1F378",["cocktail"]],["1F379",["tropical_drink"]],["1F37A",["beer"]],["1F37B",["beers"]],["1F942",["clinking_glasses"]],["1F943",["tumbler_glass"]],["1F964",["cup_with_straw"]],["1F9CB",["bubble_tea"]],["1F9C3",["beverage_box"]],["1F9C9",["mate_drink"]],["1F9CA",["ice_cube"]],["1F962",["chopsticks"]],["1F37D-FE0F",["knife_fork_plate"]],["1F374",["fork_and_knife"]],["1F944",["spoon"]],["1F52A",["hocho","knife"]],["1F3FA",["amphora"]]],["activity",["Activities"]],[["1F383",["jack_o_lantern"]],["1F384",["christmas_tree"]],["1F386",["fireworks"]],["1F387",["sparkler"]],["1F9E8",["firecracker"]],["2728",["sparkles"]],["1F388",["balloon"]],["1F389",["tada"]],["1F38A",["confetti_ball"]],["1F38B",["tanabata_tree"]],["1F38D",["bamboo"]],["1F38E",["dolls"]],["1F38F",["flags"]],["1F390",["wind_chime"]],["1F391",["rice_scene"]],["1F9E7",["red_envelope"]],["1F380",["ribbon"]],["1F381",["gift"]],["1F397-FE0F",["reminder_ribbon"]],["1F39F-FE0F",["admission_tickets"]],["1F3AB",["ticket"]],["1F396-FE0F",["medal"]],["1F3C6",["trophy"]],["1F3C5",["sports_medal"]],["1F947",["first_place_medal"]],["1F948",["second_place_medal"]],["1F949",["third_place_medal"]],["26BD",["soccer"]],["26BE",["baseball"]],["1F94E",["softball"]],["1F3C0",["basketball"]],["1F3D0",["volleyball"]],["1F3C8",["football"]],["1F3C9",["rugby_football"]],["1F3BE",["tennis"]],["1F94F",["flying_disc"]],["1F3B3",["bowling"]],["1F3CF",["cricket_bat_and_ball"]],["1F3D1",["field_hockey_stick_and_ball"]],["1F3D2",["ice_hockey_stick_and_puck"]],["1F94D",["lacrosse"]],["1F3D3",["table_tennis_paddle_and_ball"]],["1F3F8",["badminton_racquet_and_shuttlecock"]],["1F94A",["boxing_glove"]],["1F94B",["martial_arts_uniform"]],["1F945",["goal_net"]],["26F3",["golf"]],["26F8-FE0F",["ice_skate"]],["1F3A3",["fishing_pole_and_fish"]],["1F93F",["diving_mask"]],["1F3BD",["running_shirt_with_sash"]],["1F3BF",["ski"]],["1F6F7",["sled"]],["1F94C",["curling_stone"]],["1F3AF",["dart"]],["1FA80",["yo-yo"]],["1FA81",["kite"]],["1F3B1",["8ball"]],["1F52E",["crystal_ball"]],["1FA84",["magic_wand"]],["1F9FF",["nazar_amulet"]],["1F3AE",["video_game"]],["1F579-FE0F",["joystick"]],["1F3B0",["slot_machine"]],["1F3B2",["game_die"]],["1F9E9",["jigsaw"]],["1F9F8",["teddy_bear"]],["1FA85",["pinata"]],["1FA86",["nesting_dolls"]],["2660-FE0F",["spades"]],["2665-FE0F",["hearts"]],["2666-FE0F",["diamonds"]],["2663-FE0F",["clubs"]],["265F-FE0F",["chess_pawn"]],["1F0CF",["black_joker"]],["1F004",["mahjong"]],["1F3B4",["flower_playing_cards"]],["1F3AD",["performing_arts"]],["1F5BC-FE0F",["frame_with_picture"]],["1F3A8",["art"]],["1F9F5",["thread"]],["1FAA1",["sewing_needle"]],["1F9F6",["yarn"]],["1FAA2",["knot"]]],["places",["Travel & Places"]],[["1F30D",["earth_africa"]],["1F30E",["earth_americas"]],["1F30F",["earth_asia"]],["1F310",["globe_with_meridians"]],["1F5FA-FE0F",["world_map"]],["1F5FE",["japan"]],["1F9ED",["compass"]],["1F3D4-FE0F",["snow_capped_mountain"]],["26F0-FE0F",["mountain"]],["1F30B",["volcano"]],["1F5FB",["mount_fuji"]],["1F3D5-FE0F",["camping"]],["1F3D6-FE0F",["beach_with_umbrella"]],["1F3DC-FE0F",["desert"]],["1F3DD-FE0F",["desert_island"]],["1F3DE-FE0F",["national_park"]],["1F3DF-FE0F",["stadium"]],["1F3DB-FE0F",["classical_building"]],["1F3D7-FE0F",["building_construction"]],["1F9F1",["bricks"]],["1FAA8",["rock"]],["1FAB5",["wood"]],["1F6D6",["hut"]],["1F3D8-FE0F",["house_buildings"]],["1F3DA-FE0F",["derelict_house_building"]],["1F3E0",["house"]],["1F3E1",["house_with_garden"]],["1F3E2",["office"]],["1F3E3",["post_office"]],["1F3E4",["european_post_office"]],["1F3E5",["hospital"]],["1F3E6",["bank"]],["1F3E8",["hotel"]],["1F3E9",["love_hotel"]],["1F3EA",["convenience_store"]],["1F3EB",["school"]],["1F3EC",["department_store"]],["1F3ED",["factory"]],["1F3EF",["japanese_castle"]],["1F3F0",["european_castle"]],["1F492",["wedding"]],["1F5FC",["tokyo_tower"]],["1F5FD",["statue_of_liberty"]],["26EA",["church"]],["1F54C",["mosque"]],["1F6D5",["hindu_temple"]],["1F54D",["synagogue"]],["26E9-FE0F",["shinto_shrine"]],["1F54B",["kaaba"]],["26F2",["fountain"]],["26FA",["tent"]],["1F301",["foggy"]],["1F303",["night_with_stars"]],["1F3D9-FE0F",["cityscape"]],["1F304",["sunrise_over_mountains"]],["1F305",["sunrise"]],["1F306",["city_sunset"]],["1F307",["city_sunrise"]],["1F309",["bridge_at_night"]],["2668-FE0F",["hotsprings"]],["1F3A0",["carousel_horse"]],["1F3A1",["ferris_wheel"]],["1F3A2",["roller_coaster"]],["1F488",["barber"]],["1F3AA",["circus_tent"]],["1F682",["steam_locomotive"]],["1F683",["railway_car"]],["1F684",["bullettrain_side"]],["1F685",["bullettrain_front"]],["1F686",["train2"]],["1F687",["metro"]],["1F688",["light_rail"]],["1F689",["station"]],["1F68A",["tram"]],["1F69D",["monorail"]],["1F69E",["mountain_railway"]],["1F68B",["train"]],["1F68C",["bus"]],["1F68D",["oncoming_bus"]],["1F68E",["trolleybus"]],["1F690",["minibus"]],["1F691",["ambulance"]],["1F692",["fire_engine"]],["1F693",["police_car"]],["1F694",["oncoming_police_car"]],["1F695",["taxi"]],["1F696",["oncoming_taxi"]],["1F697",["car","red_car"]],["1F698",["oncoming_automobile"]],["1F699",["blue_car"]],["1F6FB",["pickup_truck"]],["1F69A",["truck"]],["1F69B",["articulated_lorry"]],["1F69C",["tractor"]],["1F3CE-FE0F",["racing_car"]],["1F3CD-FE0F",["racing_motorcycle"]],["1F6F5",["motor_scooter"]],["1F9BD",["manual_wheelchair"]],["1F9BC",["motorized_wheelchair"]],["1F6FA",["auto_rickshaw"]],["1F6B2",["bike"]],["1F6F4",["scooter"]],["1F6F9",["skateboard"]],["1F6FC",["roller_skate"]],["1F68F",["busstop"]],["1F6E3-FE0F",["motorway"]],["1F6E4-FE0F",["railway_track"]],["1F6E2-FE0F",["oil_drum"]],["26FD",["fuelpump"]],["1F6A8",["rotating_light"]],["1F6A5",["traffic_light"]],["1F6A6",["vertical_traffic_light"]],["1F6D1",["octagonal_sign"]],["1F6A7",["construction"]],["2693",["anchor"]],["26F5",["boat","sailboat"]],["1F6F6",["canoe"]],["1F6A4",["speedboat"]],["1F6F3-FE0F",["passenger_ship"]],["26F4-FE0F",["ferry"]],["1F6E5-FE0F",["motor_boat"]],["1F6A2",["ship"]],["2708-FE0F",["airplane"]],["1F6E9-FE0F",["small_airplane"]],["1F6EB",["airplane_departure"]],["1F6EC",["airplane_arriving"]],["1FA82",["parachute"]],["1F4BA",["seat"]],["1F681",["helicopter"]],["1F69F",["suspension_railway"]],["1F6A0",["mountain_cableway"]],["1F6A1",["aerial_tramway"]],["1F6F0-FE0F",["satellite"]],["1F680",["rocket"]],["1F6F8",["flying_saucer"]],["1F6CE-FE0F",["bellhop_bell"]],["1F9F3",["luggage"]],["231B",["hourglass"]],["23F3",["hourglass_flowing_sand"]],["231A",["watch"]],["23F0",["alarm_clock"]],["23F1-FE0F",["stopwatch"]],["23F2-FE0F",["timer_clock"]],["1F570-FE0F",["mantelpiece_clock"]],["1F55B",["clock12"]],["1F567",["clock1230"]],["1F550",["clock1"]],["1F55C",["clock130"]],["1F551",["clock2"]],["1F55D",["clock230"]],["1F552",["clock3"]],["1F55E",["clock330"]],["1F553",["clock4"]],["1F55F",["clock430"]],["1F554",["clock5"]],["1F560",["clock530"]],["1F555",["clock6"]],["1F561",["clock630"]],["1F556",["clock7"]],["1F562",["clock730"]],["1F557",["clock8"]],["1F563",["clock830"]],["1F558",["clock9"]],["1F564",["clock930"]],["1F559",["clock10"]],["1F565",["clock1030"]],["1F55A",["clock11"]],["1F566",["clock1130"]],["1F311",["new_moon"]],["1F312",["waxing_crescent_moon"]],["1F313",["first_quarter_moon"]],["1F314",["moon","waxing_gibbous_moon"]],["1F315",["full_moon"]],["1F316",["waning_gibbous_moon"]],["1F317",["last_quarter_moon"]],["1F318",["waning_crescent_moon"]],["1F319",["crescent_moon"]],["1F31A",["new_moon_with_face"]],["1F31B",["first_quarter_moon_with_face"]],["1F31C",["last_quarter_moon_with_face"]],["1F321-FE0F",["thermometer"]],["2600-FE0F",["sunny"]],["1F31D",["full_moon_with_face"]],["1F31E",["sun_with_face"]],["1FA90",["ringed_planet"]],["2B50",["star"]],["1F31F",["star2"]],["1F320",["stars"]],["1F30C",["milky_way"]],["2601-FE0F",["cloud"]],["26C5",["partly_sunny"]],["26C8-FE0F",["thunder_cloud_and_rain"]],["1F324-FE0F",["mostly_sunny","sun_small_cloud"]],["1F325-FE0F",["barely_sunny","sun_behind_cloud"]],["1F326-FE0F",["partly_sunny_rain","sun_behind_rain_cloud"]],["1F327-FE0F",["rain_cloud"]],["1F328-FE0F",["snow_cloud"]],["1F329-FE0F",["lightning","lightning_cloud"]],["1F32A-FE0F",["tornado","tornado_cloud"]],["1F32B-FE0F",["fog"]],["1F32C-FE0F",["wind_blowing_face"]],["1F300",["cyclone"]],["1F308",["rainbow"]],["1F302",["closed_umbrella"]],["2602-FE0F",["umbrella"]],["2614",["umbrella_with_rain_drops"]],["26F1-FE0F",["umbrella_on_ground"]],["26A1",["zap"]],["2744-FE0F",["snowflake"]],["2603-FE0F",["snowman"]],["26C4",["snowman_without_snow"]],["2604-FE0F",["comet"]],["1F525",["fire"]],["1F4A7",["droplet"]],["1F30A",["ocean"]]],["objects",["Objects"]],[["1F453",["eyeglasses"]],["1F576-FE0F",["dark_sunglasses"]],["1F97D",["goggles"]],["1F97C",["lab_coat"]],["1F9BA",["safety_vest"]],["1F454",["necktie"]],["1F455",["shirt","tshirt"]],["1F456",["jeans"]],["1F9E3",["scarf"]],["1F9E4",["gloves"]],["1F9E5",["coat"]],["1F9E6",["socks"]],["1F457",["dress"]],["1F458",["kimono"]],["1F97B",["sari"]],["1FA71",["one-piece_swimsuit"]],["1FA72",["briefs"]],["1FA73",["shorts"]],["1F459",["bikini"]],["1F45A",["womans_clothes"]],["1F45B",["purse"]],["1F45C",["handbag"]],["1F45D",["pouch"]],["1F6CD-FE0F",["shopping_bags"]],["1F392",["school_satchel"]],["1FA74",["thong_sandal"]],["1F45E",["mans_shoe","shoe"]],["1F45F",["athletic_shoe"]],["1F97E",["hiking_boot"]],["1F97F",["womans_flat_shoe"]],["1F460",["high_heel"]],["1F461",["sandal"]],["1FA70",["ballet_shoes"]],["1F462",["boot"]],["1F451",["crown"]],["1F452",["womans_hat"]],["1F3A9",["tophat"]],["1F393",["mortar_board"]],["1F9E2",["billed_cap"]],["1FA96",["military_helmet"]],["26D1-FE0F",["helmet_with_white_cross"]],["1F4FF",["prayer_beads"]],["1F484",["lipstick"]],["1F48D",["ring"]],["1F48E",["gem"]],["1F507",["mute"]],["1F508",["speaker"]],["1F509",["sound"]],["1F50A",["loud_sound"]],["1F4E2",["loudspeaker"]],["1F4E3",["mega"]],["1F4EF",["postal_horn"]],["1F514",["bell"]],["1F515",["no_bell"]],["1F3BC",["musical_score"]],["1F3B5",["musical_note"]],["1F3B6",["notes"]],["1F399-FE0F",["studio_microphone"]],["1F39A-FE0F",["level_slider"]],["1F39B-FE0F",["control_knobs"]],["1F3A4",["microphone"]],["1F3A7",["headphones"]],["1F4FB",["radio"]],["1F3B7",["saxophone"]],["1FA97",["accordion"]],["1F3B8",["guitar"]],["1F3B9",["musical_keyboard"]],["1F3BA",["trumpet"]],["1F3BB",["violin"]],["1FA95",["banjo"]],["1F941",["drum_with_drumsticks"]],["1FA98",["long_drum"]],["1F4F1",["iphone"]],["1F4F2",["calling"]],["260E-FE0F",["phone","telephone"]],["1F4DE",["telephone_receiver"]],["1F4DF",["pager"]],["1F4E0",["fax"]],["1F50B",["battery"]],["1F50C",["electric_plug"]],["1F4BB",["computer"]],["1F5A5-FE0F",["desktop_computer"]],["1F5A8-FE0F",["printer"]],["2328-FE0F",["keyboard"]],["1F5B1-FE0F",["three_button_mouse"]],["1F5B2-FE0F",["trackball"]],["1F4BD",["minidisc"]],["1F4BE",["floppy_disk"]],["1F4BF",["cd"]],["1F4C0",["dvd"]],["1F9EE",["abacus"]],["1F3A5",["movie_camera"]],["1F39E-FE0F",["film_frames"]],["1F4FD-FE0F",["film_projector"]],["1F3AC",["clapper"]],["1F4FA",["tv"]],["1F4F7",["camera"]],["1F4F8",["camera_with_flash"]],["1F4F9",["video_camera"]],["1F4FC",["vhs"]],["1F50D",["mag"]],["1F50E",["mag_right"]],["1F56F-FE0F",["candle"]],["1F4A1",["bulb"]],["1F526",["flashlight"]],["1F3EE",["izakaya_lantern","lantern"]],["1FA94",["diya_lamp"]],["1F4D4",["notebook_with_decorative_cover"]],["1F4D5",["closed_book"]],["1F4D6",["book","open_book"]],["1F4D7",["green_book"]],["1F4D8",["blue_book"]],["1F4D9",["orange_book"]],["1F4DA",["books"]],["1F4D3",["notebook"]],["1F4D2",["ledger"]],["1F4C3",["page_with_curl"]],["1F4DC",["scroll"]],["1F4C4",["page_facing_up"]],["1F4F0",["newspaper"]],["1F5DE-FE0F",["rolled_up_newspaper"]],["1F4D1",["bookmark_tabs"]],["1F516",["bookmark"]],["1F3F7-FE0F",["label"]],["1F4B0",["moneybag"]],["1FA99",["coin"]],["1F4B4",["yen"]],["1F4B5",["dollar"]],["1F4B6",["euro"]],["1F4B7",["pound"]],["1F4B8",["money_with_wings"]],["1F4B3",["credit_card"]],["1F9FE",["receipt"]],["1F4B9",["chart"]],["2709-FE0F",["email","envelope"]],["1F4E7",["e-mail"]],["1F4E8",["incoming_envelope"]],["1F4E9",["envelope_with_arrow"]],["1F4E4",["outbox_tray"]],["1F4E5",["inbox_tray"]],["1F4E6",["package"]],["1F4EB",["mailbox"]],["1F4EA",["mailbox_closed"]],["1F4EC",["mailbox_with_mail"]],["1F4ED",["mailbox_with_no_mail"]],["1F4EE",["postbox"]],["1F5F3-FE0F",["ballot_box_with_ballot"]],["270F-FE0F",["pencil2"]],["2712-FE0F",["black_nib"]],["1F58B-FE0F",["lower_left_fountain_pen"]],["1F58A-FE0F",["lower_left_ballpoint_pen"]],["1F58C-FE0F",["lower_left_paintbrush"]],["1F58D-FE0F",["lower_left_crayon"]],["1F4DD",["memo","pencil"]],["1F4BC",["briefcase"]],["1F4C1",["file_folder"]],["1F4C2",["open_file_folder"]],["1F5C2-FE0F",["card_index_dividers"]],["1F4C5",["date"]],["1F4C6",["calendar"]],["1F5D2-FE0F",["spiral_note_pad"]],["1F5D3-FE0F",["spiral_calendar_pad"]],["1F4C7",["card_index"]],["1F4C8",["chart_with_upwards_trend"]],["1F4C9",["chart_with_downwards_trend"]],["1F4CA",["bar_chart"]],["1F4CB",["clipboard"]],["1F4CC",["pushpin"]],["1F4CD",["round_pushpin"]],["1F4CE",["paperclip"]],["1F587-FE0F",["linked_paperclips"]],["1F4CF",["straight_ruler"]],["1F4D0",["triangular_ruler"]],["2702-FE0F",["scissors"]],["1F5C3-FE0F",["card_file_box"]],["1F5C4-FE0F",["file_cabinet"]],["1F5D1-FE0F",["wastebasket"]],["1F512",["lock"]],["1F513",["unlock"]],["1F50F",["lock_with_ink_pen"]],["1F510",["closed_lock_with_key"]],["1F511",["key"]],["1F5DD-FE0F",["old_key"]],["1F528",["hammer"]],["1FA93",["axe"]],["26CF-FE0F",["pick"]],["2692-FE0F",["hammer_and_pick"]],["1F6E0-FE0F",["hammer_and_wrench"]],["1F5E1-FE0F",["dagger_knife"]],["2694-FE0F",["crossed_swords"]],["1F52B",["gun"]],["1FA83",["boomerang"]],["1F3F9",["bow_and_arrow"]],["1F6E1-FE0F",["shield"]],["1FA9A",["carpentry_saw"]],["1F527",["wrench"]],["1FA9B",["screwdriver"]],["1F529",["nut_and_bolt"]],["2699-FE0F",["gear"]],["1F5DC-FE0F",["compression"]],["2696-FE0F",["scales"]],["1F9AF",["probing_cane"]],["1F517",["link"]],["26D3-FE0F",["chains"]],["1FA9D",["hook"]],["1F9F0",["toolbox"]],["1F9F2",["magnet"]],["1FA9C",["ladder"]],["2697-FE0F",["alembic"]],["1F9EA",["test_tube"]],["1F9EB",["petri_dish"]],["1F9EC",["dna"]],["1F52C",["microscope"]],["1F52D",["telescope"]],["1F4E1",["satellite_antenna"]],["1F489",["syringe"]],["1FA78",["drop_of_blood"]],["1F48A",["pill"]],["1FA79",["adhesive_bandage"]],["1FA7A",["stethoscope"]],["1F6AA",["door"]],["1F6D7",["elevator"]],["1FA9E",["mirror"]],["1FA9F",["window"]],["1F6CF-FE0F",["bed"]],["1F6CB-FE0F",["couch_and_lamp"]],["1FA91",["chair"]],["1F6BD",["toilet"]],["1FAA0",["plunger"]],["1F6BF",["shower"]],["1F6C1",["bathtub"]],["1FAA4",["mouse_trap"]],["1FA92",["razor"]],["1F9F4",["lotion_bottle"]],["1F9F7",["safety_pin"]],["1F9F9",["broom"]],["1F9FA",["basket"]],["1F9FB",["roll_of_paper"]],["1FAA3",["bucket"]],["1F9FC",["soap"]],["1FAA5",["toothbrush"]],["1F9FD",["sponge"]],["1F9EF",["fire_extinguisher"]],["1F6D2",["shopping_trolley"]],["1F6AC",["smoking"]],["26B0-FE0F",["coffin"]],["1FAA6",["headstone"]],["26B1-FE0F",["funeral_urn"]],["1F5FF",["moyai"]],["1FAA7",["placard"]]],["symbols",["Symbols"]],[["1F3E7",["atm"]],["1F6AE",["put_litter_in_its_place"]],["1F6B0",["potable_water"]],["267F",["wheelchair"]],["1F6B9",["mens"]],["1F6BA",["womens"]],["1F6BB",["restroom"]],["1F6BC",["baby_symbol"]],["1F6BE",["wc"]],["1F6C2",["passport_control"]],["1F6C3",["customs"]],["1F6C4",["baggage_claim"]],["1F6C5",["left_luggage"]],["26A0-FE0F",["warning"]],["1F6B8",["children_crossing"]],["26D4",["no_entry"]],["1F6AB",["no_entry_sign"]],["1F6B3",["no_bicycles"]],["1F6AD",["no_smoking"]],["1F6AF",["do_not_litter"]],["1F6B1",["non-potable_water"]],["1F6B7",["no_pedestrians"]],["1F4F5",["no_mobile_phones"]],["1F51E",["underage"]],["2622-FE0F",["radioactive_sign"]],["2623-FE0F",["biohazard_sign"]],["2B06-FE0F",["arrow_up"]],["2197-FE0F",["arrow_upper_right"]],["27A1-FE0F",["arrow_right"]],["2198-FE0F",["arrow_lower_right"]],["2B07-FE0F",["arrow_down"]],["2199-FE0F",["arrow_lower_left"]],["2B05-FE0F",["arrow_left"]],["2196-FE0F",["arrow_upper_left"]],["2195-FE0F",["arrow_up_down"]],["2194-FE0F",["left_right_arrow"]],["21A9-FE0F",["leftwards_arrow_with_hook"]],["21AA-FE0F",["arrow_right_hook"]],["2934-FE0F",["arrow_heading_up"]],["2935-FE0F",["arrow_heading_down"]],["1F503",["arrows_clockwise"]],["1F504",["arrows_counterclockwise"]],["1F519",["back"]],["1F51A",["end"]],["1F51B",["on"]],["1F51C",["soon"]],["1F51D",["top"]],["1F6D0",["place_of_worship"]],["269B-FE0F",["atom_symbol"]],["1F549-FE0F",["om_symbol"]],["2721-FE0F",["star_of_david"]],["2638-FE0F",["wheel_of_dharma"]],["262F-FE0F",["yin_yang"]],["271D-FE0F",["latin_cross"]],["2626-FE0F",["orthodox_cross"]],["262A-FE0F",["star_and_crescent"]],["262E-FE0F",["peace_symbol"]],["1F54E",["menorah_with_nine_branches"]],["1F52F",["six_pointed_star"]],["2648",["aries"]],["2649",["taurus"]],["264A",["gemini"]],["264B",["cancer"]],["264C",["leo"]],["264D",["virgo"]],["264E",["libra"]],["264F",["scorpius"]],["2650",["sagittarius"]],["2651",["capricorn"]],["2652",["aquarius"]],["2653",["pisces"]],["26CE",["ophiuchus"]],["1F500",["twisted_rightwards_arrows"]],["1F501",["repeat"]],["1F502",["repeat_one"]],["25B6-FE0F",["arrow_forward"]],["23E9",["fast_forward"]],["23ED-FE0F",["black_right_pointing_double_triangle_with_vertical_bar"]],["23EF-FE0F",["black_right_pointing_triangle_with_double_vertical_bar"]],["25C0-FE0F",["arrow_backward"]],["23EA",["rewind"]],["23EE-FE0F",["black_left_pointing_double_triangle_with_vertical_bar"]],["1F53C",["arrow_up_small"]],["23EB",["arrow_double_up"]],["1F53D",["arrow_down_small"]],["23EC",["arrow_double_down"]],["23F8-FE0F",["double_vertical_bar"]],["23F9-FE0F",["black_square_for_stop"]],["23FA-FE0F",["black_circle_for_record"]],["23CF-FE0F",["eject"]],["1F3A6",["cinema"]],["1F505",["low_brightness"]],["1F506",["high_brightness"]],["1F4F6",["signal_strength"]],["1F4F3",["vibration_mode"]],["1F4F4",["mobile_phone_off"]],["2640-FE0F",["female_sign"]],["2642-FE0F",["male_sign"]],["26A7-FE0F",["transgender_symbol"]],["2716-FE0F",["heavy_multiplication_x"]],["2795",["heavy_plus_sign"]],["2796",["heavy_minus_sign"]],["2797",["heavy_division_sign"]],["267E-FE0F",["infinity"]],["203C-FE0F",["bangbang"]],["2049-FE0F",["interrobang"]],["2753",["question"]],["2754",["grey_question"]],["2755",["grey_exclamation"]],["2757",["exclamation","heavy_exclamation_mark"]],["3030-FE0F",["wavy_dash"]],["1F4B1",["currency_exchange"]],["1F4B2",["heavy_dollar_sign"]],["2695-FE0F",["medical_symbol","staff_of_aesculapius"]],["267B-FE0F",["recycle"]],["269C-FE0F",["fleur_de_lis"]],["1F531",["trident"]],["1F4DB",["name_badge"]],["1F530",["beginner"]],["2B55",["o"]],["2705",["white_check_mark"]],["2611-FE0F",["ballot_box_with_check"]],["2714-FE0F",["heavy_check_mark"]],["274C",["x"]],["274E",["negative_squared_cross_mark"]],["27B0",["curly_loop"]],["27BF",["loop"]],["303D-FE0F",["part_alternation_mark"]],["2733-FE0F",["eight_spoked_asterisk"]],["2734-FE0F",["eight_pointed_black_star"]],["2747-FE0F",["sparkle"]],["00A9-FE0F",["copyright"]],["00AE-FE0F",["registered"]],["2122-FE0F",["tm"]],["0023-FE0F-20E3",["hash"]],["002A-FE0F-20E3",["keycap_star"]],["0030-FE0F-20E3",["zero"]],["0031-FE0F-20E3",["one"]],["0032-FE0F-20E3",["two"]],["0033-FE0F-20E3",["three"]],["0034-FE0F-20E3",["four"]],["0035-FE0F-20E3",["five"]],["0036-FE0F-20E3",["six"]],["0037-FE0F-20E3",["seven"]],["0038-FE0F-20E3",["eight"]],["0039-FE0F-20E3",["nine"]],["1F51F",["keycap_ten"]],["1F520",["capital_abcd"]],["1F521",["abcd"]],["1F522",["1234"]],["1F523",["symbols"]],["1F524",["abc"]],["1F170-FE0F",["a"]],["1F18E",["ab"]],["1F171-FE0F",["b"]],["1F191",["cl"]],["1F192",["cool"]],["1F193",["free"]],["2139-FE0F",["information_source"]],["1F194",["id"]],["24C2-FE0F",["m"]],["1F195",["new"]],["1F196",["ng"]],["1F17E-FE0F",["o2"]],["1F197",["ok"]],["1F17F-FE0F",["parking"]],["1F198",["sos"]],["1F199",["up"]],["1F19A",["vs"]],["1F201",["koko"]],["1F202-FE0F",["sa"]],["1F237-FE0F",["u6708"]],["1F236",["u6709"]],["1F22F",["u6307"]],["1F250",["ideograph_advantage"]],["1F239",["u5272"]],["1F21A",["u7121"]],["1F232",["u7981"]],["1F251",["accept"]],["1F238",["u7533"]],["1F234",["u5408"]],["1F233",["u7a7a"]],["3297-FE0F",["congratulations"]],["3299-FE0F",["secret"]],["1F23A",["u55b6"]],["1F235",["u6e80"]],["1F534",["red_circle"]],["1F7E0",["large_orange_circle"]],["1F7E1",["large_yellow_circle"]],["1F7E2",["large_green_circle"]],["1F535",["large_blue_circle"]],["1F7E3",["large_purple_circle"]],["1F7E4",["large_brown_circle"]],["26AB",["black_circle"]],["26AA",["white_circle"]],["1F7E5",["large_red_square"]],["1F7E7",["large_orange_square"]],["1F7E8",["large_yellow_square"]],["1F7E9",["large_green_square"]],["1F7E6",["large_blue_square"]],["1F7EA",["large_purple_square"]],["1F7EB",["large_brown_square"]],["2B1B",["black_large_square"]],["2B1C",["white_large_square"]],["25FC-FE0F",["black_medium_square"]],["25FB-FE0F",["white_medium_square"]],["25FE",["black_medium_small_square"]],["25FD",["white_medium_small_square"]],["25AA-FE0F",["black_small_square"]],["25AB-FE0F",["white_small_square"]],["1F536",["large_orange_diamond"]],["1F537",["large_blue_diamond"]],["1F538",["small_orange_diamond"]],["1F539",["small_blue_diamond"]],["1F53A",["small_red_triangle"]],["1F53B",["small_red_triangle_down"]],["1F4A0",["diamond_shape_with_a_dot_inside"]],["1F518",["radio_button"]],["1F533",["white_square_button"]],["1F532",["black_square_button"]]],["flags",["Flags"]],[["1F3C1",["checkered_flag"]],["1F6A9",["triangular_flag_on_post"]],["1F38C",["crossed_flags"]],["1F3F4",["waving_black_flag"]],["1F3F3-FE0F",["waving_white_flag"]],["1F3F3-FE0F-200D-1F308",["rainbow-flag"]],["1F3F3-FE0F-200D-26A7-FE0F",["transgender_flag"]],["1F3F4-200D-2620-FE0F",["pirate_flag"]],["1F1E6-1F1E8",["flag-ac"]],["1F1E6-1F1E9",["flag-ad"]],["1F1E6-1F1EA",["flag-ae"]],["1F1E6-1F1EB",["flag-af"]],["1F1E6-1F1EC",["flag-ag"]],["1F1E6-1F1EE",["flag-ai"]],["1F1E6-1F1F1",["flag-al"]],["1F1E6-1F1F2",["flag-am"]],["1F1E6-1F1F4",["flag-ao"]],["1F1E6-1F1F6",["flag-aq"]],["1F1E6-1F1F7",["flag-ar"]],["1F1E6-1F1F8",["flag-as"]],["1F1E6-1F1F9",["flag-at"]],["1F1E6-1F1FA",["flag-au"]],["1F1E6-1F1FC",["flag-aw"]],["1F1E6-1F1FD",["flag-ax"]],["1F1E6-1F1FF",["flag-az"]],["1F1E7-1F1E6",["flag-ba"]],["1F1E7-1F1E7",["flag-bb"]],["1F1E7-1F1E9",["flag-bd"]],["1F1E7-1F1EA",["flag-be"]],["1F1E7-1F1EB",["flag-bf"]],["1F1E7-1F1EC",["flag-bg"]],["1F1E7-1F1ED",["flag-bh"]],["1F1E7-1F1EE",["flag-bi"]],["1F1E7-1F1EF",["flag-bj"]],["1F1E7-1F1F1",["flag-bl"]],["1F1E7-1F1F2",["flag-bm"]],["1F1E7-1F1F3",["flag-bn"]],["1F1E7-1F1F4",["flag-bo"]],["1F1E7-1F1F6",["flag-bq"]],["1F1E7-1F1F7",["flag-br"]],["1F1E7-1F1F8",["flag-bs"]],["1F1E7-1F1F9",["flag-bt"]],["1F1E7-1F1FB",["flag-bv"]],["1F1E7-1F1FC",["flag-bw"]],["1F1E7-1F1FE",["flag-by"]],["1F1E7-1F1FF",["flag-bz"]],["1F1E8-1F1E6",["flag-ca"]],["1F1E8-1F1E8",["flag-cc"]],["1F1E8-1F1E9",["flag-cd"]],["1F1E8-1F1EB",["flag-cf"]],["1F1E8-1F1EC",["flag-cg"]],["1F1E8-1F1ED",["flag-ch"]],["1F1E8-1F1EE",["flag-ci"]],["1F1E8-1F1F0",["flag-ck"]],["1F1E8-1F1F1",["flag-cl"]],["1F1E8-1F1F2",["flag-cm"]],["1F1E8-1F1F3",["cn","flag-cn"]],["1F1E8-1F1F4",["flag-co"]],["1F1E8-1F1F5",["flag-cp"]],["1F1E8-1F1F7",["flag-cr"]],["1F1E8-1F1FA",["flag-cu"]],["1F1E8-1F1FB",["flag-cv"]],["1F1E8-1F1FC",["flag-cw"]],["1F1E8-1F1FD",["flag-cx"]],["1F1E8-1F1FE",["flag-cy"]],["1F1E8-1F1FF",["flag-cz"]],["1F1E9-1F1EA",["de","flag-de"]],["1F1E9-1F1EC",["flag-dg"]],["1F1E9-1F1EF",["flag-dj"]],["1F1E9-1F1F0",["flag-dk"]],["1F1E9-1F1F2",["flag-dm"]],["1F1E9-1F1F4",["flag-do"]],["1F1E9-1F1FF",["flag-dz"]],["1F1EA-1F1E6",["flag-ea"]],["1F1EA-1F1E8",["flag-ec"]],["1F1EA-1F1EA",["flag-ee"]],["1F1EA-1F1EC",["flag-eg"]],["1F1EA-1F1ED",["flag-eh"]],["1F1EA-1F1F7",["flag-er"]],["1F1EA-1F1F8",["es","flag-es"]],["1F1EA-1F1F9",["flag-et"]],["1F1EA-1F1FA",["flag-eu"]],["1F1EB-1F1EE",["flag-fi"]],["1F1EB-1F1EF",["flag-fj"]],["1F1EB-1F1F0",["flag-fk"]],["1F1EB-1F1F2",["flag-fm"]],["1F1EB-1F1F4",["flag-fo"]],["1F1EB-1F1F7",["fr","flag-fr"]],["1F1EC-1F1E6",["flag-ga"]],["1F1EC-1F1E7",["gb","uk","flag-gb"]],["1F1EC-1F1E9",["flag-gd"]],["1F1EC-1F1EA",["flag-ge"]],["1F1EC-1F1EB",["flag-gf"]],["1F1EC-1F1EC",["flag-gg"]],["1F1EC-1F1ED",["flag-gh"]],["1F1EC-1F1EE",["flag-gi"]],["1F1EC-1F1F1",["flag-gl"]],["1F1EC-1F1F2",["flag-gm"]],["1F1EC-1F1F3",["flag-gn"]],["1F1EC-1F1F5",["flag-gp"]],["1F1EC-1F1F6",["flag-gq"]],["1F1EC-1F1F7",["flag-gr"]],["1F1EC-1F1F8",["flag-gs"]],["1F1EC-1F1F9",["flag-gt"]],["1F1EC-1F1FA",["flag-gu"]],["1F1EC-1F1FC",["flag-gw"]],["1F1EC-1F1FE",["flag-gy"]],["1F1ED-1F1F0",["flag-hk"]],["1F1ED-1F1F2",["flag-hm"]],["1F1ED-1F1F3",["flag-hn"]],["1F1ED-1F1F7",["flag-hr"]],["1F1ED-1F1F9",["flag-ht"]],["1F1ED-1F1FA",["flag-hu"]],["1F1EE-1F1E8",["flag-ic"]],["1F1EE-1F1E9",["flag-id"]],["1F1EE-1F1EA",["flag-ie"]],["1F1EE-1F1F1",["flag-il"]],["1F1EE-1F1F2",["flag-im"]],["1F1EE-1F1F3",["flag-in"]],["1F1EE-1F1F4",["flag-io"]],["1F1EE-1F1F6",["flag-iq"]],["1F1EE-1F1F7",["flag-ir"]],["1F1EE-1F1F8",["flag-is"]],["1F1EE-1F1F9",["it","flag-it"]],["1F1EF-1F1EA",["flag-je"]],["1F1EF-1F1F2",["flag-jm"]],["1F1EF-1F1F4",["flag-jo"]],["1F1EF-1F1F5",["jp","flag-jp"]],["1F1F0-1F1EA",["flag-ke"]],["1F1F0-1F1EC",["flag-kg"]],["1F1F0-1F1ED",["flag-kh"]],["1F1F0-1F1EE",["flag-ki"]],["1F1F0-1F1F2",["flag-km"]],["1F1F0-1F1F3",["flag-kn"]],["1F1F0-1F1F5",["flag-kp"]],["1F1F0-1F1F7",["kr","flag-kr"]],["1F1F0-1F1FC",["flag-kw"]],["1F1F0-1F1FE",["flag-ky"]],["1F1F0-1F1FF",["flag-kz"]],["1F1F1-1F1E6",["flag-la"]],["1F1F1-1F1E7",["flag-lb"]],["1F1F1-1F1E8",["flag-lc"]],["1F1F1-1F1EE",["flag-li"]],["1F1F1-1F1F0",["flag-lk"]],["1F1F1-1F1F7",["flag-lr"]],["1F1F1-1F1F8",["flag-ls"]],["1F1F1-1F1F9",["flag-lt"]],["1F1F1-1F1FA",["flag-lu"]],["1F1F1-1F1FB",["flag-lv"]],["1F1F1-1F1FE",["flag-ly"]],["1F1F2-1F1E6",["flag-ma"]],["1F1F2-1F1E8",["flag-mc"]],["1F1F2-1F1E9",["flag-md"]],["1F1F2-1F1EA",["flag-me"]],["1F1F2-1F1EB",["flag-mf"]],["1F1F2-1F1EC",["flag-mg"]],["1F1F2-1F1ED",["flag-mh"]],["1F1F2-1F1F0",["flag-mk"]],["1F1F2-1F1F1",["flag-ml"]],["1F1F2-1F1F2",["flag-mm"]],["1F1F2-1F1F3",["flag-mn"]],["1F1F2-1F1F4",["flag-mo"]],["1F1F2-1F1F5",["flag-mp"]],["1F1F2-1F1F6",["flag-mq"]],["1F1F2-1F1F7",["flag-mr"]],["1F1F2-1F1F8",["flag-ms"]],["1F1F2-1F1F9",["flag-mt"]],["1F1F2-1F1FA",["flag-mu"]],["1F1F2-1F1FB",["flag-mv"]],["1F1F2-1F1FC",["flag-mw"]],["1F1F2-1F1FD",["flag-mx"]],["1F1F2-1F1FE",["flag-my"]],["1F1F2-1F1FF",["flag-mz"]],["1F1F3-1F1E6",["flag-na"]],["1F1F3-1F1E8",["flag-nc"]],["1F1F3-1F1EA",["flag-ne"]],["1F1F3-1F1EB",["flag-nf"]],["1F1F3-1F1EC",["flag-ng"]],["1F1F3-1F1EE",["flag-ni"]],["1F1F3-1F1F1",["flag-nl"]],["1F1F3-1F1F4",["flag-no"]],["1F1F3-1F1F5",["flag-np"]],["1F1F3-1F1F7",["flag-nr"]],["1F1F3-1F1FA",["flag-nu"]],["1F1F3-1F1FF",["flag-nz"]],["1F1F4-1F1F2",["flag-om"]],["1F1F5-1F1E6",["flag-pa"]],["1F1F5-1F1EA",["flag-pe"]],["1F1F5-1F1EB",["flag-pf"]],["1F1F5-1F1EC",["flag-pg"]],["1F1F5-1F1ED",["flag-ph"]],["1F1F5-1F1F0",["flag-pk"]],["1F1F5-1F1F1",["flag-pl"]],["1F1F5-1F1F2",["flag-pm"]],["1F1F5-1F1F3",["flag-pn"]],["1F1F5-1F1F7",["flag-pr"]],["1F1F5-1F1F8",["flag-ps"]],["1F1F5-1F1F9",["flag-pt"]],["1F1F5-1F1FC",["flag-pw"]],["1F1F5-1F1FE",["flag-py"]],["1F1F6-1F1E6",["flag-qa"]],["1F1F7-1F1EA",["flag-re"]],["1F1F7-1F1F4",["flag-ro"]],["1F1F7-1F1F8",["flag-rs"]],["1F1F7-1F1FA",["ru","flag-ru"]],["1F1F7-1F1FC",["flag-rw"]],["1F1F8-1F1E6",["flag-sa"]],["1F1F8-1F1E7",["flag-sb"]],["1F1F8-1F1E8",["flag-sc"]],["1F1F8-1F1E9",["flag-sd"]],["1F1F8-1F1EA",["flag-se"]],["1F1F8-1F1EC",["flag-sg"]],["1F1F8-1F1ED",["flag-sh"]],["1F1F8-1F1EE",["flag-si"]],["1F1F8-1F1EF",["flag-sj"]],["1F1F8-1F1F0",["flag-sk"]],["1F1F8-1F1F1",["flag-sl"]],["1F1F8-1F1F2",["flag-sm"]],["1F1F8-1F1F3",["flag-sn"]],["1F1F8-1F1F4",["flag-so"]],["1F1F8-1F1F7",["flag-sr"]],["1F1F8-1F1F8",["flag-ss"]],["1F1F8-1F1F9",["flag-st"]],["1F1F8-1F1FB",["flag-sv"]],["1F1F8-1F1FD",["flag-sx"]],["1F1F8-1F1FE",["flag-sy"]],["1F1F8-1F1FF",["flag-sz"]],["1F1F9-1F1E6",["flag-ta"]],["1F1F9-1F1E8",["flag-tc"]],["1F1F9-1F1E9",["flag-td"]],["1F1F9-1F1EB",["flag-tf"]],["1F1F9-1F1EC",["flag-tg"]],["1F1F9-1F1ED",["flag-th"]],["1F1F9-1F1EF",["flag-tj"]],["1F1F9-1F1F0",["flag-tk"]],["1F1F9-1F1F1",["flag-tl"]],["1F1F9-1F1F2",["flag-tm"]],["1F1F9-1F1F3",["flag-tn"]],["1F1F9-1F1F4",["flag-to"]],["1F1F9-1F1F7",["flag-tr"]],["1F1F9-1F1F9",["flag-tt"]],["1F1F9-1F1FB",["flag-tv"]],["1F1F9-1F1FC",["flag-tw"]],["1F1F9-1F1FF",["flag-tz"]],["1F1FA-1F1E6",["flag-ua"]],["1F1FA-1F1EC",["flag-ug"]],["1F1FA-1F1F2",["flag-um"]],["1F1FA-1F1F3",["flag-un"]],["1F1FA-1F1F8",["us","flag-us"]],["1F1FA-1F1FE",["flag-uy"]],["1F1FA-1F1FF",["flag-uz"]],["1F1FB-1F1E6",["flag-va"]],["1F1FB-1F1E8",["flag-vc"]],["1F1FB-1F1EA",["flag-ve"]],["1F1FB-1F1EC",["flag-vg"]],["1F1FB-1F1EE",["flag-vi"]],["1F1FB-1F1F3",["flag-vn"]],["1F1FB-1F1FA",["flag-vu"]],["1F1FC-1F1EB",["flag-wf"]],["1F1FC-1F1F8",["flag-ws"]],["1F1FD-1F1F0",["flag-xk"]],["1F1FE-1F1EA",["flag-ye"]],["1F1FE-1F1F9",["flag-yt"]],["1F1FF-1F1E6",["flag-za"]],["1F1FF-1F1F2",["flag-zm"]],["1F1FF-1F1FC",["flag-zw"]],["1F3F4-E0067-E0062-E0065-E006E-E0067-E007F",["flag-england"]],["1F3F4-E0067-E0062-E0073-E0063-E0074-E007F",["flag-scotland"]],["1F3F4-E0067-E0062-E0077-E006C-E0073-E007F",["flag-wales"]]]]')}}]); \ No newline at end of file diff --git a/dist/501.8456a9386c15d5118c1f.js b/dist/501.8456a9386c15d5118c1f.js new file mode 100644 index 000000000..dd6e92b0a --- /dev/null +++ b/dist/501.8456a9386c15d5118c1f.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunktelegram_t=self.webpackChunktelegram_t||[]).push([[501],{7501:F=>{F.exports=JSON.parse('[["people",["Smileys & People"]],[["1F600",["grinning"]],["1F603",["smiley"]],["1F604",["smile"]],["1F601",["grin"]],["1F606",["laughing","satisfied"]],["1F605",["sweat_smile"]],["1F923",["rolling_on_the_floor_laughing"]],["1F602",["joy"]],["1F642",["slightly_smiling_face"]],["1F643",["upside_down_face"]],["1FAE0",["melting_face"]],["1F609",["wink"]],["1F60A",["blush"]],["1F607",["innocent"]],["1F970",["smiling_face_with_3_hearts"]],["1F60D",["heart_eyes"]],["1F929",["star-struck","grinning_face_with_star_eyes"]],["1F618",["kissing_heart"]],["1F617",["kissing"]],["263A-FE0F",["relaxed"]],["1F61A",["kissing_closed_eyes"]],["1F619",["kissing_smiling_eyes"]],["1F972",["smiling_face_with_tear"]],["1F60B",["yum"]],["1F61B",["stuck_out_tongue"]],["1F61C",["stuck_out_tongue_winking_eye"]],["1F92A",["zany_face","grinning_face_with_one_large_and_one_small_eye"]],["1F61D",["stuck_out_tongue_closed_eyes"]],["1F911",["money_mouth_face"]],["1F917",["hugging_face"]],["1F92D",["face_with_hand_over_mouth","smiling_face_with_smiling_eyes_and_hand_covering_mouth"]],["1FAE2",["face_with_open_eyes_and_hand_over_mouth"]],["1FAE3",["face_with_peeking_eye"]],["1F92B",["shushing_face","face_with_finger_covering_closed_lips"]],["1F914",["thinking_face"]],["1FAE1",["saluting_face"]],["1F910",["zipper_mouth_face"]],["1F928",["face_with_raised_eyebrow","face_with_one_eyebrow_raised"]],["1F610",["neutral_face"]],["1F611",["expressionless"]],["1F636",["no_mouth"]],["1FAE5",["dotted_line_face"]],["1F636-200D-1F32B-FE0F",["face_in_clouds"]],["1F60F",["smirk"]],["1F612",["unamused"]],["1F644",["face_with_rolling_eyes"]],["1F62C",["grimacing"]],["1F62E-200D-1F4A8",["face_exhaling"]],["1F925",["lying_face"]],["1F60C",["relieved"]],["1F614",["pensive"]],["1F62A",["sleepy"]],["1F924",["drooling_face"]],["1F634",["sleeping"]],["1F637",["mask"]],["1F912",["face_with_thermometer"]],["1F915",["face_with_head_bandage"]],["1F922",["nauseated_face"]],["1F92E",["face_vomiting","face_with_open_mouth_vomiting"]],["1F927",["sneezing_face"]],["1F975",["hot_face"]],["1F976",["cold_face"]],["1F974",["woozy_face"]],["1F635",["dizzy_face"]],["1F635-200D-1F4AB",["face_with_spiral_eyes"]],["1F92F",["exploding_head","shocked_face_with_exploding_head"]],["1F920",["face_with_cowboy_hat"]],["1F973",["partying_face"]],["1F978",["disguised_face"]],["1F60E",["sunglasses"]],["1F913",["nerd_face"]],["1F9D0",["face_with_monocle"]],["1F615",["confused"]],["1FAE4",["face_with_diagonal_mouth"]],["1F61F",["worried"]],["1F641",["slightly_frowning_face"]],["2639-FE0F",["white_frowning_face"]],["1F62E",["open_mouth"]],["1F62F",["hushed"]],["1F632",["astonished"]],["1F633",["flushed"]],["1F97A",["pleading_face"]],["1F979",["face_holding_back_tears"]],["1F626",["frowning"]],["1F627",["anguished"]],["1F628",["fearful"]],["1F630",["cold_sweat"]],["1F625",["disappointed_relieved"]],["1F622",["cry"]],["1F62D",["sob"]],["1F631",["scream"]],["1F616",["confounded"]],["1F623",["persevere"]],["1F61E",["disappointed"]],["1F613",["sweat"]],["1F629",["weary"]],["1F62B",["tired_face"]],["1F971",["yawning_face"]],["1F624",["triumph"]],["1F621",["rage"]],["1F620",["angry"]],["1F92C",["face_with_symbols_on_mouth","serious_face_with_symbols_covering_mouth"]],["1F608",["smiling_imp"]],["1F47F",["imp"]],["1F480",["skull"]],["2620-FE0F",["skull_and_crossbones"]],["1F4A9",["hankey","poop","shit"]],["1F921",["clown_face"]],["1F479",["japanese_ogre"]],["1F47A",["japanese_goblin"]],["1F47B",["ghost"]],["1F47D",["alien"]],["1F47E",["space_invader"]],["1F916",["robot_face"]],["1F63A",["smiley_cat"]],["1F638",["smile_cat"]],["1F639",["joy_cat"]],["1F63B",["heart_eyes_cat"]],["1F63C",["smirk_cat"]],["1F63D",["kissing_cat"]],["1F640",["scream_cat"]],["1F63F",["crying_cat_face"]],["1F63E",["pouting_cat"]],["1F648",["see_no_evil"]],["1F649",["hear_no_evil"]],["1F64A",["speak_no_evil"]],["1F48B",["kiss"]],["1F48C",["love_letter"]],["1F498",["cupid"]],["1F49D",["gift_heart"]],["1F496",["sparkling_heart"]],["1F497",["heartpulse"]],["1F493",["heartbeat"]],["1F49E",["revolving_hearts"]],["1F495",["two_hearts"]],["1F49F",["heart_decoration"]],["2763-FE0F",["heavy_heart_exclamation_mark_ornament"]],["1F494",["broken_heart"]],["2764-FE0F-200D-1F525",["heart_on_fire"]],["2764-FE0F-200D-1FA79",["mending_heart"]],["2764-FE0F",["heart"]],["1F9E1",["orange_heart"]],["1F49B",["yellow_heart"]],["1F49A",["green_heart"]],["1F499",["blue_heart"]],["1F49C",["purple_heart"]],["1F90E",["brown_heart"]],["1F5A4",["black_heart"]],["1F90D",["white_heart"]],["1F4AF",["100"]],["1F4A2",["anger"]],["1F4A5",["boom","collision"]],["1F4AB",["dizzy"]],["1F4A6",["sweat_drops"]],["1F4A8",["dash"]],["1F573-FE0F",["hole"]],["1F4A3",["bomb"]],["1F4AC",["speech_balloon"]],["1F441-FE0F-200D-1F5E8-FE0F",["eye-in-speech-bubble"]],["1F5E8-FE0F",["left_speech_bubble"]],["1F5EF-FE0F",["right_anger_bubble"]],["1F4AD",["thought_balloon"]],["1F4A4",["zzz"]],["1F44B",["wave"]],["1F91A",["raised_back_of_hand"]],["1F590-FE0F",["raised_hand_with_fingers_splayed"]],["270B",["hand","raised_hand"]],["1F596",["spock-hand"]],["1FAF1",["rightwards_hand"]],["1FAF2",["leftwards_hand"]],["1FAF3",["palm_down_hand"]],["1FAF4",["palm_up_hand"]],["1F44C",["ok_hand"]],["1F90C",["pinched_fingers"]],["1F90F",["pinching_hand"]],["270C-FE0F",["v"]],["1F91E",["crossed_fingers","hand_with_index_and_middle_fingers_crossed"]],["1FAF0",["hand_with_index_finger_and_thumb_crossed"]],["1F91F",["i_love_you_hand_sign"]],["1F918",["the_horns","sign_of_the_horns"]],["1F919",["call_me_hand"]],["1F448",["point_left"]],["1F449",["point_right"]],["1F446",["point_up_2"]],["1F595",["middle_finger","reversed_hand_with_middle_finger_extended"]],["1F447",["point_down"]],["261D-FE0F",["point_up"]],["1FAF5",["index_pointing_at_the_viewer"]],["1F44D",["+1","thumbsup"]],["1F44E",["-1","thumbsdown"]],["270A",["fist"]],["1F44A",["facepunch","punch"]],["1F91B",["left-facing_fist"]],["1F91C",["right-facing_fist"]],["1F44F",["clap"]],["1F64C",["raised_hands"]],["1FAF6",["heart_hands"]],["1F450",["open_hands"]],["1F932",["palms_up_together"]],["1F91D",["handshake"]],["1F64F",["pray"]],["270D-FE0F",["writing_hand"]],["1F485",["nail_care"]],["1F933",["selfie"]],["1F4AA",["muscle"]],["1F9BE",["mechanical_arm"]],["1F9BF",["mechanical_leg"]],["1F9B5",["leg"]],["1F9B6",["foot"]],["1F442",["ear"]],["1F9BB",["ear_with_hearing_aid"]],["1F443",["nose"]],["1F9E0",["brain"]],["1FAC0",["anatomical_heart"]],["1FAC1",["lungs"]],["1F9B7",["tooth"]],["1F9B4",["bone"]],["1F440",["eyes"]],["1F441-FE0F",["eye"]],["1F445",["tongue"]],["1F444",["lips"]],["1FAE6",["biting_lip"]],["1F476",["baby"]],["1F9D2",["child"]],["1F466",["boy"]],["1F467",["girl"]],["1F9D1",["adult"]],["1F471",["person_with_blond_hair"]],["1F468",["man"]],["1F9D4",["bearded_person"]],["1F9D4-200D-2642-FE0F",["man_with_beard"]],["1F9D4-200D-2640-FE0F",["woman_with_beard"]],["1F468-200D-1F9B0",["red_haired_man"]],["1F468-200D-1F9B1",["curly_haired_man"]],["1F468-200D-1F9B3",["white_haired_man"]],["1F468-200D-1F9B2",["bald_man"]],["1F469",["woman"]],["1F469-200D-1F9B0",["red_haired_woman"]],["1F9D1-200D-1F9B0",["red_haired_person"]],["1F469-200D-1F9B1",["curly_haired_woman"]],["1F9D1-200D-1F9B1",["curly_haired_person"]],["1F469-200D-1F9B3",["white_haired_woman"]],["1F9D1-200D-1F9B3",["white_haired_person"]],["1F469-200D-1F9B2",["bald_woman"]],["1F9D1-200D-1F9B2",["bald_person"]],["1F471-200D-2640-FE0F",["blond-haired-woman"]],["1F471-200D-2642-FE0F",["blond-haired-man"]],["1F9D3",["older_adult"]],["1F474",["older_man"]],["1F475",["older_woman"]],["1F64D",["person_frowning"]],["1F64D-200D-2642-FE0F",["man-frowning"]],["1F64D-200D-2640-FE0F",["woman-frowning"]],["1F64E",["person_with_pouting_face"]],["1F64E-200D-2642-FE0F",["man-pouting"]],["1F64E-200D-2640-FE0F",["woman-pouting"]],["1F645",["no_good"]],["1F645-200D-2642-FE0F",["man-gesturing-no"]],["1F645-200D-2640-FE0F",["woman-gesturing-no"]],["1F646",["ok_woman"]],["1F646-200D-2642-FE0F",["man-gesturing-ok"]],["1F646-200D-2640-FE0F",["woman-gesturing-ok"]],["1F481",["information_desk_person"]],["1F481-200D-2642-FE0F",["man-tipping-hand"]],["1F481-200D-2640-FE0F",["woman-tipping-hand"]],["1F64B",["raising_hand"]],["1F64B-200D-2642-FE0F",["man-raising-hand"]],["1F64B-200D-2640-FE0F",["woman-raising-hand"]],["1F9CF",["deaf_person"]],["1F9CF-200D-2642-FE0F",["deaf_man"]],["1F9CF-200D-2640-FE0F",["deaf_woman"]],["1F647",["bow"]],["1F647-200D-2642-FE0F",["man-bowing"]],["1F647-200D-2640-FE0F",["woman-bowing"]],["1F926",["face_palm"]],["1F926-200D-2642-FE0F",["man-facepalming"]],["1F926-200D-2640-FE0F",["woman-facepalming"]],["1F937",["shrug"]],["1F937-200D-2642-FE0F",["man-shrugging"]],["1F937-200D-2640-FE0F",["woman-shrugging"]],["1F9D1-200D-2695-FE0F",["health_worker"]],["1F468-200D-2695-FE0F",["male-doctor"]],["1F469-200D-2695-FE0F",["female-doctor"]],["1F9D1-200D-1F393",["student"]],["1F468-200D-1F393",["male-student"]],["1F469-200D-1F393",["female-student"]],["1F9D1-200D-1F3EB",["teacher"]],["1F468-200D-1F3EB",["male-teacher"]],["1F469-200D-1F3EB",["female-teacher"]],["1F9D1-200D-2696-FE0F",["judge"]],["1F468-200D-2696-FE0F",["male-judge"]],["1F469-200D-2696-FE0F",["female-judge"]],["1F9D1-200D-1F33E",["farmer"]],["1F468-200D-1F33E",["male-farmer"]],["1F469-200D-1F33E",["female-farmer"]],["1F9D1-200D-1F373",["cook"]],["1F468-200D-1F373",["male-cook"]],["1F469-200D-1F373",["female-cook"]],["1F9D1-200D-1F527",["mechanic"]],["1F468-200D-1F527",["male-mechanic"]],["1F469-200D-1F527",["female-mechanic"]],["1F9D1-200D-1F3ED",["factory_worker"]],["1F468-200D-1F3ED",["male-factory-worker"]],["1F469-200D-1F3ED",["female-factory-worker"]],["1F9D1-200D-1F4BC",["office_worker"]],["1F468-200D-1F4BC",["male-office-worker"]],["1F469-200D-1F4BC",["female-office-worker"]],["1F9D1-200D-1F52C",["scientist"]],["1F468-200D-1F52C",["male-scientist"]],["1F469-200D-1F52C",["female-scientist"]],["1F9D1-200D-1F4BB",["technologist"]],["1F468-200D-1F4BB",["male-technologist"]],["1F469-200D-1F4BB",["female-technologist"]],["1F9D1-200D-1F3A4",["singer"]],["1F468-200D-1F3A4",["male-singer"]],["1F469-200D-1F3A4",["female-singer"]],["1F9D1-200D-1F3A8",["artist"]],["1F468-200D-1F3A8",["male-artist"]],["1F469-200D-1F3A8",["female-artist"]],["1F9D1-200D-2708-FE0F",["pilot"]],["1F468-200D-2708-FE0F",["male-pilot"]],["1F469-200D-2708-FE0F",["female-pilot"]],["1F9D1-200D-1F680",["astronaut"]],["1F468-200D-1F680",["male-astronaut"]],["1F469-200D-1F680",["female-astronaut"]],["1F9D1-200D-1F692",["firefighter"]],["1F468-200D-1F692",["male-firefighter"]],["1F469-200D-1F692",["female-firefighter"]],["1F46E",["cop"]],["1F46E-200D-2642-FE0F",["male-police-officer"]],["1F46E-200D-2640-FE0F",["female-police-officer"]],["1F575-FE0F",["sleuth_or_spy"]],["1F575-FE0F-200D-2642-FE0F",["male-detective"]],["1F575-FE0F-200D-2640-FE0F",["female-detective"]],["1F482",["guardsman"]],["1F482-200D-2642-FE0F",["male-guard"]],["1F482-200D-2640-FE0F",["female-guard"]],["1F977",["ninja"]],["1F477",["construction_worker"]],["1F477-200D-2642-FE0F",["male-construction-worker"]],["1F477-200D-2640-FE0F",["female-construction-worker"]],["1FAC5",["person_with_crown"]],["1F934",["prince"]],["1F478",["princess"]],["1F473",["man_with_turban"]],["1F473-200D-2642-FE0F",["man-wearing-turban"]],["1F473-200D-2640-FE0F",["woman-wearing-turban"]],["1F472",["man_with_gua_pi_mao"]],["1F9D5",["person_with_headscarf"]],["1F935",["person_in_tuxedo"]],["1F935-200D-2642-FE0F",["man_in_tuxedo"]],["1F935-200D-2640-FE0F",["woman_in_tuxedo"]],["1F470",["bride_with_veil"]],["1F470-200D-2642-FE0F",["man_with_veil"]],["1F470-200D-2640-FE0F",["woman_with_veil"]],["1F930",["pregnant_woman"]],["1FAC3",["pregnant_man"]],["1FAC4",["pregnant_person"]],["1F931",["breast-feeding"]],["1F469-200D-1F37C",["woman_feeding_baby"]],["1F468-200D-1F37C",["man_feeding_baby"]],["1F9D1-200D-1F37C",["person_feeding_baby"]],["1F47C",["angel"]],["1F385",["santa"]],["1F936",["mrs_claus","mother_christmas"]],["1F9D1-200D-1F384",["mx_claus"]],["1F9B8",["superhero"]],["1F9B8-200D-2642-FE0F",["male_superhero"]],["1F9B8-200D-2640-FE0F",["female_superhero"]],["1F9B9",["supervillain"]],["1F9B9-200D-2642-FE0F",["male_supervillain"]],["1F9B9-200D-2640-FE0F",["female_supervillain"]],["1F9D9",["mage"]],["1F9D9-200D-2642-FE0F",["male_mage"]],["1F9D9-200D-2640-FE0F",["female_mage"]],["1F9DA",["fairy"]],["1F9DA-200D-2642-FE0F",["male_fairy"]],["1F9DA-200D-2640-FE0F",["female_fairy"]],["1F9DB",["vampire"]],["1F9DB-200D-2642-FE0F",["male_vampire"]],["1F9DB-200D-2640-FE0F",["female_vampire"]],["1F9DC",["merperson"]],["1F9DC-200D-2642-FE0F",["merman"]],["1F9DC-200D-2640-FE0F",["mermaid"]],["1F9DD",["elf"]],["1F9DD-200D-2642-FE0F",["male_elf"]],["1F9DD-200D-2640-FE0F",["female_elf"]],["1F9DE",["genie"]],["1F9DE-200D-2642-FE0F",["male_genie"]],["1F9DE-200D-2640-FE0F",["female_genie"]],["1F9DF",["zombie"]],["1F9DF-200D-2642-FE0F",["male_zombie"]],["1F9DF-200D-2640-FE0F",["female_zombie"]],["1F9CC",["troll"]],["1F486",["massage"]],["1F486-200D-2642-FE0F",["man-getting-massage"]],["1F486-200D-2640-FE0F",["woman-getting-massage"]],["1F487",["haircut"]],["1F487-200D-2642-FE0F",["man-getting-haircut"]],["1F487-200D-2640-FE0F",["woman-getting-haircut"]],["1F6B6",["walking"]],["1F6B6-200D-2642-FE0F",["man-walking"]],["1F6B6-200D-2640-FE0F",["woman-walking"]],["1F9CD",["standing_person"]],["1F9CD-200D-2642-FE0F",["man_standing"]],["1F9CD-200D-2640-FE0F",["woman_standing"]],["1F9CE",["kneeling_person"]],["1F9CE-200D-2642-FE0F",["man_kneeling"]],["1F9CE-200D-2640-FE0F",["woman_kneeling"]],["1F9D1-200D-1F9AF",["person_with_probing_cane"]],["1F468-200D-1F9AF",["man_with_probing_cane"]],["1F469-200D-1F9AF",["woman_with_probing_cane"]],["1F9D1-200D-1F9BC",["person_in_motorized_wheelchair"]],["1F468-200D-1F9BC",["man_in_motorized_wheelchair"]],["1F469-200D-1F9BC",["woman_in_motorized_wheelchair"]],["1F9D1-200D-1F9BD",["person_in_manual_wheelchair"]],["1F468-200D-1F9BD",["man_in_manual_wheelchair"]],["1F469-200D-1F9BD",["woman_in_manual_wheelchair"]],["1F3C3",["runner","running"]],["1F3C3-200D-2642-FE0F",["man-running"]],["1F3C3-200D-2640-FE0F",["woman-running"]],["1F483",["dancer"]],["1F57A",["man_dancing"]],["1F574-FE0F",["man_in_business_suit_levitating"]],["1F46F",["dancers"]],["1F46F-200D-2642-FE0F",["men-with-bunny-ears-partying","man-with-bunny-ears-partying"]],["1F46F-200D-2640-FE0F",["women-with-bunny-ears-partying","woman-with-bunny-ears-partying"]],["1F9D6",["person_in_steamy_room"]],["1F9D6-200D-2642-FE0F",["man_in_steamy_room"]],["1F9D6-200D-2640-FE0F",["woman_in_steamy_room"]],["1F9D7",["person_climbing"]],["1F9D7-200D-2642-FE0F",["man_climbing"]],["1F9D7-200D-2640-FE0F",["woman_climbing"]],["1F93A",["fencer"]],["1F3C7",["horse_racing"]],["26F7-FE0F",["skier"]],["1F3C2",["snowboarder"]],["1F3CC-FE0F",["golfer"]],["1F3CC-FE0F-200D-2642-FE0F",["man-golfing"]],["1F3CC-FE0F-200D-2640-FE0F",["woman-golfing"]],["1F3C4",["surfer"]],["1F3C4-200D-2642-FE0F",["man-surfing"]],["1F3C4-200D-2640-FE0F",["woman-surfing"]],["1F6A3",["rowboat"]],["1F6A3-200D-2642-FE0F",["man-rowing-boat"]],["1F6A3-200D-2640-FE0F",["woman-rowing-boat"]],["1F3CA",["swimmer"]],["1F3CA-200D-2642-FE0F",["man-swimming"]],["1F3CA-200D-2640-FE0F",["woman-swimming"]],["26F9-FE0F",["person_with_ball"]],["26F9-FE0F-200D-2642-FE0F",["man-bouncing-ball"]],["26F9-FE0F-200D-2640-FE0F",["woman-bouncing-ball"]],["1F3CB-FE0F",["weight_lifter"]],["1F3CB-FE0F-200D-2642-FE0F",["man-lifting-weights"]],["1F3CB-FE0F-200D-2640-FE0F",["woman-lifting-weights"]],["1F6B4",["bicyclist"]],["1F6B4-200D-2642-FE0F",["man-biking"]],["1F6B4-200D-2640-FE0F",["woman-biking"]],["1F6B5",["mountain_bicyclist"]],["1F6B5-200D-2642-FE0F",["man-mountain-biking"]],["1F6B5-200D-2640-FE0F",["woman-mountain-biking"]],["1F938",["person_doing_cartwheel"]],["1F938-200D-2642-FE0F",["man-cartwheeling"]],["1F938-200D-2640-FE0F",["woman-cartwheeling"]],["1F93C",["wrestlers"]],["1F93C-200D-2642-FE0F",["man-wrestling"]],["1F93C-200D-2640-FE0F",["woman-wrestling"]],["1F93D",["water_polo"]],["1F93D-200D-2642-FE0F",["man-playing-water-polo"]],["1F93D-200D-2640-FE0F",["woman-playing-water-polo"]],["1F93E",["handball"]],["1F93E-200D-2642-FE0F",["man-playing-handball"]],["1F93E-200D-2640-FE0F",["woman-playing-handball"]],["1F939",["juggling"]],["1F939-200D-2642-FE0F",["man-juggling"]],["1F939-200D-2640-FE0F",["woman-juggling"]],["1F9D8",["person_in_lotus_position"]],["1F9D8-200D-2642-FE0F",["man_in_lotus_position"]],["1F9D8-200D-2640-FE0F",["woman_in_lotus_position"]],["1F6C0",["bath"]],["1F6CC",["sleeping_accommodation"]],["1F9D1-200D-1F91D-200D-1F9D1",["people_holding_hands"]],["1F46D",["two_women_holding_hands","women_holding_hands"]],["1F46B",["man_and_woman_holding_hands","woman_and_man_holding_hands","couple"]],["1F46C",["two_men_holding_hands","men_holding_hands"]],["1F48F",["couplekiss"]],["1F469-200D-2764-FE0F-200D-1F48B-200D-1F468",["woman-kiss-man"]],["1F468-200D-2764-FE0F-200D-1F48B-200D-1F468",["man-kiss-man"]],["1F469-200D-2764-FE0F-200D-1F48B-200D-1F469",["woman-kiss-woman"]],["1F491",["couple_with_heart"]],["1F469-200D-2764-FE0F-200D-1F468",["woman-heart-man"]],["1F468-200D-2764-FE0F-200D-1F468",["man-heart-man"]],["1F469-200D-2764-FE0F-200D-1F469",["woman-heart-woman"]],["1F46A",["family"]],["1F468-200D-1F469-200D-1F466",["man-woman-boy"]],["1F468-200D-1F469-200D-1F467",["man-woman-girl"]],["1F468-200D-1F469-200D-1F467-200D-1F466",["man-woman-girl-boy"]],["1F468-200D-1F469-200D-1F466-200D-1F466",["man-woman-boy-boy"]],["1F468-200D-1F469-200D-1F467-200D-1F467",["man-woman-girl-girl"]],["1F468-200D-1F468-200D-1F466",["man-man-boy"]],["1F468-200D-1F468-200D-1F467",["man-man-girl"]],["1F468-200D-1F468-200D-1F467-200D-1F466",["man-man-girl-boy"]],["1F468-200D-1F468-200D-1F466-200D-1F466",["man-man-boy-boy"]],["1F468-200D-1F468-200D-1F467-200D-1F467",["man-man-girl-girl"]],["1F469-200D-1F469-200D-1F466",["woman-woman-boy"]],["1F469-200D-1F469-200D-1F467",["woman-woman-girl"]],["1F469-200D-1F469-200D-1F467-200D-1F466",["woman-woman-girl-boy"]],["1F469-200D-1F469-200D-1F466-200D-1F466",["woman-woman-boy-boy"]],["1F469-200D-1F469-200D-1F467-200D-1F467",["woman-woman-girl-girl"]],["1F468-200D-1F466",["man-boy"]],["1F468-200D-1F466-200D-1F466",["man-boy-boy"]],["1F468-200D-1F467",["man-girl"]],["1F468-200D-1F467-200D-1F466",["man-girl-boy"]],["1F468-200D-1F467-200D-1F467",["man-girl-girl"]],["1F469-200D-1F466",["woman-boy"]],["1F469-200D-1F466-200D-1F466",["woman-boy-boy"]],["1F469-200D-1F467",["woman-girl"]],["1F469-200D-1F467-200D-1F466",["woman-girl-boy"]],["1F469-200D-1F467-200D-1F467",["woman-girl-girl"]],["1F5E3-FE0F",["speaking_head_in_silhouette"]],["1F464",["bust_in_silhouette"]],["1F465",["busts_in_silhouette"]],["1FAC2",["people_hugging"]],["1F463",["footprints"]]],["nature",["Animals & Nature"]],[["1F435",["monkey_face"]],["1F412",["monkey"]],["1F98D",["gorilla"]],["1F9A7",["orangutan"]],["1F436",["dog"]],["1F415",["dog2"]],["1F9AE",["guide_dog"]],["1F415-200D-1F9BA",["service_dog"]],["1F429",["poodle"]],["1F43A",["wolf"]],["1F98A",["fox_face"]],["1F99D",["raccoon"]],["1F431",["cat"]],["1F408",["cat2"]],["1F408-200D-2B1B",["black_cat"]],["1F981",["lion_face"]],["1F42F",["tiger"]],["1F405",["tiger2"]],["1F406",["leopard"]],["1F434",["horse"]],["1F40E",["racehorse"]],["1F984",["unicorn_face"]],["1F993",["zebra_face"]],["1F98C",["deer"]],["1F9AC",["bison"]],["1F42E",["cow"]],["1F402",["ox"]],["1F403",["water_buffalo"]],["1F404",["cow2"]],["1F437",["pig"]],["1F416",["pig2"]],["1F417",["boar"]],["1F43D",["pig_nose"]],["1F40F",["ram"]],["1F411",["sheep"]],["1F410",["goat"]],["1F42A",["dromedary_camel"]],["1F42B",["camel"]],["1F999",["llama"]],["1F992",["giraffe_face"]],["1F418",["elephant"]],["1F9A3",["mammoth"]],["1F98F",["rhinoceros"]],["1F99B",["hippopotamus"]],["1F42D",["mouse"]],["1F401",["mouse2"]],["1F400",["rat"]],["1F439",["hamster"]],["1F430",["rabbit"]],["1F407",["rabbit2"]],["1F43F-FE0F",["chipmunk"]],["1F9AB",["beaver"]],["1F994",["hedgehog"]],["1F987",["bat"]],["1F43B",["bear"]],["1F43B-200D-2744-FE0F",["polar_bear"]],["1F428",["koala"]],["1F43C",["panda_face"]],["1F9A5",["sloth"]],["1F9A6",["otter"]],["1F9A8",["skunk"]],["1F998",["kangaroo"]],["1F9A1",["badger"]],["1F43E",["feet","paw_prints"]],["1F983",["turkey"]],["1F414",["chicken"]],["1F413",["rooster"]],["1F423",["hatching_chick"]],["1F424",["baby_chick"]],["1F425",["hatched_chick"]],["1F426",["bird"]],["1F427",["penguin"]],["1F54A-FE0F",["dove_of_peace"]],["1F985",["eagle"]],["1F986",["duck"]],["1F9A2",["swan"]],["1F989",["owl"]],["1F9A4",["dodo"]],["1FAB6",["feather"]],["1F9A9",["flamingo"]],["1F99A",["peacock"]],["1F99C",["parrot"]],["1F438",["frog"]],["1F40A",["crocodile"]],["1F422",["turtle"]],["1F98E",["lizard"]],["1F40D",["snake"]],["1F432",["dragon_face"]],["1F409",["dragon"]],["1F995",["sauropod"]],["1F996",["t-rex"]],["1F433",["whale"]],["1F40B",["whale2"]],["1F42C",["dolphin","flipper"]],["1F9AD",["seal"]],["1F41F",["fish"]],["1F420",["tropical_fish"]],["1F421",["blowfish"]],["1F988",["shark"]],["1F419",["octopus"]],["1F41A",["shell"]],["1FAB8",["coral"]],["1F40C",["snail"]],["1F98B",["butterfly"]],["1F41B",["bug"]],["1F41C",["ant"]],["1F41D",["bee","honeybee"]],["1FAB2",["beetle"]],["1F41E",["ladybug","lady_beetle"]],["1F997",["cricket"]],["1FAB3",["cockroach"]],["1F577-FE0F",["spider"]],["1F578-FE0F",["spider_web"]],["1F982",["scorpion"]],["1F99F",["mosquito"]],["1FAB0",["fly"]],["1FAB1",["worm"]],["1F9A0",["microbe"]],["1F490",["bouquet"]],["1F338",["cherry_blossom"]],["1F4AE",["white_flower"]],["1FAB7",["lotus"]],["1F3F5-FE0F",["rosette"]],["1F339",["rose"]],["1F940",["wilted_flower"]],["1F33A",["hibiscus"]],["1F33B",["sunflower"]],["1F33C",["blossom"]],["1F337",["tulip"]],["1F331",["seedling"]],["1FAB4",["potted_plant"]],["1F332",["evergreen_tree"]],["1F333",["deciduous_tree"]],["1F334",["palm_tree"]],["1F335",["cactus"]],["1F33E",["ear_of_rice"]],["1F33F",["herb"]],["2618-FE0F",["shamrock"]],["1F340",["four_leaf_clover"]],["1F341",["maple_leaf"]],["1F342",["fallen_leaf"]],["1F343",["leaves"]],["1FAB9",["empty_nest"]],["1FABA",["nest_with_eggs"]]],["foods",["Food & Drink"]],[["1F347",["grapes"]],["1F348",["melon"]],["1F349",["watermelon"]],["1F34A",["tangerine"]],["1F34B",["lemon"]],["1F34C",["banana"]],["1F34D",["pineapple"]],["1F96D",["mango"]],["1F34E",["apple"]],["1F34F",["green_apple"]],["1F350",["pear"]],["1F351",["peach"]],["1F352",["cherries"]],["1F353",["strawberry"]],["1FAD0",["blueberries"]],["1F95D",["kiwifruit"]],["1F345",["tomato"]],["1FAD2",["olive"]],["1F965",["coconut"]],["1F951",["avocado"]],["1F346",["eggplant"]],["1F954",["potato"]],["1F955",["carrot"]],["1F33D",["corn"]],["1F336-FE0F",["hot_pepper"]],["1FAD1",["bell_pepper"]],["1F952",["cucumber"]],["1F96C",["leafy_green"]],["1F966",["broccoli"]],["1F9C4",["garlic"]],["1F9C5",["onion"]],["1F344",["mushroom"]],["1F95C",["peanuts"]],["1FAD8",["beans"]],["1F330",["chestnut"]],["1F35E",["bread"]],["1F950",["croissant"]],["1F956",["baguette_bread"]],["1FAD3",["flatbread"]],["1F968",["pretzel"]],["1F96F",["bagel"]],["1F95E",["pancakes"]],["1F9C7",["waffle"]],["1F9C0",["cheese_wedge"]],["1F356",["meat_on_bone"]],["1F357",["poultry_leg"]],["1F969",["cut_of_meat"]],["1F953",["bacon"]],["1F354",["hamburger"]],["1F35F",["fries"]],["1F355",["pizza"]],["1F32D",["hotdog"]],["1F96A",["sandwich"]],["1F32E",["taco"]],["1F32F",["burrito"]],["1FAD4",["tamale"]],["1F959",["stuffed_flatbread"]],["1F9C6",["falafel"]],["1F95A",["egg"]],["1F373",["fried_egg","cooking"]],["1F958",["shallow_pan_of_food"]],["1F372",["stew"]],["1FAD5",["fondue"]],["1F963",["bowl_with_spoon"]],["1F957",["green_salad"]],["1F37F",["popcorn"]],["1F9C8",["butter"]],["1F9C2",["salt"]],["1F96B",["canned_food"]],["1F371",["bento"]],["1F358",["rice_cracker"]],["1F359",["rice_ball"]],["1F35A",["rice"]],["1F35B",["curry"]],["1F35C",["ramen"]],["1F35D",["spaghetti"]],["1F360",["sweet_potato"]],["1F362",["oden"]],["1F363",["sushi"]],["1F364",["fried_shrimp"]],["1F365",["fish_cake"]],["1F96E",["moon_cake"]],["1F361",["dango"]],["1F95F",["dumpling"]],["1F960",["fortune_cookie"]],["1F961",["takeout_box"]],["1F980",["crab"]],["1F99E",["lobster"]],["1F990",["shrimp"]],["1F991",["squid"]],["1F9AA",["oyster"]],["1F366",["icecream"]],["1F367",["shaved_ice"]],["1F368",["ice_cream"]],["1F369",["doughnut"]],["1F36A",["cookie"]],["1F382",["birthday"]],["1F370",["cake"]],["1F9C1",["cupcake"]],["1F967",["pie"]],["1F36B",["chocolate_bar"]],["1F36C",["candy"]],["1F36D",["lollipop"]],["1F36E",["custard"]],["1F36F",["honey_pot"]],["1F37C",["baby_bottle"]],["1F95B",["glass_of_milk"]],["2615",["coffee"]],["1FAD6",["teapot"]],["1F375",["tea"]],["1F376",["sake"]],["1F37E",["champagne"]],["1F377",["wine_glass"]],["1F378",["cocktail"]],["1F379",["tropical_drink"]],["1F37A",["beer"]],["1F37B",["beers"]],["1F942",["clinking_glasses"]],["1F943",["tumbler_glass"]],["1FAD7",["pouring_liquid"]],["1F964",["cup_with_straw"]],["1F9CB",["bubble_tea"]],["1F9C3",["beverage_box"]],["1F9C9",["mate_drink"]],["1F9CA",["ice_cube"]],["1F962",["chopsticks"]],["1F37D-FE0F",["knife_fork_plate"]],["1F374",["fork_and_knife"]],["1F944",["spoon"]],["1F52A",["hocho","knife"]],["1FAD9",["jar"]],["1F3FA",["amphora"]]],["activity",["Activities"]],[["1F383",["jack_o_lantern"]],["1F384",["christmas_tree"]],["1F386",["fireworks"]],["1F387",["sparkler"]],["1F9E8",["firecracker"]],["2728",["sparkles"]],["1F388",["balloon"]],["1F389",["tada"]],["1F38A",["confetti_ball"]],["1F38B",["tanabata_tree"]],["1F38D",["bamboo"]],["1F38E",["dolls"]],["1F38F",["flags"]],["1F390",["wind_chime"]],["1F391",["rice_scene"]],["1F9E7",["red_envelope"]],["1F380",["ribbon"]],["1F381",["gift"]],["1F397-FE0F",["reminder_ribbon"]],["1F39F-FE0F",["admission_tickets"]],["1F3AB",["ticket"]],["1F396-FE0F",["medal"]],["1F3C6",["trophy"]],["1F3C5",["sports_medal"]],["1F947",["first_place_medal"]],["1F948",["second_place_medal"]],["1F949",["third_place_medal"]],["26BD",["soccer"]],["26BE",["baseball"]],["1F94E",["softball"]],["1F3C0",["basketball"]],["1F3D0",["volleyball"]],["1F3C8",["football"]],["1F3C9",["rugby_football"]],["1F3BE",["tennis"]],["1F94F",["flying_disc"]],["1F3B3",["bowling"]],["1F3CF",["cricket_bat_and_ball"]],["1F3D1",["field_hockey_stick_and_ball"]],["1F3D2",["ice_hockey_stick_and_puck"]],["1F94D",["lacrosse"]],["1F3D3",["table_tennis_paddle_and_ball"]],["1F3F8",["badminton_racquet_and_shuttlecock"]],["1F94A",["boxing_glove"]],["1F94B",["martial_arts_uniform"]],["1F945",["goal_net"]],["26F3",["golf"]],["26F8-FE0F",["ice_skate"]],["1F3A3",["fishing_pole_and_fish"]],["1F93F",["diving_mask"]],["1F3BD",["running_shirt_with_sash"]],["1F3BF",["ski"]],["1F6F7",["sled"]],["1F94C",["curling_stone"]],["1F3AF",["dart"]],["1FA80",["yo-yo"]],["1FA81",["kite"]],["1F3B1",["8ball"]],["1F52E",["crystal_ball"]],["1FA84",["magic_wand"]],["1F9FF",["nazar_amulet"]],["1FAAC",["hamsa"]],["1F3AE",["video_game"]],["1F579-FE0F",["joystick"]],["1F3B0",["slot_machine"]],["1F3B2",["game_die"]],["1F9E9",["jigsaw"]],["1F9F8",["teddy_bear"]],["1FA85",["pinata"]],["1FAA9",["mirror_ball"]],["1FA86",["nesting_dolls"]],["2660-FE0F",["spades"]],["2665-FE0F",["hearts"]],["2666-FE0F",["diamonds"]],["2663-FE0F",["clubs"]],["265F-FE0F",["chess_pawn"]],["1F0CF",["black_joker"]],["1F004",["mahjong"]],["1F3B4",["flower_playing_cards"]],["1F3AD",["performing_arts"]],["1F5BC-FE0F",["frame_with_picture"]],["1F3A8",["art"]],["1F9F5",["thread"]],["1FAA1",["sewing_needle"]],["1F9F6",["yarn"]],["1FAA2",["knot"]]],["places",["Travel & Places"]],[["1F30D",["earth_africa"]],["1F30E",["earth_americas"]],["1F30F",["earth_asia"]],["1F310",["globe_with_meridians"]],["1F5FA-FE0F",["world_map"]],["1F5FE",["japan"]],["1F9ED",["compass"]],["1F3D4-FE0F",["snow_capped_mountain"]],["26F0-FE0F",["mountain"]],["1F30B",["volcano"]],["1F5FB",["mount_fuji"]],["1F3D5-FE0F",["camping"]],["1F3D6-FE0F",["beach_with_umbrella"]],["1F3DC-FE0F",["desert"]],["1F3DD-FE0F",["desert_island"]],["1F3DE-FE0F",["national_park"]],["1F3DF-FE0F",["stadium"]],["1F3DB-FE0F",["classical_building"]],["1F3D7-FE0F",["building_construction"]],["1F9F1",["bricks"]],["1FAA8",["rock"]],["1FAB5",["wood"]],["1F6D6",["hut"]],["1F3D8-FE0F",["house_buildings"]],["1F3DA-FE0F",["derelict_house_building"]],["1F3E0",["house"]],["1F3E1",["house_with_garden"]],["1F3E2",["office"]],["1F3E3",["post_office"]],["1F3E4",["european_post_office"]],["1F3E5",["hospital"]],["1F3E6",["bank"]],["1F3E8",["hotel"]],["1F3E9",["love_hotel"]],["1F3EA",["convenience_store"]],["1F3EB",["school"]],["1F3EC",["department_store"]],["1F3ED",["factory"]],["1F3EF",["japanese_castle"]],["1F3F0",["european_castle"]],["1F492",["wedding"]],["1F5FC",["tokyo_tower"]],["1F5FD",["statue_of_liberty"]],["26EA",["church"]],["1F54C",["mosque"]],["1F6D5",["hindu_temple"]],["1F54D",["synagogue"]],["26E9-FE0F",["shinto_shrine"]],["1F54B",["kaaba"]],["26F2",["fountain"]],["26FA",["tent"]],["1F301",["foggy"]],["1F303",["night_with_stars"]],["1F3D9-FE0F",["cityscape"]],["1F304",["sunrise_over_mountains"]],["1F305",["sunrise"]],["1F306",["city_sunset"]],["1F307",["city_sunrise"]],["1F309",["bridge_at_night"]],["2668-FE0F",["hotsprings"]],["1F3A0",["carousel_horse"]],["1F6DD",["playground_slide"]],["1F3A1",["ferris_wheel"]],["1F3A2",["roller_coaster"]],["1F488",["barber"]],["1F3AA",["circus_tent"]],["1F682",["steam_locomotive"]],["1F683",["railway_car"]],["1F684",["bullettrain_side"]],["1F685",["bullettrain_front"]],["1F686",["train2"]],["1F687",["metro"]],["1F688",["light_rail"]],["1F689",["station"]],["1F68A",["tram"]],["1F69D",["monorail"]],["1F69E",["mountain_railway"]],["1F68B",["train"]],["1F68C",["bus"]],["1F68D",["oncoming_bus"]],["1F68E",["trolleybus"]],["1F690",["minibus"]],["1F691",["ambulance"]],["1F692",["fire_engine"]],["1F693",["police_car"]],["1F694",["oncoming_police_car"]],["1F695",["taxi"]],["1F696",["oncoming_taxi"]],["1F697",["car","red_car"]],["1F698",["oncoming_automobile"]],["1F699",["blue_car"]],["1F6FB",["pickup_truck"]],["1F69A",["truck"]],["1F69B",["articulated_lorry"]],["1F69C",["tractor"]],["1F3CE-FE0F",["racing_car"]],["1F3CD-FE0F",["racing_motorcycle"]],["1F6F5",["motor_scooter"]],["1F9BD",["manual_wheelchair"]],["1F9BC",["motorized_wheelchair"]],["1F6FA",["auto_rickshaw"]],["1F6B2",["bike"]],["1F6F4",["scooter"]],["1F6F9",["skateboard"]],["1F6FC",["roller_skate"]],["1F68F",["busstop"]],["1F6E3-FE0F",["motorway"]],["1F6E4-FE0F",["railway_track"]],["1F6E2-FE0F",["oil_drum"]],["26FD",["fuelpump"]],["1F6DE",["wheel"]],["1F6A8",["rotating_light"]],["1F6A5",["traffic_light"]],["1F6A6",["vertical_traffic_light"]],["1F6D1",["octagonal_sign"]],["1F6A7",["construction"]],["2693",["anchor"]],["1F6DF",["ring_buoy"]],["26F5",["boat","sailboat"]],["1F6F6",["canoe"]],["1F6A4",["speedboat"]],["1F6F3-FE0F",["passenger_ship"]],["26F4-FE0F",["ferry"]],["1F6E5-FE0F",["motor_boat"]],["1F6A2",["ship"]],["2708-FE0F",["airplane"]],["1F6E9-FE0F",["small_airplane"]],["1F6EB",["airplane_departure"]],["1F6EC",["airplane_arriving"]],["1FA82",["parachute"]],["1F4BA",["seat"]],["1F681",["helicopter"]],["1F69F",["suspension_railway"]],["1F6A0",["mountain_cableway"]],["1F6A1",["aerial_tramway"]],["1F6F0-FE0F",["satellite"]],["1F680",["rocket"]],["1F6F8",["flying_saucer"]],["1F6CE-FE0F",["bellhop_bell"]],["1F9F3",["luggage"]],["231B",["hourglass"]],["23F3",["hourglass_flowing_sand"]],["231A",["watch"]],["23F0",["alarm_clock"]],["23F1-FE0F",["stopwatch"]],["23F2-FE0F",["timer_clock"]],["1F570-FE0F",["mantelpiece_clock"]],["1F55B",["clock12"]],["1F567",["clock1230"]],["1F550",["clock1"]],["1F55C",["clock130"]],["1F551",["clock2"]],["1F55D",["clock230"]],["1F552",["clock3"]],["1F55E",["clock330"]],["1F553",["clock4"]],["1F55F",["clock430"]],["1F554",["clock5"]],["1F560",["clock530"]],["1F555",["clock6"]],["1F561",["clock630"]],["1F556",["clock7"]],["1F562",["clock730"]],["1F557",["clock8"]],["1F563",["clock830"]],["1F558",["clock9"]],["1F564",["clock930"]],["1F559",["clock10"]],["1F565",["clock1030"]],["1F55A",["clock11"]],["1F566",["clock1130"]],["1F311",["new_moon"]],["1F312",["waxing_crescent_moon"]],["1F313",["first_quarter_moon"]],["1F314",["moon","waxing_gibbous_moon"]],["1F315",["full_moon"]],["1F316",["waning_gibbous_moon"]],["1F317",["last_quarter_moon"]],["1F318",["waning_crescent_moon"]],["1F319",["crescent_moon"]],["1F31A",["new_moon_with_face"]],["1F31B",["first_quarter_moon_with_face"]],["1F31C",["last_quarter_moon_with_face"]],["1F321-FE0F",["thermometer"]],["2600-FE0F",["sunny"]],["1F31D",["full_moon_with_face"]],["1F31E",["sun_with_face"]],["1FA90",["ringed_planet"]],["2B50",["star"]],["1F31F",["star2"]],["1F320",["stars"]],["1F30C",["milky_way"]],["2601-FE0F",["cloud"]],["26C5",["partly_sunny"]],["26C8-FE0F",["thunder_cloud_and_rain"]],["1F324-FE0F",["mostly_sunny","sun_small_cloud"]],["1F325-FE0F",["barely_sunny","sun_behind_cloud"]],["1F326-FE0F",["partly_sunny_rain","sun_behind_rain_cloud"]],["1F327-FE0F",["rain_cloud"]],["1F328-FE0F",["snow_cloud"]],["1F329-FE0F",["lightning","lightning_cloud"]],["1F32A-FE0F",["tornado","tornado_cloud"]],["1F32B-FE0F",["fog"]],["1F32C-FE0F",["wind_blowing_face"]],["1F300",["cyclone"]],["1F308",["rainbow"]],["1F302",["closed_umbrella"]],["2602-FE0F",["umbrella"]],["2614",["umbrella_with_rain_drops"]],["26F1-FE0F",["umbrella_on_ground"]],["26A1",["zap"]],["2744-FE0F",["snowflake"]],["2603-FE0F",["snowman"]],["26C4",["snowman_without_snow"]],["2604-FE0F",["comet"]],["1F525",["fire"]],["1F4A7",["droplet"]],["1F30A",["ocean"]]],["objects",["Objects"]],[["1F453",["eyeglasses"]],["1F576-FE0F",["dark_sunglasses"]],["1F97D",["goggles"]],["1F97C",["lab_coat"]],["1F9BA",["safety_vest"]],["1F454",["necktie"]],["1F455",["shirt","tshirt"]],["1F456",["jeans"]],["1F9E3",["scarf"]],["1F9E4",["gloves"]],["1F9E5",["coat"]],["1F9E6",["socks"]],["1F457",["dress"]],["1F458",["kimono"]],["1F97B",["sari"]],["1FA71",["one-piece_swimsuit"]],["1FA72",["briefs"]],["1FA73",["shorts"]],["1F459",["bikini"]],["1F45A",["womans_clothes"]],["1F45B",["purse"]],["1F45C",["handbag"]],["1F45D",["pouch"]],["1F6CD-FE0F",["shopping_bags"]],["1F392",["school_satchel"]],["1FA74",["thong_sandal"]],["1F45E",["mans_shoe","shoe"]],["1F45F",["athletic_shoe"]],["1F97E",["hiking_boot"]],["1F97F",["womans_flat_shoe"]],["1F460",["high_heel"]],["1F461",["sandal"]],["1FA70",["ballet_shoes"]],["1F462",["boot"]],["1F451",["crown"]],["1F452",["womans_hat"]],["1F3A9",["tophat"]],["1F393",["mortar_board"]],["1F9E2",["billed_cap"]],["1FA96",["military_helmet"]],["26D1-FE0F",["helmet_with_white_cross"]],["1F4FF",["prayer_beads"]],["1F484",["lipstick"]],["1F48D",["ring"]],["1F48E",["gem"]],["1F507",["mute"]],["1F508",["speaker"]],["1F509",["sound"]],["1F50A",["loud_sound"]],["1F4E2",["loudspeaker"]],["1F4E3",["mega"]],["1F4EF",["postal_horn"]],["1F514",["bell"]],["1F515",["no_bell"]],["1F3BC",["musical_score"]],["1F3B5",["musical_note"]],["1F3B6",["notes"]],["1F399-FE0F",["studio_microphone"]],["1F39A-FE0F",["level_slider"]],["1F39B-FE0F",["control_knobs"]],["1F3A4",["microphone"]],["1F3A7",["headphones"]],["1F4FB",["radio"]],["1F3B7",["saxophone"]],["1FA97",["accordion"]],["1F3B8",["guitar"]],["1F3B9",["musical_keyboard"]],["1F3BA",["trumpet"]],["1F3BB",["violin"]],["1FA95",["banjo"]],["1F941",["drum_with_drumsticks"]],["1FA98",["long_drum"]],["1F4F1",["iphone"]],["1F4F2",["calling"]],["260E-FE0F",["phone","telephone"]],["1F4DE",["telephone_receiver"]],["1F4DF",["pager"]],["1F4E0",["fax"]],["1F50B",["battery"]],["1FAAB",["low_battery"]],["1F50C",["electric_plug"]],["1F4BB",["computer"]],["1F5A5-FE0F",["desktop_computer"]],["1F5A8-FE0F",["printer"]],["2328-FE0F",["keyboard"]],["1F5B1-FE0F",["three_button_mouse"]],["1F5B2-FE0F",["trackball"]],["1F4BD",["minidisc"]],["1F4BE",["floppy_disk"]],["1F4BF",["cd"]],["1F4C0",["dvd"]],["1F9EE",["abacus"]],["1F3A5",["movie_camera"]],["1F39E-FE0F",["film_frames"]],["1F4FD-FE0F",["film_projector"]],["1F3AC",["clapper"]],["1F4FA",["tv"]],["1F4F7",["camera"]],["1F4F8",["camera_with_flash"]],["1F4F9",["video_camera"]],["1F4FC",["vhs"]],["1F50D",["mag"]],["1F50E",["mag_right"]],["1F56F-FE0F",["candle"]],["1F4A1",["bulb"]],["1F526",["flashlight"]],["1F3EE",["izakaya_lantern","lantern"]],["1FA94",["diya_lamp"]],["1F4D4",["notebook_with_decorative_cover"]],["1F4D5",["closed_book"]],["1F4D6",["book","open_book"]],["1F4D7",["green_book"]],["1F4D8",["blue_book"]],["1F4D9",["orange_book"]],["1F4DA",["books"]],["1F4D3",["notebook"]],["1F4D2",["ledger"]],["1F4C3",["page_with_curl"]],["1F4DC",["scroll"]],["1F4C4",["page_facing_up"]],["1F4F0",["newspaper"]],["1F5DE-FE0F",["rolled_up_newspaper"]],["1F4D1",["bookmark_tabs"]],["1F516",["bookmark"]],["1F3F7-FE0F",["label"]],["1F4B0",["moneybag"]],["1FA99",["coin"]],["1F4B4",["yen"]],["1F4B5",["dollar"]],["1F4B6",["euro"]],["1F4B7",["pound"]],["1F4B8",["money_with_wings"]],["1F4B3",["credit_card"]],["1F9FE",["receipt"]],["1F4B9",["chart"]],["2709-FE0F",["email","envelope"]],["1F4E7",["e-mail"]],["1F4E8",["incoming_envelope"]],["1F4E9",["envelope_with_arrow"]],["1F4E4",["outbox_tray"]],["1F4E5",["inbox_tray"]],["1F4E6",["package"]],["1F4EB",["mailbox"]],["1F4EA",["mailbox_closed"]],["1F4EC",["mailbox_with_mail"]],["1F4ED",["mailbox_with_no_mail"]],["1F4EE",["postbox"]],["1F5F3-FE0F",["ballot_box_with_ballot"]],["270F-FE0F",["pencil2"]],["2712-FE0F",["black_nib"]],["1F58B-FE0F",["lower_left_fountain_pen"]],["1F58A-FE0F",["lower_left_ballpoint_pen"]],["1F58C-FE0F",["lower_left_paintbrush"]],["1F58D-FE0F",["lower_left_crayon"]],["1F4DD",["memo","pencil"]],["1F4BC",["briefcase"]],["1F4C1",["file_folder"]],["1F4C2",["open_file_folder"]],["1F5C2-FE0F",["card_index_dividers"]],["1F4C5",["date"]],["1F4C6",["calendar"]],["1F5D2-FE0F",["spiral_note_pad"]],["1F5D3-FE0F",["spiral_calendar_pad"]],["1F4C7",["card_index"]],["1F4C8",["chart_with_upwards_trend"]],["1F4C9",["chart_with_downwards_trend"]],["1F4CA",["bar_chart"]],["1F4CB",["clipboard"]],["1F4CC",["pushpin"]],["1F4CD",["round_pushpin"]],["1F4CE",["paperclip"]],["1F587-FE0F",["linked_paperclips"]],["1F4CF",["straight_ruler"]],["1F4D0",["triangular_ruler"]],["2702-FE0F",["scissors"]],["1F5C3-FE0F",["card_file_box"]],["1F5C4-FE0F",["file_cabinet"]],["1F5D1-FE0F",["wastebasket"]],["1F512",["lock"]],["1F513",["unlock"]],["1F50F",["lock_with_ink_pen"]],["1F510",["closed_lock_with_key"]],["1F511",["key"]],["1F5DD-FE0F",["old_key"]],["1F528",["hammer"]],["1FA93",["axe"]],["26CF-FE0F",["pick"]],["2692-FE0F",["hammer_and_pick"]],["1F6E0-FE0F",["hammer_and_wrench"]],["1F5E1-FE0F",["dagger_knife"]],["2694-FE0F",["crossed_swords"]],["1F52B",["gun"]],["1FA83",["boomerang"]],["1F3F9",["bow_and_arrow"]],["1F6E1-FE0F",["shield"]],["1FA9A",["carpentry_saw"]],["1F527",["wrench"]],["1FA9B",["screwdriver"]],["1F529",["nut_and_bolt"]],["2699-FE0F",["gear"]],["1F5DC-FE0F",["compression"]],["2696-FE0F",["scales"]],["1F9AF",["probing_cane"]],["1F517",["link"]],["26D3-FE0F",["chains"]],["1FA9D",["hook"]],["1F9F0",["toolbox"]],["1F9F2",["magnet"]],["1FA9C",["ladder"]],["2697-FE0F",["alembic"]],["1F9EA",["test_tube"]],["1F9EB",["petri_dish"]],["1F9EC",["dna"]],["1F52C",["microscope"]],["1F52D",["telescope"]],["1F4E1",["satellite_antenna"]],["1F489",["syringe"]],["1FA78",["drop_of_blood"]],["1F48A",["pill"]],["1FA79",["adhesive_bandage"]],["1FA7C",["crutch"]],["1FA7A",["stethoscope"]],["1FA7B",["x-ray"]],["1F6AA",["door"]],["1F6D7",["elevator"]],["1FA9E",["mirror"]],["1FA9F",["window"]],["1F6CF-FE0F",["bed"]],["1F6CB-FE0F",["couch_and_lamp"]],["1FA91",["chair"]],["1F6BD",["toilet"]],["1FAA0",["plunger"]],["1F6BF",["shower"]],["1F6C1",["bathtub"]],["1FAA4",["mouse_trap"]],["1FA92",["razor"]],["1F9F4",["lotion_bottle"]],["1F9F7",["safety_pin"]],["1F9F9",["broom"]],["1F9FA",["basket"]],["1F9FB",["roll_of_paper"]],["1FAA3",["bucket"]],["1F9FC",["soap"]],["1FAE7",["bubbles"]],["1FAA5",["toothbrush"]],["1F9FD",["sponge"]],["1F9EF",["fire_extinguisher"]],["1F6D2",["shopping_trolley"]],["1F6AC",["smoking"]],["26B0-FE0F",["coffin"]],["1FAA6",["headstone"]],["26B1-FE0F",["funeral_urn"]],["1F5FF",["moyai"]],["1FAA7",["placard"]],["1FAAA",["identification_card"]]],["symbols",["Symbols"]],[["1F3E7",["atm"]],["1F6AE",["put_litter_in_its_place"]],["1F6B0",["potable_water"]],["267F",["wheelchair"]],["1F6B9",["mens"]],["1F6BA",["womens"]],["1F6BB",["restroom"]],["1F6BC",["baby_symbol"]],["1F6BE",["wc"]],["1F6C2",["passport_control"]],["1F6C3",["customs"]],["1F6C4",["baggage_claim"]],["1F6C5",["left_luggage"]],["26A0-FE0F",["warning"]],["1F6B8",["children_crossing"]],["26D4",["no_entry"]],["1F6AB",["no_entry_sign"]],["1F6B3",["no_bicycles"]],["1F6AD",["no_smoking"]],["1F6AF",["do_not_litter"]],["1F6B1",["non-potable_water"]],["1F6B7",["no_pedestrians"]],["1F4F5",["no_mobile_phones"]],["1F51E",["underage"]],["2622-FE0F",["radioactive_sign"]],["2623-FE0F",["biohazard_sign"]],["2B06-FE0F",["arrow_up"]],["2197-FE0F",["arrow_upper_right"]],["27A1-FE0F",["arrow_right"]],["2198-FE0F",["arrow_lower_right"]],["2B07-FE0F",["arrow_down"]],["2199-FE0F",["arrow_lower_left"]],["2B05-FE0F",["arrow_left"]],["2196-FE0F",["arrow_upper_left"]],["2195-FE0F",["arrow_up_down"]],["2194-FE0F",["left_right_arrow"]],["21A9-FE0F",["leftwards_arrow_with_hook"]],["21AA-FE0F",["arrow_right_hook"]],["2934-FE0F",["arrow_heading_up"]],["2935-FE0F",["arrow_heading_down"]],["1F503",["arrows_clockwise"]],["1F504",["arrows_counterclockwise"]],["1F519",["back"]],["1F51A",["end"]],["1F51B",["on"]],["1F51C",["soon"]],["1F51D",["top"]],["1F6D0",["place_of_worship"]],["269B-FE0F",["atom_symbol"]],["1F549-FE0F",["om_symbol"]],["2721-FE0F",["star_of_david"]],["2638-FE0F",["wheel_of_dharma"]],["262F-FE0F",["yin_yang"]],["271D-FE0F",["latin_cross"]],["2626-FE0F",["orthodox_cross"]],["262A-FE0F",["star_and_crescent"]],["262E-FE0F",["peace_symbol"]],["1F54E",["menorah_with_nine_branches"]],["1F52F",["six_pointed_star"]],["2648",["aries"]],["2649",["taurus"]],["264A",["gemini"]],["264B",["cancer"]],["264C",["leo"]],["264D",["virgo"]],["264E",["libra"]],["264F",["scorpius"]],["2650",["sagittarius"]],["2651",["capricorn"]],["2652",["aquarius"]],["2653",["pisces"]],["26CE",["ophiuchus"]],["1F500",["twisted_rightwards_arrows"]],["1F501",["repeat"]],["1F502",["repeat_one"]],["25B6-FE0F",["arrow_forward"]],["23E9",["fast_forward"]],["23ED-FE0F",["black_right_pointing_double_triangle_with_vertical_bar"]],["23EF-FE0F",["black_right_pointing_triangle_with_double_vertical_bar"]],["25C0-FE0F",["arrow_backward"]],["23EA",["rewind"]],["23EE-FE0F",["black_left_pointing_double_triangle_with_vertical_bar"]],["1F53C",["arrow_up_small"]],["23EB",["arrow_double_up"]],["1F53D",["arrow_down_small"]],["23EC",["arrow_double_down"]],["23F8-FE0F",["double_vertical_bar"]],["23F9-FE0F",["black_square_for_stop"]],["23FA-FE0F",["black_circle_for_record"]],["23CF-FE0F",["eject"]],["1F3A6",["cinema"]],["1F505",["low_brightness"]],["1F506",["high_brightness"]],["1F4F6",["signal_strength"]],["1F4F3",["vibration_mode"]],["1F4F4",["mobile_phone_off"]],["2640-FE0F",["female_sign"]],["2642-FE0F",["male_sign"]],["26A7-FE0F",["transgender_symbol"]],["2716-FE0F",["heavy_multiplication_x"]],["2795",["heavy_plus_sign"]],["2796",["heavy_minus_sign"]],["2797",["heavy_division_sign"]],["1F7F0",["heavy_equals_sign"]],["267E-FE0F",["infinity"]],["203C-FE0F",["bangbang"]],["2049-FE0F",["interrobang"]],["2753",["question"]],["2754",["grey_question"]],["2755",["grey_exclamation"]],["2757",["exclamation","heavy_exclamation_mark"]],["3030-FE0F",["wavy_dash"]],["1F4B1",["currency_exchange"]],["1F4B2",["heavy_dollar_sign"]],["2695-FE0F",["medical_symbol","staff_of_aesculapius"]],["267B-FE0F",["recycle"]],["269C-FE0F",["fleur_de_lis"]],["1F531",["trident"]],["1F4DB",["name_badge"]],["1F530",["beginner"]],["2B55",["o"]],["2705",["white_check_mark"]],["2611-FE0F",["ballot_box_with_check"]],["2714-FE0F",["heavy_check_mark"]],["274C",["x"]],["274E",["negative_squared_cross_mark"]],["27B0",["curly_loop"]],["27BF",["loop"]],["303D-FE0F",["part_alternation_mark"]],["2733-FE0F",["eight_spoked_asterisk"]],["2734-FE0F",["eight_pointed_black_star"]],["2747-FE0F",["sparkle"]],["00A9-FE0F",["copyright"]],["00AE-FE0F",["registered"]],["2122-FE0F",["tm"]],["0023-FE0F-20E3",["hash"]],["002A-FE0F-20E3",["keycap_star"]],["0030-FE0F-20E3",["zero"]],["0031-FE0F-20E3",["one"]],["0032-FE0F-20E3",["two"]],["0033-FE0F-20E3",["three"]],["0034-FE0F-20E3",["four"]],["0035-FE0F-20E3",["five"]],["0036-FE0F-20E3",["six"]],["0037-FE0F-20E3",["seven"]],["0038-FE0F-20E3",["eight"]],["0039-FE0F-20E3",["nine"]],["1F51F",["keycap_ten"]],["1F520",["capital_abcd"]],["1F521",["abcd"]],["1F522",["1234"]],["1F523",["symbols"]],["1F524",["abc"]],["1F170-FE0F",["a"]],["1F18E",["ab"]],["1F171-FE0F",["b"]],["1F191",["cl"]],["1F192",["cool"]],["1F193",["free"]],["2139-FE0F",["information_source"]],["1F194",["id"]],["24C2-FE0F",["m"]],["1F195",["new"]],["1F196",["ng"]],["1F17E-FE0F",["o2"]],["1F197",["ok"]],["1F17F-FE0F",["parking"]],["1F198",["sos"]],["1F199",["up"]],["1F19A",["vs"]],["1F201",["koko"]],["1F202-FE0F",["sa"]],["1F237-FE0F",["u6708"]],["1F236",["u6709"]],["1F22F",["u6307"]],["1F250",["ideograph_advantage"]],["1F239",["u5272"]],["1F21A",["u7121"]],["1F232",["u7981"]],["1F251",["accept"]],["1F238",["u7533"]],["1F234",["u5408"]],["1F233",["u7a7a"]],["3297-FE0F",["congratulations"]],["3299-FE0F",["secret"]],["1F23A",["u55b6"]],["1F235",["u6e80"]],["1F534",["red_circle"]],["1F7E0",["large_orange_circle"]],["1F7E1",["large_yellow_circle"]],["1F7E2",["large_green_circle"]],["1F535",["large_blue_circle"]],["1F7E3",["large_purple_circle"]],["1F7E4",["large_brown_circle"]],["26AB",["black_circle"]],["26AA",["white_circle"]],["1F7E5",["large_red_square"]],["1F7E7",["large_orange_square"]],["1F7E8",["large_yellow_square"]],["1F7E9",["large_green_square"]],["1F7E6",["large_blue_square"]],["1F7EA",["large_purple_square"]],["1F7EB",["large_brown_square"]],["2B1B",["black_large_square"]],["2B1C",["white_large_square"]],["25FC-FE0F",["black_medium_square"]],["25FB-FE0F",["white_medium_square"]],["25FE",["black_medium_small_square"]],["25FD",["white_medium_small_square"]],["25AA-FE0F",["black_small_square"]],["25AB-FE0F",["white_small_square"]],["1F536",["large_orange_diamond"]],["1F537",["large_blue_diamond"]],["1F538",["small_orange_diamond"]],["1F539",["small_blue_diamond"]],["1F53A",["small_red_triangle"]],["1F53B",["small_red_triangle_down"]],["1F4A0",["diamond_shape_with_a_dot_inside"]],["1F518",["radio_button"]],["1F533",["white_square_button"]],["1F532",["black_square_button"]]],["flags",["Flags"]],[["1F3C1",["checkered_flag"]],["1F6A9",["triangular_flag_on_post"]],["1F38C",["crossed_flags"]],["1F3F4",["waving_black_flag"]],["1F3F3-FE0F",["waving_white_flag"]],["1F3F3-FE0F-200D-1F308",["rainbow-flag"]],["1F3F3-FE0F-200D-26A7-FE0F",["transgender_flag"]],["1F3F4-200D-2620-FE0F",["pirate_flag"]],["1F1E6-1F1E8",["flag-ac"]],["1F1E6-1F1E9",["flag-ad"]],["1F1E6-1F1EA",["flag-ae"]],["1F1E6-1F1EB",["flag-af"]],["1F1E6-1F1EC",["flag-ag"]],["1F1E6-1F1EE",["flag-ai"]],["1F1E6-1F1F1",["flag-al"]],["1F1E6-1F1F2",["flag-am"]],["1F1E6-1F1F4",["flag-ao"]],["1F1E6-1F1F6",["flag-aq"]],["1F1E6-1F1F7",["flag-ar"]],["1F1E6-1F1F8",["flag-as"]],["1F1E6-1F1F9",["flag-at"]],["1F1E6-1F1FA",["flag-au"]],["1F1E6-1F1FC",["flag-aw"]],["1F1E6-1F1FD",["flag-ax"]],["1F1E6-1F1FF",["flag-az"]],["1F1E7-1F1E6",["flag-ba"]],["1F1E7-1F1E7",["flag-bb"]],["1F1E7-1F1E9",["flag-bd"]],["1F1E7-1F1EA",["flag-be"]],["1F1E7-1F1EB",["flag-bf"]],["1F1E7-1F1EC",["flag-bg"]],["1F1E7-1F1ED",["flag-bh"]],["1F1E7-1F1EE",["flag-bi"]],["1F1E7-1F1EF",["flag-bj"]],["1F1E7-1F1F1",["flag-bl"]],["1F1E7-1F1F2",["flag-bm"]],["1F1E7-1F1F3",["flag-bn"]],["1F1E7-1F1F4",["flag-bo"]],["1F1E7-1F1F6",["flag-bq"]],["1F1E7-1F1F7",["flag-br"]],["1F1E7-1F1F8",["flag-bs"]],["1F1E7-1F1F9",["flag-bt"]],["1F1E7-1F1FB",["flag-bv"]],["1F1E7-1F1FC",["flag-bw"]],["1F1E7-1F1FE",["flag-by"]],["1F1E7-1F1FF",["flag-bz"]],["1F1E8-1F1E6",["flag-ca"]],["1F1E8-1F1E8",["flag-cc"]],["1F1E8-1F1E9",["flag-cd"]],["1F1E8-1F1EB",["flag-cf"]],["1F1E8-1F1EC",["flag-cg"]],["1F1E8-1F1ED",["flag-ch"]],["1F1E8-1F1EE",["flag-ci"]],["1F1E8-1F1F0",["flag-ck"]],["1F1E8-1F1F1",["flag-cl"]],["1F1E8-1F1F2",["flag-cm"]],["1F1E8-1F1F3",["cn","flag-cn"]],["1F1E8-1F1F4",["flag-co"]],["1F1E8-1F1F5",["flag-cp"]],["1F1E8-1F1F7",["flag-cr"]],["1F1E8-1F1FA",["flag-cu"]],["1F1E8-1F1FB",["flag-cv"]],["1F1E8-1F1FC",["flag-cw"]],["1F1E8-1F1FD",["flag-cx"]],["1F1E8-1F1FE",["flag-cy"]],["1F1E8-1F1FF",["flag-cz"]],["1F1E9-1F1EA",["de","flag-de"]],["1F1E9-1F1EC",["flag-dg"]],["1F1E9-1F1EF",["flag-dj"]],["1F1E9-1F1F0",["flag-dk"]],["1F1E9-1F1F2",["flag-dm"]],["1F1E9-1F1F4",["flag-do"]],["1F1E9-1F1FF",["flag-dz"]],["1F1EA-1F1E6",["flag-ea"]],["1F1EA-1F1E8",["flag-ec"]],["1F1EA-1F1EA",["flag-ee"]],["1F1EA-1F1EC",["flag-eg"]],["1F1EA-1F1ED",["flag-eh"]],["1F1EA-1F1F7",["flag-er"]],["1F1EA-1F1F8",["es","flag-es"]],["1F1EA-1F1F9",["flag-et"]],["1F1EA-1F1FA",["flag-eu"]],["1F1EB-1F1EE",["flag-fi"]],["1F1EB-1F1EF",["flag-fj"]],["1F1EB-1F1F0",["flag-fk"]],["1F1EB-1F1F2",["flag-fm"]],["1F1EB-1F1F4",["flag-fo"]],["1F1EB-1F1F7",["fr","flag-fr"]],["1F1EC-1F1E6",["flag-ga"]],["1F1EC-1F1E7",["gb","uk","flag-gb"]],["1F1EC-1F1E9",["flag-gd"]],["1F1EC-1F1EA",["flag-ge"]],["1F1EC-1F1EB",["flag-gf"]],["1F1EC-1F1EC",["flag-gg"]],["1F1EC-1F1ED",["flag-gh"]],["1F1EC-1F1EE",["flag-gi"]],["1F1EC-1F1F1",["flag-gl"]],["1F1EC-1F1F2",["flag-gm"]],["1F1EC-1F1F3",["flag-gn"]],["1F1EC-1F1F5",["flag-gp"]],["1F1EC-1F1F6",["flag-gq"]],["1F1EC-1F1F7",["flag-gr"]],["1F1EC-1F1F8",["flag-gs"]],["1F1EC-1F1F9",["flag-gt"]],["1F1EC-1F1FA",["flag-gu"]],["1F1EC-1F1FC",["flag-gw"]],["1F1EC-1F1FE",["flag-gy"]],["1F1ED-1F1F0",["flag-hk"]],["1F1ED-1F1F2",["flag-hm"]],["1F1ED-1F1F3",["flag-hn"]],["1F1ED-1F1F7",["flag-hr"]],["1F1ED-1F1F9",["flag-ht"]],["1F1ED-1F1FA",["flag-hu"]],["1F1EE-1F1E8",["flag-ic"]],["1F1EE-1F1E9",["flag-id"]],["1F1EE-1F1EA",["flag-ie"]],["1F1EE-1F1F1",["flag-il"]],["1F1EE-1F1F2",["flag-im"]],["1F1EE-1F1F3",["flag-in"]],["1F1EE-1F1F4",["flag-io"]],["1F1EE-1F1F6",["flag-iq"]],["1F1EE-1F1F7",["flag-ir"]],["1F1EE-1F1F8",["flag-is"]],["1F1EE-1F1F9",["it","flag-it"]],["1F1EF-1F1EA",["flag-je"]],["1F1EF-1F1F2",["flag-jm"]],["1F1EF-1F1F4",["flag-jo"]],["1F1EF-1F1F5",["jp","flag-jp"]],["1F1F0-1F1EA",["flag-ke"]],["1F1F0-1F1EC",["flag-kg"]],["1F1F0-1F1ED",["flag-kh"]],["1F1F0-1F1EE",["flag-ki"]],["1F1F0-1F1F2",["flag-km"]],["1F1F0-1F1F3",["flag-kn"]],["1F1F0-1F1F5",["flag-kp"]],["1F1F0-1F1F7",["kr","flag-kr"]],["1F1F0-1F1FC",["flag-kw"]],["1F1F0-1F1FE",["flag-ky"]],["1F1F0-1F1FF",["flag-kz"]],["1F1F1-1F1E6",["flag-la"]],["1F1F1-1F1E7",["flag-lb"]],["1F1F1-1F1E8",["flag-lc"]],["1F1F1-1F1EE",["flag-li"]],["1F1F1-1F1F0",["flag-lk"]],["1F1F1-1F1F7",["flag-lr"]],["1F1F1-1F1F8",["flag-ls"]],["1F1F1-1F1F9",["flag-lt"]],["1F1F1-1F1FA",["flag-lu"]],["1F1F1-1F1FB",["flag-lv"]],["1F1F1-1F1FE",["flag-ly"]],["1F1F2-1F1E6",["flag-ma"]],["1F1F2-1F1E8",["flag-mc"]],["1F1F2-1F1E9",["flag-md"]],["1F1F2-1F1EA",["flag-me"]],["1F1F2-1F1EB",["flag-mf"]],["1F1F2-1F1EC",["flag-mg"]],["1F1F2-1F1ED",["flag-mh"]],["1F1F2-1F1F0",["flag-mk"]],["1F1F2-1F1F1",["flag-ml"]],["1F1F2-1F1F2",["flag-mm"]],["1F1F2-1F1F3",["flag-mn"]],["1F1F2-1F1F4",["flag-mo"]],["1F1F2-1F1F5",["flag-mp"]],["1F1F2-1F1F6",["flag-mq"]],["1F1F2-1F1F7",["flag-mr"]],["1F1F2-1F1F8",["flag-ms"]],["1F1F2-1F1F9",["flag-mt"]],["1F1F2-1F1FA",["flag-mu"]],["1F1F2-1F1FB",["flag-mv"]],["1F1F2-1F1FC",["flag-mw"]],["1F1F2-1F1FD",["flag-mx"]],["1F1F2-1F1FE",["flag-my"]],["1F1F2-1F1FF",["flag-mz"]],["1F1F3-1F1E6",["flag-na"]],["1F1F3-1F1E8",["flag-nc"]],["1F1F3-1F1EA",["flag-ne"]],["1F1F3-1F1EB",["flag-nf"]],["1F1F3-1F1EC",["flag-ng"]],["1F1F3-1F1EE",["flag-ni"]],["1F1F3-1F1F1",["flag-nl"]],["1F1F3-1F1F4",["flag-no"]],["1F1F3-1F1F5",["flag-np"]],["1F1F3-1F1F7",["flag-nr"]],["1F1F3-1F1FA",["flag-nu"]],["1F1F3-1F1FF",["flag-nz"]],["1F1F4-1F1F2",["flag-om"]],["1F1F5-1F1E6",["flag-pa"]],["1F1F5-1F1EA",["flag-pe"]],["1F1F5-1F1EB",["flag-pf"]],["1F1F5-1F1EC",["flag-pg"]],["1F1F5-1F1ED",["flag-ph"]],["1F1F5-1F1F0",["flag-pk"]],["1F1F5-1F1F1",["flag-pl"]],["1F1F5-1F1F2",["flag-pm"]],["1F1F5-1F1F3",["flag-pn"]],["1F1F5-1F1F7",["flag-pr"]],["1F1F5-1F1F8",["flag-ps"]],["1F1F5-1F1F9",["flag-pt"]],["1F1F5-1F1FC",["flag-pw"]],["1F1F5-1F1FE",["flag-py"]],["1F1F6-1F1E6",["flag-qa"]],["1F1F7-1F1EA",["flag-re"]],["1F1F7-1F1F4",["flag-ro"]],["1F1F7-1F1F8",["flag-rs"]],["1F1F7-1F1FA",["ru","flag-ru"]],["1F1F7-1F1FC",["flag-rw"]],["1F1F8-1F1E6",["flag-sa"]],["1F1F8-1F1E7",["flag-sb"]],["1F1F8-1F1E8",["flag-sc"]],["1F1F8-1F1E9",["flag-sd"]],["1F1F8-1F1EA",["flag-se"]],["1F1F8-1F1EC",["flag-sg"]],["1F1F8-1F1ED",["flag-sh"]],["1F1F8-1F1EE",["flag-si"]],["1F1F8-1F1EF",["flag-sj"]],["1F1F8-1F1F0",["flag-sk"]],["1F1F8-1F1F1",["flag-sl"]],["1F1F8-1F1F2",["flag-sm"]],["1F1F8-1F1F3",["flag-sn"]],["1F1F8-1F1F4",["flag-so"]],["1F1F8-1F1F7",["flag-sr"]],["1F1F8-1F1F8",["flag-ss"]],["1F1F8-1F1F9",["flag-st"]],["1F1F8-1F1FB",["flag-sv"]],["1F1F8-1F1FD",["flag-sx"]],["1F1F8-1F1FE",["flag-sy"]],["1F1F8-1F1FF",["flag-sz"]],["1F1F9-1F1E6",["flag-ta"]],["1F1F9-1F1E8",["flag-tc"]],["1F1F9-1F1E9",["flag-td"]],["1F1F9-1F1EB",["flag-tf"]],["1F1F9-1F1EC",["flag-tg"]],["1F1F9-1F1ED",["flag-th"]],["1F1F9-1F1EF",["flag-tj"]],["1F1F9-1F1F0",["flag-tk"]],["1F1F9-1F1F1",["flag-tl"]],["1F1F9-1F1F2",["flag-tm"]],["1F1F9-1F1F3",["flag-tn"]],["1F1F9-1F1F4",["flag-to"]],["1F1F9-1F1F7",["flag-tr"]],["1F1F9-1F1F9",["flag-tt"]],["1F1F9-1F1FB",["flag-tv"]],["1F1F9-1F1FC",["flag-tw"]],["1F1F9-1F1FF",["flag-tz"]],["1F1FA-1F1E6",["flag-ua"]],["1F1FA-1F1EC",["flag-ug"]],["1F1FA-1F1F2",["flag-um"]],["1F1FA-1F1F3",["flag-un"]],["1F1FA-1F1F8",["us","flag-us"]],["1F1FA-1F1FE",["flag-uy"]],["1F1FA-1F1FF",["flag-uz"]],["1F1FB-1F1E6",["flag-va"]],["1F1FB-1F1E8",["flag-vc"]],["1F1FB-1F1EA",["flag-ve"]],["1F1FB-1F1EC",["flag-vg"]],["1F1FB-1F1EE",["flag-vi"]],["1F1FB-1F1F3",["flag-vn"]],["1F1FB-1F1FA",["flag-vu"]],["1F1FC-1F1EB",["flag-wf"]],["1F1FC-1F1F8",["flag-ws"]],["1F1FD-1F1F0",["flag-xk"]],["1F1FE-1F1EA",["flag-ye"]],["1F1FE-1F1F9",["flag-yt"]],["1F1FF-1F1E6",["flag-za"]],["1F1FF-1F1F2",["flag-zm"]],["1F1FF-1F1FC",["flag-zw"]],["1F3F4-E0067-E0062-E0065-E006E-E0067-E007F",["flag-england"]],["1F3F4-E0067-E0062-E0073-E0063-E0074-E007F",["flag-scotland"]],["1F3F4-E0067-E0062-E0077-E006C-E0073-E007F",["flag-wales"]]]]')}}]); \ No newline at end of file diff --git a/dist/524.a68e2c04acea27f47c03.js b/dist/524.a68e2c04acea27f47c03.js deleted file mode 100644 index 53be4db65..000000000 --- a/dist/524.a68e2c04acea27f47c03.js +++ /dev/null @@ -1,2 +0,0 @@ -(()=>{"use strict";const e="tt-media-progressive",t="tt-assets",n=("undefined"!=typeof window&&window.innerHeight,Math.round(425),new Set(["newMessage","newScheduledMessage","deleteMessages","deleteScheduledMessages","deleteHistory"]),new Set(["image/png","image/gif","image/jpeg"])),s=new Set(["video/mp4"]);new Set([...n,...s]),new Set(["AU","BD","CA","CO","EG","HN","IE","IN","JO","MX","MY","NI","NZ","PH","PK","SA","SV","US"]);const a=e=>new Promise((t=>{setTimeout((()=>t()),e)})),i=524288,o=new Map;async function r(t){const{url:n}=t.request,s=t.request.headers.get("range"),r=/^bytes=(\d+)-(\d+)?$/g.exec(s||""),c=Number(r[1]);let d=Number(r[2]);if((!d||d-c+1>i)&&(d=c+i-1),0===c&&1===d){const e=t.request.url.match(/fileSize=(\d+)&mimeType=([\w/]+)/),n=e&&Number(e[1]),s=null==e?void 0:e[2];if(n&&s)return new Response(new Uint8Array(2).buffer,{status:206,statusText:"Partial Content",headers:[["Content-Range",`bytes 0-1/${n}`],["Accept-Ranges","bytes"],["Content-Length","2"],["Content-Type",s]]})}const l=`${n}?start=${c}&end=${d}`,[u,f]=await async function(t){const n=await self.caches.open(e);return Promise.all([n.match(`${t}&type=arrayBuffer`).then((e=>e?e.arrayBuffer():void 0)),n.match(`${t}&type=headers`).then((e=>e?e.json():void 0))])}(l);if(u)return new Response(u,{status:206,statusText:"Partial Content",headers:f});let g;try{g=await async function(e,t){if(!e.clientId)return;const n=await self.clients.get(e.clientId);if(!n)return;const s=(e=>{let t;do{t=String(Math.random()).replace("0.","id")}while(e.hasOwnProperty(t));return t})(o),i={},r=Promise.race([a(6e4).then((()=>Promise.reject(new Error("ERROR_PART_TIMEOUT")))),new Promise(((e,t)=>{Object.assign(i,{resolve:e,reject:t})}))]);return o.set(s,i),r.catch((()=>{})).finally((()=>{o.delete(s)})),n.postMessage({type:"requestPart",messageId:s,params:t}),r}(t,{url:n,start:c,end:d})}catch(e){}if(!g)return new Response("",{status:500,statusText:"Failed to fetch progressive part"});const{arrayBuffer:p,fullSize:w,mimeType:h}=g,m=Math.min(d-c+1,p.byteLength);d=c+m-1;const y=p.slice(0,m),I=[["Content-Range",`bytes ${c}-${d}/${w}`],["Accept-Ranges","bytes"],["Content-Length",String(m)],["Content-Type",h]];return m<=524288&&d<2097151&&async function(t,n,s){const a=await self.caches.open(e);Promise.all([a.put(new Request(`${t}&type=arrayBuffer`),new Response(n)),a.put(new Request(`${t}&type=headers`),new Response(JSON.stringify(s)))])}(l,y,I),new Response(y,{status:206,statusText:"Partial Content",headers:I})}async function c(e){const n=await async function(n,s){try{return await Promise.race([a(3e3).then((()=>Promise.reject(new Error("TIMEOUT")))),(async()=>{const n=await self.caches.open(t),s=await n.match(e.request);return{cache:n,cached:s}})()])}catch(e){return void console.error(e)}}(),{cache:s,cached:i}=n||{};if(s&&i){if(i.ok)return i;await s.delete(e.request)}const o=await fetch(e.request);return o.ok&&s&&s.put(e.request,o.clone()),o}var d,l;self.addEventListener("message",(e=>{const{type:t,messageId:n,result:s}=e.data;if("partResponse"===t){const e=o.get(n);e&&e.resolve(s)}})),(l=d||(d={})).True="1",l.False="0";let u=(new Date).valueOf();const f=new Set,g={};function p(e){return e.custom.from_id?e.custom.from_id:e.custom.chat_id||e.custom.channel_id?`-${e.custom.chat_id||e.custom.channel_id}`:void 0}function w(e){if(e.custom.msg_id)return parseInt(e.custom.msg_id,10)}async function h(){const e=new URL(self.registration.scope).origin;return(await self.clients.matchAll({type:"window"})).filter((t=>new URL(t.url).origin===e))}async function m(e){const t=(await h())[0];t&&t.postMessage({type:"playNotificationSound",payload:{id:e}})}function y(e){let{chatId:t,messageId:n,body:s,title:a,icon:i,reaction:o}=e;const r=(new Date).valueOf()-u<1e3,c={body:s,data:{chatId:t,messageId:n,reaction:o,count:1},icon:i||"icon-192x192.png",badge:"icon-192x192.png",tag:String(r?0:t||0),vibrate:[200,100,200]};return Promise.all([m(String(n)||t||""),self.registration.showNotification(a,c)])}async function I(e,t){if(t.chatId&&(e.postMessage({type:"focusMessage",payload:t}),!e.focused))try{await e.focus()}catch(e){}}self.addEventListener("sync",(()=>{u=Date.now()}));const v=/[0-9a-f]{20}.*\.(js|css|woff2?|svg|png|jpg|jpeg|json|wasm)$/;self.addEventListener("install",(e=>{e.waitUntil(self.skipWaiting())})),self.addEventListener("activate",(e=>{e.waitUntil(Promise.race([a(3e3),Promise.all([self.caches.delete(t),self.clients.claim()])]))})),self.addEventListener("fetch",(e=>{const{url:t}=e.request;return t.includes("/progressive/")?(e.respondWith(r(e)),!0):!(!t.startsWith("http")||!t.match(v)||(e.respondWith(c(e)),0))})),self.addEventListener("push",(function(e){const t=function(e){try{return e.data.json()}catch(e){return}}(e);if(!t||t.mute===d.True)return;const n=function(e){return{chatId:p(e),messageId:w(e),title:e.title||"Telegram WebZ",body:e.description}}(t);f.has(n.messageId)?f.delete(n.messageId):e.waitUntil(y(n))})),self.addEventListener("notificationclick",(function(e){const t=self.registration.scope;e.notification.close();const{data:n}=e.notification;e.waitUntil((async()=>{const e=await h();if(await Promise.all(e.map((e=>(g[e.id]=n,I(e,n))))),self.clients.openWindow&&!(e.length>0)){g[0]=n;try{const e=await self.clients.openWindow(t);e&&(g[e.id]=n)}catch(e){}}})())})),self.addEventListener("message",(function(e){if(!e.data)return;const t=e.source;if("clientReady"===e.data.type){const n=g[t.id]||g[0];n&&(delete g[t.id],delete g[0],e.waitUntil(I(t,n)))}if("showMessageNotification"===e.data.type){const t=e.data.payload;e.waitUntil((async()=>(t.chatId&&(await self.registration.getNotifications({tag:t.chatId})).forEach((e=>e.close())),f.add(t.messageId),y(t)))())}"closeMessageNotifications"===e.data.type&&e.waitUntil(async function(e){let{chatId:t,lastReadInboxMessageId:n}=e;const s=await self.registration.getNotifications(),a=n||Number.MAX_VALUE;s.forEach((e=>{("0"===e.tag||e.data.chatId===t&&e.data.messageId<=a)&&e.close()}))}(e.data.payload))}))})(); -//# sourceMappingURL=524.a68e2c04acea27f47c03.js.map \ No newline at end of file diff --git a/dist/524.a68e2c04acea27f47c03.js.map b/dist/524.a68e2c04acea27f47c03.js.map deleted file mode 100644 index 18a2cced1..000000000 --- a/dist/524.a68e2c04acea27f47c03.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"524.a68e2c04acea27f47c03.js","mappings":"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","sources":["webpack://telegram-t/./src/config.ts","webpack://telegram-t/./src/util/schedulers.ts","webpack://telegram-t/./src/serviceWorker/progressive.ts","webpack://telegram-t/./src/util/generateIdFor.ts","webpack://telegram-t/./src/serviceWorker/assetCache.ts","webpack://telegram-t/./src/serviceWorker/pushNotification.ts","webpack://telegram-t/./src/serviceWorker.ts"],"sourcesContent":["export const APP_NAME = process.env.APP_NAME || 'Telegram WebZ';\nexport const APP_VERSION = process.env.APP_VERSION!;\n\nexport const DEBUG = (\n process.env.APP_ENV !== 'production' && process.env.APP_ENV !== 'perf' && process.env.APP_ENV !== 'test'\n);\nexport const DEBUG_MORE = false;\n\nexport const IS_TEST = process.env.APP_ENV === 'test';\nexport const IS_PERF = process.env.APP_ENV === 'perf';\n\nexport const DEBUG_ALERT_MSG = 'Shoot!\\nSomething went wrong, please see the error details in Dev Tools Console.';\nexport const DEBUG_GRAMJS = false;\n\nexport const PAGE_TITLE = 'Telegram';\nexport const INACTIVE_MARKER = ' [Inactive]';\n\nexport const DEBUG_PAYMENT_SMART_GLOCAL = false;\n\nexport const SESSION_USER_KEY = 'user_auth';\nexport const LEGACY_SESSION_KEY = 'GramJs:sessionId';\n\nexport const GLOBAL_STATE_CACHE_DISABLED = false;\nexport const GLOBAL_STATE_CACHE_KEY = 'tt-global-state';\nexport const GLOBAL_STATE_CACHE_USER_LIST_LIMIT = 500;\nexport const GLOBAL_STATE_CACHE_CHAT_LIST_LIMIT = 200;\nexport const GLOBAL_STATE_CACHE_CHATS_WITH_MESSAGES_LIMIT = 30;\n\nexport const MEDIA_CACHE_DISABLED = false;\nexport const MEDIA_CACHE_NAME = 'tt-media';\nexport const MEDIA_CACHE_NAME_AVATARS = 'tt-media-avatars';\nexport const MEDIA_PROGRESSIVE_CACHE_DISABLED = false;\nexport const MEDIA_PROGRESSIVE_CACHE_NAME = 'tt-media-progressive';\nexport const MEDIA_CACHE_MAX_BYTES = 512 * 1024; // 512 KB\nexport const CUSTOM_BG_CACHE_NAME = 'tt-custom-bg';\nexport const LANG_CACHE_NAME = 'tt-lang-packs-v8';\nexport const ASSET_CACHE_NAME = 'tt-assets';\nexport const AUTODOWNLOAD_FILESIZE_MB_LIMITS = [1, 5, 10, 50, 100, 500];\n\nexport const DOWNLOAD_WORKERS = 16;\nexport const UPLOAD_WORKERS = 16;\n\nconst isBigScreen = typeof window !== 'undefined' && window.innerHeight >= 900;\n\nexport const MIN_PASSWORD_LENGTH = 1;\n\nexport const MESSAGE_LIST_SLICE = isBigScreen ? 60 : 40;\nexport const MESSAGE_LIST_VIEWPORT_LIMIT = MESSAGE_LIST_SLICE * 2;\n\nexport const CHAT_HEIGHT_PX = 72;\nexport const CHAT_LIST_SLICE = isBigScreen ? 30 : 25;\nexport const CHAT_LIST_LOAD_SLICE = 100;\nexport const SHARED_MEDIA_SLICE = 42;\nexport const MESSAGE_SEARCH_SLICE = 42;\nexport const GLOBAL_SEARCH_SLICE = 20;\nexport const MEMBERS_SLICE = 30;\nexport const MEMBERS_LOAD_SLICE = 200;\nexport const PINNED_MESSAGES_LIMIT = 50;\nexport const BLOCKED_LIST_LIMIT = 100;\nexport const PROFILE_PHOTOS_LIMIT = 40;\nexport const PROFILE_SENSITIVE_AREA = 500;\nexport const COMMON_CHATS_LIMIT = 100;\nexport const GROUP_CALL_PARTICIPANTS_LIMIT = 100;\nexport const REACTION_LIST_LIMIT = 100;\n\nexport const TOP_CHAT_MESSAGES_PRELOAD_LIMIT = 20;\n\nexport const SPONSORED_MESSAGE_CACHE_MS = 300000; // 5 min\n\nexport const DEFAULT_VOLUME = 1;\nexport const DEFAULT_PLAYBACK_RATE = 1;\n\nexport const ANIMATION_LEVEL_MIN = 0;\nexport const ANIMATION_LEVEL_MED = 1;\nexport const ANIMATION_LEVEL_MAX = 2;\nexport const ANIMATION_LEVEL_DEFAULT = ANIMATION_LEVEL_MAX;\n\nexport const DEFAULT_MESSAGE_TEXT_SIZE_PX = 16;\nexport const IOS_DEFAULT_MESSAGE_TEXT_SIZE_PX = 17;\nexport const MACOS_DEFAULT_MESSAGE_TEXT_SIZE_PX = 15;\n\nexport const DRAFT_DEBOUNCE = 10000; // 10s\nexport const SEND_MESSAGE_ACTION_INTERVAL = 3000; // 3s\n\nexport const EDITABLE_INPUT_ID = 'editable-message-text';\nexport const EDITABLE_INPUT_MODAL_ID = 'editable-message-text-modal';\n\nexport const CUSTOM_APPENDIX_ATTRIBUTE = 'data-has-custom-appendix';\n\n// Screen width where Pinned Message / Audio Player in the Middle Header can be safely displayed\nexport const SAFE_SCREEN_WIDTH_FOR_STATIC_RIGHT_COLUMN = 1440; // px\n// Screen width where Pinned Message / Audio Player in the Middle Header shouldn't collapse with ChatInfo\nexport const SAFE_SCREEN_WIDTH_FOR_CHAT_INFO = 1150; // px\n\nexport const MIN_SCREEN_WIDTH_FOR_STATIC_RIGHT_COLUMN = 1275; // px\nexport const MIN_SCREEN_WIDTH_FOR_STATIC_LEFT_COLUMN = 925; // px\nexport const MOBILE_SCREEN_MAX_WIDTH = 600; // px\nexport const MOBILE_SCREEN_LANDSCAPE_MAX_WIDTH = 950; // px\nexport const MOBILE_SCREEN_LANDSCAPE_MAX_HEIGHT = 450; // px\n\nexport const LOCAL_MESSAGE_ID_BASE = 1e9;\nexport const TMP_CHAT_ID = '0';\n\nexport const ANIMATION_END_DELAY = 100;\n\nexport const FAST_SMOOTH_MAX_DISTANCE = 1500;\nexport const FAST_SMOOTH_MIN_DURATION = 250;\nexport const FAST_SMOOTH_MAX_DURATION = 600;\nexport const FAST_SMOOTH_SHORT_TRANSITION_MAX_DISTANCE = 500; // px\n\n// Average duration of message sending animation\nexport const API_UPDATE_THROTTLE = Math.round((FAST_SMOOTH_MIN_DURATION + FAST_SMOOTH_MAX_DURATION) / 2);\nexport const API_THROTTLE_RESET_UPDATES = new Set([\n 'newMessage', 'newScheduledMessage', 'deleteMessages', 'deleteScheduledMessages', 'deleteHistory',\n]);\n\nexport const STICKER_SIZE_INLINE_DESKTOP_FACTOR = 13;\nexport const STICKER_SIZE_INLINE_MOBILE_FACTOR = 11;\nexport const STICKER_SIZE_AUTH = 160;\nexport const STICKER_SIZE_AUTH_MOBILE = 120;\nexport const STICKER_SIZE_PICKER = 64;\nexport const STICKER_SIZE_GENERAL_SETTINGS = 48;\nexport const STICKER_SIZE_PICKER_HEADER = 32;\nexport const STICKER_SIZE_SEARCH = 64;\nexport const STICKER_SIZE_MODAL = 64;\nexport const STICKER_SIZE_TWO_FA = 160;\nexport const STICKER_SIZE_DISCUSSION_GROUPS = 140;\nexport const STICKER_SIZE_FOLDER_SETTINGS = 100;\nexport const STICKER_SIZE_INLINE_BOT_RESULT = 100;\nexport const STICKER_SIZE_JOIN_REQUESTS = 140;\nexport const STICKER_SIZE_INVITES = 140;\nexport const RECENT_STICKERS_LIMIT = 20;\nexport const NO_STICKER_SET_ID = 'NO_STICKER_SET';\n\nexport const BASE_EMOJI_KEYWORD_LANG = 'en';\n\nexport const MENU_TRANSITION_DURATION = 200;\nexport const SLIDE_TRANSITION_DURATION = 450;\n\nexport const VIDEO_MOV_TYPE = 'video/quicktime';\nexport const VIDEO_WEBM_TYPE = 'video/webm';\n\nexport const SUPPORTED_IMAGE_CONTENT_TYPES = new Set([\n 'image/png', 'image/gif', 'image/jpeg',\n]);\n\nexport const SUPPORTED_VIDEO_CONTENT_TYPES = new Set([\n 'video/mp4', // video/quicktime added dynamically in environment.ts\n]);\n\nexport const CONTENT_TYPES_WITH_PREVIEW = new Set([\n ...SUPPORTED_IMAGE_CONTENT_TYPES,\n ...SUPPORTED_VIDEO_CONTENT_TYPES,\n]);\n\nexport const CONTENT_NOT_SUPPORTED = 'The message is not supported on this version of Telegram.';\n\n// eslint-disable-next-line max-len\nexport const RE_LINK_TEMPLATE = '((ftp|https?):\\\\/\\\\/)?((www\\\\.)?[-a-zA-Z0-9@:%._+~#=]{1,256}\\\\.[a-zA-Z0-9()]{1,63})\\\\b([-a-zA-Z0-9()@:%_+.~#?&/=]*)';\nexport const RE_MENTION_TEMPLATE = '(@[\\\\w\\\\d_-]+)';\nexport const RE_TG_LINK = /^tg:(\\/\\/)?([?=&\\d\\w_-]+)?/gm;\nexport const RE_TME_LINK = /^(?:https?:\\/\\/)?(?:t\\.me\\/)/gm;\n\n// eslint-disable-next-line max-len\nexport const COUNTRIES_WITH_12H_TIME_FORMAT = new Set(['AU', 'BD', 'CA', 'CO', 'EG', 'HN', 'IE', 'IN', 'JO', 'MX', 'MY', 'NI', 'NZ', 'PH', 'PK', 'SA', 'SV', 'US']);\n\n// MTProto constants\nexport const SERVICE_NOTIFICATIONS_USER_ID = '777000';\nexport const REPLIES_USER_ID = '1271266957'; // TODO For Test connection ID must be equal to 708513\nexport const ALL_FOLDER_ID = 0;\nexport const ARCHIVED_FOLDER_ID = 1;\nexport const DELETED_COMMENTS_CHANNEL_ID = '-777';\nexport const MAX_MEDIA_FILES_FOR_ALBUM = 10;\nexport const MAX_ACTIVE_PINNED_CHATS = 5;\nexport const SCHEDULED_WHEN_ONLINE = 0x7FFFFFFE;\nexport const DEFAULT_LANG_CODE = 'en';\nexport const DEFAULT_LANG_PACK = 'android';\nexport const LANG_PACKS = ['android', 'ios', 'tdesktop', 'macos'] as const;\nexport const TIPS_USERNAME = 'TelegramTips';\nexport const LOCALIZED_TIPS = ['ar', 'pt-br', 'id', 'it', 'ko', 'ms', 'pl', 'es', 'tr'];\nexport const FEEDBACK_URL = 'https://bugs.telegram.org/?tag_ids=41&sort=time';\nexport const LIGHT_THEME_BG_COLOR = '#A2AF8E';\nexport const DARK_THEME_BG_COLOR = '#0F0F0F';\nexport const DARK_THEME_PATTERN_COLOR = '#0a0a0a8c';\nexport const DEFAULT_PATTERN_COLOR = 'rgba(90, 110, 70, 0.6)';\n\n// Group calls\nexport const GROUP_CALL_VOLUME_MULTIPLIER = 100;\nexport const GROUP_CALL_DEFAULT_VOLUME = 100 * GROUP_CALL_VOLUME_MULTIPLIER;\nexport const ENABLE_THUMBNAIL_VIDEO = false;\n","type Scheduler =\n typeof requestAnimationFrame\n | typeof onTickEnd\n | typeof runNow;\n\nexport function debounce(\n fn: F,\n ms: number,\n shouldRunFirst = true,\n shouldRunLast = true,\n) {\n let waitingTimeout: number | undefined;\n\n return (...args: Parameters) => {\n if (waitingTimeout) {\n clearTimeout(waitingTimeout);\n waitingTimeout = undefined;\n } else if (shouldRunFirst) {\n fn(...args);\n }\n\n // eslint-disable-next-line no-restricted-globals\n waitingTimeout = self.setTimeout(() => {\n if (shouldRunLast) {\n fn(...args);\n }\n\n waitingTimeout = undefined;\n }, ms);\n };\n}\n\nexport function throttle(\n fn: F,\n ms: number,\n shouldRunFirst = true,\n) {\n let interval: number | undefined;\n let isPending: boolean;\n let args: Parameters;\n\n return (..._args: Parameters) => {\n isPending = true;\n args = _args;\n\n if (!interval) {\n if (shouldRunFirst) {\n isPending = false;\n fn(...args);\n }\n\n // eslint-disable-next-line no-restricted-globals\n interval = self.setInterval(() => {\n if (!isPending) {\n // eslint-disable-next-line no-restricted-globals\n self.clearInterval(interval!);\n interval = undefined;\n return;\n }\n\n isPending = false;\n fn(...args);\n }, ms);\n }\n };\n}\n\nexport function throttleWithRaf(fn: F) {\n return throttleWith(fastRaf, fn);\n}\n\nexport function throttleWithPrimaryRaf(fn: F) {\n return throttleWith(fastRafPrimary, fn);\n}\n\nexport function throttleWithTickEnd(fn: F) {\n return throttleWith(onTickEnd, fn);\n}\n\nexport function throttleWithNow(fn: F) {\n return throttleWith(runNow, fn);\n}\n\nexport function throttleWith(schedulerFn: Scheduler, fn: F) {\n let waiting = false;\n let args: Parameters;\n\n return (..._args: Parameters) => {\n args = _args;\n\n if (!waiting) {\n waiting = true;\n\n schedulerFn(() => {\n waiting = false;\n fn(...args);\n });\n }\n };\n}\n\nexport function onIdle(cb: NoneToVoidFunction, timeout?: number) {\n // eslint-disable-next-line no-restricted-globals\n if (self.requestIdleCallback) {\n // eslint-disable-next-line no-restricted-globals\n self.requestIdleCallback(cb, { timeout });\n } else {\n onTickEnd(cb);\n }\n}\n\nfunction runNow(fn: NoneToVoidFunction) {\n fn();\n}\n\nexport const pause = (ms: number) => new Promise((resolve) => {\n setTimeout(() => resolve(), ms);\n});\n\nexport function rafPromise() {\n return new Promise((resolve) => {\n fastRaf(resolve);\n });\n}\n\nlet fastRafCallbacks: NoneToVoidFunction[] | undefined;\nlet fastRafPrimaryCallbacks: NoneToVoidFunction[] | undefined;\n\n// May result in an immediate execution if called from another `requestAnimationFrame` callback\nexport function fastRaf(callback: NoneToVoidFunction, isPrimary = false) {\n if (!fastRafCallbacks) {\n fastRafCallbacks = isPrimary ? [] : [callback];\n fastRafPrimaryCallbacks = isPrimary ? [callback] : [];\n\n requestAnimationFrame(() => {\n const currentCallbacks = fastRafCallbacks!;\n const currentPrimaryCallbacks = fastRafPrimaryCallbacks!;\n fastRafCallbacks = undefined;\n fastRafPrimaryCallbacks = undefined;\n currentPrimaryCallbacks.forEach((cb) => cb());\n currentCallbacks.forEach((cb) => cb());\n });\n } else if (isPrimary) {\n fastRafPrimaryCallbacks!.push(callback);\n } else {\n fastRafCallbacks.push(callback);\n }\n}\n\nexport function fastRafPrimary(callback: NoneToVoidFunction) {\n fastRaf(callback, true);\n}\n\nlet onTickEndCallbacks: NoneToVoidFunction[] | undefined;\nlet onTickEndPrimaryCallbacks: NoneToVoidFunction[] | undefined;\n\nexport function onTickEnd(callback: NoneToVoidFunction, isPrimary = false) {\n if (!onTickEndCallbacks) {\n onTickEndCallbacks = isPrimary ? [] : [callback];\n onTickEndPrimaryCallbacks = isPrimary ? [callback] : [];\n\n Promise.resolve().then(() => {\n const currentCallbacks = onTickEndCallbacks!;\n const currentPrimaryCallbacks = onTickEndPrimaryCallbacks!;\n onTickEndCallbacks = undefined;\n onTickEndPrimaryCallbacks = undefined;\n currentPrimaryCallbacks.forEach((cb) => cb());\n currentCallbacks.forEach((cb) => cb());\n });\n } else if (isPrimary) {\n onTickEndPrimaryCallbacks!.push(callback);\n } else {\n onTickEndCallbacks.push(callback);\n }\n}\n\nexport function onTickEndPrimary(callback: NoneToVoidFunction) {\n onTickEnd(callback, true);\n}\n\nlet beforeUnloadCallbacks: NoneToVoidFunction[] | undefined;\n\nexport function onBeforeUnload(callback: NoneToVoidFunction, isLast = false) {\n if (!beforeUnloadCallbacks) {\n beforeUnloadCallbacks = [];\n // eslint-disable-next-line no-restricted-globals\n self.addEventListener('beforeunload', () => {\n beforeUnloadCallbacks!.forEach((cb) => cb());\n });\n }\n\n if (isLast) {\n beforeUnloadCallbacks.push(callback);\n } else {\n beforeUnloadCallbacks.unshift(callback);\n }\n\n return () => {\n beforeUnloadCallbacks = beforeUnloadCallbacks!.filter((cb) => cb !== callback);\n };\n}\n","import { pause } from '../util/schedulers';\nimport generateIdFor from '../util/generateIdFor';\nimport {\n DEBUG,\n MEDIA_CACHE_MAX_BYTES,\n MEDIA_PROGRESSIVE_CACHE_DISABLED,\n MEDIA_PROGRESSIVE_CACHE_NAME,\n} from '../config';\n\ndeclare const self: ServiceWorkerGlobalScope;\n\ntype PartInfo = {\n type: 'PartInfo';\n arrayBuffer: ArrayBuffer;\n mimeType: 'string';\n fullSize: number;\n};\n\ntype RequestStates = {\n resolve: (response: PartInfo) => void;\n reject: () => void;\n};\n\nconst MB = 1024 * 1024;\nconst DEFAULT_PART_SIZE = 0.5 * MB;\nconst MAX_END_TO_CACHE = 2 * MB - 1; // We only cache the first 2 MB of each file\nconst PART_TIMEOUT = 60000;\n\nconst requestStates = new Map();\n\nexport async function respondForProgressive(e: FetchEvent) {\n const { url } = e.request;\n const range = e.request.headers.get('range');\n const bytes = /^bytes=(\\d+)-(\\d+)?$/g.exec(range || '')!;\n const start = Number(bytes[1]);\n const originalEnd = Number(bytes[2]);\n\n let end = originalEnd;\n if (!end || (end - start + 1) > DEFAULT_PART_SIZE) {\n end = start + DEFAULT_PART_SIZE - 1;\n }\n\n // Optimization for Safari\n if (start === 0 && end === 1) {\n const match = e.request.url.match(/fileSize=(\\d+)&mimeType=([\\w/]+)/);\n const fileSize = match && Number(match[1]);\n const mimeType = match?.[2];\n\n if (fileSize && mimeType) {\n return new Response(new Uint8Array(2).buffer, {\n status: 206,\n statusText: 'Partial Content',\n headers: [\n ['Content-Range', `bytes 0-1/${fileSize}`],\n ['Accept-Ranges', 'bytes'],\n ['Content-Length', '2'],\n ['Content-Type', mimeType],\n ],\n });\n }\n }\n\n const cacheKey = `${url}?start=${start}&end=${end}`;\n const [cachedArrayBuffer, cachedHeaders] = !MEDIA_PROGRESSIVE_CACHE_DISABLED ? await fetchFromCache(cacheKey) : [];\n\n if (DEBUG) {\n // eslint-disable-next-line no-console\n console.log(\n `FETCH PROGRESSIVE ${cacheKey} (request: ${start}-${originalEnd}) CACHED: ${Boolean(cachedArrayBuffer)}`,\n );\n }\n\n if (cachedArrayBuffer) {\n return new Response(cachedArrayBuffer, {\n status: 206,\n statusText: 'Partial Content',\n headers: cachedHeaders,\n });\n }\n\n let partInfo;\n try {\n partInfo = await requestPart(e, { url, start, end });\n } catch (err) {\n if (DEBUG) {\n // eslint-disable-next-line no-console\n console.error('FETCH PROGRESSIVE', err);\n }\n }\n\n if (!partInfo) {\n return new Response('', {\n status: 500,\n statusText: 'Failed to fetch progressive part',\n });\n }\n\n const { arrayBuffer, fullSize, mimeType } = partInfo;\n\n const partSize = Math.min(end - start + 1, arrayBuffer.byteLength);\n end = start + partSize - 1;\n const arrayBufferPart = arrayBuffer.slice(0, partSize);\n const headers = [\n ['Content-Range', `bytes ${start}-${end}/${fullSize}`],\n ['Accept-Ranges', 'bytes'],\n ['Content-Length', String(partSize)],\n ['Content-Type', mimeType],\n ];\n\n if (!MEDIA_PROGRESSIVE_CACHE_DISABLED && partSize <= MEDIA_CACHE_MAX_BYTES && end < MAX_END_TO_CACHE) {\n saveToCache(cacheKey, arrayBufferPart, headers);\n }\n\n return new Response(arrayBufferPart, {\n status: 206,\n statusText: 'Partial Content',\n headers,\n });\n}\n\n// We can not cache 206 responses: https://github.com/GoogleChrome/workbox/issues/1644#issuecomment-638741359\nasync function fetchFromCache(cacheKey: string) {\n const cache = await self.caches.open(MEDIA_PROGRESSIVE_CACHE_NAME);\n\n return Promise.all([\n cache.match(`${cacheKey}&type=arrayBuffer`).then((r) => (r ? r.arrayBuffer() : undefined)),\n cache.match(`${cacheKey}&type=headers`).then((r) => (r ? r.json() : undefined)),\n ]);\n}\n\nasync function saveToCache(cacheKey: string, arrayBuffer: ArrayBuffer, headers: HeadersInit) {\n const cache = await self.caches.open(MEDIA_PROGRESSIVE_CACHE_NAME);\n\n return Promise.all([\n cache.put(new Request(`${cacheKey}&type=arrayBuffer`), new Response(arrayBuffer)),\n cache.put(new Request(`${cacheKey}&type=headers`), new Response(JSON.stringify(headers))),\n ]);\n}\n\nasync function requestPart(\n e: FetchEvent,\n params: { url: string; start: number; end: number },\n): Promise {\n if (!e.clientId) {\n return undefined;\n }\n\n // eslint-disable-next-line no-restricted-globals\n const client = await self.clients.get(e.clientId);\n if (!client) {\n return undefined;\n }\n\n const messageId = generateIdFor(requestStates);\n const requestState = {} as RequestStates;\n\n const promise = Promise.race([\n pause(PART_TIMEOUT).then(() => Promise.reject(new Error('ERROR_PART_TIMEOUT'))),\n new Promise((resolve, reject) => {\n Object.assign(requestState, { resolve, reject });\n }),\n ]);\n\n requestStates.set(messageId, requestState);\n promise\n .catch(() => undefined)\n .finally(() => {\n requestStates.delete(messageId);\n });\n\n client.postMessage({\n type: 'requestPart',\n messageId,\n params,\n });\n\n return promise;\n}\n\nself.addEventListener('message', (e) => {\n const { type, messageId, result } = e.data as {\n type: string;\n messageId: string;\n result: PartInfo;\n };\n\n if (type === 'partResponse') {\n const requestState = requestStates.get(messageId);\n if (requestState) {\n requestState.resolve(result);\n }\n }\n});\n","const generateIdFor = (store: AnyLiteral) => {\n let id;\n\n do {\n id = String(Math.random()).replace('0.', 'id');\n } while (store.hasOwnProperty(id));\n\n return id;\n};\n\nexport default generateIdFor;\n","import { ASSET_CACHE_NAME } from '../config';\nimport { pause } from '../util/schedulers';\n\ndeclare const self: ServiceWorkerGlobalScope;\n\n// An attempt to fix freezing UI on iOS\nconst CACHE_TIMEOUT = 3000;\n\nexport async function respondWithCache(e: FetchEvent) {\n const cacheResult = await withTimeout(async () => {\n const cache = await self.caches.open(ASSET_CACHE_NAME);\n const cached = await cache.match(e.request);\n\n return { cache, cached };\n }, CACHE_TIMEOUT);\n\n const { cache, cached } = cacheResult || {};\n\n if (cache && cached) {\n if (cached.ok) {\n return cached;\n } else {\n await cache.delete(e.request);\n }\n }\n\n const remote = await fetch(e.request);\n\n if (remote.ok && cache) {\n cache.put(e.request, remote.clone());\n }\n\n return remote;\n}\n\nasync function withTimeout(cb: () => Promise, timeout: number) {\n try {\n return await Promise.race([\n pause(timeout).then(() => Promise.reject(new Error('TIMEOUT'))),\n cb(),\n ]);\n } catch (err) {\n // eslint-disable-next-line no-console\n console.error(err);\n return undefined;\n }\n}\n\nexport function clearAssetCache() {\n return self.caches.delete(ASSET_CACHE_NAME);\n}\n","import { APP_NAME, DEBUG, DEBUG_MORE } from '../config';\n\ndeclare const self: ServiceWorkerGlobalScope;\n\nenum Boolean {\n True = '1',\n False = '0',\n}\n\ntype PushData = {\n custom: {\n msg_id?: string;\n channel_id?: string;\n chat_id?: string;\n from_id?: string;\n };\n mute: Boolean;\n badge: Boolean;\n loc_key: string;\n loc_args: string[];\n random_id: number;\n title: string;\n description: string;\n};\n\ntype NotificationData = {\n messageId?: number;\n chatId?: string;\n title: string;\n body: string;\n icon?: string;\n reaction?: string;\n};\n\ntype FocusMessageData = {\n chatId?: string;\n messageId?: number;\n reaction?: string;\n};\n\ntype CloseNotificationData = {\n lastReadInboxMessageId?: number;\n chatId: string;\n};\n\nlet lastSyncAt = new Date().valueOf();\nconst shownNotifications = new Set();\nconst clickBuffer: Record = {};\n\nfunction getPushData(e: PushEvent | Notification): PushData | undefined {\n try {\n return e.data.json();\n } catch (error) {\n if (DEBUG) {\n // eslint-disable-next-line no-console\n console.log('[SW] Unable to parse push notification data', e.data);\n }\n return undefined;\n }\n}\n\nfunction getChatId(data: PushData) {\n if (data.custom.from_id) {\n return data.custom.from_id;\n }\n\n // Chats and channels have “negative” IDs\n if (data.custom.chat_id || data.custom.channel_id) {\n return `-${data.custom.chat_id || data.custom.channel_id}`;\n }\n\n return undefined;\n}\n\nfunction getMessageId(data: PushData) {\n if (!data.custom.msg_id) return undefined;\n return parseInt(data.custom.msg_id, 10);\n}\n\nfunction getNotificationData(data: PushData): NotificationData {\n return {\n chatId: getChatId(data),\n messageId: getMessageId(data),\n title: data.title || APP_NAME,\n body: data.description,\n };\n}\n\nasync function getClients() {\n const appUrl = new URL(self.registration.scope).origin;\n const clients = await self.clients.matchAll({ type: 'window' }) as WindowClient[];\n return clients.filter((client) => {\n return new URL(client.url).origin === appUrl;\n });\n}\n\nasync function playNotificationSound(id: string) {\n const clients = await getClients();\n const client = clients[0];\n if (!client) return;\n client.postMessage({\n type: 'playNotificationSound',\n payload: { id },\n });\n}\n\nfunction showNotification({\n chatId,\n messageId,\n body,\n title,\n icon,\n reaction,\n}: NotificationData) {\n const isFirstBatch = new Date().valueOf() - lastSyncAt < 1000;\n const tag = String(isFirstBatch ? 0 : chatId || 0);\n const options: NotificationOptions = {\n body,\n data: {\n chatId,\n messageId,\n reaction,\n count: 1,\n },\n icon: icon || 'icon-192x192.png',\n badge: 'icon-192x192.png',\n tag,\n vibrate: [200, 100, 200],\n };\n\n return Promise.all([\n playNotificationSound(String(messageId) || chatId || ''),\n self.registration.showNotification(title, options),\n ]);\n}\n\nasync function closeNotifications({\n chatId,\n lastReadInboxMessageId,\n}: CloseNotificationData) {\n const notifications = await self.registration.getNotifications();\n const lastMessageId = lastReadInboxMessageId || Number.MAX_VALUE;\n notifications.forEach((notification) => {\n if (\n notification.tag === '0'\n || (notification.data.chatId === chatId && notification.data.messageId <= lastMessageId)\n ) {\n notification.close();\n }\n });\n}\n\nexport function handlePush(e: PushEvent) {\n if (DEBUG) {\n // eslint-disable-next-line no-console\n console.log('[SW] Push received event', e);\n if (e.data) {\n // eslint-disable-next-line no-console\n console.log('[SW] Push received with data', e.data.json());\n }\n }\n\n const data = getPushData(e);\n\n // Do not show muted notifications\n if (!data || data.mute === Boolean.True) return;\n\n const notification = getNotificationData(data);\n\n // Don't show already triggered notification\n if (shownNotifications.has(notification.messageId)) {\n shownNotifications.delete(notification.messageId);\n return;\n }\n\n e.waitUntil(showNotification(notification));\n}\n\nasync function focusChatMessage(client: WindowClient, data: FocusMessageData) {\n if (!data.chatId) return;\n client.postMessage({\n type: 'focusMessage',\n payload: data,\n });\n if (!client.focused) {\n // Catch \"focus not allowed\" DOM Exceptions\n try {\n await client.focus();\n } catch (error) {\n if (DEBUG) {\n // eslint-disable-next-line no-console\n console.warn('[SW] ', error);\n }\n }\n }\n}\n\nexport function handleNotificationClick(e: NotificationEvent) {\n const appUrl = self.registration.scope;\n e.notification.close(); // Android needs explicit close.\n const { data } = e.notification;\n const notifyClients = async () => {\n const clients = await getClients();\n await Promise.all(clients.map((client) => {\n clickBuffer[client.id] = data;\n return focusChatMessage(client, data);\n }));\n if (!self.clients.openWindow || clients.length > 0) return undefined;\n // Store notification data for default client (fix for android)\n clickBuffer[0] = data;\n // If there is no opened client we need to open one and wait until it is fully loaded\n try {\n const newClient = await self.clients.openWindow(appUrl);\n if (newClient) {\n // Store notification data until client is fully loaded\n clickBuffer[newClient.id] = data;\n }\n } catch (error) {\n if (DEBUG) {\n // eslint-disable-next-line no-console\n console.warn('[SW] ', error);\n }\n }\n return undefined;\n };\n e.waitUntil(notifyClients());\n}\n\nexport function handleClientMessage(e: ExtendableMessageEvent) {\n if (DEBUG_MORE) {\n // eslint-disable-next-line no-console\n console.log('[SW] New message from client', e);\n }\n if (!e.data) return;\n const source = e.source as WindowClient;\n if (e.data.type === 'clientReady') {\n // focus on chat message when client is fully ready\n const data = clickBuffer[source.id] || clickBuffer[0];\n if (data) {\n delete clickBuffer[source.id];\n delete clickBuffer[0];\n e.waitUntil(focusChatMessage(source, data));\n }\n }\n if (e.data.type === 'showMessageNotification') {\n // store messageId for already shown notification\n const notification: NotificationData = e.data.payload;\n e.waitUntil((async () => {\n // Close existing notification if it is already shown\n if (notification.chatId) {\n const notifications = await self.registration.getNotifications({ tag: notification.chatId });\n notifications.forEach((n) => n.close());\n }\n // Mark this notification as shown if it was handled locally\n shownNotifications.add(notification.messageId);\n return showNotification(notification);\n })());\n }\n\n if (e.data.type === 'closeMessageNotifications') {\n e.waitUntil(closeNotifications(e.data.payload));\n }\n}\n\nself.addEventListener('sync', () => {\n lastSyncAt = Date.now();\n});\n","import { DEBUG } from './config';\nimport { respondForProgressive } from './serviceWorker/progressive';\nimport { respondWithCache, clearAssetCache } from './serviceWorker/assetCache';\nimport { handlePush, handleNotificationClick, handleClientMessage } from './serviceWorker/pushNotification';\nimport { pause } from './util/schedulers';\n\ndeclare const self: ServiceWorkerGlobalScope;\n\nconst ASSET_CACHE_PATTERN = /[0-9a-f]{20}.*\\.(js|css|woff2?|svg|png|jpg|jpeg|json|wasm)$/;\nconst ACTIVATE_TIMEOUT = 3000;\n\nself.addEventListener('install', (e) => {\n if (DEBUG) {\n // eslint-disable-next-line no-console\n console.log('ServiceWorker installed');\n }\n\n // Activate worker immediately\n e.waitUntil(self.skipWaiting());\n});\n\nself.addEventListener('activate', (e) => {\n if (DEBUG) {\n // eslint-disable-next-line no-console\n console.log('ServiceWorker activated');\n }\n\n e.waitUntil(\n Promise.race([\n // An attempt to fix freezing UI on iOS\n pause(ACTIVATE_TIMEOUT),\n Promise.all([\n clearAssetCache(),\n // Become available to all pages\n self.clients.claim(),\n ]),\n ]),\n );\n});\n\n// eslint-disable-next-line no-restricted-globals\nself.addEventListener('fetch', (e: FetchEvent) => {\n const { url } = e.request;\n\n if (url.includes('/progressive/')) {\n e.respondWith(respondForProgressive(e));\n return true;\n }\n\n if (url.startsWith('http') && url.match(ASSET_CACHE_PATTERN)) {\n e.respondWith(respondWithCache(e));\n return true;\n }\n\n return false;\n});\n\nself.addEventListener('push', handlePush);\nself.addEventListener('notificationclick', handleNotificationClick);\nself.addEventListener('message', handleClientMessage);\n"],"names":["MEDIA_PROGRESSIVE_CACHE_NAME","ASSET_CACHE_NAME","SUPPORTED_IMAGE_CONTENT_TYPES","window","innerHeight","Math","round","Set","SUPPORTED_VIDEO_CONTENT_TYPES","pause","ms","Promise","resolve","setTimeout","DEFAULT_PART_SIZE","requestStates","Map","async","respondForProgressive","e","url","request","range","headers","get","bytes","exec","start","Number","end","match","fileSize","mimeType","Response","Uint8Array","buffer","status","statusText","cacheKey","cachedArrayBuffer","cachedHeaders","cache","self","caches","open","all","then","r","arrayBuffer","undefined","json","fetchFromCache","partInfo","params","clientId","client","clients","messageId","store","id","String","random","replace","hasOwnProperty","generateIdFor","requestState","promise","race","reject","Error","Object","assign","set","catch","finally","delete","postMessage","type","requestPart","err","fullSize","partSize","min","byteLength","arrayBufferPart","slice","put","Request","JSON","stringify","saveToCache","respondWithCache","cacheResult","cb","timeout","cached","console","error","withTimeout","ok","remote","fetch","clone","Boolean","addEventListener","result","data","lastSyncAt","Date","valueOf","shownNotifications","clickBuffer","getChatId","custom","from_id","chat_id","channel_id","getMessageId","msg_id","parseInt","getClients","appUrl","URL","registration","scope","origin","matchAll","filter","playNotificationSound","payload","showNotification","chatId","body","title","icon","reaction","isFirstBatch","options","count","badge","tag","vibrate","focusChatMessage","focused","focus","now","ASSET_CACHE_PATTERN","waitUntil","skipWaiting","claim","includes","respondWith","startsWith","getPushData","mute","True","notification","description","getNotificationData","has","close","map","openWindow","length","newClient","notifyClients","source","getNotifications","forEach","n","add","lastReadInboxMessageId","notifications","lastMessageId","MAX_VALUE","closeNotifications"],"sourceRoot":""} \ No newline at end of file diff --git a/dist/524.c7cd23c07ec78a2d977e.js b/dist/524.c7cd23c07ec78a2d977e.js new file mode 100644 index 000000000..887f8928a --- /dev/null +++ b/dist/524.c7cd23c07ec78a2d977e.js @@ -0,0 +1,2 @@ +(()=>{"use strict";const e="tt-media-progressive",t="tt-assets",n=("undefined"!=typeof window&&window.innerHeight,Math.round(425),new Set(["newMessage","newScheduledMessage","deleteMessages","deleteScheduledMessages","deleteHistory"]),new Set(["image/png","image/gif","image/jpeg"])),a=new Set(["video/mp4"]);new Set(["audio/mp3","audio/ogg","audio/wav","audio/mpeg","audio/flac","audio/aac","audio/m4a","audio/mp4","audio/x-m4a"]),new Set([...n,...a]),new Set(["AU","BD","CA","CO","EG","HN","IE","IN","JO","MX","MY","NI","NZ","PH","PK","SA","SV","US"]);const s=e=>new Promise((t=>{setTimeout((()=>t()),e)})),i=524288,o=new Map;async function r(t){const{url:n}=t.request,a=t.request.headers.get("range"),r=/^bytes=(\d+)-(\d+)?$/g.exec(a||""),c=Number(r[1]);let d=Number(r[2]);if((!d||d-c+1>i)&&(d=c+i-1),0===c&&1===d){const e=t.request.url.match(/fileSize=(\d+)&mimeType=([\w/]+)/),n=e&&Number(e[1]),a=null==e?void 0:e[2];if(n&&a)return new Response(new Uint8Array(2).buffer,{status:206,statusText:"Partial Content",headers:[["Content-Range",`bytes 0-1/${n}`],["Accept-Ranges","bytes"],["Content-Length","2"],["Content-Type",a]]})}const l=`${n}?start=${c}&end=${d}`,[u,f]=await async function(t){const n=await self.caches.open(e);return Promise.all([n.match(`${t}&type=arrayBuffer`).then((e=>e?e.arrayBuffer():void 0)),n.match(`${t}&type=headers`).then((e=>e?e.json():void 0))])}(l);if(u)return new Response(u,{status:206,statusText:"Partial Content",headers:f});let g;try{g=await async function(e,t){if(!e.clientId)return;const n=await self.clients.get(e.clientId);if(!n)return;const a=(e=>{let t;do{t=String(Math.random()).replace("0.","id")}while(e.hasOwnProperty(t));return t})(o),i={},r=Promise.race([s(6e4).then((()=>Promise.reject(new Error("ERROR_PART_TIMEOUT")))),new Promise(((e,t)=>{Object.assign(i,{resolve:e,reject:t})}))]);return o.set(a,i),r.catch((()=>{})).finally((()=>{o.delete(a)})),n.postMessage({type:"requestPart",messageId:a,params:t}),r}(t,{url:n,start:c,end:d})}catch(e){}if(!g)return new Response("",{status:500,statusText:"Failed to fetch progressive part"});const{arrayBuffer:p,fullSize:w,mimeType:m}=g,h=Math.min(d-c+1,p.byteLength);d=c+h-1;const y=p.slice(0,h),v=[["Content-Range",`bytes ${c}-${d}/${w}`],["Accept-Ranges","bytes"],["Content-Length",String(h)],["Content-Type",m]];return h<=524288&&d<2097151&&async function(t,n,a){const s=await self.caches.open(e);Promise.all([s.put(new Request(`${t}&type=arrayBuffer`),new Response(n)),s.put(new Request(`${t}&type=headers`),new Response(JSON.stringify(a)))])}(l,y,v),new Response(y,{status:206,statusText:"Partial Content",headers:v})}async function c(e){const n=await async function(n,a){try{return await Promise.race([s(3e3).then((()=>Promise.reject(new Error("TIMEOUT")))),(async()=>{const n=await self.caches.open(t),a=await n.match(e.request);return{cache:n,cached:a}})()])}catch(e){return void console.error(e)}}(),{cache:a,cached:i}=n||{};if(a&&i){if(i.ok)return i;await a.delete(e.request)}const o=await fetch(e.request);return o.ok&&a&&a.put(e.request,o.clone()),o}var d,l;self.addEventListener("message",(e=>{const{type:t,messageId:n,result:a}=e.data;if("partResponse"===t){const e=o.get(n);e&&e.resolve(a)}})),(l=d||(d={})).True="1",l.False="0";let u=(new Date).valueOf();const f=new Set,g={};function p(e){return e.custom.from_id?e.custom.from_id:e.custom.chat_id||e.custom.channel_id?`-${e.custom.chat_id||e.custom.channel_id}`:void 0}function w(e){if(e.custom.msg_id)return parseInt(e.custom.msg_id,10)}async function m(){const e=new URL(self.registration.scope).origin;return(await self.clients.matchAll({type:"window"})).filter((t=>new URL(t.url).origin===e))}async function h(e){const t=(await m())[0];t&&t.postMessage({type:"playNotificationSound",payload:{id:e}})}function y(e){let{chatId:t,messageId:n,body:a,title:s,icon:i,reaction:o}=e;const r=(new Date).valueOf()-u<1e3,c={body:a,data:{chatId:t,messageId:n,reaction:o,count:1},icon:i||"icon-192x192.png",badge:"icon-192x192.png",tag:String(r?0:t||0),vibrate:[200,100,200]};return Promise.all([o?void 0:h(String(n)||t||""),self.registration.showNotification(s,c)])}async function v(e,t){if(t.chatId&&(e.postMessage({type:"focusMessage",payload:t}),!e.focused))try{await e.focus()}catch(e){}}self.addEventListener("sync",(()=>{u=Date.now()}));const I=/[0-9a-f]{20}.*\.(js|css|woff2?|svg|png|jpg|jpeg|json|wasm)$/;self.addEventListener("install",(e=>{e.waitUntil(self.skipWaiting())})),self.addEventListener("activate",(e=>{e.waitUntil(Promise.race([s(3e3),Promise.all([self.caches.delete(t),self.clients.claim()])]))})),self.addEventListener("fetch",(e=>{const{url:t}=e.request;return t.includes("/progressive/")?(e.respondWith(r(e)),!0):!(!t.startsWith("http")||!t.match(I)||(e.respondWith(c(e)),0))})),self.addEventListener("push",(function(e){const t=function(e){try{return e.data.json()}catch(e){return}}(e);if(!t||t.mute===d.True)return;const n=function(e){return{chatId:p(e),messageId:w(e),title:e.title||"Telegram WebZ",body:e.description}}(t);f.has(n.messageId)?f.delete(n.messageId):e.waitUntil(y(n))})),self.addEventListener("notificationclick",(function(e){const t=self.registration.scope;e.notification.close();const{data:n}=e.notification;e.waitUntil((async()=>{const e=await m();if(await Promise.all(e.map((e=>(g[e.id]=n,v(e,n))))),self.clients.openWindow&&!(e.length>0)){g[0]=n;try{const e=await self.clients.openWindow(t);e&&(g[e.id]=n)}catch(e){}}})())})),self.addEventListener("message",(function(e){if(!e.data)return;const t=e.source;if("clientReady"===e.data.type){const n=g[t.id]||g[0];n&&(delete g[t.id],delete g[0],e.waitUntil(v(t,n)))}if("showMessageNotification"===e.data.type){const t=e.data.payload;e.waitUntil((async()=>(t.chatId&&(await self.registration.getNotifications({tag:t.chatId})).forEach((e=>e.close())),f.add(t.messageId),y(t)))())}"closeMessageNotifications"===e.data.type&&e.waitUntil(async function(e){let{chatId:t,lastReadInboxMessageId:n}=e;const a=await self.registration.getNotifications(),s=n||Number.MAX_VALUE;a.forEach((e=>{("0"===e.tag||e.data.chatId===t&&e.data.messageId<=s)&&e.close()}))}(e.data.payload))}))})(); +//# sourceMappingURL=524.c7cd23c07ec78a2d977e.js.map \ No newline at end of file diff --git a/dist/524.c7cd23c07ec78a2d977e.js.map b/dist/524.c7cd23c07ec78a2d977e.js.map new file mode 100644 index 000000000..b16a7773e --- /dev/null +++ b/dist/524.c7cd23c07ec78a2d977e.js.map @@ -0,0 +1 @@ +{"version":3,"file":"524.c7cd23c07ec78a2d977e.js","mappings":"mBAAO,MAgCMA,EAA+B,uBAI/BC,EAAmB,YA4GnBC,GAtGyB,oBAAXC,QAA0BA,OAAOC,YAuEzBC,KAAKC,MAAM,KACJ,IAAIC,IAAI,CAChD,aAAc,sBAAuB,iBAAkB,0BAA2B,kBA6BvC,IAAIA,IAAI,CACnD,YAAa,YAAa,gBAGfC,EAAgC,IAAID,IAAI,CACnD,cAG2C,IAAIA,IAAI,CACnD,YACA,YACA,YACA,aACA,aACA,YACA,YACA,YACA,gBAGwC,IAAIA,IAAI,IAC7CL,KACAM,IAYyC,IAAID,IAAI,CAAC,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,OC/DtJ,MAAME,EAASC,GAAe,IAAIC,SAAeC,IACtDC,YAAW,IAAMD,KAAWF,MC5FxBI,EAAoB,OAIpBC,EAAgB,IAAIC,IAEnBC,eAAeC,EAAsBC,GAC1C,MAAM,IAAEC,GAAQD,EAAEE,QACZC,EAAQH,EAAEE,QAAQE,QAAQC,IAAI,SAC9BC,EAAQ,wBAAwBC,KAAKJ,GAAS,IAC9CK,EAAQC,OAAOH,EAAM,IAG3B,IAAII,EAFgBD,OAAOH,EAAM,IAQjC,KALKI,GAAQA,EAAMF,EAAQ,EAAKb,KAC9Be,EAAMF,EAAQb,EAAoB,GAItB,IAAVa,GAAuB,IAARE,EAAW,CAC5B,MAAMC,EAAQX,EAAEE,QAAQD,IAAIU,MAAM,oCAC5BC,EAAWD,GAASF,OAAOE,EAAM,IACjCE,EAAWF,MAAAA,OAAH,EAAGA,EAAQ,GAEzB,GAAIC,GAAYC,EACd,OAAO,IAAIC,SAAS,IAAIC,WAAW,GAAGC,OAAQ,CAC5CC,OAAQ,IACRC,WAAY,kBACZd,QAAS,CACP,CAAC,gBAAkB,aAAYQ,KAC/B,CAAC,gBAAiB,SAClB,CAAC,iBAAkB,KACnB,CAAC,eAAgBC,MAMzB,MAAMM,EAAY,GAAElB,WAAaO,SAAaE,KACvCU,EAAmBC,SA0D5BvB,eAA8BqB,GAC5B,MAAMG,QAAcC,KAAKC,OAAOC,KAAK5C,GAErC,OAAOW,QAAQkC,IAAI,CACjBJ,EAAMX,MAAO,GAAEQ,sBAA6BQ,MAAMC,GAAOA,EAAIA,EAAEC,mBAAgBC,IAC/ER,EAAMX,MAAO,GAAEQ,kBAAyBQ,MAAMC,GAAOA,EAAIA,EAAEG,YAASD,MA/DeE,CAAeb,GASpG,GAAIC,EACF,OAAO,IAAIN,SAASM,EAAmB,CACrCH,OAAQ,IACRC,WAAY,kBACZd,QAASiB,IAIb,IAAIY,EACJ,IACEA,QAyDJnC,eACEE,EACAkC,GAEA,IAAKlC,EAAEmC,SACL,OAIF,MAAMC,QAAeb,KAAKc,QAAQhC,IAAIL,EAAEmC,UACxC,IAAKC,EACH,OAGF,MAAME,ECzJeC,CAAAA,IACrB,IAAIC,EAEJ,GACEA,EAAKC,OAAOvD,KAAKwD,UAAUC,QAAQ,KAAM,YAClCJ,EAAMK,eAAeJ,IAE9B,OAAOA,GDkJWK,CAAcjD,GAC1BkD,EAAe,GAEfC,EAAUvD,QAAQwD,KAAK,CAC3B1D,EAnIiB,KAmIGqC,MAAK,IAAMnC,QAAQyD,OAAO,IAAIC,MAAM,yBACxD,IAAI1D,SAAkB,CAACC,EAASwD,KAC9BE,OAAOC,OAAON,EAAc,CAAErD,QAAAA,EAASwD,OAAAA,SAiB3C,OAbArD,EAAcyD,IAAIf,EAAWQ,GAC7BC,EACGO,OAAM,SACNC,SAAQ,KACP3D,EAAc4D,OAAOlB,MAGzBF,EAAOqB,YAAY,CACjBC,KAAM,cACNpB,UAAAA,EACAJ,OAAAA,IAGKa,EA9FYY,CAAY3D,EAAG,CAAEC,IAAAA,EAAKO,MAAAA,EAAOE,IAAAA,IAC9C,MAAOkD,IAOT,IAAK3B,EACH,OAAO,IAAInB,SAAS,GAAI,CACtBG,OAAQ,IACRC,WAAY,qCAIhB,MAAM,YAAEW,EAAF,SAAegC,EAAf,SAAyBhD,GAAaoB,EAEtC6B,EAAW5E,KAAK6E,IAAIrD,EAAMF,EAAQ,EAAGqB,EAAYmC,YACvDtD,EAAMF,EAAQsD,EAAW,EACzB,MAAMG,EAAkBpC,EAAYqC,MAAM,EAAGJ,GACvC1D,EAAU,CACd,CAAC,gBAAkB,SAAQI,KAASE,KAAOmD,KAC3C,CAAC,gBAAiB,SAClB,CAAC,iBAAkBpB,OAAOqB,IAC1B,CAAC,eAAgBjD,IAOnB,OAJyCiD,GF5EN,QE4E2CpD,EApFvD,SAyGzBZ,eAA2BqB,EAAkBU,EAA0BzB,GACrE,MAAMkB,QAAcC,KAAKC,OAAOC,KAAK5C,GAE9BW,QAAQkC,IAAI,CACjBJ,EAAM6C,IAAI,IAAIC,QAAS,GAAEjD,sBAA8B,IAAIL,SAASe,IACpEP,EAAM6C,IAAI,IAAIC,QAAS,GAAEjD,kBAA0B,IAAIL,SAASuD,KAAKC,UAAUlE,OAzB/EmE,CAAYpD,EAAU8C,EAAiB7D,GAGlC,IAAIU,SAASmD,EAAiB,CACnChD,OAAQ,IACRC,WAAY,kBACZd,QAAAA,IE5GGN,eAAe0E,EAAiBxE,GACrC,MAAMyE,QA0BR3E,eAA8B4E,EAAsBC,GAClD,IACE,aAAanF,QAAQwD,KAAK,CACxB1D,EAhCgB,KAgCDqC,MAAK,IAAMnC,QAAQyD,OAAO,IAAIC,MAAM,cA7BjBpD,WACpC,MAAMwB,QAAcC,KAAKC,OAAOC,KAAK3C,GAC/B8F,QAAetD,EAAMX,MAAMX,EAAEE,SAEnC,MAAO,CAAEoB,MAAAA,EAAOsD,OAAAA,IA0BdF,KAEF,MAAOd,GAGP,YADAiB,QAAQC,MAAMlB,IAlCUmB,IAOpB,MAAEzD,EAAF,OAASsD,GAAWH,GAAe,GAEzC,GAAInD,GAASsD,EAAQ,CACnB,GAAIA,EAAOI,GACT,OAAOJ,QAEDtD,EAAMkC,OAAOxD,EAAEE,SAIzB,MAAM+E,QAAeC,MAAMlF,EAAEE,SAM7B,OAJI+E,EAAOD,IAAM1D,GACfA,EAAM6C,IAAInE,EAAEE,QAAS+E,EAAOE,SAGvBF,E,IC5BJG,EAAAA,EH+KL7D,KAAK8D,iBAAiB,WAAYrF,IAChC,MAAM,KAAE0D,EAAF,UAAQpB,EAAR,OAAmBgD,GAAWtF,EAAEuF,KAMtC,GAAa,iBAAT7B,EAAyB,CAC3B,MAAMZ,EAAelD,EAAcS,IAAIiC,GACnCQ,GACFA,EAAarD,QAAQ6F,QGzLtBF,EAAAA,IAAAA,EAAAA,KAAAA,KAAAA,IAAAA,EAAAA,MAAAA,IAyCL,IAAII,GAAa,IAAIC,MAAOC,UAC5B,MAAMC,EAAqB,IAAIvG,IACzBwG,EAAgD,GActD,SAASC,EAAUN,GACjB,OAAIA,EAAKO,OAAOC,QACPR,EAAKO,OAAOC,QAIjBR,EAAKO,OAAOE,SAAWT,EAAKO,OAAOG,WAC7B,IAAGV,EAAKO,OAAOE,SAAWT,EAAKO,OAAOG,kBADhD,EAOF,SAASC,EAAaX,GACpB,GAAKA,EAAKO,OAAOK,OACjB,OAAOC,SAASb,EAAKO,OAAOK,OAAQ,IAYtCrG,eAAeuG,IACb,MAAMC,EAAS,IAAIC,IAAIhF,KAAKiF,aAAaC,OAAOC,OAEhD,aADsBnF,KAAKc,QAAQsE,SAAS,CAAEjD,KAAM,YACrCkD,QAAQxE,GACd,IAAImE,IAAInE,EAAOnC,KAAKyG,SAAWJ,IAI1CxG,eAAe+G,EAAsBrE,GACnC,MACMJ,SADgBiE,KACC,GAClBjE,GACLA,EAAOqB,YAAY,CACjBC,KAAM,wBACNoD,QAAS,CAAEtE,GAAAA,KAIf,SAASuE,EAAT,GAOqB,IAPK,OACxBC,EADwB,UAExB1E,EAFwB,KAGxB2E,EAHwB,MAIxBC,EAJwB,KAKxBC,EALwB,SAMxBC,GACmB,EACnB,MAAMC,GAAe,IAAI5B,MAAOC,UAAYF,EAAa,IAEnD8B,EAA+B,CACnCL,KAAAA,EACA1B,KAAM,CACJyB,OAAAA,EACA1E,UAAAA,EACA8E,SAAAA,EACAG,MAAO,GAETJ,KAAMA,GAAQ,mBACdK,MAAO,mBACPC,IAXUhF,OAAO4E,EAAe,EAAIL,GAAU,GAY9CU,QAAS,CAAC,IAAK,IAAK,MAGtB,OAAOlI,QAAQkC,IAAI,CAEhB0F,OAAsEtF,EAA3D+E,EAAsBpE,OAAOH,IAAc0E,GAAU,IACjEzF,KAAKiF,aAAaO,iBAAiBG,EAAOI,KA8C9CxH,eAAe6H,EAAiBvF,EAAsBmD,GACpD,GAAKA,EAAKyB,SACV5E,EAAOqB,YAAY,CACjBC,KAAM,eACNoD,QAASvB,KAENnD,EAAOwF,SAEV,UACQxF,EAAOyF,QACb,MAAO/C,KA4EbvD,KAAK8D,iBAAiB,QAAQ,KAC5BG,EAAaC,KAAKqC,SClQpB,MAAMC,EAAsB,8DAG5BxG,KAAK8D,iBAAiB,WAAYrF,IAOhCA,EAAEgI,UAAUzG,KAAK0G,kBAGnB1G,KAAK8D,iBAAiB,YAAarF,IAMjCA,EAAEgI,UACAxI,QAAQwD,KAAK,CAEX1D,EArBmB,KAsBnBE,QAAQkC,IAAI,CFkBTH,KAAKC,OAAOgC,OAAO1E,GEfpByC,KAAKc,QAAQ6F,gBAOrB3G,KAAK8D,iBAAiB,SAAUrF,IAC9B,MAAM,IAAEC,GAAQD,EAAEE,QAElB,OAAID,EAAIkI,SAAS,kBACfnI,EAAEoI,YAAYrI,EAAsBC,KAC7B,MAGLC,EAAIoI,WAAW,UAAWpI,EAAIU,MAAMoH,KACtC/H,EAAEoI,YAAY5D,EAAiBxE,IACxB,OAMXuB,KAAK8D,iBAAiB,QDgGf,SAAoBrF,GAUzB,MAAMuF,EAlHR,SAAqBvF,GACnB,IACE,OAAOA,EAAEuF,KAAKxD,OACd,MAAO+C,GAKP,QA0GWwD,CAAYtI,GAGzB,IAAKuF,GAAQA,EAAKgD,OAASnD,EAAQoD,KAAM,OAEzC,MAAMC,EAzFR,SAA6BlD,GAC3B,MAAO,CACLyB,OAAQnB,EAAUN,GAClBjD,UAAW4D,EAAaX,GACxB2B,MAAO3B,EAAK2B,OLnFgC,gBKoF5CD,KAAM1B,EAAKmD,aAoFQC,CAAoBpD,GAGrCI,EAAmBiD,IAAIH,EAAanG,WACtCqD,EAAmBnC,OAAOiF,EAAanG,WAIzCtC,EAAEgI,UAAUjB,EAAiB0B,OCtH/BlH,KAAK8D,iBAAiB,qBD4If,SAAiCrF,GACtC,MAAMsG,EAAS/E,KAAKiF,aAAaC,MACjCzG,EAAEyI,aAAaI,QACf,MAAM,KAAEtD,GAASvF,EAAEyI,aAyBnBzI,EAAEgI,UAxBoBlI,WACpB,MAAMuC,QAAgBgE,IAKtB,SAJM7G,QAAQkC,IAAIW,EAAQyG,KAAK1G,IAC7BwD,EAAYxD,EAAOI,IAAM+C,EAClBoC,EAAiBvF,EAAQmD,OAE7BhE,KAAKc,QAAQ0G,cAAc1G,EAAQ2G,OAAS,GAAjD,CAEApD,EAAY,GAAKL,EAEjB,IACE,MAAM0D,QAAkB1H,KAAKc,QAAQ0G,WAAWzC,GAC5C2C,IAEFrD,EAAYqD,EAAUzG,IAAM+C,GAE9B,MAAOT,OAQCoE,OCvKd3H,KAAK8D,iBAAiB,WD0Kf,SAA6BrF,GAKlC,IAAKA,EAAEuF,KAAM,OACb,MAAM4D,EAASnJ,EAAEmJ,OACjB,GAAoB,gBAAhBnJ,EAAEuF,KAAK7B,KAAwB,CAEjC,MAAM6B,EAAOK,EAAYuD,EAAO3G,KAAOoD,EAAY,GAC/CL,WACKK,EAAYuD,EAAO3G,WACnBoD,EAAY,GACnB5F,EAAEgI,UAAUL,EAAiBwB,EAAQ5D,KAGzC,GAAoB,4BAAhBvF,EAAEuF,KAAK7B,KAAoC,CAE7C,MAAM+E,EAAiCzI,EAAEuF,KAAKuB,QAC9C9G,EAAEgI,UAAU,WAENS,EAAazB,eACazF,KAAKiF,aAAa4C,iBAAiB,CAAE3B,IAAKgB,EAAazB,UACrEqC,SAASC,GAAMA,EAAET,UAGjClD,EAAmB4D,IAAId,EAAanG,WAC7ByE,EAAiB0B,IARd,IAYM,8BAAhBzI,EAAEuF,KAAK7B,MACT1D,EAAEgI,UA5HNlI,eAAA,GAG0B,IAHQ,OAChCkH,EADgC,uBAEhCwC,GACwB,EACxB,MAAMC,QAAsBlI,KAAKiF,aAAa4C,mBACxCM,EAAgBF,GAA0B/I,OAAOkJ,UACvDF,EAAcJ,SAASZ,KAEE,MAArBA,EAAahB,KACTgB,EAAalD,KAAKyB,SAAWA,GAAUyB,EAAalD,KAAKjD,WAAaoH,IAE1EjB,EAAaI,WAiHHe,CAAmB5J,EAAEuF,KAAKuB,c","sources":["webpack://telegram-t/./src/config.ts","webpack://telegram-t/./src/util/schedulers.ts","webpack://telegram-t/./src/serviceWorker/progressive.ts","webpack://telegram-t/./src/util/generateIdFor.ts","webpack://telegram-t/./src/serviceWorker/assetCache.ts","webpack://telegram-t/./src/serviceWorker/pushNotification.ts","webpack://telegram-t/./src/serviceWorker.ts"],"sourcesContent":["export const APP_NAME = process.env.APP_NAME || 'Telegram WebZ';\nexport const APP_VERSION = process.env.APP_VERSION!;\n\nexport const DEBUG = (\n process.env.APP_ENV !== 'production' && process.env.APP_ENV !== 'perf' && process.env.APP_ENV !== 'test'\n);\nexport const DEBUG_MORE = false;\n\nexport const IS_TEST = process.env.APP_ENV === 'test';\nexport const IS_PERF = process.env.APP_ENV === 'perf';\n\nexport const DEBUG_ALERT_MSG = 'Shoot!\\nSomething went wrong, please see the error details in Dev Tools Console.';\nexport const DEBUG_GRAMJS = false;\n\nexport const PAGE_TITLE = 'Telegram';\nexport const INACTIVE_MARKER = ' [Inactive]';\n\nexport const DEBUG_PAYMENT_SMART_GLOCAL = false;\n\nexport const SESSION_USER_KEY = 'user_auth';\nexport const LEGACY_SESSION_KEY = 'GramJs:sessionId';\n\nexport const GLOBAL_STATE_CACHE_DISABLED = false;\nexport const GLOBAL_STATE_CACHE_KEY = 'tt-global-state';\nexport const GLOBAL_STATE_CACHE_USER_LIST_LIMIT = 500;\nexport const GLOBAL_STATE_CACHE_CHAT_LIST_LIMIT = 200;\nexport const GLOBAL_STATE_CACHE_CHATS_WITH_MESSAGES_LIMIT = 30;\n\nexport const MEDIA_CACHE_DISABLED = false;\nexport const MEDIA_CACHE_NAME = 'tt-media';\nexport const MEDIA_CACHE_NAME_AVATARS = 'tt-media-avatars';\nexport const MEDIA_PROGRESSIVE_CACHE_DISABLED = false;\nexport const MEDIA_PROGRESSIVE_CACHE_NAME = 'tt-media-progressive';\nexport const MEDIA_CACHE_MAX_BYTES = 512 * 1024; // 512 KB\nexport const CUSTOM_BG_CACHE_NAME = 'tt-custom-bg';\nexport const LANG_CACHE_NAME = 'tt-lang-packs-v8';\nexport const ASSET_CACHE_NAME = 'tt-assets';\nexport const AUTODOWNLOAD_FILESIZE_MB_LIMITS = [1, 5, 10, 50, 100, 500];\n\nexport const DOWNLOAD_WORKERS = 16;\nexport const UPLOAD_WORKERS = 16;\n\nconst isBigScreen = typeof window !== 'undefined' && window.innerHeight >= 900;\n\nexport const MIN_PASSWORD_LENGTH = 1;\n\nexport const MESSAGE_LIST_SLICE = isBigScreen ? 60 : 40;\nexport const MESSAGE_LIST_VIEWPORT_LIMIT = MESSAGE_LIST_SLICE * 2;\n\nexport const CHAT_HEIGHT_PX = 72;\nexport const CHAT_LIST_SLICE = isBigScreen ? 30 : 25;\nexport const CHAT_LIST_LOAD_SLICE = 100;\nexport const SHARED_MEDIA_SLICE = 42;\nexport const MESSAGE_SEARCH_SLICE = 42;\nexport const GLOBAL_SEARCH_SLICE = 20;\nexport const MEMBERS_SLICE = 30;\nexport const MEMBERS_LOAD_SLICE = 200;\nexport const PINNED_MESSAGES_LIMIT = 50;\nexport const BLOCKED_LIST_LIMIT = 100;\nexport const PROFILE_PHOTOS_LIMIT = 40;\nexport const PROFILE_SENSITIVE_AREA = 500;\nexport const COMMON_CHATS_LIMIT = 100;\nexport const GROUP_CALL_PARTICIPANTS_LIMIT = 100;\nexport const REACTION_LIST_LIMIT = 100;\n\nexport const TOP_CHAT_MESSAGES_PRELOAD_LIMIT = 20;\n\nexport const SPONSORED_MESSAGE_CACHE_MS = 300000; // 5 min\n\nexport const DEFAULT_VOLUME = 1;\nexport const DEFAULT_PLAYBACK_RATE = 1;\n\nexport const ANIMATION_LEVEL_MIN = 0;\nexport const ANIMATION_LEVEL_MED = 1;\nexport const ANIMATION_LEVEL_MAX = 2;\nexport const ANIMATION_LEVEL_DEFAULT = ANIMATION_LEVEL_MAX;\n\nexport const DEFAULT_MESSAGE_TEXT_SIZE_PX = 16;\nexport const IOS_DEFAULT_MESSAGE_TEXT_SIZE_PX = 17;\nexport const MACOS_DEFAULT_MESSAGE_TEXT_SIZE_PX = 15;\n\nexport const DRAFT_DEBOUNCE = 10000; // 10s\nexport const SEND_MESSAGE_ACTION_INTERVAL = 3000; // 3s\n\nexport const EDITABLE_INPUT_ID = 'editable-message-text';\nexport const EDITABLE_INPUT_MODAL_ID = 'editable-message-text-modal';\n// eslint-disable-next-line max-len\nexport const EDITABLE_INPUT_CSS_SELECTOR = `.Transition__slide--active #${EDITABLE_INPUT_ID}, .Transition > .to #${EDITABLE_INPUT_ID}`;\n\nexport const CUSTOM_APPENDIX_ATTRIBUTE = 'data-has-custom-appendix';\n\n// Screen width where Pinned Message / Audio Player in the Middle Header can be safely displayed\nexport const SAFE_SCREEN_WIDTH_FOR_STATIC_RIGHT_COLUMN = 1440; // px\n// Screen width where Pinned Message / Audio Player in the Middle Header shouldn't collapse with ChatInfo\nexport const SAFE_SCREEN_WIDTH_FOR_CHAT_INFO = 1150; // px\n\nexport const MIN_SCREEN_WIDTH_FOR_STATIC_RIGHT_COLUMN = 1275; // px\nexport const MIN_SCREEN_WIDTH_FOR_STATIC_LEFT_COLUMN = 925; // px\nexport const MOBILE_SCREEN_MAX_WIDTH = 600; // px\nexport const MOBILE_SCREEN_LANDSCAPE_MAX_WIDTH = 950; // px\nexport const MOBILE_SCREEN_LANDSCAPE_MAX_HEIGHT = 450; // px\n\nexport const LOCAL_MESSAGE_ID_BASE = 1e9;\nexport const TMP_CHAT_ID = '0';\n\nexport const ANIMATION_END_DELAY = 100;\n\nexport const FAST_SMOOTH_MAX_DISTANCE = 1500;\nexport const FAST_SMOOTH_MIN_DURATION = 250;\nexport const FAST_SMOOTH_MAX_DURATION = 600;\nexport const FAST_SMOOTH_SHORT_TRANSITION_MAX_DISTANCE = 500; // px\n\n// Average duration of message sending animation\nexport const API_UPDATE_THROTTLE = Math.round((FAST_SMOOTH_MIN_DURATION + FAST_SMOOTH_MAX_DURATION) / 2);\nexport const API_THROTTLE_RESET_UPDATES = new Set([\n 'newMessage', 'newScheduledMessage', 'deleteMessages', 'deleteScheduledMessages', 'deleteHistory',\n]);\n\nexport const STICKER_SIZE_INLINE_DESKTOP_FACTOR = 13;\nexport const STICKER_SIZE_INLINE_MOBILE_FACTOR = 11;\nexport const STICKER_SIZE_AUTH = 160;\nexport const STICKER_SIZE_AUTH_MOBILE = 120;\nexport const STICKER_SIZE_PICKER = 64;\nexport const STICKER_SIZE_GENERAL_SETTINGS = 48;\nexport const STICKER_SIZE_PICKER_HEADER = 32;\nexport const STICKER_SIZE_SEARCH = 64;\nexport const STICKER_SIZE_MODAL = 64;\nexport const STICKER_SIZE_TWO_FA = 160;\nexport const STICKER_SIZE_DISCUSSION_GROUPS = 140;\nexport const STICKER_SIZE_FOLDER_SETTINGS = 100;\nexport const STICKER_SIZE_INLINE_BOT_RESULT = 100;\nexport const STICKER_SIZE_JOIN_REQUESTS = 140;\nexport const STICKER_SIZE_INVITES = 140;\nexport const RECENT_STICKERS_LIMIT = 20;\nexport const NO_STICKER_SET_ID = 'NO_STICKER_SET';\n\nexport const BASE_EMOJI_KEYWORD_LANG = 'en';\n\nexport const MENU_TRANSITION_DURATION = 200;\nexport const SLIDE_TRANSITION_DURATION = 450;\n\nexport const VIDEO_MOV_TYPE = 'video/quicktime';\nexport const VIDEO_WEBM_TYPE = 'video/webm';\n\nexport const SUPPORTED_IMAGE_CONTENT_TYPES = new Set([\n 'image/png', 'image/gif', 'image/jpeg',\n]);\n\nexport const SUPPORTED_VIDEO_CONTENT_TYPES = new Set([\n 'video/mp4', // video/quicktime added dynamically in environment.ts\n]);\n\nexport const SUPPORTED_AUDIO_CONTENT_TYPES = new Set([\n 'audio/mp3',\n 'audio/ogg',\n 'audio/wav',\n 'audio/mpeg',\n 'audio/flac',\n 'audio/aac',\n 'audio/m4a',\n 'audio/mp4',\n 'audio/x-m4a',\n]);\n\nexport const CONTENT_TYPES_WITH_PREVIEW = new Set([\n ...SUPPORTED_IMAGE_CONTENT_TYPES,\n ...SUPPORTED_VIDEO_CONTENT_TYPES,\n]);\n\nexport const CONTENT_NOT_SUPPORTED = 'The message is not supported on this version of Telegram.';\n\n// eslint-disable-next-line max-len\nexport const RE_LINK_TEMPLATE = '((ftp|https?):\\\\/\\\\/)?((www\\\\.)?[-a-zA-Z0-9@:%._+~#=]{1,256}\\\\.[a-zA-Z0-9()]{1,63})\\\\b([-a-zA-Z0-9()@:%_+.~#?&/=]*)';\nexport const RE_MENTION_TEMPLATE = '(@[\\\\w\\\\d_-]+)';\nexport const RE_TG_LINK = /^tg:(\\/\\/)?([?=&\\d\\w_-]+)?/gm;\nexport const RE_TME_LINK = /^(?:https?:\\/\\/)?(?:t\\.me\\/)/gm;\n\n// eslint-disable-next-line max-len\nexport const COUNTRIES_WITH_12H_TIME_FORMAT = new Set(['AU', 'BD', 'CA', 'CO', 'EG', 'HN', 'IE', 'IN', 'JO', 'MX', 'MY', 'NI', 'NZ', 'PH', 'PK', 'SA', 'SV', 'US']);\n\n// MTProto constants\nexport const SERVICE_NOTIFICATIONS_USER_ID = '777000';\nexport const REPLIES_USER_ID = '1271266957'; // TODO For Test connection ID must be equal to 708513\nexport const ALL_FOLDER_ID = 0;\nexport const ARCHIVED_FOLDER_ID = 1;\nexport const DELETED_COMMENTS_CHANNEL_ID = '-777';\nexport const MAX_MEDIA_FILES_FOR_ALBUM = 10;\nexport const MAX_ACTIVE_PINNED_CHATS = 5;\nexport const SCHEDULED_WHEN_ONLINE = 0x7FFFFFFE;\nexport const DEFAULT_LANG_CODE = 'en';\nexport const DEFAULT_LANG_PACK = 'android';\nexport const LANG_PACKS = ['android', 'ios', 'tdesktop', 'macos'] as const;\nexport const TIPS_USERNAME = 'TelegramTips';\nexport const LOCALIZED_TIPS = ['ar', 'pt-br', 'id', 'it', 'ko', 'ms', 'pl', 'es', 'tr'];\nexport const FEEDBACK_URL = 'https://bugs.telegram.org/?tag_ids=41&sort=time';\nexport const LIGHT_THEME_BG_COLOR = '#A2AF8E';\nexport const DARK_THEME_BG_COLOR = '#0F0F0F';\nexport const DARK_THEME_PATTERN_COLOR = '#0a0a0a8c';\nexport const DEFAULT_PATTERN_COLOR = 'rgba(90, 110, 70, 0.6)';\n\n// Group calls\nexport const GROUP_CALL_VOLUME_MULTIPLIER = 100;\nexport const GROUP_CALL_DEFAULT_VOLUME = 100 * GROUP_CALL_VOLUME_MULTIPLIER;\nexport const ENABLE_THUMBNAIL_VIDEO = false;\n","type Scheduler =\n typeof requestAnimationFrame\n | typeof onTickEnd\n | typeof runNow;\n\nexport function debounce(\n fn: F,\n ms: number,\n shouldRunFirst = true,\n shouldRunLast = true,\n) {\n let waitingTimeout: number | undefined;\n\n return (...args: Parameters) => {\n if (waitingTimeout) {\n clearTimeout(waitingTimeout);\n waitingTimeout = undefined;\n } else if (shouldRunFirst) {\n fn(...args);\n }\n\n // eslint-disable-next-line no-restricted-globals\n waitingTimeout = self.setTimeout(() => {\n if (shouldRunLast) {\n fn(...args);\n }\n\n waitingTimeout = undefined;\n }, ms);\n };\n}\n\nexport function throttle(\n fn: F,\n ms: number,\n shouldRunFirst = true,\n) {\n let interval: number | undefined;\n let isPending: boolean;\n let args: Parameters;\n\n return (..._args: Parameters) => {\n isPending = true;\n args = _args;\n\n if (!interval) {\n if (shouldRunFirst) {\n isPending = false;\n fn(...args);\n }\n\n // eslint-disable-next-line no-restricted-globals\n interval = self.setInterval(() => {\n if (!isPending) {\n // eslint-disable-next-line no-restricted-globals\n self.clearInterval(interval!);\n interval = undefined;\n return;\n }\n\n isPending = false;\n fn(...args);\n }, ms);\n }\n };\n}\n\nexport function throttleWithRaf(fn: F) {\n return throttleWith(fastRaf, fn);\n}\n\nexport function throttleWithPrimaryRaf(fn: F) {\n return throttleWith(fastRafPrimary, fn);\n}\n\nexport function throttleWithTickEnd(fn: F) {\n return throttleWith(onTickEnd, fn);\n}\n\nexport function throttleWithNow(fn: F) {\n return throttleWith(runNow, fn);\n}\n\nexport function throttleWith(schedulerFn: Scheduler, fn: F) {\n let waiting = false;\n let args: Parameters;\n\n return (..._args: Parameters) => {\n args = _args;\n\n if (!waiting) {\n waiting = true;\n\n schedulerFn(() => {\n waiting = false;\n fn(...args);\n });\n }\n };\n}\n\nexport function onIdle(cb: NoneToVoidFunction, timeout?: number) {\n // eslint-disable-next-line no-restricted-globals\n if (self.requestIdleCallback) {\n // eslint-disable-next-line no-restricted-globals\n self.requestIdleCallback(cb, { timeout });\n } else {\n onTickEnd(cb);\n }\n}\n\nfunction runNow(fn: NoneToVoidFunction) {\n fn();\n}\n\nexport const pause = (ms: number) => new Promise((resolve) => {\n setTimeout(() => resolve(), ms);\n});\n\nexport function rafPromise() {\n return new Promise((resolve) => {\n fastRaf(resolve);\n });\n}\n\nlet fastRafCallbacks: NoneToVoidFunction[] | undefined;\nlet fastRafPrimaryCallbacks: NoneToVoidFunction[] | undefined;\n\n// May result in an immediate execution if called from another `requestAnimationFrame` callback\nexport function fastRaf(callback: NoneToVoidFunction, isPrimary = false) {\n if (!fastRafCallbacks) {\n fastRafCallbacks = isPrimary ? [] : [callback];\n fastRafPrimaryCallbacks = isPrimary ? [callback] : [];\n\n requestAnimationFrame(() => {\n const currentCallbacks = fastRafCallbacks!;\n const currentPrimaryCallbacks = fastRafPrimaryCallbacks!;\n fastRafCallbacks = undefined;\n fastRafPrimaryCallbacks = undefined;\n currentPrimaryCallbacks.forEach((cb) => cb());\n currentCallbacks.forEach((cb) => cb());\n });\n } else if (isPrimary) {\n fastRafPrimaryCallbacks!.push(callback);\n } else {\n fastRafCallbacks.push(callback);\n }\n}\n\nexport function fastRafPrimary(callback: NoneToVoidFunction) {\n fastRaf(callback, true);\n}\n\nlet onTickEndCallbacks: NoneToVoidFunction[] | undefined;\nlet onTickEndPrimaryCallbacks: NoneToVoidFunction[] | undefined;\n\nexport function onTickEnd(callback: NoneToVoidFunction, isPrimary = false) {\n if (!onTickEndCallbacks) {\n onTickEndCallbacks = isPrimary ? [] : [callback];\n onTickEndPrimaryCallbacks = isPrimary ? [callback] : [];\n\n Promise.resolve().then(() => {\n const currentCallbacks = onTickEndCallbacks!;\n const currentPrimaryCallbacks = onTickEndPrimaryCallbacks!;\n onTickEndCallbacks = undefined;\n onTickEndPrimaryCallbacks = undefined;\n currentPrimaryCallbacks.forEach((cb) => cb());\n currentCallbacks.forEach((cb) => cb());\n });\n } else if (isPrimary) {\n onTickEndPrimaryCallbacks!.push(callback);\n } else {\n onTickEndCallbacks.push(callback);\n }\n}\n\nexport function onTickEndPrimary(callback: NoneToVoidFunction) {\n onTickEnd(callback, true);\n}\n\nlet beforeUnloadCallbacks: NoneToVoidFunction[] | undefined;\n\nexport function onBeforeUnload(callback: NoneToVoidFunction, isLast = false) {\n if (!beforeUnloadCallbacks) {\n beforeUnloadCallbacks = [];\n // eslint-disable-next-line no-restricted-globals\n self.addEventListener('beforeunload', () => {\n beforeUnloadCallbacks!.forEach((cb) => cb());\n });\n }\n\n if (isLast) {\n beforeUnloadCallbacks.push(callback);\n } else {\n beforeUnloadCallbacks.unshift(callback);\n }\n\n return () => {\n beforeUnloadCallbacks = beforeUnloadCallbacks!.filter((cb) => cb !== callback);\n };\n}\n","import { pause } from '../util/schedulers';\nimport generateIdFor from '../util/generateIdFor';\nimport {\n DEBUG,\n MEDIA_CACHE_MAX_BYTES,\n MEDIA_PROGRESSIVE_CACHE_DISABLED,\n MEDIA_PROGRESSIVE_CACHE_NAME,\n} from '../config';\n\ndeclare const self: ServiceWorkerGlobalScope;\n\ntype PartInfo = {\n type: 'PartInfo';\n arrayBuffer: ArrayBuffer;\n mimeType: 'string';\n fullSize: number;\n};\n\ntype RequestStates = {\n resolve: (response: PartInfo) => void;\n reject: () => void;\n};\n\nconst MB = 1024 * 1024;\nconst DEFAULT_PART_SIZE = 0.5 * MB;\nconst MAX_END_TO_CACHE = 2 * MB - 1; // We only cache the first 2 MB of each file\nconst PART_TIMEOUT = 60000;\n\nconst requestStates = new Map();\n\nexport async function respondForProgressive(e: FetchEvent) {\n const { url } = e.request;\n const range = e.request.headers.get('range');\n const bytes = /^bytes=(\\d+)-(\\d+)?$/g.exec(range || '')!;\n const start = Number(bytes[1]);\n const originalEnd = Number(bytes[2]);\n\n let end = originalEnd;\n if (!end || (end - start + 1) > DEFAULT_PART_SIZE) {\n end = start + DEFAULT_PART_SIZE - 1;\n }\n\n // Optimization for Safari\n if (start === 0 && end === 1) {\n const match = e.request.url.match(/fileSize=(\\d+)&mimeType=([\\w/]+)/);\n const fileSize = match && Number(match[1]);\n const mimeType = match?.[2];\n\n if (fileSize && mimeType) {\n return new Response(new Uint8Array(2).buffer, {\n status: 206,\n statusText: 'Partial Content',\n headers: [\n ['Content-Range', `bytes 0-1/${fileSize}`],\n ['Accept-Ranges', 'bytes'],\n ['Content-Length', '2'],\n ['Content-Type', mimeType],\n ],\n });\n }\n }\n\n const cacheKey = `${url}?start=${start}&end=${end}`;\n const [cachedArrayBuffer, cachedHeaders] = !MEDIA_PROGRESSIVE_CACHE_DISABLED ? await fetchFromCache(cacheKey) : [];\n\n if (DEBUG) {\n // eslint-disable-next-line no-console\n console.log(\n `FETCH PROGRESSIVE ${cacheKey} (request: ${start}-${originalEnd}) CACHED: ${Boolean(cachedArrayBuffer)}`,\n );\n }\n\n if (cachedArrayBuffer) {\n return new Response(cachedArrayBuffer, {\n status: 206,\n statusText: 'Partial Content',\n headers: cachedHeaders,\n });\n }\n\n let partInfo;\n try {\n partInfo = await requestPart(e, { url, start, end });\n } catch (err) {\n if (DEBUG) {\n // eslint-disable-next-line no-console\n console.error('FETCH PROGRESSIVE', err);\n }\n }\n\n if (!partInfo) {\n return new Response('', {\n status: 500,\n statusText: 'Failed to fetch progressive part',\n });\n }\n\n const { arrayBuffer, fullSize, mimeType } = partInfo;\n\n const partSize = Math.min(end - start + 1, arrayBuffer.byteLength);\n end = start + partSize - 1;\n const arrayBufferPart = arrayBuffer.slice(0, partSize);\n const headers = [\n ['Content-Range', `bytes ${start}-${end}/${fullSize}`],\n ['Accept-Ranges', 'bytes'],\n ['Content-Length', String(partSize)],\n ['Content-Type', mimeType],\n ];\n\n if (!MEDIA_PROGRESSIVE_CACHE_DISABLED && partSize <= MEDIA_CACHE_MAX_BYTES && end < MAX_END_TO_CACHE) {\n saveToCache(cacheKey, arrayBufferPart, headers);\n }\n\n return new Response(arrayBufferPart, {\n status: 206,\n statusText: 'Partial Content',\n headers,\n });\n}\n\n// We can not cache 206 responses: https://github.com/GoogleChrome/workbox/issues/1644#issuecomment-638741359\nasync function fetchFromCache(cacheKey: string) {\n const cache = await self.caches.open(MEDIA_PROGRESSIVE_CACHE_NAME);\n\n return Promise.all([\n cache.match(`${cacheKey}&type=arrayBuffer`).then((r) => (r ? r.arrayBuffer() : undefined)),\n cache.match(`${cacheKey}&type=headers`).then((r) => (r ? r.json() : undefined)),\n ]);\n}\n\nasync function saveToCache(cacheKey: string, arrayBuffer: ArrayBuffer, headers: HeadersInit) {\n const cache = await self.caches.open(MEDIA_PROGRESSIVE_CACHE_NAME);\n\n return Promise.all([\n cache.put(new Request(`${cacheKey}&type=arrayBuffer`), new Response(arrayBuffer)),\n cache.put(new Request(`${cacheKey}&type=headers`), new Response(JSON.stringify(headers))),\n ]);\n}\n\nasync function requestPart(\n e: FetchEvent,\n params: { url: string; start: number; end: number },\n): Promise {\n if (!e.clientId) {\n return undefined;\n }\n\n // eslint-disable-next-line no-restricted-globals\n const client = await self.clients.get(e.clientId);\n if (!client) {\n return undefined;\n }\n\n const messageId = generateIdFor(requestStates);\n const requestState = {} as RequestStates;\n\n const promise = Promise.race([\n pause(PART_TIMEOUT).then(() => Promise.reject(new Error('ERROR_PART_TIMEOUT'))),\n new Promise((resolve, reject) => {\n Object.assign(requestState, { resolve, reject });\n }),\n ]);\n\n requestStates.set(messageId, requestState);\n promise\n .catch(() => undefined)\n .finally(() => {\n requestStates.delete(messageId);\n });\n\n client.postMessage({\n type: 'requestPart',\n messageId,\n params,\n });\n\n return promise;\n}\n\nself.addEventListener('message', (e) => {\n const { type, messageId, result } = e.data as {\n type: string;\n messageId: string;\n result: PartInfo;\n };\n\n if (type === 'partResponse') {\n const requestState = requestStates.get(messageId);\n if (requestState) {\n requestState.resolve(result);\n }\n }\n});\n","const generateIdFor = (store: AnyLiteral) => {\n let id;\n\n do {\n id = String(Math.random()).replace('0.', 'id');\n } while (store.hasOwnProperty(id));\n\n return id;\n};\n\nexport default generateIdFor;\n","import { ASSET_CACHE_NAME } from '../config';\nimport { pause } from '../util/schedulers';\n\ndeclare const self: ServiceWorkerGlobalScope;\n\n// An attempt to fix freezing UI on iOS\nconst CACHE_TIMEOUT = 3000;\n\nexport async function respondWithCache(e: FetchEvent) {\n const cacheResult = await withTimeout(async () => {\n const cache = await self.caches.open(ASSET_CACHE_NAME);\n const cached = await cache.match(e.request);\n\n return { cache, cached };\n }, CACHE_TIMEOUT);\n\n const { cache, cached } = cacheResult || {};\n\n if (cache && cached) {\n if (cached.ok) {\n return cached;\n } else {\n await cache.delete(e.request);\n }\n }\n\n const remote = await fetch(e.request);\n\n if (remote.ok && cache) {\n cache.put(e.request, remote.clone());\n }\n\n return remote;\n}\n\nasync function withTimeout(cb: () => Promise, timeout: number) {\n try {\n return await Promise.race([\n pause(timeout).then(() => Promise.reject(new Error('TIMEOUT'))),\n cb(),\n ]);\n } catch (err) {\n // eslint-disable-next-line no-console\n console.error(err);\n return undefined;\n }\n}\n\nexport function clearAssetCache() {\n return self.caches.delete(ASSET_CACHE_NAME);\n}\n","import { APP_NAME, DEBUG, DEBUG_MORE } from '../config';\n\ndeclare const self: ServiceWorkerGlobalScope;\n\nenum Boolean {\n True = '1',\n False = '0',\n}\n\ntype PushData = {\n custom: {\n msg_id?: string;\n channel_id?: string;\n chat_id?: string;\n from_id?: string;\n };\n mute: Boolean;\n badge: Boolean;\n loc_key: string;\n loc_args: string[];\n random_id: number;\n title: string;\n description: string;\n};\n\ntype NotificationData = {\n messageId?: number;\n chatId?: string;\n title: string;\n body: string;\n icon?: string;\n reaction?: string;\n};\n\ntype FocusMessageData = {\n chatId?: string;\n messageId?: number;\n reaction?: string;\n};\n\ntype CloseNotificationData = {\n lastReadInboxMessageId?: number;\n chatId: string;\n};\n\nlet lastSyncAt = new Date().valueOf();\nconst shownNotifications = new Set();\nconst clickBuffer: Record = {};\n\nfunction getPushData(e: PushEvent | Notification): PushData | undefined {\n try {\n return e.data.json();\n } catch (error) {\n if (DEBUG) {\n // eslint-disable-next-line no-console\n console.log('[SW] Unable to parse push notification data', e.data);\n }\n return undefined;\n }\n}\n\nfunction getChatId(data: PushData) {\n if (data.custom.from_id) {\n return data.custom.from_id;\n }\n\n // Chats and channels have “negative” IDs\n if (data.custom.chat_id || data.custom.channel_id) {\n return `-${data.custom.chat_id || data.custom.channel_id}`;\n }\n\n return undefined;\n}\n\nfunction getMessageId(data: PushData) {\n if (!data.custom.msg_id) return undefined;\n return parseInt(data.custom.msg_id, 10);\n}\n\nfunction getNotificationData(data: PushData): NotificationData {\n return {\n chatId: getChatId(data),\n messageId: getMessageId(data),\n title: data.title || APP_NAME,\n body: data.description,\n };\n}\n\nasync function getClients() {\n const appUrl = new URL(self.registration.scope).origin;\n const clients = await self.clients.matchAll({ type: 'window' }) as WindowClient[];\n return clients.filter((client) => {\n return new URL(client.url).origin === appUrl;\n });\n}\n\nasync function playNotificationSound(id: string) {\n const clients = await getClients();\n const client = clients[0];\n if (!client) return;\n client.postMessage({\n type: 'playNotificationSound',\n payload: { id },\n });\n}\n\nfunction showNotification({\n chatId,\n messageId,\n body,\n title,\n icon,\n reaction,\n}: NotificationData) {\n const isFirstBatch = new Date().valueOf() - lastSyncAt < 1000;\n const tag = String(isFirstBatch ? 0 : chatId || 0);\n const options: NotificationOptions = {\n body,\n data: {\n chatId,\n messageId,\n reaction,\n count: 1,\n },\n icon: icon || 'icon-192x192.png',\n badge: 'icon-192x192.png',\n tag,\n vibrate: [200, 100, 200],\n };\n\n return Promise.all([\n // TODO Remove condition when reaction badges are implemented\n !reaction ? playNotificationSound(String(messageId) || chatId || '') : undefined,\n self.registration.showNotification(title, options),\n ]);\n}\n\nasync function closeNotifications({\n chatId,\n lastReadInboxMessageId,\n}: CloseNotificationData) {\n const notifications = await self.registration.getNotifications();\n const lastMessageId = lastReadInboxMessageId || Number.MAX_VALUE;\n notifications.forEach((notification) => {\n if (\n notification.tag === '0'\n || (notification.data.chatId === chatId && notification.data.messageId <= lastMessageId)\n ) {\n notification.close();\n }\n });\n}\n\nexport function handlePush(e: PushEvent) {\n if (DEBUG) {\n // eslint-disable-next-line no-console\n console.log('[SW] Push received event', e);\n if (e.data) {\n // eslint-disable-next-line no-console\n console.log('[SW] Push received with data', e.data.json());\n }\n }\n\n const data = getPushData(e);\n\n // Do not show muted notifications\n if (!data || data.mute === Boolean.True) return;\n\n const notification = getNotificationData(data);\n\n // Don't show already triggered notification\n if (shownNotifications.has(notification.messageId)) {\n shownNotifications.delete(notification.messageId);\n return;\n }\n\n e.waitUntil(showNotification(notification));\n}\n\nasync function focusChatMessage(client: WindowClient, data: FocusMessageData) {\n if (!data.chatId) return;\n client.postMessage({\n type: 'focusMessage',\n payload: data,\n });\n if (!client.focused) {\n // Catch \"focus not allowed\" DOM Exceptions\n try {\n await client.focus();\n } catch (error) {\n if (DEBUG) {\n // eslint-disable-next-line no-console\n console.warn('[SW] ', error);\n }\n }\n }\n}\n\nexport function handleNotificationClick(e: NotificationEvent) {\n const appUrl = self.registration.scope;\n e.notification.close(); // Android needs explicit close.\n const { data } = e.notification;\n const notifyClients = async () => {\n const clients = await getClients();\n await Promise.all(clients.map((client) => {\n clickBuffer[client.id] = data;\n return focusChatMessage(client, data);\n }));\n if (!self.clients.openWindow || clients.length > 0) return undefined;\n // Store notification data for default client (fix for android)\n clickBuffer[0] = data;\n // If there is no opened client we need to open one and wait until it is fully loaded\n try {\n const newClient = await self.clients.openWindow(appUrl);\n if (newClient) {\n // Store notification data until client is fully loaded\n clickBuffer[newClient.id] = data;\n }\n } catch (error) {\n if (DEBUG) {\n // eslint-disable-next-line no-console\n console.warn('[SW] ', error);\n }\n }\n return undefined;\n };\n e.waitUntil(notifyClients());\n}\n\nexport function handleClientMessage(e: ExtendableMessageEvent) {\n if (DEBUG_MORE) {\n // eslint-disable-next-line no-console\n console.log('[SW] New message from client', e);\n }\n if (!e.data) return;\n const source = e.source as WindowClient;\n if (e.data.type === 'clientReady') {\n // focus on chat message when client is fully ready\n const data = clickBuffer[source.id] || clickBuffer[0];\n if (data) {\n delete clickBuffer[source.id];\n delete clickBuffer[0];\n e.waitUntil(focusChatMessage(source, data));\n }\n }\n if (e.data.type === 'showMessageNotification') {\n // store messageId for already shown notification\n const notification: NotificationData = e.data.payload;\n e.waitUntil((async () => {\n // Close existing notification if it is already shown\n if (notification.chatId) {\n const notifications = await self.registration.getNotifications({ tag: notification.chatId });\n notifications.forEach((n) => n.close());\n }\n // Mark this notification as shown if it was handled locally\n shownNotifications.add(notification.messageId);\n return showNotification(notification);\n })());\n }\n\n if (e.data.type === 'closeMessageNotifications') {\n e.waitUntil(closeNotifications(e.data.payload));\n }\n}\n\nself.addEventListener('sync', () => {\n lastSyncAt = Date.now();\n});\n","import { DEBUG } from './config';\nimport { respondForProgressive } from './serviceWorker/progressive';\nimport { respondWithCache, clearAssetCache } from './serviceWorker/assetCache';\nimport { handlePush, handleNotificationClick, handleClientMessage } from './serviceWorker/pushNotification';\nimport { pause } from './util/schedulers';\n\ndeclare const self: ServiceWorkerGlobalScope;\n\nconst ASSET_CACHE_PATTERN = /[0-9a-f]{20}.*\\.(js|css|woff2?|svg|png|jpg|jpeg|json|wasm)$/;\nconst ACTIVATE_TIMEOUT = 3000;\n\nself.addEventListener('install', (e) => {\n if (DEBUG) {\n // eslint-disable-next-line no-console\n console.log('ServiceWorker installed');\n }\n\n // Activate worker immediately\n e.waitUntil(self.skipWaiting());\n});\n\nself.addEventListener('activate', (e) => {\n if (DEBUG) {\n // eslint-disable-next-line no-console\n console.log('ServiceWorker activated');\n }\n\n e.waitUntil(\n Promise.race([\n // An attempt to fix freezing UI on iOS\n pause(ACTIVATE_TIMEOUT),\n Promise.all([\n clearAssetCache(),\n // Become available to all pages\n self.clients.claim(),\n ]),\n ]),\n );\n});\n\n// eslint-disable-next-line no-restricted-globals\nself.addEventListener('fetch', (e: FetchEvent) => {\n const { url } = e.request;\n\n if (url.includes('/progressive/')) {\n e.respondWith(respondForProgressive(e));\n return true;\n }\n\n if (url.startsWith('http') && url.match(ASSET_CACHE_PATTERN)) {\n e.respondWith(respondWithCache(e));\n return true;\n }\n\n return false;\n});\n\nself.addEventListener('push', handlePush);\nself.addEventListener('notificationclick', handleNotificationClick);\nself.addEventListener('message', handleClientMessage);\n"],"names":["MEDIA_PROGRESSIVE_CACHE_NAME","ASSET_CACHE_NAME","SUPPORTED_IMAGE_CONTENT_TYPES","window","innerHeight","Math","round","Set","SUPPORTED_VIDEO_CONTENT_TYPES","pause","ms","Promise","resolve","setTimeout","DEFAULT_PART_SIZE","requestStates","Map","async","respondForProgressive","e","url","request","range","headers","get","bytes","exec","start","Number","end","match","fileSize","mimeType","Response","Uint8Array","buffer","status","statusText","cacheKey","cachedArrayBuffer","cachedHeaders","cache","self","caches","open","all","then","r","arrayBuffer","undefined","json","fetchFromCache","partInfo","params","clientId","client","clients","messageId","store","id","String","random","replace","hasOwnProperty","generateIdFor","requestState","promise","race","reject","Error","Object","assign","set","catch","finally","delete","postMessage","type","requestPart","err","fullSize","partSize","min","byteLength","arrayBufferPart","slice","put","Request","JSON","stringify","saveToCache","respondWithCache","cacheResult","cb","timeout","cached","console","error","withTimeout","ok","remote","fetch","clone","Boolean","addEventListener","result","data","lastSyncAt","Date","valueOf","shownNotifications","clickBuffer","getChatId","custom","from_id","chat_id","channel_id","getMessageId","msg_id","parseInt","getClients","appUrl","URL","registration","scope","origin","matchAll","filter","playNotificationSound","payload","showNotification","chatId","body","title","icon","reaction","isFirstBatch","options","count","badge","tag","vibrate","focusChatMessage","focused","focus","now","ASSET_CACHE_PATTERN","waitUntil","skipWaiting","claim","includes","respondWith","startsWith","getPushData","mute","True","notification","description","getNotificationData","has","close","map","openWindow","length","newClient","notifyClients","source","getNotifications","forEach","n","add","lastReadInboxMessageId","notifications","lastMessageId","MAX_VALUE","closeNotifications"],"sourceRoot":""} \ No newline at end of file diff --git a/dist/548.9cd8c9eadd943e5f565d.js b/dist/548.3bb36f6c7bb19731757e.js similarity index 99% rename from dist/548.9cd8c9eadd943e5f565d.js rename to dist/548.3bb36f6c7bb19731757e.js index 9e2dd6434..a4d4ba0fe 100644 --- a/dist/548.9cd8c9eadd943e5f565d.js +++ b/dist/548.3bb36f6c7bb19731757e.js @@ -1,2 +1,2 @@ "use strict";(self.webpackChunktelegram_t=self.webpackChunktelegram_t||[]).push([[548],{172:(e,t,n)=>{n.d(t,{Z:()=>h});var o=n(4050),r=n(6137),c=n(3716),s=n(5806),l=n(2155),i=n(6752),a=n(2340),d=n(6202),u=n(1212),m=n(9107);const f=(0,i.y)("Avatar");f.img=f("img"),f.icon=f("icon");const h=(0,o.X$)((e=>{let{className:t,size:n="large",chat:h,user:v,photo:p,userStatus:g,text:Z,isSavedMessages:E,lastSyncTime:w,onClick:C}=e;const y=v&&(0,s.NB)(v),A=v&&(0,s.pK)(v.id);let P;E||y||(v?P=(0,s.RT)(v):h?P=(0,s.RT)(h):p&&(P=`photo${p.id}?size=m`));const N=(0,d.Z)(P,!1,r.IU.BlobUrl,w),b=Boolean(N),{transitionClassNames:I}=(0,u.Z)(b,void 0,b,"slow"),T=(0,m.Z)();let k="";if(E)k=o.ZP.createElement("i",{className:(0,i.Z)(f.icon,"icon-avatar-saved-messages")});else if(y)k=o.ZP.createElement("i",{className:(0,i.Z)(f.icon,"icon-avatar-deleted-account")});else if(A)k=o.ZP.createElement("i",{className:(0,i.Z)(f.icon,"icon-reply-filled")});else if(N)k=o.ZP.createElement("img",{src:N,className:(0,i.Z)(f.img,"avatar-media",I),alt:"",decoding:"async"});else if(v){const e=(0,s.Js)(v);k=e?(0,l.Xv)(e,2):void 0}else if(h){const e=(0,s.U)(T,h);k=e&&(0,l.Xv)(e,(0,s.YC)(h.id)?2:1)}else Z&&(k=(0,l.Xv)(Z,2));const B=!E&&v&&g&&(0,s.kM)(v,g),S=(0,i.Z)(`Avatar size-${n}`,t,`color-bg-${(0,s.Rs)(v||h)}`,E&&"saved-messages",y&&"deleted-account",A&&"replies-bot-account",B&&"online",C&&"interactive",!E&&!N&&"no-photo"),U=Boolean(E||N),L=(0,o.I4)((e=>{C&&C(e,U)}),[C,U]),R=(v||h)&&(v||h).id;return o.ZP.createElement("div",{className:S,onClick:L,"data-test-sender-id":c.Cg?R:void 0},"string"==typeof k?(0,a.Z)(k,["jumbo"===n?"hq_emoji":"emoji"]):k)}))},7551:(e,t,n)=>{n.d(t,{Z:()=>i});var o=n(4050),r=n(9107),c=n(2313),s=n(3103),l=n(231);const i=(0,o.X$)((e=>{let{isOpen:t,onClose:n,onCloseAnimationEnd:i,title:a,header:d,text:u,textParts:m,confirmLabel:f="Confirm",confirmHandler:h,confirmIsDestructive:v,isButtonsInOneRow:p,children:g}=e;const Z=(0,r.Z)(),E=(0,o.sO)(null),w=(0,o.I4)((e=>{-1===e&&h()}),[h]),C=(0,c.Z)(E,t,w,".Button");return o.ZP.createElement(s.Z,{className:"confirm",title:a,header:d,isOpen:t,onClose:n,onCloseAnimationEnd:i},u&&u.split("\\n").map((e=>o.ZP.createElement("p",null,e))),m||g,o.ZP.createElement("div",{className:p?"dialog-buttons mt-2":"",ref:E,onKeyDown:C},o.ZP.createElement(l.Z,{className:"confirm-dialog-button",isText:!0,onClick:h,color:v?"danger":"primary"},f),o.ZP.createElement(l.Z,{className:"confirm-dialog-button",isText:!0,onClick:n},Z("Cancel"))))}))},1273:(e,t,n)=>{n.d(t,{Z:()=>u});var o=n(1713),r=n(4050),c=n(9118),s=n(7675),l=n(7361);const i=".ListItem",a=20,d=800,u=e=>{let{ref:t,className:n,onLoadMore:u,onScroll:m,onKeyDown:f,items:h,itemSelector:v=i,preloadBackwards:p=a,sensitiveArea:g=d,withAbsolutePositioning:Z,maxHeight:E,noScrollRestore:w=!1,noScrollRestoreOnTop:C=!1,noFastList:y,cacheBuster:A,children:P}=e,N=(0,r.sO)(null);t&&(N=t);const b=(0,r.sO)({}),[I,T]=(0,r.Ye)((()=>u?[(0,c.Ds)((function(){let e=arguments.length>0&&void 0!==arguments[0]&&arguments[0];u({direction:o.Uq.Backwards,noScroll:e})}),1e3,!0,!1),(0,c.Ds)((()=>{u({direction:o.Uq.Forwards})}),1e3,!0,!1)]:[]),[u,h]);(0,r.d4)((()=>{if(!I)return;if(p>0&&(!h||h.length{const e=N.current,t=b.current;let n;if(t.listItemElements=e.querySelectorAll(v),t.currentAnchor&&Array.from(t.listItemElements).includes(t.currentAnchor)){const{scrollTop:o}=e;n=o+(t.currentAnchor.getBoundingClientRect().top-t.currentAnchorTop)}else{const e=t.listItemElements[0];e&&(t.currentAnchor=e,t.currentAnchorTop=e.getBoundingClientRect().top)}Z||w||C&&0===e.scrollTop||((0,s.Z)(e,n),t.isScrollTopJustUpdated=!0)}),[h,v,w,C,A,Z]);const k=(0,r.I4)((e=>{if(T&&I){const{isScrollTopJustUpdated:e,currentAnchor:t,currentAnchorTop:n}=b.current,o=b.current.listItemElements;if(e)return void(b.current.isScrollTopJustUpdated=!1);const r=o.length,c=N.current,{scrollTop:s,scrollHeight:l,offsetHeight:i}=c,a=s<=(r?o[0].offsetTop:0)+g,d=(r?o[r-1].offsetTop+o[r-1].offsetHeight:l)-(s+i)<=g;let u=!1;if(a){const e=o[0];if(e){const o=e.getBoundingClientRect().top,r=null!=t&&t.offsetParent&&t!==e?t.getBoundingClientRect().top:o;t&&void 0!==n&&r>n&&(b.current.currentAnchor=e,b.current.currentAnchorTop=o,u=!0,T())}}if(d){const e=o[r-1];if(e){const o=e.getBoundingClientRect().top,r=null!=t&&t.offsetParent&&t!==e?t.getBoundingClientRect().top:o;t&&void 0!==n&&r{n.d(t,{Z:()=>f});var o=n(4050),r=n(517),c=n(6752),s=n(8674),l=n(1212),i=n(274),a=n(9107),d=n(6590),u=n(231),m=n(2898);const f=e=>{let{dialogRef:t,title:n,className:f,isOpen:h,header:v,hasCloseButton:p,noBackdrop:g,children:Z,onClose:E,onCloseAnimationEnd:w,onEnter:C,shouldSkipHistoryAnimations:y}=e;const{shouldRender:A,transitionClassNames:P}=(0,l.Z)(h,w,y,void 0,y),N=(0,o.sO)(null);(0,o.d4)((()=>h?(0,r.Z)({onEsc:E,onEnter:C}):void 0),[h,E,C]),(0,o.d4)((()=>h&&N.current?function(e){function t(t){if("Tab"!==t.key)return;t.preventDefault(),t.stopPropagation();const n=Array.from(e.querySelectorAll('button, [href], input, select, textarea, [tabindex]:not([tabindex="-1"])'));if(!n.length)return;const o=n.findIndex((e=>e.isSameNode(document.activeElement)));let r=0;o>=0&&(r=t.shiftKey?o>0?o-1:n.length-1:o{document.removeEventListener("keydown",t,!1)}}(N.current):void 0),[h]);const{forceClose:b}=(0,d.ZP)(h,E);(0,o.d4)((()=>()=>{h&&b()}),[]),(0,i.Z)((e=>{let[t]=e;return document.body.classList.toggle("has-open-dialog",h),(h||!h&&void 0!==t)&&(0,s.YW)(200),()=>{document.body.classList.remove("has-open-dialog")}}),[h]);const I=(0,a.Z)();if(!A)return;const T=(0,c.Z)("Modal",f,P,g&&"transparent-backdrop");return o.ZP.createElement(m.Z,null,o.ZP.createElement("div",{ref:N,className:T,tabIndex:-1,role:"dialog"},o.ZP.createElement("div",{className:"modal-container"},o.ZP.createElement("div",{className:"modal-backdrop",onClick:E}),o.ZP.createElement("div",{className:"modal-dialog",ref:t},v||(n?o.ZP.createElement("div",{className:"modal-header"},p&&o.ZP.createElement(u.Z,{round:!0,color:"translucent",size:"smaller",ariaLabel:I("Close"),onClick:E},o.ZP.createElement("i",{className:"icon-close"})),o.ZP.createElement("div",{className:"modal-title"},n)):void 0),o.ZP.createElement("div",{className:"modal-content custom-scroll"},Z)))))}},2898:(e,t,n)=>{n.d(t,{Z:()=>c});var o=n(4050),r=n(2916);const c=e=>{let{containerId:t,className:n,children:c}=e;const s=(0,o.sO)();return s.current||(s.current=document.createElement("div")),(0,o.bt)((()=>{const e=document.querySelector(t||"#portals");if(!e)return;const o=s.current;return n&&o.classList.add(n),e.appendChild(o),()=>{r.Z.render(void 0,o),e.removeChild(o)}}),[n,t]),r.Z.render(c,s.current)}},8360:(e,t,n)=>{n.d(t,{Z:()=>r});var o=n(7204);function r(e){let t=arguments.length>1&&void 0!==arguments[1]&&arguments[1],n=arguments.length>2&&void 0!==arguments[2]&&arguments[2];const r=(0,o.Z)(e,t);return n||null!=e?e:r}},7407:(e,t,n)=>{n.d(t,{Z:()=>a});var o=n(4050),r=n(1713),c=n(782),s=n(5326),l=n(7204);function i(e,t,n,o){const{length:c}=e,s=o?e.indexOf(o):0,l=t===r.Uq.Forwards?s:s+1||c,i=Math.max(0,l-n),a=l+n-1,d=e.slice(Math.max(0,i),a+1);let u,m;switch(t){case r.Uq.Forwards:u=l>0,m=i>=0;break;case r.Uq.Backwards:u=l2&&void 0!==arguments[2]&&arguments[2],a=arguments.length>3&&void 0!==arguments[3]?arguments[3]:30;const d=(0,o.sO)(),u=(0,o.sO)((()=>{if(!t||d.current)return;const{newViewportIds:e}=i(t,r.Uq.Forwards,a,t[0]);return e})()),m=(0,s.Z)();n&&(d.current={});const f=(0,l.Z)(t),h=(0,l.Z)(n);if(t&&!n&&(t!==f||n!==h)){const{offsetId:e=t[0],direction:n=r.Uq.Forwards}=d.current||{},{newViewportIds:o}=i(t,n,a,e);u.current&&(0,c.et)(u.current,o)||(u.current=o)}const v=(0,o.I4)((n=>{let{direction:o,noScroll:s}=n;const l=u.current,f=l?o===r.Uq.Backwards?l[l.length-1]:l[0]:void 0;if(!t)return void(e&&e({offsetId:f}));s||(d.current={...d.current,direction:o,offsetId:f});const{newViewportIds:h,areSomeLocal:v,areAllLocal:p}=i(t,o,a,f);!v||l&&(0,c.et)(l,h)||(u.current=h,m()),!p&&e&&e({offsetId:f})}),[t,a,e,m]);return n?[t]:[u.current,v]}},6202:(e,t,n)=>{n.d(t,{Z:()=>l});var o=n(4050),r=n(6137),c=n(647),s=n(5326);const l=function(e){let t=arguments.length>1&&void 0!==arguments[1]&&arguments[1],n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:r.IU.BlobUrl,l=arguments.length>3?arguments[3]:void 0,i=arguments.length>4?arguments[4]:void 0;const a=e?c.UV(e):void 0,d=(0,s.Z)();return(0,o.d4)((()=>{if(!t&&e&&!a){const t=Date.now();c.he(e,n).then((()=>{const e=Date.now()-t;!i||e>=i?d():setTimeout(d,i-e)}))}}),[t,e,a,n,l,d,i]),a}},2972:(e,t,n)=>{function o(e){e.offsetWidth}n.d(t,{Z:()=>o})},7675:(e,t,n)=>{n.d(t,{Z:()=>s,z:()=>c});var o=n(7361),r=n(2972);function c(e){e.style.display="none",(0,r.Z)(e),e.style.display=""}const s=(e,t)=>{o.cj&&(e.style.overflow="hidden"),void 0!==t&&(e.scrollTop=t),o.cj&&(e.style.overflow="")}},4753:(e,t,n)=>{n.d(t,{Z:()=>r});var o=n(3716);const r=e=>{e.play().catch((t=>{o.eM&&console.warn(t,e)}))}}}]); -//# sourceMappingURL=548.9cd8c9eadd943e5f565d.js.map \ No newline at end of file +//# sourceMappingURL=548.3bb36f6c7bb19731757e.js.map \ No newline at end of file diff --git a/dist/548.9cd8c9eadd943e5f565d.js.map b/dist/548.3bb36f6c7bb19731757e.js.map similarity index 99% rename from dist/548.9cd8c9eadd943e5f565d.js.map rename to dist/548.3bb36f6c7bb19731757e.js.map index 270ab8559..54c5361f4 100644 --- a/dist/548.9cd8c9eadd943e5f565d.js.map +++ b/dist/548.3bb36f6c7bb19731757e.js.map @@ -1 +1 @@ -{"version":3,"file":"548.9cd8c9eadd943e5f565d.js","mappings":"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","sources":["webpack://telegram-t/./src/components/common/Avatar.tsx","webpack://telegram-t/./src/components/ui/ConfirmDialog.tsx","webpack://telegram-t/./src/components/ui/InfiniteScroll.tsx","webpack://telegram-t/./src/components/ui/Modal.tsx","webpack://telegram-t/./src/util/trapFocus.ts","webpack://telegram-t/./src/components/ui/Portal.ts","webpack://telegram-t/./src/hooks/useCurrentOrPrev.ts","webpack://telegram-t/./src/hooks/useInfiniteScroll.ts","webpack://telegram-t/./src/hooks/useMedia.ts","webpack://telegram-t/./src/util/forceReflow.ts","webpack://telegram-t/./src/util/resetScroll.ts","webpack://telegram-t/./src/util/safePlay.ts"],"sourcesContent":["import { MouseEvent as ReactMouseEvent } from 'react';\nimport React, { FC, memo, useCallback } from '../../lib/teact/teact';\n\nimport {\n ApiChat, ApiMediaFormat, ApiPhoto, ApiUser, ApiUserStatus,\n} from '../../api/types';\n\nimport { IS_TEST } from '../../config';\nimport {\n getChatAvatarHash,\n getChatTitle,\n getUserColorKey,\n getUserFullName,\n isUserId,\n isChatWithRepliesBot,\n isDeletedUser,\n isUserOnline,\n} from '../../global/helpers';\nimport { getFirstLetters } from '../../util/textFormat';\nimport buildClassName, { createClassNameBuilder } from '../../util/buildClassName';\nimport renderText from './helpers/renderText';\nimport useMedia from '../../hooks/useMedia';\nimport useShowTransition from '../../hooks/useShowTransition';\nimport useLang from '../../hooks/useLang';\n\nimport './Avatar.scss';\n\nconst cn = createClassNameBuilder('Avatar');\ncn.img = cn('img');\ncn.icon = cn('icon');\n\ntype OwnProps = {\n className?: string;\n size?: 'micro' | 'tiny' | 'small' | 'medium' | 'large' | 'jumbo';\n chat?: ApiChat;\n user?: ApiUser;\n photo?: ApiPhoto;\n userStatus?: ApiUserStatus;\n text?: string;\n isSavedMessages?: boolean;\n lastSyncTime?: number;\n onClick?: (e: ReactMouseEvent, hasPhoto: boolean) => void;\n};\n\nconst Avatar: FC = ({\n className,\n size = 'large',\n chat,\n user,\n photo,\n userStatus,\n text,\n isSavedMessages,\n lastSyncTime,\n onClick,\n}) => {\n const isDeleted = user && isDeletedUser(user);\n const isReplies = user && isChatWithRepliesBot(user.id);\n let imageHash: string | undefined;\n\n if (!isSavedMessages && !isDeleted) {\n if (user) {\n imageHash = getChatAvatarHash(user);\n } else if (chat) {\n imageHash = getChatAvatarHash(chat);\n } else if (photo) {\n imageHash = `photo${photo.id}?size=m`;\n }\n }\n\n const blobUrl = useMedia(imageHash, false, ApiMediaFormat.BlobUrl, lastSyncTime);\n const hasBlobUrl = Boolean(blobUrl);\n const { transitionClassNames } = useShowTransition(hasBlobUrl, undefined, hasBlobUrl, 'slow');\n\n const lang = useLang();\n\n let content: string | undefined = '';\n\n if (isSavedMessages) {\n content = ;\n } else if (isDeleted) {\n content = ;\n } else if (isReplies) {\n content = ;\n } else if (blobUrl) {\n content = (\n \n );\n } else if (user) {\n const userFullName = getUserFullName(user);\n content = userFullName ? getFirstLetters(userFullName, 2) : undefined;\n } else if (chat) {\n const title = getChatTitle(lang, chat);\n content = title && getFirstLetters(title, isUserId(chat.id) ? 2 : 1);\n } else if (text) {\n content = getFirstLetters(text, 2);\n }\n\n const isOnline = !isSavedMessages && user && userStatus && isUserOnline(user, userStatus);\n const fullClassName = buildClassName(\n `Avatar size-${size}`,\n className,\n `color-bg-${getUserColorKey(user || chat)}`,\n isSavedMessages && 'saved-messages',\n isDeleted && 'deleted-account',\n isReplies && 'replies-bot-account',\n isOnline && 'online',\n onClick && 'interactive',\n (!isSavedMessages && !blobUrl) && 'no-photo',\n );\n\n const hasImage = Boolean(isSavedMessages || blobUrl);\n const handleClick = useCallback((e: ReactMouseEvent) => {\n if (onClick) {\n onClick(e, hasImage);\n }\n }, [onClick, hasImage]);\n\n const senderId = (user || chat) && (user || chat)!.id;\n\n return (\n
\n {typeof content === 'string' ? renderText(content, [size === 'jumbo' ? 'hq_emoji' : 'emoji']) : content}\n
\n );\n};\n\nexport default memo(Avatar);\n","import React, {\n FC, memo, useCallback, useRef,\n} from '../../lib/teact/teact';\n\nimport useLang from '../../hooks/useLang';\nimport { TextPart } from '../common/helpers/renderMessageText';\nimport useKeyboardListNavigation from '../../hooks/useKeyboardListNavigation';\n\nimport Modal from './Modal';\nimport Button from './Button';\n\ntype OwnProps = {\n isOpen: boolean;\n onClose: () => void;\n onCloseAnimationEnd?: () => void;\n title?: string;\n header?: FC;\n textParts?: TextPart[];\n text?: string;\n confirmLabel?: string;\n confirmHandler: () => void;\n confirmIsDestructive?: boolean;\n isButtonsInOneRow?: boolean;\n children?: React.ReactNode;\n};\n\nconst ConfirmDialog: FC = ({\n isOpen,\n onClose,\n onCloseAnimationEnd,\n title,\n header,\n text,\n textParts,\n confirmLabel = 'Confirm',\n confirmHandler,\n confirmIsDestructive,\n isButtonsInOneRow,\n children,\n}) => {\n const lang = useLang();\n\n // eslint-disable-next-line no-null/no-null\n const containerRef = useRef(null);\n\n const handleSelectWithEnter = useCallback((index: number) => {\n if (index === -1) confirmHandler();\n }, [confirmHandler]);\n\n const handleKeyDown = useKeyboardListNavigation(containerRef, isOpen, handleSelectWithEnter, '.Button');\n\n return (\n \n {text && text.split('\\\\n').map((textPart) => (\n

{textPart}

\n ))}\n {textParts || children}\n
\n \n {confirmLabel}\n \n \n
\n \n );\n};\n\nexport default memo(ConfirmDialog);\n","import { RefObject, UIEvent } from 'react';\nimport { LoadMoreDirection } from '../../types';\n\nimport React, {\n FC, useCallback, useEffect, useLayoutEffect, useMemo, useRef,\n} from '../../lib/teact/teact';\n\nimport { debounce } from '../../util/schedulers';\nimport resetScroll from '../../util/resetScroll';\nimport { IS_ANDROID } from '../../util/environment';\n\ntype OwnProps = {\n ref?: RefObject;\n className?: string;\n onLoadMore?: ({ direction }: { direction: LoadMoreDirection; noScroll?: boolean }) => void;\n onScroll?: (e: UIEvent) => void;\n onKeyDown?: (e: React.KeyboardEvent) => void;\n items?: any[];\n itemSelector?: string;\n preloadBackwards?: number;\n sensitiveArea?: number;\n withAbsolutePositioning?: boolean;\n maxHeight?: number;\n noScrollRestore?: boolean;\n noScrollRestoreOnTop?: boolean;\n noFastList?: boolean;\n cacheBuster?: any;\n children: React.ReactNode;\n};\n\nconst DEFAULT_LIST_SELECTOR = '.ListItem';\nconst DEFAULT_PRELOAD_BACKWARDS = 20;\nconst DEFAULT_SENSITIVE_AREA = 800;\n\nconst InfiniteScroll: FC = ({\n ref,\n className,\n onLoadMore,\n onScroll,\n onKeyDown,\n items,\n itemSelector = DEFAULT_LIST_SELECTOR,\n preloadBackwards = DEFAULT_PRELOAD_BACKWARDS,\n sensitiveArea = DEFAULT_SENSITIVE_AREA,\n withAbsolutePositioning,\n maxHeight,\n // Used to turn off restoring scroll position (e.g. for frequently re-ordered chat or user lists)\n noScrollRestore = false,\n noScrollRestoreOnTop = false,\n noFastList,\n // Used to re-query `listItemElements` if rendering is delayed by transition\n cacheBuster,\n children,\n}: OwnProps) => {\n // eslint-disable-next-line no-null/no-null\n let containerRef = useRef(null);\n if (ref) {\n containerRef = ref;\n }\n\n const stateRef = useRef<{\n listItemElements?: NodeListOf;\n isScrollTopJustUpdated?: boolean;\n currentAnchor?: HTMLDivElement | undefined;\n currentAnchorTop?: number;\n }>({});\n\n const [loadMoreBackwards, loadMoreForwards] = useMemo(() => {\n if (!onLoadMore) {\n return [];\n }\n\n return [\n debounce((noScroll = false) => {\n onLoadMore({ direction: LoadMoreDirection.Backwards, noScroll });\n }, 1000, true, false),\n debounce(() => {\n onLoadMore({ direction: LoadMoreDirection.Forwards });\n }, 1000, true, false),\n ];\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [onLoadMore, items]);\n\n // Initial preload\n useEffect(() => {\n if (!loadMoreBackwards) {\n return;\n }\n\n if (preloadBackwards > 0 && (!items || items.length < preloadBackwards)) {\n loadMoreBackwards(true);\n return;\n }\n\n const { scrollHeight, clientHeight } = containerRef.current!;\n if (clientHeight && scrollHeight <= clientHeight) {\n loadMoreBackwards();\n }\n }, [items, loadMoreBackwards, preloadBackwards]);\n\n // Restore `scrollTop` after adding items\n useLayoutEffect(() => {\n const container = containerRef.current!;\n const state = stateRef.current;\n\n state.listItemElements = container.querySelectorAll(itemSelector);\n\n let newScrollTop;\n\n if (state.currentAnchor && Array.from(state.listItemElements).includes(state.currentAnchor)) {\n const { scrollTop } = container;\n const newAnchorTop = state.currentAnchor.getBoundingClientRect().top;\n newScrollTop = scrollTop + (newAnchorTop - state.currentAnchorTop!);\n } else {\n const nextAnchor = state.listItemElements[0];\n if (nextAnchor) {\n state.currentAnchor = nextAnchor;\n state.currentAnchorTop = nextAnchor.getBoundingClientRect().top;\n }\n }\n\n if (withAbsolutePositioning || noScrollRestore) {\n return;\n }\n\n if (noScrollRestoreOnTop && container.scrollTop === 0) {\n return;\n }\n\n resetScroll(container, newScrollTop);\n\n state.isScrollTopJustUpdated = true;\n }, [items, itemSelector, noScrollRestore, noScrollRestoreOnTop, cacheBuster, withAbsolutePositioning]);\n\n const handleScroll = useCallback((e: UIEvent) => {\n if (loadMoreForwards && loadMoreBackwards) {\n const {\n isScrollTopJustUpdated, currentAnchor, currentAnchorTop,\n } = stateRef.current;\n const listItemElements = stateRef.current.listItemElements!;\n\n if (isScrollTopJustUpdated) {\n stateRef.current.isScrollTopJustUpdated = false;\n return;\n }\n\n const listLength = listItemElements.length;\n const container = containerRef.current!;\n const { scrollTop, scrollHeight, offsetHeight } = container;\n const top = listLength ? listItemElements[0].offsetTop : 0;\n const isNearTop = scrollTop <= top + sensitiveArea;\n const bottom = listLength\n ? listItemElements[listLength - 1].offsetTop + listItemElements[listLength - 1].offsetHeight\n : scrollHeight;\n const isNearBottom = bottom - (scrollTop + offsetHeight) <= sensitiveArea;\n let isUpdated = false;\n\n if (isNearTop) {\n const nextAnchor = listItemElements[0];\n if (nextAnchor) {\n const nextAnchorTop = nextAnchor.getBoundingClientRect().top;\n const newAnchorTop = currentAnchor?.offsetParent && currentAnchor !== nextAnchor\n ? currentAnchor.getBoundingClientRect().top\n : nextAnchorTop;\n const isMovingUp = (\n currentAnchor && currentAnchorTop !== undefined && newAnchorTop > currentAnchorTop\n );\n\n if (isMovingUp) {\n stateRef.current.currentAnchor = nextAnchor;\n stateRef.current.currentAnchorTop = nextAnchorTop;\n isUpdated = true;\n loadMoreForwards();\n }\n }\n }\n\n if (isNearBottom) {\n const nextAnchor = listItemElements[listLength - 1];\n if (nextAnchor) {\n const nextAnchorTop = nextAnchor.getBoundingClientRect().top;\n const newAnchorTop = currentAnchor?.offsetParent && currentAnchor !== nextAnchor\n ? currentAnchor.getBoundingClientRect().top\n : nextAnchorTop;\n const isMovingDown = (\n currentAnchor && currentAnchorTop !== undefined && newAnchorTop < currentAnchorTop\n );\n\n if (isMovingDown) {\n stateRef.current.currentAnchor = nextAnchor;\n stateRef.current.currentAnchorTop = nextAnchorTop;\n isUpdated = true;\n loadMoreBackwards();\n }\n }\n }\n\n if (!isUpdated) {\n if (currentAnchor?.offsetParent) {\n stateRef.current.currentAnchorTop = currentAnchor.getBoundingClientRect().top;\n } else {\n const nextAnchor = listItemElements[0];\n\n if (nextAnchor) {\n stateRef.current.currentAnchor = nextAnchor;\n stateRef.current.currentAnchorTop = nextAnchor.getBoundingClientRect().top;\n }\n }\n }\n }\n\n if (onScroll) {\n onScroll(e);\n }\n }, [loadMoreBackwards, loadMoreForwards, onScroll, sensitiveArea]);\n\n return (\n \n {withAbsolutePositioning && items?.length ? (\n \n {children}\n
\n ) : children}\n
\n );\n};\n\nexport default InfiniteScroll;\n","import { RefObject } from 'react';\nimport React, {\n FC, useEffect, useRef,\n} from '../../lib/teact/teact';\n\nimport { TextPart } from '../common/helpers/renderMessageText';\n\nimport captureKeyboardListeners from '../../util/captureKeyboardListeners';\nimport trapFocus from '../../util/trapFocus';\nimport buildClassName from '../../util/buildClassName';\nimport { dispatchHeavyAnimationEvent } from '../../hooks/useHeavyAnimationCheck';\nimport useShowTransition from '../../hooks/useShowTransition';\nimport useEffectWithPrevDeps from '../../hooks/useEffectWithPrevDeps';\nimport useLang from '../../hooks/useLang';\nimport useHistoryBack from '../../hooks/useHistoryBack';\n\nimport Button from './Button';\nimport Portal from './Portal';\n\nimport './Modal.scss';\n\nconst ANIMATION_DURATION = 200;\n\ntype OwnProps = {\n title?: string | TextPart[];\n className?: string;\n isOpen?: boolean;\n header?: any;\n hasCloseButton?: boolean;\n noBackdrop?: boolean;\n children: React.ReactNode;\n onClose: () => void;\n onCloseAnimationEnd?: () => void;\n onEnter?: () => void;\n dialogRef?: RefObject;\n};\n\ntype StateProps = {\n shouldSkipHistoryAnimations?: boolean;\n};\n\nconst Modal: FC = ({\n dialogRef,\n title,\n className,\n isOpen,\n header,\n hasCloseButton,\n noBackdrop,\n children,\n onClose,\n onCloseAnimationEnd,\n onEnter,\n shouldSkipHistoryAnimations,\n}) => {\n const {\n shouldRender,\n transitionClassNames,\n } = useShowTransition(\n isOpen, onCloseAnimationEnd, shouldSkipHistoryAnimations, undefined, shouldSkipHistoryAnimations,\n );\n // eslint-disable-next-line no-null/no-null\n const modalRef = useRef(null);\n\n useEffect(() => (isOpen\n ? captureKeyboardListeners({ onEsc: onClose, onEnter })\n : undefined), [isOpen, onClose, onEnter]);\n useEffect(() => (isOpen && modalRef.current ? trapFocus(modalRef.current) : undefined), [isOpen]);\n\n const { forceClose } = useHistoryBack(isOpen, onClose);\n\n // For modals that are closed by unmounting without changing `isOpen` to `false`\n useEffect(() => {\n return () => {\n if (isOpen) {\n forceClose();\n }\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n useEffectWithPrevDeps(([prevIsOpen]) => {\n document.body.classList.toggle('has-open-dialog', isOpen);\n if (isOpen || (!isOpen && prevIsOpen !== undefined)) {\n dispatchHeavyAnimationEvent(ANIMATION_DURATION);\n }\n\n return () => {\n document.body.classList.remove('has-open-dialog');\n };\n }, [isOpen]);\n\n const lang = useLang();\n\n if (!shouldRender) {\n return undefined;\n }\n\n function renderHeader() {\n if (header) {\n return header;\n }\n\n if (!title) {\n return undefined;\n }\n\n return (\n
\n {hasCloseButton && (\n \n \n \n )}\n
{title}
\n
\n );\n }\n\n const fullClassName = buildClassName(\n 'Modal',\n className,\n transitionClassNames,\n noBackdrop && 'transparent-backdrop',\n );\n\n return (\n \n \n
\n
\n
\n {renderHeader()}\n
\n {children}\n
\n
\n
\n
\n
\n );\n};\n\nexport default Modal;\n","export default function trapFocus(element: HTMLElement) {\n function handleKeyDown(e: KeyboardEvent) {\n if (e.key !== 'Tab') {\n return;\n }\n\n e.preventDefault();\n e.stopPropagation();\n\n const focusableElements = Array.from(\n element.querySelectorAll('button, [href], input, select, textarea, [tabindex]:not([tabindex=\"-1\"])'),\n ) as HTMLElement[];\n if (!focusableElements.length) {\n return;\n }\n\n const currentFocusedIndex = focusableElements.findIndex((em) => em.isSameNode(document.activeElement));\n let newFocusedIndex = 0;\n if (currentFocusedIndex >= 0) {\n if (e.shiftKey) {\n newFocusedIndex = currentFocusedIndex > 0\n ? currentFocusedIndex - 1\n : focusableElements.length - 1;\n } else {\n newFocusedIndex = currentFocusedIndex < focusableElements.length - 1\n ? currentFocusedIndex + 1\n : 0;\n }\n }\n\n focusableElements[newFocusedIndex].focus();\n }\n\n document.addEventListener('keydown', handleKeyDown, false);\n\n return () => {\n document.removeEventListener('keydown', handleKeyDown, false);\n };\n}\n","import {\n FC, useRef, useLayoutEffect, VirtualElement,\n} from '../../lib/teact/teact';\nimport TeactDOM from '../../lib/teact/teact-dom';\n\ntype OwnProps = {\n containerId?: string;\n className?: string;\n children: React.ReactNode;\n};\n\nconst Portal: FC = ({ containerId, className, children }) => {\n const elementRef = useRef();\n if (!elementRef.current) {\n elementRef.current = document.createElement('div');\n }\n\n useLayoutEffect(() => {\n const container = document.querySelector(containerId || '#portals');\n if (!container) {\n return undefined;\n }\n\n const element = elementRef.current!;\n if (className) {\n element.classList.add(className);\n }\n\n container.appendChild(element);\n\n return () => {\n TeactDOM.render(undefined, element);\n container.removeChild(element);\n };\n }, [className, containerId]);\n\n return TeactDOM.render(children as VirtualElement, elementRef.current);\n};\n\nexport default Portal;\n","import usePrevious from './usePrevious';\n\nexport default function useCurrentOrPrev(\n current: T, shouldSkipUndefined = false, shouldForceCurrent = false,\n): T | undefined {\n const prev = usePrevious(current, shouldSkipUndefined);\n\n // eslint-disable-next-line no-null/no-null\n return shouldForceCurrent || (current !== null && current !== undefined) ? current : prev;\n}\n","import { useCallback, useRef } from '../lib/teact/teact';\nimport { LoadMoreDirection } from '../types';\n\nimport { areSortedArraysEqual } from '../util/iteratees';\nimport useForceUpdate from './useForceUpdate';\nimport usePrevious from './usePrevious';\n\ntype GetMore = (args: { direction: LoadMoreDirection }) => void;\ntype LoadMoreBackwards = (args: { offsetId?: string | number }) => void;\n\nconst DEFAULT_LIST_SLICE = 30;\n\nconst useInfiniteScroll = (\n loadMoreBackwards?: LoadMoreBackwards,\n listIds?: ListId[],\n isDisabled = false,\n listSlice = DEFAULT_LIST_SLICE,\n): [ListId[]?, GetMore?] => {\n const lastParamsRef = useRef<{\n direction?: LoadMoreDirection;\n offsetId?: ListId;\n }>();\n\n const viewportIdsRef = useRef((() => {\n // Only run once to initialize\n if (!listIds || lastParamsRef.current) {\n return undefined;\n }\n\n const { newViewportIds } = getViewportSlice(listIds, LoadMoreDirection.Forwards, listSlice, listIds[0]);\n return newViewportIds;\n })());\n\n const forceUpdate = useForceUpdate();\n\n if (isDisabled) {\n lastParamsRef.current = {};\n }\n\n const prevListIds = usePrevious(listIds);\n const prevIsDisabled = usePrevious(isDisabled);\n if (listIds && !isDisabled && (listIds !== prevListIds || isDisabled !== prevIsDisabled)) {\n const { offsetId = listIds[0], direction = LoadMoreDirection.Forwards } = lastParamsRef.current || {};\n const { newViewportIds } = getViewportSlice(listIds, direction, listSlice, offsetId);\n\n if (!viewportIdsRef.current || !areSortedArraysEqual(viewportIdsRef.current, newViewportIds)) {\n viewportIdsRef.current = newViewportIds;\n }\n }\n\n const getMore: GetMore = useCallback(({\n direction,\n noScroll,\n }: { direction: LoadMoreDirection; noScroll?: boolean }) => {\n const viewportIds = viewportIdsRef.current;\n\n const offsetId = viewportIds\n ? direction === LoadMoreDirection.Backwards ? viewportIds[viewportIds.length - 1] : viewportIds[0]\n : undefined;\n\n if (!listIds) {\n if (loadMoreBackwards) {\n loadMoreBackwards({ offsetId });\n }\n\n return;\n }\n\n if (!noScroll) {\n lastParamsRef.current = { ...lastParamsRef.current, direction, offsetId };\n }\n\n const {\n newViewportIds, areSomeLocal, areAllLocal,\n } = getViewportSlice(listIds, direction, listSlice, offsetId);\n\n if (areSomeLocal && !(viewportIds && areSortedArraysEqual(viewportIds, newViewportIds))) {\n viewportIdsRef.current = newViewportIds;\n forceUpdate();\n }\n\n if (!areAllLocal && loadMoreBackwards) {\n loadMoreBackwards({ offsetId });\n }\n }, [listIds, listSlice, loadMoreBackwards, forceUpdate]);\n\n return isDisabled ? [listIds] : [viewportIdsRef.current, getMore];\n};\n\nfunction getViewportSlice(\n sourceIds: ListId[],\n direction: LoadMoreDirection,\n listSlice: number,\n offsetId?: ListId,\n) {\n const { length } = sourceIds;\n const index = offsetId ? sourceIds.indexOf(offsetId) : 0;\n const isForwards = direction === LoadMoreDirection.Forwards;\n const indexForDirection = isForwards ? index : (index + 1) || length;\n const from = Math.max(0, indexForDirection - listSlice);\n const to = indexForDirection + listSlice - 1;\n const newViewportIds = sourceIds.slice(Math.max(0, from), to + 1);\n\n let areSomeLocal;\n let areAllLocal;\n switch (direction) {\n case LoadMoreDirection.Forwards:\n areSomeLocal = indexForDirection > 0;\n areAllLocal = from >= 0;\n break;\n case LoadMoreDirection.Backwards:\n areSomeLocal = indexForDirection < length;\n areAllLocal = to <= length - 1;\n break;\n }\n\n return { newViewportIds, areSomeLocal, areAllLocal };\n}\n\nexport default useInfiniteScroll;\n","import { useEffect } from '../lib/teact/teact';\n\nimport { ApiMediaFormat } from '../api/types';\n\nimport * as mediaLoader from '../util/mediaLoader';\nimport useForceUpdate from './useForceUpdate';\n\nconst useMedia = (\n mediaHash: string | false | undefined,\n noLoad = false,\n mediaFormat = ApiMediaFormat.BlobUrl,\n cacheBuster?: number,\n delay?: number | false,\n) => {\n const mediaData = mediaHash ? mediaLoader.getFromMemory(mediaHash) : undefined;\n const forceUpdate = useForceUpdate();\n\n useEffect(() => {\n if (!noLoad && mediaHash && !mediaData) {\n const startedAt = Date.now();\n\n mediaLoader.fetch(mediaHash, mediaFormat).then(() => {\n const spentTime = Date.now() - startedAt;\n if (!delay || spentTime >= delay) {\n forceUpdate();\n } else {\n setTimeout(forceUpdate, delay - spentTime);\n }\n });\n }\n }, [noLoad, mediaHash, mediaData, mediaFormat, cacheBuster, forceUpdate, delay]);\n\n return mediaData;\n};\n\nexport default useMedia;\n","// Used before applying CSS transition\nexport default function forceReflow(element: HTMLElement) {\n // eslint-disable-next-line @typescript-eslint/no-unused-expressions\n element.offsetWidth;\n}\n","import { IS_IOS } from './environment';\nimport forceReflow from './forceReflow';\n\nconst resetScroll = (container: HTMLDivElement, scrollTop?: number) => {\n if (IS_IOS) {\n container.style.overflow = 'hidden';\n }\n\n if (scrollTop !== undefined) {\n container.scrollTop = scrollTop;\n }\n\n if (IS_IOS) {\n container.style.overflow = '';\n }\n};\n\n// Workaround for https://bugs.chromium.org/p/chromium/issues/detail?id=1264266\nexport function patchChromiumScroll(element: HTMLElement) {\n element.style.display = 'none';\n forceReflow(element);\n element.style.display = '';\n}\n\nexport default resetScroll;\n","import { DEBUG } from '../config';\n\nconst safePlay = (mediaEl: HTMLMediaElement) => {\n mediaEl.play().catch((err) => {\n if (DEBUG) {\n // eslint-disable-next-line no-console\n console.warn(err, mediaEl);\n }\n });\n};\n\nexport default safePlay;\n"],"names":["cn","createClassNameBuilder","img","icon","memo","className","size","chat","user","photo","userStatus","text","isSavedMessages","lastSyncTime","onClick","isDeleted","isDeletedUser","isReplies","isChatWithRepliesBot","id","imageHash","getChatAvatarHash","blobUrl","useMedia","ApiMediaFormat","hasBlobUrl","Boolean","transitionClassNames","useShowTransition","undefined","lang","useLang","content","buildClassName","src","alt","decoding","userFullName","getUserFullName","getFirstLetters","title","getChatTitle","isUserId","isOnline","isUserOnline","fullClassName","getUserColorKey","hasImage","handleClick","useCallback","e","senderId","IS_TEST","renderText","isOpen","onClose","onCloseAnimationEnd","header","textParts","confirmLabel","confirmHandler","confirmIsDestructive","isButtonsInOneRow","children","containerRef","useRef","handleSelectWithEnter","index","handleKeyDown","useKeyboardListNavigation","split","map","textPart","ref","onKeyDown","isText","color","DEFAULT_LIST_SELECTOR","DEFAULT_PRELOAD_BACKWARDS","DEFAULT_SENSITIVE_AREA","onLoadMore","onScroll","items","itemSelector","preloadBackwards","sensitiveArea","withAbsolutePositioning","maxHeight","noScrollRestore","noScrollRestoreOnTop","noFastList","cacheBuster","stateRef","loadMoreBackwards","loadMoreForwards","useMemo","debounce","noScroll","direction","LoadMoreDirection","useEffect","length","scrollHeight","clientHeight","current","useLayoutEffect","container","state","newScrollTop","listItemElements","querySelectorAll","currentAnchor","Array","from","includes","scrollTop","getBoundingClientRect","top","currentAnchorTop","nextAnchor","resetScroll","isScrollTopJustUpdated","handleScroll","listLength","offsetHeight","isNearTop","offsetTop","isNearBottom","isUpdated","nextAnchorTop","newAnchorTop","offsetParent","teactFastList","style","IS_ANDROID","dialogRef","hasCloseButton","noBackdrop","onEnter","shouldSkipHistoryAnimations","shouldRender","modalRef","captureKeyboardListeners","onEsc","element","key","preventDefault","stopPropagation","focusableElements","currentFocusedIndex","findIndex","em","isSameNode","document","activeElement","newFocusedIndex","shiftKey","focus","addEventListener","removeEventListener","trapFocus","forceClose","useHistoryBack","useEffectWithPrevDeps","prevIsOpen","body","classList","toggle","dispatchHeavyAnimationEvent","remove","Portal","tabIndex","role","Button","round","ariaLabel","containerId","elementRef","createElement","querySelector","add","appendChild","TeactDOM","removeChild","useCurrentOrPrev","shouldSkipUndefined","shouldForceCurrent","prev","usePrevious","getViewportSlice","sourceIds","listSlice","offsetId","indexOf","indexForDirection","Math","max","to","newViewportIds","slice","areSomeLocal","areAllLocal","listIds","isDisabled","lastParamsRef","viewportIdsRef","forceUpdate","useForceUpdate","prevListIds","prevIsDisabled","areSortedArraysEqual","getMore","viewportIds","mediaHash","noLoad","mediaFormat","delay","mediaData","mediaLoader","startedAt","Date","now","then","spentTime","setTimeout","forceReflow","offsetWidth","patchChromiumScroll","display","IS_IOS","overflow","mediaEl","play","catch","err","DEBUG","console","warn"],"sourceRoot":""} \ No newline at end of file +{"version":3,"file":"548.3bb36f6c7bb19731757e.js","mappings":"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","sources":["webpack://telegram-t/./src/components/common/Avatar.tsx","webpack://telegram-t/./src/components/ui/ConfirmDialog.tsx","webpack://telegram-t/./src/components/ui/InfiniteScroll.tsx","webpack://telegram-t/./src/components/ui/Modal.tsx","webpack://telegram-t/./src/util/trapFocus.ts","webpack://telegram-t/./src/components/ui/Portal.ts","webpack://telegram-t/./src/hooks/useCurrentOrPrev.ts","webpack://telegram-t/./src/hooks/useInfiniteScroll.ts","webpack://telegram-t/./src/hooks/useMedia.ts","webpack://telegram-t/./src/util/forceReflow.ts","webpack://telegram-t/./src/util/resetScroll.ts","webpack://telegram-t/./src/util/safePlay.ts"],"sourcesContent":["import { MouseEvent as ReactMouseEvent } from 'react';\nimport React, { FC, memo, useCallback } from '../../lib/teact/teact';\n\nimport {\n ApiChat, ApiMediaFormat, ApiPhoto, ApiUser, ApiUserStatus,\n} from '../../api/types';\n\nimport { IS_TEST } from '../../config';\nimport {\n getChatAvatarHash,\n getChatTitle,\n getUserColorKey,\n getUserFullName,\n isUserId,\n isChatWithRepliesBot,\n isDeletedUser,\n isUserOnline,\n} from '../../global/helpers';\nimport { getFirstLetters } from '../../util/textFormat';\nimport buildClassName, { createClassNameBuilder } from '../../util/buildClassName';\nimport renderText from './helpers/renderText';\nimport useMedia from '../../hooks/useMedia';\nimport useShowTransition from '../../hooks/useShowTransition';\nimport useLang from '../../hooks/useLang';\n\nimport './Avatar.scss';\n\nconst cn = createClassNameBuilder('Avatar');\ncn.img = cn('img');\ncn.icon = cn('icon');\n\ntype OwnProps = {\n className?: string;\n size?: 'micro' | 'tiny' | 'small' | 'medium' | 'large' | 'jumbo';\n chat?: ApiChat;\n user?: ApiUser;\n photo?: ApiPhoto;\n userStatus?: ApiUserStatus;\n text?: string;\n isSavedMessages?: boolean;\n lastSyncTime?: number;\n onClick?: (e: ReactMouseEvent, hasPhoto: boolean) => void;\n};\n\nconst Avatar: FC = ({\n className,\n size = 'large',\n chat,\n user,\n photo,\n userStatus,\n text,\n isSavedMessages,\n lastSyncTime,\n onClick,\n}) => {\n const isDeleted = user && isDeletedUser(user);\n const isReplies = user && isChatWithRepliesBot(user.id);\n let imageHash: string | undefined;\n\n if (!isSavedMessages && !isDeleted) {\n if (user) {\n imageHash = getChatAvatarHash(user);\n } else if (chat) {\n imageHash = getChatAvatarHash(chat);\n } else if (photo) {\n imageHash = `photo${photo.id}?size=m`;\n }\n }\n\n const blobUrl = useMedia(imageHash, false, ApiMediaFormat.BlobUrl, lastSyncTime);\n const hasBlobUrl = Boolean(blobUrl);\n const { transitionClassNames } = useShowTransition(hasBlobUrl, undefined, hasBlobUrl, 'slow');\n\n const lang = useLang();\n\n let content: string | undefined = '';\n\n if (isSavedMessages) {\n content = ;\n } else if (isDeleted) {\n content = ;\n } else if (isReplies) {\n content = ;\n } else if (blobUrl) {\n content = (\n \n );\n } else if (user) {\n const userFullName = getUserFullName(user);\n content = userFullName ? getFirstLetters(userFullName, 2) : undefined;\n } else if (chat) {\n const title = getChatTitle(lang, chat);\n content = title && getFirstLetters(title, isUserId(chat.id) ? 2 : 1);\n } else if (text) {\n content = getFirstLetters(text, 2);\n }\n\n const isOnline = !isSavedMessages && user && userStatus && isUserOnline(user, userStatus);\n const fullClassName = buildClassName(\n `Avatar size-${size}`,\n className,\n `color-bg-${getUserColorKey(user || chat)}`,\n isSavedMessages && 'saved-messages',\n isDeleted && 'deleted-account',\n isReplies && 'replies-bot-account',\n isOnline && 'online',\n onClick && 'interactive',\n (!isSavedMessages && !blobUrl) && 'no-photo',\n );\n\n const hasImage = Boolean(isSavedMessages || blobUrl);\n const handleClick = useCallback((e: ReactMouseEvent) => {\n if (onClick) {\n onClick(e, hasImage);\n }\n }, [onClick, hasImage]);\n\n const senderId = (user || chat) && (user || chat)!.id;\n\n return (\n
\n {typeof content === 'string' ? renderText(content, [size === 'jumbo' ? 'hq_emoji' : 'emoji']) : content}\n
\n );\n};\n\nexport default memo(Avatar);\n","import React, {\n FC, memo, useCallback, useRef,\n} from '../../lib/teact/teact';\n\nimport useLang from '../../hooks/useLang';\nimport { TextPart } from '../common/helpers/renderMessageText';\nimport useKeyboardListNavigation from '../../hooks/useKeyboardListNavigation';\n\nimport Modal from './Modal';\nimport Button from './Button';\n\ntype OwnProps = {\n isOpen: boolean;\n onClose: () => void;\n onCloseAnimationEnd?: () => void;\n title?: string;\n header?: FC;\n textParts?: TextPart[];\n text?: string;\n confirmLabel?: string;\n confirmHandler: () => void;\n confirmIsDestructive?: boolean;\n isButtonsInOneRow?: boolean;\n children?: React.ReactNode;\n};\n\nconst ConfirmDialog: FC = ({\n isOpen,\n onClose,\n onCloseAnimationEnd,\n title,\n header,\n text,\n textParts,\n confirmLabel = 'Confirm',\n confirmHandler,\n confirmIsDestructive,\n isButtonsInOneRow,\n children,\n}) => {\n const lang = useLang();\n\n // eslint-disable-next-line no-null/no-null\n const containerRef = useRef(null);\n\n const handleSelectWithEnter = useCallback((index: number) => {\n if (index === -1) confirmHandler();\n }, [confirmHandler]);\n\n const handleKeyDown = useKeyboardListNavigation(containerRef, isOpen, handleSelectWithEnter, '.Button');\n\n return (\n \n {text && text.split('\\\\n').map((textPart) => (\n

{textPart}

\n ))}\n {textParts || children}\n
\n \n {confirmLabel}\n \n \n
\n \n );\n};\n\nexport default memo(ConfirmDialog);\n","import { RefObject, UIEvent } from 'react';\nimport { LoadMoreDirection } from '../../types';\n\nimport React, {\n FC, useCallback, useEffect, useLayoutEffect, useMemo, useRef,\n} from '../../lib/teact/teact';\n\nimport { debounce } from '../../util/schedulers';\nimport resetScroll from '../../util/resetScroll';\nimport { IS_ANDROID } from '../../util/environment';\n\ntype OwnProps = {\n ref?: RefObject;\n className?: string;\n onLoadMore?: ({ direction }: { direction: LoadMoreDirection; noScroll?: boolean }) => void;\n onScroll?: (e: UIEvent) => void;\n onKeyDown?: (e: React.KeyboardEvent) => void;\n items?: any[];\n itemSelector?: string;\n preloadBackwards?: number;\n sensitiveArea?: number;\n withAbsolutePositioning?: boolean;\n maxHeight?: number;\n noScrollRestore?: boolean;\n noScrollRestoreOnTop?: boolean;\n noFastList?: boolean;\n cacheBuster?: any;\n children: React.ReactNode;\n};\n\nconst DEFAULT_LIST_SELECTOR = '.ListItem';\nconst DEFAULT_PRELOAD_BACKWARDS = 20;\nconst DEFAULT_SENSITIVE_AREA = 800;\n\nconst InfiniteScroll: FC = ({\n ref,\n className,\n onLoadMore,\n onScroll,\n onKeyDown,\n items,\n itemSelector = DEFAULT_LIST_SELECTOR,\n preloadBackwards = DEFAULT_PRELOAD_BACKWARDS,\n sensitiveArea = DEFAULT_SENSITIVE_AREA,\n withAbsolutePositioning,\n maxHeight,\n // Used to turn off restoring scroll position (e.g. for frequently re-ordered chat or user lists)\n noScrollRestore = false,\n noScrollRestoreOnTop = false,\n noFastList,\n // Used to re-query `listItemElements` if rendering is delayed by transition\n cacheBuster,\n children,\n}: OwnProps) => {\n // eslint-disable-next-line no-null/no-null\n let containerRef = useRef(null);\n if (ref) {\n containerRef = ref;\n }\n\n const stateRef = useRef<{\n listItemElements?: NodeListOf;\n isScrollTopJustUpdated?: boolean;\n currentAnchor?: HTMLDivElement | undefined;\n currentAnchorTop?: number;\n }>({});\n\n const [loadMoreBackwards, loadMoreForwards] = useMemo(() => {\n if (!onLoadMore) {\n return [];\n }\n\n return [\n debounce((noScroll = false) => {\n onLoadMore({ direction: LoadMoreDirection.Backwards, noScroll });\n }, 1000, true, false),\n debounce(() => {\n onLoadMore({ direction: LoadMoreDirection.Forwards });\n }, 1000, true, false),\n ];\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [onLoadMore, items]);\n\n // Initial preload\n useEffect(() => {\n if (!loadMoreBackwards) {\n return;\n }\n\n if (preloadBackwards > 0 && (!items || items.length < preloadBackwards)) {\n loadMoreBackwards(true);\n return;\n }\n\n const { scrollHeight, clientHeight } = containerRef.current!;\n if (clientHeight && scrollHeight <= clientHeight) {\n loadMoreBackwards();\n }\n }, [items, loadMoreBackwards, preloadBackwards]);\n\n // Restore `scrollTop` after adding items\n useLayoutEffect(() => {\n const container = containerRef.current!;\n const state = stateRef.current;\n\n state.listItemElements = container.querySelectorAll(itemSelector);\n\n let newScrollTop;\n\n if (state.currentAnchor && Array.from(state.listItemElements).includes(state.currentAnchor)) {\n const { scrollTop } = container;\n const newAnchorTop = state.currentAnchor.getBoundingClientRect().top;\n newScrollTop = scrollTop + (newAnchorTop - state.currentAnchorTop!);\n } else {\n const nextAnchor = state.listItemElements[0];\n if (nextAnchor) {\n state.currentAnchor = nextAnchor;\n state.currentAnchorTop = nextAnchor.getBoundingClientRect().top;\n }\n }\n\n if (withAbsolutePositioning || noScrollRestore) {\n return;\n }\n\n if (noScrollRestoreOnTop && container.scrollTop === 0) {\n return;\n }\n\n resetScroll(container, newScrollTop);\n\n state.isScrollTopJustUpdated = true;\n }, [items, itemSelector, noScrollRestore, noScrollRestoreOnTop, cacheBuster, withAbsolutePositioning]);\n\n const handleScroll = useCallback((e: UIEvent) => {\n if (loadMoreForwards && loadMoreBackwards) {\n const {\n isScrollTopJustUpdated, currentAnchor, currentAnchorTop,\n } = stateRef.current;\n const listItemElements = stateRef.current.listItemElements!;\n\n if (isScrollTopJustUpdated) {\n stateRef.current.isScrollTopJustUpdated = false;\n return;\n }\n\n const listLength = listItemElements.length;\n const container = containerRef.current!;\n const { scrollTop, scrollHeight, offsetHeight } = container;\n const top = listLength ? listItemElements[0].offsetTop : 0;\n const isNearTop = scrollTop <= top + sensitiveArea;\n const bottom = listLength\n ? listItemElements[listLength - 1].offsetTop + listItemElements[listLength - 1].offsetHeight\n : scrollHeight;\n const isNearBottom = bottom - (scrollTop + offsetHeight) <= sensitiveArea;\n let isUpdated = false;\n\n if (isNearTop) {\n const nextAnchor = listItemElements[0];\n if (nextAnchor) {\n const nextAnchorTop = nextAnchor.getBoundingClientRect().top;\n const newAnchorTop = currentAnchor?.offsetParent && currentAnchor !== nextAnchor\n ? currentAnchor.getBoundingClientRect().top\n : nextAnchorTop;\n const isMovingUp = (\n currentAnchor && currentAnchorTop !== undefined && newAnchorTop > currentAnchorTop\n );\n\n if (isMovingUp) {\n stateRef.current.currentAnchor = nextAnchor;\n stateRef.current.currentAnchorTop = nextAnchorTop;\n isUpdated = true;\n loadMoreForwards();\n }\n }\n }\n\n if (isNearBottom) {\n const nextAnchor = listItemElements[listLength - 1];\n if (nextAnchor) {\n const nextAnchorTop = nextAnchor.getBoundingClientRect().top;\n const newAnchorTop = currentAnchor?.offsetParent && currentAnchor !== nextAnchor\n ? currentAnchor.getBoundingClientRect().top\n : nextAnchorTop;\n const isMovingDown = (\n currentAnchor && currentAnchorTop !== undefined && newAnchorTop < currentAnchorTop\n );\n\n if (isMovingDown) {\n stateRef.current.currentAnchor = nextAnchor;\n stateRef.current.currentAnchorTop = nextAnchorTop;\n isUpdated = true;\n loadMoreBackwards();\n }\n }\n }\n\n if (!isUpdated) {\n if (currentAnchor?.offsetParent) {\n stateRef.current.currentAnchorTop = currentAnchor.getBoundingClientRect().top;\n } else {\n const nextAnchor = listItemElements[0];\n\n if (nextAnchor) {\n stateRef.current.currentAnchor = nextAnchor;\n stateRef.current.currentAnchorTop = nextAnchor.getBoundingClientRect().top;\n }\n }\n }\n }\n\n if (onScroll) {\n onScroll(e);\n }\n }, [loadMoreBackwards, loadMoreForwards, onScroll, sensitiveArea]);\n\n return (\n \n {withAbsolutePositioning && items?.length ? (\n \n {children}\n \n ) : children}\n \n );\n};\n\nexport default InfiniteScroll;\n","import { RefObject } from 'react';\nimport React, {\n FC, useEffect, useRef,\n} from '../../lib/teact/teact';\n\nimport { TextPart } from '../common/helpers/renderMessageText';\n\nimport captureKeyboardListeners from '../../util/captureKeyboardListeners';\nimport trapFocus from '../../util/trapFocus';\nimport buildClassName from '../../util/buildClassName';\nimport { dispatchHeavyAnimationEvent } from '../../hooks/useHeavyAnimationCheck';\nimport useShowTransition from '../../hooks/useShowTransition';\nimport useEffectWithPrevDeps from '../../hooks/useEffectWithPrevDeps';\nimport useLang from '../../hooks/useLang';\nimport useHistoryBack from '../../hooks/useHistoryBack';\n\nimport Button from './Button';\nimport Portal from './Portal';\n\nimport './Modal.scss';\n\nconst ANIMATION_DURATION = 200;\n\ntype OwnProps = {\n title?: string | TextPart[];\n className?: string;\n isOpen?: boolean;\n header?: any;\n hasCloseButton?: boolean;\n noBackdrop?: boolean;\n children: React.ReactNode;\n onClose: () => void;\n onCloseAnimationEnd?: () => void;\n onEnter?: () => void;\n dialogRef?: RefObject;\n};\n\ntype StateProps = {\n shouldSkipHistoryAnimations?: boolean;\n};\n\nconst Modal: FC = ({\n dialogRef,\n title,\n className,\n isOpen,\n header,\n hasCloseButton,\n noBackdrop,\n children,\n onClose,\n onCloseAnimationEnd,\n onEnter,\n shouldSkipHistoryAnimations,\n}) => {\n const {\n shouldRender,\n transitionClassNames,\n } = useShowTransition(\n isOpen, onCloseAnimationEnd, shouldSkipHistoryAnimations, undefined, shouldSkipHistoryAnimations,\n );\n // eslint-disable-next-line no-null/no-null\n const modalRef = useRef(null);\n\n useEffect(() => (isOpen\n ? captureKeyboardListeners({ onEsc: onClose, onEnter })\n : undefined), [isOpen, onClose, onEnter]);\n useEffect(() => (isOpen && modalRef.current ? trapFocus(modalRef.current) : undefined), [isOpen]);\n\n const { forceClose } = useHistoryBack(isOpen, onClose);\n\n // For modals that are closed by unmounting without changing `isOpen` to `false`\n useEffect(() => {\n return () => {\n if (isOpen) {\n forceClose();\n }\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n useEffectWithPrevDeps(([prevIsOpen]) => {\n document.body.classList.toggle('has-open-dialog', isOpen);\n if (isOpen || (!isOpen && prevIsOpen !== undefined)) {\n dispatchHeavyAnimationEvent(ANIMATION_DURATION);\n }\n\n return () => {\n document.body.classList.remove('has-open-dialog');\n };\n }, [isOpen]);\n\n const lang = useLang();\n\n if (!shouldRender) {\n return undefined;\n }\n\n function renderHeader() {\n if (header) {\n return header;\n }\n\n if (!title) {\n return undefined;\n }\n\n return (\n
\n {hasCloseButton && (\n \n \n \n )}\n
{title}
\n
\n );\n }\n\n const fullClassName = buildClassName(\n 'Modal',\n className,\n transitionClassNames,\n noBackdrop && 'transparent-backdrop',\n );\n\n return (\n \n \n
\n
\n
\n {renderHeader()}\n
\n {children}\n
\n
\n
\n
\n
\n );\n};\n\nexport default Modal;\n","export default function trapFocus(element: HTMLElement) {\n function handleKeyDown(e: KeyboardEvent) {\n if (e.key !== 'Tab') {\n return;\n }\n\n e.preventDefault();\n e.stopPropagation();\n\n const focusableElements = Array.from(\n element.querySelectorAll('button, [href], input, select, textarea, [tabindex]:not([tabindex=\"-1\"])'),\n ) as HTMLElement[];\n if (!focusableElements.length) {\n return;\n }\n\n const currentFocusedIndex = focusableElements.findIndex((em) => em.isSameNode(document.activeElement));\n let newFocusedIndex = 0;\n if (currentFocusedIndex >= 0) {\n if (e.shiftKey) {\n newFocusedIndex = currentFocusedIndex > 0\n ? currentFocusedIndex - 1\n : focusableElements.length - 1;\n } else {\n newFocusedIndex = currentFocusedIndex < focusableElements.length - 1\n ? currentFocusedIndex + 1\n : 0;\n }\n }\n\n focusableElements[newFocusedIndex].focus();\n }\n\n document.addEventListener('keydown', handleKeyDown, false);\n\n return () => {\n document.removeEventListener('keydown', handleKeyDown, false);\n };\n}\n","import {\n FC, useRef, useLayoutEffect, VirtualElement,\n} from '../../lib/teact/teact';\nimport TeactDOM from '../../lib/teact/teact-dom';\n\ntype OwnProps = {\n containerId?: string;\n className?: string;\n children: React.ReactNode;\n};\n\nconst Portal: FC = ({ containerId, className, children }) => {\n const elementRef = useRef();\n if (!elementRef.current) {\n elementRef.current = document.createElement('div');\n }\n\n useLayoutEffect(() => {\n const container = document.querySelector(containerId || '#portals');\n if (!container) {\n return undefined;\n }\n\n const element = elementRef.current!;\n if (className) {\n element.classList.add(className);\n }\n\n container.appendChild(element);\n\n return () => {\n TeactDOM.render(undefined, element);\n container.removeChild(element);\n };\n }, [className, containerId]);\n\n return TeactDOM.render(children as VirtualElement, elementRef.current);\n};\n\nexport default Portal;\n","import usePrevious from './usePrevious';\n\nexport default function useCurrentOrPrev(\n current: T, shouldSkipUndefined = false, shouldForceCurrent = false,\n): T | undefined {\n const prev = usePrevious(current, shouldSkipUndefined);\n\n // eslint-disable-next-line no-null/no-null\n return shouldForceCurrent || (current !== null && current !== undefined) ? current : prev;\n}\n","import { useCallback, useRef } from '../lib/teact/teact';\nimport { LoadMoreDirection } from '../types';\n\nimport { areSortedArraysEqual } from '../util/iteratees';\nimport useForceUpdate from './useForceUpdate';\nimport usePrevious from './usePrevious';\n\ntype GetMore = (args: { direction: LoadMoreDirection }) => void;\ntype LoadMoreBackwards = (args: { offsetId?: string | number }) => void;\n\nconst DEFAULT_LIST_SLICE = 30;\n\nconst useInfiniteScroll = (\n loadMoreBackwards?: LoadMoreBackwards,\n listIds?: ListId[],\n isDisabled = false,\n listSlice = DEFAULT_LIST_SLICE,\n): [ListId[]?, GetMore?] => {\n const lastParamsRef = useRef<{\n direction?: LoadMoreDirection;\n offsetId?: ListId;\n }>();\n\n const viewportIdsRef = useRef((() => {\n // Only run once to initialize\n if (!listIds || lastParamsRef.current) {\n return undefined;\n }\n\n const { newViewportIds } = getViewportSlice(listIds, LoadMoreDirection.Forwards, listSlice, listIds[0]);\n return newViewportIds;\n })());\n\n const forceUpdate = useForceUpdate();\n\n if (isDisabled) {\n lastParamsRef.current = {};\n }\n\n const prevListIds = usePrevious(listIds);\n const prevIsDisabled = usePrevious(isDisabled);\n if (listIds && !isDisabled && (listIds !== prevListIds || isDisabled !== prevIsDisabled)) {\n const { offsetId = listIds[0], direction = LoadMoreDirection.Forwards } = lastParamsRef.current || {};\n const { newViewportIds } = getViewportSlice(listIds, direction, listSlice, offsetId);\n\n if (!viewportIdsRef.current || !areSortedArraysEqual(viewportIdsRef.current, newViewportIds)) {\n viewportIdsRef.current = newViewportIds;\n }\n }\n\n const getMore: GetMore = useCallback(({\n direction,\n noScroll,\n }: { direction: LoadMoreDirection; noScroll?: boolean }) => {\n const viewportIds = viewportIdsRef.current;\n\n const offsetId = viewportIds\n ? direction === LoadMoreDirection.Backwards ? viewportIds[viewportIds.length - 1] : viewportIds[0]\n : undefined;\n\n if (!listIds) {\n if (loadMoreBackwards) {\n loadMoreBackwards({ offsetId });\n }\n\n return;\n }\n\n if (!noScroll) {\n lastParamsRef.current = { ...lastParamsRef.current, direction, offsetId };\n }\n\n const {\n newViewportIds, areSomeLocal, areAllLocal,\n } = getViewportSlice(listIds, direction, listSlice, offsetId);\n\n if (areSomeLocal && !(viewportIds && areSortedArraysEqual(viewportIds, newViewportIds))) {\n viewportIdsRef.current = newViewportIds;\n forceUpdate();\n }\n\n if (!areAllLocal && loadMoreBackwards) {\n loadMoreBackwards({ offsetId });\n }\n }, [listIds, listSlice, loadMoreBackwards, forceUpdate]);\n\n return isDisabled ? [listIds] : [viewportIdsRef.current, getMore];\n};\n\nfunction getViewportSlice(\n sourceIds: ListId[],\n direction: LoadMoreDirection,\n listSlice: number,\n offsetId?: ListId,\n) {\n const { length } = sourceIds;\n const index = offsetId ? sourceIds.indexOf(offsetId) : 0;\n const isForwards = direction === LoadMoreDirection.Forwards;\n const indexForDirection = isForwards ? index : (index + 1) || length;\n const from = Math.max(0, indexForDirection - listSlice);\n const to = indexForDirection + listSlice - 1;\n const newViewportIds = sourceIds.slice(Math.max(0, from), to + 1);\n\n let areSomeLocal;\n let areAllLocal;\n switch (direction) {\n case LoadMoreDirection.Forwards:\n areSomeLocal = indexForDirection > 0;\n areAllLocal = from >= 0;\n break;\n case LoadMoreDirection.Backwards:\n areSomeLocal = indexForDirection < length;\n areAllLocal = to <= length - 1;\n break;\n }\n\n return { newViewportIds, areSomeLocal, areAllLocal };\n}\n\nexport default useInfiniteScroll;\n","import { useEffect } from '../lib/teact/teact';\n\nimport { ApiMediaFormat } from '../api/types';\n\nimport * as mediaLoader from '../util/mediaLoader';\nimport useForceUpdate from './useForceUpdate';\n\nconst useMedia = (\n mediaHash: string | false | undefined,\n noLoad = false,\n mediaFormat = ApiMediaFormat.BlobUrl,\n cacheBuster?: number,\n delay?: number | false,\n) => {\n const mediaData = mediaHash ? mediaLoader.getFromMemory(mediaHash) : undefined;\n const forceUpdate = useForceUpdate();\n\n useEffect(() => {\n if (!noLoad && mediaHash && !mediaData) {\n const startedAt = Date.now();\n\n mediaLoader.fetch(mediaHash, mediaFormat).then(() => {\n const spentTime = Date.now() - startedAt;\n if (!delay || spentTime >= delay) {\n forceUpdate();\n } else {\n setTimeout(forceUpdate, delay - spentTime);\n }\n });\n }\n }, [noLoad, mediaHash, mediaData, mediaFormat, cacheBuster, forceUpdate, delay]);\n\n return mediaData;\n};\n\nexport default useMedia;\n","// Used before applying CSS transition\nexport default function forceReflow(element: HTMLElement) {\n // eslint-disable-next-line @typescript-eslint/no-unused-expressions\n element.offsetWidth;\n}\n","import { IS_IOS } from './environment';\nimport forceReflow from './forceReflow';\n\nconst resetScroll = (container: HTMLDivElement, scrollTop?: number) => {\n if (IS_IOS) {\n container.style.overflow = 'hidden';\n }\n\n if (scrollTop !== undefined) {\n container.scrollTop = scrollTop;\n }\n\n if (IS_IOS) {\n container.style.overflow = '';\n }\n};\n\n// Workaround for https://bugs.chromium.org/p/chromium/issues/detail?id=1264266\nexport function patchChromiumScroll(element: HTMLElement) {\n element.style.display = 'none';\n forceReflow(element);\n element.style.display = '';\n}\n\nexport default resetScroll;\n","import { DEBUG } from '../config';\n\nconst safePlay = (mediaEl: HTMLMediaElement) => {\n mediaEl.play().catch((err) => {\n if (DEBUG) {\n // eslint-disable-next-line no-console\n console.warn(err, mediaEl);\n }\n });\n};\n\nexport default safePlay;\n"],"names":["cn","createClassNameBuilder","img","icon","memo","className","size","chat","user","photo","userStatus","text","isSavedMessages","lastSyncTime","onClick","isDeleted","isDeletedUser","isReplies","isChatWithRepliesBot","id","imageHash","getChatAvatarHash","blobUrl","useMedia","ApiMediaFormat","hasBlobUrl","Boolean","transitionClassNames","useShowTransition","undefined","lang","useLang","content","buildClassName","src","alt","decoding","userFullName","getUserFullName","getFirstLetters","title","getChatTitle","isUserId","isOnline","isUserOnline","fullClassName","getUserColorKey","hasImage","handleClick","useCallback","e","senderId","IS_TEST","renderText","isOpen","onClose","onCloseAnimationEnd","header","textParts","confirmLabel","confirmHandler","confirmIsDestructive","isButtonsInOneRow","children","containerRef","useRef","handleSelectWithEnter","index","handleKeyDown","useKeyboardListNavigation","split","map","textPart","ref","onKeyDown","isText","color","DEFAULT_LIST_SELECTOR","DEFAULT_PRELOAD_BACKWARDS","DEFAULT_SENSITIVE_AREA","onLoadMore","onScroll","items","itemSelector","preloadBackwards","sensitiveArea","withAbsolutePositioning","maxHeight","noScrollRestore","noScrollRestoreOnTop","noFastList","cacheBuster","stateRef","loadMoreBackwards","loadMoreForwards","useMemo","debounce","noScroll","direction","LoadMoreDirection","useEffect","length","scrollHeight","clientHeight","current","useLayoutEffect","container","state","newScrollTop","listItemElements","querySelectorAll","currentAnchor","Array","from","includes","scrollTop","getBoundingClientRect","top","currentAnchorTop","nextAnchor","resetScroll","isScrollTopJustUpdated","handleScroll","listLength","offsetHeight","isNearTop","offsetTop","isNearBottom","isUpdated","nextAnchorTop","newAnchorTop","offsetParent","teactFastList","style","IS_ANDROID","dialogRef","hasCloseButton","noBackdrop","onEnter","shouldSkipHistoryAnimations","shouldRender","modalRef","captureKeyboardListeners","onEsc","element","key","preventDefault","stopPropagation","focusableElements","currentFocusedIndex","findIndex","em","isSameNode","document","activeElement","newFocusedIndex","shiftKey","focus","addEventListener","removeEventListener","trapFocus","forceClose","useHistoryBack","useEffectWithPrevDeps","prevIsOpen","body","classList","toggle","dispatchHeavyAnimationEvent","remove","Portal","tabIndex","role","Button","round","ariaLabel","containerId","elementRef","createElement","querySelector","add","appendChild","TeactDOM","removeChild","useCurrentOrPrev","shouldSkipUndefined","shouldForceCurrent","prev","usePrevious","getViewportSlice","sourceIds","listSlice","offsetId","indexOf","indexForDirection","Math","max","to","newViewportIds","slice","areSomeLocal","areAllLocal","listIds","isDisabled","lastParamsRef","viewportIdsRef","forceUpdate","useForceUpdate","prevListIds","prevIsDisabled","areSortedArraysEqual","getMore","viewportIds","mediaHash","noLoad","mediaFormat","delay","mediaData","mediaLoader","startedAt","Date","now","then","spentTime","setTimeout","forceReflow","offsetWidth","patchChromiumScroll","display","IS_IOS","overflow","mediaEl","play","catch","err","DEBUG","console","warn"],"sourceRoot":""} \ No newline at end of file diff --git a/dist/616.62b1588aeeff3499beea.css.map b/dist/616.62b1588aeeff3499beea.css.map deleted file mode 100644 index ce23cf174..000000000 --- a/dist/616.62b1588aeeff3499beea.css.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"616.62b1588aeeff3499beea.css","mappings":"AAAA,0BACE,kBACA,MACA,OACA,WAEA,mDACA,UAEA,qCACE,4BACA,UAGF,sCACE,aAIJ,yBACE,iBACA,cACA,aACA,mBACA,qBACA,iBACA,+BACA,2CAEA,qCACE,eAGF,kCACE,wBAGF,qCACE,OACA,gCACA,mBACA,gBACA,wBACA,6BACA,mBAGF,yBACE,qCACE,6BAIJ,qCACE,WAGA,YAEA,yCACE,aACA,mBACA,W;AC5DN,gBACE,kBAEA,oCACE,kBAEA,2HAGE,eACA,eACA,sBACA,6CACA,0BACA,oBAGF,uFAEE,kBACA,OACA,WAGF,4CACE,eAGF,2CACE,aAGF,+CACE,yBAEA,uDACE,qEAGF,sDACE,qEAIJ,iDACE,gBAEA,iHAEE,gBAKN,gCACE,iBACA,cACA,iBACA,6BACA,qBACA,mBACA,WACA,kBACA,mBACA,gBACA,kBACA,cAGF,kDACE,gBACA,UACA,kCAGF,4CACE,sBAGF,0CACE,cACA,kBAGF,8BACE,gBACA,yCAEA,gBClFF,+BD8EA,8BC7EE,mBAGA,mBDoFA,wIACE,2B;AEjGN,eACE,kBACA,WACA,YACA,2BAEA,4DAEA,sCACE,0BACA,UAEA,wBAEA,+CACE,UAIJ,wBACE,wBAEA,yBAHF,wBAKI,sCACA,6BAKF,gFAEE,kBAIA,0DACE,iCAGF,gDACE,0CAKF,0CACE,iCAGF,oDACE,0C;ACnDR,iBACE,YACA,kBACA,aACA,sBACA,gBACA,UAEA,6BACE,OACA,gBAGF,8BACE,YACA,aACA,sBACA,gBAEA,gDACE,gBAEA,6BAEA,2DACE,SAIJ,uCACE,2BACA,sBACA,mBACA,gBACA,UAGF,mCACE,cACA,qBACA,sBAEA,wCACE,mBACA,oBAIJ,0CACE,OACA,gBAIJ,+FAGE,YACA,gBAGF,6BACE,kBACA,YACA,UACA,WACA,c;AClEJ,SACE,YAGF,aACE,4BACA,oCACA,aACA,mBACA,cACA,yCAEA,gBACE,gBACA,kBACA,gBACA,qBACA,kBAGF,0BACE,oBACA,+BAEA,yBAJF,0BAKI,6BAIJ,yBAzBF,aA0BI,eAGF,6BACE,aACA,cAEA,2CACE,mB;ACtCN,aACE,aACA,iBACA,oBACA,uBAEA,oCACE,2BAGF,qBACE,cACA,eAGF,4BACE,6CACA,2DACA,0CACA,2CAIA,oCACE,WACA,YAEA,sCACE,mBACA,sBAIJ,8BACE,kBACA,oBACA,sBAEA,wCACE,oBAIJ,+EAEE,UACA,mBACA,uEAGF,yLAIE,UACA,qBAIJ,4BACE,kBACA,iBAEA,kDACE,kBACA,2BACA,SACA,YACA,WACA,eACA,kBAGF,gHAEE,mBAGF,2CACE,UACA,kBAEA,kBACA,mCACA,aACA,2BACA,8DACA,WACA,eACA,oBACA,eACA,iDAEA,wDACE,gBACA,0EACE,gBAKN,yKAGE,UACA,mBAKF,sCACE,6CAGF,qDACE,iCACA,iBACA,iBACA,iBACA,sBACA,uBACA,kCAIJ,qBACE,aACA,uBACA,sBACA,cACA,gBACA,kBACA,gBACA,eACA,kDAEA,2BACE,wDAGF,iDAfF,qBAgBI,iBAGF,yCACE,cACA,gBACA,6BACA,iBACA,mBACA,gBACA,uBAEA,qDACE,8BACA,qBAIJ,+BACE,8BACA,kCACA,qBACA,mBACA,gBACA,uBACA,mBAEA,2CACE,8BACA,qB;AC1KR,kBACE,kBACA,SACA,OACA,QACA,gBACA,gBACA,+CACA,aACA,mBACA,8BACA,mBACA,qCACA,mCACA,WACA,eAEA,0BACE,WACA,cACA,kBACA,eACA,OACA,QACA,eACA,uDAGF,4BACE,aAGF,yBACE,oCACE,2BAIJ,wBACE,aACA,sBAEA,+BACE,kBACA,wBAGF,sCACE,iBACA,kCAIJ,2BACE,aACA,mBACA,mBAEA,mCACE,sBAEA,+CACE,WACA,YAGF,qDACE,cACA,eACA,6CAKN,wBACE,cACA,qBACA,gBACA,kBACA,WAIJ,0BACE,wDACE,8C;ACrFJ,iBACE,kBACA,OACA,QACA,SAEA,aACA,mBACA,iBACA,mCACA,qCACA,yGACA,+BACA,+DAGE,0DACE,aAIJ,0BArBF,iBAsBI,+BACA,+DAEA,yCACE,sDAIJ,0CACE,mBACA,aACA,mB;AC2CJ,cACE,aACA,mBACA,WACA,+CACA,mCACA,kBACA,+BACA,kBACA,qBACA,mDACA,uDAEA,yBAbF,cAcI,kBAEA,kDACA,qDAGF,0BACE,WAGA,YAEA,8BACE,aACA,mBACA,WAIJ,2BACE,oBACA,mBACA,kBAEA,yBALF,2BAMI,eAGF,yCACE,kBACA,eACA,kBACA,sBACA,iBACA,oBACA,gBACA,kBAEA,kBACA,aACA,cAEA,6BACA,WACA,oBAEA,gDACE,gCAKN,iCACE,YACA,gBAGF,kEACE,2BAGF,4BACE,aACA,mBACA,yBACA,iBACA,cAGE,qLAGE,2BAIJ,iDACE,2CACE,+BACA,6CAEA,mEACE,mEAKN,0BA1BF,4BA2BI,+BACA,6CAEA,oDACE,mEPpLN,oIO0LI,oBAIJ,iDACE,8GAEE,UAEA,8JACE,WAnMN,4HAEE,kBACA,SACA,OACA,QACA,gBACA,uDAEA,aACA,2BACA,oBACA,uBACA,mDACA,oDACA,mCAEA,4IACE,WACA,cACA,kBACA,eACA,OACA,QACA,eACA,uDAGF,sKACE,gBACA,sBAIJ,sDACE,mBACA,aACA,qBAEA,8DACE,gBACA,YAGF,8DACE,sBAGF,oEACE,iBAIJ,8DACE,YACA,cACA,iBAEA,sEACE,YACA,eAGF,4EACE,eAIJ,iFACE,aAsIA,0BACE,iEACE,uDAKN,oHAEE,mDAEA,kKACE,eAIJ,iBACE,gBACA,mBACA,qBACA,gBACA,SACA,gBACA,uBACA,uBAEA,4DAEE,oBACA,gBAGF,yBAhBF,iBAiBI,cACA,gBACA,wBAGF,0BACE,yCACE,kDAKN,wBACE,eACA,aACA,mBAEA,8BACE,aACA,sBACA,uBACA,YACA,gBAGF,+BACE,aACA,mBAEA,6CACE,cACA,eACA,mBACA,oBAIJ,uEAEE,eACA,uBAEA,0BACE,uHACE,kDAKN,qCACE,uBACA,gBACA,uBAEA,0BACE,6DACE,kDAMR,sBACE,qBAEA,wBACA,yBACA,oBAGF,mDAEE,kBACA,qBACA,SACA,kCACA,gBACA,mBACA,uBACA,qBAEA,uEACE,oBAGF,iEACE,2BAGF,2EACE,iBAIJ,8BACE,aACA,cAGF,2CACE,aACA,mBACA,iBACA,eACA,2BACA,mCAGE,oFACE,aAIJ,0BAdF,2CAeI,+BACA,+DAEA,mEACE,mEAIJ,gEACE,gBAGF,mDACE,cAGF,sDACE,kBACA,OACA,QACA,SACA,mCACA,oCACA,uDACA,+BACA,+DAEA,8DACE,WACA,cACA,kBACA,eACA,OACA,QACA,eACA,uDAGF,2EACE,aACA,gBACA,OAEA,yFACE,eAIJ,0BAhCF,sDAiCI,+BACA,+DAEA,8EACE,qDAMR,mCACE,aACA,cACA,oBACA,uBACA,eACA,qBACA,kDACA,kBACA,gBACA,eAEA,yCACE,wDAGF,0DACE,kBACA,eACA,iBACA,cACA,kBACA,gBAEA,2FACE,eACA,cACA,uBACA,gCAGF,yFACE,8CACA,kBACA,sBACA,sCAGF,sFACE,kBACA,OACA,MACA,cACA,gCACA,uBACA,sBACA,sCAIJ,iDACE,gBACA,4BACA,mBACA,gBAEA,iDANF,iDAOI,iBAGF,wDACE,gBACA,kBACA,iBACA,YACA,2BACA,sBACA,gBACA,mBAEA,oEACE,mBAIJ,mDACE,kBACA,qBACA,gBACA,mBACA,gBACA,uBACA,SAEA,+DACE,mBAKN,gDACE,WACA,YAGF,uCACE,cACA,eACA,iBACA,qBACA,4BACA,mBACA,cAEA,qDACE,gBAKN,6BACE,cACA,iBACA,aACA,mBACA,yBAGE,8DACE,2BACA,UAIJ,2CACE,kBACA,iBAGF,oCACE,kBACA,eACA,YACA,gCACA,oBACA,WACA,iBACA,iBACA,gBACA,kBACA,cACA,QACA,MAMF,wFACE,mBAEA,kGACE,qBAKN,yBAtjBA,sEAEE,kBACA,SACA,OACA,QACA,gBACA,uDAEA,aACA,2BACA,oBACA,uBACA,mDACA,oDACA,mCAEA,sFACE,WACA,cACA,kBACA,eACA,OACA,QACA,eACA,uDAGF,gHACE,gBACA,sBAIJ,2BACE,mBACA,aACA,qBAEA,mCACE,gBACA,YAGF,mCACE,sBAGF,yCACE,iBAIJ,mCACE,YACA,cACA,iBAEA,2CACE,YACA,eAGF,iDACE,eAIJ,sDACE,cAsfJ,mBACE,KACE,UAEF,GACE,W;ACnkBJ,iBACE,aACA,mBACA,yDACA,qBACA,2BACA,0CACA,kDACA,kBACA,gBACA,eACA,cAGE,0DACE,aAIJ,+BACE,gBACA,cACA,SACA,yCACA,iDAEA,uCACE,aACA,YACA,eAGF,+CACE,0BAGF,wCACE,cAIJ,yBACE,WACA,cACA,kBACA,aACA,gBACA,cACA,UACA,+BACA,kBAGF,uBACE,oCAGF,wBACE,qCAGF,gCACE,yDAGF,+BACE,gBACA,0BACA,aACA,8BAEA,8CACE,mBACA,gBACA,uBACA,sBACA,OACA,cAGF,iCACE,mBACA,gBACA,uBACA,gBACA,gBACA,OAEA,wCACE,aACA,aAIJ,sCACE,4DACA,6DACA,sCAIJ,0CACE,0BACA,YAGF,iCACE,WACA,YACA,iBACA,qBACA,mBACA,cAEA,uCACE,mBAIJ,8BACE,8BACA,gCACA,aACA,+BACA,uBACA,WACA,qCACA,sDAEA,sCACE,gBAGF,8CACE,oBAGF,4CACE,4BAGF,6CACE,gBACA,0B;AC/IN,uBACE,kBACA,aACA,mBACA,uBAEA,oCAEE,wBAEA,eAGF,wCACE,eACA,cACA,eACA,oBAEA,+CACE,YACA,aAGF,mDACE,qBAGF,gDACE,qBAKF,gDACE,eACA,gBAEA,uDACE,eACA,gBAIF,uDACE,kB;AC7CR,aACE,kBACA,eACA,SACA,QACA,aACA,mBACA,gCACA,sBACA,iBACA,WACA,eACA,eACA,0CAEA,oCACE,WACA,YACA,oBAGF,uFAGE,iBACA,mBAGF,2BACE,sBAIA,uCACE,oBAIJ,4BACE,6BAGF,gCACE,gBACA,uBACA,qBAGF,gCACE,oBACA,qBACA,mBACA,kBACA,eAGF,mCACE,6CACA,gBAGF,mEAEE,0BACA,0BACA,sBACA,sBACA,UACA,cACA,aACA,UACA,gBACA,6BAEA,qHACE,uBAIJ,qFAEE,sBACA,YACA,6BAGF,+GAEE,cAGF,4CACE,gBACA,eAGF,yBACE,QAGF,gDACE,oCAGF,oCACE,uBACA,oBACA,sBAEA,iDACE,8BAIJ,6DACE,gBAGF,kEACE,iBAIA,qCACE,SAEF,yCACE,QAMJ,6DACE,WACA,cACA,cAGF,6DACE,YAGF,6DACE,YAGF,6DACE,Y;ACnJF,wBACE,eAGF,kBACE,oB;ACNJ,SACE,aACA,mBACA,eAEA,qBACE,eAGF,iBACE,sBAGF,uBACE,cACA,eACA,mBACA,gBAEA,qCACE,eACA,iBACA,qBACA,gBAGF,sCACE,iBACA,6B;AC5BN,YACE,aACA,qBACA,qBAEA,uBACE,gBAGF,8BACE,sBAGF,+BACE,kBACA,mBACA,cACA,wBACA,cACA,gBACA,kBACA,iBAEA,2CACE,oBACA,uBACA,iBAIJ,gCACE,kBACA,QACA,YACA,WACA,YACA,+BACA,8BACA,oBACA,iBACA,kBAEA,sCACE,8BAGF,gDACE,gBAGF,wCACE,UACA,qCACA,qBACA,uBACA,6BAIJ,+BACE,YACA,mBAGF,gCACE,kBAGF,8BACE,kBACA,QACA,cACA,gBACA,sBACA,iBACA,+BAEA,qBACA,yBACA,sBAGF,uBACE,WACA,YACA,kBACA,WACA,YACA,sDACA,oBACA,wBAGF,4BACE,iBACA,qBACA,2BACA,UAIA,qCACE,8BAGF,mCACE,0BAKN,iCACE,GACE,UAEF,KACE,W;ACpHJ,MACE,gBACA,mBAEA,yBAJF,MAKI,gBAGF,qBACE,gBACA,oBACA,iBACA,sBAGF,0CAEE,6BACA,kBAGF,iBACE,oBACA,aACA,mBACA,oBAGF,yBACE,2BACA,kBAGF,oBACE,mBACA,oBAGF,6BAEE,qBAEA,mDACE,qBAGF,+CACE,qBACA,mBAKA,gJACE,aACA,yCAEA,gMACE,4CAGF,oMACE,qCAIJ,4IACE,cACA,qCAMF,wMACE,iCAIJ,+CACE,aAMA,sCACE,aACA,sCAEA,mDACE,qCAMR,mBAEE,0CAEA,+BACE,2CAGF,gCAEE,2CACA,4CACE,2CAKN,0BACE,oBACA,mBACA,2BACA,oBACA,mBACA,gBAEA,kCACE,yCACA,eACA,uBAEA,+CACE,6CAGF,oDACE,iBAKN,sBACE,iBACA,iBACA,qBAEA,+BACE,yBAEA,wDACE,0BAIJ,0BACE,oBAIJ,+BACE,4BACA,iBACA,eACA,qBACA,2CAGF,sBACE,kCACA,yCACE,2BAIJ,wCAEE,mBACA,qBAGF,cACE,oBACA,eAEA,2BACE,0BACA,mDAIJ,cACE,sB;AC3LJ,SACE,kBACA,sBACA,qBACA,yDACA,qBACA,gBACA,kBAEA,iBACE,WACA,cACA,kBACA,MACA,SACA,OACA,cACA,+BACA,sBAGF,cACE,aACA,sBACA,uBAGF,sBACE,oBACA,iCAEA,sFAGE,6DAGF,mCACE,WACA,YACA,aACA,2BAEA,uCACE,WACA,YAKN,iCACE,4BACA,8BAGF,2BACE,aACA,mBAEA,yCACE,QACA,mBAGF,wCACE,QACA,cAIA,kDACE,wBASF,kMACE,WACA,qBACA,iCACA,cACA,YAKN,oEAGE,sBACA,eAGF,oBACE,0BACA,gBACA,sBAGF,qBACE,gBACA,sBAGF,2BACE,iBACA,gBAEA,uCACE,qBAIJ,kBACE,6BAEA,0BACE,UACA,Q;ACzHJ,gBACE,0BACA,gBAGF,sBACE,kBAGE,+CACE,eACA,aAEA,yBAJF,+CAKI,cAIJ,kDACE,kBACA,MACA,qBACA,cACA,oCACA,kDACA,wBACA,gBAEA,uDACE,kB;AC9BV,UACE,kBACA,kDACA,gBACE,kBAGF,uBACE,mBAGF,wBACE,WACA,cACA,WACA,YACA,kDACA,qDAEA,0BACE,GACE,UAEF,IACE,WAEF,KACE,WAKN,uBACE,WACA,cACA,WACA,YACA,6GACA,iEAEA,yBACE,GACE,4BAEF,IACE,2BAEF,KACE,4B;AChDR,UACE,aACA,sBACA,uBACA,2BAEA,6BACE,kBACA,QACA,SACA,gCACA,kBAaA,sDAXA,yBACE,GACE,yCACA,sCAEF,KACE,yCACA,8BAON,mBACE,KACE,UAEF,GACE,WAIJ,uBACE,gBACA,kBAGF,eACE,+BAGF,eACE,kBACA,QACA,SACA,iCACA,+BAEA,kCAIA,2BACE,WACA,kBACA,SACA,SACA,+BAEA,WACA,YAEA,gCACA,sBACA,kBACA,UAGF,8BACE,aAIJ,qBACE,kBACA,QACA,SACA,kCACA,8DACA,wBACA,aACA,YACA,0FACA,iFACA,kBACA,UAGF,2BACE,kBACA,gBACA,eACA,wBAEA,UAGF,sBACE,kBACA,eACA,SACA,gCACA,WACA,YAEA,UAGF,eACE,cAGF,oCAEE,wDAGF,mBACE,mBAEA,2CACE,WACA,kBACA,MACA,OACA,WACA,YACA,sCAIJ,qBACE,sBAEA,kBACA,SACA,SACA,6BACA,WAEA,UAGF,yBACE,aACA,+BACA,2BACA,WACA,+BAEA,+BACE,gBACA,kBAGF,kCACE,kCACA,cACA,kBACA,kBAEA,+CACE,oCAKN,yBACE,kBACA,kBACA,WACA,YAGF,8BACE,0BACA,kBACA,QACA,SACA,gCACA,kBACA,gBAGF,kCACE,2BACA,iBACA,eACA,qBACA,2C;ACjMJ,OACE,kBACA,gBAEA,mCACE,mCAGF,+FACE,6CAGF,0BACE,sBAEA,sDACE,oBACA,qCACA,sCAMF,0HACE,oBAKF,uJAGE,2BACA,iB;AClCN,YACE,kBACA,YACA,aACA,eAEA,+BACE,YACA,aACA,kBACA,gBAGF,2BACE,kBACA,OACA,MACA,kBACA,gBAGF,sBACE,kBACA,MACA,OACA,WACA,YACA,oBAGF,6BACE,YACA,iBACA,eACA,mBACA,qBAGF,kKAGE,a;ACzCJ,eACE,aACA,sBAEA,oBACE,aACA,mBAGF,uBACE,OACA,WACA,eACA,gCACA,kDACA,gBACA,oBAEA,+BACE,WACA,oCACA,UAEA,kBACA,MACA,OACA,QACA,SACA,kDACA,uBACA,yBAGF,6BACE,2CAEA,qCACE,WAIJ,qCACE,cAGF,oCACE,eAGF,yBACE,kBACA,kBACA,eACA,aACA,cAEA,0CACE,iBACA,YACA,cACA,yBAKN,0CACE,6BAGF,yCACE,gBAEA,uDACE,wDAGF,sDACE,yD;AC7EN,eACE,4CACA,uCAEA,aACA,WACA,mBACA,yCACA,6BACA,0BACA,mCACA,6DACA,2DACA,mBACA,gBACA,iBACA,0BACA,mBACA,eACA,4CACA,0CAEA,sCACE,2BAGF,8CACE,WACA,cACA,kBACA,kBACA,gBACA,eACA,eACA,gCACA,yDACA,UACA,oCAEA,gEACE,oBAGF,qEACE,2BAIJ,6BACE,kBACA,YACA,cACA,YACA,gBACA,uBACA,gCACA,uBACA,WACA,gCAEA,UACA,4BAEA,wBAfF,6BAgBI,sBAGF,mCACE,iCAGF,4CACE,UAGF,oCACE,uBACA,kBACA,kBACA,OACA,WACA,kBACA,eACA,cAGF,2CACE,eACA,kDACE,aAIJ,oDACE,cACA,iBACA,cAGF,sKAIE,aAIJ,qBACE,8BAEA,oDACE,UAGF,6BACE,2CAIJ,mHAKE,0CAGF,qDACE,iCAGF,sCACE,sBAGF,sCACE,yBAGF,6OAKE,wBAGF,sCACE,aAGF,8BACE,oBACA,iBACA,0BAGF,0BACE,yBACA,iBAGF,gCACE,oBACA,mBACA,wBACA,8BAEA,wCAEE,uBACA,yCACA,oBACA,UACA,gBAEA,+CACE,WACA,qBAGF,gDACE,UAEA,wDACE,UAIJ,0DACE,6BAKN,iCACE,kBAEA,wCACE,WACA,qBACA,YACA,aACA,kBACA,+BACA,2BAIJ,wBACE,eACA,q2B;ACnNJ,WACE,aACA,mBACA,WACA,eACA,kBACA,iBAEA,mBACE,6CACA,aACA,mBACA,eACA,mBACA,WACA,eACA,gBACA,6BACA,uDACA,sBACA,gBACA,kCACA,oBACA,0BACA,iBAEA,mFACE,eACA,gBACA,oBAGF,4BACE,aAEA,oCACE,sBACA,iDACA,cACA,eAEA,gDACE,SAKN,0BACE,iCACA,kBACA,UAGF,yBACE,mDAGF,iCACE,cAGF,gCACE,eAIJ,sBACE,mBAGF,2BACE,2BAGF,8BACE,4CACA,WACA,0CACE,0BAGF,qCACE,kBAEA,iDACE,iC;ACrFR,iBACE,kBACA,2BAEA,yBAJF,iBAKI,qCACA,yCACE,qCAEF,8BACE,qCAGF,mCACE,kCACA,2DACE,oCAEF,gDACE,qCAKN,qBACE,2BACA,0CAGF,wBACE,uBACA,0CAGF,+BACE,SACA,sBACA,qBACA,mBACA,mBACA,kBACA,uBAGF,mCACE,uBAKA,sGACE,kBACA,YACA,uBACA,YACA,iBACA,8CACA,qBACA,qBAEA,4KACE,kDACA,gBAGF,0KACE,WAGF,0KACE,aAGF,oVAEE,UAGF,0KACE,aAKF,wHACE,WACA,qBACA,sBAKN,+CACE,kBACA,YACA,uBACA,YACA,cACA,8CACA,iBACA,qBACA,oBAEA,kFACE,kDACA,gBAGF,iFACE,WAGF,iFACE,aAGF,kKAEE,UAGF,iFACE,aAKF,4CACE,WACA,cACA,WAGF,kDACE,oBACA,0BACA,oBAEA,iEACE,oBAMJ,4DACE,qCAEA,kEACE,gCAKN,oCACE,yCAEA,gDACE,8CAGF,mDACE,YAIJ,0CACE,wBACA,mBACA,qBACA,kBAEA,sDACE,mBAIJ,gCACE,mBACA,gBACA,uBACA,yDACA,gBACA,oBACA,0BACA,uBACA,aAEA,6CACE,gBACA,uBAGF,yFAEE,eAEA,qGACE,YAIJ,yCACE,0BAGF,yCACE,0BAGF,yCACE,0BAGF,yCACE,0BAGF,yCACE,0BAGF,yCACE,0BAGF,yCACE,0BAGF,kEACE,0BAGF,sCACE,kBAGF,qCACE,qBACA,gBAGF,0CACE,oBAGF,6CACE,OACA,iBACA,iBACA,gBACA,iBACA,qBACA,6CAEA,0DACE,0BAKN,4BACE,iDAGF,iGAGE,mCAGF,sCACE,+BAEA,yGACE,WACA,qBACA,iCACA,YAIJ,kDACE,wBAGF,+DACE,qBAGF,kDACE,aAGF,+BACE,gBACA,kBACA,kBACA,eACA,gBACA,0BAEA,uCACE,6BAGF,4CAEE,gBAGF,kDAEE,eAKF,iEACE,wBAMA,2DACE,yBACA,UACA,8BAKN,0BACE,yBAGE,4CACE,kDAIJ,8CACE,oBAMF,8IAEE,sBACA,uBAIJ,uBACE,yBAEA,4CACE,iBAIJ,uBACE,gBACA,wCAEA,yBAJF,uBAKI,iBAGF,4CACE,kBAIA,8DACE,yBAKN,2CACE,qBACA,cACA,wBACA,kBACA,sBACA,2BAEA,sDACE,wDACA,kBAIJ,yDACE,gDACA,iDACA,0DAGF,mCACE,4BACA,6BAGF,yCACE,6BAEA,uEACE,oBACA,kBACA,YACA,4BACA,8BACA,gBACA,yCACA,4CAEA,oFACE,kBAIJ,sDACE,mBAOJ,0DACE,aACA,uBACA,mBAEA,kFACE,eAEA,wGACE,yBAKN,8DACE,sBAGF,gdAME,oBACA,qBAEA,4vBACE,sBAIJ,oEACE,sBAGF,sTAIE,mBACA,wBAEA,8fACE,yBAIJ,8EACE,gBAIF,4HAEE,sBAEA,gOACE,sBAIJ,8DACE,aACA,mBACA,uBAEA,oFACE,WACA,mBACA,+CAIJ,gIAEE,kBACA,aACA,mBACA,uBACA,WACA,WACA,yBAEA,wJACE,UAGF,4JACE,aACA,mBACA,uBACA,eACA,gBACA,kBACA,2BAGF,4MACE,6BAEA,wPACE,UAKN,8DACE,iBAGF,kEACE,iBAGF,sKAEE,2BACA,WACA,iBACA,kBACA,cACA,aACA,UACA,kBACA,qBACA,qBACA,0CAGF,wGACE,0BACA,oBACA,oBAIJ,8BACE,gBACA,aACA,eACA,qBAEA,2CACE,mBACA,wBAEA,uDACE,kBAIJ,uCACE,eAGF,6CACE,aACA,uBACA,2BACA,cAEA,+CACE,gBAGF,8DACE,kBACA,4CAEA,yBAJF,8DAKI,8BAGF,yBARF,8DASI,kBACA,UACA,8BAKN,4CACE,mBAGF,2CACE,cACA,eACA,cAEA,uDACE,MACA,OACA,SACA,QAIJ,qCACE,qBACA,kBAEA,gDACE,wDACA,kBAKF,uDACE,gBACA,4EACA,iEACE,+HAIF,oEACE,iBAKN,2CACE,eACA,iBAEA,0DACE,YAGF,yDACE,gBACA,kBAGF,+DACE,gBAGF,kDACE,WACA,YAIJ,2CACE,eACA,iBACA,gBACA,yBAJF,2CAKI,oBAGF,wDACE,mBAGF,+DACE,gBAGF,kDACE,WACA,YACA,qBAIJ,2CACE,eACA,mBACA,gBAEA,wDACE,kBAGF,+DACE,gBAGF,kDACE,WACA,YACA,qBAIJ,iDACE,wCACA,0CAGF,2CACE,4CACA,8CAEA,0DACE,mBAEA,2EACE,mBAEA,yBAHF,2EAII,cACA,UACA,gCAOV,mBAmCE,8DACA,+DACA,iEACA,kEArCA,+HAIE,oBAGF,uDACE,kBACA,kBACA,qBAEA,+DACE,WACA,cACA,kBACA,MACA,SACA,cACA,UACA,+BACA,kBAGF,gEACE,6BAEA,wEACE,UACA,eAUN,gCACE,oBACA,gCAIJ,qBACE,qBAGF,kBACE,oCACA,gCACA,sBACA,eACA,qBAEA,2EAGE,qCAIJ,mCAEE,wBACA,gCACA,qBACA,SACA,gBACA,kBACA,0DACA,eCpzBF,SACE,aACA,qBACA,sBACA,kBAEA,4CACA,wCACA,gDACA,4DACA,0CACA,mBACA,qCACA,iDACA,+CACA,+BACA,8BACA,kCACA,8HAGA,6BACA,4BAEA,wDACA,yDACA,2DACA,4DAEA,0BA7BF,SA8BI,gCAEF,yBAhCF,SAiCI,sBAGF,mBACE,yCAGF,sBACE,0CAGF,mDAEE,UACA,iCACA,8CAEA,iGACE,2BAIJ,iBACE,kBACA,SACA,OAEA,sBAEA,yBAPF,iBAQI,aACA,eAIJ,yBACE,eACA,kBACA,cACA,iBACA,aACA,mBACA,uBACA,mBACA,UACA,uDACA,qBAEA,iCACE,qBAGF,+BACE,uBACA,qBAGF,8CACE,eAIJ,4CACE,4CAGF,6BACE,WACA,aAGF,uBACE,sBACA,yBAFF,uBAGI,wBAIJ,sBAGE,sBAKE,+DACE,wCAIF,2DACE,oBAMJ,6CACE,+DAKF,sDACE,UAIJ,mBACE,oBAEA,gEAEE,eAGF,yBARF,mBASI,sBAEA,gEAEE,qBAIJ,sDACE,iEAGF,4DACE,8DACA,iEAGF,sDACE,8DAGF,iCACE,iEAEA,+DACE,+BAKN,aACE,2BACA,gDACA,4CACA,oDACA,gEACA,8CACA,mBACA,wCACA,yCACA,2CACA,oCACA,0CACA,sCACA,8BACA,4BACA,4CAEA,0BAlBF,aAmBI,mBAGF,oDAEE,0DACA,4DACA,8DAGF,yBA7BF,aA8BI,sBAGF,gDACE,kEAGF,sDACE,+DACA,kEAGF,gDACE,+DAGF,2BACE,kEAEA,yDACE,gCACA,6BAMJ,2EAEE,kDACA,UACA,6DACA,wBAIJ,mBACE,mCAGF,oBACE,qCAEA,8BACE,qCAGF,kCACE,qCAEA,4CACE,qCAKN,6BACE,eAEA,yBAHF,6BAII,2CAIA,+GAEE,6BAIJ,mDACE,WACA,kBACA,aACA,gBACA,WACA,YACA,qCAKA,wIACE,qBAIJ,qDACE,UAKF,6CACE,8BAEA,0DACE,uBAEA,sEACE,8BAON,wDACE,8BAIJ,6HAEE,qDAGF,qIAEE,yDAGF,wCACE,eACA,aAIA,kGACE,yDACA,2BACA,qBAEA,yGACE,+BAKN,eACE,kBAEA,uCACE,kBACA,SACA,UACA,UAIJ,oCACE,kBACA,iDACE,uCAGF,4DACE,kBACA,UACA,aACA,eACA,WAGF,kFAEE,iEAIA,wEACE,8BAGF,0GAEE,6CAOJ,4FACE,8BAGF,wEACE,2BAKF,wDACE,gCAIA,+EACE,gCAKF,gFACE,6BAKF,oEACE,iBAGF,6EACE,gBACA,oCACA,qCAGF,uFACE,YAIJ,2DACE,gBAEA,mEACE,oBAGF,4EACE,uCACA,wCAOA,wPACE,gBAEA,sQACE,WACA,cACA,eACA,uBACA,gBACA,oCACA,kBASA,kSACE,mCACA,qCAEA,gTACE,mCACA,2CAYV,4OACE,4CAIA,4PACE,yDACA,gDAKN,uDACE,iBAGF,+CACE,qDAIA,2DACE,aACA,yBAEA,4EACE,WAMR,iCACE,kBACA,OACA,cACA,aACA,cACA,sBACA,kBACA,wCAEA,aACA,mBACA,uBAEA,WACA,eAEA,UACA,oBACA,4CAEA,8CACE,kBACA,UACA,SACA,mBAGF,6CACE,uBAKF,8GACE,gCAKA,wNAEE,+BACA,gCAKF,gLAGE,mBAIJ,+QAIE,4BACA,6BAGF,qEACE,qBAIJ,gCACE,kBACA,SACA,WACA,gCAEA,UACA,4BAEA,wBATF,gCAUI,sBAGF,mHAGE,4CAMF,oGACE,UAIJ,oCACE,WAGF,0CACE,YAGF,wBACE,WACA,UACA,kBAKJ,sKAME,qDACA,uDACA,2DACA,6DAGF,8BACE,kCAGF,aACE,gBAEA,6BACE,2BAIJ,8CACE,0e;ACppBF,kBACE,mEACA,sEAEA,mBACA,oBAEA,0BACE,aAGF,oCACE,iBACA,sCACA,gDACA,2B;ACfJ,iBACE,WACA,YACA,aACA,mBACA,uBACA,kBAEA,0BACE,oBACA,sBACA,mBACA,gCACA,cACA,oBACA,qBACA,WAGF,wBACE,gBACA,gBAGF,8BACE,mBACA,gBAGF,0BACE,mBACA,aACA,YACA,eAEA,qCACE,aACA,Y;ACrCN,sBACE,YACA,aACA,mBACA,uBACA,mBAEA,cACE,mBACA,sBAGF,mBACE,sBACA,gCACA,gBACA,oBACA,qBACA,WACA,+BAEA,gBACE,oBAIJ,eACE,eACA,qBACA,kBACA,uBACA,0BAGF,kBACE,SACA,UACA,gBACA,uBACA,8BAGF,kBACE,kBACA,UACA,gBACA,uBACA,gBACA,yCAEA,WACE,wBACA,C;AClDN,aACE,OACA,WACA,oBAEA,gBACA,kBACA,gBAGA,6CAqBA,mE7BzBA,+B6BNF,a7BOI,mBAGA,mB6BEF,oCACE,2BAGF,iCACE,sIAGF,wBApBF,aAqBI,0CACA,2BAEA,gCACE,0CACA,+BAMJ,mCACE,kBACA,+CAEA,2EACE,2BAIJ,yCACE,aAGF,iCACE,WACA,0CACA,gBACA,cACA,aACA,yBACA,sBACA,6BAEA,wDACE,4BAGF,yBAdF,iCAeI,YACA,wBAEA,UAIJ,yBACE,gBAEA,uCACE,mBAIJ,yDAEE,gBAEA,qFACE,uBAEA,yBAHF,qFAII,uBAGF,iHACE,uBAKN,yBACE,+BACE,gBACA,6CACE,sBAEA,yEACE,2DAMR,kDAEE,kBAEA,UACA,mBACA,+CAEA,wEACE,qBACA,UAKF,wEACE,eAGF,kEACE,WACA,kBACA,eACA,kBACA,WACA,YACA,gBACA,WAEA,UACA,4CAEA,gHACE,2BAKF,0GACE,kBAKF,4GACE,eAIJ,kFAEE,2BAOA,wWACE,WAEA,wcACE,WAMR,oBACE,WACA,YACA,aACA,mBACA,uBAEA,yBACE,cACA,gBAGF,sCACE,yBACA,0BAEA,wFAEE,qBAKN,6GAIE,kBACA,0CAEA,iIACE,qBACA,gCACA,WACA,0DACA,gBACA,iBACA,gBACA,4CACA,sBAEA,0WAEE,yDACA,yDAGF,qLACE,2BACA,gDACA,iDACA,0DAKN,0BACE,gBACA,mBACA,6BACA,oBACA,UACA,4BAEA,yBARF,0BASI,iBACA,sBAGF,iEACE,UAEA,sEACE,oBAIJ,iDACE,gBAGF,sCACE,eAGF,+BACE,oBAIJ,sDACE,gBACA,YAGF,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WACA,aACA,cACA,8BACA,sBACA,kBACA,QACA,qBACA,gBACA,mDAGF,yBArBF,wCAsBI,gBACA,sBAKN,wCAEE,kBAEA,oEACE,+HAEA,gBACA,kBACA,iFACA,uBACA,mBACA,0CAEA,4LAEE,gHAIF,wFACE,gBACA,kBAKA,4OACE,aAIJ,kGACE,oBAIJ,4JAEE,kBACA,gCACA,oBACA,uBACA,mBACA,mBACA,0CACA,8DACA,YACA,mBACA,gBACA,uBACA,eAGF,gFACE,uBACA,OAGF,8FACE,QAGF,4EACE,oCACA,eACA,qBAEA,8QAGE,qCAIJ,0DACE,yDACA,wCACA,oBACA,oCACA,wJAIF,0FACE,yDAGF,sDACE,kBACA,MACA,OACA,UACA,oBACA,YACA,uBACA,mBAIJ,oBACE,YAEA,kCACE,gBACA,kCACA,uBACA,2BACA,2BACA,8BACA,kBACA,iBACA,mBACA,oEACA,qBAWA,6BATA,yBAbF,kCAcI,gBACA,oBACA,iBACA,sEACA,eAMF,yDACE,2BAIJ,8EAEE,8DAEA,yBAJF,8EAKI,iEAKF,mDACE,eACA,gBAMF,+KACE,kBAIJ,2BACE,cACA,eACA,kBACA,iBACA,oBAKF,kCACE,eACA,mBACA,iBAGF,sCACE,gBACA,cAIJ,kBACE,kBACA,0BACA,OACA,WACA,mCACA,4CACA,gBACA,iBAEA,kBACA,gBAGA,iDAEA,UACA,6BACA,wBACA,6EnChhBA,+BmC6fF,kBnC5fI,mBAGA,mBmC8gBF,8BACE,aAGF,uBACE,UACA,wBAGF,2BACE,cAIJ,sCACE,KACE,UAEF,GACE,gC;AC7iBJ,kBACE,kBACA,MACA,OACA,SACA,QACA,gBACA,WACA,+CAEA,qDACE,gCAGF,yBACE,WACA,kBACA,MACA,OACA,SACA,QACA,+CACA,2BACA,4BACA,sBAEA,4DACE,kEAGF,gDACE,gBAGF,sCACE,yDAEA,yBAHF,sCAII,0DAIJ,yEACE,yDACA,6BACA,sBACA,yBAIJ,gEACE,UAGF,0CACE,qDACA,YACA,qBAGF,kDACE,kBAGF,sCACE,gDACE,6BACA,gBACA,mBACA,6BACA,6CAGF,6HACE,kCAKF,sCADF,6HAEI,iCAGF,sCALF,6HAMI,kCAKN,cACE,aACA,uBACA,YACA,kBACA,UACA,YAEA,yBARF,cASI,iBAGF,+BACE,wDAEA,aACA,sBACA,mBACA,WACA,YACA,kBACA,gBAEA,2CACE,WACA,YACA,gBAEA,+CACE,aACA,sBACA,mBAMJ,yCACE,kCACA,kGAEA,iDACE,mCACA,8CAIA,wIAEE,2BAKN,+EAEE,UACA,4CAEA,6HACE,2BAIJ,gCACE,UACA,mBACA,gHAGA,uDACE,2BAIJ,2EAEE,oBAIA,6DACE,SAGF,qDACE,6FACA,yDAEA,6DACE,sCAIJ,2DACE,yBAEA,yBAHF,2DAII,0BAIJ,uGAEE,UAGF,4CACE,qBACA,qBAKN,kCACE,oBACA,8CAEA,iEACE,UACA,4CAEA,wFACE,2BAIJ,yDACE,2BAGF,8CACE,kDACA,oBAEA,6EACE,UAIJ,wCACE,WACA,aACA,4CACA,mCACA,kCACA,kBACA,iDAIJ,oCACE,WACA,0CACA,eACA,kBACA,aACA,qBACA,+BAEA,+BAEA,uDAEA,2DACE,2BAGF,0BAjBF,oCAkBI,6CAEA,4DACE,mEAIJ,yBAzBF,oCA0BI,gBAEA,6DACE,wGAIJ,sDACE,2CACA,MAEA,4EACE,gCAIJ,4CACE,WACA,kBACA,eACA,OACA,QACA,WACA,qJAOA,UACA,8BAEA,yBAjBF,4CAkBI,SACA,WAIJ,uDACE,UAGF,4DACE,qJAYN,oDAGE,sBAEA,yBALF,oDAMI,qBAIJ,6FAKE,WACA,aACA,uBACA,kBAOA,6KACE,8DACA,4CAIJ,uCACE,WACA,aACA,uBACA,kBACA,uBAEA,yDACE,0BACA,yBAEA,qBAEI,2EACE,0BAKN,yBAGI,uJACE,0BAKN,qEACE,+BACA,yBACA,kCACA,iBACA,sBAIJ,uHAEE,cACA,oBACA,+EAEA,2MACE,gBACA,4CAGF,yBAXF,uHAYI,eAIJ,yBArDF,uCAsDI,2DAGF,oEACE,0B;AC3ZJ,aACE,aACA,mBACA,4BACA,uBACA,oBAEA,yBAPF,aAQI,eAGF,2BACE,cAGF,yBACE,OACA,YAEA,6BACE,aACA,mBAIJ,gBACE,gBACA,kBACA,gBACA,qBAGF,oBACE,aACA,iBAGF,0BACE,iBAEA,yBAHF,0BAII,mBAIJ,2BACE,iB;AC5CJ,SACE,YACA,aACA,sBAEA,kBACA,iDANF,StCOI,mBAGA,mBsCDF,iCACE,oBAEA,gDACE,2BAIJ,kCACE,4BACA,2EACA,8DAEA,0CACE,gBAGF,yDACE,iBACA,oCAGF,4CACE,iBAGA,sDACE,cACA,kBAKN,+BACE,UAIJ,cACE,aACA,8BAEA,uBACE,mCACA,SACA,UAEA,4BACE,oBAEA,iCACE,mBAGF,8BACE,aAKN,0BACE,OAIA,kCACE,YACA,iBACA,aACA,uBACA,uBAEA,2CACE,wBAIJ,kCACE,aACA,qCACA,mBACA,kBAGF,sCACE,gBAEA,kDACE,mBAIJ,kCACE,gBAEA,gHAEE,aAIJ,oEAEE,gBAGE,gHACE,MACA,OACA,aACA,mBACA,uBAGF,gGACE,qBAKN,4EAEE,mBAEA,yBAJF,4EAKI,gBACA,wIACE,U;AC1IV,gBACE,YACA,gBACA,kBAEA,sBACE,YACA,gB;ACPJ,aACE,kBACA,MACA,QACA,gCACA,YACA,yCACA,uDACA,mCACA,2CACA,8BAEA,6CAEA,oCACE,gBAGF,0BAlBF,aAmBI,8DACA,kBAGF,yBAvBF,aAwBI,YACA,oCAGF,yBACE,yCACA,gBAGF,4CACE,iBACA,cACA,kBAEA,oDACE,oBAEA,6DACE,0BAIJ,mDACE,aACA,uBACA,mBAEA,sDACE,gBACA,kBACA,iBACA,qBACA,sBAGF,iEACE,mBACA,oBAGF,0DACE,aACA,cACA,uBAIJ,oDACE,kBACA,cAKN,qBACE,kBACA,MACA,OACA,QACA,SACA,8BACA,gBACA,kBACA,oBAEA,0BAXF,qBAYI,gBAGF,+BACE,aAGF,uCACE,kBACA,MACA,QACA,SACA,OACA,WACA,gBACA,UAEA,yBAVF,uCAWI,2CAEA,8DACE,iBAKN,8FAEE,mBAIA,yBACE,+DACE,uCAIJ,0DACE,oBACA,+B;AClIN,MACE,YACA,gBACA,gBAEA,0BALF,MAMI,mBAGF,yBATF,MAUI,iCAGF,yBAbF,MAcI,aACA,+BACA,yBAIJ,uBACE,iCACA,oHACE,yBACA,gBAIJ,YACE,gBACA,WACA,kBACA,YACA,kBAEA,gBACE,YACA,gBAGF,yBAZF,YAaI,iCAGF,yBAhBF,YAiBI,gBAGF,0BApBF,YAqBI,WACA,gBAGF,yBAzBF,YA0BI,eACA,OACA,MACA,gCACA,yBAEA,mCACA,6CAEA,mCACE,gBAGF,mBACE,WACA,cACA,kBACA,OACA,MACA,QACA,SACA,gBACA,sCACA,2CACA,UAEA,0CACE,gBAIF,mCACE,aAGF,wDACE,cAIJ,2CACE,+BAEA,kDACE,UACA,oBAIJ,6CACE,gBAEA,mDACE,iBAKN,yBApFF,YAqFI,eACA,mCACA,0CACA,0DAKF,yBADF,aAEI,uCAGF,8CACE,gBAEA,gEACE,gBAKN,mDACE,gBAGF,cACE,2CAEA,yBAHF,cAII,eACA,eACA,OACA,MACA,SACA,QAEA,+BACA,6CAEA,qCACE,gBAGF,6CACE,sCAIJ,yBAvBF,cAwBI,iBAEA,6CACE,mCAGF,sCACE,oCAIJ,+CACE,gBAEA,qDACE,gBAKN,kCACE,sCAEA,6IACE,6EAIA,gFACE,aAKF,+EACE,kCACA,UAKF,uEACE,+BACA,UAKF,8EACE,aAKF,6EACE,kCACA,UAKF,wEACE,+BACA,U","sources":["webpack://telegram-t/./src/components/left/ConnectionStatusOverlay.scss","webpack://telegram-t/./src/components/left/main/LeftMainHeader.scss","webpack://telegram-t/./src/styles/_mixins.scss","webpack://telegram-t/./src/components/left/NewChatButton.scss","webpack://telegram-t/./src/components/left/main/LeftMain.scss","webpack://telegram-t/./src/components/left/LeftColumn.scss","webpack://telegram-t/./src/components/middle/AudioPlayer.scss","webpack://telegram-t/./src/components/calls/group/GroupCallTopPane.scss","webpack://telegram-t/./src/components/middle/ChatReportPanel.scss","webpack://telegram-t/./src/components/middle/MiddleHeader.scss","webpack://telegram-t/./src/components/common/EmbeddedMessage.scss","webpack://telegram-t/./src/components/middle/message/ReactionAnimatedEmoji.scss","webpack://telegram-t/./src/components/middle/message/MessageMeta.scss","webpack://telegram-t/./src/components/middle/message/Sticker.scss","webpack://telegram-t/./src/components/middle/message/Contact.scss","webpack://telegram-t/./src/components/middle/message/PollOption.scss","webpack://telegram-t/./src/components/middle/message/Poll.scss","webpack://telegram-t/./src/components/middle/message/WebPage.scss","webpack://telegram-t/./src/components/middle/message/Invoice.scss","webpack://telegram-t/./src/components/ui/Skeleton.scss","webpack://telegram-t/./src/components/middle/message/Location.scss","webpack://telegram-t/./src/components/middle/message/Album.scss","webpack://telegram-t/./src/components/middle/message/RoundVideo.scss","webpack://telegram-t/./src/components/middle/message/InlineButtons.scss","webpack://telegram-t/./src/components/middle/message/CommentButton.scss","webpack://telegram-t/./src/components/middle/message/Reactions.scss","webpack://telegram-t/./src/components/middle/message/_message-content.scss","webpack://telegram-t/./src/components/middle/message/Message.scss","webpack://telegram-t/./src/components/middle/message/SponsoredMessage.scss","webpack://telegram-t/./src/components/middle/ContactGreeting.scss","webpack://telegram-t/./src/components/middle/NoMessages.scss","webpack://telegram-t/./src/components/middle/MessageList.scss","webpack://telegram-t/./src/components/middle/ScrollDownButton.scss","webpack://telegram-t/./src/components/middle/composer/AttachMenu.scss","webpack://telegram-t/./src/components/middle/composer/BotKeyboardMenu.scss","webpack://telegram-t/./src/components/middle/composer/ComposerEmbeddedMessage.scss","webpack://telegram-t/./src/components/middle/composer/WebPagePreview.scss","webpack://telegram-t/./src/components/middle/composer/Composer.scss","webpack://telegram-t/./src/components/middle/MiddleColumn.scss","webpack://telegram-t/./src/components/right/RightHeader.scss","webpack://telegram-t/./src/components/right/Profile.scss","webpack://telegram-t/./src/components/right/AddChatMembers.scss","webpack://telegram-t/./src/components/right/RightColumn.scss","webpack://telegram-t/./src/components/main/Main.scss"],"sourcesContent":[".connection-state-wrapper {\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n\n transition: transform 300ms ease, opacity 300ms ease;\n opacity: 1;\n\n &:not(.open) {\n transform: translateY(-3rem);\n opacity: 0;\n }\n\n &:not(.shown) {\n display: none;\n }\n}\n\n#ConnectionStatusOverlay {\n height: 2.9375rem;\n flex: 0 0 auto;\n display: flex;\n align-items: center;\n margin: 0.375rem 0.5rem;\n padding: 0 0.75rem;\n background: var(--color-yellow);\n border-radius: var(--border-radius-default);\n\n &.interactive {\n cursor: pointer;\n }\n\n > .Spinner {\n --spinner-size: 1.75rem;\n }\n\n > .state-text {\n flex: 1;\n color: var(--color-text-lighter);\n font-size: 0.9375rem;\n font-weight: 500;\n padding-bottom: 0.0625rem;\n margin-inline-start: 1.875rem;\n white-space: nowrap;\n }\n\n @media (max-width: 950px) {\n > .state-text {\n margin-inline-start: 1.25rem;\n }\n }\n\n .Transition {\n width: 100%;\n // https://dfmcphee.com/flex-items-and-min-width-0/\n // https://stackoverflow.com/questions/36247140/why-dont-flex-items-shrink-past-content-size\n min-width: 0;\n\n > div {\n display: flex;\n align-items: center;\n width: 100%;\n }\n }\n}\n","@import \"../../../styles/mixins\";\n\n#LeftMainHeader {\n position: relative;\n\n .animated-menu-icon {\n position: absolute;\n\n &,\n &::before,\n &::after {\n width: 1.125rem;\n height: 0.125rem;\n border-radius: 0.125rem;\n background-color: var(--color-text-secondary);\n transition: transform 0.25s;\n transform: rotate(0);\n }\n\n &::before,\n &::after {\n position: absolute;\n left: 0;\n content: \"\";\n }\n\n &::before {\n top: -0.3125rem;\n }\n\n &::after {\n top: 0.3125rem;\n }\n\n &.state-back {\n transform: rotate(180deg);\n\n &::before {\n transform: rotate(45deg) scaleX(0.75) translate(0.375rem, -0.1875rem);\n }\n\n &::after {\n transform: rotate(-45deg) scaleX(0.75) translate(0.375rem, 0.1875rem);\n }\n }\n\n &.no-animation {\n transition: none;\n\n &::before,\n &::after {\n transition: none;\n }\n }\n }\n\n .archived-badge {\n min-width: 1.5rem;\n height: 1.5rem;\n margin-left: auto;\n background: var(--color-gray);\n border-radius: 0.75rem;\n padding: 0 0.4375rem;\n color: white;\n font-size: 0.875rem;\n line-height: 1.5rem;\n font-weight: 500;\n text-align: center;\n flex-shrink: 0;\n }\n\n .MenuItem.compact .archived-badge {\n background: none;\n padding: 0;\n color: var(--color-text-secondary);\n }\n\n .MenuItem.compact .Switcher {\n transform: scale(0.75);\n }\n\n [dir=\"rtl\"] .archived-badge {\n margin-left: 0;\n margin-right: auto;\n }\n\n .Menu .bubble {\n min-width: 17rem;\n max-height: calc(100 * var(--vh) - 3.75rem);\n\n overflow-y: auto;\n @include overflow-y-overlay();\n }\n\n // @optimization\n @include while-transition() {\n .Menu .bubble {\n transition: none !important;\n }\n }\n}\n","// @optimization\n@mixin while-transition() {\n .Transition > div:not(.Transition__slide--active) &, body.animating-right-column & {\n @content;\n }\n}\n\n@mixin overflow-y-overlay() {\n @supports (overflow-y: overlay) {\n overflow-y: overlay;\n\n //Workaround for Android <= 9\n overflow-x: hidden;\n }\n}\n\n@mixin reset-range() {\n input[type=\"range\"] {\n -webkit-appearance: none;\n display: block;\n width: 100%;\n height: 0.75rem;\n margin-bottom: 0.5rem;\n background: transparent;\n\n &:focus {\n outline: none;\n }\n\n &::-ms-track {\n width: 100%;\n cursor: pointer;\n\n background: transparent;\n border-color: transparent;\n color: transparent;\n }\n\n &::-webkit-slider-thumb {\n -webkit-appearance: none;\n }\n\n &::-moz-slider-thumb {\n -moz-appearance: none;\n }\n\n &::-webkit-slider-runnable-track {\n cursor: pointer;\n }\n\n &::-moz-range-track, &::-moz-range-progress {\n cursor: pointer;\n }\n }\n}\n",".NewChatButton {\n position: absolute;\n right: 1rem;\n bottom: 1rem;\n transform: translateY(5rem);\n\n transition: transform 0.25s cubic-bezier(0.34, 1.56, 0.64, 1);\n\n body.animation-level-0 & {\n transform: none !important;\n opacity: 0;\n\n transition: opacity 0.15s;\n\n &.revealed {\n opacity: 1;\n }\n }\n\n &.revealed {\n transform: translateY(0);\n\n @media (max-width: 600px) {\n // Force rendering in the composite layer to fix the z-index rendering issue\n transform: translate3d(0, 0, 0.625rem);\n transform-style: preserve-3d;\n }\n }\n\n > .Button {\n .icon-new-chat-filled,\n .icon-close {\n position: absolute;\n }\n\n &:not(.active) {\n .icon-new-chat-filled {\n animation: grow-icon 0.4s ease-out;\n }\n\n .icon-close {\n animation: hide-icon 0.4s forwards ease-out;\n }\n }\n\n &.active {\n .icon-close {\n animation: grow-icon 0.4s ease-out;\n }\n\n .icon-new-chat-filled {\n animation: hide-icon 0.4s forwards ease-out;\n }\n }\n }\n}\n","#LeftColumn-main {\n height: 100%;\n position: relative;\n display: flex;\n flex-direction: column;\n overflow: hidden;\n z-index: 1;\n\n > .Transition {\n flex: 1;\n overflow: hidden;\n }\n\n .ChatFolders {\n height: 100%;\n display: flex;\n flex-direction: column;\n overflow: hidden;\n\n .tabs-placeholder {\n height: 2.625rem;\n /* stylelint-disable-next-line plugin/no-low-performance-animation-properties */\n transition: height 150ms ease;\n\n &:not(.open) {\n height: 0;\n }\n }\n\n .TabList {\n justify-content: flex-start;\n padding-left: 0.5625rem;\n padding-bottom: 1px;\n border-bottom: 0;\n z-index: 1;\n }\n\n .Tab {\n flex: 0 0 auto;\n padding-left: 0.625rem;\n padding-right: 0.625rem;\n\n > span {\n padding-left: 0.5rem;\n padding-right: 0.5rem;\n }\n }\n\n > .Transition {\n flex: 1;\n overflow: hidden;\n }\n }\n\n .RecentContacts,\n .LeftSearch,\n .search-content {\n height: 100%;\n overflow-y: auto;\n }\n\n .btn-update {\n position: absolute;\n bottom: 1rem;\n left: 1rem;\n right: 1rem;\n margin: 0 auto;\n }\n}\n","#NewChat {\n height: 100%;\n}\n\n.left-header {\n height: var(--header-height);\n padding: 0.375rem 1rem 0.5rem 0.8125rem;\n display: flex;\n align-items: center;\n flex-shrink: 0;\n background-color: var(--color-background);\n\n h3 {\n margin-bottom: 0;\n font-size: 1.25rem;\n font-weight: 500;\n margin-left: 1.375rem;\n margin-right: auto;\n }\n\n .SearchInput {\n margin-left: 0.875rem;\n max-width: calc(100% - 3.25rem);\n\n @media (max-width: 600px) {\n max-width: calc(100% - 3rem);\n }\n }\n\n @media (max-width: 600px) {\n padding: 0.5rem;\n }\n\n .Button.smaller {\n width: 2.5rem;\n height: 2.5rem;\n\n + .DropdownMenu {\n margin-left: 0.25rem;\n }\n }\n}\n",".AudioPlayer {\n display: flex;\n margin-left: auto;\n margin-top: -0.25rem;\n margin-bottom: -0.25rem;\n\n body.animation-level-0 & {\n transition: none !important;\n }\n\n > .Button {\n flex-shrink: 0;\n margin: 0.125rem;\n }\n\n > .player-button {\n --color-text-secondary: var(--color-primary);\n --color-text-secondary-rgb: var(--color-primary-shade-rgb);\n --color-primary-shade: var(--color-green);\n --color-white: var(--color-background-own);\n }\n\n .player-button {\n &.smaller {\n width: 3rem;\n height: 3rem;\n\n i {\n font-size: 1.625rem;\n margin-top: -0.0625rem;\n }\n }\n\n i {\n position: absolute;\n font-size: 1.9375rem;\n margin-top: -0.0625rem;\n\n &.icon-play {\n margin-left: 0.125rem;\n }\n }\n\n .icon-play,\n .icon-pause {\n opacity: 1;\n transform: scale(1);\n transition: opacity 0.4s, transform 0.6s cubic-bezier(0.34, 1.56, 0.64, 1);\n }\n\n &.play .icon-pause,\n &.pause .icon-play,\n &.loading .icon-play,\n &.loading .icon-pause {\n opacity: 0;\n transform: scale(0.5);\n }\n }\n\n .volume-button {\n position: relative;\n overflow: visible;\n\n .volume-slider-spacer {\n position: absolute;\n transform: translateY(100%);\n bottom: 0;\n height: 1rem;\n width: 8rem;\n cursor: default;\n visibility: hidden;\n }\n\n &:hover .volume-slider-spacer,\n .volume-slider-spacer:hover {\n visibility: visible;\n }\n\n .volume-slider {\n opacity: 0;\n visibility: hidden;\n\n position: absolute;\n background: var(--color-background);\n bottom: -1rem;\n transform: translateY(100%);\n transition: opacity 0.2s ease-in-out, visibility 0.2s ease-in-out;\n width: 8rem;\n padding: 0.75rem;\n border-radius: 0.5rem;\n cursor: default;\n box-shadow: 0 1px 2px var(--color-default-shadow);\n\n .RangeSlider {\n margin-bottom: 0;\n input[type=\"range\"] {\n margin-bottom: 0;\n }\n }\n }\n\n &:hover .volume-slider,\n .volume-slider:hover,\n .volume-slider-spacer:hover + .volume-slider {\n opacity: 1;\n visibility: visible;\n }\n }\n\n .playback-button {\n &.applied {\n --color-text-secondary: var(--color-primary);\n }\n\n .playback-button-inner {\n transition: 0.2s color ease-in-out;\n font-size: 0.75rem;\n font-weight: bold;\n border: 2px solid;\n border-radius: 0.375rem;\n padding: 0.125rem 0.25rem;\n font-variant-numeric: tabular-nums;\n }\n }\n\n &-content {\n display: flex;\n justify-content: center;\n flex-direction: column;\n flex-shrink: 1;\n padding: 0 0.5rem;\n position: relative;\n overflow: hidden;\n cursor: pointer;\n border-radius: var(--border-radius-messages-small);\n\n &:hover {\n background-color: var(--color-interactive-element-hover);\n }\n\n @media (min-width: 1440px) and (max-width: 1500px) {\n max-width: 14rem;\n }\n\n .AudioPlayer & .title {\n display: block;\n font-weight: 500;\n font-size: 0.875rem !important;\n line-height: 1rem;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n\n body.is-ios & {\n font-size: 0.9375rem !important;\n line-height: 1.125rem;\n }\n }\n\n .subtitle {\n font-size: 0.8125rem !important;\n color: var(--color-text-secondary);\n line-height: 0.8125rem;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n margin: 0.125rem 0 0;\n\n body.is-ios & {\n font-size: 0.9375rem !important;\n line-height: 1.125rem;\n }\n }\n }\n}\n",".GroupCallTopPane {\n position: absolute;\n top: 100%;\n left: 0;\n right: 0;\n height: 2.875rem;\n overflow: hidden;\n box-shadow: 0 2px 2px var(--color-light-shadow);\n display: flex;\n flex-direction: row;\n justify-content: space-between;\n align-items: center;\n padding: 0.375rem 0.5rem 0.375rem 0.75rem;\n background: var(--color-background);\n z-index: -1;\n cursor: pointer;\n\n &::before {\n content: \"\";\n display: block;\n position: absolute;\n top: -0.1875rem;\n left: 0;\n right: 0;\n height: 0.125rem;\n box-shadow: 0 0.125rem 0.125rem var(--color-light-shadow);\n }\n\n &.is-hidden {\n display: none;\n }\n\n @media (max-width: 600px) {\n &.has-pinned-offset {\n top: calc(100% + 2.875rem);\n }\n }\n\n .info {\n display: flex;\n flex-direction: column;\n\n .title {\n font-size: 0.875rem;\n color: var(--color-text);\n }\n\n .participants {\n font-size: 0.75rem;\n color: var(--color-text-secondary);\n }\n }\n\n .avatars {\n display: flex;\n flex-direction: row;\n align-items: center;\n\n .Avatar {\n margin: 0 0 0 -0.75rem;\n\n &:first-child {\n width: 2rem;\n height: 2rem;\n }\n\n &:not(:first-child) {\n width: 2.25rem;\n height: 2.25rem;\n border: 0.125rem solid var(--color-background);\n }\n }\n }\n\n .join {\n height: 1.5rem;\n border-radius: 1.5rem;\n font-weight: 500;\n padding: 1rem 1rem;\n width: auto;\n }\n}\n\n@media (min-width: 1440px) {\n #Main.right-column-open .MiddleHeader .GroupCallTopPane {\n width: calc(100% - var(--right-column-width));\n }\n}\n",".ChatReportPanel {\n position: absolute;\n left: 0;\n right: 0;\n top: 100%;\n\n display: flex;\n align-items: center;\n margin-left: auto;\n background: var(--color-background);\n padding: 0.375rem 0.8125rem 0.25rem 1rem;\n box-shadow: 0 0.125rem 0.125rem var(--color-light-shadow), inset 0 0.125rem 0.125rem var(--color-light-shadow);\n transform: translate3d(0, 0, 0);\n transition: opacity 0.15s ease, transform var(--layer-transition);\n\n body.animation-level-1 & {\n .ripple-container {\n display: none;\n }\n }\n\n @media (min-width: 1276px) {\n transform: translate3d(0, 0, 0);\n transition: opacity 0.15s ease, transform var(--layer-transition);\n\n #Main.right-column-open & {\n padding-right: calc(var(--right-column-width) + 1rem);\n }\n }\n\n .UserReportPanel--Button {\n margin-left: 0.25rem;\n flex: 1 1 50%;\n white-space: nowrap;\n }\n}\n","@import \"../../styles/mixins\";\n\n@mixin mobile-header-styles() {\n .HeaderPinnedMessage-wrapper,\n .AudioPlayer {\n position: absolute;\n top: 100%;\n left: 0;\n right: 0;\n height: 2.875rem;\n box-shadow: 0 0.125rem 0.125rem var(--color-light-shadow);\n\n display: flex;\n flex-direction: row-reverse;\n padding-top: 0.375rem;\n padding-bottom: 0.375rem;\n padding-left: max(0.75rem, env(safe-area-inset-left));\n padding-right: max(0.5rem, env(safe-area-inset-right));\n background: var(--color-background);\n\n &::before {\n content: \"\";\n display: block;\n position: absolute;\n top: -0.1875rem;\n left: 0;\n right: 0;\n height: 0.125rem;\n box-shadow: 0 0.125rem 0.125rem var(--color-light-shadow);\n }\n\n .HeaderPinnedMessage {\n max-width: unset;\n margin-top: -0.1875rem;\n }\n }\n\n .AudioPlayer {\n flex-direction: row;\n margin-top: 0;\n padding: 0.25rem 0.5rem;\n\n &-content {\n padding: 0 0.5rem;\n flex-grow: 1;\n }\n\n > .Button {\n margin: -0.0625rem 0 0;\n }\n\n > .player-close {\n margin-left: auto;\n }\n }\n\n .HeaderPinnedMessage {\n flex-grow: 1;\n padding-top: 0;\n padding-bottom: 0;\n\n &::before {\n top: 0.125rem;\n bottom: 0.125rem;\n }\n\n .message-text {\n max-width: none;\n }\n }\n\n .HeaderPinnedMessage-wrapper.full-width {\n display: none;\n }\n}\n\n.MiddleHeader {\n display: flex;\n align-items: center;\n width: 100%;\n box-shadow: 0 2px 2px var(--color-light-shadow);\n background: var(--color-background);\n position: relative;\n z-index: var(--z-middle-header);\n padding-top: 0.5rem;\n padding-bottom: 0.5rem;\n padding-left: max(1.5rem, env(safe-area-inset-left));\n padding-right: max(0.8125rem, env(safe-area-inset-right));\n\n @media (max-width: 600px) {\n position: relative;\n\n padding-left: max(0.5rem, env(safe-area-inset-left));\n padding-right: max(0.5rem, env(safe-area-inset-right));\n }\n\n .Transition {\n width: 100%;\n // https://dfmcphee.com/flex-items-and-min-width-0/\n // https://stackoverflow.com/questions/36247140/why-dont-flex-items-shrink-past-content-size\n min-width: 0;\n\n > div {\n display: flex;\n align-items: center;\n width: 100%;\n }\n }\n\n .back-button {\n margin-left: -0.5rem;\n margin-right: 0.5rem;\n position: relative;\n\n @media (max-width: 600px) {\n margin-left: 0;\n }\n\n .unread-count {\n min-width: 1.25rem;\n height: 1.25rem;\n padding: 0 0.375rem;\n border-radius: 0.625rem;\n font-size: 0.75rem;\n line-height: 1.25rem;\n font-weight: 500;\n text-align: center;\n\n position: absolute;\n top: -0.25rem;\n right: -0.5rem;\n\n background: var(--color-gray);\n color: white;\n pointer-events: none;\n\n &.active {\n background: var(--color-primary);\n }\n }\n }\n\n .chat-info-wrapper {\n flex-grow: 1;\n overflow: hidden;\n }\n\n body.animation-level-0 & .HeaderPinnedMessage-wrapper {\n transition: none !important;\n }\n\n .header-tools {\n display: flex;\n align-items: center;\n justify-content: flex-end;\n margin-left: auto;\n flex-shrink: 0;\n\n body.animation-level-0 & {\n &,\n .AudioPlayer,\n .HeaderActions {\n transition: none !important;\n }\n }\n\n @media (min-width: 1276px) and (max-width: 1439px) {\n .HeaderActions {\n transform: translate3d(0, 0, 0);\n transition: transform var(--layer-transition);\n\n #Main.right-column-open & {\n transform: translate3d(calc(var(--right-column-width) * -1), 0, 0);\n }\n }\n }\n\n @media (min-width: 1440px) {\n transform: translate3d(0, 0, 0);\n transition: transform var(--layer-transition);\n\n #Main.right-column-open & {\n transform: translate3d(calc(var(--right-column-width) * -1), 0, 0);\n }\n }\n\n // @optimization\n @include while-transition() {\n pointer-events: none;\n }\n }\n\n @media (min-width: 1276px) and (max-width: 1439px) {\n &:not(.tools-stacked) .HeaderPinnedMessage-wrapper,\n &:not(.tools-stacked) .AudioPlayer {\n opacity: 1;\n\n #Main.right-column-open & {\n opacity: 0;\n }\n }\n }\n\n &.tools-stacked .AudioPlayer {\n @include mobile-header-styles();\n\n @media (min-width: 1150px) {\n #Main.right-column-open & {\n padding-right: calc(0.5rem + var(--right-column-width));\n }\n }\n }\n\n &.tools-stacked.animated .HeaderPinnedMessage-wrapper,\n &.tools-stacked.animated .AudioPlayer {\n animation: fade-in var(--layer-transition) forwards;\n\n body.animation-level-0 & {\n animation: none;\n }\n }\n\n h3 {\n font-weight: 500;\n font-size: 1.125rem;\n line-height: 1.375rem;\n white-space: pre;\n margin: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n unicode-bidi: plaintext;\n\n body.is-ios &,\n body.is-macos & {\n font-size: 1.0625rem;\n font-weight: 600;\n }\n\n @media (max-width: 600px) {\n display: block;\n overflow: hidden;\n text-overflow: ellipsis;\n }\n\n @media (min-width: 1275px) {\n #Main.right-column-open & {\n max-width: calc(100% - var(--right-column-width));\n }\n }\n }\n\n .ChatInfo {\n cursor: pointer;\n display: flex;\n align-items: center;\n\n .info {\n display: flex;\n flex-direction: column;\n justify-content: center;\n flex-grow: 1;\n overflow: hidden;\n }\n\n .title {\n display: flex;\n align-items: center;\n\n .VerifiedIcon {\n width: 1.25rem;\n height: 1.25rem;\n margin-left: 0.25rem;\n margin-top: 0.0625rem;\n }\n }\n\n .status,\n .typing-status {\n display: inline;\n unicode-bidi: plaintext;\n\n @media (min-width: 1275px) {\n #Main.right-column-open & {\n max-width: calc(100% - var(--right-column-width));\n }\n }\n }\n\n .user-status {\n unicode-bidi: plaintext;\n overflow: hidden;\n text-overflow: ellipsis;\n\n @media (min-width: 1275px) {\n #Main.right-column-open & {\n max-width: calc(100% - var(--right-column-width));\n }\n }\n }\n }\n\n .Avatar {\n margin-right: 0.625rem;\n // TODO For some reason webpack imports `Audio.scss` second time when loading calls bundle\n width: 2.5rem !important;\n height: 2.5rem !important;\n font-size: 1.0625rem;\n }\n\n .status,\n .typing-status {\n font-size: 0.875rem;\n line-height: 1.125rem;\n margin: 0;\n color: var(--color-text-secondary);\n overflow: hidden;\n white-space: nowrap;\n text-overflow: ellipsis;\n display: inline-block;\n\n .ellipsis {\n display: inline-flex;\n }\n\n &.online {\n color: var(--color-primary);\n }\n\n .font-emoji {\n line-height: 1rem;\n }\n }\n\n .Button.smaller {\n width: 2.5rem;\n height: 2.5rem;\n }\n\n .HeaderPinnedMessage-wrapper {\n display: flex;\n align-items: center;\n margin-left: auto;\n cursor: default;\n flex-direction: row-reverse;\n background: var(--color-background);\n\n body.animation-level-1 & {\n .ripple-container {\n display: none;\n }\n }\n\n @media (min-width: 1276px) {\n transform: translate3d(0, 0, 0);\n transition: opacity 0.15s ease, transform var(--layer-transition);\n\n #Main.right-column-open & {\n transform: translate3d(calc(var(--right-column-width) * -1), 0, 0);\n }\n }\n\n .HeaderPinnedMessage {\n min-width: 16rem;\n }\n\n > .Button {\n flex-shrink: 0;\n }\n\n &.full-width {\n position: absolute;\n left: 0;\n right: 0;\n top: 100%;\n background: var(--color-background);\n padding: 0.25rem 0.8125rem 0.25rem 1rem;\n box-shadow: 0 0.125rem 0.125rem var(--color-light-shadow);\n transform: translate3d(0, 0, 0);\n transition: opacity 0.15s ease, transform var(--layer-transition);\n\n &::before {\n content: \"\";\n display: block;\n position: absolute;\n top: -0.1875rem;\n left: 0;\n right: 0;\n height: 0.125rem;\n box-shadow: 0 0.125rem 0.125rem var(--color-light-shadow);\n }\n\n .HeaderPinnedMessage {\n margin-top: 0;\n margin-bottom: 0;\n flex: 1;\n\n .message-text {\n max-width: none;\n }\n }\n\n @media (min-width: 1276px) {\n transform: translate3d(0, 0, 0);\n transition: opacity 0.15s ease, transform var(--layer-transition);\n\n #Main.right-column-open & {\n padding-left: calc(var(--right-column-width) + 1rem);\n }\n }\n }\n }\n\n .HeaderPinnedMessage {\n display: flex;\n flex-shrink: 1;\n margin-top: -0.25rem;\n margin-bottom: -0.25rem;\n padding: 0.25rem;\n padding-left: 0.375rem;\n border-radius: var(--border-radius-messages-small);\n position: relative;\n overflow: hidden;\n cursor: pointer;\n\n &:hover {\n background-color: var(--color-interactive-element-hover);\n }\n\n .pinned-message-border {\n position: relative;\n height: 2.25rem;\n margin: 0.125rem 0;\n width: 0.125rem;\n min-width: 0.125rem;\n overflow: hidden;\n\n .pinned-message-border-wrapper-1 {\n height: 2.25rem;\n width: 0.125rem;\n border-radius: 0.0625rem;\n background: var(--color-primary);\n }\n\n .pinned-message-border-wrapper {\n background-color: var(--color-primary-opacity);\n position: relative;\n will-change: transform;\n transition: transform 0.25s ease-in-out;\n }\n\n .pinned-message-border-mark {\n position: absolute;\n left: 0;\n top: 0;\n width: 0.125rem;\n background: var(--color-primary);\n border-radius: 0.0625rem;\n will-change: transform;\n transition: transform 0.25s ease-in-out;\n }\n }\n\n .message-text {\n overflow: hidden;\n margin-inline-start: 0.375rem;\n margin-top: 0.125rem;\n max-width: 15rem;\n\n @media (min-width: 1440px) and (max-width: 1500px) {\n max-width: 14rem;\n }\n\n .title {\n font-weight: 500;\n font-size: 0.875rem;\n line-height: 1rem;\n height: 1rem;\n color: var(--color-primary);\n margin-bottom: 0.125rem;\n white-space: pre;\n text-align: initial;\n\n body.is-ios & {\n font-size: 0.9375rem;\n }\n }\n\n p {\n font-size: 0.875rem;\n line-height: 1.125rem;\n height: 1.125rem;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n margin: 0;\n\n body.is-ios & {\n font-size: 0.9375rem;\n }\n }\n }\n\n .emoji-small {\n width: 1rem;\n height: 1rem;\n }\n\n & > img {\n width: 2.25rem;\n height: 2.25rem;\n object-fit: cover;\n border-radius: 0.25rem;\n margin-inline-start: 0.375rem;\n margin-top: 0.125rem;\n flex-shrink: 0;\n\n & + .message-text {\n max-width: 12rem;\n }\n }\n }\n\n .HeaderActions {\n flex-shrink: 0;\n margin-left: auto;\n display: flex;\n align-items: center;\n justify-content: flex-end;\n\n .toggle-right-pane-button {\n &.active {\n color: var(--color-primary);\n opacity: 1;\n }\n }\n\n .badge-button {\n position: relative;\n overflow: visible;\n }\n\n .badge {\n position: absolute;\n min-width: 1rem;\n height: 1rem;\n background: var(--color-primary);\n border-radius: 0.5rem;\n color: white;\n font-size: 0.75rem;\n line-height: 1rem;\n font-weight: 500;\n text-align: center;\n flex-shrink: 0;\n right: 0;\n top: 0;\n }\n }\n\n .HeaderPinnedMessage-wrapper,\n .HeaderActions {\n .Button {\n margin-left: 0.25rem;\n\n &.tiny {\n margin-right: 0.625rem;\n }\n }\n }\n\n @media (max-width: 600px) {\n @include mobile-header-styles();\n }\n}\n\n@keyframes fade-in {\n from {\n opacity: 0;\n }\n to {\n opacity: 1;\n }\n}\n",".EmbeddedMessage {\n display: flex;\n align-items: center;\n font-size: calc(var(--message-text-size, 1rem) - 0.125rem);\n line-height: 1.125rem;\n margin: 0 -0.25rem 0.0625rem;\n padding: 0.1875rem 0.25rem 0.1875rem 0.4375rem;\n border-radius: var(--border-radius-messages-small);\n position: relative;\n overflow: hidden;\n cursor: pointer;\n direction: ltr;\n\n body.animation-level-1 & {\n .ripple-container {\n display: none;\n }\n }\n\n .custom-shape & {\n max-width: 15rem;\n padding: 0.5rem;\n margin: 0;\n background-color: var(--background-color);\n box-shadow: 0 1px 2px var(--color-default-shadow);\n\n &::before {\n left: 0.625rem;\n top: 0.625rem;\n bottom: 0.625rem;\n }\n\n img:not(.emoji) {\n margin-inline-start: 0.5rem;\n }\n\n &:dir(rtl) {\n padding: 0.5rem;\n }\n }\n\n &::before {\n content: \"\";\n display: block;\n position: absolute;\n top: 0.3125rem;\n bottom: 0.3125rem;\n left: 0.3125rem;\n width: 2px;\n background: var(--accent-color);\n border-radius: 2px;\n }\n\n &:hover {\n background-color: var(--hover-color);\n }\n\n &:active {\n background-color: var(--active-color);\n }\n\n .message-title {\n font-size: calc(var(--message-text-size, 1rem) - 0.125rem);\n }\n\n .message-text {\n overflow: hidden;\n margin-inline-start: 0.5rem;\n display: flex;\n flex-direction: column-reverse;\n\n .message-title {\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n margin-bottom: 0.125rem;\n flex: 1;\n display: block;\n }\n\n p {\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n height: 1.125rem;\n margin-bottom: 0;\n flex: 1;\n\n &::after {\n content: none;\n display: none;\n }\n }\n\n .emoji {\n width: calc(1.125 * var(--message-text-size, 1rem)) !important;\n height: calc(1.125 * var(--message-text-size, 1rem)) !important;\n vertical-align: text-bottom !important;\n }\n }\n\n .embedded-action-message {\n color: var(--accent-color);\n opacity: 0.75;\n }\n\n img:not(.emoji) {\n width: 2rem;\n height: 2rem;\n object-fit: cover;\n border-radius: 0.25rem;\n margin-left: 0.25rem;\n flex-shrink: 0;\n\n &.round {\n border-radius: 1rem;\n }\n }\n\n &.inside-input {\n padding-inline-start: 0.5625rem;\n margin: 0 0 -0.125rem -0.1875rem;\n display: grid;\n grid-template-columns: auto 1fr;\n grid-template-rows: 1fr;\n width: 100%;\n --accent-color: var(--color-primary);\n --hover-color: var(--color-interactive-element-hover);\n\n &::before {\n bottom: 0.3125rem;\n }\n\n img:not(.emoji) {\n margin-left: 0.125rem;\n }\n\n .message-text {\n margin-inline-start: 0.375rem;\n }\n\n .message-title {\n font-weight: 500;\n color: var(--accent-color);\n }\n }\n}\n",".ReactionAnimatedEmoji {\n position: relative;\n display: flex;\n align-items: center;\n justify-content: center;\n\n &.is-animating {\n // Fix for redundant scroll on iOS\n transform: translateZ(0);\n // Fix for redundant scroll in Firefox\n contain: layout;\n }\n\n .AnimatedSticker {\n position: fixed;\n top: -0.375rem;\n left: -0.375rem;\n pointer-events: none;\n\n &.effect {\n top: -2.5rem;\n left: -2.5rem;\n }\n\n &:not(.open) {\n opacity: 1 !important;\n }\n\n &.closing {\n opacity: 0 !important;\n }\n }\n\n &.in-meta {\n .AnimatedSticker {\n top: -0.4375rem;\n left: -0.4375rem;\n\n &.effect {\n top: -2.5625rem;\n left: -2.5625rem;\n }\n\n // Fix for weird positioning in Chrome\n canvas {\n position: absolute;\n }\n }\n }\n}\n",".MessageMeta {\n position: absolute;\n height: 1.25rem;\n bottom: 0;\n right: 0;\n display: flex;\n align-items: center;\n background: rgba(#999999, 0.6);\n border-radius: 0.625rem;\n padding: 0 0.25rem;\n color: white;\n cursor: pointer;\n max-width: 100%;\n user-select: none;\n\n .ReactionAnimatedEmoji {\n width: 1rem;\n height: 1rem;\n margin-right: 0.25rem;\n }\n\n .message-time,\n .message-signature,\n .message-views {\n font-size: 0.75rem;\n white-space: nowrap;\n }\n\n .message-time {\n margin-right: 0.1875rem;\n }\n\n body.is-ios & {\n .message-time {\n margin-right: 0.25rem;\n }\n }\n\n .message-views {\n margin-inline-start: 0.1875rem;\n }\n\n .message-signature {\n overflow: hidden;\n text-overflow: ellipsis;\n margin-right: 0.375rem;\n }\n\n .icon-channelviews {\n margin-left: 0.125rem;\n margin-right: 0.375rem;\n font-size: 1.125rem;\n position: relative;\n top: -0.0625rem;\n }\n\n .has-solid-background & {\n color: rgba(var(--color-text-meta-rgb), 0.75);\n background: none;\n }\n\n .media:not(.text) &,\n .Message .custom-shape & {\n background: rgba(0, 0, 0, 0.2);\n --color-accent-own: white;\n --color-accent: white;\n color: white !important;\n opacity: 1;\n bottom: 0.25rem;\n right: 0.25rem;\n left: auto;\n height: 1.125rem;\n padding: 0 0.3125rem 0 0.375rem;\n\n .MessageOutgoingStatus i {\n background: transparent;\n }\n }\n\n .media:not(.text):dir(rtl) &,\n .Message .custom-shape:dir(rtl) & {\n right: auto !important;\n left: 0.25rem;\n padding: 0 0.375rem 0 0.3125rem;\n }\n\n .is-forwarded.media:not(.text):dir(rtl) &,\n .Message .is-forwarded.custom-shape:dir(rtl) & {\n left: 0.8125rem;\n }\n\n .is-forwarded.media:not(.text) & {\n bottom: 0.9375rem;\n right: 0.8125rem;\n }\n\n .emoji-only & {\n right: 0;\n }\n\n .Message.own .has-solid-background & {\n color: var(--color-message-meta-own);\n }\n\n .MessageOutgoingStatus {\n margin-left: -0.1875rem;\n font-size: 1.1875rem;\n border-radius: 0.625rem;\n\n .Message.own & {\n color: var(--color-accent-own);\n }\n }\n\n .message-content.has-replies:not(.custom-shape) & {\n bottom: 3.375rem;\n }\n\n .message-content.has-replies.text:not(.custom-shape) & {\n bottom: 3.4375rem;\n }\n\n &[dir=\"rtl\"] {\n .message-views {\n order: 10;\n }\n .icon-channelviews {\n order: 9;\n }\n }\n}\n\n.Message:not(.own) {\n .custom-shape .reply-message + .MessageMeta {\n right: auto;\n left: 13.25rem;\n bottom: 0.25rem;\n }\n\n .emoji-only-1 .reply-message + .MessageMeta {\n left: 2.5rem;\n }\n\n .emoji-only-2 .reply-message + .MessageMeta {\n left: 5.5rem;\n }\n\n .emoji-only-3 .reply-message + .MessageMeta {\n left: 6.5rem;\n }\n}\n",".Sticker {\n &:not(.inactive) {\n cursor: pointer;\n }\n\n &.inactive {\n pointer-events: none;\n }\n}\n",".Contact {\n display: flex;\n align-items: center;\n padding: 0.25rem;\n\n &.interactive {\n cursor: pointer;\n }\n\n .Avatar {\n margin-right: 0.8125rem;\n }\n\n .contact-info {\n padding: 0.5rem;\n padding-left: 0;\n white-space: nowrap;\n overflow: hidden;\n\n .contact-name {\n font-size: 1rem;\n line-height: 1rem;\n margin-bottom: 0.25rem;\n font-weight: 500;\n }\n\n .contact-phone {\n line-height: 1rem;\n color: var(--secondary-color);\n }\n }\n}\n\n\n",".PollOption {\n display: flex;\n flex-flow: row nowrap;\n margin-bottom: 0.75rem;\n\n &:last-child {\n margin-bottom: 0;\n }\n\n .poll-option-text {\n word-break: break-word;\n }\n\n .poll-option-share {\n position: relative;\n margin-top: 0.125rem;\n width: 1.75rem;\n margin-inline-end: 0.5rem;\n flex-shrink: 0;\n font-weight: 500;\n font-size: 0.875rem;\n text-align: right;\n\n &.limit-width {\n display: inline-flex;\n justify-content: center;\n font-size: 0.75rem;\n }\n }\n\n .poll-option-chosen {\n position: absolute;\n right: 0;\n bottom: -5px;\n width: 1rem;\n height: 1rem;\n background: var(--accent-color);\n color: var(--background-color);\n border-radius: 0.5rem;\n font-size: 0.75rem;\n text-align: center;\n\n &.wrong {\n background: var(--color-error);\n }\n\n .is-forwarded & > i {\n margin-left: 1px;\n }\n\n &.animate {\n opacity: 0;\n animation-name: PollOptionIconAnimate;\n animation-delay: 0.09s;\n animation-duration: 0.3s;\n animation-fill-mode: forwards;\n }\n }\n\n .poll-option-right {\n flex-grow: 1;\n line-height: 1.5rem;\n }\n\n .poll-option-answer {\n position: relative;\n }\n\n .poll-option-line {\n position: relative;\n width: 0;\n height: 0.25rem;\n min-width: 0.5rem;\n border-radius: 0.125rem;\n margin-top: 0.5rem;\n background: var(--accent-color);\n\n transform-origin: 0 0;\n transition: transform 0.3s;\n transition-delay: 0.09s;\n }\n\n .poll-line {\n width: 30px;\n height: 35px;\n position: absolute;\n left: -27px;\n bottom: -5px;\n transition: stroke-dashoffset 0.3s, stroke-dasharray 0.3s;\n stroke-dashoffset: 0;\n stroke-dasharray: 0, 200%;\n }\n\n .poll-line path {\n stroke-width: 4px;\n stroke-linecap: round;\n stroke: var(--accent-color);\n fill: none;\n }\n\n .wrong {\n .poll-option-line {\n background: var(--color-error);\n }\n\n .poll-line path {\n stroke: var(--color-error);\n }\n }\n}\n\n@keyframes PollOptionIconAnimate {\n 0% {\n opacity: 0;\n }\n 100% {\n opacity: 1;\n }\n}\n",".Poll {\n min-width: 15rem;\n text-align: initial;\n\n @media (max-width: 600px) {\n min-width: 50vw;\n }\n\n .poll-question {\n font-weight: 500;\n line-height: 1.25rem;\n margin: 0.125rem 0;\n word-break: break-word;\n }\n\n .poll-type,\n .poll-voters-count {\n color: var(--secondary-color);\n font-size: 0.875rem;\n }\n\n .poll-type {\n margin-bottom: 0.5rem;\n display: flex;\n align-items: center;\n min-height: 1.375rem;\n }\n\n .poll-voters-count {\n margin: 0.4375rem 0 1.125rem;\n text-align: center;\n }\n\n .poll-answers {\n padding-top: 0.25rem;\n padding-bottom: 1rem;\n }\n\n .Checkbox,\n .Radio {\n padding-left: 2.25rem;\n\n &:last-child {\n margin-bottom: 0.75rem;\n }\n\n &.disabled {\n opacity: 1 !important;\n cursor: not-allowed;\n }\n\n .Checkbox-main,\n .Radio-main {\n &::before {\n left: 0.125rem;\n background-color: var(--background-color);\n\n .theme-dark & {\n --color-borders: var(--color-borders-input);\n }\n\n .Message.own & {\n --color-borders: var(--accent-color);\n }\n }\n\n &::after {\n left: 0.4375rem;\n background-color: var(--accent-color);\n }\n }\n\n input:checked ~ .Radio-main,\n input:checked ~ .Checkbox-main {\n &::before {\n border-color: var(--accent-color);\n }\n }\n\n .Spinner {\n left: 0.125rem;\n }\n }\n\n .Checkbox {\n .Checkbox-main {\n &::after {\n left: 0.125rem;\n background-color: var(--color-primary);\n\n .Message.own & {\n background-color: var(--accent-color);\n }\n }\n }\n }\n\n .Spinner > div {\n // gray spinner\n background-image: var(--spinner-gray-data);\n\n .theme-dark & {\n background-image: var(--spinner-white-data);\n }\n\n .Message.own & {\n // green spinner\n background-image: var(--spinner-green-data);\n .theme-dark & {\n background-image: var(--spinner-white-data);\n }\n }\n }\n\n .poll-recent-voters {\n display: inline-flex;\n align-items: center;\n vertical-align: text-bottom;\n margin-left: 0.875rem;\n margin-right: 0.5rem;\n margin-top: -2px;\n\n .Avatar {\n border: 0.0625rem solid var(--color-white);\n margin-right: 0;\n box-sizing: content-box;\n\n .Message.own & {\n border: 0.0625rem solid var(--secondary-color);\n }\n\n &:not(:first-child) {\n margin-left: -3px;\n }\n }\n }\n\n .poll-countdown {\n margin-left: auto;\n font-size: 0.75rem;\n transition: color 0.2s;\n\n &.hurry-up {\n color: var(--color-error);\n\n .poll-countdown-progress {\n stroke: var(--color-error);\n }\n }\n\n svg {\n vertical-align: -3px;\n }\n }\n\n .poll-countdown-progress {\n stroke: var(--color-primary);\n fill: transparent;\n stroke-width: 2;\n stroke-linecap: round;\n transition: stroke-dashoffset 2s, stroke 0.2s;\n }\n\n .poll-quiz-help {\n margin: -0.625rem 0 -0.625rem auto;\n .Message:not(.own) & {\n color: var(--color-primary);\n }\n }\n\n .poll-results,\n .poll-answers {\n padding-top: 0.25rem;\n padding-bottom: 0.5rem;\n }\n\n .Button {\n text-transform: none;\n font-size: 1rem;\n\n .Message.own & {\n color: var(--accent-color);\n --color-primary-shade-rgb: var(--color-accent-own);\n }\n }\n\n > .Button {\n margin-bottom: 0.625rem;\n }\n}\n",".WebPage {\n margin-top: 0.25rem;\n margin-bottom: 0.125rem;\n padding-left: 0.625rem;\n font-size: calc(var(--message-text-size, 1rem) - 0.125rem);\n line-height: 1.125rem;\n max-width: 29rem;\n position: relative;\n\n &::before {\n content: \"\";\n display: block;\n position: absolute;\n top: 0;\n bottom: 0;\n left: 0;\n width: 0.125rem;\n background: var(--accent-color);\n border-radius: 0.125rem;\n }\n\n &-text {\n display: flex;\n flex-direction: column;\n align-items: flex-start;\n }\n\n .media-inner {\n margin: 0 !important;\n margin-bottom: 0.375rem !important;\n\n &,\n & img,\n &.small-image img {\n border-radius: var(--border-radius-messages-small) !important;\n }\n\n &.square-image {\n width: 5rem;\n height: 5rem;\n min-height: 0;\n margin-bottom: 0 !important;\n\n img {\n width: 100%;\n height: 100%;\n }\n }\n }\n\n &.with-video .media-inner {\n margin-top: 0.5rem !important;\n margin-bottom: 1rem !important;\n }\n\n &.with-square-photo {\n display: flex;\n margin-bottom: 1rem;\n\n .WebPage-text {\n order: 1;\n padding-right: 1rem;\n }\n\n .media-inner {\n order: 2;\n flex-shrink: 0;\n }\n\n &:dir(rtl) {\n .WebPage-text {\n padding-inline-end: 1rem;\n }\n }\n }\n\n &:not(.with-square-photo) {\n .site-name,\n .site-title,\n .site-description {\n &:last-child::after {\n content: \"\";\n display: inline-block;\n width: var(--meta-safe-area-size);\n height: 0.75rem;\n float: right;\n }\n }\n }\n\n .site-name,\n .site-description,\n .site-title {\n word-break: break-word;\n max-width: 100%;\n }\n\n .site-name {\n color: var(--accent-color);\n font-weight: 500;\n margin-bottom: 0.125rem;\n }\n\n .site-title {\n font-weight: 500;\n margin-bottom: 0.125rem;\n }\n\n .site-description {\n line-height: 1.25;\n margin-bottom: 0;\n\n body.is-ios & {\n line-height: 1.125rem;\n }\n }\n\n &:dir(rtl) {\n padding-inline-start: 0.625rem;\n\n &::before {\n left: auto;\n right: 0;\n }\n }\n}\n",".Invoice {\n .title {\n color: var(--accent-color);\n font-weight: 500;\n }\n\n .description {\n position: relative;\n\n &.has-image {\n .invoice-image {\n max-width: 100%;\n height: 20rem;\n\n @media (max-width: 600px) {\n height: 10rem;\n }\n }\n\n .description-text {\n position: absolute;\n top: 0;\n padding: 0.25rem 0.5rem;\n margin: 0.25rem;\n background-color: rgba(90, 110, 70, 0.6);\n border-radius: var(--border-radius-messages-small);\n color: var(--color-text);\n font-weight: 500;\n\n span {\n margin-left: 0.5rem;\n }\n }\n }\n }\n}\n",".Skeleton {\n position: relative;\n background-color: var(--color-skeleton-background);\n &.round {\n border-radius: 50%;\n }\n\n &.rounded-rect {\n border-radius: 1rem;\n }\n\n &.pulse::before {\n content: \"\";\n display: block;\n width: 100%;\n height: 100%;\n background-color: var(--color-skeleton-foreground);\n animation: skeleton-pulse 2s ease-in-out 0.5s infinite;\n\n @keyframes skeleton-pulse {\n 0% {\n opacity: 1;\n }\n 50% {\n opacity: 0.4;\n }\n 100% {\n opacity: 1;\n }\n }\n }\n\n &.wave::before {\n content: \"\";\n display: block;\n width: 100%;\n height: 100%;\n background: linear-gradient(to right, transparent 0%, var(--color-skeleton-foreground) 50%, transparent 100%);\n animation: skeleton-wave 2s cubic-bezier(0.4, 0, 0.6, 1) infinite;\n\n @keyframes skeleton-wave {\n 0% {\n transform: translateX(-100%);\n }\n 50% {\n transform: translateX(100%);\n }\n 100% {\n transform: translateX(100%);\n }\n }\n }\n}\n",".Location {\n display: flex;\n flex-direction: column;\n align-items: flex-start;\n margin-bottom: 0 !important;\n\n .location-accuracy {\n position: absolute;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n border-radius: 50%;\n\n @keyframes accuracy-wave {\n 0% {\n transform: translate(-50%, -50%) scale(0);\n background-color: var(--color-primary);\n }\n 100% {\n transform: translate(-50%, -50%) scale(1);\n background-color: transparent;\n }\n }\n\n animation: accuracy-wave 5s ease-out infinite forwards;\n }\n\n @keyframes fade-in {\n from {\n opacity: 0;\n }\n to {\n opacity: 1;\n }\n }\n\n .map-wrapper {\n overflow: hidden;\n position: relative;\n }\n\n .map {\n animation: fade-in 0.3s forwards;\n }\n\n .pin {\n position: absolute;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -100%);\n animation: fade-in 0.3s forwards;\n\n --pin-color: var(--color-primary);\n }\n\n .geoLive {\n &::before {\n content: \"\";\n position: absolute;\n bottom: 0;\n left: 50%;\n transform: translate(-50%, 50%);\n\n width: 1rem;\n height: 1rem;\n\n background: var(--color-primary);\n border: 2px solid white;\n border-radius: 50%;\n z-index: 3;\n }\n\n .round-pin {\n bottom: 0.5rem;\n }\n }\n\n .direction {\n position: absolute;\n top: 50%;\n left: 50%;\n transition: transform 0.3s ease-out;\n transform: translate(-50%, 0.3125rem) rotate(var(--direction));\n transform-origin: bottom;\n width: 1.5rem;\n height: 2rem;\n clip-path: polygon(50% 100%, 0 0, 100% 0);\n background: radial-gradient(circle, var(--color-primary) -100%, transparent 100%);\n border-radius: 40%;\n z-index: 2;\n }\n\n .location-avatar {\n position: relative;\n overflow: hidden;\n margin-right: 0;\n margin-bottom: 1.3125rem;\n\n z-index: 5;\n }\n\n .venue-icon {\n position: absolute;\n bottom: -0.5rem;\n left: 50%;\n transform: translate(-50%, -50%);\n width: 3rem;\n height: 3rem;\n\n z-index: 5;\n }\n\n .geo {\n height: 2.5rem;\n }\n\n .geoLive,\n .venue {\n filter: drop-shadow(0 0 2px var(--color-default-shadow));\n }\n\n .expired {\n --pin-color: white;\n\n .location-avatar::after {\n content: \"\";\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n background-color: rgba(255, 255, 255, 0.3);\n }\n }\n\n .round-pin {\n fill: var(--pin-color);\n\n position: absolute;\n left: 50%;\n bottom: 0;\n transform: translate(-50%, 0);\n width: 5rem;\n\n z-index: 4;\n }\n\n .location-info {\n display: grid;\n grid-template-columns: 1fr auto;\n grid-template-rows: 1fr 1fr;\n width: 100%;\n padding: 0.3125rem 0.5rem 0.375rem;\n\n &-title {\n font-weight: 500;\n grid-area: 1 / 1 / 2 / 2;\n }\n\n &-subtitle {\n color: var(--color-text-secondary);\n line-height: 1;\n font-size: 0.875rem;\n grid-area: 2 / 1 / 2 / 2;\n\n .Message.own & {\n color: var(--color-message-meta-own);\n }\n }\n }\n\n .geo-countdown {\n grid-area: 1 / 2 / 3 / 3;\n position: relative;\n width: 2rem;\n height: 2rem;\n }\n\n .geo-countdown-text {\n color: var(--accent-color);\n position: absolute;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n font-size: 0.875rem;\n font-weight: 500;\n }\n\n .geo-countdown-progress {\n stroke: var(--accent-color);\n fill: transparent;\n stroke-width: 2;\n stroke-linecap: round;\n transition: stroke-dashoffset 2s, stroke 0.2s;\n }\n}\n",".Album {\n position: relative;\n overflow: hidden;\n\n .message-content.media.text & {\n margin: -0.3125rem -0.5rem 0.3125rem;\n }\n\n body.is-ios .Message.own .message-content.has-solid-background :not(.forwarded-message) & {\n margin: -0.3125rem -0.5rem 0.3125rem -0.625rem;\n }\n\n .forwarded-message & {\n margin-bottom: 0.125rem;\n\n .message-content.media.text & {\n margin: 0 0 0.3125rem;\n --border-bottom-left-radius: inherit;\n --border-bottom-right-radius: inherit;\n }\n }\n\n &,\n .message-content.media.text & {\n > .album-item-select-wrapper .media-inner {\n margin: 0 !important;\n }\n }\n\n > .album-item-select-wrapper .media-inner {\n &,\n & img,\n & video {\n border-radius: 0 !important;\n object-fit: cover;\n }\n }\n}\n",".RoundVideo {\n position: relative;\n width: 15rem;\n height: 15rem;\n cursor: pointer;\n\n .thumbnail-wrapper {\n width: 15rem;\n height: 15rem;\n border-radius: 50%;\n overflow: hidden;\n }\n\n .video-wrapper {\n position: absolute;\n left: 0;\n top: 0;\n border-radius: 50%;\n overflow: hidden;\n }\n\n .progress {\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n pointer-events: none;\n }\n\n .progress-circle {\n stroke: white;\n fill: transparent;\n stroke-width: 4;\n stroke-opacity: 0.35;\n stroke-linecap: round;\n }\n\n video::-internal-media-controls-cast-button,\n video::-webkit-media-controls,\n video::-webkit-media-controls-start-playback-button {\n display: none;\n }\n}\n",".InlineButtons {\n display: flex;\n flex-direction: column;\n\n .row {\n display: flex;\n flex-direction: row;\n }\n\n .Button {\n flex: 1;\n width: auto;\n margin: 0.125rem;\n background: var(--pattern-color);\n border-radius: var(--border-radius-messages-small);\n font-weight: 500;\n text-transform: none;\n\n &::before {\n content: \"\";\n background-color: var(--color-white);\n opacity: 0;\n\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n border-radius: var(--border-radius-messages-small);\n z-index: var(--z-below);\n transition: opacity 200ms;\n }\n\n &:hover {\n background: var(--pattern-color) !important;\n\n &::before {\n opacity: 0.4;\n }\n }\n\n &:first-of-type {\n margin-left: 0;\n }\n\n &:last-of-type {\n margin-right: 0;\n }\n\n i {\n font-size: 0.875rem;\n position: absolute;\n right: 0.1875rem;\n top: 0.1875rem;\n display: block;\n\n &.icon-arrow-right {\n font-size: 0.75rem;\n top: 0.125rem;\n right: 0.125rem;\n transform: rotate(-45deg);\n }\n }\n }\n\n .row:first-of-type .Button {\n margin-top: 0.25rem !important;\n }\n\n .row:last-of-type .Button {\n margin-bottom: 0;\n\n &:first-of-type {\n border-bottom-left-radius: var(--border-radius-messages);\n }\n\n &:last-of-type {\n border-bottom-right-radius: var(--border-radius-messages);\n }\n }\n}\n",".CommentButton {\n --background-color: var(--color-background);\n --hover-color: var(--color-chat-hover);\n\n display: flex;\n width: 100%;\n align-items: center;\n padding: 0.5625rem 0.25rem 0.5625rem 0.625rem;\n padding-inline-start: 0.625rem;\n padding-inline-end: 0.25rem;\n background: var(--background-color);\n border-bottom-right-radius: var(--border-bottom-right-radius);\n border-bottom-left-radius: var(--border-bottom-left-radius);\n font-size: 0.9375rem;\n font-weight: 500;\n line-height: 2rem;\n color: var(--accent-color);\n white-space: nowrap;\n cursor: pointer;\n transition: background-color 0.15s, color 0.15s;\n user-select: none;\n\n body.animation-level-0 & {\n transition: none !important;\n }\n\n .Message .has-appendix &::before {\n content: \"\";\n display: block;\n position: absolute;\n bottom: -0.1875rem;\n left: -0.5625rem;\n width: 0.5625rem;\n height: 1.25rem;\n background-position: bottom left;\n background-image: url('data:image/svg+xml,%3Csvg width=\"9\" height=\"20\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\"%3E%3Cdefs%3E%3Cfilter x=\"-50%25\" y=\"-14.7%25\" width=\"200%25\" height=\"141.2%25\" filterUnits=\"objectBoundingBox\" id=\"a\"%3E%3CfeOffset dy=\"1\" in=\"SourceAlpha\" result=\"shadowOffsetOuter1\"/%3E%3CfeGaussianBlur stdDeviation=\"1\" in=\"shadowOffsetOuter1\" result=\"shadowBlurOuter1\"/%3E%3CfeColorMatrix values=\"0 0 0 0 0.0621962482 0 0 0 0 0.138574144 0 0 0 0 0.185037364 0 0 0 0.15 0\" in=\"shadowBlurOuter1\"/%3E%3C/filter%3E%3Cpath d=\"M3 17h6V0c-.193 2.84-.876 5.767-2.05 8.782-.904 2.325-2.446 4.485-4.625 6.48A1 1 0 003 17z\" id=\"b\"/%3E%3C/defs%3E%3Cg fill=\"none\" fill-rule=\"evenodd\"%3E%3Cuse fill=\"%23000\" filter=\"url(%23a)\" xlink:href=\"%23b\"/%3E%3Cuse fill=\"%23FFF\" xlink:href=\"%23b\"/%3E%3C/g%3E%3C/svg%3E');\n opacity: 0;\n transition: opacity 0.15s, filter 0.15s;\n\n .theme-dark #root & {\n filter: invert(0.83);\n }\n\n body.animation-level-0 & {\n transition: none !important;\n }\n }\n\n .custom-shape & {\n position: absolute;\n right: -3rem;\n width: 2.25rem;\n bottom: 3rem;\n height: 3.375rem;\n border-radius: 1.375rem;\n padding: 0.375rem 0.3125rem 0.25rem;\n align-items: flex-start;\n color: white;\n background-color: rgba(0, 0, 0, 0.2);\n\n opacity: 0;\n transition: opacity 0.2s ease;\n\n @media (pointer: coarse) {\n opacity: 1 !important;\n }\n\n &:hover {\n background-color: rgba(0, 0, 0, 0.28);\n }\n\n .Message:hover & {\n opacity: 1;\n }\n\n &::after {\n content: attr(data-cnt);\n position: absolute;\n bottom: -0.0625rem;\n left: 0;\n width: 100%;\n text-align: center;\n font-size: 12px;\n display: block;\n }\n\n &[data-cnt=\"0\"] {\n height: 2.25rem;\n &::after {\n display: none;\n }\n }\n\n .icon-comments-sticker {\n display: block;\n font-size: 1.5rem;\n margin: 0 auto;\n }\n\n .recent-repliers,\n .icon-comments,\n .label,\n .icon-next {\n display: none;\n }\n }\n\n &:hover {\n background: var(--hover-color);\n\n .Message .has-appendix &::before {\n opacity: 1;\n }\n\n .Avatar {\n border-color: var(--hover-color) !important;\n }\n }\n\n .is-forwarded &,\n .audio &,\n .voice &,\n .poll &,\n .text & {\n border-top: 1px solid var(--color-borders);\n }\n\n .message-content.has-solid-background & {\n margin: 0.375rem -0.5rem -0.375rem;\n }\n\n .message-content.voice & {\n margin-bottom: -0.5rem;\n }\n\n .message-content.audio & {\n margin-bottom: -0.8125rem;\n }\n\n .message-content.audio &,\n .message-content.voice &,\n .message-content.poll &,\n .message-content.has-solid-background.text &,\n .message-content.has-solid-background.is-forwarded & {\n width: calc(100% + 1rem);\n }\n\n .icon-comments-sticker {\n display: none;\n }\n\n .icon-comments {\n font-size: 1.5625rem;\n line-height: 2rem;\n margin-inline-end: 0.875rem;\n }\n\n .icon-next {\n margin-inline-start: auto;\n font-size: 1.5rem;\n }\n\n .recent-repliers {\n display: inline-flex;\n align-items: center;\n margin-inline-end: 0.5rem;\n margin-inline-start: -0.125rem;\n\n .Avatar {\n /* stylelint-disable-next-line plugin/no-low-performance-animation-properties */\n transition: border 0.15s;\n border: 2px solid var(--color-background);\n margin-inline-end: 0;\n z-index: 3;\n overflow: hidden;\n\n .emoji {\n width: 1rem;\n background-size: 1rem;\n }\n\n + .Avatar {\n z-index: 2;\n\n + .Avatar {\n z-index: 1;\n }\n }\n\n &:not(:first-child) {\n margin-inline-start: -0.75rem;\n }\n }\n }\n\n &.has-unread .label {\n position: relative;\n\n &::after {\n content: \"\";\n display: inline-block;\n width: 0.5rem;\n height: 0.5rem;\n border-radius: 50%;\n background: var(--accent-color);\n margin-inline-start: 0.75rem;\n }\n }\n\n &.disabled {\n cursor: default;\n pointer-events: none;\n }\n}\n",".Reactions {\n display: flex;\n flex-direction: row;\n width: 100%;\n flex-wrap: wrap;\n margin-top: 0.25rem;\n overflow: visible;\n\n .Button {\n --reaction-background: var(--color-reaction);\n display: flex;\n flex-direction: row;\n height: 1.75rem;\n white-space: nowrap;\n width: auto;\n margin: 0.125rem;\n padding: 0 0.5rem;\n border: 2px solid transparent;\n background-color: var(--reaction-background) !important;\n border-radius: 1.75rem;\n font-weight: 500;\n font-variant-numeric: tabular-nums;\n text-transform: none;\n color: var(--accent-color);\n overflow: visible;\n\n .ReactionAnimatedEmoji, .icon-reaction-filled {\n width: 1.125rem;\n height: 1.125rem;\n margin-right: 0.25rem;\n }\n\n .avatars {\n display: flex;\n\n .Avatar {\n margin: 0 0 0 -0.25rem;\n border: 0.0625rem solid var(--reaction-background);\n width: 1.25rem;\n height: 1.25rem;\n\n &:first-child {\n margin: 0;\n }\n }\n }\n\n &.chosen {\n border-color: var(--accent-color);\n position: relative;\n z-index: 1;\n }\n\n &:hover {\n --reaction-background: var(--hover-color-reaction);\n }\n\n &:first-of-type {\n margin-left: 0;\n }\n\n &:last-of-type {\n margin-right: 0;\n }\n }\n\n &.is-outside {\n margin-top: 0.125rem;\n }\n\n .own &.is-outside {\n flex-direction: row-reverse;\n }\n\n &.is-outside .Button {\n --reaction-background: var(--pattern-color);\n color: white;\n .theme-dark & {\n color: var(--accent-color);\n }\n\n &.chosen {\n border-color: white;\n\n .theme-dark & {\n border-color: var(--accent-color);\n }\n }\n }\n}\n",".message-content {\n position: relative;\n max-width: var(--max-width);\n\n @media (max-width: 600px) {\n max-width: min(29rem, calc(100vw - 6.25rem));\n .MessageList.no-avatars & {\n max-width: min(29rem, calc(100vw - 3.75rem));\n }\n .Message.own & {\n max-width: min(30rem, calc(100vw - 3.75rem));\n }\n\n &.has-action-button {\n max-width: min(29rem, calc(100vw - 7rem));\n .MessageList.no-avatars & {\n max-width: min(29rem, calc(100vw - 4.5rem));\n }\n .Message.own & {\n max-width: min(30rem, calc(100vw - 4.5rem));\n }\n }\n }\n\n img {\n -webkit-touch-callout: none;\n user-select: none;\n }\n\n .emoji {\n -webkit-user-drag: none;\n user-select: text;\n }\n\n .text-content {\n margin: 0;\n word-break: break-word;\n white-space: pre-wrap;\n line-height: 1.3125;\n text-align: initial;\n display: flow-root;\n unicode-bidi: plaintext;\n }\n\n .text-entity-link {\n unicode-bidi: plaintext;\n }\n\n &:not(.custom-shape) .text-content,\n &.document {\n & > .MessageMeta {\n position: relative;\n top: 0.375rem;\n bottom: auto !important;\n float: right;\n line-height: 1.35;\n height: calc(var(--message-meta-height, 1rem));\n margin-left: 0.4375rem;\n margin-right: -0.5rem;\n\n .MessageOutgoingStatus .Transition {\n max-height: calc(var(--message-meta-height, 1rem));\n overflow: hidden;\n }\n\n html[data-message-text-size=\"12\"] & {\n top: 0.25rem;\n }\n\n html[data-message-text-size=\"17\"] & {\n top: 0.4375rem;\n }\n\n html[data-message-text-size=\"18\"] &,\n html[data-message-text-size=\"19\"] & {\n top: 0.5rem;\n }\n\n html[data-message-text-size=\"20\"] & {\n top: 0.5625rem;\n }\n }\n\n &:dir(rtl) {\n & > .MessageMeta {\n float: left;\n margin-left: -0.25rem;\n margin-right: 0.4375rem;\n }\n }\n }\n\n .MessageMeta.reactions-offset {\n position: relative;\n top: 0.375rem;\n bottom: auto !important;\n float: right;\n line-height: 1;\n height: calc(var(--message-meta-height, 1rem));\n margin-left: auto;\n margin-right: -0.5rem;\n align-self: flex-end;\n\n .MessageOutgoingStatus .Transition {\n max-height: calc(var(--message-meta-height, 1rem));\n overflow: hidden;\n }\n\n html[data-message-text-size=\"12\"] & {\n top: 0.25rem;\n }\n\n html[data-message-text-size=\"17\"] & {\n top: 0.4375rem;\n }\n\n html[data-message-text-size=\"18\"] &,\n html[data-message-text-size=\"19\"] & {\n top: 0.5rem;\n }\n\n html[data-message-text-size=\"20\"] & {\n top: 0.5625rem;\n }\n }\n\n &.document:not(.text) {\n &::after {\n content: \"\";\n display: block;\n clear: both;\n }\n\n & > .MessageMeta {\n top: auto !important;\n bottom: -0.5rem !important;\n margin-top: -0.25rem;\n\n &:not([dir=\"rtl\"]) {\n margin-top: -1.25rem;\n }\n }\n }\n\n .theme-dark .Message.own & {\n .text-entity-link {\n text-decoration: underline !important;\n\n &:hover {\n text-decoration: none !important;\n }\n }\n }\n\n &:not(.custom-shape) {\n font-size: var(--message-text-size, 1rem);\n\n body.is-ios & {\n font-size: var(--message-text-size, 1.0625rem);\n }\n\n & > .content-inner {\n min-width: 0;\n }\n }\n\n .matching-text-highlight {\n color: var(--color-text);\n background: #cae3f7;\n border-radius: 0.25rem;\n padding: 0 0.125rem;\n\n .theme-dark & {\n --color-text: #000;\n }\n }\n\n .message-title {\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n font-size: calc(var(--message-text-size, 1rem) - 0.125rem);\n font-weight: 500;\n line-height: 1.25rem;\n color: var(--accent-color);\n unicode-bidi: plaintext;\n display: flex;\n\n & > .interactive {\n overflow: hidden;\n text-overflow: ellipsis;\n }\n\n &.interactive,\n & > .interactive {\n cursor: pointer;\n\n &:hover {\n opacity: 0.85;\n }\n }\n\n & > .color-1 {\n color: var(--color-user-1);\n }\n\n & > .color-2 {\n color: var(--color-user-2);\n }\n\n & > .color-4 {\n color: var(--color-user-4);\n }\n\n & > .color-5 {\n color: var(--color-user-5);\n }\n\n & > .color-6 {\n color: var(--color-user-6);\n }\n\n & > .color-7 {\n color: var(--color-user-7);\n }\n\n & > .color-8 {\n color: var(--color-user-8);\n }\n\n .theme-dark .Message.own & > .color-1 {\n color: var(--accent-color);\n }\n\n & + .File {\n margin-top: 0.25rem;\n }\n\n .via {\n padding-right: 0.25rem;\n font-weight: 400;\n }\n\n span + .via {\n padding-left: 0.25rem;\n }\n\n .admin-title {\n flex: 1;\n margin-left: 1rem;\n text-align: right;\n font-weight: 400;\n font-size: 0.75rem;\n margin-top: -0.125rem;\n color: rgba(var(--color-text-meta-rgb), 0.75);\n\n .Message.own & {\n color: var(--accent-color);\n }\n }\n }\n\n &.has-shadow {\n box-shadow: 0 1px 2px var(--color-default-shadow);\n }\n\n &.has-solid-background,\n &.has-background,\n .is-album & {\n background: var(--background-color);\n }\n\n &.has-solid-background {\n padding: 0.3125rem 0.5rem 0.375rem;\n\n .forwarded-message > .text-content:not(.with-meta):last-child::after {\n content: \"\";\n display: inline-block;\n width: var(--meta-safe-area-size);\n height: 1rem;\n }\n }\n\n body.is-ios &.has-solid-background {\n padding-bottom: 0.4375rem;\n }\n\n body.is-ios .Message.own &.has-solid-background {\n padding-left: 0.625rem;\n }\n\n &:not(.has-appendix) .svg-appendix {\n display: none;\n }\n\n .svg-appendix {\n overflow: hidden;\n position: absolute;\n bottom: -0.0625rem;\n width: 0.5625rem;\n height: 1.125rem;\n font-size: 1rem !important;\n\n .corner {\n fill: var(--background-color);\n }\n\n .Message.own & {\n /* stylelint-disable-next-line plugin/whole-pixel */\n right: -0.551rem; // This value is correct. Safari fix\n }\n\n .Message:not(.own) & {\n /* stylelint-disable-next-line plugin/whole-pixel */\n left: -0.562rem; // This value is correct. Safari fix\n }\n }\n\n &[data-has-custom-appendix] {\n .svg-appendix .corner {\n fill: var(--appendix-bg);\n }\n }\n\n &.has-appendix-thumb {\n .Message & {\n .svg-appendix {\n --background-color: #ccc;\n opacity: 1;\n transition: opacity 500ms ease;\n }\n }\n }\n\n &.document {\n padding: 0.5rem !important;\n\n .File {\n .theme-dark & {\n --color-primary: var(--color-selection-highlight);\n }\n }\n\n .File + .text-content {\n margin-top: 0.3125rem;\n }\n }\n\n &.voice,\n &.audio {\n .message-title,\n .Embedded {\n margin-top: -0.1875rem;\n margin-bottom: 0.1875rem;\n }\n }\n\n &.voice {\n padding: 0.5rem !important;\n\n .Voice + .text-content {\n margin-top: 0.5rem;\n }\n }\n\n &.audio {\n min-width: 20rem;\n padding: 0.5rem 0.5rem 0.8125rem !important;\n\n @media (max-width: 600px) {\n min-width: 17rem;\n }\n\n .Audio + .text-content {\n margin-top: 0.25rem;\n }\n\n &:not(.has-replies) {\n .Audio + .text-content {\n margin-bottom: -0.4375rem;\n }\n }\n }\n\n &:not(.custom-shape) .emoji {\n display: inline-block;\n width: 1.25rem;\n background-size: 1.25rem;\n color: transparent;\n margin-inline-end: 1px;\n vertical-align: text-bottom;\n\n &::selection {\n background-color: var(--color-selection-highlight-emoji);\n color: transparent;\n }\n }\n\n &:not(.custom-shape) .text-content .emoji {\n width: calc(1.25 * var(--message-text-size, 1rem));\n height: calc(1.25 * var(--message-text-size, 1rem));\n background-size: calc(1.25 * var(--message-text-size, 1rem));\n }\n\n .no-media-corners {\n --border-top-left-radius: 0;\n --border-top-right-radius: 0;\n }\n\n &.custom-shape.is-via-bot {\n font-size: inherit !important;\n\n .content-inner > .message-title {\n display: inline-flex;\n position: relative;\n top: 0.125rem;\n max-width: calc(100% - 3rem);\n margin-left: calc(100% - 3rem);\n padding: 0 0.5rem;\n background-color: var(--background-color);\n border-radius: var(--border-radius-messages);\n\n .Message.own & {\n margin-left: -3rem;\n }\n }\n\n .media-inner {\n margin-top: 0.375rem;\n }\n }\n}\n\n.message-content.media,\n.WebPage {\n .media-inner {\n display: flex;\n justify-content: center;\n align-items: center;\n\n &.interactive {\n cursor: pointer;\n\n &.dark video {\n background-color: #232323;\n }\n }\n }\n\n &.round.is-reply {\n width: auto !important;\n }\n\n &.force-sender-name .media-inner,\n &.force-sender-name .Album,\n &.text .media-inner,\n &.is-via-bot .media-inner,\n &.is-reply .media-inner,\n &.is-reply .Album {\n margin-left: -0.5rem;\n margin-right: -0.5rem;\n\n body.is-ios .Message.own & {\n margin-left: -0.625rem;\n }\n }\n\n &.text .media-inner {\n margin-top: -0.3125rem;\n }\n\n &.is-reply .media-inner,\n &.force-sender-name .Album,\n &.is-reply .Album,\n .message-title ~ .media-inner {\n margin-top: 0.375rem;\n margin-bottom: -0.375rem;\n\n body.is-ios .Message.own & {\n margin-bottom: -0.4375rem;\n }\n }\n\n &:not(.text) .RoundVideo {\n margin-bottom: 0;\n }\n\n // Moved below .is-reply to overwrite its styles\n &.text .media-inner,\n &.text .Album {\n margin-bottom: 0.375rem;\n\n body.is-ios .Message.own & {\n margin-bottom: 0.375rem;\n }\n }\n\n .media-loading {\n display: flex;\n align-items: center;\n justify-content: center;\n\n &:not(.open) {\n opacity: 0.5;\n transform: scale(0);\n transition: opacity 0.3s ease, transform 0.3s ease;\n }\n }\n\n .icon-large-play,\n .icon-download {\n position: absolute;\n display: flex;\n align-items: center;\n justify-content: center;\n color: #fff;\n opacity: 0.7;\n transition: opacity 150ms;\n\n &:hover {\n opacity: 1;\n }\n\n &:before {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 3.375rem;\n height: 3.375rem;\n border-radius: 50%;\n background: rgba(black, 0.25);\n }\n\n &.opacity-transition {\n transition: opacity 0.15s ease;\n\n &:not(.open) {\n opacity: 0;\n }\n }\n }\n\n .icon-download {\n font-size: 1.5rem;\n }\n\n .icon-large-play {\n font-size: 2.5rem;\n }\n\n .message-media-duration,\n .message-transfer-progress {\n background: rgba(0, 0, 0, 0.25);\n color: #fff;\n font-size: 0.75rem;\n position: absolute;\n left: 0.1875rem;\n top: 0.1875rem;\n z-index: 1;\n padding: 0 0.375rem;\n border-radius: 0.75rem;\n line-height: 1.125rem;\n user-select: none;\n }\n\n .message-media-duration .icon-muted {\n vertical-align: -0.1875rem;\n margin-left: 0.375rem;\n font-size: 1.0625rem;\n }\n}\n\n.message-content.custom-shape {\n line-height: 1.2;\n display: flex;\n flex-wrap: wrap;\n align-items: flex-end;\n\n &.has-comments {\n min-height: 5.25rem;\n margin-top: 0 !important;\n\n &.has-replies {\n min-height: 6.5rem;\n }\n }\n\n &.is-reply {\n max-width: 100%;\n }\n\n .reply-message {\n display: flex;\n align-items: flex-start;\n flex-direction: row-reverse;\n direction: ltr;\n\n > p {\n margin-bottom: 0;\n }\n\n .EmbeddedMessage {\n margin-left: 0.5rem;\n border-radius: var(--border-radius-messages);\n\n @media (max-width: 600px) {\n max-width: calc(90vw - 13rem);\n }\n\n @media (max-width: 340px) {\n margin-left: -1rem;\n z-index: 1;\n max-width: calc(90vw - 12rem);\n }\n }\n }\n\n .text-content {\n margin-bottom: 1rem;\n }\n\n .media-inner {\n line-height: 1;\n font-size: 1rem;\n flex-shrink: 0;\n\n .full-media {\n top: 0;\n left: 0;\n bottom: 0;\n right: 0;\n }\n }\n\n .emoji {\n display: inline-block;\n color: transparent;\n\n &::selection {\n background-color: var(--color-selection-highlight-emoji);\n color: transparent;\n }\n }\n\n &.emoji-only {\n .text-content {\n margin-bottom: 0;\n text-shadow: 1px 1px 0 white, -1px -1px 0 white, -1px 1px 0 white, 1px -1px 0 white;\n img.emoji {\n filter: drop-shadow(1px 1px 0 white) drop-shadow(-1px 1px 0 white) drop-shadow(1px -1px 0 white)\n drop-shadow(-1px -1px 0 white);\n }\n\n .MessageMeta {\n text-shadow: none;\n }\n }\n }\n\n &.emoji-only-1 {\n min-width: 8rem;\n font-size: 4.5rem;\n\n .content-inner {\n height: 7rem;\n }\n\n .text-content {\n line-height: 1.5;\n text-align: center;\n }\n\n .Message.was-edited & {\n min-width: 10rem;\n }\n\n .emoji {\n width: 5rem;\n height: 5rem;\n }\n }\n\n &.emoji-only-2 {\n font-size: 4rem;\n margin-top: 0.5rem;\n min-width: 10rem;\n @media (max-width: 600px) {\n margin-top: 0.375rem;\n }\n\n &.has-comments {\n margin-top: 1.25rem;\n }\n\n .Message.was-edited & {\n min-width: 12rem;\n }\n\n .emoji {\n width: 4rem;\n height: 4rem;\n margin-right: 0.375rem;\n }\n }\n\n &.emoji-only-3 {\n font-size: 3rem;\n margin-top: 1.75rem;\n min-width: 12rem;\n\n &.has-comments {\n margin-top: 2.5rem;\n }\n\n .Message.was-edited & {\n min-width: 14rem;\n }\n\n .emoji {\n width: 3rem;\n height: 3rem;\n margin-right: 0.375rem;\n }\n }\n\n .Message:not(.own) & {\n --hover-color: var(--color-reply-hover);\n --active-color: var(--color-reply-active);\n }\n\n .Message.own & {\n --hover-color: var(--color-reply-own-hover);\n --active-color: var(--color-reply-own-active);\n\n .reply-message {\n flex-direction: row;\n\n .EmbeddedMessage {\n margin-right: 0.5rem;\n\n @media (max-width: 340px) {\n margin-left: 0;\n z-index: 1;\n max-width: calc(90vw - 11.5rem);\n }\n }\n }\n }\n}\n\n.forwarded-message {\n .message-content.contact &,\n .message-content.voice &,\n .message-content.poll & {\n // MessageOutgoingStatus's icon needs more space\n margin-bottom: 0.5rem;\n }\n\n .message-content:not(.custom-shape) & {\n position: relative;\n margin-top: 0.25rem;\n padding-left: 0.625rem;\n\n &::before {\n content: \"\";\n display: block;\n position: absolute;\n top: 0;\n bottom: 0;\n left: 0.0625rem;\n width: 2px;\n background: var(--accent-color);\n border-radius: 2px;\n }\n\n &:dir(rtl) {\n padding-inline-start: 0.625rem;\n\n &::before {\n left: auto;\n right: 0.0625rem;\n }\n }\n }\n\n --border-top-left-radius: var(--border-radius-messages-small);\n --border-top-right-radius: var(--border-radius-messages-small);\n --border-bottom-left-radius: var(--border-radius-messages-small);\n --border-bottom-right-radius: var(--border-radius-messages-small);\n\n > .media-inner {\n margin: 0 !important;\n margin-bottom: 0.25rem !important;\n }\n}\n\n.long-word-break-all {\n word-break: break-all;\n}\n\n.text-entity-link {\n color: var(--color-links) !important;\n text-decoration: none !important;\n word-break: break-word;\n cursor: pointer;\n unicode-bidi: initial;\n\n &:hover,\n &:active,\n &:visited {\n text-decoration: underline !important;\n }\n}\n\n.text-entity-code,\n.text-entity-pre {\n color: var(--color-code);\n background: var(--color-code-bg);\n white-space: pre-wrap;\n margin: 0;\n padding: 1px 2px;\n border-radius: 4px;\n font-size: calc(var(--message-text-size, 1rem) - 0.0625rem);\n cursor: pointer;\n}\n","@import \"message-content\";\n\n// General styles\n.Message {\n display: flex;\n align-items: flex-end;\n margin-bottom: 0.375rem;\n position: relative;\n\n --background-color: var(--color-background);\n --hover-color: var(--color-reply-hover);\n --color-reaction: var(--color-message-reaction);\n --hover-color-reaction: var(--color-message-reaction-hover);\n --active-color: var(--color-reply-active);\n --max-width: 29rem;\n --accent-color: var(--color-primary);\n --accent-shade-color: var(--color-primary-shade);\n --secondary-color: var(--color-text-secondary);\n --meta-safe-area-base: 2.25rem;\n --meta-safe-author-width: 0px;\n --meta-safe-area-extra-width: 0px;\n --meta-safe-area-size: calc(\n var(--meta-safe-area-base) + var(--meta-safe-author-width) + var(--meta-safe-area-extra-width)\n );\n --deleting-translate-x: -50%;\n --select-message-scale: 0.9;\n\n --border-top-left-radius: var(--border-radius-messages);\n --border-top-right-radius: var(--border-radius-messages);\n --border-bottom-left-radius: var(--border-radius-messages);\n --border-bottom-right-radius: var(--border-radius-messages);\n\n @media (min-width: 1921px) {\n --max-width: calc(30vw - 1rem);\n }\n @media (max-width: 600px) {\n margin-bottom: 0.25rem;\n }\n\n &.is-swiped {\n transform: translateX(-2.5rem) !important;\n }\n\n &.is-protected {\n user-select: none;\n }\n\n > .Avatar,\n > .message-content-wrapper {\n opacity: 1;\n transform: scale(1) translateX(0);\n transition: transform var(--select-transition);\n\n body.animation-level-0 & {\n transition: none !important;\n }\n }\n\n > .Avatar {\n position: absolute;\n bottom: 0;\n left: 0;\n\n margin-right: 0.3125rem;\n\n @media (max-width: 600px) {\n width: 2.5rem;\n height: 2.5rem;\n }\n }\n\n .quick-reaction {\n cursor: pointer;\n position: absolute;\n right: -0.5rem;\n bottom: -0.375rem;\n display: flex;\n align-items: center;\n justify-content: center;\n transform: scale(1);\n opacity: 0;\n transition: transform 0.2s ease-out, opacity 0.2s ease-out;\n transition-delay: 0.2s;\n\n &.visible {\n opacity: 1 !important;\n }\n\n &:hover {\n transition-delay: unset;\n transform: scale(1.4);\n }\n\n .ReactionStaticEmoji {\n width: 1.125rem;\n }\n }\n\n &.last-in-list .quick-reaction:hover {\n transform: translateY(-0.1875rem) scale(1.4);\n }\n\n &.own .quick-reaction {\n right: auto;\n left: -0.5rem;\n }\n\n &.last-in-group {\n margin-bottom: 0.625rem;\n @media (max-width: 600px) {\n margin-bottom: 0.4375rem;\n }\n }\n\n &.last-in-list {\n // Forcing extra space which is taken by the appendix and causes incorrect container height calculation.\n // This value is accurately crafted as a minimum possible.\n margin-bottom: 0.375rem;\n }\n\n &.is-in-selection-mode {\n body.is-android & {\n .can-select-text {\n z-index: var(--z-message-select-control);\n }\n\n // Prevent media viewer from opening\n .media-inner {\n pointer-events: none;\n }\n }\n }\n\n &.has-inline-buttons {\n .message-content {\n border-bottom-right-radius: var(--border-radius-messages-small);\n }\n }\n\n &.has-active-reaction {\n .message-content-wrapper {\n z-index: 1;\n }\n }\n\n &:not(.own) {\n padding-left: 2.5rem;\n\n .no-avatars &,\n &.is-thread-top {\n padding-left: 0;\n }\n\n @media (max-width: 600px) {\n padding-left: 2.875rem;\n\n .no-avatars &,\n &.is-thread-top {\n padding-left: 0.25rem;\n }\n }\n\n &.first-in-group:not(.last-in-group) {\n --border-bottom-left-radius: var(--border-radius-messages-small);\n }\n\n &:not(.first-in-group):not(.last-in-group) {\n --border-top-left-radius: var(--border-radius-messages-small);\n --border-bottom-left-radius: var(--border-radius-messages-small);\n }\n\n &.last-in-group:not(.first-in-group) {\n --border-top-left-radius: var(--border-radius-messages-small);\n }\n\n &.last-in-group {\n --border-bottom-left-radius: var(--border-radius-messages-small);\n\n .message-content.has-appendix {\n --border-bottom-left-radius: 0;\n }\n }\n }\n\n &.own {\n flex-direction: row-reverse;\n --background-color: var(--color-background-own);\n --hover-color: var(--color-reply-own-hover);\n --color-reaction: var(--color-message-reaction-own);\n --hover-color-reaction: var(--color-message-reaction-hover-own);\n --active-color: var(--color-reply-own-active);\n --max-width: 30rem;\n --accent-color: var(--color-accent-own);\n --accent-shade-color: var(--color-green);\n --secondary-color: var(--color-accent-own);\n --color-code: var(--color-code-own);\n --color-code-bg: var(--color-code-own-bg);\n --color-links: var(--color-own-links);\n --meta-safe-area-base: 3.5rem;\n --deleting-translate-x: 50%;\n --color-text-green: var(--color-accent-own);\n\n @media (min-width: 1921px) {\n --max-width: 30vw;\n }\n\n body.is-ios &,\n body.is-macos & {\n --color-background-own: var(--color-background-own-apple);\n --color-reply-own-hover: var(--color-reply-own-hover-apple);\n --color-reply-own-active: var(--color-reply-own-active-apple);\n }\n\n @media (max-width: 600px) {\n padding-right: 0.25rem;\n }\n\n &.first-in-group:not(.last-in-group) {\n --border-bottom-right-radius: var(--border-radius-messages-small);\n }\n\n &:not(.first-in-group):not(.last-in-group) {\n --border-top-right-radius: var(--border-radius-messages-small);\n --border-bottom-right-radius: var(--border-radius-messages-small);\n }\n\n &.last-in-group:not(.first-in-group) {\n --border-top-right-radius: var(--border-radius-messages-small);\n }\n\n &.last-in-group {\n --border-bottom-right-radius: var(--border-radius-messages-small);\n\n .message-content.has-appendix {\n --border-bottom-right-radius: 0;\n border-bottom-right-radius: 0;\n }\n }\n }\n\n &.is-deleting {\n > .Avatar,\n > .message-content-wrapper {\n transition: opacity 0.2s ease, transform 0.2s ease-in;\n opacity: 0;\n transform: scale(0.3) translateX(var(--deleting-translate-x));\n transform-origin: bottom;\n }\n }\n\n &.has-views {\n --meta-safe-area-extra-width: 4rem;\n }\n\n &.was-edited {\n --meta-safe-area-extra-width: 2.5rem;\n\n &.has-views {\n --meta-safe-area-extra-width: 7.5rem;\n }\n\n html[lang=\"ru\"] & {\n --meta-safe-area-extra-width: 3.5rem;\n\n &.has-views {\n --meta-safe-area-extra-width: 8.5rem;\n }\n }\n }\n\n .select-mode-active & {\n cursor: pointer;\n\n @media (min-width: 600px) {\n user-select: none;\n }\n\n &:not(.own) {\n > .Avatar,\n > .message-content-wrapper {\n transform: translateX(2.5rem);\n }\n }\n\n &:not(.is-album)::after {\n content: \"\";\n position: absolute;\n top: -0.25rem;\n bottom: -0.25rem;\n left: -4rem;\n right: -4rem;\n z-index: var(--z-message-select-area);\n }\n\n &.is-album,\n &.is-in-document-group {\n .message-select-control {\n pointer-events: unset;\n }\n }\n\n .message-select-control {\n opacity: 1;\n }\n }\n\n &.is-selected {\n .message-select-control {\n background: var(--color-green);\n\n &.group-select {\n background: transparent;\n\n &.is-selected {\n background: var(--color-green);\n }\n }\n }\n }\n\n .File.file-is-selected {\n .message-select-control {\n background: var(--color-green);\n }\n }\n\n &.is-in-document-group .File.file-is-selected .file-icon,\n &.has-menu-open.is-in-document-group .File .file-icon {\n --background-color: var(--color-background-selected);\n }\n\n &.own.is-in-document-group .File.file-is-selected .file-icon,\n &.own.has-menu-open.is-in-document-group .File .file-icon {\n --background-color: var(--color-background-own-selected);\n }\n\n .Audio .message-select-control {\n left: 1.0625rem;\n top: 1.375rem;\n }\n\n html.theme-dark &.own .Audio .toggle-play:not(.with-image) + .media-loading {\n .ProgressSpinner {\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTUiIGhlaWdodD0iMTUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZD0iTTguMjE4IDcuNWw1LjYzMy01LjYzM2EuNTA4LjUwOCAwIDEwLS43MTgtLjcxOEw3LjUgNi43ODIgMS44NjcgMS4xNDlhLjUwOC41MDggMCAxMC0uNzE4LjcxOEw2Ljc4MiA3LjVsLTUuNjMzIDUuNjMzYS41MDguNTA4IDAgMTAuNzE4LjcxOEw3LjUgOC4yMThsNS42MzMgNS42MzNhLjUwNi41MDYgMCAwMC43MTggMCAuNTA4LjUwOCAwIDAwMC0uNzE4TDguMjE4IDcuNXoiIGZpbGw9IiNGRkYiIGZpbGwtcnVsZT0ibm9uemVybyIgc3Ryb2tlPSIjODA3QkQ1IiBzdHJva2UtbGluZWpvaW49InJvdW5kIi8+PC9zdmc+);\n background-position: center;\n background-size: 1rem;\n\n circle {\n stroke: var(--background-color);\n }\n }\n }\n\n .File {\n position: relative;\n\n .message-select-control {\n position: absolute;\n top: 2rem;\n left: 2rem;\n z-index: 2;\n }\n }\n\n .album-item-select-wrapper {\n position: absolute;\n .Message.own & {\n background: var(--color-background-own);\n }\n\n .message-select-control {\n position: absolute;\n z-index: 2;\n top: 0.4375rem;\n right: 0.4375rem;\n left: unset;\n }\n\n img,\n video {\n transition: transform var(--select-transition), opacity ease 300ms;\n }\n\n &.is-selected {\n .message-select-control {\n background: var(--color-green);\n }\n\n img,\n video {\n transform: scale(var(--select-message-scale));\n }\n }\n }\n\n &.is-selected,\n &.is-forwarding {\n .message-select-control {\n background: var(--color-green);\n }\n\n .Menu .bubble {\n transition: none !important;\n }\n }\n\n &.is-in-document-group {\n .message-content.document {\n padding: 0.25rem 0.5rem !important;\n }\n\n &.last-in-document-group {\n .message-content.document {\n padding-bottom: 0.5rem !important;\n }\n }\n\n &.first-in-document-group {\n .message-content.document {\n padding-top: 0.5rem !important;\n }\n }\n\n &:not(.first-in-document-group) {\n &::before {\n top: 0 !important;\n }\n\n .message-content {\n box-shadow: none;\n border-top-left-radius: 0 !important;\n border-top-right-radius: 0 !important;\n }\n\n .forwarded-message::before {\n top: -1.5rem;\n }\n }\n\n &:not(.last-in-document-group) {\n margin-bottom: 0;\n\n &::before {\n bottom: 0 !important;\n }\n\n .message-content {\n border-bottom-left-radius: 0 !important;\n border-bottom-right-radius: 0 !important;\n }\n }\n\n &.is-in-selection-mode {\n .Audio:not(.audio-is-selected),\n .File:not(.file-is-selected) {\n .message-select-control:not(.group-select) {\n background: white;\n\n &::after {\n content: \"\";\n width: 1.25rem;\n height: 1.25rem;\n border-radius: 0.6875rem;\n background: white;\n border: 0.125rem rgba(0, 0, 0, 0.2) solid;\n position: absolute;\n }\n }\n }\n\n &.own {\n .message-content {\n .Audio:not(.audio-is-selected),\n .File:not(.file-is-selected) {\n .message-select-control:not(.group-select) {\n background: var(--background-color);\n border-color: var(--background-color);\n\n &::after {\n background: var(--background-color);\n border-color: var(--color-message-meta-own);\n }\n }\n }\n }\n }\n }\n\n &.focused,\n &.has-menu-open,\n &.is-forwarding,\n &.is-selected {\n .message-content {\n background: var(--color-background-selected);\n }\n\n &.own {\n .message-content {\n --background-color: var(--color-background-own-selected);\n background: var(--color-background-own-selected);\n }\n }\n }\n\n .message-content-wrapper {\n width: 17.1875rem;\n }\n\n .message-content {\n transition: background-color var(--select-transition);\n }\n\n &.own {\n .message-content-wrapper {\n display: flex;\n justify-content: flex-end;\n\n .message-content {\n width: 100%;\n }\n }\n }\n }\n\n .message-select-control {\n position: absolute;\n left: 0;\n bottom: 0.25rem;\n width: 1.5rem;\n height: 1.5rem;\n border: 2px solid white;\n border-radius: 50%;\n z-index: var(--z-message-select-control);\n\n display: flex;\n align-items: center;\n justify-content: center;\n\n color: white;\n font-size: 1rem;\n\n opacity: 0;\n pointer-events: none;\n transition: opacity var(--select-transition);\n\n .icon-select {\n position: absolute;\n left: -3px;\n top: -3px;\n font-size: 1.625rem;\n }\n\n .theme-dark & {\n border-color: #ffffff80;\n }\n }\n\n .message-content {\n &.has-replies:not(.custom-shape):not(.has-reactions) .WebPage.with-video .media-inner {\n margin-bottom: 1.5rem !important;\n }\n\n &.has-replies:not(.custom-shape),\n &.text {\n .media-inner,\n .Album {\n --border-bottom-left-radius: 0;\n --border-bottom-right-radius: 0;\n }\n }\n\n &.is-reply .EmbeddedMessage {\n & + .Album,\n & + .Audio,\n & + .File {\n margin-top: 0.375rem;\n }\n }\n\n &:not(.custom-shape).is-reply .media-inner,\n &:not(.custom-shape).is-reply .Album,\n &:not(.custom-shape).force-sender-name .Album,\n &:not(.is-forwarded) .message-title ~ .media-inner {\n --border-top-left-radius: 0;\n --border-top-right-radius: 0;\n }\n\n &.is-forwarded .content-inner .message-title {\n margin-bottom: 0.25rem;\n }\n }\n\n .message-action-button {\n position: absolute;\n bottom: 0;\n color: white;\n background-color: rgba(0, 0, 0, 0.2);\n\n opacity: 0;\n transition: opacity 0.2s ease;\n\n @media (pointer: coarse) {\n opacity: 1 !important;\n }\n\n &:hover,\n &:active,\n &:focus {\n background-color: rgba(0, 0, 0, 0.28) !important;\n }\n }\n\n &:hover,\n &[data-is-document-group-hover] {\n .message-action-button {\n opacity: 1;\n }\n }\n\n &.own .message-action-button {\n left: -3rem;\n }\n\n &:not(.own) .message-action-button {\n right: -3rem;\n }\n\n .bottom-marker {\n height: 1px;\n width: 1px;\n visibility: hidden;\n }\n}\n\n// Border-radius styles\n.message-content,\n.Album,\n.media-inner,\n.message-content.media .media-inner img,\n.message-content.media .media-inner video,\n.message-content.custom-shape .media-inner img {\n border-top-left-radius: var(--border-top-left-radius);\n border-top-right-radius: var(--border-top-right-radius);\n border-bottom-left-radius: var(--border-bottom-left-radius);\n border-bottom-right-radius: var(--border-bottom-right-radius);\n}\n\n.media-inner video.full-media {\n background: transparent !important;\n}\n\n.media-inner {\n overflow: hidden;\n\n &.small-image img {\n border-radius: 0 !important;\n }\n}\n\n.Message .custom-shape .message-action-button {\n bottom: 0.25rem;\n}\n",".SponsoredMessage {\n --border-top-left-radius: var(--border-radius-messages) !important;\n --border-bottom-left-radius: var(--border-radius-messages) !important;\n\n margin-top: -0.5rem;\n margin-bottom: 0.5rem;\n\n &::before {\n display: none;\n }\n\n &__button.secondary {\n margin-top: 0.5rem;\n border: 1px solid var(--color-primary);\n border-radius: var(--border-radius-default-tiny);\n color: var(--color-primary);\n }\n}\n",".ContactGreeting {\n width: 100%;\n height: 100%;\n display: flex;\n align-items: center;\n justify-content: center;\n text-align: center;\n\n .wrapper {\n display: inline-flex;\n flex-direction: column;\n align-items: center;\n background: var(--pattern-color);\n width: 14.5rem;\n padding: 0.75rem 1rem;\n border-radius: 1.5rem;\n color: #fff;\n }\n\n .title {\n font-weight: 500;\n margin-bottom: 0;\n }\n\n .description {\n font-size: 0.9375rem;\n margin-bottom: 0;\n }\n\n .sticker {\n margin: 2rem 0 1rem;\n height: 10rem;\n width: 10rem;\n cursor: pointer;\n\n .thumbnail {\n height: 10rem;\n width: 10rem;\n }\n }\n}\n",".NoMessages {\n width: 100%;\n height: 100%;\n display: flex;\n align-items: center;\n justify-content: center;\n\n .icon {\n font-size: 5rem;\n margin: 0 auto 1rem;\n }\n\n .wrapper {\n display: inline-flex;\n flex-direction: column;\n background: var(--pattern-color);\n max-width: 20rem;\n padding: 0.75rem 1rem;\n border-radius: 1.5rem;\n color: #fff;\n\n &[dir=\"rtl\"] {\n text-align: right;\n }\n }\n\n .title {\n font-weight: 500;\n font-size: 1rem;\n margin-bottom: 0.25rem;\n text-align: center;\n unicode-bidi: plaintext;\n }\n\n .description {\n font-size: 0.9375rem;\n margin: 0;\n padding: 0;\n list-style: none;\n unicode-bidi: plaintext;\n }\n\n .list-checkmarks {\n font-size: 0.9375rem;\n margin: 0.25rem 0 0;\n padding: 0;\n list-style: none;\n unicode-bidi: plaintext;\n line-height: 1.8;\n\n li::before {\n content: \"✓\";\n margin-inline-end: 0.5rem;\n }\n }\n}\n","@import \"../../styles/mixins\";\n\n.MessageList {\n flex: 1;\n width: 100%;\n margin-bottom: 0.5rem;\n\n overflow: scroll;\n overflow-x: hidden;\n overflow-y: auto;\n @include overflow-y-overlay();\n\n transition: transform var(--layer-transition);\n\n body.animation-level-0 & {\n transition: none !important;\n }\n\n .mask-image-enabled & {\n mask-image: linear-gradient(to top, transparent 0, #000 0.5rem);\n }\n\n @media (pointer: coarse) {\n user-select: none;\n -webkit-touch-callout: none;\n\n &.select-mode-active {\n user-select: auto;\n -webkit-touch-callout: default;\n }\n }\n\n /* stylelint-disable-next-line plugin/no-low-performance-animation-properties */\n transition: bottom 150ms ease-out, transform var(--layer-transition);\n body.keyboard-visible & {\n position: relative;\n bottom: calc(0px - env(safe-area-inset-bottom));\n\n body.keyboard-visible.animation-level-0 & {\n transition: none !important;\n }\n }\n\n &.no-avatars .Message > .Avatar {\n display: none;\n }\n\n .messages-container {\n width: 100%;\n max-width: var(--messages-container-width);\n min-height: 100%;\n margin: 0 auto;\n display: flex;\n justify-content: flex-end;\n flex-direction: column;\n padding: 1rem 1rem 0 1.125rem;\n\n .force-messages-scroll & {\n margin-top: 100vh !important;\n }\n\n @media (max-width: 600px) {\n width: 100vw;\n padding: 2.75rem 0.5rem 0;\n // Patch for an issue on Android when rotating device\n margin: 0;\n }\n }\n\n &.no-composer {\n margin-bottom: 0;\n\n .last-in-list {\n margin-bottom: 1rem;\n }\n }\n\n &.select-mode-active,\n &.type-pinned {\n margin-bottom: 0;\n\n .last-in-list {\n margin-bottom: 5.625rem;\n\n @media (max-width: 600px) {\n margin-bottom: 4.25rem;\n }\n\n &.ActionMessage {\n padding-bottom: 0.125rem;\n }\n }\n }\n\n @media (max-width: 600px) {\n &.with-bottom-shift {\n margin-bottom: 0;\n .last-in-list {\n margin-bottom: 4.25rem;\n\n body:not(.keyboard-visible) & {\n margin-bottom: calc(4.25rem + env(safe-area-inset-bottom));\n }\n }\n }\n }\n\n .Message,\n .ActionMessage {\n position: relative;\n\n opacity: 1;\n transform: scale(1);\n transition: opacity 0.2s ease, transform 0.2s ease;\n\n &:not(.open) {\n transform: scale(0.8);\n opacity: 0;\n }\n\n // Restore stacking context\n // https://developer.mozilla.org/ru/docs/Web/CSS/CSS_Positioning/Understanding_z_index/The_stacking_context\n &.open.shown {\n transform: none;\n }\n\n &::before {\n content: \"\";\n position: absolute;\n top: -0.1875rem;\n bottom: -0.1875rem;\n left: -50vw;\n right: -50vw;\n background: black;\n z-index: -1;\n\n opacity: 0;\n transition: opacity var(--select-transition);\n\n body.animation-level-0 & {\n transition: none !important;\n }\n }\n\n &:not(.last-in-group) {\n &::before {\n bottom: -0.1875rem;\n }\n }\n\n &:not(.first-in-group) {\n &::before {\n top: -0.1875rem;\n }\n }\n\n &.focused::before {\n // @optimization\n transition: none !important;\n }\n\n &.focused,\n &.is-forwarding,\n &.is-selected,\n &.has-menu-open {\n &::before {\n opacity: 0.1;\n\n .theme-dark & {\n opacity: 0.6;\n }\n }\n }\n }\n\n > .empty {\n width: 100%;\n height: 100%;\n display: flex;\n align-items: center;\n justify-content: center;\n\n & > span {\n max-width: 80%;\n text-align: left;\n }\n\n .text-entity-link {\n color: inherit !important;\n text-decoration: underline;\n\n &:hover,\n &:focus {\n text-decoration: none;\n }\n }\n }\n\n .sticky-date,\n .local-action-message,\n .ActionMessage,\n .empty {\n text-align: center;\n user-select: none;\n\n > span {\n display: inline-block;\n background: var(--pattern-color);\n color: white;\n font-size: calc(var(--message-text-size, 1rem) - 0.0625rem);\n font-weight: 500;\n line-height: 1.75;\n padding: 0 0.5rem;\n border-radius: var(--border-radius-messages);\n word-break: break-word;\n\n body.is-ios &,\n body.is-macos & {\n font-size: calc(var(--message-text-size, 1rem) - 0.125rem);\n line-height: calc(var(--message-text-size, 1rem) + 0.5rem);\n }\n\n .emoji-small {\n vertical-align: text-bottom;\n width: calc(1.25 * var(--message-text-size, 1rem));\n height: calc(1.25 * var(--message-text-size, 1rem));\n background-size: calc(1.25 * var(--message-text-size, 1rem));\n }\n }\n }\n\n .sticky-date {\n margin-top: 1rem;\n margin-bottom: 1rem;\n z-index: var(--z-sticky-date);\n pointer-events: none;\n opacity: 1;\n transition: opacity 0.3s ease;\n\n @media (max-width: 600px) {\n margin-top: 0.5rem;\n margin-bottom: 0.75rem;\n }\n\n body:not(.is-scrolling-messages) &.stuck {\n opacity: 0;\n\n span {\n pointer-events: none;\n }\n }\n\n body.animation-level-0 & {\n transition: none;\n }\n\n &.interactive {\n cursor: pointer;\n }\n\n span {\n pointer-events: auto;\n }\n }\n\n &.scrolled:not(.is-animating) .sticky-date {\n position: sticky;\n top: 0.625rem;\n }\n\n &.is-animating {\n overflow: hidden;\n }\n\n &.is-animating .message-select-control {\n display: none !important;\n }\n\n .has-header-tools & .sticky-date {\n top: 3.75rem !important;\n }\n\n .local-action-message,\n .ActionMessage {\n margin-top: 0.5rem;\n margin-bottom: 0.5rem;\n }\n\n .ActionMessage {\n .action-link {\n cursor: pointer;\n\n &:hover {\n text-decoration: underline;\n }\n }\n }\n\n .sticky-date + .ActionMessage {\n margin-top: -0.5rem;\n }\n\n @media (min-width: 1276px) {\n width: 100%;\n transform: translate3d(0, 0, 0);\n transition: transform var(--layer-transition);\n\n .messages-container {\n width: calc(100% - var(--right-column-width));\n }\n\n body.animation-level-0 & {\n transition: none;\n }\n\n #Main.right-column-open & {\n transform: translate3d(calc(var(--right-column-width) / -2), 0, 0);\n }\n\n body:not(.animating-right-column) #Main.right-column-open &.select-mode-active,\n #Main.right-column-open &:not(.select-mode-active),\n body.animating-right-column &:not(.select-mode-active) {\n width: calc(100% - var(--right-column-width));\n\n .messages-container {\n width: 100%;\n }\n }\n }\n\n @media (max-width: 600px) {\n transition: transform var(--layer-transition);\n\n body.enable-symbol-menu-transforms & {\n transform: translate3d(0, 0, 0);\n }\n\n body.is-symbol-menu-open & {\n transform: translate3d(0, calc(-1 * (var(--symbol-menu-height) + var(--symbol-menu-footer-height))), 0);\n }\n }\n\n .animating > div > & {\n &::-webkit-scrollbar {\n width: 0;\n }\n\n /* Styles for Firefox */\n @supports (scrollbar-width: none) {\n padding-right: 0.6875rem;\n scrollbar-width: none;\n }\n }\n}\n",".ScrollDownButton {\n --base-bottom-pos: 6rem;\n\n position: absolute;\n bottom: var(--base-bottom-pos);\n right: max(1rem, env(safe-area-inset-right));\n opacity: 0;\n transform: translateY(4.5rem);\n transition: transform 0.25s cubic-bezier(0.34, 1.56, 0.64, 1), opacity 0.2s ease;\n z-index: var(--z-scroll-down-button);\n pointer-events: none;\n\n body.animation-level-0 & {\n transform: none !important;\n\n transition: opacity 0.15s;\n }\n\n @media (max-width: 600px) {\n right: 0.5rem;\n bottom: 4.5rem;\n\n body:not(.keyboard-visible) & {\n bottom: calc(4.5rem + env(safe-area-inset-bottom));\n }\n }\n\n &-inner {\n display: flex;\n flex-direction: column;\n align-items: center;\n\n > .Button {\n box-shadow: 0 1px 2px var(--color-default-shadow);\n color: var(--color-composer-button);\n\n i {\n font-size: 1.75rem;\n }\n }\n\n @media (min-width: 1276px) {\n transform: translateX(0);\n\n transition: transform var(--layer-transition);\n\n body.animation-level-0 & {\n transition: none !important;\n }\n\n #Main.right-column-open & {\n transform: translateX(calc(-1 * var(--right-column-width)));\n }\n }\n\n @media (max-width: 600px) {\n > .Button {\n width: 2.875rem;\n height: 2.875rem;\n }\n }\n }\n\n &.revealed {\n transform: translateY(0);\n opacity: 1;\n pointer-events: all;\n\n &.no-composer:not(.with-extra-shift) {\n transform: translateY(4rem);\n }\n }\n\n .unread-count {\n min-width: 1.5rem;\n height: 1.5rem;\n padding: 0 0.4375rem;\n border-radius: 0.75rem;\n font-size: 0.875rem;\n line-height: 1.5rem;\n font-weight: 500;\n text-align: center;\n\n position: absolute;\n top: -0.3125rem;\n right: -0.3125rem;\n\n background: var(--color-green);\n color: white;\n\n pointer-events: none;\n\n @media (max-width: 600px) {\n top: -0.6875rem;\n right: auto;\n }\n }\n\n @media (max-width: 600px) {\n body.is-symbol-menu-open & {\n bottom: calc(var(--base-bottom-pos) + var(--symbol-menu-height) + var(--symbol-menu-footer-height));\n }\n }\n}\n",".AttachMenu {\n align-self: flex-end;\n\n &--button {\n &:focus {\n color: var(--color-primary);\n }\n }\n\n &--menu {\n position: relative;\n top: -3.5rem;\n\n @media (max-width: 600px) {\n top: -2.875rem;\n }\n\n .is-pointer-env & {\n > .backdrop {\n position: absolute;\n top: -1rem;\n left: auto;\n right: 0;\n width: 3.5rem;\n }\n }\n\n\n .media-disabled > button {\n white-space: normal;\n }\n }\n}\n",".BotKeyboardMenu {\n .bubble {\n width: 100% !important;\n max-width: 27rem;\n border-radius: var(--border-radius-default-small);\n }\n\n .content {\n display: flex;\n flex-direction: column;\n padding: 0.1875rem 0.625rem;\n max-height: 80vh;\n overflow: auto;\n\n @media (max-width: 600px) {\n max-height: 75vh;\n }\n\n .row {\n display: flex;\n flex-direction: row;\n }\n\n .row + .row {\n margin-top: 0.375rem;\n }\n\n .Button {\n flex: 1;\n width: auto;\n height: auto;\n min-height: 3.0625rem;\n border-radius: var(--border-radius-messages-small);\n border: 2px solid var(--color-primary);\n background: var(--color-background);\n color: var(--color-primary);\n font-weight: 500;\n text-transform: none;\n\n &:hover {\n color: #fff;\n border-color: var(--color-primary-shade);\n background: var(--color-primary-shade);\n }\n }\n\n .Button + .Button {\n margin-left: 0.375rem;\n }\n }\n}\n",".ComposerEmbeddedMessage {\n height: 2.625rem;\n /* stylelint-disable-next-line plugin/no-low-performance-animation-properties */\n transition: height 150ms ease-out, opacity 150ms ease-out;\n\n .select-mode-active + .middle-column-footer & {\n display: none;\n }\n\n &:not(.open) {\n height: 0 !important;\n }\n\n body.animation-level-0 & {\n transition: none !important;\n }\n\n & > div {\n display: flex;\n align-items: center;\n padding-right: 0.625rem;\n padding-top: 0.1875rem;\n }\n\n & > div > .Button {\n flex-shrink: 0;\n background: none !important;\n width: 3.5rem;\n height: 2.875rem;\n margin: 0 -0.0625rem 0 0;\n padding: 0;\n align-self: center;\n\n @media (max-width: 600px) {\n width: 2.875rem;\n }\n }\n}\n",".WebPagePreview {\n height: 2.625rem;\n /* stylelint-disable-next-line plugin/no-low-performance-animation-properties */\n transition: height 150ms ease-out, opacity 150ms ease-out;\n\n body.animation-level-0 & {\n transition: none !important;\n }\n\n .select-mode-active + .middle-column-footer & {\n display: none;\n }\n\n &:not(.open) {\n height: 0 !important;\n }\n\n // TODO Remove duplication with `.ComposerEmbeddedMessage`\n & > div {\n display: flex;\n align-items: center;\n padding-right: 0.625rem;\n padding-top: 0.1875rem;\n }\n\n --accent-color: var(--color-primary);\n\n .ComposerEmbeddedMessage + & {\n margin-top: 0.75rem;\n }\n\n & > div > .Button {\n flex-shrink: 0;\n background: none !important;\n width: 3.5rem;\n height: 2.875rem;\n margin: 0 -0.0625rem 0 0;\n padding: 0;\n align-self: center;\n\n @media (max-width: 600px) {\n width: 2.875rem;\n }\n }\n\n .WebPage {\n flex-grow: 1;\n margin: 0.1875rem 0 0.1875rem 0.125rem;\n max-width: calc(100% - 3.375rem);\n\n &::before {\n top: 0.125rem;\n bottom: 0.0625rem;\n }\n\n &.with-video .media-inner {\n display: none;\n }\n\n .site-title,\n .site-description {\n flex: 1;\n max-width: 100%;\n max-height: 1rem;\n }\n\n .site-title {\n margin-top: 0.125rem;\n margin-bottom: 0.1875rem;\n }\n\n .site-description {\n overflow: hidden;\n white-space: nowrap;\n text-overflow: ellipsis;\n }\n }\n}\n","@import \"../../../styles/mixins\";\n\n.Composer {\n align-items: flex-end;\n\n .select-mode-active + .middle-column-footer & {\n position: absolute;\n padding-right: 2rem;\n bottom: env(safe-area-inset-bottom);\n\n @media (max-width: 600px) {\n padding-right: 1rem;\n }\n\n &::before {\n right: 2.125rem;\n\n @media (max-width: 600px) {\n right: 1rem;\n }\n }\n\n .svg-appendix {\n opacity: 0;\n }\n }\n\n .form-control {\n --border-width: 0;\n }\n\n @keyframes show-send-as-button {\n from {\n /* stylelint-disable-next-line plugin/no-low-performance-animation-properties */\n width: 1rem;\n transform: scale(0);\n }\n\n to {\n /* stylelint-disable-next-line plugin/no-low-performance-animation-properties */\n width: 3.5rem;\n transform: scale(1);\n }\n }\n\n > .Button {\n flex-shrink: 0;\n margin-left: 0.5rem;\n\n &:not(.danger) {\n color: var(--color-composer-button);\n }\n\n @media (max-width: 600px) {\n width: 2.875rem;\n height: 2.875rem;\n }\n\n .icon-send,\n .icon-schedule,\n .icon-microphone-alt,\n .icon-check {\n position: absolute;\n }\n\n &:not(:active):not(:focus):not(:hover) {\n .icon-send,\n .icon-schedule,\n .icon-check {\n color: var(--color-primary);\n }\n }\n\n &.cancel {\n position: relative;\n z-index: 1;\n\n &:hover,\n &.active {\n background: var(--color-chat-hover);\n }\n }\n\n &.recording {\n position: relative;\n z-index: 0;\n transition: box-shadow 0.1s;\n }\n\n &.send {\n .icon-send {\n animation: grow-icon 0.4s ease-out;\n }\n\n .icon-microphone-alt,\n .icon-check,\n .icon-schedule {\n animation: hide-icon 0.4s forwards ease-out;\n }\n }\n\n &.schedule {\n .icon-schedule {\n animation: grow-icon 0.4s ease-out;\n }\n\n .icon-microphone-alt,\n .icon-check,\n .icon-send {\n animation: hide-icon 0.4s forwards ease-out;\n }\n }\n\n &.record {\n .icon-microphone-alt {\n animation: grow-icon 0.4s ease-out;\n }\n\n .icon-send,\n .icon-check,\n .icon-schedule {\n animation: hide-icon 0.4s forwards ease-out;\n }\n }\n\n &.edit {\n .icon-check {\n animation: grow-icon 0.4s ease-out;\n }\n\n .icon-send,\n .icon-microphone-alt,\n .icon-schedule {\n animation: hide-icon 0.4s forwards ease-out;\n }\n }\n\n &.not-ready > i {\n animation-duration: 0ms !important;\n }\n\n body.animation-level-0 &,\n body.animation-level-1 & {\n .icon-send,\n .icon-microphone-alt,\n .icon-check,\n .icon-schedule {\n animation-duration: 0ms !important;\n }\n }\n }\n\n .send-as-button {\n z-index: 1;\n }\n\n body:not(.animation-level-0) & .send-as-button.appear-animation {\n animation: 0.25s ease-in-out forwards show-send-as-button;\n transform-origin: right;\n }\n\n .mobile-symbol-menu-button {\n width: 2.875rem;\n height: 2.875rem;\n position: relative;\n\n .icon-smile,\n .icon-keyboard,\n .Spinner {\n position: absolute;\n }\n\n .Spinner {\n --spinner-size: 1.5rem;\n }\n\n .icon-smile {\n animation: grow-icon 0.4s ease-out;\n }\n\n .icon-keyboard,\n .Spinner {\n animation: hide-icon 0.4s forwards ease-out;\n }\n\n &.not-ready > i {\n animation-duration: 0ms !important;\n }\n\n &.is-loading {\n .Spinner {\n animation: grow-icon 0.4s ease-out;\n }\n\n .icon-keyboard,\n .icon-smile {\n animation: hide-icon 0.4s forwards ease-out;\n }\n }\n\n &.menu-opened {\n .icon-keyboard {\n animation: grow-icon 0.4s ease-out;\n }\n\n .icon-smile,\n .Spinner {\n animation: hide-icon 0.4s forwards ease-out;\n }\n }\n }\n}\n\n#message-compose {\n flex-grow: 1;\n max-width: calc(100% - 4rem);\n background: var(--color-background);\n border-radius: var(--border-radius-messages);\n border-bottom-right-radius: 0;\n box-shadow: 0 1px 2px var(--color-default-shadow);\n position: relative;\n z-index: 1;\n\n .svg-appendix {\n position: absolute;\n bottom: -0.1875rem;\n /* stylelint-disable-next-line plugin/whole-pixel */\n right: -0.551rem; // This value is correct. Safari fix\n width: 0.5625rem;\n height: 1.25rem;\n transition: opacity 200ms;\n font-size: 1rem !important;\n\n .corner {\n fill: var(--color-background);\n }\n }\n\n @media (max-width: 600px) {\n max-width: calc(100% - 3.375rem);\n }\n}\n\n.message-input-wrapper {\n display: flex;\n\n > .Spinner {\n align-self: center;\n --spinner-size: 1.5rem;\n margin-right: -0.5rem;\n }\n\n > .AttachMenu > .Button,\n > .Button {\n flex-shrink: 0;\n background: none !important;\n width: 3.5rem;\n height: 3.5rem;\n margin: 0;\n padding: 0;\n align-self: flex-end;\n\n &:not(.faded):not(.activated) {\n color: var(--color-composer-button);\n }\n\n + .Button, + .AttachMenu {\n margin-left: -1rem;\n }\n\n @media (max-width: 600px) {\n width: 2.875rem;\n height: 2.875rem;\n\n + .Button, + .AttachMenu {\n margin-left: -0.6875rem;\n }\n }\n\n &.bot-commands {\n color: var(--color-primary) !important;\n\n // SymbolMenu button should be accessible if BotCommandsMenu opened\n body.is-touch-env &.activated + .Button.mobile-symbol-menu-button {\n z-index: calc(var(--z-menu-backdrop) + 1);\n }\n }\n\n &.scheduled-button i::after {\n content: \"\";\n position: absolute;\n top: 0.75rem;\n right: 0.875rem;\n border: 0.1875rem solid var(--color-background);\n box-sizing: content-box;\n width: 0.5rem;\n height: 0.5rem;\n border-radius: 50%;\n background: var(--color-green-darker);\n box-shadow: -0.375rem -0.25rem 0 -0.1875rem var(--color-background);\n @media (max-width: 600px) {\n top: 0.5rem;\n right: 0.5rem;\n }\n }\n }\n\n > .input-group {\n flex-grow: 1;\n margin-bottom: 0;\n }\n\n .recording-state {\n display: inline-block;\n position: relative;\n line-height: 3.5rem;\n height: 3.5rem;\n padding: 0 3.125rem 0 1rem;\n font-family: \"Roboto\", -apple-system, BlinkMacSystemFont, \"Apple Color Emoji\", \"Helvetica Neue\", sans-serif;\n\n &::after {\n content: \"\";\n width: 0.75rem;\n height: 0.75rem;\n background: var(--color-error);\n border-radius: 0.375rem;\n position: absolute;\n top: 50%;\n margin-top: -0.375rem;\n right: 1.3125rem;\n animation: recording-blink-like-macos 1.5s infinite;\n }\n\n @media (max-width: 600px) {\n height: 2.875rem;\n line-height: 2.875rem;\n }\n }\n}\n\n#message-input-text,\n#caption-input-text {\n position: relative;\n\n .form-control {\n padding: calc((3.25rem - var(--composer-text-size, 1rem) * 1.375) / 2 - var(--border-width, 0) * 2)\n calc(0.9rem - var(--border-width));\n overflow: hidden;\n line-height: 1.375;\n font-family: Roboto, -apple-system, \"Apple Color Emoji\", \"Helvetica Neue\", sans-serif;\n unicode-bidi: plaintext;\n text-align: initial;\n font-size: var(--composer-text-size, 1rem);\n\n body.is-ios &,\n body.is-macos & {\n font-family: system-ui, -apple-system, BlinkMacSystemFont, \"Roboto\", \"Apple Color Emoji\", \"Helvetica Neue\",\n sans-serif;\n }\n\n &.overflown {\n overflow-y: auto;\n overflow-x: hidden;\n }\n\n &.touched,\n &:focus {\n & + .placeholder-text {\n display: none;\n }\n }\n\n &.focus-disabled {\n pointer-events: none;\n }\n }\n\n .forced-placeholder,\n .placeholder-text {\n position: absolute;\n color: var(--color-placeholders);\n pointer-events: none;\n unicode-bidi: plaintext;\n text-align: initial;\n line-height: 1.3125;\n font-size: var(--composer-text-size, 1rem);\n top: calc((3.25rem - var(--composer-text-size, 1rem) * 1.375) / 2);\n bottom: auto;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n max-width: 100%;\n }\n\n .forced-placeholder {\n z-index: var(--z-below);\n left: 0;\n }\n\n &[dir=\"rtl\"] .placeholder-text {\n right: 0;\n }\n\n .text-entity-link {\n color: var(--color-links) !important;\n cursor: default;\n text-decoration: none;\n\n &:hover,\n &:active,\n &:visited {\n text-decoration: underline !important;\n }\n }\n\n .spoiler {\n background-image: url(\"../../../assets/spoiler-dots-black.png\");\n background-size: auto min(100%, 1.125rem);\n border-radius: 0.5rem;\n padding: 0 0.3125rem 0.125rem 0.3125rem;\n text-shadow: -2px -2px 0 var(--color-background), 2px -2px 0 var(--color-background),\n -2px 2px 0 var(--color-background), 2px 2px 0 var(--color-background);\n }\n\n html.theme-dark & .spoiler {\n background-image: url(\"../../../assets/spoiler-dots-white.png\");\n }\n\n .clone {\n position: absolute;\n top: 0;\n left: 0;\n opacity: 0;\n pointer-events: none;\n z-index: -10;\n unicode-bidi: plaintext;\n text-align: initial;\n }\n}\n\n#message-input-text {\n flex-grow: 1;\n\n .form-control {\n margin-bottom: 0;\n background: transparent !important;\n border: none !important;\n border-radius: 0 !important;\n box-shadow: none !important;\n caret-color: var(--color-text);\n min-height: 3.5rem;\n max-height: 26rem;\n line-height: 1.3125;\n padding: calc((3.5rem - var(--composer-text-size, 1rem) * 1.3125) / 2) 0;\n white-space: pre-wrap;\n\n @media (max-width: 600px) {\n height: 2.875rem;\n min-height: 2.875rem;\n max-height: 16rem;\n padding: calc((2.875rem - var(--composer-text-size, 1rem) * 1.3125) / 2) 0;\n overflow: auto;\n }\n\n /* stylelint-disable-next-line plugin/no-low-performance-animation-properties */\n transition: height 100ms ease;\n\n body.animation-level-0 & {\n transition: none !important;\n }\n }\n\n .forced-placeholder,\n .placeholder-text {\n top: calc((3.5rem - var(--composer-text-size, 1rem) * 1.3125) / 2);\n\n @media (max-width: 600px) {\n top: calc((2.875rem - var(--composer-text-size, 1rem) * 1.3125) / 2);\n }\n }\n\n &:not(:only-child) {\n .form-control {\n padding-left: 0;\n padding-right: 0;\n }\n }\n\n .ComposerEmbeddedMessage + .message-input-wrapper &,\n .WebPagePreview + .message-input-wrapper & {\n .form-control.overflown {\n margin-top: 0.75rem;\n }\n }\n\n .emoji {\n width: 1.25rem;\n height: 1.25rem;\n margin: 0 1px -5px;\n vertical-align: 0;\n pointer-events: none;\n }\n}\n\n#caption-input-text {\n .form-control {\n height: 3.25rem;\n min-height: 3.25rem;\n max-height: 15rem;\n }\n\n .placeholder-text {\n bottom: 0.8125rem;\n left: 0.9375rem;\n }\n}\n\n.composer-tooltip {\n position: absolute;\n bottom: calc(100% + 0.5rem);\n left: 0;\n width: 100%;\n background: var(--color-background);\n border-radius: var(--border-radius-messages);\n padding: 0.5rem 0;\n max-height: 15rem;\n\n overflow-x: hidden;\n overflow-y: auto;\n @include overflow-y-overlay();\n\n box-shadow: 0 1px 2px var(--color-default-shadow);\n\n opacity: 0;\n transform: translateY(1.5rem);\n transform-origin: bottom;\n transition: opacity var(--layer-transition), transform var(--layer-transition);\n\n &:not(.shown) {\n display: none;\n }\n\n &.open {\n opacity: 1;\n transform: translateY(0);\n }\n\n .Loading {\n margin: 1rem 0;\n }\n}\n\n@keyframes recording-blink-like-macos {\n from {\n opacity: 1;\n }\n to {\n opacity: 0.3;\n }\n}\n","#middle-column-bg {\n position: absolute;\n top: 0;\n left: 0;\n bottom: 0;\n right: 0;\n overflow: hidden;\n z-index: -1;\n background-color: var(--theme-background-color);\n\n body:not(.animation-level-0) #root & {\n transition: background-color 0.2s;\n }\n\n &::after {\n content: \"\";\n position: absolute;\n top: 0;\n left: 0;\n bottom: 0;\n right: 0;\n background-color: var(--theme-background-color);\n background-position: center;\n background-repeat: no-repeat;\n background-size: cover;\n\n body:not(.animation-level-0) #root & {\n transition: transform var(--layer-transition), background-image 0.2s;\n }\n\n body.animation-level-0 & {\n transition: none;\n }\n\n .theme-light & {\n background-image: url(\"../../assets/chat-bg.jpg\");\n\n @media (max-width: 600px) {\n background-image: url(\"../../assets/chat-bg-mobile.jpg\");\n }\n }\n\n .theme-dark #MiddleColumn:not(.custom-bg-image) & {\n background-image: url('../../assets/chat-bg-dark.png');\n background-position: top left;\n background-size: 650px;\n background-repeat: repeat;\n }\n }\n\n .custom-bg-color:not(.custom-bg-image) &::after {\n opacity: 0;\n }\n\n .custom-bg-image &::after {\n background-image: var(--custom-background) !important;\n filter: none;\n transform: scale(1.1);\n }\n\n .custom-bg-image.blurred &::after {\n filter: blur(12px);\n }\n\n @media screen and (min-width: 1276px) {\n body.animation-level-2 &::after {\n margin: -16rem -5rem -20rem 0;\n overflow: hidden;\n transform: scale(1);\n transform-origin: left center;\n transition: transform var(--layer-transition);\n }\n\n html.theme-light body.animation-level-2 #Main.right-column-open #MiddleColumn:not(.custom-bg-image) &::after {\n transform: scale(0.67) !important;\n }\n }\n\n html.theme-light body.animation-level-2 #Main.right-column-open #MiddleColumn:not(.custom-bg-image) &::after {\n @media screen and (min-width: 1921px) {\n transform: scale(0.8) !important;\n }\n\n @media screen and (min-width: 2600px) {\n transform: scale(0.95) !important;\n }\n }\n}\n\n#MiddleColumn {\n display: flex;\n justify-content: center;\n height: 100%;\n position: relative;\n z-index: 1;\n min-width: 0;\n\n @media (max-width: 600px) {\n overflow: hidden;\n }\n\n .messages-layout {\n --slide-transition: 450ms cubic-bezier(0.25, 1, 0.5, 1);\n\n display: flex;\n flex-direction: column;\n align-items: center;\n width: 100%;\n height: 100%;\n position: relative;\n overflow: hidden;\n\n > .Transition {\n width: 100%;\n height: 100%;\n overflow: hidden;\n\n > div {\n display: flex;\n flex-direction: column;\n align-items: center;\n }\n }\n }\n\n .Composer {\n #message-compose {\n transform: scaleX(1) translateX(0);\n transition: transform var(--select-transition), border-bottom-right-radius var(--select-transition);\n\n &::before {\n transform: scaleX(-1) translateX(0);\n transition: transform var(--select-transition);\n }\n\n body.animation-level-0 & {\n &,\n &::before {\n transition: none !important;\n }\n }\n }\n\n .message-input-wrapper,\n &::before {\n opacity: 1;\n transition: opacity var(--select-transition);\n\n body.animation-level-0 & {\n transition: none !important;\n }\n }\n\n > .Button {\n opacity: 1;\n transform: scale(1);\n transition: opacity var(--select-transition), transform var(--select-transition), background-color 0.15s,\n color 0.15s;\n\n body.animation-level-0 & {\n transition: none !important;\n }\n }\n\n &.hover-disabled,\n &:not(.shown) {\n pointer-events: none;\n }\n\n &:not(.shown) {\n .ComposerEmbeddedMessage {\n height: 0;\n }\n\n #message-compose {\n transform: scaleX(var(--composer-hidden-scale, 1)) translateX(var(--composer-translate-x, 0));\n border-bottom-right-radius: var(--border-radius-messages);\n\n &::before {\n transform: scaleX(-1) translateX(200%);\n }\n }\n\n #editable-message-text {\n height: 3.5rem !important;\n\n @media (max-width: 600px) {\n height: 2.5rem !important;\n }\n }\n\n .message-input-wrapper,\n &::before {\n opacity: 0;\n }\n\n > .Button {\n opacity: 0 !important;\n transform: scale(0.5);\n }\n }\n }\n\n .messaging-disabled {\n transform: scaleX(1);\n transition: transform var(--select-transition);\n\n .messaging-disabled-inner span {\n opacity: 1;\n transition: opacity var(--select-transition);\n\n body.animation-level-0 & {\n transition: none !important;\n }\n }\n\n body.animation-level-0 & {\n transition: none !important;\n }\n\n &:not(.shown) {\n transform: scaleX(var(--composer-hidden-scale, 1));\n pointer-events: none;\n\n .messaging-disabled-inner span {\n opacity: 0;\n }\n }\n\n &-inner {\n width: 100%;\n padding: 1rem;\n border-radius: var(--border-radius-messages);\n background: var(--color-background);\n color: var(--color-text-secondary);\n text-align: center;\n box-shadow: 0 1px 2px var(--color-default-shadow);\n }\n }\n\n .middle-column-footer {\n width: 100%;\n max-width: var(--messages-container-width);\n padding: 0 1rem;\n position: relative;\n display: flex;\n align-items: flex-end;\n z-index: var(--z-middle-footer);\n\n transform: translate3d(0, 0, 0);\n /* stylelint-disable-next-line plugin/no-low-performance-animation-properties */\n transition: top 200ms, transform var(--layer-transition);\n\n body.animation-level-0 & {\n transition: none !important;\n }\n\n @media (min-width: 1276px) {\n width: calc(100% - var(--right-column-width));\n\n #Main.right-column-open & {\n transform: translate3d(calc(var(--right-column-width) / -2), 0, 0);\n }\n }\n\n @media (max-width: 600px) {\n padding: 0 0.5rem;\n\n body.is-symbol-menu-open & {\n transform: translate3d(0, calc(-1 * (var(--symbol-menu-height) + var(--symbol-menu-footer-height))), 0);\n }\n }\n\n &:not(.no-composer) {\n padding-bottom: env(safe-area-inset-bottom);\n top: 0;\n\n body.keyboard-visible & {\n top: env(safe-area-inset-bottom);\n }\n }\n\n &::before {\n content: \"\";\n position: absolute;\n top: -0.5625rem;\n left: 0;\n right: 0;\n height: 1px;\n background: linear-gradient(\n 90deg,\n rgba(255, 255, 255, 0) 0%,\n rgba(255, 255, 255, 0.4) 2%,\n rgba(255, 255, 255, 0.4) 98%,\n rgba(255, 255, 255, 0) 100%\n );\n opacity: 0;\n transition: opacity 350ms ease;\n\n @media (max-width: 600px) {\n left: -2%;\n right: -2%;\n }\n }\n\n &.with-notch::before {\n opacity: 1;\n }\n\n html.theme-dark &::before {\n background: linear-gradient(\n 90deg,\n rgba(127, 127, 127, 0) 0%,\n rgba(127, 127, 127, 0.4) 2%,\n rgba(127, 127, 127, 0.4) 98%,\n rgba(127, 127, 127, 0) 100%\n );\n }\n }\n}\n\n/* Common styles for message list fade-out shadow */\n.Composer,\n.MessageSelectToolbar,\n.messaging-disabled {\n margin-bottom: 1.25rem;\n\n @media (max-width: 600px) {\n margin-bottom: 0.5rem;\n }\n}\n\n.Composer,\n.MessageSelectToolbar,\n.unpin-all-button,\n.join-subscribe-button,\n.messaging-disabled {\n width: 100%;\n display: flex;\n justify-content: center;\n position: relative;\n}\n\n.MessageSelectToolbar-inner,\n.unpin-all-button,\n.join-subscribe-button,\n.messaging-disabled {\n .mask-image-disabled & {\n box-shadow: 0 0.25rem 0.5rem 0.125rem var(--color-default-shadow);\n border-radius: var(--border-radius-messages);\n }\n}\n\n.middle-column-footer-button-container {\n width: 100%;\n display: flex;\n justify-content: center;\n position: absolute;\n padding-bottom: 1.25rem;\n\n .unpin-all-button {\n text-transform: capitalize;\n color: var(--color-black);\n\n @media (hover: hover) {\n &:hover {\n .icon-unpin {\n color: var(--color-white);\n }\n }\n }\n\n @media (max-width: 600px) {\n &:active,\n &:focus {\n .icon-unpin {\n color: var(--color-white);\n }\n }\n }\n\n .icon-unpin {\n margin-inline-start: -0.4375rem;\n margin-inline-end: 0.75rem;\n color: var(--color-text-secondary);\n font-size: 1.5rem;\n transition: color 0.15s;\n }\n }\n\n .join-subscribe-button,\n .unpin-all-button {\n height: 3.5rem;\n transform: scaleX(1);\n transition: transform var(--select-transition), background-color 0.15s, color 0.15s;\n\n .select-mode-active + .middle-column-footer & {\n box-shadow: none;\n transform: scaleX(var(--unpin-hidden-scale));\n }\n\n @media (max-width: 600px) {\n height: 2.5rem;\n }\n }\n\n @media (max-width: 600px) {\n padding-bottom: calc(0.75rem + env(safe-area-inset-bottom));\n }\n\n .mask-image-disabled &::before {\n background: unset;\n }\n}\n",".RightHeader {\n display: flex;\n align-items: center;\n height: var(--header-height);\n padding: 0.5rem 0.8125rem;\n pointer-events: auto;\n\n @media (max-width: 600px) {\n padding: 0.5rem;\n }\n\n .close-button {\n flex-shrink: 0;\n }\n\n > .Transition {\n flex: 1;\n height: 100%;\n\n > div {\n display: flex;\n align-items: center;\n }\n }\n\n h3 {\n margin-bottom: 0;\n font-size: 1.25rem;\n font-weight: 500;\n margin-left: 1.375rem;\n }\n\n .tools {\n display: flex;\n margin-left: auto;\n }\n\n .SearchInput {\n margin-left: 1rem;\n\n @media (min-width: 600px) {\n margin-right: 1rem;\n }\n }\n\n .DropdownMenu {\n margin-left: auto;\n }\n}\n","@import \"../../styles/mixins\";\n\n.Profile {\n height: 100%;\n display: flex;\n flex-direction: column;\n\n overflow-x: hidden;\n overflow-y: scroll;\n @include overflow-y-overlay();\n\n > .profile-info > .ChatInfo {\n grid-area: chat_info;\n\n .status.online {\n color: var(--color-primary);\n }\n }\n\n > .profile-info > .ChatExtra {\n padding: 0.875rem 0.5rem 0.5rem;\n box-shadow: inset 0 -0.0625rem 0 0 var(--color-background-secondary-accent);\n border-bottom: 0.625rem solid var(--color-background-secondary);\n\n .narrow {\n margin-bottom: 0;\n }\n\n .inactive.no-selection {\n user-select: auto;\n -webkit-user-select: auto !important;\n }\n\n .Switcher {\n margin-left: auto;\n }\n [dir=\"rtl\"] {\n .Switcher {\n margin-left: 0;\n margin-right: auto;\n }\n }\n }\n\n .FloatingActionButton {\n z-index: 1;\n }\n}\n\n.shared-media {\n display: flex;\n flex-direction: column-reverse;\n\n .TabList {\n background: var(--color-background);\n top: -1px;\n z-index: 1;\n\n .Tab {\n padding: 1rem 0.75rem;\n\n span {\n white-space: nowrap;\n }\n\n i {\n bottom: -1rem;\n }\n }\n }\n\n .Transition {\n flex: 1;\n }\n\n .content {\n &.empty-list {\n height: 100%;\n padding-top: 5rem;\n display: flex;\n align-items: flex-start;\n justify-content: center;\n\n .Spinner {\n --spinner-size: 2.75rem;\n }\n }\n\n &.media-list {\n display: grid;\n grid-template-columns: repeat(3, 1fr);\n grid-auto-rows: 1fr;\n grid-gap: 0.0625rem;\n }\n\n &.documents-list {\n padding: 1.25rem;\n\n & .File + .File {\n margin-top: 1.25rem;\n }\n }\n\n &.links-list {\n padding: 1.25rem;\n\n .ProgressSpinner,\n .message-transfer-progress {\n display: none;\n }\n }\n\n &.audio-list,\n &.voice-list {\n padding: 1.25rem;\n\n & .Audio {\n .media-loading {\n top: 0;\n left: 0;\n display: flex;\n align-items: center;\n justify-content: center;\n }\n\n & + .Audio {\n margin-top: 1.6875rem;\n }\n }\n }\n\n &.commonChats-list,\n &.members-list {\n padding: 0.5rem 1rem;\n\n @media (max-width: 600px) {\n padding: 0.5rem 0;\n .ListItem.chat-item-clickable {\n margin: 0;\n }\n }\n }\n }\n}\n",".AddChatMembers {\n height: 100%;\n overflow: hidden;\n position: relative;\n\n &-inner {\n height: 100%;\n overflow: hidden;\n }\n}\n","#RightColumn {\n position: absolute;\n top: 0;\n right: 0;\n width: var(--right-column-width);\n height: 100%;\n padding-right: env(safe-area-inset-right);\n transform: translate3d(var(--right-column-width), 0, 0);\n background: var(--color-background);\n border-left: 1px solid var(--color-borders);\n z-index: var(--z-right-column);\n\n transition: transform var(--layer-transition);\n\n body.animation-level-0 & {\n transition: none;\n }\n\n @media (max-width: 1275px) {\n box-shadow: 0 0.25rem 0.5rem 0.125rem var(--color-default-shadow);\n border-left: none;\n }\n\n @media (max-width: 600px) {\n width: 100vw;\n transform: translate3d(110vw, 0, 0);\n }\n\n > .Transition {\n height: calc(100% - var(--header-height));\n overflow: hidden;\n }\n\n .Management .section > .ChatInfo {\n padding: 0 1.5rem;\n margin: 1rem 0;\n text-align: center;\n\n .Avatar {\n margin: 0 auto 0.5rem;\n\n &.no-photo {\n cursor: default !important;\n }\n }\n\n .title {\n display: flex;\n justify-content: center;\n align-items: center;\n\n h3 {\n font-weight: 500;\n font-size: 1.25rem;\n line-height: 2rem;\n white-space: pre-wrap;\n word-break: break-word;\n }\n\n .VerifiedIcon {\n margin-left: 0.25rem;\n margin-bottom: 0.5rem;\n }\n\n .emoji {\n width: 1.5rem;\n height: 1.5rem;\n background-size: 1.5rem;\n }\n }\n\n .status {\n font-size: 0.875rem;\n color: #868e96;\n }\n }\n}\n\n#RightColumn-wrapper {\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n z-index: var(--z-right-column);\n overflow: hidden;\n visibility: hidden;\n pointer-events: none;\n\n @media (max-width: 1275px) {\n position: fixed;\n }\n\n &.is-hidden {\n display: none;\n }\n\n .overlay-backdrop {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: -1;\n background: black;\n opacity: 0;\n\n @media (max-width: 600px) {\n transition: opacity var(--layer-transition);\n\n body.animation-level-0 & {\n transition: none;\n }\n }\n }\n\n #Main.right-column-open &,\n body.animating-right-column & {\n visibility: visible;\n }\n\n #Main.right-column-open & {\n @media (max-width: 600px) {\n .overlay-backdrop {\n opacity: var(--layer-blackout-opacity);\n }\n }\n\n #RightColumn {\n pointer-events: auto;\n transform: translate3d(0, 0, 0);\n }\n }\n}\n","#Main {\n height: 100%;\n text-align: left;\n overflow: hidden;\n\n @media (min-width: 1276px) {\n position: relative;\n }\n\n @media (max-width: 600px) {\n height: calc(var(--vh, 1vh) * 100);\n }\n\n @media (min-width: 926px) {\n display: grid;\n grid-template-columns: auto 1fr;\n grid-template-rows: 100%;\n }\n}\n\n.has-group-call-header {\n --group-call-header-height: 2rem;\n #LeftColumn, #MiddleColumn, #RightColumn-wrapper {\n height: calc(100% - 2rem);\n margin-top: 2rem;\n }\n}\n\n#LeftColumn {\n min-width: 12rem;\n width: 33vw;\n max-width: 26.5rem;\n height: 100%;\n position: relative;\n\n & > div {\n height: 100%;\n overflow: hidden;\n }\n\n @media (max-width: 600px) {\n height: calc(var(--vh, 1vh) * 100);\n }\n\n @media (min-width: 926px) {\n max-width: 40vw;\n }\n\n @media (min-width: 1276px) {\n width: 25vw;\n max-width: 33vw;\n }\n\n @media (max-width: 925px) {\n position: fixed;\n left: 0;\n top: 0;\n height: calc(var(--vh, 1vh) * 100);\n width: 26.5rem !important;\n\n transform: translate3d(-5rem, 0, 0);\n transition: transform var(--layer-transition);\n\n body.animation-level-0 & {\n transition: none;\n }\n\n &::after {\n content: '';\n display: block;\n position: absolute;\n left: 0;\n top: 0;\n right: 0;\n bottom: 0;\n background: black;\n opacity: var(--layer-blackout-opacity);\n transition: opacity var(--layer-transition);\n z-index: 1;\n\n body.animation-level-0 & {\n transition: none;\n }\n\n // @optimization\n body.is-android & {\n display: none;\n }\n\n body.is-android .middle-column-shown & {\n display: block;\n }\n }\n\n #Main:not(.middle-column-open) & {\n transform: translate3d(0, 0, 0);\n\n &::after {\n opacity: 0;\n pointer-events: none;\n }\n }\n\n #Main.history-animation-disabled & {\n transition: none;\n\n &:after {\n transition: none;\n }\n }\n }\n\n @media (max-width: 600px) {\n max-width: none;\n transform: translate3d(-20vw, 0, 0);\n left: env(safe-area-inset-left) !important;\n width: calc(100vw - env(safe-area-inset-left)) !important;\n }\n}\n\n#RightColumn {\n @media (max-width: 600px) {\n height: calc(var(--vh, 1vh) * 100 + 1px);\n }\n\n #Main.history-animation-disabled & {\n transition: none;\n\n .overlay-backdrop {\n transition: none;\n }\n }\n}\n\n#Main.history-animation-disabled .overlay-backdrop {\n transition: none;\n}\n\n#MiddleColumn {\n border-left: 1px solid var(--color-borders);\n\n @media (max-width: 925px) {\n max-width: none;\n position: fixed;\n left: 0;\n top: 0;\n bottom: 0;\n right: 0;\n\n transform: translate3d(0, 0, 0);\n transition: transform var(--layer-transition);\n\n body.animation-level-0 & {\n transition: none;\n }\n\n #Main:not(.middle-column-open) & {\n transform: translate3d(26.5rem, 0, 0);\n }\n }\n\n @media (max-width: 600px) {\n border-left: none;\n\n #Main:not(.middle-column-open) & {\n transform: translate3d(100vw, 0, 0);\n }\n\n #Main.right-column-open & {\n transform: translate3d(-20vw, 0, 0);\n }\n }\n\n #Main.history-animation-disabled & {\n transition: none;\n\n &:after {\n transition: none;\n }\n }\n}\n\nbody.is-android.animation-level-1 {\n --layer-transition: 250ms ease-in-out;\n\n #LeftColumn, #MiddleColumn, #RightColumn {\n transition: transform var(--layer-transition), opacity var(--layer-transition);\n }\n\n #Main:not(.middle-column-shown) {\n #MiddleColumn {\n display: none;\n }\n }\n\n #Main:not(.middle-column-open) {\n #MiddleColumn {\n transform: translate3d(10vw, 0, 0);\n opacity: 0;\n }\n }\n\n #Main.middle-column-open {\n #LeftColumn {\n transform: translate3d(0, 0, 0);\n opacity: 0;\n }\n }\n\n #Main:not(.right-column-shown) {\n #RightColumn {\n display: none;\n }\n }\n\n #Main:not(.right-column-open) {\n #RightColumn {\n transform: translate3d(10vw, 0, 0);\n opacity: 0;\n }\n }\n\n #Main.right-column-open {\n #MiddleColumn {\n transform: translate3d(0, 0, 0);\n opacity: 0;\n }\n }\n}\n"],"names":[],"sourceRoot":""} \ No newline at end of file diff --git a/dist/616.62b1588aeeff3499beea.js b/dist/616.62b1588aeeff3499beea.js deleted file mode 100644 index a349e2256..000000000 --- a/dist/616.62b1588aeeff3499beea.js +++ /dev/null @@ -1,2 +0,0 @@ -"use strict";(self.webpackChunktelegram_t=self.webpackChunktelegram_t||[]).push([[616],{5616:(e,t,n)=>{n.r(t),n.d(t,{Main:()=>So});var a=n(3555),s=n(3716),i=n(4050),o=(n(9005),n(6137)),r=n(5406),c=n(1192),l=n(735),d=n(5806);function u(e){const{chatId:t,threadId:n}=(0,c.Bt)(e)||{};return t&&n?(e=(0,r.qr)(e,t,n,!1),e=(0,r.Pb)(e,t,n,void 0)):e}(0,a.iw)("openLocalTextSearch",(e=>{const{chatId:t,threadId:n}=(0,c.Bt)(e)||{};if(t&&n)return(0,r.qr)(e,t,n,!0)})),(0,a.iw)("closeLocalTextSearch",u),(0,a.iw)("setLocalTextSearchQuery",((e,t,n)=>{const{chatId:a,threadId:s}=(0,c.Bt)(e)||{};if(!a||!s)return;const{query:i}=n,o=(0,d.uw)(a,s),{query:u}=e.localTextSearch.byChatThreadKey[o]||{};return i!==u&&(e=(0,r.Pb)(e,a,s,l.D)),(0,r.qr)(e,a,s,!0,i)})),(0,a.iw)("setLocalMediaSearchType",((e,t,n)=>{const{chatId:a}=(0,c.Bt)(e)||{};if(!a)return;const{mediaType:s}=n;return(0,r.z5)(e,a,s)})),(0,a.iw)("openChat",((e,t,n)=>{const{id:s,threadId:i=o._f,type:l="thread",shouldReplaceHistory:d=!1}=n,m=(0,c.Bt)(e);return m&&m.chatId===s&&m.threadId===i&&m.type===l||(s&&(e=(0,r.pf)(e,s,i,"replyStack",[])),e=u(e=(0,r.i9)(e)),e={...e,isStatisticsShown:!1,messages:{...e.messages,contentToBeScheduled:void 0},...s!==e.forwardMessages.toChatId&&{forwardMessages:{}}},(0,a.R3)(e)),(0,r.Wy)(e,s,i,l,d)})),(0,a.iw)("openPreviousChat",(e=>(0,r.Wy)(e,void 0))),(0,a.iw)("openChatWithInfo",((e,t,n)=>{(0,a.R3)({...e,isChatInfoShown:!0}),t.openChat(n)})),(0,a.iw)("resetChatCreation",(e=>({...e,chatCreation:void 0}))),(0,a.iw)("setNewChatMembersDialogState",((e,t,n)=>({...e,newChatMembersProgress:n}))),(0,a.iw)("openNextChat",((e,t,n)=>{const{targetIndexDelta:a,orderedIds:s}=n,{chatId:i}=(0,c.Bt)(e)||{};if(!i)return void t.openChat({id:s[0]});const o=s.indexOf(i);if(-1===o)return;const r=s[o+a];t.openChat({id:r,shouldReplaceHistory:!0})}));var m=n(1713),h=n(7361),g=n(782),f=n(2267),p=n(257),v=n(3099),I=n(711),y=n(4319);const w=s.ck+s.fK;let Z;function P(e,t,n){const{threadId:a}=(0,c.Bt)(e)||{},s=I.i0,i=(0,c.Zw)(e,t);if(!i||!a)return;const o=n.map((e=>i[e])).filter((t=>(0,c._k)(e,t,a).canCopy)).sort(((e,t)=>e.id-t.id)).reduce(((t,n)=>{const a=(0,c.Ur)(e,n);return t.push(`> ${a?(0,d.OU)(s,a):""}:`),t.push(`${(0,d.MK)(s,n,!1,0,void 0,!0)}\n`),t}),[]);(0,y.TE)(o.join("\n"))}(0,a.iw)("setScrollOffset",((e,t,n)=>{const{chatId:a,threadId:s,scrollOffset:i}=n;return(0,r.pf)(e,a,s,"scrollOffset",i)})),(0,a.iw)("setReplyingToId",((e,t,n)=>{const{messageId:a}=n,s=(0,c.Bt)(e);if(!s)return;const{chatId:i,threadId:o}=s;return(0,r.pf)(e,i,o,"replyingToId",a)})),(0,a.iw)("setEditingId",((e,t,n)=>{const{messageId:a}=n,s=(0,c.Bt)(e);if(!s)return;const{chatId:i,threadId:o,type:l}=s,d="scheduled"===l?"editingScheduledId":"editingId";return(0,r.pf)(e,i,o,d,a)})),(0,a.iw)("setEditingDraft",((e,t,n)=>{const{text:a,chatId:s,threadId:i,type:o}=n,c="scheduled"===o?"editingScheduledDraft":"editingDraft";return(0,r.pf)(e,s,i,c,a)})),(0,a.iw)("editLastMessage",(e=>{const{chatId:t,threadId:n}=(0,c.Bt)(e)||{};if(!t||!n)return;const a=(0,c.Zw)(e,t),s=(0,c.Cb)(e,t,n);if(!a||!s)return;const i=(0,g.dF)(s,(t=>Boolean(a[t]&&(0,c._k)(e,a[t],n).canEdit)));return i?(0,r.pf)(e,t,n,"editingId",i):void 0})),(0,a.iw)("replyToNextMessage",((e,t,n)=>{const{targetIndexDelta:a}=n,{chatId:s,threadId:i}=(0,c.Bt)(e)||{};if(!s||!i)return;const r=(0,c.Zw)(e,s),l=(0,c.Cb)(e,s,i);if(!r||!l)return;const d=(0,c.Yy)(e,s,i);let u;if((0,c.b9)(e,s,i)&&d){const e=Object.keys(r),t=e.indexOf(d.toString())+a;u=t<=e.length+1&&t>=0?Number(e[t]):void 0}else if(i===o._f){var m;const t=(0,c.Z1)(e,s);u=null==t||null===(m=t.lastMessage)||void 0===m?void 0:m.id}else{const t=(0,c.tZ)(e,s,i);u=null==t?void 0:t.lastMessageId}t.setReplyingToId({messageId:u}),t.focusMessage({chatId:s,threadId:i,messageId:u})})),(0,a.iw)("openAudioPlayer",((e,t,n)=>{const{chatId:a,threadId:s,messageId:i,origin:o,volume:r,playbackRate:c,isMuted:l}=n;return{...e,audioPlayer:{chatId:a,threadId:s,messageId:i,origin:null!=o?o:e.audioPlayer.origin,volume:null!=r?r:e.audioPlayer.volume,playbackRate:c||e.audioPlayer.playbackRate,isMuted:l||e.audioPlayer.isMuted}}})),(0,a.iw)("setAudioPlayerVolume",((e,t,n)=>{const{volume:a}=n;return{...e,audioPlayer:{...e.audioPlayer,volume:a}}})),(0,a.iw)("setAudioPlayerPlaybackRate",((e,t,n)=>{const{playbackRate:a}=n;return{...e,audioPlayer:{...e.audioPlayer,playbackRate:a}}})),(0,a.iw)("setAudioPlayerMuted",((e,t,n)=>{const{isMuted:a}=n;return{...e,audioPlayer:{...e.audioPlayer,isMuted:a}}})),(0,a.iw)("setAudioPlayerOrigin",((e,t,n)=>{const{origin:a}=n;return{...e,audioPlayer:{...e.audioPlayer,origin:a}}})),(0,a.iw)("closeAudioPlayer",(e=>({...e,audioPlayer:{volume:e.audioPlayer.volume,playbackRate:e.audioPlayer.playbackRate,isMuted:e.audioPlayer.isMuted}}))),(0,a.iw)("openPollResults",((e,t,n)=>{const{chatId:s,messageId:i}=n;if((0,c.Jf)(e)){if(s!==e.pollResults.chatId||i!==e.pollResults.messageId)return{...e,pollResults:{chatId:s,messageId:i,voters:{}}}}else window.setTimeout((()=>{e=(0,a.Rd)(),(0,a.R3)({...e,pollResults:{chatId:s,messageId:i,voters:{}}})}),450)})),(0,a.iw)("closePollResults",(e=>({...e,pollResults:{}}))),(0,a.iw)("focusLastMessage",((e,t)=>{const n=(0,c.Bt)(e);if(!n)return;const{chatId:a,threadId:s}=n;let i;if(s===o._f){var r;const t=(0,c.Z1)(e,a);i=null==t||null===(r=t.lastMessage)||void 0===r?void 0:r.id}else{const t=(0,c.tZ)(e,a,s);i=null==t?void 0:t.lastMessageId}i&&t.focusMessage({chatId:a,threadId:s,messageId:i,noHighlight:!0})})),(0,a.iw)("focusNextReply",((e,t)=>{const n=(0,c.Bt)(e);if(!n)return;const{chatId:s,threadId:i}=n,o=(0,c.p9)(e,s,i);if(o&&0!==o.length){const n=o.pop();e=(0,r.pf)(e,s,i,"replyStack",[...o]),(0,a.R3)(e),t.focusMessage({chatId:s,threadId:i,messageId:n})}else t.focusLastMessage()})),(0,a.iw)("focusMessage",((e,t,n)=>{const{chatId:s,threadId:i=o._f,messageListType:l="thread",noHighlight:d,groupedId:u,groupedChatId:h,replyMessageId:g,isResizingContainer:f}=n;let{messageId:p}=n;if(void 0!==u){const t=(0,c.y8)(e,h,u);null!=t&&t.length&&([p]=t)}const v=(0,c.Bt)(e),I=!v||s!==v.chatId||i!==v.threadId||l!==v.type;if(Z&&(clearTimeout(Z),Z=void 0),Z=window.setTimeout((()=>{let e=(0,a.Rd)();e=(0,r.cq)(e),e=(0,r.wV)(e),(0,a.R3)(e)}),d?w:1500),e=(0,r.cq)(e,s,p,d,f),e=(0,r.wV)(e,void 0),g){const t=(0,c.p9)(e,s,i)||[];e=(0,r.pf)(e,s,i,"replyStack",[...t,g])}I&&(e=(0,r.wV)(e,m.fo.Static));const y=(0,c.Cb)(e,s,i);if(y&&y.includes(p))return(0,a.R3)(e),void t.openChat({id:s,threadId:i});if(I&&(e=(0,r.pf)(e,s,i,"viewportIds",void 0)),e=(0,r.pf)(e,s,i,"outlyingIds",void 0),y&&!I){const t=p>y[0]?m.fo.Down:m.fo.Up;e=(0,r.wV)(e,t)}(0,a.R3)(e),t.openChat({id:s,threadId:i}),t.loadViewportMessages()})),(0,a.iw)("openForwardMenu",((e,t,n)=>{const{fromChatId:a,messageIds:s,groupedId:i}=n;let o;return i&&(o=(0,c.xH)(e,a,i)),{...e,forwardMessages:{fromChatId:a,messageIds:o||s,isModalShown:!0}}})),(0,a.iw)("exitForwardMode",(e=>{(0,a.R3)({...e,forwardMessages:{}})})),(0,a.iw)("setForwardChatId",((e,t,n)=>{const{id:s}=n;(0,a.R3)({...e,forwardMessages:{...e.forwardMessages,toChatId:s,isModalShown:!1}}),t.openChat({id:s}),t.closeMediaViewer(),t.exitMessageSelectMode()})),(0,a.iw)("openForwardMenuForSelectedMessages",((e,t)=>{if(!e.selectedMessages)return;const{chatId:n,messageIds:a}=e.selectedMessages;t.openForwardMenu({fromChatId:n,messageIds:a})})),(0,a.iw)("cancelMessageMediaDownload",((e,t,n)=>{const{message:s}=n,i=e.activeDownloads.byChatId[s.chatId];i&&i.length&&(0,a.R3)({...e,activeDownloads:{byChatId:{...e.activeDownloads.byChatId,[s.chatId]:i.filter((e=>e!==s.id))}}})})),(0,a.iw)("downloadMessageMedia",((e,t,n)=>{const{message:s}=n;s&&(0,a.R3)({...e,activeDownloads:{byChatId:{...e.activeDownloads.byChatId,[s.chatId]:[...e.activeDownloads.byChatId[s.chatId]||[],s.id]}}})})),(0,a.iw)("downloadSelectedMessages",((e,t)=>{if(!e.selectedMessages)return;const{chatId:n,messageIds:a}=e.selectedMessages,{threadId:s}=(0,c.Bt)(e)||{},i=(0,c.Zw)(e,n);i&&s&&a.map((e=>i[e])).filter((t=>(0,c._k)(e,t,s).canDownload)).forEach((e=>t.downloadMessageMedia({message:e})))})),(0,a.iw)("enterMessageSelectMode",((e,t,n)=>{const{messageId:a}=n||{},s=(0,c.jr)(e);return s?(0,r.M6)(e,s.id,a):e})),(0,a.iw)("toggleMessageSelection",((e,t,n)=>{const{messageId:s,groupedId:i,childMessageIds:o,withShift:l}=n,d=(0,c.Bt)(e);if(!d)return;const{chatId:u,threadId:m,type:g}=d;e=(0,r.Ob)(e,u,m,g,s,i,o,l),(0,a.R3)(e),e.shouldShowContextMenuHint&&(t.disableContextMenuHint(),t.showNotification({message:`To **edit** or **reply**, close this menu. Then ${h.$b?"long tap":"right click"} on a message.`}))})),(0,a.iw)("disableContextMenuHint",(e=>{if(e.shouldShowContextMenuHint)return{...e,shouldShowContextMenuHint:!1}})),(0,a.iw)("exitMessageSelectMode",r.i9),(0,a.iw)("openPollModal",(e=>({...e,isPollModalOpen:!0}))),(0,a.iw)("closePollModal",(e=>({...e,isPollModalOpen:!1}))),(0,a.iw)("checkVersionNotification",((e,t)=>{const n=s.Ji.split(".").slice(0,2).join("."),{serviceNotifications:a}=e;if(a.find((e=>{let{version:t}=e;return t===n})))return;const i={chatId:s.aw,date:(0,f.b)(e.serverTimeOffset),content:{text:(0,v.Z)(p)},isOutgoing:!1};t.createServiceNotification({message:i,version:n})})),(0,a.iw)("createServiceNotification",((e,t,n)=>{var i;const{message:o,version:r}=n,{serviceNotifications:l}=e,d=(0,c.Z1)(e,s.aw),u=Math.max((null===(i=d.lastMessage)||void 0===i?void 0:i.id)||0,...l.map((e=>{let{id:t}=e;return t}))),m=(l.length+1)/1e3,h=Math.floor(u)+m;o.id=h;const g={id:h,message:o,version:r,isUnread:!0};(0,a.R3)({...e,serviceNotifications:[...l.slice(-1e3),g]}),t.apiUpdate({"@type":"newMessage",id:o.id,chatId:o.chatId,message:o})})),(0,a.iw)("openReactorListModal",((e,t,n)=>{const{chatId:a,messageId:s}=n;return{...e,reactorModal:{chatId:a,messageId:s}}})),(0,a.iw)("closeReactorListModal",(e=>({...e,reactorModal:void 0}))),(0,a.iw)("openSeenByModal",((e,t,n)=>{const{chatId:a,messageId:s}=n;return{...e,seenByModal:{chatId:a,messageId:s}}})),(0,a.iw)("closeSeenByModal",(e=>({...e,seenByModal:void 0}))),(0,a.iw)("copySelectedMessages",(e=>{if(!e.selectedMessages)return;const{chatId:t,messageIds:n}=e.selectedMessages;P(e,t,n)})),(0,a.iw)("copyMessagesByIds",((e,t,n)=>{const{messageIds:a}=n,s=(0,c.jr)(e);a&&0!==a.length&&s&&P(e,s.id,a)})),(0,a.iw)("setGlobalSearchQuery",((e,t,n)=>{const{query:a}=n,{chatId:s}=e.globalSearch;return(0,r.No)(e,{globalResults:{},localResults:{},resultsByType:void 0,...a?{fetchingStatus:{chats:!s,messages:!0}}:{fetchingStatus:void 0},query:a})})),(0,a.iw)("addRecentlyFoundChatId",((e,t,n)=>{const{id:a}=n,{recentlyFoundChatIds:s}=e.globalSearch;if(!s)return(0,r.No)(e,{recentlyFoundChatIds:[a]});const i=s.filter((e=>e!==a));return i.unshift(a),i.length>10&&i.pop(),(0,r.No)(e,{recentlyFoundChatIds:i})})),(0,a.iw)("clearRecentlyFoundChats",(e=>(0,r.No)(e,{recentlyFoundChatIds:void 0}))),(0,a.iw)("setGlobalSearchContent",((e,t,n)=>{const{content:a}=n;return(0,r.Og)(e,a)})),(0,a.iw)("setGlobalSearchChatId",((e,t,n)=>{const{id:a}=n;return(0,r.No)(e,{chatId:a,query:void 0,resultsByType:void 0})})),(0,a.iw)("setStickerSearchQuery",((e,t,n)=>{const{query:a}=n;return{...e,stickers:{...e.stickers,search:{query:a,resultIds:void 0}}}})),(0,a.iw)("setGifSearchQuery",((e,t,n)=>{const{query:a}=n;return{...e,gifs:{...e.gifs,search:{query:a,offsetId:void 0,results:void 0}}}})),(0,a.iw)("setUserSearchQuery",((e,t,n)=>{const{query:a}=n;return(0,r.Lm)(e,{globalUserIds:void 0,localUserIds:void 0,fetchingStatus:Boolean(a),query:a})})),(0,a.iw)("openAddContactDialog",((e,t,n)=>{const{userId:a}=n;return{...e,newContact:{userId:a}}})),(0,a.iw)("openNewContactDialog",(e=>({...e,newContact:{isByPhoneNumber:!0}}))),(0,a.iw)("closeNewContactDialog",(e=>(0,r.ft)(e))),n(3456);var C=n(1947),b=n(6926);(0,a.iw)("toggleChatInfo",((e,t,n)=>({...e,isChatInfoShown:void 0!==n?n:!e.isChatInfoShown}))),(0,a.iw)("setLeftColumnWidth",((e,t,n)=>({...e,leftColumnWidth:n}))),(0,a.iw)("resetLeftColumnWidth",(e=>({...e,leftColumnWidth:void 0}))),(0,a.iw)("toggleManagement",(e=>{const{chatId:t}=(0,c.Bt)(e)||{};if(t)return{...e,management:{byChatId:{...e.management.byChatId,[t]:{...e.management.byChatId[t],isActive:!(e.management.byChatId[t]||{}).isActive}}}}})),(0,a.iw)("requestNextManagementScreen",((e,t,n)=>{const{screen:a}=n||{},{chatId:s}=(0,c.Bt)(e)||{};if(s)return{...e,management:{byChatId:{...e.management.byChatId,[s]:{...e.management.byChatId[s],isActive:!0,nextScreen:a}}}}})),(0,a.iw)("closeManagement",(e=>{const{chatId:t}=(0,c.Bt)(e)||{};if(t)return{...e,management:{byChatId:{...e.management.byChatId,[t]:{...e.management.byChatId[t],isActive:!1}}}}})),(0,a.iw)("openChat",(e=>{if(h.wB||h.p7)return{...e,isLeftColumnShown:0===e.messages.messageLists.length}})),(0,a.iw)("toggleStatistics",(e=>({...e,isStatisticsShown:!e.isStatisticsShown}))),(0,a.iw)("toggleLeftColumn",(e=>({...e,isLeftColumnShown:!e.isLeftColumnShown}))),(0,a.iw)("addRecentEmoji",((e,t,n)=>{const{emoji:a}=n,{recentEmojis:s}=e;if(!s)return{...e,recentEmojis:[a]};const i=s.filter((e=>e!==a));return i.unshift(a),i.length>18&&i.pop(),{...e,recentEmojis:i}})),(0,a.iw)("addRecentSticker",((e,t,n)=>{const{sticker:a}=n,{recent:s}=e.stickers;if(!s)return{...e,stickers:{...e.stickers,recent:{hash:"0",stickers:[a]}}};const i=s.stickers.filter((e=>e.id!==a.id));return i.unshift(a),{...e,stickers:{...e.stickers,recent:{...s,stickers:i}}}})),(0,a.iw)("showNotification",((e,t,n)=>{const a=n;a.localId=(0,b.Z)({});const s=[...e.notifications],i=s.findIndex((e=>e.message===a.message));return-1!==i&&s.splice(i,1),s.push(a),{...e,notifications:s}})),(0,a.iw)("dismissNotification",((e,t,n)=>{const a=e.notifications.filter((e=>{let{localId:t}=e;return t!==n.localId}));return{...e,notifications:a}})),(0,a.iw)("showDialog",((e,t,n)=>{const{data:a}=n;if("message"in a&&a.hasErrorKey&&!(0,C.ZP)(a))return e;const s=[...e.dialogs];if("message"in a){const e=s.findIndex((e=>e.message===a.message));-1!==e&&s.splice(e,1)}return s.push(a),{...e,dialogs:s}})),(0,a.iw)("dismissDialog",(e=>{const t=[...e.dialogs];return t.pop(),{...e,dialogs:t}})),(0,a.iw)("toggleSafeLinkModal",((e,t,n)=>{const{url:a}=n;return{...e,safeLinkModalUrl:a}})),(0,a.iw)("openHistoryCalendar",((e,t,n)=>{const{selectedAt:a}=n;return{...e,historyCalendarSelectedAt:a}})),(0,a.iw)("closeHistoryCalendar",(e=>({...e,historyCalendarSelectedAt:void 0}))),(0,a.iw)("openPaymentModal",((e,t,n)=>{const{chatId:a,messageId:s}=n;return{...e,payment:{...e.payment,chatId:a,messageId:s,isPaymentModalOpen:!0}}})),(0,a.iw)("closePaymentModal",(e=>(e=(0,r.bp)(e),(0,r.WY)(e)))),(0,a.iw)("addPaymentError",((e,t,n)=>{const{error:a}=n;return{...e,payment:{...e.payment,error:a}}})),n(8422),(0,a.iw)("openMediaViewer",((e,t,n)=>{const{chatId:a,threadId:s,messageId:i,avatarOwnerId:o,profilePhotoIndex:r,origin:c,volume:l,playbackRate:d,isMuted:u}=n;return{...e,mediaViewer:{...e.mediaViewer,chatId:a,threadId:s,messageId:i,avatarOwnerId:o,profilePhotoIndex:r,origin:c,volume:null!=l?l:e.mediaViewer.volume,playbackRate:d||e.mediaViewer.playbackRate,isMuted:u||e.mediaViewer.isMuted},forwardMessages:{}}})),(0,a.iw)("closeMediaViewer",(e=>{const{volume:t,isMuted:n,playbackRate:a}=e.mediaViewer;return{...e,mediaViewer:{volume:t,isMuted:n,playbackRate:a}}})),(0,a.iw)("setMediaViewerVolume",((e,t,n)=>{const{volume:a}=n;return{...e,mediaViewer:{...e.mediaViewer,volume:a}}})),(0,a.iw)("setMediaViewerPlaybackRate",((e,t,n)=>{const{playbackRate:a}=n;return{...e,mediaViewer:{...e.mediaViewer,playbackRate:a}}})),(0,a.iw)("setMediaViewerMuted",((e,t,n)=>{const{isMuted:a}=n;return{...e,mediaViewer:{...e.mediaViewer,isMuted:a}}})),n(5456),n(7225);var S=n(1226),E=n(9118);const M=new Map,R=(0,E.Ds)((e=>e()),500,!1);async function k(e,t,n,i){let o=arguments.length>4&&void 0!==arguments[4]&&arguments[4],l=arguments.length>5&&void 0!==arguments[5]&&arguments[5];const d=e.id;let u;switch(i){case m.Uq.Backwards:u=void 0;break;case m.Uq.Around:u=-(Math.round(s.hT/2)+1);break;case m.Uq.Forwards:u=-(s.hT+1)}const h=await(0,S.t9)("fetchMessages",{chat:(0,c.Cm)((0,a.Rd)(),d,t),offsetId:n,addOffset:u,limit:s.hT,threadId:t});if(!h)return;const{messages:f,users:p,chats:v,threadInfos:I}=h;let y=(0,a.Rd)();const w=d===s.aw?y.serviceNotifications.map((e=>{let{message:t}=e;return t})):[],Z=[].concat(f,w),P=(0,g.ee)(Z,"id"),C=Object.keys(P).map(Number);y=(0,r.c_)(y,d,P),y=o?(0,r.ff)(y,d,t,C):(0,r.xj)(y,d,t,C),y=(0,r.Sh)(y,(0,g.ee)(p,"id")),y=(0,r.fZ)(y,(0,g.ee)(v,"id")),y=(0,r.j6)(y,d,I);let b=(0,c.gb)(y,d,t);const E=(0,c.qC)(y,d,t);if(o&&b&&E&&(E.length&&!(0,g.YE)(b,E)||(y=(0,r.xj)(y,d,t,E),b=(0,c.gb)(y,d,t),y=(0,r.pf)(y,d,t,"outlyingIds",void 0),o=!1)),!l){const e=o?E:b,{newViewportIds:a}=N(e,n,i);y=(0,r.y9)(y,d,t,a)}(0,a.R3)(y)}function N(e,t,n){const{length:a}=e,i=t?function(e,t){return te[e.length-1]?e.length-1:e.findIndex(((n,a)=>n===t||nt))}(e,t):-1,o=n===m.Uq.Backwards?i:i+1||a,r=o-s.hT,c=o+s.hT-1,l=e.slice(Math.max(0,r),c+1);let d,u;switch(n){case m.Uq.Backwards:d=o>0,u=r>=0;break;case m.Uq.Forwards:d=o0,u=l.length===s.hT}return{newViewportIds:l,areSomeLocal:d,areAllLocal:u}}async function T(e){let t;const n=e.attachment?(e,s)=>{M.has(s)||(t=s,M.set(s,n));const i=(0,a.Rd)();(0,a.R3)({...i,fileUploads:{byMessageLocalId:{...i.fileUploads.byMessageLocalId,[s]:{progress:e}}}})}:void 0;(e.replyingTo||h.cj)&&await(0,E.Pn)();const s=(0,a.Rd)();e.serverTimeOffset=s.serverTimeOffset;const i=(0,c.Bt)(s);if(!i)return;const{threadId:r}=i;e.replyingTo||r===o._f||(e.replyingTo=(0,c.qS)(s,e.chat.id,r)),await(0,S.t9)("sendMessage",e,n),n&&t&&M.delete(t)}(0,a.iw)("loadViewportMessages",((e,t,n)=>{const{direction:a=m.Uq.Around,isBudgetPreload:i=!1}=n||{};let{chatId:o,threadId:l}=n||{};if(!o){const t=(0,c.Bt)(e);if(!t)return;o=t.chatId,l=t.threadId}const d=(0,c.Z1)(e,o);if(!d||d.isRestricted)return;const u=(0,c.Cb)(e,o,l),h=(0,c.gb)(e,o,l),g=(0,c.qC)(e,o,l);if(u&&u.length&&a!==m.Uq.Around){const n=a===m.Uq.Backwards?u[0]:u[u.length-1],s=Boolean(g),c=s?g:h,{newViewportIds:f,areSomeLocal:p,areAllLocal:v}=N(c,n,a);if(p&&(e=(0,r.y9)(e,o,l,f)),async function(e,t,n,a,s,i,o,r){t||await k(s,i,r,o,n,a),a||(await Promise.resolve(),e.loadViewportMessages({chatId:s.id,threadId:i,direction:o,isBudgetPreload:!0}))}(t,v,s,i,d,l,a,n),i)return}else{const t=(0,c.G$)(e,o)||(0,c.rd)(e,o,l),n=Boolean(t&&h&&!h.includes(t)),a=(n?g:h)||[],{newViewportIds:u,areSomeLocal:f,areAllLocal:p}=N(a,t,m.Uq.Around);f&&u.length>=s.hT&&(e=(0,r.y9)(e,o,l,u)),p||k(d,l,t,m.Uq.Around,n,i)}return e})),(0,a.iw)("loadMessage",(async(e,t,n)=>{const{chatId:s,messageId:i,replyOriginForId:l,threadUpdate:d}=n,u=(0,c.Z1)(e,s);if(!u)return;const m=await async function(e,t,n){const s=await(0,S.t9)("fetchMessage",{chat:e,messageId:t});if(!s)return;if(s===o._Q){if(n){let t=(0,a.Rd)();const s=(0,c.hj)(t,e.id,n);t=(0,r.cY)(t,e.id,n,{...s,replyToMessageId:void 0}),(0,a.R3)(t)}return}let i=(0,a.Rd)();return i=(0,r.cY)(i,e.id,t,s.message),i=(0,r.Sh)(i,(0,g.ee)(s.users,"id")),(0,a.R3)(i),s.message}(u,i,l);if(m&&d){const{lastMessageId:e,isDeleting:t}=d;return(0,r.lG)((0,a.Rd)(),m,s,e,t)}})),(0,a.iw)("sendMessage",((e,t,n)=>{const a=(0,c.Bt)(e);if(!a)return;const{chatId:i,threadId:o,type:r}=a;if("scheduled"===r&&!n.scheduledAt)return{...e,messages:{...e.messages,contentToBeScheduled:n}};const l=(0,c.Z1)(e,i),d={...n,chat:l,replyingTo:(0,c.Yy)(e,i,o),noWebPage:(0,c.tV)(e,i,o),sendAs:(0,c._5)(e,i)};t.setReplyingToId({messageId:void 0}),t.clearWebPagePreview({chatId:i,threadId:o,value:!1});const u=!n.attachments||n.attachments.length<=1,m=!u&&n.attachments&&n.attachments.length>1;if(u){const{attachments:e,...t}=d;T({...t,attachment:e?e[0]:void 0})}else if(m){const{text:e,entities:t,attachments:n,...a}=d,i=(0,g.Vl)(n,s.DU);for(let n=0;n0?r:void 0}),o.forEach((e=>{T({...a,attachment:e,groupedId:r})}))}}else{const{text:e,entities:t,attachments:n,replyingTo:a,...s}=d;e&&T({...s,text:e,entities:t,replyingTo:a}),n.forEach((e=>{T({...s,attachment:e})}))}})),(0,a.iw)("editMessage",((e,t,n)=>{const{serverTimeOffset:a}=e,{text:s,entities:i}=n,o=(0,c.Bt)(e);if(!o)return;const{chatId:r,threadId:l,type:d}=o,u=(0,c.Z1)(e,r),m=(0,c.kK)(e,r,l,d);u&&m&&((0,S.t9)("editMessage",{chat:u,message:m,text:s,entities:i,noWebPage:(0,c.tV)(e,r,l),serverTimeOffset:a}),t.setEditingId({messageId:void 0}))})),(0,a.iw)("cancelSendingMessage",((e,t,n)=>{const{chatId:a,messageId:s}=n,i=(0,c.hj)(e,a,s),o=i&&M.get(i.previousLocalId||i.id);o&&(0,S.u3)(o),t.apiUpdate({"@type":"deleteMessages",ids:[s],chatId:a})})),(0,a.iw)("saveDraft",((e,t,n)=>{const{chatId:a,threadId:s,draft:i}=n;if(!i)return;const{text:l,entities:d}=i,u=(0,c.Z1)(e,a);return s===o._f&&(0,S.t9)("saveDraft",{chat:u,text:l,entities:d,replyToMsgId:(0,c.Yy)(e,a,s)}),e=(0,r.pf)(e,a,s,"draft",i),(0,r.a4)(e,a,{draftDate:Math.round(Date.now()/1e3)})})),(0,a.iw)("clearDraft",((e,t,n)=>{const{chatId:a,threadId:s,localOnly:i}=n;if(!(0,c.Ms)(e,a,s))return;const l=(0,c.Z1)(e,a);return i||s!==o._f||(0,S.t9)("clearDraft",l),e=(0,r.pf)(e,a,s,"draft",void 0),(0,r.a4)(e,a,{draftDate:void 0})})),(0,a.iw)("toggleMessageWebPage",((e,t,n)=>{const{chatId:a,threadId:s,noWebPage:i}=n;return(0,r.pf)(e,a,s,"noWebPage",i)})),(0,a.iw)("pinMessage",((e,t,n)=>{const a=(0,c.jr)(e);if(!a)return;const{messageId:s,isUnpin:i,isOneSide:o,isSilent:r}=n;(0,S.t9)("pinMessage",{chat:a,messageId:s,isUnpin:i,isOneSide:o,isSilent:r})})),(0,a.iw)("unpinAllMessages",((e,t,n)=>{const s=(0,c.Z1)(e,n.chatId);s&&async function(e){await(0,S.t9)("unpinAllMessages",{chat:e});let t=(0,a.Rd)();t=(0,r.pf)(t,e.id,o._f,"pinnedIds",[]),(0,a.R3)(t)}(s)})),(0,a.iw)("deleteMessages",((e,t,n)=>{const{messageIds:a,shouldDeleteForAll:s}=n,i=(0,c.Bt)(e);if(!i)return;const{chatId:o,threadId:r}=i,l=(0,c.Z1)(e,o);(0,S.t9)("deleteMessages",{chat:l,messageIds:a,shouldDeleteForAll:s});const d=(0,c._$)(e,o,r);a.includes(d)&&t.setEditingId({messageId:void 0})})),(0,a.iw)("deleteScheduledMessages",((e,t,n)=>{const{messageIds:a}=n,s=(0,c.Bt)(e);if(!s)return;const{chatId:i}=s,o=(0,c.Z1)(e,i);(0,S.t9)("deleteScheduledMessages",{chat:o,messageIds:a});const r=(0,c.wU)(e,i);a.includes(r)&&t.setEditingId({messageId:void 0})})),(0,a.iw)("deleteHistory",(async(e,t,n)=>{var a;const{chatId:s,shouldDeleteForAll:i}=n,o=(0,c.Z1)(e,s);if(!o)return;const r=null===(a=o.lastMessage)||void 0===a?void 0:a.id;await(0,S.t9)("deleteHistory",{chat:o,shouldDeleteForAll:i,maxId:r});const l=(0,c.Bt)(e);l&&l.chatId===s&&t.openChat({id:void 0})})),(0,a.iw)("reportMessages",(async(e,t,n)=>{const{messageIds:a,reason:s,description:i}=n,o=(0,c.Bt)(e);if(!o)return;const{chatId:r}=o,l=(0,c.Z1)(e,r),d=await(0,S.t9)("reportMessages",{peer:l,messageIds:a,reason:s,description:i});t.showNotification({message:d?"Thank you! Your report will be reviewed by our team.":"Error occured while submiting report. Please, try again later."})})),(0,a.iw)("sendMessageAction",(async(e,t,n)=>{const{action:a,chatId:s,threadId:i}=n;if(s===e.currentUserId)return;const o=(0,c.Z1)(e,s);o&&await(0,S.t9)("sendMessageAction",{peer:o,threadId:i,action:a})})),(0,a.iw)("markMessageListRead",((e,t,n)=>{const{serverTimeOffset:a}=e,i=(0,c.Bt)(e);if(!i)return;const{chatId:l,threadId:d}=i,u=(0,c.Cm)(e,l,d);if(!u)return;const{maxId:m}=n;if(R((()=>{(0,S.t9)("markMessageListRead",{serverTimeOffset:a,chat:u,threadId:d,maxId:m})})),d!==o._f)return;l===s.aw&&(e={...e,serviceNotifications:e.serviceNotifications.map((e=>e.isUnread&&e.id<=m?{...e,isUnread:!1}:e))});const h=(0,c.Cb)(e,l,d),g=(0,c.It)(e,l,d);if(!h||!g||!u.unreadCount)return e;const f=function(e,t,n){let a=0;for(let s=0,i=e.length;s=t&&e[s]<=n&&a++,!(e[s]>=n));s++);return a}(h,g,m);return f?(0,r.a4)(e,l,{lastReadInboxMessageId:m,unreadCount:Math.max(0,u.unreadCount-f)}):e})),(0,a.iw)("markMessagesRead",((e,t,n)=>{const a=(0,c.jr)(e);if(!a)return;const{messageIds:s}=n;(0,S.t9)("markMessagesRead",{chat:a,messageIds:s})})),(0,a.iw)("loadWebPagePreview",((e,t,n)=>{const{text:s}=n;!async function(e){const t=await(0,S.t9)("fetchWebPagePreview",{message:e});(0,a.R3)({...(0,a.Rd)(),webPagePreview:t})}(s)})),(0,a.iw)("clearWebPagePreview",(e=>{if(e.webPagePreview)return{...e,webPagePreview:void 0}})),(0,a.iw)("sendPollVote",((e,t,n)=>{const{chatId:a,messageId:s,options:i}=n,o=(0,c.Z1)(e,a);o&&(0,S.t9)("sendPollVote",{chat:o,messageId:s,options:i})})),(0,a.iw)("loadPollOptionResults",((e,t,n)=>{const{chat:s,messageId:i,option:o,offset:c,limit:l,shouldResetVoters:d}=n;!async function(e,t,n,s,i,o){const c=await(0,S.t9)("loadPollOptionResults",{chat:e,messageId:t,option:n,offset:s,limit:i});if(!c)return;let l=(0,a.Rd)();l=(0,r.Sh)(l,(0,g.ee)(c.users,"id"));const{voters:d}=l.pollResults;(0,a.R3)({...l,pollResults:{...l.pollResults,voters:{...d,[n]:(0,g.Tw)([...!o&&d&&d[n]?d[n]:[],...c&&c.users.map((e=>e.id))])},offsets:{...l.pollResults.offsets?l.pollResults.offsets:{},[n]:c.nextOffset||""}}})}(s,i,o,c,l,d)})),(0,a.iw)("forwardMessages",((e,t,n)=>{const{fromChatId:s,messageIds:i,toChatId:o}=e.forwardMessages,r=s?(0,c.Z1)(e,s):void 0,l=o?(0,c.Z1)(e,o):void 0,u=s&&i?i.sort(((e,t)=>e-t)).map((t=>(0,c.hj)(e,s,t))).filter(Boolean):void 0;if(!r||!l||!u)return;const{isSilent:m,scheduledAt:h}=n,g=(0,c._5)(e,o),f=u.filter((e=>!(0,d.jM)(e)));f.length&&(0,S.t9)("forwardMessages",{fromChat:r,toChat:l,messages:f,serverTimeOffset:(0,a.Rd)().serverTimeOffset,isSilent:m,scheduledAt:h,sendAs:g}),u.filter((e=>(0,d.jM)(e))).forEach((e=>{const{text:t,entities:n}=e.content.text||{},{sticker:a,poll:s}=e.content;T({chat:l,text:t,entities:n,sticker:a,poll:s,isSilent:m,scheduledAt:h,sendAs:g})})),(0,a.R3)({...(0,a.Rd)(),forwardMessages:{}})})),(0,a.iw)("loadScheduledHistory",((e,t,n)=>{const{chatId:s}=n,i=(0,c.Z1)(e,s);i&&async function(e){const t=await(0,S.t9)("fetchScheduledHistory",{chat:e});if(!t)return;const{messages:n}=t,s=(0,g.ee)(n,"id"),i=Object.keys(s).map(Number).sort(((e,t)=>t-e));let c=(0,a.Rd)();c=(0,r.w3)(c,e.id,s),c=(0,r.pf)(c,e.id,o._f,"scheduledIds",i),(0,a.R3)(c)}(i)})),(0,a.iw)("sendScheduledMessages",((e,t,n)=>{const{chatId:a,id:s}=n,i=(0,c.Z1)(e,a);i&&(0,S.t9)("sendScheduledMessages",{chat:i,ids:[s]})})),(0,a.iw)("rescheduleMessage",((e,t,n)=>{const{chatId:a,messageId:s,scheduledAt:i}=n,o=(0,c.Z1)(e,a),r=o&&(0,c.Tm)(e,o.id,s);o&&r&&(0,S.t9)("rescheduleMessage",{chat:o,message:r,scheduledAt:i})})),(0,a.iw)("requestThreadInfoUpdate",((e,t,n)=>{const{chatId:a,threadId:s}=n,i=(0,c.Cm)(e,a,s);i&&(0,S.t9)("requestThreadInfoUpdate",{chat:i,threadId:s})})),(0,a.iw)("loadPinnedMessages",((e,t,n)=>{const{chatId:s}=n,i=(0,c.Z1)(e,s);i&&async function(e){const t=await(0,S.t9)("fetchPinnedMessages",{chat:e});if(!t)return;const{messages:n,chats:s,users:i}=t,c=(0,g.ee)(n,"id"),l=Object.keys(c).map(Number).sort(((e,t)=>t-e));let d=(0,a.Rd)();d=(0,r.c_)(d,e.id,c),d=(0,r.pf)(d,e.id,o._f,"pinnedIds",l),d=(0,r.Sh)(d,(0,g.ee)(i,"id")),d=(0,r.fZ)(d,(0,g.ee)(s,"id")),(0,a.R3)(d)}(i)})),(0,a.iw)("loadSeenBy",(async(e,t,n)=>{const{chatId:s,messageId:i}=n,o=(0,c.Z1)(e,s);if(!o)return;const l=await(0,S.t9)("fetchSeenBy",{chat:o,messageId:i});return l?(0,r.cY)((0,a.Rd)(),s,i,{seenByUserIds:l}):void 0})),(0,a.iw)("saveDefaultSendAs",((e,t,n)=>{const{chatId:a,sendAsId:s}=n,i=(0,c.Z1)(e,a),o=(0,c.Z1)(e,s)||(0,c.dy)(e,s);if(i&&o)return(0,S.t9)("saveDefaultSendAs",{sendAs:o,chat:i}),(0,r.a4)(e,a,{fullInfo:{...i.fullInfo,sendAsId:s}})})),(0,a.iw)("loadSendAs",(async(e,t,n)=>{const{chatId:s}=n,i=(0,c.Z1)(e,s);if(!i)return;const o=await(0,S.t9)("fetchSendAs",{chat:i});return o?(e=(0,a.Rd)(),e=(0,r.Sh)(e,(0,g.ee)(o.users,"id")),e=(0,r.fZ)(e,(0,g.ee)(o.chats,"id")),e=(0,r.a4)(e,s,{sendAsIds:o.ids})):(0,r.a4)((0,a.Rd)(),s,{sendAsIds:[]})})),(0,a.iw)("loadSponsoredMessages",(async(e,t,n)=>{const{chatId:s}=n,i=(0,c.Z1)(e,s);if(!i)return;const o=await(0,S.t9)("fetchSponsoredMessages",{chat:i});return o?(e=(0,a.Rd)(),e=(0,r.Fn)(e,s,o.messages[0]),e=(0,r.Sh)(e,(0,g.ee)(o.users,"id")),e=(0,r.fZ)(e,(0,g.ee)(o.chats,"id"))):void 0})),(0,a.iw)("viewSponsoredMessage",((e,t,n)=>{const{chatId:a}=n,s=(0,c.Z1)(e,a),i=(0,c.fS)(e,a);s&&i&&(0,S.t9)("viewSponsoredMessage",{chat:s,random:i.randomId})}));var A=n(5765);const B=(0,E.P2)((e=>e()),500,!1);async function x(e,t){const n=await(0,S.t9)("searchGifs",{query:e,offset:t});n&&(0,a.R3)((0,r.rq)((0,a.Rd)(),!t,n.gifs,n.nextOffset))}(0,a.iw)("loadStickerSets",(e=>{const{hash:t}=e.stickers.added||{};!async function(e){const t=await(0,S.t9)("fetchStickerSets",{hash:e});t&&(0,a.R3)((0,r.z3)((0,a.Rd)(),"added",t.hash,t.sets))}(t)})),(0,a.iw)("loadAddedStickers",(async(e,t)=>{const{setIds:n}=e.stickers.added,a=e.stickers.setsById;if(n&&n.length)for(let e=0;e0&&await(0,E.wO)(200))}})),(0,a.iw)("loadRecentStickers",(e=>{const{hash:t}=e.stickers.recent||{};!async function(e){const t=await(0,S.t9)("fetchRecentStickers",{hash:e});if(!t)return;const n=(0,a.Rd)();(0,a.R3)({...n,stickers:{...n.stickers,recent:t}})}(t)})),(0,a.iw)("loadFavoriteStickers",(e=>{const{hash:t}=e.stickers.favorite||{};!async function(e){const t=await(0,S.t9)("fetchFavoriteStickers",{hash:e});if(!t)return;const n=(0,a.Rd)();(0,a.R3)({...n,stickers:{...n.stickers,favorite:t}})}(t)})),(0,a.iw)("loadGreetingStickers",(async e=>{const{hash:t}=e.stickers.greeting||{},n=await(0,S.t9)("fetchStickersForEmoji",{emoji:"👋⭐️",hash:t});if(n)return e=(0,a.Rd)(),{...e,stickers:{...e.stickers,greeting:{hash:n.hash,stickers:n.stickers.filter((e=>"👋"===e.emoji))}}}})),(0,a.iw)("loadFeaturedStickers",(e=>{const{hash:t}=e.stickers.featured||{};!async function(e){const t=await(0,S.t9)("fetchFeaturedStickers",{hash:e});t&&(0,a.R3)((0,r.z3)((0,a.Rd)(),"featured",t.hash,t.sets))}(t)})),(0,a.iw)("loadStickers",((e,t,n)=>{const{stickerSetId:s,stickerSetShortName:i}=n;let{stickerSetAccessHash:o}=n;if(!o&&!i){const t=(0,c.Ny)(e,s);if(!t)return;o=t.accessHash}!async function(e,t,n){const s=await(0,S.t9)("fetchStickers",{stickerSetShortName:n,stickerSetId:e,accessHash:t});if(!s)return;const{set:i,stickers:o,packs:c}=s;let l=(0,a.Rd)();l=(0,r.Rg)(l,i.id,{...i,stickers:o,packs:c});const d=l.stickers.forEmoji.emoji;d&&c[d]&&(l=(0,r.vy)(l)),(0,a.R3)(l)}(s,o,i)})),(0,a.iw)("loadAnimatedEmojis",(()=>{!async function(){const e=await(0,S.t9)("fetchAnimatedEmojis");if(!e)return;const{set:t,stickers:n}=e;(0,a.R3)((0,r.g_)((0,a.Rd)(),{...t,stickers:n}))}(),async function(){const e=await(0,S.t9)("fetchAnimatedEmojiEffects");if(!e)return;const{set:t,stickers:n}=e;(0,a.R3)({...(0,a.Rd)(),animatedEmojiEffects:{...t,stickers:n}})}()})),(0,a.iw)("loadSavedGifs",(e=>{const{hash:t}=e.gifs.saved;!async function(e){const t=await(0,S.t9)("fetchSavedGifs",{hash:e});if(!t)return;const n=(0,a.Rd)();(0,a.R3)({...n,gifs:{...n.gifs,saved:t}})}(t)})),(0,a.iw)("saveGif",(async(e,t,n)=>{var s;const{gif:i,shouldUnsave:o}=n;if(!await(0,S.t9)("saveGif",{gif:i,shouldUnsave:o}))return;const r=(null===(s=(e=(0,a.Rd)()).gifs.saved.gifs)||void 0===s?void 0:s.filter((e=>{let{id:t}=e;return t!==i.id})))||[],c=o?r:[i,...r];return{...e,gifs:{...e.gifs,saved:{...e.gifs.saved,gifs:c}}}})),(0,a.iw)("faveSticker",((e,t,n)=>{const{sticker:a}=n;a&&(0,S.t9)("faveSticker",{sticker:a})})),(0,a.iw)("unfaveSticker",((e,t,n)=>{const{sticker:s}=n;s&&function(e){const t=(0,a.Rd)();(0,a.R3)({...t,stickers:{...t.stickers,favorite:{...t.stickers.favorite,stickers:t.stickers.favorite.stickers.filter((t=>{let{id:n}=t;return n!==e.id}))}}}),(0,S.t9)("faveSticker",{sticker:e,unfave:!0})}(s)})),(0,a.iw)("toggleStickerSet",((e,t,n)=>{const{stickerSetId:a}=n,s=(0,c.Ny)(e,a);if(!s)return;const{accessHash:i,installedDate:o}=s;(0,S.t9)(o?"uninstallStickerSet":"installStickerSet",{stickerSetId:a,accessHash:i})})),(0,a.iw)("loadEmojiKeywords",(async(e,t,n)=>{var s,i;const{language:o}=n;let r=e.emojiKeywords[o];if(null!==(s=r)&&void 0!==s&&s.isLoading)return;(0,a.R3)({...e,emojiKeywords:{...e.emojiKeywords,[o]:{...r,isLoading:!0}}});const c=await(0,S.t9)("fetchEmojiKeywords",{language:o,fromVersion:r?r.version:0});return r=(e=(0,a.Rd)()).emojiKeywords[o],c?{...e,emojiKeywords:{...e.emojiKeywords,[o]:{isLoading:!1,version:c.version,keywords:{...null===(i=r)||void 0===i?void 0:i.keywords,...c.keywords}}}}:{...e,emojiKeywords:{...e.emojiKeywords,[o]:{...r,isLoading:!1}}}})),(0,a.iw)("setStickerSearchQuery",((e,t,n)=>{const{query:s}=n;s&&B((()=>{!async function(e,t){const n=await(0,S.t9)("searchStickers",{query:e,hash:void 0});if(!n)return;const s=(0,a.Rd)(),{setsById:i,added:o}=s.stickers,c=n.sets.map((e=>{let{id:t}=e;return t}));o.setIds&&o.setIds.forEach((t=>{if(!c.includes(t)){const{title:n}=i[t]||{};n&&(0,A.Z)(n,e)&&c.unshift(t)}})),(0,a.R3)((0,r.z3)(s,"search",n.hash,n.sets,c))}(s)}))})),(0,a.iw)("setGifSearchQuery",((e,t,n)=>{const{query:a}=n;"string"==typeof a&&B((()=>{x(a)}))})),(0,a.iw)("searchMoreGifs",(e=>{const{query:t,offset:n}=e.gifs.search;"string"==typeof t&&B((()=>{x(t,n)}))})),(0,a.iw)("loadStickersForEmoji",((e,t,n)=>{const{emoji:s}=n,{hash:i}=e.stickers.forEmoji;B((()=>{!async function(e,t){let n=(0,a.Rd)();(0,a.R3)({...n,stickers:{...n.stickers,forEmoji:{...n.stickers.forEmoji,emoji:e}}});const s=await(0,S.t9)("fetchStickersForEmoji",{emoji:e,hash:t});n=(0,a.Rd)(),s&&n.stickers.forEmoji.emoji===e&&(n=(0,r.IM)(n,e,s.stickers,s.hash),(0,a.R3)(n))}(s,i)}))})),(0,a.iw)("clearStickersForEmoji",(e=>({...e,stickers:{...e.stickers,forEmoji:{}}}))),(0,a.iw)("openStickerSetShortName",((e,t,n)=>{const{stickerSetShortName:a}=n;return{...e,openedStickerSetShortName:a}}));var L=n(790);const O=(0,E.P2)((e=>e()),500,!1);async function U(){let e,t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",n=arguments.length>1?arguments[1]:void 0,i=arguments.length>2?arguments[2]:void 0,o=arguments.length>3?arguments[3]:void 0,l=arguments.length>4?arguments[4]:void 0,d=arguments.length>5?arguments[5]:void 0;if(o){const a=await(0,S.t9)("searchMessagesLocal",{chat:o,query:t,type:n,limit:s.Hk,offsetId:i,minDate:d,maxDate:l});if(a){const{messages:t,users:n,totalCount:s,nextOffsetId:i}=a;e={messages:t,users:n,chats:[],totalCount:s,nextRate:i}}}else e=await(0,S.t9)("searchMessagesGlobal",{query:t,offsetRate:i,limit:s.Hk,type:n,maxDate:l,minDate:d});let u=(0,a.Rd)();const m=(0,c.JX)(u);if(!e||""!==t&&t!==m)return void(0,a.R3)((0,r.xv)(u,{messages:!1}));const{messages:h,users:f,chats:p,totalCount:v,nextRate:I}=e;p.length&&(u=(0,r.fZ)(u,(0,g.ee)(p,"id"))),f.length&&(u=(0,r.Sh)(u,(0,g.ee)(f,"id"))),h.length&&(u=(0,r.m6)(u,h)),u=(0,r.px)(u,h,v,n,I),(0,a.R3)(u)}async function F(e,t,n){let i=arguments.length>3&&void 0!==arguments[3]&&arguments[3];const o=await(0,S.t9)("searchMessagesLocal",{chat:e,type:t,limit:2*s.EN,offsetId:n});if(!o)return;const{chats:l,users:d,messages:u,totalCount:m,nextOffsetId:h}=o,f=(0,g.ee)(u,"id"),p=Object.keys(f).map(Number);let v=(0,a.Rd)();const I=(0,c.we)(v);I&&(v=(0,r.fZ)(v,(0,g.ee)(l,"id")),v=(0,r.Sh)(v,(0,g.ee)(d,"id")),v=(0,r.c_)(v,e.id,f),v=(0,r.c1)(v,e.id,t,p,m,h),(0,a.R3)(v),i||F(e,t,h,!0))}(0,a.iw)("setGlobalSearchQuery",((e,t,n)=>{const{chatId:s}=e.globalSearch,{query:i}=n;i&&!s&&O((()=>{!async function(e){const t=await(0,S.t9)("searchChats",{query:e});let n=(0,a.Rd)();const s=(0,c.JX)(n);if(!t||!s||e!==s)return void(0,a.R3)((0,r.xv)(n,{chats:!1}));const{localChats:i,localUsers:o,globalChats:l,globalUsers:d}=t;(i.length||l.length)&&(n=(0,r.fZ)(n,(0,g.ee)([...i,...l],"id"))),(o.length||d.length)&&(n=(0,r.Sh)(n,(0,g.ee)([...o,...d],"id"))),n=(0,r.xv)(n,{chats:!1}),n=(0,r.No)(n,{localResults:{chatIds:i.map((e=>{let{id:t}=e;return t})),userIds:o.map((e=>{let{id:t}=e;return t}))},globalResults:{...n.globalSearch.globalResults,chatIds:l.map((e=>{let{id:t}=e;return t})),userIds:d.map((e=>{let{id:t}=e;return t}))}}),(0,a.R3)(n)}(i)}))})),(0,a.iw)("setGlobalSearchDate",((e,t,n)=>{const{date:s}=n,i=s?(0,L.IS)(s):s;e=(0,r.No)(e,{date:s,query:"",resultsByType:{...e.globalSearch.resultsByType,text:{totalCount:void 0,foundIds:[],nextOffsetId:0}}}),(0,a.R3)(e);const{chatId:o}=e.globalSearch;U("","text",void 0,o?(0,c.Z1)(e,o):void 0,i,s)})),(0,a.iw)("searchMessagesGlobal",((e,t,n)=>{var a;const{query:s,resultsByType:i,chatId:o,date:r}=e.globalSearch,l=r?(0,L.IS)(r):r,{type:d}=n;U(s,d,null==i||null===(a=i[d])||void 0===a?void 0:a.nextOffsetId,o?(0,c.Z1)(e,o):void 0,l,r)})),(0,a.iw)("searchTextMessagesLocal",(e=>{const{chatId:t,threadId:n}=(0,c.Bt)(e)||{},i=t?(0,c.Z1)(e,t):void 0,l=(0,c.n5)(e);if(!i||!l||!n)return;const{query:d,results:u}=l,m=null==u?void 0:u.nextOffsetId;let h;if(n!==o._f){const a=(0,c.tZ)(e,t,n);h=null==a?void 0:a.topMessageId}!async function(e,t,n,i,o){if(!i)return;const l=await(0,S.t9)("searchMessagesLocal",{chat:e,type:"text",query:i,topMessageId:n,limit:s.pn,offsetId:o});if(!l)return;const{chats:d,users:u,messages:m,totalCount:h,nextOffsetId:f}=l,p=(0,g.ee)(m,"id"),v=Object.keys(p).map(Number);let I=(0,a.Rd)();const y=(0,c.n5)(I);y&&i===y.query&&(I=(0,r.fZ)(I,(0,g.ee)(d,"id")),I=(0,r.Sh)(I,(0,g.ee)(u,"id")),I=(0,r.c_)(I,e.id,p),I=(0,r.dx)(I,e.id,t,v,h,f),(0,a.R3)(I))}(i,n,h,d,m)})),(0,a.iw)("searchMediaMessagesLocal",(e=>{const{chatId:t}=(0,c.Bt)(e)||{};if(!t)return;const n=(0,c.Z1)(e,t),a=(0,c.we)(e);if(!n||!a)return;const{currentType:s,resultsByType:i}=a,o=s&&i&&i[s],r=null==o?void 0:o.nextOffsetId;s&&F(n,s,r)})),(0,a.iw)("searchMessagesByDate",((e,t,n)=>{const{timestamp:s}=n,{chatId:i}=(0,c.Bt)(e)||{};if(!i)return;const o=(0,c.Z1)(e,i);o&&async function(e,t){const n=await(0,S.t9)("findFirstMessageIdAfterDate",{chat:e,timestamp:t});n&&(0,a.Sv)().focusMessage({chatId:e.id,messageId:n})}(o,s)})),(0,a.iw)("checkPublicLink",(async(e,t,n)=>{const{chatId:s}=(0,c.Bt)(e)||{};if(!s)return;if(e.management.progress===m.wv.InProgress)return;const{username:i}=n;e=(0,r.H9)(e,m.wv.InProgress),e=(0,r.fw)(e,s,{isUsernameAvailable:void 0}),(0,a.R3)(e);const o=await(0,S.t9)("checkChatUsername",{username:i});return e=(0,a.Rd)(),e=(0,r.H9)(e,o?m.wv.Complete:m.wv.Error),(0,r.fw)(e,s,{isUsernameAvailable:o})})),(0,a.iw)("updatePublicLink",(async(e,t,n)=>{const{chatId:s}=(0,c.Bt)(e)||{};let i=s&&(0,c.Z1)(e,s);if(!s||!i)return;const{username:o}=n;if(e=(0,r.H9)(e,m.wv.InProgress),(0,a.R3)(e),(0,d.G9)(i)){if(i=await(0,S.t9)("migrateChat",i),!i)return;t.openChat({id:i.id})}const l=await(0,S.t9)("setChatUsername",{chat:i,username:o});return e=(0,a.Rd)(),e=(0,r.H9)(e,l?m.wv.Complete:m.wv.Error),(0,r.fw)(e,s,{isUsernameAvailable:void 0})})),(0,a.iw)("updatePrivateLink",(e=>{const{chatId:t}=(0,c.Bt)(e)||{},n=t&&(0,c.Z1)(e,t);t&&n&&(0,S.t9)("updatePrivateLink",{chat:n})})),(0,a.iw)("setEditingExportedInvite",((e,t,n)=>{const{chatId:s,invite:i}=n;(0,a.R3)((0,r.fw)(e,s,{editingInvite:i}))})),(0,a.iw)("setOpenedInviteInfo",((e,t,n)=>{const{chatId:s,invite:i}=n,o=i?{inviteInfo:{invite:i}}:{inviteInfo:void 0};(0,a.R3)((0,r.fw)(e,s,o))})),(0,a.iw)("loadExportedChatInvites",(async(e,t,n)=>{const{chatId:s,adminId:i,isRevoked:o,limit:l}=n,d=(0,c.Z1)(e,s),u=(0,c.dy)(e,i||e.currentUserId);if(!d||!u)return;const m=await(0,S.t9)("fetchExportedChatInvites",{peer:d,admin:u,isRevoked:o,limit:l});if(!m)return;const h=o?{revokedInvites:m}:{invites:m};return(0,r.fw)((0,a.Rd)(),s,h)})),(0,a.iw)("editExportedChatInvite",(async(e,t,n)=>{const{chatId:s,link:i,isRevoked:o,expireDate:l,usageLimit:d,isRequestNeeded:u,title:m}=n,h=(0,c.Z1)(e,s);if(!h)return;const g=await(0,S.t9)("editExportedChatInvite",{peer:h,link:i,isRevoked:o,expireDate:l,usageLimit:d,isRequestNeeded:u,title:m});if(!g)return;const{oldInvite:f,newInvite:p}=g,v=((e=(0,a.Rd)()).management.byChatId[s].invites||[]).filter((e=>e.link!==f.link)),I=[...e.management.byChatId[s].revokedInvites||[]];return p.isRevoked?I.unshift(p):v.push(p),(0,r.fw)(e,s,{invites:v,revokedInvites:I})})),(0,a.iw)("exportChatInvite",(async(e,t,n)=>{const{chatId:s,expireDate:i,usageLimit:o,isRequestNeeded:l,title:d}=n,u=(0,c.Z1)(e,s);if(!u)return;const m=await(0,S.t9)("exportChatInvite",{peer:u,expireDate:i,usageLimit:o,isRequestNeeded:l,title:d});if(!m)return;const h=(e=(0,a.Rd)()).management.byChatId[s].invites||[];return(0,r.fw)(e,s,{invites:[...h,m]})})),(0,a.iw)("deleteExportedChatInvite",(async(e,t,n)=>{var s,i;const{chatId:o,link:l}=n,d=(0,c.Z1)(e,o);if(!d)return;if(!await(0,S.t9)("deleteExportedChatInvite",{peer:d,link:l}))return;const u=(e=(0,a.Rd)()).management.byChatId[o];return(0,r.fw)(e,o,{invites:null==u||null===(s=u.invites)||void 0===s?void 0:s.filter((e=>e.link!==l)),revokedInvites:null==u||null===(i=u.revokedInvites)||void 0===i?void 0:i.filter((e=>e.link!==l))})})),(0,a.iw)("deleteRevokedExportedChatInvites",(async(e,t,n)=>{const{chatId:s,adminId:i}=n,o=(0,c.Z1)(e,s),l=(0,c.dy)(e,i||e.currentUserId);if(o&&l)return await(0,S.t9)("deleteRevokedExportedChatInvites",{peer:o,admin:l})?(e=(0,a.Rd)(),(0,r.fw)(e,s,{revokedInvites:[]})):void 0})),(0,a.iw)("loadChatInviteImporters",(async(e,t,n)=>{var s;const{chatId:i,link:o,offsetDate:l,offsetUserId:d,limit:u}=n,m=(0,c.Z1)(e,i),h=(0,c.dy)(e,d);if(!m||d&&!h)return;const g=await(0,S.t9)("fetchChatInviteImporters",{peer:m,link:o,offsetDate:l,offsetUser:h,limit:u});if(!g)return;const f=null===(s=(e=(0,a.Rd)()).management.byChatId[i])||void 0===s?void 0:s.inviteInfo;return null!=f&&f.invite&&f.invite.link===o?(0,r.fw)(e,i,{inviteInfo:{...f,importers:g}}):void 0})),(0,a.iw)("loadChatInviteRequesters",(async(e,t,n)=>{var s;const{chatId:i,link:o,offsetDate:l,offsetUserId:d,limit:u}=n,m=(0,c.Z1)(e,i),h=(0,c.dy)(e,d);if(!m||d&&!h)return;const g=await(0,S.t9)("fetchChatInviteImporters",{peer:m,link:o,offsetDate:l,offsetUser:h,limit:u,isRequested:!0});if(!g)return;const f=null===(s=(e=(0,a.Rd)()).management.byChatId[i])||void 0===s?void 0:s.inviteInfo;return null!=f&&f.invite&&f.invite.link===o?(0,r.fw)(e,i,{inviteInfo:{...f,requesters:g}}):void 0})),(0,a.iw)("loadChatJoinRequests",(async(e,t,n)=>{const{chatId:s,offsetDate:i,offsetUserId:o,limit:l}=n,d=(0,c.Z1)(e,s),u=(0,c.dy)(e,o);if(!d||o&&!u)return;const m=await(0,S.t9)("fetchChatInviteImporters",{peer:d,offsetDate:i,offsetUser:u,limit:l,isRequested:!0});return m?(e=(0,a.Rd)(),(0,r.a4)(e,s,{joinRequests:m})):void 0})),(0,a.iw)("hideChatJoinRequest",(async(e,t,n)=>{var s;const{chatId:i,userId:o,isApproved:l}=n,d=(0,c.Z1)(e,i),u=(0,c.dy)(e,o);if(!d||!u)return;if(!await(0,S.t9)("hideChatJoinRequest",{peer:d,user:u,isApproved:l}))return;e=(0,a.Rd)();const m=(0,c.Z1)(e,i);return m?(0,r.a4)(e,i,{joinRequests:null===(s=m.joinRequests)||void 0===s?void 0:s.filter((e=>e.userId!==o))}):void 0})),(0,a.iw)("hideAllChatJoinRequests",(async(e,t,n)=>{const{chatId:s,isApproved:i,link:o}=n,l=(0,c.Z1)(e,s);if(!l)return;if(!await(0,S.t9)("hideAllChatJoinRequests",{peer:l,isApproved:i,link:o}))return;e=(0,a.Rd)();const d=(0,c.Z1)(e,s);return d?(0,r.a4)(e,s,{joinRequests:[],fullInfo:{...d.fullInfo,recentRequesterIds:[],requestsPending:0}}):void 0})),(0,a.iw)("hideChatReportPanel",(async(e,t,n)=>{const{chatId:s}=n,i=(0,c.Z1)(e,s);if(i)return await(0,S.t9)("hideChatReportPanel",i)?(0,r.a4)((0,a.Rd)(),s,{settings:void 0}):void 0}));var $=n(6974);let D;function q(e){return(0,S.t9)("fetchMessages",{chat:e,threadId:o._f,offsetId:e.lastReadInboxMessageId,addOffset:-(Math.round(s.hT/2)+1),limit:s.hT})}(0,a.iw)("sync",(()=>{s.eM&&console.log(">>> START SYNC"),D&&clearTimeout(D),(0,a.R3)({...(0,a.Rd)(),isSyncing:!0}),D=window.setTimeout((()=>{(0,a.R3)({...(0,a.Rd)(),isSyncing:!1}),D=void 0}),15e3);const{loadAllChats:e,preloadTopChatMessages:t}=(0,a.Sv)();e({listType:"active",shouldReplace:!0,onReplace:async()=>{await async function(){let e=!1,t=(0,a.Rd)();const n=Object.keys(t.messages.byChatId).reduce(((e,n)=>(e[n]={},e[n].draft=(0,c.Ms)(t,n,o._f),e[n].editingId=(0,c._$)(t,n,o._f),e[n].editingDraft=(0,c.s)(t,n,o._f),e)),{}),{chatId:i,threadId:l}=(0,c.Bt)(t)||{},d=i?t.chats.byId[i]:void 0;if(i&&d){const n=await q(d);t=(0,a.Rd)();const{chatId:u}=(0,c.Bt)(t)||{},m=l&&(0,c.tZ)(t,i,l);if(n&&u===i){const a=t.messages.byChatId[i],c=i===s.aw?t.serviceNotifications.map((e=>{let{message:t}=e;return t})):[],d=[].concat(n.messages,c),u=(0,g.ee)(d,"id"),h=Object.keys(u).map(Number);if(t={...t,messages:{...t.messages,byChatId:{}}},t=(0,r.c_)(t,i,u),t=(0,r.xj)(t,i,o._f,h),t=(0,r.y9)(t,i,o._f,h),l&&m&&m.originChannelId){const{originChannelId:e}=m,n=t.messages.byChatId[e],s=await q(t.chats.byId[e]);if(s){const e=(0,g.ee)(s.messages,"id"),r=Object.keys(e).map(Number);t={...t,messages:{...t.messages,byChatId:{...t.messages.byChatId,[m.originChannelId]:{byId:e,threadsById:{[o._f]:{...null==n?void 0:n.threadsById[o._f],listedIds:r,viewportIds:r,outlyingIds:void 0}}},[i]:{...t.messages.byChatId[i],threadsById:{...t.messages.byChatId[i].threadsById,[l]:{...null==a?void 0:a.threadsById[l],outlyingIds:void 0}}}}}}}}t=(0,r.GL)(t,(0,g.ee)(n.chats,"id")),t=(0,r.eD)(t,(0,g.ee)(n.users,"id")),t=(0,r.j6)(t,i,n.threadInfos),e=!0}}e||(t={...t,messages:{...t.messages,byChatId:{}}}),Object.keys(n).forEach((e=>{t=(0,r.sN)(t,e,o._f,n[e])})),(0,a.R3)(t);const{chatId:u,messageId:m}=t.audioPlayer;u&&m&&!(0,c.hj)(t,u,m)&&(0,a.Sv)().closeAudioPlayer()}(),(0,a.R3)({...(0,a.Rd)(),lastSyncTime:Date.now(),isSyncing:!1}),s.eM&&console.log(">>> FINISH SYNC"),(0,$.S1)(),e({listType:"archived",shouldReplace:!0}),(0,S.t9)("fetchCurrentUser"),t()}})}));const j=(0,E.Ds)((e=>e()),500,!1,!0),G=(0,E.P2)((e=>e()),500,!1);function H(e,t,n){return{...e,inlineBots:{...e.inlineBots,byUsername:{...e.inlineBots.byUsername,[t]:n}}}}function _(e,t){return{...e,inlineBots:{...e.inlineBots,isLoading:t}}}(0,a.iw)("loadFullUser",((e,t,n)=>{const{userId:a}=n,s=(0,c.dy)(e,a);if(!s)return;const{id:i,accessHash:o}=s;j((()=>(0,S.t9)("fetchFullUser",{id:i,accessHash:o})))})),(0,a.iw)("loadUser",(async(e,t,n)=>{const{userId:s}=n,i=(0,c.dy)(e,s);if(!i)return;const o=await(0,S.t9)("fetchUsers",{users:[i]});if(!o)return;const{users:l,userStatusesById:d}=o;return e=(0,a.Rd)(),e=(0,r.eD)(e,(0,g.ee)(l,"id")),(0,r.ps)(e,{...e.users.statusesById,...d})})),(0,a.iw)("loadTopUsers",(e=>{const{topPeers:{lastRequestedAt:t}}=e;(!t||(0,f.b)(e.serverTimeOffset)-t>60)&&async function(){const e=await(0,S.t9)("fetchTopUsers");if(!e)return;const{ids:t,users:n}=e;let s=(0,a.Rd)();s=(0,r.Sh)(s,(0,g.ee)(n,"id")),s={...s,topPeers:{...s.topPeers,userIds:t,lastRequestedAt:(0,f.b)(s.serverTimeOffset)}},(0,a.R3)(s)}()})),(0,a.iw)("loadContactList",(()=>{!async function(){const e=await(0,S.t9)("fetchContactList");if(!e)return;let t=(0,r.Sh)((0,a.Rd)(),(0,g.ee)(e.users,"id"));t=(0,r.fZ)(t,(0,g.ee)(e.chats,"id"));const n=e=>e.lastName||e.firstName||"",s=new Intl.Collator("en-US"),i=e.users.sort(((e,t)=>s.compare(n(e),n(t)))).filter((e=>!e.isSelf));(0,a.R3)({...t,contactList:{userIds:i.map((e=>e.id))}})}()})),(0,a.iw)("loadCurrentUser",(()=>{(0,S.t9)("fetchCurrentUser")})),(0,a.iw)("loadCommonChats",(async e=>{var t,n,s;const{chatId:i}=(0,c.Bt)(e)||{},o=i?(0,c.dy)(e,i):void 0;if(!o||(0,d.cS)(o)||null!==(t=o.commonChats)&&void 0!==t&&t.isFullyLoaded)return;const l=null===(n=o.commonChats)||void 0===n?void 0:n.maxId,u=await(0,S.t9)("fetchCommonChats",o.id,o.accessHash,l);if(!u)return;const{chats:m,chatIds:h,isFullyLoaded:f}=u;return e=(0,a.Rd)(),m.length&&(e=(0,r.fZ)(e,(0,g.ee)(m,"id"))),(0,r.Nq)(e,o.id,{commonChats:{maxId:h.length?h[h.length-1]:"0",ids:(0,g.Tw)(((null===(s=o.commonChats)||void 0===s?void 0:s.ids)||[]).concat(h)),isFullyLoaded:f}})})),(0,a.iw)("updateContact",((e,t,n)=>{const{userId:s,isMuted:i=!1,firstName:o,lastName:l,shouldSharePhoneNumber:d}=n;!async function(e,t,n,s,i){let o=(0,a.Rd)();const l=(0,c.dy)(o,e);if(!l)return;let d;if((0,a.Sv)().updateChatMutedState({chatId:e,isMuted:t}),(0,a.R3)((0,r.H9)((0,a.Rd)(),m.wv.InProgress)),!l.isContact&&l.phoneNumber)d=await(0,S.t9)("importContact",{phone:l.phoneNumber,firstName:n,lastName:s});else{const{id:e,accessHash:t}=l;d=await(0,S.t9)("updateContact",{id:e,accessHash:t,phoneNumber:"",firstName:n,lastName:s,shouldSharePhoneNumber:i})}o=(0,a.Rd)(),d&&((0,a.Sv)().loadChatSettings({chatId:e}),(0,a.R3)((0,r.Nq)(o,l.id,{firstName:n,lastName:s}))),o=(0,r.H9)(o,m.wv.Complete),o=(0,r.ft)(o),(0,a.R3)(o)}(s,i,o,l,d)})),(0,a.iw)("deleteContact",((e,t,n)=>{const{userId:s}=n;!async function(e){const t=(0,a.Rd)(),n=(0,c.dy)(t,e);if(!n)return;const{id:s,accessHash:i}=n;await(0,S.t9)("deleteContact",{id:s,accessHash:i})}(s)})),(0,a.iw)("loadProfilePhotos",(async(e,t,n)=>{const{profileId:s}=n,i=(0,d.YC)(s),o=i?(0,c.dy)(e,s):void 0,l=i?void 0:(0,c.Z1)(e,s);if(!o&&!l)return;const u=await(0,S.t9)("fetchProfilePhotos",o,l);return u&&u.photos?(e=(0,a.Rd)(),i?e=(0,r.Nq)(e,s,{photos:u.photos}):(e=(0,r.Sh)(e,(0,g.ee)(u.users,"id")),e=(0,r.a4)(e,s,{photos:u.photos})),e):void 0})),(0,a.iw)("setUserSearchQuery",((e,t,n)=>{const{query:s}=n;s&&G((()=>{!async function(e){const t=await(0,S.t9)("searchChats",{query:e});let n=(0,a.Rd)();const s=n.userSearch.query;if(!t||!s||e!==s)return void(0,a.R3)((0,r.Q3)(n,!1));const{localUsers:i,globalUsers:o}=t;let c,l;i.length&&(n=(0,r.Sh)(n,(0,g.ee)(i,"id")),c=i.map((e=>{let{id:t}=e;return t}))),o.length&&(n=(0,r.Sh)(n,(0,g.ee)(o,"id")),l=o.map((e=>{let{id:t}=e;return t}))),n=(0,r.Q3)(n,!1),n=(0,r.Lm)(n,{localUserIds:c,globalUserIds:l}),(0,a.R3)(n)}(s)}))})),(0,a.iw)("importContact",(async(e,t,n)=>{const{phoneNumber:s,firstName:i,lastName:o}=n,c=await(0,S.t9)("importContact",{phone:s,firstName:i,lastName:o});if(c)return t.openChat({id:c}),(0,r.ft)((0,a.Rd)());t.showNotification({message:I.i0("Contacts.PhoneNumber.NotRegistred")})})),(0,a.iw)("reportSpam",((e,t,n)=>{const{chatId:a}=n,s=(0,d.YC)(a)?(0,c.dy)(e,a):(0,c.Z1)(e,a);s&&(0,S.t9)("reportSpam",s)}));const z=(0,E.Ds)((e=>e()),500,!1);async function V(e,t,n,a,s){await(0,S.t9)("sendMessage",{chat:e,text:n,replyingTo:a,sendAs:s})}(0,a.iw)("clickInlineButton",((e,t,n)=>{const{button:i}=n;switch(i.type){case"command":t.sendBotCommand({command:i.value});break;case"url":i.value.match(s.FS)||i.value.match(s.g$)?t.openTelegramLink({url:i.value}):t.toggleSafeLinkModal({url:i.value});break;case"callback":{const t=(0,c.jr)(e);if(!t)return;!async function(e,t,n){const s=await(0,S.t9)("answerCallbackButton",{chatId:e.id,accessHash:e.accessHash,messageId:t,data:n});if(!s)return;const{showDialog:i,showNotification:o,toggleSafeLinkModal:r}=(0,a.Sv)(),{message:c,alert:l,url:d}=s;l?i({data:{message:c||"Error"}}):c?o({message:c}):d&&r({url:d})}(t,i.messageId,i.value);break}case"requestPoll":t.openPollModal();break;case"requestSelfContact":{const n=e.currentUserId?(0,c.dy)(e,e.currentUserId):void 0;if(!n)return;t.showDialog({data:{phoneNumber:n.phoneNumber,firstName:n.firstName,lastName:n.lastName,userId:n.id}});break}case"buy":{const n=(0,c.jr)(e),{messageId:a,value:s}=i;if(!n)return;s?t.getReceipt({receiptMessageId:s,chatId:n.id,messageId:a}):(t.getPaymentForm({chat:n,messageId:a}),t.setInvoiceMessageInfo((0,c.hj)(e,n.id,a)),t.openPaymentModal({chatId:n.id,messageId:a}));break}}})),(0,a.iw)("sendBotCommand",((e,t,n)=>{const{command:a,chatId:s}=n,{currentUserId:i}=e,o=s?(0,c.Z1)(e,s):(0,c.jr)(e),r=(0,c.Bt)(e);if(!i||!o||!r)return;const{threadId:l}=r;t.setReplyingToId({messageId:void 0}),t.clearWebPagePreview({chatId:o.id,threadId:l,value:!1}),V(o,0,a,(0,c.Yy)(e,o.id,l),(0,c._5)(e,s))})),(0,a.iw)("restartBot",(async(e,t,n)=>{const{chatId:s}=n,{currentUserId:i}=e,o=(0,c.jr)(e),l=i&&(0,c.IK)(e,s);i&&o&&l&&await(0,S.t9)("unblockContact",l.id,l.accessHash)&&((0,a.R3)((0,r.rB)((0,a.Rd)(),l.id)),V(o,0,"/start",void 0,(0,c._5)(e,s)))})),(0,a.iw)("loadTopInlineBots",(async e=>{const{lastRequestedAt:t}=e.topInlineBots;if(t&&(0,f.b)(e.serverTimeOffset)-t<60)return;const n=await(0,S.t9)("fetchTopInlineBots");if(!n)return;const{ids:s,users:i}=n;return e=(0,a.Rd)(),e=(0,r.Sh)(e,(0,g.ee)(i,"id")),{...e,topInlineBots:{...e.topInlineBots,userIds:s,lastRequestedAt:(0,f.b)(e.serverTimeOffset)}}})),(0,a.iw)("queryInlineBot",(async(e,t,n)=>{const{chatId:s,username:i,query:o,offset:l}=n;let d=e.inlineBots.byUsername[i];if(!1!==d){if(void 0===d){const{user:t,chat:n}=await(0,S.t9)("fetchInlineBot",{username:i})||{};if(e=(0,a.Rd)(),!t||!n)return void(0,a.R3)(H(e,i,!1));e=(0,r.Sh)(e,{[t.id]:t}),e=(0,r.fZ)(e,{[n.id]:n}),d={id:t.id,query:"",offset:"",switchPm:void 0,canLoadMore:!0,results:[]},e=H(e,i,d),(0,a.R3)(e)}(o!==d.query||d.canLoadMore)&&z((()=>{!async function(e){let{username:t,inlineBotData:n,chatId:s,query:i,offset:o}=e,r=(0,a.Rd)();const l=(0,c.dy)(r,n.id),d=(0,c.Z1)(r,s);if(!l||!d)return;const u=n.query!==i;r=_(r,!0),r=H(r,t,{...n,query:i,...u&&{offset:void 0,results:[]}}),(0,a.R3)(r);const m=await(0,S.t9)("fetchInlineBotResults",{bot:l,chat:d,query:i,offset:u?void 0:o}),h=r.inlineBots.byUsername[t];if(r=_((0,a.Rd)(),!1),!m||!h||i!==h.query)return void(0,a.R3)(r);const g=new Set((h.results||[]).map((e=>e.id))),f=m.results.filter((e=>!g.has(e.id)));r=H(r,t,{...h,help:m.help,...f.length&&{isGallery:m.isGallery},...m.switchPm&&{switchPm:m.switchPm},canLoadMore:m.results.length>0&&Boolean(m.nextOffset),results:""===h.offset||h.offset===m.nextOffset?m.results:(h.results||[]).concat(f),offset:f.length?m.nextOffset:""}),(0,a.R3)(r)}({username:i,inlineBotData:d,chatId:s,query:o,offset:l})}))}})),(0,a.iw)("sendInlineBotResult",((e,t,n)=>{const{id:a,queryId:s,isSilent:i,scheduledAt:o}=n,r=(0,c.Bt)(e);if(!r||!a)return;const{chatId:l,threadId:d}=r,u=(0,c.Z1)(e,l);t.setReplyingToId({messageId:void 0}),t.clearWebPagePreview({chatId:l,threadId:d,value:!1}),(0,S.t9)("sendInlineBotResult",{chat:u,resultId:a,queryId:s,replyingTo:(0,c.Yy)(e,l,d),sendAs:(0,c._5)(e,l),isSilent:i,scheduleDate:o})})),(0,a.iw)("resetInlineBot",((e,t,n)=>{const{username:s}=n;let i=e.inlineBots.byUsername[s];i&&(i={id:i.id,query:"",offset:"",switchPm:void 0,canLoadMore:!0,results:[]},(0,a.R3)(H(e,s,i)))})),(0,a.iw)("startBot",(async(e,t,n)=>{const{botId:a,param:s}=n,i=(0,c.dy)(e,a);i&&await(0,S.t9)("startBot",{bot:i,startParam:s})})),n(1371),(0,a.iw)("loadPasswordInfo",(async e=>{const t=await(0,S.t9)("getPasswordInfo");if(t)return e=(0,a.Rd)(),e=(0,r.BI)(e,{hasPassword:t.hasPassword}),(0,r.IE)(e,{hint:t.hint})})),(0,a.iw)("checkPassword",(async(e,t,n)=>{const{currentPassword:s,onSuccess:i}=n;(0,a.R3)((0,r.IE)(e,{isLoading:!0,error:void 0}));const o=await(0,S.t9)("checkPassword",s);(0,a.R3)((0,r.IE)((0,a.Rd)(),{isLoading:!1})),o&&i()})),(0,a.iw)("clearPassword",(async(e,t,n)=>{const{currentPassword:s,onSuccess:i}=n;(0,a.R3)((0,r.IE)(e,{isLoading:!0,error:void 0}));const o=await(0,S.t9)("clearPassword",s);(0,a.R3)((0,r.IE)((0,a.Rd)(),{isLoading:!1})),o&&i()})),(0,a.iw)("updatePassword",(async(e,t,n)=>{const{currentPassword:s,password:i,hint:o,email:c,onSuccess:l}=n;(0,a.R3)((0,r.IE)(e,{isLoading:!0,error:void 0}));const d=await(0,S.t9)("updatePassword",s,i,o,c);(0,a.R3)((0,r.IE)((0,a.Rd)(),{isLoading:!1})),d&&l()})),(0,a.iw)("updateRecoveryEmail",(async(e,t,n)=>{const{currentPassword:s,email:i,onSuccess:o}=n;(0,a.R3)((0,r.IE)(e,{isLoading:!0,error:void 0}));const c=await(0,S.t9)("updateRecoveryEmail",s,i);(0,a.R3)((0,r.IE)((0,a.Rd)(),{isLoading:!1,waitingEmailCodeLength:void 0})),c&&o()})),(0,a.iw)("provideTwoFaEmailCode",((e,t,n)=>{const{code:a}=n;(0,S.t9)("provideRecoveryEmailCode",a)})),(0,a.iw)("clearTwoFaError",(e=>(0,r.IE)(e,{error:void 0}))),(0,a.iw)("validateRequestedInfo",((e,t,n)=>{const{requestInfo:s,saveInfo:i}=n,o=(0,c.gx)(e),l=o&&(0,c.Z1)(e,o),d=(0,c.Mz)(e);l&&d&&async function(e,t,n,s){const i=await(0,S.t9)("validateRequestedInfo",{chat:e,messageId:t,requestInfo:n,shouldSave:s});if(!i)return;const{id:o,shippingOptions:c}=i;if(!o)return;let l=(0,r.vT)((0,a.Rd)(),o);c?(l=(0,r.TM)(l,c),l=(0,r.Q$)(l,m.KB.Shipping)):l=(0,r.Q$)(l,m.KB.PaymentInfo),(0,a.R3)(l)}(l,d,s,i)})),(0,a.iw)("getPaymentForm",((e,t,n)=>{const{chat:s,messageId:i}=n;s&&i&&async function(e,t){const n=await(0,S.t9)("getPaymentForm",{chat:e,messageId:t});if(!n)return;let s=(0,r._7)((0,a.Rd)(),n),i=m.KB.PaymentInfo;s.payment.invoice&&(s.payment.invoice.shippingAddressRequested||s.payment.invoice.nameRequested||s.payment.invoice.phoneRequested||s.payment.invoice.emailRequested)&&(i=m.KB.ShippingInfo),s=(0,r.Q$)(s,i),(0,a.R3)(s)}(s,i)})),(0,a.iw)("getReceipt",((e,t,n)=>{const{receiptMessageId:s,chatId:i,messageId:o}=n,l=i&&(0,c.Z1)(e,i);o&&s&&l&&async function(e,t,n){const s=await(0,S.t9)("getReceipt",e,n);if(!s)return;let i=(0,a.Rd)();const o=(0,c.hj)(i,e.id,t);i=(0,r.Dq)(i,s,o),(0,a.R3)(i)}(l,o,s)})),(0,a.iw)("clearPaymentError",(e=>{(0,a.R3)({...e,payment:{...e.payment,error:void 0}})})),(0,a.iw)("clearReceipt",(e=>{(0,a.R3)({...e,payment:{...e.payment,receipt:void 0}})})),(0,a.iw)("sendCredentialsInfo",((e,t,n)=>{const{nativeProvider:i}=e.payment,{credentials:o}=n,{data:l}=o;if("stripe"===i){const t=(0,c.$$)(e);if(!t)return;!async function(e,t){const n=function(e){const t=Object.keys(e).map((t=>`${t}=${e[t]}`)).join("&");return t.length>0?`?${t}`:""}({"card[number]":e.cardNumber,"card[exp_month]":e.expiryMonth,"card[exp_year]":e.expiryYear,"card[cvc]":e.cvv,"card[address_zip]":e.zip,"card[address_country]":e.country}),s=await fetch(`https://api.stripe.com/v1/tokens${n}`,{method:"POST",credentials:"same-origin",headers:{"Content-Type":"application/x-www-form-urlencoded",Authorization:`Bearer ${t}`}}),i=await s.json();if(i.error){const e=(0,d.Ow)(i.error),t=(0,a.Rd)();return void(0,a.R3)({...t,payment:{...t.payment,error:{...e}}})}let o=(0,r.QH)((0,a.Rd)(),{type:i.type,id:i.id});o=(0,r.Q$)(o,m.KB.Checkout),(0,a.R3)(o)}(l,t)}else if("smartglocal"===i){const t=(0,c.EB)(e);if(!t)return;!async function(e,t){const n={card:{number:e.cardNumber.replace(/[^\d]+/g,""),expiration_month:e.expiryMonth,expiration_year:e.expiryYear,security_code:e.cvv.replace(/[^\d]+/g,"")}},i=s.eA?"https://tgb-playground.smart-glocal.com/cds/v1/tokenize/card":"https://tgb.smart-glocal.com/cds/v1/tokenize/card",o=await fetch(i,{method:"POST",headers:{Accept:"application/json","Content-Type":"application/json","X-PUBLIC-TOKEN":t},body:JSON.stringify(n)}),c=await o.json();if("ok"!==c.status){const e={description:"payment error"},t=(0,a.Rd)();return void(0,a.R3)({...t,payment:{...t.payment,error:{...e}}})}let l=(0,r.QD)((0,a.Rd)(),{type:"card",token:c.data.token});l=(0,r.Q$)(l,m.KB.Checkout),(0,a.R3)(l)}(l,t)}})),(0,a.iw)("sendPaymentForm",((e,t,n)=>{const{shippingOptionId:s,saveCredentials:i}=n,o=(0,c.gx)(e),l=o&&(0,c.Z1)(e,o),d=(0,c.Mz)(e),u=(0,c.eh)(e),m=(0,c.sp)(e),{nativeProvider:h}=e.payment,g="stripe"===h?(0,c.$$)(e):(0,c.EB)(e);l&&d&&g&&u&&h&&async function(e,t,n,s,i,o,c){if(!0===await(0,S.t9)("sendPaymentForm",{chat:e,messageId:t,formId:s,credentials:i,requestedInfoId:o,shippingOptionId:c})){const e=(0,r.bp)((0,a.Rd)());(0,a.R3)((0,r.WY)(e))}}(l,d,0,u,{save:i,data:"stripe"===h?(0,c.i3)(e):(0,c.Jg)(e)},m,s)})),(0,a.iw)("setPaymentStep",(function(e,t){let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return(0,r.Q$)(e,n.step||m.KB.ShippingInfo)})),(0,a.iw)("setInvoiceMessageInfo",((e,t,n)=>(0,r.nA)(e,n)));var X=n(647),K=n(4907);const W=728,Y=424,J=288;var Q=n(3858);function ee(e,t){return t-(e.isLeftColumnShown&&!h.wB?e.leftColumnWidth||((n=Q.Z.get().width)>s._m?Math.min(Math.max(.25*n,J),.33*n):n>s.ks?Math.min(Math.max(.33*n,J),.4*n):Y):0);var n}let te=0;(0,a.iw)("loadAvailableReactions",(async()=>{const e=await(0,S.t9)("getAvailableReactions");if(e)return e.forEach((e=>{e.aroundAnimation&&X.he(`sticker${e.aroundAnimation.id}`,o.IU.Lottie),e.centerIcon&&X.he(`sticker${e.centerIcon.id}`,o.IU.Lottie)})),{...(0,a.Rd)(),availableReactions:e}})),(0,a.iw)("interactWithAnimatedEmoji",((e,t,n)=>{const{emoji:a,x:s,y:i,localEffect:o,startSize:r,isReversed:c}=n,l={id:te++,animatedEffect:a||o,x:ee(e,s)+40*Math.random()-20,y:i+40*Math.random()-20,startSize:r,isReversed:c};return{...e,activeEmojiInteractions:[...e.activeEmojiInteractions||[],l]}})),(0,a.iw)("sendEmojiInteraction",((e,t,n)=>{const{messageId:a,chatId:s,emoji:i,interactions:o,localEffect:r}=n,l=(0,c.Z1)(e,s);l&&(i||r)&&s!==e.currentUserId&&(0,S.t9)("sendEmojiInteraction",{chat:l,messageId:a,emoticon:i||(0,c.ji)(r),timestamps:o})})),(0,a.iw)("sendDefaultReaction",((e,t,n)=>{const{chatId:a,messageId:s,x:i,y:o}=n,r=(0,c.q6)(e,a),l=(0,c.hj)(e,a,s);r&&l&&!(0,d.CI)(l)&&t.sendReaction({chatId:a,messageId:s,reaction:r,x:i,y:o})})),(0,a.iw)("sendReaction",((e,t,n)=>{var a,i,o;const{chatId:r}=n;let{messageId:l}=n,{reaction:d}=n;const u=(0,c.Z1)(e,r);let m=(0,c.hj)(e,r,l);if(!u||!m)return;const h=Boolean(m.groupedId)&&!m.isInAlbum,f=h?(0,c.xH)(e,r,m.groupedId)[0]:void 0;m=h&&(0,c.hj)(e,r,f)||m,l=(null===(a=m)||void 0===a?void 0:a.id)||l,null!==(i=m.reactions)&&void 0!==i&&null!==(o=i.results)&&void 0!==o&&o.some((e=>e.reaction===d&&e.isChosen))&&(d=void 0),(0,S.t9)("sendReaction",{chat:u,messageId:l,reaction:d});const{animationLevel:p}=e.settings.byKey;return p===s.zy&&(e={...e,activeReactions:{...d?e.activeReactions:(0,g.CE)(e.activeReactions,[l]),...d&&{[l]:{reaction:d,messageId:l}}}}),function(e,t,n,a){const{reactions:s}=(0,c.hj)(e,t,n)||{};if(!s)return e;let i=s.results.map((e=>e.reaction===a?{...e,count:e.isChosen?e.count:e.count+1,isChosen:!0}:e.isChosen?{...e,isChosen:!1,count:e.count-1}:e)).filter((e=>e.count>0)),{recentReactions:o}=s;if(a&&!i.some((e=>e.reaction===a))){const{currentUserId:t}=e;i=[...i,{reaction:a,isChosen:!0,count:1}],s.canSeeList&&(o=[...o||[],{userId:t,reaction:a}])}return(0,K.cY)(e,t,n,{reactions:{...s,results:i,recentReactions:o}})}(e,r,l,d)})),(0,a.iw)("openChat",(e=>({...e,activeReactions:{}}))),(0,a.iw)("startActiveReaction",((e,t,n)=>{var a;const{messageId:i,reaction:o}=n,{animationLevel:r}=e.settings.byKey;return r!==s.zy||(null===(a=e.activeReactions[i])||void 0===a?void 0:a.reaction)===o?e:{...e,activeReactions:{...o?e.activeReactions:(0,g.CE)(e.activeReactions,[i]),...o&&{[i]:{reaction:o,messageId:i}}}}})),(0,a.iw)("stopActiveReaction",((e,t,n)=>{var a;const{messageId:s,reaction:i}=n;return(null===(a=e.activeReactions[s])||void 0===a?void 0:a.reaction)!==i?e:{...e,activeReactions:(0,g.CE)(e.activeReactions,[s])}})),(0,a.iw)("setDefaultReaction",(async(e,t,n)=>{const{reaction:s}=n;if(await(0,S.t9)("setDefaultReaction",{reaction:s}))return{...(0,a.Rd)(),appConfig:{...e.appConfig,defaultReaction:s}}})),(0,a.iw)("stopActiveEmojiInteraction",((e,t,n)=>{var a;const{id:s}=n;return{...e,activeEmojiInteractions:null===(a=e.activeEmojiInteractions)||void 0===a?void 0:a.filter((e=>e.id!==s))}})),(0,a.iw)("loadReactors",(async(e,t,n)=>{var s,i,o;const{chatId:l,messageId:d,reaction:u}=n,m=(0,c.Z1)(e,l),h=(0,c.hj)(e,l,d);if(!m||!h)return;const f=null===(s=h.reactors)||void 0===s?void 0:s.nextOffset,p=await(0,S.t9)("fetchMessageReactionsList",{reaction:u,chat:m,messageId:d,offset:f});if(!p)return;e=(0,a.Rd)(),null!==(i=p.users)&&void 0!==i&&i.length&&(e=(0,r.Sh)(e,(0,g.ee)(p.users,"id")));const{nextOffset:v,count:I,reactions:y}=p;return(0,r.cY)(e,l,d,{reactors:{nextOffset:v,count:I,reactions:[...(null===(o=h.reactors)||void 0===o?void 0:o.reactions)||[],...y]}})})),(0,a.iw)("loadMessageReactions",((e,t,n)=>{const{ids:a,chatId:s}=n,i=(0,c.Z1)(e,s);i&&(0,S.t9)("fetchMessageReactions",{ids:a,chat:i})})),(0,a.iw)("sendWatchingEmojiInteraction",((e,t,n)=>{var a;const{chatId:s,emoticon:i,x:o,y:r,startSize:l,isReversed:d,id:u}=n,m=(0,c.Z1)(e,s);if(m&&null!==(a=e.activeEmojiInteractions)&&void 0!==a&&a.some((e=>e.id===u))&&s!==e.currentUserId)return(0,S.t9)("sendWatchingEmojiInteraction",{chat:m,emoticon:i}),{...e,activeEmojiInteractions:e.activeEmojiInteractions.map((t=>t.id===u?{...t,x:ee(e,o),y:r,startSize:l,isReversed:d}:t))}})),(0,a.iw)("loadStatistics",(async(e,t,n)=>{var s;const{chatId:i,isGroup:o}=n,l=(0,c.Z1)(e,i);if(null==l||!l.fullInfo)return;const d=await(0,S.t9)(o?"fetchGroupStatistics":"fetchChannelStatistics",{chat:l});if(d){if(e=(0,a.Rd)(),null!==(s=d.recentTopMessages)&&void 0!==s&&s.length){const t=(0,c.Zw)(e,i);d.recentTopMessages=d.recentTopMessages.map((e=>({...e,...t[e.msgId]})))}return(0,r.ze)(e,i,d)}})),(0,a.iw)("loadStatisticsAsyncGraph",(async(e,t,n)=>{const{chatId:s,token:i,name:o,isPercentage:l}=n,d=(0,c.Z1)(e,s);if(null==d||!d.fullInfo)return;const u=d.fullInfo.statisticsDcId,m=await(0,S.t9)("fetchStatisticsAsyncGraph",{token:i,dcId:u,isPercentage:l});return m?(0,r.yC)((0,a.Rd)(),s,o,m):void 0})),n(8304);var ne=n(8406);function ae(e,t){const n=typeof e;if(n!==typeof t)return!1;if("object"!==n)return e===t;const a=Array.isArray(e);if(a!==Array.isArray(t))return!1;if(a){const n=e,a=t;return n.length===a.length&&n.every(((e,t)=>ae(e,a[t])))}const s=e,i=t;return Object.keys(s).every((e=>ae(s[e],i[e])))}(0,a.iw)("apiUpdate",((e,t,n)=>{switch(n["@type"]){case"updateChat":return n.noTopChatsRequest||(0,c.N)(e,n.id)||t.loadTopChats(),(0,a.R3)((0,r.a4)(e,n.id,n.chat,n.newProfilePhoto)),void(n.chat.id&&(0,ne.Vr)({chatId:n.chat.id,lastReadInboxMessageId:n.chat.lastReadInboxMessageId}));case"updateChatJoin":{const s=(0,c.Ek)(e,n.id);if(!s)return;e=(0,r.B1)(e,s,[n.id]),e=(0,r.a4)(e,n.id,{isNotJoined:!1}),(0,a.R3)(e);const i=(0,c.Z1)(e,n.id);return void(i&&t.requestChatUpdate({chatId:i.id}))}case"updateChatLeave":return(0,r.Dd)(e,n.id);case"updateChatInbox":return(0,r.a4)(e,n.id,n.chat);case"updateChatTypingStatus":{const{id:t,typingStatus:s}=n;return(0,a.R3)((0,r.a4)(e,t,{typingStatus:s})),void setTimeout((()=>{e=(0,a.Rd)();const n=(0,c.Z1)(e,t);n&&s&&n.typingStatus&&n.typingStatus.timestamp===s.timestamp&&(0,a.R3)((0,r.a4)(e,t,{typingStatus:void 0}))}),6e3)}case"newMessage":{const{message:s}=n,{chatId:i,threadId:l,type:d}=(0,c.Bt)(e)||{};if(s.senderId===e.currentUserId&&!s.isFromScheduled)return;const u=(0,c.Z1)(e,n.chatId);if(!u)return;return"thread"===d&&l===o._f&&n.chatId===i?setTimeout((()=>{t.requestChatUpdate({chatId:n.chatId})}),1500):(0,a.R3)((0,r.a4)(e,n.chatId,{unreadCount:u.unreadCount?u.unreadCount+1:1,...n.message.hasUnreadMention&&{unreadMentionsCount:u.unreadMentionsCount?u.unreadMentionsCount+1:1}})),void(0,ne.rh)({chat:u,message:s})}case"updateMessage":{const{message:t}=n,a=(0,c.Z1)(e,n.chatId);if(!a)return;return void((0,d.dT)(t)&&(0,ne.rh)({chat:a,message:t}))}case"updateCommonBoxMessages":case"updateChannelMessages":{const{ids:t,messageUpdate:a}=n;if(!1!==a.hasUnreadMention)return;return t.forEach((t=>{const a="channelId"in n?n.channelId:(0,c.X5)(e,t),s=(0,c.Z1)(e,a);null!=s&&s.unreadMentionsCount&&(e=(0,r.a4)(e,a,{unreadMentionsCount:s.unreadMentionsCount-1}))})),e}case"updateChatFullInfo":{const{fullInfo:t}=n,a=e.chats.byId[n.id];if(!a)return;return(0,r.a4)(e,n.id,{fullInfo:{...a.fullInfo,...t}})}case"updatePinnedChatIds":{const{ids:t,folderId:a}=n,i=a===s.WS?"archived":"active";return{...e,chats:{...e.chats,orderedPinnedIds:{...e.chats.orderedPinnedIds,[i]:t.length?t:void 0}}}}case"updateChatPinned":{const{id:t,isPinned:a}=n,i=(0,c.Ek)(e,t);if(!i)return;const{[i]:o}=e.chats.orderedPinnedIds;let r=o||[];if(a){if(!r.includes(t)){if("active"===i&&r.length>=s.EG){const t=e.chats.listIds.active;r=r.filter((e=>t&&t.includes(e)))}r=[t,...r]}}else r=r.filter((e=>e!==t));return{...e,chats:{...e.chats,orderedPinnedIds:{...e.chats.orderedPinnedIds,[i]:r.length?r:void 0}}}}case"updateChatListType":{const{id:t,folderId:a}=n;return(0,r.Pi)(e,t,a)}case"updateChatFolder":{const{id:t,folder:a}=n,{byId:s,orderedIds:i}=e.chatFolders,o=a?{...s,[t]:a}:(0,g.ei)(s,Object.keys(s).map(Number).filter((e=>e!==t))),r=a?i&&i.includes(t)?i:[...i||[],t]:i?i.filter((e=>e!==t)):void 0;return{...e,chatFolders:{...e.chatFolders,byId:o,orderedIds:r}}}case"updateChatFoldersOrder":{const{orderedIds:t}=n;return{...e,chatFolders:{...e.chatFolders,orderedIds:t}}}case"updateRecommendedChatFolders":{const{folders:t}=n;return{...e,chatFolders:{...e.chatFolders,recommended:t}}}case"updateChatMembers":{var i;const t=e.chats.byId[n.id],{replacedMembers:a,addedMember:s,deletedMemberId:o}=n;if(!t)return;let c=!1,l=null!==(i=t.fullInfo)&&void 0!==i&&i.members?[...t.fullInfo.members]:[];if(a)l=a,c=!0;else if(s)l.length&&l.some((e=>e.userId===s.userId))||(l.push(s),c=!0);else if(l.length&&o){const e=l.findIndex((e=>e.userId===o));e>-1&&(l.slice(e,1),c=!0)}if(c){const a=l.filter((e=>{let{isOwner:t,isAdmin:n}=e;return t||n}));return(0,r.a4)(e,n.id,{membersCount:l.length,fullInfo:{...t.fullInfo,members:l,adminMembers:a}})}return}case"deleteProfilePhotos":{const{chatId:t,ids:a}=n,s=e.chats.byId[t];return null!=s&&s.photos?(0,r.a4)(e,t,{photos:s.photos.filter((e=>!a.includes(e.id)))}):void 0}case"draftMessage":{const{chatId:t,formattedText:a,date:s,replyingToId:i}=n;if(!e.chats.byId[t])return;return e=(0,r.pf)(e,t,o._f,"draft",a),e=(0,r.pf)(e,t,o._f,"replyingToId",i),e=(0,r.a4)(e,t,{draftDate:s})}case"showInvite":{const{data:e}=n;return void t.showDialog({data:e})}case"updatePendingJoinRequests":{const{chatId:s,requestsPending:i,recentRequesterIds:o}=n,c=e.chats.byId[s];if(!c)return;e=(0,r.a4)(e,s,{fullInfo:{...c.fullInfo,requestsPending:i,recentRequesterIds:o}}),(0,a.R3)(e),t.loadChatJoinRequests({chatId:s})}}}));const se=350;function ie(e,t,n,a){let s=arguments.length>4&&void 0!==arguments[4]&&arguments[4];const i=s?(0,c.Tm)(e,t,n):(0,c.hj)(e,t,n);if(i&&a.content){const{photo:e,video:t,sticker:n,document:s}=(0,d.qp)(i);e&&a.content.photo?(a.content.photo.blobUrl=e.blobUrl,a.content.photo.thumbnail=e.thumbnail):t&&a.content.video?a.content.video.blobUrl=t.blobUrl:n&&a.content.sticker?a.content.sticker.isPreloadedGlobally=n.isPreloadedGlobally:s&&a.content.document&&(a.content.document.previewBlobUrl=s.previewBlobUrl)}return s?(0,r.P4)(e,t,n,a):(0,r.cY)(e,t,n,a)}function oe(e,t,n,a){const{chatId:s}=n,{threadInfo:i}=(0,c.Db)(e,s,n)||{};if(!i&&n.replyToMessageId){const i=(0,c.hj)(e,s,n.replyToMessageId);i?e=(0,r.lG)(e,i,s,n.id,a):t.loadMessage({chatId:s,messageId:n.replyToMessageId,threadUpdate:{isDeleting:a,lastMessageId:n.id}})}return e}function re(e,t,n){const{id:a,chatId:s}=n,{threadInfo:i,firstMessageId:l}=(0,c.Db)(e,s,n)||{},u=(0,c.Z1)(e,s),m=(null==u?void 0:u.unreadCount)&&!(0,c.gb)(e,s,o._f);if(e=oe(e,t,n),i&&(!l&&(0,d.CI)(n)||(e=(0,r.xj)(e,s,i.threadId,[a]),(0,c.b9)(e,s,i.threadId)&&(e=(0,r.$S)(e,s,i.threadId,a),l||(e=(0,r.pf)(e,s,i.threadId,"firstMessageId",n.id)))),e=(0,r.pf)(e,s,i.threadId,"threadInfo",{...i,lastMessageId:n.id,messagesCount:i.messagesCount+1})),m)return e;if(e=(0,r.xj)(e,s,o._f,[a]),(0,c.b9)(e,s,o._f)){const t=(0,c.It)(e,s,o._f),n=(0,r.$S)(e,s,o._f,a),i=(0,c.Cb)(n,s,o._f);t&&!i.includes(t)||(e=n)}return e}function ce(e,t,n){var a;let s=arguments.length>3&&void 0!==arguments[3]&&arguments[3];const{chats:i}=e,o=null===(a=i.byId[t])||void 0===a?void 0:a.lastMessage;return!o||s||o.id===n.id||o.id===n.previousLocalId||n.id>o.id?(0,r.a4)(e,t,{lastMessage:n}):e}function le(e,t){const n=(0,c.Zw)(e,t),a=(0,c.gb)(e,t,o._f);if(!n||!a)return;let s=a.length;for(;s--;){const e=n[a[s]];if(!e.isDeleting)return e}}function de(e,t,n,s){if(e){t.forEach((t=>{const n=le(s=(0,r.cY)(s,e,t,{isDeleting:!0}),e);n&&(s=ce(s,e,n,!0))})),(0,a.R3)(s),n.requestChatUpdate({chatId:e});const i=[];return t.forEach((t=>{const a=(0,c.hj)(s,e,t);if(!a)return;s=oe(s,n,a,!0);const{threadInfo:o}=(0,c.Db)(s,e,a)||{};o&&i.push(o.threadId)})),(0,a.R3)(s),void setTimeout((()=>{(0,a.R3)((0,r.K4)((0,a.Rd)(),e,t)),(0,g.Tw)(i).forEach((t=>{n.requestThreadInfoUpdate({chatId:e,threadId:t})}))}),se)}const i=[];t.forEach((e=>{const t=(0,c.X5)(s,e);if(t){i.push(t);const n=le(s=(0,r.cY)(s,t,e,{isDeleting:!0}),t);n&&(s=ce(s,t,n,!0)),setTimeout((()=>{(0,a.R3)((0,r.K4)((0,a.Rd)(),t,[e]))}),se)}})),(0,a.R3)(s),(0,g.Tw)(i).forEach((e=>{n.requestChatUpdate({chatId:e})}))}(0,a.iw)("apiUpdate",((e,t,n)=>{switch(n["@type"]){case"newMessage":{const{chatId:i,id:l,message:u,shouldForceReply:m}=n;e=re(e=ie(e,i,l,u),t,u),u.threadInfo&&(e=(0,r.Xg)(e,u.threadInfo.chatId,u.threadInfo.threadId,u.threadInfo)),(0,a.R3)(e);const h=(0,c.hj)(e,i,l);if((0,c.KA)(e,i,u)){var s;if(u.isOutgoing&&(null===(s=u.content)||void 0===s||!s.action)){const n=(0,c.Bt)(e);n&&t.focusMessage({chatId:i,threadId:n.threadId,messageId:u.id,noHighlight:!0,isResizingContainer:!0})}const{threadInfo:n}=(0,c.Db)(e,i,u)||{};n&&t.requestThreadInfoUpdate({chatId:i,threadId:n.threadId}),(0,d.CI)(u)||setTimeout((()=>{let e=(0,a.Rd)();m&&(e=(0,r.pf)(e,i,o._f,"replyingToId",l)),(0,a.R3)(ce(e,i,h))}),se)}else(0,a.R3)(ce((0,a.Rd)(),i,h));(0,c.N)(e,i)||t.loadTopChats();break}case"updateStartEmojiInteraction":{var i;const{chatId:t}=(0,c.Bt)(e)||{};if(t!==n.id)return;const s=(0,c.hj)(e,t,n.messageId);if(!s)return;if((0,d.UD)(s)!==n.emoji)return;const o=(0,c.CP)(e,n.emoji);e={...e,activeEmojiInteractions:[...e.activeEmojiInteractions||[],{id:(null===(i=e.activeEmojiInteractions)||void 0===i?void 0:i.length)||0,animatedEffect:o?(0,c.cu)(o):n.emoji,messageId:n.messageId}]},(0,a.R3)(e);break}case"newScheduledMessage":{const{chatId:t,id:s,message:i}=n;e=ie(e,t,s,i,!0);const l=(0,c.qy)(e,t)||[];e=(0,r.pf)(e,t,o._f,"scheduledIds",(0,g.Tw)([...l,s])),(0,a.R3)(e);break}case"updateMessage":{var l,u;const{chatId:s,id:i,message:d}=n;if(!(0,c.hj)(e,s,i))return;e=ie(e,s,i,d);const m=(0,c.hj)(e,s,i);d.threadInfo&&(e=(0,r.Xg)(e,d.threadInfo.chatId,d.threadInfo.threadId,d.threadInfo)),e=ce(e,s,m),(0,a.R3)(e);const h=(0,c.Z1)(e,s);h&&!d.isOutgoing&&(null===(l=h.lastMessage)||void 0===l?void 0:l.id)===d.id&&(0,c.xo)(e,h)&&(0,c.KA)(e,s,d)&&(0,c.b9)(e,s,(null===(u=d.threadInfo)||void 0===u?void 0:u.threadId)||o._f)&&t.focusLastMessage();break}case"updateScheduledMessage":{const{chatId:t,id:s,message:i}=n;if(!(0,c.Tm)(e,t,s))return;e=ie(e,t,s,i,!0);const l=Object.keys((0,c.Fn)(e,t)||{}).map(Number).sort(((e,t)=>t-e));e=(0,r.pf)(e,t,o._f,"scheduledIds",l),(0,a.R3)(e);break}case"updateMessageSendSucceeded":{const{chatId:s,localId:i,message:o}=n;e=re(e,t,o);const l=(0,c.hj)(e,s,i);e=(0,r.K4)(e,s,[i]),o.isScheduled&&(e=(0,r.bV)(e,s,[i])),e=(0,r.cY)(e,s,o.id,{...l,...o,previousLocalId:i});const d=(0,c.hj)(e,s,o.id);e=ce(e,s,d);const u=(0,c.Db)(e,s,o);null!=u&&u.threadInfo&&(t.markMessageListRead({maxId:o.id}),e=(0,r.pf)(e,s,u.threadInfo.threadId,"threadInfo",{...u.threadInfo,lastMessageId:o.id,lastReadInboxMessageId:o.id})),(0,a.R3)(e);break}case"updateScheduledMessageSendSucceeded":{const{chatId:t,localId:s,message:i}=n,l=(0,c.qy)(e,t)||[];e=(0,r.pf)(e,t,o._f,"scheduledIds",[...l,i.id]);const d=(0,c.Tm)(e,t,s);e=(0,r.bV)(e,t,[s]),e=(0,r.P4)(e,t,i.id,{...d,...i,previousLocalId:s}),(0,a.R3)(e);break}case"updatePinnedIds":{const{chatId:t,isPinned:s,messageIds:i}=n,l=(0,c.KB)(e,t)||[],d=s?[...l,...i].sort(((e,t)=>t-e)):l.filter((e=>!i.includes(e)));(0,a.R3)((0,r.pf)(e,t,o._f,"pinnedIds",d));break}case"updateThreadInfo":{const{chatId:t,threadId:s,threadInfo:i,firstMessageId:o}=n,l={...(0,c.tZ)(e,t,s),...i};if(!l.threadId)return;e=(0,r.Xg)(e,t,s,l),o&&(e=(0,r.pf)(e,t,s,"firstMessageId",o)),(0,a.R3)(e);break}case"resetMessages":{const{id:s}=n,i=(0,c.Zw)(e,s);i&&!(0,d.YC)(s)&&(e=(0,r.K4)(e,s,Object.keys(i).map(Number)),(0,a.R3)(e),t.loadFullChat({chatId:s,force:!0}));break}case"deleteMessages":{const{ids:a,chatId:s}=n;de(s,a,t,e);break}case"deleteScheduledMessages":{const{ids:t,chatId:s}=n;!function(e,t,n,s){e&&(t.forEach((t=>{s=(0,r.P4)(s,e,t,{isDeleting:!0})})),(0,a.R3)(s),setTimeout((()=>{s=(0,r.bV)((0,a.Rd)(),e,t);const n=(0,c.Fn)(s,e);s=(0,r.pf)(s,e,o._f,"scheduledIds",Object.keys(n||{}).map(Number)),(0,a.R3)(s)}),se))}(s,t,0,e);break}case"deleteHistory":{const{chatId:a}=n,s=e.messages.byChatId[a];s?de(a,Object.keys(s.byId).map(Number),t,e):t.requestChatUpdate({chatId:a});break}case"updateCommonBoxMessages":{const{ids:t,messageUpdate:s}=n;t.forEach((t=>{const n=(0,c.X5)(e,t);n&&(e=(0,r.cY)(e,n,t,s))})),(0,a.R3)(e);break}case"updateChannelMessages":{const{channelId:t,ids:s,messageUpdate:i}=n;s.forEach((n=>{e=(0,r.cY)(e,t,n,i)})),(0,a.R3)(e);break}case"updateMessagePoll":{const{pollId:t,pollUpdate:s}=n,i=(0,c.ZB)(e,t);if(null!=i&&i.content.poll){const t={...i.content.poll,...s},{results:n}=t.results||{};if(n&&!n.some((e=>e.isChosen))){const{results:e}=i.content.poll.results,a=e&&e.filter((e=>e.isChosen));a&&a.forEach((e=>{const a=n.findIndex((t=>t.option===e.option));a>=0&&(t.results.results[a].isChosen=!0)}))}(0,a.R3)((0,r.cY)(e,i.chatId,i.id,{content:{...i.content,poll:t}}))}break}case"updateMessagePollVote":{const{pollId:t,userId:s,options:i}=n,o=(0,c.ZB)(e,t);if(!o||!o.content.poll||!o.content.poll.results)break;const{poll:l}=o.content,{recentVoterIds:d,totalVoters:u,results:m}=l.results,h=d?[...d]:[],g=u?u+1:1,f=m?[...m]:[];h.push(s),i.forEach((t=>{const n=f.find((e=>e.option===t)),a=f.findIndex((e=>e.option===t)),i=n?{...n}:{option:t,votersCount:0};i.votersCount+=1,s===e.currentUserId&&(i.isChosen=!0),a?f[a]=i:f.push(i)})),(0,a.R3)((0,r.cY)(e,o.chatId,o.id,{content:{...o.content,poll:{...l,results:{...l.results,recentVoterIds:h,totalVoters:g,results:f}}}}));break}case"updateServiceNotification":{const{message:a}=n;(0,c.UW)(e)&&t.createServiceNotification({message:a});break}case"updateMessageReactions":{const{chatId:t,id:s,reactions:i}=n,o=(0,c.hj)(e,t,s),l=(0,c.Z1)(e,n.chatId),u=null==o?void 0:o.reactions;if(u&&ae(i,u))return;const m=(0,d.lb)(u,i,e.currentUserId);if(e=(0,r.cY)(e,t,s,{reactions:n.reactions}),m){const n=(0,c.hj)(e,t,s);if(!l||!n)return;(0,ne.rh)({chat:l,message:n,isReaction:!0})}(0,a.R3)(e);break}}}));const ue=(0,E.P2)((function(){const e=(0,a.Rd)();(0,a.R3)((0,r.ps)(e,{...e.users.statusesById,...me})),me={}}),3e3,!0);let me={};(0,a.iw)("apiUpdate",((e,t,n)=>{switch(n["@type"]){case"deleteContact":return(0,r.GK)(e,n.id);case"updateUser":return(0,r.Nq)(e,n.id,n.user);case"updateUserStatus":return a=n.userId,s=n.status,me[a]=s,void ue();case"updateUserFullInfo":{const{id:t,fullInfo:a}=n,s=e.users.byId[t];if(!s)return;return(0,r.Nq)(e,t,{fullInfo:{...s.fullInfo,...a}})}}var a,s})),(0,a.iw)("apiUpdate",((e,t,n)=>{if("updateStickerSet"===n["@type"])return(0,r.Rg)(e,n.id,n.stickerSet)})),(0,a.iw)("apiUpdate",((e,t,n)=>{switch(n["@type"]){case"updatePeerBlocked":return n.isBlocked?(0,r.O4)((0,a.Rd)(),n.id):(0,r.rB)((0,a.Rd)(),n.id);case"updateResetContactList":(0,a.R3)({...(0,a.Rd)(),contactList:{userIds:[]}});break;case"updateFavoriteStickers":t.loadFavoriteStickers();break;case"updatePrivacy":e.settings.privacy[n.key]=n.rules;break;case"updatePaymentVerificationNeeded":e=(0,r.fS)((0,a.Rd)(),n.url),e=(0,r.Q$)(e,m.KB.ConfirmPayment),(0,a.R3)(e)}})),(0,a.iw)("apiUpdate",((e,t,n)=>{switch(n["@type"]){case"updateNotifySettings":return(0,r.HN)(e,n.peerType,n.isSilent,n.shouldShowPreviews);case"updateNotifyExceptions":{const{chatId:t,isMuted:s,isSilent:i,shouldShowPreviews:o}=n;e.chats.byId[t]&&(e=(0,r.a4)(e,t,{isMuted:s})),(0,a.R3)((0,r.aK)(e,t,{isMuted:s,isSilent:i,shouldShowPreviews:o}));break}}})),(0,a.iw)("apiUpdate",((e,t,n)=>{switch(n["@type"]){case"updateTwoFaStateWaitCode":return{...e,twoFaSettings:{...e.twoFaSettings,isLoading:!1,waitingEmailCodeLength:n.length}};case"updateTwoFaError":return{...e,twoFaSettings:{...e.twoFaSettings,error:n.message}}}}));var he=n(8958);(0,a.iw)("apiUpdate",((e,t,n)=>{switch(n["@type"]){case"updateGroupCall":return"discarded"===n.call.connectionState?e.groupCalls.activeGroupCallId?void t.leaveGroupCall({shouldRemove:!0}):(0,he.dc)(e,n.call.id):(0,he.AH)(e,n.call.id,(0,g.CE)(n.call,["connectionState"]),void 0,n.call.participantsCount);case"updateGroupCallChatId":{const t=(0,c.Z1)(e,n.chatId);return t&&(e=(0,r.a4)(e,n.chatId,{fullInfo:{...t.fullInfo,groupCallId:n.call.id}})),e}case"updateGroupCallParticipants":{const{groupCallId:t,participants:s,nextOffset:i}=n,{currentUserId:o}=e;return e=(0,a.Rd)(),s.forEach((n=>{n.id&&(e=(0,he.B6)(e,t,n.id,n,Boolean(i)||o===n.id))})),i&&(e=(0,he.AH)(e,t,{nextOffset:i})),e}}})),(0,a.iw)("apiUpdate",((e,t,n)=>{if("updatePaymentStateCompleted"===n["@type"])return(0,r.bp)(e)}));var ge=n(8674),fe=n(6752),pe=n(1279),ve=n(3551),Ie=n(3227),ye=n(1212),we=n(5332);function Ze(e){(0,i.d4)((()=>(0,E.Gq)(e)),[e])}var Pe=n(9290);const Ce=document.querySelector('meta[name="viewport"]'),be=(null==Ce?void 0:Ce.getAttribute("content"))||"",Se="width=device-width, initial-scale=1, shrink-to-fit=no, viewport-fit=cover";function Ee(e){e.preventDefault()}var Me=n(6590),Re=n(4851),ke=n(2155),Ne=n(1334),Te=n(7358);const Ae=(0,i.X$)((e=>{let{isForAppBadge:t}=e;(0,Ne.yi)();const n=(0,$.xW)();if((0,i.d4)((()=>{t&&(0,Te.w)(n)}),[t,n]),!t&&n)return i.ZP.createElement("div",{className:"unread-count active"},(0,ke.bi)(n))}));var Be=n(3989),xe=n(7529),Le=n(3455),Oe=n(706),Ue=n(2255),Fe=n(9107),$e=n(7370),De=n(7926),qe=n(1622);let je;function Ge(e,t,n,a,s,o){let r,c,l;return r=function(){const[e,t]=(0,i.eJ)(window.navigator.onLine);return(0,i.d4)((()=>{function e(){t(window.navigator.onLine)}return window.addEventListener("online",e),window.addEventListener("offline",e),()=>{window.removeEventListener("offline",e),window.removeEventListener("online",e)}}),[]),e}()&&"connectionStateConnecting"!==t?n?je.syncing:je.online:je.waitingForNetwork,c=r===je.online||o?"none":a?"middleHeader":s?"minimized":"overlay",r===je.waitingForNetwork?l=e("WaitingForNetwork"):r===je.syncing&&(l=e("Updating")),"middleHeader"===c&&(l=l.toLowerCase().replace(/\.+$/,"")),{connectionStatus:r,connectionStatusPosition:c,connectionStatusText:l}}!function(e){e[e.waitingForNetwork=0]="waitingForNetwork",e[e.syncing=1]="syncing",e[e.online=2]="online"}(je||(je={}));var He=n(3106),_e=n(8964),ze=n(231),Ve=n(9589),Xe=n(9187),Ke=n(3321),We=n(126),Ye=n(9204);const Je=(0,i.X$)((e=>{let{connectionStatus:t,connectionStatusText:n,onClick:a}=e;const s=(0,Fe.Z)();return i.ZP.createElement("div",{id:"ConnectionStatusOverlay",dir:s.isRtl?"rtl":void 0,onClick:a},i.ZP.createElement(Ye.Z,{color:"black"}),i.ZP.createElement("div",{className:"state-text"},i.ZP.createElement(Ue.Z,{activeKey:t,name:"slide-fade"},n)),i.ZP.createElement(ze.Z,{round:!0,size:"tiny",color:"translucent-black"},i.ZP.createElement("span",{className:"icon-close"})))})),Qe=[0,1,2],et=(0,i.X$)((0,a.c$)((e=>{const{query:t,fetchingStatus:n,chatId:a,date:s}=e.globalSearch,{currentUserId:i,connectionState:o,isSyncing:r}=e,{byId:l}=e.chats,{isConnectionStatusMinimized:d,animationLevel:u}=e.settings.byKey;return{searchQuery:t,isLoading:!!n&&Boolean(n.chats||n.messages),currentUserId:i,chatsById:l,globalSearchChatId:a,searchDate:s,theme:(0,c.Pu)(e),animationLevel:u,connectionState:o,isSyncing:r,isMessageListOpen:Boolean((0,c.Bt)(e)),isConnectionStatusMinimized:d,areChatsLoaded:Boolean(e.chats.listIds.active)}}))((e=>{let{content:t,contactsFilter:n,onSearchQuery:o,onSelectSettings:r,onSelectContacts:c,onSelectArchived:l,onReset:u,searchQuery:g,isLoading:f,shouldSkipTransition:p,currentUserId:v,globalSearchChatId:I,searchDate:y,theme:w,animationLevel:Z,chatsById:P,connectionState:C,isSyncing:b,isMessageListOpen:S,isConnectionStatusMinimized:E,areChatsLoaded:M}=e;const{openChat:R,openTipsChat:k,setGlobalSearchDate:N,setSettingOption:T,setGlobalSearchChatId:A}=(0,a.Sv)(),B=(0,Fe.Z)(),x=t===m.du.ChatList,O=(0,i.Ye)((()=>y?(0,L.xH)(new Date(1e3*y)):void 0),[y]),U=(0,i.Ye)((()=>x&&P?Object.values(P).reduce(((e,t)=>(0,d.pE)(t)&&t.unreadCount?e+1:e),0):0),[x,P]),{connectionStatus:F,connectionStatusText:$,connectionStatusPosition:D}=Ge(B,C,b,S,E,!M),q="web.telegram.org"===window.location.hostname,j=(0,i.Ye)((()=>e=>{let{onTrigger:t,isOpen:n}=e;return i.ZP.createElement(ze.Z,{round:!0,ripple:x&&!h.wB,size:"smaller",color:"translucent",className:n?"active":"",onClick:x?t:()=>u(),ariaLabel:x?B("AccDescrOpenMenu2"):"Return to chat list"},i.ZP.createElement("div",{className:(0,fe.Z)("animated-menu-icon",!x&&"state-back",p&&"no-animation")}))}),[x,B,u,p]),G=(0,i.I4)((()=>{g||o("")}),[g,o]),H=(0,i.I4)((()=>{T({isConnectionStatusMinimized:!E})}),[E,T]),_=(0,i.I4)((()=>{R({id:v,shouldReplaceHistory:!0})}),[v,R]),z=(0,i.I4)((e=>{e.stopPropagation();const t="light"===w?"dark":"light";T({theme:t}),T({shouldUseSystemTheme:!1}),(0,$e.Z)(t,Z===s.zy)}),[Z,T,w]),V=(0,i.I4)((e=>{e.stopPropagation();const t=0===Z?2:0;Qe.forEach(((e,n)=>{document.body.classList.toggle(`animation-level-${n}`,t===n)})),T({animationLevel:t})}),[Z,T]),X=(0,i.I4)((()=>{(0,De.L)("K"),(0,qe.W8)(),(0,Me.Wv)()}),[]),K=(0,i.I4)((()=>{k({langCode:B.code})}),[B.code,k]),W=Boolean(I)||t===m.du.GlobalSearch||t===m.du.Contacts,Y=t===m.du.Contacts?B("SearchFriends"):B("Search");return i.ZP.createElement("div",{className:"LeftMainHeader"},i.ZP.createElement("div",{id:"LeftMainHeader",className:"left-header"},i.ZP.createElement(He.Z,{trigger:j,footer:`${s.iC} ${s.eM?"master":s.Ji}`},i.ZP.createElement(_e.Z,{icon:"saved-messages",onClick:_},B("SavedMessages")),i.ZP.createElement(_e.Z,{icon:"archive",onClick:l},i.ZP.createElement("span",{className:"menu-item-name"},B("ArchivedChats")),U>0&&i.ZP.createElement("div",{className:"archived-badge"},U)),i.ZP.createElement(_e.Z,{icon:"user",onClick:c},B("Contacts")),i.ZP.createElement(_e.Z,{icon:"settings",onClick:r},B("Settings")),i.ZP.createElement(_e.Z,{icon:"darkmode",onClick:z},i.ZP.createElement("span",{className:"menu-item-name"},B("lng_menu_night_mode")),i.ZP.createElement(Ke.Z,{id:"darkmode",label:B("dark"===w?"lng_settings_disable_night_theme":"lng_settings_enable_night_theme"),checked:"dark"===w,noAnimation:!0})),i.ZP.createElement(_e.Z,{icon:"animations",onClick:V},i.ZP.createElement("span",{className:"menu-item-name capitalize"},B("Appearance.Animations").toLowerCase()),i.ZP.createElement(Ke.Z,{id:"animations",label:"Toggle Animations",checked:Z>0})),i.ZP.createElement(_e.Z,{icon:"help",onClick:K},B("TelegramFeatures")),i.ZP.createElement(_e.Z,{icon:"bug",href:s.mU},"Report Bug"),q&&i.ZP.createElement(i.ZP.Fragment,null,i.ZP.createElement(_e.Z,{icon:"char-K",href:"https://web.telegram.org/k/",onClick:X},"Switch to K Version"),i.ZP.createElement(_e.Z,{icon:"char-W",href:"https://web.telegram.org/?legacy=1",onClick:Me.Wv},"Switch to Old Version"))),i.ZP.createElement(Ve.Z,{inputId:"telegram-search-input",parentContainerClassName:"LeftSearch",className:I||y?"with-picker-item":"",value:n||g,focused:W,isLoading:f||"minimized"===D,spinnerColor:"minimized"===D?"yellow":void 0,spinnerBackgroundColor:"minimized"===D&&"light"===w?"light":void 0,placeholder:Y,autoComplete:"off",canClose:Boolean(I||y),onChange:o,onReset:u,onFocus:G,onSpinnerClick:"minimized"===D?H:void 0},O&&i.ZP.createElement(Xe.Z,{icon:"calendar",title:O,canClose:!0,isMinimized:Boolean(I),className:"search-date",onClick:N,clickArg:{date:void 0}}),I&&i.ZP.createElement(Xe.Z,{chatOrUserId:I,onClick:A,canClose:!0,clickArg:{id:void 0}})),i.ZP.createElement(We.Z,{isOpen:"overlay"===D,isCustom:!0,className:"connection-state-wrapper"},i.ZP.createElement(Je,{connectionStatus:F,connectionStatusText:$,onClick:H}))))})));var tt=n(1174),nt=n(3133),at=n(1080);const st=(0,i.X$)((0,a.c$)((e=>{const{chatFolders:{byId:t,orderedIds:n,activeChatFolder:a},currentUserId:s,lastSyncTime:i,shouldSkipHistoryAnimations:o}=e;return{chatFoldersById:t,orderedFolderIds:n,activeChatFolder:a,currentUserId:s,lastSyncTime:i,shouldSkipHistoryAnimations:o}}))((e=>{let{foldersDispatch:t,onScreenSelect:n,chatFoldersById:o,orderedFolderIds:r,activeChatFolder:c,currentUserId:l,lastSyncTime:d,shouldSkipHistoryAnimations:u}=e;const{loadChatFolders:m,setActiveChatFolder:g,openChat:f}=(0,a.Sv)(),p=(0,i.sO)(null),v=(0,Fe.Z)();(0,i.d4)((()=>{d&&m()}),[d,m]);const I=(0,i.Ye)((()=>r?r.map((e=>o[e]||{})).filter(Boolean):void 0),[o,r]),y=(0,Ne.yi)(),w=(0,i.Ye)((()=>{if(I&&I.length)return[{id:s.Nf,title:"en"===v.code?"All":v("FilterAllChats")},...I.map((e=>{var t,n;let{id:a,title:s}=e;return{id:a,title:s,badgeCount:null===(t=y[a])||void 0===t?void 0:t.chatsCount,isBadgeActive:Boolean(null===(n=y[a])||void 0===n?void 0:n.notificationsCount)}}))]}),[I,y,v]),Z=(0,i.I4)((e=>{g(e,{forceOnHeavyAnimation:!0})}),[g]);(0,i.d4)((()=>{w&&w.length&&c>=w.length&&g(0)}),[c,w,g]),(0,i.d4)((()=>{if(p.current&&h.$b&&w&&w.length)return(0,tt.sf)(p.current,{selectorToPreventScroll:".chat-list",onSwipe:(e,t)=>t===tt.eM.Left?(g(Math.min(c+1,w.length-1),{forceOnHeavyAnimation:!0}),!0):t===tt.eM.Right&&(g(Math.max(0,c-1),{forceOnHeavyAnimation:!0}),!0)})}),[c,w,g]);const P=(0,i.sO)();P.current=0!==c,(0,i.d4)((()=>P.current?(0,Be.Z)((()=>{P.current&&g(0)})):void 0),[c,g]),(0,Me.ZP)(0!==c,(()=>g(0,{forceOnHeavyAnimation:!0}))),(0,i.d4)((()=>{const e=e=>{if(e.ctrlKey&&e.shiftKey&&e.code.startsWith("Digit")&&w){const[,t]=e.code.match(/Digit(\d)/)||[];if(!t)return;if("0"===t)return void f({id:l,shouldReplaceHistory:!0});const n=Number(t)-1;if(n>w.length-1)return;g(n,{forceOnHeavyAnimation:!0}),e.preventDefault()}};return document.addEventListener("keydown",e,!0),()=>{document.removeEventListener("keydown",e,!0)}}));const{shouldRender:C,transitionClassNames:b}=(0,ye.Z)(!r,void 0,!0);function S(e){const a=Object.values(o).find((e=>{let{id:t}=e;return t===w[c].id}));return a&&0!==c?i.ZP.createElement(at.Z,{folderType:"folder",folderId:a.id,isActive:e,lastSyncTime:d,onScreenSelect:n,foldersDispatch:t}):i.ZP.createElement(at.Z,{folderType:"all",isActive:e,lastSyncTime:d,foldersDispatch:t,onScreenSelect:n})}return i.ZP.createElement("div",{className:"ChatFolders"},null!=w&&w.length?i.ZP.createElement(nt.Z,{tabs:w,activeTab:c,onSwitchTab:Z}):C?i.ZP.createElement("div",{className:(0,fe.Z)("tabs-placeholder",b)}):void 0,i.ZP.createElement(Ue.Z,{ref:p,name:u?"none":v.isRtl?"slide-optimized-rtl":"slide-optimized",activeKey:c,renderCount:w?w.length:void 0},S))})));var it=n(9203),ot=n(8778),rt=n(4288);const ct=(0,i.X$)((e=>{const t=(0,ot.Z)(it.gl.Extra,"LeftSearch");return t?i.ZP.createElement(t,e):i.ZP.createElement(rt.Z,null)})),lt=(0,i.X$)((e=>{const t=(0,ot.Z)(it.gl.Extra,"ContactList");return t?i.ZP.createElement(t,e):i.ZP.createElement(rt.Z,null)}));var dt=n(2328);const ut=(0,i.X$)((e=>{let{isShown:t,onNewPrivateChat:n,onNewChannel:a,onNewGroup:s}=e;const[o,r]=(0,i.eJ)(!1);(0,i.d4)((()=>{t||r(!1)}),[t]);const c=(0,Fe.Z)(),l=(0,fe.Z)("NewChatButton",t&&"revealed",o&&"menu-is-open"),d=(0,i.I4)((()=>{r(!o)}),[o]),u=(0,i.I4)((()=>{r(!1)}),[]);return i.ZP.createElement("div",{className:l},i.ZP.createElement(ze.Z,{round:!0,color:"primary",className:o?"active":"",onClick:d,ariaLabel:c(o?"Close":"NewMessageTitle"),tabIndex:-1},i.ZP.createElement("i",{className:"icon-new-chat-filled"}),i.ZP.createElement("i",{className:"icon-close"})),i.ZP.createElement(dt.Z,{isOpen:o,positionX:"right",positionY:"bottom",autoClose:!0,onClose:u},i.ZP.createElement(_e.Z,{icon:"channel",onClick:a},c("NewChannel")),i.ZP.createElement(_e.Z,{icon:"group",onClick:s},c("NewGroup")),i.ZP.createElement(_e.Z,{icon:"user",onClick:n},c("NewMessageTitle"))))})),mt=Object.keys(m.du).length/2;let ht;const gt=(0,i.X$)((e=>{let{content:t,searchQuery:n,searchDate:a,contactsFilter:s,shouldSkipTransition:o,foldersDispatch:r,onSearchQuery:c,onContentChange:l,onScreenSelect:d,onReset:u}=e;const[g,f]=(0,i.eJ)(h.$b),p=(0,i.sO)(!1),v=(0,i.I4)((()=>{l(m.du.Settings)}),[l]),I=(0,i.I4)((()=>{l(m.du.Contacts)}),[l]),y=(0,i.I4)((()=>{l(m.du.NewChannelStep1)}),[l]),w=(0,i.I4)((()=>{l(m.du.NewGroupStep1)}),[l]),Z=(0,i.I4)((()=>{l(m.du.Archived)}),[l]),P=(0,i.I4)((()=>{t===m.du.ChatList&&(p.current=!0,f(!0))}),[t]),C=(0,i.I4)((()=>{p.current=!1,ht&&(clearTimeout(ht),ht=void 0),ht=window.setTimeout((()=>{p.current||f(!1)}),250)}),[]);(0,i.d4)((()=>{let e;return t!==m.du.ChatList?e=window.setTimeout((()=>{f(!1)}),250):(p.current||h.$b)&&f(!0),()=>{e&&(clearTimeout(e),e=void 0)}}),[t]);const[b,S,E]=function(){const[e,t]=(0,Oe.Z)(!1);(0,i.d4)((()=>{const e=window.setTimeout(t,2592e5);return()=>{clearTimeout(e)}}),[t]);const{shouldRender:n,transitionClassNames:a}=(0,ye.Z)(e);return[n,a,()=>{window.location.reload()}]}(),M=(0,Fe.Z)();return i.ZP.createElement("div",{id:"LeftColumn-main",onMouseEnter:h.$b?void 0:P,onMouseLeave:h.$b?void 0:C},i.ZP.createElement(et,{content:t,contactsFilter:s,onSearchQuery:c,onSelectSettings:v,onSelectContacts:I,onSelectArchived:Z,onReset:u,shouldSkipTransition:o}),i.ZP.createElement(Ue.Z,{name:o?"none":"zoom-fade",renderCount:mt,activeKey:t,shouldCleanup:!0,cleanupExceptionKey:m.du.ChatList},(e=>{switch(t){case m.du.ChatList:return i.ZP.createElement(st,{onScreenSelect:d,foldersDispatch:r});case m.du.GlobalSearch:return i.ZP.createElement(ct,{searchQuery:n,searchDate:a,isActive:e,onReset:u});case m.du.Contacts:return i.ZP.createElement(lt,{filter:s,isActive:e,onReset:u});default:return}})),b&&i.ZP.createElement(ze.Z,{fluid:!0,pill:!0,className:(0,fe.Z)("btn-update",S),onClick:E},M("lng_update_telegram")),i.ZP.createElement(ut,{isShown:g,onNewPrivateChat:I,onNewChannel:y,onNewGroup:w}))})),ft=(0,i.X$)((e=>{const t=(0,ot.Z)(it.gl.Extra,"Settings");return t?i.ZP.createElement(t,e):i.ZP.createElement(rt.Z,null)})),pt=(0,i.X$)((e=>{const t=(0,ot.Z)(it.gl.Extra,"NewChat");return t?i.ZP.createElement(t,e):i.ZP.createElement(rt.Z,null)})),vt=(0,i.X$)((e=>{const t=(0,ot.Z)(it.gl.Extra,"ArchivedChats");return t?i.ZP.createElement(t,e):i.ZP.createElement(rt.Z,null)}));var It;!function(e){e[e.Main=0]="Main",e[e.Settings=1]="Settings",e[e.Archived=2]="Archived",e[e.NewGroup=3]="NewGroup",e[e.NewChannel=4]="NewChannel"}(It||(It={}));const yt=Object.keys(It).length/2,wt=(0,i.X$)((0,a.c$)((e=>{const{globalSearch:{query:t,date:n},chatFolders:{activeChatFolder:a},shouldSkipHistoryAnimations:s,leftColumnWidth:i}=e;return{searchQuery:t,searchDate:n,activeChatFolder:a,shouldSkipHistoryAnimations:s,leftColumnWidth:i}}))((e=>{let{searchQuery:t,searchDate:n,activeChatFolder:s,shouldSkipHistoryAnimations:o,leftColumnWidth:r}=e;const{setGlobalSearchQuery:c,setGlobalSearchChatId:l,resetChatCreation:d,setGlobalSearchDate:u,loadPasswordInfo:g,clearTwoFaError:f,setLeftColumnWidth:p,resetLeftColumnWidth:v}=(0,a.Sv)(),I=(0,i.sO)(null),[y,w]=(0,i.eJ)(m.du.ChatList),[Z,P]=(0,i.eJ)(m.MT.Main),[C,b]=(0,i.eJ)(""),[S,E]=(0,Le.ZP)(),[M,R]=(0,i.eJ)(0);let k=It.Main;switch(y){case m.du.Archived:k=It.Archived;break;case m.du.Settings:k=It.Settings;break;case m.du.NewChannelStep1:case m.du.NewChannelStep2:k=It.NewChannel;break;case m.du.NewGroupStep1:case m.du.NewGroupStep2:k=It.NewGroup}const N=(0,i.I4)((e=>{if(y!==m.du.NewGroupStep2||e)if(y!==m.du.NewChannelStep2||e){if(y===m.du.NewGroupStep1){const e=document.getElementById("new-group-picker-search");e&&e.blur()}if(y===m.du.Settings)switch(Z){case m.MT.EditProfile:case m.MT.Folders:case m.MT.General:case m.MT.Notifications:case m.MT.DataStorage:case m.MT.Privacy:case m.MT.Language:return void P(m.MT.Main);case m.MT.GeneralChatBackground:case m.MT.QuickReaction:return void P(m.MT.General);case m.MT.GeneralChatBackgroundColor:return void P(m.MT.GeneralChatBackground);case m.MT.PrivacyPhoneNumber:case m.MT.PrivacyLastSeen:case m.MT.PrivacyProfilePhoto:case m.MT.PrivacyForwarding:case m.MT.PrivacyGroupChats:case m.MT.PrivacyActiveSessions:case m.MT.PrivacyBlockedUsers:case m.MT.TwoFaDisabled:case m.MT.TwoFaEnabled:case m.MT.TwoFaCongratulations:return void P(m.MT.Privacy);case m.MT.PrivacyPhoneNumberAllowedContacts:case m.MT.PrivacyPhoneNumberDeniedContacts:return void P(m.MT.PrivacyPhoneNumber);case m.MT.PrivacyLastSeenAllowedContacts:case m.MT.PrivacyLastSeenDeniedContacts:return void P(m.MT.PrivacyLastSeen);case m.MT.PrivacyProfilePhotoAllowedContacts:case m.MT.PrivacyProfilePhotoDeniedContacts:return void P(m.MT.PrivacyProfilePhoto);case m.MT.PrivacyForwardingAllowedContacts:case m.MT.PrivacyForwardingDeniedContacts:return void P(m.MT.PrivacyForwarding);case m.MT.PrivacyGroupChatsAllowedContacts:case m.MT.PrivacyGroupChatsDeniedContacts:return void P(m.MT.PrivacyGroupChats);case m.MT.TwoFaNewPassword:return void P(m.MT.TwoFaDisabled);case m.MT.TwoFaNewPasswordConfirm:return void P(m.MT.TwoFaNewPassword);case m.MT.TwoFaNewPasswordHint:return void P(m.MT.TwoFaNewPasswordConfirm);case m.MT.TwoFaNewPasswordEmail:return void P(m.MT.TwoFaNewPasswordHint);case m.MT.TwoFaNewPasswordEmailCode:return void P(m.MT.TwoFaNewPasswordEmail);case m.MT.TwoFaChangePasswordCurrent:case m.MT.TwoFaTurnOff:case m.MT.TwoFaRecoveryEmailCurrentPassword:return void P(m.MT.TwoFaEnabled);case m.MT.TwoFaChangePasswordNew:return void P(m.MT.TwoFaChangePasswordCurrent);case m.MT.TwoFaChangePasswordConfirm:return void P(m.MT.TwoFaChangePasswordNew);case m.MT.TwoFaChangePasswordHint:return void P(m.MT.TwoFaChangePasswordConfirm);case m.MT.TwoFaRecoveryEmail:return void P(m.MT.TwoFaRecoveryEmailCurrentPassword);case m.MT.TwoFaRecoveryEmailCode:return void P(m.MT.TwoFaRecoveryEmail);case m.MT.FoldersCreateFolder:case m.MT.FoldersEditFolder:return void P(m.MT.Folders);case m.MT.FoldersIncludedChatsFromChatList:case m.MT.FoldersExcludedChatsFromChatList:return void P(m.MT.FoldersEditFolderFromChatList);case m.MT.FoldersEditFolderFromChatList:return w(m.du.ChatList),void P(m.MT.Main)}y!==m.du.ChatList||0!==s?(w(m.du.ChatList),b(""),c({query:""}),u({date:void 0}),l({id:void 0}),d(),setTimeout((()=>{R(Date.now())}),250)):w(m.du.GlobalSearch)}else w(m.du.NewChannelStep1);else w(m.du.NewGroupStep1)}),[y,s,Z,c,u,l,d]),T=(0,i.I4)((e=>{y!==m.du.Contacts?(w(m.du.GlobalSearch),e!==t&&c({query:e})):b(e)}),[y,t,c]);(0,i.d4)((()=>y!==m.du.ChatList||0===s?(0,Be.Z)((()=>N())):void 0),[s,y,N]),(0,i.d4)((()=>{if(y!==m.du.GlobalSearch)return document.addEventListener("keydown",e,!1),()=>{document.removeEventListener("keydown",e,!1)};function e(e){(h.jm&&e.metaKey||!h.jm&&e.ctrlKey)&&e.shiftKey&&"f"===(0,xe.Z)(e)&&(e.preventDefault(),w(m.du.GlobalSearch))}}),[y]),(0,i.d4)((()=>{f(),Z===m.MT.Privacy&&g()}),[f,g,Z]);const{initResize:A,resetResize:B,handleMouseUp:x}=function(e,t,n,a){const[s,o,r]=(0,Oe.Z)(),[c,l]=(0,i.eJ)(),[d,u]=(0,i.eJ)();function m(){document.body.classList.remove("cursor-ew-resize")}return(0,i.d4)((()=>{e.current&&a&&(e.current.style.width=`${a}px`)}),[e,a]),(0,i.d4)((()=>{if(!s)return;const n=t=>{const n=Math.ceil(d+t.clientX-c);e.current.style.width=`${n}px`};function a(){i(),t(e.current.offsetWidth)}function i(){m(),document.removeEventListener("mousemove",n,!1),document.removeEventListener("mouseup",a,!1),document.removeEventListener("blur",a,!1),r()}return document.addEventListener("mousemove",n,!1),document.addEventListener("mouseup",a,!1),document.addEventListener("blur",a,!1),i}),[d,c,e,t,s,r]),{initResize:function(t){t.preventDefault(),document.body.classList.add("cursor-ew-resize"),l(t.clientX),u(e.current.offsetWidth),o()},resetResize:function(t){t.preventDefault(),e.current.style.width="",n()},handleMouseUp:m}}(I,p,v,r),L=(0,i.I4)((e=>{w(m.du.Settings),P(e)}),[]);return i.ZP.createElement("div",{id:"LeftColumn",ref:I},i.ZP.createElement(Ue.Z,{name:o?"none":h.s0,renderCount:yt,activeKey:k,shouldCleanup:!0,cleanupExceptionKey:It.Main},(e=>{switch(k){case It.Archived:return i.ZP.createElement(vt,{isActive:e,onReset:N,onContentChange:w});case It.Settings:return i.ZP.createElement(ft,{isActive:e,currentScreen:Z,foldersState:S,foldersDispatch:E,onScreenSelect:L,onReset:N,shouldSkipTransition:o});case It.NewChannel:return i.ZP.createElement(pt,{key:M,isActive:e,isChannel:!0,content:y,onContentChange:w,onReset:N});case It.NewGroup:return i.ZP.createElement(pt,{key:M,isActive:e,content:y,onContentChange:w,onReset:N});default:return i.ZP.createElement(gt,{content:y,searchQuery:t,searchDate:n,contactsFilter:C,foldersDispatch:E,onContentChange:w,onSearchQuery:T,onScreenSelect:L,onReset:N,shouldSkipTransition:o})}})),i.ZP.createElement("div",{className:"resize-handle",onMouseDown:A,onMouseUp:x,onDoubleClick:B}))})));var Zt=n(2420),Pt=n(5780),Ct=n(9524),bt=n(1394);const St=()=>{const[e,t]=(0,i.eJ)(Q.Z.get());return(0,i.d4)((()=>{const e=(0,E.P2)((()=>{t(Q.Z.get())}),250,!1);return window.addEventListener("resize",e),()=>{window.removeEventListener("resize",e)}}),[]),e};var Et=n(2678),Mt=n(7204),Rt=n(5326),kt=n(3570),Nt=n(5790),Tt=n(8360),At=n(6058),Bt=n(8799);const xt=(0,i.X$)((e=>{const{isOpen:t}=e,n=(0,ot.Z)(it.gl.Extra,"HeaderMenuContainer",!t);return n?i.ZP.createElement(n,e):void 0})),Lt=(0,i.X$)((0,a.c$)(((e,t)=>{var n,a,s;let{chatId:i,threadId:r,messageListType:l}=t;const u=(0,c.Z1)(e,i),m=Boolean(u&&(0,d.eA)(u));if(!u||u.isRestricted||(0,c.CA)(e))return{noMenu:!0};const g=(0,c.IK)(e,i),f=(0,c.FM)(e,i),p="thread"===l&&r===o._f,v="thread"===l&&r!==o._f,I=(0,c.Jf)(e),y=Boolean(g&&(0,c.s4)(e,g.id)),w=!y&&Boolean((0,c.pk)(e,i)),Z=Boolean(p&&(m||(0,d.ZV)(u))&&u.isNotJoined),P=p||v,C=h.Bi&&(0,d.YC)(u.id)&&!f&&!g,b=p&&!f&&!Z,S=p&&!Z,E=h.Bi&&u.isCallActive,M=h.Bi&&!u.isCallActive&&((null===(n=u.adminRights)||void 0===n?void 0:n.manageCall)||u.isCreator&&(0,d.G9)(u));return{noMenu:!1,isChannel:m,isRightColumnShown:I,canStartBot:w,canRestartBot:y,canSubscribe:Z,canSearch:P,canCall:C,canMute:b,canViewStatistics:null===(a=u.fullInfo)||void 0===a?void 0:a.canViewStatistics,canLeave:S,canEnterVoiceChat:E,canCreateVoiceChat:M,pendingJoinRequests:null===(s=u.fullInfo)||void 0===s?void 0:s.requestsPending}}))((e=>{let{chatId:t,threadId:n,noMenu:s,isChannel:o,canStartBot:r,canRestartBot:c,canSubscribe:l,canSearch:d,canCall:u,canMute:g,canViewStatistics:f,canLeave:p,canEnterVoiceChat:v,canCreateVoiceChat:I,pendingJoinRequests:y,isRightColumnShown:w,canExpandActions:Z}=e;const{joinChannel:P,sendBotCommand:C,openLocalTextSearch:b,restartBot:S,openCallFallbackConfirm:E,requestNextManagementScreen:M}=(0,a.Sv)(),R=(0,i.sO)(null),[k,N]=(0,i.eJ)(!1),[T,A]=(0,i.eJ)(void 0),B=(0,i.I4)((()=>{N(!0);const e=R.current.getBoundingClientRect();A({x:e.right,y:e.bottom})}),[]),x=(0,i.I4)((()=>{N(!1)}),[]),L=(0,i.I4)((()=>{A(void 0)}),[]),O=(0,i.I4)((()=>{P({chatId:t})}),[P,t]),U=(0,i.I4)((()=>{C({command:"/start"})}),[C]),F=(0,i.I4)((()=>{S({chatId:t})}),[t,S]),$=(0,i.I4)((()=>{M({screen:m.u1.JoinRequests})}),[M]),D=(0,i.I4)((()=>{b(),h.wB?document.querySelector("#MobileSearch input").focus():setTimeout((()=>{const e=document.querySelector(".RightHeader .SearchInput input");e&&e.focus()}),400)}),[b]);(0,i.d4)((()=>{if(d)return document.addEventListener("keydown",e,!1),()=>{document.removeEventListener("keydown",e,!1)};function e(e){h.fl&&(h.jm&&e.metaKey||!h.jm&&e.ctrlKey)&&!e.shiftKey&&"f"===(0,xe.Z)(e)&&(e.preventDefault(),D())}}),[d,D]);const q=(0,Fe.Z)();return i.ZP.createElement("div",{className:"HeaderActions"},!h.wB&&i.ZP.createElement(i.ZP.Fragment,null,Z&&l&&i.ZP.createElement(ze.Z,{size:"tiny",ripple:!0,fluid:!0,onClick:O},q(o?"ProfileJoinChannel":"ProfileJoinGroup")),Z&&r&&i.ZP.createElement(ze.Z,{size:"tiny",ripple:!0,fluid:!0,onClick:U},q("BotStart")),Z&&c&&i.ZP.createElement(ze.Z,{size:"tiny",ripple:!0,fluid:!0,onClick:F},q("BotRestart")),d&&i.ZP.createElement(ze.Z,{round:!0,ripple:w,color:"translucent",size:"smaller",onClick:D,ariaLabel:"Search in this chat"},i.ZP.createElement("i",{className:"icon-search"})),u&&i.ZP.createElement(ze.Z,{round:!0,color:"translucent",size:"smaller",onClick:E,ariaLabel:"Call"},i.ZP.createElement("i",{className:"icon-phone"}))),Boolean(y)&&i.ZP.createElement(ze.Z,{round:!0,className:"badge-button",ripple:w,color:"translucent",size:"smaller",onClick:$,ariaLabel:q(o?"SubscribeRequests":"MemberRequests")},i.ZP.createElement("i",{className:"icon-user"}),i.ZP.createElement("div",{className:"badge"},y)),i.ZP.createElement(ze.Z,{ref:R,className:k?"active":"",round:!0,ripple:!h.wB,size:"smaller",color:"translucent",disabled:s,ariaLabel:"More actions",onClick:B},i.ZP.createElement("i",{className:"icon-more"})),T&&i.ZP.createElement(xt,{chatId:t,threadId:n,isOpen:k,anchor:T,withExtraActions:h.wB||!Z,isChannel:o,canStartBot:r,canRestartBot:c,canSubscribe:l,canSearch:d,canCall:u,canMute:g,canViewStatistics:f,canLeave:p,canEnterVoiceChat:v,canCreateVoiceChat:I,onSubscribeChannel:O,onSearchClick:D,onClose:x,onCloseAnimationEnd:L}))})));var Ot=n(4399),Ut=n(6202),Ft=n(862);function $t(e){var t;const n=e&&(0,d.DH)(e),a=null==e||null===(t=e.content)||void 0===t?void 0:t.sticker,o=n&&a&&!(0,h.on)()&&n.includes("image/webp"),[r,c]=(0,i.eJ)(Ft.Hu),l=null==e?void 0:e.id;return(0,i.bt)((()=>{o&&(0,Ft.p6)(`b64-${l}`,n).then(c).catch((e=>{s.eM&&console.error(e)}))}),[l,o,n]),o?r:n}var Dt=n(7551),qt=n(8512),jt=n(996);function Gt(e,t,n,a,s){return`M${e},${t+s}a${s},${s},0,0,1,\n ${n},0v${a-2*s}a${s},${s},0,0,1,${-n},0Z`}const Ht=(0,i.X$)((e=>{let{count:t,index:n}=e;const a=(0,i.sO)(null),s=(0,i.Ye)((()=>function(e,t){const n=e-t-1,a=function(e){let t=8;return 1===e?t=36:2===e?t=17:3===e?t=11:(4===e||e>3)&&(t=7.5),t}(e),s=function(e,t){let n=36;return 1===e?n=36:2===e?n=17:3===e?n=1===t?12:11:(4===e||e>3)&&(n=7.5),n}(e,n),i=function(e,t){return e<=3?36:t*e+2*(e-1)}(e,a),o=`clipPath${e}`,r=function(e,t,n){let a="";if(3===n)a=Gt(0,0,2,t,1)+Gt(0,12,2,t+1,1)+Gt(0,25,2,t,1);else for(let e=0;e\n \n `}(o,a,e),c=function(e,t,n){return 1===n?0:2===n?0===e?0:t+2:3===n?0===e?0:1===e?12:25:(t+2)*e}(n,a,e),l=function(e,t,n,a){return t<=4||e<=1?0:e>=t-2?a-36:(n+4)/2+(e-2)*(n+2)}(n,e,a,i);return{markHeight:s,clipPath:r,markTranslateY:c,trackTranslateY:l,trackHeight:i,clipPathId:o}}(t,n)),[t,n]);if((0,i.d4)((()=>{if(!a.current)return;const{trackHeight:e,trackTranslateY:t,markHeight:n,markTranslateY:i,clipPathId:o,clipPath:r}=s,c=a.current.firstElementChild;if(null!=a&&a.current){const s=a.current,{style:l}=s;l.height=`${e}px`,l.transform=`translateY(-${t}px)`,l.clipPath=`url("#${o}")`;const d=s.querySelector("svg"),u=s.querySelector("div"),m=s.querySelector("defs");d||c&&(c.innerHTML=` ${r} `),m&&(m.innerHTML=r),u&&(u.style.height=`${n}px`,u.style.transform=`translateY(${i}px)`)}}),[s]),1===t)return i.ZP.createElement("div",{className:"pinned-message-border"},i.ZP.createElement("div",{className:"pinned-message-border-wrapper-1",ref:a}));const{trackHeight:o,trackTranslateY:r,markHeight:c,markTranslateY:l,clipPathId:d}=s;return i.ZP.createElement("div",{className:(0,fe.Z)("pinned-message-border",t>4&&"pinned-message-border-mask")},i.ZP.createElement("div",{className:"pinned-message-border-wrapper",ref:a,style:`clip-path: url("#${d}"); width: 2px;\n height: ${o}px; transform: translateY(-${r}px);`},i.ZP.createElement("span",null),i.ZP.createElement("div",{className:"pinned-message-border-mark",style:`height: ${c}px; transform: translateY(${l}px);`})))})),_t=(0,i.X$)((e=>{let{message:t,count:n,index:a,customTitle:s,className:o,onUnpinMessage:r,onClick:c,onAllPinnedClick:l}=e;const u=(0,Fe.Z)(),m=$t(t),h=(0,Ut.Z)((0,d.Ti)(t,"pictogram")),g=(0,jt.e)(u,t,Boolean(m)),[f,p,v]=(0,Oe.Z)(),I=(0,i.I4)((()=>{v(),r&&r(t.id)}),[v,r,t.id]);return i.ZP.createElement("div",{className:(0,fe.Z)("HeaderPinnedMessage-wrapper",o)},n>1&&i.ZP.createElement(ze.Z,{round:!0,size:"smaller",color:"translucent",className:"pin-list-button",ariaLabel:u("EventLogFilterPinnedMessages"),onClick:l},i.ZP.createElement("i",{className:"icon-pin-list"})),r&&i.ZP.createElement(ze.Z,{round:!0,size:"smaller",color:"translucent",ariaLabel:u("UnpinMessageAlertTitle"),className:"unpin-button",onClick:p},i.ZP.createElement("i",{className:"icon-close"})),i.ZP.createElement(Dt.Z,{isOpen:f,onClose:v,text:"Would you like to unpin this message?",confirmLabel:"Unpin",confirmHandler:I}),i.ZP.createElement("div",{className:"HeaderPinnedMessage",onClick:c,dir:u.isRtl?"rtl":void 0},i.ZP.createElement(Ht,{count:n,index:a}),m&&function(e,t){const{width:n,height:a}=(0,Ot.W7)();return i.ZP.createElement("img",{src:t||e,width:n,height:a,alt:""})}(m,h),i.ZP.createElement("div",{className:"message-text"},i.ZP.createElement("div",{className:"title",dir:"auto"},s||`${u("PinnedMessage")} ${a>0?"#"+(n-a):""}`),i.ZP.createElement("p",{dir:"auto"},g)),i.ZP.createElement(qt.Z,null)))}));var zt=n(396),Vt=n(4532),Xt=n(3186);function Kt(e,t){let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"image/png";const a=e instanceof Blob?URL.createObjectURL(e):e,s=new Image;return new Promise((i=>{s.onload=()=>{Wt(s,s.width*t,s.height*t,n).then((e=>{if(!e)throw new Error("Image resize failed!");return URL.createObjectURL(e)})).then(i).finally((()=>{e instanceof Blob&&URL.revokeObjectURL(a)}))},s.src=a}))}async function Wt(e,t,n){let a=arguments.length>3&&void 0!==arguments[3]?arguments[3]:"image/png";if(!("createImageBitmap"in window))return Yt(e,t,n,void 0,a);try{const s=await window.createImageBitmap(e,{resizeWidth:t,resizeHeight:n,resizeQuality:"high"});if(s.height!==n||s.width!==t)throw new Error("Image bitmap resize not supported!");return await new Promise((e=>{const t=document.createElement("canvas");t.width=s.width,t.height=s.height;const n=t.getContext("bitmaprenderer");n?n.transferFromImageBitmap(s):t.getContext("2d").drawImage(s,0,0),t.toBlob(e,a)}))}catch(s){return Yt(e,t,n,void 0,a)}}function Yt(e,t,n){let a=arguments.length>3&&void 0!==arguments[3]?arguments[3]:.5,s=arguments.length>4&&void 0!==arguments[4]?arguments[4]:"image/png";const i=document.createElement("canvas"),o=i.getContext("2d"),r=document.createElement("canvas"),c=r.getContext("2d");if(i.width=t,i.height=n,e.width*a>t){const n=1/a;let s={width:Math.floor(e.width*a),height:Math.floor(e.height*a)};for(r.width=s.width,r.height=s.height,c.drawImage(e,0,0,s.width,s.height);s.width*a>t;)s={width:Math.floor(s.width*a),height:Math.floor(s.height*a)},c.drawImage(r,0,0,s.width*n,s.height*n,0,0,s.width,s.height);o.drawImage(r,0,0,s.width,s.height,0,0,i.width,i.height)}else o.drawImage(e,0,0,i.width,i.height);return new Promise((e=>{i.toBlob(e,s)}))}var Jt=n(4524);const Qt={width:200,height:200},en=115,tn=(e,t,n)=>{const{audio:a,voice:s}=(0,d.qp)(e),o=a?a.title||a.fileName:s?"Voice message":"",r=a&&a.performer||t&&(0,d.OU)(I.i0,t),c=n&&(0,d.U)(I.i0,n)||"Telegram",l=a&&(0,d.MR)(a)&&(0,d.Ti)(e,"pictogram"),u=t&&(0,d.RT)(t,"big"),m=a&&l||s&&u,h=(0,Ut.Z)(m),g=(0,i.Ye)((()=>function(e,t,n){if(!n)return Qt;if(e){if(!e.thumbnailSizes||0===e.thumbnailSizes.length)return;const t=e.thumbnailSizes.find((e=>"m"===e.type));return t||e.thumbnailSizes[0]}return t?Ot.vY:void 0}(a,s,h)),[a,h,s]),{result:f}=((e,t,n)=>{const[a,s]=(0,i.eJ)(!1),[o,r]=(0,i.eJ)(),[c,l]=(0,i.eJ)(n);return(0,i.d4)((()=>{s(!0);let e=!1;return function(e,t){if(!e)return Promise.resolve(Jt);if(!t)return function(e,t,n){let a=arguments.length>3&&void 0!==arguments[3]?arguments[3]:"image/png";const s=e instanceof Blob?URL.createObjectURL(e):e,i=new Image;return new Promise((o=>{i.onload=()=>{Wt(i,t,n,a).then((e=>{if(!e)throw new Error("Image resize failed!");return URL.createObjectURL(e)})).then(o).finally((()=>{e instanceof Blob&&URL.revokeObjectURL(s)}))},i.src=s}))}(e,en,en);const n=Math.min(t.width,t.height);return n{e||(s(!1),l(t))}),(t=>{e||(s(!1),r(t))})),()=>{e=!0}}),t),{isLoading:a,error:o,result:c}})(0,[h,g],Jt);return(0,i.Ye)((()=>(0,Vt.Of)({title:o,artist:r,album:c,artwork:[{src:f}]})),[c,r,o,f])};var nn=n(2340),an=n(8051);const sn=(0,a.c$)(((e,t)=>{let{message:n}=t;const a=(0,c.Ur)(e,n),s=(0,c.Z1)(e,n.chatId),{volume:i,playbackRate:o,isMuted:r}=e.audioPlayer;return{sender:a,chat:s,volume:i,playbackRate:o,isMuted:r}}))((e=>{let{message:t,className:n,noUi:s,sender:o,chat:r,volume:c,playbackRate:l,isMuted:u}=e;const{setAudioPlayerVolume:m,setAudioPlayerPlaybackRate:g,setAudioPlayerMuted:f,focusMessage:p,closeAudioPlayer:v}=(0,a.Sv)(),I=(0,Fe.Z)(),{audio:y,voice:w,video:Z}=(0,d.qp)(t),P=Boolean(w||Z),C=o?(0,d.OU)(I,o):void 0,b=X.UV((0,d.Ti)(t,"inline")),S=tn(t,o,r),{playPause:E,stop:M,isPlaying:R,requestNextTrack:k,requestPreviousTrack:N,isFirst:T,isLast:A,setVolume:B,toggleMuted:x,setPlaybackRate:L}=(0,Xt.Z)((0,zt.An)(t),(0,d.XV)(t),P?"voice":"audio",b,void 0,S,void 0,!0,void 0,void 0,(0,d.CI)(t),!0),O=P&&R;(0,i.d4)((()=>{if(O)return Q.Z.disableRefresh(),()=>{Q.Z.enableRefresh()}}),[O]);const U=(0,i.I4)((()=>{p({chatId:t.chatId,messageId:t.id})}),[p,t.chatId,t.id]),F=(0,i.I4)((()=>{R&&E(),v(),(0,Vt.Ay)(),M()}),[v,R,E,M]),$=(0,i.I4)((e=>{m({volume:e/100}),f({isMuted:!1}),B(e/100)}),[f,m,B]),D=(0,i.I4)((()=>{h.$b&&!h.cj||(x(),f({isMuted:!u}))}),[u,f,x]),q=(0,i.I4)((()=>{1===l?(L(1.8),g({playbackRate:1.8})):(L(1),g({playbackRate:1}))}),[l,g,L]),j=(0,i.Ye)((()=>0===c||u?"icon-muted":c<.3?"icon-volume-1":c<.6?"icon-volume-2":"icon-volume-3"),[c,u]);if(!s)return i.ZP.createElement("div",{className:(0,fe.Z)("AudioPlayer",n),dir:I.isRtl?"rtl":void 0},i.ZP.createElement(ze.Z,{round:!0,ripple:!h.wB,color:"translucent",size:"smaller",className:"player-button",disabled:T(),onClick:N,ariaLabel:"Previous track"},i.ZP.createElement("i",{className:"icon-skip-previous"})),i.ZP.createElement(ze.Z,{round:!0,ripple:!h.wB,color:"translucent",size:"smaller",className:(0,fe.Z)("toggle-play","player-button",R?"pause":"play"),onClick:E,ariaLabel:R?"Pause audio":"Play audio"},i.ZP.createElement("i",{className:"icon-play"}),i.ZP.createElement("i",{className:"icon-pause"})),i.ZP.createElement(ze.Z,{round:!0,ripple:!h.wB,color:"translucent",size:"smaller",className:"player-button",disabled:A(),onClick:k,ariaLabel:"Next track"},i.ZP.createElement("i",{className:"icon-skip-next"})),i.ZP.createElement("div",{className:"AudioPlayer-content",onClick:U},y?function(e){const{title:t,performer:n,fileName:a}=e;return i.ZP.createElement(i.ZP.Fragment,null,i.ZP.createElement("div",{className:"title",dir:"auto"},(0,nn.Z)(t||a)),n&&i.ZP.createElement("div",{className:"subtitle",dir:"auto"},(0,nn.Z)(n)))}(y):function(e,t){return i.ZP.createElement(i.ZP.Fragment,null,i.ZP.createElement("div",{className:"title",dir:"auto"},t&&(0,nn.Z)(t)),i.ZP.createElement("div",{className:"subtitle",dir:"auto"},e))}(I("AttachAudio"),C),i.ZP.createElement(qt.Z,null)),i.ZP.createElement(ze.Z,{round:!0,className:"player-button volume-button",color:"translucent",size:"smaller",ariaLabel:"Volume",withClickPropagation:!0},i.ZP.createElement("i",{className:j,onClick:D}),!h.cj&&i.ZP.createElement(i.ZP.Fragment,null,i.ZP.createElement("div",{className:"volume-slider-spacer"}),i.ZP.createElement("div",{className:"volume-slider"},i.ZP.createElement(an.Z,{bold:!0,value:u?0:100*c,onChange:$})))),P&&i.ZP.createElement(ze.Z,{round:!0,className:(0,fe.Z)("playback-button",1!==l&&"applied"),color:"translucent",size:"smaller",ariaLabel:"Playback Rate",ripple:!h.wB,onClick:q},i.ZP.createElement("span",{className:"playback-button-inner"},"2Х")),i.ZP.createElement(ze.Z,{round:!0,className:"player-close",color:"translucent",size:"smaller",onClick:F,ariaLabel:"Close player"},i.ZP.createElement("i",{className:"icon-close"})))}));var on=n(2431),rn=n(172);const cn=(0,i.X$)((0,a.c$)(((e,t)=>{let{chatId:n}=t;const a=(0,c.Z1)(e,n),s=(0,on.Bj)(e,n);return{groupCall:s,usersById:e.users.byId,chatsById:e.chats.byId,activeGroupCallId:e.groupCalls.activeGroupCallId,isActive:(s?s.participantsCount>0&&s.isLoaded:a&&a.isCallNotEmpty&&a.isCallActive)&&e.groupCalls.activeGroupCallId!==(null==s?void 0:s.id)}}))((e=>{let{chatId:t,isActive:n,groupCall:s,hasPinnedOffset:o,usersById:r,chatsById:c}=e;const{joinGroupCall:l,subscribeToGroupCallUpdates:d}=(0,a.Sv)(),u=(0,Fe.Z)(),m=(0,i.I4)((()=>{l({chatId:t})}),[l,t]),h=null==s?void 0:s.participants,g=(0,i.Ye)((()=>h?Object.values(h).filter(((e,t)=>t<3)).map((e=>{let{id:t,isUser:n}=e;if(n){if(!r[t])return;return{user:r[t]}}if(c[t])return{chat:c[t]}})).filter(Boolean):[]),[c,h,r]);if((0,i.d4)((()=>{if(null!=s&&s.id&&(n||!s.isLoaded))return d({id:s.id,subscribed:!0}),()=>{d({id:s.id,subscribed:!1})}}),[null==s?void 0:s.id,null==s?void 0:s.isLoaded,n,d]),s)return i.ZP.createElement("div",{className:(0,fe.Z)("GroupCallTopPane",o&&"has-pinned-offset",!n&&"is-hidden"),onClick:m},i.ZP.createElement("div",{className:"info"},i.ZP.createElement("span",{className:"title"},u("VoipGroupVoiceChat")),i.ZP.createElement("span",{className:"participants"},u("Participants",s.participantsCount||0,"i"))),i.ZP.createElement("div",{className:"avatars"},g.map((e=>{if(e)return e.user?i.ZP.createElement(rn.Z,{key:e.user.id,user:e.user}):i.ZP.createElement(rn.Z,{key:e.chat.id,chat:e.chat})}))),i.ZP.createElement(ze.Z,{round:!0,className:"join"},u("VoipChatJoin")))})));var ln=n(4605);const dn=(0,i.X$)((0,a.c$)(((e,t)=>{let{chatId:n}=t;return{currentUserId:e.currentUserId,chat:(0,c.Z1)(e,n),user:(0,d.YC)(n)?(0,c.dy)(e,n):void 0}}))((e=>{let{chatId:t,className:n,chat:s,user:o,settings:r,currentUserId:c}=e;const{openAddContactDialog:l,blockContact:u,reportSpam:m,deleteChat:h,leaveChannel:g,deleteChatUser:f,deleteHistory:p,toggleChatArchived:v,hideChatReportPanel:I}=(0,a.Sv)(),y=(0,Fe.Z)(),[w,Z,P]=(0,Oe.Z)(),[C,b]=(0,i.eJ)(!0),[S,E]=(0,i.eJ)(!0),{accessHash:M}=s||{},{isAutoArchived:R,canReportSpam:k,canAddContact:N,canBlockContact:T}=r||{},A=s&&(0,d.G9)(s),B=(0,i.I4)((()=>{l({userId:t}),R&&v({chatId:t})}),[l,R,v,t]),x=(0,i.I4)((()=>{P(),u({contactId:t,accessHash:M}),k&&C&&m({chatId:t}),S&&h({chatId:t})}),[M,u,P,h,m,k,S,C,t]),L=(0,i.I4)((()=>{I({chatId:t})}),[t,I]),O=(0,i.I4)((()=>{P(),m({chatId:t}),A?(f({chatId:t,userId:c}),p({chatId:t,shouldDeleteForAll:!1})):g({chatId:t})}),[t,P,c,f,p,A,g,m]);if(r)return i.ZP.createElement("div",{className:(0,fe.Z)("ChatReportPanel",n),dir:y.isRtl?"rtl":void 0},N&&i.ZP.createElement(ze.Z,{isText:!0,fluid:!0,size:"tiny",className:"UserReportPanel--Button",onClick:B},y("lng_new_contact_add")),T&&i.ZP.createElement(ze.Z,{color:"danger",isText:!0,fluid:!0,size:"tiny",className:"UserReportPanel--Button",onClick:Z},y("lng_new_contact_block")),k&&!T&&i.ZP.createElement(ze.Z,{color:"danger",isText:!0,fluid:!0,size:"tiny",className:"UserReportPanel--Button",onClick:Z},y("lng_report_spam_and_leave")),i.ZP.createElement(ze.Z,{round:!0,ripple:!0,size:"tiny",color:"translucent",onClick:L,ariaLabel:y("Close")},i.ZP.createElement("i",{className:"icon-close"})),i.ZP.createElement(Dt.Z,{isOpen:w,onClose:P,title:y("BlockUserTitle",o?(0,d.Vl)(o):(0,d.U)(y,s)),text:o?y("UserInfo.BlockConfirmationTitle",(0,d.Js)(o)):y("Chat.Confirm.ReportSpam.Channel"),isButtonsInOneRow:!0,confirmIsDestructive:!0,confirmLabel:y("Block"),confirmHandler:o?x:O},o&&i.ZP.createElement(ln.Z,{label:y("DeleteThisChat"),checked:S,onCheck:E}),o&&k&&i.ZP.createElement(ln.Z,{label:y("ReportChat"),checked:C,onCheck:b})))}))),un=(0,i.X$)((0,a.c$)(((e,t)=>{let{chatId:n,threadId:a,messageListType:s}=t;const{isLeftColumnShown:i,lastSyncTime:r,shouldSkipHistoryAnimations:l}=e,d=(0,c.Z1)(e,n),{typingStatus:u}=d||{},{chatId:m,messageId:h}=e.audioPlayer,g=m&&h?(0,c.hj)(e,m,h):void 0;let f;if("pinned"===s){const t=(0,c.KB)(e,n);f=null==t?void 0:t.length}else if("scheduled"===s){const t=(0,c.qy)(e,n);f=null==t?void 0:t.length}else if("thread"===s&&a!==o._f){const t=(0,c.tZ)(e,n,a);f=(null==t?void 0:t.messagesCount)||0}const p={typingStatus:u,isLeftColumnShown:i,isRightColumnShown:(0,c.Jf)(e),isSelectModeActive:(0,c.CA)(e),audioMessage:g,chat:d,messagesCount:f,isChatWithSelf:(0,c.FM)(e,n),isChatWithBot:d&&(0,c.xo)(e,d),lastSyncTime:r,shouldSkipHistoryAnimations:l,currentTransitionKey:Math.max(0,e.messages.messageLists.length-1),connectionState:e.connectionState,isSyncing:e.isSyncing},v=(0,c.Zw)(e,n);if("thread"!==s||!v)return p;if(Object.assign(p,{messagesById:v}),a!==o._f){const t=(0,c.qS)(e,n,a),s=t?(0,c.hj)(e,n,t):void 0,i=s?(0,c.cv)(e,s):void 0;return{...p,pinnedMessageIds:t,canUnpin:!1,topMessageSender:i}}const I=(0,c.KB)(e,n);if(null!=I&&I.length){const t=v[I[0]],{canUnpin:n}=t&&(0,c._k)(e,t,a)||{};return{...p,pinnedMessageIds:I,canUnpin:n}}return p}))((e=>{let{chatId:t,threadId:n,messageListType:r,isReady:c,pinnedMessageIds:l,messagesById:u,canUnpin:m,topMessageSender:g,typingStatus:f,isSelectModeActive:p,isLeftColumnShown:v,isRightColumnShown:I,audioMessage:y,chat:w,messagesCount:Z,isChatWithSelf:P,isChatWithBot:C,lastSyncTime:b,shouldSkipHistoryAnimations:S,currentTransitionKey:E,connectionState:M,isSyncing:R}=e;const{openChatWithInfo:k,pinMessage:N,focusMessage:T,openChat:A,openPreviousChat:B,loadPinnedMessages:x,toggleLeftColumn:L,exitMessageSelectMode:O}=(0,a.Sv)(),U=(0,Fe.Z)(),F=(0,i.sO)(!0),[$,D]=(0,i.eJ)(0),q=Array.isArray(l)?l[$]:l,j=u&&q?u[q]:void 0,G=Array.isArray(l)?l.length:l?1:void 0,H=w&&(0,d.U)(U,w).length,_=g?(0,d.OU)(U,g):void 0,{settings:z}=w||{};(0,i.d4)((()=>{n===o._f&&b&&c&&x({chatId:t})}),[t,x,b,n,c]),(0,i.d4)((()=>{D(0)}),[l]),(0,Nt.Z)(t,q,j);const{width:V}=St(),X=V<=s.ks,K=h.p7&&v,W=(0,i.sO)(null),Y=(0,i.sO)(!0),J=(0,i.I4)((()=>{k({id:t})}),[k,t]),Q=(0,i.I4)((e=>{N({chatId:t,messageId:e,isUnpin:!0})}),[N,t]),ee=(0,i.I4)((()=>{if(j){T({chatId:j.chatId,threadId:n,messageId:j.id});const e=(0,kt.Z)(G||1,$+1);D(e)}}),[j,T,n,G,$]),te=(0,i.I4)((()=>{A({id:t,threadId:o._f,type:"pinned"})}),[A,t]),ne=(0,i.I4)((()=>{setTimeout((()=>{F.current=!0}),450)}),[]),ae=(0,i.I4)((e=>{if(F.current){if(F.current=!1,h.wB){const e=document.getElementById(s.R2);e&&e.blur()}if(p)return O(),void ne();if(n===o._f&&"thread"===r&&0===E)return h.wB||K?(e.stopPropagation(),A({id:void 0})):L(),void ne();B(),ne()}}),[n,r,E,p,B,K,A,L,O,ne]),se=V>=s.ks&&Vs.l3&&V30),ie=se||V>s._m&&V{const e=W.current;if(e)return ie&&Ze?void(I||se?(Y.current&&(e.classList.add("tools-stacked","animated"),Y.current=!1),setTimeout((()=>{e.classList.remove("animated")}),350)):(e.classList.remove("tools-stacked"),Y.current=!0)):(e.classList.remove("tools-stacked","animated"),void(Y.current=!0))}),[ie,Ze,se,I]);const{connectionStatusText:Pe}=Ge(U,M,R,!0);function Ce(){let e=arguments.length>0&&void 0!==arguments[0]&&arguments[0],t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];return i.ZP.createElement("div",{className:"back-button"},i.ZP.createElement(ze.Z,{round:!0,size:"smaller",color:"translucent",onClick:ae,ariaLabel:U(e?"Close":"Back")},i.ZP.createElement("div",{className:(0,fe.Z)("animated-close-icon",!e&&"state-back")})),t&&i.ZP.createElement(Ae,null))}const be=Boolean(de&&me);return i.ZP.createElement("div",{className:"MiddleHeader",ref:W},i.ZP.createElement(Ue.Z,{name:S?"none":"slide-fade",activeKey:E},"thread"===r&&n===o._f?i.ZP.createElement(i.ZP.Fragment,null,(X||E>0)&&Ce(K,!0),i.ZP.createElement("div",{className:"chat-info-wrapper",onClick:J},(0,d.YC)(t)?i.ZP.createElement(At.Z,{userId:t,typingStatus:f,status:Pe,withDots:Boolean(Pe),withFullInfo:C,withMediaViewer:!0,withUpdatingStatus:!0,noRtl:!0}):i.ZP.createElement(Bt.Z,{chatId:t,typingStatus:f,status:Pe,withDots:Boolean(Pe),withMediaViewer:!0,withFullInfo:!0,withUpdatingStatus:!0,noRtl:!0}))):"thread"===r?i.ZP.createElement(i.ZP.Fragment,null,Ce(),i.ZP.createElement("h3",null,U("CommentsCount",Z,"i"))):"pinned"===r?i.ZP.createElement(i.ZP.Fragment,null,Ce(),i.ZP.createElement("h3",null,U("PinnedMessagesCount",Z,"i"))):"scheduled"===r?i.ZP.createElement(i.ZP.Fragment,null,Ce(),i.ZP.createElement("h3",null,P?U("Reminders"):U("messages",Z,"i"))):void 0),i.ZP.createElement(cn,{hasPinnedOffset:he&&Boolean(pe)||de&&Boolean(me),chatId:t}),he&&pe&&i.ZP.createElement(_t,{key:t,message:pe,count:ve||0,index:$,customTitle:we,className:(0,fe.Z)(ge,be&&"full-width"),onUnpinMessage:Ie?Q:void 0,onClick:ee,onAllPinnedClick:te}),re&&i.ZP.createElement(dn,{key:t,chatId:t,settings:le,className:ce}),i.ZP.createElement("div",{className:"header-tools"},be&&i.ZP.createElement(sn,{key:(0,d.Tp)(me),message:me,className:ue}),i.ZP.createElement(Lt,{chatId:t,threadId:n,messageListType:r,canExpandActions:!be})))})));var mn=n(2645),hn=n(274);function gn(e){return"albumId"in e}function fn(e,t){let n,a=[],s={originalDate:e[0].date,datetime:(0,L._F)(1e3*e[0].date),senderGroups:[a]};const i=[s];return e.forEach(((o,r)=>{o.isInAlbum?n?(n.messages.push(o),o.content.text&&(n.mainMessage=o)):n={albumId:o.groupedId,messages:[o],mainMessage:o}:a.push(o);const c=e[r+1];if(!n||c&&c.groupedId&&c.groupedId===n.albumId||(a.push(n),n=void 0),c){const e=(0,L._F)(1e3*c.date);s.datetime!==e?(s={originalDate:c.date,datetime:e,senderGroups:[]},i.push(s),a=[],s.senderGroups.push(a)):(c.id===t||o.senderId!==c.senderId||o.isOutgoing!==c.isOutgoing||(0,d.Lo)(o)||(0,d.Lo)(c)||o.forwardInfo&&c.forwardInfo&&(o.forwardInfo.senderUserId!==c.forwardInfo.senderUserId||o.forwardInfo.fromChatId!==c.forwardInfo.fromChatId||o.forwardInfo.hiddenUserName!==c.forwardInfo.hiddenUserName)||o.inlineButtons||c.inlineButtons||c.date-o.date>600)&&(a=[],s.senderGroups.push(a))}})),i}var pn=n(386),vn=n(2202);var In=n(7675),yn=n(539),wn=n(2357),Zn=n(998);var Pn=n(3657);const Cn=h.wZ?1e3:350,bn=h.wB?300:500;var Sn=n(7240);function En(e){return"number"==typeof e}function Mn(e,t){return e?t?238:175:t?238:100}function Rn(e,t){const n=(0,d.B4)(e),a=(0,d.MF)(e),s=(0,d.O$)(e)||(0,d.F$)(e),i=(0,d.b7)(e),o=Boolean((0,d.F$)(e)),{width:r,height:c}=s?(0,Ot.Eh)(s,n,a,o,t):(0,Ot.GC)(i,n,a,t),l=Mn(Boolean((0,d.UD)(e)));let u=1;re+t),t)}function Nn(e,t,n){return en?n:e}function Tn(e){const t={width:0,height:0};return e.forEach((e=>{let{dimensions:n,sides:a}=e;2&a&&(t.width=n.width+n.x),4&a&&(t.height=n.height+n.y)})),t}function An(e,t,n,a){const s=function(e){return e.map((e=>{const t=Rn(e);return t.width/t.height}))}(a.messages),i=function(e){return e.map((e=>e>1.2?"w":e<.8?"n":"q")).join("")}(s),o=function(e){return e.reduce(((e,t)=>t+e),1)/e.length}(s),r=s.length,c=s.some((e=>e>2)),l=(0,Ot.kc)(e,t,!1,n)-(t?2.5:0)*Ot.Gw;let d;const u={ratios:s,proportions:i,averageRatio:o,maxWidth:l,minWidth:100,maxHeight:l,spacing:2};return d=r>=5||c?function(e){let{ratios:t,averageRatio:n,maxWidth:a,minWidth:s,spacing:i,maxHeight:o=4*a/3}=e;const r=function(e,t){return e.map((e=>t>1.1?Nn(e,1,2.75):Nn(e,.6667,1)))}(t,n),c=t.length,l=new Array(c),d=[],u=e=>{const t=[];let n=0;e.forEach((e=>{t.push(((e,t)=>{const n=kn(r.slice(e,e+t),0);return(a-(t-1)*i)/n})(n,e)),n+=e})),d.push({lineCounts:e,heights:t})};for(let e=1;e!==c;++e){const t=c-e;e<=3&&t<=3&&u([e,t])}for(let e=1;e!==c-1;++e)for(let t=1;t!==c-e;++t){const a=c-e-t;e<=3&&t<=(n<.85?4:3)&&a<=3&&u([e,t,a])}for(let e=1;e!==c-1;++e)for(let t=1;t!==c-e;++t)for(let n=1;n!==c-e-t;++n){const a=c-e-t-n;e<=3&&t<=3&&n<=3&&a<=4&&u([e,t,n,a])}let m,h=0;for(let e=0;e{for(let e=1;e!==a;++e)if(n[e-1]>n[e])return 1.5;return 1})(),u=Math.abs(r-o)*c*l;(!m||u1.4&&t[1]-t[0]<.2?function(e){const{ratios:t,maxWidth:n,spacing:a,maxHeight:s}=e,i=Math.round(Math.min(n/t[0],Math.min(n/t[1],(s-a)/2)));return[{dimensions:{x:0,y:0,width:n,height:i},sides:11},{dimensions:{x:0,y:i+a,width:n,height:i},sides:14}]}(e):"ww"===n||"qq"===n?function(e){const{ratios:t,maxWidth:n,spacing:a,maxHeight:s}=e,i=(n-a)/2,o=Math.round(Math.min(i/t[0],Math.min(i/t[1],s)));return[{dimensions:{x:0,y:0,width:i,height:o},sides:13},{dimensions:{x:i+a,y:0,width:i,height:o},sides:7}]}(e):function(e){const{ratios:t,minWidth:n,maxWidth:a,spacing:s,maxHeight:i}=e,o=Math.round(1.5*n),r=Math.min(Math.round(Math.max(.4*(a-s),(a-s)/t[0]/(1/t[0]+1/t[1]))),a-s-o),c=a-r-s,l=Math.min(i,Math.round(Math.min(c/t[0],r/t[1])));return[{dimensions:{x:0,y:0,width:c,height:l},sides:13},{dimensions:{x:c+s,y:0,width:r,height:l},sides:7}]}(e)}(u):3===r?function(e){const{proportions:t}=e;return"n"===t[0]?function(e){const{maxHeight:t,spacing:n,ratios:a,maxWidth:s,minWidth:i}=e,o=t,r=Math.round(Math.min((t-n)/2,a[1]*(s-n)/(a[2]+a[1]))),c=o-r-n,l=Math.max(i,Math.round(Math.min((s-n)/2,Math.min(r*a[2],c*a[1])))),d=Math.min(Math.round(o*a[0]),s-n-l);return[{dimensions:{x:0,y:0,width:d,height:o},sides:13},{dimensions:{x:d+n,y:0,width:l,height:c},sides:3},{dimensions:{x:d+n,y:c+n,width:l,height:r},sides:6}]}(e):function(e){const{maxWidth:t,ratios:n,maxHeight:a,spacing:s}=e,i=t,o=Math.round(Math.min(i/n[0],.66*(a-s))),r=(t-s)/2,c=Math.min(a-o-s,Math.round(Math.min(r/n[1],r/n[2])));return[{dimensions:{x:0,y:0,width:i,height:o},sides:11},{dimensions:{x:0,y:o+s,width:r,height:c},sides:12},{dimensions:{x:r+s,y:o+s,width:i-r-s,height:c},sides:6}]}(e)}(u):function(e){const{proportions:t}=e;return"w"===t[0]?function(e){let{maxWidth:t,ratios:n,spacing:a,maxHeight:s,minWidth:i}=e;const o=t,r=Math.round(Math.min(o/n[0],.66*(s-a))),c=Math.round((t-2*a)/(n[1]+n[2]+n[3])),l=Math.max(i,Math.round(Math.min(.4*(t-2*a),c*n[1]))),d=Math.round(Math.max(Math.max(i,.33*(t-2*a)),c*n[3])),u=o-l-d-2*a,m=Math.min(s-r-a,c);return[{dimensions:{x:0,y:0,width:o,height:r},sides:11},{dimensions:{x:0,y:r+a,width:l,height:m},sides:12},{dimensions:{x:l+a,y:r+a,width:u,height:m},sides:4},{dimensions:{x:l+a+u+a,y:r+a,width:d,height:m},sides:6}]}(e):function(e){let{maxHeight:t,ratios:n,maxWidth:a,spacing:s,minWidth:i}=e;const o=t,r=Math.round(Math.min(o*n[0],.6*(a-s))),c=Math.round((t-2*s)/(1/n[1]+1/n[2]+1/n[3])),l=Math.round(c/n[1]),d=Math.round(c/n[2]),u=o-l-d-2*s,m=Math.max(i,Math.min(a-r-s,c));return[{dimensions:{x:0,y:0,width:r,height:o},sides:13},{dimensions:{x:r+s,y:0,width:m,height:l},sides:3},{dimensions:{x:r+s,y:l+s,width:m,height:d},sides:2},{dimensions:{x:r+s,y:l+d+2*s,width:m,height:u},sides:6}]}(e)}(u),{layout:d,containerStyle:Tn(d)}}let Bn;function xn(e){return Bn||(Bn=document.createElement("span"),Bn.style.font=h.cj?'400 12px system-ui, -apple-system, BlinkMacSystemFont, "Roboto", "Apple Color Emoji", "Helvetica Neue", sans-serif':'400 12px "Roboto", -apple-system, "Apple Color Emoji", BlinkMacSystemFont, "Helvetica Neue", sans-serif',Bn.style.whiteSpace="nowrap",Bn.style.position="absolute",Bn.style.left="-999px",Bn.style.opacity=".01",document.body.appendChild(Bn)),Bn.innerHTML=e,Bn.offsetWidth}function Ln(e,t,n,a,s,o){(0,i.bt)((()=>{if(n&&e.current){const t=e.current.closest(".MessageList");(0,yn.Z)(t,e.current,s?"end":"centerOrTop",20,void 0!==a?1e3:void 0,a,void 0,o)}}),[e,t,n,a,s,o])}const On=3*Ot.Gw,Un=Number(Ot.Gw),Fn="data-is-document-group-hover";function $n(e,t,n,s,o,r,c,l,d,u,m,g,f,p){const{setReplyingToId:v,sendDefaultReaction:I}=(0,a.Sv)(),[y,w,Z]=(0,Oe.Z)(),[P,C,b]=(0,Oe.Z)(),S=(0,i.sO)();return(0,i.d4)((()=>{if(!h.$b||o||!r||m)return;let e;return(0,tt.sf)(t.current,{selectorToPreventScroll:".MessageList",onSwipe:(t,n)=>n===tt.eM.Left&&(e||(e=Date.now()),C(),!0),onRelease:()=>{e&&(v({messageId:n}),setTimeout(b,Math.max(0,150-(Date.now()-e))),e=void 0)}})}),[t,o,n,v,C,b,r,m]),{handleMouseDown:o?void 0:function(e){(0,pn.q)(e),d(e)},handleClick:function(t){if(o)e(t);else if(h.$b)return S.current?(clearInterval(S.current),S.current=void 0,void function(e){const{pageX:t,pageY:a}=e;I({chatId:u,messageId:n,x:t,y:a})}(t)):void(S.current=setTimeout((()=>{S.current=void 0,function(e){if(h.wZ){const t=e.target;if(!t.classList.contains("text-content")&&!t.classList.contains("Message"))return;Q.Z.getIsKeyboardVisible()?setTimeout((()=>{l(e)}),350):l(e)}}(t)}),200))},handleContextMenu:o?c?Ie.Z:void 0:function(t){if(h.wZ){if(t.target.matches("a[href]")||m)return;t.preventDefault(),e()}else l(t)},handleDoubleClick:o?void 0:function(){h.$b||v({messageId:n})},handleContentDoubleClick:h.$b?void 0:function(e){e.stopPropagation()},handleMouseMove:function(e){const t=g.current;if(!t)return;const{clientX:n,clientY:a}=e,{x:s,width:i,y:o,height:r}=t.getBoundingClientRect(),c=Math.abs(f?n-s:s+i-n){const{isOpen:t}=e,n=(0,ot.Z)(it.gl.Extra,"ContextMenuContainer",!t);return n?i.ZP.createElement(n,e):void 0})),Hn=(0,i.X$)((0,a.c$)(((e,t)=>{let{message:n}=t;const{byId:a}=e.users,s=n.senderId,{targetUserIds:i,targetChatId:o}=n.content.action||{},r=n.replyToMessageId,l=r?(0,c.hj)(e,n.chatId,r):void 0,u=(0,c._X)(e,n),{direction:m,noHighlight:h}=u&&e.focusedMessage||{},g=(0,c.Z1)(e,n.chatId),f=g&&((0,d.eA)(g)||s===n.chatId);return{usersById:a,senderUser:!f&&s?(0,c.dy)(e,s):void 0,senderChat:f?g:void 0,targetChatId:o,targetUserIds:i,targetMessage:l,isFocused:u,...u&&{focusDirection:m,noFocusHighlight:h}}}))((e=>{let{message:t,observeIntersection:n,isEmbedded:a,appearanceOrder:s=0,isLastInList:o,usersById:r,senderUser:c,senderChat:l,targetUserIds:u,targetMessage:m,targetChatId:h,isFocused:g,focusDirection:f,noFocusHighlight:p}=e;const v=(0,i.sO)(null);(0,Pn._N)(v,n),(0,Nt.Z)(t.chatId,t.replyToMessageId,m),Ln(v,t.chatId,g,f,p);const I=(0,Fe.Z)(),y=s<=0,[w,Z]=(0,Oe.Z)(y);(0,i.d4)((()=>{y||setTimeout(Z,10*s)}),[s,Z,y]);const{transitionClassNames:P}=(0,ye.Z)(w,void 0,y,!1),C=(0,i.Ye)((()=>u?u.map((e=>null==r?void 0:r[e])).filter(Boolean):void 0),[u,r]),b=(0,jn.D)(I,t,c,l,C,m,h,{asTextWithSpoilers:a}),{isContextMenuOpen:S,contextMenuPosition:E,handleBeforeContextMenu:M,handleContextMenu:R,handleContextMenuClose:k,handleContextMenuHide:N}=(0,Sn.Z)(v),T=void 0!==E;if(a)return i.ZP.createElement("span",{className:"embedded-action-message"},b);const A=(0,fe.Z)("ActionMessage message-list-item",g&&!p&&"focused",T&&"has-menu-open",o&&"last-in-list",P);return i.ZP.createElement("div",{ref:v,id:(0,d.d0)(t.id),className:A,"data-message-id":t.id,onMouseDown:e=>{(0,pn.q)(e),M(e)},onContextMenu:R},i.ZP.createElement("span",null,b),E&&i.ZP.createElement(Gn,{isOpen:S,anchor:E,message:t,messageListType:"thread",onClose:k,onCloseAnimationEnd:N}))}))),_n=e=>{var t;let{className:n,message:a,sender:s,title:o,customText:r,isProtected:c,observeIntersection:l,onClick:u}=e;const m=(0,i.sO)(null),h=(0,Pn.Op)(m,l),g=(0,Ut.Z)(a&&(0,d.Ti)(a,"pictogram"),!h),f=$t(a),p=Boolean(a&&(0,d.Y5)(a)),v=(0,Fe.Z)(),I=(null==a||null===(t=a.forwardInfo)||void 0===t?void 0:t.hiddenUserName)||s&&(0,d.OU)(v,s);return i.ZP.createElement("div",{ref:m,className:(0,fe.Z)("EmbeddedMessage",n),onClick:a?u:void 0},f&&function(e,t,n,a){const{width:s,height:o}=(0,Ot.W7)();return i.ZP.createElement(i.ZP.Fragment,null,i.ZP.createElement("img",{src:t||e,width:s,height:o,alt:"",className:n?"round":"",draggable:!a}),a&&i.ZP.createElement("span",{className:"protector"}))}(f,g,p,c),i.ZP.createElement("div",{className:"message-text"},i.ZP.createElement("p",{dir:"auto"},a?(0,d.Lo)(a)?i.ZP.createElement(Hn,{message:a,isEmbedded:!0}):(0,jt.e)(v,a,Boolean(f)):r||" "),i.ZP.createElement("div",{className:"message-title",dir:"auto"},(0,nn.Z)(I||o||" "))))};var zn=n(2535),Vn=n(4752),Xn=n(8018),Kn=n(8198),Wn=n(7799);const Yn=(0,i.X$)((e=>{var t,n;let{reaction:s,activeReaction:r,isInMeta:c,availableReactions:l}=e;const{stopActiveReaction:d}=(0,a.Sv)(),u=null==l?void 0:l.find((e=>e.reaction===s)),m=null==u||null===(t=u.centerIcon)||void 0===t?void 0:t.id,h=null==u||null===(n=u.aroundAnimation)||void 0===n?void 0:n.id,g=(0,Ut.Z)(`sticker${m}`,!m,o.IU.Lottie),f=(0,Ut.Z)(`sticker${h}`,!h,o.IU.Lottie),p=Boolean((null==r?void 0:r.reaction)===s&&g&&f),{shouldRender:v,transitionClassNames:I}=(0,ye.Z)(p,void 0,!0,"slow"),y=(0,i.I4)((()=>{d({messageId:null==r?void 0:r.messageId,reaction:s})}),[null==r?void 0:r.messageId,s,d]),[w,Z,P]=(0,Oe.Z)(),C=!p||!w,b=(0,fe.Z)("ReactionAnimatedEmoji",c&&"in-meta",v&&"is-animating");return i.ZP.createElement("div",{className:b},C&&i.ZP.createElement(Kn.Z,{reaction:s}),v&&i.ZP.createElement(i.ZP.Fragment,null,i.ZP.createElement(Wn.Z,{key:m,id:`reaction_emoji_${m}`,className:I,size:30,animationData:g,play:!0,noLoop:!0,forceOnHeavyAnimation:!0,onLoad:Z,onEnded:P}),i.ZP.createElement(Wn.Z,{key:h,id:`reaction_effect_${h}`,className:(0,fe.Z)("effect",I),size:100,animationData:f,play:!0,noLoop:!0,forceOnHeavyAnimation:!0,onEnded:y})))})),Jn=(0,i.X$)((e=>{var t;let{message:n,outgoingStatus:a,signature:s,onClick:o,withReactions:r,activeReaction:c,withReactionOffset:l,availableReactions:d,reactionMessage:u}=e;const m=(0,Fe.Z)(),[h,g]=(0,Oe.Z)(),f=r&&(null==u||null===(t=u.reactions)||void 0===t?void 0:t.results.filter((e=>e.count>0))),p=(0,i.Ye)((()=>{if(!h)return;const e=(0,L.SA)(1e3*n.date,m.code),t=n.isEdited&&(0,L.SA)(1e3*n.editDate,m.code),a=n.forwardInfo&&(0,L.SA)(1e3*n.forwardInfo.date,m.code);let s=e;return t&&(s+="\n",s+=m("lng_edited_date").replace("{date}",t)),a&&(s+="\n",s+=m("lng_forwarded_date").replace("{date}",a)),s}),[h,m,n]);return i.ZP.createElement("span",{className:(0,fe.Z)("MessageMeta",l&&"reactions-offset"),dir:m.isRtl?"rtl":"ltr",onClick:o},f&&f.map((e=>i.ZP.createElement(Yn,{activeReaction:c,reaction:e.reaction,isInMeta:!0,availableReactions:d}))),Boolean(n.views)&&i.ZP.createElement(i.ZP.Fragment,null,i.ZP.createElement("span",{className:"message-views"},(0,ke.bi)(n.views)),i.ZP.createElement("i",{className:"icon-channelviews"})),s&&i.ZP.createElement("span",{className:"message-signature"},(0,nn.Z)(s)),i.ZP.createElement("span",{className:"message-time",title:p,onMouseEnter:g},n.isEdited&&`${m("EditedMessage")} `,(0,L.mr)(m,1e3*n.date)),a&&i.ZP.createElement(Xn.Z,{status:a}))}));var Qn=n(692),ea=n(4753);const ta=e=>{let{message:t,observeIntersection:n,observeIntersectionForPlaying:a,shouldLoop:o,lastSyncTime:r}=e;const c=(0,i.sO)(null),[l,u,m]=(0,Oe.Z)(),g=t.content.sticker,{isLottie:f,stickerSetId:p,isVideo:v}=g,I=h.Hh,y=p===s.$E,w=(0,Pn.Op)(c,n),Z=(0,Pn.Op)(c,a),P=g.isPreloadedGlobally?`sticker${g.id}`:(0,d.Ti)(t,"inline"),C=v&&!I&&(g.isPreloadedGlobally?`sticker${g.id}?size=m`:(0,d.Ti)(t,"pictogram")),b=(0,Ut.Z)(C),S=$t(t),E=b||S,M=(0,Ut.Z)(P,!w,(0,d.kG)(t,"inline"),r),R=Boolean(M),[k,N]=(0,Oe.Z)(R),T=f?k:R,A=(0,Qn.Z)(T),{width:B,height:x}=(0,Ot.Wr)(g),L=(0,fe.Z)("thumbnail",!S&&"empty"),O=(0,fe.Z)("Sticker media-inner",y&&"inactive");return(0,i.d4)((()=>{if(!v||!c.current)return;const e=c.current.querySelector("video");e&&(Z?(0,ea.Z)(e):e.pause())}),[v,Z]),i.ZP.createElement("div",{ref:c,className:O,onClick:y?void 0:u},(!T||v&&!I)&&i.ZP.createElement("img",{src:E,width:B,height:x,alt:"",className:L}),!f&&!v&&i.ZP.createElement("img",{src:M,width:B,height:x,alt:"",className:(0,fe.Z)("full-media",A)}),v&&I&&T&&i.ZP.createElement("video",{src:M,width:B,height:x,autoPlay:Z,playsInline:!0,loop:o,muted:!0}),f&&R&&i.ZP.createElement(Wn.Z,{key:P,className:(0,fe.Z)("full-media",A),id:P,animationData:M,size:B,play:Z,noLoop:!o,onLoad:N}),i.ZP.createElement(Re.Z,{isOpen:l,fromSticker:g,onClose:m}))};var na=n(7854),aa=n(2566),sa=n(5866);function ia(e,t){return(0,sa.Z)((0,d.DH)(e),Boolean(t),h.wB&&!h.vX)}const oa={dark:{outgoing:"rgb(135,116,225)",incoming:"rgb(33,33,33)"},light:{outgoing:"rgb(238,255,222)",incoming:"rgb(255,255,255)"}};function ra(e,t,n,a,s){return a?Promise.resolve(oa[s||"light"][t?"outgoing":"incoming"]):async function(e,t){const n=new Image;n.src=e,n.width||await new Promise((e=>{n.onload=e}));const a=document.createElement("canvas"),s=a.getContext("2d");a.width=n.width,a.height=n.height,s.drawImage(n,0,0,n.width,n.height);const i=t?n.width-1:0,o=n.height-1;return`rgba(${Array.from(s.getImageData(i,o,1,1).data).join(",")})`}(e,t)}var ca=n(9196);const la=e=>{let{id:t,message:n,observeIntersection:a,noAvatars:o,canAutoLoad:r,isInSelectMode:c,isSelected:l,uploadProgress:u,size:m="inline",dimensions:h,nonInteractive:g,shouldAffectAppendix:f,isDownloading:p,isProtected:v,theme:I,onClick:y,onCancelUpload:w}=e;const Z=(0,i.sO)(null),P=((0,d.O$)(n)||(0,d.F$)(n)).blobUrl,C=(0,Pn.Op)(Z,a),[b,S]=(0,i.eJ)(r),E=b&&C,{mediaData:M,loadProgress:R}=(0,aa.Z)((0,d.Ti)(n,m),!E),k=P||M,N=ia(n,k),{loadProgress:T}=(0,aa.Z)((0,d.Ti)(n,"download"),!p),{isUploading:A,isTransferring:B,transferProgress:x}=(0,d.Sc)(n,u||(p?T:R),E&&!k),L=!1===(0,Mt.Z)(b),O=(0,Qn.Z)(k),{shouldRender:U,transitionClassNames:F}=(0,ye.Z)(B,void 0,L,"slow"),{shouldRender:$,transitionClassNames:D}=(0,ye.Z)(!k&&!b),q=(0,i.I4)((()=>{A?w&&w(n):k?y&&y(n.id):S((e=>!e))}),[k,A,n,w,y]),j=(0,d.B4)(n);(0,i.bt)((()=>{if(!f)return;const e=Z.current.closest(".message-content");k?ra(k,j,0,l,I).then((t=>{e.style.setProperty("--appendix-bg",t),e.setAttribute(s.s2,"")})):e.classList.add("has-appendix-thumb")}),[k,j,f,c,l,I]);const{width:G,height:H,isSmall:_}=h||Rn(n,o),z=(0,fe.Z)("media-inner",!A&&!g&&"interactive",_&&"small-image",G===H&&"square-image"),V=h?`width: ${G}px; height: ${H}px; left: ${h.x}px; top: ${h.y}px;`:"";return i.ZP.createElement("div",{id:t,ref:Z,className:z,style:V,onClick:A?void 0:q},i.ZP.createElement("canvas",{ref:N,className:"thumbnail",style:`width: ${G}px; height: ${H}px`}),i.ZP.createElement("img",{src:k,className:`full-media ${O}`,width:G,height:H,alt:"",draggable:!v}),v&&i.ZP.createElement("span",{className:"protector"}),U&&!$&&i.ZP.createElement("div",{className:`media-loading ${F}`},i.ZP.createElement(ca.Z,{progress:x,onClick:A?q:void 0})),$&&i.ZP.createElement("i",{className:(0,fe.Z)("icon-download",D)}),B&&i.ZP.createElement("span",{className:"message-transfer-progress"},Math.round(100*x),"%"))};var da=n(2019),ua=n(6898);function ma(e,t){var n;const a=(0,i.sO)(null===(n=e.current)||void 0===n?void 0:n.paused),s=(0,i.sO)();s.current=t;const o=(0,i.I4)((()=>{e.current&&(a.current=!e.current.paused,a.current&&e.current.pause())}),[e]),r=(0,i.I4)((()=>{e.current&&a.current&&s.current&&document.body.contains(e.current)&&(0,ea.Z)(e.current)}),[e]),c=(0,i.I4)((()=>{(0,E.T2)(r)}),[r]);(0,we.Z)(o,c),(0,ge.ZP)(o,r)}function ha(){return ha=Object.assign||function(e){for(var t=1;t{var t;let{id:n,message:s,observeIntersection:r,noAvatars:c,canAutoLoad:l,canAutoPlay:u,uploadProgress:m,lastSyncTime:h,dimensions:g,onClick:f,onCancelUpload:p,isDownloading:v,isProtected:I}=e;const y=(0,i.sO)(null),w=(0,i.sO)(null),Z=(0,d.b7)(s)||(0,d.Cg)(s),P=Z.blobUrl,C=(0,Pn.Op)(y,r),[b,S]=(0,i.eJ)(l),E=Boolean(b&&C&&h),[M,R]=(0,i.eJ)(u),k=(0,Ut.Z)((0,d.Ti)(s,"pictogram"),!(C&&h),(0,d.kG)(s,"pictogram"),h),N=(0,Qn.Z)(k),{mediaData:T,loadProgress:A}=(0,aa.Z)((0,d.Ti)(s,"inline"),!E,(0,d.kG)(s,"inline"),h),B=P||T,x=Boolean(C&&B),O=ia(s,k),{loadProgress:U}=(0,aa.Z)((0,d.Ti)(s,"download"),!v,o.IU.BlobUrl,h),{isBuffered:F,bufferingHandlers:$}=(0,da.Z)(!l),{isUploading:D,isTransferring:q,transferProgress:j}=(0,d.Sc)(s,m||(v?U:A),E&&!F||v),G=!1===(0,Mt.Z)(b),{shouldRender:H,transitionClassNames:_}=(0,ye.Z)(q,void 0,G),{shouldRender:z,transitionClassNames:V}=(0,ye.Z)(b&&!M&&!H),[X,K]=(0,i.eJ)(0),W=(0,i.I4)((e=>{K(Math.max(0,e.currentTarget.currentTime-1))}),[]),Y=(null===(t=w.current)||void 0===t?void 0:t.duration)||Z.duration||0,J=(0,d.B4)(s),Q=(0,d.MF)(s),{width:ee,height:te}=g||(0,Ot.GC)(Z,J,Q,c);ma(w,x),(0,ua.Z)(w,[x]);const ne=(0,i.I4)((()=>{D?p&&p(s):v?(0,a.Sv)().cancelMessageMediaDownload({message:s}):B?B&&!M?(R(!0),w.current.play()):f&&f(s.id):S((e=>!e))}),[D,v,B,M,f,p,s]),ae=(0,fe.Z)("media-inner dark",!D&&"interactive"),se=g?`width: ${ee}px; height: ${te}px; left: ${g.x}px; top: ${g.y}px;`:"";return i.ZP.createElement("div",{ref:y,id:n,className:ae,style:se,onClick:D?void 0:ne},i.ZP.createElement("canvas",{ref:O,className:"thumbnail",style:`width: ${ee}px; height: ${te}px;`}),i.ZP.createElement("img",{src:k,className:(0,fe.Z)("thumbnail",N),style:`width: ${ee}px; height: ${te}px;`,alt:"",draggable:!I}),x&&i.ZP.createElement("video",ha({ref:w,className:"full-media",width:ee,height:te,autoPlay:M,muted:!0,loop:!0,playsInline:!0},$,{draggable:!I,onTimeUpdate:W}),i.ZP.createElement("source",{src:B})),I&&i.ZP.createElement("span",{className:"protector"}),z&&i.ZP.createElement("i",{className:(0,fe.Z)("icon-large-play",V)}),H&&i.ZP.createElement("div",{className:(0,fe.Z)("media-loading",_)},i.ZP.createElement(ca.Z,{progress:j,onClick:ne})),!b&&i.ZP.createElement("i",{className:"icon-download"}),q?i.ZP.createElement("span",{className:"message-transfer-progress"},D||v?`${Math.round(100*j)}%`:"..."):i.ZP.createElement("div",{className:"message-media-duration"},Z.isGif?"GIF":(0,L.k9)(Math.max(Y-X,0))))};var fa=n(6272);const pa=(0,a.c$)(((e,t)=>{let{contact:n}=t;const{countryList:{phoneCodes:a}}=e;return{user:(0,c.dy)(e,n.userId),phoneCodeList:a}}))((e=>{let{contact:t,user:n,phoneCodeList:s}=e;const{openChat:o}=(0,a.Sv)(),{firstName:r,lastName:c,phoneNumber:l,userId:d}=t,u=(0,i.I4)((()=>{o({id:d})}),[o,d]);return i.ZP.createElement("div",{className:(0,fe.Z)("Contact",Boolean(d)&&"interactive"),onClick:d?u:void 0},i.ZP.createElement(rn.Z,{size:"large",user:n,text:r||c}),i.ZP.createElement("div",{className:"contact-info"},i.ZP.createElement("div",{className:"contact-name"},r," ",c),i.ZP.createElement("div",{className:"contact-phone"},(0,fa.WZ)(s,l))))}));var va=n(8974),Ia=n(1218),ya=n(4434),wa=n(6937);function Za(e,t){return t>0?(e/t*100).toFixed():0}const Pa=e=>{let{answer:t,voteResults:n,totalVoters:a,maxVotersCount:s,correctResults:o,shouldAnimate:r}=e;const c=n&&n.find((e=>e.option===t.option)),l=0===o.length||-1!==o.indexOf(t.option),d=o.length>0&&l||(null==c?void 0:c.isChosen),u=c?Za(c.votersCount,a||0):0,[m,h]=(0,i.eJ)(r?0:u),g=(0,i.sO)(null),f=c?Za(c.votersCount,s||0):0,p=m{r&&h(u)}),[r,u]),(0,i.d4)((()=>{const e=g.current;if(e&&r){const t=e.firstElementChild,n=p?"":"stroke-dasharray: 100% 200%; stroke-dashoffset: -44";t?t.setAttribute("style",n):e.innerHTML=`\n \n \n `}}),[p,r]),!n||!c)return;const v=`width: ${f}%; transform:scaleX(${p?0:1})`;return i.ZP.createElement("div",{className:"PollOption",dir:"ltr"},i.ZP.createElement("div",{className:"poll-option-share "+("100"===u?"limit-width":"")},u,"%",d&&i.ZP.createElement("span",{className:(0,fe.Z)("poll-option-chosen",!l&&"wrong",r&&"animate")},i.ZP.createElement("i",{className:l?"icon-check":"icon-close"}))),i.ZP.createElement("div",{className:"poll-option-right"},i.ZP.createElement("div",{className:"poll-option-text",dir:"auto"},(0,nn.Z)(t.text)),i.ZP.createElement("div",{className:(0,fe.Z)("poll-option-answer",d&&!l&&"wrong")},i.ZP.createElement("div",{className:"poll-option-corner",ref:g}),i.ZP.createElement("div",{className:"poll-option-line",style:v}))))},Ca=(0,i.X$)((0,a.c$)(((e,t)=>{let{poll:n}=t;const{recentVoterIds:a}=n.results,{serverTimeOffset:s,users:{byId:i}}=e;return a&&0!==a.length?{recentVoterIds:a,usersById:i,serverTimeOffset:s}:{}}))((e=>{let{message:t,poll:n,recentVoterIds:s,usersById:o,onSendVote:r,serverTimeOffset:c}=e;const{loadMessage:l,openPollResults:d}=(0,a.Sv)(),{id:u,chatId:m}=t,{summary:h,results:g}=n,[f,p]=(0,i.eJ)(!1),[v,I]=(0,i.eJ)([]),[y,w]=(0,i.eJ)(!1),[Z,P]=(0,i.eJ)(!1),[C,b]=(0,i.eJ)(!h.closed&&h.closeDate&&h.closeDate>0?Math.min(h.closeDate-Math.floor(Date.now()/1e3)+c,h.closePeriod):0),S=(0,i.sO)(null),{results:E,totalVoters:M}=g,R=E&&E.some((e=>e.isChosen)),k=!h.closed&&!R,N=!k&&h.isPublic&&Number(g.totalVoters)>0,T=k&&h.multipleChoice,A=E?Math.max(...E.map((e=>e.votersCount))):M,B=E?E.reduce(((e,t)=>(t.isCorrect&&e.push(t.option),e)),[]):[],x=h.answers.map((e=>({label:e.text,value:e.option,hidden:Boolean(h.quiz&&h.closePeriod&&C<=0)})));(0,i.d4)((()=>{f&&n.results.results&&n.results.results.some((e=>e.isChosen))&&p(!1)}),[f,n.results.results]),(0,i.d4)((()=>{C>0&&setTimeout((()=>b(C-1)),1e3);const e=S.current;if(e){const t=12*Math.PI,n=e.lastElementChild,a=e.firstElementChild;if(C<=5&&e.classList.add("hurry-up"),n&&a){const e=(h.closePeriod-C)/h.closePeriod*t;a.textContent=(0,L.k9)(C),n.firstElementChild.setAttribute("stroke-dashoffset",`-${e}`)}else e.innerHTML=`\n ${(0,L.k9)(C)}\n \n \n `}}),[C,h.closePeriod]),(0,i.d4)((()=>{h.quiz&&(C<=0||R&&!h.closed)&&l({chatId:m,messageId:u})}),[m,C,R,l,u,h.closed,h.quiz]),(0,i.d4)((()=>{let e;return h.quiz&&!h.closed&&h.closePeriod&&h.closePeriod>0&&(e=window.setTimeout((()=>{l({chatId:m,messageId:u})}),1e3*h.closePeriod)),()=>{e&&window.clearTimeout(e)}}),[k,m,l,u,h.closePeriod,h.closed,h.quiz]);const O=(0,i.Ye)((()=>s?s.reduce(((e,t)=>{const n=o[t];return n&&e.push(n),e}),[]):[]),[o,s]),U=(0,i.I4)((e=>{I([e]),p(!0),P(!0),r([e])}),[r]),F=(0,i.I4)((e=>{I(e)}),[]),$=(0,i.I4)((()=>{p(!0),P(!0),r(v)}),[r,v]),D=(0,i.I4)((()=>{d({chatId:m,messageId:u})}),[m,u,d]),q=(0,i.I4)((()=>{w(!0)}),[]),j=(0,i.I4)((()=>{w(!1),P(!1)}),[]);(0,i.d4)((()=>{Z&&R&&h.quiz&&g.results&&n.results.solution&&(g.results.find((e=>e.isChosen&&e.isCorrect))||w(!0))}),[R,Z,g.results,h.quiz,n.results.solution]);const G=(0,Fe.Z)();return i.ZP.createElement("div",{className:"Poll",dir:G.isRtl?"auto":"ltr"},y&&n.results.solution&&i.ZP.createElement(wa.Z,{message:(0,va.H)(n.results.solution,n.results.solutionEntities),duration:5e3,onDismiss:j,containerId:"#middle-column-portals"}),i.ZP.createElement("div",{className:"poll-question"},(0,nn.Z)(h.question,["emoji","br"])),i.ZP.createElement("div",{className:"poll-type"},G(function(e){return void 0===e.isPublic?" ":e.quiz?e.isPublic?"QuizPoll":"AnonymousQuizPoll":e.closed?"FinalResults":e.isPublic?"PublicPoll":"AnonymousPoll"}(h)),O.length>0&&i.ZP.createElement("div",{className:"poll-recent-voters"},O.map((e=>i.ZP.createElement(rn.Z,{size:"micro",user:e})))),C>0&&k&&i.ZP.createElement("div",{ref:S,className:"poll-countdown"}),h.quiz&&n.results.solution&&!k&&i.ZP.createElement(ze.Z,{round:!0,size:"tiny",color:"translucent",className:"poll-quiz-help",disabled:y,onClick:q,ariaLabel:"Show Solution"},i.ZP.createElement("i",{className:"icon-lamp"}))),k&&i.ZP.createElement("div",{className:"poll-answers"},T?i.ZP.createElement(Ia.Z,{options:x,onChange:F,disabled:t.isScheduled||f,loadingOptions:f?v:void 0,round:!0}):i.ZP.createElement(ya.Z,{name:`poll-${u}`,options:x,onChange:U,disabled:t.isScheduled||f,loadingOption:f?v[0]:void 0})),!k&&i.ZP.createElement("div",{className:"poll-results"},h.answers.map((function(e){return i.ZP.createElement(Pa,{key:e.option,shouldAnimate:Z,answer:e,voteResults:E,totalVoters:M,maxVotersCount:A,correctResults:B})}))),!N&&!T&&i.ZP.createElement("div",{className:"poll-voters-count"},function(e,t,n){return n?e(t?"Answer":"Vote",n,"i"):e(t?"Chat.Quiz.TotalVotesEmpty":"Chat.Poll.TotalVotesResultEmpty")}(G,h.quiz,g.totalVoters)),T&&i.ZP.createElement(ze.Z,{isText:!0,disabled:0===v.length,size:"tiny",onClick:$},G("PollSubmitVotes")),N&&i.ZP.createElement(ze.Z,{isText:!0,size:"tiny",onClick:D},G("PollViewResults")))})));var ba=n(8035),Sa=n(88);const Ea=(0,i.X$)((e=>{let{message:t,observeIntersection:n,noAvatars:a,canAutoLoad:s,canAutoPlay:o,inPreview:r,lastSyncTime:c,isDownloading:l=!1,isProtected:u,theme:m,onMediaClick:h,onCancelMediaTransfer:g}=e;const f=(0,d.s1)(t);let p=!1;if(null!=f&&f.photo&&!f.video){const{width:e,height:n}=Rn(t);p=e===n}const v=(0,i.I4)((()=>{h()}),[h]);if(!f)return;const{siteName:I,url:y,displayUrl:w,title:Z,description:P,photo:C,video:b}=f,S=(C||b)&&h&&!p,E=(0,ba.Z)(P,170),M=(0,fe.Z)("WebPage",p&&"with-square-photo",!C&&!b&&!r&&"without-media",b&&"with-video");return i.ZP.createElement("div",{className:M,"data-initial":(I||w)[0],dir:"auto"},C&&!b&&i.ZP.createElement(la,{message:t,observeIntersection:n,noAvatars:a,canAutoLoad:s,size:p?"pictogram":"inline",nonInteractive:!S,onClick:S?v:void 0,onCancelUpload:g,isDownloading:l,isProtected:u,theme:m}),i.ZP.createElement("div",{className:"WebPage-text"},i.ZP.createElement(Sa.Z,{className:"site-name",url:y,text:I||w}),!r&&Z&&i.ZP.createElement("p",{className:"site-title"},(0,nn.Z)(Z)),E&&i.ZP.createElement("p",{className:"site-description"},(0,nn.Z)(E,["emoji","br"]))),!r&&b&&i.ZP.createElement(ga,{message:t,observeIntersection:n,noAvatars:a,canAutoLoad:s,canAutoPlay:o,lastSyncTime:c,onClick:S?v:void 0,onCancelUpload:g,isDownloading:l,isProtected:u}))}));var Ma=n(9937);const Ra=(0,i.X$)((e=>{let{message:t}=e;const n=(0,Fe.Z)(),a=(0,d.eO)(t),{title:s,text:o,amount:r,currency:c,isTest:l,photoUrl:u}=a;return i.ZP.createElement("div",{className:"Invoice"},s&&i.ZP.createElement("p",{className:"title"},(0,nn.Z)(s)),o&&i.ZP.createElement("p",null,(0,nn.Z)(o,["emoji","br"])),i.ZP.createElement("div",{className:"description "+(u?"has-image":"")},u&&i.ZP.createElement("img",{className:"invoice-image",src:u,alt:""}),i.ZP.createElement("p",{className:"description-text"},(0,Ma.x)(r,c,n.code),l&&i.ZP.createElement("span",null,n("PaymentTestInvoice")))))}));var ka=n(8183);const Na=new Map(Object.entries({"building/medical":"#43b3f4","building/gym":"#43b3f4","education/cafeteria":"#f7943f","travel/bedandbreakfast":"#9987ff","travel/hotel":"#9987ff","travel/hostel":"#9987ff","travel/resort":"#9987ff","travel/hotel_bar":"#e56dd6",arts_entertainment:"#e56dd6",building:"#6e81b2",education:"#a57348",event:"#959595",food:"#f7943f",home:"#00aeef",nightlife:"#e56dd6",parks_outdoors:"#6cc039",shops:"#ffb300",travel:"#1c9fff",work:"#ad7854"})),Ta=["#e56cd5","#f89440","#9986ff","#44b3f5","#6dc139","#ff5d5a","#f87aad","#6e82b3","#f5ba21"],Aa=e=>{let{variant:t="rectangular",animation:n="wave",width:a,height:s,className:o}=e;const r=(0,fe.Z)("Skeleton",t,n,o),c=(a?`width: ${a}px;`:"")+(s?`height: ${s}px;`:"");return i.ZP.createElement("div",{className:r,style:c})};var Ba=n(8226);const xa=1e-4,La={width:400,height:300,zoom:16,scale:2},Oa={__html:''},Ua=(0,i.X$)((e=>{let{message:t,peer:n,lastSyncTime:a,isInSelectMode:o,isSelected:r,theme:c,serverTimeOffset:l}=e;const u=(0,i.sO)(null),m=(0,i.sO)(null),h=(0,Fe.Z)(),g=(0,Rt.Z)(),p=(0,d.nf)(t),{type:v,geo:I}=p,y=(0,f.b)(l),w=(0,d.$R)(t,y),Z="geoLive"!==v||w?void 0:t.date+p.period-y,[P,C]=(0,i.eJ)(I),b="venue"===v||"geoLive"===v&&!w,{width:S,height:E,zoom:M,scale:R}=La,k=Boolean(a)&&(0,d.k6)(P,S,E,M,R),N=(0,Ut.Z)(k),T=(0,Mt.Z)(N),A=N||T,B=n&&(0,d.YC)(n.id),x=n&&B?n:void 0,O=n&&!B?n:void 0,U=(0,d.B4)(t),F=(0,i.Ye)((()=>{if("geoLive"!==v||!P.accuracyRadius)return 0;const{lat:e,accuracyRadius:t}=P;return t/function(e,t){return 156543.03392*Math.cos(e*(Math.PI/180))/2**t}(e,M)}),[v,P,M]),$=(0,i.I4)((e=>{if("geoLive"!==v)return;const n=24*Math.PI,a=e.lastElementChild,s=e.firstElementChild,i=t.date+p.period-(0,f.b)(l),o=(1-i/p.period)*n,r=(0,L.mB)(h,1e3*i);a&&s?(s.textContent=r,a.firstElementChild.setAttribute("stroke-dashoffset",`-${o}`)):e.innerHTML=`\n ${r}\n \n \n `}),[v,t.date,p,l,h]);return(0,i.bt)((()=>{m.current&&$(m.current)}),[$]),(0,i.bt)((()=>{if(b)return;const e=u.current.closest(".message-content");A&&ra(A,U,0,r,c).then((t=>{e.style.setProperty("--appendix-bg",t),e.classList.add("has-appendix-thumb"),e.setAttribute(s.s2,"")}))}),[U,o,r,c,A,b]),(0,i.d4)((()=>{Math.abs(I.lat-P.lat){g()}),w?void 0:1e3*(Z||0)),(0,wn.Z)((()=>{const e=m.current;e&&$(e)}),Z?1e3:void 0),i.ZP.createElement("div",{ref:u,className:"Location media-inner interactive",onClick:()=>{var e;const t=function(e,t,n){return`http://maps.google.com/maps/place/${e}+${t}/@${e},${t},${n}z`}(P.lat,P.long,M);null===(e=window.open(t,"_blank"))||void 0===e||e.focus()}},i.ZP.createElement("div",{className:"map-wrapper"},A?i.ZP.createElement("img",{className:"full-media map",src:A,alt:"Location on a map",width:La.width,height:La.height}):i.ZP.createElement(Aa,{width:S,height:E}),function(){if(A)return i.ZP.createElement(i.ZP.Fragment,null,Boolean(F)&&!w&&i.ZP.createElement("div",{className:"location-accuracy",style:`width: ${2*F}px; height: ${2*F}px`}),function(){const e=(0,fe.Z)("pin",v,w&&"expired");if("geoLive"===v)return i.ZP.createElement("div",{className:e,dangerouslySetInnerHTML:Oa},i.ZP.createElement(rn.Z,{chat:O,user:x,className:"location-avatar"}),void 0!==p.heading&&i.ZP.createElement("div",{className:"direction",style:`--direction: ${p.heading}deg`}));if("venue"===v){const t=function(e){return e?Na.get(e)||Na.get(e.split("/")[0])||Ta[(t=e,t.split("").reduce(((e,t)=>(e<<5)-e+t.charCodeAt(0)|0),0)%Ta.length)]:"#008df2";var t}(p.venueType),n=function(e){return e?`https://ss3.4sqi.net/img/categories_v2/${e}_88.png`:""}(p.venueType);return i.ZP.createElement("div",{className:e,dangerouslySetInnerHTML:Oa,style:`--pin-color: ${t}`},i.ZP.createElement("img",{src:n,className:"venue-icon",alt:""}))}return i.ZP.createElement("img",{className:e,src:Ba,alt:""})}())}()),function(){if(b)return"venue"===v?i.ZP.createElement("div",{className:"location-info"},i.ZP.createElement("div",{className:"location-info-title"},p.title),i.ZP.createElement("div",{className:"location-info-subtitle"},p.address)):"geoLive"===v?i.ZP.createElement("div",{className:"location-info"},i.ZP.createElement("div",{className:"location-info-title"},h("AttachLiveLocation")),i.ZP.createElement("div",{className:"location-info-subtitle"},(0,L.dJ)(h,y,t.editDate)),!w&&i.ZP.createElement("div",{className:"geo-countdown",ref:m})):void 0}())}));function Fa(e){return(0,i.X$)((0,a.c$)(((e,t)=>{const{message:n}=t;return{isInSelectMode:(0,c.CA)(e),isSelected:(0,c.vk)(e,n.id)}}))((t=>{const{isInSelectMode:n,isSelected:s,message:o,dimensions:r}=t,{toggleMessageSelection:c}=(0,a.Sv)(),l=(0,i.I4)((e=>{e.stopPropagation(),c({messageId:o.id,withShift:null==e?void 0:e.shiftKey})}),[c,o]),d=(0,i.Ye)((()=>{const{dimensions:e,onClick:a}=t;return{...t,isInSelectMode:n,isSelected:s,dimensions:{...e,x:0,y:0},onClick:n?void 0:a}}),[t,n,s]);return i.ZP.createElement("div",{className:(0,fe.Z)("album-item-select-wrapper",s&&"is-selected"),style:r?`left: ${r.x}px; top: ${r.y}px;`:"",onClick:n?l:void 0},n&&i.ZP.createElement("div",{className:"message-select-control"},s&&i.ZP.createElement("i",{className:"icon-select"})),i.ZP.createElement(e,d))})))}const $a=Fa(la),Da=Fa(ga),qa=(0,a.c$)(((e,t)=>{let{album:n}=t;const{chatId:a}=n.mainMessage,s=(0,c.Pu)(e),i=(0,c.xs)(e,a);return{theme:s,uploadsById:e.fileUploads.byMessageLocalId,activeDownloadIds:i}}))((e=>{let{album:t,observeIntersection:n,hasCustomAppendix:s,lastSyncTime:o,isOwn:r,isProtected:l,albumLayout:u,onMediaClick:m,uploadsById:h,activeDownloadIds:g,theme:f}=e;const{cancelSendingMessage:p}=(0,a.Sv)(),v=t.messages.length,I=(0,i.I4)((e=>{p({chatId:e.chatId,messageId:e.id})}),[p]),{width:y,height:w}=u.containerStyle;return i.ZP.createElement("div",{className:"Album",style:`width: ${y}px; height: ${w}px;`},t.messages.map((function(e,t){const{photo:p,video:y}=(0,d.qp)(e),w=h[e.previousLocalId||e.id],Z=null==w?void 0:w.progress,{dimensions:P,sides:C}=u.layout[t],b=(0,c.bH)((0,a.Rd)(),e),S=(0,c.__)((0,a.Rd)(),e);if(p){const a=s&&(r?t===v-1:Boolean(8&C&&4&C));return i.ZP.createElement($a,{id:`album-media-${(0,d.d0)(e.id)}`,message:e,observeIntersection:n,canAutoLoad:b,shouldAffectAppendix:a,uploadProgress:Z,dimensions:P,isProtected:l,onClick:m,onCancelUpload:I,isDownloading:g.includes(e.id),theme:f})}if(y)return i.ZP.createElement(Da,{id:`album-media-${(0,d.d0)(e.id)}`,message:e,observeIntersection:n,canAutoLoad:b,canAutoPlay:S,uploadProgress:Z,lastSyncTime:o,dimensions:P,isProtected:l,onClick:m,onCancelUpload:I,isDownloading:g.includes(e.id),theme:f})})))}));function ja(){return ja=Object.assign||function(e){for(var t=1;t{let{message:t,observeIntersection:n,canAutoLoad:s,lastSyncTime:r,isDownloading:c}=e;const l=(0,i.sO)(null),u=(0,i.sO)(null),m=(0,i.sO)(null),h=t.content.video,g=(0,Pn.Op)(l,n),[f,p]=(0,i.eJ)(s),v=Boolean(f&&g&&r),{mediaData:I,loadProgress:y}=(0,aa.Z)((0,d.Ti)(t,"inline"),!v,(0,d.kG)(t,"inline"),r),{loadProgress:w}=(0,aa.Z)((0,d.Ti)(t,"download"),!c,o.IU.BlobUrl,r),Z=ia(t,I),{isBuffered:P,bufferingHandlers:C}=(0,da.Z)(),b=f&&!P||c,S=!1===(0,Mt.Z)(f),M=(0,Qn.Z)(I),{shouldRender:R,transitionClassNames:k}=(0,ye.Z)(b||!P,void 0,S),[N,T]=(0,i.eJ)(!1),[A,B]=(0,i.eJ)(0);(0,i.d4)((()=>{if(!N)return;const e=Ot.Rj/2,t=2*(e-6)*Math.PI,n=t-A*t,a=m.current,s=u.current,i=s.firstElementChild;i?i.firstElementChild.setAttribute("stroke-dashoffset",n.toString()):s.innerHTML=`\n \n \n `,B(a.currentTime/a.duration)}),[N,A]);const x=Boolean(I&&g),O=(0,i.I4)((()=>{m.current&&(T(!1),B(0),(0,ea.Z)(m.current),(0,E.T2)((()=>{u.current.innerHTML=""})))}),[]),U=(0,i.I4)((()=>{var e;null===(e=Ga)||void 0===e||e(),Ga=O}),[O]);(0,i.d4)((()=>{m.current&&(x?(0,ea.Z)(m.current):m.current.pause())}),[x]),ma(m,x),(0,ua.Z)(m,[I]);const F=(0,i.I4)((()=>{if(!I)return void p((e=>!e));if(c)return void(0,a.Sv)().cancelMessageMediaDownload({message:t});const e=m.current;N?e.paused?((0,ea.Z)(e),(0,zt.Es)()):e.pause():(U(),e.pause(),e.currentTime=0,(0,ea.Z)(e),(0,zt.Es)(),T(!0))}),[U,N,c,I,t]),$=(0,i.I4)((e=>{const t=e.currentTarget;B(t.currentTime/t.duration)}),[]),D=(0,fe.Z)("full-media",M);return i.ZP.createElement("div",{ref:l,className:"RoundVideo media-inner",onClick:F},i.ZP.createElement("div",{className:"thumbnail-wrapper"},i.ZP.createElement("canvas",{ref:Z,className:"thumbnail",style:`width: ${Ot.Rj}px; height: ${Ot.Rj}px`})),I&&i.ZP.createElement("div",{className:"video-wrapper"},i.ZP.createElement("video",ja({ref:m,className:D,width:Ot.Rj,height:Ot.Rj,autoPlay:!0,muted:!N,loop:!N,playsInline:!0,onEnded:N?O:void 0},C,{onTimeUpdate:N?$:void 0}),i.ZP.createElement("source",{src:I}))),i.ZP.createElement("div",{className:"progress",ref:u}),R&&i.ZP.createElement("div",{className:`media-loading ${k}`},i.ZP.createElement(ca.Z,{progress:c?w:y})),!I&&!f&&i.ZP.createElement("i",{className:"icon-download"}),i.ZP.createElement("div",{className:"message-media-duration"},N?(0,L.k9)(m.current.currentTime):(0,L.k9)(h.duration),(!N||m.current.paused)&&i.ZP.createElement("i",{className:"icon-muted"})))},_a=e=>{let{message:t,onClick:n}=e;const a=(0,Fe.Z)();return i.ZP.createElement("div",{className:"InlineButtons"},t.inlineButtons.map((e=>i.ZP.createElement("div",{className:"row"},e.map((e=>i.ZP.createElement(ze.Z,{size:"tiny",ripple:!0,disabled:"NOT_SUPPORTED"===e.type,onClick:()=>n({button:e})},(0,nn.Z)(a(e.text)),"buy"===e.type&&i.ZP.createElement("i",{className:"icon-card"}),"url"===e.type&&!e.value.match(s.FS)&&i.ZP.createElement("i",{className:"icon-arrow-right"}))))))))},za=(0,i.X$)((e=>{let{threadInfo:t,disabled:n}=e;const{openChat:s}=(0,a.Sv)(),o=(0,Fe.Z)(),{threadId:r,chatId:c,messagesCount:l,lastMessageId:u,lastReadInboxMessageId:m,recentReplierIds:h}=t,g=(0,i.I4)((()=>{s({id:c,threadId:r})}),[s,c,r]),f=(0,i.Ye)((()=>{if(null==h||!h.length)return;const{users:{byId:e},chats:{byId:t}}=(0,a.Rd)();return h.map((n=>(0,d.YC)(n)?e[n]:t[n])).filter(Boolean)}),[h]);if(void 0===l)return;const p=Boolean(m&&u&&m0&&i.ZP.createElement("div",{className:"recent-repliers",dir:o.isRtl?"rtl":"ltr"},f.map((e=>i.ZP.createElement(rn.Z,{key:e.id,size:"small",user:(0,d.YC)(e.id)?e:void 0,chat:(0,d.YC)(e.id)?void 0:e})))),i.ZP.createElement("div",{className:"label",dir:"auto"},l?o("Comments",l,"i"):o("LeaveAComment")),i.ZP.createElement("i",{className:"icon-next"}))})),Va=(0,i.X$)((e=>{let{reaction:t,message:n,activeReaction:s,availableReactions:o}=e;const{sendReaction:r}=(0,a.Sv)(),{recentReactions:c}=n.reactions,l=(0,i.Ye)((()=>{if(!c||t.count>3)return;const e=(0,a.Rd)().users.byId;return c.filter((e=>e.reaction===t.reaction)).map((t=>e[t.userId])).filter(Boolean)}),[t,c]),d=(0,i.I4)((()=>{r({reaction:t.isChosen?void 0:t.reaction,chatId:n.chatId,messageId:n.id})}),[n,t,r]);return i.ZP.createElement(ze.Z,{className:(0,fe.Z)(t.isChosen&&"chosen"),size:"tiny",onClick:d},i.ZP.createElement(Yn,{activeReaction:s,reaction:t.reaction,availableReactions:o}),null!=l&&l.length?i.ZP.createElement("div",{className:"avatars"},l.map((e=>i.ZP.createElement(rn.Z,{user:e,size:"micro"})))):(0,ke.bi)(t.count))})),Xa=(0,i.X$)((e=>{let{message:t,isOutside:n,activeReaction:a,availableReactions:s,metaChildren:o}=e;return i.ZP.createElement("div",{className:(0,fe.Z)("Reactions",n&&"is-outside")},t.reactions.results.map((e=>i.ZP.createElement(Va,{key:e.reaction,reaction:e,message:t,activeReaction:a,availableReactions:s}))),o)}));var Ka=n(7324),Wa=n(5296);const Ya=(0,i.X$)((e=>{let{localSticker:t,localEffect:n,isOwn:a,soundId:s,size:o="medium",observeIntersection:r,messageId:c,chatId:l,activeEmojiInteractions:d}=e;const{playKey:u,ref:m,style:h,width:g,handleClick:f,markAnimationLoaded:p}=(0,Wa.Z)(o,l,c,s,d,a,n),v=`local_emoji_${t}`,I=(0,Pn.Op)(m,r),[y,w]=(0,i.eJ)();return(0,i.d4)((()=>{t&&(0,Ka.Z)(t).then((e=>{w(e)}))}),[t]),i.ZP.createElement("div",{ref:m,className:"AnimatedEmoji media-inner",style:h,onClick:f},y&&i.ZP.createElement(Wn.Z,{key:v,id:v,animationData:y,size:g,quality:1,play:I&&u,forceOnHeavyAnimation:!0,noLoop:!0,onLoad:p}))})),Ja={__html:''},Qa={__html:''},es=(0,i.X$)((0,a.c$)(((e,t)=>{const{focusedMessage:n,forwardMessages:a,lastSyncTime:s,serverTimeOffset:i}=e,{message:o,album:r,withSenderName:l,withAvatar:u,threadId:m,messageListType:h,isLastInDocumentGroup:g}=t,{id:f,chatId:p,viaBotId:v,replyToChatId:I,replyToMessageId:y,isOutgoing:w,threadInfo:Z}=o,P=(0,c.Z1)(e,p),C=(0,c.FM)(e,p),b=(0,d.pK)(p),S=P&&(0,d.eA)(P),E=null==P?void 0:P.username,M=!C&&(0,d.Ul)(o),R=l||u||M,k=(0,c.Ur)(e,o),N=(0,c.cv)(e,o),T=v?(0,c.dy)(e,v):void 0,A=m?(0,c.qS)(e,p,m):void 0,B=o.id===A,x=y===A,L=y&&!x?(0,c.hj)(e,b&&I?I:p,y):void 0,O=L&&(0,c.Ur)(e,L),U=(0,c.uZ)(e,o),F="thread"===h&&(r?r.messages.some((t=>(0,c._X)(e,t))):(0,c._X)(e,o)),{direction:$,noHighlight:D,isResizingContainer:q}=F&&n||{},j=a.messageIds&&a.messageIds.includes(f),{query:G}=(0,c.n5)(e)||{},H=(0,d._O)(o);let _;_=null!=r&&r.messages?r.messages.every((t=>{let{id:n}=t;return(0,c.vk)(e,n)})):(0,c.vk)(e,f);const{canReply:z}="thread"===h&&(0,c._k)(e,o,m)||{},V=(0,c.te)(e,o),X=Z?(0,c.tZ)(e,Z.chatId,Z.threadId)||Z:void 0,K=Boolean(o.groupedId)&&!o.isInAlbum,W=K?(0,c.xH)(e,p,o.groupedId)[0]:void 0,Y=K?g?(0,c.hj)(e,p,W):void 0:o,J=H?(0,c.CP)(e,H):void 0;return{theme:(0,c.Pu)(e),chatUsername:E,forceSenderName:M,sender:k,canShowSender:R,originSender:N,botSender:T,shouldHideReply:x,isThreadTop:B,replyMessage:L,replyMessageSender:O,isInDocumentGroup:K,isProtected:(0,c.EV)(e,o),isFocused:F,isForwarding:j,reactionMessage:Y,isChatWithSelf:C,isRepliesChat:b,isChannel:S,canReply:z,lastSyncTime:s,serverTimeOffset:i,highlight:G,isSingleEmoji:Boolean(H),animatedEmoji:H?(0,c.zB)(e,H):void 0,animatedEmojiEffect:H&&(0,d.YC)(p)?(0,c.tH)(e,H):void 0,animatedEmojiSoundId:H?(0,c.Oh)(e,H):void 0,localSticker:J,localEffect:J&&(0,d.YC)(p)?(0,c.cu)(J):void 0,isInSelectMode:(0,c.CA)(e),isSelected:_,isGroupSelected:Boolean(o.groupedId)&&!o.isInAlbum&&(0,c.a6)(e,p,o.groupedId),threadId:m,isDownloading:V,isPinnedList:"pinned"===h,canAutoLoadMedia:(0,c.bH)(e,o),canAutoPlayMedia:(0,c.__)(e,o),autoLoadFileMaxSizeMb:e.settings.byKey.autoLoadFileMaxSizeMb,shouldLoopStickers:(0,c.yB)(e),threadInfo:X,availableReactions:e.availableReactions,defaultReaction:(0,d.CI)(o)?void 0:(0,c.q6)(e,p),activeReaction:Y&&e.activeReactions[Y.id],activeEmojiInteractions:e.activeEmojiInteractions,...w&&{outgoingStatus:(0,c.dT)(e,o,"scheduled"===h)},..."number"==typeof U&&{uploadProgress:U},...F&&{focusDirection:$,noFocusHighlight:D,isResizingContainer:q}}}))((e=>{let{message:t,chatUsername:n,observeIntersectionForBottom:s,observeIntersectionForMedia:r,observeIntersectionForAnimatedStickers:c,album:l,noAvatars:u,withAvatar:g,withSenderName:p,areReactionsInMeta:v,noComments:I,appearanceOrder:y,isFirstInGroup:w,isLastInGroup:Z,isFirstInDocumentGroup:P,isLastInDocumentGroup:C,isLastInList:b,theme:S,forceSenderName:E,sender:M,canShowSender:R,originSender:k,botSender:N,isThreadTop:T,shouldHideReply:A,replyMessage:B,replyMessageSender:x,outgoingStatus:L,uploadProgress:O,isInDocumentGroup:U,isProtected:F,isFocused:$,focusDirection:D,noFocusHighlight:q,isResizingContainer:j,isForwarding:G,isChatWithSelf:H,isRepliesChat:_,isChannel:z,canReply:V,lastSyncTime:X,serverTimeOffset:K,highlight:W,animatedEmoji:Y,localSticker:J,localEffect:Q,animatedEmojiEffect:ee,animatedEmojiSoundId:te,isInSelectMode:ne,isSelected:ae,isGroupSelected:se,threadId:ie,reactionMessage:oe,availableReactions:re,defaultReaction:ce,activeReaction:le,activeEmojiInteractions:de,messageListType:ue,isPinnedList:me,isDownloading:he,canAutoLoadMedia:ge,canAutoPlayMedia:pe,shouldLoopStickers:ve,autoLoadFileMaxSizeMb:Ie,threadInfo:we}=e;const{toggleMessageSelection:Ze,clickInlineButton:Pe,disableContextMenuHint:Ce}=(0,a.Sv)(),be=(0,i.sO)(null),Se=(0,i.sO)(null),Ee=(0,i.sO)(null),Me=(0,Fe.Z)();(0,Pn._N)(Se,s);const{isContextMenuOpen:Re,contextMenuPosition:ke,handleBeforeContextMenu:Ne,handleContextMenu:Te,handleContextMenuClose:Ae,handleContextMenuHide:Be}=(0,Sn.Z)(be,h.$b&&ne,!0,h.wZ);(0,i.d4)((()=>{Re&&Ce()}),[Re,Ce]);const xe=y<=0,[Le,Ue]=(0,Oe.Z)(xe);(0,i.d4)((()=>{xe||setTimeout(Ue,10*y)}),[y,Ue,xe]);const{transitionClassNames:$e}=(0,ye.Z)(Le,void 0,xe,!1),{id:De,chatId:qe,forwardInfo:je,viaBotId:Ge}=t,He=(0,d.CI)(t),_e=(0,d.B4)(t),Ve="scheduled"===ue||t.isScheduled,Xe=(0,d.ss)(t)&&!A,Ke=Boolean(we)&&"thread"===ue,We=(0,d.$D)(t),Ye=J||Y,Je=(null==oe?void 0:oe.reactions)&&!(0,d.JE)(oe.reactions),Qe=je&&(!H||Ve)&&!_&&!je.isLinkedChannelPost&&!We,et=Boolean(l)&&l.messages.length>1,tt=U&&!P,nt=U&&!C,at=void 0!==ke,st=!(at||ne||G||nt),it=z&&!Ve,ot=Boolean(me||je&&(je.isChannelPost||H&&!_e||_)&&je.fromMessageId),rt=we&&!nt&&"thread"===ue&&!I,ct=!h.$b&&!ne&&ce&&!nt,lt=(0,i.I4)(((e,t)=>{Ze({messageId:De,groupedId:t,...(null==e?void 0:e.shiftKey)&&{withShift:!0},...et&&{childMessageIds:l.messages.map((e=>{let{id:t}=e;return t}))}})}),[Ze,De,et,l]),dt=R?M:void 0,ut=je&&(H||_||!dt)?k:dt,mt=je?k:dt,{handleMouseDown:ht,handleClick:gt,handleContextMenu:ft,handleDoubleClick:pt,handleContentDoubleClick:vt,handleMouseMove:It,handleSendQuickReaction:yt,handleMouseLeave:wt,isSwiped:Zt,isQuickReactionVisible:Pt,handleDocumentGroupMouseEnter:Ct}=$n(lt,be,De,0,Boolean(ne),Boolean(V),Boolean(F),Te,Ne,qe,at,Ee,_e,nt),{handleAvatarClick:bt,handleSenderClick:St,handleViaBotClick:Et,handleReplyClick:Mt,handleMediaClick:Rt,handleAudioPlay:kt,handleAlbumMediaClick:Tt,handleMetaClick:At,handleReadMedia:Bt,handleCancelUpload:xt,handleVoteSend:Lt,handleGroupForward:Ut,handleForward:Ft,handleFocus:$t,handleFocusForwarded:Dt,handleDocumentGroupSelectAll:qt}=function(e,t,n,s,r,c,l,d,u,h,g,f,p){const{openChat:v,showNotification:I,focusMessage:y,openMediaViewer:w,openAudioPlayer:Z,markMessagesRead:P,cancelSendingMessage:C,sendPollVote:b,openForwardMenu:S,focusMessageInComments:E}=(0,a.Sv)(),{id:M,forwardInfo:R,replyToMessageId:k,replyToChatId:N,replyToTopMessageId:T,groupedId:A}=n,B=(0,i.I4)((()=>{g&&v({id:g.id})}),[g,v]),x=(0,i.I4)((()=>{f?l&&null!=R&&R.channelPostId?y({chatId:f.id,messageId:R.channelPostId}):v({id:f.id}):I({message:e("HidAccount")})}),[l,y,R,e,v,f,I]),L=(0,i.I4)((()=>{p&&v({id:p.id})}),[p,v]),O=(0,i.I4)((()=>{y({chatId:u&&N?N:s,threadId:r,messageId:k,replyMessageId:u&&N?void 0:M})}),[y,u,N,s,r,k,M]),U=(0,i.I4)((()=>{w({chatId:s,threadId:r,messageId:M,origin:d?m.bZ.ScheduledInline:m.bZ.Inline})}),[s,r,M,w,d]),F=(0,i.I4)((()=>{Z({chatId:s,messageId:M})}),[s,M,Z]),$=(0,i.I4)((e=>{w({chatId:s,threadId:r,messageId:e,origin:d?m.bZ.ScheduledAlbum:m.bZ.Album})}),[s,r,w,d]),D=(0,i.I4)((()=>{P({messageIds:[M]})}),[M,P]),q=(0,i.I4)((()=>{C({chatId:s,messageId:M})}),[C,s,M]),j=(0,i.I4)((e=>{b({chatId:s,messageId:M,options:e})}),[s,M,b]),G=(0,i.I4)((()=>{S({fromChatId:s,groupedId:A})}),[S,s,A]),H=(0,i.I4)((()=>{if(h&&h.messages){const e=h.messages.map((e=>{let{id:t}=e;return t}));S({fromChatId:s,messageIds:e})}else S({fromChatId:s,messageIds:[M]})}),[h,S,s,M]),_=(0,i.I4)((()=>{y({chatId:s,threadId:o._f,messageId:M})}),[y,s,M]),z=(0,i.I4)((()=>{c?y({chatId:R.fromChatId,groupedId:A,groupedChatId:s}):u&&N?E({chatId:N,threadId:T,messageId:R.fromMessageId}):y({chatId:R.fromChatId,messageId:R.fromMessageId})}),[c,u,N,y,R,A,s,E,T]),V=(0,i.I4)((e=>{e.stopPropagation(),t(e,A)}),[t,A]);return{handleAvatarClick:B,handleSenderClick:x,handleViaBotClick:L,handleReplyClick:O,handleMediaClick:U,handleAudioPlay:F,handleAlbumMediaClick:$,handleMetaClick:V,handleReadMedia:D,handleCancelUpload:q,handleVoteSend:j,handleGroupForward:G,handleForward:H,handleFocus:_,handleFocusForwarded:z,handleDocumentGroupSelectAll:V}}(Me,lt,t,qe,ie,U,Qe,Ve,_,l,ut,mt,N),Gt=(0,fe.Z)("Message message-list-item",w&&"first-in-group",F&&"is-protected",Z&&"last-in-group",P&&"first-in-document-group",C&&"last-in-document-group",b&&"last-in-list",_e&&"own",Boolean(t.views)&&"has-views",t.isEdited&&"was-edited",Xe&&"has-reply",at&&"has-menu-open",$&&!q&&"focused",G&&"is-forwarding",t.isDeleting&&"is-deleting",U&&"is-in-document-group",et&&"is-album",t.hasUnreadMention&&"has-unread-mention",ae&&"is-selected",ne&&"is-in-selection-mode",T&&"is-thread-top",Boolean(t.inlineButtons)&&"has-inline-buttons",Zt&&"is-swiped",$e,Boolean(le)&&"has-active-reaction"),{text:Ht,photo:_t,video:zt,audio:Vt,voice:Xt,document:Kt,sticker:Wt,contact:Yt,poll:Jt,webPage:Qt,invoice:en,location:tn}=(0,d.qp)(t),an=function(e){let{hasReply:t,customShape:n,isLastInGroup:a,asForwarded:s,hasThread:i,forceSenderName:o,hasComments:r,hasActionButton:c,hasReactions:l,isGeoLiveActive:u}=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const{text:m,photo:h,video:g,audio:f,voice:p,document:v,poll:I,webPage:y,contact:w,location:Z}=(0,d.qp)(e),P=["message-content"],C=h||g||Z,b=m||"venue"===(null==Z?void 0:Z.type)||u,S=C&&!b,E=Boolean(e.viaBotId);return En(n)?P.push(`emoji-only emoji-only-${n}`):b&&P.push("text"),c&&P.push("has-action-button"),n&&(P.push("custom-shape"),null!=g&&g.isRound&&P.push("round"),r&&P.push("has-comments")),C?P.push("media"):f?P.push("audio"):p?P.push("voice"):v?P.push("document"):w?P.push("contact"):I?P.push("poll"):y&&(P.push("web-page"),(y.photo||y.video)&&P.push("media")),s&&P.push("is-forwarded"),t&&P.push("is-reply"),i&&P.push("has-replies"),l&&P.push("has-reactions"),E&&P.push("is-via-bot"),o&&P.push("force-sender-name"),n||(P.push("has-shadow"),C&&r&&P.push("has-background"),(t||s||!S||E||o)&&P.push("has-solid-background"),a&&(h||Z&&!b||!S)&&P.push("has-appendix")),P.join(" ")}(t,{hasReply:Xe,customShape:We,isLastInGroup:Z,asForwarded:Qe,hasThread:Ke,forceSenderName:E,hasComments:we&&(null==we?void 0:we.messagesCount)>0,hasActionButton:it||ot,hasReactions:Je,isGeoLiveActive:"geoLive"===(null==tn?void 0:tn.type)&&!(0,d.$R)(t,(0,f.b)(K))}),sn=an.includes("has-appendix"),on=(0,jt.X)(t,W,En(We));let cn,ln;cn=nt?"none":!on||Ye||Qt?"standalone":"in-text",v?ln="in-meta":Je?We||(_t||zt||Ye)&&!on?ln="outside":Qe?(cn="standalone",ln="inside"):ln="inside":ln="none",(0,Nt.Z)(_&&t.replyToChatId?t.replyToChatId:qe,Xe?t.replyToMessageId:void 0,B,t.id),Ln(be,qe,$,D,q,j);let dn,un="",mn=!1;const hn=(0,i.Ye)((()=>et?An(_e,Boolean(Qe),Boolean(u),l):void 0),[et,_e,Qe,u,l]),gn=Qe?28:0;if(et||!_t&&!zt)hn&&(dn=Math.max(Mn(Boolean(Ht),rt),hn.containerStyle.width),dn-hn.containerStyle.width>18&&(mn=!0));else{let e;_t?e=Rn(t,u).width:zt&&(e=zt.isRound?Ot.Rj:Rn(t,u).width),e&&(dn=Math.max(Mn(Boolean(Ht),rt),e),dn-e>18&&(mn=!0))}dn&&(un=`width: ${dn+gn}px`);const fn=z&&t.adminTitle||!Qe&&(null==je?void 0:je.adminTitle)||void 0,pn=(0,i.Ye)((()=>fn?xn(fn):void 0),[fn]);function vn(){const e=i.ZP.createElement(Jn,{message:t,reactionMessage:oe,outgoingStatus:L,signature:fn,withReactions:"in-meta"===ln,withReactionOffset:"inside"===ln,availableReactions:re,activeReaction:le,onClick:At});return"inside"!==ln?e:i.ZP.createElement(Xa,{activeReaction:le,message:oe,metaChildren:e,availableReactions:re})}return i.ZP.createElement("div",{ref:be,id:(0,d.d0)(t.id),className:Gt,style:pn?`--meta-safe-author-width: ${pn}px`:void 0,"data-message-id":De,onMouseDown:ht,onClick:gt,onContextMenu:ft,onDoubleClick:pt,onMouseEnter:nt?Ct:void 0,onMouseMove:ct?It:void 0,onMouseLeave:ct||nt?wt:void 0},i.ZP.createElement("div",{ref:Se,className:"bottom-marker","data-message-id":De,"data-last-message-id":l?l.messages[l.messages.length-1].id:void 0,"data-has-unread-mention":t.hasUnreadMention}),!U&&i.ZP.createElement("div",{className:"message-select-control"},ae&&i.ZP.createElement("i",{className:"icon-select"})),C&&i.ZP.createElement("div",{className:(0,fe.Z)("message-select-control group-select",se&&"is-selected"),onClick:qt},se&&i.ZP.createElement("i",{className:"icon-select"})),g&&function(){const e=ut&&(0,d.YC)(ut.id),t=ut&&e?ut:void 0,n=ut&&!e?ut:void 0,a=!ut&&je?je.hiddenUserName:void 0;return i.ZP.createElement(rn.Z,{size:"small",user:t,chat:n,text:a,lastSyncTime:X,onClick:t||n?bt:void 0})}(),i.ZP.createElement("div",{className:(0,fe.Z)("message-content-wrapper",an.includes("text")&&"can-select-text")},i.ZP.createElement("div",{ref:Ee,className:an,style:un,dir:"auto"},Qe&&!tt&&i.ZP.createElement("div",{className:"message-title"},Me("ForwardedMessage")),function(){const e=(0,fe.Z)("content-inner",Qe&&"forwarded-message",Xe&&"reply-message",mn&&"no-media-corners"),n=Z&&!on&&!Qe&&!Ke,a=(0,fe.Z)("text-content","in-text"===cn&&"with-meta",L&&"with-outgoing-icon");return i.ZP.createElement("div",{className:e,onDoubleClick:vt,dir:"auto"},function(){if(We&&!Ge||!(p&&!(_t||zt||tn)||Qe||Ge||E)||tt||Xe&&We)return;let e,n;return!mt||We&&Ge?null!=je&&je.hiddenUserName&&(e=je.hiddenUserName):(e=(0,d.OU)(Me,mt),Qe||(n=`color-${(0,d.Rs)(mt)}`)),i.ZP.createElement("div",{className:"message-title",dir:"ltr"},e?i.ZP.createElement("span",{className:(0,fe.Z)("interactive",n),onClick:St,dir:"auto"},(0,nn.Z)(e)):N?void 0:" ",N&&i.ZP.createElement(i.ZP.Fragment,null,i.ZP.createElement("span",{className:"via"},Me("ViaBot")),i.ZP.createElement("span",{className:"interactive",onClick:Et},(0,nn.Z)(`@${N.username}`))),null!=je&&je.isLinkedChannelPost?i.ZP.createElement("span",{className:"admin-title",dir:"auto"},Me("DiscussChannel")):t.adminTitle&&!z?i.ZP.createElement("span",{className:"admin-title",dir:"auto"},t.adminTitle):void 0)}(),Xe&&i.ZP.createElement(_n,{message:B,isProtected:F,sender:x,observeIntersection:r,onClick:Mt}),Wt&&i.ZP.createElement(ta,{message:t,observeIntersection:r,observeIntersectionForPlaying:c,shouldLoop:ve,lastSyncTime:X}),Y&&i.ZP.createElement(na.Z,{size:"small",isOwn:_e,sticker:Y,effect:ee,soundId:te,observeIntersection:r,lastSyncTime:X,forceLoadPreview:He,messageId:De,chatId:qe,activeEmojiInteractions:de}),J&&i.ZP.createElement(Ya,{size:"small",isOwn:_e,localSticker:J,localEffect:Q,soundId:te,observeIntersection:r,lastSyncTime:X,forceLoadPreview:He,messageId:De,chatId:qe,activeEmojiInteractions:de}),et&&i.ZP.createElement(qa,{album:l,albumLayout:hn,observeIntersection:r,isOwn:_e,isProtected:F,hasCustomAppendix:n,lastSyncTime:X,onMediaClick:Tt}),!et&&_t&&i.ZP.createElement(la,{message:t,observeIntersection:r,noAvatars:u,canAutoLoad:ge,uploadProgress:O,shouldAffectAppendix:n,onClick:Rt,onCancelUpload:xt,isDownloading:he,isProtected:F,theme:S}),!et&&zt&&zt.isRound&&i.ZP.createElement(Ha,{message:t,observeIntersection:r,canAutoLoad:ge,lastSyncTime:X,isDownloading:he}),!et&&zt&&!zt.isRound&&i.ZP.createElement(ga,{message:t,observeIntersection:r,noAvatars:u,canAutoLoad:ge,canAutoPlay:pe,uploadProgress:O,lastSyncTime:X,onClick:Rt,onCancelUpload:xt,isDownloading:he,isProtected:F}),(Vt||Xt)&&i.ZP.createElement(Vn.Z,{theme:S,message:t,origin:m.Cr.Inline,uploadProgress:O,lastSyncTime:X,isSelectable:U,isSelected:ae,onPlay:kt,onReadMedia:!Xt||_e&&!H?void 0:Bt,onCancelUpload:xt,isDownloading:he}),Kt&&i.ZP.createElement(zn.Z,{message:t,observeIntersection:r,canAutoLoad:ge,autoLoadFileMaxSizeMb:Ie,uploadProgress:O,isSelectable:U,isSelected:ae,onMediaClick:Rt,onCancelUpload:xt,isDownloading:he}),Yt&&i.ZP.createElement(pa,{contact:Yt}),Jt&&i.ZP.createElement(Ca,{message:t,poll:Jt,onSendVote:Lt}),!Ye&&on&&i.ZP.createElement("p",{className:a,dir:"auto"},on,"in-text"===cn&&vn()),Qt&&i.ZP.createElement(Ea,{message:t,observeIntersection:r,noAvatars:u,canAutoLoad:ge,canAutoPlay:pe,lastSyncTime:X,onMediaClick:Rt,onCancelMediaTransfer:xt,isDownloading:he,isProtected:F,theme:S}),en&&i.ZP.createElement(Ra,{message:t}),tn&&i.ZP.createElement(Ua,{message:t,lastSyncTime:X,isInSelectMode:ne,isSelected:ae,theme:S,peer:M,serverTimeOffset:K}))}(),!nt&&"standalone"===cn&&vn(),st&&it?i.ZP.createElement(ze.Z,{className:"message-action-button",color:"translucent-white",round:!0,size:"tiny",ariaLabel:Me("lng_context_forward_msg"),onClick:C?Ut:Ft},i.ZP.createElement("i",{className:"icon-share-filled"})):st&&ot?i.ZP.createElement(ze.Z,{className:"message-action-button",color:"translucent-white",round:!0,size:"tiny",ariaLabel:"Focus message",onClick:me?$t:Dt},i.ZP.createElement("i",{className:"icon-arrow-right"})):void 0,rt&&i.ZP.createElement(za,{threadInfo:we,disabled:I}),sn&&i.ZP.createElement("div",{className:"svg-appendix",dangerouslySetInnerHTML:_e?Ja:Qa}),ct&&i.ZP.createElement("div",{className:(0,fe.Z)("quick-reaction",Pt&&!le&&"visible"),onClick:yt},i.ZP.createElement(Kn.Z,{reaction:ce}))),t.inlineButtons&&i.ZP.createElement(_a,{message:t,onClick:Pe}),"outside"===ln&&i.ZP.createElement(Xa,{message:oe,isOutside:!0,activeReaction:le,availableReactions:re})),ke&&i.ZP.createElement(Gn,{isOpen:Re,anchor:ke,message:t,album:l,chatUsername:n,messageListType:ue,onClose:Ae,onCloseAnimationEnd:Be}))}))),ts=(0,i.X$)((0,a.c$)(((e,t)=>{let{chatId:n}=t;const a=(0,c.fS)(e,n),{chatId:s,isBot:i}=a||{};return{message:a,bot:s&&i?(0,c.dy)(e,s):void 0,channel:!i&&s?(0,c.Z1)(e,s):void 0}}))((e=>{let{chatId:t,message:n,containerRef:s,bot:o,channel:r}=e;const{viewSponsoredMessage:c,openChat:l,openChatByInvite:u,startBot:m,focusMessage:h}=(0,a.Sv)(),g=(0,Fe.Z)(),f=(0,i.sO)(null),p=Boolean(n),{observe:v}=(0,Pn.S1)({rootRef:s,debounceMs:200,threshold:1});(0,i.d4)((()=>p?v(f.current,(e=>{e.isIntersecting&&c({chatId:t})})):void 0),[t,p,v,c]);const I=(0,i.I4)((()=>{n&&(n.chatInviteHash?u({hash:n.chatInviteHash}):n.channelPostId?h({chatId:n.chatId,messageId:n.channelPostId}):(l({id:n.chatId}),n.startParam&&m({botId:n.chatId,param:n.startParam})))}),[h,n,l,u,m]);if(n)return i.ZP.createElement("div",{className:"SponsoredMessage Message open",key:"sponsored-message"},i.ZP.createElement("div",{className:"message-content has-shadow has-solid-background",dir:"auto"},i.ZP.createElement("div",{className:"content-inner",dir:"auto"},i.ZP.createElement("div",{className:"message-title",dir:"ltr"},o&&(0,nn.Z)((0,d.Js)(o)||""),r&&(0,nn.Z)(n.chatInviteTitle||(0,d.U)(g,r,o)||"")),i.ZP.createElement("p",{className:"text-content with-meta",dir:"auto",ref:f},i.ZP.createElement("span",{className:"text-content-inner",dir:"auto"},(0,va.H)(n.text.text,n.text.entities)),i.ZP.createElement("span",{className:"MessageMeta",dir:"ltr"},i.ZP.createElement("span",{className:"message-signature"},g("SponsoredMessage")))),i.ZP.createElement(ze.Z,{color:"secondary",size:"tiny",ripple:!0,onClick:I,className:"SponsoredMessage__button"},g(n.isBot?"Conversation.ViewBot":n.channelPostId?"Conversation.ViewPost":"Conversation.ViewChannel")))))}))),ns=(0,i.X$)((e=>{let{chatId:t,messageIds:n,messageGroups:o,isViewportNewest:r,isUnread:c,withUsers:l,areReactionsInMeta:u,noAvatars:f,containerRef:p,anchorIdRef:v,memoUnreadDividerBeforeIdRef:I,memoFirstUnreadIdRef:y,threadId:w,type:Z,isReady:P,isScrollingRef:C,isScrollPatchNeededRef:b,threadTopMessageId:S,hasLinkedChat:M,isSchedule:R,noAppearanceAnimation:k,onFabToggle:N,onNotchToggle:T}=e;const{openHistoryCalendar:A}=(0,a.Sv)(),{observeIntersectionForMedia:B,observeIntersectionForReading:x,observeIntersectionForAnimatedStickers:O}=function(e,t,n){const{markMessageListRead:s,markMessagesRead:i}=(0,a.Sv)(),{observe:o}=(0,Pn.S1)({rootRef:t,throttleMs:Cn,margin:bn}),{observe:r,freeze:c,unfreeze:l}=(0,Pn.S1)({rootRef:t,throttleMs:150},(t=>{if("thread"!==e)return;let a=0;const o=[];t.forEach((e=>{const{isIntersecting:t,target:n}=e;if(!t)return;const{dataset:s}=n,i=Number(s.lastMessageId||s.messageId);i>a&&(a=i),s.hasUnreadMention&&o.push(i)})),n.current&&a>=n.current&&s({maxId:a}),o.length&&i({messageIds:o})}));(0,we.Z)(c,l);const{observe:d}=(0,Pn.S1)({rootRef:t,throttleMs:Cn});return{observeIntersectionForMedia:o,observeIntersectionForReading:r,observeIntersectionForAnimatedStickers:d}}(Z,p,y),{backwardsTriggerRef:U,forwardsTriggerRef:F,fabTriggerRef:$}=function(e,t,n,o,r,c,l,d,u,g){const{loadViewportMessages:f}=(0,a.Sv)(),[p,v]=(0,i.Ye)((()=>"thread"===e?[(0,E.Ds)((()=>f({direction:m.Uq.Backwards})),1e3,!0,!1),(0,E.Ds)((()=>f({direction:m.Uq.Forwards})),1e3,!0,!1)]:[]),[f,n]),I=(0,i.sO)(null),y=(0,i.sO)(null),w=(0,i.sO)(null);function Z(){if(!d)return;if(!n||!n.length)return c(!1),void l(!1);if(!o)return c(!0),void l(!0);if(!t.current)return;const{offsetHeight:e,scrollHeight:a,scrollTop:s}=t.current,i=Math.round(a-s-e),u=i<=1;c(r?!u:!(i<=50)),l(!u)}const{observe:P}=(0,Pn.S1)({rootRef:t,margin:h.gZ},(e=>{if(!v||!p)return;if(n[0]>=s.AE)return;const t=e.find((e=>{let{isIntersecting:t}=e;return t}));if(!t)return;const{target:a}=t;"backwards-trigger"===a.className?(h.i4&&u.current&&n.length<=s.hT&&(g.current=!0),p()):"forwards-trigger"===a.className&&v()}));(0,Pn._N)(I,P),(0,Pn._N)(y,P);const{observe:C,freeze:b,unfreeze:S}=(0,Pn.S1)({rootRef:t,margin:100},Z);(0,Pn._N)(w,C);const{observe:M,freeze:R,unfreeze:k}=(0,Pn.S1)({rootRef:t,margin:1},Z);return(0,Pn._N)(w,M),(0,Pe.Z)((()=>{d&&Z()}),[d]),(0,Pe.Z)((()=>{b(),R(),setTimeout((()=>{k(),S()}),250)}),[n]),{backwardsTriggerRef:I,forwardsTriggerRef:y,fabTriggerRef:w}}(Z,p,n,r,c,N,T,P,C,b),D=(0,Fe.Z)(),q=i.ZP.createElement("div",{className:(0,fe.Z)("unread-divider","local-action-message"),key:"unread-messages"},i.ZP.createElement("span",null,D("UnreadMessages"))),j=k?0:o.reduce(((e,t)=>e+(0,g.xH)(t.senderGroups).length),0);let G=0;const H=o.map(((e,t,n)=>{const a=e.senderGroups.map(((e,a,s)=>{if(1===e.length&&!gn(e[0])&&(0,d.Lo)(e[0])){const o=e[0],r=a===s.length-1&&t===n.length-1;return(0,g.oA)([o.id===I.current&&q,i.ZP.createElement(Hn,{key:o.id,message:o,observeIntersection:x,appearanceOrder:j-++G,isLastInList:r})])}let o;return(0,g.xH)(e.map(((r,c)=>{const m=gn(r)?r.mainMessage:r,h=gn(r)?r:void 0,p=(0,d.B4)(m),y=gn(r),P=e[c+1];m.previousLocalId&&v.current===(0,d.d0)(m.previousLocalId)&&(v.current=(0,d.d0)(m.id));const C=!y&&m.groupedId?m.groupedId:void 0,b=P&&!gn(P)?P.groupedId:void 0,E={isFirstInGroup:0===c,isLastInGroup:c===e.length-1,isFirstInDocumentGroup:Boolean(C&&C!==o),isLastInDocumentGroup:Boolean(C&&C!==b),isLastInList:c===e.length-1&&a===s.length-1&&t===n.length-1};o=C;const R=(0,d.KK)(m),k="scheduled"!==Z?R:`${m.date}_${R}`;return(0,g.oA)([m.id===I.current&&q,i.ZP.createElement(es,{key:k,message:m,observeIntersectionForBottom:x,observeIntersectionForMedia:B,observeIntersectionForAnimatedStickers:O,album:h,noAvatars:f,withAvatar:E.isLastInGroup&&l&&!p&&!(m.id===S),withSenderName:E.isFirstInGroup&&l&&!p,areReactionsInMeta:u,threadId:w,messageListType:Z,noComments:!1===M,appearanceOrder:j-++G,isFirstInGroup:E.isFirstInGroup,isLastInGroup:E.isLastInGroup,isFirstInDocumentGroup:E.isFirstInDocumentGroup,isLastInDocumentGroup:E.isLastInDocumentGroup,isLastInList:E.isLastInList}),m.id===S&&i.ZP.createElement("div",{className:"local-action-message",key:"discussion-started"},i.ZP.createElement("span",null,D("DiscussionStarted")))])})))}));return i.ZP.createElement("div",{className:"message-date-group",key:e.datetime,onMouseDown:pn.q,teactFastList:!0},i.ZP.createElement("div",{className:(0,fe.Z)("sticky-date",!R&&"interactive"),key:"date-header",onMouseDown:pn.q,onClick:R?void 0:()=>A({selectedAt:e.datetime})},i.ZP.createElement("span",{dir:"auto"},R&&e.originalDate===s.t4&&D("MessageScheduledUntilOnline"),R&&e.originalDate!==s.t4&&D("MessageScheduledOn",(0,L.j1)(D,e.datetime,void 0,!0)),!R&&(0,L.j1)(D,e.datetime))),(0,g.xH)(a))}));return i.ZP.createElement("div",{className:"messages-container",teactFastList:!0},i.ZP.createElement("div",{ref:U,key:"backwards-trigger",className:"backwards-trigger"}),(0,g.xH)(H),r&&i.ZP.createElement(ts,{key:t,chatId:t,containerRef:p}),i.ZP.createElement("div",{ref:F,key:"forwards-trigger",className:"forwards-trigger"}),i.ZP.createElement("div",{ref:$,key:"fab-trigger",className:"fab-trigger"}))}));var as=n(3547);const ss=(0,i.X$)((0,a.c$)(((e,t)=>{let{userId:n}=t;const{stickers:a}=e.stickers.greeting,s=(0,d.db)(n)+(0,d.db)(e.currentUserId),i=null!=a&&a.length?a[s%a.length]:void 0,o=(0,c.Z1)(e,n);return o?{sticker:i,lastUnreadMessageId:o.lastMessage&&o.lastMessage.id!==o.lastReadInboxMessageId?o.lastMessage.id:void 0,connectionState:e.connectionState}:{}}))((e=>{let{sticker:t,connectionState:n,lastUnreadMessageId:s}=e;const{loadGreetingStickers:o,sendMessage:r,markMessageListRead:c}=(0,a.Sv)(),l=(0,Fe.Z)(),d=(0,i.sO)(null),{observe:u}=(0,Pn.S1)({rootRef:d,debounceMs:200});(0,i.d4)((()=>{t||"connectionStateReady"!==n||o()}),[n,o,t]),(0,i.d4)((()=>{"connectionStateReady"===n&&s&&c({maxId:s})}),[n,c,s]);const m=(0,i.I4)((e=>{e={...e,isPreloadedGlobally:!0},r({sticker:e})}),[r]);return i.ZP.createElement("div",{className:"ContactGreeting",ref:d},i.ZP.createElement("div",{className:"wrapper"},i.ZP.createElement("p",{className:"title",dir:"auto"},l("Conversation.EmptyPlaceholder")),i.ZP.createElement("p",{className:"description",dir:"auto"},l("Conversation.GreetingText")),i.ZP.createElement("div",{className:"sticker"},t&&i.ZP.createElement(as.Z,{sticker:t,onClick:m,clickArg:t,observeIntersection:u,size:160,className:"large",noContextMenu:!0}))))}))),is=(0,i.X$)((e=>{let{isChatWithSelf:t,type:n,isGroupChatJustCreated:a}=e;const s=(0,Fe.Z)();return"scheduled"===n?function(e){return i.ZP.createElement("div",{className:"empty"},i.ZP.createElement("span",null,e("ScheduledMessages.EmptyPlaceholder")))}(s):t?function(e){return i.ZP.createElement("div",{className:"NoMessages"},i.ZP.createElement("div",{className:"wrapper"},i.ZP.createElement("i",{className:"icon icon-cloud-download"}),i.ZP.createElement("h3",{className:"title"},e("Conversation.CloudStorageInfo.Title")),i.ZP.createElement("ul",{className:"description"},i.ZP.createElement("li",null,e("Conversation.ClousStorageInfo.Description1")),i.ZP.createElement("li",null,e("Conversation.ClousStorageInfo.Description2")),i.ZP.createElement("li",null,e("Conversation.ClousStorageInfo.Description3")),i.ZP.createElement("li",null,e("Conversation.ClousStorageInfo.Description4")))))}(s):a?function(e){return i.ZP.createElement("div",{className:"NoMessages"},i.ZP.createElement("div",{className:"wrapper",dir:e.isRtl?"rtl":void 0},i.ZP.createElement("h3",{className:"title"},e("EmptyGroupInfo.Title")),i.ZP.createElement("p",{className:"description"},e("EmptyGroupInfo.Subtitle")),i.ZP.createElement("ul",{className:"list-checkmarks"},i.ZP.createElement("li",null,e("EmptyGroupInfo.Line1")),i.ZP.createElement("li",null,e("EmptyGroupInfo.Line2")),i.ZP.createElement("li",null,e("EmptyGroupInfo.Line3")),i.ZP.createElement("li",null,e("EmptyGroupInfo.Line4")))))}(s):i.ZP.createElement("div",{className:"empty"},i.ZP.createElement("span",null,s("NoMessages")))})),os=(0,E.Ds)((e=>e()),200,!1),rs=(0,i.X$)((0,a.c$)(((e,t)=>{let{chatId:n,threadId:a,type:s}=t;const i=(0,c.Z1)(e,n);if(!i)return{};const r=(0,c.$W)(e,n,a,s),l="scheduled"===s?(0,c.Fn)(e,n):(0,c.Zw)(e,n),u=(0,c.qS)(e,n,a);if(a!==o._f&&!(l&&u&&l[u]))return{};const{isRestricted:m,restrictionReason:h,lastMessage:g}=i,f=(0,c.G$)(e,n),p=a===o._f&&!r&&!i.unreadCount&&!f&&g&&!g.groupedId,v=(0,c.IK)(e,n);let I;return(0,c.pk)(e,n)&&(I=v.fullInfo?v.fullInfo.botDescription||"NoMessages":"Updating bot info..."),{isChatLoaded:!0,isRestricted:m,restrictionReason:h,isChannelChat:(0,d.eA)(i),isGroupChat:(0,d.Bf)(i),isCreator:i.isCreator,isChatWithSelf:(0,c.FM)(e,n),isRepliesChat:(0,d.pK)(n),isBot:Boolean(v),messageIds:r,messagesById:l,firstUnreadId:(0,c.It)(e,n,a),isViewportNewest:"thread"!==s||(0,c.b9)(e,n,a),threadFirstMessageId:(0,c.yZ)(e,n,a),focusingId:f,isSelectModeActive:(0,c.CA)(e),botDescription:I,threadTopMessageId:u,hasLinkedChat:i.fullInfo&&"linkedChatId"in i.fullInfo?Boolean(i.fullInfo.linkedChatId):void 0,lastSyncTime:e.lastSyncTime,...p&&{lastMessage:g}}}))((e=>{var t,n,o,r,l,u;let{chatId:f,threadId:p,type:v,hasTools:I,onFabToggle:y,onNotchToggle:w,isChatLoaded:Z,isChannelChat:P,isGroupChat:C,canPost:b,isReady:S,isChatWithSelf:M,isRepliesChat:R,isCreator:k,isBot:N,messageIds:T,messagesById:A,firstUnreadId:B,isViewportNewest:x,threadFirstMessageId:L,isRestricted:O,restrictionReason:U,focusingId:F,isSelectModeActive:$,lastMessage:D,botDescription:q,threadTopMessageId:j,hasLinkedChat:G,lastSyncTime:H,withBottomShift:_}=e;const{loadViewportMessages:z,setScrollOffset:V,loadSponsoredMessages:X,loadMessageReactions:K,copyMessagesByIds:W}=(0,a.Sv)(),Y=(0,i.sO)(null),J=(0,i.sO)("thread"===v&&(0,c.Vt)((0,a.Rd)(),f,p)||0),Q=(0,i.sO)(),ee=(0,i.sO)(),te=(0,i.sO)(),ne=(0,i.sO)(),ae=(0,i.sO)(),se=(0,i.sO)(),ie=(0,i.sO)(!1),oe=(0,i.sO)(Boolean(D)),[re,ce]=(0,i.eJ)(),le=Boolean(T);(0,Pe.Z)((()=>{le&&(0,E.R3)((()=>{oe.current=!1}))}),[le]),(0,Pe.Z)((()=>{ne.current=B}),[B]),(0,Pe.Z)((()=>{P&&S&&H&&X({chatId:f})}),[f,S,P,H]),(0,Pe.Z)((()=>{le&&(ae.current=ne.current)}),[le]),(0,Pe.Z)((()=>{se.current=F}),[F]),(e=>{(0,i.d4)((()=>{function t(t){if((h.jm&&t.metaKey||!h.jm&&t.ctrlKey)&&"c"===(0,xe.Z)(t)){const n=(0,Zn.Z)();n&&n.length>0&&(t.preventDefault(),e({messageIds:n}))}}return document.addEventListener("keydown",t,!1),()=>{document.removeEventListener("keydown",t,!1)}}),[e])})(W);const de=(0,i.Ye)((()=>{if(!T||!A)return;const e=!j||T[0]&&L!==T[0]?T:[j,...T];if(!e.length)return;const t=e.map((e=>A[e])).filter(Boolean);return fn((0,g.Xo)(t,["date","id"]),ae.current)}),[T,A,L,j]);(0,wn.Z)((()=>{if(!T||!A)return;const e=T.filter((e=>{var t;return null===(t=A[e])||void 0===t?void 0:t.reactions}));e.length&&K({chatId:f,ids:e})}),15e3);const ue=(0,i.Ye)((()=>{if("thread"===v)return(0,E.Ds)((()=>z({direction:m.Uq.Around})),1e3,!0,!1)}),[z,T]),{isScrolled:me,updateStickyDates:he}=function(){const[e,t]=(0,Oe.Z)(!1),n=(0,vn.Z)(1e3,!0);return{isScrolled:e,updateStickyDates:(0,i.I4)(((e,a)=>{t(),document.body.classList.contains("is-scrolling-messages")||(0,E.T2)((()=>{document.body.classList.add("is-scrolling-messages")})),n((()=>{(0,E.T2)((()=>{const t=document.querySelector(".stuck");t&&t.classList.remove("stuck");const n=function(e,t){const n=e.querySelectorAll(".sticky-date"),a=e.scrollTop;return Array.from(n).find((e=>{const{offsetTop:n,offsetHeight:s}=e,i=n-a;return-s<=i&&i<=(t?60:10)}))}(e,a);n&&n.classList.add("stuck"),document.body.classList.remove("is-scrolling-messages")}))}))}),[t,n])}}(),pe=(0,i.sO)(),ve=(0,i.sO)(),Ie=(0,i.I4)((()=>{if(ie.current)return void(ie.current=!1);pe.current=!0;const e=Y.current;se.current||he(e,I),os((()=>{pe.current=!1,(0,E.T2)((()=>{e.parentElement&&(J.current=e.scrollHeight-e.scrollTop,"thread"===v&&V({chatId:f,threadId:p,scrollOffset:J.current}))}))}))}),[he,I,v,V,f,p]);(0,i.d4)((()=>{if(!("ResizeObserver"in window))return;const e=new ResizeObserver((e=>{let[t]=e;t.target.offsetParent&&ce(t.contentRect.height)}));return e.observe(Y.current),()=>{e.disconnect()}}),[]);const{height:ye}=St();(0,i.d4)((()=>{Y.current.dataset.normalHeight=String(Y.current.offsetHeight)}),[ye,b]),(0,i.d4)((()=>{if(!ue||!Z||O||F)return;if(T&&T[T.length-1]>=s.AE)return;const e=Y.current;(!T||T.length{if(!T||!te.current)return;const e=te.current.filter((e=>T.includes(Number(e.dataset.messageId)))),t=e[1]||e[0];t&&(Q.current=t.id,ee.current=t.getBoundingClientRect().top)}),[T,x,re,I]),(0,mn.Z)((e=>{let[t,n,a]=e;const i=Y.current;te.current=Array.from(i.querySelectorAll(".message-list-item"));const o=T&&t&&T[T.length-1]!==t[t.length-1],r=(null==T?void 0:T[0])!==(null==t?void 0:t[0])&&(null==T?void 0:T.length)===s.hT/2+1,c=o&&!r,l=T&&se.current===T[T.length-1],d=x&&c&&T&&T.length{i.parentElement&&i.parentElement.classList.remove("force-messages-scroll")}),500));const{scrollTop:u,scrollHeight:m,offsetHeight:h}=i,g=J.current,f=te.current[te.current.length-1];let p=g-(a||h);c&&(p-=f?f.offsetHeight:0);const v=x&&n&&p<=20;let y;if(c&&v&&!l&&(f&&(0,E.T2)((()=>{(0,yn.Z)(i,f,"end",20)})),y=m-h,J.current=Math.max(Math.ceil(m-y),h),!d))return;const w=void 0!==a&&a!==re,Z=Q.current&&i.querySelector(`#${Q.current}`),P=!Z&&ae.current&&i.querySelector(".unread-divider");if(v&&w){if((0,yn.N)())return;y=m-h}else Z?(ve.current&&(ve.current=!1,(0,In.z)(i)),y=u+(Z.getBoundingClientRect().top-(ee.current||0))):y=P?Math.min(P.offsetTop-(I?60:10),m-g):m-g;(0,In.Z)(i,Math.ceil(y)),se.current||(ie.current=!0,(0,E.T2)((()=>{ie.current=!1}))),J.current=Math.max(Math.ceil(m-y),h)}),[T,x,re,I]),(0,hn.Z)((e=>{let[t]=e;void 0!==t&&(0,ge.YW)(200+s.fK)}),[$]);const we=(0,Fe.Z)(),Ze=Boolean(f&&(0,d.YC)(f)),Ce=Boolean(!Ze&&!P||M||R),be=Boolean(!Ce||P),Se=(0,d.YC)(f)&&!M&&!N&&(!de&&!D&&T&&(!te.current||0===te.current.length)||1===(null==T?void 0:T.length)&&"contactSignUp"===(null==A||null===(t=A[T[0]])||void 0===t||null===(n=t.content.action)||void 0===n?void 0:n.type)||"contactSignUp"===(null==D||null===(o=D.content)||void 0===o||null===(r=o.action)||void 0===r?void 0:r.type)),Ee=C&&k&&1===(null==T?void 0:T.length)&&"chatCreate"===(null==A||null===(l=A[T[0]])||void 0===l||null===(u=l.content.action)||void 0===u?void 0:u.type),Me=(0,fe.Z)("MessageList custom-scroll",be&&"no-avatars",!b&&"no-composer","pinned"===v&&"type-pinned",_&&"with-bottom-shift",$&&"select-mode-active",me&&"scrolled",!S&&"is-animating");return i.ZP.createElement("div",{ref:Y,className:Me,onScroll:Ie,onMouseDown:pn.q},O?i.ZP.createElement("div",{className:"empty"},i.ZP.createElement("span",null,U?U.text:"This is a private "+(P?"channel":"chat"))):q?i.ZP.createElement("div",{className:"empty"},i.ZP.createElement("span",null,(0,nn.Z)(we(q),["br","emoji","links"]))):Se?i.ZP.createElement(ss,{userId:f}):!T||de&&!Ee?T&&de||D?i.ZP.createElement(ns,{chatId:f,messageIds:T||[D.id],messageGroups:de||fn([D]),isViewportNewest:Boolean(x),isUnread:Boolean(B),withUsers:Ce,areReactionsInMeta:Ze,noAvatars:be,containerRef:Y,anchorIdRef:Q,memoUnreadDividerBeforeIdRef:ae,memoFirstUnreadIdRef:ne,threadId:p,type:v,isReady:S,isScrollingRef:pe,isScrollPatchNeededRef:ve,threadTopMessageId:j,hasLinkedChat:G,isSchedule:!!de&&"scheduled"===v,noAppearanceAnimation:!de||!oe.current,onFabToggle:y,onNotchToggle:w}):i.ZP.createElement(rt.Z,{color:"white",backgroundColor:"dark"}):i.ZP.createElement(is,{chatId:f,type:v,isChatWithSelf:M,isGroupChatJustCreated:Ee}))}))),cs=(0,i.X$)((0,a.c$)((e=>{const t=(0,c.Bt)(e);if(!t)return{};const{chatId:n,threadId:a,type:s}=t,i=(0,c.Z1)(e,n);return{messageListType:s,unreadCount:i&&a===o._f&&"thread"===s?i.unreadCount:void 0}}))((e=>{let{isShown:t,canPost:n,messageListType:s,unreadCount:o,withExtraShift:r}=e;const{focusNextReply:c}=(0,a.Sv)(),l=(0,Fe.Z)(),d=(0,i.sO)(null),u=(0,i.I4)((()=>{if(t)if("thread"===s)c();else{const e=d.current.parentElement.querySelector(".MessageList"),t=e.querySelectorAll(".message-list-item"),n=t[t.length-1];if(!n)return;(0,yn.Z)(e,n,"end",20)}}),[t,s,c]),m=(0,fe.Z)("ScrollDownButton",t&&"revealed",!n&&"no-composer",r&&"with-extra-shift");return i.ZP.createElement("div",{ref:d,className:m},i.ZP.createElement("div",{className:"ScrollDownButton-inner"},i.ZP.createElement(ze.Z,{color:"secondary",round:!0,onClick:u,ariaLabel:l("AccDescrPageDown")},i.ZP.createElement("i",{className:"icon-arrow-down"})),Boolean(o)&&i.ZP.createElement("div",{className:"unread-count"},(0,ke.bi)(o))))})));var ls=n(5723);const ds=1280,us=/\.[^/.]+$/;async function ms(e,t,n,a){const i=URL.createObjectURL(t),{type:o,size:r}=t;let c,l;if(s.oG.has(o))if(n){const t=await(0,bt.pt)(i),{width:n,height:s}=t;if(n>ds||s>ds||"image/jpeg"!==o){const t=await Kt(i,ds/Math.max(n,s),"image/jpeg");return URL.revokeObjectURL(i),ms(e,await(0,bt.gm)(t),!0,a)}"image/jpeg"===o&&(e=e.replace(us,".jpg")),c={width:n,height:s}}else l=i;else if(s.wG.has(o)){const{videoWidth:e,videoHeight:t,duration:n}=await(0,bt.jj)(i);c={width:e,height:t,duration:n},l=await(0,bt.ud)(i)}return{blobUrl:i,filename:e,mimeType:o,size:r,quick:c,previewBlobUrl:l,...a}}function hs(e){const t=window.getSelection();if(null!=t&&t.getRangeAt&&t.rangeCount){const n=t.getRangeAt(0);n.deleteContents();const a=n.createContextualFragment(e),s=a.lastChild;n.insertNode(a),s?(n.setStartAfter(s),n.setEndAfter(s)):n.collapse(!1),t.removeAllRanges(),t.addRange(n)}}var gs=n(6391);let fs;function ps(e){fs.focus(),e.focus()}h.cj&&(fs=document.createElement("input"),fs.classList.add("for-ios-autocapitalization-fix"),document.body.appendChild(fs));var vs=n(4784),Is=n(2400),ys=n(6389),ws=n(971);const Zs={encoderPath:new URL(n(8973),n.b).href,reuseWorker:!0},Ps={type:"audio/ogg"};let Cs,bs,Ss;async function Es(){return Cs||(Cs=n.e(161).then(n.t.bind(n,1161,23)),bs=(await Cs).default,Ss=new bs(Zs)),Cs}async function Ms(e){await async function(){await Es(),await Ss.start()}();const t=Date.now();let n;const a=[],s=[];Ss.ondataavailable=e=>{a.push(e)};const i=function(t,n){const a=t.sourceNode,i=a.context.createAnalyser();i.fftSize=64,a.connect(i);const o=i.frequencyBinCount,r=new Uint8Array(o);let c=!1;return function t(){if(c)return;i.getByteFrequencyData(r);const n=r.reduce(((e,t)=>e+t),0)/o/255;(t=>{s.push(255*t),e(t)})(n<.1?0:n),requestAnimationFrame(t)}(),()=>{c=!0}}(Ss);return{stop:()=>new Promise(((e,o)=>{Ss.onstop=()=>{e({blob:new Blob(a,Ps),duration:Math.round(((n||Date.now())-t)/1e3),waveform:s})},Ss.onerror=o;const r=Math.max(0,t+1e3-Date.now());setTimeout((()=>{Ss.stop(),i()}),r)})),pause:()=>{const e=Math.max(0,t+1e3-Date.now());setTimeout((()=>{Ss.pause(),n=Date.now(),i()}),e)}}}var Rs=n(1262);const ks=["image/png","image/jpeg","image/gif"];let Ns,Ts;var As=n(3575),Bs=n(9295);function xs(e,t,n){const a=(0,vn.Z)(t,!0),[s,o]=(0,i.eJ)(),[r,c,l]=(0,Oe.Z)();return(0,ge.ZP)(c,l),(0,Pe.Z)((()=>{r||a((()=>{o(e())}))}),[...n,r]),s}const Ls=/^@([a-z0-9_]{1,32})[\u00A0\u0020]+(.*)/i,Os=/^@([a-z0-9_]{1,32})[\u00A0\u0020]+\n{2,}/i,Us={username:"",query:"",canShowHelp:!1,usernameLowered:""},Fs=document.createElement("div");const $s=(0,E.P2)((e=>e()),500,!0),Ds=/^[\w@]{1,32}\s?/i;var qs=n(3057);const js=(0,i.X$)((e=>{const{isOpen:t}=e,n=(0,ot.Z)(it.gl.Extra,"DeleteMessageModal",!t);return n?i.ZP.createElement(n,e):void 0}));function Gs(){return Gs=Object.assign||function(e){for(var t=1;t{let{onActivate:t,...n}=e;const a=(0,i.sO)(!1),s=(0,i.I4)((()=>{if(a.current=!0,_s)return _s=!1,void t();Hs&&(clearTimeout(Hs),Hs=void 0),Hs=window.setTimeout((()=>{a.current&&t()}),200)}),[t]),o=(0,i.I4)((()=>{a.current=!1}),[]);return i.ZP.createElement(ze.Z,Gs({},n,{onMouseEnter:h.$b?void 0:s,onMouseLeave:h.$b?void 0:o,onClick:t}))}));var Vs=n(5655),Xs=n(6503);const Ks=(0,i.X$)((e=>{let{isButtonVisible:t,canAttachMedia:n,canAttachPolls:a,onFileSelect:o,onPollCreate:r}=e;const[c,l,d]=(0,Oe.Z)(),[u,m,g]=(0,Xs.Z)(c,d);(0,i.d4)((()=>{c&&g()}),[c,g]);const f=(0,i.I4)((()=>{c?d():l()}),[c,l,d]),p=(0,i.I4)(((e,t)=>{const{files:n}=e.target;n&&n.length>0&&o(Array.from(n),t)}),[o]),v=(0,i.I4)((()=>{(0,Vs.g)(Array.from(s.dI).join(","),(e=>p(e,!0)))}),[p]),I=(0,i.I4)((()=>{(0,Vs.g)("*",(e=>p(e,!1)))}),[p]),y=(0,Fe.Z)();if(t)return i.ZP.createElement("div",{className:"AttachMenu"},i.ZP.createElement(zs,{id:"attach-menu-button",className:c?"AttachMenu--button activated":"AttachMenu--button",round:!0,color:"translucent",onActivate:f,ariaLabel:"Add an attachment",ariaControls:"attach-menu-controls",hasPopup:!0},i.ZP.createElement("i",{className:"icon-attach"})),i.ZP.createElement(dt.Z,{id:"attach-menu-controls",isOpen:c,autoClose:!0,positionX:"right",positionY:"bottom",onClose:d,className:"AttachMenu--menu fluid",onCloseAnimationEnd:d,onMouseEnter:h.$b?void 0:u,onMouseLeave:h.$b?void 0:m,noCloseOnBackdrop:!h.$b,ariaLabelledBy:"attach-menu-button"},!n&&i.ZP.createElement(_e.Z,{className:"media-disabled",disabled:!0},"Posting media content is not allowed in this group."),n&&i.ZP.createElement(i.ZP.Fragment,null,i.ZP.createElement(_e.Z,{icon:"photo",onClick:v},y("AttachmentMenu.PhotoOrVideo")),i.ZP.createElement(_e.Z,{icon:"document",onClick:I},y("AttachDocument"))),a&&i.ZP.createElement(_e.Z,{icon:"poll",onClick:r},y("Poll"))))})),Ws=(0,i.X$)((e=>{const{isOpen:t}=e,n=(0,ot.Z)(it.gl.Extra,"SymbolMenu",!t);return n?i.ZP.createElement(n,e):void 0})),Ys=(0,i.X$)((e=>{const{isOpen:t}=e,n=(0,ot.Z)(it.gl.Extra,"InlineBotTooltip",!t);return n?i.ZP.createElement(n,e):void 0})),Js=(0,i.X$)((e=>{const{isOpen:t}=e,n=(0,ot.Z)(it.gl.Extra,"MentionTooltip",!t);return n?i.ZP.createElement(n,e):void 0}));var Qs=n(7146);const ei=(0,i.X$)((e=>{const{isOpen:t}=e,n=(0,ot.Z)(it.gl.Extra,"StickerTooltip",!t);return n?i.ZP.createElement(n,e):void 0}));var ti=n(9830);const ni=(0,i.X$)((e=>{const{isOpen:t}=e,n=(0,ot.Z)(it.gl.Extra,"BotCommandTooltip",!t);return n?i.ZP.createElement(n,e):void 0})),ai=(0,i.X$)((0,a.c$)(((e,t)=>{let{messageId:n}=t;const{chatId:a}=(0,c.Bt)(e)||{};return a?{message:(0,c.hj)(e,a,n)}:{}}))((e=>{let{isOpen:t,message:n,onClose:s}=e;const{clickInlineButton:o}=(0,a.Sv)(),[r,c]=(0,Xs.Z)(t,s),{isKeyboardSingleUse:l}=n||{},[d,u,m]=(0,Oe.Z)(!0),g=(0,i.I4)((()=>{m(),s()}),[s,m]);if((0,i.d4)((()=>{u()}),[u,null==n?void 0:n.keyboardButtons]),n&&n.keyboardButtons)return i.ZP.createElement(dt.Z,{isOpen:t||d,autoClose:l,positionX:"right",positionY:"bottom",onClose:g,className:"BotKeyboardMenu",onCloseAnimationEnd:g,onMouseEnter:h.$b?void 0:r,onMouseLeave:h.$b?void 0:c,noCompact:!0},i.ZP.createElement("div",{className:"content"},n.keyboardButtons.map((e=>i.ZP.createElement("div",{className:"row"},e.map((e=>i.ZP.createElement(ze.Z,{ripple:!0,disabled:"NOT_SUPPORTED"===e.type,onClick:()=>o({button:e})},e.text))))))))})));var si=n(3616),ii=n(7891);const oi=(0,i.X$)((0,a.c$)((e=>{const{chatId:t,threadId:n,type:a}=(0,c.Bt)(e)||{};if(!t||!n||!a)return{};const{currentUserId:s,forwardMessages:{fromChatId:i,toChatId:o,messageIds:r}}=e,l=(0,c.Yy)(e,t,n),u="scheduled"===a?(0,c.wU)(e,t):(0,c._$)(e,t,n),m=e.settings.byKey.animationLevel>=1,h=o===t;let g,f;if(l?g=(0,c.hj)(e,t,l):u?g=(0,c.kK)(e,t,n,a):h&&1===r.length&&(g=(0,c.hj)(e,i,r[0])),(h||l)&&g){const{forwardInfo:n}=g,a=t===s;n&&(n.isChannelPost||a)&&(f=(0,c.cv)(e,g)),f||(f=(0,c.Ur)(e,g)),f||(f=(0,d.YC)(i)?(0,c.dy)(e,i):(0,c.Z1)(e,i))}return{replyingToId:l,editingId:u,message:g,sender:f,shouldAnimate:m,forwardedMessagesCount:h?r.length:void 0}}))((e=>{let{replyingToId:t,editingId:n,message:s,sender:o,shouldAnimate:r,forwardedMessagesCount:c,onClear:l}=e;const{setReplyingToId:d,setEditingId:u,focusMessage:m,exitForwardMode:h}=(0,a.Sv)(),g=Boolean((t||n)&&s||o&&c),f=(0,ii.Z)([c],c?300:void 0),{shouldRender:p,transitionClassNames:v}=(0,ye.Z)(f&&g,void 0,!r,void 0,!r),I=(0,i.I4)((()=>{t?d({messageId:void 0}):n?u({messageId:void 0}):c&&h(),null==l||l()}),[t,n,c,l,d,u,h]);(0,i.d4)((()=>g?(0,Be.Z)(I):void 0),[g,I]);const y=(0,i.I4)((()=>{m({chatId:s.chatId,messageId:s.id})}),[m,s]),w=(0,fe.Z)("ComposerEmbeddedMessage",v),Z=c&&c>1?`${c} forwarded messages`:void 0;if(p)return i.ZP.createElement("div",{className:w},i.ZP.createElement("div",null,i.ZP.createElement(ze.Z,{round:!0,faded:!0,color:"translucent",ariaLabel:"Cancel replying",onClick:I},i.ZP.createElement("i",{className:"icon-close"})),i.ZP.createElement(_n,{className:"inside-input",message:s,sender:o,customText:Z,title:n?"Edit Message":void 0,onClick:y})))}))),ri=(0,i.X$)((e=>{const{attachments:t}=e,n=(0,ot.Z)(it.gl.Extra,"AttachmentModal",!t.length);return n?i.ZP.createElement(n,e):void 0})),ci=(0,i.X$)((e=>{const{isOpen:t}=e,n=(0,ot.Z)(it.gl.Extra,"BotCommandMenu",!t);return n?i.ZP.createElement(n,e):void 0})),li=(0,i.X$)((e=>{const{isOpen:t}=e,n=(0,ot.Z)(it.gl.Extra,"PollModal",!t);return n?i.ZP.createElement(n,e):void 0})),di=(0,i.X$)((e=>{const{isOpen:t}=e,n=(0,ot.Z)(it.gl.Extra,"DropArea",!t);return n?i.ZP.createElement(n,e):void 0})),ui=new RegExp(s.FM,"i"),mi=(0,i.X$)((0,a.c$)(((e,t)=>{let{chatId:n,threadId:a}=t;const s=(0,c.tV)(e,n,a);return{theme:(0,c.Pu)(e),webPagePreview:e.webPagePreview,noWebPage:s}}))((e=>{let{chatId:t,threadId:n,messageText:s,disabled:r,webPagePreview:c,noWebPage:l,theme:d}=e;const{loadWebPagePreview:u,clearWebPagePreview:m,toggleMessageWebPage:h}=(0,a.Sv)(),g=xs((()=>{const{text:e,entities:t}=(0,v.Z)(s),n=t&&t.find((e=>{let{type:t}=e;return t===o.Vv.TextUrl}));if(n)return n.url;const a=e.match(ui);return a?a[0]:void 0}),300,[s]);(0,i.d4)((()=>{g?u({text:g}):(m(),h({chatId:t,threadId:n}))}),[t,h,m,g,u,n]),(0,Pe.Z)((()=>{m(),h({chatId:t,threadId:n})}),[t]);const f=Boolean(c&&s.length&&!l&&!r),{shouldRender:p,transitionClassNames:I}=(0,ye.Z)(f),y=(0,Tt.Z)(c,!0),w=(0,i.I4)((()=>{h({chatId:t,threadId:n,noWebPage:!0})}),[t,n,h]);if(!p||!y)return;const{photo:Z,...P}=y,C={content:{webPage:P}};return i.ZP.createElement("div",{className:(0,fe.Z)("WebPagePreview",I)},i.ZP.createElement("div",null,i.ZP.createElement(ze.Z,{round:!0,faded:!0,color:"translucent",ariaLabel:"Clear Webpage Preview",onClick:w},i.ZP.createElement("i",{className:"icon-close"})),i.ZP.createElement(Ea,{message:C,inPreview:!0,theme:d})))}))),hi=(0,i.X$)((e=>{const{isOpen:t}=e,n=(0,ot.Z)(it.gl.Extra,"SendAsMenu",!t);return n?i.ZP.createElement(n,e):void 0}));var gi;!function(e){e.Send="send",e.Record="record",e.Edit="edit",e.Schedule="schedule"}(gi||(gi={}));const fi="wonderful-voice-message.ogg",pi=(0,i.X$)((0,a.c$)(((e,t)=>{var n,a,i,r;let{chatId:l,threadId:u,messageListType:m}=t;const h=(0,c.Z1)(e,l),g=l!==s.FV?(0,c.IK)(e,l):void 0,f=Boolean(g),p=(0,c.FM)(e,l),v=f&&(0,c.FT)(e,l),I=(0,c.qy)(e,l),{language:y,shouldSuggestStickers:w}=e.settings.byKey,Z=e.emojiKeywords[s.pR],P=y!==s.pR?e.emojiKeywords[y]:void 0,C=v?v.id:void 0,b=C?(0,c.hj)(e,l,C):void 0,{currentUserId:S}=e,E=null!=h&&h.fullInfo?(null==h||null===(n=h.fullInfo)||void 0===n?void 0:n.sendAsId)||S:void 0,M=null!=h&&h.sendAsIds&&E&&h.sendAsIds.includes(E)?E:null!=h&&null!==(a=h.adminRights)&&void 0!==a&&a.anonymous?null==h?void 0:h.id:void 0,R=M?(0,c.dy)(e,M):void 0,k=!R&&M?(0,c.Z1)(e,M):void 0,N="scheduled"===m?(0,c.hI)(e,l):(0,c.s)(e,l,u);return{editingMessage:(0,c.kK)(e,l,u,m),connectionState:e.connectionState,draft:(0,c.Ms)(e,l,u),chat:h,isChatWithBot:f,isChatWithSelf:p,canScheduleUntilOnline:(0,c.Eh)(e,l),isChannel:h?(0,d.eA)(h):void 0,isRightColumnShown:(0,c.Jf)(e),isSelectModeActive:(0,c.CA)(e),withScheduledButton:u===o._f&&"thread"===m&&Boolean(null==I?void 0:I.length),shouldSchedule:"scheduled"===m,botKeyboardMessageId:C,botKeyboardPlaceholder:null==b?void 0:b.keyboardPlaceholder,isForwarding:l===e.forwardMessages.toChatId,isPollModalOpen:e.isPollModalOpen,stickersForEmoji:e.stickers.forEmoji.stickers,groupChatMembers:null==h||null===(i=h.fullInfo)||void 0===i?void 0:i.members,topInlineBotIds:null===(r=e.topInlineBots)||void 0===r?void 0:r.userIds,currentUserId:S,lastSyncTime:e.lastSyncTime,contentToBeScheduled:e.messages.contentToBeScheduled,shouldSuggestStickers:w,recentEmojis:e.recentEmojis,baseEmojiKeywords:null==Z?void 0:Z.keywords,emojiKeywords:null==P?void 0:P.keywords,inlineBots:e.inlineBots.byUsername,isInlineBotLoading:e.inlineBots.isLoading,chatBotCommands:h&&h.fullInfo&&h.fullInfo.botCommands,botCommands:g&&g.fullInfo?g.fullInfo.botCommands||!1:void 0,sendAsUser:R,sendAsChat:k,sendAsId:M,editingDraft:N}}))((e=>{let{dropAreaState:t,shouldSchedule:n,canScheduleUntilOnline:r,isReady:c,onDropHide:u,editingMessage:m,chatId:g,threadId:p,messageListType:I,draft:y,chat:w,connectionState:Z,isChatWithBot:P,isChatWithSelf:C,isChannel:b,isRightColumnShown:S,isSelectModeActive:M,isForwarding:R,isPollModalOpen:k,botKeyboardMessageId:N,botKeyboardPlaceholder:T,withScheduledButton:A,stickersForEmoji:B,groupChatMembers:x,topInlineBotIds:O,currentUserId:U,lastSyncTime:F,contentToBeScheduled:$,shouldSuggestStickers:D,baseEmojiKeywords:q,emojiKeywords:j,recentEmojis:G,inlineBots:H,isInlineBotLoading:_,botCommands:z,chatBotCommands:V,sendAsUser:X,sendAsChat:K,sendAsId:W,editingDraft:Y}=e;const{sendMessage:J,clearDraft:ee,showDialog:te,setStickerSearchQuery:ne,setGifSearchQuery:ae,forwardMessages:se,openPollModal:ie,closePollModal:oe,loadScheduledHistory:re,openChat:ce,addRecentEmoji:le,sendInlineBotResult:de,loadSendAs:ue,loadFullChat:me}=(0,a.Sv)(),he=(0,Fe.Z)(),ge=(0,i.sO)(null),[pe,ve]=(0,i.eJ)(""),Ie=(0,ws.Y)(pe),ye=(0,i.sO)(),Ce=(0,Mt.Z)(t),{width:be}=Q.Z.get(),Se=null==w?void 0:w.sendAsIds,Ee=Se&&(Se.length>1||!Se.includes(U)),[Me,Re,ke]=(0,Oe.Z)(),Ne=(0,ys.Z)(g,p),Te=(0,i.I4)((()=>{ke()}),[ke]),[Ae,xe]=(0,qs.Z)(r,Te);(0,i.d4)((()=>{ye.current=void 0}),[g]),(0,i.d4)((()=>{g&&F&&p===o._f&&c&&re({chatId:g})}),[c,g,re,F,p]),(0,i.d4)((()=>{g&&w&&F&&!Se&&c&&(0,d.ZV)(w)&&ue({chatId:g})}),[w,g,c,F,ue,Se]),(0,i.d4)((()=>{g&&w&&F&&!w.fullInfo&&c&&(0,d.ZV)(w)&&me({chatId:g})}),[w,g,c,F,me]);const Le=(0,i.sO)(!1);(0,Pe.Z)((e=>{let[t,n]=e;Le.current=Boolean(g===t&&Se&&!n)}),[g,Se]),(0,i.bt)((()=>{ge.current&&(ge.current.innerHTML='')}),[]);const[Ue,$e]=(0,i.eJ)([]),[De,qe,je]=(0,Oe.Z)(),[Ge,He,_e]=(0,Oe.Z)(),[Ve,Xe,Ke]=(0,Oe.Z)(),[We,Je,Qe]=(0,Oe.Z)(),[et,tt,nt]=(0,Oe.Z)(),[at,st]=(0,Oe.Z)(),[it,ot,rt]=(0,Oe.Z)(),{startRecordingVoice:ct,stopRecordingVoice:lt,pauseRecordingVoice:dt,activeVoiceRecording:ut,currentRecordTime:mt,recordButtonRef:ht,startRecordTimeRef:gt}=(()=>{const e=(0,i.sO)(null),[t,n]=(0,i.eJ)(),a=(0,i.sO)(),[s,o]=(0,i.eJ)();(0,i.d4)((()=>{h.s$&&h.mh&&Es()}),[]);const r=(0,i.I4)((async()=>{try{const{stop:t,pause:s}=await Ms((t=>{e.current&&(a.current&&Date.now()%4==0&&(e.current.style.boxShadow=`0 0 0 ${50*(t||0)}px rgba(0,0,0,.15)`),o(Date.now()))}));a.current=Date.now(),o(Date.now()),n({stop:t,pause:s})}catch(e){console.error(e)}}),[]),c=(0,i.I4)((()=>{if(t){e.current&&(e.current.style.boxShadow="none");try{return t.pause()}catch(e){return void console.error(e)}}}),[t]),l=(0,i.I4)((()=>{if(t){n(void 0),a.current=void 0,o(void 0),e.current&&(e.current.style.boxShadow="none");try{return t.stop()}catch(e){return void console.error(e)}}}),[t]);return(0,i.d4)((()=>t?(0,Be.Z)(l):void 0),[t,l]),{startRecordingVoice:r,pauseRecordingVoice:c,stopRecordingVoice:l,activeVoiceRecording:t,currentRecordTime:s,recordButtonRef:e,startRecordTimeRef:a}})();(0,wn.Z)((()=>{Ne({type:"recordAudio"})}),ut&&s.o_),(0,i.d4)((()=>{ut||Ne({type:"cancel"})}),[ut,Ne]);const ft=m?gi.Edit:!h.mh||ut||pe&&!Ue.length||R?n?gi.Schedule:gi.Send:gi.Record,pt=!n,{isMentionTooltipOpen:vt,closeMentionTooltip:It,insertMention:yt,mentionFilteredUsers:wt}=(0,Bs.Z)(!Ue.length,Ie,ve,void 0,x,O,U),{isOpen:Pt,id:Ct,isGallery:bt,switchPm:St,results:Et,closeTooltip:Rt,help:kt,loadMore:Nt}=function(e,t,n,s){const{queryInlineBot:o,resetInlineBot:r}=(0,a.Sv)(),[c,l,d]=(0,Oe.Z)(),{username:u,query:m,canShowHelp:h,usernameLowered:g}=xs((()=>function(e){const t=function(e){return Fs.innerHTML=e.replace(/
/g,"\n"),Fs.innerText}(e),n=t.match(Ls);return n?{username:n[1],query:n[2],canShowHelp:""===n[2]&&!t.match(Os),usernameLowered:n[1].toLowerCase()}:Us}(n)),300,[n])||{},f=(0,Mt.Z)(m),p=(0,Mt.Z)(u),v=g?null==s?void 0:s[g]:void 0,{id:I,switchPm:y,offset:w,results:Z,isGallery:P,help:C}=v||{};(0,i.d4)((()=>{f!==m&&d()}),[f,m,d]),(0,i.d4)((()=>{e&&g&&t&&o({chatId:t,username:g,query:m})}),[m,e,o,t,g]);const b=(0,i.I4)((()=>{o({chatId:t,username:g,query:m,offset:w})}),[w,t,m,o,g]);return(0,i.d4)((()=>{e&&I&&(y||null!=Z&&Z.length)?l():d()}),[I,e,l,Z,y,d]),p!==u&&r({username:p}),{isOpen:c,id:I,isGallery:P,switchPm:y,results:Z,closeTooltip:d,help:h&&C?`@${u} ${C}`:void 0,loadMore:b}}(Boolean(!Ue.length&&F),g,pe,H),{isOpen:Tt,close:At,filteredBotCommands:Bt}=function(e,t,n,a){const[s,o,r]=(0,Oe.Z)(),[c,l]=(0,i.eJ)(),d=(0,i.I4)((e=>{n||a?$s((()=>{const t=(n||a||[]).filter((t=>{let{command:n}=t;return!e||n.includes(e)}));l(t&&t.length?t:void 0)})):l(void 0)}),[n,a]);return(0,i.d4)((()=>{if(e&&t.length)if(t.startsWith("/")){const e=(0,Is._)(t.substr(1)).match(Ds);d(e?e[0]:"")}else l(void 0);else l(void 0)}),[d,t,e,r]),(0,i.d4)((()=>{c&&c.length&&t.length>0?o():r()}),[c,t.length,o,r]),{isOpen:s,close:r,filteredBotCommands:c}}(Boolean(z&&z.length||V&&V.length),pe,z,V),{isContextMenuOpen:xt,handleContextMenu:Lt,handleContextMenuClose:Ot,handleContextMenuHide:Ut}=(0,Sn.Z)(ht,!(ft===gi.Send&&pt)),{canSendStickers:Ft,canSendGifs:$t,canAttachMedia:Dt,canAttachPolls:qt,canAttachEmbedLinks:jt}=(0,i.Ye)((()=>(0,d.H5)(w,P)),[w,P]),Gt=w&&(0,d.Nl)(w),Ht=(0,d.Hd)(w),{isStickerTooltipOpen:_t,closeStickerTooltip:zt}=function(e,t,n){let s=arguments.length>3&&void 0!==arguments[3]&&arguments[3];const o=(0,i.Ye)((()=>(0,Is._)(t).trim()),[t]),{loadStickersForEmoji:r,clearStickersForEmoji:c}=(0,a.Sv)(),l=h.op&&1===(0,vs.Z)(o)||!h.op&&Boolean(t.match(/^]*?>$/g)),d=Boolean(n)&&l;return(0,i.d4)((()=>{var t;s||(e&&l?r({emoji:h.op?o:null===(t=o.match(/alt="(.+)"/))||void 0===t?void 0:t[1]}):!d&&l||c())}),[t,l,c,r,e,s]),{isStickerTooltipOpen:d,closeStickerTooltip:c}}(Boolean(D&&Ft&&!Ue.length),pe,B,!c),{isEmojiTooltipOpen:Vt,closeEmojiTooltip:Xt,filteredEmojis:Kt,insertEmoji:Wt}=(0,As.Z)(Boolean(D&&Ft&&!Ue.length),Ie,G,void 0,ve,q,j,!c),Yt=(0,i.I4)((function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:s.R2;const n=window.getSelection(),a=document.getElementById(t),i=(0,nn.Z)(e,["escape_html","emoji_html","br_html"]).join("").replace(/\u200b+/g,"​");if(n.rangeCount){const e=n.getRangeAt(0);if((0,gs.R)(e,t))return hs(i),void a.dispatchEvent(new Event("input",{bubbles:!0}))}ve(`${Ie.current}${i}`),requestAnimationFrame((()=>{(0,ls.Z)(a)}))}),[Ie]),Jt=(0,i.I4)((()=>{const e=window.getSelection();if(e.rangeCount){const t=e.getRangeAt(0);if((0,gs.R)(t,s.R2))return void document.execCommand("delete",!1)}ve(function(e){const t=document.createElement("div");t.contentEditable="true",t.style.position="absolute",t.style.left="-10000px",t.style.top="-10000px",t.innerHTML=e,document.body.appendChild(t);let n=t.lastChild;if(n.lastChild)for(;n.lastChild;)n=n.lastChild;const a=n.textContent.length,s=document.createRange(),i=window.getSelection();s.setStart(n,a),s.setEnd(n,a),i.removeAllRanges(),i.addRange(s),document.execCommand("delete",!1);const o=t.innerHTML;return document.body.removeChild(t),o}(Ie.current))}),[Ie]),Qt=(0,i.I4)((function(){let e=arguments.length>0&&void 0!==arguments[0]&&arguments[0];e||ve(""),$e(l.D),zt(),It(),Xt(),h.wB?setTimeout((()=>Ke()),350):Ke()}),[zt,It,Xt,Ke]),en=(0,i.sO)();en.current=lt,(0,i.d4)((()=>()=>{en.current(),Qt()}),[g,Qt,en]);const[tn,an]=((e,t,n,o,r,c,l,u,m,h)=>{const{editMessage:g,setEditingDraft:f}=(0,a.Sv)();(0,hn.Z)((e=>{let[a]=e;if(!n)return;if((null==a?void 0:a.id)===n.id)return;const i=(0,va.z)(null!=h&&h.text.length?h:n.content.text);t(i),requestAnimationFrame((()=>{const e=document.getElementById(s.R2);(0,ls.Z)(e,!0)}))}),[n,t]),(0,i.d4)((()=>{if(n)return()=>{const t=(0,v.Z)(e.current),n=t.text.length?t:void 0;f({chatId:c,threadId:l,type:u,text:n})}}),[c,n,e,f,l,u]);const p=(0,i.I4)((()=>{m&&(0,E.T2)((()=>{t((0,va.z)(m));const e=document.getElementById(s.R2);requestAnimationFrame((()=>{(0,ls.Z)(e,!0)}))}))}),[m,t]),I=(0,i.I4)((()=>{o(),p()}),[o,p]),y=(0,i.I4)((()=>{const{text:t,entities:a}=(0,v.Z)(e.current);n&&(t||(0,d.u8)(n)?(g({messageId:n.id,text:t,entities:a}),o(),p()):r())}),[g,n,e,r,o,p]),w=(0,i.I4)((()=>{if(!n)return;const t=(0,v.Z)(e.current),a=t.text.length?t:void 0;f({chatId:c,threadId:l,type:u,text:a})}),[c,n,e,f,l,u]);return(0,we.Z)(w),Ze(w),[y,I]})(Ie,ve,m,Qt,tt,g,p,I,y,Y);((e,t,n,o,r,c)=>{const{saveDraft:l,clearDraft:d}=(0,a.Sv)(),u=(0,i.I4)(((e,t)=>{const n=o.current;c||(n.length?l({chatId:e,threadId:t,draft:(0,v.Z)(n)}):void 0!==n&&d({chatId:e,threadId:t}))}),[d,c,o,l]),m=(0,i.Ye)((()=>(0,E.Ds)((e=>e()),s.r_,!1)),[t]),g=(0,Mt.Z)(t),f=(0,Mt.Z)(n);(0,i.d4)((()=>(Ns=t,Ts=n,()=>{Ns=void 0,Ts=void 0,u(t,n)})),[t,n,u]),(0,i.d4)((()=>{t===g&&n===f||!c&&e&&(r((0,va.z)(e)),h.$b||requestAnimationFrame((()=>{const e=document.getElementById(s.R2);(0,ls.Z)(e,!0)})))}),[t,n,e,r,u,g,f,c]);const p=o.current,I=(0,Mt.Z)(p);(0,i.d4)((()=>{t&&n&&g===t&&f===n&&I!==p&&(p.length?m((()=>{Ns===t&&Ts===n&&u(t,n)})):u(t,n))}),[t,p,g,I,f,m,n,u]);const y=(0,i.I4)((()=>{t&&n&&u(t,n)}),[t,n,u]);(0,we.Z)(y),Ze(y)})(y,g,p,Ie,ve,m),((e,t,n)=>{(0,i.d4)((()=>{async function a(a){if(!a.clipboardData)return;const i=document.activeElement;if(i&&![s.R2,s.nY].includes(i.id))return;const o=a.clipboardData.getData("text").substring(0,4096),{items:r}=a.clipboardData;let c=[];if(a.preventDefault(),r.length>0&&(c=await(0,Rs.Z)(r)),0!==c.length||o){if(c.length>0&&!n){const e=await Promise.all(c.map((e=>ms(e.name,e,1===c.length&&ks.includes(e.type)))));t((t=>t.concat(e)))}o&&e(o,null==i?void 0:i.id)}}return document.addEventListener("paste",a,!1),()=>{document.removeEventListener("paste",a,!1)}}),[e,n,t])})(Yt,$e,m);const sn=(0,i.I4)((()=>{m&&an()}),[m,an]),on=(0,i.I4)((async(e,t)=>{$e(await Promise.all(e.map((e=>ms(e.name,e,t)))))}),[]),cn=(0,i.I4)((async(e,t)=>{$e([...Ue,...await Promise.all(e.map((e=>ms(e.name,e,t))))])}),[Ue]),ln=(0,i.I4)((()=>{$e(l.D)}),[]),dn=(0,i.I4)((async function(){let e=arguments.length>0&&void 0!==arguments[0]&&arguments[0],t=arguments.length>1?arguments[1]:void 0;if("connectionStateReady"!==Z)return;let n=Ue;if(ut){const e=await lt();if(e){const{blob:t,duration:a,waveform:s}=e;n=[await ms(fi,t,!1,{voice:{duration:a,waveform:s}})]}}const{text:i,entities:o}=(0,v.Z)(Ie.current);if(!n.length&&!i&&!R)return;const{serverTimeOffset:r}=(0,a.Rd)(),c=n.length?1024:4096;if((null==i?void 0:i.length)>c){const e=i.length-c;return void te({data:{message:"MESSAGE_TOO_LONG_PLEASE_REMOVE_CHARACTERS",textParams:{"{EXTRA_CHARS_COUNT}":e,"{PLURAL_S}":e>1?"s":""},hasErrorKey:!0}})}const l=document.getElementById(s.R2);if(n.length||i){if(Ht&&!Gt){const e=(0,f.b)(r),t=ye.current&&Math.floor(e-ye.current),n=Ht.nextSendDate&&Ht.nextSendDate>e;if(t&&t{Qt()}))}),[Z,Ue,ut,R,ee,g,Qt,lt,te,Ht,Gt,J,se,he,Ie]),un=(0,i.I4)((()=>{Ke(),He()}),[Ke,He]),mn=(0,i.I4)((()=>{_e(),Qe(),Xe()}),[_e,Qe,Xe]),gn=(0,i.I4)(((e,t)=>{if(e&&"queryId"in e){const{id:n,queryId:a,isSilent:s}=e;return void de({id:n,queryId:a,scheduledAt:t,isSilent:s})}const{isSilent:n,...a}=e||{};e&&0!==Object.keys(a).length?J({...e,scheduledAt:t}):dn(Boolean(n),t)}),[dn,de,J]);(0,i.d4)((()=>{$&&Ae((e=>{gn($,e)}))}),[$,gn,Ae]);const fn=(0,i.I4)((function(e,t,a){let s=arguments.length>3&&void 0!==arguments[3]&&arguments[3];e={...e,isPreloadedGlobally:!0},n||a?(Re(),Ae((n=>{ke(),gn({sticker:e,isSilent:t},n),requestAnimationFrame((()=>{Qt(s)}))}))):(J({sticker:e,isSilent:t}),requestAnimationFrame((()=>{Qt(s)})))}),[n,Re,Ae,ke,gn,Qt,J]),pn=(0,i.I4)(((e,t,a)=>{n||a?(Re(),Ae((n=>{ke(),gn({gif:e,isSilent:t},n),requestAnimationFrame((()=>{Qt(!0)}))}))):(J({gif:e,isSilent:t}),requestAnimationFrame((()=>{Qt(!0)})))}),[n,Re,Ae,ke,gn,Qt,J]),vn=(0,i.I4)(((e,t,a)=>{if("connectionStateReady"!==Z)return;n||a?Ae((n=>{gn({id:e.id,queryId:e.queryId,isSilent:t},n)})):de({id:e.id,queryId:e.queryId,isSilent:t});const i=document.getElementById(s.R2);h.cj&&i===document.activeElement&&ps(i),ee({chatId:g,localOnly:!0}),requestAnimationFrame((()=>{Qt()}))}),[g,ee,Z,gn,Ae,Qt,de,n]),In=(0,i.I4)((()=>{ee({chatId:g,localOnly:!0}),requestAnimationFrame((()=>{Qt()}))}),[g,ee,Qt]),yn=(0,i.I4)((e=>{n?(Ae((t=>{gn({poll:e},t)})),oe()):(J({poll:e}),oe())}),[oe,gn,Ae,J,n]),Zn=(0,i.I4)((()=>{n?Ae((e=>{gn({isSilent:!0},e)})):dn(!0)}),[gn,dn,Ae,n]),Pn=(0,i.I4)((e=>{"stickers"===e?(ne({query:""}),ae({query:void 0})):(ae({query:""}),ne({query:void 0}))}),[ne,ae]),Cn=(0,i.I4)((()=>{const e=document.getElementById(s.R2);h.wB&&e===document.activeElement?(e.blur(),setTimeout((()=>{_e(),Xe()}),100)):Xe()}),[Xe,_e]),bn=(0,i.I4)((()=>{const e=document.getElementById(s.R2);if(!h.wB||e!==document.activeElement)return _e(),Ke(),void Je();e.blur(),setTimeout((()=>{_e(),Ke(),Je()}),100)}),[_e,Ke,Je]),En=(0,i.I4)((()=>{ce({id:g,threadId:p,type:"scheduled"})}),[ce,g,p]);(0,i.d4)((()=>{S&&h.wB&&Ke()}),[S,Ke]),(0,i.d4)((()=>{c&&(M?ot():setTimeout((()=>{rt()}),200))}),[M,rt,ot,c]);const Mn=(0,i.I4)((()=>{switch(ft){case gi.Send:dn();break;case gi.Record:ct();break;case gi.Edit:tn();break;case gi.Schedule:ut&&dt(),Ae((e=>{gn({},e)}))}}),[ft,dn,ct,tn,ut,Ae,dt,gn]),Rn=ft===gi.Record&&!Dt,kn=(0,Mt.Z)(m,!0),Nn=m||kn,Tn=new Date;Tn.setSeconds(0),Tn.setMilliseconds(0);const An=new Date;An.setFullYear(An.getFullYear()+1);let Bn="SendMessage";switch(ft){case gi.Edit:Bn="Save edited message";break;case gi.Record:Bn=Rn?"Conversation.DefaultRestrictedMedia":"AccDescrVoiceMessage"}const xn=(0,fe.Z)("Composer",!M&&"shown",it&&"hover-disabled"),Ln=(0,fe.Z)("mobile-symbol-menu-button",!c&&"not-ready",at?Ve&&"menu-opened":Ve&&"is-loading"),On=(0,i.I4)((()=>{Ae((e=>{gn({},e)}))}),[gn,Ae]),Un=ft===gi.Edit?tn:ft===gi.Schedule?On:dn;return i.ZP.createElement("div",{className:xn},Dt&&c&&i.ZP.createElement(di,{isOpen:t!==Zt.t.None,withQuick:t===Zt.t.QuickFile||Ce===Zt.t.QuickFile,onHide:u,onFileSelect:on}),i.ZP.createElement(ri,{chatId:g,threadId:p,canShowCustomSendMenu:pt,attachments:Ue,caption:Ue.length?pe:"",groupChatMembers:x,currentUserId:U,recentEmojis:G,isReady:c,isChatWithSelf:C,onCaptionUpdate:ve,baseEmojiKeywords:q,emojiKeywords:j,addRecentEmoji:le,shouldSchedule:n,onSendSilent:Zn,onSend:dn,onSendScheduled:On,onFileAppend:cn,onClear:ln}),i.ZP.createElement(li,{isOpen:Boolean(k),shouldBeAnonimous:b,onClear:oe,onSend:yn}),Nn&&i.ZP.createElement(js,{isOpen:et,isSchedule:"scheduled"===I,onClose:nt,message:Nn}),i.ZP.createElement(hi,{isOpen:We,onClose:Qe,chatId:g,selectedSendAsId:W,sendAsIds:Se}),i.ZP.createElement(Js,{isOpen:vt,onClose:It,onInsertUserName:yt,filteredUsers:wt}),i.ZP.createElement(Ys,{isOpen:Pt,botId:Ct,isGallery:bt,inlineBotResults:Et,switchPm:St,onSelectResult:vn,loadMore:Nt,onClose:Rt,isSavedMessages:C,canSendGifs:$t}),i.ZP.createElement(ni,{isOpen:Tt,withUsername:Boolean(V),botCommands:Bt,onClick:In,onClose:At}),i.ZP.createElement("div",{id:"message-compose"},i.ZP.createElement("div",{className:"svg-appendix",ref:ge}),i.ZP.createElement(oi,{onClear:sn}),i.ZP.createElement(mi,{chatId:g,threadId:p,messageText:Ue.length?"":pe,disabled:!jt}),i.ZP.createElement("div",{className:"message-input-wrapper"},P&&!1!==z&&!ut&&!m&&i.ZP.createElement(zs,{className:(0,fe.Z)("bot-commands",Ge&&"activated"),round:!0,disabled:void 0===z,color:"translucent",onActivate:un,ariaLabel:"Open bot command keyboard"},i.ZP.createElement("i",{className:"icon-bot-commands-filled"})),Ee&&(X||K)&&i.ZP.createElement(ze.Z,{round:!0,color:"translucent",onClick:We?Qe:bn,ariaLabel:he("SendMessageAsTitle"),className:(0,fe.Z)("send-as-button",Le.current&&"appear-animation")},i.ZP.createElement(rn.Z,{user:X,chat:K,size:"tiny"})),h.wB?i.ZP.createElement(ze.Z,{className:Ln,round:!0,color:"translucent",onClick:Ve?Ke:Cn,ariaLabel:"Choose emoji, sticker or GIF"},i.ZP.createElement("i",{className:"icon-smile"}),i.ZP.createElement("i",{className:"icon-keyboard"}),Ve&&!at&&i.ZP.createElement(Ye.Z,{color:"gray"})):i.ZP.createElement(zs,{className:Ve?"activated":"",round:!0,color:"translucent",onActivate:mn,ariaLabel:"Choose emoji, sticker or GIF"},i.ZP.createElement("i",{className:"icon-smile"})),i.ZP.createElement(si.Z,{id:"message-input-text",chatId:g,threadId:p,html:Ue.length?"":pe,placeholder:ut&&be<=600?"":T||he("Message"),forcedPlaceholder:kt,canAutoFocus:c&&!Ue.length,shouldSuppressFocus:h.wB&&Ve,shouldSuppressTextFormatter:Vt||vt||Pt,onUpdate:ve,onSend:Un,onSuppressedFocus:Ke}),_&&Boolean(Ct)&&i.ZP.createElement(Ye.Z,{color:"gray"}),A&&i.ZP.createElement(ze.Z,{round:!0,faded:!0,className:"scheduled-button",color:"translucent",onClick:En,ariaLabel:"Open scheduled messages"},i.ZP.createElement("i",{className:"icon-schedule"})),N&&!ut&&!m&&i.ZP.createElement(zs,{className:De?"activated":"",round:!0,color:"translucent",onActivate:qe,ariaLabel:"Open bot command keyboard"},i.ZP.createElement("i",{className:"icon-bot-command"})),ut&&mt&&i.ZP.createElement("span",{className:"recording-state"},(0,L.rM)(mt-gt.current)),i.ZP.createElement(ei,{chatId:g,threadId:p,isOpen:_t,onStickerSelect:fn}),i.ZP.createElement(ti.Z,{isOpen:Vt,emojis:Kt,onClose:Xt,onEmojiSelect:Wt,addRecentEmoji:le}),i.ZP.createElement(Ks,{isButtonVisible:!ut&&!m,canAttachMedia:Dt,canAttachPolls:qt,onFileSelect:on,onPollCreate:ie}),N&&i.ZP.createElement(ai,{messageId:N,isOpen:De,onClose:je}),z&&i.ZP.createElement(ci,{isOpen:Ge,botCommands:z,onClose:_e}),i.ZP.createElement(Ws,{chatId:g,threadId:p,isOpen:Ve||Me,canSendGifs:$t,canSendStickers:Ft,onLoad:st,onClose:Ke,onEmojiSelect:Yt,onStickerSelect:fn,onGifSelect:pn,onRemoveSymbol:Jt,onSearchOpen:Pn,addRecentEmoji:le}))),ut&&i.ZP.createElement(ze.Z,{round:!0,color:"danger",className:"cancel",onClick:lt,ariaLabel:"Cancel voice recording"},i.ZP.createElement("i",{className:"icon-delete"})),i.ZP.createElement(ze.Z,{ref:ht,round:!0,color:"secondary",className:(0,fe.Z)(ft,!c&&"not-ready",ut&&"recording"),disabled:Rn,ariaLabel:he(Bn),onClick:Mn,onContextMenu:ft===gi.Send&&pt?Lt:void 0},i.ZP.createElement("i",{className:"icon-send"}),i.ZP.createElement("i",{className:"icon-schedule"}),i.ZP.createElement("i",{className:"icon-microphone-alt"}),i.ZP.createElement("i",{className:"icon-check"})),pt&&i.ZP.createElement(Qs.Z,{isOpen:xt,onSendSilent:C?void 0:Zn,onSendSchedule:n?void 0:On,onClose:Ot,onCloseAnimationEnd:Ut,isSavedMessages:C}),xe)}))),vi=(0,i.X$)((e=>{const{isActive:t}=e,n=(0,ot.Z)(it.gl.Extra,"MobileSearch",!t,!0);return n?i.ZP.createElement(n,e):void 0})),Ii=(0,i.X$)((e=>{const{isActive:t}=e,n=(0,ot.Z)(it.gl.Extra,"MessageSelectToolbar",!t);return n?i.ZP.createElement(n,e):void 0})),yi=(0,i.X$)((e=>{const{isOpen:t}=e,n=(0,ot.Z)(it.gl.Extra,"UnpinAllMessagesModal",!t);return n?i.ZP.createElement(n,e):void 0})),wi=(0,i.X$)((e=>{const{isOpen:t}=e,n=(0,ot.Z)(it.gl.Extra,"PaymentModal",!t);return n?i.ZP.createElement(n,e):void 0})),Zi=(0,i.X$)((e=>{const{isOpen:t}=e,n=(0,ot.Z)(it.gl.Extra,"ReceiptModal",!t);return n?i.ZP.createElement(n,e):void 0})),Pi=(0,i.X$)((e=>{const{isOpen:t}=e,n=(0,ot.Z)(it.gl.Extra,"SeenByModal",!t);return n?i.ZP.createElement(n,e):void 0})),Ci=(0,i.X$)((e=>{const{activeEmojiInteraction:t}=e,n=(0,ot.Z)(it.gl.Extra,"EmojiInteractionAnimation",!t);return n?i.ZP.createElement(n,e):void 0})),bi=(0,i.X$)((e=>{const{isOpen:t}=e,n=(0,ot.Z)(it.gl.Extra,"ReactorListModal",!t);return n?i.ZP.createElement(n,e):void 0})),Si=h.wB?450+s.fK:void 0;function Ei(e){return"file"===e.kind&&e.type&&s.oG.has(e.type)}const Mi=(0,i.X$)((0,a.c$)((e=>{const t=(0,c.Pu)(e),{isBlurred:n,background:a,backgroundColor:s,patternColor:i}=e.settings.themes[t]||{},{messageLists:r}=e.messages,l=(0,c.Bt)(e),{isLeftColumnShown:u,chats:{listIds:m},activeEmojiInteractions:g,lastSyncTime:f}=e,p={theme:t,customBackground:a,backgroundColor:s,patternColor:i,isLeftColumnShown:u,isRightColumnShown:(0,c.Jf)(e),isBackgroundBlurred:n,isMobileSearchActive:Boolean(h.wB&&(0,c.n5)(e)),isSelectModeActive:(0,c.CA)(e),isPaymentModalOpen:e.payment.isPaymentModalOpen,isReceiptModalOpen:Boolean(e.payment.receipt),isSeenByModalOpen:Boolean(e.seenByModal),isReactorListModalOpen:Boolean(e.reactorModal),animationLevel:e.settings.byKey.animationLevel,currentTransitionKey:Math.max(0,e.messages.messageLists.length-1),activeEmojiInteractions:g,lastSyncTime:f};if(!l||!m.active)return p;const{chatId:v,threadId:I,type:y}=l,w=(0,d.YC)(v),Z=(0,c.Z1)(e,v),P=(0,c.IK)(e,v),C=(0,c.KB)(e,v),{chatId:b,messageId:S}=e.audioPlayer,E=Z&&(0,d.Qm)(Z,I),M=(0,c.pk)(e,v),R="pinned"===y,k="scheduled"===y,N="thread"===y&&I===o._f,T=Boolean(Z&&(0,d.eA)(Z)),A=Boolean(Z&&N&&(T||(0,d.ZV)(Z))&&Z.isNotJoined),B=Boolean(P&&(0,c.s4)(e,P.id)),x=!B&&M;return{...p,chatId:v,threadId:I,messageListType:y,isPrivate:w,areChatSettingsLoaded:Boolean(null==Z?void 0:Z.settings),canPost:!R&&(!Z||E)&&!M,isPinnedMessageList:R,isScheduledMessageList:k,currentUserBannedRights:null==Z?void 0:Z.currentUserBannedRights,defaultBannedRights:null==Z?void 0:Z.defaultBannedRights,hasPinnedOrAudioPlayer:I!==o._f||Boolean(!R&&(null==C?void 0:C.length))||Boolean(b&&S),pinnedMessagesCount:C?C.length:0,shouldSkipHistoryAnimations:e.shouldSkipHistoryAnimations,messageLists:r,isChannel:T,canSubscribe:A,canStartBot:x,canRestartBot:B}}))((e=>{let{chatId:t,threadId:n,messageListType:o,isPrivate:r,isPinnedMessageList:c,messageLists:l,canPost:u,currentUserBannedRights:m,defaultBannedRights:g,hasPinnedOrAudioPlayer:f,pinnedMessagesCount:p,customBackground:v,theme:I,backgroundColor:y,patternColor:w,isLeftColumnShown:Z,isRightColumnShown:P,isBackgroundBlurred:C,isMobileSearchActive:b,isSelectModeActive:S,isPaymentModalOpen:E,isReceiptModalOpen:M,isSeenByModalOpen:R,isReactorListModalOpen:k,animationLevel:N,shouldSkipHistoryAnimations:T,currentTransitionKey:A,isChannel:B,areChatSettingsLoaded:x,canSubscribe:L,canStartBot:O,canRestartBot:U,activeEmojiInteractions:F,lastSyncTime:$}=e;const{openChat:D,unpinAllMessages:q,loadUser:j,loadChatSettings:G,closeLocalTextSearch:H,exitMessageSelectMode:_,closePaymentModal:z,clearReceipt:V,joinChannel:X,sendBotCommand:K,restartBot:Q}=(0,a.Sv)(),{width:ee}=St(),te=(0,Fe.Z)(),[ne,ae]=(0,i.eJ)(Zt.t.None),[se,ie]=(0,i.eJ)(),[oe,re]=(0,i.eJ)(),[ce,le]=(0,i.eJ)(!1),de=f&&(ees._m&&ee=s.ks&&ee{e||o(!0)}),[e]),{isReady:s&&!c,handleOpenEnd:e?function(e){"transform"===e.propertyName&&e.target===e.currentTarget&&o(Boolean(a))}:void 0,handleSlideStop:e?function(){o(!0)}:void 0}}(!T&&N!==s.oB,A,Ce,t);(0,i.d4)((()=>t?(0,Be.Z)((()=>{D({id:void 0})})):void 0),[t,D]),(0,Pe.Z)((()=>{ae(Zt.t.None),ie(void 0),re(void 0)}),[t]),(0,i.d4)((()=>{const{visualViewport:e}=window;if(!e)return;const t=()=>{window.visualViewport.height!==document.documentElement.clientHeight?document.body.classList.add("keyboard-visible"):document.body.classList.remove("keyboard-visible")};return e.addEventListener("resize",t),()=>{e.removeEventListener("resize",t)}}),[]),(0,i.d4)((()=>{r&&j({userId:t})}),[t,r,j]),(0,i.d4)((()=>{!x&&$&&G({chatId:t})}),[t,r,x,$,G]);const ke=(0,i.I4)((e=>{if(h.$b)return;const{items:t}=e.dataTransfer||{},n=t&&t.length>0&&Array.from(t).filter((e=>"text/uri-list"!==e.type)).every(Ei);ae(n?Zt.t.QuickFile:Zt.t.Document)}),[]),Ne=(0,i.I4)((()=>{ae(Zt.t.None)}),[]),Te=(0,i.I4)((()=>{le(!0)}),[]),Ae=(0,i.I4)((()=>{le(!1)}),[]),xe=(0,i.I4)((()=>{q({chatId:t}),Ae(),D({id:t})}),[q,D,Ae,t]),Le=(0,i.I4)((()=>{D({id:t})}),[D,t]),Oe=(0,i.I4)((()=>{X({chatId:t})}),[X,t]),$e=(0,i.I4)((()=>{K({command:"/start"})}),[K]),De=(0,i.I4)((()=>{Q({chatId:t})}),[t,Q]),qe=((e,t)=>{const[n,a]=(0,i.eJ)(t);return(0,i.d4)((()=>{t&&(t.startsWith("#")?a(t):Ct.fetch(s.fo,e,Ct.Type.Blob).then((e=>{const t=URL.createObjectURL(e);(0,bt.pt)(t).then((()=>{a(`url(${t})`)}))})))}),[t,e]),t?n:void 0})(I,v),je=(0,fe.Z)(ye&&"has-header-tools",v&&"custom-bg-image",y&&"custom-bg-color",v&&C&&"blurred",h.aZ?"mask-image-disabled":"mask-image-enabled"),Ge=(0,fe.Z)("messaging-disabled",!S&&"shown"),He=(0,d.q8)(te,m,g),{composerHiddenScale:_e,toolbarHiddenScale:Ve,composerTranslateX:Xe,toolbarTranslateX:Ke,unpinHiddenScale:We,toolbarForUnpinHiddenScale:Ye}=(0,i.Ye)((()=>function(e,t){const n=e<=s.l3?16:32,a=function(e){if(e>s._m){const t=Math.min(Math.max(.25*e,J),Y),n=Math.min(.25*e,Y);return Math.min(e-t-n,W)}if(e>s.ks){const t=Math.min(Math.max(.4*e,J),Y);return Math.min(e-t,W)}return e>W?W:e}(e),i=e<=s.l3?54:64,o=t?a-n-i:a-n,r=e>s.l3?Math.min(a-n,512):a-n,c=r/o,l=o/r;return{composerHiddenScale:c,toolbarHiddenScale:l,composerTranslateX:t?i/2*l:0,toolbarTranslateX:t?i/2*-1*c:0,unpinHiddenScale:r/258,toolbarForUnpinHiddenScale:258/r}}(ee,Ie)),[Ie,ee]),Je=(0,fe.Z)("middle-column-footer",!Ie&&"no-composer",Ie&&oe&&!S&&"with-notch");(0,Me.ZP)(ue&&me,(()=>{D({id:void 0},{forceSyncOnIOs:!0})}),void 0,void 0,void 0,(null==l?void 0:l.map(Pt.q))||[]),(0,Me.ZP)(b,H),(0,Me.ZP)(S,_);const Qe=Boolean(!c&&!Ie&&!ve&&!pe&&!ge&&He),et=Boolean(ve||ge||pe||c),tt=Boolean(Qe||S||c);return i.ZP.createElement("div",{id:"MiddleColumn",className:je,onTransitionEnd:Ee,style:`\n --composer-hidden-scale: ${_e};\n --toolbar-hidden-scale: ${Ve};\n --unpin-hidden-scale: ${We};\n --toolbar-unpin-hidden-scale: ${Ye};\n --composer-translate-x: ${Xe}px;\n --toolbar-translate-x: ${Ke}px;\n --pattern-color: ${w};\n --theme-background-color:\n ${y||("dark"===I?s.It:s.p3)};\n `,onClick:h.p7&&Z?Le:void 0},i.ZP.createElement("div",{id:"middle-column-bg",style:qe?`--custom-background: ${qe}`:void 0}),i.ZP.createElement("div",{id:"middle-column-portals"}),ue&&me&&i.ZP.createElement(i.ZP.Fragment,null,i.ZP.createElement("div",{className:"messages-layout",onDragEnter:Ie?ke:void 0},i.ZP.createElement(un,{chatId:ue,threadId:me,messageListType:he,isReady:Se}),i.ZP.createElement(Ue.Z,{name:T?"none":N===s.zy?"slide":"fade",activeKey:A,shouldCleanup:!0,cleanupExceptionKey:be,onStop:Re},i.ZP.createElement(rs,{key:`${ue}-${me}-${he}`,chatId:ue,threadId:me,type:he,canPost:Ie,hasTools:ye,onFabToggle:ie,onNotchToggle:re,isReady:Se,withBottomShift:et}),i.ZP.createElement("div",{className:Je},Ie&&i.ZP.createElement(pi,{chatId:ue,threadId:me,messageListType:he,dropAreaState:ne,onDropHide:Ne,isReady:Se}),c&&i.ZP.createElement("div",{className:"middle-column-footer-button-container",dir:te.isRtl?"rtl":void 0},i.ZP.createElement(ze.Z,{size:"tiny",fluid:!0,color:"secondary",className:"unpin-all-button",onClick:Te},i.ZP.createElement("i",{className:"icon-unpin"}),i.ZP.createElement("span",null,te("Chat.Pinned.UnpinAll",p,"i")))),Qe&&i.ZP.createElement("div",{className:Ge},i.ZP.createElement("div",{className:"messaging-disabled-inner"},i.ZP.createElement("span",null,He))),h.wB&&ge&&i.ZP.createElement("div",{className:"middle-column-footer-button-container",dir:te.isRtl?"rtl":void 0},i.ZP.createElement(ze.Z,{size:"tiny",fluid:!0,ripple:!0,className:"join-subscribe-button",onClick:Oe},te(Ze?"ProfileJoinChannel":"ProfileJoinGroup"))),h.wB&&pe&&i.ZP.createElement("div",{className:"middle-column-footer-button-container",dir:te.isRtl?"rtl":void 0},i.ZP.createElement(ze.Z,{size:"tiny",fluid:!0,ripple:!0,className:"join-subscribe-button",onClick:$e},te("BotStart"))),h.wB&&ve&&i.ZP.createElement("div",{className:"middle-column-footer-button-container",dir:te.isRtl?"rtl":void 0},i.ZP.createElement(ze.Z,{size:"tiny",fluid:!0,ripple:!0,className:"join-subscribe-button",onClick:De},te("BotRestart"))),i.ZP.createElement(Ii,{messageListType:he,isActive:S,canPost:Ie}),i.ZP.createElement(wi,{isOpen:Boolean(E),onClose:z}),i.ZP.createElement(Zi,{isOpen:Boolean(M),onClose:V}),i.ZP.createElement(Pi,{isOpen:R}),i.ZP.createElement(bi,{isOpen:k}))),i.ZP.createElement(cs,{isShown:we,canPost:Ie,withExtraShift:tt})),h.wB&&i.ZP.createElement(vi,{isActive:Boolean(b)})),t&&i.ZP.createElement(yi,{isOpen:ce,chatId:t,pinnedMessagesCount:p,onClose:Ae,onUnpin:xe}),i.ZP.createElement("div",{teactFastList:!0},null==F?void 0:F.map(((e,t)=>i.ZP.createElement(Ci,{teactOrderKey:t,key:e.id,activeEmojiInteraction:e})))))}))),Ri=(0,E.Ds)((e=>e()),200,!1);var ki;!function(e){e[e.Profile=0]="Profile",e[e.MemberList=1]="MemberList",e[e.SharedMedia=2]="SharedMedia",e[e.Search=3]="Search",e[e.Statistics=4]="Statistics",e[e.Management=5]="Management",e[e.ManageInitial=6]="ManageInitial",e[e.ManageChannelSubscribers=7]="ManageChannelSubscribers",e[e.ManageChatAdministrators=8]="ManageChatAdministrators",e[e.ManageChatPrivacyType=9]="ManageChatPrivacyType",e[e.ManageDiscussion=10]="ManageDiscussion",e[e.ManageGroupPermissions=11]="ManageGroupPermissions",e[e.ManageGroupRemovedUsers=12]="ManageGroupRemovedUsers",e[e.ManageChannelRemovedUsers=13]="ManageChannelRemovedUsers",e[e.ManageGroupUserPermissionsCreate=14]="ManageGroupUserPermissionsCreate",e[e.ManageGroupUserPermissions=15]="ManageGroupUserPermissions",e[e.ManageGroupRecentActions=16]="ManageGroupRecentActions",e[e.ManageGroupAdminRights=17]="ManageGroupAdminRights",e[e.ManageGroupNewAdminRights=18]="ManageGroupNewAdminRights",e[e.ManageGroupMembers=19]="ManageGroupMembers",e[e.ManageGroupAddAdmins=20]="ManageGroupAddAdmins",e[e.StickerSearch=21]="StickerSearch",e[e.GifSearch=22]="GifSearch",e[e.PollResults=23]="PollResults",e[e.AddingMembers=24]="AddingMembers",e[e.ManageInvites=25]="ManageInvites",e[e.ManageEditInvite=26]="ManageEditInvite",e[e.ManageReactions=27]="ManageReactions",e[e.ManageInviteInfo=28]="ManageInviteInfo",e[e.ManageJoinRequests=29]="ManageJoinRequests"}(ki||(ki={}));const Ni=(0,i.X$)((0,a.c$)(((e,t)=>{var n,a,s,i;let{chatId:o,isProfile:r,isManagement:l}=t;const{query:u}=(0,c.n5)(e)||{},{query:m}=(0,c.y5)(e)||{},{query:h}=(0,c.yN)(e)||{},g=o?(0,c.Z1)(e,o):void 0,f=g&&(0,d.eA)(g),p=r&&o&&(0,d.YC)(o)?(0,c.dy)(e,o):void 0,v=p&&(0,d.kw)(p),I=Boolean(!l&&r&&!v&&g&&!(0,c.FM)(e,g.id)&&((0,d.YC)(g.id)||((0,d.Nl)(g)||g.isCreator)&&!g.isNotJoined)),y=Boolean(o&&(null===(n=e.management.byChatId[o])||void 0===n?void 0:n.editingInvite)),w=null==g||null===(a=g.fullInfo)||void 0===a?void 0:a.canViewStatistics,Z=o?null===(s=e.management.byChatId[o])||void 0===s||null===(i=s.inviteInfo)||void 0===i?void 0:i.invite:void 0;return{canManage:I,canAddContact:v,canViewStatistics:w,isChannel:f,userId:null==p?void 0:p.id,messageSearchQuery:u,stickerSearchQuery:m,gifSearchQuery:h,isEditingInvite:y,currentInviteInfo:Z}}))((e=>{var t;let{chatId:n,isColumnOpen:s,isProfile:o,isSearch:r,isManagement:c,isStatistics:l,isStickerSearch:d,isGifSearch:u,isPollResults:g,isAddingChatMembers:f,profileState:p,managementScreen:v,canAddContact:I,userId:y,canManage:w,isChannel:Z,onClose:P,onScreenSelect:C,messageSearchQuery:b,stickerSearchQuery:S,gifSearchQuery:E,shouldSkipAnimation:M,isEditingInvite:R,canViewStatistics:k,currentInviteInfo:N}=e;const{setLocalTextSearchQuery:T,setStickerSearchQuery:A,setGifSearchQuery:B,searchTextMessagesLocal:x,toggleManagement:O,openHistoryCalendar:U,openAddContactDialog:F,toggleStatistics:$,setEditingExportedInvite:D,deleteExportedChatInvite:q}=(0,a.Sv)(),j=(0,i.sO)(null),[G,H,_]=(0,Oe.Z)(),z=(0,i.I4)((()=>{D({chatId:n,invite:N}),C(m.u1.EditInvite)}),[n,N,C,D]),V=(0,i.I4)((()=>{q({chatId:n,link:N.link}),C(m.u1.Invites),_()}),[n,_,N,q,C]),X=(0,i.I4)((e=>{T({query:e}),e.length&&Ri(x)}),[x,T]),K=(0,i.I4)((e=>{A({query:e})}),[A]),W=(0,i.I4)((e=>{B({query:e})}),[B]),Y=(0,i.I4)((()=>{F({userId:y})}),[F,y]),[J,Q]=(0,i.eJ)(!s);(0,i.d4)((()=>{setTimeout((()=>{Q(!s)}),300)}),[s]);const ee=(0,Fe.Z)(),te=o?p===m.vi.Profile?ki.Profile:p===m.vi.SharedMedia?ki.SharedMedia:p===m.vi.MemberList?ki.MemberList:-1:r?ki.Search:g?ki.PollResults:d?ki.StickerSearch:u?ki.GifSearch:f?ki.AddingMembers:c?v===m.u1.Initial?ki.ManageInitial:v===m.u1.ChatPrivacyType?ki.ManageChatPrivacyType:v===m.u1.Discussion?ki.ManageDiscussion:v===m.u1.ChannelSubscribers?ki.ManageChannelSubscribers:v===m.u1.GroupPermissions?ki.ManageGroupPermissions:v===m.u1.ChatAdministrators?ki.ManageChatAdministrators:v===m.u1.GroupRemovedUsers?ki.ManageGroupRemovedUsers:v===m.u1.ChannelRemovedUsers?ki.ManageChannelRemovedUsers:v===m.u1.GroupUserPermissionsCreate?ki.ManageGroupUserPermissionsCreate:v===m.u1.GroupUserPermissions?ki.ManageGroupUserPermissions:v===m.u1.GroupRecentActions?ki.ManageGroupRecentActions:v===m.u1.ChatAdminRights?ki.ManageGroupAdminRights:v===m.u1.ChatNewAdminRights?ki.ManageGroupNewAdminRights:v===m.u1.GroupMembers?ki.ManageGroupMembers:v===m.u1.Invites?ki.ManageInvites:v===m.u1.EditInvite?ki.ManageEditInvite:v===m.u1.GroupAddAdmins?ki.ManageGroupAddAdmins:v===m.u1.Reactions?ki.ManageReactions:v===m.u1.InviteInfo?ki.ManageInviteInfo:v===m.u1.JoinRequests?ki.ManageJoinRequests:void 0:l?ki.Statistics:void 0,ne=null!==(t=(0,Tt.Z)(te,!0))&&void 0!==t?t:-1,ae=h.wB||te===ki.SharedMedia||te===ki.MemberList||te===ki.AddingMembers||c,se=(0,fe.Z)("animated-close-icon",ae&&"state-back",(J||M)&&"no-transition");return i.ZP.createElement("div",{className:"RightHeader"},i.ZP.createElement(ze.Z,{className:"close-button",round:!0,color:"translucent",size:"smaller",onClick:P,ariaLabel:ee(ae?"Common.Back":"Common.Close")},i.ZP.createElement("div",{ref:j,className:se})),i.ZP.createElement(Ue.Z,{name:J||M?"none":"slide-fade",activeKey:ne},function(){if(-1!==ne)switch(ne){case ki.PollResults:return i.ZP.createElement("h3",null,ee("PollResults"));case ki.Search:return i.ZP.createElement(i.ZP.Fragment,null,i.ZP.createElement(Ve.Z,{parentContainerClassName:"RightSearch",value:b,onChange:X}),i.ZP.createElement(ze.Z,{round:!0,size:"smaller",color:"translucent",onClick:()=>U({selectedAt:(0,L._F)(Date.now())}),ariaLabel:"Search messages by date"},i.ZP.createElement("i",{className:"icon-calendar"})));case ki.AddingMembers:return i.ZP.createElement("h3",null,ee(Z?"ChannelAddSubscribers":"GroupAddMembers"));case ki.ManageInitial:return i.ZP.createElement("h3",null,ee("Edit"));case ki.ManageChatPrivacyType:return i.ZP.createElement("h3",null,ee(Z?"ChannelTypeHeader":"GroupTypeHeader"));case ki.ManageDiscussion:return i.ZP.createElement("h3",null,ee("Discussion"));case ki.ManageChatAdministrators:return i.ZP.createElement("h3",null,ee("ChannelAdministrators"));case ki.ManageGroupRecentActions:return i.ZP.createElement("h3",null,ee("Group.Info.AdminLog"));case ki.ManageGroupAdminRights:return i.ZP.createElement("h3",null,ee("EditAdminRights"));case ki.ManageGroupNewAdminRights:return i.ZP.createElement("h3",null,ee("SetAsAdmin"));case ki.ManageGroupPermissions:return i.ZP.createElement("h3",null,ee("ChannelPermissions"));case ki.ManageGroupRemovedUsers:return i.ZP.createElement("h3",null,ee("BlockedUsers"));case ki.ManageChannelRemovedUsers:return i.ZP.createElement("h3",null,ee("ChannelBlockedUsers"));case ki.ManageGroupUserPermissionsCreate:return i.ZP.createElement("h3",null,ee("ChannelAddException"));case ki.ManageGroupUserPermissions:return i.ZP.createElement("h3",null,ee("UserRestrictions"));case ki.ManageInvites:return i.ZP.createElement("h3",null,ee("lng_group_invite_title"));case ki.ManageEditInvite:return i.ZP.createElement("h3",null,ee(R?"EditLink":"NewLink"));case ki.ManageInviteInfo:return i.ZP.createElement(i.ZP.Fragment,null,i.ZP.createElement("h3",null,ee("InviteLink")),i.ZP.createElement("section",{className:"tools"},N&&!N.isRevoked&&i.ZP.createElement(ze.Z,{round:!0,color:"translucent",size:"smaller",ariaLabel:ee("Edit"),onClick:z},i.ZP.createElement("i",{className:"icon-edit"})),N&&N.isRevoked&&i.ZP.createElement(i.ZP.Fragment,null,i.ZP.createElement(ze.Z,{round:!0,color:"danger",size:"smaller",ariaLabel:ee("Delete"),onClick:H},i.ZP.createElement("i",{className:"icon-delete"})),i.ZP.createElement(Dt.Z,{isOpen:G,onClose:_,title:ee("DeleteLink"),text:ee("DeleteLinkHelp"),confirmIsDestructive:!0,confirmLabel:ee("Delete"),confirmHandler:V}))));case ki.ManageJoinRequests:return i.ZP.createElement("h3",null,ee(Z?"SubscribeRequests":"MemberRequests"));case ki.ManageGroupAddAdmins:return i.ZP.createElement("h3",null,ee("Channel.Management.AddModerator"));case ki.StickerSearch:return i.ZP.createElement(Ve.Z,{value:S,placeholder:ee("SearchStickersHint"),autoFocusSearch:!0,onChange:K});case ki.GifSearch:return i.ZP.createElement(Ve.Z,{value:E,placeholder:ee("SearchGifsTitle"),autoFocusSearch:!0,onChange:W});case ki.Statistics:return i.ZP.createElement("h3",null,ee("Statistics"));case ki.SharedMedia:return i.ZP.createElement("h3",null,ee("SharedMedia"));case ki.ManageChannelSubscribers:return i.ZP.createElement("h3",null,ee("ChannelSubscribers"));case ki.MemberList:case ki.ManageGroupMembers:return i.ZP.createElement("h3",null,ee("GroupMembers"));case ki.ManageReactions:return i.ZP.createElement("h3",null,ee("Reactions"));default:return i.ZP.createElement(i.ZP.Fragment,null,i.ZP.createElement("h3",null,"Profile"),i.ZP.createElement("section",{className:"tools"},I&&i.ZP.createElement(ze.Z,{round:!0,color:"translucent",size:"smaller",ariaLabel:ee("AddContact"),onClick:Y},i.ZP.createElement("i",{className:"icon-add-user"})),w&&i.ZP.createElement(ze.Z,{round:!0,color:"translucent",size:"smaller",ariaLabel:ee("Edit"),onClick:O},i.ZP.createElement("i",{className:"icon-edit"})),k&&i.ZP.createElement(ze.Z,{round:!0,color:"translucent",size:"smaller",ariaLabel:ee("Statistics"),onClick:$},i.ZP.createElement("i",{className:"icon-stats"}))))}}()))})));var Ti=n(91);var Ai=n(7407);function Bi(e,t,n,a){const[i,o]=(0,Ai.Z)(n?t:void 0,a,void 0,s.Vk);return[i,o,!(!i||!a||i[0]===a[0])]}function xi(e,t,n,a,o,r){const c=(0,i.sO)();(0,Pe.Z)((()=>{t===e&&o&&r&&(c.current=(0,d.R5)(o,r,e))}),[o,r,t,e]);const[l,u]=(0,Ai.Z)(a?n:void 0,c.current,void 0,"media"===e?s.EN:s.pn);return[l,u,!(!l||!c.current||l[0]===c.current[0])]}const Li=(0,E.P2)((e=>e()),250,!1);let Oi=!1;var Ui=n(1273),Fi=n(1876),$i=n(787),Di=n(180),qi=n(3709),ji=n(5418),Gi=n(7262),Hi=n(1151),_i=n(2275);const zi=[{type:"media",title:"SharedMediaTab2"},{type:"documents",title:"SharedFilesTab2"},{type:"links",title:"SharedLinksTab2"},{type:"audio",title:"SharedMusicTab2"},{type:"voice",title:"SharedVoiceTab2"}];function Vi(e){return[`.shared-media-transition > div:only-child > .${e}-list > .scroll-item`,`.shared-media-transition > .Transition__slide--active > .${e}-list > .scroll-item`].join(", ")}const Xi=(0,i.X$)((0,a.c$)(((e,t)=>{var n,a;let{chatId:s}=t;const i=(0,c.Z1)(e,s),o=(0,c.Zw)(e,s),{currentType:r,resultsByType:l}=(0,c.we)(e)||{},{foundIds:u}=l&&r&&l[r]||{},{byId:m,statusesById:h}=e.users,{byId:g}=e.chats,f=i&&(0,d.Bf)(i),p=i&&(0,d.eA)(i),v=f||p&&(0,d.Nl)(i),I=null==i||null===(n=i.fullInfo)||void 0===n?void 0:n.members,y=v&&i&&i.fullInfo&&!i.fullInfo.canViewMembers,w=v&&i&&((0,d.VE)(i,"inviteUsers")||i.isCreator),Z=v&&i&&((0,d.VE)(i,"banUsers")||i.isCreator),P=(0,c.xs)(e,s);let C,b,S;return(0,d.YC)(s)&&(b=s,S=(0,c.dy)(e,b),C=S&&!S.isSelf&&!(0,d.cS)(S)),{theme:(0,c.Pu)(e),isChannel:p,resolvedUserId:b,chatMessages:o,foundIds:u,mediaSearchType:r,hasCommonChatsTab:C,hasMembersTab:v,areMembersHidden:y,canAddMembers:w,canDeleteMembers:Z,currentUserId:e.currentUserId,isRightColumnShown:(0,c.Jf)(e),isRestricted:null==i?void 0:i.isRestricted,lastSyncTime:e.lastSyncTime,serverTimeOffset:e.serverTimeOffset,activeDownloadIds:P,usersById:m,userStatusesById:h,chatsById:g,isChatProtected:null==i?void 0:i.isProtected,...v&&I&&{members:I},...C&&S&&{commonChatIds:null===(a=S.commonChats)||void 0===a?void 0:a.ids}}}))((e=>{let{chatId:t,profileState:n,onProfileStateChange:r,theme:c,isChannel:l,resolvedUserId:u,currentUserId:g,chatMessages:f,foundIds:p,mediaSearchType:v,hasCommonChatsTab:I,hasMembersTab:y,areMembersHidden:w,canAddMembers:Z,canDeleteMembers:P,commonChatIds:C,members:b,usersById:S,userStatusesById:E,chatsById:M,isRightColumnShown:R,isRestricted:k,lastSyncTime:N,activeDownloadIds:T,serverTimeOffset:A,isChatProtected:B}=e;const{setLocalMediaSearchType:x,loadMoreMembers:L,loadCommonChats:O,openChat:U,searchMediaMessagesLocal:F,openMediaViewer:$,openAudioPlayer:D,focusMessage:q,loadProfilePhotos:j,setNewChatMembersDialogState:G}=(0,a.Sv)(),H=(0,i.sO)(null),_=(0,i.sO)(null),z=(0,Fe.Z)(),[V,X]=(0,i.eJ)(0),[K,W]=(0,i.eJ)(),Y=(0,i.Ye)((()=>[...y?[{type:"members",title:l?"ChannelSubscribers":"GroupMembers"}]:[],...zi,...I?[{type:"commonChats",title:"SharedGroupsTab2"}]:[]]),[I,y,l]),J=Y[V].type,[Q,ee,te,ne]=function(e,t,n,a,s,o,r,c,l,u,m,h,g,f,p){let v=arguments.length>15&&void 0!==arguments[15]?arguments[15]:0;const I="members"!==s&&o?o:s,y=(0,i.Ye)((()=>{if(r&&l&&u)return(0,d.Z0)(r.map((e=>{let{userId:t}=e;return t})),l,u,void 0,v)}),[r,v,l,u]),w=(0,i.Ye)((()=>{if(c&&m)return(0,d.ih)(c,m,!0)}),[m,c]),[Z,P,C]=Bi(0,t,p,y),[b,S,E]=xi("media",I,a,p,h,g),[M,R,k]=xi("documents",I,a,p,h,g),[N,T,A]=xi("links",I,a,p,h,g),[B,x,L]=xi("audio",I,a,p,h,g),[O,U,F]=xi("voice",I,a,p,h,g),[$,D,q]=Bi(0,n,p,w);let j,G,H=!1;switch(I){case"members":j=Z,G=P,H=C;break;case"commonChats":j=$,G=D,H=q;break;case"media":j=b,G=S,H=E;break;case"documents":j=M,G=R,H=k;break;case"links":j=N,G=T,H=A;break;case"audio":j=B,G=x,H=L;break;case"voice":j=O,G=U,H=F}return[I,j,G,H]}(R,L,O,F,J,v,b,C,S,E,M,f,p,t,N,A),ae=Y.findIndex((e=>{let{type:t}=e;return t===Q})),{handleScroll:se}=function(e,t,n,a){(0,hn.Z)((n=>{let[s]=n;if(s&&s!==t){const n=e.current,s=n.querySelector(".TabList");n.scrollTop{Oi=!1}),350))}}),[t,a]),(0,hn.Z)((t=>{let[s]=t;if(n!==m.vi.Profile||n===s)return;const i=e.current;if(!i)return;const o=i.querySelector(".TabList");!o||o.offsetTop>i.scrollTop||(Oi=!0,(0,yn.Z)(i,i.firstElementChild,"start",void 0,2*i.offsetHeight),setTimeout((()=>{Oi=!1}),350),a(n))}),[n]);const s=(0,i.I4)((()=>{const n=e.current;if(!n)return;const s=n.querySelector(".TabList");if(!s)return;let i=m.vi.Profile;n.scrollTop>=s.offsetTop&&(i="members"===t?m.vi.MemberList:m.vi.SharedMedia),a(i)}),[e,a,t]);return(0,i.d4)((()=>{Oi||s()}),[s,t]),{handleScroll:(0,i.I4)((()=>{Oi||Li(s)}),[s])}}(H,J,n,r),{applyTransitionFix:ie,releaseTransitionFix:oe}=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:".Transition.shared-media-transition";(0,i.d4)((()=>{function n(){const n=e.current,a=n.querySelector(t),s=n.querySelector(".TabList");a&&s&&(a.style.minHeight=n.offsetHeight-s.offsetHeight+"px")}return n(),window.addEventListener("resize",n,!1),()=>{window.removeEventListener("resize",n,!1)}}),[e,t]);const n=(0,i.I4)((()=>{const t=e.current;if("hidden"!==t.style.overflowY){const e=t.offsetWidth-t.clientWidth;t.style.overflowY="hidden",t.style.marginRight=`${e}px`}}),[e]),a=(0,i.I4)((()=>{const t=e.current;t.style.overflowY="scroll",t.style.marginRight="0"}),[e]);return{applyTransitionFix:n,releaseTransitionFix:a}}(H),[re,ce]=(()=>{const[e,t]=(0,i.eJ)(!1);return[e,(0,i.I4)((()=>{t((e=>!e))}),[])]})(),{observe:le}=(0,Pn.S1)({rootRef:H,throttleMs:500}),de=(0,i.I4)((()=>{oe(),ce()}),[oe,ce]),ue=(0,i.I4)((()=>{G(m.WB.InProgress)}),[G]);(0,i.d4)((()=>{x({mediaType:J})}),[x,J]);const me=u||t;(0,i.d4)((()=>{N&&j({profileId:me})}),[j,me,N]);const he=(0,i.I4)((e=>{$({chatId:me,threadId:o._f,messageId:e,origin:m.bZ.SharedMedia})}),[me,$]),ge=(0,i.I4)((e=>{D({chatId:me,messageId:e})}),[me,D]),fe=(0,i.I4)((e=>{U({id:e})}),[U]),pe=(0,i.I4)((e=>{q({chatId:me,messageId:e})}),[me,q]),ve=(0,i.I4)((()=>{W(void 0)}),[]);let Ie;(0,i.d4)((()=>{if(_.current&&h.$b)return(0,tt.sf)(_.current,{selectorToPreventScroll:".Profile",onSwipe:(e,t)=>t===tt.eM.Left?(X(Math.min(V+1,Y.length-1)),!0):t===tt.eM.Right&&(X(Math.max(0,V-1)),!0)})}),[V,Y.length]);const ye="members"===Q||!y&&"media"===Q;ye?Ie=R?0:1e3:ee||(Ie=s.Y);const we=(0,ii.Z)([t,Q],Ie);return i.ZP.createElement(Ui.Z,{ref:H,className:"Profile custom-scroll",itemSelector:Vi(Q),items:we?ee:void 0,cacheBuster:re,sensitiveArea:s.qU,preloadBackwards:we?"members"===Q?s.Vk:s.EN:0,noScrollRestoreOnTop:!0,noFastList:!0,onLoadMore:te,onScroll:se},!ne&&function(e,t){return i.ZP.createElement("div",{className:"profile-info"},i.ZP.createElement($i.Z,{userId:t||e}),i.ZP.createElement(Di.Z,{chatOrUserId:t||e}))}(t,u),!k&&i.ZP.createElement("div",{className:"shared-media"},i.ZP.createElement(Ue.Z,{ref:_,name:z.isRtl?"slide-optimized-rtl":"slide-optimized",activeKey:ae,renderCount:Y.length,shouldRestoreHeight:!0,className:"shared-media-transition",onStart:ie,onStop:de},function(){if(!ee||!we||!f){const e=ye&&!we;return i.ZP.createElement("div",{className:"content empty-list"},!e&&i.ZP.createElement(Ye.Z,null))}if(!ee.length){let e;switch(Q){case"members":e=w?"You have no access to group members list.":"No members found";break;case"commonChats":e=z("NoGroupsInCommon");break;case"documents":e=z("lng_media_file_empty");break;case"links":e=z("lng_media_link_empty");break;case"audio":e=z("lng_media_song_empty");break;case"voice":e=z("lng_media_audio_empty");break;default:e=z("SharedMedia.EmptyTitle")}return i.ZP.createElement("div",{className:"content empty-list"},i.ZP.createElement(Gi.Z,{text:e}))}return i.ZP.createElement("div",{className:`content ${Q}-list`,dir:z.isRtl&&"media"===Q?"rtl":void 0,teactFastList:!0},"media"===Q?ee.map((e=>f[e]&&i.ZP.createElement(qi.Z,{key:e,message:f[e],isProtected:B||f[e].isProtected,observeIntersection:le,onClick:he}))):"documents"===Q?ee.map((e=>f[e]&&i.ZP.createElement(zn.Z,{key:e,message:f[e],withDate:!0,smaller:!0,className:"scroll-item",isDownloading:T.includes(e),observeIntersection:le,onDateClick:pe}))):"links"===Q?ee.map((e=>f[e]&&i.ZP.createElement(ji.Z,{key:e,message:f[e],isProtected:B||f[e].isProtected,observeIntersection:le,onMessageClick:pe}))):"audio"===Q?ee.map((e=>f[e]&&i.ZP.createElement(Vn.Z,{key:e,theme:c,message:f[e],origin:m.Cr.SharedMedia,date:f[e].date,lastSyncTime:N,className:"scroll-item",onPlay:ge,onDateClick:pe,isDownloading:T.includes(e)}))):"voice"===Q?ee.map((e=>f[e]&&i.ZP.createElement(Vn.Z,{key:e,theme:c,message:f[e],senderTitle:(0,Ti.F)(z,f[e],M,S),origin:m.Cr.SharedMedia,date:f[e].date,lastSyncTime:N,className:"scroll-item",onPlay:ge,onDateClick:pe,isDownloading:T.includes(e)}))):"members"===Q?ee.map(((e,t)=>{return i.ZP.createElement(Fi.Z,{key:e,teactOrderKey:t,className:"chat-item-clickable scroll-item small-icon",onClick:()=>fe(e),contextActions:(n=e,n!==g&&P?[{title:z("lng_context_remove_from_group"),icon:"stop",handler:()=>{W(n)}}]:void 0)},i.ZP.createElement(At.Z,{userId:e,forceShowSelf:!0}));var n})):"commonChats"===Q?ee.map(((e,t)=>i.ZP.createElement(Fi.Z,{key:e,teactOrderKey:t,className:"chat-item-clickable scroll-item small-icon",onClick:()=>U({id:e})},i.ZP.createElement(Bt.Z,{chatId:e})))):void 0)}()),i.ZP.createElement(nt.Z,{big:!0,activeTab:V,tabs:Y,onSwitchTab:X})),Z&&i.ZP.createElement(Hi.Z,{isShown:"members"===Q,onClick:ue,ariaLabel:z("lng_channel_add_users")},i.ZP.createElement("i",{className:"icon-add-user-filled"})),P&&i.ZP.createElement(_i.Z,{isOpen:Boolean(K),userId:K,onClose:ve}))}))),Ki=(0,i.X$)((e=>{const t=(0,ot.Z)(it.gl.Extra,"RightSearch");return t?i.ZP.createElement(t,e):i.ZP.createElement(rt.Z,null)})),Wi=(0,i.X$)((e=>{const t=(0,ot.Z)(it.gl.Extra,"Management");return t?i.ZP.createElement(t,e):i.ZP.createElement(rt.Z,null)})),Yi=e=>{const t=(0,ot.Z)(it.gl.Extra,"Statistics");return t?i.ZP.createElement(t,e):i.ZP.createElement(rt.Z,null)},Ji=(0,i.X$)((()=>{const e=(0,ot.Z)(it.gl.Extra,"StickerSearch");return e?i.ZP.createElement(e,null):i.ZP.createElement(rt.Z,null)})),Qi=(0,i.X$)((()=>{const e=(0,ot.Z)(it.gl.Extra,"GifSearch");return e?i.ZP.createElement(e,null):i.ZP.createElement(rt.Z,null)})),eo=(0,i.X$)((()=>{const e=(0,ot.Z)(it.gl.Extra,"PollResults");return e?i.ZP.createElement(e,null):i.ZP.createElement(rt.Z,null)}));var to=n(1820);const no=(0,i.X$)((0,a.c$)(((e,t)=>{var n;let{chatId:a}=t;const s=(0,c.Z1)(e,a),{userIds:i}=e.contactList||{},{byId:o}=e.chats,{currentUserId:r,newChatMembersProgress:l,connectionState:u}=e,h=s&&(0,d.eA)(s),{query:g,fetchingStatus:f,globalUserIds:p,localUserIds:v}=e.userSearch;return{isChannel:h,members:null==s||null===(n=s.fullInfo)||void 0===n?void 0:n.members,currentUserId:r,chatsById:o,localContactIds:i,searchQuery:g,isSearching:f,isLoading:l===m.WB.Loading,globalUserIds:p,localUserIds:v,connectionState:u}}))((e=>{let{isChannel:t,connectionState:n,members:s,onNextStep:o,currentUserId:r,chatsById:c,localContactIds:l,isLoading:u,searchQuery:m,isSearching:h,localUserIds:f,globalUserIds:p,onClose:v,isActive:I}=e;const{setUserSearchQuery:y,loadContactList:w}=(0,a.Sv)(),Z=(0,Fe.Z)(),[P,C]=(0,i.eJ)([]),b=(0,Mt.Z)(P)===P;(0,i.d4)((()=>{I&&"connectionStateReady"===n&&w()}),[n,I,w]),(0,Me.ZP)(I,v);const S=(0,i.Ye)((()=>s?s.map((e=>e.userId)):[]),[s]),E=(0,i.I4)((e=>{y({query:e})}),[y]),M=(0,i.Ye)((()=>{const e=(0,a.Rd)().users.byId,n=l?(0,d.kK)(l,e,m):[];return(0,d.ih)((0,g.Tw)([...n,...f||[],...p||[]]).filter((n=>{const a=e[n];return!S.includes(n)&&n!==r&&(!a||!(0,d.cS)(a)||!t&&a.canBeInvitedToGroup)})),c)}),[l,c,m,f,p,r,S,t]),R=(0,i.I4)((()=>{P.length&&(y({query:""}),o(P))}),[P,y,o]);return i.ZP.createElement("div",{className:"AddChatMembers"},i.ZP.createElement("div",{className:"AddChatMembers-inner"},i.ZP.createElement(to.Z,{itemIds:M,selectedIds:P,filterValue:m,filterPlaceholder:Z("lng_channel_add_users"),searchInputId:"new-members-picker-search",isLoading:h,onSelectedIdsChange:C,onFilterChange:E,noScrollRestore:b}),i.ZP.createElement(Hi.Z,{isShown:Boolean(P.length),disabled:u,ariaLabel:Z("lng_channel_add_users"),onClick:R},u?i.ZP.createElement(Ye.Z,{color:"white"}):i.ZP.createElement("i",{className:"icon-arrow-right"}))))}))),ao=Object.keys(m.qt).length/2,so=Object.keys(m.u1).length/2;function io(){const e=document.querySelector(".RightHeader .SearchInput input");e&&e.blur()}const oo=(0,i.X$)((0,a.c$)((e=>{var t;const{chatId:n,threadId:a}=(0,c.Bt)(e)||{},s=(0,c.g4)(e),i=n?null===(t=e.management.byChatId[n])||void 0===t?void 0:t.nextScreen:void 0;return{contentKey:(0,c.Wq)(e),chatId:n,threadId:a,isChatSelected:Boolean(n&&s),shouldSkipHistoryAnimations:e.shouldSkipHistoryAnimations,nextManagementScreen:i}}))((e=>{var t;let{contentKey:n,chatId:o,threadId:r,isChatSelected:c,shouldSkipHistoryAnimations:l,nextManagementScreen:d}=e;const{toggleChatInfo:u,toggleManagement:h,closeLocalTextSearch:g,setStickerSearchQuery:f,setGifSearchQuery:p,closePollResults:v,addChatMembers:I,setNewChatMembersDialogState:y,setEditingExportedInvite:w,toggleStatistics:Z,setOpenedInviteInfo:P,requestNextManagementScreen:C}=(0,a.Sv)(),{width:b}=St(),[S,E]=(0,i.eJ)(m.vi.Profile),[M,R]=(0,i.eJ)(m.u1.Initial),[k,N]=(0,i.eJ)(),[T,A]=(0,i.eJ)(),B=S!==m.vi.Profile,x=void 0!==n,L=n===m.qt.ChatInfo,O=n===m.qt.Search,U=n===m.qt.Management,F=n===m.qt.Statistics,$=n===m.qt.StickerSearch,D=n===m.qt.GifSearch,q=n===m.qt.PollResults,j=n===m.qt.AddingMembers,G=b<=s._m,[H,_]=(0,i.eJ)(!x),z=null!==(t=(0,Tt.Z)(n,!0,!c))&&void 0!==t?t:-1,V=(0,i.I4)((function(){let e=!(arguments.length>0&&void 0!==arguments[0])||arguments[0];switch(n){case m.qt.AddingMembers:y(m.WB.Closed);break;case m.qt.ChatInfo:if(B&&e){E(m.vi.Profile);break}u(void 0,{forceSyncOnIOs:!0});break;case m.qt.Management:switch(M){case m.u1.Initial:h();break;case m.u1.ChatPrivacyType:case m.u1.Discussion:case m.u1.GroupPermissions:case m.u1.GroupType:case m.u1.ChatAdministrators:case m.u1.ChannelSubscribers:case m.u1.GroupMembers:case m.u1.Invites:case m.u1.Reactions:case m.u1.JoinRequests:case m.u1.ChannelRemovedUsers:R(m.u1.Initial);break;case m.u1.GroupUserPermissionsCreate:case m.u1.GroupRemovedUsers:case m.u1.GroupUserPermissions:R(m.u1.GroupPermissions),N(void 0),A(void 0);break;case m.u1.ChatAdminRights:case m.u1.ChatNewAdminRights:case m.u1.GroupAddAdmins:case m.u1.GroupRecentActions:R(m.u1.ChatAdministrators);break;case m.u1.EditInvite:case m.u1.InviteInfo:R(m.u1.Invites),P({invite:void 0}),w({chatId:o,invite:void 0})}break;case m.qt.Statistics:Z();break;case m.qt.Search:io(),g();break;case m.qt.StickerSearch:io(),f({query:void 0});break;case m.qt.GifSearch:io(),p({query:void 0});break;case m.qt.PollResults:v()}}),[n,B,u,v,y,M,h,g,f,p,w,o,P,Z]),X=(0,i.I4)(((e,t)=>{N(e),A(t)}),[]),K=(0,i.I4)((e=>{I({chatId:o,memberIds:e})}),[I,o]);function W(e){if(-1!==z)switch(z){case m.qt.AddingMembers:return i.ZP.createElement(no,{key:o,chatId:o,isActive:x&&e,onNextStep:K,onClose:V});case m.qt.ChatInfo:return i.ZP.createElement(Xi,{key:o,chatId:o,profileState:S,onProfileStateChange:E});case m.qt.Search:return i.ZP.createElement(Ki,{chatId:o,threadId:r,onClose:V,isActive:x&&e});case m.qt.Management:return i.ZP.createElement(Wi,{key:o,chatId:o,currentScreen:M,isPromotedByCurrentUser:T,selectedChatMemberId:k,isActive:x&&e,onScreenSelect:R,onChatMemberSelect:X,onClose:V});case m.qt.Statistics:return i.ZP.createElement(Yi,{chatId:o,isActive:x&&e});case m.qt.StickerSearch:return i.ZP.createElement(Ji,{onClose:V,isActive:x&&e});case m.qt.GifSearch:return i.ZP.createElement(Qi,{onClose:V,isActive:x&&e});case m.qt.PollResults:return i.ZP.createElement(eo,{onClose:V,isActive:x&&e})}}return(0,i.d4)((()=>x?(0,Be.Z)(V):void 0),[x,V]),(0,i.d4)((()=>{setTimeout((()=>{_(!x)}),300)}),[x]),(0,i.d4)((()=>{d&&(R(d),C(void 0))}),[d,C]),(0,i.d4)((()=>{x&&G&&V()}),[G]),(0,mn.Z)((e=>{let[t]=e;t!==o&&(E(m.vi.Profile),R(m.u1.Initial))}),[o]),(0,Me.ZP)(c&&(n===m.qt.ChatInfo||n===m.qt.Management||n===m.qt.AddingMembers),(()=>V(!1)),u),i.ZP.createElement("div",{id:"RightColumn-wrapper",className:c?void 0:"is-hidden"},G&&i.ZP.createElement("div",{className:"overlay-backdrop",onClick:V}),i.ZP.createElement("div",{id:"RightColumn"},i.ZP.createElement(Ni,{chatId:o,isColumnOpen:x,isProfile:L,isSearch:O,isManagement:U,isStatistics:F,isStickerSearch:$,isGifSearch:D,isPollResults:q,isAddingChatMembers:j,profileState:S,managementScreen:M,onClose:V,shouldSkipAnimation:H||l,onScreenSelect:R}),i.ZP.createElement(Ue.Z,{name:H||l?"none":"zoom-fade",renderCount:ao+so,activeKey:U?ao+M:z,shouldCleanup:!0},W)))}))),ro=(0,i.X$)((e=>{let{isOpen:t}=e;const n=(0,ot.Z)(it.gl.Extra,"MediaViewer",!t);return n?i.ZP.createElement(n,null):void 0}));function co(e,t){const n=document.createElement("a");n.href=e,n.download=t;try{n.click()}catch(e){console.error(e)}}const lo=new Set,uo=(0,i.X$)((0,a.c$)((e=>({activeDownloads:e.activeDownloads.byChatId,messages:e.messages.byChatId})))((e=>{let{activeDownloads:t,messages:n}=e;const{cancelMessageMediaDownload:s}=(0,a.Sv)();(0,i.d4)((()=>{Object.entries(t).forEach((e=>{let[t,a]=e;a.map((e=>n[Number(t)].byId[e])).forEach((e=>{const t=(0,d.Ti)(e,"download");if(t){if(!lo.has(t)){const n=X.UV(t);if(n)return lo.delete(t),co(n,(0,d.w6)(e)),void s({message:e});X.he(t,o.IU.BlobUrl,!0).then((n=>{lo.delete(t),n&&co(n,(0,d.w6)(e)),s({message:e})})),lo.add(t)}}else s({message:e})}))}))}),[s,n,t])}))),mo=(0,i.X$)((e=>{let{isOpen:t}=e;const n=(0,ot.Z)(it.gl.Extra,"Notifications",!t);return n?i.ZP.createElement(n,null):void 0})),ho=(0,i.X$)((e=>{let{isOpen:t}=e;const n=(0,ot.Z)(it.gl.Extra,"Dialogs",!t);return n?i.ZP.createElement(n,null):void 0})),go=(0,i.X$)((e=>{const{isOpen:t}=e,n=(0,ot.Z)(it.gl.Extra,"ForwardPicker",!t);return n?i.ZP.createElement(n,e):void 0})),fo=(0,i.X$)((e=>{const{url:t}=e,n=(0,ot.Z)(it.gl.Extra,"SafeLinkModal",!t);return n?i.ZP.createElement(n,e):void 0})),po=(0,i.X$)((e=>{const{isOpen:t}=e,n=(0,ot.Z)(it.gl.Extra,"HistoryCalendar",!t);return n?i.ZP.createElement(n,e):void 0})),vo=(0,i.X$)((e=>{const{groupCallId:t}=e,n=(0,ot.Z)(it.gl.Calls,"GroupCall",!t);return n?i.ZP.createElement(n,e):void 0})),Io=(0,i.X$)((e=>{const{groupCallId:t}=e,n=(0,ot.Z)(it.gl.Calls,"ActiveCallHeader",!t);return n?i.ZP.createElement(n,null):void 0})),yo=(0,i.X$)((e=>{let{isOpen:t}=e;const n=(0,ot.Z)(it.gl.Calls,"CallFallbackConfirm",!t);return n?i.ZP.createElement(n,{isOpen:t}):void 0})),wo=(0,i.X$)((e=>{const{isOpen:t}=e,n=(0,ot.Z)(it.gl.Extra,"NewContactModal",!t);return n?i.ZP.createElement(n,e):void 0}));let Zo,Po=!1;function Co(e){document.querySelectorAll('link[rel="icon"], link[rel="alternate icon"]').forEach((t=>{e?t.href.includes("favicon-unread")||(t.href=t.href.replace("favicon","favicon-unread")):t.href=t.href.replace("favicon-unread","favicon")}))}function bo(e){document.title!==e&&(document.title=e)}const So=(0,i.X$)((0,a.c$)((e=>{var t,n;const{settings:{byKey:{animationLevel:a,language:s,wasTimeFormatSetManually:i}}}=e,{chatId:o,messageId:r}=e.audioPlayer,l=o&&r?(0,c.hj)(e,o,r):void 0;return{connectionState:e.connectionState,authState:e.authState,lastSyncTime:e.lastSyncTime,isLeftColumnShown:e.isLeftColumnShown,isRightColumnShown:(0,c.Jf)(e),isMediaViewerOpen:(0,c.zQ)(e),isForwardModalOpen:(0,c.Ev)(e),hasNotifications:Boolean(e.notifications.length),hasDialogs:Boolean(e.dialogs.length),audioMessage:l,safeLinkModalUrl:e.safeLinkModalUrl,isHistoryCalendarOpen:Boolean(e.historyCalendarSelectedAt),shouldSkipHistoryAnimations:e.shouldSkipHistoryAnimations,openedStickerSetShortName:e.openedStickerSetShortName,isServiceChatReady:(0,c.UW)(e),activeGroupCallId:e.groupCalls.activeGroupCallId,animationLevel:a,language:s,wasTimeFormatSetManually:i,isCallFallbackConfirmOpen:Boolean(e.groupCalls.isFallbackConfirmOpen),addedSetIds:e.stickers.added.setIds,newContactUserId:null===(t=e.newContact)||void 0===t?void 0:t.userId,newContactByPhoneNumber:null===(n=e.newContact)||void 0===n?void 0:n.isByPhoneNumber}}))((e=>{let{connectionState:t,authState:n,lastSyncTime:o,isLeftColumnShown:r,isRightColumnShown:c,isMediaViewerOpen:l,isForwardModalOpen:d,hasNotifications:u,hasDialogs:m,audioMessage:g,activeGroupCallId:f,safeLinkModalUrl:p,isHistoryCalendarOpen:v,shouldSkipHistoryAnimations:I,openedStickerSetShortName:y,isServiceChatReady:w,animationLevel:Z,language:P,wasTimeFormatSetManually:C,isCallFallbackConfirmOpen:b,addedSetIds:S,newContactUserId:M,newContactByPhoneNumber:R}=e;const{sync:k,loadAnimatedEmojis:N,loadNotificationSettings:T,loadNotificationExceptions:A,updateIsOnline:B,loadTopInlineBots:x,loadEmojiKeywords:L,loadCountryList:O,loadAvailableReactions:U,loadStickerSets:F,loadAddedStickers:D,loadFavoriteStickers:q,ensureTimeFormat:j,openStickerSetShortName:G,checkVersionNotification:H,loadAppConfig:_}=(0,a.Sv)();s.eM&&!Po&&(Po=!0,console.log(">>> RENDER MAIN")),(0,i.d4)((()=>{"connectionStateReady"===t&&"authorizationStateReady"===n&&k()}),[t,n,k]),(0,i.d4)((()=>{o&&(B(!0),_(),U(),N(),T(),A(),x(),L({language:s.pR}))}),[o,N,L,A,T,x,B,U,_]),(0,i.d4)((()=>{o&&(P!==s.pR&&L({language:P}),O({langCode:P}))}),[P,o,O,L]),(0,i.d4)((()=>{o&&(S?D():(F(),q()))}),[o,S,F,q,D]),(0,i.d4)((()=>{o&&w&&H()}),[o,w,H]),(0,i.d4)((()=>{o&&!C&&j()}),[o,C,j]),(0,i.d4)((()=>{o&&Me.Oy.startsWith("#?tgaddr=")&&(0,ve.o)(decodeURIComponent(Me.Oy.substr("#?tgaddr=".length)))}),[o]),(0,i.d4)((()=>{if(f)return Q.Z.disableRefresh(),()=>{Q.Z.enableRefresh()}}),[f]);const{transitionClassNames:z}=(0,ye.Z)(!r,void 0,!0,void 0,I),{transitionClassNames:V}=(0,ye.Z)(c,void 0,!0,void 0,I),X=(0,fe.Z)(z.replace(/([\w-]+)/g,"middle-column-$1"),V.replace(/([\w-]+)/g,"right-column-$1"),I&&"history-animation-disabled");(0,Pe.Z)((e=>{let[t]=e;if(void 0===t||0===Z)return;const n=(0,ge.YW)();(0,pe.L)(document.getElementById("MiddleColumn"),n)}),[r]),(0,Pe.Z)((e=>{let[t]=e;if(void 0===t||0===Z)return;(0,E.T2)((()=>{document.body.classList.add("animating-right-column")}));const n=(0,ge.YW)();(0,pe.L)(document.getElementById("RightColumn"),(()=>{n(),(0,E.T2)((()=>{document.body.classList.remove("animating-right-column")}))}))}),[c]);const K=(0,i.I4)((()=>{B(!1);const e=(0,$.xW)();let t=0;clearInterval(Zo),Zo=window.setInterval((()=>{if(document.title.includes(s.ou))Co(!1);else{if(t%2==0){const t=(0,$.xW)()-e;t>0&&(bo(`${t} notification${t>1?"s":""}`),Co(!0))}else bo(s.Ti),Co(!1);t++}}),1e3)}),[B]),W=(0,i.I4)((()=>{B(!0),clearInterval(Zo),Zo=void 0,document.title.includes(s.ou)||bo(s.Ti),Co(!1)}),[B]),Y=(0,i.I4)((()=>{G({stickerSetShortName:void 0})}),[G]);return(0,we.Z)(K,W),Ze(K),function(){let e=arguments.length>0&&void 0!==arguments[0]&&arguments[0];(0,i.d4)((()=>{if(h.$b){if(!e)return null==Ce||Ce.setAttribute("content",be),h.cj&&!h.fl&&document.addEventListener("gesturestart",Ee),()=>{null==Ce||Ce.setAttribute("content","width=device-width, initial-scale=1, shrink-to-fit=no"),h.cj&&!h.fl&&document.removeEventListener("gesturestart",Ee)};null==Ce||Ce.setAttribute("content",Se)}}),[e])}(l),i.ZP.createElement("div",{id:"Main",className:X,onDrop:Ie.Z,onDragOver:Ie.Z},i.ZP.createElement(wt,null),i.ZP.createElement(Mi,null),i.ZP.createElement(oo,null),i.ZP.createElement(ro,{isOpen:l}),i.ZP.createElement(go,{isOpen:d}),i.ZP.createElement(mo,{isOpen:u}),i.ZP.createElement(ho,{isOpen:m}),g&&i.ZP.createElement(sn,{key:g.id,message:g,noUi:!0}),i.ZP.createElement(fo,{url:p}),i.ZP.createElement(po,{isOpen:v}),i.ZP.createElement(Re.Z,{isOpen:Boolean(y),onClose:Y,stickerSetShortName:y}),f&&i.ZP.createElement(i.ZP.Fragment,null,i.ZP.createElement(vo,{groupCallId:f}),i.ZP.createElement(Io,{groupCallId:f})),i.ZP.createElement(wo,{isOpen:Boolean(M||R),userId:M,isByPhoneNumber:R}),i.ZP.createElement(uo,null),i.ZP.createElement(yo,{isOpen:b}),i.ZP.createElement(Ae,{isForAppBadge:!0}))})));s.eM&&console.log(">>> FINISH LOAD MAIN BUNDLE"),(0,a.Rd)().connectionState||(0,a.Sv)().initApi()},8973:(e,t,n)=>{e.exports=n.p+"encoderWorker.min.8ea62f6317fbac7d4558..js"},8226:(e,t,n)=>{e.exports=n.p+"map-pin.7b3c3e60ee24795e4bd2..svg"},4524:(e,t,n)=>{e.exports=n.p+"telegram-logo-filled.67469f6dc5e301e8e0bd..svg"},257:e=>{e.exports="**Telegram Web Z was updated to version 1.39**\n\n🤩 **Better**\n• New animations for QR code on login screen.\n• Toggle Attach Menu with keyboard or screen reader.\n• Another update for Persian font.\n• Various UX improvements.\n\n💪 **Stronger**\n• Fixed media sometimes being not loaded.\n"}}]); -//# sourceMappingURL=616.62b1588aeeff3499beea.js.map \ No newline at end of file diff --git a/dist/616.62b1588aeeff3499beea.js.map b/dist/616.62b1588aeeff3499beea.js.map deleted file mode 100644 index 3b10b0b52..000000000 --- a/dist/616.62b1588aeeff3499beea.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"616.62b1588aeeff3499beea.js","mappings":"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","sources":["webpack://telegram-t/./src/global/actions/ui/localSearch.ts","webpack://telegram-t/./src/global/actions/ui/chats.ts","webpack://telegram-t/./src/global/actions/ui/messages.ts","webpack://telegram-t/./src/global/actions/ui/globalSearch.ts","webpack://telegram-t/./src/global/actions/ui/stickerSearch.ts","webpack://telegram-t/./src/global/actions/ui/users.ts","webpack://telegram-t/./src/global/actions/ui/misc.ts","webpack://telegram-t/./src/global/actions/ui/payments.ts","webpack://telegram-t/./src/global/actions/ui/mediaViewer.ts","webpack://telegram-t/./src/global/actions/api/messages.ts","webpack://telegram-t/./src/global/actions/api/symbols.ts","webpack://telegram-t/./src/global/actions/api/globalSearch.ts","webpack://telegram-t/./src/global/actions/api/localSearch.ts","webpack://telegram-t/./src/global/actions/api/management.ts","webpack://telegram-t/./src/global/actions/api/sync.ts","webpack://telegram-t/./src/global/actions/api/users.ts","webpack://telegram-t/./src/global/reducers/bots.ts","webpack://telegram-t/./src/global/actions/api/bots.ts","webpack://telegram-t/./src/global/actions/api/twoFaSettings.ts","webpack://telegram-t/./src/global/actions/api/payments.ts","webpack://telegram-t/./src/util/requestQuery.ts","webpack://telegram-t/./src/components/middle/helpers/calculateMiddleFooterTransforms.ts","webpack://telegram-t/./src/global/reducers/reactions.ts","webpack://telegram-t/./src/global/actions/api/reactions.ts","webpack://telegram-t/./src/global/actions/api/statistics.ts","webpack://telegram-t/./src/util/areDeepEqual.ts","webpack://telegram-t/./src/global/actions/apiUpdaters/chats.ts","webpack://telegram-t/./src/global/actions/apiUpdaters/messages.ts","webpack://telegram-t/./src/global/actions/apiUpdaters/users.ts","webpack://telegram-t/./src/global/actions/apiUpdaters/symbols.ts","webpack://telegram-t/./src/global/actions/apiUpdaters/misc.ts","webpack://telegram-t/./src/global/actions/apiUpdaters/settings.ts","webpack://telegram-t/./src/global/actions/apiUpdaters/twoFaSettings.ts","webpack://telegram-t/./src/global/actions/apiUpdaters/calls.ts","webpack://telegram-t/./src/global/actions/apiUpdaters/payments.ts","webpack://telegram-t/./src/hooks/useBeforeUnload.ts","webpack://telegram-t/./src/hooks/usePreventPinchZoomGesture.ts","webpack://telegram-t/./src/components/common/UnreadCounter.tsx","webpack://telegram-t/./src/hooks/useConnectionStatus.ts","webpack://telegram-t/./src/hooks/useBrowserOnline.ts","webpack://telegram-t/./src/components/left/ConnectionStatusOverlay.tsx","webpack://telegram-t/./src/components/left/main/LeftMainHeader.tsx","webpack://telegram-t/./src/components/left/main/ChatFolders.tsx","webpack://telegram-t/./src/components/left/search/LeftSearch.async.tsx","webpack://telegram-t/./src/components/left/main/ContactList.async.tsx","webpack://telegram-t/./src/components/left/NewChatButton.tsx","webpack://telegram-t/./src/components/left/main/LeftMain.tsx","webpack://telegram-t/./src/components/left/settings/Settings.async.tsx","webpack://telegram-t/./src/components/left/newChat/NewChat.async.tsx","webpack://telegram-t/./src/components/left/ArchivedChats.async.tsx","webpack://telegram-t/./src/components/left/LeftColumn.tsx","webpack://telegram-t/./src/hooks/useResize.ts","webpack://telegram-t/./src/hooks/useCustomBackground.ts","webpack://telegram-t/./src/hooks/useWindowSize.ts","webpack://telegram-t/./src/components/middle/HeaderMenuContainer.async.tsx","webpack://telegram-t/./src/components/middle/HeaderActions.tsx","webpack://telegram-t/./src/hooks/useWebpThumbnail.ts","webpack://telegram-t/./src/components/middle/PinnedMessageNavigation.tsx","webpack://telegram-t/./src/components/middle/HeaderPinnedMessage.tsx","webpack://telegram-t/./src/util/imageResize.ts","webpack://telegram-t/./src/hooks/useMessageMediaMetadata.ts","webpack://telegram-t/./src/hooks/useAsync.ts","webpack://telegram-t/./src/components/middle/AudioPlayer.tsx","webpack://telegram-t/./src/components/calls/group/GroupCallTopPane.tsx","webpack://telegram-t/./src/components/middle/ChatReportPanel.tsx","webpack://telegram-t/./src/components/middle/MiddleHeader.tsx","webpack://telegram-t/./src/components/middle/helpers/groupMessages.ts","webpack://telegram-t/./src/components/middle/hooks/useMessageObservers.ts","webpack://telegram-t/./src/components/middle/message/helpers/buildContentClassName.ts","webpack://telegram-t/./src/components/middle/message/helpers/mediaDimensions.ts","webpack://telegram-t/./src/components/middle/message/helpers/calculateAlbumLayout.ts","webpack://telegram-t/./src/components/middle/message/helpers/calculateAuthorWidth.ts","webpack://telegram-t/./src/components/middle/message/hooks/useFocusMessage.ts","webpack://telegram-t/./src/components/middle/message/hooks/useOuterHandlers.ts","webpack://telegram-t/./src/components/middle/message/ContextMenuContainer.async.tsx","webpack://telegram-t/./src/components/middle/ActionMessage.tsx","webpack://telegram-t/./src/components/common/EmbeddedMessage.tsx","webpack://telegram-t/./src/components/middle/message/ReactionAnimatedEmoji.tsx","webpack://telegram-t/./src/components/middle/message/MessageMeta.tsx","webpack://telegram-t/./src/components/middle/message/Sticker.tsx","webpack://telegram-t/./src/components/middle/message/hooks/useBlurredMediaThumbRef.ts","webpack://telegram-t/./src/components/middle/message/helpers/getCustomAppendixBg.ts","webpack://telegram-t/./src/components/middle/message/Photo.tsx","webpack://telegram-t/./src/components/middle/message/hooks/useVideoAutoPause.ts","webpack://telegram-t/./src/components/middle/message/Video.tsx","webpack://telegram-t/./src/components/middle/message/Contact.tsx","webpack://telegram-t/./src/components/middle/message/PollOption.tsx","webpack://telegram-t/./src/components/middle/message/Poll.tsx","webpack://telegram-t/./src/components/middle/message/WebPage.tsx","webpack://telegram-t/./src/components/middle/message/Invoice.tsx","webpack://telegram-t/./src/util/map.ts","webpack://telegram-t/./src/components/ui/Skeleton.tsx","webpack://telegram-t/./src/components/middle/message/Location.tsx","webpack://telegram-t/./src/components/middle/message/hocs/withSelectControl.tsx","webpack://telegram-t/./src/components/middle/message/Album.tsx","webpack://telegram-t/./src/components/middle/message/RoundVideo.tsx","webpack://telegram-t/./src/components/middle/message/InlineButtons.tsx","webpack://telegram-t/./src/components/middle/message/CommentButton.tsx","webpack://telegram-t/./src/components/middle/message/ReactionButton.tsx","webpack://telegram-t/./src/components/middle/message/Reactions.tsx","webpack://telegram-t/./src/components/common/LocalAnimatedEmoji.tsx","webpack://telegram-t/./src/components/middle/message/Message.tsx","webpack://telegram-t/./src/components/middle/message/hooks/useInnerHandlers.ts","webpack://telegram-t/./src/components/middle/message/SponsoredMessage.tsx","webpack://telegram-t/./src/components/middle/MessageListContent.tsx","webpack://telegram-t/./src/components/middle/hooks/useScrollHooks.ts","webpack://telegram-t/./src/components/middle/ContactGreeting.tsx","webpack://telegram-t/./src/components/middle/NoMessages.tsx","webpack://telegram-t/./src/components/middle/MessageList.tsx","webpack://telegram-t/./src/hooks/useNativeCopySelectedMessages.ts","webpack://telegram-t/./src/components/middle/hooks/useStickyDates.ts","webpack://telegram-t/./src/components/middle/ScrollDownButton.tsx","webpack://telegram-t/./src/components/middle/composer/helpers/buildAttachment.ts","webpack://telegram-t/./src/util/insertHtmlInSelection.ts","webpack://telegram-t/./src/components/middle/composer/helpers/applyIosAutoCapitalizationFix.ts","webpack://telegram-t/./src/util/voiceRecording.ts","webpack://telegram-t/./src/components/middle/composer/hooks/useClipboardPaste.ts","webpack://telegram-t/./src/components/middle/composer/hooks/useDraft.ts","webpack://telegram-t/./src/hooks/useDebouncedMemo.ts","webpack://telegram-t/./src/components/middle/composer/hooks/useInlineBotTooltip.ts","webpack://telegram-t/./src/components/middle/composer/hooks/useBotCommandTooltip.ts","webpack://telegram-t/./src/components/common/DeleteMessageModal.async.tsx","webpack://telegram-t/./src/components/ui/ResponsiveHoverButton.tsx","webpack://telegram-t/./src/components/middle/composer/AttachMenu.tsx","webpack://telegram-t/./src/components/middle/composer/SymbolMenu.async.tsx","webpack://telegram-t/./src/components/middle/composer/InlineBotTooltip.async.tsx","webpack://telegram-t/./src/components/middle/composer/MentionTooltip.async.tsx","webpack://telegram-t/./src/components/middle/composer/StickerTooltip.async.tsx","webpack://telegram-t/./src/components/middle/composer/BotCommandTooltip.async.tsx","webpack://telegram-t/./src/components/middle/composer/BotKeyboardMenu.tsx","webpack://telegram-t/./src/components/middle/composer/ComposerEmbeddedMessage.tsx","webpack://telegram-t/./src/components/middle/composer/AttachmentModal.async.tsx","webpack://telegram-t/./src/components/middle/composer/BotCommandMenu.async.tsx","webpack://telegram-t/./src/components/middle/composer/PollModal.async.tsx","webpack://telegram-t/./src/components/middle/composer/DropArea.async.tsx","webpack://telegram-t/./src/components/middle/composer/WebPagePreview.tsx","webpack://telegram-t/./src/components/middle/composer/SendAsMenu.async.tsx","webpack://telegram-t/./src/components/middle/composer/Composer.tsx","webpack://telegram-t/./src/components/middle/composer/hooks/useVoiceRecording.ts","webpack://telegram-t/./src/components/middle/composer/hooks/useStickerTooltip.ts","webpack://telegram-t/./src/util/deleteLastCharacterOutsideSelection.ts","webpack://telegram-t/./src/components/middle/composer/hooks/useEditing.ts","webpack://telegram-t/./src/components/middle/MobileSearch.async.tsx","webpack://telegram-t/./src/components/middle/MessageSelectToolbar.async.tsx","webpack://telegram-t/./src/components/common/UnpinAllMessagesModal.async.tsx","webpack://telegram-t/./src/components/payment/PaymentModal.async.tsx","webpack://telegram-t/./src/components/payment/ReceiptModal.async.tsx","webpack://telegram-t/./src/components/common/SeenByModal.async.tsx","webpack://telegram-t/./src/components/middle/EmojiInteractionAnimation.async.tsx","webpack://telegram-t/./src/components/middle/ReactorListModal.async.tsx","webpack://telegram-t/./src/components/middle/MiddleColumn.tsx","webpack://telegram-t/./src/components/right/RightHeader.tsx","webpack://telegram-t/./src/components/right/hooks/useProfileViewportIds.ts","webpack://telegram-t/./src/components/right/hooks/useProfileState.ts","webpack://telegram-t/./src/components/right/Profile.tsx","webpack://telegram-t/./src/components/right/hooks/useTransitionFixes.ts","webpack://telegram-t/./src/hooks/useCacheBuster.ts","webpack://telegram-t/./src/components/right/RightSearch.async.tsx","webpack://telegram-t/./src/components/right/management/Management.async.tsx","webpack://telegram-t/./src/components/right/statistics/Statistics.async.tsx","webpack://telegram-t/./src/components/right/StickerSearch.async.tsx","webpack://telegram-t/./src/components/right/GifSearch.async.tsx","webpack://telegram-t/./src/components/right/PollResults.async.tsx","webpack://telegram-t/./src/components/right/AddChatMembers.tsx","webpack://telegram-t/./src/components/right/RightColumn.tsx","webpack://telegram-t/./src/components/mediaViewer/MediaViewer.async.tsx","webpack://telegram-t/./src/util/download.ts","webpack://telegram-t/./src/components/main/DownloadManager.tsx","webpack://telegram-t/./src/components/main/Notifications.async.tsx","webpack://telegram-t/./src/components/main/Dialogs.async.tsx","webpack://telegram-t/./src/components/main/ForwardPicker.async.tsx","webpack://telegram-t/./src/components/main/SafeLinkModal.async.tsx","webpack://telegram-t/./src/components/main/HistoryCalendar.async.tsx","webpack://telegram-t/./src/components/calls/group/GroupCall.async.tsx","webpack://telegram-t/./src/components/calls/ActiveCallHeader.async.tsx","webpack://telegram-t/./src/components/calls/CallFallbackConfirm.async.tsx","webpack://telegram-t/./src/components/main/NewContactModal.async.tsx","webpack://telegram-t/./src/components/main/Main.tsx","webpack://telegram-t/./src/bundles/main.ts"],"sourcesContent":["import { addActionHandler } from '../../index';\n\nimport {\n updateLocalTextSearch,\n replaceLocalTextSearchResults,\n updateLocalMediaSearchType,\n} from '../../reducers';\nimport { MEMO_EMPTY_ARRAY } from '../../../util/memo';\nimport { selectCurrentMessageList } from '../../selectors';\nimport { buildChatThreadKey } from '../../helpers';\nimport { GlobalState } from '../../types';\n\naddActionHandler('openLocalTextSearch', (global) => {\n const { chatId, threadId } = selectCurrentMessageList(global) || {};\n if (!chatId || !threadId) {\n return undefined;\n }\n\n return updateLocalTextSearch(global, chatId, threadId, true);\n});\n\naddActionHandler('closeLocalTextSearch', closeLocalTextSearch);\n\naddActionHandler('setLocalTextSearchQuery', (global, actions, payload) => {\n const { chatId, threadId } = selectCurrentMessageList(global) || {};\n if (!chatId || !threadId) {\n return undefined;\n }\n\n const { query } = payload!;\n const chatThreadKey = buildChatThreadKey(chatId, threadId);\n const { query: currentQuery } = global.localTextSearch.byChatThreadKey[chatThreadKey] || {};\n\n if (query !== currentQuery) {\n global = replaceLocalTextSearchResults(global, chatId, threadId, MEMO_EMPTY_ARRAY);\n }\n\n global = updateLocalTextSearch(global, chatId, threadId, true, query);\n\n return global;\n});\n\naddActionHandler('setLocalMediaSearchType', (global, actions, payload) => {\n const { chatId } = selectCurrentMessageList(global) || {};\n if (!chatId) {\n return undefined;\n }\n\n const { mediaType } = payload!;\n return updateLocalMediaSearchType(global, chatId, mediaType);\n});\n\nexport function closeLocalTextSearch(global: GlobalState): GlobalState {\n const { chatId, threadId } = selectCurrentMessageList(global) || {};\n if (!chatId || !threadId) {\n return global;\n }\n\n global = updateLocalTextSearch(global, chatId, threadId, false);\n global = replaceLocalTextSearchResults(global, chatId, threadId, undefined);\n return global;\n}\n","import { addActionHandler, setGlobal } from '../../index';\n\nimport { MAIN_THREAD_ID } from '../../../api/types';\n\nimport {\n exitMessageSelectMode, replaceThreadParam, updateCurrentMessageList,\n} from '../../reducers';\nimport { selectCurrentMessageList } from '../../selectors';\nimport { closeLocalTextSearch } from './localSearch';\n\naddActionHandler('openChat', (global, actions, payload) => {\n const {\n id,\n threadId = MAIN_THREAD_ID,\n type = 'thread',\n shouldReplaceHistory = false,\n } = payload;\n\n const currentMessageList = selectCurrentMessageList(global);\n\n if (!currentMessageList\n || (\n currentMessageList.chatId !== id\n || currentMessageList.threadId !== threadId\n || currentMessageList.type !== type\n )) {\n if (id) {\n global = replaceThreadParam(global, id, threadId, 'replyStack', []);\n }\n\n global = exitMessageSelectMode(global);\n global = closeLocalTextSearch(global);\n\n global = {\n ...global,\n isStatisticsShown: false,\n messages: {\n ...global.messages,\n contentToBeScheduled: undefined,\n },\n ...(id !== global.forwardMessages.toChatId && {\n forwardMessages: {},\n }),\n };\n\n setGlobal(global);\n }\n\n return updateCurrentMessageList(global, id, threadId, type, shouldReplaceHistory);\n});\n\naddActionHandler('openPreviousChat', (global) => {\n return updateCurrentMessageList(global, undefined);\n});\n\naddActionHandler('openChatWithInfo', (global, actions, payload) => {\n setGlobal({\n ...global,\n isChatInfoShown: true,\n });\n\n actions.openChat(payload);\n});\n\naddActionHandler('resetChatCreation', (global) => {\n return {\n ...global,\n chatCreation: undefined,\n };\n});\n\naddActionHandler('setNewChatMembersDialogState', (global, actions, payload) => {\n return {\n ...global,\n newChatMembersProgress: payload,\n };\n});\n\naddActionHandler('openNextChat', (global, actions, payload) => {\n const { targetIndexDelta, orderedIds } = payload;\n\n const { chatId } = selectCurrentMessageList(global) || {};\n\n if (!chatId) {\n actions.openChat({ id: orderedIds[0] });\n return;\n }\n\n const position = orderedIds.indexOf(chatId);\n\n if (position === -1) {\n return;\n }\n const nextId = orderedIds[position + targetIndexDelta];\n\n actions.openChat({ id: nextId, shouldReplaceHistory: true });\n});\n","import { addActionHandler, getGlobal, setGlobal } from '../../index';\n\nimport { ApiMessage, MAIN_THREAD_ID } from '../../../api/types';\nimport { FocusDirection } from '../../../types';\n\nimport {\n ANIMATION_END_DELAY,\n APP_VERSION,\n FAST_SMOOTH_MAX_DURATION,\n SERVICE_NOTIFICATIONS_USER_ID,\n} from '../../../config';\nimport { IS_TOUCH_ENV } from '../../../util/environment';\nimport {\n enterMessageSelectMode,\n toggleMessageSelection,\n exitMessageSelectMode,\n replaceThreadParam,\n updateFocusDirection,\n updateFocusedMessage,\n} from '../../reducers';\nimport {\n selectCurrentChat,\n selectViewportIds,\n selectIsRightColumnShown,\n selectCurrentMessageList,\n selectChat,\n selectThreadInfo,\n selectChatMessages,\n selectAllowedMessageActions,\n selectMessageIdsByGroupId,\n selectForwardedMessageIdsByGroupId,\n selectIsViewportNewest,\n selectReplyingToId,\n selectReplyStack,\n selectSender,\n} from '../../selectors';\nimport { findLast } from '../../../util/iteratees';\nimport { getServerTime } from '../../../util/serverTime';\n\nimport versionNotification from '../../../versionNotification.txt';\nimport parseMessageInput from '../../../util/parseMessageInput';\nimport { getMessageSummaryText, getSenderTitle } from '../../helpers';\nimport * as langProvider from '../../../util/langProvider';\nimport { copyTextToClipboard } from '../../../util/clipboard';\nimport { GlobalState } from '../../types';\n\nconst FOCUS_DURATION = 1500;\nconst FOCUS_NO_HIGHLIGHT_DURATION = FAST_SMOOTH_MAX_DURATION + ANIMATION_END_DELAY;\nconst POLL_RESULT_OPEN_DELAY_MS = 450;\nconst SERVICE_NOTIFICATIONS_MAX_AMOUNT = 1e3;\n\nlet blurTimeout: number | undefined;\n\naddActionHandler('setScrollOffset', (global, actions, payload) => {\n const { chatId, threadId, scrollOffset } = payload!;\n\n return replaceThreadParam(global, chatId, threadId, 'scrollOffset', scrollOffset);\n});\n\naddActionHandler('setReplyingToId', (global, actions, payload) => {\n const { messageId } = payload!;\n const currentMessageList = selectCurrentMessageList(global);\n if (!currentMessageList) {\n return undefined;\n }\n const { chatId, threadId } = currentMessageList;\n\n return replaceThreadParam(global, chatId, threadId, 'replyingToId', messageId);\n});\n\naddActionHandler('setEditingId', (global, actions, payload) => {\n const { messageId } = payload!;\n const currentMessageList = selectCurrentMessageList(global);\n if (!currentMessageList) {\n return undefined;\n }\n\n const { chatId, threadId, type } = currentMessageList;\n const paramName = type === 'scheduled' ? 'editingScheduledId' : 'editingId';\n\n return replaceThreadParam(global, chatId, threadId, paramName, messageId);\n});\n\naddActionHandler('setEditingDraft', (global, actions, payload) => {\n const {\n text, chatId, threadId, type,\n } = payload;\n\n const paramName = type === 'scheduled' ? 'editingScheduledDraft' : 'editingDraft';\n\n return replaceThreadParam(global, chatId, threadId, paramName, text);\n});\n\naddActionHandler('editLastMessage', (global) => {\n const { chatId, threadId } = selectCurrentMessageList(global) || {};\n if (!chatId || !threadId) {\n return undefined;\n }\n\n const chatMessages = selectChatMessages(global, chatId);\n const viewportIds = selectViewportIds(global, chatId, threadId);\n if (!chatMessages || !viewportIds) {\n return undefined;\n }\n\n const lastOwnEditableMessageId = findLast(viewportIds, (id) => {\n return Boolean(chatMessages[id] && selectAllowedMessageActions(global, chatMessages[id], threadId).canEdit);\n });\n\n if (!lastOwnEditableMessageId) {\n return undefined;\n }\n\n return replaceThreadParam(global, chatId, threadId, 'editingId', lastOwnEditableMessageId);\n});\n\naddActionHandler('replyToNextMessage', (global, actions, payload) => {\n const { targetIndexDelta } = payload;\n const { chatId, threadId } = selectCurrentMessageList(global) || {};\n if (!chatId || !threadId) {\n return;\n }\n\n const chatMessages = selectChatMessages(global, chatId);\n const viewportIds = selectViewportIds(global, chatId, threadId);\n if (!chatMessages || !viewportIds) {\n return;\n }\n\n const replyingToId = selectReplyingToId(global, chatId, threadId);\n const isLatest = selectIsViewportNewest(global, chatId, threadId);\n\n let messageId: number | undefined;\n\n if (!isLatest || !replyingToId) {\n if (threadId === MAIN_THREAD_ID) {\n const chat = selectChat(global, chatId);\n\n messageId = chat?.lastMessage?.id;\n } else {\n const threadInfo = selectThreadInfo(global, chatId, threadId);\n\n messageId = threadInfo?.lastMessageId;\n }\n } else {\n const chatMessageKeys = Object.keys(chatMessages);\n const indexOfCurrent = chatMessageKeys.indexOf(replyingToId.toString());\n const newIndex = indexOfCurrent + targetIndexDelta;\n messageId = newIndex <= chatMessageKeys.length + 1 && newIndex >= 0\n ? Number(chatMessageKeys[newIndex])\n : undefined;\n }\n actions.setReplyingToId({ messageId });\n actions.focusMessage({\n chatId, threadId, messageId,\n });\n});\n\naddActionHandler('openAudioPlayer', (global, actions, payload) => {\n const {\n chatId, threadId, messageId, origin, volume, playbackRate, isMuted,\n } = payload;\n\n return {\n ...global,\n audioPlayer: {\n chatId,\n threadId,\n messageId,\n origin: origin ?? global.audioPlayer.origin,\n volume: volume ?? global.audioPlayer.volume,\n playbackRate: playbackRate || global.audioPlayer.playbackRate,\n isMuted: isMuted || global.audioPlayer.isMuted,\n },\n };\n});\n\naddActionHandler('setAudioPlayerVolume', (global, actions, payload) => {\n const {\n volume,\n } = payload;\n\n return {\n ...global,\n audioPlayer: {\n ...global.audioPlayer,\n volume,\n },\n };\n});\n\naddActionHandler('setAudioPlayerPlaybackRate', (global, actions, payload) => {\n const {\n playbackRate,\n } = payload;\n\n return {\n ...global,\n audioPlayer: {\n ...global.audioPlayer,\n playbackRate,\n },\n };\n});\n\naddActionHandler('setAudioPlayerMuted', (global, actions, payload) => {\n const {\n isMuted,\n } = payload;\n\n return {\n ...global,\n audioPlayer: {\n ...global.audioPlayer,\n isMuted,\n },\n };\n});\n\naddActionHandler('setAudioPlayerOrigin', (global, actions, payload) => {\n const {\n origin,\n } = payload;\n\n return {\n ...global,\n audioPlayer: {\n ...global.audioPlayer,\n origin,\n },\n };\n});\n\naddActionHandler('closeAudioPlayer', (global) => {\n return {\n ...global,\n audioPlayer: {\n volume: global.audioPlayer.volume,\n playbackRate: global.audioPlayer.playbackRate,\n isMuted: global.audioPlayer.isMuted,\n },\n };\n});\n\naddActionHandler('openPollResults', (global, actions, payload) => {\n const { chatId, messageId } = payload!;\n\n const shouldOpenInstantly = selectIsRightColumnShown(global);\n\n if (!shouldOpenInstantly) {\n window.setTimeout(() => {\n global = getGlobal();\n\n setGlobal({\n ...global,\n pollResults: {\n chatId,\n messageId,\n voters: {},\n },\n });\n }, POLL_RESULT_OPEN_DELAY_MS);\n } else if (chatId !== global.pollResults.chatId || messageId !== global.pollResults.messageId) {\n return {\n ...global,\n pollResults: {\n chatId,\n messageId,\n voters: {},\n },\n };\n }\n\n return undefined;\n});\n\naddActionHandler('closePollResults', (global) => {\n return {\n ...global,\n pollResults: {},\n };\n});\n\naddActionHandler('focusLastMessage', (global, actions) => {\n const currentMessageList = selectCurrentMessageList(global);\n if (!currentMessageList) {\n return;\n }\n\n const { chatId, threadId } = currentMessageList;\n\n let lastMessageId: number | undefined;\n if (threadId === MAIN_THREAD_ID) {\n const chat = selectChat(global, chatId);\n\n lastMessageId = chat?.lastMessage?.id;\n } else {\n const threadInfo = selectThreadInfo(global, chatId, threadId);\n\n lastMessageId = threadInfo?.lastMessageId;\n }\n\n if (!lastMessageId) {\n return;\n }\n\n actions.focusMessage({\n chatId, threadId, messageId: lastMessageId, noHighlight: true,\n });\n});\n\naddActionHandler('focusNextReply', (global, actions) => {\n const currentMessageList = selectCurrentMessageList(global);\n if (!currentMessageList) {\n return undefined;\n }\n\n const { chatId, threadId } = currentMessageList;\n\n const replyStack = selectReplyStack(global, chatId, threadId);\n\n if (!replyStack || replyStack.length === 0) {\n actions.focusLastMessage();\n } else {\n const messageId = replyStack.pop();\n\n global = replaceThreadParam(global, chatId, threadId, 'replyStack', [...replyStack]);\n\n setGlobal(global);\n\n actions.focusMessage({\n chatId,\n threadId,\n messageId,\n });\n }\n\n return undefined;\n});\n\naddActionHandler('focusMessage', (global, actions, payload) => {\n const {\n chatId, threadId = MAIN_THREAD_ID, messageListType = 'thread', noHighlight, groupedId, groupedChatId,\n replyMessageId, isResizingContainer,\n } = payload!;\n\n let { messageId } = payload!;\n\n if (groupedId !== undefined) {\n const ids = selectForwardedMessageIdsByGroupId(global, groupedChatId, groupedId);\n if (ids?.length) {\n ([messageId] = ids);\n }\n }\n\n const currentMessageList = selectCurrentMessageList(global);\n const shouldSwitchChat = !currentMessageList || (\n chatId !== currentMessageList.chatId\n || threadId !== currentMessageList.threadId\n || messageListType !== currentMessageList.type\n );\n\n if (blurTimeout) {\n clearTimeout(blurTimeout);\n blurTimeout = undefined;\n }\n blurTimeout = window.setTimeout(() => {\n let newGlobal = getGlobal();\n newGlobal = updateFocusedMessage(newGlobal);\n newGlobal = updateFocusDirection(newGlobal);\n setGlobal(newGlobal);\n }, noHighlight ? FOCUS_NO_HIGHLIGHT_DURATION : FOCUS_DURATION);\n\n global = updateFocusedMessage(global, chatId, messageId, noHighlight, isResizingContainer);\n global = updateFocusDirection(global, undefined);\n\n if (replyMessageId) {\n const replyStack = selectReplyStack(global, chatId, threadId) || [];\n global = replaceThreadParam(global, chatId, threadId, 'replyStack', [...replyStack, replyMessageId]);\n }\n\n if (shouldSwitchChat) {\n global = updateFocusDirection(global, FocusDirection.Static);\n }\n\n const viewportIds = selectViewportIds(global, chatId, threadId);\n if (viewportIds && viewportIds.includes(messageId)) {\n setGlobal(global);\n actions.openChat({ id: chatId, threadId });\n return undefined;\n }\n\n if (shouldSwitchChat) {\n global = replaceThreadParam(global, chatId, threadId, 'viewportIds', undefined);\n }\n\n global = replaceThreadParam(global, chatId, threadId, 'outlyingIds', undefined);\n\n if (viewportIds && !shouldSwitchChat) {\n const direction = messageId > viewportIds[0] ? FocusDirection.Down : FocusDirection.Up;\n global = updateFocusDirection(global, direction);\n }\n\n setGlobal(global);\n\n actions.openChat({ id: chatId, threadId });\n actions.loadViewportMessages();\n return undefined;\n});\n\naddActionHandler('openForwardMenu', (global, actions, payload) => {\n const { fromChatId, messageIds, groupedId } = payload!;\n let groupedMessageIds;\n if (groupedId) {\n groupedMessageIds = selectMessageIdsByGroupId(global, fromChatId, groupedId);\n }\n return {\n ...global,\n forwardMessages: {\n fromChatId,\n messageIds: groupedMessageIds || messageIds,\n isModalShown: true,\n },\n };\n});\n\naddActionHandler('exitForwardMode', (global) => {\n setGlobal({\n ...global,\n forwardMessages: {},\n });\n});\n\naddActionHandler('setForwardChatId', (global, actions, payload) => {\n const { id } = payload!;\n\n setGlobal({\n ...global,\n forwardMessages: {\n ...global.forwardMessages,\n toChatId: id,\n isModalShown: false,\n },\n });\n\n actions.openChat({ id });\n actions.closeMediaViewer();\n actions.exitMessageSelectMode();\n});\n\naddActionHandler('openForwardMenuForSelectedMessages', (global, actions) => {\n if (!global.selectedMessages) {\n return;\n }\n\n const { chatId: fromChatId, messageIds } = global.selectedMessages;\n\n actions.openForwardMenu({ fromChatId, messageIds });\n});\n\naddActionHandler('cancelMessageMediaDownload', (global, actions, payload) => {\n const { message } = payload!;\n\n const byChatId = global.activeDownloads.byChatId[message.chatId];\n if (!byChatId || !byChatId.length) return;\n\n setGlobal({\n ...global,\n activeDownloads: {\n byChatId: {\n ...global.activeDownloads.byChatId,\n [message.chatId]: byChatId.filter((id) => id !== message.id),\n },\n },\n });\n});\n\naddActionHandler('downloadMessageMedia', (global, actions, payload) => {\n const { message } = payload!;\n if (!message) return;\n\n setGlobal({\n ...global,\n activeDownloads: {\n byChatId: {\n ...global.activeDownloads.byChatId,\n [message.chatId]: [...(global.activeDownloads.byChatId[message.chatId] || []), message.id],\n },\n },\n });\n});\n\naddActionHandler('downloadSelectedMessages', (global, actions) => {\n if (!global.selectedMessages) {\n return;\n }\n\n const { chatId, messageIds } = global.selectedMessages;\n const { threadId } = selectCurrentMessageList(global) || {};\n\n const chatMessages = selectChatMessages(global, chatId);\n if (!chatMessages || !threadId) return;\n const messages = messageIds.map((id) => chatMessages[id])\n .filter((message) => selectAllowedMessageActions(global, message, threadId).canDownload);\n messages.forEach((message) => actions.downloadMessageMedia({ message }));\n});\n\naddActionHandler('enterMessageSelectMode', (global, actions, payload) => {\n const { messageId } = payload || {};\n const openChat = selectCurrentChat(global);\n if (!openChat) {\n return global;\n }\n\n return enterMessageSelectMode(global, openChat.id, messageId);\n});\n\naddActionHandler('toggleMessageSelection', (global, actions, payload) => {\n const {\n messageId,\n groupedId,\n childMessageIds,\n withShift,\n } = payload!;\n const currentMessageList = selectCurrentMessageList(global);\n if (!currentMessageList) {\n return;\n }\n\n const { chatId, threadId, type: messageListType } = currentMessageList;\n\n global = toggleMessageSelection(\n global, chatId, threadId, messageListType, messageId, groupedId, childMessageIds, withShift,\n );\n\n setGlobal(global);\n\n if (global.shouldShowContextMenuHint) {\n actions.disableContextMenuHint();\n actions.showNotification({\n // eslint-disable-next-line max-len\n message: `To **edit** or **reply**, close this menu. Then ${IS_TOUCH_ENV ? 'long tap' : 'right click'} on a message.`,\n });\n }\n});\n\naddActionHandler('disableContextMenuHint', (global) => {\n if (!global.shouldShowContextMenuHint) {\n return undefined;\n }\n\n return {\n ...global,\n shouldShowContextMenuHint: false,\n };\n});\n\naddActionHandler('exitMessageSelectMode', exitMessageSelectMode);\n\naddActionHandler('openPollModal', (global) => {\n return {\n ...global,\n isPollModalOpen: true,\n };\n});\n\naddActionHandler('closePollModal', (global) => {\n return {\n ...global,\n isPollModalOpen: false,\n };\n});\n\naddActionHandler('checkVersionNotification', (global, actions) => {\n const currentVersion = APP_VERSION.split('.').slice(0, 2).join('.');\n const { serviceNotifications } = global;\n\n if (serviceNotifications.find(({ version }) => version === currentVersion)) {\n return;\n }\n\n const message: Omit = {\n chatId: SERVICE_NOTIFICATIONS_USER_ID,\n date: getServerTime(global.serverTimeOffset),\n content: {\n text: parseMessageInput(versionNotification),\n },\n isOutgoing: false,\n };\n\n actions.createServiceNotification({\n message,\n version: currentVersion,\n });\n});\n\naddActionHandler('createServiceNotification', (global, actions, payload) => {\n const { message, version } = payload;\n const { serviceNotifications } = global;\n const serviceChat = selectChat(global, SERVICE_NOTIFICATIONS_USER_ID)!;\n\n const maxId = Math.max(\n serviceChat.lastMessage?.id || 0,\n ...serviceNotifications.map(({ id }) => id),\n );\n const fractionalPart = (serviceNotifications.length + 1) / SERVICE_NOTIFICATIONS_MAX_AMOUNT;\n // The fractional ID is made of the largest integer ID and an incremented fractional part\n const id = Math.floor(maxId) + fractionalPart;\n\n message.id = id;\n\n const serviceNotification = {\n id,\n message,\n version,\n isUnread: true,\n };\n\n setGlobal({\n ...global,\n serviceNotifications: [\n ...serviceNotifications.slice(-SERVICE_NOTIFICATIONS_MAX_AMOUNT),\n serviceNotification,\n ],\n });\n\n actions.apiUpdate({\n '@type': 'newMessage',\n id: message.id,\n chatId: message.chatId,\n message,\n });\n});\n\naddActionHandler('openReactorListModal', (global, actions, payload) => {\n const { chatId, messageId } = payload!;\n\n return {\n ...global,\n reactorModal: { chatId, messageId },\n };\n});\n\naddActionHandler('closeReactorListModal', (global) => {\n return {\n ...global,\n reactorModal: undefined,\n };\n});\n\naddActionHandler('openSeenByModal', (global, actions, payload) => {\n const { chatId, messageId } = payload!;\n\n return {\n ...global,\n seenByModal: { chatId, messageId },\n };\n});\n\naddActionHandler('closeSeenByModal', (global) => {\n return {\n ...global,\n seenByModal: undefined,\n };\n});\n\naddActionHandler('copySelectedMessages', (global) => {\n if (!global.selectedMessages) {\n return;\n }\n\n const { chatId, messageIds } = global.selectedMessages;\n copyTextForMessages(global, chatId, messageIds);\n});\n\naddActionHandler('copyMessagesByIds', (global, actions, payload: { messageIds?: number[] }) => {\n const { messageIds } = payload;\n const chat = selectCurrentChat(global);\n if (!messageIds || messageIds.length === 0 || !chat) {\n return;\n }\n\n copyTextForMessages(global, chat.id, messageIds);\n});\n\nfunction copyTextForMessages(global: GlobalState, chatId: string, messageIds: number[]) {\n const { threadId } = selectCurrentMessageList(global) || {};\n const lang = langProvider.getTranslation;\n\n const chatMessages = selectChatMessages(global, chatId);\n if (!chatMessages || !threadId) return;\n const messages = messageIds\n .map((id) => chatMessages[id])\n .filter((message) => selectAllowedMessageActions(global, message, threadId).canCopy)\n .sort((message1, message2) => message1.id - message2.id);\n\n const result = messages.reduce((acc, message) => {\n const sender = selectSender(global, message);\n acc.push(`> ${sender ? getSenderTitle(lang, sender) : ''}:`);\n acc.push(`${getMessageSummaryText(lang, message, false, 0, undefined, true)}\\n`);\n\n return acc;\n }, [] as string[]);\n\n copyTextToClipboard(result.join('\\n'));\n}\n","import { addActionHandler } from '../../index';\n\nimport { updateGlobalSearch, updateGlobalSearchContent } from '../../reducers';\n\nconst MAX_RECENTLY_FOUND_IDS = 10;\n\naddActionHandler('setGlobalSearchQuery', (global, actions, payload) => {\n const { query } = payload!;\n const { chatId } = global.globalSearch;\n\n return updateGlobalSearch(global, {\n globalResults: {},\n localResults: {},\n resultsByType: undefined,\n ...(query ? { fetchingStatus: { chats: !chatId, messages: true } } : { fetchingStatus: undefined }),\n query,\n });\n});\n\naddActionHandler('addRecentlyFoundChatId', (global, actions, payload) => {\n const { id } = payload!;\n const { recentlyFoundChatIds } = global.globalSearch;\n\n if (!recentlyFoundChatIds) {\n return updateGlobalSearch(global, { recentlyFoundChatIds: [id] });\n }\n\n const newRecentIds = recentlyFoundChatIds.filter((chatId) => chatId !== id);\n newRecentIds.unshift(id);\n if (newRecentIds.length > MAX_RECENTLY_FOUND_IDS) {\n newRecentIds.pop();\n }\n\n return updateGlobalSearch(global, { recentlyFoundChatIds: newRecentIds });\n});\n\naddActionHandler('clearRecentlyFoundChats', (global) => {\n return updateGlobalSearch(global, { recentlyFoundChatIds: undefined });\n});\n\naddActionHandler('setGlobalSearchContent', (global, actions, payload) => {\n const { content } = payload!;\n\n return updateGlobalSearchContent(global, content);\n});\n\naddActionHandler('setGlobalSearchChatId', (global, actions, payload) => {\n const { id } = payload!;\n\n return updateGlobalSearch(global, { chatId: id, query: undefined, resultsByType: undefined });\n});\n","import { addActionHandler } from '../../index';\n\naddActionHandler('setStickerSearchQuery', (global, actions, payload) => {\n const { query } = payload!;\n\n return {\n ...global,\n stickers: {\n ...global.stickers,\n search: {\n query,\n resultIds: undefined,\n },\n },\n };\n});\n\naddActionHandler('setGifSearchQuery', (global, actions, payload) => {\n const { query } = payload!;\n\n return {\n ...global,\n gifs: {\n ...global.gifs,\n search: {\n query,\n offsetId: undefined,\n results: undefined,\n },\n },\n };\n});\n","import { addActionHandler } from '../../index';\n\nimport { closeNewContactDialog, updateUserSearch } from '../../reducers';\n\naddActionHandler('setUserSearchQuery', (global, actions, payload) => {\n const { query } = payload!;\n\n return updateUserSearch(global, {\n globalUserIds: undefined,\n localUserIds: undefined,\n fetchingStatus: Boolean(query),\n query,\n });\n});\n\naddActionHandler('openAddContactDialog', (global, actions, payload) => {\n const { userId } = payload!;\n\n return {\n ...global,\n newContact: { userId },\n };\n});\n\naddActionHandler('openNewContactDialog', (global) => {\n return {\n ...global,\n newContact: {\n isByPhoneNumber: true,\n },\n };\n});\n\naddActionHandler('closeNewContactDialog', (global) => {\n return closeNewContactDialog(global);\n});\n","import { addActionHandler } from '../../index';\n\nimport { ApiError } from '../../../api/types';\n\nimport { IS_SINGLE_COLUMN_LAYOUT, IS_TABLET_COLUMN_LAYOUT } from '../../../util/environment';\nimport getReadableErrorText from '../../../util/getReadableErrorText';\nimport { selectCurrentMessageList } from '../../selectors';\nimport generateIdFor from '../../../util/generateIdFor';\n\nconst MAX_STORED_EMOJIS = 18; // Represents two rows of recent emojis\n\naddActionHandler('toggleChatInfo', (global, action, payload) => {\n return {\n ...global,\n isChatInfoShown: payload !== undefined ? payload : !global.isChatInfoShown,\n };\n});\n\naddActionHandler('setLeftColumnWidth', (global, actions, payload) => {\n const leftColumnWidth = payload;\n\n return {\n ...global,\n leftColumnWidth,\n };\n});\n\naddActionHandler('resetLeftColumnWidth', (global) => {\n return {\n ...global,\n leftColumnWidth: undefined,\n };\n});\n\naddActionHandler('toggleManagement', (global) => {\n const { chatId } = selectCurrentMessageList(global) || {};\n\n if (!chatId) {\n return undefined;\n }\n\n return {\n ...global,\n management: {\n byChatId: {\n ...global.management.byChatId,\n [chatId]: {\n ...global.management.byChatId[chatId],\n isActive: !(global.management.byChatId[chatId] || {}).isActive,\n },\n },\n },\n };\n});\n\naddActionHandler('requestNextManagementScreen', (global, actions, payload) => {\n const { screen } = payload || {};\n const { chatId } = selectCurrentMessageList(global) || {};\n\n if (!chatId) {\n return undefined;\n }\n\n return {\n ...global,\n management: {\n byChatId: {\n ...global.management.byChatId,\n [chatId]: {\n ...global.management.byChatId[chatId],\n isActive: true,\n nextScreen: screen,\n },\n },\n },\n };\n});\n\naddActionHandler('closeManagement', (global) => {\n const { chatId } = selectCurrentMessageList(global) || {};\n\n if (!chatId) {\n return undefined;\n }\n\n return {\n ...global,\n management: {\n byChatId: {\n ...global.management.byChatId,\n [chatId]: {\n ...global.management.byChatId[chatId],\n isActive: false,\n },\n },\n },\n };\n});\n\naddActionHandler('openChat', (global) => {\n if (!IS_SINGLE_COLUMN_LAYOUT && !IS_TABLET_COLUMN_LAYOUT) {\n return undefined;\n }\n\n return {\n ...global,\n isLeftColumnShown: global.messages.messageLists.length === 0,\n };\n});\n\naddActionHandler('toggleStatistics', (global) => {\n return {\n ...global,\n isStatisticsShown: !global.isStatisticsShown,\n };\n});\n\naddActionHandler('toggleLeftColumn', (global) => {\n return {\n ...global,\n isLeftColumnShown: !global.isLeftColumnShown,\n };\n});\n\naddActionHandler('addRecentEmoji', (global, action, payload) => {\n const { emoji } = payload!;\n const { recentEmojis } = global;\n if (!recentEmojis) {\n return {\n ...global,\n recentEmojis: [emoji],\n };\n }\n\n const newEmojis = recentEmojis.filter((e) => e !== emoji);\n newEmojis.unshift(emoji);\n if (newEmojis.length > MAX_STORED_EMOJIS) {\n newEmojis.pop();\n }\n\n return {\n ...global,\n recentEmojis: newEmojis,\n };\n});\n\naddActionHandler('addRecentSticker', (global, action, payload) => {\n const { sticker } = payload!;\n const { recent } = global.stickers;\n if (!recent) {\n return {\n ...global,\n stickers: {\n ...global.stickers,\n recent: {\n hash: '0',\n stickers: [sticker],\n },\n },\n };\n }\n\n const newStickers = recent.stickers.filter((s) => s.id !== sticker.id);\n newStickers.unshift(sticker);\n\n return {\n ...global,\n stickers: {\n ...global.stickers,\n recent: {\n ...recent,\n stickers: newStickers,\n },\n },\n };\n});\n\naddActionHandler('showNotification', (global, actions, payload) => {\n const notification = payload!;\n notification.localId = generateIdFor({});\n\n const newNotifications = [...global.notifications];\n const existingNotificationIndex = newNotifications.findIndex((n) => n.message === notification.message);\n if (existingNotificationIndex !== -1) {\n newNotifications.splice(existingNotificationIndex, 1);\n }\n\n newNotifications.push(notification);\n\n return {\n ...global,\n notifications: newNotifications,\n };\n});\n\naddActionHandler('dismissNotification', (global, actions, payload) => {\n const newNotifications = global.notifications.filter(({ localId }) => localId !== payload.localId);\n\n return {\n ...global,\n notifications: newNotifications,\n };\n});\n\naddActionHandler('showDialog', (global, actions, payload) => {\n const { data } = payload!;\n\n // Filter out errors that we don't want to show to the user\n if ('message' in data && data.hasErrorKey && !getReadableErrorText(data)) {\n return global;\n }\n\n const newDialogs = [...global.dialogs];\n if ('message' in data) {\n const existingErrorIndex = newDialogs.findIndex((err) => (err as ApiError).message === data.message);\n if (existingErrorIndex !== -1) {\n newDialogs.splice(existingErrorIndex, 1);\n }\n }\n\n newDialogs.push(data);\n\n return {\n ...global,\n dialogs: newDialogs,\n };\n});\n\naddActionHandler('dismissDialog', (global) => {\n const newDialogs = [...global.dialogs];\n\n newDialogs.pop();\n\n return {\n ...global,\n dialogs: newDialogs,\n };\n});\n\naddActionHandler('toggleSafeLinkModal', (global, actions, payload) => {\n const { url: safeLinkModalUrl } = payload;\n\n return {\n ...global,\n safeLinkModalUrl,\n };\n});\n\naddActionHandler('openHistoryCalendar', (global, actions, payload) => {\n const { selectedAt } = payload;\n\n return {\n ...global,\n historyCalendarSelectedAt: selectedAt,\n };\n});\n\naddActionHandler('closeHistoryCalendar', (global) => {\n return {\n ...global,\n historyCalendarSelectedAt: undefined,\n };\n});\n","import { addActionHandler } from '../../index';\n\nimport { clearPayment, closeInvoice } from '../../reducers';\n\naddActionHandler('openPaymentModal', (global, actions, payload) => {\n const { chatId, messageId } = payload;\n return {\n ...global,\n payment: {\n ...global.payment,\n chatId,\n messageId,\n isPaymentModalOpen: true,\n },\n };\n});\n\naddActionHandler('closePaymentModal', (global) => {\n global = clearPayment(global);\n global = closeInvoice(global);\n return global;\n});\n\naddActionHandler('addPaymentError', (global, actions, payload) => {\n const { error } = payload!;\n\n return {\n ...global,\n payment: {\n ...global.payment,\n error,\n },\n };\n});\n","import { addActionHandler } from '../../index';\n\naddActionHandler('openMediaViewer', (global, actions, payload) => {\n const {\n chatId, threadId, messageId, avatarOwnerId, profilePhotoIndex, origin, volume, playbackRate, isMuted,\n } = payload;\n\n return {\n ...global,\n mediaViewer: {\n ...global.mediaViewer,\n chatId,\n threadId,\n messageId,\n avatarOwnerId,\n profilePhotoIndex,\n origin,\n volume: volume ?? global.mediaViewer.volume,\n playbackRate: playbackRate || global.mediaViewer.playbackRate,\n isMuted: isMuted || global.mediaViewer.isMuted,\n },\n forwardMessages: {},\n };\n});\n\naddActionHandler('closeMediaViewer', (global) => {\n const { volume, isMuted, playbackRate } = global.mediaViewer;\n return {\n ...global,\n mediaViewer: {\n volume,\n isMuted,\n playbackRate,\n },\n };\n});\n\naddActionHandler('setMediaViewerVolume', (global, actions, payload) => {\n const {\n volume,\n } = payload;\n\n return {\n ...global,\n mediaViewer: {\n ...global.mediaViewer,\n volume,\n },\n };\n});\n\naddActionHandler('setMediaViewerPlaybackRate', (global, actions, payload) => {\n const {\n playbackRate,\n } = payload;\n\n return {\n ...global,\n mediaViewer: {\n ...global.mediaViewer,\n playbackRate,\n },\n };\n});\n\naddActionHandler('setMediaViewerMuted', (global, actions, payload) => {\n const {\n isMuted,\n } = payload;\n\n return {\n ...global,\n mediaViewer: {\n ...global.mediaViewer,\n isMuted,\n },\n };\n});\n","import { addActionHandler, getGlobal, setGlobal } from '../../index';\n\nimport { GlobalActions } from '../../types';\nimport {\n ApiAttachment,\n ApiChat,\n ApiMessage,\n ApiMessageEntity,\n ApiNewPoll,\n ApiOnProgress,\n ApiSticker,\n ApiUser,\n ApiVideo,\n MAIN_THREAD_ID,\n MESSAGE_DELETED,\n} from '../../../api/types';\nimport { LoadMoreDirection } from '../../../types';\n\nimport {\n MAX_MEDIA_FILES_FOR_ALBUM,\n MESSAGE_LIST_SLICE,\n SERVICE_NOTIFICATIONS_USER_ID,\n} from '../../../config';\nimport { IS_IOS } from '../../../util/environment';\nimport { callApi, cancelApiProgress } from '../../../api/gramjs';\nimport {\n areSortedArraysIntersecting, buildCollectionByKey, split, unique,\n} from '../../../util/iteratees';\nimport {\n addUsers,\n addChatMessagesById,\n replaceThreadParam,\n safeReplaceViewportIds,\n updateChatMessage,\n addChats,\n updateListedIds,\n updateOutlyingIds,\n replaceScheduledMessages,\n updateThreadInfos,\n updateChat,\n updateThreadUnreadFromForwardedMessage,\n updateSponsoredMessage,\n} from '../../reducers';\nimport {\n selectChat,\n selectChatMessage,\n selectCurrentMessageList,\n selectFocusedMessageId,\n selectCurrentChat,\n selectListedIds,\n selectOutlyingIds,\n selectViewportIds,\n selectRealLastReadId,\n selectReplyingToId,\n selectEditingId,\n selectDraft,\n selectThreadOriginChat,\n selectThreadTopMessageId,\n selectEditingScheduledId,\n selectEditingMessage,\n selectScheduledMessage,\n selectNoWebPage,\n selectFirstUnreadId,\n selectUser,\n selectSendAs,\n selectSponsoredMessage,\n} from '../../selectors';\nimport { debounce, rafPromise } from '../../../util/schedulers';\nimport { isServiceNotificationMessage } from '../../helpers';\n\nconst uploadProgressCallbacks = new Map();\n\nconst runDebouncedForMarkRead = debounce((cb) => cb(), 500, false);\n\naddActionHandler('loadViewportMessages', (global, actions, payload) => {\n const {\n direction = LoadMoreDirection.Around,\n isBudgetPreload = false,\n } = payload || {};\n\n let { chatId, threadId } = payload || {};\n\n if (!chatId) {\n const currentMessageList = selectCurrentMessageList(global);\n if (!currentMessageList) {\n return undefined;\n }\n\n chatId = currentMessageList.chatId;\n threadId = currentMessageList.threadId;\n }\n\n const chat = selectChat(global, chatId);\n // TODO Revise if `chat.isRestricted` check is needed\n if (!chat || chat.isRestricted) {\n return undefined;\n }\n\n const viewportIds = selectViewportIds(global, chatId, threadId);\n const listedIds = selectListedIds(global, chatId, threadId);\n const outlyingIds = selectOutlyingIds(global, chatId, threadId);\n\n if (!viewportIds || !viewportIds.length || direction === LoadMoreDirection.Around) {\n const offsetId = selectFocusedMessageId(global, chatId) || selectRealLastReadId(global, chatId, threadId);\n const isOutlying = Boolean(offsetId && listedIds && !listedIds.includes(offsetId));\n const historyIds = (isOutlying ? outlyingIds : listedIds) || [];\n const {\n newViewportIds, areSomeLocal, areAllLocal,\n } = getViewportSlice(historyIds, offsetId, LoadMoreDirection.Around);\n\n if (areSomeLocal && newViewportIds.length >= MESSAGE_LIST_SLICE) {\n global = safeReplaceViewportIds(global, chatId, threadId, newViewportIds);\n }\n\n if (!areAllLocal) {\n void loadViewportMessages(chat, threadId, offsetId, LoadMoreDirection.Around, isOutlying, isBudgetPreload);\n }\n } else {\n const offsetId = direction === LoadMoreDirection.Backwards ? viewportIds[0] : viewportIds[viewportIds.length - 1];\n const isOutlying = Boolean(outlyingIds);\n const historyIds = (isOutlying ? outlyingIds : listedIds)!;\n const {\n newViewportIds, areSomeLocal, areAllLocal,\n } = getViewportSlice(historyIds, offsetId, direction);\n\n if (areSomeLocal) {\n global = safeReplaceViewportIds(global, chatId, threadId, newViewportIds);\n }\n\n void loadWithBudget(actions, areAllLocal, isOutlying, isBudgetPreload, chat, threadId, direction, offsetId);\n\n if (isBudgetPreload) {\n return undefined;\n }\n }\n\n return global;\n});\n\nasync function loadWithBudget(\n actions: GlobalActions,\n areAllLocal: boolean, isOutlying: boolean, isBudgetPreload: boolean,\n chat: ApiChat, threadId: number, direction: LoadMoreDirection, offsetId?: number,\n) {\n if (!areAllLocal) {\n await loadViewportMessages(\n chat, threadId, offsetId, direction, isOutlying, isBudgetPreload,\n );\n }\n\n if (!isBudgetPreload) {\n // Let reducer return and update global\n await Promise.resolve();\n actions.loadViewportMessages({\n chatId: chat.id, threadId, direction, isBudgetPreload: true,\n });\n }\n}\n\naddActionHandler('loadMessage', async (global, actions, payload) => {\n const {\n chatId, messageId, replyOriginForId, threadUpdate,\n } = payload!;\n\n const chat = selectChat(global, chatId);\n if (!chat) {\n return undefined;\n }\n\n const message = await loadMessage(chat, messageId, replyOriginForId);\n if (message && threadUpdate) {\n const { lastMessageId, isDeleting } = threadUpdate;\n\n return updateThreadUnreadFromForwardedMessage(\n getGlobal(),\n message,\n chatId,\n lastMessageId,\n isDeleting,\n );\n }\n\n return undefined;\n});\n\naddActionHandler('sendMessage', (global, actions, payload) => {\n const currentMessageList = selectCurrentMessageList(global);\n if (!currentMessageList) {\n return undefined;\n }\n\n const { chatId, threadId, type } = currentMessageList;\n\n if (type === 'scheduled' && !payload.scheduledAt) {\n return {\n ...global,\n messages: {\n ...global.messages,\n contentToBeScheduled: payload,\n },\n };\n }\n\n const chat = selectChat(global, chatId)!;\n\n const params = {\n ...payload,\n chat,\n replyingTo: selectReplyingToId(global, chatId, threadId),\n noWebPage: selectNoWebPage(global, chatId, threadId),\n sendAs: selectSendAs(global, chatId),\n };\n\n actions.setReplyingToId({ messageId: undefined });\n actions.clearWebPagePreview({ chatId, threadId, value: false });\n\n const isSingle = !payload.attachments || payload.attachments.length <= 1;\n const isGrouped = !isSingle && payload.attachments && payload.attachments.length > 1;\n\n if (isSingle) {\n const { attachments, ...restParams } = params;\n sendMessage({\n ...restParams,\n attachment: attachments ? attachments[0] : undefined,\n });\n } else if (isGrouped) {\n const {\n text, entities, attachments, ...commonParams\n } = params;\n const groupedAttachments = split(attachments, MAX_MEDIA_FILES_FOR_ALBUM);\n for (let i = 0; i < groupedAttachments.length; i++) {\n const [firstAttachment, ...restAttachments] = groupedAttachments[i];\n const groupedId = `${Date.now()}${i}`;\n\n sendMessage({\n ...commonParams,\n text: i === 0 ? text : undefined,\n entities: i === 0 ? entities : undefined,\n attachment: firstAttachment,\n groupedId: restAttachments.length > 0 ? groupedId : undefined,\n });\n\n restAttachments.forEach((attachment: ApiAttachment) => {\n sendMessage({\n ...commonParams,\n attachment,\n groupedId,\n });\n });\n }\n } else {\n const {\n text, entities, attachments, replyingTo, ...commonParams\n } = params;\n\n if (text) {\n sendMessage({\n ...commonParams,\n text,\n entities,\n replyingTo,\n });\n }\n\n attachments.forEach((attachment: ApiAttachment) => {\n sendMessage({\n ...commonParams,\n attachment,\n });\n });\n }\n\n return undefined;\n});\n\naddActionHandler('editMessage', (global, actions, payload) => {\n const { serverTimeOffset } = global;\n const { text, entities } = payload!;\n\n const currentMessageList = selectCurrentMessageList(global);\n if (!currentMessageList) {\n return;\n }\n\n const { chatId, threadId, type: messageListType } = currentMessageList;\n const chat = selectChat(global, chatId);\n const message = selectEditingMessage(global, chatId, threadId, messageListType);\n if (!chat || !message) {\n return;\n }\n\n void callApi('editMessage', {\n chat, message, text, entities, noWebPage: selectNoWebPage(global, chatId, threadId), serverTimeOffset,\n });\n\n actions.setEditingId({ messageId: undefined });\n});\n\naddActionHandler('cancelSendingMessage', (global, actions, payload) => {\n const { chatId, messageId } = payload!;\n const message = selectChatMessage(global, chatId, messageId);\n const progressCallback = message && uploadProgressCallbacks.get(message.previousLocalId || message.id);\n if (progressCallback) {\n cancelApiProgress(progressCallback);\n }\n\n actions.apiUpdate({\n '@type': 'deleteMessages',\n ids: [messageId],\n chatId,\n });\n});\n\naddActionHandler('saveDraft', (global, actions, payload) => {\n const { chatId, threadId, draft } = payload!;\n if (!draft) {\n return undefined;\n }\n\n const { text, entities } = draft;\n const chat = selectChat(global, chatId)!;\n\n if (threadId === MAIN_THREAD_ID) {\n void callApi('saveDraft', {\n chat,\n text,\n entities,\n replyToMsgId: selectReplyingToId(global, chatId, threadId),\n });\n }\n\n global = replaceThreadParam(global, chatId, threadId, 'draft', draft);\n global = updateChat(global, chatId, { draftDate: Math.round(Date.now() / 1000) });\n\n return global;\n});\n\naddActionHandler('clearDraft', (global, actions, payload) => {\n const { chatId, threadId, localOnly } = payload!;\n if (!selectDraft(global, chatId, threadId)) {\n return undefined;\n }\n\n const chat = selectChat(global, chatId)!;\n\n if (!localOnly && threadId === MAIN_THREAD_ID) {\n void callApi('clearDraft', chat);\n }\n\n global = replaceThreadParam(global, chatId, threadId, 'draft', undefined);\n global = updateChat(global, chatId, { draftDate: undefined });\n\n return global;\n});\n\naddActionHandler('toggleMessageWebPage', (global, actions, payload) => {\n const { chatId, threadId, noWebPage } = payload!;\n\n return replaceThreadParam(global, chatId, threadId, 'noWebPage', noWebPage);\n});\n\naddActionHandler('pinMessage', (global, actions, payload) => {\n const chat = selectCurrentChat(global);\n if (!chat) {\n return;\n }\n\n const {\n messageId, isUnpin, isOneSide, isSilent,\n } = payload!;\n\n void callApi('pinMessage', {\n chat, messageId, isUnpin, isOneSide, isSilent,\n });\n});\n\naddActionHandler('unpinAllMessages', (global, actions, payload) => {\n const chat = selectChat(global, payload.chatId);\n if (!chat) {\n return;\n }\n\n void unpinAllMessages(chat);\n});\n\nasync function unpinAllMessages(chat: ApiChat) {\n await callApi('unpinAllMessages', { chat });\n let global = getGlobal();\n global = replaceThreadParam(global, chat.id, MAIN_THREAD_ID, 'pinnedIds', []);\n setGlobal(global);\n}\n\naddActionHandler('deleteMessages', (global, actions, payload) => {\n const { messageIds, shouldDeleteForAll } = payload!;\n const currentMessageList = selectCurrentMessageList(global);\n if (!currentMessageList) {\n return;\n }\n const { chatId, threadId } = currentMessageList;\n const chat = selectChat(global, chatId)!;\n\n void callApi('deleteMessages', { chat, messageIds, shouldDeleteForAll });\n\n const editingId = selectEditingId(global, chatId, threadId);\n if (messageIds.includes(editingId)) {\n actions.setEditingId({ messageId: undefined });\n }\n});\n\naddActionHandler('deleteScheduledMessages', (global, actions, payload) => {\n const { messageIds } = payload!;\n const currentMessageList = selectCurrentMessageList(global);\n if (!currentMessageList) {\n return;\n }\n\n const { chatId } = currentMessageList;\n const chat = selectChat(global, chatId)!;\n\n void callApi('deleteScheduledMessages', { chat, messageIds });\n\n const editingId = selectEditingScheduledId(global, chatId);\n if (messageIds.includes(editingId)) {\n actions.setEditingId({ messageId: undefined });\n }\n});\n\naddActionHandler('deleteHistory', async (global, actions, payload) => {\n const { chatId, shouldDeleteForAll } = payload!;\n const chat = selectChat(global, chatId);\n if (!chat) {\n return;\n }\n\n const maxId = chat.lastMessage?.id;\n\n await callApi('deleteHistory', { chat, shouldDeleteForAll, maxId });\n\n const activeChat = selectCurrentMessageList(global);\n if (activeChat && activeChat.chatId === chatId) {\n actions.openChat({ id: undefined });\n }\n});\n\naddActionHandler('reportMessages', async (global, actions, payload) => {\n const {\n messageIds, reason, description,\n } = payload!;\n const currentMessageList = selectCurrentMessageList(global);\n if (!currentMessageList) {\n return;\n }\n\n const { chatId } = currentMessageList;\n const chat = selectChat(global, chatId)!;\n\n const result = await callApi('reportMessages', {\n peer: chat, messageIds, reason, description,\n });\n\n actions.showNotification({\n message: result\n ? 'Thank you! Your report will be reviewed by our team.'\n : 'Error occured while submiting report. Please, try again later.',\n });\n});\n\naddActionHandler('sendMessageAction', async (global, actions, payload) => {\n const { action, chatId, threadId } = payload!;\n if (chatId === global.currentUserId) return; // Message actions are disabled in Saved Messages\n\n const chat = selectChat(global, chatId)!;\n if (!chat) return;\n\n await callApi('sendMessageAction', {\n peer: chat, threadId, action,\n });\n});\n\naddActionHandler('markMessageListRead', (global, actions, payload) => {\n const { serverTimeOffset } = global;\n const currentMessageList = selectCurrentMessageList(global);\n if (!currentMessageList) {\n return undefined;\n }\n\n const { chatId, threadId } = currentMessageList;\n const chat = selectThreadOriginChat(global, chatId, threadId);\n if (!chat) {\n return undefined;\n }\n\n const { maxId } = payload!;\n\n runDebouncedForMarkRead(() => {\n void callApi('markMessageListRead', {\n serverTimeOffset, chat, threadId, maxId,\n });\n });\n\n // TODO Support local marking read for threads\n if (threadId !== MAIN_THREAD_ID) {\n return undefined;\n }\n\n if (chatId === SERVICE_NOTIFICATIONS_USER_ID) {\n global = {\n ...global,\n serviceNotifications: global.serviceNotifications.map((notification) => {\n return notification.isUnread && notification.id <= maxId ? { ...notification, isUnread: false } : notification;\n }),\n };\n }\n\n const viewportIds = selectViewportIds(global, chatId, threadId);\n const minId = selectFirstUnreadId(global, chatId, threadId);\n if (!viewportIds || !minId || !chat.unreadCount) {\n return global;\n }\n\n const readCount = countSortedIds(viewportIds!, minId, maxId);\n if (!readCount) {\n return global;\n }\n\n return updateChat(global, chatId, {\n lastReadInboxMessageId: maxId,\n unreadCount: Math.max(0, chat.unreadCount - readCount),\n });\n});\n\naddActionHandler('markMessagesRead', (global, actions, payload) => {\n const chat = selectCurrentChat(global);\n if (!chat) {\n return;\n }\n\n const { messageIds } = payload!;\n\n void callApi('markMessagesRead', { chat, messageIds });\n});\n\naddActionHandler('loadWebPagePreview', (global, actions, payload) => {\n const { text } = payload!;\n void loadWebPagePreview(text);\n});\n\naddActionHandler('clearWebPagePreview', (global) => {\n if (!global.webPagePreview) {\n return undefined;\n }\n\n return {\n ...global,\n webPagePreview: undefined,\n };\n});\n\naddActionHandler('sendPollVote', (global, actions, payload) => {\n const { chatId, messageId, options } = payload!;\n const chat = selectChat(global, chatId);\n\n if (chat) {\n void callApi('sendPollVote', { chat, messageId, options });\n }\n});\n\naddActionHandler('loadPollOptionResults', (global, actions, payload) => {\n const {\n chat, messageId, option, offset, limit, shouldResetVoters,\n } = payload!;\n\n void loadPollOptionResults(chat, messageId, option, offset, limit, shouldResetVoters);\n});\n\naddActionHandler('forwardMessages', (global, action, payload) => {\n const { fromChatId, messageIds, toChatId } = global.forwardMessages;\n const fromChat = fromChatId ? selectChat(global, fromChatId) : undefined;\n const toChat = toChatId ? selectChat(global, toChatId) : undefined;\n const messages = fromChatId && messageIds\n ? messageIds\n .sort((a, b) => a - b)\n .map((id) => selectChatMessage(global, fromChatId, id)).filter(Boolean as any)\n : undefined;\n\n if (!fromChat || !toChat || !messages) {\n return;\n }\n\n const { isSilent, scheduledAt } = payload;\n const sendAs = selectSendAs(global, toChatId!);\n\n const realMessages = messages.filter((m) => !isServiceNotificationMessage(m));\n if (realMessages.length) {\n void callApi('forwardMessages', {\n fromChat,\n toChat,\n messages: realMessages,\n serverTimeOffset: getGlobal().serverTimeOffset,\n isSilent,\n scheduledAt,\n sendAs,\n });\n }\n\n messages\n .filter((m) => isServiceNotificationMessage(m))\n .forEach((message) => {\n const { text, entities } = message.content.text || {};\n const { sticker, poll } = message.content;\n\n void sendMessage({\n chat: toChat,\n text,\n entities,\n sticker,\n poll,\n isSilent,\n scheduledAt,\n sendAs,\n });\n });\n\n setGlobal({\n ...getGlobal(),\n forwardMessages: {},\n });\n});\n\naddActionHandler('loadScheduledHistory', (global, actions, payload) => {\n const { chatId } = payload;\n const chat = selectChat(global, chatId);\n if (!chat) {\n return;\n }\n\n void loadScheduledHistory(chat);\n});\n\naddActionHandler('sendScheduledMessages', (global, actions, payload) => {\n const {\n chatId, id,\n } = payload!;\n\n const chat = selectChat(global, chatId);\n\n if (!chat) {\n return;\n }\n\n void callApi('sendScheduledMessages', {\n chat,\n ids: [id],\n });\n});\n\naddActionHandler('rescheduleMessage', (global, actions, payload) => {\n const {\n chatId, messageId, scheduledAt,\n } = payload!;\n\n const chat = selectChat(global, chatId);\n const message = chat && selectScheduledMessage(global, chat.id, messageId);\n if (!chat || !message) {\n return;\n }\n\n void callApi('rescheduleMessage', {\n chat,\n message,\n scheduledAt,\n });\n});\n\naddActionHandler('requestThreadInfoUpdate', (global, actions, payload) => {\n const { chatId, threadId } = payload;\n const chat = selectThreadOriginChat(global, chatId, threadId);\n if (!chat) {\n return;\n }\n\n void callApi('requestThreadInfoUpdate', { chat, threadId });\n});\n\nasync function loadWebPagePreview(message: string) {\n const webPagePreview = await callApi('fetchWebPagePreview', { message });\n\n setGlobal({\n ...getGlobal(),\n webPagePreview,\n });\n}\n\nasync function loadViewportMessages(\n chat: ApiChat,\n threadId: number,\n offsetId: number | undefined,\n direction: LoadMoreDirection,\n isOutlying = false,\n isBudgetPreload = false,\n) {\n const chatId = chat.id;\n\n let addOffset: number | undefined;\n switch (direction) {\n case LoadMoreDirection.Backwards:\n addOffset = undefined;\n break;\n case LoadMoreDirection.Around:\n addOffset = -(Math.round(MESSAGE_LIST_SLICE / 2) + 1);\n break;\n case LoadMoreDirection.Forwards:\n addOffset = -(MESSAGE_LIST_SLICE + 1);\n break;\n }\n\n const result = await callApi('fetchMessages', {\n chat: selectThreadOriginChat(getGlobal(), chatId, threadId)!,\n offsetId,\n addOffset,\n limit: MESSAGE_LIST_SLICE,\n threadId,\n });\n\n if (!result) {\n return;\n }\n\n const {\n messages, users, chats, threadInfos,\n } = result;\n\n let global = getGlobal();\n\n const localMessages = chatId === SERVICE_NOTIFICATIONS_USER_ID\n ? global.serviceNotifications.map(({ message }) => message)\n : [];\n const allMessages = ([] as ApiMessage[]).concat(messages, localMessages);\n const byId = buildCollectionByKey(allMessages, 'id');\n const ids = Object.keys(byId).map(Number);\n\n global = addChatMessagesById(global, chatId, byId);\n global = isOutlying\n ? updateOutlyingIds(global, chatId, threadId, ids)\n : updateListedIds(global, chatId, threadId, ids);\n\n global = addUsers(global, buildCollectionByKey(users, 'id'));\n global = addChats(global, buildCollectionByKey(chats, 'id'));\n global = updateThreadInfos(global, chatId, threadInfos);\n\n let listedIds = selectListedIds(global, chatId, threadId);\n const outlyingIds = selectOutlyingIds(global, chatId, threadId);\n\n if (isOutlying && listedIds && outlyingIds) {\n if (!outlyingIds.length || areSortedArraysIntersecting(listedIds, outlyingIds)) {\n global = updateListedIds(global, chatId, threadId, outlyingIds);\n listedIds = selectListedIds(global, chatId, threadId);\n global = replaceThreadParam(global, chatId, threadId, 'outlyingIds', undefined);\n isOutlying = false;\n }\n }\n\n if (!isBudgetPreload) {\n const historyIds = isOutlying ? outlyingIds! : listedIds!;\n const { newViewportIds } = getViewportSlice(historyIds, offsetId, direction);\n global = safeReplaceViewportIds(global, chatId, threadId, newViewportIds!);\n }\n\n setGlobal(global);\n}\n\nasync function loadMessage(chat: ApiChat, messageId: number, replyOriginForId: number) {\n const result = await callApi('fetchMessage', { chat, messageId });\n if (!result) {\n return undefined;\n }\n\n if (result === MESSAGE_DELETED) {\n if (replyOriginForId) {\n let global = getGlobal();\n const replyMessage = selectChatMessage(global, chat.id, replyOriginForId);\n global = updateChatMessage(global, chat.id, replyOriginForId, {\n ...replyMessage,\n replyToMessageId: undefined,\n });\n setGlobal(global);\n }\n\n return undefined;\n }\n\n let global = getGlobal();\n global = updateChatMessage(global, chat.id, messageId, result.message);\n global = addUsers(global, buildCollectionByKey(result.users, 'id'));\n setGlobal(global);\n\n return result.message;\n}\n\nfunction findClosestIndex(sourceIds: number[], offsetId: number) {\n if (offsetId < sourceIds[0]) {\n return 0;\n }\n\n if (offsetId > sourceIds[sourceIds.length - 1]) {\n return sourceIds.length - 1;\n }\n\n return sourceIds.findIndex((id, i) => (\n id === offsetId\n || (id < offsetId && sourceIds[i + 1] > offsetId)\n ));\n}\n\nfunction getViewportSlice(\n sourceIds: number[],\n offsetId: number | undefined,\n direction: LoadMoreDirection,\n) {\n const { length } = sourceIds;\n const index = offsetId ? findClosestIndex(sourceIds, offsetId) : -1;\n const isBackwards = direction === LoadMoreDirection.Backwards;\n const indexForDirection = isBackwards ? index : (index + 1) || length;\n const from = indexForDirection - MESSAGE_LIST_SLICE;\n const to = indexForDirection + MESSAGE_LIST_SLICE - 1;\n const newViewportIds = sourceIds.slice(Math.max(0, from), to + 1);\n\n let areSomeLocal;\n let areAllLocal;\n switch (direction) {\n case LoadMoreDirection.Backwards:\n areSomeLocal = indexForDirection > 0;\n areAllLocal = from >= 0;\n break;\n case LoadMoreDirection.Forwards:\n areSomeLocal = indexForDirection < length;\n areAllLocal = to <= length - 1;\n break;\n case LoadMoreDirection.Around:\n default:\n areSomeLocal = newViewportIds.length > 0;\n areAllLocal = newViewportIds.length === MESSAGE_LIST_SLICE;\n break;\n }\n\n return { newViewportIds, areSomeLocal, areAllLocal };\n}\n\nasync function sendMessage(params: {\n chat: ApiChat;\n text?: string;\n entities?: ApiMessageEntity[];\n replyingTo?: number;\n attachment?: ApiAttachment;\n sticker?: ApiSticker;\n gif?: ApiVideo;\n poll?: ApiNewPoll;\n serverTimeOffset?: number;\n isSilent?: boolean;\n scheduledAt?: number;\n sendAs?: ApiChat | ApiUser;\n}) {\n let localId: number | undefined;\n const progressCallback = params.attachment ? (progress: number, messageLocalId: number) => {\n if (!uploadProgressCallbacks.has(messageLocalId)) {\n localId = messageLocalId;\n uploadProgressCallbacks.set(messageLocalId, progressCallback!);\n }\n\n const global = getGlobal();\n\n setGlobal({\n ...global,\n fileUploads: {\n byMessageLocalId: {\n ...global.fileUploads.byMessageLocalId,\n [messageLocalId]: { progress },\n },\n },\n });\n } : undefined;\n\n // @optimization\n if (params.replyingTo || IS_IOS) {\n await rafPromise();\n }\n\n const global = getGlobal();\n params.serverTimeOffset = global.serverTimeOffset;\n const currentMessageList = selectCurrentMessageList(global);\n if (!currentMessageList) {\n return;\n }\n const { threadId } = currentMessageList;\n\n if (!params.replyingTo && threadId !== MAIN_THREAD_ID) {\n params.replyingTo = selectThreadTopMessageId(global, params.chat.id, threadId)!;\n }\n\n await callApi('sendMessage', params, progressCallback);\n\n if (progressCallback && localId) {\n uploadProgressCallbacks.delete(localId);\n }\n}\n\nasync function loadPollOptionResults(\n chat: ApiChat,\n messageId: number,\n option: string,\n offset?: string,\n limit?: number,\n shouldResetVoters?: boolean,\n) {\n const result = await callApi('loadPollOptionResults', {\n chat, messageId, option, offset, limit,\n });\n\n if (!result) {\n return;\n }\n\n let global = getGlobal();\n\n global = addUsers(global, buildCollectionByKey(result.users, 'id'));\n const { voters } = global.pollResults;\n\n setGlobal({\n ...global,\n pollResults: {\n ...global.pollResults,\n voters: {\n ...voters,\n [option]: unique([\n ...(!shouldResetVoters && voters && voters[option] ? voters[option] : []),\n ...(result && result.users.map((user) => user.id)),\n ]),\n },\n offsets: {\n ...(global.pollResults.offsets ? global.pollResults.offsets : {}),\n [option]: result.nextOffset || '',\n },\n },\n });\n}\n\naddActionHandler('loadPinnedMessages', (global, actions, payload) => {\n const { chatId } = payload;\n const chat = selectChat(global, chatId);\n if (!chat) {\n return;\n }\n\n void loadPinnedMessages(chat);\n});\n\naddActionHandler('loadSeenBy', async (global, actions, payload) => {\n const { chatId, messageId } = payload;\n const chat = selectChat(global, chatId);\n if (!chat) {\n return undefined;\n }\n\n const result = await callApi('fetchSeenBy', { chat, messageId });\n if (!result) {\n return undefined;\n }\n\n return updateChatMessage(getGlobal(), chatId, messageId, {\n seenByUserIds: result,\n });\n});\n\naddActionHandler('saveDefaultSendAs', (global, actions, payload) => {\n const { chatId, sendAsId } = payload;\n const chat = selectChat(global, chatId);\n const sendAsChat = selectChat(global, sendAsId) || selectUser(global, sendAsId);\n if (!chat || !sendAsChat) {\n return undefined;\n }\n\n void callApi('saveDefaultSendAs', { sendAs: sendAsChat, chat });\n\n return updateChat(global, chatId, {\n fullInfo: {\n ...chat.fullInfo,\n sendAsId,\n },\n });\n});\n\naddActionHandler('loadSendAs', async (global, actions, payload) => {\n const { chatId } = payload;\n const chat = selectChat(global, chatId);\n if (!chat) {\n return undefined;\n }\n\n const result = await callApi('fetchSendAs', { chat });\n if (!result) {\n return updateChat(getGlobal(), chatId, {\n sendAsIds: [],\n });\n }\n\n global = getGlobal();\n global = addUsers(global, buildCollectionByKey(result.users, 'id'));\n global = addChats(global, buildCollectionByKey(result.chats, 'id'));\n global = updateChat(global, chatId, { sendAsIds: result.ids });\n return global;\n});\n\nasync function loadPinnedMessages(chat: ApiChat) {\n const result = await callApi('fetchPinnedMessages', { chat });\n if (!result) {\n return;\n }\n\n const { messages, chats, users } = result;\n\n const byId = buildCollectionByKey(messages, 'id');\n const ids = Object.keys(byId).map(Number).sort((a, b) => b - a);\n\n let global = getGlobal();\n global = addChatMessagesById(global, chat.id, byId);\n global = replaceThreadParam(global, chat.id, MAIN_THREAD_ID, 'pinnedIds', ids);\n global = addUsers(global, buildCollectionByKey(users, 'id'));\n global = addChats(global, buildCollectionByKey(chats, 'id'));\n setGlobal(global);\n}\n\nasync function loadScheduledHistory(chat: ApiChat) {\n const result = await callApi('fetchScheduledHistory', { chat });\n if (!result) {\n return;\n }\n\n const { messages } = result;\n\n const byId = buildCollectionByKey(messages, 'id');\n const ids = Object.keys(byId).map(Number).sort((a, b) => b - a);\n\n let global = getGlobal();\n global = replaceScheduledMessages(global, chat.id, byId);\n global = replaceThreadParam(global, chat.id, MAIN_THREAD_ID, 'scheduledIds', ids);\n setGlobal(global);\n}\n\naddActionHandler('loadSponsoredMessages', async (global, actions, payload) => {\n const { chatId } = payload;\n const chat = selectChat(global, chatId);\n if (!chat) {\n return undefined;\n }\n\n const result = await callApi('fetchSponsoredMessages', { chat });\n if (!result) {\n return undefined;\n }\n\n global = getGlobal();\n global = updateSponsoredMessage(global, chatId, result.messages[0]);\n global = addUsers(global, buildCollectionByKey(result.users, 'id'));\n global = addChats(global, buildCollectionByKey(result.chats, 'id'));\n return global;\n});\n\naddActionHandler('viewSponsoredMessage', (global, actions, payload) => {\n const { chatId } = payload;\n const chat = selectChat(global, chatId);\n const message = selectSponsoredMessage(global, chatId);\n if (!chat || !message) {\n return;\n }\n\n void callApi('viewSponsoredMessage', { chat, random: message.randomId });\n});\n\nfunction countSortedIds(ids: number[], from: number, to: number) {\n let count = 0;\n\n for (let i = 0, l = ids.length; i < l; i++) {\n if (ids[i] >= from && ids[i] <= to) {\n count++;\n }\n\n if (ids[i] >= to) {\n break;\n }\n }\n\n return count;\n}\n","import { addActionHandler, getGlobal, setGlobal } from '../../index';\n\nimport { ApiSticker } from '../../../api/types';\nimport { LangCode } from '../../../types';\nimport { callApi } from '../../../api/gramjs';\nimport { pause, throttle } from '../../../util/schedulers';\nimport {\n updateStickerSets,\n updateStickerSet,\n replaceAnimatedEmojis,\n updateGifSearch,\n updateStickersForEmoji,\n rebuildStickersForEmoji,\n} from '../../reducers';\nimport searchWords from '../../../util/searchWords';\nimport { selectStickerSet } from '../../selectors';\n\nconst ADDED_SETS_THROTTLE = 200;\nconst ADDED_SETS_THROTTLE_CHUNK = 10;\n\nconst searchThrottled = throttle((cb) => cb(), 500, false);\n\naddActionHandler('loadStickerSets', (global) => {\n const { hash } = global.stickers.added || {};\n void loadStickerSets(hash);\n});\n\naddActionHandler('loadAddedStickers', async (global, actions) => {\n const { setIds: addedSetIds } = global.stickers.added;\n const cached = global.stickers.setsById;\n if (!addedSetIds || !addedSetIds.length) {\n return;\n }\n\n for (let i = 0; i < addedSetIds.length; i++) {\n const id = addedSetIds[i];\n if (cached[id].stickers) {\n continue; // Already loaded\n }\n actions.loadStickers({ stickerSetId: id });\n\n if (i % ADDED_SETS_THROTTLE_CHUNK === 0 && i > 0) {\n await pause(ADDED_SETS_THROTTLE);\n }\n }\n});\n\naddActionHandler('loadRecentStickers', (global) => {\n const { hash } = global.stickers.recent || {};\n void loadRecentStickers(hash);\n});\n\naddActionHandler('loadFavoriteStickers', (global) => {\n const { hash } = global.stickers.favorite || {};\n void loadFavoriteStickers(hash);\n});\n\naddActionHandler('loadGreetingStickers', async (global) => {\n const { hash } = global.stickers.greeting || {};\n\n const greeting = await callApi('fetchStickersForEmoji', { emoji: '👋⭐️', hash });\n if (!greeting) {\n return undefined;\n }\n\n global = getGlobal();\n\n return {\n ...global,\n stickers: {\n ...global.stickers,\n greeting: {\n hash: greeting.hash,\n stickers: greeting.stickers.filter((sticker) => sticker.emoji === '👋'),\n },\n },\n };\n});\n\naddActionHandler('loadFeaturedStickers', (global) => {\n const { hash } = global.stickers.featured || {};\n void loadFeaturedStickers(hash);\n});\n\naddActionHandler('loadStickers', (global, actions, payload) => {\n const { stickerSetId, stickerSetShortName } = payload!;\n let { stickerSetAccessHash } = payload!;\n\n if (!stickerSetAccessHash && !stickerSetShortName) {\n const stickerSet = selectStickerSet(global, stickerSetId);\n if (!stickerSet) {\n return;\n }\n\n stickerSetAccessHash = stickerSet.accessHash;\n }\n\n void loadStickers(stickerSetId, stickerSetAccessHash, stickerSetShortName);\n});\n\naddActionHandler('loadAnimatedEmojis', () => {\n void loadAnimatedEmojis();\n void loadAnimatedEmojiEffects();\n});\n\naddActionHandler('loadSavedGifs', (global) => {\n const { hash } = global.gifs.saved;\n void loadSavedGifs(hash);\n});\n\naddActionHandler('saveGif', async (global, actions, payload) => {\n const { gif, shouldUnsave } = payload!;\n const result = await callApi('saveGif', { gif, shouldUnsave });\n if (!result) {\n return undefined;\n }\n\n global = getGlobal();\n const gifs = global.gifs.saved.gifs?.filter(({ id }) => id !== gif.id) || [];\n const newGifs = shouldUnsave ? gifs : [gif, ...gifs];\n\n return {\n ...global,\n gifs: {\n ...global.gifs,\n saved: {\n ...global.gifs.saved,\n gifs: newGifs,\n },\n },\n };\n});\n\naddActionHandler('faveSticker', (global, actions, payload) => {\n const { sticker } = payload!;\n\n if (sticker) {\n void callApi('faveSticker', { sticker });\n }\n});\n\naddActionHandler('unfaveSticker', (global, actions, payload) => {\n const { sticker } = payload!;\n\n if (sticker) {\n void unfaveSticker(sticker);\n }\n});\n\naddActionHandler('toggleStickerSet', (global, actions, payload) => {\n const { stickerSetId } = payload!;\n const stickerSet = selectStickerSet(global, stickerSetId);\n if (!stickerSet) {\n return;\n }\n\n const { accessHash, installedDate } = stickerSet;\n\n void callApi(!installedDate ? 'installStickerSet' : 'uninstallStickerSet', { stickerSetId, accessHash });\n});\n\naddActionHandler('loadEmojiKeywords', async (global, actions, payload: { language: LangCode }) => {\n const { language } = payload;\n\n let currentEmojiKeywords = global.emojiKeywords[language];\n if (currentEmojiKeywords?.isLoading) {\n return undefined;\n }\n\n setGlobal({\n ...global,\n emojiKeywords: {\n ...global.emojiKeywords,\n [language]: {\n ...currentEmojiKeywords,\n isLoading: true,\n },\n },\n });\n\n const emojiKeywords = await callApi('fetchEmojiKeywords', {\n language,\n fromVersion: currentEmojiKeywords ? currentEmojiKeywords.version : 0,\n });\n\n global = getGlobal();\n currentEmojiKeywords = global.emojiKeywords[language];\n\n if (!emojiKeywords) {\n return {\n ...global,\n emojiKeywords: {\n ...global.emojiKeywords,\n [language]: {\n ...currentEmojiKeywords,\n isLoading: false,\n },\n },\n };\n }\n\n return {\n ...global,\n emojiKeywords: {\n ...global.emojiKeywords,\n [language]: {\n isLoading: false,\n version: emojiKeywords.version,\n keywords: {\n ...(currentEmojiKeywords?.keywords),\n ...emojiKeywords.keywords,\n },\n },\n },\n };\n});\n\nasync function loadStickerSets(hash?: string) {\n const addedStickers = await callApi('fetchStickerSets', { hash });\n if (!addedStickers) {\n return;\n }\n\n setGlobal(updateStickerSets(\n getGlobal(),\n 'added',\n addedStickers.hash,\n addedStickers.sets,\n ));\n}\n\nasync function loadRecentStickers(hash?: string) {\n const recentStickers = await callApi('fetchRecentStickers', { hash });\n if (!recentStickers) {\n return;\n }\n\n const global = getGlobal();\n\n setGlobal({\n ...global,\n stickers: {\n ...global.stickers,\n recent: recentStickers,\n },\n });\n}\n\nasync function loadFavoriteStickers(hash?: string) {\n const favoriteStickers = await callApi('fetchFavoriteStickers', { hash });\n if (!favoriteStickers) {\n return;\n }\n\n const global = getGlobal();\n\n setGlobal({\n ...global,\n stickers: {\n ...global.stickers,\n favorite: favoriteStickers,\n },\n });\n}\n\nasync function loadFeaturedStickers(hash?: string) {\n const featuredStickers = await callApi('fetchFeaturedStickers', { hash });\n if (!featuredStickers) {\n return;\n }\n\n setGlobal(updateStickerSets(\n getGlobal(),\n 'featured',\n featuredStickers.hash,\n featuredStickers.sets,\n ));\n}\n\nasync function loadStickers(stickerSetId: string, accessHash: string, stickerSetShortName?: string) {\n const stickerSet = await callApi(\n 'fetchStickers',\n { stickerSetShortName, stickerSetId, accessHash },\n );\n if (!stickerSet) {\n return;\n }\n\n const { set, stickers, packs } = stickerSet;\n\n let global = getGlobal();\n\n global = updateStickerSet(global, set.id, { ...set, stickers, packs });\n\n const currentEmoji = global.stickers.forEmoji.emoji;\n if (currentEmoji && packs[currentEmoji]) {\n global = rebuildStickersForEmoji(global);\n }\n\n setGlobal(global);\n}\n\nasync function loadAnimatedEmojis() {\n const stickerSet = await callApi('fetchAnimatedEmojis');\n if (!stickerSet) {\n return;\n }\n\n const { set, stickers } = stickerSet;\n\n setGlobal(replaceAnimatedEmojis(getGlobal(), { ...set, stickers }));\n}\n\nasync function loadAnimatedEmojiEffects() {\n const stickerSet = await callApi('fetchAnimatedEmojiEffects');\n if (!stickerSet) {\n return;\n }\n\n const { set, stickers } = stickerSet;\n\n setGlobal({\n ...getGlobal(),\n animatedEmojiEffects: { ...set, stickers },\n });\n}\n\nfunction unfaveSticker(sticker: ApiSticker) {\n const global = getGlobal();\n\n // Remove sticker preemptively to get instant feedback when user removes sticker\n // from favorites while in Sticker Picker\n setGlobal({\n ...global,\n stickers: {\n ...global.stickers,\n favorite: {\n ...global.stickers.favorite,\n stickers: global.stickers.favorite.stickers.filter(({ id }) => id !== sticker.id),\n },\n },\n });\n\n void callApi('faveSticker', { sticker, unfave: true });\n}\n\naddActionHandler('setStickerSearchQuery', (global, actions, payload) => {\n const { query } = payload!;\n\n if (query) {\n void searchThrottled(() => {\n searchStickers(query);\n });\n }\n});\n\naddActionHandler('setGifSearchQuery', (global, actions, payload) => {\n const { query } = payload!;\n\n if (typeof query === 'string') {\n void searchThrottled(() => {\n searchGifs(query);\n });\n }\n});\n\naddActionHandler('searchMoreGifs', (global) => {\n const { query, offset } = global.gifs.search;\n\n if (typeof query === 'string') {\n void searchThrottled(() => {\n searchGifs(query, offset);\n });\n }\n});\n\naddActionHandler('loadStickersForEmoji', (global, actions, payload) => {\n const { emoji } = payload!;\n const { hash } = global.stickers.forEmoji;\n\n void searchThrottled(() => {\n loadStickersForEmoji(emoji, hash);\n });\n});\n\naddActionHandler('clearStickersForEmoji', (global) => {\n return {\n ...global,\n stickers: {\n ...global.stickers,\n forEmoji: {},\n },\n };\n});\n\naddActionHandler('openStickerSetShortName', (global, actions, payload) => {\n const { stickerSetShortName } = payload!;\n return {\n ...global,\n openedStickerSetShortName: stickerSetShortName,\n };\n});\n\nasync function searchStickers(query: string, hash?: string) {\n const result = await callApi('searchStickers', { query, hash });\n\n if (!result) {\n return;\n }\n\n const global = getGlobal();\n const { setsById, added } = global.stickers;\n\n const resultIds = result.sets.map(({ id }) => id);\n\n if (added.setIds) {\n added.setIds.forEach((id) => {\n if (!resultIds.includes(id)) {\n const { title } = setsById[id] || {};\n if (title && searchWords(title, query)) {\n resultIds.unshift(id);\n }\n }\n });\n }\n\n setGlobal(updateStickerSets(\n global,\n 'search',\n result.hash,\n result.sets,\n resultIds,\n ));\n}\n\nasync function searchGifs(query: string, offset?: string) {\n const result = await callApi('searchGifs', { query, offset });\n if (!result) {\n return;\n }\n\n setGlobal(updateGifSearch(getGlobal(), !offset, result.gifs, result.nextOffset));\n}\n\nasync function loadSavedGifs(hash?: string) {\n const savedGifs = await callApi('fetchSavedGifs', { hash });\n if (!savedGifs) {\n return;\n }\n\n const global = getGlobal();\n\n setGlobal({\n ...global,\n gifs: {\n ...global.gifs,\n saved: savedGifs,\n },\n });\n}\n\nasync function loadStickersForEmoji(emoji: string, hash?: string) {\n let global = getGlobal();\n setGlobal({\n ...global,\n stickers: {\n ...global.stickers,\n forEmoji: {\n ...global.stickers.forEmoji,\n emoji,\n },\n },\n });\n\n const result = await callApi('fetchStickersForEmoji', { emoji, hash });\n\n global = getGlobal();\n\n if (!result || global.stickers.forEmoji.emoji !== emoji) {\n return;\n }\n\n global = updateStickersForEmoji(global, emoji, result.stickers, result.hash);\n\n setGlobal(global);\n}\n","import { addActionHandler, getGlobal, setGlobal } from '../../index';\n\nimport { callApi } from '../../../api/gramjs';\nimport { ApiChat, ApiGlobalMessageSearchType } from '../../../api/types';\n\nimport {\n addChats,\n addMessages,\n addUsers,\n updateGlobalSearch,\n updateGlobalSearchFetchingStatus,\n updateGlobalSearchResults,\n} from '../../reducers';\nimport { throttle } from '../../../util/schedulers';\nimport { selectChat, selectCurrentGlobalSearchQuery } from '../../selectors';\nimport { buildCollectionByKey } from '../../../util/iteratees';\nimport { GLOBAL_SEARCH_SLICE } from '../../../config';\nimport { timestampPlusDay } from '../../../util/dateFormat';\n\nconst searchThrottled = throttle((cb) => cb(), 500, false);\n\naddActionHandler('setGlobalSearchQuery', (global, actions, payload) => {\n const { chatId } = global.globalSearch;\n const { query } = payload!;\n\n if (query && !chatId) {\n void searchThrottled(() => {\n searchChats(query);\n });\n }\n});\n\naddActionHandler('setGlobalSearchDate', (global, actions, payload) => {\n const { date } = payload!;\n const maxDate = date ? timestampPlusDay(date) : date;\n\n global = updateGlobalSearch(global, {\n date,\n query: '',\n resultsByType: {\n ...global.globalSearch.resultsByType,\n text: {\n totalCount: undefined,\n foundIds: [],\n nextOffsetId: 0,\n },\n },\n });\n setGlobal(global);\n\n const { chatId } = global.globalSearch;\n const chat = chatId ? selectChat(global, chatId) : undefined;\n searchMessagesGlobal('', 'text', undefined, chat, maxDate, date);\n});\n\naddActionHandler('searchMessagesGlobal', (global, actions, payload) => {\n const {\n query, resultsByType, chatId, date,\n } = global.globalSearch;\n const maxDate = date ? timestampPlusDay(date) : date;\n const { type } = payload;\n const nextOffsetId = (resultsByType?.[type as ApiGlobalMessageSearchType])?.nextOffsetId;\n\n const chat = chatId ? selectChat(global, chatId) : undefined;\n\n searchMessagesGlobal(query, type, nextOffsetId, chat, maxDate, date);\n});\n\nasync function searchChats(query: string) {\n const result = await callApi('searchChats', { query });\n\n let global = getGlobal();\n const currentSearchQuery = selectCurrentGlobalSearchQuery(global);\n if (!result || !currentSearchQuery || (query !== currentSearchQuery)) {\n setGlobal(updateGlobalSearchFetchingStatus(global, { chats: false }));\n return;\n }\n\n const {\n localChats, localUsers, globalChats, globalUsers,\n } = result;\n\n if (localChats.length || globalChats.length) {\n global = addChats(global, buildCollectionByKey([...localChats, ...globalChats], 'id'));\n }\n\n if (localUsers.length || globalUsers.length) {\n global = addUsers(global, buildCollectionByKey([...localUsers, ...globalUsers], 'id'));\n }\n\n global = updateGlobalSearchFetchingStatus(global, { chats: false });\n global = updateGlobalSearch(global, {\n localResults: {\n chatIds: localChats.map(({ id }) => id),\n userIds: localUsers.map(({ id }) => id),\n },\n globalResults: {\n ...global.globalSearch.globalResults,\n chatIds: globalChats.map(({ id }) => id),\n userIds: globalUsers.map(({ id }) => id),\n },\n });\n\n setGlobal(global);\n}\n\nasync function searchMessagesGlobal(\n query = '', type: ApiGlobalMessageSearchType, offsetRate?: number, chat?: ApiChat, maxDate?: number, minDate?: number,\n) {\n let result;\n\n if (chat) {\n const localResult = await callApi('searchMessagesLocal', {\n chat,\n query,\n type,\n limit: GLOBAL_SEARCH_SLICE,\n offsetId: offsetRate,\n minDate,\n maxDate,\n });\n\n if (localResult) {\n const {\n messages, users, totalCount, nextOffsetId,\n } = localResult;\n\n result = {\n messages,\n users,\n chats: [],\n totalCount,\n nextRate: nextOffsetId,\n };\n }\n } else {\n result = await callApi('searchMessagesGlobal', {\n query,\n offsetRate,\n limit: GLOBAL_SEARCH_SLICE,\n type,\n maxDate,\n minDate,\n });\n }\n\n let global = getGlobal();\n const currentSearchQuery = selectCurrentGlobalSearchQuery(global);\n if (!result || (query !== '' && query !== currentSearchQuery)) {\n setGlobal(updateGlobalSearchFetchingStatus(global, { messages: false }));\n return;\n }\n\n const {\n messages, users, chats, totalCount, nextRate,\n } = result;\n\n if (chats.length) {\n global = addChats(global, buildCollectionByKey(chats, 'id'));\n }\n\n if (users.length) {\n global = addUsers(global, buildCollectionByKey(users, 'id'));\n }\n\n if (messages.length) {\n global = addMessages(global, messages);\n }\n\n global = updateGlobalSearchResults(\n global,\n messages,\n totalCount,\n type,\n nextRate,\n );\n\n setGlobal(global);\n}\n","import {\n addActionHandler, getActions, getGlobal, setGlobal,\n} from '../../index';\n\nimport { ApiChat, MAIN_THREAD_ID } from '../../../api/types';\n\nimport { MESSAGE_SEARCH_SLICE, SHARED_MEDIA_SLICE } from '../../../config';\nimport { callApi } from '../../../api/gramjs';\nimport {\n selectCurrentTextSearch,\n selectCurrentMediaSearch,\n selectCurrentMessageList,\n selectChat,\n selectThreadInfo,\n} from '../../selectors';\nimport { buildCollectionByKey } from '../../../util/iteratees';\nimport {\n addChatMessagesById,\n addChats,\n addUsers,\n updateLocalMediaSearchResults,\n updateLocalTextSearchResults,\n} from '../../reducers';\nimport { SharedMediaType } from '../../../types';\n\naddActionHandler('searchTextMessagesLocal', (global) => {\n const { chatId, threadId } = selectCurrentMessageList(global) || {};\n const chat = chatId ? selectChat(global, chatId) : undefined;\n const currentSearch = selectCurrentTextSearch(global);\n if (!chat || !currentSearch || !threadId) {\n return;\n }\n\n const { query, results } = currentSearch;\n const offsetId = results?.nextOffsetId;\n\n let topMessageId: number | undefined;\n if (threadId !== MAIN_THREAD_ID) {\n const threadInfo = selectThreadInfo(global, chatId!, threadId);\n topMessageId = threadInfo?.topMessageId;\n }\n\n void searchTextMessages(chat, threadId, topMessageId, query, offsetId);\n});\n\naddActionHandler('searchMediaMessagesLocal', (global) => {\n const { chatId } = selectCurrentMessageList(global) || {};\n if (!chatId) {\n return;\n }\n\n const chat = selectChat(global, chatId);\n const currentSearch = selectCurrentMediaSearch(global);\n\n if (!chat || !currentSearch) {\n return;\n }\n\n const { currentType: type, resultsByType } = currentSearch;\n const currentResults = type && resultsByType && resultsByType[type];\n const offsetId = currentResults?.nextOffsetId;\n\n if (!type) {\n return;\n }\n\n void searchSharedMedia(chat, type, offsetId);\n});\n\naddActionHandler('searchMessagesByDate', (global, actions, payload) => {\n const { timestamp } = payload!;\n\n const { chatId } = selectCurrentMessageList(global) || {};\n if (!chatId) {\n return;\n }\n\n const chat = selectChat(global, chatId);\n if (!chat) {\n return;\n }\n\n void searchMessagesByDate(chat, timestamp);\n});\n\nasync function searchTextMessages(\n chat: ApiChat,\n threadId: number,\n topMessageId?: number,\n query?: string,\n offsetId?: number,\n) {\n if (!query) {\n return;\n }\n\n const result = await callApi('searchMessagesLocal', {\n chat,\n type: 'text',\n query,\n topMessageId,\n limit: MESSAGE_SEARCH_SLICE,\n offsetId,\n });\n\n if (!result) {\n return;\n }\n\n const {\n chats, users, messages, totalCount, nextOffsetId,\n } = result;\n\n const byId = buildCollectionByKey(messages, 'id');\n const newFoundIds = Object.keys(byId).map(Number);\n\n let global = getGlobal();\n\n const currentSearch = selectCurrentTextSearch(global);\n if (!currentSearch || query !== currentSearch.query) {\n return;\n }\n\n global = addChats(global, buildCollectionByKey(chats, 'id'));\n global = addUsers(global, buildCollectionByKey(users, 'id'));\n global = addChatMessagesById(global, chat.id, byId);\n global = updateLocalTextSearchResults(global, chat.id, threadId, newFoundIds, totalCount, nextOffsetId);\n setGlobal(global);\n}\n\nasync function searchSharedMedia(\n chat: ApiChat,\n type: SharedMediaType,\n offsetId?: number,\n isBudgetPreload = false,\n) {\n const result = await callApi('searchMessagesLocal', {\n chat,\n type,\n limit: SHARED_MEDIA_SLICE * 2,\n offsetId,\n });\n\n if (!result) {\n return;\n }\n\n const {\n chats, users, messages, totalCount, nextOffsetId,\n } = result;\n\n const byId = buildCollectionByKey(messages, 'id');\n const newFoundIds = Object.keys(byId).map(Number);\n\n let global = getGlobal();\n\n const currentSearch = selectCurrentMediaSearch(global);\n if (!currentSearch) {\n return;\n }\n\n global = addChats(global, buildCollectionByKey(chats, 'id'));\n global = addUsers(global, buildCollectionByKey(users, 'id'));\n global = addChatMessagesById(global, chat.id, byId);\n global = updateLocalMediaSearchResults(global, chat.id, type, newFoundIds, totalCount, nextOffsetId);\n setGlobal(global);\n\n if (!isBudgetPreload) {\n searchSharedMedia(chat, type, nextOffsetId, true);\n }\n}\n\nasync function searchMessagesByDate(chat: ApiChat, timestamp: number) {\n const messageId = await callApi('findFirstMessageIdAfterDate', {\n chat,\n timestamp,\n });\n\n if (!messageId) {\n return;\n }\n\n getActions().focusMessage({\n chatId: chat.id,\n messageId,\n });\n}\n","import { addActionHandler, getGlobal, setGlobal } from '../../index';\n\nimport { ManagementProgress } from '../../../types';\nimport { callApi } from '../../../api/gramjs';\nimport { updateChat, updateManagement, updateManagementProgress } from '../../reducers';\nimport { selectChat, selectCurrentMessageList, selectUser } from '../../selectors';\nimport { isChatBasicGroup } from '../../helpers';\n\naddActionHandler('checkPublicLink', async (global, actions, payload) => {\n const { chatId } = selectCurrentMessageList(global) || {};\n if (!chatId) {\n return undefined;\n }\n\n // No need to check the username if already in progress\n if (global.management.progress === ManagementProgress.InProgress) {\n return undefined;\n }\n\n const { username } = payload!;\n\n global = updateManagementProgress(global, ManagementProgress.InProgress);\n global = updateManagement(global, chatId, { isUsernameAvailable: undefined });\n setGlobal(global);\n\n const isUsernameAvailable = await callApi('checkChatUsername', { username })!;\n\n global = getGlobal();\n global = updateManagementProgress(\n global, isUsernameAvailable ? ManagementProgress.Complete : ManagementProgress.Error,\n );\n global = updateManagement(global, chatId, { isUsernameAvailable });\n return global;\n});\n\naddActionHandler('updatePublicLink', async (global, actions, payload) => {\n const { chatId } = selectCurrentMessageList(global) || {};\n let chat = chatId && selectChat(global, chatId);\n if (!chatId || !chat) {\n return undefined;\n }\n\n const { username } = payload!;\n\n global = updateManagementProgress(global, ManagementProgress.InProgress);\n setGlobal(global);\n\n if (isChatBasicGroup(chat)) {\n chat = await callApi('migrateChat', chat);\n\n if (!chat) {\n return undefined;\n }\n\n actions.openChat({ id: chat.id });\n }\n\n const result = await callApi('setChatUsername', { chat, username });\n\n global = getGlobal();\n global = updateManagementProgress(global, result ? ManagementProgress.Complete : ManagementProgress.Error);\n global = updateManagement(global, chatId, { isUsernameAvailable: undefined });\n return global;\n});\n\naddActionHandler('updatePrivateLink', (global) => {\n const { chatId } = selectCurrentMessageList(global) || {};\n const chat = chatId && selectChat(global, chatId);\n if (!chatId || !chat) {\n return;\n }\n\n callApi('updatePrivateLink', { chat });\n});\n\naddActionHandler('setEditingExportedInvite', (global, actions, payload) => {\n const { chatId, invite } = payload;\n\n setGlobal(updateManagement(global, chatId, { editingInvite: invite }));\n});\n\naddActionHandler('setOpenedInviteInfo', (global, actions, payload) => {\n const { chatId, invite } = payload;\n\n const update = invite ? { inviteInfo: { invite } } : { inviteInfo: undefined };\n\n setGlobal(updateManagement(global, chatId, update));\n});\n\naddActionHandler('loadExportedChatInvites', async (global, actions, payload) => {\n const {\n chatId, adminId, isRevoked, limit,\n } = payload!;\n const peer = selectChat(global, chatId);\n const admin = selectUser(global, adminId || global.currentUserId);\n if (!peer || !admin) return undefined;\n\n const result = await callApi('fetchExportedChatInvites', {\n peer, admin, isRevoked, limit,\n });\n if (!result) {\n return undefined;\n }\n\n const update = isRevoked ? { revokedInvites: result } : { invites: result };\n\n return updateManagement(getGlobal(), chatId, update);\n});\n\naddActionHandler('editExportedChatInvite', async (global, actions, payload) => {\n const {\n chatId, link, isRevoked, expireDate, usageLimit, isRequestNeeded, title,\n } = payload!;\n const peer = selectChat(global, chatId);\n if (!peer) return undefined;\n\n const result = await callApi('editExportedChatInvite', {\n peer,\n link,\n isRevoked,\n expireDate,\n usageLimit,\n isRequestNeeded,\n title,\n });\n if (!result) {\n return undefined;\n }\n\n const { oldInvite, newInvite } = result;\n\n global = getGlobal();\n const invites = (global.management.byChatId[chatId].invites || [])\n .filter((current) => current.link !== oldInvite.link);\n const revokedInvites = [...(global.management.byChatId[chatId].revokedInvites || [])];\n\n if (newInvite.isRevoked) {\n revokedInvites.unshift(newInvite);\n } else {\n invites.push(newInvite);\n }\n\n return updateManagement(global, chatId, {\n invites,\n revokedInvites,\n });\n});\n\naddActionHandler('exportChatInvite', async (global, actions, payload) => {\n const {\n chatId, expireDate, usageLimit, isRequestNeeded, title,\n } = payload!;\n const peer = selectChat(global, chatId);\n if (!peer) return undefined;\n\n const result = await callApi('exportChatInvite', {\n peer,\n expireDate,\n usageLimit,\n isRequestNeeded,\n title,\n });\n if (!result) {\n return undefined;\n }\n\n global = getGlobal();\n const invites = global.management.byChatId[chatId].invites || [];\n return updateManagement(global, chatId, {\n invites: [...invites, result],\n });\n});\n\naddActionHandler('deleteExportedChatInvite', async (global, actions, payload) => {\n const {\n chatId, link,\n } = payload!;\n const peer = selectChat(global, chatId);\n if (!peer) return undefined;\n\n const result = await callApi('deleteExportedChatInvite', {\n peer,\n link,\n });\n if (!result) {\n return undefined;\n }\n\n global = getGlobal();\n const managementState = global.management.byChatId[chatId];\n return updateManagement(global, chatId, {\n invites: managementState?.invites?.filter((invite) => invite.link !== link),\n revokedInvites: managementState?.revokedInvites?.filter((invite) => invite.link !== link),\n });\n});\n\naddActionHandler('deleteRevokedExportedChatInvites', async (global, actions, payload) => {\n const {\n chatId, adminId,\n } = payload!;\n const peer = selectChat(global, chatId);\n const admin = selectUser(global, adminId || global.currentUserId);\n if (!peer || !admin) return undefined;\n\n const result = await callApi('deleteRevokedExportedChatInvites', {\n peer,\n admin,\n });\n if (!result) {\n return undefined;\n }\n\n global = getGlobal();\n return updateManagement(global, chatId, {\n revokedInvites: [],\n });\n});\n\naddActionHandler('loadChatInviteImporters', async (global, actions, payload) => {\n const {\n chatId, link, offsetDate, offsetUserId, limit,\n } = payload!;\n const peer = selectChat(global, chatId);\n const offsetUser = selectUser(global, offsetUserId);\n if (!peer || (offsetUserId && !offsetUser)) return undefined;\n\n const result = await callApi('fetchChatInviteImporters', {\n peer,\n link,\n offsetDate,\n offsetUser,\n limit,\n });\n if (!result) {\n return undefined;\n }\n\n global = getGlobal();\n const currentInviteInfo = global.management.byChatId[chatId]?.inviteInfo;\n if (!currentInviteInfo?.invite || currentInviteInfo.invite.link !== link) {\n return undefined;\n }\n\n return updateManagement(global, chatId, {\n inviteInfo: {\n ...currentInviteInfo,\n importers: result,\n },\n });\n});\n\naddActionHandler('loadChatInviteRequesters', async (global, actions, payload) => {\n const {\n chatId, link, offsetDate, offsetUserId, limit,\n } = payload!;\n const peer = selectChat(global, chatId);\n const offsetUser = selectUser(global, offsetUserId);\n if (!peer || (offsetUserId && !offsetUser)) return undefined;\n\n const result = await callApi('fetchChatInviteImporters', {\n peer,\n link,\n offsetDate,\n offsetUser,\n limit,\n isRequested: true,\n });\n if (!result) {\n return undefined;\n }\n\n global = getGlobal();\n const currentInviteInfo = global.management.byChatId[chatId]?.inviteInfo;\n if (!currentInviteInfo?.invite || currentInviteInfo.invite.link !== link) {\n return undefined;\n }\n\n return updateManagement(global, chatId, {\n inviteInfo: {\n ...currentInviteInfo,\n requesters: result,\n },\n });\n});\n\naddActionHandler('loadChatJoinRequests', async (global, actions, payload) => {\n const {\n chatId, offsetDate, offsetUserId, limit,\n } = payload!;\n const peer = selectChat(global, chatId);\n const offsetUser = selectUser(global, offsetUserId);\n if (!peer || (offsetUserId && !offsetUser)) return undefined;\n\n const result = await callApi('fetchChatInviteImporters', {\n peer,\n offsetDate,\n offsetUser,\n limit,\n isRequested: true,\n });\n if (!result) {\n return undefined;\n }\n\n global = getGlobal();\n return updateChat(global, chatId, { joinRequests: result });\n});\n\naddActionHandler('hideChatJoinRequest', async (global, actions, payload) => {\n const {\n chatId, userId, isApproved,\n } = payload!;\n const peer = selectChat(global, chatId);\n const user = selectUser(global, userId);\n if (!peer || !user) return undefined;\n\n const result = await callApi('hideChatJoinRequest', {\n peer,\n user,\n isApproved,\n });\n if (!result) return undefined;\n\n global = getGlobal();\n const targetChat = selectChat(global, chatId);\n if (!targetChat) return undefined;\n\n return updateChat(global, chatId, {\n joinRequests: targetChat.joinRequests?.filter((importer) => importer.userId !== userId),\n });\n});\n\naddActionHandler('hideAllChatJoinRequests', async (global, actions, payload) => {\n const {\n chatId, isApproved, link,\n } = payload!;\n const peer = selectChat(global, chatId);\n if (!peer) return undefined;\n\n const result = await callApi('hideAllChatJoinRequests', {\n peer,\n isApproved,\n link,\n });\n if (!result) return undefined;\n\n global = getGlobal();\n const targetChat = selectChat(global, chatId);\n if (!targetChat) return undefined;\n\n return updateChat(global, chatId, {\n joinRequests: [],\n fullInfo: {\n ...targetChat.fullInfo,\n recentRequesterIds: [],\n requestsPending: 0,\n },\n });\n});\n\naddActionHandler('hideChatReportPanel', async (global, actions, payload) => {\n const { chatId } = payload!;\n const chat = selectChat(global, chatId);\n if (!chat) return undefined;\n\n const result = await callApi('hideChatReportPanel', chat);\n if (!result) return undefined;\n\n return updateChat(getGlobal(), chatId, {\n settings: undefined,\n });\n});\n","import {\n addActionHandler, getGlobal, setGlobal, getActions,\n} from '../../index';\n\nimport {\n ApiChat, ApiMessage, MAIN_THREAD_ID,\n} from '../../../api/types';\nimport { Thread } from '../../types';\n\nimport {\n DEBUG, MESSAGE_LIST_SLICE, SERVICE_NOTIFICATIONS_USER_ID,\n} from '../../../config';\nimport { callApi } from '../../../api/gramjs';\nimport { buildCollectionByKey } from '../../../util/iteratees';\nimport {\n updateUsers,\n updateChats,\n updateThreadInfos,\n updateListedIds,\n safeReplaceViewportIds,\n addChatMessagesById,\n updateThread,\n} from '../../reducers';\nimport {\n selectCurrentMessageList,\n selectDraft,\n selectChatMessage,\n selectThreadInfo,\n selectEditingId,\n selectEditingDraft,\n} from '../../selectors';\nimport { init as initFolderManager } from '../../../util/folderManager';\n\nconst RELEASE_STATUS_TIMEOUT = 15000; // 10 sec;\n\nlet releaseStatusTimeout: number | undefined;\n\naddActionHandler('sync', () => {\n if (DEBUG) {\n // eslint-disable-next-line no-console\n console.log('>>> START SYNC');\n }\n\n if (releaseStatusTimeout) {\n clearTimeout(releaseStatusTimeout);\n }\n\n setGlobal({ ...getGlobal(), isSyncing: true });\n\n // Workaround for `isSyncing = true` sometimes getting stuck for some reason\n releaseStatusTimeout = window.setTimeout(() => {\n setGlobal({ ...getGlobal(), isSyncing: false });\n releaseStatusTimeout = undefined;\n }, RELEASE_STATUS_TIMEOUT);\n\n const { loadAllChats, preloadTopChatMessages } = getActions();\n\n loadAllChats({\n listType: 'active',\n shouldReplace: true,\n onReplace: async () => {\n await loadAndReplaceMessages();\n\n setGlobal({\n ...getGlobal(),\n lastSyncTime: Date.now(),\n isSyncing: false,\n });\n\n if (DEBUG) {\n // eslint-disable-next-line no-console\n console.log('>>> FINISH SYNC');\n }\n\n initFolderManager();\n loadAllChats({ listType: 'archived', shouldReplace: true });\n void callApi('fetchCurrentUser');\n preloadTopChatMessages();\n },\n });\n});\n\nasync function loadAndReplaceMessages() {\n let areMessagesLoaded = false;\n\n let global = getGlobal();\n\n // Memoize drafts\n const draftChatIds = Object.keys(global.messages.byChatId);\n const draftsByChatId = draftChatIds.reduce>>((acc, chatId) => {\n acc[chatId] = {};\n acc[chatId].draft = selectDraft(global, chatId, MAIN_THREAD_ID);\n acc[chatId].editingId = selectEditingId(global, chatId, MAIN_THREAD_ID);\n acc[chatId].editingDraft = selectEditingDraft(global, chatId, MAIN_THREAD_ID);\n\n return acc;\n }, {});\n\n const { chatId: currentChatId, threadId: currentThreadId } = selectCurrentMessageList(global) || {};\n const currentChat = currentChatId ? global.chats.byId[currentChatId] : undefined;\n if (currentChatId && currentChat) {\n const result = await loadTopMessages(currentChat);\n global = getGlobal();\n const { chatId: newCurrentChatId } = selectCurrentMessageList(global) || {};\n const threadInfo = currentThreadId && selectThreadInfo(global, currentChatId, currentThreadId);\n\n if (result && newCurrentChatId === currentChatId) {\n const currentMessageListInfo = global.messages.byChatId[currentChatId];\n const localMessages = currentChatId === SERVICE_NOTIFICATIONS_USER_ID\n ? global.serviceNotifications.map(({ message }) => message)\n : [];\n const allMessages = ([] as ApiMessage[]).concat(result.messages, localMessages);\n const byId = buildCollectionByKey(allMessages, 'id');\n const listedIds = Object.keys(byId).map(Number);\n\n global = {\n ...global,\n messages: {\n ...global.messages,\n byChatId: {},\n },\n };\n\n global = addChatMessagesById(global, currentChatId, byId);\n global = updateListedIds(global, currentChatId, MAIN_THREAD_ID, listedIds);\n global = safeReplaceViewportIds(global, currentChatId, MAIN_THREAD_ID, listedIds);\n\n if (currentThreadId && threadInfo && threadInfo.originChannelId) {\n const { originChannelId } = threadInfo;\n const currentMessageListInfoOrigin = global.messages.byChatId[originChannelId];\n const resultOrigin = await loadTopMessages(global.chats.byId[originChannelId]);\n if (resultOrigin) {\n const byIdOrigin = buildCollectionByKey(resultOrigin.messages, 'id');\n const listedIdsOrigin = Object.keys(byIdOrigin).map(Number);\n\n global = {\n ...global,\n messages: {\n ...global.messages,\n byChatId: {\n ...global.messages.byChatId,\n [threadInfo.originChannelId]: {\n byId: byIdOrigin,\n threadsById: {\n [MAIN_THREAD_ID]: {\n ...(currentMessageListInfoOrigin?.threadsById[MAIN_THREAD_ID]),\n listedIds: listedIdsOrigin,\n viewportIds: listedIdsOrigin,\n outlyingIds: undefined,\n },\n },\n },\n [currentChatId]: {\n ...global.messages.byChatId[currentChatId],\n threadsById: {\n ...global.messages.byChatId[currentChatId].threadsById,\n [currentThreadId]: {\n ...(currentMessageListInfo?.threadsById[currentThreadId]),\n outlyingIds: undefined,\n },\n },\n },\n },\n },\n };\n }\n }\n\n global = updateChats(global, buildCollectionByKey(result.chats, 'id'));\n global = updateUsers(global, buildCollectionByKey(result.users, 'id'));\n global = updateThreadInfos(global, currentChatId, result.threadInfos);\n\n areMessagesLoaded = true;\n }\n }\n\n if (!areMessagesLoaded) {\n global = {\n ...global,\n messages: {\n ...global.messages,\n byChatId: {},\n },\n };\n }\n\n // Restore drafts\n Object.keys(draftsByChatId).forEach((chatId) => {\n global = updateThread(global, chatId, MAIN_THREAD_ID, draftsByChatId[chatId]);\n });\n\n setGlobal(global);\n\n const { chatId: audioChatId, messageId: audioMessageId } = global.audioPlayer;\n if (audioChatId && audioMessageId && !selectChatMessage(global, audioChatId, audioMessageId)) {\n getActions().closeAudioPlayer();\n }\n}\n\nfunction loadTopMessages(chat: ApiChat) {\n return callApi('fetchMessages', {\n chat,\n threadId: MAIN_THREAD_ID,\n offsetId: chat.lastReadInboxMessageId,\n addOffset: -(Math.round(MESSAGE_LIST_SLICE / 2) + 1),\n limit: MESSAGE_LIST_SLICE,\n });\n}\n","import {\n addActionHandler, getActions, getGlobal, setGlobal,\n} from '../../index';\n\nimport { ApiUser } from '../../../api/types';\nimport { ManagementProgress } from '../../../types';\n\nimport { debounce, throttle } from '../../../util/schedulers';\nimport { buildCollectionByKey, unique } from '../../../util/iteratees';\nimport { isUserBot, isUserId } from '../../helpers';\nimport { callApi } from '../../../api/gramjs';\nimport { selectChat, selectCurrentMessageList, selectUser } from '../../selectors';\nimport {\n addChats, addUsers, closeNewContactDialog, replaceUserStatuses, updateChat, updateManagementProgress, updateUser,\n updateUsers, updateUserSearch, updateUserSearchFetchingStatus,\n} from '../../reducers';\nimport { getServerTime } from '../../../util/serverTime';\nimport * as langProvider from '../../../util/langProvider';\n\nconst runDebouncedForFetchFullUser = debounce((cb) => cb(), 500, false, true);\nconst TOP_PEERS_REQUEST_COOLDOWN = 60; // 1 min\nconst runThrottledForSearch = throttle((cb) => cb(), 500, false);\n\naddActionHandler('loadFullUser', (global, actions, payload) => {\n const { userId } = payload!;\n const user = selectUser(global, userId);\n if (!user) {\n return;\n }\n\n const { id, accessHash } = user;\n\n runDebouncedForFetchFullUser(() => callApi('fetchFullUser', { id, accessHash }));\n});\n\naddActionHandler('loadUser', async (global, actions, payload) => {\n const { userId } = payload!;\n const user = selectUser(global, userId);\n if (!user) {\n return undefined;\n }\n\n const result = await callApi('fetchUsers', { users: [user] });\n if (!result) {\n return undefined;\n }\n\n const { users, userStatusesById } = result;\n\n global = getGlobal();\n\n global = updateUsers(global, buildCollectionByKey(users, 'id'));\n global = replaceUserStatuses(global, {\n ...global.users.statusesById,\n ...userStatusesById,\n });\n\n return global;\n});\n\naddActionHandler('loadTopUsers', (global) => {\n const { topPeers: { lastRequestedAt } } = global;\n\n if (!lastRequestedAt || getServerTime(global.serverTimeOffset) - lastRequestedAt > TOP_PEERS_REQUEST_COOLDOWN) {\n void loadTopUsers();\n }\n});\n\naddActionHandler('loadContactList', () => {\n void loadContactList();\n});\n\naddActionHandler('loadCurrentUser', () => {\n void callApi('fetchCurrentUser');\n});\n\naddActionHandler('loadCommonChats', async (global) => {\n const { chatId } = selectCurrentMessageList(global) || {};\n const user = chatId ? selectUser(global, chatId) : undefined;\n if (!user || isUserBot(user) || user.commonChats?.isFullyLoaded) {\n return undefined;\n }\n\n const maxId = user.commonChats?.maxId;\n const result = await callApi('fetchCommonChats', user.id, user.accessHash!, maxId);\n if (!result) {\n return undefined;\n }\n\n const { chats, chatIds, isFullyLoaded } = result;\n\n global = getGlobal();\n if (chats.length) {\n global = addChats(global, buildCollectionByKey(chats, 'id'));\n }\n global = updateUser(global, user.id, {\n commonChats: {\n maxId: chatIds.length ? chatIds[chatIds.length - 1] : '0',\n ids: unique((user.commonChats?.ids || []).concat(chatIds)),\n isFullyLoaded,\n },\n });\n\n return global;\n});\n\naddActionHandler('updateContact', (global, actions, payload) => {\n const {\n userId, isMuted = false, firstName, lastName, shouldSharePhoneNumber,\n } = payload;\n\n void updateContact(userId, isMuted, firstName, lastName, shouldSharePhoneNumber);\n});\n\naddActionHandler('deleteContact', (global, actions, payload) => {\n const { userId } = payload!;\n\n void deleteContact(userId);\n});\n\nasync function loadTopUsers() {\n const result = await callApi('fetchTopUsers');\n if (!result) {\n return;\n }\n\n const { ids, users } = result;\n\n let global = getGlobal();\n global = addUsers(global, buildCollectionByKey(users, 'id'));\n global = {\n ...global,\n topPeers: {\n ...global.topPeers,\n userIds: ids,\n lastRequestedAt: getServerTime(global.serverTimeOffset),\n },\n };\n setGlobal(global);\n}\n\nasync function loadContactList() {\n const contactList = await callApi('fetchContactList');\n if (!contactList) {\n return;\n }\n\n let global = addUsers(getGlobal(), buildCollectionByKey(contactList.users, 'id'));\n global = addChats(global, buildCollectionByKey(contactList.chats, 'id'));\n\n // Sort contact list by Last Name (or First Name), with latin names being placed first\n const getCompareString = (user: ApiUser) => (user.lastName || user.firstName || '');\n const collator = new Intl.Collator('en-US');\n\n const sortedUsers = contactList.users.sort((a, b) => (\n collator.compare(getCompareString(a), getCompareString(b))\n )).filter((user) => !user.isSelf);\n\n setGlobal({\n ...global,\n contactList: {\n userIds: sortedUsers.map((user) => user.id),\n },\n });\n}\n\nasync function updateContact(\n userId: string,\n isMuted: boolean,\n firstName: string,\n lastName?: string,\n shouldSharePhoneNumber?: boolean,\n) {\n let global = getGlobal();\n const user = selectUser(global, userId);\n if (!user) {\n return;\n }\n\n getActions().updateChatMutedState({ chatId: userId, isMuted });\n\n setGlobal(updateManagementProgress(getGlobal(), ManagementProgress.InProgress));\n\n let result;\n if (!user.isContact && user.phoneNumber) {\n result = await callApi('importContact', { phone: user.phoneNumber, firstName, lastName });\n } else {\n const { id, accessHash } = user;\n result = await callApi('updateContact', {\n id,\n accessHash,\n phoneNumber: '',\n firstName,\n lastName,\n shouldSharePhoneNumber,\n });\n }\n\n global = getGlobal();\n if (result) {\n getActions().loadChatSettings({ chatId: userId });\n\n setGlobal(updateUser(\n global,\n user.id,\n {\n firstName,\n lastName,\n },\n ));\n }\n\n global = updateManagementProgress(global, ManagementProgress.Complete);\n global = closeNewContactDialog(global);\n setGlobal(global);\n}\n\nasync function deleteContact(userId: string) {\n const global = getGlobal();\n const user = selectUser(global, userId);\n\n if (!user) {\n return;\n }\n\n const { id, accessHash } = user;\n\n await callApi('deleteContact', { id, accessHash });\n}\n\naddActionHandler('loadProfilePhotos', async (global, actions, payload) => {\n const { profileId } = payload!;\n const isPrivate = isUserId(profileId);\n\n const user = isPrivate ? selectUser(global, profileId) : undefined;\n const chat = !isPrivate ? selectChat(global, profileId) : undefined;\n if (!user && !chat) {\n return undefined;\n }\n\n const result = await callApi('fetchProfilePhotos', user, chat);\n if (!result || !result.photos) {\n return undefined;\n }\n\n global = getGlobal();\n\n if (isPrivate) {\n global = updateUser(global, profileId, { photos: result.photos });\n } else {\n global = addUsers(global, buildCollectionByKey(result.users!, 'id'));\n global = updateChat(global, profileId, { photos: result.photos });\n }\n\n return global;\n});\n\naddActionHandler('setUserSearchQuery', (global, actions, payload) => {\n const { query } = payload!;\n\n if (!query) return;\n\n void runThrottledForSearch(() => {\n searchUsers(query);\n });\n});\n\naddActionHandler('importContact', async (global, actions, payload) => {\n const { phoneNumber: phone, firstName, lastName } = payload!;\n\n const result = await callApi('importContact', { phone, firstName, lastName });\n\n if (result) {\n actions.openChat({ id: result });\n\n return closeNewContactDialog(getGlobal());\n }\n\n actions.showNotification({\n message: langProvider.getTranslation('Contacts.PhoneNumber.NotRegistred'),\n });\n\n return undefined;\n});\n\naddActionHandler('reportSpam', (global, actions, payload) => {\n const { chatId } = payload!;\n const userOrChat = isUserId(chatId) ? selectUser(global, chatId) : selectChat(global, chatId);\n if (!userOrChat) {\n return;\n }\n\n void callApi('reportSpam', userOrChat);\n});\n\nasync function searchUsers(query: string) {\n const result = await callApi('searchChats', { query });\n\n let global = getGlobal();\n const currentSearchQuery = global.userSearch.query;\n\n if (!result || !currentSearchQuery || (query !== currentSearchQuery)) {\n setGlobal(updateUserSearchFetchingStatus(global, false));\n return;\n }\n\n const { localUsers, globalUsers } = result;\n\n let localUserIds;\n let globalUserIds;\n if (localUsers.length) {\n global = addUsers(global, buildCollectionByKey(localUsers, 'id'));\n localUserIds = localUsers.map(({ id }) => id);\n }\n if (globalUsers.length) {\n global = addUsers(global, buildCollectionByKey(globalUsers, 'id'));\n globalUserIds = globalUsers.map(({ id }) => id);\n }\n\n global = updateUserSearchFetchingStatus(global, false);\n global = updateUserSearch(global, { localUserIds, globalUserIds });\n\n setGlobal(global);\n}\n","import { GlobalState } from '../types';\nimport { InlineBotSettings } from '../../types';\n\nexport function replaceInlineBotSettings(\n global: GlobalState, username: string, inlineBotSettings: InlineBotSettings | false,\n): GlobalState {\n return {\n ...global,\n inlineBots: {\n ...global.inlineBots,\n byUsername: {\n ...global.inlineBots.byUsername,\n [username]: inlineBotSettings,\n },\n },\n };\n}\n\nexport function replaceInlineBotsIsLoading(global: GlobalState, isLoading: boolean): GlobalState {\n return {\n ...global,\n inlineBots: {\n ...global.inlineBots,\n isLoading,\n },\n };\n}\n","import {\n addActionHandler, getActions, getGlobal, setGlobal,\n} from '../../index';\n\nimport { ApiChat, ApiContact, ApiUser } from '../../../api/types';\nimport { InlineBotSettings } from '../../../types';\n\nimport {\n RE_TG_LINK, RE_TME_LINK,\n} from '../../../config';\nimport { callApi } from '../../../api/gramjs';\nimport {\n selectChat, selectChatBot, selectChatMessage, selectCurrentChat, selectCurrentMessageList,\n selectReplyingToId, selectSendAs, selectUser,\n} from '../../selectors';\nimport { addChats, addUsers, removeBlockedContact } from '../../reducers';\nimport { buildCollectionByKey } from '../../../util/iteratees';\nimport { debounce } from '../../../util/schedulers';\nimport { replaceInlineBotSettings, replaceInlineBotsIsLoading } from '../../reducers/bots';\nimport { getServerTime } from '../../../util/serverTime';\n\nconst TOP_PEERS_REQUEST_COOLDOWN = 60; // 1 min\nconst runDebouncedForSearch = debounce((cb) => cb(), 500, false);\n\naddActionHandler('clickInlineButton', (global, actions, payload) => {\n const { button } = payload;\n\n switch (button.type) {\n case 'command':\n actions.sendBotCommand({ command: button.value });\n break;\n case 'url':\n if (button.value.match(RE_TME_LINK) || button.value.match(RE_TG_LINK)) {\n actions.openTelegramLink({ url: button.value });\n } else {\n actions.toggleSafeLinkModal({ url: button.value });\n }\n break;\n case 'callback': {\n const chat = selectCurrentChat(global);\n if (!chat) {\n return;\n }\n\n void answerCallbackButton(chat, button.messageId, button.value);\n break;\n }\n case 'requestPoll':\n actions.openPollModal();\n break;\n case 'requestSelfContact': {\n const user = global.currentUserId ? selectUser(global, global.currentUserId) : undefined;\n if (!user) {\n return;\n }\n actions.showDialog({\n data: {\n phoneNumber: user.phoneNumber,\n firstName: user.firstName,\n lastName: user.lastName,\n userId: user.id,\n } as ApiContact,\n });\n break;\n }\n case 'buy': {\n const chat = selectCurrentChat(global);\n const { messageId, value } = button;\n if (!chat) {\n return;\n }\n\n if (value) {\n actions.getReceipt({ receiptMessageId: value, chatId: chat.id, messageId });\n } else {\n actions.getPaymentForm({ chat, messageId });\n actions.setInvoiceMessageInfo(selectChatMessage(global, chat.id, messageId));\n actions.openPaymentModal({ chatId: chat.id, messageId });\n }\n break;\n }\n }\n});\n\naddActionHandler('sendBotCommand', (global, actions, payload) => {\n const { command, chatId } = payload;\n const { currentUserId } = global;\n const chat = chatId ? selectChat(global, chatId) : selectCurrentChat(global);\n const currentMessageList = selectCurrentMessageList(global);\n\n if (!currentUserId || !chat || !currentMessageList) {\n return;\n }\n\n const { threadId } = currentMessageList;\n actions.setReplyingToId({ messageId: undefined });\n actions.clearWebPagePreview({ chatId: chat.id, threadId, value: false });\n\n void sendBotCommand(\n chat, currentUserId, command, selectReplyingToId(global, chat.id, threadId), selectSendAs(global, chatId),\n );\n});\n\naddActionHandler('restartBot', async (global, actions, payload) => {\n const { chatId } = payload;\n const { currentUserId } = global;\n const chat = selectCurrentChat(global);\n const bot = currentUserId && selectChatBot(global, chatId);\n if (!currentUserId || !chat || !bot) {\n return;\n }\n\n const result = await callApi('unblockContact', bot.id, bot.accessHash);\n if (!result) {\n return;\n }\n\n setGlobal(removeBlockedContact(getGlobal(), bot.id));\n void sendBotCommand(chat, currentUserId, '/start', undefined, selectSendAs(global, chatId));\n});\n\naddActionHandler('loadTopInlineBots', async (global) => {\n const { lastRequestedAt } = global.topInlineBots;\n if (lastRequestedAt && getServerTime(global.serverTimeOffset) - lastRequestedAt < TOP_PEERS_REQUEST_COOLDOWN) {\n return undefined;\n }\n\n const result = await callApi('fetchTopInlineBots');\n if (!result) {\n return undefined;\n }\n\n const { ids, users } = result;\n\n global = getGlobal();\n global = addUsers(global, buildCollectionByKey(users, 'id'));\n global = {\n ...global,\n topInlineBots: {\n ...global.topInlineBots,\n userIds: ids,\n lastRequestedAt: getServerTime(global.serverTimeOffset),\n },\n };\n return global;\n});\n\naddActionHandler('queryInlineBot', async (global, actions, payload) => {\n const {\n chatId, username, query, offset,\n } = payload;\n\n let inlineBotData = global.inlineBots.byUsername[username];\n if (inlineBotData === false) {\n return;\n }\n\n if (inlineBotData === undefined) {\n const { user: inlineBot, chat } = await callApi('fetchInlineBot', { username }) || {};\n global = getGlobal();\n if (!inlineBot || !chat) {\n setGlobal(replaceInlineBotSettings(global, username, false));\n return;\n }\n\n global = addUsers(global, { [inlineBot.id]: inlineBot });\n global = addChats(global, { [chat.id]: chat });\n inlineBotData = {\n id: inlineBot.id,\n query: '',\n offset: '',\n switchPm: undefined,\n canLoadMore: true,\n results: [],\n };\n\n global = replaceInlineBotSettings(global, username, inlineBotData);\n setGlobal(global);\n }\n\n if (query === inlineBotData.query && !inlineBotData.canLoadMore) {\n return;\n }\n\n void runDebouncedForSearch(() => {\n searchInlineBot({\n username,\n inlineBotData: inlineBotData as InlineBotSettings,\n chatId,\n query,\n offset,\n });\n });\n});\n\naddActionHandler('sendInlineBotResult', (global, actions, payload) => {\n const {\n id, queryId, isSilent, scheduledAt,\n } = payload;\n const currentMessageList = selectCurrentMessageList(global);\n if (!currentMessageList || !id) {\n return;\n }\n\n const { chatId, threadId } = currentMessageList;\n\n const chat = selectChat(global, chatId)!;\n\n actions.setReplyingToId({ messageId: undefined });\n actions.clearWebPagePreview({ chatId, threadId, value: false });\n\n void callApi('sendInlineBotResult', {\n chat,\n resultId: id,\n queryId,\n replyingTo: selectReplyingToId(global, chatId, threadId),\n sendAs: selectSendAs(global, chatId),\n isSilent,\n scheduleDate: scheduledAt,\n });\n});\n\naddActionHandler('resetInlineBot', (global, actions, payload) => {\n const { username } = payload;\n\n let inlineBotData = global.inlineBots.byUsername[username];\n\n if (!inlineBotData) {\n return;\n }\n\n inlineBotData = {\n id: inlineBotData.id,\n query: '',\n offset: '',\n switchPm: undefined,\n canLoadMore: true,\n results: [],\n };\n\n setGlobal(replaceInlineBotSettings(global, username, inlineBotData));\n});\n\naddActionHandler('startBot', async (global, actions, payload) => {\n const { botId, param } = payload;\n\n const bot = selectUser(global, botId);\n if (!bot) {\n return;\n }\n\n await callApi('startBot', {\n bot,\n startParam: param,\n });\n});\n\nasync function searchInlineBot({\n username,\n inlineBotData,\n chatId,\n query,\n offset,\n}: {\n username: string;\n inlineBotData: InlineBotSettings;\n chatId: string;\n query: string;\n offset?: string;\n}) {\n let global = getGlobal();\n const bot = selectUser(global, inlineBotData.id);\n const chat = selectChat(global, chatId);\n if (!bot || !chat) {\n return;\n }\n\n const shouldReplaceSettings = inlineBotData.query !== query;\n global = replaceInlineBotsIsLoading(global, true);\n global = replaceInlineBotSettings(global, username, {\n ...inlineBotData,\n query,\n ...(shouldReplaceSettings && { offset: undefined, results: [] }),\n });\n setGlobal(global);\n\n const result = await callApi('fetchInlineBotResults', {\n bot,\n chat,\n query,\n offset: shouldReplaceSettings ? undefined : offset,\n });\n\n const newInlineBotData = global.inlineBots.byUsername[username];\n global = replaceInlineBotsIsLoading(getGlobal(), false);\n if (!result || !newInlineBotData || query !== newInlineBotData.query) {\n setGlobal(global);\n return;\n }\n\n const currentIds = new Set((newInlineBotData.results || []).map((data) => data.id));\n const newResults = result.results.filter((data) => !currentIds.has(data.id));\n\n global = replaceInlineBotSettings(global, username, {\n ...newInlineBotData,\n help: result.help,\n ...(newResults.length && { isGallery: result.isGallery }),\n ...(result.switchPm && { switchPm: result.switchPm }),\n canLoadMore: result.results.length > 0 && Boolean(result.nextOffset),\n results: newInlineBotData.offset === '' || newInlineBotData.offset === result.nextOffset\n ? result.results\n : (newInlineBotData.results || []).concat(newResults),\n offset: newResults.length ? result.nextOffset : '',\n });\n\n setGlobal(global);\n}\n\nasync function sendBotCommand(\n chat: ApiChat, currentUserId: string, command: string, replyingTo?: number, sendAs?: ApiChat | ApiUser,\n) {\n await callApi('sendMessage', {\n chat,\n text: command,\n replyingTo,\n sendAs,\n });\n}\n\nasync function answerCallbackButton(chat: ApiChat, messageId: number, data: string) {\n const result = await callApi('answerCallbackButton', {\n chatId: chat.id,\n accessHash: chat.accessHash,\n messageId,\n data,\n });\n\n if (!result) {\n return;\n }\n\n const { showDialog, showNotification, toggleSafeLinkModal } = getActions();\n const { message, alert: isError, url } = result;\n\n if (isError) {\n showDialog({ data: { message: message || 'Error' } });\n } else if (message) {\n showNotification({ message });\n } else if (url) {\n toggleSafeLinkModal({ url });\n }\n}\n","import { addActionHandler, getGlobal, setGlobal } from '../../index';\n\nimport { callApi } from '../../../api/gramjs';\nimport { replaceSettings, updateTwoFaSettings } from '../../reducers';\n\naddActionHandler('loadPasswordInfo', async (global) => {\n const result = await callApi('getPasswordInfo');\n if (!result) {\n return undefined;\n }\n\n global = getGlobal();\n global = replaceSettings(global, { hasPassword: result.hasPassword });\n global = updateTwoFaSettings(global, { hint: result.hint });\n return global;\n});\n\naddActionHandler('checkPassword', async (global, actions, payload) => {\n const { currentPassword, onSuccess } = payload;\n\n setGlobal(updateTwoFaSettings(global, { isLoading: true, error: undefined }));\n\n const isSuccess = await callApi('checkPassword', currentPassword);\n\n setGlobal(updateTwoFaSettings(getGlobal(), { isLoading: false }));\n\n if (isSuccess) {\n onSuccess();\n }\n});\n\naddActionHandler('clearPassword', async (global, actions, payload) => {\n const { currentPassword, onSuccess } = payload;\n\n setGlobal(updateTwoFaSettings(global, { isLoading: true, error: undefined }));\n\n const isSuccess = await callApi('clearPassword', currentPassword);\n\n setGlobal(updateTwoFaSettings(getGlobal(), { isLoading: false }));\n\n if (isSuccess) {\n onSuccess();\n }\n});\n\naddActionHandler('updatePassword', async (global, actions, payload) => {\n const {\n currentPassword, password, hint, email, onSuccess,\n } = payload;\n\n setGlobal(updateTwoFaSettings(global, { isLoading: true, error: undefined }));\n\n const isSuccess = await callApi('updatePassword', currentPassword, password, hint, email);\n\n setGlobal(updateTwoFaSettings(getGlobal(), { isLoading: false }));\n\n if (isSuccess) {\n onSuccess();\n }\n});\n\naddActionHandler('updateRecoveryEmail', async (global, actions, payload) => {\n const {\n currentPassword, email, onSuccess,\n } = payload;\n\n setGlobal(updateTwoFaSettings(global, { isLoading: true, error: undefined }));\n\n const isSuccess = await callApi('updateRecoveryEmail', currentPassword, email);\n\n setGlobal(updateTwoFaSettings(getGlobal(), { isLoading: false, waitingEmailCodeLength: undefined }));\n\n if (isSuccess) {\n onSuccess();\n }\n});\n\naddActionHandler('provideTwoFaEmailCode', (global, actions, payload) => {\n const { code } = payload;\n\n void callApi('provideRecoveryEmailCode', code);\n});\n\naddActionHandler('clearTwoFaError', (global) => {\n return updateTwoFaSettings(global, { error: undefined });\n});\n","import { addActionHandler, getGlobal, setGlobal } from '../../index';\n\nimport { PaymentStep } from '../../../types';\nimport { ApiChat } from '../../../api/types';\n\nimport {\n selectPaymentMessageId,\n selectPaymentRequestId,\n selectProviderPublishableKey,\n selectStripeCredentials,\n selectChatMessage,\n selectPaymentChatId,\n selectChat,\n selectPaymentFormId,\n selectProviderPublicToken,\n selectSmartGlocalCredentials,\n} from '../../selectors';\nimport { callApi } from '../../../api/gramjs';\nimport { getStripeError } from '../../helpers';\nimport { buildQueryString } from '../../../util/requestQuery';\nimport { DEBUG_PAYMENT_SMART_GLOCAL } from '../../../config';\n\nimport {\n updateShippingOptions,\n setPaymentStep,\n setRequestInfoId,\n setPaymentForm,\n setStripeCardInfo,\n setInvoiceMessageInfo,\n setReceipt,\n clearPayment,\n closeInvoice,\n setSmartGlocalCardInfo,\n} from '../../reducers';\n\naddActionHandler('validateRequestedInfo', (global, actions, payload) => {\n const { requestInfo, saveInfo } = payload;\n const chatId = selectPaymentChatId(global);\n const chat = chatId && selectChat(global, chatId);\n const messageId = selectPaymentMessageId(global);\n if (!chat || !messageId) {\n return;\n }\n void validateRequestedInfo(chat, messageId, requestInfo, saveInfo);\n});\n\nasync function validateRequestedInfo(chat: ApiChat, messageId: number, requestInfo: any, shouldSave?: true) {\n const result = await callApi('validateRequestedInfo', {\n chat, messageId, requestInfo, shouldSave,\n });\n if (!result) {\n return;\n }\n\n const { id, shippingOptions } = result;\n if (!id) {\n return;\n }\n\n let global = setRequestInfoId(getGlobal(), id);\n if (shippingOptions) {\n global = updateShippingOptions(global, shippingOptions);\n global = setPaymentStep(global, PaymentStep.Shipping);\n } else {\n global = setPaymentStep(global, PaymentStep.PaymentInfo);\n }\n setGlobal(global);\n}\n\naddActionHandler('getPaymentForm', (global, actions, payload) => {\n const { chat, messageId } = payload;\n if (!chat || !messageId) {\n return;\n }\n void getPaymentForm(chat, messageId);\n});\n\nasync function getPaymentForm(chat: ApiChat, messageId: number) {\n const result = await callApi('getPaymentForm', { chat, messageId });\n if (!result) {\n return;\n }\n let global = setPaymentForm(getGlobal(), result);\n let step = PaymentStep.PaymentInfo;\n if (global.payment.invoice\n && (global.payment.invoice.shippingAddressRequested\n || global.payment.invoice.nameRequested\n || global.payment.invoice.phoneRequested\n || global.payment.invoice.emailRequested)) {\n step = PaymentStep.ShippingInfo;\n }\n global = setPaymentStep(global, step);\n setGlobal(global);\n}\n\naddActionHandler('getReceipt', (global, actions, payload) => {\n const { receiptMessageId, chatId, messageId } = payload;\n const chat = chatId && selectChat(global, chatId);\n if (!messageId || !receiptMessageId || !chat) {\n return;\n }\n\n void getReceipt(chat, messageId, receiptMessageId);\n});\n\nasync function getReceipt(chat: ApiChat, messageId: number, receiptMessageId: number) {\n const result = await callApi('getReceipt', chat, receiptMessageId);\n if (!result) {\n return;\n }\n\n let global = getGlobal();\n const message = selectChatMessage(global, chat.id, messageId);\n global = setReceipt(global, result, message);\n setGlobal(global);\n}\n\naddActionHandler('clearPaymentError', (global) => {\n setGlobal({\n ...global,\n payment: {\n ...global.payment,\n error: undefined,\n },\n });\n});\n\naddActionHandler('clearReceipt', (global) => {\n setGlobal({\n ...global,\n payment: {\n ...global.payment,\n receipt: undefined,\n },\n });\n});\n\naddActionHandler('sendCredentialsInfo', (global, actions, payload) => {\n const { nativeProvider } = global.payment;\n const { credentials } = payload;\n const { data } = credentials;\n\n if (nativeProvider === 'stripe') {\n const publishableKey = selectProviderPublishableKey(global);\n if (!publishableKey) {\n return;\n }\n void sendStripeCredentials(data, publishableKey);\n } else if (nativeProvider === 'smartglocal') {\n const publicToken = selectProviderPublicToken(global);\n if (!publicToken) {\n return;\n }\n void sendSmartGlocalCredentials(data, publicToken);\n }\n});\n\naddActionHandler('sendPaymentForm', (global, actions, payload) => {\n const { shippingOptionId, saveCredentials } = payload;\n const chatId = selectPaymentChatId(global);\n const chat = chatId && selectChat(global, chatId);\n const messageId = selectPaymentMessageId(global);\n const formId = selectPaymentFormId(global);\n const requestInfoId = selectPaymentRequestId(global);\n const { nativeProvider } = global.payment;\n const publishableKey = nativeProvider === 'stripe'\n ? selectProviderPublishableKey(global) : selectProviderPublicToken(global);\n if (!chat || !messageId || !publishableKey || !formId || !nativeProvider) {\n return;\n }\n\n void sendPaymentForm(chat, messageId, nativeProvider, formId, {\n save: saveCredentials,\n data: nativeProvider === 'stripe' ? selectStripeCredentials(global) : selectSmartGlocalCredentials(global),\n }, requestInfoId, shippingOptionId);\n});\n\nasync function sendStripeCredentials(\n data: {\n cardNumber: string;\n cardholder?: string;\n expiryMonth: string;\n expiryYear: string;\n cvv: string;\n country: string;\n zip: string;\n },\n publishableKey: string,\n) {\n const query = buildQueryString({\n 'card[number]': data.cardNumber,\n 'card[exp_month]': data.expiryMonth,\n 'card[exp_year]': data.expiryYear,\n 'card[cvc]': data.cvv,\n 'card[address_zip]': data.zip,\n 'card[address_country]': data.country,\n });\n\n const response = await fetch(`https://api.stripe.com/v1/tokens${query}`, {\n method: 'POST',\n credentials: 'same-origin',\n headers: {\n 'Content-Type': 'application/x-www-form-urlencoded',\n Authorization: `Bearer ${publishableKey}`,\n },\n });\n const result = await response.json();\n if (result.error) {\n const error = getStripeError(result.error);\n const global = getGlobal();\n setGlobal({\n ...global,\n payment: {\n ...global.payment,\n error: {\n ...error,\n },\n },\n });\n return;\n }\n let global = setStripeCardInfo(getGlobal(), {\n type: result.type,\n id: result.id,\n });\n global = setPaymentStep(global, PaymentStep.Checkout);\n setGlobal(global);\n}\n\nasync function sendSmartGlocalCredentials(\n data: {\n cardNumber: string;\n cardholder?: string;\n expiryMonth: string;\n expiryYear: string;\n cvv: string;\n },\n publicToken: string,\n) {\n const params = {\n card: {\n number: data.cardNumber.replace(/[^\\d]+/g, ''),\n expiration_month: data.expiryMonth,\n expiration_year: data.expiryYear,\n security_code: data.cvv.replace(/[^\\d]+/g, ''),\n },\n };\n const url = DEBUG_PAYMENT_SMART_GLOCAL\n ? 'https://tgb-playground.smart-glocal.com/cds/v1/tokenize/card'\n : 'https://tgb.smart-glocal.com/cds/v1/tokenize/card';\n\n const response = await fetch(url, {\n method: 'POST',\n headers: {\n Accept: 'application/json',\n 'Content-Type': 'application/json',\n 'X-PUBLIC-TOKEN': publicToken,\n },\n body: JSON.stringify(params),\n });\n const result = await response.json();\n\n if (result.status !== 'ok') {\n // TODO после получения документации сделать аналог getStripeError(result.error);\n const error = { description: 'payment error' };\n const global = getGlobal();\n setGlobal({\n ...global,\n payment: {\n ...global.payment,\n error: {\n ...error,\n },\n },\n });\n return;\n }\n\n let global = setSmartGlocalCardInfo(getGlobal(), {\n type: 'card',\n token: result.data.token,\n });\n global = setPaymentStep(global, PaymentStep.Checkout);\n setGlobal(global);\n}\n\nasync function sendPaymentForm(\n chat: ApiChat,\n messageId: number,\n nativeProvider: string,\n formId: string,\n credentials: any,\n requestedInfoId?: string,\n shippingOptionId?: string,\n) {\n const result = await callApi('sendPaymentForm', {\n chat, messageId, formId, credentials, requestedInfoId, shippingOptionId,\n });\n\n if (result === true) {\n const global = clearPayment(getGlobal());\n setGlobal(closeInvoice(global));\n }\n}\n\naddActionHandler('setPaymentStep', (global, actions, payload = {}) => {\n return setPaymentStep(global, payload.step || PaymentStep.ShippingInfo);\n});\n\naddActionHandler('setInvoiceMessageInfo', (global, actions, payload) => {\n return setInvoiceMessageInfo(global, payload);\n});\n","export function buildQueryString(data: Record) {\n const query = Object.keys(data).map((k) => `${k}=${data[k]}`).join('&');\n return query.length > 0 ? `?${query}` : '';\n}\n","import {\n MIN_SCREEN_WIDTH_FOR_STATIC_LEFT_COLUMN,\n MIN_SCREEN_WIDTH_FOR_STATIC_RIGHT_COLUMN,\n MOBILE_SCREEN_MAX_WIDTH,\n} from '../../../config';\n\nconst REM = 16; // px\nconst MAX_TOOLBAR_WIDTH = 32 * REM;\nconst MAX_MESSAGES_LIST_WIDTH = 45.5 * REM;\nexport const SIDE_COLUMN_MAX_WIDTH = 26.5 * REM;\nexport const MIN_LEFT_COLUMN_WIDTH = 18 * REM;\nconst UNPIN_BUTTON_WIDTH = 16.125 * REM;\n\nexport default function calculateMiddleFooterTransforms(windowWidth: number, canPost?: boolean) {\n const sidePadding = windowWidth <= MOBILE_SCREEN_MAX_WIDTH\n ? REM\n : 2 * REM;\n const messageListWidth = getMessageListWidth(windowWidth);\n const sendButtonWidth = windowWidth <= MOBILE_SCREEN_MAX_WIDTH\n ? 3.375 * REM\n : 4 * REM;\n\n const composerWidth = canPost\n ? messageListWidth - sidePadding - sendButtonWidth\n : messageListWidth - sidePadding;\n const toolbarWidth = windowWidth > MOBILE_SCREEN_MAX_WIDTH\n ? Math.min(messageListWidth - sidePadding, MAX_TOOLBAR_WIDTH)\n : messageListWidth - sidePadding;\n\n const composerHiddenScale = toolbarWidth / composerWidth;\n const toolbarHiddenScale = composerWidth / toolbarWidth;\n const unpinHiddenScale = toolbarWidth / UNPIN_BUTTON_WIDTH;\n const toolbarForUnpinHiddenScale = UNPIN_BUTTON_WIDTH / toolbarWidth;\n\n const composerTranslateX = canPost\n ? (sendButtonWidth / 2) * toolbarHiddenScale\n : 0;\n\n const toolbarTranslateX = canPost\n ? (sendButtonWidth / 2) * -1 * composerHiddenScale\n : 0;\n\n return {\n composerHiddenScale,\n toolbarHiddenScale,\n composerTranslateX,\n toolbarTranslateX,\n unpinHiddenScale,\n toolbarForUnpinHiddenScale,\n };\n}\n\nfunction getMessageListWidth(windowWidth: number) {\n if (windowWidth > MIN_SCREEN_WIDTH_FOR_STATIC_RIGHT_COLUMN) {\n const leftColumnWidth = Math.min(\n Math.max(windowWidth * 0.25, MIN_LEFT_COLUMN_WIDTH),\n SIDE_COLUMN_MAX_WIDTH,\n );\n\n const rightColumnWidth = Math.min(\n windowWidth * 0.25,\n SIDE_COLUMN_MAX_WIDTH,\n );\n\n return Math.min(\n windowWidth - leftColumnWidth - rightColumnWidth,\n MAX_MESSAGES_LIST_WIDTH,\n );\n }\n\n if (windowWidth > MIN_SCREEN_WIDTH_FOR_STATIC_LEFT_COLUMN) {\n const leftColumnWidth = Math.min(\n Math.max(windowWidth * 0.4, MIN_LEFT_COLUMN_WIDTH),\n SIDE_COLUMN_MAX_WIDTH,\n );\n\n return Math.min(\n windowWidth - leftColumnWidth,\n MAX_MESSAGES_LIST_WIDTH,\n );\n }\n\n if (windowWidth > MAX_MESSAGES_LIST_WIDTH) {\n return MAX_MESSAGES_LIST_WIDTH;\n }\n\n return windowWidth;\n}\n","import { updateChatMessage } from './messages';\nimport { GlobalState } from '../types';\nimport { selectChatMessage } from '../selectors';\nimport { MIN_SCREEN_WIDTH_FOR_STATIC_LEFT_COLUMN, MIN_SCREEN_WIDTH_FOR_STATIC_RIGHT_COLUMN } from '../../config';\nimport {\n MIN_LEFT_COLUMN_WIDTH,\n SIDE_COLUMN_MAX_WIDTH,\n} from '../../components/middle/helpers/calculateMiddleFooterTransforms';\nimport { IS_SINGLE_COLUMN_LAYOUT } from '../../util/environment';\nimport windowSize from '../../util/windowSize';\n\nfunction getLeftColumnWidth(windowWidth: number) {\n if (windowWidth > MIN_SCREEN_WIDTH_FOR_STATIC_RIGHT_COLUMN) {\n return Math.min(\n Math.max(windowWidth * 0.25, MIN_LEFT_COLUMN_WIDTH),\n windowWidth * 0.33,\n );\n }\n\n if (windowWidth > MIN_SCREEN_WIDTH_FOR_STATIC_LEFT_COLUMN) {\n return Math.min(\n Math.max(windowWidth * 0.33, MIN_LEFT_COLUMN_WIDTH),\n windowWidth * 0.4,\n );\n }\n\n return SIDE_COLUMN_MAX_WIDTH;\n}\n\nexport function subtractXForEmojiInteraction(global: GlobalState, x: number) {\n return x - ((global.isLeftColumnShown && !IS_SINGLE_COLUMN_LAYOUT)\n ? global.leftColumnWidth || getLeftColumnWidth(windowSize.get().width)\n : 0);\n}\n\nexport function addMessageReaction(global: GlobalState, chatId: string, messageId: number, reaction: string) {\n const { reactions } = selectChatMessage(global, chatId, messageId) || {};\n\n if (!reactions) {\n return global;\n }\n\n // Update UI without waiting for server response\n let results = reactions.results.map((l) => (l.reaction === reaction\n ? {\n ...l,\n count: l.isChosen ? l.count : l.count + 1,\n isChosen: true,\n } : (l.isChosen ? {\n ...l,\n isChosen: false,\n count: l.count - 1,\n } : l)))\n .filter((l) => l.count > 0);\n\n let { recentReactions } = reactions;\n\n if (reaction && !results.some((l) => l.reaction === reaction)) {\n const { currentUserId } = global;\n\n results = [...results, {\n reaction,\n isChosen: true,\n count: 1,\n }];\n\n if (reactions.canSeeList) {\n recentReactions = [...(recentReactions || []), {\n userId: currentUserId!,\n reaction,\n }];\n }\n }\n\n return updateChatMessage(global, chatId, messageId, {\n reactions: {\n ...reactions,\n results,\n recentReactions,\n },\n });\n}\n","import { addActionHandler, getGlobal } from '../../index';\nimport { callApi } from '../../../api/gramjs';\nimport * as mediaLoader from '../../../util/mediaLoader';\nimport { ApiAppConfig, ApiMediaFormat } from '../../../api/types';\nimport {\n selectChat,\n selectChatMessage,\n selectDefaultReaction,\n selectLocalAnimatedEmojiEffectByName,\n selectMessageIdsByGroupId,\n} from '../../selectors';\nimport { addMessageReaction, subtractXForEmojiInteraction } from '../../reducers/reactions';\nimport { addUsers, updateChatMessage } from '../../reducers';\nimport { buildCollectionByKey, omit } from '../../../util/iteratees';\nimport { ANIMATION_LEVEL_MAX } from '../../../config';\nimport { isMessageLocal } from '../../helpers';\n\nconst INTERACTION_RANDOM_OFFSET = 40;\n\nlet interactionLocalId = 0;\n\naddActionHandler('loadAvailableReactions', async () => {\n const result = await callApi('getAvailableReactions');\n if (!result) {\n return undefined;\n }\n\n // Preload animations\n result.forEach((availableReaction) => {\n if (availableReaction.aroundAnimation) {\n mediaLoader.fetch(`sticker${availableReaction.aroundAnimation.id}`, ApiMediaFormat.Lottie);\n }\n if (availableReaction.centerIcon) {\n mediaLoader.fetch(`sticker${availableReaction.centerIcon.id}`, ApiMediaFormat.Lottie);\n }\n });\n\n return {\n ...getGlobal(),\n availableReactions: result,\n };\n});\n\naddActionHandler('interactWithAnimatedEmoji', (global, actions, payload) => {\n const {\n emoji, x, y, localEffect, startSize, isReversed,\n } = payload!;\n\n const activeEmojiInteraction = {\n id: interactionLocalId++,\n animatedEffect: emoji || localEffect,\n x: subtractXForEmojiInteraction(global, x) + Math.random()\n * INTERACTION_RANDOM_OFFSET - INTERACTION_RANDOM_OFFSET / 2,\n y: y + Math.random() * INTERACTION_RANDOM_OFFSET - INTERACTION_RANDOM_OFFSET / 2,\n startSize,\n isReversed,\n };\n\n return {\n ...global,\n activeEmojiInteractions: [...(global.activeEmojiInteractions || []), activeEmojiInteraction],\n };\n});\n\naddActionHandler('sendEmojiInteraction', (global, actions, payload) => {\n const {\n messageId, chatId, emoji, interactions, localEffect,\n } = payload!;\n\n const chat = selectChat(global, chatId);\n\n if (!chat || (!emoji && !localEffect) || chatId === global.currentUserId) {\n return;\n }\n\n void callApi('sendEmojiInteraction', {\n chat,\n messageId,\n emoticon: emoji || selectLocalAnimatedEmojiEffectByName(localEffect),\n timestamps: interactions,\n });\n});\n\naddActionHandler('sendDefaultReaction', (global, actions, payload) => {\n const {\n chatId, messageId, x, y,\n } = payload;\n const reaction = selectDefaultReaction(global, chatId);\n const message = selectChatMessage(global, chatId, messageId);\n\n if (!reaction || !message || isMessageLocal(message)) return;\n\n actions.sendReaction({\n chatId,\n messageId,\n reaction,\n x,\n y,\n });\n});\n\naddActionHandler('sendReaction', (global, actions, payload) => {\n const {\n chatId,\n }: { chatId: string } = payload;\n let { messageId } = payload;\n\n let { reaction } = payload;\n\n const chat = selectChat(global, chatId);\n let message = selectChatMessage(global, chatId, messageId);\n\n if (!chat || !message) {\n return undefined;\n }\n\n const isInDocumentGroup = Boolean(message.groupedId) && !message.isInAlbum;\n const documentGroupFirstMessageId = isInDocumentGroup\n ? selectMessageIdsByGroupId(global, chatId, message.groupedId!)![0]\n : undefined;\n message = isInDocumentGroup\n ? selectChatMessage(global, chatId, documentGroupFirstMessageId!) || message\n : message;\n messageId = message?.id || messageId;\n\n if (message.reactions?.results?.some((l) => l.reaction === reaction && l.isChosen)) {\n reaction = undefined;\n }\n\n void callApi('sendReaction', { chat, messageId, reaction });\n\n const { animationLevel } = global.settings.byKey;\n\n if (animationLevel === ANIMATION_LEVEL_MAX) {\n global = {\n ...global,\n activeReactions: {\n ...(reaction ? global.activeReactions : omit(global.activeReactions, [messageId])),\n ...(reaction && {\n [messageId]: {\n reaction,\n messageId,\n },\n }),\n },\n };\n }\n\n return addMessageReaction(global, chatId, messageId, reaction);\n});\n\naddActionHandler('openChat', (global) => {\n return {\n ...global,\n activeReactions: {},\n };\n});\n\naddActionHandler('startActiveReaction', (global, actions, payload) => {\n const { messageId, reaction } = payload;\n const { animationLevel } = global.settings.byKey;\n\n if (animationLevel !== ANIMATION_LEVEL_MAX) return global;\n\n if (global.activeReactions[messageId]?.reaction === reaction) {\n return global;\n }\n\n return {\n ...global,\n activeReactions: {\n ...(reaction ? global.activeReactions : omit(global.activeReactions, [messageId])),\n ...(reaction && {\n [messageId]: {\n reaction,\n messageId,\n },\n }),\n },\n };\n});\n\naddActionHandler('stopActiveReaction', (global, actions, payload) => {\n const { messageId, reaction } = payload;\n\n if (global.activeReactions[messageId]?.reaction !== reaction) {\n return global;\n }\n\n return {\n ...global,\n activeReactions: omit(global.activeReactions, [messageId]),\n };\n});\n\naddActionHandler('setDefaultReaction', async (global, actions, payload) => {\n const { reaction } = payload;\n\n const result = await callApi('setDefaultReaction', { reaction });\n if (!result) {\n return undefined;\n }\n\n return {\n ...getGlobal(),\n appConfig: {\n ...global.appConfig,\n defaultReaction: reaction,\n } as ApiAppConfig,\n };\n});\n\naddActionHandler('stopActiveEmojiInteraction', (global, actions, payload) => {\n const { id } = payload;\n\n return {\n ...global,\n activeEmojiInteractions: global.activeEmojiInteractions?.filter((l) => l.id !== id),\n };\n});\n\naddActionHandler('loadReactors', async (global, actions, payload) => {\n const { chatId, messageId, reaction } = payload;\n const chat = selectChat(global, chatId);\n const message = selectChatMessage(global, chatId, messageId);\n if (!chat || !message) {\n return undefined;\n }\n\n const offset = message.reactors?.nextOffset;\n const result = await callApi('fetchMessageReactionsList', {\n reaction,\n chat,\n messageId,\n offset,\n });\n\n if (!result) {\n return undefined;\n }\n\n global = getGlobal();\n\n if (result.users?.length) {\n global = addUsers(global, buildCollectionByKey(result.users, 'id'));\n }\n\n const { nextOffset, count, reactions } = result;\n\n return updateChatMessage(global, chatId, messageId, {\n reactors: {\n nextOffset,\n count,\n reactions: [\n ...(message.reactors?.reactions || []),\n ...reactions,\n ],\n },\n });\n});\n\naddActionHandler('loadMessageReactions', (global, actions, payload) => {\n const { ids, chatId } = payload;\n\n const chat = selectChat(global, chatId);\n\n if (!chat) {\n return;\n }\n\n callApi('fetchMessageReactions', { ids, chat });\n});\n\naddActionHandler('sendWatchingEmojiInteraction', (global, actions, payload) => {\n const {\n chatId, emoticon, x, y, startSize, isReversed, id,\n } = payload;\n\n const chat = selectChat(global, chatId);\n\n if (!chat || !global.activeEmojiInteractions?.some((l) => l.id === id) || chatId === global.currentUserId) {\n return undefined;\n }\n\n callApi('sendWatchingEmojiInteraction', { chat, emoticon });\n\n return {\n ...global,\n activeEmojiInteractions: global.activeEmojiInteractions.map((activeEmojiInteraction) => {\n if (activeEmojiInteraction.id === id) {\n return {\n ...activeEmojiInteraction,\n x: subtractXForEmojiInteraction(global, x),\n y,\n startSize,\n isReversed,\n };\n }\n return activeEmojiInteraction;\n }),\n };\n});\n","import { addActionHandler, getGlobal } from '../../index';\n\nimport { ApiChannelStatistics } from '../../../api/types';\nimport { callApi } from '../../../api/gramjs';\nimport { updateStatistics, updateStatisticsGraph } from '../../reducers';\nimport { selectChatMessages, selectChat } from '../../selectors';\n\naddActionHandler('loadStatistics', async (global, actions, payload) => {\n const { chatId, isGroup } = payload;\n const chat = selectChat(global, chatId);\n if (!chat?.fullInfo) {\n return undefined;\n }\n\n const result = await callApi(isGroup ? 'fetchGroupStatistics' : 'fetchChannelStatistics', { chat });\n if (!result) {\n return undefined;\n }\n\n global = getGlobal();\n\n if ((result as ApiChannelStatistics).recentTopMessages?.length) {\n const messages = selectChatMessages(global, chatId);\n\n (result as ApiChannelStatistics).recentTopMessages = (result as ApiChannelStatistics).recentTopMessages\n .map((message) => ({ ...message, ...messages[message.msgId] }));\n }\n\n global = updateStatistics(global, chatId, result);\n\n return global;\n});\n\naddActionHandler('loadStatisticsAsyncGraph', async (global, actions, payload) => {\n const {\n chatId, token, name, isPercentage,\n } = payload;\n const chat = selectChat(global, chatId);\n if (!chat?.fullInfo) {\n return undefined;\n }\n\n const dcId = chat.fullInfo!.statisticsDcId;\n const result = await callApi('fetchStatisticsAsyncGraph', { token, dcId, isPercentage });\n\n if (!result) {\n return undefined;\n }\n\n return updateStatisticsGraph(getGlobal(), chatId, name, result);\n});\n","export function areDeepEqual(value1: T, value2: T): boolean {\n const type1 = typeof value1;\n const type2 = typeof value2;\n if (type1 !== type2) {\n return false;\n }\n\n if (type1 !== 'object') {\n return value1 === value2;\n }\n\n const isArray1 = Array.isArray(value1);\n const isArray2 = Array.isArray(value2);\n\n if (isArray1 !== isArray2) {\n return false;\n }\n\n if (isArray1) {\n const array1 = value1 as any[];\n const array2 = value2 as any[];\n\n if (array1.length !== array2.length) {\n return false;\n }\n\n return array1.every((member1, i) => areDeepEqual(member1, array2[i]));\n }\n\n const object1 = value1 as AnyLiteral;\n const object2 = value2 as AnyLiteral;\n const keys1 = Object.keys(object1);\n\n return keys1.every((key1) => areDeepEqual(object1[key1], object2[key1]));\n}\n","import { addActionHandler, getGlobal, setGlobal } from '../../index';\n\nimport { MAIN_THREAD_ID } from '../../../api/types';\n\nimport { ARCHIVED_FOLDER_ID, MAX_ACTIVE_PINNED_CHATS } from '../../../config';\nimport { pick } from '../../../util/iteratees';\nimport { closeMessageNotifications, notifyAboutMessage } from '../../../util/notifications';\nimport { getMessageRecentReaction } from '../../helpers';\nimport {\n updateChat,\n updateChatListIds,\n updateChatListType,\n replaceThreadParam,\n leaveChat,\n} from '../../reducers';\nimport {\n selectChat,\n selectCommonBoxChatId,\n selectIsChatListed,\n selectChatListType,\n selectCurrentMessageList,\n} from '../../selectors';\n\nconst TYPING_STATUS_CLEAR_DELAY = 6000; // 6 seconds\n// Enough to animate and mark as read in Message List\nconst CURRENT_CHAT_UNREAD_DELAY = 1500;\n\naddActionHandler('apiUpdate', (global, actions, update) => {\n switch (update['@type']) {\n case 'updateChat': {\n if (!update.noTopChatsRequest && !selectIsChatListed(global, update.id)) {\n // Chat can appear in dialogs list.\n actions.loadTopChats();\n }\n\n setGlobal(updateChat(global, update.id, update.chat, update.newProfilePhoto));\n\n if (update.chat.id) {\n closeMessageNotifications({\n chatId: update.chat.id,\n lastReadInboxMessageId: update.chat.lastReadInboxMessageId,\n });\n }\n\n return undefined;\n }\n\n case 'updateChatJoin': {\n const listType = selectChatListType(global, update.id);\n if (!listType) {\n return undefined;\n }\n\n global = updateChatListIds(global, listType, [update.id]);\n global = updateChat(global, update.id, { isNotJoined: false });\n setGlobal(global);\n\n const chat = selectChat(global, update.id);\n if (chat) {\n actions.requestChatUpdate({ chatId: chat.id });\n }\n\n return undefined;\n }\n\n case 'updateChatLeave': {\n return leaveChat(global, update.id);\n }\n\n case 'updateChatInbox': {\n return updateChat(global, update.id, update.chat);\n }\n\n case 'updateChatTypingStatus': {\n const { id, typingStatus } = update;\n setGlobal(updateChat(global, id, { typingStatus }));\n\n setTimeout(() => {\n global = getGlobal();\n const chat = selectChat(global, id);\n if (chat && typingStatus && chat.typingStatus && chat.typingStatus.timestamp === typingStatus.timestamp) {\n setGlobal(updateChat(global, id, { typingStatus: undefined }));\n }\n }, TYPING_STATUS_CLEAR_DELAY);\n\n return undefined;\n }\n\n case 'newMessage': {\n const { message } = update;\n const { chatId: currentChatId, threadId, type: messageListType } = selectCurrentMessageList(global) || {};\n\n if (message.senderId === global.currentUserId && !message.isFromScheduled) {\n return undefined;\n }\n\n const chat = selectChat(global, update.chatId);\n if (!chat) {\n return undefined;\n }\n\n const isActiveChat = (\n messageListType === 'thread'\n && threadId === MAIN_THREAD_ID\n && update.chatId === currentChatId\n );\n\n if (isActiveChat) {\n setTimeout(() => {\n actions.requestChatUpdate({ chatId: update.chatId });\n }, CURRENT_CHAT_UNREAD_DELAY);\n } else {\n setGlobal(updateChat(global, update.chatId, {\n unreadCount: chat.unreadCount ? chat.unreadCount + 1 : 1,\n ...(update.message.hasUnreadMention && {\n unreadMentionsCount: chat.unreadMentionsCount ? chat.unreadMentionsCount + 1 : 1,\n }),\n }));\n }\n\n notifyAboutMessage({\n chat,\n message,\n });\n\n return undefined;\n }\n\n case 'updateMessage': {\n const { message } = update;\n const chat = selectChat(global, update.chatId);\n if (!chat) {\n return undefined;\n }\n\n if (getMessageRecentReaction(message)) {\n notifyAboutMessage({\n chat,\n message,\n });\n }\n\n return undefined;\n }\n\n case 'updateCommonBoxMessages':\n case 'updateChannelMessages': {\n const { ids, messageUpdate } = update;\n if (messageUpdate.hasUnreadMention !== false) {\n return undefined;\n }\n\n ids.forEach((id) => {\n const chatId = ('channelId' in update ? update.channelId : selectCommonBoxChatId(global, id))!;\n const chat = selectChat(global, chatId);\n if (chat?.unreadMentionsCount) {\n global = updateChat(global, chatId, {\n unreadMentionsCount: chat.unreadMentionsCount - 1,\n });\n }\n });\n\n return global;\n }\n\n case 'updateChatFullInfo': {\n const { fullInfo } = update;\n const targetChat = global.chats.byId[update.id];\n if (!targetChat) {\n return undefined;\n }\n\n return updateChat(global, update.id, {\n fullInfo: {\n ...targetChat.fullInfo,\n ...fullInfo,\n },\n });\n }\n\n case 'updatePinnedChatIds': {\n const { ids, folderId } = update;\n const listType = folderId === ARCHIVED_FOLDER_ID ? 'archived' : 'active';\n\n return {\n ...global,\n chats: {\n ...global.chats,\n orderedPinnedIds: {\n ...global.chats.orderedPinnedIds,\n [listType]: ids.length ? ids : undefined,\n },\n },\n };\n }\n\n case 'updateChatPinned': {\n const { id, isPinned } = update;\n const listType = selectChatListType(global, id);\n if (!listType) {\n return undefined;\n }\n\n const { [listType]: orderedPinnedIds } = global.chats.orderedPinnedIds;\n\n let newOrderedPinnedIds = orderedPinnedIds || [];\n if (!isPinned) {\n newOrderedPinnedIds = newOrderedPinnedIds.filter((pinnedId) => pinnedId !== id);\n } else if (!newOrderedPinnedIds.includes(id)) {\n // When moving pinned chats to archive, active ordered pinned ids don't get updated\n // (to preserve chat pinned state when it returns from archive)\n // If user already has max pinned chats, we should check for orderedIds\n // that don't point to listed chats\n if (listType === 'active' && newOrderedPinnedIds.length >= MAX_ACTIVE_PINNED_CHATS) {\n const listIds = global.chats.listIds.active;\n newOrderedPinnedIds = newOrderedPinnedIds.filter((pinnedId) => listIds && listIds.includes(pinnedId));\n }\n\n newOrderedPinnedIds = [id, ...newOrderedPinnedIds];\n }\n\n return {\n ...global,\n chats: {\n ...global.chats,\n orderedPinnedIds: {\n ...global.chats.orderedPinnedIds,\n [listType]: newOrderedPinnedIds.length ? newOrderedPinnedIds : undefined,\n },\n },\n };\n }\n\n case 'updateChatListType': {\n const { id, folderId } = update;\n\n return updateChatListType(global, id, folderId);\n }\n\n case 'updateChatFolder': {\n const { id, folder } = update;\n const { byId: chatFoldersById, orderedIds } = global.chatFolders;\n\n const newChatFoldersById = folder\n ? { ...chatFoldersById, [id]: folder }\n : pick(\n chatFoldersById,\n Object.keys(chatFoldersById).map(Number).filter((folderId) => folderId !== id),\n );\n\n const newOrderedIds = folder\n ? orderedIds && orderedIds.includes(id) ? orderedIds : [...(orderedIds || []), id]\n : orderedIds ? orderedIds.filter((orderedId) => orderedId !== id) : undefined;\n\n return {\n ...global,\n chatFolders: {\n ...global.chatFolders,\n byId: newChatFoldersById,\n orderedIds: newOrderedIds,\n },\n };\n }\n\n case 'updateChatFoldersOrder': {\n const { orderedIds } = update;\n\n return {\n ...global,\n chatFolders: {\n ...global.chatFolders,\n orderedIds,\n },\n };\n }\n\n case 'updateRecommendedChatFolders': {\n const { folders } = update;\n\n return {\n ...global,\n chatFolders: {\n ...global.chatFolders,\n recommended: folders,\n },\n };\n }\n\n case 'updateChatMembers': {\n const targetChat = global.chats.byId[update.id];\n const { replacedMembers, addedMember, deletedMemberId } = update;\n if (!targetChat) {\n return undefined;\n }\n\n let shouldUpdate = false;\n let members = targetChat.fullInfo?.members\n ? [...targetChat.fullInfo.members]\n : [];\n\n if (replacedMembers) {\n members = replacedMembers;\n shouldUpdate = true;\n } else if (addedMember) {\n if (\n !members.length\n || !members.some((m) => m.userId === addedMember.userId)\n ) {\n members.push(addedMember);\n shouldUpdate = true;\n }\n } else if (members.length && deletedMemberId) {\n const deleteIndex = members.findIndex((m) => m.userId === deletedMemberId);\n if (deleteIndex > -1) {\n members.slice(deleteIndex, 1);\n shouldUpdate = true;\n }\n }\n\n if (shouldUpdate) {\n const adminMembers = members.filter(({ isOwner, isAdmin }) => isOwner || isAdmin);\n // TODO Kicked members?\n\n return updateChat(global, update.id, {\n membersCount: members.length,\n fullInfo: {\n ...targetChat.fullInfo,\n members,\n adminMembers,\n },\n });\n }\n\n return undefined;\n }\n\n case 'deleteProfilePhotos': {\n const { chatId, ids } = update;\n const chat = global.chats.byId[chatId];\n\n if (chat?.photos) {\n return updateChat(global, chatId, {\n photos: chat.photos.filter((photo) => !ids.includes(photo.id)),\n });\n }\n\n return undefined;\n }\n\n case 'draftMessage': {\n const {\n chatId, formattedText, date, replyingToId,\n } = update;\n const chat = global.chats.byId[chatId];\n if (!chat) {\n return undefined;\n }\n\n global = replaceThreadParam(global, chatId, MAIN_THREAD_ID, 'draft', formattedText);\n global = replaceThreadParam(global, chatId, MAIN_THREAD_ID, 'replyingToId', replyingToId);\n global = updateChat(global, chatId, { draftDate: date });\n return global;\n }\n\n case 'showInvite': {\n const { data } = update;\n\n actions.showDialog({ data });\n\n return undefined;\n }\n\n case 'updatePendingJoinRequests': {\n const { chatId, requestsPending, recentRequesterIds } = update;\n const chat = global.chats.byId[chatId];\n if (!chat) {\n return undefined;\n }\n\n global = updateChat(global, chatId, {\n fullInfo: {\n ...chat.fullInfo,\n requestsPending,\n recentRequesterIds,\n },\n });\n setGlobal(global);\n\n actions.loadChatJoinRequests({ chatId });\n }\n }\n\n return undefined;\n});\n","import { addActionHandler, getGlobal, setGlobal } from '../../index';\n\nimport {\n ApiMessage, ApiPollResult, ApiThreadInfo, MAIN_THREAD_ID,\n} from '../../../api/types';\n\nimport { unique } from '../../../util/iteratees';\nimport { areDeepEqual } from '../../../util/areDeepEqual';\nimport { notifyAboutMessage } from '../../../util/notifications';\nimport {\n updateChat,\n deleteChatMessages,\n updateChatMessage,\n updateListedIds,\n addViewportId,\n updateThreadInfo,\n replaceThreadParam,\n updateScheduledMessage,\n deleteChatScheduledMessages,\n updateThreadUnreadFromForwardedMessage,\n} from '../../reducers';\nimport { ActiveEmojiInteraction, GlobalActions, GlobalState } from '../../types';\nimport {\n selectChatMessage,\n selectChatMessages,\n selectIsViewportNewest,\n selectListedIds,\n selectChatMessageByPollId,\n selectCommonBoxChatId,\n selectIsChatListed,\n selectThreadInfo,\n selectThreadByMessage,\n selectPinnedIds,\n selectScheduledMessage,\n selectScheduledMessages,\n selectIsMessageInCurrentMessageList,\n selectScheduledIds,\n selectCurrentMessageList,\n selectViewportIds,\n selectFirstUnreadId,\n selectChat,\n selectIsChatWithBot,\n selectIsServiceChatReady,\n selectLocalAnimatedEmojiEffect,\n selectLocalAnimatedEmoji,\n} from '../../selectors';\nimport {\n getMessageContent, isUserId, isMessageLocal, getMessageText, checkIfReactionAdded,\n} from '../../helpers';\n\nconst ANIMATION_DELAY = 350;\n\naddActionHandler('apiUpdate', (global, actions, update) => {\n switch (update['@type']) {\n case 'newMessage': {\n const {\n chatId, id, message, shouldForceReply,\n } = update;\n global = updateWithLocalMedia(global, chatId, id, message);\n global = updateListedAndViewportIds(global, actions, message as ApiMessage);\n\n if (message.threadInfo) {\n global = updateThreadInfo(\n global,\n message.threadInfo.chatId,\n message.threadInfo.threadId,\n message.threadInfo,\n );\n }\n\n setGlobal(global);\n\n const newMessage = selectChatMessage(global, chatId, id)!;\n\n if (selectIsMessageInCurrentMessageList(global, chatId, message as ApiMessage)) {\n if (message.isOutgoing && !(message.content?.action)) {\n const currentMessageList = selectCurrentMessageList(global);\n if (currentMessageList) {\n // We do not use `actions.focusLastMessage` as it may be set with a delay (see below)\n actions.focusMessage({\n chatId,\n threadId: currentMessageList.threadId,\n messageId: message.id,\n noHighlight: true,\n isResizingContainer: true,\n });\n }\n }\n\n const { threadInfo } = selectThreadByMessage(global, chatId, message as ApiMessage) || {};\n if (threadInfo) {\n actions.requestThreadInfoUpdate({ chatId, threadId: threadInfo.threadId });\n }\n\n // @perf Wait until scroll animation finishes or simply rely on delivery status update (which is itself delayed)\n if (!isMessageLocal(message as ApiMessage)) {\n setTimeout(() => {\n let delayedGlobal = getGlobal();\n if (shouldForceReply) {\n delayedGlobal = replaceThreadParam(delayedGlobal, chatId, MAIN_THREAD_ID, 'replyingToId', id);\n }\n setGlobal(updateChatLastMessage(delayedGlobal, chatId, newMessage));\n }, ANIMATION_DELAY);\n }\n } else {\n setGlobal(updateChatLastMessage(getGlobal(), chatId, newMessage));\n }\n\n // Edge case: New message in an old (not loaded) chat.\n if (!selectIsChatListed(global, chatId)) {\n actions.loadTopChats();\n }\n\n break;\n }\n\n case 'updateStartEmojiInteraction': {\n const { chatId: currentChatId } = selectCurrentMessageList(global) || {};\n\n if (currentChatId !== update.id) return;\n const message = selectChatMessage(global, currentChatId, update.messageId);\n\n if (!message) return;\n\n // Workaround for a weird behavior when interaction is received after watching reaction\n if (getMessageText(message) !== update.emoji) return;\n\n const localEmoji = selectLocalAnimatedEmoji(global, update.emoji);\n\n global = {\n ...global,\n activeEmojiInteractions: [...(global.activeEmojiInteractions || []), {\n id: global.activeEmojiInteractions?.length || 0,\n animatedEffect: localEmoji ? selectLocalAnimatedEmojiEffect(localEmoji) : update.emoji,\n messageId: update.messageId,\n } as ActiveEmojiInteraction],\n };\n\n setGlobal(global);\n\n break;\n }\n\n case 'newScheduledMessage': {\n const { chatId, id, message } = update;\n\n global = updateWithLocalMedia(global, chatId, id, message, true);\n\n const scheduledIds = selectScheduledIds(global, chatId) || [];\n global = replaceThreadParam(global, chatId, MAIN_THREAD_ID, 'scheduledIds', unique([...scheduledIds, id]));\n\n setGlobal(global);\n\n break;\n }\n\n case 'updateMessage': {\n const { chatId, id, message } = update;\n\n const currentMessage = selectChatMessage(global, chatId, id);\n if (!currentMessage) {\n return;\n }\n\n global = updateWithLocalMedia(global, chatId, id, message);\n\n const newMessage = selectChatMessage(global, chatId, id)!;\n if (message.threadInfo) {\n global = updateThreadInfo(\n global,\n message.threadInfo.chatId,\n message.threadInfo.threadId,\n message.threadInfo,\n );\n }\n global = updateChatLastMessage(global, chatId, newMessage);\n\n setGlobal(global);\n\n // Scroll down if bot message height is changed with an updated inline keyboard.\n // A drawback: this will scroll down even if the previous scroll was not at bottom.\n const chat = selectChat(global, chatId);\n if (\n chat\n && !message.isOutgoing\n && chat.lastMessage?.id === message.id\n && selectIsChatWithBot(global, chat)\n && selectIsMessageInCurrentMessageList(global, chatId, message as ApiMessage)\n && selectIsViewportNewest(global, chatId, message.threadInfo?.threadId || MAIN_THREAD_ID)\n ) {\n actions.focusLastMessage();\n }\n\n break;\n }\n\n case 'updateScheduledMessage': {\n const { chatId, id, message } = update;\n\n const currentMessage = selectScheduledMessage(global, chatId, id);\n if (!currentMessage) {\n return;\n }\n\n global = updateWithLocalMedia(global, chatId, id, message, true);\n const ids = Object.keys(selectScheduledMessages(global, chatId) || {}).map(Number).sort((a, b) => b - a);\n global = replaceThreadParam(global, chatId, MAIN_THREAD_ID, 'scheduledIds', ids);\n setGlobal(global);\n\n break;\n }\n\n case 'updateMessageSendSucceeded': {\n const { chatId, localId, message } = update;\n\n global = updateListedAndViewportIds(global, actions, message as ApiMessage);\n\n const currentMessage = selectChatMessage(global, chatId, localId);\n\n global = deleteChatMessages(global, chatId, [localId]);\n\n // Edge case for \"Send When Online\"\n if (message.isScheduled) {\n global = deleteChatScheduledMessages(global, chatId, [localId]);\n }\n\n global = updateChatMessage(global, chatId, message.id, {\n ...currentMessage,\n ...message,\n previousLocalId: localId,\n });\n\n const newMessage = selectChatMessage(global, chatId, message.id)!;\n global = updateChatLastMessage(global, chatId, newMessage);\n\n const thread = selectThreadByMessage(global, chatId, message);\n // For some reason Telegram requires to manually mark outgoing thread messages read\n if (thread?.threadInfo) {\n actions.markMessageListRead({ maxId: message.id });\n\n global = replaceThreadParam(global, chatId, thread.threadInfo.threadId, 'threadInfo', {\n ...thread.threadInfo,\n lastMessageId: message.id,\n lastReadInboxMessageId: message.id,\n });\n }\n\n setGlobal(global);\n\n break;\n }\n\n case 'updateScheduledMessageSendSucceeded': {\n const { chatId, localId, message } = update;\n const scheduledIds = selectScheduledIds(global, chatId) || [];\n global = replaceThreadParam(global, chatId, MAIN_THREAD_ID, 'scheduledIds', [...scheduledIds, message.id]);\n\n const currentMessage = selectScheduledMessage(global, chatId, localId);\n\n global = deleteChatScheduledMessages(global, chatId, [localId]);\n global = updateScheduledMessage(global, chatId, message.id, {\n ...currentMessage,\n ...message,\n previousLocalId: localId,\n });\n\n setGlobal(global);\n break;\n }\n\n case 'updatePinnedIds': {\n const { chatId, isPinned, messageIds } = update;\n\n const currentPinnedIds = selectPinnedIds(global, chatId) || [];\n const newPinnedIds = isPinned\n ? [...currentPinnedIds, ...messageIds].sort((a, b) => b - a)\n : currentPinnedIds.filter((id) => !messageIds.includes(id));\n\n setGlobal(replaceThreadParam(global, chatId, MAIN_THREAD_ID, 'pinnedIds', newPinnedIds));\n\n break;\n }\n\n case 'updateThreadInfo': {\n const {\n chatId, threadId, threadInfo, firstMessageId,\n } = update;\n\n const currentThreadInfo = selectThreadInfo(global, chatId, threadId);\n const newTheadInfo = {\n ...currentThreadInfo,\n ...threadInfo,\n };\n\n if (!newTheadInfo.threadId) {\n return;\n }\n\n global = updateThreadInfo(global, chatId, threadId, newTheadInfo as ApiThreadInfo);\n\n if (firstMessageId) {\n global = replaceThreadParam(global, chatId, threadId, 'firstMessageId', firstMessageId);\n }\n\n setGlobal(global);\n\n break;\n }\n\n case 'resetMessages': {\n const { id: chatId } = update;\n const messagesById = selectChatMessages(global, chatId);\n\n if (messagesById && !isUserId(chatId)) {\n global = deleteChatMessages(global, chatId, Object.keys(messagesById).map(Number));\n setGlobal(global);\n actions.loadFullChat({ chatId, force: true });\n }\n\n break;\n }\n\n case 'deleteMessages': {\n const { ids, chatId } = update;\n\n deleteMessages(chatId, ids, actions, global);\n break;\n }\n\n case 'deleteScheduledMessages': {\n const { ids, chatId } = update;\n\n deleteScheduledMessages(chatId, ids, actions, global);\n break;\n }\n\n case 'deleteHistory': {\n const { chatId } = update;\n const chatMessages = global.messages.byChatId[chatId];\n if (chatMessages) {\n const ids = Object.keys(chatMessages.byId).map(Number);\n deleteMessages(chatId, ids, actions, global);\n } else {\n actions.requestChatUpdate({ chatId });\n }\n\n break;\n }\n\n case 'updateCommonBoxMessages': {\n const { ids, messageUpdate } = update;\n\n ids.forEach((id) => {\n const chatId = selectCommonBoxChatId(global, id);\n if (chatId) {\n global = updateChatMessage(global, chatId, id, messageUpdate);\n }\n });\n\n setGlobal(global);\n\n break;\n }\n\n case 'updateChannelMessages': {\n const { channelId, ids, messageUpdate } = update;\n\n ids.forEach((id) => {\n global = updateChatMessage(global, channelId, id, messageUpdate);\n });\n\n setGlobal(global);\n\n break;\n }\n\n case 'updateMessagePoll': {\n const { pollId, pollUpdate } = update;\n\n const message = selectChatMessageByPollId(global, pollId);\n\n if (message?.content.poll) {\n const updatedPoll = { ...message.content.poll, ...pollUpdate };\n\n // Workaround for poll update bug: `chosen` option gets reset when someone votes after current user\n const { results: updatedResults } = updatedPoll.results || {};\n if (updatedResults && !updatedResults.some(((result) => result.isChosen))) {\n const { results } = message.content.poll.results;\n const chosenAnswers = results && results.filter((result) => result.isChosen);\n if (chosenAnswers) {\n chosenAnswers.forEach((chosenAnswer) => {\n const chosenAnswerIndex = updatedResults.findIndex((result) => result.option === chosenAnswer.option);\n if (chosenAnswerIndex >= 0) {\n updatedPoll.results.results![chosenAnswerIndex].isChosen = true;\n }\n });\n }\n }\n\n setGlobal(updateChatMessage(\n global,\n message.chatId,\n message.id,\n {\n content: {\n ...message.content,\n poll: updatedPoll,\n },\n },\n ));\n }\n break;\n }\n\n case 'updateMessagePollVote': {\n const { pollId, userId, options } = update;\n const message = selectChatMessageByPollId(global, pollId);\n if (!message || !message.content.poll || !message.content.poll.results) {\n break;\n }\n\n const { poll } = message.content;\n\n const { recentVoterIds, totalVoters, results } = poll.results;\n const newRecentVoterIds = recentVoterIds ? [...recentVoterIds] : [];\n const newTotalVoters = totalVoters ? totalVoters + 1 : 1;\n const newResults = results ? [...results] : [];\n\n newRecentVoterIds.push(userId);\n\n options.forEach((option) => {\n const targetOption = newResults.find((result) => result.option === option);\n const targetOptionIndex = newResults.findIndex((result) => result.option === option);\n const updatedOption: ApiPollResult = targetOption ? { ...targetOption } : { option, votersCount: 0 };\n\n updatedOption.votersCount += 1;\n if (userId === global.currentUserId) {\n updatedOption.isChosen = true;\n }\n\n if (targetOptionIndex) {\n newResults[targetOptionIndex] = updatedOption;\n } else {\n newResults.push(updatedOption);\n }\n });\n\n setGlobal(updateChatMessage(\n global,\n message.chatId,\n message.id,\n {\n content: {\n ...message.content,\n poll: {\n ...poll,\n results: {\n ...poll.results,\n recentVoterIds: newRecentVoterIds,\n totalVoters: newTotalVoters,\n results: newResults,\n },\n },\n },\n },\n ));\n\n break;\n }\n\n case 'updateServiceNotification': {\n const { message } = update;\n\n if (selectIsServiceChatReady(global)) {\n actions.createServiceNotification({ message });\n }\n\n break;\n }\n\n case 'updateMessageReactions': {\n const { chatId, id, reactions } = update;\n const message = selectChatMessage(global, chatId, id);\n const chat = selectChat(global, update.chatId);\n const currentReactions = message?.reactions;\n\n // `updateMessageReactions` happens with an interval, so we try to avoid redundant global state updates\n if (currentReactions && areDeepEqual(reactions, currentReactions)) {\n return;\n }\n\n // Only notify about added reactions, not removed ones\n const shouldNotify = checkIfReactionAdded(currentReactions, reactions, global.currentUserId);\n\n global = updateChatMessage(global, chatId, id, { reactions: update.reactions });\n\n if (shouldNotify) {\n const newMessage = selectChatMessage(global, chatId, id);\n if (!chat || !newMessage) return;\n notifyAboutMessage({\n chat,\n message: newMessage,\n isReaction: true,\n });\n }\n\n setGlobal(global);\n break;\n }\n }\n});\n\nfunction updateWithLocalMedia(\n global: GlobalState, chatId: string, id: number, message: Partial, isScheduled = false,\n) {\n // Preserve locally uploaded media.\n const currentMessage = isScheduled\n ? selectScheduledMessage(global, chatId, id)\n : selectChatMessage(global, chatId, id);\n if (currentMessage && message.content) {\n const {\n photo, video, sticker, document,\n } = getMessageContent(currentMessage);\n if (photo && message.content.photo) {\n message.content.photo.blobUrl = photo.blobUrl;\n message.content.photo.thumbnail = photo.thumbnail;\n } else if (video && message.content.video) {\n message.content.video.blobUrl = video.blobUrl;\n } else if (sticker && message.content.sticker) {\n message.content.sticker.isPreloadedGlobally = sticker.isPreloadedGlobally;\n } else if (document && message.content.document) {\n message.content.document.previewBlobUrl = document.previewBlobUrl;\n }\n }\n\n return isScheduled\n ? updateScheduledMessage(global, chatId, id, message)\n : updateChatMessage(global, chatId, id, message);\n}\n\nfunction updateThreadUnread(global: GlobalState, actions: GlobalActions, message: ApiMessage, isDeleting?: boolean) {\n const { chatId } = message;\n\n const { threadInfo } = selectThreadByMessage(global, chatId, message) || {};\n\n if (!threadInfo && message.replyToMessageId) {\n const originMessage = selectChatMessage(global, chatId, message.replyToMessageId);\n if (originMessage) {\n global = updateThreadUnreadFromForwardedMessage(global, originMessage, chatId, message.id, isDeleting);\n } else {\n actions.loadMessage({\n chatId,\n messageId: message.replyToMessageId,\n threadUpdate: {\n isDeleting,\n lastMessageId: message.id,\n },\n });\n }\n }\n\n return global;\n}\n\nfunction updateListedAndViewportIds(global: GlobalState, actions: GlobalActions, message: ApiMessage) {\n const { id, chatId } = message;\n\n const { threadInfo, firstMessageId } = selectThreadByMessage(global, chatId, message) || {};\n\n const chat = selectChat(global, chatId);\n const isUnreadChatNotLoaded = chat?.unreadCount && !selectListedIds(global, chatId, MAIN_THREAD_ID);\n\n global = updateThreadUnread(global, actions, message);\n\n if (threadInfo) {\n if (firstMessageId || !isMessageLocal(message)) {\n global = updateListedIds(global, chatId, threadInfo.threadId, [id]);\n\n if (selectIsViewportNewest(global, chatId, threadInfo.threadId)) {\n global = addViewportId(global, chatId, threadInfo.threadId, id);\n\n if (!firstMessageId) {\n global = replaceThreadParam(global, chatId, threadInfo.threadId, 'firstMessageId', message.id);\n }\n }\n }\n\n global = replaceThreadParam(global, chatId, threadInfo.threadId, 'threadInfo', {\n ...threadInfo,\n lastMessageId: message.id,\n messagesCount: threadInfo.messagesCount + 1,\n });\n }\n\n if (isUnreadChatNotLoaded) {\n return global;\n }\n\n global = updateListedIds(global, chatId, MAIN_THREAD_ID, [id]);\n\n if (selectIsViewportNewest(global, chatId, MAIN_THREAD_ID)) {\n // Always keep the first unread message in the viewport list\n const firstUnreadId = selectFirstUnreadId(global, chatId, MAIN_THREAD_ID);\n const candidateGlobal = addViewportId(global, chatId, MAIN_THREAD_ID, id);\n const newViewportIds = selectViewportIds(candidateGlobal, chatId, MAIN_THREAD_ID);\n\n if (!firstUnreadId || newViewportIds!.includes(firstUnreadId)) {\n global = candidateGlobal;\n }\n }\n\n return global;\n}\n\nfunction updateChatLastMessage(\n global: GlobalState,\n chatId: string,\n message: ApiMessage,\n force = false,\n) {\n const { chats } = global;\n const currentLastMessage = chats.byId[chatId]?.lastMessage;\n\n if (currentLastMessage && !force) {\n const isSameOrNewer = (\n currentLastMessage.id === message.id || currentLastMessage.id === message.previousLocalId\n ) || message.id > currentLastMessage.id;\n\n if (!isSameOrNewer) {\n return global;\n }\n }\n\n return updateChat(global, chatId, { lastMessage: message });\n}\n\nfunction findLastMessage(global: GlobalState, chatId: string) {\n const byId = selectChatMessages(global, chatId);\n const listedIds = selectListedIds(global, chatId, MAIN_THREAD_ID);\n\n if (!byId || !listedIds) {\n return undefined;\n }\n\n let i = listedIds.length;\n while (i--) {\n const message = byId[listedIds[i]];\n if (!message.isDeleting) {\n return message;\n }\n }\n\n return undefined;\n}\n\nfunction deleteMessages(chatId: string | undefined, ids: number[], actions: GlobalActions, global: GlobalState) {\n // Channel update\n\n if (chatId) {\n ids.forEach((id) => {\n global = updateChatMessage(global, chatId, id, {\n isDeleting: true,\n });\n\n const newLastMessage = findLastMessage(global, chatId);\n if (newLastMessage) {\n global = updateChatLastMessage(global, chatId, newLastMessage, true);\n }\n });\n\n setGlobal(global);\n\n actions.requestChatUpdate({ chatId });\n\n const threadIdsToUpdate: number[] = [];\n\n ids.forEach((id) => {\n const message = selectChatMessage(global, chatId, id);\n if (!message) {\n return;\n }\n\n global = updateThreadUnread(global, actions, message, true);\n\n const { threadInfo } = selectThreadByMessage(global, chatId, message) || {};\n if (threadInfo) {\n threadIdsToUpdate.push(threadInfo.threadId);\n }\n });\n\n setGlobal(global);\n\n setTimeout(() => {\n setGlobal(deleteChatMessages(getGlobal(), chatId, ids));\n\n unique(threadIdsToUpdate).forEach((threadId) => {\n actions.requestThreadInfoUpdate({ chatId, threadId });\n });\n }, ANIMATION_DELAY);\n\n return;\n }\n\n // Common box update\n\n const chatsIdsToUpdate: string[] = [];\n\n ids.forEach((id) => {\n const commonBoxChatId = selectCommonBoxChatId(global, id);\n if (commonBoxChatId) {\n chatsIdsToUpdate.push(commonBoxChatId);\n\n global = updateChatMessage(global, commonBoxChatId, id, {\n isDeleting: true,\n });\n\n const newLastMessage = findLastMessage(global, commonBoxChatId);\n if (newLastMessage) {\n global = updateChatLastMessage(global, commonBoxChatId, newLastMessage, true);\n }\n\n setTimeout(() => {\n setGlobal(deleteChatMessages(getGlobal(), commonBoxChatId, [id]));\n }, ANIMATION_DELAY);\n }\n });\n\n setGlobal(global);\n\n unique(chatsIdsToUpdate).forEach((id) => {\n actions.requestChatUpdate({ chatId: id });\n });\n}\n\nfunction deleteScheduledMessages(\n chatId: string | undefined, ids: number[], actions: GlobalActions, global: GlobalState,\n) {\n if (!chatId) {\n return;\n }\n\n ids.forEach((id) => {\n global = updateScheduledMessage(global, chatId, id, {\n isDeleting: true,\n });\n });\n\n setGlobal(global);\n\n setTimeout(() => {\n global = deleteChatScheduledMessages(getGlobal(), chatId, ids);\n const scheduledMessages = selectScheduledMessages(global, chatId);\n global = replaceThreadParam(\n global, chatId, MAIN_THREAD_ID, 'scheduledIds', Object.keys(scheduledMessages || {}).map(Number),\n );\n setGlobal(global);\n }, ANIMATION_DELAY);\n}\n","import { addActionHandler, getGlobal, setGlobal } from '../../index';\n\nimport { ApiUserStatus } from '../../../api/types';\n\nimport { deleteContact, replaceUserStatuses, updateUser } from '../../reducers';\nimport { throttle } from '../../../util/schedulers';\n\nconst STATUS_UPDATE_THROTTLE = 3000;\n\nconst flushStatusUpdatesThrottled = throttle(flushStatusUpdates, STATUS_UPDATE_THROTTLE, true);\n\nlet pendingStatusUpdates: Record = {};\n\nfunction scheduleStatusUpdate(userId: string, statusUpdate: ApiUserStatus) {\n pendingStatusUpdates[userId] = statusUpdate;\n flushStatusUpdatesThrottled();\n}\n\nfunction flushStatusUpdates() {\n const global = getGlobal();\n\n setGlobal(replaceUserStatuses(global, {\n ...global.users.statusesById,\n ...pendingStatusUpdates,\n }));\n\n pendingStatusUpdates = {};\n}\n\naddActionHandler('apiUpdate', (global, actions, update) => {\n switch (update['@type']) {\n case 'deleteContact': {\n return deleteContact(global, update.id);\n }\n\n case 'updateUser': {\n return updateUser(global, update.id, update.user);\n }\n\n case 'updateUserStatus': {\n // Status updates come very often so we throttle them\n scheduleStatusUpdate(update.userId, update.status);\n return undefined;\n }\n\n case 'updateUserFullInfo': {\n const { id, fullInfo } = update;\n const targetUser = global.users.byId[id];\n if (!targetUser) {\n return undefined;\n }\n\n return updateUser(global, id, {\n fullInfo: {\n ...targetUser.fullInfo,\n ...fullInfo,\n },\n });\n }\n }\n\n return undefined;\n});\n","import { addActionHandler } from '../../index';\n\nimport { updateStickerSet } from '../../reducers';\n\naddActionHandler('apiUpdate', (global, actions, update) => {\n switch (update['@type']) {\n case 'updateStickerSet': {\n return updateStickerSet(global, update.id, update.stickerSet);\n }\n }\n\n return undefined;\n});\n","import { addActionHandler, getGlobal, setGlobal } from '../../index';\n\nimport { ApiPrivacyKey, PaymentStep } from '../../../types';\n\nimport {\n addBlockedContact, removeBlockedContact, setConfirmPaymentUrl, setPaymentStep,\n} from '../../reducers';\n\naddActionHandler('apiUpdate', (global, actions, update) => {\n switch (update['@type']) {\n case 'updatePeerBlocked':\n if (update.isBlocked) {\n return addBlockedContact(getGlobal(), update.id);\n } else {\n return removeBlockedContact(getGlobal(), update.id);\n }\n\n case 'updateResetContactList':\n setGlobal({\n ...getGlobal(),\n contactList: {\n userIds: [],\n },\n });\n break;\n\n case 'updateFavoriteStickers':\n actions.loadFavoriteStickers();\n break;\n\n case 'updatePrivacy':\n global.settings.privacy[update.key as ApiPrivacyKey] = update.rules;\n break;\n\n case 'updatePaymentVerificationNeeded':\n global = setConfirmPaymentUrl(getGlobal(), update.url);\n global = setPaymentStep(global, PaymentStep.ConfirmPayment);\n setGlobal(global);\n break;\n }\n\n return undefined;\n});\n","import { addActionHandler, setGlobal } from '../../index';\n\nimport { addNotifyException, updateChat, updateNotifySettings } from '../../reducers';\n\naddActionHandler('apiUpdate', (global, actions, update) => {\n switch (update['@type']) {\n case 'updateNotifySettings': {\n return updateNotifySettings(global, update.peerType, update.isSilent, update.shouldShowPreviews);\n }\n\n case 'updateNotifyExceptions': {\n const {\n chatId, isMuted, isSilent, shouldShowPreviews,\n } = update;\n const chat = global.chats.byId[chatId];\n\n if (chat) {\n global = updateChat(global, chatId, { isMuted });\n }\n\n setGlobal(addNotifyException(global, chatId, { isMuted, isSilent, shouldShowPreviews }));\n break;\n }\n }\n\n return undefined;\n});\n","import { addActionHandler } from '../../index';\n\naddActionHandler('apiUpdate', (global, actions, update) => {\n switch (update['@type']) {\n case 'updateTwoFaStateWaitCode': {\n return {\n ...global,\n twoFaSettings: {\n ...global.twoFaSettings,\n isLoading: false,\n waitingEmailCodeLength: update.length,\n },\n };\n }\n\n case 'updateTwoFaError': {\n return {\n ...global,\n twoFaSettings: {\n ...global.twoFaSettings,\n error: update.message,\n },\n };\n }\n }\n\n return undefined;\n});\n","import { addActionHandler, getGlobal } from '../../index';\nimport { removeGroupCall, updateGroupCall, updateGroupCallParticipant } from '../../reducers/calls';\nimport { omit } from '../../../util/iteratees';\nimport { selectChat } from '../../selectors';\nimport { updateChat } from '../../reducers';\n\naddActionHandler('apiUpdate', (global, actions, update) => {\n switch (update['@type']) {\n case 'updateGroupCall': {\n if (update.call.connectionState === 'discarded') {\n if (global.groupCalls.activeGroupCallId) {\n actions.leaveGroupCall({ shouldRemove: true });\n return undefined;\n } else {\n return removeGroupCall(global, update.call.id);\n }\n }\n\n return updateGroupCall(global,\n update.call.id,\n omit(update.call, ['connectionState']),\n undefined,\n update.call.participantsCount);\n }\n case 'updateGroupCallChatId': {\n const chat = selectChat(global, update.chatId);\n if (chat) {\n global = updateChat(global, update.chatId, {\n fullInfo: {\n ...chat.fullInfo,\n groupCallId: update.call.id,\n },\n });\n }\n return global;\n }\n case 'updateGroupCallParticipants': {\n const { groupCallId, participants, nextOffset } = update;\n const { currentUserId } = global;\n\n // `secret-sauce` should disconnect if the participant is us but from another device\n global = getGlobal();\n participants.forEach((participant) => {\n if (participant.id) {\n global = updateGroupCallParticipant(\n global, groupCallId, participant.id, participant, Boolean(nextOffset) || currentUserId === participant.id,\n );\n }\n });\n if (nextOffset) {\n global = updateGroupCall(global, groupCallId, {\n nextOffset,\n });\n }\n return global;\n }\n }\n\n return undefined;\n});\n","import { addActionHandler } from '../../index';\n\nimport { clearPayment } from '../../reducers';\n\naddActionHandler('apiUpdate', (global, actions, update) => {\n switch (update['@type']) {\n case 'updatePaymentStateCompleted': {\n return clearPayment(global);\n }\n }\n\n return undefined;\n});\n","import { useEffect } from '../lib/teact/teact';\n\nimport { onBeforeUnload } from '../util/schedulers';\n\nexport default function useBeforeUnload(callback: AnyToVoidFunction) {\n useEffect(() => {\n return onBeforeUnload(callback);\n }, [callback]);\n}\n","import { useEffect } from '../lib/teact/teact';\nimport { IS_IOS, IS_PWA, IS_TOUCH_ENV } from '../util/environment';\n\nconst metaViewport = document.querySelector('meta[name=\"viewport\"]');\nconst defaultViewportContent = metaViewport?.getAttribute('content') || '';\nconst allowedZoomViewportContent = 'width=device-width, initial-scale=1, shrink-to-fit=no, viewport-fit=cover';\n\nexport default function usePreventPinchZoomGesture(isDisabled = false) {\n useEffect(() => {\n if (!IS_TOUCH_ENV) {\n return undefined;\n }\n\n if (isDisabled) {\n // Clean viewport content from values values that disable the ability to zoom a webpage\n // https://web.dev/meta-viewport/\n metaViewport?.setAttribute('content', allowedZoomViewportContent);\n return undefined;\n }\n\n metaViewport?.setAttribute('content', defaultViewportContent);\n\n // Since iOS 10 `user-scaleable=no` is disabled in Safari for iOS,\n // this is only applicable for the browser and does not apply to the PWA mode.\n // https://newbedev.com/how-do-you-disable-viewport-zooming-on-mobile-safari\n if (IS_IOS && !IS_PWA) {\n document.addEventListener('gesturestart', preventEvent);\n }\n\n return () => {\n metaViewport?.setAttribute('content', 'width=device-width, initial-scale=1, shrink-to-fit=no');\n if (IS_IOS && !IS_PWA) {\n document.removeEventListener('gesturestart', preventEvent);\n }\n };\n }, [isDisabled]);\n}\n\nfunction preventEvent(e: Event) {\n e.preventDefault();\n}\n","import React, { FC, memo, useEffect } from '../../lib/teact/teact';\n\nimport { formatIntegerCompact } from '../../util/textFormat';\nimport { useFolderManagerForUnreadCounters } from '../../hooks/useFolderManager';\nimport { getAllNotificationsCount } from '../../util/folderManager';\nimport { updateAppBadge } from '../../util/appBadge';\n\ninterface OwnProps {\n isForAppBadge?: boolean;\n}\n\nconst UnreadCounter: FC = ({ isForAppBadge }) => {\n useFolderManagerForUnreadCounters();\n const unreadNotificationsCount = getAllNotificationsCount();\n\n useEffect(() => {\n if (isForAppBadge) {\n updateAppBadge(unreadNotificationsCount);\n }\n }, [isForAppBadge, unreadNotificationsCount]);\n\n if (isForAppBadge || !unreadNotificationsCount) {\n return undefined;\n }\n\n return (\n
{formatIntegerCompact(unreadNotificationsCount)}
\n );\n};\n\nexport default memo(UnreadCounter);\n","import { GlobalState } from '../global/types';\n\nimport useBrowserOnline from './useBrowserOnline';\nimport { LangFn } from './useLang';\n\nexport enum ConnectionStatus {\n waitingForNetwork,\n syncing,\n online,\n}\n\ntype ConnectionStatusPosition =\n 'overlay'\n | 'minimized'\n | 'middleHeader'\n | 'none';\n\nexport default function useConnectionStatus(\n lang: LangFn,\n connectionState: GlobalState['connectionState'],\n isSyncing: GlobalState['isSyncing'],\n hasMiddleHeader: boolean,\n isMinimized?: boolean,\n isDisabled?: boolean,\n) {\n let status: ConnectionStatus;\n const isBrowserOnline = useBrowserOnline();\n if (!isBrowserOnline || connectionState === 'connectionStateConnecting') {\n status = ConnectionStatus.waitingForNetwork;\n } else if (isSyncing) {\n status = ConnectionStatus.syncing;\n } else {\n status = ConnectionStatus.online;\n }\n\n let position: ConnectionStatusPosition;\n if (status === ConnectionStatus.online || isDisabled) {\n position = 'none';\n } else if (hasMiddleHeader) {\n position = 'middleHeader';\n } else if (isMinimized) {\n position = 'minimized';\n } else {\n position = 'overlay';\n }\n\n let text: string | undefined;\n if (status === ConnectionStatus.waitingForNetwork) {\n text = lang('WaitingForNetwork');\n } else if (status === ConnectionStatus.syncing) {\n text = lang('Updating');\n }\n\n if (position === 'middleHeader') {\n text = text!.toLowerCase().replace(/\\.+$/, '');\n }\n\n return {\n connectionStatus: status,\n connectionStatusPosition: position,\n connectionStatusText: text,\n };\n}\n","import { useEffect, useState } from '../lib/teact/teact';\n\nexport default function useBrowserOnline() {\n const [isOnline, setIsOnline] = useState(window.navigator.onLine);\n\n useEffect(() => {\n function handleChange() {\n setIsOnline(window.navigator.onLine);\n }\n\n window.addEventListener('online', handleChange);\n window.addEventListener('offline', handleChange);\n\n return () => {\n window.removeEventListener('offline', handleChange);\n window.removeEventListener('online', handleChange);\n };\n }, []);\n\n return isOnline;\n}\n","import React, { FC, memo } from '../../lib/teact/teact';\n\nimport useLang from '../../hooks/useLang';\nimport { ConnectionStatus } from '../../hooks/useConnectionStatus';\n\nimport Transition from '../ui/Transition';\nimport Spinner from '../ui/Spinner';\nimport Button from '../ui/Button';\n\nimport './ConnectionStatusOverlay.scss';\n\ntype OwnProps = {\n connectionStatus: ConnectionStatus;\n connectionStatusText: string;\n onClick?: NoneToVoidFunction;\n};\n\nconst ConnectionStatusOverlay: FC = ({\n connectionStatus,\n connectionStatusText,\n onClick,\n}) => {\n const lang = useLang();\n\n return (\n
\n \n
\n \n {connectionStatusText}\n \n
\n \n \n \n
\n );\n};\n\nexport default memo(ConnectionStatusOverlay);\n","import React, {\n FC, memo, useCallback, useMemo,\n} from '../../../lib/teact/teact';\nimport { getActions, withGlobal } from '../../../global';\n\nimport { ISettings, LeftColumnContent } from '../../../types';\nimport { ApiChat } from '../../../api/types';\nimport { GlobalState } from '../../../global/types';\n\nimport {\n ANIMATION_LEVEL_MAX, APP_NAME, APP_VERSION, DEBUG, FEEDBACK_URL,\n} from '../../../config';\nimport { IS_SINGLE_COLUMN_LAYOUT } from '../../../util/environment';\nimport buildClassName from '../../../util/buildClassName';\nimport { formatDateToString } from '../../../util/dateFormat';\nimport switchTheme from '../../../util/switchTheme';\nimport { setPermanentWebVersion } from '../../../util/permanentWebVersion';\nimport { clearWebsync } from '../../../util/websync';\nimport { selectCurrentMessageList, selectTheme } from '../../../global/selectors';\nimport { isChatArchived } from '../../../global/helpers';\nimport useLang from '../../../hooks/useLang';\nimport { disableHistoryBack } from '../../../hooks/useHistoryBack';\nimport useConnectionStatus from '../../../hooks/useConnectionStatus';\n\nimport DropdownMenu from '../../ui/DropdownMenu';\nimport MenuItem from '../../ui/MenuItem';\nimport Button from '../../ui/Button';\nimport SearchInput from '../../ui/SearchInput';\nimport PickerSelectedItem from '../../common/PickerSelectedItem';\nimport Switcher from '../../ui/Switcher';\nimport ShowTransition from '../../ui/ShowTransition';\nimport ConnectionStatusOverlay from '../ConnectionStatusOverlay';\n\nimport './LeftMainHeader.scss';\n\ntype OwnProps = {\n content: LeftColumnContent;\n contactsFilter: string;\n shouldSkipTransition?: boolean;\n onSearchQuery: (query: string) => void;\n onSelectSettings: () => void;\n onSelectContacts: () => void;\n onSelectArchived: () => void;\n onReset: () => void;\n};\n\ntype StateProps =\n {\n searchQuery?: string;\n isLoading: boolean;\n currentUserId?: string;\n globalSearchChatId?: string;\n searchDate?: number;\n theme: ISettings['theme'];\n animationLevel: 0 | 1 | 2;\n chatsById?: Record;\n isMessageListOpen: boolean;\n isConnectionStatusMinimized: ISettings['isConnectionStatusMinimized'];\n areChatsLoaded?: boolean;\n }\n & Pick;\n\nconst ANIMATION_LEVEL_OPTIONS = [0, 1, 2];\n\nconst PRODUCTION_HOSTNAME = 'web.telegram.org';\nconst LEGACY_VERSION_URL = 'https://web.telegram.org/?legacy=1';\nconst WEBK_VERSION_URL = 'https://web.telegram.org/k/';\n\nconst LeftMainHeader: FC = ({\n content,\n contactsFilter,\n onSearchQuery,\n onSelectSettings,\n onSelectContacts,\n onSelectArchived,\n onReset,\n searchQuery,\n isLoading,\n shouldSkipTransition,\n currentUserId,\n globalSearchChatId,\n searchDate,\n theme,\n animationLevel,\n chatsById,\n connectionState,\n isSyncing,\n isMessageListOpen,\n isConnectionStatusMinimized,\n areChatsLoaded,\n}) => {\n const {\n openChat,\n openTipsChat,\n setGlobalSearchDate,\n setSettingOption,\n setGlobalSearchChatId,\n } = getActions();\n\n const lang = useLang();\n const hasMenu = content === LeftColumnContent.ChatList;\n const clearedDateSearchParam = { date: undefined };\n const clearedChatSearchParam = { id: undefined };\n const selectedSearchDate = useMemo(() => {\n return searchDate\n ? formatDateToString(new Date(searchDate * 1000))\n : undefined;\n }, [searchDate]);\n const archivedUnreadChatsCount = useMemo(() => {\n if (!hasMenu || !chatsById) {\n return 0;\n }\n\n return Object.values(chatsById).reduce((total, chat) => {\n if (!isChatArchived(chat)) {\n return total;\n }\n\n return chat.unreadCount ? total + 1 : total;\n }, 0);\n }, [hasMenu, chatsById]);\n\n const { connectionStatus, connectionStatusText, connectionStatusPosition } = useConnectionStatus(\n lang, connectionState, isSyncing, isMessageListOpen, isConnectionStatusMinimized, !areChatsLoaded,\n );\n\n const withOtherVersions = window.location.hostname === PRODUCTION_HOSTNAME;\n\n const MainButton: FC<{ onTrigger: () => void; isOpen?: boolean }> = useMemo(() => {\n return ({ onTrigger, isOpen }) => (\n onReset()}\n ariaLabel={hasMenu ? lang('AccDescrOpenMenu2') : 'Return to chat list'}\n >\n
\n \n );\n }, [hasMenu, lang, onReset, shouldSkipTransition]);\n\n const handleSearchFocus = useCallback(() => {\n if (!searchQuery) {\n onSearchQuery('');\n }\n }, [searchQuery, onSearchQuery]);\n\n const toggleConnectionStatus = useCallback(() => {\n setSettingOption({ isConnectionStatusMinimized: !isConnectionStatusMinimized });\n }, [isConnectionStatusMinimized, setSettingOption]);\n\n const handleSelectSaved = useCallback(() => {\n openChat({ id: currentUserId, shouldReplaceHistory: true });\n }, [currentUserId, openChat]);\n\n const handleDarkModeToggle = useCallback((e: React.SyntheticEvent) => {\n e.stopPropagation();\n const newTheme = theme === 'light' ? 'dark' : 'light';\n\n setSettingOption({ theme: newTheme });\n setSettingOption({ shouldUseSystemTheme: false });\n switchTheme(newTheme, animationLevel === ANIMATION_LEVEL_MAX);\n }, [animationLevel, setSettingOption, theme]);\n\n const handleAnimationLevelChange = useCallback((e: React.SyntheticEvent) => {\n e.stopPropagation();\n\n const newLevel = animationLevel === 0 ? 2 : 0;\n ANIMATION_LEVEL_OPTIONS.forEach((_, i) => {\n document.body.classList.toggle(`animation-level-${i}`, newLevel === i);\n });\n\n setSettingOption({ animationLevel: newLevel });\n }, [animationLevel, setSettingOption]);\n\n const handleSwitchToWebK = useCallback(() => {\n setPermanentWebVersion('K');\n clearWebsync();\n disableHistoryBack();\n }, []);\n\n const handleOpenTipsChat = useCallback(() => {\n openTipsChat({ langCode: lang.code });\n }, [lang.code, openTipsChat]);\n\n const isSearchFocused = (\n Boolean(globalSearchChatId)\n || content === LeftColumnContent.GlobalSearch\n || content === LeftColumnContent.Contacts\n );\n\n const searchInputPlaceholder = content === LeftColumnContent.Contacts\n ? lang('SearchFriends')\n : lang('Search');\n\n return (\n
\n
\n \n \n {lang('SavedMessages')}\n \n \n {lang('ArchivedChats')}\n {archivedUnreadChatsCount > 0 && (\n
{archivedUnreadChatsCount}
\n )}\n \n \n {lang('Contacts')}\n \n \n {lang('Settings')}\n \n \n {lang('lng_menu_night_mode')}\n \n \n \n {lang('Appearance.Animations').toLowerCase()}\n 0}\n />\n \n \n {lang('TelegramFeatures')}\n \n \n Report Bug\n \n {withOtherVersions && (\n <>\n \n Switch to K Version\n \n \n Switch to Old Version\n \n \n )}\n \n \n {selectedSearchDate && (\n \n )}\n {globalSearchChatId && (\n \n )}\n \n \n \n \n
\n
\n );\n};\n\nexport default memo(withGlobal(\n (global): StateProps => {\n const {\n query: searchQuery, fetchingStatus, chatId, date,\n } = global.globalSearch;\n const { currentUserId, connectionState, isSyncing } = global;\n const { byId: chatsById } = global.chats;\n const { isConnectionStatusMinimized, animationLevel } = global.settings.byKey;\n\n return {\n searchQuery,\n isLoading: fetchingStatus ? Boolean(fetchingStatus.chats || fetchingStatus.messages) : false,\n currentUserId,\n chatsById,\n globalSearchChatId: chatId,\n searchDate: date,\n theme: selectTheme(global),\n animationLevel,\n connectionState,\n isSyncing,\n isMessageListOpen: Boolean(selectCurrentMessageList(global)),\n isConnectionStatusMinimized,\n areChatsLoaded: Boolean(global.chats.listIds.active),\n };\n },\n)(LeftMainHeader));\n","import React, {\n FC, memo, useCallback, useEffect, useMemo, useRef,\n} from '../../../lib/teact/teact';\nimport { getActions, withGlobal } from '../../../global';\n\nimport { ApiChatFolder } from '../../../api/types';\nimport { SettingsScreens } from '../../../types';\nimport { FolderEditDispatch } from '../../../hooks/reducers/useFoldersReducer';\n\nimport { ALL_FOLDER_ID } from '../../../config';\nimport { IS_TOUCH_ENV } from '../../../util/environment';\nimport { captureEvents, SwipeDirection } from '../../../util/captureEvents';\nimport buildClassName from '../../../util/buildClassName';\nimport captureEscKeyListener from '../../../util/captureEscKeyListener';\nimport useShowTransition from '../../../hooks/useShowTransition';\nimport useLang from '../../../hooks/useLang';\nimport useHistoryBack from '../../../hooks/useHistoryBack';\n\nimport Transition from '../../ui/Transition';\nimport TabList from '../../ui/TabList';\nimport ChatList from './ChatList';\nimport { useFolderManagerForUnreadCounters } from '../../../hooks/useFolderManager';\n\ntype OwnProps = {\n onScreenSelect: (screen: SettingsScreens) => void;\n foldersDispatch: FolderEditDispatch;\n};\n\ntype StateProps = {\n chatFoldersById: Record;\n orderedFolderIds?: number[];\n activeChatFolder: number;\n currentUserId?: string;\n lastSyncTime?: number;\n shouldSkipHistoryAnimations?: boolean;\n};\n\nconst SAVED_MESSAGES_HOTKEY = '0';\n\nconst ChatFolders: FC = ({\n foldersDispatch,\n onScreenSelect,\n chatFoldersById,\n orderedFolderIds,\n activeChatFolder,\n currentUserId,\n lastSyncTime,\n shouldSkipHistoryAnimations,\n}) => {\n const {\n loadChatFolders,\n setActiveChatFolder,\n openChat,\n } = getActions();\n\n // eslint-disable-next-line no-null/no-null\n const transitionRef = useRef(null);\n\n const lang = useLang();\n\n useEffect(() => {\n if (lastSyncTime) {\n loadChatFolders();\n }\n }, [lastSyncTime, loadChatFolders]);\n\n const displayedFolders = useMemo(() => {\n return orderedFolderIds\n ? orderedFolderIds.map((id) => chatFoldersById[id] || {}).filter(Boolean)\n : undefined;\n }, [chatFoldersById, orderedFolderIds]);\n\n const folderCountersById = useFolderManagerForUnreadCounters();\n const folderTabs = useMemo(() => {\n if (!displayedFolders || !displayedFolders.length) {\n return undefined;\n }\n\n return [\n {\n id: ALL_FOLDER_ID,\n title: lang.code === 'en' ? 'All' : lang('FilterAllChats'),\n },\n ...displayedFolders.map(({ id, title }) => ({\n id,\n title,\n badgeCount: folderCountersById[id]?.chatsCount,\n isBadgeActive: Boolean(folderCountersById[id]?.notificationsCount),\n })),\n ];\n }, [displayedFolders, folderCountersById, lang]);\n\n const handleSwitchTab = useCallback((index: number) => {\n setActiveChatFolder(index, { forceOnHeavyAnimation: true });\n }, [setActiveChatFolder]);\n\n // Prevent `activeTab` pointing at non-existing folder after update\n useEffect(() => {\n if (!folderTabs || !folderTabs.length) {\n return;\n }\n\n if (activeChatFolder >= folderTabs.length) {\n setActiveChatFolder(0);\n }\n }, [activeChatFolder, folderTabs, setActiveChatFolder]);\n\n useEffect(() => {\n if (!transitionRef.current || !IS_TOUCH_ENV || !folderTabs || !folderTabs.length) {\n return undefined;\n }\n\n return captureEvents(transitionRef.current, {\n selectorToPreventScroll: '.chat-list',\n onSwipe: ((e, direction) => {\n if (direction === SwipeDirection.Left) {\n setActiveChatFolder(Math.min(activeChatFolder + 1, folderTabs.length - 1), { forceOnHeavyAnimation: true });\n return true;\n } else if (direction === SwipeDirection.Right) {\n setActiveChatFolder(Math.max(0, activeChatFolder - 1), { forceOnHeavyAnimation: true });\n return true;\n }\n\n return false;\n }),\n });\n }, [activeChatFolder, folderTabs, setActiveChatFolder]);\n\n const isNotInAllTabRef = useRef();\n isNotInAllTabRef.current = activeChatFolder !== 0;\n useEffect(() => (isNotInAllTabRef.current ? captureEscKeyListener(() => {\n if (isNotInAllTabRef.current) {\n setActiveChatFolder(0);\n }\n }) : undefined), [activeChatFolder, setActiveChatFolder]);\n\n useHistoryBack(activeChatFolder !== 0, () => setActiveChatFolder(0, { forceOnHeavyAnimation: true }));\n\n useEffect(() => {\n const handleKeyDown = (e: KeyboardEvent) => {\n if (e.ctrlKey && e.shiftKey && e.code.startsWith('Digit') && folderTabs) {\n const [, digit] = e.code.match(/Digit(\\d)/) || [];\n if (!digit) return;\n\n if (digit === SAVED_MESSAGES_HOTKEY) {\n openChat({ id: currentUserId, shouldReplaceHistory: true });\n return;\n }\n\n const folder = Number(digit) - 1;\n if (folder > folderTabs.length - 1) return;\n\n setActiveChatFolder(folder, { forceOnHeavyAnimation: true });\n e.preventDefault();\n }\n };\n\n document.addEventListener('keydown', handleKeyDown, true);\n\n return () => {\n document.removeEventListener('keydown', handleKeyDown, true);\n };\n });\n\n const {\n shouldRender: shouldRenderPlaceholder, transitionClassNames,\n } = useShowTransition(!orderedFolderIds, undefined, true);\n\n function renderCurrentTab(isActive: boolean) {\n const activeFolder = Object.values(chatFoldersById)\n .find(({ id }) => id === folderTabs![activeChatFolder].id);\n\n if (!activeFolder || activeChatFolder === 0) {\n return (\n \n );\n }\n\n return (\n \n );\n }\n\n return (\n
\n {folderTabs?.length ? (\n \n ) : shouldRenderPlaceholder ? (\n
\n ) : undefined}\n \n {renderCurrentTab}\n \n
\n );\n};\n\nexport default memo(withGlobal(\n (global): StateProps => {\n const {\n chatFolders: {\n byId: chatFoldersById,\n orderedIds: orderedFolderIds,\n activeChatFolder,\n },\n currentUserId,\n lastSyncTime,\n shouldSkipHistoryAnimations,\n } = global;\n\n return {\n chatFoldersById,\n orderedFolderIds,\n activeChatFolder,\n currentUserId,\n lastSyncTime,\n shouldSkipHistoryAnimations,\n };\n },\n)(ChatFolders));\n","import React, { FC, memo } from '../../../lib/teact/teact';\nimport { Bundles } from '../../../util/moduleLoader';\nimport { OwnProps } from './LeftSearch';\n\nimport useModuleLoader from '../../../hooks/useModuleLoader';\nimport Loading from '../../ui/Loading';\n\nconst LeftSearchAsync: FC = (props) => {\n const LeftSearch = useModuleLoader(Bundles.Extra, 'LeftSearch');\n\n // eslint-disable-next-line react/jsx-props-no-spreading\n return LeftSearch ? : ;\n};\n\nexport default memo(LeftSearchAsync);\n","import React, { FC, memo } from '../../../lib/teact/teact';\nimport { Bundles } from '../../../util/moduleLoader';\nimport { OwnProps } from './ContactList';\n\nimport useModuleLoader from '../../../hooks/useModuleLoader';\nimport Loading from '../../ui/Loading';\n\nconst ContactListAsync: FC = (props) => {\n const ContactList = useModuleLoader(Bundles.Extra, 'ContactList');\n\n // eslint-disable-next-line react/jsx-props-no-spreading\n return ContactList ? : ;\n};\n\nexport default memo(ContactListAsync);\n","import React, {\n FC, useState, useEffect, memo, useCallback,\n} from '../../lib/teact/teact';\n\nimport buildClassName from '../../util/buildClassName';\nimport useLang from '../../hooks/useLang';\n\nimport Button from '../ui/Button';\nimport Menu from '../ui/Menu';\nimport MenuItem from '../ui/MenuItem';\n\nimport './NewChatButton.scss';\n\ntype OwnProps = {\n isShown: boolean;\n onNewPrivateChat: () => void;\n onNewChannel: () => void;\n onNewGroup: () => void;\n};\n\nconst NewChatButton: FC = ({\n isShown,\n onNewPrivateChat,\n onNewChannel,\n onNewGroup,\n}) => {\n const [isMenuOpen, setIsMenuOpen] = useState(false);\n\n useEffect(() => {\n if (!isShown) {\n setIsMenuOpen(false);\n }\n }, [isShown]);\n\n const lang = useLang();\n\n const fabClassName = buildClassName(\n 'NewChatButton',\n isShown && 'revealed',\n isMenuOpen && 'menu-is-open',\n );\n\n const toggleIsMenuOpen = useCallback(() => {\n setIsMenuOpen(!isMenuOpen);\n }, [isMenuOpen]);\n\n const handleClose = useCallback(() => {\n setIsMenuOpen(false);\n }, []);\n\n return (\n
\n \n \n \n \n \n {lang('NewChannel')}\n {lang('NewGroup')}\n {lang('NewMessageTitle')}\n \n
\n );\n};\n\nexport default memo(NewChatButton);\n","import React, {\n FC, memo, useCallback, useEffect, useRef, useState,\n} from '../../../lib/teact/teact';\n\nimport { LeftColumnContent, SettingsScreens } from '../../../types';\nimport { FolderEditDispatch } from '../../../hooks/reducers/useFoldersReducer';\n\nimport { IS_TOUCH_ENV } from '../../../util/environment';\nimport buildClassName from '../../../util/buildClassName';\nimport useFlag from '../../../hooks/useFlag';\nimport useShowTransition from '../../../hooks/useShowTransition';\nimport useLang from '../../../hooks/useLang';\n\nimport Transition from '../../ui/Transition';\nimport LeftMainHeader from './LeftMainHeader';\nimport ChatFolders from './ChatFolders';\nimport LeftSearch from '../search/LeftSearch.async';\nimport ContactList from './ContactList.async';\nimport NewChatButton from '../NewChatButton';\nimport Button from '../../ui/Button';\n\nimport './LeftMain.scss';\n\ntype OwnProps = {\n content: LeftColumnContent;\n searchQuery?: string;\n searchDate?: number;\n contactsFilter: string;\n shouldSkipTransition?: boolean;\n foldersDispatch: FolderEditDispatch;\n onSearchQuery: (query: string) => void;\n onContentChange: (content: LeftColumnContent) => void;\n onScreenSelect: (screen: SettingsScreens) => void;\n onReset: () => void;\n};\n\nconst TRANSITION_RENDER_COUNT = Object.keys(LeftColumnContent).length / 2;\nconst BUTTON_CLOSE_DELAY_MS = 250;\nconst APP_OUTDATED_TIMEOUT = 3 * 24 * 60 * 60 * 1000; // 3 days\n\nlet closeTimeout: number | undefined;\n\nconst LeftMain: FC = ({\n content,\n searchQuery,\n searchDate,\n contactsFilter,\n shouldSkipTransition,\n foldersDispatch,\n onSearchQuery,\n onContentChange,\n onScreenSelect,\n onReset,\n}) => {\n const [isNewChatButtonShown, setIsNewChatButtonShown] = useState(IS_TOUCH_ENV);\n\n const isMouseInside = useRef(false);\n\n const handleSelectSettings = useCallback(() => {\n onContentChange(LeftColumnContent.Settings);\n }, [onContentChange]);\n\n const handleSelectContacts = useCallback(() => {\n onContentChange(LeftColumnContent.Contacts);\n }, [onContentChange]);\n\n const handleSelectNewChannel = useCallback(() => {\n onContentChange(LeftColumnContent.NewChannelStep1);\n }, [onContentChange]);\n\n const handleSelectNewGroup = useCallback(() => {\n onContentChange(LeftColumnContent.NewGroupStep1);\n }, [onContentChange]);\n\n const handleSelectArchived = useCallback(() => {\n onContentChange(LeftColumnContent.Archived);\n }, [onContentChange]);\n\n const handleMouseEnter = useCallback(() => {\n if (content !== LeftColumnContent.ChatList) {\n return;\n }\n isMouseInside.current = true;\n setIsNewChatButtonShown(true);\n }, [content]);\n\n const handleMouseLeave = useCallback(() => {\n isMouseInside.current = false;\n\n if (closeTimeout) {\n clearTimeout(closeTimeout);\n closeTimeout = undefined;\n }\n\n closeTimeout = window.setTimeout(() => {\n if (!isMouseInside.current) {\n setIsNewChatButtonShown(false);\n }\n }, BUTTON_CLOSE_DELAY_MS);\n }, []);\n\n useEffect(() => {\n let autoCloseTimeout: number | undefined;\n if (content !== LeftColumnContent.ChatList) {\n autoCloseTimeout = window.setTimeout(() => {\n setIsNewChatButtonShown(false);\n }, BUTTON_CLOSE_DELAY_MS);\n } else if (isMouseInside.current || IS_TOUCH_ENV) {\n setIsNewChatButtonShown(true);\n }\n\n return () => {\n if (autoCloseTimeout) {\n clearTimeout(autoCloseTimeout);\n autoCloseTimeout = undefined;\n }\n };\n }, [content]);\n\n const [shouldRenderUpdateButton, updateButtonClassNames, handleUpdateClick] = useAppOutdatedCheck();\n\n const lang = useLang();\n\n return (\n \n \n \n {(isActive) => {\n switch (content) {\n case LeftColumnContent.ChatList:\n return ;\n case LeftColumnContent.GlobalSearch:\n return (\n \n );\n case LeftColumnContent.Contacts:\n return ;\n default:\n return undefined;\n }\n }}\n \n {shouldRenderUpdateButton && (\n \n {lang('lng_update_telegram')}\n \n )}\n \n
\n );\n};\n\nfunction useAppOutdatedCheck() {\n const [isAppOutdated, markIsAppOutdated] = useFlag(false);\n\n useEffect(() => {\n const timeout = window.setTimeout(markIsAppOutdated, APP_OUTDATED_TIMEOUT);\n\n return () => {\n clearTimeout(timeout);\n };\n }, [markIsAppOutdated]);\n\n const { shouldRender, transitionClassNames } = useShowTransition(isAppOutdated);\n\n const handleUpdateClick = () => {\n window.location.reload();\n };\n\n return [shouldRender, transitionClassNames, handleUpdateClick] as const;\n}\n\nexport default memo(LeftMain);\n","import React, { FC, memo } from '../../../lib/teact/teact';\nimport { Bundles } from '../../../util/moduleLoader';\n\nimport { OwnProps } from './Settings';\n\nimport useModuleLoader from '../../../hooks/useModuleLoader';\nimport Loading from '../../ui/Loading';\n\nconst SettingsAsync: FC = (props) => {\n const Settings = useModuleLoader(Bundles.Extra, 'Settings');\n\n // eslint-disable-next-line react/jsx-props-no-spreading\n return Settings ? : ;\n};\n\nexport default memo(SettingsAsync);\n","import React, { FC, memo } from '../../../lib/teact/teact';\nimport { Bundles } from '../../../util/moduleLoader';\n\nimport { OwnProps } from './NewChat';\n\nimport useModuleLoader from '../../../hooks/useModuleLoader';\nimport Loading from '../../ui/Loading';\n\nconst NewChatAsync: FC = (props) => {\n const NewChat = useModuleLoader(Bundles.Extra, 'NewChat');\n\n // eslint-disable-next-line react/jsx-props-no-spreading\n return NewChat ? : ;\n};\n\nexport default memo(NewChatAsync);\n","import React, { FC, memo } from '../../lib/teact/teact';\nimport { OwnProps } from './ArchivedChats';\nimport { Bundles } from '../../util/moduleLoader';\n\nimport useModuleLoader from '../../hooks/useModuleLoader';\nimport Loading from '../ui/Loading';\n\nconst ArchivedChatsAsync: FC = (props) => {\n const ArchivedChats = useModuleLoader(Bundles.Extra, 'ArchivedChats');\n\n // eslint-disable-next-line react/jsx-props-no-spreading\n return ArchivedChats ? : ;\n};\n\nexport default memo(ArchivedChatsAsync);\n","import React, {\n FC, memo, useCallback, useEffect, useRef, useState,\n} from '../../lib/teact/teact';\nimport { getActions, withGlobal } from '../../global';\n\nimport { LeftColumnContent, SettingsScreens } from '../../types';\n\nimport { IS_MAC_OS, LAYERS_ANIMATION_NAME } from '../../util/environment';\nimport captureEscKeyListener from '../../util/captureEscKeyListener';\nimport getKeyFromEvent from '../../util/getKeyFromEvent';\nimport useFoldersReducer from '../../hooks/reducers/useFoldersReducer';\nimport { useResize } from '../../hooks/useResize';\n\nimport Transition from '../ui/Transition';\nimport LeftMain from './main/LeftMain';\nimport Settings from './settings/Settings.async';\nimport NewChat from './newChat/NewChat.async';\nimport ArchivedChats from './ArchivedChats.async';\n\nimport './LeftColumn.scss';\n\ntype StateProps = {\n searchQuery?: string;\n searchDate?: number;\n activeChatFolder: number;\n shouldSkipHistoryAnimations?: boolean;\n leftColumnWidth?: number;\n};\n\nenum ContentType {\n Main,\n // eslint-disable-next-line @typescript-eslint/no-shadow\n Settings,\n Archived,\n // eslint-disable-next-line no-shadow\n NewGroup,\n // eslint-disable-next-line no-shadow\n NewChannel,\n}\n\nconst RENDER_COUNT = Object.keys(ContentType).length / 2;\nconst RESET_TRANSITION_DELAY_MS = 250;\n\nconst LeftColumn: FC = ({\n searchQuery,\n searchDate,\n activeChatFolder,\n shouldSkipHistoryAnimations,\n leftColumnWidth,\n}) => {\n const {\n setGlobalSearchQuery,\n setGlobalSearchChatId,\n resetChatCreation,\n setGlobalSearchDate,\n loadPasswordInfo,\n clearTwoFaError,\n setLeftColumnWidth,\n resetLeftColumnWidth,\n } = getActions();\n\n // eslint-disable-next-line no-null/no-null\n const resizeRef = useRef(null);\n const [content, setContent] = useState(LeftColumnContent.ChatList);\n const [settingsScreen, setSettingsScreen] = useState(SettingsScreens.Main);\n const [contactsFilter, setContactsFilter] = useState('');\n const [foldersState, foldersDispatch] = useFoldersReducer();\n\n // Used to reset child components in background.\n const [lastResetTime, setLastResetTime] = useState(0);\n\n let contentType: ContentType = ContentType.Main;\n switch (content) {\n case LeftColumnContent.Archived:\n contentType = ContentType.Archived;\n break;\n case LeftColumnContent.Settings:\n contentType = ContentType.Settings;\n break;\n case LeftColumnContent.NewChannelStep1:\n case LeftColumnContent.NewChannelStep2:\n contentType = ContentType.NewChannel;\n break;\n case LeftColumnContent.NewGroupStep1:\n case LeftColumnContent.NewGroupStep2:\n contentType = ContentType.NewGroup;\n break;\n }\n\n const handleReset = useCallback((forceReturnToChatList?: boolean) => {\n if (content === LeftColumnContent.NewGroupStep2\n && !forceReturnToChatList\n ) {\n setContent(LeftColumnContent.NewGroupStep1);\n return;\n }\n\n if (content === LeftColumnContent.NewChannelStep2\n && !forceReturnToChatList\n ) {\n setContent(LeftColumnContent.NewChannelStep1);\n return;\n }\n\n if (content === LeftColumnContent.NewGroupStep1) {\n const pickerSearchInput = document.getElementById('new-group-picker-search');\n if (pickerSearchInput) {\n pickerSearchInput.blur();\n }\n }\n\n if (content === LeftColumnContent.Settings) {\n switch (settingsScreen) {\n case SettingsScreens.EditProfile:\n case SettingsScreens.Folders:\n case SettingsScreens.General:\n case SettingsScreens.Notifications:\n case SettingsScreens.DataStorage:\n case SettingsScreens.Privacy:\n case SettingsScreens.Language:\n setSettingsScreen(SettingsScreens.Main);\n return;\n\n case SettingsScreens.GeneralChatBackground:\n case SettingsScreens.QuickReaction:\n setSettingsScreen(SettingsScreens.General);\n return;\n case SettingsScreens.GeneralChatBackgroundColor:\n setSettingsScreen(SettingsScreens.GeneralChatBackground);\n return;\n\n case SettingsScreens.PrivacyPhoneNumber:\n case SettingsScreens.PrivacyLastSeen:\n case SettingsScreens.PrivacyProfilePhoto:\n case SettingsScreens.PrivacyForwarding:\n case SettingsScreens.PrivacyGroupChats:\n case SettingsScreens.PrivacyActiveSessions:\n case SettingsScreens.PrivacyBlockedUsers:\n case SettingsScreens.TwoFaDisabled:\n case SettingsScreens.TwoFaEnabled:\n case SettingsScreens.TwoFaCongratulations:\n setSettingsScreen(SettingsScreens.Privacy);\n return;\n case SettingsScreens.PrivacyPhoneNumberAllowedContacts:\n case SettingsScreens.PrivacyPhoneNumberDeniedContacts:\n setSettingsScreen(SettingsScreens.PrivacyPhoneNumber);\n return;\n case SettingsScreens.PrivacyLastSeenAllowedContacts:\n case SettingsScreens.PrivacyLastSeenDeniedContacts:\n setSettingsScreen(SettingsScreens.PrivacyLastSeen);\n return;\n case SettingsScreens.PrivacyProfilePhotoAllowedContacts:\n case SettingsScreens.PrivacyProfilePhotoDeniedContacts:\n setSettingsScreen(SettingsScreens.PrivacyProfilePhoto);\n return;\n case SettingsScreens.PrivacyForwardingAllowedContacts:\n case SettingsScreens.PrivacyForwardingDeniedContacts:\n setSettingsScreen(SettingsScreens.PrivacyForwarding);\n return;\n case SettingsScreens.PrivacyGroupChatsAllowedContacts:\n case SettingsScreens.PrivacyGroupChatsDeniedContacts:\n setSettingsScreen(SettingsScreens.PrivacyGroupChats);\n return;\n case SettingsScreens.TwoFaNewPassword:\n setSettingsScreen(SettingsScreens.TwoFaDisabled);\n return;\n case SettingsScreens.TwoFaNewPasswordConfirm:\n setSettingsScreen(SettingsScreens.TwoFaNewPassword);\n return;\n case SettingsScreens.TwoFaNewPasswordHint:\n setSettingsScreen(SettingsScreens.TwoFaNewPasswordConfirm);\n return;\n case SettingsScreens.TwoFaNewPasswordEmail:\n setSettingsScreen(SettingsScreens.TwoFaNewPasswordHint);\n return;\n case SettingsScreens.TwoFaNewPasswordEmailCode:\n setSettingsScreen(SettingsScreens.TwoFaNewPasswordEmail);\n return;\n case SettingsScreens.TwoFaChangePasswordCurrent:\n case SettingsScreens.TwoFaTurnOff:\n case SettingsScreens.TwoFaRecoveryEmailCurrentPassword:\n setSettingsScreen(SettingsScreens.TwoFaEnabled);\n return;\n case SettingsScreens.TwoFaChangePasswordNew:\n setSettingsScreen(SettingsScreens.TwoFaChangePasswordCurrent);\n return;\n case SettingsScreens.TwoFaChangePasswordConfirm:\n setSettingsScreen(SettingsScreens.TwoFaChangePasswordNew);\n return;\n case SettingsScreens.TwoFaChangePasswordHint:\n setSettingsScreen(SettingsScreens.TwoFaChangePasswordConfirm);\n return;\n case SettingsScreens.TwoFaRecoveryEmail:\n setSettingsScreen(SettingsScreens.TwoFaRecoveryEmailCurrentPassword);\n return;\n case SettingsScreens.TwoFaRecoveryEmailCode:\n setSettingsScreen(SettingsScreens.TwoFaRecoveryEmail);\n return;\n\n case SettingsScreens.FoldersCreateFolder:\n case SettingsScreens.FoldersEditFolder:\n setSettingsScreen(SettingsScreens.Folders);\n return;\n\n case SettingsScreens.FoldersIncludedChatsFromChatList:\n case SettingsScreens.FoldersExcludedChatsFromChatList:\n setSettingsScreen(SettingsScreens.FoldersEditFolderFromChatList);\n return;\n\n case SettingsScreens.FoldersEditFolderFromChatList:\n setContent(LeftColumnContent.ChatList);\n setSettingsScreen(SettingsScreens.Main);\n return;\n default:\n break;\n }\n }\n\n if (content === LeftColumnContent.ChatList && activeChatFolder === 0) {\n setContent(LeftColumnContent.GlobalSearch);\n return;\n }\n\n setContent(LeftColumnContent.ChatList);\n setContactsFilter('');\n setGlobalSearchQuery({ query: '' });\n setGlobalSearchDate({ date: undefined });\n setGlobalSearchChatId({ id: undefined });\n resetChatCreation();\n setTimeout(() => {\n setLastResetTime(Date.now());\n }, RESET_TRANSITION_DELAY_MS);\n }, [\n content, activeChatFolder, settingsScreen, setGlobalSearchQuery, setGlobalSearchDate, setGlobalSearchChatId,\n resetChatCreation,\n ]);\n\n const handleSearchQuery = useCallback((query: string) => {\n if (content === LeftColumnContent.Contacts) {\n setContactsFilter(query);\n return;\n }\n\n setContent(LeftColumnContent.GlobalSearch);\n\n if (query !== searchQuery) {\n setGlobalSearchQuery({ query });\n }\n }, [content, searchQuery, setGlobalSearchQuery]);\n\n useEffect(\n () => (content !== LeftColumnContent.ChatList || activeChatFolder === 0\n ? captureEscKeyListener(() => handleReset())\n : undefined),\n [activeChatFolder, content, handleReset],\n );\n\n useEffect(() => {\n if (content === LeftColumnContent.GlobalSearch) {\n return undefined;\n }\n\n function handleKeyDown(e: KeyboardEvent) {\n if (((IS_MAC_OS && e.metaKey) || (!IS_MAC_OS && e.ctrlKey)) && e.shiftKey && getKeyFromEvent(e) === 'f') {\n e.preventDefault();\n setContent(LeftColumnContent.GlobalSearch);\n }\n }\n\n document.addEventListener('keydown', handleKeyDown, false);\n\n return () => {\n document.removeEventListener('keydown', handleKeyDown, false);\n };\n }, [content]);\n\n useEffect(() => {\n clearTwoFaError();\n\n if (settingsScreen === SettingsScreens.Privacy) {\n loadPasswordInfo();\n }\n }, [clearTwoFaError, loadPasswordInfo, settingsScreen]);\n\n const {\n initResize, resetResize, handleMouseUp,\n } = useResize(resizeRef, setLeftColumnWidth, resetLeftColumnWidth, leftColumnWidth);\n\n const handleSettingsScreenSelect = useCallback((screen: SettingsScreens) => {\n setContent(LeftColumnContent.Settings);\n setSettingsScreen(screen);\n }, []);\n\n return (\n \n \n {(isActive) => {\n switch (contentType) {\n case ContentType.Archived:\n return (\n \n );\n case ContentType.Settings:\n return (\n \n );\n case ContentType.NewChannel:\n return (\n \n );\n case ContentType.NewGroup:\n return (\n \n );\n default:\n return (\n \n );\n }\n }}\n \n \n
\n );\n};\n\nexport default memo(withGlobal(\n (global): StateProps => {\n const {\n globalSearch: {\n query,\n date,\n },\n chatFolders: {\n activeChatFolder,\n },\n shouldSkipHistoryAnimations,\n leftColumnWidth,\n } = global;\n return {\n searchQuery: query, searchDate: date, activeChatFolder, shouldSkipHistoryAnimations, leftColumnWidth,\n };\n },\n)(LeftColumn));\n","import { RefObject } from 'react';\nimport { useState, useEffect } from '../lib/teact/teact';\nimport useFlag from './useFlag';\n\nexport function useResize(\n elementRef: RefObject,\n onResize: (width: number) => void,\n onReset: NoneToVoidFunction,\n initialWidth?: number,\n) {\n const [isActive, markIsActive, unmarkIsActive] = useFlag();\n const [initialMouseX, setInitialMouseX] = useState();\n const [initialElementWidth, setInitialElementWidth] = useState();\n\n useEffect(() => {\n if (!elementRef.current || !initialWidth) {\n return;\n }\n\n elementRef.current.style.width = `${initialWidth}px`;\n }, [elementRef, initialWidth]);\n\n function handleMouseUp() {\n document.body.classList.remove('cursor-ew-resize');\n }\n\n function initResize(e: React.MouseEvent) {\n e.preventDefault();\n\n document.body.classList.add('cursor-ew-resize');\n\n setInitialMouseX(e.clientX);\n setInitialElementWidth(elementRef.current!.offsetWidth);\n markIsActive();\n }\n\n function resetResize(e: React.MouseEvent) {\n e.preventDefault();\n elementRef.current!.style.width = '';\n onReset();\n }\n\n useEffect(() => {\n if (!isActive) return undefined;\n\n const handleMouseMove = (e: MouseEvent) => {\n const newWidth = Math.ceil(initialElementWidth + e.clientX - initialMouseX);\n elementRef.current!.style.width = `${newWidth}px`;\n };\n\n function stopDrag() {\n cleanup();\n onResize(elementRef.current!.offsetWidth);\n }\n\n function cleanup() {\n handleMouseUp();\n document.removeEventListener('mousemove', handleMouseMove, false);\n document.removeEventListener('mouseup', stopDrag, false);\n document.removeEventListener('blur', stopDrag, false);\n unmarkIsActive();\n }\n\n document.addEventListener('mousemove', handleMouseMove, false);\n document.addEventListener('mouseup', stopDrag, false);\n document.addEventListener('blur', stopDrag, false);\n\n return cleanup;\n }, [initialElementWidth, initialMouseX, elementRef, onResize, isActive, unmarkIsActive]);\n\n return { initResize, resetResize, handleMouseUp };\n}\n","import { useEffect, useState } from '../lib/teact/teact';\n\nimport { ThemeKey } from '../types';\n\nimport { CUSTOM_BG_CACHE_NAME } from '../config';\nimport * as cacheApi from '../util/cacheApi';\nimport { preloadImage } from '../util/files';\n\nconst useCustomBackground = (theme: ThemeKey, settingValue?: string) => {\n const [value, setValue] = useState(settingValue);\n\n useEffect(() => {\n if (!settingValue) {\n return;\n }\n\n if (settingValue.startsWith('#')) {\n setValue(settingValue);\n } else {\n cacheApi.fetch(CUSTOM_BG_CACHE_NAME, theme, cacheApi.Type.Blob)\n .then((blob) => {\n const url = URL.createObjectURL(blob);\n preloadImage(url)\n .then(() => {\n setValue(`url(${url})`);\n });\n });\n }\n }, [settingValue, theme]);\n\n return settingValue ? value : undefined;\n};\n\nexport default useCustomBackground;\n","import { useEffect, useState } from '../lib/teact/teact';\n\nimport { throttle } from '../util/schedulers';\nimport windowSize from '../util/windowSize';\nimport { ApiDimensions } from '../api/types';\n\nconst THROTTLE = 250;\n\nconst useWindowSize = () => {\n const [size, setSize] = useState(windowSize.get());\n\n useEffect(() => {\n const handleResize = throttle(() => {\n setSize(windowSize.get());\n }, THROTTLE, false);\n\n window.addEventListener('resize', handleResize);\n\n return () => {\n window.removeEventListener('resize', handleResize);\n };\n }, []);\n\n return size;\n};\n\nexport default useWindowSize;\n","import React, { FC, memo } from '../../lib/teact/teact';\nimport { OwnProps } from './HeaderMenuContainer';\nimport { Bundles } from '../../util/moduleLoader';\n\nimport useModuleLoader from '../../hooks/useModuleLoader';\n\nconst HeaderMenuContainerAsync: FC = (props) => {\n const { isOpen } = props;\n const HeaderMenuContainer = useModuleLoader(Bundles.Extra, 'HeaderMenuContainer', !isOpen);\n\n // eslint-disable-next-line react/jsx-props-no-spreading\n return HeaderMenuContainer ? : undefined;\n};\n\nexport default memo(HeaderMenuContainerAsync);\n","import React, {\n FC,\n memo,\n useRef,\n useCallback,\n useState,\n useEffect,\n} from '../../lib/teact/teact';\nimport { getActions, withGlobal } from '../../global';\n\nimport { MessageListType } from '../../global/types';\nimport { MAIN_THREAD_ID } from '../../api/types';\nimport { IAnchorPosition, ManagementScreens } from '../../types';\n\nimport {\n ARE_CALLS_SUPPORTED, IS_MAC_OS, IS_PWA, IS_SINGLE_COLUMN_LAYOUT,\n} from '../../util/environment';\nimport getKeyFromEvent from '../../util/getKeyFromEvent';\nimport {\n isChatBasicGroup, isChatChannel, isChatSuperGroup, isUserId,\n} from '../../global/helpers';\nimport {\n selectChat,\n selectChatBot,\n selectIsUserBlocked,\n selectIsChatBotNotStarted,\n selectIsChatWithSelf,\n selectIsInSelectMode,\n selectIsRightColumnShown,\n} from '../../global/selectors';\nimport useLang from '../../hooks/useLang';\n\nimport Button from '../ui/Button';\nimport HeaderMenuContainer from './HeaderMenuContainer.async';\n\ninterface OwnProps {\n chatId: string;\n threadId: number;\n messageListType: MessageListType;\n canExpandActions: boolean;\n}\n\ninterface StateProps {\n noMenu?: boolean;\n isChannel?: boolean;\n isRightColumnShown?: boolean;\n canStartBot?: boolean;\n canRestartBot?: boolean;\n canSubscribe?: boolean;\n canSearch?: boolean;\n canCall?: boolean;\n canMute?: boolean;\n canViewStatistics?: boolean;\n canLeave?: boolean;\n canEnterVoiceChat?: boolean;\n canCreateVoiceChat?: boolean;\n pendingJoinRequests?: number;\n}\n\n// Chrome breaks layout when focusing input during transition\nconst SEARCH_FOCUS_DELAY_MS = 400;\n\nconst HeaderActions: FC = ({\n chatId,\n threadId,\n noMenu,\n isChannel,\n canStartBot,\n canRestartBot,\n canSubscribe,\n canSearch,\n canCall,\n canMute,\n canViewStatistics,\n canLeave,\n canEnterVoiceChat,\n canCreateVoiceChat,\n pendingJoinRequests,\n isRightColumnShown,\n canExpandActions,\n}) => {\n const {\n joinChannel,\n sendBotCommand,\n openLocalTextSearch,\n restartBot,\n openCallFallbackConfirm,\n requestNextManagementScreen,\n } = getActions();\n\n // eslint-disable-next-line no-null/no-null\n const menuButtonRef = useRef(null);\n const [isMenuOpen, setIsMenuOpen] = useState(false);\n const [menuPosition, setMenuPosition] = useState(undefined);\n\n const handleHeaderMenuOpen = useCallback(() => {\n setIsMenuOpen(true);\n const rect = menuButtonRef.current!.getBoundingClientRect();\n setMenuPosition({ x: rect.right, y: rect.bottom });\n }, []);\n\n const handleHeaderMenuClose = useCallback(() => {\n setIsMenuOpen(false);\n }, []);\n\n const handleHeaderMenuHide = useCallback(() => {\n setMenuPosition(undefined);\n }, []);\n\n const handleSubscribeClick = useCallback(() => {\n joinChannel({ chatId });\n }, [joinChannel, chatId]);\n\n const handleStartBot = useCallback(() => {\n sendBotCommand({ command: '/start' });\n }, [sendBotCommand]);\n\n const handleRestartBot = useCallback(() => {\n restartBot({ chatId });\n }, [chatId, restartBot]);\n\n const handleJoinRequestsClick = useCallback(() => {\n requestNextManagementScreen({ screen: ManagementScreens.JoinRequests });\n }, [requestNextManagementScreen]);\n\n const handleSearchClick = useCallback(() => {\n openLocalTextSearch();\n\n if (IS_SINGLE_COLUMN_LAYOUT) {\n // iOS requires synchronous focus on user event.\n const searchInput = document.querySelector('#MobileSearch input')!;\n searchInput.focus();\n } else {\n setTimeout(() => {\n const searchInput = document.querySelector('.RightHeader .SearchInput input');\n if (searchInput) {\n searchInput.focus();\n }\n }, SEARCH_FOCUS_DELAY_MS);\n }\n }, [openLocalTextSearch]);\n\n useEffect(() => {\n if (!canSearch) {\n return undefined;\n }\n\n function handleKeyDown(e: KeyboardEvent) {\n if (\n IS_PWA && ((IS_MAC_OS && e.metaKey) || (!IS_MAC_OS && e.ctrlKey)) && !e.shiftKey && getKeyFromEvent(e) === 'f'\n ) {\n e.preventDefault();\n handleSearchClick();\n }\n }\n\n document.addEventListener('keydown', handleKeyDown, false);\n\n return () => {\n document.removeEventListener('keydown', handleKeyDown, false);\n };\n }, [canSearch, handleSearchClick]);\n\n const lang = useLang();\n\n return (\n
\n {!IS_SINGLE_COLUMN_LAYOUT && (\n <>\n {canExpandActions && canSubscribe && (\n \n {lang(isChannel ? 'ProfileJoinChannel' : 'ProfileJoinGroup')}\n \n )}\n {canExpandActions && canStartBot && (\n \n {lang('BotStart')}\n \n )}\n {canExpandActions && canRestartBot && (\n \n {lang('BotRestart')}\n \n )}\n {canSearch && (\n \n \n \n )}\n {canCall && (\n \n \n \n )}\n \n )}\n {Boolean(pendingJoinRequests) && (\n \n \n
{pendingJoinRequests}
\n \n )}\n \n \n \n {menuPosition && (\n \n )}\n
\n );\n};\n\nexport default memo(withGlobal(\n (global, { chatId, threadId, messageListType }): StateProps => {\n const chat = selectChat(global, chatId);\n const isChannel = Boolean(chat && isChatChannel(chat));\n\n if (!chat || chat.isRestricted || selectIsInSelectMode(global)) {\n return {\n noMenu: true,\n };\n }\n\n const bot = selectChatBot(global, chatId);\n const isChatWithSelf = selectIsChatWithSelf(global, chatId);\n const isMainThread = messageListType === 'thread' && threadId === MAIN_THREAD_ID;\n const isDiscussionThread = messageListType === 'thread' && threadId !== MAIN_THREAD_ID;\n const isRightColumnShown = selectIsRightColumnShown(global);\n\n const canRestartBot = Boolean(bot && selectIsUserBlocked(global, bot.id));\n const canStartBot = !canRestartBot && Boolean(selectIsChatBotNotStarted(global, chatId));\n const canSubscribe = Boolean(\n isMainThread && (isChannel || isChatSuperGroup(chat)) && chat.isNotJoined,\n );\n const canSearch = isMainThread || isDiscussionThread;\n const canCall = ARE_CALLS_SUPPORTED && isUserId(chat.id) && !isChatWithSelf && !bot;\n const canMute = isMainThread && !isChatWithSelf && !canSubscribe;\n const canLeave = isMainThread && !canSubscribe;\n const canEnterVoiceChat = ARE_CALLS_SUPPORTED && chat.isCallActive;\n const canCreateVoiceChat = ARE_CALLS_SUPPORTED && !chat.isCallActive\n && (chat.adminRights?.manageCall || (chat.isCreator && isChatBasicGroup(chat)));\n const canViewStatistics = chat.fullInfo?.canViewStatistics;\n const pendingJoinRequests = chat.fullInfo?.requestsPending;\n\n return {\n noMenu: false,\n isChannel,\n isRightColumnShown,\n canStartBot,\n canRestartBot,\n canSubscribe,\n canSearch,\n canCall,\n canMute,\n canViewStatistics,\n canLeave,\n canEnterVoiceChat,\n canCreateVoiceChat,\n pendingJoinRequests,\n };\n },\n)(HeaderActions));\n","import { useLayoutEffect, useState } from '../lib/teact/teact';\n\nimport { ApiMessage } from '../api/types';\n\nimport { DEBUG } from '../config';\nimport { isWebpSupported } from '../util/environment';\nimport { EMPTY_IMAGE_DATA_URI, webpToPngBase64 } from '../util/webpToPng';\nimport { getMessageMediaThumbDataUri } from '../global/helpers';\n\nexport default function useWebpThumbnail(message?: ApiMessage) {\n const thumbDataUri = message && getMessageMediaThumbDataUri(message);\n const sticker = message?.content?.sticker;\n const shouldDecodeThumbnail = thumbDataUri && sticker && !isWebpSupported() && thumbDataUri.includes('image/webp');\n const [thumbnailDecoded, setThumbnailDecoded] = useState(EMPTY_IMAGE_DATA_URI);\n const messageId = message?.id;\n\n useLayoutEffect(() => {\n if (!shouldDecodeThumbnail) {\n return;\n }\n\n webpToPngBase64(`b64-${messageId}`, thumbDataUri!)\n .then(setThumbnailDecoded)\n .catch((err) => {\n if (DEBUG) {\n // eslint-disable-next-line no-console\n console.error(err);\n }\n });\n }, [messageId, shouldDecodeThumbnail, thumbDataUri]);\n\n return shouldDecodeThumbnail ? thumbnailDecoded : thumbDataUri;\n}\n","import React, {\n FC,\n useRef,\n useEffect,\n useMemo,\n memo,\n} from '../../lib/teact/teact';\n\nimport buildClassName from '../../util/buildClassName';\n\ntype OwnProps = {\n count: number;\n index: number;\n};\n\nconst BORDER_MASK_LEVEL = 4;\n\nconst PinnedMessageNavigation: FC = ({\n count, index,\n}) => {\n // eslint-disable-next-line no-null/no-null\n const containerRef = useRef(null);\n\n const markupParams = useMemo(() => {\n return calculateMarkup(count, index);\n }, [count, index]);\n\n useEffect(() => {\n if (!containerRef.current) {\n return;\n }\n\n const {\n trackHeight,\n trackTranslateY,\n markHeight,\n markTranslateY,\n clipPathId,\n clipPath,\n } = markupParams;\n\n const firstChild = containerRef.current.firstElementChild;\n if (containerRef?.current) {\n const currentElement = containerRef.current;\n const { style } = currentElement;\n style.height = `${trackHeight}px`;\n style.transform = `translateY(-${trackTranslateY}px)`;\n style.clipPath = `url(\"#${clipPathId}\")`;\n const svg = currentElement.querySelector('svg');\n const div = currentElement.querySelector('div');\n const defs = currentElement.querySelector('defs');\n if (!svg) {\n if (firstChild) {\n firstChild.innerHTML = ` ${clipPath} `;\n }\n }\n if (defs) {\n defs.innerHTML = clipPath;\n }\n if (div) {\n div.style.height = `${markHeight}px`;\n div.style.transform = `translateY(${markTranslateY}px)`;\n }\n }\n }, [markupParams]);\n\n if (count === 1) {\n return (\n
\n \n
\n );\n }\n\n const {\n trackHeight, trackTranslateY, markHeight, markTranslateY, clipPathId,\n } = markupParams;\n\n return (\n
BORDER_MASK_LEVEL && 'pinned-message-border-mask')}>\n \n \n \n
\n \n );\n};\n\nfunction calculateMarkup(count: number, index: number) {\n const reverseIndex = count - index - 1;\n const barHeight = getBarHeight(count);\n const markHeight = getMarkHeight(count, reverseIndex);\n const trackHeight = getTrackHeight(count, barHeight);\n\n const clipPathId = `clipPath${count}`;\n const clipPath = getClipPath(clipPathId, barHeight, count);\n\n const markTranslateY = getMarkTranslateY(reverseIndex, barHeight, count);\n const trackTranslateY = getTrackTranslateY(reverseIndex, count, barHeight, trackHeight);\n return {\n markHeight,\n clipPath,\n markTranslateY,\n trackTranslateY,\n trackHeight,\n clipPathId,\n };\n}\n\nfunction getBarHeight(count: number): number {\n let barHeight = 8;\n if (count === 1) {\n barHeight = 36;\n } else if (count === 2) {\n barHeight = 17;\n } else if (count === 3) {\n barHeight = 11;\n } else if (count === 4) {\n barHeight = 7.5;\n } else if (count > 3) {\n barHeight = 7.5;\n }\n\n return barHeight;\n}\n\nfunction getMarkHeight(count: number, index: number) {\n let barHeight = 36;\n if (count === 1) {\n barHeight = 36;\n } else if (count === 2) {\n barHeight = 17;\n } else if (count === 3) {\n barHeight = index === 1 ? 12 : 11;\n } else if (count === 4) {\n barHeight = 7.5;\n } else if (count > 3) {\n barHeight = 7.5;\n }\n\n return barHeight;\n}\n\nfunction getTrackHeight(count: number, barHeight: number) {\n return count <= 3 ? 36 : barHeight * count + 2 * (count - 1);\n}\n\nfunction getClipPath(id: string, barHeight: number, count: number) {\n const radius = 1;\n\n let d = '';\n if (count === 3) {\n d = drawRect(0, 0, 2, barHeight, radius)\n + drawRect(0, 12, 2, barHeight + 1, radius)\n + drawRect(0, 25, 2, barHeight, radius);\n } else {\n for (let i = 0; i < count; i++) {\n d += drawRect(0, (barHeight + 2) * i, 2, barHeight, radius);\n }\n }\n\n return (\n `\n \n `\n );\n}\n\nfunction drawRect(x: number, y: number, width: number, height: number, radius: number) {\n return `M${x},${y + radius}a${radius},${radius},0,0,1,\n ${width},0v${height - 2 * radius}a${radius},${radius},0,0,1,${-width},0Z`;\n}\n\nfunction getMarkTranslateY(index: number, barHeight: number, count: number) {\n if (count === 1) {\n return 0;\n } else if (count === 2) {\n return index === 0 ? 0 : barHeight + 2;\n }\n\n if (count === 3) {\n if (index === 0) {\n return 0;\n } else if (index === 1) {\n return 12;\n }\n\n return 25;\n } else {\n return (barHeight + 2) * index;\n }\n}\n\nfunction getTrackTranslateY(index: number, count: number, barHeight: number, trackHeight: number) {\n if (count <= 4) {\n return 0;\n }\n\n if (index <= 1) {\n return 0;\n } else if (index >= count - 2) {\n return trackHeight - 36;\n }\n\n return (barHeight + 4) / 2 + (index - 2) * (barHeight + 2);\n}\n\nexport default memo(PinnedMessageNavigation);\n","import React, { FC, memo, useCallback } from '../../lib/teact/teact';\n\nimport { ApiMessage } from '../../api/types';\n\nimport { getPictogramDimensions } from '../common/helpers/mediaDimensions';\nimport { getMessageMediaHash } from '../../global/helpers';\nimport useMedia from '../../hooks/useMedia';\nimport useWebpThumbnail from '../../hooks/useWebpThumbnail';\n\nimport ConfirmDialog from '../ui/ConfirmDialog';\nimport Button from '../ui/Button';\nimport RippleEffect from '../ui/RippleEffect';\nimport buildClassName from '../../util/buildClassName';\nimport useFlag from '../../hooks/useFlag';\nimport useLang from '../../hooks/useLang';\nimport { renderMessageSummary } from '../common/helpers/renderMessageText';\n\nimport PinnedMessageNavigation from './PinnedMessageNavigation';\n\ntype OwnProps = {\n message: ApiMessage;\n index: number;\n count: number;\n customTitle?: string;\n className?: string;\n onUnpinMessage?: (id: number) => void;\n onClick?: () => void;\n onAllPinnedClick?: () => void;\n};\n\nconst HeaderPinnedMessage: FC = ({\n message, count, index, customTitle, className, onUnpinMessage, onClick, onAllPinnedClick,\n}) => {\n const lang = useLang();\n const mediaThumbnail = useWebpThumbnail(message);\n const mediaBlobUrl = useMedia(getMessageMediaHash(message, 'pictogram'));\n\n const text = renderMessageSummary(lang, message, Boolean(mediaThumbnail));\n const [isUnpinDialogOpen, openUnpinDialog, closeUnpinDialog] = useFlag();\n\n const handleUnpinMessage = useCallback(() => {\n closeUnpinDialog();\n\n if (onUnpinMessage) {\n onUnpinMessage(message.id);\n }\n }, [closeUnpinDialog, onUnpinMessage, message.id]);\n\n return (\n
\n {count > 1 && (\n \n \n \n )}\n {onUnpinMessage && (\n \n \n \n )}\n \n
\n \n {mediaThumbnail && renderPictogram(mediaThumbnail, mediaBlobUrl)}\n
\n
\n {customTitle || `${lang('PinnedMessage')} ${index > 0 ? `#${count - index}` : ''}`}\n
\n

{text}

\n
\n\n \n
\n
\n );\n};\n\nfunction renderPictogram(thumbDataUri: string, blobUrl?: string) {\n const { width, height } = getPictogramDimensions();\n\n return (\n \"\"\n );\n}\n\nexport default memo(HeaderPinnedMessage);\n","export function scaleImage(image: string | Blob, ratio: number, outputType: string = 'image/png'): Promise {\n const url = image instanceof Blob ? URL.createObjectURL(image) : image;\n const img = new Image();\n return new Promise((resolve) => {\n img.onload = () => {\n scale(img, img.width * ratio, img.height * ratio, outputType)\n .then((blob) => {\n if (!blob) throw new Error('Image resize failed!');\n return URL.createObjectURL(blob);\n })\n .then(resolve)\n .finally(() => {\n if (image instanceof Blob) {\n URL.revokeObjectURL(url); // Revoke blob url that we created\n }\n });\n };\n img.src = url;\n });\n}\n\nexport function resizeImage(\n image: string | Blob, width: number, height: number, outputType: string = 'image/png',\n): Promise {\n const url = image instanceof Blob ? URL.createObjectURL(image) : image;\n const img = new Image();\n return new Promise((resolve) => {\n img.onload = () => {\n scale(img, width, height, outputType)\n .then((blob) => {\n if (!blob) throw new Error('Image resize failed!');\n return URL.createObjectURL(blob);\n })\n .then(resolve)\n .finally(() => {\n if (image instanceof Blob) {\n URL.revokeObjectURL(url); // Revoke blob url that we created\n }\n });\n };\n img.src = url;\n });\n}\n\nasync function scale(\n img: HTMLImageElement, width: number, height: number, outputType: string = 'image/png',\n): Promise {\n // Safari does not have built-in resize method with quality control\n if ('createImageBitmap' in window) {\n try {\n const bitmap = await window.createImageBitmap(img,\n { resizeWidth: width, resizeHeight: height, resizeQuality: 'high' });\n if (bitmap.height !== height || bitmap.width !== width) {\n throw new Error('Image bitmap resize not supported!'); // FF93 added support for options, but not resize\n }\n return await new Promise((res) => {\n const canvas = document.createElement('canvas');\n canvas.width = bitmap.width;\n canvas.height = bitmap.height;\n const ctx = canvas.getContext('bitmaprenderer');\n if (ctx) {\n ctx.transferFromImageBitmap(bitmap);\n } else {\n canvas.getContext('2d')!.drawImage(bitmap, 0, 0);\n }\n canvas.toBlob(res, outputType);\n });\n } catch (e) {\n // Fallback. Firefox below 93 does not recognize `createImageBitmap` with 2 parameters\n return steppedScale(img, width, height, undefined, outputType);\n }\n } else {\n return steppedScale(img, width, height, undefined, outputType);\n }\n}\n\nfunction steppedScale(\n img: HTMLImageElement, width: number, height: number, step: number = 0.5, outputType: string = 'image/png',\n): Promise {\n const canvas = document.createElement('canvas');\n const ctx = canvas.getContext('2d')!;\n const oc = document.createElement('canvas');\n const octx = oc.getContext('2d')!;\n\n canvas.width = width;\n canvas.height = height;\n\n if (img.width * step > width) { // For performance avoid unnecessary drawing\n const mul = 1 / step;\n let cur = {\n width: Math.floor(img.width * step),\n height: Math.floor(img.height * step),\n };\n\n oc.width = cur.width;\n oc.height = cur.height;\n\n octx.drawImage(img, 0, 0, cur.width, cur.height);\n\n while (cur.width * step > width) {\n cur = {\n width: Math.floor(cur.width * step),\n height: Math.floor(cur.height * step),\n };\n octx.drawImage(oc, 0, 0, cur.width * mul, cur.height * mul, 0, 0, cur.width, cur.height);\n }\n\n ctx.drawImage(oc, 0, 0, cur.width, cur.height, 0, 0, canvas.width, canvas.height);\n } else {\n ctx.drawImage(img, 0, 0, canvas.width, canvas.height);\n }\n\n return new Promise((resolve) => {\n canvas.toBlob(resolve, outputType);\n });\n}\n","import { useMemo } from '../lib/teact/teact';\n\nimport {\n ApiAudio, ApiChat, ApiMessage, ApiUser, ApiVoice,\n} from '../api/types';\n\nimport useMedia from './useMedia';\nimport { useAsync } from './useAsync';\nimport {\n getAudioHasCover, getChatAvatarHash, getChatTitle, getMessageContent, getMessageMediaHash, getSenderTitle,\n} from '../global/helpers';\nimport { getTranslation } from '../util/langProvider';\nimport { buildMediaMetadata } from '../util/mediaSession';\nimport { scaleImage, resizeImage } from '../util/imageResize';\nimport { AVATAR_FULL_DIMENSIONS } from '../components/common/helpers/mediaDimensions';\n\nimport telegramLogoPath from '../assets/telegram-logo-filled.svg';\n\nconst LOGO_DIMENSIONS = { width: 200, height: 200 };\nconst MINIMAL_SIZE = 115; // spec says 100, but on Chrome 93 it's not showing\n\n// TODO Add support for video in future\nconst useMessageMediaMetadata = (\n message: ApiMessage, sender?: ApiUser | ApiChat, chat?: ApiChat,\n): MediaMetadata | undefined => {\n const { audio, voice } = getMessageContent(message);\n const title = audio ? (audio.title || audio.fileName) : voice ? 'Voice message' : '';\n const artist = (audio && audio.performer) || (sender && getSenderTitle(getTranslation, sender));\n const album = (chat && getChatTitle(getTranslation, chat)) || 'Telegram';\n\n const audioCoverHash = (audio && getAudioHasCover(audio) && getMessageMediaHash(message, 'pictogram'));\n const avatarHash = sender && getChatAvatarHash(sender, 'big');\n const hash = (audio && audioCoverHash) || (voice && avatarHash);\n const media = useMedia(hash);\n\n const size = useMemo(() => {\n return getCoverSize(audio, voice, media);\n }, [audio, media, voice]);\n const { result: url } = useAsync(() => makeGoodArtwork(media, size), [media, size], telegramLogoPath);\n return useMemo(() => {\n return buildMediaMetadata({\n title,\n artist,\n album,\n artwork: [{ src: url }],\n });\n }, [album, artist, title, url]);\n};\n\nfunction makeGoodArtwork(url?: string, size?: { width: number; height: number }): Promise {\n if (!url) return Promise.resolve(telegramLogoPath);\n if (!size) return resizeImage(url, MINIMAL_SIZE, MINIMAL_SIZE);\n const min = Math.min(size.width, size.height);\n if (min < MINIMAL_SIZE) {\n const ratio = MINIMAL_SIZE / min;\n return scaleImage(url, ratio);\n }\n return Promise.resolve(url);\n}\n\nfunction getCoverSize(audio?: ApiAudio, voice?: ApiVoice, url?: string) {\n if (!url) return LOGO_DIMENSIONS;\n if (audio) {\n if (!audio.thumbnailSizes || audio.thumbnailSizes.length === 0) return undefined;\n const preferred = audio.thumbnailSizes.find((size) => size.type === 'm');\n return preferred || audio.thumbnailSizes[0]; // Sometimes `m` is not present\n }\n\n if (voice) {\n return AVATAR_FULL_DIMENSIONS;\n }\n\n return undefined;\n}\n\nexport default useMessageMediaMetadata;\n","import { useEffect, useState } from '../lib/teact/teact';\n\nexport const useAsync = (fn: () => Promise, deps: any[], defaultValue?: T) => {\n const [isLoading, setIsLoading] = useState(false);\n const [error, setError] = useState();\n const [result, setResult] = useState(defaultValue);\n useEffect(() => {\n setIsLoading(true);\n let wasCancelled = false;\n fn().then((res) => {\n if (wasCancelled) return;\n setIsLoading(false);\n setResult(res);\n }, (err) => {\n if (wasCancelled) return;\n setIsLoading(false);\n setError(err);\n });\n return () => {\n wasCancelled = true;\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, deps);\n return { isLoading, error, result };\n};\n","import React, {\n FC, useCallback, useEffect, useMemo,\n} from '../../lib/teact/teact';\nimport { getActions, withGlobal } from '../../global';\n\nimport { AudioOrigin } from '../../types';\nimport {\n ApiAudio, ApiChat, ApiMessage, ApiUser,\n} from '../../api/types';\n\nimport { IS_IOS, IS_SINGLE_COLUMN_LAYOUT, IS_TOUCH_ENV } from '../../util/environment';\n\nimport * as mediaLoader from '../../util/mediaLoader';\nimport {\n getMediaDuration, getMessageContent, getMessageMediaHash, getSenderTitle, isMessageLocal,\n} from '../../global/helpers';\nimport { selectChat, selectSender } from '../../global/selectors';\nimport buildClassName from '../../util/buildClassName';\nimport { makeTrackId } from '../../util/audioPlayer';\nimport { clearMediaSession } from '../../util/mediaSession';\nimport windowSize from '../../util/windowSize';\nimport useAudioPlayer from '../../hooks/useAudioPlayer';\nimport useLang from '../../hooks/useLang';\nimport useMessageMediaMetadata from '../../hooks/useMessageMediaMetadata';\nimport renderText from '../common/helpers/renderText';\n\nimport RippleEffect from '../ui/RippleEffect';\nimport Button from '../ui/Button';\nimport RangeSlider from '../ui/RangeSlider';\n\nimport './AudioPlayer.scss';\n\ntype OwnProps = {\n message: ApiMessage;\n origin?: AudioOrigin;\n className?: string;\n noUi?: boolean;\n};\n\ntype StateProps = {\n sender?: ApiChat | ApiUser;\n chat?: ApiChat;\n volume: number;\n playbackRate: number;\n isMuted: boolean;\n};\n\nconst FAST_PLAYBACK_RATE = 1.8;\n\nconst AudioPlayer: FC = ({\n message,\n className,\n noUi,\n sender,\n chat,\n volume,\n playbackRate,\n isMuted,\n}) => {\n const {\n setAudioPlayerVolume,\n setAudioPlayerPlaybackRate,\n setAudioPlayerMuted,\n focusMessage,\n closeAudioPlayer,\n } = getActions();\n\n const lang = useLang();\n const { audio, voice, video } = getMessageContent(message);\n const isVoice = Boolean(voice || video);\n const senderName = sender ? getSenderTitle(lang, sender) : undefined;\n const mediaData = mediaLoader.getFromMemory(getMessageMediaHash(message, 'inline')!) as (string | undefined);\n const mediaMetadata = useMessageMediaMetadata(message, sender, chat);\n\n const {\n playPause,\n stop,\n isPlaying,\n requestNextTrack,\n requestPreviousTrack,\n isFirst,\n isLast,\n setVolume,\n toggleMuted,\n setPlaybackRate,\n } = useAudioPlayer(\n makeTrackId(message),\n getMediaDuration(message)!,\n isVoice ? 'voice' : 'audio',\n mediaData,\n undefined,\n mediaMetadata,\n undefined,\n true,\n undefined,\n undefined,\n isMessageLocal(message),\n true,\n );\n\n // Prevent refresh by accidentally rotating device when listening to a voice message\n const isVoicePlaying = isVoice && isPlaying;\n useEffect(() => {\n if (!isVoicePlaying) {\n return undefined;\n }\n\n windowSize.disableRefresh();\n\n return () => {\n windowSize.enableRefresh();\n };\n }, [isVoicePlaying]);\n\n const handleClick = useCallback(() => {\n focusMessage({ chatId: message.chatId, messageId: message.id });\n }, [focusMessage, message.chatId, message.id]);\n\n const handleClose = useCallback(() => {\n if (isPlaying) {\n playPause();\n }\n closeAudioPlayer();\n clearMediaSession();\n stop();\n }, [closeAudioPlayer, isPlaying, playPause, stop]);\n\n const handleVolumeChange = useCallback((value: number) => {\n setAudioPlayerVolume({ volume: value / 100 });\n setAudioPlayerMuted({ isMuted: false });\n\n setVolume(value / 100);\n }, [setAudioPlayerMuted, setAudioPlayerVolume, setVolume]);\n\n const handleVolumeClick = useCallback(() => {\n if (IS_TOUCH_ENV && !IS_IOS) return;\n toggleMuted();\n setAudioPlayerMuted({ isMuted: !isMuted });\n }, [isMuted, setAudioPlayerMuted, toggleMuted]);\n\n const handlePlaybackClick = useCallback(() => {\n if (playbackRate === 1) {\n setPlaybackRate(FAST_PLAYBACK_RATE);\n setAudioPlayerPlaybackRate({ playbackRate: FAST_PLAYBACK_RATE });\n } else {\n setPlaybackRate(1);\n setAudioPlayerPlaybackRate({ playbackRate: 1 });\n }\n }, [playbackRate, setAudioPlayerPlaybackRate, setPlaybackRate]);\n\n const volumeIcon = useMemo(() => {\n if (volume === 0 || isMuted) return 'icon-muted';\n if (volume < 0.3) return 'icon-volume-1';\n if (volume < 0.6) return 'icon-volume-2';\n return 'icon-volume-3';\n }, [volume, isMuted]);\n\n if (noUi) {\n return undefined;\n }\n\n return (\n
\n \n \n \n \n \n \n \n \n \n \n\n
\n {audio ? renderAudio(audio) : renderVoice(lang('AttachAudio'), senderName)}\n \n
\n\n \n \n {!IS_IOS && (\n <>\n
\n
\n \n
\n \n )}\n \n\n {isVoice && (\n \n \n \n )}\n\n \n \n \n
\n );\n};\n\nfunction renderAudio(audio: ApiAudio) {\n const { title, performer, fileName } = audio;\n\n return (\n <>\n
{renderText(title || fileName)}
\n {performer && (\n
{renderText(performer)}
\n )}\n \n );\n}\n\nfunction renderVoice(subtitle: string, senderName?: string) {\n return (\n <>\n
{senderName && renderText(senderName)}
\n
{subtitle}
\n \n );\n}\n\nexport default withGlobal(\n (global, { message }): StateProps => {\n const sender = selectSender(global, message);\n const chat = selectChat(global, message.chatId);\n const { volume, playbackRate, isMuted } = global.audioPlayer;\n\n return {\n sender,\n chat,\n volume,\n playbackRate,\n isMuted,\n };\n },\n)(AudioPlayer);\n","import React, {\n FC, memo, useCallback, useEffect, useMemo,\n} from '../../../lib/teact/teact';\nimport { getActions, withGlobal } from '../../../global';\n\nimport { ApiChat, ApiGroupCall, ApiUser } from '../../../api/types';\n\nimport { selectChatGroupCall } from '../../../global/selectors/calls';\nimport buildClassName from '../../../util/buildClassName';\nimport { selectChat } from '../../../global/selectors';\nimport useLang from '../../../hooks/useLang';\n\nimport Button from '../../ui/Button';\nimport Avatar from '../../common/Avatar';\n\nimport './GroupCallTopPane.scss';\n\ntype OwnProps = {\n chatId: string;\n hasPinnedOffset: boolean;\n};\n\ntype StateProps = {\n groupCall?: ApiGroupCall;\n isActive: boolean;\n usersById: Record;\n chatsById: Record;\n};\n\nconst GroupCallTopPane: FC = ({\n chatId,\n isActive,\n groupCall,\n hasPinnedOffset,\n usersById,\n chatsById,\n}) => {\n const {\n joinGroupCall,\n subscribeToGroupCallUpdates,\n } = getActions();\n\n const lang = useLang();\n\n const handleJoinGroupCall = useCallback(() => {\n joinGroupCall({\n chatId,\n });\n }, [joinGroupCall, chatId]);\n\n const participants = groupCall?.participants;\n\n const fetchedParticipants = useMemo(() => {\n if (participants) {\n return Object.values(participants).filter((_, i) => i < 3).map(({ id, isUser }) => {\n if (isUser) {\n if (!usersById[id]) {\n return undefined;\n }\n return { user: usersById[id] };\n } else {\n if (!chatsById[id]) {\n return undefined;\n }\n return { chat: chatsById[id] };\n }\n }).filter(Boolean);\n } else return [];\n }, [chatsById, participants, usersById]);\n\n useEffect(() => {\n if (!groupCall?.id) return undefined;\n if (!isActive && groupCall.isLoaded) return undefined;\n\n subscribeToGroupCallUpdates({\n id: groupCall.id,\n subscribed: true,\n });\n\n return () => {\n subscribeToGroupCallUpdates({\n id: groupCall.id,\n subscribed: false,\n });\n };\n }, [groupCall?.id, groupCall?.isLoaded, isActive, subscribeToGroupCallUpdates]);\n\n if (!groupCall) return undefined;\n\n return (\n \n
\n {lang('VoipGroupVoiceChat')}\n {lang('Participants', groupCall.participantsCount || 0, 'i')}\n
\n
\n {fetchedParticipants.map((p) => {\n if (!p) return undefined;\n if (p.user) {\n return ;\n } else {\n return ;\n }\n })}\n
\n \n
\n );\n};\n\nexport default memo(withGlobal(\n (global, { chatId }) => {\n const chat = selectChat(global, chatId)!;\n const groupCall = selectChatGroupCall(global, chatId);\n return {\n groupCall,\n usersById: global.users.byId,\n chatsById: global.chats.byId,\n activeGroupCallId: global.groupCalls.activeGroupCallId,\n isActive: ((!groupCall ? (chat && chat.isCallNotEmpty && chat.isCallActive)\n : (groupCall.participantsCount > 0 && groupCall.isLoaded)))\n && (global.groupCalls.activeGroupCallId !== groupCall?.id),\n };\n },\n)(GroupCallTopPane));\n","import React, {\n FC, memo, useCallback, useState,\n} from '../../lib/teact/teact';\nimport { withGlobal, getActions } from '../../global';\n\nimport { ApiChat, ApiChatSettings, ApiUser } from '../../api/types';\n\nimport { selectChat, selectUser } from '../../global/selectors';\nimport {\n getChatTitle, getUserFirstOrLastName, getUserFullName, isChatBasicGroup, isUserId,\n} from '../../global/helpers';\nimport buildClassName from '../../util/buildClassName';\nimport useLang from '../../hooks/useLang';\nimport useFlag from '../../hooks/useFlag';\n\nimport Button from '../ui/Button';\nimport ConfirmDialog from '../ui/ConfirmDialog';\nimport Checkbox from '../ui/Checkbox';\n\nimport './ChatReportPanel.scss';\n\ntype OwnProps = {\n chatId: string;\n className?: string;\n settings?: ApiChatSettings;\n};\n\ntype StateProps = {\n currentUserId?: string;\n chat?: ApiChat;\n user?: ApiUser;\n};\n\nconst ChatReportPanel: FC = ({\n chatId, className, chat, user, settings, currentUserId,\n}) => {\n const {\n openAddContactDialog,\n blockContact,\n reportSpam,\n deleteChat,\n leaveChannel,\n deleteChatUser,\n deleteHistory,\n toggleChatArchived,\n hideChatReportPanel,\n } = getActions();\n\n const lang = useLang();\n const [isBlockUserModalOpen, openBlockUserModal, closeBlockUserModal] = useFlag();\n const [shouldReportSpam, setShouldReportSpam] = useState(true);\n const [shouldDeleteChat, setShouldDeleteChat] = useState(true);\n const { accessHash } = chat || {};\n const {\n isAutoArchived, canReportSpam, canAddContact, canBlockContact,\n } = settings || {};\n const isBasicGroup = chat && isChatBasicGroup(chat);\n\n const handleAddContact = useCallback(() => {\n openAddContactDialog({ userId: chatId });\n if (isAutoArchived) {\n toggleChatArchived({ chatId });\n }\n }, [openAddContactDialog, isAutoArchived, toggleChatArchived, chatId]);\n\n const handleConfirmBlock = useCallback(() => {\n closeBlockUserModal();\n blockContact({ contactId: chatId, accessHash });\n if (canReportSpam && shouldReportSpam) {\n reportSpam({ chatId });\n }\n if (shouldDeleteChat) {\n deleteChat({ chatId });\n }\n }, [\n accessHash, blockContact, closeBlockUserModal, deleteChat, reportSpam, canReportSpam, shouldDeleteChat,\n shouldReportSpam, chatId,\n ]);\n\n const handleCloseReportPanel = useCallback(() => {\n hideChatReportPanel({ chatId });\n }, [chatId, hideChatReportPanel]);\n\n const handleChatReportSpam = useCallback(() => {\n closeBlockUserModal();\n reportSpam({ chatId });\n if (isBasicGroup) {\n deleteChatUser({ chatId, userId: currentUserId });\n deleteHistory({ chatId, shouldDeleteForAll: false });\n } else {\n leaveChannel({ chatId });\n }\n }, [\n chatId, closeBlockUserModal, currentUserId, deleteChatUser, deleteHistory, isBasicGroup, leaveChannel, reportSpam,\n ]);\n\n if (!settings) {\n return undefined;\n }\n\n return (\n
\n {canAddContact && (\n \n {lang('lng_new_contact_add')}\n \n )}\n {canBlockContact && (\n \n {lang('lng_new_contact_block')}\n \n )}\n {canReportSpam && !canBlockContact && (\n \n {lang('lng_report_spam_and_leave')}\n \n )}\n \n \n \n \n {user && (\n \n )}\n {user && canReportSpam && (\n \n )}\n \n
\n );\n};\n\nexport default memo(withGlobal(\n (global, { chatId }): StateProps => ({\n currentUserId: global.currentUserId,\n chat: selectChat(global, chatId),\n user: isUserId(chatId) ? selectUser(global, chatId) : undefined,\n }),\n)(ChatReportPanel));\n","import React, {\n FC, memo, useCallback, useEffect, useRef, useState,\n} from '../../lib/teact/teact';\nimport { getActions, withGlobal } from '../../global';\nimport cycleRestrict from '../../util/cycleRestrict';\n\nimport { GlobalState, MessageListType } from '../../global/types';\nimport {\n ApiChat, ApiMessage, ApiTypingStatus, ApiUser, MAIN_THREAD_ID,\n} from '../../api/types';\n\nimport {\n EDITABLE_INPUT_ID,\n MIN_SCREEN_WIDTH_FOR_STATIC_LEFT_COLUMN,\n MIN_SCREEN_WIDTH_FOR_STATIC_RIGHT_COLUMN,\n MOBILE_SCREEN_MAX_WIDTH,\n SAFE_SCREEN_WIDTH_FOR_CHAT_INFO,\n SAFE_SCREEN_WIDTH_FOR_STATIC_RIGHT_COLUMN,\n} from '../../config';\nimport { IS_SINGLE_COLUMN_LAYOUT, IS_TABLET_COLUMN_LAYOUT } from '../../util/environment';\nimport {\n getChatTitle, getMessageKey, getSenderTitle, isUserId,\n} from '../../global/helpers';\nimport {\n selectAllowedMessageActions,\n selectChat,\n selectChatMessage,\n selectChatMessages,\n selectForwardedSender,\n selectIsChatWithBot,\n selectIsChatWithSelf,\n selectIsInSelectMode,\n selectIsRightColumnShown,\n selectPinnedIds,\n selectScheduledIds,\n selectThreadInfo,\n selectThreadTopMessageId,\n} from '../../global/selectors';\nimport useEnsureMessage from '../../hooks/useEnsureMessage';\nimport useWindowSize from '../../hooks/useWindowSize';\nimport useShowTransition from '../../hooks/useShowTransition';\nimport useCurrentOrPrev from '../../hooks/useCurrentOrPrev';\nimport buildClassName from '../../util/buildClassName';\nimport useLang from '../../hooks/useLang';\nimport useConnectionStatus from '../../hooks/useConnectionStatus';\n\nimport PrivateChatInfo from '../common/PrivateChatInfo';\nimport GroupChatInfo from '../common/GroupChatInfo';\nimport UnreadCounter from '../common/UnreadCounter';\nimport Transition from '../ui/Transition';\nimport Button from '../ui/Button';\nimport HeaderActions from './HeaderActions';\nimport HeaderPinnedMessage from './HeaderPinnedMessage';\nimport AudioPlayer from './AudioPlayer';\nimport GroupCallTopPane from '../calls/group/GroupCallTopPane';\nimport ChatReportPanel from './ChatReportPanel';\n\nimport './MiddleHeader.scss';\n\nconst ANIMATION_DURATION = 350;\nconst BACK_BUTTON_INACTIVE_TIME = 450;\n\ntype OwnProps = {\n chatId: string;\n threadId: number;\n messageListType: MessageListType;\n isReady?: boolean;\n};\n\ntype StateProps = {\n chat?: ApiChat;\n pinnedMessageIds?: number[] | number;\n messagesById?: Record;\n canUnpin?: boolean;\n topMessageSender?: ApiChat | ApiUser;\n typingStatus?: ApiTypingStatus;\n isSelectModeActive?: boolean;\n isLeftColumnShown?: boolean;\n isRightColumnShown?: boolean;\n audioMessage?: ApiMessage;\n messagesCount?: number;\n isChatWithSelf?: boolean;\n isChatWithBot?: boolean;\n lastSyncTime?: number;\n shouldSkipHistoryAnimations?: boolean;\n currentTransitionKey: number;\n connectionState?: GlobalState['connectionState'];\n isSyncing?: GlobalState['isSyncing'];\n};\n\nconst MiddleHeader: FC = ({\n chatId,\n threadId,\n messageListType,\n isReady,\n pinnedMessageIds,\n messagesById,\n canUnpin,\n topMessageSender,\n typingStatus,\n isSelectModeActive,\n isLeftColumnShown,\n isRightColumnShown,\n audioMessage,\n chat,\n messagesCount,\n isChatWithSelf,\n isChatWithBot,\n lastSyncTime,\n shouldSkipHistoryAnimations,\n currentTransitionKey,\n connectionState,\n isSyncing,\n}) => {\n const {\n openChatWithInfo,\n pinMessage,\n focusMessage,\n openChat,\n openPreviousChat,\n loadPinnedMessages,\n toggleLeftColumn,\n exitMessageSelectMode,\n } = getActions();\n\n const lang = useLang();\n const isBackButtonActive = useRef(true);\n\n const [pinnedMessageIndex, setPinnedMessageIndex] = useState(0);\n const pinnedMessageId = Array.isArray(pinnedMessageIds) ? pinnedMessageIds[pinnedMessageIndex] : pinnedMessageIds;\n const pinnedMessage = messagesById && pinnedMessageId ? messagesById[pinnedMessageId] : undefined;\n const pinnedMessagesCount = Array.isArray(pinnedMessageIds)\n ? pinnedMessageIds.length : (pinnedMessageIds ? 1 : undefined);\n const chatTitleLength = chat && getChatTitle(lang, chat).length;\n const topMessageTitle = topMessageSender ? getSenderTitle(lang, topMessageSender) : undefined;\n const { settings } = chat || {};\n\n useEffect(() => {\n if (threadId === MAIN_THREAD_ID && lastSyncTime && isReady) {\n loadPinnedMessages({ chatId });\n }\n }, [chatId, loadPinnedMessages, lastSyncTime, threadId, isReady]);\n\n // Reset pinned index when switching chats and pinning/unpinning\n useEffect(() => {\n setPinnedMessageIndex(0);\n }, [pinnedMessageIds]);\n\n useEnsureMessage(chatId, pinnedMessageId, pinnedMessage);\n\n const { width: windowWidth } = useWindowSize();\n\n const isLeftColumnHideable = windowWidth <= MIN_SCREEN_WIDTH_FOR_STATIC_LEFT_COLUMN;\n const shouldShowCloseButton = IS_TABLET_COLUMN_LAYOUT && isLeftColumnShown;\n\n // eslint-disable-next-line no-null/no-null\n const componentRef = useRef(null);\n const shouldAnimateTools = useRef(true);\n\n const handleHeaderClick = useCallback(() => {\n openChatWithInfo({ id: chatId });\n }, [openChatWithInfo, chatId]);\n\n const handleUnpinMessage = useCallback((messageId: number) => {\n pinMessage({ chatId, messageId, isUnpin: true });\n }, [pinMessage, chatId]);\n\n const handlePinnedMessageClick = useCallback((): void => {\n if (pinnedMessage) {\n focusMessage({ chatId: pinnedMessage.chatId, threadId, messageId: pinnedMessage.id });\n\n const newIndex = cycleRestrict(pinnedMessagesCount || 1, pinnedMessageIndex + 1);\n setPinnedMessageIndex(newIndex);\n }\n }, [pinnedMessage, focusMessage, threadId, pinnedMessagesCount, pinnedMessageIndex]);\n\n const handleAllPinnedClick = useCallback(() => {\n openChat({ id: chatId, threadId: MAIN_THREAD_ID, type: 'pinned' });\n }, [openChat, chatId]);\n\n const setBackButtonActive = useCallback(() => {\n setTimeout(() => {\n isBackButtonActive.current = true;\n }, BACK_BUTTON_INACTIVE_TIME);\n }, []);\n\n const handleBackClick = useCallback((e: React.MouseEvent) => {\n if (!isBackButtonActive.current) return;\n\n // Workaround for missing UI when quickly clicking the Back button\n isBackButtonActive.current = false;\n if (IS_SINGLE_COLUMN_LAYOUT) {\n const messageInput = document.getElementById(EDITABLE_INPUT_ID);\n if (messageInput) {\n messageInput.blur();\n }\n }\n\n if (isSelectModeActive) {\n exitMessageSelectMode();\n setBackButtonActive();\n return;\n }\n\n if (threadId === MAIN_THREAD_ID && messageListType === 'thread' && currentTransitionKey === 0) {\n if (IS_SINGLE_COLUMN_LAYOUT || shouldShowCloseButton) {\n e.stopPropagation(); // Stop propagation to prevent chat re-opening on tablets\n openChat({ id: undefined });\n } else {\n toggleLeftColumn();\n }\n\n setBackButtonActive();\n\n return;\n }\n\n openPreviousChat();\n setBackButtonActive();\n }, [\n threadId, messageListType, currentTransitionKey, isSelectModeActive, openPreviousChat, shouldShowCloseButton,\n openChat, toggleLeftColumn, exitMessageSelectMode, setBackButtonActive,\n ]);\n\n const canToolsCollideWithChatInfo = (\n windowWidth >= MIN_SCREEN_WIDTH_FOR_STATIC_LEFT_COLUMN\n && windowWidth < SAFE_SCREEN_WIDTH_FOR_CHAT_INFO\n ) || (\n windowWidth > MOBILE_SCREEN_MAX_WIDTH\n && windowWidth < MIN_SCREEN_WIDTH_FOR_STATIC_LEFT_COLUMN\n && (!chatTitleLength || chatTitleLength > 30)\n );\n const shouldUseStackedToolsClass = canToolsCollideWithChatInfo || (\n windowWidth > MIN_SCREEN_WIDTH_FOR_STATIC_RIGHT_COLUMN\n && windowWidth < SAFE_SCREEN_WIDTH_FOR_STATIC_RIGHT_COLUMN\n );\n\n const hasChatSettings = Boolean(settings?.canAddContact || settings?.canBlockContact || settings?.canReportSpam);\n const {\n shouldRender: shouldShowChatReportPanel,\n transitionClassNames: chatReportPanelClassNames,\n } = useShowTransition(hasChatSettings);\n const renderingChatSettings = useCurrentOrPrev(hasChatSettings ? settings : undefined, true);\n\n const {\n shouldRender: shouldRenderAudioPlayer,\n transitionClassNames: audioPlayerClassNames,\n } = useShowTransition(Boolean(audioMessage));\n\n const renderingAudioMessage = useCurrentOrPrev(audioMessage, true);\n\n const {\n shouldRender: shouldRenderPinnedMessage,\n transitionClassNames: pinnedMessageClassNames,\n } = useShowTransition(Boolean(pinnedMessage));\n\n const renderingPinnedMessage = useCurrentOrPrev(pinnedMessage, true);\n const renderingPinnedMessagesCount = useCurrentOrPrev(pinnedMessagesCount, true);\n const renderingCanUnpin = useCurrentOrPrev(canUnpin, true);\n const renderingPinnedMessageTitle = useCurrentOrPrev(topMessageTitle);\n\n const canRevealTools = (shouldRenderPinnedMessage && renderingPinnedMessage)\n || (shouldRenderAudioPlayer && renderingAudioMessage);\n\n // Logic for transition to and from custom display of AudioPlayer/PinnedMessage on smaller screens\n useEffect(() => {\n const componentEl = componentRef.current;\n if (!componentEl) {\n return;\n }\n\n if (!shouldUseStackedToolsClass || !canRevealTools) {\n componentEl.classList.remove('tools-stacked', 'animated');\n shouldAnimateTools.current = true;\n return;\n }\n\n if (isRightColumnShown || canToolsCollideWithChatInfo) {\n if (shouldAnimateTools.current) {\n componentEl.classList.add('tools-stacked', 'animated');\n shouldAnimateTools.current = false;\n }\n\n // Remove animation class to prevent it messing up the show transitions\n setTimeout(() => {\n componentEl.classList.remove('animated');\n }, ANIMATION_DURATION);\n } else {\n componentEl.classList.remove('tools-stacked');\n shouldAnimateTools.current = true;\n }\n }, [shouldUseStackedToolsClass, canRevealTools, canToolsCollideWithChatInfo, isRightColumnShown]);\n\n const { connectionStatusText } = useConnectionStatus(lang, connectionState, isSyncing, true);\n\n function renderInfo() {\n return (\n messageListType === 'thread' && threadId === MAIN_THREAD_ID ? (\n renderMainThreadInfo()\n ) : messageListType === 'thread' ? (\n <>\n {renderBackButton()}\n

\n {lang('CommentsCount', messagesCount, 'i')}\n

\n \n ) : messageListType === 'pinned' ? (\n <>\n {renderBackButton()}\n

\n {lang('PinnedMessagesCount', messagesCount, 'i')}\n

\n \n ) : messageListType === 'scheduled' ? (\n <>\n {renderBackButton()}\n

\n {isChatWithSelf ? lang('Reminders') : lang('messages', messagesCount, 'i')}\n

\n \n ) : undefined\n );\n }\n\n function renderMainThreadInfo() {\n return (\n <>\n {(isLeftColumnHideable || currentTransitionKey > 0) && renderBackButton(shouldShowCloseButton, true)}\n
\n {isUserId(chatId) ? (\n \n ) : (\n \n )}\n
\n \n );\n }\n\n function renderBackButton(asClose = false, withUnreadCounter = false) {\n return (\n
\n \n
\n \n {withUnreadCounter && }\n
\n );\n }\n\n const isAudioPlayerRendered = Boolean(shouldRenderAudioPlayer && renderingAudioMessage);\n\n return (\n
\n \n {renderInfo()}\n \n\n \n\n {shouldRenderPinnedMessage && renderingPinnedMessage && (\n \n )}\n\n {shouldShowChatReportPanel && (\n \n )}\n\n
\n {isAudioPlayerRendered && (\n \n )}\n \n
\n
\n );\n};\n\nexport default memo(withGlobal(\n (global, { chatId, threadId, messageListType }): StateProps => {\n const { isLeftColumnShown, lastSyncTime, shouldSkipHistoryAnimations } = global;\n const chat = selectChat(global, chatId);\n const { typingStatus } = chat || {};\n\n const { chatId: audioChatId, messageId: audioMessageId } = global.audioPlayer;\n const audioMessage = audioChatId && audioMessageId\n ? selectChatMessage(global, audioChatId, audioMessageId)\n : undefined;\n\n let messagesCount: number | undefined;\n if (messageListType === 'pinned') {\n const pinnedIds = selectPinnedIds(global, chatId);\n messagesCount = pinnedIds?.length;\n } else if (messageListType === 'scheduled') {\n const scheduledIds = selectScheduledIds(global, chatId);\n messagesCount = scheduledIds?.length;\n } else if (messageListType === 'thread' && threadId !== MAIN_THREAD_ID) {\n const threadInfo = selectThreadInfo(global, chatId, threadId);\n messagesCount = threadInfo?.messagesCount || 0;\n }\n\n const state: StateProps = {\n typingStatus,\n isLeftColumnShown,\n isRightColumnShown: selectIsRightColumnShown(global),\n isSelectModeActive: selectIsInSelectMode(global),\n audioMessage,\n chat,\n messagesCount,\n isChatWithSelf: selectIsChatWithSelf(global, chatId),\n isChatWithBot: chat && selectIsChatWithBot(global, chat),\n lastSyncTime,\n shouldSkipHistoryAnimations,\n currentTransitionKey: Math.max(0, global.messages.messageLists.length - 1),\n connectionState: global.connectionState,\n isSyncing: global.isSyncing,\n };\n\n const messagesById = selectChatMessages(global, chatId);\n if (messageListType !== 'thread' || !messagesById) {\n return state;\n }\n\n Object.assign(state, { messagesById });\n\n if (threadId !== MAIN_THREAD_ID) {\n const pinnedMessageId = selectThreadTopMessageId(global, chatId, threadId);\n const message = pinnedMessageId ? selectChatMessage(global, chatId, pinnedMessageId) : undefined;\n const topMessageSender = message ? selectForwardedSender(global, message) : undefined;\n\n return {\n ...state,\n pinnedMessageIds: pinnedMessageId,\n canUnpin: false,\n topMessageSender,\n };\n }\n\n const pinnedMessageIds = selectPinnedIds(global, chatId);\n if (pinnedMessageIds?.length) {\n const firstPinnedMessage = messagesById[pinnedMessageIds[0]];\n const {\n canUnpin,\n } = (firstPinnedMessage && selectAllowedMessageActions(global, firstPinnedMessage, threadId)) || {};\n\n return {\n ...state,\n pinnedMessageIds,\n canUnpin,\n };\n }\n\n return state;\n },\n)(MiddleHeader));\n","import { ApiMessage } from '../../../api/types';\nimport { IAlbum } from '../../../types';\n\nimport { getDayStartAt } from '../../../util/dateFormat';\nimport { isActionMessage } from '../../../global/helpers';\n\ntype SenderGroup = (ApiMessage | IAlbum)[];\n\nconst GROUP_INTERVAL_SECONDS = 600; // 10 minutes\n\nexport type MessageDateGroup = {\n originalDate: number;\n datetime: number;\n senderGroups: SenderGroup[];\n};\n\nexport function isAlbum(messageOrAlbum: ApiMessage | IAlbum): messageOrAlbum is IAlbum {\n return 'albumId' in messageOrAlbum;\n}\n\nexport function groupMessages(messages: ApiMessage[], firstUnreadId?: number) {\n let currentSenderGroup: SenderGroup = [];\n let currentDateGroup = {\n originalDate: messages[0].date,\n datetime: getDayStartAt(messages[0].date * 1000),\n senderGroups: [currentSenderGroup],\n };\n let currentAlbum: IAlbum | undefined;\n\n const dateGroups: MessageDateGroup[] = [currentDateGroup];\n\n messages.forEach((message, index) => {\n if (message.isInAlbum) {\n if (!currentAlbum) {\n currentAlbum = {\n albumId: message.groupedId!,\n messages: [message],\n mainMessage: message,\n };\n } else {\n currentAlbum.messages.push(message);\n if (message.content.text) {\n currentAlbum.mainMessage = message;\n }\n }\n } else {\n currentSenderGroup.push(message);\n }\n\n const nextMessage = messages[index + 1];\n\n if (\n currentAlbum\n && (!nextMessage || !nextMessage.groupedId || nextMessage.groupedId !== currentAlbum.albumId)\n ) {\n currentSenderGroup.push(currentAlbum);\n currentAlbum = undefined;\n }\n if (nextMessage) {\n const nextMessageDayStartsAt = getDayStartAt(nextMessage.date * 1000);\n if (currentDateGroup.datetime !== nextMessageDayStartsAt) {\n currentDateGroup = {\n originalDate: nextMessage.date,\n datetime: nextMessageDayStartsAt,\n senderGroups: [],\n };\n dateGroups.push(currentDateGroup);\n\n currentSenderGroup = [];\n currentDateGroup.senderGroups.push(currentSenderGroup);\n } else if (\n nextMessage.id === firstUnreadId\n || message.senderId !== nextMessage.senderId\n || message.isOutgoing !== nextMessage.isOutgoing\n || isActionMessage(message)\n || isActionMessage(nextMessage)\n || (\n message.forwardInfo && nextMessage.forwardInfo\n && (\n message.forwardInfo.senderUserId !== nextMessage.forwardInfo.senderUserId\n || message.forwardInfo.fromChatId !== nextMessage.forwardInfo.fromChatId\n || message.forwardInfo.hiddenUserName !== nextMessage.forwardInfo.hiddenUserName\n )\n )\n || message.inlineButtons\n || nextMessage.inlineButtons\n || (nextMessage.date - message.date) > GROUP_INTERVAL_SECONDS\n ) {\n currentSenderGroup = [];\n currentDateGroup.senderGroups.push(currentSenderGroup);\n }\n }\n });\n\n return dateGroups;\n}\n","import { RefObject } from 'react';\nimport { getActions } from '../../../global';\n\nimport { MessageListType } from '../../../global/types';\n\nimport { IS_ANDROID, IS_SINGLE_COLUMN_LAYOUT } from '../../../util/environment';\nimport { useIntersectionObserver } from '../../../hooks/useIntersectionObserver';\nimport useBackgroundMode from '../../../hooks/useBackgroundMode';\n\nconst INTERSECTION_THROTTLE_FOR_MEDIA = IS_ANDROID ? 1000 : 350;\nconst INTERSECTION_MARGIN_FOR_MEDIA = IS_SINGLE_COLUMN_LAYOUT ? 300 : 500;\nconst INTERSECTION_THROTTLE_FOR_READING = 150;\n\nexport default function useMessageObservers(\n type: MessageListType,\n containerRef: RefObject,\n memoFirstUnreadIdRef: { current: number | undefined },\n) {\n const { markMessageListRead, markMessagesRead } = getActions();\n\n const {\n observe: observeIntersectionForMedia,\n } = useIntersectionObserver({\n rootRef: containerRef,\n throttleMs: INTERSECTION_THROTTLE_FOR_MEDIA,\n margin: INTERSECTION_MARGIN_FOR_MEDIA,\n });\n\n const {\n observe: observeIntersectionForReading, freeze: freezeForReading, unfreeze: unfreezeForReading,\n } = useIntersectionObserver({\n rootRef: containerRef,\n throttleMs: INTERSECTION_THROTTLE_FOR_READING,\n }, (entries) => {\n if (type !== 'thread') {\n return;\n }\n\n let maxId = 0;\n const mentionIds: number[] = [];\n\n entries.forEach((entry) => {\n const { isIntersecting, target } = entry;\n\n if (!isIntersecting) {\n return;\n }\n\n const { dataset } = target as HTMLDivElement;\n\n const messageId = Number(dataset.lastMessageId || dataset.messageId);\n if (messageId > maxId) {\n maxId = messageId;\n }\n\n if (dataset.hasUnreadMention) {\n mentionIds.push(messageId);\n }\n });\n\n if (memoFirstUnreadIdRef.current && maxId >= memoFirstUnreadIdRef.current) {\n markMessageListRead({ maxId });\n }\n\n if (mentionIds.length) {\n markMessagesRead({ messageIds: mentionIds });\n }\n });\n\n useBackgroundMode(freezeForReading, unfreezeForReading);\n\n const { observe: observeIntersectionForAnimatedStickers } = useIntersectionObserver({\n rootRef: containerRef,\n throttleMs: INTERSECTION_THROTTLE_FOR_MEDIA,\n });\n\n return {\n observeIntersectionForMedia,\n observeIntersectionForReading,\n observeIntersectionForAnimatedStickers,\n };\n}\n","import { ApiMessage } from '../../../../api/types';\n\nimport { getMessageContent } from '../../../../global/helpers';\n\nexport function isEmojiOnlyMessage(customShape?: boolean | number) {\n return typeof customShape === 'number';\n}\n\nexport function buildContentClassName(\n message: ApiMessage,\n {\n hasReply,\n customShape,\n isLastInGroup,\n asForwarded,\n hasThread,\n forceSenderName,\n hasComments,\n hasActionButton,\n hasReactions,\n isGeoLiveActive,\n }: {\n hasReply?: boolean;\n customShape?: boolean | number;\n isLastInGroup?: boolean;\n asForwarded?: boolean;\n hasThread?: boolean;\n forceSenderName?: boolean;\n hasComments?: boolean;\n hasActionButton?: boolean;\n hasReactions?: boolean;\n isGeoLiveActive?: boolean;\n } = {},\n) {\n const {\n text, photo, video, audio, voice, document, poll, webPage, contact, location,\n } = getMessageContent(message);\n\n const classNames = ['message-content'];\n const isMedia = photo || video || location;\n const hasText = text || location?.type === 'venue' || isGeoLiveActive;\n const isMediaWithNoText = isMedia && !hasText;\n const isViaBot = Boolean(message.viaBotId);\n\n if (isEmojiOnlyMessage(customShape)) {\n classNames.push(`emoji-only emoji-only-${customShape}`);\n } else if (hasText) {\n classNames.push('text');\n }\n\n if (hasActionButton) {\n classNames.push('has-action-button');\n }\n\n if (customShape) {\n classNames.push('custom-shape');\n if (video?.isRound) {\n classNames.push('round');\n }\n\n if (hasComments) {\n classNames.push('has-comments');\n }\n }\n if (isMedia) {\n classNames.push('media');\n } else if (audio) {\n classNames.push('audio');\n } else if (voice) {\n classNames.push('voice');\n } else if (document) {\n classNames.push('document');\n } else if (contact) {\n classNames.push('contact');\n } else if (poll) {\n classNames.push('poll');\n } else if (webPage) {\n classNames.push('web-page');\n\n if (webPage.photo || webPage.video) {\n classNames.push('media');\n }\n }\n\n if (asForwarded) {\n classNames.push('is-forwarded');\n }\n\n if (hasReply) {\n classNames.push('is-reply');\n }\n\n if (hasThread) {\n classNames.push('has-replies');\n }\n\n if (hasReactions) {\n classNames.push('has-reactions');\n }\n\n if (isViaBot) {\n classNames.push('is-via-bot');\n }\n\n if (forceSenderName) {\n classNames.push('force-sender-name');\n }\n\n if (!customShape) {\n classNames.push('has-shadow');\n\n if (isMedia && hasComments) {\n classNames.push('has-background');\n }\n\n if (hasReply || asForwarded || !isMediaWithNoText || isViaBot || forceSenderName) {\n classNames.push('has-solid-background');\n }\n\n if (isLastInGroup && (photo || (location && !hasText) || !isMediaWithNoText)) {\n classNames.push('has-appendix');\n }\n }\n\n return classNames.join(' ');\n}\n","import { ApiMessage } from '../../../../api/types';\nimport { calculateInlineImageDimensions, calculateVideoDimensions } from '../../../common/helpers/mediaDimensions';\nimport {\n getMessageText,\n getMessagePhoto,\n getMessageWebPagePhoto,\n isForwardedMessage,\n isOwnMessage,\n getMessageVideo,\n} from '../../../../global/helpers';\n\nconst MIN_MEDIA_WIDTH = 100;\nconst MIN_MEDIA_WIDTH_WITH_COMMENTS = 238;\nconst MIN_MEDIA_WIDTH_WITH_TEXT = 175;\nconst MIN_MEDIA_WIDTH_WITH_TEXT_AND_COMMENTS = 238;\nconst MIN_MEDIA_HEIGHT = 90;\nconst SMALL_IMAGE_THRESHOLD = 12;\n\nexport function getMinMediaWidth(hasText?: boolean, hasCommentButton?: boolean) {\n return hasText\n ? (hasCommentButton ? MIN_MEDIA_WIDTH_WITH_TEXT_AND_COMMENTS : MIN_MEDIA_WIDTH_WITH_TEXT)\n : (hasCommentButton ? MIN_MEDIA_WIDTH_WITH_COMMENTS : MIN_MEDIA_WIDTH);\n}\n\nexport function calculateMediaDimensions(message: ApiMessage, noAvatars?: boolean) {\n const isOwn = isOwnMessage(message);\n const isForwarded = isForwardedMessage(message);\n const photo = getMessagePhoto(message) || getMessageWebPagePhoto(message);\n const video = getMessageVideo(message);\n\n const isWebPagePhoto = Boolean(getMessageWebPagePhoto(message));\n const { width, height } = photo\n ? calculateInlineImageDimensions(photo, isOwn, isForwarded, isWebPagePhoto, noAvatars)\n : calculateVideoDimensions(video!, isOwn, isForwarded, noAvatars);\n\n const hasText = Boolean(getMessageText(message));\n const minMediaWidth = getMinMediaWidth(hasText);\n\n let stretchFactor = 1;\n if (width < minMediaWidth && minMediaWidth - width < SMALL_IMAGE_THRESHOLD) {\n stretchFactor = minMediaWidth / width;\n }\n if (height * stretchFactor < MIN_MEDIA_HEIGHT && MIN_MEDIA_HEIGHT - height * stretchFactor < SMALL_IMAGE_THRESHOLD) {\n stretchFactor = MIN_MEDIA_HEIGHT / height;\n }\n\n const finalWidth = Math.round(width * stretchFactor);\n const finalHeight = Math.round(height * stretchFactor);\n\n return {\n width: finalWidth,\n height: finalHeight,\n isSmall: finalWidth < minMediaWidth || finalHeight < MIN_MEDIA_HEIGHT,\n };\n}\n","/* eslint-disable no-bitwise */\n// Based on\n// https://github.com/telegramdesktop/tdesktop/blob/dev/Telegram/SourceFiles/ui/grouped_layout.cpp\n// https://github.com/overtake/TelegramSwift/blob/master/Telegram-Mac/GroupedLayout.swift#L83\n\nimport { IAlbum } from '../../../../types';\nimport { ApiMessage, ApiDimensions } from '../../../../api/types';\n\nimport { getAvailableWidth, REM } from '../../../common/helpers/mediaDimensions';\nimport { calculateMediaDimensions } from './mediaDimensions';\n\nexport const AlbumRectPart = {\n None: 0,\n Top: 1,\n Right: 2,\n Bottom: 4,\n Left: 8,\n};\n\ntype IAttempt = {\n lineCounts: number[];\n heights: number[];\n};\nexport type IMediaDimensions = {\n width: number;\n height: number;\n x: number;\n y: number;\n};\ntype IMediaLayout = {\n dimensions: IMediaDimensions;\n sides: number;\n};\ntype ILayoutParams = {\n ratios: number[];\n proportions: string;\n averageRatio: number;\n maxWidth: number;\n minWidth: number;\n maxHeight: number;\n spacing: number;\n};\nexport type IAlbumLayout = {\n layout: IMediaLayout[];\n containerStyle: ApiDimensions;\n};\n\nfunction getRatios(messages: ApiMessage[]) {\n return messages.map(\n (message) => {\n const dimensions = calculateMediaDimensions(message) as ApiDimensions;\n\n return dimensions.width / dimensions.height;\n },\n );\n}\n\nfunction getProportions(ratios: number[]) {\n return ratios.map((ratio) => (ratio > 1.2 ? 'w' : (ratio < 0.8 ? 'n' : 'q'))).join('');\n}\n\nfunction getAverageRatio(ratios: number[]) {\n return ratios.reduce((result, ratio) => ratio + result, 1) / ratios.length;\n}\n\nfunction accumulate(list: number[], initValue: number) {\n return list.reduce((accumulator, item) => accumulator + item, initValue);\n}\n\nfunction clamp(num: number, low: number, high: number) {\n return num < low ? low : (num > high ? high : num);\n}\n\nfunction cropRatios(ratios: number[], averageRatio: number) {\n return ratios.map((ratio) => (averageRatio > 1.1 ? clamp(ratio, 1, 2.75) : clamp(ratio, 0.6667, 1)));\n}\n\nfunction calculateContainerSize(layout: IMediaLayout[]) {\n const styles: ApiDimensions = { width: 0, height: 0 };\n layout.forEach(({\n dimensions,\n sides,\n }) => {\n if (sides & AlbumRectPart.Right) {\n styles.width = dimensions.width + dimensions.x;\n }\n if (sides & AlbumRectPart.Bottom) {\n styles.height = dimensions.height + dimensions.y;\n }\n });\n\n return styles;\n}\n\nexport function calculateAlbumLayout(\n isOwn: boolean,\n isForwarded: boolean,\n noAvatars: boolean,\n album: IAlbum,\n): IAlbumLayout {\n const spacing = 2;\n const ratios = getRatios(album.messages);\n const proportions = getProportions(ratios);\n const averageRatio = getAverageRatio(ratios);\n const albumCount = ratios.length;\n const forceCalc = ratios.some((ratio) => ratio > 2);\n const maxWidth = getAvailableWidth(isOwn, isForwarded, false, noAvatars) - (isForwarded ? 2.5 : 0) * REM;\n const maxHeight = maxWidth;\n\n let layout;\n\n const params = {\n ratios,\n proportions,\n averageRatio,\n maxWidth,\n minWidth: 100,\n maxHeight,\n spacing,\n };\n\n if (albumCount >= 5 || forceCalc) {\n layout = layoutWithComplexLayouter(params);\n } else if (albumCount === 2) {\n layout = layoutTwo(params);\n } else if (albumCount === 3) {\n layout = layoutThree(params);\n } else {\n layout = layoutFour(params);\n }\n\n return {\n layout,\n containerStyle: calculateContainerSize(layout),\n };\n}\n\nfunction layoutWithComplexLayouter({\n ratios: originalRatios,\n averageRatio,\n maxWidth,\n minWidth,\n spacing,\n maxHeight = (4 * maxWidth) / 3,\n}: ILayoutParams) {\n const ratios = cropRatios(originalRatios, averageRatio);\n const count = originalRatios.length;\n const result = new Array(count);\n const attempts: IAttempt[] = [];\n\n const multiHeight = (offset: number, attemptCount: number) => {\n const attemptRatios = ratios.slice(offset, offset + attemptCount);\n const sum = accumulate(attemptRatios, 0);\n\n return (maxWidth - (attemptCount - 1) * spacing) / sum;\n };\n\n const pushAttempt = (lineCounts: number[]) => {\n const heights: number[] = [];\n let offset = 0;\n lineCounts.forEach((currentCount) => {\n heights.push(multiHeight(offset, currentCount));\n offset += currentCount;\n });\n\n attempts.push({\n lineCounts,\n heights,\n });\n };\n\n for (let first = 1; first !== count; ++first) {\n const second = count - first;\n if (first <= 3 && second <= 3) {\n pushAttempt([first, second]);\n }\n }\n\n for (let first = 1; first !== count - 1; ++first) {\n for (let second = 1; second !== count - first; ++second) {\n const third = count - first - second;\n if (first <= 3 && second <= (averageRatio < 0.85 ? 4 : 3) && third <= 3) {\n pushAttempt([first, second, third]);\n }\n }\n }\n\n for (let first = 1; first !== count - 1; ++first) {\n for (let second = 1; second !== count - first; ++second) {\n for (let third = 1; third !== count - first - second; ++third) {\n const fourth = count - first - second - third;\n if (first <= 3 && second <= 3 && third <= 3 && fourth <= 4) {\n pushAttempt([first, second, third, fourth]);\n }\n }\n }\n }\n\n let optimalAttempt: IAttempt | undefined;\n let optimalDiff = 0;\n for (let i = 0; i < attempts.length; i++) {\n const {\n heights,\n lineCounts,\n } = attempts[i];\n const lineCount = lineCounts.length;\n const totalHeight = accumulate(heights, 0) + spacing * (lineCount - 1);\n const minLineHeight = Math.min(...heights);\n const bad1 = minLineHeight < minWidth ? 1.5 : 1;\n const bad2 = (() => {\n for (let line = 1; line !== lineCount; ++line) {\n if (lineCounts[line - 1] > lineCounts[line]) {\n return 1.5;\n }\n }\n\n return 1;\n })();\n const diff = Math.abs(totalHeight - maxHeight) * bad1 * bad2;\n\n if (!optimalAttempt || diff < optimalDiff) {\n optimalAttempt = attempts[i];\n optimalDiff = diff;\n }\n }\n\n const optimalCounts = optimalAttempt!.lineCounts;\n const optimalHeights = optimalAttempt!.heights;\n const rowCount = optimalCounts.length;\n let index = 0;\n let y = 0;\n for (let row = 0; row !== rowCount; ++row) {\n const colCount = optimalCounts[row];\n const lineHeight = optimalHeights[row];\n const height = Math.round(lineHeight);\n let x = 0;\n\n for (let col = 0; col !== colCount; ++col) {\n const sides = AlbumRectPart.None\n | (row === 0 ? AlbumRectPart.Top : AlbumRectPart.None)\n | (row === rowCount - 1 ? AlbumRectPart.Bottom : AlbumRectPart.None)\n | (col === 0 ? AlbumRectPart.Left : AlbumRectPart.None)\n | (col === colCount - 1 ? AlbumRectPart.Right : AlbumRectPart.None);\n const ratio = ratios[index];\n const width = col === colCount - 1 ? maxWidth - x : Math.round(ratio * lineHeight);\n result[index] = {\n dimensions: {\n x,\n y,\n width,\n height,\n },\n sides,\n };\n x += width + spacing;\n ++index;\n }\n y += height + spacing;\n }\n\n return result;\n}\n\nfunction layoutTwo(params: ILayoutParams) {\n const {\n ratios,\n proportions,\n averageRatio,\n } = params;\n return proportions === 'ww' && averageRatio > 1.4 && ratios[1] - ratios[0] < 0.2\n ? layoutTwoTopBottom(params)\n : proportions === 'ww' || proportions === 'qq'\n ? layoutTwoLeftRightEqual(params)\n : layoutTwoLeftRight(params);\n}\n\nfunction layoutTwoTopBottom(params: ILayoutParams) {\n const {\n ratios,\n maxWidth,\n spacing,\n maxHeight,\n } = params;\n const height = Math.round(Math.min(maxWidth / ratios[0], Math.min(maxWidth / ratios[1], (maxHeight - spacing) / 2)));\n\n return [{\n dimensions: {\n x: 0,\n y: 0,\n width: maxWidth,\n height,\n },\n sides: AlbumRectPart.Left | AlbumRectPart.Top | AlbumRectPart.Right,\n }, {\n dimensions: {\n x: 0,\n y: height + spacing,\n width: maxWidth,\n height,\n },\n sides: AlbumRectPart.Left | AlbumRectPart.Bottom | AlbumRectPart.Right,\n }];\n}\n\nfunction layoutTwoLeftRightEqual(params: ILayoutParams) {\n const {\n ratios,\n maxWidth,\n spacing,\n maxHeight,\n } = params;\n const width = (maxWidth - spacing) / 2;\n const height = Math.round(Math.min(width / ratios[0], Math.min(width / ratios[1], maxHeight)));\n return [{\n dimensions: {\n x: 0,\n y: 0,\n width,\n height,\n },\n sides: AlbumRectPart.Top | AlbumRectPart.Left | AlbumRectPart.Bottom,\n }, {\n dimensions: {\n x: width + spacing,\n y: 0,\n width,\n height,\n },\n sides: AlbumRectPart.Top | AlbumRectPart.Right | AlbumRectPart.Bottom,\n }];\n}\n\nfunction layoutTwoLeftRight(params: ILayoutParams) {\n const {\n ratios,\n minWidth,\n maxWidth,\n spacing,\n maxHeight,\n } = params;\n const minimalWidth = Math.round(1.5 * minWidth);\n const secondWidth = Math.min(\n Math.round(\n Math.max(\n 0.4 * (maxWidth - spacing),\n (maxWidth - spacing) / ratios[0] / (1 / ratios[0] + 1 / ratios[1]),\n ),\n ),\n maxWidth - spacing - minimalWidth,\n );\n const firstWidth = maxWidth - secondWidth - spacing;\n const height = Math.min(maxHeight, Math.round(Math.min(firstWidth / ratios[0], secondWidth / ratios[1])));\n\n return [{\n dimensions: {\n x: 0,\n y: 0,\n width: firstWidth,\n height,\n },\n sides: AlbumRectPart.Top | AlbumRectPart.Left | AlbumRectPart.Bottom,\n }, {\n dimensions: {\n x: firstWidth + spacing,\n y: 0,\n width: secondWidth,\n height,\n },\n sides: AlbumRectPart.Top | AlbumRectPart.Right | AlbumRectPart.Bottom,\n }];\n}\n\nfunction layoutThree(params: ILayoutParams) {\n const { proportions } = params;\n\n return proportions[0] === 'n'\n ? layoutThreeLeftAndOther(params)\n : layoutThreeTopAndOther(params);\n}\n\nfunction layoutThreeLeftAndOther(params: ILayoutParams) {\n const {\n maxHeight,\n spacing,\n ratios,\n maxWidth,\n minWidth,\n } = params;\n const firstHeight = maxHeight;\n const thirdHeight = Math.round(\n Math.min(\n (maxHeight - spacing) / 2,\n (ratios[1] * (maxWidth - spacing)) / (ratios[2] + ratios[1]),\n ),\n );\n const secondHeight = firstHeight - thirdHeight - spacing;\n const rightWidth = Math.max(\n minWidth,\n Math.round(\n Math.min(\n (maxWidth - spacing) / 2,\n Math.min(\n thirdHeight * ratios[2],\n secondHeight * ratios[1],\n ),\n ),\n ),\n );\n const leftWidth = Math.min(Math.round(firstHeight * ratios[0]), maxWidth - spacing - rightWidth);\n\n return [{\n dimensions: {\n x: 0,\n y: 0,\n width: leftWidth,\n height: firstHeight,\n },\n sides: AlbumRectPart.Top | AlbumRectPart.Left | AlbumRectPart.Bottom,\n }, {\n dimensions: {\n x: leftWidth + spacing,\n y: 0,\n width: rightWidth,\n height: secondHeight,\n },\n sides: AlbumRectPart.Top | AlbumRectPart.Right,\n }, {\n dimensions: {\n x: leftWidth + spacing,\n y: secondHeight + spacing,\n width: rightWidth,\n height: thirdHeight,\n },\n sides: AlbumRectPart.Bottom | AlbumRectPart.Right,\n }];\n}\n\nfunction layoutThreeTopAndOther(params: ILayoutParams) {\n const {\n maxWidth,\n ratios,\n maxHeight,\n spacing,\n } = params;\n const firstWidth = maxWidth;\n const firstHeight = Math.round(Math.min(firstWidth / ratios[0], 0.66 * (maxHeight - spacing)));\n const secondWidth = (maxWidth - spacing) / 2;\n const secondHeight = Math.min(\n maxHeight - firstHeight - spacing,\n Math.round(Math.min(\n secondWidth / ratios[1],\n secondWidth / ratios[2],\n )),\n );\n const thirdWidth = firstWidth - secondWidth - spacing;\n\n return [{\n dimensions: {\n x: 0,\n y: 0,\n width: firstWidth,\n height: firstHeight,\n },\n sides: AlbumRectPart.Left | AlbumRectPart.Top | AlbumRectPart.Right,\n }, {\n dimensions: {\n x: 0,\n y: firstHeight + spacing,\n width: secondWidth,\n height: secondHeight,\n },\n sides: AlbumRectPart.Bottom | AlbumRectPart.Left,\n }, {\n dimensions: {\n x: secondWidth + spacing,\n y: firstHeight + spacing,\n width: thirdWidth,\n height: secondHeight,\n },\n sides: AlbumRectPart.Bottom | AlbumRectPart.Right,\n }];\n}\n\nfunction layoutFour(params: ILayoutParams) {\n const { proportions } = params;\n\n return proportions[0] === 'w'\n ? layoutFourTopAndOther(params)\n : layoutFourLeftAndOther(params);\n}\n\nfunction layoutFourTopAndOther({\n maxWidth,\n ratios,\n spacing,\n maxHeight,\n minWidth,\n}: ILayoutParams) {\n const w = maxWidth;\n const h0 = Math.round(Math.min(w / ratios[0], 0.66 * (maxHeight - spacing)));\n const h = Math.round((maxWidth - 2 * spacing) / (ratios[1] + ratios[2] + ratios[3]));\n const w0 = Math.max(minWidth, Math.round(Math.min(0.4 * (maxWidth - 2 * spacing), h * ratios[1])));\n const w2 = Math.round(Math.max(Math.max(minWidth, 0.33 * (maxWidth - 2 * spacing)), h * ratios[3]));\n const w1 = w - w0 - w2 - 2 * spacing;\n const h1 = Math.min(maxHeight - h0 - spacing, h);\n\n return [{\n dimensions: {\n x: 0,\n y: 0,\n width: w,\n height: h0,\n },\n sides: AlbumRectPart.Left | AlbumRectPart.Top | AlbumRectPart.Right,\n }, {\n dimensions: {\n x: 0,\n y: h0 + spacing,\n width: w0,\n height: h1,\n },\n sides: AlbumRectPart.Bottom | AlbumRectPart.Left,\n }, {\n dimensions: {\n x: w0 + spacing,\n y: h0 + spacing,\n width: w1,\n height: h1,\n },\n sides: AlbumRectPart.Bottom,\n }, {\n dimensions: {\n x: w0 + spacing + w1 + spacing,\n y: h0 + spacing,\n width: w2,\n height: h1,\n },\n sides: AlbumRectPart.Right | AlbumRectPart.Bottom,\n }];\n}\n\nfunction layoutFourLeftAndOther({\n maxHeight,\n ratios,\n maxWidth,\n spacing,\n minWidth,\n}: ILayoutParams) {\n const h = maxHeight;\n const w0 = Math.round(Math.min(h * ratios[0], 0.6 * (maxWidth - spacing)));\n const w = Math.round((maxHeight - 2 * spacing) / (1 / ratios[1] + 1 / ratios[2] + 1 / ratios[3]));\n const h0 = Math.round(w / ratios[1]);\n const h1 = Math.round(w / ratios[2]);\n const h2 = h - h0 - h1 - 2 * spacing;\n const w1 = Math.max(minWidth, Math.min(maxWidth - w0 - spacing, w));\n\n return [{\n dimensions: {\n x: 0,\n y: 0,\n width: w0,\n height: h,\n },\n sides: AlbumRectPart.Top | AlbumRectPart.Left | AlbumRectPart.Bottom,\n }, {\n dimensions: {\n x: w0 + spacing,\n y: 0,\n width: w1,\n height: h0,\n },\n sides: AlbumRectPart.Top | AlbumRectPart.Right,\n }, {\n dimensions: {\n x: w0 + spacing,\n y: h0 + spacing,\n width: w1,\n height: h1,\n },\n sides: AlbumRectPart.Right,\n }, {\n dimensions: {\n x: w0 + spacing,\n y: h0 + h1 + 2 * spacing,\n width: w1,\n height: h2,\n },\n sides: AlbumRectPart.Bottom | AlbumRectPart.Right,\n }];\n}\n","import { IS_IOS } from '../../../../util/environment';\n\nlet element: HTMLSpanElement | undefined;\n\nexport default function calculateAuthorWidth(text: string) {\n if (!element) {\n element = document.createElement('span');\n // eslint-disable-next-line max-len\n element.style.font = IS_IOS\n // eslint-disable-next-line max-len\n ? '400 12px system-ui, -apple-system, BlinkMacSystemFont, \"Roboto\", \"Apple Color Emoji\", \"Helvetica Neue\", sans-serif'\n : '400 12px \"Roboto\", -apple-system, \"Apple Color Emoji\", BlinkMacSystemFont, \"Helvetica Neue\", sans-serif';\n element.style.whiteSpace = 'nowrap';\n element.style.position = 'absolute';\n element.style.left = '-999px';\n element.style.opacity = '.01';\n document.body.appendChild(element);\n }\n\n element.innerHTML = text;\n\n return element.offsetWidth;\n}\n","import { FocusDirection } from '../../../../types';\n\nimport { useLayoutEffect } from '../../../../lib/teact/teact';\nimport fastSmoothScroll from '../../../../util/fastSmoothScroll';\n\n// This is used when the viewport was replaced.\nconst RELOCATED_FOCUS_OFFSET = 1000;\nconst FOCUS_MARGIN = 20;\n\nexport default function useFocusMessage(\n elementRef: { current: HTMLDivElement | null },\n chatId: string,\n isFocused?: boolean,\n focusDirection?: FocusDirection,\n noFocusHighlight?: boolean,\n isResizingContainer?: boolean,\n) {\n useLayoutEffect(() => {\n if (isFocused && elementRef.current) {\n const messagesContainer = elementRef.current.closest('.MessageList')!;\n\n fastSmoothScroll(\n messagesContainer,\n elementRef.current,\n // `noFocusHighlight` always called from “scroll-to-bottom” buttons\n noFocusHighlight ? 'end' : 'centerOrTop',\n FOCUS_MARGIN,\n focusDirection !== undefined ? RELOCATED_FOCUS_OFFSET : undefined,\n focusDirection,\n undefined,\n isResizingContainer,\n );\n }\n }, [elementRef, chatId, isFocused, focusDirection, noFocusHighlight, isResizingContainer]);\n}\n","import { RefObject } from 'react';\nimport React, { useEffect, useRef } from '../../../../lib/teact/teact';\nimport { getActions } from '../../../../global';\n\nimport { IS_ANDROID, IS_TOUCH_ENV } from '../../../../util/environment';\nimport windowSize from '../../../../util/windowSize';\nimport { captureEvents, SwipeDirection } from '../../../../util/captureEvents';\nimport useFlag from '../../../../hooks/useFlag';\nimport { preventMessageInputBlur } from '../../helpers/preventMessageInputBlur';\nimport stopEvent from '../../../../util/stopEvent';\nimport { REM } from '../../../common/helpers/mediaDimensions';\n\nconst ANDROID_KEYBOARD_HIDE_DELAY_MS = 350;\nconst SWIPE_ANIMATION_DURATION = 150;\nconst QUICK_REACTION_DOUBLE_TAP_DELAY = 200;\nconst QUICK_REACTION_AREA_WIDTH = 3 * REM;\nconst QUICK_REACTION_AREA_HEIGHT = Number(REM);\nconst GROUP_MESSAGE_HOVER_ATTRIBUTE = 'data-is-document-group-hover';\n\nexport default function useOuterHandlers(\n selectMessage: (e?: React.MouseEvent, groupedId?: string) => void,\n containerRef: RefObject,\n messageId: number,\n isAlbum: boolean,\n isInSelectMode: boolean,\n canReply: boolean,\n isProtected: boolean,\n onContextMenu: (e: React.MouseEvent) => void,\n handleBeforeContextMenu: (e: React.MouseEvent) => void,\n chatId: string,\n isContextMenuShown: boolean,\n contentRef: RefObject,\n isOwn: boolean,\n shouldHandleMouseLeave: boolean,\n) {\n const { setReplyingToId, sendDefaultReaction } = getActions();\n\n const [isQuickReactionVisible, markQuickReactionVisible, unmarkQuickReactionVisible] = useFlag();\n const [isSwiped, markSwiped, unmarkSwiped] = useFlag();\n const doubleTapTimeoutRef = useRef();\n\n function handleMouseDown(e: React.MouseEvent) {\n preventMessageInputBlur(e);\n handleBeforeContextMenu(e);\n }\n\n function handleMouseMove(e: React.MouseEvent) {\n const container = contentRef.current;\n if (!container) return;\n\n const { clientX, clientY } = e;\n const {\n x, width, y, height,\n } = container.getBoundingClientRect();\n\n const isVisibleX = Math.abs((isOwn ? (clientX - x) : (x + width - clientX))) < QUICK_REACTION_AREA_WIDTH;\n const isVisibleY = Math.abs(y + height - clientY) < QUICK_REACTION_AREA_HEIGHT;\n if (isVisibleX && isVisibleY) {\n markQuickReactionVisible();\n } else {\n unmarkQuickReactionVisible();\n }\n }\n\n function handleSendQuickReaction(e: React.MouseEvent) {\n const { x, y } = e.currentTarget.getBoundingClientRect();\n sendDefaultReaction({\n chatId,\n messageId,\n x,\n y,\n });\n }\n\n function handleTap(e: React.MouseEvent) {\n if (IS_ANDROID) {\n const target = e.target as HTMLDivElement;\n if (!target.classList.contains('text-content') && !target.classList.contains('Message')) {\n return;\n }\n\n if (windowSize.getIsKeyboardVisible()) {\n setTimeout(() => {\n onContextMenu(e);\n }, ANDROID_KEYBOARD_HIDE_DELAY_MS);\n } else {\n onContextMenu(e);\n }\n }\n }\n\n function handleDoubleTap(e: React.MouseEvent) {\n const { pageX: x, pageY: y } = e;\n\n sendDefaultReaction({\n chatId,\n messageId,\n x,\n y,\n });\n }\n\n function handleClick(e: React.MouseEvent) {\n if (isInSelectMode) {\n selectMessage(e);\n return;\n }\n\n if (!IS_TOUCH_ENV) return;\n\n if (doubleTapTimeoutRef.current) {\n clearInterval(doubleTapTimeoutRef.current);\n doubleTapTimeoutRef.current = undefined;\n handleDoubleTap(e);\n return;\n }\n\n doubleTapTimeoutRef.current = setTimeout(() => {\n doubleTapTimeoutRef.current = undefined;\n handleTap(e);\n }, QUICK_REACTION_DOUBLE_TAP_DELAY);\n }\n\n function handleContextMenu(e: React.MouseEvent) {\n if (IS_ANDROID) {\n if ((e.target as HTMLElement).matches('a[href]') || isContextMenuShown) {\n return;\n }\n\n e.preventDefault();\n selectMessage();\n } else {\n onContextMenu(e);\n }\n }\n\n function handleContainerDoubleClick() {\n if (IS_TOUCH_ENV) return;\n\n setReplyingToId({ messageId });\n }\n\n function stopPropagation(e: React.MouseEvent) {\n e.stopPropagation();\n }\n\n useEffect(() => {\n if (!IS_TOUCH_ENV || isInSelectMode || !canReply || isContextMenuShown) {\n return undefined;\n }\n\n let startedAt: number | undefined;\n return captureEvents(containerRef.current!, {\n selectorToPreventScroll: '.MessageList',\n onSwipe: ((e, direction) => {\n if (direction === SwipeDirection.Left) {\n if (!startedAt) {\n startedAt = Date.now();\n }\n\n markSwiped();\n\n return true;\n }\n\n return false;\n }),\n onRelease: () => {\n if (!startedAt) {\n return;\n }\n\n setReplyingToId({ messageId });\n\n setTimeout(unmarkSwiped, Math.max(0, SWIPE_ANIMATION_DURATION - (Date.now() - startedAt)));\n startedAt = undefined;\n },\n });\n }, [\n containerRef, isInSelectMode, messageId, setReplyingToId, markSwiped, unmarkSwiped, canReply, isContextMenuShown,\n ]);\n\n function handleMouseLeave(e: React.MouseEvent) {\n unmarkQuickReactionVisible();\n if (shouldHandleMouseLeave) handleDocumentGroupMouseLeave(e);\n }\n\n return {\n handleMouseDown: !isInSelectMode ? handleMouseDown : undefined,\n handleClick,\n handleContextMenu: !isInSelectMode ? handleContextMenu : (isProtected ? stopEvent : undefined),\n handleDoubleClick: !isInSelectMode ? handleContainerDoubleClick : undefined,\n handleContentDoubleClick: !IS_TOUCH_ENV ? stopPropagation : undefined,\n handleMouseMove,\n handleSendQuickReaction,\n handleMouseLeave,\n isSwiped,\n isQuickReactionVisible,\n handleDocumentGroupMouseEnter,\n };\n}\n\nfunction handleDocumentGroupMouseEnter(e: React.MouseEvent) {\n const lastGroupElement = getLastElementInDocumentGroup(e.currentTarget);\n if (lastGroupElement) {\n lastGroupElement.setAttribute(GROUP_MESSAGE_HOVER_ATTRIBUTE, '');\n }\n}\n\nfunction handleDocumentGroupMouseLeave(e: React.MouseEvent) {\n const lastGroupElement = getLastElementInDocumentGroup(e.currentTarget);\n if (lastGroupElement) {\n lastGroupElement.removeAttribute(GROUP_MESSAGE_HOVER_ATTRIBUTE);\n }\n}\n\nfunction getLastElementInDocumentGroup(element: Element) {\n let current: Element | null = element;\n\n do {\n current = current.nextElementSibling;\n } while (current && !current.classList.contains('last-in-document-group'));\n\n return current;\n}\n","import React, { FC, memo } from '../../../lib/teact/teact';\nimport { OwnProps } from './ContextMenuContainer';\nimport { Bundles } from '../../../util/moduleLoader';\n\nimport useModuleLoader from '../../../hooks/useModuleLoader';\n\nconst ContextMenuContainerAsync: FC = (props) => {\n const { isOpen } = props;\n const ContextMenuContainer = useModuleLoader(Bundles.Extra, 'ContextMenuContainer', !isOpen);\n\n // eslint-disable-next-line react/jsx-props-no-spreading\n return ContextMenuContainer ? : undefined;\n};\n\nexport default memo(ContextMenuContainerAsync);\n","import React, {\n FC, memo, useEffect, useMemo, useRef,\n} from '../../lib/teact/teact';\nimport { withGlobal } from '../../global';\n\nimport { ApiUser, ApiMessage, ApiChat } from '../../api/types';\nimport { FocusDirection } from '../../types';\n\nimport {\n selectUser,\n selectChatMessage,\n selectIsMessageFocused,\n selectChat,\n} from '../../global/selectors';\nimport { getMessageHtmlId, isChatChannel } from '../../global/helpers';\nimport buildClassName from '../../util/buildClassName';\nimport { renderActionMessageText } from '../common/helpers/renderActionMessageText';\nimport useEnsureMessage from '../../hooks/useEnsureMessage';\nimport useContextMenuHandlers from '../../hooks/useContextMenuHandlers';\nimport { ObserveFn, useOnIntersect } from '../../hooks/useIntersectionObserver';\nimport useFocusMessage from './message/hooks/useFocusMessage';\nimport useLang from '../../hooks/useLang';\n\nimport ContextMenuContainer from './message/ContextMenuContainer.async';\nimport useFlag from '../../hooks/useFlag';\nimport useShowTransition from '../../hooks/useShowTransition';\nimport { preventMessageInputBlur } from './helpers/preventMessageInputBlur';\n\ntype OwnProps = {\n message: ApiMessage;\n observeIntersection?: ObserveFn;\n isEmbedded?: boolean;\n appearanceOrder?: number;\n isLastInList?: boolean;\n};\n\ntype StateProps = {\n usersById: Record;\n senderUser?: ApiUser;\n senderChat?: ApiChat;\n targetUserIds?: string[];\n targetMessage?: ApiMessage;\n targetChatId?: string;\n isFocused: boolean;\n focusDirection?: FocusDirection;\n noFocusHighlight?: boolean;\n};\n\nconst APPEARANCE_DELAY = 10;\n\nconst ActionMessage: FC = ({\n message,\n observeIntersection,\n isEmbedded,\n appearanceOrder = 0,\n isLastInList,\n usersById,\n senderUser,\n senderChat,\n targetUserIds,\n targetMessage,\n targetChatId,\n isFocused,\n focusDirection,\n noFocusHighlight,\n}) => {\n // eslint-disable-next-line no-null/no-null\n const ref = useRef(null);\n\n useOnIntersect(ref, observeIntersection);\n useEnsureMessage(message.chatId, message.replyToMessageId, targetMessage);\n useFocusMessage(ref, message.chatId, isFocused, focusDirection, noFocusHighlight);\n\n const lang = useLang();\n\n const noAppearanceAnimation = appearanceOrder <= 0;\n const [isShown, markShown] = useFlag(noAppearanceAnimation);\n useEffect(() => {\n if (noAppearanceAnimation) {\n return;\n }\n\n setTimeout(markShown, appearanceOrder * APPEARANCE_DELAY);\n }, [appearanceOrder, markShown, noAppearanceAnimation]);\n const { transitionClassNames } = useShowTransition(isShown, undefined, noAppearanceAnimation, false);\n\n const targetUsers = useMemo(() => {\n return targetUserIds\n ? targetUserIds.map((userId) => usersById?.[userId]).filter(Boolean as any)\n : undefined;\n }, [targetUserIds, usersById]);\n\n const content = renderActionMessageText(\n lang,\n message,\n senderUser,\n senderChat,\n targetUsers,\n targetMessage,\n targetChatId,\n { asTextWithSpoilers: isEmbedded },\n );\n const {\n isContextMenuOpen, contextMenuPosition,\n handleBeforeContextMenu, handleContextMenu,\n handleContextMenuClose, handleContextMenuHide,\n } = useContextMenuHandlers(ref);\n const isContextMenuShown = contextMenuPosition !== undefined;\n\n const handleMouseDown = (e: React.MouseEvent) => {\n preventMessageInputBlur(e);\n handleBeforeContextMenu(e);\n };\n\n if (isEmbedded) {\n return {content};\n }\n\n const className = buildClassName(\n 'ActionMessage message-list-item',\n isFocused && !noFocusHighlight && 'focused',\n isContextMenuShown && 'has-menu-open',\n isLastInList && 'last-in-list',\n transitionClassNames,\n );\n\n return (\n \n {content}\n {contextMenuPosition && (\n \n )}\n
\n );\n};\n\nexport default memo(withGlobal(\n (global, { message }): StateProps => {\n const { byId: usersById } = global.users;\n const userId = message.senderId;\n const { targetUserIds, targetChatId } = message.content.action || {};\n const targetMessageId = message.replyToMessageId;\n const targetMessage = targetMessageId\n ? selectChatMessage(global, message.chatId, targetMessageId)\n : undefined;\n\n const isFocused = selectIsMessageFocused(global, message);\n const { direction: focusDirection, noHighlight: noFocusHighlight } = (isFocused && global.focusedMessage) || {};\n\n const chat = selectChat(global, message.chatId);\n const isChat = chat && (isChatChannel(chat) || userId === message.chatId);\n const senderUser = !isChat && userId ? selectUser(global, userId) : undefined;\n const senderChat = isChat ? chat : undefined;\n\n return {\n usersById,\n senderUser,\n senderChat,\n targetChatId,\n targetUserIds,\n targetMessage,\n isFocused,\n ...(isFocused && { focusDirection, noFocusHighlight }),\n };\n },\n)(ActionMessage));\n","import React, { FC, useRef } from '../../lib/teact/teact';\n\nimport { ApiUser, ApiMessage, ApiChat } from '../../api/types';\n\nimport {\n getMessageMediaHash,\n isActionMessage,\n getSenderTitle,\n getMessageRoundVideo,\n} from '../../global/helpers';\nimport renderText from './helpers/renderText';\nimport { getPictogramDimensions } from './helpers/mediaDimensions';\nimport buildClassName from '../../util/buildClassName';\nimport { ObserveFn, useIsIntersecting } from '../../hooks/useIntersectionObserver';\nimport useMedia from '../../hooks/useMedia';\nimport useWebpThumbnail from '../../hooks/useWebpThumbnail';\nimport useLang from '../../hooks/useLang';\nimport { renderMessageSummary } from './helpers/renderMessageText';\n\nimport ActionMessage from '../middle/ActionMessage';\n\nimport './EmbeddedMessage.scss';\n\ntype OwnProps = {\n observeIntersection?: ObserveFn;\n className?: string;\n message?: ApiMessage;\n sender?: ApiUser | ApiChat;\n title?: string;\n customText?: string;\n isProtected?: boolean;\n onClick: NoneToVoidFunction;\n};\n\nconst NBSP = '\\u00A0';\n\nconst EmbeddedMessage: FC = ({\n className,\n message,\n sender,\n title,\n customText,\n isProtected,\n observeIntersection,\n onClick,\n}) => {\n // eslint-disable-next-line no-null/no-null\n const ref = useRef(null);\n const isIntersecting = useIsIntersecting(ref, observeIntersection);\n\n const mediaBlobUrl = useMedia(message && getMessageMediaHash(message, 'pictogram'), !isIntersecting);\n const mediaThumbnail = useWebpThumbnail(message);\n const isRoundVideo = Boolean(message && getMessageRoundVideo(message));\n\n const lang = useLang();\n\n const senderTitle = message?.forwardInfo?.hiddenUserName || (sender && getSenderTitle(lang, sender));\n\n return (\n \n {mediaThumbnail && renderPictogram(mediaThumbnail, mediaBlobUrl, isRoundVideo, isProtected)}\n
\n

\n {!message ? (\n customText || NBSP\n ) : isActionMessage(message) ? (\n \n ) : (\n renderMessageSummary(lang, message, Boolean(mediaThumbnail))\n )}\n

\n
{renderText(senderTitle || title || NBSP)}
\n
\n \n );\n};\n\nfunction renderPictogram(\n thumbDataUri: string,\n blobUrl?: string,\n isRoundVideo?: boolean,\n isProtected?: boolean,\n) {\n const { width, height } = getPictogramDimensions();\n\n return (\n <>\n \n {isProtected && }\n \n );\n}\n\nexport default EmbeddedMessage;\n","import React, { FC, memo, useCallback } from '../../../lib/teact/teact';\nimport { getActions } from '../../../global';\n\nimport { ActiveReaction } from '../../../global/types';\nimport { ApiAvailableReaction, ApiMediaFormat } from '../../../api/types';\n\nimport buildClassName from '../../../util/buildClassName';\nimport useMedia from '../../../hooks/useMedia';\nimport useShowTransition from '../../../hooks/useShowTransition';\nimport useFlag from '../../../hooks/useFlag';\n\nimport ReactionStaticEmoji from '../../common/ReactionStaticEmoji';\nimport AnimatedSticker from '../../common/AnimatedSticker';\n\nimport './ReactionAnimatedEmoji.scss';\n\ntype OwnProps = {\n reaction: string;\n activeReaction?: ActiveReaction;\n isInMeta?: boolean;\n availableReactions?: ApiAvailableReaction[];\n};\n\nconst CENTER_ICON_SIZE = 30;\nconst EFFECT_SIZE = 100;\n\nconst ReactionAnimatedEmoji: FC = ({\n reaction,\n activeReaction,\n isInMeta,\n availableReactions,\n}) => {\n const { stopActiveReaction } = getActions();\n\n const availableReaction = availableReactions?.find((r) => r.reaction === reaction);\n const centerIconId = availableReaction?.centerIcon?.id;\n const effectId = availableReaction?.aroundAnimation?.id;\n const mediaDataCenterIcon = useMedia(`sticker${centerIconId}`, !centerIconId, ApiMediaFormat.Lottie);\n const mediaDataEffect = useMedia(`sticker${effectId}`, !effectId, ApiMediaFormat.Lottie);\n\n const shouldPlay = Boolean(activeReaction?.reaction === reaction && mediaDataCenterIcon && mediaDataEffect);\n const {\n shouldRender: shouldRenderAnimation,\n transitionClassNames: animationClassNames,\n } = useShowTransition(shouldPlay, undefined, true, 'slow');\n\n const handleEnded = useCallback(() => {\n stopActiveReaction({ messageId: activeReaction?.messageId, reaction });\n }, [activeReaction?.messageId, reaction, stopActiveReaction]);\n\n const [isAnimationLoaded, markAnimationLoaded, unmarkAnimationLoaded] = useFlag();\n const shouldRenderStatic = !shouldPlay || !isAnimationLoaded;\n\n const className = buildClassName(\n 'ReactionAnimatedEmoji',\n isInMeta && 'in-meta',\n shouldRenderAnimation && 'is-animating',\n );\n\n return (\n
\n {shouldRenderStatic && }\n {shouldRenderAnimation && (\n <>\n \n \n \n )}\n
\n );\n};\n\nexport default memo(ReactionAnimatedEmoji);\n","import React, {\n FC, memo, useMemo,\n} from '../../../lib/teact/teact';\n\nimport { ApiAvailableReaction, ApiMessage, ApiMessageOutgoingStatus } from '../../../api/types';\nimport { ActiveReaction } from '../../../global/types';\n\nimport { formatDateTimeToString, formatTime } from '../../../util/dateFormat';\nimport { formatIntegerCompact } from '../../../util/textFormat';\n\nimport renderText from '../../common/helpers/renderText';\nimport useLang from '../../../hooks/useLang';\nimport useFlag from '../../../hooks/useFlag';\nimport buildClassName from '../../../util/buildClassName';\n\nimport MessageOutgoingStatus from '../../common/MessageOutgoingStatus';\nimport ReactionAnimatedEmoji from './ReactionAnimatedEmoji';\n\nimport './MessageMeta.scss';\n\ntype OwnProps = {\n message: ApiMessage;\n reactionMessage?: ApiMessage;\n withReactions?: boolean;\n withReactionOffset?: boolean;\n outgoingStatus?: ApiMessageOutgoingStatus;\n signature?: string;\n onClick: (e: React.MouseEvent) => void;\n activeReaction?: ActiveReaction;\n availableReactions?: ApiAvailableReaction[];\n};\n\nconst MessageMeta: FC = ({\n message, outgoingStatus, signature, onClick, withReactions,\n activeReaction, withReactionOffset, availableReactions,\n reactionMessage,\n}) => {\n const lang = useLang();\n const [isActivated, markActivated] = useFlag();\n\n const reactions = withReactions && reactionMessage?.reactions?.results.filter((l) => l.count > 0);\n\n const title = useMemo(() => {\n if (!isActivated) return undefined;\n const createDateTime = formatDateTimeToString(message.date * 1000, lang.code);\n const editDateTime = message.isEdited && formatDateTimeToString(message.editDate! * 1000, lang.code);\n const forwardedDateTime = message.forwardInfo && formatDateTimeToString(message.forwardInfo.date * 1000, lang.code);\n\n let text = createDateTime;\n if (editDateTime) {\n text += '\\n';\n text += lang('lng_edited_date').replace('{date}', editDateTime);\n }\n if (forwardedDateTime) {\n text += '\\n';\n text += lang('lng_forwarded_date').replace('{date}', forwardedDateTime);\n }\n\n return text;\n }, [isActivated, lang, message]);\n\n return (\n \n {reactions && reactions.map((l) => (\n \n ))}\n {Boolean(message.views) && (\n <>\n \n {formatIntegerCompact(message.views!)}\n \n \n \n )}\n {signature && (\n {renderText(signature)}\n )}\n \n {message.isEdited && `${lang('EditedMessage')} `}\n {formatTime(lang, message.date * 1000)}\n \n {outgoingStatus && (\n \n )}\n
\n );\n};\n\nexport default memo(MessageMeta);\n","import React, { FC, useEffect, useRef } from '../../../lib/teact/teact';\n\nimport { ApiMessage } from '../../../api/types';\n\nimport { NO_STICKER_SET_ID } from '../../../config';\nimport { getStickerDimensions } from '../../common/helpers/mediaDimensions';\nimport { getMessageMediaFormat, getMessageMediaHash } from '../../../global/helpers';\nimport buildClassName from '../../../util/buildClassName';\nimport { ObserveFn, useIsIntersecting } from '../../../hooks/useIntersectionObserver';\nimport useMedia from '../../../hooks/useMedia';\nimport useMediaTransition from '../../../hooks/useMediaTransition';\nimport useFlag from '../../../hooks/useFlag';\nimport useWebpThumbnail from '../../../hooks/useWebpThumbnail';\nimport safePlay from '../../../util/safePlay';\nimport { IS_WEBM_SUPPORTED } from '../../../util/environment';\n\nimport AnimatedSticker from '../../common/AnimatedSticker';\nimport StickerSetModal from '../../common/StickerSetModal.async';\n\nimport './Sticker.scss';\n\ntype OwnProps = {\n message: ApiMessage;\n observeIntersection: ObserveFn;\n observeIntersectionForPlaying: ObserveFn;\n shouldLoop?: boolean;\n lastSyncTime?: number;\n};\n\nconst Sticker: FC = ({\n message, observeIntersection, observeIntersectionForPlaying, shouldLoop, lastSyncTime,\n}) => {\n // eslint-disable-next-line no-null/no-null\n const ref = useRef(null);\n\n const [isModalOpen, openModal, closeModal] = useFlag();\n\n const sticker = message.content.sticker!;\n const { isLottie, stickerSetId, isVideo } = sticker;\n const canDisplayVideo = IS_WEBM_SUPPORTED;\n const isMemojiSticker = stickerSetId === NO_STICKER_SET_ID;\n\n const shouldLoad = useIsIntersecting(ref, observeIntersection);\n const shouldPlay = useIsIntersecting(ref, observeIntersectionForPlaying);\n\n const mediaHash = sticker.isPreloadedGlobally ? `sticker${sticker.id}` : getMessageMediaHash(message, 'inline')!;\n const previewMediaHash = isVideo && !canDisplayVideo && (\n sticker.isPreloadedGlobally ? `sticker${sticker.id}?size=m` : getMessageMediaHash(message, 'pictogram'));\n const previewBlobUrl = useMedia(previewMediaHash);\n const thumbDataUri = useWebpThumbnail(message);\n const previewUrl = previewBlobUrl || thumbDataUri;\n\n const mediaData = useMedia(\n mediaHash,\n !shouldLoad,\n getMessageMediaFormat(message, 'inline'),\n lastSyncTime,\n );\n\n const isMediaLoaded = Boolean(mediaData);\n const [isLottieLoaded, markLottieLoaded] = useFlag(isMediaLoaded);\n const isMediaReady = isLottie ? isLottieLoaded : isMediaLoaded;\n const transitionClassNames = useMediaTransition(isMediaReady);\n\n const { width, height } = getStickerDimensions(sticker);\n const thumbClassName = buildClassName('thumbnail', !thumbDataUri && 'empty');\n\n const stickerClassName = buildClassName(\n 'Sticker media-inner',\n isMemojiSticker && 'inactive',\n );\n\n useEffect(() => {\n if (!isVideo || !ref.current) return;\n const video = ref.current.querySelector('video');\n if (!video) return;\n if (shouldPlay) {\n safePlay(video);\n } else {\n video.pause();\n }\n }, [isVideo, shouldPlay]);\n\n return (\n
\n {(!isMediaReady || (isVideo && !canDisplayVideo)) && (\n \n )}\n {!isLottie && !isVideo && (\n \n )}\n {isVideo && canDisplayVideo && isMediaReady && (\n \n )}\n {isLottie && isMediaLoaded && (\n \n )}\n \n
\n );\n};\n\nexport default Sticker;\n","import { ApiMessage } from '../../../../api/types';\n\nimport { IS_CANVAS_FILTER_SUPPORTED, IS_SINGLE_COLUMN_LAYOUT } from '../../../../util/environment';\nimport { getMessageMediaThumbDataUri } from '../../../../global/helpers';\nimport useCanvasBlur from '../../../../hooks/useCanvasBlur';\n\nexport default function useBlurredMediaThumbRef(message: ApiMessage, fullMediaData?: string) {\n return useCanvasBlur(\n getMessageMediaThumbDataUri(message),\n Boolean(fullMediaData),\n IS_SINGLE_COLUMN_LAYOUT && !IS_CANVAS_FILTER_SUPPORTED,\n );\n}\n","import { ISettings } from '../../../../types';\n\nconst SELECTED_APPENDIX_COLORS = {\n dark: {\n outgoing: 'rgb(135,116,225)',\n incoming: 'rgb(33,33,33)',\n },\n light: {\n outgoing: 'rgb(238,255,222)',\n incoming: 'rgb(255,255,255)',\n },\n};\n\nexport default function getCustomAppendixBg(\n src: string, isOwn: boolean, inSelectMode?: boolean, isSelected?: boolean, theme?: ISettings['theme'],\n) {\n if (isSelected) {\n return Promise.resolve(SELECTED_APPENDIX_COLORS[theme || 'light'][isOwn ? 'outgoing' : 'incoming']);\n }\n return getAppendixColorFromImage(src, isOwn);\n}\n\nasync function getAppendixColorFromImage(src: string, isOwn: boolean) {\n const img = new Image();\n img.src = src;\n\n if (!img.width) {\n await new Promise((resolve) => {\n img.onload = resolve;\n });\n }\n\n const canvas = document.createElement('canvas');\n const ctx = canvas.getContext('2d')!;\n\n canvas.width = img.width;\n canvas.height = img.height;\n\n ctx.drawImage(img, 0, 0, img.width, img.height);\n\n const x = isOwn ? img.width - 1 : 0;\n const y = img.height - 1;\n\n const pixel = Array.from(ctx.getImageData(x, y, 1, 1).data);\n return `rgba(${pixel.join(',')})`;\n}\n","import React, {\n FC, useCallback, useLayoutEffect, useRef, useState,\n} from '../../../lib/teact/teact';\n\nimport { ApiMessage } from '../../../api/types';\nimport { ISettings } from '../../../types';\nimport { IMediaDimensions } from './helpers/calculateAlbumLayout';\n\nimport { CUSTOM_APPENDIX_ATTRIBUTE } from '../../../config';\nimport {\n getMessagePhoto,\n getMessageWebPagePhoto,\n getMessageMediaHash,\n getMediaTransferState,\n isOwnMessage,\n} from '../../../global/helpers';\nimport { ObserveFn, useIsIntersecting } from '../../../hooks/useIntersectionObserver';\nimport useMediaWithLoadProgress from '../../../hooks/useMediaWithLoadProgress';\nimport useShowTransition from '../../../hooks/useShowTransition';\nimport useBlurredMediaThumbRef from './hooks/useBlurredMediaThumbRef';\nimport usePrevious from '../../../hooks/usePrevious';\nimport useMediaTransition from '../../../hooks/useMediaTransition';\nimport buildClassName from '../../../util/buildClassName';\nimport getCustomAppendixBg from './helpers/getCustomAppendixBg';\nimport { calculateMediaDimensions } from './helpers/mediaDimensions';\n\nimport ProgressSpinner from '../../ui/ProgressSpinner';\n\nexport type OwnProps = {\n id?: string;\n message: ApiMessage;\n observeIntersection?: ObserveFn;\n noAvatars?: boolean;\n canAutoLoad?: boolean;\n isInSelectMode?: boolean;\n isSelected?: boolean;\n uploadProgress?: number;\n size?: 'inline' | 'pictogram';\n shouldAffectAppendix?: boolean;\n dimensions?: IMediaDimensions & { isSmall?: boolean };\n nonInteractive?: boolean;\n isDownloading: boolean;\n isProtected?: boolean;\n theme: ISettings['theme'];\n onClick?: (id: number) => void;\n onCancelUpload?: (message: ApiMessage) => void;\n};\n\nconst Photo: FC = ({\n id,\n message,\n observeIntersection,\n noAvatars,\n canAutoLoad,\n isInSelectMode,\n isSelected,\n uploadProgress,\n size = 'inline',\n dimensions,\n nonInteractive,\n shouldAffectAppendix,\n isDownloading,\n isProtected,\n theme,\n onClick,\n onCancelUpload,\n}) => {\n // eslint-disable-next-line no-null/no-null\n const ref = useRef(null);\n\n const photo = (getMessagePhoto(message) || getMessageWebPagePhoto(message))!;\n const localBlobUrl = photo.blobUrl;\n\n const isIntersecting = useIsIntersecting(ref, observeIntersection);\n\n const [isLoadAllowed, setIsLoadAllowed] = useState(canAutoLoad);\n const shouldLoad = isLoadAllowed && isIntersecting;\n const {\n mediaData, loadProgress,\n } = useMediaWithLoadProgress(getMessageMediaHash(message, size), !shouldLoad);\n const fullMediaData = localBlobUrl || mediaData;\n const thumbRef = useBlurredMediaThumbRef(message, fullMediaData);\n\n const {\n loadProgress: downloadProgress,\n } = useMediaWithLoadProgress(getMessageMediaHash(message, 'download'), !isDownloading);\n\n const {\n isUploading, isTransferring, transferProgress,\n } = getMediaTransferState(\n message,\n uploadProgress || (isDownloading ? downloadProgress : loadProgress),\n shouldLoad && !fullMediaData,\n );\n const wasLoadDisabled = usePrevious(isLoadAllowed) === false;\n\n const transitionClassNames = useMediaTransition(fullMediaData);\n const {\n shouldRender: shouldRenderSpinner,\n transitionClassNames: spinnerClassNames,\n } = useShowTransition(isTransferring, undefined, wasLoadDisabled, 'slow');\n const {\n shouldRender: shouldRenderDownloadButton,\n transitionClassNames: downloadButtonClassNames,\n } = useShowTransition(!fullMediaData && !isLoadAllowed);\n\n const handleClick = useCallback(() => {\n if (isUploading) {\n if (onCancelUpload) {\n onCancelUpload(message);\n }\n } else if (!fullMediaData) {\n setIsLoadAllowed((isAllowed) => !isAllowed);\n } else if (onClick) {\n onClick(message.id);\n }\n }, [fullMediaData, isUploading, message, onCancelUpload, onClick]);\n\n const isOwn = isOwnMessage(message);\n useLayoutEffect(() => {\n if (!shouldAffectAppendix) {\n return;\n }\n\n const contentEl = ref.current!.closest('.message-content')!;\n\n if (fullMediaData) {\n getCustomAppendixBg(fullMediaData, isOwn, isInSelectMode, isSelected, theme).then((appendixBg) => {\n contentEl.style.setProperty('--appendix-bg', appendixBg);\n contentEl.setAttribute(CUSTOM_APPENDIX_ATTRIBUTE, '');\n });\n } else {\n contentEl.classList.add('has-appendix-thumb');\n }\n }, [fullMediaData, isOwn, shouldAffectAppendix, isInSelectMode, isSelected, theme]);\n\n const { width, height, isSmall } = dimensions || calculateMediaDimensions(message, noAvatars);\n\n const className = buildClassName(\n 'media-inner',\n !isUploading && !nonInteractive && 'interactive',\n isSmall && 'small-image',\n width === height && 'square-image',\n );\n\n const style = dimensions\n ? `width: ${width}px; height: ${height}px; left: ${dimensions.x}px; top: ${dimensions.y}px;`\n : '';\n\n return (\n \n \n \n {isProtected && }\n {shouldRenderSpinner && !shouldRenderDownloadButton && (\n
\n \n
\n )}\n {shouldRenderDownloadButton && }\n {isTransferring && (\n {Math.round(transferProgress * 100)}%\n )}\n \n );\n};\n\nexport default Photo;\n","import { useCallback, useRef } from '../../../../lib/teact/teact';\n\nimport { fastRaf } from '../../../../util/schedulers';\nimport safePlay from '../../../../util/safePlay';\nimport useBackgroundMode from '../../../../hooks/useBackgroundMode';\nimport useHeavyAnimationCheck from '../../../../hooks/useHeavyAnimationCheck';\n\nexport default function useVideoAutoPause(playerRef: { current: HTMLVideoElement | null }, canPlay: boolean) {\n const wasPlaying = useRef(playerRef.current?.paused);\n const canPlayRef = useRef();\n canPlayRef.current = canPlay;\n\n const freezePlaying = useCallback(() => {\n if (!playerRef.current) {\n return;\n }\n\n wasPlaying.current = !playerRef.current.paused;\n\n if (wasPlaying.current) {\n playerRef.current.pause();\n }\n }, [playerRef]);\n\n const unfreezePlaying = useCallback(() => {\n if (\n playerRef.current && wasPlaying.current && canPlayRef.current\n // At this point HTMLVideoElement can be unmounted from the DOM\n && document.body.contains(playerRef.current)\n ) {\n safePlay(playerRef.current);\n }\n }, [playerRef]);\n\n const unfreezePlayingOnRaf = useCallback(() => {\n fastRaf(unfreezePlaying);\n }, [unfreezePlaying]);\n\n useBackgroundMode(freezePlaying, unfreezePlayingOnRaf);\n useHeavyAnimationCheck(freezePlaying, unfreezePlaying);\n}\n","import React, {\n FC, useCallback, useRef, useState,\n} from '../../../lib/teact/teact';\nimport { getActions } from '../../../global';\n\nimport { ApiMediaFormat, ApiMessage } from '../../../api/types';\nimport { IMediaDimensions } from './helpers/calculateAlbumLayout';\n\nimport { formatMediaDuration } from '../../../util/dateFormat';\nimport buildClassName from '../../../util/buildClassName';\nimport { calculateVideoDimensions } from '../../common/helpers/mediaDimensions';\nimport {\n getMediaTransferState,\n getMessageMediaFormat,\n getMessageMediaHash,\n getMessageVideo,\n getMessageWebPageVideo,\n isForwardedMessage,\n isOwnMessage,\n} from '../../../global/helpers';\nimport { ObserveFn, useIsIntersecting } from '../../../hooks/useIntersectionObserver';\nimport useMediaWithLoadProgress from '../../../hooks/useMediaWithLoadProgress';\nimport useMedia from '../../../hooks/useMedia';\nimport useShowTransition from '../../../hooks/useShowTransition';\nimport usePrevious from '../../../hooks/usePrevious';\nimport useBuffering from '../../../hooks/useBuffering';\nimport useVideoCleanup from '../../../hooks/useVideoCleanup';\nimport useMediaTransition from '../../../hooks/useMediaTransition';\nimport useVideoAutoPause from './hooks/useVideoAutoPause';\nimport useBlurredMediaThumbRef from './hooks/useBlurredMediaThumbRef';\n\nimport ProgressSpinner from '../../ui/ProgressSpinner';\n\nexport type OwnProps = {\n id?: string;\n message: ApiMessage;\n observeIntersection: ObserveFn;\n noAvatars?: boolean;\n canAutoLoad?: boolean;\n canAutoPlay?: boolean;\n uploadProgress?: number;\n dimensions?: IMediaDimensions;\n lastSyncTime?: number;\n isDownloading: boolean;\n isProtected?: boolean;\n onClick?: (id: number) => void;\n onCancelUpload?: (message: ApiMessage) => void;\n};\n\nconst Video: FC = ({\n id,\n message,\n observeIntersection,\n noAvatars,\n canAutoLoad,\n canAutoPlay,\n uploadProgress,\n lastSyncTime,\n dimensions,\n onClick,\n onCancelUpload,\n isDownloading,\n isProtected,\n}) => {\n // eslint-disable-next-line no-null/no-null\n const ref = useRef(null);\n // eslint-disable-next-line no-null/no-null\n const videoRef = useRef(null);\n\n const video = (getMessageVideo(message) || getMessageWebPageVideo(message))!;\n const localBlobUrl = video.blobUrl;\n\n const isIntersecting = useIsIntersecting(ref, observeIntersection);\n\n const [isLoadAllowed, setIsLoadAllowed] = useState(canAutoLoad);\n const shouldLoad = Boolean(isLoadAllowed && isIntersecting && lastSyncTime);\n const [isPlayAllowed, setIsPlayAllowed] = useState(canAutoPlay);\n\n const previewBlobUrl = useMedia(\n getMessageMediaHash(message, 'pictogram'),\n !(isIntersecting && lastSyncTime),\n getMessageMediaFormat(message, 'pictogram'),\n lastSyncTime,\n );\n const previewClassNames = useMediaTransition(previewBlobUrl);\n\n const { mediaData, loadProgress } = useMediaWithLoadProgress(\n getMessageMediaHash(message, 'inline'),\n !shouldLoad,\n getMessageMediaFormat(message, 'inline'),\n lastSyncTime,\n );\n const fullMediaData = localBlobUrl || mediaData;\n const isInline = Boolean(isIntersecting && fullMediaData);\n // Thumbnail is always rendered so we can only disable blur if we have preview\n const thumbRef = useBlurredMediaThumbRef(message, previewBlobUrl);\n\n const { loadProgress: downloadProgress } = useMediaWithLoadProgress(\n getMessageMediaHash(message, 'download'),\n !isDownloading,\n ApiMediaFormat.BlobUrl,\n lastSyncTime,\n );\n\n const { isBuffered, bufferingHandlers } = useBuffering(!canAutoLoad);\n const { isUploading, isTransferring, transferProgress } = getMediaTransferState(\n message,\n uploadProgress || (isDownloading ? downloadProgress : loadProgress),\n (shouldLoad && !isBuffered) || isDownloading,\n );\n const wasLoadDisabled = usePrevious(isLoadAllowed) === false;\n const {\n shouldRender: shouldRenderSpinner,\n transitionClassNames: spinnerClassNames,\n } = useShowTransition(isTransferring, undefined, wasLoadDisabled);\n const {\n shouldRender: shouldRenderPlayButton,\n transitionClassNames: playButtonClassNames,\n } = useShowTransition(isLoadAllowed && !isPlayAllowed && !shouldRenderSpinner);\n\n const [playProgress, setPlayProgress] = useState(0);\n const handleTimeUpdate = useCallback((e: React.SyntheticEvent) => {\n setPlayProgress(Math.max(0, e.currentTarget.currentTime - 1));\n }, []);\n\n const duration = (videoRef.current?.duration) || video.duration || 0;\n\n const isOwn = isOwnMessage(message);\n const isForwarded = isForwardedMessage(message);\n const { width, height } = dimensions || calculateVideoDimensions(video, isOwn, isForwarded, noAvatars);\n\n useVideoAutoPause(videoRef, isInline);\n useVideoCleanup(videoRef, [isInline]);\n\n const handleClick = useCallback(() => {\n if (isUploading) {\n if (onCancelUpload) {\n onCancelUpload(message);\n }\n } else if (isDownloading) {\n getActions().cancelMessageMediaDownload({ message });\n } else if (!fullMediaData) {\n setIsLoadAllowed((isAllowed) => !isAllowed);\n } else if (fullMediaData && !isPlayAllowed) {\n setIsPlayAllowed(true);\n videoRef.current!.play();\n } else if (onClick) {\n onClick(message.id);\n }\n }, [isUploading, isDownloading, fullMediaData, isPlayAllowed, onClick, onCancelUpload, message]);\n\n const className = buildClassName('media-inner dark', !isUploading && 'interactive');\n const style = dimensions\n ? `width: ${width}px; height: ${height}px; left: ${dimensions.x}px; top: ${dimensions.y}px;`\n : '';\n\n return (\n \n \n \n {isInline && (\n \n \n \n )}\n {isProtected && }\n {shouldRenderPlayButton && }\n {shouldRenderSpinner && (\n
\n \n
\n )}\n {!isLoadAllowed && (\n \n )}\n {isTransferring ? (\n \n {(isUploading || isDownloading) ? `${Math.round(transferProgress * 100)}%` : '...'}\n \n ) : (\n
\n {video.isGif ? 'GIF' : formatMediaDuration(Math.max(duration - playProgress, 0))}\n
\n )}\n \n );\n};\n\nexport default Video;\n","import React, { FC, useCallback } from '../../../lib/teact/teact';\nimport { getActions, withGlobal } from '../../../global';\n\nimport { ApiUser, ApiContact, ApiCountryCode } from '../../../api/types';\n\nimport { selectUser } from '../../../global/selectors';\nimport { formatPhoneNumberWithCode } from '../../../util/phoneNumber';\nimport buildClassName from '../../../util/buildClassName';\n\nimport Avatar from '../../common/Avatar';\n\nimport './Contact.scss';\n\ntype OwnProps = {\n contact: ApiContact;\n};\n\ntype StateProps = {\n user?: ApiUser;\n phoneCodeList: ApiCountryCode[];\n};\n\nconst Contact: FC = ({\n contact, user, phoneCodeList,\n}) => {\n const { openChat } = getActions();\n\n const {\n firstName,\n lastName,\n phoneNumber,\n userId,\n } = contact;\n\n const handleClick = useCallback(() => {\n openChat({ id: userId });\n }, [openChat, userId]);\n\n return (\n \n \n
\n
{firstName} {lastName}
\n
{formatPhoneNumberWithCode(phoneCodeList, phoneNumber)}
\n
\n \n );\n};\n\nexport default withGlobal(\n (global, { contact }): StateProps => {\n const { countryList: { phoneCodes: phoneCodeList } } = global;\n return {\n user: selectUser(global, contact.userId),\n phoneCodeList,\n };\n },\n)(Contact);\n","import React, {\n FC, useState, useEffect, useRef,\n} from '../../../lib/teact/teact';\n\nimport { ApiPollAnswer, ApiPollResult } from '../../../api/types';\n\nimport buildClassName from '../../../util/buildClassName';\nimport renderText from '../../common/helpers/renderText';\n\nimport './PollOption.scss';\n\ntype OwnProps = {\n answer: ApiPollAnswer;\n voteResults?: ApiPollResult[];\n totalVoters?: number;\n maxVotersCount?: number;\n correctResults: string[];\n shouldAnimate: boolean;\n};\n\nconst PollOption: FC = ({\n answer,\n voteResults,\n totalVoters,\n maxVotersCount,\n correctResults,\n shouldAnimate,\n}) => {\n const result = voteResults && voteResults.find((r) => r.option === answer.option);\n const correctAnswer = correctResults.length === 0 || correctResults.indexOf(answer.option) !== -1;\n const showIcon = (correctResults.length > 0 && correctAnswer) || (result?.isChosen);\n const answerPercent = result ? getPercentage(result.votersCount, totalVoters || 0) : 0;\n const [finalPercent, setFinalPercent] = useState(shouldAnimate ? 0 : answerPercent);\n // eslint-disable-next-line no-null/no-null\n const lineRef = useRef(null);\n const lineWidth = result ? getPercentage(result.votersCount, maxVotersCount || 0) : 0;\n const isAnimationDoesNotStart = finalPercent < answerPercent;\n\n useEffect(() => {\n if (shouldAnimate) {\n setFinalPercent(answerPercent);\n }\n }, [shouldAnimate, answerPercent]);\n\n useEffect(() => {\n const lineEl = lineRef.current;\n\n if (lineEl && shouldAnimate) {\n const svgEl = lineEl.firstElementChild;\n\n const style = isAnimationDoesNotStart ? '' : 'stroke-dasharray: 100% 200%; stroke-dashoffset: -44';\n if (!svgEl) {\n lineEl.innerHTML = `\n \n \n `;\n } else {\n svgEl.setAttribute('style', style);\n }\n }\n }, [isAnimationDoesNotStart, shouldAnimate]);\n\n if (!voteResults || !result) {\n return undefined;\n }\n\n const lineStyle = `width: ${lineWidth}%; transform:scaleX(${isAnimationDoesNotStart ? 0 : 1})`;\n\n return (\n
\n
\n {answerPercent}%\n {showIcon && (\n \n \n \n )}\n
\n
\n
\n {renderText(answer.text)}\n
\n
\n
\n \n
\n
\n
\n );\n};\n\nfunction getPercentage(value: number, total: number) {\n return total > 0 ? ((value / total) * 100).toFixed() : 0;\n}\n\nexport default PollOption;\n","import React, {\n FC,\n useCallback,\n useEffect,\n useState,\n memo,\n useMemo,\n useRef,\n} from '../../../lib/teact/teact';\nimport { getActions, withGlobal } from '../../../global';\n\nimport {\n ApiMessage, ApiPoll, ApiUser, ApiPollAnswer,\n} from '../../../api/types';\n\nimport renderText from '../../common/helpers/renderText';\nimport { renderTextWithEntities } from '../../common/helpers/renderTextWithEntities';\nimport { formatMediaDuration } from '../../../util/dateFormat';\nimport useLang, { LangFn } from '../../../hooks/useLang';\n\nimport CheckboxGroup from '../../ui/CheckboxGroup';\nimport RadioGroup from '../../ui/RadioGroup';\nimport Avatar from '../../common/Avatar';\nimport Button from '../../ui/Button';\nimport Notification from '../../ui/Notification';\nimport PollOption from './PollOption';\n\nimport './Poll.scss';\n\ntype OwnProps = {\n message: ApiMessage;\n poll: ApiPoll;\n onSendVote: (options: string[]) => void;\n};\n\ntype StateProps = {\n recentVoterIds?: number[];\n usersById: Record;\n serverTimeOffset: number;\n};\n\nconst SOLUTION_CONTAINER_ID = '#middle-column-portals';\nconst SOLUTION_DURATION = 5000;\nconst NBSP = '\\u00A0';\n\nconst Poll: FC = ({\n message,\n poll,\n recentVoterIds,\n usersById,\n onSendVote,\n serverTimeOffset,\n}) => {\n const { loadMessage, openPollResults } = getActions();\n\n const { id: messageId, chatId } = message;\n const { summary, results } = poll;\n const [isSubmitting, setIsSubmitting] = useState(false);\n const [chosenOptions, setChosenOptions] = useState([]);\n const [isSolutionShown, setIsSolutionShown] = useState(false);\n const [wasSubmitted, setWasSubmitted] = useState(false);\n const [closePeriod, setClosePeriod] = useState(\n !summary.closed && summary.closeDate && summary.closeDate > 0\n ? Math.min(summary.closeDate - Math.floor(Date.now() / 1000) + serverTimeOffset, summary.closePeriod!)\n : 0,\n );\n // eslint-disable-next-line no-null/no-null\n const countdownRef = useRef(null);\n const { results: voteResults, totalVoters } = results;\n const hasVoted = voteResults && voteResults.some((r) => r.isChosen);\n const canVote = !summary.closed && !hasVoted;\n const canViewResult = !canVote && summary.isPublic && Number(results.totalVoters) > 0;\n const isMultiple = canVote && summary.multipleChoice;\n const maxVotersCount = voteResults ? Math.max(...voteResults.map((r) => r.votersCount)) : totalVoters;\n const correctResults = voteResults ? voteResults.reduce((answers: string[], r) => {\n if (r.isCorrect) {\n answers.push(r.option);\n }\n\n return answers;\n }, []) : [];\n const answers = summary.answers.map((a) => ({\n label: a.text,\n value: a.option,\n hidden: Boolean(summary.quiz && summary.closePeriod && closePeriod <= 0),\n }));\n\n useEffect(() => {\n if (\n isSubmitting\n && poll.results.results\n && poll.results.results.some((result) => result.isChosen)\n ) {\n setIsSubmitting(false);\n }\n }, [isSubmitting, poll.results.results]);\n\n useEffect(() => {\n if (closePeriod > 0) {\n setTimeout(() => setClosePeriod(closePeriod - 1), 1000);\n }\n\n const countdownEl = countdownRef.current;\n\n if (countdownEl) {\n const circumference = 6 * 2 * Math.PI;\n const svgEl = countdownEl.lastElementChild;\n const timerEl = countdownEl.firstElementChild;\n if (closePeriod <= 5) {\n countdownEl.classList.add('hurry-up');\n }\n\n if (!svgEl || !timerEl) {\n countdownEl.innerHTML = `\n ${formatMediaDuration(closePeriod)}\n \n \n `;\n } else {\n const strokeDashOffset = ((summary.closePeriod! - closePeriod) / summary.closePeriod!) * circumference;\n timerEl.textContent = formatMediaDuration(closePeriod);\n (svgEl.firstElementChild as SVGElement).setAttribute('stroke-dashoffset', `-${strokeDashOffset}`);\n }\n }\n }, [closePeriod, summary.closePeriod]);\n\n useEffect(() => {\n if (summary.quiz && (closePeriod <= 0 || (hasVoted && !summary.closed))) {\n loadMessage({ chatId, messageId });\n }\n }, [chatId, closePeriod, hasVoted, loadMessage, messageId, summary.closed, summary.quiz]);\n\n // If the client time is not synchronized, the poll must be updated after the closePeriod time has expired.\n useEffect(() => {\n let timer: number | undefined;\n\n if (summary.quiz && !summary.closed && summary.closePeriod && summary.closePeriod > 0) {\n timer = window.setTimeout(() => {\n loadMessage({ chatId, messageId });\n }, summary.closePeriod * 1000);\n }\n\n return () => {\n if (timer) {\n window.clearTimeout(timer);\n }\n };\n }, [canVote, chatId, loadMessage, messageId, summary.closePeriod, summary.closed, summary.quiz]);\n\n const recentVoters = useMemo(() => {\n return recentVoterIds ? recentVoterIds.reduce((result: ApiUser[], id) => {\n const user = usersById[id];\n if (user) {\n result.push(user);\n }\n\n return result;\n }, []) : [];\n }, [usersById, recentVoterIds]);\n\n const handleRadioChange = useCallback(\n (option: string) => {\n setChosenOptions([option]);\n setIsSubmitting(true);\n setWasSubmitted(true);\n onSendVote([option]);\n }, [onSendVote],\n );\n\n const handleCheckboxChange = useCallback(\n (options: string[]) => {\n setChosenOptions(options);\n }, [],\n );\n\n const handleVoteClick = useCallback(\n () => {\n setIsSubmitting(true);\n setWasSubmitted(true);\n onSendVote(chosenOptions);\n }, [onSendVote, chosenOptions],\n );\n\n const handleViewResultsClick = useCallback(\n () => {\n openPollResults({ chatId, messageId });\n }, [chatId, messageId, openPollResults],\n );\n\n const handleSolutionShow = useCallback(() => {\n setIsSolutionShown(true);\n }, []);\n\n const handleSolutionHide = useCallback(() => {\n setIsSolutionShown(false);\n setWasSubmitted(false);\n }, []);\n\n // Show the solution to quiz if the answer was incorrect\n useEffect(() => {\n if (wasSubmitted && hasVoted && summary.quiz && results.results && poll.results.solution) {\n const correctResult = results.results.find((r) => r.isChosen && r.isCorrect);\n if (!correctResult) {\n setIsSolutionShown(true);\n }\n }\n }, [hasVoted, wasSubmitted, results.results, summary.quiz, poll.results.solution]);\n\n const lang = useLang();\n\n function renderResultOption(answer: ApiPollAnswer) {\n return (\n \n );\n }\n\n function renderRecentVoters() {\n return (\n recentVoters.length > 0 && (\n
\n {recentVoters.map((user) => (\n \n ))}\n
\n )\n );\n }\n\n function renderSolution() {\n return (\n isSolutionShown && poll.results.solution && (\n \n )\n );\n }\n\n return (\n
\n {renderSolution()}\n
{renderText(summary.question, ['emoji', 'br'])}
\n
\n {lang(getPollTypeString(summary))}\n {renderRecentVoters()}\n {closePeriod > 0 && canVote &&
}\n {summary.quiz && poll.results.solution && !canVote && (\n \n \n \n )}\n
\n {canVote && (\n
\n {isMultiple\n ? (\n \n )\n : (\n \n )}\n
\n )}\n {!canVote && (\n
\n {summary.answers.map(renderResultOption)}\n
\n )}\n {!canViewResult && !isMultiple && (\n
{getReadableVotersCount(lang, summary.quiz, results.totalVoters)}
\n )}\n {isMultiple && (\n \n {lang('PollSubmitVotes')}\n \n )}\n {canViewResult && (\n \n {lang('PollViewResults')}\n \n )}\n
\n );\n};\n\nfunction getPollTypeString(summary: ApiPoll['summary']) {\n // When we just created the poll, some properties don't exist.\n if (typeof summary.isPublic === 'undefined') {\n return NBSP;\n }\n\n if (summary.quiz) {\n return summary.isPublic ? 'QuizPoll' : 'AnonymousQuizPoll';\n }\n\n if (summary.closed) {\n return 'FinalResults';\n }\n\n return summary.isPublic ? 'PublicPoll' : 'AnonymousPoll';\n}\n\nfunction getReadableVotersCount(lang: LangFn, isQuiz: true | undefined, count?: number) {\n if (!count) {\n return lang(isQuiz ? 'Chat.Quiz.TotalVotesEmpty' : 'Chat.Poll.TotalVotesResultEmpty');\n }\n\n return lang(isQuiz ? 'Answer' : 'Vote', count, 'i');\n}\n\nexport default memo(withGlobal(\n (global, { poll }) => {\n const { recentVoterIds } = poll.results;\n const { serverTimeOffset, users: { byId: usersById } } = global;\n if (!recentVoterIds || recentVoterIds.length === 0) {\n return {};\n }\n\n return {\n recentVoterIds,\n usersById,\n serverTimeOffset,\n };\n },\n)(Poll));\n","import React, { FC, memo, useCallback } from '../../../lib/teact/teact';\n\nimport { ApiMessage } from '../../../api/types';\nimport { ObserveFn } from '../../../hooks/useIntersectionObserver';\nimport { ISettings } from '../../../types';\n\nimport { getMessageWebPage } from '../../../global/helpers';\nimport { calculateMediaDimensions } from './helpers/mediaDimensions';\nimport renderText from '../../common/helpers/renderText';\nimport trimText from '../../../util/trimText';\nimport buildClassName from '../../../util/buildClassName';\n\nimport SafeLink from '../../common/SafeLink';\nimport Photo from './Photo';\nimport Video from './Video';\n\nimport './WebPage.scss';\n\nconst MAX_TEXT_LENGTH = 170; // symbols\n\ntype OwnProps = {\n message: ApiMessage;\n observeIntersection?: ObserveFn;\n noAvatars?: boolean;\n canAutoLoad?: boolean;\n canAutoPlay?: boolean;\n inPreview?: boolean;\n lastSyncTime?: number;\n isDownloading?: boolean;\n isProtected?: boolean;\n theme: ISettings['theme'];\n onMediaClick?: () => void;\n onCancelMediaTransfer?: () => void;\n};\n\nconst WebPage: FC = ({\n message,\n observeIntersection,\n noAvatars,\n canAutoLoad,\n canAutoPlay,\n inPreview,\n lastSyncTime,\n isDownloading = false,\n isProtected,\n theme,\n onMediaClick,\n onCancelMediaTransfer,\n}) => {\n const webPage = getMessageWebPage(message);\n\n let isSquarePhoto = false;\n if (webPage?.photo && !webPage.video) {\n const { width, height } = calculateMediaDimensions(message);\n isSquarePhoto = width === height;\n }\n\n const handleMediaClick = useCallback(() => {\n onMediaClick!();\n }, [onMediaClick]);\n\n if (!webPage) {\n return undefined;\n }\n\n const {\n siteName,\n url,\n displayUrl,\n title,\n description,\n photo,\n video,\n } = webPage;\n const isMediaInteractive = (photo || video) && onMediaClick && !isSquarePhoto;\n const truncatedDescription = trimText(description, MAX_TEXT_LENGTH);\n\n const className = buildClassName(\n 'WebPage',\n isSquarePhoto && 'with-square-photo',\n !photo && !video && !inPreview && 'without-media',\n video && 'with-video',\n );\n\n return (\n \n {photo && !video && (\n \n )}\n
\n \n {!inPreview && title && (\n

{renderText(title)}

\n )}\n {truncatedDescription && (\n

{renderText(truncatedDescription, ['emoji', 'br'])}

\n )}\n
\n {!inPreview && video && (\n \n )}\n
\n );\n};\n\nexport default memo(WebPage);\n","import React, { FC, memo } from '../../../lib/teact/teact';\n\nimport { ApiMessage } from '../../../api/types';\n\nimport { getMessageInvoice } from '../../../global/helpers';\nimport { formatCurrency } from '../../../util/formatCurrency';\nimport renderText from '../../common/helpers/renderText';\nimport useLang from '../../../hooks/useLang';\n\nimport './Invoice.scss';\n\ntype OwnProps = {\n message: ApiMessage;\n};\n\nconst Invoice: FC = ({\n message,\n}) => {\n const lang = useLang();\n const invoice = getMessageInvoice(message);\n\n const {\n title,\n text,\n amount,\n currency,\n isTest,\n photoUrl,\n } = invoice!;\n\n return (\n \n {title && (\n

{renderText(title)}

\n )}\n {text && (\n

{renderText(text, ['emoji', 'br'])}

\n )}\n
\n {photoUrl && (\n \n )}\n

\n {formatCurrency(amount, currency, lang.code)}\n {isTest && {lang('PaymentTestInvoice')}}\n

\n
\n
\n );\n};\n\nexport default memo(Invoice);\n","const PROVIDER = 'http://maps.google.com/maps';\n\n// eslint-disable-next-line max-len\n// https://github.com/TelegramMessenger/Telegram-iOS/blob/2a32c871882c4e1b1ccdecd34fccd301723b30d9/submodules/LocationResources/Sources/VenueIconResources.swift#L82\nconst VENUE_COLORS = new Map(Object.entries({\n 'building/medical': '#43b3f4',\n 'building/gym': '#43b3f4',\n 'education/cafeteria': '#f7943f',\n 'travel/bedandbreakfast': '#9987ff',\n 'travel/hotel': '#9987ff',\n 'travel/hostel': '#9987ff',\n 'travel/resort': '#9987ff',\n 'travel/hotel_bar': '#e56dd6',\n arts_entertainment: '#e56dd6',\n building: '#6e81b2',\n education: '#a57348',\n event: '#959595',\n food: '#f7943f',\n home: '#00aeef',\n nightlife: '#e56dd6',\n parks_outdoors: '#6cc039',\n shops: '#ffb300',\n travel: '#1c9fff',\n work: '#ad7854',\n}));\n\nconst RANDOM_COLORS = [\n '#e56cd5', '#f89440', '#9986ff', '#44b3f5', '#6dc139', '#ff5d5a', '#f87aad', '#6e82b3', '#f5ba21',\n];\n\nexport function prepareMapUrl(lat: number, long: number, zoom: number) {\n return `${PROVIDER}/place/${lat}+${long}/@${lat},${long},${zoom}z`;\n}\n\nexport function getMetersPerPixel(lat: number, zoom: number) {\n // https://groups.google.com/g/google-maps-js-api-v3/c/hDRO4oHVSeM/m/osOYQYXg2oUJ\n return (156543.03392 * Math.cos(lat * (Math.PI / 180))) / 2 ** zoom;\n}\n\nexport function getVenueIconUrl(type?: string) {\n if (!type) return '';\n return `https://ss3.4sqi.net/img/categories_v2/${type}_88.png`;\n}\n\n// eslint-disable-next-line max-len\n// https://github.com/TelegramMessenger/Telegram-iOS/blob/2a32c871882c4e1b1ccdecd34fccd301723b30d9/submodules/LocationResources/Sources/VenueIconResources.swift#L104\nexport function getVenueColor(type?: string) {\n if (!type) return '#008df2';\n return VENUE_COLORS.get(type)\n || VENUE_COLORS.get(type.split('/')[0])\n || RANDOM_COLORS[stringToNumber(type) % RANDOM_COLORS.length];\n}\n\nfunction stringToNumber(str: string) {\n return str.split('').reduce((prevHash, currVal) => (\n // eslint-disable-next-line no-bitwise\n (((prevHash << 5) - prevHash) + currVal.charCodeAt(0)) | 0), 0);\n}\n","import React, { FC } from '../../lib/teact/teact';\n\nimport buildClassName from '../../util/buildClassName';\n\nimport './Skeleton.scss';\n\ntype OwnProps = {\n variant?: 'rectangular' | 'rounded-rect' | 'round';\n animation?: 'wave' | 'pulse';\n width?: number;\n height?: number;\n className?: string;\n};\n\nconst Skeleton: FC = ({\n variant = 'rectangular', animation = 'wave', width, height, className,\n}) => {\n const classNames = buildClassName('Skeleton', variant, animation, className);\n const style = (width ? `width: ${width}px;` : '') + (height ? `height: ${height}px;` : '');\n return (\n
\n );\n};\n\nexport default Skeleton;\n","import React, {\n FC, memo, useCallback, useEffect, useLayoutEffect, useMemo, useRef, useState,\n} from '../../../lib/teact/teact';\n\nimport { ApiChat, ApiMessage, ApiUser } from '../../../api/types';\nimport { ISettings } from '../../../types';\n\nimport { CUSTOM_APPENDIX_ATTRIBUTE } from '../../../config';\nimport {\n getMessageLocation,\n buildStaticMapHash,\n isGeoLiveExpired,\n isOwnMessage,\n isUserId,\n} from '../../../global/helpers';\nimport useMedia from '../../../hooks/useMedia';\nimport getCustomAppendixBg from './helpers/getCustomAppendixBg';\nimport { formatCountdownShort, formatLastUpdated } from '../../../util/dateFormat';\nimport useLang from '../../../hooks/useLang';\nimport useForceUpdate from '../../../hooks/useForceUpdate';\nimport useTimeout from '../../../hooks/useTimeout';\nimport {\n getMetersPerPixel, getVenueColor, getVenueIconUrl, prepareMapUrl,\n} from '../../../util/map';\nimport buildClassName from '../../../util/buildClassName';\nimport usePrevious from '../../../hooks/usePrevious';\nimport useInterval from '../../../hooks/useInterval';\nimport { getServerTime } from '../../../util/serverTime';\n\nimport Avatar from '../../common/Avatar';\nimport Skeleton from '../../ui/Skeleton';\n\nimport mapPin from '../../../assets/map-pin.svg';\nimport './Location.scss';\n\nconst MOVE_THRESHOLD = 0.0001; // ~11m\nconst DEFAULT_MAP_CONFIG = {\n width: 400,\n height: 300,\n zoom: 16,\n scale: 2,\n};\n\n// eslint-disable-next-line max-len\nconst SVG_PIN = { __html: '' };\n\ntype OwnProps = {\n message: ApiMessage;\n peer?: ApiUser | ApiChat;\n lastSyncTime?: number;\n isInSelectMode?: boolean;\n isSelected?: boolean;\n theme: ISettings['theme'];\n serverTimeOffset: number;\n};\n\nconst Location: FC = ({\n message,\n peer,\n lastSyncTime,\n isInSelectMode,\n isSelected,\n theme,\n serverTimeOffset,\n}) => {\n // eslint-disable-next-line no-null/no-null\n const ref = useRef(null);\n // eslint-disable-next-line no-null/no-null\n const countdownRef = useRef(null);\n const lang = useLang();\n const forceUpdate = useForceUpdate();\n\n const location = getMessageLocation(message)!;\n const { type, geo } = location;\n\n const serverTime = getServerTime(serverTimeOffset);\n const isExpired = isGeoLiveExpired(message, serverTime);\n const secondsBeforeEnd = (type === 'geoLive' && !isExpired) ? message.date + location.period - serverTime\n : undefined;\n\n const [point, setPoint] = useState(geo);\n\n const shouldRenderText = type === 'venue' || (type === 'geoLive' && !isExpired);\n const {\n width, height, zoom, scale,\n } = DEFAULT_MAP_CONFIG;\n\n const mediaHash = Boolean(lastSyncTime) && buildStaticMapHash(point, width, height, zoom, scale);\n const mediaBlobUrl = useMedia(mediaHash);\n const prevMediaBlobUrl = usePrevious(mediaBlobUrl);\n const mapBlobUrl = mediaBlobUrl || prevMediaBlobUrl;\n\n const isPeerUser = peer && isUserId(peer.id);\n const avatarUser = (peer && isPeerUser) ? peer as ApiUser : undefined;\n const avatarChat = (peer && !isPeerUser) ? peer as ApiChat : undefined;\n\n const isOwn = isOwnMessage(message);\n\n const accuracyRadiusPx = useMemo(() => {\n if (type !== 'geoLive' || !point.accuracyRadius) {\n return 0;\n }\n\n const { lat, accuracyRadius } = point;\n return accuracyRadius / getMetersPerPixel(lat, zoom);\n }, [type, point, zoom]);\n\n const handleClick = () => {\n const url = prepareMapUrl(point.lat, point.long, zoom);\n window.open(url, '_blank')?.focus();\n };\n\n const updateCountdown = useCallback((countdownEl: HTMLDivElement) => {\n if (type !== 'geoLive') return;\n const radius = 12;\n const circumference = radius * 2 * Math.PI;\n const svgEl = countdownEl.lastElementChild;\n const timerEl = countdownEl.firstElementChild as SVGElement;\n\n const timeLeft = message.date + location.period - getServerTime(serverTimeOffset);\n const strokeDashOffset = (1 - timeLeft / location.period) * circumference;\n const text = formatCountdownShort(lang, timeLeft * 1000);\n\n if (!svgEl || !timerEl) {\n countdownEl.innerHTML = `\n ${text}\n \n \n `;\n } else {\n timerEl.textContent = text;\n svgEl.firstElementChild!.setAttribute('stroke-dashoffset', `-${strokeDashOffset}`);\n }\n }, [type, message.date, location, serverTimeOffset, lang]);\n\n useLayoutEffect(() => {\n if (countdownRef.current) {\n updateCountdown(countdownRef.current);\n }\n }, [updateCountdown]);\n\n useLayoutEffect(() => {\n if (shouldRenderText) return;\n const contentEl = ref.current!.closest('.message-content')!;\n if (mapBlobUrl) {\n getCustomAppendixBg(mapBlobUrl, isOwn, isInSelectMode, isSelected, theme).then((appendixBg) => {\n contentEl.style.setProperty('--appendix-bg', appendixBg);\n contentEl.classList.add('has-appendix-thumb');\n contentEl.setAttribute(CUSTOM_APPENDIX_ATTRIBUTE, '');\n });\n }\n }, [isOwn, isInSelectMode, isSelected, theme, mapBlobUrl, shouldRenderText]);\n\n useEffect(() => {\n // Prevent map refetching for slight location changes\n if (Math.abs(geo.lat - point.lat) < MOVE_THRESHOLD && Math.abs(geo.long - point.long) < MOVE_THRESHOLD) {\n if (point.accuracyRadius !== geo.accuracyRadius) {\n setPoint({\n ...point,\n accuracyRadius: geo.accuracyRadius,\n });\n }\n return;\n }\n setPoint(geo);\n }, [geo, point]);\n\n useTimeout(() => {\n forceUpdate();\n }, !isExpired ? (secondsBeforeEnd || 0) * 1000 : undefined);\n\n useInterval(() => {\n const countdownEl = countdownRef.current;\n\n if (countdownEl) {\n updateCountdown(countdownEl);\n }\n }, secondsBeforeEnd ? 1000 : undefined);\n\n function renderInfo() {\n if (!shouldRenderText) return undefined;\n if (type === 'venue') {\n return (\n
\n
\n {location.title}\n
\n
\n {location.address}\n
\n
\n );\n }\n if (type === 'geoLive') {\n return (\n
\n
{lang('AttachLiveLocation')}
\n
\n {formatLastUpdated(lang, serverTime, message.editDate)}\n
\n {!isExpired &&
}\n
\n );\n }\n return undefined;\n }\n\n function renderMap() {\n if (!mapBlobUrl) return ;\n return (\n \n );\n }\n\n function renderPin() {\n const pinClassName = buildClassName(\n 'pin',\n type,\n isExpired && 'expired',\n );\n if (type === 'geoLive') {\n return (\n
\n \n {location.heading !== undefined && (\n
\n )}\n
\n );\n }\n\n if (type === 'venue') {\n const color = getVenueColor(location.venueType);\n const icon = getVenueIconUrl(location.venueType);\n return (\n
\n \"\"\n
\n );\n }\n\n return (\n \"\"\n );\n }\n\n function renderOverlay() {\n if (!mapBlobUrl) return undefined;\n\n return (\n <>\n {Boolean(accuracyRadiusPx) && !isExpired && (\n \n )}\n {renderPin()}\n \n );\n }\n\n return (\n \n
\n {renderMap()}\n {renderOverlay()}\n
\n {renderInfo()}\n
\n );\n};\n\nexport default memo(Location);\n","import { MouseEvent as ReactMouseEvent } from 'react';\nimport React, {\n FC,\n useCallback,\n useMemo,\n memo,\n} from '../../../../lib/teact/teact';\nimport { getActions, withGlobal } from '../../../../global';\n\nimport { OwnProps as PhotoProps } from '../Photo';\nimport { OwnProps as VideoProps } from '../Video';\n\nimport buildClassName from '../../../../util/buildClassName';\nimport {\n selectIsInSelectMode,\n selectIsMessageSelected,\n} from '../../../../global/selectors';\n\ntype OwnProps =\n PhotoProps\n & VideoProps;\n\ntype StateProps = {\n isInSelectMode?: boolean;\n isSelected?: boolean;\n};\n\nexport default function withSelectControl(WrappedComponent: FC) {\n const ComponentWithSelectControl: FC = (props) => {\n const {\n isInSelectMode,\n isSelected,\n message,\n dimensions,\n } = props;\n const { toggleMessageSelection } = getActions();\n\n const handleMessageSelect = useCallback((e: ReactMouseEvent) => {\n e.stopPropagation();\n toggleMessageSelection({ messageId: message.id, withShift: e?.shiftKey });\n }, [toggleMessageSelection, message]);\n\n const newProps = useMemo(() => {\n const { dimensions: dims, onClick } = props;\n return {\n ...props,\n isInSelectMode,\n isSelected,\n dimensions: {\n ...dims,\n x: 0,\n y: 0,\n },\n onClick: isInSelectMode ? undefined : onClick,\n };\n }, [props, isInSelectMode, isSelected]);\n\n return (\n \n {isInSelectMode && (\n
\n {isSelected && (\n \n )}\n
\n )}\n {/* eslint-disable-next-line react/jsx-props-no-spreading */}\n \n
\n );\n };\n\n return memo(withGlobal(\n (global, ownProps) => {\n const { message } = ownProps;\n return {\n isInSelectMode: selectIsInSelectMode(global),\n isSelected: selectIsMessageSelected(global, message.id),\n };\n },\n )(ComponentWithSelectControl));\n}\n","import React, { FC, useCallback } from '../../../lib/teact/teact';\n\nimport { GlobalState } from '../../../global/types';\nimport { ApiMessage } from '../../../api/types';\nimport { IAlbum, ISettings } from '../../../types';\nimport { AlbumRectPart, IAlbumLayout } from './helpers/calculateAlbumLayout';\n\nimport { getMessageContent, getMessageHtmlId } from '../../../global/helpers';\nimport { getActions, getGlobal, withGlobal } from '../../../global';\nimport withSelectControl from './hocs/withSelectControl';\nimport { ObserveFn } from '../../../hooks/useIntersectionObserver';\nimport {\n selectActiveDownloadIds,\n selectCanAutoLoadMedia,\n selectCanAutoPlayMedia,\n selectTheme,\n} from '../../../global/selectors';\n\nimport Photo from './Photo';\nimport Video from './Video';\n\nimport './Album.scss';\n\nconst PhotoWithSelect = withSelectControl(Photo);\nconst VideoWithSelect = withSelectControl(Video);\n\ntype OwnProps = {\n album: IAlbum;\n observeIntersection: ObserveFn;\n hasCustomAppendix?: boolean;\n lastSyncTime?: number;\n isOwn: boolean;\n isProtected?: boolean;\n albumLayout: IAlbumLayout;\n onMediaClick: (messageId: number) => void;\n};\n\ntype StateProps = {\n theme: ISettings['theme'];\n uploadsById: GlobalState['fileUploads']['byMessageLocalId'];\n activeDownloadIds: number[];\n};\n\nconst Album: FC = ({\n album,\n observeIntersection,\n hasCustomAppendix,\n lastSyncTime,\n isOwn,\n isProtected,\n albumLayout,\n onMediaClick,\n uploadsById,\n activeDownloadIds,\n theme,\n}) => {\n const { cancelSendingMessage } = getActions();\n\n const mediaCount = album.messages.length;\n\n const handleCancelUpload = useCallback((message: ApiMessage) => {\n cancelSendingMessage({ chatId: message.chatId, messageId: message.id });\n }, [cancelSendingMessage]);\n\n function renderAlbumMessage(message: ApiMessage, index: number) {\n const { photo, video } = getMessageContent(message);\n const fileUpload = uploadsById[message.previousLocalId || message.id];\n const uploadProgress = fileUpload?.progress;\n const { dimensions, sides } = albumLayout.layout[index];\n\n // Ignoring global updates is a known drawback here\n const canAutoLoad = selectCanAutoLoadMedia(getGlobal(), message);\n const canAutoPlay = selectCanAutoPlayMedia(getGlobal(), message);\n\n if (photo) {\n const shouldAffectAppendix = hasCustomAppendix && (\n // eslint-disable-next-line no-bitwise\n (isOwn ? index === mediaCount - 1 : Boolean(sides & AlbumRectPart.Left && sides & AlbumRectPart.Bottom))\n );\n\n return (\n \n );\n } else if (video) {\n return (\n \n );\n }\n\n return undefined;\n }\n\n const { width: containerWidth, height: containerHeight } = albumLayout.containerStyle;\n\n return (\n \n {album.messages.map(renderAlbumMessage)}\n
\n );\n};\n\nexport default withGlobal(\n (global, { album }): StateProps => {\n const { chatId } = album.mainMessage;\n const theme = selectTheme(global);\n const activeDownloadIds = selectActiveDownloadIds(global, chatId);\n return {\n theme,\n uploadsById: global.fileUploads.byMessageLocalId,\n activeDownloadIds,\n };\n },\n)(Album);\n","import React, {\n FC,\n useCallback,\n useEffect,\n useRef,\n useState,\n} from '../../../lib/teact/teact';\nimport { getActions } from '../../../global';\n\nimport { ApiMediaFormat, ApiMessage } from '../../../api/types';\n\nimport { ROUND_VIDEO_DIMENSIONS_PX } from '../../common/helpers/mediaDimensions';\nimport { getMessageMediaFormat, getMessageMediaHash } from '../../../global/helpers';\nimport { formatMediaDuration } from '../../../util/dateFormat';\nimport buildClassName from '../../../util/buildClassName';\nimport { stopCurrentAudio } from '../../../util/audioPlayer';\nimport safePlay from '../../../util/safePlay';\nimport { fastRaf } from '../../../util/schedulers';\nimport { ObserveFn, useIsIntersecting } from '../../../hooks/useIntersectionObserver';\nimport useMediaWithLoadProgress from '../../../hooks/useMediaWithLoadProgress';\nimport useShowTransition from '../../../hooks/useShowTransition';\nimport useMediaTransition from '../../../hooks/useMediaTransition';\nimport usePrevious from '../../../hooks/usePrevious';\nimport useBuffering from '../../../hooks/useBuffering';\nimport useVideoCleanup from '../../../hooks/useVideoCleanup';\nimport useVideoAutoPause from './hooks/useVideoAutoPause';\nimport useBlurredMediaThumbRef from './hooks/useBlurredMediaThumbRef';\n\nimport ProgressSpinner from '../../ui/ProgressSpinner';\n\nimport './RoundVideo.scss';\n\ntype OwnProps = {\n message: ApiMessage;\n observeIntersection: ObserveFn;\n canAutoLoad?: boolean;\n lastSyncTime?: number;\n isDownloading?: boolean;\n};\n\nlet stopPrevious: NoneToVoidFunction;\n\nconst RoundVideo: FC = ({\n message,\n observeIntersection,\n canAutoLoad,\n lastSyncTime,\n isDownloading,\n}) => {\n // eslint-disable-next-line no-null/no-null\n const ref = useRef(null);\n // eslint-disable-next-line no-null/no-null\n const playingProgressRef = useRef(null);\n // eslint-disable-next-line no-null/no-null\n const playerRef = useRef(null);\n\n const video = message.content.video!;\n\n const isIntersecting = useIsIntersecting(ref, observeIntersection);\n\n const [isLoadAllowed, setIsLoadAllowed] = useState(canAutoLoad);\n const shouldLoad = Boolean(isLoadAllowed && isIntersecting && lastSyncTime);\n const { mediaData, loadProgress } = useMediaWithLoadProgress(\n getMessageMediaHash(message, 'inline'),\n !shouldLoad,\n getMessageMediaFormat(message, 'inline'),\n lastSyncTime,\n );\n\n const { loadProgress: downloadProgress } = useMediaWithLoadProgress(\n getMessageMediaHash(message, 'download'),\n !isDownloading,\n ApiMediaFormat.BlobUrl,\n lastSyncTime,\n );\n const thumbRef = useBlurredMediaThumbRef(message, mediaData);\n\n const { isBuffered, bufferingHandlers } = useBuffering();\n const isTransferring = (isLoadAllowed && !isBuffered) || isDownloading;\n const wasLoadDisabled = usePrevious(isLoadAllowed) === false;\n\n const transitionClassNames = useMediaTransition(mediaData);\n const {\n shouldRender: shouldSpinnerRender,\n transitionClassNames: spinnerClassNames,\n } = useShowTransition(isTransferring || !isBuffered, undefined, wasLoadDisabled);\n\n const [isActivated, setIsActivated] = useState(false);\n const [progress, setProgress] = useState(0);\n\n useEffect(() => {\n if (!isActivated) {\n return;\n }\n\n const svgCenter = ROUND_VIDEO_DIMENSIONS_PX / 2;\n const svgMargin = 6;\n const circumference = (svgCenter - svgMargin) * 2 * Math.PI;\n const strokeDashOffset = circumference - progress * circumference;\n\n const playerEl = playerRef.current!;\n const playingProgressEl = playingProgressRef.current!;\n const svgEl = playingProgressEl.firstElementChild;\n\n if (!svgEl) {\n playingProgressEl.innerHTML = `\n \n \n `;\n } else {\n (svgEl.firstElementChild as SVGElement).setAttribute('stroke-dashoffset', strokeDashOffset.toString());\n }\n\n setProgress(playerEl.currentTime / playerEl.duration);\n }, [isActivated, progress]);\n\n const shouldPlay = Boolean(mediaData && isIntersecting);\n\n const stopPlaying = useCallback(() => {\n if (!playerRef.current) {\n return;\n }\n\n setIsActivated(false);\n setProgress(0);\n safePlay(playerRef.current);\n\n fastRaf(() => {\n playingProgressRef.current!.innerHTML = '';\n });\n }, []);\n\n const capturePlaying = useCallback(() => {\n stopPrevious?.();\n stopPrevious = stopPlaying;\n }, [stopPlaying]);\n\n useEffect(() => {\n if (!playerRef.current) {\n return;\n }\n\n if (shouldPlay) {\n safePlay(playerRef.current);\n } else {\n playerRef.current.pause();\n }\n }, [shouldPlay]);\n\n useVideoAutoPause(playerRef, shouldPlay);\n useVideoCleanup(playerRef, [mediaData]);\n\n const handleClick = useCallback(() => {\n if (!mediaData) {\n setIsLoadAllowed((isAllowed) => !isAllowed);\n\n return;\n }\n\n if (isDownloading) {\n getActions().cancelMessageMediaDownload({ message });\n return;\n }\n\n const playerEl = playerRef.current!;\n if (isActivated) {\n if (playerEl.paused) {\n safePlay(playerEl);\n stopCurrentAudio();\n } else {\n playerEl.pause();\n }\n } else {\n capturePlaying();\n // Pause is a workaround for iOS Safari – otherwise it stops video after several frames\n playerEl.pause();\n playerEl.currentTime = 0;\n safePlay(playerEl);\n stopCurrentAudio();\n\n setIsActivated(true);\n }\n }, [capturePlaying, isActivated, isDownloading, mediaData, message]);\n\n const handleTimeUpdate = useCallback((e: React.UIEvent) => {\n const playerEl = e.currentTarget;\n\n setProgress(playerEl.currentTime / playerEl.duration);\n }, []);\n\n const videoClassName = buildClassName('full-media', transitionClassNames);\n\n return (\n \n
\n \n
\n {mediaData && (\n
\n {/* eslint-disable-next-line jsx-a11y/media-has-caption */}\n \n \n \n
\n )}\n
\n {shouldSpinnerRender && (\n
\n \n
\n )}\n {!mediaData && !isLoadAllowed && (\n \n )}\n
\n {isActivated ? formatMediaDuration(playerRef.current!.currentTime) : formatMediaDuration(video.duration)}\n {(!isActivated || playerRef.current!.paused) && }\n
\n
\n );\n};\n\nexport default RoundVideo;\n","import React, { FC } from '../../../lib/teact/teact';\n\nimport { ApiKeyboardButton, ApiMessage } from '../../../api/types';\n\nimport { RE_TME_LINK } from '../../../config';\nimport renderText from '../../common/helpers/renderText';\nimport useLang from '../../../hooks/useLang';\n\nimport Button from '../../ui/Button';\n\nimport './InlineButtons.scss';\n\ntype OwnProps = {\n message: ApiMessage;\n onClick: ({ button }: { button: ApiKeyboardButton }) => void;\n};\n\nconst InlineButtons: FC = ({ message, onClick }) => {\n const lang = useLang();\n\n return (\n
\n {message.inlineButtons!.map((row) => (\n
\n {row.map((button) => (\n onClick({ button })}\n >\n {renderText(lang(button.text))}\n {button.type === 'buy' && }\n {button.type === 'url' && !button.value!.match(RE_TME_LINK) && }\n \n ))}\n
\n ))}\n
\n );\n};\n\nexport default InlineButtons;\n","import React, {\n FC, memo, useCallback, useMemo,\n} from '../../../lib/teact/teact';\nimport { getActions, getGlobal } from '../../../global';\n\nimport {\n ApiChat, ApiThreadInfo, ApiUser,\n} from '../../../api/types';\n\nimport { isUserId } from '../../../global/helpers';\nimport { formatIntegerCompact } from '../../../util/textFormat';\nimport buildClassName from '../../../util/buildClassName';\nimport useLang from '../../../hooks/useLang';\n\nimport Avatar from '../../common/Avatar';\n\nimport './CommentButton.scss';\n\ntype OwnProps = {\n threadInfo: ApiThreadInfo;\n disabled?: boolean;\n};\n\nconst CommentButton: FC = ({\n threadInfo,\n disabled,\n}) => {\n const { openChat } = getActions();\n\n const lang = useLang();\n const {\n threadId, chatId, messagesCount, lastMessageId, lastReadInboxMessageId, recentReplierIds,\n } = threadInfo;\n\n const handleClick = useCallback(() => {\n openChat({ id: chatId, threadId });\n }, [openChat, chatId, threadId]);\n\n const recentRepliers = useMemo(() => {\n if (!recentReplierIds?.length) {\n return undefined;\n }\n\n // No need for expensive global updates on chats and users, so we avoid them\n const { users: { byId: usersById }, chats: { byId: chatsById } } = getGlobal();\n\n return recentReplierIds.map((peerId) => {\n return isUserId(peerId) ? usersById[peerId] : chatsById[peerId];\n }).filter(Boolean);\n }, [recentReplierIds]);\n\n if (messagesCount === undefined) {\n return undefined;\n }\n\n function renderRecentRepliers() {\n return (\n recentRepliers && recentRepliers.length > 0 && (\n
\n {recentRepliers.map((user) => (\n \n ))}\n
\n )\n );\n }\n\n const hasUnread = Boolean(lastReadInboxMessageId && lastMessageId && lastReadInboxMessageId < lastMessageId);\n\n return (\n \n \n {(!recentRepliers || recentRepliers.length === 0) && }\n {renderRecentRepliers()}\n
\n {messagesCount ? lang('Comments', messagesCount, 'i') : lang('LeaveAComment')}\n
\n \n \n );\n};\n\nexport default memo(CommentButton);\n","import React, {\n FC, memo, useCallback, useMemo,\n} from '../../../lib/teact/teact';\nimport { getActions, getGlobal } from '../../../global';\n\nimport {\n ApiAvailableReaction, ApiMessage, ApiReactionCount, ApiUser,\n} from '../../../api/types';\nimport { ActiveReaction } from '../../../global/types';\n\nimport buildClassName from '../../../util/buildClassName';\nimport { formatIntegerCompact } from '../../../util/textFormat';\n\nimport Button from '../../ui/Button';\nimport Avatar from '../../common/Avatar';\nimport ReactionAnimatedEmoji from './ReactionAnimatedEmoji';\n\nimport './Reactions.scss';\n\nconst MAX_REACTORS_AVATARS = 3;\n\nconst ReactionButton: FC<{\n reaction: ApiReactionCount;\n message: ApiMessage;\n activeReaction?: ActiveReaction;\n availableReactions?: ApiAvailableReaction[];\n}> = ({\n reaction,\n message,\n activeReaction,\n availableReactions,\n}) => {\n const { sendReaction } = getActions();\n\n const { recentReactions } = message.reactions!;\n\n const recentReactors = useMemo(() => {\n if (!recentReactions || reaction.count > MAX_REACTORS_AVATARS) {\n return undefined;\n }\n\n // No need for expensive global updates on users, so we avoid them\n const usersById = getGlobal().users.byId;\n\n return recentReactions\n .filter((recentReaction) => recentReaction.reaction === reaction.reaction)\n .map((recentReaction) => usersById[recentReaction.userId])\n .filter(Boolean) as ApiUser[];\n }, [reaction, recentReactions]);\n\n const handleClick = useCallback(() => {\n sendReaction({\n reaction: reaction.isChosen ? undefined : reaction.reaction,\n chatId: message.chatId,\n messageId: message.id,\n });\n }, [message, reaction, sendReaction]);\n\n return (\n \n \n {recentReactors?.length ? (\n
\n {recentReactors.map((user) => )}\n
\n ) : formatIntegerCompact(reaction.count)}\n \n );\n};\n\nexport default memo(ReactionButton);\n","import React, { FC, memo } from '../../../lib/teact/teact';\n\nimport { ApiAvailableReaction, ApiMessage } from '../../../api/types';\nimport { ActiveReaction } from '../../../global/types';\n\nimport buildClassName from '../../../util/buildClassName';\n\nimport ReactionButton from './ReactionButton';\n\nimport './Reactions.scss';\n\ntype OwnProps = {\n message: ApiMessage;\n isOutside?: boolean;\n activeReaction?: ActiveReaction;\n availableReactions?: ApiAvailableReaction[];\n metaChildren?: React.ReactNode;\n};\n\nconst Reactions: FC = ({\n message,\n isOutside,\n activeReaction,\n availableReactions,\n metaChildren,\n}) => {\n return (\n
\n {message.reactions!.results.map((reaction) => (\n \n ))}\n {metaChildren}\n
\n );\n};\n\nexport default memo(Reactions);\n","import React, {\n FC, memo, useEffect, useState,\n} from '../../lib/teact/teact';\n\nimport { ActiveEmojiInteraction } from '../../global/types';\n\nimport { ObserveFn, useIsIntersecting } from '../../hooks/useIntersectionObserver';\nimport getAnimationData, { ANIMATED_STICKERS_PATHS } from './helpers/animatedAssets';\nimport useAnimatedEmoji from './hooks/useAnimatedEmoji';\n\nimport AnimatedSticker from './AnimatedSticker';\n\nconst QUALITY = 1;\n\ntype OwnProps = {\n localSticker?: string;\n localEffect?: string;\n isOwn?: boolean;\n soundId?: string;\n observeIntersection?: ObserveFn;\n size?: 'large' | 'medium' | 'small';\n lastSyncTime?: number;\n forceLoadPreview?: boolean;\n messageId?: number;\n chatId?: string;\n activeEmojiInteractions?: ActiveEmojiInteraction[];\n};\n\nconst LocalAnimatedEmoji: FC = ({\n localSticker,\n localEffect,\n isOwn,\n soundId,\n size = 'medium',\n observeIntersection,\n messageId,\n chatId,\n activeEmojiInteractions,\n}) => {\n const {\n playKey,\n ref,\n style,\n width,\n handleClick,\n markAnimationLoaded,\n } = useAnimatedEmoji(size, chatId, messageId, soundId, activeEmojiInteractions, isOwn, localEffect);\n const id = `local_emoji_${localSticker}`;\n\n const isIntersecting = useIsIntersecting(ref, observeIntersection);\n\n const [localStickerAnimationData, setLocalStickerAnimationData] = useState();\n useEffect(() => {\n if (localSticker) {\n getAnimationData(localSticker as keyof typeof ANIMATED_STICKERS_PATHS).then((data) => {\n setLocalStickerAnimationData(data);\n });\n }\n }, [localSticker]);\n\n return (\n \n {localStickerAnimationData && (\n \n )}\n \n );\n};\n\nexport default memo(LocalAnimatedEmoji);\n","import React, {\n FC,\n memo,\n useCallback,\n useEffect,\n useMemo,\n useRef,\n} from '../../../lib/teact/teact';\nimport { getActions, withGlobal } from '../../../global';\n\nimport { ActiveEmojiInteraction, ActiveReaction, MessageListType } from '../../../global/types';\nimport {\n ApiMessage,\n ApiMessageOutgoingStatus,\n ApiUser,\n ApiChat,\n ApiSticker,\n ApiThreadInfo,\n ApiAvailableReaction,\n} from '../../../api/types';\nimport {\n AudioOrigin, FocusDirection, IAlbum, ISettings,\n} from '../../../types';\n\nimport { IS_ANDROID, IS_TOUCH_ENV } from '../../../util/environment';\nimport {\n selectChat,\n selectChatMessage,\n selectUploadProgress,\n selectIsChatWithSelf,\n selectOutgoingStatus,\n selectUser,\n selectIsMessageFocused,\n selectCurrentTextSearch,\n selectAnimatedEmoji,\n selectIsInSelectMode,\n selectIsMessageSelected,\n selectIsDocumentGroupSelected,\n selectSender,\n selectForwardedSender,\n selectThreadTopMessageId,\n selectCanAutoLoadMedia,\n selectCanAutoPlayMedia,\n selectShouldLoopStickers,\n selectTheme,\n selectAllowedMessageActions,\n selectIsDownloading,\n selectThreadInfo,\n selectAnimatedEmojiEffect,\n selectAnimatedEmojiSound,\n selectMessageIdsByGroupId,\n selectLocalAnimatedEmoji,\n selectIsMessageProtected,\n selectLocalAnimatedEmojiEffect,\n selectDefaultReaction,\n} from '../../../global/selectors';\nimport {\n getMessageContent,\n isOwnMessage,\n isReplyMessage,\n isAnonymousOwnMessage,\n isMessageLocal,\n isUserId,\n isChatWithRepliesBot,\n getMessageCustomShape,\n isChatChannel,\n getMessageSingleEmoji,\n getSenderTitle,\n getUserColorKey,\n areReactionsEmpty,\n getMessageHtmlId,\n isGeoLiveExpired,\n} from '../../../global/helpers';\nimport buildClassName from '../../../util/buildClassName';\nimport useEnsureMessage from '../../../hooks/useEnsureMessage';\nimport useContextMenuHandlers from '../../../hooks/useContextMenuHandlers';\nimport { renderMessageText } from '../../common/helpers/renderMessageText';\nimport { ROUND_VIDEO_DIMENSIONS_PX } from '../../common/helpers/mediaDimensions';\nimport { buildContentClassName, isEmojiOnlyMessage } from './helpers/buildContentClassName';\nimport { getMinMediaWidth, calculateMediaDimensions } from './helpers/mediaDimensions';\nimport { calculateAlbumLayout } from './helpers/calculateAlbumLayout';\nimport renderText from '../../common/helpers/renderText';\nimport calculateAuthorWidth from './helpers/calculateAuthorWidth';\nimport { ObserveFn, useOnIntersect } from '../../../hooks/useIntersectionObserver';\nimport useLang from '../../../hooks/useLang';\nimport useShowTransition from '../../../hooks/useShowTransition';\nimport useFlag from '../../../hooks/useFlag';\nimport useFocusMessage from './hooks/useFocusMessage';\nimport useOuterHandlers from './hooks/useOuterHandlers';\nimport useInnerHandlers from './hooks/useInnerHandlers';\nimport { getServerTime } from '../../../util/serverTime';\n\nimport Button from '../../ui/Button';\nimport Avatar from '../../common/Avatar';\nimport EmbeddedMessage from '../../common/EmbeddedMessage';\nimport Document from '../../common/Document';\nimport Audio from '../../common/Audio';\nimport MessageMeta from './MessageMeta';\nimport ContextMenuContainer from './ContextMenuContainer.async';\nimport Sticker from './Sticker';\nimport AnimatedEmoji from '../../common/AnimatedEmoji';\nimport Photo from './Photo';\nimport Video from './Video';\nimport Contact from './Contact';\nimport Poll from './Poll';\nimport WebPage from './WebPage';\nimport Invoice from './Invoice';\nimport Location from './Location';\nimport Album from './Album';\nimport RoundVideo from './RoundVideo';\nimport InlineButtons from './InlineButtons';\nimport CommentButton from './CommentButton';\nimport Reactions from './Reactions';\nimport ReactionStaticEmoji from '../../common/ReactionStaticEmoji';\nimport LocalAnimatedEmoji from '../../common/LocalAnimatedEmoji';\n\nimport './Message.scss';\n\ntype MessagePositionProperties = {\n isFirstInGroup: boolean;\n isLastInGroup: boolean;\n isFirstInDocumentGroup: boolean;\n isLastInDocumentGroup: boolean;\n isLastInList: boolean;\n};\n\ntype OwnProps =\n {\n message: ApiMessage;\n observeIntersectionForBottom: ObserveFn;\n observeIntersectionForMedia: ObserveFn;\n observeIntersectionForAnimatedStickers: ObserveFn;\n album?: IAlbum;\n noAvatars?: boolean;\n withAvatar?: boolean;\n withSenderName?: boolean;\n areReactionsInMeta?: boolean;\n threadId: number;\n messageListType: MessageListType;\n noComments: boolean;\n appearanceOrder: number;\n }\n & MessagePositionProperties;\n\ntype StateProps = {\n theme: ISettings['theme'];\n forceSenderName?: boolean;\n chatUsername?: string;\n sender?: ApiUser | ApiChat;\n canShowSender: boolean;\n originSender?: ApiUser | ApiChat;\n botSender?: ApiUser;\n isThreadTop?: boolean;\n shouldHideReply?: boolean;\n replyMessage?: ApiMessage;\n replyMessageSender?: ApiUser | ApiChat;\n outgoingStatus?: ApiMessageOutgoingStatus;\n uploadProgress?: number;\n isInDocumentGroup: boolean;\n isProtected?: boolean;\n isFocused?: boolean;\n focusDirection?: FocusDirection;\n noFocusHighlight?: boolean;\n isResizingContainer?: boolean;\n isForwarding?: boolean;\n isChatWithSelf?: boolean;\n isRepliesChat?: boolean;\n isChannel?: boolean;\n canReply?: boolean;\n lastSyncTime?: number;\n serverTimeOffset: number;\n highlight?: string;\n isSingleEmoji?: boolean;\n animatedEmoji?: ApiSticker;\n localSticker?: string;\n localEffect?: string;\n animatedEmojiEffect?: ApiSticker;\n animatedEmojiSoundId?: string;\n isInSelectMode?: boolean;\n isSelected?: boolean;\n isGroupSelected?: boolean;\n isDownloading: boolean;\n threadId?: number;\n isPinnedList?: boolean;\n canAutoLoadMedia?: boolean;\n canAutoPlayMedia?: boolean;\n shouldLoopStickers?: boolean;\n autoLoadFileMaxSizeMb: number;\n threadInfo?: ApiThreadInfo;\n reactionMessage?: ApiMessage;\n availableReactions?: ApiAvailableReaction[];\n defaultReaction?: string;\n activeReaction?: ActiveReaction;\n activeEmojiInteractions?: ActiveEmojiInteraction[];\n};\n\ntype MetaPosition =\n 'in-text'\n | 'standalone'\n | 'none';\ntype ReactionsPosition =\n 'inside'\n | 'outside'\n | 'in-meta'\n | 'none';\n\nconst NBSP = '\\u00A0';\n// eslint-disable-next-line max-len\nconst APPENDIX_OWN = { __html: '' };\n// eslint-disable-next-line max-len\nconst APPENDIX_NOT_OWN = { __html: '' };\nconst APPEARANCE_DELAY = 10;\nconst NO_MEDIA_CORNERS_THRESHOLD = 18;\n\nconst Message: FC = ({\n message,\n chatUsername,\n observeIntersectionForBottom,\n observeIntersectionForMedia,\n observeIntersectionForAnimatedStickers,\n album,\n noAvatars,\n withAvatar,\n withSenderName,\n areReactionsInMeta,\n noComments,\n appearanceOrder,\n isFirstInGroup,\n isLastInGroup,\n isFirstInDocumentGroup,\n isLastInDocumentGroup,\n isLastInList,\n theme,\n forceSenderName,\n sender,\n canShowSender,\n originSender,\n botSender,\n isThreadTop,\n shouldHideReply,\n replyMessage,\n replyMessageSender,\n outgoingStatus,\n uploadProgress,\n isInDocumentGroup,\n isProtected,\n isFocused,\n focusDirection,\n noFocusHighlight,\n isResizingContainer,\n isForwarding,\n isChatWithSelf,\n isRepliesChat,\n isChannel,\n canReply,\n lastSyncTime,\n serverTimeOffset,\n highlight,\n animatedEmoji,\n localSticker,\n localEffect,\n animatedEmojiEffect,\n animatedEmojiSoundId,\n isInSelectMode,\n isSelected,\n isGroupSelected,\n threadId,\n reactionMessage,\n availableReactions,\n defaultReaction,\n activeReaction,\n activeEmojiInteractions,\n messageListType,\n isPinnedList,\n isDownloading,\n canAutoLoadMedia,\n canAutoPlayMedia,\n shouldLoopStickers,\n autoLoadFileMaxSizeMb,\n threadInfo,\n}) => {\n const {\n toggleMessageSelection,\n clickInlineButton,\n disableContextMenuHint,\n } = getActions();\n\n // eslint-disable-next-line no-null/no-null\n const ref = useRef(null);\n // eslint-disable-next-line no-null/no-null\n const bottomMarkerRef = useRef(null);\n // eslint-disable-next-line no-null/no-null\n const contentRef = useRef(null);\n\n const lang = useLang();\n\n useOnIntersect(bottomMarkerRef, observeIntersectionForBottom);\n\n const {\n isContextMenuOpen, contextMenuPosition,\n handleBeforeContextMenu, handleContextMenu: onContextMenu,\n handleContextMenuClose, handleContextMenuHide,\n } = useContextMenuHandlers(ref, IS_TOUCH_ENV && isInSelectMode, true, IS_ANDROID);\n\n useEffect(() => {\n if (isContextMenuOpen) {\n disableContextMenuHint();\n }\n }, [isContextMenuOpen, disableContextMenuHint]);\n\n const noAppearanceAnimation = appearanceOrder <= 0;\n const [isShown, markShown] = useFlag(noAppearanceAnimation);\n useEffect(() => {\n if (noAppearanceAnimation) {\n return;\n }\n\n setTimeout(markShown, appearanceOrder * APPEARANCE_DELAY);\n }, [appearanceOrder, markShown, noAppearanceAnimation]);\n const { transitionClassNames } = useShowTransition(isShown, undefined, noAppearanceAnimation, false);\n\n const {\n id: messageId, chatId, forwardInfo, viaBotId,\n } = message;\n\n const isLocal = isMessageLocal(message);\n const isOwn = isOwnMessage(message);\n const isScheduled = messageListType === 'scheduled' || message.isScheduled;\n const hasReply = isReplyMessage(message) && !shouldHideReply;\n const hasThread = Boolean(threadInfo) && messageListType === 'thread';\n const customShape = getMessageCustomShape(message);\n const hasAnimatedEmoji = localSticker || animatedEmoji;\n const hasReactions = reactionMessage?.reactions && !areReactionsEmpty(reactionMessage.reactions);\n const asForwarded = (\n forwardInfo\n && (!isChatWithSelf || isScheduled)\n && !isRepliesChat\n && !forwardInfo.isLinkedChannelPost\n && !customShape\n );\n const isAlbum = Boolean(album) && album!.messages.length > 1;\n const isInDocumentGroupNotFirst = isInDocumentGroup && !isFirstInDocumentGroup;\n const isInDocumentGroupNotLast = isInDocumentGroup && !isLastInDocumentGroup;\n const isContextMenuShown = contextMenuPosition !== undefined;\n const canShowActionButton = (\n !(isContextMenuShown || isInSelectMode || isForwarding)\n && !isInDocumentGroupNotLast\n );\n const canForward = isChannel && !isScheduled;\n const canFocus = Boolean(isPinnedList\n || (forwardInfo\n && (forwardInfo.isChannelPost || (isChatWithSelf && !isOwn) || isRepliesChat)\n && forwardInfo.fromMessageId\n ));\n\n const withCommentButton = threadInfo && !isInDocumentGroupNotLast && messageListType === 'thread' && !noComments;\n const withQuickReactionButton = !IS_TOUCH_ENV && !isInSelectMode && defaultReaction && !isInDocumentGroupNotLast;\n\n const selectMessage = useCallback((e?: React.MouseEvent, groupedId?: string) => {\n toggleMessageSelection({\n messageId,\n groupedId,\n ...(e?.shiftKey && { withShift: true }),\n ...(isAlbum && { childMessageIds: album!.messages.map(({ id }) => id) }),\n });\n }, [toggleMessageSelection, messageId, isAlbum, album]);\n\n const messageSender = canShowSender ? sender : undefined;\n\n const avatarPeer = forwardInfo && (isChatWithSelf || isRepliesChat || !messageSender) ? originSender : messageSender;\n const senderPeer = forwardInfo ? originSender : messageSender;\n\n const {\n handleMouseDown,\n handleClick,\n handleContextMenu,\n handleDoubleClick,\n handleContentDoubleClick,\n handleMouseMove,\n handleSendQuickReaction,\n handleMouseLeave,\n isSwiped,\n isQuickReactionVisible,\n handleDocumentGroupMouseEnter,\n } = useOuterHandlers(\n selectMessage,\n ref,\n messageId,\n isAlbum,\n Boolean(isInSelectMode),\n Boolean(canReply),\n Boolean(isProtected),\n onContextMenu,\n handleBeforeContextMenu,\n chatId,\n isContextMenuShown,\n contentRef,\n isOwn,\n isInDocumentGroupNotLast,\n );\n\n const {\n handleAvatarClick,\n handleSenderClick,\n handleViaBotClick,\n handleReplyClick,\n handleMediaClick,\n handleAudioPlay,\n handleAlbumMediaClick,\n handleMetaClick,\n handleReadMedia,\n handleCancelUpload,\n handleVoteSend,\n handleGroupForward,\n handleForward,\n handleFocus,\n handleFocusForwarded,\n handleDocumentGroupSelectAll,\n } = useInnerHandlers(\n lang,\n selectMessage,\n message,\n chatId,\n threadId,\n isInDocumentGroup,\n asForwarded,\n isScheduled,\n isRepliesChat,\n album,\n avatarPeer,\n senderPeer,\n botSender,\n );\n\n const containerClassName = buildClassName(\n 'Message message-list-item',\n isFirstInGroup && 'first-in-group',\n isProtected && 'is-protected',\n isLastInGroup && 'last-in-group',\n isFirstInDocumentGroup && 'first-in-document-group',\n isLastInDocumentGroup && 'last-in-document-group',\n isLastInList && 'last-in-list',\n isOwn && 'own',\n Boolean(message.views) && 'has-views',\n message.isEdited && 'was-edited',\n hasReply && 'has-reply',\n isContextMenuShown && 'has-menu-open',\n isFocused && !noFocusHighlight && 'focused',\n isForwarding && 'is-forwarding',\n message.isDeleting && 'is-deleting',\n isInDocumentGroup && 'is-in-document-group',\n isAlbum && 'is-album',\n message.hasUnreadMention && 'has-unread-mention',\n isSelected && 'is-selected',\n isInSelectMode && 'is-in-selection-mode',\n isThreadTop && 'is-thread-top',\n Boolean(message.inlineButtons) && 'has-inline-buttons',\n isSwiped && 'is-swiped',\n transitionClassNames,\n Boolean(activeReaction) && 'has-active-reaction',\n );\n\n const {\n text, photo, video, audio, voice, document, sticker, contact, poll, webPage, invoice, location,\n } = getMessageContent(message);\n\n const contentClassName = buildContentClassName(message, {\n hasReply,\n customShape,\n isLastInGroup,\n asForwarded,\n hasThread,\n forceSenderName,\n hasComments: threadInfo && threadInfo?.messagesCount > 0,\n hasActionButton: canForward || canFocus,\n hasReactions,\n isGeoLiveActive: location?.type === 'geoLive' && !isGeoLiveExpired(message, getServerTime(serverTimeOffset)),\n });\n\n const withAppendix = contentClassName.includes('has-appendix');\n const textParts = renderMessageText(message, highlight, isEmojiOnlyMessage(customShape));\n\n let metaPosition!: MetaPosition;\n if (isInDocumentGroupNotLast) {\n metaPosition = 'none';\n } else if (textParts && !hasAnimatedEmoji && !webPage) {\n metaPosition = 'in-text';\n } else {\n metaPosition = 'standalone';\n }\n\n let reactionsPosition!: ReactionsPosition;\n if (areReactionsInMeta) {\n reactionsPosition = 'in-meta';\n } else if (hasReactions) {\n if (customShape || ((photo || video || hasAnimatedEmoji) && !textParts)) {\n reactionsPosition = 'outside';\n } else if (asForwarded) {\n metaPosition = 'standalone';\n reactionsPosition = 'inside';\n } else {\n reactionsPosition = 'inside';\n }\n } else {\n reactionsPosition = 'none';\n }\n\n useEnsureMessage(\n isRepliesChat && message.replyToChatId ? message.replyToChatId : chatId,\n hasReply ? message.replyToMessageId : undefined,\n replyMessage,\n message.id,\n );\n useFocusMessage(ref, chatId, isFocused, focusDirection, noFocusHighlight, isResizingContainer);\n\n let style = '';\n let calculatedWidth;\n let noMediaCorners = false;\n const albumLayout = useMemo(() => {\n return isAlbum ? calculateAlbumLayout(isOwn, Boolean(asForwarded), Boolean(noAvatars), album!) : undefined;\n }, [isAlbum, isOwn, asForwarded, noAvatars, album]);\n\n const extraPadding = asForwarded ? 28 : 0;\n if (!isAlbum && (photo || video)) {\n let width: number | undefined;\n if (photo) {\n width = calculateMediaDimensions(message, noAvatars).width;\n } else if (video) {\n if (video.isRound) {\n width = ROUND_VIDEO_DIMENSIONS_PX;\n } else {\n width = calculateMediaDimensions(message, noAvatars).width;\n }\n }\n\n if (width) {\n calculatedWidth = Math.max(getMinMediaWidth(Boolean(text), withCommentButton), width);\n if (calculatedWidth - width > NO_MEDIA_CORNERS_THRESHOLD) {\n noMediaCorners = true;\n }\n }\n } else if (albumLayout) {\n calculatedWidth = Math.max(getMinMediaWidth(Boolean(text), withCommentButton), albumLayout.containerStyle.width);\n if (calculatedWidth - albumLayout.containerStyle.width > NO_MEDIA_CORNERS_THRESHOLD) {\n noMediaCorners = true;\n }\n }\n\n if (calculatedWidth) {\n style = `width: ${calculatedWidth + extraPadding}px`;\n }\n\n const signature = (isChannel && message.adminTitle) || (!asForwarded && forwardInfo?.adminTitle) || undefined;\n const metaSafeAuthorWidth = useMemo(() => {\n return signature ? calculateAuthorWidth(signature) : undefined;\n }, [signature]);\n\n function renderAvatar() {\n const isAvatarPeerUser = avatarPeer && isUserId(avatarPeer.id);\n const avatarUser = (avatarPeer && isAvatarPeerUser) ? avatarPeer as ApiUser : undefined;\n const avatarChat = (avatarPeer && !isAvatarPeerUser) ? avatarPeer as ApiChat : undefined;\n const hiddenName = (!avatarPeer && forwardInfo) ? forwardInfo.hiddenUserName : undefined;\n\n return (\n \n );\n }\n\n function renderReactionsAndMeta() {\n const meta = (\n \n );\n\n if (reactionsPosition !== 'inside') {\n return meta;\n }\n\n return (\n \n );\n }\n\n function renderContent() {\n const className = buildClassName(\n 'content-inner',\n asForwarded && 'forwarded-message',\n hasReply && 'reply-message',\n noMediaCorners && 'no-media-corners',\n );\n const hasCustomAppendix = isLastInGroup && !textParts && !asForwarded && !hasThread;\n const textContentClass = buildClassName(\n 'text-content',\n metaPosition === 'in-text' && 'with-meta',\n outgoingStatus && 'with-outgoing-icon',\n );\n\n return (\n
\n {renderSenderName()}\n {hasReply && (\n \n )}\n {sticker && (\n \n )}\n {animatedEmoji && (\n \n )}\n {localSticker && (\n \n )}\n {isAlbum && (\n \n )}\n {!isAlbum && photo && (\n \n )}\n {!isAlbum && video && video.isRound && (\n \n )}\n {!isAlbum && video && !video.isRound && (\n \n )}\n {(audio || voice) && (\n \n )}\n {document && (\n \n )}\n {contact && (\n \n )}\n {poll && (\n \n )}\n {!hasAnimatedEmoji && textParts && (\n

\n {textParts}\n {metaPosition === 'in-text' && renderReactionsAndMeta()}\n

\n )}\n\n {webPage && (\n \n )}\n {invoice && }\n {location && (\n \n )}\n
\n );\n }\n\n function renderSenderName() {\n const media = photo || video || location;\n const shouldRender = !(customShape && !viaBotId) && (\n (withSenderName && !media) || asForwarded || viaBotId || forceSenderName\n ) && !isInDocumentGroupNotFirst && !(hasReply && customShape);\n\n if (!shouldRender) {\n return undefined;\n }\n\n let senderTitle;\n let senderColor;\n if (senderPeer && !(customShape && viaBotId)) {\n senderTitle = getSenderTitle(lang, senderPeer);\n\n if (!asForwarded) {\n senderColor = `color-${getUserColorKey(senderPeer)}`;\n }\n } else if (forwardInfo?.hiddenUserName) {\n senderTitle = forwardInfo.hiddenUserName;\n }\n\n return (\n
\n {senderTitle ? (\n \n {renderText(senderTitle)}\n \n ) : !botSender ? (\n NBSP\n ) : undefined}\n {botSender && (\n <>\n {lang('ViaBot')}\n \n {renderText(`@${botSender.username}`)}\n \n \n )}\n {forwardInfo?.isLinkedChannelPost ? (\n {lang('DiscussChannel')}\n ) : message.adminTitle && !isChannel ? (\n {message.adminTitle}\n ) : undefined}\n
\n );\n }\n\n return (\n \n \n {!isInDocumentGroup && (\n
\n {isSelected && }\n
\n )}\n {isLastInDocumentGroup && (\n \n {isGroupSelected && (\n \n )}\n \n )}\n {withAvatar && renderAvatar()}\n \n \n {asForwarded && !isInDocumentGroupNotFirst && (\n
{lang('ForwardedMessage')}
\n )}\n {renderContent()}\n {!isInDocumentGroupNotLast && metaPosition === 'standalone' && renderReactionsAndMeta()}\n {canShowActionButton && canForward ? (\n \n \n \n ) : canShowActionButton && canFocus ? (\n \n \n \n ) : undefined}\n {withCommentButton && }\n {withAppendix && (\n
\n )}\n {withQuickReactionButton && (\n \n \n
\n )}\n \n {message.inlineButtons && (\n \n )}\n {reactionsPosition === 'outside' && (\n \n )}\n \n {contextMenuPosition && (\n \n )}\n \n );\n};\n\nexport default memo(withGlobal(\n (global, ownProps): StateProps => {\n const {\n focusedMessage, forwardMessages, lastSyncTime, serverTimeOffset,\n } = global;\n const {\n message, album, withSenderName, withAvatar, threadId, messageListType, isLastInDocumentGroup,\n } = ownProps;\n const {\n id, chatId, viaBotId, replyToChatId, replyToMessageId, isOutgoing, threadInfo,\n } = message;\n\n const chat = selectChat(global, chatId);\n const isChatWithSelf = selectIsChatWithSelf(global, chatId);\n const isRepliesChat = isChatWithRepliesBot(chatId);\n const isChannel = chat && isChatChannel(chat);\n const chatUsername = chat?.username;\n\n const forceSenderName = !isChatWithSelf && isAnonymousOwnMessage(message);\n const canShowSender = withSenderName || withAvatar || forceSenderName;\n const sender = selectSender(global, message);\n const originSender = selectForwardedSender(global, message);\n const botSender = viaBotId ? selectUser(global, viaBotId) : undefined;\n\n const threadTopMessageId = threadId ? selectThreadTopMessageId(global, chatId, threadId) : undefined;\n const isThreadTop = message.id === threadTopMessageId;\n\n const shouldHideReply = replyToMessageId === threadTopMessageId;\n const replyMessage = replyToMessageId && !shouldHideReply\n ? selectChatMessage(global, isRepliesChat && replyToChatId ? replyToChatId : chatId, replyToMessageId)\n : undefined;\n const replyMessageSender = replyMessage && selectSender(global, replyMessage);\n\n const uploadProgress = selectUploadProgress(global, message);\n const isFocused = messageListType === 'thread' && (\n album\n ? album.messages.some((m) => selectIsMessageFocused(global, m))\n : selectIsMessageFocused(global, message)\n );\n\n const {\n direction: focusDirection, noHighlight: noFocusHighlight, isResizingContainer,\n } = (isFocused && focusedMessage) || {};\n\n const isForwarding = forwardMessages.messageIds && forwardMessages.messageIds.includes(id);\n\n const { query: highlight } = selectCurrentTextSearch(global) || {};\n\n const singleEmoji = getMessageSingleEmoji(message);\n let isSelected: boolean;\n\n if (album?.messages) {\n isSelected = album.messages.every(({ id: messageId }) => selectIsMessageSelected(global, messageId));\n } else {\n isSelected = selectIsMessageSelected(global, id);\n }\n\n const { canReply } = (messageListType === 'thread' && selectAllowedMessageActions(global, message, threadId)) || {};\n const isDownloading = selectIsDownloading(global, message);\n const actualThreadInfo = threadInfo\n ? selectThreadInfo(global, threadInfo.chatId, threadInfo.threadId) || threadInfo\n : undefined;\n\n const isInDocumentGroup = Boolean(message.groupedId) && !message.isInAlbum;\n const documentGroupFirstMessageId = isInDocumentGroup\n ? selectMessageIdsByGroupId(global, chatId, message.groupedId!)![0]\n : undefined;\n const reactionMessage = isInDocumentGroup ? (\n isLastInDocumentGroup ? selectChatMessage(global, chatId, documentGroupFirstMessageId!) : undefined\n ) : message;\n\n const localSticker = singleEmoji ? selectLocalAnimatedEmoji(global, singleEmoji) : undefined;\n\n return {\n theme: selectTheme(global),\n chatUsername,\n forceSenderName,\n sender,\n canShowSender,\n originSender,\n botSender,\n shouldHideReply,\n isThreadTop,\n replyMessage,\n replyMessageSender,\n isInDocumentGroup,\n isProtected: selectIsMessageProtected(global, message),\n isFocused,\n isForwarding,\n reactionMessage,\n isChatWithSelf,\n isRepliesChat,\n isChannel,\n canReply,\n lastSyncTime,\n serverTimeOffset,\n highlight,\n isSingleEmoji: Boolean(singleEmoji),\n animatedEmoji: singleEmoji ? selectAnimatedEmoji(global, singleEmoji) : undefined,\n animatedEmojiEffect: singleEmoji && isUserId(chatId) ? selectAnimatedEmojiEffect(global, singleEmoji) : undefined,\n animatedEmojiSoundId: singleEmoji ? selectAnimatedEmojiSound(global, singleEmoji) : undefined,\n localSticker,\n localEffect: localSticker && isUserId(chatId) ? selectLocalAnimatedEmojiEffect(localSticker) : undefined,\n isInSelectMode: selectIsInSelectMode(global),\n isSelected,\n isGroupSelected: (\n Boolean(message.groupedId)\n && !message.isInAlbum\n && selectIsDocumentGroupSelected(global, chatId, message.groupedId)\n ),\n threadId,\n isDownloading,\n isPinnedList: messageListType === 'pinned',\n canAutoLoadMedia: selectCanAutoLoadMedia(global, message),\n canAutoPlayMedia: selectCanAutoPlayMedia(global, message),\n autoLoadFileMaxSizeMb: global.settings.byKey.autoLoadFileMaxSizeMb,\n shouldLoopStickers: selectShouldLoopStickers(global),\n threadInfo: actualThreadInfo,\n availableReactions: global.availableReactions,\n defaultReaction: isMessageLocal(message) ? undefined : selectDefaultReaction(global, chatId),\n activeReaction: reactionMessage && global.activeReactions[reactionMessage.id],\n activeEmojiInteractions: global.activeEmojiInteractions,\n ...(isOutgoing && { outgoingStatus: selectOutgoingStatus(global, message, messageListType === 'scheduled') }),\n ...(typeof uploadProgress === 'number' && { uploadProgress }),\n ...(isFocused && { focusDirection, noFocusHighlight, isResizingContainer }),\n };\n },\n)(Message));\n","import React, { useCallback } from '../../../../lib/teact/teact';\nimport { getActions } from '../../../../global';\n\nimport { IAlbum, MediaViewerOrigin } from '../../../../types';\nimport {\n ApiChat, ApiMessage, ApiUser, MAIN_THREAD_ID,\n} from '../../../../api/types';\nimport { LangFn } from '../../../../hooks/useLang';\n\nexport default function useInnerHandlers(\n lang: LangFn,\n selectMessage: (e: React.MouseEvent, groupedId?: string) => void,\n message: ApiMessage,\n chatId: string,\n threadId: number,\n isInDocumentGroup: boolean,\n asForwarded?: boolean,\n isScheduled?: boolean,\n isChatWithRepliesBot?: boolean,\n album?: IAlbum,\n avatarPeer?: ApiUser | ApiChat,\n senderPeer?: ApiUser | ApiChat,\n botSender?: ApiUser,\n) {\n const {\n openChat, showNotification, focusMessage, openMediaViewer, openAudioPlayer,\n markMessagesRead, cancelSendingMessage, sendPollVote, openForwardMenu, focusMessageInComments,\n } = getActions();\n\n const {\n id: messageId, forwardInfo, replyToMessageId, replyToChatId, replyToTopMessageId, groupedId,\n } = message;\n\n const handleAvatarClick = useCallback(() => {\n if (!avatarPeer) {\n return;\n }\n\n openChat({ id: avatarPeer.id });\n }, [avatarPeer, openChat]);\n\n const handleSenderClick = useCallback(() => {\n if (!senderPeer) {\n showNotification({ message: lang('HidAccount') });\n\n return;\n }\n\n if (asForwarded && forwardInfo?.channelPostId) {\n focusMessage({ chatId: senderPeer.id, messageId: forwardInfo.channelPostId });\n } else {\n openChat({ id: senderPeer.id });\n }\n }, [\n asForwarded, focusMessage, forwardInfo, lang, openChat, senderPeer, showNotification,\n ]);\n\n const handleViaBotClick = useCallback(() => {\n if (!botSender) {\n return;\n }\n\n openChat({ id: botSender.id });\n }, [botSender, openChat]);\n\n const handleReplyClick = useCallback((): void => {\n focusMessage({\n chatId: isChatWithRepliesBot && replyToChatId ? replyToChatId : chatId,\n threadId,\n messageId: replyToMessageId,\n replyMessageId: isChatWithRepliesBot && replyToChatId ? undefined : messageId,\n });\n }, [focusMessage, isChatWithRepliesBot, replyToChatId, chatId, threadId, replyToMessageId, messageId]);\n\n const handleMediaClick = useCallback((): void => {\n openMediaViewer({\n chatId, threadId, messageId, origin: isScheduled ? MediaViewerOrigin.ScheduledInline : MediaViewerOrigin.Inline,\n });\n }, [chatId, threadId, messageId, openMediaViewer, isScheduled]);\n\n const handleAudioPlay = useCallback((): void => {\n openAudioPlayer({ chatId, messageId });\n }, [chatId, messageId, openAudioPlayer]);\n\n const handleAlbumMediaClick = useCallback((albumMessageId: number): void => {\n openMediaViewer({\n chatId,\n threadId,\n messageId: albumMessageId,\n origin: isScheduled ? MediaViewerOrigin.ScheduledAlbum : MediaViewerOrigin.Album,\n });\n }, [chatId, threadId, openMediaViewer, isScheduled]);\n\n const handleReadMedia = useCallback((): void => {\n markMessagesRead({ messageIds: [messageId] });\n }, [messageId, markMessagesRead]);\n\n const handleCancelUpload = useCallback(() => {\n cancelSendingMessage({ chatId, messageId });\n }, [cancelSendingMessage, chatId, messageId]);\n\n const handleVoteSend = useCallback((options: string[]) => {\n sendPollVote({ chatId, messageId, options });\n }, [chatId, messageId, sendPollVote]);\n\n const handleGroupForward = useCallback(() => {\n openForwardMenu({ fromChatId: chatId, groupedId });\n }, [openForwardMenu, chatId, groupedId]);\n\n const handleForward = useCallback(() => {\n if (album && album.messages) {\n const messageIds = album.messages.map(({ id }) => id);\n openForwardMenu({ fromChatId: chatId, messageIds });\n } else {\n openForwardMenu({ fromChatId: chatId, messageIds: [messageId] });\n }\n }, [album, openForwardMenu, chatId, messageId]);\n\n const handleFocus = useCallback(() => {\n focusMessage({\n chatId, threadId: MAIN_THREAD_ID, messageId,\n });\n }, [focusMessage, chatId, messageId]);\n\n const handleFocusForwarded = useCallback(() => {\n if (isInDocumentGroup) {\n focusMessage({\n chatId: forwardInfo!.fromChatId, groupedId, groupedChatId: chatId,\n });\n return;\n }\n\n if (isChatWithRepliesBot && replyToChatId) {\n focusMessageInComments({\n chatId: replyToChatId,\n threadId: replyToTopMessageId,\n messageId: forwardInfo!.fromMessageId,\n });\n } else {\n focusMessage({\n chatId: forwardInfo!.fromChatId, messageId: forwardInfo!.fromMessageId,\n });\n }\n }, [\n isInDocumentGroup, isChatWithRepliesBot, replyToChatId, focusMessage, forwardInfo, groupedId, chatId,\n focusMessageInComments, replyToTopMessageId,\n ]);\n\n const selectWithGroupedId = useCallback((e: React.MouseEvent) => {\n e.stopPropagation();\n\n selectMessage(e, groupedId);\n }, [selectMessage, groupedId]);\n\n return {\n handleAvatarClick,\n handleSenderClick,\n handleViaBotClick,\n handleReplyClick,\n handleMediaClick,\n handleAudioPlay,\n handleAlbumMediaClick,\n handleMetaClick: selectWithGroupedId,\n handleReadMedia,\n handleCancelUpload,\n handleVoteSend,\n handleGroupForward,\n handleForward,\n handleFocus,\n handleFocusForwarded,\n handleDocumentGroupSelectAll: selectWithGroupedId,\n };\n}\n","import { RefObject } from 'react';\nimport React, {\n FC, memo, useCallback, useEffect, useRef,\n} from '../../../lib/teact/teact';\nimport { getActions, withGlobal } from '../../../global';\n\nimport { ApiChat, ApiSponsoredMessage, ApiUser } from '../../../api/types';\n\nimport { renderTextWithEntities } from '../../common/helpers/renderTextWithEntities';\nimport { selectChat, selectSponsoredMessage, selectUser } from '../../../global/selectors';\nimport { getChatTitle, getUserFullName } from '../../../global/helpers';\nimport renderText from '../../common/helpers/renderText';\nimport useLang from '../../../hooks/useLang';\nimport { useIntersectionObserver } from '../../../hooks/useIntersectionObserver';\n\nimport Button from '../../ui/Button';\n\nimport './SponsoredMessage.scss';\n\ntype OwnProps = {\n chatId: string;\n containerRef: RefObject;\n};\n\ntype StateProps = {\n message?: ApiSponsoredMessage;\n bot?: ApiUser;\n channel?: ApiChat;\n};\n\nconst INTERSECTION_DEBOUNCE_MS = 200;\n\nconst SponsoredMessage: FC = ({\n chatId,\n message,\n containerRef,\n bot,\n channel,\n}) => {\n const {\n viewSponsoredMessage,\n openChat,\n openChatByInvite,\n startBot,\n focusMessage,\n } = getActions();\n const lang = useLang();\n // eslint-disable-next-line no-null/no-null\n const contentRef = useRef(null);\n const shouldObserve = Boolean(message);\n const {\n observe: observeIntersection,\n } = useIntersectionObserver({\n rootRef: containerRef,\n debounceMs: INTERSECTION_DEBOUNCE_MS,\n threshold: 1,\n });\n\n useEffect(() => {\n return shouldObserve ? observeIntersection(contentRef.current!, (target) => {\n if (target.isIntersecting) {\n viewSponsoredMessage({ chatId });\n }\n }) : undefined;\n }, [chatId, shouldObserve, observeIntersection, viewSponsoredMessage]);\n\n const handleClick = useCallback(() => {\n if (!message) return;\n if (message.chatInviteHash) {\n openChatByInvite({ hash: message.chatInviteHash });\n } else if (message.channelPostId) {\n focusMessage({ chatId: message.chatId, messageId: message.channelPostId });\n } else {\n openChat({ id: message.chatId });\n\n if (message.startParam) {\n startBot({\n botId: message.chatId,\n param: message.startParam,\n });\n }\n }\n }, [focusMessage, message, openChat, openChatByInvite, startBot]);\n\n if (!message) {\n return undefined;\n }\n\n return (\n
\n
\n
\n
\n {bot && renderText(getUserFullName(bot) || '')}\n {channel && renderText(message.chatInviteTitle || getChatTitle(lang, channel, bot) || '')}\n
\n\n

\n \n {renderTextWithEntities(message.text.text, message.text.entities)}\n \n\n \n {lang('SponsoredMessage')}\n \n

\n\n \n
\n
\n
\n );\n};\n\nexport default memo(withGlobal(\n (global, { chatId }): StateProps => {\n const message = selectSponsoredMessage(global, chatId);\n const { chatId: fromChatId, isBot } = message || {};\n\n return {\n message,\n bot: fromChatId && isBot ? selectUser(global, fromChatId) : undefined,\n channel: !isBot && fromChatId ? selectChat(global, fromChatId) : undefined,\n };\n },\n)(SponsoredMessage));\n","import { RefObject } from 'react';\nimport React, { FC, memo } from '../../lib/teact/teact';\n\nimport { MessageListType } from '../../global/types';\n\nimport { SCHEDULED_WHEN_ONLINE } from '../../config';\nimport buildClassName from '../../util/buildClassName';\nimport { compact, flatten } from '../../util/iteratees';\nimport { formatHumanDate } from '../../util/dateFormat';\nimport {\n getMessageHtmlId, getMessageOriginalId, isActionMessage, isOwnMessage,\n} from '../../global/helpers';\nimport useLang from '../../hooks/useLang';\nimport { isAlbum, MessageDateGroup } from './helpers/groupMessages';\nimport { preventMessageInputBlur } from './helpers/preventMessageInputBlur';\nimport useScrollHooks from './hooks/useScrollHooks';\nimport useMessageObservers from './hooks/useMessageObservers';\n\nimport Message from './message/Message';\nimport SponsoredMessage from './message/SponsoredMessage';\nimport ActionMessage from './ActionMessage';\nimport { getActions } from '../../global';\n\ninterface OwnProps {\n chatId: string;\n messageIds: number[];\n messageGroups: MessageDateGroup[];\n isViewportNewest: boolean;\n isUnread: boolean;\n withUsers: boolean;\n noAvatars: boolean;\n containerRef: RefObject;\n anchorIdRef: { current: string | undefined };\n memoUnreadDividerBeforeIdRef: { current: number | undefined };\n memoFirstUnreadIdRef: { current: number | undefined };\n threadId: number;\n type: MessageListType;\n isReady: boolean;\n areReactionsInMeta: boolean;\n isScrollingRef: { current: boolean | undefined };\n isScrollPatchNeededRef: { current: boolean | undefined };\n threadTopMessageId: number | undefined;\n hasLinkedChat: boolean | undefined;\n isSchedule: boolean;\n noAppearanceAnimation: boolean;\n onFabToggle: AnyToVoidFunction;\n onNotchToggle: AnyToVoidFunction;\n}\n\nconst UNREAD_DIVIDER_CLASS = 'unread-divider';\n\nconst MessageListContent: FC = ({\n chatId,\n messageIds,\n messageGroups,\n isViewportNewest,\n isUnread,\n withUsers,\n areReactionsInMeta,\n noAvatars,\n containerRef,\n anchorIdRef,\n memoUnreadDividerBeforeIdRef,\n memoFirstUnreadIdRef,\n threadId,\n type,\n isReady,\n isScrollingRef,\n isScrollPatchNeededRef,\n threadTopMessageId,\n hasLinkedChat,\n isSchedule,\n noAppearanceAnimation,\n onFabToggle,\n onNotchToggle,\n}) => {\n const { openHistoryCalendar } = getActions();\n\n const {\n observeIntersectionForMedia,\n observeIntersectionForReading,\n observeIntersectionForAnimatedStickers,\n } = useMessageObservers(type, containerRef, memoFirstUnreadIdRef);\n\n const {\n backwardsTriggerRef,\n forwardsTriggerRef,\n fabTriggerRef,\n } = useScrollHooks(\n type,\n containerRef,\n messageIds,\n isViewportNewest,\n isUnread,\n onFabToggle,\n onNotchToggle,\n isReady,\n isScrollingRef,\n isScrollPatchNeededRef,\n );\n\n const lang = useLang();\n\n const unreadDivider = (\n
\n {lang('UnreadMessages')}\n
\n );\n\n const messageCountToAnimate = noAppearanceAnimation ? 0 : messageGroups.reduce((acc, messageGroup) => {\n return acc + flatten(messageGroup.senderGroups).length;\n }, 0);\n let appearanceIndex = 0;\n\n const dateGroups = messageGroups.map((\n dateGroup: MessageDateGroup,\n dateGroupIndex: number,\n dateGroupsArray: MessageDateGroup[],\n ) => {\n const senderGroups = dateGroup.senderGroups.map((\n senderGroup,\n senderGroupIndex,\n senderGroupsArray,\n ) => {\n if (senderGroup.length === 1 && !isAlbum(senderGroup[0]) && isActionMessage(senderGroup[0])) {\n const message = senderGroup[0];\n const isLastInList = (\n senderGroupIndex === senderGroupsArray.length - 1\n && dateGroupIndex === dateGroupsArray.length - 1\n );\n\n return compact([\n message.id === memoUnreadDividerBeforeIdRef.current && unreadDivider,\n ,\n ]);\n }\n\n let currentDocumentGroupId: string | undefined;\n\n return flatten(senderGroup.map((\n messageOrAlbum,\n messageIndex,\n ) => {\n const message = isAlbum(messageOrAlbum) ? messageOrAlbum.mainMessage : messageOrAlbum;\n const album = isAlbum(messageOrAlbum) ? messageOrAlbum : undefined;\n const isOwn = isOwnMessage(message);\n const isMessageAlbum = isAlbum(messageOrAlbum);\n const nextMessage = senderGroup[messageIndex + 1];\n\n if (message.previousLocalId && anchorIdRef.current === getMessageHtmlId(message.previousLocalId)) {\n anchorIdRef.current = getMessageHtmlId(message.id);\n }\n\n const documentGroupId = !isMessageAlbum && message.groupedId ? message.groupedId : undefined;\n const nextDocumentGroupId = nextMessage && !isAlbum(nextMessage) ? nextMessage.groupedId : undefined;\n\n const position = {\n isFirstInGroup: messageIndex === 0,\n isLastInGroup: messageIndex === senderGroup.length - 1,\n isFirstInDocumentGroup: Boolean(documentGroupId && documentGroupId !== currentDocumentGroupId),\n isLastInDocumentGroup: Boolean(documentGroupId && documentGroupId !== nextDocumentGroupId),\n isLastInList: (\n messageIndex === senderGroup.length - 1\n && senderGroupIndex === senderGroupsArray.length - 1\n && dateGroupIndex === dateGroupsArray.length - 1\n ),\n };\n\n currentDocumentGroupId = documentGroupId;\n\n const originalId = getMessageOriginalId(message);\n // Scheduled messages can have local IDs in the middle of the list,\n // and keys should be ordered, so we prefix it with a date.\n // However, this may lead to issues if server date is not synchronized with the local one.\n const key = type !== 'scheduled' ? originalId : `${message.date}_${originalId}`;\n\n return compact([\n message.id === memoUnreadDividerBeforeIdRef.current && unreadDivider,\n ,\n message.id === threadTopMessageId && (\n
\n {lang('DiscussionStarted')}\n
\n ),\n ]);\n }));\n });\n\n return (\n \n openHistoryCalendar({ selectedAt: dateGroup.datetime }) : undefined}\n >\n \n {isSchedule && dateGroup.originalDate === SCHEDULED_WHEN_ONLINE && (\n lang('MessageScheduledUntilOnline')\n )}\n {isSchedule && dateGroup.originalDate !== SCHEDULED_WHEN_ONLINE && (\n lang('MessageScheduledOn', formatHumanDate(lang, dateGroup.datetime, undefined, true))\n )}\n {!isSchedule && formatHumanDate(lang, dateGroup.datetime)}\n \n \n {flatten(senderGroups)}\n \n );\n });\n\n return (\n
\n
\n {flatten(dateGroups)}\n {isViewportNewest && }\n \n \n
\n );\n};\n\nexport default memo(MessageListContent);\n","import { RefObject } from 'react';\nimport { getActions } from '../../../global';\nimport { useMemo, useRef } from '../../../lib/teact/teact';\n\nimport { LoadMoreDirection } from '../../../types';\nimport { MessageListType } from '../../../global/types';\n\nimport { LOCAL_MESSAGE_ID_BASE, MESSAGE_LIST_SLICE } from '../../../config';\nimport { IS_SCROLL_PATCH_NEEDED, MESSAGE_LIST_SENSITIVE_AREA } from '../../../util/environment';\nimport { debounce } from '../../../util/schedulers';\nimport { useIntersectionObserver, useOnIntersect } from '../../../hooks/useIntersectionObserver';\nimport useOnChange from '../../../hooks/useOnChange';\n\nconst FAB_THRESHOLD = 50;\nconst NOTCH_THRESHOLD = 1; // Notch has zero height so we at least need a 1px margin to intersect\nconst TOOLS_FREEZE_TIMEOUT = 250; // Approximate message sending animation duration\n\nexport default function useScrollHooks(\n type: MessageListType,\n containerRef: RefObject,\n messageIds: number[],\n isViewportNewest: boolean,\n isUnread: boolean,\n onFabToggle: AnyToVoidFunction,\n onNotchToggle: AnyToVoidFunction,\n isReady: boolean,\n isScrollingRef: { current: boolean | undefined },\n isScrollPatchNeededRef: { current: boolean | undefined },\n) {\n const { loadViewportMessages } = getActions();\n\n const [loadMoreBackwards, loadMoreForwards] = useMemo(\n () => (type === 'thread' ? [\n debounce(() => loadViewportMessages({ direction: LoadMoreDirection.Backwards }), 1000, true, false),\n debounce(() => loadViewportMessages({ direction: LoadMoreDirection.Forwards }), 1000, true, false),\n ] : []),\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [loadViewportMessages, messageIds],\n );\n\n // eslint-disable-next-line no-null/no-null\n const backwardsTriggerRef = useRef(null);\n // eslint-disable-next-line no-null/no-null\n const forwardsTriggerRef = useRef(null);\n // eslint-disable-next-line no-null/no-null\n const fabTriggerRef = useRef(null);\n\n function toggleScrollTools() {\n if (!isReady) return;\n\n if (!messageIds || !messageIds.length) {\n onFabToggle(false);\n onNotchToggle(false);\n return;\n }\n\n if (!isViewportNewest) {\n onFabToggle(true);\n onNotchToggle(true);\n return;\n }\n\n if (!containerRef.current) {\n return;\n }\n\n const { offsetHeight, scrollHeight, scrollTop } = containerRef.current;\n const scrollBottom = Math.round(scrollHeight - scrollTop - offsetHeight);\n const isNearBottom = scrollBottom <= FAB_THRESHOLD;\n const isAtBottom = scrollBottom <= NOTCH_THRESHOLD;\n\n onFabToggle(isUnread ? !isAtBottom : !isNearBottom);\n onNotchToggle(!isAtBottom);\n }\n\n const {\n observe: observeIntersection,\n } = useIntersectionObserver({\n rootRef: containerRef,\n margin: MESSAGE_LIST_SENSITIVE_AREA,\n }, (entries) => {\n if (!loadMoreForwards || !loadMoreBackwards) {\n return;\n }\n\n // Loading history while sending a message can return the same message and cause ambiguity\n const isFirstMessageLocal = messageIds[0] >= LOCAL_MESSAGE_ID_BASE;\n if (isFirstMessageLocal) {\n return;\n }\n\n const triggerEntry = entries.find(({ isIntersecting }) => isIntersecting);\n if (!triggerEntry) {\n return;\n }\n\n const { target } = triggerEntry;\n\n if (target.className === 'backwards-trigger') {\n if (\n IS_SCROLL_PATCH_NEEDED && isScrollingRef.current && messageIds.length <= MESSAGE_LIST_SLICE\n ) {\n isScrollPatchNeededRef.current = true;\n }\n\n loadMoreBackwards();\n } else if (target.className === 'forwards-trigger') {\n loadMoreForwards();\n }\n });\n\n useOnIntersect(backwardsTriggerRef, observeIntersection);\n useOnIntersect(forwardsTriggerRef, observeIntersection);\n\n const {\n observe: observeIntersectionForFab,\n freeze: freezeForFab,\n unfreeze: unfreezeForFab,\n } = useIntersectionObserver({\n rootRef: containerRef,\n margin: FAB_THRESHOLD * 2,\n }, toggleScrollTools);\n\n useOnIntersect(fabTriggerRef, observeIntersectionForFab);\n\n const {\n observe: observeIntersectionForNotch,\n freeze: freezeForNotch,\n unfreeze: unfreezeForNotch,\n } = useIntersectionObserver({\n rootRef: containerRef,\n margin: NOTCH_THRESHOLD,\n }, toggleScrollTools);\n\n useOnIntersect(fabTriggerRef, observeIntersectionForNotch);\n\n useOnChange(() => {\n if (isReady) {\n toggleScrollTools();\n }\n }, [isReady]);\n\n // Workaround for FAB and notch flickering with tall incoming message\n useOnChange(() => {\n freezeForFab();\n freezeForNotch();\n\n setTimeout(() => {\n unfreezeForNotch();\n unfreezeForFab();\n }, TOOLS_FREEZE_TIMEOUT);\n }, [messageIds]);\n\n return { backwardsTriggerRef, forwardsTriggerRef, fabTriggerRef };\n}\n","import React, {\n FC, memo, useCallback, useEffect, useRef,\n} from '../../lib/teact/teact';\nimport { getActions, withGlobal } from '../../global';\n\nimport { ApiSticker, ApiUpdateConnectionStateType } from '../../api/types';\n\nimport { selectChat } from '../../global/selectors';\nimport { useIntersectionObserver } from '../../hooks/useIntersectionObserver';\nimport useLang from '../../hooks/useLang';\nimport { getUserIdDividend } from '../../global/helpers';\n\nimport StickerButton from '../common/StickerButton';\n\nimport './ContactGreeting.scss';\n\ntype OwnProps = {\n userId: string;\n};\n\ntype StateProps = {\n sticker?: ApiSticker;\n lastUnreadMessageId?: number;\n connectionState?: ApiUpdateConnectionStateType;\n};\n\nconst INTERSECTION_DEBOUNCE_MS = 200;\n\nconst ContactGreeting: FC = ({\n sticker,\n connectionState,\n lastUnreadMessageId,\n}) => {\n const {\n loadGreetingStickers,\n sendMessage,\n markMessageListRead,\n } = getActions();\n\n const lang = useLang();\n // eslint-disable-next-line no-null/no-null\n const containerRef = useRef(null);\n const {\n observe: observeIntersection,\n } = useIntersectionObserver({\n rootRef: containerRef,\n debounceMs: INTERSECTION_DEBOUNCE_MS,\n });\n useEffect(() => {\n if (sticker || connectionState !== 'connectionStateReady') {\n return;\n }\n\n loadGreetingStickers();\n }, [connectionState, loadGreetingStickers, sticker]);\n\n useEffect(() => {\n if (connectionState === 'connectionStateReady' && lastUnreadMessageId) {\n markMessageListRead({ maxId: lastUnreadMessageId });\n }\n }, [connectionState, markMessageListRead, lastUnreadMessageId]);\n\n const handleStickerSelect = useCallback((selectedSticker: ApiSticker) => {\n selectedSticker = {\n ...selectedSticker,\n isPreloadedGlobally: true,\n };\n sendMessage({ sticker: selectedSticker });\n }, [sendMessage]);\n\n return (\n
\n
\n

{lang('Conversation.EmptyPlaceholder')}

\n

{lang('Conversation.GreetingText')}

\n\n
\n {sticker && (\n \n )}\n
\n
\n
\n );\n};\n\nexport default memo(withGlobal(\n (global, { userId }): StateProps => {\n const { stickers } = global.stickers.greeting;\n const dividend = getUserIdDividend(userId) + getUserIdDividend(global.currentUserId!);\n const sticker = stickers?.length ? stickers[dividend % stickers.length] : undefined;\n const chat = selectChat(global, userId);\n if (!chat) {\n return {};\n }\n\n return {\n sticker,\n lastUnreadMessageId: chat.lastMessage && chat.lastMessage.id !== chat.lastReadInboxMessageId\n ? chat.lastMessage.id\n : undefined,\n connectionState: global.connectionState,\n };\n },\n)(ContactGreeting));\n","import React, { FC, memo } from '../../lib/teact/teact';\n\nimport { MessageListType } from '../../global/types';\n\nimport useLang, { LangFn } from '../../hooks/useLang';\n\nimport './NoMessages.scss';\n\ntype OwnProps = {\n chatId: string;\n isChatWithSelf?: boolean;\n type: MessageListType;\n isGroupChatJustCreated?: boolean;\n};\n\nconst NoMessages: FC = ({\n isChatWithSelf, type, isGroupChatJustCreated,\n}) => {\n const lang = useLang();\n\n if (type === 'scheduled') {\n return renderScheduled(lang);\n }\n\n if (isChatWithSelf) {\n return renderSavedMessages(lang);\n }\n\n if (isGroupChatJustCreated) {\n return renderGroup(lang);\n }\n\n return (\n
{lang('NoMessages')}
\n );\n};\n\nfunction renderScheduled(lang: LangFn) {\n return (\n
{lang('ScheduledMessages.EmptyPlaceholder')}
\n );\n}\n\nfunction renderSavedMessages(lang: LangFn) {\n return (\n
\n
\n \n

{lang('Conversation.CloudStorageInfo.Title')}

\n
    \n
  • {lang('Conversation.ClousStorageInfo.Description1')}
  • \n
  • {lang('Conversation.ClousStorageInfo.Description2')}
  • \n
  • {lang('Conversation.ClousStorageInfo.Description3')}
  • \n
  • {lang('Conversation.ClousStorageInfo.Description4')}
  • \n
\n
\n
\n );\n}\n\nfunction renderGroup(lang: LangFn) {\n return (\n
\n
\n

{lang('EmptyGroupInfo.Title')}

\n

{lang('EmptyGroupInfo.Subtitle')}

\n
    \n
  • {lang('EmptyGroupInfo.Line1')}
  • \n
  • {lang('EmptyGroupInfo.Line2')}
  • \n
  • {lang('EmptyGroupInfo.Line3')}
  • \n
  • {lang('EmptyGroupInfo.Line4')}
  • \n
\n
\n
\n );\n}\n\nexport default memo(NoMessages);\n","import React, {\n FC, memo, useCallback, useEffect, useMemo, useRef, useState,\n} from '../../lib/teact/teact';\nimport { getActions, getGlobal, withGlobal } from '../../global';\n\nimport {\n ApiMessage, ApiRestrictionReason, MAIN_THREAD_ID,\n} from '../../api/types';\nimport { MessageListType } from '../../global/types';\nimport { LoadMoreDirection } from '../../types';\n\nimport { ANIMATION_END_DELAY, LOCAL_MESSAGE_ID_BASE, MESSAGE_LIST_SLICE } from '../../config';\nimport {\n selectChatMessages,\n selectIsViewportNewest,\n selectFirstUnreadId,\n selectFocusedMessageId,\n selectChat,\n selectIsInSelectMode,\n selectIsChatWithSelf,\n selectChatBot,\n selectIsChatBotNotStarted,\n selectScrollOffset,\n selectThreadTopMessageId,\n selectFirstMessageId,\n selectScheduledMessages,\n selectCurrentMessageIds,\n} from '../../global/selectors';\nimport {\n isChatChannel,\n isUserId,\n isChatWithRepliesBot,\n isChatGroup,\n} from '../../global/helpers';\nimport { orderBy } from '../../util/iteratees';\nimport { fastRaf, debounce, onTickEnd } from '../../util/schedulers';\nimport useLayoutEffectWithPrevDeps from '../../hooks/useLayoutEffectWithPrevDeps';\nimport useEffectWithPrevDeps from '../../hooks/useEffectWithPrevDeps';\nimport buildClassName from '../../util/buildClassName';\nimport { groupMessages } from './helpers/groupMessages';\nimport { preventMessageInputBlur } from './helpers/preventMessageInputBlur';\nimport useOnChange from '../../hooks/useOnChange';\nimport useStickyDates from './hooks/useStickyDates';\nimport { dispatchHeavyAnimationEvent } from '../../hooks/useHeavyAnimationCheck';\nimport resetScroll, { patchChromiumScroll } from '../../util/resetScroll';\nimport fastSmoothScroll, { isAnimatingScroll } from '../../util/fastSmoothScroll';\nimport renderText from '../common/helpers/renderText';\nimport useLang from '../../hooks/useLang';\nimport useWindowSize from '../../hooks/useWindowSize';\nimport useInterval from '../../hooks/useInterval';\nimport useNativeCopySelectedMessages from '../../hooks/useNativeCopySelectedMessages';\n\nimport Loading from '../ui/Loading';\nimport MessageListContent from './MessageListContent';\nimport ContactGreeting from './ContactGreeting';\nimport NoMessages from './NoMessages';\n\nimport './MessageList.scss';\n\ntype OwnProps = {\n chatId: string;\n threadId: number;\n type: MessageListType;\n canPost: boolean;\n isReady: boolean;\n onFabToggle: (shouldShow: boolean) => void;\n onNotchToggle: (shouldShow: boolean) => void;\n hasTools?: boolean;\n withBottomShift?: boolean;\n};\n\ntype StateProps = {\n isChatLoaded?: boolean;\n isChannelChat?: boolean;\n isGroupChat?: boolean;\n isChatWithSelf?: boolean;\n isRepliesChat?: boolean;\n isCreator?: boolean;\n isBot?: boolean;\n messageIds?: number[];\n messagesById?: Record;\n firstUnreadId?: number;\n isViewportNewest?: boolean;\n isRestricted?: boolean;\n restrictionReason?: ApiRestrictionReason;\n focusingId?: number;\n isSelectModeActive?: boolean;\n animationLevel?: number;\n lastMessage?: ApiMessage;\n botDescription?: string;\n threadTopMessageId?: number;\n threadFirstMessageId?: number;\n hasLinkedChat?: boolean;\n lastSyncTime?: number;\n};\n\nconst MESSAGE_REACTIONS_POLLING_INTERVAL = 15 * 1000;\nconst BOTTOM_THRESHOLD = 20;\nconst UNREAD_DIVIDER_TOP = 10;\nconst UNREAD_DIVIDER_TOP_WITH_TOOLS = 60;\nconst SCROLL_DEBOUNCE = 200;\nconst MESSAGE_ANIMATION_DURATION = 500;\nconst BOTTOM_FOCUS_MARGIN = 20;\nconst SELECT_MODE_ANIMATION_DURATION = 200;\nconst UNREAD_DIVIDER_CLASS = 'unread-divider';\n\nconst runDebouncedForScroll = debounce((cb) => cb(), SCROLL_DEBOUNCE, false);\n\nconst MessageList: FC = ({\n chatId,\n threadId,\n type,\n hasTools,\n onFabToggle,\n onNotchToggle,\n isChatLoaded,\n isChannelChat,\n isGroupChat,\n canPost,\n isReady,\n isChatWithSelf,\n isRepliesChat,\n isCreator,\n isBot,\n messageIds,\n messagesById,\n firstUnreadId,\n isViewportNewest,\n threadFirstMessageId,\n isRestricted,\n restrictionReason,\n focusingId,\n isSelectModeActive,\n lastMessage,\n botDescription,\n threadTopMessageId,\n hasLinkedChat,\n lastSyncTime,\n withBottomShift,\n}) => {\n const {\n loadViewportMessages, setScrollOffset, loadSponsoredMessages, loadMessageReactions, copyMessagesByIds,\n } = getActions();\n\n // eslint-disable-next-line no-null/no-null\n const containerRef = useRef(null);\n\n // We update local cached `scrollOffsetRef` when opening chat.\n // Then we update global version every second on scrolling.\n const scrollOffsetRef = useRef((type === 'thread' && selectScrollOffset(getGlobal(), chatId, threadId)) || 0);\n const anchorIdRef = useRef();\n const anchorTopRef = useRef();\n const listItemElementsRef = useRef();\n const memoFirstUnreadIdRef = useRef();\n const memoUnreadDividerBeforeIdRef = useRef();\n const memoFocusingIdRef = useRef();\n const isScrollTopJustUpdatedRef = useRef(false);\n const shouldAnimateAppearanceRef = useRef(Boolean(lastMessage));\n\n const [containerHeight, setContainerHeight] = useState();\n\n const areMessagesLoaded = Boolean(messageIds);\n\n useOnChange(() => {\n // We only need it first time when message list appears\n if (areMessagesLoaded) {\n onTickEnd(() => {\n shouldAnimateAppearanceRef.current = false;\n });\n }\n }, [areMessagesLoaded]);\n\n // Updated every time (to be used from intersection callback closure)\n useOnChange(() => {\n memoFirstUnreadIdRef.current = firstUnreadId;\n }, [firstUnreadId]);\n\n useOnChange(() => {\n if (isChannelChat && isReady && lastSyncTime) {\n loadSponsoredMessages({ chatId });\n }\n }, [chatId, isReady, isChannelChat, lastSyncTime]);\n\n // Updated only once when messages are loaded (as we want the unread divider to keep its position)\n useOnChange(() => {\n if (areMessagesLoaded) {\n memoUnreadDividerBeforeIdRef.current = memoFirstUnreadIdRef.current;\n }\n }, [areMessagesLoaded]);\n\n useOnChange(() => {\n memoFocusingIdRef.current = focusingId;\n }, [focusingId]);\n\n useNativeCopySelectedMessages(copyMessagesByIds);\n\n const messageGroups = useMemo(() => {\n if (!messageIds || !messagesById) {\n return undefined;\n }\n\n const viewportIds = threadTopMessageId && (!messageIds[0] || threadFirstMessageId === messageIds[0])\n ? [threadTopMessageId, ...messageIds]\n : messageIds;\n\n if (!viewportIds.length) {\n return undefined;\n }\n\n const listedMessages = viewportIds.map((id) => messagesById[id]).filter(Boolean);\n return groupMessages(orderBy(listedMessages, ['date', 'id']), memoUnreadDividerBeforeIdRef.current);\n }, [messageIds, messagesById, threadFirstMessageId, threadTopMessageId]);\n\n useInterval(() => {\n if (!messageIds || !messagesById) {\n return;\n }\n const ids = messageIds.filter((l) => messagesById[l]?.reactions);\n\n if (!ids.length) return;\n\n loadMessageReactions({ chatId, ids });\n }, MESSAGE_REACTIONS_POLLING_INTERVAL);\n\n const loadMoreAround = useMemo(() => {\n if (type !== 'thread') {\n return undefined;\n }\n\n return debounce(() => loadViewportMessages({ direction: LoadMoreDirection.Around }), 1000, true, false);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [loadViewportMessages, messageIds]);\n\n const { isScrolled, updateStickyDates } = useStickyDates();\n\n const isScrollingRef = useRef();\n const isScrollPatchNeededRef = useRef();\n\n const handleScroll = useCallback(() => {\n if (isScrollTopJustUpdatedRef.current) {\n isScrollTopJustUpdatedRef.current = false;\n return;\n }\n\n isScrollingRef.current = true;\n\n const container = containerRef.current!;\n\n if (!memoFocusingIdRef.current) {\n updateStickyDates(container, hasTools);\n }\n\n runDebouncedForScroll(() => {\n isScrollingRef.current = false;\n\n fastRaf(() => {\n if (!container.parentElement) {\n return;\n }\n\n scrollOffsetRef.current = container.scrollHeight - container.scrollTop;\n\n if (type === 'thread') {\n setScrollOffset({ chatId, threadId, scrollOffset: scrollOffsetRef.current });\n }\n });\n });\n }, [updateStickyDates, hasTools, type, setScrollOffset, chatId, threadId]);\n\n // Container resize observer (caused by Composer reply/webpage panels)\n useEffect(() => {\n if (!('ResizeObserver' in window) || process.env.APP_ENV === 'perf') {\n return undefined;\n }\n\n const observer = new ResizeObserver(([entry]) => {\n // During animation\n if (!(entry.target as HTMLDivElement).offsetParent) {\n return;\n }\n\n setContainerHeight(entry.contentRect.height);\n });\n\n observer.observe(containerRef.current!);\n\n return () => {\n observer.disconnect();\n };\n }, []);\n\n // Memorize height for scroll animation\n const { height: windowHeight } = useWindowSize();\n\n useEffect(() => {\n containerRef.current!.dataset.normalHeight = String(containerRef.current!.offsetHeight);\n }, [windowHeight, canPost]);\n\n // Initial message loading\n useEffect(() => {\n if (!loadMoreAround || !isChatLoaded || isRestricted || focusingId) {\n return;\n }\n\n // Loading history while sending a message can return the same message and cause ambiguity\n const isLastMessageLocal = messageIds && messageIds[messageIds.length - 1] >= LOCAL_MESSAGE_ID_BASE;\n if (isLastMessageLocal) {\n return;\n }\n\n const container = containerRef.current!;\n\n if (!messageIds || (\n messageIds.length < MESSAGE_LIST_SLICE / 2\n && (container.firstElementChild as HTMLDivElement).clientHeight <= container.offsetHeight\n )) {\n loadMoreAround();\n }\n }, [isChatLoaded, messageIds, loadMoreAround, focusingId, isRestricted]);\n\n // Remember scroll position before repositioning it\n useOnChange(() => {\n if (!messageIds || !listItemElementsRef.current) {\n return;\n }\n\n const preservedItemElements = listItemElementsRef.current\n .filter((element) => messageIds.includes(Number(element.dataset.messageId)));\n\n // We avoid the very first item as it may be a partly-loaded album\n // and also because it may be removed when messages limit is reached\n const anchor = preservedItemElements[1] || preservedItemElements[0];\n if (!anchor) {\n return;\n }\n\n anchorIdRef.current = anchor.id;\n anchorTopRef.current = anchor.getBoundingClientRect().top;\n // This should match deps for `useLayoutEffectWithPrevDeps` below\n }, [messageIds, isViewportNewest, containerHeight, hasTools]);\n\n // Handles updated message list, takes care of scroll repositioning\n useLayoutEffectWithPrevDeps(([\n prevMessageIds, prevIsViewportNewest, prevContainerHeight,\n ]) => {\n const container = containerRef.current!;\n listItemElementsRef.current = Array.from(container.querySelectorAll('.message-list-item'));\n\n const hasLastMessageChanged = (\n messageIds && prevMessageIds && messageIds[messageIds.length - 1] !== prevMessageIds[prevMessageIds.length - 1]\n );\n const hasViewportShifted = (\n messageIds?.[0] !== prevMessageIds?.[0] && messageIds?.length === (MESSAGE_LIST_SLICE / 2 + 1)\n );\n const wasMessageAdded = hasLastMessageChanged && !hasViewportShifted;\n const isAlreadyFocusing = messageIds && memoFocusingIdRef.current === messageIds[messageIds.length - 1];\n\n // Add extra height when few messages to allow smooth scroll animation. Uses assumption that `parentElement`\n // is a Transition slide and its CSS class can not be reset in a declarative way.\n const shouldForceScroll = (\n isViewportNewest\n && wasMessageAdded\n && (messageIds && messageIds.length < MESSAGE_LIST_SLICE / 2)\n && !container.parentElement!.classList.contains('force-messages-scroll')\n && (container.firstElementChild as HTMLDivElement)!.clientHeight <= container.offsetHeight * 2\n );\n\n if (shouldForceScroll) {\n container.parentElement!.classList.add('force-messages-scroll');\n\n setTimeout(() => {\n if (container.parentElement) {\n container.parentElement.classList.remove('force-messages-scroll');\n }\n }, MESSAGE_ANIMATION_DURATION);\n }\n\n const { scrollTop, scrollHeight, offsetHeight } = container;\n const scrollOffset = scrollOffsetRef.current;\n const lastItemElement = listItemElementsRef.current[listItemElementsRef.current.length - 1];\n\n let bottomOffset = scrollOffset - (prevContainerHeight || offsetHeight);\n if (wasMessageAdded) {\n // If two new messages come at once (e.g. when bot responds) then the first message will update `scrollOffset`\n // right away (before animation) which creates inconsistency until the animation completes. To workaround that,\n // we calculate `isAtBottom` with a \"buffer\" of the latest message height (this is approximate).\n const lastItemHeight = lastItemElement ? lastItemElement.offsetHeight : 0;\n bottomOffset -= lastItemHeight;\n }\n const isAtBottom = isViewportNewest && prevIsViewportNewest && bottomOffset <= BOTTOM_THRESHOLD;\n\n let newScrollTop!: number;\n\n if (wasMessageAdded && isAtBottom && !isAlreadyFocusing) {\n if (lastItemElement) {\n fastRaf(() => {\n fastSmoothScroll(\n container,\n lastItemElement,\n 'end',\n BOTTOM_FOCUS_MARGIN,\n );\n });\n }\n\n newScrollTop = scrollHeight - offsetHeight;\n scrollOffsetRef.current = Math.max(Math.ceil(scrollHeight - newScrollTop), offsetHeight);\n\n // Scroll still needs to be restored after container resize\n if (!shouldForceScroll) {\n return;\n }\n }\n\n if (process.env.APP_ENV === 'perf') {\n // eslint-disable-next-line no-console\n console.time('scrollTop');\n }\n\n const isResized = prevContainerHeight !== undefined && prevContainerHeight !== containerHeight;\n const anchor = anchorIdRef.current && container.querySelector(`#${anchorIdRef.current}`);\n const unreadDivider = (\n !anchor\n && memoUnreadDividerBeforeIdRef.current\n && container.querySelector(`.${UNREAD_DIVIDER_CLASS}`)\n );\n\n if (isAtBottom && isResized) {\n if (isAnimatingScroll()) {\n return;\n }\n\n newScrollTop = scrollHeight - offsetHeight;\n } else if (anchor) {\n if (isScrollPatchNeededRef.current) {\n isScrollPatchNeededRef.current = false;\n patchChromiumScroll(container);\n }\n\n const newAnchorTop = anchor.getBoundingClientRect().top;\n newScrollTop = scrollTop + (newAnchorTop - (anchorTopRef.current || 0));\n } else if (unreadDivider) {\n newScrollTop = Math.min(\n unreadDivider.offsetTop - (hasTools ? UNREAD_DIVIDER_TOP_WITH_TOOLS : UNREAD_DIVIDER_TOP),\n scrollHeight - scrollOffset,\n );\n } else {\n newScrollTop = scrollHeight - scrollOffset;\n }\n\n resetScroll(container, Math.ceil(newScrollTop));\n\n if (!memoFocusingIdRef.current) {\n isScrollTopJustUpdatedRef.current = true;\n fastRaf(() => {\n isScrollTopJustUpdatedRef.current = false;\n });\n }\n\n scrollOffsetRef.current = Math.max(Math.ceil(scrollHeight - newScrollTop), offsetHeight);\n\n if (process.env.APP_ENV === 'perf') {\n // eslint-disable-next-line no-console\n console.timeEnd('scrollTop');\n }\n // This should match deps for `useOnChange` above\n }, [messageIds, isViewportNewest, containerHeight, hasTools] as const);\n\n useEffectWithPrevDeps(([prevIsSelectModeActive]) => {\n if (prevIsSelectModeActive !== undefined) {\n dispatchHeavyAnimationEvent(SELECT_MODE_ANIMATION_DURATION + ANIMATION_END_DELAY);\n }\n }, [isSelectModeActive]);\n\n const lang = useLang();\n\n const isPrivate = Boolean(chatId && isUserId(chatId));\n const withUsers = Boolean((!isPrivate && !isChannelChat) || isChatWithSelf || isRepliesChat);\n const noAvatars = Boolean(!withUsers || isChannelChat);\n const shouldRenderGreeting = isUserId(chatId) && !isChatWithSelf && !isBot\n && (\n (\n !messageGroups && !lastMessage && messageIds\n // Used to avoid flickering when deleting a greeting that has just been sent\n && (!listItemElementsRef.current || listItemElementsRef.current.length === 0)\n )\n || (messageIds?.length === 1 && messagesById?.[messageIds[0]]?.content.action?.type === 'contactSignUp')\n || (lastMessage?.content?.action?.type === 'contactSignUp')\n );\n\n const isGroupChatJustCreated = isGroupChat && isCreator\n && messageIds?.length === 1 && messagesById?.[messageIds[0]]?.content.action?.type === 'chatCreate';\n\n const className = buildClassName(\n 'MessageList custom-scroll',\n noAvatars && 'no-avatars',\n !canPost && 'no-composer',\n type === 'pinned' && 'type-pinned',\n withBottomShift && 'with-bottom-shift',\n isSelectModeActive && 'select-mode-active',\n isScrolled && 'scrolled',\n !isReady && 'is-animating',\n );\n\n return (\n \n {isRestricted ? (\n
\n \n {restrictionReason ? restrictionReason.text : `This is a private ${isChannelChat ? 'channel' : 'chat'}`}\n \n
\n ) : botDescription ? (\n
{renderText(lang(botDescription), ['br', 'emoji', 'links'])}
\n ) : shouldRenderGreeting ? (\n \n ) : messageIds && (!messageGroups || isGroupChatJustCreated) ? (\n \n ) : ((messageIds && messageGroups) || lastMessage) ? (\n \n ) : (\n \n )}\n
\n );\n};\n\nexport default memo(withGlobal(\n (global, { chatId, threadId, type }): StateProps => {\n const chat = selectChat(global, chatId);\n if (!chat) {\n return {};\n }\n\n const messageIds = selectCurrentMessageIds(global, chatId, threadId, type);\n const messagesById = type === 'scheduled'\n ? selectScheduledMessages(global, chatId)\n : selectChatMessages(global, chatId);\n const threadTopMessageId = selectThreadTopMessageId(global, chatId, threadId);\n\n if (\n threadId !== MAIN_THREAD_ID\n && !(messagesById && threadTopMessageId && messagesById[threadTopMessageId])\n ) {\n return {};\n }\n\n const { isRestricted, restrictionReason, lastMessage } = chat;\n const focusingId = selectFocusedMessageId(global, chatId);\n\n const withLastMessageWhenPreloading = (\n threadId === MAIN_THREAD_ID\n && !messageIds && !chat.unreadCount && !focusingId && lastMessage && !lastMessage.groupedId\n );\n\n const chatBot = selectChatBot(global, chatId)!;\n let botDescription: string | undefined;\n if (selectIsChatBotNotStarted(global, chatId)) {\n if (chatBot.fullInfo) {\n botDescription = chatBot.fullInfo.botDescription || 'NoMessages';\n } else {\n botDescription = 'Updating bot info...';\n }\n }\n\n return {\n isChatLoaded: true,\n isRestricted,\n restrictionReason,\n isChannelChat: isChatChannel(chat),\n isGroupChat: isChatGroup(chat),\n isCreator: chat.isCreator,\n isChatWithSelf: selectIsChatWithSelf(global, chatId),\n isRepliesChat: isChatWithRepliesBot(chatId),\n isBot: Boolean(chatBot),\n messageIds,\n messagesById,\n firstUnreadId: selectFirstUnreadId(global, chatId, threadId),\n isViewportNewest: type !== 'thread' || selectIsViewportNewest(global, chatId, threadId),\n threadFirstMessageId: selectFirstMessageId(global, chatId, threadId),\n focusingId,\n isSelectModeActive: selectIsInSelectMode(global),\n botDescription,\n threadTopMessageId,\n hasLinkedChat: chat.fullInfo && ('linkedChatId' in chat.fullInfo)\n ? Boolean(chat.fullInfo.linkedChatId)\n : undefined,\n lastSyncTime: global.lastSyncTime,\n ...(withLastMessageWhenPreloading && { lastMessage }),\n };\n },\n)(MessageList));\n","import { useEffect } from '../lib/teact/teact';\nimport { IS_MAC_OS } from '../util/environment';\nimport getKeyFromEvent from '../util/getKeyFromEvent';\nimport getMessageIdsForSelectedText from '../util/getMessageIdsForSelectedText';\n\nconst useNativeCopySelectedMessages = (copyMessagesByIds: ({ messageIds }: { messageIds?: number[] }) => void) => {\n useEffect(() => {\n function handleCopy(e: KeyboardEvent) {\n if (((IS_MAC_OS && e.metaKey) || (!IS_MAC_OS && e.ctrlKey)) && getKeyFromEvent(e) === 'c') {\n const messageIds = getMessageIdsForSelectedText();\n\n if (messageIds && messageIds.length > 0) {\n e.preventDefault();\n copyMessagesByIds({ messageIds });\n }\n }\n }\n\n document.addEventListener('keydown', handleCopy, false);\n\n return () => {\n document.removeEventListener('keydown', handleCopy, false);\n };\n }, [copyMessagesByIds]);\n};\n\nexport default useNativeCopySelectedMessages;\n","import { useCallback } from '../../../lib/teact/teact';\n\nimport { fastRaf } from '../../../util/schedulers';\nimport useDebounce from '../../../hooks/useDebounce';\nimport useFlag from '../../../hooks/useFlag';\n\nconst DEBOUNCE = 1000;\nconst STICKY_TOP = 10;\nconst STICKY_TOP_WITH_TOOLS = 60;\n\nexport default function useStickyDates() {\n // For some reason we can not synchronously hide a sticky element (from `useLayoutEffect`) when chat opens\n // so we will add `position: sticky` only after first scroll. There would be no animation on the first show though.\n const [isScrolled, markIsScrolled] = useFlag(false);\n\n const runDebounced = useDebounce(DEBOUNCE, true);\n\n const updateStickyDates = useCallback((container: HTMLDivElement, hasTools?: boolean) => {\n markIsScrolled();\n\n if (!document.body.classList.contains('is-scrolling-messages')) {\n fastRaf(() => {\n document.body.classList.add('is-scrolling-messages');\n });\n }\n\n runDebounced(() => {\n fastRaf(() => {\n const currentStuck = document.querySelector('.stuck');\n if (currentStuck) {\n currentStuck.classList.remove('stuck');\n }\n\n const stuckDateEl = findStuckDate(container, hasTools);\n if (stuckDateEl) {\n stuckDateEl.classList.add('stuck');\n }\n\n document.body.classList.remove('is-scrolling-messages');\n });\n });\n }, [markIsScrolled, runDebounced]);\n\n return {\n isScrolled,\n updateStickyDates,\n };\n}\n\nfunction findStuckDate(container: HTMLElement, hasTools?: boolean) {\n const allElements = container.querySelectorAll('.sticky-date');\n const containerTop = container.scrollTop;\n\n return Array.from(allElements).find((el) => {\n const { offsetTop, offsetHeight } = el;\n const top = offsetTop - containerTop;\n return -offsetHeight <= top && top <= (hasTools ? STICKY_TOP_WITH_TOOLS : STICKY_TOP);\n });\n}\n","import React, {\n FC, useCallback, memo, useRef,\n} from '../../lib/teact/teact';\nimport { getActions, withGlobal } from '../../global';\n\nimport { MessageListType } from '../../global/types';\nimport { MAIN_THREAD_ID } from '../../api/types';\n\nimport { selectChat, selectCurrentMessageList } from '../../global/selectors';\nimport { formatIntegerCompact } from '../../util/textFormat';\nimport buildClassName from '../../util/buildClassName';\nimport fastSmoothScroll from '../../util/fastSmoothScroll';\nimport useLang from '../../hooks/useLang';\n\nimport Button from '../ui/Button';\n\nimport './ScrollDownButton.scss';\n\ntype OwnProps = {\n isShown: boolean;\n canPost?: boolean;\n withExtraShift?: boolean;\n};\n\ntype StateProps = {\n messageListType?: MessageListType;\n unreadCount?: number;\n};\n\nconst FOCUS_MARGIN = 20;\n\nconst ScrollDownButton: FC = ({\n isShown,\n canPost,\n messageListType,\n unreadCount,\n withExtraShift,\n}) => {\n const { focusNextReply } = getActions();\n\n const lang = useLang();\n // eslint-disable-next-line no-null/no-null\n const elementRef = useRef(null);\n\n const handleClick = useCallback(() => {\n if (!isShown) {\n return;\n }\n\n if (messageListType === 'thread') {\n focusNextReply();\n } else {\n const messagesContainer = elementRef.current!.parentElement!.querySelector('.MessageList')!;\n const messageElements = messagesContainer.querySelectorAll('.message-list-item');\n const lastMessageElement = messageElements[messageElements.length - 1];\n if (!lastMessageElement) {\n return;\n }\n\n fastSmoothScroll(messagesContainer, lastMessageElement, 'end', FOCUS_MARGIN);\n }\n }, [isShown, messageListType, focusNextReply]);\n\n const fabClassName = buildClassName(\n 'ScrollDownButton',\n isShown && 'revealed',\n !canPost && 'no-composer',\n withExtraShift && 'with-extra-shift',\n );\n\n return (\n
\n
\n \n \n \n {Boolean(unreadCount) && (\n
{formatIntegerCompact(unreadCount!)}
\n )}\n
\n
\n );\n};\n\nexport default memo(withGlobal(\n (global): StateProps => {\n const currentMessageList = selectCurrentMessageList(global);\n if (!currentMessageList) {\n return {};\n }\n\n const { chatId, threadId, type: messageListType } = currentMessageList;\n const chat = selectChat(global, chatId);\n\n return {\n messageListType,\n unreadCount: chat && threadId === MAIN_THREAD_ID && messageListType === 'thread' ? chat.unreadCount : undefined,\n };\n },\n)(ScrollDownButton));\n","import { ApiAttachment } from '../../../../api/types';\nimport { SUPPORTED_IMAGE_CONTENT_TYPES, SUPPORTED_VIDEO_CONTENT_TYPES } from '../../../../config';\nimport {\n preloadImage,\n preloadVideo,\n createPosterForVideo,\n fetchBlob,\n} from '../../../../util/files';\nimport { scaleImage } from '../../../../util/imageResize';\n\nconst MAX_QUICK_IMG_SIZE = 1280; // px\nconst FILE_EXT_REGEX = /\\.[^/.]+$/;\n\nexport default async function buildAttachment(\n filename: string, blob: Blob, isQuick: boolean, options?: Partial,\n): Promise {\n const blobUrl = URL.createObjectURL(blob);\n const { type: mimeType, size } = blob;\n let quick;\n let previewBlobUrl;\n\n if (SUPPORTED_IMAGE_CONTENT_TYPES.has(mimeType)) {\n if (isQuick) {\n const img = await preloadImage(blobUrl);\n const { width, height } = img;\n\n if (width > MAX_QUICK_IMG_SIZE || height > MAX_QUICK_IMG_SIZE || mimeType !== 'image/jpeg') {\n const resizedUrl = await scaleImage(blobUrl, MAX_QUICK_IMG_SIZE / Math.max(width, height), 'image/jpeg');\n URL.revokeObjectURL(blobUrl);\n const newBlob = await fetchBlob(resizedUrl);\n return buildAttachment(filename, newBlob, true, options);\n }\n\n if (mimeType === 'image/jpeg') {\n filename = filename.replace(FILE_EXT_REGEX, '.jpg');\n }\n\n quick = { width, height };\n } else {\n previewBlobUrl = blobUrl;\n }\n } else if (SUPPORTED_VIDEO_CONTENT_TYPES.has(mimeType)) {\n const { videoWidth: width, videoHeight: height, duration } = await preloadVideo(blobUrl);\n quick = { width, height, duration };\n\n previewBlobUrl = await createPosterForVideo(blobUrl);\n }\n\n return {\n blobUrl,\n filename,\n mimeType,\n size,\n quick,\n previewBlobUrl,\n ...options,\n };\n}\n","export default function insertHtmlInSelection(html: string) {\n const selection = window.getSelection();\n\n if (selection?.getRangeAt && selection.rangeCount) {\n const range = selection.getRangeAt(0);\n range.deleteContents();\n\n const fragment = range.createContextualFragment(html);\n const lastInsertedNode = fragment.lastChild;\n range.insertNode(fragment);\n if (lastInsertedNode) {\n range.setStartAfter(lastInsertedNode);\n range.setEndAfter(lastInsertedNode);\n } else {\n range.collapse(false);\n }\n selection.removeAllRanges();\n selection.addRange(range);\n }\n}\n","import { IS_IOS } from '../../../../util/environment';\n\nlet resetInput: HTMLInputElement;\n\nif (IS_IOS) {\n resetInput = document.createElement('input');\n resetInput.classList.add('for-ios-autocapitalization-fix');\n document.body.appendChild(resetInput);\n}\n\n// https://stackoverflow.com/a/55652503\nexport default function applyIosAutoCapitalizationFix(inputEl: HTMLElement) {\n resetInput.focus();\n inputEl.focus();\n}\n","import { IOpusRecorder } from 'opus-recorder';\n\nexport type Result = { blob: Blob; duration: number; waveform: number[] };\n\nconst encoderPath = new URL('opus-recorder/dist/encoderWorker.min', import.meta.url).href;\nconst MIN_RECORDING_TIME = 1000;\nconst POLYFILL_OPTIONS = { encoderPath, reuseWorker: true };\nconst BLOB_PARAMS = { type: 'audio/ogg' };\nconst FFT_SIZE = 64;\nconst MIN_VOLUME = 0.1;\n\nlet opusRecorderPromise: Promise<{ default: IOpusRecorder }>;\nlet OpusRecorder: IOpusRecorder;\nlet mediaRecorder: IOpusRecorder;\n\nexport async function init() {\n if (!opusRecorderPromise) {\n opusRecorderPromise = import('opus-recorder');\n OpusRecorder = (await opusRecorderPromise).default;\n mediaRecorder = new OpusRecorder(POLYFILL_OPTIONS);\n }\n\n return opusRecorderPromise;\n}\n\nexport async function start(analyzerCallback: Function) {\n await startMediaRecorder();\n\n const startedAt = Date.now();\n let pausedAt: number;\n const chunks: Uint8Array[] = [];\n const waveform: number[] = [];\n\n mediaRecorder.ondataavailable = (typedArray) => {\n chunks.push(typedArray);\n };\n\n const releaseAnalyzer = subscribeToAnalyzer(mediaRecorder, (volume: number) => {\n waveform.push(volume * 255);\n analyzerCallback(volume);\n });\n\n return {\n stop: () => new Promise((resolve, reject) => {\n mediaRecorder.onstop = () => {\n resolve({\n blob: new Blob(chunks, BLOB_PARAMS),\n duration: Math.round(((pausedAt || Date.now()) - startedAt) / 1000),\n waveform,\n });\n };\n mediaRecorder.onerror = reject;\n\n const delayStop = Math.max(0, startedAt + MIN_RECORDING_TIME - Date.now());\n setTimeout(() => {\n mediaRecorder.stop();\n releaseAnalyzer();\n }, delayStop);\n }),\n pause: () => {\n const delayStop = Math.max(0, startedAt + MIN_RECORDING_TIME - Date.now());\n setTimeout(() => {\n mediaRecorder.pause();\n pausedAt = Date.now();\n releaseAnalyzer();\n }, delayStop);\n },\n };\n}\n\nasync function startMediaRecorder() {\n await init();\n await mediaRecorder.start();\n}\n\nfunction subscribeToAnalyzer(recorder: IOpusRecorder, cb: Function) {\n const source = recorder.sourceNode;\n const analyser = source.context.createAnalyser();\n analyser.fftSize = FFT_SIZE;\n source.connect(analyser);\n\n const dataLength = analyser.frequencyBinCount;\n const dataArray = new Uint8Array(dataLength);\n let isDestroyed = false;\n\n function tick() {\n if (isDestroyed) {\n return;\n }\n\n analyser.getByteFrequencyData(dataArray);\n\n const sum = dataArray.reduce((acc, current) => acc + current, 0);\n const mean = (sum / dataLength);\n const volume = mean / 255;\n\n cb(volume < MIN_VOLUME ? 0 : volume);\n\n requestAnimationFrame(tick);\n }\n\n tick();\n\n return () => {\n isDestroyed = true;\n };\n}\n","import { StateHookSetter, useEffect } from '../../../../lib/teact/teact';\nimport { ApiAttachment, ApiMessage } from '../../../../api/types';\n\nimport buildAttachment from '../helpers/buildAttachment';\nimport { EDITABLE_INPUT_ID, EDITABLE_INPUT_MODAL_ID } from '../../../../config';\nimport getFilesFromDataTransferItems from '../helpers/getFilesFromDataTransferItems';\n\nconst CLIPBOARD_ACCEPTED_TYPES = ['image/png', 'image/jpeg', 'image/gif'];\nconst MAX_MESSAGE_LENGTH = 4096;\n\nconst useClipboardPaste = (\n insertTextAndUpdateCursor: (text: string, inputId?: string) => void,\n setAttachments: StateHookSetter,\n editedMessage: ApiMessage | undefined,\n) => {\n useEffect(() => {\n async function handlePaste(e: ClipboardEvent) {\n if (!e.clipboardData) {\n return;\n }\n\n const input = document.activeElement;\n if (input && ![EDITABLE_INPUT_ID, EDITABLE_INPUT_MODAL_ID].includes(input.id)) {\n return;\n }\n\n const pastedText = e.clipboardData.getData('text').substring(0, MAX_MESSAGE_LENGTH);\n const { items } = e.clipboardData;\n let files: File[] = [];\n\n e.preventDefault();\n if (items.length > 0) {\n files = await getFilesFromDataTransferItems(items);\n }\n\n if (files.length === 0 && !pastedText) {\n return;\n }\n\n if (files.length > 0 && !editedMessage) {\n const newAttachments = await Promise.all(files.map((file) => {\n return buildAttachment(file.name, file, files.length === 1 && CLIPBOARD_ACCEPTED_TYPES.includes(file.type));\n }));\n setAttachments((attachments) => attachments.concat(newAttachments));\n }\n\n if (pastedText) {\n insertTextAndUpdateCursor(pastedText, input?.id);\n }\n }\n\n document.addEventListener('paste', handlePaste, false);\n\n return () => {\n document.removeEventListener('paste', handlePaste, false);\n };\n }, [insertTextAndUpdateCursor, editedMessage, setAttachments]);\n};\n\nexport default useClipboardPaste;\n","import { useCallback, useEffect, useMemo } from '../../../../lib/teact/teact';\nimport { getActions } from '../../../../global';\n\nimport { ApiFormattedText, ApiMessage } from '../../../../api/types';\n\nimport { DRAFT_DEBOUNCE, EDITABLE_INPUT_ID } from '../../../../config';\nimport usePrevious from '../../../../hooks/usePrevious';\nimport { debounce } from '../../../../util/schedulers';\nimport focusEditableElement from '../../../../util/focusEditableElement';\nimport parseMessageInput from '../../../../util/parseMessageInput';\nimport useBackgroundMode from '../../../../hooks/useBackgroundMode';\nimport useBeforeUnload from '../../../../hooks/useBeforeUnload';\nimport { IS_TOUCH_ENV } from '../../../../util/environment';\nimport { getTextWithEntitiesAsHtml } from '../../../common/helpers/renderTextWithEntities';\n\n// Used to avoid running debounced callbacks when chat changes.\nlet currentChatId: string | undefined;\nlet currentThreadId: number | undefined;\n\nconst useDraft = (\n draft: ApiFormattedText | undefined,\n chatId: string,\n threadId: number,\n htmlRef: { current: string },\n setHtml: (html: string) => void,\n editedMessage: ApiMessage | undefined,\n) => {\n const { saveDraft, clearDraft } = getActions();\n\n const updateDraft = useCallback((draftChatId: string, draftThreadId: number) => {\n const currentHtml = htmlRef.current;\n if (editedMessage) return;\n if (currentHtml.length) {\n saveDraft({ chatId: draftChatId, threadId: draftThreadId, draft: parseMessageInput(currentHtml!) });\n } else if (currentHtml !== undefined) {\n clearDraft({ chatId: draftChatId, threadId: draftThreadId });\n }\n }, [clearDraft, editedMessage, htmlRef, saveDraft]);\n\n // eslint-disable-next-line react-hooks/exhaustive-deps\n const runDebouncedForSaveDraft = useMemo(() => debounce((cb) => cb(), DRAFT_DEBOUNCE, false), [chatId]);\n\n const prevChatId = usePrevious(chatId);\n const prevThreadId = usePrevious(threadId);\n\n // Save draft on chat change\n useEffect(() => {\n currentChatId = chatId;\n currentThreadId = threadId;\n\n return () => {\n currentChatId = undefined;\n currentThreadId = undefined;\n\n updateDraft(chatId, threadId);\n };\n }, [chatId, threadId, updateDraft]);\n\n // Restore draft on chat change\n useEffect(() => {\n if (chatId === prevChatId && threadId === prevThreadId) {\n return;\n }\n\n if (editedMessage || !draft) {\n return;\n }\n\n setHtml(getTextWithEntitiesAsHtml(draft));\n\n if (!IS_TOUCH_ENV) {\n requestAnimationFrame(() => {\n const messageInput = document.getElementById(EDITABLE_INPUT_ID)!;\n focusEditableElement(messageInput, true);\n });\n }\n }, [chatId, threadId, draft, setHtml, updateDraft, prevChatId, prevThreadId, editedMessage]);\n\n const html = htmlRef.current;\n // Update draft when input changes\n const prevHtml = usePrevious(html);\n useEffect(() => {\n if (!chatId || !threadId || prevChatId !== chatId || prevThreadId !== threadId || prevHtml === html) {\n return;\n }\n\n if (html.length) {\n runDebouncedForSaveDraft(() => {\n if (currentChatId !== chatId || currentThreadId !== threadId) {\n return;\n }\n\n updateDraft(chatId, threadId);\n });\n } else {\n updateDraft(chatId, threadId);\n }\n }, [chatId, html, prevChatId, prevHtml, prevThreadId, runDebouncedForSaveDraft, threadId, updateDraft]);\n\n const handleBlur = useCallback(() => {\n if (chatId && threadId) {\n updateDraft(chatId, threadId);\n }\n }, [chatId, threadId, updateDraft]);\n\n useBackgroundMode(handleBlur);\n useBeforeUnload(handleBlur);\n};\n\nexport default useDraft;\n","import { useState } from '../lib/teact/teact';\n\nimport useDebounce from './useDebounce';\nimport useOnChange from './useOnChange';\nimport useHeavyAnimationCheck from './useHeavyAnimationCheck';\nimport useFlag from './useFlag';\n\nexport default function useDebouncedMemo(\n resolverFn: () => R, ms: number, dependencies: D,\n): R | undefined {\n const runDebounced = useDebounce(ms, true);\n const [value, setValue] = useState();\n const [isFrozen, freeze, unfreeze] = useFlag();\n\n useHeavyAnimationCheck(freeze, unfreeze);\n\n useOnChange(() => {\n if (isFrozen) {\n return;\n }\n\n runDebounced(() => {\n setValue(resolverFn());\n });\n }, [...dependencies, isFrozen]);\n\n return value;\n}\n","import { useCallback, useEffect } from '../../../../lib/teact/teact';\nimport { getActions } from '../../../../global';\nimport { InlineBotSettings } from '../../../../types';\nimport useFlag from '../../../../hooks/useFlag';\nimport usePrevious from '../../../../hooks/usePrevious';\nimport useDebouncedMemo from '../../../../hooks/useDebouncedMemo';\n\nconst DEBOUNCE_MS = 300;\nconst INLINE_BOT_QUERY_REGEXP = /^@([a-z0-9_]{1,32})[\\u00A0\\u0020]+(.*)/i;\nconst HAS_NEW_LINE = /^@([a-z0-9_]{1,32})[\\u00A0\\u0020]+\\n{2,}/i;\nconst MEMO_NO_RESULT = {\n username: '',\n query: '',\n canShowHelp: false,\n usernameLowered: '',\n};\n\nconst tempEl = document.createElement('div');\n\nexport default function useInlineBotTooltip(\n isAllowed: boolean,\n chatId: string,\n html: string,\n inlineBots?: Record,\n) {\n const { queryInlineBot, resetInlineBot } = getActions();\n\n const [isOpen, markIsOpen, unmarkIsOpen] = useFlag();\n const {\n username, query, canShowHelp, usernameLowered,\n } = useDebouncedMemo(() => parseBotQuery(html), DEBOUNCE_MS, [html]) || {};\n const prevQuery = usePrevious(query);\n const prevUsername = usePrevious(username);\n const inlineBotData = usernameLowered ? inlineBots?.[usernameLowered] : undefined;\n const {\n id: botId,\n switchPm,\n offset,\n results,\n isGallery,\n help,\n } = inlineBotData || {};\n\n useEffect(() => {\n if (prevQuery !== query) {\n unmarkIsOpen();\n }\n }, [prevQuery, query, unmarkIsOpen]);\n\n useEffect(() => {\n if (isAllowed && usernameLowered && chatId) {\n queryInlineBot({ chatId, username: usernameLowered, query });\n }\n }, [query, isAllowed, queryInlineBot, chatId, usernameLowered]);\n\n const loadMore = useCallback(() => {\n queryInlineBot({\n chatId, username: usernameLowered, query, offset,\n });\n }, [offset, chatId, query, queryInlineBot, usernameLowered]);\n\n useEffect(() => {\n if (isAllowed && botId && (switchPm || (results?.length))) {\n markIsOpen();\n } else {\n unmarkIsOpen();\n }\n }, [botId, isAllowed, markIsOpen, results, switchPm, unmarkIsOpen]);\n\n if (prevUsername !== username) {\n resetInlineBot({ username: prevUsername });\n }\n\n return {\n isOpen,\n id: botId,\n isGallery,\n switchPm,\n results,\n closeTooltip: unmarkIsOpen,\n help: canShowHelp && help ? `@${username} ${help}` : undefined,\n loadMore,\n };\n}\n\nfunction parseBotQuery(html: string) {\n const text = getPlainText(html);\n const result = text.match(INLINE_BOT_QUERY_REGEXP);\n if (!result) {\n return MEMO_NO_RESULT;\n }\n\n return {\n username: result[1],\n query: result[2],\n canShowHelp: result[2] === '' && !text.match(HAS_NEW_LINE),\n usernameLowered: result[1].toLowerCase(),\n };\n}\n\nfunction getPlainText(html: string) {\n tempEl.innerHTML = html.replace(/
/g, '\\n');\n\n return tempEl.innerText;\n}\n","import {\n useCallback, useEffect, useState,\n} from '../../../../lib/teact/teact';\n\nimport { ApiBotCommand } from '../../../../api/types';\n\nimport { prepareForRegExp } from '../helpers/prepareForRegExp';\nimport { throttle } from '../../../../util/schedulers';\nimport useFlag from '../../../../hooks/useFlag';\n\nconst runThrottled = throttle((cb) => cb(), 500, true);\nconst RE_COMMAND = /^[\\w@]{1,32}\\s?/i;\n\nexport default function useBotCommandTooltip(\n isAllowed: boolean,\n html: string,\n botCommands?: ApiBotCommand[] | false,\n chatBotCommands?: ApiBotCommand[],\n) {\n const [isOpen, markIsOpen, unmarkIsOpen] = useFlag();\n const [filteredBotCommands, setFilteredBotCommands] = useState();\n\n const getFilteredCommands = useCallback((filter) => {\n if (!botCommands && !chatBotCommands) {\n setFilteredBotCommands(undefined);\n\n return;\n }\n\n runThrottled(() => {\n const nextFilteredBotCommands = (botCommands || chatBotCommands || [])\n .filter(({ command }) => !filter || command.includes(filter));\n setFilteredBotCommands(\n nextFilteredBotCommands && nextFilteredBotCommands.length ? nextFilteredBotCommands : undefined,\n );\n });\n }, [botCommands, chatBotCommands]);\n\n useEffect(() => {\n if (!isAllowed || !html.length) {\n setFilteredBotCommands(undefined);\n return;\n }\n\n const shouldShowCommands = html.startsWith('/');\n\n if (shouldShowCommands) {\n const filter = prepareForRegExp(html.substr(1)).match(RE_COMMAND);\n getFilteredCommands(filter ? filter[0] : '');\n } else {\n setFilteredBotCommands(undefined);\n }\n }, [getFilteredCommands, html, isAllowed, unmarkIsOpen]);\n\n useEffect(() => {\n if (filteredBotCommands && filteredBotCommands.length && html.length > 0) {\n markIsOpen();\n } else {\n unmarkIsOpen();\n }\n }, [filteredBotCommands, html.length, markIsOpen, unmarkIsOpen]);\n\n return {\n isOpen,\n close: unmarkIsOpen,\n filteredBotCommands,\n };\n}\n","import React, { FC, memo } from '../../lib/teact/teact';\nimport { OwnProps } from './DeleteMessageModal';\nimport { Bundles } from '../../util/moduleLoader';\n\nimport useModuleLoader from '../../hooks/useModuleLoader';\n\nconst DeleteMessageModalAsync: FC = (props) => {\n const { isOpen } = props;\n const DeleteMessageModal = useModuleLoader(Bundles.Extra, 'DeleteMessageModal', !isOpen);\n\n // eslint-disable-next-line react/jsx-props-no-spreading\n return DeleteMessageModal ? : undefined;\n};\n\nexport default memo(DeleteMessageModalAsync);\n","import React, {\n FC, useRef, useCallback, memo,\n} from '../../lib/teact/teact';\n\nimport { IS_TOUCH_ENV } from '../../util/environment';\n\nimport Button, { OwnProps as ButtonProps } from './Button';\n\ntype OwnProps = {\n onActivate: NoneToVoidFunction;\n} & Omit;\n\nconst BUTTON_ACTIVATE_DELAY = 200;\nlet openTimeout: number | undefined;\nlet isFirstTimeActivation = true;\n\nconst ResponsiveHoverButton: FC = ({ onActivate, ...buttonProps }) => {\n const isMouseInside = useRef(false);\n\n const handleMouseEnter = useCallback(() => {\n isMouseInside.current = true;\n\n // This is used to counter additional delay caused by asynchronous module loading\n if (isFirstTimeActivation) {\n isFirstTimeActivation = false;\n onActivate();\n return;\n }\n\n if (openTimeout) {\n clearTimeout(openTimeout);\n openTimeout = undefined;\n }\n openTimeout = window.setTimeout(() => {\n if (isMouseInside.current) {\n onActivate();\n }\n }, BUTTON_ACTIVATE_DELAY);\n }, [onActivate]);\n\n const handleMouseLeave = useCallback(() => {\n isMouseInside.current = false;\n }, []);\n\n return (\n \n );\n};\n\nexport default memo(ResponsiveHoverButton);\n","import React, {\n FC, memo, useCallback, useEffect,\n} from '../../../lib/teact/teact';\n\nimport { CONTENT_TYPES_WITH_PREVIEW } from '../../../config';\nimport { IS_TOUCH_ENV } from '../../../util/environment';\nimport { openSystemFilesDialog } from '../../../util/systemFilesDialog';\nimport useMouseInside from '../../../hooks/useMouseInside';\nimport useLang from '../../../hooks/useLang';\nimport useFlag from '../../../hooks/useFlag';\n\nimport ResponsiveHoverButton from '../../ui/ResponsiveHoverButton';\nimport Menu from '../../ui/Menu';\nimport MenuItem from '../../ui/MenuItem';\n\nimport './AttachMenu.scss';\n\nexport type OwnProps = {\n isButtonVisible: boolean;\n canAttachMedia: boolean;\n canAttachPolls: boolean;\n onFileSelect: (files: File[], isQuick: boolean) => void;\n onPollCreate: () => void;\n};\n\nconst AttachMenu: FC = ({\n isButtonVisible, canAttachMedia, canAttachPolls, onFileSelect, onPollCreate,\n}) => {\n const [isAttachMenuOpen, openAttachMenu, closeAttachMenu] = useFlag();\n const [handleMouseEnter, handleMouseLeave, markMouseInside] = useMouseInside(isAttachMenuOpen, closeAttachMenu);\n\n useEffect(() => {\n if (isAttachMenuOpen) {\n markMouseInside();\n }\n }, [isAttachMenuOpen, markMouseInside]);\n\n const handleToggleAttachMenu = useCallback(() => {\n if (isAttachMenuOpen) {\n closeAttachMenu();\n } else {\n openAttachMenu();\n }\n }, [isAttachMenuOpen, openAttachMenu, closeAttachMenu]);\n\n const handleFileSelect = useCallback((e: Event, isQuick: boolean) => {\n const { files } = e.target as HTMLInputElement;\n\n if (files && files.length > 0) {\n onFileSelect(Array.from(files), isQuick);\n }\n }, [onFileSelect]);\n\n const handleQuickSelect = useCallback(() => {\n openSystemFilesDialog(\n Array.from(CONTENT_TYPES_WITH_PREVIEW).join(','),\n (e) => handleFileSelect(e, true),\n );\n }, [handleFileSelect]);\n\n const handleDocumentSelect = useCallback(() => {\n openSystemFilesDialog('*', (e) => handleFileSelect(e, false));\n }, [handleFileSelect]);\n\n const lang = useLang();\n\n if (!isButtonVisible) {\n return undefined;\n }\n\n return (\n
\n \n \n \n \n {/*\n ** Using ternary operator here causes some attributes from first clause\n ** transferring to the fragment content in the second clause\n */}\n {!canAttachMedia && (\n Posting media content is not allowed in this group.\n )}\n {canAttachMedia && (\n <>\n \n {lang('AttachmentMenu.PhotoOrVideo')}\n \n {lang('AttachDocument')}\n \n )}\n {canAttachPolls && (\n {lang('Poll')}\n )}\n \n
\n );\n};\n\nexport default memo(AttachMenu);\n","import React, { FC, memo } from '../../../lib/teact/teact';\nimport { OwnProps } from './SymbolMenu';\nimport { Bundles } from '../../../util/moduleLoader';\n\nimport useModuleLoader from '../../../hooks/useModuleLoader';\n\nconst SymbolMenuAsync: FC = (props) => {\n const { isOpen } = props;\n const SymbolMenu = useModuleLoader(Bundles.Extra, 'SymbolMenu', !isOpen);\n\n // eslint-disable-next-line react/jsx-props-no-spreading\n return SymbolMenu ? : undefined;\n};\n\nexport default memo(SymbolMenuAsync);\n","import React, { FC, memo } from '../../../lib/teact/teact';\nimport { OwnProps } from './InlineBotTooltip';\nimport { Bundles } from '../../../util/moduleLoader';\n\nimport useModuleLoader from '../../../hooks/useModuleLoader';\n\nconst InlineBotTooltipAsync: FC = (props) => {\n const { isOpen } = props;\n const InlineBotTooltip = useModuleLoader(Bundles.Extra, 'InlineBotTooltip', !isOpen);\n\n // eslint-disable-next-line react/jsx-props-no-spreading\n return InlineBotTooltip ? : undefined;\n};\n\nexport default memo(InlineBotTooltipAsync);\n","import React, { FC, memo } from '../../../lib/teact/teact';\nimport { OwnProps } from './MentionTooltip';\nimport { Bundles } from '../../../util/moduleLoader';\n\nimport useModuleLoader from '../../../hooks/useModuleLoader';\n\nconst MentionTooltipAsync: FC = (props) => {\n const { isOpen } = props;\n const MentionTooltip = useModuleLoader(Bundles.Extra, 'MentionTooltip', !isOpen);\n\n // eslint-disable-next-line react/jsx-props-no-spreading\n return MentionTooltip ? : undefined;\n};\n\nexport default memo(MentionTooltipAsync);\n","import React, { FC, memo } from '../../../lib/teact/teact';\nimport { OwnProps } from './StickerTooltip';\nimport { Bundles } from '../../../util/moduleLoader';\n\nimport useModuleLoader from '../../../hooks/useModuleLoader';\n\nconst StickerTooltipAsync: FC = (props) => {\n const { isOpen } = props;\n const StickerTooltip = useModuleLoader(Bundles.Extra, 'StickerTooltip', !isOpen);\n\n // eslint-disable-next-line react/jsx-props-no-spreading\n return StickerTooltip ? : undefined;\n};\n\nexport default memo(StickerTooltipAsync);\n","import React, { FC, memo } from '../../../lib/teact/teact';\nimport { OwnProps } from './BotCommandTooltip';\nimport { Bundles } from '../../../util/moduleLoader';\n\nimport useModuleLoader from '../../../hooks/useModuleLoader';\n\nconst BotCommandTooltipAsync: FC = (props) => {\n const { isOpen } = props;\n const BotCommandTooltip = useModuleLoader(Bundles.Extra, 'BotCommandTooltip', !isOpen);\n\n // eslint-disable-next-line react/jsx-props-no-spreading\n return BotCommandTooltip ? : undefined;\n};\n\nexport default memo(BotCommandTooltipAsync);\n","import React, {\n FC, memo, useCallback, useEffect,\n} from '../../../lib/teact/teact';\nimport { getActions, withGlobal } from '../../../global';\n\nimport { ApiMessage } from '../../../api/types';\n\nimport { IS_TOUCH_ENV } from '../../../util/environment';\nimport { selectChatMessage, selectCurrentMessageList } from '../../../global/selectors';\nimport useMouseInside from '../../../hooks/useMouseInside';\nimport useFlag from '../../../hooks/useFlag';\n\nimport Menu from '../../ui/Menu';\nimport Button from '../../ui/Button';\n\nimport './BotKeyboardMenu.scss';\n\nexport type OwnProps = {\n isOpen: boolean;\n messageId: number;\n onClose: NoneToVoidFunction;\n};\n\ntype StateProps = {\n message?: ApiMessage;\n};\n\nconst BotKeyboardMenu: FC = ({\n isOpen, message, onClose,\n}) => {\n const { clickInlineButton } = getActions();\n\n const [handleMouseEnter, handleMouseLeave] = useMouseInside(isOpen, onClose);\n const { isKeyboardSingleUse } = message || {};\n const [forceOpen, markForceOpen, unmarkForceOpen] = useFlag(true);\n\n const handleClose = useCallback(() => {\n unmarkForceOpen();\n onClose();\n }, [onClose, unmarkForceOpen]);\n\n useEffect(() => {\n markForceOpen();\n }, [markForceOpen, message?.keyboardButtons]);\n\n if (!message || !message.keyboardButtons) {\n return undefined;\n }\n\n return (\n \n
\n {message.keyboardButtons.map((row) => (\n
\n {row.map((button) => (\n clickInlineButton({ button })}\n >\n {button.text}\n \n ))}\n
\n ))}\n
\n \n );\n};\n\nexport default memo(withGlobal(\n (global, { messageId }): StateProps => {\n const { chatId } = selectCurrentMessageList(global) || {};\n if (!chatId) {\n return {};\n }\n\n return { message: selectChatMessage(global, chatId, messageId) };\n },\n)(BotKeyboardMenu));\n","import React, {\n FC, memo, useCallback, useEffect,\n} from '../../../lib/teact/teact';\nimport { getActions, withGlobal } from '../../../global';\n\nimport { ApiChat, ApiMessage, ApiUser } from '../../../api/types';\n\nimport {\n selectChat,\n selectChatMessage,\n selectSender,\n selectForwardedSender,\n selectUser,\n selectCurrentMessageList,\n selectReplyingToId,\n selectEditingId,\n selectEditingScheduledId,\n selectEditingMessage,\n} from '../../../global/selectors';\nimport captureEscKeyListener from '../../../util/captureEscKeyListener';\nimport buildClassName from '../../../util/buildClassName';\nimport { isUserId } from '../../../global/helpers';\n\nimport useAsyncRendering from '../../right/hooks/useAsyncRendering';\nimport useShowTransition from '../../../hooks/useShowTransition';\n\nimport Button from '../../ui/Button';\nimport EmbeddedMessage from '../../common/EmbeddedMessage';\n\nimport './ComposerEmbeddedMessage.scss';\n\ntype StateProps = {\n replyingToId?: number;\n editingId?: number;\n message?: ApiMessage;\n sender?: ApiUser | ApiChat;\n shouldAnimate?: boolean;\n forwardedMessagesCount?: number;\n};\n\ntype OwnProps = {\n onClear?: () => void;\n};\n\nconst FORWARD_RENDERING_DELAY = 300;\n\nconst ComposerEmbeddedMessage: FC = ({\n replyingToId,\n editingId,\n message,\n sender,\n shouldAnimate,\n forwardedMessagesCount,\n onClear,\n}) => {\n const {\n setReplyingToId,\n setEditingId,\n focusMessage,\n exitForwardMode,\n } = getActions();\n\n const isShown = Boolean(\n ((replyingToId || editingId) && message)\n || (sender && forwardedMessagesCount),\n );\n const canAnimate = useAsyncRendering(\n [forwardedMessagesCount],\n forwardedMessagesCount ? FORWARD_RENDERING_DELAY : undefined,\n );\n\n const {\n shouldRender, transitionClassNames,\n } = useShowTransition(canAnimate && isShown, undefined, !shouldAnimate, undefined, !shouldAnimate);\n\n const clearEmbedded = useCallback(() => {\n if (replyingToId) {\n setReplyingToId({ messageId: undefined });\n } else if (editingId) {\n setEditingId({ messageId: undefined });\n } else if (forwardedMessagesCount) {\n exitForwardMode();\n }\n onClear?.();\n }, [replyingToId, editingId, forwardedMessagesCount, onClear, setReplyingToId, setEditingId, exitForwardMode]);\n\n useEffect(() => (isShown ? captureEscKeyListener(clearEmbedded) : undefined), [isShown, clearEmbedded]);\n\n const handleMessageClick = useCallback((): void => {\n focusMessage({ chatId: message!.chatId, messageId: message!.id });\n }, [focusMessage, message]);\n\n const className = buildClassName('ComposerEmbeddedMessage', transitionClassNames);\n\n const customText = forwardedMessagesCount && forwardedMessagesCount > 1\n ? `${forwardedMessagesCount} forwarded messages`\n : undefined;\n\n if (!shouldRender) {\n return undefined;\n }\n\n return (\n
\n
\n \n \n
\n
\n );\n};\n\nexport default memo(withGlobal(\n (global): StateProps => {\n const { chatId, threadId, type: messageListType } = selectCurrentMessageList(global) || {};\n if (!chatId || !threadId || !messageListType) {\n return {};\n }\n\n const {\n currentUserId,\n forwardMessages: { fromChatId, toChatId, messageIds: forwardMessageIds },\n } = global;\n\n const replyingToId = selectReplyingToId(global, chatId, threadId);\n const editingId = messageListType === 'scheduled'\n ? selectEditingScheduledId(global, chatId)\n : selectEditingId(global, chatId, threadId);\n const shouldAnimate = global.settings.byKey.animationLevel >= 1;\n const isForwarding = toChatId === chatId;\n\n let message;\n if (replyingToId) {\n message = selectChatMessage(global, chatId, replyingToId);\n } else if (editingId) {\n message = selectEditingMessage(global, chatId, threadId, messageListType);\n } else if (isForwarding && forwardMessageIds!.length === 1) {\n message = selectChatMessage(global, fromChatId!, forwardMessageIds![0]);\n }\n\n let sender: ApiChat | ApiUser | undefined;\n if ((isForwarding || replyingToId) && message) {\n const { forwardInfo } = message;\n const isChatWithSelf = chatId === currentUserId;\n if (forwardInfo && (forwardInfo.isChannelPost || isChatWithSelf)) {\n sender = selectForwardedSender(global, message);\n }\n\n if (!sender) {\n sender = selectSender(global, message);\n }\n\n if (!sender) {\n sender = isUserId(fromChatId!) ? selectUser(global, fromChatId!) : selectChat(global, fromChatId!);\n }\n }\n\n return {\n replyingToId,\n editingId,\n message,\n sender,\n shouldAnimate,\n forwardedMessagesCount: isForwarding ? forwardMessageIds!.length : undefined,\n };\n },\n)(ComposerEmbeddedMessage));\n","import React, { FC, memo } from '../../../lib/teact/teact';\nimport { OwnProps } from './AttachmentModal';\nimport { Bundles } from '../../../util/moduleLoader';\n\nimport useModuleLoader from '../../../hooks/useModuleLoader';\n\nconst AttachmentModalAsync: FC = (props) => {\n const { attachments } = props;\n const AttachmentModal = useModuleLoader(Bundles.Extra, 'AttachmentModal', !attachments.length);\n\n // eslint-disable-next-line react/jsx-props-no-spreading\n return AttachmentModal ? : undefined;\n};\n\nexport default memo(AttachmentModalAsync);\n","import React, { FC, memo } from '../../../lib/teact/teact';\nimport { OwnProps } from './BotCommandMenu';\nimport { Bundles } from '../../../util/moduleLoader';\n\nimport useModuleLoader from '../../../hooks/useModuleLoader';\n\nconst BotCommandMenuAsync: FC = (props) => {\n const { isOpen } = props;\n const BotCommandMenu = useModuleLoader(Bundles.Extra, 'BotCommandMenu', !isOpen);\n\n // eslint-disable-next-line react/jsx-props-no-spreading\n return BotCommandMenu ? : undefined;\n};\n\nexport default memo(BotCommandMenuAsync);\n","import React, { FC, memo } from '../../../lib/teact/teact';\nimport { OwnProps } from './PollModal';\nimport { Bundles } from '../../../util/moduleLoader';\n\nimport useModuleLoader from '../../../hooks/useModuleLoader';\n\nconst PollModalAsync: FC = (props) => {\n const { isOpen } = props;\n const PollModal = useModuleLoader(Bundles.Extra, 'PollModal', !isOpen);\n\n // eslint-disable-next-line react/jsx-props-no-spreading\n return PollModal ? : undefined;\n};\n\nexport default memo(PollModalAsync);\n","import React, { FC, memo } from '../../../lib/teact/teact';\nimport { OwnProps } from './DropArea';\nimport { Bundles } from '../../../util/moduleLoader';\n\nimport useModuleLoader from '../../../hooks/useModuleLoader';\n\nconst DropAreaAsync: FC = (props) => {\n const { isOpen } = props;\n const DropArea = useModuleLoader(Bundles.Extra, 'DropArea', !isOpen);\n\n // eslint-disable-next-line react/jsx-props-no-spreading\n return DropArea ? : undefined;\n};\n\nexport default memo(DropAreaAsync);\nexport { DropAreaState } from './DropArea';\n","import React, {\n FC, memo, useCallback, useEffect,\n} from '../../../lib/teact/teact';\nimport { getActions, withGlobal } from '../../../global';\n\nimport { ApiMessage, ApiMessageEntityTypes, ApiWebPage } from '../../../api/types';\nimport { ISettings } from '../../../types';\n\nimport { RE_LINK_TEMPLATE } from '../../../config';\nimport { selectNoWebPage, selectTheme } from '../../../global/selectors';\nimport parseMessageInput from '../../../util/parseMessageInput';\nimport useOnChange from '../../../hooks/useOnChange';\nimport useShowTransition from '../../../hooks/useShowTransition';\nimport useCurrentOrPrev from '../../../hooks/useCurrentOrPrev';\nimport useDebouncedMemo from '../../../hooks/useDebouncedMemo';\nimport buildClassName from '../../../util/buildClassName';\n\nimport WebPage from '../message/WebPage';\nimport Button from '../../ui/Button';\n\nimport './WebPagePreview.scss';\n\ntype OwnProps = {\n chatId: string;\n threadId: number;\n messageText: string;\n disabled?: boolean;\n};\n\ntype StateProps = {\n webPagePreview?: ApiWebPage;\n noWebPage?: boolean;\n theme: ISettings['theme'];\n};\n\nconst DEBOUNCE_MS = 300;\nconst RE_LINK = new RegExp(RE_LINK_TEMPLATE, 'i');\n\nconst WebPagePreview: FC = ({\n chatId,\n threadId,\n messageText,\n disabled,\n webPagePreview,\n noWebPage,\n theme,\n}) => {\n const {\n loadWebPagePreview,\n clearWebPagePreview,\n toggleMessageWebPage,\n } = getActions();\n\n const link = useDebouncedMemo(() => {\n const { text, entities } = parseMessageInput(messageText);\n\n const linkEntity = entities && entities.find(({ type }) => type === ApiMessageEntityTypes.TextUrl);\n if (linkEntity) {\n return linkEntity.url;\n }\n\n const textMatch = text.match(RE_LINK);\n if (textMatch) {\n return textMatch[0];\n }\n\n return undefined;\n }, DEBOUNCE_MS, [messageText]);\n\n useEffect(() => {\n if (link) {\n loadWebPagePreview({ text: link });\n } else {\n clearWebPagePreview();\n toggleMessageWebPage({ chatId, threadId });\n }\n }, [chatId, toggleMessageWebPage, clearWebPagePreview, link, loadWebPagePreview, threadId]);\n\n useOnChange(() => {\n clearWebPagePreview();\n toggleMessageWebPage({ chatId, threadId });\n }, [chatId]);\n\n const isShown = Boolean(webPagePreview && messageText.length && !noWebPage && !disabled);\n const { shouldRender, transitionClassNames } = useShowTransition(isShown);\n\n const renderingWebPage = useCurrentOrPrev(webPagePreview, true);\n\n const handleClearWebpagePreview = useCallback(() => {\n toggleMessageWebPage({ chatId, threadId, noWebPage: true });\n }, [chatId, threadId, toggleMessageWebPage]);\n\n if (!shouldRender || !renderingWebPage) {\n return undefined;\n }\n\n // TODO Refactor so `WebPage` can be used without message\n const { photo, ...webPageWithoutPhoto } = renderingWebPage;\n const messageStub = {\n content: {\n webPage: webPageWithoutPhoto,\n },\n } as ApiMessage;\n\n return (\n
\n
\n \n \n
\n
\n );\n};\n\nexport default memo(withGlobal(\n (global, { chatId, threadId }): StateProps => {\n const noWebPage = selectNoWebPage(global, chatId, threadId);\n return {\n theme: selectTheme(global),\n webPagePreview: global.webPagePreview,\n noWebPage,\n };\n },\n)(WebPagePreview));\n","import React, { FC, memo } from '../../../lib/teact/teact';\nimport { OwnProps } from './SendAsMenu';\nimport { Bundles } from '../../../util/moduleLoader';\n\nimport useModuleLoader from '../../../hooks/useModuleLoader';\n\nconst SendAsMenuAsync: FC = (props) => {\n const { isOpen } = props;\n const SendAsMenu = useModuleLoader(Bundles.Extra, 'SendAsMenu', !isOpen);\n\n // eslint-disable-next-line react/jsx-props-no-spreading\n return SendAsMenu ? : undefined;\n};\n\nexport default memo(SendAsMenuAsync);\n","import React, {\n FC, memo, useCallback, useEffect, useLayoutEffect, useMemo, useRef, useState,\n} from '../../../lib/teact/teact';\nimport { getActions, getGlobal, withGlobal } from '../../../global';\n\nimport { GlobalState, MessageListType } from '../../../global/types';\nimport {\n ApiAttachment,\n ApiBotInlineResult,\n ApiBotInlineMediaResult,\n ApiSticker,\n ApiVideo,\n ApiNewPoll,\n ApiMessage,\n ApiFormattedText,\n ApiChat,\n ApiChatMember,\n ApiUser,\n MAIN_THREAD_ID,\n ApiBotCommand,\n} from '../../../api/types';\nimport { InlineBotSettings } from '../../../types';\n\nimport {\n BASE_EMOJI_KEYWORD_LANG, EDITABLE_INPUT_ID, REPLIES_USER_ID, SEND_MESSAGE_ACTION_INTERVAL,\n} from '../../../config';\nimport { IS_VOICE_RECORDING_SUPPORTED, IS_SINGLE_COLUMN_LAYOUT, IS_IOS } from '../../../util/environment';\nimport { MEMO_EMPTY_ARRAY } from '../../../util/memo';\nimport {\n selectChat,\n selectIsRightColumnShown,\n selectIsInSelectMode,\n selectNewestMessageWithBotKeyboardButtons,\n selectDraft,\n selectScheduledIds,\n selectEditingMessage,\n selectIsChatWithSelf,\n selectChatBot,\n selectChatMessage,\n selectUser,\n selectCanScheduleUntilOnline,\n selectEditingScheduledDraft,\n selectEditingDraft,\n} from '../../../global/selectors';\nimport {\n getAllowedAttachmentOptions,\n getChatSlowModeOptions,\n isChatAdmin,\n isChatSuperGroup,\n isChatChannel,\n} from '../../../global/helpers';\nimport { formatMediaDuration, formatVoiceRecordDuration } from '../../../util/dateFormat';\nimport focusEditableElement from '../../../util/focusEditableElement';\nimport parseMessageInput from '../../../util/parseMessageInput';\nimport buildAttachment from './helpers/buildAttachment';\nimport renderText from '../../common/helpers/renderText';\nimport insertHtmlInSelection from '../../../util/insertHtmlInSelection';\nimport deleteLastCharacterOutsideSelection from '../../../util/deleteLastCharacterOutsideSelection';\nimport buildClassName from '../../../util/buildClassName';\nimport windowSize from '../../../util/windowSize';\nimport { isSelectionInsideInput } from './helpers/selection';\nimport applyIosAutoCapitalizationFix from './helpers/applyIosAutoCapitalizationFix';\nimport { getServerTime } from '../../../util/serverTime';\n\nimport useFlag from '../../../hooks/useFlag';\nimport usePrevious from '../../../hooks/usePrevious';\nimport useStickerTooltip from './hooks/useStickerTooltip';\nimport useContextMenuHandlers from '../../../hooks/useContextMenuHandlers';\nimport useLang from '../../../hooks/useLang';\nimport useSendMessageAction from '../../../hooks/useSendMessageAction';\nimport useInterval from '../../../hooks/useInterval';\nimport useOnChange from '../../../hooks/useOnChange';\nimport { useStateRef } from '../../../hooks/useStateRef';\nimport useVoiceRecording from './hooks/useVoiceRecording';\nimport useClipboardPaste from './hooks/useClipboardPaste';\nimport useDraft from './hooks/useDraft';\nimport useEditing from './hooks/useEditing';\nimport useEmojiTooltip from './hooks/useEmojiTooltip';\nimport useMentionTooltip from './hooks/useMentionTooltip';\nimport useInlineBotTooltip from './hooks/useInlineBotTooltip';\nimport useBotCommandTooltip from './hooks/useBotCommandTooltip';\nimport useSchedule from '../../../hooks/useSchedule';\n\nimport DeleteMessageModal from '../../common/DeleteMessageModal.async';\nimport Button from '../../ui/Button';\nimport ResponsiveHoverButton from '../../ui/ResponsiveHoverButton';\nimport Spinner from '../../ui/Spinner';\nimport AttachMenu from './AttachMenu';\nimport Avatar from '../../common/Avatar';\nimport SymbolMenu from './SymbolMenu.async';\nimport InlineBotTooltip from './InlineBotTooltip.async';\nimport MentionTooltip from './MentionTooltip.async';\nimport CustomSendMenu from './CustomSendMenu.async';\nimport StickerTooltip from './StickerTooltip.async';\nimport EmojiTooltip from './EmojiTooltip.async';\nimport BotCommandTooltip from './BotCommandTooltip.async';\nimport BotKeyboardMenu from './BotKeyboardMenu';\nimport MessageInput from './MessageInput';\nimport ComposerEmbeddedMessage from './ComposerEmbeddedMessage';\nimport AttachmentModal from './AttachmentModal.async';\nimport BotCommandMenu from './BotCommandMenu.async';\nimport PollModal from './PollModal.async';\nimport DropArea, { DropAreaState } from './DropArea.async';\nimport WebPagePreview from './WebPagePreview';\nimport SendAsMenu from './SendAsMenu.async';\n\nimport './Composer.scss';\n\ntype OwnProps = {\n chatId: string;\n threadId: number;\n messageListType: MessageListType;\n dropAreaState: string;\n isReady: boolean;\n onDropHide: NoneToVoidFunction;\n};\n\ntype StateProps =\n {\n editingMessage?: ApiMessage;\n chat?: ApiChat;\n draft?: ApiFormattedText;\n isChatWithBot?: boolean;\n isChatWithSelf?: boolean;\n isChannel?: boolean;\n isRightColumnShown?: boolean;\n isSelectModeActive?: boolean;\n isForwarding?: boolean;\n isPollModalOpen?: boolean;\n botKeyboardMessageId?: number;\n botKeyboardPlaceholder?: string;\n withScheduledButton?: boolean;\n shouldSchedule?: boolean;\n canScheduleUntilOnline?: boolean;\n stickersForEmoji?: ApiSticker[];\n groupChatMembers?: ApiChatMember[];\n currentUserId?: string;\n recentEmojis: string[];\n lastSyncTime?: number;\n contentToBeScheduled?: GlobalState['messages']['contentToBeScheduled'];\n shouldSuggestStickers?: boolean;\n baseEmojiKeywords?: Record;\n emojiKeywords?: Record;\n topInlineBotIds?: string[];\n isInlineBotLoading: boolean;\n inlineBots?: Record;\n botCommands?: ApiBotCommand[] | false;\n chatBotCommands?: ApiBotCommand[];\n sendAsUser?: ApiUser;\n sendAsChat?: ApiChat;\n sendAsId?: string;\n editingDraft?: ApiFormattedText;\n }\n & Pick;\n\nenum MainButtonState {\n Send = 'send',\n Record = 'record',\n Edit = 'edit',\n Schedule = 'schedule',\n}\n\ntype ScheduledMessageArgs = GlobalState['messages']['contentToBeScheduled'] | {\n id: string; queryId: string; isSilent?: boolean;\n};\n\nconst VOICE_RECORDING_FILENAME = 'wonderful-voice-message.ogg';\n// When voice recording is active, composer placeholder will hide to prevent overlapping\nconst SCREEN_WIDTH_TO_HIDE_PLACEHOLDER = 600; // px\n\nconst MOBILE_KEYBOARD_HIDE_DELAY_MS = 100;\nconst SELECT_MODE_TRANSITION_MS = 200;\nconst MESSAGE_MAX_LENGTH = 4096;\nconst CAPTION_MAX_LENGTH = 1024;\nconst SENDING_ANIMATION_DURATION = 350;\n// eslint-disable-next-line max-len\nconst APPENDIX = '';\n\nconst Composer: FC = ({\n dropAreaState,\n shouldSchedule,\n canScheduleUntilOnline,\n isReady,\n onDropHide,\n editingMessage,\n chatId,\n threadId,\n messageListType,\n draft,\n chat,\n connectionState,\n isChatWithBot,\n isChatWithSelf,\n isChannel,\n isRightColumnShown,\n isSelectModeActive,\n isForwarding,\n isPollModalOpen,\n botKeyboardMessageId,\n botKeyboardPlaceholder,\n withScheduledButton,\n stickersForEmoji,\n groupChatMembers,\n topInlineBotIds,\n currentUserId,\n lastSyncTime,\n contentToBeScheduled,\n shouldSuggestStickers,\n baseEmojiKeywords,\n emojiKeywords,\n recentEmojis,\n inlineBots,\n isInlineBotLoading,\n botCommands,\n chatBotCommands,\n sendAsUser,\n sendAsChat,\n sendAsId,\n editingDraft,\n}) => {\n const {\n sendMessage,\n clearDraft,\n showDialog,\n setStickerSearchQuery,\n setGifSearchQuery,\n forwardMessages,\n openPollModal,\n closePollModal,\n loadScheduledHistory,\n openChat,\n addRecentEmoji,\n sendInlineBotResult,\n loadSendAs,\n loadFullChat,\n } = getActions();\n const lang = useLang();\n\n // eslint-disable-next-line no-null/no-null\n const appendixRef = useRef(null);\n const [html, setHtml] = useState('');\n const htmlRef = useStateRef(html);\n const lastMessageSendTimeSeconds = useRef();\n const prevDropAreaState = usePrevious(dropAreaState);\n const { width: windowWidth } = windowSize.get();\n const sendAsIds = chat?.sendAsIds;\n const canShowSendAs = sendAsIds && (sendAsIds.length > 1 || !sendAsIds.includes(currentUserId!));\n // Prevent Symbol Menu from closing when calendar is open\n const [isSymbolMenuForced, forceShowSymbolMenu, cancelForceShowSymbolMenu] = useFlag();\n const sendMessageAction = useSendMessageAction(chatId, threadId);\n\n const handleScheduleCancel = useCallback(() => {\n cancelForceShowSymbolMenu();\n }, [cancelForceShowSymbolMenu]);\n const [requestCalendar, calendar] = useSchedule(canScheduleUntilOnline, handleScheduleCancel);\n\n useEffect(() => {\n lastMessageSendTimeSeconds.current = undefined;\n }, [chatId]);\n\n useEffect(() => {\n if (chatId && lastSyncTime && threadId === MAIN_THREAD_ID && isReady) {\n loadScheduledHistory({ chatId });\n }\n }, [isReady, chatId, loadScheduledHistory, lastSyncTime, threadId]);\n\n useEffect(() => {\n if (chatId && chat && lastSyncTime && !sendAsIds && isReady && isChatSuperGroup(chat)) {\n loadSendAs({ chatId });\n }\n }, [chat, chatId, isReady, lastSyncTime, loadSendAs, sendAsIds]);\n\n useEffect(() => {\n if (chatId && chat && lastSyncTime && !chat.fullInfo && isReady && isChatSuperGroup(chat)) {\n loadFullChat({ chatId });\n }\n }, [chat, chatId, isReady, lastSyncTime, loadFullChat]);\n\n const shouldAnimateSendAsButtonRef = useRef(false);\n useOnChange(([prevChatId, prevSendAsIds]) => {\n // We only animate send-as button if `sendAsIds` was missing when opening the chat\n shouldAnimateSendAsButtonRef.current = Boolean(chatId === prevChatId && sendAsIds && !prevSendAsIds);\n }, [chatId, sendAsIds]);\n\n useLayoutEffect(() => {\n if (!appendixRef.current) return;\n\n appendixRef.current.innerHTML = APPENDIX;\n }, []);\n\n const [attachments, setAttachments] = useState([]);\n\n const [isBotKeyboardOpen, openBotKeyboard, closeBotKeyboard] = useFlag();\n const [isBotCommandMenuOpen, openBotCommandMenu, closeBotCommandMenu] = useFlag();\n const [isSymbolMenuOpen, openSymbolMenu, closeSymbolMenu] = useFlag();\n const [isSendAsMenuOpen, openSendAsMenu, closeSendAsMenu] = useFlag();\n const [isDeleteModalOpen, openDeleteModal, closeDeleteModal] = useFlag();\n const [isSymbolMenuLoaded, onSymbolMenuLoadingComplete] = useFlag();\n const [isHoverDisabled, disableHover, enableHover] = useFlag();\n\n const {\n startRecordingVoice,\n stopRecordingVoice,\n pauseRecordingVoice,\n activeVoiceRecording,\n currentRecordTime,\n recordButtonRef: mainButtonRef,\n startRecordTimeRef,\n } = useVoiceRecording();\n\n useInterval(() => {\n sendMessageAction({ type: 'recordAudio' });\n }, activeVoiceRecording && SEND_MESSAGE_ACTION_INTERVAL);\n\n useEffect(() => {\n if (!activeVoiceRecording) {\n sendMessageAction({ type: 'cancel' });\n }\n }, [activeVoiceRecording, sendMessageAction]);\n\n const mainButtonState = editingMessage ? MainButtonState.Edit\n : (!IS_VOICE_RECORDING_SUPPORTED || activeVoiceRecording || (html && !attachments.length) || isForwarding)\n ? (shouldSchedule ? MainButtonState.Schedule : MainButtonState.Send)\n : MainButtonState.Record;\n const canShowCustomSendMenu = !shouldSchedule;\n\n const {\n isMentionTooltipOpen, closeMentionTooltip, insertMention, mentionFilteredUsers,\n } = useMentionTooltip(\n !attachments.length,\n htmlRef,\n setHtml,\n undefined,\n groupChatMembers,\n topInlineBotIds,\n currentUserId,\n );\n\n const {\n isOpen: isInlineBotTooltipOpen,\n id: inlineBotId,\n isGallery: isInlineBotTooltipGallery,\n switchPm: inlineBotSwitchPm,\n results: inlineBotResults,\n closeTooltip: closeInlineBotTooltip,\n help: inlineBotHelp,\n loadMore: loadMoreForInlineBot,\n } = useInlineBotTooltip(\n Boolean(!attachments.length && lastSyncTime),\n chatId,\n html,\n inlineBots,\n );\n\n const {\n isOpen: isBotCommandTooltipOpen,\n close: closeBotCommandTooltip,\n filteredBotCommands: botTooltipCommands,\n } = useBotCommandTooltip(\n Boolean((botCommands && botCommands.length) || (chatBotCommands && chatBotCommands.length)),\n html,\n botCommands,\n chatBotCommands,\n );\n\n const {\n isContextMenuOpen: isCustomSendMenuOpen,\n handleContextMenu,\n handleContextMenuClose,\n handleContextMenuHide,\n } = useContextMenuHandlers(mainButtonRef, !(mainButtonState === MainButtonState.Send && canShowCustomSendMenu));\n\n const {\n canSendStickers, canSendGifs, canAttachMedia, canAttachPolls, canAttachEmbedLinks,\n } = useMemo(() => getAllowedAttachmentOptions(chat, isChatWithBot), [chat, isChatWithBot]);\n\n const isAdmin = chat && isChatAdmin(chat);\n const slowMode = getChatSlowModeOptions(chat);\n\n const { isStickerTooltipOpen, closeStickerTooltip } = useStickerTooltip(\n Boolean(shouldSuggestStickers && canSendStickers && !attachments.length),\n html,\n stickersForEmoji,\n !isReady,\n );\n const {\n isEmojiTooltipOpen, closeEmojiTooltip, filteredEmojis, insertEmoji,\n } = useEmojiTooltip(\n Boolean(shouldSuggestStickers && canSendStickers && !attachments.length),\n htmlRef,\n recentEmojis,\n undefined,\n setHtml,\n baseEmojiKeywords,\n emojiKeywords,\n !isReady,\n );\n\n const insertTextAndUpdateCursor = useCallback((text: string, inputId: string = EDITABLE_INPUT_ID) => {\n const selection = window.getSelection()!;\n const messageInput = document.getElementById(inputId)!;\n const newHtml = renderText(text, ['escape_html', 'emoji_html', 'br_html'])\n .join('')\n .replace(/\\u200b+/g, '\\u200b');\n\n if (selection.rangeCount) {\n const selectionRange = selection.getRangeAt(0);\n if (isSelectionInsideInput(selectionRange, inputId)) {\n insertHtmlInSelection(newHtml);\n messageInput.dispatchEvent(new Event('input', { bubbles: true }));\n return;\n }\n }\n\n setHtml(`${htmlRef.current!}${newHtml}`);\n\n // If selection is outside of input, set cursor at the end of input\n requestAnimationFrame(() => {\n focusEditableElement(messageInput);\n });\n }, [htmlRef]);\n\n const removeSymbol = useCallback(() => {\n const selection = window.getSelection()!;\n\n if (selection.rangeCount) {\n const selectionRange = selection.getRangeAt(0);\n if (isSelectionInsideInput(selectionRange, EDITABLE_INPUT_ID)) {\n document.execCommand('delete', false);\n return;\n }\n }\n\n setHtml(deleteLastCharacterOutsideSelection(htmlRef.current!));\n }, [htmlRef]);\n\n const resetComposer = useCallback((shouldPreserveInput = false) => {\n if (!shouldPreserveInput) {\n setHtml('');\n }\n setAttachments(MEMO_EMPTY_ARRAY);\n closeStickerTooltip();\n closeMentionTooltip();\n closeEmojiTooltip();\n\n if (IS_SINGLE_COLUMN_LAYOUT) {\n // @optimization\n setTimeout(() => closeSymbolMenu(), SENDING_ANIMATION_DURATION);\n } else {\n closeSymbolMenu();\n }\n }, [closeStickerTooltip, closeMentionTooltip, closeEmojiTooltip, closeSymbolMenu]);\n\n // Handle chat change (ref is used to avoid redundant effect calls)\n const stopRecordingVoiceRef = useRef();\n stopRecordingVoiceRef.current = stopRecordingVoice;\n useEffect(() => {\n return () => {\n stopRecordingVoiceRef.current!();\n resetComposer();\n };\n }, [chatId, resetComposer, stopRecordingVoiceRef]);\n\n const [handleEditComplete, handleEditCancel] = useEditing(\n htmlRef,\n setHtml,\n editingMessage,\n resetComposer,\n openDeleteModal,\n chatId,\n threadId,\n messageListType,\n draft,\n editingDraft,\n );\n useDraft(draft, chatId, threadId, htmlRef, setHtml, editingMessage);\n useClipboardPaste(insertTextAndUpdateCursor, setAttachments, editingMessage);\n\n const handleEmbeddedClear = useCallback(() => {\n if (editingMessage) {\n handleEditCancel();\n }\n }, [editingMessage, handleEditCancel]);\n\n const handleFileSelect = useCallback(async (files: File[], isQuick: boolean) => {\n setAttachments(await Promise.all(files.map((file) => buildAttachment(file.name, file, isQuick))));\n }, []);\n\n const handleAppendFiles = useCallback(async (files: File[], isQuick: boolean) => {\n setAttachments([\n ...attachments,\n ...await Promise.all(files.map((file) => buildAttachment(file.name, file, isQuick))),\n ]);\n }, [attachments]);\n\n const handleClearAttachment = useCallback(() => {\n setAttachments(MEMO_EMPTY_ARRAY);\n }, []);\n\n const handleSend = useCallback(async (isSilent = false, scheduledAt?: number) => {\n if (connectionState !== 'connectionStateReady') {\n return;\n }\n\n let currentAttachments = attachments;\n\n if (activeVoiceRecording) {\n const record = await stopRecordingVoice();\n if (record) {\n const { blob, duration, waveform } = record;\n currentAttachments = [await buildAttachment(\n VOICE_RECORDING_FILENAME,\n blob,\n false,\n { voice: { duration, waveform } },\n )];\n }\n }\n\n const { text, entities } = parseMessageInput(htmlRef.current!);\n\n if (!currentAttachments.length && !text && !isForwarding) {\n return;\n }\n\n // No need to subscribe on updates in `mapStateToProps`\n const { serverTimeOffset } = getGlobal();\n\n const maxLength = currentAttachments.length ? CAPTION_MAX_LENGTH : MESSAGE_MAX_LENGTH;\n if (text?.length > maxLength) {\n const extraLength = text.length - maxLength;\n showDialog({\n data: {\n message: 'MESSAGE_TOO_LONG_PLEASE_REMOVE_CHARACTERS',\n textParams: {\n '{EXTRA_CHARS_COUNT}': extraLength,\n '{PLURAL_S}': extraLength > 1 ? 's' : '',\n },\n hasErrorKey: true,\n },\n });\n\n return;\n }\n\n const messageInput = document.getElementById(EDITABLE_INPUT_ID)!;\n\n if (currentAttachments.length || text) {\n if (slowMode && !isAdmin) {\n const nowSeconds = getServerTime(serverTimeOffset);\n const secondsSinceLastMessage = lastMessageSendTimeSeconds.current\n && Math.floor(nowSeconds - lastMessageSendTimeSeconds.current);\n const nextSendDateNotReached = slowMode.nextSendDate && slowMode.nextSendDate > nowSeconds;\n\n if (\n (secondsSinceLastMessage && secondsSinceLastMessage < slowMode.seconds)\n || nextSendDateNotReached\n ) {\n const secondsRemaining = nextSendDateNotReached\n ? slowMode.nextSendDate! - nowSeconds\n : slowMode.seconds - secondsSinceLastMessage!;\n showDialog({\n data: {\n message: lang('SlowModeHint', formatMediaDuration(secondsRemaining)),\n isSlowMode: true,\n hasErrorKey: false,\n },\n });\n\n messageInput.blur();\n\n return;\n }\n }\n\n sendMessage({\n text,\n entities,\n attachments: currentAttachments,\n scheduledAt,\n isSilent,\n });\n }\n\n if (isForwarding) {\n forwardMessages({\n scheduledAt,\n isSilent,\n });\n }\n\n lastMessageSendTimeSeconds.current = getServerTime(serverTimeOffset);\n\n clearDraft({ chatId, localOnly: true });\n\n if (IS_IOS && messageInput === document.activeElement) {\n applyIosAutoCapitalizationFix(messageInput);\n }\n\n // Wait until message animation starts\n requestAnimationFrame(() => {\n resetComposer();\n });\n }, [\n connectionState, attachments, activeVoiceRecording, isForwarding, clearDraft, chatId,\n resetComposer, stopRecordingVoice, showDialog, slowMode, isAdmin, sendMessage, forwardMessages, lang, htmlRef,\n ]);\n\n const handleActivateBotCommandMenu = useCallback(() => {\n closeSymbolMenu();\n openBotCommandMenu();\n }, [closeSymbolMenu, openBotCommandMenu]);\n\n const handleActivateSymbolMenu = useCallback(() => {\n closeBotCommandMenu();\n closeSendAsMenu();\n openSymbolMenu();\n }, [closeBotCommandMenu, closeSendAsMenu, openSymbolMenu]);\n\n const handleMessageSchedule = useCallback((\n args: ScheduledMessageArgs, scheduledAt: number,\n ) => {\n if (args && 'queryId' in args) {\n const { id, queryId, isSilent } = args;\n sendInlineBotResult({\n id,\n queryId,\n scheduledAt,\n isSilent,\n });\n return;\n }\n\n const { isSilent, ...restArgs } = args || {};\n\n if (!args || Object.keys(restArgs).length === 0) {\n void handleSend(Boolean(isSilent), scheduledAt);\n } else {\n sendMessage({\n ...args,\n scheduledAt,\n });\n }\n }, [handleSend, sendInlineBotResult, sendMessage]);\n\n useEffect(() => {\n if (contentToBeScheduled) {\n requestCalendar((scheduledAt) => {\n handleMessageSchedule(contentToBeScheduled, scheduledAt);\n });\n }\n }, [contentToBeScheduled, handleMessageSchedule, requestCalendar]);\n\n const handleStickerSelect = useCallback((\n sticker: ApiSticker, isSilent?: boolean, isScheduleRequested?: boolean, shouldPreserveInput = false,\n ) => {\n sticker = {\n ...sticker,\n isPreloadedGlobally: true,\n };\n\n if (shouldSchedule || isScheduleRequested) {\n forceShowSymbolMenu();\n requestCalendar((scheduledAt) => {\n cancelForceShowSymbolMenu();\n handleMessageSchedule({ sticker, isSilent }, scheduledAt);\n requestAnimationFrame(() => {\n resetComposer(shouldPreserveInput);\n });\n });\n } else {\n sendMessage({ sticker, isSilent });\n requestAnimationFrame(() => {\n resetComposer(shouldPreserveInput);\n });\n }\n }, [\n shouldSchedule, forceShowSymbolMenu, requestCalendar, cancelForceShowSymbolMenu, handleMessageSchedule,\n resetComposer, sendMessage,\n ]);\n\n const handleGifSelect = useCallback((gif: ApiVideo, isSilent?: boolean, isScheduleRequested?: boolean) => {\n if (shouldSchedule || isScheduleRequested) {\n forceShowSymbolMenu();\n requestCalendar((scheduledAt) => {\n cancelForceShowSymbolMenu();\n handleMessageSchedule({ gif, isSilent }, scheduledAt);\n requestAnimationFrame(() => {\n resetComposer(true);\n });\n });\n } else {\n sendMessage({ gif, isSilent });\n requestAnimationFrame(() => {\n resetComposer(true);\n });\n }\n }, [\n shouldSchedule, forceShowSymbolMenu, requestCalendar, cancelForceShowSymbolMenu, handleMessageSchedule,\n resetComposer, sendMessage,\n ]);\n\n const handleInlineBotSelect = useCallback((\n inlineResult: ApiBotInlineResult | ApiBotInlineMediaResult, isSilent?: boolean, isScheduleRequested?: boolean,\n ) => {\n if (connectionState !== 'connectionStateReady') {\n return;\n }\n\n if (shouldSchedule || isScheduleRequested) {\n requestCalendar((scheduledAt) => {\n handleMessageSchedule({\n id: inlineResult.id,\n queryId: inlineResult.queryId,\n isSilent,\n }, scheduledAt);\n });\n } else {\n sendInlineBotResult({\n id: inlineResult.id,\n queryId: inlineResult.queryId,\n isSilent,\n });\n }\n\n const messageInput = document.getElementById(EDITABLE_INPUT_ID)!;\n if (IS_IOS && messageInput === document.activeElement) {\n applyIosAutoCapitalizationFix(messageInput);\n }\n\n clearDraft({ chatId, localOnly: true });\n requestAnimationFrame(() => {\n resetComposer();\n });\n }, [\n chatId, clearDraft, connectionState, handleMessageSchedule, requestCalendar, resetComposer, sendInlineBotResult,\n shouldSchedule,\n ]);\n\n const handleBotCommandSelect = useCallback(() => {\n clearDraft({ chatId, localOnly: true });\n requestAnimationFrame(() => {\n resetComposer();\n });\n }, [chatId, clearDraft, resetComposer]);\n\n const handlePollSend = useCallback((poll: ApiNewPoll) => {\n if (shouldSchedule) {\n requestCalendar((scheduledAt) => {\n handleMessageSchedule({ poll }, scheduledAt);\n });\n closePollModal();\n } else {\n sendMessage({ poll });\n closePollModal();\n }\n }, [closePollModal, handleMessageSchedule, requestCalendar, sendMessage, shouldSchedule]);\n\n const handleSendSilent = useCallback(() => {\n if (shouldSchedule) {\n requestCalendar((scheduledAt) => {\n handleMessageSchedule({ isSilent: true }, scheduledAt);\n });\n } else {\n void handleSend(true);\n }\n }, [handleMessageSchedule, handleSend, requestCalendar, shouldSchedule]);\n\n const handleSearchOpen = useCallback((type: 'stickers' | 'gifs') => {\n if (type === 'stickers') {\n setStickerSearchQuery({ query: '' });\n setGifSearchQuery({ query: undefined });\n } else {\n setGifSearchQuery({ query: '' });\n setStickerSearchQuery({ query: undefined });\n }\n }, [setStickerSearchQuery, setGifSearchQuery]);\n\n const handleSymbolMenuOpen = useCallback(() => {\n const messageInput = document.getElementById(EDITABLE_INPUT_ID)!;\n\n if (!IS_SINGLE_COLUMN_LAYOUT || messageInput !== document.activeElement) {\n openSymbolMenu();\n return;\n }\n\n messageInput.blur();\n setTimeout(() => {\n closeBotCommandMenu();\n openSymbolMenu();\n }, MOBILE_KEYBOARD_HIDE_DELAY_MS);\n }, [openSymbolMenu, closeBotCommandMenu]);\n\n const handleSendAsMenuOpen = useCallback(() => {\n const messageInput = document.getElementById(EDITABLE_INPUT_ID)!;\n\n if (!IS_SINGLE_COLUMN_LAYOUT || messageInput !== document.activeElement) {\n closeBotCommandMenu();\n closeSymbolMenu();\n openSendAsMenu();\n return;\n }\n\n messageInput.blur();\n setTimeout(() => {\n closeBotCommandMenu();\n closeSymbolMenu();\n openSendAsMenu();\n }, MOBILE_KEYBOARD_HIDE_DELAY_MS);\n }, [closeBotCommandMenu, closeSymbolMenu, openSendAsMenu]);\n\n const handleAllScheduledClick = useCallback(() => {\n openChat({ id: chatId, threadId, type: 'scheduled' });\n }, [openChat, chatId, threadId]);\n\n useEffect(() => {\n if (isRightColumnShown && IS_SINGLE_COLUMN_LAYOUT) {\n closeSymbolMenu();\n }\n }, [isRightColumnShown, closeSymbolMenu]);\n\n useEffect(() => {\n if (!isReady) return;\n\n if (isSelectModeActive) {\n disableHover();\n } else {\n setTimeout(() => {\n enableHover();\n }, SELECT_MODE_TRANSITION_MS);\n }\n }, [isSelectModeActive, enableHover, disableHover, isReady]);\n\n const mainButtonHandler = useCallback(() => {\n switch (mainButtonState) {\n case MainButtonState.Send:\n handleSend();\n break;\n case MainButtonState.Record:\n void startRecordingVoice();\n break;\n case MainButtonState.Edit:\n handleEditComplete();\n break;\n case MainButtonState.Schedule:\n if (activeVoiceRecording) {\n pauseRecordingVoice();\n }\n requestCalendar((scheduledAt) => {\n handleMessageSchedule({}, scheduledAt);\n });\n break;\n default:\n break;\n }\n }, [\n mainButtonState, handleSend, startRecordingVoice, handleEditComplete, activeVoiceRecording, requestCalendar,\n pauseRecordingVoice, handleMessageSchedule,\n ]);\n\n const areVoiceMessagesNotAllowed = mainButtonState === MainButtonState.Record && !canAttachMedia;\n\n const prevEditedMessage = usePrevious(editingMessage, true);\n const renderedEditedMessage = editingMessage || prevEditedMessage;\n\n const scheduledDefaultDate = new Date();\n scheduledDefaultDate.setSeconds(0);\n scheduledDefaultDate.setMilliseconds(0);\n\n const scheduledMaxDate = new Date();\n scheduledMaxDate.setFullYear(scheduledMaxDate.getFullYear() + 1);\n\n let sendButtonAriaLabel = 'SendMessage';\n switch (mainButtonState) {\n case MainButtonState.Edit:\n sendButtonAriaLabel = 'Save edited message';\n break;\n case MainButtonState.Record:\n sendButtonAriaLabel = areVoiceMessagesNotAllowed\n ? 'Conversation.DefaultRestrictedMedia'\n : 'AccDescrVoiceMessage';\n }\n\n const className = buildClassName(\n 'Composer',\n !isSelectModeActive && 'shown',\n isHoverDisabled && 'hover-disabled',\n );\n\n const symbolMenuButtonClassName = buildClassName(\n 'mobile-symbol-menu-button',\n !isReady && 'not-ready',\n isSymbolMenuLoaded\n ? (isSymbolMenuOpen && 'menu-opened')\n : (isSymbolMenuOpen && 'is-loading'),\n );\n\n const handleSendScheduled = useCallback(() => {\n requestCalendar((scheduledAt) => {\n handleMessageSchedule({}, scheduledAt);\n });\n }, [handleMessageSchedule, requestCalendar]);\n\n const onSend = mainButtonState === MainButtonState.Edit\n ? handleEditComplete\n : mainButtonState === MainButtonState.Schedule ? handleSendScheduled\n : handleSend;\n\n return (\n
\n {canAttachMedia && isReady && (\n \n )}\n \n \n {renderedEditedMessage && (\n \n )}\n \n \n \n \n
\n
\n \n \n
\n {isChatWithBot && botCommands !== false && !activeVoiceRecording && !editingMessage && (\n \n \n \n )}\n {canShowSendAs && (sendAsUser || sendAsChat) && (\n \n \n \n )}\n {IS_SINGLE_COLUMN_LAYOUT ? (\n \n \n \n {isSymbolMenuOpen && !isSymbolMenuLoaded && }\n \n ) : (\n \n \n \n )}\n \n {isInlineBotLoading && Boolean(inlineBotId) && (\n \n )}\n {withScheduledButton && (\n \n \n \n )}\n {botKeyboardMessageId && !activeVoiceRecording && !editingMessage && (\n \n \n \n )}\n {activeVoiceRecording && currentRecordTime && (\n \n {formatVoiceRecordDuration(currentRecordTime - startRecordTimeRef.current!)}\n \n )}\n \n \n \n {botKeyboardMessageId && (\n \n )}\n {botCommands && (\n \n )}\n \n
\n
\n {activeVoiceRecording && (\n \n \n \n )}\n \n \n \n \n \n \n {canShowCustomSendMenu && (\n \n )}\n {calendar}\n
\n );\n};\n\nexport default memo(withGlobal(\n (global, { chatId, threadId, messageListType }): StateProps => {\n const chat = selectChat(global, chatId);\n const chatBot = chatId !== REPLIES_USER_ID ? selectChatBot(global, chatId) : undefined;\n const isChatWithBot = Boolean(chatBot);\n const isChatWithSelf = selectIsChatWithSelf(global, chatId);\n const messageWithActualBotKeyboard = isChatWithBot && selectNewestMessageWithBotKeyboardButtons(global, chatId);\n const scheduledIds = selectScheduledIds(global, chatId);\n const { language, shouldSuggestStickers } = global.settings.byKey;\n const baseEmojiKeywords = global.emojiKeywords[BASE_EMOJI_KEYWORD_LANG];\n const emojiKeywords = language !== BASE_EMOJI_KEYWORD_LANG ? global.emojiKeywords[language] : undefined;\n const botKeyboardMessageId = messageWithActualBotKeyboard ? messageWithActualBotKeyboard.id : undefined;\n const keyboardMessage = botKeyboardMessageId ? selectChatMessage(global, chatId, botKeyboardMessageId) : undefined;\n const { currentUserId } = global;\n const defaultSendAsId = chat?.fullInfo ? chat?.fullInfo?.sendAsId || currentUserId : undefined;\n const sendAsId = chat?.sendAsIds && defaultSendAsId && chat.sendAsIds.includes(defaultSendAsId)\n ? defaultSendAsId\n : (chat?.adminRights?.anonymous ? chat?.id : undefined);\n const sendAsUser = sendAsId ? selectUser(global, sendAsId) : undefined;\n const sendAsChat = !sendAsUser && sendAsId ? selectChat(global, sendAsId) : undefined;\n\n const editingDraft = messageListType === 'scheduled'\n ? selectEditingScheduledDraft(global, chatId)\n : selectEditingDraft(global, chatId, threadId);\n\n return {\n editingMessage: selectEditingMessage(global, chatId, threadId, messageListType),\n connectionState: global.connectionState,\n draft: selectDraft(global, chatId, threadId),\n chat,\n isChatWithBot,\n isChatWithSelf,\n canScheduleUntilOnline: selectCanScheduleUntilOnline(global, chatId),\n isChannel: chat ? isChatChannel(chat) : undefined,\n isRightColumnShown: selectIsRightColumnShown(global),\n isSelectModeActive: selectIsInSelectMode(global),\n withScheduledButton: (\n threadId === MAIN_THREAD_ID\n && messageListType === 'thread'\n && Boolean(scheduledIds?.length)\n ),\n shouldSchedule: messageListType === 'scheduled',\n botKeyboardMessageId,\n botKeyboardPlaceholder: keyboardMessage?.keyboardPlaceholder,\n isForwarding: chatId === global.forwardMessages.toChatId,\n isPollModalOpen: global.isPollModalOpen,\n stickersForEmoji: global.stickers.forEmoji.stickers,\n groupChatMembers: chat?.fullInfo?.members,\n topInlineBotIds: global.topInlineBots?.userIds,\n currentUserId,\n lastSyncTime: global.lastSyncTime,\n contentToBeScheduled: global.messages.contentToBeScheduled,\n shouldSuggestStickers,\n recentEmojis: global.recentEmojis,\n baseEmojiKeywords: baseEmojiKeywords?.keywords,\n emojiKeywords: emojiKeywords?.keywords,\n inlineBots: global.inlineBots.byUsername,\n isInlineBotLoading: global.inlineBots.isLoading,\n chatBotCommands: chat && chat.fullInfo && chat.fullInfo.botCommands,\n botCommands: chatBot && chatBot.fullInfo ? (chatBot.fullInfo.botCommands || false) : undefined,\n sendAsUser,\n sendAsChat,\n sendAsId,\n editingDraft,\n };\n },\n)(Composer));\n","import {\n useCallback, useEffect, useRef, useState,\n} from '../../../../lib/teact/teact';\n\nimport { IS_SAFARI, IS_VOICE_RECORDING_SUPPORTED } from '../../../../util/environment';\nimport * as voiceRecording from '../../../../util/voiceRecording';\nimport captureEscKeyListener from '../../../../util/captureEscKeyListener';\n\ntype ActiveVoiceRecording = { stop: () => Promise; pause: NoneToVoidFunction } | undefined;\n\nconst useVoiceRecording = () => {\n // eslint-disable-next-line no-null/no-null\n const recordButtonRef = useRef(null);\n const [activeVoiceRecording, setActiveVoiceRecording] = useState();\n const startRecordTimeRef = useRef();\n const [currentRecordTime, setCurrentRecordTime] = useState();\n\n useEffect(() => {\n // Preloading worker fixes silent first record on iOS\n if (IS_SAFARI && IS_VOICE_RECORDING_SUPPORTED) {\n void voiceRecording.init();\n }\n }, []);\n\n const startRecordingVoice = useCallback(async () => {\n try {\n const { stop, pause } = await voiceRecording.start((tickVolume: number) => {\n if (recordButtonRef.current) {\n if (startRecordTimeRef.current && Date.now() % 4 === 0) {\n recordButtonRef.current.style.boxShadow = `0 0 0 ${(tickVolume || 0) * 50}px rgba(0,0,0,.15)`;\n }\n setCurrentRecordTime(Date.now());\n }\n });\n startRecordTimeRef.current = Date.now();\n setCurrentRecordTime(Date.now());\n\n setActiveVoiceRecording({ stop, pause });\n } catch (err) {\n // eslint-disable-next-line no-console\n console.error(err);\n }\n }, []);\n\n const pauseRecordingVoice = useCallback(() => {\n if (!activeVoiceRecording) {\n return undefined;\n }\n\n if (recordButtonRef.current) {\n recordButtonRef.current.style.boxShadow = 'none';\n }\n try {\n return activeVoiceRecording!.pause();\n } catch (err) {\n // eslint-disable-next-line no-console\n console.error(err);\n return undefined;\n }\n }, [activeVoiceRecording]);\n\n const stopRecordingVoice = useCallback(() => {\n if (!activeVoiceRecording) {\n return undefined;\n }\n\n setActiveVoiceRecording(undefined);\n startRecordTimeRef.current = undefined;\n setCurrentRecordTime(undefined);\n if (recordButtonRef.current) {\n recordButtonRef.current.style.boxShadow = 'none';\n }\n try {\n return activeVoiceRecording!.stop();\n } catch (err) {\n // eslint-disable-next-line no-console\n console.error(err);\n return undefined;\n }\n }, [activeVoiceRecording]);\n\n useEffect(() => {\n return activeVoiceRecording ? captureEscKeyListener(stopRecordingVoice) : undefined;\n }, [activeVoiceRecording, stopRecordingVoice]);\n\n return {\n startRecordingVoice,\n pauseRecordingVoice,\n stopRecordingVoice,\n activeVoiceRecording,\n currentRecordTime,\n recordButtonRef,\n startRecordTimeRef,\n };\n};\n\nexport default useVoiceRecording;\n","import { useEffect, useMemo } from '../../../../lib/teact/teact';\nimport { getActions } from '../../../../global';\n\nimport { ApiSticker } from '../../../../api/types';\n\nimport { IS_EMOJI_SUPPORTED } from '../../../../util/environment';\n\nimport parseEmojiOnlyString from '../../../common/helpers/parseEmojiOnlyString';\nimport { prepareForRegExp } from '../helpers/prepareForRegExp';\n\nexport default function useStickerTooltip(\n isAllowed: boolean,\n html: string,\n stickers?: ApiSticker[],\n isDisabled = false,\n) {\n const cleanHtml = useMemo(() => prepareForRegExp(html).trim(), [html]);\n const { loadStickersForEmoji, clearStickersForEmoji } = getActions();\n const isSingleEmoji = (\n (IS_EMOJI_SUPPORTED && parseEmojiOnlyString(cleanHtml) === 1)\n || (!IS_EMOJI_SUPPORTED && Boolean(html.match(/^]*?>$/g)))\n );\n const hasStickers = Boolean(stickers) && isSingleEmoji;\n\n useEffect(() => {\n if (isDisabled) return;\n\n if (isAllowed && isSingleEmoji) {\n loadStickersForEmoji({\n emoji: IS_EMOJI_SUPPORTED ? cleanHtml : cleanHtml.match(/alt=\"(.+)\"/)?.[1],\n });\n } else if (hasStickers || !isSingleEmoji) {\n clearStickersForEmoji();\n }\n // We omit `hasStickers` here to prevent re-fetching after manually closing tooltip (via ).\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [html, isSingleEmoji, clearStickersForEmoji, loadStickersForEmoji, isAllowed, isDisabled]);\n\n return {\n isStickerTooltipOpen: hasStickers,\n closeStickerTooltip: clearStickersForEmoji,\n };\n}\n","export default function deleteLastCharacterOutsideSelection(html: string) {\n const tempInput = document.createElement('div');\n tempInput.contentEditable = 'true';\n tempInput.style.position = 'absolute';\n tempInput.style.left = '-10000px';\n tempInput.style.top = '-10000px';\n tempInput.innerHTML = html;\n document.body.appendChild(tempInput);\n let element = tempInput.lastChild!;\n\n if (element.lastChild) {\n // Selects the last and the deepest child of the element.\n while (element.lastChild) {\n element = element.lastChild;\n }\n }\n\n // Gets length of the element's content.\n const textLength = element.textContent!.length;\n const range = document.createRange();\n const selection = window.getSelection()!;\n\n // Sets selection position to the end of the element.\n range.setStart(element, textLength);\n range.setEnd(element, textLength);\n selection.removeAllRanges();\n selection.addRange(range);\n document.execCommand('delete', false);\n\n const result = tempInput.innerHTML;\n document.body.removeChild(tempInput);\n\n return result;\n}\n","import { useCallback, useEffect } from '../../../../lib/teact/teact';\nimport { getActions } from '../../../../global';\n\nimport { ApiFormattedText, ApiMessage } from '../../../../api/types';\nimport { MessageListType } from '../../../../global/types';\n\nimport useEffectWithPrevDeps from '../../../../hooks/useEffectWithPrevDeps';\nimport { EDITABLE_INPUT_ID } from '../../../../config';\nimport parseMessageInput from '../../../../util/parseMessageInput';\nimport focusEditableElement from '../../../../util/focusEditableElement';\nimport { hasMessageMedia } from '../../../../global/helpers';\nimport { getTextWithEntitiesAsHtml } from '../../../common/helpers/renderTextWithEntities';\nimport { fastRaf } from '../../../../util/schedulers';\nimport useBackgroundMode from '../../../../hooks/useBackgroundMode';\nimport useBeforeUnload from '../../../../hooks/useBeforeUnload';\n\nconst useEditing = (\n htmlRef: { current: string },\n setHtml: (html: string) => void,\n editedMessage: ApiMessage | undefined,\n resetComposer: (shouldPreserveInput?: boolean) => void,\n openDeleteModal: () => void,\n chatId: string,\n threadId: number,\n type: MessageListType,\n draft?: ApiFormattedText,\n editingDraft?: ApiFormattedText,\n) => {\n const { editMessage, setEditingDraft } = getActions();\n\n useEffectWithPrevDeps(([prevEditedMessage]) => {\n if (!editedMessage) {\n return;\n }\n if (prevEditedMessage?.id === editedMessage.id) {\n return;\n }\n\n const html = getTextWithEntitiesAsHtml(editingDraft?.text.length ? editingDraft : editedMessage.content.text);\n setHtml(html);\n // `fastRaf` would execute syncronously in this case\n requestAnimationFrame(() => {\n const messageInput = document.getElementById(EDITABLE_INPUT_ID)!;\n focusEditableElement(messageInput, true);\n });\n }, [editedMessage, setHtml] as const);\n\n useEffect(() => {\n if (!editedMessage) return undefined;\n return () => {\n // eslint-disable-next-line react-hooks/exhaustive-deps\n const edited = parseMessageInput(htmlRef.current!);\n const update = edited.text.length ? edited : undefined;\n setEditingDraft({\n chatId, threadId, type, text: update,\n });\n };\n }, [chatId, editedMessage, htmlRef, setEditingDraft, threadId, type]);\n\n const restoreNewDraftAfterEditing = useCallback(() => {\n if (!draft) return;\n // Run 1 frame after editing draft reset\n fastRaf(() => {\n setHtml(getTextWithEntitiesAsHtml(draft));\n const messageInput = document.getElementById(EDITABLE_INPUT_ID)!;\n requestAnimationFrame(() => {\n focusEditableElement(messageInput, true);\n });\n });\n }, [draft, setHtml]);\n\n const handleEditCancel = useCallback(() => {\n resetComposer();\n restoreNewDraftAfterEditing();\n }, [resetComposer, restoreNewDraftAfterEditing]);\n\n const handleEditComplete = useCallback(() => {\n const { text, entities } = parseMessageInput(htmlRef.current!);\n\n if (!editedMessage) {\n return;\n }\n\n if (!text && !hasMessageMedia(editedMessage)) {\n openDeleteModal();\n return;\n }\n\n editMessage({\n messageId: editedMessage.id,\n text,\n entities,\n });\n\n resetComposer();\n restoreNewDraftAfterEditing();\n }, [editMessage, editedMessage, htmlRef, openDeleteModal, resetComposer, restoreNewDraftAfterEditing]);\n\n const handleBlur = useCallback(() => {\n if (!editedMessage) return;\n const edited = parseMessageInput(htmlRef.current!);\n const update = edited.text.length ? edited : undefined;\n setEditingDraft({\n chatId, threadId, type, text: update,\n });\n }, [chatId, editedMessage, htmlRef, setEditingDraft, threadId, type]);\n\n useBackgroundMode(handleBlur);\n useBeforeUnload(handleBlur);\n\n return [handleEditComplete, handleEditCancel];\n};\n\nexport default useEditing;\n","import React, { FC, memo } from '../../lib/teact/teact';\nimport { OwnProps } from './MobileSearch';\nimport { Bundles } from '../../util/moduleLoader';\n\nimport useModuleLoader from '../../hooks/useModuleLoader';\n\nconst MobileSearchAsync: FC = (props) => {\n const { isActive } = props;\n const MobileSearch = useModuleLoader(Bundles.Extra, 'MobileSearch', !isActive, true);\n\n // eslint-disable-next-line react/jsx-props-no-spreading\n return MobileSearch ? : undefined;\n};\n\nexport default memo(MobileSearchAsync);\n","import React, { FC, memo } from '../../lib/teact/teact';\nimport { Bundles } from '../../util/moduleLoader';\nimport { OwnProps } from './MessageSelectToolbar';\n\nimport useModuleLoader from '../../hooks/useModuleLoader';\n\nconst MessageSelectToolbarAsync: FC = (props) => {\n const { isActive } = props;\n const MessageSelectToolbar = useModuleLoader(Bundles.Extra, 'MessageSelectToolbar', !isActive);\n\n // eslint-disable-next-line react/jsx-props-no-spreading\n return MessageSelectToolbar ? : undefined;\n};\n\nexport default memo(MessageSelectToolbarAsync);\n","import React, { FC, memo } from '../../lib/teact/teact';\nimport { OwnProps } from './UnpinAllMessagesModal';\nimport { Bundles } from '../../util/moduleLoader';\n\nimport useModuleLoader from '../../hooks/useModuleLoader';\n\nconst UnpinAllMessagesModalAsync: FC = (props) => {\n const { isOpen } = props;\n const UnpinAllMessagesModal = useModuleLoader(Bundles.Extra, 'UnpinAllMessagesModal', !isOpen);\n\n // eslint-disable-next-line react/jsx-props-no-spreading\n return UnpinAllMessagesModal ? : undefined;\n};\n\nexport default memo(UnpinAllMessagesModalAsync);\n","import React, { FC, memo } from '../../lib/teact/teact';\nimport { OwnProps } from './PaymentModal';\nimport { Bundles } from '../../util/moduleLoader';\n\nimport useModuleLoader from '../../hooks/useModuleLoader';\n\nconst PaymentModalAsync: FC = (props) => {\n const { isOpen } = props;\n const PaymentModal = useModuleLoader(Bundles.Extra, 'PaymentModal', !isOpen);\n\n // eslint-disable-next-line react/jsx-props-no-spreading\n return PaymentModal ? : undefined;\n};\n\nexport default memo(PaymentModalAsync);\n","import React, { FC, memo } from '../../lib/teact/teact';\nimport { OwnProps } from './ReceiptModal';\nimport { Bundles } from '../../util/moduleLoader';\n\nimport useModuleLoader from '../../hooks/useModuleLoader';\n\nconst ReceiptModalAsync: FC = (props) => {\n const { isOpen } = props;\n const ReceiptModal = useModuleLoader(Bundles.Extra, 'ReceiptModal', !isOpen);\n\n // eslint-disable-next-line react/jsx-props-no-spreading\n return ReceiptModal ? : undefined;\n};\n\nexport default memo(ReceiptModalAsync);\n","import React, { FC, memo } from '../../lib/teact/teact';\nimport { OwnProps } from './SeenByModal';\nimport { Bundles } from '../../util/moduleLoader';\n\nimport useModuleLoader from '../../hooks/useModuleLoader';\n\nconst SeenByModalAsync: FC = (props) => {\n const { isOpen } = props;\n const SeenByModal = useModuleLoader(Bundles.Extra, 'SeenByModal', !isOpen);\n\n // eslint-disable-next-line react/jsx-props-no-spreading\n return SeenByModal ? : undefined;\n};\n\nexport default memo(SeenByModalAsync);\n","import React, { FC, memo } from '../../lib/teact/teact';\nimport { OwnProps } from './EmojiInteractionAnimation';\nimport { Bundles } from '../../util/moduleLoader';\n\nimport useModuleLoader from '../../hooks/useModuleLoader';\n\nconst EmojiInteractionAnimationAsync: FC = (props) => {\n const { activeEmojiInteraction } = props;\n const EmojiInteractionAnimation = useModuleLoader(\n Bundles.Extra, 'EmojiInteractionAnimation', !activeEmojiInteraction,\n );\n\n // eslint-disable-next-line react/jsx-props-no-spreading\n return EmojiInteractionAnimation ? : undefined;\n};\n\nexport default memo(EmojiInteractionAnimationAsync);\n","import React, { FC, memo } from '../../lib/teact/teact';\nimport { OwnProps } from './ReactorListModal';\nimport { Bundles } from '../../util/moduleLoader';\n\nimport useModuleLoader from '../../hooks/useModuleLoader';\n\nconst ReactorListModalAsync: FC = (props) => {\n const { isOpen } = props;\n const ReactorListModal = useModuleLoader(Bundles.Extra, 'ReactorListModal', !isOpen);\n\n // eslint-disable-next-line react/jsx-props-no-spreading\n return ReactorListModal ? : undefined;\n};\n\nexport default memo(ReactorListModalAsync);\n","import React, {\n FC, useEffect, useState, memo, useMemo, useCallback,\n} from '../../lib/teact/teact';\nimport { getActions, withGlobal } from '../../global';\n\nimport { ApiChatBannedRights, MAIN_THREAD_ID } from '../../api/types';\nimport {\n MessageListType,\n MessageList as GlobalMessageList,\n ActiveEmojiInteraction,\n} from '../../global/types';\nimport { ThemeKey } from '../../types';\n\nimport {\n MIN_SCREEN_WIDTH_FOR_STATIC_LEFT_COLUMN,\n MOBILE_SCREEN_MAX_WIDTH,\n MIN_SCREEN_WIDTH_FOR_STATIC_RIGHT_COLUMN,\n SAFE_SCREEN_WIDTH_FOR_STATIC_RIGHT_COLUMN,\n SAFE_SCREEN_WIDTH_FOR_CHAT_INFO,\n ANIMATION_LEVEL_MAX,\n ANIMATION_END_DELAY,\n DARK_THEME_BG_COLOR,\n LIGHT_THEME_BG_COLOR,\n ANIMATION_LEVEL_MIN,\n SUPPORTED_IMAGE_CONTENT_TYPES,\n} from '../../config';\nimport {\n IS_SINGLE_COLUMN_LAYOUT,\n IS_TABLET_COLUMN_LAYOUT,\n IS_TOUCH_ENV,\n MASK_IMAGE_DISABLED,\n} from '../../util/environment';\nimport { DropAreaState } from './composer/DropArea';\nimport {\n selectChat,\n selectChatBot,\n selectCurrentMessageList,\n selectCurrentTextSearch,\n selectIsChatBotNotStarted,\n selectIsInSelectMode,\n selectIsRightColumnShown,\n selectIsUserBlocked,\n selectPinnedIds,\n selectTheme,\n} from '../../global/selectors';\nimport {\n getCanPostInChat, getMessageSendingRestrictionReason, isChatChannel, isChatSuperGroup, isUserId,\n} from '../../global/helpers';\nimport captureEscKeyListener from '../../util/captureEscKeyListener';\nimport buildClassName from '../../util/buildClassName';\nimport { createMessageHash } from '../../util/routing';\nimport useCustomBackground from '../../hooks/useCustomBackground';\nimport useWindowSize from '../../hooks/useWindowSize';\nimport usePrevDuringAnimation from '../../hooks/usePrevDuringAnimation';\nimport useLang from '../../hooks/useLang';\nimport useHistoryBack from '../../hooks/useHistoryBack';\nimport usePrevious from '../../hooks/usePrevious';\nimport useForceUpdate from '../../hooks/useForceUpdate';\nimport useOnChange from '../../hooks/useOnChange';\nimport calculateMiddleFooterTransforms from './helpers/calculateMiddleFooterTransforms';\n\nimport Transition from '../ui/Transition';\nimport MiddleHeader from './MiddleHeader';\nimport MessageList from './MessageList';\nimport ScrollDownButton from './ScrollDownButton';\nimport Composer from './composer/Composer';\nimport Button from '../ui/Button';\nimport MobileSearch from './MobileSearch.async';\nimport MessageSelectToolbar from './MessageSelectToolbar.async';\nimport UnpinAllMessagesModal from '../common/UnpinAllMessagesModal.async';\nimport PaymentModal from '../payment/PaymentModal.async';\nimport ReceiptModal from '../payment/ReceiptModal.async';\nimport SeenByModal from '../common/SeenByModal.async';\nimport EmojiInteractionAnimation from './EmojiInteractionAnimation.async';\nimport ReactorListModal from './ReactorListModal.async';\n\nimport './MiddleColumn.scss';\n\ntype StateProps = {\n chatId?: string;\n threadId?: number;\n messageListType?: MessageListType;\n isPrivate?: boolean;\n isPinnedMessageList?: boolean;\n isScheduledMessageList?: boolean;\n canPost?: boolean;\n currentUserBannedRights?: ApiChatBannedRights;\n defaultBannedRights?: ApiChatBannedRights;\n hasPinnedOrAudioPlayer?: boolean;\n pinnedMessagesCount?: number;\n theme: ThemeKey;\n customBackground?: string;\n backgroundColor?: string;\n patternColor?: string;\n isLeftColumnShown?: boolean;\n isRightColumnShown?: boolean;\n isBackgroundBlurred?: boolean;\n isMobileSearchActive?: boolean;\n isSelectModeActive?: boolean;\n isPaymentModalOpen?: boolean;\n isReceiptModalOpen?: boolean;\n isSeenByModalOpen: boolean;\n isReactorListModalOpen: boolean;\n animationLevel?: number;\n shouldSkipHistoryAnimations?: boolean;\n currentTransitionKey: number;\n messageLists?: GlobalMessageList[];\n isChannel?: boolean;\n areChatSettingsLoaded?: boolean;\n canSubscribe?: boolean;\n canStartBot?: boolean;\n canRestartBot?: boolean;\n activeEmojiInteractions?: ActiveEmojiInteraction[];\n lastSyncTime?: number;\n};\n\nconst CLOSE_ANIMATION_DURATION = IS_SINGLE_COLUMN_LAYOUT ? 450 + ANIMATION_END_DELAY : undefined;\n\nfunction isImage(item: DataTransferItem) {\n return item.kind === 'file' && item.type && SUPPORTED_IMAGE_CONTENT_TYPES.has(item.type);\n}\n\nconst MiddleColumn: FC = ({\n chatId,\n threadId,\n messageListType,\n isPrivate,\n isPinnedMessageList,\n messageLists,\n canPost,\n currentUserBannedRights,\n defaultBannedRights,\n hasPinnedOrAudioPlayer,\n pinnedMessagesCount,\n customBackground,\n theme,\n backgroundColor,\n patternColor,\n isLeftColumnShown,\n isRightColumnShown,\n isBackgroundBlurred,\n isMobileSearchActive,\n isSelectModeActive,\n isPaymentModalOpen,\n isReceiptModalOpen,\n isSeenByModalOpen,\n isReactorListModalOpen,\n animationLevel,\n shouldSkipHistoryAnimations,\n currentTransitionKey,\n isChannel,\n areChatSettingsLoaded,\n canSubscribe,\n canStartBot,\n canRestartBot,\n activeEmojiInteractions,\n lastSyncTime,\n}) => {\n const {\n openChat,\n unpinAllMessages,\n loadUser,\n loadChatSettings,\n closeLocalTextSearch,\n exitMessageSelectMode,\n closePaymentModal,\n clearReceipt,\n joinChannel,\n sendBotCommand,\n restartBot,\n } = getActions();\n\n const { width: windowWidth } = useWindowSize();\n\n const lang = useLang();\n const [dropAreaState, setDropAreaState] = useState(DropAreaState.None);\n const [isFabShown, setIsFabShown] = useState();\n const [isNotchShown, setIsNotchShown] = useState();\n const [isUnpinModalOpen, setIsUnpinModalOpen] = useState(false);\n\n const hasTools = hasPinnedOrAudioPlayer && (\n windowWidth < MOBILE_SCREEN_MAX_WIDTH\n || (\n isRightColumnShown && windowWidth > MIN_SCREEN_WIDTH_FOR_STATIC_RIGHT_COLUMN\n && windowWidth < SAFE_SCREEN_WIDTH_FOR_STATIC_RIGHT_COLUMN\n ) || (\n windowWidth >= MIN_SCREEN_WIDTH_FOR_STATIC_LEFT_COLUMN\n && windowWidth < SAFE_SCREEN_WIDTH_FOR_CHAT_INFO\n )\n );\n\n const renderingChatId = usePrevDuringAnimation(chatId, CLOSE_ANIMATION_DURATION);\n const renderingThreadId = usePrevDuringAnimation(threadId, CLOSE_ANIMATION_DURATION);\n const renderingMessageListType = usePrevDuringAnimation(messageListType, CLOSE_ANIMATION_DURATION);\n const renderingCanSubscribe = usePrevDuringAnimation(canSubscribe, CLOSE_ANIMATION_DURATION);\n const renderingCanStartBot = usePrevDuringAnimation(canStartBot, CLOSE_ANIMATION_DURATION);\n const renderingCanRestartBot = usePrevDuringAnimation(canRestartBot, CLOSE_ANIMATION_DURATION);\n const renderingCanPost = usePrevDuringAnimation(canPost, CLOSE_ANIMATION_DURATION)\n && !renderingCanRestartBot && !renderingCanStartBot && !renderingCanSubscribe;\n const renderingHasTools = usePrevDuringAnimation(hasTools, CLOSE_ANIMATION_DURATION);\n const renderingIsFabShown = usePrevDuringAnimation(isFabShown, CLOSE_ANIMATION_DURATION);\n const renderingIsChannel = usePrevDuringAnimation(isChannel, CLOSE_ANIMATION_DURATION);\n\n const prevTransitionKey = usePrevious(currentTransitionKey);\n\n const cleanupExceptionKey = (\n prevTransitionKey !== undefined && prevTransitionKey < currentTransitionKey ? prevTransitionKey : undefined\n );\n\n const { isReady, handleOpenEnd, handleSlideStop } = useIsReady(\n !shouldSkipHistoryAnimations && animationLevel !== ANIMATION_LEVEL_MIN,\n currentTransitionKey,\n prevTransitionKey,\n chatId,\n );\n\n useEffect(() => {\n return chatId\n ? captureEscKeyListener(() => {\n openChat({ id: undefined });\n })\n : undefined;\n }, [chatId, openChat]);\n\n useOnChange(() => {\n setDropAreaState(DropAreaState.None);\n setIsFabShown(undefined);\n setIsNotchShown(undefined);\n }, [chatId]);\n\n // Fix for mobile virtual keyboard\n useEffect(() => {\n const { visualViewport } = window as any;\n if (!visualViewport) {\n return undefined;\n }\n\n const handleResize = () => {\n if (window.visualViewport.height !== document.documentElement.clientHeight) {\n document.body.classList.add('keyboard-visible');\n } else {\n document.body.classList.remove('keyboard-visible');\n }\n };\n\n visualViewport.addEventListener('resize', handleResize);\n\n return () => {\n visualViewport.removeEventListener('resize', handleResize);\n };\n }, []);\n\n useEffect(() => {\n if (isPrivate) {\n loadUser({ userId: chatId });\n }\n }, [chatId, isPrivate, loadUser]);\n\n useEffect(() => {\n if (!areChatSettingsLoaded && lastSyncTime) {\n loadChatSettings({ chatId });\n }\n }, [chatId, isPrivate, areChatSettingsLoaded, lastSyncTime, loadChatSettings]);\n\n const handleDragEnter = useCallback((e: React.DragEvent) => {\n if (IS_TOUCH_ENV) {\n return;\n }\n\n const { items } = e.dataTransfer || {};\n const shouldDrawQuick = items && items.length > 0 && Array.from(items)\n // Filter unnecessary element for drag and drop images in Firefox (https://github.com/Ajaxy/telegram-tt/issues/49)\n // https://developer.mozilla.org/en-US/docs/Web/API/HTML_Drag_and_Drop_API/Recommended_drag_types#image\n .filter((item) => item.type !== 'text/uri-list')\n // As of September 2021, native clients suggest \"send quick, but compressed\" only for images\n .every(isImage);\n\n setDropAreaState(shouldDrawQuick ? DropAreaState.QuickFile : DropAreaState.Document);\n }, []);\n\n const handleHideDropArea = useCallback(() => {\n setDropAreaState(DropAreaState.None);\n }, []);\n\n const handleOpenUnpinModal = useCallback(() => {\n setIsUnpinModalOpen(true);\n }, []);\n\n const closeUnpinModal = useCallback(() => {\n setIsUnpinModalOpen(false);\n }, []);\n\n const handleUnpinAllMessages = useCallback(() => {\n unpinAllMessages({ chatId });\n closeUnpinModal();\n openChat({ id: chatId });\n }, [unpinAllMessages, openChat, closeUnpinModal, chatId]);\n\n const handleTabletFocus = useCallback(() => {\n openChat({ id: chatId });\n }, [openChat, chatId]);\n\n const handleSubscribeClick = useCallback(() => {\n joinChannel({ chatId });\n }, [joinChannel, chatId]);\n\n const handleStartBot = useCallback(() => {\n sendBotCommand({ command: '/start' });\n }, [sendBotCommand]);\n\n const handleRestartBot = useCallback(() => {\n restartBot({ chatId });\n }, [chatId, restartBot]);\n\n const customBackgroundValue = useCustomBackground(theme, customBackground);\n\n const className = buildClassName(\n renderingHasTools && 'has-header-tools',\n customBackground && 'custom-bg-image',\n backgroundColor && 'custom-bg-color',\n customBackground && isBackgroundBlurred && 'blurred',\n MASK_IMAGE_DISABLED ? 'mask-image-disabled' : 'mask-image-enabled',\n );\n\n const messagingDisabledClassName = buildClassName(\n 'messaging-disabled',\n !isSelectModeActive && 'shown',\n );\n\n const messageSendingRestrictionReason = getMessageSendingRestrictionReason(\n lang, currentUserBannedRights, defaultBannedRights,\n );\n\n // CSS Variables calculation doesn't work properly with transforms, so we calculate transform values in JS\n const {\n composerHiddenScale, toolbarHiddenScale,\n composerTranslateX, toolbarTranslateX,\n unpinHiddenScale, toolbarForUnpinHiddenScale,\n } = useMemo(\n () => calculateMiddleFooterTransforms(windowWidth, renderingCanPost),\n [renderingCanPost, windowWidth],\n );\n\n const footerClassName = buildClassName(\n 'middle-column-footer',\n !renderingCanPost && 'no-composer',\n renderingCanPost && isNotchShown && !isSelectModeActive && 'with-notch',\n );\n\n const closeChat = () => {\n openChat({ id: undefined }, { forceSyncOnIOs: true });\n };\n\n useHistoryBack(\n renderingChatId && renderingThreadId,\n closeChat,\n undefined,\n undefined,\n undefined,\n messageLists?.map(createMessageHash) || [],\n );\n\n useHistoryBack(isMobileSearchActive, closeLocalTextSearch);\n useHistoryBack(isSelectModeActive, exitMessageSelectMode);\n\n const isMessagingDisabled = Boolean(\n !isPinnedMessageList && !renderingCanPost && !renderingCanRestartBot && !renderingCanStartBot\n && !renderingCanSubscribe && messageSendingRestrictionReason,\n );\n const withMessageListBottomShift = Boolean(\n renderingCanRestartBot || renderingCanSubscribe || renderingCanStartBot || isPinnedMessageList,\n );\n const withExtraShift = Boolean(isMessagingDisabled || isSelectModeActive || isPinnedMessageList);\n\n return (\n \n \n
\n {renderingChatId && renderingThreadId && (\n <>\n
\n \n \n \n
\n {renderingCanPost && (\n \n )}\n {isPinnedMessageList && (\n
\n \n \n {lang('Chat.Pinned.UnpinAll', pinnedMessagesCount, 'i')}\n \n
\n )}\n {isMessagingDisabled && (\n
\n
\n \n {messageSendingRestrictionReason}\n \n
\n
\n )}\n {IS_SINGLE_COLUMN_LAYOUT && renderingCanSubscribe && (\n
\n \n {lang(renderingIsChannel ? 'ProfileJoinChannel' : 'ProfileJoinGroup')}\n \n
\n )}\n {IS_SINGLE_COLUMN_LAYOUT && renderingCanStartBot && (\n
\n \n {lang('BotStart')}\n \n
\n )}\n {IS_SINGLE_COLUMN_LAYOUT && renderingCanRestartBot && (\n
\n \n {lang('BotRestart')}\n \n
\n )}\n \n \n \n \n \n
\n \n\n \n
\n {IS_SINGLE_COLUMN_LAYOUT && }\n \n )}\n {chatId && (\n \n )}\n
\n {activeEmojiInteractions?.map((activeEmojiInteraction, i) => (\n \n ))}\n
\n
\n );\n};\n\nexport default memo(withGlobal(\n (global): StateProps => {\n const theme = selectTheme(global);\n const {\n isBlurred: isBackgroundBlurred, background: customBackground, backgroundColor, patternColor,\n } = global.settings.themes[theme] || {};\n\n const { messageLists } = global.messages;\n const currentMessageList = selectCurrentMessageList(global);\n const {\n isLeftColumnShown, chats: { listIds }, activeEmojiInteractions, lastSyncTime,\n } = global;\n\n const state: StateProps = {\n theme,\n customBackground,\n backgroundColor,\n patternColor,\n isLeftColumnShown,\n isRightColumnShown: selectIsRightColumnShown(global),\n isBackgroundBlurred,\n isMobileSearchActive: Boolean(IS_SINGLE_COLUMN_LAYOUT && selectCurrentTextSearch(global)),\n isSelectModeActive: selectIsInSelectMode(global),\n isPaymentModalOpen: global.payment.isPaymentModalOpen,\n isReceiptModalOpen: Boolean(global.payment.receipt),\n isSeenByModalOpen: Boolean(global.seenByModal),\n isReactorListModalOpen: Boolean(global.reactorModal),\n animationLevel: global.settings.byKey.animationLevel,\n currentTransitionKey: Math.max(0, global.messages.messageLists.length - 1),\n activeEmojiInteractions,\n lastSyncTime,\n };\n\n if (!currentMessageList || !listIds.active) {\n return state;\n }\n\n const { chatId, threadId, type: messageListType } = currentMessageList;\n const isPrivate = isUserId(chatId);\n const chat = selectChat(global, chatId);\n const bot = selectChatBot(global, chatId);\n const pinnedIds = selectPinnedIds(global, chatId);\n const { chatId: audioChatId, messageId: audioMessageId } = global.audioPlayer;\n\n const canPost = chat && getCanPostInChat(chat, threadId);\n const isBotNotStarted = selectIsChatBotNotStarted(global, chatId);\n const isPinnedMessageList = messageListType === 'pinned';\n const isScheduledMessageList = messageListType === 'scheduled';\n const isMainThread = messageListType === 'thread' && threadId === MAIN_THREAD_ID;\n const isChannel = Boolean(chat && isChatChannel(chat));\n const canSubscribe = Boolean(\n chat && isMainThread && (isChannel || isChatSuperGroup(chat)) && chat.isNotJoined,\n );\n const canRestartBot = Boolean(bot && selectIsUserBlocked(global, bot.id));\n const canStartBot = !canRestartBot && isBotNotStarted;\n\n return {\n ...state,\n chatId,\n threadId,\n messageListType,\n isPrivate,\n areChatSettingsLoaded: Boolean(chat?.settings),\n canPost: !isPinnedMessageList && (!chat || canPost) && !isBotNotStarted,\n isPinnedMessageList,\n isScheduledMessageList,\n currentUserBannedRights: chat?.currentUserBannedRights,\n defaultBannedRights: chat?.defaultBannedRights,\n hasPinnedOrAudioPlayer: (\n threadId !== MAIN_THREAD_ID\n || Boolean(!isPinnedMessageList && pinnedIds?.length)\n || Boolean(audioChatId && audioMessageId)\n ),\n pinnedMessagesCount: pinnedIds ? pinnedIds.length : 0,\n shouldSkipHistoryAnimations: global.shouldSkipHistoryAnimations,\n messageLists,\n isChannel,\n canSubscribe,\n canStartBot,\n canRestartBot,\n };\n },\n)(MiddleColumn));\n\nfunction useIsReady(\n withAnimations?: boolean,\n currentTransitionKey?: number,\n prevTransitionKey?: number,\n chatId?: string,\n) {\n const [isReady, setIsReady] = useState(!IS_SINGLE_COLUMN_LAYOUT);\n const forceUpdate = useForceUpdate();\n\n const willSwitchMessageList = prevTransitionKey !== undefined && prevTransitionKey !== currentTransitionKey;\n if (willSwitchMessageList) {\n if (withAnimations) {\n setIsReady(false);\n } else {\n forceUpdate();\n }\n }\n\n useOnChange(() => {\n if (!withAnimations) {\n setIsReady(true);\n }\n }, [withAnimations]);\n\n function handleOpenEnd(e: React.TransitionEvent) {\n if (e.propertyName === 'transform' && e.target === e.currentTarget) {\n setIsReady(Boolean(chatId));\n }\n }\n\n function handleSlideStop() {\n setIsReady(true);\n }\n\n return {\n isReady: isReady && !willSwitchMessageList,\n handleOpenEnd: withAnimations ? handleOpenEnd : undefined,\n handleSlideStop: withAnimations ? handleSlideStop : undefined,\n };\n}\n","import React, {\n FC, memo, useCallback, useEffect, useRef, useState,\n} from '../../lib/teact/teact';\nimport { getActions, withGlobal } from '../../global';\n\nimport { ManagementScreens, ProfileState } from '../../types';\nimport { ApiExportedInvite } from '../../api/types';\n\nimport { IS_SINGLE_COLUMN_LAYOUT } from '../../util/environment';\nimport { debounce } from '../../util/schedulers';\nimport buildClassName from '../../util/buildClassName';\nimport {\n selectChat,\n selectCurrentGifSearch,\n selectCurrentStickerSearch,\n selectCurrentTextSearch,\n selectIsChatWithSelf,\n selectUser,\n} from '../../global/selectors';\nimport {\n getCanAddContact, isChatAdmin, isChatChannel, isUserId,\n} from '../../global/helpers';\nimport useCurrentOrPrev from '../../hooks/useCurrentOrPrev';\nimport useLang from '../../hooks/useLang';\nimport useFlag from '../../hooks/useFlag';\nimport { getDayStartAt } from '../../util/dateFormat';\n\nimport SearchInput from '../ui/SearchInput';\nimport Button from '../ui/Button';\nimport Transition from '../ui/Transition';\nimport ConfirmDialog from '../ui/ConfirmDialog';\n\nimport './RightHeader.scss';\n\ntype OwnProps = {\n chatId?: string;\n isColumnOpen?: boolean;\n isProfile?: boolean;\n isSearch?: boolean;\n isManagement?: boolean;\n isStatistics?: boolean;\n isStickerSearch?: boolean;\n isGifSearch?: boolean;\n isPollResults?: boolean;\n isAddingChatMembers?: boolean;\n shouldSkipAnimation?: boolean;\n profileState?: ProfileState;\n managementScreen?: ManagementScreens;\n onClose: () => void;\n onScreenSelect: (screen: ManagementScreens) => void;\n};\n\ntype StateProps = {\n canAddContact?: boolean;\n canManage?: boolean;\n canViewStatistics?: boolean;\n isChannel?: boolean;\n userId?: string;\n messageSearchQuery?: string;\n stickerSearchQuery?: string;\n gifSearchQuery?: string;\n isEditingInvite?: boolean;\n currentInviteInfo?: ApiExportedInvite;\n};\n\nconst COLUMN_CLOSE_DELAY_MS = 300;\nconst runDebouncedForSearch = debounce((cb) => cb(), 200, false);\n\nenum HeaderContent {\n Profile,\n MemberList,\n SharedMedia,\n Search,\n Statistics,\n Management,\n ManageInitial,\n ManageChannelSubscribers,\n ManageChatAdministrators,\n ManageChatPrivacyType,\n ManageDiscussion,\n ManageGroupPermissions,\n ManageGroupRemovedUsers,\n ManageChannelRemovedUsers,\n ManageGroupUserPermissionsCreate,\n ManageGroupUserPermissions,\n ManageGroupRecentActions,\n ManageGroupAdminRights,\n ManageGroupNewAdminRights,\n ManageGroupMembers,\n ManageGroupAddAdmins,\n StickerSearch,\n GifSearch,\n PollResults,\n AddingMembers,\n ManageInvites,\n ManageEditInvite,\n ManageReactions,\n ManageInviteInfo,\n ManageJoinRequests,\n}\n\nconst RightHeader: FC = ({\n chatId,\n isColumnOpen,\n isProfile,\n isSearch,\n isManagement,\n isStatistics,\n isStickerSearch,\n isGifSearch,\n isPollResults,\n isAddingChatMembers,\n profileState,\n managementScreen,\n canAddContact,\n userId,\n canManage,\n isChannel,\n onClose,\n onScreenSelect,\n messageSearchQuery,\n stickerSearchQuery,\n gifSearchQuery,\n shouldSkipAnimation,\n isEditingInvite,\n canViewStatistics,\n currentInviteInfo,\n}) => {\n const {\n setLocalTextSearchQuery,\n setStickerSearchQuery,\n setGifSearchQuery,\n searchTextMessagesLocal,\n toggleManagement,\n openHistoryCalendar,\n openAddContactDialog,\n toggleStatistics,\n setEditingExportedInvite,\n deleteExportedChatInvite,\n } = getActions();\n\n // eslint-disable-next-line no-null/no-null\n const backButtonRef = useRef(null);\n const [isDeleteDialogOpen, openDeleteDialog, closeDeleteDialog] = useFlag();\n\n const handleEditInviteClick = useCallback(() => {\n setEditingExportedInvite({ chatId: chatId!, invite: currentInviteInfo! });\n onScreenSelect(ManagementScreens.EditInvite);\n }, [chatId, currentInviteInfo, onScreenSelect, setEditingExportedInvite]);\n\n const handleDeleteInviteClick = useCallback(() => {\n deleteExportedChatInvite({ chatId: chatId!, link: currentInviteInfo!.link });\n onScreenSelect(ManagementScreens.Invites);\n closeDeleteDialog();\n }, [chatId, closeDeleteDialog, currentInviteInfo, deleteExportedChatInvite, onScreenSelect]);\n\n const handleMessageSearchQueryChange = useCallback((query: string) => {\n setLocalTextSearchQuery({ query });\n\n if (query.length) {\n runDebouncedForSearch(searchTextMessagesLocal);\n }\n }, [searchTextMessagesLocal, setLocalTextSearchQuery]);\n\n const handleStickerSearchQueryChange = useCallback((query: string) => {\n setStickerSearchQuery({ query });\n }, [setStickerSearchQuery]);\n\n const handleGifSearchQueryChange = useCallback((query: string) => {\n setGifSearchQuery({ query });\n }, [setGifSearchQuery]);\n\n const handleAddContact = useCallback(() => {\n openAddContactDialog({ userId });\n }, [openAddContactDialog, userId]);\n\n const [shouldSkipTransition, setShouldSkipTransition] = useState(!isColumnOpen);\n\n useEffect(() => {\n setTimeout(() => {\n setShouldSkipTransition(!isColumnOpen);\n }, COLUMN_CLOSE_DELAY_MS);\n }, [isColumnOpen]);\n\n const lang = useLang();\n const contentKey = isProfile ? (\n profileState === ProfileState.Profile ? (\n HeaderContent.Profile\n ) : profileState === ProfileState.SharedMedia ? (\n HeaderContent.SharedMedia\n ) : profileState === ProfileState.MemberList ? (\n HeaderContent.MemberList\n ) : -1 // Never reached\n ) : isSearch ? (\n HeaderContent.Search\n ) : isPollResults ? (\n HeaderContent.PollResults\n ) : isStickerSearch ? (\n HeaderContent.StickerSearch\n ) : isGifSearch ? (\n HeaderContent.GifSearch\n ) : isAddingChatMembers ? (\n HeaderContent.AddingMembers\n ) : isManagement ? (\n managementScreen === ManagementScreens.Initial ? (\n HeaderContent.ManageInitial\n ) : managementScreen === ManagementScreens.ChatPrivacyType ? (\n HeaderContent.ManageChatPrivacyType\n ) : managementScreen === ManagementScreens.Discussion ? (\n HeaderContent.ManageDiscussion\n ) : managementScreen === ManagementScreens.ChannelSubscribers ? (\n HeaderContent.ManageChannelSubscribers\n ) : managementScreen === ManagementScreens.GroupPermissions ? (\n HeaderContent.ManageGroupPermissions\n ) : managementScreen === ManagementScreens.ChatAdministrators ? (\n HeaderContent.ManageChatAdministrators\n ) : managementScreen === ManagementScreens.GroupRemovedUsers ? (\n HeaderContent.ManageGroupRemovedUsers\n ) : managementScreen === ManagementScreens.ChannelRemovedUsers ? (\n HeaderContent.ManageChannelRemovedUsers\n ) : managementScreen === ManagementScreens.GroupUserPermissionsCreate ? (\n HeaderContent.ManageGroupUserPermissionsCreate\n ) : managementScreen === ManagementScreens.GroupUserPermissions ? (\n HeaderContent.ManageGroupUserPermissions\n ) : managementScreen === ManagementScreens.GroupRecentActions ? (\n HeaderContent.ManageGroupRecentActions\n ) : managementScreen === ManagementScreens.ChatAdminRights ? (\n HeaderContent.ManageGroupAdminRights\n ) : managementScreen === ManagementScreens.ChatNewAdminRights ? (\n HeaderContent.ManageGroupNewAdminRights\n ) : managementScreen === ManagementScreens.GroupMembers ? (\n HeaderContent.ManageGroupMembers\n ) : managementScreen === ManagementScreens.Invites ? (\n HeaderContent.ManageInvites\n ) : managementScreen === ManagementScreens.EditInvite ? (\n HeaderContent.ManageEditInvite\n ) : managementScreen === ManagementScreens.GroupAddAdmins ? (\n HeaderContent.ManageGroupAddAdmins\n ) : managementScreen === ManagementScreens.Reactions ? (\n HeaderContent.ManageReactions\n ) : managementScreen === ManagementScreens.InviteInfo ? (\n HeaderContent.ManageInviteInfo\n ) : managementScreen === ManagementScreens.JoinRequests ? (\n HeaderContent.ManageJoinRequests\n ) : undefined // Never reached\n ) : isStatistics ? (\n HeaderContent.Statistics\n ) : undefined; // When column is closed\n\n const renderingContentKey = useCurrentOrPrev(contentKey, true) ?? -1;\n\n function renderHeaderContent() {\n if (renderingContentKey === -1) {\n return undefined;\n }\n\n switch (renderingContentKey) {\n case HeaderContent.PollResults:\n return

{lang('PollResults')}

;\n case HeaderContent.Search:\n return (\n <>\n \n openHistoryCalendar({ selectedAt: getDayStartAt(Date.now()) })}\n ariaLabel=\"Search messages by date\"\n >\n \n \n \n );\n case HeaderContent.AddingMembers:\n return

{lang(isChannel ? 'ChannelAddSubscribers' : 'GroupAddMembers')}

;\n case HeaderContent.ManageInitial:\n return

{lang('Edit')}

;\n case HeaderContent.ManageChatPrivacyType:\n return

{lang(isChannel ? 'ChannelTypeHeader' : 'GroupTypeHeader')}

;\n case HeaderContent.ManageDiscussion:\n return

{lang('Discussion')}

;\n case HeaderContent.ManageChatAdministrators:\n return

{lang('ChannelAdministrators')}

;\n case HeaderContent.ManageGroupRecentActions:\n return

{lang('Group.Info.AdminLog')}

;\n case HeaderContent.ManageGroupAdminRights:\n return

{lang('EditAdminRights')}

;\n case HeaderContent.ManageGroupNewAdminRights:\n return

{lang('SetAsAdmin')}

;\n case HeaderContent.ManageGroupPermissions:\n return

{lang('ChannelPermissions')}

;\n case HeaderContent.ManageGroupRemovedUsers:\n return

{lang('BlockedUsers')}

;\n case HeaderContent.ManageChannelRemovedUsers:\n return

{lang('ChannelBlockedUsers')}

;\n case HeaderContent.ManageGroupUserPermissionsCreate:\n return

{lang('ChannelAddException')}

;\n case HeaderContent.ManageGroupUserPermissions:\n return

{lang('UserRestrictions')}

;\n case HeaderContent.ManageInvites:\n return

{lang('lng_group_invite_title')}

;\n case HeaderContent.ManageEditInvite:\n return

{isEditingInvite ? lang('EditLink') : lang('NewLink')}

;\n case HeaderContent.ManageInviteInfo:\n return (\n <>\n

{lang('InviteLink')}

\n
\n {currentInviteInfo && !currentInviteInfo.isRevoked && (\n \n \n \n )}\n {currentInviteInfo && currentInviteInfo.isRevoked && (\n <>\n \n \n \n \n \n )}\n
\n \n );\n case HeaderContent.ManageJoinRequests:\n return

{isChannel ? lang('SubscribeRequests') : lang('MemberRequests')}

;\n case HeaderContent.ManageGroupAddAdmins:\n return

{lang('Channel.Management.AddModerator')}

;\n case HeaderContent.StickerSearch:\n return (\n \n );\n case HeaderContent.GifSearch:\n return (\n \n );\n case HeaderContent.Statistics:\n return

{lang('Statistics')}

;\n case HeaderContent.SharedMedia:\n return

{lang('SharedMedia')}

;\n case HeaderContent.ManageChannelSubscribers:\n return

{lang('ChannelSubscribers')}

;\n case HeaderContent.MemberList:\n case HeaderContent.ManageGroupMembers:\n return

{lang('GroupMembers')}

;\n case HeaderContent.ManageReactions:\n return

{lang('Reactions')}

;\n default:\n return (\n <>\n

Profile

\n
\n {canAddContact && (\n \n \n \n )}\n {canManage && (\n \n \n \n )}\n {canViewStatistics && (\n \n \n \n )}\n
\n \n );\n }\n }\n\n const isBackButton = (\n IS_SINGLE_COLUMN_LAYOUT\n || contentKey === HeaderContent.SharedMedia\n || contentKey === HeaderContent.MemberList\n || contentKey === HeaderContent.AddingMembers\n || isManagement\n );\n\n const buttonClassName = buildClassName(\n 'animated-close-icon',\n isBackButton && 'state-back',\n (shouldSkipTransition || shouldSkipAnimation) && 'no-transition',\n );\n\n return (\n
\n \n
\n \n \n {renderHeaderContent()}\n \n
\n );\n};\n\nexport default memo(withGlobal(\n (global, { chatId, isProfile, isManagement }): StateProps => {\n const { query: messageSearchQuery } = selectCurrentTextSearch(global) || {};\n const { query: stickerSearchQuery } = selectCurrentStickerSearch(global) || {};\n const { query: gifSearchQuery } = selectCurrentGifSearch(global) || {};\n const chat = chatId ? selectChat(global, chatId) : undefined;\n const isChannel = chat && isChatChannel(chat);\n const user = isProfile && chatId && isUserId(chatId) ? selectUser(global, chatId) : undefined;\n\n const canAddContact = user && getCanAddContact(user);\n const canManage = Boolean(\n !isManagement\n && isProfile\n && !canAddContact\n && chat\n && !selectIsChatWithSelf(global, chat.id)\n // chat.isCreator is for Basic Groups\n && (isUserId(chat.id) || ((isChatAdmin(chat) || chat.isCreator) && !chat.isNotJoined)),\n );\n const isEditingInvite = Boolean(chatId && global.management.byChatId[chatId]?.editingInvite);\n const canViewStatistics = chat?.fullInfo?.canViewStatistics;\n const currentInviteInfo = chatId ? global.management.byChatId[chatId]?.inviteInfo?.invite : undefined;\n\n return {\n canManage,\n canAddContact,\n canViewStatistics,\n isChannel,\n userId: user?.id,\n messageSearchQuery,\n stickerSearchQuery,\n gifSearchQuery,\n isEditingInvite,\n currentInviteInfo,\n };\n },\n)(RightHeader));\n","import { useMemo, useRef } from '../../../lib/teact/teact';\n\nimport {\n ApiChat, ApiChatMember, ApiMessage, ApiUser, ApiUserStatus,\n} from '../../../api/types';\nimport { ProfileTabType, SharedMediaType } from '../../../types';\n\nimport { MEMBERS_SLICE, MESSAGE_SEARCH_SLICE, SHARED_MEDIA_SLICE } from '../../../config';\nimport { getMessageContentIds, sortChatIds, sortUserIds } from '../../../global/helpers';\nimport useOnChange from '../../../hooks/useOnChange';\nimport useInfiniteScroll from '../../../hooks/useInfiniteScroll';\n\nexport default function useProfileViewportIds(\n isRightColumnShown: boolean,\n loadMoreMembers: AnyToVoidFunction,\n loadCommonChats: AnyToVoidFunction,\n searchMessages: AnyToVoidFunction,\n tabType: ProfileTabType,\n mediaSearchType?: SharedMediaType,\n groupChatMembers?: ApiChatMember[],\n commonChatIds?: string[],\n usersById?: Record,\n userStatusesById?: Record,\n chatsById?: Record,\n chatMessages?: Record,\n foundIds?: number[],\n chatId?: string,\n lastSyncTime?: number,\n serverTimeOffset = 0,\n) {\n const resultType = tabType === 'members' || !mediaSearchType ? tabType : mediaSearchType;\n\n const memberIds = useMemo(() => {\n if (!groupChatMembers || !usersById || !userStatusesById) {\n return undefined;\n }\n\n return sortUserIds(\n groupChatMembers.map(({ userId }) => userId),\n usersById,\n userStatusesById,\n undefined,\n serverTimeOffset,\n );\n }, [groupChatMembers, serverTimeOffset, usersById, userStatusesById]);\n\n const chatIds = useMemo(() => {\n if (!commonChatIds || !chatsById) {\n return undefined;\n }\n\n return sortChatIds(commonChatIds, chatsById, true);\n }, [chatsById, commonChatIds]);\n\n const [memberViewportIds, getMoreMembers, noProfileInfoForMembers] = useInfiniteScrollForLoadableItems(\n resultType, loadMoreMembers, lastSyncTime, memberIds,\n );\n\n const [mediaViewportIds, getMoreMedia, noProfileInfoForMedia] = useInfiniteScrollForSharedMedia(\n 'media', resultType, searchMessages, lastSyncTime, chatMessages, foundIds,\n );\n\n const [documentViewportIds, getMoreDocuments, noProfileInfoForDocuments] = useInfiniteScrollForSharedMedia(\n 'documents', resultType, searchMessages, lastSyncTime, chatMessages, foundIds,\n );\n\n const [linkViewportIds, getMoreLinks, noProfileInfoForLinks] = useInfiniteScrollForSharedMedia(\n 'links', resultType, searchMessages, lastSyncTime, chatMessages, foundIds,\n );\n\n const [audioViewportIds, getMoreAudio, noProfileInfoForAudio] = useInfiniteScrollForSharedMedia(\n 'audio', resultType, searchMessages, lastSyncTime, chatMessages, foundIds,\n );\n\n const [voiceViewportIds, getMoreVoices, noProfileInfoForVoices] = useInfiniteScrollForSharedMedia(\n 'voice', resultType, searchMessages, lastSyncTime, chatMessages, foundIds,\n );\n\n const [commonChatViewportIds, getMoreCommonChats, noProfileInfoForCommonChats] = useInfiniteScrollForLoadableItems(\n resultType, loadCommonChats, lastSyncTime, chatIds,\n );\n\n let viewportIds: number[] | string[] | undefined;\n let getMore: AnyToVoidFunction | undefined;\n let noProfileInfo = false;\n\n switch (resultType) {\n case 'members':\n viewportIds = memberViewportIds;\n getMore = getMoreMembers;\n noProfileInfo = noProfileInfoForMembers;\n break;\n case 'commonChats':\n viewportIds = commonChatViewportIds;\n getMore = getMoreCommonChats;\n noProfileInfo = noProfileInfoForCommonChats;\n break;\n case 'media':\n viewportIds = mediaViewportIds;\n getMore = getMoreMedia;\n noProfileInfo = noProfileInfoForMedia;\n break;\n case 'documents':\n viewportIds = documentViewportIds;\n getMore = getMoreDocuments;\n noProfileInfo = noProfileInfoForDocuments;\n break;\n case 'links':\n viewportIds = linkViewportIds;\n getMore = getMoreLinks;\n noProfileInfo = noProfileInfoForLinks;\n break;\n case 'audio':\n viewportIds = audioViewportIds;\n getMore = getMoreAudio;\n noProfileInfo = noProfileInfoForAudio;\n break;\n case 'voice':\n viewportIds = voiceViewportIds;\n getMore = getMoreVoices;\n noProfileInfo = noProfileInfoForVoices;\n break;\n }\n\n return [resultType, viewportIds, getMore, noProfileInfo] as const;\n}\n\nfunction useInfiniteScrollForLoadableItems(\n currentResultType?: ProfileTabType,\n handleLoadMore?: AnyToVoidFunction,\n lastSyncTime?: number,\n itemIds?: string[],\n) {\n const [viewportIds, getMore] = useInfiniteScroll(\n lastSyncTime ? handleLoadMore : undefined,\n itemIds,\n undefined,\n MEMBERS_SLICE,\n );\n\n const isOnTop = !viewportIds || !itemIds || viewportIds[0] === itemIds[0];\n\n return [viewportIds, getMore, !isOnTop] as const;\n}\n\nfunction useInfiniteScrollForSharedMedia(\n forSharedMediaType: SharedMediaType,\n currentResultType?: ProfileTabType,\n handleLoadMore?: AnyToVoidFunction,\n lastSyncTime?: number,\n chatMessages?: Record,\n foundIds?: number[],\n) {\n const messageIdsRef = useRef();\n\n useOnChange(() => {\n if (currentResultType === forSharedMediaType && chatMessages && foundIds) {\n messageIdsRef.current = getMessageContentIds(\n chatMessages,\n foundIds,\n forSharedMediaType,\n );\n }\n }, [chatMessages, foundIds, currentResultType, forSharedMediaType]);\n\n const [viewportIds, getMore] = useInfiniteScroll(\n lastSyncTime ? handleLoadMore : undefined,\n messageIdsRef.current,\n undefined,\n forSharedMediaType === 'media' ? SHARED_MEDIA_SLICE : MESSAGE_SEARCH_SLICE,\n );\n\n const isOnTop = !viewportIds || !messageIdsRef.current || viewportIds[0] === messageIdsRef.current[0];\n\n return [viewportIds, getMore, !isOnTop] as const;\n}\n","import { useCallback, useEffect } from '../../../lib/teact/teact';\n\nimport { ProfileState } from '../../../types';\n\nimport fastSmoothScroll from '../../../util/fastSmoothScroll';\nimport { throttle } from '../../../util/schedulers';\nimport useEffectWithPrevDeps from '../../../hooks/useEffectWithPrevDeps';\n\nconst TRANSITION_DURATION = 300;\nconst PROGRAMMATIC_SCROLL_TIMEOUT_MS = 350;\n\nconst runThrottledForScroll = throttle((cb) => cb(), 250, false);\n\nlet isScrollingProgrammatically = false;\n\nexport default function useProfileState(\n containerRef: { current: HTMLDivElement | null },\n tabType: string,\n profileState: ProfileState,\n onProfileStateChange: (state: ProfileState) => void,\n) {\n // Scroll to tabs if needed\n useEffectWithPrevDeps(([prevTabType]) => {\n if (prevTabType && prevTabType !== tabType) {\n const container = containerRef.current!;\n const tabsEl = container.querySelector('.TabList')!;\n if (container.scrollTop < tabsEl.offsetTop) {\n onProfileStateChange(tabType === 'members' ? ProfileState.MemberList : ProfileState.SharedMedia);\n isScrollingProgrammatically = true;\n fastSmoothScroll(container, tabsEl, 'start', undefined, undefined, undefined, TRANSITION_DURATION);\n setTimeout(() => {\n isScrollingProgrammatically = false;\n }, PROGRAMMATIC_SCROLL_TIMEOUT_MS);\n }\n }\n }, [tabType, onProfileStateChange]);\n\n // Scroll to top\n useEffectWithPrevDeps(([prevProfileState]) => {\n if (profileState !== ProfileState.Profile || profileState === prevProfileState) {\n return;\n }\n\n const container = containerRef.current;\n if (!container) {\n return;\n }\n\n const tabListEl = container.querySelector('.TabList');\n if (!tabListEl || tabListEl.offsetTop > container.scrollTop) {\n return;\n }\n\n isScrollingProgrammatically = true;\n fastSmoothScroll(\n container,\n container.firstElementChild as HTMLElement,\n 'start',\n undefined,\n container.offsetHeight * 2,\n );\n\n setTimeout(() => {\n isScrollingProgrammatically = false;\n }, PROGRAMMATIC_SCROLL_TIMEOUT_MS);\n\n onProfileStateChange(profileState);\n }, [profileState]);\n\n const determineProfileState = useCallback(() => {\n const container = containerRef.current;\n if (!container) {\n return;\n }\n\n const tabListEl = container.querySelector('.TabList');\n if (!tabListEl) {\n return;\n }\n\n let state: ProfileState = ProfileState.Profile;\n if (container.scrollTop >= tabListEl.offsetTop) {\n state = tabType === 'members'\n ? ProfileState.MemberList\n : ProfileState.SharedMedia;\n }\n\n onProfileStateChange(state);\n }, [containerRef, onProfileStateChange, tabType]);\n\n // Determine profile state when switching tabs\n useEffect(() => {\n if (isScrollingProgrammatically) {\n return;\n }\n\n determineProfileState();\n }, [determineProfileState, tabType]);\n\n // Determine profile state when scrolling\n const handleScroll = useCallback(() => {\n if (isScrollingProgrammatically) {\n return;\n }\n\n runThrottledForScroll(determineProfileState);\n }, [determineProfileState]);\n\n return { handleScroll };\n}\n","import React, {\n FC, useCallback, useEffect, useMemo, useRef, useState, memo,\n} from '../../lib/teact/teact';\nimport { getActions, withGlobal } from '../../global';\n\nimport {\n MAIN_THREAD_ID,\n ApiMessage,\n ApiChat,\n ApiChatMember,\n ApiUser,\n ApiUserStatus,\n} from '../../api/types';\nimport {\n NewChatMembersProgress, ISettings, MediaViewerOrigin, ProfileState, ProfileTabType, SharedMediaType, AudioOrigin,\n} from '../../types';\n\nimport {\n MEMBERS_SLICE,\n PROFILE_SENSITIVE_AREA,\n SHARED_MEDIA_SLICE,\n SLIDE_TRANSITION_DURATION,\n} from '../../config';\nimport { IS_TOUCH_ENV } from '../../util/environment';\nimport {\n getHasAdminRight, isChatAdmin, isChatChannel, isChatGroup, isUserBot, isUserId,\n} from '../../global/helpers';\nimport {\n selectChatMessages,\n selectChat,\n selectCurrentMediaSearch,\n selectIsRightColumnShown,\n selectTheme,\n selectActiveDownloadIds,\n selectUser,\n} from '../../global/selectors';\nimport { captureEvents, SwipeDirection } from '../../util/captureEvents';\nimport { getSenderName } from '../left/search/helpers/getSenderName';\nimport useCacheBuster from '../../hooks/useCacheBuster';\nimport useProfileViewportIds from './hooks/useProfileViewportIds';\nimport useProfileState from './hooks/useProfileState';\nimport useTransitionFixes from './hooks/useTransitionFixes';\nimport useAsyncRendering from './hooks/useAsyncRendering';\nimport useLang from '../../hooks/useLang';\n\nimport Transition from '../ui/Transition';\nimport InfiniteScroll from '../ui/InfiniteScroll';\nimport TabList from '../ui/TabList';\nimport Spinner from '../ui/Spinner';\nimport ListItem from '../ui/ListItem';\nimport PrivateChatInfo from '../common/PrivateChatInfo';\nimport ProfileInfo from '../common/ProfileInfo';\nimport Document from '../common/Document';\nimport Audio from '../common/Audio';\nimport ChatExtra from '../common/ChatExtra';\nimport Media from '../common/Media';\nimport WebLink from '../common/WebLink';\nimport NothingFound from '../common/NothingFound';\nimport FloatingActionButton from '../ui/FloatingActionButton';\nimport DeleteMemberModal from './DeleteMemberModal';\nimport GroupChatInfo from '../common/GroupChatInfo';\n\nimport './Profile.scss';\nimport { useIntersectionObserver } from '../../hooks/useIntersectionObserver';\n\ntype OwnProps = {\n chatId: string;\n profileState: ProfileState;\n onProfileStateChange: (state: ProfileState) => void;\n};\n\ntype StateProps = {\n theme: ISettings['theme'];\n isChannel?: boolean;\n currentUserId?: string;\n resolvedUserId?: string;\n chatMessages?: Record;\n foundIds?: number[];\n mediaSearchType?: SharedMediaType;\n hasCommonChatsTab?: boolean;\n hasMembersTab?: boolean;\n areMembersHidden?: boolean;\n canAddMembers?: boolean;\n canDeleteMembers?: boolean;\n members?: ApiChatMember[];\n commonChatIds?: string[];\n chatsById: Record;\n usersById: Record;\n userStatusesById: Record;\n isRightColumnShown: boolean;\n isRestricted?: boolean;\n lastSyncTime?: number;\n serverTimeOffset: number;\n activeDownloadIds: number[];\n isChatProtected?: boolean;\n};\n\nconst TABS = [\n { type: 'media', title: 'SharedMediaTab2' },\n { type: 'documents', title: 'SharedFilesTab2' },\n { type: 'links', title: 'SharedLinksTab2' },\n { type: 'audio', title: 'SharedMusicTab2' },\n { type: 'voice', title: 'SharedVoiceTab2' },\n];\n\nconst HIDDEN_RENDER_DELAY = 1000;\nconst INTERSECTION_THROTTLE = 500;\n\nconst Profile: FC = ({\n chatId,\n profileState,\n onProfileStateChange,\n theme,\n isChannel,\n resolvedUserId,\n currentUserId,\n chatMessages,\n foundIds,\n mediaSearchType,\n hasCommonChatsTab,\n hasMembersTab,\n areMembersHidden,\n canAddMembers,\n canDeleteMembers,\n commonChatIds,\n members,\n usersById,\n userStatusesById,\n chatsById,\n isRightColumnShown,\n isRestricted,\n lastSyncTime,\n activeDownloadIds,\n serverTimeOffset,\n isChatProtected,\n}) => {\n const {\n setLocalMediaSearchType,\n loadMoreMembers,\n loadCommonChats,\n openChat,\n searchMediaMessagesLocal,\n openMediaViewer,\n openAudioPlayer,\n focusMessage,\n loadProfilePhotos,\n setNewChatMembersDialogState,\n } = getActions();\n\n // eslint-disable-next-line no-null/no-null\n const containerRef = useRef(null);\n // eslint-disable-next-line no-null/no-null\n const transitionRef = useRef(null);\n const lang = useLang();\n const [activeTab, setActiveTab] = useState(0);\n const [deletingUserId, setDeletingUserId] = useState();\n\n const tabs = useMemo(() => ([\n ...(hasMembersTab ? [{\n type: 'members', title: isChannel ? 'ChannelSubscribers' : 'GroupMembers',\n }] : []),\n ...TABS,\n ...(hasCommonChatsTab ? [{\n type: 'commonChats', title: 'SharedGroupsTab2',\n }] : []),\n ]), [hasCommonChatsTab, hasMembersTab, isChannel]);\n const tabType = tabs[activeTab].type as ProfileTabType;\n\n const [resultType, viewportIds, getMore, noProfileInfo] = useProfileViewportIds(\n isRightColumnShown,\n loadMoreMembers,\n loadCommonChats,\n searchMediaMessagesLocal,\n tabType,\n mediaSearchType,\n members,\n commonChatIds,\n usersById,\n userStatusesById,\n chatsById,\n chatMessages,\n foundIds,\n chatId,\n lastSyncTime,\n serverTimeOffset,\n );\n const activeKey = tabs.findIndex(({ type }) => type === resultType);\n\n const { handleScroll } = useProfileState(containerRef, tabType, profileState, onProfileStateChange);\n\n const { applyTransitionFix, releaseTransitionFix } = useTransitionFixes(containerRef);\n\n const [cacheBuster, resetCacheBuster] = useCacheBuster();\n\n const { observe: observeIntersectionForMedia } = useIntersectionObserver({\n rootRef: containerRef,\n throttleMs: INTERSECTION_THROTTLE,\n });\n\n const handleTransitionStop = useCallback(() => {\n releaseTransitionFix();\n resetCacheBuster();\n }, [releaseTransitionFix, resetCacheBuster]);\n\n const handleNewMemberDialogOpen = useCallback(() => {\n setNewChatMembersDialogState(NewChatMembersProgress.InProgress);\n }, [setNewChatMembersDialogState]);\n\n // Update search type when switching tabs\n useEffect(() => {\n setLocalMediaSearchType({ mediaType: tabType });\n }, [setLocalMediaSearchType, tabType]);\n\n const profileId = resolvedUserId || chatId;\n\n useEffect(() => {\n if (lastSyncTime) {\n loadProfilePhotos({ profileId });\n }\n }, [loadProfilePhotos, profileId, lastSyncTime]);\n\n const handleSelectMedia = useCallback((messageId: number) => {\n openMediaViewer({\n chatId: profileId,\n threadId: MAIN_THREAD_ID,\n messageId,\n origin: MediaViewerOrigin.SharedMedia,\n });\n }, [profileId, openMediaViewer]);\n\n const handlePlayAudio = useCallback((messageId: number) => {\n openAudioPlayer({ chatId: profileId, messageId });\n }, [profileId, openAudioPlayer]);\n\n const handleMemberClick = useCallback((id: string) => {\n openChat({ id });\n }, [openChat]);\n\n const handleMessageFocus = useCallback((messageId: number) => {\n focusMessage({ chatId: profileId, messageId });\n }, [profileId, focusMessage]);\n\n const handleDeleteMembersModalClose = useCallback(() => {\n setDeletingUserId(undefined);\n }, []);\n\n useEffect(() => {\n if (!transitionRef.current || !IS_TOUCH_ENV) {\n return undefined;\n }\n\n return captureEvents(transitionRef.current, {\n selectorToPreventScroll: '.Profile',\n onSwipe: ((e, direction) => {\n if (direction === SwipeDirection.Left) {\n setActiveTab(Math.min(activeTab + 1, tabs.length - 1));\n return true;\n } else if (direction === SwipeDirection.Right) {\n setActiveTab(Math.max(0, activeTab - 1));\n return true;\n }\n\n return false;\n }),\n });\n }, [activeTab, tabs.length]);\n\n let renderingDelay;\n const isFirstTab = resultType === 'members' || (!hasMembersTab && resultType === 'media');\n // @optimization Used to unparallelize rendering of message list and profile media\n if (isFirstTab) {\n renderingDelay = !isRightColumnShown ? HIDDEN_RENDER_DELAY : 0;\n // @optimization Used to delay first render of secondary tabs while animating\n } else if (!viewportIds) {\n renderingDelay = SLIDE_TRANSITION_DURATION;\n }\n const canRenderContent = useAsyncRendering([chatId, resultType], renderingDelay);\n\n function getMemberContextAction(memberId: string) {\n return memberId === currentUserId || !canDeleteMembers ? undefined : [{\n title: lang('lng_context_remove_from_group'),\n icon: 'stop',\n handler: () => {\n setDeletingUserId(memberId);\n },\n }];\n }\n\n function renderContent() {\n if (!viewportIds || !canRenderContent || !chatMessages) {\n const noSpinner = isFirstTab && !canRenderContent;\n\n return (\n
\n {!noSpinner && }\n
\n );\n }\n\n if (!viewportIds.length) {\n let text: string;\n\n switch (resultType) {\n case 'members':\n text = areMembersHidden ? 'You have no access to group members list.' : 'No members found';\n break;\n case 'commonChats':\n text = lang('NoGroupsInCommon');\n break;\n case 'documents':\n text = lang('lng_media_file_empty');\n break;\n case 'links':\n text = lang('lng_media_link_empty');\n break;\n case 'audio':\n text = lang('lng_media_song_empty');\n break;\n case 'voice':\n text = lang('lng_media_audio_empty');\n break;\n default:\n text = lang('SharedMedia.EmptyTitle');\n }\n\n return (\n
\n \n
\n );\n }\n\n return (\n \n {resultType === 'media' ? (\n (viewportIds as number[])!.map((id) => chatMessages[id] && (\n \n ))\n ) : resultType === 'documents' ? (\n (viewportIds as number[])!.map((id) => chatMessages[id] && (\n \n ))\n ) : resultType === 'links' ? (\n (viewportIds as number[])!.map((id) => chatMessages[id] && (\n \n ))\n ) : resultType === 'audio' ? (\n (viewportIds as number[])!.map((id) => chatMessages[id] && (\n \n ))\n ) : resultType === 'voice' ? (\n (viewportIds as number[])!.map((id) => chatMessages[id] && (\n \n ))\n ) : resultType === 'members' ? (\n (viewportIds as string[])!.map((id, i) => (\n handleMemberClick(id)}\n contextActions={getMemberContextAction(id)}\n >\n \n \n ))\n ) : resultType === 'commonChats' ? (\n (viewportIds as string[])!.map((id, i) => (\n openChat({ id })}\n >\n \n \n ))\n ) : undefined}\n
\n );\n }\n\n return (\n \n {!noProfileInfo && renderProfileInfo(chatId, resolvedUserId)}\n {!isRestricted && (\n \n \n {renderContent()}\n \n \n
\n )}\n\n {canAddMembers && (\n \n \n \n )}\n {canDeleteMembers && (\n \n )}\n \n );\n};\n\nfunction renderProfileInfo(chatId: string, resolvedUserId?: string) {\n return (\n
\n \n \n
\n );\n}\n\nfunction buildInfiniteScrollItemSelector(resultType: string) {\n return [\n // Used on first render\n `.shared-media-transition > div:only-child > .${resultType}-list > .scroll-item`,\n // Used after transition\n `.shared-media-transition > .Transition__slide--active > .${resultType}-list > .scroll-item`,\n ].join(', ');\n}\n\nexport default memo(withGlobal(\n (global, { chatId }): StateProps => {\n const chat = selectChat(global, chatId);\n const chatMessages = selectChatMessages(global, chatId);\n const { currentType: mediaSearchType, resultsByType } = selectCurrentMediaSearch(global) || {};\n const { foundIds } = (resultsByType && mediaSearchType && resultsByType[mediaSearchType]) || {};\n\n const { byId: usersById, statusesById: userStatusesById } = global.users;\n const { byId: chatsById } = global.chats;\n\n const isGroup = chat && isChatGroup(chat);\n const isChannel = chat && isChatChannel(chat);\n const hasMembersTab = isGroup || (isChannel && isChatAdmin(chat!));\n const members = chat?.fullInfo?.members;\n const areMembersHidden = hasMembersTab && chat && chat.fullInfo && !chat.fullInfo.canViewMembers;\n const canAddMembers = hasMembersTab && chat && (getHasAdminRight(chat, 'inviteUsers') || chat.isCreator);\n const canDeleteMembers = hasMembersTab && chat && (getHasAdminRight(chat, 'banUsers') || chat.isCreator);\n const activeDownloadIds = selectActiveDownloadIds(global, chatId);\n\n let hasCommonChatsTab;\n let resolvedUserId;\n let user;\n if (isUserId(chatId)) {\n resolvedUserId = chatId;\n user = selectUser(global, resolvedUserId);\n hasCommonChatsTab = user && !user.isSelf && !isUserBot(user);\n }\n\n return {\n theme: selectTheme(global),\n isChannel,\n resolvedUserId,\n chatMessages,\n foundIds,\n mediaSearchType,\n hasCommonChatsTab,\n hasMembersTab,\n areMembersHidden,\n canAddMembers,\n canDeleteMembers,\n currentUserId: global.currentUserId,\n isRightColumnShown: selectIsRightColumnShown(global),\n isRestricted: chat?.isRestricted,\n lastSyncTime: global.lastSyncTime,\n serverTimeOffset: global.serverTimeOffset,\n activeDownloadIds,\n usersById,\n userStatusesById,\n chatsById,\n isChatProtected: chat?.isProtected,\n ...(hasMembersTab && members && { members }),\n ...(hasCommonChatsTab && user && { commonChatIds: user.commonChats?.ids }),\n };\n },\n)(Profile));\n","import { useCallback, useEffect } from '../../../lib/teact/teact';\n\nexport default function useTransitionFixes(\n containerRef: { current: HTMLDivElement | null },\n transitionElSelector = '.Transition.shared-media-transition',\n) {\n // Set `min-height` for shared media container to prevent jumping when switching tabs\n useEffect(() => {\n function setMinHeight() {\n const container = containerRef.current!;\n const transitionEl = container.querySelector(transitionElSelector);\n const tabsEl = container.querySelector('.TabList');\n if (transitionEl && tabsEl) {\n transitionEl.style.minHeight = `${container.offsetHeight - tabsEl.offsetHeight}px`;\n }\n }\n\n setMinHeight();\n\n window.addEventListener('resize', setMinHeight, false);\n\n return () => {\n window.removeEventListener('resize', setMinHeight, false);\n };\n }, [containerRef, transitionElSelector]);\n\n // Workaround for scrollable content flickering during animation.\n const applyTransitionFix = useCallback(() => {\n const container = containerRef.current!;\n if (container.style.overflowY !== 'hidden') {\n const scrollBarWidth = container.offsetWidth - container.clientWidth;\n container.style.overflowY = 'hidden';\n container.style.marginRight = `${scrollBarWidth}px`;\n }\n }, [containerRef]);\n\n const releaseTransitionFix = useCallback(() => {\n const container = containerRef.current!;\n container.style.overflowY = 'scroll';\n container.style.marginRight = '0';\n }, [containerRef]);\n\n return { applyTransitionFix, releaseTransitionFix };\n}\n","import { useCallback, useState } from '../lib/teact/teact';\n\nconst useCacheBuster = () => {\n const [cacheBuster, setCacheBuster] = useState(false);\n\n const updateCacheBuster = useCallback(() => {\n setCacheBuster((current) => !current);\n }, []);\n\n return [cacheBuster, updateCacheBuster] as const;\n};\n\nexport default useCacheBuster;\n","import React, { FC, memo } from '../../lib/teact/teact';\nimport { OwnProps } from './RightSearch';\nimport { Bundles } from '../../util/moduleLoader';\n\nimport useModuleLoader from '../../hooks/useModuleLoader';\nimport Loading from '../ui/Loading';\n\nconst RightSearchAsync: FC = (props) => {\n const RightSearch = useModuleLoader(Bundles.Extra, 'RightSearch');\n\n // eslint-disable-next-line react/jsx-props-no-spreading\n return RightSearch ? : ;\n};\n\nexport default memo(RightSearchAsync);\n","import React, { FC, memo } from '../../../lib/teact/teact';\nimport { Bundles } from '../../../util/moduleLoader';\n\nimport { OwnProps } from './Management';\n\nimport useModuleLoader from '../../../hooks/useModuleLoader';\n\nimport Loading from '../../ui/Loading';\n\nconst ManagementAsync: FC = (props) => {\n const Management = useModuleLoader(Bundles.Extra, 'Management');\n\n // eslint-disable-next-line react/jsx-props-no-spreading\n return Management ? : ;\n};\n\nexport default memo(ManagementAsync);\n","import React, { FC } from '../../../lib/teact/teact';\nimport { Bundles } from '../../../util/moduleLoader';\n\nimport { OwnProps } from './Statistics';\n\nimport useModuleLoader from '../../../hooks/useModuleLoader';\nimport Loading from '../../ui/Loading';\n\nconst StatisticsAsync: FC = (props) => {\n const Statistics = useModuleLoader(Bundles.Extra, 'Statistics');\n\n // eslint-disable-next-line react/jsx-props-no-spreading\n return Statistics ? : ;\n};\n\nexport default StatisticsAsync;\n","import React, { FC, memo } from '../../lib/teact/teact';\nimport { Bundles } from '../../util/moduleLoader';\n\nimport useModuleLoader from '../../hooks/useModuleLoader';\nimport Loading from '../ui/Loading';\n\nconst StickerSearchAsync: FC = () => {\n const StickerSearch = useModuleLoader(Bundles.Extra, 'StickerSearch');\n\n // eslint-disable-next-line react/jsx-props-no-spreading\n return StickerSearch ? : ;\n};\n\nexport default memo(StickerSearchAsync);\n","import React, { FC, memo } from '../../lib/teact/teact';\nimport { Bundles } from '../../util/moduleLoader';\n\nimport useModuleLoader from '../../hooks/useModuleLoader';\nimport Loading from '../ui/Loading';\n\nconst GifSearchAsync: FC = () => {\n const GifSearch = useModuleLoader(Bundles.Extra, 'GifSearch');\n\n // eslint-disable-next-line react/jsx-props-no-spreading\n return GifSearch ? : ;\n};\n\nexport default memo(GifSearchAsync);\n","import React, { FC, memo } from '../../lib/teact/teact';\nimport { Bundles } from '../../util/moduleLoader';\n\nimport useModuleLoader from '../../hooks/useModuleLoader';\nimport Loading from '../ui/Loading';\n\nconst PollResultsAsync: FC = () => {\n const PollResults = useModuleLoader(Bundles.Extra, 'PollResults');\n\n return PollResults ? : ;\n};\n\nexport default memo(PollResultsAsync);\n","import React, {\n FC, useCallback, useMemo, memo, useState, useEffect,\n} from '../../lib/teact/teact';\nimport { getActions, getGlobal, withGlobal } from '../../global';\n\nimport {\n ApiChat, ApiChatMember, ApiUpdateConnectionStateType,\n} from '../../api/types';\nimport { NewChatMembersProgress } from '../../types';\n\nimport { unique } from '../../util/iteratees';\nimport { selectChat } from '../../global/selectors';\nimport {\n filterUsersByName, isChatChannel, isUserBot, sortChatIds,\n} from '../../global/helpers';\nimport useLang from '../../hooks/useLang';\nimport usePrevious from '../../hooks/usePrevious';\nimport useHistoryBack from '../../hooks/useHistoryBack';\n\nimport Picker from '../common/Picker';\nimport FloatingActionButton from '../ui/FloatingActionButton';\nimport Spinner from '../ui/Spinner';\n\nimport './AddChatMembers.scss';\n\nexport type OwnProps = {\n chatId: string;\n isActive: boolean;\n onNextStep: (memberIds: string[]) => void;\n onClose: NoneToVoidFunction;\n};\n\ntype StateProps = {\n connectionState?: ApiUpdateConnectionStateType;\n isChannel?: boolean;\n members?: ApiChatMember[];\n currentUserId?: string;\n chatsById: Record;\n localContactIds?: string[];\n searchQuery?: string;\n isLoading: boolean;\n isSearching?: boolean;\n localUserIds?: string[];\n globalUserIds?: string[];\n};\n\nconst AddChatMembers: FC = ({\n isChannel,\n connectionState,\n members,\n onNextStep,\n currentUserId,\n chatsById,\n localContactIds,\n isLoading,\n searchQuery,\n isSearching,\n localUserIds,\n globalUserIds,\n onClose,\n isActive,\n}) => {\n const { setUserSearchQuery, loadContactList } = getActions();\n\n const lang = useLang();\n const [selectedMemberIds, setSelectedMemberIds] = useState([]);\n const prevSelectedMemberIds = usePrevious(selectedMemberIds);\n const noPickerScrollRestore = prevSelectedMemberIds === selectedMemberIds;\n\n useEffect(() => {\n if (isActive && connectionState === 'connectionStateReady') {\n loadContactList();\n }\n }, [connectionState, isActive, loadContactList]);\n\n useHistoryBack(isActive, onClose);\n\n const memberIds = useMemo(() => {\n return members ? members.map((member) => member.userId) : [];\n }, [members]);\n\n const handleFilterChange = useCallback((query: string) => {\n setUserSearchQuery({ query });\n }, [setUserSearchQuery]);\n\n const displayedIds = useMemo(() => {\n // No need for expensive global updates on users, so we avoid them\n const usersById = getGlobal().users.byId;\n const filteredContactIds = localContactIds ? filterUsersByName(localContactIds, usersById, searchQuery) : [];\n\n return sortChatIds(\n unique([\n ...filteredContactIds,\n ...(localUserIds || []),\n ...(globalUserIds || []),\n ]).filter((userId) => {\n const user = usersById[userId];\n\n // The user can be added to the chat if the following conditions are met:\n // the user has not yet been added to the current chat\n // AND it is not the current user,\n // AND (it is not found (user from global search) OR it is not a bot OR it is a bot,\n // but the current chat is not a channel AND the appropriate permission is set).\n return (\n !memberIds.includes(userId)\n && userId !== currentUserId\n && (!user || !isUserBot(user) || (!isChannel && user.canBeInvitedToGroup))\n );\n }),\n chatsById,\n );\n }, [\n localContactIds, chatsById, searchQuery, localUserIds, globalUserIds, currentUserId, memberIds, isChannel,\n ]);\n\n const handleNextStep = useCallback(() => {\n if (selectedMemberIds.length) {\n setUserSearchQuery({ query: '' });\n onNextStep(selectedMemberIds);\n }\n }, [selectedMemberIds, setUserSearchQuery, onNextStep]);\n\n return (\n
\n
\n \n\n \n {isLoading ? (\n \n ) : (\n \n )}\n \n
\n
\n );\n};\n\nexport default memo(withGlobal(\n (global, { chatId }): StateProps => {\n const chat = selectChat(global, chatId);\n const { userIds: localContactIds } = global.contactList || {};\n const { byId: chatsById } = global.chats;\n const { currentUserId, newChatMembersProgress, connectionState } = global;\n const isChannel = chat && isChatChannel(chat);\n\n const {\n query: searchQuery,\n fetchingStatus,\n globalUserIds,\n localUserIds,\n } = global.userSearch;\n\n return {\n isChannel,\n members: chat?.fullInfo?.members,\n currentUserId,\n chatsById,\n localContactIds,\n searchQuery,\n isSearching: fetchingStatus,\n isLoading: newChatMembersProgress === NewChatMembersProgress.Loading,\n globalUserIds,\n localUserIds,\n connectionState,\n };\n },\n)(AddChatMembers));\n","import React, {\n FC, memo, useCallback, useEffect, useState,\n} from '../../lib/teact/teact';\nimport { getActions, withGlobal } from '../../global';\n\nimport {\n ManagementScreens, NewChatMembersProgress, ProfileState, RightColumnContent,\n} from '../../types';\n\nimport { MIN_SCREEN_WIDTH_FOR_STATIC_RIGHT_COLUMN } from '../../config';\nimport captureEscKeyListener from '../../util/captureEscKeyListener';\nimport {\n selectAreActiveChatsLoaded,\n selectCurrentMessageList,\n selectRightColumnContentKey,\n} from '../../global/selectors';\nimport useLayoutEffectWithPrevDeps from '../../hooks/useLayoutEffectWithPrevDeps';\nimport useWindowSize from '../../hooks/useWindowSize';\nimport useHistoryBack from '../../hooks/useHistoryBack';\nimport useCurrentOrPrev from '../../hooks/useCurrentOrPrev';\n\nimport RightHeader from './RightHeader';\nimport Profile from './Profile';\nimport Transition from '../ui/Transition';\nimport RightSearch from './RightSearch.async';\nimport Management from './management/Management.async';\nimport Statistics from './statistics/Statistics.async';\nimport StickerSearch from './StickerSearch.async';\nimport GifSearch from './GifSearch.async';\nimport PollResults from './PollResults.async';\nimport AddChatMembers from './AddChatMembers';\n\nimport './RightColumn.scss';\n\ntype StateProps = {\n contentKey?: RightColumnContent;\n chatId?: string;\n threadId?: number;\n isChatSelected: boolean;\n shouldSkipHistoryAnimations?: boolean;\n nextManagementScreen?: ManagementScreens;\n};\n\nconst CLOSE_ANIMATION_DURATION = 300;\nconst MAIN_SCREENS_COUNT = Object.keys(RightColumnContent).length / 2;\nconst MANAGEMENT_SCREENS_COUNT = Object.keys(ManagementScreens).length / 2;\n\nfunction blurSearchInput() {\n const searchInput = document.querySelector('.RightHeader .SearchInput input') as HTMLInputElement;\n if (searchInput) {\n searchInput.blur();\n }\n}\n\nconst RightColumn: FC = ({\n contentKey,\n chatId,\n threadId,\n isChatSelected,\n shouldSkipHistoryAnimations,\n nextManagementScreen,\n}) => {\n const {\n toggleChatInfo,\n toggleManagement,\n closeLocalTextSearch,\n setStickerSearchQuery,\n setGifSearchQuery,\n closePollResults,\n addChatMembers,\n setNewChatMembersDialogState,\n setEditingExportedInvite,\n toggleStatistics,\n setOpenedInviteInfo,\n requestNextManagementScreen,\n } = getActions();\n\n const { width: windowWidth } = useWindowSize();\n const [profileState, setProfileState] = useState(ProfileState.Profile);\n const [managementScreen, setManagementScreen] = useState(ManagementScreens.Initial);\n const [selectedChatMemberId, setSelectedChatMemberId] = useState();\n const [isPromotedByCurrentUser, setIsPromotedByCurrentUser] = useState();\n const isScrolledDown = profileState !== ProfileState.Profile;\n\n const isOpen = contentKey !== undefined;\n const isProfile = contentKey === RightColumnContent.ChatInfo;\n const isSearch = contentKey === RightColumnContent.Search;\n const isManagement = contentKey === RightColumnContent.Management;\n const isStatistics = contentKey === RightColumnContent.Statistics;\n const isStickerSearch = contentKey === RightColumnContent.StickerSearch;\n const isGifSearch = contentKey === RightColumnContent.GifSearch;\n const isPollResults = contentKey === RightColumnContent.PollResults;\n const isAddingChatMembers = contentKey === RightColumnContent.AddingMembers;\n const isOverlaying = windowWidth <= MIN_SCREEN_WIDTH_FOR_STATIC_RIGHT_COLUMN;\n\n const [shouldSkipTransition, setShouldSkipTransition] = useState(!isOpen);\n\n const renderingContentKey = useCurrentOrPrev(contentKey, true, !isChatSelected) ?? -1;\n\n const close = useCallback((shouldScrollUp = true) => {\n switch (contentKey) {\n case RightColumnContent.AddingMembers:\n setNewChatMembersDialogState(NewChatMembersProgress.Closed);\n break;\n case RightColumnContent.ChatInfo:\n if (isScrolledDown && shouldScrollUp) {\n setProfileState(ProfileState.Profile);\n break;\n }\n toggleChatInfo(undefined, { forceSyncOnIOs: true });\n break;\n case RightColumnContent.Management: {\n switch (managementScreen) {\n case ManagementScreens.Initial:\n toggleManagement();\n break;\n case ManagementScreens.ChatPrivacyType:\n case ManagementScreens.Discussion:\n case ManagementScreens.GroupPermissions:\n case ManagementScreens.GroupType:\n case ManagementScreens.ChatAdministrators:\n case ManagementScreens.ChannelSubscribers:\n case ManagementScreens.GroupMembers:\n case ManagementScreens.Invites:\n case ManagementScreens.Reactions:\n case ManagementScreens.JoinRequests:\n case ManagementScreens.ChannelRemovedUsers:\n setManagementScreen(ManagementScreens.Initial);\n break;\n case ManagementScreens.GroupUserPermissionsCreate:\n case ManagementScreens.GroupRemovedUsers:\n case ManagementScreens.GroupUserPermissions:\n setManagementScreen(ManagementScreens.GroupPermissions);\n setSelectedChatMemberId(undefined);\n setIsPromotedByCurrentUser(undefined);\n break;\n case ManagementScreens.ChatAdminRights:\n case ManagementScreens.ChatNewAdminRights:\n case ManagementScreens.GroupAddAdmins:\n case ManagementScreens.GroupRecentActions:\n setManagementScreen(ManagementScreens.ChatAdministrators);\n break;\n case ManagementScreens.EditInvite:\n case ManagementScreens.InviteInfo:\n setManagementScreen(ManagementScreens.Invites);\n setOpenedInviteInfo({ invite: undefined });\n setEditingExportedInvite({ chatId, invite: undefined });\n break;\n }\n\n break;\n }\n case RightColumnContent.Statistics:\n toggleStatistics();\n break;\n case RightColumnContent.Search: {\n blurSearchInput();\n closeLocalTextSearch();\n break;\n }\n case RightColumnContent.StickerSearch:\n blurSearchInput();\n setStickerSearchQuery({ query: undefined });\n break;\n case RightColumnContent.GifSearch: {\n blurSearchInput();\n setGifSearchQuery({ query: undefined });\n break;\n }\n case RightColumnContent.PollResults:\n closePollResults();\n break;\n }\n }, [\n contentKey, isScrolledDown, toggleChatInfo, closePollResults, setNewChatMembersDialogState,\n managementScreen, toggleManagement, closeLocalTextSearch, setStickerSearchQuery, setGifSearchQuery,\n setEditingExportedInvite, chatId, setOpenedInviteInfo, toggleStatistics,\n ]);\n\n const handleSelectChatMember = useCallback((memberId, isPromoted) => {\n setSelectedChatMemberId(memberId);\n setIsPromotedByCurrentUser(isPromoted);\n }, []);\n\n const handleAppendingChatMembers = useCallback((memberIds: string[]) => {\n addChatMembers({ chatId, memberIds });\n }, [addChatMembers, chatId]);\n\n useEffect(() => (isOpen ? captureEscKeyListener(close) : undefined), [isOpen, close]);\n\n useEffect(() => {\n setTimeout(() => {\n setShouldSkipTransition(!isOpen);\n }, CLOSE_ANIMATION_DURATION);\n }, [isOpen]);\n\n useEffect(() => {\n if (nextManagementScreen) {\n setManagementScreen(nextManagementScreen);\n requestNextManagementScreen(undefined);\n }\n }, [nextManagementScreen, requestNextManagementScreen]);\n\n // Close Right Column when it transforms into overlayed state on screen resize\n useEffect(() => {\n if (isOpen && isOverlaying) {\n close();\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [isOverlaying]);\n\n // We need to clear profile state and management screen state, when changing chats\n useLayoutEffectWithPrevDeps(([prevChatId]) => {\n if (prevChatId !== chatId) {\n setProfileState(ProfileState.Profile);\n setManagementScreen(ManagementScreens.Initial);\n }\n }, [chatId]);\n\n useHistoryBack(isChatSelected && (\n contentKey === RightColumnContent.ChatInfo\n || contentKey === RightColumnContent.Management\n || contentKey === RightColumnContent.AddingMembers\n ), () => close(false), toggleChatInfo);\n\n // eslint-disable-next-line consistent-return\n function renderContent(isActive: boolean) {\n if (renderingContentKey === -1) {\n return undefined;\n }\n\n switch (renderingContentKey) {\n case RightColumnContent.AddingMembers:\n return (\n \n );\n case RightColumnContent.ChatInfo:\n return (\n \n );\n case RightColumnContent.Search:\n return ;\n case RightColumnContent.Management:\n return (\n \n );\n\n case RightColumnContent.Statistics:\n return ;\n case RightColumnContent.StickerSearch:\n return ;\n case RightColumnContent.GifSearch:\n return ;\n case RightColumnContent.PollResults:\n return ;\n }\n }\n\n return (\n \n {isOverlaying && (\n
\n )}\n
\n \n \n {renderContent}\n \n
\n
\n );\n};\n\nexport default memo(withGlobal(\n (global): StateProps => {\n const { chatId, threadId } = selectCurrentMessageList(global) || {};\n const areActiveChatsLoaded = selectAreActiveChatsLoaded(global);\n const nextManagementScreen = chatId ? global.management.byChatId[chatId]?.nextScreen : undefined;\n\n return {\n contentKey: selectRightColumnContentKey(global),\n chatId,\n threadId,\n isChatSelected: Boolean(chatId && areActiveChatsLoaded),\n shouldSkipHistoryAnimations: global.shouldSkipHistoryAnimations,\n nextManagementScreen,\n };\n },\n)(RightColumn));\n","import React, { FC, memo } from '../../lib/teact/teact';\n\nimport { Bundles } from '../../util/moduleLoader';\nimport useModuleLoader from '../../hooks/useModuleLoader';\n\ninterface OwnProps {\n isOpen: boolean;\n}\n\nconst MediaViewerAsync: FC = ({ isOpen }) => {\n const MediaViewer = useModuleLoader(Bundles.Extra, 'MediaViewer', !isOpen);\n\n return MediaViewer ? : undefined;\n};\n\nexport default memo(MediaViewerAsync);\n","export default function download(url: string, filename: string) {\n const link = document.createElement('a');\n link.href = url;\n link.download = filename;\n try {\n link.click();\n } catch (err) {\n // eslint-disable-next-line no-console\n console.error(err); // Suppress redundant \"Blob loading failed\" error popup on IOS\n }\n}\n","import { FC, memo, useEffect } from '../../lib/teact/teact';\nimport { getActions, withGlobal } from '../../global';\n\nimport { Thread } from '../../global/types';\nimport { ApiMediaFormat, ApiMessage } from '../../api/types';\n\nimport * as mediaLoader from '../../util/mediaLoader';\nimport download from '../../util/download';\nimport {\n getMessageContentFilename, getMessageMediaHash,\n} from '../../global/helpers';\n\ntype StateProps = {\n activeDownloads: Record;\n messages: Record;\n threadsById: Record;\n }>;\n};\n\nconst startedDownloads = new Set();\n\nconst DownloadManager: FC = ({\n activeDownloads,\n messages,\n}) => {\n const { cancelMessageMediaDownload } = getActions();\n\n useEffect(() => {\n Object.entries(activeDownloads).forEach(([chatId, messageIds]) => {\n const activeMessages = messageIds.map((id) => messages[Number(chatId)].byId[id]);\n activeMessages.forEach((message) => {\n const downloadHash = getMessageMediaHash(message, 'download');\n if (!downloadHash) {\n cancelMessageMediaDownload({ message });\n return;\n }\n\n if (!startedDownloads.has(downloadHash)) {\n const mediaData = mediaLoader.getFromMemory(downloadHash);\n if (mediaData) {\n startedDownloads.delete(downloadHash);\n download(mediaData, getMessageContentFilename(message));\n cancelMessageMediaDownload({ message });\n return;\n }\n\n mediaLoader.fetch(downloadHash, ApiMediaFormat.BlobUrl, true).then((result) => {\n startedDownloads.delete(downloadHash);\n if (result) {\n download(result, getMessageContentFilename(message));\n }\n cancelMessageMediaDownload({ message });\n });\n\n startedDownloads.add(downloadHash);\n }\n });\n });\n }, [\n cancelMessageMediaDownload,\n messages,\n activeDownloads,\n ]);\n\n return undefined;\n};\n\nexport default memo(withGlobal(\n (global): StateProps => {\n const activeDownloads = global.activeDownloads.byChatId;\n const messages = global.messages.byChatId;\n return {\n activeDownloads,\n messages,\n };\n },\n)(DownloadManager));\n","import React, { FC, memo } from '../../lib/teact/teact';\nimport { Bundles } from '../../util/moduleLoader';\n\nimport useModuleLoader from '../../hooks/useModuleLoader';\n\nconst NotificationsAsync: FC = ({ isOpen }) => {\n const Notifications = useModuleLoader(Bundles.Extra, 'Notifications', !isOpen);\n\n // eslint-disable-next-line react/jsx-props-no-spreading\n return Notifications ? : undefined;\n};\n\nexport default memo(NotificationsAsync);\n","import React, { FC, memo } from '../../lib/teact/teact';\nimport { Bundles } from '../../util/moduleLoader';\n\nimport useModuleLoader from '../../hooks/useModuleLoader';\n\nconst DialogsAsync: FC = ({ isOpen }) => {\n const Dialogs = useModuleLoader(Bundles.Extra, 'Dialogs', !isOpen);\n\n // eslint-disable-next-line react/jsx-props-no-spreading\n return Dialogs ? : undefined;\n};\n\nexport default memo(DialogsAsync);\n","import React, { FC, memo } from '../../lib/teact/teact';\nimport { Bundles } from '../../util/moduleLoader';\nimport { OwnProps } from './ForwardPicker';\n\nimport useModuleLoader from '../../hooks/useModuleLoader';\n\nconst ForwardPickerAsync: FC = (props) => {\n const { isOpen } = props;\n const ForwardPicker = useModuleLoader(Bundles.Extra, 'ForwardPicker', !isOpen);\n\n // eslint-disable-next-line react/jsx-props-no-spreading\n return ForwardPicker ? : undefined;\n};\n\nexport default memo(ForwardPickerAsync);\n","import React, { FC, memo } from '../../lib/teact/teact';\nimport { Bundles } from '../../util/moduleLoader';\n\nimport { OwnProps } from './SafeLinkModal';\n\nimport useModuleLoader from '../../hooks/useModuleLoader';\n\nconst SafeLinkModalAsync: FC = (props) => {\n const { url } = props;\n const SafeLinkModal = useModuleLoader(Bundles.Extra, 'SafeLinkModal', !url);\n\n // eslint-disable-next-line react/jsx-props-no-spreading\n return SafeLinkModal ? : undefined;\n};\n\nexport default memo(SafeLinkModalAsync);\n","import React, { FC, memo } from '../../lib/teact/teact';\nimport { Bundles } from '../../util/moduleLoader';\n\nimport { OwnProps } from './HistoryCalendar';\n\nimport useModuleLoader from '../../hooks/useModuleLoader';\n\nconst HistoryCalendarAsync: FC = (props) => {\n const { isOpen } = props;\n const HistoryCalendar = useModuleLoader(Bundles.Extra, 'HistoryCalendar', !isOpen);\n\n // eslint-disable-next-line react/jsx-props-no-spreading\n return HistoryCalendar ? : undefined;\n};\n\nexport default memo(HistoryCalendarAsync);\n","import React, { FC, memo } from '../../../lib/teact/teact';\nimport useModuleLoader from '../../../hooks/useModuleLoader';\nimport { Bundles } from '../../../util/moduleLoader';\nimport { OwnProps } from './GroupCall';\n\nconst GroupCallAsync: FC = (props) => {\n const { groupCallId } = props;\n const GroupCall = useModuleLoader(Bundles.Calls, 'GroupCall', !groupCallId);\n\n // eslint-disable-next-line react/jsx-props-no-spreading\n return GroupCall ? : undefined;\n};\n\nexport default memo(GroupCallAsync);\n","import React, { FC, memo } from '../../lib/teact/teact';\nimport useModuleLoader from '../../hooks/useModuleLoader';\nimport { Bundles } from '../../util/moduleLoader';\n\ntype OwnProps = {\n groupCallId?: string;\n};\n\nconst ActiveCallHeaderAsync: FC = (props) => {\n const { groupCallId } = props;\n const ActiveCallHeader = useModuleLoader(Bundles.Calls, 'ActiveCallHeader', !groupCallId);\n\n return ActiveCallHeader ? : undefined;\n};\n\nexport default memo(ActiveCallHeaderAsync);\n","import React, { FC, memo } from '../../lib/teact/teact';\nimport useModuleLoader from '../../hooks/useModuleLoader';\nimport { Bundles } from '../../util/moduleLoader';\n\ntype OwnProps = {\n isOpen: boolean;\n};\n\nconst CallFallbackConfirmAsync: FC = ({ isOpen }) => {\n const CallFallbackConfirm = useModuleLoader(Bundles.Calls, 'CallFallbackConfirm', !isOpen);\n\n return CallFallbackConfirm ? : undefined;\n};\n\nexport default memo(CallFallbackConfirmAsync);\n","import React, { FC, memo } from '../../lib/teact/teact';\nimport { Bundles } from '../../util/moduleLoader';\n\nimport { OwnProps } from './NewContactModal';\n\nimport useModuleLoader from '../../hooks/useModuleLoader';\n\nconst NewContactModalAsync: FC = (props) => {\n const { isOpen } = props;\n const NewContactModal = useModuleLoader(Bundles.Extra, 'NewContactModal', !isOpen);\n\n // eslint-disable-next-line react/jsx-props-no-spreading\n return NewContactModal ? : undefined;\n};\n\nexport default memo(NewContactModalAsync);\n","import React, {\n FC, useEffect, memo, useCallback,\n} from '../../lib/teact/teact';\nimport { getActions, withGlobal } from '../../global';\n\nimport { LangCode } from '../../types';\nimport { ApiMessage, ApiUpdateAuthorizationStateType, ApiUpdateConnectionStateType } from '../../api/types';\n\nimport '../../global/actions/all';\nimport {\n BASE_EMOJI_KEYWORD_LANG, DEBUG, INACTIVE_MARKER, PAGE_TITLE,\n} from '../../config';\nimport {\n selectChatMessage,\n selectIsForwardModalOpen,\n selectIsMediaViewerOpen,\n selectIsRightColumnShown,\n selectIsServiceChatReady,\n} from '../../global/selectors';\nimport { dispatchHeavyAnimationEvent } from '../../hooks/useHeavyAnimationCheck';\nimport buildClassName from '../../util/buildClassName';\nimport { fastRaf } from '../../util/schedulers';\nimport { waitForTransitionEnd } from '../../util/cssAnimationEndListeners';\nimport { processDeepLink } from '../../util/deeplink';\nimport stopEvent from '../../util/stopEvent';\nimport windowSize from '../../util/windowSize';\nimport { getAllNotificationsCount } from '../../util/folderManager';\nimport useShowTransition from '../../hooks/useShowTransition';\nimport useBackgroundMode from '../../hooks/useBackgroundMode';\nimport useBeforeUnload from '../../hooks/useBeforeUnload';\nimport useOnChange from '../../hooks/useOnChange';\nimport usePreventPinchZoomGesture from '../../hooks/usePreventPinchZoomGesture';\nimport { LOCATION_HASH } from '../../hooks/useHistoryBack';\n\nimport StickerSetModal from '../common/StickerSetModal.async';\nimport UnreadCount from '../common/UnreadCounter';\nimport LeftColumn from '../left/LeftColumn';\nimport MiddleColumn from '../middle/MiddleColumn';\nimport RightColumn from '../right/RightColumn';\nimport MediaViewer from '../mediaViewer/MediaViewer.async';\nimport AudioPlayer from '../middle/AudioPlayer';\nimport DownloadManager from './DownloadManager';\nimport Notifications from './Notifications.async';\nimport Dialogs from './Dialogs.async';\nimport ForwardPicker from './ForwardPicker.async';\nimport SafeLinkModal from './SafeLinkModal.async';\nimport HistoryCalendar from './HistoryCalendar.async';\nimport GroupCall from '../calls/group/GroupCall.async';\nimport ActiveCallHeader from '../calls/ActiveCallHeader.async';\nimport CallFallbackConfirm from '../calls/CallFallbackConfirm.async';\nimport NewContactModal from './NewContactModal.async';\n\nimport './Main.scss';\n\ntype StateProps = {\n connectionState?: ApiUpdateConnectionStateType;\n authState?: ApiUpdateAuthorizationStateType;\n lastSyncTime?: number;\n isLeftColumnShown: boolean;\n isRightColumnShown: boolean;\n isMediaViewerOpen: boolean;\n isForwardModalOpen: boolean;\n hasNotifications: boolean;\n hasDialogs: boolean;\n audioMessage?: ApiMessage;\n safeLinkModalUrl?: string;\n isHistoryCalendarOpen: boolean;\n shouldSkipHistoryAnimations?: boolean;\n openedStickerSetShortName?: string;\n activeGroupCallId?: string;\n isServiceChatReady?: boolean;\n animationLevel: number;\n language?: LangCode;\n wasTimeFormatSetManually?: boolean;\n isCallFallbackConfirmOpen: boolean;\n addedSetIds?: string[];\n newContactUserId?: string;\n newContactByPhoneNumber?: boolean;\n};\n\nconst NOTIFICATION_INTERVAL = 1000;\n\nlet notificationInterval: number | undefined;\n\n// eslint-disable-next-line @typescript-eslint/naming-convention\nlet DEBUG_isLogged = false;\n\nconst Main: FC = ({\n connectionState,\n authState,\n lastSyncTime,\n isLeftColumnShown,\n isRightColumnShown,\n isMediaViewerOpen,\n isForwardModalOpen,\n hasNotifications,\n hasDialogs,\n audioMessage,\n activeGroupCallId,\n safeLinkModalUrl,\n isHistoryCalendarOpen,\n shouldSkipHistoryAnimations,\n openedStickerSetShortName,\n isServiceChatReady,\n animationLevel,\n language,\n wasTimeFormatSetManually,\n isCallFallbackConfirmOpen,\n addedSetIds,\n newContactUserId,\n newContactByPhoneNumber,\n}) => {\n const {\n sync,\n loadAnimatedEmojis,\n loadNotificationSettings,\n loadNotificationExceptions,\n updateIsOnline,\n loadTopInlineBots,\n loadEmojiKeywords,\n loadCountryList,\n loadAvailableReactions,\n loadStickerSets,\n loadAddedStickers,\n loadFavoriteStickers,\n ensureTimeFormat,\n openStickerSetShortName,\n checkVersionNotification,\n loadAppConfig,\n } = getActions();\n\n if (DEBUG && !DEBUG_isLogged) {\n DEBUG_isLogged = true;\n // eslint-disable-next-line no-console\n console.log('>>> RENDER MAIN');\n }\n\n useEffect(() => {\n if (connectionState === 'connectionStateReady' && authState === 'authorizationStateReady') {\n sync();\n }\n }, [connectionState, authState, sync]);\n\n // Initial API calls\n useEffect(() => {\n if (lastSyncTime) {\n updateIsOnline(true);\n loadAppConfig();\n loadAvailableReactions();\n loadAnimatedEmojis();\n loadNotificationSettings();\n loadNotificationExceptions();\n loadTopInlineBots();\n loadEmojiKeywords({ language: BASE_EMOJI_KEYWORD_LANG });\n }\n }, [\n lastSyncTime, loadAnimatedEmojis, loadEmojiKeywords, loadNotificationExceptions, loadNotificationSettings,\n loadTopInlineBots, updateIsOnline, loadAvailableReactions, loadAppConfig,\n ]);\n\n // Language-based API calls\n useEffect(() => {\n if (lastSyncTime) {\n if (language !== BASE_EMOJI_KEYWORD_LANG) {\n loadEmojiKeywords({ language });\n }\n\n loadCountryList({ langCode: language });\n }\n }, [language, lastSyncTime, loadCountryList, loadEmojiKeywords]);\n\n // Sticker sets\n useEffect(() => {\n if (lastSyncTime) {\n if (!addedSetIds) {\n loadStickerSets();\n loadFavoriteStickers();\n } else {\n loadAddedStickers();\n }\n }\n }, [lastSyncTime, addedSetIds, loadStickerSets, loadFavoriteStickers, loadAddedStickers]);\n\n // Check version when service chat is ready\n useEffect(() => {\n if (lastSyncTime && isServiceChatReady) {\n checkVersionNotification();\n }\n }, [lastSyncTime, isServiceChatReady, checkVersionNotification]);\n\n // Ensure time format\n useEffect(() => {\n if (lastSyncTime && !wasTimeFormatSetManually) {\n ensureTimeFormat();\n }\n }, [lastSyncTime, wasTimeFormatSetManually, ensureTimeFormat]);\n\n // Parse deep link\n useEffect(() => {\n if (lastSyncTime && LOCATION_HASH.startsWith('#?tgaddr=')) {\n processDeepLink(decodeURIComponent(LOCATION_HASH.substr('#?tgaddr='.length)));\n }\n }, [lastSyncTime]);\n\n // Prevent refresh by accidentally rotating device when listening to a voice chat\n useEffect(() => {\n if (!activeGroupCallId) {\n return undefined;\n }\n\n windowSize.disableRefresh();\n\n return () => {\n windowSize.enableRefresh();\n };\n }, [activeGroupCallId]);\n\n const {\n transitionClassNames: middleColumnTransitionClassNames,\n } = useShowTransition(!isLeftColumnShown, undefined, true, undefined, shouldSkipHistoryAnimations);\n\n const {\n transitionClassNames: rightColumnTransitionClassNames,\n } = useShowTransition(isRightColumnShown, undefined, true, undefined, shouldSkipHistoryAnimations);\n\n const className = buildClassName(\n middleColumnTransitionClassNames.replace(/([\\w-]+)/g, 'middle-column-$1'),\n rightColumnTransitionClassNames.replace(/([\\w-]+)/g, 'right-column-$1'),\n shouldSkipHistoryAnimations && 'history-animation-disabled',\n );\n\n // Dispatch heavy transition event when opening middle column\n useOnChange(([prevIsLeftColumnShown]) => {\n if (prevIsLeftColumnShown === undefined || animationLevel === 0) {\n return;\n }\n\n const dispatchHeavyAnimationEnd = dispatchHeavyAnimationEvent();\n\n waitForTransitionEnd(document.getElementById('MiddleColumn')!, dispatchHeavyAnimationEnd);\n }, [isLeftColumnShown]);\n\n // Dispatch heavy transition event and add body class when opening right column\n useOnChange(([prevIsRightColumnShown]) => {\n if (prevIsRightColumnShown === undefined || animationLevel === 0) {\n return;\n }\n\n fastRaf(() => {\n document.body.classList.add('animating-right-column');\n });\n\n const dispatchHeavyAnimationEnd = dispatchHeavyAnimationEvent();\n\n waitForTransitionEnd(document.getElementById('RightColumn')!, () => {\n dispatchHeavyAnimationEnd();\n\n fastRaf(() => {\n document.body.classList.remove('animating-right-column');\n });\n });\n }, [isRightColumnShown]);\n\n const handleBlur = useCallback(() => {\n updateIsOnline(false);\n\n const initialUnread = getAllNotificationsCount();\n let index = 0;\n\n clearInterval(notificationInterval);\n notificationInterval = window.setInterval(() => {\n if (document.title.includes(INACTIVE_MARKER)) {\n updateIcon(false);\n return;\n }\n\n if (index % 2 === 0) {\n const newUnread = getAllNotificationsCount() - initialUnread;\n if (newUnread > 0) {\n updatePageTitle(`${newUnread} notification${newUnread > 1 ? 's' : ''}`);\n updateIcon(true);\n }\n } else {\n updatePageTitle(PAGE_TITLE);\n updateIcon(false);\n }\n\n index++;\n }, NOTIFICATION_INTERVAL);\n }, [updateIsOnline]);\n\n const handleFocus = useCallback(() => {\n updateIsOnline(true);\n\n clearInterval(notificationInterval);\n notificationInterval = undefined;\n\n if (!document.title.includes(INACTIVE_MARKER)) {\n updatePageTitle(PAGE_TITLE);\n }\n\n updateIcon(false);\n }, [updateIsOnline]);\n\n const handleStickerSetModalClose = useCallback(() => {\n openStickerSetShortName({ stickerSetShortName: undefined });\n }, [openStickerSetShortName]);\n\n // Online status and browser tab indicators\n useBackgroundMode(handleBlur, handleFocus);\n useBeforeUnload(handleBlur);\n\n usePreventPinchZoomGesture(isMediaViewerOpen);\n\n return (\n
\n \n \n \n \n \n \n \n {audioMessage && }\n \n \n \n {activeGroupCallId && (\n <>\n \n \n \n )}\n \n \n \n \n
\n );\n};\n\nfunction updateIcon(asUnread: boolean) {\n document.querySelectorAll('link[rel=\"icon\"], link[rel=\"alternate icon\"]')\n .forEach((link) => {\n if (asUnread) {\n if (!link.href.includes('favicon-unread')) {\n link.href = link.href.replace('favicon', 'favicon-unread');\n }\n } else {\n link.href = link.href.replace('favicon-unread', 'favicon');\n }\n });\n}\n\n// For some reason setting `document.title` to the same value\n// causes increment of Chrome Dev Tools > Performance Monitor > DOM Nodes counter\nfunction updatePageTitle(nextTitle: string) {\n if (document.title !== nextTitle) {\n document.title = nextTitle;\n }\n}\n\nexport default memo(withGlobal(\n (global): StateProps => {\n const { settings: { byKey: { animationLevel, language, wasTimeFormatSetManually } } } = global;\n const { chatId: audioChatId, messageId: audioMessageId } = global.audioPlayer;\n const audioMessage = audioChatId && audioMessageId\n ? selectChatMessage(global, audioChatId, audioMessageId)\n : undefined;\n\n return {\n connectionState: global.connectionState,\n authState: global.authState,\n lastSyncTime: global.lastSyncTime,\n isLeftColumnShown: global.isLeftColumnShown,\n isRightColumnShown: selectIsRightColumnShown(global),\n isMediaViewerOpen: selectIsMediaViewerOpen(global),\n isForwardModalOpen: selectIsForwardModalOpen(global),\n hasNotifications: Boolean(global.notifications.length),\n hasDialogs: Boolean(global.dialogs.length),\n audioMessage,\n safeLinkModalUrl: global.safeLinkModalUrl,\n isHistoryCalendarOpen: Boolean(global.historyCalendarSelectedAt),\n shouldSkipHistoryAnimations: global.shouldSkipHistoryAnimations,\n openedStickerSetShortName: global.openedStickerSetShortName,\n isServiceChatReady: selectIsServiceChatReady(global),\n activeGroupCallId: global.groupCalls.activeGroupCallId,\n animationLevel,\n language,\n wasTimeFormatSetManually,\n isCallFallbackConfirmOpen: Boolean(global.groupCalls.isFallbackConfirmOpen),\n addedSetIds: global.stickers.added.setIds,\n newContactUserId: global.newContact?.userId,\n newContactByPhoneNumber: global.newContact?.isByPhoneNumber,\n };\n },\n)(Main));\n","import { getActions, getGlobal } from '../global';\n\nimport { DEBUG } from '../config';\n\n// eslint-disable-next-line import/no-cycle\nexport { default as Main } from '../components/main/Main';\n\nif (DEBUG) {\n // eslint-disable-next-line no-console\n console.log('>>> FINISH LOAD MAIN BUNDLE');\n}\n\nif (!getGlobal().connectionState) {\n getActions().initApi();\n}\n"],"names":["closeLocalTextSearch","global","chatId","threadId","selectCurrentMessageList","updateLocalTextSearch","replaceLocalTextSearchResults","undefined","addActionHandler","actions","payload","query","chatThreadKey","buildChatThreadKey","currentQuery","localTextSearch","byChatThreadKey","MEMO_EMPTY_ARRAY","mediaType","updateLocalMediaSearchType","id","MAIN_THREAD_ID","type","shouldReplaceHistory","currentMessageList","replaceThreadParam","exitMessageSelectMode","isStatisticsShown","messages","contentToBeScheduled","forwardMessages","toChatId","setGlobal","updateCurrentMessageList","isChatInfoShown","openChat","chatCreation","newChatMembersProgress","targetIndexDelta","orderedIds","position","indexOf","nextId","FOCUS_NO_HIGHLIGHT_DURATION","FAST_SMOOTH_MAX_DURATION","ANIMATION_END_DELAY","blurTimeout","copyTextForMessages","messageIds","lang","langProvider","chatMessages","selectChatMessages","result","map","filter","message","selectAllowedMessageActions","canCopy","sort","message1","message2","reduce","acc","sender","selectSender","push","getSenderTitle","getMessageSummaryText","copyTextToClipboard","join","scrollOffset","messageId","paramName","text","viewportIds","selectViewportIds","lastOwnEditableMessageId","findLast","Boolean","canEdit","replyingToId","selectReplyingToId","selectIsViewportNewest","chatMessageKeys","Object","keys","newIndex","toString","length","Number","chat","selectChat","lastMessage","threadInfo","selectThreadInfo","lastMessageId","setReplyingToId","focusMessage","origin","volume","playbackRate","isMuted","audioPlayer","selectIsRightColumnShown","pollResults","voters","window","setTimeout","getGlobal","noHighlight","replyStack","selectReplyStack","pop","focusLastMessage","messageListType","groupedId","groupedChatId","replyMessageId","isResizingContainer","ids","selectForwardedMessageIdsByGroupId","shouldSwitchChat","clearTimeout","newGlobal","updateFocusedMessage","updateFocusDirection","FocusDirection","includes","direction","loadViewportMessages","fromChatId","groupedMessageIds","selectMessageIdsByGroupId","isModalShown","closeMediaViewer","selectedMessages","openForwardMenu","byChatId","activeDownloads","canDownload","forEach","downloadMessageMedia","selectCurrentChat","enterMessageSelectMode","childMessageIds","withShift","toggleMessageSelection","shouldShowContextMenuHint","disableContextMenuHint","showNotification","IS_TOUCH_ENV","isPollModalOpen","currentVersion","APP_VERSION","slice","serviceNotifications","find","version","SERVICE_NOTIFICATIONS_USER_ID","date","getServerTime","serverTimeOffset","content","parseMessageInput","versionNotification","isOutgoing","createServiceNotification","serviceChat","maxId","Math","max","fractionalPart","floor","serviceNotification","isUnread","apiUpdate","reactorModal","seenByModal","globalSearch","updateGlobalSearch","globalResults","localResults","resultsByType","fetchingStatus","chats","recentlyFoundChatIds","newRecentIds","unshift","updateGlobalSearchContent","stickers","search","resultIds","gifs","offsetId","results","updateUserSearch","globalUserIds","localUserIds","userId","newContact","isByPhoneNumber","closeNewContactDialog","action","leftColumnWidth","management","isActive","screen","nextScreen","IS_SINGLE_COLUMN_LAYOUT","IS_TABLET_COLUMN_LAYOUT","isLeftColumnShown","messageLists","emoji","recentEmojis","newEmojis","e","sticker","recent","hash","newStickers","s","notification","localId","generateIdFor","newNotifications","notifications","existingNotificationIndex","findIndex","n","splice","data","hasErrorKey","getReadableErrorText","newDialogs","dialogs","existingErrorIndex","err","url","safeLinkModalUrl","selectedAt","historyCalendarSelectedAt","payment","isPaymentModalOpen","clearPayment","closeInvoice","error","avatarOwnerId","profilePhotoIndex","mediaViewer","uploadProgressCallbacks","Map","runDebouncedForMarkRead","debounce","cb","async","isOutlying","isBudgetPreload","addOffset","LoadMoreDirection","round","MESSAGE_LIST_SLICE","callApi","selectThreadOriginChat","limit","users","threadInfos","localMessages","allMessages","concat","byId","buildCollectionByKey","addChatMessagesById","updateOutlyingIds","updateListedIds","addUsers","addChats","updateThreadInfos","listedIds","selectListedIds","outlyingIds","selectOutlyingIds","areSortedArraysIntersecting","historyIds","newViewportIds","getViewportSlice","safeReplaceViewportIds","sourceIds","index","i","findClosestIndex","indexForDirection","from","to","areSomeLocal","areAllLocal","sendMessage","params","progressCallback","attachment","progress","messageLocalId","has","set","fileUploads","byMessageLocalId","replyingTo","IS_IOS","rafPromise","selectThreadTopMessageId","delete","isRestricted","Promise","resolve","loadWithBudget","selectFocusedMessageId","selectRealLastReadId","replyOriginForId","threadUpdate","MESSAGE_DELETED","replyMessage","selectChatMessage","updateChatMessage","replyToMessageId","loadMessage","isDeleting","updateThreadUnreadFromForwardedMessage","scheduledAt","noWebPage","selectNoWebPage","sendAs","selectSendAs","clearWebPagePreview","value","isSingle","attachments","isGrouped","restParams","entities","commonParams","groupedAttachments","split","MAX_MEDIA_FILES_FOR_ALBUM","firstAttachment","restAttachments","Date","now","selectEditingMessage","setEditingId","get","previousLocalId","cancelApiProgress","draft","replyToMsgId","updateChat","draftDate","localOnly","selectDraft","isUnpin","isOneSide","isSilent","unpinAllMessages","shouldDeleteForAll","editingId","selectEditingId","selectEditingScheduledId","activeChat","reason","description","peer","currentUserId","minId","selectFirstUnreadId","unreadCount","readCount","count","l","countSortedIds","lastReadInboxMessageId","webPagePreview","loadWebPagePreview","options","option","offset","shouldResetVoters","unique","user","offsets","nextOffset","loadPollOptionResults","fromChat","toChat","a","b","realMessages","m","isServiceNotificationMessage","poll","replaceScheduledMessages","loadScheduledHistory","selectScheduledMessage","loadPinnedMessages","seenByUserIds","sendAsId","sendAsChat","selectUser","fullInfo","sendAsIds","updateSponsoredMessage","selectSponsoredMessage","random","randomId","searchThrottled","throttle","searchGifs","updateGifSearch","added","addedStickers","updateStickerSets","sets","loadStickerSets","setIds","addedSetIds","cached","setsById","loadStickers","stickerSetId","pause","recentStickers","loadRecentStickers","favorite","favoriteStickers","loadFavoriteStickers","greeting","featured","featuredStickers","loadFeaturedStickers","stickerSetShortName","stickerSetAccessHash","stickerSet","selectStickerSet","accessHash","packs","updateStickerSet","currentEmoji","forEmoji","rebuildStickersForEmoji","replaceAnimatedEmojis","loadAnimatedEmojis","animatedEmojiEffects","loadAnimatedEmojiEffects","saved","savedGifs","loadSavedGifs","gif","shouldUnsave","newGifs","unfave","unfaveSticker","installedDate","language","currentEmojiKeywords","emojiKeywords","isLoading","fromVersion","keywords","searchStickers","title","searchWords","updateStickersForEmoji","loadStickersForEmoji","openedStickerSetShortName","searchMessagesGlobal","offsetRate","maxDate","minDate","localResult","GLOBAL_SEARCH_SLICE","totalCount","nextOffsetId","nextRate","currentSearchQuery","selectCurrentGlobalSearchQuery","updateGlobalSearchFetchingStatus","addMessages","updateGlobalSearchResults","searchSharedMedia","SHARED_MEDIA_SLICE","newFoundIds","currentSearch","selectCurrentMediaSearch","updateLocalMediaSearchResults","localChats","localUsers","globalChats","globalUsers","chatIds","userIds","searchChats","timestampPlusDay","foundIds","selectCurrentTextSearch","topMessageId","MESSAGE_SEARCH_SLICE","updateLocalTextSearchResults","searchTextMessages","currentType","currentResults","timestamp","getActions","searchMessagesByDate","ManagementProgress","username","updateManagementProgress","updateManagement","isUsernameAvailable","isChatBasicGroup","invite","editingInvite","update","inviteInfo","adminId","isRevoked","admin","revokedInvites","invites","link","expireDate","usageLimit","isRequestNeeded","oldInvite","newInvite","current","managementState","offsetDate","offsetUserId","offsetUser","currentInviteInfo","importers","isRequested","requesters","joinRequests","isApproved","targetChat","importer","recentRequesterIds","requestsPending","settings","releaseStatusTimeout","loadTopMessages","DEBUG","console","log","isSyncing","loadAllChats","preloadTopChatMessages","listType","shouldReplace","onReplace","areMessagesLoaded","draftsByChatId","editingDraft","selectEditingDraft","currentChatId","currentThreadId","currentChat","newCurrentChatId","currentMessageListInfo","originChannelId","currentMessageListInfoOrigin","resultOrigin","byIdOrigin","listedIdsOrigin","threadsById","updateChats","updateUsers","updateThread","audioChatId","audioMessageId","closeAudioPlayer","loadAndReplaceMessages","lastSyncTime","initFolderManager","runDebouncedForFetchFullUser","runThrottledForSearch","replaceInlineBotSettings","inlineBotSettings","inlineBots","byUsername","replaceInlineBotsIsLoading","userStatusesById","replaceUserStatuses","statusesById","topPeers","lastRequestedAt","loadTopUsers","contactList","getCompareString","lastName","firstName","collator","Intl","Collator","sortedUsers","compare","isSelf","loadContactList","isUserBot","commonChats","isFullyLoaded","updateUser","shouldSharePhoneNumber","updateChatMutedState","isContact","phoneNumber","phone","loadChatSettings","updateContact","deleteContact","profileId","isPrivate","isUserId","photos","userSearch","updateUserSearchFetchingStatus","searchUsers","userOrChat","runDebouncedForSearch","sendBotCommand","command","button","match","RE_TME_LINK","RE_TG_LINK","openTelegramLink","toggleSafeLinkModal","showDialog","alert","isError","answerCallbackButton","openPollModal","getReceipt","receiptMessageId","getPaymentForm","setInvoiceMessageInfo","openPaymentModal","bot","selectChatBot","removeBlockedContact","topInlineBots","inlineBotData","inlineBot","switchPm","canLoadMore","shouldReplaceSettings","newInlineBotData","currentIds","Set","newResults","help","isGallery","searchInlineBot","queryId","resultId","scheduleDate","botId","param","startParam","replaceSettings","hasPassword","updateTwoFaSettings","hint","currentPassword","onSuccess","isSuccess","password","email","waitingEmailCodeLength","code","requestInfo","saveInfo","selectPaymentChatId","selectPaymentMessageId","shouldSave","shippingOptions","setRequestInfoId","updateShippingOptions","setPaymentStep","PaymentStep","validateRequestedInfo","setPaymentForm","step","invoice","shippingAddressRequested","nameRequested","phoneRequested","emailRequested","setReceipt","receipt","nativeProvider","credentials","publishableKey","selectProviderPublishableKey","k","buildQueryString","cardNumber","expiryMonth","expiryYear","cvv","zip","country","response","fetch","method","headers","Authorization","json","getStripeError","setStripeCardInfo","sendStripeCredentials","publicToken","selectProviderPublicToken","card","number","replace","expiration_month","expiration_year","security_code","DEBUG_PAYMENT_SMART_GLOCAL","Accept","body","JSON","stringify","status","setSmartGlocalCardInfo","token","sendSmartGlocalCredentials","shippingOptionId","saveCredentials","formId","selectPaymentFormId","requestInfoId","selectPaymentRequestId","requestedInfoId","sendPaymentForm","save","selectStripeCredentials","selectSmartGlocalCredentials","MAX_MESSAGES_LIST_WIDTH","SIDE_COLUMN_MAX_WIDTH","MIN_LEFT_COLUMN_WIDTH","subtractXForEmojiInteraction","x","windowWidth","windowSize","width","MIN_SCREEN_WIDTH_FOR_STATIC_RIGHT_COLUMN","min","MIN_SCREEN_WIDTH_FOR_STATIC_LEFT_COLUMN","interactionLocalId","availableReaction","aroundAnimation","mediaLoader","ApiMediaFormat","centerIcon","availableReactions","y","localEffect","startSize","isReversed","activeEmojiInteraction","animatedEffect","INTERACTION_RANDOM_OFFSET","activeEmojiInteractions","interactions","emoticon","selectLocalAnimatedEmojiEffectByName","timestamps","reaction","selectDefaultReaction","isMessageLocal","sendReaction","isInDocumentGroup","isInAlbum","documentGroupFirstMessageId","reactions","some","isChosen","animationLevel","byKey","ANIMATION_LEVEL_MAX","activeReactions","omit","recentReactions","canSeeList","addMessageReaction","appConfig","defaultReaction","reactors","isGroup","recentTopMessages","msgId","updateStatistics","name","isPercentage","dcId","statisticsDcId","updateStatisticsGraph","areDeepEqual","value1","value2","type1","isArray1","Array","isArray","array1","array2","every","member1","object1","object2","key1","noTopChatsRequest","selectIsChatListed","loadTopChats","newProfilePhoto","closeMessageNotifications","selectChatListType","updateChatListIds","isNotJoined","requestChatUpdate","leaveChat","typingStatus","senderId","isFromScheduled","hasUnreadMention","unreadMentionsCount","notifyAboutMessage","getMessageRecentReaction","messageUpdate","channelId","selectCommonBoxChatId","folderId","ARCHIVED_FOLDER_ID","orderedPinnedIds","isPinned","newOrderedPinnedIds","MAX_ACTIVE_PINNED_CHATS","listIds","active","pinnedId","updateChatListType","folder","chatFoldersById","chatFolders","newChatFoldersById","pick","newOrderedIds","orderedId","folders","recommended","replacedMembers","addedMember","deletedMemberId","shouldUpdate","members","deleteIndex","adminMembers","isOwner","isAdmin","membersCount","photo","formattedText","loadChatJoinRequests","ANIMATION_DELAY","updateWithLocalMedia","isScheduled","currentMessage","video","document","getMessageContent","blobUrl","thumbnail","isPreloadedGlobally","previewBlobUrl","updateScheduledMessage","updateThreadUnread","selectThreadByMessage","originMessage","updateListedAndViewportIds","firstMessageId","isUnreadChatNotLoaded","addViewportId","messagesCount","firstUnreadId","candidateGlobal","updateChatLastMessage","force","currentLastMessage","findLastMessage","deleteMessages","newLastMessage","threadIdsToUpdate","deleteChatMessages","requestThreadInfoUpdate","chatsIdsToUpdate","commonBoxChatId","shouldForceReply","updateThreadInfo","newMessage","selectIsMessageInCurrentMessageList","delayedGlobal","getMessageText","localEmoji","selectLocalAnimatedEmoji","selectLocalAnimatedEmojiEffect","scheduledIds","selectScheduledIds","selectIsChatWithBot","selectScheduledMessages","deleteChatScheduledMessages","thread","markMessageListRead","currentPinnedIds","selectPinnedIds","newPinnedIds","newTheadInfo","messagesById","loadFullChat","scheduledMessages","deleteScheduledMessages","pollId","pollUpdate","selectChatMessageByPollId","updatedPoll","updatedResults","chosenAnswers","chosenAnswer","chosenAnswerIndex","recentVoterIds","totalVoters","newRecentVoterIds","newTotalVoters","targetOption","targetOptionIndex","updatedOption","votersCount","selectIsServiceChatReady","currentReactions","shouldNotify","checkIfReactionAdded","isReaction","flushStatusUpdatesThrottled","pendingStatusUpdates","statusUpdate","targetUser","isBlocked","addBlockedContact","privacy","key","rules","setConfirmPaymentUrl","updateNotifySettings","peerType","shouldShowPreviews","addNotifyException","twoFaSettings","call","connectionState","groupCalls","activeGroupCallId","leaveGroupCall","shouldRemove","removeGroupCall","updateGroupCall","participantsCount","groupCallId","participants","participant","updateGroupCallParticipant","useBeforeUnload","callback","useEffect","onBeforeUnload","metaViewport","querySelector","defaultViewportContent","getAttribute","allowedZoomViewportContent","preventEvent","preventDefault","memo","isForAppBadge","useFolderManagerForUnreadCounters","unreadNotificationsCount","getAllNotificationsCount","updateAppBadge","className","formatIntegerCompact","ConnectionStatus","useConnectionStatus","hasMiddleHeader","isMinimized","isDisabled","isOnline","setIsOnline","useState","navigator","onLine","handleChange","addEventListener","removeEventListener","useBrowserOnline","syncing","online","waitingForNetwork","toLowerCase","connectionStatus","connectionStatusPosition","connectionStatusText","onClick","useLang","dir","isRtl","Spinner","color","Transition","activeKey","Button","size","ANIMATION_LEVEL_OPTIONS","withGlobal","searchQuery","chatsById","isConnectionStatusMinimized","globalSearchChatId","searchDate","theme","selectTheme","isMessageListOpen","areChatsLoaded","contactsFilter","onSearchQuery","onSelectSettings","onSelectContacts","onSelectArchived","onReset","shouldSkipTransition","openTipsChat","setGlobalSearchDate","setSettingOption","setGlobalSearchChatId","hasMenu","LeftColumnContent","selectedSearchDate","useMemo","formatDateToString","archivedUnreadChatsCount","values","total","isChatArchived","withOtherVersions","location","hostname","MainButton","onTrigger","isOpen","ripple","ariaLabel","buildClassName","handleSearchFocus","useCallback","toggleConnectionStatus","handleSelectSaved","handleDarkModeToggle","stopPropagation","newTheme","shouldUseSystemTheme","switchTheme","handleAnimationLevelChange","newLevel","_","classList","toggle","handleSwitchToWebK","setPermanentWebVersion","clearWebsync","disableHistoryBack","handleOpenTipsChat","langCode","isSearchFocused","searchInputPlaceholder","DropdownMenu","trigger","footer","APP_NAME","APP_REVISION","MenuItem","icon","Switcher","label","checked","noAnimation","href","FEEDBACK_URL","SearchInput","inputId","parentContainerClassName","focused","spinnerColor","spinnerBackgroundColor","placeholder","autoComplete","canClose","onChange","onFocus","onSpinnerClick","PickerSelectedItem","clickArg","chatOrUserId","ShowTransition","isCustom","orderedFolderIds","activeChatFolder","shouldSkipHistoryAnimations","foldersDispatch","onScreenSelect","loadChatFolders","setActiveChatFolder","transitionRef","useRef","displayedFolders","folderCountersById","folderTabs","ALL_FOLDER_ID","badgeCount","chatsCount","isBadgeActive","notificationsCount","handleSwitchTab","forceOnHeavyAnimation","captureEvents","selectorToPreventScroll","onSwipe","SwipeDirection","isNotInAllTabRef","captureEscKeyListener","useHistoryBack","handleKeyDown","ctrlKey","shiftKey","startsWith","digit","shouldRender","shouldRenderPlaceholder","transitionClassNames","useShowTransition","renderCurrentTab","activeFolder","ChatList","folderType","TabList","tabs","activeTab","onSwitchTab","ref","renderCount","props","LeftSearch","useModuleLoader","Bundles","Loading","ContactList","isShown","onNewPrivateChat","onNewChannel","onNewGroup","isMenuOpen","setIsMenuOpen","fabClassName","toggleIsMenuOpen","handleClose","tabIndex","Menu","positionX","positionY","autoClose","onClose","TRANSITION_RENDER_COUNT","closeTimeout","onContentChange","isNewChatButtonShown","setIsNewChatButtonShown","isMouseInside","handleSelectSettings","handleSelectContacts","handleSelectNewChannel","handleSelectNewGroup","handleSelectArchived","handleMouseEnter","handleMouseLeave","autoCloseTimeout","shouldRenderUpdateButton","updateButtonClassNames","handleUpdateClick","isAppOutdated","markIsAppOutdated","useFlag","timeout","reload","useAppOutdatedCheck","onMouseEnter","onMouseLeave","shouldCleanup","cleanupExceptionKey","fluid","pill","Settings","NewChat","ArchivedChats","ContentType","RENDER_COUNT","setGlobalSearchQuery","resetChatCreation","loadPasswordInfo","clearTwoFaError","setLeftColumnWidth","resetLeftColumnWidth","resizeRef","setContent","settingsScreen","setSettingsScreen","SettingsScreens","setContactsFilter","foldersState","useFoldersReducer","lastResetTime","setLastResetTime","contentType","Main","Archived","NewChannel","NewGroup","handleReset","forceReturnToChatList","pickerSearchInput","getElementById","blur","handleSearchQuery","IS_MAC_OS","metaKey","getKeyFromEvent","initResize","resetResize","handleMouseUp","elementRef","onResize","initialWidth","markIsActive","unmarkIsActive","initialMouseX","setInitialMouseX","initialElementWidth","setInitialElementWidth","remove","style","handleMouseMove","newWidth","ceil","clientX","stopDrag","cleanup","offsetWidth","add","useResize","handleSettingsScreenSelect","LAYERS_ANIMATION_NAME","currentScreen","isChannel","onMouseDown","onMouseUp","onDoubleClick","setSize","handleResize","HeaderMenuContainer","isChatChannel","selectIsInSelectMode","noMenu","isChatWithSelf","selectIsChatWithSelf","isMainThread","isDiscussionThread","isRightColumnShown","canRestartBot","selectIsUserBlocked","canStartBot","selectIsChatBotNotStarted","canSubscribe","isChatSuperGroup","canSearch","canCall","ARE_CALLS_SUPPORTED","canMute","canLeave","canEnterVoiceChat","isCallActive","canCreateVoiceChat","adminRights","manageCall","isCreator","canViewStatistics","pendingJoinRequests","canExpandActions","joinChannel","openLocalTextSearch","restartBot","openCallFallbackConfirm","requestNextManagementScreen","menuButtonRef","menuPosition","setMenuPosition","handleHeaderMenuOpen","rect","getBoundingClientRect","right","bottom","handleHeaderMenuClose","handleHeaderMenuHide","handleSubscribeClick","handleStartBot","handleRestartBot","handleJoinRequestsClick","ManagementScreens","handleSearchClick","focus","searchInput","IS_PWA","disabled","anchor","withExtraActions","onSubscribeChannel","onSearchClick","onCloseAnimationEnd","useWebpThumbnail","thumbDataUri","getMessageMediaThumbDataUri","shouldDecodeThumbnail","isWebpSupported","thumbnailDecoded","setThumbnailDecoded","EMPTY_IMAGE_DATA_URI","useLayoutEffect","webpToPngBase64","then","catch","drawRect","height","radius","containerRef","markupParams","reverseIndex","barHeight","getBarHeight","markHeight","getMarkHeight","trackHeight","getTrackHeight","clipPathId","clipPath","d","getClipPath","markTranslateY","getMarkTranslateY","trackTranslateY","getTrackTranslateY","calculateMarkup","firstChild","firstElementChild","currentElement","transform","svg","div","defs","innerHTML","customTitle","onUnpinMessage","onAllPinnedClick","mediaThumbnail","mediaBlobUrl","useMedia","getMessageMediaHash","renderMessageSummary","isUnpinDialogOpen","openUnpinDialog","closeUnpinDialog","handleUnpinMessage","ConfirmDialog","confirmLabel","confirmHandler","getPictogramDimensions","src","alt","renderPictogram","RippleEffect","scaleImage","image","ratio","outputType","Blob","URL","createObjectURL","img","Image","onload","scale","blob","Error","finally","revokeObjectURL","steppedScale","bitmap","createImageBitmap","resizeWidth","resizeHeight","resizeQuality","res","canvas","createElement","ctx","getContext","transferFromImageBitmap","drawImage","toBlob","oc","octx","mul","cur","LOGO_DIMENSIONS","MINIMAL_SIZE","audio","voice","fileName","artist","performer","getTranslation","album","getChatTitle","audioCoverHash","getAudioHasCover","avatarHash","getChatAvatarHash","media","thumbnailSizes","preferred","AVATAR_FULL_DIMENSIONS","getCoverSize","fn","deps","defaultValue","setIsLoading","setError","setResult","wasCancelled","telegramLogoPath","resizeImage","makeGoodArtwork","useAsync","buildMediaMetadata","artwork","noUi","setAudioPlayerVolume","setAudioPlayerPlaybackRate","setAudioPlayerMuted","isVoice","senderName","mediaData","mediaMetadata","useMessageMediaMetadata","playPause","stop","isPlaying","requestNextTrack","requestPreviousTrack","isFirst","isLast","setVolume","toggleMuted","setPlaybackRate","useAudioPlayer","makeTrackId","getMediaDuration","isVoicePlaying","handleClick","clearMediaSession","handleVolumeChange","handleVolumeClick","handlePlaybackClick","volumeIcon","renderText","renderAudio","subtitle","renderVoice","withClickPropagation","RangeSlider","bold","groupCall","selectChatGroupCall","usersById","isLoaded","isCallNotEmpty","hasPinnedOffset","joinGroupCall","subscribeToGroupCallUpdates","handleJoinGroupCall","fetchedParticipants","isUser","subscribed","p","Avatar","openAddContactDialog","blockContact","reportSpam","deleteChat","leaveChannel","deleteChatUser","deleteHistory","toggleChatArchived","hideChatReportPanel","isBlockUserModalOpen","openBlockUserModal","closeBlockUserModal","shouldReportSpam","setShouldReportSpam","shouldDeleteChat","setShouldDeleteChat","isAutoArchived","canReportSpam","canAddContact","canBlockContact","isBasicGroup","handleAddContact","handleConfirmBlock","contactId","handleCloseReportPanel","handleChatReportSpam","isText","getUserFirstOrLastName","getUserFullName","isButtonsInOneRow","confirmIsDestructive","Checkbox","onCheck","audioMessage","pinnedIds","state","isSelectModeActive","isChatWithBot","currentTransitionKey","assign","pinnedMessageId","topMessageSender","selectForwardedSender","pinnedMessageIds","canUnpin","firstPinnedMessage","isReady","openChatWithInfo","pinMessage","openPreviousChat","toggleLeftColumn","isBackButtonActive","pinnedMessageIndex","setPinnedMessageIndex","pinnedMessage","pinnedMessagesCount","chatTitleLength","topMessageTitle","useEnsureMessage","useWindowSize","isLeftColumnHideable","shouldShowCloseButton","componentRef","shouldAnimateTools","handleHeaderClick","handlePinnedMessageClick","cycleRestrict","handleAllPinnedClick","setBackButtonActive","handleBackClick","messageInput","EDITABLE_INPUT_ID","canToolsCollideWithChatInfo","SAFE_SCREEN_WIDTH_FOR_CHAT_INFO","MOBILE_SCREEN_MAX_WIDTH","shouldUseStackedToolsClass","SAFE_SCREEN_WIDTH_FOR_STATIC_RIGHT_COLUMN","hasChatSettings","shouldShowChatReportPanel","chatReportPanelClassNames","renderingChatSettings","useCurrentOrPrev","shouldRenderAudioPlayer","audioPlayerClassNames","renderingAudioMessage","shouldRenderPinnedMessage","pinnedMessageClassNames","renderingPinnedMessage","renderingPinnedMessagesCount","renderingCanUnpin","renderingPinnedMessageTitle","canRevealTools","componentEl","renderBackButton","asClose","withUnreadCounter","isAudioPlayerRendered","PrivateChatInfo","withDots","withFullInfo","withMediaViewer","withUpdatingStatus","noRtl","GroupChatInfo","getMessageKey","isAlbum","messageOrAlbum","groupMessages","currentAlbum","currentSenderGroup","currentDateGroup","originalDate","datetime","getDayStartAt","senderGroups","dateGroups","mainMessage","albumId","nextMessage","nextMessageDayStartsAt","isActionMessage","forwardInfo","senderUserId","hiddenUserName","inlineButtons","INTERSECTION_THROTTLE_FOR_MEDIA","IS_ANDROID","INTERSECTION_MARGIN_FOR_MEDIA","isEmojiOnlyMessage","customShape","getMinMediaWidth","hasText","hasCommentButton","calculateMediaDimensions","noAvatars","isOwn","isOwnMessage","isForwarded","isForwardedMessage","getMessagePhoto","getMessageWebPagePhoto","getMessageVideo","isWebPagePhoto","calculateInlineImageDimensions","calculateVideoDimensions","minMediaWidth","stretchFactor","finalWidth","finalHeight","isSmall","accumulate","list","initValue","accumulator","item","clamp","num","low","high","calculateContainerSize","layout","styles","dimensions","sides","calculateAlbumLayout","ratios","getRatios","proportions","getProportions","averageRatio","getAverageRatio","albumCount","forceCalc","maxWidth","getAvailableWidth","REM","minWidth","maxHeight","spacing","originalRatios","cropRatios","attempts","pushAttempt","lineCounts","heights","currentCount","attemptCount","sum","multiHeight","first","second","third","fourth","optimalAttempt","optimalDiff","lineCount","totalHeight","bad1","bad2","line","diff","abs","optimalCounts","optimalHeights","rowCount","row","colCount","lineHeight","col","layoutWithComplexLayouter","AlbumRectPart","layoutTwoTopBottom","layoutTwoLeftRightEqual","minimalWidth","secondWidth","firstWidth","layoutTwoLeftRight","layoutTwo","firstHeight","thirdHeight","secondHeight","rightWidth","leftWidth","layoutThreeLeftAndOther","layoutThreeTopAndOther","layoutThree","w","h0","h","w0","w2","w1","h1","layoutFourTopAndOther","h2","layoutFourLeftAndOther","layoutFour","containerStyle","element","calculateAuthorWidth","font","whiteSpace","left","opacity","appendChild","useFocusMessage","isFocused","focusDirection","noFocusHighlight","messagesContainer","closest","fastSmoothScroll","QUICK_REACTION_AREA_WIDTH","QUICK_REACTION_AREA_HEIGHT","GROUP_MESSAGE_HOVER_ATTRIBUTE","useOuterHandlers","selectMessage","isInSelectMode","canReply","isProtected","onContextMenu","handleBeforeContextMenu","isContextMenuShown","contentRef","shouldHandleMouseLeave","sendDefaultReaction","isQuickReactionVisible","markQuickReactionVisible","unmarkQuickReactionVisible","isSwiped","markSwiped","unmarkSwiped","doubleTapTimeoutRef","startedAt","onRelease","handleMouseDown","preventMessageInputBlur","clearInterval","pageX","pageY","handleDoubleTap","target","contains","handleTap","handleContextMenu","stopEvent","matches","handleDoubleClick","handleContentDoubleClick","container","clientY","isVisibleX","isVisibleY","handleSendQuickReaction","currentTarget","lastGroupElement","getLastElementInDocumentGroup","removeAttribute","handleDocumentGroupMouseLeave","handleDocumentGroupMouseEnter","setAttribute","nextElementSibling","ContextMenuContainer","targetUserIds","targetChatId","targetMessageId","targetMessage","selectIsMessageFocused","focusedMessage","isChat","senderUser","senderChat","observeIntersection","isEmbedded","appearanceOrder","isLastInList","useOnIntersect","noAppearanceAnimation","markShown","targetUsers","renderActionMessageText","asTextWithSpoilers","isContextMenuOpen","contextMenuPosition","handleContextMenuClose","handleContextMenuHide","useContextMenuHandlers","getMessageHtmlId","customText","isIntersecting","useIsIntersecting","isRoundVideo","getMessageRoundVideo","senderTitle","draggable","activeReaction","isInMeta","stopActiveReaction","r","centerIconId","effectId","mediaDataCenterIcon","mediaDataEffect","shouldPlay","shouldRenderAnimation","animationClassNames","handleEnded","isAnimationLoaded","markAnimationLoaded","unmarkAnimationLoaded","shouldRenderStatic","ReactionStaticEmoji","AnimatedSticker","animationData","play","noLoop","onLoad","onEnded","outgoingStatus","signature","withReactions","withReactionOffset","reactionMessage","isActivated","markActivated","createDateTime","formatDateTimeToString","editDateTime","isEdited","editDate","forwardedDateTime","views","formatTime","MessageOutgoingStatus","observeIntersectionForPlaying","shouldLoop","isModalOpen","openModal","closeModal","isLottie","isVideo","canDisplayVideo","IS_WEBM_SUPPORTED","isMemojiSticker","NO_STICKER_SET_ID","shouldLoad","mediaHash","previewMediaHash","previewUrl","getMessageMediaFormat","isMediaLoaded","isLottieLoaded","markLottieLoaded","isMediaReady","useMediaTransition","getStickerDimensions","thumbClassName","stickerClassName","safePlay","autoPlay","playsInline","loop","muted","fromSticker","useBlurredMediaThumbRef","fullMediaData","useCanvasBlur","IS_CANVAS_FILTER_SUPPORTED","SELECTED_APPENDIX_COLORS","dark","outgoing","incoming","light","getCustomAppendixBg","inSelectMode","isSelected","getImageData","getAppendixColorFromImage","canAutoLoad","uploadProgress","nonInteractive","shouldAffectAppendix","isDownloading","onCancelUpload","localBlobUrl","isLoadAllowed","setIsLoadAllowed","loadProgress","useMediaWithLoadProgress","thumbRef","downloadProgress","isUploading","isTransferring","transferProgress","getMediaTransferState","wasLoadDisabled","usePrevious","shouldRenderSpinner","spinnerClassNames","shouldRenderDownloadButton","downloadButtonClassNames","isAllowed","contentEl","appendixBg","setProperty","CUSTOM_APPENDIX_ATTRIBUTE","ProgressSpinner","useVideoAutoPause","playerRef","canPlay","wasPlaying","paused","canPlayRef","freezePlaying","unfreezePlaying","unfreezePlayingOnRaf","fastRaf","useBackgroundMode","useHeavyAnimationCheck","canAutoPlay","videoRef","getMessageWebPageVideo","isPlayAllowed","setIsPlayAllowed","previewClassNames","isInline","isBuffered","bufferingHandlers","useBuffering","shouldRenderPlayButton","playButtonClassNames","playProgress","setPlayProgress","handleTimeUpdate","currentTime","duration","useVideoCleanup","cancelMessageMediaDownload","onTimeUpdate","isGif","formatMediaDuration","contact","countryList","phoneCodes","phoneCodeList","formatPhoneNumberWithCode","getPercentage","toFixed","answer","voteResults","maxVotersCount","correctResults","shouldAnimate","correctAnswer","showIcon","answerPercent","finalPercent","setFinalPercent","lineRef","lineWidth","isAnimationDoesNotStart","lineEl","svgEl","lineStyle","onSendVote","openPollResults","summary","isSubmitting","setIsSubmitting","chosenOptions","setChosenOptions","isSolutionShown","setIsSolutionShown","wasSubmitted","setWasSubmitted","closePeriod","setClosePeriod","closed","closeDate","countdownRef","hasVoted","canVote","canViewResult","isPublic","isMultiple","multipleChoice","answers","isCorrect","hidden","quiz","countdownEl","circumference","PI","lastElementChild","timerEl","strokeDashOffset","textContent","timer","recentVoters","handleRadioChange","handleCheckboxChange","handleVoteClick","handleViewResultsClick","handleSolutionShow","handleSolutionHide","solution","Notification","renderTextWithEntities","solutionEntities","onDismiss","containerId","question","getPollTypeString","CheckboxGroup","loadingOptions","RadioGroup","loadingOption","isQuiz","getReadableVotersCount","inPreview","onMediaClick","onCancelMediaTransfer","webPage","getMessageWebPage","isSquarePhoto","handleMediaClick","siteName","displayUrl","isMediaInteractive","truncatedDescription","trimText","SafeLink","getMessageInvoice","amount","currency","isTest","photoUrl","formatCurrency","VENUE_COLORS","entries","arts_entertainment","building","education","event","food","home","nightlife","parks_outdoors","shops","travel","work","RANDOM_COLORS","variant","animation","classNames","MOVE_THRESHOLD","DEFAULT_MAP_CONFIG","zoom","SVG_PIN","__html","forceUpdate","useForceUpdate","getMessageLocation","geo","serverTime","isExpired","isGeoLiveExpired","secondsBeforeEnd","period","point","setPoint","shouldRenderText","buildStaticMapHash","prevMediaBlobUrl","mapBlobUrl","isPeerUser","avatarUser","avatarChat","accuracyRadiusPx","accuracyRadius","lat","cos","getMetersPerPixel","updateCountdown","timeLeft","formatCountdownShort","long","useTimeout","useInterval","prepareMapUrl","open","pinClassName","dangerouslySetInnerHTML","heading","str","prevHash","currVal","charCodeAt","getVenueColor","venueType","getVenueIconUrl","mapPin","renderPin","renderOverlay","address","formatLastUpdated","renderInfo","withSelectControl","WrappedComponent","ownProps","selectIsMessageSelected","handleMessageSelect","newProps","dims","PhotoWithSelect","Photo","VideoWithSelect","Video","activeDownloadIds","selectActiveDownloadIds","uploadsById","hasCustomAppendix","albumLayout","cancelSendingMessage","mediaCount","handleCancelUpload","containerWidth","containerHeight","fileUpload","selectCanAutoLoadMedia","selectCanAutoPlayMedia","stopPrevious","playingProgressRef","shouldSpinnerRender","setIsActivated","setProgress","svgCenter","ROUND_VIDEO_DIMENSIONS_PX","playerEl","playingProgressEl","stopPlaying","capturePlaying","stopCurrentAudio","videoClassName","recentReplierIds","recentRepliers","peerId","hasUnread","recentReactors","recentReaction","isOutside","metaChildren","localSticker","soundId","playKey","useAnimatedEmoji","localStickerAnimationData","setLocalStickerAnimationData","getAnimationData","quality","APPENDIX_OWN","APPENDIX_NOT_OWN","withSenderName","withAvatar","isLastInDocumentGroup","viaBotId","replyToChatId","isRepliesChat","isChatWithRepliesBot","chatUsername","forceSenderName","isAnonymousOwnMessage","canShowSender","originSender","botSender","threadTopMessageId","isThreadTop","shouldHideReply","replyMessageSender","selectUploadProgress","isForwarding","highlight","singleEmoji","getMessageSingleEmoji","selectIsDownloading","actualThreadInfo","selectIsMessageProtected","isSingleEmoji","animatedEmoji","selectAnimatedEmoji","animatedEmojiEffect","selectAnimatedEmojiEffect","animatedEmojiSoundId","selectAnimatedEmojiSound","isGroupSelected","selectIsDocumentGroupSelected","isPinnedList","canAutoLoadMedia","canAutoPlayMedia","autoLoadFileMaxSizeMb","shouldLoopStickers","selectShouldLoopStickers","selectOutgoingStatus","observeIntersectionForBottom","observeIntersectionForMedia","observeIntersectionForAnimatedStickers","areReactionsInMeta","noComments","isFirstInGroup","isLastInGroup","isFirstInDocumentGroup","clickInlineButton","bottomMarkerRef","isLocal","hasReply","isReplyMessage","hasThread","getMessageCustomShape","hasAnimatedEmoji","hasReactions","areReactionsEmpty","asForwarded","isLinkedChannelPost","isInDocumentGroupNotFirst","isInDocumentGroupNotLast","canShowActionButton","canForward","canFocus","isChannelPost","fromMessageId","withCommentButton","withQuickReactionButton","messageSender","avatarPeer","senderPeer","handleAvatarClick","handleSenderClick","handleViaBotClick","handleReplyClick","handleAudioPlay","handleAlbumMediaClick","handleMetaClick","handleReadMedia","handleVoteSend","handleGroupForward","handleForward","handleFocus","handleFocusForwarded","handleDocumentGroupSelectAll","openMediaViewer","openAudioPlayer","markMessagesRead","sendPollVote","focusMessageInComments","replyToTopMessageId","channelPostId","MediaViewerOrigin","albumMessageId","selectWithGroupedId","useInnerHandlers","containerClassName","contentClassName","hasComments","hasActionButton","isGeoLiveActive","isMedia","isMediaWithNoText","isViaBot","isRound","buildContentClassName","withAppendix","textParts","renderMessageText","metaPosition","reactionsPosition","calculatedWidth","noMediaCorners","extraPadding","adminTitle","metaSafeAuthorWidth","renderReactionsAndMeta","meta","onMouseMove","isAvatarPeerUser","hiddenName","renderAvatar","textContentClass","senderColor","getUserColorKey","renderSenderName","AnimatedEmoji","effect","forceLoadPreview","Audio","AudioOrigin","isSelectable","onPlay","onReadMedia","Document","renderContent","isBot","channel","viewSponsoredMessage","openChatByInvite","startBot","shouldObserve","observe","useIntersectionObserver","rootRef","debounceMs","threshold","chatInviteHash","chatInviteTitle","messageGroups","isViewportNewest","withUsers","anchorIdRef","memoUnreadDividerBeforeIdRef","memoFirstUnreadIdRef","isScrollingRef","isScrollPatchNeededRef","hasLinkedChat","isSchedule","onFabToggle","onNotchToggle","openHistoryCalendar","observeIntersectionForReading","throttleMs","margin","freeze","freezeForReading","unfreeze","unfreezeForReading","mentionIds","entry","dataset","useMessageObservers","backwardsTriggerRef","forwardsTriggerRef","fabTriggerRef","loadMoreBackwards","loadMoreForwards","toggleScrollTools","offsetHeight","scrollHeight","scrollTop","scrollBottom","isAtBottom","MESSAGE_LIST_SENSITIVE_AREA","LOCAL_MESSAGE_ID_BASE","triggerEntry","IS_SCROLL_PATCH_NEEDED","observeIntersectionForFab","freezeForFab","unfreezeForFab","FAB_THRESHOLD","observeIntersectionForNotch","freezeForNotch","unfreezeForNotch","useOnChange","useScrollHooks","unreadDivider","messageCountToAnimate","messageGroup","flatten","appearanceIndex","dateGroup","dateGroupIndex","dateGroupsArray","senderGroup","senderGroupIndex","senderGroupsArray","compact","currentDocumentGroupId","messageIndex","isMessageAlbum","documentGroupId","nextDocumentGroupId","originalId","getMessageOriginalId","teactFastList","SCHEDULED_WHEN_ONLINE","formatHumanDate","dividend","getUserIdDividend","lastUnreadMessageId","loadGreetingStickers","handleStickerSelect","selectedSticker","StickerButton","noContextMenu","isGroupChatJustCreated","renderScheduled","renderSavedMessages","renderGroup","runDebouncedForScroll","selectCurrentMessageIds","restrictionReason","focusingId","withLastMessageWhenPreloading","chatBot","botDescription","isChatLoaded","isChannelChat","isGroupChat","isChatGroup","threadFirstMessageId","selectFirstMessageId","linkedChatId","hasTools","canPost","withBottomShift","setScrollOffset","loadSponsoredMessages","loadMessageReactions","copyMessagesByIds","scrollOffsetRef","selectScrollOffset","anchorTopRef","listItemElementsRef","memoFocusingIdRef","isScrollTopJustUpdatedRef","shouldAnimateAppearanceRef","setContainerHeight","onTickEnd","handleCopy","getMessageIdsForSelectedText","useNativeCopySelectedMessages","listedMessages","orderBy","loadMoreAround","isScrolled","updateStickyDates","markIsScrolled","runDebounced","useDebounce","currentStuck","stuckDateEl","allElements","querySelectorAll","containerTop","el","offsetTop","top","findStuckDate","useStickyDates","handleScroll","parentElement","observer","ResizeObserver","offsetParent","contentRect","disconnect","windowHeight","normalHeight","String","clientHeight","preservedItemElements","useLayoutEffectWithPrevDeps","prevMessageIds","prevIsViewportNewest","prevContainerHeight","hasLastMessageChanged","hasViewportShifted","wasMessageAdded","isAlreadyFocusing","shouldForceScroll","lastItemElement","bottomOffset","newScrollTop","isResized","isAnimatingScroll","patchChromiumScroll","resetScroll","useEffectWithPrevDeps","prevIsSelectModeActive","dispatchHeavyAnimationEvent","shouldRenderGreeting","onScroll","backgroundColor","withExtraShift","focusNextReply","messageElements","lastMessageElement","MAX_QUICK_IMG_SIZE","FILE_EXT_REGEX","buildAttachment","filename","isQuick","mimeType","quick","SUPPORTED_IMAGE_CONTENT_TYPES","preloadImage","resizedUrl","fetchBlob","SUPPORTED_VIDEO_CONTENT_TYPES","videoWidth","videoHeight","preloadVideo","createPosterForVideo","insertHtmlInSelection","html","selection","getSelection","getRangeAt","rangeCount","range","deleteContents","fragment","createContextualFragment","lastInsertedNode","lastChild","insertNode","setStartAfter","setEndAfter","collapse","removeAllRanges","addRange","resetInput","applyIosAutoCapitalizationFix","inputEl","POLYFILL_OPTIONS","encoderPath","reuseWorker","BLOB_PARAMS","opusRecorderPromise","OpusRecorder","mediaRecorder","init","default","start","analyzerCallback","startMediaRecorder","pausedAt","chunks","waveform","ondataavailable","typedArray","releaseAnalyzer","recorder","source","sourceNode","analyser","context","createAnalyser","fftSize","connect","dataLength","frequencyBinCount","dataArray","Uint8Array","isDestroyed","tick","getByteFrequencyData","requestAnimationFrame","subscribeToAnalyzer","reject","onstop","onerror","delayStop","CLIPBOARD_ACCEPTED_TYPES","useDebouncedMemo","resolverFn","ms","dependencies","setValue","isFrozen","INLINE_BOT_QUERY_REGEXP","HAS_NEW_LINE","MEMO_NO_RESULT","canShowHelp","usernameLowered","tempEl","runThrottled","RE_COMMAND","DeleteMessageModal","openTimeout","isFirstTimeActivation","onActivate","buttonProps","isButtonVisible","canAttachMedia","canAttachPolls","onFileSelect","onPollCreate","isAttachMenuOpen","openAttachMenu","closeAttachMenu","markMouseInside","useMouseInside","handleToggleAttachMenu","handleFileSelect","files","handleQuickSelect","openSystemFilesDialog","CONTENT_TYPES_WITH_PREVIEW","handleDocumentSelect","ariaControls","hasPopup","noCloseOnBackdrop","ariaLabelledBy","SymbolMenu","InlineBotTooltip","MentionTooltip","StickerTooltip","BotCommandTooltip","isKeyboardSingleUse","forceOpen","markForceOpen","unmarkForceOpen","keyboardButtons","noCompact","forwardMessageIds","forwardedMessagesCount","onClear","exitForwardMode","canAnimate","useAsyncRendering","clearEmbedded","handleMessageClick","faded","AttachmentModal","BotCommandMenu","PollModal","DropArea","RE_LINK","RegExp","RE_LINK_TEMPLATE","messageText","toggleMessageWebPage","linkEntity","ApiMessageEntityTypes","textMatch","renderingWebPage","handleClearWebpagePreview","webPageWithoutPhoto","messageStub","SendAsMenu","MainButtonState","VOICE_RECORDING_FILENAME","REPLIES_USER_ID","messageWithActualBotKeyboard","selectNewestMessageWithBotKeyboardButtons","shouldSuggestStickers","baseEmojiKeywords","BASE_EMOJI_KEYWORD_LANG","botKeyboardMessageId","keyboardMessage","defaultSendAsId","anonymous","sendAsUser","selectEditingScheduledDraft","editingMessage","canScheduleUntilOnline","selectCanScheduleUntilOnline","withScheduledButton","shouldSchedule","botKeyboardPlaceholder","keyboardPlaceholder","stickersForEmoji","groupChatMembers","topInlineBotIds","isInlineBotLoading","chatBotCommands","botCommands","dropAreaState","onDropHide","clearDraft","setStickerSearchQuery","setGifSearchQuery","closePollModal","addRecentEmoji","sendInlineBotResult","loadSendAs","appendixRef","setHtml","htmlRef","useStateRef","lastMessageSendTimeSeconds","prevDropAreaState","canShowSendAs","isSymbolMenuForced","forceShowSymbolMenu","cancelForceShowSymbolMenu","sendMessageAction","useSendMessageAction","handleScheduleCancel","requestCalendar","calendar","useSchedule","shouldAnimateSendAsButtonRef","prevChatId","prevSendAsIds","setAttachments","isBotKeyboardOpen","openBotKeyboard","closeBotKeyboard","isBotCommandMenuOpen","openBotCommandMenu","closeBotCommandMenu","isSymbolMenuOpen","openSymbolMenu","closeSymbolMenu","isSendAsMenuOpen","openSendAsMenu","closeSendAsMenu","isDeleteModalOpen","openDeleteModal","closeDeleteModal","isSymbolMenuLoaded","onSymbolMenuLoadingComplete","isHoverDisabled","disableHover","enableHover","startRecordingVoice","stopRecordingVoice","pauseRecordingVoice","activeVoiceRecording","currentRecordTime","recordButtonRef","mainButtonRef","startRecordTimeRef","setActiveVoiceRecording","setCurrentRecordTime","IS_SAFARI","IS_VOICE_RECORDING_SUPPORTED","voiceRecording","tickVolume","boxShadow","useVoiceRecording","SEND_MESSAGE_ACTION_INTERVAL","mainButtonState","Edit","Schedule","Send","Record","canShowCustomSendMenu","isMentionTooltipOpen","closeMentionTooltip","insertMention","mentionFilteredUsers","useMentionTooltip","isInlineBotTooltipOpen","inlineBotId","isInlineBotTooltipGallery","inlineBotSwitchPm","inlineBotResults","closeTooltip","closeInlineBotTooltip","inlineBotHelp","loadMore","loadMoreForInlineBot","queryInlineBot","resetInlineBot","markIsOpen","unmarkIsOpen","innerText","getPlainText","parseBotQuery","prevQuery","prevUsername","useInlineBotTooltip","isBotCommandTooltipOpen","close","closeBotCommandTooltip","filteredBotCommands","botTooltipCommands","setFilteredBotCommands","getFilteredCommands","nextFilteredBotCommands","prepareForRegExp","substr","useBotCommandTooltip","isCustomSendMenuOpen","canSendStickers","canSendGifs","canAttachEmbedLinks","getAllowedAttachmentOptions","isChatAdmin","slowMode","getChatSlowModeOptions","isStickerTooltipOpen","closeStickerTooltip","cleanHtml","trim","clearStickersForEmoji","IS_EMOJI_SUPPORTED","parseEmojiOnlyString","hasStickers","useStickerTooltip","isEmojiTooltipOpen","closeEmojiTooltip","filteredEmojis","insertEmoji","useEmojiTooltip","insertTextAndUpdateCursor","newHtml","selectionRange","isSelectionInsideInput","dispatchEvent","Event","bubbles","focusEditableElement","removeSymbol","execCommand","tempInput","contentEditable","textLength","createRange","setStart","setEnd","removeChild","deleteLastCharacterOutsideSelection","resetComposer","shouldPreserveInput","stopRecordingVoiceRef","handleEditComplete","handleEditCancel","editedMessage","editMessage","setEditingDraft","prevEditedMessage","getTextWithEntitiesAsHtml","edited","restoreNewDraftAfterEditing","hasMessageMedia","handleBlur","useEditing","saveDraft","updateDraft","draftChatId","draftThreadId","currentHtml","runDebouncedForSaveDraft","DRAFT_DEBOUNCE","prevThreadId","prevHtml","useDraft","handlePaste","clipboardData","input","activeElement","EDITABLE_INPUT_MODAL_ID","pastedText","getData","substring","items","getFilesFromDataTransferItems","newAttachments","all","file","useClipboardPaste","handleEmbeddedClear","handleAppendFiles","handleClearAttachment","handleSend","currentAttachments","record","maxLength","extraLength","textParams","nowSeconds","secondsSinceLastMessage","nextSendDateNotReached","nextSendDate","seconds","secondsRemaining","isSlowMode","handleActivateBotCommandMenu","handleActivateSymbolMenu","handleMessageSchedule","args","restArgs","isScheduleRequested","handleGifSelect","handleInlineBotSelect","inlineResult","handleBotCommandSelect","handlePollSend","handleSendSilent","handleSearchOpen","handleSymbolMenuOpen","handleSendAsMenuOpen","handleAllScheduledClick","mainButtonHandler","areVoiceMessagesNotAllowed","renderedEditedMessage","scheduledDefaultDate","setSeconds","setMilliseconds","scheduledMaxDate","setFullYear","getFullYear","sendButtonAriaLabel","symbolMenuButtonClassName","handleSendScheduled","onSend","DropAreaState","withQuick","onHide","caption","onCaptionUpdate","onSendSilent","onSendScheduled","onFileAppend","shouldBeAnonimous","selectedSendAsId","onInsertUserName","filteredUsers","onSelectResult","isSavedMessages","withUsername","MessageInput","forcedPlaceholder","canAutoFocus","shouldSuppressFocus","shouldSuppressTextFormatter","onUpdate","onSuppressedFocus","formatVoiceRecordDuration","onStickerSelect","emojis","onEmojiSelect","onGifSelect","onRemoveSymbol","onSearchOpen","onSendSchedule","MobileSearch","MessageSelectToolbar","UnpinAllMessagesModal","PaymentModal","ReceiptModal","SeenByModal","EmojiInteractionAnimation","ReactorListModal","CLOSE_ANIMATION_DURATION","isImage","kind","isBlurred","isBackgroundBlurred","background","customBackground","patternColor","themes","isMobileSearchActive","isReceiptModalOpen","isSeenByModalOpen","isReactorListModalOpen","getCanPostInChat","isBotNotStarted","isPinnedMessageList","isScheduledMessageList","areChatSettingsLoaded","currentUserBannedRights","defaultBannedRights","hasPinnedOrAudioPlayer","loadUser","closePaymentModal","clearReceipt","setDropAreaState","isFabShown","setIsFabShown","isNotchShown","setIsNotchShown","isUnpinModalOpen","setIsUnpinModalOpen","renderingChatId","usePrevDuringAnimation","renderingThreadId","renderingMessageListType","renderingCanSubscribe","renderingCanStartBot","renderingCanRestartBot","renderingCanPost","renderingHasTools","renderingIsFabShown","renderingIsChannel","prevTransitionKey","handleOpenEnd","handleSlideStop","withAnimations","setIsReady","willSwitchMessageList","propertyName","useIsReady","ANIMATION_LEVEL_MIN","visualViewport","documentElement","handleDragEnter","dataTransfer","shouldDrawQuick","handleHideDropArea","handleOpenUnpinModal","closeUnpinModal","handleUnpinAllMessages","handleTabletFocus","customBackgroundValue","settingValue","cacheApi","CUSTOM_BG_CACHE_NAME","Type","useCustomBackground","MASK_IMAGE_DISABLED","messagingDisabledClassName","messageSendingRestrictionReason","getMessageSendingRestrictionReason","composerHiddenScale","toolbarHiddenScale","composerTranslateX","toolbarTranslateX","unpinHiddenScale","toolbarForUnpinHiddenScale","sidePadding","messageListWidth","rightColumnWidth","getMessageListWidth","sendButtonWidth","composerWidth","toolbarWidth","calculateMiddleFooterTransforms","footerClassName","forceSyncOnIOs","createMessageHash","isMessagingDisabled","withMessageListBottomShift","onTransitionEnd","DARK_THEME_BG_COLOR","LIGHT_THEME_BG_COLOR","onDragEnter","onStop","onUnpin","teactOrderKey","HeaderContent","isProfile","isManagement","messageSearchQuery","stickerSearchQuery","selectCurrentStickerSearch","gifSearchQuery","selectCurrentGifSearch","getCanAddContact","canManage","isEditingInvite","isColumnOpen","isSearch","isStatistics","isStickerSearch","isGifSearch","isPollResults","isAddingChatMembers","profileState","managementScreen","shouldSkipAnimation","setLocalTextSearchQuery","searchTextMessagesLocal","toggleManagement","toggleStatistics","setEditingExportedInvite","deleteExportedChatInvite","backButtonRef","isDeleteDialogOpen","openDeleteDialog","closeDeleteDialog","handleEditInviteClick","handleDeleteInviteClick","handleMessageSearchQueryChange","handleStickerSearchQueryChange","handleGifSearchQueryChange","setShouldSkipTransition","contentKey","ProfileState","Profile","SharedMedia","MemberList","Search","PollResults","StickerSearch","GifSearch","AddingMembers","ManageInitial","ManageChatPrivacyType","ManageDiscussion","ManageChannelSubscribers","ManageGroupPermissions","ManageChatAdministrators","ManageGroupRemovedUsers","ManageChannelRemovedUsers","ManageGroupUserPermissionsCreate","ManageGroupUserPermissions","ManageGroupRecentActions","ManageGroupAdminRights","ManageGroupNewAdminRights","ManageGroupMembers","ManageInvites","ManageEditInvite","ManageGroupAddAdmins","ManageReactions","ManageInviteInfo","ManageJoinRequests","Statistics","renderingContentKey","isBackButton","buttonClassName","autoFocusSearch","renderHeaderContent","useInfiniteScrollForLoadableItems","currentResultType","handleLoadMore","itemIds","getMore","useInfiniteScroll","MEMBERS_SLICE","useInfiniteScrollForSharedMedia","forSharedMediaType","messageIdsRef","getMessageContentIds","runThrottledForScroll","isScrollingProgrammatically","TABS","buildInfiniteScrollItemSelector","resultType","mediaSearchType","hasMembersTab","areMembersHidden","canViewMembers","canAddMembers","getHasAdminRight","canDeleteMembers","hasCommonChatsTab","resolvedUserId","isChatProtected","commonChatIds","onProfileStateChange","setLocalMediaSearchType","loadMoreMembers","loadCommonChats","searchMediaMessagesLocal","loadProfilePhotos","setNewChatMembersDialogState","setActiveTab","deletingUserId","setDeletingUserId","tabType","noProfileInfo","searchMessages","memberIds","sortUserIds","sortChatIds","memberViewportIds","getMoreMembers","noProfileInfoForMembers","mediaViewportIds","getMoreMedia","noProfileInfoForMedia","documentViewportIds","getMoreDocuments","noProfileInfoForDocuments","linkViewportIds","getMoreLinks","noProfileInfoForLinks","audioViewportIds","getMoreAudio","noProfileInfoForAudio","voiceViewportIds","getMoreVoices","noProfileInfoForVoices","commonChatViewportIds","getMoreCommonChats","noProfileInfoForCommonChats","useProfileViewportIds","prevTabType","tabsEl","prevProfileState","tabListEl","determineProfileState","useProfileState","applyTransitionFix","releaseTransitionFix","transitionElSelector","setMinHeight","transitionEl","minHeight","overflowY","scrollBarWidth","clientWidth","marginRight","useTransitionFixes","cacheBuster","resetCacheBuster","setCacheBuster","useCacheBuster","handleTransitionStop","handleNewMemberDialogOpen","NewChatMembersProgress","handleSelectMedia","handlePlayAudio","handleMemberClick","handleMessageFocus","handleDeleteMembersModalClose","renderingDelay","isFirstTab","SLIDE_TRANSITION_DURATION","canRenderContent","InfiniteScroll","itemSelector","sensitiveArea","PROFILE_SENSITIVE_AREA","preloadBackwards","noScrollRestoreOnTop","noFastList","onLoadMore","ProfileInfo","ChatExtra","renderProfileInfo","shouldRestoreHeight","onStart","noSpinner","NothingFound","Media","withDate","smaller","onDateClick","WebLink","onMessageClick","getSenderName","ListItem","contextActions","memberId","handler","forceShowSelf","big","FloatingActionButton","DeleteMemberModal","RightSearch","Management","localContactIds","isSearching","onNextStep","setUserSearchQuery","selectedMemberIds","setSelectedMemberIds","noPickerScrollRestore","member","handleFilterChange","displayedIds","filteredContactIds","filterUsersByName","canBeInvitedToGroup","handleNextStep","Picker","selectedIds","filterValue","filterPlaceholder","searchInputId","onSelectedIdsChange","onFilterChange","noScrollRestore","MAIN_SCREENS_COUNT","RightColumnContent","MANAGEMENT_SCREENS_COUNT","blurSearchInput","areActiveChatsLoaded","selectAreActiveChatsLoaded","nextManagementScreen","selectRightColumnContentKey","isChatSelected","toggleChatInfo","closePollResults","addChatMembers","setOpenedInviteInfo","setProfileState","setManagementScreen","selectedChatMemberId","setSelectedChatMemberId","isPromotedByCurrentUser","setIsPromotedByCurrentUser","isScrolledDown","isOverlaying","shouldScrollUp","handleSelectChatMember","isPromoted","handleAppendingChatMembers","onChatMemberSelect","MediaViewer","download","click","startedDownloads","downloadHash","getMessageContentFilename","Notifications","Dialogs","ForwardPicker","SafeLinkModal","HistoryCalendar","GroupCall","ActiveCallHeader","CallFallbackConfirm","NewContactModal","notificationInterval","DEBUG_isLogged","updateIcon","asUnread","updatePageTitle","nextTitle","wasTimeFormatSetManually","authState","isMediaViewerOpen","selectIsMediaViewerOpen","isForwardModalOpen","selectIsForwardModalOpen","hasNotifications","hasDialogs","isHistoryCalendarOpen","isServiceChatReady","isCallFallbackConfirmOpen","isFallbackConfirmOpen","newContactUserId","newContactByPhoneNumber","sync","loadNotificationSettings","loadNotificationExceptions","updateIsOnline","loadTopInlineBots","loadEmojiKeywords","loadCountryList","loadAvailableReactions","loadAddedStickers","ensureTimeFormat","openStickerSetShortName","checkVersionNotification","loadAppConfig","LOCATION_HASH","processDeepLink","decodeURIComponent","middleColumnTransitionClassNames","rightColumnTransitionClassNames","prevIsLeftColumnShown","dispatchHeavyAnimationEnd","waitForTransitionEnd","prevIsRightColumnShown","initialUnread","setInterval","INACTIVE_MARKER","newUnread","PAGE_TITLE","handleStickerSetModalClose","usePreventPinchZoomGesture","onDrop","onDragOver","initApi"],"sourceRoot":""} \ No newline at end of file diff --git a/dist/654.685435e52e1ffc797757.css b/dist/654.5a866391dbb2ac6c1621.css similarity index 99% rename from dist/654.685435e52e1ffc797757.css rename to dist/654.5a866391dbb2ac6c1621.css index db45caf55..058a6b346 100644 --- a/dist/654.685435e52e1ffc797757.css +++ b/dist/654.5a866391dbb2ac6c1621.css @@ -7,4 +7,4 @@ .GroupCall .modal-content{display:flex;flex-direction:column;align-items:center;height:37.5rem}.GroupCall .modal-dialog{max-height:calc(100% - 4rem);background:#181f27}.GroupCall .Menu{--color-text: white;--color-background-compact-menu: #212121DD;--color-background-compact-menu-hover: #00000066}.GroupCall .Menu .bubble{box-shadow:0 .25rem .5rem .125rem rgba(16,16,16,.3)}.GroupCall.single-column{opacity:1 !important}.GroupCall.single-column .modal-dialog{max-width:100% !important;border-bottom-left-radius:0;border-bottom-right-radius:0;margin-top:auto;margin-bottom:0;transform:translate3d(0, 100%, 0);transition:transform .3s ease,opacity .3s ease}.GroupCall.single-column .modal-backdrop{opacity:0;transition:opacity .2s ease}.GroupCall.single-column.open .modal-backdrop{opacity:1}.GroupCall.single-column.open .modal-dialog{transform:translate3d(0, 0, 0)}.GroupCall .header{width:100%;display:flex;align-items:center;color:#fff;margin-bottom:.5rem}.GroupCall .header h3{font-size:1.25rem;font-weight:500;margin:0 auto 0 .5rem}.GroupCall .videos{display:flex;flex-wrap:wrap;gap:.5rem}.GroupCall .participants{margin-top:.75rem;background:#222b34;border-radius:.75rem}.GroupCall .participants .Loading{padding:2rem 0}.GroupCall .participants .invite-btn{padding:.25rem .75rem;display:flex;align-items:center;border-radius:.75rem;transition:.15s ease-out background-color;cursor:pointer;color:var(--color-text-secondary)}.GroupCall .participants .invite-btn:hover{background:#2f363e}.GroupCall .participants .invite-btn .text{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.GroupCall .participants .invite-btn .icon{display:flex;justify-content:center;align-items:center;width:2.75rem;height:2.75rem;font-size:1.5rem;margin-right:1rem}.GroupCall .scrollable{overflow:auto;padding-bottom:2rem;max-width:37.5rem;width:100%}.GroupCall .buttons{max-width:37.5rem;margin-top:auto;display:flex;align-items:center;justify-content:space-around;width:100%;position:relative;height:8.75rem}.GroupCall .buttons button{cursor:pointer}.GroupCall .buttons::before{position:absolute;content:"";width:100%;height:2rem;background:linear-gradient(0deg, #181f27, rgba(24, 31, 39, 0));z-index:0;top:-2rem}.GroupCall .buttons .button-wrapper{width:4rem;display:flex;flex-direction:column;align-items:center}.GroupCall .buttons .button-wrapper .button-text{white-space:nowrap;font-size:.75rem;margin-top:.5rem;color:#fff}.GroupCall .buttons .button-wrapper.microphone-wrapper{width:6rem}.GroupCall .buttons .button-wrapper.microphone-wrapper .button-text{margin-top:.75rem;font-size:1rem}.GroupCall .buttons .Loading{position:absolute;transform:translate(0, -1.125rem)}.GroupCall .buttons .Loading .Spinner{--spinner-size: 6.5rem}.GroupCall .buttons .video-buttons{display:flex;flex-direction:column;align-items:center}.GroupCall .buttons .small-button,.GroupCall .buttons .smaller-button{outline:none;border:0;background:#15415b;border-radius:50%;width:3rem;height:3rem;color:#fff;font-size:1.375rem;display:flex;align-items:center;justify-content:center;transition:.25s ease-out background-color}.GroupCall .buttons .small-button:hover,.GroupCall .buttons .smaller-button:hover{background:#11364b}.GroupCall .buttons .small-button.camera.active{background:#15415b}.GroupCall .buttons .small-button.camera.active:hover{background:#11364b}.GroupCall .buttons .small-button.speaker{background:#2b3a51}.GroupCall .buttons .small-button.speaker.active{background:#496092}.GroupCall .buttons .small-button.leave{background:#5a2824}.GroupCall .buttons .small-button.leave:hover{background:#49201d}.GroupCall .buttons .smaller-button{width:2.5rem;height:2.5rem;margin-bottom:.5rem;padding:0}.GroupCall.landscape .scrollable{display:flex;flex-direction:row;flex-grow:1;gap:1rem;align-items:flex-start;max-width:100%;max-height:100%}.GroupCall.landscape .GroupCallParticipantVideo{max-height:initial}.GroupCall.landscape .GroupCallParticipantVideo video{height:100%}.GroupCall.landscape .buttons{position:absolute;left:calc(50% - 7.8125rem);transform:translateX(-50%);width:auto;gap:1rem;bottom:4rem;background:rgba(0,0,0,.6);-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);border-radius:1rem;z-index:5;padding:.75rem 1rem;height:auto}.GroupCall.landscape .buttons .button-text{display:none}.GroupCall.landscape .buttons .video-buttons{flex-direction:row;gap:1rem}.GroupCall.landscape .buttons .video-buttons .smaller-button{margin-bottom:0}.GroupCall.landscape .buttons .Loading{transform:none}.GroupCall.landscape .buttons .Loading .Spinner{--spinner-size: 3.25rem}.GroupCall.landscape .buttons .MicrophoneButton canvas{width:2rem !important;height:2rem !important}.GroupCall.landscape .buttons .MicrophoneButton,.GroupCall.landscape .buttons .microphone-wrapper{width:3rem;height:3rem}.GroupCall.landscape .buttons .MicrophoneButton .AnimatedSticker,.GroupCall.landscape .buttons .microphone-wrapper .AnimatedSticker{display:flex;align-items:center;justify-content:center}.GroupCall.landscape .buttons::before{display:none}.GroupCall.landscape.no-sidebar .buttons{left:50%}.GroupCall.landscape .streams{width:100%;height:100%}.GroupCall.landscape .videos{width:100%;height:100%;display:grid;--column-count: 1;grid-template-columns:repeat(var(--column-count), 1fr);grid-auto-rows:1fr}.GroupCall.landscape .videos .GroupCallParticipantVideo{max-height:100%;width:100%}.GroupCall.landscape .videos .GroupCallParticipantVideo .thumbnail-wrapper{height:100%}.GroupCall.landscape .videos.span-last-video .GroupCallParticipantVideo:last-child{grid-column:span var(--column-count)}.GroupCall.landscape .participants{width:15.625rem;margin-top:0} .ActiveCallHeader{position:absolute;top:0;left:0;height:2rem;width:100%;z-index:1;display:flex;justify-content:center;font-weight:500;font-size:.875rem;color:#fff;align-items:center;padding:0 1rem;background:linear-gradient(135deg, #3152e8, #8f4aac);transform:translateY(-100%)}.ActiveCallHeader.open{transform:translateY(0)}.ActiveCallHeader span{line-height:100%} -/*# sourceMappingURL=654.685435e52e1ffc797757.css.map*/ \ No newline at end of file +/*# sourceMappingURL=654.5a866391dbb2ac6c1621.css.map*/ \ No newline at end of file diff --git a/dist/654.685435e52e1ffc797757.css.map b/dist/654.5a866391dbb2ac6c1621.css.map similarity index 99% rename from dist/654.685435e52e1ffc797757.css.map rename to dist/654.5a866391dbb2ac6c1621.css.map index e80382807..e933f68c0 100644 --- a/dist/654.685435e52e1ffc797757.css.map +++ b/dist/654.5a866391dbb2ac6c1621.css.map @@ -1 +1 @@ -{"version":3,"file":"654.685435e52e1ffc797757.css","mappings":"AAAA,OACE,kBACA,uBAOE,4IACE,gBAKF,gCACE,gBAKF,4BACE,gBAKF,4BACE,gBAIJ,wBACE,eACA,MACA,SACA,OACA,QACA,aACA,uBACA,mBAGF,uBACE,eACA,MACA,QACA,SACA,OACA,WACA,iCAGF,4CACE,6BAGF,qBACE,kBACA,oBACA,sBACA,WACA,gBACA,kBACA,iBACA,yCACA,8DACA,2CACA,mCAEA,+CAEA,4CACE,gBACA,0BAGF,yBApBF,qBAqBI,yCAIJ,0BACE,+BAGF,6BACE,kCAGF,oDAEE,oBACA,aACA,mBACA,cAGF,oBACE,kBACA,gBACA,cACA,gBACA,uBAEA,qCACE,mBAIJ,+BAEE,4CAEA,oDACE,kBACA,eACA,WACA,qBACA,iBACA,qBACA,sBACA,eAIJ,sBACE,WACA,YACA,aACA,gBACA,gBAEA,qDAEE,sBAIJ,kEAGE,uBACA,mBAGF,oBACE,oBACA,4BACA,qBACA,uBACA,gBAGF,mBACE,kCACA,mBACA,gBAGF,uBACE,aACA,qBAEA,qEACE,iBAIJ,8BACE,WACA,YACA,iBACA,iBACA,gBACA,qB;AC/KJ,kBACE,aACA,uBACA,mBACA,wBACA,kBACA,WACA,YACA,SACA,wFACA,kBACA,eACA,WACA,gCAEA,0BACE,WACA,cACA,kBACA,WACA,YACA,mBACA,kBACA,kBACA,WACA,oBAEA,sCACE,aAIJ,wBACE,uBAGF,0BACE,wFAEA,kCACE,mBAIJ,iCACE,mFACA,yCACE,mBAIJ,sEACE,mBACA,sFACE,uB;ACpDN,kBACE,kBACA,oBACA,2CACA,iDAEA,0BACE,2BACA,gBACA,UACA,uBACA,2BACA,iBACA,wBAEA,iCACE,oDACA,gBACA,mCACA,2CACA,oBAKF,iCACE,gDAIJ,kCACE,YAiCA,kBACA,gBACA,eAjCA,wCACE,oBACA,kBACA,UACA,YACA,aACA,mBACA,mBACA,oBAEA,yDACE,kBAIJ,uCACE,uBAGF,yCACE,uBAGF,yCACE,uBAGF,sCACE,uBC9CJ,oDACE,wBACA,cACA,WACA,cACA,oBACA,uBAEA,0DACE,aAGF,+DACE,WACA,eAEA,uBACA,yBACA,kBAGF,0EACE,wBAGF,uEACE,qBAGF,mFACE,eAGF,+IACE,eDgCF,oDACE,YACA,kBACA,aACA,MACA,wBACA,SACA,UAIA,0EAvBA,YACA,YACA,aACA,8BACA,2CACA,oDACA,0JAqBA,sEA3BA,YACA,YACA,aACA,8BACA,2CACA,oDACA,uJAyBA,+DA/BA,YACA,YACA,aACA,8BACA,2CACA,oDACA,sJ;AE7EN,QACE,mCACA,UACA,mBACA,uBACA,eACA,gBACA,kBACA,wEACA,WACA,iBACA,aACA,mBACA,0CAEA,aACE,kBACA,WACA,YAGF,eACE,WACA,YAGF,cACE,iBAEA,gCACE,qBAIJ,mBACE,WACA,YACA,gBAEA,0BACE,eACA,gBAIJ,kBACE,WACA,YACA,kBAEA,yBACE,cACA,eAIJ,mBACE,eACA,gBACA,kBAEA,0BACE,cACA,eAIJ,oBACE,cACA,eACA,oBAEA,2BACE,WACA,YAIJ,mBACE,oBAEA,qBACE,iBAGF,0BACE,gBACA,iBAIJ,mBACE,aACA,cACA,iBAEA,sBACE,eAGF,0BACE,aACA,cAIJ,eACE,kBAEA,sBACE,WACA,cACA,kBACA,gBACA,eACA,cACA,eACA,kBACA,yCACA,yBACA,cAIJ,oBACE,e;AC7HJ,sBACE,kBACA,aACA,mBACA,mBACA,WACA,qBACA,qBACA,0CACA,eAEA,4BACE,mBAGF,4BACE,aAGF,8BACE,kBAGF,4BACE,YACA,aACA,sBAEA,kCACE,uBACA,mBACA,gBAGF,mCACE,uBACA,mBACA,gBACA,cACA,iBAEA,wCACE,cAGF,yCACE,cAGF,uCACE,cAKN,kCACE,cACA,aACA,mBACA,uBACA,cACA,eACA,iBACA,iBACA,cAIA,kDACE,cAIJ,+BACE,eACA,a;AC3EJ,2BACE,qBACA,gBACA,kBACA,qBACA,yBAEA,+BACA,eAEA,6CACE,kBACA,gBACA,WACA,YACA,qBAEA,iDACE,kBACA,gBACA,iBAIJ,qDACE,WAGF,mCACE,uCACA,WACA,YACA,kBACA,cACA,WACA,UACA,qBACA,oCAGF,0CACE,yCAGF,wCACE,kBACA,UACA,WACA,YACA,0BACA,SACA,WACA,mBACA,sBACA,aACA,mBACA,WACA,gEACA,UACA,eACA,wBAEA,8CACE,0BAIJ,iCACE,cACA,WAGF,kCACE,mBACA,eACA,kBAGF,8CACE,kBACA,QACA,SACA,UACA,WACA,2CACA,gBAGF,sCACE,kCACA,iBAGF,iCACE,kBACA,SACA,WACA,aACA,mBACA,uBACA,WACA,YACA,oDACA,iCACA,UAEA,uCACE,kBAGF,4CACE,iBAOJ,+CACE,UAGF,sDACE,U;AC1HF,0BACE,aACA,sBACA,mBACA,eAGF,yBACE,6BACA,mBAGF,iBACE,oBACA,2CACA,iDACA,yBACE,oDAIJ,yBACE,qBAEA,uCACE,0BACA,4BACA,6BACA,gBACA,gBACA,kCACA,+CAGF,yCACE,UACA,4BAIA,8CACE,UAGF,4CACE,+BAKN,mBACE,WACA,aACA,mBACA,WACA,oBAEA,sBACE,kBACA,gBACA,sBAIJ,mBACE,aACA,eACA,UAGF,yBACE,kBACA,mBACA,qBAEA,kCACE,eAGF,qCACE,sBACA,aACA,mBACA,qBACA,0CACA,eACA,kCAEA,2CACE,mBAGF,2CACE,uBACA,mBACA,gBAGF,2CACE,aACA,uBACA,mBACA,cACA,eACA,iBACA,kBAKN,uBACE,cACA,oBACA,kBACA,WAGF,oBACE,kBACA,gBACA,aACA,mBACA,6BACA,WACA,kBACA,eAEA,2BACE,eAGF,4BACE,kBACA,WACA,WACA,YACA,+DACA,UACA,UAGF,oCACE,WACA,aACA,sBACA,mBAEA,iDACE,mBACA,iBACA,iBACA,WAGF,uDACE,WAEA,oEACE,kBACA,eAKN,6BACE,kBACA,kCAEA,sCACE,uBAIJ,mCACE,aACA,sBACA,mBAGF,sEAEE,aACA,SACA,mBACA,kBACA,WACA,YACA,WACA,mBACA,aACA,mBACA,uBACA,0CAEA,kFACE,mBAIJ,gDACE,mBAEA,sDACE,mBAIJ,0CACE,mBAEA,iDACE,mBAIJ,wCACE,mBAEA,8CACE,mBAIJ,oCACE,aACA,cACA,oBACA,UAIJ,iCACE,aACA,mBACA,YACA,SACA,uBACA,eACA,gBAGF,gDACE,mBAEA,sDACE,YAIJ,8BACE,kBACA,2BACA,2BACA,WACA,SACA,YACA,0BACA,8DACA,mBACA,UACA,oBACA,YAEA,2CACE,aAGF,6CACE,mBACA,SAEA,6DACE,gBAIJ,uCACE,eACA,gDACE,wBAKF,uDACE,sBACA,uBAIJ,kGAEE,WACA,YAEA,oIACE,aACA,mBACA,uBAIJ,sCACE,aAIJ,yCACE,SAGF,8BACE,WACA,YAGF,6BACE,WACA,YAEA,aACA,kBACA,uDACA,mBAEA,wDACE,gBACA,WAEA,2EACE,YAIJ,mFACE,qCAIJ,mCACE,gBACA,a;ACtVJ,kBACE,kBACA,MACA,OACA,YACA,WACA,UAEA,aACA,uBACA,gBACA,kBACA,WACA,mBACA,eACA,qDACA,4BAEA,uBACE,wBAGF,uBACE,iB","sources":["webpack://telegram-t/./src/components/ui/Modal.scss","webpack://telegram-t/./src/components/calls/group/MicrophoneButton.scss","webpack://telegram-t/./src/components/calls/group/GroupCallParticipantMenu.scss","webpack://telegram-t/./src/styles/_mixins.scss","webpack://telegram-t/./src/components/common/Avatar.scss","webpack://telegram-t/./src/components/calls/group/GroupCallParticipant.scss","webpack://telegram-t/./src/components/calls/group/GroupCallParticipantVideo.scss","webpack://telegram-t/./src/components/calls/group/GroupCall.scss","webpack://telegram-t/./src/components/calls/ActiveCallHeader.scss"],"sourcesContent":[".Modal {\n position: relative;\n z-index: var(--z-modal);\n\n &.delete,\n &.error,\n &.confirm,\n &.pin,\n &.unpin-all {\n .modal-dialog {\n max-width: 23rem;\n }\n }\n\n &.error {\n .modal-content > div {\n margin-top: 1rem;\n }\n }\n\n &.narrow {\n .modal-dialog {\n max-width: 20rem;\n }\n }\n\n &.report {\n .modal-dialog {\n max-width: 15rem;\n }\n }\n\n .modal-container {\n position: fixed;\n top: 0;\n bottom: 0;\n left: 0;\n right: 0;\n display: flex;\n justify-content: center;\n align-items: center;\n }\n\n .modal-backdrop {\n position: fixed;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: -1;\n background-color: rgba(0, 0, 0, 0.25);\n }\n\n &.transparent-backdrop .modal-backdrop {\n background-color: transparent;\n }\n\n .modal-dialog {\n position: relative;\n display: inline-flex;\n flex-direction: column;\n width: 100%;\n max-width: 35rem;\n min-width: 17.5rem;\n margin: 2rem auto;\n background-color: var(--color-background);\n box-shadow: 0 0.25rem 0.5rem 0.125rem var(--color-default-shadow);\n border-radius: var(--border-radius-default);\n transform: translate3d(0, -1rem, 0);\n\n transition: transform 0.2s ease, opacity 0.2s ease;\n\n body.animation-level-0 & {\n transition: none;\n transform: none !important;\n }\n\n @media (max-width: 450px) {\n max-width: calc(100vw - 3rem) !important;\n }\n }\n\n &.open .modal-dialog {\n transform: translate3d(0, 0, 0);\n }\n\n &.closing .modal-dialog {\n transform: translate3d(0, 1rem, 0);\n }\n\n .modal-header,\n %modal-header {\n padding: 1rem 1rem 0;\n display: flex;\n align-items: center;\n flex-shrink: 0;\n }\n\n .modal-title {\n font-size: 1.25rem;\n font-weight: 500;\n flex: 1 1 auto;\n overflow: hidden;\n text-overflow: ellipsis;\n\n &:not(:only-child) {\n margin: 0 1.3125rem;\n }\n }\n\n .modal-header-condensed {\n @extend %modal-header;\n padding: 0.5rem 1.25rem 0 0.9375rem !important;\n\n .modal-action-button {\n font-size: 0.875rem;\n height: 2.25rem;\n width: auto;\n line-height: 1.625rem;\n margin-left: auto;\n padding-left: 1.25rem;\n padding-right: 1.25rem;\n min-width: 5rem;\n }\n }\n\n .modal-content {\n width: 100%;\n flex-grow: 1;\n padding: 1rem;\n overflow-y: auto;\n max-height: 90vh;\n\n b,\n strong {\n word-break: break-word;\n }\n }\n\n .modal-title,\n .modal-content,\n .modal-content > p {\n unicode-bidi: plaintext;\n text-align: initial;\n }\n\n .modal-about {\n display: -webkit-box;\n -webkit-box-orient: vertical;\n -webkit-line-clamp: 5;\n text-overflow: ellipsis;\n overflow: hidden;\n }\n\n .modal-help {\n color: var(--color-text-secondary);\n font-size: 0.9375rem;\n line-height: 1.3;\n }\n\n .dialog-buttons {\n display: flex;\n align-items: flex-end;\n\n .confirm-dialog-button + .confirm-dialog-button {\n margin-left: 1rem;\n }\n }\n\n .confirm-dialog-button {\n width: auto;\n height: auto;\n margin-left: auto;\n text-align: right;\n font-weight: 500;\n white-space: pre-wrap;\n }\n}\n",".MicrophoneButton {\n display: flex;\n justify-content: center;\n align-items: center;\n outline: none !important;\n position: relative;\n width: 6rem;\n height: 6rem;\n border: 0;\n background: radial-gradient(100% 100% at 100% 0%, #00a0b9 0%, #33c659 55%, #33c659 100%);\n border-radius: 50%;\n font-size: 2rem;\n color: #fff;\n transition: 0.25s ease-out filter;\n\n &::before {\n content: \"\";\n display: block;\n position: absolute;\n width: 8rem;\n height: 8rem;\n background: #64C166;\n border-radius: 50%;\n filter: blur(10px);\n opacity: 0.2;\n pointer-events: none;\n\n body.is-ios & {\n display: none;\n }\n }\n\n &:hover {\n filter: brightness(0.9);\n }\n\n &.crossed {\n background: radial-gradient(100% 100% at 100% 0%, #00AFFE 0%, #00AFFE 55%, #007FFF 100%);\n\n &::before {\n background: #00AFFE;\n }\n }\n\n &.muted-by-admin {\n background: radial-gradient(85.5% 103.5% at 87.5% 20.65%, #CE4D74 0%, #3D52DF 100%);\n &::before {\n background: #3D52DF;\n }\n }\n\n &.is-connecting, &.is-connecting:hover {\n background: #222B34;\n &::before {\n background: transparent;\n }\n }\n}\n","@import '../../../styles/mixins';\n\n.participant-menu {\n position: absolute;\n --color-text: white;\n --color-background-compact-menu: #212121DD;\n --color-background-compact-menu-hover: #00000066;\n\n .bubble {\n background: none !important;\n border-radius: 0;\n padding: 0;\n border: none !important;\n box-shadow: none !important;\n overflow: visible;\n color: var(--color-text);\n\n .group {\n box-shadow: 0 0.25rem 0.5rem 0.125rem rgba(16, 16, 16, 0.3);\n overflow: hidden;\n background: var(--color-background);\n border-radius: var(--border-radius-default);\n margin-bottom: 0.5rem;\n }\n }\n\n &.compact {\n .group {\n background: var(--color-background-compact-menu);\n }\n }\n\n .volume-control {\n height: 3rem;\n\n .info {\n pointer-events: none;\n position: relative;\n z-index: 1;\n height: 100%;\n display: flex;\n flex-direction: row;\n align-items: center;\n padding: 0.75rem 1rem;\n\n .AnimatedSticker {\n margin-right: 2rem;\n }\n }\n\n &.high {\n --range-color: #4DA6E0;\n }\n\n &.normal {\n --range-color: #57BC6C;\n }\n\n &.medium {\n --range-color: #CAA53B;\n }\n\n &.low {\n --range-color: #CB5757;\n }\n\n position: relative;\n overflow: hidden;\n cursor: pointer;\n\n @mixin thumb-styles() {\n border: none;\n height: 3rem;\n width: 1.5rem;\n background: var(--range-color);\n border-radius: var(--border-radius-default);\n box-shadow: -13.5rem 0 0 12.75rem var(--range-color);\n transition: 0.25s ease-in-out background-color, 0.25s ease-in-out box-shadow;\n }\n\n @include reset-range();\n\n // Apply custom styles\n input[type=\"range\"] {\n height: 3rem;\n position: absolute;\n left: -1.5rem;\n top: 0;\n width: calc(100% + 3rem);\n margin: 0;\n z-index: 0;\n\n // Note that while we're repeating code here, that's necessary as you can't comma-separate these type of selectors.\n // Browsers will drop the entire selector if it doesn't understand a part of it.\n &::-webkit-slider-thumb {\n @include thumb-styles();\n }\n\n &::-moz-range-thumb {\n @include thumb-styles();\n }\n\n &::-ms-thumb {\n @include thumb-styles();\n }\n }\n }\n}\n","// @optimization\n@mixin while-transition() {\n .Transition > div:not(.Transition__slide--active) &, body.animating-right-column & {\n @content;\n }\n}\n\n@mixin overflow-y-overlay() {\n @supports (overflow-y: overlay) {\n overflow-y: overlay;\n\n //Workaround for Android <= 9\n overflow-x: hidden;\n }\n}\n\n@mixin reset-range() {\n input[type=\"range\"] {\n -webkit-appearance: none;\n display: block;\n width: 100%;\n height: 0.75rem;\n margin-bottom: 0.5rem;\n background: transparent;\n\n &:focus {\n outline: none;\n }\n\n &::-ms-track {\n width: 100%;\n cursor: pointer;\n\n background: transparent;\n border-color: transparent;\n color: transparent;\n }\n\n &::-webkit-slider-thumb {\n -webkit-appearance: none;\n }\n\n &::-moz-slider-thumb {\n -moz-appearance: none;\n }\n\n &::-webkit-slider-runnable-track {\n cursor: pointer;\n }\n\n &::-moz-range-track, &::-moz-range-progress {\n cursor: pointer;\n }\n }\n}\n",".Avatar {\n --color-user: var(--color-primary);\n flex: none;\n align-items: center;\n justify-content: center;\n width: 3.375rem;\n height: 3.375rem;\n border-radius: 50%;\n background: linear-gradient(var(--color-white) -125%, var(--color-user));\n color: white;\n font-weight: bold;\n display: flex;\n white-space: nowrap;\n user-select: none;\n\n &__img {\n border-radius: 50%;\n width: 100%;\n height: 100%;\n }\n\n .emoji {\n width: 1rem;\n height: 1rem;\n }\n\n &__icon {\n font-size: 2.5rem;\n\n &.icon-reply-filled {\n transform: scale(0.7);\n }\n }\n\n &.size-micro {\n width: 1rem;\n height: 1rem;\n font-size: 0.5rem;\n\n .emoji {\n width: 0.5625rem;\n height: 0.5625rem;\n }\n }\n\n &.size-tiny {\n width: 2rem;\n height: 2rem;\n font-size: 0.875rem;\n\n .emoji {\n width: 0.875rem;\n height: 0.875rem;\n }\n }\n\n &.size-small {\n width: 2.125rem;\n height: 2.125rem;\n font-size: 0.875rem;\n\n .emoji {\n width: 0.875rem;\n height: 0.875rem;\n }\n }\n\n &.size-medium {\n width: 2.75rem;\n height: 2.75rem;\n font-size: 1.1875rem;\n\n .emoji {\n width: 1rem;\n height: 1rem;\n }\n }\n\n &.size-large {\n font-size: 1.3125rem;\n\n i {\n font-size: 3.5rem;\n }\n\n .emoji {\n width: 1.3125rem;\n height: 1.3125rem;\n }\n }\n\n &.size-jumbo {\n width: 7.5rem;\n height: 7.5rem;\n font-size: 3.5rem;\n\n &__i {\n font-size: 6rem;\n }\n\n .emoji {\n width: 3.5rem;\n height: 3.5rem;\n }\n }\n\n &.online {\n position: relative;\n\n &::after {\n content: \"\";\n display: block;\n position: absolute;\n bottom: 0.0625rem;\n right: 0.0625rem;\n width: 0.875rem;\n height: 0.875rem;\n border-radius: 50%;\n border: 2px solid var(--color-background);\n background-color: #0ac630;\n flex-shrink: 0;\n }\n }\n\n &.interactive {\n cursor: pointer;\n }\n}\n",".GroupCallParticipant {\n position: relative;\n display: flex;\n flex-direction: row;\n align-items: center;\n color: #fff;\n padding: 0.5rem 0.75rem;\n border-radius: 0.75rem;\n transition: 0.15s ease-out background-color;\n cursor: pointer;\n\n &:hover {\n background: #2f363e;\n }\n\n audio {\n display: none;\n }\n\n .Avatar {\n margin-right: 1rem;\n }\n\n .info {\n min-width: 0;\n display: flex;\n flex-direction: column;\n\n .name {\n text-overflow: ellipsis;\n white-space: nowrap;\n overflow: hidden;\n }\n\n .about {\n text-overflow: ellipsis;\n white-space: nowrap;\n overflow: hidden;\n color: #848d94;\n font-size: 0.75rem;\n\n &.blue {\n color: #4da6e0;\n }\n\n &.green {\n color: #57bc6c;\n }\n\n &.red {\n color: #ff706f;\n }\n }\n }\n\n .microphone {\n flex-shrink: 0;\n display: flex;\n align-items: center;\n justify-content: center;\n width: 2.75rem;\n height: 2.75rem;\n margin-left: auto;\n font-size: 1.5rem;\n color: #ff706f;\n }\n\n &.can-self-unmute {\n .microphone {\n color: #848d94;\n }\n }\n\n .streams {\n cursor: pointer;\n display: flex;\n }\n}\n",".GroupCallParticipantVideo {\n border-radius: 0.75rem;\n overflow: hidden;\n position: relative;\n max-height: 12.875rem;\n width: calc(50% - 0.25rem);\n /* stylelint-disable-next-line plugin/no-low-performance-animation-properties */\n transition: 0.25s ease-out width;\n cursor: pointer;\n\n .thumbnail-avatar {\n position: absolute;\n border-radius: 0;\n width: 100%;\n height: 100%;\n transform: scale(1.1);\n\n img {\n filter: blur(10px);\n border-radius: 0;\n object-fit: cover;\n }\n }\n\n &:last-child:nth-child(odd) {\n width: 100%;\n }\n\n &::before {\n box-shadow: 0 0 0 3px transparent inset;\n width: 100%;\n height: 100%;\n position: absolute;\n display: block;\n content: \"\";\n z-index: 5;\n border-radius: 0.75rem;\n transition: 0.25s ease-out box-shadow;\n }\n\n &.active::before {\n box-shadow: 0px 0px 0px 3px #78ee7e inset;\n }\n\n .back-button {\n position: absolute;\n z-index: 5;\n top: 0.75rem;\n left: 0.75rem;\n background: rgba(0, 0, 0, 0.3);\n border: 0;\n color: white;\n border-radius: 1rem;\n padding: 0.25rem 0.75rem;\n display: flex;\n align-items: center;\n gap: 0.25rem;\n transition: 0.25s ease-out opacity, 0.25s ease-out background-color;\n opacity: 0;\n cursor: pointer;\n outline: none !important;\n\n &:hover {\n background: rgba(0, 0, 0, 0.4);\n }\n }\n\n video {\n display: block;\n width: 100%;\n }\n\n .video {\n object-fit: contain;\n height: 12.5rem;\n position: relative;\n }\n\n .thumbnail-wrapper {\n position: absolute;\n top: 50%;\n left: 50%;\n z-index: 0;\n width: 100%;\n transform: translate(-50%, -50%) scale(1.5);\n background: black;\n }\n\n .thumbnail {\n filter: blur(10px) brightness(0.5);\n object-fit: cover;\n }\n\n .info {\n position: absolute;\n bottom: 0;\n color: #fff;\n display: flex;\n align-items: center;\n padding: 0 0.5rem 0.25rem;\n width: 100%;\n height: 2rem;\n background: linear-gradient(0deg, #000, transparent);\n transition: 0.25s ease-out opacity;\n opacity: 0;\n\n .name {\n margin-left: 0.5rem;\n }\n\n .last-icon {\n margin-left: auto;\n }\n }\n}\n\n.videos:hover .GroupCallParticipantVideo {\n\n .info {\n opacity: 1;\n }\n\n .back-button {\n opacity: 1;\n }\n}\n",".GroupCall {\n .modal-content {\n display: flex;\n flex-direction: column;\n align-items: center;\n height: 37.5rem;\n }\n\n .modal-dialog {\n max-height: calc(100% - 4rem);\n background: #181f27;\n }\n\n .Menu {\n --color-text: white;\n --color-background-compact-menu: #212121DD;\n --color-background-compact-menu-hover: #00000066;\n .bubble {\n box-shadow: 0 0.25rem 0.5rem 0.125rem rgba(16, 16, 16, 0.3);\n }\n }\n\n &.single-column {\n opacity: 1 !important;\n\n .modal-dialog {\n max-width: 100% !important;\n border-bottom-left-radius: 0;\n border-bottom-right-radius: 0;\n margin-top: auto;\n margin-bottom: 0;\n transform: translate3d(0, 100%, 0);\n transition: transform 0.3s ease, opacity 0.3s ease;\n }\n\n .modal-backdrop {\n opacity: 0;\n transition: opacity 0.2s ease;\n }\n\n &.open {\n .modal-backdrop {\n opacity: 1;\n }\n\n .modal-dialog {\n transform: translate3d(0, 0, 0);\n }\n }\n }\n\n .header {\n width: 100%;\n display: flex;\n align-items: center;\n color: #fff;\n margin-bottom: 0.5rem;\n\n h3 {\n font-size: 1.25rem;\n font-weight: 500;\n margin: 0 auto 0 0.5rem;\n }\n }\n\n .videos {\n display: flex;\n flex-wrap: wrap;\n gap: 0.5rem;\n }\n\n .participants {\n margin-top: 0.75rem;\n background: #222b34;\n border-radius: 0.75rem;\n\n .Loading {\n padding: 2rem 0;\n }\n\n .invite-btn {\n padding: 0.25rem 0.75rem;\n display: flex;\n align-items: center;\n border-radius: 0.75rem;\n transition: 0.15s ease-out background-color;\n cursor: pointer;\n color: var(--color-text-secondary);\n\n &:hover {\n background: #2f363e;\n }\n\n .text {\n text-overflow: ellipsis;\n white-space: nowrap;\n overflow: hidden;\n }\n\n .icon {\n display: flex;\n justify-content: center;\n align-items: center;\n width: 2.75rem;\n height: 2.75rem;\n font-size: 1.5rem;\n margin-right: 1rem;\n }\n }\n }\n\n .scrollable {\n overflow: auto;\n padding-bottom: 2rem;\n max-width: 37.5rem;\n width: 100%;\n }\n\n .buttons {\n max-width: 37.5rem;\n margin-top: auto;\n display: flex;\n align-items: center;\n justify-content: space-around;\n width: 100%;\n position: relative;\n height: 8.75rem;\n\n button {\n cursor: pointer;\n }\n\n &::before {\n position: absolute;\n content: \"\";\n width: 100%;\n height: 2rem;\n background: linear-gradient(0deg, #181f27, rgba(24, 31, 39, 0));\n z-index: 0;\n top: -2rem;\n }\n\n .button-wrapper {\n width: 4rem;\n display: flex;\n flex-direction: column;\n align-items: center;\n\n .button-text {\n white-space: nowrap;\n font-size: 0.75rem;\n margin-top: 0.5rem;\n color: #fff;\n }\n\n &.microphone-wrapper {\n width: 6rem;\n\n .button-text {\n margin-top: 0.75rem;\n font-size: 1rem;\n }\n }\n }\n\n .Loading {\n position: absolute;\n transform: translate(0, -1.125rem);\n\n .Spinner {\n --spinner-size: 6.5rem;\n }\n }\n\n .video-buttons {\n display: flex;\n flex-direction: column;\n align-items: center;\n }\n\n .small-button,\n .smaller-button {\n outline: none;\n border: 0;\n background: #15415b;\n border-radius: 50%;\n width: 3rem;\n height: 3rem;\n color: #fff;\n font-size: 1.375rem;\n display: flex;\n align-items: center;\n justify-content: center;\n transition: 0.25s ease-out background-color;\n\n &:hover {\n background: #11364b;\n }\n }\n\n .small-button.camera.active {\n background: #15415b;\n\n &:hover {\n background: #11364b;\n }\n }\n\n .small-button.speaker {\n background: #2b3a51;\n\n &.active {\n background: #496092;\n }\n }\n\n .small-button.leave {\n background: #5a2824;\n\n &:hover {\n background: #49201d;\n }\n }\n\n .smaller-button {\n width: 2.5rem;\n height: 2.5rem;\n margin-bottom: 0.5rem;\n padding: 0;\n }\n }\n\n &.landscape .scrollable {\n display: flex;\n flex-direction: row;\n flex-grow: 1;\n gap: 1rem;\n align-items: flex-start;\n max-width: 100%;\n max-height: 100%;\n }\n\n &.landscape .GroupCallParticipantVideo {\n max-height: initial;\n\n video {\n height: 100%;\n }\n }\n\n &.landscape .buttons {\n position: absolute;\n left: calc(50% - 15.625rem / 2);\n transform: translateX(-50%);\n width: auto;\n gap: 1rem;\n bottom: 4rem;\n background: rgba(0, 0, 0, 0.6);\n backdrop-filter: blur(10px);\n border-radius: 1rem;\n z-index: 5;\n padding: 0.75rem 1rem;\n height: auto;\n\n .button-text {\n display: none;\n }\n\n .video-buttons {\n flex-direction: row;\n gap: 1rem;\n\n .smaller-button {\n margin-bottom: 0;\n }\n }\n\n .Loading {\n transform: none;\n .Spinner {\n --spinner-size: 3.25rem;\n }\n }\n\n .MicrophoneButton {\n canvas {\n width: 2rem !important;\n height: 2rem !important;\n }\n }\n\n .MicrophoneButton,\n .microphone-wrapper {\n width: 3rem;\n height: 3rem;\n\n .AnimatedSticker {\n display: flex;\n align-items: center;\n justify-content: center;\n }\n }\n\n &::before {\n display: none;\n }\n }\n\n &.landscape.no-sidebar .buttons {\n left: calc(50%);\n }\n\n &.landscape .streams {\n width: 100%;\n height: 100%;\n }\n\n &.landscape .videos {\n width: 100%;\n height: 100%;\n\n display: grid;\n --column-count: 1;\n grid-template-columns: repeat(var(--column-count), 1fr);\n grid-auto-rows: 1fr;\n\n .GroupCallParticipantVideo {\n max-height: 100%;\n width: 100%;\n\n .thumbnail-wrapper {\n height: 100%;\n }\n }\n\n &.span-last-video .GroupCallParticipantVideo:last-child {\n grid-column: span var(--column-count);\n }\n }\n\n &.landscape .participants {\n width: 15.625rem;\n margin-top: 0;\n }\n}\n",".ActiveCallHeader {\n position: absolute;\n top: 0;\n left: 0;\n height: 2rem;\n width: 100%;\n z-index: 1;\n\n display: flex;\n justify-content: center;\n font-weight: 500;\n font-size: 0.875rem;\n color: #fff;\n align-items: center;\n padding: 0 1rem;\n background: linear-gradient(135deg, rgb(49, 82, 232), rgb(143, 74, 172));\n transform: translateY(-100%);\n\n &.open {\n transform: translateY(0);\n }\n\n span {\n line-height: 100%;\n }\n}\n"],"names":[],"sourceRoot":""} \ No newline at end of file +{"version":3,"file":"654.5a866391dbb2ac6c1621.css","mappings":"AAAA,OACE,kBACA,uBAOE,4IACE,gBAKF,gCACE,gBAKF,4BACE,gBAKF,4BACE,gBAIJ,wBACE,eACA,MACA,SACA,OACA,QACA,aACA,uBACA,mBAGF,uBACE,eACA,MACA,QACA,SACA,OACA,WACA,iCAGF,4CACE,6BAGF,qBACE,kBACA,oBACA,sBACA,WACA,gBACA,kBACA,iBACA,yCACA,8DACA,2CACA,mCAEA,+CAEA,4CACE,gBACA,0BAGF,yBApBF,qBAqBI,yCAIJ,0BACE,+BAGF,6BACE,kCAGF,oDAEE,oBACA,aACA,mBACA,cAGF,oBACE,kBACA,gBACA,cACA,gBACA,uBAEA,qCACE,mBAIJ,+BAEE,4CAEA,oDACE,kBACA,eACA,WACA,qBACA,iBACA,qBACA,sBACA,eAIJ,sBACE,WACA,YACA,aACA,gBACA,gBAEA,qDAEE,sBAIJ,kEAGE,uBACA,mBAGF,oBACE,oBACA,4BACA,qBACA,uBACA,gBAGF,mBACE,kCACA,mBACA,gBAGF,uBACE,aACA,qBAEA,qEACE,iBAIJ,8BACE,WACA,YACA,iBACA,iBACA,gBACA,qB;AC/KJ,kBACE,aACA,uBACA,mBACA,wBACA,kBACA,WACA,YACA,SACA,wFACA,kBACA,eACA,WACA,gCAEA,0BACE,WACA,cACA,kBACA,WACA,YACA,mBACA,kBACA,kBACA,WACA,oBAEA,sCACE,aAIJ,wBACE,uBAGF,0BACE,wFAEA,kCACE,mBAIJ,iCACE,mFACA,yCACE,mBAIJ,sEACE,mBACA,sFACE,uB;ACpDN,kBACE,kBACA,oBACA,2CACA,iDAEA,0BACE,2BACA,gBACA,UACA,uBACA,2BACA,iBACA,wBAEA,iCACE,oDACA,gBACA,mCACA,2CACA,oBAKF,iCACE,gDAIJ,kCACE,YAiCA,kBACA,gBACA,eAjCA,wCACE,oBACA,kBACA,UACA,YACA,aACA,mBACA,mBACA,oBAEA,yDACE,kBAIJ,uCACE,uBAGF,yCACE,uBAGF,yCACE,uBAGF,sCACE,uBC9CJ,oDACE,wBACA,cACA,WACA,cACA,oBACA,uBAEA,0DACE,aAGF,+DACE,WACA,eAEA,uBACA,yBACA,kBAGF,0EACE,wBAGF,uEACE,qBAGF,mFACE,eAGF,+IACE,eDgCF,oDACE,YACA,kBACA,aACA,MACA,wBACA,SACA,UAIA,0EAvBA,YACA,YACA,aACA,8BACA,2CACA,oDACA,0JAqBA,sEA3BA,YACA,YACA,aACA,8BACA,2CACA,oDACA,uJAyBA,+DA/BA,YACA,YACA,aACA,8BACA,2CACA,oDACA,sJ;AE7EN,QACE,mCACA,UACA,mBACA,uBACA,eACA,gBACA,kBACA,wEACA,WACA,iBACA,aACA,mBACA,0CAEA,aACE,kBACA,WACA,YAGF,eACE,WACA,YAGF,cACE,iBAEA,gCACE,qBAIJ,mBACE,WACA,YACA,gBAEA,0BACE,eACA,gBAIJ,kBACE,WACA,YACA,kBAEA,yBACE,cACA,eAIJ,mBACE,eACA,gBACA,kBAEA,0BACE,cACA,eAIJ,oBACE,cACA,eACA,oBAEA,2BACE,WACA,YAIJ,mBACE,oBAEA,qBACE,iBAGF,0BACE,gBACA,iBAIJ,mBACE,aACA,cACA,iBAEA,sBACE,eAGF,0BACE,aACA,cAIJ,eACE,kBAEA,sBACE,WACA,cACA,kBACA,gBACA,eACA,cACA,eACA,kBACA,yCACA,yBACA,cAIJ,oBACE,e;AC7HJ,sBACE,kBACA,aACA,mBACA,mBACA,WACA,qBACA,qBACA,0CACA,eAEA,4BACE,mBAGF,4BACE,aAGF,8BACE,kBAGF,4BACE,YACA,aACA,sBAEA,kCACE,uBACA,mBACA,gBAGF,mCACE,uBACA,mBACA,gBACA,cACA,iBAEA,wCACE,cAGF,yCACE,cAGF,uCACE,cAKN,kCACE,cACA,aACA,mBACA,uBACA,cACA,eACA,iBACA,iBACA,cAIA,kDACE,cAIJ,+BACE,eACA,a;AC3EJ,2BACE,qBACA,gBACA,kBACA,qBACA,yBAEA,+BACA,eAEA,6CACE,kBACA,gBACA,WACA,YACA,qBAEA,iDACE,kBACA,gBACA,iBAIJ,qDACE,WAGF,mCACE,uCACA,WACA,YACA,kBACA,cACA,WACA,UACA,qBACA,oCAGF,0CACE,yCAGF,wCACE,kBACA,UACA,WACA,YACA,0BACA,SACA,WACA,mBACA,sBACA,aACA,mBACA,WACA,gEACA,UACA,eACA,wBAEA,8CACE,0BAIJ,iCACE,cACA,WAGF,kCACE,mBACA,eACA,kBAGF,8CACE,kBACA,QACA,SACA,UACA,WACA,2CACA,gBAGF,sCACE,kCACA,iBAGF,iCACE,kBACA,SACA,WACA,aACA,mBACA,uBACA,WACA,YACA,oDACA,iCACA,UAEA,uCACE,kBAGF,4CACE,iBAOJ,+CACE,UAGF,sDACE,U;AC1HF,0BACE,aACA,sBACA,mBACA,eAGF,yBACE,6BACA,mBAGF,iBACE,oBACA,2CACA,iDACA,yBACE,oDAIJ,yBACE,qBAEA,uCACE,0BACA,4BACA,6BACA,gBACA,gBACA,kCACA,+CAGF,yCACE,UACA,4BAIA,8CACE,UAGF,4CACE,+BAKN,mBACE,WACA,aACA,mBACA,WACA,oBAEA,sBACE,kBACA,gBACA,sBAIJ,mBACE,aACA,eACA,UAGF,yBACE,kBACA,mBACA,qBAEA,kCACE,eAGF,qCACE,sBACA,aACA,mBACA,qBACA,0CACA,eACA,kCAEA,2CACE,mBAGF,2CACE,uBACA,mBACA,gBAGF,2CACE,aACA,uBACA,mBACA,cACA,eACA,iBACA,kBAKN,uBACE,cACA,oBACA,kBACA,WAGF,oBACE,kBACA,gBACA,aACA,mBACA,6BACA,WACA,kBACA,eAEA,2BACE,eAGF,4BACE,kBACA,WACA,WACA,YACA,+DACA,UACA,UAGF,oCACE,WACA,aACA,sBACA,mBAEA,iDACE,mBACA,iBACA,iBACA,WAGF,uDACE,WAEA,oEACE,kBACA,eAKN,6BACE,kBACA,kCAEA,sCACE,uBAIJ,mCACE,aACA,sBACA,mBAGF,sEAEE,aACA,SACA,mBACA,kBACA,WACA,YACA,WACA,mBACA,aACA,mBACA,uBACA,0CAEA,kFACE,mBAIJ,gDACE,mBAEA,sDACE,mBAIJ,0CACE,mBAEA,iDACE,mBAIJ,wCACE,mBAEA,8CACE,mBAIJ,oCACE,aACA,cACA,oBACA,UAIJ,iCACE,aACA,mBACA,YACA,SACA,uBACA,eACA,gBAGF,gDACE,mBAEA,sDACE,YAIJ,8BACE,kBACA,2BACA,2BACA,WACA,SACA,YACA,0BACA,8DACA,mBACA,UACA,oBACA,YAEA,2CACE,aAGF,6CACE,mBACA,SAEA,6DACE,gBAIJ,uCACE,eACA,gDACE,wBAKF,uDACE,sBACA,uBAIJ,kGAEE,WACA,YAEA,oIACE,aACA,mBACA,uBAIJ,sCACE,aAIJ,yCACE,SAGF,8BACE,WACA,YAGF,6BACE,WACA,YAEA,aACA,kBACA,uDACA,mBAEA,wDACE,gBACA,WAEA,2EACE,YAIJ,mFACE,qCAIJ,mCACE,gBACA,a;ACtVJ,kBACE,kBACA,MACA,OACA,YACA,WACA,UAEA,aACA,uBACA,gBACA,kBACA,WACA,mBACA,eACA,qDACA,4BAEA,uBACE,wBAGF,uBACE,iB","sources":["webpack://telegram-t/./src/components/ui/Modal.scss","webpack://telegram-t/./src/components/calls/group/MicrophoneButton.scss","webpack://telegram-t/./src/components/calls/group/GroupCallParticipantMenu.scss","webpack://telegram-t/./src/styles/_mixins.scss","webpack://telegram-t/./src/components/common/Avatar.scss","webpack://telegram-t/./src/components/calls/group/GroupCallParticipant.scss","webpack://telegram-t/./src/components/calls/group/GroupCallParticipantVideo.scss","webpack://telegram-t/./src/components/calls/group/GroupCall.scss","webpack://telegram-t/./src/components/calls/ActiveCallHeader.scss"],"sourcesContent":[".Modal {\n position: relative;\n z-index: var(--z-modal);\n\n &.delete,\n &.error,\n &.confirm,\n &.pin,\n &.unpin-all {\n .modal-dialog {\n max-width: 23rem;\n }\n }\n\n &.error {\n .modal-content > div {\n margin-top: 1rem;\n }\n }\n\n &.narrow {\n .modal-dialog {\n max-width: 20rem;\n }\n }\n\n &.report {\n .modal-dialog {\n max-width: 15rem;\n }\n }\n\n .modal-container {\n position: fixed;\n top: 0;\n bottom: 0;\n left: 0;\n right: 0;\n display: flex;\n justify-content: center;\n align-items: center;\n }\n\n .modal-backdrop {\n position: fixed;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: -1;\n background-color: rgba(0, 0, 0, 0.25);\n }\n\n &.transparent-backdrop .modal-backdrop {\n background-color: transparent;\n }\n\n .modal-dialog {\n position: relative;\n display: inline-flex;\n flex-direction: column;\n width: 100%;\n max-width: 35rem;\n min-width: 17.5rem;\n margin: 2rem auto;\n background-color: var(--color-background);\n box-shadow: 0 0.25rem 0.5rem 0.125rem var(--color-default-shadow);\n border-radius: var(--border-radius-default);\n transform: translate3d(0, -1rem, 0);\n\n transition: transform 0.2s ease, opacity 0.2s ease;\n\n body.animation-level-0 & {\n transition: none;\n transform: none !important;\n }\n\n @media (max-width: 450px) {\n max-width: calc(100vw - 3rem) !important;\n }\n }\n\n &.open .modal-dialog {\n transform: translate3d(0, 0, 0);\n }\n\n &.closing .modal-dialog {\n transform: translate3d(0, 1rem, 0);\n }\n\n .modal-header,\n %modal-header {\n padding: 1rem 1rem 0;\n display: flex;\n align-items: center;\n flex-shrink: 0;\n }\n\n .modal-title {\n font-size: 1.25rem;\n font-weight: 500;\n flex: 1 1 auto;\n overflow: hidden;\n text-overflow: ellipsis;\n\n &:not(:only-child) {\n margin: 0 1.3125rem;\n }\n }\n\n .modal-header-condensed {\n @extend %modal-header;\n padding: 0.5rem 1.25rem 0 0.9375rem !important;\n\n .modal-action-button {\n font-size: 0.875rem;\n height: 2.25rem;\n width: auto;\n line-height: 1.625rem;\n margin-left: auto;\n padding-left: 1.25rem;\n padding-right: 1.25rem;\n min-width: 5rem;\n }\n }\n\n .modal-content {\n width: 100%;\n flex-grow: 1;\n padding: 1rem;\n overflow-y: auto;\n max-height: 90vh;\n\n b,\n strong {\n word-break: break-word;\n }\n }\n\n .modal-title,\n .modal-content,\n .modal-content > p {\n unicode-bidi: plaintext;\n text-align: initial;\n }\n\n .modal-about {\n display: -webkit-box;\n -webkit-box-orient: vertical;\n -webkit-line-clamp: 5;\n text-overflow: ellipsis;\n overflow: hidden;\n }\n\n .modal-help {\n color: var(--color-text-secondary);\n font-size: 0.9375rem;\n line-height: 1.3;\n }\n\n .dialog-buttons {\n display: flex;\n align-items: flex-end;\n\n .confirm-dialog-button + .confirm-dialog-button {\n margin-left: 1rem;\n }\n }\n\n .confirm-dialog-button {\n width: auto;\n height: auto;\n margin-left: auto;\n text-align: right;\n font-weight: 500;\n white-space: pre-wrap;\n }\n}\n",".MicrophoneButton {\n display: flex;\n justify-content: center;\n align-items: center;\n outline: none !important;\n position: relative;\n width: 6rem;\n height: 6rem;\n border: 0;\n background: radial-gradient(100% 100% at 100% 0%, #00a0b9 0%, #33c659 55%, #33c659 100%);\n border-radius: 50%;\n font-size: 2rem;\n color: #fff;\n transition: 0.25s ease-out filter;\n\n &::before {\n content: \"\";\n display: block;\n position: absolute;\n width: 8rem;\n height: 8rem;\n background: #64C166;\n border-radius: 50%;\n filter: blur(10px);\n opacity: 0.2;\n pointer-events: none;\n\n body.is-ios & {\n display: none;\n }\n }\n\n &:hover {\n filter: brightness(0.9);\n }\n\n &.crossed {\n background: radial-gradient(100% 100% at 100% 0%, #00AFFE 0%, #00AFFE 55%, #007FFF 100%);\n\n &::before {\n background: #00AFFE;\n }\n }\n\n &.muted-by-admin {\n background: radial-gradient(85.5% 103.5% at 87.5% 20.65%, #CE4D74 0%, #3D52DF 100%);\n &::before {\n background: #3D52DF;\n }\n }\n\n &.is-connecting, &.is-connecting:hover {\n background: #222B34;\n &::before {\n background: transparent;\n }\n }\n}\n","@import '../../../styles/mixins';\n\n.participant-menu {\n position: absolute;\n --color-text: white;\n --color-background-compact-menu: #212121DD;\n --color-background-compact-menu-hover: #00000066;\n\n .bubble {\n background: none !important;\n border-radius: 0;\n padding: 0;\n border: none !important;\n box-shadow: none !important;\n overflow: visible;\n color: var(--color-text);\n\n .group {\n box-shadow: 0 0.25rem 0.5rem 0.125rem rgba(16, 16, 16, 0.3);\n overflow: hidden;\n background: var(--color-background);\n border-radius: var(--border-radius-default);\n margin-bottom: 0.5rem;\n }\n }\n\n &.compact {\n .group {\n background: var(--color-background-compact-menu);\n }\n }\n\n .volume-control {\n height: 3rem;\n\n .info {\n pointer-events: none;\n position: relative;\n z-index: 1;\n height: 100%;\n display: flex;\n flex-direction: row;\n align-items: center;\n padding: 0.75rem 1rem;\n\n .AnimatedSticker {\n margin-right: 2rem;\n }\n }\n\n &.high {\n --range-color: #4DA6E0;\n }\n\n &.normal {\n --range-color: #57BC6C;\n }\n\n &.medium {\n --range-color: #CAA53B;\n }\n\n &.low {\n --range-color: #CB5757;\n }\n\n position: relative;\n overflow: hidden;\n cursor: pointer;\n\n @mixin thumb-styles() {\n border: none;\n height: 3rem;\n width: 1.5rem;\n background: var(--range-color);\n border-radius: var(--border-radius-default);\n box-shadow: -13.5rem 0 0 12.75rem var(--range-color);\n transition: 0.25s ease-in-out background-color, 0.25s ease-in-out box-shadow;\n }\n\n @include reset-range();\n\n // Apply custom styles\n input[type=\"range\"] {\n height: 3rem;\n position: absolute;\n left: -1.5rem;\n top: 0;\n width: calc(100% + 3rem);\n margin: 0;\n z-index: 0;\n\n // Note that while we're repeating code here, that's necessary as you can't comma-separate these type of selectors.\n // Browsers will drop the entire selector if it doesn't understand a part of it.\n &::-webkit-slider-thumb {\n @include thumb-styles();\n }\n\n &::-moz-range-thumb {\n @include thumb-styles();\n }\n\n &::-ms-thumb {\n @include thumb-styles();\n }\n }\n }\n}\n","// @optimization\n@mixin while-transition() {\n .Transition > div:not(.Transition__slide--active) &, body.animating-right-column & {\n @content;\n }\n}\n\n@mixin overflow-y-overlay() {\n @supports (overflow-y: overlay) {\n overflow-y: overlay;\n\n //Workaround for Android <= 9\n overflow-x: hidden;\n }\n}\n\n@mixin reset-range() {\n input[type=\"range\"] {\n -webkit-appearance: none;\n display: block;\n width: 100%;\n height: 0.75rem;\n margin-bottom: 0.5rem;\n background: transparent;\n\n &:focus {\n outline: none;\n }\n\n &::-ms-track {\n width: 100%;\n cursor: pointer;\n\n background: transparent;\n border-color: transparent;\n color: transparent;\n }\n\n &::-webkit-slider-thumb {\n -webkit-appearance: none;\n }\n\n &::-moz-slider-thumb {\n -moz-appearance: none;\n }\n\n &::-webkit-slider-runnable-track {\n cursor: pointer;\n }\n\n &::-moz-range-track, &::-moz-range-progress {\n cursor: pointer;\n }\n }\n}\n",".Avatar {\n --color-user: var(--color-primary);\n flex: none;\n align-items: center;\n justify-content: center;\n width: 3.375rem;\n height: 3.375rem;\n border-radius: 50%;\n background: linear-gradient(var(--color-white) -125%, var(--color-user));\n color: white;\n font-weight: bold;\n display: flex;\n white-space: nowrap;\n user-select: none;\n\n &__img {\n border-radius: 50%;\n width: 100%;\n height: 100%;\n }\n\n .emoji {\n width: 1rem;\n height: 1rem;\n }\n\n &__icon {\n font-size: 2.5rem;\n\n &.icon-reply-filled {\n transform: scale(0.7);\n }\n }\n\n &.size-micro {\n width: 1rem;\n height: 1rem;\n font-size: 0.5rem;\n\n .emoji {\n width: 0.5625rem;\n height: 0.5625rem;\n }\n }\n\n &.size-tiny {\n width: 2rem;\n height: 2rem;\n font-size: 0.875rem;\n\n .emoji {\n width: 0.875rem;\n height: 0.875rem;\n }\n }\n\n &.size-small {\n width: 2.125rem;\n height: 2.125rem;\n font-size: 0.875rem;\n\n .emoji {\n width: 0.875rem;\n height: 0.875rem;\n }\n }\n\n &.size-medium {\n width: 2.75rem;\n height: 2.75rem;\n font-size: 1.1875rem;\n\n .emoji {\n width: 1rem;\n height: 1rem;\n }\n }\n\n &.size-large {\n font-size: 1.3125rem;\n\n i {\n font-size: 3.5rem;\n }\n\n .emoji {\n width: 1.3125rem;\n height: 1.3125rem;\n }\n }\n\n &.size-jumbo {\n width: 7.5rem;\n height: 7.5rem;\n font-size: 3.5rem;\n\n &__i {\n font-size: 6rem;\n }\n\n .emoji {\n width: 3.5rem;\n height: 3.5rem;\n }\n }\n\n &.online {\n position: relative;\n\n &::after {\n content: \"\";\n display: block;\n position: absolute;\n bottom: 0.0625rem;\n right: 0.0625rem;\n width: 0.875rem;\n height: 0.875rem;\n border-radius: 50%;\n border: 2px solid var(--color-background);\n background-color: #0ac630;\n flex-shrink: 0;\n }\n }\n\n &.interactive {\n cursor: pointer;\n }\n}\n",".GroupCallParticipant {\n position: relative;\n display: flex;\n flex-direction: row;\n align-items: center;\n color: #fff;\n padding: 0.5rem 0.75rem;\n border-radius: 0.75rem;\n transition: 0.15s ease-out background-color;\n cursor: pointer;\n\n &:hover {\n background: #2f363e;\n }\n\n audio {\n display: none;\n }\n\n .Avatar {\n margin-right: 1rem;\n }\n\n .info {\n min-width: 0;\n display: flex;\n flex-direction: column;\n\n .name {\n text-overflow: ellipsis;\n white-space: nowrap;\n overflow: hidden;\n }\n\n .about {\n text-overflow: ellipsis;\n white-space: nowrap;\n overflow: hidden;\n color: #848d94;\n font-size: 0.75rem;\n\n &.blue {\n color: #4da6e0;\n }\n\n &.green {\n color: #57bc6c;\n }\n\n &.red {\n color: #ff706f;\n }\n }\n }\n\n .microphone {\n flex-shrink: 0;\n display: flex;\n align-items: center;\n justify-content: center;\n width: 2.75rem;\n height: 2.75rem;\n margin-left: auto;\n font-size: 1.5rem;\n color: #ff706f;\n }\n\n &.can-self-unmute {\n .microphone {\n color: #848d94;\n }\n }\n\n .streams {\n cursor: pointer;\n display: flex;\n }\n}\n",".GroupCallParticipantVideo {\n border-radius: 0.75rem;\n overflow: hidden;\n position: relative;\n max-height: 12.875rem;\n width: calc(50% - 0.25rem);\n /* stylelint-disable-next-line plugin/no-low-performance-animation-properties */\n transition: 0.25s ease-out width;\n cursor: pointer;\n\n .thumbnail-avatar {\n position: absolute;\n border-radius: 0;\n width: 100%;\n height: 100%;\n transform: scale(1.1);\n\n img {\n filter: blur(10px);\n border-radius: 0;\n object-fit: cover;\n }\n }\n\n &:last-child:nth-child(odd) {\n width: 100%;\n }\n\n &::before {\n box-shadow: 0 0 0 3px transparent inset;\n width: 100%;\n height: 100%;\n position: absolute;\n display: block;\n content: \"\";\n z-index: 5;\n border-radius: 0.75rem;\n transition: 0.25s ease-out box-shadow;\n }\n\n &.active::before {\n box-shadow: 0px 0px 0px 3px #78ee7e inset;\n }\n\n .back-button {\n position: absolute;\n z-index: 5;\n top: 0.75rem;\n left: 0.75rem;\n background: rgba(0, 0, 0, 0.3);\n border: 0;\n color: white;\n border-radius: 1rem;\n padding: 0.25rem 0.75rem;\n display: flex;\n align-items: center;\n gap: 0.25rem;\n transition: 0.25s ease-out opacity, 0.25s ease-out background-color;\n opacity: 0;\n cursor: pointer;\n outline: none !important;\n\n &:hover {\n background: rgba(0, 0, 0, 0.4);\n }\n }\n\n video {\n display: block;\n width: 100%;\n }\n\n .video {\n object-fit: contain;\n height: 12.5rem;\n position: relative;\n }\n\n .thumbnail-wrapper {\n position: absolute;\n top: 50%;\n left: 50%;\n z-index: 0;\n width: 100%;\n transform: translate(-50%, -50%) scale(1.5);\n background: black;\n }\n\n .thumbnail {\n filter: blur(10px) brightness(0.5);\n object-fit: cover;\n }\n\n .info {\n position: absolute;\n bottom: 0;\n color: #fff;\n display: flex;\n align-items: center;\n padding: 0 0.5rem 0.25rem;\n width: 100%;\n height: 2rem;\n background: linear-gradient(0deg, #000, transparent);\n transition: 0.25s ease-out opacity;\n opacity: 0;\n\n .name {\n margin-left: 0.5rem;\n }\n\n .last-icon {\n margin-left: auto;\n }\n }\n}\n\n.videos:hover .GroupCallParticipantVideo {\n\n .info {\n opacity: 1;\n }\n\n .back-button {\n opacity: 1;\n }\n}\n",".GroupCall {\n .modal-content {\n display: flex;\n flex-direction: column;\n align-items: center;\n height: 37.5rem;\n }\n\n .modal-dialog {\n max-height: calc(100% - 4rem);\n background: #181f27;\n }\n\n .Menu {\n --color-text: white;\n --color-background-compact-menu: #212121DD;\n --color-background-compact-menu-hover: #00000066;\n .bubble {\n box-shadow: 0 0.25rem 0.5rem 0.125rem rgba(16, 16, 16, 0.3);\n }\n }\n\n &.single-column {\n opacity: 1 !important;\n\n .modal-dialog {\n max-width: 100% !important;\n border-bottom-left-radius: 0;\n border-bottom-right-radius: 0;\n margin-top: auto;\n margin-bottom: 0;\n transform: translate3d(0, 100%, 0);\n transition: transform 0.3s ease, opacity 0.3s ease;\n }\n\n .modal-backdrop {\n opacity: 0;\n transition: opacity 0.2s ease;\n }\n\n &.open {\n .modal-backdrop {\n opacity: 1;\n }\n\n .modal-dialog {\n transform: translate3d(0, 0, 0);\n }\n }\n }\n\n .header {\n width: 100%;\n display: flex;\n align-items: center;\n color: #fff;\n margin-bottom: 0.5rem;\n\n h3 {\n font-size: 1.25rem;\n font-weight: 500;\n margin: 0 auto 0 0.5rem;\n }\n }\n\n .videos {\n display: flex;\n flex-wrap: wrap;\n gap: 0.5rem;\n }\n\n .participants {\n margin-top: 0.75rem;\n background: #222b34;\n border-radius: 0.75rem;\n\n .Loading {\n padding: 2rem 0;\n }\n\n .invite-btn {\n padding: 0.25rem 0.75rem;\n display: flex;\n align-items: center;\n border-radius: 0.75rem;\n transition: 0.15s ease-out background-color;\n cursor: pointer;\n color: var(--color-text-secondary);\n\n &:hover {\n background: #2f363e;\n }\n\n .text {\n text-overflow: ellipsis;\n white-space: nowrap;\n overflow: hidden;\n }\n\n .icon {\n display: flex;\n justify-content: center;\n align-items: center;\n width: 2.75rem;\n height: 2.75rem;\n font-size: 1.5rem;\n margin-right: 1rem;\n }\n }\n }\n\n .scrollable {\n overflow: auto;\n padding-bottom: 2rem;\n max-width: 37.5rem;\n width: 100%;\n }\n\n .buttons {\n max-width: 37.5rem;\n margin-top: auto;\n display: flex;\n align-items: center;\n justify-content: space-around;\n width: 100%;\n position: relative;\n height: 8.75rem;\n\n button {\n cursor: pointer;\n }\n\n &::before {\n position: absolute;\n content: \"\";\n width: 100%;\n height: 2rem;\n background: linear-gradient(0deg, #181f27, rgba(24, 31, 39, 0));\n z-index: 0;\n top: -2rem;\n }\n\n .button-wrapper {\n width: 4rem;\n display: flex;\n flex-direction: column;\n align-items: center;\n\n .button-text {\n white-space: nowrap;\n font-size: 0.75rem;\n margin-top: 0.5rem;\n color: #fff;\n }\n\n &.microphone-wrapper {\n width: 6rem;\n\n .button-text {\n margin-top: 0.75rem;\n font-size: 1rem;\n }\n }\n }\n\n .Loading {\n position: absolute;\n transform: translate(0, -1.125rem);\n\n .Spinner {\n --spinner-size: 6.5rem;\n }\n }\n\n .video-buttons {\n display: flex;\n flex-direction: column;\n align-items: center;\n }\n\n .small-button,\n .smaller-button {\n outline: none;\n border: 0;\n background: #15415b;\n border-radius: 50%;\n width: 3rem;\n height: 3rem;\n color: #fff;\n font-size: 1.375rem;\n display: flex;\n align-items: center;\n justify-content: center;\n transition: 0.25s ease-out background-color;\n\n &:hover {\n background: #11364b;\n }\n }\n\n .small-button.camera.active {\n background: #15415b;\n\n &:hover {\n background: #11364b;\n }\n }\n\n .small-button.speaker {\n background: #2b3a51;\n\n &.active {\n background: #496092;\n }\n }\n\n .small-button.leave {\n background: #5a2824;\n\n &:hover {\n background: #49201d;\n }\n }\n\n .smaller-button {\n width: 2.5rem;\n height: 2.5rem;\n margin-bottom: 0.5rem;\n padding: 0;\n }\n }\n\n &.landscape .scrollable {\n display: flex;\n flex-direction: row;\n flex-grow: 1;\n gap: 1rem;\n align-items: flex-start;\n max-width: 100%;\n max-height: 100%;\n }\n\n &.landscape .GroupCallParticipantVideo {\n max-height: initial;\n\n video {\n height: 100%;\n }\n }\n\n &.landscape .buttons {\n position: absolute;\n left: calc(50% - 15.625rem / 2);\n transform: translateX(-50%);\n width: auto;\n gap: 1rem;\n bottom: 4rem;\n background: rgba(0, 0, 0, 0.6);\n backdrop-filter: blur(10px);\n border-radius: 1rem;\n z-index: 5;\n padding: 0.75rem 1rem;\n height: auto;\n\n .button-text {\n display: none;\n }\n\n .video-buttons {\n flex-direction: row;\n gap: 1rem;\n\n .smaller-button {\n margin-bottom: 0;\n }\n }\n\n .Loading {\n transform: none;\n .Spinner {\n --spinner-size: 3.25rem;\n }\n }\n\n .MicrophoneButton {\n canvas {\n width: 2rem !important;\n height: 2rem !important;\n }\n }\n\n .MicrophoneButton,\n .microphone-wrapper {\n width: 3rem;\n height: 3rem;\n\n .AnimatedSticker {\n display: flex;\n align-items: center;\n justify-content: center;\n }\n }\n\n &::before {\n display: none;\n }\n }\n\n &.landscape.no-sidebar .buttons {\n left: calc(50%);\n }\n\n &.landscape .streams {\n width: 100%;\n height: 100%;\n }\n\n &.landscape .videos {\n width: 100%;\n height: 100%;\n\n display: grid;\n --column-count: 1;\n grid-template-columns: repeat(var(--column-count), 1fr);\n grid-auto-rows: 1fr;\n\n .GroupCallParticipantVideo {\n max-height: 100%;\n width: 100%;\n\n .thumbnail-wrapper {\n height: 100%;\n }\n }\n\n &.span-last-video .GroupCallParticipantVideo:last-child {\n grid-column: span var(--column-count);\n }\n }\n\n &.landscape .participants {\n width: 15.625rem;\n margin-top: 0;\n }\n}\n",".ActiveCallHeader {\n position: absolute;\n top: 0;\n left: 0;\n height: 2rem;\n width: 100%;\n z-index: 1;\n\n display: flex;\n justify-content: center;\n font-weight: 500;\n font-size: 0.875rem;\n color: #fff;\n align-items: center;\n padding: 0 1rem;\n background: linear-gradient(135deg, rgb(49, 82, 232), rgb(143, 74, 172));\n transform: translateY(-100%);\n\n &.open {\n transform: translateY(0);\n }\n\n span {\n line-height: 100%;\n }\n}\n"],"names":[],"sourceRoot":""} \ No newline at end of file diff --git a/dist/654.5a866391dbb2ac6c1621.js b/dist/654.5a866391dbb2ac6c1621.js new file mode 100644 index 000000000..89b794da4 --- /dev/null +++ b/dist/654.5a866391dbb2ac6c1621.js @@ -0,0 +1,3 @@ +/*! For license information please see 654.5a866391dbb2ac6c1621.js.LICENSE.txt */ +(self.webpackChunktelegram_t=self.webpackChunktelegram_t||[]).push([[654],{7526:(e,t,a)=>{"use strict";a.r(t),a.d(t,{ActiveCallHeader:()=>X,CallFallbackConfirm:()=>K,GroupCall:()=>J});var n=a(3794),i=a(4050),o=a(3555),r=a(3716),s=a(1226),l=a(1192),c=a(2431),d=a(8958),u=a(782),p=a(2267),m=a(1394),v=a(8422),g=a(7225),f=a(1171);(0,o.iw)("apiUpdate",((e,t,a)=>{const{activeGroupCallId:i}=e.groupCalls;switch(a["@type"]){case"updateGroupCallLeavePresentation":t.toggleGroupCallPresentation({value:!1});break;case"updateGroupCallStreams":if(!a.userId||!i)break;if(!(0,c.GU)(e,i,a.userId))break;return(0,d.B6)(e,i,a.userId,(0,u.CE)(a,["@type","userId"]));case"updateGroupCallConnectionState":if(!i)break;if("disconnected"===a.connectionState){t.leaveGroupCall({isFromLibrary:!0});break}return(0,d.AH)(e,i,{connectionState:a.connectionState,isSpeakerDisabled:a.isSpeakerDisabled});case"updateGroupCallParticipants":{const{groupCallId:e,participants:t}=a;i===e&&(0,n.handleUpdateGroupCallParticipants)(t);break}case"updateGroupCallConnection":{if(a.data.stream){t.showNotification({message:"Big live streams are not yet supported"}),t.leaveGroupCall();break}(0,n.handleUpdateGroupCallConnection)(a.data,a.presentation);const i=(0,c.mU)(e);null!=i&&i.participants&&Object.keys(i.participants).length>0&&(0,n.handleUpdateGroupCallParticipants)(Object.values(i.participants));break}}})),(0,o.iw)("leaveGroupCall",(async(e,t,a)=>{const{isFromLibrary:i,shouldDiscard:r,shouldRemove:l,rejoin:u}=a||{},p=(0,c.mU)(e);if(!p)return;(0,o.R3)((0,d.Ic)(e,{connectionState:"disconnected"},p.participantsCount-1)),await(0,s.t9)("leaveGroupCall",{call:p});let m=!1;var g;r&&((e=(0,o.Rd)()).groupCalls.fallbackChatId===p.chatId&&(m=!0,null===(g=e.groupCalls.fallbackUserIdsToRemove)||void 0===g||g.forEach((a=>{t.deleteChatMember({chatId:e.groupCalls.fallbackChatId,userId:a})}))),await(0,s.t9)("discardGroupCall",{call:p}));e=(0,o.Rd)(),l&&(e=(0,d.dc)(e,p.id)),(0,v.Mt)(),(0,o.R3)({...e,groupCalls:{...e.groupCalls,isGroupCallPanelHidden:!0,activeGroupCallId:void 0,...m&&{fallbackChatId:void 0,fallbackUserIdsToRemove:void 0}}}),i||(0,n.leaveGroupCall)(),u&&t.joinGroupCall(u)})),(0,o.iw)("toggleGroupCallVideo",(async e=>{const t=(0,c.mU)(e),a=(0,l.dy)(e,e.currentUserId);a&&t&&(await(0,n.toggleStream)("video"),await(0,s.t9)("editGroupCallParticipant",{call:t,videoStopped:!(0,n.isStreamEnabled)("video"),participant:a}))})),(0,o.iw)("requestToSpeak",((e,t,a)=>{const{value:n}=a||{value:!0},i=(0,c.mU)(e),o=(0,l.dy)(e,e.currentUserId);o&&i&&(0,s.t9)("editGroupCallParticipant",{call:i,raiseHand:n,participant:o})})),(0,o.iw)("setGroupCallParticipantVolume",((e,t,a)=>{const{participantId:i,volume:o}=a,d=(0,c.mU)(e),u=(0,l.dy)(e,i);u&&d&&((0,n.setVolume)(i,Math.floor(o/r.Ro)/100),(0,s.t9)("editGroupCallParticipant",{call:d,volume:Number(o),participant:u}))})),(0,o.iw)("toggleGroupCallMute",(async(e,t,a)=>{const{participantId:i,value:o}=a||{},r=(0,c.mU)(e),d=(0,l.dy)(e,i||e.currentUserId);if(!d||!r)return;const u=void 0===o?(0,n.isStreamEnabled)("audio",d.id):o;i?(0,n.setVolume)(i,u?0:1):await(0,n.toggleStream)("audio"),await(0,s.t9)("editGroupCallParticipant",{call:r,muted:u,participant:d})})),(0,o.iw)("toggleGroupCallPresentation",(async(e,t,a)=>{const i=(0,c.mU)(e),o=(0,l.dy)(e,e.currentUserId);if(o&&i){if(void 0!==(null==a?void 0:a.value)?null==a?void 0:a.value:!(0,n.isStreamEnabled)("presentation")){const e=await(0,n.startSharingScreen)();if(!e)return;await(0,s.t9)("joinGroupCallPresentation",{call:i,params:e})}else await(0,n.toggleStream)("presentation",!1),await(0,s.t9)("leaveGroupCallPresentation",{call:i});await(0,s.t9)("editGroupCallParticipant",{call:i,presentationPaused:!(0,n.isStreamEnabled)("presentation"),participant:o})}})),(0,o.iw)("connectToActiveGroupCall",(async(e,t)=>{const a=(0,c.mU)(e);if(!a)return;if("discarded"===a.connectionState)return void t.showNotification({message:"This voice chat is not active"});const i=(0,v.FF)(),r=(0,v.NH)();if(!i||!r)return;const{currentUserId:d}=e;if(!d)return;const u=await(0,n.joinGroupCall)(d,r,i,t.apiUpdate);if(await(0,s.t9)("joinGroupCall",{call:a,params:u,inviteHash:a.inviteHash})&&(t.loadMoreGroupCallParticipants(),a.chatId)){const e=(0,l.Z1)((0,o.Rd)(),a.chatId);if(!e)return;await(0,g.ft)(e)}})),(0,o.iw)("inviteToCallFallback",(async(e,t,a)=>{const{chatId:n}=(0,l.Bt)(e)||{};if(!n)return;const i=(0,l.dy)(e,n);if(!i)return;const{shouldRemove:r}=a,d=(0,c.oq)(e);let u=Object.values(e.chats.byId).find((e=>e.title===d&&e.isCreator&&!e.isRestricted&&!e.isForbidden));if(u)t.updateChatMemberBannedRights({chatId:u.id,userId:n,bannedRights:{}}),(0,s.t9)("addChatMembers",u,[i],!0);else{if(u=await(0,s.t9)("createChannel",{title:d,users:[i]}),!u)return;const e=await(0,m.dc)(f,"avatar.png");(0,s.t9)("editChatPhoto",{chatId:u.id,accessHash:u.accessHash,photo:e})}const v=await(0,s.t9)("updatePrivateLink",{chat:u,usageLimit:1,expireDate:(0,p.b)(e.serverTimeOffset)+1800});if(v){if(r){const t=(e=(0,o.Rd)()).groupCalls.fallbackUserIdsToRemove||[];(0,o.R3)({...e,groupCalls:{...e.groupCalls,fallbackChatId:u.id,fallbackUserIdsToRemove:[...t,n]}})}t.sendMessage({text:`Join a call: ${v}`}),t.openChat({id:u.id}),t.createGroupCall({chatId:u.id}),t.closeCallFallbackConfirm()}}));var C=a(7361),h=a(6752),S=a(706),P=a(9107),E=a(4288),b=a(231),y=a(3106),Z=a(8964),k=a(3103);const I=()=>{var e,t;null===(e=(t=navigator).vibrate)||void 0===e||e.call(t,50)};var w=a(7204),G=a(7324),T=a(7799);const N=(0,i.X$)((e=>{let{size:t,name:a,playSegment:n,color:o}=e;const[r,s]=(0,i.eJ)();return(0,i.d4)((()=>{(0,G.Z)(a).then(s)}),[a]),i.ZP.createElement(T.Z,{id:a,play:!0,noLoop:!0,playSegment:n,size:t,speed:1,animationData:r,color:o})})),M=(0,i.X$)((0,o.c$)((e=>{const t=(0,c.mU)(e),{connectionState:a}=t||{},n=t&&(0,c.GU)(e,t.id,e.currentUserId),{raiseHandRating:i,hasAudioStream:o,canSelfUnmute:r,isMuted:s}=n||{};return{connectionState:a||"discarded",hasRequestedToSpeak:Boolean(i),noAudioStream:!o,canSelfUnmute:r,isMuted:s}}))((e=>{let{noAudioStream:t,canSelfUnmute:a,isMuted:n,hasRequestedToSpeak:r,connectionState:s}=e;const{toggleGroupCallMute:l,requestToSpeak:c,playGroupCallSound:d}=(0,o.Sv)(),u=(0,P.Z)(),p=(0,i.sO)("up"),[m,v]=(0,i.eJ)(!1),g="connected"!==s,f=!a&&n,C=(0,w.Z)(f);(0,i.d4)((()=>{C&&!f&&d("allowTalk")}),[d,C,f]);const S=(0,i.Ye)((()=>{if(m){const e=Math.floor(100*Math.random());return e<32?[0,120]:e<64?[120,240]:e<97?[240,420]:[420,540]}return!C&&f?t?[99,135]:[136,172]:C&&!f?[0,36]:f?[0,0]:t?[69,99]:[36,69]}),[C,m,t,f]),E=m?"HandFilled":"VoiceMini",b=()=>{I(),l()},y=(0,i.Ye)((()=>u(r?"VoipMutedTapedForSpeak":f?"VoipMutedByAdmin":t?"VoipUnmute":"VoipTapToMute")),[r,t,u,f]);return i.ZP.createElement("div",{className:"button-wrapper microphone-wrapper"},i.ZP.createElement("button",{className:(0,h.Z)("MicrophoneButton",t&&"crossed",a&&"can-self-unmute",g&&"is-connecting",f&&"muted-by-admin"),onMouseDown:()=>{if(f){if(m)return;return I(),c(),v(!0),void setTimeout((()=>{v(!1)}),3e3)}p.current="down",t&&setTimeout((()=>{"down"===p.current&&(p.current="hold",b())}),200)},onMouseUp:()=>{f||(b(),p.current="up")}},i.ZP.createElement(N,{name:E,size:48,playSegment:S})),i.ZP.createElement("div",{className:"button-text"},y))})));var U=a(4605),O=a(9118);var R=a(2328),$=a(2275);const D=[0,17],V=[17,34],A=(0,i.X$)((0,o.c$)((e=>({isAdmin:(0,c.Ht)(e)})))((e=>{let{participant:t,closeDropdown:a,isDropdownOpen:n,anchor:s,isAdmin:l}=e;const{toggleGroupCallMute:c,setGroupCallParticipantVolume:d,toggleGroupCallPanel:u,openChat:p,requestToSpeak:m}=(0,o.Sv)(),v=(0,P.Z)(),[g,f,C]=(0,S.Z)(),E=null==t?void 0:t.id,{isMutedByMe:b,isMuted:y,isSelf:k,canSelfUnmute:I}=t||{},w=Boolean(null==t?void 0:t.raiseHandRating),G=!I&&y,[T,M]=(0,i.eJ)(b?0:((null==t?void 0:t.volume)||r.aC)/r.Ro);(0,i.d4)((()=>{M(b?0:((null==t?void 0:t.volume)||r.aC)/r.Ro)}),[E]);const U=function(e){let t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];return(0,i.Ye)((()=>(0,O.P2)((e=>e()),e,!t)),[e,t])}(500),A=(0,i.I4)((e=>{e.stopPropagation(),f(),a()}),[f,a]),H=(0,i.I4)((e=>{e.stopPropagation(),m({value:!1}),a()}),[m,a]),F=(0,i.I4)((e=>{e.stopPropagation(),a(),l||M(b?r.aC/r.Ro:0),c({participantId:E,value:l?!G:!b})}),[a,c,E,l,G,b]),L=(0,i.I4)((e=>{e.stopPropagation(),u(),p({id:E}),a()}),[u,a,p,E]),x=0===T?D:V;return i.ZP.createElement("div",null,i.ZP.createElement(R.Z,{isOpen:n,positionX:"right",autoClose:!0,style:s?`right: 1rem; top: ${s.y}px;`:void 0,onClose:a,className:"participant-menu"},!k&&!G&&i.ZP.createElement("div",{className:"group"},i.ZP.createElement("div",{className:(0,h.Z)("volume-control",T<50&&"low",T>=50&&T<100&&"medium",T>=100&&T<150&&"normal",T>=150&&"high")},i.ZP.createElement("input",{type:"range",min:"0",max:"200",value:T,onChange:e=>{const t=Number(e.target.value);M(t),U((()=>{0===t?c({participantId:E,value:!0}):d({participantId:E,volume:Math.floor(t*r.Ro)})}))}}),i.ZP.createElement("div",{className:"info"},i.ZP.createElement(N,{name:"Speaker",playSegment:x,size:24}),i.ZP.createElement("span",null,T,"%")))),i.ZP.createElement("div",{className:"group"},w&&k&&i.ZP.createElement(Z.Z,{icon:"stop-raising-hand",onClick:H},v("VoipGroupCancelRaiseHand")),!k&&i.ZP.createElement(Z.Z,{icon:"user",onClick:L},v("VoipGroupOpenProfile")),!k&&i.ZP.createElement(Z.Z,{icon:y&&l?"allow-speak":"microphone-alt",onClick:F},v(l?G?"VoipGroupAllowToSpeak":"VoipMute":b?"VoipGroupUnmuteForMe":"VoipGroupMuteForMe")),!k&&l&&i.ZP.createElement(Z.Z,{icon:"delete-user",destructive:!0,onClick:A},v("VoipGroupUserRemove")))),!k&&l&&i.ZP.createElement($.Z,{isOpen:g,userId:E,onClose:C}))})));var H=a(7407),F=a(172);const L=(0,i.X$)((e=>{let{participant:t,noColor:a}=e;const{isMuted:o,isMutedByMe:r}=t,s=(t.amplitude||0)>n.THRESHOLD,l=Boolean(t.raiseHandRating),c=(0,w.Z)(l),d=!Boolean(null==t?void 0:t.canSelfUnmute)&&o,u=(0,w.Z)(o),p=(0,i.Ye)((()=>o&&!u?[43,64]:!o&&u?[22,42]:l&&!c?[65,84]:!d&&c?[0,21]:o?[22,23]:[43,44]),[o,d,l]),m=(0,i.Ye)((()=>a?[255,255,255]:l?[77,166,224]:d||r?[255,112,111]:s?[87,188,108]:[132,141,148]),[a,l,d,r,s]);return i.ZP.createElement(N,{name:"VoiceOutlined",playSegment:p,size:28,color:m})})),x=(0,i.X$)((0,o.c$)(((e,t)=>{let{participant:a}=t;return{user:a.isUser?(0,l.dy)(e,a.id):void 0,chat:a.isUser?void 0:(0,l.Z1)(e,a.id)}}))((e=>{let{openParticipantMenu:t,participant:a,user:o,chat:s}=e;const l=(0,i.sO)(null),c=(0,P.Z)(),{isSelf:d,isMutedByMe:u,isMuted:p}=a,m=(a.amplitude||0)>n.THRESHOLD,v=Boolean(a.raiseHandRating),[g,f]=(0,i.Ye)((()=>d?[c("ThisIsYou"),"blue"]:u?[c("VoipGroupMutedForMe"),"red"]:v?[c("WantsToSpeak"),"blue"]:!p&&m?[a.volume&&a.volume!==r.aC?c("SpeakingWithVolume",(a.volume/r.Ro).toString()).replace("%%","%"):c("Speaking"),"green"]:a.about?[a.about,""]:[c("Listening"),"blue"]),[m,a.volume,c,d,u,v,p,a.about]);if(!o&&!s)return;const C=o?`${o.firstName||""} ${o.lastName||""}`:null==s?void 0:s.title;return i.ZP.createElement("div",{className:(0,h.Z)("GroupCallParticipant",a.canSelfUnmute&&"can-self-unmute"),onClick:()=>{d||t(l.current,a)},ref:l},i.ZP.createElement(F.Z,{user:o,chat:s,size:"medium"}),i.ZP.createElement("div",{className:"info"},i.ZP.createElement("span",{className:"name"},C),i.ZP.createElement("span",{className:(0,h.Z)("about",f)},g)),i.ZP.createElement("div",{className:"microphone"},i.ZP.createElement(L,{participant:a})))})));var j=a(1273);const _=(0,i.X$)((0,o.c$)((e=>{const{participantsCount:t,participants:a}=(0,c.mU)(e)||{};return{participants:a,participantsCount:t||0}}))((e=>{let{participants:t,participantsCount:a,openParticipantMenu:n}=e;const{createGroupCallInviteLink:r,loadMoreGroupCallParticipants:s}=(0,o.Sv)(),l=(0,P.Z)(),c=(0,i.Ye)((()=>Object.keys(t||{})),[t]),[d,u]=(0,H.Z)(s,c,c.length>=a);return i.ZP.createElement("div",{className:"participants"},i.ZP.createElement("div",{className:"invite-btn",onClick:r},i.ZP.createElement("div",{className:"icon"},i.ZP.createElement("i",{className:"icon-add-user"})),i.ZP.createElement("div",{className:"text"},l("VoipGroupInviteMember"))),i.ZP.createElement(j.Z,{items:d,onLoadMore:u},null==d?void 0:d.map((e=>t[e]&&i.ZP.createElement(x,{key:e,openParticipantMenu:n,participant:t[e]})))))}))),B=(0,i.X$)((0,o.c$)(((e,t)=>{let{participant:a}=t;return{currentUserId:e.currentUserId,user:a.isUser?(0,l.dy)(e,a.id):void 0,chat:a.isUser?void 0:(0,l.Z1)(e,a.id),isActive:(a.amplitude||0)>n.THRESHOLD}}))((e=>{let{type:t,onClick:a,user:o,chat:s,isActive:l,isFullscreen:c}=e;const d=(0,P.Z)(),u=(0,i.I4)((()=>{a&&a((null==o?void 0:o.id)||s.id,t)}),[s,a,t,null==o?void 0:o.id]);if(!o&&!s)return;const p=(0,n.getUserStreams)((null==o?void 0:o.id)||s.id);return i.ZP.createElement("div",{className:(0,h.Z)("GroupCallParticipantVideo",l&&"active"),onClick:u},c&&i.ZP.createElement("button",{className:"back-button"},i.ZP.createElement("i",{className:"icon-arrow-left"}),d("Back")),i.ZP.createElement(F.Z,{user:o,chat:s,className:"thumbnail-avatar"}),r.LH&&i.ZP.createElement("div",{className:"thumbnail-wrapper"},i.ZP.createElement("video",{className:"thumbnail",muted:!0,autoPlay:!0,playsInline:!0,srcObject:null==p?void 0:p[t]})),i.ZP.createElement("video",{className:"video",muted:!0,autoPlay:!0,playsInline:!0,srcObject:null==p?void 0:p[t]}),i.ZP.createElement("div",{className:"info"},i.ZP.createElement("i",{className:"icon-microphone-alt"}),i.ZP.createElement("span",{className:"name"},(null==o?void 0:o.firstName)||(null==s?void 0:s.title)),"presentation"===t&&i.ZP.createElement("i",{className:"last-icon icon-active-sessions"})))}))),z=(0,i.X$)((0,o.c$)((e=>{const{participants:t}=(0,c.mU)(e)||{};return{participants:t}}))((e=>{let{participants:t,onDoubleClick:a}=e;const[n,o]=(0,i.eJ)(void 0),r=(0,i.Ye)((()=>Object.values(t||{}).filter((e=>e.hasPresentationStream))),[t]),s=(0,i.Ye)((()=>Object.values(t||{}).filter((e=>e.hasVideoStream))),[t]),l=s.length+r.length,c=l<=2?1:l<=6?2:l<=9?3:4,d=3===l||2===c&&l%2!=0,u=(0,i.I4)(((e,t)=>{n&&e===n.id&&t===n.type?o(void 0):o({id:e,type:t})}),[n]);return i.ZP.createElement("div",{className:"streams",onDoubleClick:a},i.ZP.createElement("div",{className:(0,h.Z)("videos",d&&"span-last-video"),style:`--column-count: ${n?1:c}`},n&&i.ZP.createElement(B,{key:n.id,isFullscreen:!0,onClick:u,participant:t[n.id],type:n.type}),n?void 0:r.map((e=>i.ZP.createElement(B,{key:e.id,onClick:u,participant:e,type:"presentation"}))),n?void 0:s.map((e=>i.ZP.createElement(B,{key:e.id,onClick:u,participant:e,type:"video"})))))}))),q=[0,10],J=(0,i.X$)((0,o.c$)(((e,t)=>{let{groupCallId:a}=t;const{connectionState:n,title:i,isSpeakerDisabled:o,participants:r,participantsCount:s}=(0,c.$5)(e,a)||{};return{connectionState:n,title:i,isSpeakerEnabled:!o,participantsCount:s,meParticipant:(0,c.GU)(e,a,e.currentUserId),isGroupCallPanelHidden:Boolean(e.groupCalls.isGroupCallPanelHidden),isAdmin:(0,c.Ht)(e),participants:r}}))((e=>{let{groupCallId:t,isGroupCallPanelHidden:a,connectionState:r,isSpeakerEnabled:s,title:l,meParticipant:c,isAdmin:d,participants:u}=e;const{toggleGroupCallVideo:p,toggleGroupCallPresentation:m,leaveGroupCall:v,toggleGroupCallPanel:g,connectToActiveGroupCall:f,playGroupCallSound:I}=(0,o.Sv)(),w=(0,P.Z)(),G=(0,i.sO)(null),[T,O]=(0,i.eJ)(!1),[R,$,D]=(0,S.Z)(),[V,H,F]=(0,S.Z)(!0),L=u&&Object.values(u).some((e=>e.video||e.presentation)),x=R&&!C.wB&&L,[j,B]=(0,i.eJ)(),[J,X,Y]=(0,S.Z)(),[W,Q,K]=(0,S.Z)(),[ee,te]=(0,i.eJ)(!1),[ae,ne]=(0,i.eJ)(!1),ie=null==c?void 0:c.hasVideoStream,oe=null==c?void 0:c.hasPresentationStream,re="connected"!==r,se=!(null==c?void 0:c.canSelfUnmute)&&(null==c?void 0:c.isMuted),le=(0,i.I4)(((e,t)=>{const a=e.getBoundingClientRect(),n=G.current;B({anchor:{x:a.left,y:a.top-n.offsetTop+60},participant:t}),X()}),[X]);(0,i.d4)((()=>{"connected"===r?I({sound:"join"}):"reconnecting"===r&&I({sound:"connecting"})}),[r,I]);const ce=(0,i.I4)((()=>{K(),te(!1)}),[K]),de=(0,i.Ye)((()=>e=>{let{onTrigger:t,isOpen:a}=e;return i.ZP.createElement(b.Z,{round:!0,size:"smaller",color:"translucent",className:a?"active":void 0,onClick:t,ariaLabel:w("AccDescrMoreOptions")},i.ZP.createElement("i",{className:"icon-more"}))}),[w]),ue=(0,i.I4)((()=>{G.current&&(R?document.exitFullscreen().then(D):G.current.requestFullscreen().then($))}),[D,R,$]),pe=(0,i.I4)((()=>{V?F():H()}),[F,V,H]),me=(0,i.I4)((()=>{C.t0&&(R||F(),ue())}),[F,ue,R]),ve=(0,i.I4)((()=>{R?D():$()}),[D,R,$]),ge=(0,i.I4)((()=>{g(),R&&D()}),[D,R,g]);(0,i.d4)((()=>{if(!C.t0)return;const e=G.current;return e?(e.addEventListener("fullscreenchange",ve),()=>{e.removeEventListener("fullscreenchange",ve)}):void 0}),[ve]),(0,i.d4)((()=>{f()}),[f,t]);const fe=(0,i.I4)((()=>{te(!0),ne(!0),Q(),R&&ue()}),[ue,R,Q]),Ce=(0,i.I4)((()=>{if(d&&!W)return Q(),void(R&&ue());I({sound:"leave"}),O(!0),K()}),[K,ue,d,W,R,Q,I]),he=(0,i.I4)((()=>{T&&v({shouldDiscard:ae})}),[T,v,ae]);return i.ZP.createElement(k.Z,{isOpen:!a&&!T,onClose:g,className:(0,h.Z)("GroupCall",C.wB&&"single-column",x&&"landscape",!V&&"no-sidebar"),dialogRef:G,onCloseAnimationEnd:he},i.ZP.createElement("div",{className:"header"},i.ZP.createElement("h3",null,l||w("VoipGroupVoiceChat")),C.t0&&i.ZP.createElement(b.Z,{round:!0,size:"smaller",color:"translucent",onClick:ue,ariaLabel:w(R?"AccExitFullscreen":"AccSwitchToFullscreen")},i.ZP.createElement("i",{className:R?"icon-smallscreen":"icon-fullscreen"})),x&&i.ZP.createElement(b.Z,{round:!0,size:"smaller",color:"translucent",onClick:pe},i.ZP.createElement("i",{className:"icon-sidebar"})),(n.IS_SCREENSHARE_SUPPORTED&&!se||d)&&i.ZP.createElement(y.Z,{positionX:"right",trigger:de},n.IS_SCREENSHARE_SUPPORTED&&!se&&i.ZP.createElement(Z.Z,{icon:"share-screen",onClick:m},w(oe?"VoipChatStopScreenCapture":"VoipChatStartScreenCapture")),d&&i.ZP.createElement(Z.Z,{icon:"phone-discard-outline",onClick:fe,destructive:!0},w("VoipGroupLeaveAlertEndChat"))),i.ZP.createElement(b.Z,{round:!0,size:"smaller",color:"translucent",onClick:ge},i.ZP.createElement("i",{className:"icon-close"}))),i.ZP.createElement("div",{className:"scrollable custom-scroll"},i.ZP.createElement(z,{onDoubleClick:me}),(!x||V)&&i.ZP.createElement(_,{openParticipantMenu:le})),i.ZP.createElement(A,{participant:null==j?void 0:j.participant,anchor:null==j?void 0:j.anchor,isDropdownOpen:J,closeDropdown:Y}),i.ZP.createElement("div",{className:"buttons"},re&&i.ZP.createElement(E.Z,null),i.ZP.createElement("div",{className:"button-wrapper"},i.ZP.createElement("div",{className:"video-buttons"},ie&&(C.wZ||C.cj)&&i.ZP.createElement("button",{className:"smaller-button",onClick:n.switchCameraInput},i.ZP.createElement(N,{name:"CameraFlip",playSegment:q,size:24})),i.ZP.createElement("button",{className:(0,h.Z)("small-button",se?"speaker":"camera",(ie||se&&s)&&"active"),onClick:()=>{se?(0,n.toggleSpeaker)():p()}},i.ZP.createElement("i",{className:se?"icon-speaker":ie?"icon-video-stop":"icon-video"}))),i.ZP.createElement("div",{className:"button-text"},w(se?"VoipSpeaker":"VoipCamera"))),i.ZP.createElement(M,null),i.ZP.createElement("div",{className:"button-wrapper"},i.ZP.createElement("button",{className:"small-button leave",onClick:Ce},i.ZP.createElement("i",{className:"icon-phone-discard"})),i.ZP.createElement("div",{className:"button-text"},w("VoipGroupLeave")))),i.ZP.createElement(k.Z,{isOpen:W,onClose:ce,className:"error",title:w(ee?"VoipGroupEndAlertTitle":"VoipGroupLeaveAlertTitle")},i.ZP.createElement("p",null,w(ee?"VoipGroupEndAlertText":"VoipGroupLeaveAlertText")),!ee&&i.ZP.createElement(U.Z,{label:w("VoipGroupEndChat"),checked:ae,onCheck:ne}),i.ZP.createElement(b.Z,{isText:!0,className:"confirm-dialog-button",onClick:Ce},w(ee?"VoipGroupEnd":"VoipGroupLeave")),i.ZP.createElement(b.Z,{isText:!0,className:"confirm-dialog-button",onClick:ce},w("Cancel"))))}))),X=(0,i.X$)((0,o.c$)((e=>({groupCall:(0,c.mU)(e),isGroupCallPanelHidden:e.groupCalls.isGroupCallPanelHidden,meParticipant:(0,c.GU)(e,e.groupCalls.activeGroupCallId,e.currentUserId)})))((e=>{let{groupCall:t,meParticipant:a,isGroupCallPanelHidden:n}=e;const{toggleGroupCallPanel:r}=(0,o.Sv)(),s=(0,P.Z)();if((0,i.d4)((()=>(document.body.classList.toggle("has-group-call-header",n),()=>{document.body.classList.toggle("has-group-call-header",!1)})),[n]),t&&a)return i.ZP.createElement("div",{className:(0,h.Z)("ActiveCallHeader",n&&"open"),onClick:r},i.ZP.createElement("span",{className:"title"},t.title||s("VoipGroupVoiceChat")))})));var Y=a(7551),W=a(5806),Q=a(8360);const K=(0,i.X$)((0,o.c$)((e=>{const{chatId:t}=(0,l.Bt)(e)||{},a=t?(0,l.dy)(e,t):void 0;return{userFullName:a?(0,W.Js)(a):void 0,channelTitle:(0,c.oq)(e)}}))((e=>{let{isOpen:t,channelTitle:a,userFullName:n}=e;const{closeCallFallbackConfirm:r,inviteToCallFallback:s}=(0,o.Sv)(),[l,c]=(0,i.eJ)(!0),d=(0,Q.Z)(n,!0),u=(0,i.I4)((()=>{s({shouldRemove:l})}),[s,l]);return i.ZP.createElement(Y.Z,{title:"Start Call",isOpen:t,confirmHandler:u,onClose:r},i.ZP.createElement("p",null,"The call will be started in a private channel ",i.ZP.createElement("b",null,a),"."),i.ZP.createElement(U.Z,{label:`Remove ${d} from this channel after the call`,checked:l,onCheck:c}))})))},3794:(e,t)=>{(()=>{"use strict";var e={"./src/blacksilence.ts":(e,t,a)=>{a.r(t),a.d(t,{silence:()=>n,black:()=>i});const n=e=>{const t=e.createOscillator(),a=t.connect(e.createMediaStreamDestination());return t.start(),new MediaStream([Object.assign(a.stream.getAudioTracks()[0],{enabled:!1})])},i=function(){let{width:e=640,height:t=480}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};const a=Object.assign(document.createElement("canvas"),{width:e,height:t}),n=a.getContext("2d");if(!n)throw Error("Cannot create canvas ctx");n.fillRect(0,0,e,t);const i=a.captureStream();return new MediaStream([Object.assign(i.getVideoTracks()[0],{enabled:!1})])}},"./src/buildSdp.ts":(e,t,a)=>{a.r(t),a.d(t,{default:()=>i});var n=a("./src/utils.ts");const i=function(e){let t=arguments.length>1&&void 0!==arguments[1]&&arguments[1],a=arguments.length>2&&void 0!==arguments[2]&&arguments[2];const i=[],o=e=>{i.push(e)},{sessionId:r,ssrcs:s,audioExtensions:l,videoExtensions:c,audioPayloadTypes:d,videoPayloadTypes:u,transport:{ufrag:p,pwd:m,fingerprints:v,candidates:g}}=e;o("v=0"),o(`o=- ${r} 2 IN IP4 0.0.0.0`),o("s=-"),o("t=0 0"),o(`a=group:BUNDLE ${s.map((e=>e.endpoint)).join(" ")}${a?"":" 2"}`),o("a=ice-lite");const f=e=>{let t="";t+="a=candidate:",t+=`${e.foundation} ${e.component} ${e.protocol} ${e.priority} ${e.ip} ${e.port} typ ${e.type}`,"rel-addr"in e&&(t+=` raddr ${e["rel-addr"]} rport ${e["rel-port"]}`),t+=` generation ${e.generation}`,o(t)},C=()=>{o(`a=ice-ufrag:${p}`),o(`a=ice-pwd:${m}`),v.forEach((e=>{o(`a=fingerprint:${e.hash} ${e.fingerprint}`),o("a=setup:passive")})),g.forEach(f)},h=e=>{var t;const{channels:a,id:n,name:i,clockrate:r,parameters:s}=e;var l=a?`/${a}`:"";o(`a=rtpmap:${n} ${i}/${r}${l}`),s&&(l=Object.keys(s).map((e=>`${e}=${s[e]};`)).join(" "),o(`a=fmtp:${n} ${l}`)),null===(t=e["rtcp-fbs"])||void 0===t||t.forEach((e=>{o(`a=rtcp-fb:${n} ${e.type}${e.subtype?` ${e.subtype}`:""}`)}))};return e=e=>{const a=e.isVideo?u:d;var i=e.isVideo?"video":"audio";o(`m=${i} ${e.isMain?1:0} RTP/SAVPF ${a.map((e=>e.id)).join(" ")}`),o("c=IN IP4 0.0.0.0"),o("b=AS:1300"),o(`a=mid:${e.endpoint}`),o("a=rtcp-mux"),a.forEach(h),o("a=rtcp:1 IN IP4 0.0.0.0"),e.isVideo&&o("a=rtcp-rsize"),(e.isVideo?c:l).forEach((e=>{let{id:t,uri:a}=e;o(`a=extmap:${t} ${a}`)})),e.isRemoved?o("a=inactive"):(C(),t?o("a=recvonly"):(e.isMain?o("a=sendrecv"):(o("a=sendonly"),o("a=bundle-only")),e.sourceGroups.forEach((t=>{o(`a=ssrc-group:${t.semantics} ${t.sources.map(n.fromTelegramSource).join(" ")}`),t.sources.forEach((t=>{t=(0,n.fromTelegramSource)(t),o(`a=ssrc:${t} cname:${e.endpoint}`),o(`a=ssrc:${t} msid:${e.endpoint} ${e.endpoint}`),o(`a=ssrc:${t} mslabel:${e.endpoint}`),o(`a=ssrc:${t} label:${e.endpoint}`)}))}))))},s.filter((e=>"0"===e.endpoint||"1"===e.endpoint)).map(e),a||(o("m=application 1 UDP/DTLS/SCTP webrtc-datachannel"),o("c=IN IP4 0.0.0.0"),C(),o("a=ice-options:trickle"),o("a=mid:"+(a?"1":"2")),o("a=sctp-port:5000"),o("a=max-message-size:262144")),s.filter((e=>"0"!==e.endpoint&&"1"!==e.endpoint)).map(e),`${i.join("\n")}\n`}},"./src/parseSdp.ts":(e,t,a)=>{a.r(t),a.d(t,{default:()=>i});var n=a("./src/utils.ts");const i=e=>{var t,a;if(!e||!e.sdp)throw Error("Failed parsing SDP: session description is null");const i=e.sdp.split("\r\nm=").map(((e,t)=>0===t?e:`m=${e}`)).reduce(((e,t)=>{var a;return e[(null===(a=t.match(/^m=(.+?)\s/))||void 0===a?void 0:a[1])||"header"]=t.split("\r\n").filter(Boolean),e}),{});var o=(e,t)=>{var a,n;return t?null===(a=i[t])||void 0===a||null===(n=a.find((t=>t.startsWith(e))))||void 0===n?void 0:n.substr(e.length):Object.values(i).map((t=>{var a;return null===(a=t.find((t=>t.startsWith(e))))||void 0===a?void 0:a.substr(e.length)})).filter(Boolean)[0]};const r=o("a=ssrc:","audio");var s=r&&Number(r.split(" ")[0]);const l=(null===(t=o("a=ssrc-group:","video"))||void 0===t?void 0:t.split(" "))||void 0;if(!l)throw Error("Failed parsing SDP: no video ssrc");var[c,d]=(null===(a=o("a=fingerprint:"))||void 0===a?void 0:a.split(" "))||[];if(!c||!d)throw Error("Failed parsing SDP: no fingerprint");if(e=o("a=ice-ufrag:"),o=o("a=ice-pwd:"),!e||!o)throw Error("Failed parsing SDP: no ICE ufrag or pwd");return{fingerprints:[{fingerprint:d,hash:c,setup:"active"}],pwd:o,ufrag:e,...s&&{ssrc:(0,n.toTelegramSource)(s)},...l&&{"ssrc-groups":[{semantics:l[0],sources:l.slice(1,l.length).map(Number).map(n.toTelegramSource)}]}}}},"./src/secretsauce.ts":(e,t,a)=>{a.r(t),a.d(t,{getDevices:()=>async function(e){let t=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];return(await navigator.mediaDevices.enumerateDevices()).filter((a=>a.kind===`${e}${t?"input":"output"}`))},toggleSpeaker:()=>function(){var e,t;s&&(s.isSpeakerDisabled=!s.isSpeakerDisabled,null!==(e=s)&&void 0!==e&&null!==(t=e.onUpdate)&&void 0!==t&&t.call(e,{"@type":"updateGroupCallConnectionState",connectionState:"connected",isSpeakerDisabled:s.isSpeakerDisabled}),s.participantFunctions&&Object.values(s.participantFunctions).forEach((e=>{var t,a;null===(t=e.toggleMute)||void 0===t||t.call(e,!(null===(a=s)||void 0===a||!a.isSpeakerDisabled))})))},toggleNoiseSuppression:()=>function(){if(s&&s.myId&&s.streams){const a=s.streams[s.myId].audio;if(a){const n=a.getTracks()[0];var e,t;n&&(({echoCancellation:e,noiseSuppression:t}=n.getConstraints()),n.applyConstraints({echoCancellation:!e,noiseSuppression:!t}))}}},getUserStreams:()=>c,setVolume:()=>function(e,t){var a,n,i;const o=null===(a=s)||void 0===a||null===(n=a.participantFunctions)||void 0===n?void 0:n[e];o&&(null===(i=o.setVolume)||void 0===i||i.call(o,t))},isStreamEnabled:()=>d,switchCameraInput:()=>async function(){var e;if(null!==(e=s)&&void 0!==e&&e.myId&&s.connection&&s.streams&&s.facingMode){var t;const e=null===(t=c(s.myId))||void 0===t?void 0:t.video;if(e){const t=e.getTracks()[0];if(t){const e=s.connection.getSenders().find((e=>{var a;return t.id===(null===(a=e.track)||void 0===a?void 0:a.id)}));if(e){s.facingMode="environment"===s.facingMode?"user":"environment";try{const t=await p("video",s.facingMode);await e.replaceTrack(t.getTracks()[0]),s.streams[s.myId].video=t}catch(e){}}}}}},toggleStream:()=>m,leaveGroupCall:()=>g,handleUpdateGroupCallParticipants:()=>async function(e){if(s){const{participants:n,conference:o,connection:r,myId:l}=s;if(n&&o&&r&&o.ssrcs&&o.transport&&l)if(e.find((e=>{var t,a,n,i;return e.isSelf&&e.source!==(null===(t=s)||void 0===t||null===(a=t.conference)||void 0===a||null===(n=a.ssrcs)||void 0===n||null===(i=n.find((e=>e.isMain&&!e.isVideo)))||void 0===i?void 0:i.sourceGroups[0].sources[0])})))g();else{const n=[];if(e.forEach((e=>{if(e.isSelf)e.isMuted&&!e.canSelfUnmute&&(m("audio",!1),m("video",!1),m("presentation",!1));else{var t=e.isLeft;const a=e.isMuted||e.isMutedByMe,i=!e.isVideoJoined||!e.video||t,r=!e.presentation||t;let s=!1,l=!1,c=!1;o.ssrcs.filter((t=>t.userId===e.id)).forEach((t=>{t.isVideo||(t.sourceGroups[0].sources[0]===e.source&&(l=!0),t.isRemoved=a),t.isVideo&&(t.isPresentation||(e.video&&t.endpoint===e.video.endpoint&&(s=!0),t.isRemoved=i),t.isPresentation&&(e.presentation&&t.endpoint===e.presentation.endpoint&&(c=!0),t.isRemoved=r))})),a||l||o.ssrcs.push({userId:e.id,isMain:!1,endpoint:`audio${e.source}`,isVideo:!1,sourceGroups:[{semantics:"FID",sources:[e.source]}]}),i||s||!e.video||(n.push(e.video.endpoint),o.ssrcs.push({userId:e.id,isMain:!1,endpoint:e.video.endpoint,isVideo:!0,sourceGroups:e.video.sourceGroups})),r||c||!e.presentation||o.ssrcs.push({isPresentation:!0,userId:e.id,isMain:!1,endpoint:e.presentation.endpoint,isVideo:!0,sourceGroups:e.presentation.sourceGroups})}})),s.updatingParticipantsQueue)s.updatingParticipantsQueue.push(o);else{s.updatingParticipantsQueue=[],e=(0,i.default)(o),await r.setRemoteDescription({type:"offer",sdp:e});try{var t=await r.createAnswer();if(await r.setLocalDescription(t),u(l),0async function(e,t){if(s){var a=t?s.screenshareConference:s.conference;const d=t?s.screenshareConnection:s.connection;if(a&&d&&a.ssrcs){var n,o,r,l,c=Date.now();e={...a,transport:e.transport,sessionId:c,audioExtensions:null===(n=e.audio)||void 0===n?void 0:n["rtp-hdrexts"],audioPayloadTypes:null===(o=e.audio)||void 0===o?void 0:o["payload-types"],videoExtensions:null===(r=e.video)||void 0===r?void 0:r["rtp-hdrexts"],videoPayloadTypes:null===(l=e.video)||void 0===l?void 0:l["payload-types"]},s={...s,...t?{screenshareConference:e}:{conference:e}};try{await d.setRemoteDescription({type:"answer",sdp:(0,i.default)(e,!0,t)})}catch(e){console.error(e)}}}},startSharingScreen:()=>async function(){if(s)try{const e=await p("presentation");return e?(e.getTracks()[0].onended=()=>{var e;s&&s.myId&&(null!==(e=s.streams)&&void 0!==e&&e[s.myId].presentation,u(s.myId),l())},new Promise((t=>{var{connection:a,dataChannel:t}=h([e],t,!0);s={...s,screenshareConnection:a,screenshareDataChannel:t}}))):void 0}catch(e){return}},joinGroupCall:()=>function(e,t,a,n){if(s)throw Error("Already in call");v("connecting");var i=new MediaStream;return a.srcObject=i,a.play().catch((e=>console.warn(e))),s={onUpdate:n,participants:[],myId:e,speaking:{},silence:(0,o.silence)(t),black:(0,o.black)({width:640,height:480}),analyserInterval:setInterval(f,1e3),audioElement:a,audioContext:t,mediaStream:i},new Promise((e=>{s={...s,...h([s.silence,s.black],e)}}))}});var n=a("./src/parseSdp.ts"),i=a("./src/buildSdp.ts"),o=a("./src/blacksilence.ts"),r=a("./src/utils.ts");let s;function l(e){var t,a,n,i;s&&(null!==(t=s.screenshareDataChannel)&&void 0!==t&&t.close(),null!==(a=s.screenshareConnection)&&void 0!==a&&a.close(),e||null===(n=(i=s).onUpdate)||void 0===n||n.call(i,{"@type":"updateGroupCallLeavePresentation"}))}function c(e){var t,a;return null===(t=s)||void 0===t||null===(a=t.streams)||void 0===a?void 0:a[e]}function d(e,t){var a,n,i;const o=(t=t||(null===(a=s)||void 0===a?void 0:a.myId))&&(null===(n=c(t))||void 0===n?void 0:n[e]);return!!o&&(null===(i=o.getTracks()[0])||void 0===i?void 0:i.enabled)}function u(e){var t,a,n;null===(t=s)||void 0===t||null===(a=t.onUpdate)||void 0===a||a.call(t,{"@type":"updateGroupCallStreams",userId:e,hasAudioStream:d("audio",e),hasVideoStream:d("video",e),hasPresentationStream:d("presentation",e),amplitude:null===(n=s.speaking)||void 0===n?void 0:n[e]})}function p(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"user";return"presentation"===e?navigator.mediaDevices.getDisplayMedia({audio:!1,video:!0}):navigator.mediaDevices.getUserMedia({audio:"audio"===e&&{...r.IS_ECHO_CANCELLATION_SUPPORTED&&{echoCancellation:!0},...r.IS_NOISE_SUPPRESSION_SUPPORTED&&{noiseSuppression:!0}},video:"video"===e&&{facingMode:t}})}async function m(e,t){if(s&&s.myId&&s.connection&&s.streams){var a;const o=null===(a=c(s.myId))||void 0===a?void 0:a[e];if(o){const a=o.getTracks()[0];if(a){var n;const o=[...s.connection.getSenders(),...(null===(n=s.screenshareConnection)||void 0===n?void 0:n.getSenders())||[]].find((e=>{var t;return a.id===(null===(t=e.track)||void 0===t?void 0:t.id)}));if(o){t=void 0===t?!a.enabled:t;try{if(t&&!a.enabled){const t=await p(e);if(await o.replaceTrack(t.getTracks()[0]),s.streams[s.myId][e]=t,"video"===e)s.facingMode="user";else if("audio"===e){var i;const e=s.audioContext;if(!e)return;const a=e.createMediaStreamSource(t),n=e.createAnalyser();n.minDecibels=-100,n.maxDecibels=-30,n.smoothingTimeConstant=.05,n.fftSize=1024,a.connect(n),s={...s,participantFunctions:{...s.participantFunctions,[s.myId]:{...null===(i=s.participantFunctions)||void 0===i?void 0:i[s.myId],getCurrentAmplitude:()=>{var e=new Uint8Array(n.frequencyBinCount);return n.getByteFrequencyData(e),(0,r.getAmplitude)(e,1.5)}}}}}}else if(!t&&a.enabled){a.stop();const t="audio"===e?s.silence:s.black;if(!t)return;await o.replaceTrack(t.getTracks()[0]),s.streams[s.myId][e]=t,"video"===e&&(s.facingMode=void 0)}u(s.myId),"presentation"!==e||t||l(!0)}catch(e){}}}}}}function v(e){var t,a;null===(t=s)||void 0===t||null===(a=t.onUpdate)||void 0===a||a.call(t,{"@type":"updateGroupCallConnectionState",connectionState:e})}function g(){var e,t,a;s&&(s.myId&&null!==(e=s.streams)&&void 0!==e&&e[s.myId]&&Object.values(s.streams[s.myId]||{}).forEach((e=>{null==e||e.getTracks().forEach((e=>{e.stop()}))})),l(!0),null!==(t=s.dataChannel)&&void 0!==t&&t.close(),null!==(a=s.connection)&&void 0!==a&&a.close(),v("disconnected"),s.analyserInterval&&clearInterval(s.analyserInterval),s=void 0)}function f(){s&&s.participantFunctions&&Object.keys(s.participantFunctions).forEach((e=>{const t=s.participantFunctions[Number(e)].getCurrentAmplitude;var a,n;t&&(a=t(),n=s.speaking[e]||0,((s.speaking[e]=a)>r.THRESHOLD&&n<=r.THRESHOLD||a<=r.THRESHOLD&&n>r.THRESHOLD)&&u(e))}))}function C(e){if(s&&s.audioElement&&s.audioContext&&s.mediaStream){var t,a,n=null===(t=s.conference)||void 0===t||null===(a=t.ssrcs)||void 0===a?void 0:a.find((t=>t.endpoint===e.track.id));if(n&&n.userId){var i,o;const{userId:t,isPresentation:a}=n;var l=null===(i=s.participants)||void 0===i?void 0:i.find((e=>e.id===t));const d="video"===e.track.kind?a?"presentation":"video":"audio";if(e.track.onended=()=>{var e,a;null!==(e=s)&&void 0!==e&&null!==(a=e.streams)&&void 0!==a&&a[t][d],u(t)},n=e.streams[0],"audio"===e.track.kind){var c;const e=s.mediaStream,a=new window.AudioContext,i=a.createMediaStreamSource(n),o=a.createGain();o.gain.value=((null==l?void 0:l.volume)||1e4)/1e4;const d=a.createGain();o.gain.value=1;const u=a.createAnalyser();u.minDecibels=-100,u.maxDecibels=-30,u.smoothingTimeConstant=.05,u.fftSize=1024,i.connect(u).connect(d).connect(o).connect(a.destination),e.addTrack(i.mediaStream.getAudioTracks()[0]);const p=new Audio;p.srcObject=n,p.muted=!0,p.remove(),s={...s,participantFunctions:{...s.participantFunctions,[t]:{...null===(c=s.participantFunctions)||void 0===c?void 0:c[t],setVolume:e=>{o.gain.value=1{d.gain.value=e?0:1},getCurrentAmplitude:()=>{var e=new Uint8Array(u.frequencyBinCount);return u.getByteFrequencyData(e),(0,r.getAmplitude)(e,1.5)}}}}}s={...s,streams:{...s.streams,[t]:{...null===(o=s.streams)||void 0===o?void 0:o[t],[d]:n}}},u(t)}}}function h(e,t){let a=arguments.length>2&&void 0!==arguments[2]&&arguments[2];const i=new RTCPeerConnection;var o=a?void 0:function(e){const t=e.createDataChannel("data",{id:0});return t.onopen=()=>{},t.onmessage=e=>{JSON.parse(e.data).colibriClass},t.onerror=e=>{console.log("%conerror","background: green; font-size: 5em"),console.error(e)},t}(i);return e.forEach((e=>e.getTracks().forEach((t=>{i.addTrack(t,e)})))),a||(i.oniceconnectionstatechange=()=>{var e=i.iceConnectionState;"connected"===e||"completed"===e?v("connected"):"checking"===e||"new"===e?v("connecting"):"disconnected"===i.iceConnectionState&&v("reconnecting")}),i.ontrack=C,i.onnegotiationneeded=async()=>{if(s){var o=s.myId;if(o){var r=await i.createOffer({offerToReceiveVideo:!0,offerToReceiveAudio:!a});if(await i.setLocalDescription(r),r.sdp){var l,c=(0,n.default)(r),d=a?void 0:{userId:"",sourceGroups:[{semantics:"FID",sources:[c.ssrc||0]}],isRemoved:a,isMain:!0,isVideo:!1,isPresentation:a,endpoint:a?"1":"0"},p=c["ssrc-groups"]&&{isPresentation:a,userId:"",sourceGroups:c["ssrc-groups"],isMain:!0,isVideo:!0,endpoint:a?"0":"1"};r=a?s.screenshareConference:s.conference;const i=[];a?(p&&i.push(p),d&&i.push(d)):(d&&i.push(d),p&&i.push(p)),d=e.find((e=>"audio"===e.getTracks()[0].kind)),p=e.find((e=>"video"===e.getTracks()[0].kind)),s={...s,...a?{screenshareConference:{...r,ssrcs:i}}:{conference:{...r,ssrcs:i}},streams:{...s.streams,[o]:{...null===(l=s.streams)||void 0===l?void 0:l[o],...d&&{audio:d},...!a&&p?{video:p}:{presentation:p}}}},u(o),t(c)}}}},{connection:i,dataChannel:o}}},"./src/types.ts":(e,t,a)=>{a.r(t)},"./src/utils.ts":(e,t,a)=>{var n,i,o,r,s;function l(){var{userAgent:e,platform:t}=window.navigator;let a;return-1!==["Macintosh","MacIntel","MacPPC","Mac68K"].indexOf(t)?a="macOS":-1!==["iPhone","iPad","iPod"].indexOf(t)?a="iOS":-1!==["Win32","Win64","Windows","WinCE"].indexOf(t)?a="Windows":/Android/.test(e)?a="Android":/Linux/.test(t)&&(a="Linux"),a}a.r(t),a.d(t,{toTelegramSource:()=>function(e){return e<<0},fromTelegramSource:()=>function(e){return e>>>0},getAmplitude:()=>function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:3;if(!e)return 0;var a=e.length;let n=0;for(let t=0;tl,THRESHOLD:()=>c,PLATFORM_ENV:()=>d,IS_MAC_OS:()=>u,IS_IOS:()=>p,IS_SCREENSHARE_SUPPORTED:()=>m,IS_ECHO_CANCELLATION_SUPPORTED:()=>v,IS_NOISE_SUPPRESSION_SUPPORTED:()=>g});const c=.1,d=l(),u="macOS"===d,p="iOS"===d,m="getDisplayMedia"in((null===(n=navigator)||void 0===n?void 0:n.mediaDevices)||{}),v=null===(i=navigator)||void 0===i||null===(o=i.mediaDevices)||void 0===o?void 0:o.getSupportedConstraints().echoCancellation,g=null===(r=navigator)||void 0===r||null===(s=r.mediaDevices)||void 0===s?void 0:s.getSupportedConstraints().noiseSuppression}},a={};function n(t){var i=a[t];return void 0!==i||(i=a[t]={exports:{}},e[t](i,i.exports,n)),i.exports}n.d=(e,t)=>{for(var a in t)n.o(t,a)&&!n.o(e,a)&&Object.defineProperty(e,a,{enumerable:!0,get:t[a]})},n.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),n.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})};var i={};(()=>{n.r(i),n.d(i,{handleUpdateGroupCallConnection:()=>e.handleUpdateGroupCallConnection,startSharingScreen:()=>e.startSharingScreen,joinGroupCall:()=>e.joinGroupCall,getDevices:()=>e.getDevices,getUserStreams:()=>e.getUserStreams,setVolume:()=>e.setVolume,isStreamEnabled:()=>e.isStreamEnabled,toggleStream:()=>e.toggleStream,leaveGroupCall:()=>e.leaveGroupCall,handleUpdateGroupCallParticipants:()=>e.handleUpdateGroupCallParticipants,switchCameraInput:()=>e.switchCameraInput,toggleSpeaker:()=>e.toggleSpeaker,toggleNoiseSuppression:()=>e.toggleNoiseSuppression,IS_SCREENSHARE_SUPPORTED:()=>t.IS_SCREENSHARE_SUPPORTED,THRESHOLD:()=>t.THRESHOLD});var e=n("./src/secretsauce.ts"),t=n("./src/utils.ts");n("./src/types.ts")})();var o,r=t;for(o in i)r[o]=i[o];i.__esModule&&Object.defineProperty(r,"__esModule",{value:!0})})()},1171:(e,t,a)=>{"use strict";e.exports=a.p+"call-fallback-avatar.50c421eaa09a90e44ec4..png"}}]); +//# sourceMappingURL=654.5a866391dbb2ac6c1621.js.map \ No newline at end of file diff --git a/dist/654.685435e52e1ffc797757.js.LICENSE.txt b/dist/654.5a866391dbb2ac6c1621.js.LICENSE.txt similarity index 100% rename from dist/654.685435e52e1ffc797757.js.LICENSE.txt rename to dist/654.5a866391dbb2ac6c1621.js.LICENSE.txt diff --git a/dist/654.5a866391dbb2ac6c1621.js.map b/dist/654.5a866391dbb2ac6c1621.js.map new file mode 100644 index 000000000..4afc34755 --- /dev/null +++ b/dist/654.5a866391dbb2ac6c1621.js.map @@ -0,0 +1 @@ +{"version":3,"file":"654.5a866391dbb2ac6c1621.js","mappings":"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","sources":["webpack://telegram-t/./src/global/actions/api/calls.async.ts","webpack://telegram-t/./src/util/vibrate.ts","webpack://telegram-t/./src/components/common/AnimatedIcon.tsx","webpack://telegram-t/./src/components/calls/group/MicrophoneButton.tsx","webpack://telegram-t/./src/components/calls/group/GroupCallParticipantMenu.tsx","webpack://telegram-t/./src/hooks/useThrottle.ts","webpack://telegram-t/./src/components/calls/group/OutlinedMicrophoneIcon.tsx","webpack://telegram-t/./src/components/calls/group/GroupCallParticipant.tsx","webpack://telegram-t/./src/components/calls/group/GroupCallParticipantList.tsx","webpack://telegram-t/./src/components/calls/group/GroupCallParticipantVideo.tsx","webpack://telegram-t/./src/components/calls/group/GroupCallParticipantStreams.tsx","webpack://telegram-t/./src/components/calls/group/GroupCall.tsx","webpack://telegram-t/./src/components/calls/ActiveCallHeader.tsx","webpack://telegram-t/./src/components/calls/CallFallbackConfirm.tsx","webpack://telegram-t/./src/lib/secret-sauce/index.js"],"sourcesContent":["import { addActionHandler, getGlobal, setGlobal } from '../../index';\nimport {\n joinGroupCall,\n startSharingScreen,\n leaveGroupCall,\n toggleStream,\n isStreamEnabled,\n setVolume,\n handleUpdateGroupCallParticipants, handleUpdateGroupCallConnection,\n} from '../../../lib/secret-sauce';\n\nimport { GROUP_CALL_VOLUME_MULTIPLIER } from '../../../config';\nimport { callApi } from '../../../api/gramjs';\nimport { selectChat, selectCurrentMessageList, selectUser } from '../../selectors';\nimport {\n selectActiveGroupCall,\n selectCallFallbackChannelTitle,\n selectGroupCallParticipant,\n} from '../../selectors/calls';\nimport {\n removeGroupCall,\n updateActiveGroupCall,\n updateGroupCall,\n updateGroupCallParticipant,\n} from '../../reducers/calls';\nimport { omit } from '../../../util/iteratees';\nimport { getServerTime } from '../../../util/serverTime';\nimport { fetchFile } from '../../../util/files';\nimport { getGroupCallAudioContext, getGroupCallAudioElement, removeGroupCallAudioElement } from '../ui/calls';\nimport { loadFullChat } from './chats';\n\nimport callFallbackAvatarPath from '../../../assets/call-fallback-avatar.png';\n\nconst FALLBACK_INVITE_EXPIRE_SECONDS = 1800; // 30 min\n\naddActionHandler('apiUpdate', (global, actions, update) => {\n const { activeGroupCallId } = global.groupCalls;\n\n switch (update['@type']) {\n case 'updateGroupCallLeavePresentation': {\n actions.toggleGroupCallPresentation({ value: false });\n break;\n }\n case 'updateGroupCallStreams': {\n if (!update.userId || !activeGroupCallId) break;\n if (!selectGroupCallParticipant(global, activeGroupCallId, update.userId)) break;\n\n return updateGroupCallParticipant(global, activeGroupCallId, update.userId, omit(update, ['@type', 'userId']));\n }\n case 'updateGroupCallConnectionState': {\n if (!activeGroupCallId) break;\n\n if (update.connectionState === 'disconnected') {\n actions.leaveGroupCall({ isFromLibrary: true });\n break;\n }\n\n return updateGroupCall(global, activeGroupCallId, {\n connectionState: update.connectionState,\n isSpeakerDisabled: update.isSpeakerDisabled,\n });\n }\n case 'updateGroupCallParticipants': {\n const { groupCallId, participants } = update;\n if (activeGroupCallId === groupCallId) {\n void handleUpdateGroupCallParticipants(participants);\n }\n break;\n }\n case 'updateGroupCallConnection': {\n if (update.data.stream) {\n actions.showNotification({ message: 'Big live streams are not yet supported' });\n actions.leaveGroupCall();\n break;\n }\n void handleUpdateGroupCallConnection(update.data, update.presentation);\n\n const groupCall = selectActiveGroupCall(global);\n if (groupCall?.participants && Object.keys(groupCall.participants).length > 0) {\n void handleUpdateGroupCallParticipants(Object.values(groupCall.participants));\n }\n break;\n }\n }\n\n return undefined;\n});\n\naddActionHandler('leaveGroupCall', async (global, actions, payload) => {\n const {\n isFromLibrary, shouldDiscard, shouldRemove, rejoin,\n } = payload || {};\n const groupCall = selectActiveGroupCall(global);\n if (!groupCall) {\n return;\n }\n\n setGlobal(updateActiveGroupCall(global, { connectionState: 'disconnected' }, groupCall.participantsCount - 1));\n\n await callApi('leaveGroupCall', {\n call: groupCall,\n });\n\n let shouldResetFallbackState = false;\n if (shouldDiscard) {\n global = getGlobal();\n\n if (global.groupCalls.fallbackChatId === groupCall.chatId) {\n shouldResetFallbackState = true;\n\n global.groupCalls.fallbackUserIdsToRemove?.forEach((userId) => {\n actions.deleteChatMember({ chatId: global.groupCalls.fallbackChatId, userId });\n });\n }\n\n await callApi('discardGroupCall', {\n call: groupCall,\n });\n }\n\n global = getGlobal();\n if (shouldRemove) {\n global = removeGroupCall(global, groupCall.id);\n }\n\n removeGroupCallAudioElement();\n\n setGlobal({\n ...global,\n groupCalls: {\n ...global.groupCalls,\n isGroupCallPanelHidden: true,\n activeGroupCallId: undefined,\n ...(shouldResetFallbackState && {\n fallbackChatId: undefined,\n fallbackUserIdsToRemove: undefined,\n }),\n },\n });\n\n if (!isFromLibrary) {\n leaveGroupCall();\n }\n\n if (rejoin) {\n actions.joinGroupCall(rejoin);\n }\n});\n\naddActionHandler('toggleGroupCallVideo', async (global) => {\n const groupCall = selectActiveGroupCall(global);\n const user = selectUser(global, global.currentUserId!);\n if (!user || !groupCall) {\n return;\n }\n\n await toggleStream('video');\n\n await callApi('editGroupCallParticipant', {\n call: groupCall,\n videoStopped: !isStreamEnabled('video'),\n participant: user,\n });\n});\n\naddActionHandler('requestToSpeak', (global, actions, payload) => {\n const { value } = payload || { value: true };\n const groupCall = selectActiveGroupCall(global);\n const user = selectUser(global, global.currentUserId!);\n if (!user || !groupCall) {\n return;\n }\n\n void callApi('editGroupCallParticipant', {\n call: groupCall,\n raiseHand: value,\n participant: user,\n });\n});\n\naddActionHandler('setGroupCallParticipantVolume', (global, actions, payload) => {\n const { participantId, volume } = payload!;\n\n const groupCall = selectActiveGroupCall(global);\n const user = selectUser(global, participantId);\n if (!user || !groupCall) {\n return;\n }\n\n setVolume(participantId, Math.floor(volume / GROUP_CALL_VOLUME_MULTIPLIER) / 100);\n\n void callApi('editGroupCallParticipant', {\n call: groupCall,\n volume: Number(volume),\n participant: user,\n });\n});\n\naddActionHandler('toggleGroupCallMute', async (global, actions, payload) => {\n const { participantId, value } = payload || {};\n const groupCall = selectActiveGroupCall(global);\n const user = selectUser(global, participantId || global.currentUserId!);\n if (!user || !groupCall) {\n return;\n }\n\n const muted = value === undefined ? isStreamEnabled('audio', user.id) : value;\n\n if (!participantId) {\n await toggleStream('audio');\n } else {\n setVolume(participantId, muted ? 0 : 1);\n }\n\n await callApi('editGroupCallParticipant', {\n call: groupCall,\n muted,\n participant: user,\n });\n});\n\naddActionHandler('toggleGroupCallPresentation', async (global, actions, payload) => {\n const groupCall = selectActiveGroupCall(global);\n const user = selectUser(global, global.currentUserId!);\n if (!user || !groupCall) {\n return;\n }\n\n const value = payload?.value !== undefined ? payload?.value : !isStreamEnabled('presentation');\n if (value) {\n const params = await startSharingScreen();\n if (!params) {\n return;\n }\n\n await callApi('joinGroupCallPresentation', {\n call: groupCall,\n params,\n });\n } else {\n await toggleStream('presentation', false);\n await callApi('leaveGroupCallPresentation', {\n call: groupCall,\n });\n }\n\n await callApi('editGroupCallParticipant', {\n call: groupCall,\n presentationPaused: !isStreamEnabled('presentation'),\n participant: user,\n });\n});\n\naddActionHandler('connectToActiveGroupCall', async (global, actions) => {\n const groupCall = selectActiveGroupCall(global);\n if (!groupCall) return;\n\n if (groupCall.connectionState === 'discarded') {\n actions.showNotification({ message: 'This voice chat is not active' });\n return;\n }\n\n const audioElement = getGroupCallAudioElement();\n const audioContext = getGroupCallAudioContext();\n\n if (!audioElement || !audioContext) {\n return;\n }\n\n const {\n currentUserId,\n } = global;\n\n if (!currentUserId) return;\n\n const params = await joinGroupCall(currentUserId, audioContext, audioElement, actions.apiUpdate);\n\n const result = await callApi('joinGroupCall', {\n call: groupCall,\n params,\n inviteHash: groupCall.inviteHash,\n });\n\n if (!result) return;\n\n actions.loadMoreGroupCallParticipants();\n\n if (groupCall.chatId) {\n const chat = selectChat(getGlobal(), groupCall.chatId);\n if (!chat) return;\n await loadFullChat(chat);\n }\n});\n\naddActionHandler('inviteToCallFallback', async (global, actions, payload) => {\n const { chatId } = selectCurrentMessageList(global) || {};\n if (!chatId) {\n return;\n }\n\n const user = selectUser(global, chatId);\n if (!user) {\n return;\n }\n\n const { shouldRemove } = payload;\n\n const fallbackChannelTitle = selectCallFallbackChannelTitle(global);\n\n let fallbackChannel = Object.values(global.chats.byId).find((channel) => {\n return (\n channel.title === fallbackChannelTitle\n && channel.isCreator\n && !channel.isRestricted\n && !channel.isForbidden\n );\n });\n if (!fallbackChannel) {\n fallbackChannel = await callApi('createChannel', {\n title: fallbackChannelTitle,\n users: [user],\n });\n\n if (!fallbackChannel) {\n return;\n }\n\n const photo = await fetchFile(callFallbackAvatarPath, 'avatar.png');\n void callApi('editChatPhoto', {\n chatId: fallbackChannel.id,\n accessHash: fallbackChannel.accessHash,\n photo,\n });\n } else {\n actions.updateChatMemberBannedRights({\n chatId: fallbackChannel.id,\n userId: chatId,\n bannedRights: {},\n });\n\n void callApi('addChatMembers', fallbackChannel, [user], true);\n }\n\n const inviteLink = await callApi('updatePrivateLink', {\n chat: fallbackChannel,\n usageLimit: 1,\n expireDate: getServerTime(global.serverTimeOffset) + FALLBACK_INVITE_EXPIRE_SECONDS,\n });\n if (!inviteLink) {\n return;\n }\n\n if (shouldRemove) {\n global = getGlobal();\n const fallbackUserIdsToRemove = global.groupCalls.fallbackUserIdsToRemove || [];\n setGlobal({\n ...global,\n groupCalls: {\n ...global.groupCalls,\n fallbackChatId: fallbackChannel.id,\n fallbackUserIdsToRemove: [...fallbackUserIdsToRemove, chatId],\n },\n });\n }\n\n actions.sendMessage({ text: `Join a call: ${inviteLink}` });\n actions.openChat({ id: fallbackChannel.id });\n actions.createGroupCall({ chatId: fallbackChannel.id });\n actions.closeCallFallbackConfirm();\n});\n","export const vibrateShort = () => {\n navigator.vibrate?.(50);\n};\n","import React, {\n FC, memo, useEffect, useState,\n} from '../../lib/teact/teact';\n\nimport getAnimationData, { ANIMATED_STICKERS_PATHS } from './helpers/animatedAssets';\n\nimport AnimatedSticker from './AnimatedSticker';\n\ntype OwnProps = {\n name: keyof typeof ANIMATED_STICKERS_PATHS;\n size: number;\n playSegment?: [number, number];\n color?: [number, number, number];\n};\n\nconst AnimatedIcon: FC = ({\n size,\n name,\n playSegment,\n color,\n}) => {\n const [iconData, setIconData] = useState();\n\n useEffect(() => {\n getAnimationData(name).then(setIconData);\n }, [name]);\n\n return (\n \n );\n};\n\nexport default memo(AnimatedIcon);\n","import { GroupCallConnectionState } from '../../../lib/secret-sauce';\nimport React, {\n FC, memo, useEffect, useMemo, useRef, useState,\n} from '../../../lib/teact/teact';\nimport { getActions, withGlobal } from '../../../global';\n\nimport buildClassName from '../../../util/buildClassName';\nimport { vibrateShort } from '../../../util/vibrate';\nimport usePrevious from '../../../hooks/usePrevious';\nimport { selectActiveGroupCall, selectGroupCallParticipant } from '../../../global/selectors/calls';\nimport useLang from '../../../hooks/useLang';\n\nimport AnimatedIcon from '../../common/AnimatedIcon';\n\nimport './MicrophoneButton.scss';\n\nconst CONNECTION_STATE_DEFAULT = 'discarded';\n\ntype StateProps = {\n connectionState?: GroupCallConnectionState;\n hasRequestedToSpeak: boolean;\n isMuted?: boolean;\n canSelfUnmute?: boolean;\n noAudioStream: boolean;\n};\n\nconst REQUEST_TO_SPEAK_THROTTLE = 3000;\nconst HOLD_TO_SPEAK_TIME = 200;\nconst ICON_SIZE = 48;\n\nconst MicrophoneButton: FC = ({\n noAudioStream,\n canSelfUnmute,\n isMuted,\n hasRequestedToSpeak,\n connectionState,\n}) => {\n const {\n toggleGroupCallMute,\n requestToSpeak,\n playGroupCallSound,\n } = getActions();\n\n const lang = useLang();\n const muteMouseDownState = useRef('up');\n\n const [isRequestingToSpeak, setIsRequestingToSpeak] = useState(false);\n const isConnecting = connectionState !== 'connected';\n const shouldRaiseHand = !canSelfUnmute && isMuted;\n const prevShouldRaiseHand = usePrevious(shouldRaiseHand);\n\n useEffect(() => {\n if (prevShouldRaiseHand && !shouldRaiseHand) {\n playGroupCallSound('allowTalk');\n }\n }, [playGroupCallSound, prevShouldRaiseHand, shouldRaiseHand]);\n\n // Voice mini\n // unmuted -> muted [69, 99]\n // muted -> unmuted [36, 69]\n // raise -> muted [0, 36]\n // muted -> raise [99, 136]\n // unmuted -> raise [136, 172]\n // TODO should probably move to other component\n const playSegment: [number, number] = useMemo(() => {\n if (isRequestingToSpeak) {\n const r = Math.floor(Math.random() * 100);\n return (r < 32 ? [0, 120]\n : (r < 64 ? [120, 240]\n : (r < 97 ? [240, 420]\n : [420, 540]\n )\n )\n );\n }\n if (!prevShouldRaiseHand && shouldRaiseHand) {\n return noAudioStream ? [99, 135] : [136, 172];\n }\n if (prevShouldRaiseHand && !shouldRaiseHand) {\n return [0, 36];\n }\n if (!shouldRaiseHand) {\n return noAudioStream ? [69, 99] : [36, 69];\n }\n return [0, 0];\n }, [prevShouldRaiseHand, isRequestingToSpeak, noAudioStream, shouldRaiseHand]);\n\n const animatedIconName = isRequestingToSpeak ? 'HandFilled' : 'VoiceMini';\n\n const toggleMute = () => {\n vibrateShort();\n toggleGroupCallMute();\n };\n\n const handleMouseDownMute = () => {\n if (shouldRaiseHand) {\n if (isRequestingToSpeak) return;\n vibrateShort();\n requestToSpeak();\n setIsRequestingToSpeak(true);\n setTimeout(() => {\n setIsRequestingToSpeak(false);\n }, REQUEST_TO_SPEAK_THROTTLE);\n return;\n }\n muteMouseDownState.current = 'down';\n if (noAudioStream) {\n setTimeout(() => {\n if (muteMouseDownState.current === 'down') {\n muteMouseDownState.current = 'hold';\n toggleMute();\n }\n }, HOLD_TO_SPEAK_TIME);\n }\n };\n\n const handleMouseUpMute = () => {\n if (shouldRaiseHand) {\n return;\n }\n toggleMute();\n muteMouseDownState.current = 'up';\n };\n\n const buttonText = useMemo(() => {\n return lang(\n hasRequestedToSpeak ? 'VoipMutedTapedForSpeak' : (\n shouldRaiseHand ? 'VoipMutedByAdmin' : (\n noAudioStream ? 'VoipUnmute' : 'VoipTapToMute'\n )\n ),\n );\n }, [hasRequestedToSpeak, noAudioStream, lang, shouldRaiseHand]);\n\n return (\n
\n \n \n \n
\n {buttonText}\n
\n
\n );\n};\n\nexport default memo(withGlobal(\n (global): StateProps => {\n const groupCall = selectActiveGroupCall(global);\n\n const { connectionState } = groupCall || {};\n const meParticipant = groupCall && selectGroupCallParticipant(global, groupCall.id, global.currentUserId!);\n\n const {\n raiseHandRating, hasAudioStream, canSelfUnmute, isMuted,\n } = meParticipant || {};\n\n return {\n connectionState: connectionState || CONNECTION_STATE_DEFAULT,\n hasRequestedToSpeak: Boolean(raiseHandRating),\n noAudioStream: !hasAudioStream,\n canSelfUnmute,\n isMuted,\n };\n },\n)(MicrophoneButton));\n","import { GroupCallParticipant } from '../../../lib/secret-sauce';\nimport React, {\n FC, memo, useCallback, useEffect, useState,\n} from '../../../lib/teact/teact';\nimport { getActions, withGlobal } from '../../../global';\n\nimport { IAnchorPosition } from '../../../types';\n\nimport buildClassName from '../../../util/buildClassName';\nimport useThrottle from '../../../hooks/useThrottle';\nimport useFlag from '../../../hooks/useFlag';\nimport useLang from '../../../hooks/useLang';\nimport { selectIsAdminInActiveGroupCall } from '../../../global/selectors/calls';\nimport { GROUP_CALL_DEFAULT_VOLUME, GROUP_CALL_VOLUME_MULTIPLIER } from '../../../config';\n\nimport Menu from '../../ui/Menu';\nimport MenuItem from '../../ui/MenuItem';\nimport AnimatedIcon from '../../common/AnimatedIcon';\nimport DeleteMemberModal from '../../right/DeleteMemberModal';\n\nimport './GroupCallParticipantMenu.scss';\n\nconst SPEAKER_ICON_DISABLED_SEGMENT: [number, number] = [0, 17];\nconst SPEAKER_ICON_ENABLED_SEGMENT: [number, number] = [17, 34];\n\ntype OwnProps = {\n participant?: GroupCallParticipant;\n closeDropdown: VoidFunction;\n isDropdownOpen: boolean;\n anchor?: IAnchorPosition;\n};\n\ntype StateProps = {\n isAdmin: boolean;\n};\n\nconst VOLUME_ZERO = 0;\nconst VOLUME_LOW = 50;\nconst VOLUME_MEDIUM = 100;\nconst VOLUME_NORMAL = 150;\n\nconst VOLUME_CHANGE_THROTTLE = 500;\n\nconst SPEAKER_ICON_SIZE = 24;\n\nconst GroupCallParticipantMenu: FC = ({\n participant,\n closeDropdown,\n isDropdownOpen,\n anchor,\n isAdmin,\n}) => {\n const {\n toggleGroupCallMute,\n setGroupCallParticipantVolume,\n toggleGroupCallPanel,\n openChat,\n requestToSpeak,\n } = getActions();\n\n const lang = useLang();\n const [isDeleteUserModalOpen, openDeleteUserModal, closeDeleteUserModal] = useFlag();\n\n const id = participant?.id;\n const {\n isMutedByMe, isMuted, isSelf, canSelfUnmute,\n } = participant || {};\n const isRaiseHand = Boolean(participant?.raiseHandRating);\n const shouldRaiseHand = !canSelfUnmute && isMuted;\n\n const [localVolume, setLocalVolume] = useState(\n isMutedByMe ? VOLUME_ZERO : ((participant?.volume || GROUP_CALL_DEFAULT_VOLUME) / GROUP_CALL_VOLUME_MULTIPLIER),\n );\n\n useEffect(() => {\n setLocalVolume(isMutedByMe\n ? VOLUME_ZERO\n : ((participant?.volume || GROUP_CALL_DEFAULT_VOLUME) / GROUP_CALL_VOLUME_MULTIPLIER));\n // We only want to initialize local volume when switching participants and ignore following updates from server\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [id]);\n\n const runThrottled = useThrottle(VOLUME_CHANGE_THROTTLE);\n\n const handleRemove = useCallback((e: React.SyntheticEvent) => {\n e.stopPropagation();\n openDeleteUserModal();\n closeDropdown();\n }, [openDeleteUserModal, closeDropdown]);\n\n const handleCancelRequestToSpeak = useCallback((e: React.SyntheticEvent) => {\n e.stopPropagation();\n requestToSpeak({\n value: false,\n });\n closeDropdown();\n }, [requestToSpeak, closeDropdown]);\n\n const handleMute = useCallback((e: React.SyntheticEvent) => {\n e.stopPropagation();\n closeDropdown();\n\n if (!isAdmin) {\n setLocalVolume(isMutedByMe ? GROUP_CALL_DEFAULT_VOLUME / GROUP_CALL_VOLUME_MULTIPLIER : VOLUME_ZERO);\n }\n\n toggleGroupCallMute({\n participantId: id,\n value: isAdmin ? !shouldRaiseHand : !isMutedByMe,\n });\n }, [closeDropdown, toggleGroupCallMute, id, isAdmin, shouldRaiseHand, isMutedByMe]);\n\n const handleOpenProfile = useCallback((e: React.SyntheticEvent) => {\n e.stopPropagation();\n toggleGroupCallPanel();\n openChat({\n id,\n });\n closeDropdown();\n }, [toggleGroupCallPanel, closeDropdown, openChat, id]);\n\n const isLocalVolumeZero = localVolume === VOLUME_ZERO;\n const speakerIconPlaySegment = isLocalVolumeZero ? SPEAKER_ICON_DISABLED_SEGMENT : SPEAKER_ICON_ENABLED_SEGMENT;\n\n const handleChangeVolume = (e: React.ChangeEvent) => {\n const value = Number(e.target.value);\n setLocalVolume(value);\n runThrottled(() => {\n if (value === VOLUME_ZERO) {\n toggleGroupCallMute({\n participantId: id,\n value: true,\n });\n } else {\n setGroupCallParticipantVolume({\n participantId: id,\n volume: Math.floor(value * GROUP_CALL_VOLUME_MULTIPLIER),\n });\n }\n });\n };\n\n return (\n
\n \n {!isSelf && !shouldRaiseHand && (\n
\n
= VOLUME_LOW && localVolume < VOLUME_MEDIUM && 'medium',\n localVolume >= VOLUME_MEDIUM && localVolume < VOLUME_NORMAL && 'normal',\n localVolume >= VOLUME_NORMAL && 'high',\n )}\n >\n \n
\n \n {localVolume}%\n
\n
\n
\n )}\n
\n {(isRaiseHand && isSelf) && (\n \n {lang('VoipGroupCancelRaiseHand')}\n \n )}\n {!isSelf && {lang('VoipGroupOpenProfile')}}\n {!isSelf && (\n // TODO cross mic\n \n {isAdmin\n ? lang(shouldRaiseHand ? 'VoipGroupAllowToSpeak' : 'VoipMute')\n : lang(isMutedByMe ? 'VoipGroupUnmuteForMe' : 'VoipGroupMuteForMe')}\n \n )}\n {!isSelf && isAdmin && (\n // TODO replace with hand\n \n {lang('VoipGroupUserRemove')}\n \n )}\n
\n \n\n {!isSelf && isAdmin && (\n \n )}\n
\n );\n};\n\nexport default memo(withGlobal(\n (global): StateProps => {\n return {\n isAdmin: selectIsAdminInActiveGroupCall(global),\n };\n },\n)(GroupCallParticipantMenu));\n","import { useMemo } from '../lib/teact/teact';\n\nimport { throttle } from '../util/schedulers';\n\nconst useThrottle = (ms: number, noFirst = false) => {\n return useMemo(() => {\n return throttle((cb) => cb(), ms, !noFirst);\n }, [ms, noFirst]);\n};\n\nexport default useThrottle;\n","import { GroupCallParticipant, THRESHOLD } from '../../../lib/secret-sauce';\nimport React, { FC, memo, useMemo } from '../../../lib/teact/teact';\nimport AnimatedIcon from '../../common/AnimatedIcon';\nimport usePrevious from '../../../hooks/usePrevious';\n\ntype OwnProps = {\n participant: GroupCallParticipant;\n noColor?: boolean;\n};\n\nconst OutlinedMicrophoneIcon: FC = ({\n participant,\n noColor,\n}) => {\n const { isMuted, isMutedByMe } = participant;\n const isSpeaking = (participant.amplitude || 0) > THRESHOLD;\n const isRaiseHand = Boolean(participant.raiseHandRating);\n const prevIsRaiseHand = usePrevious(isRaiseHand);\n const canSelfUnmute = Boolean(participant?.canSelfUnmute);\n const shouldRaiseHand = !canSelfUnmute && isMuted;\n const prevIsMuted = usePrevious(isMuted);\n\n const playSegment: [number, number] = useMemo(() => {\n if (isMuted && !prevIsMuted) {\n return [43, 64];\n }\n\n if (!isMuted && prevIsMuted) {\n return [22, 42];\n }\n\n if (isRaiseHand && !prevIsRaiseHand) {\n return [65, 84];\n }\n\n if (!shouldRaiseHand && prevIsRaiseHand) {\n return [0, 21];\n }\n\n // TODO cancel request to speak should play in reverse\n // if (!isRaiseHand && prevIsRaiseHand) {\n // return [84, 65];\n // }\n\n return isMuted ? [22, 23] : [43, 44];\n // eslint-disable-next-line\n }, [isMuted, shouldRaiseHand, isRaiseHand]);\n\n const microphoneColor: [number, number, number] | undefined = useMemo(() => {\n return noColor ? [0xff, 0xff, 0xff] : (\n isRaiseHand ? [0x4d, 0xa6, 0xe0]\n : (shouldRaiseHand || isMutedByMe ? [0xFF, 0x70, 0x6F] : (\n isSpeaking ? [0x57, 0xBC, 0x6C] : [0x84, 0x8D, 0x94]\n ))\n );\n }, [noColor, isRaiseHand, shouldRaiseHand, isMutedByMe, isSpeaking]);\n\n return (\n \n );\n};\n\nexport default memo(OutlinedMicrophoneIcon);\n","import { GroupCallParticipant as TypeGroupCallParticipant, THRESHOLD } from '../../../lib/secret-sauce';\nimport React, {\n FC, memo, useMemo, useRef,\n} from '../../../lib/teact/teact';\nimport { withGlobal } from '../../../global';\n\nimport { ApiChat, ApiUser } from '../../../api/types';\n\nimport buildClassName from '../../../util/buildClassName';\nimport { selectChat, selectUser } from '../../../global/selectors';\nimport useLang from '../../../hooks/useLang';\nimport { GROUP_CALL_DEFAULT_VOLUME, GROUP_CALL_VOLUME_MULTIPLIER } from '../../../config';\n\nimport Avatar from '../../common/Avatar';\nimport OutlinedMicrophoneIcon from './OutlinedMicrophoneIcon';\n\nimport './GroupCallParticipant.scss';\n\ntype OwnProps = {\n participant: TypeGroupCallParticipant;\n openParticipantMenu: (anchor: HTMLDivElement, participant: TypeGroupCallParticipant) => void;\n};\n\ntype StateProps = {\n user?: ApiUser;\n chat?: ApiChat;\n};\n\nconst GroupCallParticipant: FC = ({\n openParticipantMenu,\n participant,\n user,\n chat,\n}) => {\n // eslint-disable-next-line no-null/no-null\n const anchorRef = useRef(null);\n const lang = useLang();\n\n const { isSelf, isMutedByMe, isMuted } = participant;\n const isSpeaking = (participant.amplitude || 0) > THRESHOLD;\n const isRaiseHand = Boolean(participant.raiseHandRating);\n\n const handleOnClick = () => {\n if (isSelf) return;\n openParticipantMenu(anchorRef.current!, participant);\n };\n\n const [aboutText, aboutColor] = useMemo(() => {\n if (isSelf) {\n return [lang('ThisIsYou'), 'blue'];\n }\n if (isMutedByMe) {\n return [lang('VoipGroupMutedForMe'), 'red'];\n }\n return isRaiseHand\n ? [lang('WantsToSpeak'), 'blue']\n : (!isMuted && isSpeaking ? [\n participant.volume && participant.volume !== GROUP_CALL_DEFAULT_VOLUME\n ? lang('SpeakingWithVolume',\n (participant.volume / GROUP_CALL_VOLUME_MULTIPLIER).toString())\n .replace('%%', '%') : lang('Speaking'),\n 'green',\n ]\n : (participant.about ? [participant.about, ''] : [lang('Listening'), 'blue']));\n }, [isSpeaking, participant.volume, lang, isSelf, isMutedByMe, isRaiseHand, isMuted, participant.about]);\n\n if (!user && !chat) {\n return undefined;\n }\n\n const name = user ? `${user.firstName || ''} ${user.lastName || ''}` : chat?.title;\n\n return (\n \n \n
\n {name}\n {aboutText}\n
\n
\n \n
\n \n );\n};\n\nexport default memo(withGlobal(\n (global, { participant }): StateProps => {\n return {\n user: participant.isUser ? selectUser(global, participant.id) : undefined,\n chat: !participant.isUser ? selectChat(global, participant.id) : undefined,\n };\n },\n)(GroupCallParticipant));\n","import { GroupCallParticipant as TypeGroupCallParticipant } from '../../../lib/secret-sauce';\nimport React, { FC, memo, useMemo } from '../../../lib/teact/teact';\nimport { getActions, withGlobal } from '../../../global';\n\nimport useLang from '../../../hooks/useLang';\nimport { selectActiveGroupCall } from '../../../global/selectors/calls';\nimport useInfiniteScroll from '../../../hooks/useInfiniteScroll';\n\nimport GroupCallParticipant from './GroupCallParticipant';\nimport InfiniteScroll from '../../ui/InfiniteScroll';\n\ntype OwnProps = {\n openParticipantMenu: (anchor: HTMLDivElement, participant: TypeGroupCallParticipant) => void;\n};\n\ntype StateProps = {\n participantsCount: number;\n participants?: Record;\n canInvite?: boolean;\n};\n\nconst GroupCallParticipantList: FC = ({\n participants,\n participantsCount,\n openParticipantMenu,\n}) => {\n const {\n createGroupCallInviteLink,\n loadMoreGroupCallParticipants,\n } = getActions();\n\n const lang = useLang();\n\n const participantsIds = useMemo(() => {\n return Object.keys(participants || {});\n }, [participants]);\n\n const [viewportIds, getMore] = useInfiniteScroll(\n loadMoreGroupCallParticipants,\n participantsIds,\n participantsIds.length >= participantsCount,\n );\n\n return (\n
\n
\n
\n \n
\n
{lang('VoipGroupInviteMember')}
\n
\n\n \n {viewportIds?.map(\n (participantId) => (\n participants![participantId] && (\n \n )\n ),\n )}\n \n\n
\n );\n};\n\nexport default memo(withGlobal(\n (global): StateProps => {\n const { participantsCount, participants } = selectActiveGroupCall(global) || {};\n\n return {\n participants,\n participantsCount: participantsCount || 0,\n };\n },\n)(GroupCallParticipantList));\n","import { getUserStreams, GroupCallParticipant as TypeGroupCallParticipant, THRESHOLD } from '../../../lib/secret-sauce';\nimport React, { FC, memo, useCallback } from '../../../lib/teact/teact';\nimport { withGlobal } from '../../../global';\n\nimport { ApiChat, ApiUser } from '../../../api/types';\n\nimport buildClassName from '../../../util/buildClassName';\nimport { selectChat, selectUser } from '../../../global/selectors';\nimport useLang from '../../../hooks/useLang';\nimport { ENABLE_THUMBNAIL_VIDEO } from '../../../config';\n\nimport Avatar from '../../common/Avatar';\n\nimport './GroupCallParticipantVideo.scss';\n\ntype OwnProps = {\n participant: TypeGroupCallParticipant;\n type: 'video' | 'presentation';\n onClick?: (id: string, type: 'video' | 'presentation') => void;\n isFullscreen?: boolean;\n};\n\ntype StateProps = {\n user?: ApiUser;\n chat?: ApiChat;\n currentUserId?: string;\n isActive?: boolean;\n};\n\nconst GroupCallParticipantVideo: FC = ({\n type,\n onClick,\n user,\n chat,\n isActive,\n isFullscreen,\n}) => {\n const lang = useLang();\n\n const handleClick = useCallback(() => {\n if (onClick) {\n onClick(user?.id || chat!.id, type);\n }\n }, [chat, onClick, type, user?.id]);\n\n if (!user && !chat) return undefined;\n\n const streams = getUserStreams(user?.id || chat!.id);\n\n return (\n \n {isFullscreen && (\n \n )}\n \n {ENABLE_THUMBNAIL_VIDEO && (\n
\n
\n )}\n
\n );\n};\n\nexport default memo(Spoiler);\n","import { MouseEvent } from 'react';\nimport React from '../../../lib/teact/teact';\nimport { getActions } from '../../../global';\n\nimport { ApiFormattedText, ApiMessageEntity, ApiMessageEntityTypes } from '../../../api/types';\nimport renderText, { TextFilter } from './renderText';\nimport { copyTextToClipboard } from '../../../util/clipboard';\nimport { getTranslation } from '../../../util/langProvider';\n\nimport MentionLink from '../../middle/message/MentionLink';\nimport SafeLink from '../SafeLink';\nimport Spoiler from '../spoiler/Spoiler';\n\nexport type TextPart =\n string\n | Element;\n\ninterface IOrganizedEntity {\n entity: ApiMessageEntity;\n organizedIndexes: Set;\n nestedEntities: IOrganizedEntity[];\n}\n\nexport function renderTextWithEntities(\n text: string,\n entities?: ApiMessageEntity[],\n highlight?: string,\n shouldRenderHqEmoji?: boolean,\n shouldRenderAsHtml?: boolean,\n messageId?: number,\n isSimple?: boolean,\n) {\n if (!entities || !entities.length) {\n return renderMessagePart(text, highlight, shouldRenderHqEmoji, shouldRenderAsHtml, isSimple);\n }\n\n const result: TextPart[] = [];\n let deleteLineBreakAfterPre = false;\n\n const organizedEntities = organizeEntities(entities);\n\n // Recursive function to render regular and nested entities\n function renderEntity(\n textPartStart: number,\n textPartEnd: number,\n organizedEntity: IOrganizedEntity,\n isLastEntity: boolean,\n ) {\n const renderResult: TextPart[] = [];\n const { entity, nestedEntities } = organizedEntity;\n const { offset, length, type } = entity;\n\n // Render text before the entity\n let textBefore = text.substring(textPartStart, offset);\n const textBeforeLength = textBefore.length;\n if (textBefore) {\n if (deleteLineBreakAfterPre && textBefore.length > 0 && textBefore[0] === '\\n') {\n textBefore = textBefore.substr(1);\n deleteLineBreakAfterPre = false;\n }\n if (textBefore) {\n renderResult.push(...renderMessagePart(\n textBefore, highlight, shouldRenderHqEmoji, shouldRenderAsHtml, isSimple,\n ) as TextPart[]);\n }\n }\n\n const entityStartIndex = textPartStart + textBeforeLength;\n const entityEndIndex = entityStartIndex + length;\n\n let entityContent: TextPart = text.substring(offset, offset + length);\n const nestedEntityContent: TextPart[] = [];\n\n if (deleteLineBreakAfterPre && entityContent.length > 0 && entityContent[0] === '\\n') {\n entityContent = entityContent.substr(1);\n deleteLineBreakAfterPre = false;\n }\n\n if (type === ApiMessageEntityTypes.Pre) {\n deleteLineBreakAfterPre = true;\n }\n\n // Render nested entities, if any\n if (nestedEntities.length) {\n let nestedIndex = entityStartIndex;\n\n nestedEntities.forEach((nestedEntity, nestedEntityIndex) => {\n const {\n renderResult: nestedResult,\n entityEndIndex: nestedEntityEndIndex,\n } = renderEntity(\n nestedIndex,\n entityEndIndex,\n nestedEntity,\n nestedEntityIndex === nestedEntities.length - 1,\n );\n\n nestedEntityContent.push(...nestedResult);\n nestedIndex = nestedEntityEndIndex;\n });\n }\n\n // Render the entity itself\n const newEntity = shouldRenderAsHtml\n ? processEntityAsHtml(entity, entityContent, nestedEntityContent)\n : processEntity(entity, entityContent, nestedEntityContent, highlight, messageId, isSimple);\n\n if (Array.isArray(newEntity)) {\n renderResult.push(...newEntity);\n } else {\n renderResult.push(newEntity);\n }\n\n // Render text after the entity, if it is the last entity in the text,\n // or the last nested entity inside of another entity\n if (isLastEntity && entityEndIndex < textPartEnd) {\n let textAfter = text.substring(entityEndIndex, textPartEnd);\n if (deleteLineBreakAfterPre && textAfter.length > 0 && textAfter[0] === '\\n') {\n textAfter = textAfter.substring(1);\n }\n if (textAfter) {\n renderResult.push(...renderMessagePart(\n textAfter, highlight, shouldRenderHqEmoji, shouldRenderAsHtml, isSimple,\n ) as TextPart[]);\n }\n }\n\n return {\n renderResult,\n entityEndIndex,\n };\n }\n\n // Process highest-level entities\n let index = 0;\n\n organizedEntities.forEach((entity, arrayIndex) => {\n const { renderResult, entityEndIndex } = renderEntity(\n index,\n text.length,\n entity,\n arrayIndex === organizedEntities.length - 1,\n );\n\n result.push(...renderResult);\n index = entityEndIndex;\n });\n\n return result;\n}\n\nexport function getTextWithEntitiesAsHtml(formattedText?: ApiFormattedText) {\n const { text, entities } = formattedText || {};\n if (!text) {\n return '';\n }\n\n const result = renderTextWithEntities(\n text,\n entities,\n undefined,\n undefined,\n true,\n );\n\n if (Array.isArray(result)) {\n return result.join('');\n }\n\n return result;\n}\n\nfunction renderMessagePart(\n content: TextPart | TextPart[],\n highlight?: string,\n shouldRenderHqEmoji?: boolean,\n shouldRenderAsHtml?: boolean,\n isSimple?: boolean,\n) {\n if (Array.isArray(content)) {\n const result: TextPart[] = [];\n\n content.forEach((c) => {\n result.push(...renderMessagePart(c, highlight, shouldRenderHqEmoji, shouldRenderAsHtml, isSimple));\n });\n\n return result;\n }\n\n if (shouldRenderAsHtml) {\n return renderText(content, ['escape_html', 'emoji_html', 'br_html']);\n }\n\n const emojiFilter = shouldRenderHqEmoji ? 'hq_emoji' : 'emoji';\n\n const filters: TextFilter[] = [emojiFilter];\n if (!isSimple) {\n filters.push('br');\n }\n\n if (highlight) {\n return renderText(content, filters.concat('highlight'), { highlight });\n } else {\n return renderText(content, filters);\n }\n}\n\n// Organize entities in a tree-like structure to better represent how the text will be displayed\nfunction organizeEntities(entities: ApiMessageEntity[]) {\n const organizedEntityIndexes: Set = new Set();\n const organizedEntities: IOrganizedEntity[] = [];\n\n entities.forEach((entity, index) => {\n if (organizedEntityIndexes.has(index)) {\n return;\n }\n\n const organizedEntity = organizeEntity(entity, index, entities, organizedEntityIndexes);\n if (organizedEntity) {\n organizedEntity.organizedIndexes.forEach((organizedIndex) => {\n organizedEntityIndexes.add(organizedIndex);\n });\n\n organizedEntities.push(organizedEntity);\n }\n });\n\n return organizedEntities;\n}\n\nfunction organizeEntity(\n entity: ApiMessageEntity,\n index: number,\n entities: ApiMessageEntity[],\n organizedEntityIndexes: Set,\n): IOrganizedEntity | undefined {\n const { offset, length } = entity;\n const organizedIndexes = new Set([index]);\n\n if (organizedEntityIndexes.has(index)) {\n return undefined;\n }\n\n // Determine any nested entities inside current entity\n const nestedEntities: IOrganizedEntity[] = [];\n const parsedNestedEntities = entities\n .filter((e, i) => i > index && e.offset >= offset && e.offset < offset + length)\n .map((e) => organizeEntity(e, entities.indexOf(e), entities, organizedEntityIndexes))\n .filter(Boolean as any);\n\n parsedNestedEntities.forEach((parsedEntity) => {\n let isChanged = false;\n\n parsedEntity.organizedIndexes.forEach((organizedIndex) => {\n if (!isChanged && !organizedIndexes.has(organizedIndex)) {\n isChanged = true;\n }\n\n organizedIndexes.add(organizedIndex);\n });\n\n if (isChanged) {\n nestedEntities.push(parsedEntity);\n }\n });\n\n return {\n entity,\n organizedIndexes,\n nestedEntities,\n };\n}\n\nfunction processEntity(\n entity: ApiMessageEntity,\n entityContent: TextPart,\n nestedEntityContent: TextPart[],\n highlight?: string,\n messageId?: number,\n isSimple?: boolean,\n) {\n const entityText = typeof entityContent === 'string' && entityContent;\n const renderedContent = nestedEntityContent.length ? nestedEntityContent : entityContent;\n\n function renderNestedMessagePart() {\n return renderMessagePart(\n renderedContent, highlight, undefined, undefined, isSimple,\n );\n }\n\n if (!entityText) {\n return renderNestedMessagePart();\n }\n\n if (isSimple) {\n const text = renderNestedMessagePart();\n if (entity.type === ApiMessageEntityTypes.Spoiler) {\n return {text};\n }\n return text;\n }\n\n switch (entity.type) {\n case ApiMessageEntityTypes.Bold:\n return {renderNestedMessagePart()};\n case ApiMessageEntityTypes.Blockquote:\n return
{renderNestedMessagePart()}
;\n case ApiMessageEntityTypes.BotCommand:\n return (\n \n {renderNestedMessagePart()}\n \n );\n case ApiMessageEntityTypes.Hashtag:\n return (\n \n {renderNestedMessagePart()}\n \n );\n case ApiMessageEntityTypes.Cashtag:\n return (\n \n {renderNestedMessagePart()}\n \n );\n case ApiMessageEntityTypes.Code:\n return (\n \n {renderNestedMessagePart()}\n \n );\n case ApiMessageEntityTypes.Email:\n return (\n \n {renderNestedMessagePart()}\n \n );\n case ApiMessageEntityTypes.Italic:\n return {renderNestedMessagePart()};\n case ApiMessageEntityTypes.MentionName:\n return (\n \n {renderNestedMessagePart()}\n \n );\n case ApiMessageEntityTypes.Mention:\n return (\n \n {renderNestedMessagePart()}\n \n );\n case ApiMessageEntityTypes.Phone:\n return (\n \n {renderNestedMessagePart()}\n \n );\n case ApiMessageEntityTypes.Pre:\n return
{renderNestedMessagePart()}
;\n case ApiMessageEntityTypes.Strike:\n return {renderNestedMessagePart()};\n case ApiMessageEntityTypes.TextUrl:\n case ApiMessageEntityTypes.Url:\n return (\n \n {renderNestedMessagePart()}\n \n );\n case ApiMessageEntityTypes.Underline:\n return {renderNestedMessagePart()};\n case ApiMessageEntityTypes.Spoiler:\n return {renderNestedMessagePart()};\n default:\n return renderNestedMessagePart();\n }\n}\n\nfunction processEntityAsHtml(\n entity: ApiMessageEntity,\n entityContent: TextPart,\n nestedEntityContent: TextPart[],\n) {\n const rawEntityText = typeof entityContent === 'string' && entityContent;\n\n const renderedContent = nestedEntityContent.length\n ? nestedEntityContent.join('')\n : renderText(entityContent, ['escape_html', 'emoji_html', 'br_html']).join('');\n\n if (!rawEntityText) {\n return renderedContent;\n }\n\n switch (entity.type) {\n case ApiMessageEntityTypes.Bold:\n return `${renderedContent}`;\n case ApiMessageEntityTypes.Italic:\n return `${renderedContent}`;\n case ApiMessageEntityTypes.Underline:\n return `${renderedContent}`;\n case ApiMessageEntityTypes.Code:\n return `${renderedContent}`;\n case ApiMessageEntityTypes.Pre:\n return `\\`\\`\\`
${renderedContent}
\\`\\`\\``;\n case ApiMessageEntityTypes.Strike:\n return `${renderedContent}`;\n case ApiMessageEntityTypes.MentionName:\n return `${renderedContent}`;\n case ApiMessageEntityTypes.Url:\n case ApiMessageEntityTypes.TextUrl:\n return `${renderedContent}`;\n case ApiMessageEntityTypes.Spoiler:\n return `${renderedContent}
`;\n default:\n return renderedContent;\n }\n}\n\nfunction getLinkUrl(entityContent: string, entity: ApiMessageEntity) {\n const { type, url } = entity;\n return type === ApiMessageEntityTypes.TextUrl && url ? url : entityContent;\n}\n\nfunction handleBotCommandClick(e: MouseEvent) {\n getActions().sendBotCommand({ command: e.currentTarget.innerText });\n}\n\nfunction handleHashtagClick(e: MouseEvent) {\n getActions().setLocalTextSearchQuery({ query: e.currentTarget.innerText });\n getActions().searchTextMessagesLocal();\n}\n\nfunction handleCodeClick(e: MouseEvent) {\n copyTextToClipboard(e.currentTarget.innerText);\n getActions().showNotification({\n message: getTranslation('TextCopied'),\n });\n}\n","import React from '../../../lib/teact/teact';\n\nimport { EDITABLE_INPUT_ID } from '../../../config';\nimport { IS_IOS } from '../../../util/environment';\n\nexport function preventMessageInputBlur(e: React.MouseEvent, withBubbling = false) {\n if (\n IS_IOS\n || !document.activeElement\n || document.activeElement.id !== EDITABLE_INPUT_ID\n || (!withBubbling && e.target !== e.currentTarget)\n ) {\n return;\n }\n\n e.preventDefault();\n}\n\nexport function preventMessageInputBlurWithBubbling(e: React.MouseEvent) {\n preventMessageInputBlur(e, true);\n}\n","import React, { FC } from '../../../lib/teact/teact';\nimport { getActions, withGlobal } from '../../../global';\n\nimport { ApiChat, ApiUser } from '../../../api/types';\n\nimport { selectUser } from '../../../global/selectors';\n\ntype OwnProps = {\n userId?: string;\n username?: string;\n children: React.ReactNode;\n};\n\ntype StateProps = {\n userOrChat?: ApiUser | ApiChat;\n};\n\nconst MentionLink: FC = ({\n username,\n userOrChat,\n children,\n}) => {\n const {\n openChat,\n openChatByUsername,\n } = getActions();\n\n const handleClick = () => {\n if (userOrChat) {\n openChat({ id: userOrChat.id });\n } else if (username) {\n openChatByUsername({ username: username.substring(1) });\n }\n };\n\n return (\n \n {children}\n \n );\n};\n\nexport default withGlobal(\n (global, { userId }): StateProps => {\n return {\n userOrChat: userId ? selectUser(global, userId) : undefined,\n };\n },\n)(MentionLink);\n","import { MouseEvent as ReactMouseEvent, RefObject } from 'react';\n\nimport React, {\n FC, useRef, useCallback, useState,\n} from '../../lib/teact/teact';\n\nimport buildClassName from '../../util/buildClassName';\n\nimport Spinner from './Spinner';\nimport RippleEffect from './RippleEffect';\n\nimport './Button.scss';\n\nexport type OwnProps = {\n ref?: RefObject;\n type?: 'button' | 'submit' | 'reset';\n children: React.ReactNode;\n size?: 'default' | 'smaller' | 'tiny';\n color?: (\n 'primary' | 'secondary' | 'gray' | 'danger' | 'translucent' | 'translucent-white' | 'translucent-black' | 'dark'\n );\n backgroundImage?: string;\n id?: string;\n className?: string;\n round?: boolean;\n pill?: boolean;\n fluid?: boolean;\n isText?: boolean;\n isLoading?: boolean;\n ariaLabel?: string;\n ariaControls?: string;\n hasPopup?: boolean;\n href?: string;\n download?: string;\n disabled?: boolean;\n ripple?: boolean;\n faded?: boolean;\n tabIndex?: number;\n isRtl?: boolean;\n withClickPropagation?: boolean;\n onClick?: (e: ReactMouseEvent) => void;\n onContextMenu?: (e: ReactMouseEvent) => void;\n onMouseDown?: (e: ReactMouseEvent) => void;\n onMouseEnter?: NoneToVoidFunction;\n onMouseLeave?: NoneToVoidFunction;\n onFocus?: NoneToVoidFunction;\n};\n\n// Longest animation duration;\nconst CLICKED_TIMEOUT = 400;\n\nconst Button: FC = ({\n ref,\n type = 'button',\n id,\n onClick,\n onContextMenu,\n onMouseDown,\n onMouseEnter,\n onMouseLeave,\n onFocus,\n children,\n size = 'default',\n color = 'primary',\n backgroundImage,\n className,\n round,\n pill,\n fluid,\n isText,\n isLoading,\n ariaLabel,\n ariaControls,\n hasPopup,\n href,\n download,\n disabled,\n ripple,\n faded,\n tabIndex,\n isRtl,\n withClickPropagation,\n}) => {\n // eslint-disable-next-line no-null/no-null\n let elementRef = useRef(null);\n if (ref) {\n elementRef = ref;\n }\n\n const [isClicked, setIsClicked] = useState(false);\n\n const fullClassName = buildClassName(\n 'Button',\n className,\n size,\n color,\n round && 'round',\n pill && 'pill',\n fluid && 'fluid',\n disabled && 'disabled',\n isText && 'text',\n isLoading && 'loading',\n ripple && 'has-ripple',\n faded && 'faded',\n isClicked && 'clicked',\n backgroundImage && 'with-image',\n );\n\n const handleClick = useCallback((e: ReactMouseEvent) => {\n if (!disabled && onClick) {\n onClick(e);\n }\n\n setIsClicked(true);\n setTimeout(() => {\n setIsClicked(false);\n }, CLICKED_TIMEOUT);\n }, [disabled, onClick]);\n\n const handleMouseDown = useCallback((e: ReactMouseEvent) => {\n if (!withClickPropagation) e.preventDefault();\n if (!disabled && onMouseDown) {\n onMouseDown(e);\n }\n }, [onMouseDown, disabled, withClickPropagation]);\n\n if (href) {\n return (\n }\n id={id}\n className={fullClassName}\n href={href}\n title={ariaLabel}\n download={download}\n tabIndex={tabIndex}\n dir={isRtl ? 'rtl' : undefined}\n aria-label={ariaLabel}\n aria-controls={ariaControls}\n >\n {children}\n {!disabled && ripple && (\n \n )}\n \n );\n }\n\n return (\n }\n id={id}\n type={type}\n className={fullClassName}\n onClick={handleClick}\n onContextMenu={onContextMenu}\n onMouseDown={handleMouseDown}\n onMouseEnter={onMouseEnter && !disabled ? onMouseEnter : undefined}\n onMouseLeave={onMouseLeave && !disabled ? onMouseLeave : undefined}\n onFocus={onFocus && !disabled ? onFocus : undefined}\n aria-label={ariaLabel}\n aria-controls={ariaControls}\n aria-haspopup={hasPopup}\n title={ariaLabel}\n tabIndex={tabIndex}\n dir={isRtl ? 'rtl' : undefined}\n style={backgroundImage ? `background-image: url(${backgroundImage})` : undefined}\n >\n {isLoading ? (\n
\n Please wait...\n \n
\n ) : children}\n {!disabled && ripple && (\n \n )}\n \n );\n};\n\nexport default Button;\n","import { ChangeEvent } from 'react';\nimport React, { FC, memo, useCallback } from '../../lib/teact/teact';\n\nimport buildClassName from '../../util/buildClassName';\nimport useLang from '../../hooks/useLang';\nimport renderText from '../common/helpers/renderText';\n\nimport Spinner from './Spinner';\n\nimport './Checkbox.scss';\n\ntype OwnProps = {\n id?: string;\n name?: string;\n value?: string;\n label: string;\n subLabel?: string;\n checked: boolean;\n disabled?: boolean;\n tabIndex?: number;\n round?: boolean;\n blocking?: boolean;\n isLoading?: boolean;\n withCheckedCallback?: boolean;\n onChange?: (e: ChangeEvent) => void;\n onCheck?: (isChecked: boolean) => void;\n};\n\nconst Checkbox: FC = ({\n id,\n name,\n value,\n label,\n subLabel,\n checked,\n tabIndex,\n disabled,\n round,\n blocking,\n isLoading,\n onChange,\n onCheck,\n}) => {\n const lang = useLang();\n const handleChange = useCallback((event: ChangeEvent) => {\n if (onChange) {\n onChange(event);\n }\n\n if (onCheck) {\n onCheck(event.currentTarget.checked);\n }\n }, [onChange, onCheck]);\n\n const className = buildClassName(\n 'Checkbox',\n disabled && 'disabled',\n round && 'round',\n isLoading && 'loading',\n blocking && 'blocking',\n );\n\n return (\n \n );\n};\n\nexport default memo(Checkbox);\n","import React, {\n FC, useState, useRef, useCallback,\n} from '../../lib/teact/teact';\n\nimport Menu from './Menu';\n\nimport './DropdownMenu.scss';\n\ntype OwnProps = {\n className?: string;\n trigger: FC<{ onTrigger: () => void; isOpen?: boolean }>;\n positionX?: 'left' | 'right';\n positionY?: 'top' | 'bottom';\n footer?: string;\n forceOpen?: boolean;\n onOpen?: NoneToVoidFunction;\n onClose?: NoneToVoidFunction;\n children: React.ReactNode;\n};\n\nconst DropdownMenu: FC = ({\n trigger,\n className,\n children,\n positionX = 'left',\n positionY = 'top',\n footer,\n forceOpen,\n onOpen,\n onClose,\n}) => {\n // eslint-disable-next-line no-null/no-null\n const menuRef = useRef(null);\n // eslint-disable-next-line no-null/no-null\n const dropdownRef = useRef(null);\n const [isOpen, setIsOpen] = useState(false);\n\n const toggleIsOpen = () => {\n setIsOpen(!isOpen);\n if (isOpen) {\n if (onClose) onClose();\n } else if (onOpen) onOpen();\n };\n\n const handleKeyDown = (e: React.KeyboardEvent) => {\n const menu = menuRef.current;\n\n if (!isOpen || e.keyCode !== 40 || !menu) {\n return;\n }\n\n const focusedElement = document.activeElement;\n const elementChildren = Array.from(menu.children);\n\n if (!focusedElement || elementChildren.indexOf(focusedElement) === -1) {\n (elementChildren[0] as HTMLElement).focus();\n }\n };\n\n const handleClose = useCallback(() => {\n setIsOpen(false);\n if (onClose) onClose();\n }, [onClose]);\n\n return (\n \n {trigger({ onTrigger: toggleIsOpen, isOpen })}\n\n \n {children}\n \n \n );\n};\n\nexport default DropdownMenu;\n","import {\n ChangeEvent, FormEvent, RefObject,\n} from 'react';\nimport React, { FC, memo } from '../../lib/teact/teact';\n\nimport buildClassName from '../../util/buildClassName';\nimport useLang from '../../hooks/useLang';\n\ntype OwnProps = {\n ref?: RefObject;\n id?: string;\n className?: string;\n value?: string;\n label?: string;\n error?: string;\n success?: string;\n disabled?: boolean;\n readOnly?: boolean;\n placeholder?: string;\n autoComplete?: string;\n maxLength?: number;\n tabIndex?: number;\n inputMode?: 'text' | 'none' | 'tel' | 'url' | 'email' | 'numeric' | 'decimal' | 'search';\n onChange?: (e: ChangeEvent) => void;\n onInput?: (e: FormEvent) => void;\n onKeyPress?: (e: React.KeyboardEvent) => void;\n onKeyDown?: (e: React.KeyboardEvent) => void;\n onBlur?: (e: React.FocusEvent) => void;\n onPaste?: (e: React.ClipboardEvent) => void;\n};\n\nconst InputText: FC = ({\n ref,\n id,\n className,\n value,\n label,\n error,\n success,\n disabled,\n readOnly,\n placeholder,\n autoComplete,\n inputMode,\n maxLength,\n tabIndex,\n onChange,\n onInput,\n onKeyPress,\n onKeyDown,\n onBlur,\n onPaste,\n}) => {\n const lang = useLang();\n const labelText = error || success || label;\n const fullClassName = buildClassName(\n 'input-group',\n value && 'touched',\n error ? 'error' : success && 'success',\n disabled && 'disabled',\n readOnly && 'disabled',\n labelText && 'with-label',\n className,\n );\n\n return (\n
\n \n {labelText && (\n \n )}\n
\n );\n};\n\nexport default memo(InputText);\n","import React, { FC, useCallback } from '../../lib/teact/teact';\n\nimport buildClassName from '../../util/buildClassName';\n\nimport './Link.scss';\n\ntype OwnProps = {\n children: React.ReactNode;\n className?: string;\n isRtl?: boolean;\n onClick?: (e: React.MouseEvent) => void;\n};\n\nconst Link: FC = ({\n children, className, isRtl, onClick,\n}) => {\n const handleClick = useCallback((e: React.MouseEvent) => {\n e.preventDefault();\n onClick!(e);\n }, [onClick]);\n\n return (\n \n {children}\n \n );\n};\n\nexport default Link;\n","import React, { FC, memo } from '../../lib/teact/teact';\n\nimport Spinner from './Spinner';\nimport buildClassName from '../../util/buildClassName';\n\nimport './Loading.scss';\n\ntype OwnProps = {\n color?: 'blue' | 'white' | 'black' | 'yellow';\n backgroundColor?: 'light' | 'dark';\n onClick?: NoneToVoidFunction;\n};\n\nconst Loading: FC = ({ color = 'blue', backgroundColor, onClick }) => {\n return (\n
\n \n
\n );\n};\n\nexport default memo(Loading);\n","import { RefObject } from 'react';\nimport React, { FC, useEffect, useRef } from '../../lib/teact/teact';\n\nimport useShowTransition from '../../hooks/useShowTransition';\nimport useKeyboardListNavigation from '../../hooks/useKeyboardListNavigation';\nimport useVirtualBackdrop from '../../hooks/useVirtualBackdrop';\nimport useEffectWithPrevDeps from '../../hooks/useEffectWithPrevDeps';\nimport captureEscKeyListener from '../../util/captureEscKeyListener';\nimport buildClassName from '../../util/buildClassName';\nimport { dispatchHeavyAnimationEvent } from '../../hooks/useHeavyAnimationCheck';\nimport useHistoryBack from '../../hooks/useHistoryBack';\nimport { preventMessageInputBlurWithBubbling } from '../middle/helpers/preventMessageInputBlur';\nimport { IS_BACKDROP_BLUR_SUPPORTED, IS_COMPACT_MENU } from '../../util/environment';\n\nimport './Menu.scss';\n\ntype OwnProps = {\n ref?: RefObject;\n containerRef?: RefObject;\n isOpen: boolean;\n id?: string;\n className?: string;\n style?: string;\n bubbleStyle?: string;\n ariaLabelledBy?: string;\n transformOriginX?: number;\n transformOriginY?: number;\n positionX?: 'left' | 'right';\n positionY?: 'top' | 'bottom';\n autoClose?: boolean;\n shouldSkipTransition?: boolean;\n footer?: string;\n noCloseOnBackdrop?: boolean;\n noCompact?: boolean;\n onKeyDown?: (e: React.KeyboardEvent) => void;\n onCloseAnimationEnd?: () => void;\n onClose?: () => void;\n onMouseEnter?: (e: React.MouseEvent) => void;\n onMouseLeave?: (e: React.MouseEvent) => void;\n children: React.ReactNode;\n};\n\nconst ANIMATION_DURATION = 200;\n\nconst Menu: FC = ({\n ref,\n containerRef,\n isOpen,\n id,\n className,\n style,\n bubbleStyle,\n ariaLabelledBy,\n children,\n transformOriginX,\n transformOriginY,\n positionX = 'left',\n positionY = 'top',\n autoClose = false,\n footer,\n noCloseOnBackdrop = false,\n noCompact,\n onCloseAnimationEnd,\n onClose,\n onMouseEnter,\n onMouseLeave,\n shouldSkipTransition,\n}) => {\n // eslint-disable-next-line no-null/no-null\n let menuRef = useRef(null);\n if (ref) {\n menuRef = ref;\n }\n const backdropContainerRef = containerRef || menuRef;\n\n const {\n transitionClassNames,\n } = useShowTransition(\n isOpen,\n onCloseAnimationEnd,\n shouldSkipTransition,\n undefined,\n shouldSkipTransition,\n );\n\n useEffect(\n () => (isOpen && onClose ? captureEscKeyListener(onClose) : undefined),\n [isOpen, onClose],\n );\n\n useHistoryBack(isOpen, onClose, undefined, undefined, autoClose);\n\n useEffectWithPrevDeps(([prevIsOpen]) => {\n if (isOpen || (!isOpen && prevIsOpen === true)) {\n dispatchHeavyAnimationEvent(ANIMATION_DURATION);\n }\n }, [isOpen]);\n\n const handleKeyDown = useKeyboardListNavigation(menuRef, isOpen, autoClose ? onClose : undefined, undefined, true);\n\n useVirtualBackdrop(\n isOpen,\n backdropContainerRef,\n noCloseOnBackdrop ? undefined : onClose,\n );\n\n const bubbleClassName = buildClassName(\n 'bubble menu-container custom-scroll',\n positionY,\n positionX,\n footer && 'with-footer',\n transitionClassNames,\n );\n\n const transformOriginYStyle = transformOriginY !== undefined ? `${transformOriginY}px` : undefined;\n const transformOriginXStyle = transformOriginX !== undefined ? `${transformOriginX}px` : undefined;\n\n return (\n \n {isOpen && (\n // This only prevents click events triggering on underlying elements\n
\n )}\n \n {children}\n {footer &&
{footer}
}\n
\n \n );\n};\n\nexport default Menu;\n","import React, { FC, useCallback } from '../../lib/teact/teact';\n\nimport buildClassName from '../../util/buildClassName';\nimport useLang from '../../hooks/useLang';\nimport { IS_COMPACT_MENU } from '../../util/environment';\n\nimport './MenuItem.scss';\n\ntype OnClickHandler = (e: React.SyntheticEvent) => void;\n\ntype OwnProps = {\n icon?: string;\n className?: string;\n children: React.ReactNode;\n onClick?: OnClickHandler;\n href?: string;\n download?: string;\n disabled?: boolean;\n destructive?: boolean;\n ariaLabel?: string;\n};\n\nconst MenuItem: FC = (props) => {\n const {\n icon,\n className,\n children,\n onClick,\n href,\n download,\n disabled,\n destructive,\n ariaLabel,\n } = props;\n\n const lang = useLang();\n const handleClick = useCallback((e: React.MouseEvent) => {\n if (disabled || !onClick) {\n e.stopPropagation();\n e.preventDefault();\n\n return;\n }\n\n onClick(e);\n }, [disabled, onClick]);\n\n const handleKeyDown = useCallback((e: React.KeyboardEvent) => {\n if (e.keyCode !== 13 && e.keyCode !== 32) {\n return;\n }\n\n if (disabled || !onClick) {\n e.stopPropagation();\n e.preventDefault();\n\n return;\n }\n\n onClick(e);\n }, [disabled, onClick]);\n\n const fullClassName = buildClassName(\n 'MenuItem',\n className,\n disabled && 'disabled',\n destructive && 'destructive',\n IS_COMPACT_MENU && 'compact',\n );\n\n const content = (\n <>\n {icon && (\n \n )}\n {children}\n \n );\n\n if (href) {\n return (\n \n {content}\n \n );\n }\n\n return (\n \n {content}\n \n );\n};\n\nexport default MenuItem;\n","import React, {\n FC, useCallback, useMemo, useState, memo,\n} from '../../lib/teact/teact';\nimport { debounce } from '../../util/schedulers';\n\nimport './RippleEffect.scss';\n\ninterface Ripple {\n x: number;\n y: number;\n size: number;\n}\n\nconst ANIMATION_DURATION_MS = 700;\n\nconst RippleEffect: FC = () => {\n const [ripples, setRipples] = useState([]);\n\n const cleanUpDebounced = useMemo(() => {\n return debounce(() => {\n setRipples([]);\n }, ANIMATION_DURATION_MS, false);\n }, []);\n\n const handleMouseDown = useCallback((e: React.MouseEvent) => {\n if (e.button !== 0) {\n return;\n }\n\n const container = e.currentTarget as HTMLDivElement;\n const position = container.getBoundingClientRect() as DOMRect;\n\n const rippleSize = container.offsetWidth / 2;\n\n setRipples([\n ...ripples,\n {\n x: e.clientX - position.x - (rippleSize / 2),\n y: e.clientY - position.y - (rippleSize / 2),\n size: rippleSize,\n },\n ]);\n\n requestAnimationFrame(() => {\n cleanUpDebounced();\n });\n }, [ripples, cleanUpDebounced]);\n\n return (\n
\n {ripples.map(({ x, y, size }) => (\n \n ))}\n
\n );\n};\n\nexport default memo(RippleEffect);\n","import React, { FC } from '../../lib/teact/teact';\n\nimport buildClassName from '../../util/buildClassName';\n\nimport './Spinner.scss';\n\nconst Spinner: FC<{\n color?: 'blue' | 'white' | 'black' | 'green' | 'gray' | 'yellow';\n backgroundColor?: 'light' | 'dark';\n}> = ({\n color = 'blue',\n backgroundColor,\n}) => {\n return (\n
\n
\n
\n );\n};\n\nexport default Spinner;\n","export const APP_NAME = process.env.APP_NAME || 'Telegram WebZ';\nexport const APP_VERSION = process.env.APP_VERSION!;\n\nexport const DEBUG = (\n process.env.APP_ENV !== 'production' && process.env.APP_ENV !== 'perf' && process.env.APP_ENV !== 'test'\n);\nexport const DEBUG_MORE = false;\n\nexport const IS_TEST = process.env.APP_ENV === 'test';\nexport const IS_PERF = process.env.APP_ENV === 'perf';\n\nexport const DEBUG_ALERT_MSG = 'Shoot!\\nSomething went wrong, please see the error details in Dev Tools Console.';\nexport const DEBUG_GRAMJS = false;\n\nexport const PAGE_TITLE = 'Telegram';\nexport const INACTIVE_MARKER = ' [Inactive]';\n\nexport const DEBUG_PAYMENT_SMART_GLOCAL = false;\n\nexport const SESSION_USER_KEY = 'user_auth';\nexport const LEGACY_SESSION_KEY = 'GramJs:sessionId';\n\nexport const GLOBAL_STATE_CACHE_DISABLED = false;\nexport const GLOBAL_STATE_CACHE_KEY = 'tt-global-state';\nexport const GLOBAL_STATE_CACHE_USER_LIST_LIMIT = 500;\nexport const GLOBAL_STATE_CACHE_CHAT_LIST_LIMIT = 200;\nexport const GLOBAL_STATE_CACHE_CHATS_WITH_MESSAGES_LIMIT = 30;\n\nexport const MEDIA_CACHE_DISABLED = false;\nexport const MEDIA_CACHE_NAME = 'tt-media';\nexport const MEDIA_CACHE_NAME_AVATARS = 'tt-media-avatars';\nexport const MEDIA_PROGRESSIVE_CACHE_DISABLED = false;\nexport const MEDIA_PROGRESSIVE_CACHE_NAME = 'tt-media-progressive';\nexport const MEDIA_CACHE_MAX_BYTES = 512 * 1024; // 512 KB\nexport const CUSTOM_BG_CACHE_NAME = 'tt-custom-bg';\nexport const LANG_CACHE_NAME = 'tt-lang-packs-v8';\nexport const ASSET_CACHE_NAME = 'tt-assets';\nexport const AUTODOWNLOAD_FILESIZE_MB_LIMITS = [1, 5, 10, 50, 100, 500];\n\nexport const DOWNLOAD_WORKERS = 16;\nexport const UPLOAD_WORKERS = 16;\n\nconst isBigScreen = typeof window !== 'undefined' && window.innerHeight >= 900;\n\nexport const MIN_PASSWORD_LENGTH = 1;\n\nexport const MESSAGE_LIST_SLICE = isBigScreen ? 60 : 40;\nexport const MESSAGE_LIST_VIEWPORT_LIMIT = MESSAGE_LIST_SLICE * 2;\n\nexport const CHAT_HEIGHT_PX = 72;\nexport const CHAT_LIST_SLICE = isBigScreen ? 30 : 25;\nexport const CHAT_LIST_LOAD_SLICE = 100;\nexport const SHARED_MEDIA_SLICE = 42;\nexport const MESSAGE_SEARCH_SLICE = 42;\nexport const GLOBAL_SEARCH_SLICE = 20;\nexport const MEMBERS_SLICE = 30;\nexport const MEMBERS_LOAD_SLICE = 200;\nexport const PINNED_MESSAGES_LIMIT = 50;\nexport const BLOCKED_LIST_LIMIT = 100;\nexport const PROFILE_PHOTOS_LIMIT = 40;\nexport const PROFILE_SENSITIVE_AREA = 500;\nexport const COMMON_CHATS_LIMIT = 100;\nexport const GROUP_CALL_PARTICIPANTS_LIMIT = 100;\nexport const REACTION_LIST_LIMIT = 100;\n\nexport const TOP_CHAT_MESSAGES_PRELOAD_LIMIT = 20;\n\nexport const SPONSORED_MESSAGE_CACHE_MS = 300000; // 5 min\n\nexport const DEFAULT_VOLUME = 1;\nexport const DEFAULT_PLAYBACK_RATE = 1;\n\nexport const ANIMATION_LEVEL_MIN = 0;\nexport const ANIMATION_LEVEL_MED = 1;\nexport const ANIMATION_LEVEL_MAX = 2;\nexport const ANIMATION_LEVEL_DEFAULT = ANIMATION_LEVEL_MAX;\n\nexport const DEFAULT_MESSAGE_TEXT_SIZE_PX = 16;\nexport const IOS_DEFAULT_MESSAGE_TEXT_SIZE_PX = 17;\nexport const MACOS_DEFAULT_MESSAGE_TEXT_SIZE_PX = 15;\n\nexport const DRAFT_DEBOUNCE = 10000; // 10s\nexport const SEND_MESSAGE_ACTION_INTERVAL = 3000; // 3s\n\nexport const EDITABLE_INPUT_ID = 'editable-message-text';\nexport const EDITABLE_INPUT_MODAL_ID = 'editable-message-text-modal';\n// eslint-disable-next-line max-len\nexport const EDITABLE_INPUT_CSS_SELECTOR = `.Transition__slide--active #${EDITABLE_INPUT_ID}, .Transition > .to #${EDITABLE_INPUT_ID}`;\n\nexport const CUSTOM_APPENDIX_ATTRIBUTE = 'data-has-custom-appendix';\n\n// Screen width where Pinned Message / Audio Player in the Middle Header can be safely displayed\nexport const SAFE_SCREEN_WIDTH_FOR_STATIC_RIGHT_COLUMN = 1440; // px\n// Screen width where Pinned Message / Audio Player in the Middle Header shouldn't collapse with ChatInfo\nexport const SAFE_SCREEN_WIDTH_FOR_CHAT_INFO = 1150; // px\n\nexport const MIN_SCREEN_WIDTH_FOR_STATIC_RIGHT_COLUMN = 1275; // px\nexport const MIN_SCREEN_WIDTH_FOR_STATIC_LEFT_COLUMN = 925; // px\nexport const MOBILE_SCREEN_MAX_WIDTH = 600; // px\nexport const MOBILE_SCREEN_LANDSCAPE_MAX_WIDTH = 950; // px\nexport const MOBILE_SCREEN_LANDSCAPE_MAX_HEIGHT = 450; // px\n\nexport const LOCAL_MESSAGE_ID_BASE = 1e9;\nexport const TMP_CHAT_ID = '0';\n\nexport const ANIMATION_END_DELAY = 100;\n\nexport const FAST_SMOOTH_MAX_DISTANCE = 1500;\nexport const FAST_SMOOTH_MIN_DURATION = 250;\nexport const FAST_SMOOTH_MAX_DURATION = 600;\nexport const FAST_SMOOTH_SHORT_TRANSITION_MAX_DISTANCE = 500; // px\n\n// Average duration of message sending animation\nexport const API_UPDATE_THROTTLE = Math.round((FAST_SMOOTH_MIN_DURATION + FAST_SMOOTH_MAX_DURATION) / 2);\nexport const API_THROTTLE_RESET_UPDATES = new Set([\n 'newMessage', 'newScheduledMessage', 'deleteMessages', 'deleteScheduledMessages', 'deleteHistory',\n]);\n\nexport const STICKER_SIZE_INLINE_DESKTOP_FACTOR = 13;\nexport const STICKER_SIZE_INLINE_MOBILE_FACTOR = 11;\nexport const STICKER_SIZE_AUTH = 160;\nexport const STICKER_SIZE_AUTH_MOBILE = 120;\nexport const STICKER_SIZE_PICKER = 64;\nexport const STICKER_SIZE_GENERAL_SETTINGS = 48;\nexport const STICKER_SIZE_PICKER_HEADER = 32;\nexport const STICKER_SIZE_SEARCH = 64;\nexport const STICKER_SIZE_MODAL = 64;\nexport const STICKER_SIZE_TWO_FA = 160;\nexport const STICKER_SIZE_DISCUSSION_GROUPS = 140;\nexport const STICKER_SIZE_FOLDER_SETTINGS = 100;\nexport const STICKER_SIZE_INLINE_BOT_RESULT = 100;\nexport const STICKER_SIZE_JOIN_REQUESTS = 140;\nexport const STICKER_SIZE_INVITES = 140;\nexport const RECENT_STICKERS_LIMIT = 20;\nexport const NO_STICKER_SET_ID = 'NO_STICKER_SET';\n\nexport const BASE_EMOJI_KEYWORD_LANG = 'en';\n\nexport const MENU_TRANSITION_DURATION = 200;\nexport const SLIDE_TRANSITION_DURATION = 450;\n\nexport const VIDEO_MOV_TYPE = 'video/quicktime';\nexport const VIDEO_WEBM_TYPE = 'video/webm';\n\nexport const SUPPORTED_IMAGE_CONTENT_TYPES = new Set([\n 'image/png', 'image/gif', 'image/jpeg',\n]);\n\nexport const SUPPORTED_VIDEO_CONTENT_TYPES = new Set([\n 'video/mp4', // video/quicktime added dynamically in environment.ts\n]);\n\nexport const SUPPORTED_AUDIO_CONTENT_TYPES = new Set([\n 'audio/mp3',\n 'audio/ogg',\n 'audio/wav',\n 'audio/mpeg',\n 'audio/flac',\n 'audio/aac',\n 'audio/m4a',\n 'audio/mp4',\n 'audio/x-m4a',\n]);\n\nexport const CONTENT_TYPES_WITH_PREVIEW = new Set([\n ...SUPPORTED_IMAGE_CONTENT_TYPES,\n ...SUPPORTED_VIDEO_CONTENT_TYPES,\n]);\n\nexport const CONTENT_NOT_SUPPORTED = 'The message is not supported on this version of Telegram.';\n\n// eslint-disable-next-line max-len\nexport const RE_LINK_TEMPLATE = '((ftp|https?):\\\\/\\\\/)?((www\\\\.)?[-a-zA-Z0-9@:%._+~#=]{1,256}\\\\.[a-zA-Z0-9()]{1,63})\\\\b([-a-zA-Z0-9()@:%_+.~#?&/=]*)';\nexport const RE_MENTION_TEMPLATE = '(@[\\\\w\\\\d_-]+)';\nexport const RE_TG_LINK = /^tg:(\\/\\/)?([?=&\\d\\w_-]+)?/gm;\nexport const RE_TME_LINK = /^(?:https?:\\/\\/)?(?:t\\.me\\/)/gm;\n\n// eslint-disable-next-line max-len\nexport const COUNTRIES_WITH_12H_TIME_FORMAT = new Set(['AU', 'BD', 'CA', 'CO', 'EG', 'HN', 'IE', 'IN', 'JO', 'MX', 'MY', 'NI', 'NZ', 'PH', 'PK', 'SA', 'SV', 'US']);\n\n// MTProto constants\nexport const SERVICE_NOTIFICATIONS_USER_ID = '777000';\nexport const REPLIES_USER_ID = '1271266957'; // TODO For Test connection ID must be equal to 708513\nexport const ALL_FOLDER_ID = 0;\nexport const ARCHIVED_FOLDER_ID = 1;\nexport const DELETED_COMMENTS_CHANNEL_ID = '-777';\nexport const MAX_MEDIA_FILES_FOR_ALBUM = 10;\nexport const MAX_ACTIVE_PINNED_CHATS = 5;\nexport const SCHEDULED_WHEN_ONLINE = 0x7FFFFFFE;\nexport const DEFAULT_LANG_CODE = 'en';\nexport const DEFAULT_LANG_PACK = 'android';\nexport const LANG_PACKS = ['android', 'ios', 'tdesktop', 'macos'] as const;\nexport const TIPS_USERNAME = 'TelegramTips';\nexport const LOCALIZED_TIPS = ['ar', 'pt-br', 'id', 'it', 'ko', 'ms', 'pl', 'es', 'tr'];\nexport const FEEDBACK_URL = 'https://bugs.telegram.org/?tag_ids=41&sort=time';\nexport const LIGHT_THEME_BG_COLOR = '#A2AF8E';\nexport const DARK_THEME_BG_COLOR = '#0F0F0F';\nexport const DARK_THEME_PATTERN_COLOR = '#0a0a0a8c';\nexport const DEFAULT_PATTERN_COLOR = 'rgba(90, 110, 70, 0.6)';\n\n// Group calls\nexport const GROUP_CALL_VOLUME_MULTIPLIER = 100;\nexport const GROUP_CALL_DEFAULT_VOLUME = 100 * GROUP_CALL_VOLUME_MULTIPLIER;\nexport const ENABLE_THUMBNAIL_VIDEO = false;\n","import { addActionHandler, getActions, getGlobal } from '../../index';\n\nimport { initApi, callApi } from '../../../api/gramjs';\n\nimport {\n LANG_CACHE_NAME,\n CUSTOM_BG_CACHE_NAME,\n MEDIA_CACHE_NAME,\n MEDIA_CACHE_NAME_AVATARS,\n MEDIA_PROGRESSIVE_CACHE_NAME,\n IS_TEST,\n} from '../../../config';\nimport { IS_MOV_SUPPORTED, IS_WEBM_SUPPORTED, PLATFORM_ENV } from '../../../util/environment';\nimport { unsubscribe } from '../../../util/notifications';\nimport * as cacheApi from '../../../util/cacheApi';\nimport { updateAppBadge } from '../../../util/appBadge';\nimport {\n storeSession,\n loadStoredSession,\n clearStoredSession,\n importLegacySession,\n clearLegacySessions,\n} from '../../../util/sessions';\nimport { forceWebsync } from '../../../util/websync';\n\naddActionHandler('initApi', async (global, actions) => {\n if (!IS_TEST) {\n await importLegacySession();\n void clearLegacySessions();\n }\n\n void initApi(actions.apiUpdate, {\n userAgent: navigator.userAgent,\n platform: PLATFORM_ENV,\n sessionData: loadStoredSession(),\n isTest: window.location.search.includes('test'),\n isMovSupported: IS_MOV_SUPPORTED,\n isWebmSupported: IS_WEBM_SUPPORTED,\n });\n});\n\naddActionHandler('setAuthPhoneNumber', (global, actions, payload) => {\n const { phoneNumber } = payload!;\n\n void callApi('provideAuthPhoneNumber', phoneNumber.replace(/[^\\d]/g, ''));\n\n return {\n ...global,\n authIsLoading: true,\n authError: undefined,\n };\n});\n\naddActionHandler('setAuthCode', (global, actions, payload) => {\n const { code } = payload!;\n\n void callApi('provideAuthCode', code);\n\n return {\n ...global,\n authIsLoading: true,\n authError: undefined,\n };\n});\n\naddActionHandler('setAuthPassword', (global, actions, payload) => {\n const { password } = payload!;\n\n void callApi('provideAuthPassword', password);\n\n return {\n ...global,\n authIsLoading: true,\n authError: undefined,\n };\n});\n\naddActionHandler('uploadProfilePhoto', (global, actions, payload) => {\n const { file } = payload!;\n\n void callApi('uploadProfilePhoto', file);\n});\n\naddActionHandler('signUp', (global, actions, payload) => {\n const { firstName, lastName } = payload!;\n\n void callApi('provideAuthRegistration', { firstName, lastName });\n\n return {\n ...global,\n authIsLoading: true,\n authError: undefined,\n };\n});\n\naddActionHandler('returnToAuthPhoneNumber', (global) => {\n void callApi('restartAuth');\n\n return {\n ...global,\n authError: undefined,\n };\n});\n\naddActionHandler('goToAuthQrCode', (global) => {\n void callApi('restartAuthWithQr');\n\n return {\n ...global,\n authIsLoadingQrCode: true,\n authError: undefined,\n };\n});\n\naddActionHandler('saveSession', (global, actions, payload) => {\n const { sessionData } = payload;\n\n if (sessionData) {\n storeSession(payload.sessionData, global.currentUserId);\n } else {\n clearStoredSession();\n }\n});\n\naddActionHandler('signOut', async (_global, _actions, payload) => {\n try {\n await unsubscribe();\n await callApi('destroy');\n await forceWebsync(false);\n } catch (err) {\n // Do nothing\n }\n\n getActions().reset();\n\n if (payload?.forceInitApi) {\n getActions().initApi();\n }\n});\n\naddActionHandler('reset', () => {\n clearStoredSession();\n\n void cacheApi.clear(MEDIA_CACHE_NAME);\n void cacheApi.clear(MEDIA_CACHE_NAME_AVATARS);\n void cacheApi.clear(MEDIA_PROGRESSIVE_CACHE_NAME);\n void cacheApi.clear(CUSTOM_BG_CACHE_NAME);\n\n const langCachePrefix = LANG_CACHE_NAME.replace(/\\d+$/, '');\n const langCacheVersion = (LANG_CACHE_NAME.match(/\\d+$/) || [0])[0];\n for (let i = 0; i < langCacheVersion; i++) {\n void cacheApi.clear(`${langCachePrefix}${i === 0 ? '' : i}`);\n }\n\n void clearLegacySessions();\n\n updateAppBadge(0);\n\n getActions().init();\n});\n\naddActionHandler('disconnect', () => {\n void callApi('disconnect');\n});\n\naddActionHandler('loadNearestCountry', async (global) => {\n if (global.connectionState !== 'connectionStateReady') {\n return undefined;\n }\n\n const authNearestCountry = await callApi('fetchNearestCountry');\n\n return {\n ...getGlobal(),\n authNearestCountry,\n };\n});\n\naddActionHandler('setDeviceToken', (global, actions, deviceToken) => {\n return {\n ...global,\n push: {\n deviceToken,\n subscribedAt: Date.now(),\n },\n };\n});\n\naddActionHandler('deleteDeviceToken', (global) => {\n return {\n ...global,\n push: undefined,\n };\n});\n","import { addActionHandler, getGlobal, setGlobal } from '../../index';\n\nimport { GlobalState } from '../../types';\nimport {\n ApiPrivacyKey, PrivacyVisibility, ProfileEditProgress, InputPrivacyRules, InputPrivacyContact,\n UPLOADING_WALLPAPER_SLUG,\n} from '../../../types';\n\nimport { COUNTRIES_WITH_12H_TIME_FORMAT } from '../../../config';\nimport { callApi } from '../../../api/gramjs';\nimport { buildCollectionByKey } from '../../../util/iteratees';\nimport { subscribe, unsubscribe } from '../../../util/notifications';\nimport { setTimeFormat } from '../../../util/langProvider';\nimport { selectUser } from '../../selectors';\nimport {\n addUsers, addBlockedContact, updateChats, updateUser, removeBlockedContact, replaceSettings, updateNotifySettings,\n addNotifyExceptions,\n} from '../../reducers';\nimport { isUserId } from '../../helpers';\n\naddActionHandler('updateProfile', async (global, actions, payload) => {\n const {\n photo, firstName, lastName, bio: about, username,\n } = payload!;\n\n const { currentUserId } = global;\n if (!currentUserId) {\n return undefined;\n }\n\n setGlobal({\n ...getGlobal(),\n profileEdit: {\n progress: ProfileEditProgress.InProgress,\n },\n });\n\n if (photo) {\n await callApi('updateProfilePhoto', photo);\n }\n\n if (firstName || lastName || about) {\n const result = await callApi('updateProfile', { firstName, lastName, about });\n if (result) {\n global = getGlobal();\n const currentUser = currentUserId && selectUser(global, currentUserId);\n\n if (currentUser) {\n setGlobal(updateUser(\n global,\n currentUser.id,\n {\n firstName,\n lastName,\n fullInfo: {\n ...currentUser.fullInfo,\n bio: about,\n },\n },\n ));\n }\n }\n }\n\n if (username) {\n const result = await callApi('updateUsername', username);\n if (result && currentUserId) {\n setGlobal(updateUser(getGlobal(), currentUserId, { username }));\n }\n }\n\n return {\n ...getGlobal(),\n profileEdit: {\n progress: ProfileEditProgress.Complete,\n },\n };\n});\n\naddActionHandler('checkUsername', async (global, actions, payload) => {\n const { username } = payload!;\n\n // No need to check the username if profile update is already in progress\n if (global.profileEdit && global.profileEdit.progress === ProfileEditProgress.InProgress) {\n return undefined;\n }\n\n setGlobal({\n ...global,\n profileEdit: {\n progress: global.profileEdit ? global.profileEdit.progress : ProfileEditProgress.Idle,\n isUsernameAvailable: undefined,\n },\n });\n\n const isUsernameAvailable = await callApi('checkUsername', username);\n\n global = getGlobal();\n return {\n ...global,\n profileEdit: {\n ...global.profileEdit!,\n isUsernameAvailable,\n },\n };\n});\n\naddActionHandler('loadWallpapers', async () => {\n const result = await callApi('fetchWallpapers');\n if (!result) {\n return undefined;\n }\n\n const global = getGlobal();\n return {\n ...global,\n settings: {\n ...global.settings,\n loadedWallpapers: result.wallpapers,\n },\n };\n});\n\naddActionHandler('uploadWallpaper', async (global, actions, payload) => {\n const file = payload;\n const previewBlobUrl = URL.createObjectURL(file);\n\n setGlobal({\n ...global,\n settings: {\n ...global.settings,\n loadedWallpapers: [\n {\n slug: UPLOADING_WALLPAPER_SLUG,\n document: {\n fileName: '',\n size: file.size,\n mimeType: file.type,\n previewBlobUrl,\n },\n },\n ...(global.settings.loadedWallpapers || []),\n ],\n },\n });\n\n const result = await callApi('uploadWallpaper', file);\n if (!result) {\n return undefined;\n }\n\n const { wallpaper } = result;\n\n global = getGlobal();\n if (!global.settings.loadedWallpapers) {\n return undefined;\n }\n\n const firstWallpaper = global.settings.loadedWallpapers[0];\n if (!firstWallpaper || firstWallpaper.slug !== UPLOADING_WALLPAPER_SLUG) {\n return undefined;\n }\n\n const withLocalMedia = {\n ...wallpaper,\n document: {\n ...wallpaper.document,\n previewBlobUrl,\n },\n };\n\n return {\n ...global,\n settings: {\n ...global.settings,\n loadedWallpapers: [\n withLocalMedia,\n ...global.settings.loadedWallpapers.slice(1),\n ],\n },\n };\n});\n\naddActionHandler('loadBlockedContacts', async (global) => {\n const result = await callApi('fetchBlockedContacts');\n if (!result) {\n return undefined;\n }\n\n global = getGlobal();\n\n if (result.users?.length) {\n global = addUsers(global, buildCollectionByKey(result.users, 'id'));\n }\n if (result.chats?.length) {\n global = updateChats(global, buildCollectionByKey(result.chats, 'id'));\n }\n\n global = {\n ...global,\n blocked: {\n ...global.blocked,\n ids: [...(global.blocked.ids || []), ...result.blockedIds],\n totalCount: result.totalCount,\n },\n };\n\n return global;\n});\n\naddActionHandler('blockContact', async (global, actions, payload) => {\n const { contactId, accessHash } = payload!;\n\n const result = await callApi('blockContact', contactId, accessHash);\n if (!result) {\n return undefined;\n }\n\n return addBlockedContact(getGlobal(), contactId);\n});\n\naddActionHandler('unblockContact', async (global, actions, payload) => {\n const { contactId } = payload!;\n let accessHash: string | undefined;\n const isPrivate = isUserId(contactId);\n\n if (isPrivate) {\n const user = selectUser(global, contactId);\n if (!user) {\n return undefined;\n }\n\n accessHash = user.accessHash;\n }\n\n const result = await callApi('unblockContact', contactId, accessHash);\n if (!result) {\n return undefined;\n }\n\n return removeBlockedContact(getGlobal(), contactId);\n});\n\naddActionHandler('loadAuthorizations', async () => {\n const result = await callApi('fetchAuthorizations');\n if (!result) {\n return undefined;\n }\n\n return {\n ...getGlobal(),\n activeSessions: result,\n };\n});\n\naddActionHandler('terminateAuthorization', async (global, actions, payload) => {\n const { hash } = payload!;\n\n const result = await callApi('terminateAuthorization', hash);\n if (!result) {\n return undefined;\n }\n\n global = getGlobal();\n\n return {\n ...global,\n activeSessions: global.activeSessions.filter((session) => session.hash !== hash),\n };\n});\n\naddActionHandler('terminateAllAuthorizations', async (global) => {\n const result = await callApi('terminateAllAuthorizations');\n if (!result) {\n return undefined;\n }\n\n global = getGlobal();\n\n return {\n ...global,\n activeSessions: global.activeSessions.filter((session) => session.isCurrent),\n };\n});\n\naddActionHandler('loadNotificationExceptions', async (global) => {\n const { serverTimeOffset } = global;\n\n const result = await callApi('fetchNotificationExceptions', { serverTimeOffset });\n if (!result) {\n return undefined;\n }\n\n return addNotifyExceptions(getGlobal(), result);\n});\n\naddActionHandler('loadNotificationSettings', async (global) => {\n const { serverTimeOffset } = global;\n const result = await callApi('fetchNotificationSettings', {\n serverTimeOffset,\n });\n if (!result) {\n return undefined;\n }\n\n return replaceSettings(getGlobal(), result);\n});\n\naddActionHandler('updateNotificationSettings', async (global, actions, payload) => {\n const { peerType, isSilent, shouldShowPreviews } = payload!;\n\n const result = await callApi('updateNotificationSettings', peerType, { isSilent, shouldShowPreviews });\n if (!result) {\n return undefined;\n }\n\n return updateNotifySettings(getGlobal(), peerType, isSilent, shouldShowPreviews);\n});\n\naddActionHandler('updateWebNotificationSettings', (global, actions, payload) => {\n setGlobal(replaceSettings(global, payload));\n\n const { hasPushNotifications, hasWebNotifications } = global.settings.byKey;\n if (hasWebNotifications && hasPushNotifications) {\n void subscribe();\n } else {\n void unsubscribe();\n }\n});\n\naddActionHandler('updateContactSignUpNotification', async (global, actions, payload) => {\n const { isSilent } = payload!;\n\n const result = await callApi('updateContactSignUpNotification', isSilent);\n if (!result) {\n return undefined;\n }\n\n return replaceSettings(getGlobal(), { hasContactJoinedNotifications: !isSilent });\n});\n\naddActionHandler('loadLanguages', async () => {\n const result = await callApi('fetchLanguages');\n if (!result) {\n return undefined;\n }\n\n return replaceSettings(getGlobal(), { languages: result });\n});\n\naddActionHandler('loadPrivacySettings', async (global) => {\n const [\n phoneNumberSettings, lastSeenSettings, profilePhotoSettings, forwardsSettings, chatInviteSettings,\n ] = await Promise.all([\n callApi('fetchPrivacySettings', 'phoneNumber'),\n callApi('fetchPrivacySettings', 'lastSeen'),\n callApi('fetchPrivacySettings', 'profilePhoto'),\n callApi('fetchPrivacySettings', 'forwards'),\n callApi('fetchPrivacySettings', 'chatInvite'),\n ]);\n\n if (\n !phoneNumberSettings || !lastSeenSettings || !profilePhotoSettings || !forwardsSettings || !chatInviteSettings\n ) {\n return undefined;\n }\n\n global = getGlobal();\n\n global.settings.privacy.phoneNumber = phoneNumberSettings;\n global.settings.privacy.lastSeen = lastSeenSettings;\n global.settings.privacy.profilePhoto = profilePhotoSettings;\n global.settings.privacy.forwards = forwardsSettings;\n global.settings.privacy.chatInvite = chatInviteSettings;\n\n return global;\n});\n\naddActionHandler('setPrivacyVisibility', async (global, actions, payload) => {\n const { privacyKey, visibility } = payload!;\n\n const {\n privacy: { [privacyKey as ApiPrivacyKey]: settings },\n } = global.settings;\n\n if (!settings) {\n return undefined;\n }\n\n const rules = buildInputPrivacyRules(global, {\n visibility,\n allowedIds: [...settings.allowUserIds, ...settings.allowChatIds],\n deniedIds: [...settings.blockUserIds, ...settings.blockChatIds],\n });\n\n const result = await callApi('setPrivacySettings', privacyKey, rules);\n if (!result) {\n return undefined;\n }\n\n global = getGlobal();\n\n return {\n ...global,\n settings: {\n ...global.settings,\n privacy: {\n ...global.settings.privacy,\n [privacyKey]: result,\n },\n },\n };\n});\n\naddActionHandler('setPrivacySettings', async (global, actions, payload) => {\n const { privacyKey, isAllowList, contactsIds } = payload!;\n const {\n privacy: { [privacyKey as ApiPrivacyKey]: settings },\n } = global.settings;\n\n if (!settings) {\n return undefined;\n }\n\n const rules = buildInputPrivacyRules(global, {\n visibility: settings.visibility,\n allowedIds: isAllowList ? contactsIds : [...settings.allowUserIds, ...settings.allowChatIds],\n deniedIds: !isAllowList ? contactsIds : [...settings.blockUserIds, ...settings.blockChatIds],\n });\n\n const result = await callApi('setPrivacySettings', privacyKey, rules);\n if (!result) {\n return undefined;\n }\n\n global = getGlobal();\n\n return {\n ...global,\n settings: {\n ...global.settings,\n privacy: {\n ...global.settings.privacy,\n [privacyKey]: result,\n },\n },\n };\n});\n\nfunction buildInputPrivacyRules(global: GlobalState, {\n visibility,\n allowedIds,\n deniedIds,\n}: {\n visibility: PrivacyVisibility;\n allowedIds: string[];\n deniedIds: string[];\n}): InputPrivacyRules {\n const {\n users: { byId: usersById },\n chats: { byId: chatsById },\n } = global;\n\n const rules: InputPrivacyRules = {\n visibility,\n };\n let users: InputPrivacyContact[];\n let chats: InputPrivacyContact[];\n\n const collectUsers = (userId: string) => {\n if (!isUserId(userId)) {\n return undefined;\n }\n const { id, accessHash } = usersById[userId] || {};\n if (!id) {\n return undefined;\n }\n\n return { id, accessHash };\n };\n\n const collectChats = (userId: string) => {\n if (isUserId(userId)) {\n return undefined;\n }\n const chat = chatsById[userId];\n\n return chat ? { id: chat.id } : undefined;\n };\n\n if (visibility === 'contacts' || visibility === 'nobody') {\n users = allowedIds.map(collectUsers).filter(Boolean) as InputPrivacyContact[];\n chats = allowedIds.map(collectChats).filter(Boolean) as InputPrivacyContact[];\n\n if (users.length > 0) {\n rules.allowedUsers = users;\n }\n if (chats.length > 0) {\n rules.allowedChats = chats;\n }\n }\n\n if (visibility === 'everybody' || visibility === 'contacts') {\n users = deniedIds.map(collectUsers).filter(Boolean) as InputPrivacyContact[];\n chats = deniedIds.map(collectChats).filter(Boolean) as InputPrivacyContact[];\n\n if (users.length > 0) {\n rules.blockedUsers = users;\n }\n if (chats.length > 0) {\n rules.blockedChats = chats;\n }\n }\n\n return rules;\n}\n\naddActionHandler('updateIsOnline', (global, actions, payload) => {\n callApi('updateIsOnline', payload);\n});\n\naddActionHandler('loadContentSettings', async () => {\n const result = await callApi('fetchContentSettings');\n if (!result) return undefined;\n\n return replaceSettings(getGlobal(), result);\n});\n\naddActionHandler('updateContentSettings', async (global, actions, payload) => {\n setGlobal(replaceSettings(getGlobal(), { isSensitiveEnabled: payload }));\n\n const result = await callApi('updateContentSettings', payload);\n if (!result) {\n return replaceSettings(getGlobal(), { isSensitiveEnabled: !payload });\n }\n\n return undefined;\n});\n\naddActionHandler('loadCountryList', async (global, actions, payload = {}) => {\n let { langCode } = payload;\n if (!langCode) langCode = global.settings.byKey.language;\n\n const countryList = await callApi('fetchCountryList', { langCode });\n if (!countryList) return undefined;\n\n return {\n ...getGlobal(),\n countryList,\n };\n});\n\naddActionHandler('ensureTimeFormat', async (global, actions) => {\n if (global.authNearestCountry) {\n const timeFormat = COUNTRIES_WITH_12H_TIME_FORMAT.has(global.authNearestCountry.toUpperCase()) ? '12h' : '24h';\n actions.setSettingOption({ timeFormat });\n setTimeFormat(timeFormat);\n }\n\n if (global.settings.byKey.wasTimeFormatSetManually) {\n return;\n }\n\n const nearestCountryCode = await callApi('fetchNearestCountry');\n if (nearestCountryCode) {\n const timeFormat = COUNTRIES_WITH_12H_TIME_FORMAT.has(nearestCountryCode.toUpperCase()) ? '12h' : '24h';\n actions.setSettingOption({ timeFormat });\n setTimeFormat(timeFormat);\n }\n});\n\naddActionHandler('loadAppConfig', async () => {\n const appConfig = await callApi('fetchAppConfig');\n if (!appConfig) return undefined;\n\n return {\n ...getGlobal(),\n appConfig,\n };\n});\n","import {\n addActionHandler, getActions, getGlobal, setGlobal,\n} from '../../index';\n\nimport { GlobalState } from '../../types';\n\nimport {\n ApiUpdateAuthorizationState,\n ApiUpdateAuthorizationError,\n ApiUpdateConnectionState,\n ApiUpdateSession,\n ApiUpdateCurrentUser, ApiUpdateServerTimeOffset,\n} from '../../../api/types';\nimport { DEBUG, SESSION_USER_KEY } from '../../../config';\nimport { subscribe } from '../../../util/notifications';\nimport { updateUser } from '../../reducers';\nimport { setLanguage } from '../../../util/langProvider';\nimport { selectNotifySettings } from '../../selectors';\nimport { forceWebsync } from '../../../util/websync';\nimport { getShippingError } from '../../../util/getReadableErrorText';\n\naddActionHandler('apiUpdate', (global, actions, update) => {\n if (DEBUG) {\n if (update['@type'] !== 'updateUserStatus' && update['@type'] !== 'updateServerTimeOffset') {\n // eslint-disable-next-line no-console\n console.log('[GramJs] UPDATE', update['@type'], { update });\n }\n }\n\n switch (update['@type']) {\n case 'updateApiReady':\n onUpdateApiReady(global);\n break;\n\n case 'updateAuthorizationState':\n onUpdateAuthorizationState(update);\n break;\n\n case 'updateAuthorizationError':\n onUpdateAuthorizationError(update);\n break;\n\n case 'updateConnectionState':\n onUpdateConnectionState(update);\n break;\n\n case 'updateSession':\n onUpdateSession(update);\n break;\n\n case 'updateServerTimeOffset':\n onUpdateServerTimeOffset(update);\n break;\n\n case 'updateCurrentUser':\n onUpdateCurrentUser(update);\n break;\n\n case 'error': {\n if (update.error.message === 'SESSION_REVOKED') {\n actions.signOut();\n }\n\n const paymentShippingError = getShippingError(update.error);\n if (paymentShippingError) {\n actions.addPaymentError({ error: paymentShippingError });\n } else if (actions.showDialog) {\n actions.showDialog({ data: update.error });\n }\n\n break;\n }\n }\n});\n\nfunction onUpdateApiReady(global: GlobalState) {\n const { hasWebNotifications, hasPushNotifications } = selectNotifySettings(global);\n if (hasWebNotifications && hasPushNotifications) {\n void subscribe();\n }\n void setLanguage(global.settings.byKey.language);\n}\n\nfunction onUpdateAuthorizationState(update: ApiUpdateAuthorizationState) {\n let global = getGlobal();\n\n const wasAuthReady = global.authState === 'authorizationStateReady';\n const authState = update.authorizationState;\n\n setGlobal({\n ...global,\n authState,\n authIsLoading: false,\n });\n\n global = getGlobal();\n\n switch (authState) {\n case 'authorizationStateLoggingOut':\n void forceWebsync(false);\n\n setGlobal({\n ...global,\n isLoggingOut: true,\n });\n break;\n case 'authorizationStateWaitCode':\n setGlobal({\n ...global,\n authIsCodeViaApp: update.isCodeViaApp,\n });\n break;\n case 'authorizationStateWaitPassword':\n setGlobal({\n ...global,\n authHint: update.hint,\n });\n break;\n case 'authorizationStateWaitQrCode':\n setGlobal({\n ...global,\n authIsLoadingQrCode: false,\n authQrCode: update.qrCode,\n });\n break;\n case 'authorizationStateReady': {\n if (wasAuthReady) {\n break;\n }\n\n void forceWebsync(true);\n\n setGlobal({\n ...global,\n isLoggingOut: false,\n });\n\n break;\n }\n }\n}\n\nfunction onUpdateAuthorizationError(update: ApiUpdateAuthorizationError) {\n setGlobal({\n ...getGlobal(),\n authError: update.message,\n });\n}\n\nfunction onUpdateConnectionState(update: ApiUpdateConnectionState) {\n const { connectionState } = update;\n const global = getGlobal();\n\n if (connectionState === global.connectionState) {\n return;\n }\n\n setGlobal({\n ...global,\n connectionState,\n });\n\n if (connectionState === 'connectionStateBroken') {\n // When mounting Auth `initApi` will be called from an effect. Otherwise, we force it here.\n const isOnAuth = !global.authState || [\n 'authorizationStateWaitPhoneNumber',\n 'authorizationStateWaitCode',\n 'authorizationStateWaitPassword',\n 'authorizationStateWaitRegistration',\n 'authorizationStateWaitQrCode',\n ].includes(global.authState);\n\n getActions().signOut({ forceInitApi: isOnAuth });\n }\n}\n\nfunction onUpdateSession(update: ApiUpdateSession) {\n const { sessionData } = update;\n const { authRememberMe, authState } = getGlobal();\n const isEmpty = !sessionData || !sessionData.mainDcId;\n\n if (!authRememberMe || authState !== 'authorizationStateReady' || isEmpty) {\n return;\n }\n\n getActions().saveSession({ sessionData });\n}\n\nfunction onUpdateServerTimeOffset(update: ApiUpdateServerTimeOffset) {\n const global = getGlobal();\n\n if (global.serverTimeOffset === update.serverTimeOffset) {\n return;\n }\n\n setGlobal({\n ...global,\n serverTimeOffset: update.serverTimeOffset,\n });\n}\n\nfunction onUpdateCurrentUser(update: ApiUpdateCurrentUser) {\n const { currentUser } = update;\n\n setGlobal({\n ...updateUser(getGlobal(), currentUser.id, currentUser),\n currentUserId: currentUser.id,\n });\n\n updateSessionUserId(currentUser.id);\n}\n\nfunction updateSessionUserId(currentUserId: string) {\n const sessionUserAuth = localStorage.getItem(SESSION_USER_KEY);\n if (!sessionUserAuth) return;\n\n const userAuth = JSON.parse(sessionUserAuth);\n userAuth.id = currentUserId;\n\n localStorage.setItem(SESSION_USER_KEY, JSON.stringify(userAuth));\n}\n","import { addActionHandler, getGlobal, setGlobal } from '../../index';\n\nimport { ANIMATION_LEVEL_MAX } from '../../../config';\nimport {\n IS_ANDROID, IS_IOS, IS_MAC_OS, IS_SAFARI, IS_TOUCH_ENV,\n} from '../../../util/environment';\nimport { setLanguage } from '../../../util/langProvider';\nimport switchTheme from '../../../util/switchTheme';\nimport { selectTheme } from '../../selectors';\nimport { startWebsync } from '../../../util/websync';\nimport { ensurePermanentWebVersion } from '../../../util/permanentWebVersion';\n\nconst HISTORY_ANIMATION_DURATION = 450;\n\nsubscribeToSystemThemeChange();\n\naddActionHandler('init', (global) => {\n const { animationLevel, messageTextSize, language } = global.settings.byKey;\n const theme = selectTheme(global);\n\n void setLanguage(language, undefined, true);\n\n document.documentElement.style.setProperty(\n '--composer-text-size', `${Math.max(messageTextSize, IS_IOS ? 16 : 15)}px`,\n );\n document.documentElement.style.setProperty('--message-meta-height', `${Math.floor(messageTextSize * 1.3125)}px`);\n document.documentElement.style.setProperty('--message-text-size', `${messageTextSize}px`);\n document.documentElement.setAttribute('data-message-text-size', messageTextSize.toString());\n document.body.classList.add('initial');\n document.body.classList.add(`animation-level-${animationLevel}`);\n document.body.classList.add(IS_TOUCH_ENV ? 'is-touch-env' : 'is-pointer-env');\n\n switchTheme(theme, animationLevel === ANIMATION_LEVEL_MAX);\n\n ensurePermanentWebVersion();\n startWebsync();\n\n if (IS_IOS) {\n document.body.classList.add('is-ios');\n } else if (IS_ANDROID) {\n document.body.classList.add('is-android');\n } else if (IS_MAC_OS) {\n document.body.classList.add('is-macos');\n }\n if (IS_SAFARI) {\n document.body.classList.add('is-safari');\n }\n});\n\naddActionHandler('setIsUiReady', (global, actions, payload) => {\n const { uiReadyState } = payload!;\n\n if (uiReadyState === 2) {\n document.body.classList.remove('initial');\n }\n\n return {\n ...global,\n uiReadyState,\n };\n});\n\naddActionHandler('setAuthPhoneNumber', (global, actions, payload) => {\n const { phoneNumber } = payload!;\n\n return {\n ...global,\n authPhoneNumber: phoneNumber,\n };\n});\n\naddActionHandler('setAuthRememberMe', (global, actions, payload) => {\n return {\n ...global,\n authRememberMe: Boolean(payload),\n };\n});\n\naddActionHandler('clearAuthError', (global) => {\n return {\n ...global,\n authError: undefined,\n };\n});\n\naddActionHandler('disableHistoryAnimations', () => {\n setTimeout(() => {\n setGlobal({\n ...getGlobal(),\n shouldSkipHistoryAnimations: false,\n });\n document.body.classList.remove('no-animate');\n }, HISTORY_ANIMATION_DURATION);\n\n setGlobal({\n ...getGlobal(),\n shouldSkipHistoryAnimations: true,\n }, { forceSyncOnIOs: true });\n});\n\nfunction subscribeToSystemThemeChange() {\n function handleSystemThemeChange() {\n const currentThemeMatch = document.documentElement.className.match(/theme-(\\w+)/);\n const currentTheme = currentThemeMatch ? currentThemeMatch[1] : 'light';\n const global = getGlobal();\n const nextTheme = selectTheme(global);\n const { animationLevel } = global.settings.byKey;\n\n if (nextTheme !== currentTheme) {\n switchTheme(nextTheme, animationLevel === ANIMATION_LEVEL_MAX);\n // Force-update component containers\n setGlobal({ ...global });\n }\n }\n\n const mql = window.matchMedia('(prefers-color-scheme: dark)');\n if (typeof mql.addEventListener === 'function') {\n mql.addEventListener('change', handleSystemThemeChange);\n } else if (typeof mql.addListener === 'function') {\n mql.addListener(handleSystemThemeChange);\n }\n}\n","import { addActionHandler } from '../../index';\nimport { ISettings, IThemeSettings, ThemeKey } from '../../../types';\nimport { replaceSettings, replaceThemeSettings } from '../../reducers';\n\naddActionHandler('setSettingOption', (global, actions, payload?: Partial) => {\n return replaceSettings(global, payload);\n});\n\naddActionHandler('setThemeSettings', (global, actions, payload: { theme: ThemeKey } & Partial) => {\n const { theme, ...settings } = payload;\n\n return replaceThemeSettings(global, theme, settings);\n});\n","import {\n ApiChat,\n ApiUser,\n ApiChatBannedRights,\n ApiChatAdminRights,\n ApiChatFolder,\n MAIN_THREAD_ID,\n} from '../../api/types';\n\nimport { NotifyException, NotifySettings } from '../../types';\nimport { LangFn } from '../../hooks/useLang';\n\nimport { ARCHIVED_FOLDER_ID, REPLIES_USER_ID } from '../../config';\nimport { orderBy } from '../../util/iteratees';\nimport { getUserFirstOrLastName } from './users';\nimport { formatDateToString, formatTime } from '../../util/dateFormat';\nimport { prepareSearchWordsForNeedle } from '../../util/searchWords';\n\nconst FOREVER_BANNED_DATE = Date.now() / 1000 + 31622400; // 366 days\n\nconst VERIFIED_PRIORITY_BASE = 3e9;\nconst PINNED_PRIORITY_BASE = 3e8;\n\nexport function isUserId(entityId: string) {\n // Workaround for old-fashioned IDs stored locally\n if (typeof entityId === 'number') {\n return entityId > 0;\n }\n\n return !entityId.startsWith('-');\n}\n\nexport function isChatGroup(chat: ApiChat) {\n return isChatBasicGroup(chat) || isChatSuperGroup(chat);\n}\n\nexport function isChatBasicGroup(chat: ApiChat) {\n return chat.type === 'chatTypeBasicGroup';\n}\n\nexport function isChatSuperGroup(chat: ApiChat) {\n return chat.type === 'chatTypeSuperGroup';\n}\n\nexport function isChatChannel(chat: ApiChat) {\n return chat.type === 'chatTypeChannel';\n}\n\nexport function isCommonBoxChat(chat: ApiChat) {\n return chat.type === 'chatTypePrivate' || chat.type === 'chatTypeBasicGroup';\n}\n\nexport function isChatWithRepliesBot(chatId: string) {\n return chatId === REPLIES_USER_ID;\n}\n\nexport function getChatTypeString(chat: ApiChat) {\n switch (chat.type) {\n case 'chatTypePrivate':\n return 'PrivateChat';\n case 'chatTypeBasicGroup':\n case 'chatTypeSuperGroup':\n return 'AccDescrGroup';\n case 'chatTypeChannel':\n return 'AccDescrChannel';\n default:\n return 'Chat';\n }\n}\n\nexport function getPrivateChatUserId(chat: ApiChat) {\n if (chat.type !== 'chatTypePrivate' && chat.type !== 'chatTypeSecret') {\n return undefined;\n }\n return chat.id;\n}\n\n// TODO Get rid of `user`\nexport function getChatTitle(lang: LangFn, chat: ApiChat, user?: ApiUser, isSelf = false) {\n if (isSelf || (user && chat.id === user.id && user.isSelf)) {\n return lang('SavedMessages');\n }\n return chat.title || lang('HiddenName');\n}\n\nexport function getChatDescription(chat: ApiChat) {\n if (!chat.fullInfo) {\n return undefined;\n }\n return chat.fullInfo.about;\n}\n\nexport function getChatLink(chat: ApiChat) {\n const { username } = chat;\n if (username) {\n return `https://t.me/${username}`;\n }\n\n const { inviteLink } = chat.fullInfo || {};\n\n return inviteLink;\n}\n\nexport function getChatAvatarHash(\n owner: ApiChat | ApiUser,\n size: 'normal' | 'big' = 'normal',\n) {\n if (!owner.avatarHash) {\n return undefined;\n }\n\n switch (size) {\n case 'big':\n return `profile${owner.id}?${owner.avatarHash}`;\n default:\n return `avatar${owner.id}?${owner.avatarHash}`;\n }\n}\n\nexport function isChatSummaryOnly(chat: ApiChat) {\n return !chat.lastMessage;\n}\n\nexport function isChatAdmin(chat: ApiChat) {\n return Boolean(chat.adminRights);\n}\n\nexport function getHasAdminRight(chat: ApiChat, key: keyof ApiChatAdminRights) {\n return chat.adminRights ? chat.adminRights[key] : false;\n}\n\nexport function isUserRightBanned(chat: ApiChat, key: keyof ApiChatBannedRights) {\n return Boolean(\n (chat.currentUserBannedRights?.[key])\n || (chat.defaultBannedRights?.[key]),\n );\n}\n\nexport function getCanPostInChat(chat: ApiChat, threadId: number) {\n if (threadId !== MAIN_THREAD_ID) {\n return true;\n }\n\n if (chat.isRestricted || chat.isForbidden || chat.migratedTo || chat.isNotJoined || isChatWithRepliesBot(chat.id)) {\n return false;\n }\n\n if (chat.isCreator) {\n return true;\n }\n\n if (isUserId(chat.id)) {\n return true;\n }\n\n if (isChatChannel(chat)) {\n return getHasAdminRight(chat, 'postMessages');\n }\n\n return isChatAdmin(chat) || !isUserRightBanned(chat, 'sendMessages');\n}\n\nexport interface IAllowedAttachmentOptions {\n canAttachMedia: boolean;\n canAttachPolls: boolean;\n canSendStickers: boolean;\n canSendGifs: boolean;\n canAttachEmbedLinks: boolean;\n}\n\nexport function getAllowedAttachmentOptions(chat?: ApiChat, isChatWithBot = false): IAllowedAttachmentOptions {\n if (!chat) {\n return {\n canAttachMedia: false,\n canAttachPolls: false,\n canSendStickers: false,\n canSendGifs: false,\n canAttachEmbedLinks: false,\n };\n }\n\n const isAdmin = isChatAdmin(chat);\n\n return {\n canAttachMedia: isAdmin || !isUserRightBanned(chat, 'sendMedia'),\n canAttachPolls: (isAdmin || !isUserRightBanned(chat, 'sendPolls')) && (!isUserId(chat.id) || isChatWithBot),\n canSendStickers: isAdmin || !isUserRightBanned(chat, 'sendStickers'),\n canSendGifs: isAdmin || !isUserRightBanned(chat, 'sendGifs'),\n canAttachEmbedLinks: isAdmin || !isUserRightBanned(chat, 'embedLinks'),\n };\n}\n\nexport function getMessageSendingRestrictionReason(\n lang: LangFn,\n currentUserBannedRights?: ApiChatBannedRights,\n defaultBannedRights?: ApiChatBannedRights,\n) {\n if (currentUserBannedRights?.sendMessages) {\n const { untilDate } = currentUserBannedRights;\n return untilDate && untilDate < FOREVER_BANNED_DATE\n ? lang(\n 'Channel.Persmission.Denied.SendMessages.Until',\n lang(\n 'formatDateAtTime',\n [formatDateToString(new Date(untilDate * 1000), lang.code), formatTime(lang, untilDate * 1000)],\n ),\n )\n : lang('Channel.Persmission.Denied.SendMessages.Forever');\n }\n\n if (defaultBannedRights?.sendMessages) {\n return lang('Channel.Persmission.Denied.SendMessages.DefaultRestrictedText');\n }\n\n return undefined;\n}\n\nexport function getChatSlowModeOptions(chat?: ApiChat) {\n if (!chat || !chat.fullInfo) {\n return undefined;\n }\n\n return chat.fullInfo.slowMode;\n}\n\nexport function getChatOrder(chat: ApiChat) {\n return Math.max(chat.joinDate || 0, chat.draftDate || 0, chat.lastMessage?.date || 0);\n}\n\nexport function isChatArchived(chat: ApiChat) {\n return chat.folderId === ARCHIVED_FOLDER_ID;\n}\n\nexport function selectIsChatMuted(\n chat: ApiChat, notifySettings: NotifySettings, notifyExceptions: Record = {},\n) {\n // If this chat is in exceptions they take precedence\n if (notifyExceptions[chat.id] && notifyExceptions[chat.id].isMuted !== undefined) {\n return notifyExceptions[chat.id].isMuted;\n }\n\n return (\n chat.isMuted\n || (isUserId(chat.id) && !notifySettings.hasPrivateChatsNotifications)\n || (isChatChannel(chat) && !notifySettings.hasBroadcastNotifications)\n || (isChatGroup(chat) && !notifySettings.hasGroupNotifications)\n );\n}\n\nexport function selectShouldShowMessagePreview(\n chat: ApiChat, notifySettings: NotifySettings, notifyExceptions: Record = {},\n) {\n const {\n hasPrivateChatsMessagePreview = true,\n hasBroadcastMessagePreview = true,\n hasGroupMessagePreview = true,\n } = notifySettings;\n // If this chat is in exceptions they take precedence\n if (notifyExceptions[chat.id] && notifyExceptions[chat.id].shouldShowPreviews !== undefined) {\n return notifyExceptions[chat.id].shouldShowPreviews;\n }\n\n return (isUserId(chat.id) && hasPrivateChatsMessagePreview)\n || (isChatChannel(chat) && hasBroadcastMessagePreview)\n || (isChatGroup(chat) && hasGroupMessagePreview);\n}\n\nexport function getCanDeleteChat(chat: ApiChat) {\n return isChatBasicGroup(chat) || ((isChatSuperGroup(chat) || isChatChannel(chat)) && chat.isCreator);\n}\n\nexport function getFolderDescriptionText(lang: LangFn, folder: ApiChatFolder, chatsCount?: number) {\n const {\n id, title, emoticon, description, pinnedChatIds,\n excludedChatIds, includedChatIds,\n excludeArchived, excludeMuted, excludeRead,\n ...filters\n } = folder;\n\n // If folder has multiple additive filters or uses include/exclude lists,\n // we display folder chats count\n if (\n chatsCount !== undefined && (\n Object.values(filters).filter(Boolean).length > 1\n || (excludedChatIds?.length)\n || (includedChatIds?.length)\n )) {\n return lang('Chats', chatsCount);\n }\n\n // Otherwise, we return a short description of a single filter\n if (filters.bots) {\n return lang('FilterBots');\n } else if (filters.groups) {\n return lang('FilterGroups');\n } else if (filters.channels) {\n return lang('FilterChannels');\n } else if (filters.contacts) {\n return lang('FilterContacts');\n } else if (filters.nonContacts) {\n return lang('FilterNonContacts');\n } else {\n return undefined;\n }\n}\n\nexport function getMessageSenderName(lang: LangFn, chatId: string, sender?: ApiUser) {\n if (!sender || isUserId(chatId)) {\n return undefined;\n }\n\n if (sender.isSelf) {\n return lang('FromYou');\n }\n\n return getUserFirstOrLastName(sender);\n}\n\nexport function sortChatIds(\n chatIds: string[],\n chatsById: Record,\n shouldPrioritizeVerified = false,\n priorityIds?: string[],\n) {\n return orderBy(chatIds, (id) => {\n const chat = chatsById[id];\n if (!chat) {\n return 0;\n }\n\n let priority = 0;\n\n if (chat.lastMessage) {\n priority += chat.lastMessage.date;\n }\n\n if (shouldPrioritizeVerified && chat.isVerified) {\n priority += VERIFIED_PRIORITY_BASE; // ~100 years in seconds\n }\n\n if (priorityIds && priorityIds.includes(id)) {\n priority = Date.now() + PINNED_PRIORITY_BASE + (priorityIds.length - priorityIds.indexOf(id));\n }\n\n return priority;\n }, 'desc');\n}\n\nexport function filterChatsByName(\n lang: LangFn,\n chatIds: string[],\n chatsById: Record,\n query?: string,\n currentUserId?: string,\n) {\n if (!query) {\n return chatIds;\n }\n\n const searchWords = prepareSearchWordsForNeedle(query);\n\n return chatIds.filter((id) => {\n const chat = chatsById[id];\n if (!chat) {\n return false;\n }\n\n return searchWords(getChatTitle(lang, chat, undefined, id === currentUserId));\n });\n}\n","import {\n ApiChat, ApiMessage, ApiMessageEntityTypes, ApiReactions, ApiUser,\n} from '../../api/types';\nimport { LangFn } from '../../hooks/useLang';\n\nimport {\n CONTENT_NOT_SUPPORTED,\n LOCAL_MESSAGE_ID_BASE,\n RE_LINK_TEMPLATE,\n SERVICE_NOTIFICATIONS_USER_ID,\n} from '../../config';\nimport { getUserFullName } from './users';\nimport { IS_OPUS_SUPPORTED, isWebpSupported } from '../../util/environment';\nimport { getChatTitle, isUserId } from './chats';\nimport parseEmojiOnlyString from '../../components/common/helpers/parseEmojiOnlyString';\n\nconst RE_LINK = new RegExp(RE_LINK_TEMPLATE, 'i');\n\nexport type MessageKey = `msg${string}-${number}`;\n\nexport function getMessageHtmlId(messageId: number) {\n return `message${messageId.toString().replace('.', '-')}`;\n}\n\nexport function getMessageKey(message: ApiMessage): MessageKey {\n const { chatId, id } = message;\n\n return buildMessageKey(chatId, id);\n}\n\nexport function buildMessageKey(chatId: string, msgId: number): MessageKey {\n return `msg${chatId}-${msgId}`;\n}\n\nexport function parseMessageKey(key: MessageKey) {\n const match = key.match(/^msg(-?\\d+)-(\\d+)/)!;\n\n return { chatId: match[1], messageId: Number(match[2]) };\n}\n\nexport function getMessageOriginalId(message: ApiMessage) {\n return message.previousLocalId || message.id;\n}\n\nexport function getMessageText(message: ApiMessage) {\n const {\n text, sticker, photo, video, audio, voice, document, poll, webPage, contact, invoice, location,\n } = message.content;\n\n if (text) {\n return text.text;\n }\n\n if (sticker || photo || video || audio || voice || document\n || contact || poll || webPage || invoice || location) {\n return undefined;\n }\n\n return CONTENT_NOT_SUPPORTED;\n}\n\nexport function getMessageCustomShape(message: ApiMessage): boolean | number {\n const {\n text, sticker, photo, video, audio, voice, document, poll, webPage, contact,\n } = message.content;\n\n if (sticker || (video?.isRound)) {\n return true;\n }\n\n if (!text || photo || video || audio || voice || document || poll || webPage || contact) {\n return false;\n }\n\n // This is a \"dual-intent\" method used to limit calls of `parseEmojiOnlyString`.\n return parseEmojiOnlyString(text.text) || false;\n}\n\nexport function getMessageSingleEmoji(message: ApiMessage) {\n const { text } = message.content;\n if (!(text && text.text.length <= 6)) {\n return undefined;\n }\n\n if (getMessageCustomShape(message) !== 1) {\n return undefined;\n }\n\n return text.text;\n}\n\nexport function getFirstLinkInMessage(message: ApiMessage) {\n const { text } = message.content;\n\n let match: RegExpMatchArray | null | undefined;\n if (text?.entities) {\n let link = text.entities.find((entity) => entity.type === ApiMessageEntityTypes.TextUrl);\n if (link) {\n match = link.url!.match(RE_LINK);\n }\n\n if (!match) {\n link = text.entities.find((entity) => entity.type === ApiMessageEntityTypes.Url);\n if (link) {\n const { offset, length } = link;\n match = text.text.substring(offset, offset + length).match(RE_LINK);\n }\n }\n }\n\n if (!match && text) {\n match = text.text.match(RE_LINK);\n }\n\n if (!match) {\n return undefined;\n }\n\n return {\n url: match[0],\n domain: match[3],\n };\n}\n\nexport function matchLinkInMessageText(message: ApiMessage) {\n const { text } = message.content;\n const match = text && text.text.match(RE_LINK);\n\n if (!match) {\n return undefined;\n }\n\n return {\n url: match[0],\n domain: match[3],\n };\n}\n\nexport function isOwnMessage(message: ApiMessage) {\n return message.isOutgoing;\n}\n\nexport function isReplyMessage(message: ApiMessage) {\n return Boolean(message.replyToMessageId);\n}\n\nexport function isForwardedMessage(message: ApiMessage) {\n return Boolean(message.forwardInfo);\n}\n\nexport function isActionMessage(message: ApiMessage) {\n return Boolean(message.content.action);\n}\n\nexport function isServiceNotificationMessage(message: ApiMessage) {\n return message.chatId === SERVICE_NOTIFICATIONS_USER_ID && Math.round(message.id) !== message.id;\n}\n\nexport function isAnonymousOwnMessage(message: ApiMessage) {\n return Boolean(message.senderId) && !isUserId(message.senderId!) && isOwnMessage(message);\n}\n\nexport function getSenderTitle(lang: LangFn, sender: ApiUser | ApiChat) {\n return isUserId(sender.id) ? getUserFullName(sender as ApiUser) : getChatTitle(lang, sender as ApiChat);\n}\n\nexport function getSendingState(message: ApiMessage) {\n if (!message.sendingState) {\n return 'succeeded';\n }\n\n return message.sendingState === 'messageSendingStateFailed' ? 'failed' : 'pending';\n}\n\nexport function isMessageLocal(message: ApiMessage) {\n return message.id >= LOCAL_MESSAGE_ID_BASE;\n}\n\nexport function isHistoryClearMessage(message: ApiMessage) {\n return message.content.action && message.content.action.type === 'historyClear';\n}\n\nexport function getMessageContentFilename(message: ApiMessage) {\n const { content } = message;\n\n const video = content.webPage ? content.webPage.video : content.video;\n const photo = content.webPage ? content.webPage.photo : content.photo;\n const document = content.webPage ? content.webPage.document : content.document;\n if (document) {\n return document.fileName;\n }\n\n if (video) {\n return video.fileName;\n }\n\n if (content.sticker) {\n const extension = content.sticker.isLottie ? 'tgs' : content.sticker.isVideo\n ? 'webm' : isWebpSupported() ? 'webp' : 'png';\n return `${content.sticker.id}.${extension}`;\n }\n\n if (content.audio) {\n return content.audio.fileName;\n }\n\n const baseFilename = getMessageKey(message);\n\n if (photo) {\n return `${baseFilename}.jpg`;\n }\n\n if (content.voice) {\n return IS_OPUS_SUPPORTED ? `${baseFilename}.ogg` : `${baseFilename}.wav`;\n }\n\n return baseFilename;\n}\n\nexport function areReactionsEmpty(reactions: ApiReactions) {\n return !reactions.results.some((l) => l.count > 0);\n}\n\nexport function isGeoLiveExpired(message: ApiMessage, timestamp = Date.now() / 1000) {\n const { location } = message.content;\n if (location?.type !== 'geoLive') return false;\n return (timestamp - (message.date || 0) >= location.period);\n}\n","import { ApiMessage, ApiReactions } from '../../api/types';\n\nexport function getMessageRecentReaction(message: Partial) {\n return message.isOutgoing ? message.reactions?.recentReactions?.[0] : undefined;\n}\n\nexport function checkIfReactionAdded(oldReactions?: ApiReactions, newReactions?: ApiReactions, currentUserId?: string) {\n if (!oldReactions || !oldReactions.recentReactions) return true;\n if (!newReactions || !newReactions.recentReactions) return false;\n // Skip reactions from yourself\n if (newReactions.recentReactions.every((reaction) => reaction.userId === currentUserId)) return false;\n const oldReactionsMap = oldReactions.results.reduce>((acc, reaction) => {\n acc[reaction.reaction] = reaction.count;\n return acc;\n }, {});\n return newReactions.results.some((r) => !oldReactionsMap[r.reaction] || oldReactionsMap[r.reaction] < r.count);\n}\n","import { ApiMessage, ApiMessageEntityTypes } from '../../api/types';\nimport type { TextPart } from '../../components/common/helpers/renderTextWithEntities';\nimport { CONTENT_NOT_SUPPORTED } from '../../config';\n\nimport { LangFn } from '../../hooks/useLang';\nimport trimText from '../../util/trimText';\nimport { getMessageText } from './messages';\nimport { getMessageRecentReaction } from './reactions';\n\nconst SPOILER_CHARS = ['⠺', '⠵', '⠞', '⠟'];\nexport const TRUNCATED_SUMMARY_LENGTH = 80;\n\nexport function getMessageSummaryText(\n lang: LangFn,\n message: ApiMessage,\n noEmoji = false,\n truncateLength = TRUNCATED_SUMMARY_LENGTH,\n noReactions = true,\n isExtended = false,\n) {\n const emoji = !noEmoji && getMessageSummaryEmoji(message, noReactions);\n const emojiWithSpace = emoji ? `${emoji} ` : '';\n const text = trimText(getMessageTextWithSpoilers(message), truncateLength);\n const description = getMessageSummaryDescription(lang, message, text, noReactions, isExtended);\n\n return `${emojiWithSpace}${description}`;\n}\n\nexport function getMessageTextWithSpoilers(message: ApiMessage) {\n const text = getMessageText(message);\n if (!text) {\n return undefined;\n }\n\n const { entities } = message.content.text || {};\n if (!entities?.length) {\n return text;\n }\n\n return entities.reduce((accText, {\n type,\n offset,\n length,\n }) => {\n if (type !== ApiMessageEntityTypes.Spoiler) {\n return accText;\n }\n\n const spoiler = generateBrailleSpoiler(length);\n\n return `${accText.substr(0, offset)}${spoiler}${accText.substr(offset + length, accText.length)}`;\n }, text);\n}\n\nexport function getMessageSummaryEmoji(message: ApiMessage, noReactions = true) {\n const {\n photo,\n video,\n audio,\n voice,\n document,\n sticker,\n poll,\n } = message.content;\n\n if (message.groupedId || photo) {\n return '🖼';\n }\n\n if (video) {\n return '📹';\n }\n\n if (sticker) {\n return sticker.emoji;\n }\n\n if (audio) {\n return '🎧';\n }\n\n if (voice) {\n return '🎤';\n }\n\n if (document) {\n return '📎';\n }\n\n if (poll) {\n return '📊';\n }\n\n const reaction = !noReactions && getMessageRecentReaction(message);\n if (reaction) {\n return reaction.reaction;\n }\n\n return undefined;\n}\n\nexport function getMessageSummaryDescription(\n lang: LangFn,\n message: ApiMessage,\n truncatedText?: string | TextPart[],\n noReactions = true,\n isExtended = false,\n) {\n const {\n text,\n photo,\n video,\n audio,\n voice,\n document,\n sticker,\n contact,\n poll,\n invoice,\n location,\n } = message.content;\n\n let summary: string | TextPart[] | undefined;\n\n if (message.groupedId) {\n summary = truncatedText || lang('lng_in_dlg_album');\n }\n\n if (photo) {\n summary = truncatedText || lang('AttachPhoto');\n }\n\n if (video) {\n summary = truncatedText || lang(video.isGif ? 'AttachGif' : 'AttachVideo');\n }\n\n if (sticker) {\n summary = lang('AttachSticker').trim();\n }\n\n if (audio) {\n summary = getMessageAudioCaption(message) || lang('AttachMusic');\n }\n\n if (voice) {\n summary = truncatedText || lang('AttachAudio');\n }\n\n if (document) {\n summary = isExtended ? document.fileName : (truncatedText || document.fileName);\n }\n\n if (contact) {\n summary = lang('AttachContact');\n }\n\n if (poll) {\n summary = poll.summary.question;\n }\n\n if (invoice) {\n summary = `${lang('PaymentInvoice')}: ${invoice.text}`;\n }\n\n if (text) {\n if (isExtended && summary) {\n summary += `\\n${truncatedText}`;\n } else {\n summary = truncatedText;\n }\n }\n\n if (location?.type === 'geo' || location?.type === 'venue') {\n summary = lang('Message.Location');\n }\n\n if (location?.type === 'geoLive') {\n summary = lang('Message.LiveLocation');\n }\n\n const reaction = !noReactions && getMessageRecentReaction(message);\n if (summary && reaction) {\n summary = `to your \"${summary}\"`;\n }\n\n return summary || CONTENT_NOT_SUPPORTED;\n}\n\nexport function generateBrailleSpoiler(length: number) {\n return new Array(length)\n .fill(undefined)\n .map(() => SPOILER_CHARS[Math.floor(Math.random() * SPOILER_CHARS.length)])\n .join('');\n}\n\nfunction getMessageAudioCaption(message: ApiMessage) {\n const {\n audio,\n text,\n } = message.content;\n\n return (audio && [audio.title, audio.performer].filter(Boolean)\n .join(' — ')) || (text?.text);\n}\n","import {\n ApiAudio, ApiMediaFormat, ApiMessage, ApiMessageSearchType, ApiPhoto, ApiVideo, ApiDimensions, ApiLocation,\n} from '../../api/types';\n\nimport { IS_OPUS_SUPPORTED, IS_PROGRESSIVE_SUPPORTED, IS_SAFARI } from '../../util/environment';\nimport { getMessageKey, isMessageLocal, matchLinkInMessageText } from './messages';\nimport { getDocumentHasPreview } from '../../components/common/helpers/documentInfo';\n\ntype Target =\n 'micro'\n | 'pictogram'\n | 'inline'\n | 'viewerPreview'\n | 'viewerFull'\n | 'download';\n\nexport function getMessageContent(message: ApiMessage) {\n return message.content;\n}\n\nexport function hasMessageMedia(message: ApiMessage) {\n return Boolean((\n getMessagePhoto(message)\n || getMessageVideo(message)\n || getMessageDocument(message)\n || getMessageSticker(message)\n || getMessageContact(message)\n || getMessagePoll(message)\n || getMessageAction(message)\n || getMessageAudio(message)\n || getMessageVoice(message)\n ));\n}\n\nexport function getMessagePhoto(message: ApiMessage) {\n return message.content.photo;\n}\n\nexport function getMessageVideo(message: ApiMessage) {\n return message.content.video;\n}\n\nexport function getMessageRoundVideo(message: ApiMessage) {\n const { video } = message.content;\n\n return video?.isRound ? video : undefined;\n}\n\nexport function getMessageAction(message: ApiMessage) {\n return message.content.action;\n}\n\nexport function getMessageAudio(message: ApiMessage) {\n return message.content.audio;\n}\n\nexport function getMessageVoice(message: ApiMessage) {\n return message.content.voice;\n}\n\nexport function getMessageSticker(message: ApiMessage) {\n return message.content.sticker;\n}\n\nexport function getMessageDocument(message: ApiMessage) {\n return message.content.document;\n}\n\nexport function isMessageDocumentPhoto(message: ApiMessage) {\n const document = getMessageDocument(message);\n return document ? document.mediaType === 'photo' : undefined;\n}\n\nexport function isMessageDocumentVideo(message: ApiMessage) {\n const document = getMessageDocument(message);\n return document ? document.mediaType === 'video' : undefined;\n}\n\nexport function getMessageContact(message: ApiMessage) {\n return message.content.contact;\n}\n\nexport function getMessagePoll(message: ApiMessage) {\n return message.content.poll;\n}\n\nexport function getMessageInvoice(message: ApiMessage) {\n return message.content.invoice;\n}\n\nexport function getMessageLocation(message: ApiMessage) {\n return message.content.location;\n}\n\nexport function getMessageWebPage(message: ApiMessage) {\n return message.content.webPage;\n}\n\nexport function getMessageWebPagePhoto(message: ApiMessage) {\n return getMessageWebPage(message)?.photo;\n}\n\nexport function getMessageWebPageDocument(message: ApiMessage) {\n return getMessageWebPage(message)?.document;\n}\n\nexport function getMessageWebPageVideo(message: ApiMessage): ApiVideo | undefined {\n return getMessageWebPage(message)?.video;\n}\n\nexport function getMessageMediaThumbnail(message: ApiMessage) {\n const media = getMessagePhoto(message)\n || getMessageVideo(message)\n || getMessageDocument(message)\n || getMessageSticker(message)\n || getMessageWebPagePhoto(message)\n || getMessageWebPageVideo(message);\n\n if (!media) {\n return undefined;\n }\n\n return media.thumbnail;\n}\n\nexport function getMessageMediaThumbDataUri(message: ApiMessage) {\n return getMessageMediaThumbnail(message)?.dataUri;\n}\n\nexport function buildStaticMapHash(\n geo: ApiLocation['geo'],\n width: number,\n height: number,\n zoom: number,\n scale: number,\n) {\n const {\n long, lat, accessHash, accuracyRadius,\n } = geo;\n\n // eslint-disable-next-line max-len\n return `staticMap:${accessHash}?lat=${lat}&long=${long}&w=${width}&h=${height}&zoom=${zoom}&scale=${scale}&accuracyRadius=${accuracyRadius}`;\n}\n\nexport function getMessageMediaHash(\n message: ApiMessage,\n target: Target,\n) {\n const {\n photo, video, sticker, audio, voice, document,\n } = message.content;\n const webPagePhoto = getMessageWebPagePhoto(message);\n const webPageVideo = getMessageWebPageVideo(message);\n\n const messageVideo = video || webPageVideo;\n const messagePhoto = photo || webPagePhoto;\n\n const content = messagePhoto || messageVideo || sticker || audio || voice || document;\n\n if (!content) {\n return undefined;\n }\n\n const mediaId = content.id;\n const base = `${getMessageKey(message)}${mediaId ? `:${mediaId}` : ''}`;\n\n if (messageVideo) {\n switch (target) {\n case 'micro':\n case 'pictogram':\n return `${base}?size=m`;\n case 'inline':\n return !hasMessageLocalBlobUrl(message) ? getVideoOrAudioBaseHash(messageVideo, base) : undefined;\n case 'viewerPreview':\n return `${base}?size=m`;\n case 'viewerFull':\n return getVideoOrAudioBaseHash(messageVideo, base);\n case 'download':\n return `${base}?download`;\n }\n }\n\n if (messagePhoto) {\n switch (target) {\n case 'micro':\n case 'pictogram':\n return `${base}?size=m`;\n case 'inline':\n return !hasMessageLocalBlobUrl(message) ? `${base}?size=x` : undefined;\n case 'viewerPreview':\n return `${base}?size=x`;\n case 'viewerFull':\n case 'download':\n return `${base}?size=z`;\n }\n }\n\n if (document) {\n switch (target) {\n case 'micro':\n case 'pictogram':\n case 'inline':\n case 'viewerPreview':\n if (!getDocumentHasPreview(document) || hasMessageLocalBlobUrl(message)) {\n return undefined;\n }\n\n return `${base}?size=m`;\n case 'viewerFull':\n case 'download':\n return base;\n }\n }\n\n if (sticker) {\n switch (target) {\n case 'micro':\n return undefined;\n case 'pictogram':\n return `${base}?size=m`;\n case 'inline':\n return base;\n case 'download':\n return `${base}?download`;\n }\n }\n\n if (audio) {\n switch (target) {\n case 'micro':\n case 'pictogram':\n return getAudioHasCover(audio) ? `${base}?size=m` : undefined;\n case 'inline':\n return getVideoOrAudioBaseHash(audio, base);\n case 'download':\n return `${base}?download`;\n }\n }\n\n if (voice) {\n switch (target) {\n case 'micro':\n case 'pictogram':\n return undefined;\n case 'inline':\n return base;\n case 'download':\n return `${base}?download`;\n }\n }\n\n return undefined;\n}\n\nfunction getVideoOrAudioBaseHash(media: ApiAudio | ApiVideo, base: string) {\n if (IS_PROGRESSIVE_SUPPORTED && IS_SAFARI) {\n return `${base}?fileSize=${media.size}&mimeType=${media.mimeType}`;\n }\n\n return base;\n}\n\nexport function getAudioHasCover(media: ApiAudio) {\n return media.thumbnailSizes && media.thumbnailSizes.length > 0;\n}\n\nexport function getMessageMediaFormat(\n message: ApiMessage, target: Target,\n): ApiMediaFormat {\n const {\n sticker, video, audio, voice,\n } = message.content;\n\n const fullVideo = video || getMessageWebPageVideo(message);\n\n if (sticker && target === 'inline' && sticker.isLottie) {\n return ApiMediaFormat.Lottie;\n } else if (fullVideo && IS_PROGRESSIVE_SUPPORTED && (\n target === 'viewerFull' || target === 'inline'\n )) {\n return ApiMediaFormat.Progressive;\n } else if (audio || voice) {\n // Safari\n if (voice && !IS_OPUS_SUPPORTED) {\n return ApiMediaFormat.BlobUrl;\n }\n\n return ApiMediaFormat.Progressive;\n }\n\n return ApiMediaFormat.BlobUrl;\n}\n\nexport function getMessageFileName(message: ApiMessage) {\n const {\n photo, video, document,\n } = message.content;\n const webPagePhoto = getMessageWebPagePhoto(message);\n const webPageVideo = getMessageWebPageVideo(message);\n\n if (photo || webPagePhoto) {\n return `photo${message.date}.jpeg`;\n }\n\n const { fileName } = video || webPageVideo || document || {};\n\n return fileName;\n}\n\nexport function getMessageFileSize(message: ApiMessage) {\n const { video, document } = message.content;\n const webPageVideo = getMessageWebPageVideo(message);\n const { size } = video || webPageVideo || document || {};\n\n return size;\n}\n\nexport function hasMessageLocalBlobUrl(message: ApiMessage) {\n const { photo, video, document } = message.content;\n\n return (photo?.blobUrl) || (video?.blobUrl) || (document?.previewBlobUrl);\n}\n\nexport function getChatMediaMessageIds(\n messages: Record, listedIds: number[], isFromSharedMedia = false,\n) {\n return getMessageContentIds(messages, listedIds, isFromSharedMedia ? 'media' : 'inlineMedia');\n}\n\nexport function getPhotoFullDimensions(photo: ApiPhoto): ApiDimensions | undefined {\n return (\n photo.sizes.find((size) => size.type === 'z')\n || photo.sizes.find((size) => size.type === 'y')\n || getPhotoInlineDimensions(photo)\n );\n}\n\nexport function getPhotoInlineDimensions(photo: ApiPhoto): ApiDimensions | undefined {\n return (\n photo.sizes.find((size) => size.type === 'x')\n || photo.sizes.find((size) => size.type === 'm')\n || photo.sizes.find((size) => size.type === 's')\n || photo.thumbnail\n );\n}\n\nexport function getVideoDimensions(video: ApiVideo): ApiDimensions | undefined {\n if (video.width && video.height) {\n return video as ApiDimensions;\n }\n\n return undefined;\n}\n\nexport function getMediaTransferState(message: ApiMessage, progress?: number, isLoadNeeded = false) {\n const isUploading = isMessageLocal(message);\n const isTransferring = isUploading || isLoadNeeded;\n const transferProgress = Number(progress);\n\n return {\n isUploading, isTransferring, transferProgress,\n };\n}\n\nexport function getMessageContentIds(\n messages: Record, messageIds: number[], contentType: ApiMessageSearchType | 'inlineMedia',\n) {\n let validator: Function;\n\n switch (contentType) {\n case 'media':\n validator = (message: ApiMessage) => {\n const video = getMessageVideo(message);\n return getMessagePhoto(message) || (video && !video.isRound && !video.isGif);\n };\n break;\n\n case 'documents':\n validator = getMessageDocument;\n break;\n\n case 'links':\n validator = (message: ApiMessage) => getMessageWebPage(message) || matchLinkInMessageText(message);\n break;\n\n case 'audio':\n validator = getMessageAudio;\n break;\n\n case 'voice':\n validator = (message: ApiMessage) => {\n const video = getMessageVideo(message);\n return getMessageVoice(message) || (video && video.isRound);\n };\n break;\n\n case 'inlineMedia':\n validator = (message: ApiMessage) => {\n const video = getMessageVideo(message);\n return (\n getMessagePhoto(message)\n || (video && !video.isRound && !video.isGif)\n || isMessageDocumentPhoto(message)\n || isMessageDocumentVideo(message)\n );\n };\n break;\n\n default:\n return [] as Array;\n }\n\n return messageIds.reduce((result, messageId) => {\n if (messages[messageId] && validator(messages[messageId])) {\n result.push(messageId);\n }\n\n return result;\n }, [] as Array);\n}\n\nexport function getMediaDuration(message: ApiMessage) {\n const { audio, voice, video } = getMessageContent(message);\n const media = audio || voice || video || getMessageWebPageVideo(message);\n if (!media) {\n return undefined;\n }\n\n return media.duration;\n}\n","export function buildChatThreadKey(chatId: string, threadId: number) {\n return `${chatId}_${threadId}`;\n}\n","import { ApiFieldError } from '../../api/types';\n\nconst STRIPE_ERRORS: Record = {\n missing_payment_information: {\n field: 'cardNumber',\n message: 'Incorrect card number',\n },\n invalid_number: {\n field: 'cardNumber',\n message: 'Incorrect card number',\n },\n number: {\n field: 'cardNumber',\n message: 'Incorrect card number',\n },\n exp_year: {\n field: 'expiry',\n message: 'Incorrect year',\n },\n exp_month: {\n field: 'expiry',\n message: 'Incorrect month',\n },\n invalid_expiry_year: {\n field: 'expiry',\n message: 'Incorrect year',\n },\n invalid_expiry_month: {\n field: 'expiry',\n message: 'Incorrect month',\n },\n cvc: {\n field: 'cvv',\n message: 'Incorrect CVV',\n },\n invalid_cvc: {\n field: 'cvv',\n message: 'Incorrect CVV',\n },\n};\n\nexport function getStripeError(error: {\n code: string;\n message: string;\n param?: string;\n}) {\n const { message: description, code, param } = error;\n const { field, message } = param ? STRIPE_ERRORS[param] : STRIPE_ERRORS[code];\n\n return { field, message, description };\n}\n","import { ApiChat, ApiUser, ApiUserStatus } from '../../api/types';\n\nimport { SERVICE_NOTIFICATIONS_USER_ID } from '../../config';\nimport { formatFullDate, formatTime } from '../../util/dateFormat';\nimport { orderBy } from '../../util/iteratees';\nimport { LangFn } from '../../hooks/useLang';\nimport { getServerTime } from '../../util/serverTime';\nimport { prepareSearchWordsForNeedle } from '../../util/searchWords';\n\nconst USER_COLOR_KEYS = [1, 8, 5, 2, 7, 4, 6];\n\nexport function getUserFirstOrLastName(user?: ApiUser) {\n if (!user) {\n return undefined;\n }\n\n switch (user.type) {\n case 'userTypeBot':\n case 'userTypeRegular': {\n return user.firstName || user.lastName;\n }\n\n case 'userTypeDeleted':\n case 'userTypeUnknown': {\n return 'Deleted';\n }\n\n default:\n return undefined;\n }\n}\n\nexport function getUserFullName(user?: ApiUser) {\n if (!user) {\n return undefined;\n }\n\n if (isDeletedUser(user)) {\n return 'Deleted account';\n }\n\n switch (user.type) {\n case 'userTypeBot':\n case 'userTypeRegular': {\n if (user.firstName && user.lastName) {\n return `${user.firstName} ${user.lastName}`;\n }\n\n if (user.firstName) {\n return user.firstName;\n }\n\n if (user.lastName) {\n return user.lastName;\n }\n\n break;\n }\n\n case 'userTypeDeleted':\n case 'userTypeUnknown': {\n return 'Deleted account';\n }\n }\n\n return undefined;\n}\n\nexport function getUserStatus(\n lang: LangFn, user: ApiUser, userStatus: ApiUserStatus | undefined, serverTimeOffset: number,\n) {\n if (user.id === SERVICE_NOTIFICATIONS_USER_ID) {\n return lang('ServiceNotifications').toLowerCase();\n }\n\n if (user.type && user.type === 'userTypeBot') {\n return lang('Bot');\n }\n\n if (!userStatus) {\n return '';\n }\n\n switch (userStatus.type) {\n case 'userStatusEmpty': {\n return lang('ALongTimeAgo');\n }\n\n case 'userStatusLastMonth': {\n return lang('WithinAMonth');\n }\n\n case 'userStatusLastWeek': {\n return lang('WithinAWeek');\n }\n\n case 'userStatusOffline': {\n const { wasOnline } = userStatus;\n\n if (!wasOnline) return lang('LastSeen.Offline');\n\n const now = new Date(new Date().getTime() + serverTimeOffset * 1000);\n const wasOnlineDate = new Date(wasOnline * 1000);\n\n if (wasOnlineDate >= now) {\n return lang('LastSeen.JustNow');\n }\n\n const diff = new Date(now.getTime() - wasOnlineDate.getTime());\n\n // within a minute\n if (diff.getTime() / 1000 < 60) {\n return lang('LastSeen.JustNow');\n }\n\n // within an hour\n if (diff.getTime() / 1000 < 60 * 60) {\n const minutes = Math.floor(diff.getTime() / 1000 / 60);\n return lang('LastSeen.MinutesAgo', minutes);\n }\n\n // today\n const today = new Date();\n today.setHours(0, 0, 0, 0);\n const serverToday = new Date(today.getTime() + serverTimeOffset * 1000);\n if (wasOnlineDate > serverToday) {\n // up to 6 hours ago\n if (diff.getTime() / 1000 < 6 * 60 * 60) {\n const hours = Math.floor(diff.getTime() / 1000 / 60 / 60);\n return lang('LastSeen.HoursAgo', hours);\n }\n\n // other\n return lang('LastSeen.TodayAt', formatTime(lang, wasOnlineDate));\n }\n\n // yesterday\n const yesterday = new Date();\n yesterday.setDate(now.getDate() - 1);\n yesterday.setHours(0, 0, 0, 0);\n const serverYesterday = new Date(yesterday.getTime() + serverTimeOffset * 1000);\n if (wasOnlineDate > serverYesterday) {\n return lang('LastSeen.YesterdayAt', formatTime(lang, wasOnlineDate));\n }\n\n return lang('LastSeen.AtDate', formatFullDate(lang, wasOnlineDate));\n }\n\n case 'userStatusOnline': {\n return lang('Online');\n }\n\n case 'userStatusRecently': {\n return lang('Lately');\n }\n\n default:\n return undefined;\n }\n}\n\nexport function isUserOnline(user: ApiUser, userStatus?: ApiUserStatus) {\n const { id, type } = user;\n\n if (!userStatus) {\n return false;\n }\n\n if (id === SERVICE_NOTIFICATIONS_USER_ID) {\n return false;\n }\n\n return userStatus.type === 'userStatusOnline' && type !== 'userTypeBot';\n}\n\nexport function isDeletedUser(user: ApiUser) {\n if (user.noStatus || user.type === 'userTypeBot' || user.id === SERVICE_NOTIFICATIONS_USER_ID) {\n return false;\n }\n\n return user.type === 'userTypeDeleted'\n || user.type === 'userTypeUnknown';\n}\n\nexport function isUserBot(user: ApiUser) {\n return user.type === 'userTypeBot';\n}\n\nexport function getCanAddContact(user: ApiUser) {\n return !user.isContact && !isUserBot(user);\n}\n\nexport function sortUserIds(\n userIds: string[],\n usersById: Record,\n userStatusesById: Record,\n priorityIds?: string[],\n serverTimeOffset = 0,\n) {\n return orderBy(userIds, (id) => {\n const now = getServerTime(serverTimeOffset);\n\n if (priorityIds && priorityIds.includes(id)) {\n // Assuming that online status expiration date can't be as far as two days from now,\n // this should place prioritized on top of the list.\n // Then we subtract index of `id` in `priorityIds` to preserve selected order\n return now + (48 * 60 * 60) - (priorityIds.length - priorityIds.indexOf(id));\n }\n\n const user = usersById[id];\n const userStatus = userStatusesById[id];\n if (!user || !userStatus) {\n return 0;\n }\n\n if (userStatus.type === 'userStatusOnline') {\n return userStatus.expires;\n } else if (userStatus.type === 'userStatusOffline' && userStatus.wasOnline) {\n return userStatus.wasOnline;\n }\n\n switch (userStatus.type) {\n case 'userStatusRecently':\n return now - 60 * 60 * 24;\n case 'userStatusLastWeek':\n return now - 60 * 60 * 24 * 7;\n case 'userStatusLastMonth':\n return now - 60 * 60 * 24 * 7 * 30;\n default:\n return 0;\n }\n }, 'desc');\n}\n\nexport function filterUsersByName(\n userIds: string[],\n usersById: Record,\n query?: string,\n currentUserId?: string,\n savedMessagesLang?: string,\n) {\n if (!query) {\n return userIds;\n }\n\n const searchWords = prepareSearchWordsForNeedle(query);\n\n return userIds.filter((id) => {\n const user = usersById[id];\n if (!user) {\n return false;\n }\n\n const name = id === currentUserId ? savedMessagesLang : getUserFullName(user);\n return (name && searchWords(name)) || searchWords(user.username);\n });\n}\n\nexport function getUserIdDividend(userId: string) {\n // Workaround for old-fashioned IDs stored locally\n if (typeof userId === 'number') {\n return Math.abs(userId);\n }\n\n return Math.abs(Number(userId));\n}\n\n// eslint-disable-next-line max-len\n// https://github.com/telegramdesktop/tdesktop/blob/371510cfe23b0bd226de8c076bc49248fbe40c26/Telegram/SourceFiles/data/data_peer.cpp#L53\nexport function getUserColorKey(peer: ApiUser | ApiChat | undefined) {\n const index = peer ? getUserIdDividend(peer.id) % 7 : 0;\n\n return USER_COLOR_KEYS[index];\n}\n","import { typify } from '../lib/teact/teactn';\nimport { GlobalState, ActionPayloads, NonTypedActionNames } from './types';\n\nconst typed = typify();\n\nexport const getGlobal = typed.getGlobal;\nexport const setGlobal = typed.setGlobal;\nexport const getActions = typed.getActions;\nexport const addActionHandler = typed.addActionHandler;\nexport const withGlobal = typed.withGlobal;\n","import { GlobalState } from '../types';\nimport { ApiChat, ApiChatMember, ApiPhoto } from '../../api/types';\n\nimport { ARCHIVED_FOLDER_ID } from '../../config';\nimport { areSortedArraysEqual, omit } from '../../util/iteratees';\nimport { selectChatListType } from '../selectors';\n\nexport function replaceChatListIds(\n global: GlobalState,\n type: 'active' | 'archived',\n newIds: string[] | undefined,\n): GlobalState {\n return {\n ...global,\n chats: {\n ...global.chats,\n listIds: {\n ...global.chats.listIds,\n [type]: newIds,\n },\n },\n };\n}\n\nexport function updateChatListIds(global: GlobalState, type: 'active' | 'archived', idsUpdate: string[]): GlobalState {\n const { [type]: listIds } = global.chats.listIds;\n const newIds = listIds?.length\n ? idsUpdate.filter((id) => !listIds.includes(id))\n : idsUpdate;\n\n if (listIds && !newIds.length) {\n return global;\n }\n\n return replaceChatListIds(global, type, [\n ...(listIds || []),\n ...newIds,\n ]);\n}\n\nexport function replaceChats(global: GlobalState, newById: Record): GlobalState {\n return {\n ...global,\n chats: {\n ...global.chats,\n byId: newById,\n },\n };\n}\n\nexport function updateChat(\n global: GlobalState, chatId: string, chatUpdate: Partial, photo?: ApiPhoto,\n): GlobalState {\n const { byId } = global.chats;\n\n const updatedChat = getUpdatedChat(global, chatId, chatUpdate, photo);\n if (!updatedChat) {\n return global;\n }\n\n return replaceChats(global, {\n ...byId,\n [chatId]: updatedChat,\n });\n}\n\nexport function updateChats(global: GlobalState, newById: Record): GlobalState {\n const updatedById = Object.keys(newById).reduce((acc: Record, id) => {\n const updatedChat = getUpdatedChat(global, id, newById[id]);\n if (updatedChat) {\n acc[id] = updatedChat;\n }\n\n return acc;\n }, {});\n\n global = replaceChats(global, {\n ...global.chats.byId,\n ...updatedById,\n });\n\n return global;\n}\n\n// @optimization Allows to avoid redundant updates which cause a lot of renders\nexport function addChats(global: GlobalState, newById: Record): GlobalState {\n const { byId } = global.chats;\n let isUpdated = false;\n\n const addedById = Object.keys(newById).reduce>((acc, id) => {\n if (!byId[id] || (byId[id].isMin && !newById[id].isMin)) {\n const updatedChat = getUpdatedChat(global, id, newById[id]);\n if (updatedChat) {\n acc[id] = updatedChat;\n if (!isUpdated) {\n isUpdated = true;\n }\n }\n }\n return acc;\n }, {});\n\n if (!isUpdated) {\n return global;\n }\n\n global = replaceChats(global, {\n ...byId,\n ...addedById,\n });\n\n return global;\n}\n\n// @optimization Don't spread/unspread global for each element, do it in a batch\nfunction getUpdatedChat(\n global: GlobalState, chatId: string, chatUpdate: Partial, photo?: ApiPhoto,\n) {\n const { byId } = global.chats;\n const chat = byId[chatId];\n const shouldOmitMinInfo = chatUpdate.isMin && chat && !chat.isMin;\n const updatedChat: ApiChat = {\n ...chat,\n ...(shouldOmitMinInfo ? omit(chatUpdate, ['isMin', 'accessHash']) : chatUpdate),\n ...(photo && { photos: [photo, ...(chat.photos || [])] }),\n };\n\n if (!updatedChat.id || !updatedChat.type) {\n return undefined;\n }\n\n return updatedChat;\n}\n\nexport function updateChatListType(\n global: GlobalState,\n chatId: string,\n folderId?: number,\n): GlobalState {\n const listType = folderId === ARCHIVED_FOLDER_ID ? 'archived' : 'active';\n\n let currentListIds = global.chats.listIds;\n (Object.keys(currentListIds) as Array).forEach((listTypeKey) => {\n const currentFolderList = currentListIds[listTypeKey] || [];\n if (listTypeKey === listType && !currentFolderList.includes(chatId)) {\n currentListIds = {\n ...currentListIds,\n [listTypeKey]: [...currentFolderList, chatId],\n };\n } else if (listTypeKey !== listType && currentFolderList.includes(chatId)) {\n currentListIds = {\n ...currentListIds,\n [listTypeKey]: currentFolderList.filter((id) => id !== chatId),\n };\n }\n });\n\n global = {\n ...global,\n chats: {\n ...global.chats,\n listIds: currentListIds,\n },\n };\n\n global = updateChat(global, chatId, { folderId: folderId || undefined });\n\n return global;\n}\n\nexport function updateChatListSecondaryInfo(\n global: GlobalState,\n type: 'active' | 'archived',\n info: {\n orderedPinnedIds?: string[];\n totalChatCount: number;\n },\n): GlobalState {\n const totalCountKey = type === 'active' ? 'all' : 'archived';\n\n return {\n ...global,\n chats: {\n ...global.chats,\n ...(info.orderedPinnedIds && {\n orderedPinnedIds: {\n ...global.chats.orderedPinnedIds,\n [type]: info.orderedPinnedIds,\n },\n }),\n totalCount: {\n ...global.chats.totalCount,\n [totalCountKey]: info.totalChatCount,\n },\n isFullyLoaded: {\n ...global.chats.isFullyLoaded,\n [type]: false,\n },\n },\n };\n}\n\nexport function leaveChat(global: GlobalState, leftChatId: string): GlobalState {\n const listType = selectChatListType(global, leftChatId);\n if (!listType) {\n return global;\n }\n\n const { [listType]: listIds } = global.chats.listIds;\n\n if (listIds) {\n global = replaceChatListIds(global, listType, listIds.filter((listId) => listId !== leftChatId));\n }\n\n global = updateChat(global, leftChatId, { isNotJoined: true });\n\n return global;\n}\n\nexport function addChatMembers(global: GlobalState, chat: ApiChat, membersToAdd: ApiChatMember[]): GlobalState {\n const currentMembers = chat.fullInfo?.members;\n const newMemberIds = new Set(membersToAdd.map((m) => m.userId));\n const updatedMembers = [\n ...currentMembers?.filter((m) => !newMemberIds.has(m.userId)) || [],\n ...membersToAdd,\n ];\n const currentIds = currentMembers?.map(({ userId }) => userId) || [];\n const updatedIds = updatedMembers.map(({ userId }) => userId);\n\n if (areSortedArraysEqual(currentIds, updatedIds)) {\n return global;\n }\n\n return updateChat(global, chat.id, {\n fullInfo: {\n ...chat.fullInfo,\n members: updatedMembers,\n },\n });\n}\n","import { GlobalState } from '../types';\nimport { ApiSticker, ApiStickerSet, ApiVideo } from '../../api/types';\nimport { buildCollectionByKey, unique } from '../../util/iteratees';\nimport { selectStickersForEmoji } from '../selectors';\n\nexport function updateStickerSets(\n global: GlobalState,\n category: 'added' | 'featured' | 'search',\n hash: string,\n sets: ApiStickerSet[],\n resultIds?: string[],\n): GlobalState {\n const updatedSets = sets.map((stickerSet) => {\n const existing = global.stickers.setsById[stickerSet.id];\n if (!existing) {\n return stickerSet;\n }\n\n return {\n ...existing,\n ...stickerSet,\n };\n });\n\n return {\n ...global,\n stickers: {\n ...global.stickers,\n setsById: {\n ...global.stickers.setsById,\n ...buildCollectionByKey(updatedSets, 'id'),\n },\n [category]: {\n ...global.stickers[category],\n hash,\n ...(\n category === 'search'\n ? { resultIds }\n : { setIds: sets.map(({ id }) => id) }\n ),\n },\n },\n };\n}\n\nexport function updateStickerSet(\n global: GlobalState, stickerSetId: string, update: Partial,\n): GlobalState {\n const currentStickerSet = global.stickers.setsById[stickerSetId] || {};\n const addedSets = global.stickers.added.setIds || [];\n let setIds: string[] = addedSets;\n if (update.installedDate && addedSets && !addedSets.includes(stickerSetId)) {\n setIds = [stickerSetId, ...setIds];\n }\n\n if (!update.installedDate && addedSets?.includes(stickerSetId)) {\n setIds = setIds.filter((id) => id !== stickerSetId);\n }\n\n return {\n ...global,\n stickers: {\n ...global.stickers,\n added: {\n ...global.stickers.added,\n setIds,\n },\n setsById: {\n ...global.stickers.setsById,\n [stickerSetId]: {\n ...currentStickerSet,\n ...update,\n },\n },\n },\n };\n}\n\nexport function updateGifSearch(\n global: GlobalState, isNew: boolean, results: ApiVideo[], nextOffset?: string,\n): GlobalState {\n const { results: currentResults } = global.gifs.search;\n\n let newResults!: ApiVideo[];\n if (isNew || !currentResults) {\n newResults = results;\n } else {\n const currentIds = new Set(currentResults.map((gif) => gif.id));\n newResults = [\n ...currentResults,\n ...results.filter((gif) => !currentIds.has(gif.id)),\n ];\n }\n\n return {\n ...global,\n gifs: {\n ...global.gifs,\n search: {\n ...global.gifs.search,\n offset: nextOffset,\n results: newResults,\n },\n },\n };\n}\n\nexport function replaceAnimatedEmojis(global: GlobalState, stickerSet: ApiStickerSet): GlobalState {\n return {\n ...global,\n animatedEmojis: stickerSet,\n };\n}\n\nexport function updateStickersForEmoji(\n global: GlobalState, emoji: string, remoteStickers?: ApiSticker[], hash?: string,\n): GlobalState {\n const localStickers = selectStickersForEmoji(global, emoji);\n const allStickers = [...localStickers, ...(remoteStickers || [])];\n const uniqueIds = unique(allStickers.map(({ id }) => id));\n const byId = buildCollectionByKey(allStickers, 'id');\n const stickers = uniqueIds.map((id) => byId[id]);\n\n return {\n ...global,\n stickers: {\n ...global.stickers,\n forEmoji: {\n emoji,\n stickers,\n hash,\n },\n },\n };\n}\n\nexport function rebuildStickersForEmoji(global: GlobalState): GlobalState {\n const { emoji, stickers, hash } = global.stickers.forEmoji || {};\n if (!emoji) {\n return global;\n }\n\n return updateStickersForEmoji(global, emoji, stickers, hash);\n}\n","import { GlobalState } from '../types';\nimport { ApiUser, ApiUserStatus } from '../../api/types';\n\nimport { omit, pick } from '../../util/iteratees';\nimport { MEMO_EMPTY_ARRAY } from '../../util/memo';\nimport { updateChat } from './chats';\n\nexport function replaceUsers(global: GlobalState, newById: Record): GlobalState {\n return {\n ...global,\n users: {\n ...global.users,\n byId: newById,\n },\n };\n}\n\nfunction updateContactList(global: GlobalState, updatedUsers: ApiUser[]): GlobalState {\n const { userIds: contactUserIds } = global.contactList || {};\n\n if (!contactUserIds) return global;\n\n const newContactUserIds = updatedUsers\n .filter((user) => user?.isContact && !contactUserIds.includes(user.id))\n .map((user) => user.id);\n\n if (newContactUserIds.length === 0) return global;\n\n return {\n ...global,\n contactList: {\n userIds: [\n ...newContactUserIds,\n ...contactUserIds,\n ],\n },\n };\n}\n\nexport function updateUser(global: GlobalState, userId: string, userUpdate: Partial): GlobalState {\n const { byId } = global.users;\n\n const updatedUser = getUpdatedUser(global, userId, userUpdate);\n if (!updatedUser) {\n return global;\n }\n\n global = updateContactList(global, [updatedUser]);\n\n return replaceUsers(global, {\n ...byId,\n [userId]: updatedUser,\n });\n}\n\nexport function updateUsers(global: GlobalState, newById: Record): GlobalState {\n const updatedById = Object.keys(newById).reduce((acc: Record, id) => {\n const updatedUser = getUpdatedUser(global, id, newById[id]);\n if (updatedUser) {\n acc[id] = updatedUser;\n }\n\n return acc;\n }, {});\n\n global = replaceUsers(global, {\n ...global.users.byId,\n ...updatedById,\n });\n\n global = updateContactList(global, Object.values(updatedById));\n\n return global;\n}\n\n// @optimization Allows to avoid redundant updates which cause a lot of renders\nexport function addUsers(global: GlobalState, newById: Record): GlobalState {\n const { byId } = global.users;\n let isUpdated = false;\n\n const addedById = Object.keys(newById).reduce>((acc, id) => {\n if (!byId[id] || (byId[id].isMin && !newById[id].isMin)) {\n const updatedUser = getUpdatedUser(global, id, newById[id]);\n if (updatedUser) {\n acc[id] = updatedUser;\n if (!isUpdated) {\n isUpdated = true;\n }\n }\n }\n return acc;\n }, {});\n\n if (!isUpdated) {\n return global;\n }\n\n global = replaceUsers(global, {\n ...byId,\n ...addedById,\n });\n\n global = updateContactList(global, Object.values(addedById));\n\n return global;\n}\n\n// @optimization Don't spread/unspread global for each element, do it in a batch\nfunction getUpdatedUser(global: GlobalState, userId: string, userUpdate: Partial) {\n const { byId } = global.users;\n const user = byId[userId];\n const shouldOmitMinInfo = userUpdate.isMin && user && !user.isMin;\n\n const updatedUser = {\n ...user,\n ...(shouldOmitMinInfo ? omit(userUpdate, ['isMin', 'accessHash']) : userUpdate),\n };\n\n if (!updatedUser.id || !updatedUser.type) {\n return undefined;\n }\n\n return updatedUser;\n}\n\nexport function deleteContact(global: GlobalState, userId: string): GlobalState {\n const { byId } = global.users;\n const { userIds } = global.contactList || {};\n\n global = {\n ...global,\n contactList: {\n userIds: userIds ? userIds.filter((id) => id !== userId) : MEMO_EMPTY_ARRAY,\n },\n };\n\n global = replaceUsers(global, {\n ...byId,\n [userId]: {\n ...byId[userId],\n isContact: undefined,\n },\n });\n\n return updateChat(global, userId, {\n settings: undefined,\n });\n}\n\nexport function updateUserSearch(\n global: GlobalState,\n searchStatePartial: Partial,\n) {\n return {\n ...global,\n userSearch: {\n ...global.userSearch,\n ...searchStatePartial,\n },\n };\n}\n\nexport function updateUserSearchFetchingStatus(\n global: GlobalState, newState: boolean,\n) {\n return updateUserSearch(global, {\n fetchingStatus: newState,\n });\n}\n\nexport function updateUserBlockedState(global: GlobalState, userId: string, isBlocked: boolean) {\n const { byId } = global.users;\n const user = byId[userId];\n if (!user || !user.fullInfo) {\n return global;\n }\n\n return updateUser(global, userId, {\n ...user,\n fullInfo: {\n ...user.fullInfo,\n isBlocked,\n },\n });\n}\n\nexport function replaceUserStatuses(global: GlobalState, newById: Record): GlobalState {\n return {\n ...global,\n users: {\n ...global.users,\n statusesById: newById,\n },\n };\n}\n\n// @optimization Allows to avoid redundant updates which cause a lot of renders\nexport function addUserStatuses(global: GlobalState, newById: Record): GlobalState {\n const { statusesById } = global.users;\n\n const newKeys = Object.keys(newById).filter((id) => !statusesById[id]);\n if (!newKeys.length) {\n return global;\n }\n\n global = replaceUserStatuses(global, {\n ...statusesById,\n ...pick(newById, newKeys),\n });\n\n return global;\n}\n\nexport function closeNewContactDialog(global: GlobalState): GlobalState {\n return {\n ...global,\n newContact: undefined,\n };\n}\n","import { GlobalState } from '../types';\nimport { GlobalSearchContent } from '../../types';\nimport { ApiGlobalMessageSearchType, ApiMessage } from '../../api/types';\nimport { areSortedArraysEqual } from '../../util/iteratees';\n\nconst getComplexKey = (message: ApiMessage) => `${message.chatId}_${message.id}`;\n\nexport function updateGlobalSearch(\n global: GlobalState,\n searchStatePartial: Partial,\n) {\n return {\n ...global,\n globalSearch: {\n ...global.globalSearch,\n ...searchStatePartial,\n },\n };\n}\n\nexport function updateGlobalSearchContent(\n global: GlobalState,\n currentContent: GlobalSearchContent | undefined,\n): GlobalState {\n return updateGlobalSearch(global, { currentContent });\n}\n\nexport function updateGlobalSearchResults(\n global: GlobalState,\n newFoundMessages: ApiMessage[],\n totalCount: number,\n type: ApiGlobalMessageSearchType,\n nextRate?: number,\n): GlobalState {\n const { resultsByType } = global.globalSearch || {};\n const newFoundMessagesById = newFoundMessages.reduce((result, message) => {\n result[getComplexKey(message)] = message;\n\n return result;\n }, {} as Record);\n const foundIdsForType = resultsByType?.[type]?.foundIds;\n\n if (foundIdsForType !== undefined\n && Object.keys(newFoundMessagesById).every(\n (newId) => foundIdsForType.includes(getComplexKey(newFoundMessagesById[newId])),\n )\n ) {\n return updateGlobalSearchFetchingStatus(global, { messages: false });\n }\n\n const prevFoundIds = foundIdsForType || [];\n const newFoundIds = newFoundMessages.map((message) => getComplexKey(message));\n const foundIds = Array.prototype.concat(prevFoundIds, newFoundIds);\n const foundOrPrevFoundIds = areSortedArraysEqual(prevFoundIds, foundIds) ? prevFoundIds : foundIds;\n\n global = updateGlobalSearchFetchingStatus(global, { messages: false });\n\n return updateGlobalSearch(global, {\n resultsByType: {\n ...(global.globalSearch || {}).resultsByType,\n [type]: {\n totalCount,\n nextOffsetId: nextRate,\n foundIds: foundOrPrevFoundIds,\n },\n },\n });\n}\n\nexport function updateGlobalSearchFetchingStatus(\n global: GlobalState, newState: { chats?: boolean; messages?: boolean },\n) {\n return updateGlobalSearch(global, {\n fetchingStatus: {\n ...global.globalSearch.fetchingStatus,\n ...newState,\n },\n });\n}\n","import { GlobalState } from '../types';\nimport { ApiMessageSearchType } from '../../api/types';\n\nimport { areSortedArraysEqual, unique } from '../../util/iteratees';\nimport { SharedMediaType } from '../../types';\nimport { buildChatThreadKey } from '../helpers';\n\ninterface TextSearchParams {\n isActive: boolean;\n query?: string;\n results?: {\n totalCount?: number;\n nextOffsetId?: number;\n foundIds?: number[];\n };\n}\n\ninterface MediaSearchParams {\n currentType?: SharedMediaType;\n resultsByType?: Partial>;\n}\n\nfunction replaceLocalTextSearch(\n global: GlobalState,\n chatThreadKey: string,\n searchParams: TextSearchParams,\n): GlobalState {\n return {\n ...global,\n localTextSearch: {\n byChatThreadKey: {\n ...global.localTextSearch.byChatThreadKey,\n [chatThreadKey]: searchParams,\n },\n },\n };\n}\n\nexport function updateLocalTextSearch(\n global: GlobalState,\n chatId: string,\n threadId: number,\n isActive: boolean,\n query?: string,\n): GlobalState {\n const chatThreadKey = buildChatThreadKey(chatId, threadId);\n\n return replaceLocalTextSearch(global, chatThreadKey, {\n ...global.localTextSearch.byChatThreadKey[chatThreadKey],\n isActive,\n query,\n });\n}\n\nexport function replaceLocalTextSearchResults(\n global: GlobalState,\n chatId: string,\n threadId: number,\n foundIds?: number[],\n totalCount?: number,\n nextOffsetId?: number,\n): GlobalState {\n const chatThreadKey = buildChatThreadKey(chatId, threadId);\n\n return replaceLocalTextSearch(global, chatThreadKey, {\n ...global.localTextSearch.byChatThreadKey[chatThreadKey],\n results: {\n foundIds,\n totalCount,\n nextOffsetId,\n },\n });\n}\n\nexport function updateLocalTextSearchResults(\n global: GlobalState,\n chatId: string,\n threadId: number,\n newFoundIds: number[],\n totalCount?: number,\n nextOffsetId?: number,\n): GlobalState {\n const chatThreadKey = buildChatThreadKey(chatId, threadId);\n const { results } = global.localTextSearch.byChatThreadKey[chatThreadKey] || {};\n const prevFoundIds = (results?.foundIds) || [];\n const foundIds = orderFoundIds(unique(Array.prototype.concat(prevFoundIds, newFoundIds)));\n const foundOrPrevFoundIds = areSortedArraysEqual(prevFoundIds, foundIds) ? prevFoundIds : foundIds;\n\n return replaceLocalTextSearchResults(global, chatId, threadId, foundOrPrevFoundIds, totalCount, nextOffsetId);\n}\n\nfunction replaceLocalMediaSearch(\n global: GlobalState,\n chatId: string,\n searchParams: MediaSearchParams,\n): GlobalState {\n return {\n ...global,\n localMediaSearch: {\n byChatId: {\n ...global.localMediaSearch.byChatId,\n [chatId]: searchParams,\n },\n },\n };\n}\n\nexport function updateLocalMediaSearchType(\n global: GlobalState,\n chatId: string,\n currentType: SharedMediaType | undefined,\n): GlobalState {\n return replaceLocalMediaSearch(global, chatId, {\n ...global.localMediaSearch.byChatId[chatId],\n currentType,\n });\n}\n\nexport function replaceLocalMediaSearchResults(\n global: GlobalState,\n chatId: string,\n type: ApiMessageSearchType,\n foundIds?: number[],\n totalCount?: number,\n nextOffsetId?: number,\n): GlobalState {\n return replaceLocalMediaSearch(global, chatId, {\n ...global.localMediaSearch.byChatId[chatId],\n resultsByType: {\n ...(global.localMediaSearch.byChatId[chatId] || {}).resultsByType,\n [type]: {\n foundIds,\n totalCount,\n nextOffsetId,\n },\n },\n });\n}\n\nexport function updateLocalMediaSearchResults(\n global: GlobalState,\n chatId: string,\n type: SharedMediaType,\n newFoundIds: number[],\n totalCount?: number,\n nextOffsetId?: number,\n): GlobalState {\n const { resultsByType } = global.localMediaSearch.byChatId[chatId] || {};\n const prevFoundIds = resultsByType?.[type] ? resultsByType[type]!.foundIds : [];\n const foundIds = orderFoundIds(unique(Array.prototype.concat(prevFoundIds, newFoundIds)));\n const foundOrPrevFoundIds = areSortedArraysEqual(prevFoundIds, foundIds) ? prevFoundIds : foundIds;\n\n return replaceLocalMediaSearchResults(global, chatId, type, foundOrPrevFoundIds, totalCount, nextOffsetId);\n}\n\nfunction orderFoundIds(listedIds: number[]) {\n return listedIds.sort((a, b) => b - a);\n}\n","import { GlobalState } from '../types';\nimport { ManagementProgress, ManagementState } from '../../types';\n\nexport function updateManagementProgress(global: GlobalState, progress: ManagementProgress): GlobalState {\n return {\n ...global,\n management: {\n ...global.management,\n progress,\n },\n };\n}\n\nexport function updateManagement(global: GlobalState, chatId: string, update: Partial): GlobalState {\n return {\n ...global,\n management: {\n ...global.management,\n byChatId: {\n ...global.management.byChatId,\n [chatId]: {\n ...(global.management.byChatId[chatId] || {}),\n ...update,\n },\n },\n },\n };\n}\n","import { GlobalState } from '../types';\nimport {\n ISettings, IThemeSettings, ThemeKey, NotifyException,\n} from '../../types';\nimport { ApiNotifyException } from '../../api/types';\nimport { updateUserBlockedState } from './users';\n\nexport function replaceSettings(global: GlobalState, newSettings?: Partial): GlobalState {\n return {\n ...global,\n settings: {\n ...global.settings,\n byKey: {\n ...global.settings.byKey,\n ...newSettings,\n },\n },\n };\n}\n\nexport function replaceThemeSettings(\n global: GlobalState, theme: ThemeKey, newSettings?: Partial,\n): GlobalState {\n return {\n ...global,\n settings: {\n ...global.settings,\n themes: {\n ...global.settings.themes,\n [theme]: {\n ...(global.settings.themes[theme] || {}),\n ...newSettings,\n },\n },\n },\n };\n}\n\nexport function addNotifyExceptions(\n global: GlobalState, notifyExceptions: ApiNotifyException[],\n): GlobalState {\n notifyExceptions.forEach((notifyException) => {\n const { chatId, ...exceptionData } = notifyException;\n global = addNotifyException(global, chatId, exceptionData);\n });\n\n return global;\n}\n\nexport function addNotifyException(\n global: GlobalState, id: string, notifyException: NotifyException,\n): GlobalState {\n return {\n ...global,\n settings: {\n ...global.settings,\n notifyExceptions: {\n ...global.settings.notifyExceptions,\n [id]: notifyException,\n },\n },\n };\n}\n\n// eslint-disable-next-line consistent-return\nexport function updateNotifySettings(\n global: GlobalState, peerType: 'contact' | 'group' | 'broadcast', isSilent?: boolean, shouldShowPreviews?: boolean,\n) {\n switch (peerType) {\n case 'contact':\n return replaceSettings(global, {\n ...(typeof isSilent !== 'undefined' && { hasPrivateChatsNotifications: !isSilent }),\n ...(typeof shouldShowPreviews !== 'undefined' && { hasPrivateChatsMessagePreview: shouldShowPreviews }),\n });\n case 'group':\n return replaceSettings(global, {\n ...(typeof isSilent !== 'undefined' && { hasGroupNotifications: !isSilent }),\n ...(typeof shouldShowPreviews !== 'undefined' && { hasGroupMessagePreview: shouldShowPreviews }),\n });\n case 'broadcast':\n return replaceSettings(global, {\n ...(typeof isSilent !== 'undefined' && { hasBroadcastNotifications: !isSilent }),\n ...(typeof shouldShowPreviews !== 'undefined' && { hasBroadcastMessagePreview: shouldShowPreviews }),\n });\n }\n}\n\nexport function addBlockedContact(global: GlobalState, contactId: string): GlobalState {\n global = updateUserBlockedState(global, contactId, true);\n\n return {\n ...global,\n blocked: {\n ...global.blocked,\n ids: [contactId, ...global.blocked.ids],\n totalCount: global.blocked.totalCount + 1,\n },\n };\n}\n\nexport function removeBlockedContact(global: GlobalState, contactId: string): GlobalState {\n global = updateUserBlockedState(global, contactId, false);\n\n return {\n ...global,\n blocked: {\n ...global.blocked,\n ids: global.blocked.ids.filter((id) => id !== contactId),\n totalCount: global.blocked.totalCount - 1,\n },\n };\n}\n","import { GlobalState } from '../types';\n\nexport function updateTwoFaSettings(\n global: GlobalState,\n update: GlobalState['twoFaSettings'],\n): GlobalState {\n return {\n ...global,\n twoFaSettings: {\n ...global.twoFaSettings,\n ...update,\n },\n };\n}\n","import { GlobalState } from '../types';\nimport { ShippingOption, PaymentStep } from '../../types';\nimport { ApiMessage, ApiPaymentForm, ApiReceipt } from '../../api/types';\n\nexport function updateShippingOptions(\n global: GlobalState,\n shippingOptions: ShippingOption[],\n): GlobalState {\n return {\n ...global,\n payment: {\n ...global.payment,\n shippingOptions,\n },\n };\n}\n\nexport function setRequestInfoId(global: GlobalState, id: string): GlobalState {\n return {\n ...global,\n payment: {\n ...global.payment,\n requestId: id,\n },\n };\n}\n\nexport function setPaymentStep(global: GlobalState, step: PaymentStep): GlobalState {\n return {\n ...global,\n payment: {\n ...global.payment,\n step,\n },\n };\n}\n\nexport function setInvoiceMessageInfo(global: GlobalState, message: ApiMessage): GlobalState {\n if (!message.content || !message.content.invoice) {\n return global;\n }\n const {\n title,\n text,\n amount,\n currency,\n isTest,\n photoUrl,\n } = message.content.invoice;\n return {\n ...global,\n payment: {\n ...global.payment,\n invoiceContent: {\n title,\n text,\n photoUrl,\n amount,\n currency,\n isTest,\n },\n },\n };\n}\n\nexport function setStripeCardInfo(global: GlobalState, cardInfo: { type: string; id: string }): GlobalState {\n return {\n ...global,\n payment: {\n ...global.payment,\n stripeCredentials: {\n ...cardInfo,\n },\n },\n };\n}\n\nexport function setSmartGlocalCardInfo(\n global: GlobalState,\n cardInfo: { type: string; token: string },\n): GlobalState {\n return {\n ...global,\n payment: {\n ...global.payment,\n smartGlocalCredentials: {\n ...cardInfo,\n },\n },\n };\n}\n\nexport function setPaymentForm(global: GlobalState, form: ApiPaymentForm): GlobalState {\n return {\n ...global,\n payment: {\n ...global.payment,\n ...form,\n },\n };\n}\n\nexport function setConfirmPaymentUrl(global: GlobalState, url?: string): GlobalState {\n return {\n ...global,\n payment: {\n ...global.payment,\n confirmPaymentUrl: url,\n },\n };\n}\n\nexport function setReceipt(\n global: GlobalState,\n receipt?: ApiReceipt,\n message?: ApiMessage,\n): GlobalState {\n if (!receipt || !message) {\n return {\n ...global,\n payment: {\n ...global.payment,\n receipt: undefined,\n },\n };\n }\n\n const { invoice: messageInvoice } = message.content;\n const { photoUrl, text, title } = (messageInvoice || {});\n\n return {\n ...global,\n payment: {\n ...global.payment,\n receipt: {\n ...receipt,\n photoUrl,\n text,\n title,\n },\n },\n };\n}\n\nexport function clearPayment(global: GlobalState): GlobalState {\n return {\n ...global,\n payment: {},\n };\n}\n\nexport function closeInvoice(global: GlobalState): GlobalState {\n return {\n ...global,\n payment: {\n ...global.payment,\n isPaymentModalOpen: false,\n },\n };\n}\n","import { GlobalState } from '../types';\nimport { ApiChannelStatistics, ApiGroupStatistics, StatisticsGraph } from '../../api/types';\n\nexport function updateStatistics(\n global: GlobalState, chatId: string, statistics: ApiChannelStatistics | ApiGroupStatistics,\n): GlobalState {\n return {\n ...global,\n statistics: {\n byChatId: {\n ...global.statistics.byChatId,\n [chatId]: statistics,\n },\n },\n };\n}\n\nexport function updateStatisticsGraph(\n global: GlobalState, chatId: string, name: string, update: StatisticsGraph,\n): GlobalState {\n return {\n ...global,\n statistics: {\n byChatId: {\n ...global.statistics.byChatId,\n [chatId]: {\n ...(global.statistics.byChatId[chatId] || {}),\n [name]: update,\n },\n },\n },\n };\n}\n","import {\n GlobalState, MessageList, MessageListType, Thread,\n} from '../types';\nimport {\n ApiMessage, ApiSponsoredMessage, ApiThreadInfo, MAIN_THREAD_ID,\n} from '../../api/types';\nimport { FocusDirection } from '../../types';\n\nimport {\n IS_TEST, MESSAGE_LIST_SLICE, MESSAGE_LIST_VIEWPORT_LIMIT, TMP_CHAT_ID,\n} from '../../config';\nimport {\n selectListedIds,\n selectChatMessages,\n selectViewportIds,\n selectOutlyingIds,\n selectPinnedIds,\n selectThreadInfo,\n selectMessageIdsByGroupId,\n selectScheduledMessages,\n selectScheduledIds,\n selectCurrentMessageIds,\n selectChatMessage,\n selectCurrentMessageList,\n} from '../selectors';\nimport {\n areSortedArraysEqual, omit, pickTruthy, unique,\n} from '../../util/iteratees';\n\ntype MessageStoreSections = {\n byId: Record;\n threadsById: Record;\n};\n\nexport function updateCurrentMessageList(\n global: GlobalState,\n chatId: string | undefined,\n threadId: number = MAIN_THREAD_ID,\n type: MessageListType = 'thread',\n shouldReplaceHistory?: boolean,\n): GlobalState {\n const { messageLists } = global.messages;\n let newMessageLists: MessageList[] = messageLists;\n if (shouldReplaceHistory || IS_TEST) {\n newMessageLists = chatId ? [{ chatId, threadId, type }] : [];\n } else if (chatId) {\n const last = messageLists[messageLists.length - 1];\n if (!last || last.chatId !== chatId || last.threadId !== threadId || last.type !== type) {\n if (last && last.chatId === TMP_CHAT_ID) {\n newMessageLists = [...messageLists.slice(0, -1), { chatId, threadId, type }];\n } else {\n newMessageLists = [...messageLists, { chatId, threadId, type }];\n }\n }\n } else {\n newMessageLists = messageLists.slice(0, -1);\n }\n\n return {\n ...global,\n messages: {\n ...global.messages,\n messageLists: newMessageLists,\n },\n };\n}\n\nfunction replaceChatMessages(global: GlobalState, chatId: string, newById: Record): GlobalState {\n return updateMessageStore(global, chatId, {\n byId: newById,\n });\n}\n\nexport function updateThread(\n global: GlobalState, chatId: string, threadId: number, threadUpdate: Partial,\n): GlobalState {\n const current = global.messages.byChatId[chatId];\n\n return updateMessageStore(global, chatId, {\n threadsById: {\n ...(current?.threadsById),\n [threadId]: {\n ...(current?.threadsById[threadId]),\n ...threadUpdate,\n },\n },\n });\n}\n\nfunction updateMessageStore(\n global: GlobalState, chatId: string, update: Partial,\n): GlobalState {\n const current = global.messages.byChatId[chatId] || { byId: {}, threadsById: {} };\n\n return {\n ...global,\n messages: {\n ...global.messages,\n byChatId: {\n ...global.messages.byChatId,\n [chatId]: {\n ...current,\n ...update,\n },\n },\n },\n };\n}\n\nexport function replaceThreadParam(\n global: GlobalState, chatId: string, threadId: number, paramName: T, newValue: Thread[T] | undefined,\n) {\n return updateThread(global, chatId, threadId, { [paramName]: newValue });\n}\n\nexport function addMessages(\n global: GlobalState, messages: ApiMessage[],\n): GlobalState {\n const addedByChatId = messages.reduce((messagesByChatId, message: ApiMessage) => {\n if (!messagesByChatId[message.chatId]) {\n messagesByChatId[message.chatId] = {};\n }\n messagesByChatId[message.chatId][message.id] = message;\n\n return messagesByChatId;\n }, {} as Record>);\n\n Object.keys(addedByChatId).forEach((chatId) => {\n global = addChatMessagesById(global, chatId, addedByChatId[chatId]);\n });\n\n return global;\n}\n\nexport function addChatMessagesById(\n global: GlobalState, chatId: string, newById: Record,\n): GlobalState {\n const byId = selectChatMessages(global, chatId);\n\n if (byId && Object.keys(newById).every((newId) => Boolean(byId[Number(newId)]))) {\n return global;\n }\n\n return replaceChatMessages(global, chatId, {\n ...newById,\n ...byId,\n });\n}\n\nexport function updateChatMessage(\n global: GlobalState, chatId: string, messageId: number, messageUpdate: Partial,\n): GlobalState {\n const byId = selectChatMessages(global, chatId) || {};\n const message = byId[messageId];\n const updatedMessage = {\n ...message,\n ...messageUpdate,\n };\n\n if (!updatedMessage.id) {\n return global;\n }\n\n return replaceChatMessages(global, chatId, {\n ...byId,\n [messageId]: updatedMessage,\n });\n}\n\nexport function updateScheduledMessage(\n global: GlobalState, chatId: string, messageId: number, messageUpdate: Partial,\n): GlobalState {\n const byId = selectScheduledMessages(global, chatId) || {};\n const message = byId[messageId];\n const updatedMessage = {\n ...message,\n ...messageUpdate,\n };\n\n if (!updatedMessage.id) {\n return global;\n }\n\n return replaceScheduledMessages(global, chatId, {\n ...byId,\n [messageId]: updatedMessage,\n });\n}\n\nexport function deleteChatMessages(\n global: GlobalState,\n chatId: string,\n messageIds: number[],\n): GlobalState {\n const byId = selectChatMessages(global, chatId);\n if (!byId) {\n return global;\n }\n const newById = omit(byId, messageIds);\n const deletedForwardedPosts = Object.values(pickTruthy(byId, messageIds)).filter(\n ({ forwardInfo }) => forwardInfo?.isLinkedChannelPost,\n );\n\n const threadIds = Object.keys(global.messages.byChatId[chatId].threadsById).map(Number);\n threadIds.forEach((threadId) => {\n const threadInfo = selectThreadInfo(global, chatId, threadId);\n\n let listedIds = selectListedIds(global, chatId, threadId);\n let outlyingIds = selectOutlyingIds(global, chatId, threadId);\n let viewportIds = selectViewportIds(global, chatId, threadId);\n let pinnedIds = selectPinnedIds(global, chatId);\n let newMessageCount = threadInfo?.messagesCount;\n\n messageIds.forEach((messageId) => {\n if (listedIds && listedIds.includes(messageId)) {\n listedIds = listedIds.filter((id) => id !== messageId);\n if (newMessageCount !== undefined) newMessageCount -= 1;\n }\n\n if (outlyingIds && outlyingIds.includes(messageId)) {\n outlyingIds = outlyingIds.filter((id) => id !== messageId);\n }\n\n if (viewportIds && viewportIds.includes(messageId)) {\n viewportIds = viewportIds.filter((id) => id !== messageId);\n }\n\n if (pinnedIds && pinnedIds.includes(messageId)) {\n pinnedIds = pinnedIds.filter((id) => id !== messageId);\n }\n });\n\n global = replaceThreadParam(global, chatId, threadId, 'listedIds', listedIds);\n global = replaceThreadParam(global, chatId, threadId, 'outlyingIds', outlyingIds);\n global = replaceThreadParam(global, chatId, threadId, 'viewportIds', viewportIds);\n global = replaceThreadParam(global, chatId, threadId, 'pinnedIds', pinnedIds);\n\n if (threadInfo && newMessageCount !== undefined) {\n global = replaceThreadParam(global, chatId, threadId, 'threadInfo', {\n ...threadInfo,\n messagesCount: newMessageCount,\n });\n }\n });\n\n if (deletedForwardedPosts.length) {\n const currentMessageList = selectCurrentMessageList(global);\n const canDeleteCurrentThread = currentMessageList && currentMessageList.chatId === chatId\n && currentMessageList.type === 'thread';\n const currentThreadId = currentMessageList?.threadId;\n\n deletedForwardedPosts.forEach((message) => {\n const { fromChatId, fromMessageId } = message.forwardInfo!;\n const originalPost = selectChatMessage(global, fromChatId!, fromMessageId!);\n\n if (canDeleteCurrentThread && currentThreadId === fromMessageId) {\n global = updateCurrentMessageList(global, chatId);\n }\n if (originalPost) {\n global = updateChatMessage(global, fromChatId!, fromMessageId!, { threadInfo: undefined });\n }\n });\n }\n\n global = replaceChatMessages(global, chatId, newById);\n\n return global;\n}\n\nexport function deleteChatScheduledMessages(\n global: GlobalState,\n chatId: string,\n messageIds: number[],\n): GlobalState {\n const byId = selectScheduledMessages(global, chatId);\n if (!byId) {\n return global;\n }\n const newById = omit(byId, messageIds);\n\n let scheduledIds = selectScheduledIds(global, chatId);\n if (scheduledIds) {\n messageIds.forEach((messageId) => {\n if (scheduledIds!.includes(messageId)) {\n scheduledIds = scheduledIds!.filter((id) => id !== messageId);\n }\n });\n global = replaceThreadParam(global, chatId, MAIN_THREAD_ID, 'scheduledIds', scheduledIds);\n }\n\n global = replaceScheduledMessages(global, chatId, newById);\n\n return global;\n}\n\nexport function updateListedIds(\n global: GlobalState,\n chatId: string,\n threadId: number,\n idsUpdate: number[],\n): GlobalState {\n const listedIds = selectListedIds(global, chatId, threadId);\n const newIds = listedIds?.length\n ? idsUpdate.filter((id) => !listedIds.includes(id))\n : idsUpdate;\n\n if (listedIds && !newIds.length) {\n return global;\n }\n\n return replaceThreadParam(global, chatId, threadId, 'listedIds', orderHistoryIds([\n ...(listedIds || []),\n ...newIds,\n ]));\n}\n\nexport function updateOutlyingIds(\n global: GlobalState,\n chatId: string,\n threadId: number,\n idsUpdate: number[],\n): GlobalState {\n const outlyingIds = selectOutlyingIds(global, chatId, threadId);\n const newIds = outlyingIds?.length\n ? idsUpdate.filter((id) => !outlyingIds.includes(id))\n : idsUpdate;\n\n if (outlyingIds && !newIds.length) {\n return global;\n }\n\n return replaceThreadParam(global, chatId, threadId, 'outlyingIds', orderHistoryIds([\n ...(outlyingIds || []),\n ...newIds,\n ]));\n}\n\nfunction orderHistoryIds(listedIds: number[]) {\n return listedIds.sort((a, b) => a - b);\n}\n\nexport function addViewportId(\n global: GlobalState,\n chatId: string,\n threadId: number,\n newId: number,\n): GlobalState {\n const viewportIds = selectViewportIds(global, chatId, threadId) || [];\n if (viewportIds.includes(newId)) {\n return global;\n }\n\n const newIds = orderHistoryIds([\n ...(\n viewportIds.length < MESSAGE_LIST_VIEWPORT_LIMIT\n ? viewportIds\n : viewportIds.slice(-(MESSAGE_LIST_SLICE / 2))\n ),\n newId,\n ]);\n\n return replaceThreadParam(global, chatId, threadId, 'viewportIds', newIds);\n}\n\nexport function safeReplaceViewportIds(\n global: GlobalState,\n chatId: string,\n threadId: number,\n newViewportIds: number[],\n): GlobalState {\n const currentIds = selectViewportIds(global, chatId, threadId) || [];\n const newIds = orderHistoryIds(newViewportIds);\n\n return replaceThreadParam(\n global,\n chatId,\n threadId,\n 'viewportIds',\n areSortedArraysEqual(currentIds, newIds) ? currentIds : newIds,\n );\n}\n\nexport function updateThreadInfo(\n global: GlobalState, chatId: string, threadId: number, update: Partial | undefined,\n): GlobalState {\n const newThreadInfo = {\n ...(selectThreadInfo(global, chatId, threadId) as ApiThreadInfo),\n ...update,\n };\n\n if (!newThreadInfo.threadId) {\n return global;\n }\n\n return replaceThreadParam(global, chatId, threadId, 'threadInfo', newThreadInfo);\n}\n\nexport function updateThreadInfos(\n global: GlobalState, chatId: string, updates: Partial[],\n): GlobalState {\n updates.forEach((update) => {\n global = updateThreadInfo(global, update.chatId!, update.threadId!, update);\n });\n\n return global;\n}\n\nexport function replaceScheduledMessages(\n global: GlobalState, chatId: string, newById: Record,\n): GlobalState {\n return updateScheduledMessages(global, chatId, {\n byId: newById,\n });\n}\n\nfunction updateScheduledMessages(\n global: GlobalState, chatId: string, update: Partial<{ byId: Record }>,\n): GlobalState {\n const current = global.scheduledMessages.byChatId[chatId] || { byId: {}, hash: 0 };\n\n return {\n ...global,\n scheduledMessages: {\n byChatId: {\n ...global.scheduledMessages.byChatId,\n [chatId]: {\n ...current,\n ...update,\n },\n },\n },\n };\n}\n\nexport function updateFocusedMessage(\n global: GlobalState, chatId?: string, messageId?: number, noHighlight = false, isResizingContainer = false,\n): GlobalState {\n return {\n ...global,\n focusedMessage: {\n ...global.focusedMessage,\n chatId,\n messageId,\n noHighlight,\n isResizingContainer,\n },\n };\n}\n\nexport function updateSponsoredMessage(\n global: GlobalState, chatId: string, message: ApiSponsoredMessage,\n): GlobalState {\n return {\n ...global,\n messages: {\n ...global.messages,\n sponsoredByChatId: {\n ...global.messages.sponsoredByChatId,\n [chatId]: message,\n },\n },\n };\n}\n\nexport function updateFocusDirection(\n global: GlobalState, direction?: FocusDirection,\n): GlobalState {\n return {\n ...global,\n focusedMessage: {\n ...global.focusedMessage,\n direction,\n },\n };\n}\n\nexport function enterMessageSelectMode(\n global: GlobalState,\n chatId: string,\n messageId?: number | number[],\n): GlobalState {\n const messageIds = messageId ? Array.prototype.concat([], messageId) : [];\n return {\n ...global,\n selectedMessages: {\n chatId,\n messageIds,\n },\n };\n}\n\nexport function toggleMessageSelection(\n global: GlobalState,\n chatId: string,\n threadId: number,\n messageListType: MessageListType,\n messageId: number,\n groupedId?: string,\n childMessageIds?: number[],\n withShift = false,\n): GlobalState {\n const { selectedMessages: oldSelectedMessages } = global;\n if (groupedId) {\n childMessageIds = selectMessageIdsByGroupId(global, chatId, groupedId);\n }\n const selectedMessageIds = childMessageIds || [messageId];\n if (!oldSelectedMessages) {\n return enterMessageSelectMode(global, chatId, selectedMessageIds);\n }\n\n const { messageIds } = oldSelectedMessages;\n\n let newMessageIds;\n const newSelectedMessageIds = selectedMessageIds.filter((id) => !messageIds.includes(id));\n if (newSelectedMessageIds && !newSelectedMessageIds.length) {\n newMessageIds = messageIds.filter((id) => !selectedMessageIds.includes(id));\n } else if (withShift && messageIds.length) {\n const viewportIds = selectCurrentMessageIds(global, chatId, threadId, messageListType)!;\n const prevIndex = viewportIds.indexOf(messageIds[messageIds.length - 1]);\n const currentIndex = viewportIds.indexOf(messageId);\n const from = Math.min(prevIndex, currentIndex);\n const to = Math.max(prevIndex, currentIndex);\n const slice = viewportIds.slice(from, to + 1);\n newMessageIds = unique([...messageIds, ...slice]);\n } else {\n newMessageIds = [...messageIds, ...newSelectedMessageIds];\n }\n\n if (!newMessageIds.length) {\n return exitMessageSelectMode(global);\n }\n\n return {\n ...global,\n selectedMessages: {\n ...oldSelectedMessages,\n messageIds: newMessageIds,\n },\n };\n}\n\nexport function exitMessageSelectMode(global: GlobalState): GlobalState {\n return {\n ...global,\n selectedMessages: undefined,\n };\n}\n\nexport function updateThreadUnreadFromForwardedMessage(\n global: GlobalState,\n originMessage: ApiMessage,\n chatId: string,\n lastMessageId: number,\n isDeleting?: boolean,\n) {\n const { channelPostId, fromChatId } = originMessage.forwardInfo || {};\n if (channelPostId && fromChatId) {\n const threadInfoOld = selectThreadInfo(global, chatId, channelPostId);\n if (threadInfoOld) {\n global = replaceThreadParam(global, chatId, channelPostId, 'threadInfo', {\n ...threadInfoOld,\n lastMessageId,\n messagesCount: threadInfoOld.messagesCount + (isDeleting ? -1 : 1),\n });\n }\n }\n return global;\n}\n","import { ApiChat, MAIN_THREAD_ID } from '../../api/types';\nimport { GlobalState } from '../types';\n\nimport {\n getPrivateChatUserId, isChatChannel, isUserId, isHistoryClearMessage, isUserBot, isUserOnline,\n} from '../helpers';\nimport { selectUser } from './users';\nimport {\n ALL_FOLDER_ID, ARCHIVED_FOLDER_ID, MEMBERS_LOAD_SLICE, SERVICE_NOTIFICATIONS_USER_ID,\n} from '../../config';\n\nexport function selectChat(global: GlobalState, chatId: string): ApiChat | undefined {\n return global.chats.byId[chatId];\n}\n\nexport function selectChatUser(global: GlobalState, chat: ApiChat) {\n const userId = getPrivateChatUserId(chat);\n if (!userId) {\n return false;\n }\n\n return selectUser(global, userId);\n}\n\nexport function selectIsChatWithSelf(global: GlobalState, chatId: string) {\n return chatId === global.currentUserId;\n}\n\nexport function selectIsChatWithBot(global: GlobalState, chat: ApiChat) {\n const user = selectChatUser(global, chat);\n return user && isUserBot(user);\n}\n\nexport function selectSupportChat(global: GlobalState) {\n return Object.values(global.chats.byId).find(({ isSupport }: ApiChat) => isSupport);\n}\n\nexport function selectChatOnlineCount(global: GlobalState, chat: ApiChat) {\n if (isUserId(chat.id) || isChatChannel(chat) || !chat.fullInfo) {\n return undefined;\n }\n\n if (!chat.fullInfo.members || chat.fullInfo.members.length === MEMBERS_LOAD_SLICE) {\n return chat.fullInfo.onlineCount;\n }\n\n return chat.fullInfo.members.reduce((onlineCount, { userId }) => {\n if (\n userId !== global.currentUserId\n && global.users.byId[userId]\n && isUserOnline(global.users.byId[userId], global.users.statusesById[userId])\n ) {\n return onlineCount + 1;\n }\n\n return onlineCount;\n }, 0);\n}\n\nexport function selectChatBot(global: GlobalState, chatId: string) {\n const chat = selectChat(global, chatId);\n const userId = chat && getPrivateChatUserId(chat);\n const user = userId && selectUser(global, userId);\n if (!user || !isUserBot(user)) {\n return undefined;\n }\n\n return user;\n}\n\nexport function selectIsChatBotNotStarted(global: GlobalState, chatId: string) {\n const chat = selectChat(global, chatId);\n const bot = selectChatBot(global, chatId);\n if (!chat || !bot) {\n return false;\n }\n\n if (chat.lastMessage && isHistoryClearMessage(chat.lastMessage)) {\n return true;\n }\n\n const messageInfo = global.messages.byChatId[chatId];\n if (!messageInfo) {\n return false;\n }\n\n const { listedIds } = messageInfo.threadsById[MAIN_THREAD_ID] || {};\n return listedIds && !listedIds.length;\n}\n\nexport function selectAreActiveChatsLoaded(global: GlobalState): boolean {\n return Boolean(global.chats.listIds.active);\n}\n\nexport function selectIsChatListed(global: GlobalState, chatId: string, type?: 'active' | 'archived'): boolean {\n const { listIds } = global.chats;\n if (type) {\n const targetList = listIds[type];\n return Boolean(targetList && targetList.includes(chatId));\n }\n\n return Object.values(listIds).some((list) => list && list.includes(chatId));\n}\n\nexport function selectChatListType(global: GlobalState, chatId: string): 'active' | 'archived' | undefined {\n const chat = selectChat(global, chatId);\n if (!chat || !selectIsChatListed(global, chatId)) {\n return undefined;\n }\n\n return chat.folderId === ARCHIVED_FOLDER_ID ? 'archived' : 'active';\n}\n\nexport function selectChatFolder(global: GlobalState, folderId: number) {\n return global.chatFolders.byId[folderId];\n}\n\nexport function selectTotalChatCount(global: GlobalState, listType: 'active' | 'archived'): number {\n const { totalCount } = global.chats;\n const allChatsCount = totalCount.all;\n const archivedChatsCount = totalCount.archived || 0;\n\n if (listType === 'archived') {\n return archivedChatsCount;\n }\n\n return allChatsCount ? allChatsCount - archivedChatsCount : 0;\n}\n\nexport function selectIsChatPinned(global: GlobalState, chatId: string, folderId = ALL_FOLDER_ID): boolean {\n const { active, archived } = global.chats.orderedPinnedIds;\n\n if (folderId === ALL_FOLDER_ID) {\n return Boolean(active?.includes(chatId));\n }\n\n if (folderId === ARCHIVED_FOLDER_ID) {\n return Boolean(archived?.includes(chatId));\n }\n\n const { byId: chatFoldersById } = global.chatFolders;\n\n const { pinnedChatIds } = chatFoldersById[folderId] || {};\n return Boolean(pinnedChatIds?.includes(chatId));\n}\n\n// Slow, not to be used in `withGlobal`\nexport function selectChatByUsername(global: GlobalState, username: string) {\n const usernameLowered = username.toLowerCase();\n return Object.values(global.chats.byId).find(\n (chat) => chat.username && chat.username.toLowerCase() === usernameLowered,\n );\n}\n\nexport function selectIsServiceChatReady(global: GlobalState) {\n return Boolean(selectChat(global, SERVICE_NOTIFICATIONS_USER_ID));\n}\n\nexport function selectSendAs(global: GlobalState, chatId: string) {\n const chat = selectChat(global, chatId);\n if (!chat) return undefined;\n\n const id = chat?.fullInfo?.sendAsId;\n if (!id) return undefined;\n\n return selectUser(global, id) || selectChat(global, id);\n}\n","import { GlobalState } from '../types';\nimport { ApiSticker } from '../../api/types';\n\nexport function selectIsStickerFavorite(global: GlobalState, sticker: ApiSticker) {\n const { stickers } = global.stickers.favorite;\n return stickers && stickers.some(({ id }) => id === sticker.id);\n}\n\nexport function selectCurrentStickerSearch(global: GlobalState) {\n return global.stickers.search;\n}\n\nexport function selectCurrentGifSearch(global: GlobalState) {\n return global.gifs.search;\n}\n\nexport function selectStickerSet(global: GlobalState, id: string) {\n return global.stickers.setsById[id];\n}\n\nexport function selectStickerSetByShortName(global: GlobalState, shortName: string) {\n return Object.values(global.stickers.setsById).find((l) => l.shortName.toLowerCase() === shortName.toLowerCase());\n}\n\nexport function selectStickersForEmoji(global: GlobalState, emoji: string) {\n const stickerSets = Object.values(global.stickers.setsById);\n let stickersForEmoji: ApiSticker[] = [];\n // Favorites\n global.stickers.favorite.stickers.forEach((sticker) => {\n if (sticker.emoji === emoji) stickersForEmoji.push(sticker);\n });\n\n // Added sets\n stickerSets.forEach(({ packs }) => {\n if (!packs) {\n return;\n }\n\n stickersForEmoji = stickersForEmoji.concat(packs[emoji] || [], packs[cleanEmoji(emoji)] || []);\n });\n return stickersForEmoji;\n}\n\nfunction cleanEmoji(emoji: string) {\n // Some emojis (❤️ for example) with a service symbol 'VARIATION SELECTOR-16' are not recognized as animated\n return emoji.replace('\\ufe0f', '');\n}\n\nexport function selectAnimatedEmoji(global: GlobalState, emoji: string) {\n const { animatedEmojis } = global;\n if (!animatedEmojis || !animatedEmojis.stickers) {\n return undefined;\n }\n\n const cleanedEmoji = cleanEmoji(emoji);\n\n return animatedEmojis.stickers.find((sticker) => sticker.emoji === emoji || sticker.emoji === cleanedEmoji);\n}\n\nexport function selectAnimatedEmojiEffect(global: GlobalState, emoji: string) {\n const { animatedEmojiEffects } = global;\n if (!animatedEmojiEffects || !animatedEmojiEffects.stickers) {\n return undefined;\n }\n\n const cleanedEmoji = cleanEmoji(emoji);\n\n return animatedEmojiEffects.stickers.find((sticker) => sticker.emoji === emoji || sticker.emoji === cleanedEmoji);\n}\n\nexport function selectAnimatedEmojiSound(global: GlobalState, emoji: string) {\n return global?.appConfig?.emojiSounds[cleanEmoji(emoji)];\n}\n\nexport function selectLocalAnimatedEmoji(global: GlobalState, emoji: string) {\n const cleanedEmoji = cleanEmoji(emoji);\n\n return cleanedEmoji === '🍑' ? 'Peach' : (cleanedEmoji === '🍆' ? 'Eggplant' : undefined);\n}\n\nexport function selectLocalAnimatedEmojiEffect(emoji: string) {\n return emoji === 'Eggplant' ? 'Cumshot' : undefined;\n}\n\nexport function selectLocalAnimatedEmojiEffectByName(name: string) {\n return name === 'Cumshot' ? '🍆' : undefined;\n}\n","import { GlobalState, MessageListType, Thread } from '../types';\nimport {\n ApiChat,\n ApiMessage,\n ApiMessageOutgoingStatus,\n ApiUser,\n MAIN_THREAD_ID,\n} from '../../api/types';\n\nimport { LOCAL_MESSAGE_ID_BASE, REPLIES_USER_ID, SERVICE_NOTIFICATIONS_USER_ID } from '../../config';\nimport {\n selectChat, selectChatBot, selectIsChatWithBot, selectIsChatWithSelf,\n} from './chats';\nimport { selectIsUserOrChatContact, selectUser, selectUserStatus } from './users';\nimport {\n getSendingState,\n isChatChannel,\n isMessageLocal,\n isUserId,\n isForwardedMessage,\n getCanPostInChat,\n isUserRightBanned,\n getHasAdminRight,\n isChatBasicGroup,\n isCommonBoxChat,\n isServiceNotificationMessage,\n isOwnMessage,\n isActionMessage,\n isChatGroup,\n isChatSuperGroup,\n getMessageVideo,\n getMessageWebPageVideo,\n getMessagePhoto,\n getMessageAudio,\n getMessageVoice,\n getMessageDocument,\n getMessageWebPagePhoto,\n} from '../helpers';\nimport { findLast } from '../../util/iteratees';\nimport { selectIsStickerFavorite } from './symbols';\nimport { getServerTime } from '../../util/serverTime';\nimport { MEMO_EMPTY_ARRAY } from '../../util/memo';\n\nconst MESSAGE_EDIT_ALLOWED_TIME = 172800; // 48 hours\n\nexport function selectCurrentMessageList(global: GlobalState) {\n const { messageLists } = global.messages;\n\n if (messageLists.length) {\n return messageLists[messageLists.length - 1];\n }\n\n return undefined;\n}\n\nexport function selectCurrentChat(global: GlobalState) {\n const { chatId } = selectCurrentMessageList(global) || {};\n\n return chatId ? selectChat(global, chatId) : undefined;\n}\n\nexport function selectChatMessages(global: GlobalState, chatId: string) {\n return global.messages.byChatId[chatId]?.byId;\n}\n\nexport function selectScheduledMessages(global: GlobalState, chatId: string) {\n return global.scheduledMessages.byChatId[chatId]?.byId;\n}\n\nexport function selectThreadParam(\n global: GlobalState,\n chatId: string,\n threadId: number,\n key: K,\n) {\n const messageInfo = global.messages.byChatId[chatId];\n if (!messageInfo) {\n return undefined;\n }\n\n const thread = messageInfo.threadsById[threadId];\n if (!thread) {\n return undefined;\n }\n\n return thread[key];\n}\n\nexport function selectListedIds(global: GlobalState, chatId: string, threadId: number) {\n return selectThreadParam(global, chatId, threadId, 'listedIds');\n}\n\nexport function selectOutlyingIds(global: GlobalState, chatId: string, threadId: number) {\n return selectThreadParam(global, chatId, threadId, 'outlyingIds');\n}\n\nexport function selectCurrentMessageIds(\n global: GlobalState, chatId: string, threadId: number, messageListType: MessageListType,\n) {\n switch (messageListType) {\n case 'thread':\n return selectViewportIds(global, chatId, threadId);\n case 'pinned':\n return selectPinnedIds(global, chatId);\n case 'scheduled':\n return selectScheduledIds(global, chatId);\n }\n\n return undefined;\n}\n\nexport function selectViewportIds(global: GlobalState, chatId: string, threadId: number) {\n return selectThreadParam(global, chatId, threadId, 'viewportIds');\n}\n\nexport function selectPinnedIds(global: GlobalState, chatId: string) {\n return selectThreadParam(global, chatId, MAIN_THREAD_ID, 'pinnedIds');\n}\n\nexport function selectScheduledIds(global: GlobalState, chatId: string) {\n return selectThreadParam(global, chatId, MAIN_THREAD_ID, 'scheduledIds');\n}\n\nexport function selectScrollOffset(global: GlobalState, chatId: string, threadId: number) {\n return selectThreadParam(global, chatId, threadId, 'scrollOffset');\n}\n\nexport function selectReplyingToId(global: GlobalState, chatId: string, threadId: number) {\n return selectThreadParam(global, chatId, threadId, 'replyingToId');\n}\n\nexport function selectEditingId(global: GlobalState, chatId: string, threadId: number) {\n return selectThreadParam(global, chatId, threadId, 'editingId');\n}\n\nexport function selectEditingDraft(global: GlobalState, chatId: string, threadId: number) {\n return selectThreadParam(global, chatId, threadId, 'editingDraft');\n}\n\nexport function selectEditingScheduledId(global: GlobalState, chatId: string) {\n return selectThreadParam(global, chatId, MAIN_THREAD_ID, 'editingScheduledId');\n}\n\nexport function selectEditingScheduledDraft(global: GlobalState, chatId: string) {\n return selectThreadParam(global, chatId, MAIN_THREAD_ID, 'editingScheduledDraft');\n}\n\nexport function selectDraft(global: GlobalState, chatId: string, threadId: number) {\n return selectThreadParam(global, chatId, threadId, 'draft');\n}\n\nexport function selectNoWebPage(global: GlobalState, chatId: string, threadId: number) {\n return selectThreadParam(global, chatId, threadId, 'noWebPage');\n}\n\nexport function selectThreadInfo(global: GlobalState, chatId: string, threadId: number) {\n return selectThreadParam(global, chatId, threadId, 'threadInfo');\n}\n\nexport function selectFirstMessageId(global: GlobalState, chatId: string, threadId: number) {\n return selectThreadParam(global, chatId, threadId, 'firstMessageId');\n}\n\nexport function selectReplyStack(global: GlobalState, chatId: string, threadId: number) {\n return selectThreadParam(global, chatId, threadId, 'replyStack');\n}\n\nexport function selectThreadOriginChat(global: GlobalState, chatId: string, threadId: number) {\n if (threadId === MAIN_THREAD_ID) {\n return selectChat(global, chatId);\n }\n\n const threadInfo = selectThreadInfo(global, chatId, threadId);\n if (!threadInfo) {\n return undefined;\n }\n\n return selectChat(global, threadInfo.originChannelId || chatId);\n}\n\nexport function selectThreadTopMessageId(global: GlobalState, chatId: string, threadId: number) {\n if (threadId === MAIN_THREAD_ID) {\n return undefined;\n }\n\n const threadInfo = selectThreadInfo(global, chatId, threadId);\n if (!threadInfo) {\n return undefined;\n }\n\n return threadInfo.topMessageId;\n}\n\nexport function selectThreadByMessage(global: GlobalState, chatId: string, message: ApiMessage) {\n const messageInfo = global.messages.byChatId[chatId];\n if (!messageInfo) {\n return undefined;\n }\n\n const { replyToMessageId, replyToTopMessageId } = message;\n if (!replyToMessageId && !replyToTopMessageId) {\n return undefined;\n }\n\n return Object.values(messageInfo.threadsById).find((thread) => {\n return thread.threadInfo && (\n (replyToMessageId && replyToMessageId === thread.threadInfo.topMessageId)\n || (replyToTopMessageId && replyToTopMessageId === thread.threadInfo.topMessageId)\n );\n });\n}\n\nexport function selectIsMessageInCurrentMessageList(global: GlobalState, chatId: string, message: ApiMessage) {\n const currentMessageList = selectCurrentMessageList(global);\n if (!currentMessageList) {\n return false;\n }\n\n const { threadInfo } = selectThreadByMessage(global, chatId, message) || {};\n return (\n chatId === currentMessageList.chatId\n && (\n (currentMessageList.threadId === MAIN_THREAD_ID)\n || (threadInfo && currentMessageList.threadId === threadInfo.threadId)\n )\n );\n}\n\nexport function selectIsViewportNewest(global: GlobalState, chatId: string, threadId: number) {\n const viewportIds = selectViewportIds(global, chatId, threadId);\n if (!viewportIds || !viewportIds.length) {\n return true;\n }\n\n let lastMessageId: number;\n\n if (threadId === MAIN_THREAD_ID) {\n const chat = selectChat(global, chatId);\n if (!chat || !chat.lastMessage) {\n return true;\n }\n\n lastMessageId = chat.lastMessage.id;\n } else {\n const threadInfo = selectThreadInfo(global, chatId, threadId);\n if (!threadInfo || !threadInfo.lastMessageId) {\n return undefined;\n }\n\n lastMessageId = threadInfo.lastMessageId;\n }\n\n // Edge case: outgoing `lastMessage` is updated with a delay to optimize animation\n if (lastMessageId >= LOCAL_MESSAGE_ID_BASE && !selectChatMessage(global, chatId, lastMessageId)) {\n return true;\n }\n\n return viewportIds[viewportIds.length - 1] >= lastMessageId;\n}\n\nexport function selectChatMessage(global: GlobalState, chatId: string, messageId: number) {\n const chatMessages = selectChatMessages(global, chatId);\n\n return chatMessages ? chatMessages[messageId] : undefined;\n}\n\nexport function selectScheduledMessage(global: GlobalState, chatId: string, messageId: number) {\n const chatMessages = selectScheduledMessages(global, chatId);\n\n return chatMessages ? chatMessages[messageId] : undefined;\n}\n\nexport function selectEditingMessage(\n global: GlobalState, chatId: string, threadId: number, messageListType: MessageListType,\n) {\n if (messageListType === 'scheduled') {\n const messageId = selectEditingScheduledId(global, chatId);\n return messageId ? selectScheduledMessage(global, chatId, messageId) : undefined;\n } else {\n const messageId = selectEditingId(global, chatId, threadId);\n return messageId ? selectChatMessage(global, chatId, messageId) : undefined;\n }\n}\n\nexport function selectChatMessageByPollId(global: GlobalState, pollId: string) {\n let messageWithPoll: ApiMessage | undefined;\n\n // eslint-disable-next-line no-restricted-syntax\n for (const chatMessages of Object.values(global.messages.byChatId)) {\n const { byId } = chatMessages;\n messageWithPoll = Object.values(byId).find((message) => {\n return message.content.poll && message.content.poll.id === pollId;\n });\n if (messageWithPoll) {\n break;\n }\n }\n\n return messageWithPoll;\n}\n\nexport function selectFocusedMessageId(global: GlobalState, chatId: string) {\n const { chatId: focusedChatId, messageId } = global.focusedMessage || {};\n\n return focusedChatId === chatId ? messageId : undefined;\n}\n\nexport function selectIsMessageFocused(global: GlobalState, message: ApiMessage) {\n const focusedId = selectFocusedMessageId(global, message.chatId);\n\n return focusedId ? focusedId === message.id || focusedId === message.previousLocalId : false;\n}\n\nexport function selectIsMessageUnread(global: GlobalState, message: ApiMessage) {\n const { lastReadOutboxMessageId } = selectChat(global, message.chatId) || {};\n return isMessageLocal(message) || !lastReadOutboxMessageId || lastReadOutboxMessageId < message.id;\n}\n\nexport function selectOutgoingStatus(\n global: GlobalState, message: ApiMessage, isScheduledList = false,\n): ApiMessageOutgoingStatus {\n if (!selectIsMessageUnread(global, message) && !isScheduledList) {\n return 'read';\n }\n\n return getSendingState(message);\n}\n\nexport function selectSender(global: GlobalState, message: ApiMessage): ApiUser | ApiChat | undefined {\n const { senderId } = message;\n if (!senderId) {\n return undefined;\n }\n\n return isUserId(senderId) ? selectUser(global, senderId) : selectChat(global, senderId);\n}\n\nexport function selectForwardedSender(global: GlobalState, message: ApiMessage): ApiUser | ApiChat | undefined {\n const { forwardInfo } = message;\n if (!forwardInfo) {\n return undefined;\n }\n\n if (forwardInfo.isChannelPost && forwardInfo.fromChatId) {\n return selectChat(global, forwardInfo.fromChatId);\n } else if (forwardInfo.senderUserId) {\n return selectUser(global, forwardInfo.senderUserId) || selectChat(global, forwardInfo.senderUserId);\n }\n\n return undefined;\n}\n\nexport function selectAllowedMessageActions(global: GlobalState, message: ApiMessage, threadId: number) {\n const chat = selectChat(global, message.chatId);\n if (!chat || chat.isRestricted) {\n return {};\n }\n\n const isPrivate = isUserId(chat.id);\n const isChatWithSelf = selectIsChatWithSelf(global, message.chatId);\n const isBasicGroup = isChatBasicGroup(chat);\n const isSuperGroup = isChatSuperGroup(chat);\n const isChannel = isChatChannel(chat);\n const isLocal = isMessageLocal(message);\n const isServiceNotification = isServiceNotificationMessage(message);\n const isOwn = isOwnMessage(message);\n const isAction = isActionMessage(message);\n const { content } = message;\n\n const canEditMessagesIndefinitely = isChatWithSelf\n || (isSuperGroup && getHasAdminRight(chat, 'pinMessages'))\n || (isChannel && getHasAdminRight(chat, 'editMessages'));\n const isMessageEditable = (\n (\n canEditMessagesIndefinitely\n || getServerTime(global.serverTimeOffset) - message.date < MESSAGE_EDIT_ALLOWED_TIME\n ) && !(\n content.sticker || content.contact || content.poll || content.action || content.audio\n || (content.video?.isRound) || content.location\n )\n && !isForwardedMessage(message)\n && !message.viaBotId\n && !chat.isForbidden\n );\n\n const canReply = !isLocal && !isServiceNotification && !chat.isForbidden && getCanPostInChat(chat, threadId);\n\n const hasPinPermission = isPrivate || (\n chat.isCreator\n || (!isChannel && !isUserRightBanned(chat, 'pinMessages'))\n || getHasAdminRight(chat, 'pinMessages')\n );\n\n let canPin = !isLocal && !isServiceNotification && !isAction && hasPinPermission;\n let canUnpin = false;\n\n const pinnedMessageIds = selectPinnedIds(global, chat.id);\n\n if (canPin) {\n canUnpin = Boolean(pinnedMessageIds && pinnedMessageIds.includes(message.id));\n canPin = !canUnpin;\n }\n\n const canDelete = !isLocal && !isServiceNotification && (\n isPrivate\n || isOwn\n || isBasicGroup\n || chat.isCreator\n || getHasAdminRight(chat, 'deleteMessages')\n );\n\n const canReport = !isPrivate && !isOwn;\n\n const canDeleteForAll = canDelete && !chat.isForbidden && (\n (isPrivate && !isChatWithSelf)\n || (isBasicGroup && (\n isOwn || getHasAdminRight(chat, 'deleteMessages') || chat.isCreator\n ))\n );\n\n const canEdit = !isLocal && !isAction && isMessageEditable && (\n isOwn\n || (isChannel && (chat.isCreator || getHasAdminRight(chat, 'editMessages')))\n );\n\n const canForward = !isLocal && !isAction;\n\n const hasSticker = Boolean(message.content.sticker);\n const hasFavoriteSticker = hasSticker && selectIsStickerFavorite(global, message.content.sticker!);\n const canFaveSticker = !isAction && hasSticker && !hasFavoriteSticker;\n const canUnfaveSticker = !isAction && hasFavoriteSticker;\n const canCopy = !isAction;\n const canCopyLink = !isAction && (isChannel || isSuperGroup);\n const canSelect = !isAction;\n\n const canDownload = Boolean(content.webPage?.document || content.webPage?.video || content.webPage?.photo\n || content.audio || content.voice || content.photo || content.video || content.document || content.sticker);\n\n const canSaveGif = message.content.video?.isGif;\n\n const noOptions = [\n canReply,\n canEdit,\n canPin,\n canUnpin,\n canReport,\n canDelete,\n canDeleteForAll,\n canForward,\n canFaveSticker,\n canUnfaveSticker,\n canCopy,\n canCopyLink,\n canSelect,\n canDownload,\n canSaveGif,\n ].every((ability) => !ability);\n\n return {\n noOptions,\n canReply,\n canEdit,\n canPin,\n canUnpin,\n canReport,\n canDelete,\n canDeleteForAll,\n canForward,\n canFaveSticker,\n canUnfaveSticker,\n canCopy,\n canCopyLink,\n canSelect,\n canDownload,\n canSaveGif,\n };\n}\n\n// This selector always returns a new object which can not be safely used in shallow-equal checks\nexport function selectCanDeleteSelectedMessages(global: GlobalState) {\n const { messageIds: selectedMessageIds } = global.selectedMessages || {};\n const { chatId, threadId } = selectCurrentMessageList(global) || {};\n const chatMessages = chatId && selectChatMessages(global, chatId);\n if (!chatMessages || !selectedMessageIds || !threadId) {\n return {};\n }\n\n const messageActions = selectedMessageIds\n .map((id) => chatMessages[id] && selectAllowedMessageActions(global, chatMessages[id], threadId))\n .filter(Boolean);\n\n return {\n canDelete: messageActions.every((actions) => actions.canDelete),\n canDeleteForAll: messageActions.every((actions) => actions.canDeleteForAll),\n };\n}\n\nexport function selectCanReportSelectedMessages(global: GlobalState) {\n const { messageIds: selectedMessageIds } = global.selectedMessages || {};\n const { chatId, threadId } = selectCurrentMessageList(global) || {};\n const chatMessages = chatId && selectChatMessages(global, chatId);\n if (!chatMessages || !selectedMessageIds || !threadId) {\n return false;\n }\n\n const messageActions = selectedMessageIds\n .map((id) => chatMessages[id] && selectAllowedMessageActions(global, chatMessages[id], threadId))\n .filter(Boolean);\n\n return messageActions.every((actions) => actions.canReport);\n}\n\nexport function selectCanDownloadSelectedMessages(global: GlobalState) {\n const { messageIds: selectedMessageIds } = global.selectedMessages || {};\n const { chatId, threadId } = selectCurrentMessageList(global) || {};\n const chatMessages = chatId && selectChatMessages(global, chatId);\n if (!chatMessages || !selectedMessageIds || !threadId) {\n return false;\n }\n\n const messageActions = selectedMessageIds\n .map((id) => chatMessages[id] && selectAllowedMessageActions(global, chatMessages[id], threadId))\n .filter(Boolean);\n\n return messageActions.some((actions) => actions.canDownload);\n}\n\nexport function selectIsDownloading(global: GlobalState, message: ApiMessage) {\n const activeInChat = global.activeDownloads.byChatId[message.chatId];\n return activeInChat ? activeInChat.includes(message.id) : false;\n}\n\nexport function selectActiveDownloadIds(global: GlobalState, chatId: string) {\n return global.activeDownloads.byChatId[chatId] || MEMO_EMPTY_ARRAY;\n}\n\nexport function selectUploadProgress(global: GlobalState, message: ApiMessage) {\n return global.fileUploads.byMessageLocalId[message.previousLocalId || message.id]?.progress;\n}\n\nexport function selectRealLastReadId(global: GlobalState, chatId: string, threadId: number) {\n if (threadId === MAIN_THREAD_ID) {\n const chat = selectChat(global, chatId);\n if (!chat) {\n return undefined;\n }\n\n // `lastReadInboxMessageId` is empty for new chats\n if (!chat.lastReadInboxMessageId) {\n return undefined;\n }\n\n if (!chat.lastMessage) {\n return chat.lastReadInboxMessageId;\n }\n\n if (isMessageLocal(chat.lastMessage)) {\n return chat.lastMessage.id;\n }\n\n // Some previously read messages may be deleted\n return Math.min(chat.lastMessage.id, chat.lastReadInboxMessageId);\n } else {\n const threadInfo = selectThreadInfo(global, chatId, threadId);\n if (!threadInfo) {\n return undefined;\n }\n\n if (!threadInfo.lastReadInboxMessageId) {\n return threadInfo.topMessageId;\n }\n\n // Some previously read messages may be deleted\n return Math.min(threadInfo.lastReadInboxMessageId, threadInfo.lastMessageId || Infinity);\n }\n}\n\nexport function selectFirstUnreadId(global: GlobalState, chatId: string, threadId: number) {\n const chat = selectChat(global, chatId);\n\n if (threadId === MAIN_THREAD_ID) {\n if (!chat) {\n return undefined;\n }\n } else {\n const threadInfo = selectThreadInfo(global, chatId, threadId);\n if (!threadInfo\n || (threadInfo.lastMessageId !== undefined && threadInfo.lastMessageId === threadInfo.lastReadInboxMessageId)) {\n return undefined;\n }\n }\n\n const outlyingIds = selectOutlyingIds(global, chatId, threadId);\n const listedIds = selectListedIds(global, chatId, threadId);\n const byId = selectChatMessages(global, chatId);\n if (!byId || !(outlyingIds || listedIds)) {\n return undefined;\n }\n\n const lastReadId = selectRealLastReadId(global, chatId, threadId);\n if (!lastReadId && chat && chat.isNotJoined) {\n return undefined;\n }\n\n const lastReadServiceNotificationId = chatId === SERVICE_NOTIFICATIONS_USER_ID\n ? global.serviceNotifications.reduce((max, notification) => {\n return !notification.isUnread && notification.id > max ? notification.id : max;\n }, -1)\n : -1;\n\n function findAfterLastReadId(listIds: number[]) {\n return listIds.find((id) => {\n return (\n (!lastReadId || id > lastReadId)\n && byId[id]\n && (!byId[id].isOutgoing || byId[id].isFromScheduled)\n && id > lastReadServiceNotificationId\n );\n });\n }\n\n if (outlyingIds) {\n const found = findAfterLastReadId(outlyingIds);\n if (found) {\n return found;\n }\n }\n\n if (listedIds) {\n const found = findAfterLastReadId(listedIds);\n if (found) {\n return found;\n }\n }\n\n return undefined;\n}\n\nexport function selectIsPollResultsOpen(global: GlobalState) {\n const { pollResults } = global;\n return Boolean(pollResults.messageId);\n}\n\nexport function selectIsForwardModalOpen(global: GlobalState) {\n const { forwardMessages } = global;\n return Boolean(forwardMessages.isModalShown);\n}\n\nexport function selectCommonBoxChatId(global: GlobalState, messageId: number) {\n const fromLastMessage = Object.values(global.chats.byId).find((chat) => (\n isCommonBoxChat(chat) && chat.lastMessage && chat.lastMessage.id === messageId\n ));\n if (fromLastMessage) {\n return fromLastMessage.id;\n }\n\n const { byChatId } = global.messages;\n return Object.keys(byChatId).find((chatId) => {\n const chat = selectChat(global, chatId);\n return chat && isCommonBoxChat(chat) && byChatId[chat.id].byId[messageId];\n });\n}\n\nexport function selectIsInSelectMode(global: GlobalState) {\n const { selectedMessages } = global;\n\n return Boolean(selectedMessages);\n}\n\nexport function selectIsMessageSelected(global: GlobalState, messageId: number) {\n const { messageIds } = global.selectedMessages || {};\n if (!messageIds) {\n return false;\n }\n\n return messageIds.includes(messageId);\n}\n\nexport function selectForwardedMessageIdsByGroupId(global: GlobalState, chatId: string, groupedId: string) {\n const chatMessages = selectChatMessages(global, chatId);\n if (!chatMessages) {\n return undefined;\n }\n\n return Object.values(chatMessages)\n .filter((message) => message.groupedId === groupedId && message.forwardInfo)\n .map(({ forwardInfo }) => forwardInfo!.fromMessageId);\n}\n\nexport function selectMessageIdsByGroupId(global: GlobalState, chatId: string, groupedId: string) {\n const chatMessages = selectChatMessages(global, chatId);\n if (!chatMessages) {\n return undefined;\n }\n\n return Object.keys(chatMessages)\n .map(Number)\n .filter((id) => chatMessages[id].groupedId === groupedId);\n}\n\nexport function selectIsDocumentGroupSelected(global: GlobalState, chatId: string, groupedId: string) {\n const { messageIds: selectedIds } = global.selectedMessages || {};\n if (!selectedIds) {\n return false;\n }\n\n const groupIds = selectMessageIdsByGroupId(global, chatId, groupedId);\n return groupIds && groupIds.every((id) => selectedIds.includes(id));\n}\n\nexport function selectSelectedMessagesCount(global: GlobalState) {\n const { messageIds } = global.selectedMessages || {};\n\n return messageIds ? messageIds.length : 0;\n}\n\nexport function selectNewestMessageWithBotKeyboardButtons(\n global: GlobalState, chatId: string,\n): ApiMessage | undefined {\n const chat = selectChat(global, chatId);\n if (!chat) {\n return undefined;\n }\n\n if (!selectIsChatWithBot(global, chat)) {\n return undefined;\n }\n\n const chatMessages = selectChatMessages(global, chatId);\n const viewportIds = selectViewportIds(global, chatId, MAIN_THREAD_ID);\n if (!chatMessages || !viewportIds) {\n return undefined;\n }\n\n const messageId = findLast(viewportIds, (id) => {\n return !chatMessages[id].isOutgoing && Boolean(chatMessages[id].keyboardButtons);\n });\n\n const replyHideMessageId = findLast(viewportIds, (id) => {\n return Boolean(chatMessages[id].shouldHideKeyboardButtons);\n });\n\n if (messageId && replyHideMessageId && replyHideMessageId > messageId) {\n return undefined;\n }\n\n return messageId ? chatMessages[messageId] : undefined;\n}\n\nexport function selectCanAutoLoadMedia(global: GlobalState, message: ApiMessage) {\n const chat = selectChat(global, message.chatId);\n if (!chat) {\n return undefined;\n }\n\n const sender = selectSender(global, message);\n\n const isPhoto = Boolean(getMessagePhoto(message) || getMessageWebPagePhoto(message));\n const isVideo = Boolean(getMessageVideo(message) || getMessageWebPageVideo(message));\n const isFile = Boolean(getMessageAudio(message) || getMessageVoice(message) || getMessageDocument(message));\n\n const {\n canAutoLoadPhotoFromContacts,\n canAutoLoadPhotoInPrivateChats,\n canAutoLoadPhotoInGroups,\n canAutoLoadPhotoInChannels,\n canAutoLoadVideoFromContacts,\n canAutoLoadVideoInPrivateChats,\n canAutoLoadVideoInGroups,\n canAutoLoadVideoInChannels,\n canAutoLoadFileFromContacts,\n canAutoLoadFileInPrivateChats,\n canAutoLoadFileInGroups,\n canAutoLoadFileInChannels,\n } = global.settings.byKey;\n\n if (isPhoto) {\n return canAutoLoadMedia({\n global,\n chat,\n sender,\n canAutoLoadMediaFromContacts: canAutoLoadPhotoFromContacts,\n canAutoLoadMediaInPrivateChats: canAutoLoadPhotoInPrivateChats,\n canAutoLoadMediaInGroups: canAutoLoadPhotoInGroups,\n canAutoLoadMediaInChannels: canAutoLoadPhotoInChannels,\n });\n }\n\n if (isVideo) {\n return canAutoLoadMedia({\n global,\n chat,\n sender,\n canAutoLoadMediaFromContacts: canAutoLoadVideoFromContacts,\n canAutoLoadMediaInPrivateChats: canAutoLoadVideoInPrivateChats,\n canAutoLoadMediaInGroups: canAutoLoadVideoInGroups,\n canAutoLoadMediaInChannels: canAutoLoadVideoInChannels,\n });\n }\n\n if (isFile) {\n return canAutoLoadMedia({\n global,\n chat,\n sender,\n canAutoLoadMediaFromContacts: canAutoLoadFileFromContacts,\n canAutoLoadMediaInPrivateChats: canAutoLoadFileInPrivateChats,\n canAutoLoadMediaInGroups: canAutoLoadFileInGroups,\n canAutoLoadMediaInChannels: canAutoLoadFileInChannels,\n });\n }\n\n return true;\n}\n\nfunction canAutoLoadMedia({\n global,\n chat,\n sender,\n canAutoLoadMediaFromContacts,\n canAutoLoadMediaInPrivateChats,\n canAutoLoadMediaInGroups,\n canAutoLoadMediaInChannels,\n}: {\n global: GlobalState;\n chat: ApiChat;\n canAutoLoadMediaFromContacts: boolean;\n canAutoLoadMediaInPrivateChats: boolean;\n canAutoLoadMediaInGroups: boolean;\n canAutoLoadMediaInChannels: boolean;\n sender?: ApiChat | ApiUser;\n}) {\n const isMediaFromContact = Boolean(sender && (\n sender.id === global.currentUserId || selectIsUserOrChatContact(global, sender)\n ));\n\n return Boolean(\n (isMediaFromContact && canAutoLoadMediaFromContacts)\n || (!isMediaFromContact && canAutoLoadMediaInPrivateChats && isUserId(chat.id))\n || (canAutoLoadMediaInGroups && isChatGroup(chat))\n || (canAutoLoadMediaInChannels && isChatChannel(chat)),\n );\n}\n\nexport function selectCanAutoPlayMedia(global: GlobalState, message: ApiMessage) {\n const video = getMessageVideo(message) || getMessageWebPageVideo(message);\n if (!video) {\n return undefined;\n }\n\n const {\n canAutoPlayVideos,\n canAutoPlayGifs,\n } = global.settings.byKey;\n\n const asGif = video.isGif || video.isRound;\n\n return (canAutoPlayVideos && !asGif) || (canAutoPlayGifs && asGif);\n}\n\nexport function selectShouldLoopStickers(global: GlobalState) {\n return global.settings.byKey.shouldLoopStickers;\n}\n\nexport function selectLastServiceNotification(global: GlobalState) {\n const { serviceNotifications } = global;\n const maxId = Math.max(...serviceNotifications.map(({ id }) => id));\n\n return serviceNotifications.find(({ id }) => id === maxId);\n}\n\nexport function selectIsMessageProtected(global: GlobalState, message?: ApiMessage) {\n return message ? message.isProtected || selectChat(global, message.chatId)?.isProtected : false;\n}\n\nexport function selectHasProtectedMessage(global: GlobalState, chatId: string, messageIds?: number[]) {\n if (selectChat(global, chatId)?.isProtected) {\n return true;\n }\n\n if (!messageIds) {\n return false;\n }\n\n const messages = selectChatMessages(global, chatId);\n\n return messageIds.some((messageId) => messages[messageId]?.isProtected);\n}\n\nexport function selectSponsoredMessage(global: GlobalState, chatId: string) {\n const chat = selectChat(global, chatId);\n const message = chat && isChatChannel(chat) ? global.messages.sponsoredByChatId[chatId] : undefined;\n\n return message && message.expiresAt >= Math.round(Date.now() / 1000) ? message : undefined;\n}\n\nexport function selectDefaultReaction(global: GlobalState, chatId: string) {\n if (chatId === SERVICE_NOTIFICATIONS_USER_ID) return undefined;\n\n const isPrivate = isUserId(chatId);\n const defaultReaction = global.appConfig?.defaultReaction;\n const { availableReactions } = global;\n if (!defaultReaction || !availableReactions?.some(\n (l) => l.reaction === defaultReaction && !l.isInactive,\n )) {\n return undefined;\n }\n\n if (isPrivate) {\n return defaultReaction;\n }\n\n const enabledReactions = selectChat(global, chatId)?.fullInfo?.enabledReactions;\n if (!enabledReactions?.includes(defaultReaction)) {\n return undefined;\n }\n\n return defaultReaction;\n}\n\n// Slow, not to be used in `withGlobal`\nexport function selectVisibleUsers(global: GlobalState) {\n const { chatId, threadId } = selectCurrentMessageList(global) || {};\n if (!chatId || !threadId) {\n return undefined;\n }\n\n const messageIds = selectThreadParam(global, chatId, threadId, 'viewportIds');\n if (!messageIds) {\n return undefined;\n }\n\n return messageIds.map((messageId) => {\n const { senderId } = selectChatMessage(global, chatId, messageId) || {};\n return senderId ? selectUser(global, senderId) : undefined;\n }).filter(Boolean);\n}\n\nexport function selectShouldSchedule(global: GlobalState) {\n return selectCurrentMessageList(global)?.type === 'scheduled';\n}\n\nexport function selectCanScheduleUntilOnline(global: GlobalState, id: string) {\n const isChatWithSelf = selectIsChatWithSelf(global, id);\n const chatBot = id === REPLIES_USER_ID && selectChatBot(global, id);\n return Boolean(\n !isChatWithSelf && !chatBot && isUserId(id) && selectUserStatus(global, id)?.wasOnline,\n );\n}\n","import { GlobalState } from '../types';\nimport { selectCurrentMessageList } from './messages';\nimport { buildChatThreadKey } from '../helpers';\n\nexport function selectCurrentTextSearch(global: GlobalState) {\n const { chatId, threadId } = selectCurrentMessageList(global) || {};\n if (!chatId || !threadId) {\n return undefined;\n }\n\n const chatThreadKey = buildChatThreadKey(chatId, threadId);\n const currentSearch = global.localTextSearch.byChatThreadKey[chatThreadKey];\n if (!currentSearch || !currentSearch.isActive) {\n return undefined;\n }\n\n return currentSearch;\n}\n\nexport function selectCurrentMediaSearch(global: GlobalState) {\n const { chatId } = selectCurrentMessageList(global) || {};\n if (!chatId) {\n return undefined;\n }\n\n return global.localMediaSearch.byChatId[chatId];\n}\n","import { GlobalState } from '../types';\n\nimport { selectCurrentMessageList } from './messages';\nimport { selectChat } from './chats';\n\nexport function selectStatistics(global: GlobalState, chatId: string) {\n return global.statistics.byChatId[chatId];\n}\n\nexport function selectIsStatisticsShown(global: GlobalState) {\n if (!global.isStatisticsShown) {\n return false;\n }\n\n const { chatId: currentChatId } = selectCurrentMessageList(global) || {};\n const chat = currentChatId ? selectChat(global, currentChatId) : undefined;\n\n return chat?.fullInfo?.canViewStatistics;\n}\n","import { GlobalState } from '../types';\n\nimport { selectCurrentMessageList } from './messages';\nimport { selectChat } from './chats';\nimport { isChatGroup, isUserId } from '../helpers';\n\nexport function selectManagement(global: GlobalState, chatId: string) {\n return global.management.byChatId[chatId];\n}\n\nexport function selectCurrentManagement(global: GlobalState) {\n const { chatId, threadId } = selectCurrentMessageList(global) || {};\n if (!chatId || !threadId) {\n return undefined;\n }\n\n const currentManagement = global.management.byChatId[chatId];\n if (!currentManagement || !currentManagement.isActive) {\n return undefined;\n }\n\n return currentManagement;\n}\n\nexport function selectCurrentManagementType(global: GlobalState) {\n const { chatId, threadId } = selectCurrentMessageList(global) || {};\n if (!chatId || !threadId) {\n return undefined;\n }\n\n if (isUserId(chatId)) {\n return 'user';\n }\n\n const chat = selectChat(global, chatId);\n if (!chat) {\n return undefined;\n }\n\n if (isChatGroup(chat)) {\n return 'group';\n }\n\n return 'channel';\n}\n","import { GlobalState } from '../types';\nimport { NewChatMembersProgress, RightColumnContent } from '../../types';\n\nimport { getSystemTheme, IS_SINGLE_COLUMN_LAYOUT } from '../../util/environment';\nimport { selectCurrentMessageList, selectIsPollResultsOpen } from './messages';\nimport { selectCurrentTextSearch } from './localSearch';\nimport { selectCurrentStickerSearch, selectCurrentGifSearch } from './symbols';\nimport { selectIsStatisticsShown } from './statistics';\nimport { selectCurrentManagement } from './management';\n\nexport function selectIsMediaViewerOpen(global: GlobalState) {\n const { mediaViewer } = global;\n return Boolean(mediaViewer.messageId || mediaViewer.avatarOwnerId);\n}\n\nexport function selectRightColumnContentKey(global: GlobalState) {\n return selectIsPollResultsOpen(global) ? (\n RightColumnContent.PollResults\n ) : !IS_SINGLE_COLUMN_LAYOUT && selectCurrentTextSearch(global) ? (\n RightColumnContent.Search\n ) : selectCurrentManagement(global) ? (\n RightColumnContent.Management\n ) : selectIsStatisticsShown(global) ? (\n RightColumnContent.Statistics\n ) : selectCurrentStickerSearch(global).query !== undefined ? (\n RightColumnContent.StickerSearch\n ) : selectCurrentGifSearch(global).query !== undefined ? (\n RightColumnContent.GifSearch\n ) : global.newChatMembersProgress !== NewChatMembersProgress.Closed ? (\n RightColumnContent.AddingMembers\n ) : global.isChatInfoShown && selectCurrentMessageList(global) ? (\n RightColumnContent.ChatInfo\n ) : undefined;\n}\n\nexport function selectIsRightColumnShown(global: GlobalState) {\n return selectRightColumnContentKey(global) !== undefined;\n}\n\nexport function selectTheme(global: GlobalState) {\n const { theme, shouldUseSystemTheme } = global.settings.byKey;\n\n return shouldUseSystemTheme ? getSystemTheme() : theme;\n}\n","import { GlobalState } from '../types';\n\nexport function selectCurrentGlobalSearchQuery(global: GlobalState) {\n return global.globalSearch.query;\n}\n","import { GlobalState } from '../types';\n\nexport function selectPaymentChatId(global: GlobalState) {\n return global.payment.chatId;\n}\n\nexport function selectPaymentMessageId(global: GlobalState) {\n return global.payment.messageId;\n}\n\nexport function selectPaymentFormId(global: GlobalState) {\n return global.payment.formId;\n}\n\nexport function selectPaymentRequestId(global: GlobalState) {\n return global.payment.requestId;\n}\n\nexport function selectProviderPublishableKey(global: GlobalState) {\n return global.payment.nativeParams?.publishableKey;\n}\n\nexport function selectProviderPublicToken(global: GlobalState) {\n return global.payment.nativeParams?.publicToken;\n}\n\nexport function selectStripeCredentials(global: GlobalState) {\n return global.payment.stripeCredentials;\n}\n\nexport function selectSmartGlocalCredentials(global: GlobalState) {\n return global.payment.smartGlocalCredentials;\n}\n","import { GlobalState } from '../types';\n\nexport function selectNotifySettings(global: GlobalState) {\n return global.settings.byKey;\n}\n\nexport function selectNotifyExceptions(global: GlobalState) {\n return global.settings.notifyExceptions;\n}\n","import { GlobalState } from '../types';\nimport { ApiChat, ApiUser, ApiUserStatus } from '../../api/types';\n\nexport function selectUser(global: GlobalState, userId: string): ApiUser | undefined {\n return global.users.byId[userId];\n}\n\nexport function selectUserStatus(global: GlobalState, userId: string): ApiUserStatus | undefined {\n return global.users.statusesById[userId];\n}\n\nexport function selectIsUserBlocked(global: GlobalState, userId: string) {\n const user = selectUser(global, userId);\n\n return user?.fullInfo?.isBlocked;\n}\n\n// Slow, not to be used in `withGlobal`\nexport function selectUserByUsername(global: GlobalState, username: string) {\n const usernameLowered = username.toLowerCase();\n return Object.values(global.users.byId).find(\n (user) => user.username.toLowerCase() === usernameLowered,\n );\n}\n\n// Slow, not to be used in `withGlobal`\nexport function selectUserByPhoneNumber(global: GlobalState, phoneNumber: string) {\n const phoneNumberCleaned = phoneNumber.replace(/[^0-9]/g, '');\n\n return Object.values(global.users.byId).find((user) => user?.phoneNumber === phoneNumberCleaned);\n}\n\nexport function selectIsUserOrChatContact(global: GlobalState, userOrChat: ApiUser | ApiChat) {\n return global.contactList && global.contactList.userIds.includes(userOrChat.id);\n}\n","import { useEffect } from '../lib/teact/teact';\n\nexport default function useBackgroundMode(\n onBlur?: AnyToVoidFunction,\n onFocus?: AnyToVoidFunction,\n) {\n useEffect(() => {\n if (onBlur && !document.hasFocus()) {\n onBlur();\n }\n\n if (onBlur) {\n window.addEventListener('blur', onBlur);\n }\n\n if (onFocus) {\n window.addEventListener('focus', onFocus);\n }\n\n return () => {\n if (onFocus) {\n window.removeEventListener('focus', onFocus);\n }\n\n if (onBlur) {\n window.removeEventListener('blur', onBlur);\n }\n };\n }, [onBlur, onFocus]);\n}\n","import { useEffect } from '../lib/teact/teact';\nimport usePrevious from './usePrevious';\n\nconst useEffectWithPrevDeps = (\n cb: (args: T | readonly []) => void, dependencies: T, debugKey?: string,\n) => {\n const prevDeps = usePrevious(dependencies);\n return useEffect(() => {\n return cb(prevDeps || []);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, dependencies, debugKey);\n};\n\nexport default useEffectWithPrevDeps;\n","import { useCallback, useState } from '../lib/teact/teact';\n\nconst useFlag = (initial = false): [boolean, AnyToVoidFunction, AnyToVoidFunction] => {\n const [value, setValue] = useState(initial);\n\n const setTrue = useCallback(() => {\n setValue(true);\n }, []);\n\n const setFalse = useCallback(() => {\n setValue(false);\n }, []);\n\n return [value, setTrue, setFalse];\n};\n\nexport default useFlag;\n","import { useCallback, useState } from '../lib/teact/teact';\n\nconst useForceUpdate = () => {\n const [, setTrigger] = useState(false);\n\n return useCallback(() => {\n setTrigger((trigger) => !trigger);\n }, []);\n};\n\nexport default useForceUpdate;\n","import { useEffect } from '../lib/teact/teact';\n\nconst ANIMATION_START_EVENT = 'tt-event-heavy-animation-start';\nconst ANIMATION_END_EVENT = 'tt-event-heavy-animation-end';\n\nlet timeout: number | undefined;\nlet isAnimating = false;\n\n// Make sure to end even if end callback was not called (which was some hardly-reproducible bug)\nconst AUTO_END_TIMEOUT = 1000;\n\nconst useHeavyAnimationCheck = (\n handleAnimationStart: AnyToVoidFunction,\n handleAnimationEnd: AnyToVoidFunction,\n isDisabled = false,\n) => {\n useEffect(() => {\n if (isDisabled) {\n return undefined;\n }\n\n if (isAnimating) {\n handleAnimationStart();\n }\n\n document.addEventListener(ANIMATION_START_EVENT, handleAnimationStart);\n document.addEventListener(ANIMATION_END_EVENT, handleAnimationEnd);\n\n return () => {\n document.removeEventListener(ANIMATION_END_EVENT, handleAnimationEnd);\n document.removeEventListener(ANIMATION_START_EVENT, handleAnimationStart);\n };\n }, [isDisabled, handleAnimationEnd, handleAnimationStart]);\n};\n\nexport function isHeavyAnimating() {\n return isAnimating;\n}\n\nexport function dispatchHeavyAnimationEvent(duration = AUTO_END_TIMEOUT) {\n if (!isAnimating) {\n isAnimating = true;\n document.dispatchEvent(new Event(ANIMATION_START_EVENT));\n }\n\n if (timeout) {\n clearTimeout(timeout);\n timeout = undefined;\n }\n\n // Race condition may happen if another `dispatchHeavyAnimationEvent` is called before `onEnd`\n function onEnd() {\n if (timeout) {\n clearTimeout(timeout);\n timeout = undefined;\n }\n\n isAnimating = false;\n document.dispatchEvent(new Event(ANIMATION_END_EVENT));\n }\n\n timeout = window.setTimeout(onEnd, duration);\n\n return onEnd;\n}\n\nexport default useHeavyAnimationCheck;\n","import { useCallback, useEffect, useRef } from '../lib/teact/teact';\n\nimport { IS_IOS } from '../util/environment';\nimport usePrevious from './usePrevious';\nimport { getActions } from '../global';\nimport { areSortedArraysEqual } from '../util/iteratees';\n\ntype HistoryState = {\n currentIndex: number;\n nextStateIndexToReplace: number;\n isHistoryAltered: boolean;\n isDisabled: boolean;\n isEdge: boolean;\n currentIndexes: number[];\n};\n\n// Carefully selected by swiping and observing visual changes\n// TODO: may be different on other devices such as iPad, maybe take dpi into account?\nconst SAFARI_EDGE_BACK_GESTURE_LIMIT = 300;\nconst SAFARI_EDGE_BACK_GESTURE_DURATION = 350;\nexport const LOCATION_HASH = window.location.hash;\nconst PATH_BASE = `${window.location.pathname}${window.location.search}`;\n\nconst historyState: HistoryState = {\n currentIndex: 0,\n nextStateIndexToReplace: -1,\n isHistoryAltered: false,\n isDisabled: false,\n isEdge: false,\n currentIndexes: [],\n};\n\nexport const disableHistoryBack = () => {\n historyState.isDisabled = true;\n};\n\nconst handleTouchStart = (event: TouchEvent) => {\n const x = event.touches[0].pageX;\n\n if (x <= SAFARI_EDGE_BACK_GESTURE_LIMIT || x >= window.innerWidth - SAFARI_EDGE_BACK_GESTURE_LIMIT) {\n historyState.isEdge = true;\n }\n};\n\nconst handleTouchEnd = () => {\n if (historyState.isEdge) {\n setTimeout(() => {\n historyState.isEdge = false;\n }, SAFARI_EDGE_BACK_GESTURE_DURATION);\n }\n};\n\nif (IS_IOS) {\n window.addEventListener('touchstart', handleTouchStart);\n window.addEventListener('touchend', handleTouchEnd);\n window.addEventListener('popstate', handleTouchEnd);\n}\n\nwindow.history.replaceState({ index: historyState.currentIndex }, '', PATH_BASE);\n\nexport default function useHistoryBack(\n isActive: boolean | undefined,\n onBack: ((noDisableAnimation: boolean) => void) | undefined,\n onForward?: (state: any) => void,\n currentState?: any,\n shouldReplaceNext = false,\n hashes?: string[],\n) {\n const indexRef = useRef(-1);\n const isForward = useRef(false);\n const prevIsActive = usePrevious(isActive);\n const isClosed = useRef(true);\n const indexHashRef = useRef<{ index: number; hash: string }[]>([]);\n const prevHashes = usePrevious(hashes);\n const isHashChangedFromEvent = useRef(false);\n\n const handleChange = useCallback((isForceClose = false) => {\n if (!hashes) {\n if (isActive && !isForceClose) {\n isClosed.current = false;\n\n if (isForward.current) {\n isForward.current = false;\n historyState.currentIndexes.push(indexRef.current);\n } else {\n setTimeout(() => {\n const index = ++historyState.currentIndex;\n\n historyState.currentIndexes.push(index);\n\n window.history[(\n (\n historyState.currentIndexes.includes(historyState.nextStateIndexToReplace - 1)\n && window.history.state.index !== 0\n && historyState.nextStateIndexToReplace === index\n && !shouldReplaceNext\n )\n ? 'replaceState'\n : 'pushState'\n )]({\n index,\n state: currentState,\n }, '');\n\n indexRef.current = index;\n\n if (shouldReplaceNext) {\n historyState.nextStateIndexToReplace = historyState.currentIndex + 1;\n }\n }, 0);\n }\n }\n\n if ((isForceClose || !isActive) && !isClosed.current) {\n if ((indexRef.current === historyState.currentIndex || !shouldReplaceNext)) {\n historyState.isHistoryAltered = true;\n window.history.back();\n\n setTimeout(() => {\n historyState.nextStateIndexToReplace = -1;\n }, 400);\n }\n historyState.currentIndexes.splice(historyState.currentIndexes.indexOf(indexRef.current), 1);\n\n isClosed.current = true;\n }\n } else {\n const prev = prevHashes || [];\n if (prev.length < hashes.length) {\n setTimeout(() => {\n const index = ++historyState.currentIndex;\n historyState.currentIndexes.push(index);\n\n window.history.pushState({\n index,\n state: currentState,\n }, '', `#${hashes[hashes.length - 1]}`);\n\n indexHashRef.current.push({\n index,\n hash: hashes[hashes.length - 1],\n });\n }, 0);\n } else {\n const delta = prev.length - hashes.length;\n if (isHashChangedFromEvent.current) {\n isHashChangedFromEvent.current = false;\n } else {\n if (hashes.length !== indexHashRef.current.length) {\n if (delta > 0) {\n const last = indexHashRef.current[indexHashRef.current.length - delta - 1];\n let realDelta = delta;\n if (last) {\n const indexLast = historyState.currentIndexes.findIndex(\n (l) => l === last.index,\n );\n realDelta = historyState.currentIndexes.length - indexLast - 1;\n }\n historyState.isHistoryAltered = true;\n window.history.go(-realDelta);\n const removed = indexHashRef.current.splice(indexHashRef.current.length - delta - 1, delta);\n removed.forEach(({ index }) => {\n historyState.currentIndexes.splice(historyState.currentIndexes.indexOf(index), 1);\n });\n }\n }\n\n if (hashes.length > 0) {\n setTimeout(() => {\n const index = ++historyState.currentIndex;\n historyState.currentIndexes[historyState.currentIndexes.length - 1] = index;\n\n window.history.replaceState({\n index,\n state: currentState,\n }, '', `${PATH_BASE}#${hashes[hashes.length - 1]}`);\n\n indexHashRef.current[indexHashRef.current.length - 1] = {\n index,\n hash: hashes[hashes.length - 1],\n };\n }, 0);\n }\n }\n }\n }\n }, [currentState, hashes, isActive, prevHashes, shouldReplaceNext]);\n\n useEffect(() => {\n const handlePopState = (event: PopStateEvent) => {\n if (historyState.isHistoryAltered) {\n setTimeout(() => {\n historyState.isHistoryAltered = false;\n }, 0);\n return;\n }\n const { index: i } = event.state;\n const index = i || 0;\n try {\n const currIndex = hashes ? indexHashRef.current[indexHashRef.current.length - 1].index : indexRef.current;\n\n const prev = historyState.currentIndexes[historyState.currentIndexes.indexOf(currIndex) - 1];\n\n if (historyState.isDisabled) return;\n\n if ((!isClosed.current && (index === 0 || index === prev)) || (hashes && (index === 0 || index === prev))) {\n if (hashes) {\n isHashChangedFromEvent.current = true;\n indexHashRef.current.pop();\n }\n\n historyState.currentIndexes.splice(historyState.currentIndexes.indexOf(currIndex), 1);\n\n if (onBack) {\n if (historyState.isEdge) {\n getActions()\n .disableHistoryAnimations();\n }\n onBack(!historyState.isEdge);\n isClosed.current = true;\n }\n } else if (index === currIndex && isClosed.current && onForward && !hashes) {\n isForward.current = true;\n if (historyState.isEdge) {\n getActions()\n .disableHistoryAnimations();\n }\n onForward(event.state.state);\n }\n } catch (e) {\n // Forward navigation for hashed is not supported\n }\n };\n\n const hasChanged = hashes\n ? (!prevHashes || !areSortedArraysEqual(prevHashes, hashes))\n : prevIsActive !== isActive;\n\n if (!historyState.isDisabled && hasChanged) {\n handleChange();\n }\n\n window.addEventListener('popstate', handlePopState);\n return () => window.removeEventListener('popstate', handlePopState);\n }, [\n currentState, handleChange, hashes, isActive, onBack, onForward, prevHashes, prevIsActive, shouldReplaceNext,\n ]);\n\n return {\n forceClose: () => handleChange(true),\n };\n}\n","import { RefObject } from 'react';\nimport { useState, useCallback, useEffect } from '../lib/teact/teact';\n\nconst useKeyboardListNavigation = (\n elementRef: RefObject,\n isOpen: boolean,\n onSelectWithEnter?: (index: number) => void,\n itemSelector?: string,\n noCaptureFocus?: boolean,\n) => {\n const [focusedIndex, setFocusedIndex] = useState(-1);\n\n useEffect(() => {\n setFocusedIndex(-1);\n\n const element = elementRef.current;\n if (isOpen && element && !noCaptureFocus) {\n element.tabIndex = -1;\n element.focus();\n }\n }, [elementRef, isOpen, noCaptureFocus]);\n\n const handleKeyDown = useCallback((e: React.KeyboardEvent) => {\n const element = elementRef.current;\n\n if (!element) {\n return;\n }\n\n if (e.keyCode === 13 && onSelectWithEnter) {\n onSelectWithEnter(focusedIndex);\n return;\n }\n\n if (e.keyCode !== 38 && e.keyCode !== 40) {\n return;\n }\n\n const focusedElement = document.activeElement;\n const elementChildren = Array.from(itemSelector ? element.querySelectorAll(itemSelector) : element.children);\n\n let newIndex = (focusedElement && elementChildren.indexOf(focusedElement)) || focusedIndex;\n\n if (e.keyCode === 38 && newIndex > 0) {\n newIndex--;\n } else if (e.keyCode === 40 && newIndex < elementChildren.length - 1) {\n newIndex++;\n } else if (elementChildren.length === 1) {\n newIndex = 0;\n } else {\n return;\n }\n\n const item = elementChildren[newIndex] as HTMLElement;\n if (item) {\n setFocusedIndex(newIndex);\n item.focus();\n }\n }, [elementRef, onSelectWithEnter, itemSelector, focusedIndex]);\n\n return handleKeyDown;\n};\n\nexport default useKeyboardListNavigation;\n","import * as langProvider from '../util/langProvider';\nimport useForceUpdate from './useForceUpdate';\nimport useOnChange from './useOnChange';\n\nexport type LangFn = typeof langProvider.getTranslation;\n\nconst useLang = (): LangFn => {\n const forceUpdate = useForceUpdate();\n\n useOnChange(() => {\n return langProvider.addCallback(forceUpdate);\n }, [forceUpdate]);\n\n return langProvider.getTranslation;\n};\n\nexport default useLang;\n","import { useEffect } from '../lib/teact/teact';\n\nimport {\n BundleModules, Bundles, getModuleFromMemory, loadModule, addLoadListener,\n} from '../util/moduleLoader';\n\nimport useForceUpdate from './useForceUpdate';\n\nconst useModuleLoader = >(\n bundleName: B, moduleName: M, noLoad = false, autoUpdate = false,\n) => {\n const module = getModuleFromMemory(bundleName, moduleName);\n const forceUpdate = useForceUpdate();\n\n useEffect(() => {\n if (!autoUpdate) {\n return undefined;\n }\n\n return addLoadListener(forceUpdate);\n }, [autoUpdate, forceUpdate]);\n\n useEffect(() => {\n if (!noLoad && !module) {\n loadModule(bundleName, moduleName).then(forceUpdate);\n }\n }, [bundleName, forceUpdate, module, moduleName, noLoad]);\n\n return module;\n};\n\nexport default useModuleLoader;\n","import usePrevious from './usePrevious';\n\nconst useOnChange = (cb: (args: T | readonly []) => void, dependencies: T) => {\n const prevDeps = usePrevious(dependencies);\n if (!prevDeps || dependencies.some((d, i) => d !== prevDeps[i])) {\n cb(prevDeps || []);\n }\n};\n\nexport default useOnChange;\n","import { useRef } from '../lib/teact/teact';\n\nfunction usePrevious(next: T): T | undefined;\nfunction usePrevious(next: T, shouldSkipUndefined: true): Exclude | undefined;\nfunction usePrevious(next: T, shouldSkipUndefined?: boolean): Exclude | undefined;\nfunction usePrevious(next: T, shouldSkipUndefined?: boolean) {\n const ref = useRef();\n const { current } = ref;\n if (!shouldSkipUndefined || next !== undefined) {\n ref.current = next;\n }\n\n return current;\n}\n\nexport default usePrevious;\n","import { useRef, useState } from '../lib/teact/teact';\nimport buildClassName from '../util/buildClassName';\n\nconst CLOSE_DURATION = 350;\n\nconst useShowTransition = (\n isOpen = false,\n onCloseTransitionEnd?: () => void,\n noOpenTransition = false,\n className: string | false = 'fast',\n noCloseTransition = false,\n) => {\n const [isClosed, setIsClosed] = useState(!isOpen);\n const closeTimeoutRef = useRef();\n // СSS class should be added in a separate tick to turn on CSS transition.\n const [hasOpenClassName, setHasOpenClassName] = useState(isOpen && noOpenTransition);\n\n if (isOpen) {\n setIsClosed(false);\n setHasOpenClassName(true);\n\n if (closeTimeoutRef.current) {\n window.clearTimeout(closeTimeoutRef.current);\n closeTimeoutRef.current = undefined;\n }\n } else {\n setHasOpenClassName(false);\n\n if (!isClosed && !closeTimeoutRef.current) {\n const exec = () => {\n setIsClosed(true);\n\n if (onCloseTransitionEnd) {\n onCloseTransitionEnd();\n }\n\n closeTimeoutRef.current = undefined;\n };\n\n if (noCloseTransition) {\n exec();\n } else {\n closeTimeoutRef.current = window.setTimeout(exec, CLOSE_DURATION);\n }\n }\n }\n\n // `noCloseTransition`, when set to true, should remove the open class immediately\n const shouldHaveOpenClassName = hasOpenClassName && !(noCloseTransition && !isOpen);\n const isClosing = Boolean(closeTimeoutRef.current);\n const shouldRender = isOpen || isClosing;\n const transitionClassNames = buildClassName(\n className && 'opacity-transition',\n className,\n shouldHaveOpenClassName && 'open',\n shouldRender && 'shown',\n isClosing && 'closing',\n );\n\n return {\n shouldRender,\n transitionClassNames,\n };\n};\n\nexport default useShowTransition;\n","import { RefObject } from 'react';\nimport { useEffect } from '../lib/teact/teact';\n\nconst BACKDROP_CLASSNAME = 'backdrop';\n\n// This effect implements closing menus by clicking outside of them\n// without adding extra elements to the DOM\nexport default function useVirtualBackdrop(\n isOpen: boolean,\n menuRef: RefObject,\n onClose?: () => void | undefined,\n) {\n useEffect(() => {\n const handleEvent = (e: Event) => {\n const menu = menuRef.current;\n const target = e.target as HTMLElement | null;\n if (!menu || !target) {\n return;\n }\n\n if (\n !menu.contains(e.target as Node | null)\n || target.classList.contains(BACKDROP_CLASSNAME)\n ) {\n e.preventDefault();\n e.stopPropagation();\n if (onClose) {\n onClose();\n }\n }\n };\n\n if (isOpen && onClose) {\n document.addEventListener('mousedown', handleEvent);\n }\n\n return () => {\n document.removeEventListener('mousedown', handleEvent);\n };\n }, [isOpen, menuRef, onClose]);\n}\n","import { DEBUG } from '../../config';\n\ntype Handler = (e: Event) => void;\ntype DelegationRegistry = Map;\n\nconst NON_BUBBLEABLE_EVENTS = new Set(['scroll', 'mouseenter', 'mouseleave', 'load']);\n\nconst documentEventCounters: Record = {};\nconst delegationRegistryByEventType: Record = {};\nconst delegatedEventTypesByElement = new Map>();\n\nexport function addEventListener(element: HTMLElement, propName: string, handler: Handler, asCapture = false) {\n const eventType = resolveEventType(propName, element);\n if (canUseEventDelegation(eventType, element, asCapture)) {\n addDelegatedListener(eventType, element, handler);\n } else {\n element.addEventListener(eventType, handler, asCapture);\n }\n}\n\nexport function removeEventListener(element: HTMLElement, propName: string, handler: Handler, asCapture = false) {\n const eventType = resolveEventType(propName, element);\n if (canUseEventDelegation(eventType, element, asCapture)) {\n removeDelegatedListener(eventType, element);\n } else {\n element.removeEventListener(eventType, handler, asCapture);\n }\n}\n\nfunction resolveEventType(propName: string, element: HTMLElement) {\n const eventType = propName\n .replace(/^on/, '')\n .replace(/Capture$/, '').toLowerCase();\n\n if (eventType === 'change' && element.tagName !== 'SELECT') {\n // React behavior repeated here.\n // https://stackoverflow.com/questions/38256332/in-react-whats-the-difference-between-onchange-and-oninput\n return 'input';\n }\n\n if (eventType === 'doubleclick') {\n return 'dblclick';\n }\n\n // Replace focus/blur by their \"bubbleable\" versions\n if (eventType === 'focus') {\n return 'focusin';\n }\n\n if (eventType === 'blur') {\n return 'focusout';\n }\n\n return eventType;\n}\n\nfunction canUseEventDelegation(realEventType: string, element: HTMLElement, asCapture: boolean) {\n return (\n !asCapture\n && !NON_BUBBLEABLE_EVENTS.has(realEventType)\n && element.tagName !== 'VIDEO'\n && element.tagName !== 'IFRAME'\n );\n}\n\nfunction addDelegatedListener(eventType: string, element: HTMLElement, handler: Handler) {\n if (!documentEventCounters[eventType]) {\n documentEventCounters[eventType] = 0;\n document.addEventListener(eventType, handleEvent);\n }\n\n resolveDelegationRegistry(eventType).set(element, handler);\n resolveDelegatedEventTypes(element).add(eventType);\n documentEventCounters[eventType]++;\n}\n\nfunction removeDelegatedListener(eventType: string, element: HTMLElement) {\n documentEventCounters[eventType]--;\n if (!documentEventCounters[eventType]) {\n // Synchronous deletion on 0 will cause perf degradation in the case of 1 element\n // which is not a real case, so it's ok to do it this way\n document.removeEventListener(eventType, handleEvent);\n }\n\n delegationRegistryByEventType[eventType].delete(element);\n delegatedEventTypesByElement.get(element)!.delete(eventType);\n}\n\nexport function removeAllDelegatedListeners(element: HTMLElement) {\n const eventTypes = delegatedEventTypesByElement.get(element);\n if (!eventTypes) {\n return;\n }\n\n eventTypes.forEach((eventType) => removeDelegatedListener(eventType, element));\n delegatedEventTypesByElement.delete(element);\n}\n\nfunction handleEvent(realEvent: Event) {\n const events = delegationRegistryByEventType[realEvent.type];\n\n if (events) {\n let furtherCallsPrevented = false;\n let current: HTMLElement = realEvent.target as HTMLElement;\n\n const stopPropagation = () => {\n furtherCallsPrevented = true;\n };\n\n const preventDefault = () => {\n realEvent.preventDefault();\n };\n\n // Proxy is a simplest way to provide an access to the event property\n const event = new Proxy(realEvent, {\n get(target, p) {\n if (p === 'currentTarget') {\n return current;\n }\n if (p === 'stopPropagation' || p === 'stopImmediatePropagation') {\n return stopPropagation;\n }\n if (p === 'preventDefault') {\n // \"this\" is changed to proxy and one can't call methods via it\n return preventDefault;\n }\n return Reflect.get(target, p);\n },\n });\n\n // This can also be limited by teact root\n while (current && current !== document.body) {\n const handler = events.get(current);\n if (handler) {\n handler(event);\n if (furtherCallsPrevented) {\n return;\n }\n }\n\n current = current.parentNode as HTMLElement;\n }\n }\n}\n\nfunction resolveDelegationRegistry(eventType: string) {\n if (!delegationRegistryByEventType[eventType]) {\n delegationRegistryByEventType[eventType] = new Map();\n }\n\n return delegationRegistryByEventType[eventType];\n}\n\nfunction resolveDelegatedEventTypes(element: HTMLElement) {\n const existing = delegatedEventTypesByElement.get(element);\n if (existing) {\n return existing;\n }\n\n const newSet = new Set();\n delegatedEventTypesByElement.set(element, newSet);\n\n return newSet;\n}\n\nif (DEBUG) {\n document.addEventListener('dblclick', () => {\n const documentListenersCount = Object.keys(documentEventCounters).length;\n const delegatedHandlersCount1 = Object.values(documentEventCounters)\n .reduce((acc, counter) => acc + counter, 0);\n const delegationRegistriesCount = Object.keys(delegationRegistryByEventType).length;\n const delegatedHandlersCount2 = Object.values(delegationRegistryByEventType)\n .reduce((acc, delegationRegistry) => acc + delegationRegistry.size, 0);\n const delegationElementsCount = delegatedEventTypesByElement.size;\n const delegatedEventTypesCount = Array.from(delegatedEventTypesByElement.values())\n .reduce((acc, eventTypes) => acc + eventTypes.size, 0);\n\n // eslint-disable-next-line no-console\n console.warn('DELEGATED EVENTS STATS', {\n delegatedHandlersCount1,\n delegatedHandlersCount2,\n delegatedEventTypesCount,\n delegationRegistriesCount,\n delegationElementsCount,\n documentListenersCount,\n });\n });\n}\n","import {\n hasElementChanged,\n isComponentElement,\n isEmptyElement,\n isRealElement,\n isTextElement,\n mountComponent,\n renderComponent,\n unmountTree,\n getTarget,\n setTarget,\n VirtualElement,\n VirtualElementComponent,\n VirtualRealElement,\n VirtualElementChildren,\n} from './teact';\nimport generateIdFor from '../../util/generateIdFor';\nimport { DEBUG } from '../../config';\nimport { addEventListener, removeEventListener } from './dom-events';\nimport { unique } from '../../util/iteratees';\n\ntype VirtualDomHead = {\n children: [VirtualElement] | [];\n};\n\nconst FILTERED_ATTRIBUTES = new Set(['key', 'ref', 'teactFastList', 'teactOrderKey']);\nconst HTML_ATTRIBUTES = new Set(['dir', 'role']);\nconst MAPPED_ATTRIBUTES: { [k: string]: string } = {\n autoPlay: 'autoplay',\n autoComplete: 'autocomplete',\n};\nconst INDEX_KEY_PREFIX = '__indexKey#';\n\nconst headsByElement: Record = {};\n// eslint-disable-next-line @typescript-eslint/naming-convention\nlet DEBUG_virtualTreeSize = 1;\n\nfunction render($element?: VirtualElement, parentEl?: HTMLElement | null) {\n if (!parentEl) {\n return undefined;\n }\n\n let headId = parentEl.getAttribute('data-teact-head-id');\n if (!headId) {\n headId = generateIdFor(headsByElement);\n headsByElement[headId] = { children: [] };\n parentEl.setAttribute('data-teact-head-id', headId);\n }\n\n const $head = headsByElement[headId];\n $head.children = [renderWithVirtual(parentEl, $head.children[0], $element, $head, 0) as VirtualElement];\n\n if (process.env.APP_ENV === 'perf') {\n DEBUG_virtualTreeSize = 0;\n DEBUG_addToVirtualTreeSize($head);\n\n return DEBUG_virtualTreeSize;\n }\n\n return undefined;\n}\n\nfunction renderWithVirtual(\n parentEl: HTMLElement,\n $current: VirtualElement | undefined,\n $new: VirtualElement | undefined,\n $parent: VirtualRealElement | VirtualDomHead,\n index: number,\n {\n skipComponentUpdate = false,\n forceIndex = false,\n fragment,\n moveDirection,\n }: {\n skipComponentUpdate?: boolean;\n forceIndex?: boolean;\n fragment?: DocumentFragment;\n moveDirection?: 'up' | 'down';\n } = {},\n) {\n const isCurrentComponent = $current && isComponentElement($current);\n const isNewComponent = $new && isComponentElement($new);\n\n if (\n !skipComponentUpdate\n && isCurrentComponent && isNewComponent\n && !hasElementChanged($current!, $new!)\n ) {\n $new = updateComponent($current as VirtualElementComponent, $new as VirtualElementComponent);\n }\n\n // Parent element may have changed, so we need to update the listener closure.\n if (!skipComponentUpdate && isNewComponent && ($new as VirtualElementComponent).componentInstance.isMounted) {\n setupComponentUpdateListener($new as VirtualElementComponent, $parent, index, parentEl);\n }\n\n if ($current === $new) {\n return $new;\n }\n\n if (DEBUG && $new) {\n const newTarget = getTarget($new);\n if (newTarget && (!$current || newTarget !== getTarget($current))) {\n throw new Error('[Teact] Cached virtual element was moved within tree');\n }\n }\n\n if (!$current && $new) {\n if (isNewComponent) {\n $new = initComponent($new as VirtualElementComponent, $parent, index, parentEl);\n }\n\n const node = createNode($new);\n setTarget($new, node);\n\n if (forceIndex && parentEl.childNodes[index]) {\n parentEl.insertBefore(node, parentEl.childNodes[index]);\n } else {\n (fragment || parentEl).appendChild(node);\n }\n } else if ($current && !$new) {\n parentEl.removeChild(getTarget($current)!);\n unmountTree($current);\n } else if ($current && $new) {\n if (hasElementChanged($current, $new)) {\n if (isNewComponent) {\n $new = initComponent($new as VirtualElementComponent, $parent, index, parentEl);\n }\n\n const node = createNode($new);\n setTarget($new, node);\n parentEl.replaceChild(node, getTarget($current)!);\n unmountTree($current);\n } else {\n const areComponents = isCurrentComponent && isNewComponent;\n const currentTarget = getTarget($current);\n\n if (!areComponents) {\n setTarget($new, currentTarget!);\n setTarget($current, undefined as any); // Help GC\n\n if ('props' in $current && 'props' in $new) {\n $new.props.ref = $current.props.ref;\n }\n }\n\n if (isRealElement($new)) {\n if (moveDirection) {\n const node = currentTarget!;\n const nextSibling = parentEl.childNodes[moveDirection === 'up' ? index : index + 1];\n\n if (nextSibling) {\n parentEl.insertBefore(node, nextSibling);\n } else {\n (fragment || parentEl).appendChild(node);\n }\n }\n\n if (!areComponents) {\n updateAttributes(($current as VirtualRealElement), $new, currentTarget as HTMLElement);\n }\n\n $new.children = renderChildren(\n ($current as VirtualRealElement),\n $new,\n areComponents ? parentEl : currentTarget as HTMLElement,\n );\n }\n }\n }\n\n return $new;\n}\n\nfunction initComponent(\n $element: VirtualElementComponent, $parent: VirtualRealElement | VirtualDomHead, index: number, parentEl: HTMLElement,\n) {\n if (!isComponentElement($element)) {\n return $element;\n }\n\n const { componentInstance } = $element;\n\n if (!componentInstance.isMounted) {\n $element = mountComponent(componentInstance);\n setupComponentUpdateListener($element, $parent, index, parentEl);\n\n const $firstChild = $element.children[0];\n if (isComponentElement($firstChild)) {\n $element.children = [initComponent($firstChild, $element, 0, parentEl)];\n }\n\n componentInstance.isMounted = true;\n }\n\n return $element;\n}\n\nfunction updateComponent($current: VirtualElementComponent, $new: VirtualElementComponent) {\n $current.componentInstance.props = $new.componentInstance.props;\n\n return renderComponent($current.componentInstance);\n}\n\nfunction setupComponentUpdateListener(\n $element: VirtualElementComponent, $parent: VirtualRealElement | VirtualDomHead, index: number, parentEl: HTMLElement,\n) {\n const { componentInstance } = $element;\n\n componentInstance.onUpdate = () => {\n $parent.children[index] = renderWithVirtual(\n parentEl,\n $parent.children[index],\n componentInstance.$element,\n $parent,\n index,\n { skipComponentUpdate: true },\n ) as VirtualElementComponent;\n };\n}\n\nfunction createNode($element: VirtualElement): Node {\n if (isEmptyElement($element)) {\n return document.createTextNode('');\n }\n\n if (isTextElement($element)) {\n return document.createTextNode($element.value);\n }\n\n if (isComponentElement($element)) {\n return createNode($element.children[0] as VirtualElement);\n }\n\n const { tag, props, children = [] } = $element;\n const element = document.createElement(tag);\n\n if (typeof props.ref === 'object') {\n props.ref.current = element;\n }\n\n Object.entries(props).forEach(([key, value]) => {\n if (props[key] !== undefined) {\n setAttribute(element, key, value);\n }\n });\n\n $element.children = children.map(($child, i) => (\n renderWithVirtual(element, undefined, $child, $element, i) as VirtualElement\n ));\n\n return element;\n}\n\nfunction renderChildren(\n $current: VirtualRealElement, $new: VirtualRealElement, currentEl: HTMLElement,\n) {\n if (DEBUG) {\n DEBUG_checkKeyUniqueness($new.children);\n }\n\n if ($new.props.teactFastList) {\n return renderFastListChildren($current, $new, currentEl);\n }\n\n const currentChildrenLength = $current.children.length;\n const newChildrenLength = $new.children.length;\n const maxLength = Math.max(currentChildrenLength, newChildrenLength);\n const newChildren = [];\n const fragment = newChildrenLength > currentChildrenLength + 1 ? document.createDocumentFragment() : undefined;\n\n for (let i = 0; i < maxLength; i++) {\n const $newChild = renderWithVirtual(\n currentEl,\n $current.children[i],\n $new.children[i],\n $new,\n i,\n i >= currentChildrenLength ? { fragment } : undefined,\n );\n\n if ($newChild) {\n newChildren.push($newChild);\n }\n }\n\n if (fragment) {\n currentEl.appendChild(fragment);\n }\n\n return newChildren;\n}\n\nfunction renderFastListChildren($current: VirtualRealElement, $new: VirtualRealElement, currentEl: HTMLElement) {\n const newKeys = new Set(\n $new.children.map(($newChild) => {\n const key = 'props' in $newChild && $newChild.props.key;\n\n // eslint-disable-next-line no-null/no-null\n if (DEBUG && isRealElement($newChild) && (key === undefined || key === null)) {\n // eslint-disable-next-line no-console\n console.warn('Missing `key` in `teactFastList`');\n }\n\n return key;\n }),\n );\n\n let currentRemainingIndex = 0;\n const remainingByKey = $current.children\n .reduce((acc, $currentChild, i) => {\n let key = 'props' in $currentChild ? $currentChild.props.key : undefined;\n // eslint-disable-next-line no-null/no-null\n const isKeyPresent = key !== undefined && key !== null;\n\n // First we handle removed children\n if (isKeyPresent && !newKeys.has(key)) {\n renderWithVirtual(currentEl, $currentChild, undefined, $new, -1);\n\n return acc;\n } else if (!isKeyPresent) {\n const $newChild = $new.children[i];\n const newChildKey = ($newChild && 'props' in $newChild) ? $newChild.props.key : undefined;\n // If a non-key element remains at the same index we preserve it with a virtual `key`\n if ($newChild && !newChildKey) {\n key = `${INDEX_KEY_PREFIX}${i}`;\n } else {\n renderWithVirtual(currentEl, $currentChild, undefined, $new, -1);\n\n return acc;\n }\n }\n\n // Then we build up info about remaining children\n acc[key] = {\n $element: $currentChild,\n index: currentRemainingIndex++,\n order: 'props' in $currentChild ? $currentChild.props.teactOrderKey : undefined,\n };\n return acc;\n }, {} as Record);\n\n let newChildren: VirtualElement[] = [];\n\n let fragmentQueue: VirtualElement[] | undefined;\n let fragmentIndex: number | undefined;\n\n let currentPreservedIndex = 0;\n\n $new.children.forEach(($newChild, i) => {\n const key = 'props' in $newChild ? $newChild.props.key : `${INDEX_KEY_PREFIX}${i}`;\n const currentChildInfo = remainingByKey[key];\n\n if (!currentChildInfo) {\n // All new nodes are queued to be inserted with fragments if possible.\n if (!fragmentQueue) {\n fragmentQueue = [];\n fragmentIndex = i;\n }\n\n fragmentQueue.push($newChild);\n return;\n }\n\n if (fragmentQueue) {\n newChildren = newChildren.concat(flushFragmentQueue(fragmentQueue, fragmentIndex!, currentEl, $new));\n fragmentIndex = undefined;\n fragmentQueue = undefined;\n }\n\n // This is a \"magic\" `teactOrderKey` property that tells us the element is updated\n const order = 'props' in $newChild ? $newChild.props.teactOrderKey : undefined;\n const shouldMoveNode = currentChildInfo.index !== currentPreservedIndex && currentChildInfo.order !== order;\n const isMovingDown = shouldMoveNode && currentPreservedIndex > currentChildInfo.index;\n\n // When the node goes down, preserved indexing actually breaks, so the \"magic\" should help.\n if (!shouldMoveNode || isMovingDown) {\n currentPreservedIndex++;\n }\n\n newChildren.push(\n renderWithVirtual(currentEl, currentChildInfo.$element, $newChild, $new, i, {\n forceIndex: true,\n moveDirection: shouldMoveNode ? (isMovingDown ? 'down' : 'up') : undefined,\n })!,\n );\n });\n\n if (fragmentQueue) {\n newChildren = newChildren.concat(flushFragmentQueue(fragmentQueue, fragmentIndex!, currentEl, $new));\n }\n\n return newChildren;\n}\n\nfunction flushFragmentQueue(\n fragmentQueue: VirtualElement[], fragmentIndex: number, parentEl: HTMLElement, $parent: VirtualRealElement,\n) {\n if (fragmentQueue.length === 1) {\n return [renderWithVirtual(parentEl, undefined, fragmentQueue[0], $parent, fragmentIndex, { forceIndex: true })!];\n } else if (fragmentQueue.length > 1) {\n const fragment = document.createDocumentFragment();\n const newChildren = fragmentQueue.map(($fragmentChild) => (\n renderWithVirtual(parentEl, undefined, $fragmentChild, $parent, fragmentIndex!, { fragment })!\n ));\n\n if (parentEl.childNodes[fragmentIndex]) {\n parentEl.insertBefore(fragment, parentEl.childNodes[fragmentIndex]);\n } else {\n parentEl.appendChild(fragment);\n }\n\n return newChildren;\n }\n\n throw new Error('Unexpected input');\n}\n\nfunction updateAttributes($current: VirtualRealElement, $new: VirtualRealElement, element: HTMLElement) {\n const currentEntries = Object.entries($current.props);\n const newEntries = Object.entries($new.props);\n\n currentEntries.forEach(([key, currentValue]) => {\n const newValue = $new.props[key];\n\n if (\n currentValue !== undefined\n && (\n newValue === undefined\n || (currentValue !== newValue && key.startsWith('on'))\n )\n ) {\n removeAttribute(element, key, currentValue);\n }\n });\n\n newEntries.forEach(([key, newValue]) => {\n const currentValue = $current.props[key];\n\n if (newValue !== undefined && newValue !== currentValue) {\n setAttribute(element, key, newValue);\n }\n });\n}\n\nfunction setAttribute(element: HTMLElement, key: string, value: any) {\n // An optimization attempt\n if (key === 'className') {\n element.className = value;\n // An optimization attempt\n } else if (key === 'value') {\n if ((element as HTMLInputElement).value !== value) {\n (element as HTMLInputElement).value = value;\n }\n } else if (key === 'style') {\n element.style.cssText = value;\n } else if (key === 'dangerouslySetInnerHTML') {\n // eslint-disable-next-line no-underscore-dangle\n element.innerHTML = value.__html;\n } else if (key.startsWith('on')) {\n addEventListener(element, key, value, key.endsWith('Capture'));\n } else if (key.startsWith('data-') || key.startsWith('aria-') || HTML_ATTRIBUTES.has(key)) {\n element.setAttribute(key, value);\n } else if (!FILTERED_ATTRIBUTES.has(key)) {\n (element as any)[MAPPED_ATTRIBUTES[key] || key] = value;\n }\n}\n\nfunction removeAttribute(element: HTMLElement, key: string, value: any) {\n if (key === 'className') {\n element.className = '';\n } else if (key === 'value') {\n (element as HTMLInputElement).value = '';\n } else if (key === 'style') {\n element.style.cssText = '';\n } else if (key === 'dangerouslySetInnerHTML') {\n element.innerHTML = '';\n } else if (key.startsWith('on')) {\n removeEventListener(element, key, value, key.endsWith('Capture'));\n } else if (key.startsWith('data-') || key.startsWith('aria-') || HTML_ATTRIBUTES.has(key)) {\n element.removeAttribute(key);\n } else if (!FILTERED_ATTRIBUTES.has(key)) {\n delete (element as any)[MAPPED_ATTRIBUTES[key] || key];\n }\n}\n\n// eslint-disable-next-line @typescript-eslint/naming-convention\nfunction DEBUG_addToVirtualTreeSize($current: VirtualRealElement | VirtualDomHead) {\n DEBUG_virtualTreeSize += $current.children.length;\n\n $current.children.forEach(($child) => {\n if (isRealElement($child)) {\n DEBUG_addToVirtualTreeSize($child);\n }\n });\n}\n\n// eslint-disable-next-line @typescript-eslint/naming-convention\nfunction DEBUG_checkKeyUniqueness(children: VirtualElementChildren) {\n const firstChild = children[0];\n if (firstChild && 'props' in firstChild && firstChild.props.key !== undefined) {\n const keys = children.reduce((acc: any[], child) => {\n if ('props' in child && child.props.key) {\n acc.push(child.props.key);\n }\n\n return acc;\n }, []);\n\n if (keys.length !== unique(keys).length) {\n throw new Error('[Teact] Children keys are not unique');\n }\n }\n}\n\nconst TeactDOM = { render };\nexport default TeactDOM;\n","import { DEBUG, DEBUG_MORE } from '../../config';\nimport {\n fastRaf, fastRafPrimary, onTickEnd, onTickEndPrimary, throttleWithPrimaryRaf, throttleWithRaf,\n} from '../../util/schedulers';\nimport { flatten, orderBy } from '../../util/iteratees';\nimport { getUnequalProps } from '../../util/arePropsShallowEqual';\nimport { handleError } from '../../util/handleError';\nimport { removeAllDelegatedListeners } from './dom-events';\n\nexport type Props = AnyLiteral;\nexport type FC

= (props: P) => any;\n// eslint-disable-next-line @typescript-eslint/naming-convention\nexport type FC_withDebug = FC & {\n DEBUG_contentComponentName?: string;\n};\n\nexport enum VirtualElementTypesEnum {\n Empty,\n Text,\n Tag,\n Component,\n}\n\ninterface VirtualElementEmpty {\n type: VirtualElementTypesEnum.Empty;\n target?: Node;\n}\n\ninterface VirtualElementText {\n type: VirtualElementTypesEnum.Text;\n target?: Node;\n value: string;\n}\n\nexport interface VirtualElementTag {\n type: VirtualElementTypesEnum.Tag;\n target?: Node;\n tag: string;\n props: Props;\n children: VirtualElementChildren;\n}\n\nexport interface VirtualElementComponent {\n type: VirtualElementTypesEnum.Component;\n componentInstance: ComponentInstance;\n props: Props;\n children: VirtualElementChildren;\n}\n\nexport type StateHookSetter = (newValue: ((current: T) => T) | T) => void;\n\ninterface ComponentInstance {\n $element: VirtualElementComponent;\n Component: FC;\n name: string;\n props: Props;\n renderedValue?: any;\n isMounted: boolean;\n hooks: {\n state: {\n cursor: number;\n byCursor: {\n value: any;\n nextValue: any;\n setter: StateHookSetter;\n }[];\n };\n effects: {\n cursor: number;\n byCursor: {\n effect: () => void;\n dependencies?: readonly any[];\n cleanup?: Function;\n }[];\n };\n memos: {\n cursor: number;\n byCursor: {\n current: any;\n dependencies: any[];\n }[];\n };\n };\n prepareForFrame?: () => void;\n forceUpdate?: () => void;\n onUpdate?: () => void;\n}\n\nexport type VirtualElement =\n VirtualElementEmpty\n | VirtualElementText\n | VirtualElementTag\n | VirtualElementComponent;\nexport type VirtualRealElement =\n VirtualElementTag\n | VirtualElementComponent;\nexport type VirtualElementChildren = VirtualElement[];\n\nconst Fragment = Symbol('Fragment');\n\nconst DEBUG_RENDER_THRESHOLD = 7;\nconst DEBUG_EFFECT_THRESHOLD = 7;\nconst DEBUG_SILENT_RENDERS_FOR = new Set(['TeactMemoWrapper', 'TeactNContainer', 'Button', 'ListItem', 'MenuItem']);\n\nlet renderingInstance: ComponentInstance;\n\nexport function isEmptyElement($element: VirtualElement): $element is VirtualElementEmpty {\n return $element.type === VirtualElementTypesEnum.Empty;\n}\n\nexport function isTextElement($element: VirtualElement): $element is VirtualElementText {\n return $element.type === VirtualElementTypesEnum.Text;\n}\n\nexport function isTagElement($element: VirtualElement): $element is VirtualElementTag {\n return $element.type === VirtualElementTypesEnum.Tag;\n}\n\nexport function isComponentElement($element: VirtualElement): $element is VirtualElementComponent {\n return $element.type === VirtualElementTypesEnum.Component;\n}\n\nexport function isRealElement($element: VirtualElement): $element is VirtualRealElement {\n return isTagElement($element) || isComponentElement($element);\n}\n\nfunction createElement(\n source: string | FC | typeof Fragment,\n props: Props,\n ...children: any[]\n): VirtualRealElement | VirtualElementChildren {\n if (!props) {\n props = {};\n }\n\n children = flatten(children);\n\n if (source === Fragment) {\n return children;\n } else if (typeof source === 'function') {\n return createComponentInstance(source, props, children);\n } else {\n return buildTagElement(source, props, children);\n }\n}\n\nfunction createComponentInstance(Component: FC, props: Props, children: any[]): VirtualElementComponent {\n let parsedChildren: any | any[] | undefined;\n if (children.length === 0) {\n parsedChildren = undefined;\n } else if (children.length === 1) {\n [parsedChildren] = children;\n } else {\n parsedChildren = children;\n }\n\n const componentInstance: ComponentInstance = {\n $element: {} as VirtualElementComponent,\n Component,\n name: Component.name,\n props: {\n ...props,\n ...(parsedChildren && { children: parsedChildren }),\n },\n isMounted: false,\n hooks: {\n state: {\n cursor: 0,\n byCursor: [],\n },\n effects: {\n cursor: 0,\n byCursor: [],\n },\n memos: {\n cursor: 0,\n byCursor: [],\n },\n },\n };\n\n componentInstance.$element = buildComponentElement(componentInstance);\n\n return componentInstance.$element;\n}\n\nfunction buildComponentElement(\n componentInstance: ComponentInstance,\n children: VirtualElementChildren = [],\n): VirtualElementComponent {\n const { props } = componentInstance;\n\n return {\n componentInstance,\n type: VirtualElementTypesEnum.Component,\n props,\n children,\n };\n}\n\nfunction buildTagElement(tag: string, props: Props, children: any[]): VirtualElementTag {\n return {\n type: VirtualElementTypesEnum.Tag,\n tag,\n props,\n children: dropEmptyTail(children).map(buildChildElement),\n };\n}\n\n// We only need placeholders in the middle of collection (to ensure other elements order).\nfunction dropEmptyTail(children: any[]) {\n let i = children.length - 1;\n\n for (; i >= 0; i--) {\n if (!isEmptyPlaceholder(children[i])) {\n break;\n }\n }\n\n return i + 1 < children.length ? children.slice(0, i + 1) : children;\n}\n\nfunction isEmptyPlaceholder(child: any) {\n // eslint-disable-next-line no-null/no-null\n return child === false || child === null || child === undefined;\n}\n\nfunction buildChildElement(child: any): VirtualElement {\n if (isEmptyPlaceholder(child)) {\n return buildEmptyElement();\n } else if (isRealElement(child)) {\n return child;\n } else {\n return buildTextElement(child);\n }\n}\n\nfunction buildTextElement(value: any): VirtualElementText {\n return {\n type: VirtualElementTypesEnum.Text,\n value: String(value),\n };\n}\n\nfunction buildEmptyElement(): VirtualElementEmpty {\n return { type: VirtualElementTypesEnum.Empty };\n}\n\n// eslint-disable-next-line @typescript-eslint/naming-convention\nconst DEBUG_components: AnyLiteral = {};\n\ndocument.addEventListener('dblclick', () => {\n // eslint-disable-next-line no-console\n console.warn('COMPONENTS', orderBy(Object.values(DEBUG_components), 'renderCount', 'desc'));\n});\n\nexport function renderComponent(componentInstance: ComponentInstance) {\n renderingInstance = componentInstance;\n componentInstance.hooks.state.cursor = 0;\n componentInstance.hooks.effects.cursor = 0;\n componentInstance.hooks.memos.cursor = 0;\n\n const { Component, props } = componentInstance;\n let newRenderedValue;\n\n try {\n // eslint-disable-next-line @typescript-eslint/naming-convention\n let DEBUG_startAt: number | undefined;\n if (DEBUG) {\n const componentName = componentInstance.name;\n if (!DEBUG_components[componentName]) {\n DEBUG_components[componentName] = {\n componentName,\n renderCount: 0,\n renderTimes: [],\n };\n }\n\n if (DEBUG_MORE) {\n if (!DEBUG_SILENT_RENDERS_FOR.has(componentName)) {\n // eslint-disable-next-line no-console\n console.log(`[Teact] Render ${componentName}`);\n }\n }\n\n DEBUG_startAt = performance.now();\n }\n\n newRenderedValue = Component(props);\n\n if (DEBUG) {\n const duration = performance.now() - DEBUG_startAt!;\n const componentName = componentInstance.name;\n if (duration > DEBUG_RENDER_THRESHOLD) {\n // eslint-disable-next-line no-console\n console.warn(`[Teact] Slow component render: ${componentName}, ${Math.round(duration)} ms`);\n }\n DEBUG_components[componentName].renderTimes.push(duration);\n DEBUG_components[componentName].renderCount++;\n }\n } catch (err: any) {\n handleError(err);\n\n newRenderedValue = componentInstance.renderedValue;\n }\n\n if (componentInstance.isMounted && newRenderedValue === componentInstance.renderedValue) {\n return componentInstance.$element;\n }\n\n componentInstance.renderedValue = newRenderedValue;\n\n const newChild = buildChildElement(newRenderedValue);\n componentInstance.$element = buildComponentElement(componentInstance, [newChild]);\n\n return componentInstance.$element;\n}\n\nexport function hasElementChanged($old: VirtualElement, $new: VirtualElement) {\n if (typeof $old !== typeof $new) {\n return true;\n } else if ($old.type !== $new.type) {\n return true;\n } else if (isTextElement($old) && isTextElement($new)) {\n return $old.value !== $new.value;\n } else if (isTagElement($old) && isTagElement($new)) {\n return ($old.tag !== $new.tag) || ($old.props.key !== $new.props.key);\n } else if (isComponentElement($old) && isComponentElement($new)) {\n return (\n $old.componentInstance.Component !== $new.componentInstance.Component\n ) || (\n $old.props.key !== $new.props.key\n );\n }\n\n return false;\n}\n\nexport function unmountTree($element: VirtualElement) {\n if (isComponentElement($element)) {\n unmountComponent($element.componentInstance);\n } else {\n if (isTagElement($element)) {\n if ($element.target) {\n removeAllDelegatedListeners($element.target as HTMLElement);\n }\n\n if ($element.props.ref) {\n $element.props.ref.current = undefined; // Help GC\n }\n }\n\n if ($element.target) {\n $element.target = undefined; // Help GC\n }\n\n if (!isRealElement($element)) {\n return;\n }\n }\n\n $element.children.forEach(unmountTree);\n}\n\nexport function mountComponent(componentInstance: ComponentInstance) {\n renderComponent(componentInstance);\n componentInstance.isMounted = true;\n return componentInstance.$element;\n}\n\nfunction unmountComponent(componentInstance: ComponentInstance) {\n if (!componentInstance.isMounted) {\n return;\n }\n\n // We need to clean refs before running effect cleanups\n componentInstance.hooks.memos.byCursor.forEach((memoContainer) => {\n memoContainer.current = undefined;\n });\n\n componentInstance.hooks.effects.byCursor.forEach(({ cleanup }) => {\n if (typeof cleanup === 'function') {\n try {\n cleanup();\n } catch (err: any) {\n handleError(err);\n }\n }\n });\n\n componentInstance.isMounted = false;\n\n helpGc(componentInstance);\n}\n\n// We need to remove all references to DOM objects. We also clean all other references, just in case\nfunction helpGc(componentInstance: ComponentInstance) {\n componentInstance.hooks.effects.byCursor.forEach((hook) => {\n hook.cleanup = undefined;\n hook.effect = undefined as any;\n hook.dependencies = undefined;\n });\n\n componentInstance.hooks.state.byCursor.forEach((hook) => {\n hook.value = undefined;\n hook.nextValue = undefined;\n hook.setter = undefined as any;\n });\n\n componentInstance.hooks.memos.byCursor.forEach((hook) => {\n hook.dependencies = undefined as any;\n });\n\n componentInstance.hooks = undefined as any;\n componentInstance.$element = undefined as any;\n componentInstance.renderedValue = undefined;\n componentInstance.Component = undefined as any;\n componentInstance.props = undefined as any;\n componentInstance.forceUpdate = undefined;\n componentInstance.onUpdate = undefined;\n}\n\nfunction prepareComponentForFrame(componentInstance: ComponentInstance) {\n if (!componentInstance.isMounted) {\n return;\n }\n\n componentInstance.hooks.state.byCursor.forEach((hook) => {\n hook.value = hook.nextValue;\n });\n\n componentInstance.prepareForFrame = throttleWithPrimaryRaf(() => prepareComponentForFrame(componentInstance));\n componentInstance.forceUpdate = throttleWithRaf(() => forceUpdateComponent(componentInstance));\n}\n\nfunction forceUpdateComponent(componentInstance: ComponentInstance) {\n if (!componentInstance.isMounted || !componentInstance.onUpdate) {\n return;\n }\n\n const currentElement = componentInstance.$element;\n\n renderComponent(componentInstance);\n\n if (componentInstance.$element !== currentElement) {\n componentInstance.onUpdate();\n }\n}\n\nexport function getTarget($element: VirtualElement): Node | undefined {\n if (isComponentElement($element)) {\n const componentElement = $element.children[0];\n return componentElement ? getTarget(componentElement) : undefined;\n } else {\n return $element.target;\n }\n}\n\nexport function setTarget($element: VirtualElement, target: Node) {\n if (isComponentElement($element)) {\n setTarget($element.children[0], target);\n } else {\n $element.target = target;\n }\n}\n\nexport function useState(): [T, StateHookSetter];\nexport function useState(initial: T): [T, StateHookSetter];\nexport function useState(initial?: T): [T, StateHookSetter] {\n const { cursor, byCursor } = renderingInstance.hooks.state;\n\n if (byCursor[cursor] === undefined) {\n byCursor[cursor] = {\n value: initial,\n nextValue: initial,\n setter: ((componentInstance) => (newValue: ((current: T) => T) | T) => {\n if (byCursor[cursor].nextValue !== newValue) {\n byCursor[cursor].nextValue = typeof newValue === 'function'\n ? (newValue as (current: T) => T)(byCursor[cursor].value)\n : newValue;\n\n if (!componentInstance.prepareForFrame || !componentInstance.forceUpdate) {\n componentInstance.prepareForFrame = throttleWithPrimaryRaf(\n () => prepareComponentForFrame(componentInstance),\n );\n componentInstance.forceUpdate = throttleWithRaf(\n () => forceUpdateComponent(componentInstance),\n );\n }\n\n componentInstance.prepareForFrame();\n componentInstance.forceUpdate();\n\n if (DEBUG_MORE) {\n if (componentInstance.name !== 'TeactNContainer') {\n // eslint-disable-next-line no-console\n console.log(\n '[Teact.useState]',\n componentInstance.name,\n // `componentInstance.Component` may be set to `null` by GC helper\n componentInstance.Component && (componentInstance.Component as FC_withDebug).DEBUG_contentComponentName\n ? `> ${(componentInstance.Component as FC_withDebug).DEBUG_contentComponentName}`\n : '',\n `Forced update at cursor #${cursor}, next value: `,\n byCursor[cursor].nextValue,\n );\n }\n }\n }\n })(renderingInstance),\n };\n }\n\n renderingInstance.hooks.state.cursor++;\n\n return [\n byCursor[cursor].value,\n byCursor[cursor].setter,\n ];\n}\n\nfunction useLayoutEffectBase(\n schedulerFn: typeof onTickEnd | typeof requestAnimationFrame,\n primarySchedulerFn: typeof onTickEnd | typeof requestAnimationFrame,\n effect: () => Function | void,\n dependencies?: readonly any[],\n debugKey?: string,\n) {\n const { cursor, byCursor } = renderingInstance.hooks.effects;\n const componentInstance = renderingInstance;\n\n function execCleanup() {\n if (!componentInstance.isMounted) {\n return;\n }\n\n const { cleanup } = byCursor[cursor];\n if (typeof cleanup === 'function') {\n try {\n // eslint-disable-next-line @typescript-eslint/naming-convention\n let DEBUG_startAt: number | undefined;\n if (DEBUG) {\n DEBUG_startAt = performance.now();\n }\n\n cleanup();\n\n if (DEBUG) {\n const duration = performance.now() - DEBUG_startAt!;\n const componentName = componentInstance.name;\n if (duration > DEBUG_EFFECT_THRESHOLD) {\n // eslint-disable-next-line no-console\n console.warn(\n `[Teact] Slow cleanup at effect cursor #${cursor}: ${componentName}, ${Math.round(duration)} ms`,\n );\n }\n }\n } catch (err: any) {\n handleError(err);\n }\n }\n }\n\n function exec() {\n if (!componentInstance.isMounted) {\n return;\n }\n\n // eslint-disable-next-line @typescript-eslint/naming-convention\n let DEBUG_startAt: number | undefined;\n if (DEBUG) {\n DEBUG_startAt = performance.now();\n }\n\n byCursor[cursor].cleanup = effect() as Function;\n\n if (DEBUG) {\n const duration = performance.now() - DEBUG_startAt!;\n const componentName = componentInstance.name;\n if (duration > DEBUG_EFFECT_THRESHOLD) {\n // eslint-disable-next-line no-console\n console.warn(`[Teact] Slow effect at cursor #${cursor}: ${componentName}, ${Math.round(duration)} ms`);\n }\n }\n }\n\n if (byCursor[cursor] !== undefined && dependencies && byCursor[cursor].dependencies) {\n if (dependencies.some((dependency, i) => dependency !== byCursor[cursor].dependencies![i])) {\n if (debugKey) {\n const causedBy = dependencies.reduce((res, newValue, i) => {\n const prevValue = byCursor[cursor].dependencies![i];\n if (newValue !== prevValue) {\n res.push(`${i}: ${prevValue} => ${newValue}`);\n }\n\n return res;\n }, []);\n\n // eslint-disable-next-line no-console\n console.log(`[Teact] Effect \"${debugKey}\" caused by dependencies.`, causedBy.join(', '));\n }\n\n primarySchedulerFn(execCleanup);\n schedulerFn(exec);\n }\n } else {\n if (debugKey) {\n // eslint-disable-next-line no-console\n console.log(`[Teact] Effect \"${debugKey}\" caused by missing dependencies.`);\n }\n\n primarySchedulerFn(execCleanup);\n schedulerFn(exec);\n }\n\n byCursor[cursor] = {\n effect,\n dependencies,\n cleanup: byCursor[cursor] ? byCursor[cursor].cleanup : undefined,\n };\n\n renderingInstance.hooks.effects.cursor++;\n}\n\nexport function useEffect(effect: () => Function | void, dependencies?: readonly any[], debugKey?: string) {\n return useLayoutEffectBase(fastRaf, fastRafPrimary, effect, dependencies, debugKey);\n}\n\nexport function useLayoutEffect(effect: () => Function | void, dependencies?: readonly any[], debugKey?: string) {\n return useLayoutEffectBase(onTickEnd, onTickEndPrimary, effect, dependencies, debugKey);\n}\n\nexport function useMemo(resolver: () => T, dependencies: any[], debugKey?: string): T {\n const { cursor, byCursor } = renderingInstance.hooks.memos;\n let { current } = byCursor[cursor] || {};\n\n if (\n byCursor[cursor] === undefined\n || dependencies.some((dependency, i) => dependency !== byCursor[cursor].dependencies[i])\n ) {\n if (DEBUG && debugKey) {\n // eslint-disable-next-line no-console\n console.log(\n `[Teact.useMemo] ${renderingInstance.name} (${debugKey}): Update is caused by:`,\n byCursor[cursor]\n ? getUnequalProps(dependencies, byCursor[cursor].dependencies).join(', ')\n : '[first render]',\n );\n }\n\n current = resolver();\n }\n\n byCursor[cursor] = {\n current,\n dependencies,\n };\n\n renderingInstance.hooks.memos.cursor++;\n\n return current;\n}\n\nexport function useCallback(newCallback: F, dependencies: any[], debugKey?: string): F {\n // eslint-disable-next-line react-hooks/exhaustive-deps\n return useMemo(() => newCallback, dependencies, debugKey);\n}\n\nexport function useRef(initial: T): { current: T };\nexport function useRef(): { current: T | undefined }; // TT way (empty is `undefined`)\nexport function useRef(initial: null): { current: T | null }; // React way (empty is `null`)\n// eslint-disable-next-line no-null/no-null\nexport function useRef(initial?: T | null) {\n return useMemo(() => ({\n current: initial,\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }), []);\n}\n\nexport function memo(Component: T, debugKey?: string) {\n return function TeactMemoWrapper(props: Props) {\n // eslint-disable-next-line react-hooks/exhaustive-deps\n return useMemo(() => createElement(Component, props), Object.values(props), debugKey);\n } as T;\n}\n\n// We need to keep it here for JSX.\nconst Teact = {\n createElement,\n Fragment,\n};\n\nexport default Teact;\n","import React, {\n FC, FC_withDebug, Props, useEffect, useState,\n} from './teact';\n\nimport { DEBUG, DEBUG_MORE } from '../../config';\nimport useForceUpdate from '../../hooks/useForceUpdate';\nimport generateIdFor from '../../util/generateIdFor';\nimport { fastRaf, throttleWithTickEnd } from '../../util/schedulers';\nimport arePropsShallowEqual, { getUnequalProps } from '../../util/arePropsShallowEqual';\nimport { orderBy } from '../../util/iteratees';\nimport { handleError } from '../../util/handleError';\nimport { isHeavyAnimating } from '../../hooks/useHeavyAnimationCheck';\n\nexport default React;\n\ntype GlobalState = AnyLiteral;\ntype ActionNames = string;\ntype ActionPayload = any;\n\ninterface ActionOptions {\n forceOnHeavyAnimation?: boolean;\n // Workaround for iOS gesture history navigation\n forceSyncOnIOs?: boolean;\n}\n\ntype Actions = Record void>;\n\ntype ActionHandler = (\n global: GlobalState,\n actions: Actions,\n payload: any,\n) => GlobalState | void | Promise;\n\ntype MapStateToProps = ((global: GlobalState, ownProps: OwnProps) => AnyLiteral);\n\nlet currentGlobal = {} as GlobalState;\n\nconst actionHandlers: Record = {};\nconst callbacks: Function[] = [updateContainers];\nconst actions = {} as Actions;\nconst containers = new Map;\n ownProps: Props;\n mappedProps?: Props;\n forceUpdate: Function;\n areMappedPropsChanged: boolean;\n DEBUG_updates: number;\n DEBUG_componentName: string;\n}>();\n\nconst runCallbacksThrottled = throttleWithTickEnd(runCallbacks);\n\nfunction runCallbacks(forceOnHeavyAnimation = false) {\n if (!forceOnHeavyAnimation && isHeavyAnimating()) {\n fastRaf(runCallbacksThrottled);\n return;\n }\n\n callbacks.forEach((cb) => cb(currentGlobal));\n}\n\nexport function setGlobal(newGlobal?: GlobalState, options?: ActionOptions) {\n if (typeof newGlobal === 'object' && newGlobal !== currentGlobal) {\n currentGlobal = newGlobal;\n if (options?.forceSyncOnIOs) {\n runCallbacks(true);\n } else {\n runCallbacksThrottled(options?.forceOnHeavyAnimation);\n }\n }\n}\n\nexport function getGlobal() {\n return currentGlobal;\n}\n\nexport function getActions() {\n return actions;\n}\n\nfunction handleAction(name: string, payload?: ActionPayload, options?: ActionOptions) {\n actionHandlers[name]?.forEach((handler) => {\n const response = handler(currentGlobal, actions, payload);\n if (!response) {\n return;\n }\n\n if (typeof response.then === 'function') {\n response.then((newGlobal: GlobalState | void) => {\n if (newGlobal) {\n setGlobal(newGlobal, options);\n }\n });\n } else {\n setGlobal(response, options);\n }\n });\n}\n\nfunction updateContainers() {\n // eslint-disable-next-line @typescript-eslint/naming-convention\n let DEBUG_startAt: number | undefined;\n if (DEBUG) {\n DEBUG_startAt = performance.now();\n }\n\n // eslint-disable-next-line no-restricted-syntax\n for (const container of containers.values()) {\n const {\n mapStateToProps, ownProps, mappedProps, forceUpdate,\n } = container;\n\n let newMappedProps;\n\n try {\n newMappedProps = mapStateToProps(currentGlobal, ownProps);\n } catch (err: any) {\n handleError(err);\n\n return;\n }\n\n if (DEBUG) {\n if (Object.values(newMappedProps).some(Number.isNaN)) {\n // eslint-disable-next-line no-console\n console.warn(\n // eslint-disable-next-line max-len\n `[TeactN] Some of \\`${container.DEBUG_componentName}\\` mappers contain NaN values. This may cause redundant updates because of incorrect equality check.`,\n );\n }\n }\n\n if (Object.keys(newMappedProps).length && !arePropsShallowEqual(mappedProps!, newMappedProps)) {\n if (DEBUG_MORE) {\n // eslint-disable-next-line no-console\n console.log(\n '[TeactN] Will update',\n container.DEBUG_componentName,\n 'caused by',\n getUnequalProps(mappedProps!, newMappedProps).join(', '),\n );\n }\n\n container.mappedProps = newMappedProps;\n container.areMappedPropsChanged = true;\n container.DEBUG_updates++;\n\n forceUpdate();\n }\n }\n\n if (DEBUG) {\n const updateTime = performance.now() - DEBUG_startAt!;\n if (updateTime > 7) {\n // eslint-disable-next-line no-console\n console.warn(`[TeactN] Slow containers update: ${Math.round(updateTime)} ms`);\n }\n }\n}\n\nexport function addActionHandler(name: ActionNames, handler: ActionHandler) {\n if (!actionHandlers[name]) {\n actionHandlers[name] = [];\n\n actions[name] = (payload?: ActionPayload, options?: ActionOptions) => {\n handleAction(name, payload, options);\n };\n }\n\n actionHandlers[name].push(handler);\n}\n\nexport function addCallback(cb: Function) {\n callbacks.push(cb);\n}\n\nexport function removeCallback(cb: Function) {\n const index = callbacks.indexOf(cb);\n if (index !== -1) {\n callbacks.splice(index, 1);\n }\n}\n\nexport function withGlobal(\n mapStateToProps: MapStateToProps = () => ({}),\n) {\n return (Component: FC) => {\n return function TeactNContainer(props: OwnProps) {\n (TeactNContainer as FC_withDebug).DEBUG_contentComponentName = Component.name;\n\n const [id] = useState(generateIdFor(containers));\n const forceUpdate = useForceUpdate();\n\n useEffect(() => {\n return () => {\n containers.delete(id);\n };\n }, [id]);\n\n let container = containers.get(id);\n if (!container) {\n container = {\n mapStateToProps,\n ownProps: props,\n areMappedPropsChanged: false,\n forceUpdate,\n DEBUG_updates: 0,\n DEBUG_componentName: Component.name,\n };\n\n containers.set(id, container);\n }\n\n if (container.areMappedPropsChanged) {\n container.areMappedPropsChanged = false;\n }\n\n if (!container.mappedProps || !arePropsShallowEqual(container.ownProps, props)) {\n container.ownProps = props;\n\n try {\n container.mappedProps = mapStateToProps(currentGlobal, props);\n } catch (err: any) {\n handleError(err);\n }\n }\n\n // eslint-disable-next-line react/jsx-props-no-spreading\n return ;\n };\n };\n}\n\nexport function typify() {\n type NonTypedActionPayloads = {\n [ActionName in NonTypedActionNames]: ActionPayload;\n };\n\n type ProjectActionTypes =\n ActionPayloads\n & NonTypedActionPayloads;\n\n type ProjectActionNames = keyof ProjectActionTypes;\n\n type ProjectActions = {\n [ActionName in ProjectActionNames]: (\n payload?: ProjectActionTypes[ActionName],\n options?: ActionOptions,\n ) => void;\n };\n\n type ActionHandlers = {\n [ActionName in keyof ProjectActionTypes]: (\n global: ProjectGlobalState,\n actions: ProjectActions,\n payload: ProjectActionTypes[ActionName],\n ) => ProjectGlobalState | void | Promise;\n };\n\n return {\n getGlobal: getGlobal as () => ProjectGlobalState,\n setGlobal: setGlobal as (state: ProjectGlobalState, options?: ActionOptions) => void,\n getActions: getActions as () => ProjectActions,\n addActionHandler: addActionHandler as (\n name: ActionName,\n handler: ActionHandlers[ActionName],\n ) => void,\n withGlobal: withGlobal as (\n mapStateToProps: ((global: ProjectGlobalState, ownProps: OwnProps) => AnyLiteral),\n ) => (Component: FC) => FC,\n };\n}\n\nif (DEBUG) {\n (window as any).getGlobal = getGlobal;\n\n document.addEventListener('dblclick', () => {\n // eslint-disable-next-line no-console\n console.warn(\n 'GLOBAL CONTAINERS',\n orderBy(\n Array.from(containers.values())\n .map(({ DEBUG_componentName, DEBUG_updates }) => ({ DEBUG_componentName, DEBUG_updates })),\n 'DEBUG_updates',\n 'desc',\n ),\n );\n });\n}\n","// Copyright Twitter Inc. Licensed under MIT\n// https://github.com/twitter/twemoji-parser/blob/master/LICENSE.md\n// Version f8312f3 12.03.2022\n\nconst vs16RegExp = /\\uFE0F/g;\n// avoid using a string literal like '\\u200D' here because minifiers expand it inline\nconst zeroWidthJoiner = String.fromCharCode(0x200d);\n\nexport function removeVS16s(rawEmoji) {\n return rawEmoji.indexOf(zeroWidthJoiner) < 0 ? rawEmoji.replace(vs16RegExp, '') : rawEmoji;\n}\n\n// This file is generated by source/emoji/scripts/generate.sh\n// eslint-disable-next-line max-len\nexport default /(?:\\ud83d\\udc68\\ud83c\\udffb\\u200d\\u2764\\ufe0f\\u200d\\ud83d\\udc8b\\u200d\\ud83d\\udc68\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc68\\ud83c\\udffc\\u200d\\u2764\\ufe0f\\u200d\\ud83d\\udc8b\\u200d\\ud83d\\udc68\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc68\\ud83c\\udffd\\u200d\\u2764\\ufe0f\\u200d\\ud83d\\udc8b\\u200d\\ud83d\\udc68\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc68\\ud83c\\udffe\\u200d\\u2764\\ufe0f\\u200d\\ud83d\\udc8b\\u200d\\ud83d\\udc68\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc68\\ud83c\\udfff\\u200d\\u2764\\ufe0f\\u200d\\ud83d\\udc8b\\u200d\\ud83d\\udc68\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc69\\ud83c\\udffb\\u200d\\u2764\\ufe0f\\u200d\\ud83d\\udc8b\\u200d\\ud83d\\udc68\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc69\\ud83c\\udffb\\u200d\\u2764\\ufe0f\\u200d\\ud83d\\udc8b\\u200d\\ud83d\\udc69\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc69\\ud83c\\udffc\\u200d\\u2764\\ufe0f\\u200d\\ud83d\\udc8b\\u200d\\ud83d\\udc68\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc69\\ud83c\\udffc\\u200d\\u2764\\ufe0f\\u200d\\ud83d\\udc8b\\u200d\\ud83d\\udc69\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc69\\ud83c\\udffd\\u200d\\u2764\\ufe0f\\u200d\\ud83d\\udc8b\\u200d\\ud83d\\udc68\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc69\\ud83c\\udffd\\u200d\\u2764\\ufe0f\\u200d\\ud83d\\udc8b\\u200d\\ud83d\\udc69\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc69\\ud83c\\udffe\\u200d\\u2764\\ufe0f\\u200d\\ud83d\\udc8b\\u200d\\ud83d\\udc68\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc69\\ud83c\\udffe\\u200d\\u2764\\ufe0f\\u200d\\ud83d\\udc8b\\u200d\\ud83d\\udc69\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc69\\ud83c\\udfff\\u200d\\u2764\\ufe0f\\u200d\\ud83d\\udc8b\\u200d\\ud83d\\udc68\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc69\\ud83c\\udfff\\u200d\\u2764\\ufe0f\\u200d\\ud83d\\udc8b\\u200d\\ud83d\\udc69\\ud83c[\\udffb-\\udfff]|\\ud83e\\uddd1\\ud83c\\udffb\\u200d\\u2764\\ufe0f\\u200d\\ud83d\\udc8b\\u200d\\ud83e\\uddd1\\ud83c[\\udffc-\\udfff]|\\ud83e\\uddd1\\ud83c\\udffc\\u200d\\u2764\\ufe0f\\u200d\\ud83d\\udc8b\\u200d\\ud83e\\uddd1\\ud83c[\\udffb\\udffd-\\udfff]|\\ud83e\\uddd1\\ud83c\\udffd\\u200d\\u2764\\ufe0f\\u200d\\ud83d\\udc8b\\u200d\\ud83e\\uddd1\\ud83c[\\udffb\\udffc\\udffe\\udfff]|\\ud83e\\uddd1\\ud83c\\udffe\\u200d\\u2764\\ufe0f\\u200d\\ud83d\\udc8b\\u200d\\ud83e\\uddd1\\ud83c[\\udffb-\\udffd\\udfff]|\\ud83e\\uddd1\\ud83c\\udfff\\u200d\\u2764\\ufe0f\\u200d\\ud83d\\udc8b\\u200d\\ud83e\\uddd1\\ud83c[\\udffb-\\udffe]|\\ud83d\\udc68\\ud83c\\udffb\\u200d\\u2764\\ufe0f\\u200d\\ud83d\\udc68\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc68\\ud83c\\udffb\\u200d\\ud83e\\udd1d\\u200d\\ud83d\\udc68\\ud83c[\\udffc-\\udfff]|\\ud83d\\udc68\\ud83c\\udffc\\u200d\\u2764\\ufe0f\\u200d\\ud83d\\udc68\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc68\\ud83c\\udffc\\u200d\\ud83e\\udd1d\\u200d\\ud83d\\udc68\\ud83c[\\udffb\\udffd-\\udfff]|\\ud83d\\udc68\\ud83c\\udffd\\u200d\\u2764\\ufe0f\\u200d\\ud83d\\udc68\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc68\\ud83c\\udffd\\u200d\\ud83e\\udd1d\\u200d\\ud83d\\udc68\\ud83c[\\udffb\\udffc\\udffe\\udfff]|\\ud83d\\udc68\\ud83c\\udffe\\u200d\\u2764\\ufe0f\\u200d\\ud83d\\udc68\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc68\\ud83c\\udffe\\u200d\\ud83e\\udd1d\\u200d\\ud83d\\udc68\\ud83c[\\udffb-\\udffd\\udfff]|\\ud83d\\udc68\\ud83c\\udfff\\u200d\\u2764\\ufe0f\\u200d\\ud83d\\udc68\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc68\\ud83c\\udfff\\u200d\\ud83e\\udd1d\\u200d\\ud83d\\udc68\\ud83c[\\udffb-\\udffe]|\\ud83d\\udc69\\ud83c\\udffb\\u200d\\u2764\\ufe0f\\u200d\\ud83d\\udc68\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc69\\ud83c\\udffb\\u200d\\u2764\\ufe0f\\u200d\\ud83d\\udc69\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc69\\ud83c\\udffb\\u200d\\ud83e\\udd1d\\u200d\\ud83d\\udc68\\ud83c[\\udffc-\\udfff]|\\ud83d\\udc69\\ud83c\\udffb\\u200d\\ud83e\\udd1d\\u200d\\ud83d\\udc69\\ud83c[\\udffc-\\udfff]|\\ud83d\\udc69\\ud83c\\udffc\\u200d\\u2764\\ufe0f\\u200d\\ud83d\\udc68\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc69\\ud83c\\udffc\\u200d\\u2764\\ufe0f\\u200d\\ud83d\\udc69\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc69\\ud83c\\udffc\\u200d\\ud83e\\udd1d\\u200d\\ud83d\\udc68\\ud83c[\\udffb\\udffd-\\udfff]|\\ud83d\\udc69\\ud83c\\udffc\\u200d\\ud83e\\udd1d\\u200d\\ud83d\\udc69\\ud83c[\\udffb\\udffd-\\udfff]|\\ud83d\\udc69\\ud83c\\udffd\\u200d\\u2764\\ufe0f\\u200d\\ud83d\\udc68\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc69\\ud83c\\udffd\\u200d\\u2764\\ufe0f\\u200d\\ud83d\\udc69\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc69\\ud83c\\udffd\\u200d\\ud83e\\udd1d\\u200d\\ud83d\\udc68\\ud83c[\\udffb\\udffc\\udffe\\udfff]|\\ud83d\\udc69\\ud83c\\udffd\\u200d\\ud83e\\udd1d\\u200d\\ud83d\\udc69\\ud83c[\\udffb\\udffc\\udffe\\udfff]|\\ud83d\\udc69\\ud83c\\udffe\\u200d\\u2764\\ufe0f\\u200d\\ud83d\\udc68\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc69\\ud83c\\udffe\\u200d\\u2764\\ufe0f\\u200d\\ud83d\\udc69\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc69\\ud83c\\udffe\\u200d\\ud83e\\udd1d\\u200d\\ud83d\\udc68\\ud83c[\\udffb-\\udffd\\udfff]|\\ud83d\\udc69\\ud83c\\udffe\\u200d\\ud83e\\udd1d\\u200d\\ud83d\\udc69\\ud83c[\\udffb-\\udffd\\udfff]|\\ud83d\\udc69\\ud83c\\udfff\\u200d\\u2764\\ufe0f\\u200d\\ud83d\\udc68\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc69\\ud83c\\udfff\\u200d\\u2764\\ufe0f\\u200d\\ud83d\\udc69\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc69\\ud83c\\udfff\\u200d\\ud83e\\udd1d\\u200d\\ud83d\\udc68\\ud83c[\\udffb-\\udffe]|\\ud83d\\udc69\\ud83c\\udfff\\u200d\\ud83e\\udd1d\\u200d\\ud83d\\udc69\\ud83c[\\udffb-\\udffe]|\\ud83e\\uddd1\\ud83c\\udffb\\u200d\\u2764\\ufe0f\\u200d\\ud83e\\uddd1\\ud83c[\\udffc-\\udfff]|\\ud83e\\uddd1\\ud83c\\udffb\\u200d\\ud83e\\udd1d\\u200d\\ud83e\\uddd1\\ud83c[\\udffb-\\udfff]|\\ud83e\\uddd1\\ud83c\\udffc\\u200d\\u2764\\ufe0f\\u200d\\ud83e\\uddd1\\ud83c[\\udffb\\udffd-\\udfff]|\\ud83e\\uddd1\\ud83c\\udffc\\u200d\\ud83e\\udd1d\\u200d\\ud83e\\uddd1\\ud83c[\\udffb-\\udfff]|\\ud83e\\uddd1\\ud83c\\udffd\\u200d\\u2764\\ufe0f\\u200d\\ud83e\\uddd1\\ud83c[\\udffb\\udffc\\udffe\\udfff]|\\ud83e\\uddd1\\ud83c\\udffd\\u200d\\ud83e\\udd1d\\u200d\\ud83e\\uddd1\\ud83c[\\udffb-\\udfff]|\\ud83e\\uddd1\\ud83c\\udffe\\u200d\\u2764\\ufe0f\\u200d\\ud83e\\uddd1\\ud83c[\\udffb-\\udffd\\udfff]|\\ud83e\\uddd1\\ud83c\\udffe\\u200d\\ud83e\\udd1d\\u200d\\ud83e\\uddd1\\ud83c[\\udffb-\\udfff]|\\ud83e\\uddd1\\ud83c\\udfff\\u200d\\u2764\\ufe0f\\u200d\\ud83e\\uddd1\\ud83c[\\udffb-\\udffe]|\\ud83e\\uddd1\\ud83c\\udfff\\u200d\\ud83e\\udd1d\\u200d\\ud83e\\uddd1\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc68\\u200d\\u2764\\ufe0f\\u200d\\ud83d\\udc8b\\u200d\\ud83d\\udc68|\\ud83d\\udc69\\u200d\\u2764\\ufe0f\\u200d\\ud83d\\udc8b\\u200d\\ud83d[\\udc68\\udc69]|\\ud83e\\udef1\\ud83c\\udffb\\u200d\\ud83e\\udef2\\ud83c[\\udffc-\\udfff]|\\ud83e\\udef1\\ud83c\\udffc\\u200d\\ud83e\\udef2\\ud83c[\\udffb\\udffd-\\udfff]|\\ud83e\\udef1\\ud83c\\udffd\\u200d\\ud83e\\udef2\\ud83c[\\udffb\\udffc\\udffe\\udfff]|\\ud83e\\udef1\\ud83c\\udffe\\u200d\\ud83e\\udef2\\ud83c[\\udffb-\\udffd\\udfff]|\\ud83e\\udef1\\ud83c\\udfff\\u200d\\ud83e\\udef2\\ud83c[\\udffb-\\udffe]|\\ud83d\\udc68\\u200d\\u2764\\ufe0f\\u200d\\ud83d\\udc68|\\ud83d\\udc69\\u200d\\u2764\\ufe0f\\u200d\\ud83d[\\udc68\\udc69]|\\ud83e\\uddd1\\u200d\\ud83e\\udd1d\\u200d\\ud83e\\uddd1|\\ud83d\\udc6b\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc6c\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc6d\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc8f\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc91\\ud83c[\\udffb-\\udfff]|\\ud83e\\udd1d\\ud83c[\\udffb-\\udfff]|\\ud83d[\\udc6b-\\udc6d\\udc8f\\udc91]|\\ud83e\\udd1d)|(?:\\ud83d[\\udc68\\udc69]|\\ud83e\\uddd1)(?:\\ud83c[\\udffb-\\udfff])?\\u200d(?:\\u2695\\ufe0f|\\u2696\\ufe0f|\\u2708\\ufe0f|\\ud83c[\\udf3e\\udf73\\udf7c\\udf84\\udf93\\udfa4\\udfa8\\udfeb\\udfed]|\\ud83d[\\udcbb\\udcbc\\udd27\\udd2c\\ude80\\ude92]|\\ud83e[\\uddaf-\\uddb3\\uddbc\\uddbd])|(?:\\ud83c[\\udfcb\\udfcc]|\\ud83d[\\udd74\\udd75]|\\u26f9)((?:\\ud83c[\\udffb-\\udfff]|\\ufe0f)\\u200d[\\u2640\\u2642]\\ufe0f)|(?:\\ud83c[\\udfc3\\udfc4\\udfca]|\\ud83d[\\udc6e\\udc70\\udc71\\udc73\\udc77\\udc81\\udc82\\udc86\\udc87\\ude45-\\ude47\\ude4b\\ude4d\\ude4e\\udea3\\udeb4-\\udeb6]|\\ud83e[\\udd26\\udd35\\udd37-\\udd39\\udd3d\\udd3e\\uddb8\\uddb9\\uddcd-\\uddcf\\uddd4\\uddd6-\\udddd])(?:\\ud83c[\\udffb-\\udfff])?\\u200d[\\u2640\\u2642]\\ufe0f|(?:\\ud83d\\udc68\\u200d\\ud83d\\udc68\\u200d\\ud83d\\udc66\\u200d\\ud83d\\udc66|\\ud83d\\udc68\\u200d\\ud83d\\udc68\\u200d\\ud83d\\udc67\\u200d\\ud83d[\\udc66\\udc67]|\\ud83d\\udc68\\u200d\\ud83d\\udc69\\u200d\\ud83d\\udc66\\u200d\\ud83d\\udc66|\\ud83d\\udc68\\u200d\\ud83d\\udc69\\u200d\\ud83d\\udc67\\u200d\\ud83d[\\udc66\\udc67]|\\ud83d\\udc69\\u200d\\ud83d\\udc69\\u200d\\ud83d\\udc66\\u200d\\ud83d\\udc66|\\ud83d\\udc69\\u200d\\ud83d\\udc69\\u200d\\ud83d\\udc67\\u200d\\ud83d[\\udc66\\udc67]|\\ud83d\\udc68\\u200d\\ud83d\\udc66\\u200d\\ud83d\\udc66|\\ud83d\\udc68\\u200d\\ud83d\\udc67\\u200d\\ud83d[\\udc66\\udc67]|\\ud83d\\udc68\\u200d\\ud83d\\udc68\\u200d\\ud83d[\\udc66\\udc67]|\\ud83d\\udc68\\u200d\\ud83d\\udc69\\u200d\\ud83d[\\udc66\\udc67]|\\ud83d\\udc69\\u200d\\ud83d\\udc66\\u200d\\ud83d\\udc66|\\ud83d\\udc69\\u200d\\ud83d\\udc67\\u200d\\ud83d[\\udc66\\udc67]|\\ud83d\\udc69\\u200d\\ud83d\\udc69\\u200d\\ud83d[\\udc66\\udc67]|\\ud83c\\udff3\\ufe0f\\u200d\\u26a7\\ufe0f|\\ud83c\\udff3\\ufe0f\\u200d\\ud83c\\udf08|\\ud83d\\ude36\\u200d\\ud83c\\udf2b\\ufe0f|\\u2764\\ufe0f\\u200d\\ud83d\\udd25|\\u2764\\ufe0f\\u200d\\ud83e\\ude79|\\ud83c\\udff4\\u200d\\u2620\\ufe0f|\\ud83d\\udc15\\u200d\\ud83e\\uddba|\\ud83d\\udc3b\\u200d\\u2744\\ufe0f|\\ud83d\\udc41\\u200d\\ud83d\\udde8|\\ud83d\\udc68\\u200d\\ud83d[\\udc66\\udc67]|\\ud83d\\udc69\\u200d\\ud83d[\\udc66\\udc67]|\\ud83d\\udc6f\\u200d\\u2640\\ufe0f|\\ud83d\\udc6f\\u200d\\u2642\\ufe0f|\\ud83d\\ude2e\\u200d\\ud83d\\udca8|\\ud83d\\ude35\\u200d\\ud83d\\udcab|\\ud83e\\udd3c\\u200d\\u2640\\ufe0f|\\ud83e\\udd3c\\u200d\\u2642\\ufe0f|\\ud83e\\uddde\\u200d\\u2640\\ufe0f|\\ud83e\\uddde\\u200d\\u2642\\ufe0f|\\ud83e\\udddf\\u200d\\u2640\\ufe0f|\\ud83e\\udddf\\u200d\\u2642\\ufe0f|\\ud83d\\udc08\\u200d\\u2b1b)|[#*0-9]\\ufe0f?\\u20e3|(?:[©®\\u2122\\u265f]\\ufe0f)|(?:\\ud83c[\\udc04\\udd70\\udd71\\udd7e\\udd7f\\ude02\\ude1a\\ude2f\\ude37\\udf21\\udf24-\\udf2c\\udf36\\udf7d\\udf96\\udf97\\udf99-\\udf9b\\udf9e\\udf9f\\udfcd\\udfce\\udfd4-\\udfdf\\udff3\\udff5\\udff7]|\\ud83d[\\udc3f\\udc41\\udcfd\\udd49\\udd4a\\udd6f\\udd70\\udd73\\udd76-\\udd79\\udd87\\udd8a-\\udd8d\\udda5\\udda8\\uddb1\\uddb2\\uddbc\\uddc2-\\uddc4\\uddd1-\\uddd3\\udddc-\\uddde\\udde1\\udde3\\udde8\\uddef\\uddf3\\uddfa\\udecb\\udecd-\\udecf\\udee0-\\udee5\\udee9\\udef0\\udef3]|[\\u203c\\u2049\\u2139\\u2194-\\u2199\\u21a9\\u21aa\\u231a\\u231b\\u2328\\u23cf\\u23ed-\\u23ef\\u23f1\\u23f2\\u23f8-\\u23fa\\u24c2\\u25aa\\u25ab\\u25b6\\u25c0\\u25fb-\\u25fe\\u2600-\\u2604\\u260e\\u2611\\u2614\\u2615\\u2618\\u2620\\u2622\\u2623\\u2626\\u262a\\u262e\\u262f\\u2638-\\u263a\\u2640\\u2642\\u2648-\\u2653\\u2660\\u2663\\u2665\\u2666\\u2668\\u267b\\u267f\\u2692-\\u2697\\u2699\\u269b\\u269c\\u26a0\\u26a1\\u26a7\\u26aa\\u26ab\\u26b0\\u26b1\\u26bd\\u26be\\u26c4\\u26c5\\u26c8\\u26cf\\u26d1\\u26d3\\u26d4\\u26e9\\u26ea\\u26f0-\\u26f5\\u26f8\\u26fa\\u26fd\\u2702\\u2708\\u2709\\u270f\\u2712\\u2714\\u2716\\u271d\\u2721\\u2733\\u2734\\u2744\\u2747\\u2757\\u2763\\u2764\\u27a1\\u2934\\u2935\\u2b05-\\u2b07\\u2b1b\\u2b1c\\u2b50\\u2b55\\u3030\\u303d\\u3297\\u3299])(?:\\ufe0f|(?!\\ufe0e))|(?:(?:\\ud83c[\\udfcb\\udfcc]|\\ud83d[\\udd74\\udd75\\udd90]|[\\u261d\\u26f7\\u26f9\\u270c\\u270d])(?:\\ufe0f|(?!\\ufe0e))|(?:\\ud83c[\\udf85\\udfc2-\\udfc4\\udfc7\\udfca]|\\ud83d[\\udc42\\udc43\\udc46-\\udc50\\udc66-\\udc69\\udc6e\\udc70-\\udc78\\udc7c\\udc81-\\udc83\\udc85-\\udc87\\udcaa\\udd7a\\udd95\\udd96\\ude45-\\ude47\\ude4b-\\ude4f\\udea3\\udeb4-\\udeb6\\udec0\\udecc]|\\ud83e[\\udd0c\\udd0f\\udd18-\\udd1c\\udd1e\\udd1f\\udd26\\udd30-\\udd39\\udd3d\\udd3e\\udd77\\uddb5\\uddb6\\uddb8\\uddb9\\uddbb\\uddcd-\\uddcf\\uddd1-\\udddd\\udec3-\\udec5\\udef0-\\udef6]|[\\u270a\\u270b]))(?:\\ud83c[\\udffb-\\udfff])?|(?:\\ud83c\\udff4\\udb40\\udc67\\udb40\\udc62\\udb40\\udc65\\udb40\\udc6e\\udb40\\udc67\\udb40\\udc7f|\\ud83c\\udff4\\udb40\\udc67\\udb40\\udc62\\udb40\\udc73\\udb40\\udc63\\udb40\\udc74\\udb40\\udc7f|\\ud83c\\udff4\\udb40\\udc67\\udb40\\udc62\\udb40\\udc77\\udb40\\udc6c\\udb40\\udc73\\udb40\\udc7f|\\ud83c\\udde6\\ud83c[\\udde8-\\uddec\\uddee\\uddf1\\uddf2\\uddf4\\uddf6-\\uddfa\\uddfc\\uddfd\\uddff]|\\ud83c\\udde7\\ud83c[\\udde6\\udde7\\udde9-\\uddef\\uddf1-\\uddf4\\uddf6-\\uddf9\\uddfb\\uddfc\\uddfe\\uddff]|\\ud83c\\udde8\\ud83c[\\udde6\\udde8\\udde9\\uddeb-\\uddee\\uddf0-\\uddf5\\uddf7\\uddfa-\\uddff]|\\ud83c\\udde9\\ud83c[\\uddea\\uddec\\uddef\\uddf0\\uddf2\\uddf4\\uddff]|\\ud83c\\uddea\\ud83c[\\udde6\\udde8\\uddea\\uddec\\udded\\uddf7-\\uddfa]|\\ud83c\\uddeb\\ud83c[\\uddee-\\uddf0\\uddf2\\uddf4\\uddf7]|\\ud83c\\uddec\\ud83c[\\udde6\\udde7\\udde9-\\uddee\\uddf1-\\uddf3\\uddf5-\\uddfa\\uddfc\\uddfe]|\\ud83c\\udded\\ud83c[\\uddf0\\uddf2\\uddf3\\uddf7\\uddf9\\uddfa]|\\ud83c\\uddee\\ud83c[\\udde8-\\uddea\\uddf1-\\uddf4\\uddf6-\\uddf9]|\\ud83c\\uddef\\ud83c[\\uddea\\uddf2\\uddf4\\uddf5]|\\ud83c\\uddf0\\ud83c[\\uddea\\uddec-\\uddee\\uddf2\\uddf3\\uddf5\\uddf7\\uddfc\\uddfe\\uddff]|\\ud83c\\uddf1\\ud83c[\\udde6-\\udde8\\uddee\\uddf0\\uddf7-\\uddfb\\uddfe]|\\ud83c\\uddf2\\ud83c[\\udde6\\udde8-\\udded\\uddf0-\\uddff]|\\ud83c\\uddf3\\ud83c[\\udde6\\udde8\\uddea-\\uddec\\uddee\\uddf1\\uddf4\\uddf5\\uddf7\\uddfa\\uddff]|\\ud83c\\uddf4\\ud83c\\uddf2|\\ud83c\\uddf5\\ud83c[\\udde6\\uddea-\\udded\\uddf0-\\uddf3\\uddf7-\\uddf9\\uddfc\\uddfe]|\\ud83c\\uddf6\\ud83c\\udde6|\\ud83c\\uddf7\\ud83c[\\uddea\\uddf4\\uddf8\\uddfa\\uddfc]|\\ud83c\\uddf8\\ud83c[\\udde6-\\uddea\\uddec-\\uddf4\\uddf7-\\uddf9\\uddfb\\uddfd-\\uddff]|\\ud83c\\uddf9\\ud83c[\\udde6\\udde8\\udde9\\uddeb-\\udded\\uddef-\\uddf4\\uddf7\\uddf9\\uddfb\\uddfc\\uddff]|\\ud83c\\uddfa\\ud83c[\\udde6\\uddec\\uddf2\\uddf3\\uddf8\\uddfe\\uddff]|\\ud83c\\uddfb\\ud83c[\\udde6\\udde8\\uddea\\uddec\\uddee\\uddf3\\uddfa]|\\ud83c\\uddfc\\ud83c[\\uddeb\\uddf8]|\\ud83c\\uddfd\\ud83c\\uddf0|\\ud83c\\uddfe\\ud83c[\\uddea\\uddf9]|\\ud83c\\uddff\\ud83c[\\udde6\\uddf2\\uddfc]|\\ud83c[\\udccf\\udd8e\\udd91-\\udd9a\\udde6-\\uddff\\ude01\\ude32-\\ude36\\ude38-\\ude3a\\ude50\\ude51\\udf00-\\udf20\\udf2d-\\udf35\\udf37-\\udf7c\\udf7e-\\udf84\\udf86-\\udf93\\udfa0-\\udfc1\\udfc5\\udfc6\\udfc8\\udfc9\\udfcf-\\udfd3\\udfe0-\\udff0\\udff4\\udff8-\\udfff]|\\ud83d[\\udc00-\\udc3e\\udc40\\udc44\\udc45\\udc51-\\udc65\\udc6a\\udc6f\\udc79-\\udc7b\\udc7d-\\udc80\\udc84\\udc88-\\udc8e\\udc90\\udc92-\\udca9\\udcab-\\udcfc\\udcff-\\udd3d\\udd4b-\\udd4e\\udd50-\\udd67\\udda4\\uddfb-\\ude44\\ude48-\\ude4a\\ude80-\\udea2\\udea4-\\udeb3\\udeb7-\\udebf\\udec1-\\udec5\\uded0-\\uded2\\uded5-\\uded7\\udedd-\\udedf\\udeeb\\udeec\\udef4-\\udefc\\udfe0-\\udfeb\\udff0]|\\ud83e[\\udd0d\\udd0e\\udd10-\\udd17\\udd20-\\udd25\\udd27-\\udd2f\\udd3a\\udd3c\\udd3f-\\udd45\\udd47-\\udd76\\udd78-\\uddb4\\uddb7\\uddba\\uddbc-\\uddcc\\uddd0\\uddde-\\uddff\\ude70-\\ude74\\ude78-\\ude7c\\ude80-\\ude86\\ude90-\\udeac\\udeb0-\\udeba\\udec0-\\udec2\\uded0-\\uded9\\udee0-\\udee7]|[\\u23e9-\\u23ec\\u23f0\\u23f3\\u267e\\u26ce\\u2705\\u2728\\u274c\\u274e\\u2753-\\u2755\\u2795-\\u2797\\u27b0\\u27bf\\ue50a])|\\ufe0f/g;\n","import {\n ApiBotInlineMediaResult, ApiBotInlineResult, ApiBotInlineSwitchPm,\n ApiChatInviteImporter,\n ApiExportedInvite,\n ApiLanguage, ApiMessage, ApiShippingAddress, ApiStickerSet,\n} from '../api/types';\n\nexport enum LoadMoreDirection {\n Backwards,\n Forwards,\n Around,\n}\n\nexport enum FocusDirection {\n Up,\n Down,\n Static,\n}\n\nexport interface IAlbum {\n albumId: string;\n messages: ApiMessage[];\n mainMessage: ApiMessage;\n}\n\nexport type ThemeKey = 'light' | 'dark';\n\nexport interface IThemeSettings {\n background?: string;\n backgroundColor?: string;\n patternColor?: string;\n isBlurred?: boolean;\n}\n\nexport type NotifySettings = {\n hasPrivateChatsNotifications?: boolean;\n hasPrivateChatsMessagePreview?: boolean;\n hasGroupNotifications?: boolean;\n hasGroupMessagePreview?: boolean;\n hasBroadcastNotifications?: boolean;\n hasBroadcastMessagePreview?: boolean;\n hasContactJoinedNotifications?: boolean;\n hasWebNotifications: boolean;\n hasPushNotifications: boolean;\n notificationSoundVolume: number;\n};\n\nexport type LangCode = (\n 'en' | 'ar' | 'be' | 'ca' | 'nl' | 'fr' | 'de' | 'id' | 'it' | 'ko' | 'ms' | 'fa' | 'pl' | 'pt-br' | 'ru' | 'es'\n | 'tr' | 'uk' | 'uz'\n);\n\nexport type TimeFormat = '24h' | '12h';\n\nexport interface ISettings extends NotifySettings, Record {\n theme: ThemeKey;\n shouldUseSystemTheme: boolean;\n messageTextSize: number;\n animationLevel: 0 | 1 | 2;\n messageSendKeyCombo: 'enter' | 'ctrl-enter';\n canAutoLoadPhotoFromContacts: boolean;\n canAutoLoadPhotoInPrivateChats: boolean;\n canAutoLoadPhotoInGroups: boolean;\n canAutoLoadPhotoInChannels: boolean;\n canAutoLoadVideoFromContacts: boolean;\n canAutoLoadVideoInPrivateChats: boolean;\n canAutoLoadVideoInGroups: boolean;\n canAutoLoadVideoInChannels: boolean;\n canAutoLoadFileFromContacts: boolean;\n canAutoLoadFileInPrivateChats: boolean;\n canAutoLoadFileInGroups: boolean;\n canAutoLoadFileInChannels: boolean;\n autoLoadFileMaxSizeMb: number;\n canAutoPlayGifs: boolean;\n canAutoPlayVideos: boolean;\n shouldSuggestStickers: boolean;\n shouldLoopStickers: boolean;\n hasPassword?: boolean;\n languages?: ApiLanguage[];\n language: LangCode;\n isSensitiveEnabled?: boolean;\n canChangeSensitive?: boolean;\n timeFormat: TimeFormat;\n wasTimeFormatSetManually: boolean;\n isConnectionStatusMinimized: boolean;\n}\n\nexport interface ApiPrivacySettings {\n visibility: PrivacyVisibility;\n allowUserIds: string[];\n allowChatIds: string[];\n blockUserIds: string[];\n blockChatIds: string[];\n}\n\nexport interface InputPrivacyContact {\n id: string;\n accessHash?: string;\n}\n\nexport interface InputPrivacyRules {\n visibility: PrivacyVisibility;\n allowedUsers?: InputPrivacyContact[];\n allowedChats?: InputPrivacyContact[];\n blockedUsers?: InputPrivacyContact[];\n blockedChats?: InputPrivacyContact[];\n}\n\nexport type IAnchorPosition = {\n x: number;\n y: number;\n};\n\nexport interface ShippingOption {\n id: string;\n title: string;\n amount: number;\n prices: Price[];\n}\n\nexport interface Price {\n label: string;\n amount: number;\n}\n\nexport interface Invoice {\n currency?: string;\n emailRequested?: boolean;\n emailToProvider?: boolean;\n flexible?: boolean;\n nameRequested?: boolean;\n phoneRequested?: boolean;\n phoneToProvider?: boolean;\n prices?: Price[];\n shippingAddressRequested?: boolean;\n test?: boolean;\n}\n\nexport interface Receipt {\n currency: string;\n prices: Price[];\n info?: {\n shippingAddress?: ApiShippingAddress;\n phone?: string;\n name?: string;\n };\n totalAmount: number;\n credentialsTitle: string;\n shippingPrices?: Price[];\n shippingMethod?: string;\n photoUrl?: string;\n text?: string;\n title?: string;\n}\n\nexport enum SettingsScreens {\n Main,\n EditProfile,\n Notifications,\n DataStorage,\n Language,\n ActiveSessions,\n General,\n GeneralChatBackground,\n GeneralChatBackgroundColor,\n Privacy,\n PrivacyPhoneNumber,\n PrivacyLastSeen,\n PrivacyProfilePhoto,\n PrivacyForwarding,\n PrivacyGroupChats,\n PrivacyPhoneNumberAllowedContacts,\n PrivacyPhoneNumberDeniedContacts,\n PrivacyLastSeenAllowedContacts,\n PrivacyLastSeenDeniedContacts,\n PrivacyProfilePhotoAllowedContacts,\n PrivacyProfilePhotoDeniedContacts,\n PrivacyForwardingAllowedContacts,\n PrivacyForwardingDeniedContacts,\n PrivacyGroupChatsAllowedContacts,\n PrivacyGroupChatsDeniedContacts,\n PrivacyBlockedUsers,\n Folders,\n FoldersCreateFolder,\n FoldersEditFolder,\n FoldersEditFolderFromChatList,\n FoldersIncludedChats,\n FoldersIncludedChatsFromChatList,\n FoldersExcludedChats,\n FoldersExcludedChatsFromChatList,\n TwoFaDisabled,\n TwoFaNewPassword,\n TwoFaNewPasswordConfirm,\n TwoFaNewPasswordHint,\n TwoFaNewPasswordEmail,\n TwoFaNewPasswordEmailCode,\n TwoFaEnabled,\n TwoFaChangePasswordCurrent,\n TwoFaChangePasswordNew,\n TwoFaChangePasswordConfirm,\n TwoFaChangePasswordHint,\n TwoFaTurnOff,\n TwoFaRecoveryEmailCurrentPassword,\n TwoFaRecoveryEmail,\n TwoFaRecoveryEmailCode,\n TwoFaCongratulations,\n QuickReaction,\n}\n\nexport type StickerSetOrRecent = Pick;\n\nexport enum LeftColumnContent {\n ChatList,\n GlobalSearch,\n Settings,\n Contacts,\n Archived,\n NewChannelStep1,\n NewChannelStep2,\n NewGroupStep1,\n NewGroupStep2,\n}\n\nexport enum GlobalSearchContent {\n ChatList,\n Media,\n Links,\n Files,\n Music,\n Voice,\n}\n\nexport enum RightColumnContent {\n ChatInfo,\n Search,\n Management,\n Statistics,\n StickerSearch,\n GifSearch,\n PollResults,\n AddingMembers,\n}\n\nexport enum MediaViewerOrigin {\n Inline,\n ScheduledInline,\n SharedMedia,\n ProfileAvatar,\n SettingsAvatar,\n MiddleHeaderAvatar,\n Album,\n ScheduledAlbum,\n SearchResult,\n}\n\nexport enum AudioOrigin {\n Inline,\n SharedMedia,\n Search,\n}\n\nexport enum ChatCreationProgress {\n Idle,\n InProgress,\n Complete,\n Error,\n}\n\nexport enum ProfileEditProgress {\n Idle,\n InProgress,\n Complete,\n Error,\n}\n\nexport enum ManagementProgress {\n Idle,\n InProgress,\n Complete,\n Error,\n}\n\nexport interface ManagementState {\n isActive: boolean;\n nextScreen?: ManagementScreens;\n isUsernameAvailable?: boolean;\n error?: string;\n invites?: ApiExportedInvite[];\n revokedInvites?: ApiExportedInvite[];\n editingInvite?: ApiExportedInvite;\n inviteInfo?: {\n invite: ApiExportedInvite;\n importers?: ApiChatInviteImporter[];\n requesters?: ApiChatInviteImporter[];\n };\n}\n\nexport enum NewChatMembersProgress {\n Closed,\n InProgress,\n Loading,\n}\n\nexport type ProfileTabType = 'members' | 'commonChats' | 'media' | 'documents' | 'links' | 'audio' | 'voice';\nexport type SharedMediaType = 'media' | 'documents' | 'links' | 'audio' | 'voice';\nexport type ApiPrivacyKey = 'phoneNumber' | 'lastSeen' | 'profilePhoto' | 'forwards' | 'chatInvite';\nexport type PrivacyVisibility = 'everybody' | 'contacts' | 'nonContacts' | 'nobody';\n\nexport enum ProfileState {\n Profile,\n SharedMedia,\n MemberList,\n}\n\nexport enum PaymentStep {\n ShippingInfo,\n Shipping,\n PaymentInfo,\n Checkout,\n ConfirmPayment,\n}\n\nexport const UPLOADING_WALLPAPER_SLUG = 'UPLOADING_WALLPAPER_SLUG';\n\nexport enum ManagementScreens {\n Initial,\n ChatPrivacyType,\n Discussion,\n ChannelSubscribers,\n GroupType,\n GroupPermissions,\n GroupRemovedUsers,\n ChannelRemovedUsers,\n GroupUserPermissionsCreate,\n GroupUserPermissions,\n ChatAdministrators,\n GroupRecentActions,\n ChatAdminRights,\n ChatNewAdminRights,\n GroupMembers,\n GroupAddAdmins,\n Invites,\n EditInvite,\n Reactions,\n InviteInfo,\n JoinRequests,\n}\n\nexport type ManagementType = 'user' | 'group' | 'channel';\n\nexport type NotifyException = {\n isMuted: boolean;\n isSilent?: boolean;\n shouldShowPreviews?: boolean;\n};\n\nexport type EmojiKeywords = {\n isLoading?: boolean;\n version: number;\n keywords: Record;\n};\n\nexport type InlineBotSettings = {\n id: string;\n help?: string;\n query?: string;\n offset?: string;\n canLoadMore?: boolean;\n results?: (ApiBotInlineResult | ApiBotInlineMediaResult)[];\n isGallery?: boolean;\n switchPm?: ApiBotInlineSwitchPm;\n};\n","import { fastRaf } from './schedulers';\n\ninterface AnimationInstance {\n isCancelled: boolean;\n}\n\nlet currentInstance: AnimationInstance | undefined;\n\nexport function animateSingle(tick: Function, instance?: AnimationInstance) {\n if (!instance) {\n if (currentInstance && !currentInstance.isCancelled) {\n currentInstance.isCancelled = true;\n }\n\n instance = { isCancelled: false };\n currentInstance = instance;\n }\n\n if (!instance!.isCancelled && tick()) {\n fastRaf(() => {\n animateSingle(tick, instance);\n });\n }\n}\n\nexport function animate(tick: Function) {\n if (tick()) {\n fastRaf(() => {\n animate(tick);\n });\n }\n}\n\nexport type TimingFn = (t: number) => number;\n\nexport type AnimateNumberProps = {\n to: number | number[];\n from: number | number[];\n duration: number;\n onUpdate: (value: any) => void;\n timing?: TimingFn;\n onEnd?: () => void;\n};\n\nexport const timingFunctions = {\n linear: (t: number) => t,\n easeIn: (t: number) => t ** 1.675,\n easeOut: (t: number) => 1 - (1 - t ** 1.675),\n easeInOut: (t: number) => 0.5 * (Math.sin((t - 0.5) * Math.PI) + 1),\n easeInQuad: (t: number) => t * t,\n easeOutQuad: (t: number) => t * (2 - t),\n easeInOutQuad: (t: number) => (t < 0.5 ? 2 * t * t : -1 + (4 - 2 * t) * t),\n easeInCubic: (t: number) => t * t * t,\n easeOutCubic: (t: number) => (--t) * t * t + 1,\n easeInOutCubic: (t: number) => (t < 0.5 ? 4 * t * t * t : (t - 1) * (2 * t - 2) * (2 * t - 2) + 1),\n easeInQuart: (t: number) => t * t * t * t,\n easeOutQuart: (t: number) => 1 - (--t) * t * t * t,\n easeInOutQuart: (t: number) => (t < 0.5 ? 8 * t * t * t * t : 1 - 8 * (--t) * t * t * t),\n easeInQuint: (t: number) => t * t * t * t * t,\n easeOutQuint: (t: number) => 1 + (--t) * t * t * t * t,\n easeInOutQuint: (t: number) => (t < 0.5 ? 16 * t * t * t * t * t : 1 + 16 * (--t) * t * t * t * t),\n};\n\nexport function animateNumber({\n timing = timingFunctions.linear,\n onUpdate,\n duration,\n onEnd,\n from,\n to,\n}: AnimateNumberProps) {\n const t0 = Date.now();\n let canceled = false;\n\n animate(() => {\n if (canceled) return false;\n const t1 = Date.now();\n let t = (t1 - t0) / duration;\n if (t > 1) t = 1;\n const progress = timing(t);\n if (typeof from === 'number' && typeof to === 'number') {\n onUpdate(from + ((to - from) * progress));\n } else if (Array.isArray(from) && Array.isArray(to)) {\n const result = from.map((f, i) => f + ((to[i] - f) * progress));\n onUpdate(result);\n }\n if (t === 1 && onEnd) onEnd();\n return t < 1;\n });\n\n return () => {\n canceled = true;\n if (onEnd) onEnd();\n };\n}\n","import { DEBUG } from '../config';\n\nexport function updateAppBadge(unreadCount: number) {\n if (typeof window.navigator.setAppBadge !== 'function') {\n return;\n }\n\n window.navigator.setAppBadge(unreadCount).catch((err) => {\n if (DEBUG) {\n // eslint-disable-next-line no-console\n console.error(err);\n }\n });\n}\n","export default function arePropsShallowEqual(currentProps: AnyLiteral, newProps: AnyLiteral) {\n if (currentProps === newProps) {\n return true;\n }\n\n const currentKeys = Object.keys(currentProps);\n const currentKeysLength = currentKeys.length;\n const newKeysLength = Object.keys(newProps).length;\n\n if (currentKeysLength !== newKeysLength) {\n return false;\n }\n\n if (currentKeysLength === 0) {\n return true;\n }\n\n for (let i = 0; i < currentKeysLength; i++) {\n const prop = currentKeys[i];\n if (currentProps[prop] !== newProps[prop]) {\n return false;\n }\n }\n\n return true;\n}\n\nexport function getUnequalProps(currentProps: AnyLiteral, newProps: AnyLiteral) {\n const currentKeys = Object.keys(currentProps);\n const currentKeysLength = currentKeys.length;\n const newKeysLength = Object.keys(newProps).length;\n\n if (currentKeysLength !== newKeysLength) {\n return ['%LENGTH%'];\n }\n\n return currentKeys.reduce((res, prop) => {\n if (currentProps[prop] !== newProps[prop]) {\n res.push(`${prop}: ${currentProps[prop]} => ${newProps[prop]}`);\n }\n\n return res;\n }, [] as string[]);\n}\n","type Parts = (string | false | undefined)[];\ntype PartsWithGlobals = (string | false | undefined | string[])[];\ntype ClassNameBuilder =\n ((elementName: string, ...modifiers: PartsWithGlobals) => string)\n & Record;\n\nexport default function buildClassName(...parts: Parts) {\n return parts.filter(Boolean).join(' ');\n}\n\nexport function createClassNameBuilder(componentName: string) {\n return ((elementName: string, ...modifiers: PartsWithGlobals) => {\n const baseName = elementName === '&' ? componentName : `${componentName}__${elementName}`;\n\n return modifiers.reduce((acc, modifier) => {\n if (modifier) {\n // A bit hacky way to pass global class names\n if (Array.isArray(modifier)) {\n acc.push(...modifier);\n } else {\n acc.push(`${baseName}--${modifier}`);\n }\n }\n\n return acc;\n }, [baseName]).join(' ');\n }) as ClassNameBuilder;\n}\n","// eslint-disable-next-line no-restricted-globals\nconst cacheApi = self.caches;\n\nexport enum Type {\n Text,\n Blob,\n Json,\n}\n\nexport async function fetch(\n cacheName: string, key: string, type: Type, isHtmlAllowed = false,\n) {\n if (!cacheApi) {\n return undefined;\n }\n\n try {\n // To avoid the error \"Request scheme 'webdocument' is unsupported\"\n const request = new Request(key.replace(/:/g, '_'));\n const cache = await cacheApi.open(cacheName);\n const response = await cache.match(request);\n if (!response) {\n return undefined;\n }\n\n const contentType = response.headers.get('Content-Type');\n\n switch (type) {\n case Type.Text:\n return await response.text();\n case Type.Blob: {\n // Ignore deprecated data-uri avatars\n if (key.startsWith('avatar') && contentType && contentType.startsWith('text')) {\n return undefined;\n }\n\n const blob = await response.blob();\n const shouldRecreate = !blob.type || (!isHtmlAllowed && blob.type.includes('html'));\n // iOS Safari fails to preserve `type` in cache\n let resolvedType = blob.type || contentType;\n\n if (!(shouldRecreate && resolvedType)) {\n return blob;\n }\n\n // Prevent HTML-in-video attacks (for files that were cached before fix)\n if (!isHtmlAllowed) {\n resolvedType = resolvedType.replace(/html/gi, '');\n }\n\n return new Blob([blob], { type: resolvedType });\n }\n case Type.Json:\n return await response.json();\n default:\n return undefined;\n }\n } catch (err) {\n // eslint-disable-next-line no-console\n console.warn(err);\n return undefined;\n }\n}\n\nexport async function save(cacheName: string, key: string, data: AnyLiteral | Blob | string) {\n if (!cacheApi) {\n return undefined;\n }\n\n try {\n const cacheData = typeof data === 'string' || data instanceof Blob ? data : JSON.stringify(data);\n // To avoid the error \"Request scheme 'webdocument' is unsupported\"\n const request = new Request(key.replace(/:/g, '_'));\n const response = new Response(cacheData);\n const cache = await cacheApi.open(cacheName);\n return await cache.put(request, response);\n } catch (err) {\n // eslint-disable-next-line no-console\n console.warn(err);\n return undefined;\n }\n}\n\nexport async function clear(cacheName: string) {\n try {\n if (!cacheApi) {\n return undefined;\n }\n\n return await cacheApi.delete(cacheName);\n } catch (err) {\n // eslint-disable-next-line no-console\n console.warn(err);\n return undefined;\n }\n}\n","export function createCallbackManager() {\n const callbacks: AnyToVoidFunction[] = [];\n\n function addCallback(cb: AnyToVoidFunction) {\n callbacks.push(cb);\n\n return () => {\n removeCallback(cb);\n };\n }\n\n function removeCallback(cb: AnyToVoidFunction) {\n const index = callbacks.indexOf(cb);\n if (index !== -1) {\n callbacks.splice(index, 1);\n }\n }\n\n function runCallbacks(...args: any[]) {\n callbacks.forEach((callback) => {\n callback(...args);\n });\n }\n\n function hasCallbacks() {\n return Boolean(callbacks.length);\n }\n\n return {\n runCallbacks,\n addCallback,\n removeCallback,\n hasCallbacks,\n };\n}\n\nexport type CallbackManager = ReturnType;\n","import captureKeyboardListener from './captureKeyboardListeners';\n\ntype IHandlerFunction = () => void;\n\nexport default function captureEscKeyListener(handler: IHandlerFunction) {\n return captureKeyboardListener({ onEsc: handler });\n}\n","type HandlerName = 'onEnter' | 'onBackspace' | 'onDelete' | 'onEsc' | 'onUp' | 'onDown' | 'onLeft' | 'onRight'\n| 'onTab';\ntype Handler = (e: KeyboardEvent) => void;\ntype CaptureOptions = Partial>;\n\nconst keyToHandlerName: Record = {\n Enter: 'onEnter',\n Backspace: 'onBackspace',\n Delete: 'onDelete',\n Esc: 'onEsc',\n Escape: 'onEsc',\n ArrowUp: 'onUp',\n ArrowDown: 'onDown',\n ArrowLeft: 'onLeft',\n ArrowRight: 'onRight',\n Tab: 'onTab',\n};\n\nconst handlers: Record = {\n onEnter: [],\n onDelete: [],\n onBackspace: [],\n onEsc: [],\n onUp: [],\n onDown: [],\n onLeft: [],\n onRight: [],\n onTab: [],\n};\n\nexport default function captureKeyboardListeners(options: CaptureOptions) {\n if (!hasActiveHandlers()) {\n document.addEventListener('keydown', handleKeyDown, true);\n }\n\n (Object.keys(options) as Array).forEach((handlerName) => {\n const handler = options[handlerName];\n if (!handler) {\n return;\n }\n\n const currentEventHandlers = handlers[handlerName];\n if (currentEventHandlers) {\n currentEventHandlers.push(handler);\n }\n });\n\n return () => {\n releaseKeyboardListener(options);\n };\n}\n\nfunction hasActiveHandlers() {\n return Object.values(handlers).some((keyHandlers) => Boolean(keyHandlers.length));\n}\n\nfunction handleKeyDown(e: KeyboardEvent) {\n const handlerName = keyToHandlerName[e.key];\n if (!handlerName) {\n return;\n }\n\n const { length } = handlers[handlerName];\n if (!length) {\n return;\n }\n e.stopPropagation();\n\n const handler = handlers[handlerName][length - 1];\n handler!(e);\n}\n\nfunction releaseKeyboardListener(options: CaptureOptions) {\n (Object.keys(options) as Array).forEach((handlerName) => {\n const handler = options[handlerName];\n const currentEventHandlers = handlers[handlerName];\n if (currentEventHandlers) {\n const index = currentEventHandlers.findIndex((cb) => cb === handler);\n if (index !== -1) {\n currentEventHandlers.splice(index, 1);\n }\n }\n });\n\n if (!hasActiveHandlers()) {\n document.removeEventListener('keydown', handleKeyDown, false);\n }\n}\n","import { DEBUG } from '../config';\n\nexport const CLIPBOARD_ITEM_SUPPORTED = window.navigator.clipboard && window.ClipboardItem;\n\nconst textCopyEl = document.createElement('textarea');\ntextCopyEl.setAttribute('readonly', '');\ntextCopyEl.tabIndex = -1;\ntextCopyEl.className = 'visually-hidden';\n\nexport const copyTextToClipboard = (str: string): void => {\n textCopyEl.value = str;\n document.body.appendChild(textCopyEl);\n const selection = document.getSelection();\n\n if (selection) {\n // Store previous selection\n const rangeToRestore = selection.rangeCount > 0 && selection.getRangeAt(0);\n textCopyEl.select();\n document.execCommand('copy');\n // Restore the original selection\n if (rangeToRestore) {\n selection.removeAllRanges();\n selection.addRange(rangeToRestore);\n }\n }\n\n document.body.removeChild(textCopyEl);\n};\n\nexport const copyImageToClipboard = (imageUrl?: string) => {\n if (!imageUrl) return;\n const canvas = document.createElement('canvas');\n const ctx = canvas.getContext('2d');\n const imageEl = new Image();\n imageEl.onload = (e: Event) => {\n if (ctx && e.currentTarget) {\n const img = e.currentTarget as HTMLImageElement;\n canvas.width = img.width;\n canvas.height = img.height;\n ctx.drawImage(img, 0, 0, img.width, img.height);\n canvas.toBlob(copyBlobToClipboard, 'image/png', 1);\n }\n };\n\n imageEl.src = imageUrl;\n};\n\nasync function copyBlobToClipboard(pngBlob: Blob | null) {\n if (!pngBlob || !CLIPBOARD_ITEM_SUPPORTED) {\n return;\n }\n\n try {\n await window.navigator.clipboard.write?.([\n new ClipboardItem({\n [pngBlob.type]: pngBlob,\n }),\n ]);\n } catch (error) {\n if (DEBUG) {\n // eslint-disable-next-line no-console\n console.error(error);\n }\n }\n}\n","import { LangFn } from '../hooks/useLang';\nimport withCache from './withCache';\n\nconst WEEKDAYS_FULL = ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'];\nconst MONTHS_FULL = [\n 'January', 'February', 'March', 'April', 'May', 'June',\n 'July', 'August', 'September', 'October', 'November', 'December',\n];\n\nconst MONTHS_FULL_LOWERCASE = MONTHS_FULL.map((month) => month.toLowerCase());\nconst MIN_SEARCH_YEAR = 2015;\nconst MAX_DAY_IN_MONTH = 31;\nconst MAX_MONTH_IN_YEAR = 12;\nexport const MILLISECONDS_IN_DAY = 24 * 60 * 60 * 1000;\n\nexport function isToday(date: Date) {\n return getDayStartAt(new Date()) === getDayStartAt(date);\n}\n\nexport function getDayStart(datetime: number | Date) {\n const date = new Date(datetime);\n date.setHours(0, 0, 0, 0);\n return date;\n}\n\nexport function getDayStartAt(datetime: number | Date) {\n return getDayStart(datetime).getTime();\n}\n\nexport function toYearMonth(timestamp: number) {\n const date = new Date(timestamp * 1000);\n return `${date.getFullYear()}-${date.getMonth()}`;\n}\n\nfunction toIsoString(date: Date) {\n return `${date.getFullYear()}-${date.getMonth() + 1}-${date.getDate()}`;\n}\n\n// @optimization `toLocaleTimeString` is avoided because of bad performance\nexport function formatTime(lang: LangFn, datetime: number | Date) {\n const date = typeof datetime === 'number' ? new Date(datetime) : datetime;\n const timeFormat = lang.timeFormat || '24h';\n\n let hours = date.getHours();\n let marker = '';\n if (timeFormat === '12h') {\n marker = hours >= 12 ? ' PM' : ' AM';\n hours = hours > 12 ? hours % 12 : hours;\n }\n\n return `${String(hours).padStart(2, '0')}:${String(date.getMinutes()).padStart(2, '0')}${marker}`;\n}\n\nexport function formatPastTimeShort(lang: LangFn, datetime: number | Date) {\n const date = typeof datetime === 'number' ? new Date(datetime) : datetime;\n\n const today = getDayStart(new Date());\n if (date >= today) {\n return formatTime(lang, date);\n }\n\n const weekAgo = new Date(today);\n weekAgo.setDate(today.getDate() - 7);\n if (date >= weekAgo) {\n return lang(`Weekday.Short${WEEKDAYS_FULL[date.getDay()]}`);\n }\n\n const noYear = date.getFullYear() === today.getFullYear();\n\n return formatDateToString(date, lang.code, noYear);\n}\n\nexport function formatFullDate(lang: LangFn, datetime: number | Date) {\n return formatDateToString(datetime, lang.code, false, 'numeric');\n}\n\nexport function formatMonthAndYear(lang: LangFn, date: Date, isShort = false) {\n return formatDateToString(date, lang.code, false, isShort ? 'short' : 'long', true);\n}\n\nexport function formatCountdown(\n lang: LangFn,\n msLeft: number,\n) {\n const days = Math.floor(msLeft / MILLISECONDS_IN_DAY);\n if (msLeft < 0) {\n return 0;\n } else if (days < 1) {\n return formatMediaDuration(msLeft / 1000);\n } else if (days < 7) {\n return lang('Days', days);\n } else if (days < 30) {\n return lang('Weeks', Math.floor(days / 7));\n } else if (days < 365) {\n return lang('Months', Math.floor(days / 30));\n } else {\n return lang('Years', Math.floor(days / 365));\n }\n}\n\nexport function formatCountdownShort(lang: LangFn, msLeft: number) {\n if (msLeft < 60 * 1000) {\n return Math.ceil(msLeft / 1000);\n } else if (msLeft < 60 * 60 * 1000) {\n return Math.ceil(msLeft / (60 * 1000));\n } else if (msLeft < MILLISECONDS_IN_DAY) {\n return lang('MessageTimer.ShortHours', Math.ceil(msLeft / (60 * 60 * 1000)));\n } else {\n return lang('MessageTimer.ShortDays', Math.ceil(msLeft / MILLISECONDS_IN_DAY));\n }\n}\n\nexport function formatLastUpdated(lang: LangFn, currentTime: number, lastUpdated = currentTime) {\n const seconds = currentTime - lastUpdated;\n if (seconds < 60) {\n return lang('LiveLocationUpdated.JustNow');\n } else if (seconds < 60 * 60) {\n return lang('LiveLocationUpdated.MinutesAgo', Math.floor(seconds / 60));\n } else {\n return lang('LiveLocationUpdated.TodayAt', formatTime(lang, lastUpdated));\n }\n}\n\nexport function formatHumanDate(\n lang: LangFn,\n datetime: number | Date,\n isShort = false,\n noWeekdays = false,\n isUpperFirst?: boolean,\n) {\n const date = typeof datetime === 'number' ? new Date(datetime) : datetime;\n\n const today = getDayStart(new Date());\n\n if (!noWeekdays) {\n if (toIsoString(date) === toIsoString(today)) {\n return (isUpperFirst || !isShort ? upperFirst : lowerFirst)(lang('Weekday.Today'));\n }\n\n const yesterday = new Date(today);\n yesterday.setDate(today.getDate() - 1);\n if (toIsoString(date) === toIsoString(yesterday)) {\n return (isUpperFirst || !isShort ? upperFirst : lowerFirst)(lang('Weekday.Yesterday'));\n }\n\n const weekAgo = new Date(today);\n const weekAhead = new Date(today);\n weekAgo.setDate(today.getDate() - 7);\n weekAhead.setDate(today.getDate() + 7);\n if (date >= weekAgo && date <= weekAhead) {\n const weekDay = WEEKDAYS_FULL[date.getDay()];\n const weekDayString = isShort ? lang(`Weekday.Short${weekDay}`) : lang(`Weekday.${weekDay}`);\n\n return (isUpperFirst || !isShort ? upperFirst : lowerFirst)(weekDayString);\n }\n }\n\n const noYear = date.getFullYear() === today.getFullYear();\n const formattedDate = formatDateToString(date, lang.code, noYear, isShort ? 'short' : 'long');\n\n return (isUpperFirst || !isShort ? upperFirst : lowerFirst)(formattedDate);\n}\n\nexport function formatMediaDateTime(\n lang: LangFn,\n datetime: number | Date,\n isUpperFirst?: boolean,\n) {\n const date = typeof datetime === 'number' ? new Date(datetime) : datetime;\n\n return `${formatHumanDate(lang, date, true, undefined, isUpperFirst)}, ${formatTime(lang, date)}`;\n}\n\nexport function formatMediaDuration(duration: number, maxValue?: number) {\n const hours = Math.floor(duration / 3600);\n const minutes = Math.floor((duration % 3600) / 60);\n const seconds = Math.floor(duration % 3600 % 60);\n\n const maxHours = maxValue ? Math.floor(maxValue / 3600) : 0;\n const maxMinutes = maxValue ? Math.floor((maxValue % 3600) / 60) : 0;\n let string = '';\n if (hours > 0 || maxHours > 0) {\n string += `${String(hours).padStart(2, '0')}:`;\n string += `${String(minutes).padStart(2, '0')}:`;\n } else if (maxMinutes >= 10) {\n string += `${String(minutes).padStart(2, '0')}:`;\n } else {\n string += `${String(minutes)}:`;\n }\n string += String(seconds).padStart(2, '0');\n\n return string;\n}\n\nexport function formatVoiceRecordDuration(durationInMs: number) {\n const parts = [];\n\n let milliseconds = durationInMs % 1000;\n durationInMs -= milliseconds;\n milliseconds = Math.floor(milliseconds / 10);\n\n durationInMs = Math.floor(durationInMs / 1000);\n const seconds = durationInMs % 60;\n durationInMs -= seconds;\n\n durationInMs = Math.floor(durationInMs / 60);\n const minutes = durationInMs % 60;\n durationInMs -= minutes;\n\n durationInMs = Math.floor(durationInMs / 60);\n const hours = durationInMs % 60;\n\n if (hours > 0) {\n parts.push(String(hours).padStart(2, '0'));\n }\n parts.push(String(minutes).padStart(hours > 0 ? 2 : 1, '0'));\n parts.push(String(seconds).padStart(2, '0'));\n\n return `${parts.join(':')},${String(milliseconds).padStart(2, '0')}`;\n}\n\nconst formatDayToStringWithCache = withCache((\n dayStartAt: number,\n locale: string,\n noYear?: boolean,\n monthFormat: 'short' | 'long' | 'numeric' = 'short',\n noDay?: boolean,\n) => {\n return new Date(dayStartAt).toLocaleString(\n locale,\n {\n year: noYear ? undefined : 'numeric',\n month: monthFormat,\n day: noDay ? undefined : 'numeric',\n },\n );\n});\n\nexport function formatDateToString(\n datetime: Date | number,\n locale = 'en-US',\n noYear = false,\n monthFormat: 'short' | 'long' | 'numeric' = 'short',\n noDay = false,\n) {\n const date = typeof datetime === 'number' ? new Date(datetime) : datetime;\n const dayStartAt = getDayStartAt(date);\n\n return formatDayToStringWithCache(dayStartAt, locale, noYear, monthFormat, noDay);\n}\n\nexport function formatDateTimeToString(datetime: Date | number, locale = 'en-US') {\n const date = typeof datetime === 'number' ? new Date(datetime) : datetime;\n return date.toLocaleString(\n locale,\n {\n year: 'numeric',\n month: 'short',\n day: 'numeric',\n hour: 'numeric',\n minute: 'numeric',\n second: 'numeric',\n },\n );\n}\n\nfunction isValidDate(day: number, month: number, year = 2021): boolean {\n if (month > (MAX_MONTH_IN_YEAR - 1) || day > MAX_DAY_IN_MONTH) {\n return false;\n }\n const date = new Date(year, month, day);\n return !Number.isNaN(date.getTime()) && date.getDate() === day;\n}\n\nexport function parseDateString(query = ''): string | undefined {\n const matchStringDate = query.match(/\\d{1,2}\\s[a-zA-Z]{3,}/);\n const matchEuropeStringDate = query.match(/[a-zA-Z]{3,}\\s\\d{1,2}/);\n const matchNumberDate = query.match(/\\d{1,2}[./-]\\d{1,2}([./-]\\d{2,4})?/);\n if (!matchStringDate && !matchNumberDate && !matchEuropeStringDate) {\n return undefined;\n }\n\n if (matchNumberDate) {\n const [date, month, year] = query.split(/[./-]/).map(Number);\n return !(year && year < MIN_SEARCH_YEAR) && isValidDate(date, month - 1, year || undefined)\n ? `${year ? `${year}-` : ''}${String(month).padStart(2, '0')}-${String(date).padStart(2, '0')}`\n : undefined;\n }\n\n const dateParts = query.split(' ');\n const date = matchStringDate ? dateParts[0] : dateParts[1];\n const month = (matchStringDate ? dateParts[1] : dateParts[0]).toLowerCase();\n const monthIndex = MONTHS_FULL_LOWERCASE.findIndex((item) => item.startsWith(month));\n\n return monthIndex !== -1 && isValidDate(Number(date), monthIndex)\n ? `${String(monthIndex + 1).padStart(2, '0')}-${String(date).padStart(2, '0')}`\n : undefined;\n}\n\nexport function timestampPlusDay(timestamp: number) {\n return timestamp + MILLISECONDS_IN_DAY / 1000;\n}\n\nfunction lowerFirst(str: string) {\n return `${str[0].toLowerCase()}${str.slice(1)}`;\n}\n\nfunction upperFirst(str: string) {\n return `${str[0].toUpperCase()}${str.slice(1)}`;\n}\n","import EMOJI_REGEX from '../lib/twemojiRegex';\n\n// Due to the fact that emoji from Apple do not contain some characters, it is necessary to remove them from emoji-data\n// https://github.com/iamcal/emoji-data/issues/136\nconst EXCLUDE_EMOJIS = ['female_sign', 'male_sign', 'medical_symbol'];\n\nconst ISO_FLAGS_OFFSET = 127397;\n\nexport type EmojiRawData = typeof import('emoji-data-ios/emoji-data.json');\nexport type EmojiModule = { default: EmojiRawData };\n\nexport type EmojiData = {\n categories: Array;\n emojis: Record;\n};\n\n// Non-standard variations of emojis, used on some devices\nconst EMOJI_EXCEPTIONS: [string | RegExp, string][] = [\n [/\\u{1f3f3}\\u200d\\u{1f308}/gu, '\\u{1f3f3}\\ufe0f\\u200d\\u{1f308}'], // 🏳‍🌈\n [/\\u{1f3f3}\\u200d\\u26a7\\ufe0f/gu, '\\u{1f3f3}\\ufe0f\\u200d\\u26a7\\ufe0f'], // 🏳️‍⚧️\n [/\\u{1f937}\\u200d\\u2642[^\\ufe0f]/gu, '\\u{1f937}\\u200d\\u2642\\ufe0f'], // 🤷‍♂️\n];\n\nfunction unifiedToNative(unified: string) {\n const unicodes = unified.split('-');\n const codePoints = unicodes.map((i) => parseInt(i, 16));\n\n return String.fromCodePoint(...codePoints);\n}\n\nexport function fixNonStandardEmoji(text: string) {\n // Non-standard sequences typically parsed as separate emojis, so no need to fix text without any\n if (!text.match(EMOJI_REGEX)) return text;\n // eslint-disable-next-line no-restricted-syntax\n for (const [regex, replacement] of EMOJI_EXCEPTIONS) {\n text = text.replace(regex, replacement);\n }\n\n return text;\n}\n\nexport function nativeToUnified(emoji: string) {\n let code;\n\n if (emoji.length === 1) {\n code = emoji.charCodeAt(0).toString(16).padStart(4, '0');\n } else {\n const pairs = [];\n for (let i = 0; i < emoji.length; i++) {\n if (emoji.charCodeAt(i) >= 0xd800 && emoji.charCodeAt(i) <= 0xdbff) {\n if (emoji.charCodeAt(i + 1) >= 0xdc00 && emoji.charCodeAt(i + 1) <= 0xdfff) {\n pairs.push(\n (emoji.charCodeAt(i) - 0xd800) * 0x400\n + (emoji.charCodeAt(i + 1) - 0xdc00) + 0x10000,\n );\n }\n } else if (emoji.charCodeAt(i) < 0xd800 || emoji.charCodeAt(i) > 0xdfff) {\n pairs.push(emoji.charCodeAt(i));\n }\n }\n\n code = pairs.map((x) => x.toString(16).padStart(4, '0')).join('-');\n }\n\n return code;\n}\n\nexport function uncompressEmoji(data: EmojiRawData): EmojiData {\n const emojiData: EmojiData = { categories: [], emojis: {} };\n\n for (let i = 0; i < data.length; i += 2) {\n const category = {\n id: data[i][0],\n name: data[i][1],\n emojis: [],\n } as EmojiCategory;\n\n for (let j = 0; j < data[i + 1].length; j++) {\n const emojiRaw = data[i + 1][j];\n if (!EXCLUDE_EMOJIS.includes(emojiRaw[1][0])) {\n category.emojis.push(emojiRaw[1][0]);\n emojiData.emojis[emojiRaw[1][0]] = {\n id: emojiRaw[1][0],\n names: emojiRaw[1] as string[],\n native: unifiedToNative(emojiRaw[0] as string),\n image: (emojiRaw[0] as string).toLowerCase(),\n };\n }\n }\n\n emojiData.categories.push(category);\n }\n\n return emojiData;\n}\n\nexport function isoToEmoji(iso: string) {\n const code = iso.toUpperCase();\n\n if (!/^[A-Z]{2}$/.test(code)) return iso;\n const codePoints = [...code].map((c) => c.codePointAt(0)! + ISO_FLAGS_OFFSET);\n return String.fromCodePoint(...codePoints);\n}\n","export function ensureProtocol(url?: string) {\n if (!url) {\n return undefined;\n }\n\n // HTTP was chosen by default as a fix for https://bugs.telegram.org/c/10712.\n // It is also the default protocol in the official TDesktop client.\n return url.includes('://') ? url : `http://${url}`;\n}\n","let isWebpSupportedCache: boolean | undefined;\n\nexport function isWebpSupported() {\n return Boolean(isWebpSupportedCache);\n}\n\nfunction testWebp(): Promise {\n return new Promise((resolve) => {\n const webp = new Image();\n // eslint-disable-next-line max-len\n webp.src = 'data:image/webp;base64,UklGRjoAAABXRUJQVlA4IC4AAACyAgCdASoCAAIALmk0mk0iIiIiIgBoSygABc6WWgAA/veff/0PP8bA//LwYAAA';\n const handleLoadOrError = () => {\n resolve(webp.height === 2);\n };\n webp.onload = handleLoadOrError;\n webp.onerror = handleLoadOrError;\n });\n}\n\ntestWebp().then((hasWebp) => {\n isWebpSupportedCache = hasWebp;\n});\n","import { ThemeKey } from '../types';\n\nlet systemThemeCache: ThemeKey = (\n window.matchMedia?.('(prefers-color-scheme: dark)').matches\n) ? 'dark' : 'light';\n\nexport function getSystemTheme() {\n return systemThemeCache;\n}\n\nfunction handleSystemThemeChange(e: MediaQueryListEventMap['change']) {\n systemThemeCache = e.matches ? 'dark' : 'light';\n}\n\nconst mql = window.matchMedia('(prefers-color-scheme: dark)');\nif (typeof mql.addEventListener === 'function') {\n mql.addEventListener('change', handleSystemThemeChange);\n} else if (typeof mql.addListener === 'function') {\n mql.addListener(handleSystemThemeChange);\n}\n","import {\n MIN_SCREEN_WIDTH_FOR_STATIC_LEFT_COLUMN,\n MOBILE_SCREEN_MAX_WIDTH,\n MOBILE_SCREEN_LANDSCAPE_MAX_HEIGHT,\n MOBILE_SCREEN_LANDSCAPE_MAX_WIDTH,\n IS_TEST,\n SUPPORTED_VIDEO_CONTENT_TYPES,\n VIDEO_MOV_TYPE,\n} from '../config';\n\nexport * from './environmentWebp';\n\nexport * from './environmentSystemTheme';\n\nexport function getPlatform() {\n const { userAgent, platform } = window.navigator;\n const macosPlatforms = ['Macintosh', 'MacIntel', 'MacPPC', 'Mac68K'];\n const windowsPlatforms = ['Win32', 'Win64', 'Windows', 'WinCE'];\n const iosPlatforms = ['iPhone', 'iPad', 'iPod'];\n let os: 'macOS' | 'iOS' | 'Windows' | 'Android' | 'Linux' | undefined;\n\n if (macosPlatforms.indexOf(platform) !== -1) {\n os = 'macOS';\n } else if (iosPlatforms.indexOf(platform) !== -1) {\n os = 'iOS';\n } else if (windowsPlatforms.indexOf(platform) !== -1) {\n os = 'Windows';\n } else if (/Android/.test(userAgent)) {\n os = 'Android';\n } else if (/Linux/.test(platform)) {\n os = 'Linux';\n }\n\n return os;\n}\n\nexport const PLATFORM_ENV = getPlatform();\nexport const IS_MAC_OS = PLATFORM_ENV === 'macOS';\nexport const IS_IOS = PLATFORM_ENV === 'iOS';\nexport const IS_ANDROID = PLATFORM_ENV === 'Android';\nexport const IS_SAFARI = /^((?!chrome|android).)*safari/i.test(navigator.userAgent);\nexport const IS_PWA = (\n window.matchMedia('(display-mode: standalone)').matches\n || (window.navigator as any).standalone\n || document.referrer.includes('android-app://')\n);\n\nexport const IS_TOUCH_ENV = window.matchMedia('(pointer: coarse)').matches;\n// Keep in mind the landscape orientation\nexport const IS_SINGLE_COLUMN_LAYOUT = window.innerWidth <= MOBILE_SCREEN_MAX_WIDTH || (\n window.innerWidth <= MOBILE_SCREEN_LANDSCAPE_MAX_WIDTH && window.innerHeight <= MOBILE_SCREEN_LANDSCAPE_MAX_HEIGHT\n);\n// Special layout, 1 column while chat opened, 2 columns while collapsed\nexport const IS_TABLET_COLUMN_LAYOUT = !IS_SINGLE_COLUMN_LAYOUT && (\n window.innerWidth <= MIN_SCREEN_WIDTH_FOR_STATIC_LEFT_COLUMN\n);\nexport const IS_VOICE_RECORDING_SUPPORTED = Boolean(\n window.navigator.mediaDevices && 'getUserMedia' in window.navigator.mediaDevices && (\n window.AudioContext || (window as any).webkitAudioContext\n ),\n);\nexport const IS_SMOOTH_SCROLL_SUPPORTED = 'scrollBehavior' in document.documentElement.style;\nexport const IS_EMOJI_SUPPORTED = PLATFORM_ENV && (IS_MAC_OS || IS_IOS) && isLastEmojiVersionSupported();\nexport const IS_SERVICE_WORKER_SUPPORTED = 'serviceWorker' in navigator;\n// TODO Consider failed service worker\nexport const IS_PROGRESSIVE_SUPPORTED = IS_SERVICE_WORKER_SUPPORTED;\nexport const IS_STREAMING_SUPPORTED = 'MediaSource' in window;\nexport const IS_OPUS_SUPPORTED = Boolean((new Audio()).canPlayType('audio/ogg; codecs=opus'));\nexport const IS_CANVAS_FILTER_SUPPORTED = (\n !IS_TEST && 'filter' in (document.createElement('canvas').getContext('2d') || {})\n);\nexport const IS_REQUEST_FULLSCREEN_SUPPORTED = 'requestFullscreen' in document.createElement('div');\nexport const ARE_CALLS_SUPPORTED = !navigator.userAgent.includes('Firefox');\nexport const LAYERS_ANIMATION_NAME = IS_ANDROID ? 'slide-fade' : IS_IOS ? 'slide-layers' : 'push-slide';\n\nconst TEST_VIDEO = document.createElement('video');\n// `canPlayType(VIDEO_MOV_TYPE)` returns false negative at least for macOS Chrome and iOS Safari\nexport const IS_MOV_SUPPORTED = true;\n\nif (IS_MOV_SUPPORTED) SUPPORTED_VIDEO_CONTENT_TYPES.add(VIDEO_MOV_TYPE);\n\nexport const IS_WEBM_SUPPORTED = Boolean(TEST_VIDEO.canPlayType('video/webm; codecs=\"vp9\"').replace('no', ''))\n && !(IS_MAC_OS && IS_SAFARI); // Safari on MacOS has some issues with WebM\n\nexport const DPR = window.devicePixelRatio || 1;\n\nexport const MASK_IMAGE_DISABLED = true;\n\nexport const IS_BACKDROP_BLUR_SUPPORTED = !IS_TEST && (\n CSS.supports('backdrop-filter: blur()') || CSS.supports('-webkit-backdrop-filter: blur()')\n);\nexport const IS_COMPACT_MENU = !IS_TOUCH_ENV;\nexport const IS_SCROLL_PATCH_NEEDED = !IS_MAC_OS && !IS_IOS && !IS_ANDROID;\n\n// Smaller area reduces scroll jumps caused by `patchChromiumScroll`\nexport const MESSAGE_LIST_SENSITIVE_AREA = IS_SCROLL_PATCH_NEEDED ? 300 : 750;\n\nfunction isLastEmojiVersionSupported() {\n const ALLOWABLE_CALCULATION_ERROR_SIZE = 5;\n const inlineEl = document.createElement('span');\n inlineEl.classList.add('emoji-test-element');\n document.body.appendChild(inlineEl);\n\n inlineEl.innerText = '🫱🏻'; // Emoji from 14.0 version\n const newEmojiWidth = inlineEl.offsetWidth;\n inlineEl.innerText = '❤️'; // Emoji from 1.0 version\n const legacyEmojiWidth = inlineEl.offsetWidth;\n\n document.body.removeChild(inlineEl);\n\n return Math.abs(newEmojiWidth - legacyEmojiWidth) < ALLOWABLE_CALCULATION_ERROR_SIZE;\n}\n","import { pause } from './schedulers';\n\n// Polyfill for Safari: `File` is not available in web worker\nif (typeof File === 'undefined') {\n // eslint-disable-next-line no-global-assign, no-restricted-globals, func-names\n self.File = class extends Blob {\n name: string;\n\n constructor(fileBits: BlobPart[], fileName: string, options?: FilePropertyBag) {\n if (options) {\n const { type, ...rest } = options;\n super(fileBits, { type });\n Object.assign(this, rest);\n } else {\n super(fileBits);\n }\n\n this.name = fileName;\n }\n } as typeof File;\n}\n\nexport function dataUriToBlob(dataUri: string) {\n const arr = dataUri.split(',');\n const mime = arr[0].match(/:(.*?);/)![1];\n const bstr = atob(arr[1]);\n let n = bstr.length;\n const u8arr = new Uint8Array(n);\n\n while (n--) {\n u8arr[n] = bstr.charCodeAt(n);\n }\n\n return new Blob([u8arr], { type: mime });\n}\n\nexport function blobToDataUri(blob: Blob): Promise {\n return new Promise((resolve, reject) => {\n const reader = new FileReader();\n\n reader.onload = (e: ProgressEvent) => {\n const { result } = e.target || {};\n if (typeof result === 'string') {\n resolve(result);\n }\n\n reject(new Error('Failed to read blob'));\n };\n\n reader.onerror = reject;\n reader.readAsDataURL(blob);\n });\n}\n\nexport function blobToFile(blob: Blob, fileName: string) {\n return new File([blob], fileName, {\n lastModified: Date.now(),\n type: blob.type,\n });\n}\n\nexport function preloadImage(url: string): Promise {\n return new Promise((resolve, reject) => {\n const img = new Image();\n img.onload = () => resolve(img);\n img.onerror = reject;\n img.src = url;\n });\n}\n\nexport function preloadVideo(url: string): Promise {\n return new Promise((resolve, reject) => {\n const video = document.createElement('video');\n video.volume = 0;\n video.onloadedmetadata = () => resolve(video);\n video.onerror = reject;\n video.src = url;\n });\n}\n\nexport async function createPosterForVideo(url: string): Promise {\n const video = await preloadVideo(url);\n\n return Promise.race([\n pause(2000) as Promise,\n new Promise((resolve, reject) => {\n video.onseeked = () => {\n if (!video.videoWidth || !video.videoHeight) {\n resolve(undefined);\n }\n\n const canvas = document.createElement('canvas');\n canvas.width = video.videoWidth;\n canvas.height = video.videoHeight;\n const ctx = canvas.getContext('2d')!;\n ctx.drawImage(video, 0, 0);\n resolve(canvas.toDataURL('image/jpeg'));\n };\n video.onerror = reject;\n video.currentTime = Math.min(video.duration, 1);\n }),\n ]);\n}\n\nexport async function fetchBlob(blobUrl: string) {\n const response = await fetch(blobUrl);\n return response.blob();\n}\n\nexport async function fetchFile(blobUrl: string, fileName: string) {\n const blob = await fetchBlob(blobUrl);\n return blobToFile(blob, fileName);\n}\n\nexport function imgToCanvas(img: HTMLImageElement) {\n const canvas = document.createElement('canvas');\n canvas.width = img.width;\n canvas.height = img.height;\n\n const ctx = canvas.getContext('2d')!;\n ctx.drawImage(img, 0, 0);\n\n return canvas;\n}\n","import { addCallback } from '../lib/teact/teactn';\nimport { addActionHandler, getGlobal } from '../global';\n\nimport { GlobalState } from '../global/types';\nimport { NotifyException, NotifySettings } from '../types';\nimport { ApiChat, ApiChatFolder, ApiUser } from '../api/types';\n\nimport { ALL_FOLDER_ID, ARCHIVED_FOLDER_ID, DEBUG } from '../config';\nimport { selectNotifySettings, selectNotifyExceptions } from '../global/selectors';\nimport { selectIsChatMuted } from '../global/helpers';\nimport { onIdle, throttle } from './schedulers';\nimport { areSortedArraysEqual, unique } from './iteratees';\nimport arePropsShallowEqual from './arePropsShallowEqual';\nimport { CallbackManager, createCallbackManager } from './callbacks';\n\ninterface FolderSummary {\n id: number;\n listIds?: Set;\n orderedPinnedIds?: string[];\n contacts?: true;\n nonContacts?: true;\n groups?: true;\n channels?: true;\n bots?: true;\n excludeMuted?: true;\n excludeRead?: true;\n excludeArchived?: true;\n excludedChatIds?: Set;\n includedChatIds?: Set;\n pinnedChatIds?: Set;\n}\n\ninterface ChatSummary {\n id: string;\n type: ApiChat['type'];\n isListed: boolean;\n isArchived: boolean;\n isMuted: boolean;\n isUnread: boolean;\n unreadCount?: number;\n unreadMentionsCount?: number;\n order: number;\n isUserBot?: boolean;\n isUserContact?: boolean;\n}\n\nconst UPDATE_THROTTLE = 500;\nconst DEBUG_DURATION_LIMIT = 6;\n\nconst initials = buildInitials();\n\nlet prevGlobal: {\n allFolderListIds?: GlobalState['chats']['listIds']['active'];\n allFolderPinnedIds?: GlobalState['chats']['orderedPinnedIds']['active'];\n archivedFolderListIds?: GlobalState['chats']['listIds']['archived'];\n archivedFolderPinnedIds?: GlobalState['chats']['orderedPinnedIds']['archived'];\n isAllFolderFullyLoaded?: boolean;\n isArchivedFolderFullyLoaded?: boolean;\n chatsById: Record;\n foldersById: Record;\n usersById: Record;\n notifySettings: NotifySettings;\n notifyExceptions?: Record;\n} = initials.prevGlobal;\n\nlet prepared: {\n folderSummariesById: Record;\n chatSummariesById: Map;\n folderIdsByChatId: Record;\n chatIdsByFolderId: Record | undefined>;\n isOrderedListJustPatched: Record;\n} = initials.prepared;\n\nlet results: {\n orderedIdsByFolderId: Record;\n pinnedCountByFolderId: Record; // Also watched by `callbacks.orderedIdsByFolderId`\n chatsCountByFolderId: Record;\n unreadCountersByFolderId: Record;\n} = initials.results;\n\nlet callbacks: {\n orderedIdsByFolderId: Record;\n chatsCountByFolderId: CallbackManager;\n unreadCountersByFolderId: CallbackManager;\n} = initials.callbacks;\n\nconst updateFolderManagerThrottled = throttle(() => {\n onIdle(() => {\n updateFolderManager(getGlobal());\n });\n}, UPDATE_THROTTLE);\n\nlet inited = false;\n\n/* Getters */\n\nexport function init() {\n inited = true;\n\n addCallback(updateFolderManagerThrottled);\n addActionHandler('reset', reset);\n\n updateFolderManager(getGlobal());\n}\n\nexport function getOrderedIds(folderId: number) {\n if (!inited) init();\n\n return results.orderedIdsByFolderId[folderId];\n}\n\nexport function getPinnedChatsCount(folderId: number) {\n if (!inited) init();\n\n return results.pinnedCountByFolderId[folderId] || 0;\n}\n\nexport function getChatsCount() {\n if (!inited) init();\n\n return results.chatsCountByFolderId;\n}\n\nexport function getUnreadCounters() {\n if (!inited) init();\n\n return results.unreadCountersByFolderId;\n}\n\nexport function getAllNotificationsCount() {\n return getUnreadCounters()[ALL_FOLDER_ID]?.notificationsCount || 0;\n}\n\n/* Callback managers */\n\nexport function addOrderedIdsCallback(folderId: number, callback: (orderedIds: string[]) => void) {\n if (!callbacks.orderedIdsByFolderId[folderId]) {\n callbacks.orderedIdsByFolderId[folderId] = createCallbackManager();\n }\n\n return callbacks.orderedIdsByFolderId[folderId].addCallback(callback);\n}\n\nexport function addChatsCountCallback(callback: (chatsCount: typeof results.chatsCountByFolderId) => void) {\n return callbacks.chatsCountByFolderId.addCallback(callback);\n}\n\nexport function addUnreadCountersCallback(callback: (unreadCounters: typeof results.unreadCountersByFolderId) => void) {\n return callbacks.unreadCountersByFolderId.addCallback(callback);\n}\n\n/* Global update handlers */\n\nfunction updateFolderManager(global: GlobalState) {\n // eslint-disable-next-line @typescript-eslint/naming-convention\n let DEBUG_startedAt: number;\n if (DEBUG) {\n DEBUG_startedAt = performance.now();\n }\n\n const isAllFolderChanged = Boolean(\n global.chats.listIds.active\n && isMainFolderChanged(ALL_FOLDER_ID, global.chats.listIds.active, global.chats.orderedPinnedIds.active),\n );\n const isArchivedFolderChanged = Boolean(\n global.chats.listIds.archived\n && isMainFolderChanged(ARCHIVED_FOLDER_ID, global.chats.listIds.archived, global.chats.orderedPinnedIds.archived),\n );\n const isAllFullyLoadedChanged = global.chats.isFullyLoaded.active !== prevGlobal.isAllFolderFullyLoaded;\n const isArchivedFullyLoadedChanged = global.chats.isFullyLoaded.archived !== prevGlobal.isArchivedFolderFullyLoaded;\n\n const areFoldersChanged = global.chatFolders.byId !== prevGlobal.foldersById;\n const areChatsChanged = global.chats.byId !== prevGlobal.chatsById;\n const areUsersChanged = global.users.byId !== prevGlobal.usersById;\n const areNotifySettingsChanged = selectNotifySettings(global) !== prevGlobal.notifySettings;\n const areNotifyExceptionsChanged = selectNotifyExceptions(global) !== prevGlobal.notifyExceptions;\n\n let affectedFolderIds: number[] = [];\n\n if (isAllFullyLoadedChanged || isArchivedFullyLoadedChanged) {\n affectedFolderIds = affectedFolderIds.concat(\n updateFullyLoaded(global, isArchivedFullyLoadedChanged),\n );\n }\n\n if (!(\n isAllFolderChanged || isArchivedFolderChanged || areFoldersChanged\n || areChatsChanged || areUsersChanged || areNotifySettingsChanged || areNotifyExceptionsChanged\n )\n ) {\n if (affectedFolderIds.length) {\n updateResults(affectedFolderIds);\n }\n\n return;\n }\n\n const prevAllFolderListIds = prevGlobal.allFolderListIds;\n const prevArchivedFolderListIds = prevGlobal.archivedFolderListIds;\n\n updateFolders(global, isAllFolderChanged, isArchivedFolderChanged, areFoldersChanged);\n\n affectedFolderIds = affectedFolderIds.concat(updateChats(\n global,\n areFoldersChanged || isAllFolderChanged || isArchivedFolderChanged,\n areNotifySettingsChanged,\n areNotifyExceptionsChanged,\n prevAllFolderListIds,\n prevArchivedFolderListIds,\n ));\n\n updateResults(unique(affectedFolderIds));\n\n if (DEBUG) {\n const duration = performance.now() - DEBUG_startedAt!;\n if (duration > DEBUG_DURATION_LIMIT) {\n // eslint-disable-next-line no-console\n console.warn(`Slow \\`updateFolderManager\\`: ${Math.round(duration)} ms`);\n }\n }\n}\n\nfunction isMainFolderChanged(folderId: number, newListIds?: string[], newPinnedIds?: string[]) {\n const currentListIds = folderId === ALL_FOLDER_ID\n ? prevGlobal.allFolderListIds\n : prevGlobal.archivedFolderListIds;\n const currentPinnedIds = folderId === ALL_FOLDER_ID\n ? prevGlobal.allFolderPinnedIds\n : prevGlobal.archivedFolderPinnedIds;\n\n return currentListIds !== newListIds || currentPinnedIds !== newPinnedIds;\n}\n\nfunction updateFullyLoaded(\n global: GlobalState,\n isArchivedFullyLoadedChanged = false,\n) {\n let affectedFolderIds = [];\n\n if (isArchivedFullyLoadedChanged) {\n affectedFolderIds.push(ARCHIVED_FOLDER_ID);\n }\n\n const isAllFolderFullyLoaded = global.chats.isFullyLoaded.active;\n const isArchivedFolderFullyLoaded = global.chats.isFullyLoaded.archived;\n\n if (isAllFolderFullyLoaded && isArchivedFolderFullyLoaded) {\n const emptyFolderIds = Object.keys(prepared.folderSummariesById)\n .filter((folderId) => !results.orderedIdsByFolderId[folderId])\n .map(Number);\n\n affectedFolderIds = affectedFolderIds.concat(emptyFolderIds);\n }\n\n prevGlobal.isAllFolderFullyLoaded = isAllFolderFullyLoaded;\n prevGlobal.isArchivedFolderFullyLoaded = isArchivedFolderFullyLoaded;\n\n return affectedFolderIds;\n}\n\nfunction updateFolders(\n global: GlobalState, isAllFolderChanged: boolean, isArchivedFolderChanged: boolean, areFoldersChanged: boolean,\n) {\n const changedFolders = [];\n\n if (isAllFolderChanged) {\n const newListIds = global.chats.listIds.active!;\n const newPinnedIds = global.chats.orderedPinnedIds.active;\n\n prepared.folderSummariesById[ALL_FOLDER_ID] = buildFolderSummaryFromMainList(\n ALL_FOLDER_ID, newListIds, newPinnedIds,\n );\n\n prevGlobal.allFolderListIds = newListIds;\n prevGlobal.allFolderPinnedIds = newPinnedIds;\n\n changedFolders.push(ALL_FOLDER_ID);\n }\n\n if (isArchivedFolderChanged) {\n const newListIds = global.chats.listIds.archived!;\n const newPinnedIds = global.chats.orderedPinnedIds.archived;\n\n prepared.folderSummariesById[ARCHIVED_FOLDER_ID] = buildFolderSummaryFromMainList(\n ARCHIVED_FOLDER_ID, newListIds, newPinnedIds,\n );\n\n prevGlobal.archivedFolderListIds = newListIds;\n prevGlobal.archivedFolderPinnedIds = newPinnedIds;\n\n changedFolders.push(ARCHIVED_FOLDER_ID);\n }\n\n if (areFoldersChanged) {\n const newFoldersById = global.chatFolders.byId;\n\n Object.values(newFoldersById).forEach((folder) => {\n if (folder === prevGlobal.foldersById[folder.id]) {\n return;\n }\n\n prepared.folderSummariesById[folder.id] = buildFolderSummary(folder);\n\n changedFolders.push(folder.id);\n });\n\n prevGlobal.foldersById = newFoldersById;\n }\n\n return changedFolders;\n}\n\nfunction buildFolderSummaryFromMainList(\n folderId: number, listIds: string[], orderedPinnedIds?: string[],\n): FolderSummary {\n return {\n id: folderId,\n listIds: new Set(listIds),\n orderedPinnedIds,\n pinnedChatIds: new Set(orderedPinnedIds),\n };\n}\n\nfunction buildFolderSummary(folder: ApiChatFolder): FolderSummary {\n return {\n ...folder,\n orderedPinnedIds: folder.pinnedChatIds,\n excludedChatIds: folder.excludedChatIds ? new Set(folder.excludedChatIds) : undefined,\n includedChatIds: folder.excludedChatIds ? new Set(folder.includedChatIds) : undefined,\n pinnedChatIds: folder.excludedChatIds ? new Set(folder.pinnedChatIds) : undefined,\n };\n}\n\nfunction updateChats(\n global: GlobalState,\n areFoldersChanged: boolean,\n areNotifySettingsChanged: boolean,\n areNotifyExceptionsChanged: boolean,\n prevAllFolderListIds?: string[],\n prevArchivedFolderListIds?: string[],\n) {\n const newChatsById = global.chats.byId;\n const newUsersById = global.users.byId;\n const newNotifySettings = selectNotifySettings(global);\n const newNotifyExceptions = selectNotifyExceptions(global);\n const folderSummaries = Object.values(prepared.folderSummariesById);\n const affectedFolderIds = new Set();\n\n const newAllFolderListIds = global.chats.listIds.active;\n const newArchivedFolderListIds = global.chats.listIds.archived;\n let allIds = [...newAllFolderListIds || [], ...newArchivedFolderListIds || []];\n if (newAllFolderListIds !== prevAllFolderListIds || newArchivedFolderListIds !== prevArchivedFolderListIds) {\n allIds = unique(allIds.concat(prevAllFolderListIds || [], prevArchivedFolderListIds || []));\n }\n\n allIds.forEach((chatId) => {\n const chat = newChatsById[chatId];\n\n if (\n !areFoldersChanged\n && !areNotifySettingsChanged\n && !areNotifyExceptionsChanged\n && chat === prevGlobal.chatsById[chatId]\n && newUsersById[chatId] === prevGlobal.usersById[chatId]\n ) {\n return;\n }\n\n let newFolderIds: number[];\n if (chat) {\n const currentSummary = prepared.chatSummariesById.get(chatId);\n const newSummary = buildChatSummary(chat, newNotifySettings, newNotifyExceptions, newUsersById[chatId]);\n if (!areFoldersChanged && currentSummary && arePropsShallowEqual(newSummary, currentSummary)) {\n return;\n }\n\n prepared.chatSummariesById.set(chatId, newSummary);\n\n newFolderIds = buildChatFolderIds(newSummary, folderSummaries);\n newFolderIds.forEach((folderId) => {\n affectedFolderIds.add(folderId);\n });\n } else {\n prepared.chatSummariesById.delete(chatId);\n newFolderIds = [];\n }\n\n const currentFolderIds = prepared.folderIdsByChatId[chatId] || [];\n if (areSortedArraysEqual(newFolderIds, currentFolderIds)) {\n return;\n }\n\n const deletedFolderIds = updateListsForChat(chatId, currentFolderIds, newFolderIds);\n deletedFolderIds.forEach((folderId) => {\n affectedFolderIds.add(folderId);\n });\n });\n\n prevGlobal.chatsById = newChatsById;\n prevGlobal.usersById = newUsersById;\n prevGlobal.notifySettings = newNotifySettings;\n prevGlobal.notifyExceptions = newNotifyExceptions;\n\n return Array.from(affectedFolderIds);\n}\n\nfunction buildChatSummary(\n chat: ApiChat,\n notifySettings: NotifySettings,\n notifyExceptions?: Record,\n user?: ApiUser,\n): ChatSummary {\n const {\n id, type, lastMessage, isRestricted, isNotJoined, folderId,\n unreadCount, unreadMentionsCount, hasUnreadMark,\n joinDate, draftDate,\n } = chat;\n\n const userInfo = type === 'chatTypePrivate' && user;\n\n return {\n id,\n type,\n isListed: Boolean(lastMessage && !isRestricted && !isNotJoined),\n isArchived: folderId === ARCHIVED_FOLDER_ID,\n isMuted: selectIsChatMuted(chat, notifySettings, notifyExceptions),\n isUnread: Boolean(unreadCount || unreadMentionsCount || hasUnreadMark),\n unreadCount,\n unreadMentionsCount,\n order: Math.max(joinDate || 0, draftDate || 0, lastMessage?.date || 0),\n isUserBot: userInfo ? userInfo.type === 'userTypeBot' : undefined,\n isUserContact: userInfo ? userInfo.isContact : undefined,\n };\n}\n\nfunction buildChatFolderIds(chatSummary: ChatSummary, folderSummaries: FolderSummary[]) {\n return folderSummaries.reduce((acc, folderSummary) => {\n if (isChatInFolder(chatSummary, folderSummary)) {\n acc.push(folderSummary.id);\n }\n\n return acc;\n }, []).sort();\n}\n\nfunction isChatInFolder(\n chatSummary: ChatSummary,\n folderSummary: FolderSummary,\n) {\n if (!chatSummary.isListed) {\n return false;\n }\n\n const { id: chatId, type } = chatSummary;\n\n if (folderSummary.listIds) {\n if (\n (chatSummary.isArchived && folderSummary.id === ALL_FOLDER_ID)\n || (!chatSummary.isArchived && folderSummary.id === ARCHIVED_FOLDER_ID)\n ) {\n return false;\n }\n\n return folderSummary.listIds.has(chatId);\n }\n\n if (folderSummary.excludedChatIds?.has(chatId)) {\n return false;\n }\n\n if (folderSummary.includedChatIds?.has(chatId)) {\n return true;\n }\n\n if (folderSummary.pinnedChatIds?.has(chatId)) {\n return true;\n }\n\n if (folderSummary.excludeArchived && chatSummary.isArchived) {\n return false;\n }\n\n if (folderSummary.excludeRead && !chatSummary.isUnread) {\n return false;\n }\n\n if (folderSummary.excludeMuted && chatSummary.isMuted && !chatSummary.unreadMentionsCount) {\n return false;\n }\n\n if (type === 'chatTypePrivate') {\n if (chatSummary.isUserBot) {\n if (folderSummary.bots) {\n return true;\n }\n } else {\n if (folderSummary.contacts && chatSummary.isUserContact) {\n return true;\n }\n\n if (folderSummary.nonContacts && !chatSummary.isUserContact) {\n return true;\n }\n }\n } else if (type === 'chatTypeChannel') {\n return Boolean(folderSummary.channels);\n } else if (type === 'chatTypeBasicGroup' || type === 'chatTypeSuperGroup') {\n return Boolean(folderSummary.groups);\n }\n\n return false;\n}\n\nfunction updateListsForChat(chatId: string, currentFolderIds: number[], newFolderIds: number[]) {\n const currentFolderIdsSet = new Set(currentFolderIds);\n const newFolderIdsSet = new Set(newFolderIds);\n const deletedFolderIds: number[] = [];\n\n unique([...currentFolderIds, ...newFolderIds]).forEach((folderId) => {\n let currentFolderOrderedIds = results.orderedIdsByFolderId[folderId];\n\n if (currentFolderIdsSet.has(folderId) && !newFolderIdsSet.has(folderId)) {\n prepared.chatIdsByFolderId[folderId]!.delete(chatId);\n\n deletedFolderIds.push(folderId);\n\n if (currentFolderOrderedIds) {\n currentFolderOrderedIds = currentFolderOrderedIds.filter((id) => id !== chatId);\n prepared.isOrderedListJustPatched[folderId] = true;\n }\n } else if (!currentFolderIdsSet.has(folderId) && newFolderIdsSet.has(folderId)) {\n if (!prepared.chatIdsByFolderId[folderId]) {\n prepared.chatIdsByFolderId[folderId] = new Set();\n }\n\n prepared.chatIdsByFolderId[folderId]!.add(chatId);\n\n if (currentFolderOrderedIds) {\n currentFolderOrderedIds.push(chatId);\n prepared.isOrderedListJustPatched[folderId] = true;\n }\n }\n\n results.orderedIdsByFolderId[folderId] = currentFolderOrderedIds;\n });\n\n prepared.folderIdsByChatId[chatId] = newFolderIds;\n\n return deletedFolderIds;\n}\n\nfunction updateResults(affectedFolderIds: number[]) {\n let wasUnreadCountersChanged = false;\n let wasChatsCountChanged = false;\n\n Array.from(affectedFolderIds).forEach((folderId) => {\n const { pinnedCount: newPinnedCount, orderedIds: newOrderedIds } = buildFolderOrderedIds(folderId);\n // When signed out\n if (!newOrderedIds) {\n return;\n }\n\n const currentOrderedIds = results.orderedIdsByFolderId[folderId];\n const currentPinnedCount = results.pinnedCountByFolderId[folderId];\n const areOrderedIdsChanged = (\n !currentOrderedIds\n || currentPinnedCount === undefined || currentPinnedCount !== newPinnedCount\n || prepared.isOrderedListJustPatched[folderId]\n || !areSortedArraysEqual(newOrderedIds, currentOrderedIds)\n );\n if (areOrderedIdsChanged) {\n prepared.isOrderedListJustPatched[folderId] = false;\n results.orderedIdsByFolderId[folderId] = newOrderedIds;\n results.pinnedCountByFolderId[folderId] = newPinnedCount;\n callbacks.orderedIdsByFolderId[folderId]?.runCallbacks(newOrderedIds);\n }\n\n const currentChatsCount = results.chatsCountByFolderId[folderId];\n const newChatsCount = newOrderedIds.length;\n if (!wasChatsCountChanged) {\n wasChatsCountChanged = currentChatsCount !== newChatsCount;\n }\n results.chatsCountByFolderId[folderId] = newChatsCount;\n\n const currentUnreadCounters = results.unreadCountersByFolderId[folderId];\n const newUnreadCounters = buildFolderUnreadCounters(folderId);\n if (!wasUnreadCountersChanged) {\n wasUnreadCountersChanged = (\n !currentUnreadCounters || !arePropsShallowEqual(newUnreadCounters, currentUnreadCounters)\n );\n }\n results.unreadCountersByFolderId[folderId] = newUnreadCounters;\n });\n\n if (wasChatsCountChanged) {\n // We need to update the entire object as it will be returned from a hook\n const newValue = { ...results.chatsCountByFolderId };\n results.chatsCountByFolderId = newValue;\n callbacks.chatsCountByFolderId.runCallbacks(newValue);\n }\n\n if (wasUnreadCountersChanged) {\n // We need to update the entire object as it will be returned from a hook\n const newValue = { ...results.unreadCountersByFolderId };\n results.unreadCountersByFolderId = newValue;\n callbacks.unreadCountersByFolderId.runCallbacks(newValue);\n }\n}\n\nfunction buildFolderOrderedIds(folderId: number) {\n const folderSummary = prepared.folderSummariesById[folderId];\n if (!folderSummary) {\n return {};\n }\n\n const { orderedPinnedIds, pinnedChatIds } = folderSummary;\n const {\n chatSummariesById,\n chatIdsByFolderId: { [folderId]: chatIds },\n } = prepared;\n const {\n orderedIdsByFolderId: { [folderId]: prevOrderedIds },\n } = results;\n\n const sortedPinnedIds = chatIds ? orderedPinnedIds?.filter((id) => chatIds.has(id)) : orderedPinnedIds;\n const allListIds = prevOrderedIds || (chatIds && Array.from(chatIds)) || [];\n const notPinnedIds = pinnedChatIds ? allListIds.filter((id) => !pinnedChatIds.has(id)) : allListIds;\n const sortedNotPinnedIds = notPinnedIds.sort((chatId1: string, chatId2: string) => {\n return chatSummariesById.get(chatId2)!.order - chatSummariesById.get(chatId1)!.order;\n });\n\n return {\n pinnedCount: sortedPinnedIds?.length || 0,\n orderedIds: [\n ...(sortedPinnedIds || []),\n ...sortedNotPinnedIds,\n ],\n };\n}\n\nfunction buildFolderUnreadCounters(folderId: number) {\n const {\n chatSummariesById,\n } = prepared;\n const {\n orderedIdsByFolderId: { [folderId]: orderedIds },\n } = results;\n\n return orderedIds!.reduce((newUnreadCounters, chatId) => {\n const chatSummary = chatSummariesById.get(chatId);\n if (!chatSummary) {\n return newUnreadCounters;\n }\n\n if (chatSummary.isUnread) {\n newUnreadCounters.chatsCount++;\n\n if (chatSummary.unreadMentionsCount) {\n newUnreadCounters.notificationsCount += chatSummary.unreadMentionsCount;\n }\n\n if (!chatSummary.isMuted) {\n if (chatSummary.unreadCount) {\n newUnreadCounters.notificationsCount += chatSummary.unreadCount;\n } else if (!chatSummary.unreadMentionsCount) {\n newUnreadCounters.notificationsCount += 1; // Manually marked unread\n }\n }\n }\n\n return newUnreadCounters;\n }, {\n chatsCount: 0,\n notificationsCount: 0,\n });\n}\n\nfunction buildInitials() {\n return {\n prevGlobal: {\n foldersById: {},\n chatsById: {},\n usersById: {},\n notifySettings: {} as NotifySettings,\n notifyExceptions: {},\n },\n\n prepared: {\n folderSummariesById: {},\n chatSummariesById: new Map(),\n folderIdsByChatId: {},\n chatIdsByFolderId: {},\n isOrderedListJustPatched: {},\n },\n\n results: {\n orderedIdsByFolderId: {},\n pinnedCountByFolderId: {},\n chatsCountByFolderId: {},\n unreadCountersByFolderId: {},\n },\n\n callbacks: {\n orderedIdsByFolderId: {},\n chatsCountByFolderId: createCallbackManager(),\n unreadCountersByFolderId: createCallbackManager(),\n },\n };\n}\n\nfunction reset() {\n const newInitials = buildInitials();\n\n prevGlobal = newInitials.prevGlobal;\n prepared = newInitials.prepared;\n results = newInitials.results;\n callbacks = newInitials.callbacks;\n}\n","import { LangCode } from '../types';\n\nexport function formatCurrency(totalPrice: number, currency?: string, locale: LangCode = 'en') {\n return new Intl.NumberFormat(locale, {\n style: 'currency',\n currency,\n }).format(currency === 'JPY' ? totalPrice : totalPrice / 100);\n}\n","const generateIdFor = (store: AnyLiteral) => {\n let id;\n\n do {\n id = String(Math.random()).replace('0.', 'id');\n } while (store.hasOwnProperty(id));\n\n return id;\n};\n\nexport default generateIdFor;\n","import { ApiError, ApiFieldError } from '../api/types';\n\nimport { DEBUG } from '../config';\n\nconst READABLE_ERROR_MESSAGES: Record = {\n CHAT_RESTRICTED: 'You can\\'t send messages in this chat, you were restricted',\n CHAT_SEND_POLL_FORBIDDEN: 'You can\\'t create polls in this chat',\n CHAT_SEND_STICKERS_FORBIDDEN: 'You can\\'t send stickers in this chat',\n CHAT_SEND_GIFS_FORBIDDEN: 'You can\\'t send gifs in this chat',\n CHAT_SEND_MEDIA_FORBIDDEN: 'You can\\'t send media in this chat',\n CHAT_LINK_EXISTS: 'The chat is public, you can\\'t hide the history to new users',\n // eslint-disable-next-line max-len\n SLOWMODE_WAIT_X: 'Slowmode is enabled in this chat: you must wait for the specified number of seconds before sending another message to the chat.',\n USER_BANNED_IN_CHANNEL: 'You\\'re banned from sending messages in supergroups / channels',\n USER_IS_BLOCKED: 'You were blocked by this user',\n YOU_BLOCKED_USER: 'You blocked this user',\n IMAGE_PROCESS_FAILED: 'Failure while processing image',\n MEDIA_EMPTY: 'The provided media object is invalid',\n MEDIA_INVALID: 'Media invalid',\n PHOTO_EXT_INVALID: 'The extension of the photo is invalid',\n PHOTO_INVALID_DIMENSIONS: 'The photo dimensions are invalid',\n PHOTO_SAVE_FILE_INVALID: 'Internal issues, try again later',\n // eslint-disable-next-line max-len\n MESSAGE_DELETE_FORBIDDEN: 'You can\\'t delete one of the messages you tried to delete, most likely because it is a service message.',\n MESSAGE_POLL_CLOSED: 'Poll closed',\n MESSAGE_EDIT_TIME_EXPIRED: 'You can\\'t edit this message anymore.',\n PINNED_DIALOGS_TOO_MUCH: 'Sorry, you can only pin 5 chats to the top',\n DIALOG_FILTERS_TOO_MUCH: 'Sorry, you can\\'t have more than 10 folders',\n CHANNEL_PRIVATE: 'This channel is private',\n MEDIA_CAPTION_TOO_LONG: 'The provided caption is too long',\n ADDRESS_STREET_LINE1_INVALID: 'The address you provided is not valid',\n ADDRESS_STREET_LINE2_INVALID: 'The address you provided is not valid',\n ADDRESS_CITY_INVALID: 'The city you provided is not valid',\n ADDRESS_COUNTRY_INVALID: 'The country you provided is not valid',\n ADDRESS_POSTCODE_INVALID: 'The postcode you provided is not valid',\n ADDRESS_STATE_INVALID: 'The state you provided is not valid',\n REQ_INFO_NAME_INVALID: 'The name you provided is not valid',\n REQ_INFO_PHONE_INVALID: 'The phone you provided is not valid',\n REQ_INFO_EMAIL_INVALID: 'The email you provided is not valid',\n // TODO Bring back after fixing the weird bug\n // CHANNEL_INVALID: 'An error occurred. Please try again later',\n LINK_NOT_MODIFIED: 'This discussion is already linked to the channel',\n MESSAGE_TOO_LONG: 'Message is too long',\n\n // Non-API errors\n // eslint-disable-next-line max-len\n SERVICE_WORKER_DISABLED: 'Service Worker is disabled. Streaming media may not be supported. Try reloading the page without holding key',\n // eslint-disable-next-line max-len\n MESSAGE_TOO_LONG_PLEASE_REMOVE_CHARACTERS: 'The provided message is too long. Please remove {EXTRA_CHARS_COUNT} character{PLURAL_S}.',\n // eslint-disable-next-line max-len\n FRESH_RESET_AUTHORISATION_FORBIDDEN: 'You can’t logout other sessions if less than 24 hours have passed since you logged on the current session',\n\n BOTS_TOO_MUCH: 'There are too many bots in this chat/channel',\n BOT_GROUPS_BLOCKED: 'This bot can\\'t be added to groups',\n USERS_TOO_MUCH: 'The maximum number of users has been exceeded',\n USER_CHANNELS_TOO_MUCH: 'One of the users you tried to add is already in too many channels/supergroups',\n USER_KICKED: 'This user was kicked from this supergroup/channel',\n USER_NOT_MUTUAL_CONTACT: 'The provided user is not a mutual contact',\n USER_PRIVACY_RESTRICTED: 'The user\\'s privacy settings do not allow you to do this',\n INVITE_HASH_EMPTY: 'The invite hash is empty',\n INVITE_HASH_EXPIRED: 'The invite link has expired',\n INVITE_HASH_INVALID: 'The invite hash is invalid',\n CHANNELS_TOO_MUCH: 'You have joined too many channels/supergroups',\n USER_ALREADY_PARTICIPANT: 'You already in the group',\n SCHEDULE_DATE_INVALID: 'Invalid schedule date provided',\n WALLPAPER_DIMENSIONS_INVALID: 'The wallpaper dimensions are invalid, please select another file',\n ADMINS_TOO_MUCH: 'There are too many admins',\n ADMIN_RANK_EMOJI_NOT_ALLOWED: 'An admin rank cannot contain emojis',\n ADMIN_RANK_INVALID: 'The specified admin rank is invalid',\n FRESH_CHANGE_ADMINS_FORBIDDEN: 'You were just elected admin, you can\\'t add or modify other admins yet',\n INPUT_USER_DEACTIVATED: 'The specified user was deleted',\n BOT_PRECHECKOUT_TIMEOUT: 'The request for payment has expired',\n};\n\nif (DEBUG) {\n READABLE_ERROR_MESSAGES.CHAT_WRITE_FORBIDDEN = 'You can\\'t write in this chat';\n READABLE_ERROR_MESSAGES.CHAT_ADMIN_REQUIRED = 'You must be an admin in this chat to do this';\n}\n\nexport const SHIPPING_ERRORS: Record = {\n ADDRESS_STREET_LINE1_INVALID: {\n field: 'streetLine1',\n message: 'Incorrect street address',\n },\n ADDRESS_STREET_LINE2_INVALID: {\n field: 'streetLine2',\n message: 'Incorrect street address',\n },\n ADDRESS_CITY_INVALID: {\n field: 'city',\n message: 'Incorrect city',\n },\n ADDRESS_COUNTRY_INVALID: {\n field: 'countryIso2',\n message: 'Incorrect country',\n },\n ADDRESS_POSTCODE_INVALID: {\n field: 'postCode',\n message: 'Incorrect post code',\n },\n ADDRESS_STATE_INVALID: {\n field: 'state',\n message: 'Incorrect state',\n },\n REQ_INFO_NAME_INVALID: {\n field: 'fullName',\n message: 'Incorrect name',\n },\n REQ_INFO_PHONE_INVALID: {\n field: 'phone',\n message: 'Incorrect phone',\n },\n REQ_INFO_EMAIL_INVALID: {\n field: 'email',\n message: 'Incorrect email',\n },\n};\n\nexport default function getReadableErrorText(error: ApiError) {\n const { message, isSlowMode, textParams } = error;\n // Currently, Telegram API doesn't return `SLOWMODE_WAIT_X` error as described in the docs\n if (isSlowMode) {\n const extraPartIndex = message.indexOf(' (caused by');\n return extraPartIndex > 0 ? message.substring(0, extraPartIndex) : message;\n }\n let errorMessage = READABLE_ERROR_MESSAGES[message];\n if (errorMessage && textParams) {\n errorMessage = Object.keys(textParams).reduce((acc, current) => {\n return acc.replace(current, textParams[current]);\n }, errorMessage as string);\n }\n return errorMessage;\n}\n\nexport function getShippingError(error: ApiError): ApiFieldError | undefined {\n return SHIPPING_ERRORS[error.message];\n}\n","import { DEBUG_ALERT_MSG } from '../config';\nimport { throttle } from './schedulers';\n\nwindow.addEventListener('error', handleErrorEvent);\nwindow.addEventListener('unhandledrejection', handleErrorEvent);\n\n// eslint-disable-next-line prefer-destructuring\nconst APP_ENV = process.env.APP_ENV;\n\nfunction handleErrorEvent(e: ErrorEvent | PromiseRejectionEvent) {\n // https://stackoverflow.com/questions/49384120/resizeobserver-loop-limit-exceeded\n if (e instanceof ErrorEvent && e.message === 'ResizeObserver loop limit exceeded') {\n return;\n }\n\n e.preventDefault();\n\n handleError(e instanceof ErrorEvent ? (e.error || e.message) : e.reason);\n}\n\nconst throttledAlert = throttle(window.alert, 1000);\n\nexport function handleError(err: Error) {\n // eslint-disable-next-line no-console\n console.error(err);\n\n if (APP_ENV === 'development' || APP_ENV === 'staging') {\n throttledAlert(`${DEBUG_ALERT_MSG}\\n\\n${(err?.message) || err}\\n${err?.stack}`);\n }\n}\n","type CollectionByKey = Record;\n\ntype OrderDirection =\n 'asc'\n | 'desc';\n\ninterface OrderCallback {\n (member: T): any;\n}\n\nexport function buildCollectionByKey(collection: T[], key: keyof T) {\n return collection.reduce((byKey: CollectionByKey, member: T) => {\n byKey[member[key]] = member;\n\n return byKey;\n }, {});\n}\n\nexport function mapValues(\n byKey: CollectionByKey,\n callback: (member: M, key: string, index: number, originalByKey: CollectionByKey) => R,\n): CollectionByKey {\n return Object.keys(byKey).reduce((newByKey: CollectionByKey, key, index) => {\n newByKey[key] = callback(byKey[key], key, index, byKey);\n return newByKey;\n }, {});\n}\n\nexport function pick(object: T, keys: K[]) {\n return keys.reduce((result, key) => {\n result[key] = object[key];\n return result;\n }, {} as Pick);\n}\n\nexport function pickTruthy(object: T, keys: K[]) {\n return keys.reduce((result, key) => {\n if (object[key]) {\n result[key] = object[key];\n }\n\n return result;\n }, {} as Pick);\n}\n\nexport function omit(object: T, keys: K[]) {\n const stringKeys = new Set(keys.map(String));\n const savedKeys = Object.keys(object)\n .filter((key) => !stringKeys.has(key)) as Array>;\n\n return pick(object, savedKeys);\n}\n\nexport function orderBy(\n collection: T[],\n orderRule: (keyof T) | OrderCallback | ((keyof T) | OrderCallback)[],\n mode: OrderDirection | [OrderDirection, OrderDirection] = 'asc',\n): T[] {\n function compareValues(a: T, b: T, currentOrderRule: (keyof T) | OrderCallback, isAsc: boolean) {\n const aValue = (typeof currentOrderRule === 'function' ? currentOrderRule(a) : a[currentOrderRule]) || 0;\n const bValue = (typeof currentOrderRule === 'function' ? currentOrderRule(b) : b[currentOrderRule]) || 0;\n\n return isAsc ? aValue - bValue : bValue - aValue;\n }\n\n if (Array.isArray(orderRule)) {\n const [mode1, mode2] = Array.isArray(mode) ? mode : [mode, mode];\n const [orderRule1, orderRule2] = orderRule;\n const isAsc1 = mode1 === 'asc';\n const isAsc2 = mode2 === 'asc';\n\n return collection.sort((a, b) => {\n return compareValues(a, b, orderRule1, isAsc1) || compareValues(a, b, orderRule2, isAsc2);\n });\n }\n\n const isAsc = mode === 'asc';\n return collection.sort((a, b) => {\n return compareValues(a, b, orderRule, isAsc);\n });\n}\n\nexport function flatten(array: any[]) {\n return array.reduce((result, member) => {\n if (Array.isArray(member)) {\n return result.concat(member);\n } else {\n result.push(member);\n return result;\n }\n }, []);\n}\n\nexport function unique(array: T[]): T[] {\n return Array.from(new Set(array));\n}\n\nexport function compact(array: T[]) {\n return array.filter(Boolean);\n}\n\nexport function areSortedArraysEqual(array1: any[], array2: any[]) {\n if (array1.length !== array2.length) {\n return false;\n }\n\n return array1.every((item, i) => item === array2[i]);\n}\n\nexport function areSortedArraysIntersecting(array1: any[], array2: any[]) {\n return array1[0] <= array2[array2.length - 1] && array1[array1.length - 1] >= array2[0];\n}\n\nexport function findIntersectionWithSet(array: T[], set: Set): T[] {\n return array.filter((a) => set.has(a));\n}\n\nexport function split(array: any[], chunkSize: number) {\n const result = [];\n for (let i = 0; i < array.length; i += chunkSize) {\n result.push(array.slice(i, i + chunkSize));\n }\n\n return result;\n}\n\nexport function cloneDeep(value: T): T {\n if (typeof value !== 'object') {\n return value;\n }\n\n if (Array.isArray(value)) {\n return value.map(cloneDeep) as typeof value;\n }\n\n return Object.keys(value).reduce((acc, key) => {\n acc[key as keyof T] = cloneDeep(value[key as keyof T]);\n return acc;\n }, {} as T);\n}\n\nexport function findLast(array: Array, predicate: (value: T, index: number, obj: T[]) => boolean): T | undefined {\n let cursor = array.length;\n\n while (cursor--) {\n if (predicate(array[cursor], cursor, array)) {\n return array[cursor];\n }\n }\n\n return undefined;\n}\n","import { getGlobal } from '../global';\n\nimport { ApiLangPack, ApiLangString } from '../api/types';\nimport { LangCode, TimeFormat } from '../types';\n\nimport {\n DEFAULT_LANG_CODE, DEFAULT_LANG_PACK, LANG_CACHE_NAME, LANG_PACKS,\n} from '../config';\nimport * as cacheApi from './cacheApi';\nimport { callApi } from '../api/gramjs';\nimport { createCallbackManager } from './callbacks';\nimport { formatInteger } from './textFormat';\n\ninterface LangFn {\n (key: string, value?: any, format?: 'i'): any;\n\n isRtl?: boolean;\n code?: LangCode;\n langName?: string;\n timeFormat?: TimeFormat;\n}\n\nconst SUBSTITUTION_REGEX = /%\\d?\\$?[sdf@]/g;\nconst PLURAL_OPTIONS = ['value', 'zeroValue', 'oneValue', 'twoValue', 'fewValue', 'manyValue', 'otherValue'] as const;\nconst PLURAL_RULES = {\n /* eslint-disable max-len */\n en: (n: number) => (n !== 1 ? 6 : 2),\n ar: (n: number) => (n === 0 ? 1 : n === 1 ? 2 : n === 2 ? 3 : n % 100 >= 3 && n % 100 <= 10 ? 4 : n % 100 >= 11 ? 5 : 6),\n ca: (n: number) => (n !== 1 ? 6 : 2),\n de: (n: number) => (n !== 1 ? 6 : 2),\n es: (n: number) => (n !== 1 ? 6 : 2),\n fa: (n: number) => (n > 1 ? 6 : 2),\n fr: (n: number) => (n > 1 ? 6 : 2),\n id: () => 0,\n it: (n: number) => (n !== 1 ? 6 : 2),\n ko: () => 0,\n ms: () => 0,\n nl: (n: number) => (n !== 1 ? 6 : 2),\n pl: (n: number) => (n === 1 ? 2 : n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 10 || n % 100 >= 20) ? 4 : 5),\n pt_BR: (n: number) => (n > 1 ? 6 : 2),\n ru: (n: number) => (n % 10 === 1 && n % 100 !== 11 ? 2 : n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 10 || n % 100 >= 20) ? 4 : 5),\n tr: (n: number) => (n > 1 ? 6 : 2),\n uk: (n: number) => (n % 10 === 1 && n % 100 !== 11 ? 2 : n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 10 || n % 100 >= 20) ? 4 : 5),\n uz: (n: number) => (n > 1 ? 6 : 2),\n /* eslint-enable max-len */\n};\n\nconst cache = new Map();\n\nlet langPack: ApiLangPack | undefined;\nlet fallbackLangPack: ApiLangPack | undefined;\n\nconst {\n addCallback,\n removeCallback,\n runCallbacks,\n} = createCallbackManager();\n\nexport { addCallback, removeCallback };\n\nlet currentLangCode: string | undefined;\nlet currentTimeFormat: TimeFormat | undefined;\n\nexport const getTranslation: LangFn = (key: string, value?: any, format?: 'i') => {\n if (value !== undefined) {\n const cacheValue = Array.isArray(value) ? JSON.stringify(value) : value;\n const cached = cache.get(`${key}_${cacheValue}_${format}`);\n if (cached) {\n return cached;\n }\n }\n\n if (!langPack && !fallbackLangPack) {\n return key;\n }\n\n const langString = (langPack?.[key]) || (fallbackLangPack?.[key]);\n if (!langString) {\n if (!fallbackLangPack) {\n void importFallbackLangPack();\n }\n\n return key;\n }\n\n return processTranslation(langString, key, value, format);\n};\n\nexport async function getTranslationForLangString(langCode: string, key: string) {\n let translateString: ApiLangString | undefined = await cacheApi.fetch(\n LANG_CACHE_NAME,\n `${DEFAULT_LANG_PACK}_${langCode}_${key}`,\n cacheApi.Type.Json,\n );\n\n if (!translateString) {\n translateString = await fetchRemoteString(DEFAULT_LANG_PACK, langCode, key);\n }\n\n return processTranslation(translateString, key);\n}\n\nexport async function setLanguage(langCode: LangCode, callback?: NoneToVoidFunction, withFallback = false) {\n if (langPack && langCode === currentLangCode) {\n if (callback) {\n callback();\n }\n\n return;\n }\n\n let newLangPack = await cacheApi.fetch(LANG_CACHE_NAME, langCode, cacheApi.Type.Json);\n if (!newLangPack) {\n if (withFallback) {\n await importFallbackLangPack();\n }\n\n newLangPack = await fetchRemote(langCode);\n if (!newLangPack) {\n return;\n }\n }\n\n cache.clear();\n\n currentLangCode = langCode;\n langPack = newLangPack;\n document.documentElement.lang = langCode;\n\n const { languages, timeFormat } = getGlobal().settings.byKey;\n const langInfo = languages?.find((l) => l.langCode === langCode);\n getTranslation.isRtl = Boolean(langInfo?.rtl);\n getTranslation.code = langCode;\n getTranslation.langName = langInfo?.nativeName;\n getTranslation.timeFormat = timeFormat;\n\n if (callback) {\n callback();\n }\n\n runCallbacks();\n}\n\nexport function setTimeFormat(timeFormat: TimeFormat) {\n if (timeFormat && timeFormat === currentTimeFormat) {\n return;\n }\n\n currentTimeFormat = timeFormat;\n getTranslation.timeFormat = timeFormat;\n\n runCallbacks();\n}\n\nasync function importFallbackLangPack() {\n if (fallbackLangPack) {\n return;\n }\n\n fallbackLangPack = (await import('./fallbackLangPack')).default;\n runCallbacks();\n}\n\nasync function fetchRemote(langCode: string): Promise {\n const remote = await callApi('fetchLangPack', { sourceLangPacks: LANG_PACKS, langCode });\n if (remote) {\n await cacheApi.save(LANG_CACHE_NAME, langCode, remote.langPack);\n return remote.langPack;\n }\n\n return undefined;\n}\n\nasync function fetchRemoteString(\n remoteLangPack: typeof LANG_PACKS[number], langCode: string, key: string,\n): Promise {\n const remote = await callApi('fetchLangStrings', {\n langPack: remoteLangPack,\n langCode,\n keys: [key],\n });\n\n if (remote?.length) {\n await cacheApi.save(LANG_CACHE_NAME, `${remoteLangPack}_${langCode}_${key}`, remote[0]);\n\n return remote[0];\n }\n\n return undefined;\n}\n\nfunction getPluralOption(amount: number) {\n const langCode = currentLangCode || DEFAULT_LANG_CODE;\n const optionIndex = PLURAL_RULES[langCode as keyof typeof PLURAL_RULES]\n ? PLURAL_RULES[langCode as keyof typeof PLURAL_RULES](amount)\n : 0;\n\n return PLURAL_OPTIONS[optionIndex];\n}\n\nfunction processTemplate(template: string, value: any) {\n value = Array.isArray(value) ? value : [value];\n const translationSlices = template.split(SUBSTITUTION_REGEX);\n const initialValue = translationSlices.shift();\n\n return translationSlices.reduce((result, str, index) => {\n return `${result}${String(value[index] || '')}${str}`;\n }, initialValue || '');\n}\n\nfunction processTranslation(langString: ApiLangString | undefined, key: string, value?: any, format?: 'i') {\n const template = langString ? langString[typeof value === 'number' ? getPluralOption(value) : 'value'] : undefined;\n if (!template || !template.trim()) {\n const parts = key.split('.');\n\n return parts[parts.length - 1];\n }\n\n if (value !== undefined) {\n const formattedValue = format === 'i' ? formatInteger(value) : value;\n const result = processTemplate(template, formattedValue);\n const cacheValue = Array.isArray(value) ? JSON.stringify(value) : value;\n cache.set(`${key}_${cacheValue}_${format}`, result);\n return result;\n }\n\n return template;\n}\n","const SAMPLE_RATE = 48000;\nconst BIT_DEPTH = 16;\n\nexport async function oggToWav(opusData: Blob): Promise {\n const arrayBuffer = await new Response(opusData).arrayBuffer();\n\n return new Promise((resolve) => {\n const typedArray = new Uint8Array(arrayBuffer);\n\n let decoderWorker: Worker | undefined = new Worker(\n new URL('opus-recorder/dist/decoderWorker.min.js', import.meta.url),\n );\n let wavWorker: Worker | undefined = new Worker(new URL('opus-recorder/dist/waveWorker.min.js', import.meta.url));\n\n decoderWorker.onmessage = (e) => {\n // eslint-disable-next-line no-null/no-null\n if (e.data === null) {\n // `null` means decoder is finished\n wavWorker!.postMessage({ command: 'done' });\n } else {\n // `e.data` contains decoded buffers as float32 values\n wavWorker!.postMessage(\n {\n command: 'encode',\n buffers: e.data,\n },\n e.data.map(({ buffer }: Float32Array) => buffer),\n );\n }\n };\n\n wavWorker.onmessage = (e) => {\n if (e.data.message === 'page') {\n resolve(new Blob([e.data.page], { type: 'audio/wav' }));\n\n decoderWorker!.terminate();\n decoderWorker = undefined;\n wavWorker!.terminate();\n wavWorker = undefined;\n }\n };\n\n wavWorker.postMessage({\n command: 'init',\n wavBitDepth: BIT_DEPTH,\n wavSampleRate: SAMPLE_RATE,\n });\n\n decoderWorker.postMessage({\n command: 'init',\n decoderSampleRate: SAMPLE_RATE,\n outputBufferSampleRate: SAMPLE_RATE,\n });\n\n decoderWorker.postMessage({\n command: 'decode',\n pages: typedArray,\n }, [typedArray.buffer]);\n });\n}\n","import {\n ApiMediaFormat,\n ApiOnProgress,\n ApiParsedMedia,\n ApiPreparedMedia,\n} from '../api/types';\n\nimport {\n DEBUG, MEDIA_CACHE_DISABLED, MEDIA_CACHE_NAME, MEDIA_CACHE_NAME_AVATARS,\n} from '../config';\nimport { callApi, cancelApiProgress } from '../api/gramjs';\nimport * as cacheApi from './cacheApi';\nimport { fetchBlob } from './files';\nimport { IS_OPUS_SUPPORTED, IS_PROGRESSIVE_SUPPORTED, isWebpSupported } from './environment';\nimport { oggToWav } from './oggToWav';\nimport { webpToPng } from './webpToPng';\n\nconst asCacheApiType = {\n [ApiMediaFormat.BlobUrl]: cacheApi.Type.Blob,\n [ApiMediaFormat.Lottie]: cacheApi.Type.Blob,\n [ApiMediaFormat.Progressive]: undefined,\n [ApiMediaFormat.Stream]: undefined,\n};\n\nconst PROGRESSIVE_URL_PREFIX = './progressive/';\n\nconst memoryCache = new Map();\nconst fetchPromises = new Map>();\nconst progressCallbacks = new Map>();\nconst cancellableCallbacks = new Map();\n\nexport function fetch(\n url: string,\n mediaFormat: T,\n isHtmlAllowed = false,\n onProgress?: ApiOnProgress,\n callbackUniqueId?: string,\n): Promise {\n if (mediaFormat === ApiMediaFormat.Progressive) {\n return (\n IS_PROGRESSIVE_SUPPORTED\n ? getProgressive(url)\n : fetch(url, ApiMediaFormat.BlobUrl, isHtmlAllowed, onProgress, callbackUniqueId)\n ) as Promise;\n }\n\n if (!fetchPromises.has(url)) {\n const promise = fetchFromCacheOrRemote(url, mediaFormat, isHtmlAllowed)\n .catch((err) => {\n if (DEBUG) {\n // eslint-disable-next-line no-console\n console.warn(err);\n }\n\n return undefined;\n })\n .finally(() => {\n fetchPromises.delete(url);\n progressCallbacks.delete(url);\n cancellableCallbacks.delete(url);\n });\n\n fetchPromises.set(url, promise);\n }\n\n if (onProgress && callbackUniqueId) {\n let activeCallbacks = progressCallbacks.get(url);\n if (!activeCallbacks) {\n activeCallbacks = new Map();\n progressCallbacks.set(url, activeCallbacks);\n }\n activeCallbacks.set(callbackUniqueId, onProgress);\n }\n\n return fetchPromises.get(url) as Promise;\n}\n\nexport function getFromMemory(url: string) {\n return memoryCache.get(url) as ApiPreparedMedia;\n}\n\nexport function cancelProgress(progressCallback: ApiOnProgress) {\n progressCallbacks.forEach((map, url) => {\n map.forEach((callback) => {\n if (callback === progressCallback) {\n const parentCallback = cancellableCallbacks.get(url);\n if (!parentCallback) return;\n\n cancelApiProgress(parentCallback);\n cancellableCallbacks.delete(url);\n progressCallbacks.delete(url);\n }\n });\n });\n}\n\nexport function removeCallback(url: string, callbackUniqueId: string) {\n const callbacks = progressCallbacks.get(url);\n if (!callbacks) return;\n callbacks.delete(callbackUniqueId);\n}\n\nfunction getProgressive(url: string) {\n const progressiveUrl = `${PROGRESSIVE_URL_PREFIX}${url}`;\n\n memoryCache.set(url, progressiveUrl);\n\n return Promise.resolve(progressiveUrl);\n}\n\nasync function fetchFromCacheOrRemote(\n url: string, mediaFormat: ApiMediaFormat, isHtmlAllowed: boolean,\n) {\n if (!MEDIA_CACHE_DISABLED) {\n const cacheName = url.startsWith('avatar') ? MEDIA_CACHE_NAME_AVATARS : MEDIA_CACHE_NAME;\n const cached = await cacheApi.fetch(cacheName, url, asCacheApiType[mediaFormat]!, isHtmlAllowed);\n\n if (cached) {\n let media = cached;\n\n if (cached.type === 'audio/ogg' && !IS_OPUS_SUPPORTED) {\n media = await oggToWav(media);\n }\n\n if (cached.type === 'image/webp' && !isWebpSupported() && media) {\n const mediaPng = await webpToPng(url, media);\n if (mediaPng) {\n media = mediaPng;\n }\n }\n\n const prepared = prepareMedia(media);\n\n memoryCache.set(url, prepared);\n\n return prepared;\n }\n }\n\n if (mediaFormat === ApiMediaFormat.Stream) {\n const mediaSource = new MediaSource();\n const streamUrl = URL.createObjectURL(mediaSource);\n let isOpen = false;\n\n mediaSource.addEventListener('sourceopen', () => {\n if (isOpen) {\n return;\n }\n isOpen = true;\n\n const sourceBuffer = mediaSource.addSourceBuffer('audio/mpeg');\n\n const onProgress = makeOnProgress(url, mediaSource, sourceBuffer);\n cancellableCallbacks.set(url, onProgress);\n\n void callApi('downloadMedia', { url, mediaFormat }, onProgress);\n });\n\n memoryCache.set(url, streamUrl);\n return streamUrl;\n }\n\n const onProgress = makeOnProgress(url);\n cancellableCallbacks.set(url, onProgress);\n\n const remote = await callApi('downloadMedia', { url, mediaFormat, isHtmlAllowed }, onProgress);\n if (!remote) {\n throw new Error(`Failed to fetch media ${url}`);\n }\n\n let { prepared, mimeType } = remote;\n\n if (mimeType === 'audio/ogg' && !IS_OPUS_SUPPORTED) {\n const blob = await fetchBlob(prepared as string);\n URL.revokeObjectURL(prepared as string);\n const media = await oggToWav(blob);\n prepared = prepareMedia(media);\n mimeType = media.type;\n }\n\n if (mimeType === 'image/webp' && !isWebpSupported()) {\n const blob = await fetchBlob(prepared as string);\n URL.revokeObjectURL(prepared as string);\n const media = await webpToPng(url, blob);\n if (media) {\n prepared = prepareMedia(media);\n }\n }\n\n memoryCache.set(url, prepared);\n\n return prepared;\n}\n\nfunction makeOnProgress(url: string, mediaSource?: MediaSource, sourceBuffer?: SourceBuffer) {\n const onProgress: ApiOnProgress = (progress: number, arrayBuffer: ArrayBuffer) => {\n progressCallbacks.get(url)?.forEach((callback) => {\n callback(progress);\n if (callback.isCanceled) onProgress.isCanceled = true;\n });\n\n if (progress === 1) {\n mediaSource?.endOfStream();\n }\n\n if (!arrayBuffer) {\n return;\n }\n\n sourceBuffer?.appendBuffer(arrayBuffer);\n };\n\n return onProgress;\n}\n\nfunction prepareMedia(mediaData: Exclude): ApiPreparedMedia {\n if (mediaData instanceof Blob) {\n return URL.createObjectURL(mediaData);\n }\n\n return mediaData;\n}\n\nif (IS_PROGRESSIVE_SUPPORTED) {\n navigator.serviceWorker.addEventListener('message', async (e) => {\n const { type, messageId, params } = e.data as {\n type: string;\n messageId: string;\n params: { url: string; start: number; end: number };\n };\n\n if (type !== 'requestPart') {\n return;\n }\n\n const result = await callApi('downloadMedia', { mediaFormat: ApiMediaFormat.Progressive, ...params });\n if (!result) {\n return;\n }\n\n const { arrayBuffer, mimeType, fullSize } = result;\n\n navigator.serviceWorker.controller!.postMessage({\n type: 'partResponse',\n messageId,\n result: {\n arrayBuffer,\n mimeType,\n fullSize,\n },\n }, [arrayBuffer!]);\n });\n}\n","export const MEMO_EMPTY_ARRAY = [];\n","import { DEBUG } from '../config';\nimport { createCallbackManager } from './callbacks';\n\nexport enum Bundles {\n Auth,\n Main,\n Extra,\n Calls,\n}\n\ninterface ImportedBundles {\n [Bundles.Auth]: typeof import('../bundles/auth');\n [Bundles.Main]: typeof import('../bundles/main');\n [Bundles.Extra]: typeof import('../bundles/extra');\n [Bundles.Calls]: typeof import('../bundles/calls');\n}\n\ntype BundlePromises = {\n [K in keyof ImportedBundles]: Promise\n};\n\nexport type BundleModules = keyof ImportedBundles[B];\n\nconst LOAD_PROMISES: Partial = {};\nconst MEMORY_CACHE: Partial = {};\n\nconst { addCallback, runCallbacks } = createCallbackManager();\n\nexport async function loadModule>(bundleName: B, moduleName: M) {\n if (!LOAD_PROMISES[bundleName]) {\n switch (bundleName) {\n case Bundles.Auth:\n LOAD_PROMISES[Bundles.Auth] = import('../bundles/auth');\n break;\n case Bundles.Main:\n if (DEBUG) {\n // eslint-disable-next-line no-console\n console.log('>>> START LOAD MAIN BUNDLE');\n }\n\n LOAD_PROMISES[Bundles.Main] = import('../bundles/main');\n break;\n case Bundles.Extra:\n LOAD_PROMISES[Bundles.Extra] = import('../bundles/extra');\n break;\n case Bundles.Calls:\n LOAD_PROMISES[Bundles.Calls] = import('../bundles/calls');\n break;\n }\n\n (LOAD_PROMISES[bundleName] as Promise).then(runCallbacks);\n }\n\n const bundle = (await LOAD_PROMISES[bundleName]) as unknown as ImportedBundles[B];\n\n if (!MEMORY_CACHE[bundleName]) {\n MEMORY_CACHE[bundleName] = bundle;\n }\n\n return getModuleFromMemory(bundleName, moduleName);\n}\n\nexport function getModuleFromMemory>(bundleName: B, moduleName: M) {\n const bundle = MEMORY_CACHE[bundleName] as ImportedBundles[B];\n\n if (!bundle) {\n return undefined;\n }\n\n return bundle[moduleName];\n}\n\nexport const addLoadListener = addCallback;\n","import { callApi } from '../api/gramjs';\nimport {\n ApiChat, ApiMediaFormat, ApiMessage, ApiUser, ApiUserReaction,\n} from '../api/types';\nimport { renderActionMessageText } from '../components/common/helpers/renderActionMessageText';\nimport { DEBUG, IS_TEST } from '../config';\nimport { getActions, getGlobal, setGlobal } from '../global';\nimport {\n getChatAvatarHash,\n getChatTitle,\n getMessageAction,\n getMessageRecentReaction,\n getMessageSenderName,\n getMessageSummaryText,\n getPrivateChatUserId,\n isActionMessage,\n isChatChannel,\n selectIsChatMuted,\n selectShouldShowMessagePreview,\n} from '../global/helpers';\nimport { addNotifyExceptions, replaceSettings } from '../global/reducers';\nimport {\n selectChatMessage,\n selectCurrentMessageList,\n selectNotifyExceptions,\n selectNotifySettings,\n selectUser,\n} from '../global/selectors';\nimport { IS_SERVICE_WORKER_SUPPORTED, IS_TOUCH_ENV } from './environment';\nimport { getTranslation } from './langProvider';\nimport * as mediaLoader from './mediaLoader';\nimport { debounce } from './schedulers';\n\nfunction getDeviceToken(subscription: PushSubscription) {\n const data = subscription.toJSON();\n return JSON.stringify({\n endpoint: data.endpoint,\n keys: data.keys,\n });\n}\n\nfunction checkIfPushSupported() {\n if (!IS_SERVICE_WORKER_SUPPORTED) return false;\n if (!('showNotification' in ServiceWorkerRegistration.prototype)) {\n if (DEBUG) {\n // eslint-disable-next-line no-console\n console.warn('[PUSH] Push notifications aren\\'t supported.');\n }\n return false;\n }\n\n // Check the current Notification permission.\n // If its denied, it's a permanent block until the\n // user changes the permission\n if (Notification.permission === 'denied') {\n if (DEBUG) {\n // eslint-disable-next-line no-console\n console.warn('[PUSH] The user has blocked push notifications.');\n }\n return false;\n }\n\n // Check if push messaging is supported\n if (!('PushManager' in window)) {\n if (DEBUG) {\n // eslint-disable-next-line no-console\n console.warn('[PUSH] Push messaging isn\\'t supported.');\n }\n return false;\n }\n return true;\n}\n\nfunction checkIfNotificationsSupported() {\n // Let's check if the browser supports notifications\n if (!('Notification' in window)) {\n if (DEBUG) {\n // eslint-disable-next-line no-console\n console.warn('[PUSH] This browser does not support desktop notification');\n }\n return false;\n }\n\n if (Notification.permission === 'denied' as NotificationPermission) {\n if (DEBUG) {\n // eslint-disable-next-line no-console\n console.warn('[PUSH] The user has blocked push notifications.');\n }\n return false;\n }\n return true;\n}\n\nconst expirationTime = 12 * 60 * 60 * 1000; // 12 hours\n// Notification id is removed from soundPlayed cache after 3 seconds\nconst soundPlayedDelay = 3 * 1000;\nconst soundPlayedIds = new Set();\n\nexport async function playNotifySound(id?: string, volume?: number) {\n if (id !== undefined && soundPlayedIds.has(id)) return;\n const { notificationSoundVolume } = selectNotifySettings(getGlobal());\n const currentVolume = volume ? volume / 10 : notificationSoundVolume / 10;\n if (currentVolume === 0) return;\n\n const audio = new Audio('./notification.mp3');\n audio.volume = currentVolume;\n audio.setAttribute('mozaudiochannel', 'notification');\n if (id !== undefined) {\n audio.addEventListener('ended', () => {\n soundPlayedIds.add(id);\n }, { once: true });\n\n setTimeout(() => {\n soundPlayedIds.delete(id);\n }, soundPlayedDelay);\n }\n\n try {\n await audio.play();\n } catch (error) {\n if (DEBUG) {\n // eslint-disable-next-line no-console\n console.warn('[PUSH] Unable to play notification sound');\n }\n }\n}\n\nexport const playNotifySoundDebounced = debounce(playNotifySound, 1000, true, false);\n\nfunction checkIfShouldResubscribe(subscription: PushSubscription | null) {\n const global = getGlobal();\n if (!global.push || !subscription) return true;\n if (getDeviceToken(subscription) !== global.push.deviceToken) return true;\n return Date.now() - global.push.subscribedAt > expirationTime;\n}\n\nasync function requestPermission() {\n if (!('Notification' in window)) return;\n if (!['granted', 'denied'].includes(Notification.permission)) {\n await Notification.requestPermission();\n }\n}\n\nasync function unsubscribeFromPush(subscription: PushSubscription | null) {\n const global = getGlobal();\n const dispatch = getActions();\n if (subscription) {\n try {\n const deviceToken = getDeviceToken(subscription);\n await callApi('unregisterDevice', deviceToken);\n await subscription.unsubscribe();\n dispatch.deleteDeviceToken();\n return;\n } catch (error) {\n if (DEBUG) {\n // eslint-disable-next-line no-console\n console.log('[PUSH] Unable to unsubscribe from push.', error);\n }\n }\n }\n if (global.push) {\n await callApi('unregisterDevice', global.push.deviceToken);\n dispatch.deleteDeviceToken();\n }\n}\n\nexport async function unsubscribe() {\n if (!checkIfPushSupported()) return;\n const serviceWorkerRegistration = await navigator.serviceWorker.ready;\n const subscription = await serviceWorkerRegistration.pushManager.getSubscription();\n await unsubscribeFromPush(subscription);\n}\n\n// Indicates if notification settings are loaded from the api\nlet areSettingsLoaded = false;\n\n// Load notification settings from the api\nasync function loadNotificationSettings() {\n if (areSettingsLoaded) return selectNotifySettings(getGlobal());\n const [resultSettings, resultExceptions] = await Promise.all([\n callApi('fetchNotificationSettings', {\n serverTimeOffset: getGlobal().serverTimeOffset,\n }),\n callApi('fetchNotificationExceptions', {\n serverTimeOffset: getGlobal().serverTimeOffset,\n }),\n ]);\n if (!resultSettings) return selectNotifySettings(getGlobal());\n\n let global = replaceSettings(getGlobal(), resultSettings);\n if (resultExceptions) {\n global = addNotifyExceptions(global, resultExceptions);\n }\n setGlobal(global);\n areSettingsLoaded = true;\n return selectNotifySettings(global);\n}\n\nexport async function subscribe() {\n if (!checkIfPushSupported()) {\n // Ask for notification permissions only if service worker notifications are not supported\n // As pushManager.subscribe automatically triggers permission popup\n await requestPermission();\n return;\n }\n const serviceWorkerRegistration = await navigator.serviceWorker.ready;\n let subscription = await serviceWorkerRegistration.pushManager.getSubscription();\n if (!checkIfShouldResubscribe(subscription)) return;\n await unsubscribeFromPush(subscription);\n try {\n subscription = await serviceWorkerRegistration.pushManager.subscribe({\n userVisibleOnly: true,\n });\n const deviceToken = getDeviceToken(subscription);\n if (DEBUG) {\n // eslint-disable-next-line no-console\n console.log('[PUSH] Received push subscription: ', deviceToken);\n }\n await callApi('registerDevice', deviceToken);\n getActions()\n .setDeviceToken(deviceToken);\n } catch (error: any) {\n if (Notification.permission === 'denied' as NotificationPermission) {\n // The user denied the notification permission which\n // means we failed to subscribe and the user will need\n // to manually change the notification permission to\n // subscribe to push messages\n if (DEBUG) {\n // eslint-disable-next-line no-console\n console.warn('[PUSH] The user has blocked push notifications.');\n }\n } else if (DEBUG) {\n // A problem occurred with the subscription, this can\n // often be down to an issue or lack of the gcm_sender_id\n // and / or gcm_user_visible_only\n // eslint-disable-next-line no-console\n console.log('[PUSH] Unable to subscribe to push.', error);\n\n // Request permissions and fall back to local notifications\n // if pushManager.subscribe was aborted due to invalid VAPID key.\n if (error.code === DOMException.ABORT_ERR) {\n await requestPermission();\n }\n }\n }\n}\n\nfunction checkIfShouldNotify(chat: ApiChat) {\n if (!areSettingsLoaded) return false;\n const global = getGlobal();\n const isMuted = selectIsChatMuted(chat, selectNotifySettings(global), selectNotifyExceptions(global));\n if (isMuted || chat.isNotJoined || !chat.isListed) {\n return false;\n }\n // On touch devices show notifications when chat is not active\n if (IS_TOUCH_ENV) {\n const {\n chatId,\n type,\n } = selectCurrentMessageList(global) || {};\n return !(chatId === chat.id && type === 'thread');\n }\n // On desktop show notifications when window is not focused\n return !document.hasFocus();\n}\n\nfunction getNotificationContent(chat: ApiChat, message: ApiMessage, reaction?: ApiUserReaction) {\n const global = getGlobal();\n const {\n replyToMessageId,\n } = message;\n let {\n senderId,\n } = message;\n if (reaction) senderId = reaction.userId;\n\n const messageSender = senderId ? selectUser(global, senderId) : undefined;\n const messageAction = getMessageAction(message as ApiMessage);\n const actionTargetMessage = messageAction && replyToMessageId\n ? selectChatMessage(global, chat.id, replyToMessageId)\n : undefined;\n const {\n targetUserIds: actionTargetUserIds,\n targetChatId: actionTargetChatId,\n } = messageAction || {};\n\n const actionTargetUsers = actionTargetUserIds\n ? actionTargetUserIds.map((userId) => selectUser(global, userId))\n .filter(Boolean as any)\n : undefined;\n const privateChatUserId = getPrivateChatUserId(chat);\n const privateChatUser = privateChatUserId ? selectUser(global, privateChatUserId) : undefined;\n\n let body: string;\n if (selectShouldShowMessagePreview(chat, selectNotifySettings(global), selectNotifyExceptions(global))) {\n if (isActionMessage(message)) {\n const isChat = chat && (isChatChannel(chat) || message.senderId === message.chatId);\n\n body = renderActionMessageText(\n getTranslation,\n message,\n !isChat ? messageSender : undefined,\n isChat ? chat : undefined,\n actionTargetUsers,\n actionTargetMessage,\n actionTargetChatId,\n { asPlainText: true },\n ) as string;\n } else {\n const senderName = getMessageSenderName(getTranslation, chat.id, messageSender);\n const summary = getMessageSummaryText(getTranslation, message, false, 60, false);\n\n body = senderName ? `${senderName}: ${summary}` : summary;\n }\n } else {\n body = 'New message';\n }\n\n return {\n title: getChatTitle(getTranslation, chat, privateChatUser),\n body,\n };\n}\n\nasync function getAvatar(chat: ApiChat) {\n const imageHash = getChatAvatarHash(chat);\n if (!imageHash) return undefined;\n let mediaData = mediaLoader.getFromMemory(imageHash);\n if (!mediaData) {\n await mediaLoader.fetch(imageHash, ApiMediaFormat.BlobUrl);\n mediaData = mediaLoader.getFromMemory(imageHash);\n }\n return mediaData;\n}\n\nexport async function notifyAboutMessage({\n chat,\n message,\n isReaction = false,\n}: { chat: ApiChat; message: Partial; isReaction?: boolean }) {\n const { hasWebNotifications } = await loadNotificationSettings();\n if (!checkIfShouldNotify(chat)) return;\n const areNotificationsSupported = checkIfNotificationsSupported();\n if (!hasWebNotifications || !areNotificationsSupported) {\n // Do not play notification sound for reactions if web notifications are disabled\n if (isReaction) return;\n // Only play sound if web notifications are disabled\n playNotifySoundDebounced(String(message.id) || chat.id);\n return;\n }\n if (!areNotificationsSupported) return;\n\n if (!message.id) return;\n\n const activeReaction = getMessageRecentReaction(message);\n const icon = await getAvatar(chat);\n\n const {\n title,\n body,\n } = getNotificationContent(chat, message as ApiMessage, activeReaction);\n\n if (checkIfPushSupported()) {\n if (navigator.serviceWorker?.controller) {\n // notify service worker about new message notification\n navigator.serviceWorker.controller.postMessage({\n type: 'showMessageNotification',\n payload: {\n title,\n body,\n icon,\n chatId: chat.id,\n messageId: message.id,\n reaction: activeReaction?.reaction,\n },\n });\n }\n } else {\n const dispatch = getActions();\n const options: NotificationOptions = {\n body,\n icon,\n badge: icon,\n tag: String(message.id),\n };\n\n if ('vibrate' in navigator) {\n options.vibrate = [200, 100, 200];\n }\n\n const notification = new Notification(title, options);\n\n notification.onclick = () => {\n notification.close();\n dispatch.focusMessage({\n chatId: chat.id,\n messageId: message.id,\n });\n if (activeReaction) {\n dispatch.startActiveReaction({\n messageId: message.id,\n reaction: activeReaction.reaction,\n });\n }\n if (window.focus) {\n window.focus();\n }\n };\n\n // Play sound when notification is displayed\n notification.onshow = () => {\n // TODO Remove when reaction badges are implemented\n if (isReaction) return;\n playNotifySoundDebounced(String(message.id) || chat.id);\n };\n }\n}\n\nexport function closeMessageNotifications(payload: { chatId: string; lastReadInboxMessageId?: number }) {\n if (IS_TEST || !navigator.serviceWorker?.controller) return;\n navigator.serviceWorker.controller.postMessage({\n type: 'closeMessageNotifications',\n payload,\n });\n}\n\n// Notify service worker that client is fully loaded\nexport function notifyClientReady() {\n if (!navigator.serviceWorker?.controller) return;\n navigator.serviceWorker.controller.postMessage({\n type: 'clientReady',\n });\n}\n","const PERMANENT_VERSION_KEY = 'kz_version';\nconst AVAILABLE_VERSIONS = ['Z', 'K'] as const;\nconst DEFAULT_VERSION = 'Z';\n\nexport function setPermanentWebVersion(version: typeof AVAILABLE_VERSIONS[number]) {\n localStorage.setItem(PERMANENT_VERSION_KEY, JSON.stringify(version));\n}\n\nexport function ensurePermanentWebVersion() {\n if (!hasPermanentWebVersion()) {\n setPermanentWebVersion(DEFAULT_VERSION);\n }\n}\n\nfunction hasPermanentWebVersion() {\n const json = localStorage.getItem(PERMANENT_VERSION_KEY);\n if (!json) {\n return false;\n }\n\n try {\n const version = JSON.parse(json);\n return AVAILABLE_VERSIONS.includes(version);\n } catch (err) {\n return false;\n }\n}\n","import { ApiCountryCode } from '../api/types';\nimport { flatten } from './iteratees';\n\nconst PATTERN_PLACEHOLDER = 'X';\nconst DEFAULT_PATTERN = 'XXX XXX XXX XXX';\n\nexport function getCountryCodesByIso(phoneCodeList: ApiCountryCode[], iso: string) {\n return phoneCodeList.filter((country) => country.iso2 === iso);\n}\n\nexport function getCountryFromPhoneNumber(phoneCodeList: ApiCountryCode[], input = '') {\n let phoneNumber = input.replace(/[^\\d+]+/g, '');\n if (phoneNumber.startsWith('+')) {\n phoneNumber = phoneNumber.substr(1);\n }\n\n const possibleCountries = phoneCodeList\n .filter((country) => phoneNumber.startsWith(country.countryCode));\n const codesWithPrefix: { code: string; country: ApiCountryCode }[] = flatten(possibleCountries\n .map((country) => (country.prefixes || ['']).map((prefix) => {\n return {\n code: `${country.countryCode}${prefix}`,\n country,\n };\n })));\n\n const bestMatches = codesWithPrefix\n .filter(({ code }) => phoneNumber.startsWith(code))\n .sort((a, b) => a.code.length - b.code.length);\n\n return bestMatches[bestMatches.length - 1]?.country;\n}\n\nexport function formatPhoneNumber(input: string, country?: ApiCountryCode) {\n let phoneNumber = input.replace(/[^\\d]+/g, '');\n if (country) {\n phoneNumber = phoneNumber.substr(country.countryCode.length);\n } else if (input.startsWith('+')) {\n return input;\n }\n const pattern = getBestPattern(phoneNumber, country?.patterns);\n\n const result: string[] = []; // Result character array\n let j = 0; // Position inside pattern\n for (let i = 0; i < phoneNumber.length; i++) {\n while (pattern[j] !== PATTERN_PLACEHOLDER && j < pattern.length) {\n result.push(pattern[j]);\n if (pattern[j] === phoneNumber[i]) { // If pattern contains digits, move input position too\n i++;\n if (i === phoneNumber.length) break; // But don't overdo it, or it will insert full pattern unexpectedly\n }\n j++;\n }\n\n result.push(phoneNumber[i]); // For placeholder characters, setting current input digit\n j++;\n }\n\n return result.join('');\n}\n\nfunction getBestPattern(numberWithoutCode: string, patterns?: string[]) {\n if (!patterns || patterns.length === 0) return DEFAULT_PATTERN;\n if (patterns.length === 1) return patterns[0];\n\n const defaultPattern = patterns.find((pattern) => pattern.startsWith(PATTERN_PLACEHOLDER)) || DEFAULT_PATTERN;\n\n const bestMatches = patterns.filter((pattern) => {\n const stripped = pattern.replace(/[^\\dX]+/g, '');\n if (stripped.startsWith(PATTERN_PLACEHOLDER)) return false; // Don't consider default number format here\n for (let i = 0; i < numberWithoutCode.length; i++) {\n if (i > stripped.length - 1 || (stripped[i] !== PATTERN_PLACEHOLDER && stripped[i] !== numberWithoutCode[i])) {\n return false;\n }\n }\n return true;\n });\n\n // Playing it safe: if not sure, use default for that region\n return bestMatches.length === 1 ? bestMatches[0] : defaultPattern;\n}\n\nexport function formatPhoneNumberWithCode(phoneCodeList: ApiCountryCode[], phoneNumber: string) {\n const numberWithPlus = phoneNumber.startsWith('+') ? phoneNumber : `+${phoneNumber}`;\n const country = getCountryFromPhoneNumber(phoneCodeList, numberWithPlus);\n if (!country) {\n return numberWithPlus;\n }\n return `+${country.countryCode} ${formatPhoneNumber(numberWithPlus, country)}`;\n}\n","import { MessageList, MessageListType } from '../global/types';\nimport { MAIN_THREAD_ID } from '../api/types';\n\nimport { LOCATION_HASH } from '../hooks/useHistoryBack';\n\nexport function createMessageHash(messageList: MessageList) {\n const typeOrThreadId = messageList.type !== 'thread' ? (\n `_${messageList.type}`\n ) : messageList.threadId !== -1 ? (\n `_${messageList.threadId}`\n ) : '';\n\n return `${messageList.chatId}${typeOrThreadId}`;\n}\n\nexport function parseLocationHash() {\n if (!LOCATION_HASH) return undefined;\n\n const [chatId, typeOrThreadId] = LOCATION_HASH.replace(/^#/, '').split('_');\n if (!chatId?.match(/^-?\\d+$/)) return undefined;\n\n const isType = ['thread', 'pinned', 'scheduled'].includes(typeOrThreadId);\n\n return {\n chatId,\n type: Boolean(typeOrThreadId) && isType ? (typeOrThreadId as MessageListType) : 'thread',\n threadId: Boolean(typeOrThreadId) && !isType ? Number(typeOrThreadId) : MAIN_THREAD_ID,\n };\n}\n","type Scheduler =\n typeof requestAnimationFrame\n | typeof onTickEnd\n | typeof runNow;\n\nexport function debounce(\n fn: F,\n ms: number,\n shouldRunFirst = true,\n shouldRunLast = true,\n) {\n let waitingTimeout: number | undefined;\n\n return (...args: Parameters) => {\n if (waitingTimeout) {\n clearTimeout(waitingTimeout);\n waitingTimeout = undefined;\n } else if (shouldRunFirst) {\n fn(...args);\n }\n\n // eslint-disable-next-line no-restricted-globals\n waitingTimeout = self.setTimeout(() => {\n if (shouldRunLast) {\n fn(...args);\n }\n\n waitingTimeout = undefined;\n }, ms);\n };\n}\n\nexport function throttle(\n fn: F,\n ms: number,\n shouldRunFirst = true,\n) {\n let interval: number | undefined;\n let isPending: boolean;\n let args: Parameters;\n\n return (..._args: Parameters) => {\n isPending = true;\n args = _args;\n\n if (!interval) {\n if (shouldRunFirst) {\n isPending = false;\n fn(...args);\n }\n\n // eslint-disable-next-line no-restricted-globals\n interval = self.setInterval(() => {\n if (!isPending) {\n // eslint-disable-next-line no-restricted-globals\n self.clearInterval(interval!);\n interval = undefined;\n return;\n }\n\n isPending = false;\n fn(...args);\n }, ms);\n }\n };\n}\n\nexport function throttleWithRaf(fn: F) {\n return throttleWith(fastRaf, fn);\n}\n\nexport function throttleWithPrimaryRaf(fn: F) {\n return throttleWith(fastRafPrimary, fn);\n}\n\nexport function throttleWithTickEnd(fn: F) {\n return throttleWith(onTickEnd, fn);\n}\n\nexport function throttleWithNow(fn: F) {\n return throttleWith(runNow, fn);\n}\n\nexport function throttleWith(schedulerFn: Scheduler, fn: F) {\n let waiting = false;\n let args: Parameters;\n\n return (..._args: Parameters) => {\n args = _args;\n\n if (!waiting) {\n waiting = true;\n\n schedulerFn(() => {\n waiting = false;\n fn(...args);\n });\n }\n };\n}\n\nexport function onIdle(cb: NoneToVoidFunction, timeout?: number) {\n // eslint-disable-next-line no-restricted-globals\n if (self.requestIdleCallback) {\n // eslint-disable-next-line no-restricted-globals\n self.requestIdleCallback(cb, { timeout });\n } else {\n onTickEnd(cb);\n }\n}\n\nfunction runNow(fn: NoneToVoidFunction) {\n fn();\n}\n\nexport const pause = (ms: number) => new Promise((resolve) => {\n setTimeout(() => resolve(), ms);\n});\n\nexport function rafPromise() {\n return new Promise((resolve) => {\n fastRaf(resolve);\n });\n}\n\nlet fastRafCallbacks: NoneToVoidFunction[] | undefined;\nlet fastRafPrimaryCallbacks: NoneToVoidFunction[] | undefined;\n\n// May result in an immediate execution if called from another `requestAnimationFrame` callback\nexport function fastRaf(callback: NoneToVoidFunction, isPrimary = false) {\n if (!fastRafCallbacks) {\n fastRafCallbacks = isPrimary ? [] : [callback];\n fastRafPrimaryCallbacks = isPrimary ? [callback] : [];\n\n requestAnimationFrame(() => {\n const currentCallbacks = fastRafCallbacks!;\n const currentPrimaryCallbacks = fastRafPrimaryCallbacks!;\n fastRafCallbacks = undefined;\n fastRafPrimaryCallbacks = undefined;\n currentPrimaryCallbacks.forEach((cb) => cb());\n currentCallbacks.forEach((cb) => cb());\n });\n } else if (isPrimary) {\n fastRafPrimaryCallbacks!.push(callback);\n } else {\n fastRafCallbacks.push(callback);\n }\n}\n\nexport function fastRafPrimary(callback: NoneToVoidFunction) {\n fastRaf(callback, true);\n}\n\nlet onTickEndCallbacks: NoneToVoidFunction[] | undefined;\nlet onTickEndPrimaryCallbacks: NoneToVoidFunction[] | undefined;\n\nexport function onTickEnd(callback: NoneToVoidFunction, isPrimary = false) {\n if (!onTickEndCallbacks) {\n onTickEndCallbacks = isPrimary ? [] : [callback];\n onTickEndPrimaryCallbacks = isPrimary ? [callback] : [];\n\n Promise.resolve().then(() => {\n const currentCallbacks = onTickEndCallbacks!;\n const currentPrimaryCallbacks = onTickEndPrimaryCallbacks!;\n onTickEndCallbacks = undefined;\n onTickEndPrimaryCallbacks = undefined;\n currentPrimaryCallbacks.forEach((cb) => cb());\n currentCallbacks.forEach((cb) => cb());\n });\n } else if (isPrimary) {\n onTickEndPrimaryCallbacks!.push(callback);\n } else {\n onTickEndCallbacks.push(callback);\n }\n}\n\nexport function onTickEndPrimary(callback: NoneToVoidFunction) {\n onTickEnd(callback, true);\n}\n\nlet beforeUnloadCallbacks: NoneToVoidFunction[] | undefined;\n\nexport function onBeforeUnload(callback: NoneToVoidFunction, isLast = false) {\n if (!beforeUnloadCallbacks) {\n beforeUnloadCallbacks = [];\n // eslint-disable-next-line no-restricted-globals\n self.addEventListener('beforeunload', () => {\n beforeUnloadCallbacks!.forEach((cb) => cb());\n });\n }\n\n if (isLast) {\n beforeUnloadCallbacks.push(callback);\n } else {\n beforeUnloadCallbacks.unshift(callback);\n }\n\n return () => {\n beforeUnloadCallbacks = beforeUnloadCallbacks!.filter((cb) => cb !== callback);\n };\n}\n","let RE_NOT_LETTER: RegExp;\n\ntry {\n RE_NOT_LETTER = /[^\\p{L}\\p{M}]+/ui;\n} catch (e) {\n // Support for older versions of firefox\n RE_NOT_LETTER = /[^\\wа-яё]+/i;\n}\n\nexport default function searchWords(haystack: string, needle: string | string[]) {\n if (!haystack || !needle) {\n return false;\n }\n\n const needleWords = typeof needle === 'string' ? needle.toLowerCase().split(RE_NOT_LETTER) : needle;\n const haystackLower = haystack.toLowerCase();\n\n // @optimization\n if (needleWords.length === 1 && !haystackLower.includes(needleWords[0])) {\n return false;\n }\n\n let haystackWords: string[];\n\n return needleWords.every((needleWord) => {\n if (!haystackLower.includes(needleWord)) {\n return false;\n }\n\n if (!haystackWords) {\n haystackWords = haystackLower.split(RE_NOT_LETTER);\n }\n\n return haystackWords.some((haystackWord) => haystackWord.startsWith(needleWord));\n });\n}\n\nexport function prepareSearchWordsForNeedle(needle: string) {\n const needleWords = needle.toLowerCase().split(RE_NOT_LETTER);\n\n return (haystack: string) => searchWords(haystack, needleWords);\n}\n","export const getServerTime = (serverTimeOffset: number) => {\n return Math.floor(Date.now() / 1000) + serverTimeOffset;\n};\n","import safariFix from 'safari-14-idb-fix';\n\nfunction promisifyRequest(request) {\n return new Promise((resolve, reject) => {\n // @ts-ignore - file size hacks\n request.oncomplete = request.onsuccess = () => resolve(request.result);\n // @ts-ignore - file size hacks\n request.onabort = request.onerror = () => reject(request.error);\n });\n}\nfunction createStore(dbName, storeName) {\n const dbp = safariFix().then(() => {\n const request = indexedDB.open(dbName);\n request.onupgradeneeded = () => request.result.createObjectStore(storeName);\n return promisifyRequest(request);\n });\n return (txMode, callback) => dbp.then((db) => callback(db.transaction(storeName, txMode).objectStore(storeName)));\n}\nlet defaultGetStoreFunc;\nfunction defaultGetStore() {\n if (!defaultGetStoreFunc) {\n defaultGetStoreFunc = createStore('keyval-store', 'keyval');\n }\n return defaultGetStoreFunc;\n}\n/**\n * Get a value by its key.\n *\n * @param key\n * @param customStore Method to get a custom store. Use with caution (see the docs).\n */\nfunction get(key, customStore = defaultGetStore()) {\n return customStore('readonly', (store) => promisifyRequest(store.get(key)));\n}\n/**\n * Set a value with a key.\n *\n * @param key\n * @param value\n * @param customStore Method to get a custom store. Use with caution (see the docs).\n */\nfunction set(key, value, customStore = defaultGetStore()) {\n return customStore('readwrite', (store) => {\n store.put(value, key);\n return promisifyRequest(store.transaction);\n });\n}\n/**\n * Set multiple values at once. This is faster than calling set() multiple times.\n * It's also atomic – if one of the pairs can't be added, none will be added.\n *\n * @param entries Array of entries, where each entry is an array of `[key, value]`.\n * @param customStore Method to get a custom store. Use with caution (see the docs).\n */\nfunction setMany(entries, customStore = defaultGetStore()) {\n return customStore('readwrite', (store) => {\n entries.forEach((entry) => store.put(entry[1], entry[0]));\n return promisifyRequest(store.transaction);\n });\n}\n/**\n * Get multiple values by their keys\n *\n * @param keys\n * @param customStore Method to get a custom store. Use with caution (see the docs).\n */\nfunction getMany(keys, customStore = defaultGetStore()) {\n return customStore('readonly', (store) => Promise.all(keys.map((key) => promisifyRequest(store.get(key)))));\n}\n/**\n * Update a value. This lets you see the old value and update it as an atomic operation.\n *\n * @param key\n * @param updater A callback that takes the old value and returns a new value.\n * @param customStore Method to get a custom store. Use with caution (see the docs).\n */\nfunction update(key, updater, customStore = defaultGetStore()) {\n return customStore('readwrite', (store) => \n // Need to create the promise manually.\n // If I try to chain promises, the transaction closes in browsers\n // that use a promise polyfill (IE10/11).\n new Promise((resolve, reject) => {\n store.get(key).onsuccess = function () {\n try {\n store.put(updater(this.result), key);\n resolve(promisifyRequest(store.transaction));\n }\n catch (err) {\n reject(err);\n }\n };\n }));\n}\n/**\n * Delete a particular key from the store.\n *\n * @param key\n * @param customStore Method to get a custom store. Use with caution (see the docs).\n */\nfunction del(key, customStore = defaultGetStore()) {\n return customStore('readwrite', (store) => {\n store.delete(key);\n return promisifyRequest(store.transaction);\n });\n}\n/**\n * Delete multiple keys at once.\n *\n * @param keys List of keys to delete.\n * @param customStore Method to get a custom store. Use with caution (see the docs).\n */\nfunction delMany(keys, customStore = defaultGetStore()) {\n return customStore('readwrite', (store) => {\n keys.forEach((key) => store.delete(key));\n return promisifyRequest(store.transaction);\n });\n}\n/**\n * Clear all values in the store.\n *\n * @param customStore Method to get a custom store. Use with caution (see the docs).\n */\nfunction clear(customStore = defaultGetStore()) {\n return customStore('readwrite', (store) => {\n store.clear();\n return promisifyRequest(store.transaction);\n });\n}\nfunction eachCursor(store, callback) {\n store.openCursor().onsuccess = function () {\n if (!this.result)\n return;\n callback(this.result);\n this.result.continue();\n };\n return promisifyRequest(store.transaction);\n}\n/**\n * Get all keys in the store.\n *\n * @param customStore Method to get a custom store. Use with caution (see the docs).\n */\nfunction keys(customStore = defaultGetStore()) {\n return customStore('readonly', (store) => {\n // Fast path for modern browsers\n if (store.getAllKeys) {\n return promisifyRequest(store.getAllKeys());\n }\n const items = [];\n return eachCursor(store, (cursor) => items.push(cursor.key)).then(() => items);\n });\n}\n/**\n * Get all values in the store.\n *\n * @param customStore Method to get a custom store. Use with caution (see the docs).\n */\nfunction values(customStore = defaultGetStore()) {\n return customStore('readonly', (store) => {\n // Fast path for modern browsers\n if (store.getAll) {\n return promisifyRequest(store.getAll());\n }\n const items = [];\n return eachCursor(store, (cursor) => items.push(cursor.value)).then(() => items);\n });\n}\n/**\n * Get all entries in the store. Each entry is an array of `[key, value]`.\n *\n * @param customStore Method to get a custom store. Use with caution (see the docs).\n */\nfunction entries(customStore = defaultGetStore()) {\n return customStore('readonly', (store) => {\n // Fast path for modern browsers\n // (although, hopefully we'll get a simpler path some day)\n if (store.getAll && store.getAllKeys) {\n return Promise.all([\n promisifyRequest(store.getAllKeys()),\n promisifyRequest(store.getAll()),\n ]).then(([keys, values]) => keys.map((key, i) => [key, values[i]]));\n }\n const items = [];\n return customStore('readonly', (store) => eachCursor(store, (cursor) => items.push([cursor.key, cursor.value])).then(() => items));\n });\n}\n\nexport { clear, createStore, del, delMany, entries, get, getMany, keys, promisifyRequest, set, setMany, update, values };\n","/**\n * Work around Safari 14 IndexedDB open bug.\n *\n * Safari has a horrible bug where IDB requests can hang while the browser is starting up. https://bugs.webkit.org/show_bug.cgi?id=226547\n * The only solution is to keep nudging it until it's awake.\n */\nfunction idbReady() {\n var isSafari = !navigator.userAgentData &&\n /Safari\\//.test(navigator.userAgent) &&\n !/Chrom(e|ium)\\//.test(navigator.userAgent);\n // No point putting other browsers or older versions of Safari through this mess.\n if (!isSafari || !indexedDB.databases)\n return Promise.resolve();\n var intervalId;\n return new Promise(function (resolve) {\n var tryIdb = function () { return indexedDB.databases().finally(resolve); };\n intervalId = setInterval(tryIdb, 100);\n tryIdb();\n }).finally(function () { return clearInterval(intervalId); });\n}\n\nexport default idbReady;\n","import * as idb from 'idb-keyval';\n\nimport { ApiSessionData } from '../api/types';\n\nimport { DEBUG, LEGACY_SESSION_KEY, SESSION_USER_KEY } from '../config';\nimport * as cacheApi from './cacheApi';\n\nconst DC_IDS = [1, 2, 3, 4, 5];\n\nexport function hasStoredSession(withLegacy = false) {\n if (withLegacy && localStorage.getItem(LEGACY_SESSION_KEY)) {\n return true;\n }\n\n const userAuthJson = localStorage.getItem(SESSION_USER_KEY);\n if (!userAuthJson) return false;\n\n try {\n const userAuth = JSON.parse(userAuthJson);\n return Boolean(userAuth && userAuth.id && userAuth.dcID);\n } catch (err) {\n // Do nothing.\n return false;\n }\n}\n\nexport function storeSession(sessionData: ApiSessionData, currentUserId?: string) {\n const { mainDcId, keys, hashes } = sessionData;\n\n localStorage.setItem(SESSION_USER_KEY, JSON.stringify({ dcID: mainDcId, id: currentUserId }));\n localStorage.setItem('dc', String(mainDcId));\n Object.keys(keys).map(Number).forEach((dcId) => {\n localStorage.setItem(`dc${dcId}_auth_key`, JSON.stringify(keys[dcId]));\n });\n\n if (hashes) {\n Object.keys(hashes).map(Number).forEach((dcId) => {\n localStorage.setItem(`dc${dcId}_hash`, JSON.stringify(hashes[dcId]));\n });\n }\n}\n\nexport function clearStoredSession() {\n [\n SESSION_USER_KEY,\n 'dc',\n ...DC_IDS.map((dcId) => `dc${dcId}_auth_key`),\n ...DC_IDS.map((dcId) => `dc${dcId}_hash`),\n ].forEach((key) => {\n localStorage.removeItem(key);\n });\n}\n\nexport function loadStoredSession(): ApiSessionData | undefined {\n if (!hasStoredSession()) {\n return undefined;\n }\n\n const userAuth = JSON.parse(localStorage.getItem(SESSION_USER_KEY)!);\n const mainDcId = Number(userAuth.dcID);\n const keys: Record = {};\n const hashes: Record = {};\n\n DC_IDS.forEach((dcId) => {\n try {\n const key = localStorage.getItem(`dc${dcId}_auth_key`);\n if (key) {\n keys[dcId] = JSON.parse(key);\n }\n\n const hash = localStorage.getItem(`dc${dcId}_hash`);\n if (hash) {\n hashes[dcId] = JSON.parse(hash);\n }\n } catch (err) {\n if (DEBUG) {\n // eslint-disable-next-line no-console\n console.warn('Failed to load stored session', err);\n }\n // Do nothing.\n }\n });\n\n if (!Object.keys(keys).length) return undefined;\n\n return {\n mainDcId,\n keys,\n hashes,\n };\n}\n\nexport async function importLegacySession() {\n const sessionId = localStorage.getItem(LEGACY_SESSION_KEY);\n if (!sessionId) return;\n\n const sessionJson = await idb.get(`GramJs:${sessionId}`);\n try {\n const sessionData = JSON.parse(sessionJson) as ApiSessionData;\n storeSession(sessionData);\n } catch (err) {\n if (DEBUG) {\n // eslint-disable-next-line no-console\n console.warn('Failed to load legacy session', err);\n }\n // Do nothing.\n }\n}\n\n// Remove previously created IndexedDB and cache API sessions\nexport async function clearLegacySessions() {\n localStorage.removeItem(LEGACY_SESSION_KEY);\n\n const idbKeys = await idb.keys();\n\n await Promise.all>([\n cacheApi.clear('GramJs'),\n ...idbKeys\n .filter((k) => typeof k === 'string' && k.startsWith('GramJs:GramJs-session-'))\n .map((k) => idb.del(k)),\n ]);\n}\n\nexport function importTestSession() {\n const sessionJson = process.env.TEST_SESSION!;\n try {\n const sessionData = JSON.parse(sessionJson) as ApiSessionData & { userId: string };\n storeSession(sessionData, sessionData.userId);\n } catch (err) {\n if (DEBUG) {\n // eslint-disable-next-line no-console\n console.warn('Failed to load test session', err);\n }\n // Do nothing.\n }\n}\n","import { ISettings } from '../types';\n\nimport { animateSingle } from './animation';\nimport { fastRaf } from './schedulers';\n\nimport themeColors from '../styles/themes.json';\n\ntype RGBAColor = {\n r: number;\n g: number;\n b: number;\n a?: number;\n};\n\nlet isInitialized = false;\n\nconst HEX_COLOR_REGEX = /^#?([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})?$/i;\nconst DURATION_MS = 200;\nconst ENABLE_ANIMATION_DELAY_MS = 500;\nconst RGB_VARIABLES = new Set([\n '--color-primary-shade',\n '--color-text-secondary',\n]);\n\nconst lerp = (start: number, end: number, interpolationRatio: number) => {\n return (1 - interpolationRatio) * start + interpolationRatio * end;\n};\n\nconst colors = (Object.keys(themeColors) as Array).map((property) => ({\n property,\n colors: [hexToRgb(themeColors[property][0]), hexToRgb(themeColors[property][1])],\n}));\n\nconst switchTheme = (theme: ISettings['theme'], withAnimation: boolean) => {\n const isDarkTheme = theme === 'dark';\n const shouldAnimate = isInitialized && withAnimation;\n const startIndex = isDarkTheme ? 0 : 1;\n const endIndex = isDarkTheme ? 1 : 0;\n const startAt = Date.now();\n const themeColorTag = document.querySelector('meta[name=\"theme-color\"]');\n\n document.documentElement.classList.remove(`theme-${isDarkTheme ? 'light' : 'dark'}`);\n if (isInitialized) {\n document.documentElement.classList.add('no-animations');\n }\n document.documentElement.classList.add(`theme-${theme}`);\n if (themeColorTag) {\n themeColorTag.setAttribute('content', isDarkTheme ? '#212121' : '#fff');\n }\n\n setTimeout(() => {\n document.documentElement.classList.remove('no-animations');\n }, ENABLE_ANIMATION_DELAY_MS);\n\n isInitialized = true;\n\n if (shouldAnimate) {\n fastRaf(() => {\n animateSingle(() => {\n const t = Math.min((Date.now() - startAt) / DURATION_MS, 1);\n\n applyColorAnimationStep(startIndex, endIndex, transition(t));\n\n return t < 1;\n });\n });\n } else {\n applyColorAnimationStep(startIndex, endIndex);\n }\n};\n\nfunction transition(t: number) {\n return 1 - ((1 - t) ** 3.5);\n}\n\nfunction hexToRgb(hex: string): RGBAColor {\n const result = HEX_COLOR_REGEX.exec(hex)!;\n\n return {\n r: parseInt(result[1], 16),\n g: parseInt(result[2], 16),\n b: parseInt(result[3], 16),\n a: result[4] !== undefined ? parseInt(result[4], 16) : undefined,\n };\n}\n\nfunction applyColorAnimationStep(startIndex: number, endIndex: number, interpolationRatio: number = 1) {\n colors.forEach(({ property, colors: propertyColors }) => {\n const r = Math.round(lerp(propertyColors[startIndex].r, propertyColors[endIndex].r, interpolationRatio));\n const g = Math.round(lerp(propertyColors[startIndex].g, propertyColors[endIndex].g, interpolationRatio));\n const b = Math.round(lerp(propertyColors[startIndex].b, propertyColors[endIndex].b, interpolationRatio));\n const a = propertyColors[startIndex].a !== undefined\n ? Math.round(lerp(propertyColors[startIndex].a!, propertyColors[endIndex].a!, interpolationRatio))\n : undefined;\n\n document.documentElement.style.setProperty(property, a !== undefined\n ? `rgba(${r},${g},${b},${a / 255})`\n : `rgb(${r},${g},${b})`);\n\n if (RGB_VARIABLES.has(property)) {\n document.documentElement.style.setProperty(`${property}-rgb`, `${r},${g},${b}`);\n }\n });\n}\n\nexport default switchTheme;\n","import EMOJI_REGEX from '../lib/twemojiRegex';\nimport { fixNonStandardEmoji } from './emoji';\nimport withCache from './withCache';\n\nexport function formatInteger(value: number) {\n return String(value).replace(/\\d(?=(\\d{3})+$)/g, '$& ');\n}\n\nfunction formatFixedNumber(number: number) {\n const fixed = String(number.toFixed(1));\n if (fixed.substr(-2) === '.0') {\n return Math.round(number);\n }\n\n return number.toFixed(1).replace('.', ',');\n}\n\nexport function formatIntegerCompact(views: number) {\n if (views < 1e3) {\n return views;\n }\n\n if (views < 1e6) {\n return `${formatFixedNumber(views / 1e3)}K`;\n }\n\n return `${formatFixedNumber(views / 1e6)}M`;\n}\n\nexport const getFirstLetters = withCache((phrase: string, count = 2) => {\n return phrase\n .replace(/[.,!@#$%^&*()_+=\\-`~[\\]/\\\\{}:\"|<>?]+/gi, '')\n .trim()\n .split(/\\s+/)\n .slice(0, count)\n .map((word: string) => {\n if (!word.length) return '';\n word = fixNonStandardEmoji(word);\n const emojis = word.match(EMOJI_REGEX);\n if (emojis && word.startsWith(emojis[0])) {\n return emojis[0];\n }\n return word.match(/./u)![0].toUpperCase();\n })\n .join('');\n});\n","export default function trimText(text: T, length?: number) {\n if (!text || !length || text.length <= length) {\n return text;\n }\n\n return `${text.substring(0, length)}...`;\n}\n","import { isWebpSupported } from './environment';\nimport { dataUriToBlob, blobToDataUri } from './files';\nimport { pause } from './schedulers';\n\nconst WORKER_INITIALIZATION_TIMEOUT = 2000;\n\nlet canvas: HTMLCanvasElement;\nlet worker: IWebpWorker;\n\nexport const EMPTY_IMAGE_DATA_URI = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR42mNk'\n + 'YAAAAAYAAjCB0C8AAAAASUVORK5CYII=';\n\nexport async function webpToPng(url: string, blob: Blob): Promise {\n initWebpWorker();\n\n while (!worker.wasmReady) {\n await pause(WORKER_INITIALIZATION_TIMEOUT);\n }\n\n const { result, width, height } = await getDecodePromise(url, blob);\n if (!width || !height) {\n return undefined;\n }\n\n return createPng({ result, width, height });\n}\n\nexport async function webpToPngBase64(key: string, dataUri: string): Promise {\n if (isWebpSupported() || dataUri.substr(0, 15) !== 'data:image/webp') {\n return dataUri;\n }\n\n initWebpWorker();\n\n const pngBlob = await webpToPng(key, dataUriToBlob(dataUri));\n\n if (!pngBlob) {\n throw new Error(`Can't convert webp to png. Url: ${dataUri}`);\n }\n\n return blobToDataUri(pngBlob);\n}\n\nfunction initWebpWorker() {\n if (!worker) {\n worker = new Worker(new URL('../lib/webp/webp_wasm.worker.js', import.meta.url)) as IWebpWorker;\n worker.wasmReady = false;\n worker.onmessage = handleLibWebpMessage;\n }\n}\n\nfunction createPng({ result, width, height }: TEncodedImage): Promise {\n if (!canvas) {\n canvas = document.createElement('canvas');\n }\n\n return new Promise((resolve) => {\n const img = new ImageData(result, width, height);\n\n canvas.width = width;\n canvas.height = height;\n const ctx = canvas.getContext('2d')!;\n ctx.putImageData(img, 0, 0);\n\n canvas.toBlob((blob) => {\n resolve(blob ?? undefined);\n }, 'image/png', 1);\n });\n}\n\nfunction handleLibWebpMessage(e: MessageEvent) {\n const { id } = e.data;\n switch (e.data.type) {\n case 'initialized': {\n worker.wasmReady = true;\n break;\n }\n\n case 'result': {\n if (worker.requests.has(id)) {\n const resolve = worker.requests.get(id)!;\n\n worker.requests.delete(id);\n resolve(e.data!);\n }\n break;\n }\n }\n}\n\nfunction getDecodePromise(url: string, blob: Blob): Promise {\n return new Promise((resolve) => {\n if (!worker.requests) {\n worker.requests = new Map();\n }\n\n worker.requests.set(url, resolve);\n worker.postMessage({ id: url, blob });\n });\n}\n","import { APP_VERSION, DEBUG } from '../config';\nimport { getGlobal } from '../global';\nimport { hasStoredSession } from './sessions';\n\nconst WEBSYNC_URLS = [\n 't.me',\n 'telegram.me',\n].map((domain) => `//${domain}/_websync_?`);\nconst WEBSYNC_VERSION = `${APP_VERSION} Z`;\nconst WEBSYNC_KEY = 'tgme_sync';\nconst WEBSYNC_TIMEOUT = 86400;\n\nconst getTs = () => {\n return Math.floor(Number(new Date()) / 1000);\n};\n\nconst saveSync = (authed: boolean) => {\n const ts = getTs();\n localStorage.setItem(WEBSYNC_KEY, JSON.stringify({\n canRedirect: authed,\n ts,\n }));\n};\n\nlet lastTimeout: NodeJS.Timeout | undefined;\n\nexport const forceWebsync = (authed: boolean) => {\n const currentTs = getTs();\n\n const { canRedirect, ts } = JSON.parse(localStorage.getItem(WEBSYNC_KEY) || '{}');\n\n if (canRedirect !== authed || ts + WEBSYNC_TIMEOUT <= currentTs) {\n return Promise.all(WEBSYNC_URLS.map((url) => {\n return new Promise((resolve, reject) => {\n const script = document.createElement('script');\n\n const removeElement = () => Boolean(document.body.removeChild(script));\n\n script.src = url + new URLSearchParams({\n authed: Number(authed).toString(),\n version: WEBSYNC_VERSION,\n });\n\n document.body.appendChild(script);\n\n script.onload = () => {\n saveSync(authed);\n removeElement();\n if (lastTimeout) {\n clearTimeout(lastTimeout);\n lastTimeout = undefined;\n }\n startWebsync();\n resolve();\n };\n\n script.onerror = () => {\n removeElement();\n reject();\n };\n });\n }));\n } else {\n return Promise.resolve();\n }\n};\n\nexport function startWebsync() {\n if (DEBUG) {\n return;\n }\n\n if (lastTimeout !== undefined) return;\n const currentTs = getTs();\n\n const { ts } = JSON.parse(localStorage.getItem(WEBSYNC_KEY) || '{}');\n\n const timeout = WEBSYNC_TIMEOUT - (currentTs - ts);\n\n lastTimeout = setTimeout(() => {\n const { authState } = getGlobal();\n\n const authed = authState === 'authorizationStateReady' || hasStoredSession(true);\n forceWebsync(authed);\n }, Math.max(0, timeout * 1000));\n}\n\nexport function clearWebsync() {\n localStorage.removeItem(WEBSYNC_KEY);\n}\n","import { throttle } from './schedulers';\nimport {\n MOBILE_SCREEN_LANDSCAPE_MAX_HEIGHT,\n MOBILE_SCREEN_LANDSCAPE_MAX_WIDTH,\n MOBILE_SCREEN_MAX_WIDTH,\n} from '../config';\nimport { IS_IOS, IS_SINGLE_COLUMN_LAYOUT } from './environment';\n\ntype IDimensions = {\n width: number;\n height: number;\n};\n\nconst IS_LANDSCAPE = IS_SINGLE_COLUMN_LAYOUT && isLandscape();\n\nconst initialHeight = window.innerHeight;\nlet currentWindowSize = updateSizes();\nlet isRefreshDisabled = false;\n\nfunction disableRefresh() {\n isRefreshDisabled = true;\n}\n\nfunction enableRefresh() {\n isRefreshDisabled = false;\n}\n\nconst handleResize = throttle(() => {\n currentWindowSize = updateSizes();\n\n if (!isRefreshDisabled && (\n isMobileScreen() !== IS_SINGLE_COLUMN_LAYOUT\n || (IS_SINGLE_COLUMN_LAYOUT && IS_LANDSCAPE !== isLandscape())\n )) {\n window.location.reload();\n }\n}, 250, true);\n\nwindow.addEventListener('orientationchange', handleResize);\nif (IS_IOS) {\n window.visualViewport.addEventListener('resize', handleResize);\n} else {\n window.addEventListener('resize', handleResize);\n}\n\nexport function updateSizes(): IDimensions {\n let height: number;\n if (IS_IOS) {\n height = window.visualViewport.height + window.visualViewport.pageTop;\n } else {\n height = window.innerHeight;\n }\n const vh = height * 0.01;\n\n document.documentElement.style.setProperty('--vh', `${vh}px`);\n\n return {\n width: window.innerWidth,\n height: window.innerHeight,\n };\n}\n\nfunction isMobileScreen() {\n return currentWindowSize.width <= MOBILE_SCREEN_MAX_WIDTH || (\n currentWindowSize.width <= MOBILE_SCREEN_LANDSCAPE_MAX_WIDTH\n && currentWindowSize.height <= MOBILE_SCREEN_LANDSCAPE_MAX_HEIGHT\n );\n}\n\nfunction isLandscape() {\n if (IS_IOS) {\n return window.matchMedia('(orientation: landscape)').matches;\n }\n\n // eslint-disable-next-line max-len\n // Source: https://web.archive.org/web/20160509220835/http://blog.abouthalf.com/development/orientation-media-query-challenges-in-android-browsers/\n // Feature is marked as deprecated now, but it is still supported\n // https://developer.mozilla.org/en-US/docs/Web/CSS/@media/device-aspect-ratio#browser_compatibility\n return window.matchMedia('screen and (min-device-aspect-ratio: 1/1) and (orientation: landscape)').matches;\n}\n\nconst windowSize = {\n get: () => currentWindowSize,\n getIsKeyboardVisible: () => initialHeight > currentWindowSize.height,\n disableRefresh,\n enableRefresh,\n};\n\nexport default windowSize;\n","const cache = new WeakMap>();\n\nexport default function withCache(fn: T) {\n return (...args: Parameters): ReturnType => {\n let fnCache = cache.get(fn);\n const cacheKey = args.map(String).join('_');\n\n if (fnCache) {\n const cached = fnCache.get(cacheKey);\n if (cached) {\n return cached;\n }\n } else {\n fnCache = new Map();\n cache.set(fn, fnCache);\n }\n\n const newValue = fn(...args);\n\n fnCache.set(cacheKey, newValue);\n\n return newValue;\n };\n}\n","!function(t,e){\"object\"==typeof exports&&\"object\"==typeof module?module.exports=e():\"function\"==typeof define&&define.amd?define([],e):\"object\"==typeof exports?exports.QRCodeStyling=e():t.QRCodeStyling=e()}(self,(function(){return(()=>{var t={192:(t,e)=>{var r,i,n=function(){var t=function(t,e){var r=t,i=s[e],n=null,o=0,h=null,v=[],w={},_=function(t,e){n=function(t){for(var e=new Array(t),r=0;r=7&&S(t),null==h&&(h=A(r,i,v)),C(h,e)},y=function(t,e){for(var r=-1;r<=7;r+=1)if(!(t+r<=-1||o<=t+r))for(var i=-1;i<=7;i+=1)e+i<=-1||o<=e+i||(n[t+r][e+i]=0<=r&&r<=6&&(0==i||6==i)||0<=i&&i<=6&&(0==r||6==r)||2<=r&&r<=4&&2<=i&&i<=4)},b=function(){for(var t=8;t>i&1);n[Math.floor(i/3)][i%3+o-8-3]=s}for(i=0;i<18;i+=1)s=!t&&1==(e>>i&1),n[i%3+o-8-3][Math.floor(i/3)]=s},M=function(t,e){for(var r=i<<3|e,s=a.getBCHTypeInfo(r),h=0;h<15;h+=1){var u=!t&&1==(s>>h&1);h<6?n[h][8]=u:h<8?n[h+1][8]=u:n[o-15+h][8]=u}for(h=0;h<15;h+=1)u=!t&&1==(s>>h&1),h<8?n[8][o-h-1]=u:h<9?n[8][15-h-1+1]=u:n[8][15-h-1]=u;n[o-8][8]=!t},C=function(t,e){for(var r=-1,i=o-1,s=7,h=0,u=a.getMaskFunction(e),c=o-1;c>0;c-=2)for(6==c&&(c-=1);;){for(var d=0;d<2;d+=1)if(null==n[i][c-d]){var l=!1;h>>s&1)),u(i,c-d)&&(l=!l),n[i][c-d]=l,-1==(s-=1)&&(h+=1,s=7)}if((i+=r)<0||o<=i){i-=r,r=-r;break}}},A=function(t,e,r){for(var i=c.getRSBlocks(t,e),n=d(),o=0;o8*h)throw\"code length overflow. (\"+n.getLengthInBits()+\">\"+8*h+\")\";for(n.getLengthInBits()+4<=8*h&&n.put(0,4);n.getLengthInBits()%8!=0;)n.putBit(!1);for(;!(n.getLengthInBits()>=8*h||(n.put(236,8),n.getLengthInBits()>=8*h));)n.put(17,8);return function(t,e){for(var r=0,i=0,n=0,o=new Array(e.length),s=new Array(e.length),h=0;h=0?f.getAt(p):0}}var v=0;for(l=0;li)&&(t=i,e=r)}return e}())},w.createTableTag=function(t,e){t=t||2;var r=\"\";r+='',r+=\"\";for(var i=0;i\";for(var n=0;n';r+=\"\"}return(r+=\"\")+\"
\"},w.createSvgTag=function(t,e,r,i){var n={};\"object\"==typeof arguments[0]&&(t=(n=arguments[0]).cellSize,e=n.margin,r=n.alt,i=n.title),t=t||2,e=void 0===e?4*t:e,(r=\"string\"==typeof r?{text:r}:r||{}).text=r.text||null,r.id=r.text?r.id||\"qrcode-description\":null,(i=\"string\"==typeof i?{text:i}:i||{}).text=i.text||null,i.id=i.text?i.id||\"qrcode-title\":null;var o,s,a,h,u=w.getModuleCount()*t+2*e,c=\"\";for(h=\"l\"+t+\",0 0,\"+t+\" -\"+t+\",0 0,-\"+t+\"z \",c+='\",c+=i.text?''+O(i.text)+\"\":\"\",c+=r.text?''+O(r.text)+\"\":\"\",c+='',c+='')+\"\"},w.createDataURL=function(t,e){t=t||2,e=void 0===e?4*t:e;var r=w.getModuleCount()*t+2*e,i=e,n=r-e;return m(r,r,(function(e,r){if(i<=e&&e\"};var O=function(t){for(var e=\"\",r=0;r\":e+=\">\";break;case\"&\":e+=\"&\";break;case'\"':e+=\""\";break;default:e+=i}}return e};return w.createASCII=function(t,e){if((t=t||1)<2)return function(t){t=void 0===t?2:t;var e,r,i,n,o,s=1*w.getModuleCount()+2*t,a=t,h=s-t,u={\"██\":\"█\",\"█ \":\"▀\",\" █\":\"▄\",\" \":\" \"},c={\"██\":\"▀\",\"█ \":\"▀\",\" █\":\" \",\" \":\" \"},d=\"\";for(e=0;e=h?c[o]:u[o];d+=\"\\n\"}return s%2&&t>0?d.substring(0,d.length-s-1)+Array(s+1).join(\"▀\"):d.substring(0,d.length-1)}(e);t-=1,e=void 0===e?2*t:e;var r,i,n,o,s=w.getModuleCount()*t+2*e,a=e,h=s-e,u=Array(t+1).join(\"██\"),c=Array(t+1).join(\" \"),d=\"\",l=\"\";for(r=0;r>>8),e.push(255&s)):e.push(i)}}return e}};var e,r,i,n,o,s={L:1,M:0,Q:3,H:2},a=(e=[[],[6,18],[6,22],[6,26],[6,30],[6,34],[6,22,38],[6,24,42],[6,26,46],[6,28,50],[6,30,54],[6,32,58],[6,34,62],[6,26,46,66],[6,26,48,70],[6,26,50,74],[6,30,54,78],[6,30,56,82],[6,30,58,86],[6,34,62,90],[6,28,50,72,94],[6,26,50,74,98],[6,30,54,78,102],[6,28,54,80,106],[6,32,58,84,110],[6,30,58,86,114],[6,34,62,90,118],[6,26,50,74,98,122],[6,30,54,78,102,126],[6,26,52,78,104,130],[6,30,56,82,108,134],[6,34,60,86,112,138],[6,30,58,86,114,142],[6,34,62,90,118,146],[6,30,54,78,102,126,150],[6,24,50,76,102,128,154],[6,28,54,80,106,132,158],[6,32,58,84,110,136,162],[6,26,54,82,110,138,166],[6,30,58,86,114,142,170]],r=1335,i=7973,o=function(t){for(var e=0;0!=t;)e+=1,t>>>=1;return e},(n={}).getBCHTypeInfo=function(t){for(var e=t<<10;o(e)-o(r)>=0;)e^=r<=0;)e^=i<5&&(r+=3+o-5)}for(i=0;i=256;)e-=255;return t[e]}}}();function u(t,e){if(void 0===t.length)throw t.length+\"/\"+e;var r=function(){for(var r=0;r>>7-e%8&1)},put:function(t,e){for(var i=0;i>>e-i-1&1))},getLengthInBits:function(){return e},putBit:function(r){var i=Math.floor(e/8);t.length<=i&&t.push(0),r&&(t[i]|=128>>>e%8),e+=1}};return r},l=function(t){var e=t,r={getMode:function(){return 1},getLength:function(t){return e.length},write:function(t){for(var r=e,n=0;n+2>>8&255)+(255&n),t.put(n,13),r+=2}if(r>>8)},writeBytes:function(t,r,i){r=r||0,i=i||t.length;for(var n=0;n0&&(e+=\",\"),e+=t[r];return e+\"]\"}};return e},w=function(t){var e=t,r=0,i=0,n=0,o={read:function(){for(;n<8;){if(r>=e.length){if(0==n)return-1;throw\"unexpected end of file./\"+n}var t=e.charAt(r);if(r+=1,\"=\"==t)return n=0,-1;t.match(/^\\s$/)||(i=i<<6|s(t.charCodeAt(0)),n+=6)}var o=i>>>n-8&255;return n-=8,o}},s=function(t){if(65<=t&&t<=90)return t-65;if(97<=t&&t<=122)return t-97+26;if(48<=t&&t<=57)return t-48+52;if(43==t)return 62;if(47==t)return 63;throw\"c:\"+t};return o},m=function(t,e,r){for(var i=function(t,e){var r=t,i=e,n=new Array(t*e),o={setPixel:function(t,e,i){n[e*r+t]=i},write:function(t){t.writeString(\"GIF87a\"),t.writeShort(r),t.writeShort(i),t.writeByte(128),t.writeByte(0),t.writeByte(0),t.writeByte(0),t.writeByte(0),t.writeByte(0),t.writeByte(255),t.writeByte(255),t.writeByte(255),t.writeString(\",\"),t.writeShort(0),t.writeShort(0),t.writeShort(r),t.writeShort(i),t.writeByte(0);var e=s(2);t.writeByte(2);for(var n=0;e.length-n>255;)t.writeByte(255),t.writeBytes(e,n,255),n+=255;t.writeByte(e.length-n),t.writeBytes(e,n,e.length-n),t.writeByte(0),t.writeString(\";\")}},s=function(t){for(var e=1<>>e!=0)throw\"length over\";for(;u+e>=8;)h.writeByte(255&(t<>>=8-u,c=0,u=0;c|=t<0&&h.writeByte(c)}});l.write(e,i);var g=0,f=String.fromCharCode(n[g]);for(g+=1;g=6;)o(t>>>e-6),e-=6},n.flush=function(){if(e>0&&(o(t<<6-e),t=0,e=0),r%3!=0)for(var n=3-r%3,s=0;s>6,128|63&i):i<55296||i>=57344?e.push(224|i>>12,128|i>>6&63,128|63&i):(r++,i=65536+((1023&i)<<10|1023&t.charCodeAt(r)),e.push(240|i>>18,128|i>>12&63,128|i>>6&63,128|63&i))}return e}(t)},void 0===(i=\"function\"==typeof(r=function(){return n})?r.apply(e,[]):r)||(t.exports=i)}},e={};function r(i){var n=e[i];if(void 0!==n)return n.exports;var o=e[i]={exports:{}};return t[i](o,o.exports,r),o.exports}r.n=t=>{var e=t&&t.__esModule?()=>t.default:()=>t;return r.d(e,{a:e}),e},r.d=(t,e)=>{for(var i in e)r.o(e,i)&&!r.o(t,i)&&Object.defineProperty(t,i,{enumerable:!0,get:e[i]})},r.o=(t,e)=>Object.prototype.hasOwnProperty.call(t,e);var i={};return(()=>{\"use strict\";r.d(i,{default:()=>M});const t=t=>!!t&&\"object\"==typeof t&&!Array.isArray(t);function e(r,...i){if(!i.length)return r;const n=i.shift();return void 0!==n&&t(r)&&t(n)?(r=Object.assign({},r),Object.keys(n).forEach((i=>{const o=r[i],s=n[i];Array.isArray(o)&&Array.isArray(s)?r[i]=s:t(o)&&t(s)?r[i]=e(Object.assign({},o),s):r[i]=s})),e(r,...i)):r}function n(t,e){const r=document.createElement(\"a\");r.download=e,r.href=t,document.body.appendChild(r),r.click(),document.body.removeChild(r)}function o(t){return new Promise((e=>{const r=new FileReader;r.onloadend=()=>e(r.result),r.readAsDataURL(t)}))}const s={L:.07,M:.15,Q:.25,H:.3};class a{constructor({svg:t,type:e}){this._svg=t,this._type=e}draw(t,e,r,i){let n;switch(this._type){case\"dots\":n=this._drawDot;break;case\"classy\":n=this._drawClassy;break;case\"classy-rounded\":n=this._drawClassyRounded;break;case\"rounded\":n=this._drawRounded;break;case\"extra-rounded\":n=this._drawExtraRounded;break;default:n=this._drawSquare}n.call(this,{x:t,y:e,size:r,getNeighbor:i})}_rotateFigure({x:t,y:e,size:r,rotation:i=0,draw:n}){var o;const s=t+r/2,a=e+r/2;n(),null===(o=this._element)||void 0===o||o.setAttribute(\"transform\",`rotate(${180*i/Math.PI},${s},${a})`)}_basicDot(t){const{size:e,x:r,y:i}=t;this._rotateFigure(Object.assign(Object.assign({},t),{draw:()=>{this._element=document.createElementNS(\"http://www.w3.org/2000/svg\",\"circle\"),this._element.setAttribute(\"cx\",String(r+e/2)),this._element.setAttribute(\"cy\",String(i+e/2)),this._element.setAttribute(\"r\",String(e/2))}}))}_basicSquare(t){const{size:e,x:r,y:i}=t;this._rotateFigure(Object.assign(Object.assign({},t),{draw:()=>{this._element=document.createElementNS(\"http://www.w3.org/2000/svg\",\"rect\"),this._element.setAttribute(\"x\",String(r)),this._element.setAttribute(\"y\",String(i)),this._element.setAttribute(\"width\",String(e)),this._element.setAttribute(\"height\",String(e))}}))}_basicSideRounded(t){const{size:e,x:r,y:i}=t;this._rotateFigure(Object.assign(Object.assign({},t),{draw:()=>{this._element=document.createElementNS(\"http://www.w3.org/2000/svg\",\"path\"),this._element.setAttribute(\"d\",`M ${r} ${i}v ${e}h `+e/2+`a ${e/2} ${e/2}, 0, 0, 0, 0 ${-e}`)}}))}_basicCornerRounded(t){const{size:e,x:r,y:i}=t;this._rotateFigure(Object.assign(Object.assign({},t),{draw:()=>{this._element=document.createElementNS(\"http://www.w3.org/2000/svg\",\"path\"),this._element.setAttribute(\"d\",`M ${r} ${i}v ${e}h ${e}v `+-e/2+`a ${e/2} ${e/2}, 0, 0, 0, ${-e/2} ${-e/2}`)}}))}_basicCornerExtraRounded(t){const{size:e,x:r,y:i}=t;this._rotateFigure(Object.assign(Object.assign({},t),{draw:()=>{this._element=document.createElementNS(\"http://www.w3.org/2000/svg\",\"path\"),this._element.setAttribute(\"d\",`M ${r} ${i}v ${e}h ${e}a ${e} ${e}, 0, 0, 0, ${-e} ${-e}`)}}))}_basicCornersRounded(t){const{size:e,x:r,y:i}=t;this._rotateFigure(Object.assign(Object.assign({},t),{draw:()=>{this._element=document.createElementNS(\"http://www.w3.org/2000/svg\",\"path\"),this._element.setAttribute(\"d\",`M ${r} ${i}v `+e/2+`a ${e/2} ${e/2}, 0, 0, 0, ${e/2} ${e/2}h `+e/2+\"v \"+-e/2+`a ${e/2} ${e/2}, 0, 0, 0, ${-e/2} ${-e/2}`)}}))}_drawDot({x:t,y:e,size:r}){this._basicDot({x:t,y:e,size:r,rotation:0})}_drawSquare({x:t,y:e,size:r}){this._basicSquare({x:t,y:e,size:r,rotation:0})}_drawRounded({x:t,y:e,size:r,getNeighbor:i}){const n=i?+i(-1,0):0,o=i?+i(1,0):0,s=i?+i(0,-1):0,a=i?+i(0,1):0,h=n+o+s+a;if(0!==h)if(h>2||n&&o||s&&a)this._basicSquare({x:t,y:e,size:r,rotation:0});else{if(2===h){let i=0;return n&&s?i=Math.PI/2:s&&o?i=Math.PI:o&&a&&(i=-Math.PI/2),void this._basicCornerRounded({x:t,y:e,size:r,rotation:i})}if(1===h){let i=0;return s?i=Math.PI/2:o?i=Math.PI:a&&(i=-Math.PI/2),void this._basicSideRounded({x:t,y:e,size:r,rotation:i})}}else this._basicDot({x:t,y:e,size:r,rotation:0})}_drawExtraRounded({x:t,y:e,size:r,getNeighbor:i}){const n=i?+i(-1,0):0,o=i?+i(1,0):0,s=i?+i(0,-1):0,a=i?+i(0,1):0,h=n+o+s+a;if(0!==h)if(h>2||n&&o||s&&a)this._basicSquare({x:t,y:e,size:r,rotation:0});else{if(2===h){let i=0;return n&&s?i=Math.PI/2:s&&o?i=Math.PI:o&&a&&(i=-Math.PI/2),void this._basicCornerExtraRounded({x:t,y:e,size:r,rotation:i})}if(1===h){let i=0;return s?i=Math.PI/2:o?i=Math.PI:a&&(i=-Math.PI/2),void this._basicSideRounded({x:t,y:e,size:r,rotation:i})}}else this._basicDot({x:t,y:e,size:r,rotation:0})}_drawClassy({x:t,y:e,size:r,getNeighbor:i}){const n=i?+i(-1,0):0,o=i?+i(1,0):0,s=i?+i(0,-1):0,a=i?+i(0,1):0;0!==n+o+s+a?n||s?o||a?this._basicSquare({x:t,y:e,size:r,rotation:0}):this._basicCornerRounded({x:t,y:e,size:r,rotation:Math.PI/2}):this._basicCornerRounded({x:t,y:e,size:r,rotation:-Math.PI/2}):this._basicCornersRounded({x:t,y:e,size:r,rotation:Math.PI/2})}_drawClassyRounded({x:t,y:e,size:r,getNeighbor:i}){const n=i?+i(-1,0):0,o=i?+i(1,0):0,s=i?+i(0,-1):0,a=i?+i(0,1):0;0!==n+o+s+a?n||s?o||a?this._basicSquare({x:t,y:e,size:r,rotation:0}):this._basicCornerExtraRounded({x:t,y:e,size:r,rotation:Math.PI/2}):this._basicCornerExtraRounded({x:t,y:e,size:r,rotation:-Math.PI/2}):this._basicCornersRounded({x:t,y:e,size:r,rotation:Math.PI/2})}}class h{constructor({svg:t,type:e}){this._svg=t,this._type=e}draw(t,e,r,i){let n;switch(this._type){case\"square\":n=this._drawSquare;break;case\"extra-rounded\":n=this._drawExtraRounded;break;default:n=this._drawDot}n.call(this,{x:t,y:e,size:r,rotation:i})}_rotateFigure({x:t,y:e,size:r,rotation:i=0,draw:n}){var o;const s=t+r/2,a=e+r/2;n(),null===(o=this._element)||void 0===o||o.setAttribute(\"transform\",`rotate(${180*i/Math.PI},${s},${a})`)}_basicDot(t){const{size:e,x:r,y:i}=t,n=e/7;this._rotateFigure(Object.assign(Object.assign({},t),{draw:()=>{this._element=document.createElementNS(\"http://www.w3.org/2000/svg\",\"path\"),this._element.setAttribute(\"clip-rule\",\"evenodd\"),this._element.setAttribute(\"d\",`M ${r+e/2} ${i}a ${e/2} ${e/2} 0 1 0 0.1 0zm 0 ${n}a ${e/2-n} ${e/2-n} 0 1 1 -0.1 0Z`)}}))}_basicSquare(t){const{size:e,x:r,y:i}=t,n=e/7;this._rotateFigure(Object.assign(Object.assign({},t),{draw:()=>{this._element=document.createElementNS(\"http://www.w3.org/2000/svg\",\"path\"),this._element.setAttribute(\"clip-rule\",\"evenodd\"),this._element.setAttribute(\"d\",`M ${r} ${i}v ${e}h ${e}v `+-e+\"z\"+`M ${r+n} ${i+n}h `+(e-2*n)+\"v \"+(e-2*n)+\"h \"+(2*n-e)+\"z\")}}))}_basicExtraRounded(t){const{size:e,x:r,y:i}=t,n=e/7;this._rotateFigure(Object.assign(Object.assign({},t),{draw:()=>{this._element=document.createElementNS(\"http://www.w3.org/2000/svg\",\"path\"),this._element.setAttribute(\"clip-rule\",\"evenodd\"),this._element.setAttribute(\"d\",`M ${r} ${i+2.5*n}v `+2*n+`a ${2.5*n} ${2.5*n}, 0, 0, 0, ${2.5*n} ${2.5*n}h `+2*n+`a ${2.5*n} ${2.5*n}, 0, 0, 0, ${2.5*n} ${2.5*-n}v `+-2*n+`a ${2.5*n} ${2.5*n}, 0, 0, 0, ${2.5*-n} ${2.5*-n}h `+-2*n+`a ${2.5*n} ${2.5*n}, 0, 0, 0, ${2.5*-n} ${2.5*n}`+`M ${r+2.5*n} ${i+n}h `+2*n+`a ${1.5*n} ${1.5*n}, 0, 0, 1, ${1.5*n} ${1.5*n}v `+2*n+`a ${1.5*n} ${1.5*n}, 0, 0, 1, ${1.5*-n} ${1.5*n}h `+-2*n+`a ${1.5*n} ${1.5*n}, 0, 0, 1, ${1.5*-n} ${1.5*-n}v `+-2*n+`a ${1.5*n} ${1.5*n}, 0, 0, 1, ${1.5*n} ${1.5*-n}`)}}))}_drawDot({x:t,y:e,size:r,rotation:i}){this._basicDot({x:t,y:e,size:r,rotation:i})}_drawSquare({x:t,y:e,size:r,rotation:i}){this._basicSquare({x:t,y:e,size:r,rotation:i})}_drawExtraRounded({x:t,y:e,size:r,rotation:i}){this._basicExtraRounded({x:t,y:e,size:r,rotation:i})}}class u{constructor({svg:t,type:e}){this._svg=t,this._type=e}draw(t,e,r,i){let n;n=\"square\"===this._type?this._drawSquare:this._drawDot,n.call(this,{x:t,y:e,size:r,rotation:i})}_rotateFigure({x:t,y:e,size:r,rotation:i=0,draw:n}){var o;const s=t+r/2,a=e+r/2;n(),null===(o=this._element)||void 0===o||o.setAttribute(\"transform\",`rotate(${180*i/Math.PI},${s},${a})`)}_basicDot(t){const{size:e,x:r,y:i}=t;this._rotateFigure(Object.assign(Object.assign({},t),{draw:()=>{this._element=document.createElementNS(\"http://www.w3.org/2000/svg\",\"circle\"),this._element.setAttribute(\"cx\",String(r+e/2)),this._element.setAttribute(\"cy\",String(i+e/2)),this._element.setAttribute(\"r\",String(e/2))}}))}_basicSquare(t){const{size:e,x:r,y:i}=t;this._rotateFigure(Object.assign(Object.assign({},t),{draw:()=>{this._element=document.createElementNS(\"http://www.w3.org/2000/svg\",\"rect\"),this._element.setAttribute(\"x\",String(r)),this._element.setAttribute(\"y\",String(i)),this._element.setAttribute(\"width\",String(e)),this._element.setAttribute(\"height\",String(e))}}))}_drawDot({x:t,y:e,size:r,rotation:i}){this._basicDot({x:t,y:e,size:r,rotation:i})}_drawSquare({x:t,y:e,size:r,rotation:i}){this._basicSquare({x:t,y:e,size:r,rotation:i})}}const c=\"circle\";var d=function(t,e,r,i){return new(r||(r=Promise))((function(n,o){function s(t){try{h(i.next(t))}catch(t){o(t)}}function a(t){try{h(i.throw(t))}catch(t){o(t)}}function h(t){var e;t.done?n(t.value):(e=t.value,e instanceof r?e:new r((function(t){t(e)}))).then(s,a)}h((i=i.apply(t,e||[])).next())}))};const l=[[1,1,1,1,1,1,1],[1,0,0,0,0,0,1],[1,0,0,0,0,0,1],[1,0,0,0,0,0,1],[1,0,0,0,0,0,1],[1,0,0,0,0,0,1],[1,1,1,1,1,1,1]],g=[[0,0,0,0,0,0,0],[0,0,0,0,0,0,0],[0,0,1,1,1,0,0],[0,0,1,1,1,0,0],[0,0,1,1,1,0,0],[0,0,0,0,0,0,0],[0,0,0,0,0,0,0]];class f{constructor(t){this._element=document.createElementNS(\"http://www.w3.org/2000/svg\",\"svg\"),this._element.setAttribute(\"width\",String(t.width)),this._element.setAttribute(\"height\",String(t.height)),this._defs=document.createElementNS(\"http://www.w3.org/2000/svg\",\"defs\"),this._element.appendChild(this._defs),this._options=t}get width(){return this._options.width}get height(){return this._options.height}getElement(){return this._element}drawQR(t){return d(this,void 0,void 0,(function*(){const e=t.getModuleCount(),r=Math.min(this._options.width,this._options.height)-2*this._options.margin,i=this._options.shape===c?r/Math.sqrt(2):r,n=Math.floor(i/e);let o={hideXDots:0,hideYDots:0,width:0,height:0};if(this._qr=t,this._options.image){if(yield this.loadImage(),!this._image)return;const{imageOptions:t,qrOptions:r}=this._options,i=t.imageSize*s[r.errorCorrectionLevel],a=Math.floor(i*e*e),h=this._image instanceof SVGImageElement?this._image.width.baseVal.value:this._image.naturalWidth,u=this._image instanceof SVGImageElement?this._image.height.baseVal.value:this._image.naturalHeight;o=function({originalHeight:t,originalWidth:e,maxHiddenDots:r,maxHiddenAxisDots:i,dotSize:n}){const o={x:0,y:0},s={x:0,y:0};if(t<0||e<0||r<=0||n<=0)return{height:0,width:0,hideYDots:0,hideXDots:0};const a=t&&e?t/e:1;return o.x=Math.floor(Math.sqrt(r/a)),o.x<=0&&(o.x=1),i&&ir||i&&i{var i,n,s,a,h,u;return!(this._options.imageOptions.hideBackgroundDots&&t>=(e-o.hideXDots)/2&&t<(e+o.hideXDots)/2&&r>=(e-o.hideYDots)/2&&r<(e+o.hideYDots)/2||(null===(i=l[t])||void 0===i?void 0:i[r])||(null===(n=l[t-e+7])||void 0===n?void 0:n[r])||(null===(s=l[t])||void 0===s?void 0:s[r-e+7])||(null===(a=g[t])||void 0===a?void 0:a[r])||(null===(h=g[t-e+7])||void 0===h?void 0:h[r])||(null===(u=g[t])||void 0===u?void 0:u[r-e+7]))})),this.drawCorners(),this._options.image&&(yield this.drawImage({width:o.width,height:o.height,count:e,dotSize:n}))}))}drawBackground(){var t,e,r;const i=this._element,n=this._options;if(i){const i=null===(t=n.backgroundOptions)||void 0===t?void 0:t.gradient,o=null===(e=n.backgroundOptions)||void 0===e?void 0:e.color;if((i||o)&&this._createColor({options:i,color:o,additionalRotation:0,x:0,y:0,height:n.height,width:n.width,name:\"background-color\"}),null===(r=n.backgroundOptions)||void 0===r?void 0:r.round){const t=Math.min(n.width,n.height),e=document.createElementNS(\"http://www.w3.org/2000/svg\",\"rect\");this._backgroundClipPath=document.createElementNS(\"http://www.w3.org/2000/svg\",\"clipPath\"),this._backgroundClipPath.setAttribute(\"id\",\"clip-path-background-color\"),this._defs.appendChild(this._backgroundClipPath),e.setAttribute(\"x\",String((n.width-t)/2)),e.setAttribute(\"y\",String((n.height-t)/2)),e.setAttribute(\"width\",String(t)),e.setAttribute(\"height\",String(t)),e.setAttribute(\"rx\",String(t/2*n.backgroundOptions.round)),this._backgroundClipPath.appendChild(e)}}}drawDots(t){var e,r;if(!this._qr)throw\"QR code is not defined\";const i=this._options,n=this._qr.getModuleCount();if(n>i.width||n>i.height)throw\"The canvas is too small.\";const o=Math.min(i.width,i.height)-2*i.margin,s=i.shape===c?o/Math.sqrt(2):o,h=Math.floor(s/n),u=Math.floor((i.width-n*h)/2),d=Math.floor((i.height-n*h)/2),l=new a({svg:this._element,type:i.dotsOptions.type});this._dotsClipPath=document.createElementNS(\"http://www.w3.org/2000/svg\",\"clipPath\"),this._dotsClipPath.setAttribute(\"id\",\"clip-path-dot-color\"),this._dotsClipPath.style.transformOrigin=\"center\",this._dotsClipPath.style.transform=\"rotate(90deg) scale(1, -1)\",this._defs.appendChild(this._dotsClipPath),this._createColor({options:null===(e=i.dotsOptions)||void 0===e?void 0:e.gradient,color:i.dotsOptions.color,additionalRotation:0,x:0,y:0,height:i.height,width:i.width,name:\"dot-color\"});for(let e=0;e!(e+r<0||i+o<0||e+r>=n||i+o>=n)&&!(t&&!t(e+r,i+o))&&!!this._qr&&this._qr.isDark(e+r,i+o))),l._element&&this._dotsClipPath&&this._dotsClipPath.appendChild(l._element));if(i.shape===c){const t=Math.floor((o/h-n)/2),e=n+2*t,r=u-t*h,i=d-t*h,s=[],a=Math.floor(e/2);for(let r=0;r=t-1&&r<=e-t&&i>=t-1&&i<=e-t||Math.sqrt((r-a)*(r-a)+(i-a)*(i-a))>a?s[r][i]=0:s[r][i]=this._qr.isDark(i-2*t<0?i:i>=n?i-2*t:i-t,r-2*t<0?r:r>=n?r-2*t:r-t)?1:0}for(let t=0;t{var i;return!!(null===(i=s[t+e])||void 0===i?void 0:i[n+r])})),l._element&&this._dotsClipPath&&this._dotsClipPath.appendChild(l._element))}}drawCorners(){if(!this._qr)throw\"QR code is not defined\";const t=this._element,e=this._options;if(!t)throw\"Element code is not defined\";const r=this._qr.getModuleCount(),i=Math.min(e.width,e.height)-2*e.margin,n=e.shape===c?i/Math.sqrt(2):i,o=Math.floor(n/r),s=7*o,d=3*o,f=Math.floor((e.width-r*o)/2),p=Math.floor((e.height-r*o)/2);[[0,0,0],[1,0,Math.PI/2],[0,1,-Math.PI/2]].forEach((([t,i,n])=>{var c,v,w,m,_,y,b,x,S,M,C,A;const O=f+t*o*(r-7),$=p+i*o*(r-7);let D=this._dotsClipPath,k=this._dotsClipPath;if(((null===(c=e.cornersSquareOptions)||void 0===c?void 0:c.gradient)||(null===(v=e.cornersSquareOptions)||void 0===v?void 0:v.color))&&(D=document.createElementNS(\"http://www.w3.org/2000/svg\",\"clipPath\"),D.setAttribute(\"id\",`clip-path-corners-square-color-${t}-${i}`),this._defs.appendChild(D),this._cornersSquareClipPath=this._cornersDotClipPath=k=D,this._createColor({options:null===(w=e.cornersSquareOptions)||void 0===w?void 0:w.gradient,color:null===(m=e.cornersSquareOptions)||void 0===m?void 0:m.color,additionalRotation:n,x:O,y:$,height:s,width:s,name:`corners-square-color-${t}-${i}`})),null===(_=e.cornersSquareOptions)||void 0===_?void 0:_.type){const t=new h({svg:this._element,type:e.cornersSquareOptions.type});t.draw(O,$,s,n),t._element&&D&&D.appendChild(t._element)}else{const t=new a({svg:this._element,type:e.dotsOptions.type});for(let e=0;e{var n;return!!(null===(n=l[e+t])||void 0===n?void 0:n[r+i])})),t._element&&D&&D.appendChild(t._element))}if(((null===(b=e.cornersDotOptions)||void 0===b?void 0:b.gradient)||(null===(x=e.cornersDotOptions)||void 0===x?void 0:x.color))&&(k=document.createElementNS(\"http://www.w3.org/2000/svg\",\"clipPath\"),k.setAttribute(\"id\",`clip-path-corners-dot-color-${t}-${i}`),this._defs.appendChild(k),this._cornersDotClipPath=k,this._createColor({options:null===(S=e.cornersDotOptions)||void 0===S?void 0:S.gradient,color:null===(M=e.cornersDotOptions)||void 0===M?void 0:M.color,additionalRotation:n,x:O+2*o,y:$+2*o,height:d,width:d,name:`corners-dot-color-${t}-${i}`})),null===(C=e.cornersDotOptions)||void 0===C?void 0:C.type){const t=new u({svg:this._element,type:e.cornersDotOptions.type});t.draw(O+2*o,$+2*o,d,n),t._element&&k&&k.appendChild(t._element)}else{const t=new a({svg:this._element,type:e.dotsOptions.type});for(let e=0;e{var n;return!!(null===(n=g[e+t])||void 0===n?void 0:n[r+i])})),t._element&&k&&k.appendChild(t._element))}}))}loadImage(){return new Promise(((t,e)=>{const r=this._options,i=new Image;if(!r.image)return e(\"Image is not defined\");\"string\"==typeof r.imageOptions.crossOrigin&&(i.crossOrigin=r.imageOptions.crossOrigin),this._image=i,i.onload=()=>{t()},i.src=r.image}))}drawImage({width:t,height:e,count:r,dotSize:i}){return d(this,void 0,void 0,(function*(){const n=this._options,s=Math.floor((n.width-r*i)/2),a=Math.floor((n.height-r*i)/2),h=s+n.imageOptions.margin+(r*i-t)/2,u=a+n.imageOptions.margin+(r*i-e)/2,c=t-2*n.imageOptions.margin,d=e-2*n.imageOptions.margin,l=document.createElementNS(\"http://www.w3.org/2000/svg\",\"image\");l.setAttribute(\"x\",String(h)),l.setAttribute(\"y\",String(u)),l.setAttribute(\"width\",`${c}px`),l.setAttribute(\"height\",`${d}px`);const g=yield function(t){return e=this,r=void 0,n=function*(){return fetch(t).then((t=>t.blob())).then(o)},new((i=void 0)||(i=Promise))((function(t,o){function s(t){try{h(n.next(t))}catch(t){o(t)}}function a(t){try{h(n.throw(t))}catch(t){o(t)}}function h(e){var r;e.done?t(e.value):(r=e.value,r instanceof i?r:new i((function(t){t(r)}))).then(s,a)}h((n=n.apply(e,r||[])).next())}));var e,r,i,n}(n.image||\"\");l.setAttribute(\"href\",g||\"\"),this._element.appendChild(l)}))}_createColor({options:t,color:e,additionalRotation:r,x:i,y:n,height:o,width:s,name:a}){const h=s>o?s:o,u=document.createElementNS(\"http://www.w3.org/2000/svg\",\"rect\");if(u.setAttribute(\"x\",String(i)),u.setAttribute(\"y\",String(n)),u.setAttribute(\"height\",String(o)),u.setAttribute(\"width\",String(s)),u.setAttribute(\"clip-path\",`url('#clip-path-${a}')`),t){let e;if(\"radial\"===t.type)e=document.createElementNS(\"http://www.w3.org/2000/svg\",\"radialGradient\"),e.setAttribute(\"id\",a),e.setAttribute(\"gradientUnits\",\"userSpaceOnUse\"),e.setAttribute(\"fx\",String(i+s/2)),e.setAttribute(\"fy\",String(n+o/2)),e.setAttribute(\"cx\",String(i+s/2)),e.setAttribute(\"cy\",String(n+o/2)),e.setAttribute(\"r\",String(h/2));else{const h=((t.rotation||0)+r)%(2*Math.PI),u=(h+2*Math.PI)%(2*Math.PI);let c=i+s/2,d=n+o/2,l=i+s/2,g=n+o/2;u>=0&&u<=.25*Math.PI||u>1.75*Math.PI&&u<=2*Math.PI?(c-=s/2,d-=o/2*Math.tan(h),l+=s/2,g+=o/2*Math.tan(h)):u>.25*Math.PI&&u<=.75*Math.PI?(d-=o/2,c-=s/2/Math.tan(h),g+=o/2,l+=s/2/Math.tan(h)):u>.75*Math.PI&&u<=1.25*Math.PI?(c+=s/2,d+=o/2*Math.tan(h),l-=s/2,g-=o/2*Math.tan(h)):u>1.25*Math.PI&&u<=1.75*Math.PI&&(d+=o/2,c+=s/2/Math.tan(h),g-=o/2,l-=s/2/Math.tan(h)),e=document.createElementNS(\"http://www.w3.org/2000/svg\",\"linearGradient\"),e.setAttribute(\"id\",a),e.setAttribute(\"gradientUnits\",\"userSpaceOnUse\"),e.setAttribute(\"x1\",String(Math.round(c))),e.setAttribute(\"y1\",String(Math.round(d))),e.setAttribute(\"x2\",String(Math.round(l))),e.setAttribute(\"y2\",String(Math.round(g)))}t.colorStops.forEach((({offset:t,color:r})=>{const i=document.createElementNS(\"http://www.w3.org/2000/svg\",\"stop\");i.setAttribute(\"offset\",100*t+\"%\"),i.setAttribute(\"stop-color\",r),e.appendChild(i)})),u.setAttribute(\"fill\",`url('#${a}')`),this._defs.appendChild(e)}else e&&u.setAttribute(\"fill\",e);this._element.appendChild(u)}}const p=\"canvas\",v={};for(let t=0;t<=40;t++)v[t]=t;const w={type:p,shape:\"square\",width:300,height:300,data:\"\",margin:0,qrOptions:{typeNumber:v[0],mode:void 0,errorCorrectionLevel:\"Q\"},imageOptions:{hideBackgroundDots:!0,imageSize:.4,crossOrigin:void 0,margin:0},dotsOptions:{type:\"square\",color:\"#000\"},backgroundOptions:{round:0,color:\"#fff\"}};function m(t){const e=Object.assign({},t);if(!e.colorStops||!e.colorStops.length)throw\"Field 'colorStops' is required in gradient\";return e.rotation?e.rotation=Number(e.rotation):e.rotation=0,e.colorStops=e.colorStops.map((t=>Object.assign(Object.assign({},t),{offset:Number(t.offset)}))),e}function _(t){const e=Object.assign({},t);return e.width=Number(e.width),e.height=Number(e.height),e.margin=Number(e.margin),e.imageOptions=Object.assign(Object.assign({},e.imageOptions),{hideBackgroundDots:Boolean(e.imageOptions.hideBackgroundDots),imageSize:Number(e.imageOptions.imageSize),margin:Number(e.imageOptions.margin)}),e.margin>Math.min(e.width,e.height)&&(e.margin=Math.min(e.width,e.height)),e.dotsOptions=Object.assign({},e.dotsOptions),e.dotsOptions.gradient&&(e.dotsOptions.gradient=m(e.dotsOptions.gradient)),e.cornersSquareOptions&&(e.cornersSquareOptions=Object.assign({},e.cornersSquareOptions),e.cornersSquareOptions.gradient&&(e.cornersSquareOptions.gradient=m(e.cornersSquareOptions.gradient))),e.cornersDotOptions&&(e.cornersDotOptions=Object.assign({},e.cornersDotOptions),e.cornersDotOptions.gradient&&(e.cornersDotOptions.gradient=m(e.cornersDotOptions.gradient))),e.backgroundOptions&&(e.backgroundOptions=Object.assign({},e.backgroundOptions),e.backgroundOptions.gradient&&(e.backgroundOptions.gradient=m(e.backgroundOptions.gradient))),e}var y=r(192),b=r.n(y),x=function(t,e,r,i){return new(r||(r=Promise))((function(n,o){function s(t){try{h(i.next(t))}catch(t){o(t)}}function a(t){try{h(i.throw(t))}catch(t){o(t)}}function h(t){var e;t.done?n(t.value):(e=t.value,e instanceof r?e:new r((function(t){t(e)}))).then(s,a)}h((i=i.apply(t,e||[])).next())}))};class S{constructor(t){this._options=t?_(e(w,t)):w,this.update()}static _clearContainer(t){t&&(t.innerHTML=\"\")}_setupSvg(){if(!this._qr)return;const t=new f(this._options);this._svg=t.getElement(),this._svgDrawingPromise=t.drawQR(this._qr).then((()=>{var e;this._svg&&(null===(e=this._extension)||void 0===e||e.call(this,t.getElement(),this._options))}))}_setupCanvas(){var t;this._qr&&(this._canvas=document.createElement(\"canvas\"),this._canvas.width=this._options.width,this._canvas.height=this._options.height,this._setupSvg(),this._canvasDrawingPromise=null===(t=this._svgDrawingPromise)||void 0===t?void 0:t.then((()=>{if(!this._svg)return;const t=this._svg,e=(new XMLSerializer).serializeToString(t),r=\"data:image/svg+xml;base64,\"+btoa(e),i=new Image;return new Promise((t=>{i.onload=()=>{var e,r;null===(r=null===(e=this._canvas)||void 0===e?void 0:e.getContext(\"2d\"))||void 0===r||r.drawImage(i,0,0),t()},i.src=r}))})))}_getElement(t=\"png\"){return x(this,void 0,void 0,(function*(){if(!this._qr)throw\"QR code is empty\";return\"svg\"===t.toLowerCase()?(this._svg&&this._svgDrawingPromise||this._setupSvg(),yield this._svgDrawingPromise,this._svg):(this._canvas&&this._canvasDrawingPromise||this._setupCanvas(),yield this._canvasDrawingPromise,this._canvas)}))}update(t){S._clearContainer(this._container),this._options=t?_(e(this._options,t)):this._options,this._options.data&&(this._qr=b()(this._options.qrOptions.typeNumber,this._options.qrOptions.errorCorrectionLevel),this._qr.addData(this._options.data,this._options.qrOptions.mode||function(t){switch(!0){case/^[0-9]*$/.test(t):return\"Numeric\";case/^[0-9A-Z $%*+\\-./:]*$/.test(t):return\"Alphanumeric\";default:return\"Byte\"}}(this._options.data)),this._qr.make(),this._options.type===p?this._setupCanvas():this._setupSvg(),this.append(this._container))}append(t){if(t){if(\"function\"!=typeof t.appendChild)throw\"Container should be a single DOM node\";this._options.type===p?this._canvas&&t.appendChild(this._canvas):this._svg&&t.appendChild(this._svg),this._container=t}}applyExtension(t){if(!t)throw\"Extension function should be defined.\";this._extension=t,this.update()}deleteExtension(){this._extension=void 0,this.update()}getRawData(t=\"png\"){return x(this,void 0,void 0,(function*(){if(!this._qr)throw\"QR code is empty\";const e=yield this._getElement(t);if(!e)return null;if(\"svg\"===t.toLowerCase()){const t=(new XMLSerializer).serializeToString(e);return new Blob(['\\r\\n'+t],{type:\"image/svg+xml\"})}return new Promise((r=>e.toBlob(r,`image/${t}`,1)))}))}download(t){return x(this,void 0,void 0,(function*(){if(!this._qr)throw\"QR code is empty\";let e=\"png\",r=\"qr\";\"string\"==typeof t?(e=t,console.warn(\"Extension is deprecated as argument for 'download' method, please pass object { name: '...', extension: '...' } as argument\")):\"object\"==typeof t&&null!==t&&(t.name&&(r=t.name),t.extension&&(e=t.extension));const i=yield this._getElement(e);if(i)if(\"svg\"===e.toLowerCase()){let t=(new XMLSerializer).serializeToString(i);t='\\r\\n'+t,n(\"data:image/svg+xml;charset=utf-8,\"+encodeURIComponent(t),`${r}.svg`)}else n(i.toDataURL(`image/${e}`),`${r}.${e}`)}))}}const M=S})(),i.default})()}));\n//# sourceMappingURL=qr-code-styling.js.map","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\tid: moduleId,\n\t\tloaded: false,\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Flag the module as loaded\n\tmodule.loaded = true;\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n// expose the modules object (__webpack_modules__)\n__webpack_require__.m = __webpack_modules__;\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.f = {};\n// This file contains only the entry chunk.\n// The chunk loading function for additional chunks\n__webpack_require__.e = (chunkId) => {\n\treturn Promise.all(Object.keys(__webpack_require__.f).reduce((promises, key) => {\n\t\t__webpack_require__.f[key](chunkId, promises);\n\t\treturn promises;\n\t}, []));\n};","// This function allow to reference async chunks\n__webpack_require__.u = (chunkId) => {\n\t// return url for filenames based on template\n\treturn \"\" + chunkId + \".\" + {\"13\":\"c2828ad8a236049343ac\",\"71\":\"4998fc48600439daeb4d\",\"99\":\"a19f6cfb125132c4ae9e\",\"133\":\"4a391d2071acfc4ca6b0\",\"161\":\"e3dd8735bd9f827bebc6\",\"354\":\"4cc07bd62173f885831f\",\"382\":\"f977b0f032aa1cd3a3ee\",\"463\":\"61167f99e64c02fb46d6\",\"472\":\"38e2fa9338b8e031169b\",\"501\":\"8456a9386c15d5118c1f\",\"524\":\"c7cd23c07ec78a2d977e\",\"536\":\"51c4121ec6034fff4884\",\"548\":\"3bb36f6c7bb19731757e\",\"654\":\"5a866391dbb2ac6c1621\",\"726\":\"51116142313aac36525d\",\"742\":\"6db22cd0aa2002a03040\",\"745\":\"8d34ddd7e74f421eeeed\",\"752\":\"a61d6807ba5aa0ed04ae\",\"878\":\"ba2ac4194b79d543b70f\",\"915\":\"059c59865cc20f6071e9\",\"941\":\"1399f916762c873a48a2\",\"970\":\"e8597645f1a969d6225c\",\"993\":\"c7c8681e7135da951723\"}[chunkId] + \".js\";\n};","// This function allow to reference async chunks\n__webpack_require__.miniCssF = (chunkId) => {\n\t// return url for filenames based on template\n\treturn \"\" + chunkId + \".\" + {\"13\":\"c2828ad8a236049343ac\",\"71\":\"4998fc48600439daeb4d\",\"133\":\"4a391d2071acfc4ca6b0\",\"382\":\"f977b0f032aa1cd3a3ee\",\"472\":\"38e2fa9338b8e031169b\",\"654\":\"5a866391dbb2ac6c1621\",\"878\":\"ba2ac4194b79d543b70f\"}[chunkId] + \".css\";\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","__webpack_require__.nmd = (module) => {\n\tmodule.paths = [];\n\tif (!module.children) module.children = [];\n\treturn module;\n};","var scriptUrl;\nif (__webpack_require__.g.importScripts) scriptUrl = __webpack_require__.g.location + \"\";\nvar document = __webpack_require__.g.document;\nif (!scriptUrl && document) {\n\tif (document.currentScript)\n\t\tscriptUrl = document.currentScript.src\n\tif (!scriptUrl) {\n\t\tvar scripts = document.getElementsByTagName(\"script\");\n\t\tif(scripts.length) scriptUrl = scripts[scripts.length - 1].src\n\t}\n}\n// When supporting browsers where an automatic publicPath is not supported you must specify an output.publicPath manually via configuration\n// or pass an empty string (\"\") and set the __webpack_public_path__ variable from your code to use your own logic.\nif (!scriptUrl) throw new Error(\"Automatic publicPath is not supported in this browser\");\nscriptUrl = scriptUrl.replace(/#.*$/, \"\").replace(/\\?.*$/, \"\").replace(/\\/[^\\/]+$/, \"/\");\n__webpack_require__.p = scriptUrl;","__webpack_require__.b = document.baseURI || self.location.href;\n\n// object to store loaded and loading chunks\n// undefined = chunk not loaded, null = chunk preloaded/prefetched\n// [resolve, reject, Promise] = chunk loading, 0 = chunk loaded\nvar installedChunks = {\n\t179: 0\n};\n\n__webpack_require__.f.j = (chunkId, promises) => {\n\t\t// JSONP chunk loading for javascript\n\t\tvar installedChunkData = __webpack_require__.o(installedChunks, chunkId) ? installedChunks[chunkId] : undefined;\n\t\tif(installedChunkData !== 0) { // 0 means \"already installed\".\n\n\t\t\t// a Promise means \"currently loading\".\n\t\t\tif(installedChunkData) {\n\t\t\t\tpromises.push(installedChunkData[2]);\n\t\t\t} else {\n\t\t\t\tif(true) { // all chunks have JS\n\t\t\t\t\t// setup Promise in chunk cache\n\t\t\t\t\tvar promise = new Promise((resolve, reject) => (installedChunkData = installedChunks[chunkId] = [resolve, reject]));\n\t\t\t\t\tpromises.push(installedChunkData[2] = promise);\n\n\t\t\t\t\t// start chunk loading\n\t\t\t\t\tvar url = __webpack_require__.p + __webpack_require__.u(chunkId);\n\t\t\t\t\t// create error before stack unwound to get useful stacktrace later\n\t\t\t\t\tvar error = new Error();\n\t\t\t\t\tvar loadingEnded = (event) => {\n\t\t\t\t\t\tif(__webpack_require__.o(installedChunks, chunkId)) {\n\t\t\t\t\t\t\tinstalledChunkData = installedChunks[chunkId];\n\t\t\t\t\t\t\tif(installedChunkData !== 0) installedChunks[chunkId] = undefined;\n\t\t\t\t\t\t\tif(installedChunkData) {\n\t\t\t\t\t\t\t\tvar errorType = event && (event.type === 'load' ? 'missing' : event.type);\n\t\t\t\t\t\t\t\tvar realSrc = event && event.target && event.target.src;\n\t\t\t\t\t\t\t\terror.message = 'Loading chunk ' + chunkId + ' failed.\\n(' + errorType + ': ' + realSrc + ')';\n\t\t\t\t\t\t\t\terror.name = 'ChunkLoadError';\n\t\t\t\t\t\t\t\terror.type = errorType;\n\t\t\t\t\t\t\t\terror.request = realSrc;\n\t\t\t\t\t\t\t\tinstalledChunkData[1](error);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t\t__webpack_require__.l(url, loadingEnded, \"chunk-\" + chunkId, chunkId);\n\t\t\t\t} else installedChunks[chunkId] = 0;\n\t\t\t}\n\t\t}\n};\n\n// no prefetching\n\n// no preloaded\n\n// no HMR\n\n// no HMR manifest\n\n// no on chunks loaded\n\n// install a JSONP callback for chunk loading\nvar webpackJsonpCallback = (parentChunkLoadingFunction, data) => {\n\tvar [chunkIds, moreModules, runtime] = data;\n\t// add \"moreModules\" to the modules object,\n\t// then flag all \"chunkIds\" as loaded and fire callback\n\tvar moduleId, chunkId, i = 0;\n\tif(chunkIds.some((id) => (installedChunks[id] !== 0))) {\n\t\tfor(moduleId in moreModules) {\n\t\t\tif(__webpack_require__.o(moreModules, moduleId)) {\n\t\t\t\t__webpack_require__.m[moduleId] = moreModules[moduleId];\n\t\t\t}\n\t\t}\n\t\tif(runtime) var result = runtime(__webpack_require__);\n\t}\n\tif(parentChunkLoadingFunction) parentChunkLoadingFunction(data);\n\tfor(;i < chunkIds.length; i++) {\n\t\tchunkId = chunkIds[i];\n\t\tif(__webpack_require__.o(installedChunks, chunkId) && installedChunks[chunkId]) {\n\t\t\tinstalledChunks[chunkId][0]();\n\t\t}\n\t\tinstalledChunks[chunkId] = 0;\n\t}\n\n}\n\nvar chunkLoadingGlobal = self[\"webpackChunktelegram_t\"] = self[\"webpackChunktelegram_t\"] || [];\nchunkLoadingGlobal.forEach(webpackJsonpCallback.bind(null, 0));\nchunkLoadingGlobal.push = webpackJsonpCallback.bind(null, chunkLoadingGlobal.push.bind(chunkLoadingGlobal));","import { DEBUG, DEBUG_MORE } from '../config';\nimport { getActions } from '../global';\nimport { IS_ANDROID, IS_IOS, IS_SERVICE_WORKER_SUPPORTED } from './environment';\nimport { notifyClientReady, playNotifySoundDebounced } from './notifications';\n\ntype WorkerAction = {\n type: string;\n payload: Record;\n};\n\nfunction handleWorkerMessage(e: MessageEvent) {\n const action: WorkerAction = e.data;\n if (DEBUG_MORE) {\n // eslint-disable-next-line no-console\n console.log('[SW] Message from worker', action);\n }\n if (!action.type) return;\n const dispatch = getActions();\n const payload = action.payload;\n switch (action.type) {\n case 'focusMessage':\n if (dispatch.focusMessage) {\n dispatch.focusMessage(payload);\n }\n if (dispatch.startActiveReaction && payload.reaction) {\n dispatch.startActiveReaction({\n messageId: payload.messageId,\n reaction: payload.reaction,\n });\n }\n break;\n case 'playNotificationSound':\n playNotifySoundDebounced(action.payload.id);\n break;\n }\n}\n\nfunction subscribeToWorker() {\n navigator.serviceWorker.removeEventListener('message', handleWorkerMessage);\n navigator.serviceWorker.addEventListener('message', handleWorkerMessage);\n // Notify web worker that client is ready to receive messages\n notifyClientReady();\n}\n\nif (IS_SERVICE_WORKER_SUPPORTED) {\n window.addEventListener('load', async () => {\n try {\n if (!navigator.serviceWorker.controller) {\n const registrations = await navigator.serviceWorker.getRegistrations();\n if (registrations.length) {\n if (DEBUG) {\n // eslint-disable-next-line no-console\n console.log('[SW] Hard reload detected, re-enabling Service Worker');\n }\n await Promise.all(registrations.map((r) => r.unregister()));\n }\n }\n\n await navigator.serviceWorker.register(new URL('../serviceWorker.ts', import.meta.url));\n\n if (DEBUG) {\n // eslint-disable-next-line no-console\n console.log('[SW] ServiceWorker registered');\n }\n\n await navigator.serviceWorker.ready;\n\n if (navigator.serviceWorker.controller) {\n if (DEBUG) {\n // eslint-disable-next-line no-console\n console.log('[SW] ServiceWorker ready');\n }\n subscribeToWorker();\n } else {\n if (DEBUG) {\n // eslint-disable-next-line no-console\n console.error('[SW] ServiceWorker not available');\n }\n\n if (!IS_IOS && !IS_ANDROID) {\n getActions().showDialog({ data: { message: 'SERVICE_WORKER_DISABLED', hasErrorKey: true } });\n }\n }\n } catch (err) {\n if (DEBUG) {\n // eslint-disable-next-line no-console\n console.error('[SW] ServiceWorker registration failed: ', err);\n }\n }\n });\n window.addEventListener('focus', async () => {\n await navigator.serviceWorker.ready;\n subscribeToWorker();\n });\n}\n","import { GlobalState } from './types';\nimport { NewChatMembersProgress } from '../types';\n\nimport {\n ANIMATION_LEVEL_DEFAULT, DARK_THEME_PATTERN_COLOR, DEFAULT_MESSAGE_TEXT_SIZE_PX, DEFAULT_PATTERN_COLOR,\n DEFAULT_PLAYBACK_RATE,\n DEFAULT_VOLUME,\n IOS_DEFAULT_MESSAGE_TEXT_SIZE_PX, MACOS_DEFAULT_MESSAGE_TEXT_SIZE_PX,\n} from '../config';\nimport { IS_IOS, IS_MAC_OS } from '../util/environment';\n\nexport const INITIAL_STATE: GlobalState = {\n isLeftColumnShown: true,\n isChatInfoShown: false,\n newChatMembersProgress: NewChatMembersProgress.Closed,\n uiReadyState: 0,\n serverTimeOffset: 0,\n\n authRememberMe: true,\n countryList: {\n phoneCodes: [],\n general: [],\n },\n\n blocked: {\n ids: [],\n totalCount: 0,\n },\n\n users: {\n byId: {},\n statusesById: {},\n },\n\n chats: {\n listIds: {},\n isFullyLoaded: {},\n orderedPinnedIds: {},\n totalCount: {},\n byId: {},\n },\n\n messages: {\n byChatId: {},\n messageLists: [],\n sponsoredByChatId: {},\n },\n\n groupCalls: {\n byId: {},\n },\n\n scheduledMessages: {\n byChatId: {},\n },\n\n chatFolders: {\n byId: {},\n activeChatFolder: 0,\n },\n\n fileUploads: {\n byMessageLocalId: {},\n },\n\n recentEmojis: ['grinning', 'kissing_heart', 'christmas_tree', 'brain', 'trophy'],\n\n stickers: {\n setsById: {},\n added: {},\n recent: {\n stickers: [],\n },\n favorite: {\n stickers: [],\n },\n greeting: {\n stickers: [],\n },\n featured: {\n setIds: [],\n },\n search: {},\n forEmoji: {},\n },\n\n emojiKeywords: {},\n\n gifs: {\n saved: {},\n search: {},\n },\n\n inlineBots: {\n isLoading: false,\n byUsername: {},\n },\n\n globalSearch: {},\n\n userSearch: {},\n\n localTextSearch: {\n byChatThreadKey: {},\n },\n\n localMediaSearch: {\n byChatId: {},\n },\n\n management: {\n byChatId: {},\n },\n\n topPeers: {},\n\n topInlineBots: {},\n\n mediaViewer: {\n volume: DEFAULT_VOLUME,\n playbackRate: DEFAULT_PLAYBACK_RATE,\n isMuted: false,\n },\n\n audioPlayer: {\n volume: DEFAULT_VOLUME,\n playbackRate: DEFAULT_PLAYBACK_RATE,\n isMuted: false,\n },\n\n forwardMessages: {},\n\n pollResults: {},\n\n payment: {},\n\n notifications: [],\n\n dialogs: [],\n\n activeSessions: [],\n\n settings: {\n byKey: {\n theme: 'light',\n shouldUseSystemTheme: true,\n messageTextSize: IS_IOS\n ? IOS_DEFAULT_MESSAGE_TEXT_SIZE_PX\n : (IS_MAC_OS ? MACOS_DEFAULT_MESSAGE_TEXT_SIZE_PX : DEFAULT_MESSAGE_TEXT_SIZE_PX),\n animationLevel: ANIMATION_LEVEL_DEFAULT,\n messageSendKeyCombo: 'enter',\n canAutoLoadPhotoFromContacts: true,\n canAutoLoadPhotoInPrivateChats: true,\n canAutoLoadPhotoInGroups: true,\n canAutoLoadPhotoInChannels: true,\n canAutoLoadVideoFromContacts: true,\n canAutoLoadVideoInPrivateChats: true,\n canAutoLoadVideoInGroups: true,\n canAutoLoadVideoInChannels: true,\n canAutoLoadFileFromContacts: false,\n canAutoLoadFileInPrivateChats: false,\n canAutoLoadFileInGroups: false,\n canAutoLoadFileInChannels: false,\n autoLoadFileMaxSizeMb: 10,\n hasWebNotifications: true,\n hasPushNotifications: true,\n notificationSoundVolume: 5,\n canAutoPlayGifs: true,\n canAutoPlayVideos: true,\n shouldSuggestStickers: true,\n shouldLoopStickers: true,\n language: 'en',\n timeFormat: '24h',\n wasTimeFormatSetManually: false,\n isConnectionStatusMinimized: true,\n },\n themes: {\n light: {\n isBlurred: true,\n patternColor: DEFAULT_PATTERN_COLOR,\n },\n dark: {\n isBlurred: true,\n patternColor: DARK_THEME_PATTERN_COLOR,\n },\n },\n privacy: {},\n notifyExceptions: {},\n },\n\n twoFaSettings: {},\n activeReactions: {},\n\n shouldShowContextMenuHint: true,\n\n activeDownloads: {\n byChatId: {},\n },\n\n serviceNotifications: [],\n\n statistics: {\n byChatId: {},\n },\n};\n","import { addCallback, removeCallback } from '../lib/teact/teactn';\n\nimport { addActionHandler, getGlobal } from './index';\n\nimport { GlobalState } from './types';\nimport { MAIN_THREAD_ID } from '../api/types';\n\nimport { onBeforeUnload, onIdle, throttle } from '../util/schedulers';\nimport {\n DEBUG,\n GLOBAL_STATE_CACHE_DISABLED,\n GLOBAL_STATE_CACHE_KEY,\n GLOBAL_STATE_CACHE_USER_LIST_LIMIT,\n GLOBAL_STATE_CACHE_CHAT_LIST_LIMIT,\n GLOBAL_STATE_CACHE_CHATS_WITH_MESSAGES_LIMIT,\n MIN_SCREEN_WIDTH_FOR_STATIC_RIGHT_COLUMN,\n DEFAULT_VOLUME,\n DEFAULT_PLAYBACK_RATE,\n ALL_FOLDER_ID,\n ARCHIVED_FOLDER_ID,\n} from '../config';\nimport { IS_SINGLE_COLUMN_LAYOUT } from '../util/environment';\nimport { isHeavyAnimating } from '../hooks/useHeavyAnimationCheck';\nimport { pick, unique } from '../util/iteratees';\nimport {\n selectCurrentChat,\n selectCurrentMessageList,\n selectVisibleUsers,\n} from './selectors';\nimport { hasStoredSession } from '../util/sessions';\nimport { INITIAL_STATE } from './initialState';\nimport { parseLocationHash } from '../util/routing';\nimport { isUserId } from './helpers';\nimport { getOrderedIds } from '../util/folderManager';\n\nconst UPDATE_THROTTLE = 5000;\n\nconst updateCacheThrottled = throttle(() => onIdle(updateCache), UPDATE_THROTTLE, false);\n\nlet isCaching = false;\nlet unsubscribeFromBeforeUnload: NoneToVoidFunction | undefined;\n\nexport function initCache() {\n if (GLOBAL_STATE_CACHE_DISABLED) {\n return;\n }\n\n addActionHandler('saveSession', () => {\n if (isCaching) {\n return;\n }\n\n setupCaching();\n });\n\n addActionHandler('reset', () => {\n localStorage.removeItem(GLOBAL_STATE_CACHE_KEY);\n\n if (!isCaching) {\n return;\n }\n\n clearCaching();\n });\n}\n\nexport function loadCache(initialState: GlobalState): GlobalState | undefined {\n if (GLOBAL_STATE_CACHE_DISABLED) {\n return undefined;\n }\n\n if (hasStoredSession(true)) {\n setupCaching();\n\n return readCache(initialState);\n } else {\n clearCaching();\n\n return undefined;\n }\n}\n\nfunction setupCaching() {\n isCaching = true;\n unsubscribeFromBeforeUnload = onBeforeUnload(updateCache, true);\n window.addEventListener('blur', updateCache);\n addCallback(updateCacheThrottled);\n}\n\nfunction clearCaching() {\n isCaching = false;\n removeCallback(updateCacheThrottled);\n window.removeEventListener('blur', updateCache);\n if (unsubscribeFromBeforeUnload) {\n unsubscribeFromBeforeUnload();\n }\n}\n\nfunction readCache(initialState: GlobalState): GlobalState {\n if (DEBUG) {\n // eslint-disable-next-line no-console\n console.time('global-state-cache-read');\n }\n\n const json = localStorage.getItem(GLOBAL_STATE_CACHE_KEY);\n const cached = json ? JSON.parse(json) as GlobalState : undefined;\n\n if (DEBUG) {\n // eslint-disable-next-line no-console\n console.timeEnd('global-state-cache-read');\n }\n\n if (cached) {\n migrateCache(cached, initialState);\n }\n\n const newState = {\n ...initialState,\n ...cached,\n };\n\n const parsedMessageList = !IS_SINGLE_COLUMN_LAYOUT ? parseLocationHash() : undefined;\n\n return {\n ...newState,\n messages: {\n ...newState.messages,\n messageLists: parsedMessageList ? [parsedMessageList] : [],\n },\n };\n}\n\nfunction migrateCache(cached: GlobalState, initialState: GlobalState) {\n // Migrate from legacy setting names\n if ('shouldAutoDownloadMediaFromContacts' in cached.settings.byKey) {\n const {\n shouldAutoDownloadMediaFromContacts,\n shouldAutoDownloadMediaInPrivateChats,\n shouldAutoDownloadMediaInGroups,\n shouldAutoDownloadMediaInChannels,\n shouldAutoPlayVideos,\n shouldAutoPlayGifs,\n ...rest\n } = cached.settings.byKey;\n\n cached.settings.byKey = {\n ...rest,\n canAutoLoadPhotoFromContacts: shouldAutoDownloadMediaFromContacts,\n canAutoLoadVideoFromContacts: shouldAutoDownloadMediaFromContacts,\n canAutoLoadPhotoInPrivateChats: shouldAutoDownloadMediaInPrivateChats,\n canAutoLoadVideoInPrivateChats: shouldAutoDownloadMediaInPrivateChats,\n canAutoLoadPhotoInGroups: shouldAutoDownloadMediaInGroups,\n canAutoLoadVideoInGroups: shouldAutoDownloadMediaInGroups,\n canAutoLoadPhotoInChannels: shouldAutoDownloadMediaInChannels,\n canAutoLoadVideoInChannels: shouldAutoDownloadMediaInChannels,\n canAutoPlayVideos: shouldAutoPlayVideos,\n canAutoPlayGifs: shouldAutoPlayGifs,\n };\n }\n\n // Pre-fill settings with defaults\n cached.settings.byKey = {\n ...initialState.settings.byKey,\n ...cached.settings.byKey,\n };\n\n cached.settings.themes = {\n ...initialState.settings.themes,\n ...cached.settings.themes,\n };\n\n cached.chatFolders = {\n ...initialState.chatFolders,\n ...cached.chatFolders,\n };\n\n if (!cached.stickers.greeting) {\n cached.stickers.greeting = initialState.stickers.greeting;\n }\n\n if (!cached.activeDownloads) {\n cached.activeDownloads = {\n byChatId: {},\n };\n }\n\n if (!cached.serviceNotifications) {\n cached.serviceNotifications = [];\n }\n\n if (cached.audioPlayer.volume === undefined) {\n cached.audioPlayer.volume = DEFAULT_VOLUME;\n }\n\n if (cached.audioPlayer.playbackRate === undefined) {\n cached.audioPlayer.playbackRate = DEFAULT_PLAYBACK_RATE;\n }\n\n if (cached.mediaViewer.volume === undefined) {\n cached.mediaViewer.volume = DEFAULT_VOLUME;\n }\n\n if (cached.mediaViewer.playbackRate === undefined) {\n cached.mediaViewer.playbackRate = DEFAULT_PLAYBACK_RATE;\n }\n\n if (!cached.groupCalls) {\n cached.groupCalls = initialState.groupCalls;\n }\n\n if (!cached.users.statusesById) {\n cached.users.statusesById = {};\n }\n\n if (!cached.messages.sponsoredByChatId) {\n cached.messages.sponsoredByChatId = {};\n }\n\n if (!cached.activeReactions) {\n cached.activeReactions = {};\n }\n}\n\nfunction updateCache() {\n if (!isCaching || isHeavyAnimating()) {\n return;\n }\n\n const global = getGlobal();\n\n if (global.isLoggingOut) {\n return;\n }\n\n const reducedGlobal: GlobalState = {\n ...INITIAL_STATE,\n ...pick(global, [\n 'authState',\n 'authPhoneNumber',\n 'authRememberMe',\n 'authNearestCountry',\n 'currentUserId',\n 'contactList',\n 'topPeers',\n 'topInlineBots',\n 'recentEmojis',\n 'push',\n 'shouldShowContextMenuHint',\n 'leftColumnWidth',\n 'serviceNotifications',\n ]),\n audioPlayer: {\n volume: global.audioPlayer.volume,\n playbackRate: global.audioPlayer.playbackRate,\n isMuted: global.audioPlayer.isMuted,\n },\n mediaViewer: {\n volume: global.mediaViewer.volume,\n playbackRate: global.mediaViewer.playbackRate,\n isMuted: global.mediaViewer.isMuted,\n },\n isChatInfoShown: reduceShowChatInfo(global),\n users: reduceUsers(global),\n chats: reduceChats(global),\n messages: reduceMessages(global),\n globalSearch: {\n recentlyFoundChatIds: global.globalSearch.recentlyFoundChatIds,\n },\n settings: reduceSettings(global),\n chatFolders: reduceChatFolders(global),\n groupCalls: reduceGroupCalls(global),\n availableReactions: reduceAvailableReactions(global),\n };\n\n const json = JSON.stringify(reducedGlobal);\n localStorage.setItem(GLOBAL_STATE_CACHE_KEY, json);\n}\n\nfunction reduceShowChatInfo(global: GlobalState): boolean {\n return window.innerWidth > MIN_SCREEN_WIDTH_FOR_STATIC_RIGHT_COLUMN\n ? global.isChatInfoShown\n : false;\n}\n\nfunction reduceUsers(global: GlobalState): GlobalState['users'] {\n const { users: { byId, statusesById }, currentUserId } = global;\n const { chatId: currentChatId } = selectCurrentMessageList(global) || {};\n const visibleUserIds = selectVisibleUsers(global)?.map(({ id }) => id);\n\n const idsToSave = unique([\n ...currentUserId ? [currentUserId] : [],\n ...currentChatId && isUserId(currentChatId) ? [currentChatId] : [],\n ...visibleUserIds || [],\n ...global.topPeers.userIds || [],\n ...getOrderedIds(ALL_FOLDER_ID)?.filter(isUserId) || [],\n ...getOrderedIds(ARCHIVED_FOLDER_ID)?.filter(isUserId) || [],\n ...global.contactList?.userIds || [],\n ...global.globalSearch.recentlyFoundChatIds?.filter(isUserId) || [],\n ...Object.keys(byId),\n ]).slice(0, GLOBAL_STATE_CACHE_USER_LIST_LIMIT);\n\n return {\n byId: pick(byId, idsToSave),\n statusesById: pick(statusesById, idsToSave),\n };\n}\n\nfunction reduceChats(global: GlobalState): GlobalState['chats'] {\n const { chats: { byId }, currentUserId } = global;\n const currentChat = selectCurrentChat(global);\n const idsToSave = unique([\n ...currentUserId ? [currentUserId] : [],\n ...currentChat ? [currentChat.id] : [],\n ...getOrderedIds(ALL_FOLDER_ID) || [],\n ...getOrderedIds(ARCHIVED_FOLDER_ID) || [],\n ...global.globalSearch.recentlyFoundChatIds || [],\n ...Object.keys(byId),\n ]).slice(0, GLOBAL_STATE_CACHE_CHAT_LIST_LIMIT);\n\n return {\n ...global.chats,\n isFullyLoaded: {},\n byId: pick(global.chats.byId, idsToSave),\n };\n}\n\nfunction reduceMessages(global: GlobalState): GlobalState['messages'] {\n const { currentUserId } = global;\n const byChatId: GlobalState['messages']['byChatId'] = {};\n const { chatId: currentChatId } = selectCurrentMessageList(global) || {};\n const chatIdsToSave = [\n ...currentChatId ? [currentChatId] : [],\n ...currentUserId ? [currentUserId] : [],\n ...getOrderedIds(ALL_FOLDER_ID)?.slice(0, GLOBAL_STATE_CACHE_CHATS_WITH_MESSAGES_LIMIT) || [],\n ];\n\n chatIdsToSave.forEach((chatId) => {\n const current = global.messages.byChatId[chatId];\n if (!current) {\n return;\n }\n\n const mainThread = current.threadsById[MAIN_THREAD_ID];\n if (!mainThread || !mainThread.viewportIds) {\n return;\n }\n\n byChatId[chatId] = {\n byId: pick(current.byId, mainThread.viewportIds),\n threadsById: {\n [MAIN_THREAD_ID]: mainThread,\n },\n };\n });\n\n return {\n byChatId,\n messageLists: [],\n sponsoredByChatId: {},\n };\n}\n\nfunction reduceSettings(global: GlobalState): GlobalState['settings'] {\n const { byKey, themes } = global.settings;\n\n return {\n byKey,\n themes,\n privacy: {},\n notifyExceptions: {},\n };\n}\n\nfunction reduceChatFolders(global: GlobalState): GlobalState['chatFolders'] {\n return {\n ...global.chatFolders,\n activeChatFolder: 0,\n };\n}\n\nfunction reduceGroupCalls(global: GlobalState): GlobalState['groupCalls'] {\n return {\n ...global.groupCalls,\n byId: {},\n activeGroupCallId: undefined,\n isGroupCallPanelHidden: undefined,\n isFallbackConfirmOpen: undefined,\n };\n}\n\nfunction reduceAvailableReactions(global: GlobalState): GlobalState['availableReactions'] {\n return global.availableReactions\n ?.map((r) => pick(r, ['reaction', 'staticIcon', 'title', 'isInactive']));\n}\n","import { addActionHandler } from './index';\n\nimport { INITIAL_STATE } from './initialState';\nimport { initCache, loadCache } from './cache';\nimport { cloneDeep } from '../util/iteratees';\n\ninitCache();\n\naddActionHandler('init', () => {\n const initial = cloneDeep(INITIAL_STATE);\n return loadCache(initial) || initial;\n});\n","const STORAGE_KEY = 'tt-active-tab';\nconst INTERVAL = 2000;\n\nconst tabKey = String(Date.now() + Math.random());\n\nlocalStorage.setItem(STORAGE_KEY, tabKey);\n\nlet callback: NoneToVoidFunction;\n\nconst interval = window.setInterval(() => {\n if (callback && localStorage.getItem(STORAGE_KEY) !== tabKey) {\n callback();\n clearInterval(interval);\n }\n}, INTERVAL);\n\nexport function addActiveTabChangeListener(_callback: NoneToVoidFunction) {\n callback = _callback;\n}\n","const SITE_FONTS = ['400 1em Roboto', '500 1em Roboto'];\n\nexport default function preloadFonts() {\n if ('fonts' in document) {\n return Promise.all(SITE_FONTS.map((font) => document.fonts.load(font)));\n }\n\n return undefined;\n}\n","import React, { FC, useEffect } from '../../lib/teact/teact';\nimport { getActions, getGlobal, withGlobal } from '../../global';\n\nimport { ApiMediaFormat } from '../../api/types';\nimport { GlobalState } from '../../global/types';\n\nimport { getChatAvatarHash } from '../../global/helpers/chats'; // Direct import for better module splitting\nimport useFlag from '../../hooks/useFlag';\nimport useShowTransition from '../../hooks/useShowTransition';\nimport { pause } from '../../util/schedulers';\nimport { preloadImage } from '../../util/files';\nimport preloadFonts from '../../util/fonts';\nimport * as mediaLoader from '../../util/mediaLoader';\nimport { Bundles, loadModule } from '../../util/moduleLoader';\nimport buildClassName from '../../util/buildClassName';\n\nimport './UiLoader.scss';\n\nimport telegramLogoPath from '../../assets/telegram-logo.svg';\nimport reactionThumbsPath from '../../assets/reaction-thumbs.png';\nimport monkeyPath from '../../assets/monkey.svg';\nimport { selectIsRightColumnShown, selectTheme } from '../../global/selectors';\n\ntype OwnProps = {\n page: 'main' | 'authCode' | 'authPassword' | 'authPhoneNumber' | 'authQrCode';\n children: React.ReactNode;\n};\n\ntype StateProps =\n Pick\n & {\n hasCustomBackground?: boolean;\n hasCustomBackgroundColor: boolean;\n isRightColumnShown?: boolean;\n leftColumnWidth?: number;\n };\n\nconst MAX_PRELOAD_DELAY = 700;\nconst SECOND_STATE_DELAY = 1000;\nconst AVATARS_TO_PRELOAD = 10;\n\nfunction preloadAvatars() {\n const { listIds, byId } = getGlobal().chats;\n if (!listIds.active) {\n return undefined;\n }\n\n return Promise.all(listIds.active.slice(0, AVATARS_TO_PRELOAD).map((chatId) => {\n const chat = byId[chatId];\n if (!chat) {\n return undefined;\n }\n\n const avatarHash = getChatAvatarHash(chat);\n if (!avatarHash) {\n return undefined;\n }\n\n return mediaLoader.fetch(avatarHash, ApiMediaFormat.BlobUrl);\n }));\n}\n\nconst preloadTasks = {\n main: () => Promise.all([\n loadModule(Bundles.Main, 'Main')\n .then(preloadFonts),\n preloadAvatars(),\n preloadImage(reactionThumbsPath),\n ]),\n authPhoneNumber: () => Promise.all([\n preloadFonts(),\n preloadImage(telegramLogoPath),\n ]),\n authCode: () => preloadImage(monkeyPath),\n authPassword: () => preloadImage(monkeyPath),\n authQrCode: preloadFonts,\n};\n\nconst UiLoader: FC = ({\n page,\n children,\n hasCustomBackground,\n hasCustomBackgroundColor,\n isRightColumnShown,\n shouldSkipHistoryAnimations,\n leftColumnWidth,\n}) => {\n const { setIsUiReady } = getActions();\n\n const [isReady, markReady] = useFlag();\n const {\n shouldRender: shouldRenderMask, transitionClassNames,\n } = useShowTransition(!isReady, undefined, true);\n\n useEffect(() => {\n let timeout: number | undefined;\n\n const safePreload = async () => {\n try {\n await preloadTasks[page]();\n } catch (err) {\n // Do nothing\n }\n };\n\n Promise.race([\n pause(MAX_PRELOAD_DELAY),\n safePreload(),\n ]).then(() => {\n markReady();\n setIsUiReady({ uiReadyState: 1 });\n\n timeout = window.setTimeout(() => {\n setIsUiReady({ uiReadyState: 2 });\n }, SECOND_STATE_DELAY);\n });\n\n return () => {\n if (timeout) {\n clearTimeout(timeout);\n timeout = undefined;\n }\n\n setIsUiReady({ uiReadyState: 0 });\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n return (\n

\n {children}\n {shouldRenderMask && !shouldSkipHistoryAnimations && (\n
\n {page === 'main' ? (\n <>\n \n \n {isRightColumnShown &&
}\n \n ) : (\n
\n )}\n
\n )}\n
\n );\n};\n\nexport default withGlobal(\n (global): StateProps => {\n const theme = selectTheme(global);\n const { background, backgroundColor } = global.settings.themes[theme] || {};\n\n return {\n shouldSkipHistoryAnimations: global.shouldSkipHistoryAnimations,\n uiReadyState: global.uiReadyState,\n hasCustomBackground: Boolean(background),\n hasCustomBackgroundColor: Boolean(backgroundColor),\n isRightColumnShown: selectIsRightColumnShown(global),\n leftColumnWidth: global.leftColumnWidth,\n };\n },\n)(UiLoader);\n","import * as langProvider from '../util/langProvider';\nimport { useState } from '../lib/teact/teact';\n\nconst useLangString = (langCode: string | undefined, key: string): string | undefined => {\n const [translation, setTranslation] = useState();\n\n if (langCode) {\n langProvider\n .getTranslationForLangString(langCode, key)\n .then(setTranslation);\n }\n\n return translation;\n};\n\nexport default useLangString;\n","import { LangCode } from '../../../types';\n\nexport function getSuggestedLanguage() {\n let suggestedLanguage = navigator.language;\n\n if (suggestedLanguage && suggestedLanguage !== 'pt-br') {\n suggestedLanguage = suggestedLanguage.substr(0, 2);\n }\n\n return suggestedLanguage as LangCode;\n}\n","import React, {\n FC, useState, memo, useCallback, useRef,\n} from '../../lib/teact/teact';\nimport { withGlobal } from '../../global';\n\nimport { ApiCountryCode } from '../../api/types';\n\nimport { ANIMATION_END_DELAY } from '../../config';\nimport { prepareSearchWordsForNeedle } from '../../util/searchWords';\nimport buildClassName from '../../util/buildClassName';\nimport renderText from '../common/helpers/renderText';\nimport useLang from '../../hooks/useLang';\nimport { isoToEmoji } from '../../util/emoji';\nimport useOnChange from '../../hooks/useOnChange';\n\nimport DropdownMenu from '../ui/DropdownMenu';\nimport MenuItem from '../ui/MenuItem';\nimport Spinner from '../ui/Spinner';\n\nimport './CountryCodeInput.scss';\n\ntype StateProps = {\n phoneCodeList: ApiCountryCode[];\n};\n\ntype OwnProps = {\n id: string;\n value?: ApiCountryCode;\n isLoading?: boolean;\n onChange: (value: ApiCountryCode) => void;\n};\n\nconst MENU_HIDING_DURATION = 200 + ANIMATION_END_DELAY;\nconst SELECT_TIMEOUT = 50;\n\nconst CountryCodeInput: FC = ({\n id,\n value,\n isLoading,\n onChange,\n phoneCodeList,\n}) => {\n const lang = useLang();\n // eslint-disable-next-line no-null/no-null\n const inputRef = useRef(null);\n\n const [filter, setFilter] = useState();\n const [filteredList, setFilteredList] = useState([]);\n\n const updateFilter = useCallback((filterValue?: string) => {\n setFilter(filterValue);\n setFilteredList(getFilteredList(phoneCodeList, filterValue));\n }, [phoneCodeList]);\n\n useOnChange(([prevPhoneCodeList]) => {\n if (prevPhoneCodeList?.length === 0 && phoneCodeList.length > 0) {\n updateFilter(filter);\n }\n }, [phoneCodeList, updateFilter]);\n\n const handleChange = useCallback((country: ApiCountryCode) => {\n onChange(country);\n\n setTimeout(() => updateFilter(undefined), MENU_HIDING_DURATION);\n }, [onChange, updateFilter]);\n\n const handleInput = useCallback((e: React.FormEvent) => {\n updateFilter(e.currentTarget.value);\n }, [updateFilter]);\n\n const handleInputKeyDown = useCallback((e: React.KeyboardEvent) => {\n if (e.keyCode !== 8) {\n return;\n }\n\n const target = e.currentTarget;\n if (value && filter === undefined) {\n target.value = '';\n }\n\n updateFilter(target.value);\n }, [filter, updateFilter, value]);\n\n const CodeInput: FC<{ onTrigger: () => void; isOpen?: boolean }> = useCallback(({ onTrigger, isOpen }) => {\n const handleTrigger = () => {\n if (isOpen) {\n return;\n }\n\n setTimeout(() => {\n inputRef.current!.select();\n }, SELECT_TIMEOUT);\n\n onTrigger();\n\n const formEl = document.getElementById('auth-phone-number-form')!;\n formEl.scrollTo({ top: formEl.scrollHeight, behavior: 'smooth' });\n };\n\n const handleCodeInput = (e: React.FormEvent) => {\n handleInput(e);\n handleTrigger();\n };\n\n const inputValue = filter ?? (value?.name || value?.defaultName || '');\n\n return (\n
\n \n \n {isLoading ? (\n \n ) : (\n \n )}\n
\n );\n }, [filter, handleInput, handleInputKeyDown, id, isLoading, lang, value]);\n\n return (\n \n {filteredList\n .map((country: ApiCountryCode) => (\n handleChange(country)}\n >\n {renderText(isoToEmoji(country.iso2), ['hq_emoji'])}\n {country.name || country.defaultName}\n +{country.countryCode}\n \n ))}\n {!filteredList.length && (\n \n {lang('lng_country_none')}\n \n )}\n \n );\n};\n\nfunction getFilteredList(countryList: ApiCountryCode[], filter = ''): ApiCountryCode[] {\n if (!filter.length) {\n return countryList;\n }\n\n const searchWords = prepareSearchWordsForNeedle(filter);\n\n return countryList.filter((country) => (\n searchWords(country.defaultName) || (country.name && searchWords(country.name))\n ));\n}\n\nexport default memo(withGlobal(\n (global): StateProps => {\n const { countryList: { phoneCodes: phoneCodeList } } = global;\n return {\n phoneCodeList,\n };\n },\n)(CountryCodeInput));\n","import { ChangeEvent } from 'react';\n\nimport monkeyPath from '../../assets/monkey.svg';\n\nimport React, {\n FC, memo, useCallback, useEffect, useLayoutEffect, useRef, useState,\n} from '../../lib/teact/teact';\nimport { getActions, withGlobal } from '../../global';\n\nimport { GlobalState } from '../../global/types';\nimport { LangCode } from '../../types';\nimport { ApiCountryCode } from '../../api/types';\n\nimport { IS_SAFARI, IS_TOUCH_ENV } from '../../util/environment';\nimport { preloadImage } from '../../util/files';\nimport preloadFonts from '../../util/fonts';\nimport { pick } from '../../util/iteratees';\nimport { formatPhoneNumber, getCountryCodesByIso, getCountryFromPhoneNumber } from '../../util/phoneNumber';\nimport { setLanguage } from '../../util/langProvider';\nimport useLang from '../../hooks/useLang';\nimport useFlag from '../../hooks/useFlag';\nimport useLangString from '../../hooks/useLangString';\nimport { getSuggestedLanguage } from './helpers/getSuggestedLanguage';\n\nimport Button from '../ui/Button';\nimport Checkbox from '../ui/Checkbox';\nimport InputText from '../ui/InputText';\nimport Loading from '../ui/Loading';\nimport CountryCodeInput from './CountryCodeInput';\n\ntype StateProps = Pick & {\n language?: LangCode;\n phoneCodeList: ApiCountryCode[];\n};\n\nconst MIN_NUMBER_LENGTH = 7;\n\nlet isPreloadInitiated = false;\n\nconst AuthPhoneNumber: FC = ({\n connectionState,\n authState,\n authPhoneNumber,\n authIsLoading,\n authIsLoadingQrCode,\n authError,\n authRememberMe,\n authNearestCountry,\n phoneCodeList,\n language,\n}) => {\n const {\n setAuthPhoneNumber,\n setAuthRememberMe,\n loadNearestCountry,\n loadCountryList,\n clearAuthError,\n goToAuthQrCode,\n setSettingOption,\n } = getActions();\n\n const lang = useLang();\n // eslint-disable-next-line no-null/no-null\n const inputRef = useRef(null);\n const suggestedLanguage = getSuggestedLanguage();\n\n const continueText = useLangString(suggestedLanguage, 'ContinueOnThisLanguage');\n const [country, setCountry] = useState();\n const [phoneNumber, setPhoneNumber] = useState();\n const [isTouched, setIsTouched] = useState(false);\n const [lastSelection, setLastSelection] = useState<[number, number] | undefined>();\n const [isLoading, markIsLoading, unmarkIsLoading] = useFlag();\n\n const fullNumber = country ? `+${country.countryCode} ${phoneNumber || ''}` : phoneNumber;\n const canSubmit = fullNumber && fullNumber.replace(/[^\\d]+/g, '').length >= MIN_NUMBER_LENGTH;\n\n useEffect(() => {\n if (!IS_TOUCH_ENV) {\n inputRef.current!.focus();\n }\n }, [country]);\n\n useEffect(() => {\n if (connectionState === 'connectionStateReady' && !authNearestCountry) {\n loadNearestCountry();\n }\n }, [connectionState, authNearestCountry, loadNearestCountry]);\n\n useEffect(() => {\n if (connectionState === 'connectionStateReady') {\n loadCountryList({ langCode: language });\n }\n }, [connectionState, language, loadCountryList]);\n\n useEffect(() => {\n if (authNearestCountry && phoneCodeList && !country && !isTouched) {\n setCountry(getCountryCodesByIso(phoneCodeList, authNearestCountry)[0]);\n }\n }, [country, authNearestCountry, isTouched, phoneCodeList]);\n\n const parseFullNumber = useCallback((newFullNumber: string) => {\n if (!newFullNumber.length) {\n setPhoneNumber('');\n }\n\n const suggestedCountry = phoneCodeList && getCountryFromPhoneNumber(phoneCodeList, newFullNumber);\n\n // Any phone numbers should be allowed, in some cases ignoring formatting\n const selectedCountry = !country\n || (suggestedCountry && suggestedCountry.iso2 !== country.iso2)\n || (!suggestedCountry && newFullNumber.length)\n ? suggestedCountry\n : country;\n\n if (!country || !selectedCountry || (selectedCountry && selectedCountry.iso2 !== country.iso2)) {\n setCountry(selectedCountry);\n }\n setPhoneNumber(formatPhoneNumber(newFullNumber, selectedCountry));\n }, [phoneCodeList, country]);\n\n const handleLangChange = useCallback(() => {\n markIsLoading();\n\n void setLanguage(suggestedLanguage, () => {\n unmarkIsLoading();\n\n setSettingOption({ language: suggestedLanguage });\n });\n }, [markIsLoading, setSettingOption, suggestedLanguage, unmarkIsLoading]);\n\n useEffect(() => {\n if (phoneNumber === undefined && authPhoneNumber) {\n parseFullNumber(authPhoneNumber);\n }\n }, [authPhoneNumber, phoneNumber, parseFullNumber]);\n\n useLayoutEffect(() => {\n if (inputRef.current && lastSelection) {\n inputRef.current.setSelectionRange(...lastSelection);\n }\n }, [lastSelection]);\n\n const isJustPastedRef = useRef(false);\n const handlePaste = useCallback(() => {\n isJustPastedRef.current = true;\n requestAnimationFrame(() => {\n isJustPastedRef.current = false;\n });\n }, []);\n\n const handleCountryChange = useCallback((value: ApiCountryCode) => {\n setCountry(value);\n setPhoneNumber('');\n }, []);\n\n const handlePhoneNumberChange = useCallback((e: ChangeEvent) => {\n if (authError) {\n clearAuthError();\n }\n\n // This is for further screens. We delay it until user input to speed up the initial loading.\n if (!isPreloadInitiated) {\n isPreloadInitiated = true;\n preloadFonts();\n void preloadImage(monkeyPath);\n }\n\n const { value, selectionStart, selectionEnd } = e.target;\n setLastSelection(\n selectionStart && selectionEnd && selectionEnd < value.length\n ? [selectionStart, selectionEnd]\n : undefined,\n );\n\n setIsTouched(true);\n\n const shouldFixSafariAutoComplete = (\n IS_SAFARI && country && fullNumber !== undefined\n && value.length - fullNumber.length > 1 && !isJustPastedRef.current\n );\n parseFullNumber(shouldFixSafariAutoComplete ? `${country!.countryCode} ${value}` : value);\n }, [authError, clearAuthError, country, fullNumber, parseFullNumber]);\n\n const handleKeepSessionChange = useCallback((e: ChangeEvent) => {\n setAuthRememberMe(e.target.checked);\n }, [setAuthRememberMe]);\n\n function handleSubmit(event: React.FormEvent) {\n event.preventDefault();\n\n if (authIsLoading) {\n return;\n }\n\n if (canSubmit) {\n setAuthPhoneNumber({ phoneNumber: fullNumber });\n }\n }\n\n const isAuthReady = authState === 'authorizationStateWaitPhoneNumber';\n\n return (\n
\n
\n
\n

Telegram

\n

{lang('StartText')}

\n
\n \n \n \n {canSubmit && (\n isAuthReady ? (\n \n ) : (\n \n )\n )}\n {isAuthReady && (\n \n )}\n {suggestedLanguage && suggestedLanguage !== language && continueText && (\n \n )}\n \n
\n
\n );\n};\n\nexport default memo(withGlobal(\n (global): StateProps => {\n const {\n settings: { byKey: { language } },\n countryList: { phoneCodes: phoneCodeList },\n } = global;\n\n return {\n ...pick(global, [\n 'connectionState',\n 'authState',\n 'authPhoneNumber',\n 'authIsLoading',\n 'authIsLoadingQrCode',\n 'authError',\n 'authRememberMe',\n 'authNearestCountry',\n ]),\n language,\n phoneCodeList,\n };\n },\n)(AuthPhoneNumber));\n","import React, { FC, memo } from '../../lib/teact/teact';\nimport { Bundles } from '../../util/moduleLoader';\n\nimport useModuleLoader from '../../hooks/useModuleLoader';\nimport Loading from '../ui/Loading';\n\nconst AuthCodeAsync: FC = () => {\n const AuthCode = useModuleLoader(Bundles.Auth, 'AuthCode');\n\n return AuthCode ? : ;\n};\n\nexport default memo(AuthCodeAsync);\n","import React, { FC, memo } from '../../lib/teact/teact';\nimport { Bundles } from '../../util/moduleLoader';\n\nimport useModuleLoader from '../../hooks/useModuleLoader';\nimport Loading from '../ui/Loading';\n\nconst AuthPasswordAsync: FC = () => {\n const AuthPassword = useModuleLoader(Bundles.Auth, 'AuthPassword');\n\n return AuthPassword ? : ;\n};\n\nexport default memo(AuthPasswordAsync);\n","import React, { FC, memo } from '../../lib/teact/teact';\nimport { Bundles } from '../../util/moduleLoader';\n\nimport useModuleLoader from '../../hooks/useModuleLoader';\nimport Loading from '../ui/Loading';\n\nconst AuthRegisterAsync: FC = () => {\n const AuthRegister = useModuleLoader(Bundles.Auth, 'AuthRegister');\n\n return AuthRegister ? : ;\n};\n\nexport default memo(AuthRegisterAsync);\n","import QrCodeStyling from 'qr-code-styling';\nimport React, {\n FC, useEffect, useRef, memo, useCallback, useState,\n} from '../../lib/teact/teact';\nimport { getActions, withGlobal } from '../../global';\n\nimport { GlobalState } from '../../global/types';\nimport { LangCode } from '../../types';\n\nimport { DEFAULT_LANG_CODE } from '../../config';\nimport { setLanguage } from '../../util/langProvider';\nimport renderText from '../common/helpers/renderText';\nimport { getSuggestedLanguage } from './helpers/getSuggestedLanguage';\nimport getAnimationData from '../common/helpers/animatedAssets';\n\nimport useLangString from '../../hooks/useLangString';\nimport useFlag from '../../hooks/useFlag';\nimport useLang from '../../hooks/useLang';\n\nimport Loading from '../ui/Loading';\nimport Button from '../ui/Button';\nimport AnimatedSticker from '../common/AnimatedSticker';\nimport blankUrl from '../../assets/blank.png';\n\ntype StateProps =\n Pick\n & {\n language?: LangCode;\n };\n\nconst DATA_PREFIX = 'tg://login?token=';\nconst QR_SIZE = 280;\nconst QR_PLANE_SIZE = 54;\n\nconst QR_CODE = new QrCodeStyling({\n width: QR_SIZE,\n height: QR_SIZE,\n image: blankUrl,\n margin: 10,\n type: 'svg',\n dotsOptions: {\n type: 'rounded',\n },\n cornersSquareOptions: {\n type: 'extra-rounded',\n },\n imageOptions: {\n imageSize: 0.4,\n margin: 8,\n },\n qrOptions: {\n errorCorrectionLevel: 'M',\n },\n});\n\nconst AuthCode: FC = ({\n connectionState,\n authState,\n authQrCode,\n language,\n}) => {\n const {\n returnToAuthPhoneNumber,\n setSettingOption,\n } = getActions();\n\n const suggestedLanguage = getSuggestedLanguage();\n const lang = useLang();\n // eslint-disable-next-line no-null/no-null\n const qrCodeRef = useRef(null);\n const continueText = useLangString(suggestedLanguage, 'ContinueOnThisLanguage');\n const [isLoading, markIsLoading, unmarkIsLoading] = useFlag();\n const [isQrMounted, markQrMounted, unmarkQrMounted] = useFlag();\n\n const [animationData, setAnimationData] = useState();\n const [isAnimationLoaded, setIsAnimationLoaded] = useState(false);\n const handleAnimationLoad = useCallback(() => setIsAnimationLoaded(true), []);\n\n useEffect(() => {\n if (!animationData) {\n getAnimationData('QrPlane').then(setAnimationData);\n }\n }, [animationData]);\n\n useEffect(() => {\n if (!authQrCode) {\n return () => {\n unmarkQrMounted();\n };\n }\n\n if (connectionState !== 'connectionStateReady') {\n return undefined;\n }\n\n const container = qrCodeRef.current!;\n\n container.parentElement!.classList.remove('pre-animate');\n\n const data = `${DATA_PREFIX}${authQrCode.token}`;\n\n QR_CODE.update({\n data,\n });\n\n if (!isQrMounted) {\n QR_CODE.append(container);\n markQrMounted();\n }\n return undefined;\n }, [connectionState, authQrCode, isQrMounted, markQrMounted, unmarkQrMounted]);\n\n useEffect(() => {\n if (connectionState === 'connectionStateReady') {\n void setLanguage(DEFAULT_LANG_CODE);\n }\n }, [connectionState]);\n\n const handleLangChange = useCallback(() => {\n markIsLoading();\n\n void setLanguage(suggestedLanguage, () => {\n unmarkIsLoading();\n\n setSettingOption({ language: suggestedLanguage });\n });\n }, [markIsLoading, setSettingOption, suggestedLanguage, unmarkIsLoading]);\n\n const isAuthReady = authState === 'authorizationStateWaitQrCode';\n\n return (\n
\n
\n {authQrCode ? (\n
\n \n {animationData && (\n \n )}\n
\n ) : (\n
\n )}\n

{lang('Login.QR.Title')}

\n
    \n
  1. {lang('Login.QR.Help1')}
  2. \n
  3. {renderText(lang('Login.QR2.Help2'), ['simple_markdown'])}
  4. \n
  5. {lang('Login.QR.Help3')}
  6. \n
\n {isAuthReady && (\n \n )}\n {suggestedLanguage && suggestedLanguage !== language && continueText && (\n \n )}\n
\n
\n );\n};\n\nexport default memo(withGlobal(\n (global): StateProps => {\n const {\n connectionState, authState, authQrCode, settings: { byKey: { language } },\n } = global;\n\n return {\n connectionState,\n authState,\n authQrCode,\n language,\n };\n },\n)(AuthCode));\n","import React, { FC, useEffect, memo } from '../../lib/teact/teact';\nimport { getActions, withGlobal } from '../../global';\n\nimport { GlobalState } from '../../global/types';\n\nimport '../../global/actions/initial';\nimport { pick } from '../../util/iteratees';\nimport { PLATFORM_ENV } from '../../util/environment';\nimport windowSize from '../../util/windowSize';\nimport useHistoryBack from '../../hooks/useHistoryBack';\n\nimport UiLoader from '../common/UiLoader';\nimport AuthPhoneNumber from './AuthPhoneNumber';\nimport AuthCode from './AuthCode.async';\nimport AuthPassword from './AuthPassword.async';\nimport AuthRegister from './AuthRegister.async';\nimport AuthQrCode from './AuthQrCode';\n\nimport './Auth.scss';\n\ntype StateProps = Pick;\n\nconst Auth: FC = ({\n authState,\n}) => {\n const {\n reset, initApi, returnToAuthPhoneNumber, goToAuthQrCode,\n } = getActions();\n\n useEffect(() => {\n reset();\n initApi();\n }, [reset, initApi]);\n\n const isMobile = PLATFORM_ENV === 'iOS' || PLATFORM_ENV === 'Android';\n\n const handleChangeAuthorizationMethod = () => {\n if (!isMobile) {\n goToAuthQrCode();\n } else {\n returnToAuthPhoneNumber();\n }\n };\n\n useHistoryBack(\n (!isMobile && authState === 'authorizationStateWaitPhoneNumber')\n || (isMobile && authState === 'authorizationStateWaitQrCode'), handleChangeAuthorizationMethod,\n );\n\n // Prevent refresh when rotating device\n useEffect(() => {\n windowSize.disableRefresh();\n\n return () => {\n windowSize.enableRefresh();\n };\n }, []);\n\n switch (authState) {\n case 'authorizationStateWaitCode':\n return ;\n case 'authorizationStateWaitPassword':\n return ;\n case 'authorizationStateWaitRegistration':\n return ;\n case 'authorizationStateWaitPhoneNumber':\n return ;\n case 'authorizationStateWaitQrCode':\n return ;\n default:\n return isMobile\n ? \n : ;\n }\n};\n\nexport default memo(withGlobal(\n (global): StateProps => pick(global, ['authState']),\n)(Auth));\n","import React, { FC, memo } from '../../lib/teact/teact';\nimport { Bundles } from '../../util/moduleLoader';\n\nimport useModuleLoader from '../../hooks/useModuleLoader';\n\nconst MainAsync: FC = () => {\n const Main = useModuleLoader(Bundles.Main, 'Main');\n\n return Main ?
: undefined;\n};\n\nexport default memo(MainAsync);\n","import React, { FC, useCallback } from '../../lib/teact/teact';\n\nimport Button from '../ui/Button';\n\nimport appInactivePath from '../../assets/app-inactive.png';\nimport './AppInactive.scss';\n\nconst AppInactive: FC = () => {\n const handleReload = useCallback(() => {\n window.location.reload();\n }, []);\n\n return (\n
\n
\n \"\"\n

Such error, many tabs

\n
\n Telegram supports only one active tab with the app.\n
\n Please reload this page to continue using this tab or close it.\n
\n
\n \n
\n
\n
\n );\n};\n\nexport default AppInactive;\n","import React, { FC, useEffect } from './lib/teact/teact';\nimport { getActions, withGlobal } from './global';\n\nimport { GlobalState } from './global/types';\n\nimport { INACTIVE_MARKER, PAGE_TITLE } from './config';\nimport { pick } from './util/iteratees';\nimport { updateSizes } from './util/windowSize';\nimport { addActiveTabChangeListener } from './util/activeTabMonitor';\nimport useFlag from './hooks/useFlag';\n\nimport Auth from './components/auth/Auth';\nimport UiLoader from './components/common/UiLoader';\nimport Main from './components/main/Main.async';\nimport AppInactive from './components/main/AppInactive';\nimport { hasStoredSession } from './util/sessions';\n// import Test from './components/test/TestNoRedundancy';\n\ntype StateProps = Pick;\n\nconst App: FC = ({ authState }) => {\n const { disconnect } = getActions();\n\n const [isInactive, markInactive] = useFlag(false);\n\n useEffect(() => {\n updateSizes();\n addActiveTabChangeListener(() => {\n disconnect();\n document.title = `${PAGE_TITLE}${INACTIVE_MARKER}`;\n\n markInactive();\n });\n }, [disconnect, markInactive]);\n\n // return ;\n\n if (isInactive) {\n return ;\n }\n\n if (authState) {\n switch (authState) {\n case 'authorizationStateWaitPhoneNumber':\n case 'authorizationStateWaitCode':\n case 'authorizationStateWaitPassword':\n case 'authorizationStateWaitRegistration':\n case 'authorizationStateWaitQrCode':\n return ;\n case 'authorizationStateClosed':\n case 'authorizationStateClosing':\n case 'authorizationStateLoggingOut':\n case 'authorizationStateReady':\n return renderMain();\n }\n }\n\n return hasStoredSession(true) ? renderMain() : ;\n};\n\nfunction renderMain() {\n return (\n \n
\n \n );\n}\n\nexport default withGlobal(\n (global): StateProps => pick(global, ['authState']),\n)(App);\n","import './util/handleError';\nimport './util/setupServiceWorker';\n\nimport React from './lib/teact/teact';\nimport TeactDOM from './lib/teact/teact-dom';\n\nimport { getActions, getGlobal } from './global';\nimport './global/init';\n\nimport { DEBUG } from './config';\n\nimport App from './App';\n\nimport './styles/index.scss';\n\nif (DEBUG) {\n // eslint-disable-next-line no-console\n console.log('>>> INIT');\n}\n\ngetActions().init();\n\nif (DEBUG) {\n // eslint-disable-next-line no-console\n console.log('>>> START INITIAL RENDER');\n}\n\nTeactDOM.render(\n ,\n document.getElementById('root'),\n);\n\nif (DEBUG) {\n // eslint-disable-next-line no-console\n console.log('>>> FINISH INITIAL RENDER');\n}\n\ndocument.addEventListener('dblclick', () => {\n // eslint-disable-next-line no-console\n console.warn('GLOBAL STATE', getGlobal());\n});\n"],"names":["leafPrototypes","getProto","inProgress","dataWebpackPrefix","loadStylesheet","installedCssChunks","worker","requestStates","Map","requestStatesByCallback","initApi","onUpdate","initialArgs","DEBUG","console","log","Worker","URL","addEventListener","data","type","update","requestState","get","messageId","error","reject","resolve","response","callback","callbackArgs","Error","message","subscribeToWorker","platform","window","ensureWorkerPing","setTimeout","makeRequest","args","callApi","fnName","warn","promise","name","err","cancelApiProgress","progressCallback","isCanceled","postMessage","generateIdFor","payload","Promise","Object","assign","pop","set","catch","finally","delete","startedAt","Date","now","async","race","pause","then","location","reload","ApiMediaFormat","ApiMessageEntityTypes","MAIN_THREAD_ID","MESSAGE_DELETED","lottiePromise","RLottie","ensureLottie","default","memo","className","id","animationData","play","playSegment","speed","noLoop","size","quality","isLowPriority","color","forceOnHeavyAnimation","onLoad","onEnded","animation","setAnimation","useState","container","useRef","wasPlaying","isFrozen","isFirstRender","playRef","current","playSegmentRef","useEffect","exec","newAnimation","setSpeed","fastRaf","setColor","destroy","playAnimation","useCallback","shouldRestart","goToAndPlay","pauseAnimation","freezeAnimation","isPlaying","unfreezeAnimation","unfreezeAnimationOnRaf","changeData","useHeavyAnimationCheck","useBackgroundMode","fullClassName","buildClassName","style","undefined","ref","base","maxint","adapt","delta","numpoints","firsttime","k","Math","floor","decode","input","preserveCase","output","case_flags","input_length","length","n","out","i","bias","basic","j","ic","oldi","w","digit","t","len","lastIndexOf","charCodeAt","RangeError","push","cp","splice","String","fromCharCode","toUpperCase","value","join","utf16","getDomain","url","href","ensureProtocol","decodedHref","decodeURI","match","domain","replace","domain_array","split","s","slice","convertPunycode","text","children","isRtl","toggleSafeLinkModal","openTelegramLink","getActions","content","isNotSafe","handleClick","e","ctrlKey","altKey","shiftKey","metaKey","RE_TME_LINK","RE_TG_LINK","preventDefault","classNames","title","target","rel","onClick","dir","ANIMATED_STICKERS_PATHS","MonkeyIdle","MonkeyTracking","MonkeyClose","MonkeyPeek","FoldersAll","FoldersNew","DiscussionGroups","CameraFlip","HandFilled","HandOutline","Speaker","VoiceAllowTalk","VoiceMini","VoiceMuted","VoiceOutlined","Peach","Eggplant","Cumshot","JoinRequest","Invite","QrPlane","getAnimationData","path","origin","mediaLoader","getFileSizeString","bytes","ONE_GIGABYTE","toFixed","ONE_MEGABYTE","getDocumentExtension","document","fileName","mimeType","getFileExtension","indexOf","getColorFromExtension","extension","getDocumentHasPreview","Boolean","previewBlobUrl","thumbnail","RE_EMOJI_ONLY","RegExp","twemojiRegex","DETECT_UP_TO","emojiCount","sender","openChat","Link","focusMessage","handleMessageClick","chatId","groupCall","joinGroupCall","accessHash","MAX_LENGTH","NBSP","renderActionMessageText","lang","actionOriginUser","actionOriginChat","targetUsers","targetMessage","targetChatId","options","action","translationValues","amount","currency","call","noLinks","asPlainText","asTextWithSpoilers","translationKey","processed","unprocessed","includes","processPlaceholder","formatCurrency","code","renderUserContent","renderChatContent","map","user","filter","renderMessageContent","renderProductContent","renderMigratedContent","trim","renderGroupCallContent","invoice","getMessageSummaryText","messageSummary","renderMessageSummary","trimText","getUserFullName","renderText","chat","getChatTitle","placeholder","replaceValue","placeholderPosition","substring","Array","isArray","forEach","index","renderMessageText","highlight","shouldRenderHqEmoji","isSimple","truncateLength","entities","contentNotSupportedText","getMessageText","renderTextWithEntities","noEmoji","TRUNCATED_SUMMARY_LENGTH","hasSpoilers","some","emoji","getMessageSummaryEmoji","emojiWithSpace","description","getMessageSummaryDescription","RE_LETTER_OR_DIGIT","SIMPLE_MARKDOWN_REGEX","part","filters","params","compact","reduce","escapeHtml","EMOJI_REGEX","replaceEmojis","addLineBreaks","addHighlight","addLinks","replaceSimpleMarkdown","textParts","divEl","createElement","result","innerText","innerHTML","IS_EMOJI_SUPPORTED","parts","fixNonStandardEmoji","emojis","emojiResult","nativeToUnified","removeVS16s","src","alt","splittenParts","line","source","trimmedLine","trimLeft","indentLength","repeat","lowerCaseText","toLowerCase","queryPosition","nextSymbol","newParts","RE_LINK","RE_LINK_TEMPLATE","RE_MENTION_TEMPLATE","links","nextLink","shift","lastIndex","startsWith","username","endsWith","entityResult","entity","actionsByMessageId","createClassNameBuilder","contentRef","isRevealed","reveal","conceal","useFlag","stopPropagation","actions","contentLength","readingMs","round","timeoutMs","max","min","has","shouldRenderAsHtml","renderMessagePart","deleteLineBreakAfterPre","organizedEntities","organizedEntityIndexes","Set","organizedEntity","organizeEntity","organizedIndexes","organizedIndex","add","organizeEntities","renderEntity","textPartStart","textPartEnd","isLastEntity","renderResult","nestedEntities","offset","textBefore","textBeforeLength","substr","entityStartIndex","entityEndIndex","entityContent","nestedEntityContent","nestedIndex","nestedEntity","nestedEntityIndex","nestedResult","nestedEntityEndIndex","newEntity","rawEntityText","renderedContent","userId","getLinkUrl","processEntityAsHtml","entityText","renderNestedMessagePart","handleBotCommandClick","handleHashtagClick","handleCodeClick","role","tabIndex","MentionLink","SafeLink","processEntity","textAfter","arrayIndex","getTextWithEntitiesAsHtml","formattedText","c","concat","parsedEntity","isChanged","sendBotCommand","command","currentTarget","setLocalTextSearchQuery","query","searchTextMessagesLocal","copyTextToClipboard","showNotification","getTranslation","preventMessageInputBlur","withBubbling","IS_IOS","activeElement","EDITABLE_INPUT_ID","preventMessageInputBlurWithBubbling","withGlobal","global","userOrChat","selectUser","openChatByUsername","onContextMenu","onMouseDown","onMouseEnter","onMouseLeave","onFocus","backgroundImage","pill","fluid","isText","isLoading","ariaLabel","ariaControls","hasPopup","download","disabled","ripple","faded","withClickPropagation","elementRef","isClicked","setIsClicked","handleMouseDown","label","subLabel","checked","blocking","onChange","onCheck","useLang","handleChange","event","trigger","positionX","positionY","footer","forceOpen","onOpen","onClose","menuRef","dropdownRef","isOpen","setIsOpen","handleClose","onKeyDown","menu","keyCode","focusedElement","elementChildren","from","focus","onTrigger","containerRef","autoClose","shouldSkipTransition","success","readOnly","autoComplete","inputMode","maxLength","onInput","onKeyPress","onBlur","onPaste","labelText","htmlFor","backgroundColor","bubbleStyle","ariaLabelledBy","transformOriginX","transformOriginY","noCloseOnBackdrop","noCompact","onCloseAnimationEnd","backdropContainerRef","transitionClassNames","useShowTransition","captureEscKeyListener","useHistoryBack","useEffectWithPrevDeps","prevIsOpen","dispatchHeavyAnimationEvent","handleKeyDown","useKeyboardListNavigation","useVirtualBackdrop","bubbleClassName","transformOriginYStyle","transformOriginXStyle","IS_COMPACT_MENU","IS_BACKDROP_BLUR_SUPPORTED","props","icon","destructive","ripples","setRipples","cleanUpDebounced","useMemo","debounce","button","position","getBoundingClientRect","rippleSize","offsetWidth","x","clientX","y","clientY","requestAnimationFrame","APP_NAME","APP_VERSION","process","DEBUG_MORE","IS_TEST","DEBUG_ALERT_MSG","PAGE_TITLE","INACTIVE_MARKER","DEBUG_PAYMENT_SMART_GLOCAL","SESSION_USER_KEY","LEGACY_SESSION_KEY","GLOBAL_STATE_CACHE_DISABLED","GLOBAL_STATE_CACHE_KEY","GLOBAL_STATE_CACHE_USER_LIST_LIMIT","GLOBAL_STATE_CACHE_CHAT_LIST_LIMIT","GLOBAL_STATE_CACHE_CHATS_WITH_MESSAGES_LIMIT","MEDIA_CACHE_DISABLED","MEDIA_CACHE_NAME","MEDIA_CACHE_NAME_AVATARS","MEDIA_PROGRESSIVE_CACHE_NAME","CUSTOM_BG_CACHE_NAME","LANG_CACHE_NAME","AUTODOWNLOAD_FILESIZE_MB_LIMITS","isBigScreen","innerHeight","MIN_PASSWORD_LENGTH","MESSAGE_LIST_SLICE","MESSAGE_LIST_VIEWPORT_LIMIT","CHAT_HEIGHT_PX","CHAT_LIST_SLICE","CHAT_LIST_LOAD_SLICE","SHARED_MEDIA_SLICE","MESSAGE_SEARCH_SLICE","GLOBAL_SEARCH_SLICE","MEMBERS_SLICE","MEMBERS_LOAD_SLICE","PROFILE_SENSITIVE_AREA","TOP_CHAT_MESSAGES_PRELOAD_LIMIT","DEFAULT_VOLUME","DEFAULT_PLAYBACK_RATE","ANIMATION_LEVEL_MIN","ANIMATION_LEVEL_MAX","ANIMATION_LEVEL_DEFAULT","DEFAULT_MESSAGE_TEXT_SIZE_PX","IOS_DEFAULT_MESSAGE_TEXT_SIZE_PX","MACOS_DEFAULT_MESSAGE_TEXT_SIZE_PX","DRAFT_DEBOUNCE","SEND_MESSAGE_ACTION_INTERVAL","EDITABLE_INPUT_MODAL_ID","EDITABLE_INPUT_CSS_SELECTOR","CUSTOM_APPENDIX_ATTRIBUTE","SAFE_SCREEN_WIDTH_FOR_STATIC_RIGHT_COLUMN","SAFE_SCREEN_WIDTH_FOR_CHAT_INFO","MIN_SCREEN_WIDTH_FOR_STATIC_RIGHT_COLUMN","MIN_SCREEN_WIDTH_FOR_STATIC_LEFT_COLUMN","MOBILE_SCREEN_MAX_WIDTH","MOBILE_SCREEN_LANDSCAPE_MAX_WIDTH","MOBILE_SCREEN_LANDSCAPE_MAX_HEIGHT","LOCAL_MESSAGE_ID_BASE","TMP_CHAT_ID","ANIMATION_END_DELAY","FAST_SMOOTH_MAX_DISTANCE","FAST_SMOOTH_MIN_DURATION","FAST_SMOOTH_MAX_DURATION","FAST_SMOOTH_SHORT_TRANSITION_MAX_DISTANCE","STICKER_SIZE_INLINE_DESKTOP_FACTOR","STICKER_SIZE_INLINE_MOBILE_FACTOR","STICKER_SIZE_AUTH","STICKER_SIZE_AUTH_MOBILE","STICKER_SIZE_PICKER","STICKER_SIZE_GENERAL_SETTINGS","STICKER_SIZE_PICKER_HEADER","STICKER_SIZE_SEARCH","STICKER_SIZE_MODAL","STICKER_SIZE_TWO_FA","STICKER_SIZE_DISCUSSION_GROUPS","STICKER_SIZE_FOLDER_SETTINGS","STICKER_SIZE_INLINE_BOT_RESULT","STICKER_SIZE_JOIN_REQUESTS","STICKER_SIZE_INVITES","NO_STICKER_SET_ID","BASE_EMOJI_KEYWORD_LANG","MENU_TRANSITION_DURATION","SLIDE_TRANSITION_DURATION","VIDEO_MOV_TYPE","SUPPORTED_IMAGE_CONTENT_TYPES","SUPPORTED_VIDEO_CONTENT_TYPES","SUPPORTED_AUDIO_CONTENT_TYPES","CONTENT_TYPES_WITH_PREVIEW","CONTENT_NOT_SUPPORTED","COUNTRIES_WITH_12H_TIME_FORMAT","SERVICE_NOTIFICATIONS_USER_ID","REPLIES_USER_ID","ALL_FOLDER_ID","ARCHIVED_FOLDER_ID","MAX_MEDIA_FILES_FOR_ALBUM","MAX_ACTIVE_PINNED_CHATS","SCHEDULED_WHEN_ONLINE","DEFAULT_LANG_CODE","DEFAULT_LANG_PACK","LANG_PACKS","TIPS_USERNAME","LOCALIZED_TIPS","FEEDBACK_URL","LIGHT_THEME_BG_COLOR","DARK_THEME_BG_COLOR","DARK_THEME_PATTERN_COLOR","DEFAULT_PATTERN_COLOR","GROUP_CALL_VOLUME_MULTIPLIER","GROUP_CALL_DEFAULT_VOLUME","ENABLE_THUMBNAIL_VIDEO","addActionHandler","importLegacySession","clearLegacySessions","apiUpdate","userAgent","navigator","PLATFORM_ENV","sessionData","loadStoredSession","isTest","search","isMovSupported","IS_MOV_SUPPORTED","isWebmSupported","IS_WEBM_SUPPORTED","phoneNumber","authIsLoading","authError","password","file","firstName","lastName","authIsLoadingQrCode","storeSession","currentUserId","clearStoredSession","_global","_actions","unsubscribe","forceWebsync","reset","forceInitApi","cacheApi","langCachePrefix","langCacheVersion","updateAppBadge","init","connectionState","authNearestCountry","getGlobal","deviceToken","subscribedAt","buildInputPrivacyRules","visibility","allowedIds","deniedIds","users","byId","usersById","chats","chatsById","rules","collectUsers","isUserId","collectChats","allowedUsers","allowedChats","blockedUsers","blockedChats","photo","bio","about","setGlobal","profileEdit","progress","ProfileEditProgress","currentUser","updateUser","fullInfo","isUsernameAvailable","settings","loadedWallpapers","wallpapers","createObjectURL","slug","UPLOADING_WALLPAPER_SLUG","wallpaper","firstWallpaper","withLocalMedia","addUsers","buildCollectionByKey","updateChats","blocked","ids","blockedIds","totalCount","contactId","addBlockedContact","removeBlockedContact","activeSessions","hash","session","isCurrent","serverTimeOffset","addNotifyExceptions","replaceSettings","peerType","isSilent","shouldShowPreviews","updateNotifySettings","hasPushNotifications","hasWebNotifications","byKey","subscribe","hasContactJoinedNotifications","languages","phoneNumberSettings","lastSeenSettings","profilePhotoSettings","forwardsSettings","chatInviteSettings","all","privacy","lastSeen","profilePhoto","forwards","chatInvite","privacyKey","allowUserIds","allowChatIds","blockUserIds","blockChatIds","isAllowList","contactsIds","isSensitiveEnabled","langCode","language","countryList","timeFormat","setSettingOption","setTimeFormat","wasTimeFormatSetManually","nearestCountryCode","appConfig","selectNotifySettings","setLanguage","onUpdateApiReady","wasAuthReady","authState","authorizationState","isLoggingOut","authIsCodeViaApp","isCodeViaApp","authHint","hint","authQrCode","qrCode","onUpdateAuthorizationState","onUpdateAuthorizationError","isOnAuth","signOut","onUpdateConnectionState","authRememberMe","isEmpty","mainDcId","saveSession","onUpdateSession","onUpdateServerTimeOffset","sessionUserAuth","localStorage","getItem","userAuth","JSON","parse","setItem","stringify","updateSessionUserId","onUpdateCurrentUser","paymentShippingError","getShippingError","addPaymentError","showDialog","handleSystemThemeChange","currentThemeMatch","documentElement","currentTheme","nextTheme","selectTheme","animationLevel","switchTheme","mql","matchMedia","addListener","subscribeToSystemThemeChange","messageTextSize","theme","setProperty","setAttribute","toString","body","classList","IS_TOUCH_ENV","ensurePermanentWebVersion","startWebsync","IS_ANDROID","IS_MAC_OS","IS_SAFARI","uiReadyState","remove","authPhoneNumber","shouldSkipHistoryAnimations","forceSyncOnIOs","replaceThemeSettings","FOREVER_BANNED_DATE","VERIFIED_PRIORITY_BASE","PINNED_PRIORITY_BASE","entityId","isChatGroup","isChatBasicGroup","isChatSuperGroup","isChatChannel","isCommonBoxChat","isChatWithRepliesBot","getChatTypeString","getPrivateChatUserId","isSelf","getChatDescription","getChatLink","inviteLink","getChatAvatarHash","owner","avatarHash","isChatSummaryOnly","lastMessage","isChatAdmin","adminRights","getHasAdminRight","key","isUserRightBanned","currentUserBannedRights","defaultBannedRights","getCanPostInChat","threadId","isRestricted","isForbidden","migratedTo","isNotJoined","isCreator","getAllowedAttachmentOptions","isChatWithBot","canAttachMedia","canAttachPolls","canSendStickers","canSendGifs","canAttachEmbedLinks","isAdmin","getMessageSendingRestrictionReason","sendMessages","untilDate","formatDateToString","formatTime","getChatSlowModeOptions","slowMode","isChatArchived","folderId","selectIsChatMuted","notifySettings","notifyExceptions","isMuted","hasPrivateChatsNotifications","hasBroadcastNotifications","hasGroupNotifications","selectShouldShowMessagePreview","hasPrivateChatsMessagePreview","hasBroadcastMessagePreview","hasGroupMessagePreview","getCanDeleteChat","getFolderDescriptionText","folder","chatsCount","emoticon","pinnedChatIds","excludedChatIds","includedChatIds","excludeArchived","excludeMuted","excludeRead","values","bots","groups","channels","contacts","nonContacts","getMessageSenderName","getUserFirstOrLastName","sortChatIds","chatIds","shouldPrioritizeVerified","priorityIds","orderBy","priority","date","isVerified","filterChatsByName","searchWords","prepareSearchWordsForNeedle","getMessageHtmlId","getMessageKey","msgId","buildMessageKey","parseMessageKey","Number","getMessageOriginalId","previousLocalId","sticker","video","audio","voice","poll","webPage","contact","getMessageCustomShape","isRound","parseEmojiOnlyString","getMessageSingleEmoji","getFirstLinkInMessage","link","find","isOwnMessage","isOutgoing","isReplyMessage","replyToMessageId","isForwardedMessage","forwardInfo","isActionMessage","isServiceNotificationMessage","isAnonymousOwnMessage","senderId","getSenderTitle","getSendingState","sendingState","isMessageLocal","isHistoryClearMessage","getMessageContentFilename","isLottie","isVideo","isWebpSupported","baseFilename","IS_OPUS_SUPPORTED","areReactionsEmpty","reactions","results","l","count","isGeoLiveExpired","timestamp","period","getMessageRecentReaction","recentReactions","checkIfReactionAdded","oldReactions","newReactions","every","reaction","oldReactionsMap","acc","r","SPOILER_CHARS","noReactions","isExtended","getMessageTextWithSpoilers","accText","spoiler","fill","random","generateBrailleSpoiler","groupedId","truncatedText","summary","isGif","getMessageAudioCaption","question","performer","getMessageContent","hasMessageMedia","getMessagePhoto","getMessageVideo","getMessageDocument","getMessageSticker","getMessageContact","getMessagePoll","getMessageAction","getMessageAudio","getMessageVoice","getMessageRoundVideo","isMessageDocumentPhoto","mediaType","isMessageDocumentVideo","getMessageInvoice","getMessageLocation","getMessageWebPage","getMessageWebPagePhoto","getMessageWebPageVideo","getMessageMediaThumbDataUri","media","getMessageMediaThumbnail","dataUri","buildStaticMapHash","geo","width","height","zoom","scale","long","lat","accuracyRadius","getMessageMediaHash","webPagePhoto","webPageVideo","messageVideo","messagePhoto","mediaId","hasMessageLocalBlobUrl","getVideoOrAudioBaseHash","getAudioHasCover","IS_PROGRESSIVE_SUPPORTED","thumbnailSizes","getMessageMediaFormat","fullVideo","getMessageFileName","getMessageFileSize","blobUrl","getChatMediaMessageIds","messages","listedIds","isFromSharedMedia","getMessageContentIds","getPhotoFullDimensions","sizes","getPhotoInlineDimensions","getVideoDimensions","getMediaTransferState","isLoadNeeded","isUploading","isTransferring","transferProgress","messageIds","contentType","validator","matchLinkInMessageText","getMediaDuration","duration","buildChatThreadKey","STRIPE_ERRORS","missing_payment_information","field","invalid_number","number","exp_year","exp_month","invalid_expiry_year","invalid_expiry_month","cvc","invalid_cvc","getStripeError","param","USER_COLOR_KEYS","isDeletedUser","getUserStatus","userStatus","wasOnline","getTime","wasOnlineDate","diff","today","setHours","yesterday","setDate","getDate","formatFullDate","isUserOnline","noStatus","isUserBot","getCanAddContact","isContact","sortUserIds","userIds","userStatusesById","getServerTime","expires","filterUsersByName","savedMessagesLang","getUserIdDividend","abs","getUserColorKey","peer","typed","typify","replaceChatListIds","newIds","listIds","updateChatListIds","idsUpdate","replaceChats","newById","updateChat","chatUpdate","updatedChat","getUpdatedChat","updatedById","keys","addChats","isUpdated","addedById","isMin","shouldOmitMinInfo","omit","photos","updateChatListType","listType","currentListIds","listTypeKey","currentFolderList","updateChatListSecondaryInfo","info","totalCountKey","orderedPinnedIds","totalChatCount","isFullyLoaded","leaveChat","leftChatId","selectChatListType","listId","addChatMembers","membersToAdd","currentMembers","members","newMemberIds","m","updatedMembers","currentIds","updatedIds","areSortedArraysEqual","updateStickerSets","category","sets","resultIds","updatedSets","stickerSet","existing","stickers","setsById","setIds","updateStickerSet","stickerSetId","currentStickerSet","addedSets","added","installedDate","updateGifSearch","isNew","nextOffset","currentResults","gifs","newResults","gif","replaceAnimatedEmojis","animatedEmojis","updateStickersForEmoji","remoteStickers","allStickers","selectStickersForEmoji","uniqueIds","unique","forEmoji","rebuildStickersForEmoji","replaceUsers","updateContactList","updatedUsers","contactUserIds","contactList","newContactUserIds","userUpdate","updatedUser","getUpdatedUser","updateUsers","deleteContact","MEMO_EMPTY_ARRAY","updateUserSearch","searchStatePartial","userSearch","updateUserSearchFetchingStatus","newState","fetchingStatus","updateUserBlockedState","isBlocked","replaceUserStatuses","statusesById","addUserStatuses","newKeys","pick","closeNewContactDialog","newContact","getComplexKey","updateGlobalSearch","globalSearch","updateGlobalSearchContent","currentContent","updateGlobalSearchResults","newFoundMessages","nextRate","resultsByType","newFoundMessagesById","foundIdsForType","foundIds","newId","updateGlobalSearchFetchingStatus","prevFoundIds","newFoundIds","prototype","foundOrPrevFoundIds","nextOffsetId","replaceLocalTextSearch","chatThreadKey","searchParams","localTextSearch","byChatThreadKey","updateLocalTextSearch","isActive","replaceLocalTextSearchResults","updateLocalTextSearchResults","orderFoundIds","replaceLocalMediaSearch","localMediaSearch","byChatId","updateLocalMediaSearchType","currentType","updateLocalMediaSearchResults","replaceLocalMediaSearchResults","sort","a","b","updateManagementProgress","management","updateManagement","newSettings","themes","notifyException","exceptionData","addNotifyException","updateTwoFaSettings","twoFaSettings","updateShippingOptions","shippingOptions","payment","setRequestInfoId","requestId","setPaymentStep","step","setInvoiceMessageInfo","photoUrl","invoiceContent","setStripeCardInfo","cardInfo","stripeCredentials","setSmartGlocalCardInfo","smartGlocalCredentials","setPaymentForm","form","setConfirmPaymentUrl","confirmPaymentUrl","setReceipt","receipt","messageInvoice","clearPayment","closeInvoice","isPaymentModalOpen","updateStatistics","statistics","updateStatisticsGraph","updateCurrentMessageList","shouldReplaceHistory","messageLists","newMessageLists","last","replaceChatMessages","updateMessageStore","updateThread","threadUpdate","threadsById","replaceThreadParam","paramName","newValue","addMessages","addedByChatId","messagesByChatId","addChatMessagesById","selectChatMessages","updateChatMessage","messageUpdate","updatedMessage","updateScheduledMessage","selectScheduledMessages","replaceScheduledMessages","deleteChatMessages","deletedForwardedPosts","pickTruthy","isLinkedChannelPost","threadInfo","selectThreadInfo","selectListedIds","outlyingIds","selectOutlyingIds","viewportIds","selectViewportIds","pinnedIds","selectPinnedIds","newMessageCount","messagesCount","currentMessageList","selectCurrentMessageList","canDeleteCurrentThread","currentThreadId","fromChatId","fromMessageId","originalPost","selectChatMessage","deleteChatScheduledMessages","scheduledIds","selectScheduledIds","updateListedIds","orderHistoryIds","updateOutlyingIds","addViewportId","safeReplaceViewportIds","newViewportIds","updateThreadInfo","newThreadInfo","updateThreadInfos","updates","scheduledMessages","updateScheduledMessages","updateFocusedMessage","noHighlight","isResizingContainer","focusedMessage","updateSponsoredMessage","sponsoredByChatId","updateFocusDirection","direction","enterMessageSelectMode","selectedMessages","toggleMessageSelection","messageListType","childMessageIds","withShift","oldSelectedMessages","selectMessageIdsByGroupId","selectedMessageIds","newMessageIds","newSelectedMessageIds","selectCurrentMessageIds","prevIndex","currentIndex","to","exitMessageSelectMode","updateThreadUnreadFromForwardedMessage","originMessage","lastMessageId","isDeleting","channelPostId","threadInfoOld","selectChat","selectIsChatWithSelf","selectIsChatWithBot","selectChatUser","selectSupportChat","isSupport","selectChatOnlineCount","onlineCount","selectChatBot","selectIsChatBotNotStarted","bot","messageInfo","selectAreActiveChatsLoaded","active","selectIsChatListed","targetList","list","selectChatFolder","chatFolders","selectIsChatPinned","archived","chatFoldersById","selectChatByUsername","usernameLowered","selectIsServiceChatReady","selectSendAs","sendAsId","selectCurrentStickerSearch","selectCurrentGifSearch","selectStickerSet","selectStickerSetByShortName","shortName","stickerSets","stickersForEmoji","favorite","packs","cleanEmoji","selectAnimatedEmoji","cleanedEmoji","selectAnimatedEmojiEffect","animatedEmojiEffects","selectAnimatedEmojiSound","emojiSounds","selectLocalAnimatedEmoji","selectLocalAnimatedEmojiEffect","selectLocalAnimatedEmojiEffectByName","selectCurrentChat","selectThreadParam","thread","selectScrollOffset","selectReplyingToId","selectEditingId","selectEditingDraft","selectEditingScheduledId","selectEditingScheduledDraft","selectDraft","selectNoWebPage","selectFirstMessageId","selectReplyStack","selectThreadOriginChat","originChannelId","selectThreadTopMessageId","topMessageId","selectThreadByMessage","replyToTopMessageId","selectIsMessageInCurrentMessageList","selectIsViewportNewest","chatMessages","selectScheduledMessage","selectEditingMessage","selectChatMessageByPollId","pollId","messageWithPoll","selectFocusedMessageId","focusedChatId","selectIsMessageFocused","focusedId","selectIsMessageUnread","lastReadOutboxMessageId","selectOutgoingStatus","isScheduledList","selectSender","selectForwardedSender","isChannelPost","senderUserId","selectAllowedMessageActions","isPrivate","isChatWithSelf","isBasicGroup","isSuperGroup","isChannel","isLocal","isServiceNotification","isOwn","isAction","isMessageEditable","viaBotId","canReply","hasPinPermission","canPin","canUnpin","pinnedMessageIds","canDelete","canReport","canDeleteForAll","canEdit","canForward","hasSticker","hasFavoriteSticker","selectIsStickerFavorite","canFaveSticker","canUnfaveSticker","canCopy","canCopyLink","canSelect","canDownload","canSaveGif","noOptions","ability","selectCanDeleteSelectedMessages","messageActions","selectCanReportSelectedMessages","selectCanDownloadSelectedMessages","selectIsDownloading","activeInChat","activeDownloads","selectActiveDownloadIds","selectUploadProgress","fileUploads","byMessageLocalId","selectRealLastReadId","lastReadInboxMessageId","Infinity","selectFirstUnreadId","lastReadId","lastReadServiceNotificationId","serviceNotifications","notification","isUnread","findAfterLastReadId","isFromScheduled","found","selectIsForwardModalOpen","forwardMessages","isModalShown","selectCommonBoxChatId","fromLastMessage","selectIsInSelectMode","selectIsMessageSelected","selectForwardedMessageIdsByGroupId","selectIsDocumentGroupSelected","selectedIds","groupIds","selectSelectedMessagesCount","selectNewestMessageWithBotKeyboardButtons","findLast","keyboardButtons","replyHideMessageId","shouldHideKeyboardButtons","selectCanAutoLoadMedia","isPhoto","isFile","canAutoLoadPhotoFromContacts","canAutoLoadPhotoInPrivateChats","canAutoLoadPhotoInGroups","canAutoLoadPhotoInChannels","canAutoLoadVideoFromContacts","canAutoLoadVideoInPrivateChats","canAutoLoadVideoInGroups","canAutoLoadVideoInChannels","canAutoLoadFileFromContacts","canAutoLoadFileInPrivateChats","canAutoLoadFileInGroups","canAutoLoadFileInChannels","canAutoLoadMedia","canAutoLoadMediaFromContacts","canAutoLoadMediaInPrivateChats","canAutoLoadMediaInGroups","canAutoLoadMediaInChannels","isMediaFromContact","selectIsUserOrChatContact","selectCanAutoPlayMedia","canAutoPlayVideos","canAutoPlayGifs","asGif","selectShouldLoopStickers","shouldLoopStickers","selectLastServiceNotification","maxId","selectIsMessageProtected","isProtected","selectHasProtectedMessage","selectSponsoredMessage","expiresAt","selectDefaultReaction","defaultReaction","availableReactions","isInactive","enabledReactions","selectVisibleUsers","selectShouldSchedule","selectCanScheduleUntilOnline","chatBot","selectUserStatus","selectCurrentTextSearch","currentSearch","selectCurrentMediaSearch","selectStatistics","selectManagement","selectCurrentManagementType","selectIsMediaViewerOpen","mediaViewer","avatarOwnerId","selectRightColumnContentKey","pollResults","selectIsPollResultsOpen","RightColumnContent","IS_SINGLE_COLUMN_LAYOUT","currentManagement","selectCurrentManagement","isStatisticsShown","currentChatId","canViewStatistics","selectIsStatisticsShown","newChatMembersProgress","NewChatMembersProgress","isChatInfoShown","selectIsRightColumnShown","shouldUseSystemTheme","getSystemTheme","selectCurrentGlobalSearchQuery","selectPaymentChatId","selectPaymentMessageId","selectPaymentFormId","formId","selectPaymentRequestId","selectProviderPublishableKey","nativeParams","publishableKey","selectProviderPublicToken","publicToken","selectStripeCredentials","selectSmartGlocalCredentials","selectNotifyExceptions","selectIsUserBlocked","selectUserByPhoneNumber","phoneNumberCleaned","hasFocus","removeEventListener","cb","dependencies","debugKey","prevDeps","usePrevious","initial","setValue","setTrue","setFalse","setTrigger","ANIMATION_START_EVENT","ANIMATION_END_EVENT","timeout","isAnimating","isHeavyAnimating","onEnd","clearTimeout","dispatchEvent","Event","handleAnimationStart","handleAnimationEnd","isDisabled","LOCATION_HASH","PATH_BASE","pathname","historyState","nextStateIndexToReplace","isHistoryAltered","isEdge","currentIndexes","disableHistoryBack","handleTouchEnd","onBack","onForward","currentState","shouldReplaceNext","hashes","indexRef","isForward","prevIsActive","isClosed","indexHashRef","prevHashes","isHashChangedFromEvent","isForceClose","prev","history","pushState","state","realDelta","indexLast","findIndex","go","replaceState","back","handlePopState","currIndex","disableHistoryAnimations","hasChanged","forceClose","touches","pageX","innerWidth","onSelectWithEnter","itemSelector","noCaptureFocus","focusedIndex","setFocusedIndex","element","querySelectorAll","newIndex","item","forceUpdate","useForceUpdate","useOnChange","langProvider","bundleName","moduleName","noLoad","autoUpdate","module","getModuleFromMemory","addLoadListener","loadModule","d","next","shouldSkipUndefined","onCloseTransitionEnd","noOpenTransition","noCloseTransition","setIsClosed","closeTimeoutRef","hasOpenClassName","setHasOpenClassName","shouldHaveOpenClassName","isClosing","shouldRender","handleEvent","contains","NON_BUBBLEABLE_EVENTS","documentEventCounters","delegationRegistryByEventType","delegatedEventTypesByElement","propName","handler","asCapture","eventType","resolveEventType","canUseEventDelegation","addDelegatedListener","removeDelegatedListener","tagName","realEventType","resolveDelegationRegistry","newSet","resolveDelegatedEventTypes","removeAllDelegatedListeners","eventTypes","realEvent","events","furtherCallsPrevented","Proxy","p","Reflect","parentNode","documentListenersCount","delegatedHandlersCount1","counter","delegationRegistriesCount","delegatedHandlersCount2","delegationRegistry","delegationElementsCount","delegatedEventTypesCount","FILTERED_ATTRIBUTES","HTML_ATTRIBUTES","MAPPED_ATTRIBUTES","autoPlay","headsByElement","renderWithVirtual","parentEl","$current","$new","$parent","skipComponentUpdate","forceIndex","fragment","moveDirection","isCurrentComponent","isComponentElement","isNewComponent","hasElementChanged","updateComponent","componentInstance","isMounted","setupComponentUpdateListener","newTarget","getTarget","initComponent","node","createNode","setTarget","childNodes","insertBefore","appendChild","removeChild","unmountTree","replaceChild","areComponents","isRealElement","nextSibling","updateAttributes","renderChildren","$element","mountComponent","$firstChild","renderComponent","isEmptyElement","createTextNode","isTextElement","tag","entries","$child","currentEl","firstChild","child","DEBUG_checkKeyUniqueness","teactFastList","$newChild","currentRemainingIndex","remainingByKey","$currentChild","isKeyPresent","newChildKey","order","teactOrderKey","fragmentQueue","fragmentIndex","newChildren","currentPreservedIndex","currentChildInfo","flushFragmentQueue","shouldMoveNode","isMovingDown","renderFastListChildren","currentChildrenLength","newChildrenLength","createDocumentFragment","$fragmentChild","currentEntries","newEntries","currentValue","cssText","removeAttribute","__html","render","headId","getAttribute","$head","VirtualElementTypesEnum","Fragment","Symbol","DEBUG_SILENT_RENDERS_FOR","renderingInstance","Empty","Text","isTagElement","Tag","Component","flatten","createComponentInstance","buildTagElement","parsedChildren","hooks","cursor","byCursor","effects","memos","buildComponentElement","dropEmptyTail","buildChildElement","isEmptyPlaceholder","DEBUG_components","newRenderedValue","DEBUG_startAt","componentName","renderCount","renderTimes","performance","handleError","renderedValue","newChild","$old","memoContainer","cleanup","hook","effect","nextValue","setter","helpGc","prepareComponentForFrame","prepareForFrame","throttleWithPrimaryRaf","throttleWithRaf","forceUpdateComponent","currentElement","componentElement","DEBUG_contentComponentName","useLayoutEffectBase","schedulerFn","primarySchedulerFn","execCleanup","dependency","causedBy","res","prevValue","fastRafPrimary","useLayoutEffect","onTickEnd","onTickEndPrimary","resolver","getUnequalProps","newCallback","currentGlobal","actionHandlers","callbacks","containers","mapStateToProps","ownProps","mappedProps","newMappedProps","isNaN","DEBUG_componentName","arePropsShallowEqual","areMappedPropsChanged","DEBUG_updates","updateTime","runCallbacksThrottled","throttleWithTickEnd","runCallbacks","newGlobal","handleAction","addCallback","removeCallback","TeactNContainer","vs16RegExp","zeroWidthJoiner","rawEmoji","LoadMoreDirection","FocusDirection","SettingsScreens","LeftColumnContent","GlobalSearchContent","MediaViewerOrigin","AudioOrigin","ChatCreationProgress","ManagementProgress","ProfileState","PaymentStep","ManagementScreens","currentInstance","animateSingle","tick","instance","isCancelled","animate","timingFunctions","linear","easeIn","easeOut","easeInOut","sin","PI","easeInQuad","easeOutQuad","easeInOutQuad","easeInCubic","easeOutCubic","easeInOutCubic","easeInQuart","easeOutQuart","easeInOutQuart","easeInQuint","easeOutQuint","easeInOutQuint","animateNumber","timing","t0","canceled","f","unreadCount","setAppBadge","currentProps","newProps","currentKeys","currentKeysLength","prop","elementName","baseName","modifiers","modifier","self","caches","Type","fetch","cacheName","isHtmlAllowed","request","Request","cache","open","headers","Blob","blob","shouldRecreate","resolvedType","Json","json","save","cacheData","Response","put","clear","createCallbackManager","hasCallbacks","captureKeyboardListener","onEsc","keyToHandlerName","Enter","Backspace","Delete","Esc","Escape","ArrowUp","ArrowDown","ArrowLeft","ArrowRight","Tab","handlers","onEnter","onDelete","onBackspace","onUp","onDown","onLeft","onRight","onTab","captureKeyboardListeners","hasActiveHandlers","handlerName","currentEventHandlers","releaseKeyboardListener","keyHandlers","CLIPBOARD_ITEM_SUPPORTED","clipboard","ClipboardItem","textCopyEl","str","selection","getSelection","rangeToRestore","rangeCount","getRangeAt","select","execCommand","removeAllRanges","addRange","copyImageToClipboard","imageUrl","canvas","ctx","getContext","imageEl","Image","onload","img","drawImage","toBlob","copyBlobToClipboard","pngBlob","write","WEEKDAYS_FULL","MONTHS_FULL_LOWERCASE","month","MILLISECONDS_IN_DAY","isToday","getDayStartAt","getDayStart","datetime","toYearMonth","getFullYear","getMonth","toIsoString","hours","getHours","marker","padStart","getMinutes","formatPastTimeShort","weekAgo","getDay","noYear","formatMonthAndYear","isShort","formatCountdown","msLeft","days","formatMediaDuration","formatCountdownShort","ceil","formatLastUpdated","currentTime","lastUpdated","seconds","formatHumanDate","noWeekdays","isUpperFirst","upperFirst","lowerFirst","weekAhead","weekDay","formattedDate","formatMediaDateTime","maxValue","minutes","maxHours","maxMinutes","string","formatVoiceRecordDuration","durationInMs","milliseconds","formatDayToStringWithCache","withCache","dayStartAt","locale","monthFormat","noDay","toLocaleString","year","day","formatDateTimeToString","hour","minute","second","isValidDate","MAX_MONTH_IN_YEAR","parseDateString","matchStringDate","matchEuropeStringDate","matchNumberDate","dateParts","monthIndex","timestampPlusDay","EXCLUDE_EMOJIS","EMOJI_EXCEPTIONS","unifiedToNative","unified","codePoints","parseInt","fromCodePoint","regex","replacement","pairs","uncompressEmoji","emojiData","categories","emojiRaw","names","native","image","isoToEmoji","iso","test","codePointAt","isWebpSupportedCache","webp","handleLoadOrError","onerror","hasWebp","systemThemeCache","matches","os","getPlatform","IS_PWA","standalone","referrer","IS_TABLET_COLUMN_LAYOUT","IS_VOICE_RECORDING_SUPPORTED","mediaDevices","AudioContext","webkitAudioContext","inlineEl","newEmojiWidth","legacyEmojiWidth","isLastEmojiVersionSupported","IS_SERVICE_WORKER_SUPPORTED","Audio","canPlayType","IS_CANVAS_FILTER_SUPPORTED","IS_REQUEST_FULLSCREEN_SUPPORTED","ARE_CALLS_SUPPORTED","LAYERS_ANIMATION_NAME","TEST_VIDEO","DPR","devicePixelRatio","MASK_IMAGE_DISABLED","CSS","supports","IS_SCROLL_PATCH_NEEDED","MESSAGE_LIST_SENSITIVE_AREA","dataUriToBlob","arr","mime","bstr","atob","u8arr","Uint8Array","blobToDataUri","reader","FileReader","readAsDataURL","blobToFile","File","lastModified","preloadImage","preloadVideo","volume","onloadedmetadata","createPosterForVideo","onseeked","videoWidth","videoHeight","toDataURL","fetchBlob","fetchFile","imgToCanvas","constructor","fileBits","rest","super","this","initials","buildInitials","prevGlobal","prepared","updateFolderManagerThrottled","throttle","onIdle","updateFolderManager","inited","getOrderedIds","orderedIdsByFolderId","getPinnedChatsCount","pinnedCountByFolderId","getChatsCount","chatsCountByFolderId","getUnreadCounters","unreadCountersByFolderId","getAllNotificationsCount","notificationsCount","addOrderedIdsCallback","addChatsCountCallback","addUnreadCountersCallback","DEBUG_startedAt","isAllFolderChanged","isMainFolderChanged","isArchivedFolderChanged","isAllFullyLoadedChanged","isAllFolderFullyLoaded","isArchivedFullyLoadedChanged","isArchivedFolderFullyLoaded","areFoldersChanged","foldersById","areChatsChanged","areUsersChanged","areNotifySettingsChanged","areNotifyExceptionsChanged","affectedFolderIds","emptyFolderIds","folderSummariesById","updateFullyLoaded","updateResults","prevAllFolderListIds","allFolderListIds","prevArchivedFolderListIds","archivedFolderListIds","changedFolders","newListIds","newPinnedIds","buildFolderSummaryFromMainList","allFolderPinnedIds","archivedFolderPinnedIds","newFoldersById","buildFolderSummary","updateFolders","newChatsById","newUsersById","newNotifySettings","newNotifyExceptions","folderSummaries","newAllFolderListIds","newArchivedFolderListIds","allIds","newFolderIds","currentSummary","chatSummariesById","newSummary","unreadMentionsCount","hasUnreadMark","joinDate","draftDate","userInfo","isListed","isArchived","isUserContact","buildChatSummary","chatSummary","folderSummary","isChatInFolder","buildChatFolderIds","currentFolderIds","folderIdsByChatId","deletedFolderIds","currentFolderIdsSet","newFolderIdsSet","currentFolderOrderedIds","chatIdsByFolderId","isOrderedListJustPatched","updateListsForChat","currentPinnedIds","wasUnreadCountersChanged","wasChatsCountChanged","pinnedCount","newPinnedCount","orderedIds","newOrderedIds","prevOrderedIds","sortedPinnedIds","allListIds","sortedNotPinnedIds","chatId1","chatId2","buildFolderOrderedIds","currentOrderedIds","currentPinnedCount","currentChatsCount","newChatsCount","currentUnreadCounters","newUnreadCounters","buildFolderUnreadCounters","newInitials","totalPrice","Intl","NumberFormat","format","store","hasOwnProperty","READABLE_ERROR_MESSAGES","CHAT_RESTRICTED","CHAT_SEND_POLL_FORBIDDEN","CHAT_SEND_STICKERS_FORBIDDEN","CHAT_SEND_GIFS_FORBIDDEN","CHAT_SEND_MEDIA_FORBIDDEN","CHAT_LINK_EXISTS","SLOWMODE_WAIT_X","USER_BANNED_IN_CHANNEL","USER_IS_BLOCKED","YOU_BLOCKED_USER","IMAGE_PROCESS_FAILED","MEDIA_EMPTY","MEDIA_INVALID","PHOTO_EXT_INVALID","PHOTO_INVALID_DIMENSIONS","PHOTO_SAVE_FILE_INVALID","MESSAGE_DELETE_FORBIDDEN","MESSAGE_POLL_CLOSED","MESSAGE_EDIT_TIME_EXPIRED","PINNED_DIALOGS_TOO_MUCH","DIALOG_FILTERS_TOO_MUCH","CHANNEL_PRIVATE","MEDIA_CAPTION_TOO_LONG","ADDRESS_STREET_LINE1_INVALID","ADDRESS_STREET_LINE2_INVALID","ADDRESS_CITY_INVALID","ADDRESS_COUNTRY_INVALID","ADDRESS_POSTCODE_INVALID","ADDRESS_STATE_INVALID","REQ_INFO_NAME_INVALID","REQ_INFO_PHONE_INVALID","REQ_INFO_EMAIL_INVALID","LINK_NOT_MODIFIED","MESSAGE_TOO_LONG","SERVICE_WORKER_DISABLED","MESSAGE_TOO_LONG_PLEASE_REMOVE_CHARACTERS","FRESH_RESET_AUTHORISATION_FORBIDDEN","BOTS_TOO_MUCH","BOT_GROUPS_BLOCKED","USERS_TOO_MUCH","USER_CHANNELS_TOO_MUCH","USER_KICKED","USER_NOT_MUTUAL_CONTACT","USER_PRIVACY_RESTRICTED","INVITE_HASH_EMPTY","INVITE_HASH_EXPIRED","INVITE_HASH_INVALID","CHANNELS_TOO_MUCH","USER_ALREADY_PARTICIPANT","SCHEDULE_DATE_INVALID","WALLPAPER_DIMENSIONS_INVALID","ADMINS_TOO_MUCH","ADMIN_RANK_EMOJI_NOT_ALLOWED","ADMIN_RANK_INVALID","FRESH_CHANGE_ADMINS_FORBIDDEN","INPUT_USER_DEACTIVATED","BOT_PRECHECKOUT_TIMEOUT","CHAT_WRITE_FORBIDDEN","CHAT_ADMIN_REQUIRED","SHIPPING_ERRORS","getReadableErrorText","isSlowMode","textParams","extraPartIndex","errorMessage","handleErrorEvent","ErrorEvent","reason","alert","collection","member","mapValues","newByKey","object","stringKeys","orderRule","mode","compareValues","currentOrderRule","isAsc","aValue","bValue","mode1","mode2","orderRule1","orderRule2","isAsc1","isAsc2","array","array1","array2","areSortedArraysIntersecting","findIntersectionWithSet","chunkSize","cloneDeep","predicate","SUBSTITUTION_REGEX","PLURAL_OPTIONS","PLURAL_RULES","en","ar","ca","de","es","fa","fr","it","ko","ms","nl","pl","pt_BR","ru","tr","uk","uz","langPack","fallbackLangPack","currentLangCode","currentTimeFormat","cacheValue","cached","langString","processTranslation","importFallbackLangPack","getTranslationForLangString","translateString","remoteLangPack","remote","fetchRemoteString","withFallback","newLangPack","fetchRemote","langInfo","rtl","langName","nativeName","sourceLangPacks","template","optionIndex","getPluralOption","translationSlices","initialValue","processTemplate","formatInteger","SAMPLE_RATE","oggToWav","opusData","arrayBuffer","typedArray","decoderWorker","wavWorker","onmessage","buffers","buffer","page","terminate","wavBitDepth","wavSampleRate","decoderSampleRate","outputBufferSampleRate","pages","asCacheApiType","memoryCache","fetchPromises","progressCallbacks","cancellableCallbacks","mediaFormat","onProgress","callbackUniqueId","getProgressive","fetchFromCacheOrRemote","activeCallbacks","getFromMemory","cancelProgress","parentCallback","progressiveUrl","mediaPng","webpToPng","prepareMedia","mediaSource","MediaSource","streamUrl","sourceBuffer","addSourceBuffer","makeOnProgress","revokeObjectURL","endOfStream","appendBuffer","mediaData","serviceWorker","fullSize","controller","Bundles","LOAD_PROMISES","MEMORY_CACHE","Auth","Main","Extra","Calls","bundle","getDeviceToken","subscription","toJSON","endpoint","checkIfPushSupported","ServiceWorkerRegistration","Notification","permission","soundPlayedIds","playNotifySound","notificationSoundVolume","currentVolume","once","playNotifySoundDebounced","requestPermission","unsubscribeFromPush","dispatch","deleteDeviceToken","serviceWorkerRegistration","ready","pushManager","getSubscription","areSettingsLoaded","checkIfShouldResubscribe","userVisibleOnly","setDeviceToken","DOMException","ABORT_ERR","notifyAboutMessage","isReaction","resultSettings","resultExceptions","loadNotificationSettings","checkIfShouldNotify","areNotificationsSupported","activeReaction","imageHash","getAvatar","messageSender","messageAction","actionTargetMessage","targetUserIds","actionTargetUserIds","actionTargetChatId","actionTargetUsers","privateChatUserId","privateChatUser","isChat","senderName","getNotificationContent","badge","vibrate","onclick","close","startActiveReaction","onshow","closeMessageNotifications","notifyClientReady","PERMANENT_VERSION_KEY","AVAILABLE_VERSIONS","setPermanentWebVersion","version","hasPermanentWebVersion","PATTERN_PLACEHOLDER","DEFAULT_PATTERN","getCountryCodesByIso","phoneCodeList","country","iso2","getCountryFromPhoneNumber","possibleCountries","countryCode","codesWithPrefix","prefixes","prefix","bestMatches","formatPhoneNumber","pattern","numberWithoutCode","patterns","defaultPattern","stripped","getBestPattern","formatPhoneNumberWithCode","numberWithPlus","createMessageHash","messageList","typeOrThreadId","parseLocationHash","isType","fn","waitingTimeout","shouldRunFirst","shouldRunLast","interval","isPending","_args","setInterval","clearInterval","throttleWith","waiting","requestIdleCallback","rafPromise","fastRafCallbacks","fastRafPrimaryCallbacks","onTickEndCallbacks","onTickEndPrimaryCallbacks","beforeUnloadCallbacks","isPrimary","currentCallbacks","currentPrimaryCallbacks","onBeforeUnload","isLast","unshift","RE_NOT_LETTER","haystack","needle","needleWords","haystackLower","haystackWords","needleWord","haystackWord","promisifyRequest","oncomplete","onsuccess","onabort","defaultGetStoreFunc","defaultGetStore","dbName","storeName","dbp","userAgentData","indexedDB","databases","tryIdb","intervalId","onupgradeneeded","createObjectStore","txMode","db","transaction","objectStore","createStore","DC_IDS","hasStoredSession","withLegacy","userAuthJson","dcID","dcId","removeItem","sessionId","sessionJson","customStore","idb","idbKeys","getAllKeys","items","openCursor","continue","eachCursor","isInitialized","HEX_COLOR_REGEX","RGB_VARIABLES","lerp","start","end","interpolationRatio","colors","themeColors","property","hexToRgb","hex","g","applyColorAnimationStep","startIndex","endIndex","propertyColors","withAnimation","isDarkTheme","shouldAnimate","startAt","themeColorTag","querySelector","transition","formatFixedNumber","formatIntegerCompact","views","getFirstLetters","phrase","word","EMPTY_IMAGE_DATA_URI","initWebpWorker","wasmReady","requests","getDecodePromise","ImageData","putImageData","createPng","webpToPngBase64","handleLibWebpMessage","WEBSYNC_URLS","WEBSYNC_VERSION","WEBSYNC_KEY","getTs","lastTimeout","authed","currentTs","canRedirect","ts","script","removeElement","URLSearchParams","saveSync","clearWebsync","IS_LANDSCAPE","isLandscape","initialHeight","currentWindowSize","updateSizes","isRefreshDisabled","handleResize","visualViewport","pageTop","vh","getIsKeyboardVisible","disableRefresh","enableRefresh","WeakMap","fnCache","cacheKey","exports","o","h","v","_","M","S","A","C","getPatternPosition","u","getBCHTypeNumber","getBCHTypeInfo","getMaskFunction","getRSBlocks","getMode","getLength","getLengthInBits","dataCount","putBit","getBuffer","getErrorCorrectPolynomial","mod","getAt","addData","isDark","getModuleCount","make","getLostPoint","createTableTag","createSvgTag","arguments","cellSize","margin","scalable","O","createDataURL","createImgTag","charAt","createASCII","renderTo2dContext","fillStyle","fillRect","stringToBytes","stringToBytesFuncs","createStringToBytes","read","L","Q","H","multiply","gexp","glog","SJIS","writeByte","writeShort","writeBytes","writeString","toByteArray","setPixel","flush","apply","__esModule","defineProperty","enumerable","click","onloadend","svg","_svg","_type","draw","_drawDot","_drawClassy","_drawClassyRounded","_drawRounded","_drawExtraRounded","_drawSquare","getNeighbor","_rotateFigure","rotation","_element","_basicDot","createElementNS","_basicSquare","_basicSideRounded","_basicCornerRounded","_basicCornerExtraRounded","_basicCornersRounded","_basicExtraRounded","throw","done","_defs","_options","getElement","drawQR","shape","sqrt","hideXDots","hideYDots","_qr","loadImage","_image","imageOptions","qrOptions","imageSize","errorCorrectionLevel","SVGImageElement","baseVal","naturalWidth","naturalHeight","originalHeight","originalWidth","maxHiddenDots","maxHiddenAxisDots","dotSize","drawBackground","drawDots","hideBackgroundDots","drawCorners","backgroundOptions","gradient","_createColor","additionalRotation","_backgroundClipPath","dotsOptions","_dotsClipPath","transformOrigin","transform","$","D","cornersSquareOptions","_cornersSquareClipPath","_cornersDotClipPath","cornersDotOptions","crossOrigin","tan","colorStops","typeNumber","static","_setupSvg","_svgDrawingPromise","_extension","_setupCanvas","_canvas","_canvasDrawingPromise","XMLSerializer","serializeToString","btoa","_getElement","_clearContainer","_container","append","applyExtension","deleteExtension","getRawData","encodeURIComponent","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","loaded","__webpack_modules__","getter","getPrototypeOf","obj","ns","create","def","getOwnPropertyNames","definition","chunkId","promises","miniCssF","globalThis","Function","needAttach","scripts","getElementsByTagName","charset","nc","onScriptComplete","doneFns","bind","head","toStringTag","nmd","paths","scriptUrl","importScripts","currentScript","fullhref","existingLinkTags","dataHref","existingStyleTags","findStylesheet","linkTag","errorType","realHref","createStylesheet","miniCss","baseURI","installedChunks","installedChunkData","realSrc","webpackJsonpCallback","parentChunkLoadingFunction","chunkIds","moreModules","runtime","chunkLoadingGlobal","handleWorkerMessage","registrations","getRegistrations","unregister","register","hasErrorKey","INITIAL_STATE","isLeftColumnShown","phoneCodes","general","groupCalls","activeChatFolder","recentEmojis","recent","greeting","featured","emojiKeywords","saved","inlineBots","byUsername","topPeers","topInlineBots","playbackRate","audioPlayer","notifications","dialogs","messageSendKeyCombo","autoLoadFileMaxSizeMb","shouldSuggestStickers","isConnectionStatusMinimized","light","isBlurred","patternColor","dark","activeReactions","shouldShowContextMenuHint","updateCacheThrottled","updateCache","unsubscribeFromBeforeUnload","isCaching","setupCaching","clearCaching","reducedGlobal","reduceShowChatInfo","reduceUsers","reduceChats","reduceMessages","recentlyFoundChatIds","reduceSettings","reduceChatFolders","reduceGroupCalls","reduceAvailableReactions","visibleUserIds","idsToSave","currentChat","mainThread","activeGroupCallId","isGroupCallPanelHidden","isFallbackConfirmOpen","initialState","time","timeEnd","shouldAutoDownloadMediaFromContacts","shouldAutoDownloadMediaInPrivateChats","shouldAutoDownloadMediaInGroups","shouldAutoDownloadMediaInChannels","shouldAutoPlayVideos","shouldAutoPlayGifs","migrateCache","parsedMessageList","readCache","loadCache","STORAGE_KEY","tabKey","SITE_FONTS","preloadFonts","font","fonts","load","preloadAvatars","preloadTasks","main","reactionThumbsPath","telegramLogoPath","authCode","monkeyPath","authPassword","background","hasCustomBackground","hasCustomBackgroundColor","isRightColumnShown","leftColumnWidth","setIsUiReady","isReady","markReady","shouldRenderMask","safePreload","translation","setTranslation","getSuggestedLanguage","suggestedLanguage","MENU_HIDING_DURATION","inputRef","setFilter","filteredList","setFilteredList","updateFilter","filterValue","defaultName","getFilteredList","prevPhoneCodeList","handleInput","handleInputKeyDown","CodeInput","handleTrigger","formEl","getElementById","scrollTo","top","scrollHeight","behavior","inputValue","Spinner","DropdownMenu","MenuItem","isPreloadInitiated","setAuthPhoneNumber","setAuthRememberMe","loadNearestCountry","loadCountryList","clearAuthError","goToAuthQrCode","continueText","useLangString","setCountry","setPhoneNumber","isTouched","setIsTouched","lastSelection","setLastSelection","markIsLoading","unmarkIsLoading","fullNumber","canSubmit","parseFullNumber","newFullNumber","suggestedCountry","selectedCountry","handleLangChange","setSelectionRange","isJustPastedRef","handlePaste","handleCountryChange","handlePhoneNumberChange","selectionStart","selectionEnd","shouldFixSafariAutoComplete","handleKeepSessionChange","isAuthReady","onSubmit","InputText","Checkbox","Button","Loading","AuthCode","useModuleLoader","AuthPassword","AuthRegister","QR_CODE","QrCodeStyling","blankUrl","returnToAuthPhoneNumber","qrCodeRef","isQrMounted","markQrMounted","unmarkQrMounted","setAnimationData","isAnimationLoaded","setIsAnimationLoaded","handleAnimationLoad","parentElement","token","AnimatedSticker","isMobile","windowSize","AuthQrCode","handleReload","appInactivePath","renderMain","disconnect","markInactive","TeactDOM"],"sourceRoot":""} \ No newline at end of file diff --git a/dist/main.1e16878f02d07901172c.css.map b/dist/main.1e16878f02d07901172c.css.map deleted file mode 100644 index 961ca6844..000000000 --- a/dist/main.1e16878f02d07901172c.css.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"main.1e16878f02d07901172c.css","mappings":"AACE,oBACE,eACA,yDACA,wCACA,oBAEA,sKAIE,yDAGF,gCACE,8BAIJ,mBACE,oDAGF,kBACE,UACA,8BAGF,sCACE,0CACA,UAIJ,+BACE,IACE,UAEF,IACE,YAEF,IACE,+B;AC1CJ,MACE,cAEA,YACE,cAEA,0BACE,qB;ACPN,UACE,YACA,yBAFF,UAGI,iCAGF,gBACE,eACA,MACA,OACA,QACA,cACA,WACA,YACA,gCACA,aAGA,yBAZF,gBAaI,aACA,+BACA,yBAGF,sBACE,OACA,mCACA,gBACA,WACA,kBAEA,yBAPF,sBAQI,gBAGF,0BAXF,sBAYI,WACA,gBAGF,0BAhBF,sBAiBI,QAGF,yBApBF,sBAqBI,0BAGF,yBAxBF,sBAyBI,eACA,wBAIJ,wBACE,OACA,2CACA,4CACA,kBACA,UACA,gBAEA,gCACE,WACA,cACA,kBACA,MACA,OACA,SACA,QACA,4BACA,sBACA,WACA,6BAEA,yDACE,yBACA,yDACA,6BACA,sBACA,yBAGF,6GAEE,yDAIJ,0FACE,sBAGF,sCACE,gCACE,8BAIJ,gDACE,aACA,iCAGF,0BAlDF,wBAmDI,OACA,mBAGF,yBAvDF,wBAwDI,cAIJ,uBACE,kBACA,MACA,QACA,UACA,YACA,gCACA,2CACA,mCAIJ,iBACE,OACA,sC;AChIJ,SACE,qBAEA,kBACA,aACA,mBACA,uBAEA,0BACA,2BAEA,aACE,kBACA,MACA,OACA,QACA,SAEA,4BACA,qBAEA,oBACA,sBACA,mCACA,iCAIA,iCACE,WACA,kBACA,eACA,cACA,iBACA,gBACA,kBAGF,yCACE,2BAGF,0CACE,gCAKF,mBACE,2CAIA,mCACE,gDAMJ,kBACE,0CAEA,8BACE,+CAMJ,mBACE,2CAKF,mBACE,2CAKF,kBACE,0CAKF,oBACE,4CAKN,gBACE,KACE,uBAGF,GACE,0B;ACtFJ,4BACE,KACE,mBACA,UAEF,IACE,UAEF,GACE,UACA,oBAIJ,kBACE,kBACA,MACA,OACA,SACA,QAEA,yCACE,aAGF,uBACE,kBACA,cACA,0DACA,kBACA,mBACA,iC;ACpBJ,QACE,wBACA,aACA,mBACA,uBACA,WACA,cACA,SACA,2CACA,6BACA,sBACA,gBACA,WACA,gBACA,eACA,yBACA,cACA,kBACA,gBACA,4CACA,gCAGA,8DAGE,2BAGF,iBACE,sBACA,eACA,oBAGF,cACE,aACA,kBAEA,gBACE,iBAIJ,gBACE,sCACA,yBACA,oCAtEA,8JAyEE,4CApEF,qBACE,oDAmEA,6CAzDA,4EA6DA,mDAIJ,kBACE,yCACA,kDACA,oCApFA,oKAuFE,sCACA,WAnFF,qBACE,sDAiFA,sCACA,YAxEA,8EA4EA,4CAIJ,aACE,yCACA,kCACA,oCAnGA,qJAsGE,2BAjGF,qBACE,iDAgGA,4BAtFA,yEA0FA,yCAIJ,eACE,yCACA,yBACA,mDAjHA,2JAoHE,oCACA,yBAhHF,qBACE,mDA8GA,oCACA,0BArGA,2EAyGA,0CAIJ,aACE,6BAEA,qBACE,2BACA,6BAlIF,6KAqII,4DAhIJ,qBACE,yDA+HE,6DArHF,iFAyHE,4DAIJ,uBACE,6BACA,kCA/IF,0KAoJI,oDACA,yBAhJJ,qBACE,wDA8IE,oDACA,0BArIF,gFAyIE,oDAKN,cACE,WA/JA,wJAkKE,UA7JF,qBACE,kDA4JA,WAGF,wBACE,UAIJ,oBACE,6BACA,kCAEA,uDA9KA,0KAiLE,wDA5KF,qBACE,wDA2KA,yDAjKA,gFAqKA,6DAGF,8BACE,2BAIJ,0BACE,6BACA,2BACA,0CAhMA,4LAmME,uCACA,WA/LF,qBACE,8DA6LA,uCACA,YApLA,sFAwLA,uCAIJ,0BACE,6BACA,qBACA,oCA/MA,4LAkNE,iCA7MF,qBACE,8DA4MA,kCAlMA,sFAsMA,iCAIJ,aACE,iCACA,WACA,0CA7NA,qJAgOE,iCACA,WA5NF,qBACE,iDA0NA,iCACA,YAjNA,yEAqNA,iCAIJ,gBACE,eACA,iBAEA,sBACE,cAGF,qBACE,cACA,sBACA,sBAGF,0BACE,oBACA,sBAEA,4BACE,iBACA,mBAGF,mCACE,qBACA,qBAEA,qCACE,kBACA,eAKN,yBAlCF,gBAmCI,cAEA,sBACE,cAKN,aACE,eACA,iBACA,iDACA,kBACA,gBAEA,mBACE,cACA,eACA,kBAGF,eACE,kBAGF,kBACE,YACA,mBACA,sBACA,eAIJ,cACE,qBACA,sBACA,WAEA,mBACE,sBACA,uBAIJ,aACE,sBACA,qBACA,sBACA,oBAGF,gBACE,kBACA,oBAEA,yBACE,kBACA,cACA,YAEA,0BAIJ,eACE,oB;AC/UJ,UACE,cACA,kBACA,oBACA,gBACA,qBACA,mBACA,eAEA,mBACE,oBACA,WAKE,uCACE,kBAGF,sCACE,0FAGA,qBACA,kBAMJ,iFAEE,qBAGF,2BACE,kBACA,aACA,YACA,UACA,oCACA,wBAMA,8DACE,gCAGF,6DACE,yDACA,UAGA,yBACA,wCAKN,gBACE,kBACA,uBACA,UAIA,iEAEE,WACA,cACA,kBACA,eACA,aACA,eACA,gBAGF,iCACE,4CACA,qBACA,yCACA,2DAGF,gCAEE,oEAEA,wBACA,UACA,4BAGF,gCACE,cACA,mBAGF,mCACE,cACA,kBACA,iBACA,kCAKF,+CACE,kCACA,sCAGF,8CACE,UAIJ,mBACE,eACA,qBAGE,oCACE,UACA,cAIJ,uDAEE,iBAIA,mFAEE,UACA,g1C;AC7IR,SACE,aACA,YACA,mBACA,uBAEA,qBACE,eAGF,kBACE,wB;ACVF,oBACE,kBACA,WAGF,gBACE,eACA,YACA,aACA,WACA,cACA,+BAGF,cACE,gBACA,cACA,gBACA,gBACA,SACA,kBACA,yCACA,8DACA,2CACA,kBACA,6BACA,4BAEA,qBACA,0GAeA,gCACA,cAdA,mBACE,mBAGF,sBACE,gEAGF,qCACE,0BACA,mCAMF,kBACE,oBAGF,qBACE,uBAGF,mBACE,qBAGF,oBACE,sBAGF,0BACE,iBAIJ,wDACE,2BAGF,cACE,gBACA,mCACA,kCACA,mBACA,kBAIA,sBACE,gDACA,8DACA,iBAGF,sBACE,gBAGF,8BACE,mC;AC7FN,cACE,kB;ACDF,UACE,WACA,gBACA,uBACA,2BACA,wBACA,aACA,oBACA,kBACA,gBACA,mBACA,mBACA,wBACA,oCACA,eACA,uBAEA,qBACE,gCAEE,yCACA,qBACA,eAIJ,yBACE,iDAGE,qBACA,cAGF,iBACE,0CAIJ,YACE,iBACA,kBACA,kCAGF,0BACE,kBAEA,qCACE,0BAIJ,mBACE,sBACA,0BAGF,sBACE,yBAEA,wBACE,cAIJ,+DACE,0CACA,2BAGF,oBACE,iBAIA,qBACE,iBACA,eAGF,mCACE,iBACA,eAGF,6BACE,cACA,kBAIJ,kBACE,mBACA,kBACA,sBACA,eACA,sBACA,WACA,gBACA,mBACA,sCAEA,oBACE,kBACA,kBACA,kBACA,qBAEA,4BACE,kBAIJ,qBACE,yEAGE,sDACA,qBAGF,yBACE,uB;AC1HN,+BACE,eAEA,0CAEA,wCACE,kBACA,SACA,aACA,WACA,uBAIF,8CACE,kBACA,aACA,WACA,aACA,cACA,6CACA,aACA,cACA,kCAEA,0DAEA,mDACE,kCACA,mCACA,WAKN,0BACE,WACA,mBACA,gBACA,uCACA,sBAEA,+BACE,oBAKF,mCACE,aACA,mBAGF,8CACE,uBACA,mBAEA,mDACE,kBAKN,gCACE,eACA,kBAEA,uCACE,WACA,YACA,qBACA,mBACA,uBAIJ,gCACE,mBACA,gBACA,uBACA,kBACA,gBAGF,gCACE,iBACA,WACA,qB;ACxFJ,WACE,WACA,kBACA,cACA,uBACA,kBAEA,gDAPF,WAQI,gCAEA,cACE,kBAIJ,kDAEE,cACA,iBACA,kBACA,aACA,cACA,sBAEA,gDATF,kDAUI,YACA,aACA,sBAIJ,iBACE,oEACA,qBAGF,cACE,kBACA,cAEA,yBAJF,cAKI,eACA,iBAIJ,iBACE,kBACA,iBACA,qBACA,kCAEA,yBANF,iBAOI,eACA,oBAKN,kGAKE,YACA,gBAIA,6BACE,oBAGF,gCACE,mBAGF,wCACE,gBAMF,0CACE,aACA,mBACA,uBAIJ,kBACE,aACA,cACA,cACA,iBACA,kCACA,YACA,aACA,mBACA,uBACA,eAEA,gDAEE,UAKF,sDAEE,aAGF,0BACE,aACA,uBACA,kBAEA,UACA,mBACA,2EACA,sCACE,WACA,qBAIJ,wBACE,kBACA,QACA,SACA,gCACA,UACA,kBACA,4CAGF,4BACE,sBACA,2CACA,gBAGF,iBACE,uBAGF,iBACE,gBACA,mBACA,kBAEA,oBACE,uBACA,gBACA,gBACA,aAEA,4BACE,sBACA,aACA,uBACA,mBACA,mBACA,gBACA,UACA,oBACA,gCACA,kBACA,kBACA,WAMR,kBACE,kC;ACnLF,aACE,YACA,aACA,sBACA,mBACA,uBAEA,sBACE,gBACA,YACA,eACA,kBAGF,oBACE,gBAGF,0BACE,kCACA,kBAGF,iBACE,WACA,gBAGF,qBACE,gB;AC7BJ,iBAAiB;AACjB;EACE,qBAAqB;EACrB,kBAAkB;EAClB,gBAAgB;EAChB,kBAAkB;EAClB,sGAAsG;EACtG,sFAAsF;AACxF;AACA,aAAa;AACb;EACE,qBAAqB;EACrB,kBAAkB;EAClB,gBAAgB;EAChB,kBAAkB;EAClB,sGAAsG;EACtG,4DAA4D;AAC9D;AACA,cAAc;AACd;EACE,qBAAqB;EACrB,kBAAkB;EAClB,gBAAgB;EAChB,kBAAkB;EAClB,sGAAsG;EACtG,0BAA0B;AAC5B;AACA,UAAU;AACV;EACE,qBAAqB;EACrB,kBAAkB;EAClB,gBAAgB;EAChB,kBAAkB;EAClB,sGAAsG;EACtG,0BAA0B;AAC5B;AACA,eAAe;AACf;EACE,qBAAqB;EACrB,kBAAkB;EAClB,gBAAgB;EAChB,kBAAkB;EAClB,sGAAsG;EACtG,4DAA4D;AAC9D;AACA,cAAc;AACd;EACE,qBAAqB;EACrB,kBAAkB;EAClB,gBAAgB;EAChB,kBAAkB;EAClB,sGAAsG;EACtG,mHAAmH;AACrH;AACA,UAAU;AACV;EACE,qBAAqB;EACrB,kBAAkB;EAClB,gBAAgB;EAChB,kBAAkB;EAClB,sGAAoG;EACpG,yKAAyK;AAC3K;AACA,iBAAiB;AACjB;EACE,qBAAqB;EACrB,kBAAkB;EAClB,gBAAgB;EAChB,kBAAkB;EAClB,4GAAgH;EAChH,sFAAsF;AACxF;AACA,aAAa;AACb;EACE,qBAAqB;EACrB,kBAAkB;EAClB,gBAAgB;EAChB,kBAAkB;EAClB,4GAAgH;EAChH,4DAA4D;AAC9D;AACA,cAAc;AACd;EACE,qBAAqB;EACrB,kBAAkB;EAClB,gBAAgB;EAChB,kBAAkB;EAClB,4GAAgH;EAChH,0BAA0B;AAC5B;AACA,UAAU;AACV;EACE,qBAAqB;EACrB,kBAAkB;EAClB,gBAAgB;EAChB,kBAAkB;EAClB,6GAAgH;EAChH,0BAA0B;AAC5B;AACA,eAAe;AACf;EACE,qBAAqB;EACrB,kBAAkB;EAClB,gBAAgB;EAChB,kBAAkB;EAClB,6GAAgH;EAChH,4DAA4D;AAC9D;AACA,cAAc;AACd;EACE,qBAAqB;EACrB,kBAAkB;EAClB,gBAAgB;EAChB,kBAAkB;EAClB,6GAAgH;EAChH,mHAAmH;AACrH;AACA,UAAU;AACV;EACE,qBAAqB;EACrB,kBAAkB;EAClB,gBAAgB;EAChB,kBAAkB;EAClB,6GAA8G;EAC9G,yKAAyK;AAC3K;;AAEA,+DAA+D;AAC/D;EACE,sBAAsB;EACtB;yDAC+C;EAC/C,mBAAmB;EACnB,iBAAiB;EACjB,yBAAyB;AAC3B;;AAEA,+DAA+D;AAC/D;EACE,sBAAsB;EACtB;yDAC8C;EAC9C,gBAAgB;EAChB,iBAAiB;EACjB,0BAA0B;AAC5B;;AC1IQ,qBCPR,qBAGE,MAGF,sBACE,iBACA,8BACA,0BACA,6BACA,6CACA,CAIA,6EAEF,aAWE,MAGF,QACE,uBAGF,uBACE,IAGF,sBACE,SACA,iBACA,mBAGF,YAME,oBACA,gBACA,uCAGF,yBAEE,yCACA,CADA,gCACA,YACA,gBACA,SAGF,kBACE,kBACA,oBACA,YAGF,YAIE,mBACA,yBAGF,eAIE,IAGF,mBACE,cACA,mBAGF,eAEE,KAGF,iBACE,aAGF,eAGE,OAGF,aACE,SAGF,iBAEE,cACA,cACA,wBACA,KAGF,cACE,KAGF,UACE,GAGF,wBACE,qBACA,6BACA,qCACA,SAEF,aACE,0BACA,uGAGF,aAGE,qBACA,qCAEF,SACE,mBAGF,uHAIE,qBAEA,KAGF,YACE,mBACA,cACA,6BACA,KAGF,qBACE,kBACA,gBAGF,eACE,mFAGF,yBASE,OAGF,wBACE,SAGF,kBACE,sBACA,cACA,gBACA,oBACA,IAGF,kBACE,OAGF,oBACE,oBACA,QAGF,eACE,cAGF,kBACE,0CACA,uCAGF,QAKE,oBACA,kBACA,oBACA,cAGF,gBAEE,eAGF,mBAEE,sDAGF,yBAIE,yHAGF,SAIE,kBACA,wCAGF,qBAEE,UACA,gFAGF,0BAIE,UAGF,aACE,gBACA,UAGF,WACE,UACA,SACA,SACA,QAGF,aACE,WACA,eACA,UACA,oBACA,iBACA,oBACA,cACA,mBACA,UAGF,uBACE,mFAGF,WAEE,eAGF,mBACE,wBACA,sFAGF,uBAEE,8BAGF,YACE,0BACA,QAGF,oBACE,SAGF,iBACE,UAGF,YACE,UAGF,uBACE,OCnQF,2BACE,2CACA,qDACA,iDACA,qCACA,sCACA,6CACA,gCACA,wEACA,sBACA,8BACA,gCACA,gCACA,0CACA,sCACA,2BACA,qCACA,mCACA,iCACA,4BACA,oCACA,yBACA,+BACA,0BACA,4CACA,iDACA,0EACA,0EACA,+EACA,mCACA,yBAEA,+BACA,sCACA,wCACA,yDACA,uBACA,8BACA,uBAEA,6BACA,+BACA,yBAEA,wBAEA,uBAEA,2BAEA,8BAEA,wBAEA,sBAEA,2CACA,0BACA,+CACA,4BAEA,kCACA,kDAEA,8DACA,0DACA,sEACA,6BAEA,8BACA,iCACA,kCACA,sCAEA,uCACA,wCACA,uBAEA,sBACA,4BAEA,6BACA,6BACA,qCAEA,2DACA,wBAEA,wBACA,wBACA,wBACA,wBACA,wBACA,wBACA,kCAEA,gCACA,oDAEA,sDACA,+BAEA,UAEA,iCAEA,wCACA,uCACA,kCACA,yCACA,oCACA,8BACA,wBACA,8BAEA,+BACA,kCACA,yBAgBA,uBACA,sBACA,qBACA,8BACA,gBACA,uBACA,kBACA,uBACA,oBACA,sBACA,4BACA,6BACA,2BACA,sBACA,sBACA,sBACA,iCACA,8BACA,2BACA,mBACA,2BACA,yBACA,qBACA,cACA,8DAEA,mEACA,6DACA,kEACA,8DACA,8DACA,6DACA,+DACA,8DAEA,sEACA,8BAEA,yDAEA,wDACA,oCACA,kDAxDA,MAvHF,0BAwHI,4BAGF,MA3HF,gCA4HI,2BAGF,MA/HF,2BAgII,2BACA,iCACA,oBA+CF,wDACE,wDACA,uBAGF,uDACE,wDACA,MC1NA,mBACE,aAEF,uBAEE,aAEF,yBAEE,aAEF,0BAEE,aAEF,wBAEE,MAjBF,wBACE,aAEF,4BAEE,aAEF,8BAEE,aAEF,+BAEE,aAEF,6BAEE,MAjBF,uBACE,aAEF,2BAEE,aAEF,6BAEE,aAEF,8BAEE,aAEF,4BAEE,MAjBF,sBACE,aAEF,0BAEE,aAEF,4BAEE,aAEF,6BAEE,aAEF,2BAEE,MAjBF,wBACE,aAEF,4BAEE,aAEF,8BAEE,aAEF,+BAEE,aAEF,6BAEE,MAjBF,sBACE,aAEF,0BAEE,aAEF,4BAEE,aAEF,6BAEE,aAEF,2BAEE,MAjBF,sBACE,aAEF,0BAEE,aAEF,4BAEE,aAEF,6BAEE,aAEF,2BAEE,MAjBF,oBACE,aAEF,wBAEE,aAEF,0BAEE,aAEF,2BAEE,aAEF,yBAEE,MAjBF,yBACE,aAEF,6BAEE,aAEF,+BAEE,aAEF,gCAEE,aAEF,8BAEE,MAjBF,wBACE,aAEF,4BAEE,aAEF,8BAEE,aAEF,+BAEE,aAEF,6BAEE,MAjBF,uBACE,aAEF,2BAEE,aAEF,6BAEE,aAEF,8BAEE,aAEF,4BAEE,MAjBF,yBACE,aAEF,6BAEE,aAEF,+BAEE,aAEF,gCAEE,aAEF,8BAEE,MAjBF,uBACE,aAEF,2BAEE,aAEF,6BAEE,aAEF,8BAEE,aAEF,4BAEE,MAjBF,uBACE,aAEF,2BAEE,aAEF,6BAEE,aAEF,8BAEE,aAEF,4BAEE,cChDN,iBACE,qBACA,oBAEA,aACE,iBACA,kBACA,YACA,aACA,yCACA,eACA,gBACA,gCACA,uDACA,YACA,oBACA,6BACA,mBACA,gCAIA,UACE,kBACA,cACA,aACA,kDACA,oDACA,yBACA,WACA,SACA,8JAIJ,kDAKE,yEAGF,+BAEE,4BAGF,iCACE,0BAGF,mCACE,4BAGF,wCACE,uBAGF,UACE,oBACA,6BAIA,gBACE,6BAGF,SACE,aACA,yCAIA,gBACE,mDACA,WACA,UACA,2MAIJ,iDAKE,eAKN,mBACE,cACA,WACA,gBACA,6EACA,4DACA,2CACA,wBACA,yCACA,aACA,kCACA,sBACA,wBACA,eAEA,oBACA,oBAEA,kBACE,qBAGF,iCACE,2BAEA,0BACE,yCAIJ,iCAEE,gDACA,iCACA,qDAEA,0BACE,wBAIJ,0BACE,sBAGF,+BACE,8CACA,+BACA,wBAGF,oCACE,mDACA,oCACA,4BAKF,gBACE,uBAIJ,WACE,gBACA,sBACA,6CACA,gDACA,6BAGF,iBACE,2CAEA,sBACE,8CAGF,iBACE,MACA,QACA,eACA,gBACA,aACA,mBACA,uBACA,eACA,wBACA,kCAEA,WACA,iBACA,uGAEA,SAEE,oDAKF,qBACE,gDACA,uDAGF,MACE,WACA,YC3MN,qBACE,qHACA,mBAEA,kBACA,mBACA,kCAGF,gCAGE,WACA,kBACA,mBACA,oBACA,oBACA,cACA,mCAGA,kCACA,4DAIA,8CACE,wBACA,aACA,kBACA,cACA,mBAIJ,WACE,wBAEF,WACE,4BAEF,WACE,uBAEF,WACE,uBAEF,WACE,uBAEF,WACE,oBAEF,WACE,yBAEF,WACE,8BAEF,WACE,wBAEF,WACE,sBAEF,WACE,yBAEF,WACE,sBAEF,WACE,8BAEF,WACE,oCAEF,WACE,0BAEF,WACE,gCAEF,WACE,2BAEF,WACE,yBAEF,WACE,oBAEF,WACE,gCAEF,WACE,4BAEF,WACE,kCAEF,WACE,2BAEF,WACE,kBAEF,WACE,mBAEF,WACE,uBAEF,WACE,yBAEF,WACE,oBAEF,WACE,uBAEF,WACE,0BAEF,WACE,mBAEF,WACE,oBAEF,WACE,2BAEF,WACE,mBAEF,WACE,0BAEF,WACE,8BAEF,WACE,uBAEF,WACE,+BAEF,WACE,yBAEF,WACE,oBAEF,WACE,qBAEF,WACE,mBAEF,WACE,sBAEF,WACE,wBAEF,WACE,mBAEF,WACE,2BAEF,WACE,uBAEF,WACE,uBAEF,WACE,sBAEF,WACE,uBAEF,WACE,4BAEF,WACE,yBAEF,WACE,sBAEF,WACE,uBAEF,WACE,qBAEF,WACE,qBAEF,WACE,mBAEF,WACE,uBAEF,WACE,6BAEF,WACE,uBAEF,WACE,sBAEF,WACE,oBAEF,WACE,mBAEF,WACE,mBAEF,WACE,0BAEF,WACE,4BAEF,WACE,qBAEF,WACE,mBAEF,WACE,8BAEF,WACE,mBAEF,WACE,2BAEF,WACE,8BAEF,WACE,uBAEF,WACE,0BAEF,WACE,yBAEF,WACE,6BAEF,WACE,mBAEF,WACE,qBAEF,WACE,oBAEF,WACE,uBAEF,WACE,qBAEF,WACE,yBAEF,WACE,qBAEF,WACE,6BAEF,WACE,uBAEF,WACE,oBAEF,WACE,qBAEF,WACE,mBAEF,WACE,sBAEF,WACE,oBAEF,WACE,mBAEF,WACE,2BAEF,WACE,8BAEF,WACE,oBAEF,WACE,uBAEF,WACE,uBAEF,WACE,mBAEF,WACE,sBAEF,WACE,wBAEF,WACE,wBAEF,WACE,qBAEF,WACE,sBAEF,WACE,mBAEF,WACE,qBAEF,WACE,mBAEF,WACE,qBAEF,WACE,kBAEF,WACE,oBAEF,WACE,0BAEF,WACE,yBAEF,WACE,0BAEF,WACE,yBAEF,WACE,oBAEF,WACE,mBAEF,WACE,2BAEF,WACE,gCAEF,WACE,2BAEF,WACE,8BAEF,WACE,6BAEF,WACE,uBAEF,WACE,uBAEF,WACE,0BAEF,WACE,qBAEF,WACE,mBAEF,WACE,uBAEF,WACE,oBAEF,WACE,sBAEF,WACE,mBAEF,WACE,oBAEF,WACE,kBAEF,WACE,mBAEF,WACE,uBAEF,WACE,mBAEF,WACE,mBAEF,WACE,qBAEF,WACE,qBAEF,WACE,kBAEF,WACE,oBAEF,WACE,oBAEF,WACE,yBAEF,WACE,0BAEF,WACE,mBAEF,WACE,iBAEF,WACE,yBAEF,WACE,kBAEF,WACE,oBAEF,WACE,oCAEF,WACE,qCAEF,WACE,oCAEF,WACE,0BAEF,WACE,cCneF,iBACE,qCAEA,aAEE,iBACA,oBAGF,4BACE,wBACA,oGAGF,iBAGE,sBAIJ,iBACE,yBACA,+EAEA,cAGE,eACA,sBACA,6CACA,6CACA,0DAGF,iBAEE,OACA,MACA,WACA,8BAGF,uBACE,yHAIA,eAGE,iCAIJ,wBACE,yCAEA,4DACE,wCAGF,4DACE,YAMN,kCACE,YACA,qCACA,gBAEA,gCCrEA,2BDsEA,kBCrEE,kBAGA,+BDsEF,iBACE,0CAGF,QACE,0BAGF,WAlBF,cAmBI,gBACA,yBAGF,4BACE,gBACA,kBACA,gBAMF,iCACE,gBAGF,iCACE,gBAGF,iCACE,gBAGF,iCACE,gBAGF,iCACE,gBAGF,iCACE,gBAGF,iCACE,4CAGF,kCAEE,qBAGF,+BACE,cE1IJ,2BACE,eAGE,yMAGF,uBAYE,eAGF,2BACE,uGAGF,sBAUE,4BACA,yBACA,2BACA,oBACA,qBACA,sBACA,0BACA,0BACA,qBAGF,2BACE,sBACA,kIAGF,iDAIE,mCACA,YR/CJ,UAEE,YACA,mCACA,SACA,UACA,eACA,kKACA,wBAEA,gBACA,gBACA,gBACA,gBACA,mCACA,kCACA,0BAEA,UAlBF,+BAmBI,4BAIJ,+GAEE,kCAGF,6KAEE,mGAGA,6KAEE,aAKJ,8BACE,uCACA,6CAGF,0BAEE,uBAGF,2BACE,OAGF,WACE,0BACA,MAFF,+BAGI,kCAIJ,iBAEE,MACA,OACA,QACA,SAGF,iBACE,eAGF,gBACE,oCACA,gBAGF,YACE,kBACA,MACA,eACA,SACA,aACA,+BACA,iBACA,0BAEA,eAVF,aAWI,mBAQJ,4BACE,QACA,SACA,gBACA,sBACA,WACA,kBAGF,UACE,qCAEA,6BAEE,GAIJ,qBACE,qFAGF,0BAGE,iCAGF,oBAEE,6CACA,oCACA,iCAEA,oBAEA,mFAEA,iCACE,sBACA,yCAEA,mJAGF,6CAGE,ySAEA,kCACE,qDAOF,aACE,uDAKF,cACE,eAKN,oBACE,kCAEA,YACE,cAIJ,oBACE,wBACA,kBACA,qBACA,cACA,eACA,sBACA,gBACA,cACA,yBAEA,uDACE,kBACA,kBAIJ,uBACE,eACA,qBAGF,SACE,6BACA,gCAEA,SACE,iCAGF,YACE,0BAGF,uBACE,gBAIJ,qCACE,eAGF,mCACE,aAGF,4CACE,YAGF,iBACE,OACA,MACA,QACA,SACA,UACA,iCAGF,cACE,eACA,UACA,YACA,WACA,sBAGF,GACE,oBACE,WACA,KAEF,oBACE,UACA,MAEF,kBACE,uBAIJ,KACE,kBACE,WACA,IAEF,oBACE,UACA,6mH","sources":["webpack://telegram-t/./src/components/common/spoiler/Spoiler.scss","webpack://telegram-t/./src/components/ui/Link.scss","webpack://telegram-t/./src/components/common/UiLoader.scss","webpack://telegram-t/./src/components/ui/Spinner.scss","webpack://telegram-t/./src/components/ui/RippleEffect.scss","webpack://telegram-t/./src/components/ui/Button.scss","webpack://telegram-t/./src/components/ui/Checkbox.scss","webpack://telegram-t/./src/components/ui/Loading.scss","webpack://telegram-t/./src/components/ui/Menu.scss","webpack://telegram-t/./src/components/ui/DropdownMenu.scss","webpack://telegram-t/./src/components/ui/MenuItem.scss","webpack://telegram-t/./src/components/auth/CountryCodeInput.scss","webpack://telegram-t/./src/components/auth/Auth.scss","webpack://telegram-t/./src/components/main/AppInactive.scss","webpack://telegram-t/./src/assets/fonts/roboto.css","webpack://telegram-t/./src/styles/index.scss","webpack://telegram-t/./src/styles/reboot.css","webpack://telegram-t/./src/styles/_variables.scss","webpack://telegram-t/./src/styles/_spacing.scss","webpack://telegram-t/./src/styles/_forms.scss","webpack://telegram-t/./src/styles/icons.scss","webpack://telegram-t/./src/styles/_common.scss","webpack://telegram-t/./src/styles/_mixins.scss","webpack://telegram-t/./src/styles/print.scss"],"sourcesContent":[".Spoiler {\n &--concealed {\n cursor: pointer;\n background-image: url('../../../assets/spoiler-dots-black.png');\n background-size: auto min(100%, 1.125rem);\n border-radius: 0.5rem;\n\n html.theme-dark &,\n html.theme-light .ListItem.selected &,\n .ActionMessage &,\n .MediaViewerFooter & {\n background-image: url('../../../assets/spoiler-dots-white.png');\n }\n\n .emoji-only & {\n background-size: auto 1.125rem;\n }\n }\n\n &--animated {\n animation: pulse-opacity-light 1.75s linear infinite;\n }\n\n &__content {\n opacity: 1;\n transition: opacity 250ms ease;\n }\n\n &--concealed &__content {\n user-select: none;\n opacity: 0;\n }\n}\n\n@keyframes pulse-opacity-light {\n 25% {\n opacity: 1;\n }\n 50% {\n opacity: 0.25;\n }\n 75% {\n opacity: 1;\n }\n}\n",".Link {\n color: inherit;\n\n &:hover {\n color: inherit;\n\n &.GroupCallLink {\n text-decoration: none;\n }\n }\n}\n","#UiLoader {\n height: 100%;\n @media (max-width: 600px) {\n height: calc(var(--vh, 1vh) * 100);\n }\n\n .mask {\n position: fixed;\n top: 0;\n left: 0;\n right: 0;\n margin: 0 auto;\n width: 100%;\n height: 100%;\n z-index: var(--z-ui-loader-mask);\n display: flex;\n\n\n @media (min-width: 600px) {\n display: grid;\n grid-template-columns: auto 1fr;\n grid-template-rows: 100%;\n }\n\n .left {\n flex: 1;\n background: var(--color-background);\n min-width: 12rem;\n width: 33vw;\n max-width: 26.5rem;\n\n @media (min-width: 926px) {\n max-width: 40vw;\n }\n\n @media (min-width: 1276px) {\n width: 25vw;\n max-width: 33vw;\n }\n\n @media (max-width: 1275px) {\n flex: 2;\n }\n\n @media (max-width: 925px) {\n width: 26.5rem !important;\n }\n\n @media (max-width: 600px) {\n max-width: none;\n width: 100vw !important;\n }\n }\n\n .middle {\n flex: 3;\n border-left: 1px solid var(--color-borders);\n border-right: 1px solid var(--color-borders);\n position: relative;\n z-index: 1;\n overflow: hidden;\n\n &::before {\n content: \"\";\n display: block;\n position: absolute;\n top: 0;\n left: 0;\n bottom: 0;\n right: 0;\n background: no-repeat center;\n background-size: cover;\n z-index: -1;\n transform-origin: left center;\n\n .theme-dark body.initial & {\n background-color: #0f0f0f;\n background-image: url('../../assets/chat-bg-dark.png');\n background-position: top left;\n background-size: 650px;\n background-repeat: repeat;\n }\n\n .theme-light body.initial &,\n body:not(.initial) & {\n background-image: url('../../assets/chat-bg.jpg');\n }\n }\n\n html.theme-light body.animation-level-2 &.with-right-column::before {\n transform: scale(0.67);\n }\n\n @media screen and (min-width: 1276px) {\n &::before {\n margin: -16rem -5rem -20rem 0;\n }\n }\n\n &.custom-bg-image::before {\n margin: -1rem;\n background-image: none !important;\n }\n\n @media (max-width: 1275px) {\n flex: 3;\n border-right: none;\n }\n\n @media (max-width: 600px) {\n display: none;\n }\n }\n\n .right {\n position: absolute;\n top: 0;\n right: 0;\n z-index: 1;\n height: 100%;\n width: var(--right-column-width);\n border-left: 1px solid var(--color-borders);\n background: var(--color-background);\n }\n }\n\n .blank {\n flex: 1;\n background: var(--color-background);\n }\n}\n",".Spinner {\n --spinner-size: 2rem;\n\n position: relative;\n display: flex;\n align-items: center;\n justify-content: center;\n\n width: var(--spinner-size);\n height: var(--spinner-size);\n\n > div {\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n\n background-repeat: no-repeat;\n background-size: 100%;\n\n animation-name: spin;\n animation-duration: 1s;\n animation-iteration-count: infinite;\n animation-timing-function: linear;\n }\n\n &.with-background {\n &::before {\n content: '';\n position: absolute;\n left: -0.125rem;\n top: -0.125rem;\n bottom: -0.125rem;\n right: -0.125rem;\n border-radius: 50%;\n }\n\n &.bg-dark::before {\n background: rgba(0, 0, 0, 0.25);\n }\n\n &.bg-light::before {\n background: rgba(255, 255, 255, 0.4);\n }\n }\n\n &.white {\n > div {\n background-image: var(--spinner-white-data);\n }\n\n &.with-background {\n > div {\n background-image: var(--spinner-white-thin-data);\n }\n }\n }\n\n &.blue {\n > div {\n background-image: var(--spinner-blue-data);\n\n .theme-dark & {\n background-image: var(--spinner-dark-blue-data);\n }\n }\n }\n\n &.black {\n > div {\n background-image: var(--spinner-black-data);\n }\n }\n\n &.green {\n > div {\n background-image: var(--spinner-green-data);\n }\n }\n\n &.gray {\n > div {\n background-image: var(--spinner-gray-data);\n }\n }\n\n &.yellow {\n > div {\n background-image: var(--spinner-yellow-data);\n }\n }\n}\n\n@keyframes spin {\n from {\n transform: rotate(0deg);\n }\n\n to {\n transform: rotate(360deg);\n }\n}\n\n","@-webkit-keyframes ripple-animation {\n from {\n transform: scale(0);\n opacity: 1;\n }\n 50% {\n opacity: 1;\n }\n to {\n opacity: 0;\n transform: scale(2);\n }\n}\n\n@keyframes ripple-animation {\n from {\n transform: scale(0);\n opacity: 1;\n }\n 50% {\n opacity: 1;\n }\n to {\n opacity: 0;\n transform: scale(2);\n }\n}\n\n.ripple-container {\n position: absolute;\n top: 0;\n left: 0;\n bottom: 0;\n right: 0;\n\n body.animation-level-0 & {\n display: none;\n }\n\n span {\n position: absolute;\n display: block;\n background-color: var(--ripple-color, rgba(0, 0, 0, 0.08));\n border-radius: 50%;\n transform: scale(0);\n animation: ripple-animation 700ms;\n }\n}\n","@mixin active-styles() {\n &:not(.disabled):not(:disabled) {\n &:active,\n &.active,\n &:focus {\n @content;\n }\n @media (hover: hover) {\n &:hover {\n @content;\n }\n }\n }\n}\n\n@mixin no-ripple-styles() {\n body.animation-level-0 & {\n &:not(.disabled):not(:disabled) {\n &:active {\n @content;\n }\n }\n }\n}\n\n.Button {\n outline: none !important;\n display: flex;\n align-items: center;\n justify-content: center;\n width: 100%;\n height: 3.5rem;\n border: 0;\n border-radius: var(--border-radius-default);\n background-color: transparent;\n background-size: cover;\n padding: 0.625rem;\n color: white;\n line-height: 1.2;\n cursor: pointer;\n text-transform: uppercase;\n flex-shrink: 0;\n position: relative;\n overflow: hidden;\n transition: background-color 0.15s, color 0.15s;\n text-decoration: none !important;\n\n // @optimization\n &:active,\n &.clicked,\n body.animation-level-0 & {\n transition: none !important;\n }\n\n &.disabled {\n opacity: 0.5 !important;\n cursor: default;\n pointer-events: none;\n }\n\n &.round {\n width: 3.5rem;\n border-radius: 50%;\n\n i {\n font-size: 1.5rem;\n }\n }\n\n &.primary {\n background-color: var(--color-primary);\n color: var(--color-white);\n --ripple-color: rgba(0, 0, 0, 0.08);\n\n @include active-styles() {\n background-color: var(--color-primary-shade);\n }\n\n @include no-ripple-styles() {\n background-color: var(--color-primary-shade-darker);\n }\n }\n\n &.secondary {\n background-color: var(--color-background);\n color: rgba(var(--color-text-secondary-rgb), 0.75);\n --ripple-color: rgba(0, 0, 0, 0.08);\n\n @include active-styles() {\n background-color: var(--color-primary);\n color: white;\n }\n\n @include no-ripple-styles() {\n background-color: var(--color-primary-shade);\n }\n }\n\n &.gray {\n background-color: var(--color-background);\n color: var(--color-text-secondary);\n --ripple-color: rgba(0, 0, 0, 0.08);\n\n @include active-styles() {\n color: var(--color-primary);\n }\n\n @include no-ripple-styles() {\n background-color: var(--color-chat-hover);\n }\n }\n\n &.danger {\n background-color: var(--color-background);\n color: var(--color-error);\n --ripple-color: rgba(var(--color-error-rgb), 0.16);\n\n @include active-styles() {\n background-color: var(--color-error);\n color: var(--color-white);\n }\n\n @include no-ripple-styles() {\n background-color: var(--color-error-shade);\n }\n }\n\n &.text {\n background-color: transparent;\n\n &.primary {\n color: var(--color-primary);\n background-color: transparent;\n\n @include active-styles() {\n background-color: rgba(var(--color-primary-shade-rgb), 0.08);\n }\n\n @include no-ripple-styles() {\n background-color: rgba(var(--color-primary-shade-rgb), 0.16);\n }\n }\n\n &.secondary {\n background-color: transparent;\n color: var(--color-text-secondary);\n }\n\n &.danger {\n @include active-styles() {\n background-color: rgba(var(--color-error-rgb), 0.08);\n color: var(--color-error);\n }\n\n @include no-ripple-styles() {\n background-color: rgba(var(--color-error-rgb), 0.16);\n }\n }\n }\n\n &.faded {\n opacity: 0.8;\n\n @include active-styles() {\n opacity: 1;\n }\n\n &.activated {\n opacity: 1;\n }\n }\n\n &.translucent {\n background-color: transparent;\n color: var(--color-text-secondary);\n\n --ripple-color: var(--color-interactive-element-hover);\n\n @include active-styles() {\n background-color: var(--color-interactive-element-hover);\n }\n\n @include no-ripple-styles() {\n background-color: rgba(var(--color-text-secondary-rgb), 0.16);\n }\n\n &.activated {\n color: var(--color-primary);\n }\n }\n\n &.translucent-white {\n background-color: transparent;\n color: rgba(255, 255, 255, 0.5);\n --ripple-color: rgba(255, 255, 255, 0.08);\n\n @include active-styles() {\n background-color: rgba(255, 255, 255, 0.08);\n color: white;\n }\n\n @include no-ripple-styles() {\n background-color: rgba(255, 255, 255, 0.16);\n }\n }\n\n &.translucent-black {\n background-color: transparent;\n color: rgba(0, 0, 0, 0.8);\n --ripple-color: rgba(0, 0, 0, 0.08);\n\n @include active-styles() {\n background-color: rgba(0, 0, 0, 0.08);\n }\n\n @include no-ripple-styles() {\n background-color: rgba(0, 0, 0, 0.16);\n }\n }\n\n &.dark {\n background-color: rgba(0, 0, 0, 0.75);\n color: white;\n --ripple-color: rgba(255, 255, 255, 0.08);\n\n @include active-styles() {\n background-color: rgba(0, 0, 0, 0.85);\n color: white;\n }\n\n @include no-ripple-styles() {\n background-color: rgba(0, 0, 0, 0.95);\n }\n }\n\n &.smaller {\n height: 2.75rem;\n padding: 0.3125rem;\n\n &.round {\n width: 2.75rem;\n }\n\n &.pill {\n height: 2.5rem;\n border-radius: 1.25rem;\n padding: 0.3125rem 1rem;\n }\n\n &.with-icon {\n padding-left: 0.75rem;\n padding-right: 1.25rem;\n\n i {\n font-size: 1.5rem;\n margin-right: 0.5rem;\n }\n\n &[dir=\"rtl\"] {\n padding-left: 1.25rem;\n padding-right: 0.75rem;\n\n i {\n margin-left: 0.5rem;\n margin-right: 0;\n }\n }\n }\n\n @media (max-width: 600px) {\n height: 2.5rem;\n\n &.round {\n width: 2.5rem;\n }\n }\n }\n\n &.tiny {\n height: 2.25rem;\n padding: 0.4375rem;\n border-radius: var(--border-radius-default-small);\n font-size: 0.875rem;\n font-weight: 500;\n\n &.round {\n width: 2.25rem;\n height: 2.25rem;\n border-radius: 50%;\n }\n\n i {\n font-size: 1.25rem;\n }\n\n &.pill {\n height: 2rem;\n border-radius: 1rem;\n padding: 0.3125rem 1rem;\n font-size: 1rem;\n }\n }\n\n &.fluid {\n padding-left: 1.75rem;\n padding-right: 1.75rem;\n width: auto;\n\n &.tiny {\n padding-left: 1.375rem;\n padding-right: 1.375rem;\n }\n }\n\n &.pill {\n border-radius: 1.75rem;\n padding-left: 1.75rem;\n padding-right: 1.75rem;\n text-transform: none;\n }\n\n &.loading {\n position: relative;\n pointer-events: none;\n\n .Spinner {\n position: absolute;\n right: 0.875rem;\n top: 0.875rem;\n\n --spinner-size: 1.8125rem;\n }\n }\n\n .emoji {\n vertical-align: -3px;\n }\n}\n",".Checkbox {\n display: block;\n position: relative;\n padding-left: 4.5rem;\n text-align: left;\n margin-bottom: 1.5rem;\n line-height: 1.5rem;\n cursor: pointer;\n\n &.disabled {\n pointer-events: none;\n opacity: 0.5;\n }\n\n &.round {\n .Checkbox-main {\n &::before {\n border-radius: 50%;\n }\n\n &::after {\n background: var(--color-primary)\n url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTIiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZD0iTTEzLjkuOEw1LjggOC45IDIuMSA1LjJjLS40LS40LTEuMS0uNC0xLjYgMC0uNC40LS40IDEuMSAwIDEuNkw1IDExLjJjLjQuNCAxLjEuNCAxLjYgMGw4LjktOC45Yy40LS40LjQtMS4xIDAtMS42LS41LS40LTEuMi0uNC0xLjYuMXoiIGZpbGw9IiNGRkYiLz48L3N2Zz4=)\n no-repeat 50% 50%;\n background-size: 12px;\n border-radius: 50%;\n }\n }\n }\n\n &.loading {\n .Checkbox-main::before,\n .Checkbox-main::after {\n opacity: 0 !important;\n }\n\n .Spinner {\n position: absolute;\n left: 0.375rem;\n top: 0.125rem;\n opacity: 0;\n animation: fade-in 0.2s ease forwards;\n --spinner-size: 1.25rem;\n }\n }\n\n &.blocking {\n input:not(:checked) ~ .Checkbox-main {\n &::before {\n border-color: var(--color-error);\n }\n\n &::after {\n background-image: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBmaWxsPSJub25lIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiPgogICAgPHBvbHlnb24gcG9pbnRzPSIwIDAgMjQgMCAyNCAyNCAwIDI0Ii8+CiAgICA8cGF0aCBmaWxsPSIjZTUzOTM1IiBmaWxsLXJ1bGU9Im5vbnplcm8iIGQ9Ik0xOCwzIEMxOS42NTY4NTQyLDMgMjEsNC4zNDMxNDU3NSAyMSw2IEwyMSwxOCBDMjEsMTkuNjU2ODU0MiAxOS42NTY4NTQyLDIxIDE4LDIxIEw2LDIxIEM0LjM0MzE0NTc1LDIxIDMsMTkuNjU2ODU0MiAzLDE4IEwzLDYgQzMsNC4zNDMxNDU3NSA0LjM0MzE0NTc1LDMgNiwzIEwxOCwzIFogTTE2LDExIEw4LDExIEM3LjQ0NzcxNTI1LDExIDcsMTEuNDQ3NzE1MyA3LDEyIEM3LDEyLjU1MjI4NDcgNy40NDc3MTUyNSwxMyA4LDEzIEwxNiwxMyBDMTYuNTUyMjg0NywxMyAxNywxMi41NTIyODQ3IDE3LDEyIEMxNywxMS40NDc3MTUzIDE2LjU1MjI4NDcsMTEgMTYsMTEgWiIvPgogIDwvZz4KPC9zdmc+Cg==);\n opacity: 1;\n\n // Compensate for svg having incorrect size\n background-size: 1.375rem;\n background-position: -0.125rem -0.125rem;\n }\n }\n }\n\n input {\n position: absolute;\n z-index: var(--z-below);\n opacity: 0;\n }\n\n .Checkbox-main {\n &::before,\n &::after {\n content: \"\";\n display: block;\n position: absolute;\n left: 1.1875rem;\n top: 0.1875rem;\n width: 1.125rem;\n height: 1.125rem;\n }\n\n &::before {\n border: 2px solid var(--color-borders-input);\n border-radius: 0.25rem;\n background-color: var(--color-background);\n transition: border-color 0.1s ease, background-color 0.1s ease;\n }\n\n &::after {\n /* stylelint-disable-next-line scss/operator-no-unspaced */\n background: center no-repeat\n url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTIiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZD0iTTEzLjkuOEw1LjggOC45IDIuMSA1LjJjLS40LS40LTEuMS0uNC0xLjYgMC0uNC40LS40IDEuMSAwIDEuNkw1IDExLjJjLjQuNCAxLjEuNCAxLjYgMGw4LjktOC45Yy40LS40LjQtMS4xIDAtMS42LS41LS40LTEuMi0uNC0xLjYuMXoiIGZpbGw9IiNGRkYiIGZpbGwtcnVsZT0ibm9uemVybyIvPjwvc3ZnPg==);\n background-size: 0.875rem;\n opacity: 0;\n transition: opacity 0.1s ease;\n }\n\n .label {\n display: block;\n text-align: initial;\n }\n\n .subLabel {\n display: block;\n font-size: 0.875rem;\n line-height: 1rem;\n color: var(--color-text-secondary);\n }\n }\n\n input:checked ~ .Checkbox-main {\n &::before {\n border-color: var(--color-primary);\n background-color: var(--color-primary);\n }\n\n &::after {\n opacity: 1;\n }\n }\n\n &[dir=\"rtl\"] {\n padding-left: 0;\n padding-right: 4.5rem;\n\n &.loading {\n .Spinner {\n left: auto;\n right: 0.375rem;\n }\n }\n\n .label,\n .subLabel {\n text-align: right;\n }\n\n .Checkbox-main {\n &::before,\n &::after {\n left: auto;\n right: 1.1875rem;\n }\n }\n }\n}\n",".Loading {\n display: flex;\n height: 100%;\n align-items: center;\n justify-content: center;\n\n &.interactive {\n cursor: pointer;\n }\n\n .Spinner {\n --spinner-size: 2.75rem;\n }\n}\n",".Menu {\n &.fluid .bubble {\n min-width: 13.5rem;\n width: auto;\n }\n\n .backdrop {\n position: fixed;\n left: -100vw;\n right: -100vw;\n top: -100vh;\n bottom: -100vh;\n z-index: var(--z-menu-backdrop);\n }\n\n .bubble {\n overflow: hidden;\n display: block;\n list-style: none;\n padding: 0.5rem 0;\n margin: 0;\n position: absolute;\n background-color: var(--color-background);\n box-shadow: 0 0.25rem 0.5rem 0.125rem var(--color-default-shadow);\n border-radius: var(--border-radius-default);\n min-width: 13.5rem;\n z-index: var(--z-menu-bubble);\n overscroll-behavior: contain;\n\n transform: scale(0.5);\n transition: opacity 0.2s cubic-bezier(0.2, 0, 0.2, 1), transform 0.2s cubic-bezier(0.2, 0, 0.2, 1) !important;\n\n &.open {\n transform: scale(1);\n }\n\n &.closing {\n transition: opacity 0.2s ease-in, transform 0.2s ease-in !important;\n }\n\n body.animation-level-0 & {\n transform: none !important;\n transition: opacity 0.15s !important;\n }\n\n --offset-y: calc(100% + 0.5rem);\n --offset-x: 0;\n\n &.top {\n top: var(--offset-y);\n }\n\n &.bottom {\n bottom: var(--offset-y);\n }\n\n &.left {\n left: var(--offset-x);\n }\n\n &.right {\n right: var(--offset-x);\n }\n\n &.with-footer {\n padding-bottom: 0;\n }\n }\n\n body.has-open-dialog &:not(.CustomSendMenu) .bubble {\n transition: none !important;\n }\n\n .footer {\n padding: 0.5rem 0;\n background: var(--color-chat-hover);\n color: var(--color-text-secondary);\n font-size: 0.8125rem;\n text-align: center;\n }\n\n &.compact {\n .bubble {\n background: var(--color-background-compact-menu);\n backdrop-filter: blur(10px);\n padding: 0.25rem 0;\n }\n\n .footer {\n background: none;\n }\n\n &.no-blur .bubble {\n background: var(--color-background);\n }\n }\n}\n",".DropdownMenu {\n position: relative;\n}\n",".MenuItem {\n width: 100%;\n background: none;\n border: none !important;\n box-shadow: none !important;\n outline: none !important;\n display: flex;\n padding: 0.75rem 1rem;\n position: relative;\n overflow: hidden;\n line-height: 1.5rem;\n white-space: nowrap;\n color: var(--color-text);\n --ripple-color: rgba(0, 0, 0, 0.08);\n cursor: pointer;\n unicode-bidi: plaintext;\n\n @media (hover: hover) {\n &:hover,\n &:focus {\n background-color: var(--color-chat-hover);\n text-decoration: none;\n color: inherit;\n }\n }\n\n @media (max-width: 600px) {\n &:focus,\n &:hover,\n &:active {\n text-decoration: none;\n color: inherit;\n }\n\n &:active {\n background-color: var(--color-chat-hover);\n }\n }\n\n i {\n font-size: 1.5rem;\n margin-right: 2rem;\n color: var(--color-icon-secondary);\n }\n\n .menu-item-name {\n margin-right: 2rem;\n\n &.capitalize {\n text-transform: capitalize;\n }\n }\n\n &.disabled {\n opacity: 0.5 !important;\n cursor: default !important;\n }\n\n &.destructive {\n color: var(--color-error);\n\n i {\n color: inherit;\n }\n }\n\n &:not(.has-ripple):not(.disabled):not(.compact):active {\n background-color: var(--color-item-active);\n transition: none !important;\n }\n\n & > .Switcher {\n margin-left: auto;\n }\n\n &[dir=\"rtl\"] {\n i {\n margin-left: 2rem;\n margin-right: 0;\n }\n\n .menu-item-name {\n margin-left: 2rem;\n margin-right: 0;\n }\n\n > .Switcher {\n margin-left: 0;\n margin-right: auto;\n }\n }\n\n &.compact {\n align-items: center;\n font-size: 0.875rem;\n margin: 0.125rem 0.25rem;\n padding: 0.25rem;\n border-radius: 0.375rem;\n width: auto;\n font-weight: 500;\n transform: scale(1);\n transition: 0.15s ease-in-out transform;\n\n i {\n max-width: 1.25rem;\n font-size: 1.25rem;\n margin-left: 0.5rem;\n margin-right: 1.25rem;\n\n &::before {\n max-width: 1.25rem;\n }\n }\n\n @media (hover: hover) {\n &:hover,\n &:focus,\n &:active {\n background: var(--color-background-compact-menu-hover);\n text-decoration: none;\n }\n\n &:active {\n transform: scale(0.98);\n }\n }\n }\n}\n",".CountryCodeInput {\n .input-group {\n cursor: pointer;\n\n z-index: var(--z-country-code-input-group);\n\n .Spinner {\n position: absolute;\n top: 1rem;\n right: 0.75rem;\n opacity: 0.5;\n --spinner-size: 1.5rem;\n }\n\n // Prevent loading additional 10 kB of icomoon font on initial load.\n .css-icon-down {\n position: absolute;\n top: 1.125rem;\n right: 1rem;\n width: 0.75rem;\n height: 0.75rem;\n border: 2px solid var(--color-text-secondary);\n border-top: 0;\n border-left: 0;\n transform: scaleY(1) rotate(45deg);\n /* stylelint-disable-next-line plugin/no-low-performance-animation-properties */\n transition: color 0.2s ease, transform 0.2s ease, top 0.2s ease;\n\n &.open {\n border-color: var(--color-primary);\n transform: scaleY(-1) rotate(45deg);\n top: 1.5rem;\n }\n }\n }\n\n .bubble {\n width: 100%;\n max-height: 23.5rem;\n overflow-y: auto;\n transform-origin: top center !important;\n transform: scale(0.95);\n\n &.open {\n transform: scaleY(1);\n }\n }\n\n .MenuItem {\n button {\n display: flex;\n align-items: center;\n }\n\n &.no-results button {\n justify-content: center;\n padding: 0.5rem 1rem;\n\n span {\n font-size: 0.875rem;\n }\n }\n }\n\n .country-flag {\n font-size: 2rem;\n margin-right: 1rem;\n\n .emoji {\n width: 2rem;\n height: 2rem;\n display: inline-block;\n vertical-align: 4px;\n margin: -0.5rem 0.125rem;\n }\n }\n\n .country-name {\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n margin-right: 1rem;\n text-align: left;\n }\n\n .country-code {\n margin-left: auto;\n opacity: 0.5;\n padding-right: 0.25rem;\n }\n}\n",".auth-form {\n width: 100%;\n max-width: 25.5rem;\n margin: 0 auto;\n padding: 6rem 1rem 1rem;\n text-align: center;\n\n @media (min-width: 600px) and (min-height: 450px) {\n padding: 6.8125rem 1.5rem 1.5rem;\n\n &.qr {\n padding-top: 4rem;\n }\n }\n\n #logo,\n .AvatarEditable label {\n display: block;\n margin-left: auto;\n margin-right: auto;\n width: 7.5rem;\n height: 7.5rem;\n margin-bottom: 1.75rem;\n\n @media (min-width: 600px) and (min-height: 450px) {\n width: 10rem;\n height: 10rem;\n margin-bottom: 2.5rem;\n }\n }\n\n #logo {\n background: url(\"../../assets/telegram-logo.svg\") center no-repeat;\n background-size: 100%;\n }\n\n h2 {\n font-size: 1.25rem;\n line-height: 1;\n\n @media (min-width: 600px) {\n font-size: 2rem;\n line-height: 1.5;\n }\n }\n\n .note {\n font-size: 0.875rem;\n line-height: 1.35;\n margin-bottom: 2.5rem;\n color: var(--color-text-secondary);\n\n @media (min-width: 600px) {\n font-size: 1rem;\n margin-bottom: 3rem;\n }\n }\n}\n\n#auth-registration-form,\n#auth-phone-number-form,\n#auth-code-form,\n#auth-password-form,\n#auth-qr-form {\n height: 100%;\n overflow-y: auto;\n}\n\n#auth-phone-number-form {\n form {\n min-height: 26.25rem;\n }\n\n .Button {\n margin-top: 2.75rem;\n }\n\n .Button + .Button {\n margin-top: 1rem;\n }\n}\n\n#auth-code-form,\n#auth-password-form {\n h2 {\n display: flex;\n align-items: center;\n justify-content: center;\n }\n}\n\n.auth-number-edit {\n width: 2.5rem;\n height: 2.5rem;\n padding: 0.5rem;\n font-size: 1.5rem;\n color: var(--color-text-secondary);\n opacity: 0.75;\n display: flex;\n align-items: center;\n justify-content: center;\n cursor: pointer;\n\n &:hover,\n &:focus {\n opacity: 1;\n }\n}\n\n#auth-qr-form {\n .qr-container,\n .qr-loading {\n height: 280px;\n }\n\n .qr-wrapper {\n display: flex;\n justify-content: center;\n position: relative;\n\n opacity: 1;\n transform: scale(1);\n transition: transform 300ms cubic-bezier(0.34, 1.56, 0.64, 1), opacity 300ms;\n &.pre-animate {\n opacity: 0.5;\n transform: scale(0.5);\n }\n }\n\n .qr-plane {\n position: absolute;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n z-index: 1;\n border-radius: 50%;\n background-color: var(--color-telegram-blue);\n }\n\n .qr-container {\n background-color: white;\n border-radius: var(--border-radius-default);\n overflow: hidden;\n }\n\n h3 {\n margin: 1.5rem 0 1rem 0;\n }\n\n ol {\n list-style: none;\n counter-reset: item;\n padding: 0 1.75rem;\n\n li {\n counter-increment: item;\n text-align: left;\n margin: 0.75rem 0;\n display: flex;\n\n &::before {\n content: counter(item);\n display: flex;\n justify-content: center;\n align-items: center;\n min-width: 1.375rem;\n height: 1.375rem;\n padding: 0;\n margin: 0 0.75rem 0 0;\n background: var(--color-primary);\n border-radius: 50%;\n font-size: smaller;\n color: white;\n }\n }\n }\n}\n\n#sign-in-password {\n word-break: normal !important;\n}\n","#AppInactive {\n height: 100%;\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n\n .content {\n max-width: 28rem;\n margin: auto;\n padding: 1.5rem;\n text-align: center;\n }\n\n .title {\n margin-top: 1rem;\n }\n\n .description {\n color: var(--color-text-secondary);\n font-size: 0.875rem;\n }\n\n img {\n width: 100%;\n max-width: 20rem;\n }\n\n .Button {\n margin-top: 1rem;\n }\n}\n","/* cyrillic-ext */\n@font-face {\n font-family: 'Roboto';\n font-style: normal;\n font-weight: 400;\n font-display: swap;\n src: local('Roboto'), local('Roboto-Regular'), url(KFOmCnqEu92Fr1Mu72xKKTU1Kvnz.woff2) format('woff2');\n unicode-range: U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;\n}\n/* cyrillic */\n@font-face {\n font-family: 'Roboto';\n font-style: normal;\n font-weight: 400;\n font-display: swap;\n src: local('Roboto'), local('Roboto-Regular'), url(KFOmCnqEu92Fr1Mu5mxKKTU1Kvnz.woff2) format('woff2');\n unicode-range: U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;\n}\n/* greek-ext */\n@font-face {\n font-family: 'Roboto';\n font-style: normal;\n font-weight: 400;\n font-display: swap;\n src: local('Roboto'), local('Roboto-Regular'), url(KFOmCnqEu92Fr1Mu7mxKKTU1Kvnz.woff2) format('woff2');\n unicode-range: U+1F00-1FFF;\n}\n/* greek */\n@font-face {\n font-family: 'Roboto';\n font-style: normal;\n font-weight: 400;\n font-display: swap;\n src: local('Roboto'), local('Roboto-Regular'), url(KFOmCnqEu92Fr1Mu4WxKKTU1Kvnz.woff2) format('woff2');\n unicode-range: U+0370-03FF;\n}\n/* vietnamese */\n@font-face {\n font-family: 'Roboto';\n font-style: normal;\n font-weight: 400;\n font-display: swap;\n src: local('Roboto'), local('Roboto-Regular'), url(KFOmCnqEu92Fr1Mu7WxKKTU1Kvnz.woff2) format('woff2');\n unicode-range: U+0102-0103, U+0110-0111, U+1EA0-1EF9, U+20AB;\n}\n/* latin-ext */\n@font-face {\n font-family: 'Roboto';\n font-style: normal;\n font-weight: 400;\n font-display: swap;\n src: local('Roboto'), local('Roboto-Regular'), url(KFOmCnqEu92Fr1Mu7GxKKTU1Kvnz.woff2) format('woff2');\n unicode-range: U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF;\n}\n/* latin */\n@font-face {\n font-family: 'Roboto';\n font-style: normal;\n font-weight: 400;\n font-display: swap;\n src: local('Roboto'), local('Roboto-Regular'), url(KFOmCnqEu92Fr1Mu4mxKKTU1Kg.woff2) format('woff2');\n unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;\n}\n/* cyrillic-ext */\n@font-face {\n font-family: 'Roboto';\n font-style: normal;\n font-weight: 500;\n font-display: swap;\n src: local('Roboto Medium'), local('Roboto-Medium'), url(KFOlCnqEu92Fr1MmEU9fCRc4AMP6lbBP.woff2) format('woff2');\n unicode-range: U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;\n}\n/* cyrillic */\n@font-face {\n font-family: 'Roboto';\n font-style: normal;\n font-weight: 500;\n font-display: swap;\n src: local('Roboto Medium'), local('Roboto-Medium'), url(KFOlCnqEu92Fr1MmEU9fABc4AMP6lbBP.woff2) format('woff2');\n unicode-range: U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;\n}\n/* greek-ext */\n@font-face {\n font-family: 'Roboto';\n font-style: normal;\n font-weight: 500;\n font-display: swap;\n src: local('Roboto Medium'), local('Roboto-Medium'), url(KFOlCnqEu92Fr1MmEU9fCBc4AMP6lbBP.woff2) format('woff2');\n unicode-range: U+1F00-1FFF;\n}\n/* greek */\n@font-face {\n font-family: 'Roboto';\n font-style: normal;\n font-weight: 500;\n font-display: swap;\n src: local('Roboto Medium'), local('Roboto-Medium'), url(KFOlCnqEu92Fr1MmEU9fBxc4AMP6lbBP.woff2) format('woff2');\n unicode-range: U+0370-03FF;\n}\n/* vietnamese */\n@font-face {\n font-family: 'Roboto';\n font-style: normal;\n font-weight: 500;\n font-display: swap;\n src: local('Roboto Medium'), local('Roboto-Medium'), url(KFOlCnqEu92Fr1MmEU9fCxc4AMP6lbBP.woff2) format('woff2');\n unicode-range: U+0102-0103, U+0110-0111, U+1EA0-1EF9, U+20AB;\n}\n/* latin-ext */\n@font-face {\n font-family: 'Roboto';\n font-style: normal;\n font-weight: 500;\n font-display: swap;\n src: local('Roboto Medium'), local('Roboto-Medium'), url(KFOlCnqEu92Fr1MmEU9fChc4AMP6lbBP.woff2) format('woff2');\n unicode-range: U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF;\n}\n/* latin */\n@font-face {\n font-family: 'Roboto';\n font-style: normal;\n font-weight: 500;\n font-display: swap;\n src: local('Roboto Medium'), local('Roboto-Medium'), url(KFOlCnqEu92Fr1MmEU9fBBc4AMP6lQ.woff2) format('woff2');\n unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;\n}\n\n/* Persian, v32.0.0, https://github.com/rastikerdar/vazirmatn */\n@font-face {\n font-family: Vazirmatn;\n src: url('Vazirmatn-NL-Regular.woff2') format('woff2'),\n url('Vazirmatn-NL-Regular.woff') format('woff');\n font-weight: normal;\n font-display:swap;\n unicode-range:U+0627-06FF;\n}\n\n/* Persian, v32.0.0, https://github.com/rastikerdar/vazirmatn */\n@font-face {\n font-family: Vazirmatn;\n src: url('Vazirmatn-NL-Medium.woff2') format('woff2'),\n url('Vazirmatn-NL-Medium.woff') format('woff');\n font-weight: 500;\n font-display:swap;\n unicode-range: U+0600-06FF;\n}\n","@import \"reboot\";\n@import \"variables\";\n@import \"mixins\";\n@import \"spacing\";\n@import \"forms\";\n@import \"icons\";\n@import \"common\";\n@import \"../assets/fonts/roboto.css\";\n@import \"./print\";\n\nhtml,\nbody {\n width: 100%;\n height: 100%;\n background: var(--color-background);\n margin: 0;\n padding: 0;\n font-size: 16px;\n font-family: \"Roboto\", -apple-system, BlinkMacSystemFont, \"Apple Color Emoji\", \"Segoe UI\", Oxygen, Ubuntu, Cantarell,\n \"Fira Sans\", \"Droid Sans\", \"Helvetica Neue\", sans-serif;\n color: var(--color-text);\n font-weight: 400;\n line-height: 1.5;\n text-align: left;\n overflow: hidden;\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n\n @media (max-width: 600px) {\n height: calc(var(--vh, 1vh) * 100);\n }\n}\n\nbody.is-ios,\nbody.is-macos {\n font-family: system-ui, -apple-system, BlinkMacSystemFont, \"Roboto\", \"Apple Color Emoji\", \"Helvetica Neue\", sans-serif;\n}\n\nhtml[lang=\"fa\"],\nhtml[lang=\"fa\"] body {\n font-family: \"Vazirmatn\", \"Roboto\", -apple-system, BlinkMacSystemFont, \"Apple Color Emoji\", \"Segoe UI\", Oxygen, Ubuntu,\n Cantarell, \"Fira Sans\", \"Droid Sans\", \"Helvetica Neue\", sans-serif;\n\n &.is-ios,\n &.is-macos {\n font-family: \"Vazirmatn\", -apple-system, BlinkMacSystemFont, \"Roboto\", \"Apple Color Emoji\", \"Segoe UI\", Oxygen, Ubuntu,\n Cantarell, \"Fira Sans\", \"Droid Sans\", \"Helvetica Neue\", sans-serif;\n }\n}\n\nbody.is-ios {\n --border-radius-messages: 1rem;\n --border-radius-messages-small: 0.5rem;\n}\n\nbody.cursor-grabbing,\nbody.cursor-grabbing * {\n cursor: grabbing !important;\n}\n\nbody.cursor-ew-resize {\n cursor: ew-resize !important;\n}\n\n#root {\n height: 100%;\n @media (max-width: 600px) {\n height: calc(var(--vh, 1vh) * 100);\n }\n}\n\n#middle-column-portals,\n#portals {\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n}\n\n.hidden {\n visibility: hidden;\n}\n\n.no-selection {\n user-select: none;\n -webkit-user-select: none !important;\n}\n\n.resize-handle {\n display: none;\n position: absolute;\n top: 0;\n right: -0.25rem;\n bottom: 0;\n width: 0.25rem;\n z-index: var(--z-resize-handle);\n cursor: ew-resize;\n\n @media (min-width: 926px) {\n display: block;\n }\n}\n\n/*\n See the article for more information on this visually-hidden pattern.\n https://snook.ca/archives/html_and_css/hiding-content-for-accessibility\n*/\n.visually-hidden {\n position: absolute !important;\n width: 0;\n height: 0;\n overflow: hidden;\n clip: rect(0, 0, 0, 0);\n z-index: -1;\n}\n\n.not-implemented {\n opacity: 0.5;\n\n &,\n & * {\n cursor: not-allowed !important;\n }\n}\n\n* {\n box-sizing: border-box;\n}\n\n.no-animations #root *,\n.no-animations #root *::before,\n.no-animations #root *::after {\n transition: none !important;\n}\n\n.custom-scroll,\n.custom-scroll-x {\n scrollbar-width: thin;\n scrollbar-color: rgba(90, 90, 90, 0) transparent;\n transition: scrollbar-color 0.3s ease;\n\n -webkit-overflow-scrolling: touch;\n // Fix scroll lock on iOS\n pointer-events: auto;\n\n &::-webkit-scrollbar-thumb {\n background-color: rgba(90, 90, 90, 0);\n border-radius: 0.375rem;\n // `box-shadow` prevents repaint on macOS when hovering out of scrollable container\n box-shadow: 0 0 1px rgba(255, 255, 255, 0.01);\n }\n\n &:hover,\n &:focus,\n &:focus-within {\n scrollbar-color: rgba(90, 90, 90, 0.3) transparent;\n\n &::-webkit-scrollbar-thumb {\n background-color: rgba(90, 90, 90, 0.3);\n }\n }\n}\n\nbody:not(.is-ios) {\n .custom-scroll {\n &::-webkit-scrollbar {\n width: 0.375rem;\n }\n }\n\n .custom-scroll-x {\n &::-webkit-scrollbar {\n height: 0.375rem;\n }\n }\n}\n\n.no-scrollbar {\n scrollbar-width: none;\n\n &::-webkit-scrollbar {\n display: none;\n }\n}\n\n.emoji-small {\n background: no-repeat;\n background-size: 1.25rem;\n color: transparent;\n display: inline-block;\n width: 1.25rem;\n height: 1.25rem;\n margin-inline-end: 1px;\n overflow: hidden;\n flex-shrink: 0;\n\n &::selection {\n background-color: var(--color-selection-highlight-emoji);\n color: transparent;\n }\n}\n\ndiv[role=\"button\"] {\n outline: none !important;\n cursor: pointer;\n}\n\n.opacity-transition {\n opacity: 1;\n transition: opacity 0.15s ease;\n\n &:not(.open) {\n opacity: 0;\n }\n\n &:not(.shown) {\n display: none;\n }\n\n &.slow {\n transition-duration: 0.3s;\n }\n}\n\n.color-primary {\n color: var(--color-primary) !important;\n}\n\n.color-danger {\n color: var(--color-error) !important;\n}\n\n.text-muted {\n color: var(--color-text-secondary) !important;\n}\n\n.protector {\n position: absolute;\n left: 0;\n top: 0;\n right: 0;\n bottom: 0;\n z-index: 2;\n}\n\n.for-ios-autocapitalization-fix {\n position: fixed;\n font-size: 16px;\n opacity: 0;\n bottom: 1rem;\n z-index: -1;\n}\n\n@keyframes grow-icon {\n 0% {\n transform: scale(0.5);\n opacity: 0.8;\n }\n 50% {\n transform: scale(1.1);\n opacity: 1;\n }\n 100% {\n transform: scale(1);\n }\n}\n\n@keyframes hide-icon {\n from {\n transform: scale(1);\n opacity: 0.4;\n }\n to {\n transform: scale(0.5);\n opacity: 0;\n }\n}\n","*,\n*::before,\n*::after {\n box-sizing: border-box;\n}\n\nhtml {\n font-family: sans-serif;\n line-height: 1.15;\n -webkit-text-size-adjust: 100%;\n -ms-text-size-adjust: 100%;\n -ms-overflow-style: scrollbar;\n -webkit-tap-highlight-color: rgba(0, 0, 0, 0);\n}\n\n@-ms-viewport {\n width: device-width;\n}\narticle,\naside,\ndialog,\nfigcaption,\nfigure,\nfooter,\nheader,\nhgroup,\nmain,\nnav,\nsection {\n display: block;\n}\n\nbody {\n margin: 0;\n}\n\n[tabindex=\"-1\"]:focus {\n outline: none !important;\n}\n\nhr {\n box-sizing: content-box;\n height: 0;\n overflow: visible;\n}\n\nh1,\nh2,\nh3,\nh4,\nh5,\nh6 {\n margin-top: 0;\n margin-bottom: 0.5rem;\n font-weight: 500;\n}\n\nabbr[title],\nabbr[data-original-title] {\n text-decoration: underline;\n text-decoration: underline dotted;\n cursor: help;\n border-bottom: 0;\n}\n\naddress {\n margin-bottom: 1rem;\n font-style: normal;\n line-height: inherit;\n}\n\np,\nol,\nul,\ndl {\n margin-top: 0;\n margin-bottom: 1rem;\n}\n\nol ol,\nul ul,\nol ul,\nul ol {\n margin-bottom: 0;\n}\n\ndd {\n margin-bottom: 0.5rem;\n margin-left: 0;\n}\n\nblockquote,\nfigure {\n margin: 0 0 1rem;\n}\n\ndfn {\n font-style: italic;\n}\n\ndt,\nb,\nstrong {\n font-weight: 500;\n}\n\nsmall {\n font-size: 80%;\n}\n\nsub,\nsup {\n position: relative;\n font-size: 75%;\n line-height: 0;\n vertical-align: baseline;\n}\n\nsub {\n bottom: -0.25em;\n}\n\nsup {\n top: -0.5em;\n}\n\na {\n color: var(--color-links);\n text-decoration: none;\n background-color: transparent;\n -webkit-text-decoration-skip: objects;\n}\na:hover {\n color: #0056b3;\n text-decoration: underline;\n}\n\na:not([href]):not([tabindex]),\na:not([href]):not([tabindex]):hover,\na:not([href]):not([tabindex]):focus {\n color: inherit;\n text-decoration: none;\n}\na:not([href]):not([tabindex]):focus {\n outline: 0;\n}\n\npre,\ncode,\nkbd,\nsamp {\n font: 0.9375rem/1.25 \"Courier\", \"Courier New\", \"Nimbus Mono L\", \"Courier 10 Pitch\", \"FreeMono\", sans-serif-monospace,\n monospace;\n font-size-adjust: 0.43;\n}\n\npre {\n margin-top: 0;\n margin-bottom: 1rem;\n overflow: auto;\n -ms-overflow-style: scrollbar;\n}\n\nimg {\n vertical-align: middle;\n border-style: none;\n}\n\nsvg:not(:root) {\n overflow: hidden;\n}\n\na,\narea,\nbutton,\n[role=\"button\"],\ninput:not([type=\"range\"]),\nlabel,\nselect,\nsummary,\ntextarea {\n touch-action: manipulation;\n}\n\ntable {\n border-collapse: collapse;\n}\n\ncaption {\n padding-top: 0.75rem;\n padding-bottom: 0.75rem;\n color: #868e96;\n text-align: left;\n caption-side: bottom;\n}\n\nth {\n text-align: inherit;\n}\n\nlabel {\n display: inline-block;\n margin-bottom: 0.5rem;\n}\n\nbutton {\n border-radius: 0;\n}\n\nbutton:focus {\n outline: 1px dotted;\n outline: 5px auto -webkit-focus-ring-color;\n}\n\ninput,\nbutton,\nselect,\noptgroup,\ntextarea {\n margin: 0;\n font-family: inherit;\n font-size: inherit;\n line-height: inherit;\n}\n\nbutton,\ninput {\n overflow: visible;\n}\n\nbutton,\nselect {\n text-transform: none;\n}\n\nbutton,\nhtml [type=\"button\"],\n[type=\"reset\"],\n[type=\"submit\"] {\n -webkit-appearance: button;\n}\n\nbutton::-moz-focus-inner,\n[type=\"button\"]::-moz-focus-inner,\n[type=\"reset\"]::-moz-focus-inner,\n[type=\"submit\"]::-moz-focus-inner {\n padding: 0;\n border-style: none;\n}\n\ninput[type=\"radio\"],\ninput[type=\"checkbox\"] {\n box-sizing: border-box;\n padding: 0;\n}\n\ninput[type=\"date\"],\ninput[type=\"time\"],\ninput[type=\"datetime-local\"],\ninput[type=\"month\"] {\n -webkit-appearance: listbox;\n}\n\ntextarea {\n overflow: auto;\n resize: vertical;\n}\n\nfieldset {\n min-width: 0;\n padding: 0;\n margin: 0;\n border: 0;\n}\n\nlegend {\n display: block;\n width: 100%;\n max-width: 100%;\n padding: 0;\n margin-bottom: 0.5rem;\n font-size: 1.5rem;\n line-height: inherit;\n color: inherit;\n white-space: normal;\n}\n\nprogress {\n vertical-align: baseline;\n}\n\n[type=\"number\"]::-webkit-inner-spin-button,\n[type=\"number\"]::-webkit-outer-spin-button {\n height: auto;\n}\n\n[type=\"search\"] {\n outline-offset: -2px;\n -webkit-appearance: none;\n}\n\n[type=\"search\"]::-webkit-search-cancel-button,\n[type=\"search\"]::-webkit-search-decoration {\n -webkit-appearance: none;\n}\n\n::-webkit-file-upload-button {\n font: inherit;\n -webkit-appearance: button;\n}\n\noutput {\n display: inline-block;\n}\n\nsummary {\n display: list-item;\n}\n\ntemplate {\n display: none;\n}\n\n[hidden] {\n display: none !important;\n}\n","@use \"sass:color\";\n\n@function toRGB($color) {\n @return red($color) + \", \" + green($color) + \", \" + blue($color);\n}\n\n@function blend-normal($foreground, $background) {\n $opacity: opacity($foreground);\n $background-opacity: opacity($background);\n\n // calculate opacity\n $bm-red: color.red($foreground) * $opacity + color.red($background) * $background-opacity * (1 - $opacity);\n $bm-green: color.green($foreground) * $opacity + color.green($background) * $background-opacity * (1 - $opacity);\n $bm-blue: color.blue($foreground) * $opacity + color.blue($background) * $background-opacity * (1 - $opacity);\n @return rgb($bm-red, $bm-green, $bm-blue);\n}\n\n$color-primary: #3390ec;\n\n$color-links: #3390ec;\n\n$color-placeholders: #a2acb4;\n\n$color-text-green: #4fae4e;\n$color-green: #00c73e;\n$color-light-green: #eeffde;\n\n$color-error: #e53935;\n\n$color-warning: #fb8c00;\n\n$color-yellow: #fdd764;\n\n$color-white: #ffffff;\n$color-black: #000000;\n$color-dark-gray: #2e3939;\n$color-gray: #c4c9cc;\n$color-text-secondary: #707579;\n$color-text-secondary-apple: #8a8a90;\n$color-text-meta: #686c72;\n$color-text-meta-apple: #8c8c91;\n$color-borders: #dadce0;\n$color-dividers: #c8c6cc;\n$color-item-active: #ededed;\n$color-chat-hover: #f4f4f5;\n$color-chat-active: #3390ec;\n$color-selection: #3993fb;\n\n// https://github.com/telegramdesktop/tdesktop/wiki/Theme-Reference#user-content-standard-color-constants\n// Colors borrowed from https://github.com/telegramdesktop/tdesktop/blob/dev/Telegram/Resources/day-blue.tdesktop-theme\n// historyPeer[1-8]UserpicBg\n$color-user-1: #e17076;\n$color-user-2: #7bc862;\n//$color-user-3: #E5CA77;\n$color-user-4: #65aadd;\n$color-user-5: #a695e7;\n$color-user-6: #ee7aae;\n$color-user-7: #6ec9cb;\n$color-user-8: #faa774;\n\n$color-message-reaction: #ebf3fd;\n$color-message-reaction-hover: #c5def9;\n$color-message-reaction-own: #cef0ba;\n$color-message-reaction-own-hover: #b5e0a4;\n\n:root {\n --color-background: #{$color-white};\n --color-background-compact-menu: #FFFFFFBB;\n --color-background-compact-menu-reactions: #FFFFFFEB;\n --color-background-compact-menu-hover: #000000B2;\n --color-background-selected: #f4f4f5;\n --color-background-secondary: #f4f4f5;\n --color-background-secondary-accent: #e4e4e5;\n --color-background-own: #{$color-light-green};\n --color-background-own-selected: color.adjust($color-light-green, -10%);\n --color-text: #{$color-black};\n --color-text-lighter: #{$color-dark-gray};\n --color-text-secondary: #{$color-text-secondary};\n --color-icon-secondary: #{$color-text-secondary};\n --color-text-secondary-rgb: #{toRGB($color-text-secondary)};\n --color-text-secondary-apple: #{$color-text-secondary-apple};\n --color-text-meta: #{$color-text-meta};\n --color-text-meta-rgb: #{toRGB($color-text-meta)};\n --color-text-meta-colored: #{$color-text-green};\n --color-text-meta-apple: #{$color-text-meta-apple};\n --color-text-green: #{$color-text-green};\n --color-text-green-rgb: #{toRGB($color-text-green)};\n --color-borders: #{$color-borders};\n --color-borders-input: #{$color-borders};\n --color-dividers: #{$color-dividers};\n --color-webpage-initial-background: #{$color-dark-gray};\n --color-interactive-active: var(--color-primary);\n --color-interactive-inactive: rgba(var(--color-text-secondary-rgb), 0.25);\n --color-interactive-buffered: rgba(var(--color-text-secondary-rgb), 0.25); // Overlays underlying inactive element\n --color-interactive-element-hover: rgba(var(--color-text-secondary-rgb), 0.08);\n --color-composer-button: #{$color-text-secondary}CC;\n\n --color-primary: #{$color-primary};\n --color-primary-shade: #{color.mix($color-primary, $color-black, 92%)};\n --color-primary-shade-darker: #{color.mix($color-primary, $color-black, 84%)};\n --color-primary-shade-rgb: #{toRGB(color.mix($color-primary, $color-black, 92%))};\n --color-primary-opacity: rgba(var(--color-primary), 0.5);\n --color-green: #{$color-green};\n --color-green-darker: #{color.mix($color-green, $color-black, 84%)};\n\n --color-error: #{$color-error};\n --color-error-shade: #{color.mix($color-error, $color-black, 92%)};\n --color-error-rgb: #{toRGB($color-error)};\n\n --color-warning: #{$color-warning};\n\n --color-yellow: #{$color-yellow};\n\n --color-links: #{$color-links};\n\n --color-own-links: #{$color-white};\n\n --color-placeholders: #{$color-placeholders};\n\n --color-pinned: #{$color-white};\n\n --color-code: #4a729a;\n --color-code-bg: #{rgba($color-text-secondary, 0.08)};\n --color-code-own: #3c7940;\n --color-code-own-bg: #{rgba($color-text-secondary, 0.08)};\n\n --color-accent-own: #{$color-text-green};\n --color-message-meta-own: #{$color-text-green};\n\n --color-message-reaction: $color-message-reaction;\n --color-message-reaction-hover: $color-message-reaction-hover;\n --color-message-reaction-own: $color-message-reaction-own;\n --color-message-reaction-hover-own: $color-message-reaction-own-hover;\n\n --color-reply-hover: #{blend-normal(rgba($color-text-secondary, 0.08), $color-white)};\n --color-reply-active: #{blend-normal(rgba($color-text-secondary, 0.16), $color-white)};\n --color-reply-own-hover: #{blend-normal(rgba($color-text-green, 0.12), $color-light-green)};\n --color-reply-own-active: #{blend-normal(rgba($color-text-green, 0.24), $color-light-green)};\n\n --color-background-own-apple: #dcf8c5;\n --color-reply-own-hover-apple: #cbefb7;\n --color-reply-own-active-apple: #bae6a8;\n\n --color-white: #{$color-white};\n --color-gray: #{$color-gray};\n\n --color-chat-hover: #{$color-chat-hover};\n --color-chat-active: #{$color-chat-active};\n --color-item-active: #{$color-item-active};\n\n --color-selection-highlight: #{$color-selection};\n --color-selection-highlight-emoji: rgba(#{toRGB($color-selection)}, 0.7);\n\n --color-user-1: #{$color-user-1};\n --color-user-2: #{$color-user-2};\n --color-user-4: #{$color-user-4};\n --color-user-5: #{$color-user-5};\n --color-user-6: #{$color-user-6};\n --color-user-7: #{$color-user-7};\n --color-user-8: #{$color-user-8};\n\n --color-default-shadow: #72727240;\n --color-light-shadow: #7272722b;\n\n --color-skeleton-background: rgba(33, 33, 33, 0.15);\n --color-skeleton-foreground: rgba(232, 232, 232, 0.2);\n\n --color-telegram-blue: #{$color-primary};\n\n --vh: 1vh;\n\n --border-radius-default: 0.75rem;\n --border-radius-default-small: 0.625rem;\n --border-radius-default-tiny: 0.375rem;\n --border-radius-messages: 0.75rem;\n --border-radius-messages-small: 0.375rem;\n --messages-container-width: 45.5rem;\n --right-column-width: 26.5rem;\n --header-height: 3.5rem;\n\n --symbol-menu-width: 26.25rem;\n --symbol-menu-height: 23.25rem;\n --symbol-menu-footer-height: 3rem;\n\n @media (min-width: 1276px) and (max-width: 1920px) {\n --right-column-width: 25vw;\n }\n\n @media (min-width: 1921px) {\n --messages-container-width: 50vw;\n }\n\n @media (max-width: 600px) {\n --right-column-width: 100vw;\n --symbol-menu-width: 100vw;\n --symbol-menu-height: 14.6875rem;\n }\n\n --z-ui-loader-mask: 2000;\n --z-notification: 1000;\n --z-right-column: 900;\n --z-header-menu: 990;\n --z-header-menu-backdrop: 980;\n --z-modal: 1000;\n --z-media-viewer: 1500;\n --z-drop-area: 55;\n --z-animation-fade: 50;\n --z-menu-bubble: 21;\n --z-menu-backdrop: 20;\n --z-message-highlighted: 14;\n --z-message-context-menu: 13;\n --z-scroll-down-button: 12;\n --z-mobile-search: 12;\n --z-middle-header: 11;\n --z-middle-footer: 11;\n --z-country-code-input-group: 10;\n --z-message-select-control: 9;\n --z-message-select-area: 8;\n --z-sticky-date: 9;\n --z-register-add-avatar: 5;\n --z-media-viewer-head: 3;\n --z-resize-handle: 2;\n --z-below: -1;\n\n --spinner-white-data: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCI+PHBhdGggZD0iTTEwLjggMjIuNEM2IDIxLjkgMi4xIDE4IDEuNiAxMy4yLjkgNy4xIDUuNCAxLjkgMTEuMyAxLjVjLjQgMCAuNy0uMy43LS43IDAtLjQtLjQtLjgtLjgtLjhDNC44LjQtLjIgNS45IDAgMTIuNS4yIDE4LjYgNS40IDIzLjggMTEuNSAyNGM2LjYuMiAxMi00LjggMTIuNC0xMS4yIDAtLjQtLjMtLjgtLjgtLjgtLjQgMC0uNy4zLS43LjctLjMgNS45LTUuNSAxMC40LTExLjYgOS43eiIgZmlsbD0iI2ZmZmZmZiIvPjwvc3ZnPg==);\n --spinner-white-thin-data: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCI+PHBhdGggZmlsbD0iI2ZmZmZmZiIgZD0iTTEyIDIzQzUuOSAyMyAxIDE4LjEgMSAxMlM1LjkgMSAxMiAxVjBDNS40IDAgMCA1LjQgMCAxMnM1LjQgMTIgMTIgMTIgMTItNS40IDEyLTEyaC0xYzAgNi4xLTQuOSAxMS0xMSAxMXoiLz48L3N2Zz4=);\n --spinner-blue-data: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCI+PHBhdGggZD0iTTEwLjggMjIuNEM2IDIxLjkgMi4xIDE4IDEuNiAxMy4yLjkgNy4xIDUuNCAxLjkgMTEuMyAxLjVjLjQgMCAuNy0uMy43LS43IDAtLjQtLjQtLjgtLjgtLjhDNC44LjQtLjIgNS45IDAgMTIuNS4yIDE4LjYgNS40IDIzLjggMTEuNSAyNGM2LjYuMiAxMi00LjggMTIuNC0xMS4yIDAtLjQtLjMtLjgtLjgtLjgtLjQgMC0uNy4zLS43LjctLjMgNS45LTUuNSAxMC40LTExLjYgOS43eiIgZmlsbD0iIzRlYTRmNiIvPjwvc3ZnPg==);\n --spinner-dark-blue-data: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCI+PHBhdGggZD0iTTEwLjggMjIuNEM2IDIxLjkgMi4xIDE4IDEuNiAxMy4yLjkgNy4xIDUuNCAxLjkgMTEuMyAxLjVjLjQgMCAuNy0uMy43LS43IDAtLjQtLjQtLjgtLjgtLjhDNC44LjQtLjIgNS45IDAgMTIuNS4yIDE4LjYgNS40IDIzLjggMTEuNSAyNGM2LjYuMiAxMi00LjggMTIuNC0xMS4yIDAtLjQtLjMtLjgtLjgtLjgtLjQgMC0uNy4zLS43LjctLjMgNS45LTUuNSAxMC40LTExLjYgOS43eiIgZmlsbD0iIzgzNzhEQiIvPjwvc3ZnPg==);\n --spinner-black-data: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCI+PHBhdGggZD0iTTEwLjggMjIuNEM2IDIxLjkgMi4xIDE4IDEuNiAxMy4yLjkgNy4xIDUuNCAxLjkgMTEuMyAxLjVjLjQgMCAuNy0uMy43LS43IDAtLjQtLjQtLjgtLjgtLjhDNC44LjQtLjIgNS45IDAgMTIuNS4yIDE4LjYgNS40IDIzLjggMTEuNSAyNGM2LjYuMiAxMi00LjggMTIuNC0xMS4yIDAtLjQtLjMtLjgtLjgtLjgtLjQgMC0uNy4zLS43LjctLjMgNS45LTUuNSAxMC40LTExLjYgOS43eiIgZmlsbD0iIzJlMzkzOSIvPjwvc3ZnPg==);\n --spinner-green-data: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCI+PHBhdGggZD0iTTEwLjggMjIuNEM2IDIxLjkgMi4xIDE4IDEuNiAxMy4yLjkgNy4xIDUuNCAxLjkgMTEuMyAxLjVjLjQgMCAuNy0uMy43LS43IDAtLjQtLjQtLjgtLjgtLjhDNC44LjQtLjIgNS45IDAgMTIuNS4yIDE4LjYgNS40IDIzLjggMTEuNSAyNGM2LjYuMiAxMi00LjggMTIuNC0xMS4yIDAtLjQtLjMtLjgtLjgtLjgtLjQgMC0uNy4zLS43LjctLjMgNS45LTUuNSAxMC40LTExLjYgOS43eiIgZmlsbD0iIzRmYWU0ZSIvPjwvc3ZnPg==);\n --spinner-gray-data: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCI+PHBhdGggZD0iTTEwLjggMjIuNEM2IDIxLjkgMi4xIDE4IDEuNiAxMy4yLjkgNy4xIDUuNCAxLjkgMTEuMyAxLjVjLjQgMCAuNy0uMy43LS43IDAtLjQtLjQtLjgtLjgtLjhDNC44LjQtLjIgNS45IDAgMTIuNS4yIDE4LjYgNS40IDIzLjggMTEuNSAyNGM2LjYuMiAxMi00LjggMTIuNC0xMS4yIDAtLjQtLjMtLjgtLjgtLjgtLjQgMC0uNy4zLS43LjctLjMgNS45LTUuNSAxMC40LTExLjYgOS43eiIgZmlsbD0iIzcwNzU3OSIvPjwvc3ZnPg==);\n --spinner-yellow-data: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCI+PHBhdGggZD0iTTEwLjggMjIuNEM2IDIxLjkgMi4xIDE4IDEuNiAxMy4yLjkgNy4xIDUuNCAxLjkgMTEuMyAxLjVjLjQgMCAuNy0uMy43LS43IDAtLjQtLjQtLjgtLjgtLjhDNC44LjQtLjIgNS45IDAgMTIuNS4yIDE4LjYgNS40IDIzLjggMTEuNSAyNGM2LjYuMiAxMi00LjggMTIuNC0xMS4yIDAtLjQtLjMtLjgtLjgtLjgtLjQgMC0uNy4zLS43LjctLjMgNS45LTUuNSAxMC40LTExLjYgOS43eiIgZmlsbD0iI0ZERDc2NCIvPjwvc3ZnPg==);\n\n --drag-target-border: url(\"data:image/svg+xml,%3csvg width='100%25' height='100%25' xmlns='http://www.w3.org/2000/svg'%3e%3crect width='100%25' height='100%25' fill='none' rx='8' ry='8' stroke='%23DDDFE0' stroke-width='4' stroke-dasharray='9.1%2c 10.5' stroke-dashoffset='3' stroke-linecap='round'/%3e%3c/svg%3e\");\n --drag-target-border-hovered: url(\"data:image/svg+xml,%3csvg width='100%25' height='100%25' xmlns='http://www.w3.org/2000/svg'%3e%3crect width='100%25' height='100%25' fill='none' rx='8' ry='8' stroke='%2363A2E3' stroke-width='4' stroke-dasharray='9.1%2c 10.5' stroke-dashoffset='3' stroke-linecap='round'/%3e%3c/svg%3e\");\n\n --layer-blackout-opacity: 0.3;\n\n --layer-transition: 300ms cubic-bezier(0.33, 1, 0.68, 1);\n --slide-transition: 300ms cubic-bezier(0.25, 1, 0.5, 1);\n --select-transition: 200ms ease-out;\n\n body.is-ios {\n --layer-transition: 450ms cubic-bezier(0.33, 1, 0.68, 1);\n --slide-transition: 450ms cubic-bezier(0.25, 1, 0.5, 1);\n }\n\n body.is-android {\n --layer-transition: 450ms cubic-bezier(0.25, 1, 0.5, 1);\n --slide-transition: 400ms cubic-bezier(0.25, 1, 0.5, 1);\n }\n}\n","@use \"sass:map\";\n\n$spacer: 1rem !default;\n$spacers: () !default;\n$spacers: map.merge(\n (\n 0: 0,\n 1: (\n $spacer * 0.25,\n ),\n 2: (\n $spacer * 0.5,\n ),\n 3: $spacer,\n 4: (\n $spacer * 1.5,\n ),\n 5: (\n $spacer * 2,\n ),\n 6: (\n $spacer * 3,\n ),\n ),\n $spacers\n);\n\n// Margin and Padding\n\n@each $prop, $abbrev in (margin: m, padding: p) {\n @each $size, $length in $spacers {\n .#{$abbrev}-#{$size} {\n #{$prop}: $length !important;\n }\n .#{$abbrev}t-#{$size},\n .#{$abbrev}y-#{$size} {\n #{$prop}-top: $length !important;\n }\n .#{$abbrev}r-#{$size},\n .#{$abbrev}x-#{$size} {\n #{$prop}-right: $length !important;\n }\n .#{$abbrev}b-#{$size},\n .#{$abbrev}y-#{$size} {\n #{$prop}-bottom: $length !important;\n }\n .#{$abbrev}l-#{$size},\n .#{$abbrev}x-#{$size} {\n #{$prop}-left: $length !important;\n }\n }\n}\n",".input-group {\n position: relative;\n margin-bottom: 1.5rem;\n\n label {\n display: block;\n padding: 0 0.25rem;\n position: absolute;\n left: 0.75rem;\n top: 0.9375rem;\n background-color: var(--color-background);\n font-size: 1rem;\n font-weight: 400;\n color: var(--color-placeholders);\n transition: transform 0.15s ease-out, color 0.15s ease-out;\n cursor: text;\n pointer-events: none;\n transform-origin: left center;\n white-space: nowrap;\n }\n\n &.with-arrow {\n &::after {\n content: \"\";\n position: absolute;\n height: 0.75rem;\n width: 0.75rem;\n border-left: 1px var(--color-text-secondary) solid;\n border-bottom: 1px var(--color-text-secondary) solid;\n transform: rotate(-45deg);\n right: 2rem;\n top: 1rem;\n }\n }\n\n &.touched label,\n &.error label,\n &.success label,\n .form-control:focus + label,\n .form-control.focus + label {\n transform: scale(0.75) translate(-0.5rem, -2.25rem);\n }\n\n input::placeholder,\n .form-control::placeholder {\n color: var(--color-placeholders);\n }\n\n &.touched label {\n color: var(--color-text-secondary);\n }\n\n &.error label {\n color: var(--color-error) !important;\n }\n\n &.success label {\n color: var(--color-text-green) !important;\n }\n\n &.disabled {\n opacity: 0.5;\n pointer-events: none;\n }\n\n &[dir=\"rtl\"] {\n input {\n text-align: right;\n }\n\n label {\n left: auto;\n right: 0.75rem;\n }\n\n &.with-arrow {\n &::after {\n border-left: none;\n border-right: 1px var(--color-text-secondary) solid;\n right: auto;\n left: 2rem;\n }\n }\n\n &.touched label,\n &.error label,\n &.success label,\n .form-control:focus + label,\n .form-control.focus + label {\n transform: scale(0.75) translate(1.5rem, -2.25rem);\n }\n }\n}\n\n.form-control {\n --border-width: 1px;\n display: block;\n width: 100%;\n height: 3.375rem;\n padding: calc(0.75rem - var(--border-width)) calc(0.9rem - var(--border-width));\n border: var(--border-width) solid var(--color-borders-input);\n border-radius: var(--border-radius-default);\n color: var(--color-text);\n background-color: var(--color-background);\n outline: none;\n transition: border-color 0.15s ease;\n word-break: break-word;\n -webkit-appearance: none;\n\n font-size: 1rem;\n line-height: 1.25rem;\n\n &[dir] {\n text-align: initial;\n }\n\n &:hover {\n border-color: var(--color-primary);\n\n & + label {\n color: var(--color-primary);\n }\n }\n\n &:focus,\n &.focus {\n border-color: var(--color-primary);\n box-shadow: inset 0 0 0 1px var(--color-primary);\n caret-color: var(--color-primary);\n\n & + label {\n color: var(--color-primary);\n }\n }\n\n &:disabled {\n background: none !important;\n }\n\n .error & {\n border-color: var(--color-error);\n box-shadow: inset 0 0 0 1px var(--color-error);\n caret-color: var(--color-error);\n }\n\n .success & {\n border-color: var(--color-text-green);\n box-shadow: inset 0 0 0 1px var(--color-text-green);\n caret-color: var(--color-text-green);\n }\n}\n\nselect.form-control {\n option {\n line-height: 2rem;\n }\n}\n\ntextarea.form-control {\n resize: none;\n overflow: hidden;\n line-height: 1.3125rem;\n padding-top: calc(1rem - var(--border-width));\n padding-bottom: calc(1rem - var(--border-width));\n}\n\n.input-group.password-input {\n position: relative;\n\n .form-control {\n padding-right: 3.375rem;\n }\n\n .toggle-password {\n position: absolute;\n top: 0;\n right: 0;\n width: 3.375rem;\n height: 3.375rem;\n display: flex;\n align-items: center;\n justify-content: center;\n cursor: pointer;\n outline: none !important;\n\n color: var(--color-text-secondary);\n opacity: 0.7;\n font-size: 1.5rem;\n\n &:hover,\n &:focus {\n opacity: 1;\n }\n }\n\n &[dir=\"rtl\"] {\n .form-control {\n padding-left: 3.375rem;\n padding-right: calc(0.9rem - var(--border-width));\n }\n\n .toggle-password {\n left: 0;\n right: auto;\n }\n }\n}\n","@font-face {\n font-family: 'icomoon';\n src: url('../assets/fonts/icomoon.woff2?n9djnk') format('woff2'),\n url('../assets/fonts/icomoon.woff?n9djnk') format('woff');\n font-weight: normal;\n font-style: normal;\n font-display: block;\n}\n\n[class^=\"icon-\"], [class*=\" icon-\"] {\n /* use !important to prevent issues with browser extensions that change fonts */\n /* stylelint-disable-next-line font-family-no-missing-generic-family-keyword */\n font-family: 'icomoon' !important;\n speak: none;\n font-style: normal;\n font-weight: normal;\n font-variant: normal;\n text-transform: none;\n line-height: 1;\n\n /* Better Font Rendering =========== */\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n}\n\n[class^=\"icon-char-\"], [class*=\" icon-char-\"] {\n &::before {\n font-family: Roboto, \"Helvetica Neue\", sans-serif;\n content: attr(data-char);\n width: 1.5rem;\n text-align: center;\n display: block;\n }\n}\n\n.icon-loop:before {\n content: \"\\e98c\";\n}\n.icon-skip-next:before {\n content: \"\\e98d\";\n}\n.icon-skip-previous:before {\n content: \"\\e98e\";\n}\n.icon-volume-1:before {\n content: \"\\e98f\";\n}\n.icon-volume-2:before {\n content: \"\\e990\";\n}\n.icon-volume-3:before {\n content: \"\\e991\";\n}\n.icon-stats:before {\n content: \"\\e996\";\n}\n.icon-copy-media:before {\n content: \"\\e995\";\n}\n.icon-reaction-filled:before {\n content: \"\\e994\";\n}\n.icon-reactions:before {\n content: \"\\e993\";\n}\n.icon-sidebar:before {\n content: \"\\e992\";\n}\n.icon-video-stop:before {\n content: \"\\e98b\";\n}\n.icon-speaker:before {\n content: \"\\e981\";\n}\n.icon-speaker-outline:before {\n content: \"\\e982\";\n}\n.icon-phone-discard-outline:before {\n content: \"\\e983\";\n}\n.icon-allow-speak:before {\n content: \"\\e984\";\n}\n.icon-stop-raising-hand:before {\n content: \"\\e985\";\n}\n.icon-share-screen:before {\n content: \"\\e986\";\n}\n.icon-voice-chat:before {\n content: \"\\e987\";\n}\n.icon-video:before {\n content: \"\\e988\";\n}\n.icon-noise-suppression:before {\n content: \"\\e989\";\n}\n.icon-phone-discard:before {\n content: \"\\e98a\";\n}\n.icon-bot-commands-filled:before {\n content: \"\\e97f\";\n}\n.icon-reply-filled:before {\n content: \"\\e980\";\n}\n.icon-bug:before {\n content: \"\\e97e\";\n}\n.icon-data:before {\n content: \"\\e97d\";\n}\n.icon-darkmode:before {\n content: \"\\e979\";\n}\n.icon-animations:before {\n content: \"\\e97a\";\n}\n.icon-enter:before {\n content: \"\\e97b\";\n}\n.icon-fontsize:before {\n content: \"\\e97c\";\n}\n.icon-permissions:before {\n content: \"\\e976\";\n}\n.icon-card:before {\n content: \"\\e977\";\n}\n.icon-truck:before {\n content: \"\\e978\";\n}\n.icon-share-filled:before {\n content: \"\\e95a\";\n}\n.icon-bold:before {\n content: \"\\e961\";\n}\n.icon-bot-command:before {\n content: \"\\e962\";\n}\n.icon-calendar-filter:before {\n content: \"\\e963\";\n}\n.icon-comments:before {\n content: \"\\e964\";\n}\n.icon-comments-sticker:before {\n content: \"\\e965\";\n}\n.icon-arrow-down:before {\n content: \"\\e966\";\n}\n.icon-email:before {\n content: \"\\e967\";\n}\n.icon-italic:before {\n content: \"\\e968\";\n}\n.icon-link:before {\n content: \"\\e969\";\n}\n.icon-mention:before {\n content: \"\\e96a\";\n}\n.icon-monospace:before {\n content: \"\\e96b\";\n}\n.icon-next:before {\n content: \"\\e96c\";\n}\n.icon-password-off:before {\n content: \"\\e96d\";\n}\n.icon-pin-list:before {\n content: \"\\e96e\";\n}\n.icon-previous:before {\n content: \"\\e96f\";\n}\n.icon-replace:before {\n content: \"\\e970\";\n}\n.icon-schedule:before {\n content: \"\\e971\";\n}\n.icon-strikethrough:before {\n content: \"\\e972\";\n}\n.icon-underlined:before {\n content: \"\\e973\";\n}\n.icon-zoom-in:before {\n content: \"\\e974\";\n}\n.icon-zoom-out:before {\n content: \"\\e975\";\n}\n.icon-select:before {\n content: \"\\e960\";\n}\n.icon-folder:before {\n content: \"\\e913\";\n}\n.icon-bots:before {\n content: \"\\e915\";\n}\n.icon-calendar:before {\n content: \"\\e916\";\n}\n.icon-cloud-download:before {\n content: \"\\e917\";\n}\n.icon-colorize:before {\n content: \"\\e918\";\n}\n.icon-forward:before {\n content: \"\\e927\";\n}\n.icon-reply:before {\n content: \"\\e947\";\n}\n.icon-help:before {\n content: \"\\e92a\";\n}\n.icon-info:before {\n content: \"\\e92b\";\n}\n.icon-info-filled:before {\n content: \"\\e91b\";\n}\n.icon-delete-filled:before {\n content: \"\\e91c\";\n}\n.icon-delete:before {\n content: \"\\e91d\";\n}\n.icon-edit:before {\n content: \"\\e923\";\n}\n.icon-new-chat-filled:before {\n content: \"\\e939\";\n}\n.icon-send:before {\n content: \"\\e94a\";\n}\n.icon-send-outline:before {\n content: \"\\e94b\";\n}\n.icon-add-user-filled:before {\n content: \"\\e904\";\n}\n.icon-add-user:before {\n content: \"\\e905\";\n}\n.icon-delete-user:before {\n content: \"\\e91e\";\n}\n.icon-microphone:before {\n content: \"\\e935\";\n}\n.icon-microphone-alt:before {\n content: \"\\e93b\";\n}\n.icon-poll:before {\n content: \"\\e938\";\n}\n.icon-revote:before {\n content: \"\\e93a\";\n}\n.icon-photo:before {\n content: \"\\e940\";\n}\n.icon-document:before {\n content: \"\\e91f\";\n}\n.icon-camera:before {\n content: \"\\e90e\";\n}\n.icon-camera-add:before {\n content: \"\\e90f\";\n}\n.icon-logout:before {\n content: \"\\e932\";\n}\n.icon-saved-messages:before {\n content: \"\\e948\";\n}\n.icon-settings:before {\n content: \"\\e94e\";\n}\n.icon-phone:before {\n content: \"\\e93f\";\n}\n.icon-attach:before {\n content: \"\\e909\";\n}\n.icon-copy:before {\n content: \"\\e91a\";\n}\n.icon-channel:before {\n content: \"\\e911\";\n}\n.icon-group:before {\n content: \"\\e929\";\n}\n.icon-user:before {\n content: \"\\e959\";\n}\n.icon-non-contacts:before {\n content: \"\\e928\";\n}\n.icon-active-sessions:before {\n content: \"\\e902\";\n}\n.icon-admin:before {\n content: \"\\e906\";\n}\n.icon-download:before {\n content: \"\\e921\";\n}\n.icon-location:before {\n content: \"\\e930\";\n}\n.icon-stop:before {\n content: \"\\e952\";\n}\n.icon-archive:before {\n content: \"\\e908\";\n}\n.icon-unarchive:before {\n content: \"\\e953\";\n}\n.icon-readchats:before {\n content: \"\\e933\";\n}\n.icon-unread:before {\n content: \"\\e957\";\n}\n.icon-message:before {\n content: \"\\e934\";\n}\n.icon-lock:before {\n content: \"\\e931\";\n}\n.icon-unlock:before {\n content: \"\\e954\";\n}\n.icon-mute:before {\n content: \"\\e937\";\n}\n.icon-unmute:before {\n content: \"\\e955\";\n}\n.icon-pin:before {\n content: \"\\e941\";\n}\n.icon-unpin:before {\n content: \"\\e956\";\n}\n.icon-smallscreen:before {\n content: \"\\e95e\";\n}\n.icon-fullscreen:before {\n content: \"\\e95f\";\n}\n.icon-large-pause:before {\n content: \"\\e92e\";\n}\n.icon-large-play:before {\n content: \"\\e92f\";\n}\n.icon-pause:before {\n content: \"\\e93d\";\n}\n.icon-play:before {\n content: \"\\e943\";\n}\n.icon-channelviews:before {\n content: \"\\e912\";\n}\n.icon-message-succeeded:before {\n content: \"\\e900\";\n}\n.icon-message-read:before {\n content: \"\\e901\";\n}\n.icon-message-pending:before {\n content: \"\\e94c\";\n}\n.icon-message-failed:before {\n content: \"\\e94d\";\n}\n.icon-favorite:before {\n content: \"\\e93e\";\n}\n.icon-keyboard:before {\n content: \"\\e944\";\n}\n.icon-delete-left:before {\n content: \"\\e945\";\n}\n.icon-recent:before {\n content: \"\\e946\";\n}\n.icon-gifs:before {\n content: \"\\e94f\";\n}\n.icon-stickers:before {\n content: \"\\e95b\";\n}\n.icon-smile:before {\n content: \"\\e950\";\n}\n.icon-animals:before {\n content: \"\\e907\";\n}\n.icon-eats:before {\n content: \"\\e922\";\n}\n.icon-sport:before {\n content: \"\\e951\";\n}\n.icon-car:before {\n content: \"\\e910\";\n}\n.icon-lamp:before {\n content: \"\\e92c\";\n}\n.icon-language:before {\n content: \"\\e92d\";\n}\n.icon-flag:before {\n content: \"\\e926\";\n}\n.icon-more:before {\n content: \"\\e936\";\n}\n.icon-search:before {\n content: \"\\e949\";\n}\n.icon-remove:before {\n content: \"\\e95c\";\n}\n.icon-add:before {\n content: \"\\e903\";\n}\n.icon-check:before {\n content: \"\\e914\";\n}\n.icon-close:before {\n content: \"\\e919\";\n}\n.icon-arrow-left:before {\n content: \"\\e90d\";\n}\n.icon-arrow-right:before {\n content: \"\\e93c\";\n}\n.icon-down:before {\n content: \"\\e920\";\n}\n.icon-up:before {\n content: \"\\e958\";\n}\n.icon-eye-closed:before {\n content: \"\\e925\";\n}\n.icon-eye:before {\n content: \"\\e924\";\n}\n.icon-muted:before {\n content: \"\\e95d\";\n}\n.icon-avatar-archived-chats:before {\n content: \"\\e90a\";\n}\n.icon-avatar-deleted-account:before {\n content: \"\\e90b\";\n}\n.icon-avatar-saved-messages:before {\n content: \"\\e90c\";\n}\n.icon-pinned-chat:before {\n content: \"\\e942\";\n}\n","@import \"./mixins\";\n\n// Common styles for all media-type components across the app.\n.media-inner {\n position: relative;\n\n video,\n img {\n display: block;\n object-fit: cover;\n }\n\n video {\n background: no-repeat 50% 50%;\n background-size: contain;\n }\n\n .thumbnail ~ .thumbnail,\n .thumbnail ~ .full-media,\n .media-loading {\n position: absolute;\n }\n}\n\n.animated-close-icon {\n position: absolute;\n transform: rotate(-45deg);\n\n &,\n &::before,\n &::after {\n width: 1.125rem;\n height: 0.125rem;\n border-radius: 0.125rem;\n background-color: var(--color-text-secondary);\n transition: transform var(--slide-transition);\n }\n\n &::before,\n &::after {\n position: absolute;\n left: 0;\n top: 0;\n content: \"\";\n }\n\n &::before {\n transform: rotate(90deg);\n }\n\n &.no-transition {\n &,\n &::before,\n &::after {\n transition: none;\n }\n }\n\n &.state-back {\n transform: rotate(180deg);\n\n &::before {\n transform: rotate(45deg) scaleX(0.75) translate(0, -0.375rem);\n }\n\n &::after {\n transform: rotate(-45deg) scaleX(0.75) translate(0, 0.375rem);\n }\n }\n}\n\n// Used by ChatList and ContactList components\n.chat-list {\n background: var(--color-background);\n height: 100%;\n padding: 0.5rem 0.125rem 0.5rem 0.4375rem;\n\n overflow-y: auto;\n body.is-android & {\n @include overflow-y-overlay();\n }\n\n .scroll-container {\n position: relative;\n }\n\n .ListItem.chat-item-clickable {\n margin: 0;\n }\n\n @media (max-width: 600px) {\n padding-left: 0;\n padding-right: 0;\n }\n\n .no-results {\n color: var(--color-text-meta);\n margin-top: 2rem;\n text-align: center;\n }\n}\n\n// Used by Avatar and ProfilePhoto components\ndiv {\n &.color-bg-1 {\n --color-user: var(--color-user-1);\n }\n\n &.color-bg-2 {\n --color-user: var(--color-user-2);\n }\n\n &.color-bg-4 {\n --color-user: var(--color-user-4);\n }\n\n &.color-bg-5 {\n --color-user: var(--color-user-5);\n }\n\n &.color-bg-6 {\n --color-user: var(--color-user-6);\n }\n\n &.color-bg-7 {\n --color-user: var(--color-user-7);\n }\n\n &.color-bg-8 {\n --color-user: var(--color-user-8);\n }\n\n &.replies-bot-account,\n &.saved-messages {\n --color-user: var(--color-primary);\n }\n\n &.deleted-account {\n --color-user: var(--color-gray);\n }\n}\n","// @optimization\n@mixin while-transition() {\n .Transition > div:not(.Transition__slide--active) &, body.animating-right-column & {\n @content;\n }\n}\n\n@mixin overflow-y-overlay() {\n @supports (overflow-y: overlay) {\n overflow-y: overlay;\n\n //Workaround for Android <= 9\n overflow-x: hidden;\n }\n}\n\n@mixin reset-range() {\n input[type=\"range\"] {\n -webkit-appearance: none;\n display: block;\n width: 100%;\n height: 0.75rem;\n margin-bottom: 0.5rem;\n background: transparent;\n\n &:focus {\n outline: none;\n }\n\n &::-ms-track {\n width: 100%;\n cursor: pointer;\n\n background: transparent;\n border-color: transparent;\n color: transparent;\n }\n\n &::-webkit-slider-thumb {\n -webkit-appearance: none;\n }\n\n &::-moz-slider-thumb {\n -moz-appearance: none;\n }\n\n &::-webkit-slider-runnable-track {\n cursor: pointer;\n }\n\n &::-moz-range-track, &::-moz-range-progress {\n cursor: pointer;\n }\n }\n}\n","@media print {\n body,\n html,\n .messages-layout {\n background: #fff;\n }\n\n #LeftColumn,\n #RightColumn-wrapper,\n .ChatOrUserPicker,\n #Notifications,\n .Modal,\n .ActiveCallHeader,\n .unread-count,\n #middle-column-bg,\n #middle-column-portals,\n .header-tools,\n .ScrollDownButton,\n .middle-column-footer {\n display: none !important;\n }\n\n #MiddleColumn {\n border-left: none !important;\n }\n\n html,\n body,\n #root,\n #UiLoader,\n #Main,\n #MiddleColumn,\n .MessageList,\n .messages-layout,\n .Transition,\n .Transition > * {\n height: auto !important;\n overflow: visible !important;\n display: block !important;\n position: static !important;\n margin: 0 !important;\n padding: 0 !important;\n width: 100% !important;\n max-width: 100% !important;\n transform: none !important;\n }\n\n .messages-container {\n max-width: 100rem !important;\n width: 100% !important;\n }\n\n .MessageList .sticky-date > span,\n .MessageList .local-action-message > span,\n .MessageList .ActionMessage > span,\n .MessageList .empty > span {\n background: var(--color-background-own) !important;\n color: var(--color-text) !important;\n }\n}\n"],"names":[],"sourceRoot":""} \ No newline at end of file diff --git a/dist/main.1e16878f02d07901172c.css b/dist/main.acbfb47616f361714da0.css similarity index 80% rename from dist/main.1e16878f02d07901172c.css rename to dist/main.acbfb47616f361714da0.css index d586f84d7..74927c7d7 100644 --- a/dist/main.1e16878f02d07901172c.css +++ b/dist/main.acbfb47616f361714da0.css @@ -159,6 +159,6 @@ unicode-range: U+0600-06FF; } -*,*::before,*::after{box-sizing:border-box}html{font-family:sans-serif;line-height:1.15;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%;-ms-overflow-style:scrollbar;-webkit-tap-highlight-color:rgba(0, 0, 0, 0)}article,aside,dialog,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}body{margin:0}[tabindex="-1"]:focus{outline:none !important}hr{box-sizing:content-box;height:0;overflow:visible}h1,h2,h3,h4,h5,h6{margin-top:0;margin-bottom:.5rem;font-weight:500}abbr[title],abbr[data-original-title]{text-decoration:underline;-webkit-text-decoration:underline dotted;text-decoration:underline dotted;cursor:help;border-bottom:0}address{margin-bottom:1rem;font-style:normal;line-height:inherit}p,ol,ul,dl{margin-top:0;margin-bottom:1rem}ol ol,ul ul,ol ul,ul ol{margin-bottom:0}dd{margin-bottom:.5rem;margin-left:0}blockquote,figure{margin:0 0 1rem}dfn{font-style:italic}dt,b,strong{font-weight:500}small{font-size:80%}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sub{bottom:-0.25em}sup{top:-0.5em}a{color:var(--color-links);text-decoration:none;background-color:transparent;-webkit-text-decoration-skip:objects}a:hover{color:#0056b3;text-decoration:underline}a:not([href]):not([tabindex]),a:not([href]):not([tabindex]):hover,a:not([href]):not([tabindex]):focus{color:inherit;text-decoration:none}a:not([href]):not([tabindex]):focus{outline:0}pre,code,kbd,samp{font:.9375rem/1.25 "Courier","Courier New","Nimbus Mono L","Courier 10 Pitch","FreeMono",sans-serif-monospace,monospace;font-size-adjust:.43}pre{margin-top:0;margin-bottom:1rem;overflow:auto;-ms-overflow-style:scrollbar}img{vertical-align:middle;border-style:none}svg:not(:root){overflow:hidden}a,area,button,[role=button],input:not([type=range]),label,select,summary,textarea{touch-action:manipulation}table{border-collapse:collapse}caption{padding-top:.75rem;padding-bottom:.75rem;color:#868e96;text-align:left;caption-side:bottom}th{text-align:inherit}label{display:inline-block;margin-bottom:.5rem}button{border-radius:0}button:focus{outline:1px dotted;outline:5px auto -webkit-focus-ring-color}input,button,select,optgroup,textarea{margin:0;font-family:inherit;font-size:inherit;line-height:inherit}button,input{overflow:visible}button,select{text-transform:none}button,html [type=button],[type=reset],[type=submit]{-webkit-appearance:button}button::-moz-focus-inner,[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner{padding:0;border-style:none}input[type=radio],input[type=checkbox]{box-sizing:border-box;padding:0}input[type=date],input[type=time],input[type=datetime-local],input[type=month]{-webkit-appearance:listbox}textarea{overflow:auto;resize:vertical}fieldset{min-width:0;padding:0;margin:0;border:0}legend{display:block;width:100%;max-width:100%;padding:0;margin-bottom:.5rem;font-size:1.5rem;line-height:inherit;color:inherit;white-space:normal}progress{vertical-align:baseline}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{outline-offset:-2px;-webkit-appearance:none}[type=search]::-webkit-search-cancel-button,[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{font:inherit;-webkit-appearance:button}output{display:inline-block}summary{display:list-item}template{display:none}[hidden]{display:none !important}:root{--color-background: #ffffff;--color-background-compact-menu: #FFFFFFBB;--color-background-compact-menu-reactions: #FFFFFFEB;--color-background-compact-menu-hover: #000000B2;--color-background-selected: #f4f4f5;--color-background-secondary: #f4f4f5;--color-background-secondary-accent: #e4e4e5;--color-background-own: #eeffde;--color-background-own-selected: color.adjust($color-light-green, -10%);--color-text: #000000;--color-text-lighter: #2e3939;--color-text-secondary: #707579;--color-icon-secondary: #707579;--color-text-secondary-rgb: 112, 117, 121;--color-text-secondary-apple: #8a8a90;--color-text-meta: #686c72;--color-text-meta-rgb: 104, 108, 114;--color-text-meta-colored: #4fae4e;--color-text-meta-apple: #8c8c91;--color-text-green: #4fae4e;--color-text-green-rgb: 79, 174, 78;--color-borders: #dadce0;--color-borders-input: #dadce0;--color-dividers: #c8c6cc;--color-webpage-initial-background: #2e3939;--color-interactive-active: var(--color-primary);--color-interactive-inactive: rgba(var(--color-text-secondary-rgb), 0.25);--color-interactive-buffered: rgba(var(--color-text-secondary-rgb), 0.25);--color-interactive-element-hover: rgba(var(--color-text-secondary-rgb), 0.08);--color-composer-button: #707579CC;--color-primary: #3390ec;--color-primary-shade: #2f84d9;--color-primary-shade-darker: #2b79c6;--color-primary-shade-rgb: 47, 132, 217;--color-primary-opacity: rgba(var(--color-primary), 0.5);--color-green: #00c73e;--color-green-darker: #00a734;--color-error: #e53935;--color-error-shade: #d33431;--color-error-rgb: 229, 57, 53;--color-warning: #fb8c00;--color-yellow: #fdd764;--color-links: #3390ec;--color-own-links: #ffffff;--color-placeholders: #a2acb4;--color-pinned: #ffffff;--color-code: #4a729a;--color-code-bg: rgba(112, 117, 121, 0.08);--color-code-own: #3c7940;--color-code-own-bg: rgba(112, 117, 121, 0.08);--color-accent-own: #4fae4e;--color-message-meta-own: #4fae4e;--color-message-reaction: $color-message-reaction;--color-message-reaction-hover: $color-message-reaction-hover;--color-message-reaction-own: $color-message-reaction-own;--color-message-reaction-hover-own: $color-message-reaction-own-hover;--color-reply-hover: #f4f4f4;--color-reply-active: #e8e9ea;--color-reply-own-hover: #dbf5cd;--color-reply-own-active: #c8ecbb;--color-background-own-apple: #dcf8c5;--color-reply-own-hover-apple: #cbefb7;--color-reply-own-active-apple: #bae6a8;--color-white: #ffffff;--color-gray: #c4c9cc;--color-chat-hover: #f4f4f5;--color-chat-active: #3390ec;--color-item-active: #ededed;--color-selection-highlight: #3993fb;--color-selection-highlight-emoji: rgba(57, 147, 251, 0.7);--color-user-1: #e17076;--color-user-2: #7bc862;--color-user-4: #65aadd;--color-user-5: #a695e7;--color-user-6: #ee7aae;--color-user-7: #6ec9cb;--color-user-8: #faa774;--color-default-shadow: #72727240;--color-light-shadow: #7272722b;--color-skeleton-background: rgba(33, 33, 33, 0.15);--color-skeleton-foreground: rgba(232, 232, 232, 0.2);--color-telegram-blue: #3390ec;--vh: 1vh;--border-radius-default: 0.75rem;--border-radius-default-small: 0.625rem;--border-radius-default-tiny: 0.375rem;--border-radius-messages: 0.75rem;--border-radius-messages-small: 0.375rem;--messages-container-width: 45.5rem;--right-column-width: 26.5rem;--header-height: 3.5rem;--symbol-menu-width: 26.25rem;--symbol-menu-height: 23.25rem;--symbol-menu-footer-height: 3rem;--z-ui-loader-mask: 2000;--z-notification: 1000;--z-right-column: 900;--z-header-menu: 990;--z-header-menu-backdrop: 980;--z-modal: 1000;--z-media-viewer: 1500;--z-drop-area: 55;--z-animation-fade: 50;--z-menu-bubble: 21;--z-menu-backdrop: 20;--z-message-highlighted: 14;--z-message-context-menu: 13;--z-scroll-down-button: 12;--z-mobile-search: 12;--z-middle-header: 11;--z-middle-footer: 11;--z-country-code-input-group: 10;--z-message-select-control: 9;--z-message-select-area: 8;--z-sticky-date: 9;--z-register-add-avatar: 5;--z-media-viewer-head: 3;--z-resize-handle: 2;--z-below: -1;--spinner-white-data: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCI+PHBhdGggZD0iTTEwLjggMjIuNEM2IDIxLjkgMi4xIDE4IDEuNiAxMy4yLjkgNy4xIDUuNCAxLjkgMTEuMyAxLjVjLjQgMCAuNy0uMy43LS43IDAtLjQtLjQtLjgtLjgtLjhDNC44LjQtLjIgNS45IDAgMTIuNS4yIDE4LjYgNS40IDIzLjggMTEuNSAyNGM2LjYuMiAxMi00LjggMTIuNC0xMS4yIDAtLjQtLjMtLjgtLjgtLjgtLjQgMC0uNy4zLS43LjctLjMgNS45LTUuNSAxMC40LTExLjYgOS43eiIgZmlsbD0iI2ZmZmZmZiIvPjwvc3ZnPg==);--spinner-white-thin-data: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCI+PHBhdGggZmlsbD0iI2ZmZmZmZiIgZD0iTTEyIDIzQzUuOSAyMyAxIDE4LjEgMSAxMlM1LjkgMSAxMiAxVjBDNS40IDAgMCA1LjQgMCAxMnM1LjQgMTIgMTIgMTIgMTItNS40IDEyLTEyaC0xYzAgNi4xLTQuOSAxMS0xMSAxMXoiLz48L3N2Zz4=);--spinner-blue-data: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCI+PHBhdGggZD0iTTEwLjggMjIuNEM2IDIxLjkgMi4xIDE4IDEuNiAxMy4yLjkgNy4xIDUuNCAxLjkgMTEuMyAxLjVjLjQgMCAuNy0uMy43LS43IDAtLjQtLjQtLjgtLjgtLjhDNC44LjQtLjIgNS45IDAgMTIuNS4yIDE4LjYgNS40IDIzLjggMTEuNSAyNGM2LjYuMiAxMi00LjggMTIuNC0xMS4yIDAtLjQtLjMtLjgtLjgtLjgtLjQgMC0uNy4zLS43LjctLjMgNS45LTUuNSAxMC40LTExLjYgOS43eiIgZmlsbD0iIzRlYTRmNiIvPjwvc3ZnPg==);--spinner-dark-blue-data: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCI+PHBhdGggZD0iTTEwLjggMjIuNEM2IDIxLjkgMi4xIDE4IDEuNiAxMy4yLjkgNy4xIDUuNCAxLjkgMTEuMyAxLjVjLjQgMCAuNy0uMy43LS43IDAtLjQtLjQtLjgtLjgtLjhDNC44LjQtLjIgNS45IDAgMTIuNS4yIDE4LjYgNS40IDIzLjggMTEuNSAyNGM2LjYuMiAxMi00LjggMTIuNC0xMS4yIDAtLjQtLjMtLjgtLjgtLjgtLjQgMC0uNy4zLS43LjctLjMgNS45LTUuNSAxMC40LTExLjYgOS43eiIgZmlsbD0iIzgzNzhEQiIvPjwvc3ZnPg==);--spinner-black-data: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCI+PHBhdGggZD0iTTEwLjggMjIuNEM2IDIxLjkgMi4xIDE4IDEuNiAxMy4yLjkgNy4xIDUuNCAxLjkgMTEuMyAxLjVjLjQgMCAuNy0uMy43LS43IDAtLjQtLjQtLjgtLjgtLjhDNC44LjQtLjIgNS45IDAgMTIuNS4yIDE4LjYgNS40IDIzLjggMTEuNSAyNGM2LjYuMiAxMi00LjggMTIuNC0xMS4yIDAtLjQtLjMtLjgtLjgtLjgtLjQgMC0uNy4zLS43LjctLjMgNS45LTUuNSAxMC40LTExLjYgOS43eiIgZmlsbD0iIzJlMzkzOSIvPjwvc3ZnPg==);--spinner-green-data: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCI+PHBhdGggZD0iTTEwLjggMjIuNEM2IDIxLjkgMi4xIDE4IDEuNiAxMy4yLjkgNy4xIDUuNCAxLjkgMTEuMyAxLjVjLjQgMCAuNy0uMy43LS43IDAtLjQtLjQtLjgtLjgtLjhDNC44LjQtLjIgNS45IDAgMTIuNS4yIDE4LjYgNS40IDIzLjggMTEuNSAyNGM2LjYuMiAxMi00LjggMTIuNC0xMS4yIDAtLjQtLjMtLjgtLjgtLjgtLjQgMC0uNy4zLS43LjctLjMgNS45LTUuNSAxMC40LTExLjYgOS43eiIgZmlsbD0iIzRmYWU0ZSIvPjwvc3ZnPg==);--spinner-gray-data: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCI+PHBhdGggZD0iTTEwLjggMjIuNEM2IDIxLjkgMi4xIDE4IDEuNiAxMy4yLjkgNy4xIDUuNCAxLjkgMTEuMyAxLjVjLjQgMCAuNy0uMy43LS43IDAtLjQtLjQtLjgtLjgtLjhDNC44LjQtLjIgNS45IDAgMTIuNS4yIDE4LjYgNS40IDIzLjggMTEuNSAyNGM2LjYuMiAxMi00LjggMTIuNC0xMS4yIDAtLjQtLjMtLjgtLjgtLjgtLjQgMC0uNy4zLS43LjctLjMgNS45LTUuNSAxMC40LTExLjYgOS43eiIgZmlsbD0iIzcwNzU3OSIvPjwvc3ZnPg==);--spinner-yellow-data: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCI+PHBhdGggZD0iTTEwLjggMjIuNEM2IDIxLjkgMi4xIDE4IDEuNiAxMy4yLjkgNy4xIDUuNCAxLjkgMTEuMyAxLjVjLjQgMCAuNy0uMy43LS43IDAtLjQtLjQtLjgtLjgtLjhDNC44LjQtLjIgNS45IDAgMTIuNS4yIDE4LjYgNS40IDIzLjggMTEuNSAyNGM2LjYuMiAxMi00LjggMTIuNC0xMS4yIDAtLjQtLjMtLjgtLjgtLjgtLjQgMC0uNy4zLS43LjctLjMgNS45LTUuNSAxMC40LTExLjYgOS43eiIgZmlsbD0iI0ZERDc2NCIvPjwvc3ZnPg==);--drag-target-border: url("data:image/svg+xml,%3csvg width=%27100%25%27 height=%27100%25%27 xmlns=%27http://www.w3.org/2000/svg%27%3e%3crect width=%27100%25%27 height=%27100%25%27 fill=%27none%27 rx=%278%27 ry=%278%27 stroke=%27%23DDDFE0%27 stroke-width=%274%27 stroke-dasharray=%279.1%2c 10.5%27 stroke-dashoffset=%273%27 stroke-linecap=%27round%27/%3e%3c/svg%3e");--drag-target-border-hovered: url("data:image/svg+xml,%3csvg width=%27100%25%27 height=%27100%25%27 xmlns=%27http://www.w3.org/2000/svg%27%3e%3crect width=%27100%25%27 height=%27100%25%27 fill=%27none%27 rx=%278%27 ry=%278%27 stroke=%27%2363A2E3%27 stroke-width=%274%27 stroke-dasharray=%279.1%2c 10.5%27 stroke-dashoffset=%273%27 stroke-linecap=%27round%27/%3e%3c/svg%3e");--layer-blackout-opacity: 0.3;--layer-transition: 300ms cubic-bezier(0.33, 1, 0.68, 1);--slide-transition: 300ms cubic-bezier(0.25, 1, 0.5, 1);--select-transition: 200ms ease-out}@media(min-width: 1276px)and (max-width: 1920px){:root{--right-column-width: 25vw}}@media(min-width: 1921px){:root{--messages-container-width: 50vw}}@media(max-width: 600px){:root{--right-column-width: 100vw;--symbol-menu-width: 100vw;--symbol-menu-height: 14.6875rem}}:root body.is-ios{--layer-transition: 450ms cubic-bezier(0.33, 1, 0.68, 1);--slide-transition: 450ms cubic-bezier(0.25, 1, 0.5, 1)}:root body.is-android{--layer-transition: 450ms cubic-bezier(0.25, 1, 0.5, 1);--slide-transition: 400ms cubic-bezier(0.25, 1, 0.5, 1)}.m-0{margin:0 !important}.mt-0,.my-0{margin-top:0 !important}.mr-0,.mx-0{margin-right:0 !important}.mb-0,.my-0{margin-bottom:0 !important}.ml-0,.mx-0{margin-left:0 !important}.m-1{margin:.25rem !important}.mt-1,.my-1{margin-top:.25rem !important}.mr-1,.mx-1{margin-right:.25rem !important}.mb-1,.my-1{margin-bottom:.25rem !important}.ml-1,.mx-1{margin-left:.25rem !important}.m-2{margin:.5rem !important}.mt-2,.my-2{margin-top:.5rem !important}.mr-2,.mx-2{margin-right:.5rem !important}.mb-2,.my-2{margin-bottom:.5rem !important}.ml-2,.mx-2{margin-left:.5rem !important}.m-3{margin:1rem !important}.mt-3,.my-3{margin-top:1rem !important}.mr-3,.mx-3{margin-right:1rem !important}.mb-3,.my-3{margin-bottom:1rem !important}.ml-3,.mx-3{margin-left:1rem !important}.m-4{margin:1.5rem !important}.mt-4,.my-4{margin-top:1.5rem !important}.mr-4,.mx-4{margin-right:1.5rem !important}.mb-4,.my-4{margin-bottom:1.5rem !important}.ml-4,.mx-4{margin-left:1.5rem !important}.m-5{margin:2rem !important}.mt-5,.my-5{margin-top:2rem !important}.mr-5,.mx-5{margin-right:2rem !important}.mb-5,.my-5{margin-bottom:2rem !important}.ml-5,.mx-5{margin-left:2rem !important}.m-6{margin:3rem !important}.mt-6,.my-6{margin-top:3rem !important}.mr-6,.mx-6{margin-right:3rem !important}.mb-6,.my-6{margin-bottom:3rem !important}.ml-6,.mx-6{margin-left:3rem !important}.p-0{padding:0 !important}.pt-0,.py-0{padding-top:0 !important}.pr-0,.px-0{padding-right:0 !important}.pb-0,.py-0{padding-bottom:0 !important}.pl-0,.px-0{padding-left:0 !important}.p-1{padding:.25rem !important}.pt-1,.py-1{padding-top:.25rem !important}.pr-1,.px-1{padding-right:.25rem !important}.pb-1,.py-1{padding-bottom:.25rem !important}.pl-1,.px-1{padding-left:.25rem !important}.p-2{padding:.5rem !important}.pt-2,.py-2{padding-top:.5rem !important}.pr-2,.px-2{padding-right:.5rem !important}.pb-2,.py-2{padding-bottom:.5rem !important}.pl-2,.px-2{padding-left:.5rem !important}.p-3{padding:1rem !important}.pt-3,.py-3{padding-top:1rem !important}.pr-3,.px-3{padding-right:1rem !important}.pb-3,.py-3{padding-bottom:1rem !important}.pl-3,.px-3{padding-left:1rem !important}.p-4{padding:1.5rem !important}.pt-4,.py-4{padding-top:1.5rem !important}.pr-4,.px-4{padding-right:1.5rem !important}.pb-4,.py-4{padding-bottom:1.5rem !important}.pl-4,.px-4{padding-left:1.5rem !important}.p-5{padding:2rem !important}.pt-5,.py-5{padding-top:2rem !important}.pr-5,.px-5{padding-right:2rem !important}.pb-5,.py-5{padding-bottom:2rem !important}.pl-5,.px-5{padding-left:2rem !important}.p-6{padding:3rem !important}.pt-6,.py-6{padding-top:3rem !important}.pr-6,.px-6{padding-right:3rem !important}.pb-6,.py-6{padding-bottom:3rem !important}.pl-6,.px-6{padding-left:3rem !important}.input-group{position:relative;margin-bottom:1.5rem}.input-group label{display:block;padding:0 .25rem;position:absolute;left:.75rem;top:.9375rem;background-color:var(--color-background);font-size:1rem;font-weight:400;color:var(--color-placeholders);transition:transform .15s ease-out,color .15s ease-out;cursor:text;pointer-events:none;transform-origin:left center;white-space:nowrap}.input-group.with-arrow::after{content:"";position:absolute;height:.75rem;width:.75rem;border-left:1px var(--color-text-secondary) solid;border-bottom:1px var(--color-text-secondary) solid;transform:rotate(-45deg);right:2rem;top:1rem}.input-group.touched label,.input-group.error label,.input-group.success label,.input-group .form-control:focus+label,.input-group .form-control.focus+label{transform:scale(0.75) translate(-0.5rem, -2.25rem)}.input-group input::placeholder,.input-group .form-control::placeholder{color:var(--color-placeholders)}.input-group.touched label{color:var(--color-text-secondary)}.input-group.error label{color:var(--color-error) !important}.input-group.success label{color:var(--color-text-green) !important}.input-group.disabled{opacity:.5;pointer-events:none}.input-group[dir=rtl] input{text-align:right}.input-group[dir=rtl] label{left:auto;right:.75rem}.input-group[dir=rtl].with-arrow::after{border-left:none;border-right:1px var(--color-text-secondary) solid;right:auto;left:2rem}.input-group[dir=rtl].touched label,.input-group[dir=rtl].error label,.input-group[dir=rtl].success label,.input-group[dir=rtl] .form-control:focus+label,.input-group[dir=rtl] .form-control.focus+label{transform:scale(0.75) translate(1.5rem, -2.25rem)}.form-control{--border-width: 1px;display:block;width:100%;height:3.375rem;padding:calc(.75rem - var(--border-width)) calc(.9rem - var(--border-width));border:var(--border-width) solid var(--color-borders-input);border-radius:var(--border-radius-default);color:var(--color-text);background-color:var(--color-background);outline:none;transition:border-color .15s ease;word-break:break-word;-webkit-appearance:none;font-size:1rem;line-height:1.25rem}.form-control[dir]{text-align:initial}.form-control:hover{border-color:var(--color-primary)}.form-control:hover+label{color:var(--color-primary)}.form-control:focus,.form-control.focus{border-color:var(--color-primary);box-shadow:inset 0 0 0 1px var(--color-primary);caret-color:var(--color-primary)}.form-control:focus+label,.form-control.focus+label{color:var(--color-primary)}.form-control:disabled{background:none !important}.error .form-control{border-color:var(--color-error);box-shadow:inset 0 0 0 1px var(--color-error);caret-color:var(--color-error)}.success .form-control{border-color:var(--color-text-green);box-shadow:inset 0 0 0 1px var(--color-text-green);caret-color:var(--color-text-green)}select.form-control option{line-height:2rem}textarea.form-control{resize:none;overflow:hidden;line-height:1.3125rem;padding-top:calc(1rem - var(--border-width));padding-bottom:calc(1rem - var(--border-width))}.input-group.password-input{position:relative}.input-group.password-input .form-control{padding-right:3.375rem}.input-group.password-input .toggle-password{position:absolute;top:0;right:0;width:3.375rem;height:3.375rem;display:flex;align-items:center;justify-content:center;cursor:pointer;outline:none !important;color:var(--color-text-secondary);opacity:.7;font-size:1.5rem}.input-group.password-input .toggle-password:hover,.input-group.password-input .toggle-password:focus{opacity:1}.input-group.password-input[dir=rtl] .form-control{padding-left:3.375rem;padding-right:calc(.9rem - var(--border-width))}.input-group.password-input[dir=rtl] .toggle-password{left:0;right:auto}@font-face{font-family:"icomoon";src:url(icomoon.2549beaecc9efc34431b..woff2) format("woff2"),url(icomoon.f3b644d36e5115287748..woff) format("woff");font-weight:normal;font-style:normal;font-display:block}[class^=icon-],[class*=" icon-"]{font-family:"icomoon" !important;speak:none;font-style:normal;font-weight:normal;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}[class^=icon-char-]::before,[class*=" icon-char-"]::before{font-family:Roboto,"Helvetica Neue",sans-serif;content:attr(data-char);width:1.5rem;text-align:center;display:block}.icon-loop:before{content:""}.icon-skip-next:before{content:""}.icon-skip-previous:before{content:""}.icon-volume-1:before{content:""}.icon-volume-2:before{content:""}.icon-volume-3:before{content:""}.icon-stats:before{content:""}.icon-copy-media:before{content:""}.icon-reaction-filled:before{content:""}.icon-reactions:before{content:""}.icon-sidebar:before{content:""}.icon-video-stop:before{content:""}.icon-speaker:before{content:""}.icon-speaker-outline:before{content:""}.icon-phone-discard-outline:before{content:""}.icon-allow-speak:before{content:""}.icon-stop-raising-hand:before{content:""}.icon-share-screen:before{content:""}.icon-voice-chat:before{content:""}.icon-video:before{content:""}.icon-noise-suppression:before{content:""}.icon-phone-discard:before{content:""}.icon-bot-commands-filled:before{content:""}.icon-reply-filled:before{content:""}.icon-bug:before{content:""}.icon-data:before{content:""}.icon-darkmode:before{content:""}.icon-animations:before{content:""}.icon-enter:before{content:""}.icon-fontsize:before{content:""}.icon-permissions:before{content:""}.icon-card:before{content:""}.icon-truck:before{content:""}.icon-share-filled:before{content:""}.icon-bold:before{content:""}.icon-bot-command:before{content:""}.icon-calendar-filter:before{content:""}.icon-comments:before{content:""}.icon-comments-sticker:before{content:""}.icon-arrow-down:before{content:""}.icon-email:before{content:""}.icon-italic:before{content:""}.icon-link:before{content:""}.icon-mention:before{content:""}.icon-monospace:before{content:""}.icon-next:before{content:""}.icon-password-off:before{content:""}.icon-pin-list:before{content:""}.icon-previous:before{content:""}.icon-replace:before{content:""}.icon-schedule:before{content:""}.icon-strikethrough:before{content:""}.icon-underlined:before{content:""}.icon-zoom-in:before{content:""}.icon-zoom-out:before{content:""}.icon-select:before{content:""}.icon-folder:before{content:""}.icon-bots:before{content:""}.icon-calendar:before{content:""}.icon-cloud-download:before{content:""}.icon-colorize:before{content:""}.icon-forward:before{content:""}.icon-reply:before{content:""}.icon-help:before{content:""}.icon-info:before{content:""}.icon-info-filled:before{content:""}.icon-delete-filled:before{content:""}.icon-delete:before{content:""}.icon-edit:before{content:""}.icon-new-chat-filled:before{content:""}.icon-send:before{content:""}.icon-send-outline:before{content:""}.icon-add-user-filled:before{content:""}.icon-add-user:before{content:""}.icon-delete-user:before{content:""}.icon-microphone:before{content:""}.icon-microphone-alt:before{content:""}.icon-poll:before{content:""}.icon-revote:before{content:""}.icon-photo:before{content:""}.icon-document:before{content:""}.icon-camera:before{content:""}.icon-camera-add:before{content:""}.icon-logout:before{content:""}.icon-saved-messages:before{content:""}.icon-settings:before{content:""}.icon-phone:before{content:""}.icon-attach:before{content:""}.icon-copy:before{content:""}.icon-channel:before{content:""}.icon-group:before{content:""}.icon-user:before{content:""}.icon-non-contacts:before{content:""}.icon-active-sessions:before{content:""}.icon-admin:before{content:""}.icon-download:before{content:""}.icon-location:before{content:""}.icon-stop:before{content:""}.icon-archive:before{content:""}.icon-unarchive:before{content:""}.icon-readchats:before{content:""}.icon-unread:before{content:""}.icon-message:before{content:""}.icon-lock:before{content:""}.icon-unlock:before{content:""}.icon-mute:before{content:""}.icon-unmute:before{content:""}.icon-pin:before{content:""}.icon-unpin:before{content:""}.icon-smallscreen:before{content:""}.icon-fullscreen:before{content:""}.icon-large-pause:before{content:""}.icon-large-play:before{content:""}.icon-pause:before{content:""}.icon-play:before{content:""}.icon-channelviews:before{content:""}.icon-message-succeeded:before{content:""}.icon-message-read:before{content:""}.icon-message-pending:before{content:""}.icon-message-failed:before{content:""}.icon-favorite:before{content:""}.icon-keyboard:before{content:""}.icon-delete-left:before{content:""}.icon-recent:before{content:""}.icon-gifs:before{content:""}.icon-stickers:before{content:""}.icon-smile:before{content:""}.icon-animals:before{content:""}.icon-eats:before{content:""}.icon-sport:before{content:""}.icon-car:before{content:""}.icon-lamp:before{content:""}.icon-language:before{content:""}.icon-flag:before{content:""}.icon-more:before{content:""}.icon-search:before{content:""}.icon-remove:before{content:""}.icon-add:before{content:""}.icon-check:before{content:""}.icon-close:before{content:""}.icon-arrow-left:before{content:""}.icon-arrow-right:before{content:""}.icon-down:before{content:""}.icon-up:before{content:""}.icon-eye-closed:before{content:""}.icon-eye:before{content:""}.icon-muted:before{content:""}.icon-avatar-archived-chats:before{content:""}.icon-avatar-deleted-account:before{content:""}.icon-avatar-saved-messages:before{content:""}.icon-pinned-chat:before{content:""}.media-inner{position:relative}.media-inner video,.media-inner img{display:block;object-fit:cover}.media-inner video{background:no-repeat 50% 50%;background-size:contain}.media-inner .thumbnail~.thumbnail,.media-inner .thumbnail~.full-media,.media-inner .media-loading{position:absolute}.animated-close-icon{position:absolute;transform:rotate(-45deg)}.animated-close-icon,.animated-close-icon::before,.animated-close-icon::after{width:1.125rem;height:.125rem;border-radius:.125rem;background-color:var(--color-text-secondary);transition:transform var(--slide-transition)}.animated-close-icon::before,.animated-close-icon::after{position:absolute;left:0;top:0;content:""}.animated-close-icon::before{transform:rotate(90deg)}.animated-close-icon.no-transition,.animated-close-icon.no-transition::before,.animated-close-icon.no-transition::after{transition:none}.animated-close-icon.state-back{transform:rotate(180deg)}.animated-close-icon.state-back::before{transform:rotate(45deg) scaleX(0.75) translate(0, -0.375rem)}.animated-close-icon.state-back::after{transform:rotate(-45deg) scaleX(0.75) translate(0, 0.375rem)}.chat-list{background:var(--color-background);height:100%;padding:.5rem .125rem .5rem .4375rem;overflow-y:auto}@supports(overflow-y: overlay){body.is-android .chat-list{overflow-y:overlay;overflow-x:hidden}}.chat-list .scroll-container{position:relative}.chat-list .ListItem.chat-item-clickable{margin:0}@media(max-width: 600px){.chat-list{padding-left:0;padding-right:0}}.chat-list .no-results{color:var(--color-text-meta);margin-top:2rem;text-align:center}div.color-bg-1{--color-user: var(--color-user-1)}div.color-bg-2{--color-user: var(--color-user-2)}div.color-bg-4{--color-user: var(--color-user-4)}div.color-bg-5{--color-user: var(--color-user-5)}div.color-bg-6{--color-user: var(--color-user-6)}div.color-bg-7{--color-user: var(--color-user-7)}div.color-bg-8{--color-user: var(--color-user-8)}div.replies-bot-account,div.saved-messages{--color-user: var(--color-primary)}div.deleted-account{--color-user: var(--color-gray)}@media print{body,html,.messages-layout{background:#fff}#LeftColumn,#RightColumn-wrapper,.ChatOrUserPicker,#Notifications,.Modal,.ActiveCallHeader,.unread-count,#middle-column-bg,#middle-column-portals,.header-tools,.ScrollDownButton,.middle-column-footer{display:none !important}#MiddleColumn{border-left:none !important}html,body,#root,#UiLoader,#Main,#MiddleColumn,.MessageList,.messages-layout,.Transition,.Transition>*{height:auto !important;overflow:visible !important;display:block !important;position:static !important;margin:0 !important;padding:0 !important;width:100% !important;max-width:100% !important;transform:none !important}.messages-container{max-width:100rem !important;width:100% !important}.MessageList .sticky-date>span,.MessageList .local-action-message>span,.MessageList .ActionMessage>span,.MessageList .empty>span{background:var(--color-background-own) !important;color:var(--color-text) !important}}html,body{width:100%;height:100%;background:var(--color-background);margin:0;padding:0;font-size:16px;font-family:"Roboto",-apple-system,BlinkMacSystemFont,"Apple Color Emoji","Segoe UI",Oxygen,Ubuntu,Cantarell,"Fira Sans","Droid Sans","Helvetica Neue",sans-serif;color:var(--color-text);font-weight:400;line-height:1.5;text-align:left;overflow:hidden;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}@media(max-width: 600px){html,body{height:calc(var(--vh, 1vh)*100)}}body.is-ios,body.is-macos{font-family:system-ui,-apple-system,BlinkMacSystemFont,"Roboto","Apple Color Emoji","Helvetica Neue",sans-serif}html[lang=fa],html[lang=fa] body{font-family:"Vazirmatn","Roboto",-apple-system,BlinkMacSystemFont,"Apple Color Emoji","Segoe UI",Oxygen,Ubuntu,Cantarell,"Fira Sans","Droid Sans","Helvetica Neue",sans-serif}html[lang=fa].is-ios,html[lang=fa].is-macos,html[lang=fa] body.is-ios,html[lang=fa] body.is-macos{font-family:"Vazirmatn",-apple-system,BlinkMacSystemFont,"Roboto","Apple Color Emoji","Segoe UI",Oxygen,Ubuntu,Cantarell,"Fira Sans","Droid Sans","Helvetica Neue",sans-serif}body.is-ios{--border-radius-messages: 1rem;--border-radius-messages-small: 0.5rem}body.cursor-grabbing,body.cursor-grabbing *{cursor:grabbing !important}body.cursor-ew-resize{cursor:ew-resize !important}#root{height:100%}@media(max-width: 600px){#root{height:calc(var(--vh, 1vh)*100)}}#middle-column-portals,#portals{position:absolute;top:0;left:0;right:0}.hidden{visibility:hidden}.no-selection{user-select:none;-webkit-user-select:none !important}.resize-handle{display:none;position:absolute;top:0;right:-0.25rem;bottom:0;width:.25rem;z-index:var(--z-resize-handle);cursor:ew-resize}@media(min-width: 926px){.resize-handle{display:block}}.visually-hidden{position:absolute !important;width:0;height:0;overflow:hidden;clip:rect(0, 0, 0, 0);z-index:-1}.not-implemented{opacity:.5}.not-implemented,.not-implemented *{cursor:not-allowed !important}*{box-sizing:border-box}.no-animations #root *,.no-animations #root *::before,.no-animations #root *::after{transition:none !important}.custom-scroll,.custom-scroll-x{scrollbar-width:thin;scrollbar-color:rgba(90,90,90,0) transparent;transition:scrollbar-color .3s ease;-webkit-overflow-scrolling:touch;pointer-events:auto}.custom-scroll::-webkit-scrollbar-thumb,.custom-scroll-x::-webkit-scrollbar-thumb{background-color:rgba(90,90,90,0);border-radius:.375rem;box-shadow:0 0 1px rgba(255,255,255,.01)}.custom-scroll:hover,.custom-scroll:focus,.custom-scroll:focus-within,.custom-scroll-x:hover,.custom-scroll-x:focus,.custom-scroll-x:focus-within{scrollbar-color:rgba(90,90,90,.3) transparent}.custom-scroll:hover::-webkit-scrollbar-thumb,.custom-scroll:focus::-webkit-scrollbar-thumb,.custom-scroll:focus-within::-webkit-scrollbar-thumb,.custom-scroll-x:hover::-webkit-scrollbar-thumb,.custom-scroll-x:focus::-webkit-scrollbar-thumb,.custom-scroll-x:focus-within::-webkit-scrollbar-thumb{background-color:rgba(90,90,90,.3)}body:not(.is-ios) .custom-scroll::-webkit-scrollbar{width:.375rem}body:not(.is-ios) .custom-scroll-x::-webkit-scrollbar{height:.375rem}.no-scrollbar{scrollbar-width:none}.no-scrollbar::-webkit-scrollbar{display:none}.emoji-small{background:no-repeat;background-size:1.25rem;color:transparent;display:inline-block;width:1.25rem;height:1.25rem;margin-inline-end:1px;overflow:hidden;flex-shrink:0}.emoji-small::selection{background-color:var(--color-selection-highlight-emoji);color:transparent}div[role=button]{outline:none !important;cursor:pointer}.opacity-transition{opacity:1;transition:opacity .15s ease}.opacity-transition:not(.open){opacity:0}.opacity-transition:not(.shown){display:none}.opacity-transition.slow{transition-duration:.3s}.color-primary{color:var(--color-primary) !important}.color-danger{color:var(--color-error) !important}.text-muted{color:var(--color-text-secondary) !important}.protector{position:absolute;left:0;top:0;right:0;bottom:0;z-index:2}.for-ios-autocapitalization-fix{position:fixed;font-size:16px;opacity:0;bottom:1rem;z-index:-1}@keyframes grow-icon{0%{transform:scale(0.5);opacity:.8}50%{transform:scale(1.1);opacity:1}100%{transform:scale(1)}}@keyframes hide-icon{from{transform:scale(1);opacity:.4}to{transform:scale(0.5);opacity:0}} +*,*::before,*::after{box-sizing:border-box}html{font-family:sans-serif;line-height:1.15;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%;-ms-overflow-style:scrollbar;-webkit-tap-highlight-color:rgba(0, 0, 0, 0)}article,aside,dialog,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}body{margin:0}[tabindex="-1"]:focus{outline:none !important}hr{box-sizing:content-box;height:0;overflow:visible}h1,h2,h3,h4,h5,h6{margin-top:0;margin-bottom:.5rem;font-weight:500}abbr[title],abbr[data-original-title]{text-decoration:underline;-webkit-text-decoration:underline dotted;text-decoration:underline dotted;cursor:help;border-bottom:0}address{margin-bottom:1rem;font-style:normal;line-height:inherit}p,ol,ul,dl{margin-top:0;margin-bottom:1rem}ol ol,ul ul,ol ul,ul ol{margin-bottom:0}dd{margin-bottom:.5rem;margin-left:0}blockquote,figure{margin:0 0 1rem}dfn{font-style:italic}dt,b,strong{font-weight:500}small{font-size:80%}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sub{bottom:-0.25em}sup{top:-0.5em}a{color:var(--color-links);text-decoration:none;background-color:transparent;-webkit-text-decoration-skip:objects}a:hover{color:#0056b3;text-decoration:underline}a:not([href]):not([tabindex]),a:not([href]):not([tabindex]):hover,a:not([href]):not([tabindex]):focus{color:inherit;text-decoration:none}a:not([href]):not([tabindex]):focus{outline:0}pre,code,kbd,samp{font:.9375rem/1.25 "Courier","Courier New","Nimbus Mono L","Courier 10 Pitch","FreeMono",sans-serif-monospace,monospace;font-size-adjust:.43}pre{margin-top:0;margin-bottom:1rem;overflow:auto;-ms-overflow-style:scrollbar}img{vertical-align:middle;border-style:none}svg:not(:root){overflow:hidden}a,area,button,[role=button],input:not([type=range]),label,select,summary,textarea{touch-action:manipulation}table{border-collapse:collapse}caption{padding-top:.75rem;padding-bottom:.75rem;color:#868e96;text-align:left;caption-side:bottom}th{text-align:inherit}label{display:inline-block;margin-bottom:.5rem}button{border-radius:0}button:focus{outline:1px dotted;outline:5px auto -webkit-focus-ring-color}input,button,select,optgroup,textarea{margin:0;font-family:inherit;font-size:inherit;line-height:inherit}button,input{overflow:visible}button,select{text-transform:none}button,html [type=button],[type=reset],[type=submit]{-webkit-appearance:button}button::-moz-focus-inner,[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner{padding:0;border-style:none}input[type=radio],input[type=checkbox]{box-sizing:border-box;padding:0}input[type=date],input[type=time],input[type=datetime-local],input[type=month]{-webkit-appearance:listbox}textarea{overflow:auto;resize:vertical}fieldset{min-width:0;padding:0;margin:0;border:0}legend{display:block;width:100%;max-width:100%;padding:0;margin-bottom:.5rem;font-size:1.5rem;line-height:inherit;color:inherit;white-space:normal}progress{vertical-align:baseline}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{outline-offset:-2px;-webkit-appearance:none}[type=search]::-webkit-search-cancel-button,[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{font:inherit;-webkit-appearance:button}output{display:inline-block}summary{display:list-item}template{display:none}[hidden]{display:none !important}:root{--color-background: #ffffff;--color-background-compact-menu: #FFFFFFBB;--color-background-compact-menu-reactions: #FFFFFFEB;--color-background-compact-menu-hover: #000000B2;--color-background-selected: #f4f4f5;--color-background-secondary: #f4f4f5;--color-background-secondary-accent: #e4e4e5;--color-background-own: #eeffde;--color-background-own-selected: color.adjust($color-light-green, -10%);--color-text: #000000;--color-text-lighter: #2e3939;--color-text-secondary: #707579;--color-icon-secondary: #707579;--color-text-secondary-rgb: 112, 117, 121;--color-text-secondary-apple: #8a8a90;--color-text-meta: #686c72;--color-text-meta-rgb: 104, 108, 114;--color-text-meta-colored: #4fae4e;--color-text-meta-apple: #8c8c91;--color-text-green: #4fae4e;--color-text-green-rgb: 79, 174, 78;--color-borders: #dadce0;--color-borders-input: #dadce0;--color-dividers: #c8c6cc;--color-webpage-initial-background: #2e3939;--color-interactive-active: var(--color-primary);--color-interactive-inactive: rgba(var(--color-text-secondary-rgb), 0.25);--color-interactive-buffered: rgba(var(--color-text-secondary-rgb), 0.25);--color-interactive-element-hover: rgba(var(--color-text-secondary-rgb), 0.08);--color-composer-button: #707579CC;--color-primary: #3390ec;--color-primary-shade: #2f84d9;--color-primary-shade-darker: #2b79c6;--color-primary-shade-rgb: 47, 132, 217;--color-primary-opacity: rgba(var(--color-primary), 0.5);--color-green: #00c73e;--color-green-darker: #00a734;--color-error: #e53935;--color-error-shade: #d33431;--color-error-rgb: 229, 57, 53;--color-warning: #fb8c00;--color-yellow: #fdd764;--color-links: #3390ec;--color-own-links: #ffffff;--color-placeholders: #a2acb4;--color-pinned: #ffffff;--color-code: #4a729a;--color-code-bg: rgba(112, 117, 121, 0.08);--color-code-own: #3c7940;--color-code-own-bg: rgba(112, 117, 121, 0.08);--color-accent-own: #4fae4e;--color-message-meta-own: #4fae4e;--color-message-reaction: $color-message-reaction;--color-message-reaction-hover: $color-message-reaction-hover;--color-message-reaction-own: $color-message-reaction-own;--color-message-reaction-hover-own: $color-message-reaction-own-hover;--color-reply-hover: #f4f4f4;--color-reply-active: #e8e9ea;--color-reply-own-hover: #dbf5cd;--color-reply-own-active: #c8ecbb;--color-background-own-apple: #dcf8c5;--color-reply-own-hover-apple: #cbefb7;--color-reply-own-active-apple: #bae6a8;--color-white: #ffffff;--color-gray: #c4c9cc;--color-chat-hover: #f4f4f5;--color-chat-active: #3390ec;--color-item-active: #ededed;--color-selection-highlight: #3993fb;--color-selection-highlight-emoji: rgba(57, 147, 251, 0.7);--color-user-1: #e17076;--color-user-2: #7bc862;--color-user-4: #65aadd;--color-user-5: #a695e7;--color-user-6: #ee7aae;--color-user-7: #6ec9cb;--color-user-8: #faa774;--color-default-shadow: #72727240;--color-light-shadow: #7272722b;--color-skeleton-background: rgba(33, 33, 33, 0.15);--color-skeleton-foreground: rgba(232, 232, 232, 0.2);--color-telegram-blue: #3390ec;--vh: 1vh;--border-radius-default: 0.75rem;--border-radius-default-small: 0.625rem;--border-radius-default-tiny: 0.375rem;--border-radius-messages: 0.75rem;--border-radius-messages-small: 0.375rem;--messages-container-width: 45.5rem;--right-column-width: 26.5rem;--header-height: 3.5rem;--symbol-menu-width: 26.25rem;--symbol-menu-height: 23.25rem;--symbol-menu-footer-height: 3rem;--z-ui-loader-mask: 2000;--z-notification: 1000;--z-right-column: 900;--z-header-menu: 990;--z-header-menu-backdrop: 980;--z-modal: 1000;--z-media-viewer: 1500;--z-drop-area: 55;--z-animation-fade: 50;--z-menu-bubble: 21;--z-menu-backdrop: 20;--z-message-highlighted: 14;--z-message-context-menu: 13;--z-scroll-down-button: 12;--z-mobile-search: 12;--z-middle-header: 11;--z-middle-footer: 11;--z-country-code-input-group: 10;--z-message-select-control: 9;--z-message-select-area: 8;--z-sticky-date: 9;--z-register-add-avatar: 5;--z-media-viewer-head: 3;--z-resize-handle: 2;--z-below: -1;--spinner-white-data: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCI+PHBhdGggZD0iTTEwLjggMjIuNEM2IDIxLjkgMi4xIDE4IDEuNiAxMy4yLjkgNy4xIDUuNCAxLjkgMTEuMyAxLjVjLjQgMCAuNy0uMy43LS43IDAtLjQtLjQtLjgtLjgtLjhDNC44LjQtLjIgNS45IDAgMTIuNS4yIDE4LjYgNS40IDIzLjggMTEuNSAyNGM2LjYuMiAxMi00LjggMTIuNC0xMS4yIDAtLjQtLjMtLjgtLjgtLjgtLjQgMC0uNy4zLS43LjctLjMgNS45LTUuNSAxMC40LTExLjYgOS43eiIgZmlsbD0iI2ZmZmZmZiIvPjwvc3ZnPg==);--spinner-white-thin-data: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCI+PHBhdGggZmlsbD0iI2ZmZmZmZiIgZD0iTTEyIDIzQzUuOSAyMyAxIDE4LjEgMSAxMlM1LjkgMSAxMiAxVjBDNS40IDAgMCA1LjQgMCAxMnM1LjQgMTIgMTIgMTIgMTItNS40IDEyLTEyaC0xYzAgNi4xLTQuOSAxMS0xMSAxMXoiLz48L3N2Zz4=);--spinner-blue-data: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCI+PHBhdGggZD0iTTEwLjggMjIuNEM2IDIxLjkgMi4xIDE4IDEuNiAxMy4yLjkgNy4xIDUuNCAxLjkgMTEuMyAxLjVjLjQgMCAuNy0uMy43LS43IDAtLjQtLjQtLjgtLjgtLjhDNC44LjQtLjIgNS45IDAgMTIuNS4yIDE4LjYgNS40IDIzLjggMTEuNSAyNGM2LjYuMiAxMi00LjggMTIuNC0xMS4yIDAtLjQtLjMtLjgtLjgtLjgtLjQgMC0uNy4zLS43LjctLjMgNS45LTUuNSAxMC40LTExLjYgOS43eiIgZmlsbD0iIzRlYTRmNiIvPjwvc3ZnPg==);--spinner-dark-blue-data: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCI+PHBhdGggZD0iTTEwLjggMjIuNEM2IDIxLjkgMi4xIDE4IDEuNiAxMy4yLjkgNy4xIDUuNCAxLjkgMTEuMyAxLjVjLjQgMCAuNy0uMy43LS43IDAtLjQtLjQtLjgtLjgtLjhDNC44LjQtLjIgNS45IDAgMTIuNS4yIDE4LjYgNS40IDIzLjggMTEuNSAyNGM2LjYuMiAxMi00LjggMTIuNC0xMS4yIDAtLjQtLjMtLjgtLjgtLjgtLjQgMC0uNy4zLS43LjctLjMgNS45LTUuNSAxMC40LTExLjYgOS43eiIgZmlsbD0iIzgzNzhEQiIvPjwvc3ZnPg==);--spinner-black-data: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCI+PHBhdGggZD0iTTEwLjggMjIuNEM2IDIxLjkgMi4xIDE4IDEuNiAxMy4yLjkgNy4xIDUuNCAxLjkgMTEuMyAxLjVjLjQgMCAuNy0uMy43LS43IDAtLjQtLjQtLjgtLjgtLjhDNC44LjQtLjIgNS45IDAgMTIuNS4yIDE4LjYgNS40IDIzLjggMTEuNSAyNGM2LjYuMiAxMi00LjggMTIuNC0xMS4yIDAtLjQtLjMtLjgtLjgtLjgtLjQgMC0uNy4zLS43LjctLjMgNS45LTUuNSAxMC40LTExLjYgOS43eiIgZmlsbD0iIzJlMzkzOSIvPjwvc3ZnPg==);--spinner-green-data: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCI+PHBhdGggZD0iTTEwLjggMjIuNEM2IDIxLjkgMi4xIDE4IDEuNiAxMy4yLjkgNy4xIDUuNCAxLjkgMTEuMyAxLjVjLjQgMCAuNy0uMy43LS43IDAtLjQtLjQtLjgtLjgtLjhDNC44LjQtLjIgNS45IDAgMTIuNS4yIDE4LjYgNS40IDIzLjggMTEuNSAyNGM2LjYuMiAxMi00LjggMTIuNC0xMS4yIDAtLjQtLjMtLjgtLjgtLjgtLjQgMC0uNy4zLS43LjctLjMgNS45LTUuNSAxMC40LTExLjYgOS43eiIgZmlsbD0iIzRmYWU0ZSIvPjwvc3ZnPg==);--spinner-gray-data: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCI+PHBhdGggZD0iTTEwLjggMjIuNEM2IDIxLjkgMi4xIDE4IDEuNiAxMy4yLjkgNy4xIDUuNCAxLjkgMTEuMyAxLjVjLjQgMCAuNy0uMy43LS43IDAtLjQtLjQtLjgtLjgtLjhDNC44LjQtLjIgNS45IDAgMTIuNS4yIDE4LjYgNS40IDIzLjggMTEuNSAyNGM2LjYuMiAxMi00LjggMTIuNC0xMS4yIDAtLjQtLjMtLjgtLjgtLjgtLjQgMC0uNy4zLS43LjctLjMgNS45LTUuNSAxMC40LTExLjYgOS43eiIgZmlsbD0iIzcwNzU3OSIvPjwvc3ZnPg==);--spinner-yellow-data: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCI+PHBhdGggZD0iTTEwLjggMjIuNEM2IDIxLjkgMi4xIDE4IDEuNiAxMy4yLjkgNy4xIDUuNCAxLjkgMTEuMyAxLjVjLjQgMCAuNy0uMy43LS43IDAtLjQtLjQtLjgtLjgtLjhDNC44LjQtLjIgNS45IDAgMTIuNS4yIDE4LjYgNS40IDIzLjggMTEuNSAyNGM2LjYuMiAxMi00LjggMTIuNC0xMS4yIDAtLjQtLjMtLjgtLjgtLjgtLjQgMC0uNy4zLS43LjctLjMgNS45LTUuNSAxMC40LTExLjYgOS43eiIgZmlsbD0iI0ZERDc2NCIvPjwvc3ZnPg==);--drag-target-border: url("data:image/svg+xml,%3csvg width=%27100%25%27 height=%27100%25%27 xmlns=%27http://www.w3.org/2000/svg%27%3e%3crect width=%27100%25%27 height=%27100%25%27 fill=%27none%27 rx=%278%27 ry=%278%27 stroke=%27%23DDDFE0%27 stroke-width=%274%27 stroke-dasharray=%279.1%2c 10.5%27 stroke-dashoffset=%273%27 stroke-linecap=%27round%27/%3e%3c/svg%3e");--drag-target-border-hovered: url("data:image/svg+xml,%3csvg width=%27100%25%27 height=%27100%25%27 xmlns=%27http://www.w3.org/2000/svg%27%3e%3crect width=%27100%25%27 height=%27100%25%27 fill=%27none%27 rx=%278%27 ry=%278%27 stroke=%27%2363A2E3%27 stroke-width=%274%27 stroke-dasharray=%279.1%2c 10.5%27 stroke-dashoffset=%273%27 stroke-linecap=%27round%27/%3e%3c/svg%3e");--layer-blackout-opacity: 0.3;--layer-transition: 300ms cubic-bezier(0.33, 1, 0.68, 1);--slide-transition: 300ms cubic-bezier(0.25, 1, 0.5, 1);--select-transition: 200ms ease-out}@media(min-width: 1276px)and (max-width: 1920px){:root{--right-column-width: 25vw}}@media(min-width: 1921px){:root{--messages-container-width: 50vw}}@media(max-width: 600px){:root{--right-column-width: 100vw;--symbol-menu-width: 100vw;--symbol-menu-height: 14.6875rem}}:root body.is-ios{--layer-transition: 450ms cubic-bezier(0.33, 1, 0.68, 1);--slide-transition: 450ms cubic-bezier(0.25, 1, 0.5, 1)}:root body.is-android{--layer-transition: 450ms cubic-bezier(0.25, 1, 0.5, 1);--slide-transition: 400ms cubic-bezier(0.25, 1, 0.5, 1)}.m-0{margin:0 !important}.mt-0,.my-0{margin-top:0 !important}.mr-0,.mx-0{margin-right:0 !important}.mb-0,.my-0{margin-bottom:0 !important}.ml-0,.mx-0{margin-left:0 !important}.m-1{margin:.25rem !important}.mt-1,.my-1{margin-top:.25rem !important}.mr-1,.mx-1{margin-right:.25rem !important}.mb-1,.my-1{margin-bottom:.25rem !important}.ml-1,.mx-1{margin-left:.25rem !important}.m-2{margin:.5rem !important}.mt-2,.my-2{margin-top:.5rem !important}.mr-2,.mx-2{margin-right:.5rem !important}.mb-2,.my-2{margin-bottom:.5rem !important}.ml-2,.mx-2{margin-left:.5rem !important}.m-3{margin:1rem !important}.mt-3,.my-3{margin-top:1rem !important}.mr-3,.mx-3{margin-right:1rem !important}.mb-3,.my-3{margin-bottom:1rem !important}.ml-3,.mx-3{margin-left:1rem !important}.m-4{margin:1.5rem !important}.mt-4,.my-4{margin-top:1.5rem !important}.mr-4,.mx-4{margin-right:1.5rem !important}.mb-4,.my-4{margin-bottom:1.5rem !important}.ml-4,.mx-4{margin-left:1.5rem !important}.m-5{margin:2rem !important}.mt-5,.my-5{margin-top:2rem !important}.mr-5,.mx-5{margin-right:2rem !important}.mb-5,.my-5{margin-bottom:2rem !important}.ml-5,.mx-5{margin-left:2rem !important}.m-6{margin:3rem !important}.mt-6,.my-6{margin-top:3rem !important}.mr-6,.mx-6{margin-right:3rem !important}.mb-6,.my-6{margin-bottom:3rem !important}.ml-6,.mx-6{margin-left:3rem !important}.p-0{padding:0 !important}.pt-0,.py-0{padding-top:0 !important}.pr-0,.px-0{padding-right:0 !important}.pb-0,.py-0{padding-bottom:0 !important}.pl-0,.px-0{padding-left:0 !important}.p-1{padding:.25rem !important}.pt-1,.py-1{padding-top:.25rem !important}.pr-1,.px-1{padding-right:.25rem !important}.pb-1,.py-1{padding-bottom:.25rem !important}.pl-1,.px-1{padding-left:.25rem !important}.p-2{padding:.5rem !important}.pt-2,.py-2{padding-top:.5rem !important}.pr-2,.px-2{padding-right:.5rem !important}.pb-2,.py-2{padding-bottom:.5rem !important}.pl-2,.px-2{padding-left:.5rem !important}.p-3{padding:1rem !important}.pt-3,.py-3{padding-top:1rem !important}.pr-3,.px-3{padding-right:1rem !important}.pb-3,.py-3{padding-bottom:1rem !important}.pl-3,.px-3{padding-left:1rem !important}.p-4{padding:1.5rem !important}.pt-4,.py-4{padding-top:1.5rem !important}.pr-4,.px-4{padding-right:1.5rem !important}.pb-4,.py-4{padding-bottom:1.5rem !important}.pl-4,.px-4{padding-left:1.5rem !important}.p-5{padding:2rem !important}.pt-5,.py-5{padding-top:2rem !important}.pr-5,.px-5{padding-right:2rem !important}.pb-5,.py-5{padding-bottom:2rem !important}.pl-5,.px-5{padding-left:2rem !important}.p-6{padding:3rem !important}.pt-6,.py-6{padding-top:3rem !important}.pr-6,.px-6{padding-right:3rem !important}.pb-6,.py-6{padding-bottom:3rem !important}.pl-6,.px-6{padding-left:3rem !important}.input-group{position:relative;margin-bottom:1.5rem}.input-group label{display:block;padding:0 .25rem;position:absolute;left:.75rem;top:.9375rem;background-color:var(--color-background);font-size:1rem;font-weight:400;color:var(--color-placeholders);transition:transform .15s ease-out,color .15s ease-out;cursor:text;pointer-events:none;transform-origin:left center;white-space:nowrap}.input-group.with-arrow::after{content:"";position:absolute;height:.75rem;width:.75rem;border-left:1px var(--color-text-secondary) solid;border-bottom:1px var(--color-text-secondary) solid;transform:rotate(-45deg);right:2rem;top:1rem}.input-group.touched label,.input-group.error label,.input-group.success label,.input-group .form-control:focus+label,.input-group .form-control.focus+label{transform:scale(0.75) translate(-0.5rem, -2.25rem)}.input-group input::placeholder,.input-group .form-control::placeholder{color:var(--color-placeholders)}.input-group.touched label{color:var(--color-text-secondary)}.input-group.error label{color:var(--color-error) !important}.input-group.success label{color:var(--color-text-green) !important}.input-group.disabled{opacity:.5;pointer-events:none}.input-group[dir=rtl] input{text-align:right}.input-group[dir=rtl] label{left:auto;right:.75rem}.input-group[dir=rtl].with-arrow::after{border-left:none;border-right:1px var(--color-text-secondary) solid;right:auto;left:2rem}.input-group[dir=rtl].touched label,.input-group[dir=rtl].error label,.input-group[dir=rtl].success label,.input-group[dir=rtl] .form-control:focus+label,.input-group[dir=rtl] .form-control.focus+label{transform:scale(0.75) translate(1.5rem, -2.25rem)}.form-control{--border-width: 1px;display:block;width:100%;height:3.375rem;padding:calc(.75rem - var(--border-width)) calc(.9rem - var(--border-width));border:var(--border-width) solid var(--color-borders-input);border-radius:var(--border-radius-default);color:var(--color-text);background-color:var(--color-background);outline:none;transition:border-color .15s ease;word-break:break-word;-webkit-appearance:none;font-size:1rem;line-height:1.25rem}.form-control[dir]{text-align:initial}.form-control:hover{border-color:var(--color-primary)}.form-control:hover+label{color:var(--color-primary)}.form-control:focus,.form-control.focus{border-color:var(--color-primary);box-shadow:inset 0 0 0 1px var(--color-primary);caret-color:var(--color-primary)}.form-control:focus+label,.form-control.focus+label{color:var(--color-primary)}.form-control:disabled{background:none !important}.error .form-control{border-color:var(--color-error);box-shadow:inset 0 0 0 1px var(--color-error);caret-color:var(--color-error)}.success .form-control{border-color:var(--color-text-green);box-shadow:inset 0 0 0 1px var(--color-text-green);caret-color:var(--color-text-green)}select.form-control option{line-height:2rem}textarea.form-control{resize:none;overflow:hidden;line-height:1.3125rem;padding-top:calc(1rem - var(--border-width));padding-bottom:calc(1rem - var(--border-width))}.input-group.password-input{position:relative}.input-group.password-input .form-control{padding-right:3.375rem}.input-group.password-input .toggle-password{position:absolute;top:0;right:0;width:3.375rem;height:3.375rem;display:flex;align-items:center;justify-content:center;cursor:pointer;outline:none !important;color:var(--color-text-secondary);opacity:.7;font-size:1.5rem}.input-group.password-input .toggle-password:hover,.input-group.password-input .toggle-password:focus{opacity:1}.input-group.password-input[dir=rtl] .form-control{padding-left:3.375rem;padding-right:calc(.9rem - var(--border-width))}.input-group.password-input[dir=rtl] .toggle-password{left:0;right:auto}@font-face{font-family:"icomoon";src:url(icomoon.1e4a5f99ae5134e2f66b..woff2) format("woff2"),url(icomoon.1a9b172adde99eaa0df7..woff) format("woff");font-weight:normal;font-style:normal;font-display:block}[class^=icon-],[class*=" icon-"]{font-family:"icomoon" !important;speak:none;font-style:normal;font-weight:normal;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}[class^=icon-char-]::before,[class*=" icon-char-"]::before{font-family:Roboto,"Helvetica Neue",sans-serif;content:attr(data-char);width:1.5rem;text-align:center;display:block}.icon-loop:before{content:""}.icon-skip-next:before{content:""}.icon-skip-previous:before{content:""}.icon-volume-1:before{content:""}.icon-volume-2:before{content:""}.icon-volume-3:before{content:""}.icon-stats:before{content:""}.icon-copy-media:before{content:""}.icon-reaction-filled:before{content:""}.icon-reactions:before{content:""}.icon-sidebar:before{content:""}.icon-video-stop:before{content:""}.icon-speaker:before{content:""}.icon-speaker-outline:before{content:""}.icon-phone-discard-outline:before{content:""}.icon-allow-speak:before{content:""}.icon-stop-raising-hand:before{content:""}.icon-share-screen:before{content:""}.icon-voice-chat:before{content:""}.icon-video:before{content:""}.icon-noise-suppression:before{content:""}.icon-phone-discard:before{content:""}.icon-bot-commands-filled:before{content:""}.icon-reply-filled:before{content:""}.icon-bug:before{content:""}.icon-data:before{content:""}.icon-darkmode:before{content:""}.icon-enter:before{content:""}.icon-fontsize:before{content:""}.icon-permissions:before{content:""}.icon-card:before{content:""}.icon-truck:before{content:""}.icon-share-filled:before{content:""}.icon-bold:before{content:""}.icon-bot-command:before{content:""}.icon-calendar-filter:before{content:""}.icon-comments:before{content:""}.icon-comments-sticker:before{content:""}.icon-arrow-down:before{content:""}.icon-email:before{content:""}.icon-italic:before{content:""}.icon-link:before{content:""}.icon-mention:before{content:""}.icon-monospace:before{content:""}.icon-next:before{content:""}.icon-password-off:before{content:""}.icon-pin-list:before{content:""}.icon-previous:before{content:""}.icon-replace:before{content:""}.icon-schedule:before{content:""}.icon-strikethrough:before{content:""}.icon-underlined:before{content:""}.icon-zoom-in:before{content:""}.icon-zoom-out:before{content:""}.icon-select:before{content:""}.icon-folder:before{content:""}.icon-bots:before{content:""}.icon-calendar:before{content:""}.icon-cloud-download:before{content:""}.icon-colorize:before{content:""}.icon-forward:before{content:""}.icon-reply:before{content:""}.icon-help:before{content:""}.icon-info:before{content:""}.icon-info-filled:before{content:""}.icon-delete-filled:before{content:""}.icon-delete:before{content:""}.icon-edit:before{content:""}.icon-new-chat-filled:before{content:""}.icon-send:before{content:""}.icon-send-outline:before{content:""}.icon-add-user-filled:before{content:""}.icon-add-user:before{content:""}.icon-delete-user:before{content:""}.icon-microphone:before{content:""}.icon-microphone-alt:before{content:""}.icon-poll:before{content:""}.icon-revote:before{content:""}.icon-photo:before{content:""}.icon-document:before{content:""}.icon-camera:before{content:""}.icon-camera-add:before{content:""}.icon-logout:before{content:""}.icon-saved-messages:before{content:""}.icon-settings:before{content:""}.icon-phone:before{content:""}.icon-attach:before{content:""}.icon-copy:before{content:""}.icon-channel:before{content:""}.icon-group:before{content:""}.icon-user:before{content:""}.icon-non-contacts:before{content:""}.icon-active-sessions:before{content:""}.icon-admin:before{content:""}.icon-download:before{content:""}.icon-location:before{content:""}.icon-stop:before{content:""}.icon-archive:before{content:""}.icon-unarchive:before{content:""}.icon-readchats:before{content:""}.icon-unread:before{content:""}.icon-message:before{content:""}.icon-lock:before{content:""}.icon-unlock:before{content:""}.icon-mute:before{content:""}.icon-unmute:before{content:""}.icon-pin:before{content:""}.icon-unpin:before{content:""}.icon-smallscreen:before{content:""}.icon-fullscreen:before{content:""}.icon-large-pause:before{content:""}.icon-large-play:before{content:""}.icon-pause:before{content:""}.icon-play:before{content:""}.icon-channelviews:before{content:""}.icon-message-succeeded:before{content:""}.icon-message-read:before{content:""}.icon-message-pending:before{content:""}.icon-message-failed:before{content:""}.icon-favorite:before{content:""}.icon-keyboard:before{content:""}.icon-delete-left:before{content:""}.icon-recent:before{content:""}.icon-gifs:before{content:""}.icon-stickers:before{content:""}.icon-smile:before{content:""}.icon-animals:before{content:""}.icon-eats:before{content:""}.icon-sport:before{content:""}.icon-car:before{content:""}.icon-lamp:before{content:""}.icon-language:before{content:""}.icon-flag:before{content:""}.icon-more:before{content:""}.icon-search:before{content:""}.icon-remove:before{content:""}.icon-add:before{content:""}.icon-check:before{content:""}.icon-close:before{content:""}.icon-arrow-left:before{content:""}.icon-arrow-right:before{content:""}.icon-down:before{content:""}.icon-up:before{content:""}.icon-eye-closed:before{content:""}.icon-eye:before{content:""}.icon-muted:before{content:""}.icon-avatar-archived-chats:before{content:""}.icon-avatar-deleted-account:before{content:""}.icon-avatar-saved-messages:before{content:""}.icon-pinned-chat:before{content:""}.media-inner{position:relative}.media-inner video,.media-inner img{display:block;object-fit:cover}.media-inner video{background:no-repeat 50% 50%;background-size:contain}.media-inner .thumbnail~.thumbnail,.media-inner .thumbnail~.full-media,.media-inner .media-loading{position:absolute}.animated-close-icon{position:absolute;transform:rotate(-45deg)}.animated-close-icon,.animated-close-icon::before,.animated-close-icon::after{width:1.125rem;height:.125rem;border-radius:.125rem;background-color:var(--color-text-secondary);transition:transform var(--slide-transition)}.animated-close-icon::before,.animated-close-icon::after{position:absolute;left:0;top:0;content:""}.animated-close-icon::before{transform:rotate(90deg)}.animated-close-icon.no-transition,.animated-close-icon.no-transition::before,.animated-close-icon.no-transition::after{transition:none}.animated-close-icon.state-back{transform:rotate(180deg)}.animated-close-icon.state-back::before{transform:rotate(45deg) scaleX(0.75) translate(0, -0.375rem)}.animated-close-icon.state-back::after{transform:rotate(-45deg) scaleX(0.75) translate(0, 0.375rem)}.chat-list{background:var(--color-background);height:100%;padding:.5rem .125rem .5rem .4375rem;overflow-y:auto}@supports(overflow-y: overlay){body.is-android .chat-list{overflow-y:overlay;overflow-x:hidden}}.chat-list .scroll-container{position:relative}.chat-list .ListItem.chat-item-clickable{margin:0}@media(max-width: 600px){.chat-list{padding-left:0;padding-right:0}}.chat-list .no-results{color:var(--color-text-meta);margin-top:2rem;text-align:center}div.color-bg-1{--color-user: var(--color-user-1)}div.color-bg-2{--color-user: var(--color-user-2)}div.color-bg-4{--color-user: var(--color-user-4)}div.color-bg-5{--color-user: var(--color-user-5)}div.color-bg-6{--color-user: var(--color-user-6)}div.color-bg-7{--color-user: var(--color-user-7)}div.color-bg-8{--color-user: var(--color-user-8)}div.replies-bot-account,div.saved-messages{--color-user: var(--color-primary)}div.deleted-account{--color-user: var(--color-gray)}@media print{body,html,.messages-layout{background:#fff}#LeftColumn,#RightColumn-wrapper,.ChatOrUserPicker,#Notifications,.Modal,.ActiveCallHeader,.unread-count,#middle-column-bg,#middle-column-portals,.header-tools,.ScrollDownButton,.middle-column-footer{display:none !important}#MiddleColumn{border-left:none !important}html,body,#root,#UiLoader,#Main,#MiddleColumn,.MessageList,.messages-layout,.Transition,.Transition>*{height:auto !important;overflow:visible !important;display:block !important;position:static !important;margin:0 !important;padding:0 !important;width:100% !important;max-width:100% !important;transform:none !important}.messages-container{max-width:100rem !important;width:100% !important}.MessageList .sticky-date>span,.MessageList .local-action-message>span,.MessageList .ActionMessage>span,.MessageList .empty>span{background:var(--color-background-own) !important;color:var(--color-text) !important}}html,body{width:100%;height:100%;background:var(--color-background);margin:0;padding:0;font-size:16px;font-family:"Roboto",-apple-system,BlinkMacSystemFont,"Apple Color Emoji","Segoe UI",Oxygen,Ubuntu,Cantarell,"Fira Sans","Droid Sans","Helvetica Neue",sans-serif;color:var(--color-text);font-weight:400;line-height:1.5;text-align:left;overflow:hidden;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}@media(max-width: 600px){html,body{height:calc(var(--vh, 1vh)*100)}}body.is-ios,body.is-macos{font-family:system-ui,-apple-system,BlinkMacSystemFont,"Roboto","Apple Color Emoji","Helvetica Neue",sans-serif}html[lang=fa],html[lang=fa] body{font-family:"Vazirmatn","Roboto",-apple-system,BlinkMacSystemFont,"Apple Color Emoji","Segoe UI",Oxygen,Ubuntu,Cantarell,"Fira Sans","Droid Sans","Helvetica Neue",sans-serif}html[lang=fa].is-ios,html[lang=fa].is-macos,html[lang=fa] body.is-ios,html[lang=fa] body.is-macos{font-family:"Vazirmatn",-apple-system,BlinkMacSystemFont,"Roboto","Apple Color Emoji","Segoe UI",Oxygen,Ubuntu,Cantarell,"Fira Sans","Droid Sans","Helvetica Neue",sans-serif}body.is-ios{--border-radius-messages: 1rem;--border-radius-messages-small: 0.5rem}body.cursor-grabbing,body.cursor-grabbing *{cursor:grabbing !important}body.cursor-ew-resize{cursor:ew-resize !important}#root{height:100%}@media(max-width: 600px){#root{height:calc(var(--vh, 1vh)*100)}}#middle-column-portals,#portals{position:absolute;top:0;left:0;right:0}.hidden{visibility:hidden}.no-selection{user-select:none;-webkit-user-select:none !important}.resize-handle{display:none;position:absolute;top:0;right:-0.25rem;bottom:0;width:.25rem;z-index:var(--z-resize-handle);cursor:ew-resize}@media(min-width: 926px){.resize-handle{display:block}}.visually-hidden{position:absolute !important;width:0;height:0;overflow:hidden;clip:rect(0, 0, 0, 0);z-index:-1}.not-implemented{opacity:.5}.not-implemented,.not-implemented *{cursor:not-allowed !important}*{box-sizing:border-box}.no-animations #root *,.no-animations #root *::before,.no-animations #root *::after{transition:none !important}.custom-scroll,.custom-scroll-x{scrollbar-width:thin;scrollbar-color:rgba(90,90,90,0) transparent;transition:scrollbar-color .3s ease;-webkit-overflow-scrolling:touch;pointer-events:auto}.custom-scroll::-webkit-scrollbar-thumb,.custom-scroll-x::-webkit-scrollbar-thumb{background-color:rgba(90,90,90,0);border-radius:.375rem;box-shadow:0 0 1px rgba(255,255,255,.01)}.custom-scroll:hover,.custom-scroll:focus,.custom-scroll:focus-within,.custom-scroll-x:hover,.custom-scroll-x:focus,.custom-scroll-x:focus-within{scrollbar-color:rgba(90,90,90,.3) transparent}.custom-scroll:hover::-webkit-scrollbar-thumb,.custom-scroll:focus::-webkit-scrollbar-thumb,.custom-scroll:focus-within::-webkit-scrollbar-thumb,.custom-scroll-x:hover::-webkit-scrollbar-thumb,.custom-scroll-x:focus::-webkit-scrollbar-thumb,.custom-scroll-x:focus-within::-webkit-scrollbar-thumb{background-color:rgba(90,90,90,.3)}body:not(.is-ios) .custom-scroll::-webkit-scrollbar{width:.375rem}body:not(.is-ios) .custom-scroll-x::-webkit-scrollbar{height:.375rem}.no-scrollbar{scrollbar-width:none}.no-scrollbar::-webkit-scrollbar{display:none}.emoji-small{background:no-repeat;background-size:1.25rem;color:transparent;display:inline-block;width:1.25rem;height:1.25rem;margin-inline-end:1px;overflow:hidden;flex-shrink:0}.emoji-small::selection{background-color:var(--color-selection-highlight-emoji);color:transparent}div[role=button]{outline:none !important;cursor:pointer}.opacity-transition{opacity:1;transition:opacity .15s ease}.opacity-transition:not(.open){opacity:0}.opacity-transition:not(.shown){display:none}.opacity-transition.slow{transition-duration:.3s}.color-primary{color:var(--color-primary) !important}.color-danger{color:var(--color-error) !important}.text-muted{color:var(--color-text-secondary) !important}.protector{position:absolute;left:0;top:0;right:0;bottom:0;z-index:2}.for-ios-autocapitalization-fix{position:fixed;font-size:16px;opacity:0;bottom:1rem;z-index:-1}.emoji-test-element{opacity:0;display:inline;white-space:nowrap;position:absolute;bottom:0;left:0}@keyframes grow-icon{0%{transform:scale(0.5);opacity:.8}50%{transform:scale(1.1);opacity:1}100%{transform:scale(1)}}@keyframes hide-icon{from{transform:scale(1);opacity:.4}to{transform:scale(0.5);opacity:0}} -/*# sourceMappingURL=main.1e16878f02d07901172c.css.map*/ \ No newline at end of file +/*# sourceMappingURL=main.acbfb47616f361714da0.css.map*/ \ No newline at end of file diff --git a/dist/main.acbfb47616f361714da0.css.map b/dist/main.acbfb47616f361714da0.css.map new file mode 100644 index 000000000..5315299fc --- /dev/null +++ b/dist/main.acbfb47616f361714da0.css.map @@ -0,0 +1 @@ +{"version":3,"file":"main.acbfb47616f361714da0.css","mappings":"AACE,oBACE,eACA,yDACA,wCACA,oBAEA,sKAIE,yDAGF,gCACE,8BAIJ,mBACE,oDAGF,kBACE,UACA,8BAGF,sCACE,0CACA,UAIJ,+BACE,IACE,UAEF,IACE,YAEF,IACE,+B;AC1CJ,MACE,cAEA,YACE,cAEA,0BACE,qB;ACPN,UACE,YACA,yBAFF,UAGI,iCAGF,gBACE,eACA,MACA,OACA,QACA,cACA,WACA,YACA,gCACA,aAGA,yBAZF,gBAaI,aACA,+BACA,yBAGF,sBACE,OACA,mCACA,gBACA,WACA,kBAEA,yBAPF,sBAQI,gBAGF,0BAXF,sBAYI,WACA,gBAGF,0BAhBF,sBAiBI,QAGF,yBApBF,sBAqBI,0BAGF,yBAxBF,sBAyBI,eACA,wBAIJ,wBACE,OACA,2CACA,4CACA,kBACA,UACA,gBAEA,gCACE,WACA,cACA,kBACA,MACA,OACA,SACA,QACA,4BACA,sBACA,WACA,6BAEA,yDACE,yBACA,yDACA,6BACA,sBACA,yBAGF,6GAEE,yDAIJ,0FACE,sBAGF,sCACE,gCACE,8BAIJ,gDACE,aACA,iCAGF,0BAlDF,wBAmDI,OACA,mBAGF,yBAvDF,wBAwDI,cAIJ,uBACE,kBACA,MACA,QACA,UACA,YACA,gCACA,2CACA,mCAIJ,iBACE,OACA,sC;AChIJ,SACE,qBAEA,kBACA,aACA,mBACA,uBAEA,0BACA,2BAEA,aACE,kBACA,MACA,OACA,QACA,SAEA,4BACA,qBAEA,oBACA,sBACA,mCACA,iCAIA,iCACE,WACA,kBACA,eACA,cACA,iBACA,gBACA,kBAGF,yCACE,2BAGF,0CACE,gCAKF,mBACE,2CAIA,mCACE,gDAMJ,kBACE,0CAEA,8BACE,+CAMJ,mBACE,2CAKF,mBACE,2CAKF,kBACE,0CAKF,oBACE,4CAKN,gBACE,KACE,uBAGF,GACE,0B;ACtFJ,4BACE,KACE,mBACA,UAEF,IACE,UAEF,GACE,UACA,oBAIJ,kBACE,kBACA,MACA,OACA,SACA,QAEA,yCACE,aAGF,uBACE,kBACA,cACA,0DACA,kBACA,mBACA,iC;ACpBJ,QACE,wBACA,aACA,mBACA,uBACA,WACA,cACA,SACA,2CACA,6BACA,sBACA,gBACA,WACA,gBACA,eACA,yBACA,cACA,kBACA,gBACA,4CACA,gCAGA,8DAGE,2BAGF,iBACE,sBACA,eACA,oBAGF,cACE,aACA,kBAEA,gBACE,iBAIJ,gBACE,sCACA,yBACA,oCAtEA,8JAyEE,4CApEF,qBACE,oDAmEA,6CAzDA,4EA6DA,mDAIJ,kBACE,yCACA,kDACA,oCApFA,oKAuFE,sCACA,WAnFF,qBACE,sDAiFA,sCACA,YAxEA,8EA4EA,4CAIJ,aACE,yCACA,kCACA,oCAnGA,qJAsGE,2BAjGF,qBACE,iDAgGA,4BAtFA,yEA0FA,yCAIJ,eACE,yCACA,yBACA,mDAjHA,2JAoHE,oCACA,yBAhHF,qBACE,mDA8GA,oCACA,0BArGA,2EAyGA,0CAIJ,aACE,6BAEA,qBACE,2BACA,6BAlIF,6KAqII,4DAhIJ,qBACE,yDA+HE,6DArHF,iFAyHE,4DAIJ,uBACE,6BACA,kCA/IF,0KAoJI,oDACA,yBAhJJ,qBACE,wDA8IE,oDACA,0BArIF,gFAyIE,oDAKN,cACE,WA/JA,wJAkKE,UA7JF,qBACE,kDA4JA,WAGF,wBACE,UAIJ,oBACE,6BACA,kCAEA,uDA9KA,0KAiLE,wDA5KF,qBACE,wDA2KA,yDAjKA,gFAqKA,6DAGF,8BACE,2BAIJ,0BACE,6BACA,2BACA,0CAhMA,4LAmME,uCACA,WA/LF,qBACE,8DA6LA,uCACA,YApLA,sFAwLA,uCAIJ,0BACE,6BACA,qBACA,oCA/MA,4LAkNE,iCA7MF,qBACE,8DA4MA,kCAlMA,sFAsMA,iCAIJ,aACE,iCACA,WACA,0CA7NA,qJAgOE,iCACA,WA5NF,qBACE,iDA0NA,iCACA,YAjNA,yEAqNA,iCAIJ,gBACE,eACA,iBAEA,sBACE,cAGF,qBACE,cACA,sBACA,sBAGF,0BACE,oBACA,sBAEA,4BACE,iBACA,mBAGF,mCACE,qBACA,qBAEA,qCACE,kBACA,eAKN,yBAlCF,gBAmCI,cAEA,sBACE,cAKN,aACE,eACA,iBACA,iDACA,kBACA,gBAEA,mBACE,cACA,eACA,kBAGF,eACE,kBAGF,kBACE,YACA,mBACA,sBACA,eAIJ,cACE,qBACA,sBACA,WAEA,mBACE,sBACA,uBAIJ,aACE,sBACA,qBACA,sBACA,oBAGF,gBACE,kBACA,oBAEA,yBACE,kBACA,cACA,YAEA,0BAIJ,eACE,oB;AC/UJ,UACE,cACA,kBACA,oBACA,gBACA,qBACA,mBACA,eAEA,mBACE,oBACA,WAKE,uCACE,kBAGF,sCACE,0FAGA,qBACA,kBAMJ,iFAEE,qBAGF,2BACE,kBACA,aACA,YACA,UACA,oCACA,wBAMA,8DACE,gCAGF,6DACE,yDACA,UAGA,yBACA,wCAKN,gBACE,kBACA,uBACA,UAIA,iEAEE,WACA,cACA,kBACA,eACA,aACA,eACA,gBAGF,iCACE,4CACA,qBACA,yCACA,2DAGF,gCAEE,oEAEA,wBACA,UACA,4BAGF,gCACE,cACA,mBAGF,mCACE,cACA,kBACA,iBACA,kCAKF,+CACE,kCACA,sCAGF,8CACE,UAIJ,mBACE,eACA,qBAGE,oCACE,UACA,cAIJ,uDAEE,iBAIA,mFAEE,UACA,g1C;AC7IR,SACE,aACA,YACA,mBACA,uBAEA,qBACE,eAGF,kBACE,wB;ACVF,oBACE,kBACA,WAGF,gBACE,eACA,YACA,aACA,WACA,cACA,+BAGF,cACE,gBACA,cACA,gBACA,gBACA,SACA,kBACA,yCACA,8DACA,2CACA,kBACA,6BACA,4BAEA,qBACA,0GAeA,gCACA,cAdA,mBACE,mBAGF,sBACE,gEAGF,qCACE,0BACA,mCAMF,kBACE,oBAGF,qBACE,uBAGF,mBACE,qBAGF,oBACE,sBAGF,0BACE,iBAIJ,wDACE,2BAGF,cACE,gBACA,mCACA,kCACA,mBACA,kBAIA,sBACE,gDACA,8DACA,iBAGF,sBACE,gBAGF,8BACE,mC;AC7FN,cACE,kB;ACDF,UACE,WACA,gBACA,uBACA,2BACA,wBACA,aACA,oBACA,kBACA,gBACA,mBACA,mBACA,wBACA,oCACA,eACA,uBAEA,qBACE,gCAEE,yCACA,qBACA,eAIJ,yBACE,iDAGE,qBACA,cAGF,iBACE,0CAIJ,YACE,iBACA,kBACA,kCAGF,0BACE,kBAEA,qCACE,0BAIJ,mBACE,sBACA,0BAGF,sBACE,yBAEA,wBACE,cAIJ,+DACE,0CACA,2BAGF,oBACE,iBAIA,qBACE,iBACA,eAGF,mCACE,iBACA,eAGF,6BACE,cACA,kBAIJ,kBACE,mBACA,kBACA,sBACA,eACA,sBACA,WACA,gBACA,mBACA,sCAEA,oBACE,kBACA,kBACA,kBACA,qBAEA,4BACE,kBAIJ,qBACE,yEAGE,sDACA,qBAGF,yBACE,uB;AC1HN,+BACE,eAEA,0CAEA,wCACE,kBACA,SACA,aACA,WACA,uBAIF,8CACE,kBACA,aACA,WACA,aACA,cACA,6CACA,aACA,cACA,kCAEA,0DAEA,mDACE,kCACA,mCACA,WAKN,0BACE,WACA,mBACA,gBACA,uCACA,sBAEA,+BACE,oBAKF,mCACE,aACA,mBAGF,8CACE,uBACA,mBAEA,mDACE,kBAKN,gCACE,eACA,kBAEA,uCACE,WACA,YACA,qBACA,mBACA,uBAIJ,gCACE,mBACA,gBACA,uBACA,kBACA,gBAGF,gCACE,iBACA,WACA,qB;ACxFJ,WACE,WACA,kBACA,cACA,uBACA,kBAEA,gDAPF,WAQI,gCAEA,cACE,kBAIJ,kDAEE,cACA,iBACA,kBACA,aACA,cACA,sBAEA,gDATF,kDAUI,YACA,aACA,sBAIJ,iBACE,oEACA,qBAGF,cACE,kBACA,cAEA,yBAJF,cAKI,eACA,iBAIJ,iBACE,kBACA,iBACA,qBACA,kCAEA,yBANF,iBAOI,eACA,oBAKN,kGAKE,YACA,gBAIA,6BACE,oBAGF,gCACE,mBAGF,wCACE,gBAMF,0CACE,aACA,mBACA,uBAIJ,kBACE,aACA,cACA,cACA,iBACA,kCACA,YACA,aACA,mBACA,uBACA,eAEA,gDAEE,UAKF,sDAEE,aAGF,0BACE,aACA,uBACA,kBAEA,UACA,mBACA,2EACA,sCACE,WACA,qBAIJ,wBACE,kBACA,QACA,SACA,gCACA,UACA,kBACA,4CAGF,4BACE,sBACA,2CACA,gBAGF,iBACE,uBAGF,iBACE,gBACA,mBACA,kBAEA,oBACE,uBACA,gBACA,gBACA,aAEA,4BACE,sBACA,aACA,uBACA,mBACA,mBACA,gBACA,UACA,oBACA,gCACA,kBACA,kBACA,WAMR,kBACE,kC;ACnLF,aACE,YACA,aACA,sBACA,mBACA,uBAEA,sBACE,gBACA,YACA,eACA,kBAGF,oBACE,gBAGF,0BACE,kCACA,kBAGF,iBACE,WACA,gBAGF,qBACE,gB;AC7BJ,iBAAiB;AACjB;EACE,qBAAqB;EACrB,kBAAkB;EAClB,gBAAgB;EAChB,kBAAkB;EAClB,sGAAsG;EACtG,sFAAsF;AACxF;AACA,aAAa;AACb;EACE,qBAAqB;EACrB,kBAAkB;EAClB,gBAAgB;EAChB,kBAAkB;EAClB,sGAAsG;EACtG,4DAA4D;AAC9D;AACA,cAAc;AACd;EACE,qBAAqB;EACrB,kBAAkB;EAClB,gBAAgB;EAChB,kBAAkB;EAClB,sGAAsG;EACtG,0BAA0B;AAC5B;AACA,UAAU;AACV;EACE,qBAAqB;EACrB,kBAAkB;EAClB,gBAAgB;EAChB,kBAAkB;EAClB,sGAAsG;EACtG,0BAA0B;AAC5B;AACA,eAAe;AACf;EACE,qBAAqB;EACrB,kBAAkB;EAClB,gBAAgB;EAChB,kBAAkB;EAClB,sGAAsG;EACtG,4DAA4D;AAC9D;AACA,cAAc;AACd;EACE,qBAAqB;EACrB,kBAAkB;EAClB,gBAAgB;EAChB,kBAAkB;EAClB,sGAAsG;EACtG,mHAAmH;AACrH;AACA,UAAU;AACV;EACE,qBAAqB;EACrB,kBAAkB;EAClB,gBAAgB;EAChB,kBAAkB;EAClB,sGAAoG;EACpG,yKAAyK;AAC3K;AACA,iBAAiB;AACjB;EACE,qBAAqB;EACrB,kBAAkB;EAClB,gBAAgB;EAChB,kBAAkB;EAClB,4GAAgH;EAChH,sFAAsF;AACxF;AACA,aAAa;AACb;EACE,qBAAqB;EACrB,kBAAkB;EAClB,gBAAgB;EAChB,kBAAkB;EAClB,4GAAgH;EAChH,4DAA4D;AAC9D;AACA,cAAc;AACd;EACE,qBAAqB;EACrB,kBAAkB;EAClB,gBAAgB;EAChB,kBAAkB;EAClB,4GAAgH;EAChH,0BAA0B;AAC5B;AACA,UAAU;AACV;EACE,qBAAqB;EACrB,kBAAkB;EAClB,gBAAgB;EAChB,kBAAkB;EAClB,6GAAgH;EAChH,0BAA0B;AAC5B;AACA,eAAe;AACf;EACE,qBAAqB;EACrB,kBAAkB;EAClB,gBAAgB;EAChB,kBAAkB;EAClB,6GAAgH;EAChH,4DAA4D;AAC9D;AACA,cAAc;AACd;EACE,qBAAqB;EACrB,kBAAkB;EAClB,gBAAgB;EAChB,kBAAkB;EAClB,6GAAgH;EAChH,mHAAmH;AACrH;AACA,UAAU;AACV;EACE,qBAAqB;EACrB,kBAAkB;EAClB,gBAAgB;EAChB,kBAAkB;EAClB,6GAA8G;EAC9G,yKAAyK;AAC3K;;AAEA,+DAA+D;AAC/D;EACE,sBAAsB;EACtB;yDAC+C;EAC/C,mBAAmB;EACnB,iBAAiB;EACjB,yBAAyB;AAC3B;;AAEA,+DAA+D;AAC/D;EACE,sBAAsB;EACtB;yDAC8C;EAC9C,gBAAgB;EAChB,iBAAiB;EACjB,0BAA0B;AAC5B;;AC1IQ,qBCPR,qBAGE,MAGF,sBACE,iBACA,8BACA,0BACA,6BACA,6CACA,CAIA,6EAEF,aAWE,MAGF,QACE,uBAGF,uBACE,IAGF,sBACE,SACA,iBACA,mBAGF,YAME,oBACA,gBACA,uCAGF,yBAEE,yCACA,CADA,gCACA,YACA,gBACA,SAGF,kBACE,kBACA,oBACA,YAGF,YAIE,mBACA,yBAGF,eAIE,IAGF,mBACE,cACA,mBAGF,eAEE,KAGF,iBACE,aAGF,eAGE,OAGF,aACE,SAGF,iBAEE,cACA,cACA,wBACA,KAGF,cACE,KAGF,UACE,GAGF,wBACE,qBACA,6BACA,qCACA,SAEF,aACE,0BACA,uGAGF,aAGE,qBACA,qCAEF,SACE,mBAGF,uHAIE,qBAEA,KAGF,YACE,mBACA,cACA,6BACA,KAGF,qBACE,kBACA,gBAGF,eACE,mFAGF,yBASE,OAGF,wBACE,SAGF,kBACE,sBACA,cACA,gBACA,oBACA,IAGF,kBACE,OAGF,oBACE,oBACA,QAGF,eACE,cAGF,kBACE,0CACA,uCAGF,QAKE,oBACA,kBACA,oBACA,cAGF,gBAEE,eAGF,mBAEE,sDAGF,yBAIE,yHAGF,SAIE,kBACA,wCAGF,qBAEE,UACA,gFAGF,0BAIE,UAGF,aACE,gBACA,UAGF,WACE,UACA,SACA,SACA,QAGF,aACE,WACA,eACA,UACA,oBACA,iBACA,oBACA,cACA,mBACA,UAGF,uBACE,mFAGF,WAEE,eAGF,mBACE,wBACA,sFAGF,uBAEE,8BAGF,YACE,0BACA,QAGF,oBACE,SAGF,iBACE,UAGF,YACE,UAGF,uBACE,OCnQF,2BACE,2CACA,qDACA,iDACA,qCACA,sCACA,6CACA,gCACA,wEACA,sBACA,8BACA,gCACA,gCACA,0CACA,sCACA,2BACA,qCACA,mCACA,iCACA,4BACA,oCACA,yBACA,+BACA,0BACA,4CACA,iDACA,0EACA,0EACA,+EACA,mCACA,yBAEA,+BACA,sCACA,wCACA,yDACA,uBACA,8BACA,uBAEA,6BACA,+BACA,yBAEA,wBAEA,uBAEA,2BAEA,8BAEA,wBAEA,sBAEA,2CACA,0BACA,+CACA,4BAEA,kCACA,kDAEA,8DACA,0DACA,sEACA,6BAEA,8BACA,iCACA,kCACA,sCAEA,uCACA,wCACA,uBAEA,sBACA,4BAEA,6BACA,6BACA,qCAEA,2DACA,wBAEA,wBACA,wBACA,wBACA,wBACA,wBACA,wBACA,kCAEA,gCACA,oDAEA,sDACA,+BAEA,UAEA,iCAEA,wCACA,uCACA,kCACA,yCACA,oCACA,8BACA,wBACA,8BAEA,+BACA,kCACA,yBAgBA,uBACA,sBACA,qBACA,8BACA,gBACA,uBACA,kBACA,uBACA,oBACA,sBACA,4BACA,6BACA,2BACA,sBACA,sBACA,sBACA,iCACA,8BACA,2BACA,mBACA,2BACA,yBACA,qBACA,cACA,8DAEA,mEACA,6DACA,kEACA,8DACA,8DACA,6DACA,+DACA,8DAEA,sEACA,8BAEA,yDAEA,wDACA,oCACA,kDAxDA,MAvHF,0BAwHI,4BAGF,MA3HF,gCA4HI,2BAGF,MA/HF,2BAgII,2BACA,iCACA,oBA+CF,wDACE,wDACA,uBAGF,uDACE,wDACA,MC1NA,mBACE,aAEF,uBAEE,aAEF,yBAEE,aAEF,0BAEE,aAEF,wBAEE,MAjBF,wBACE,aAEF,4BAEE,aAEF,8BAEE,aAEF,+BAEE,aAEF,6BAEE,MAjBF,uBACE,aAEF,2BAEE,aAEF,6BAEE,aAEF,8BAEE,aAEF,4BAEE,MAjBF,sBACE,aAEF,0BAEE,aAEF,4BAEE,aAEF,6BAEE,aAEF,2BAEE,MAjBF,wBACE,aAEF,4BAEE,aAEF,8BAEE,aAEF,+BAEE,aAEF,6BAEE,MAjBF,sBACE,aAEF,0BAEE,aAEF,4BAEE,aAEF,6BAEE,aAEF,2BAEE,MAjBF,sBACE,aAEF,0BAEE,aAEF,4BAEE,aAEF,6BAEE,aAEF,2BAEE,MAjBF,oBACE,aAEF,wBAEE,aAEF,0BAEE,aAEF,2BAEE,aAEF,yBAEE,MAjBF,yBACE,aAEF,6BAEE,aAEF,+BAEE,aAEF,gCAEE,aAEF,8BAEE,MAjBF,wBACE,aAEF,4BAEE,aAEF,8BAEE,aAEF,+BAEE,aAEF,6BAEE,MAjBF,uBACE,aAEF,2BAEE,aAEF,6BAEE,aAEF,8BAEE,aAEF,4BAEE,MAjBF,yBACE,aAEF,6BAEE,aAEF,+BAEE,aAEF,gCAEE,aAEF,8BAEE,MAjBF,uBACE,aAEF,2BAEE,aAEF,6BAEE,aAEF,8BAEE,aAEF,4BAEE,MAjBF,uBACE,aAEF,2BAEE,aAEF,6BAEE,aAEF,8BAEE,aAEF,4BAEE,cChDN,iBACE,qBACA,oBAEA,aACE,iBACA,kBACA,YACA,aACA,yCACA,eACA,gBACA,gCACA,uDACA,YACA,oBACA,6BACA,mBACA,gCAIA,UACE,kBACA,cACA,aACA,kDACA,oDACA,yBACA,WACA,SACA,8JAIJ,kDAKE,yEAGF,+BAEE,4BAGF,iCACE,0BAGF,mCACE,4BAGF,wCACE,uBAGF,UACE,oBACA,6BAIA,gBACE,6BAGF,SACE,aACA,yCAIA,gBACE,mDACA,WACA,UACA,2MAIJ,iDAKE,eAKN,mBACE,cACA,WACA,gBACA,6EACA,4DACA,2CACA,wBACA,yCACA,aACA,kCACA,sBACA,wBACA,eAEA,oBACA,oBAEA,kBACE,qBAGF,iCACE,2BAEA,0BACE,yCAIJ,iCAEE,gDACA,iCACA,qDAEA,0BACE,wBAIJ,0BACE,sBAGF,+BACE,8CACA,+BACA,wBAGF,oCACE,mDACA,oCACA,4BAKF,gBACE,uBAIJ,WACE,gBACA,sBACA,6CACA,gDACA,6BAGF,iBACE,2CAEA,sBACE,8CAGF,iBACE,MACA,QACA,eACA,gBACA,aACA,mBACA,uBACA,eACA,wBACA,kCAEA,WACA,iBACA,uGAEA,SAEE,oDAKF,qBACE,gDACA,uDAGF,MACE,WACA,YC3MN,qBACE,qHACA,mBAEA,kBACA,mBACA,kCAGF,gCAGE,WACA,kBACA,mBACA,oBACA,oBACA,cACA,mCAGA,kCACA,4DAIA,8CACE,wBACA,aACA,kBACA,cACA,mBAIJ,WACE,wBAEF,WACE,4BAEF,WACE,uBAEF,WACE,uBAEF,WACE,uBAEF,WACE,oBAEF,WACE,yBAEF,WACE,8BAEF,WACE,wBAEF,WACE,sBAEF,WACE,yBAEF,WACE,sBAEF,WACE,8BAEF,WACE,oCAEF,WACE,0BAEF,WACE,gCAEF,WACE,2BAEF,WACE,yBAEF,WACE,oBAEF,WACE,gCAEF,WACE,4BAEF,WACE,kCAEF,WACE,2BAEF,WACE,kBAEF,WACE,mBAEF,WACE,uBAEF,WACE,oBAEF,WACE,uBAEF,WACE,0BAEF,WACE,mBAEF,WACE,oBAEF,WACE,2BAEF,WACE,mBAEF,WACE,0BAEF,WACE,8BAEF,WACE,uBAEF,WACE,+BAEF,WACE,yBAEF,WACE,oBAEF,WACE,qBAEF,WACE,mBAEF,WACE,sBAEF,WACE,wBAEF,WACE,mBAEF,WACE,2BAEF,WACE,uBAEF,WACE,uBAEF,WACE,sBAEF,WACE,uBAEF,WACE,4BAEF,WACE,yBAEF,WACE,sBAEF,WACE,uBAEF,WACE,qBAEF,WACE,qBAEF,WACE,mBAEF,WACE,uBAEF,WACE,6BAEF,WACE,uBAEF,WACE,sBAEF,WACE,oBAEF,WACE,mBAEF,WACE,mBAEF,WACE,0BAEF,WACE,4BAEF,WACE,qBAEF,WACE,mBAEF,WACE,8BAEF,WACE,mBAEF,WACE,2BAEF,WACE,8BAEF,WACE,uBAEF,WACE,0BAEF,WACE,yBAEF,WACE,6BAEF,WACE,mBAEF,WACE,qBAEF,WACE,oBAEF,WACE,uBAEF,WACE,qBAEF,WACE,yBAEF,WACE,qBAEF,WACE,6BAEF,WACE,uBAEF,WACE,oBAEF,WACE,qBAEF,WACE,mBAEF,WACE,sBAEF,WACE,oBAEF,WACE,mBAEF,WACE,2BAEF,WACE,8BAEF,WACE,oBAEF,WACE,uBAEF,WACE,uBAEF,WACE,mBAEF,WACE,sBAEF,WACE,wBAEF,WACE,wBAEF,WACE,qBAEF,WACE,sBAEF,WACE,mBAEF,WACE,qBAEF,WACE,mBAEF,WACE,qBAEF,WACE,kBAEF,WACE,oBAEF,WACE,0BAEF,WACE,yBAEF,WACE,0BAEF,WACE,yBAEF,WACE,oBAEF,WACE,mBAEF,WACE,2BAEF,WACE,gCAEF,WACE,2BAEF,WACE,8BAEF,WACE,6BAEF,WACE,uBAEF,WACE,uBAEF,WACE,0BAEF,WACE,qBAEF,WACE,mBAEF,WACE,uBAEF,WACE,oBAEF,WACE,sBAEF,WACE,mBAEF,WACE,oBAEF,WACE,kBAEF,WACE,mBAEF,WACE,uBAEF,WACE,mBAEF,WACE,mBAEF,WACE,qBAEF,WACE,qBAEF,WACE,kBAEF,WACE,oBAEF,WACE,oBAEF,WACE,yBAEF,WACE,0BAEF,WACE,mBAEF,WACE,iBAEF,WACE,yBAEF,WACE,kBAEF,WACE,oBAEF,WACE,oCAEF,WACE,qCAEF,WACE,oCAEF,WACE,0BAEF,WACE,cCheF,iBACE,qCAEA,aAEE,iBACA,oBAGF,4BACE,wBACA,oGAGF,iBAGE,sBAIJ,iBACE,yBACA,+EAEA,cAGE,eACA,sBACA,6CACA,6CACA,0DAGF,iBAEE,OACA,MACA,WACA,8BAGF,uBACE,yHAIA,eAGE,iCAIJ,wBACE,yCAEA,4DACE,wCAGF,4DACE,YAMN,kCACE,YACA,qCACA,gBAEA,gCCrEA,2BDsEA,kBCrEE,kBAGA,+BDsEF,iBACE,0CAGF,QACE,0BAGF,WAlBF,cAmBI,gBACA,yBAGF,4BACE,gBACA,kBACA,gBAMF,iCACE,gBAGF,iCACE,gBAGF,iCACE,gBAGF,iCACE,gBAGF,iCACE,gBAGF,iCACE,gBAGF,iCACE,4CAGF,kCAEE,qBAGF,+BACE,cE1IJ,2BACE,eAGE,yMAGF,uBAYE,eAGF,2BACE,uGAGF,sBAUE,4BACA,yBACA,2BACA,oBACA,qBACA,sBACA,0BACA,0BACA,qBAGF,2BACE,sBACA,kIAGF,iDAIE,mCACA,YR/CJ,UAEE,YACA,mCACA,SACA,UACA,eACA,kKACA,wBAEA,gBACA,gBACA,gBACA,gBACA,mCACA,kCACA,0BAEA,UAlBF,+BAmBI,4BAIJ,+GAEE,kCAGF,6KAEE,mGAGA,6KAEE,aAKJ,8BACE,uCACA,6CAGF,0BAEE,uBAGF,2BACE,OAGF,WACE,0BACA,MAFF,+BAGI,kCAIJ,iBAEE,MACA,OACA,QACA,SAGF,iBACE,eAGF,gBACE,oCACA,gBAGF,YACE,kBACA,MACA,eACA,SACA,aACA,+BACA,iBACA,0BAEA,eAVF,aAWI,mBAQJ,4BACE,QACA,SACA,gBACA,sBACA,WACA,kBAGF,UACE,qCAEA,6BAEE,GAIJ,qBACE,qFAGF,0BAGE,iCAGF,oBAEE,6CACA,oCACA,iCAEA,oBAEA,mFAEA,iCACE,sBACA,yCAEA,mJAGF,6CAGE,ySAEA,kCACE,qDAOF,aACE,uDAKF,cACE,eAKN,oBACE,kCAEA,YACE,cAIJ,oBACE,wBACA,kBACA,qBACA,cACA,eACA,sBACA,gBACA,cACA,yBAEA,uDACE,kBACA,kBAIJ,uBACE,eACA,qBAGF,SACE,6BACA,gCAEA,SACE,iCAGF,YACE,0BAGF,uBACE,gBAIJ,qCACE,eAGF,mCACE,aAGF,4CACE,YAGF,iBACE,OACA,MACA,QACA,SACA,UACA,iCAGF,cACE,eACA,UACA,YACA,WACA,qBAGF,SACE,eACA,mBACA,kBACA,SACA,OACA,sBAGF,GACE,oBACE,WACA,KAEF,oBACE,UACA,MAEF,kBACE,uBAIJ,KACE,kBACE,WACA,IAEF,oBACE,UACA,6mH","sources":["webpack://telegram-t/./src/components/common/spoiler/Spoiler.scss","webpack://telegram-t/./src/components/ui/Link.scss","webpack://telegram-t/./src/components/common/UiLoader.scss","webpack://telegram-t/./src/components/ui/Spinner.scss","webpack://telegram-t/./src/components/ui/RippleEffect.scss","webpack://telegram-t/./src/components/ui/Button.scss","webpack://telegram-t/./src/components/ui/Checkbox.scss","webpack://telegram-t/./src/components/ui/Loading.scss","webpack://telegram-t/./src/components/ui/Menu.scss","webpack://telegram-t/./src/components/ui/DropdownMenu.scss","webpack://telegram-t/./src/components/ui/MenuItem.scss","webpack://telegram-t/./src/components/auth/CountryCodeInput.scss","webpack://telegram-t/./src/components/auth/Auth.scss","webpack://telegram-t/./src/components/main/AppInactive.scss","webpack://telegram-t/./src/assets/fonts/roboto.css","webpack://telegram-t/./src/styles/index.scss","webpack://telegram-t/./src/styles/reboot.css","webpack://telegram-t/./src/styles/_variables.scss","webpack://telegram-t/./src/styles/_spacing.scss","webpack://telegram-t/./src/styles/_forms.scss","webpack://telegram-t/./src/styles/icons.scss","webpack://telegram-t/./src/styles/_common.scss","webpack://telegram-t/./src/styles/_mixins.scss","webpack://telegram-t/./src/styles/print.scss"],"sourcesContent":[".Spoiler {\n &--concealed {\n cursor: pointer;\n background-image: url('../../../assets/spoiler-dots-black.png');\n background-size: auto min(100%, 1.125rem);\n border-radius: 0.5rem;\n\n html.theme-dark &,\n html.theme-light .ListItem.selected &,\n .ActionMessage &,\n .MediaViewerFooter & {\n background-image: url('../../../assets/spoiler-dots-white.png');\n }\n\n .emoji-only & {\n background-size: auto 1.125rem;\n }\n }\n\n &--animated {\n animation: pulse-opacity-light 1.75s linear infinite;\n }\n\n &__content {\n opacity: 1;\n transition: opacity 250ms ease;\n }\n\n &--concealed &__content {\n user-select: none;\n opacity: 0;\n }\n}\n\n@keyframes pulse-opacity-light {\n 25% {\n opacity: 1;\n }\n 50% {\n opacity: 0.25;\n }\n 75% {\n opacity: 1;\n }\n}\n",".Link {\n color: inherit;\n\n &:hover {\n color: inherit;\n\n &.GroupCallLink {\n text-decoration: none;\n }\n }\n}\n","#UiLoader {\n height: 100%;\n @media (max-width: 600px) {\n height: calc(var(--vh, 1vh) * 100);\n }\n\n .mask {\n position: fixed;\n top: 0;\n left: 0;\n right: 0;\n margin: 0 auto;\n width: 100%;\n height: 100%;\n z-index: var(--z-ui-loader-mask);\n display: flex;\n\n\n @media (min-width: 600px) {\n display: grid;\n grid-template-columns: auto 1fr;\n grid-template-rows: 100%;\n }\n\n .left {\n flex: 1;\n background: var(--color-background);\n min-width: 12rem;\n width: 33vw;\n max-width: 26.5rem;\n\n @media (min-width: 926px) {\n max-width: 40vw;\n }\n\n @media (min-width: 1276px) {\n width: 25vw;\n max-width: 33vw;\n }\n\n @media (max-width: 1275px) {\n flex: 2;\n }\n\n @media (max-width: 925px) {\n width: 26.5rem !important;\n }\n\n @media (max-width: 600px) {\n max-width: none;\n width: 100vw !important;\n }\n }\n\n .middle {\n flex: 3;\n border-left: 1px solid var(--color-borders);\n border-right: 1px solid var(--color-borders);\n position: relative;\n z-index: 1;\n overflow: hidden;\n\n &::before {\n content: \"\";\n display: block;\n position: absolute;\n top: 0;\n left: 0;\n bottom: 0;\n right: 0;\n background: no-repeat center;\n background-size: cover;\n z-index: -1;\n transform-origin: left center;\n\n .theme-dark body.initial & {\n background-color: #0f0f0f;\n background-image: url('../../assets/chat-bg-dark.png');\n background-position: top left;\n background-size: 650px;\n background-repeat: repeat;\n }\n\n .theme-light body.initial &,\n body:not(.initial) & {\n background-image: url('../../assets/chat-bg.jpg');\n }\n }\n\n html.theme-light body.animation-level-2 &.with-right-column::before {\n transform: scale(0.67);\n }\n\n @media screen and (min-width: 1276px) {\n &::before {\n margin: -16rem -5rem -20rem 0;\n }\n }\n\n &.custom-bg-image::before {\n margin: -1rem;\n background-image: none !important;\n }\n\n @media (max-width: 1275px) {\n flex: 3;\n border-right: none;\n }\n\n @media (max-width: 600px) {\n display: none;\n }\n }\n\n .right {\n position: absolute;\n top: 0;\n right: 0;\n z-index: 1;\n height: 100%;\n width: var(--right-column-width);\n border-left: 1px solid var(--color-borders);\n background: var(--color-background);\n }\n }\n\n .blank {\n flex: 1;\n background: var(--color-background);\n }\n}\n",".Spinner {\n --spinner-size: 2rem;\n\n position: relative;\n display: flex;\n align-items: center;\n justify-content: center;\n\n width: var(--spinner-size);\n height: var(--spinner-size);\n\n > div {\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n\n background-repeat: no-repeat;\n background-size: 100%;\n\n animation-name: spin;\n animation-duration: 1s;\n animation-iteration-count: infinite;\n animation-timing-function: linear;\n }\n\n &.with-background {\n &::before {\n content: '';\n position: absolute;\n left: -0.125rem;\n top: -0.125rem;\n bottom: -0.125rem;\n right: -0.125rem;\n border-radius: 50%;\n }\n\n &.bg-dark::before {\n background: rgba(0, 0, 0, 0.25);\n }\n\n &.bg-light::before {\n background: rgba(255, 255, 255, 0.4);\n }\n }\n\n &.white {\n > div {\n background-image: var(--spinner-white-data);\n }\n\n &.with-background {\n > div {\n background-image: var(--spinner-white-thin-data);\n }\n }\n }\n\n &.blue {\n > div {\n background-image: var(--spinner-blue-data);\n\n .theme-dark & {\n background-image: var(--spinner-dark-blue-data);\n }\n }\n }\n\n &.black {\n > div {\n background-image: var(--spinner-black-data);\n }\n }\n\n &.green {\n > div {\n background-image: var(--spinner-green-data);\n }\n }\n\n &.gray {\n > div {\n background-image: var(--spinner-gray-data);\n }\n }\n\n &.yellow {\n > div {\n background-image: var(--spinner-yellow-data);\n }\n }\n}\n\n@keyframes spin {\n from {\n transform: rotate(0deg);\n }\n\n to {\n transform: rotate(360deg);\n }\n}\n\n","@-webkit-keyframes ripple-animation {\n from {\n transform: scale(0);\n opacity: 1;\n }\n 50% {\n opacity: 1;\n }\n to {\n opacity: 0;\n transform: scale(2);\n }\n}\n\n@keyframes ripple-animation {\n from {\n transform: scale(0);\n opacity: 1;\n }\n 50% {\n opacity: 1;\n }\n to {\n opacity: 0;\n transform: scale(2);\n }\n}\n\n.ripple-container {\n position: absolute;\n top: 0;\n left: 0;\n bottom: 0;\n right: 0;\n\n body.animation-level-0 & {\n display: none;\n }\n\n span {\n position: absolute;\n display: block;\n background-color: var(--ripple-color, rgba(0, 0, 0, 0.08));\n border-radius: 50%;\n transform: scale(0);\n animation: ripple-animation 700ms;\n }\n}\n","@mixin active-styles() {\n &:not(.disabled):not(:disabled) {\n &:active,\n &.active,\n &:focus {\n @content;\n }\n @media (hover: hover) {\n &:hover {\n @content;\n }\n }\n }\n}\n\n@mixin no-ripple-styles() {\n body.animation-level-0 & {\n &:not(.disabled):not(:disabled) {\n &:active {\n @content;\n }\n }\n }\n}\n\n.Button {\n outline: none !important;\n display: flex;\n align-items: center;\n justify-content: center;\n width: 100%;\n height: 3.5rem;\n border: 0;\n border-radius: var(--border-radius-default);\n background-color: transparent;\n background-size: cover;\n padding: 0.625rem;\n color: white;\n line-height: 1.2;\n cursor: pointer;\n text-transform: uppercase;\n flex-shrink: 0;\n position: relative;\n overflow: hidden;\n transition: background-color 0.15s, color 0.15s;\n text-decoration: none !important;\n\n // @optimization\n &:active,\n &.clicked,\n body.animation-level-0 & {\n transition: none !important;\n }\n\n &.disabled {\n opacity: 0.5 !important;\n cursor: default;\n pointer-events: none;\n }\n\n &.round {\n width: 3.5rem;\n border-radius: 50%;\n\n i {\n font-size: 1.5rem;\n }\n }\n\n &.primary {\n background-color: var(--color-primary);\n color: var(--color-white);\n --ripple-color: rgba(0, 0, 0, 0.08);\n\n @include active-styles() {\n background-color: var(--color-primary-shade);\n }\n\n @include no-ripple-styles() {\n background-color: var(--color-primary-shade-darker);\n }\n }\n\n &.secondary {\n background-color: var(--color-background);\n color: rgba(var(--color-text-secondary-rgb), 0.75);\n --ripple-color: rgba(0, 0, 0, 0.08);\n\n @include active-styles() {\n background-color: var(--color-primary);\n color: white;\n }\n\n @include no-ripple-styles() {\n background-color: var(--color-primary-shade);\n }\n }\n\n &.gray {\n background-color: var(--color-background);\n color: var(--color-text-secondary);\n --ripple-color: rgba(0, 0, 0, 0.08);\n\n @include active-styles() {\n color: var(--color-primary);\n }\n\n @include no-ripple-styles() {\n background-color: var(--color-chat-hover);\n }\n }\n\n &.danger {\n background-color: var(--color-background);\n color: var(--color-error);\n --ripple-color: rgba(var(--color-error-rgb), 0.16);\n\n @include active-styles() {\n background-color: var(--color-error);\n color: var(--color-white);\n }\n\n @include no-ripple-styles() {\n background-color: var(--color-error-shade);\n }\n }\n\n &.text {\n background-color: transparent;\n\n &.primary {\n color: var(--color-primary);\n background-color: transparent;\n\n @include active-styles() {\n background-color: rgba(var(--color-primary-shade-rgb), 0.08);\n }\n\n @include no-ripple-styles() {\n background-color: rgba(var(--color-primary-shade-rgb), 0.16);\n }\n }\n\n &.secondary {\n background-color: transparent;\n color: var(--color-text-secondary);\n }\n\n &.danger {\n @include active-styles() {\n background-color: rgba(var(--color-error-rgb), 0.08);\n color: var(--color-error);\n }\n\n @include no-ripple-styles() {\n background-color: rgba(var(--color-error-rgb), 0.16);\n }\n }\n }\n\n &.faded {\n opacity: 0.8;\n\n @include active-styles() {\n opacity: 1;\n }\n\n &.activated {\n opacity: 1;\n }\n }\n\n &.translucent {\n background-color: transparent;\n color: var(--color-text-secondary);\n\n --ripple-color: var(--color-interactive-element-hover);\n\n @include active-styles() {\n background-color: var(--color-interactive-element-hover);\n }\n\n @include no-ripple-styles() {\n background-color: rgba(var(--color-text-secondary-rgb), 0.16);\n }\n\n &.activated {\n color: var(--color-primary);\n }\n }\n\n &.translucent-white {\n background-color: transparent;\n color: rgba(255, 255, 255, 0.5);\n --ripple-color: rgba(255, 255, 255, 0.08);\n\n @include active-styles() {\n background-color: rgba(255, 255, 255, 0.08);\n color: white;\n }\n\n @include no-ripple-styles() {\n background-color: rgba(255, 255, 255, 0.16);\n }\n }\n\n &.translucent-black {\n background-color: transparent;\n color: rgba(0, 0, 0, 0.8);\n --ripple-color: rgba(0, 0, 0, 0.08);\n\n @include active-styles() {\n background-color: rgba(0, 0, 0, 0.08);\n }\n\n @include no-ripple-styles() {\n background-color: rgba(0, 0, 0, 0.16);\n }\n }\n\n &.dark {\n background-color: rgba(0, 0, 0, 0.75);\n color: white;\n --ripple-color: rgba(255, 255, 255, 0.08);\n\n @include active-styles() {\n background-color: rgba(0, 0, 0, 0.85);\n color: white;\n }\n\n @include no-ripple-styles() {\n background-color: rgba(0, 0, 0, 0.95);\n }\n }\n\n &.smaller {\n height: 2.75rem;\n padding: 0.3125rem;\n\n &.round {\n width: 2.75rem;\n }\n\n &.pill {\n height: 2.5rem;\n border-radius: 1.25rem;\n padding: 0.3125rem 1rem;\n }\n\n &.with-icon {\n padding-left: 0.75rem;\n padding-right: 1.25rem;\n\n i {\n font-size: 1.5rem;\n margin-right: 0.5rem;\n }\n\n &[dir=\"rtl\"] {\n padding-left: 1.25rem;\n padding-right: 0.75rem;\n\n i {\n margin-left: 0.5rem;\n margin-right: 0;\n }\n }\n }\n\n @media (max-width: 600px) {\n height: 2.5rem;\n\n &.round {\n width: 2.5rem;\n }\n }\n }\n\n &.tiny {\n height: 2.25rem;\n padding: 0.4375rem;\n border-radius: var(--border-radius-default-small);\n font-size: 0.875rem;\n font-weight: 500;\n\n &.round {\n width: 2.25rem;\n height: 2.25rem;\n border-radius: 50%;\n }\n\n i {\n font-size: 1.25rem;\n }\n\n &.pill {\n height: 2rem;\n border-radius: 1rem;\n padding: 0.3125rem 1rem;\n font-size: 1rem;\n }\n }\n\n &.fluid {\n padding-left: 1.75rem;\n padding-right: 1.75rem;\n width: auto;\n\n &.tiny {\n padding-left: 1.375rem;\n padding-right: 1.375rem;\n }\n }\n\n &.pill {\n border-radius: 1.75rem;\n padding-left: 1.75rem;\n padding-right: 1.75rem;\n text-transform: none;\n }\n\n &.loading {\n position: relative;\n pointer-events: none;\n\n .Spinner {\n position: absolute;\n right: 0.875rem;\n top: 0.875rem;\n\n --spinner-size: 1.8125rem;\n }\n }\n\n .emoji {\n vertical-align: -3px;\n }\n}\n",".Checkbox {\n display: block;\n position: relative;\n padding-left: 4.5rem;\n text-align: left;\n margin-bottom: 1.5rem;\n line-height: 1.5rem;\n cursor: pointer;\n\n &.disabled {\n pointer-events: none;\n opacity: 0.5;\n }\n\n &.round {\n .Checkbox-main {\n &::before {\n border-radius: 50%;\n }\n\n &::after {\n background: var(--color-primary)\n url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTIiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZD0iTTEzLjkuOEw1LjggOC45IDIuMSA1LjJjLS40LS40LTEuMS0uNC0xLjYgMC0uNC40LS40IDEuMSAwIDEuNkw1IDExLjJjLjQuNCAxLjEuNCAxLjYgMGw4LjktOC45Yy40LS40LjQtMS4xIDAtMS42LS41LS40LTEuMi0uNC0xLjYuMXoiIGZpbGw9IiNGRkYiLz48L3N2Zz4=)\n no-repeat 50% 50%;\n background-size: 12px;\n border-radius: 50%;\n }\n }\n }\n\n &.loading {\n .Checkbox-main::before,\n .Checkbox-main::after {\n opacity: 0 !important;\n }\n\n .Spinner {\n position: absolute;\n left: 0.375rem;\n top: 0.125rem;\n opacity: 0;\n animation: fade-in 0.2s ease forwards;\n --spinner-size: 1.25rem;\n }\n }\n\n &.blocking {\n input:not(:checked) ~ .Checkbox-main {\n &::before {\n border-color: var(--color-error);\n }\n\n &::after {\n background-image: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0Ij4KICA8ZyBmaWxsPSJub25lIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiPgogICAgPHBvbHlnb24gcG9pbnRzPSIwIDAgMjQgMCAyNCAyNCAwIDI0Ii8+CiAgICA8cGF0aCBmaWxsPSIjZTUzOTM1IiBmaWxsLXJ1bGU9Im5vbnplcm8iIGQ9Ik0xOCwzIEMxOS42NTY4NTQyLDMgMjEsNC4zNDMxNDU3NSAyMSw2IEwyMSwxOCBDMjEsMTkuNjU2ODU0MiAxOS42NTY4NTQyLDIxIDE4LDIxIEw2LDIxIEM0LjM0MzE0NTc1LDIxIDMsMTkuNjU2ODU0MiAzLDE4IEwzLDYgQzMsNC4zNDMxNDU3NSA0LjM0MzE0NTc1LDMgNiwzIEwxOCwzIFogTTE2LDExIEw4LDExIEM3LjQ0NzcxNTI1LDExIDcsMTEuNDQ3NzE1MyA3LDEyIEM3LDEyLjU1MjI4NDcgNy40NDc3MTUyNSwxMyA4LDEzIEwxNiwxMyBDMTYuNTUyMjg0NywxMyAxNywxMi41NTIyODQ3IDE3LDEyIEMxNywxMS40NDc3MTUzIDE2LjU1MjI4NDcsMTEgMTYsMTEgWiIvPgogIDwvZz4KPC9zdmc+Cg==);\n opacity: 1;\n\n // Compensate for svg having incorrect size\n background-size: 1.375rem;\n background-position: -0.125rem -0.125rem;\n }\n }\n }\n\n input {\n position: absolute;\n z-index: var(--z-below);\n opacity: 0;\n }\n\n .Checkbox-main {\n &::before,\n &::after {\n content: \"\";\n display: block;\n position: absolute;\n left: 1.1875rem;\n top: 0.1875rem;\n width: 1.125rem;\n height: 1.125rem;\n }\n\n &::before {\n border: 2px solid var(--color-borders-input);\n border-radius: 0.25rem;\n background-color: var(--color-background);\n transition: border-color 0.1s ease, background-color 0.1s ease;\n }\n\n &::after {\n /* stylelint-disable-next-line scss/operator-no-unspaced */\n background: center no-repeat\n url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTIiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZD0iTTEzLjkuOEw1LjggOC45IDIuMSA1LjJjLS40LS40LTEuMS0uNC0xLjYgMC0uNC40LS40IDEuMSAwIDEuNkw1IDExLjJjLjQuNCAxLjEuNCAxLjYgMGw4LjktOC45Yy40LS40LjQtMS4xIDAtMS42LS41LS40LTEuMi0uNC0xLjYuMXoiIGZpbGw9IiNGRkYiIGZpbGwtcnVsZT0ibm9uemVybyIvPjwvc3ZnPg==);\n background-size: 0.875rem;\n opacity: 0;\n transition: opacity 0.1s ease;\n }\n\n .label {\n display: block;\n text-align: initial;\n }\n\n .subLabel {\n display: block;\n font-size: 0.875rem;\n line-height: 1rem;\n color: var(--color-text-secondary);\n }\n }\n\n input:checked ~ .Checkbox-main {\n &::before {\n border-color: var(--color-primary);\n background-color: var(--color-primary);\n }\n\n &::after {\n opacity: 1;\n }\n }\n\n &[dir=\"rtl\"] {\n padding-left: 0;\n padding-right: 4.5rem;\n\n &.loading {\n .Spinner {\n left: auto;\n right: 0.375rem;\n }\n }\n\n .label,\n .subLabel {\n text-align: right;\n }\n\n .Checkbox-main {\n &::before,\n &::after {\n left: auto;\n right: 1.1875rem;\n }\n }\n }\n}\n",".Loading {\n display: flex;\n height: 100%;\n align-items: center;\n justify-content: center;\n\n &.interactive {\n cursor: pointer;\n }\n\n .Spinner {\n --spinner-size: 2.75rem;\n }\n}\n",".Menu {\n &.fluid .bubble {\n min-width: 13.5rem;\n width: auto;\n }\n\n .backdrop {\n position: fixed;\n left: -100vw;\n right: -100vw;\n top: -100vh;\n bottom: -100vh;\n z-index: var(--z-menu-backdrop);\n }\n\n .bubble {\n overflow: hidden;\n display: block;\n list-style: none;\n padding: 0.5rem 0;\n margin: 0;\n position: absolute;\n background-color: var(--color-background);\n box-shadow: 0 0.25rem 0.5rem 0.125rem var(--color-default-shadow);\n border-radius: var(--border-radius-default);\n min-width: 13.5rem;\n z-index: var(--z-menu-bubble);\n overscroll-behavior: contain;\n\n transform: scale(0.5);\n transition: opacity 0.2s cubic-bezier(0.2, 0, 0.2, 1), transform 0.2s cubic-bezier(0.2, 0, 0.2, 1) !important;\n\n &.open {\n transform: scale(1);\n }\n\n &.closing {\n transition: opacity 0.2s ease-in, transform 0.2s ease-in !important;\n }\n\n body.animation-level-0 & {\n transform: none !important;\n transition: opacity 0.15s !important;\n }\n\n --offset-y: calc(100% + 0.5rem);\n --offset-x: 0;\n\n &.top {\n top: var(--offset-y);\n }\n\n &.bottom {\n bottom: var(--offset-y);\n }\n\n &.left {\n left: var(--offset-x);\n }\n\n &.right {\n right: var(--offset-x);\n }\n\n &.with-footer {\n padding-bottom: 0;\n }\n }\n\n body.has-open-dialog &:not(.CustomSendMenu) .bubble {\n transition: none !important;\n }\n\n .footer {\n padding: 0.5rem 0;\n background: var(--color-chat-hover);\n color: var(--color-text-secondary);\n font-size: 0.8125rem;\n text-align: center;\n }\n\n &.compact {\n .bubble {\n background: var(--color-background-compact-menu);\n backdrop-filter: blur(10px);\n padding: 0.25rem 0;\n }\n\n .footer {\n background: none;\n }\n\n &.no-blur .bubble {\n background: var(--color-background);\n }\n }\n}\n",".DropdownMenu {\n position: relative;\n}\n",".MenuItem {\n width: 100%;\n background: none;\n border: none !important;\n box-shadow: none !important;\n outline: none !important;\n display: flex;\n padding: 0.75rem 1rem;\n position: relative;\n overflow: hidden;\n line-height: 1.5rem;\n white-space: nowrap;\n color: var(--color-text);\n --ripple-color: rgba(0, 0, 0, 0.08);\n cursor: pointer;\n unicode-bidi: plaintext;\n\n @media (hover: hover) {\n &:hover,\n &:focus {\n background-color: var(--color-chat-hover);\n text-decoration: none;\n color: inherit;\n }\n }\n\n @media (max-width: 600px) {\n &:focus,\n &:hover,\n &:active {\n text-decoration: none;\n color: inherit;\n }\n\n &:active {\n background-color: var(--color-chat-hover);\n }\n }\n\n i {\n font-size: 1.5rem;\n margin-right: 2rem;\n color: var(--color-icon-secondary);\n }\n\n .menu-item-name {\n margin-right: 2rem;\n\n &.capitalize {\n text-transform: capitalize;\n }\n }\n\n &.disabled {\n opacity: 0.5 !important;\n cursor: default !important;\n }\n\n &.destructive {\n color: var(--color-error);\n\n i {\n color: inherit;\n }\n }\n\n &:not(.has-ripple):not(.disabled):not(.compact):active {\n background-color: var(--color-item-active);\n transition: none !important;\n }\n\n & > .Switcher {\n margin-left: auto;\n }\n\n &[dir=\"rtl\"] {\n i {\n margin-left: 2rem;\n margin-right: 0;\n }\n\n .menu-item-name {\n margin-left: 2rem;\n margin-right: 0;\n }\n\n > .Switcher {\n margin-left: 0;\n margin-right: auto;\n }\n }\n\n &.compact {\n align-items: center;\n font-size: 0.875rem;\n margin: 0.125rem 0.25rem;\n padding: 0.25rem;\n border-radius: 0.375rem;\n width: auto;\n font-weight: 500;\n transform: scale(1);\n transition: 0.15s ease-in-out transform;\n\n i {\n max-width: 1.25rem;\n font-size: 1.25rem;\n margin-left: 0.5rem;\n margin-right: 1.25rem;\n\n &::before {\n max-width: 1.25rem;\n }\n }\n\n @media (hover: hover) {\n &:hover,\n &:focus,\n &:active {\n background: var(--color-background-compact-menu-hover);\n text-decoration: none;\n }\n\n &:active {\n transform: scale(0.98);\n }\n }\n }\n}\n",".CountryCodeInput {\n .input-group {\n cursor: pointer;\n\n z-index: var(--z-country-code-input-group);\n\n .Spinner {\n position: absolute;\n top: 1rem;\n right: 0.75rem;\n opacity: 0.5;\n --spinner-size: 1.5rem;\n }\n\n // Prevent loading additional 10 kB of icomoon font on initial load.\n .css-icon-down {\n position: absolute;\n top: 1.125rem;\n right: 1rem;\n width: 0.75rem;\n height: 0.75rem;\n border: 2px solid var(--color-text-secondary);\n border-top: 0;\n border-left: 0;\n transform: scaleY(1) rotate(45deg);\n /* stylelint-disable-next-line plugin/no-low-performance-animation-properties */\n transition: color 0.2s ease, transform 0.2s ease, top 0.2s ease;\n\n &.open {\n border-color: var(--color-primary);\n transform: scaleY(-1) rotate(45deg);\n top: 1.5rem;\n }\n }\n }\n\n .bubble {\n width: 100%;\n max-height: 23.5rem;\n overflow-y: auto;\n transform-origin: top center !important;\n transform: scale(0.95);\n\n &.open {\n transform: scaleY(1);\n }\n }\n\n .MenuItem {\n button {\n display: flex;\n align-items: center;\n }\n\n &.no-results button {\n justify-content: center;\n padding: 0.5rem 1rem;\n\n span {\n font-size: 0.875rem;\n }\n }\n }\n\n .country-flag {\n font-size: 2rem;\n margin-right: 1rem;\n\n .emoji {\n width: 2rem;\n height: 2rem;\n display: inline-block;\n vertical-align: 4px;\n margin: -0.5rem 0.125rem;\n }\n }\n\n .country-name {\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n margin-right: 1rem;\n text-align: left;\n }\n\n .country-code {\n margin-left: auto;\n opacity: 0.5;\n padding-right: 0.25rem;\n }\n}\n",".auth-form {\n width: 100%;\n max-width: 25.5rem;\n margin: 0 auto;\n padding: 6rem 1rem 1rem;\n text-align: center;\n\n @media (min-width: 600px) and (min-height: 450px) {\n padding: 6.8125rem 1.5rem 1.5rem;\n\n &.qr {\n padding-top: 4rem;\n }\n }\n\n #logo,\n .AvatarEditable label {\n display: block;\n margin-left: auto;\n margin-right: auto;\n width: 7.5rem;\n height: 7.5rem;\n margin-bottom: 1.75rem;\n\n @media (min-width: 600px) and (min-height: 450px) {\n width: 10rem;\n height: 10rem;\n margin-bottom: 2.5rem;\n }\n }\n\n #logo {\n background: url(\"../../assets/telegram-logo.svg\") center no-repeat;\n background-size: 100%;\n }\n\n h2 {\n font-size: 1.25rem;\n line-height: 1;\n\n @media (min-width: 600px) {\n font-size: 2rem;\n line-height: 1.5;\n }\n }\n\n .note {\n font-size: 0.875rem;\n line-height: 1.35;\n margin-bottom: 2.5rem;\n color: var(--color-text-secondary);\n\n @media (min-width: 600px) {\n font-size: 1rem;\n margin-bottom: 3rem;\n }\n }\n}\n\n#auth-registration-form,\n#auth-phone-number-form,\n#auth-code-form,\n#auth-password-form,\n#auth-qr-form {\n height: 100%;\n overflow-y: auto;\n}\n\n#auth-phone-number-form {\n form {\n min-height: 26.25rem;\n }\n\n .Button {\n margin-top: 2.75rem;\n }\n\n .Button + .Button {\n margin-top: 1rem;\n }\n}\n\n#auth-code-form,\n#auth-password-form {\n h2 {\n display: flex;\n align-items: center;\n justify-content: center;\n }\n}\n\n.auth-number-edit {\n width: 2.5rem;\n height: 2.5rem;\n padding: 0.5rem;\n font-size: 1.5rem;\n color: var(--color-text-secondary);\n opacity: 0.75;\n display: flex;\n align-items: center;\n justify-content: center;\n cursor: pointer;\n\n &:hover,\n &:focus {\n opacity: 1;\n }\n}\n\n#auth-qr-form {\n .qr-container,\n .qr-loading {\n height: 280px;\n }\n\n .qr-wrapper {\n display: flex;\n justify-content: center;\n position: relative;\n\n opacity: 1;\n transform: scale(1);\n transition: transform 300ms cubic-bezier(0.34, 1.56, 0.64, 1), opacity 300ms;\n &.pre-animate {\n opacity: 0.5;\n transform: scale(0.5);\n }\n }\n\n .qr-plane {\n position: absolute;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n z-index: 1;\n border-radius: 50%;\n background-color: var(--color-telegram-blue);\n }\n\n .qr-container {\n background-color: white;\n border-radius: var(--border-radius-default);\n overflow: hidden;\n }\n\n h3 {\n margin: 1.5rem 0 1rem 0;\n }\n\n ol {\n list-style: none;\n counter-reset: item;\n padding: 0 1.75rem;\n\n li {\n counter-increment: item;\n text-align: left;\n margin: 0.75rem 0;\n display: flex;\n\n &::before {\n content: counter(item);\n display: flex;\n justify-content: center;\n align-items: center;\n min-width: 1.375rem;\n height: 1.375rem;\n padding: 0;\n margin: 0 0.75rem 0 0;\n background: var(--color-primary);\n border-radius: 50%;\n font-size: smaller;\n color: white;\n }\n }\n }\n}\n\n#sign-in-password {\n word-break: normal !important;\n}\n","#AppInactive {\n height: 100%;\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n\n .content {\n max-width: 28rem;\n margin: auto;\n padding: 1.5rem;\n text-align: center;\n }\n\n .title {\n margin-top: 1rem;\n }\n\n .description {\n color: var(--color-text-secondary);\n font-size: 0.875rem;\n }\n\n img {\n width: 100%;\n max-width: 20rem;\n }\n\n .Button {\n margin-top: 1rem;\n }\n}\n","/* cyrillic-ext */\n@font-face {\n font-family: 'Roboto';\n font-style: normal;\n font-weight: 400;\n font-display: swap;\n src: local('Roboto'), local('Roboto-Regular'), url(KFOmCnqEu92Fr1Mu72xKKTU1Kvnz.woff2) format('woff2');\n unicode-range: U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;\n}\n/* cyrillic */\n@font-face {\n font-family: 'Roboto';\n font-style: normal;\n font-weight: 400;\n font-display: swap;\n src: local('Roboto'), local('Roboto-Regular'), url(KFOmCnqEu92Fr1Mu5mxKKTU1Kvnz.woff2) format('woff2');\n unicode-range: U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;\n}\n/* greek-ext */\n@font-face {\n font-family: 'Roboto';\n font-style: normal;\n font-weight: 400;\n font-display: swap;\n src: local('Roboto'), local('Roboto-Regular'), url(KFOmCnqEu92Fr1Mu7mxKKTU1Kvnz.woff2) format('woff2');\n unicode-range: U+1F00-1FFF;\n}\n/* greek */\n@font-face {\n font-family: 'Roboto';\n font-style: normal;\n font-weight: 400;\n font-display: swap;\n src: local('Roboto'), local('Roboto-Regular'), url(KFOmCnqEu92Fr1Mu4WxKKTU1Kvnz.woff2) format('woff2');\n unicode-range: U+0370-03FF;\n}\n/* vietnamese */\n@font-face {\n font-family: 'Roboto';\n font-style: normal;\n font-weight: 400;\n font-display: swap;\n src: local('Roboto'), local('Roboto-Regular'), url(KFOmCnqEu92Fr1Mu7WxKKTU1Kvnz.woff2) format('woff2');\n unicode-range: U+0102-0103, U+0110-0111, U+1EA0-1EF9, U+20AB;\n}\n/* latin-ext */\n@font-face {\n font-family: 'Roboto';\n font-style: normal;\n font-weight: 400;\n font-display: swap;\n src: local('Roboto'), local('Roboto-Regular'), url(KFOmCnqEu92Fr1Mu7GxKKTU1Kvnz.woff2) format('woff2');\n unicode-range: U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF;\n}\n/* latin */\n@font-face {\n font-family: 'Roboto';\n font-style: normal;\n font-weight: 400;\n font-display: swap;\n src: local('Roboto'), local('Roboto-Regular'), url(KFOmCnqEu92Fr1Mu4mxKKTU1Kg.woff2) format('woff2');\n unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;\n}\n/* cyrillic-ext */\n@font-face {\n font-family: 'Roboto';\n font-style: normal;\n font-weight: 500;\n font-display: swap;\n src: local('Roboto Medium'), local('Roboto-Medium'), url(KFOlCnqEu92Fr1MmEU9fCRc4AMP6lbBP.woff2) format('woff2');\n unicode-range: U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;\n}\n/* cyrillic */\n@font-face {\n font-family: 'Roboto';\n font-style: normal;\n font-weight: 500;\n font-display: swap;\n src: local('Roboto Medium'), local('Roboto-Medium'), url(KFOlCnqEu92Fr1MmEU9fABc4AMP6lbBP.woff2) format('woff2');\n unicode-range: U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;\n}\n/* greek-ext */\n@font-face {\n font-family: 'Roboto';\n font-style: normal;\n font-weight: 500;\n font-display: swap;\n src: local('Roboto Medium'), local('Roboto-Medium'), url(KFOlCnqEu92Fr1MmEU9fCBc4AMP6lbBP.woff2) format('woff2');\n unicode-range: U+1F00-1FFF;\n}\n/* greek */\n@font-face {\n font-family: 'Roboto';\n font-style: normal;\n font-weight: 500;\n font-display: swap;\n src: local('Roboto Medium'), local('Roboto-Medium'), url(KFOlCnqEu92Fr1MmEU9fBxc4AMP6lbBP.woff2) format('woff2');\n unicode-range: U+0370-03FF;\n}\n/* vietnamese */\n@font-face {\n font-family: 'Roboto';\n font-style: normal;\n font-weight: 500;\n font-display: swap;\n src: local('Roboto Medium'), local('Roboto-Medium'), url(KFOlCnqEu92Fr1MmEU9fCxc4AMP6lbBP.woff2) format('woff2');\n unicode-range: U+0102-0103, U+0110-0111, U+1EA0-1EF9, U+20AB;\n}\n/* latin-ext */\n@font-face {\n font-family: 'Roboto';\n font-style: normal;\n font-weight: 500;\n font-display: swap;\n src: local('Roboto Medium'), local('Roboto-Medium'), url(KFOlCnqEu92Fr1MmEU9fChc4AMP6lbBP.woff2) format('woff2');\n unicode-range: U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF;\n}\n/* latin */\n@font-face {\n font-family: 'Roboto';\n font-style: normal;\n font-weight: 500;\n font-display: swap;\n src: local('Roboto Medium'), local('Roboto-Medium'), url(KFOlCnqEu92Fr1MmEU9fBBc4AMP6lQ.woff2) format('woff2');\n unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;\n}\n\n/* Persian, v32.0.0, https://github.com/rastikerdar/vazirmatn */\n@font-face {\n font-family: Vazirmatn;\n src: url('Vazirmatn-NL-Regular.woff2') format('woff2'),\n url('Vazirmatn-NL-Regular.woff') format('woff');\n font-weight: normal;\n font-display:swap;\n unicode-range:U+0627-06FF;\n}\n\n/* Persian, v32.0.0, https://github.com/rastikerdar/vazirmatn */\n@font-face {\n font-family: Vazirmatn;\n src: url('Vazirmatn-NL-Medium.woff2') format('woff2'),\n url('Vazirmatn-NL-Medium.woff') format('woff');\n font-weight: 500;\n font-display:swap;\n unicode-range: U+0600-06FF;\n}\n","@import \"reboot\";\n@import \"variables\";\n@import \"mixins\";\n@import \"spacing\";\n@import \"forms\";\n@import \"icons\";\n@import \"common\";\n@import \"../assets/fonts/roboto.css\";\n@import \"./print\";\n\nhtml,\nbody {\n width: 100%;\n height: 100%;\n background: var(--color-background);\n margin: 0;\n padding: 0;\n font-size: 16px;\n font-family: \"Roboto\", -apple-system, BlinkMacSystemFont, \"Apple Color Emoji\", \"Segoe UI\", Oxygen, Ubuntu, Cantarell,\n \"Fira Sans\", \"Droid Sans\", \"Helvetica Neue\", sans-serif;\n color: var(--color-text);\n font-weight: 400;\n line-height: 1.5;\n text-align: left;\n overflow: hidden;\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n\n @media (max-width: 600px) {\n height: calc(var(--vh, 1vh) * 100);\n }\n}\n\nbody.is-ios,\nbody.is-macos {\n font-family: system-ui, -apple-system, BlinkMacSystemFont, \"Roboto\", \"Apple Color Emoji\", \"Helvetica Neue\", sans-serif;\n}\n\nhtml[lang=\"fa\"],\nhtml[lang=\"fa\"] body {\n font-family: \"Vazirmatn\", \"Roboto\", -apple-system, BlinkMacSystemFont, \"Apple Color Emoji\", \"Segoe UI\", Oxygen, Ubuntu,\n Cantarell, \"Fira Sans\", \"Droid Sans\", \"Helvetica Neue\", sans-serif;\n\n &.is-ios,\n &.is-macos {\n font-family: \"Vazirmatn\", -apple-system, BlinkMacSystemFont, \"Roboto\", \"Apple Color Emoji\", \"Segoe UI\", Oxygen, Ubuntu,\n Cantarell, \"Fira Sans\", \"Droid Sans\", \"Helvetica Neue\", sans-serif;\n }\n}\n\nbody.is-ios {\n --border-radius-messages: 1rem;\n --border-radius-messages-small: 0.5rem;\n}\n\nbody.cursor-grabbing,\nbody.cursor-grabbing * {\n cursor: grabbing !important;\n}\n\nbody.cursor-ew-resize {\n cursor: ew-resize !important;\n}\n\n#root {\n height: 100%;\n @media (max-width: 600px) {\n height: calc(var(--vh, 1vh) * 100);\n }\n}\n\n#middle-column-portals,\n#portals {\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n}\n\n.hidden {\n visibility: hidden;\n}\n\n.no-selection {\n user-select: none;\n -webkit-user-select: none !important;\n}\n\n.resize-handle {\n display: none;\n position: absolute;\n top: 0;\n right: -0.25rem;\n bottom: 0;\n width: 0.25rem;\n z-index: var(--z-resize-handle);\n cursor: ew-resize;\n\n @media (min-width: 926px) {\n display: block;\n }\n}\n\n/*\n See the article for more information on this visually-hidden pattern.\n https://snook.ca/archives/html_and_css/hiding-content-for-accessibility\n*/\n.visually-hidden {\n position: absolute !important;\n width: 0;\n height: 0;\n overflow: hidden;\n clip: rect(0, 0, 0, 0);\n z-index: -1;\n}\n\n.not-implemented {\n opacity: 0.5;\n\n &,\n & * {\n cursor: not-allowed !important;\n }\n}\n\n* {\n box-sizing: border-box;\n}\n\n.no-animations #root *,\n.no-animations #root *::before,\n.no-animations #root *::after {\n transition: none !important;\n}\n\n.custom-scroll,\n.custom-scroll-x {\n scrollbar-width: thin;\n scrollbar-color: rgba(90, 90, 90, 0) transparent;\n transition: scrollbar-color 0.3s ease;\n\n -webkit-overflow-scrolling: touch;\n // Fix scroll lock on iOS\n pointer-events: auto;\n\n &::-webkit-scrollbar-thumb {\n background-color: rgba(90, 90, 90, 0);\n border-radius: 0.375rem;\n // `box-shadow` prevents repaint on macOS when hovering out of scrollable container\n box-shadow: 0 0 1px rgba(255, 255, 255, 0.01);\n }\n\n &:hover,\n &:focus,\n &:focus-within {\n scrollbar-color: rgba(90, 90, 90, 0.3) transparent;\n\n &::-webkit-scrollbar-thumb {\n background-color: rgba(90, 90, 90, 0.3);\n }\n }\n}\n\nbody:not(.is-ios) {\n .custom-scroll {\n &::-webkit-scrollbar {\n width: 0.375rem;\n }\n }\n\n .custom-scroll-x {\n &::-webkit-scrollbar {\n height: 0.375rem;\n }\n }\n}\n\n.no-scrollbar {\n scrollbar-width: none;\n\n &::-webkit-scrollbar {\n display: none;\n }\n}\n\n.emoji-small {\n background: no-repeat;\n background-size: 1.25rem;\n color: transparent;\n display: inline-block;\n width: 1.25rem;\n height: 1.25rem;\n margin-inline-end: 1px;\n overflow: hidden;\n flex-shrink: 0;\n\n &::selection {\n background-color: var(--color-selection-highlight-emoji);\n color: transparent;\n }\n}\n\ndiv[role=\"button\"] {\n outline: none !important;\n cursor: pointer;\n}\n\n.opacity-transition {\n opacity: 1;\n transition: opacity 0.15s ease;\n\n &:not(.open) {\n opacity: 0;\n }\n\n &:not(.shown) {\n display: none;\n }\n\n &.slow {\n transition-duration: 0.3s;\n }\n}\n\n.color-primary {\n color: var(--color-primary) !important;\n}\n\n.color-danger {\n color: var(--color-error) !important;\n}\n\n.text-muted {\n color: var(--color-text-secondary) !important;\n}\n\n.protector {\n position: absolute;\n left: 0;\n top: 0;\n right: 0;\n bottom: 0;\n z-index: 2;\n}\n\n.for-ios-autocapitalization-fix {\n position: fixed;\n font-size: 16px;\n opacity: 0;\n bottom: 1rem;\n z-index: -1;\n}\n\n.emoji-test-element {\n opacity: 0;\n display: inline;\n white-space: nowrap;\n position: absolute;\n bottom: 0;\n left: 0;\n}\n\n@keyframes grow-icon {\n 0% {\n transform: scale(0.5);\n opacity: 0.8;\n }\n 50% {\n transform: scale(1.1);\n opacity: 1;\n }\n 100% {\n transform: scale(1);\n }\n}\n\n@keyframes hide-icon {\n from {\n transform: scale(1);\n opacity: 0.4;\n }\n to {\n transform: scale(0.5);\n opacity: 0;\n }\n}\n","*,\n*::before,\n*::after {\n box-sizing: border-box;\n}\n\nhtml {\n font-family: sans-serif;\n line-height: 1.15;\n -webkit-text-size-adjust: 100%;\n -ms-text-size-adjust: 100%;\n -ms-overflow-style: scrollbar;\n -webkit-tap-highlight-color: rgba(0, 0, 0, 0);\n}\n\n@-ms-viewport {\n width: device-width;\n}\narticle,\naside,\ndialog,\nfigcaption,\nfigure,\nfooter,\nheader,\nhgroup,\nmain,\nnav,\nsection {\n display: block;\n}\n\nbody {\n margin: 0;\n}\n\n[tabindex=\"-1\"]:focus {\n outline: none !important;\n}\n\nhr {\n box-sizing: content-box;\n height: 0;\n overflow: visible;\n}\n\nh1,\nh2,\nh3,\nh4,\nh5,\nh6 {\n margin-top: 0;\n margin-bottom: 0.5rem;\n font-weight: 500;\n}\n\nabbr[title],\nabbr[data-original-title] {\n text-decoration: underline;\n text-decoration: underline dotted;\n cursor: help;\n border-bottom: 0;\n}\n\naddress {\n margin-bottom: 1rem;\n font-style: normal;\n line-height: inherit;\n}\n\np,\nol,\nul,\ndl {\n margin-top: 0;\n margin-bottom: 1rem;\n}\n\nol ol,\nul ul,\nol ul,\nul ol {\n margin-bottom: 0;\n}\n\ndd {\n margin-bottom: 0.5rem;\n margin-left: 0;\n}\n\nblockquote,\nfigure {\n margin: 0 0 1rem;\n}\n\ndfn {\n font-style: italic;\n}\n\ndt,\nb,\nstrong {\n font-weight: 500;\n}\n\nsmall {\n font-size: 80%;\n}\n\nsub,\nsup {\n position: relative;\n font-size: 75%;\n line-height: 0;\n vertical-align: baseline;\n}\n\nsub {\n bottom: -0.25em;\n}\n\nsup {\n top: -0.5em;\n}\n\na {\n color: var(--color-links);\n text-decoration: none;\n background-color: transparent;\n -webkit-text-decoration-skip: objects;\n}\na:hover {\n color: #0056b3;\n text-decoration: underline;\n}\n\na:not([href]):not([tabindex]),\na:not([href]):not([tabindex]):hover,\na:not([href]):not([tabindex]):focus {\n color: inherit;\n text-decoration: none;\n}\na:not([href]):not([tabindex]):focus {\n outline: 0;\n}\n\npre,\ncode,\nkbd,\nsamp {\n font: 0.9375rem/1.25 \"Courier\", \"Courier New\", \"Nimbus Mono L\", \"Courier 10 Pitch\", \"FreeMono\", sans-serif-monospace,\n monospace;\n font-size-adjust: 0.43;\n}\n\npre {\n margin-top: 0;\n margin-bottom: 1rem;\n overflow: auto;\n -ms-overflow-style: scrollbar;\n}\n\nimg {\n vertical-align: middle;\n border-style: none;\n}\n\nsvg:not(:root) {\n overflow: hidden;\n}\n\na,\narea,\nbutton,\n[role=\"button\"],\ninput:not([type=\"range\"]),\nlabel,\nselect,\nsummary,\ntextarea {\n touch-action: manipulation;\n}\n\ntable {\n border-collapse: collapse;\n}\n\ncaption {\n padding-top: 0.75rem;\n padding-bottom: 0.75rem;\n color: #868e96;\n text-align: left;\n caption-side: bottom;\n}\n\nth {\n text-align: inherit;\n}\n\nlabel {\n display: inline-block;\n margin-bottom: 0.5rem;\n}\n\nbutton {\n border-radius: 0;\n}\n\nbutton:focus {\n outline: 1px dotted;\n outline: 5px auto -webkit-focus-ring-color;\n}\n\ninput,\nbutton,\nselect,\noptgroup,\ntextarea {\n margin: 0;\n font-family: inherit;\n font-size: inherit;\n line-height: inherit;\n}\n\nbutton,\ninput {\n overflow: visible;\n}\n\nbutton,\nselect {\n text-transform: none;\n}\n\nbutton,\nhtml [type=\"button\"],\n[type=\"reset\"],\n[type=\"submit\"] {\n -webkit-appearance: button;\n}\n\nbutton::-moz-focus-inner,\n[type=\"button\"]::-moz-focus-inner,\n[type=\"reset\"]::-moz-focus-inner,\n[type=\"submit\"]::-moz-focus-inner {\n padding: 0;\n border-style: none;\n}\n\ninput[type=\"radio\"],\ninput[type=\"checkbox\"] {\n box-sizing: border-box;\n padding: 0;\n}\n\ninput[type=\"date\"],\ninput[type=\"time\"],\ninput[type=\"datetime-local\"],\ninput[type=\"month\"] {\n -webkit-appearance: listbox;\n}\n\ntextarea {\n overflow: auto;\n resize: vertical;\n}\n\nfieldset {\n min-width: 0;\n padding: 0;\n margin: 0;\n border: 0;\n}\n\nlegend {\n display: block;\n width: 100%;\n max-width: 100%;\n padding: 0;\n margin-bottom: 0.5rem;\n font-size: 1.5rem;\n line-height: inherit;\n color: inherit;\n white-space: normal;\n}\n\nprogress {\n vertical-align: baseline;\n}\n\n[type=\"number\"]::-webkit-inner-spin-button,\n[type=\"number\"]::-webkit-outer-spin-button {\n height: auto;\n}\n\n[type=\"search\"] {\n outline-offset: -2px;\n -webkit-appearance: none;\n}\n\n[type=\"search\"]::-webkit-search-cancel-button,\n[type=\"search\"]::-webkit-search-decoration {\n -webkit-appearance: none;\n}\n\n::-webkit-file-upload-button {\n font: inherit;\n -webkit-appearance: button;\n}\n\noutput {\n display: inline-block;\n}\n\nsummary {\n display: list-item;\n}\n\ntemplate {\n display: none;\n}\n\n[hidden] {\n display: none !important;\n}\n","@use \"sass:color\";\n\n@function toRGB($color) {\n @return red($color) + \", \" + green($color) + \", \" + blue($color);\n}\n\n@function blend-normal($foreground, $background) {\n $opacity: opacity($foreground);\n $background-opacity: opacity($background);\n\n // calculate opacity\n $bm-red: color.red($foreground) * $opacity + color.red($background) * $background-opacity * (1 - $opacity);\n $bm-green: color.green($foreground) * $opacity + color.green($background) * $background-opacity * (1 - $opacity);\n $bm-blue: color.blue($foreground) * $opacity + color.blue($background) * $background-opacity * (1 - $opacity);\n @return rgb($bm-red, $bm-green, $bm-blue);\n}\n\n$color-primary: #3390ec;\n\n$color-links: #3390ec;\n\n$color-placeholders: #a2acb4;\n\n$color-text-green: #4fae4e;\n$color-green: #00c73e;\n$color-light-green: #eeffde;\n\n$color-error: #e53935;\n\n$color-warning: #fb8c00;\n\n$color-yellow: #fdd764;\n\n$color-white: #ffffff;\n$color-black: #000000;\n$color-dark-gray: #2e3939;\n$color-gray: #c4c9cc;\n$color-text-secondary: #707579;\n$color-text-secondary-apple: #8a8a90;\n$color-text-meta: #686c72;\n$color-text-meta-apple: #8c8c91;\n$color-borders: #dadce0;\n$color-dividers: #c8c6cc;\n$color-item-active: #ededed;\n$color-chat-hover: #f4f4f5;\n$color-chat-active: #3390ec;\n$color-selection: #3993fb;\n\n// https://github.com/telegramdesktop/tdesktop/wiki/Theme-Reference#user-content-standard-color-constants\n// Colors borrowed from https://github.com/telegramdesktop/tdesktop/blob/dev/Telegram/Resources/day-blue.tdesktop-theme\n// historyPeer[1-8]UserpicBg\n$color-user-1: #e17076;\n$color-user-2: #7bc862;\n//$color-user-3: #E5CA77;\n$color-user-4: #65aadd;\n$color-user-5: #a695e7;\n$color-user-6: #ee7aae;\n$color-user-7: #6ec9cb;\n$color-user-8: #faa774;\n\n$color-message-reaction: #ebf3fd;\n$color-message-reaction-hover: #c5def9;\n$color-message-reaction-own: #cef0ba;\n$color-message-reaction-own-hover: #b5e0a4;\n\n:root {\n --color-background: #{$color-white};\n --color-background-compact-menu: #FFFFFFBB;\n --color-background-compact-menu-reactions: #FFFFFFEB;\n --color-background-compact-menu-hover: #000000B2;\n --color-background-selected: #f4f4f5;\n --color-background-secondary: #f4f4f5;\n --color-background-secondary-accent: #e4e4e5;\n --color-background-own: #{$color-light-green};\n --color-background-own-selected: color.adjust($color-light-green, -10%);\n --color-text: #{$color-black};\n --color-text-lighter: #{$color-dark-gray};\n --color-text-secondary: #{$color-text-secondary};\n --color-icon-secondary: #{$color-text-secondary};\n --color-text-secondary-rgb: #{toRGB($color-text-secondary)};\n --color-text-secondary-apple: #{$color-text-secondary-apple};\n --color-text-meta: #{$color-text-meta};\n --color-text-meta-rgb: #{toRGB($color-text-meta)};\n --color-text-meta-colored: #{$color-text-green};\n --color-text-meta-apple: #{$color-text-meta-apple};\n --color-text-green: #{$color-text-green};\n --color-text-green-rgb: #{toRGB($color-text-green)};\n --color-borders: #{$color-borders};\n --color-borders-input: #{$color-borders};\n --color-dividers: #{$color-dividers};\n --color-webpage-initial-background: #{$color-dark-gray};\n --color-interactive-active: var(--color-primary);\n --color-interactive-inactive: rgba(var(--color-text-secondary-rgb), 0.25);\n --color-interactive-buffered: rgba(var(--color-text-secondary-rgb), 0.25); // Overlays underlying inactive element\n --color-interactive-element-hover: rgba(var(--color-text-secondary-rgb), 0.08);\n --color-composer-button: #{$color-text-secondary}CC;\n\n --color-primary: #{$color-primary};\n --color-primary-shade: #{color.mix($color-primary, $color-black, 92%)};\n --color-primary-shade-darker: #{color.mix($color-primary, $color-black, 84%)};\n --color-primary-shade-rgb: #{toRGB(color.mix($color-primary, $color-black, 92%))};\n --color-primary-opacity: rgba(var(--color-primary), 0.5);\n --color-green: #{$color-green};\n --color-green-darker: #{color.mix($color-green, $color-black, 84%)};\n\n --color-error: #{$color-error};\n --color-error-shade: #{color.mix($color-error, $color-black, 92%)};\n --color-error-rgb: #{toRGB($color-error)};\n\n --color-warning: #{$color-warning};\n\n --color-yellow: #{$color-yellow};\n\n --color-links: #{$color-links};\n\n --color-own-links: #{$color-white};\n\n --color-placeholders: #{$color-placeholders};\n\n --color-pinned: #{$color-white};\n\n --color-code: #4a729a;\n --color-code-bg: #{rgba($color-text-secondary, 0.08)};\n --color-code-own: #3c7940;\n --color-code-own-bg: #{rgba($color-text-secondary, 0.08)};\n\n --color-accent-own: #{$color-text-green};\n --color-message-meta-own: #{$color-text-green};\n\n --color-message-reaction: $color-message-reaction;\n --color-message-reaction-hover: $color-message-reaction-hover;\n --color-message-reaction-own: $color-message-reaction-own;\n --color-message-reaction-hover-own: $color-message-reaction-own-hover;\n\n --color-reply-hover: #{blend-normal(rgba($color-text-secondary, 0.08), $color-white)};\n --color-reply-active: #{blend-normal(rgba($color-text-secondary, 0.16), $color-white)};\n --color-reply-own-hover: #{blend-normal(rgba($color-text-green, 0.12), $color-light-green)};\n --color-reply-own-active: #{blend-normal(rgba($color-text-green, 0.24), $color-light-green)};\n\n --color-background-own-apple: #dcf8c5;\n --color-reply-own-hover-apple: #cbefb7;\n --color-reply-own-active-apple: #bae6a8;\n\n --color-white: #{$color-white};\n --color-gray: #{$color-gray};\n\n --color-chat-hover: #{$color-chat-hover};\n --color-chat-active: #{$color-chat-active};\n --color-item-active: #{$color-item-active};\n\n --color-selection-highlight: #{$color-selection};\n --color-selection-highlight-emoji: rgba(#{toRGB($color-selection)}, 0.7);\n\n --color-user-1: #{$color-user-1};\n --color-user-2: #{$color-user-2};\n --color-user-4: #{$color-user-4};\n --color-user-5: #{$color-user-5};\n --color-user-6: #{$color-user-6};\n --color-user-7: #{$color-user-7};\n --color-user-8: #{$color-user-8};\n\n --color-default-shadow: #72727240;\n --color-light-shadow: #7272722b;\n\n --color-skeleton-background: rgba(33, 33, 33, 0.15);\n --color-skeleton-foreground: rgba(232, 232, 232, 0.2);\n\n --color-telegram-blue: #{$color-primary};\n\n --vh: 1vh;\n\n --border-radius-default: 0.75rem;\n --border-radius-default-small: 0.625rem;\n --border-radius-default-tiny: 0.375rem;\n --border-radius-messages: 0.75rem;\n --border-radius-messages-small: 0.375rem;\n --messages-container-width: 45.5rem;\n --right-column-width: 26.5rem;\n --header-height: 3.5rem;\n\n --symbol-menu-width: 26.25rem;\n --symbol-menu-height: 23.25rem;\n --symbol-menu-footer-height: 3rem;\n\n @media (min-width: 1276px) and (max-width: 1920px) {\n --right-column-width: 25vw;\n }\n\n @media (min-width: 1921px) {\n --messages-container-width: 50vw;\n }\n\n @media (max-width: 600px) {\n --right-column-width: 100vw;\n --symbol-menu-width: 100vw;\n --symbol-menu-height: 14.6875rem;\n }\n\n --z-ui-loader-mask: 2000;\n --z-notification: 1000;\n --z-right-column: 900;\n --z-header-menu: 990;\n --z-header-menu-backdrop: 980;\n --z-modal: 1000;\n --z-media-viewer: 1500;\n --z-drop-area: 55;\n --z-animation-fade: 50;\n --z-menu-bubble: 21;\n --z-menu-backdrop: 20;\n --z-message-highlighted: 14;\n --z-message-context-menu: 13;\n --z-scroll-down-button: 12;\n --z-mobile-search: 12;\n --z-middle-header: 11;\n --z-middle-footer: 11;\n --z-country-code-input-group: 10;\n --z-message-select-control: 9;\n --z-message-select-area: 8;\n --z-sticky-date: 9;\n --z-register-add-avatar: 5;\n --z-media-viewer-head: 3;\n --z-resize-handle: 2;\n --z-below: -1;\n\n --spinner-white-data: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCI+PHBhdGggZD0iTTEwLjggMjIuNEM2IDIxLjkgMi4xIDE4IDEuNiAxMy4yLjkgNy4xIDUuNCAxLjkgMTEuMyAxLjVjLjQgMCAuNy0uMy43LS43IDAtLjQtLjQtLjgtLjgtLjhDNC44LjQtLjIgNS45IDAgMTIuNS4yIDE4LjYgNS40IDIzLjggMTEuNSAyNGM2LjYuMiAxMi00LjggMTIuNC0xMS4yIDAtLjQtLjMtLjgtLjgtLjgtLjQgMC0uNy4zLS43LjctLjMgNS45LTUuNSAxMC40LTExLjYgOS43eiIgZmlsbD0iI2ZmZmZmZiIvPjwvc3ZnPg==);\n --spinner-white-thin-data: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCI+PHBhdGggZmlsbD0iI2ZmZmZmZiIgZD0iTTEyIDIzQzUuOSAyMyAxIDE4LjEgMSAxMlM1LjkgMSAxMiAxVjBDNS40IDAgMCA1LjQgMCAxMnM1LjQgMTIgMTIgMTIgMTItNS40IDEyLTEyaC0xYzAgNi4xLTQuOSAxMS0xMSAxMXoiLz48L3N2Zz4=);\n --spinner-blue-data: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCI+PHBhdGggZD0iTTEwLjggMjIuNEM2IDIxLjkgMi4xIDE4IDEuNiAxMy4yLjkgNy4xIDUuNCAxLjkgMTEuMyAxLjVjLjQgMCAuNy0uMy43LS43IDAtLjQtLjQtLjgtLjgtLjhDNC44LjQtLjIgNS45IDAgMTIuNS4yIDE4LjYgNS40IDIzLjggMTEuNSAyNGM2LjYuMiAxMi00LjggMTIuNC0xMS4yIDAtLjQtLjMtLjgtLjgtLjgtLjQgMC0uNy4zLS43LjctLjMgNS45LTUuNSAxMC40LTExLjYgOS43eiIgZmlsbD0iIzRlYTRmNiIvPjwvc3ZnPg==);\n --spinner-dark-blue-data: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCI+PHBhdGggZD0iTTEwLjggMjIuNEM2IDIxLjkgMi4xIDE4IDEuNiAxMy4yLjkgNy4xIDUuNCAxLjkgMTEuMyAxLjVjLjQgMCAuNy0uMy43LS43IDAtLjQtLjQtLjgtLjgtLjhDNC44LjQtLjIgNS45IDAgMTIuNS4yIDE4LjYgNS40IDIzLjggMTEuNSAyNGM2LjYuMiAxMi00LjggMTIuNC0xMS4yIDAtLjQtLjMtLjgtLjgtLjgtLjQgMC0uNy4zLS43LjctLjMgNS45LTUuNSAxMC40LTExLjYgOS43eiIgZmlsbD0iIzgzNzhEQiIvPjwvc3ZnPg==);\n --spinner-black-data: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCI+PHBhdGggZD0iTTEwLjggMjIuNEM2IDIxLjkgMi4xIDE4IDEuNiAxMy4yLjkgNy4xIDUuNCAxLjkgMTEuMyAxLjVjLjQgMCAuNy0uMy43LS43IDAtLjQtLjQtLjgtLjgtLjhDNC44LjQtLjIgNS45IDAgMTIuNS4yIDE4LjYgNS40IDIzLjggMTEuNSAyNGM2LjYuMiAxMi00LjggMTIuNC0xMS4yIDAtLjQtLjMtLjgtLjgtLjgtLjQgMC0uNy4zLS43LjctLjMgNS45LTUuNSAxMC40LTExLjYgOS43eiIgZmlsbD0iIzJlMzkzOSIvPjwvc3ZnPg==);\n --spinner-green-data: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCI+PHBhdGggZD0iTTEwLjggMjIuNEM2IDIxLjkgMi4xIDE4IDEuNiAxMy4yLjkgNy4xIDUuNCAxLjkgMTEuMyAxLjVjLjQgMCAuNy0uMy43LS43IDAtLjQtLjQtLjgtLjgtLjhDNC44LjQtLjIgNS45IDAgMTIuNS4yIDE4LjYgNS40IDIzLjggMTEuNSAyNGM2LjYuMiAxMi00LjggMTIuNC0xMS4yIDAtLjQtLjMtLjgtLjgtLjgtLjQgMC0uNy4zLS43LjctLjMgNS45LTUuNSAxMC40LTExLjYgOS43eiIgZmlsbD0iIzRmYWU0ZSIvPjwvc3ZnPg==);\n --spinner-gray-data: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCI+PHBhdGggZD0iTTEwLjggMjIuNEM2IDIxLjkgMi4xIDE4IDEuNiAxMy4yLjkgNy4xIDUuNCAxLjkgMTEuMyAxLjVjLjQgMCAuNy0uMy43LS43IDAtLjQtLjQtLjgtLjgtLjhDNC44LjQtLjIgNS45IDAgMTIuNS4yIDE4LjYgNS40IDIzLjggMTEuNSAyNGM2LjYuMiAxMi00LjggMTIuNC0xMS4yIDAtLjQtLjMtLjgtLjgtLjgtLjQgMC0uNy4zLS43LjctLjMgNS45LTUuNSAxMC40LTExLjYgOS43eiIgZmlsbD0iIzcwNzU3OSIvPjwvc3ZnPg==);\n --spinner-yellow-data: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCI+PHBhdGggZD0iTTEwLjggMjIuNEM2IDIxLjkgMi4xIDE4IDEuNiAxMy4yLjkgNy4xIDUuNCAxLjkgMTEuMyAxLjVjLjQgMCAuNy0uMy43LS43IDAtLjQtLjQtLjgtLjgtLjhDNC44LjQtLjIgNS45IDAgMTIuNS4yIDE4LjYgNS40IDIzLjggMTEuNSAyNGM2LjYuMiAxMi00LjggMTIuNC0xMS4yIDAtLjQtLjMtLjgtLjgtLjgtLjQgMC0uNy4zLS43LjctLjMgNS45LTUuNSAxMC40LTExLjYgOS43eiIgZmlsbD0iI0ZERDc2NCIvPjwvc3ZnPg==);\n\n --drag-target-border: url(\"data:image/svg+xml,%3csvg width='100%25' height='100%25' xmlns='http://www.w3.org/2000/svg'%3e%3crect width='100%25' height='100%25' fill='none' rx='8' ry='8' stroke='%23DDDFE0' stroke-width='4' stroke-dasharray='9.1%2c 10.5' stroke-dashoffset='3' stroke-linecap='round'/%3e%3c/svg%3e\");\n --drag-target-border-hovered: url(\"data:image/svg+xml,%3csvg width='100%25' height='100%25' xmlns='http://www.w3.org/2000/svg'%3e%3crect width='100%25' height='100%25' fill='none' rx='8' ry='8' stroke='%2363A2E3' stroke-width='4' stroke-dasharray='9.1%2c 10.5' stroke-dashoffset='3' stroke-linecap='round'/%3e%3c/svg%3e\");\n\n --layer-blackout-opacity: 0.3;\n\n --layer-transition: 300ms cubic-bezier(0.33, 1, 0.68, 1);\n --slide-transition: 300ms cubic-bezier(0.25, 1, 0.5, 1);\n --select-transition: 200ms ease-out;\n\n body.is-ios {\n --layer-transition: 450ms cubic-bezier(0.33, 1, 0.68, 1);\n --slide-transition: 450ms cubic-bezier(0.25, 1, 0.5, 1);\n }\n\n body.is-android {\n --layer-transition: 450ms cubic-bezier(0.25, 1, 0.5, 1);\n --slide-transition: 400ms cubic-bezier(0.25, 1, 0.5, 1);\n }\n}\n","@use \"sass:map\";\n\n$spacer: 1rem !default;\n$spacers: () !default;\n$spacers: map.merge(\n (\n 0: 0,\n 1: (\n $spacer * 0.25,\n ),\n 2: (\n $spacer * 0.5,\n ),\n 3: $spacer,\n 4: (\n $spacer * 1.5,\n ),\n 5: (\n $spacer * 2,\n ),\n 6: (\n $spacer * 3,\n ),\n ),\n $spacers\n);\n\n// Margin and Padding\n\n@each $prop, $abbrev in (margin: m, padding: p) {\n @each $size, $length in $spacers {\n .#{$abbrev}-#{$size} {\n #{$prop}: $length !important;\n }\n .#{$abbrev}t-#{$size},\n .#{$abbrev}y-#{$size} {\n #{$prop}-top: $length !important;\n }\n .#{$abbrev}r-#{$size},\n .#{$abbrev}x-#{$size} {\n #{$prop}-right: $length !important;\n }\n .#{$abbrev}b-#{$size},\n .#{$abbrev}y-#{$size} {\n #{$prop}-bottom: $length !important;\n }\n .#{$abbrev}l-#{$size},\n .#{$abbrev}x-#{$size} {\n #{$prop}-left: $length !important;\n }\n }\n}\n",".input-group {\n position: relative;\n margin-bottom: 1.5rem;\n\n label {\n display: block;\n padding: 0 0.25rem;\n position: absolute;\n left: 0.75rem;\n top: 0.9375rem;\n background-color: var(--color-background);\n font-size: 1rem;\n font-weight: 400;\n color: var(--color-placeholders);\n transition: transform 0.15s ease-out, color 0.15s ease-out;\n cursor: text;\n pointer-events: none;\n transform-origin: left center;\n white-space: nowrap;\n }\n\n &.with-arrow {\n &::after {\n content: \"\";\n position: absolute;\n height: 0.75rem;\n width: 0.75rem;\n border-left: 1px var(--color-text-secondary) solid;\n border-bottom: 1px var(--color-text-secondary) solid;\n transform: rotate(-45deg);\n right: 2rem;\n top: 1rem;\n }\n }\n\n &.touched label,\n &.error label,\n &.success label,\n .form-control:focus + label,\n .form-control.focus + label {\n transform: scale(0.75) translate(-0.5rem, -2.25rem);\n }\n\n input::placeholder,\n .form-control::placeholder {\n color: var(--color-placeholders);\n }\n\n &.touched label {\n color: var(--color-text-secondary);\n }\n\n &.error label {\n color: var(--color-error) !important;\n }\n\n &.success label {\n color: var(--color-text-green) !important;\n }\n\n &.disabled {\n opacity: 0.5;\n pointer-events: none;\n }\n\n &[dir=\"rtl\"] {\n input {\n text-align: right;\n }\n\n label {\n left: auto;\n right: 0.75rem;\n }\n\n &.with-arrow {\n &::after {\n border-left: none;\n border-right: 1px var(--color-text-secondary) solid;\n right: auto;\n left: 2rem;\n }\n }\n\n &.touched label,\n &.error label,\n &.success label,\n .form-control:focus + label,\n .form-control.focus + label {\n transform: scale(0.75) translate(1.5rem, -2.25rem);\n }\n }\n}\n\n.form-control {\n --border-width: 1px;\n display: block;\n width: 100%;\n height: 3.375rem;\n padding: calc(0.75rem - var(--border-width)) calc(0.9rem - var(--border-width));\n border: var(--border-width) solid var(--color-borders-input);\n border-radius: var(--border-radius-default);\n color: var(--color-text);\n background-color: var(--color-background);\n outline: none;\n transition: border-color 0.15s ease;\n word-break: break-word;\n -webkit-appearance: none;\n\n font-size: 1rem;\n line-height: 1.25rem;\n\n &[dir] {\n text-align: initial;\n }\n\n &:hover {\n border-color: var(--color-primary);\n\n & + label {\n color: var(--color-primary);\n }\n }\n\n &:focus,\n &.focus {\n border-color: var(--color-primary);\n box-shadow: inset 0 0 0 1px var(--color-primary);\n caret-color: var(--color-primary);\n\n & + label {\n color: var(--color-primary);\n }\n }\n\n &:disabled {\n background: none !important;\n }\n\n .error & {\n border-color: var(--color-error);\n box-shadow: inset 0 0 0 1px var(--color-error);\n caret-color: var(--color-error);\n }\n\n .success & {\n border-color: var(--color-text-green);\n box-shadow: inset 0 0 0 1px var(--color-text-green);\n caret-color: var(--color-text-green);\n }\n}\n\nselect.form-control {\n option {\n line-height: 2rem;\n }\n}\n\ntextarea.form-control {\n resize: none;\n overflow: hidden;\n line-height: 1.3125rem;\n padding-top: calc(1rem - var(--border-width));\n padding-bottom: calc(1rem - var(--border-width));\n}\n\n.input-group.password-input {\n position: relative;\n\n .form-control {\n padding-right: 3.375rem;\n }\n\n .toggle-password {\n position: absolute;\n top: 0;\n right: 0;\n width: 3.375rem;\n height: 3.375rem;\n display: flex;\n align-items: center;\n justify-content: center;\n cursor: pointer;\n outline: none !important;\n\n color: var(--color-text-secondary);\n opacity: 0.7;\n font-size: 1.5rem;\n\n &:hover,\n &:focus {\n opacity: 1;\n }\n }\n\n &[dir=\"rtl\"] {\n .form-control {\n padding-left: 3.375rem;\n padding-right: calc(0.9rem - var(--border-width));\n }\n\n .toggle-password {\n left: 0;\n right: auto;\n }\n }\n}\n","@font-face {\n font-family: 'icomoon';\n src: url('../assets/fonts/icomoon.woff2?n9djnk') format('woff2'),\n url('../assets/fonts/icomoon.woff?n9djnk') format('woff');\n font-weight: normal;\n font-style: normal;\n font-display: block;\n}\n\n[class^=\"icon-\"], [class*=\" icon-\"] {\n /* use !important to prevent issues with browser extensions that change fonts */\n /* stylelint-disable-next-line font-family-no-missing-generic-family-keyword */\n font-family: 'icomoon' !important;\n speak: none;\n font-style: normal;\n font-weight: normal;\n font-variant: normal;\n text-transform: none;\n line-height: 1;\n\n /* Better Font Rendering =========== */\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n}\n\n[class^=\"icon-char-\"], [class*=\" icon-char-\"] {\n &::before {\n font-family: Roboto, \"Helvetica Neue\", sans-serif;\n content: attr(data-char);\n width: 1.5rem;\n text-align: center;\n display: block;\n }\n}\n\n.icon-loop:before {\n content: \"\\e98c\";\n}\n.icon-skip-next:before {\n content: \"\\e98d\";\n}\n.icon-skip-previous:before {\n content: \"\\e98e\";\n}\n.icon-volume-1:before {\n content: \"\\e98f\";\n}\n.icon-volume-2:before {\n content: \"\\e990\";\n}\n.icon-volume-3:before {\n content: \"\\e991\";\n}\n.icon-stats:before {\n content: \"\\e996\";\n}\n.icon-copy-media:before {\n content: \"\\e995\";\n}\n.icon-reaction-filled:before {\n content: \"\\e994\";\n}\n.icon-reactions:before {\n content: \"\\e993\";\n}\n.icon-sidebar:before {\n content: \"\\e992\";\n}\n.icon-video-stop:before {\n content: \"\\e98b\";\n}\n.icon-speaker:before {\n content: \"\\e981\";\n}\n.icon-speaker-outline:before {\n content: \"\\e982\";\n}\n.icon-phone-discard-outline:before {\n content: \"\\e983\";\n}\n.icon-allow-speak:before {\n content: \"\\e984\";\n}\n.icon-stop-raising-hand:before {\n content: \"\\e985\";\n}\n.icon-share-screen:before {\n content: \"\\e986\";\n}\n.icon-voice-chat:before {\n content: \"\\e987\";\n}\n.icon-video:before {\n content: \"\\e988\";\n}\n.icon-noise-suppression:before {\n content: \"\\e989\";\n}\n.icon-phone-discard:before {\n content: \"\\e98a\";\n}\n.icon-bot-commands-filled:before {\n content: \"\\e97f\";\n}\n.icon-reply-filled:before {\n content: \"\\e980\";\n}\n.icon-bug:before {\n content: \"\\e97e\";\n}\n.icon-data:before {\n content: \"\\e97d\";\n}\n.icon-darkmode:before {\n content: \"\\e979\";\n}\n.icon-enter:before {\n content: \"\\e97b\";\n}\n.icon-fontsize:before {\n content: \"\\e97c\";\n}\n.icon-permissions:before {\n content: \"\\e976\";\n}\n.icon-card:before {\n content: \"\\e977\";\n}\n.icon-truck:before {\n content: \"\\e978\";\n}\n.icon-share-filled:before {\n content: \"\\e95a\";\n}\n.icon-bold:before {\n content: \"\\e961\";\n}\n.icon-bot-command:before {\n content: \"\\e962\";\n}\n.icon-calendar-filter:before {\n content: \"\\e963\";\n}\n.icon-comments:before {\n content: \"\\e964\";\n}\n.icon-comments-sticker:before {\n content: \"\\e965\";\n}\n.icon-arrow-down:before {\n content: \"\\e966\";\n}\n.icon-email:before {\n content: \"\\e967\";\n}\n.icon-italic:before {\n content: \"\\e968\";\n}\n.icon-link:before {\n content: \"\\e969\";\n}\n.icon-mention:before {\n content: \"\\e96a\";\n}\n.icon-monospace:before {\n content: \"\\e96b\";\n}\n.icon-next:before {\n content: \"\\e96c\";\n}\n.icon-password-off:before {\n content: \"\\e96d\";\n}\n.icon-pin-list:before {\n content: \"\\e96e\";\n}\n.icon-previous:before {\n content: \"\\e96f\";\n}\n.icon-replace:before {\n content: \"\\e970\";\n}\n.icon-schedule:before {\n content: \"\\e971\";\n}\n.icon-strikethrough:before {\n content: \"\\e972\";\n}\n.icon-underlined:before {\n content: \"\\e973\";\n}\n.icon-zoom-in:before {\n content: \"\\e974\";\n}\n.icon-zoom-out:before {\n content: \"\\e975\";\n}\n.icon-select:before {\n content: \"\\e960\";\n}\n.icon-folder:before {\n content: \"\\e913\";\n}\n.icon-bots:before {\n content: \"\\e915\";\n}\n.icon-calendar:before {\n content: \"\\e916\";\n}\n.icon-cloud-download:before {\n content: \"\\e917\";\n}\n.icon-colorize:before {\n content: \"\\e918\";\n}\n.icon-forward:before {\n content: \"\\e927\";\n}\n.icon-reply:before {\n content: \"\\e947\";\n}\n.icon-help:before {\n content: \"\\e92a\";\n}\n.icon-info:before {\n content: \"\\e92b\";\n}\n.icon-info-filled:before {\n content: \"\\e91b\";\n}\n.icon-delete-filled:before {\n content: \"\\e91c\";\n}\n.icon-delete:before {\n content: \"\\e91d\";\n}\n.icon-edit:before {\n content: \"\\e923\";\n}\n.icon-new-chat-filled:before {\n content: \"\\e939\";\n}\n.icon-send:before {\n content: \"\\e94a\";\n}\n.icon-send-outline:before {\n content: \"\\e94b\";\n}\n.icon-add-user-filled:before {\n content: \"\\e904\";\n}\n.icon-add-user:before {\n content: \"\\e905\";\n}\n.icon-delete-user:before {\n content: \"\\e91e\";\n}\n.icon-microphone:before {\n content: \"\\e935\";\n}\n.icon-microphone-alt:before {\n content: \"\\e93b\";\n}\n.icon-poll:before {\n content: \"\\e938\";\n}\n.icon-revote:before {\n content: \"\\e93a\";\n}\n.icon-photo:before {\n content: \"\\e940\";\n}\n.icon-document:before {\n content: \"\\e91f\";\n}\n.icon-camera:before {\n content: \"\\e90e\";\n}\n.icon-camera-add:before {\n content: \"\\e90f\";\n}\n.icon-logout:before {\n content: \"\\e932\";\n}\n.icon-saved-messages:before {\n content: \"\\e948\";\n}\n.icon-settings:before {\n content: \"\\e94e\";\n}\n.icon-phone:before {\n content: \"\\e93f\";\n}\n.icon-attach:before {\n content: \"\\e909\";\n}\n.icon-copy:before {\n content: \"\\e91a\";\n}\n.icon-channel:before {\n content: \"\\e911\";\n}\n.icon-group:before {\n content: \"\\e929\";\n}\n.icon-user:before {\n content: \"\\e959\";\n}\n.icon-non-contacts:before {\n content: \"\\e928\";\n}\n.icon-active-sessions:before {\n content: \"\\e902\";\n}\n.icon-admin:before {\n content: \"\\e906\";\n}\n.icon-download:before {\n content: \"\\e921\";\n}\n.icon-location:before {\n content: \"\\e930\";\n}\n.icon-stop:before {\n content: \"\\e952\";\n}\n.icon-archive:before {\n content: \"\\e908\";\n}\n.icon-unarchive:before {\n content: \"\\e953\";\n}\n.icon-readchats:before {\n content: \"\\e933\";\n}\n.icon-unread:before {\n content: \"\\e957\";\n}\n.icon-message:before {\n content: \"\\e934\";\n}\n.icon-lock:before {\n content: \"\\e931\";\n}\n.icon-unlock:before {\n content: \"\\e954\";\n}\n.icon-mute:before {\n content: \"\\e937\";\n}\n.icon-unmute:before {\n content: \"\\e955\";\n}\n.icon-pin:before {\n content: \"\\e941\";\n}\n.icon-unpin:before {\n content: \"\\e956\";\n}\n.icon-smallscreen:before {\n content: \"\\e95e\";\n}\n.icon-fullscreen:before {\n content: \"\\e95f\";\n}\n.icon-large-pause:before {\n content: \"\\e92e\";\n}\n.icon-large-play:before {\n content: \"\\e92f\";\n}\n.icon-pause:before {\n content: \"\\e93d\";\n}\n.icon-play:before {\n content: \"\\e943\";\n}\n.icon-channelviews:before {\n content: \"\\e912\";\n}\n.icon-message-succeeded:before {\n content: \"\\e900\";\n}\n.icon-message-read:before {\n content: \"\\e901\";\n}\n.icon-message-pending:before {\n content: \"\\e94c\";\n}\n.icon-message-failed:before {\n content: \"\\e94d\";\n}\n.icon-favorite:before {\n content: \"\\e93e\";\n}\n.icon-keyboard:before {\n content: \"\\e944\";\n}\n.icon-delete-left:before {\n content: \"\\e945\";\n}\n.icon-recent:before {\n content: \"\\e946\";\n}\n.icon-gifs:before {\n content: \"\\e94f\";\n}\n.icon-stickers:before {\n content: \"\\e95b\";\n}\n.icon-smile:before {\n content: \"\\e950\";\n}\n.icon-animals:before {\n content: \"\\e907\";\n}\n.icon-eats:before {\n content: \"\\e922\";\n}\n.icon-sport:before {\n content: \"\\e951\";\n}\n.icon-car:before {\n content: \"\\e910\";\n}\n.icon-lamp:before {\n content: \"\\e92c\";\n}\n.icon-language:before {\n content: \"\\e92d\";\n}\n.icon-flag:before {\n content: \"\\e926\";\n}\n.icon-more:before {\n content: \"\\e936\";\n}\n.icon-search:before {\n content: \"\\e949\";\n}\n.icon-remove:before {\n content: \"\\e95c\";\n}\n.icon-add:before {\n content: \"\\e903\";\n}\n.icon-check:before {\n content: \"\\e914\";\n}\n.icon-close:before {\n content: \"\\e919\";\n}\n.icon-arrow-left:before {\n content: \"\\e90d\";\n}\n.icon-arrow-right:before {\n content: \"\\e93c\";\n}\n.icon-down:before {\n content: \"\\e920\";\n}\n.icon-up:before {\n content: \"\\e958\";\n}\n.icon-eye-closed:before {\n content: \"\\e925\";\n}\n.icon-eye:before {\n content: \"\\e924\";\n}\n.icon-muted:before {\n content: \"\\e95d\";\n}\n.icon-avatar-archived-chats:before {\n content: \"\\e90a\";\n}\n.icon-avatar-deleted-account:before {\n content: \"\\e90b\";\n}\n.icon-avatar-saved-messages:before {\n content: \"\\e90c\";\n}\n.icon-pinned-chat:before {\n content: \"\\e942\";\n}\n","@import \"./mixins\";\n\n// Common styles for all media-type components across the app.\n.media-inner {\n position: relative;\n\n video,\n img {\n display: block;\n object-fit: cover;\n }\n\n video {\n background: no-repeat 50% 50%;\n background-size: contain;\n }\n\n .thumbnail ~ .thumbnail,\n .thumbnail ~ .full-media,\n .media-loading {\n position: absolute;\n }\n}\n\n.animated-close-icon {\n position: absolute;\n transform: rotate(-45deg);\n\n &,\n &::before,\n &::after {\n width: 1.125rem;\n height: 0.125rem;\n border-radius: 0.125rem;\n background-color: var(--color-text-secondary);\n transition: transform var(--slide-transition);\n }\n\n &::before,\n &::after {\n position: absolute;\n left: 0;\n top: 0;\n content: \"\";\n }\n\n &::before {\n transform: rotate(90deg);\n }\n\n &.no-transition {\n &,\n &::before,\n &::after {\n transition: none;\n }\n }\n\n &.state-back {\n transform: rotate(180deg);\n\n &::before {\n transform: rotate(45deg) scaleX(0.75) translate(0, -0.375rem);\n }\n\n &::after {\n transform: rotate(-45deg) scaleX(0.75) translate(0, 0.375rem);\n }\n }\n}\n\n// Used by ChatList and ContactList components\n.chat-list {\n background: var(--color-background);\n height: 100%;\n padding: 0.5rem 0.125rem 0.5rem 0.4375rem;\n\n overflow-y: auto;\n body.is-android & {\n @include overflow-y-overlay();\n }\n\n .scroll-container {\n position: relative;\n }\n\n .ListItem.chat-item-clickable {\n margin: 0;\n }\n\n @media (max-width: 600px) {\n padding-left: 0;\n padding-right: 0;\n }\n\n .no-results {\n color: var(--color-text-meta);\n margin-top: 2rem;\n text-align: center;\n }\n}\n\n// Used by Avatar and ProfilePhoto components\ndiv {\n &.color-bg-1 {\n --color-user: var(--color-user-1);\n }\n\n &.color-bg-2 {\n --color-user: var(--color-user-2);\n }\n\n &.color-bg-4 {\n --color-user: var(--color-user-4);\n }\n\n &.color-bg-5 {\n --color-user: var(--color-user-5);\n }\n\n &.color-bg-6 {\n --color-user: var(--color-user-6);\n }\n\n &.color-bg-7 {\n --color-user: var(--color-user-7);\n }\n\n &.color-bg-8 {\n --color-user: var(--color-user-8);\n }\n\n &.replies-bot-account,\n &.saved-messages {\n --color-user: var(--color-primary);\n }\n\n &.deleted-account {\n --color-user: var(--color-gray);\n }\n}\n","// @optimization\n@mixin while-transition() {\n .Transition > div:not(.Transition__slide--active) &, body.animating-right-column & {\n @content;\n }\n}\n\n@mixin overflow-y-overlay() {\n @supports (overflow-y: overlay) {\n overflow-y: overlay;\n\n //Workaround for Android <= 9\n overflow-x: hidden;\n }\n}\n\n@mixin reset-range() {\n input[type=\"range\"] {\n -webkit-appearance: none;\n display: block;\n width: 100%;\n height: 0.75rem;\n margin-bottom: 0.5rem;\n background: transparent;\n\n &:focus {\n outline: none;\n }\n\n &::-ms-track {\n width: 100%;\n cursor: pointer;\n\n background: transparent;\n border-color: transparent;\n color: transparent;\n }\n\n &::-webkit-slider-thumb {\n -webkit-appearance: none;\n }\n\n &::-moz-slider-thumb {\n -moz-appearance: none;\n }\n\n &::-webkit-slider-runnable-track {\n cursor: pointer;\n }\n\n &::-moz-range-track, &::-moz-range-progress {\n cursor: pointer;\n }\n }\n}\n","@media print {\n body,\n html,\n .messages-layout {\n background: #fff;\n }\n\n #LeftColumn,\n #RightColumn-wrapper,\n .ChatOrUserPicker,\n #Notifications,\n .Modal,\n .ActiveCallHeader,\n .unread-count,\n #middle-column-bg,\n #middle-column-portals,\n .header-tools,\n .ScrollDownButton,\n .middle-column-footer {\n display: none !important;\n }\n\n #MiddleColumn {\n border-left: none !important;\n }\n\n html,\n body,\n #root,\n #UiLoader,\n #Main,\n #MiddleColumn,\n .MessageList,\n .messages-layout,\n .Transition,\n .Transition > * {\n height: auto !important;\n overflow: visible !important;\n display: block !important;\n position: static !important;\n margin: 0 !important;\n padding: 0 !important;\n width: 100% !important;\n max-width: 100% !important;\n transform: none !important;\n }\n\n .messages-container {\n max-width: 100rem !important;\n width: 100% !important;\n }\n\n .MessageList .sticky-date > span,\n .MessageList .local-action-message > span,\n .MessageList .ActionMessage > span,\n .MessageList .empty > span {\n background: var(--color-background-own) !important;\n color: var(--color-text) !important;\n }\n}\n"],"names":[],"sourceRoot":""} \ No newline at end of file diff --git a/dist/main.cd9e6668dcb404fda482.js b/dist/main.cd9e6668dcb404fda482.js deleted file mode 100644 index 3cf297075..000000000 --- a/dist/main.cd9e6668dcb404fda482.js +++ /dev/null @@ -1,2 +0,0 @@ -(()=>{var e,t,n,r,o,i,a={1226:(e,t,n)=>{"use strict";n.d(t,{t9:()=>c,u3:()=>l,g8:()=>u});var r=n(3716),o=n(6926),i=n(9118);let a;const s=new Map,d=new Map;function u(e,t){return a||(r.eM&&console.log(">>> START LOAD WORKER"),a=new Worker(new URL(n.p+n.u(742),n.b)),function(e){a.addEventListener("message",(t=>{let{data:n}=t;if("update"===n.type)e(n.update);else if("methodResponse"===n.type){const e=s.get(n.messageId);e&&(n.error?e.reject(n.error):e.resolve(n.response))}else if("methodCallback"===n.type){var r,o;null===(r=s.get(n.messageId))||void 0===r||null===(o=r.callback)||void 0===o||o.call(r,...n.callbackArgs)}else if("unhandledError"===n.type){var i;throw new Error(null===(i=n.error)||void 0===i?void 0:i.message)}}))}(e),"iOS"===t.platform&&window.addEventListener("focus",(()=>{g(),setTimeout((()=>g()),1e3)}))),f({type:"initApi",args:[t]})}function c(e){if(!a)return void(r.eM&&console.warn("API is not initialized"));for(var t=arguments.length,n=new Array(t>1?t-1:0),o=1;o{try{await i}catch(e){}})(),i}function l(e){e.isCanceled=!0;const{messageId:t}=d.get(e)||{};t&&a.postMessage({type:"cancelProgress",messageId:t})}function f(e){const t=(0,o.Z)(s),n={messageId:t,...e},r={messageId:t},i=new Promise(((e,t)=>{Object.assign(r,{resolve:e,reject:t})}));if("args"in n&&"function"==typeof n.args[1]){const e=n.args.pop();r.callback=e,d.set(e,r)}return s.set(t,r),i.catch((()=>{})).finally((()=>{s.delete(t),r.callback&&d.delete(r.callback)})),a.postMessage(n),i}const h=Date.now();async function g(){try{await Promise.race([f({type:"ping"}),(0,i.wO)(150).then((()=>Promise.reject(new Error("HEALTH_CHECK_TIMEOUT"))))])}catch(e){console.error(e),Date.now()-h>=5e3&&window.location.reload()}}},6137:(e,t,n)=>{"use strict";n.d(t,{IU:()=>o.I,Vv:()=>r.Vv,_Q:()=>r._Q,_f:()=>r._f});var r=n(4746),o=n(9077)},9077:(e,t,n)=>{"use strict";let r;n.d(t,{I:()=>r}),function(e){e[e.BlobUrl=0]="BlobUrl",e[e.Lottie=1]="Lottie",e[e.Progressive=2]="Progressive",e[e.Stream=3]="Stream"}(r||(r={}))},4746:(e,t,n)=>{"use strict";let r;n.d(t,{Vv:()=>r,_Q:()=>i,_f:()=>o}),function(e){e.Bold="MessageEntityBold",e.Blockquote="MessageEntityBlockquote",e.BotCommand="MessageEntityBotCommand",e.Cashtag="MessageEntityCashtag",e.Code="MessageEntityCode",e.Email="MessageEntityEmail",e.Hashtag="MessageEntityHashtag",e.Italic="MessageEntityItalic",e.MentionName="MessageEntityMentionName",e.Mention="MessageEntityMention",e.Phone="MessageEntityPhone",e.Pre="MessageEntityPre",e.Strike="MessageEntityStrike",e.TextUrl="MessageEntityTextUrl",e.Url="MessageEntityUrl",e.Underline="MessageEntityUnderline",e.Spoiler="MessageEntitySpoiler",e.Unknown="MessageEntityUnknown"}(r||(r={}));const o=-1,i="MESSAGE_DELETED"},7799:(e,t,n)=>{"use strict";n.d(t,{Z:()=>l});var r=n(4050),o=n(9118),i=n(6752),a=n(8674),s=n(5332);let d,u;async function c(){return d||(d=n.e(941).then(n.bind(n,7941)),u=(await d).default),d}setTimeout(c,3e3);const l=(0,r.X$)((e=>{let{className:t,id:n,animationData:d,play:l,playSegment:f,speed:h,noLoop:g,size:p,quality:m,isLowPriority:v,color:y,forceOnHeavyAnimation:b,onLoad:w,onEnded:I}=e;const[C,S]=(0,r.eJ)(),E=(0,r.sO)(null),M=(0,r.sO)(!1),P=(0,r.sO)(!1),A=(0,r.sO)(!0),k=(0,r.sO)();k.current=l;const _=(0,r.sO)();_.current=f,(0,r.d4)((()=>{if(C||!d)return;const e=()=>{if(!E.current)return;const e=new u(n,E.current,d,{noLoop:g,size:p,quality:m,isLowPriority:v},w,y,I);h&&e.setSpeed(h),S(e)};u?e():c().then((()=>{(0,o.T2)((()=>{E.current&&e()}))}))}),[y,C,d,n,v,g,w,m,p,h,I]),(0,r.d4)((()=>{C&&C.setColor(y)}),[y,C]),(0,r.d4)((()=>()=>{C&&C.destroy()}),[C]);const x=(0,r.I4)((function(){let e=arguments.length>0&&void 0!==arguments[0]&&arguments[0];C&&(k.current||_.current)&&(_.current?C.playSegment(_.current):e?C.goToAndPlay(0):C.play())}),[C]),T=(0,r.I4)((()=>{C&&C.pause()}),[C]),N=(0,r.I4)((()=>{P.current=!0,C&&(M.current||(M.current=C.isPlaying()),T())}),[C,T]),O=(0,r.I4)((()=>{M.current&&x(),M.current=!1,P.current=!1}),[x]),L=(0,r.I4)((()=>{(0,o.T2)(O)}),[O]);(0,r.d4)((()=>{C&&(l||f?P.current?M.current=!0:x(g):P.current?M.current=!1:T())}),[C,l,f,g,x,T]),(0,r.d4)((()=>{C&&(A.current?A.current=!1:d&&(C.changeData(d),x()))}),[x,C,d]),(0,a.ZP)(N,O,b),(0,s.Z)(N,L);const D=(0,i.Z)("AnimatedSticker",t),B=p?`width: ${p}px; height: ${p}px;`:void 0;return r.ZP.createElement("div",{ref:E,className:D,style:B})}))},88:(e,t,n)=>{"use strict";n.d(t,{Z:()=>h});var r=n(4050),o=n(3555);const i=36,a=2147483647;function s(e,t,n){let r;for(e=n?Math.floor(e/700):e>>1,e+=Math.floor(e/t),r=0;e>455;r+=i)e=Math.floor(e/35);return Math.floor(r+36*e/(e+38))}function d(e,t){const n=[],r=[],o=e.length;let d,u,c,l,f,h,g,p,m,v,y,b,w;for(d=128,c=0,l=72,f=e.lastIndexOf("-"),f<0&&(f=0),h=0;h=128)throw new RangeError("Illegal input >= 0x80");n.push(e.charCodeAt(h))}for(g=f>0?f+1:0;g=o)throw RangeError("punycode_bad_input(1)");if(y=(I=e.charCodeAt(g++))-48<10?I-22:I-65<26?I-65:I-97<26?I-97:i,y>=i)throw RangeError("punycode_bad_input(2)");if(y>Math.floor((a-c)/m))throw RangeError("punycode_overflow(1)");if(c+=y*m,b=v<=l?1:v>=l+26?26:v-l,yMath.floor(a/(i-b)))throw RangeError("punycode_overflow(2)");m*=i-b}if(u=n.length+1,l=s(c-p,u,0===p),Math.floor(c/u)>a-d)throw RangeError("punycode_overflow(3)");d+=Math.floor(c/u),c%=u,t&&r.splice(c,0,e.charCodeAt(g-1)-65<26),n.splice(c,0,d),c++}var I;if(t)for(c=0,w=n.length;c{const t=[];let n=0;const r=e.length;let o;for(;n65535&&(o-=65536,t.push(String.fromCharCode(o>>>10&1023|55296)),o=56320|1023&o),t.push(String.fromCharCode(o))}return t.join("")})(n)}var u=n(3716),c=n(6752),l=n(1396);function f(e){if(!e)return;const t=(0,l.X)(e);if(t)try{let e=decodeURI(t);const n=e.match(/^https?:\/\/([^/:?#]+)(?:[/:?#]|$)/i);if(!n)return;const r=n[1];return e=e.replace(r,function(e){const t=e.split("."),n=[];for(let e=0;e{let{url:t,text:n,className:i,children:a,isRtl:s}=e;const{toggleSafeLinkModal:d,openTelegramLink:h}=(0,o.Sv)(),g=a||n,p=t!==g,m=(0,r.I4)((e=>e.ctrlKey||e.altKey||e.shiftKey||e.metaKey||!t||!t.match(u.FS)&&!t.match(u.g$)?!p||(d({url:t}),e.preventDefault(),!1):(e.preventDefault(),h({url:t}),!1)),[p,h,d,t]);if(!t)return;const v=(0,c.Z)(i||"text-entity-link",n.length>50&&"long-word-break-all");return r.ZP.createElement("a",{href:(0,l.X)(t),title:f(t),target:"_blank",rel:"noopener noreferrer",className:v,onClick:m,dir:s?"rtl":"auto"},g)}))},7324:(e,t,n)=>{"use strict";n.d(t,{Z:()=>a,x:()=>i});var r=n(6137),o=n(647);const i={MonkeyIdle:n(8760),MonkeyTracking:n(6917),MonkeyClose:n(6257),MonkeyPeek:n(7785),FoldersAll:n(9356),FoldersNew:n(5485),DiscussionGroups:n(6978),CameraFlip:n(5665),HandFilled:n(2456),HandOutline:n(5667),Speaker:n(8763),VoiceAllowTalk:n(401),VoiceMini:n(5106),VoiceMuted:n(487),VoiceOutlined:n(5740),Peach:n(3677),Eggplant:n(5435),Cumshot:n(1879),JoinRequest:n(5095),Invite:n(7879),QrPlane:n(5035)};function a(e){const t=i[e].replace(window.location.origin,"");return o.he(`file${t}`,r.IU.Lottie)}},5376:(e,t,n)=>{"use strict";n.d(t,{K2:()=>o,Oh:()=>a,mD:()=>i,v6:()=>s,yW:()=>r});function r(e){return e>536870912?`${(e/1073741824).toFixed(1)} GB`:e>524288?`${(e/1048576).toFixed(1)} MB`:`${(e/1024).toFixed(1)} KB`}function o(e){const{fileName:t,mimeType:n}=e;return i(t,n)}function i(e,t){return e&&-1!==e.indexOf(".")?e.split(".").pop():t.split("/").pop()}function a(e){switch(e){case"apk":case"xls":case"xlsx":return"green";case"zip":case"rar":case"7z":case"tar":case"gz":case"ppt":case"pptx":return"orange";case"pdf":case"xps":return"red";default:return"default"}}function s(e){return Boolean(e.previewBlobUrl||e.thumbnail)}},4784:(e,t,n)=>{"use strict";n.d(t,{Z:()=>i});var r=n(3681);const o=new RegExp(`^(?:${r.Z.source})+$`,""),i=e=>{if(e.length>24)return!1;if(!Boolean(e.match(o)))return!1;let t=0;for(;r.Z.exec(e);)if(t++,t>3)return r.Z.lastIndex=0,!1;return t}},8005:(e,t,n)=>{"use strict";n.d(t,{D:()=>y});var r=n(4050),o=n(5806),i=n(8035),a=n(9937),s=n(996),d=n(2340),u=n(6752),c=n(8033),l=n(3555);const f=e=>{let{className:t,sender:n,children:o}=e;const{openChat:i}=(0,l.Sv)(),a=(0,r.I4)((()=>{n&&i({id:n.id})}),[n,i]);return n?r.ZP.createElement(c.Z,{className:(0,u.Z)("UserLink",t),onClick:a},o):o},h=e=>{let{className:t,message:n,children:o}=e;const{focusMessage:i}=(0,l.Sv)(),a=(0,r.I4)((()=>{n&&i({chatId:n.chatId,messageId:n.id})}),[i,n]);return n?r.ZP.createElement(c.Z,{className:(0,u.Z)("MessageLink",t),onClick:a},o):o},g=e=>{let{className:t,chatId:n,children:o}=e;const{openChat:i}=(0,l.Sv)(),a=(0,r.I4)((()=>{n&&i({id:n})}),[n,i]);return n?r.ZP.createElement(c.Z,{className:(0,u.Z)("ChatLink",t),onClick:a},o):o},p=e=>{let{className:t,groupCall:n,children:o}=e;const{joinGroupCall:i}=(0,l.Sv)(),a=(0,r.I4)((()=>{n&&i({id:n.id,accessHash:n.accessHash})}),[n,i]);return n?r.ZP.createElement(c.Z,{className:(0,u.Z)("GroupCallLink",t),onClick:a},o):o},m=32,v=" ";function y(e,t,n,r,o,i,s){let d=arguments.length>7&&void 0!==arguments[7]?arguments[7]:{};if(!t.content.action)return[];const{text:u,translationValues:c,amount:l,currency:f,call:h}=t.content.action,g=[],p=d.asPlainText||d.asTextWithSpoilers,m="Chat.Service.Group.UpdatedPinnedMessage1"!==u||i?u:"Message.PinnedGenericMessage";let y,P=e(m,null!=c&&c.length?c:void 0);return P.includes("%payment_amount%")&&(y=M(P,"%payment_amount%",(0,a.x)(l,f,e.code)),P=y.pop(),g.push(...y)),y=M(P,"%action_origin%",n?C(n,p)||v:r?S(e,r,p)||v:"User"),P=y.pop(),g.push(...y),y=M(P,"%target_user%",o?o.map((e=>C(e,p))).filter(Boolean):"User"),P=y.pop(),g.push(...y),y=M(P,"%message%",i?w(e,i,d):"a message"),P=y.pop(),g.push(...y),y=M(P,"%product%",i?b(i):"a product"),P=y.pop(),g.push(...y),y=M(P,"%target_chat%",s?E(s,p):"another chat"),g.push(...y),d.asPlainText?g.join("").trim():h?I(h,g):g}function b(e){return e.content&&e.content.invoice?e.content.invoice.title:"a product"}function w(e,t){let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};const{asPlainText:i,asTextWithSpoilers:a}=n;if(i)return(0,o.MK)(e,t,void 0,m);const d=(0,s.e)(e,t,void 0,void 0,m);return a?r.ZP.createElement("span",null,d):r.ZP.createElement(h,{className:"action-link",message:t},d)}function I(e,t){return r.ZP.createElement(p,{groupCall:e},t)}function C(e,t){const n=(0,i.Z)((0,o.Js)(e),m);return t?n:r.ZP.createElement(f,{className:"action-link",sender:e},e&&(0,d.Z)(n))}function S(e,t,n){const a=(0,i.Z)((0,o.U)(e,t),m);return n?a:r.ZP.createElement(g,{className:"action-link",chatId:t.id},t&&(0,d.Z)(a))}function E(e,t){const n="another chat";return t?n:r.ZP.createElement(g,{className:"action-link",chatId:e},n)}function M(e,t,n){const r=e.indexOf(t);if(r<0||!n)return[e];const o=[];return o.push(e.substring(0,r)),Array.isArray(n)?n.forEach(((e,t)=>{o.push(e),t+1{"use strict";n.d(t,{X:()=>d,e:()=>u});var r=n(6137),o=n(5806),i=n(2340),a=n(8974),s=n(8035);function d(e,t,n,r,i){const{text:d,entities:u}=e.content.text||{};if(!d){const t=(0,o.UD)(e);return t?[(0,s.Z)(t,i)]:void 0}return(0,a.H)((0,s.Z)(d,i),u,t,n,void 0,e.id,r)}function u(e,t){let n=arguments.length>2&&void 0!==arguments[2]&&arguments[2],a=arguments.length>3?arguments[3]:void 0,u=arguments.length>4&&void 0!==arguments[4]?arguments[4]:o.lN;const{entities:c}=t.content.text||{},l=null==c?void 0:c.some((e=>e.type===r.Vv.Spoiler));if(!l){const r=(0,s.Z)((0,o.MK)(e,t,n),u);return a?(0,i.Z)(r,["emoji","highlight"],{highlight:a}):(0,i.Z)(r)}const f=!n&&(0,o.Eb)(t),h=f?`${f} `:"",g=d(t,a,void 0,!0,u),p=(0,o.Kk)(e,t,g);return[h,...Array.isArray(p)?p:[p]].filter(Boolean)}},2340:(e,t,n)=>{"use strict";n.d(t,{Z:()=>g});var r=n(4050),o=n(3681),i=n(3716),a=n(7361),s=n(4284),d=n(6752),u=n(782),c=n(7373),l=n(88);const f=/^[\d\wа-яё]$/i,h=/(\*\*|__).+?\1/g;function g(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:["emoji"],n=arguments.length>2?arguments[2]:void 0;return"string"!=typeof e?[e]:(0,u.oA)(t.reduce(((e,t)=>{switch(t){case"escape_html":return p(e);case"hq_emoji":return o.Z.lastIndex=0,m(e,"big","jsx");case"emoji":return o.Z.lastIndex=0,m(e,"small","jsx");case"emoji_html":return o.Z.lastIndex=0,m(e,"small","html");case"br":return v(e,"jsx");case"br_html":return v(e,"html");case"highlight":return y(e,n.highlight);case"links":return w(e);case"simple_markdown":return I(e,"jsx");case"simple_markdown_html":return I(e,"html")}return e}),[e]))}function p(e){const t=document.createElement("div");return e.reduce(((e,n)=>"string"!=typeof n?(e.push(n),e):(t.innerText=n,e.push(t.innerHTML),e)),[])}function m(e,t,n){return a.op?e:e.reduce(((e,i)=>{if("string"!=typeof i)return e.push(i),e;const a=(i=(0,s.g6)(i)).split(o.Z),u=i.match(o.Z)||[];return e.push(a[0]),u.reduce(((e,i,u)=>{const c=(0,s.U_)((0,o.l)(i));if(!c)return e;const l=(0,d.Z)("emoji","small"===t&&"emoji-small");"jsx"===n&&e.push(r.ZP.createElement("img",{className:l,src:`./img-apple-${"big"===t?"160":"64"}/${c}.png`,alt:i})),"html"===n&&e.push(`${i}`);const f=2*u+2;return a[f]&&e.push(a[f]),e}),e)}),[])}function v(e,t){return e.reduce(((e,n)=>{if("string"!=typeof n)return e.push(n),e;const o=n.split(/\r\n|\r|\n/g).reduce(((e,n,o,i)=>{const a=n.trimLeft(),s=n.length-a.length;return e.push(String.fromCharCode(160).repeat(s)+a),o!==i.length-1&&e.push("jsx"===t?r.ZP.createElement("br",null):"
"),e}),[]);return[...e,...o]}),[])}function y(e,t){return e.reduce(((e,n)=>{if("string"!=typeof n||!t)return e.push(n),e;const o=n.toLowerCase(),i=o.indexOf(t.toLowerCase()),a=o[i+t.length];if(i<0||a&&a.match(f))return e.push(n),e;const s=[];return s.push(n.substring(0,i)),s.push(r.ZP.createElement("span",{className:"matching-text-highlight"},n.substring(i,i+t.length))),s.push(n.substring(i+t.length)),[...e,...s]}),[])}const b=new RegExp(`${i.FM}|${i.uW}`,"ig");function w(e){return e.reduce(((e,t)=>{if("string"!=typeof t)return e.push(t),e;const n=t.match(b);if(!n||!n.length)return e.push(t),e;const o=[];let i=n.shift(),a=0;for(;i;){const e=t.indexOf(i,a);o.push(t.substring(a,e)),i.startsWith("@")?o.push(r.ZP.createElement(c.Z,{username:i},i)):(i.endsWith("?")&&(i=i.slice(0,i.length-1)),o.push(r.ZP.createElement(l.Z,{text:i,url:i}))),a=e+i.length,i=n.shift()}return o.push(t.substring(a)),[...e,...o]}),[])}function I(e,t){return e.reduce(((e,n)=>{if("string"!=typeof n)return e.push(n),e;const o=n.split(h),i=n.match(h)||[];return e.push(o[0]),i.reduce(((e,n,i)=>{"jsx"===t?e.push(n.startsWith("**")?r.ZP.createElement("b",null,n.replace(/\*\*/g,"")):r.ZP.createElement("i",null,n.replace(/__/g,""))):e.push(n.startsWith("**")?`${n.replace(/\*\*/g,"")}`:`${n.replace(/__/g,"")}`);const a=2*i+2;return o[a]&&e.push(o[a]),e}),e)}),[])}},8974:(e,t,n)=>{"use strict";n.d(t,{z:()=>v,H:()=>m});var r=n(4050),o=n(3555),i=n(6137),a=n(2340),s=n(4319),d=n(711),u=n(7373),c=n(88),l=n(6752),f=n(706);const h=new Map,g=(0,l.y)("Spoiler"),p=(0,r.X$)((e=>{let{children:t,messageId:n}=e;const o=(0,r.sO)(null),[i,a,s]=(0,f.Z)(),d=(0,r.I4)((e=>{var t;e.preventDefault(),e.stopPropagation(),null===(t=h.get(n))||void 0===t||t.forEach((e=>e.reveal()));const r=o.current.innerText.length,i=1e3*Math.round(r/23),a=Math.max(5e3,Math.min(i,6e4));setTimeout((()=>{var e;null===(e=h.get(n))||void 0===e||e.forEach((e=>e.conceal())),s()}),a)}),[s,n]);return(0,r.d4)((()=>{if(n)return h.has(n)?h.get(n).push({reveal:a,conceal:s}):h.set(n,[{reveal:a,conceal:s}]),()=>{h.delete(n)}}),[s,d,i,n,a]),r.ZP.createElement("span",{className:g("&",!i&&"concealed",!i&&Boolean(n)&&"animated"),onClick:n&&!i?d:void 0},r.ZP.createElement("span",{className:g("content"),ref:o},t))}));function m(e,t,n,o,s,d,l){if(!t||!t.length)return y(e,n,o,s,l);const f=[];let h=!1;const g=function(e){const t=new Set,n=[];return e.forEach(((r,o)=>{if(t.has(o))return;const i=b(r,o,e,t);i&&(i.organizedIndexes.forEach((e=>{t.add(e)})),n.push(i))})),n}(t);function m(t,f,g,v){const b=[],{entity:E,nestedEntities:M}=g,{offset:P,length:A,type:k}=E;let _=e.substring(t,P);const x=_.length;_&&(h&&_.length>0&&"\n"===_[0]&&(_=_.substr(1),h=!1),_&&b.push(...y(_,n,o,s,l)));const T=t+x,N=T+A;let O=e.substring(P,P+A);const L=[];if(h&&O.length>0&&"\n"===O[0]&&(O=O.substr(1),h=!1),k===i.Vv.Pre&&(h=!0),M.length){let e=T;M.forEach(((t,n)=>{const{renderResult:r,entityEndIndex:o}=m(e,N,t,n===M.length-1);L.push(...r),e=o}))}const D=s?function(e,t,n){const r="string"==typeof t&&t,o=n.length?n.join(""):(0,a.Z)(t,["escape_html","emoji_html","br_html"]).join("");if(!r)return o;switch(e.type){case i.Vv.Bold:return`${o}`;case i.Vv.Italic:return`${o}`;case i.Vv.Underline:return`${o}`;case i.Vv.Code:return`${o}`;case i.Vv.Pre:return`\`\`\`
${o}
\`\`\``;case i.Vv.Strike:return`${o}`;case i.Vv.MentionName:return`${o}`;case i.Vv.Url:case i.Vv.TextUrl:return`${o}`;case i.Vv.Spoiler:return`${o}`;default:return o}}(E,O,L):function(e,t,n,o,a,s){const d="string"==typeof t&&t,l=n.length?n:t;function f(){return y(l,o,void 0,void 0,s)}if(!d)return f();if(s){const t=f();return e.type===i.Vv.Spoiler?r.ZP.createElement(p,null,t):t}switch(e.type){case i.Vv.Bold:return r.ZP.createElement("strong",null,f());case i.Vv.Blockquote:return r.ZP.createElement("blockquote",null,f());case i.Vv.BotCommand:return r.ZP.createElement("a",{onClick:I,className:"text-entity-link",dir:"auto"},f());case i.Vv.Hashtag:case i.Vv.Cashtag:return r.ZP.createElement("a",{onClick:C,className:"text-entity-link",dir:"auto"},f());case i.Vv.Code:return r.ZP.createElement("code",{className:"text-entity-code",onClick:S,role:"textbox",tabIndex:0},f());case i.Vv.Email:return r.ZP.createElement("a",{href:`mailto:${d}`,target:"_blank",rel:"noopener noreferrer",className:"text-entity-link",dir:"auto"},f());case i.Vv.Italic:return r.ZP.createElement("em",null,f());case i.Vv.MentionName:return r.ZP.createElement(u.Z,{userId:e.userId},f());case i.Vv.Mention:return r.ZP.createElement(u.Z,{username:d},f());case i.Vv.Phone:return r.ZP.createElement("a",{href:`tel:${d}`,className:"text-entity-link",dir:"auto"},f());case i.Vv.Pre:return r.ZP.createElement("pre",{className:"text-entity-pre"},f());case i.Vv.Strike:return r.ZP.createElement("del",null,f());case i.Vv.TextUrl:case i.Vv.Url:return r.ZP.createElement(c.Z,{url:w(d,e),text:d},f());case i.Vv.Underline:return r.ZP.createElement("ins",null,f());case i.Vv.Spoiler:return r.ZP.createElement(p,{messageId:a},f());default:return f()}}(E,O,L,n,d,l);if(Array.isArray(D)?b.push(...D):b.push(D),v&&N0&&"\n"===t[0]&&(t=t.substring(1)),t&&b.push(...y(t,n,o,s,l))}return{renderResult:b,entityEndIndex:N}}let v=0;return g.forEach(((t,n)=>{const{renderResult:r,entityEndIndex:o}=m(v,e.length,t,n===g.length-1);f.push(...r),v=o})),f}function v(e){const{text:t,entities:n}=e||{};if(!t)return"";const r=m(t,n,void 0,void 0,!0);return Array.isArray(r)?r.join(""):r}function y(e,t,n,r,o){if(Array.isArray(e)){const i=[];return e.forEach((e=>{i.push(...y(e,t,n,r,o))})),i}if(r)return(0,a.Z)(e,["escape_html","emoji_html","br_html"]);const i=[n?"hq_emoji":"emoji"];return o||i.push("br"),t?(0,a.Z)(e,i.concat("highlight"),{highlight:t}):(0,a.Z)(e,i)}function b(e,t,n,r){const{offset:o,length:i}=e,a=new Set([t]);if(r.has(t))return;const s=[];return n.filter(((e,n)=>n>t&&e.offset>=o&&e.offsetb(e,n.indexOf(e),n,r))).filter(Boolean).forEach((e=>{let t=!1;e.organizedIndexes.forEach((e=>{t||a.has(e)||(t=!0),a.add(e)})),t&&s.push(e)})),{entity:e,organizedIndexes:a,nestedEntities:s}}function w(e,t){const{type:n,url:r}=t;return n===i.Vv.TextUrl&&r?r:e}function I(e){(0,o.Sv)().sendBotCommand({command:e.currentTarget.innerText})}function C(e){(0,o.Sv)().setLocalTextSearchQuery({query:e.currentTarget.innerText}),(0,o.Sv)().searchTextMessagesLocal()}function S(e){(0,s.TE)(e.currentTarget.innerText),(0,o.Sv)().showNotification({message:(0,d.i0)("TextCopied")})}},386:(e,t,n)=>{"use strict";n.d(t,{b:()=>a,q:()=>i});var r=n(3716),o=n(7361);function i(e){let t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];o.cj||!document.activeElement||document.activeElement.id!==r.R2||!t&&e.target!==e.currentTarget||e.preventDefault()}function a(e){i(e,!0)}},7373:(e,t,n)=>{"use strict";n.d(t,{Z:()=>a});var r=n(4050),o=n(3555),i=n(1192);const a=(0,o.c$)(((e,t)=>{let{userId:n}=t;return{userOrChat:n?(0,i.dy)(e,n):void 0}}))((e=>{let{username:t,userOrChat:n,children:i}=e;const{openChat:a,openChatByUsername:s}=(0,o.Sv)();return r.ZP.createElement("a",{onClick:()=>{n?a({id:n.id}):t&&s({username:t.substring(1)})},className:"text-entity-link",dir:"auto"},i)}))},231:(e,t,n)=>{"use strict";n.d(t,{Z:()=>s});var r=n(4050),o=n(6752),i=n(9204),a=n(8512);const s=e=>{let{ref:t,type:n="button",id:s,onClick:d,onContextMenu:u,onMouseDown:c,onMouseEnter:l,onMouseLeave:f,onFocus:h,children:g,size:p="default",color:m="primary",backgroundImage:v,className:y,round:b,pill:w,fluid:I,isText:C,isLoading:S,ariaLabel:E,ariaControls:M,hasPopup:P,href:A,download:k,disabled:_,ripple:x,faded:T,tabIndex:N,isRtl:O,withClickPropagation:L}=e,D=(0,r.sO)(null);t&&(D=t);const[B,R]=(0,r.eJ)(!1),F=(0,o.Z)("Button",y,p,m,b&&"round",w&&"pill",I&&"fluid",_&&"disabled",C&&"text",S&&"loading",x&&"has-ripple",T&&"faded",B&&"clicked",v&&"with-image"),$=(0,r.I4)((e=>{!_&&d&&d(e),R(!0),setTimeout((()=>{R(!1)}),400)}),[_,d]),Z=(0,r.I4)((e=>{L||e.preventDefault(),!_&&c&&c(e)}),[c,_,L]);return A?r.ZP.createElement("a",{ref:D,id:s,className:F,href:A,title:E,download:k,tabIndex:N,dir:O?"rtl":void 0,"aria-label":E,"aria-controls":M},g,!_&&x&&r.ZP.createElement(a.Z,null)):r.ZP.createElement("button",{ref:D,id:s,type:n,className:F,onClick:$,onContextMenu:u,onMouseDown:Z,onMouseEnter:l&&!_?l:void 0,onMouseLeave:f&&!_?f:void 0,onFocus:h&&!_?h:void 0,"aria-label":E,"aria-controls":M,"aria-haspopup":P,title:E,tabIndex:N,dir:O?"rtl":void 0,style:v?`background-image: url(${v})`:void 0},S?r.ZP.createElement("div",null,r.ZP.createElement("span",{dir:O?"auto":void 0},"Please wait..."),r.ZP.createElement(i.Z,{color:C?"blue":"white"})):g,!_&&x&&r.ZP.createElement(a.Z,null))}},4605:(e,t,n)=>{"use strict";n.d(t,{Z:()=>d});var r=n(4050),o=n(6752),i=n(9107),a=n(2340),s=n(9204);const d=(0,r.X$)((e=>{let{id:t,name:n,value:d,label:u,subLabel:c,checked:l,tabIndex:f,disabled:h,round:g,blocking:p,isLoading:m,onChange:v,onCheck:y}=e;const b=(0,i.Z)(),w=(0,r.I4)((e=>{v&&v(e),y&&y(e.currentTarget.checked)}),[v,y]),I=(0,o.Z)("Checkbox",h&&"disabled",g&&"round",m&&"loading",p&&"blocking");return r.ZP.createElement("label",{className:I,dir:b.isRtl?"rtl":void 0},r.ZP.createElement("input",{type:"checkbox",id:t,name:n,value:d,checked:l,disabled:h,tabIndex:f,onChange:w}),r.ZP.createElement("div",{className:"Checkbox-main"},r.ZP.createElement("span",{className:"label",dir:"auto"},(0,a.Z)(u)),c&&r.ZP.createElement("span",{className:"subLabel",dir:"auto"},(0,a.Z)(c))),m&&r.ZP.createElement(s.Z,null))}))},3106:(e,t,n)=>{"use strict";n.d(t,{Z:()=>i});var r=n(4050),o=n(2328);const i=e=>{let{trigger:t,className:n,children:i,positionX:a="left",positionY:s="top",footer:d,forceOpen:u,onOpen:c,onClose:l}=e;const f=(0,r.sO)(null),h=(0,r.sO)(null),[g,p]=(0,r.eJ)(!1),m=(0,r.I4)((()=>{p(!1),l&&l()}),[l]);return r.ZP.createElement("div",{ref:h,className:`DropdownMenu ${n||""}`,onKeyDown:e=>{const t=f.current;if(!g||40!==e.keyCode||!t)return;const n=document.activeElement,r=Array.from(t.children);n&&-1!==r.indexOf(n)||r[0].focus()}},t({onTrigger:()=>{p(!g),g?l&&l():c&&c()},isOpen:g}),r.ZP.createElement(o.Z,{ref:f,containerRef:h,isOpen:g||Boolean(u),className:n||"",positionX:a,positionY:s,footer:d,autoClose:!0,onClose:m,shouldSkipTransition:u},i))}},7687:(e,t,n)=>{"use strict";n.d(t,{Z:()=>a});var r=n(4050),o=n(6752),i=n(9107);const a=(0,r.X$)((e=>{let{ref:t,id:n,className:a,value:s,label:d,error:u,success:c,disabled:l,readOnly:f,placeholder:h,autoComplete:g,inputMode:p,maxLength:m,tabIndex:v,onChange:y,onInput:b,onKeyPress:w,onKeyDown:I,onBlur:C,onPaste:S}=e;const E=(0,i.Z)(),M=u||c||d,P=(0,o.Z)("input-group",s&&"touched",u?"error":c&&"success",l&&"disabled",f&&"disabled",M&&"with-label",a);return r.ZP.createElement("div",{className:P,dir:E.isRtl?"rtl":void 0},r.ZP.createElement("input",{ref:t,className:"form-control",type:"text",id:n,dir:"auto",value:s||"",tabIndex:v,placeholder:h,maxLength:m,autoComplete:g,inputMode:p,disabled:l,readOnly:f,onChange:y,onInput:b,onKeyPress:w,onKeyDown:I,onBlur:C,onPaste:S,"aria-label":M}),M&&r.ZP.createElement("label",{htmlFor:n},M))}))},8033:(e,t,n)=>{"use strict";n.d(t,{Z:()=>i});var r=n(4050),o=n(6752);const i=e=>{let{children:t,className:n,isRtl:i,onClick:a}=e;const s=(0,r.I4)((e=>{e.preventDefault(),a(e)}),[a]);return r.ZP.createElement("a",{href:"#",className:(0,o.Z)("Link",n),dir:i?"rtl":"auto",onClick:a?s:void 0},t)}},4288:(e,t,n)=>{"use strict";n.d(t,{Z:()=>a});var r=n(4050),o=n(9204),i=n(6752);const a=(0,r.X$)((e=>{let{color:t="blue",backgroundColor:n,onClick:a}=e;return r.ZP.createElement("div",{className:(0,i.Z)("Loading",a&&"interactive"),onClick:a},r.ZP.createElement(o.Z,{color:t,backgroundColor:n}))}))},2328:(e,t,n)=>{"use strict";n.d(t,{Z:()=>g});var r=n(4050),o=n(1212),i=n(2313),a=n(8758),s=n(274),d=n(3989),u=n(6752),c=n(8674),l=n(6590),f=n(386),h=n(7361);const g=e=>{let{ref:t,containerRef:n,isOpen:g,id:p,className:m,style:v,bubbleStyle:y,ariaLabelledBy:b,children:w,transformOriginX:I,transformOriginY:C,positionX:S="left",positionY:E="top",autoClose:M=!1,footer:P,noCloseOnBackdrop:A=!1,noCompact:k,onCloseAnimationEnd:_,onClose:x,onMouseEnter:T,onMouseLeave:N,shouldSkipTransition:O}=e,L=(0,r.sO)(null);t&&(L=t);const D=n||L,{transitionClassNames:B}=(0,o.Z)(g,_,O,void 0,O);(0,r.d4)((()=>g&&x?(0,d.Z)(x):void 0),[g,x]),(0,l.ZP)(g,x,void 0,void 0,M),(0,s.Z)((e=>{let[t]=e;(g||!g&&!0===t)&&(0,c.YW)(200)}),[g]);const R=(0,i.Z)(L,g,M?x:void 0,void 0,!0);(0,a.Z)(g,D,A?void 0:x);const F=(0,u.Z)("bubble menu-container custom-scroll",E,S,P&&"with-footer",B),$=void 0!==C?`${C}px`:void 0,Z=void 0!==I?`${I}px`:void 0;return r.ZP.createElement("div",{id:p,className:(0,u.Z)("Menu no-selection",!k&&h.FW&&"compact",!h.gk&&"no-blur",m),style:v,"aria-labelledby":b,role:b?"menu":void 0,onKeyDown:g?R:void 0,onMouseEnter:T,onMouseLeave:g?N:void 0},g&&r.ZP.createElement("div",{className:"backdrop",onMouseDown:f.b}),r.ZP.createElement("div",{ref:L,className:F,style:`transform-origin: ${Z||S} ${$||E};${y||""}`,onClick:M?x:void 0},w,P&&r.ZP.createElement("div",{className:"footer"},P)))}},8964:(e,t,n)=>{"use strict";n.d(t,{Z:()=>s});var r=n(4050),o=n(6752),i=n(9107),a=n(7361);const s=e=>{const{icon:t,className:n,children:s,onClick:d,href:u,download:c,disabled:l,destructive:f,ariaLabel:h}=e,g=(0,i.Z)(),p=(0,r.I4)((e=>{if(l||!d)return e.stopPropagation(),void e.preventDefault();d(e)}),[l,d]),m=(0,r.I4)((e=>{if(13===e.keyCode||32===e.keyCode)return l||!d?(e.stopPropagation(),void e.preventDefault()):void d(e)}),[l,d]),v=(0,o.Z)("MenuItem",n,l&&"disabled",f&&"destructive",a.FW&&"compact"),y=r.ZP.createElement(r.ZP.Fragment,null,t&&r.ZP.createElement("i",{className:`icon-${t}`,"data-char":t.startsWith("char-")?t.replace("char-",""):void 0}),s);return u?r.ZP.createElement("a",{tabIndex:0,className:v,href:u,download:c,"aria-label":h,title:h,target:u.startsWith(window.location.origin)?"_self":"_blank",rel:"noopener noreferrer",dir:g.isRtl?"rtl":void 0,onClick:d},y):r.ZP.createElement("div",{role:"button",tabIndex:0,className:v,onClick:p,onKeyDown:m,"aria-label":h,title:h,dir:g.isRtl?"rtl":void 0},y)}},8512:(e,t,n)=>{"use strict";n.d(t,{Z:()=>i});var r=n(4050),o=n(9118);const i=(0,r.X$)((()=>{const[e,t]=(0,r.eJ)([]),n=(0,r.Ye)((()=>(0,o.Ds)((()=>{t([])}),700,!1)),[]),i=(0,r.I4)((r=>{if(0!==r.button)return;const o=r.currentTarget,i=o.getBoundingClientRect(),a=o.offsetWidth/2;t([...e,{x:r.clientX-i.x-a/2,y:r.clientY-i.y-a/2,size:a}]),requestAnimationFrame((()=>{n()}))}),[e,n]);return r.ZP.createElement("div",{className:"ripple-container",onMouseDown:i},e.map((e=>{let{x:t,y:n,size:o}=e;return r.ZP.createElement("span",{style:`left: ${t}px; top: ${n}px; width: ${o}px; height: ${o}px;`})})))}))},9204:(e,t,n)=>{"use strict";n.d(t,{Z:()=>i});var r=n(4050),o=n(6752);const i=e=>{let{color:t="blue",backgroundColor:n}=e;return r.ZP.createElement("div",{className:(0,o.Z)("Spinner",t,n&&"with-background",`bg-${n}`)},r.ZP.createElement("div",null))}},3716:(e,t,n)=>{"use strict";n.d(t,{$E:()=>ke,$O:()=>Je,AE:()=>ae,AJ:()=>se,AR:()=>q,Bg:()=>Ye,CX:()=>z,Cg:()=>s,Cy:()=>b,DC:()=>be,DU:()=>He,Db:()=>Xe,EG:()=>qe,EN:()=>O,FD:()=>Ue,FM:()=>Re,FS:()=>Ze,FV:()=>Ve,Hk:()=>D,It:()=>nt,Ji:()=>o,K2:()=>Ce,K7:()=>he,LH:()=>st,Mw:()=>ye,Nf:()=>ze,Ng:()=>Ne,Ov:()=>N,PM:()=>Pe,Q:()=>ve,QU:()=>X,Qx:()=>Z,R2:()=>J,Rk:()=>y,Ro:()=>it,S:()=>d,SG:()=>I,Ti:()=>u,Uh:()=>p,V$:()=>ue,VC:()=>Be,Vk:()=>B,Vv:()=>rt,Vx:()=>h,WS:()=>We,Y:()=>Te,Y7:()=>we,YQ:()=>_,ZT:()=>a,_m:()=>te,aC:()=>at,aw:()=>je,b6:()=>H,bK:()=>ce,bM:()=>Se,b_:()=>f,by:()=>M,ck:()=>le,dI:()=>De,eA:()=>l,eM:()=>i,ee:()=>E,fK:()=>de,fo:()=>S,g:()=>ot,g$:()=>$e,gJ:()=>v,hT:()=>k,iC:()=>r,jT:()=>ee,jV:()=>Ae,kU:()=>xe,ks:()=>ne,ku:()=>Ee,l3:()=>re,lF:()=>C,lO:()=>m,lW:()=>w,lo:()=>A,mU:()=>et,mo:()=>R,mw:()=>U,nY:()=>Y,oB:()=>j,oG:()=>Oe,o_:()=>K,ou:()=>c,p3:()=>tt,pR:()=>_e,pn:()=>L,qU:()=>F,qp:()=>me,rO:()=>ie,rS:()=>x,r_:()=>G,s2:()=>Q,sR:()=>Ke,sd:()=>g,t4:()=>Ge,t_:()=>T,uW:()=>Fe,u_:()=>oe,ul:()=>$,vi:()=>Qe,w7:()=>ge,wG:()=>Le,xS:()=>W,xn:()=>fe,yK:()=>Ie,z7:()=>pe,zq:()=>Me,zy:()=>V});const r="Telegram WebZ",o="1.39.1",i=!1,a=!1,s=!1,d="Shoot!\nSomething went wrong, please see the error details in Dev Tools Console.",u="Telegram",c=" [Inactive]",l=!1,f="user_auth",h="GramJs:sessionId",g=!1,p="tt-global-state",m=500,v=200,y=30,b=!1,w="tt-media",I="tt-media-avatars",C="tt-media-progressive",S="tt-custom-bg",E="tt-lang-packs-v8",M=[1,5,10,50,100,500],P="undefined"!=typeof window&&window.innerHeight>=900,A=1,k=P?60:40,_=2*k,x=72,T=P?30:25,N=100,O=42,L=42,D=20,B=30,R=200,F=500,$=20,Z=1,U=1,j=0,V=2,z=V,W=16,H=17,q=15,G=1e4,K=3e3,J="editable-message-text",Y="editable-message-text-modal",Q="data-has-custom-appendix",X=1440,ee=1150,te=1275,ne=925,re=600,oe=950,ie=450,ae=1e9,se="0",de=100,ue=1500,ce=250,le=600,fe=500,he=(Math.round((ce+le)/2),new Set(["newMessage","newScheduledMessage","deleteMessages","deleteScheduledMessages","deleteHistory"]),13),ge=11,pe=160,me=120,ve=64,ye=48,be=32,we=64,Ie=64,Ce=160,Se=140,Ee=100,Me=100,Pe=140,Ae=140,ke="NO_STICKER_SET",_e="en",xe=200,Te=450,Ne="video/quicktime",Oe=new Set(["image/png","image/gif","image/jpeg"]),Le=new Set(["video/mp4"]),De=new Set([...Oe,...Le]),Be="The message is not supported on this version of Telegram.",Re="((ftp|https?):\\/\\/)?((www\\.)?[-a-zA-Z0-9@:%._+~#=]{1,256}\\.[a-zA-Z0-9()]{1,63})\\b([-a-zA-Z0-9()@:%_+.~#?&/=]*)",Fe="(@[\\w\\d_-]+)",$e=/^tg:(\/\/)?([?=&\d\w_-]+)?/gm,Ze=/^(?:https?:\/\/)?(?:t\.me\/)/gm,Ue=new Set(["AU","BD","CA","CO","EG","HN","IE","IN","JO","MX","MY","NI","NZ","PH","PK","SA","SV","US"]),je="777000",Ve="1271266957",ze=0,We=1,He=10,qe=5,Ge=2147483646,Ke="en",Je="android",Ye=["android","ios","tdesktop","macos"],Qe="TelegramTips",Xe=["ar","pt-br","id","it","ko","ms","pl","es","tr"],et="https://bugs.telegram.org/?tag_ids=41&sort=time",tt="#A2AF8E",nt="#0F0F0F",rt="#0a0a0a8c",ot="rgba(90, 110, 70, 0.6)",it=100,at=100*it,st=!1},5456:(e,t,n)=>{"use strict";var r=n(3555),o=n(1226),i=n(3716),a=n(7361),s=n(8406),d=n(9524),u=n(7358),c=n(3100),l=n(1622);(0,r.iw)("initApi",(async(e,t)=>{i.Cg||(await(0,c.Qw)(),(0,c.f3)()),(0,o.g8)(t.apiUpdate,{userAgent:navigator.userAgent,platform:a.Lt,sessionData:(0,c.K8)(),isTest:window.location.search.includes("test"),isMovSupported:a.pA,isWebmSupported:a.Hh})})),(0,r.iw)("setAuthPhoneNumber",((e,t,n)=>{const{phoneNumber:r}=n;return(0,o.t9)("provideAuthPhoneNumber",r.replace(/[^\d]/g,"")),{...e,authIsLoading:!0,authError:void 0}})),(0,r.iw)("setAuthCode",((e,t,n)=>{const{code:r}=n;return(0,o.t9)("provideAuthCode",r),{...e,authIsLoading:!0,authError:void 0}})),(0,r.iw)("setAuthPassword",((e,t,n)=>{const{password:r}=n;return(0,o.t9)("provideAuthPassword",r),{...e,authIsLoading:!0,authError:void 0}})),(0,r.iw)("uploadProfilePhoto",((e,t,n)=>{const{file:r}=n;(0,o.t9)("uploadProfilePhoto",r)})),(0,r.iw)("signUp",((e,t,n)=>{const{firstName:r,lastName:i}=n;return(0,o.t9)("provideAuthRegistration",{firstName:r,lastName:i}),{...e,authIsLoading:!0,authError:void 0}})),(0,r.iw)("returnToAuthPhoneNumber",(e=>((0,o.t9)("restartAuth"),{...e,authError:void 0}))),(0,r.iw)("goToAuthQrCode",(e=>((0,o.t9)("restartAuthWithQr"),{...e,authIsLoadingQrCode:!0,authError:void 0}))),(0,r.iw)("saveSession",((e,t,n)=>{const{sessionData:r}=n;r?(0,c.wX)(n.sessionData,e.currentUserId):(0,c.jv)()})),(0,r.iw)("signOut",(async(e,t,n)=>{try{await(0,s.r1)(),await(0,o.t9)("destroy"),await(0,l.IT)(!1)}catch(e){}(0,r.Sv)().reset(),null!=n&&n.forceInitApi&&(0,r.Sv)().initApi()})),(0,r.iw)("reset",(()=>{(0,c.jv)(),d.clear(i.lW),d.clear(i.SG),d.clear(i.lF),d.clear(i.fo);const e=i.ee.replace(/\d+$/,""),t=(i.ee.match(/\d+$/)||[0])[0];for(let n=0;n{(0,o.t9)("disconnect")})),(0,r.iw)("loadNearestCountry",(async e=>{if("connectionStateReady"!==e.connectionState)return;const t=await(0,o.t9)("fetchNearestCountry");return{...(0,r.Rd)(),authNearestCountry:t}})),(0,r.iw)("setDeviceToken",((e,t,n)=>({...e,push:{deviceToken:n,subscribedAt:Date.now()}}))),(0,r.iw)("deleteDeviceToken",(e=>({...e,push:void 0})))},1371:(e,t,n)=>{"use strict";var r=n(3555),o=n(1713),i=n(3716),a=n(1226),s=n(782),d=n(8406),u=n(711),c=n(1192),l=n(5406),f=n(5806);function h(e,t){let{visibility:n,allowedIds:r,deniedIds:o}=t;const{users:{byId:i},chats:{byId:a}}=e,s={visibility:n};let d,u;const c=e=>{if(!(0,f.YC)(e))return;const{id:t,accessHash:n}=i[e]||{};return t?{id:t,accessHash:n}:void 0},l=e=>{if((0,f.YC)(e))return;const t=a[e];return t?{id:t.id}:void 0};return"contacts"!==n&&"nobody"!==n||(d=r.map(c).filter(Boolean),u=r.map(l).filter(Boolean),d.length>0&&(s.allowedUsers=d),u.length>0&&(s.allowedChats=u)),"everybody"!==n&&"contacts"!==n||(d=o.map(c).filter(Boolean),u=o.map(l).filter(Boolean),d.length>0&&(s.blockedUsers=d),u.length>0&&(s.blockedChats=u)),s}(0,r.iw)("updateProfile",(async(e,t,n)=>{const{photo:i,firstName:s,lastName:d,bio:u,username:f}=n,{currentUserId:h}=e;if(h){if((0,r.R3)({...(0,r.Rd)(),profileEdit:{progress:o.rN.InProgress}}),i&&await(0,a.t9)("updateProfilePhoto",i),(s||d||u)&&await(0,a.t9)("updateProfile",{firstName:s,lastName:d,about:u})){e=(0,r.Rd)();const t=h&&(0,c.dy)(e,h);t&&(0,r.R3)((0,l.Nq)(e,t.id,{firstName:s,lastName:d,fullInfo:{...t.fullInfo,bio:u}}))}return f&&await(0,a.t9)("updateUsername",f)&&h&&(0,r.R3)((0,l.Nq)((0,r.Rd)(),h,{username:f})),{...(0,r.Rd)(),profileEdit:{progress:o.rN.Complete}}}})),(0,r.iw)("checkUsername",(async(e,t,n)=>{const{username:i}=n;if(e.profileEdit&&e.profileEdit.progress===o.rN.InProgress)return;(0,r.R3)({...e,profileEdit:{progress:e.profileEdit?e.profileEdit.progress:o.rN.Idle,isUsernameAvailable:void 0}});const s=await(0,a.t9)("checkUsername",i);return e=(0,r.Rd)(),{...e,profileEdit:{...e.profileEdit,isUsernameAvailable:s}}})),(0,r.iw)("loadWallpapers",(async()=>{const e=await(0,a.t9)("fetchWallpapers");if(!e)return;const t=(0,r.Rd)();return{...t,settings:{...t.settings,loadedWallpapers:e.wallpapers}}})),(0,r.iw)("uploadWallpaper",(async(e,t,n)=>{const i=n,s=URL.createObjectURL(i);(0,r.R3)({...e,settings:{...e.settings,loadedWallpapers:[{slug:o.mp,document:{fileName:"",size:i.size,mimeType:i.type,previewBlobUrl:s}},...e.settings.loadedWallpapers||[]]}});const d=await(0,a.t9)("uploadWallpaper",i);if(!d)return;const{wallpaper:u}=d;if(!(e=(0,r.Rd)()).settings.loadedWallpapers)return;const c=e.settings.loadedWallpapers[0];if(!c||c.slug!==o.mp)return;const l={...u,document:{...u.document,previewBlobUrl:s}};return{...e,settings:{...e.settings,loadedWallpapers:[l,...e.settings.loadedWallpapers.slice(1)]}}})),(0,r.iw)("loadBlockedContacts",(async e=>{var t,n;const o=await(0,a.t9)("fetchBlockedContacts");if(o)return e=(0,r.Rd)(),null!==(t=o.users)&&void 0!==t&&t.length&&(e=(0,l.Sh)(e,(0,s.ee)(o.users,"id"))),null!==(n=o.chats)&&void 0!==n&&n.length&&(e=(0,l.GL)(e,(0,s.ee)(o.chats,"id"))),{...e,blocked:{...e.blocked,ids:[...e.blocked.ids||[],...o.blockedIds],totalCount:o.totalCount}}})),(0,r.iw)("blockContact",(async(e,t,n)=>{const{contactId:o,accessHash:i}=n;if(await(0,a.t9)("blockContact",o,i))return(0,l.O4)((0,r.Rd)(),o)})),(0,r.iw)("unblockContact",(async(e,t,n)=>{const{contactId:o}=n;let i;if((0,f.YC)(o)){const t=(0,c.dy)(e,o);if(!t)return;i=t.accessHash}if(await(0,a.t9)("unblockContact",o,i))return(0,l.rB)((0,r.Rd)(),o)})),(0,r.iw)("loadAuthorizations",(async()=>{const e=await(0,a.t9)("fetchAuthorizations");if(e)return{...(0,r.Rd)(),activeSessions:e}})),(0,r.iw)("terminateAuthorization",(async(e,t,n)=>{const{hash:o}=n;if(await(0,a.t9)("terminateAuthorization",o))return e=(0,r.Rd)(),{...e,activeSessions:e.activeSessions.filter((e=>e.hash!==o))}})),(0,r.iw)("terminateAllAuthorizations",(async e=>{if(await(0,a.t9)("terminateAllAuthorizations"))return e=(0,r.Rd)(),{...e,activeSessions:e.activeSessions.filter((e=>e.isCurrent))}})),(0,r.iw)("loadNotificationExceptions",(async e=>{const{serverTimeOffset:t}=e,n=await(0,a.t9)("fetchNotificationExceptions",{serverTimeOffset:t});if(n)return(0,l.aJ)((0,r.Rd)(),n)})),(0,r.iw)("loadNotificationSettings",(async e=>{const{serverTimeOffset:t}=e,n=await(0,a.t9)("fetchNotificationSettings",{serverTimeOffset:t});if(n)return(0,l.BI)((0,r.Rd)(),n)})),(0,r.iw)("updateNotificationSettings",(async(e,t,n)=>{const{peerType:o,isSilent:i,shouldShowPreviews:s}=n;if(await(0,a.t9)("updateNotificationSettings",o,{isSilent:i,shouldShowPreviews:s}))return(0,l.HN)((0,r.Rd)(),o,i,s)})),(0,r.iw)("updateWebNotificationSettings",((e,t,n)=>{(0,r.R3)((0,l.BI)(e,n));const{hasPushNotifications:o,hasWebNotifications:i}=e.settings.byKey;i&&o?(0,d.Ld)():(0,d.r1)()})),(0,r.iw)("updateContactSignUpNotification",(async(e,t,n)=>{const{isSilent:o}=n;if(await(0,a.t9)("updateContactSignUpNotification",o))return(0,l.BI)((0,r.Rd)(),{hasContactJoinedNotifications:!o})})),(0,r.iw)("loadLanguages",(async()=>{const e=await(0,a.t9)("fetchLanguages");if(e)return(0,l.BI)((0,r.Rd)(),{languages:e})})),(0,r.iw)("loadPrivacySettings",(async e=>{const[t,n,o,i,s]=await Promise.all([(0,a.t9)("fetchPrivacySettings","phoneNumber"),(0,a.t9)("fetchPrivacySettings","lastSeen"),(0,a.t9)("fetchPrivacySettings","profilePhoto"),(0,a.t9)("fetchPrivacySettings","forwards"),(0,a.t9)("fetchPrivacySettings","chatInvite")]);if(t&&n&&o&&i&&s)return(e=(0,r.Rd)()).settings.privacy.phoneNumber=t,e.settings.privacy.lastSeen=n,e.settings.privacy.profilePhoto=o,e.settings.privacy.forwards=i,e.settings.privacy.chatInvite=s,e})),(0,r.iw)("setPrivacyVisibility",(async(e,t,n)=>{const{privacyKey:o,visibility:i}=n,{privacy:{[o]:s}}=e.settings;if(!s)return;const d=h(e,{visibility:i,allowedIds:[...s.allowUserIds,...s.allowChatIds],deniedIds:[...s.blockUserIds,...s.blockChatIds]}),u=await(0,a.t9)("setPrivacySettings",o,d);return u?(e=(0,r.Rd)(),{...e,settings:{...e.settings,privacy:{...e.settings.privacy,[o]:u}}}):void 0})),(0,r.iw)("setPrivacySettings",(async(e,t,n)=>{const{privacyKey:o,isAllowList:i,contactsIds:s}=n,{privacy:{[o]:d}}=e.settings;if(!d)return;const u=h(e,{visibility:d.visibility,allowedIds:i?s:[...d.allowUserIds,...d.allowChatIds],deniedIds:i?[...d.blockUserIds,...d.blockChatIds]:s}),c=await(0,a.t9)("setPrivacySettings",o,u);return c?(e=(0,r.Rd)(),{...e,settings:{...e.settings,privacy:{...e.settings.privacy,[o]:c}}}):void 0})),(0,r.iw)("updateIsOnline",((e,t,n)=>{(0,a.t9)("updateIsOnline",n)})),(0,r.iw)("loadContentSettings",(async()=>{const e=await(0,a.t9)("fetchContentSettings");if(e)return(0,l.BI)((0,r.Rd)(),e)})),(0,r.iw)("updateContentSettings",(async(e,t,n)=>{if((0,r.R3)((0,l.BI)((0,r.Rd)(),{isSensitiveEnabled:n})),!await(0,a.t9)("updateContentSettings",n))return(0,l.BI)((0,r.Rd)(),{isSensitiveEnabled:!n})})),(0,r.iw)("loadCountryList",(async function(e,t){let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},{langCode:o}=n;o||(o=e.settings.byKey.language);const i=await(0,a.t9)("fetchCountryList",{langCode:o});if(i)return{...(0,r.Rd)(),countryList:i}})),(0,r.iw)("ensureTimeFormat",(async(e,t)=>{if(e.authNearestCountry){const n=i.FD.has(e.authNearestCountry.toUpperCase())?"12h":"24h";t.setSettingOption({timeFormat:n}),(0,u.qf)(n)}if(e.settings.byKey.wasTimeFormatSetManually)return;const n=await(0,a.t9)("fetchNearestCountry");if(n){const e=i.FD.has(n.toUpperCase())?"12h":"24h";t.setSettingOption({timeFormat:e}),(0,u.qf)(e)}})),(0,r.iw)("loadAppConfig",(async()=>{const e=await(0,a.t9)("fetchAppConfig");if(e)return{...(0,r.Rd)(),appConfig:e}}))},8304:(e,t,n)=>{"use strict";var r=n(3555),o=n(3716),i=n(8406),a=n(5406),s=n(711),d=n(1192),u=n(1622),c=n(1947);(0,r.iw)("apiUpdate",((e,t,n)=>{switch(o.eM&&"updateUserStatus"!==n["@type"]&&"updateServerTimeOffset"!==n["@type"]&&console.log("[GramJs] UPDATE",n["@type"],{update:n}),n["@type"]){case"updateApiReady":!function(e){const{hasWebNotifications:t,hasPushNotifications:n}=(0,d.dZ)(e);t&&n&&(0,i.Ld)(),(0,s.m0)(e.settings.byKey.language)}(e);break;case"updateAuthorizationState":!function(e){let t=(0,r.Rd)();const n="authorizationStateReady"===t.authState,o=e.authorizationState;switch((0,r.R3)({...t,authState:o,authIsLoading:!1}),t=(0,r.Rd)(),o){case"authorizationStateLoggingOut":(0,u.IT)(!1),(0,r.R3)({...t,isLoggingOut:!0});break;case"authorizationStateWaitCode":(0,r.R3)({...t,authIsCodeViaApp:e.isCodeViaApp});break;case"authorizationStateWaitPassword":(0,r.R3)({...t,authHint:e.hint});break;case"authorizationStateWaitQrCode":(0,r.R3)({...t,authIsLoadingQrCode:!1,authQrCode:e.qrCode});break;case"authorizationStateReady":if(n)break;(0,u.IT)(!0),(0,r.R3)({...t,isLoggingOut:!1})}}(n);break;case"updateAuthorizationError":!function(e){(0,r.R3)({...(0,r.Rd)(),authError:e.message})}(n);break;case"updateConnectionState":!function(e){const{connectionState:t}=e,n=(0,r.Rd)();if(t!==n.connectionState&&((0,r.R3)({...n,connectionState:t}),"connectionStateBroken"===t)){const e=!n.authState||["authorizationStateWaitPhoneNumber","authorizationStateWaitCode","authorizationStateWaitPassword","authorizationStateWaitRegistration","authorizationStateWaitQrCode"].includes(n.authState);(0,r.Sv)().signOut({forceInitApi:e})}}(n);break;case"updateSession":!function(e){const{sessionData:t}=e,{authRememberMe:n,authState:o}=(0,r.Rd)(),i=!t||!t.mainDcId;n&&"authorizationStateReady"===o&&!i&&(0,r.Sv)().saveSession({sessionData:t})}(n);break;case"updateServerTimeOffset":!function(e){const t=(0,r.Rd)();t.serverTimeOffset!==e.serverTimeOffset&&(0,r.R3)({...t,serverTimeOffset:e.serverTimeOffset})}(n);break;case"updateCurrentUser":!function(e){const{currentUser:t}=e;(0,r.R3)({...(0,a.Nq)((0,r.Rd)(),t.id,t),currentUserId:t.id}),function(e){const t=localStorage.getItem(o.b_);if(!t)return;const n=JSON.parse(t);n.id=e,localStorage.setItem(o.b_,JSON.stringify(n))}(t.id)}(n);break;case"error":{"SESSION_REVOKED"===n.error.message&&t.signOut();const e=(0,c.J_)(n.error);e?t.addPaymentError({error:e}):t.showDialog&&t.showDialog({data:n.error});break}}}))},9005:(e,t,n)=>{"use strict";var r=n(3555),o=n(3716),i=n(7361),a=n(711),s=n(7370),d=n(1192),u=n(1622),c=n(7926);!function(){function e(){const e=document.documentElement.className.match(/theme-(\w+)/),t=e?e[1]:"light",n=(0,r.Rd)(),i=(0,d.Pu)(n),{animationLevel:a}=n.settings.byKey;i!==t&&((0,s.Z)(i,a===o.zy),(0,r.R3)({...n}))}const t=window.matchMedia("(prefers-color-scheme: dark)");"function"==typeof t.addEventListener?t.addEventListener("change",e):"function"==typeof t.addListener&&t.addListener(e)}(),(0,r.iw)("init",(e=>{const{animationLevel:t,messageTextSize:n,language:r}=e.settings.byKey,l=(0,d.Pu)(e);(0,a.m0)(r,void 0,!0),document.documentElement.style.setProperty("--composer-text-size",`${Math.max(n,i.cj?16:15)}px`),document.documentElement.style.setProperty("--message-meta-height",`${Math.floor(1.3125*n)}px`),document.documentElement.style.setProperty("--message-text-size",`${n}px`),document.documentElement.setAttribute("data-message-text-size",n.toString()),document.body.classList.add("initial"),document.body.classList.add(`animation-level-${t}`),document.body.classList.add(i.$b?"is-touch-env":"is-pointer-env"),(0,s.Z)(l,t===o.zy),(0,c.$)(),(0,u.px)(),i.cj?document.body.classList.add("is-ios"):i.wZ?document.body.classList.add("is-android"):i.jm&&document.body.classList.add("is-macos"),i.s$&&document.body.classList.add("is-safari")})),(0,r.iw)("setIsUiReady",((e,t,n)=>{const{uiReadyState:r}=n;return 2===r&&document.body.classList.remove("initial"),{...e,uiReadyState:r}})),(0,r.iw)("setAuthPhoneNumber",((e,t,n)=>{const{phoneNumber:r}=n;return{...e,authPhoneNumber:r}})),(0,r.iw)("setAuthRememberMe",((e,t,n)=>({...e,authRememberMe:Boolean(n)}))),(0,r.iw)("clearAuthError",(e=>({...e,authError:void 0}))),(0,r.iw)("disableHistoryAnimations",(()=>{setTimeout((()=>{(0,r.R3)({...(0,r.Rd)(),shouldSkipHistoryAnimations:!1}),document.body.classList.remove("no-animate")}),450),(0,r.R3)({...(0,r.Rd)(),shouldSkipHistoryAnimations:!0},{forceSyncOnIOs:!0})}))},3456:(e,t,n)=>{"use strict";var r=n(3555),o=n(5406);(0,r.iw)("setSettingOption",((e,t,n)=>(0,o.BI)(e,n))),(0,r.iw)("setThemeSettings",((e,t,n)=>{const{theme:r,...i}=n;return(0,o.lr)(e,r,i)}))},2825:(e,t,n)=>{"use strict";n.d(t,{$l:()=>Z,Bf:()=>h,G9:()=>g,GM:()=>C,H5:()=>x,Hd:()=>N,Hp:()=>M,Mg:()=>k,Nl:()=>P,Qm:()=>_,RT:()=>E,Ru:()=>v,SB:()=>R,Sm:()=>D,U:()=>I,VE:()=>A,YC:()=>f,ZV:()=>p,cc:()=>B,eA:()=>m,hu:()=>S,i4:()=>L,ih:()=>$,l6:()=>b,pE:()=>O,pK:()=>y,q8:()=>T,zF:()=>F,zX:()=>w});var r=n(6137),o=n(3716),i=n(782),a=n(3311),s=n(790),d=n(5765);const u=Date.now()/1e3+31622400,c=3e9,l=3e8;function f(e){return"number"==typeof e?e>0:!e.startsWith("-")}function h(e){return g(e)||p(e)}function g(e){return"chatTypeBasicGroup"===e.type}function p(e){return"chatTypeSuperGroup"===e.type}function m(e){return"chatTypeChannel"===e.type}function v(e){return"chatTypePrivate"===e.type||"chatTypeBasicGroup"===e.type}function y(e){return e===o.FV}function b(e){switch(e.type){case"chatTypePrivate":return"PrivateChat";case"chatTypeBasicGroup":case"chatTypeSuperGroup":return"AccDescrGroup";case"chatTypeChannel":return"AccDescrChannel";default:return"Chat"}}function w(e){if("chatTypePrivate"===e.type||"chatTypeSecret"===e.type)return e.id}function I(e,t,n){let r=arguments.length>3&&void 0!==arguments[3]&&arguments[3];return r||n&&t.id===n.id&&n.isSelf?e("SavedMessages"):t.title||e("HiddenName")}function C(e){if(e.fullInfo)return e.fullInfo.about}function S(e){const{username:t}=e;if(t)return`https://t.me/${t}`;const{inviteLink:n}=e.fullInfo||{};return n}function E(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"normal";if(e.avatarHash)return"big"===t?`profile${e.id}?${e.avatarHash}`:`avatar${e.id}?${e.avatarHash}`}function M(e){return!e.lastMessage}function P(e){return Boolean(e.adminRights)}function A(e,t){return!!e.adminRights&&e.adminRights[t]}function k(e,t){var n,r;return Boolean((null===(n=e.currentUserBannedRights)||void 0===n?void 0:n[t])||(null===(r=e.defaultBannedRights)||void 0===r?void 0:r[t]))}function _(e,t){return t!==r._f||!(e.isRestricted||e.migratedTo||e.isNotJoined||y(e.id))&&(!!e.isCreator||!!f(e.id)||(m(e)?A(e,"postMessages"):P(e)||!k(e,"sendMessages")))}function x(e){let t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];if(!e)return{canAttachMedia:!1,canAttachPolls:!1,canSendStickers:!1,canSendGifs:!1,canAttachEmbedLinks:!1};const n=P(e);return{canAttachMedia:n||!k(e,"sendMedia"),canAttachPolls:(n||!k(e,"sendPolls"))&&(!f(e.id)||t),canSendStickers:n||!k(e,"sendStickers"),canSendGifs:n||!k(e,"sendGifs"),canAttachEmbedLinks:n||!k(e,"embedLinks")}}function T(e,t,n){if(null!=t&&t.sendMessages){const{untilDate:n}=t;return n&&n2&&void 0!==arguments[2]?arguments[2]:{};return n[e.id]&&void 0!==n[e.id].isMuted?n[e.id].isMuted:e.isMuted||f(e.id)&&!t.hasPrivateChatsNotifications||m(e)&&!t.hasBroadcastNotifications||h(e)&&!t.hasGroupNotifications}function D(e,t){let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};const{hasPrivateChatsMessagePreview:r=!0,hasBroadcastMessagePreview:o=!0,hasGroupMessagePreview:i=!0}=t;return n[e.id]&&void 0!==n[e.id].shouldShowPreviews?n[e.id].shouldShowPreviews:f(e.id)&&r||m(e)&&o||h(e)&&i}function B(e){return g(e)||(p(e)||m(e))&&e.isCreator}function R(e,t,n){const{id:r,title:o,emoticon:i,description:a,pinnedChatIds:s,excludedChatIds:d,includedChatIds:u,excludeArchived:c,excludeMuted:l,excludeRead:f,...h}=t;return void 0!==n&&(Object.values(h).filter(Boolean).length>1||null!=d&&d.length||null!=u&&u.length)?e("Chats",n):h.bots?e("FilterBots"):h.groups?e("FilterGroups"):h.channels?e("FilterChannels"):h.contacts?e("FilterContacts"):h.nonContacts?e("FilterNonContacts"):void 0}function F(e,t,n){if(n&&!f(t))return n.isSelf?e("FromYou"):(0,a.Vl)(n)}function $(e,t){let n=arguments.length>2&&void 0!==arguments[2]&&arguments[2],r=arguments.length>3?arguments[3]:void 0;return(0,i.Xo)(e,(e=>{const o=t[e];if(!o)return 0;let i=0;return o.lastMessage&&(i+=o.lastMessage.date),n&&o.isVerified&&(i+=c),r&&r.includes(e)&&(i=Date.now()+l+(r.length-r.indexOf(e))),i}),"desc")}function Z(e,t,n,r,o){if(!r)return t;const i=(0,d.W)(r);return t.filter((t=>{const r=n[t];return!!r&&i(I(e,r,void 0,t===o))}))}},5806:(e,t,n)=>{"use strict";n.d(t,{lN:()=>D,JE:()=>_,uw:()=>Ce,k6:()=>se,lb:()=>O,$l:()=>o.$l,kK:()=>r.kK,H5:()=>o.H5,MR:()=>ce,kw:()=>r.kw,cc:()=>o.cc,Qm:()=>o.Qm,RT:()=>o.RT,GM:()=>o.GM,hu:()=>o.hu,N0:()=>pe,Hd:()=>o.Hd,U:()=>o.U,l6:()=>o.l6,T7:()=>v,SB:()=>o.SB,VE:()=>o.VE,XV:()=>Ie,Sc:()=>be,N5:()=>q,oP:()=>G,qp:()=>j,w6:()=>k,R5:()=>we,$D:()=>p,aE:()=>Y,ep:()=>fe,c0:()=>he,d0:()=>c,eO:()=>te,Tp:()=>l,nf:()=>ne,kG:()=>le,Ti:()=>de,DH:()=>ae,KK:()=>h,O$:()=>z,t9:()=>ee,dT:()=>N,Y5:()=>H,zF:()=>o.zF,q8:()=>o.q8,_O:()=>m,bf:()=>J,Kk:()=>$,Eb:()=>F,MK:()=>B,UD:()=>g,EU:()=>R,b7:()=>W,kd:()=>K,s1:()=>re,F$:()=>oe,Cg:()=>ie,bV:()=>me,HV:()=>ve,zX:()=>o.zX,OU:()=>E,RI:()=>M,Ow:()=>Ee,Rs:()=>r.Rs,Vl:()=>r.Vl,Js:()=>r.Js,db:()=>r.db,Tq:()=>r.Tq,jC:()=>ye,BM:()=>ge,u8:()=>V,Lo:()=>I,Ul:()=>S,Nl:()=>o.Nl,pE:()=>o.pE,G9:()=>o.G9,eA:()=>o.eA,Bf:()=>o.Bf,Hp:()=>o.Hp,ZV:()=>o.ZV,pK:()=>o.pK,Ru:()=>o.Ru,NB:()=>r.NB,MF:()=>w,$R:()=>x,CD:()=>A,rl:()=>Q,hC:()=>X,CI:()=>P,B4:()=>y,ss:()=>b,jM:()=>C,cS:()=>r.cS,YC:()=>o.YC,kM:()=>r.kM,Mg:()=>o.Mg,Ak:()=>f,i4:()=>o.i4,Sm:()=>o.Sm,ih:()=>o.ih,Z0:()=>r.Z0});var r=n(3311),o=n(2825),i=n(6137),a=n(3716),s=n(7361),d=n(4784);const u=new RegExp(a.FM,"i");function c(e){return`message${e.toString().replace(".","-")}`}function l(e){const{chatId:t,id:n}=e;return function(e,t){return`msg${e}-${t}`}(t,n)}function f(e){const t=e.match(/^msg(-?\d+)-(\d+)/);return{chatId:t[1],messageId:Number(t[2])}}function h(e){return e.previousLocalId||e.id}function g(e){const{text:t,sticker:n,photo:r,video:o,audio:i,voice:s,document:d,poll:u,webPage:c,contact:l,invoice:f,location:h}=e.content;return t?t.text:n||r||o||i||s||d||l||u||c||f||h?void 0:a.VC}function p(e){const{text:t,sticker:n,photo:r,video:o,audio:i,voice:a,document:s,poll:u,webPage:c,contact:l}=e.content;return!!(n||null!=o&&o.isRound)||!(!t||r||o||i||a||s||u||c||l)&&((0,d.Z)(t.text)||!1)}function m(e){const{text:t}=e.content;if(t&&t.text.length<=6&&1===p(e))return t.text}function v(e){const{text:t}=e.content;let n;if(null!=t&&t.entities){let e=t.entities.find((e=>e.type===i.Vv.TextUrl));if(e&&(n=e.url.match(u)),!n&&(e=t.entities.find((e=>e.type===i.Vv.Url)),e)){const{offset:r,length:o}=e;n=t.text.substring(r,r+o).match(u)}}if(!n&&t&&(n=t.text.match(u)),n)return{url:n[0],domain:n[3]}}function y(e){return e.isOutgoing}function b(e){return Boolean(e.replyToMessageId)}function w(e){return Boolean(e.forwardInfo)}function I(e){return Boolean(e.content.action)}function C(e){return e.chatId===a.aw&&Math.round(e.id)!==e.id}function S(e){return Boolean(e.senderId)&&!(0,o.YC)(e.senderId)&&y(e)}function E(e,t){return(0,o.YC)(t.id)?(0,r.Js)(t):(0,o.U)(e,t)}function M(e){return e.sendingState?"messageSendingStateFailed"===e.sendingState?"failed":"pending":"succeeded"}function P(e){return e.id>=a.AE}function A(e){return e.content.action&&"historyClear"===e.content.action.type}function k(e){const{content:t}=e,n=t.webPage?t.webPage.video:t.video,r=t.webPage?t.webPage.photo:t.photo,o=t.webPage?t.webPage.document:t.document;if(o)return o.fileName;if(n)return n.fileName;if(t.sticker){const e=t.sticker.isLottie?"tgs":t.sticker.isVideo?"webm":(0,s.on)()?"webp":"png";return`${t.sticker.id}.${e}`}if(t.audio)return t.audio.fileName;const i=l(e);return r?`${i}.jpg`:t.voice?s.m5?`${i}.ogg`:`${i}.wav`:i}function _(e){return!e.results.some((e=>e.count>0))}function x(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:Date.now()/1e3;const{location:n}=e.content;return"geoLive"===(null==n?void 0:n.type)&&t-(e.date||0)>=n.period}var T=n(8035);function N(e){var t,n;return e.isOutgoing?null===(t=e.reactions)||void 0===t||null===(n=t.recentReactions)||void 0===n?void 0:n[0]:void 0}function O(e,t,n){if(!e||!e.recentReactions)return!0;if(!t||!t.recentReactions)return!1;if(t.recentReactions.every((e=>e.userId===n)))return!1;const r=e.results.reduce(((e,t)=>(e[t.reaction]=t.count,e)),{});return t.results.some((e=>!r[e.reaction]||r[e.reaction]2&&void 0!==arguments[2]&&arguments[2],r=arguments.length>3&&void 0!==arguments[3]?arguments[3]:D,o=!(arguments.length>4&&void 0!==arguments[4])||arguments[4],i=arguments.length>5&&void 0!==arguments[5]&&arguments[5];const a=!n&&F(t,o),s=a?`${a} `:"",d=(0,T.Z)(R(t),r),u=$(e,t,d,o,i);return`${s}${u}`}function R(e){const t=g(e);if(!t)return;const{entities:n}=e.content.text||{};return null!=n&&n.length?n.reduce(((e,t)=>{let{type:n,offset:r,length:o}=t;if(n!==i.Vv.Spoiler)return e;const a=function(e){return new Array(e).fill(void 0).map((()=>L[Math.floor(Math.random()*L.length)])).join("")}(o);return`${e.substr(0,r)}${a}${e.substr(r+o,e.length)}`}),t):t}function F(e){let t=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];const{photo:n,video:r,audio:o,voice:i,document:a,sticker:s,poll:d}=e.content;if(e.groupedId||n)return"🖼";if(r)return"📹";if(s)return s.emoji;if(o)return"🎧";if(i)return"🎤";if(a)return"📎";if(d)return"📊";const u=!t&&N(e);return u?u.reaction:void 0}function $(e,t,n){let r=!(arguments.length>3&&void 0!==arguments[3])||arguments[3],o=arguments.length>4&&void 0!==arguments[4]&&arguments[4];const{text:i,photo:s,video:d,audio:u,voice:c,document:l,sticker:f,contact:h,poll:g,invoice:p,location:m}=t.content;let v;t.groupedId&&(v=n||e("lng_in_dlg_album")),s&&(v=n||e("AttachPhoto")),d&&(v=n||e(d.isGif?"AttachGif":"AttachVideo")),f&&(v=e("AttachSticker").trim()),u&&(v=Z(t)||e("AttachMusic")),c&&(v=n||e("AttachAudio")),l&&(v=o?l.fileName:n||l.fileName),h&&(v=e("AttachContact")),g&&(v=g.summary.question),p&&(v=`${e("PaymentInvoice")}: ${p.text}`),i&&(o&&v?v+=`\n${n}`:v=n),"geo"!==(null==m?void 0:m.type)&&"venue"!==(null==m?void 0:m.type)||(v=e("Message.Location")),"geoLive"===(null==m?void 0:m.type)&&(v=e("Message.LiveLocation"));const y=!r&&N(t);return v&&y&&(v=`to your "${v}"`),v||a.VC}function Z(e){const{audio:t,text:n}=e.content;return t&&[t.title,t.performer].filter(Boolean).join(" — ")||(null==n?void 0:n.text)}var U=n(5376);function j(e){return e.content}function V(e){return Boolean(z(e)||W(e)||Y(e)||J(e)||function(e){return e.content.contact}(e)||ee(e)||q(e)||G(e)||K(e))}function z(e){return e.content.photo}function W(e){return e.content.video}function H(e){const{video:t}=e.content;return null!=t&&t.isRound?t:void 0}function q(e){return e.content.action}function G(e){return e.content.audio}function K(e){return e.content.voice}function J(e){return e.content.sticker}function Y(e){return e.content.document}function Q(e){const t=Y(e);return t?"photo"===t.mediaType:void 0}function X(e){const t=Y(e);return t?"video"===t.mediaType:void 0}function ee(e){return e.content.poll}function te(e){return e.content.invoice}function ne(e){return e.content.location}function re(e){return e.content.webPage}function oe(e){var t;return null===(t=re(e))||void 0===t?void 0:t.photo}function ie(e){var t;return null===(t=re(e))||void 0===t?void 0:t.video}function ae(e){var t;return null===(t=function(e){const t=z(e)||W(e)||Y(e)||J(e)||oe(e)||ie(e);if(t)return t.thumbnail}(e))||void 0===t?void 0:t.dataUri}function se(e,t,n,r,o){const{long:i,lat:a,accessHash:s,accuracyRadius:d}=e;return`staticMap:${s}?lat=${a}&long=${i}&w=${t}&h=${n}&zoom=${r}&scale=${o}&accuracyRadius=${d}`}function de(e,t){const{photo:n,video:r,sticker:o,audio:i,voice:a,document:s}=e.content,d=oe(e),u=ie(e),c=r||u,f=n||d,h=f||c||o||i||a||s;if(!h)return;const g=h.id,p=`${l(e)}${g?`:${g}`:""}`;if(c)switch(t){case"micro":case"pictogram":case"viewerPreview":return`${p}?size=m`;case"inline":return ge(e)?void 0:ue(c,p);case"viewerFull":return ue(c,p);case"download":return`${p}?download`}if(f)switch(t){case"micro":case"pictogram":return`${p}?size=m`;case"inline":return ge(e)?void 0:`${p}?size=x`;case"viewerPreview":return`${p}?size=x`;case"viewerFull":case"download":return`${p}?size=z`}if(s)switch(t){case"micro":case"pictogram":case"inline":case"viewerPreview":if(!(0,U.v6)(s)||ge(e))return;return`${p}?size=m`;case"viewerFull":case"download":return p}if(o)switch(t){case"micro":return;case"pictogram":return`${p}?size=m`;case"inline":return p;case"download":return`${p}?download`}if(i)switch(t){case"micro":case"pictogram":return ce(i)?`${p}?size=m`:void 0;case"inline":return ue(i,p);case"download":return`${p}?download`}if(a)switch(t){case"micro":case"pictogram":return;case"inline":return p;case"download":return`${p}?download`}}function ue(e,t){return s.I_&&s.s$?`${t}?fileSize=${e.size}&mimeType=${e.mimeType}`:t}function ce(e){return e.thumbnailSizes&&e.thumbnailSizes.length>0}function le(e,t){const{sticker:n,video:r,audio:o,voice:a}=e.content,d=r||ie(e);return n&&"inline"===t&&n.isLottie?i.IU.Lottie:d&&s.I_&&("viewerFull"===t||"inline"===t)?i.IU.Progressive:o||a?a&&!s.m5?i.IU.BlobUrl:i.IU.Progressive:i.IU.BlobUrl}function fe(e){const{photo:t,video:n,document:r}=e.content,o=oe(e),i=ie(e);if(t||o)return`photo${e.date}.jpeg`;const{fileName:a}=n||i||r||{};return a}function he(e){const{video:t,document:n}=e.content,r=ie(e),{size:o}=t||r||n||{};return o}function ge(e){const{photo:t,video:n,document:r}=e.content;return(null==t?void 0:t.blobUrl)||(null==n?void 0:n.blobUrl)||(null==r?void 0:r.previewBlobUrl)}function pe(e,t){let n=arguments.length>2&&void 0!==arguments[2]&&arguments[2];return we(e,t,n?"media":"inlineMedia")}function me(e){return e.sizes.find((e=>"z"===e.type))||e.sizes.find((e=>"y"===e.type))||ve(e)}function ve(e){return e.sizes.find((e=>"x"===e.type))||e.sizes.find((e=>"m"===e.type))||e.sizes.find((e=>"s"===e.type))||e.thumbnail}function ye(e){if(e.width&&e.height)return e}function be(e,t){let n=arguments.length>2&&void 0!==arguments[2]&&arguments[2];const r=P(e),o=r||n,i=Number(t);return{isUploading:r,isTransferring:o,transferProgress:i}}function we(e,t,n){let r;switch(n){case"media":r=e=>{const t=W(e);return z(e)||t&&!t.isRound&&!t.isGif};break;case"documents":r=Y;break;case"links":r=e=>re(e)||function(e){const{text:t}=e.content,n=t&&t.text.match(u);if(n)return{url:n[0],domain:n[3]}}(e);break;case"audio":r=G;break;case"voice":r=e=>{const t=W(e);return K(e)||t&&t.isRound};break;case"inlineMedia":r=e=>{const t=W(e);return z(e)||t&&!t.isRound&&!t.isGif||Q(e)||X(e)};break;default:return[]}return t.reduce(((t,n)=>(e[n]&&r(e[n])&&t.push(n),t)),[])}function Ie(e){const{audio:t,voice:n,video:r}=j(e),o=t||n||r||ie(e);if(o)return o.duration}function Ce(e,t){return`${e}_${t}`}const Se={missing_payment_information:{field:"cardNumber",message:"Incorrect card number"},invalid_number:{field:"cardNumber",message:"Incorrect card number"},number:{field:"cardNumber",message:"Incorrect card number"},exp_year:{field:"expiry",message:"Incorrect year"},exp_month:{field:"expiry",message:"Incorrect month"},invalid_expiry_year:{field:"expiry",message:"Incorrect year"},invalid_expiry_month:{field:"expiry",message:"Incorrect month"},cvc:{field:"cvv",message:"Incorrect CVV"},invalid_cvc:{field:"cvv",message:"Incorrect CVV"}};function Ee(e){const{message:t,code:n,param:r}=e,{field:o,message:i}=r?Se[r]:Se[n];return{field:o,message:i,description:t}}},3311:(e,t,n)=>{"use strict";n.d(t,{Js:()=>c,NB:()=>h,Rs:()=>b,Tq:()=>l,Vl:()=>u,Z0:()=>m,cS:()=>g,db:()=>y,kK:()=>v,kM:()=>f,kw:()=>p});var r=n(3716),o=n(790),i=n(782),a=n(2267),s=n(5765);const d=[1,8,5,2,7,4,6];function u(e){if(e)switch(e.type){case"userTypeBot":case"userTypeRegular":return e.firstName||e.lastName;case"userTypeDeleted":case"userTypeUnknown":return"Deleted";default:return}}function c(e){if(e){if(h(e))return"Deleted account";switch(e.type){case"userTypeBot":case"userTypeRegular":if(e.firstName&&e.lastName)return`${e.firstName} ${e.lastName}`;if(e.firstName)return e.firstName;if(e.lastName)return e.lastName;break;case"userTypeDeleted":case"userTypeUnknown":return"Deleted account"}}}function l(e,t,n,i){if(t.id===r.aw)return e("ServiceNotifications").toLowerCase();if(t.type&&"userTypeBot"===t.type)return e("Bot");if(!n)return"";switch(n.type){case"userStatusEmpty":return e("ALongTimeAgo");case"userStatusLastMonth":return e("WithinAMonth");case"userStatusLastWeek":return e("WithinAWeek");case"userStatusOffline":{const{wasOnline:t}=n;if(!t)return e("LastSeen.Offline");const r=new Date((new Date).getTime()+1e3*i),a=new Date(1e3*t);if(a>=r)return e("LastSeen.JustNow");const s=new Date(r.getTime()-a.getTime());if(s.getTime()/1e3<60)return e("LastSeen.JustNow");if(s.getTime()/1e3<3600)return e("LastSeen.MinutesAgo",Math.floor(s.getTime()/1e3/60));const d=new Date;if(d.setHours(0,0,0,0),a>new Date(d.getTime()+1e3*i))return s.getTime()/1e3<21600?e("LastSeen.HoursAgo",Math.floor(s.getTime()/1e3/60/60)):e("LastSeen.TodayAt",(0,o.mr)(e,a));const u=new Date;return u.setDate(r.getDate()-1),u.setHours(0,0,0,0),a>new Date(u.getTime()+1e3*i)?e("LastSeen.YesterdayAt",(0,o.mr)(e,a)):e("LastSeen.AtDate",(0,o.Tu)(e,a))}case"userStatusOnline":return e("Online");case"userStatusRecently":return e("Lately");default:return}}function f(e,t){const{id:n,type:o}=e;return!!t&&n!==r.aw&&"userStatusOnline"===t.type&&"userTypeBot"!==o}function h(e){return!e.noStatus&&"userTypeBot"!==e.type&&e.id!==r.aw&&("userTypeDeleted"===e.type||"userTypeUnknown"===e.type)}function g(e){return"userTypeBot"===e.type}function p(e){return!e.isContact&&!g(e)}function m(e,t,n,r){let o=arguments.length>4&&void 0!==arguments[4]?arguments[4]:0;return(0,i.Xo)(e,(e=>{const i=(0,a.b)(o);if(r&&r.includes(e))return i+172800-(r.length-r.indexOf(e));const s=t[e],d=n[e];if(!s||!d)return 0;if("userStatusOnline"===d.type)return d.expires;if("userStatusOffline"===d.type&&d.wasOnline)return d.wasOnline;switch(d.type){case"userStatusRecently":return i-86400;case"userStatusLastWeek":return i-604800;case"userStatusLastMonth":return i-18144e3;default:return 0}}),"desc")}function v(e,t,n,r,o){if(!n)return e;const i=(0,s.W)(n);return e.filter((e=>{const n=t[e];if(!n)return!1;const a=e===r?o:c(n);return a&&i(a)||i(n.username)}))}function y(e){return"number"==typeof e?Math.abs(e):Math.abs(Number(e))}function b(e){const t=e?y(e.id)%7:0;return d[t]}},3555:(e,t,n)=>{"use strict";n.d(t,{R3:()=>i,Rd:()=>o,Sv:()=>a,c$:()=>d,iw:()=>s});const r=(0,n(5116).gP)(),o=r.getGlobal,i=r.setGlobal,a=r.getActions,s=r.addActionHandler,d=r.withGlobal},3475:(e,t,n)=>{"use strict";n.d(t,{B1:()=>s,Dd:()=>p,GL:()=>c,Mg:()=>a,Pi:()=>h,SL:()=>d,a4:()=>u,fZ:()=>l,iX:()=>m,vv:()=>g});var r=n(3716),o=n(782),i=n(1192);function a(e,t,n){return{...e,chats:{...e.chats,listIds:{...e.chats.listIds,[t]:n}}}}function s(e,t,n){const{[t]:r}=e.chats.listIds,o=null!=r&&r.length?n.filter((e=>!r.includes(e))):n;return r&&!o.length?e:a(e,t,[...r||[],...o])}function d(e,t){return{...e,chats:{...e.chats,byId:t}}}function u(e,t,n,r){const{byId:o}=e.chats,i=f(e,t,n,r);return i?d(e,{...o,[t]:i}):e}function c(e,t){const n=Object.keys(t).reduce(((n,r)=>{const o=f(e,r,t[r]);return o&&(n[r]=o),n}),{});return e=d(e,{...e.chats.byId,...n})}function l(e,t){const{byId:n}=e.chats;let r=!1;const o=Object.keys(t).reduce(((o,i)=>{if(!n[i]||n[i].isMin&&!t[i].isMin){const n=f(e,i,t[i]);n&&(o[i]=n,r||(r=!0))}return o}),{});return r?e=d(e,{...n,...o}):e}function f(e,t,n,r){const{byId:i}=e.chats,a=i[t],s=n.isMin&&a&&!a.isMin,d={...a,...s?(0,o.CE)(n,["isMin","accessHash"]):n,...r&&{photos:[r,...a.photos||[]]}};if(d.id&&d.type)return d}function h(e,t,n){const o=n===r.WS?"archived":"active";let i=e.chats.listIds;return Object.keys(i).forEach((e=>{const n=i[e]||[];e!==o||n.includes(t)?e!==o&&n.includes(t)&&(i={...i,[e]:n.filter((e=>e!==t))}):i={...i,[e]:[...n,t]}})),u(e={...e,chats:{...e.chats,listIds:i}},t,{folderId:n||void 0})}function g(e,t,n){const r="active"===t?"all":"archived";return{...e,chats:{...e.chats,...n.orderedPinnedIds&&{orderedPinnedIds:{...e.chats.orderedPinnedIds,[t]:n.orderedPinnedIds}},totalCount:{...e.chats.totalCount,[r]:n.totalChatCount},isFullyLoaded:{...e.chats.isFullyLoaded,[t]:!1}}}}function p(e,t){const n=(0,i.Ek)(e,t);if(!n)return e;const{[n]:r}=e.chats.listIds;return r&&(e=a(e,n,r.filter((e=>e!==t)))),u(e,t,{isNotJoined:!0})}function m(e,t,n){var r;const i=null===(r=t.fullInfo)||void 0===r?void 0:r.members,a=new Set(n.map((e=>e.userId))),s=[...(null==i?void 0:i.filter((e=>!a.has(e.userId))))||[],...n],d=(null==i?void 0:i.map((e=>{let{userId:t}=e;return t})))||[],c=s.map((e=>{let{userId:t}=e;return t}));return(0,o.et)(d,c)?e:u(e,t.id,{fullInfo:{...t.fullInfo,members:s}})}},5406:(e,t,n)=>{"use strict";n.d(t,{O4:()=>G,iX:()=>r.iX,c_:()=>o.c_,fZ:()=>r.fZ,m6:()=>o.m6,aK:()=>H,aJ:()=>W,zn:()=>M,Sh:()=>y,$S:()=>o.$S,bp:()=>ae,WY:()=>se,ft:()=>P,K4:()=>o.K4,bV:()=>o.bV,GK:()=>w,M6:()=>o.M6,i9:()=>o.i9,Dd:()=>r.Dd,vy:()=>f,rB:()=>K,g_:()=>c,Mg:()=>r.Mg,SL:()=>r.SL,Pb:()=>D,w3:()=>o.w3,BI:()=>V,lr:()=>z,pf:()=>o.pf,ps:()=>E,s5:()=>g,y9:()=>o.y9,fS:()=>oe,nA:()=>ee,_7:()=>re,Q$:()=>X,Dq:()=>ie,vT:()=>Q,QD:()=>ne,QH:()=>te,Ob:()=>o.Ob,a4:()=>r.a4,B1:()=>r.B1,vv:()=>r.vv,Pi:()=>r.Pi,cY:()=>o.cY,GL:()=>r.GL,Wy:()=>o.Wy,wV:()=>o.wV,cq:()=>o.cq,rq:()=>u,No:()=>k,Og:()=>_,xv:()=>T,px:()=>x,xj:()=>o.xj,c1:()=>$,z5:()=>F,qr:()=>L,dx:()=>B,fw:()=>j,H9:()=>U,HN:()=>q,ff:()=>o.ff,P4:()=>o.P4,TM:()=>Y,Fn:()=>o.Fn,ze:()=>de,yC:()=>ue,Rg:()=>d,z3:()=>s,IM:()=>l,sN:()=>o.sN,Xg:()=>o.Xg,j6:()=>o.j6,lG:()=>o.lG,IE:()=>J,Nq:()=>m,Lm:()=>I,Q3:()=>C,eD:()=>v});var r=n(3475),o=n(4907),i=n(782),a=n(1192);function s(e,t,n,r,o){const a=r.map((t=>{const n=e.stickers.setsById[t.id];return n?{...n,...t}:t}));return{...e,stickers:{...e.stickers,setsById:{...e.stickers.setsById,...(0,i.ee)(a,"id")},[t]:{...e.stickers[t],hash:n,..."search"===t?{resultIds:o}:{setIds:r.map((e=>{let{id:t}=e;return t}))}}}}}function d(e,t,n){const r=e.stickers.setsById[t]||{},o=e.stickers.added.setIds||[];let i=o;return n.installedDate&&o&&!o.includes(t)&&(i=[t,...i]),!n.installedDate&&null!=o&&o.includes(t)&&(i=i.filter((e=>e!==t))),{...e,stickers:{...e.stickers,added:{...e.stickers.added,setIds:i},setsById:{...e.stickers.setsById,[t]:{...r,...n}}}}}function u(e,t,n,r){const{results:o}=e.gifs.search;let i;if(t||!o)i=n;else{const e=new Set(o.map((e=>e.id)));i=[...o,...n.filter((t=>!e.has(t.id)))]}return{...e,gifs:{...e.gifs,search:{...e.gifs.search,offset:r,results:i}}}}function c(e,t){return{...e,animatedEmojis:t}}function l(e,t,n,r){const o=[...(0,a.Pk)(e,t),...n||[]],s=(0,i.Tw)(o.map((e=>{let{id:t}=e;return t}))),d=(0,i.ee)(o,"id"),u=s.map((e=>d[e]));return{...e,stickers:{...e.stickers,forEmoji:{emoji:t,stickers:u,hash:r}}}}function f(e){const{emoji:t,stickers:n,hash:r}=e.stickers.forEmoji||{};return t?l(e,t,n,r):e}var h=n(735);function g(e,t){return{...e,users:{...e.users,byId:t}}}function p(e,t){const{userIds:n}=e.contactList||{};if(!n)return e;const r=t.filter((e=>(null==e?void 0:e.isContact)&&!n.includes(e.id))).map((e=>e.id));return 0===r.length?e:{...e,contactList:{userIds:[...r,...n]}}}function m(e,t,n){const{byId:r}=e.users,o=b(e,t,n);return o?g(e=p(e,[o]),{...r,[t]:o}):e}function v(e,t){const n=Object.keys(t).reduce(((n,r)=>{const o=b(e,r,t[r]);return o&&(n[r]=o),n}),{});return e=p(e=g(e,{...e.users.byId,...n}),Object.values(n))}function y(e,t){const{byId:n}=e.users;let r=!1;const o=Object.keys(t).reduce(((o,i)=>{if(!n[i]||n[i].isMin&&!t[i].isMin){const n=b(e,i,t[i]);n&&(o[i]=n,r||(r=!0))}return o}),{});return r?e=p(e=g(e,{...n,...o}),Object.values(o)):e}function b(e,t,n){const{byId:r}=e.users,o=r[t],a=n.isMin&&o&&!o.isMin,s={...o,...a?(0,i.CE)(n,["isMin","accessHash"]):n};if(s.id&&s.type)return s}function w(e,t){const{byId:n}=e.users,{userIds:o}=e.contactList||{};return e=g(e={...e,contactList:{userIds:o?o.filter((e=>e!==t)):h.D}},{...n,[t]:{...n[t],isContact:void 0}}),(0,r.a4)(e,t,{settings:void 0})}function I(e,t){return{...e,userSearch:{...e.userSearch,...t}}}function C(e,t){return I(e,{fetchingStatus:t})}function S(e,t,n){const{byId:r}=e.users,o=r[t];return o&&o.fullInfo?m(e,t,{...o,fullInfo:{...o.fullInfo,isBlocked:n}}):e}function E(e,t){return{...e,users:{...e.users,statusesById:t}}}function M(e,t){const{statusesById:n}=e.users,r=Object.keys(t).filter((e=>!n[e]));return r.length?e=E(e,{...n,...(0,i.ei)(t,r)}):e}function P(e){return{...e,newContact:void 0}}const A=e=>`${e.chatId}_${e.id}`;function k(e,t){return{...e,globalSearch:{...e.globalSearch,...t}}}function _(e,t){return k(e,{currentContent:t})}function x(e,t,n,r,o){var a;const{resultsByType:s}=e.globalSearch||{},d=t.reduce(((e,t)=>(e[A(t)]=t,e)),{}),u=null==s||null===(a=s[r])||void 0===a?void 0:a.foundIds;if(void 0!==u&&Object.keys(d).every((e=>u.includes(A(d[e])))))return T(e,{messages:!1});const c=u||[],l=t.map((e=>A(e))),f=Array.prototype.concat(c,l),h=(0,i.et)(c,f)?c:f;return k(e=T(e,{messages:!1}),{resultsByType:{...(e.globalSearch||{}).resultsByType,[r]:{totalCount:n,nextOffsetId:o,foundIds:h}}})}function T(e,t){return k(e,{fetchingStatus:{...e.globalSearch.fetchingStatus,...t}})}var N=n(5806);function O(e,t,n){return{...e,localTextSearch:{byChatThreadKey:{...e.localTextSearch.byChatThreadKey,[t]:n}}}}function L(e,t,n,r,o){const i=(0,N.uw)(t,n);return O(e,i,{...e.localTextSearch.byChatThreadKey[i],isActive:r,query:o})}function D(e,t,n,r,o,i){const a=(0,N.uw)(t,n);return O(e,a,{...e.localTextSearch.byChatThreadKey[a],results:{foundIds:r,totalCount:o,nextOffsetId:i}})}function B(e,t,n,r,o,a){const s=(0,N.uw)(t,n),{results:d}=e.localTextSearch.byChatThreadKey[s]||{},u=(null==d?void 0:d.foundIds)||[],c=Z((0,i.Tw)(Array.prototype.concat(u,r)));return D(e,t,n,(0,i.et)(u,c)?u:c,o,a)}function R(e,t,n){return{...e,localMediaSearch:{byChatId:{...e.localMediaSearch.byChatId,[t]:n}}}}function F(e,t,n){return R(e,t,{...e.localMediaSearch.byChatId[t],currentType:n})}function $(e,t,n,r,o,a){const{resultsByType:s}=e.localMediaSearch.byChatId[t]||{},d=null!=s&&s[n]?s[n].foundIds:[],u=Z((0,i.Tw)(Array.prototype.concat(d,r)));return function(e,t,n,r,o,i){return R(e,t,{...e.localMediaSearch.byChatId[t],resultsByType:{...(e.localMediaSearch.byChatId[t]||{}).resultsByType,[n]:{foundIds:r,totalCount:o,nextOffsetId:i}}})}(e,t,n,(0,i.et)(d,u)?d:u,o,a)}function Z(e){return e.sort(((e,t)=>t-e))}function U(e,t){return{...e,management:{...e.management,progress:t}}}function j(e,t,n){return{...e,management:{...e.management,byChatId:{...e.management.byChatId,[t]:{...e.management.byChatId[t]||{},...n}}}}}function V(e,t){return{...e,settings:{...e.settings,byKey:{...e.settings.byKey,...t}}}}function z(e,t,n){return{...e,settings:{...e.settings,themes:{...e.settings.themes,[t]:{...e.settings.themes[t]||{},...n}}}}}function W(e,t){return t.forEach((t=>{const{chatId:n,...r}=t;e=H(e,n,r)})),e}function H(e,t,n){return{...e,settings:{...e.settings,notifyExceptions:{...e.settings.notifyExceptions,[t]:n}}}}function q(e,t,n,r){switch(t){case"contact":return V(e,{...void 0!==n&&{hasPrivateChatsNotifications:!n},...void 0!==r&&{hasPrivateChatsMessagePreview:r}});case"group":return V(e,{...void 0!==n&&{hasGroupNotifications:!n},...void 0!==r&&{hasGroupMessagePreview:r}});case"broadcast":return V(e,{...void 0!==n&&{hasBroadcastNotifications:!n},...void 0!==r&&{hasBroadcastMessagePreview:r}})}}function G(e,t){return e=S(e,t,!0),{...e,blocked:{...e.blocked,ids:[t,...e.blocked.ids],totalCount:e.blocked.totalCount+1}}}function K(e,t){return e=S(e,t,!1),{...e,blocked:{...e.blocked,ids:e.blocked.ids.filter((e=>e!==t)),totalCount:e.blocked.totalCount-1}}}function J(e,t){return{...e,twoFaSettings:{...e.twoFaSettings,...t}}}function Y(e,t){return{...e,payment:{...e.payment,shippingOptions:t}}}function Q(e,t){return{...e,payment:{...e.payment,requestId:t}}}function X(e,t){return{...e,payment:{...e.payment,step:t}}}function ee(e,t){if(!t.content||!t.content.invoice)return e;const{title:n,text:r,amount:o,currency:i,isTest:a,photoUrl:s}=t.content.invoice;return{...e,payment:{...e.payment,invoiceContent:{title:n,text:r,photoUrl:s,amount:o,currency:i,isTest:a}}}}function te(e,t){return{...e,payment:{...e.payment,stripeCredentials:{...t}}}}function ne(e,t){return{...e,payment:{...e.payment,smartGlocalCredentials:{...t}}}}function re(e,t){return{...e,payment:{...e.payment,...t}}}function oe(e,t){return{...e,payment:{...e.payment,confirmPaymentUrl:t}}}function ie(e,t,n){if(!t||!n)return{...e,payment:{...e.payment,receipt:void 0}};const{invoice:r}=n.content,{photoUrl:o,text:i,title:a}=r||{};return{...e,payment:{...e.payment,receipt:{...t,photoUrl:o,text:i,title:a}}}}function ae(e){return{...e,payment:{}}}function se(e){return{...e,payment:{...e.payment,isPaymentModalOpen:!1}}}function de(e,t,n){return{...e,statistics:{byChatId:{...e.statistics.byChatId,[t]:n}}}}function ue(e,t,n,r){return{...e,statistics:{byChatId:{...e.statistics.byChatId,[t]:{...e.statistics.byChatId[t]||{},[n]:r}}}}}},4907:(e,t,n)=>{"use strict";n.d(t,{$S:()=>I,Fn:()=>A,K4:()=>m,M6:()=>_,Ob:()=>x,P4:()=>p,Wy:()=>s,Xg:()=>S,bV:()=>v,cY:()=>g,c_:()=>h,cq:()=>P,ff:()=>b,i9:()=>T,j6:()=>E,lG:()=>N,m6:()=>f,pf:()=>l,sN:()=>u,w3:()=>M,wV:()=>k,xj:()=>y,y9:()=>C});var r=n(6137),o=n(3716),i=n(1192),a=n(782);function s(e,t){let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:r._f,i=arguments.length>3&&void 0!==arguments[3]?arguments[3]:"thread",a=arguments.length>4?arguments[4]:void 0;const{messageLists:s}=e.messages;let d=s;if(a||o.Cg)d=t?[{chatId:t,threadId:n,type:i}]:[];else if(t){const e=s[s.length-1];e&&e.chatId===t&&e.threadId===n&&e.type===i||(d=e&&e.chatId===o.AJ?[...s.slice(0,-1),{chatId:t,threadId:n,type:i}]:[...s,{chatId:t,threadId:n,type:i}])}else d=s.slice(0,-1);return{...e,messages:{...e.messages,messageLists:d}}}function d(e,t,n){return c(e,t,{byId:n})}function u(e,t,n,r){const o=e.messages.byChatId[t];return c(e,t,{threadsById:{...null==o?void 0:o.threadsById,[n]:{...null==o?void 0:o.threadsById[n],...r}}})}function c(e,t,n){const r=e.messages.byChatId[t]||{byId:{},threadsById:{}};return{...e,messages:{...e.messages,byChatId:{...e.messages.byChatId,[t]:{...r,...n}}}}}function l(e,t,n,r,o){return u(e,t,n,{[r]:o})}function f(e,t){const n=t.reduce(((e,t)=>(e[t.chatId]||(e[t.chatId]={}),e[t.chatId][t.id]=t,e)),{});return Object.keys(n).forEach((t=>{e=h(e,t,n[t])})),e}function h(e,t,n){const r=(0,i.Zw)(e,t);return r&&Object.keys(n).every((e=>Boolean(r[Number(e)])))?e:d(e,t,{...n,...r})}function g(e,t,n,r){const o=(0,i.Zw)(e,t)||{},a={...o[n],...r};return a.id?d(e,t,{...o,[n]:a}):e}function p(e,t,n,r){const o=(0,i.Fn)(e,t)||{},a={...o[n],...r};return a.id?M(e,t,{...o,[n]:a}):e}function m(e,t,n){const r=(0,i.Zw)(e,t);if(!r)return e;const o=(0,a.CE)(r,n),u=Object.values((0,a.q0)(r,n)).filter((e=>{let{forwardInfo:t}=e;return null==t?void 0:t.isLinkedChannelPost}));if(Object.keys(e.messages.byChatId[t].threadsById).map(Number).forEach((r=>{const o=(0,i.tZ)(e,t,r);let a=(0,i.gb)(e,t,r),s=(0,i.qC)(e,t,r),d=(0,i.Cb)(e,t,r),u=(0,i.KB)(e,t),c=null==o?void 0:o.messagesCount;n.forEach((e=>{a&&a.includes(e)&&(a=a.filter((t=>t!==e)),void 0!==c&&(c-=1)),s&&s.includes(e)&&(s=s.filter((t=>t!==e))),d&&d.includes(e)&&(d=d.filter((t=>t!==e))),u&&u.includes(e)&&(u=u.filter((t=>t!==e)))})),e=l(e,t,r,"listedIds",a),e=l(e,t,r,"outlyingIds",s),e=l(e,t,r,"viewportIds",d),e=l(e,t,r,"pinnedIds",u),o&&void 0!==c&&(e=l(e,t,r,"threadInfo",{...o,messagesCount:c}))})),u.length){const n=(0,i.Bt)(e),r=n&&n.chatId===t&&"thread"===n.type,o=null==n?void 0:n.threadId;u.forEach((n=>{const{fromChatId:a,fromMessageId:d}=n.forwardInfo,u=(0,i.hj)(e,a,d);r&&o===d&&(e=s(e,t)),u&&(e=g(e,a,d,{threadInfo:void 0}))}))}return e=d(e,t,o)}function v(e,t,n){const o=(0,i.Fn)(e,t);if(!o)return e;const s=(0,a.CE)(o,n);let d=(0,i.qy)(e,t);return d&&(n.forEach((e=>{d.includes(e)&&(d=d.filter((t=>t!==e)))})),e=l(e,t,r._f,"scheduledIds",d)),M(e,t,s)}function y(e,t,n,r){const o=(0,i.gb)(e,t,n),a=null!=o&&o.length?r.filter((e=>!o.includes(e))):r;return o&&!a.length?e:l(e,t,n,"listedIds",w([...o||[],...a]))}function b(e,t,n,r){const o=(0,i.qC)(e,t,n),a=null!=o&&o.length?r.filter((e=>!o.includes(e))):r;return o&&!a.length?e:l(e,t,n,"outlyingIds",w([...o||[],...a]))}function w(e){return e.sort(((e,t)=>e-t))}function I(e,t,n,r){const a=(0,i.Cb)(e,t,n)||[];return a.includes(r)?e:l(e,t,n,"viewportIds",w([...a.length{e=S(e,t.chatId,t.threadId,t)})),e}function M(e,t,n){return function(e,t,n){const r=e.scheduledMessages.byChatId[t]||{byId:{},hash:0};return{...e,scheduledMessages:{byChatId:{...e.scheduledMessages.byChatId,[t]:{...r,...n}}}}}(e,t,{byId:n})}function P(e,t,n){let r=arguments.length>3&&void 0!==arguments[3]&&arguments[3],o=arguments.length>4&&void 0!==arguments[4]&&arguments[4];return{...e,focusedMessage:{...e.focusedMessage,chatId:t,messageId:n,noHighlight:r,isResizingContainer:o}}}function A(e,t,n){return{...e,messages:{...e.messages,sponsoredByChatId:{...e.messages.sponsoredByChatId,[t]:n}}}}function k(e,t){return{...e,focusedMessage:{...e.focusedMessage,direction:t}}}function _(e,t,n){return{...e,selectedMessages:{chatId:t,messageIds:n?Array.prototype.concat([],n):[]}}}function x(e,t,n,r,o,s,d){let u=arguments.length>7&&void 0!==arguments[7]&&arguments[7];const{selectedMessages:c}=e;s&&(d=(0,i.xH)(e,t,s));const l=d||[o];if(!c)return _(e,t,l);const{messageIds:f}=c;let h;const g=l.filter((e=>!f.includes(e)));if(g&&!g.length)h=f.filter((e=>!l.includes(e)));else if(u&&f.length){const s=(0,i.$W)(e,t,n,r),d=s.indexOf(f[f.length-1]),u=s.indexOf(o),c=Math.min(d,u),l=Math.max(d,u),g=s.slice(c,l+1);h=(0,a.Tw)([...f,...g])}else h=[...f,...g];return h.length?{...e,selectedMessages:{...c,messageIds:h}}:T(e)}function T(e){return{...e,selectedMessages:void 0}}function N(e,t,n,r,o){const{channelPostId:a,fromChatId:s}=t.forwardInfo||{};if(a&&s){const t=(0,i.tZ)(e,n,a);t&&(e=l(e,n,a,"threadInfo",{...t,lastMessageId:r,messagesCount:t.messagesCount+(o?-1:1)}))}return e}},4342:(e,t,n)=>{"use strict";n.d(t,{DI:()=>b,Ek:()=>m,FM:()=>d,IK:()=>f,Mw:()=>v,N:()=>p,P_:()=>c,UW:()=>w,YK:()=>l,Z1:()=>s,_5:()=>I,ep:()=>y,g4:()=>g,pk:()=>h,xo:()=>u});var r=n(6137),o=n(5806),i=n(6087),a=n(3716);function s(e,t){return e.chats.byId[t]}function d(e,t){return t===e.currentUserId}function u(e,t){const n=function(e,t){const n=(0,o.zX)(t);return!!n&&(0,i.dy)(e,n)}(e,t);return n&&(0,o.cS)(n)}function c(e){return Object.values(e.chats.byId).find((e=>{let{isSupport:t}=e;return t}))}function l(e,t){if(!(0,o.YC)(t.id)&&!(0,o.eA)(t)&&t.fullInfo)return t.fullInfo.members&&t.fullInfo.members.length!==a.mo?t.fullInfo.members.reduce(((t,n)=>{let{userId:r}=n;return r!==e.currentUserId&&e.users.byId[r]&&(0,o.kM)(e.users.byId[r],e.users.statusesById[r])?t+1:t}),0):t.fullInfo.onlineCount}function f(e,t){const n=s(e,t),r=n&&(0,o.zX)(n),a=r&&(0,i.dy)(e,r);if(a&&(0,o.cS)(a))return a}function h(e,t){const n=s(e,t),i=f(e,t);if(!n||!i)return!1;if(n.lastMessage&&(0,o.CD)(n.lastMessage))return!0;const a=e.messages.byChatId[t];if(!a)return!1;const{listedIds:d}=a.threadsById[r._f]||{};return d&&!d.length}function g(e){return Boolean(e.chats.listIds.active)}function p(e,t,n){const{listIds:r}=e.chats;if(n){const e=r[n];return Boolean(e&&e.includes(t))}return Object.values(r).some((e=>e&&e.includes(t)))}function m(e,t){const n=s(e,t);if(n&&p(e,t))return n.folderId===a.WS?"archived":"active"}function v(e,t){return e.chatFolders.byId[t]}function y(e,t){let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:a.Nf;const{active:r,archived:o}=e.chats.orderedPinnedIds;if(n===a.Nf)return Boolean(null==r?void 0:r.includes(t));if(n===a.WS)return Boolean(null==o?void 0:o.includes(t));const{byId:i}=e.chatFolders,{pinnedChatIds:s}=i[n]||{};return Boolean(null==s?void 0:s.includes(t))}function b(e,t){const n=t.toLowerCase();return Object.values(e.chats.byId).find((e=>e.username&&e.username.toLowerCase()===n))}function w(e){return Boolean(s(e,a.aw))}function I(e,t){var n;const r=s(e,t);if(!r)return;const o=null==r||null===(n=r.fullInfo)||void 0===n?void 0:n.sendAsId;return o?(0,i.dy)(e,o)||s(e,o):void 0}},1192:(e,t,n)=>{"use strict";n.d(t,{xs:()=>he,_k:()=>de,zB:()=>v,tH:()=>y,Oh:()=>b,g4:()=>s.g4,bH:()=>Pe,__:()=>ke,xl:()=>ue,Nu:()=>le,nB:()=>ce,Eh:()=>Re,Z1:()=>s.Z1,IK:()=>s.IK,DI:()=>s.DI,Mw:()=>s.Mw,Ek:()=>s.Ek,hj:()=>Q,ZB:()=>te,Zw:()=>A,YK:()=>s.YK,X5:()=>ye,jr:()=>P,yN:()=>f,JX:()=>qe,pP:()=>je,we:()=>$e,$W:()=>N,Bt:()=>M,y5:()=>l,n5:()=>Fe,q6:()=>Le,Ms:()=>j,s:()=>$,_$:()=>F,kK:()=>ee,hI:()=>U,wU:()=>Z,yZ:()=>W,It:()=>me,G$:()=>ne,y8:()=>Ie,cv:()=>se,ku:()=>Ne,pk:()=>s.pk,N:()=>s.N,ep:()=>s.ep,xo:()=>s.xo,FM:()=>s.FM,a6:()=>Se,te:()=>fe,Ev:()=>ve,CA:()=>be,zQ:()=>Ve,_X:()=>re,KA:()=>J,EV:()=>Te,vk:()=>we,Jf:()=>We,UW:()=>s.UW,s4:()=>d.s4,b9:()=>Y,VF:()=>xe,gb:()=>x,CP:()=>w,cu:()=>I,ji:()=>C,aW:()=>Ue,xH:()=>Ce,FT:()=>Me,tV:()=>V,NJ:()=>rt,dZ:()=>nt,dT:()=>ie,qC:()=>T,gx:()=>Ge,eh:()=>Je,Mz:()=>Ke,sp:()=>Ye,KB:()=>L,EB:()=>Xe,$$:()=>Qe,rd:()=>pe,p9:()=>H,Yy:()=>R,Wq:()=>ze,qy:()=>D,Tm:()=>X,Fn:()=>k,Vt:()=>B,D7:()=>Ee,_5:()=>s._5,Ur:()=>ae,yB:()=>_e,Aq:()=>Be,Jg:()=>tt,fS:()=>Oe,aT:()=>Ze,Ny:()=>h,E_:()=>g,Pk:()=>p,i3:()=>et,P_:()=>s.P_,Pu:()=>He,Db:()=>K,tZ:()=>z,Cm:()=>q,qS:()=>G,uZ:()=>ge,dy:()=>d.dy,Bk:()=>d.Bk,ss:()=>d.ss,Cb:()=>O,P2:()=>De});var r=n(1713),o=n(7361),i=n(6137),a=n(3716),s=n(4342),d=n(6087),u=n(5806),c=n(782);function l(e){return e.stickers.search}function f(e){return e.gifs.search}function h(e,t){return e.stickers.setsById[t]}function g(e,t){return Object.values(e.stickers.setsById).find((e=>e.shortName.toLowerCase()===t.toLowerCase()))}function p(e,t){const n=Object.values(e.stickers.setsById);let r=[];return e.stickers.favorite.stickers.forEach((e=>{e.emoji===t&&r.push(e)})),n.forEach((e=>{let{packs:n}=e;n&&(r=r.concat(n[t]||[],n[m(t)]||[]))})),r}function m(e){return e.replace("️","")}function v(e,t){const{animatedEmojis:n}=e;if(!n||!n.stickers)return;const r=m(t);return n.stickers.find((e=>e.emoji===t||e.emoji===r))}function y(e,t){const{animatedEmojiEffects:n}=e;if(!n||!n.stickers)return;const r=m(t);return n.stickers.find((e=>e.emoji===t||e.emoji===r))}function b(e,t){var n;return null==e||null===(n=e.appConfig)||void 0===n?void 0:n.emojiSounds[m(t)]}function w(e,t){const n=m(t);return"🍑"===n?"Peach":"🍆"===n?"Eggplant":void 0}function I(e){return"Eggplant"===e?"Cumshot":void 0}function C(e){return"Cumshot"===e?"🍆":void 0}var S=n(2267),E=n(735);function M(e){const{messageLists:t}=e.messages;if(t.length)return t[t.length-1]}function P(e){const{chatId:t}=M(e)||{};return t?(0,s.Z1)(e,t):void 0}function A(e,t){var n;return null===(n=e.messages.byChatId[t])||void 0===n?void 0:n.byId}function k(e,t){var n;return null===(n=e.scheduledMessages.byChatId[t])||void 0===n?void 0:n.byId}function _(e,t,n,r){const o=e.messages.byChatId[t];if(!o)return;const i=o.threadsById[n];return i?i[r]:void 0}function x(e,t,n){return _(e,t,n,"listedIds")}function T(e,t,n){return _(e,t,n,"outlyingIds")}function N(e,t,n,r){switch(r){case"thread":return O(e,t,n);case"pinned":return L(e,t);case"scheduled":return D(e,t)}}function O(e,t,n){return _(e,t,n,"viewportIds")}function L(e,t){return _(e,t,i._f,"pinnedIds")}function D(e,t){return _(e,t,i._f,"scheduledIds")}function B(e,t,n){return _(e,t,n,"scrollOffset")}function R(e,t,n){return _(e,t,n,"replyingToId")}function F(e,t,n){return _(e,t,n,"editingId")}function $(e,t,n){return _(e,t,n,"editingDraft")}function Z(e,t){return _(e,t,i._f,"editingScheduledId")}function U(e,t){return _(e,t,i._f,"editingScheduledDraft")}function j(e,t,n){return _(e,t,n,"draft")}function V(e,t,n){return _(e,t,n,"noWebPage")}function z(e,t,n){return _(e,t,n,"threadInfo")}function W(e,t,n){return _(e,t,n,"firstMessageId")}function H(e,t,n){return _(e,t,n,"replyStack")}function q(e,t,n){if(n===i._f)return(0,s.Z1)(e,t);const r=z(e,t,n);return r?(0,s.Z1)(e,r.originChannelId||t):void 0}function G(e,t,n){if(n===i._f)return;const r=z(e,t,n);return r?r.topMessageId:void 0}function K(e,t,n){const r=e.messages.byChatId[t];if(!r)return;const{replyToMessageId:o,replyToTopMessageId:i}=n;return o||i?Object.values(r.threadsById).find((e=>e.threadInfo&&(o&&o===e.threadInfo.topMessageId||i&&i===e.threadInfo.topMessageId))):void 0}function J(e,t,n){const r=M(e);if(!r)return!1;const{threadInfo:o}=K(e,t,n)||{};return t===r.chatId&&(r.threadId===i._f||o&&r.threadId===o.threadId)}function Y(e,t,n){const r=O(e,t,n);if(!r||!r.length)return!0;let o;if(n===i._f){const n=(0,s.Z1)(e,t);if(!n||!n.lastMessage)return!0;o=n.lastMessage.id}else{const r=z(e,t,n);if(!r||!r.lastMessageId)return;o=r.lastMessageId}return o>=a.AE&&!Q(e,t,o)||r[r.length-1]>=o}function Q(e,t,n){const r=A(e,t);return r?r[n]:void 0}function X(e,t,n){const r=k(e,t);return r?r[n]:void 0}function ee(e,t,n,r){if("scheduled"===r){const n=Z(e,t);return n?X(e,t,n):void 0}{const r=F(e,t,n);return r?Q(e,t,r):void 0}}function te(e,t){let n;for(const r of Object.values(e.messages.byChatId)){const{byId:e}=r;if(n=Object.values(e).find((e=>e.content.poll&&e.content.poll.id===t)),n)break}return n}function ne(e,t){const{chatId:n,messageId:r}=e.focusedMessage||{};return n===t?r:void 0}function re(e,t){const n=ne(e,t.chatId);return!!n&&(n===t.id||n===t.previousLocalId)}function oe(e,t){const{lastReadOutboxMessageId:n}=(0,s.Z1)(e,t.chatId)||{};return(0,u.CI)(t)||!n||n2&&void 0!==arguments[2]&&arguments[2];return oe(e,t)||n?(0,u.RI)(t):"read"}function ae(e,t){const{senderId:n}=t;if(n)return(0,u.YC)(n)?(0,d.dy)(e,n):(0,s.Z1)(e,n)}function se(e,t){const{forwardInfo:n}=t;if(n)return n.isChannelPost&&n.fromChatId?(0,s.Z1)(e,n.fromChatId):n.senderUserId?(0,d.dy)(e,n.senderUserId)||(0,s.Z1)(e,n.senderUserId):void 0}function de(e,t,n){var r,o,i,a,d;const c=(0,s.Z1)(e,t.chatId);if(!c||c.isRestricted)return{};const l=(0,u.YC)(c.id),f=(0,s.FM)(e,t.chatId),h=(0,u.G9)(c),g=(0,u.ZV)(c),p=(0,u.eA)(c),m=(0,u.CI)(t),v=(0,u.jM)(t),y=(0,u.B4)(t),b=(0,u.Lo)(t),{content:w}=t,I=(f||g&&(0,u.VE)(c,"pinMessages")||p&&(0,u.VE)(c,"editMessages")||(0,S.b)(e.serverTimeOffset)-t.date<172800)&&!(w.sticker||w.contact||w.poll||w.action||w.audio||null!==(r=w.video)&&void 0!==r&&r.isRound||w.location)&&!(0,u.MF)(t)&&!t.viaBotId,C=!m&&!v&&(0,u.Qm)(c,n),E=l||c.isCreator||!p&&!(0,u.Mg)(c,"pinMessages")||(0,u.VE)(c,"pinMessages");let M=!m&&!v&&!b&&E,P=!1;const A=L(e,c.id);M&&(P=Boolean(A&&A.includes(t.id)),M=!P);const k=!m&&!v&&(l||y||h||c.isCreator||(0,u.VE)(c,"deleteMessages")),_=!l&&!y,x=k&&(l&&!f||h&&(y||(0,u.VE)(c,"deleteMessages")||c.isCreator)),T=!m&&!b&&I&&(y||p&&(c.isCreator||(0,u.VE)(c,"editMessages"))),N=!m&&!b,O=Boolean(t.content.sticker),D=O&&function(e,t){const{stickers:n}=e.stickers.favorite;return n&&n.some((e=>{let{id:n}=e;return n===t.id}))}(e,t.content.sticker),B=!b&&O&&!D,R=!b&&D,F=!b,$=!b&&(p||g),Z=!b,U=Boolean((null===(o=w.webPage)||void 0===o?void 0:o.document)||(null===(i=w.webPage)||void 0===i?void 0:i.video)||(null===(a=w.webPage)||void 0===a?void 0:a.photo)||w.audio||w.voice||w.photo||w.video||w.document||w.sticker),j=null===(d=t.content.video)||void 0===d?void 0:d.isGif;return{noOptions:[C,T,M,P,_,k,x,N,B,R,F,$,Z,U,j].every((e=>!e)),canReply:C,canEdit:T,canPin:M,canUnpin:P,canReport:_,canDelete:k,canDeleteForAll:x,canForward:N,canFaveSticker:B,canUnfaveSticker:R,canCopy:F,canCopyLink:$,canSelect:Z,canDownload:U,canSaveGif:j}}function ue(e){const{messageIds:t}=e.selectedMessages||{},{chatId:n,threadId:r}=M(e)||{},o=n&&A(e,n);if(!o||!t||!r)return{};const i=t.map((t=>o[t]&&de(e,o[t],r))).filter(Boolean);return{canDelete:i.every((e=>e.canDelete)),canDeleteForAll:i.every((e=>e.canDeleteForAll))}}function ce(e){const{messageIds:t}=e.selectedMessages||{},{chatId:n,threadId:r}=M(e)||{},o=n&&A(e,n);return!!(o&&t&&r)&&t.map((t=>o[t]&&de(e,o[t],r))).filter(Boolean).every((e=>e.canReport))}function le(e){const{messageIds:t}=e.selectedMessages||{},{chatId:n,threadId:r}=M(e)||{},o=n&&A(e,n);return!!(o&&t&&r)&&t.map((t=>o[t]&&de(e,o[t],r))).filter(Boolean).some((e=>e.canDownload))}function fe(e,t){const n=e.activeDownloads.byChatId[t.chatId];return!!n&&n.includes(t.id)}function he(e,t){return e.activeDownloads.byChatId[t]||E.D}function ge(e,t){var n;return null===(n=e.fileUploads.byMessageLocalId[t.previousLocalId||t.id])||void 0===n?void 0:n.progress}function pe(e,t,n){if(n===i._f){const n=(0,s.Z1)(e,t);if(!n)return;if(!n.lastReadInboxMessageId)return;return n.lastMessage?(0,u.CI)(n.lastMessage)?n.lastMessage.id:Math.min(n.lastMessage.id,n.lastReadInboxMessageId):n.lastReadInboxMessageId}{const r=z(e,t,n);if(!r)return;return r.lastReadInboxMessageId?Math.min(r.lastReadInboxMessageId,r.lastMessageId||1/0):r.topMessageId}}function me(e,t,n){const r=(0,s.Z1)(e,t);if(n===i._f){if(!r)return}else{const r=z(e,t,n);if(!r||void 0!==r.lastMessageId&&r.lastMessageId===r.lastReadInboxMessageId)return}const o=T(e,t,n),d=x(e,t,n),u=A(e,t);if(!u||!o&&!d)return;const c=pe(e,t,n);if(!c&&r&&r.isNotJoined)return;const l=t===a.aw?e.serviceNotifications.reduce(((e,t)=>!t.isUnread&&t.id>e?t.id:e),-1):-1;function f(e){return e.find((e=>(!c||e>c)&&u[e]&&(!u[e].isOutgoing||u[e].isFromScheduled)&&e>l))}if(o){const e=f(o);if(e)return e}if(d){const e=f(d);if(e)return e}}function ve(e){const{forwardMessages:t}=e;return Boolean(t.isModalShown)}function ye(e,t){const n=Object.values(e.chats.byId).find((e=>(0,u.Ru)(e)&&e.lastMessage&&e.lastMessage.id===t));if(n)return n.id;const{byChatId:r}=e.messages;return Object.keys(r).find((n=>{const o=(0,s.Z1)(e,n);return o&&(0,u.Ru)(o)&&r[o.id].byId[t]}))}function be(e){const{selectedMessages:t}=e;return Boolean(t)}function we(e,t){const{messageIds:n}=e.selectedMessages||{};return!!n&&n.includes(t)}function Ie(e,t,n){const r=A(e,t);if(r)return Object.values(r).filter((e=>e.groupedId===n&&e.forwardInfo)).map((e=>{let{forwardInfo:t}=e;return t.fromMessageId}))}function Ce(e,t,n){const r=A(e,t);if(r)return Object.keys(r).map(Number).filter((e=>r[e].groupedId===n))}function Se(e,t,n){const{messageIds:r}=e.selectedMessages||{};if(!r)return!1;const o=Ce(e,t,n);return o&&o.every((e=>r.includes(e)))}function Ee(e){const{messageIds:t}=e.selectedMessages||{};return t?t.length:0}function Me(e,t){const n=(0,s.Z1)(e,t);if(!n)return;if(!(0,s.xo)(e,n))return;const r=A(e,t),o=O(e,t,i._f);if(!r||!o)return;const a=(0,c.dF)(o,(e=>!r[e].isOutgoing&&Boolean(r[e].keyboardButtons))),d=(0,c.dF)(o,(e=>Boolean(r[e].shouldHideKeyboardButtons)));return a&&d&&d>a?void 0:a?r[a]:void 0}function Pe(e,t){const n=(0,s.Z1)(e,t.chatId);if(!n)return;const r=ae(e,t),o=Boolean((0,u.O$)(t)||(0,u.F$)(t)),i=Boolean((0,u.b7)(t)||(0,u.Cg)(t)),a=Boolean((0,u.oP)(t)||(0,u.kd)(t)||(0,u.aE)(t)),{canAutoLoadPhotoFromContacts:d,canAutoLoadPhotoInPrivateChats:c,canAutoLoadPhotoInGroups:l,canAutoLoadPhotoInChannels:f,canAutoLoadVideoFromContacts:h,canAutoLoadVideoInPrivateChats:g,canAutoLoadVideoInGroups:p,canAutoLoadVideoInChannels:m,canAutoLoadFileFromContacts:v,canAutoLoadFileInPrivateChats:y,canAutoLoadFileInGroups:b,canAutoLoadFileInChannels:w}=e.settings.byKey;return o?Ae({global:e,chat:n,sender:r,canAutoLoadMediaFromContacts:d,canAutoLoadMediaInPrivateChats:c,canAutoLoadMediaInGroups:l,canAutoLoadMediaInChannels:f}):i?Ae({global:e,chat:n,sender:r,canAutoLoadMediaFromContacts:h,canAutoLoadMediaInPrivateChats:g,canAutoLoadMediaInGroups:p,canAutoLoadMediaInChannels:m}):!a||Ae({global:e,chat:n,sender:r,canAutoLoadMediaFromContacts:v,canAutoLoadMediaInPrivateChats:y,canAutoLoadMediaInGroups:b,canAutoLoadMediaInChannels:w})}function Ae(e){let{global:t,chat:n,sender:r,canAutoLoadMediaFromContacts:o,canAutoLoadMediaInPrivateChats:i,canAutoLoadMediaInGroups:a,canAutoLoadMediaInChannels:s}=e;const c=Boolean(r&&(r.id===t.currentUserId||(0,d.nM)(t,r)));return Boolean(c&&o||!c&&i&&(0,u.YC)(n.id)||a&&(0,u.Bf)(n)||s&&(0,u.eA)(n))}function ke(e,t){const n=(0,u.b7)(t)||(0,u.Cg)(t);if(!n)return;const{canAutoPlayVideos:r,canAutoPlayGifs:o}=e.settings.byKey,i=n.isGif||n.isRound;return r&&!i||o&&i}function _e(e){return e.settings.byKey.shouldLoopStickers}function xe(e){const{serviceNotifications:t}=e,n=Math.max(...t.map((e=>{let{id:t}=e;return t})));return t.find((e=>{let{id:t}=e;return t===n}))}function Te(e,t){var n;return!!t&&(t.isProtected||(null===(n=(0,s.Z1)(e,t.chatId))||void 0===n?void 0:n.isProtected))}function Ne(e,t,n){var r;if(null!==(r=(0,s.Z1)(e,t))&&void 0!==r&&r.isProtected)return!0;if(!n)return!1;const o=A(e,t);return n.some((e=>{var t;return null===(t=o[e])||void 0===t?void 0:t.isProtected}))}function Oe(e,t){const n=(0,s.Z1)(e,t),r=n&&(0,u.eA)(n)?e.messages.sponsoredByChatId[t]:void 0;return r&&r.expiresAt>=Math.round(Date.now()/1e3)?r:void 0}function Le(e,t){var n,r,o;if(t===a.aw)return;const i=(0,u.YC)(t),d=null===(n=e.appConfig)||void 0===n?void 0:n.defaultReaction,{availableReactions:c}=e;if(!d||null==c||!c.some((e=>e.reaction===d&&!e.isInactive)))return;if(i)return d;const l=null===(r=(0,s.Z1)(e,t))||void 0===r||null===(o=r.fullInfo)||void 0===o?void 0:o.enabledReactions;return null!=l&&l.includes(d)?d:void 0}function De(e){const{chatId:t,threadId:n}=M(e)||{};if(!t||!n)return;const r=_(e,t,n,"viewportIds");return r?r.map((n=>{const{senderId:r}=Q(e,t,n)||{};return r?(0,d.dy)(e,r):void 0})).filter(Boolean):void 0}function Be(e){var t;return"scheduled"===(null===(t=M(e))||void 0===t?void 0:t.type)}function Re(e,t){var n;const r=(0,s.FM)(e,t),o=t===a.FV&&(0,s.IK)(e,t);return Boolean(!r&&!o&&(0,u.YC)(t)&&(null===(n=(0,d.ss)(e,t))||void 0===n?void 0:n.wasOnline))}function Fe(e){const{chatId:t,threadId:n}=M(e)||{};if(!t||!n)return;const r=(0,u.uw)(t,n),o=e.localTextSearch.byChatThreadKey[r];return o&&o.isActive?o:void 0}function $e(e){const{chatId:t}=M(e)||{};if(t)return e.localMediaSearch.byChatId[t]}function Ze(e,t){return e.statistics.byChatId[t]}function Ue(e,t){return e.management.byChatId[t]}function je(e){const{chatId:t,threadId:n}=M(e)||{};if(!t||!n)return;if((0,u.YC)(t))return"user";const r=(0,s.Z1)(e,t);return r?(0,u.Bf)(r)?"group":"channel":void 0}function Ve(e){const{mediaViewer:t}=e;return Boolean(t.messageId||t.avatarOwnerId)}function ze(e){return function(e){const{pollResults:t}=e;return Boolean(t.messageId)}(e)?r.qt.PollResults:!o.wB&&Fe(e)?r.qt.Search:function(e){const{chatId:t,threadId:n}=M(e)||{};if(!t||!n)return;const r=e.management.byChatId[t];return r&&r.isActive?r:void 0}(e)?r.qt.Management:function(e){var t;if(!e.isStatisticsShown)return!1;const{chatId:n}=M(e)||{},r=n?(0,s.Z1)(e,n):void 0;return null==r||null===(t=r.fullInfo)||void 0===t?void 0:t.canViewStatistics}(e)?r.qt.Statistics:void 0!==l(e).query?r.qt.StickerSearch:void 0!==f(e).query?r.qt.GifSearch:e.newChatMembersProgress!==r.WB.Closed?r.qt.AddingMembers:e.isChatInfoShown&&M(e)?r.qt.ChatInfo:void 0}function We(e){return void 0!==ze(e)}function He(e){const{theme:t,shouldUseSystemTheme:n}=e.settings.byKey;return n?(0,o.vn)():t}function qe(e){return e.globalSearch.query}function Ge(e){return e.payment.chatId}function Ke(e){return e.payment.messageId}function Je(e){return e.payment.formId}function Ye(e){return e.payment.requestId}function Qe(e){var t;return null===(t=e.payment.nativeParams)||void 0===t?void 0:t.publishableKey}function Xe(e){var t;return null===(t=e.payment.nativeParams)||void 0===t?void 0:t.publicToken}function et(e){return e.payment.stripeCredentials}function tt(e){return e.payment.smartGlocalCredentials}function nt(e){return e.settings.byKey}function rt(e){return e.settings.notifyExceptions}},6087:(e,t,n)=>{"use strict";function r(e,t){return e.users.byId[t]}function o(e,t){return e.users.statusesById[t]}function i(e,t){var n;const o=r(e,t);return null==o||null===(n=o.fullInfo)||void 0===n?void 0:n.isBlocked}function a(e,t){const n=t.replace(/[^0-9]/g,"");return Object.values(e.users.byId).find((e=>(null==e?void 0:e.phoneNumber)===n))}function s(e,t){return e.contactList&&e.contactList.userIds.includes(t.id)}n.d(t,{Bk:()=>a,dy:()=>r,nM:()=>s,s4:()=>i,ss:()=>o})},5332:(e,t,n)=>{"use strict";n.d(t,{Z:()=>o});var r=n(4050);function o(e,t){(0,r.d4)((()=>(e&&!document.hasFocus()&&e(),e&&window.addEventListener("blur",e),t&&window.addEventListener("focus",t),()=>{t&&window.removeEventListener("focus",t),e&&window.removeEventListener("blur",e)})),[e,t])}},274:(e,t,n)=>{"use strict";n.d(t,{Z:()=>i});var r=n(4050),o=n(7204);const i=(e,t,n)=>{const i=(0,o.Z)(t);return(0,r.d4)((()=>e(i||[])),t,n)}},706:(e,t,n)=>{"use strict";n.d(t,{Z:()=>o});var r=n(4050);const o=function(){let e=arguments.length>0&&void 0!==arguments[0]&&arguments[0];const[t,n]=(0,r.eJ)(e),o=(0,r.I4)((()=>{n(!0)}),[]),i=(0,r.I4)((()=>{n(!1)}),[]);return[t,o,i]}},5326:(e,t,n)=>{"use strict";n.d(t,{Z:()=>o});var r=n(4050);const o=()=>{const[,e]=(0,r.eJ)(!1);return(0,r.I4)((()=>{e((e=>!e))}),[])}},8674:(e,t,n)=>{"use strict";n.d(t,{YW:()=>u,ZP:()=>c,zG:()=>d});var r=n(4050);const o="tt-event-heavy-animation-start",i="tt-event-heavy-animation-end";let a,s=!1;function d(){return s}function u(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:1e3;function t(){a&&(clearTimeout(a),a=void 0),s=!1,document.dispatchEvent(new Event(i))}return s||(s=!0,document.dispatchEvent(new Event(o))),a&&(clearTimeout(a),a=void 0),a=window.setTimeout(t,e),t}const c=function(e,t){let n=arguments.length>2&&void 0!==arguments[2]&&arguments[2];(0,r.d4)((()=>{if(!n)return s&&e(),document.addEventListener(o,e),document.addEventListener(i,t),()=>{document.removeEventListener(i,t),document.removeEventListener(o,e)}}),[n,t,e])}},6590:(e,t,n)=>{"use strict";n.d(t,{Oy:()=>d,Wv:()=>l,ZP:()=>h});var r=n(4050),o=n(7361),i=n(7204),a=n(3555),s=n(782);const d=window.location.hash,u=`${window.location.pathname}${window.location.search}`,c={currentIndex:0,nextStateIndexToReplace:-1,isHistoryAltered:!1,isDisabled:!1,isEdge:!1,currentIndexes:[]},l=()=>{c.isDisabled=!0},f=()=>{c.isEdge&&setTimeout((()=>{c.isEdge=!1}),350)};function h(e,t,n,o){let d=arguments.length>4&&void 0!==arguments[4]&&arguments[4],l=arguments.length>5?arguments[5]:void 0;const f=(0,r.sO)(-1),h=(0,r.sO)(!1),g=(0,i.Z)(e),p=(0,r.sO)(!0),m=(0,r.sO)([]),v=(0,i.Z)(l),y=(0,r.sO)(!1),b=(0,r.I4)((function(){let t=arguments.length>0&&void 0!==arguments[0]&&arguments[0];if(l){const e=v||[];if(e.length{const e=++c.currentIndex;c.currentIndexes.push(e),window.history.pushState({index:e,state:o},"",`#${l[l.length-1]}`),m.current.push({index:e,hash:l[l.length-1]})}),0);else{const t=e.length-l.length;if(y.current)y.current=!1;else{if(l.length!==m.current.length&&t>0){const e=m.current[m.current.length-t-1];let n=t;if(e){const t=c.currentIndexes.findIndex((t=>t===e.index));n=c.currentIndexes.length-t-1}c.isHistoryAltered=!0,window.history.go(-n),m.current.splice(m.current.length-t-1,t).forEach((e=>{let{index:t}=e;c.currentIndexes.splice(c.currentIndexes.indexOf(t),1)}))}l.length>0&&setTimeout((()=>{const e=++c.currentIndex;c.currentIndexes[c.currentIndexes.length-1]=e,window.history.replaceState({index:e,state:o},"",`${u}#${l[l.length-1]}`),m.current[m.current.length-1]={index:e,hash:l[l.length-1]}}),0)}}}else e&&!t&&(p.current=!1,h.current?(h.current=!1,c.currentIndexes.push(f.current)):setTimeout((()=>{const e=++c.currentIndex;c.currentIndexes.push(e),window.history[c.currentIndexes.includes(c.nextStateIndexToReplace-1)&&0!==window.history.state.index&&c.nextStateIndexToReplace===e&&!d?"replaceState":"pushState"]({index:e,state:o},""),f.current=e,d&&(c.nextStateIndexToReplace=c.currentIndex+1)}),0)),!t&&e||p.current||(f.current!==c.currentIndex&&d||(c.isHistoryAltered=!0,window.history.back(),setTimeout((()=>{c.nextStateIndexToReplace=-1}),400)),c.currentIndexes.splice(c.currentIndexes.indexOf(f.current),1),p.current=!0)}),[o,l,e,v,d]);return(0,r.d4)((()=>{const r=e=>{if(c.isHistoryAltered)return void setTimeout((()=>{c.isHistoryAltered=!1}),0);const{index:r}=e.state,o=r||0;try{const r=l?m.current[m.current.length-1].index:f.current,i=c.currentIndexes[c.currentIndexes.indexOf(r)-1];if(c.isDisabled)return;!p.current&&(0===o||o===i)||l&&(0===o||o===i)?(l&&(y.current=!0,m.current.pop()),c.currentIndexes.splice(c.currentIndexes.indexOf(r),1),t&&(c.isEdge&&(0,a.Sv)().disableHistoryAnimations(),t(!c.isEdge),p.current=!0)):o===r&&p.current&&n&&!l&&(h.current=!0,c.isEdge&&(0,a.Sv)().disableHistoryAnimations(),n(e.state.state))}catch(e){}},o=l?!v||!(0,s.et)(v,l):g!==e;return!c.isDisabled&&o&&b(),window.addEventListener("popstate",r),()=>window.removeEventListener("popstate",r)}),[o,b,l,e,t,n,v,g,d]),{forceClose:()=>b(!0)}}o.cj&&(window.addEventListener("touchstart",(e=>{const t=e.touches[0].pageX;(t<=300||t>=window.innerWidth-300)&&(c.isEdge=!0)})),window.addEventListener("touchend",f),window.addEventListener("popstate",f)),window.history.replaceState({index:c.currentIndex},"",u)},2313:(e,t,n)=>{"use strict";n.d(t,{Z:()=>o});var r=n(4050);const o=(e,t,n,o,i)=>{const[a,s]=(0,r.eJ)(-1);return(0,r.d4)((()=>{s(-1);const n=e.current;t&&n&&!i&&(n.tabIndex=-1,n.focus())}),[e,t,i]),(0,r.I4)((t=>{const r=e.current;if(!r)return;if(13===t.keyCode&&n)return void n(a);if(38!==t.keyCode&&40!==t.keyCode)return;const i=document.activeElement,d=Array.from(o?r.querySelectorAll(o):r.children);let u=i&&d.indexOf(i)||a;if(38===t.keyCode&&u>0)u--;else if(40===t.keyCode&&u{"use strict";n.d(t,{Z:()=>a});var r=n(711),o=n(5326),i=n(9290);const a=()=>{const e=(0,o.Z)();return(0,i.Z)((()=>r.ll(e)),[e]),r.i0}},8778:(e,t,n)=>{"use strict";n.d(t,{Z:()=>a});var r=n(4050),o=n(9203),i=n(5326);const a=function(e,t){let n=arguments.length>2&&void 0!==arguments[2]&&arguments[2],a=arguments.length>3&&void 0!==arguments[3]&&arguments[3];const s=(0,o.o5)(e,t),d=(0,i.Z)();return(0,r.d4)((()=>{if(a)return(0,o.Qt)(d)}),[a,d]),(0,r.d4)((()=>{n||s||(0,o.$y)(e,t).then(d)}),[e,d,s,t,n]),s}},9290:(e,t,n)=>{"use strict";n.d(t,{Z:()=>o});var r=n(7204);const o=(e,t)=>{const n=(0,r.Z)(t);n&&!t.some(((e,t)=>e!==n[t]))||e(n||[])}},7204:(e,t,n)=>{"use strict";n.d(t,{Z:()=>o});var r=n(4050);const o=function(e,t){const n=(0,r.sO)(),{current:o}=n;return t&&void 0===e||(n.current=e),o}},1212:(e,t,n)=>{"use strict";n.d(t,{Z:()=>i});var r=n(4050),o=n(6752);const i=function(){let e=arguments.length>0&&void 0!==arguments[0]&&arguments[0],t=arguments.length>1?arguments[1]:void 0,n=arguments.length>2&&void 0!==arguments[2]&&arguments[2],i=arguments.length>3&&void 0!==arguments[3]?arguments[3]:"fast",a=arguments.length>4&&void 0!==arguments[4]&&arguments[4];const[s,d]=(0,r.eJ)(!e),u=(0,r.sO)(),[c,l]=(0,r.eJ)(e&&n);if(e)d(!1),l(!0),u.current&&(window.clearTimeout(u.current),u.current=void 0);else if(l(!1),!s&&!u.current){const e=()=>{d(!0),t&&t(),u.current=void 0};a?e():u.current=window.setTimeout(e,350)}const f=c&&!(a&&!e),h=Boolean(u.current),g=e||h,p=(0,o.Z)(i&&"opacity-transition",i,f&&"open",g&&"shown",h&&"closing");return{shouldRender:g,transitionClassNames:p}}},8758:(e,t,n)=>{"use strict";n.d(t,{Z:()=>o});var r=n(4050);function o(e,t,n){(0,r.d4)((()=>{const r=e=>{const r=t.current,o=e.target;r&&o&&(r.contains(e.target)&&!o.classList.contains("backdrop")||(e.preventDefault(),e.stopPropagation(),n&&n()))};return e&&n&&document.addEventListener("mousedown",r),()=>{document.removeEventListener("mousedown",r)}}),[e,t,n])}},5247:(e,t,n)=>{"use strict";n.d(t,{Oo:()=>d,lQ:()=>g,xg:()=>u});var r=n(3716);const o=new Set(["scroll","mouseenter","mouseleave"]),i={},a={},s=new Map;function d(e,t,n){let r=arguments.length>3&&void 0!==arguments[3]&&arguments[3];const o=c(t,e);l(o,e,r)?f(o,e,n):e.addEventListener(o,n,r)}function u(e,t,n){let r=arguments.length>3&&void 0!==arguments[3]&&arguments[3];const o=c(t,e);l(o,e,r)?h(o,e):e.removeEventListener(o,n,r)}function c(e,t){const n=e.replace(/^on/,"").replace(/Capture$/,"").toLowerCase();return"change"===n&&"SELECT"!==t.tagName?"input":"doubleclick"===n?"dblclick":"focus"===n?"focusin":"blur"===n?"focusout":n}function l(e,t,n){return!n&&!o.has(e)&&"VIDEO"!==t.tagName&&"IFRAME"!==t.tagName}function f(e,t,n){i[e]||(i[e]=0,document.addEventListener(e,p)),function(e){return a[e]||(a[e]=new Map),a[e]}(e).set(t,n),function(e){const t=s.get(e);if(t)return t;const n=new Set;return s.set(e,n),n}(t).add(e),i[e]++}function h(e,t){i[e]--,i[e]||document.removeEventListener(e,p),a[e].delete(t),s.get(t).delete(e)}function g(e){const t=s.get(e);t&&(t.forEach((t=>h(t,e))),s.delete(e))}function p(e){const t=a[e.type];if(t){let n=!1,r=e.target;const o=()=>{n=!0},i=()=>{e.preventDefault()},a=new Proxy(e,{get:(e,t)=>"currentTarget"===t?r:"stopPropagation"===t||"stopImmediatePropagation"===t?o:"preventDefault"===t?i:Reflect.get(e,t)});for(;r&&r!==document.body;){const e=t.get(r);if(e&&(e(a),n))return;r=r.parentNode}}}r.eM&&document.addEventListener("dblclick",(()=>{const e=Object.keys(i).length,t=Object.values(i).reduce(((e,t)=>e+t),0),n=Object.keys(a).length,r=Object.values(a).reduce(((e,t)=>e+t.size),0),o=s.size,d=Array.from(s.values()).reduce(((e,t)=>e+t.size),0);console.warn("DELEGATED EVENTS STATS",{delegatedHandlersCount1:t,delegatedHandlersCount2:r,delegatedEventTypesCount:d,delegationRegistriesCount:n,delegationElementsCount:o,documentListenersCount:e})}))},2916:(e,t,n)=>{"use strict";n.d(t,{Z:()=>I});var r=n(4050),o=n(6926),i=n(3716),a=n(5247),s=n(782);const d=new Set(["key","ref","teactFastList","teactOrderKey"]),u=new Set(["dir","role"]),c={autoPlay:"autoplay",autoComplete:"autocomplete"},l={};function f(e,t,n,o,a){let{skipComponentUpdate:s=!1,forceIndex:d=!1,fragment:u,moveDirection:c}=arguments.length>5&&void 0!==arguments[5]?arguments[5]:{};const l=t&&(0,r.op)(t),f=n&&(0,r.op)(n);if(!s&&l&&f&&!(0,r.k)(t,n)&&(n=g(t,n)),!s&&f&&n.componentInstance.isMounted&&p(n,o,a,e),t===n)return n;if(i.eM&&n){const e=(0,r.U9)(n);if(e&&(!t||e!==(0,r.U9)(t)))throw new Error("[Teact] Cached virtual element was moved within tree")}if(!t&&n){f&&(n=h(n,o,a,e));const t=m(n);(0,r.CD)(n,t),d&&e.childNodes[a]?e.insertBefore(t,e.childNodes[a]):(u||e).appendChild(t)}else if(t&&!n)e.removeChild((0,r.U9)(t)),(0,r.Zb)(t);else if(t&&n)if((0,r.k)(t,n)){f&&(n=h(n,o,a,e));const i=m(n);(0,r.CD)(n,i),e.replaceChild(i,(0,r.U9)(t)),(0,r.Zb)(t)}else{const o=l&&f,i=(0,r.U9)(t);if(o||((0,r.CD)(n,i),(0,r.CD)(t,void 0),"props"in t&&"props"in n&&(n.props.ref=t.props.ref)),(0,r.O_)(n)){if(c){const t=i,n=e.childNodes["up"===c?a:a+1];n?e.insertBefore(t,n):(u||e).appendChild(t)}o||b(t,n,i),n.children=v(t,n,o?e:i)}}return n}function h(e,t,n,o){if(!(0,r.op)(e))return e;const{componentInstance:i}=e;if(!i.isMounted){p(e=(0,r.Hb)(i),t,n,o);const a=e.children[0];(0,r.op)(a)&&(e.children=[h(a,e,0,o)]),i.isMounted=!0}return e}function g(e,t){return e.componentInstance.props=t.componentInstance.props,(0,r.SO)(e.componentInstance)}function p(e,t,n,r){const{componentInstance:o}=e;o.onUpdate=()=>{t.children[n]=f(r,t.children[n],o.$element,t,n,{skipComponentUpdate:!0})}}function m(e){if((0,r.V2)(e))return document.createTextNode("");if((0,r.iB)(e))return document.createTextNode(e.value);if((0,r.op)(e))return m(e.children[0]);const{tag:t,props:n,children:o=[]}=e,i=document.createElement(t);return"object"==typeof n.ref&&(n.ref.current=i),Object.entries(n).forEach((e=>{let[t,r]=e;void 0!==n[t]&&w(i,t,r)})),e.children=o.map(((t,n)=>f(i,void 0,t,e,n))),i}function v(e,t,n){if(i.eM&&function(e){const t=e[0];if(t&&"props"in t&&void 0!==t.props.key){const t=e.reduce(((e,t)=>("props"in t&&t.props.key&&e.push(t.props.key),e)),[]);if(t.length!==(0,s.Tw)(t).length)throw new Error("[Teact] Children keys are not unique")}}(t.children),t.props.teactFastList)return function(e,t,n){const o=new Set(t.children.map((e=>{const t="props"in e&&e.props.key;return i.eM&&(0,r.O_)(e)&&null==t&&console.warn("Missing `key` in `teactFastList`"),t})));let a=0;const s=e.children.reduce(((e,r,i)=>{let s="props"in r?r.props.key:void 0;const d=null!=s;if(d&&!o.has(s))return f(n,r,void 0,t,-1),e;if(!d){const o=t.children[i],a=o&&"props"in o?o.props.key:void 0;if(!o||a)return f(n,r,void 0,t,-1),e;s=`__indexKey#${i}`}return e[s]={$element:r,index:a++,order:"props"in r?r.props.teactOrderKey:void 0},e}),{});let d,u,c=[],l=0;return t.children.forEach(((e,r)=>{const o="props"in e?e.props.key:`__indexKey#${r}`,i=s[o];if(!i)return d||(d=[],u=r),void d.push(e);d&&(c=c.concat(y(d,u,n,t)),u=void 0,d=void 0);const a="props"in e?e.props.teactOrderKey:void 0,h=i.index!==l&&i.order!==a,g=h&&l>i.index;h&&!g||l++,c.push(f(n,i.$element,e,t,r,{forceIndex:!0,moveDirection:h?g?"down":"up":void 0}))})),d&&(c=c.concat(y(d,u,n,t))),c}(e,t,n);const o=e.children.length,a=t.children.length,d=Math.max(o,a),u=[],c=a>o+1?document.createDocumentFragment():void 0;for(let r=0;r=o?{fragment:c}:void 0);i&&u.push(i)}return c&&n.appendChild(c),u}function y(e,t,n,r){if(1===e.length)return[f(n,void 0,e[0],r,t,{forceIndex:!0})];if(e.length>1){const o=document.createDocumentFragment(),i=e.map((e=>f(n,void 0,e,r,t,{fragment:o})));return n.childNodes[t]?n.insertBefore(o,n.childNodes[t]):n.appendChild(o),i}throw new Error("Unexpected input")}function b(e,t,n){const r=Object.entries(e.props),o=Object.entries(t.props);r.forEach((e=>{let[r,o]=e;const i=t.props[r];void 0!==o&&(void 0===i||o!==i&&r.startsWith("on"))&&function(e,t,n){"className"===t?e.className="":"value"===t?e.value="":"style"===t?e.style.cssText="":"dangerouslySetInnerHTML"===t?e.innerHTML="":t.startsWith("on")?(0,a.xg)(e,t,n,t.endsWith("Capture")):t.startsWith("data-")||t.startsWith("aria-")||u.has(t)?e.removeAttribute(t):d.has(t)||delete e[c[t]||t]}(n,r,o)})),o.forEach((t=>{let[r,o]=t;const i=e.props[r];void 0!==o&&o!==i&&w(n,r,o)}))}function w(e,t,n){"className"===t?e.className=n:"value"===t?e.value!==n&&(e.value=n):"style"===t?e.style.cssText=n:"dangerouslySetInnerHTML"===t?e.innerHTML=n.__html:t.startsWith("on")?(0,a.Oo)(e,t,n,t.endsWith("Capture")):t.startsWith("data-")||t.startsWith("aria-")||u.has(t)?e.setAttribute(t,n):d.has(t)||(e[c[t]||t]=n)}const I={render:function(e,t){if(!t)return;let n=t.getAttribute("data-teact-head-id");n||(n=(0,o.Z)(l),l[n]={children:[]},t.setAttribute("data-teact-head-id",n));const r=l[n];r.children=[f(t,r.children[0],e,r,0)]}}},4050:(e,t,n)=>{"use strict";n.d(t,{CD:()=>O,Hb:()=>_,I4:()=>$,O_:()=>v,SO:()=>P,U9:()=>N,V2:()=>h,X$:()=>U,Ye:()=>F,ZP:()=>j,Zb:()=>k,bt:()=>R,d4:()=>B,eJ:()=>L,iB:()=>g,k:()=>A,op:()=>m,sO:()=>Z});var r=n(3716),o=n(9118),i=n(782),a=n(275),s=n(3592),d=n(5247);let u;!function(e){e[e.Empty=0]="Empty",e[e.Text=1]="Text",e[e.Tag=2]="Tag",e[e.Component=3]="Component"}(u||(u={}));const c=Symbol("Fragment"),l=new Set(["TeactMemoWrapper","TeactNContainer","Button","ListItem","MenuItem"]);let f;function h(e){return e.type===u.Empty}function g(e){return e.type===u.Text}function p(e){return e.type===u.Tag}function m(e){return e.type===u.Component}function v(e){return p(e)||m(e)}function y(e,t){for(var n=arguments.length,r=new Array(n>2?n-2:0),o=2;o1&&void 0!==arguments[1]?arguments[1]:[];const{props:n}=e;return{componentInstance:e,type:u.Component,props:n,children:t}}function I(e,t,n){return{type:u.Tag,tag:e,props:t,children:C(n).map(E)}}function C(e){let t=e.length-1;for(;t>=0&&S(e[t]);t--);return t+17&&console.warn(`[Teact] Slow component render: ${n}, ${Math.round(t)} ms`),M[n].renderTimes.push(t),M[n].renderCount++}}catch(t){(0,s.S)(t),o=e.renderedValue}if(e.isMounted&&o===e.renderedValue)return e.$element;e.renderedValue=o;const i=E(o);return e.$element=w(e,[i]),e.$element}function A(e,t){return typeof e!=typeof t||e.type!==t.type||(g(e)&&g(t)?e.value!==t.value:p(e)&&p(t)?e.tag!==t.tag||e.props.key!==t.props.key:!(!m(e)||!m(t)||e.componentInstance.Component===t.componentInstance.Component&&e.props.key===t.props.key))}function k(e){if(m(e))(t=e.componentInstance).isMounted&&(t.hooks.memos.byCursor.forEach((e=>{e.current=void 0})),t.hooks.effects.byCursor.forEach((e=>{let{cleanup:t}=e;if("function"==typeof t)try{t()}catch(e){(0,s.S)(e)}})),t.isMounted=!1,function(e){e.hooks.effects.byCursor.forEach((e=>{e.cleanup=void 0,e.effect=void 0,e.dependencies=void 0})),e.hooks.state.byCursor.forEach((e=>{e.value=void 0,e.nextValue=void 0,e.setter=void 0})),e.hooks.memos.byCursor.forEach((e=>{e.dependencies=void 0})),e.hooks=void 0,e.$element=void 0,e.renderedValue=void 0,e.Component=void 0,e.props=void 0,e.forceUpdate=void 0,e.onUpdate=void 0}(t));else if(p(e)&&(e.target&&(0,d.lQ)(e.target),e.props.ref&&(e.props.ref.current=void 0)),e.target&&(e.target=void 0),!v(e))return;var t;e.children.forEach(k)}function _(e){return P(e),e.isMounted=!0,e.$element}function x(e){e.isMounted&&(e.hooks.state.byCursor.forEach((e=>{e.value=e.nextValue})),e.prepareForFrame=(0,o.wT)((()=>x(e))),e.forceUpdate=(0,o.mS)((()=>T(e))))}function T(e){if(!e.isMounted||!e.onUpdate)return;const t=e.$element;P(e),e.$element!==t&&e.onUpdate()}function N(e){if(m(e)){const t=e.children[0];return t?N(t):void 0}return e.target}function O(e,t){m(e)?O(e.children[0],t):e.target=t}function L(e){const{cursor:t,byCursor:n}=f.hooks.state;var i;return void 0===n[t]&&(n[t]={value:e,nextValue:e,setter:(i=f,e=>{n[t].nextValue!==e&&(n[t].nextValue="function"==typeof e?e(n[t].value):e,i.prepareForFrame&&i.forceUpdate||(i.prepareForFrame=(0,o.wT)((()=>x(i))),i.forceUpdate=(0,o.mS)((()=>T(i)))),i.prepareForFrame(),i.forceUpdate(),r.ZT&&"TeactNContainer"!==i.name&&console.log("[Teact.useState]",i.name,i.Component&&i.Component.DEBUG_contentComponentName?`> ${i.Component.DEBUG_contentComponentName}`:"",`Forced update at cursor #${t}, next value: `,n[t].nextValue))})}),f.hooks.state.cursor++,[n[t].value,n[t].setter]}function D(e,t,n,o,i){const{cursor:a,byCursor:d}=f.hooks.effects,u=f;function c(){if(!u.isMounted)return;const{cleanup:e}=d[a];if("function"==typeof e)try{let t;if(r.eM&&(t=performance.now()),e(),r.eM){const e=performance.now()-t,n=u.name;e>7&&console.warn(`[Teact] Slow cleanup at effect cursor #${a}: ${n}, ${Math.round(e)} ms`)}}catch(e){(0,s.S)(e)}}function l(){if(!u.isMounted)return;let e;if(r.eM&&(e=performance.now()),d[a].cleanup=n(),r.eM){const t=performance.now()-e,n=u.name;t>7&&console.warn(`[Teact] Slow effect at cursor #${a}: ${n}, ${Math.round(t)} ms`)}}if(void 0!==d[a]&&o&&d[a].dependencies){if(o.some(((e,t)=>e!==d[a].dependencies[t]))){if(i){const e=o.reduce(((e,t,n)=>{const r=d[a].dependencies[n];return t!==r&&e.push(`${n}: ${r} => ${t}`),e}),[]);console.log(`[Teact] Effect "${i}" caused by dependencies.`,e.join(", "))}t(c),e(l)}}else i&&console.log(`[Teact] Effect "${i}" caused by missing dependencies.`),t(c),e(l);d[a]={effect:n,dependencies:o,cleanup:d[a]?d[a].cleanup:void 0},f.hooks.effects.cursor++}function B(e,t,n){return D(o.T2,o.D0,e,t,n)}function R(e,t,n){return D(o.R3,o.zD,e,t,n)}function F(e,t,n){const{cursor:o,byCursor:i}=f.hooks.memos;let{current:s}=i[o]||{};return(void 0===i[o]||t.some(((e,t)=>e!==i[o].dependencies[t])))&&(r.eM&&n&&console.log(`[Teact.useMemo] ${f.name} (${n}): Update is caused by:`,i[o]?(0,a.c)(t,i[o].dependencies).join(", "):"[first render]"),s=e()),i[o]={current:s,dependencies:t},f.hooks.memos.cursor++,s}function $(e,t,n){return F((()=>e),t,n)}function Z(e){return F((()=>({current:e})),[])}function U(e,t){return function(n){return F((()=>y(e,n)),Object.values(n),t)}}document.addEventListener("dblclick",(()=>{console.warn("COMPONENTS",(0,i.Xo)(Object.values(M),"renderCount","desc"))}));const j={createElement:y,Fragment:c}},5116:(e,t,n)=>{"use strict";n.d(t,{Iq:()=>M,Rd:()=>I,gP:()=>A,ll:()=>E});var r=n(4050),o=n(3716),i=n(5326),a=n(6926),s=n(9118),d=n(275),u=n(782),c=n(3592),l=n(8674);function f(){return f=Object.assign||function(e){for(var t=1;t7&&console.warn(`[TeactN] Slow containers update: ${Math.round(t)} ms`)}}],m={},v=new Map,y=(0,s.$6)(b);function b(){let e=arguments.length>0&&void 0!==arguments[0]&&arguments[0];e||!(0,l.zG)()?p.forEach((e=>e(h))):(0,s.T2)(y)}function w(e,t){"object"==typeof e&&e!==h&&(h=e,null!=t&&t.forceSyncOnIOs?b(!0):y(null==t?void 0:t.forceOnHeavyAnimation))}function I(){return h}function C(){return m}function S(e,t){g[e]||(g[e]=[],m[e]=(t,n)=>{!function(e,t,n){var r;null===(r=g[e])||void 0===r||r.forEach((e=>{const r=e(h,m,t);r&&("function"==typeof r.then?r.then((e=>{e&&w(e,n)})):w(r,n))}))}(e,t,n)}),g[e].push(t)}function E(e){p.push(e)}function M(e){const t=p.indexOf(e);-1!==t&&p.splice(t,1)}function P(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:()=>({});return t=>function n(o){n.DEBUG_contentComponentName=t.name;const[s]=(0,r.eJ)((0,a.Z)(v)),u=(0,i.Z)();(0,r.d4)((()=>()=>{v.delete(s)}),[s]);let l=v.get(s);if(l||(l={mapStateToProps:e,ownProps:o,areMappedPropsChanged:!1,forceUpdate:u,DEBUG_updates:0,DEBUG_componentName:t.name},v.set(s,l)),l.areMappedPropsChanged&&(l.areMappedPropsChanged=!1),!l.mappedProps||!(0,d.Z)(l.ownProps,o)){l.ownProps=o;try{l.mappedProps=e(h,o)}catch(e){(0,c.S)(e)}}return r.ZP.createElement(t,f({},l.mappedProps,o))}}function A(){return{getGlobal:I,setGlobal:w,getActions:C,addActionHandler:S,withGlobal:P}}o.eM&&(window.getGlobal=I,document.addEventListener("dblclick",(()=>{console.warn("GLOBAL CONTAINERS",(0,u.Xo)(Array.from(v.values()).map((e=>{let{DEBUG_componentName:t,DEBUG_updates:n}=e;return{DEBUG_componentName:t,DEBUG_updates:n}})),"DEBUG_updates","desc"))})))},3681:(e,t,n)=>{"use strict";n.d(t,{Z:()=>a,l:()=>i});const r=/\uFE0F/g,o=String.fromCharCode(8205);function i(e){return e.indexOf(o)<0?e.replace(r,""):e}const a=/(?:\ud83d\udc68\ud83c\udffb\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83d\udc68\ud83c[\udffb-\udfff]|\ud83d\udc68\ud83c\udffc\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83d\udc68\ud83c[\udffb-\udfff]|\ud83d\udc68\ud83c\udffd\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83d\udc68\ud83c[\udffb-\udfff]|\ud83d\udc68\ud83c\udffe\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83d\udc68\ud83c[\udffb-\udfff]|\ud83d\udc68\ud83c\udfff\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83d\udc68\ud83c[\udffb-\udfff]|\ud83d\udc69\ud83c\udffb\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83d\udc68\ud83c[\udffb-\udfff]|\ud83d\udc69\ud83c\udffb\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83d\udc69\ud83c[\udffb-\udfff]|\ud83d\udc69\ud83c\udffc\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83d\udc68\ud83c[\udffb-\udfff]|\ud83d\udc69\ud83c\udffc\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83d\udc69\ud83c[\udffb-\udfff]|\ud83d\udc69\ud83c\udffd\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83d\udc68\ud83c[\udffb-\udfff]|\ud83d\udc69\ud83c\udffd\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83d\udc69\ud83c[\udffb-\udfff]|\ud83d\udc69\ud83c\udffe\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83d\udc68\ud83c[\udffb-\udfff]|\ud83d\udc69\ud83c\udffe\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83d\udc69\ud83c[\udffb-\udfff]|\ud83d\udc69\ud83c\udfff\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83d\udc68\ud83c[\udffb-\udfff]|\ud83d\udc69\ud83c\udfff\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83d\udc69\ud83c[\udffb-\udfff]|\ud83e\uddd1\ud83c\udffb\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83e\uddd1\ud83c[\udffc-\udfff]|\ud83e\uddd1\ud83c\udffc\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83e\uddd1\ud83c[\udffb\udffd-\udfff]|\ud83e\uddd1\ud83c\udffd\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83e\uddd1\ud83c[\udffb\udffc\udffe\udfff]|\ud83e\uddd1\ud83c\udffe\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83e\uddd1\ud83c[\udffb-\udffd\udfff]|\ud83e\uddd1\ud83c\udfff\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83e\uddd1\ud83c[\udffb-\udffe]|\ud83d\udc68\ud83c\udffb\u200d\u2764\ufe0f\u200d\ud83d\udc68\ud83c[\udffb-\udfff]|\ud83d\udc68\ud83c\udffb\u200d\ud83e\udd1d\u200d\ud83d\udc68\ud83c[\udffc-\udfff]|\ud83d\udc68\ud83c\udffc\u200d\u2764\ufe0f\u200d\ud83d\udc68\ud83c[\udffb-\udfff]|\ud83d\udc68\ud83c\udffc\u200d\ud83e\udd1d\u200d\ud83d\udc68\ud83c[\udffb\udffd-\udfff]|\ud83d\udc68\ud83c\udffd\u200d\u2764\ufe0f\u200d\ud83d\udc68\ud83c[\udffb-\udfff]|\ud83d\udc68\ud83c\udffd\u200d\ud83e\udd1d\u200d\ud83d\udc68\ud83c[\udffb\udffc\udffe\udfff]|\ud83d\udc68\ud83c\udffe\u200d\u2764\ufe0f\u200d\ud83d\udc68\ud83c[\udffb-\udfff]|\ud83d\udc68\ud83c\udffe\u200d\ud83e\udd1d\u200d\ud83d\udc68\ud83c[\udffb-\udffd\udfff]|\ud83d\udc68\ud83c\udfff\u200d\u2764\ufe0f\u200d\ud83d\udc68\ud83c[\udffb-\udfff]|\ud83d\udc68\ud83c\udfff\u200d\ud83e\udd1d\u200d\ud83d\udc68\ud83c[\udffb-\udffe]|\ud83d\udc69\ud83c\udffb\u200d\u2764\ufe0f\u200d\ud83d\udc68\ud83c[\udffb-\udfff]|\ud83d\udc69\ud83c\udffb\u200d\u2764\ufe0f\u200d\ud83d\udc69\ud83c[\udffb-\udfff]|\ud83d\udc69\ud83c\udffb\u200d\ud83e\udd1d\u200d\ud83d\udc68\ud83c[\udffc-\udfff]|\ud83d\udc69\ud83c\udffb\u200d\ud83e\udd1d\u200d\ud83d\udc69\ud83c[\udffc-\udfff]|\ud83d\udc69\ud83c\udffc\u200d\u2764\ufe0f\u200d\ud83d\udc68\ud83c[\udffb-\udfff]|\ud83d\udc69\ud83c\udffc\u200d\u2764\ufe0f\u200d\ud83d\udc69\ud83c[\udffb-\udfff]|\ud83d\udc69\ud83c\udffc\u200d\ud83e\udd1d\u200d\ud83d\udc68\ud83c[\udffb\udffd-\udfff]|\ud83d\udc69\ud83c\udffc\u200d\ud83e\udd1d\u200d\ud83d\udc69\ud83c[\udffb\udffd-\udfff]|\ud83d\udc69\ud83c\udffd\u200d\u2764\ufe0f\u200d\ud83d\udc68\ud83c[\udffb-\udfff]|\ud83d\udc69\ud83c\udffd\u200d\u2764\ufe0f\u200d\ud83d\udc69\ud83c[\udffb-\udfff]|\ud83d\udc69\ud83c\udffd\u200d\ud83e\udd1d\u200d\ud83d\udc68\ud83c[\udffb\udffc\udffe\udfff]|\ud83d\udc69\ud83c\udffd\u200d\ud83e\udd1d\u200d\ud83d\udc69\ud83c[\udffb\udffc\udffe\udfff]|\ud83d\udc69\ud83c\udffe\u200d\u2764\ufe0f\u200d\ud83d\udc68\ud83c[\udffb-\udfff]|\ud83d\udc69\ud83c\udffe\u200d\u2764\ufe0f\u200d\ud83d\udc69\ud83c[\udffb-\udfff]|\ud83d\udc69\ud83c\udffe\u200d\ud83e\udd1d\u200d\ud83d\udc68\ud83c[\udffb-\udffd\udfff]|\ud83d\udc69\ud83c\udffe\u200d\ud83e\udd1d\u200d\ud83d\udc69\ud83c[\udffb-\udffd\udfff]|\ud83d\udc69\ud83c\udfff\u200d\u2764\ufe0f\u200d\ud83d\udc68\ud83c[\udffb-\udfff]|\ud83d\udc69\ud83c\udfff\u200d\u2764\ufe0f\u200d\ud83d\udc69\ud83c[\udffb-\udfff]|\ud83d\udc69\ud83c\udfff\u200d\ud83e\udd1d\u200d\ud83d\udc68\ud83c[\udffb-\udffe]|\ud83d\udc69\ud83c\udfff\u200d\ud83e\udd1d\u200d\ud83d\udc69\ud83c[\udffb-\udffe]|\ud83e\uddd1\ud83c\udffb\u200d\u2764\ufe0f\u200d\ud83e\uddd1\ud83c[\udffc-\udfff]|\ud83e\uddd1\ud83c\udffb\u200d\ud83e\udd1d\u200d\ud83e\uddd1\ud83c[\udffb-\udfff]|\ud83e\uddd1\ud83c\udffc\u200d\u2764\ufe0f\u200d\ud83e\uddd1\ud83c[\udffb\udffd-\udfff]|\ud83e\uddd1\ud83c\udffc\u200d\ud83e\udd1d\u200d\ud83e\uddd1\ud83c[\udffb-\udfff]|\ud83e\uddd1\ud83c\udffd\u200d\u2764\ufe0f\u200d\ud83e\uddd1\ud83c[\udffb\udffc\udffe\udfff]|\ud83e\uddd1\ud83c\udffd\u200d\ud83e\udd1d\u200d\ud83e\uddd1\ud83c[\udffb-\udfff]|\ud83e\uddd1\ud83c\udffe\u200d\u2764\ufe0f\u200d\ud83e\uddd1\ud83c[\udffb-\udffd\udfff]|\ud83e\uddd1\ud83c\udffe\u200d\ud83e\udd1d\u200d\ud83e\uddd1\ud83c[\udffb-\udfff]|\ud83e\uddd1\ud83c\udfff\u200d\u2764\ufe0f\u200d\ud83e\uddd1\ud83c[\udffb-\udffe]|\ud83e\uddd1\ud83c\udfff\u200d\ud83e\udd1d\u200d\ud83e\uddd1\ud83c[\udffb-\udfff]|\ud83d\udc68\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83d\udc68|\ud83d\udc69\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83d[\udc68\udc69]|\ud83d\udc68\u200d\u2764\ufe0f\u200d\ud83d\udc68|\ud83d\udc69\u200d\u2764\ufe0f\u200d\ud83d[\udc68\udc69]|\ud83e\uddd1\u200d\ud83e\udd1d\u200d\ud83e\uddd1|\ud83d\udc6b\ud83c[\udffb-\udfff]|\ud83d\udc6c\ud83c[\udffb-\udfff]|\ud83d\udc6d\ud83c[\udffb-\udfff]|\ud83d\udc8f\ud83c[\udffb-\udfff]|\ud83d\udc91\ud83c[\udffb-\udfff]|\ud83d[\udc6b-\udc6d\udc8f\udc91])|(?:\ud83d[\udc68\udc69]|\ud83e\uddd1)(?:\ud83c[\udffb-\udfff])?\u200d(?:\u2695\ufe0f|\u2696\ufe0f|\u2708\ufe0f|\ud83c[\udf3e\udf73\udf7c\udf84\udf93\udfa4\udfa8\udfeb\udfed]|\ud83d[\udcbb\udcbc\udd27\udd2c\ude80\ude92]|\ud83e[\uddaf-\uddb3\uddbc\uddbd])|(?:\ud83c[\udfcb\udfcc]|\ud83d[\udd74\udd75]|\u26f9)((?:\ud83c[\udffb-\udfff]|\ufe0f)\u200d[\u2640\u2642]\ufe0f)|(?:\ud83c[\udfc3\udfc4\udfca]|\ud83d[\udc6e\udc70\udc71\udc73\udc77\udc81\udc82\udc86\udc87\ude45-\ude47\ude4b\ude4d\ude4e\udea3\udeb4-\udeb6]|\ud83e[\udd26\udd35\udd37-\udd39\udd3d\udd3e\uddb8\uddb9\uddcd-\uddcf\uddd4\uddd6-\udddd])(?:\ud83c[\udffb-\udfff])?\u200d[\u2640\u2642]\ufe0f|(?:\ud83d\udc68\u200d\ud83d\udc68\u200d\ud83d\udc66\u200d\ud83d\udc66|\ud83d\udc68\u200d\ud83d\udc68\u200d\ud83d\udc67\u200d\ud83d[\udc66\udc67]|\ud83d\udc68\u200d\ud83d\udc69\u200d\ud83d\udc66\u200d\ud83d\udc66|\ud83d\udc68\u200d\ud83d\udc69\u200d\ud83d\udc67\u200d\ud83d[\udc66\udc67]|\ud83d\udc69\u200d\ud83d\udc69\u200d\ud83d\udc66\u200d\ud83d\udc66|\ud83d\udc69\u200d\ud83d\udc69\u200d\ud83d\udc67\u200d\ud83d[\udc66\udc67]|\ud83d\udc68\u200d\ud83d\udc66\u200d\ud83d\udc66|\ud83d\udc68\u200d\ud83d\udc67\u200d\ud83d[\udc66\udc67]|\ud83d\udc68\u200d\ud83d\udc68\u200d\ud83d[\udc66\udc67]|\ud83d\udc68\u200d\ud83d\udc69\u200d\ud83d[\udc66\udc67]|\ud83d\udc69\u200d\ud83d\udc66\u200d\ud83d\udc66|\ud83d\udc69\u200d\ud83d\udc67\u200d\ud83d[\udc66\udc67]|\ud83d\udc69\u200d\ud83d\udc69\u200d\ud83d[\udc66\udc67]|\ud83c\udff3\ufe0f\u200d\u26a7\ufe0f|\ud83c\udff3\ufe0f\u200d\ud83c\udf08|\ud83d\ude36\u200d\ud83c\udf2b\ufe0f|\u2764\ufe0f\u200d\ud83d\udd25|\u2764\ufe0f\u200d\ud83e\ude79|\ud83c\udff4\u200d\u2620\ufe0f|\ud83d\udc15\u200d\ud83e\uddba|\ud83d\udc3b\u200d\u2744\ufe0f|\ud83d\udc41\u200d\ud83d\udde8|\ud83d\udc68\u200d\ud83d[\udc66\udc67]|\ud83d\udc69\u200d\ud83d[\udc66\udc67]|\ud83d\udc6f\u200d\u2640\ufe0f|\ud83d\udc6f\u200d\u2642\ufe0f|\ud83d\ude2e\u200d\ud83d\udca8|\ud83d\ude35\u200d\ud83d\udcab|\ud83e\udd3c\u200d\u2640\ufe0f|\ud83e\udd3c\u200d\u2642\ufe0f|\ud83e\uddde\u200d\u2640\ufe0f|\ud83e\uddde\u200d\u2642\ufe0f|\ud83e\udddf\u200d\u2640\ufe0f|\ud83e\udddf\u200d\u2642\ufe0f|\ud83d\udc08\u200d\u2b1b)|[#*0-9]\ufe0f?\u20e3|(?:[©®\u2122\u265f]\ufe0f)|(?:\ud83c[\udc04\udd70\udd71\udd7e\udd7f\ude02\ude1a\ude2f\ude37\udf21\udf24-\udf2c\udf36\udf7d\udf96\udf97\udf99-\udf9b\udf9e\udf9f\udfcd\udfce\udfd4-\udfdf\udff3\udff5\udff7]|\ud83d[\udc3f\udc41\udcfd\udd49\udd4a\udd6f\udd70\udd73\udd76-\udd79\udd87\udd8a-\udd8d\udda5\udda8\uddb1\uddb2\uddbc\uddc2-\uddc4\uddd1-\uddd3\udddc-\uddde\udde1\udde3\udde8\uddef\uddf3\uddfa\udecb\udecd-\udecf\udee0-\udee5\udee9\udef0\udef3]|[\u203c\u2049\u2139\u2194-\u2199\u21a9\u21aa\u231a\u231b\u2328\u23cf\u23ed-\u23ef\u23f1\u23f2\u23f8-\u23fa\u24c2\u25aa\u25ab\u25b6\u25c0\u25fb-\u25fe\u2600-\u2604\u260e\u2611\u2614\u2615\u2618\u2620\u2622\u2623\u2626\u262a\u262e\u262f\u2638-\u263a\u2640\u2642\u2648-\u2653\u2660\u2663\u2665\u2666\u2668\u267b\u267f\u2692-\u2697\u2699\u269b\u269c\u26a0\u26a1\u26a7\u26aa\u26ab\u26b0\u26b1\u26bd\u26be\u26c4\u26c5\u26c8\u26cf\u26d1\u26d3\u26d4\u26e9\u26ea\u26f0-\u26f5\u26f8\u26fa\u26fd\u2702\u2708\u2709\u270f\u2712\u2714\u2716\u271d\u2721\u2733\u2734\u2744\u2747\u2757\u2763\u2764\u27a1\u2934\u2935\u2b05-\u2b07\u2b1b\u2b1c\u2b50\u2b55\u3030\u303d\u3297\u3299])(?:\ufe0f|(?!\ufe0e))|(?:(?:\ud83c[\udfcb\udfcc]|\ud83d[\udd74\udd75\udd90]|[\u261d\u26f7\u26f9\u270c\u270d])(?:\ufe0f|(?!\ufe0e))|(?:\ud83c[\udf85\udfc2-\udfc4\udfc7\udfca]|\ud83d[\udc42\udc43\udc46-\udc50\udc66-\udc69\udc6e\udc70-\udc78\udc7c\udc81-\udc83\udc85-\udc87\udcaa\udd7a\udd95\udd96\ude45-\ude47\ude4b-\ude4f\udea3\udeb4-\udeb6\udec0\udecc]|\ud83e[\udd0c\udd0f\udd18-\udd1c\udd1e\udd1f\udd26\udd30-\udd39\udd3d\udd3e\udd77\uddb5\uddb6\uddb8\uddb9\uddbb\uddcd-\uddcf\uddd1-\udddd]|[\u270a\u270b]))(?:\ud83c[\udffb-\udfff])?|(?:\ud83c\udff4\udb40\udc67\udb40\udc62\udb40\udc65\udb40\udc6e\udb40\udc67\udb40\udc7f|\ud83c\udff4\udb40\udc67\udb40\udc62\udb40\udc73\udb40\udc63\udb40\udc74\udb40\udc7f|\ud83c\udff4\udb40\udc67\udb40\udc62\udb40\udc77\udb40\udc6c\udb40\udc73\udb40\udc7f|\ud83c\udde6\ud83c[\udde8-\uddec\uddee\uddf1\uddf2\uddf4\uddf6-\uddfa\uddfc\uddfd\uddff]|\ud83c\udde7\ud83c[\udde6\udde7\udde9-\uddef\uddf1-\uddf4\uddf6-\uddf9\uddfb\uddfc\uddfe\uddff]|\ud83c\udde8\ud83c[\udde6\udde8\udde9\uddeb-\uddee\uddf0-\uddf5\uddf7\uddfa-\uddff]|\ud83c\udde9\ud83c[\uddea\uddec\uddef\uddf0\uddf2\uddf4\uddff]|\ud83c\uddea\ud83c[\udde6\udde8\uddea\uddec\udded\uddf7-\uddfa]|\ud83c\uddeb\ud83c[\uddee-\uddf0\uddf2\uddf4\uddf7]|\ud83c\uddec\ud83c[\udde6\udde7\udde9-\uddee\uddf1-\uddf3\uddf5-\uddfa\uddfc\uddfe]|\ud83c\udded\ud83c[\uddf0\uddf2\uddf3\uddf7\uddf9\uddfa]|\ud83c\uddee\ud83c[\udde8-\uddea\uddf1-\uddf4\uddf6-\uddf9]|\ud83c\uddef\ud83c[\uddea\uddf2\uddf4\uddf5]|\ud83c\uddf0\ud83c[\uddea\uddec-\uddee\uddf2\uddf3\uddf5\uddf7\uddfc\uddfe\uddff]|\ud83c\uddf1\ud83c[\udde6-\udde8\uddee\uddf0\uddf7-\uddfb\uddfe]|\ud83c\uddf2\ud83c[\udde6\udde8-\udded\uddf0-\uddff]|\ud83c\uddf3\ud83c[\udde6\udde8\uddea-\uddec\uddee\uddf1\uddf4\uddf5\uddf7\uddfa\uddff]|\ud83c\uddf4\ud83c\uddf2|\ud83c\uddf5\ud83c[\udde6\uddea-\udded\uddf0-\uddf3\uddf7-\uddf9\uddfc\uddfe]|\ud83c\uddf6\ud83c\udde6|\ud83c\uddf7\ud83c[\uddea\uddf4\uddf8\uddfa\uddfc]|\ud83c\uddf8\ud83c[\udde6-\uddea\uddec-\uddf4\uddf7-\uddf9\uddfb\uddfd-\uddff]|\ud83c\uddf9\ud83c[\udde6\udde8\udde9\uddeb-\udded\uddef-\uddf4\uddf7\uddf9\uddfb\uddfc\uddff]|\ud83c\uddfa\ud83c[\udde6\uddec\uddf2\uddf3\uddf8\uddfe\uddff]|\ud83c\uddfb\ud83c[\udde6\udde8\uddea\uddec\uddee\uddf3\uddfa]|\ud83c\uddfc\ud83c[\uddeb\uddf8]|\ud83c\uddfd\ud83c\uddf0|\ud83c\uddfe\ud83c[\uddea\uddf9]|\ud83c\uddff\ud83c[\udde6\uddf2\uddfc]|\ud83c[\udccf\udd8e\udd91-\udd9a\udde6-\uddff\ude01\ude32-\ude36\ude38-\ude3a\ude50\ude51\udf00-\udf20\udf2d-\udf35\udf37-\udf7c\udf7e-\udf84\udf86-\udf93\udfa0-\udfc1\udfc5\udfc6\udfc8\udfc9\udfcf-\udfd3\udfe0-\udff0\udff4\udff8-\udfff]|\ud83d[\udc00-\udc3e\udc40\udc44\udc45\udc51-\udc65\udc6a\udc6f\udc79-\udc7b\udc7d-\udc80\udc84\udc88-\udc8e\udc90\udc92-\udca9\udcab-\udcfc\udcff-\udd3d\udd4b-\udd4e\udd50-\udd67\udda4\uddfb-\ude44\ude48-\ude4a\ude80-\udea2\udea4-\udeb3\udeb7-\udebf\udec1-\udec5\uded0-\uded2\uded5-\uded7\udeeb\udeec\udef4-\udefc\udfe0-\udfeb]|\ud83e[\udd0d\udd0e\udd10-\udd17\udd1d\udd20-\udd25\udd27-\udd2f\udd3a\udd3c\udd3f-\udd45\udd47-\udd76\udd78\udd7a-\uddb4\uddb7\uddba\uddbc-\uddcb\uddd0\uddde-\uddff\ude70-\ude74\ude78-\ude7a\ude80-\ude86\ude90-\udea8\udeb0-\udeb6\udec0-\udec2\uded0-\uded6]|[\u23e9-\u23ec\u23f0\u23f3\u267e\u26ce\u2705\u2728\u274c\u274e\u2753-\u2755\u2795-\u2797\u27b0\u27bf\ue50a])|\ufe0f/g},1713:(e,t,n)=>{"use strict";let r,o,i,a,s,d,u,c,l,f,h,g,p,m;n.d(t,{Cr:()=>c,KB:()=>m,MT:()=>i,Nh:()=>l,Uq:()=>r,WB:()=>g,bZ:()=>u,du:()=>a,fo:()=>o,mp:()=>v,nJ:()=>s,qt:()=>d,rN:()=>f,u1:()=>y,vi:()=>p,wv:()=>h}),function(e){e[e.Backwards=0]="Backwards",e[e.Forwards=1]="Forwards",e[e.Around=2]="Around"}(r||(r={})),function(e){e[e.Up=0]="Up",e[e.Down=1]="Down",e[e.Static=2]="Static"}(o||(o={})),function(e){e[e.Main=0]="Main",e[e.EditProfile=1]="EditProfile",e[e.Notifications=2]="Notifications",e[e.DataStorage=3]="DataStorage",e[e.Language=4]="Language",e[e.General=5]="General",e[e.GeneralChatBackground=6]="GeneralChatBackground",e[e.GeneralChatBackgroundColor=7]="GeneralChatBackgroundColor",e[e.Privacy=8]="Privacy",e[e.PrivacyPhoneNumber=9]="PrivacyPhoneNumber",e[e.PrivacyLastSeen=10]="PrivacyLastSeen",e[e.PrivacyProfilePhoto=11]="PrivacyProfilePhoto",e[e.PrivacyForwarding=12]="PrivacyForwarding",e[e.PrivacyGroupChats=13]="PrivacyGroupChats",e[e.PrivacyPhoneNumberAllowedContacts=14]="PrivacyPhoneNumberAllowedContacts",e[e.PrivacyPhoneNumberDeniedContacts=15]="PrivacyPhoneNumberDeniedContacts",e[e.PrivacyLastSeenAllowedContacts=16]="PrivacyLastSeenAllowedContacts",e[e.PrivacyLastSeenDeniedContacts=17]="PrivacyLastSeenDeniedContacts",e[e.PrivacyProfilePhotoAllowedContacts=18]="PrivacyProfilePhotoAllowedContacts",e[e.PrivacyProfilePhotoDeniedContacts=19]="PrivacyProfilePhotoDeniedContacts",e[e.PrivacyForwardingAllowedContacts=20]="PrivacyForwardingAllowedContacts",e[e.PrivacyForwardingDeniedContacts=21]="PrivacyForwardingDeniedContacts",e[e.PrivacyGroupChatsAllowedContacts=22]="PrivacyGroupChatsAllowedContacts",e[e.PrivacyGroupChatsDeniedContacts=23]="PrivacyGroupChatsDeniedContacts",e[e.PrivacyActiveSessions=24]="PrivacyActiveSessions",e[e.PrivacyBlockedUsers=25]="PrivacyBlockedUsers",e[e.Folders=26]="Folders",e[e.FoldersCreateFolder=27]="FoldersCreateFolder",e[e.FoldersEditFolder=28]="FoldersEditFolder",e[e.FoldersEditFolderFromChatList=29]="FoldersEditFolderFromChatList",e[e.FoldersIncludedChats=30]="FoldersIncludedChats",e[e.FoldersIncludedChatsFromChatList=31]="FoldersIncludedChatsFromChatList",e[e.FoldersExcludedChats=32]="FoldersExcludedChats",e[e.FoldersExcludedChatsFromChatList=33]="FoldersExcludedChatsFromChatList",e[e.TwoFaDisabled=34]="TwoFaDisabled",e[e.TwoFaNewPassword=35]="TwoFaNewPassword",e[e.TwoFaNewPasswordConfirm=36]="TwoFaNewPasswordConfirm",e[e.TwoFaNewPasswordHint=37]="TwoFaNewPasswordHint",e[e.TwoFaNewPasswordEmail=38]="TwoFaNewPasswordEmail",e[e.TwoFaNewPasswordEmailCode=39]="TwoFaNewPasswordEmailCode",e[e.TwoFaEnabled=40]="TwoFaEnabled",e[e.TwoFaChangePasswordCurrent=41]="TwoFaChangePasswordCurrent",e[e.TwoFaChangePasswordNew=42]="TwoFaChangePasswordNew",e[e.TwoFaChangePasswordConfirm=43]="TwoFaChangePasswordConfirm",e[e.TwoFaChangePasswordHint=44]="TwoFaChangePasswordHint",e[e.TwoFaTurnOff=45]="TwoFaTurnOff",e[e.TwoFaRecoveryEmailCurrentPassword=46]="TwoFaRecoveryEmailCurrentPassword",e[e.TwoFaRecoveryEmail=47]="TwoFaRecoveryEmail",e[e.TwoFaRecoveryEmailCode=48]="TwoFaRecoveryEmailCode",e[e.TwoFaCongratulations=49]="TwoFaCongratulations",e[e.QuickReaction=50]="QuickReaction"}(i||(i={})),function(e){e[e.ChatList=0]="ChatList",e[e.GlobalSearch=1]="GlobalSearch",e[e.Settings=2]="Settings",e[e.Contacts=3]="Contacts",e[e.Archived=4]="Archived",e[e.NewChannelStep1=5]="NewChannelStep1",e[e.NewChannelStep2=6]="NewChannelStep2",e[e.NewGroupStep1=7]="NewGroupStep1",e[e.NewGroupStep2=8]="NewGroupStep2"}(a||(a={})),function(e){e[e.ChatList=0]="ChatList",e[e.Media=1]="Media",e[e.Links=2]="Links",e[e.Files=3]="Files",e[e.Music=4]="Music",e[e.Voice=5]="Voice"}(s||(s={})),function(e){e[e.ChatInfo=0]="ChatInfo",e[e.Search=1]="Search",e[e.Management=2]="Management",e[e.Statistics=3]="Statistics",e[e.StickerSearch=4]="StickerSearch",e[e.GifSearch=5]="GifSearch",e[e.PollResults=6]="PollResults",e[e.AddingMembers=7]="AddingMembers"}(d||(d={})),function(e){e[e.Inline=0]="Inline",e[e.ScheduledInline=1]="ScheduledInline",e[e.SharedMedia=2]="SharedMedia",e[e.ProfileAvatar=3]="ProfileAvatar",e[e.SettingsAvatar=4]="SettingsAvatar",e[e.MiddleHeaderAvatar=5]="MiddleHeaderAvatar",e[e.Album=6]="Album",e[e.ScheduledAlbum=7]="ScheduledAlbum",e[e.SearchResult=8]="SearchResult"}(u||(u={})),function(e){e[e.Inline=0]="Inline",e[e.SharedMedia=1]="SharedMedia",e[e.Search=2]="Search"}(c||(c={})),function(e){e[e.Idle=0]="Idle",e[e.InProgress=1]="InProgress",e[e.Complete=2]="Complete",e[e.Error=3]="Error"}(l||(l={})),function(e){e[e.Idle=0]="Idle",e[e.InProgress=1]="InProgress",e[e.Complete=2]="Complete",e[e.Error=3]="Error"}(f||(f={})),function(e){e[e.Idle=0]="Idle",e[e.InProgress=1]="InProgress",e[e.Complete=2]="Complete",e[e.Error=3]="Error"}(h||(h={})),function(e){e[e.Closed=0]="Closed",e[e.InProgress=1]="InProgress",e[e.Loading=2]="Loading"}(g||(g={})),function(e){e[e.Profile=0]="Profile",e[e.SharedMedia=1]="SharedMedia",e[e.MemberList=2]="MemberList"}(p||(p={})),function(e){e[e.ShippingInfo=0]="ShippingInfo",e[e.Shipping=1]="Shipping",e[e.PaymentInfo=2]="PaymentInfo",e[e.Checkout=3]="Checkout",e[e.ConfirmPayment=4]="ConfirmPayment"}(m||(m={}));const v="UPLOADING_WALLPAPER_SLUG";let y;!function(e){e[e.Initial=0]="Initial",e[e.ChatPrivacyType=1]="ChatPrivacyType",e[e.Discussion=2]="Discussion",e[e.ChannelSubscribers=3]="ChannelSubscribers",e[e.GroupType=4]="GroupType",e[e.GroupPermissions=5]="GroupPermissions",e[e.GroupRemovedUsers=6]="GroupRemovedUsers",e[e.ChannelRemovedUsers=7]="ChannelRemovedUsers",e[e.GroupUserPermissionsCreate=8]="GroupUserPermissionsCreate",e[e.GroupUserPermissions=9]="GroupUserPermissions",e[e.ChatAdministrators=10]="ChatAdministrators",e[e.GroupRecentActions=11]="GroupRecentActions",e[e.ChatAdminRights=12]="ChatAdminRights",e[e.ChatNewAdminRights=13]="ChatNewAdminRights",e[e.GroupMembers=14]="GroupMembers",e[e.GroupAddAdmins=15]="GroupAddAdmins",e[e.Invites=16]="Invites",e[e.EditInvite=17]="EditInvite",e[e.Reactions=18]="Reactions",e[e.InviteInfo=19]="InviteInfo",e[e.JoinRequests=20]="JoinRequests"}(y||(y={}))},9933:(e,t,n)=>{"use strict";n.d(t,{M8:()=>s,cK:()=>i,jt:()=>a,vr:()=>d});var r=n(9118);let o;function i(e,t){t||(o&&!o.isCancelled&&(o.isCancelled=!0),o=t={isCancelled:!1}),!t.isCancelled&&e()&&(0,r.T2)((()=>{i(e,t)}))}function a(e){e()&&(0,r.T2)((()=>{a(e)}))}const s={linear:e=>e,easeIn:e=>e**1.675,easeOut:e=>1-(1-e**1.675),easeInOut:e=>.5*(Math.sin((e-.5)*Math.PI)+1),easeInQuad:e=>e*e,easeOutQuad:e=>e*(2-e),easeInOutQuad:e=>e<.5?2*e*e:(4-2*e)*e-1,easeInCubic:e=>e*e*e,easeOutCubic:e=>--e*e*e+1,easeInOutCubic:e=>e<.5?4*e*e*e:(e-1)*(2*e-2)*(2*e-2)+1,easeInQuart:e=>e*e*e*e,easeOutQuart:e=>1- --e*e*e*e,easeInOutQuart:e=>e<.5?8*e*e*e*e:1-8*--e*e*e*e,easeInQuint:e=>e*e*e*e*e,easeOutQuint:e=>1+--e*e*e*e*e,easeInOutQuint:e=>e<.5?16*e*e*e*e*e:1+16*--e*e*e*e*e};function d(e){let{timing:t=s.linear,onUpdate:n,duration:r,onEnd:o,from:i,to:d}=e;const u=Date.now();let c=!1;return a((()=>{if(c)return!1;let e=(Date.now()-u)/r;e>1&&(e=1);const a=t(e);if("number"==typeof i&&"number"==typeof d)n(i+(d-i)*a);else if(Array.isArray(i)&&Array.isArray(d)){const e=i.map(((e,t)=>e+(d[t]-e)*a));n(e)}return 1===e&&o&&o(),e<1})),()=>{c=!0,o&&o()}}},7358:(e,t,n)=>{"use strict";n.d(t,{w:()=>o});var r=n(3716);function o(e){"function"==typeof window.navigator.setAppBadge&&window.navigator.setAppBadge(e).catch((e=>{r.eM&&console.error(e)}))}},275:(e,t,n)=>{"use strict";function r(e,t){if(e===t)return!0;const n=Object.keys(e),r=n.length;if(r!==Object.keys(t).length)return!1;if(0===r)return!0;for(let o=0;o(e[r]!==t[r]&&n.push(`${r}: ${e[r]} => ${t[r]}`),n)),[])}n.d(t,{Z:()=>r,c:()=>o})},6752:(e,t,n)=>{"use strict";function r(){for(var e=arguments.length,t=new Array(e),n=0;n1?r-1:0),i=1;i(t&&(Array.isArray(t)?e.push(...t):e.push(`${n}--${t}`)),e)),[n]).join(" ")}}n.d(t,{Z:()=>r,y:()=>o})},9524:(e,t,n)=>{"use strict";n.d(t,{Type:()=>o,clear:()=>s,fetch:()=>i,save:()=>a});const r=self.caches;let o;async function i(e,t,n){let i=arguments.length>3&&void 0!==arguments[3]&&arguments[3];if(r)try{const a=new Request(t.replace(/:/g,"_")),s=await r.open(e),d=await s.match(a);if(!d)return;const u=d.headers.get("Content-Type");switch(n){case o.Text:return await d.text();case o.Blob:{if(t.startsWith("avatar")&&u&&u.startsWith("text"))return;const e=await d.blob(),n=!e.type||!i&&e.type.includes("html");let r=e.type||u;return n&&r?(i||(r=r.replace(/html/gi,"")),new Blob([e],{type:r})):e}case o.Json:return await d.json();default:return}}catch(e){return void console.warn(e)}}async function a(e,t,n){if(r)try{const o="string"==typeof n||n instanceof Blob?n:JSON.stringify(n),i=new Request(t.replace(/:/g,"_")),a=new Response(o),s=await r.open(e);return await s.put(i,a)}catch(e){return void console.warn(e)}}async function s(e){try{if(!r)return;return await r.delete(e)}catch(e){return void console.warn(e)}}!function(e){e[e.Text=0]="Text",e[e.Blob=1]="Blob",e[e.Json=2]="Json"}(o||(o={}))},6063:(e,t,n)=>{"use strict";function r(){const e=[];function t(t){const n=e.indexOf(t);-1!==n&&e.splice(n,1)}return{runCallbacks:function(){for(var t=arguments.length,n=new Array(t),r=0;r{e(...n)}))},addCallback:function(n){return e.push(n),()=>{t(n)}},removeCallback:t,hasCallbacks:function(){return Boolean(e.length)}}}n.d(t,{_:()=>r})},3989:(e,t,n)=>{"use strict";n.d(t,{Z:()=>o});var r=n(517);function o(e){return(0,r.Z)({onEsc:e})}},517:(e,t,n)=>{"use strict";n.d(t,{Z:()=>i});const r={Enter:"onEnter",Backspace:"onBackspace",Delete:"onDelete",Esc:"onEsc",Escape:"onEsc",ArrowUp:"onUp",ArrowDown:"onDown",ArrowLeft:"onLeft",ArrowRight:"onRight",Tab:"onTab"},o={onEnter:[],onDelete:[],onBackspace:[],onEsc:[],onUp:[],onDown:[],onLeft:[],onRight:[],onTab:[]};function i(e){return a()||document.addEventListener("keydown",s,!0),Object.keys(e).forEach((t=>{const n=e[t];if(!n)return;const r=o[t];r&&r.push(n)})),()=>{!function(e){Object.keys(e).forEach((t=>{const n=e[t],r=o[t];if(r){const e=r.findIndex((e=>e===n));-1!==e&&r.splice(e,1)}})),a()||document.removeEventListener("keydown",s,!1)}(e)}}function a(){return Object.values(o).some((e=>Boolean(e.length)))}function s(e){const t=r[e.key];if(!t)return;const{length:n}=o[t];n&&(e.stopPropagation(),(0,o[t][n-1])(e))}},4319:(e,t,n)=>{"use strict";n.d(t,{TE:()=>a,VP:()=>s,yl:()=>o});var r=n(3716);const o=window.navigator.clipboard&&window.ClipboardItem,i=document.createElement("textarea");i.setAttribute("readonly",""),i.tabIndex=-1,i.className="visually-hidden";const a=e=>{i.value=e,document.body.appendChild(i);const t=document.getSelection();if(t){const e=t.rangeCount>0&&t.getRangeAt(0);i.select(),document.execCommand("copy"),e&&(t.removeAllRanges(),t.addRange(e))}document.body.removeChild(i)},s=e=>{if(!e)return;const t=document.createElement("canvas"),n=t.getContext("2d"),r=new Image;r.onload=e=>{if(n&&e.currentTarget){const r=e.currentTarget;t.width=r.width,t.height=r.height,n.drawImage(r,0,0,r.width,r.height),t.toBlob(d,"image/png",1)}},r.src=e};async function d(e){if(e&&o)try{var t,n;await(null===(t=(n=window.navigator.clipboard).write)||void 0===t?void 0:t.call(n,[new ClipboardItem({[e.type]:e})]))}catch(e){r.eM&&console.error(e)}}},790:(e,t,n)=>{"use strict";n.d(t,{$Y:()=>u,D:()=>v,IS:()=>x,SA:()=>A,Tu:()=>p,VX:()=>g,ZK:()=>C,_F:()=>c,dJ:()=>b,j1:()=>w,k9:()=>S,kj:()=>l,mB:()=>y,mr:()=>h,np:()=>m,rM:()=>E,xH:()=>P,xR:()=>s,xk:()=>_,zk:()=>d});var r=n(5155);const o=["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],i=["January","February","March","April","May","June","July","August","September","October","November","December"],a=i.map((e=>e.toLowerCase())),s=864e5;function d(e){return c(new Date)===c(e)}function u(e){const t=new Date(e);return t.setHours(0,0,0,0),t}function c(e){return u(e).getTime()}function l(e){const t=new Date(1e3*e);return`${t.getFullYear()}-${t.getMonth()}`}function f(e){return`${e.getFullYear()}-${e.getMonth()+1}-${e.getDate()}`}function h(e,t){const n="number"==typeof t?new Date(t):t,r=e.timeFormat||"24h";let o=n.getHours(),i="";return"12h"===r&&(i=o>=12?" PM":" AM",o=o>12?o%12:o),`${String(o).padStart(2,"0")}:${String(n.getMinutes()).padStart(2,"0")}${i}`}function g(e,t){const n="number"==typeof t?new Date(t):t,r=u(new Date);if(n>=r)return h(e,n);const i=new Date(r);if(i.setDate(r.getDate()-7),n>=i)return e(`Weekday.Short${o[n.getDay()]}`);const a=n.getFullYear()!==r.getFullYear(),s=e(a?"formatDateScheduleYear":"formatDateSchedule")||(a?"d MMM yyyy":"d MMM");return I(e,n,s)}function p(e,t){const n="number"==typeof t?new Date(t):t,r=e("formatterYearMax")||"dd.MM.yyyy";return I(e,n,r)}function m(e,t){let n=arguments.length>2&&void 0!==arguments[2]&&arguments[2];const r=e(n?"formatterMonthYear2":"formatterMonthYear")||"MMM yyyy";return I(e,t,r)}function v(e,t){const n=Math.floor(t/s);return t<0?0:n<1?S(t/1e3):n<7?e("Days",n):n<30?e("Weeks",Math.floor(n/7)):n<365?e("Months",Math.floor(n/30)):e("Years",Math.floor(n/365))}function y(e,t){return t<6e4?Math.ceil(t/1e3):t<36e5?Math.ceil(t/6e4):t2&&void 0!==arguments[2]?arguments[2]:t;const r=t-n;return r<60?e("LiveLocationUpdated.JustNow"):r<3600?e("LiveLocationUpdated.MinutesAgo",Math.floor(r/60)):e("LiveLocationUpdated.TodayAt",h(e,n))}function w(e,t){let n=arguments.length>2&&void 0!==arguments[2]&&arguments[2],r=arguments.length>3&&void 0!==arguments[3]&&arguments[3],i=arguments.length>4?arguments[4]:void 0;const a="number"==typeof t?new Date(t):t,s=u(new Date);if(!r){if(f(a)===f(s))return(i||!n?N:T)(e("Weekday.Today"));const t=new Date(s);if(t.setDate(s.getDate()-1),f(a)===f(t))return(i||!n?N:T)(e("Weekday.Yesterday"));const r=new Date(s),d=new Date(s);if(r.setDate(s.getDate()-7),d.setDate(s.getDate()+7),a>=r&&a<=d){const t=o[a.getDay()];return(i||!n?N:T)(e(n?`Weekday.Short${t}`:`Weekday.${t}`))}}const d=a.getFullYear()!==s.getFullYear(),c=n?d?"formatDateScheduleYear":"formatDateSchedule":d?"chatFullDate":"chatDate",l=e(c)||"d MMMM yyyy";return(i||!n?N:T)(I(e,a,l))}function I(e,t,n){const r=t.getDate(),o=t.getMonth();return n.replace("LLLL",e(i[o])).replace("MMMM",e(`Month.Gen${i[o]}`)).replace("MMM",e(`Month.Short${i[o]}`)).replace("MM",String(o+1).padStart(2,"0")).replace("dd",String(r).padStart(2,"0")).replace("d",String(r)).replace("yyyy",String(t.getFullYear())).replace(/'de'/g,"de")}function C(e,t,n){const r="number"==typeof t?new Date(t):t;return`${w(e,r,!0,void 0,n)}, ${h(e,r)}`}function S(e,t){const n=Math.floor(e/3600),r=Math.floor(e%3600/60),o=Math.floor(e%3600%60),i=t?Math.floor(t/3600):0,a=t?Math.floor(t%3600/60):0;let s="";return n>0||i>0?(s+=`${String(n).padStart(2,"0")}:`,s+=`${String(r).padStart(2,"0")}:`):s+=a>=10?`${String(r).padStart(2,"0")}:`:`${String(r)}:`,s+=String(o).padStart(2,"0"),s}function E(e){const t=[];let n=e%1e3;e-=n,n=Math.floor(n/10);const r=(e=Math.floor(e/1e3))%60;e-=r;const o=(e=Math.floor(e/60))%60;e-=o;const i=(e=Math.floor(e/60))%60;return i>0&&t.push(String(i).padStart(2,"0")),t.push(String(o).padStart(i>0?2:1,"0")),t.push(String(r).padStart(2,"0")),`${t.join(":")},${String(n).padStart(2,"0")}`}const M=(0,r.Z)(((e,t)=>new Date(e).toLocaleString(t,{year:"numeric",month:"short",day:"numeric"})));function P(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"en-US";const n="number"==typeof e?new Date(e):e,r=c(n);return M(r,t)}function A(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"en-US";const n="number"==typeof e?new Date(e):e;return n.toLocaleString(t,{year:"numeric",month:"short",day:"numeric",hour:"numeric",minute:"numeric",second:"numeric"})}function k(e,t){let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:2021;if(t>11||e>31)return!1;const r=new Date(n,t,e);return!Number.isNaN(r.getTime())&&r.getDate()===e}function _(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"";const t=e.match(/\d{1,2}\s[a-zA-Z]{3,}/),n=e.match(/[a-zA-Z]{3,}\s\d{1,2}/),r=e.match(/\d{1,2}[./-]\d{1,2}([./-]\d{2,4})?/);if(!t&&!r&&!n)return;if(r){const[t,n,r]=e.split(/[./-]/).map(Number);return r&&r<2015||!k(t,n-1,r||void 0)?void 0:`${r?`${r}-`:""}${String(n).padStart(2,"0")}-${String(t).padStart(2,"0")}`}const o=e.split(" "),i=t?o[0]:o[1],s=(t?o[1]:o[0]).toLowerCase(),d=a.findIndex((e=>e.startsWith(s)));return-1!==d&&k(Number(i),d)?`${String(d+1).padStart(2,"0")}-${String(i).padStart(2,"0")}`:void 0}function x(e){return e+s/1e3}function T(e){return`${e[0].toLowerCase()}${e.slice(1)}`}function N(e){return`${e[0].toUpperCase()}${e.slice(1)}`}},4284:(e,t,n)=>{"use strict";n.d(t,{NM:()=>u,U_:()=>d,Wg:()=>c,g6:()=>s});var r=n(3681);const o=["female_sign","male_sign","medical_symbol"],i=[[/\u{1f3f3}\u200d\u{1f308}/gu,"🏳️‍🌈"],[/\u{1f3f3}\u200d\u26a7\ufe0f/gu,"🏳️‍⚧️"],[/\u{1f937}\u200d\u2642[^\ufe0f]/gu,"🤷‍♂️"]];function a(e){const t=e.split("-").map((e=>parseInt(e,16)));return String.fromCodePoint(...t)}function s(e){if(!e.match(r.Z))return e;for(const[t,n]of i)e=e.replace(t,n);return e}function d(e){let t;if(1===e.length)t=e.charCodeAt(0).toString(16).padStart(4,"0");else{const n=[];for(let t=0;t=55296&&e.charCodeAt(t)<=56319?e.charCodeAt(t+1)>=56320&&e.charCodeAt(t+1)<=57343&&n.push(1024*(e.charCodeAt(t)-55296)+(e.charCodeAt(t+1)-56320)+65536):(e.charCodeAt(t)<55296||e.charCodeAt(t)>57343)&&n.push(e.charCodeAt(t));t=n.map((e=>e.toString(16).padStart(4,"0"))).join("-")}return t}function u(e){const t={categories:[],emojis:{}};for(let n=0;ne.codePointAt(0)+127397));return String.fromCodePoint(...n)}},1396:(e,t,n)=>{"use strict";function r(e){if(e)return e.includes("://")?e:`http://${e}`}n.d(t,{X:()=>r})},7361:(e,t,n)=>{"use strict";n.d(t,{Bi:()=>k,cL:()=>O,wZ:()=>p,gk:()=>D,vX:()=>P,FW:()=>B,op:()=>C,cj:()=>g,jm:()=>h,pA:()=>T,m5:()=>M,I_:()=>E,fl:()=>v,t0:()=>A,s$:()=>m,i4:()=>R,Mc:()=>S,wB:()=>b,p7:()=>w,$b:()=>y,mh:()=>I,Hh:()=>N,s0:()=>_,aZ:()=>L,gZ:()=>F,Lt:()=>f,vn:()=>u,on:()=>i});var r=n(3716);let o;function i(){return Boolean(o)}var a,s;new Promise((e=>{const t=new Image;t.src="data:image/webp;base64,UklGRjoAAABXRUJQVlA4IC4AAACyAgCdASoCAAIALmk0mk0iIiIiIgBoSygABc6WWgAA/veff/0PP8bA//LwYAAA";const n=()=>{e(2===t.height)};t.onload=n,t.onerror=n})).then((e=>{o=e}));let d=null!==(a=(s=window).matchMedia)&&void 0!==a&&a.call(s,"(prefers-color-scheme: dark)").matches?"dark":"light";function u(){return d}function c(e){d=e.matches?"dark":"light"}const l=window.matchMedia("(prefers-color-scheme: dark)");"function"==typeof l.addEventListener?l.addEventListener("change",c):"function"==typeof l.addListener&&l.addListener(c);const f=function(){const{userAgent:e,platform:t}=window.navigator;let n;return-1!==["Macintosh","MacIntel","MacPPC","Mac68K"].indexOf(t)?n="macOS":-1!==["iPhone","iPad","iPod"].indexOf(t)?n="iOS":-1!==["Win32","Win64","Windows","WinCE"].indexOf(t)?n="Windows":/Android/.test(e)?n="Android":/Linux/.test(t)&&(n="Linux"),n}(),h="macOS"===f,g="iOS"===f,p="Android"===f,m=/^((?!chrome|android).)*safari/i.test(navigator.userAgent),v=window.matchMedia("(display-mode: standalone)").matches||window.navigator.standalone||document.referrer.includes("android-app://"),y=window.matchMedia("(pointer: coarse)").matches,b=window.innerWidth<=r.l3||window.innerWidth<=r.u_&&window.innerHeight<=r.rO,w=!b&&window.innerWidth<=r.ks,I=Boolean(window.navigator.mediaDevices&&"getUserMedia"in window.navigator.mediaDevices&&(window.AudioContext||window.webkitAudioContext)),C=(document.documentElement.style,f&&(h||g)),S="serviceWorker"in navigator,E=S,M=(window,Boolean((new Audio).canPlayType("audio/ogg; codecs=opus"))),P=!r.Cg&&"filter"in(document.createElement("canvas").getContext("2d")||{}),A="requestFullscreen"in document.createElement("div"),k=!navigator.userAgent.includes("Firefox"),_=p?"slide-fade":g?"slide-layers":"push-slide",x=document.createElement("video"),T=!0;T&&r.wG.add(r.Ng);const N=Boolean(x.canPlayType('video/webm; codecs="vp9"').replace("no",""))&&!(h&&m),O=window.devicePixelRatio||1,L=!0,D=!r.Cg&&(CSS.supports("backdrop-filter: blur()")||CSS.supports("-webkit-backdrop-filter: blur()")),B=!y,R=!h&&!g&&!p,F=R?300:750},1394:(e,t,n)=>{"use strict";n.d(t,{A9:()=>i,YJ:()=>a,ao:()=>h,dc:()=>f,gm:()=>l,hl:()=>s,jj:()=>u,pt:()=>d,ud:()=>c});var r=n(9118);function o(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function i(e){const t=e.split(","),n=t[0].match(/:(.*?);/)[1],r=atob(t[1]);let o=r.length;const i=new Uint8Array(o);for(;o--;)i[o]=r.charCodeAt(o);return new Blob([i],{type:n})}function a(e){return new Promise(((t,n)=>{const r=new FileReader;r.onload=e=>{const{result:r}=e.target||{};"string"==typeof r&&t(r),n(new Error("Failed to read blob"))},r.onerror=n,r.readAsDataURL(e)}))}function s(e,t){return new File([e],t,{lastModified:Date.now(),type:e.type})}function d(e){return new Promise(((t,n)=>{const r=new Image;r.onload=()=>t(r),r.onerror=n,r.src=e}))}function u(e){return new Promise(((t,n)=>{const r=document.createElement("video");r.volume=0,r.onloadedmetadata=()=>t(r),r.onerror=n,r.src=e}))}async function c(e){const t=await u(e);return Promise.race([(0,r.wO)(2e3),new Promise(((e,n)=>{t.onseeked=()=>{t.videoWidth&&t.videoHeight||e(void 0);const n=document.createElement("canvas");n.width=t.videoWidth,n.height=t.videoHeight,n.getContext("2d").drawImage(t,0,0),e(n.toDataURL("image/jpeg"))},t.onerror=n,t.currentTime=Math.min(t.duration,1)}))])}async function l(e){return(await fetch(e)).blob()}async function f(e,t){return s(await l(e),t)}function h(e){const t=document.createElement("canvas");return t.width=e.width,t.height=e.height,t.getContext("2d").drawImage(e,0,0),t}"undefined"==typeof File&&(self.File=class extends Blob{constructor(e,t,n){if(n){const{type:t,...r}=n;super(e,{type:t}),o(this,"name",void 0),Object.assign(this,r)}else super(e),o(this,"name",void 0);this.name=t}})},6974:(e,t,n)=>{"use strict";n.d(t,{M2:()=>M,O6:()=>A,S1:()=>b,Yz:()=>C,aE:()=>I,gO:()=>w,r_:()=>P,wC:()=>S,xW:()=>E});var r=n(5116),o=n(3555),i=n(3716),a=n(1192),s=n(5806),d=n(9118),u=n(782),c=n(275),l=n(6063);const f=N();let h=f.prevGlobal,g=f.prepared,p=f.results,m=f.callbacks;const v=(0,d.P2)((()=>{(0,d.Q8)((()=>{k((0,o.Rd)())}))}),500);let y=!1;function b(){y=!0,(0,r.ll)(v),(0,o.iw)("reset",O),k((0,o.Rd)())}function w(e){return y||b(),p.orderedIdsByFolderId[e]}function I(e){return y||b(),p.pinnedCountByFolderId[e]||0}function C(){return y||b(),p.chatsCountByFolderId}function S(){return y||b(),p.unreadCountersByFolderId}function E(){var e;return(null===(e=S()[i.Nf])||void 0===e?void 0:e.notificationsCount)||0}function M(e,t){return m.orderedIdsByFolderId[e]||(m.orderedIdsByFolderId[e]=(0,l._)()),m.orderedIdsByFolderId[e].addCallback(t)}function P(e){return m.chatsCountByFolderId.addCallback(e)}function A(e){return m.unreadCountersByFolderId.addCallback(e)}function k(e){let t;i.eM&&(t=performance.now());const n=Boolean(e.chats.listIds.active&&_(i.Nf,e.chats.listIds.active,e.chats.orderedPinnedIds.active)),r=Boolean(e.chats.listIds.archived&&_(i.WS,e.chats.listIds.archived,e.chats.orderedPinnedIds.archived)),o=e.chats.isFullyLoaded.active!==h.isAllFolderFullyLoaded,d=e.chats.isFullyLoaded.archived!==h.isArchivedFolderFullyLoaded,l=e.chatFolders.byId!==h.foldersById,f=e.chats.byId!==h.chatsById,m=e.users.byId!==h.usersById,v=(0,a.dZ)(e)!==h.notifySettings,y=(0,a.NJ)(e)!==h.notifyExceptions;let b=[];if((o||d)&&(b=b.concat(function(e){let t=arguments.length>1&&void 0!==arguments[1]&&arguments[1],n=[];t&&n.push(i.WS);const r=e.chats.isFullyLoaded.active,o=e.chats.isFullyLoaded.archived;if(r&&o){const e=Object.keys(g.folderSummariesById).filter((e=>!p.orderedIdsByFolderId[e])).map(Number);n=n.concat(e)}return h.isAllFolderFullyLoaded=r,h.isArchivedFolderFullyLoaded=o,n}(e,d))),!(n||r||l||f||m||v||y))return void(b.length&&T(b));const w=h.allFolderListIds,I=h.archivedFolderListIds;if(function(e,t,n,r){const o=[];if(t){const t=e.chats.listIds.active,n=e.chats.orderedPinnedIds.active;g.folderSummariesById[i.Nf]=x(i.Nf,t,n),h.allFolderListIds=t,h.allFolderPinnedIds=n,o.push(i.Nf)}if(n){const t=e.chats.listIds.archived,n=e.chats.orderedPinnedIds.archived;g.folderSummariesById[i.WS]=x(i.WS,t,n),h.archivedFolderListIds=t,h.archivedFolderPinnedIds=n,o.push(i.WS)}if(r){const t=e.chatFolders.byId;Object.values(t).forEach((e=>{e!==h.foldersById[e.id]&&(g.folderSummariesById[e.id]=function(e){return{...e,orderedPinnedIds:e.pinnedChatIds,excludedChatIds:e.excludedChatIds?new Set(e.excludedChatIds):void 0,includedChatIds:e.excludedChatIds?new Set(e.includedChatIds):void 0,pinnedChatIds:e.excludedChatIds?new Set(e.pinnedChatIds):void 0}}(e),o.push(e.id))})),h.foldersById=t}}(e,n,r,l),b=b.concat(function(e,t,n,r,o,d){const l=e.chats.byId,f=e.users.byId,m=(0,a.dZ)(e),v=(0,a.NJ)(e),y=Object.values(g.folderSummariesById),b=new Set,w=e.chats.listIds.active,I=e.chats.listIds.archived;let C=[...w||[],...I||[]];return w===o&&I===d||(C=(0,u.Tw)(C.concat(o||[],d||[]))),C.forEach((e=>{const o=l[e];if(!t&&!n&&!r&&o===h.chatsById[e]&&f[e]===h.usersById[e])return;let a;if(o){const n=g.chatSummariesById.get(e),r=function(e,t,n,r){const{id:o,type:a,lastMessage:d,isRestricted:u,isNotJoined:c,folderId:l,unreadCount:f,unreadMentionsCount:h,hasUnreadMark:g,joinDate:p,draftDate:m}=e,v="chatTypePrivate"===a&&r;return{id:o,type:a,isListed:Boolean(d&&!u&&!c),isArchived:l===i.WS,isMuted:(0,s.i4)(e,t,n),isUnread:Boolean(f||h||g),unreadCount:f,unreadMentionsCount:h,order:Math.max(p||0,m||0,(null==d?void 0:d.date)||0),isUserBot:v?"userTypeBot"===v.type:void 0,isUserContact:v?v.isContact:void 0}}(o,m,v,f[e]);if(!t&&n&&(0,c.Z)(r,n))return;g.chatSummariesById.set(e,r),a=function(e,t){return t.reduce(((t,n)=>(function(e,t){var n,r,o;if(!e.isListed)return!1;const{id:a,type:s}=e;if(t.listIds)return!(e.isArchived&&t.id===i.Nf||!e.isArchived&&t.id===i.WS)&&t.listIds.has(a);if(null!==(n=t.excludedChatIds)&&void 0!==n&&n.has(a))return!1;if(null!==(r=t.includedChatIds)&&void 0!==r&&r.has(a))return!0;if(null!==(o=t.pinnedChatIds)&&void 0!==o&&o.has(a))return!0;if(t.excludeArchived&&e.isArchived)return!1;if(t.excludeRead&&!e.isUnread)return!1;if(t.excludeMuted&&e.isMuted&&!e.unreadMentionsCount)return!1;if("chatTypePrivate"===s)if(e.isUserBot){if(t.bots)return!0}else{if(t.contacts&&e.isUserContact)return!0;if(t.nonContacts&&!e.isUserContact)return!0}else{if("chatTypeChannel"===s)return Boolean(t.channels);if("chatTypeBasicGroup"===s||"chatTypeSuperGroup"===s)return Boolean(t.groups)}return!1}(e,n)&&t.push(n.id),t)),[]).sort()}(r,y),a.forEach((e=>{b.add(e)}))}else g.chatSummariesById.delete(e),a=[];const d=g.folderIdsByChatId[e]||[];if((0,u.et)(a,d))return;const w=function(e,t,n){const r=new Set(t),o=new Set(n),i=[];return(0,u.Tw)([...t,...n]).forEach((t=>{let n=p.orderedIdsByFolderId[t];r.has(t)&&!o.has(t)?(g.chatIdsByFolderId[t].delete(e),i.push(t),n&&(n=n.filter((t=>t!==e)),g.isOrderedListJustPatched[t]=!0)):!r.has(t)&&o.has(t)&&(g.chatIdsByFolderId[t]||(g.chatIdsByFolderId[t]=new Set),g.chatIdsByFolderId[t].add(e),n&&(n.push(e),g.isOrderedListJustPatched[t]=!0)),p.orderedIdsByFolderId[t]=n})),g.folderIdsByChatId[e]=n,i}(e,d,a);w.forEach((e=>{b.add(e)}))})),h.chatsById=l,h.usersById=f,h.notifySettings=m,h.notifyExceptions=v,Array.from(b)}(e,l||n||r,v,y,w,I)),T((0,u.Tw)(b)),i.eM){const e=performance.now()-t;e>6&&console.warn(`Slow \`updateFolderManager\`: ${Math.round(e)} ms`)}}function _(e,t,n){const r=e===i.Nf?h.allFolderListIds:h.archivedFolderListIds,o=e===i.Nf?h.allFolderPinnedIds:h.archivedFolderPinnedIds;return r!==t||o!==n}function x(e,t,n){return{id:e,listIds:new Set(t),orderedPinnedIds:n,pinnedChatIds:new Set(n)}}function T(e){let t=!1,n=!1;if(Array.from(e).forEach((e=>{const{pinnedCount:r,orderedIds:o}=function(e){const t=g.folderSummariesById[e];if(!t)return{};const{orderedPinnedIds:n,pinnedChatIds:r}=t,{chatSummariesById:o,chatIdsByFolderId:{[e]:i}}=g,{orderedIdsByFolderId:{[e]:a}}=p,s=i?null==n?void 0:n.filter((e=>i.has(e))):n,d=a||i&&Array.from(i)||[],u=(r?d.filter((e=>!r.has(e))):d).sort(((e,t)=>o.get(t).order-o.get(e).order));return{pinnedCount:(null==s?void 0:s.length)||0,orderedIds:[...s||[],...u]}}(e);if(!o)return;const i=p.orderedIdsByFolderId[e],a=p.pinnedCountByFolderId[e];var s;i&&void 0!==a&&a===r&&!g.isOrderedListJustPatched[e]&&(0,u.et)(o,i)||(g.isOrderedListJustPatched[e]=!1,p.orderedIdsByFolderId[e]=o,p.pinnedCountByFolderId[e]=r,null===(s=m.orderedIdsByFolderId[e])||void 0===s||s.runCallbacks(o));const d=p.chatsCountByFolderId[e],l=o.length;n||(n=d!==l),p.chatsCountByFolderId[e]=l;const f=p.unreadCountersByFolderId[e],h=function(e){const{chatSummariesById:t}=g,{orderedIdsByFolderId:{[e]:n}}=p;return n.reduce(((e,n)=>{const r=t.get(n);return r?(r.isUnread&&(e.chatsCount++,r.unreadMentionsCount&&(e.notificationsCount+=r.unreadMentionsCount),r.isMuted||(r.unreadCount?e.notificationsCount+=r.unreadCount:r.unreadMentionsCount||(e.notificationsCount+=1))),e):e}),{chatsCount:0,notificationsCount:0})}(e);t||(t=!f||!(0,c.Z)(h,f)),p.unreadCountersByFolderId[e]=h})),n){const e={...p.chatsCountByFolderId};p.chatsCountByFolderId=e,m.chatsCountByFolderId.runCallbacks(e)}if(t){const e={...p.unreadCountersByFolderId};p.unreadCountersByFolderId=e,m.unreadCountersByFolderId.runCallbacks(e)}}function N(){return{prevGlobal:{foldersById:{},chatsById:{},usersById:{},notifySettings:{},notifyExceptions:{}},prepared:{folderSummariesById:{},chatSummariesById:new Map,folderIdsByChatId:{},chatIdsByFolderId:{},isOrderedListJustPatched:{}},results:{orderedIdsByFolderId:{},pinnedCountByFolderId:{},chatsCountByFolderId:{},unreadCountersByFolderId:{}},callbacks:{orderedIdsByFolderId:{},chatsCountByFolderId:(0,l._)(),unreadCountersByFolderId:(0,l._)()}}}function O(){const e=N();h=e.prevGlobal,g=e.prepared,p=e.results,m=e.callbacks}},9937:(e,t,n)=>{"use strict";function r(e,t){let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"en";return new Intl.NumberFormat(n,{style:"currency",currency:t}).format("JPY"===t?e:e/100)}n.d(t,{x:()=>r})},6926:(e,t,n)=>{"use strict";n.d(t,{Z:()=>r});const r=e=>{let t;do{t=String(Math.random()).replace("0.","id")}while(e.hasOwnProperty(t));return t}},1947:(e,t,n)=>{"use strict";n.d(t,{J_:()=>a,ZP:()=>i});const r={CHAT_RESTRICTED:"You can't send messages in this chat, you were restricted",CHAT_WRITE_FORBIDDEN:"You can't write in this chat",CHAT_SEND_POLL_FORBIDDEN:"You can't create polls in this chat",CHAT_SEND_STICKERS_FORBIDDEN:"You can't send stickers in this chat",CHAT_SEND_GIFS_FORBIDDEN:"You can't send gifs in this chat",CHAT_SEND_MEDIA_FORBIDDEN:"You can't send media in this chat",CHAT_LINK_EXISTS:"The chat is public, you can't hide the history to new users",SLOWMODE_WAIT_X:"Slowmode is enabled in this chat: you must wait for the specified number of seconds before sending another message to the chat.",USER_BANNED_IN_CHANNEL:"You're banned from sending messages in supergroups / channels",USER_IS_BLOCKED:"You were blocked by this user",YOU_BLOCKED_USER:"You blocked this user",IMAGE_PROCESS_FAILED:"Failure while processing image",MEDIA_EMPTY:"The provided media object is invalid",MEDIA_INVALID:"Media invalid",PHOTO_EXT_INVALID:"The extension of the photo is invalid",PHOTO_INVALID_DIMENSIONS:"The photo dimensions are invalid",PHOTO_SAVE_FILE_INVALID:"Internal issues, try again later",MESSAGE_DELETE_FORBIDDEN:"You can't delete one of the messages you tried to delete, most likely because it is a service message.",MESSAGE_POLL_CLOSED:"Poll closed",MESSAGE_EDIT_TIME_EXPIRED:"You can't edit this message anymore.",CHAT_ADMIN_REQUIRED:"You must be an admin in this chat to do this",PINNED_DIALOGS_TOO_MUCH:"Sorry, you can only pin 5 chats to the top",DIALOG_FILTERS_TOO_MUCH:"Sorry, you can't have more than 10 folders",CHANNEL_PRIVATE:"This channel is private",MEDIA_CAPTION_TOO_LONG:"The provided caption is too long",ADDRESS_STREET_LINE1_INVALID:"The address you provided is not valid",ADDRESS_STREET_LINE2_INVALID:"The address you provided is not valid",ADDRESS_CITY_INVALID:"The city you provided is not valid",ADDRESS_COUNTRY_INVALID:"The country you provided is not valid",ADDRESS_POSTCODE_INVALID:"The postcode you provided is not valid",ADDRESS_STATE_INVALID:"The state you provided is not valid",REQ_INFO_NAME_INVALID:"The name you provided is not valid",REQ_INFO_PHONE_INVALID:"The phone you provided is not valid",REQ_INFO_EMAIL_INVALID:"The email you provided is not valid",LINK_NOT_MODIFIED:"This discussion is already linked to the channel",MESSAGE_TOO_LONG:"Message is too long",SERVICE_WORKER_DISABLED:"Service Worker is disabled. Streaming media may not be supported. Try reloading the page without holding key",MESSAGE_TOO_LONG_PLEASE_REMOVE_CHARACTERS:"The provided message is too long. Please remove {EXTRA_CHARS_COUNT} character{PLURAL_S}.",FRESH_RESET_AUTHORISATION_FORBIDDEN:"You can’t logout other sessions if less than 24 hours have passed since you logged on the current session",BOTS_TOO_MUCH:"There are too many bots in this chat/channel",BOT_GROUPS_BLOCKED:"This bot can't be added to groups",USERS_TOO_MUCH:"The maximum number of users has been exceeded",USER_CHANNELS_TOO_MUCH:"One of the users you tried to add is already in too many channels/supergroups",USER_KICKED:"This user was kicked from this supergroup/channel",USER_NOT_MUTUAL_CONTACT:"The provided user is not a mutual contact",USER_PRIVACY_RESTRICTED:"The user's privacy settings do not allow you to do this",INVITE_HASH_EMPTY:"The invite hash is empty",INVITE_HASH_EXPIRED:"The invite link has expired",INVITE_HASH_INVALID:"The invite hash is invalid",CHANNELS_TOO_MUCH:"You have joined too many channels/supergroups",USER_ALREADY_PARTICIPANT:"You already in the group",SCHEDULE_DATE_INVALID:"Invalid schedule date provided",WALLPAPER_DIMENSIONS_INVALID:"The wallpaper dimensions are invalid, please select another file",ADMINS_TOO_MUCH:"There are too many admins",ADMIN_RANK_EMOJI_NOT_ALLOWED:"An admin rank cannot contain emojis",ADMIN_RANK_INVALID:"The specified admin rank is invalid",FRESH_CHANGE_ADMINS_FORBIDDEN:"You were just elected admin, you can't add or modify other admins yet",INPUT_USER_DEACTIVATED:"The specified user was deleted",BOT_PRECHECKOUT_TIMEOUT:"The request for payment has expired"},o={ADDRESS_STREET_LINE1_INVALID:{field:"streetLine1",message:"Incorrect street address"},ADDRESS_STREET_LINE2_INVALID:{field:"streetLine2",message:"Incorrect street address"},ADDRESS_CITY_INVALID:{field:"city",message:"Incorrect city"},ADDRESS_COUNTRY_INVALID:{field:"countryIso2",message:"Incorrect country"},ADDRESS_POSTCODE_INVALID:{field:"postCode",message:"Incorrect post code"},ADDRESS_STATE_INVALID:{field:"state",message:"Incorrect state"},REQ_INFO_NAME_INVALID:{field:"fullName",message:"Incorrect name"},REQ_INFO_PHONE_INVALID:{field:"phone",message:"Incorrect phone"},REQ_INFO_EMAIL_INVALID:{field:"email",message:"Incorrect email"}};function i(e){const{message:t,isSlowMode:n,textParams:o}=e;if(n){const e=t.indexOf(" (caused by");return e>0?t.substring(0,e):t}let i=r[t];return i&&o&&(i=Object.keys(o).reduce(((e,t)=>e.replace(t,o[t])),i)),i}function a(e){return o[e.message]}},3592:(e,t,n)=>{"use strict";n.d(t,{S:()=>i}),n(3716);var r=n(9118);function o(e){e instanceof ErrorEvent&&"ResizeObserver loop limit exceeded"===e.message||(e.preventDefault(),i(e instanceof ErrorEvent?e.error||e.message:e.reason))}function i(e){console.error(e)}window.addEventListener("error",o),window.addEventListener("unhandledrejection",o),(0,r.P2)(window.alert,1e3)},782:(e,t,n)=>{"use strict";function r(e,t){return e.reduce(((e,n)=>(e[n[t]]=n,e)),{})}function o(e,t){return Object.keys(e).reduce(((n,r,o)=>(n[r]=t(e[r],r,o,e),n)),{})}function i(e,t){return t.reduce(((t,n)=>(t[n]=e[n],t)),{})}function a(e,t){return t.reduce(((t,n)=>(e[n]&&(t[n]=e[n]),t)),{})}function s(e,t){const n=new Set(t.map(String));return i(e,Object.keys(e).filter((e=>!n.has(e))))}function d(e,t){let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"asc";function r(e,t,n,r){const o=("function"==typeof n?n(e):e[n])||0,i=("function"==typeof n?n(t):t[n])||0;return r?o-i:i-o}if(Array.isArray(t)){const[o,i]=Array.isArray(n)?n:[n,n],[a,s]=t,d="asc"===o,u="asc"===i;return e.sort(((e,t)=>r(e,t,a,d)||r(e,t,s,u)))}const o="asc"===n;return e.sort(((e,n)=>r(e,n,t,o)))}function u(e){return e.reduce(((e,t)=>Array.isArray(t)?e.concat(t):(e.push(t),e)),[])}function c(e){return Array.from(new Set(e))}function l(e){return e.filter(Boolean)}function f(e,t){return e.length===t.length&&e.every(((e,n)=>e===t[n]))}function h(e,t){return e[0]<=t[t.length-1]&&e[e.length-1]>=t[0]}function g(e,t){return e.filter((e=>t.has(e)))}function p(e,t){const n=[];for(let r=0;r(t[n]=m(e[n]),t)),{})}function v(e,t){let n=e.length;for(;n--;)if(t(e[n],n,e))return e[n]}n.d(t,{CE:()=>s,Q8:()=>o,Tw:()=>c,Vl:()=>p,Xh:()=>m,Xo:()=>d,YE:()=>h,dF:()=>v,eL:()=>g,ee:()=>r,ei:()=>i,et:()=>f,oA:()=>l,q0:()=>a,xH:()=>u})},711:(e,t,n)=>{"use strict";n.d(t,{Pn:()=>I,i0:()=>w,ll:()=>p,m0:()=>C,qf:()=>S});var r=n(3555),o=n(3716),i=n(9524),a=n(1226),s=n(6063),d=n(2155);const u=/%\d?\$?[sdf@]/g,c=["value","zeroValue","oneValue","twoValue","fewValue","manyValue","otherValue"],l={en:e=>1!==e?6:2,ar:e=>0===e?1:1===e?2:2===e?3:e%100>=3&&e%100<=10?4:e%100>=11?5:6,ca:e=>1!==e?6:2,de:e=>1!==e?6:2,es:e=>1!==e?6:2,fa:e=>e>1?6:2,fr:e=>e>1?6:2,id:()=>0,it:e=>1!==e?6:2,ko:()=>0,ms:()=>0,nl:e=>1!==e?6:2,pl:e=>1===e?2:e%10>=2&&e%10<=4&&(e%100<10||e%100>=20)?4:5,pt_BR:e=>e>1?6:2,ru:e=>e%10==1&&e%100!=11?2:e%10>=2&&e%10<=4&&(e%100<10||e%100>=20)?4:5,tr:e=>e>1?6:2,uk:e=>e%10==1&&e%100!=11?2:e%10>=2&&e%10<=4&&(e%100<10||e%100>=20)?4:5,uz:e=>e>1?6:2},f=new Map;let h,g;const{addCallback:p,removeCallback:m,runCallbacks:v}=(0,s._)();let y,b;const w=(e,t,n)=>{var r,o;if(void 0!==t){const r=Array.isArray(t)?JSON.stringify(t):t,o=f.get(`${e}_${r}_${n}`);if(o)return o}if(!h&&!g)return e;const i=(null===(r=h)||void 0===r?void 0:r[e])||(null===(o=g)||void 0===o?void 0:o[e]);return i?P(i,e,t,n):(g||E(),e)};async function I(e,t){let n=await i.fetch(o.ee,`${o.$O}_${e}_${t}`,i.Type.Json);return n||(n=await async function(e,t,n){const r=await(0,a.t9)("fetchLangStrings",{langPack:e,langCode:t,keys:[n]});if(null!=r&&r.length)return await i.save(o.ee,`${e}_${t}_${n}`,r[0]),r[0]}(o.$O,e,t)),P(n,t)}async function C(e,t){let n=arguments.length>2&&void 0!==arguments[2]&&arguments[2];if(h&&e===y)return void(t&&t());let a=await i.fetch(o.ee,e,i.Type.Json);if(!a&&(n&&await E(),a=await M(e),!a))return;f.clear(),y=e,h=a,document.documentElement.lang=e;const{languages:s,timeFormat:d}=(0,r.Rd)().settings.byKey,u=null==s?void 0:s.find((t=>t.langCode===e));w.isRtl=Boolean(null==u?void 0:u.rtl),w.code=e,w.timeFormat=d,t&&t(),v()}function S(e){e&&e===b||(b=e,w.timeFormat=e,v())}async function E(){g||(g=(await n.e(915).then(n.bind(n,2685))).default,v())}async function M(e){const t=await(0,a.t9)("fetchLangPack",{sourceLangPacks:o.Bg,langCode:e});if(t)return await i.save(o.ee,e,t.langPack),t.langPack}function P(e,t,n,r){const i=e?e["number"==typeof n?function(e){const t=y||o.sR,n=l[t]?l[t](e):0;return c[n]}(n):"value"]:void 0;if(!i||!i.trim()){const e=t.split(".");return e[e.length-1]}if(void 0!==n){const e=function(e,t){t=Array.isArray(t)?t:[t];const n=e.split(u),r=n.shift();return n.reduce(((e,n,r)=>`${e}${String(t[r]||"")}${n}`),r||"")}(i,"i"===r?(0,d.kh)(n):n),o=Array.isArray(n)?JSON.stringify(n):n;return f.set(`${t}_${o}_${r}`,e),e}return i}},647:(e,t,n)=>{"use strict";n.d(t,{cC:()=>b,he:()=>v,UV:()=>y,Iq:()=>w});var r=n(6137),o=n(3716),i=n(1226),a=n(9524),s=n(1394),d=n(7361);const u=48e3;async function c(e){const t=await new Response(e).arrayBuffer();return new Promise((e=>{const r=new Uint8Array(t);let o=new Worker(new URL(n.p+n.u(745),n.b)),i=new Worker(new URL(n.p+n.u(993),n.b));o.onmessage=e=>{null===e.data?i.postMessage({command:"done"}):i.postMessage({command:"encode",buffers:e.data},e.data.map((e=>{let{buffer:t}=e;return t})))},i.onmessage=t=>{"page"===t.data.message&&(e(new Blob([t.data.page],{type:"audio/wav"})),o.terminate(),o=void 0,i.terminate(),i=void 0)},i.postMessage({command:"init",wavBitDepth:16,wavSampleRate:u}),o.postMessage({command:"init",decoderSampleRate:u,outputBufferSampleRate:u}),o.postMessage({command:"decode",pages:r},[r.buffer])}))}var l=n(862);const f={[r.IU.BlobUrl]:a.Type.Blob,[r.IU.Lottie]:a.Type.Blob,[r.IU.Progressive]:void 0,[r.IU.Stream]:void 0},h=new Map,g=new Map,p=new Map,m=new Map;function v(e,t){let n=arguments.length>2&&void 0!==arguments[2]&&arguments[2],i=arguments.length>3?arguments[3]:void 0,a=arguments.length>4?arguments[4]:void 0;if(t===r.IU.Progressive)return d.I_?I(e):v(e,r.IU.BlobUrl,n,i,a);if(!g.has(e)){const r=C(e,t,n).catch((e=>{o.eM&&console.warn(e)})).finally((()=>{g.delete(e),p.delete(e),m.delete(e)}));g.set(e,r)}if(i&&a){let t=p.get(e);t||(t=new Map,p.set(e,t)),t.set(a,i)}return g.get(e)}function y(e){return h.get(e)}function b(e){p.forEach(((t,n)=>{t.forEach((t=>{if(t===e){const e=m.get(n);if(!e)return;(0,i.u3)(e),m.delete(n),p.delete(n)}}))}))}function w(e,t){const n=p.get(e);n&&n.delete(t)}function I(e){const t=`./progressive/${e}`;return h.set(e,t),Promise.resolve(t)}async function C(e,t,n){if(!o.Cy){const r=e.startsWith("avatar")?o.SG:o.lW,i=await a.fetch(r,e,f[t],n);if(i){let t=i;if("audio/ogg"!==i.type||d.m5||(t=await c(t)),"image/webp"===i.type&&!(0,d.on)()&&t){const n=await(0,l._y)(e,t);n&&(t=n)}const n=E(t);return h.set(e,n),n}}if(t===r.IU.Stream){const n=new MediaSource,r=URL.createObjectURL(n);let o=!1;return n.addEventListener("sourceopen",(()=>{if(o)return;o=!0;const r=n.addSourceBuffer("audio/mpeg"),a=S(e,n,r);m.set(e,a),(0,i.t9)("downloadMedia",{url:e,mediaFormat:t},a)})),h.set(e,r),r}const u=S(e);m.set(e,u);const g=await(0,i.t9)("downloadMedia",{url:e,mediaFormat:t,isHtmlAllowed:n},u);if(!g)throw new Error(`Failed to fetch media ${e}`);let{prepared:p,mimeType:v}=g;if("audio/ogg"===v&&!d.m5){const e=await(0,s.gm)(p);URL.revokeObjectURL(p);const t=await c(e);p=E(t),v=t.type}if("image/webp"===v&&!(0,d.on)()){const t=await(0,s.gm)(p);URL.revokeObjectURL(p);const n=await(0,l._y)(e,t);n&&(p=E(n))}return h.set(e,p),p}function S(e,t,n){const r=(o,i)=>{var a;null===(a=p.get(e))||void 0===a||a.forEach((e=>{e(o),e.isCanceled&&(r.isCanceled=!0)})),1===o&&(null==t||t.endOfStream()),i&&(null==n||n.appendBuffer(i))};return r}function E(e){return e instanceof Blob?URL.createObjectURL(e):e}d.I_&&navigator.serviceWorker.addEventListener("message",(async e=>{const{type:t,messageId:n,params:o}=e.data;if("requestPart"!==t)return;const a=await(0,i.t9)("downloadMedia",{mediaFormat:r.IU.Progressive,...o});if(!a)return;const{arrayBuffer:s,mimeType:d,fullSize:u}=a;navigator.serviceWorker.controller.postMessage({type:"partResponse",messageId:n,result:{arrayBuffer:s,mimeType:d,fullSize:u}},[s])}))},735:(e,t,n)=>{"use strict";n.d(t,{D:()=>r});const r=[]},9203:(e,t,n)=>{"use strict";n.d(t,{$y:()=>c,Qt:()=>f,gl:()=>i,o5:()=>l});var r=n(3716),o=n(6063);let i;!function(e){e[e.Auth=0]="Auth",e[e.Main=1]="Main",e[e.Extra=2]="Extra",e[e.Calls=3]="Calls"}(i||(i={}));const a={},s={},{addCallback:d,runCallbacks:u}=(0,o._)();async function c(e,t){if(!a[e]){switch(e){case i.Auth:a[i.Auth]=n.e(133).then(n.bind(n,1133));break;case i.Main:r.eM&&console.log(">>> START LOAD MAIN BUNDLE"),a[i.Main]=Promise.all([n.e(548),n.e(13),n.e(970),n.e(616)]).then(n.bind(n,5616));break;case i.Extra:a[i.Extra]=Promise.all([n.e(548),n.e(13),n.e(395)]).then(n.bind(n,1395));break;case i.Calls:a[i.Calls]=Promise.all([n.e(548),n.e(970),n.e(654)]).then(n.bind(n,7526))}a[e].then(u)}const o=await a[e];return s[e]||(s[e]=o),l(e,t)}function l(e,t){const n=s[e];if(n)return n[t]}const f=d},8406:(e,t,n)=>{"use strict";n.d(t,{KC:()=>A,Ld:()=>E,Nz:()=>b,Vr:()=>P,q3:()=>y,r1:()=>C,rh:()=>M});var r=n(1226),o=n(6137),i=n(8005),a=n(3716),s=n(3555),d=n(5806),u=n(5406),c=n(1192),l=n(7361),f=n(711),h=n(647),g=n(9118);function p(e){const t=e.toJSON();return JSON.stringify({endpoint:t.endpoint,keys:t.keys})}function m(){return!!l.Mc&&("showNotification"in ServiceWorkerRegistration.prototype?"denied"===Notification.permission?(a.eM&&console.warn("[PUSH] The user has blocked push notifications."),!1):"PushManager"in window||(a.eM&&console.warn("[PUSH] Push messaging isn't supported."),!1):(a.eM&&console.warn("[PUSH] Push notifications aren't supported."),!1))}const v=new Set;async function y(e,t){if(void 0!==e&&v.has(e))return;const{notificationSoundVolume:n}=(0,c.dZ)((0,s.Rd)()),r=t?t/10:n/10;if(0===r)return;const o=new Audio("./notification.mp3");o.volume=r,o.setAttribute("mozaudiochannel","notification"),void 0!==e&&(o.addEventListener("ended",(()=>{v.add(e)}),{once:!0}),setTimeout((()=>{v.delete(e)}),3e3));try{await o.play()}catch(e){a.eM&&console.warn("[PUSH] Unable to play notification sound")}}const b=(0,g.Ds)(y,1e3,!0,!1);async function w(){"Notification"in window&&(["granted","denied"].includes(Notification.permission)||await Notification.requestPermission())}async function I(e){const t=(0,s.Rd)(),n=(0,s.Sv)();if(e)try{const t=p(e);return await(0,r.t9)("unregisterDevice",t),await e.unsubscribe(),void n.deleteDeviceToken()}catch(e){a.eM&&console.log("[PUSH] Unable to unsubscribe from push.",e)}t.push&&(await(0,r.t9)("unregisterDevice",t.push.deviceToken),n.deleteDeviceToken())}async function C(){if(!m())return;const e=await navigator.serviceWorker.ready,t=await e.pushManager.getSubscription();await I(t)}let S=!1;async function E(){if(!m())return void await w();const e=await navigator.serviceWorker.ready;let t=await e.pushManager.getSubscription();if(function(e){const t=(0,s.Rd)();return!t.push||!e||p(e)!==t.push.deviceToken||Date.now()-t.push.subscribedAt>432e5}(t)){await I(t);try{t=await e.pushManager.subscribe({userVisibleOnly:!0});const n=p(t);a.eM&&console.log("[PUSH] Received push subscription: ",n),await(0,r.t9)("registerDevice",n),(0,s.Sv)().setDeviceToken(n)}catch(e){"denied"===Notification.permission?a.eM&&console.warn("[PUSH] The user has blocked push notifications."):a.eM&&(console.log("[PUSH] Unable to subscribe to push.",e),e.code===DOMException.ABORT_ERR&&await w())}}}async function M(e){let{chat:t,message:n,isReaction:g=!1}=e;const{hasWebNotifications:p}=await async function(){if(S)return(0,c.dZ)((0,s.Rd)());const[e,t]=await Promise.all([(0,r.t9)("fetchNotificationSettings",{serverTimeOffset:(0,s.Rd)().serverTimeOffset}),(0,r.t9)("fetchNotificationExceptions",{serverTimeOffset:(0,s.Rd)().serverTimeOffset})]);if(!e)return(0,c.dZ)((0,s.Rd)());let n=(0,u.BI)((0,s.Rd)(),e);return t&&(n=(0,u.aJ)(n,t)),(0,s.R3)(n),S=!0,(0,c.dZ)(n)}();if(!function(e){if(!S)return!1;const t=(0,s.Rd)();if((0,d.i4)(e,(0,c.dZ)(t),(0,c.NJ)(t))||e.isNotJoined||!e.isListed)return!1;if(l.$b){const{chatId:n,type:r}=(0,c.Bt)(t)||{};return!(n===e.id&&"thread"===r)}return!document.hasFocus()}(t))return;const v="Notification"in window?"denied"!==Notification.permission||(a.eM&&console.warn("[PUSH] The user has blocked push notifications."),!1):(a.eM&&console.warn("[PUSH] This browser does not support desktop notification"),!1);if(!p||!v){if(g)return;return void b(String(n.id)||t.id)}if(!v)return;if(!n.id)return;const y=(0,d.dT)(n),w=await async function(e){const t=(0,d.RT)(e);if(!t)return;let n=h.UV(t);return n||(await h.he(t,o.IU.BlobUrl),n=h.UV(t)),n}(t),{title:I,body:C}=function(e,t,n){const r=(0,s.Rd)(),{replyToMessageId:o}=t;let{senderId:a}=t;n&&(a=n.userId);const u=a?(0,c.dy)(r,a):void 0,l=(0,d.N5)(t),h=l&&o?(0,c.hj)(r,e.id,o):void 0,{targetUserIds:g,targetChatId:p}=l||{},m=g?g.map((e=>(0,c.dy)(r,e))).filter(Boolean):void 0,v=(0,d.zX)(e),y=v?(0,c.dy)(r,v):void 0;let b;if((0,d.Sm)(e,(0,c.dZ)(r),(0,c.NJ)(r)))if((0,d.Lo)(t)){const n=e&&((0,d.eA)(e)||t.senderId===t.chatId);b=(0,i.D)(f.i0,t,n?void 0:u,n?e:void 0,m,h,p,{asPlainText:!0})}else{const n=(0,d.zF)(f.i0,e.id,u),r=(0,d.MK)(f.i0,t,!1,60,!1);b=n?`${n}: ${r}`:r}else b="New message";return{title:(0,d.U)(f.i0,e,y),body:b}}(t,n,y);if(m()){var E;null!==(E=navigator.serviceWorker)&&void 0!==E&&E.controller&&navigator.serviceWorker.controller.postMessage({type:"showMessageNotification",payload:{title:I,body:C,icon:w,chatId:t.id,messageId:n.id,reaction:null==y?void 0:y.reaction}})}else{const e=(0,s.Sv)(),r={body:C,icon:w,badge:w,tag:String(n.id)};"vibrate"in navigator&&(r.vibrate=[200,100,200]);const o=new Notification(I,r);o.onclick=()=>{o.close(),e.focusMessage({chatId:t.id,messageId:n.id}),y&&e.startActiveReaction({messageId:n.id,reaction:y.reaction}),window.focus&&window.focus()},o.onshow=()=>{b(String(n.id)||t.id)}}}function P(e){var t;!a.Cg&&null!==(t=navigator.serviceWorker)&&void 0!==t&&t.controller&&navigator.serviceWorker.controller.postMessage({type:"closeMessageNotifications",payload:e})}function A(){var e;null!==(e=navigator.serviceWorker)&&void 0!==e&&e.controller&&navigator.serviceWorker.controller.postMessage({type:"clientReady"})}},7926:(e,t,n)=>{"use strict";n.d(t,{$:()=>a,L:()=>i});const r="kz_version",o=["Z","K"];function i(e){localStorage.setItem(r,JSON.stringify(e))}function a(){(function(){const e=localStorage.getItem(r);if(!e)return!1;try{const t=JSON.parse(e);return o.includes(t)}catch(e){return!1}})()||i("Z")}},6272:(e,t,n)=>{"use strict";n.d(t,{U9:()=>a,WZ:()=>u,g3:()=>s,un:()=>d});var r=n(782);const o="X",i="XXX XXX XXX XXX";function a(e,t){return e.filter((e=>e.iso2===t))}function s(e){var t;let n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",o=n.replace(/[^\d+]+/g,"");o.startsWith("+")&&(o=o.substr(1));const i=e.filter((e=>o.startsWith(e.countryCode))),a=(0,r.xH)(i.map((e=>(e.prefixes||[""]).map((t=>({code:`${e.countryCode}${t}`,country:e})))))),s=a.filter((e=>{let{code:t}=e;return o.startsWith(t)})).sort(((e,t)=>e.code.length-t.code.length));return null===(t=s[s.length-1])||void 0===t?void 0:t.country}function d(e,t){let n=e.replace(/[^\d]+/g,"");if(t)n=n.substr(t.countryCode.length);else if(e.startsWith("+"))return e;const r=function(e,t){if(!t||0===t.length)return i;if(1===t.length)return t[0];const n=t.find((e=>e.startsWith(o)))||i,r=t.filter((t=>{const n=t.replace(/[^\dX]+/g,"");if(n.startsWith(o))return!1;for(let t=0;tn.length-1||n[t]!==o&&n[t]!==e[t])return!1;return!0}));return 1===r.length?r[0]:n}(n,null==t?void 0:t.patterns),a=[];let s=0;for(let e=0;e{"use strict";n.d(t,{V:()=>a,q:()=>i});var r=n(6137),o=n(6590);function i(e){const t="thread"!==e.type?`_${e.type}`:-1!==e.threadId?`_${e.threadId}`:"";return`${e.chatId}${t}`}function a(){if(!o.Oy)return;const[e,t]=o.Oy.replace(/^#/,"").split("_");if(null==e||!e.match(/^-?\d+$/))return;const n=["thread","pinned","scheduled"].includes(t);return{chatId:e,type:Boolean(t)&&n?t:"thread",threadId:Boolean(t)&&!n?Number(t):r._f}}},9118:(e,t,n)=>{"use strict";function r(e,t){let n,r=!(arguments.length>2&&void 0!==arguments[2])||arguments[2],o=!(arguments.length>3&&void 0!==arguments[3])||arguments[3];return function(){for(var i=arguments.length,a=new Array(i),s=0;s{o&&e(...a),n=void 0}),t)}}function o(e,t){let n,r,o,i=!(arguments.length>2&&void 0!==arguments[2])||arguments[2];return function(){r=!0;for(var a=arguments.length,s=new Array(a),d=0;d{if(!r)return self.clearInterval(n),void(n=void 0);r=!1,e(...o)}),t))}}function i(e){return d(v,e)}function a(e){return d(y,e)}function s(e){return d(b,e)}function d(e,t){let n,r=!1;return function(){for(var o=arguments.length,i=new Array(o),a=0;a{r=!1,t(...n)})))}}function u(e,t){self.requestIdleCallback?self.requestIdleCallback(e,{timeout:t}):b(e)}n.d(t,{$6:()=>s,D0:()=>y,Ds:()=>r,Gq:()=>I,P2:()=>o,Pn:()=>l,Q8:()=>u,R3:()=>b,T2:()=>v,mS:()=>i,wO:()=>c,wT:()=>a,zD:()=>w});const c=e=>new Promise((t=>{setTimeout((()=>t()),e)}));function l(){return new Promise((e=>{v(e)}))}let f,h,g,p,m;function v(e){let t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];f?t?h.push(e):f.push(e):(f=t?[]:[e],h=t?[e]:[],requestAnimationFrame((()=>{const e=f,t=h;f=void 0,h=void 0,t.forEach((e=>e())),e.forEach((e=>e()))})))}function y(e){v(e,!0)}function b(e){let t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];g?t?p.push(e):g.push(e):(g=t?[]:[e],p=t?[e]:[],Promise.resolve().then((()=>{const e=g,t=p;g=void 0,p=void 0,t.forEach((e=>e())),e.forEach((e=>e()))})))}function w(e){b(e,!0)}function I(e){let t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];return m||(m=[],self.addEventListener("beforeunload",(()=>{m.forEach((e=>e()))}))),t?m.push(e):m.unshift(e),()=>{m=m.filter((t=>t!==e))}}},5765:(e,t,n)=>{"use strict";let r;n.d(t,{W:()=>i,Z:()=>o});try{r=/[^\p{L}\p{M}]+/iu}catch(e){r=/[^\wа-яё]+/i}function o(e,t){if(!e||!t)return!1;const n="string"==typeof t?t.toLowerCase().split(r):t,o=e.toLowerCase();if(1===n.length&&!o.includes(n[0]))return!1;let i;return n.every((e=>!!o.includes(e)&&(i||(i=o.split(r)),i.some((t=>t.startsWith(e))))))}function i(e){const t=e.toLowerCase().split(r);return e=>o(e,t)}},2267:(e,t,n)=>{"use strict";n.d(t,{b:()=>r});const r=e=>Math.floor(Date.now()/1e3)+e},3100:(e,t,n)=>{"use strict";n.d(t,{f3:()=>g,jv:()=>l,ti:()=>u,Qw:()=>h,K8:()=>f,wX:()=>c});function r(e){return new Promise(((t,n)=>{e.oncomplete=e.onsuccess=()=>t(e.result),e.onabort=e.onerror=()=>n(e.error)}))}let o;function i(){return o||(o=function(e,t){const n=(!navigator.userAgentData&&/Safari\//.test(navigator.userAgent)&&!/Chrom(e|ium)\//.test(navigator.userAgent)&&indexedDB.databases?new Promise((function(e){var t=function(){return indexedDB.databases().finally(e)};o=setInterval(t,100),t()})).finally((function(){return clearInterval(o)})):Promise.resolve()).then((()=>{const e=indexedDB.open("keyval-store");return e.onupgradeneeded=()=>e.result.createObjectStore(t),r(e)}));var o;return(e,r)=>n.then((n=>r(n.transaction(t,e).objectStore(t))))}(0,"keyval")),o}var a=n(3716),s=n(9524);const d=[1,2,3,4,5];function u(){let e=arguments.length>0&&void 0!==arguments[0]&&arguments[0];if(e&&localStorage.getItem(a.Vx))return!0;const t=localStorage.getItem(a.b_);if(!t)return!1;try{const e=JSON.parse(t);return Boolean(e&&e.id&&e.dcID)}catch(e){return!1}}function c(e,t){const{mainDcId:n,keys:r,hashes:o}=e;localStorage.setItem(a.b_,JSON.stringify({dcID:n,id:t})),localStorage.setItem("dc",String(n)),Object.keys(r).map(Number).forEach((e=>{localStorage.setItem(`dc${e}_auth_key`,JSON.stringify(r[e]))})),o&&Object.keys(o).map(Number).forEach((e=>{localStorage.setItem(`dc${e}_hash`,JSON.stringify(o[e]))}))}function l(){[a.b_,"dc",...d.map((e=>`dc${e}_auth_key`)),...d.map((e=>`dc${e}_hash`))].forEach((e=>{localStorage.removeItem(e)}))}function f(){if(!u())return;const e=JSON.parse(localStorage.getItem(a.b_)),t=Number(e.dcID),n={},r={};return d.forEach((e=>{try{const t=localStorage.getItem(`dc${e}_auth_key`);t&&(n[e]=JSON.parse(t));const o=localStorage.getItem(`dc${e}_hash`);o&&(r[e]=JSON.parse(o))}catch(e){a.eM&&console.warn("Failed to load stored session",e)}})),Object.keys(n).length?{mainDcId:t,keys:n,hashes:r}:void 0}async function h(){const e=localStorage.getItem(a.Vx);if(!e)return;const t=await function(e,t=i()){return t("readonly",(t=>r(t.get(e))))}(`GramJs:${e}`);try{c(JSON.parse(t))}catch(e){a.eM&&console.warn("Failed to load legacy session",e)}}async function g(){localStorage.removeItem(a.Vx);const e=await function(e=i()){return e("readonly",(e=>{if(e.getAllKeys)return r(e.getAllKeys());const t=[];return function(e,t){return e.openCursor().onsuccess=function(){this.result&&(t(this.result),this.result.continue())},r(e.transaction)}(e,(e=>t.push(e.key))).then((()=>t))}))}();await Promise.all([s.clear("GramJs"),...e.filter((e=>"string"==typeof e&&e.startsWith("GramJs:GramJs-session-"))).map((e=>function(e,t=i()){return t("readwrite",(t=>(t.delete(e),r(t.transaction))))}(e)))])}},7370:(e,t,n)=>{"use strict";n.d(t,{Z:()=>h});var r=n(9933),o=n(9118);const i=JSON.parse('{"--color-primary":["#3390EC","#8774E1"],"--color-primary-opacity":["#50A2E980","#8378DB80"],"--color-primary-shade":["#4a95d6","#7b71c6"],"--color-background":["#FFFFFF","#212121"],"--color-background-compact-menu":["#FFFFFFBB","#212121DD"],"--color-background-compact-menu-reactions":["#FFFFFFEB","#212121DD"],"--color-background-compact-menu-hover":["#00000011","#00000066"],"--color-background-secondary":["#f4f4f5","#0F0F0F"],"--color-background-secondary-accent":["#E4E4E5","#100f10"],"--color-background-own":["#EEFFDE","#766AC8"],"--color-background-own-apple":["#DCF8C5","#766AC8"],"--color-background-selected":["#F4F4F5","#2C2C2C"],"--color-background-own-selected":["#d0ffac","#6549d4"],"--color-chat-hover":["#F4F4F5","#2C2C2C"],"--color-chat-active":["#3390EC","#766AC8"],"--color-item-active":["#ededed","#292929"],"--color-text":["#000000","#FFFFFF"],"--color-text-secondary":["#707579","#AAAAAA"],"--color-icon-secondary":["#707579","#AAAAAA"],"--color-text-secondary-apple":["#8E8E92","#AAAAAA"],"--color-borders":["#DADCE0","#303030"],"--color-borders-input":["#DADCE0","#5B5B5A"],"--color-dividers":["#C8C6CC","#404040"],"--color-links":["#3390EC","#8774E1"],"--color-gray":["#C4C9CC","#717579"],"--color-pinned":["#C4C9CC","#707579"],"--color-default-shadow":["#72727240","#1010109c"],"--color-light-shadow":["#7272722B","#00000040"],"--color-green":["#00C73E","#8774E1"],"--color-text-meta-colored":["#4DCD5E","#8378DB"],"--color-reply-hover":["#F4F4F4","#272727"],"--color-reply-active":["#E8E9E9","#2E2F2F"],"--color-reply-own-hover":["#D9F5CE","#8775DA"],"--color-reply-own-hover-apple":["#cbefb7","#8775DA"],"--color-reply-own-active":["#C5ECBE","#917DEA"],"--color-reply-own-active-apple":["#bae6a8","#917DEA"],"--color-accent-own":["#45AF54","#FFFFFF"],"--color-message-meta-own":["#4FAE4EFF","#FFFFFF88"],"--color-own-links":["#3390EC","#FFFFFF"],"--color-code":["#4a729a","#8774E1"],"--color-code-own":["#3c7940","#FFFFFF"],"--color-code-bg":["#70757914","#ffffff26"],"--color-code-own-bg":["#70757914","#ffffff26"],"--color-composer-button":["#707579CC","#AAAAAACC"],"--color-message-reaction":["#ebf3fd","#2b2a35"],"--color-message-reaction-hover":["#c5def9","#343147"],"--color-message-reaction-own":["#cef0ba","#675CAF"],"--color-message-reaction-hover-own":["#b5e0a4","#5B529B"]}');let a=!1;const s=/^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})?$/i,d=new Set(["--color-primary-shade","--color-text-secondary"]),u=(e,t,n)=>(1-n)*e+n*t,c=Object.keys(i).map((e=>({property:e,colors:[l(i[e][0]),l(i[e][1])]})));function l(e){const t=s.exec(e);return{r:parseInt(t[1],16),g:parseInt(t[2],16),b:parseInt(t[3],16),a:void 0!==t[4]?parseInt(t[4],16):void 0}}function f(e,t){let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:1;c.forEach((r=>{let{property:o,colors:i}=r;const a=Math.round(u(i[e].r,i[t].r,n)),s=Math.round(u(i[e].g,i[t].g,n)),c=Math.round(u(i[e].b,i[t].b,n)),l=void 0!==i[e].a?Math.round(u(i[e].a,i[t].a,n)):void 0;document.documentElement.style.setProperty(o,void 0!==l?`rgba(${a},${s},${c},${l/255})`:`rgb(${a},${s},${c})`),d.has(o)&&document.documentElement.style.setProperty(`${o}-rgb`,`${a},${s},${c}`)}))}const h=(e,t)=>{const n="dark"===e,i=a&&t,s=n?0:1,d=n?1:0,u=Date.now(),c=document.querySelector('meta[name="theme-color"]');document.documentElement.classList.remove("theme-"+(n?"light":"dark")),a&&document.documentElement.classList.add("no-animations"),document.documentElement.classList.add(`theme-${e}`),c&&c.setAttribute("content",n?"#212121":"#fff"),setTimeout((()=>{document.documentElement.classList.remove("no-animations")}),500),a=!0,i?(0,o.T2)((()=>{(0,r.cK)((()=>{const e=Math.min((Date.now()-u)/200,1);return f(s,d,function(e){return 1-(1-e)**3.5}(e)),e<1}))})):f(s,d)}},2155:(e,t,n)=>{"use strict";n.d(t,{Xv:()=>d,bi:()=>s,kh:()=>i});var r=n(3681),o=n(4284);function i(e){return String(e).replace(/\d(?=(\d{3})+$)/g,"$& ")}function a(e){return".0"===String(e.toFixed(1)).substr(-2)?Math.round(e):e.toFixed(1).replace(".",",")}function s(e){return e<1e3?e:e<1e6?`${a(e/1e3)}K`:`${a(e/1e6)}M`}const d=(0,n(5155).Z)((function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:2;return e.replace(/[.,!@#$%^&*()_+=\-`~[\]/\\{}:"|<>?]+/gi,"").trim().split(/\s+/).slice(0,t).map((e=>{if(!e.length)return"";const t=(e=(0,o.g6)(e)).match(r.Z);return t&&e.startsWith(t[0])?t[0]:e.match(/./u)[0].toUpperCase()})).join("")}))},8035:(e,t,n)=>{"use strict";function r(e,t){return!e||!t||e.length<=t?e:`${e.substring(0,t)}...`}n.d(t,{Z:()=>r})},862:(e,t,n)=>{"use strict";n.d(t,{Hu:()=>d,_y:()=>u,p6:()=>c});var r=n(7361),o=n(1394),i=n(9118);let a,s;const d="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR42mNkYAAAAAYAAjCB0C8AAAAASUVORK5CYII=";async function u(e,t){for(l();!s.wasmReady;)await(0,i.wO)(2e3);const{result:n,width:r,height:o}=await function(e,t){return new Promise((n=>{s.requests||(s.requests=new Map),s.requests.set(e,n),s.postMessage({id:e,blob:t})}))}(e,t);if(r&&o)return function(e){let{result:t,width:n,height:r}=e;return a||(a=document.createElement("canvas")),new Promise((e=>{const o=new ImageData(t,n,r);a.width=n,a.height=r,a.getContext("2d").putImageData(o,0,0),a.toBlob((t=>{e(null!=t?t:void 0)}),"image/png",1)}))}({result:n,width:r,height:o})}async function c(e,t){if((0,r.on)()||"data:image/webp"!==t.substr(0,15))return t;l();const n=await u(e,(0,o.A9)(t));if(!n)throw new Error(`Can't convert webp to png. Url: ${t}`);return(0,o.YJ)(n)}function l(){s||(s=new Worker(new URL(n.p+n.u(536),n.b)),s.wasmReady=!1,s.onmessage=f)}function f(e){const{id:t}=e.data;switch(e.data.type){case"initialized":s.wasmReady=!0;break;case"result":if(s.requests.has(t)){const n=s.requests.get(t);s.requests.delete(t),n(e.data)}}}},1622:(e,t,n)=>{"use strict";n.d(t,{IT:()=>l,W8:()=>h,px:()=>f});var r=n(3716),o=n(3555),i=n(3100);const a=["t.me","telegram.me"].map((e=>`//${e}/_websync_?`)),s=`${r.Ji} Z`,d="tgme_sync",u=()=>Math.floor(Number(new Date)/1e3);let c;const l=e=>{const t=u(),{canRedirect:n,ts:r}=JSON.parse(localStorage.getItem(d)||"{}");return n!==e||r+86400<=t?Promise.all(a.map((t=>new Promise(((n,r)=>{const o=document.createElement("script"),i=()=>Boolean(document.body.removeChild(o));o.src=t+new URLSearchParams({authed:Number(e).toString(),version:s}),document.body.appendChild(o),o.onload=()=>{(e=>{const t=u();localStorage.setItem(d,JSON.stringify({canRedirect:e,ts:t}))})(e),i(),c&&(clearTimeout(c),c=void 0),f(),n()},o.onerror=()=>{i(),r()}}))))):Promise.resolve()};function f(){if(r.eM)return;if(void 0!==c)return;const e=u(),{ts:t}=JSON.parse(localStorage.getItem(d)||"{}"),n=86400-(e-t);c=setTimeout((()=>{const{authState:e}=(0,o.Rd)(),t="authorizationStateReady"===e||(0,i.ti)(!0);l(t)}),Math.max(0,1e3*n))}function h(){localStorage.removeItem(d)}},3858:(e,t,n)=>{"use strict";n.d(t,{Z:()=>h,z:()=>l});var r=n(9118),o=n(3716),i=n(7361);const a=i.wB&&f(),s=window.innerHeight;let d=l(),u=!1;const c=(0,r.P2)((()=>{d=l(),!u&&((d.width<=o.l3||d.width<=o.u_&&d.height<=o.rO)!==i.wB||i.wB&&a!==f())&&window.location.reload()}),250,!0);function l(){let e;e=i.cj?window.visualViewport.height+window.visualViewport.pageTop:window.innerHeight;const t=.01*e;return document.documentElement.style.setProperty("--vh",`${t}px`),{width:window.innerWidth,height:window.innerHeight}}function f(){return i.cj?window.matchMedia("(orientation: landscape)").matches:window.matchMedia("screen and (min-device-aspect-ratio: 1/1) and (orientation: landscape)").matches}window.addEventListener("orientationchange",c),i.cj?window.visualViewport.addEventListener("resize",c):window.addEventListener("resize",c);const h={get:()=>d,getIsKeyboardVisible:()=>s>d.height,disableRefresh:function(){u=!0},enableRefresh:function(){u=!1}}},5155:(e,t,n)=>{"use strict";n.d(t,{Z:()=>o});const r=new WeakMap;function o(e){return function(){let t=r.get(e);for(var n=arguments.length,o=new Array(n),i=0;i{self,e.exports=(()=>{var e={192:(e,t)=>{var n,r,o=function(){var e=function(e,t){var n=e,r=a[t],o=null,i=0,d=null,m=[],v={},b=function(e,t){o=function(e){for(var t=new Array(e),n=0;n=7&&S(e),null==d&&(d=P(n,r,m)),M(d,t)},w=function(e,t){for(var n=-1;n<=7;n+=1)if(!(e+n<=-1||i<=e+n))for(var r=-1;r<=7;r+=1)t+r<=-1||i<=t+r||(o[e+n][t+r]=0<=n&&n<=6&&(0==r||6==r)||0<=r&&r<=6&&(0==n||6==n)||2<=n&&n<=4&&2<=r&&r<=4)},I=function(){for(var e=8;e>r&1);o[Math.floor(r/3)][r%3+i-8-3]=a}for(r=0;r<18;r+=1)a=!e&&1==(t>>r&1),o[r%3+i-8-3][Math.floor(r/3)]=a},E=function(e,t){for(var n=r<<3|t,a=s.getBCHTypeInfo(n),d=0;d<15;d+=1){var u=!e&&1==(a>>d&1);d<6?o[d][8]=u:d<8?o[d+1][8]=u:o[i-15+d][8]=u}for(d=0;d<15;d+=1)u=!e&&1==(a>>d&1),d<8?o[8][i-d-1]=u:d<9?o[8][15-d-1+1]=u:o[8][15-d-1]=u;o[i-8][8]=!e},M=function(e,t){for(var n=-1,r=i-1,a=7,d=0,u=s.getMaskFunction(t),c=i-1;c>0;c-=2)for(6==c&&(c-=1);;){for(var l=0;l<2;l+=1)if(null==o[r][c-l]){var f=!1;d>>a&1)),u(r,c-l)&&(f=!f),o[r][c-l]=f,-1==(a-=1)&&(d+=1,a=7)}if((r+=n)<0||i<=r){r-=n,n=-n;break}}},P=function(e,t,n){for(var r=c.getRSBlocks(e,t),o=l(),i=0;i8*d)throw"code length overflow. ("+o.getLengthInBits()+">"+8*d+")";for(o.getLengthInBits()+4<=8*d&&o.put(0,4);o.getLengthInBits()%8!=0;)o.putBit(!1);for(;!(o.getLengthInBits()>=8*d||(o.put(236,8),o.getLengthInBits()>=8*d));)o.put(17,8);return function(e,t){for(var n=0,r=0,o=0,i=new Array(t.length),a=new Array(t.length),d=0;d=0?g.getAt(p):0}}var m=0;for(f=0;fr)&&(e=r,t=n)}return t}())},v.createTableTag=function(e,t){e=e||2;var n="";n+='',n+="";for(var r=0;r";for(var o=0;o';n+=""}return(n+="")+"
"},v.createSvgTag=function(e,t,n,r){var o={};"object"==typeof arguments[0]&&(e=(o=arguments[0]).cellSize,t=o.margin,n=o.alt,r=o.title),e=e||2,t=void 0===t?4*e:t,(n="string"==typeof n?{text:n}:n||{}).text=n.text||null,n.id=n.text?n.id||"qrcode-description":null,(r="string"==typeof r?{text:r}:r||{}).text=r.text||null,r.id=r.text?r.id||"qrcode-title":null;var i,a,s,d,u=v.getModuleCount()*e+2*t,c="";for(d="l"+e+",0 0,"+e+" -"+e+",0 0,-"+e+"z ",c+=''+A(r.text)+"":"",c+=n.text?''+A(n.text)+"":"",c+='',c+='"},v.createDataURL=function(e,t){e=e||2,t=void 0===t?4*e:t;var n=v.getModuleCount()*e+2*t,r=t,o=n-t;return y(n,n,(function(t,n){if(r<=t&&t"};var A=function(e){for(var t="",n=0;n":t+=">";break;case"&":t+="&";break;case'"':t+=""";break;default:t+=r}}return t};return v.createASCII=function(e,t){if((e=e||1)<2)return function(e){e=void 0===e?2:e;var t,n,r,o,i,a=1*v.getModuleCount()+2*e,s=e,d=a-e,u={"██":"█","█ ":"▀"," █":"▄"," ":" "},c={"██":"▀","█ ":"▀"," █":" "," ":" "},l="";for(t=0;t=d?c[i]:u[i];l+="\n"}return a%2&&e>0?l.substring(0,l.length-a-1)+Array(a+1).join("▀"):l.substring(0,l.length-1)}(t);e-=1,t=void 0===t?2*e:t;var n,r,o,i,a=v.getModuleCount()*e+2*t,s=t,d=a-t,u=Array(e+1).join("██"),c=Array(e+1).join(" "),l="",f="";for(n=0;n>>8),t.push(255&a)):t.push(r)}}return t}};var t,n,r,o,i,a={L:1,M:0,Q:3,H:2},s=(t=[[],[6,18],[6,22],[6,26],[6,30],[6,34],[6,22,38],[6,24,42],[6,26,46],[6,28,50],[6,30,54],[6,32,58],[6,34,62],[6,26,46,66],[6,26,48,70],[6,26,50,74],[6,30,54,78],[6,30,56,82],[6,30,58,86],[6,34,62,90],[6,28,50,72,94],[6,26,50,74,98],[6,30,54,78,102],[6,28,54,80,106],[6,32,58,84,110],[6,30,58,86,114],[6,34,62,90,118],[6,26,50,74,98,122],[6,30,54,78,102,126],[6,26,52,78,104,130],[6,30,56,82,108,134],[6,34,60,86,112,138],[6,30,58,86,114,142],[6,34,62,90,118,146],[6,30,54,78,102,126,150],[6,24,50,76,102,128,154],[6,28,54,80,106,132,158],[6,32,58,84,110,136,162],[6,26,54,82,110,138,166],[6,30,58,86,114,142,170]],n=1335,r=7973,i=function(e){for(var t=0;0!=e;)t+=1,e>>>=1;return t},(o={}).getBCHTypeInfo=function(e){for(var t=e<<10;i(t)-i(n)>=0;)t^=n<=0;)t^=r<5&&(n+=3+i-5)}for(r=0;r=256;)t-=255;return e[t]}}}();function u(e,t){if(void 0===e.length)throw e.length+"/"+t;var n=function(){for(var n=0;n>>7-t%8&1)},put:function(e,t){for(var r=0;r>>t-r-1&1))},getLengthInBits:function(){return t},putBit:function(n){var r=Math.floor(t/8);e.length<=r&&e.push(0),n&&(e[r]|=128>>>t%8),t+=1}};return n},f=function(e){var t=e,n={getMode:function(){return 1},getLength:function(e){return t.length},write:function(e){for(var n=t,o=0;o+2>>8&255)+(255&o),e.put(o,13),n+=2}if(n>>8)},writeBytes:function(e,n,r){n=n||0,r=r||e.length;for(var o=0;o0&&(t+=","),t+=e[n];return t+"]"}};return t},v=function(e){var t=e,n=0,r=0,o=0,i={read:function(){for(;o<8;){if(n>=t.length){if(0==o)return-1;throw"unexpected end of file./"+o}var e=t.charAt(n);if(n+=1,"="==e)return o=0,-1;e.match(/^\s$/)||(r=r<<6|a(e.charCodeAt(0)),o+=6)}var i=r>>>o-8&255;return o-=8,i}},a=function(e){if(65<=e&&e<=90)return e-65;if(97<=e&&e<=122)return e-97+26;if(48<=e&&e<=57)return e-48+52;if(43==e)return 62;if(47==e)return 63;throw"c:"+e};return i},y=function(e,t,n){for(var r=function(e,t){var n=e,r=t,o=new Array(e*t),i={setPixel:function(e,t,r){o[t*n+e]=r},write:function(e){e.writeString("GIF87a"),e.writeShort(n),e.writeShort(r),e.writeByte(128),e.writeByte(0),e.writeByte(0),e.writeByte(0),e.writeByte(0),e.writeByte(0),e.writeByte(255),e.writeByte(255),e.writeByte(255),e.writeString(","),e.writeShort(0),e.writeShort(0),e.writeShort(n),e.writeShort(r),e.writeByte(0);var t=a(2);e.writeByte(2);for(var o=0;t.length-o>255;)e.writeByte(255),e.writeBytes(t,o,255),o+=255;e.writeByte(t.length-o),e.writeBytes(t,o,t.length-o),e.writeByte(0),e.writeString(";")}},a=function(e){for(var t=1<>>t!=0)throw"length over";for(;u+t>=8;)d.writeByte(255&(e<>>=8-u,c=0,u=0;c|=e<0&&d.writeByte(c)}});f.write(t,r);var h=0,g=String.fromCharCode(o[h]);for(h+=1;h=6;)i(e>>>t-6),t-=6},o.flush=function(){if(t>0&&(i(e<<6-t),e=0,t=0),n%3!=0)for(var o=3-n%3,a=0;a>6,128|63&r):r<55296||r>=57344?t.push(224|r>>12,128|r>>6&63,128|63&r):(n++,r=65536+((1023&r)<<10|1023&e.charCodeAt(n)),t.push(240|r>>18,128|r>>12&63,128|r>>6&63,128|63&r))}return t}(e)},void 0===(r="function"==typeof(n=function(){return o})?n.apply(t,[]):n)||(e.exports=r)}},t={};function n(r){var o=t[r];if(void 0!==o)return o.exports;var i=t[r]={exports:{}};return e[r](i,i.exports,n),i.exports}n.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return n.d(t,{a:t}),t},n.d=(e,t)=>{for(var r in t)n.o(t,r)&&!n.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:t[r]})},n.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t);var r={};return(()=>{"use strict";n.d(r,{default:()=>E});const e=e=>!!e&&"object"==typeof e&&!Array.isArray(e);function t(n,...r){if(!r.length)return n;const o=r.shift();return void 0!==o&&e(n)&&e(o)?(n=Object.assign({},n),Object.keys(o).forEach((r=>{const i=n[r],a=o[r];Array.isArray(i)&&Array.isArray(a)?n[r]=a:e(i)&&e(a)?n[r]=t(Object.assign({},i),a):n[r]=a})),t(n,...r)):n}function o(e,t){const n=document.createElement("a");n.download=t,n.href=e,document.body.appendChild(n),n.click(),document.body.removeChild(n)}function i(e){return new Promise((t=>{const n=new FileReader;n.onloadend=()=>t(n.result),n.readAsDataURL(e)}))}const a={L:.07,M:.15,Q:.25,H:.3};class s{constructor({svg:e,type:t}){this._svg=e,this._type=t}draw(e,t,n,r){let o;switch(this._type){case"dots":o=this._drawDot;break;case"classy":o=this._drawClassy;break;case"classy-rounded":o=this._drawClassyRounded;break;case"rounded":o=this._drawRounded;break;case"extra-rounded":o=this._drawExtraRounded;break;default:o=this._drawSquare}o.call(this,{x:e,y:t,size:n,getNeighbor:r})}_rotateFigure({x:e,y:t,size:n,rotation:r=0,draw:o}){var i;const a=e+n/2,s=t+n/2;o(),null===(i=this._element)||void 0===i||i.setAttribute("transform",`rotate(${180*r/Math.PI},${a},${s})`)}_basicDot(e){const{size:t,x:n,y:r}=e;this._rotateFigure(Object.assign(Object.assign({},e),{draw:()=>{this._element=document.createElementNS("http://www.w3.org/2000/svg","circle"),this._element.setAttribute("cx",String(n+t/2)),this._element.setAttribute("cy",String(r+t/2)),this._element.setAttribute("r",String(t/2))}}))}_basicSquare(e){const{size:t,x:n,y:r}=e;this._rotateFigure(Object.assign(Object.assign({},e),{draw:()=>{this._element=document.createElementNS("http://www.w3.org/2000/svg","rect"),this._element.setAttribute("x",String(n)),this._element.setAttribute("y",String(r)),this._element.setAttribute("width",String(t)),this._element.setAttribute("height",String(t))}}))}_basicSideRounded(e){const{size:t,x:n,y:r}=e;this._rotateFigure(Object.assign(Object.assign({},e),{draw:()=>{this._element=document.createElementNS("http://www.w3.org/2000/svg","path"),this._element.setAttribute("d",`M ${n} ${r}v ${t}h `+t/2+`a ${t/2} ${t/2}, 0, 0, 0, 0 ${-t}`)}}))}_basicCornerRounded(e){const{size:t,x:n,y:r}=e;this._rotateFigure(Object.assign(Object.assign({},e),{draw:()=>{this._element=document.createElementNS("http://www.w3.org/2000/svg","path"),this._element.setAttribute("d",`M ${n} ${r}v ${t}h ${t}v `+-t/2+`a ${t/2} ${t/2}, 0, 0, 0, ${-t/2} ${-t/2}`)}}))}_basicCornerExtraRounded(e){const{size:t,x:n,y:r}=e;this._rotateFigure(Object.assign(Object.assign({},e),{draw:()=>{this._element=document.createElementNS("http://www.w3.org/2000/svg","path"),this._element.setAttribute("d",`M ${n} ${r}v ${t}h ${t}a ${t} ${t}, 0, 0, 0, ${-t} ${-t}`)}}))}_basicCornersRounded(e){const{size:t,x:n,y:r}=e;this._rotateFigure(Object.assign(Object.assign({},e),{draw:()=>{this._element=document.createElementNS("http://www.w3.org/2000/svg","path"),this._element.setAttribute("d",`M ${n} ${r}v `+t/2+`a ${t/2} ${t/2}, 0, 0, 0, ${t/2} ${t/2}h `+t/2+"v "+-t/2+`a ${t/2} ${t/2}, 0, 0, 0, ${-t/2} ${-t/2}`)}}))}_drawDot({x:e,y:t,size:n}){this._basicDot({x:e,y:t,size:n,rotation:0})}_drawSquare({x:e,y:t,size:n}){this._basicSquare({x:e,y:t,size:n,rotation:0})}_drawRounded({x:e,y:t,size:n,getNeighbor:r}){const o=r?+r(-1,0):0,i=r?+r(1,0):0,a=r?+r(0,-1):0,s=r?+r(0,1):0,d=o+i+a+s;if(0!==d)if(d>2||o&&i||a&&s)this._basicSquare({x:e,y:t,size:n,rotation:0});else{if(2===d){let r=0;return o&&a?r=Math.PI/2:a&&i?r=Math.PI:i&&s&&(r=-Math.PI/2),void this._basicCornerRounded({x:e,y:t,size:n,rotation:r})}if(1===d){let r=0;return a?r=Math.PI/2:i?r=Math.PI:s&&(r=-Math.PI/2),void this._basicSideRounded({x:e,y:t,size:n,rotation:r})}}else this._basicDot({x:e,y:t,size:n,rotation:0})}_drawExtraRounded({x:e,y:t,size:n,getNeighbor:r}){const o=r?+r(-1,0):0,i=r?+r(1,0):0,a=r?+r(0,-1):0,s=r?+r(0,1):0,d=o+i+a+s;if(0!==d)if(d>2||o&&i||a&&s)this._basicSquare({x:e,y:t,size:n,rotation:0});else{if(2===d){let r=0;return o&&a?r=Math.PI/2:a&&i?r=Math.PI:i&&s&&(r=-Math.PI/2),void this._basicCornerExtraRounded({x:e,y:t,size:n,rotation:r})}if(1===d){let r=0;return a?r=Math.PI/2:i?r=Math.PI:s&&(r=-Math.PI/2),void this._basicSideRounded({x:e,y:t,size:n,rotation:r})}}else this._basicDot({x:e,y:t,size:n,rotation:0})}_drawClassy({x:e,y:t,size:n,getNeighbor:r}){const o=r?+r(-1,0):0,i=r?+r(1,0):0,a=r?+r(0,-1):0,s=r?+r(0,1):0;0!==o+i+a+s?o||a?i||s?this._basicSquare({x:e,y:t,size:n,rotation:0}):this._basicCornerRounded({x:e,y:t,size:n,rotation:Math.PI/2}):this._basicCornerRounded({x:e,y:t,size:n,rotation:-Math.PI/2}):this._basicCornersRounded({x:e,y:t,size:n,rotation:Math.PI/2})}_drawClassyRounded({x:e,y:t,size:n,getNeighbor:r}){const o=r?+r(-1,0):0,i=r?+r(1,0):0,a=r?+r(0,-1):0,s=r?+r(0,1):0;0!==o+i+a+s?o||a?i||s?this._basicSquare({x:e,y:t,size:n,rotation:0}):this._basicCornerExtraRounded({x:e,y:t,size:n,rotation:Math.PI/2}):this._basicCornerExtraRounded({x:e,y:t,size:n,rotation:-Math.PI/2}):this._basicCornersRounded({x:e,y:t,size:n,rotation:Math.PI/2})}}class d{constructor({svg:e,type:t}){this._svg=e,this._type=t}draw(e,t,n,r){let o;switch(this._type){case"square":o=this._drawSquare;break;case"extra-rounded":o=this._drawExtraRounded;break;default:o=this._drawDot}o.call(this,{x:e,y:t,size:n,rotation:r})}_rotateFigure({x:e,y:t,size:n,rotation:r=0,draw:o}){var i;const a=e+n/2,s=t+n/2;o(),null===(i=this._element)||void 0===i||i.setAttribute("transform",`rotate(${180*r/Math.PI},${a},${s})`)}_basicDot(e){const{size:t,x:n,y:r}=e,o=t/7;this._rotateFigure(Object.assign(Object.assign({},e),{draw:()=>{this._element=document.createElementNS("http://www.w3.org/2000/svg","path"),this._element.setAttribute("clip-rule","evenodd"),this._element.setAttribute("d",`M ${n+t/2} ${r}a ${t/2} ${t/2} 0 1 0 0.1 0zm 0 ${o}a ${t/2-o} ${t/2-o} 0 1 1 -0.1 0Z`)}}))}_basicSquare(e){const{size:t,x:n,y:r}=e,o=t/7;this._rotateFigure(Object.assign(Object.assign({},e),{draw:()=>{this._element=document.createElementNS("http://www.w3.org/2000/svg","path"),this._element.setAttribute("clip-rule","evenodd"),this._element.setAttribute("d",`M ${n} ${r}v ${t}h ${t}v `+-t+"z"+`M ${n+o} ${r+o}h `+(t-2*o)+"v "+(t-2*o)+"h "+(2*o-t)+"z")}}))}_basicExtraRounded(e){const{size:t,x:n,y:r}=e,o=t/7;this._rotateFigure(Object.assign(Object.assign({},e),{draw:()=>{this._element=document.createElementNS("http://www.w3.org/2000/svg","path"),this._element.setAttribute("clip-rule","evenodd"),this._element.setAttribute("d",`M ${n} ${r+2.5*o}v `+2*o+`a ${2.5*o} ${2.5*o}, 0, 0, 0, ${2.5*o} ${2.5*o}h `+2*o+`a ${2.5*o} ${2.5*o}, 0, 0, 0, ${2.5*o} ${2.5*-o}v `+-2*o+`a ${2.5*o} ${2.5*o}, 0, 0, 0, ${2.5*-o} ${2.5*-o}h `+-2*o+`a ${2.5*o} ${2.5*o}, 0, 0, 0, ${2.5*-o} ${2.5*o}`+`M ${n+2.5*o} ${r+o}h `+2*o+`a ${1.5*o} ${1.5*o}, 0, 0, 1, ${1.5*o} ${1.5*o}v `+2*o+`a ${1.5*o} ${1.5*o}, 0, 0, 1, ${1.5*-o} ${1.5*o}h `+-2*o+`a ${1.5*o} ${1.5*o}, 0, 0, 1, ${1.5*-o} ${1.5*-o}v `+-2*o+`a ${1.5*o} ${1.5*o}, 0, 0, 1, ${1.5*o} ${1.5*-o}`)}}))}_drawDot({x:e,y:t,size:n,rotation:r}){this._basicDot({x:e,y:t,size:n,rotation:r})}_drawSquare({x:e,y:t,size:n,rotation:r}){this._basicSquare({x:e,y:t,size:n,rotation:r})}_drawExtraRounded({x:e,y:t,size:n,rotation:r}){this._basicExtraRounded({x:e,y:t,size:n,rotation:r})}}class u{constructor({svg:e,type:t}){this._svg=e,this._type=t}draw(e,t,n,r){let o;o="square"===this._type?this._drawSquare:this._drawDot,o.call(this,{x:e,y:t,size:n,rotation:r})}_rotateFigure({x:e,y:t,size:n,rotation:r=0,draw:o}){var i;const a=e+n/2,s=t+n/2;o(),null===(i=this._element)||void 0===i||i.setAttribute("transform",`rotate(${180*r/Math.PI},${a},${s})`)}_basicDot(e){const{size:t,x:n,y:r}=e;this._rotateFigure(Object.assign(Object.assign({},e),{draw:()=>{this._element=document.createElementNS("http://www.w3.org/2000/svg","circle"),this._element.setAttribute("cx",String(n+t/2)),this._element.setAttribute("cy",String(r+t/2)),this._element.setAttribute("r",String(t/2))}}))}_basicSquare(e){const{size:t,x:n,y:r}=e;this._rotateFigure(Object.assign(Object.assign({},e),{draw:()=>{this._element=document.createElementNS("http://www.w3.org/2000/svg","rect"),this._element.setAttribute("x",String(n)),this._element.setAttribute("y",String(r)),this._element.setAttribute("width",String(t)),this._element.setAttribute("height",String(t))}}))}_drawDot({x:e,y:t,size:n,rotation:r}){this._basicDot({x:e,y:t,size:n,rotation:r})}_drawSquare({x:e,y:t,size:n,rotation:r}){this._basicSquare({x:e,y:t,size:n,rotation:r})}}const c="circle";var l=function(e,t,n,r){return new(n||(n=Promise))((function(o,i){function a(e){try{d(r.next(e))}catch(e){i(e)}}function s(e){try{d(r.throw(e))}catch(e){i(e)}}function d(e){var t;e.done?o(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(a,s)}d((r=r.apply(e,t||[])).next())}))};const f=[[1,1,1,1,1,1,1],[1,0,0,0,0,0,1],[1,0,0,0,0,0,1],[1,0,0,0,0,0,1],[1,0,0,0,0,0,1],[1,0,0,0,0,0,1],[1,1,1,1,1,1,1]],h=[[0,0,0,0,0,0,0],[0,0,0,0,0,0,0],[0,0,1,1,1,0,0],[0,0,1,1,1,0,0],[0,0,1,1,1,0,0],[0,0,0,0,0,0,0],[0,0,0,0,0,0,0]];class g{constructor(e){this._element=document.createElementNS("http://www.w3.org/2000/svg","svg"),this._element.setAttribute("width",String(e.width)),this._element.setAttribute("height",String(e.height)),this._defs=document.createElementNS("http://www.w3.org/2000/svg","defs"),this._element.appendChild(this._defs),this._options=e}get width(){return this._options.width}get height(){return this._options.height}getElement(){return this._element}drawQR(e){return l(this,void 0,void 0,(function*(){const t=e.getModuleCount(),n=Math.min(this._options.width,this._options.height)-2*this._options.margin,r=this._options.shape===c?n/Math.sqrt(2):n,o=Math.floor(r/t);let i={hideXDots:0,hideYDots:0,width:0,height:0};if(this._qr=e,this._options.image){if(yield this.loadImage(),!this._image)return;const{imageOptions:e,qrOptions:n}=this._options,r=e.imageSize*a[n.errorCorrectionLevel],s=Math.floor(r*t*t),d=this._image instanceof SVGImageElement?this._image.width.baseVal.value:this._image.naturalWidth,u=this._image instanceof SVGImageElement?this._image.height.baseVal.value:this._image.naturalHeight;i=function({originalHeight:e,originalWidth:t,maxHiddenDots:n,maxHiddenAxisDots:r,dotSize:o}){const i={x:0,y:0},a={x:0,y:0};if(e<0||t<0||n<=0||o<=0)return{height:0,width:0,hideYDots:0,hideXDots:0};const s=e&&t?e/t:1;return i.x=Math.floor(Math.sqrt(n/s)),i.x<=0&&(i.x=1),r&&rn||r&&r{var r,o,a,s,d,u;return!(this._options.imageOptions.hideBackgroundDots&&e>=(t-i.hideXDots)/2&&e<(t+i.hideXDots)/2&&n>=(t-i.hideYDots)/2&&n<(t+i.hideYDots)/2||(null===(r=f[e])||void 0===r?void 0:r[n])||(null===(o=f[e-t+7])||void 0===o?void 0:o[n])||(null===(a=f[e])||void 0===a?void 0:a[n-t+7])||(null===(s=h[e])||void 0===s?void 0:s[n])||(null===(d=h[e-t+7])||void 0===d?void 0:d[n])||(null===(u=h[e])||void 0===u?void 0:u[n-t+7]))})),this.drawCorners(),this._options.image&&(yield this.drawImage({width:i.width,height:i.height,count:t,dotSize:o}))}))}drawBackground(){var e,t,n;const r=this._element,o=this._options;if(r){const r=null===(e=o.backgroundOptions)||void 0===e?void 0:e.gradient,i=null===(t=o.backgroundOptions)||void 0===t?void 0:t.color;if((r||i)&&this._createColor({options:r,color:i,additionalRotation:0,x:0,y:0,height:o.height,width:o.width,name:"background-color"}),null===(n=o.backgroundOptions)||void 0===n?void 0:n.round){const e=Math.min(o.width,o.height),t=document.createElementNS("http://www.w3.org/2000/svg","rect");this._backgroundClipPath=document.createElementNS("http://www.w3.org/2000/svg","clipPath"),this._backgroundClipPath.setAttribute("id","clip-path-background-color"),this._defs.appendChild(this._backgroundClipPath),t.setAttribute("x",String((o.width-e)/2)),t.setAttribute("y",String((o.height-e)/2)),t.setAttribute("width",String(e)),t.setAttribute("height",String(e)),t.setAttribute("rx",String(e/2*o.backgroundOptions.round)),this._backgroundClipPath.appendChild(t)}}}drawDots(e){var t,n;if(!this._qr)throw"QR code is not defined";const r=this._options,o=this._qr.getModuleCount();if(o>r.width||o>r.height)throw"The canvas is too small.";const i=Math.min(r.width,r.height)-2*r.margin,a=r.shape===c?i/Math.sqrt(2):i,d=Math.floor(a/o),u=Math.floor((r.width-o*d)/2),l=Math.floor((r.height-o*d)/2),f=new s({svg:this._element,type:r.dotsOptions.type});this._dotsClipPath=document.createElementNS("http://www.w3.org/2000/svg","clipPath"),this._dotsClipPath.setAttribute("id","clip-path-dot-color"),this._dotsClipPath.style.transformOrigin="center",this._dotsClipPath.style.transform="rotate(90deg) scale(1, -1)",this._defs.appendChild(this._dotsClipPath),this._createColor({options:null===(t=r.dotsOptions)||void 0===t?void 0:t.gradient,color:r.dotsOptions.color,additionalRotation:0,x:0,y:0,height:r.height,width:r.width,name:"dot-color"});for(let t=0;t!(t+n<0||r+i<0||t+n>=o||r+i>=o)&&!(e&&!e(t+n,r+i))&&!!this._qr&&this._qr.isDark(t+n,r+i))),f._element&&this._dotsClipPath&&this._dotsClipPath.appendChild(f._element));if(r.shape===c){const e=Math.floor((i/d-o)/2),t=o+2*e,n=u-e*d,r=l-e*d,a=[],s=Math.floor(t/2);for(let n=0;n=e-1&&n<=t-e&&r>=e-1&&r<=t-e||Math.sqrt((n-s)*(n-s)+(r-s)*(r-s))>s?a[n][r]=0:a[n][r]=this._qr.isDark(r-2*e<0?r:r>=o?r-2*e:r-e,n-2*e<0?n:n>=o?n-2*e:n-e)?1:0}for(let e=0;e{var r;return!!(null===(r=a[e+t])||void 0===r?void 0:r[o+n])})),f._element&&this._dotsClipPath&&this._dotsClipPath.appendChild(f._element))}}drawCorners(){if(!this._qr)throw"QR code is not defined";const e=this._element,t=this._options;if(!e)throw"Element code is not defined";const n=this._qr.getModuleCount(),r=Math.min(t.width,t.height)-2*t.margin,o=t.shape===c?r/Math.sqrt(2):r,i=Math.floor(o/n),a=7*i,l=3*i,g=Math.floor((t.width-n*i)/2),p=Math.floor((t.height-n*i)/2);[[0,0,0],[1,0,Math.PI/2],[0,1,-Math.PI/2]].forEach((([e,r,o])=>{var c,m,v,y,b,w,I,C,S,E,M,P;const A=g+e*i*(n-7),k=p+r*i*(n-7);let _=this._dotsClipPath,x=this._dotsClipPath;if(((null===(c=t.cornersSquareOptions)||void 0===c?void 0:c.gradient)||(null===(m=t.cornersSquareOptions)||void 0===m?void 0:m.color))&&(_=document.createElementNS("http://www.w3.org/2000/svg","clipPath"),_.setAttribute("id",`clip-path-corners-square-color-${e}-${r}`),this._defs.appendChild(_),this._cornersSquareClipPath=this._cornersDotClipPath=x=_,this._createColor({options:null===(v=t.cornersSquareOptions)||void 0===v?void 0:v.gradient,color:null===(y=t.cornersSquareOptions)||void 0===y?void 0:y.color,additionalRotation:o,x:A,y:k,height:a,width:a,name:`corners-square-color-${e}-${r}`})),null===(b=t.cornersSquareOptions)||void 0===b?void 0:b.type){const e=new d({svg:this._element,type:t.cornersSquareOptions.type});e.draw(A,k,a,o),e._element&&_&&_.appendChild(e._element)}else{const e=new s({svg:this._element,type:t.dotsOptions.type});for(let t=0;t{var o;return!!(null===(o=f[t+e])||void 0===o?void 0:o[n+r])})),e._element&&_&&_.appendChild(e._element))}if(((null===(I=t.cornersDotOptions)||void 0===I?void 0:I.gradient)||(null===(C=t.cornersDotOptions)||void 0===C?void 0:C.color))&&(x=document.createElementNS("http://www.w3.org/2000/svg","clipPath"),x.setAttribute("id",`clip-path-corners-dot-color-${e}-${r}`),this._defs.appendChild(x),this._cornersDotClipPath=x,this._createColor({options:null===(S=t.cornersDotOptions)||void 0===S?void 0:S.gradient,color:null===(E=t.cornersDotOptions)||void 0===E?void 0:E.color,additionalRotation:o,x:A+2*i,y:k+2*i,height:l,width:l,name:`corners-dot-color-${e}-${r}`})),null===(M=t.cornersDotOptions)||void 0===M?void 0:M.type){const e=new u({svg:this._element,type:t.cornersDotOptions.type});e.draw(A+2*i,k+2*i,l,o),e._element&&x&&x.appendChild(e._element)}else{const e=new s({svg:this._element,type:t.dotsOptions.type});for(let t=0;t{var o;return!!(null===(o=h[t+e])||void 0===o?void 0:o[n+r])})),e._element&&x&&x.appendChild(e._element))}}))}loadImage(){return new Promise(((e,t)=>{const n=this._options,r=new Image;if(!n.image)return t("Image is not defined");"string"==typeof n.imageOptions.crossOrigin&&(r.crossOrigin=n.imageOptions.crossOrigin),this._image=r,r.onload=()=>{e()},r.src=n.image}))}drawImage({width:e,height:t,count:n,dotSize:r}){return l(this,void 0,void 0,(function*(){const o=this._options,a=Math.floor((o.width-n*r)/2),s=Math.floor((o.height-n*r)/2),d=a+o.imageOptions.margin+(n*r-e)/2,u=s+o.imageOptions.margin+(n*r-t)/2,c=e-2*o.imageOptions.margin,l=t-2*o.imageOptions.margin,f=document.createElementNS("http://www.w3.org/2000/svg","image");f.setAttribute("x",String(d)),f.setAttribute("y",String(u)),f.setAttribute("width",`${c}px`),f.setAttribute("height",`${l}px`);const h=yield function(e){return t=this,void 0,r=function*(){return fetch(e).then((e=>e.blob())).then(i)},new((n=void 0)||(n=Promise))((function(e,o){function i(e){try{s(r.next(e))}catch(e){o(e)}}function a(e){try{s(r.throw(e))}catch(e){o(e)}}function s(t){var r;t.done?e(t.value):(r=t.value,r instanceof n?r:new n((function(e){e(r)}))).then(i,a)}s((r=r.apply(t,[])).next())}));var t,n,r}(o.image||"");f.setAttribute("href",h||""),this._element.appendChild(f)}))}_createColor({options:e,color:t,additionalRotation:n,x:r,y:o,height:i,width:a,name:s}){const d=a>i?a:i,u=document.createElementNS("http://www.w3.org/2000/svg","rect");if(u.setAttribute("x",String(r)),u.setAttribute("y",String(o)),u.setAttribute("height",String(i)),u.setAttribute("width",String(a)),u.setAttribute("clip-path",`url('#clip-path-${s}')`),e){let t;if("radial"===e.type)t=document.createElementNS("http://www.w3.org/2000/svg","radialGradient"),t.setAttribute("id",s),t.setAttribute("gradientUnits","userSpaceOnUse"),t.setAttribute("fx",String(r+a/2)),t.setAttribute("fy",String(o+i/2)),t.setAttribute("cx",String(r+a/2)),t.setAttribute("cy",String(o+i/2)),t.setAttribute("r",String(d/2));else{const d=((e.rotation||0)+n)%(2*Math.PI),u=(d+2*Math.PI)%(2*Math.PI);let c=r+a/2,l=o+i/2,f=r+a/2,h=o+i/2;u>=0&&u<=.25*Math.PI||u>1.75*Math.PI&&u<=2*Math.PI?(c-=a/2,l-=i/2*Math.tan(d),f+=a/2,h+=i/2*Math.tan(d)):u>.25*Math.PI&&u<=.75*Math.PI?(l-=i/2,c-=a/2/Math.tan(d),h+=i/2,f+=a/2/Math.tan(d)):u>.75*Math.PI&&u<=1.25*Math.PI?(c+=a/2,l+=i/2*Math.tan(d),f-=a/2,h-=i/2*Math.tan(d)):u>1.25*Math.PI&&u<=1.75*Math.PI&&(l+=i/2,c+=a/2/Math.tan(d),h-=i/2,f-=a/2/Math.tan(d)),t=document.createElementNS("http://www.w3.org/2000/svg","linearGradient"),t.setAttribute("id",s),t.setAttribute("gradientUnits","userSpaceOnUse"),t.setAttribute("x1",String(Math.round(c))),t.setAttribute("y1",String(Math.round(l))),t.setAttribute("x2",String(Math.round(f))),t.setAttribute("y2",String(Math.round(h)))}e.colorStops.forEach((({offset:e,color:n})=>{const r=document.createElementNS("http://www.w3.org/2000/svg","stop");r.setAttribute("offset",100*e+"%"),r.setAttribute("stop-color",n),t.appendChild(r)})),u.setAttribute("fill",`url('#${s}')`),this._defs.appendChild(t)}else t&&u.setAttribute("fill",t);this._element.appendChild(u)}}const p="canvas",m={};for(let e=0;e<=40;e++)m[e]=e;const v={type:p,shape:"square",width:300,height:300,data:"",margin:0,qrOptions:{typeNumber:m[0],mode:void 0,errorCorrectionLevel:"Q"},imageOptions:{hideBackgroundDots:!0,imageSize:.4,crossOrigin:void 0,margin:0},dotsOptions:{type:"square",color:"#000"},backgroundOptions:{round:0,color:"#fff"}};function y(e){const t=Object.assign({},e);if(!t.colorStops||!t.colorStops.length)throw"Field 'colorStops' is required in gradient";return t.rotation?t.rotation=Number(t.rotation):t.rotation=0,t.colorStops=t.colorStops.map((e=>Object.assign(Object.assign({},e),{offset:Number(e.offset)}))),t}function b(e){const t=Object.assign({},e);return t.width=Number(t.width),t.height=Number(t.height),t.margin=Number(t.margin),t.imageOptions=Object.assign(Object.assign({},t.imageOptions),{hideBackgroundDots:Boolean(t.imageOptions.hideBackgroundDots),imageSize:Number(t.imageOptions.imageSize),margin:Number(t.imageOptions.margin)}),t.margin>Math.min(t.width,t.height)&&(t.margin=Math.min(t.width,t.height)),t.dotsOptions=Object.assign({},t.dotsOptions),t.dotsOptions.gradient&&(t.dotsOptions.gradient=y(t.dotsOptions.gradient)),t.cornersSquareOptions&&(t.cornersSquareOptions=Object.assign({},t.cornersSquareOptions),t.cornersSquareOptions.gradient&&(t.cornersSquareOptions.gradient=y(t.cornersSquareOptions.gradient))),t.cornersDotOptions&&(t.cornersDotOptions=Object.assign({},t.cornersDotOptions),t.cornersDotOptions.gradient&&(t.cornersDotOptions.gradient=y(t.cornersDotOptions.gradient))),t.backgroundOptions&&(t.backgroundOptions=Object.assign({},t.backgroundOptions),t.backgroundOptions.gradient&&(t.backgroundOptions.gradient=y(t.backgroundOptions.gradient))),t}var w=n(192),I=n.n(w),C=function(e,t,n,r){return new(n||(n=Promise))((function(o,i){function a(e){try{d(r.next(e))}catch(e){i(e)}}function s(e){try{d(r.throw(e))}catch(e){i(e)}}function d(e){var t;e.done?o(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(a,s)}d((r=r.apply(e,t||[])).next())}))};class S{constructor(e){this._options=e?b(t(v,e)):v,this.update()}static _clearContainer(e){e&&(e.innerHTML="")}_setupSvg(){if(!this._qr)return;const e=new g(this._options);this._svg=e.getElement(),this._svgDrawingPromise=e.drawQR(this._qr).then((()=>{var t;this._svg&&(null===(t=this._extension)||void 0===t||t.call(this,e.getElement(),this._options))}))}_setupCanvas(){var e;this._qr&&(this._canvas=document.createElement("canvas"),this._canvas.width=this._options.width,this._canvas.height=this._options.height,this._setupSvg(),this._canvasDrawingPromise=null===(e=this._svgDrawingPromise)||void 0===e?void 0:e.then((()=>{if(!this._svg)return;const e=this._svg,t=(new XMLSerializer).serializeToString(e),n="data:image/svg+xml;base64,"+btoa(t),r=new Image;return new Promise((e=>{r.onload=()=>{var t,n;null===(n=null===(t=this._canvas)||void 0===t?void 0:t.getContext("2d"))||void 0===n||n.drawImage(r,0,0),e()},r.src=n}))})))}_getElement(e="png"){return C(this,void 0,void 0,(function*(){if(!this._qr)throw"QR code is empty";return"svg"===e.toLowerCase()?(this._svg&&this._svgDrawingPromise||this._setupSvg(),yield this._svgDrawingPromise,this._svg):(this._canvas&&this._canvasDrawingPromise||this._setupCanvas(),yield this._canvasDrawingPromise,this._canvas)}))}update(e){S._clearContainer(this._container),this._options=e?b(t(this._options,e)):this._options,this._options.data&&(this._qr=I()(this._options.qrOptions.typeNumber,this._options.qrOptions.errorCorrectionLevel),this._qr.addData(this._options.data,this._options.qrOptions.mode||function(e){switch(!0){case/^[0-9]*$/.test(e):return"Numeric";case/^[0-9A-Z $%*+\-./:]*$/.test(e):return"Alphanumeric";default:return"Byte"}}(this._options.data)),this._qr.make(),this._options.type===p?this._setupCanvas():this._setupSvg(),this.append(this._container))}append(e){if(e){if("function"!=typeof e.appendChild)throw"Container should be a single DOM node";this._options.type===p?this._canvas&&e.appendChild(this._canvas):this._svg&&e.appendChild(this._svg),this._container=e}}applyExtension(e){if(!e)throw"Extension function should be defined.";this._extension=e,this.update()}deleteExtension(){this._extension=void 0,this.update()}getRawData(e="png"){return C(this,void 0,void 0,(function*(){if(!this._qr)throw"QR code is empty";const t=yield this._getElement(e);if(!t)return null;if("svg"===e.toLowerCase()){const e=(new XMLSerializer).serializeToString(t);return new Blob(['\r\n'+e],{type:"image/svg+xml"})}return new Promise((n=>t.toBlob(n,`image/${e}`,1)))}))}download(e){return C(this,void 0,void 0,(function*(){if(!this._qr)throw"QR code is empty";let t="png",n="qr";"string"==typeof e?(t=e,console.warn("Extension is deprecated as argument for 'download' method, please pass object { name: '...', extension: '...' } as argument")):"object"==typeof e&&null!==e&&(e.name&&(n=e.name),e.extension&&(t=e.extension));const r=yield this._getElement(t);if(r)if("svg"===t.toLowerCase()){let e=(new XMLSerializer).serializeToString(r);e='\r\n'+e,o("data:image/svg+xml;charset=utf-8,"+encodeURIComponent(e),`${n}.svg`)}else o(r.toDataURL(`image/${t}`),`${n}.${t}`)}))}}const E=S})(),r.default})()},5359:(e,t,n)=>{"use strict";e.exports=n.p+"app-inactive.bc7953c2dfebcabce2c4..png"},9123:(e,t,n)=>{"use strict";e.exports=n.p+"blank.8dd283bceccca95a48d8..png"},2162:(e,t,n)=>{"use strict";e.exports=n.p+"monkey.a3d5fcdc50b18dc55695..svg"},5523:(e,t,n)=>{"use strict";e.exports=n.p+"reaction-thumbs.f920d3f2147d986b6cbe..png"},4128:(e,t,n)=>{"use strict";e.exports=n.p+"telegram-logo.1b2bb5b107f046ea9325..svg"},1879:(e,t,n)=>{"use strict";e.exports=n.p+"Cumshot.7a17984a6b80787dab34..tgs"},5435:(e,t,n)=>{"use strict";e.exports=n.p+"Eggplant.7693d877087b802d04be..tgs"},3677:(e,t,n)=>{"use strict";e.exports=n.p+"Peach.a289b2c54c563f11208f..tgs"},5035:(e,t,n)=>{"use strict";e.exports=n.p+"QrPlane.a921709f266564f65b7e..tgs"},5665:(e,t,n)=>{"use strict";e.exports=n.p+"CameraFlip.1a9fe44cf01fcb22347d..tgs"},2456:(e,t,n)=>{"use strict";e.exports=n.p+"HandFilled.f87939d160f1dc288586..tgs"},5667:(e,t,n)=>{"use strict";e.exports=n.p+"HandOutline.f9831751ba60df30c484..tgs"},8763:(e,t,n)=>{"use strict";e.exports=n.p+"Speaker.04bb3743412b41ff83c5..tgs"},401:(e,t,n)=>{"use strict";e.exports=n.p+"VoiceAllowTalk.a9cc7c39ec438973ddc9..tgs"},5106:(e,t,n)=>{"use strict";e.exports=n.p+"VoiceMini.bf00ffdf69625c579569..tgs"},487:(e,t,n)=>{"use strict";e.exports=n.p+"VoiceMuted.a4b4ec6bfd7c6c5fb275..tgs"},5740:(e,t,n)=>{"use strict";e.exports=n.p+"VoiceOutlined.91b394ab3562cdfad6bc..tgs"},7879:(e,t,n)=>{"use strict";e.exports=n.p+"Invite.4502ec3aa4249d6e6723..tgs"},5095:(e,t,n)=>{"use strict";e.exports=n.p+"Requests.af9f19772695a8898810..tgs"},6257:(e,t,n)=>{"use strict";e.exports=n.p+"TwoFactorSetupMonkeyClose.604c4c833d322b7e6c3e..tgs"},8760:(e,t,n)=>{"use strict";e.exports=n.p+"TwoFactorSetupMonkeyIdle.dea4a492c144df84ddab..tgs"},7785:(e,t,n)=>{"use strict";e.exports=n.p+"TwoFactorSetupMonkeyPeek.1905436b042520363d7e..tgs"},6917:(e,t,n)=>{"use strict";e.exports=n.p+"TwoFactorSetupMonkeyTracking.eb5a7a6f166fb7589c12..tgs"},6978:(e,t,n)=>{"use strict";e.exports=n.p+"DiscussionGroupsDucks.9ea453d1be9d1b0ee77a..tgs"},9356:(e,t,n)=>{"use strict";e.exports=n.p+"FoldersAll.3f9f9e243d19f0fbf9aa..tgs"},5485:(e,t,n)=>{"use strict";e.exports=n.p+"FoldersNew.9a40d71c0c8be70f5bd1..tgs"}},s={};function d(e){var t=s[e];if(void 0!==t)return t.exports;var n=s[e]={exports:{}};return a[e].call(n.exports,n,n.exports,d),n.exports}d.m=a,d.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return d.d(t,{a:t}),t},t=Object.getPrototypeOf?e=>Object.getPrototypeOf(e):e=>e.__proto__,d.t=function(n,r){if(1&r&&(n=this(n)),8&r)return n;if("object"==typeof n&&n){if(4&r&&n.__esModule)return n;if(16&r&&"function"==typeof n.then)return n}var o=Object.create(null);d.r(o);var i={};e=e||[null,t({}),t([]),t(t)];for(var a=2&r&&n;"object"==typeof a&&!~e.indexOf(a);a=t(a))Object.getOwnPropertyNames(a).forEach((e=>i[e]=()=>n[e]));return i.default=()=>n,d.d(o,i),o},d.d=(e,t)=>{for(var n in t)d.o(t,n)&&!d.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:t[n]})},d.f={},d.e=e=>Promise.all(Object.keys(d.f).reduce(((t,n)=>(d.f[n](e,t),t)),[])),d.u=e=>e+"."+{13:"c4586e903a85e96ce217",99:"a19f6cfb125132c4ae9e",133:"8c0baeff1e13dd2e52f0",161:"e3dd8735bd9f827bebc6",354:"27d980b897e4dbb1cb45",395:"93d060131194800fb151",472:"38e2fa9338b8e031169b",501:"17afb8957510497ebb61",524:"a68e2c04acea27f47c03",536:"51c4121ec6034fff4884",548:"9cd8c9eadd943e5f565d",616:"62b1588aeeff3499beea",654:"685435e52e1ffc797757",742:"21c334e551c7ebf8ee71",745:"7f9b9b63ef7b71c5b2d7",878:"ba2ac4194b79d543b70f",915:"059c59865cc20f6071e9",941:"1399f916762c873a48a2",970:"81d005f8fdd6b7e03eb7",993:"c7c8681e7135da951723"}[e]+".js",d.miniCssF=e=>e+"."+{13:"c4586e903a85e96ce217",133:"8c0baeff1e13dd2e52f0",395:"93d060131194800fb151",472:"38e2fa9338b8e031169b",616:"62b1588aeeff3499beea",654:"685435e52e1ffc797757",878:"ba2ac4194b79d543b70f"}[e]+".css",d.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),d.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),n={},r="telegram-t:",d.l=(e,t,o,i)=>{if(n[e])n[e].push(t);else{var a,s;if(void 0!==o)for(var u=document.getElementsByTagName("script"),c=0;c{a.onerror=a.onload=null,clearTimeout(h);var o=n[e];if(delete n[e],a.parentNode&&a.parentNode.removeChild(a),o&&o.forEach((e=>e(r))),t)return t(r)},h=setTimeout(f.bind(null,void 0,{type:"timeout",target:a}),12e4);a.onerror=f.bind(null,a.onerror),a.onload=f.bind(null,a.onload),s&&document.head.appendChild(a)}},d.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},(()=>{var e;d.g.importScripts&&(e=d.g.location+"");var t=d.g.document;if(!e&&t&&(t.currentScript&&(e=t.currentScript.src),!e)){var n=t.getElementsByTagName("script");n.length&&(e=n[n.length-1].src)}if(!e)throw new Error("Automatic publicPath is not supported in this browser");e=e.replace(/#.*$/,"").replace(/\?.*$/,"").replace(/\/[^\/]+$/,"/"),d.p=e})(),o=e=>new Promise(((t,n)=>{var r=d.miniCssF(e),o=d.p+r;if(((e,t)=>{for(var n=document.getElementsByTagName("link"),r=0;r{var o=document.createElement("link");o.rel="stylesheet",o.type="text/css",o.onerror=o.onload=i=>{if(o.onerror=o.onload=null,"load"===i.type)n();else{var a=i&&("load"===i.type?"missing":i.type),s=i&&i.target&&i.target.href||t,d=new Error("Loading CSS chunk "+e+" failed.\n("+s+")");d.code="CSS_CHUNK_LOAD_FAILED",d.type=a,d.request=s,o.parentNode.removeChild(o),r(d)}},o.href=t,document.head.appendChild(o)})(e,o,t,n)})),i={179:0},d.f.miniCss=(e,t)=>{i[e]?t.push(i[e]):0!==i[e]&&{13:1,133:1,395:1,472:1,616:1,654:1,878:1}[e]&&t.push(i[e]=o(e).then((()=>{i[e]=0}),(t=>{throw delete i[e],t})))},(()=>{d.b=document.baseURI||self.location.href;var e={179:0};d.f.j=(t,n)=>{var r=d.o(e,t)?e[t]:void 0;if(0!==r)if(r)n.push(r[2]);else{var o=new Promise(((n,o)=>r=e[t]=[n,o]));n.push(r[2]=o);var i=d.p+d.u(t),a=new Error;d.l(i,(n=>{if(d.o(e,t)&&(0!==(r=e[t])&&(e[t]=void 0),r)){var o=n&&("load"===n.type?"missing":n.type),i=n&&n.target&&n.target.src;a.message="Loading chunk "+t+" failed.\n("+o+": "+i+")",a.name="ChunkLoadError",a.type=o,a.request=i,r[1](a)}}),"chunk-"+t,t)}};var t=(t,n)=>{var r,o,[i,a,s]=n,u=0;if(i.some((t=>0!==e[t]))){for(r in a)d.o(a,r)&&(d.m[r]=a[r]);s&&s(d)}for(t&&t(n);u{"use strict";d(3592);var e=d(3716),t=d(3555),n=d(7361),r=d(8406);function o(n){const o=n.data;if(e.ZT&&console.log("[SW] Message from worker",o),!o.type)return;const i=(0,t.Sv)(),a=o.payload;switch(o.type){case"focusMessage":i.focusMessage&&i.focusMessage(a),i.startActiveReaction&&a.reaction&&i.startActiveReaction({messageId:a.messageId,reaction:a.reaction});break;case"playNotificationSound":(0,r.Nz)(o.payload.id)}}function i(){navigator.serviceWorker.removeEventListener("message",o),navigator.serviceWorker.addEventListener("message",o),(0,r.KC)()}n.Mc&&(window.addEventListener("load",(async()=>{try{if(!navigator.serviceWorker.controller){const t=await navigator.serviceWorker.getRegistrations();t.length&&(e.eM&&console.log("[SW] Hard reload detected, re-enabling Service Worker"),await Promise.all(t.map((e=>e.unregister()))))}await navigator.serviceWorker.register(new URL(d.p+d.u(524),d.b)),e.eM&&console.log("[SW] ServiceWorker registered"),await navigator.serviceWorker.ready,navigator.serviceWorker.controller?(e.eM&&console.log("[SW] ServiceWorker ready"),i()):(e.eM&&console.error("[SW] ServiceWorker not available"),n.cj||n.wZ||(0,t.Sv)().showDialog({data:{message:"SERVICE_WORKER_DISABLED",hasErrorKey:!0}}))}catch(t){e.eM&&console.error("[SW] ServiceWorker registration failed: ",t)}})),window.addEventListener("focus",(async()=>{await navigator.serviceWorker.ready,i()})));var a=d(4050),s=d(2916);const u={isLeftColumnShown:!0,isChatInfoShown:!1,newChatMembersProgress:d(1713).WB.Closed,uiReadyState:0,serverTimeOffset:0,authRememberMe:!0,countryList:{phoneCodes:[],general:[]},blocked:{ids:[],totalCount:0},users:{byId:{},statusesById:{}},chats:{listIds:{},isFullyLoaded:{},orderedPinnedIds:{},totalCount:{},byId:{}},messages:{byChatId:{},messageLists:[],sponsoredByChatId:{}},groupCalls:{byId:{}},scheduledMessages:{byChatId:{}},chatFolders:{byId:{},activeChatFolder:0},fileUploads:{byMessageLocalId:{}},recentEmojis:["grinning","kissing_heart","christmas_tree","brain","trophy"],stickers:{setsById:{},added:{},recent:{stickers:[]},favorite:{stickers:[]},greeting:{stickers:[]},featured:{setIds:[]},search:{},forEmoji:{}},emojiKeywords:{},gifs:{saved:{},search:{}},inlineBots:{isLoading:!1,byUsername:{}},globalSearch:{},userSearch:{},localTextSearch:{byChatThreadKey:{}},localMediaSearch:{byChatId:{}},management:{byChatId:{}},topPeers:{},topInlineBots:{},mediaViewer:{volume:e.Qx,playbackRate:e.mw,isMuted:!1},audioPlayer:{volume:e.Qx,playbackRate:e.mw,isMuted:!1},forwardMessages:{},pollResults:{},payment:{},notifications:[],dialogs:[],activeSessions:[],settings:{byKey:{theme:"light",shouldUseSystemTheme:!0,messageTextSize:n.cj?e.b6:n.jm?e.AR:e.xS,animationLevel:e.CX,messageSendKeyCombo:"enter",canAutoLoadPhotoFromContacts:!0,canAutoLoadPhotoInPrivateChats:!0,canAutoLoadPhotoInGroups:!0,canAutoLoadPhotoInChannels:!0,canAutoLoadVideoFromContacts:!0,canAutoLoadVideoInPrivateChats:!0,canAutoLoadVideoInGroups:!0,canAutoLoadVideoInChannels:!0,canAutoLoadFileFromContacts:!1,canAutoLoadFileInPrivateChats:!1,canAutoLoadFileInGroups:!1,canAutoLoadFileInChannels:!1,autoLoadFileMaxSizeMb:10,hasWebNotifications:!0,hasPushNotifications:!0,notificationSoundVolume:5,canAutoPlayGifs:!0,canAutoPlayVideos:!0,shouldSuggestStickers:!0,shouldLoopStickers:!0,language:"en",timeFormat:"24h",wasTimeFormatSetManually:!1,isConnectionStatusMinimized:!0},themes:{light:{isBlurred:!0,patternColor:e.g},dark:{isBlurred:!0,patternColor:e.Vv}},privacy:{},notifyExceptions:{}},twoFaSettings:{},activeReactions:{},shouldShowContextMenuHint:!0,activeDownloads:{byChatId:{}},serviceNotifications:[],statistics:{byChatId:{}}};var c=d(5116),l=d(6137),f=d(9118),h=d(8674),g=d(782),p=d(1192),m=d(3100),v=d(5780),y=d(5806),b=d(6974);const w=(0,f.P2)((()=>(0,f.Q8)(M)),5e3,!1);let I,C=!1;function S(){C=!0,I=(0,f.Gq)(M,!0),window.addEventListener("blur",M),(0,c.ll)(w)}function E(){C=!1,(0,c.Iq)(w),window.removeEventListener("blur",M),I&&I()}function M(){if(!C||(0,h.zG)())return;const n=(0,t.Rd)();if(n.isLoggingOut)return;const r={...u,...(0,g.ei)(n,["authState","authPhoneNumber","authRememberMe","authNearestCountry","currentUserId","contactList","topPeers","topInlineBots","recentEmojis","push","shouldShowContextMenuHint","leftColumnWidth","serviceNotifications"]),audioPlayer:{volume:n.audioPlayer.volume,playbackRate:n.audioPlayer.playbackRate,isMuted:n.audioPlayer.isMuted},mediaViewer:{volume:n.mediaViewer.volume,playbackRate:n.mediaViewer.playbackRate,isMuted:n.mediaViewer.isMuted},isChatInfoShown:P(n),users:A(n),chats:k(n),messages:_(n),globalSearch:{recentlyFoundChatIds:n.globalSearch.recentlyFoundChatIds},settings:x(n),chatFolders:T(n),groupCalls:N(n),availableReactions:O(n)},o=JSON.stringify(r);localStorage.setItem(e.Uh,o)}function P(t){return window.innerWidth>e._m&&t.isChatInfoShown}function A(t){var n,r,o,i,a;const{users:{byId:s,statusesById:d},currentUserId:u}=t,{chatId:c}=(0,p.Bt)(t)||{},l=null===(n=(0,p.P2)(t))||void 0===n?void 0:n.map((e=>{let{id:t}=e;return t})),f=(0,g.Tw)([...u?[u]:[],...c&&(0,y.YC)(c)?[c]:[],...l||[],...t.topPeers.userIds||[],...(null===(r=(0,b.gO)(e.Nf))||void 0===r?void 0:r.filter(y.YC))||[],...(null===(o=(0,b.gO)(e.WS))||void 0===o?void 0:o.filter(y.YC))||[],...(null===(i=t.contactList)||void 0===i?void 0:i.userIds)||[],...(null===(a=t.globalSearch.recentlyFoundChatIds)||void 0===a?void 0:a.filter(y.YC))||[],...Object.keys(s)]).slice(0,e.lO);return{byId:(0,g.ei)(s,f),statusesById:(0,g.ei)(d,f)}}function k(t){const{chats:{byId:n},currentUserId:r}=t,o=(0,p.jr)(t),i=(0,g.Tw)([...r?[r]:[],...o?[o.id]:[],...(0,b.gO)(e.Nf)||[],...(0,b.gO)(e.WS)||[],...t.globalSearch.recentlyFoundChatIds||[],...Object.keys(n)]).slice(0,e.gJ);return{...t.chats,isFullyLoaded:{},byId:(0,g.ei)(t.chats.byId,i)}}function _(t){var n;const{currentUserId:r}=t,o={},{chatId:i}=(0,p.Bt)(t)||{};return[...i?[i]:[],...r?[r]:[],...(null===(n=(0,b.gO)(e.Nf))||void 0===n?void 0:n.slice(0,e.Rk))||[]].forEach((e=>{const n=t.messages.byChatId[e];if(!n)return;const r=n.threadsById[l._f];r&&r.viewportIds&&(o[e]={byId:(0,g.ei)(n.byId,r.viewportIds),threadsById:{[l._f]:r}})})),{byChatId:o,messageLists:[],sponsoredByChatId:{}}}function x(e){const{byKey:t,themes:n}=e.settings;return{byKey:t,themes:n,privacy:{},notifyExceptions:{}}}function T(e){return{...e.chatFolders,activeChatFolder:0}}function N(e){return{...e.groupCalls,byId:{},activeGroupCallId:void 0,isGroupCallPanelHidden:void 0,isFallbackConfirmOpen:void 0}}function O(e){var t;return null===(t=e.availableReactions)||void 0===t?void 0:t.map((e=>(0,g.ei)(e,["reaction","staticIcon","title","isInactive"])))}e.sd||((0,t.iw)("saveSession",(()=>{C||S()})),(0,t.iw)("reset",(()=>{localStorage.removeItem(e.Uh),C&&E()}))),(0,t.iw)("init",(()=>{const t=(0,g.Xh)(u);return function(t){if(!e.sd)return(0,m.ti)(!0)?(S(),function(t){e.eM&&console.time("global-state-cache-read");const r=localStorage.getItem(e.Uh),o=r?JSON.parse(r):void 0;e.eM&&console.timeEnd("global-state-cache-read"),o&&function(t,n){if("shouldAutoDownloadMediaFromContacts"in t.settings.byKey){const{shouldAutoDownloadMediaFromContacts:e,shouldAutoDownloadMediaInPrivateChats:n,shouldAutoDownloadMediaInGroups:r,shouldAutoDownloadMediaInChannels:o,shouldAutoPlayVideos:i,shouldAutoPlayGifs:a,...s}=t.settings.byKey;t.settings.byKey={...s,canAutoLoadPhotoFromContacts:e,canAutoLoadVideoFromContacts:e,canAutoLoadPhotoInPrivateChats:n,canAutoLoadVideoInPrivateChats:n,canAutoLoadPhotoInGroups:r,canAutoLoadVideoInGroups:r,canAutoLoadPhotoInChannels:o,canAutoLoadVideoInChannels:o,canAutoPlayVideos:i,canAutoPlayGifs:a}}t.settings.byKey={...n.settings.byKey,...t.settings.byKey},t.settings.themes={...n.settings.themes,...t.settings.themes},t.chatFolders={...n.chatFolders,...t.chatFolders},t.stickers.greeting||(t.stickers.greeting=n.stickers.greeting),t.activeDownloads||(t.activeDownloads={byChatId:{}}),t.serviceNotifications||(t.serviceNotifications=[]),void 0===t.audioPlayer.volume&&(t.audioPlayer.volume=e.Qx),void 0===t.audioPlayer.playbackRate&&(t.audioPlayer.playbackRate=e.mw),void 0===t.mediaViewer.volume&&(t.mediaViewer.volume=e.Qx),void 0===t.mediaViewer.playbackRate&&(t.mediaViewer.playbackRate=e.mw),t.groupCalls||(t.groupCalls=n.groupCalls),t.users.statusesById||(t.users.statusesById={}),t.messages.sponsoredByChatId||(t.messages.sponsoredByChatId={}),t.activeReactions||(t.activeReactions={})}(o,t);const i={...t,...o},a=n.wB?void 0:(0,v.V)();return{...i,messages:{...i.messages,messageLists:a?[a]:[]}}}(t)):void E()}(t)||t}));var L=d(3858);const D="tt-active-tab",B=String(Date.now()+Math.random());let R;localStorage.setItem(D,B);const F=window.setInterval((()=>{R&&localStorage.getItem(D)!==B&&(R(),clearInterval(F))}),2e3);var $=d(706),Z=(d(9005),d(3456),d(5456),d(1371),d(8304),d(6590)),U=d(2825),j=d(1212),V=d(1394);const z=["400 1em Roboto","500 1em Roboto"];function W(){if("fonts"in document)return Promise.all(z.map((e=>document.fonts.load(e))))}var H=d(647),q=d(9203),G=d(6752),K=d(4128),J=d(5523),Y=d(2162);function Q(){const{listIds:e,byId:n}=(0,t.Rd)().chats;if(e.active)return Promise.all(e.active.slice(0,10).map((e=>{const t=n[e];if(!t)return;const r=(0,U.RT)(t);return r?H.he(r,l.IU.BlobUrl):void 0})))}const X={main:()=>Promise.all([(0,q.$y)(q.gl.Main,"Main").then(W),Q(),(0,V.pt)(J)]),authPhoneNumber:()=>Promise.all([W(),(0,V.pt)(K)]),authCode:()=>(0,V.pt)(Y),authPassword:()=>(0,V.pt)(Y),authQrCode:W},ee=(0,t.c$)((e=>{const t=(0,p.Pu)(e),{background:n,backgroundColor:r}=e.settings.themes[t]||{};return{shouldSkipHistoryAnimations:e.shouldSkipHistoryAnimations,uiReadyState:e.uiReadyState,hasCustomBackground:Boolean(n),hasCustomBackgroundColor:Boolean(r),isRightColumnShown:(0,p.Jf)(e),leftColumnWidth:e.leftColumnWidth}}))((e=>{let{page:n,children:r,hasCustomBackground:o,hasCustomBackgroundColor:i,isRightColumnShown:s,shouldSkipHistoryAnimations:d,leftColumnWidth:u}=e;const{setIsUiReady:c}=(0,t.Sv)(),[l,h]=(0,$.Z)(),{shouldRender:g,transitionClassNames:p}=(0,j.Z)(!l,void 0,!0);return(0,a.d4)((()=>{let e;return Promise.race([(0,f.wO)(700),(async()=>{try{await X[n]()}catch(e){}})()]).then((()=>{h(),c({uiReadyState:1}),e=window.setTimeout((()=>{c({uiReadyState:2})}),1e3)})),()=>{e&&(clearTimeout(e),e=void 0),c({uiReadyState:0})}}),[]),a.ZP.createElement("div",{id:"UiLoader"},r,g&&!d&&a.ZP.createElement("div",{className:(0,G.Z)("mask",p)},"main"===n?a.ZP.createElement(a.ZP.Fragment,null,a.ZP.createElement("div",{className:"left",style:u?`width: ${u}px`:void 0}),a.ZP.createElement("div",{className:(0,G.Z)("middle",o&&"custom-bg-image",i&&"custom-bg-color",s&&"with-right-column")}),s&&a.ZP.createElement("div",{className:"right"})):a.ZP.createElement("div",{className:"blank"})))}));var te=d(6272),ne=d(711),re=d(9107);const oe=(e,t)=>{const[n,r]=(0,a.eJ)();return e&&ne.Pn(e,t).then(r),n};function ie(){let e=navigator.language;return e&&"pt-br"!==e&&(e=e.substr(0,2)),e}var ae=d(231),se=d(4605),de=d(7687),ue=d(4288),ce=d(5765),le=d(2340),fe=d(4284),he=d(9290),ge=d(3106),pe=d(8964),me=d(9204);const ve=200+e.fK,ye=(0,a.X$)((0,t.c$)((e=>{const{countryList:{phoneCodes:t}}=e;return{phoneCodeList:t}}))((e=>{let{id:t,value:n,isLoading:r,onChange:o,phoneCodeList:i}=e;const s=(0,re.Z)(),d=(0,a.sO)(null),[u,c]=(0,a.eJ)(),[l,f]=(0,a.eJ)([]),h=(0,a.I4)((e=>{c(e),f(function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"";if(!t.length)return e;const n=(0,ce.W)(t);return e.filter((e=>n(e.defaultName)||e.name&&n(e.name)))}(i,e))}),[i]);(0,he.Z)((e=>{let[t]=e;0===(null==t?void 0:t.length)&&i.length>0&&h(u)}),[i,h]);const g=(0,a.I4)((e=>{o(e),setTimeout((()=>h(void 0)),ve)}),[o,h]),p=(0,a.I4)((e=>{h(e.currentTarget.value)}),[h]),m=(0,a.I4)((e=>{if(8!==e.keyCode)return;const t=e.currentTarget;n&&void 0===u&&(t.value=""),h(t.value)}),[u,h,n]),v=(0,a.I4)((e=>{let{onTrigger:o,isOpen:i}=e;const c=()=>{if(i)return;setTimeout((()=>{d.current.select()}),50),o();const e=document.getElementById("auth-phone-number-form");e.scrollTo({top:e.scrollHeight,behavior:"smooth"})},l=null!=u?u:(null==n?void 0:n.name)||(null==n?void 0:n.defaultName)||"";return a.ZP.createElement("div",{className:(0,G.Z)("input-group",n&&"touched")},a.ZP.createElement("input",{ref:d,className:(0,G.Z)("form-control",i&&"focus"),type:"text",id:t,value:l,autoComplete:"off",onClick:c,onFocus:c,onInput:e=>{p(e),c()},onKeyDown:m}),a.ZP.createElement("label",null,s("Login.SelectCountry.Title")),r?a.ZP.createElement(me.Z,{color:"black"}):a.ZP.createElement("i",{onClick:c,className:(0,G.Z)("css-icon-down",i&&"open")}))}),[u,p,m,t,r,s,n]);return a.ZP.createElement(ge.Z,{className:"CountryCodeInput",trigger:v},l.map((e=>a.ZP.createElement(pe.Z,{key:`${e.iso2}-${e.countryCode}`,className:n&&e.iso2===n.iso2?"selected":"",onClick:()=>g(e)},a.ZP.createElement("span",{className:"country-flag"},(0,le.Z)((0,fe.Wg)(e.iso2),["hq_emoji"])),a.ZP.createElement("span",{className:"country-name"},e.name||e.defaultName),a.ZP.createElement("span",{className:"country-code"},"+",e.countryCode)))),!l.length&&a.ZP.createElement(pe.Z,{key:"no-results",className:"no-results",disabled:!0},a.ZP.createElement("span",null,s("lng_country_none"))))})));let be=!1;const we=(0,a.X$)((0,t.c$)((e=>{const{settings:{byKey:{language:t}},countryList:{phoneCodes:n}}=e;return{...(0,g.ei)(e,["connectionState","authState","authPhoneNumber","authIsLoading","authIsLoadingQrCode","authError","authRememberMe","authNearestCountry"]),language:t,phoneCodeList:n}}))((e=>{let{connectionState:r,authState:o,authPhoneNumber:i,authIsLoading:s,authIsLoadingQrCode:d,authError:u,authRememberMe:c,authNearestCountry:l,phoneCodeList:f,language:h}=e;const{setAuthPhoneNumber:g,setAuthRememberMe:p,loadNearestCountry:m,loadCountryList:v,clearAuthError:y,goToAuthQrCode:b,setSettingOption:w}=(0,t.Sv)(),I=(0,re.Z)(),C=(0,a.sO)(null),S=ie(),E=oe(S,"ContinueOnThisLanguage"),[M,P]=(0,a.eJ)(),[A,k]=(0,a.eJ)(),[_,x]=(0,a.eJ)(!1),[T,N]=(0,a.eJ)(),[O,L,D]=(0,$.Z)(),B=M?`+${M.countryCode} ${A||""}`:A,R=B&&B.replace(/[^\d]+/g,"").length>=7;(0,a.d4)((()=>{n.$b||C.current.focus()}),[M]),(0,a.d4)((()=>{"connectionStateReady"!==r||l||m()}),[r,l,m]),(0,a.d4)((()=>{"connectionStateReady"===r&&v({langCode:h})}),[r,h,v]),(0,a.d4)((()=>{l&&f&&!M&&!_&&P((0,te.U9)(f,l)[0])}),[M,l,_,f]);const F=(0,a.I4)((e=>{e.length||k("");const t=f&&(0,te.g3)(f,e),n=!M||t&&t.iso2!==M.iso2||!t&&e.length?t:M;(!M||!n||n&&n.iso2!==M.iso2)&&P(n),k((0,te.un)(e,n))}),[f,M]),Z=(0,a.I4)((()=>{L(),(0,ne.m0)(S,(()=>{D(),w({language:S})}))}),[L,w,S,D]);(0,a.d4)((()=>{void 0===A&&i&&F(i)}),[i,A,F]),(0,a.bt)((()=>{C.current&&T&&C.current.setSelectionRange(...T)}),[T]);const U=(0,a.sO)(!1),j=(0,a.I4)((()=>{U.current=!0,requestAnimationFrame((()=>{U.current=!1}))}),[]),z=(0,a.I4)((e=>{P(e),k("")}),[]),H=(0,a.I4)((e=>{u&&y(),be||(be=!0,W(),(0,V.pt)(Y));const{value:t,selectionStart:r,selectionEnd:o}=e.target;N(r&&o&&o1&&!U.current;F(i?`${M.countryCode} ${t}`:t)}),[u,y,M,B,F]),q=(0,a.I4)((e=>{p(e.target.checked)}),[p]),G="authorizationStateWaitPhoneNumber"===o;return a.ZP.createElement("div",{id:"auth-phone-number-form",className:"custom-scroll"},a.ZP.createElement("div",{className:"auth-form"},a.ZP.createElement("div",{id:"logo"}),a.ZP.createElement("h2",null,"Telegram"),a.ZP.createElement("p",{className:"note"},I("StartText")),a.ZP.createElement("form",{action:"",onSubmit:function(e){e.preventDefault(),s||R&&g({phoneNumber:B})}},a.ZP.createElement(ye,{id:"sign-in-phone-code",value:M,isLoading:!l&&!M,onChange:z}),a.ZP.createElement(de.Z,{ref:C,id:"sign-in-phone-number",label:I("Login.PhonePlaceholder"),value:B,error:u&&I(u),inputMode:"tel",onChange:H,onPaste:n.s$?j:void 0}),a.ZP.createElement(se.Z,{id:"sign-in-keep-session",label:"Keep me signed in",checked:Boolean(c),onChange:q}),R&&(G?a.ZP.createElement(ae.Z,{type:"submit",ripple:!0,isLoading:s},I("Login.Next")):a.ZP.createElement(ue.Z,null)),G&&a.ZP.createElement(ae.Z,{isText:!0,ripple:!0,isLoading:d,onClick:b},I("Login.QR.Login")),S&&S!==h&&E&&a.ZP.createElement(ae.Z,{isText:!0,isLoading:O,onClick:Z},E))))})));var Ie=d(8778);const Ce=(0,a.X$)((()=>{const e=(0,Ie.Z)(q.gl.Auth,"AuthCode");return e?a.ZP.createElement(e,null):a.ZP.createElement(ue.Z,null)})),Se=(0,a.X$)((()=>{const e=(0,Ie.Z)(q.gl.Auth,"AuthPassword");return e?a.ZP.createElement(e,null):a.ZP.createElement(ue.Z,null)})),Ee=(0,a.X$)((()=>{const e=(0,Ie.Z)(q.gl.Auth,"AuthRegister");return e?a.ZP.createElement(e,null):a.ZP.createElement(ue.Z,null)}));var Me=d(1915),Pe=d.n(Me),Ae=d(7324),ke=d(7799),_e=d(9123);const xe=new(Pe())({width:280,height:280,image:_e,margin:10,type:"svg",dotsOptions:{type:"rounded"},cornersSquareOptions:{type:"extra-rounded"},imageOptions:{imageSize:.4,margin:8},qrOptions:{errorCorrectionLevel:"M"}}),Te=(0,a.X$)((0,t.c$)((e=>{const{connectionState:t,authState:n,authQrCode:r,settings:{byKey:{language:o}}}=e;return{connectionState:t,authState:n,authQrCode:r,language:o}}))((n=>{let{connectionState:r,authState:o,authQrCode:i,language:s}=n;const{returnToAuthPhoneNumber:d,setSettingOption:u}=(0,t.Sv)(),c=ie(),l=(0,re.Z)(),f=(0,a.sO)(null),h=oe(c,"ContinueOnThisLanguage"),[g,p,m]=(0,$.Z)(),[v,y,b]=(0,$.Z)(),[w,I]=(0,a.eJ)(),[C,S]=(0,a.eJ)(!1),E=(0,a.I4)((()=>S(!0)),[]);(0,a.d4)((()=>{w||(0,Ae.Z)("QrPlane").then(I)}),[w]),(0,a.d4)((()=>{if(!i)return()=>{b()};if("connectionStateReady"!==r)return;const e=f.current;e.parentElement.classList.remove("pre-animate");const t=`tg://login?token=${i.token}`;xe.update({data:t}),v||(xe.append(e),y())}),[r,i,v,y,b]),(0,a.d4)((()=>{"connectionStateReady"===r&&(0,ne.m0)(e.sR)}),[r]);const M=(0,a.I4)((()=>{p(),(0,ne.m0)(c,(()=>{m(),u({language:c})}))}),[p,u,c,m]),P="authorizationStateWaitQrCode"===o;return a.ZP.createElement("div",{id:"auth-qr-form",className:"custom-scroll"},a.ZP.createElement("div",{className:"auth-form qr"},i?a.ZP.createElement("div",{className:"qr-wrapper pre-animate",key:"qr-wrapper"},a.ZP.createElement("div",{key:"qr-container",className:"qr-container",ref:f,style:"width: 280px; height: 280px"}),w&&a.ZP.createElement(ke.Z,{id:"qrPlane",className:"qr-plane",size:54,animationData:w,play:C,onLoad:E,key:"qrPlane"})):a.ZP.createElement("div",{key:"qr-loading",className:"qr-loading"},a.ZP.createElement(ue.Z,null)),a.ZP.createElement("h3",null,l("Login.QR.Title")),a.ZP.createElement("ol",null,a.ZP.createElement("li",null,a.ZP.createElement("span",null,l("Login.QR.Help1"))),a.ZP.createElement("li",null,a.ZP.createElement("span",null,(0,le.Z)(l("Login.QR2.Help2"),["simple_markdown"]))),a.ZP.createElement("li",null,a.ZP.createElement("span",null,l("Login.QR.Help3")))),P&&a.ZP.createElement(ae.Z,{isText:!0,onClick:d},l("Login.QR.Cancel")),c&&c!==s&&h&&a.ZP.createElement(ae.Z,{isText:!0,isLoading:g,onClick:M},h)))}))),Ne=(0,a.X$)((0,t.c$)((e=>(0,g.ei)(e,["authState"])))((e=>{let{authState:r}=e;const{reset:o,initApi:i,returnToAuthPhoneNumber:s,goToAuthQrCode:d}=(0,t.Sv)();(0,a.d4)((()=>{o(),i()}),[o,i]);const u="iOS"===n.Lt||"Android"===n.Lt;switch((0,Z.ZP)(!u&&"authorizationStateWaitPhoneNumber"===r||u&&"authorizationStateWaitQrCode"===r,(()=>{u?s():d()})),(0,a.d4)((()=>(L.Z.disableRefresh(),()=>{L.Z.enableRefresh()})),[]),r){case"authorizationStateWaitCode":return a.ZP.createElement(ee,{page:"authCode",key:"authCode"},a.ZP.createElement(Ce,null));case"authorizationStateWaitPassword":return a.ZP.createElement(ee,{page:"authPassword",key:"authPassword"},a.ZP.createElement(Se,null));case"authorizationStateWaitRegistration":return a.ZP.createElement(Ee,null);case"authorizationStateWaitPhoneNumber":return a.ZP.createElement(ee,{page:"authPhoneNumber",key:"authPhoneNumber"},a.ZP.createElement(we,null));case"authorizationStateWaitQrCode":return a.ZP.createElement(ee,{page:"authQrCode",key:"authQrCode"},a.ZP.createElement(Te,null));default:return u?a.ZP.createElement(ee,{page:"authPhoneNumber",key:"authPhoneNumber"},a.ZP.createElement(we,null)):a.ZP.createElement(ee,{page:"authQrCode",key:"authQrCode"},a.ZP.createElement(Te,null))}}))),Oe=(0,a.X$)((()=>{const e=(0,Ie.Z)(q.gl.Main,"Main");return e?a.ZP.createElement(e,null):void 0}));var Le=d(5359);const De=()=>{const e=(0,a.I4)((()=>{window.location.reload()}),[]);return a.ZP.createElement("div",{id:"AppInactive"},a.ZP.createElement("div",{className:"content"},a.ZP.createElement("img",{src:Le,alt:""}),a.ZP.createElement("h3",{className:"title"},"Such error, many tabs"),a.ZP.createElement("div",{className:"description"},"Telegram supports only one active tab with the app.",a.ZP.createElement("br",null),"Please reload this page to continue using this tab or close it."),a.ZP.createElement("div",{className:"actions"},a.ZP.createElement(ae.Z,{isText:!0,ripple:!0,onClick:e},"Reload app"))))};function Be(){return a.ZP.createElement(ee,{page:"main",key:"main"},a.ZP.createElement(Oe,null))}const Re=(0,t.c$)((e=>(0,g.ei)(e,["authState"])))((n=>{let{authState:r}=n;const{disconnect:o}=(0,t.Sv)(),[i,s]=(0,$.Z)(!1);if((0,a.d4)((()=>{(0,L.z)(),R=()=>{o(),document.title=`${e.Ti}${e.ou}`,s()}}),[o,s]),i)return a.ZP.createElement(De,null);if(r)switch(r){case"authorizationStateWaitPhoneNumber":case"authorizationStateWaitCode":case"authorizationStateWaitPassword":case"authorizationStateWaitRegistration":case"authorizationStateWaitQrCode":return a.ZP.createElement(Ne,null);case"authorizationStateClosed":case"authorizationStateClosing":case"authorizationStateLoggingOut":case"authorizationStateReady":return Be()}return(0,m.ti)(!0)?Be():a.ZP.createElement(Ne,null)}));e.eM&&console.log(">>> INIT"),(0,t.Sv)().init(),e.eM&&console.log(">>> START INITIAL RENDER"),s.Z.render(a.ZP.createElement(Re,null),document.getElementById("root")),e.eM&&console.log(">>> FINISH INITIAL RENDER"),document.addEventListener("dblclick",(()=>{console.warn("GLOBAL STATE",(0,t.Rd)())}))})()})(); -//# sourceMappingURL=main.cd9e6668dcb404fda482.js.map \ No newline at end of file diff --git a/dist/main.cd9e6668dcb404fda482.js.map b/dist/main.cd9e6668dcb404fda482.js.map deleted file mode 100644 index f7fe5e54e..000000000 --- a/dist/main.cd9e6668dcb404fda482.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"main.cd9e6668dcb404fda482.js","mappings":"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AC,EAAE,GAAG,GAAG,EAAE,GAAG,IAAI,CAAC,EAAE,GAAG,GAAG,EAAE,GAAG,IAAI,CAAC,EAAE,GAAG,GAAG,EAAE,GAAG,IAAI,CAAC,EAAE,IAAI,IAAI,CAAC,EAAE,GAAG,GAAG,EAAE,GAAG,IAAI,CAAC,EAAE,GAAG,GAAG,EAAE,GAAG,IAAI,CAAC,EAAE,GAAG,GAAG,EAAE,GAAG,IAAI,CAAC,EAAE,IAAI,GAAG,EAAE,IAAI,IAAI,CAAC,EAAE,GAAG,GAAG,EAAE,GAAG,IAAI,CAAC,EAAE,GAAG,GAAG,EAAE,GAAG,IAAI,CAAC,EAAE,GAAG,GAAG,EAAE,GAAG,IAAI,CAAC,EAAE,IAAI,KAAK,CAAC,EAAE,GAAG,GAAG,EAAE,GAAG,IAAI,CAAC,EAAE,GAAG,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,GAAG,GAAG,EAAE,GAAG,IAAI,CAAC,EAAE,IAAI,IAAI,EAAE,IAAI,KAAK,CAAC,EAAE,GAAG,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,GAAG,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,GAAG,GAAG,EAAE,GAAG,IAAI,CAAC,EAAE,IAAI,GAAG,EAAE,IAAI,IAAI,CAAC,EAAE,GAAG,GAAG,EAAE,GAAG,IAAI,CAAC,EAAE,GAAG,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,GAAG,GAAG,EAAE,GAAG,IAAI,CAAC,EAAE,IAAI,GAAG,EAAE,IAAI,IAAI,CAAC,EAAE,GAAG,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,GAAG,GAAG,EAAE,GAAG,IAAI,CAAC,EAAE,GAAG,GAAG,GAAG,GAAG,IAAI,CAAC,EAAE,IAAI,IAAI,EAAE,IAAI,KAAK,CAAC,GAAG,GAAG,GAAG,EAAE,GAAG,IAAI,CAAC,EAAE,GAAG,GAAG,GAAG,GAAG,IAAI,CAAC,EAAE,GAAG,GAAG,GAAG,GAAG,IAAI,CAAC,EAAE,IAAI,IAAI,EAAE,IAAI,KAAK,CAAC,EAAE,GAAG,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,GAAG,GAAG,EAAE,GAAG,IAAI,CAAC,EAAE,GAAG,GAAG,GAAG,GAAG,IAAI,CAAC,EAAE,IAAI,IAAI,EAAE,IAAI,KAAK,CAAC,EAAE,GAAG,GAAG,GAAG,GAAG,IAAI,CAAC,GAAG,GAAG,GAAG,EAAE,GAAG,IAAI,CAAC,EAAE,GAAG,GAAG,GAAG,GAAG,IAAI,CAAC,EAAE,IAAI,IAAI,EAAE,IAAI,KAAK,CAAC,EAAE,GAAG,GAAG,GAAG,GAAG,IAAI,CAAC,GAAG,GAAG,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,CAAC,EAAE,IAAI,IAAI,EAAE,IAAI,KAAK,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,GAAG,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,GAAG,GAAG,EAAE,GAAG,IAAI,CAAC,EAAE,IAAI,IAAI,EAAE,IAAI,KAAK,CAAC,GAAG,GAAG,IAAI,CAAC,EAAE,GAAG,GAAG,GAAG,GAAG,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,EAAE,IAAI,IAAI,EAAE,IAAI,KAAK,CAAC,EAAE,GAAG,GAAG,GAAG,GAAG,IAAI,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,CAAC,EAAE,IAAI,IAAI,EAAE,IAAI,KAAK,CAAC,EAAE,GAAG,GAAG,GAAG,GAAG,IAAI,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,CAAC,GAAG,GAAG,GAAG,EAAE,GAAG,IAAI,CAAC,EAAE,IAAI,IAAI,EAAE,IAAI,KAAK,CAAC,EAAE,GAAG,GAAG,GAAG,GAAG,IAAI,CAAC,EAAE,GAAG,GAAG,GAAG,GAAG,IAAI,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,CAAC,GAAG,IAAI,IAAI,EAAE,IAAI,KAAK,CAAC,GAAG,GAAG,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,GAAG,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,GAAG,GAAG,EAAE,GAAG,IAAI,CAAC,EAAE,IAAI,IAAI,EAAE,IAAI,KAAK,CAAC,GAAG,GAAG,GAAG,EAAE,GAAG,IAAI,CAAC,EAAE,GAAG,GAAG,GAAG,GAAG,IAAI,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,CAAC,EAAE,IAAI,IAAI,GAAG,IAAI,KAAK,CAAC,EAAE,GAAG,GAAG,GAAG,GAAG,IAAI,CAAC,EAAE,GAAG,GAAG,GAAG,GAAG,IAAI,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,CAAC,EAAE,IAAI,IAAI,EAAE,IAAI,KAAK,CAAC,GAAG,GAAG,GAAG,EAAE,GAAG,IAAI,CAAC,EAAE,GAAG,GAAG,GAAG,GAAG,IAAI,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,CAAC,EAAE,IAAI,IAAI,GAAG,IAAI,KAAK,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,CAAC,GAAG,IAAI,IAAI,EAAE,IAAI,KAAK,CAAC,EAAE,GAAG,GAAG,GAAG,GAAG,IAAI,CAAC,GAAG,GAAG,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,CAAC,GAAG,IAAI,KAAK,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,CAAC,GAAG,IAAI,IAAI,EAAE,IAAI,KAAK,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,CAAC,GAAG,IAAI,IAAI,EAAE,IAAI,KAAK,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,CAAC,GAAG,GAAG,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,GAAG,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,IAAI,IAAI,EAAE,IAAI,KAAK,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,CAAC,EAAE,IAAI,IAAI,GAAG,IAAI,KAAK,CAAC,EAAE,GAAG,GAAG,GAAG,GAAG,IAAI,CAAC,GAAG,GAAG,GA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","sources":["webpack://telegram-t/webpack/runtime/create fake namespace object","webpack://telegram-t/webpack/runtime/load script","webpack://telegram-t/webpack/runtime/css loading","webpack://telegram-t/./src/api/gramjs/worker/provider.ts","webpack://telegram-t/./src/api/types/media.ts","webpack://telegram-t/./src/api/types/messages.ts","webpack://telegram-t/./src/components/common/AnimatedSticker.tsx","webpack://telegram-t/./src/lib/punycode.js","webpack://telegram-t/./src/components/common/SafeLink.tsx","webpack://telegram-t/./src/components/common/helpers/animatedAssets.ts","webpack://telegram-t/./src/components/common/helpers/documentInfo.ts","webpack://telegram-t/./src/components/common/helpers/parseEmojiOnlyString.ts","webpack://telegram-t/./src/components/common/UserLink.tsx","webpack://telegram-t/./src/components/common/MessageLink.tsx","webpack://telegram-t/./src/components/common/ChatLink.tsx","webpack://telegram-t/./src/components/common/GroupCallLink.tsx","webpack://telegram-t/./src/components/common/helpers/renderActionMessageText.tsx","webpack://telegram-t/./src/components/common/helpers/renderMessageText.ts","webpack://telegram-t/./src/components/common/helpers/renderText.tsx","webpack://telegram-t/./src/components/common/spoiler/Spoiler.tsx","webpack://telegram-t/./src/components/common/helpers/renderTextWithEntities.tsx","webpack://telegram-t/./src/components/middle/helpers/preventMessageInputBlur.ts","webpack://telegram-t/./src/components/middle/message/MentionLink.tsx","webpack://telegram-t/./src/components/ui/Button.tsx","webpack://telegram-t/./src/components/ui/Checkbox.tsx","webpack://telegram-t/./src/components/ui/DropdownMenu.tsx","webpack://telegram-t/./src/components/ui/InputText.tsx","webpack://telegram-t/./src/components/ui/Link.tsx","webpack://telegram-t/./src/components/ui/Loading.tsx","webpack://telegram-t/./src/components/ui/Menu.tsx","webpack://telegram-t/./src/components/ui/MenuItem.tsx","webpack://telegram-t/./src/components/ui/RippleEffect.tsx","webpack://telegram-t/./src/components/ui/Spinner.tsx","webpack://telegram-t/./src/config.ts","webpack://telegram-t/./src/global/actions/api/initial.ts","webpack://telegram-t/./src/global/actions/api/settings.ts","webpack://telegram-t/./src/global/actions/apiUpdaters/initial.ts","webpack://telegram-t/./src/global/actions/ui/initial.ts","webpack://telegram-t/./src/global/actions/ui/settings.ts","webpack://telegram-t/./src/global/helpers/chats.ts","webpack://telegram-t/./src/global/helpers/messages.ts","webpack://telegram-t/./src/global/helpers/reactions.ts","webpack://telegram-t/./src/global/helpers/messageSummary.ts","webpack://telegram-t/./src/global/helpers/messageMedia.ts","webpack://telegram-t/./src/global/helpers/localSearch.ts","webpack://telegram-t/./src/global/helpers/payments.ts","webpack://telegram-t/./src/global/helpers/users.ts","webpack://telegram-t/./src/global/index.ts","webpack://telegram-t/./src/global/reducers/chats.ts","webpack://telegram-t/./src/global/reducers/symbols.ts","webpack://telegram-t/./src/global/reducers/users.ts","webpack://telegram-t/./src/global/reducers/globalSearch.ts","webpack://telegram-t/./src/global/reducers/localSearch.ts","webpack://telegram-t/./src/global/reducers/management.ts","webpack://telegram-t/./src/global/reducers/settings.ts","webpack://telegram-t/./src/global/reducers/twoFaSettings.ts","webpack://telegram-t/./src/global/reducers/payments.ts","webpack://telegram-t/./src/global/reducers/statistics.ts","webpack://telegram-t/./src/global/reducers/messages.ts","webpack://telegram-t/./src/global/selectors/chats.ts","webpack://telegram-t/./src/global/selectors/symbols.ts","webpack://telegram-t/./src/global/selectors/messages.ts","webpack://telegram-t/./src/global/selectors/localSearch.ts","webpack://telegram-t/./src/global/selectors/statistics.ts","webpack://telegram-t/./src/global/selectors/management.ts","webpack://telegram-t/./src/global/selectors/ui.ts","webpack://telegram-t/./src/global/selectors/globalSearch.ts","webpack://telegram-t/./src/global/selectors/payments.ts","webpack://telegram-t/./src/global/selectors/settings.ts","webpack://telegram-t/./src/global/selectors/users.ts","webpack://telegram-t/./src/hooks/useBackgroundMode.ts","webpack://telegram-t/./src/hooks/useEffectWithPrevDeps.ts","webpack://telegram-t/./src/hooks/useFlag.ts","webpack://telegram-t/./src/hooks/useForceUpdate.ts","webpack://telegram-t/./src/hooks/useHeavyAnimationCheck.ts","webpack://telegram-t/./src/hooks/useHistoryBack.ts","webpack://telegram-t/./src/hooks/useKeyboardListNavigation.ts","webpack://telegram-t/./src/hooks/useLang.ts","webpack://telegram-t/./src/hooks/useModuleLoader.ts","webpack://telegram-t/./src/hooks/useOnChange.ts","webpack://telegram-t/./src/hooks/usePrevious.ts","webpack://telegram-t/./src/hooks/useShowTransition.ts","webpack://telegram-t/./src/hooks/useVirtualBackdrop.ts","webpack://telegram-t/./src/lib/teact/dom-events.ts","webpack://telegram-t/./src/lib/teact/teact-dom.ts","webpack://telegram-t/./src/lib/teact/teact.ts","webpack://telegram-t/./src/lib/teact/teactn.tsx","webpack://telegram-t/./src/lib/twemojiRegex.js","webpack://telegram-t/./src/types/index.ts","webpack://telegram-t/./src/util/animation.ts","webpack://telegram-t/./src/util/appBadge.ts","webpack://telegram-t/./src/util/arePropsShallowEqual.ts","webpack://telegram-t/./src/util/buildClassName.ts","webpack://telegram-t/./src/util/cacheApi.ts","webpack://telegram-t/./src/util/callbacks.ts","webpack://telegram-t/./src/util/captureEscKeyListener.ts","webpack://telegram-t/./src/util/captureKeyboardListeners.ts","webpack://telegram-t/./src/util/clipboard.ts","webpack://telegram-t/./src/util/dateFormat.ts","webpack://telegram-t/./src/util/emoji.ts","webpack://telegram-t/./src/util/ensureProtocol.ts","webpack://telegram-t/./src/util/environmentWebp.ts","webpack://telegram-t/./src/util/environmentSystemTheme.ts","webpack://telegram-t/./src/util/environment.ts","webpack://telegram-t/./src/util/files.ts","webpack://telegram-t/./src/util/folderManager.ts","webpack://telegram-t/./src/util/formatCurrency.ts","webpack://telegram-t/./src/util/generateIdFor.ts","webpack://telegram-t/./src/util/getReadableErrorText.ts","webpack://telegram-t/./src/util/handleError.ts","webpack://telegram-t/./src/util/iteratees.ts","webpack://telegram-t/./src/util/langProvider.ts","webpack://telegram-t/./src/util/oggToWav.ts","webpack://telegram-t/./src/util/mediaLoader.ts","webpack://telegram-t/./src/util/memo.ts","webpack://telegram-t/./src/util/moduleLoader.ts","webpack://telegram-t/./src/util/notifications.ts","webpack://telegram-t/./src/util/permanentWebVersion.ts","webpack://telegram-t/./src/util/phoneNumber.ts","webpack://telegram-t/./src/util/routing.ts","webpack://telegram-t/./src/util/schedulers.ts","webpack://telegram-t/./src/util/searchWords.ts","webpack://telegram-t/./src/util/serverTime.ts","webpack://telegram-t/./node_modules/idb-keyval/dist/index.js","webpack://telegram-t/./node_modules/safari-14-idb-fix/dist/index.js","webpack://telegram-t/./src/util/sessions.ts","webpack://telegram-t/./src/util/switchTheme.ts","webpack://telegram-t/./src/util/textFormat.ts","webpack://telegram-t/./src/util/trimText.ts","webpack://telegram-t/./src/util/webpToPng.ts","webpack://telegram-t/./src/util/websync.ts","webpack://telegram-t/./src/util/windowSize.ts","webpack://telegram-t/./src/util/withCache.ts","webpack://telegram-t/./node_modules/qr-code-styling/lib/qr-code-styling.js","webpack://telegram-t/webpack/bootstrap","webpack://telegram-t/webpack/runtime/compat get default export","webpack://telegram-t/webpack/runtime/define property getters","webpack://telegram-t/webpack/runtime/ensure chunk","webpack://telegram-t/webpack/runtime/get javascript chunk filename","webpack://telegram-t/webpack/runtime/get mini-css chunk filename","webpack://telegram-t/webpack/runtime/global","webpack://telegram-t/webpack/runtime/hasOwnProperty shorthand","webpack://telegram-t/webpack/runtime/make namespace object","webpack://telegram-t/webpack/runtime/publicPath","webpack://telegram-t/webpack/runtime/jsonp chunk loading","webpack://telegram-t/./src/util/setupServiceWorker.ts","webpack://telegram-t/./src/global/initialState.ts","webpack://telegram-t/./src/global/cache.ts","webpack://telegram-t/./src/global/init.ts","webpack://telegram-t/./src/util/activeTabMonitor.ts","webpack://telegram-t/./src/util/fonts.ts","webpack://telegram-t/./src/components/common/UiLoader.tsx","webpack://telegram-t/./src/hooks/useLangString.ts","webpack://telegram-t/./src/components/auth/helpers/getSuggestedLanguage.ts","webpack://telegram-t/./src/components/auth/CountryCodeInput.tsx","webpack://telegram-t/./src/components/auth/AuthPhoneNumber.tsx","webpack://telegram-t/./src/components/auth/AuthCode.async.tsx","webpack://telegram-t/./src/components/auth/AuthPassword.async.tsx","webpack://telegram-t/./src/components/auth/AuthRegister.async.tsx","webpack://telegram-t/./src/components/auth/AuthQrCode.tsx","webpack://telegram-t/./src/components/auth/Auth.tsx","webpack://telegram-t/./src/components/main/Main.async.tsx","webpack://telegram-t/./src/components/main/AppInactive.tsx","webpack://telegram-t/./src/App.tsx","webpack://telegram-t/./src/index.tsx"],"sourcesContent":["var getProto = Object.getPrototypeOf ? (obj) => (Object.getPrototypeOf(obj)) : (obj) => (obj.__proto__);\nvar leafPrototypes;\n// create a fake namespace object\n// mode & 1: value is a module id, require it\n// mode & 2: merge all properties of value into the ns\n// mode & 4: return value when already ns object\n// mode & 16: return value when it's Promise-like\n// mode & 8|1: behave like require\n__webpack_require__.t = function(value, mode) {\n\tif(mode & 1) value = this(value);\n\tif(mode & 8) return value;\n\tif(typeof value === 'object' && value) {\n\t\tif((mode & 4) && value.__esModule) return value;\n\t\tif((mode & 16) && typeof value.then === 'function') return value;\n\t}\n\tvar ns = Object.create(null);\n\t__webpack_require__.r(ns);\n\tvar def = {};\n\tleafPrototypes = leafPrototypes || [null, getProto({}), getProto([]), getProto(getProto)];\n\tfor(var current = mode & 2 && value; typeof current == 'object' && !~leafPrototypes.indexOf(current); current = getProto(current)) {\n\t\tObject.getOwnPropertyNames(current).forEach((key) => (def[key] = () => (value[key])));\n\t}\n\tdef['default'] = () => (value);\n\t__webpack_require__.d(ns, def);\n\treturn ns;\n};","var inProgress = {};\nvar dataWebpackPrefix = \"telegram-t:\";\n// loadScript function to load a script via script tag\n__webpack_require__.l = (url, done, key, chunkId) => {\n\tif(inProgress[url]) { inProgress[url].push(done); return; }\n\tvar script, needAttach;\n\tif(key !== undefined) {\n\t\tvar scripts = document.getElementsByTagName(\"script\");\n\t\tfor(var i = 0; i < scripts.length; i++) {\n\t\t\tvar s = scripts[i];\n\t\t\tif(s.getAttribute(\"src\") == url || s.getAttribute(\"data-webpack\") == dataWebpackPrefix + key) { script = s; break; }\n\t\t}\n\t}\n\tif(!script) {\n\t\tneedAttach = true;\n\t\tscript = document.createElement('script');\n\n\t\tscript.charset = 'utf-8';\n\t\tscript.timeout = 120;\n\t\tif (__webpack_require__.nc) {\n\t\t\tscript.setAttribute(\"nonce\", __webpack_require__.nc);\n\t\t}\n\t\tscript.setAttribute(\"data-webpack\", dataWebpackPrefix + key);\n\t\tscript.src = url;\n\t}\n\tinProgress[url] = [done];\n\tvar onScriptComplete = (prev, event) => {\n\t\t// avoid mem leaks in IE.\n\t\tscript.onerror = script.onload = null;\n\t\tclearTimeout(timeout);\n\t\tvar doneFns = inProgress[url];\n\t\tdelete inProgress[url];\n\t\tscript.parentNode && script.parentNode.removeChild(script);\n\t\tdoneFns && doneFns.forEach((fn) => (fn(event)));\n\t\tif(prev) return prev(event);\n\t}\n\t;\n\tvar timeout = setTimeout(onScriptComplete.bind(null, undefined, { type: 'timeout', target: script }), 120000);\n\tscript.onerror = onScriptComplete.bind(null, script.onerror);\n\tscript.onload = onScriptComplete.bind(null, script.onload);\n\tneedAttach && document.head.appendChild(script);\n};","var createStylesheet = (chunkId, fullhref, resolve, reject) => {\n\tvar linkTag = document.createElement(\"link\");\n\n\tlinkTag.rel = \"stylesheet\";\n\tlinkTag.type = \"text/css\";\n\tvar onLinkComplete = (event) => {\n\t\t// avoid mem leaks.\n\t\tlinkTag.onerror = linkTag.onload = null;\n\t\tif (event.type === 'load') {\n\t\t\tresolve();\n\t\t} else {\n\t\t\tvar errorType = event && (event.type === 'load' ? 'missing' : event.type);\n\t\t\tvar realHref = event && event.target && event.target.href || fullhref;\n\t\t\tvar err = new Error(\"Loading CSS chunk \" + chunkId + \" failed.\\n(\" + realHref + \")\");\n\t\t\terr.code = \"CSS_CHUNK_LOAD_FAILED\";\n\t\t\terr.type = errorType;\n\t\t\terr.request = realHref;\n\t\t\tlinkTag.parentNode.removeChild(linkTag)\n\t\t\treject(err);\n\t\t}\n\t}\n\tlinkTag.onerror = linkTag.onload = onLinkComplete;\n\tlinkTag.href = fullhref;\n\n\tdocument.head.appendChild(linkTag);\n\treturn linkTag;\n};\nvar findStylesheet = (href, fullhref) => {\n\tvar existingLinkTags = document.getElementsByTagName(\"link\");\n\tfor(var i = 0; i < existingLinkTags.length; i++) {\n\t\tvar tag = existingLinkTags[i];\n\t\tvar dataHref = tag.getAttribute(\"data-href\") || tag.getAttribute(\"href\");\n\t\tif(tag.rel === \"stylesheet\" && (dataHref === href || dataHref === fullhref)) return tag;\n\t}\n\tvar existingStyleTags = document.getElementsByTagName(\"style\");\n\tfor(var i = 0; i < existingStyleTags.length; i++) {\n\t\tvar tag = existingStyleTags[i];\n\t\tvar dataHref = tag.getAttribute(\"data-href\");\n\t\tif(dataHref === href || dataHref === fullhref) return tag;\n\t}\n};\nvar loadStylesheet = (chunkId) => {\n\treturn new Promise((resolve, reject) => {\n\t\tvar href = __webpack_require__.miniCssF(chunkId);\n\t\tvar fullhref = __webpack_require__.p + href;\n\t\tif(findStylesheet(href, fullhref)) return resolve();\n\t\tcreateStylesheet(chunkId, fullhref, resolve, reject);\n\t});\n}\n// object to store loaded CSS chunks\nvar installedCssChunks = {\n\t179: 0\n};\n\n__webpack_require__.f.miniCss = (chunkId, promises) => {\n\tvar cssChunks = {\"13\":1,\"133\":1,\"395\":1,\"472\":1,\"616\":1,\"654\":1,\"878\":1};\n\tif(installedCssChunks[chunkId]) promises.push(installedCssChunks[chunkId]);\n\telse if(installedCssChunks[chunkId] !== 0 && cssChunks[chunkId]) {\n\t\tpromises.push(installedCssChunks[chunkId] = loadStylesheet(chunkId).then(() => {\n\t\t\tinstalledCssChunks[chunkId] = 0;\n\t\t}, (e) => {\n\t\t\tdelete installedCssChunks[chunkId];\n\t\t\tthrow e;\n\t\t}));\n\t}\n};\n\n// no hmr","import { Api } from '../../../lib/gramjs';\nimport { ApiInitialArgs, ApiOnProgress, OnApiUpdate } from '../../types';\nimport { Methods, MethodArgs, MethodResponse } from '../methods/types';\nimport { WorkerMessageEvent, OriginRequest } from './types';\n\nimport { DEBUG } from '../../../config';\nimport generateIdFor from '../../../util/generateIdFor';\nimport { pause } from '../../../util/schedulers';\n\ntype RequestStates = {\n messageId: string;\n resolve: Function;\n reject: Function;\n callback?: AnyToVoidFunction;\n};\n\nconst HEALTH_CHECK_TIMEOUT = 150;\nconst HEALTH_CHECK_MIN_DELAY = 5 * 1000; // 5 sec\n\nlet worker: Worker;\nconst requestStates = new Map();\nconst requestStatesByCallback = new Map();\n\n// TODO Re-use `util/WorkerConnector.ts`\n\nexport function initApi(onUpdate: OnApiUpdate, initialArgs: ApiInitialArgs) {\n if (!worker) {\n if (DEBUG) {\n // eslint-disable-next-line no-console\n console.log('>>> START LOAD WORKER');\n }\n\n worker = new Worker(new URL('./worker.ts', import.meta.url));\n subscribeToWorker(onUpdate);\n\n if (initialArgs.platform === 'iOS') {\n setupIosHealthCheck();\n }\n }\n\n return makeRequest({\n type: 'initApi',\n args: [initialArgs],\n });\n}\n\nexport function callApi(fnName: T, ...args: MethodArgs) {\n if (!worker) {\n if (DEBUG) {\n // eslint-disable-next-line no-console\n console.warn('API is not initialized');\n }\n\n return undefined;\n }\n\n const promise = makeRequest({\n type: 'callMethod',\n name: fnName,\n args,\n });\n\n // Some TypeScript magic to make sure `VirtualClass` is never returned from any method\n if (DEBUG) {\n (async () => {\n try {\n type ForbiddenTypes =\n Api.VirtualClass\n | (Api.VirtualClass | undefined)[];\n type ForbiddenResponses =\n ForbiddenTypes\n | (AnyLiteral & { [k: string]: ForbiddenTypes });\n\n // Unwrap all chained promises\n const response = await promise;\n // Make sure responses do not include `VirtualClass` instances\n const allowedResponse: Exclude = response;\n // Suppress \"unused variable\" constraint\n void allowedResponse;\n } catch (err) {\n // Do noting\n }\n })();\n }\n\n return promise as MethodResponse;\n}\n\nexport function cancelApiProgress(progressCallback: ApiOnProgress) {\n progressCallback.isCanceled = true;\n\n const { messageId } = requestStatesByCallback.get(progressCallback) || {};\n if (!messageId) {\n return;\n }\n\n worker.postMessage({\n type: 'cancelProgress',\n messageId,\n });\n}\n\nfunction subscribeToWorker(onUpdate: OnApiUpdate) {\n worker.addEventListener('message', ({ data }: WorkerMessageEvent) => {\n if (data.type === 'update') {\n onUpdate(data.update);\n } else if (data.type === 'methodResponse') {\n const requestState = requestStates.get(data.messageId);\n if (requestState) {\n if (data.error) {\n requestState.reject(data.error);\n } else {\n requestState.resolve(data.response);\n }\n }\n } else if (data.type === 'methodCallback') {\n requestStates.get(data.messageId)?.callback?.(...data.callbackArgs);\n } else if (data.type === 'unhandledError') {\n throw new Error(data.error?.message);\n }\n });\n}\n\nfunction makeRequest(message: OriginRequest) {\n const messageId = generateIdFor(requestStates);\n const payload: OriginRequest = {\n messageId,\n ...message,\n };\n\n const requestState = { messageId } as RequestStates;\n\n // Re-wrap type because of `postMessage`\n const promise: Promise> = new Promise((resolve, reject) => {\n Object.assign(requestState, { resolve, reject });\n });\n\n if (('args' in payload) && typeof payload.args[1] === 'function') {\n const callback = payload.args.pop() as AnyToVoidFunction;\n requestState.callback = callback;\n requestStatesByCallback.set(callback, requestState);\n }\n\n requestStates.set(messageId, requestState);\n\n promise\n .catch(() => undefined)\n .finally(() => {\n requestStates.delete(messageId);\n\n if (requestState.callback) {\n requestStatesByCallback.delete(requestState.callback);\n }\n });\n\n worker.postMessage(payload);\n\n return promise;\n}\n\nconst startedAt = Date.now();\n\n// Workaround for iOS sometimes stops interacting with worker\nfunction setupIosHealthCheck() {\n window.addEventListener('focus', () => {\n void ensureWorkerPing();\n // Sometimes a single check is not enough\n setTimeout(() => ensureWorkerPing(), 1000);\n });\n}\n\nasync function ensureWorkerPing() {\n try {\n await Promise.race([\n makeRequest({ type: 'ping' }),\n pause(HEALTH_CHECK_TIMEOUT).then(() => Promise.reject(new Error('HEALTH_CHECK_TIMEOUT'))),\n ]);\n } catch (err) {\n // eslint-disable-next-line no-console\n console.error(err);\n\n if (Date.now() - startedAt >= HEALTH_CHECK_MIN_DELAY) {\n window.location.reload();\n }\n }\n}\n","// We cache avatars as Data URI for faster initial load\n// and messages media as Blob for smaller size.\n\nexport enum ApiMediaFormat {\n BlobUrl,\n Lottie,\n Progressive,\n Stream,\n}\n\nexport type ApiParsedMedia = string | Blob | ArrayBuffer;\nexport type ApiPreparedMedia = string;\n","import { ApiGroupCall } from './calls';\n\nexport interface ApiDimensions {\n width: number;\n height: number;\n}\n\nexport interface ApiPhotoSize extends ApiDimensions {\n type: 's' | 'm' | 'x' | 'y' | 'z';\n}\n\nexport interface ApiThumbnail extends ApiDimensions {\n dataUri: string;\n}\n\nexport interface ApiPhoto {\n id: string;\n thumbnail?: ApiThumbnail;\n sizes: ApiPhotoSize[];\n blobUrl?: string;\n}\n\nexport interface ApiSticker {\n id: string;\n stickerSetId: string;\n stickerSetAccessHash?: string;\n emoji?: string;\n isLottie: boolean;\n isVideo: boolean;\n width?: number;\n height?: number;\n thumbnail?: ApiThumbnail;\n isPreloadedGlobally?: boolean;\n}\n\nexport interface ApiStickerSet {\n archived?: true;\n isLottie?: true;\n isVideos?: true;\n installedDate?: number;\n id: string;\n accessHash: string;\n title: string;\n hasThumbnail?: boolean;\n count: number;\n stickers?: ApiSticker[];\n packs?: Record;\n covers?: ApiSticker[];\n shortName: string;\n}\n\nexport interface ApiVideo {\n id: string;\n mimeType: string;\n duration: number;\n fileName: string;\n width?: number;\n height?: number;\n supportsStreaming?: boolean;\n isRound?: boolean;\n isGif?: boolean;\n thumbnail?: ApiThumbnail;\n blobUrl?: string;\n size: number;\n}\n\nexport interface ApiAudio {\n id: string;\n size: number;\n mimeType: string;\n fileName: string;\n duration: number;\n performer?: string;\n title?: string;\n thumbnailSizes?: ApiPhotoSize[];\n}\n\nexport interface ApiVoice {\n id: string;\n duration: number;\n waveform?: number[];\n}\n\nexport interface ApiDocument {\n id?: string;\n fileName: string;\n size: number;\n timestamp?: number;\n mimeType: string;\n thumbnail?: ApiThumbnail;\n previewBlobUrl?: string;\n mediaType?: 'photo' | 'video';\n mediaSize?: ApiDimensions;\n}\n\nexport interface ApiContact {\n firstName: string;\n lastName: string;\n phoneNumber: string;\n userId: string;\n}\n\nexport interface ApiPollAnswer {\n text: string;\n option: string;\n}\n\nexport interface ApiPollResult {\n isChosen?: true;\n isCorrect?: true;\n option: string;\n votersCount: number;\n}\n\nexport interface ApiPoll {\n id: string;\n summary: {\n closed?: true;\n isPublic?: true;\n multipleChoice?: true;\n quiz?: true;\n question: string;\n answers: ApiPollAnswer[];\n closePeriod?: number;\n closeDate?: number;\n };\n results: {\n results?: ApiPollResult[];\n totalVoters?: number;\n recentVoterIds?: string[];\n solution?: string;\n solutionEntities?: ApiMessageEntity[];\n };\n}\n\nexport interface ApiInvoice {\n text: string;\n title: string;\n photoUrl?: string;\n amount: number;\n currency: string;\n receiptMsgId?: number;\n isTest?: boolean;\n}\n\ninterface ApiGeoPoint {\n long: number;\n lat: number;\n accessHash: string;\n accuracyRadius?: number;\n}\n\ninterface ApiGeo {\n type: 'geo';\n geo: ApiGeoPoint;\n}\n\ninterface ApiVenue {\n type: 'venue';\n geo: ApiGeoPoint;\n title: string;\n address: string;\n provider: string;\n venueId: string;\n venueType: string;\n}\n\ninterface ApiGeoLive {\n type: 'geoLive';\n geo: ApiGeoPoint;\n heading?: number;\n period: number;\n}\n\nexport type ApiLocation = ApiGeo | ApiVenue | ApiGeoLive;\n\nexport type ApiNewPoll = {\n summary: ApiPoll['summary'];\n quiz?: {\n correctAnswers: string[];\n solution?: string;\n solutionEntities?: ApiMessageEntity[];\n };\n};\n\nexport interface ApiAction {\n text: string;\n targetUserIds?: string[];\n targetChatId?: string;\n type: 'historyClear' | 'contactSignUp' | 'chatCreate' | 'other';\n photo?: ApiPhoto;\n amount?: number;\n currency?: string;\n translationValues: string[];\n call?: Partial;\n}\n\nexport interface ApiWebPage {\n id: number;\n url: string;\n displayUrl: string;\n type?: string;\n siteName?: string;\n title?: string;\n description?: string;\n photo?: ApiPhoto;\n duration?: number;\n document?: ApiDocument;\n video?: ApiVideo;\n}\n\nexport interface ApiMessageForwardInfo {\n date: number;\n isChannelPost: boolean;\n channelPostId?: number;\n isLinkedChannelPost?: boolean;\n fromChatId?: string;\n senderUserId?: string;\n fromMessageId?: number;\n hiddenUserName?: string;\n adminTitle?: string;\n}\n\nexport interface ApiMessageEntity {\n type: string;\n offset: number;\n length: number;\n userId?: string;\n url?: string;\n}\n\nexport enum ApiMessageEntityTypes {\n Bold = 'MessageEntityBold',\n Blockquote = 'MessageEntityBlockquote',\n BotCommand = 'MessageEntityBotCommand',\n Cashtag = 'MessageEntityCashtag',\n Code = 'MessageEntityCode',\n Email = 'MessageEntityEmail',\n Hashtag = 'MessageEntityHashtag',\n Italic = 'MessageEntityItalic',\n MentionName = 'MessageEntityMentionName',\n Mention = 'MessageEntityMention',\n Phone = 'MessageEntityPhone',\n Pre = 'MessageEntityPre',\n Strike = 'MessageEntityStrike',\n TextUrl = 'MessageEntityTextUrl',\n Url = 'MessageEntityUrl',\n Underline = 'MessageEntityUnderline',\n Spoiler = 'MessageEntitySpoiler',\n Unknown = 'MessageEntityUnknown',\n}\n\nexport interface ApiFormattedText {\n text: string;\n entities?: ApiMessageEntity[];\n}\n\nexport interface ApiMessage {\n id: number;\n chatId: string;\n content: {\n text?: ApiFormattedText;\n photo?: ApiPhoto;\n video?: ApiVideo;\n document?: ApiDocument;\n sticker?: ApiSticker;\n contact?: ApiContact;\n poll?: ApiPoll;\n action?: ApiAction;\n webPage?: ApiWebPage;\n audio?: ApiAudio;\n voice?: ApiVoice;\n invoice?: ApiInvoice;\n location?: ApiLocation;\n };\n date: number;\n isOutgoing: boolean;\n senderId?: string;\n replyToChatId?: string;\n replyToMessageId?: number;\n replyToTopMessageId?: number;\n sendingState?: 'messageSendingStatePending' | 'messageSendingStateFailed';\n forwardInfo?: ApiMessageForwardInfo;\n isDeleting?: boolean;\n previousLocalId?: number;\n views?: number;\n isEdited?: boolean;\n editDate?: number;\n isMentioned?: boolean;\n isMediaUnread?: boolean;\n groupedId?: string;\n isInAlbum?: boolean;\n hasUnreadMention?: boolean;\n inlineButtons?: ApiKeyboardButtons;\n keyboardButtons?: ApiKeyboardButtons;\n keyboardPlaceholder?: string;\n isKeyboardSingleUse?: boolean;\n viaBotId?: string;\n threadInfo?: ApiThreadInfo;\n adminTitle?: string;\n isScheduled?: boolean;\n shouldHideKeyboardButtons?: boolean;\n isFromScheduled?: boolean;\n seenByUserIds?: string[];\n isProtected?: boolean;\n reactors?: {\n nextOffset?: string;\n count: number;\n reactions: ApiUserReaction[];\n };\n reactions?: ApiReactions;\n}\n\nexport interface ApiReactions {\n canSeeList?: boolean;\n results: ApiReactionCount[];\n recentReactions?: ApiUserReaction[];\n}\n\nexport interface ApiUserReaction {\n userId: string;\n reaction: string;\n}\n\nexport interface ApiReactionCount {\n isChosen?: boolean;\n count: number;\n reaction: string;\n}\n\nexport interface ApiAvailableReaction {\n selectAnimation?: ApiDocument;\n staticIcon?: ApiDocument;\n centerIcon?: ApiDocument;\n aroundAnimation?: ApiDocument;\n reaction: string;\n title: string;\n isInactive?: boolean;\n}\n\nexport interface ApiThreadInfo {\n threadId: number;\n chatId: string;\n topMessageId?: number;\n originChannelId?: string;\n messagesCount: number;\n lastMessageId?: number;\n lastReadInboxMessageId?: number;\n recentReplierIds?: string[];\n}\n\nexport type ApiMessageOutgoingStatus = 'read' | 'succeeded' | 'pending' | 'failed';\n\nexport type ApiSponsoredMessage = {\n chatId?: string;\n randomId: string;\n isBot?: boolean;\n channelPostId?: number;\n startParam?: string;\n chatInviteHash?: string;\n chatInviteTitle?: string;\n text: ApiFormattedText;\n expiresAt: number;\n};\n\nexport interface ApiKeyboardButton {\n type: 'command' | 'url' | 'callback' | 'requestPoll' | 'requestSelfContact' | 'buy' | 'NOT_SUPPORTED';\n text: string;\n messageId: number;\n value?: string;\n}\n\nexport type ApiKeyboardButtons = ApiKeyboardButton[][];\nexport type ApiReplyKeyboard = {\n keyboardPlaceholder?: string;\n isKeyboardSingleUse?: boolean;\n} & {\n [K in 'inlineButtons' | 'keyboardButtons']?: ApiKeyboardButtons;\n};\n\nexport type ApiMessageSearchType = 'text' | 'media' | 'documents' | 'links' | 'audio' | 'voice' | 'profilePhoto';\nexport type ApiGlobalMessageSearchType = 'text' | 'media' | 'documents' | 'links' | 'audio' | 'voice';\n\nexport type ApiReportReason = 'spam' | 'violence' | 'pornography' | 'childAbuse'\n| 'copyright' | 'geoIrrelevant' | 'fake' | 'illegalDrugs' | 'personalDetails' | 'other';\n\nexport type ApiSendMessageAction = {\n type: 'cancel' | 'typing' | 'recordAudio' | 'chooseSticker';\n};\n\nexport const MAIN_THREAD_ID = -1;\n\n// `Symbol` can not be transferred from worker\nexport const MESSAGE_DELETED = 'MESSAGE_DELETED';\n","import React, {\n FC, useEffect, useRef, memo, useCallback, useState,\n} from '../../lib/teact/teact';\n\nimport { fastRaf } from '../../util/schedulers';\nimport buildClassName from '../../util/buildClassName';\nimport useHeavyAnimationCheck from '../../hooks/useHeavyAnimationCheck';\nimport useBackgroundMode from '../../hooks/useBackgroundMode';\n\ntype OwnProps = {\n className?: string;\n id: string;\n animationData?: string;\n play?: boolean | string;\n playSegment?: [number, number];\n speed?: number;\n noLoop?: boolean;\n size: number;\n quality?: number;\n isLowPriority?: boolean;\n onLoad?: NoneToVoidFunction;\n forceOnHeavyAnimation?: boolean;\n color?: [number, number, number];\n onEnded?: NoneToVoidFunction;\n};\n\ntype RLottieClass = typeof import('../../lib/rlottie/RLottie').default;\ntype RLottieInstance = import('../../lib/rlottie/RLottie').default;\nlet lottiePromise: Promise;\nlet RLottie: RLottieClass;\n\n// Time for the main interface to completely load\nconst LOTTIE_LOAD_DELAY = 3000;\n\nasync function ensureLottie() {\n if (!lottiePromise) {\n lottiePromise = import('../../lib/rlottie/RLottie') as unknown as Promise;\n RLottie = (await lottiePromise as any).default;\n }\n\n return lottiePromise;\n}\n\nsetTimeout(ensureLottie, LOTTIE_LOAD_DELAY);\n\nconst AnimatedSticker: FC = ({\n className,\n id,\n animationData,\n play,\n playSegment,\n speed,\n noLoop,\n size,\n quality,\n isLowPriority,\n color,\n forceOnHeavyAnimation,\n onLoad,\n onEnded,\n}) => {\n const [animation, setAnimation] = useState();\n // eslint-disable-next-line no-null/no-null\n const container = useRef(null);\n const wasPlaying = useRef(false);\n const isFrozen = useRef(false);\n const isFirstRender = useRef(true);\n\n const playRef = useRef();\n playRef.current = play;\n const playSegmentRef = useRef<[number, number]>();\n playSegmentRef.current = playSegment;\n\n useEffect(() => {\n if (animation || !animationData) {\n return;\n }\n\n const exec = () => {\n if (!container.current) {\n return;\n }\n\n const newAnimation = new RLottie(\n id,\n container.current,\n animationData,\n {\n noLoop,\n size,\n quality,\n isLowPriority,\n },\n onLoad,\n color,\n onEnded,\n );\n\n if (speed) {\n newAnimation.setSpeed(speed);\n }\n\n setAnimation(newAnimation);\n };\n\n if (RLottie) {\n exec();\n } else {\n ensureLottie().then(() => {\n fastRaf(() => {\n if (container.current) {\n exec();\n }\n });\n });\n }\n }, [color, animation, animationData, id, isLowPriority, noLoop, onLoad, quality, size, speed, onEnded]);\n\n useEffect(() => {\n if (!animation) return;\n\n animation.setColor(color);\n }, [color, animation]);\n\n useEffect(() => {\n return () => {\n if (animation) {\n animation.destroy();\n }\n };\n }, [animation]);\n\n const playAnimation = useCallback((shouldRestart = false) => {\n if (animation && (playRef.current || playSegmentRef.current)) {\n if (playSegmentRef.current) {\n animation.playSegment(playSegmentRef.current);\n } else if (shouldRestart) {\n animation.goToAndPlay(0);\n } else {\n animation.play();\n }\n }\n }, [animation]);\n\n const pauseAnimation = useCallback(() => {\n if (!animation) {\n return;\n }\n\n animation.pause();\n }, [animation]);\n\n const freezeAnimation = useCallback(() => {\n isFrozen.current = true;\n\n if (!animation) {\n return;\n }\n\n if (!wasPlaying.current) {\n wasPlaying.current = animation.isPlaying();\n }\n\n pauseAnimation();\n }, [animation, pauseAnimation]);\n\n const unfreezeAnimation = useCallback(() => {\n if (wasPlaying.current) {\n playAnimation();\n }\n\n wasPlaying.current = false;\n isFrozen.current = false;\n }, [playAnimation]);\n\n const unfreezeAnimationOnRaf = useCallback(() => {\n fastRaf(unfreezeAnimation);\n }, [unfreezeAnimation]);\n\n useEffect(() => {\n if (!animation) {\n return;\n }\n\n if (play || playSegment) {\n if (isFrozen.current) {\n wasPlaying.current = true;\n } else {\n playAnimation(noLoop);\n }\n } else {\n // eslint-disable-next-line no-lonely-if\n if (isFrozen.current) {\n wasPlaying.current = false;\n } else {\n pauseAnimation();\n }\n }\n }, [animation, play, playSegment, noLoop, playAnimation, pauseAnimation]);\n\n useEffect(() => {\n if (animation) {\n if (isFirstRender.current) {\n isFirstRender.current = false;\n } else if (animationData) {\n animation.changeData(animationData);\n playAnimation();\n }\n }\n }, [playAnimation, animation, animationData]);\n\n useHeavyAnimationCheck(freezeAnimation, unfreezeAnimation, forceOnHeavyAnimation);\n // Pausing frame may not happen in background\n // so we need to make sure it happens right after focusing,\n // then we can play again.\n useBackgroundMode(freezeAnimation, unfreezeAnimationOnRaf);\n\n const fullClassName = buildClassName('AnimatedSticker', className);\n\n const style = size ? `width: ${size}px; height: ${size}px;` : undefined;\n\n return (\n \n );\n};\n\nexport default memo(AnimatedSticker);\n","/* eslint-disable no-nested-ternary */\n/* eslint-disable no-bitwise */\n\nconst utf16 = {\n // The utf16-class is necessary to convert from javascripts internal character representation to unicode and back.\n decode: (input) => {\n const output = [];\n let i = 0;\n const len = input.length;\n let value;\n let extra;\n\n while (i < len) {\n value = input.charCodeAt(i++);\n if ((value & 0xf800) === 0xd800) {\n extra = input.charCodeAt(i++);\n if ((value & 0xfc00) !== 0xd800 || (extra & 0xfc00) !== 0xdc00) {\n throw new RangeError('UTF-16(decode): Illegal UTF-16 sequence');\n }\n value = ((value & 0x3ff) << 10) + (extra & 0x3ff) + 0x10000;\n }\n output.push(value);\n }\n return output;\n },\n encode: (input) => {\n const output = [];\n let i = 0;\n const len = input.length;\n let value;\n\n while (i < len) {\n value = input[i++];\n if ((value & 0xf800) === 0xd800) {\n throw new RangeError('UTF-16(encode): Illegal UTF-16 value');\n }\n if (value > 0xffff) {\n value -= 0x10000;\n output.push(String.fromCharCode(((value >>> 10) & 0x3ff) | 0xd800));\n value = 0xdc00 | (value & 0x3ff);\n }\n output.push(String.fromCharCode(value));\n }\n return output.join('');\n },\n};\n\n// Default parameters\nconst initial_n = 0x80;\nconst initial_bias = 72;\nconst delimiter = '\\x2D';\nconst base = 36;\nconst damp = 700;\nconst tmin = 1;\nconst tmax = 26;\nconst skew = 38;\nconst maxint = 0x7fffffff;\n\n// decode_digit(cp) returns the numeric value of a basic code\n// point (for use in representing integers) in the range 0 to\n// base-1, or base if cp is does not represent a value.\n\nfunction decode_digit(cp) {\n return cp - 48 < 10 ? cp - 22 : cp - 65 < 26 ? cp - 65 : cp - 97 < 26 ? cp - 97 : base;\n}\n\n// ** Bias adaptation function **\nfunction adapt(delta, numpoints, firsttime) {\n let k;\n delta = firsttime ? Math.floor(delta / damp) : delta >> 1;\n delta += Math.floor(delta / numpoints);\n\n for (k = 0; delta > ((base - tmin) * tmax) >> 1; k += base) {\n delta = Math.floor(delta / (base - tmin));\n }\n return Math.floor(k + ((base - tmin + 1) * delta) / (delta + skew));\n}\n\n// Main decode\nfunction decode(input, preserveCase) {\n // Dont use utf16\n const output = [];\n const case_flags = [];\n const input_length = input.length;\n\n let n; let out; let i; let bias; let basic; let j; let ic; let oldi; let w; let k; let digit; let t; let len;\n\n // Initialize the state:\n\n n = initial_n;\n i = 0;\n bias = initial_bias;\n\n // Handle the basic code points: Let basic be the number of input code\n // points before the last delimiter, or 0 if there is none, then\n // copy the first basic code points to the output.\n\n basic = input.lastIndexOf(delimiter);\n if (basic < 0) basic = 0;\n\n for (j = 0; j < basic; ++j) {\n if (preserveCase) case_flags[output.length] = input.charCodeAt(j) - 65 < 26;\n if (input.charCodeAt(j) >= 0x80) {\n throw new RangeError('Illegal input >= 0x80');\n }\n output.push(input.charCodeAt(j));\n }\n\n // Main decoding loop: Start just after the last delimiter if any\n // basic code points were copied; start at the beginning otherwise.\n\n for (ic = basic > 0 ? basic + 1 : 0; ic < input_length;) {\n // ic is the index of the next character to be consumed,\n\n // Decode a generalized variable-length integer into delta,\n // which gets added to i. The overflow checking is easier\n // if we increase i as we go, then subtract off its starting\n // value at the end to obtain delta.\n for (oldi = i, w = 1, k = base; ; k += base) {\n if (ic >= input_length) {\n throw RangeError('punycode_bad_input(1)');\n }\n digit = decode_digit(input.charCodeAt(ic++));\n\n if (digit >= base) {\n throw RangeError('punycode_bad_input(2)');\n }\n if (digit > Math.floor((maxint - i) / w)) {\n throw RangeError('punycode_overflow(1)');\n }\n i += digit * w;\n t = k <= bias ? tmin : k >= bias + tmax ? tmax : k - bias;\n if (digit < t) {\n break;\n }\n if (w > Math.floor(maxint / (base - t))) {\n throw RangeError('punycode_overflow(2)');\n }\n w *= base - t;\n }\n\n out = output.length + 1;\n bias = adapt(i - oldi, out, oldi === 0);\n\n // i was supposed to wrap around from out to 0,\n // incrementing n each time, so we'll fix that now:\n if (Math.floor(i / out) > maxint - n) {\n throw RangeError('punycode_overflow(3)');\n }\n n += Math.floor(i / out);\n i %= out;\n\n // Insert n at position i of the output:\n // Case of last character determines uppercase flag:\n if (preserveCase) {\n case_flags.splice(i, 0, input.charCodeAt(ic - 1) - 65 < 26);\n }\n\n output.splice(i, 0, n);\n i++;\n }\n if (preserveCase) {\n for (i = 0, len = output.length; i < len; i++) {\n if (case_flags[i]) {\n output[i] = String.fromCharCode(output[i])\n .toUpperCase()\n .charCodeAt(0);\n }\n }\n }\n return utf16.encode(output);\n}\n\nfunction toUnicode(domain) {\n const domain_array = domain.split('.');\n const out = [];\n for (let i = 0; i < domain_array.length; ++i) {\n const s = domain_array[i];\n out.push(s.match(/^xn--/) ? decode(s.slice(4)) : s);\n }\n return out.join('.');\n}\n\nexport default toUnicode;\n","import React, { FC, memo, useCallback } from '../../lib/teact/teact';\nimport { getActions } from '../../global';\nimport convertPunycode from '../../lib/punycode';\n\nimport {\n DEBUG, RE_TG_LINK, RE_TME_LINK,\n} from '../../config';\nimport buildClassName from '../../util/buildClassName';\nimport { ensureProtocol } from '../../util/ensureProtocol';\n\ntype OwnProps = {\n url?: string;\n text: string;\n className?: string;\n children?: React.ReactNode;\n isRtl?: boolean;\n};\n\nconst SafeLink: FC = ({\n url,\n text,\n className,\n children,\n isRtl,\n}) => {\n const { toggleSafeLinkModal, openTelegramLink } = getActions();\n\n const content = children || text;\n const isNotSafe = url !== content;\n\n const handleClick = useCallback((e: React.MouseEvent) => {\n if (\n e.ctrlKey || e.altKey || e.shiftKey || e.metaKey\n || !url || (!url.match(RE_TME_LINK) && !url.match(RE_TG_LINK))\n ) {\n if (isNotSafe) {\n toggleSafeLinkModal({ url });\n\n e.preventDefault();\n return false;\n }\n\n return true;\n }\n\n e.preventDefault();\n openTelegramLink({ url });\n\n return false;\n }, [isNotSafe, openTelegramLink, toggleSafeLinkModal, url]);\n\n if (!url) {\n return undefined;\n }\n\n const classNames = buildClassName(\n className || 'text-entity-link',\n text.length > 50 && 'long-word-break-all',\n );\n\n return (\n \n {content}\n \n );\n};\n\nfunction getDomain(url?: string) {\n if (!url) {\n return undefined;\n }\n\n const href = ensureProtocol(url);\n if (!href) {\n return undefined;\n }\n\n try {\n let decodedHref = decodeURI(href);\n\n const match = decodedHref.match(/^https?:\\/\\/([^/:?#]+)(?:[/:?#]|$)/i);\n if (!match) {\n return undefined;\n }\n const domain = match[1];\n decodedHref = decodedHref.replace(domain, convertPunycode(domain));\n\n return decodedHref;\n } catch (error) {\n if (DEBUG) {\n // eslint-disable-next-line no-console\n console.error('SafeLink.getDecodedUrl error ', url, error);\n }\n }\n\n return undefined;\n}\n\nexport default memo(SafeLink);\n","import { ApiMediaFormat } from '../../../api/types';\n\nimport * as mediaLoader from '../../../util/mediaLoader';\n\nimport MonkeyIdle from '../../../assets/tgs/monkeys/TwoFactorSetupMonkeyIdle.tgs';\nimport MonkeyTracking from '../../../assets/tgs/monkeys/TwoFactorSetupMonkeyTracking.tgs';\nimport MonkeyClose from '../../../assets/tgs/monkeys/TwoFactorSetupMonkeyClose.tgs';\nimport MonkeyPeek from '../../../assets/tgs/monkeys/TwoFactorSetupMonkeyPeek.tgs';\n\nimport FoldersAll from '../../../assets/tgs/settings/FoldersAll.tgs';\nimport FoldersNew from '../../../assets/tgs/settings/FoldersNew.tgs';\nimport DiscussionGroups from '../../../assets/tgs/settings/DiscussionGroupsDucks.tgs';\n\nimport CameraFlip from '../../../assets/tgs/calls/CameraFlip.tgs';\nimport HandFilled from '../../../assets/tgs/calls/HandFilled.tgs';\nimport HandOutline from '../../../assets/tgs/calls/HandOutline.tgs';\nimport Speaker from '../../../assets/tgs/calls/Speaker.tgs';\nimport VoiceAllowTalk from '../../../assets/tgs/calls/VoiceAllowTalk.tgs';\nimport VoiceMini from '../../../assets/tgs/calls/VoiceMini.tgs';\nimport VoiceMuted from '../../../assets/tgs/calls/VoiceMuted.tgs';\nimport VoiceOutlined from '../../../assets/tgs/calls/VoiceOutlined.tgs';\n\nimport Peach from '../../../assets/tgs/animatedEmojis/Peach.tgs';\nimport Eggplant from '../../../assets/tgs/animatedEmojis/Eggplant.tgs';\nimport Cumshot from '../../../assets/tgs/animatedEmojis/Cumshot.tgs';\n\nimport JoinRequest from '../../../assets/tgs/invites/Requests.tgs';\nimport Invite from '../../../assets/tgs/invites/Invite.tgs';\n\nimport QrPlane from '../../../assets/tgs/auth/QrPlane.tgs';\n\nexport const ANIMATED_STICKERS_PATHS = {\n MonkeyIdle,\n MonkeyTracking,\n MonkeyClose,\n MonkeyPeek,\n FoldersAll,\n FoldersNew,\n DiscussionGroups,\n CameraFlip,\n HandFilled,\n HandOutline,\n Speaker,\n VoiceAllowTalk,\n VoiceMini,\n VoiceMuted,\n VoiceOutlined,\n Peach,\n Eggplant,\n Cumshot,\n JoinRequest,\n Invite,\n QrPlane,\n};\n\nexport default function getAnimationData(name: keyof typeof ANIMATED_STICKERS_PATHS) {\n const path = ANIMATED_STICKERS_PATHS[name].replace(window.location.origin, '');\n\n return mediaLoader.fetch(`file${path}`, ApiMediaFormat.Lottie);\n}\n","import { ApiDocument } from '../../../api/types';\n\nconst ONE_GIGABYTE = 1024 * 1024 * 1024;\nconst ONE_MEGABYTE = 1024 * 1024;\n\nexport function getFileSizeString(bytes: number) {\n if (bytes > (ONE_GIGABYTE / 2)) {\n return `${(bytes / ONE_GIGABYTE).toFixed(1)} GB`;\n }\n if (bytes > (ONE_MEGABYTE / 2)) {\n return `${(bytes / ONE_MEGABYTE).toFixed(1)} MB`;\n }\n return `${(bytes / (1024)).toFixed(1)} KB`;\n}\n\nexport function getDocumentExtension(document: ApiDocument) {\n const { fileName, mimeType } = document;\n\n return getFileExtension(fileName, mimeType);\n}\n\nexport function getFileExtension(fileName: string, mimeType: string) {\n if (fileName && fileName.indexOf('.') !== -1) {\n return fileName.split('.').pop();\n } else {\n return mimeType.split('/').pop();\n }\n}\n\nexport function getColorFromExtension(extension: string) {\n switch (extension) {\n case 'apk':\n case 'xls':\n case 'xlsx':\n return 'green';\n case 'zip':\n case 'rar':\n case '7z':\n case 'tar':\n case 'gz':\n case 'ppt':\n case 'pptx':\n return 'orange';\n case 'pdf':\n case 'xps':\n return 'red';\n default:\n return 'default';\n }\n}\n\nexport function getDocumentHasPreview(document: ApiDocument) {\n return Boolean(document.previewBlobUrl || document.thumbnail);\n}\n","import twemojiRegex from '../../../lib/twemojiRegex';\n\nconst DETECT_UP_TO = 3;\nconst MAX_LENGTH = DETECT_UP_TO * 8; // Maximum 8 per one emoji.\nconst RE_EMOJI_ONLY = new RegExp(`^(?:${twemojiRegex.source})+$`, '');\n\nconst parseEmojiOnlyString = (text: string): number | false => {\n if (text.length > MAX_LENGTH) {\n return false;\n }\n\n const isEmojiOnly = Boolean(text.match(RE_EMOJI_ONLY));\n if (!isEmojiOnly) {\n return false;\n }\n\n let emojiCount = 0;\n while (twemojiRegex.exec(text)) {\n emojiCount++;\n\n if (emojiCount > DETECT_UP_TO) {\n twemojiRegex.lastIndex = 0;\n return false;\n }\n }\n\n return emojiCount;\n};\n\nexport default parseEmojiOnlyString;\n","import React, { FC, useCallback } from '../../lib/teact/teact';\n\nimport { ApiChat, ApiUser } from '../../api/types';\n\nimport buildClassName from '../../util/buildClassName';\n\nimport Link from '../ui/Link';\nimport { getActions } from '../../global';\n\ntype OwnProps = {\n className?: string;\n sender?: ApiUser | ApiChat;\n children: React.ReactNode;\n};\n\nconst UserLink: FC = ({\n className, sender, children,\n}) => {\n const { openChat } = getActions();\n\n const handleClick = useCallback(() => {\n if (sender) {\n openChat({ id: sender.id });\n }\n }, [sender, openChat]);\n\n if (!sender) {\n return children;\n }\n\n return (\n {children}\n );\n};\n\nexport default UserLink;\n","import React, { FC, useCallback } from '../../lib/teact/teact';\nimport { getActions } from '../../global';\n\nimport { ApiMessage } from '../../api/types';\n\nimport buildClassName from '../../util/buildClassName';\n\nimport Link from '../ui/Link';\n\ntype OwnProps = {\n className?: string;\n message?: ApiMessage;\n children: React.ReactNode;\n};\n\nconst MessageLink: FC = ({\n className, message, children,\n}) => {\n const { focusMessage } = getActions();\n\n const handleMessageClick = useCallback((): void => {\n if (message) {\n focusMessage({ chatId: message.chatId, messageId: message.id });\n }\n }, [focusMessage, message]);\n\n if (!message) {\n return children;\n }\n\n return (\n {children}\n );\n};\n\nexport default MessageLink;\n","import React, { FC, useCallback } from '../../lib/teact/teact';\nimport { getActions } from '../../global';\n\nimport buildClassName from '../../util/buildClassName';\n\nimport Link from '../ui/Link';\n\ntype OwnProps = {\n className?: string;\n chatId?: string;\n children: React.ReactNode;\n};\n\nconst ChatLink: FC = ({\n className, chatId, children,\n}) => {\n const { openChat } = getActions();\n\n const handleClick = useCallback(() => {\n if (chatId) {\n openChat({ id: chatId });\n }\n }, [chatId, openChat]);\n\n if (!chatId) {\n return children;\n }\n\n return (\n {children}\n );\n};\n\nexport default ChatLink;\n","import React, { FC, useCallback } from '../../lib/teact/teact';\n\nimport { ApiGroupCall } from '../../api/types';\n\nimport buildClassName from '../../util/buildClassName';\n\nimport Link from '../ui/Link';\nimport { getActions } from '../../global';\n\ntype OwnProps = {\n className?: string;\n groupCall?: Partial;\n children: React.ReactNode;\n};\n\nconst GroupCallLink: FC = ({\n className, groupCall, children,\n}) => {\n const { joinGroupCall } = getActions();\n\n const handleClick = useCallback(() => {\n if (groupCall) {\n joinGroupCall({ id: groupCall.id, accessHash: groupCall.accessHash });\n }\n }, [groupCall, joinGroupCall]);\n\n if (!groupCall) {\n return children;\n }\n\n return (\n {children}\n );\n};\n\nexport default GroupCallLink;\n","import React from '../../../lib/teact/teact';\n\nimport {\n ApiChat, ApiMessage, ApiUser, ApiGroupCall,\n} from '../../../api/types';\nimport { LangFn } from '../../../hooks/useLang';\nimport {\n getChatTitle,\n getMessageSummaryText,\n getUserFullName,\n} from '../../../global/helpers';\nimport trimText from '../../../util/trimText';\nimport { formatCurrency } from '../../../util/formatCurrency';\nimport { TextPart, renderMessageSummary } from './renderMessageText';\nimport renderText from './renderText';\n\nimport UserLink from '../UserLink';\nimport MessageLink from '../MessageLink';\nimport ChatLink from '../ChatLink';\nimport GroupCallLink from '../GroupCallLink';\n\ninterface RenderOptions {\n asPlainText?: boolean;\n asTextWithSpoilers?: boolean;\n}\n\nconst MAX_LENGTH = 32;\nconst NBSP = '\\u00A0';\n\nexport function renderActionMessageText(\n lang: LangFn,\n message: ApiMessage,\n actionOriginUser?: ApiUser,\n actionOriginChat?: ApiChat,\n targetUsers?: ApiUser[],\n targetMessage?: ApiMessage,\n targetChatId?: string,\n options: RenderOptions = {},\n) {\n if (!message.content.action) {\n return [];\n }\n\n const {\n text, translationValues, amount, currency, call,\n } = message.content.action;\n const content: TextPart[] = [];\n const noLinks = options.asPlainText || options.asTextWithSpoilers;\n const translationKey = text === 'Chat.Service.Group.UpdatedPinnedMessage1' && !targetMessage\n ? 'Message.PinnedGenericMessage'\n : text;\n\n let unprocessed = lang(translationKey, translationValues?.length ? translationValues : undefined);\n let processed: TextPart[];\n\n if (unprocessed.includes('%payment_amount%')) {\n processed = processPlaceholder(\n unprocessed,\n '%payment_amount%',\n formatCurrency(amount!, currency, lang.code),\n );\n unprocessed = processed.pop() as string;\n content.push(...processed);\n }\n\n processed = processPlaceholder(\n unprocessed,\n '%action_origin%',\n actionOriginUser ? (\n renderUserContent(actionOriginUser, noLinks) || NBSP\n ) : actionOriginChat ? (\n renderChatContent(lang, actionOriginChat, noLinks) || NBSP\n ) : 'User',\n );\n\n unprocessed = processed.pop() as string;\n content.push(...processed);\n\n processed = processPlaceholder(\n unprocessed,\n '%target_user%',\n targetUsers\n ? targetUsers.map((user) => renderUserContent(user, noLinks)).filter(Boolean as any)\n : 'User',\n );\n\n unprocessed = processed.pop() as string;\n content.push(...processed);\n\n processed = processPlaceholder(\n unprocessed,\n '%message%',\n targetMessage\n ? renderMessageContent(lang, targetMessage, options)\n : 'a message',\n );\n unprocessed = processed.pop() as string;\n content.push(...processed);\n\n processed = processPlaceholder(\n unprocessed,\n '%product%',\n targetMessage\n ? renderProductContent(targetMessage)\n : 'a product',\n );\n unprocessed = processed.pop() as string;\n content.push(...processed);\n\n processed = processPlaceholder(\n unprocessed,\n '%target_chat%',\n targetChatId\n ? renderMigratedContent(targetChatId, noLinks)\n : 'another chat',\n );\n content.push(...processed);\n\n if (options.asPlainText) {\n return content.join('').trim();\n }\n\n if (call) {\n return renderGroupCallContent(call, content);\n }\n\n return content;\n}\n\nfunction renderProductContent(message: ApiMessage) {\n return message.content && message.content.invoice\n ? message.content.invoice.title\n : 'a product';\n}\n\nfunction renderMessageContent(lang: LangFn, message: ApiMessage, options: RenderOptions = {}) {\n const { asPlainText, asTextWithSpoilers } = options;\n\n if (asPlainText) {\n return getMessageSummaryText(lang, message, undefined, MAX_LENGTH);\n }\n\n const messageSummary = renderMessageSummary(lang, message, undefined, undefined, MAX_LENGTH);\n\n if (asTextWithSpoilers) {\n return (\n {messageSummary}\n );\n }\n\n return (\n {messageSummary}\n );\n}\n\nfunction renderGroupCallContent(groupCall: Partial, text: TextPart[]): string | TextPart | undefined {\n return (\n \n {text}\n \n );\n}\n\nfunction renderUserContent(sender: ApiUser, noLinks?: boolean): string | TextPart | undefined {\n const text = trimText(getUserFullName(sender), MAX_LENGTH);\n\n if (noLinks) {\n return text;\n }\n\n return {sender && renderText(text!)};\n}\n\nfunction renderChatContent(lang: LangFn, chat: ApiChat, noLinks?: boolean): string | TextPart | undefined {\n const text = trimText(getChatTitle(lang, chat), MAX_LENGTH);\n\n if (noLinks) {\n return text;\n }\n\n return {chat && renderText(text!)};\n}\n\nfunction renderMigratedContent(chatId: string, noLinks?: boolean): string | TextPart | undefined {\n const text = 'another chat';\n\n if (noLinks) {\n return text;\n }\n\n return {text};\n}\n\nfunction processPlaceholder(text: string, placeholder: string, replaceValue?: TextPart | TextPart[]): TextPart[] {\n const placeholderPosition = text.indexOf(placeholder);\n if (placeholderPosition < 0 || !replaceValue) {\n return [text];\n }\n\n const content: TextPart[] = [];\n content.push(text.substring(0, placeholderPosition));\n if (Array.isArray(replaceValue)) {\n replaceValue.forEach((value, index) => {\n content.push(value);\n if (index + 1 < replaceValue.length) {\n content.push(', ');\n }\n });\n } else {\n content.push(replaceValue);\n }\n content.push(text.substring(placeholderPosition + placeholder.length));\n\n return content;\n}\n","import { ApiMessage, ApiMessageEntityTypes } from '../../../api/types';\nimport {\n getMessageSummaryDescription,\n getMessageSummaryEmoji,\n getMessageSummaryText,\n getMessageText,\n TRUNCATED_SUMMARY_LENGTH,\n} from '../../../global/helpers';\nimport { LangFn } from '../../../hooks/useLang';\nimport renderText from './renderText';\nimport { renderTextWithEntities, TextPart } from './renderTextWithEntities';\nimport trimText from '../../../util/trimText';\n\nexport type { TextPart };\n\nexport function renderMessageText(\n message: ApiMessage,\n highlight?: string,\n shouldRenderHqEmoji?: boolean,\n isSimple?: boolean,\n truncateLength?: number,\n) {\n const { text, entities } = message.content.text || {};\n\n if (!text) {\n const contentNotSupportedText = getMessageText(message);\n return contentNotSupportedText ? [trimText(contentNotSupportedText, truncateLength)] : undefined;\n }\n\n return renderTextWithEntities(\n trimText(text, truncateLength),\n entities,\n highlight,\n shouldRenderHqEmoji,\n undefined,\n message.id,\n isSimple,\n );\n}\n\nexport function renderMessageSummary(\n lang: LangFn,\n message: ApiMessage,\n noEmoji = false,\n highlight?: string,\n truncateLength = TRUNCATED_SUMMARY_LENGTH,\n): TextPart[] {\n const { entities } = message.content.text || {};\n\n const hasSpoilers = entities?.some((e) => e.type === ApiMessageEntityTypes.Spoiler);\n if (!hasSpoilers) {\n const text = trimText(getMessageSummaryText(lang, message, noEmoji), truncateLength);\n\n if (highlight) {\n return renderText(text, ['emoji', 'highlight'], { highlight });\n } else {\n return renderText(text);\n }\n }\n\n const emoji = !noEmoji && getMessageSummaryEmoji(message);\n const emojiWithSpace = emoji ? `${emoji} ` : '';\n\n const text = renderMessageText(message, highlight, undefined, true, truncateLength);\n const description = getMessageSummaryDescription(lang, message, text);\n\n return [\n emojiWithSpace,\n ...(Array.isArray(description) ? description : [description]),\n ].filter(Boolean);\n}\n","import React from '../../../lib/teact/teact';\nimport EMOJI_REGEX, { removeVS16s } from '../../../lib/twemojiRegex';\n\nimport { RE_LINK_TEMPLATE, RE_MENTION_TEMPLATE } from '../../../config';\nimport { IS_EMOJI_SUPPORTED } from '../../../util/environment';\nimport { fixNonStandardEmoji, nativeToUnified } from '../../../util/emoji';\nimport buildClassName from '../../../util/buildClassName';\nimport { compact } from '../../../util/iteratees';\n\nimport MentionLink from '../../middle/message/MentionLink';\nimport SafeLink from '../SafeLink';\n\ntype TextPart = string | Element;\nexport type TextFilter = (\n 'escape_html' | 'hq_emoji' | 'emoji' | 'emoji_html' | 'br' | 'br_html' | 'highlight' | 'links' |\n 'simple_markdown' | 'simple_markdown_html'\n);\n\nconst RE_LETTER_OR_DIGIT = /^[\\d\\wа-яё]$/i;\nconst SIMPLE_MARKDOWN_REGEX = /(\\*\\*|__).+?\\1/g;\n\nexport default function renderText(\n part: TextPart,\n filters: Array = ['emoji'],\n params?: { highlight: string | undefined },\n): TextPart[] {\n if (typeof part !== 'string') {\n return [part];\n }\n\n return compact(filters.reduce((text, filter) => {\n switch (filter) {\n case 'escape_html':\n return escapeHtml(text);\n\n case 'hq_emoji':\n EMOJI_REGEX.lastIndex = 0;\n return replaceEmojis(text, 'big', 'jsx');\n\n case 'emoji':\n EMOJI_REGEX.lastIndex = 0;\n return replaceEmojis(text, 'small', 'jsx');\n\n case 'emoji_html':\n EMOJI_REGEX.lastIndex = 0;\n return replaceEmojis(text, 'small', 'html');\n\n case 'br':\n return addLineBreaks(text, 'jsx');\n\n case 'br_html':\n return addLineBreaks(text, 'html');\n\n case 'highlight':\n return addHighlight(text, params!.highlight);\n\n case 'links':\n return addLinks(text);\n\n case 'simple_markdown':\n return replaceSimpleMarkdown(text, 'jsx');\n\n case 'simple_markdown_html':\n return replaceSimpleMarkdown(text, 'html');\n }\n\n return text;\n }, [part] as TextPart[]));\n}\n\nfunction escapeHtml(textParts: TextPart[]): TextPart[] {\n const divEl = document.createElement('div');\n return textParts.reduce((result, part) => {\n if (typeof part !== 'string') {\n result.push(part);\n return result;\n }\n\n divEl.innerText = part;\n result.push(divEl.innerHTML);\n\n return result;\n }, [] as TextPart[]);\n}\n\nfunction replaceEmojis(textParts: TextPart[], size: 'big' | 'small', type: 'jsx' | 'html'): TextPart[] {\n if (IS_EMOJI_SUPPORTED) {\n return textParts;\n }\n\n return textParts.reduce((result, part) => {\n if (typeof part !== 'string') {\n result.push(part);\n return result;\n }\n\n part = fixNonStandardEmoji(part);\n const parts = part.split(EMOJI_REGEX);\n const emojis = part.match(EMOJI_REGEX) || [];\n result.push(parts[0]);\n\n return emojis.reduce((emojiResult: TextPart[], emoji, i) => {\n const code = nativeToUnified(removeVS16s(emoji));\n if (!code) return emojiResult;\n const className = buildClassName(\n 'emoji',\n size === 'small' && 'emoji-small',\n );\n if (type === 'jsx') {\n emojiResult.push(\n ,\n );\n }\n if (type === 'html') {\n emojiResult.push(\n // For preventing extra spaces in html\n // eslint-disable-next-line max-len\n `\"${emoji}\"`,\n );\n }\n\n const index = i * 2 + 2;\n if (parts[index]) {\n emojiResult.push(parts[index]);\n }\n\n return emojiResult;\n }, result);\n }, [] as TextPart[]);\n}\n\nfunction addLineBreaks(textParts: TextPart[], type: 'jsx' | 'html'): TextPart[] {\n return textParts.reduce((result: TextPart[], part) => {\n if (typeof part !== 'string') {\n result.push(part);\n return result;\n }\n\n const splittenParts = part\n .split(/\\r\\n|\\r|\\n/g)\n .reduce((parts: TextPart[], line: string, i, source) => {\n // This adds non-breaking space if line was indented with spaces, to preserve the indentation\n const trimmedLine = line.trimLeft();\n const indentLength = line.length - trimmedLine.length;\n parts.push(String.fromCharCode(160).repeat(indentLength) + trimmedLine);\n\n if (i !== source.length - 1) {\n parts.push(\n type === 'jsx' ?
: '
',\n );\n }\n\n return parts;\n }, []);\n\n return [...result, ...splittenParts];\n }, []);\n}\n\nfunction addHighlight(textParts: TextPart[], highlight: string | undefined): TextPart[] {\n return textParts.reduce((result, part) => {\n if (typeof part !== 'string' || !highlight) {\n result.push(part);\n return result;\n }\n\n const lowerCaseText = part.toLowerCase();\n const queryPosition = lowerCaseText.indexOf(highlight.toLowerCase());\n const nextSymbol = lowerCaseText[queryPosition + highlight.length];\n if (queryPosition < 0 || (nextSymbol && nextSymbol.match(RE_LETTER_OR_DIGIT))) {\n result.push(part);\n return result;\n }\n\n const newParts: TextPart[] = [];\n newParts.push(part.substring(0, queryPosition));\n newParts.push(\n \n {part.substring(queryPosition, queryPosition + highlight.length)}\n ,\n );\n newParts.push(part.substring(queryPosition + highlight.length));\n\n return [...result, ...newParts];\n }, [] as TextPart[]);\n}\n\nconst RE_LINK = new RegExp(`${RE_LINK_TEMPLATE}|${RE_MENTION_TEMPLATE}`, 'ig');\n\nfunction addLinks(textParts: TextPart[]): TextPart[] {\n return textParts.reduce((result, part) => {\n if (typeof part !== 'string') {\n result.push(part);\n return result;\n }\n\n const links = part.match(RE_LINK);\n if (!links || !links.length) {\n result.push(part);\n return result;\n }\n\n const content: TextPart[] = [];\n\n let nextLink = links.shift();\n let lastIndex = 0;\n while (nextLink) {\n const index = part.indexOf(nextLink, lastIndex);\n content.push(part.substring(lastIndex, index));\n if (nextLink.startsWith('@')) {\n content.push(\n \n {nextLink}\n ,\n );\n } else {\n if (nextLink.endsWith('?')) {\n nextLink = nextLink.slice(0, nextLink.length - 1);\n }\n\n content.push(\n ,\n );\n }\n lastIndex = index + nextLink.length;\n nextLink = links.shift();\n }\n content.push(part.substring(lastIndex));\n\n return [...result, ...content];\n }, [] as TextPart[]);\n}\n\nfunction replaceSimpleMarkdown(textParts: TextPart[], type: 'jsx' | 'html'): TextPart[] {\n return textParts.reduce((result, part) => {\n if (typeof part !== 'string') {\n result.push(part);\n return result;\n }\n\n const parts = part.split(SIMPLE_MARKDOWN_REGEX);\n const entities = part.match(SIMPLE_MARKDOWN_REGEX) || [];\n result.push(parts[0]);\n\n return entities.reduce((entityResult: TextPart[], entity, i) => {\n if (type === 'jsx') {\n entityResult.push(\n entity.startsWith('**')\n ? {entity.replace(/\\*\\*/g, '')}\n : {entity.replace(/__/g, '')},\n );\n } else {\n entityResult.push(\n entity.startsWith('**')\n ? `${entity.replace(/\\*\\*/g, '')}`\n : `${entity.replace(/__/g, '')}`,\n );\n }\n\n const index = i * 2 + 2;\n if (parts[index]) {\n entityResult.push(parts[index]);\n }\n\n return entityResult;\n }, result);\n }, [] as TextPart[]);\n}\n","import { MouseEvent as ReactMouseEvent } from 'react';\nimport React, {\n FC, memo, useCallback, useEffect, useRef,\n} from '../../../lib/teact/teact';\n\nimport { createClassNameBuilder } from '../../../util/buildClassName';\nimport useFlag from '../../../hooks/useFlag';\n\nimport './Spoiler.scss';\n\ntype OwnProps = {\n children?: React.ReactNode;\n messageId?: number;\n};\n\nconst READING_SYMBOLS_PER_SECOND = 23; // Heuristics\nconst MIN_HIDE_TIMEOUT = 5000; // 5s\nconst MAX_HIDE_TIMEOUT = 60000; // 1m\n\nconst actionsByMessageId: Map = new Map();\n\nconst buildClassName = createClassNameBuilder('Spoiler');\n\nconst Spoiler: FC = ({\n children,\n messageId,\n}) => {\n // eslint-disable-next-line no-null/no-null\n const contentRef = useRef(null);\n\n const [isRevealed, reveal, conceal] = useFlag();\n\n const handleClick = useCallback((e: ReactMouseEvent) => {\n e.preventDefault();\n e.stopPropagation();\n\n actionsByMessageId.get(messageId!)?.forEach((actions) => actions.reveal());\n\n const contentLength = contentRef.current!.innerText.length;\n const readingMs = Math.round(contentLength / READING_SYMBOLS_PER_SECOND) * 1000;\n const timeoutMs = Math.max(MIN_HIDE_TIMEOUT, Math.min(readingMs, MAX_HIDE_TIMEOUT));\n\n setTimeout(() => {\n actionsByMessageId.get(messageId!)?.forEach((actions) => actions.conceal());\n conceal();\n }, timeoutMs);\n }, [conceal, messageId]);\n\n useEffect(() => {\n if (!messageId) {\n return undefined;\n }\n\n if (actionsByMessageId.has(messageId)) {\n actionsByMessageId.get(messageId)!.push({ reveal, conceal });\n } else {\n actionsByMessageId.set(messageId, [{ reveal, conceal }]);\n }\n\n return () => {\n actionsByMessageId.delete(messageId);\n };\n }, [conceal, handleClick, isRevealed, messageId, reveal]);\n\n return (\n \n \n {children}\n \n \n );\n};\n\nexport default memo(Spoiler);\n","import { MouseEvent } from 'react';\nimport React from '../../../lib/teact/teact';\nimport { getActions } from '../../../global';\n\nimport { ApiFormattedText, ApiMessageEntity, ApiMessageEntityTypes } from '../../../api/types';\nimport renderText, { TextFilter } from './renderText';\nimport { copyTextToClipboard } from '../../../util/clipboard';\nimport { getTranslation } from '../../../util/langProvider';\n\nimport MentionLink from '../../middle/message/MentionLink';\nimport SafeLink from '../SafeLink';\nimport Spoiler from '../spoiler/Spoiler';\n\nexport type TextPart =\n string\n | Element;\n\ninterface IOrganizedEntity {\n entity: ApiMessageEntity;\n organizedIndexes: Set;\n nestedEntities: IOrganizedEntity[];\n}\n\nexport function renderTextWithEntities(\n text: string,\n entities?: ApiMessageEntity[],\n highlight?: string,\n shouldRenderHqEmoji?: boolean,\n shouldRenderAsHtml?: boolean,\n messageId?: number,\n isSimple?: boolean,\n) {\n if (!entities || !entities.length) {\n return renderMessagePart(text, highlight, shouldRenderHqEmoji, shouldRenderAsHtml, isSimple);\n }\n\n const result: TextPart[] = [];\n let deleteLineBreakAfterPre = false;\n\n const organizedEntities = organizeEntities(entities);\n\n // Recursive function to render regular and nested entities\n function renderEntity(\n textPartStart: number,\n textPartEnd: number,\n organizedEntity: IOrganizedEntity,\n isLastEntity: boolean,\n ) {\n const renderResult: TextPart[] = [];\n const { entity, nestedEntities } = organizedEntity;\n const { offset, length, type } = entity;\n\n // Render text before the entity\n let textBefore = text.substring(textPartStart, offset);\n const textBeforeLength = textBefore.length;\n if (textBefore) {\n if (deleteLineBreakAfterPre && textBefore.length > 0 && textBefore[0] === '\\n') {\n textBefore = textBefore.substr(1);\n deleteLineBreakAfterPre = false;\n }\n if (textBefore) {\n renderResult.push(...renderMessagePart(\n textBefore, highlight, shouldRenderHqEmoji, shouldRenderAsHtml, isSimple,\n ) as TextPart[]);\n }\n }\n\n const entityStartIndex = textPartStart + textBeforeLength;\n const entityEndIndex = entityStartIndex + length;\n\n let entityContent: TextPart = text.substring(offset, offset + length);\n const nestedEntityContent: TextPart[] = [];\n\n if (deleteLineBreakAfterPre && entityContent.length > 0 && entityContent[0] === '\\n') {\n entityContent = entityContent.substr(1);\n deleteLineBreakAfterPre = false;\n }\n\n if (type === ApiMessageEntityTypes.Pre) {\n deleteLineBreakAfterPre = true;\n }\n\n // Render nested entities, if any\n if (nestedEntities.length) {\n let nestedIndex = entityStartIndex;\n\n nestedEntities.forEach((nestedEntity, nestedEntityIndex) => {\n const {\n renderResult: nestedResult,\n entityEndIndex: nestedEntityEndIndex,\n } = renderEntity(\n nestedIndex,\n entityEndIndex,\n nestedEntity,\n nestedEntityIndex === nestedEntities.length - 1,\n );\n\n nestedEntityContent.push(...nestedResult);\n nestedIndex = nestedEntityEndIndex;\n });\n }\n\n // Render the entity itself\n const newEntity = shouldRenderAsHtml\n ? processEntityAsHtml(entity, entityContent, nestedEntityContent)\n : processEntity(entity, entityContent, nestedEntityContent, highlight, messageId, isSimple);\n\n if (Array.isArray(newEntity)) {\n renderResult.push(...newEntity);\n } else {\n renderResult.push(newEntity);\n }\n\n // Render text after the entity, if it is the last entity in the text,\n // or the last nested entity inside of another entity\n if (isLastEntity && entityEndIndex < textPartEnd) {\n let textAfter = text.substring(entityEndIndex, textPartEnd);\n if (deleteLineBreakAfterPre && textAfter.length > 0 && textAfter[0] === '\\n') {\n textAfter = textAfter.substring(1);\n }\n if (textAfter) {\n renderResult.push(...renderMessagePart(\n textAfter, highlight, shouldRenderHqEmoji, shouldRenderAsHtml, isSimple,\n ) as TextPart[]);\n }\n }\n\n return {\n renderResult,\n entityEndIndex,\n };\n }\n\n // Process highest-level entities\n let index = 0;\n\n organizedEntities.forEach((entity, arrayIndex) => {\n const { renderResult, entityEndIndex } = renderEntity(\n index,\n text.length,\n entity,\n arrayIndex === organizedEntities.length - 1,\n );\n\n result.push(...renderResult);\n index = entityEndIndex;\n });\n\n return result;\n}\n\nexport function getTextWithEntitiesAsHtml(formattedText?: ApiFormattedText) {\n const { text, entities } = formattedText || {};\n if (!text) {\n return '';\n }\n\n const result = renderTextWithEntities(\n text,\n entities,\n undefined,\n undefined,\n true,\n );\n\n if (Array.isArray(result)) {\n return result.join('');\n }\n\n return result;\n}\n\nfunction renderMessagePart(\n content: TextPart | TextPart[],\n highlight?: string,\n shouldRenderHqEmoji?: boolean,\n shouldRenderAsHtml?: boolean,\n isSimple?: boolean,\n) {\n if (Array.isArray(content)) {\n const result: TextPart[] = [];\n\n content.forEach((c) => {\n result.push(...renderMessagePart(c, highlight, shouldRenderHqEmoji, shouldRenderAsHtml, isSimple));\n });\n\n return result;\n }\n\n if (shouldRenderAsHtml) {\n return renderText(content, ['escape_html', 'emoji_html', 'br_html']);\n }\n\n const emojiFilter = shouldRenderHqEmoji ? 'hq_emoji' : 'emoji';\n\n const filters: TextFilter[] = [emojiFilter];\n if (!isSimple) {\n filters.push('br');\n }\n\n if (highlight) {\n return renderText(content, filters.concat('highlight'), { highlight });\n } else {\n return renderText(content, filters);\n }\n}\n\n// Organize entities in a tree-like structure to better represent how the text will be displayed\nfunction organizeEntities(entities: ApiMessageEntity[]) {\n const organizedEntityIndexes: Set = new Set();\n const organizedEntities: IOrganizedEntity[] = [];\n\n entities.forEach((entity, index) => {\n if (organizedEntityIndexes.has(index)) {\n return;\n }\n\n const organizedEntity = organizeEntity(entity, index, entities, organizedEntityIndexes);\n if (organizedEntity) {\n organizedEntity.organizedIndexes.forEach((organizedIndex) => {\n organizedEntityIndexes.add(organizedIndex);\n });\n\n organizedEntities.push(organizedEntity);\n }\n });\n\n return organizedEntities;\n}\n\nfunction organizeEntity(\n entity: ApiMessageEntity,\n index: number,\n entities: ApiMessageEntity[],\n organizedEntityIndexes: Set,\n): IOrganizedEntity | undefined {\n const { offset, length } = entity;\n const organizedIndexes = new Set([index]);\n\n if (organizedEntityIndexes.has(index)) {\n return undefined;\n }\n\n // Determine any nested entities inside current entity\n const nestedEntities: IOrganizedEntity[] = [];\n const parsedNestedEntities = entities\n .filter((e, i) => i > index && e.offset >= offset && e.offset < offset + length)\n .map((e) => organizeEntity(e, entities.indexOf(e), entities, organizedEntityIndexes))\n .filter(Boolean as any);\n\n parsedNestedEntities.forEach((parsedEntity) => {\n let isChanged = false;\n\n parsedEntity.organizedIndexes.forEach((organizedIndex) => {\n if (!isChanged && !organizedIndexes.has(organizedIndex)) {\n isChanged = true;\n }\n\n organizedIndexes.add(organizedIndex);\n });\n\n if (isChanged) {\n nestedEntities.push(parsedEntity);\n }\n });\n\n return {\n entity,\n organizedIndexes,\n nestedEntities,\n };\n}\n\nfunction processEntity(\n entity: ApiMessageEntity,\n entityContent: TextPart,\n nestedEntityContent: TextPart[],\n highlight?: string,\n messageId?: number,\n isSimple?: boolean,\n) {\n const entityText = typeof entityContent === 'string' && entityContent;\n const renderedContent = nestedEntityContent.length ? nestedEntityContent : entityContent;\n\n function renderNestedMessagePart() {\n return renderMessagePart(\n renderedContent, highlight, undefined, undefined, isSimple,\n );\n }\n\n if (!entityText) {\n return renderNestedMessagePart();\n }\n\n if (isSimple) {\n const text = renderNestedMessagePart();\n if (entity.type === ApiMessageEntityTypes.Spoiler) {\n return {text};\n }\n return text;\n }\n\n switch (entity.type) {\n case ApiMessageEntityTypes.Bold:\n return {renderNestedMessagePart()};\n case ApiMessageEntityTypes.Blockquote:\n return
{renderNestedMessagePart()}
;\n case ApiMessageEntityTypes.BotCommand:\n return (\n \n {renderNestedMessagePart()}\n \n );\n case ApiMessageEntityTypes.Hashtag:\n return (\n \n {renderNestedMessagePart()}\n \n );\n case ApiMessageEntityTypes.Cashtag:\n return (\n \n {renderNestedMessagePart()}\n \n );\n case ApiMessageEntityTypes.Code:\n return (\n \n {renderNestedMessagePart()}\n \n );\n case ApiMessageEntityTypes.Email:\n return (\n \n {renderNestedMessagePart()}\n \n );\n case ApiMessageEntityTypes.Italic:\n return {renderNestedMessagePart()};\n case ApiMessageEntityTypes.MentionName:\n return (\n \n {renderNestedMessagePart()}\n \n );\n case ApiMessageEntityTypes.Mention:\n return (\n \n {renderNestedMessagePart()}\n \n );\n case ApiMessageEntityTypes.Phone:\n return (\n \n {renderNestedMessagePart()}\n \n );\n case ApiMessageEntityTypes.Pre:\n return
{renderNestedMessagePart()}
;\n case ApiMessageEntityTypes.Strike:\n return {renderNestedMessagePart()};\n case ApiMessageEntityTypes.TextUrl:\n case ApiMessageEntityTypes.Url:\n return (\n \n {renderNestedMessagePart()}\n
\n );\n case ApiMessageEntityTypes.Underline:\n return {renderNestedMessagePart()};\n case ApiMessageEntityTypes.Spoiler:\n return {renderNestedMessagePart()};\n default:\n return renderNestedMessagePart();\n }\n}\n\nfunction processEntityAsHtml(\n entity: ApiMessageEntity,\n entityContent: TextPart,\n nestedEntityContent: TextPart[],\n) {\n const rawEntityText = typeof entityContent === 'string' && entityContent;\n\n const renderedContent = nestedEntityContent.length\n ? nestedEntityContent.join('')\n : renderText(entityContent, ['escape_html', 'emoji_html', 'br_html']).join('');\n\n if (!rawEntityText) {\n return renderedContent;\n }\n\n switch (entity.type) {\n case ApiMessageEntityTypes.Bold:\n return `${renderedContent}`;\n case ApiMessageEntityTypes.Italic:\n return `${renderedContent}`;\n case ApiMessageEntityTypes.Underline:\n return `${renderedContent}`;\n case ApiMessageEntityTypes.Code:\n return `${renderedContent}`;\n case ApiMessageEntityTypes.Pre:\n return `\\`\\`\\`
${renderedContent}
\\`\\`\\``;\n case ApiMessageEntityTypes.Strike:\n return `${renderedContent}`;\n case ApiMessageEntityTypes.MentionName:\n return `${renderedContent}`;\n case ApiMessageEntityTypes.Url:\n case ApiMessageEntityTypes.TextUrl:\n return `${renderedContent}`;\n case ApiMessageEntityTypes.Spoiler:\n return `${renderedContent}`;\n default:\n return renderedContent;\n }\n}\n\nfunction getLinkUrl(entityContent: string, entity: ApiMessageEntity) {\n const { type, url } = entity;\n return type === ApiMessageEntityTypes.TextUrl && url ? url : entityContent;\n}\n\nfunction handleBotCommandClick(e: MouseEvent) {\n getActions().sendBotCommand({ command: e.currentTarget.innerText });\n}\n\nfunction handleHashtagClick(e: MouseEvent) {\n getActions().setLocalTextSearchQuery({ query: e.currentTarget.innerText });\n getActions().searchTextMessagesLocal();\n}\n\nfunction handleCodeClick(e: MouseEvent) {\n copyTextToClipboard(e.currentTarget.innerText);\n getActions().showNotification({\n message: getTranslation('TextCopied'),\n });\n}\n","import React from '../../../lib/teact/teact';\n\nimport { EDITABLE_INPUT_ID } from '../../../config';\nimport { IS_IOS } from '../../../util/environment';\n\nexport function preventMessageInputBlur(e: React.MouseEvent, withBubbling = false) {\n if (\n IS_IOS\n || !document.activeElement\n || document.activeElement.id !== EDITABLE_INPUT_ID\n || (!withBubbling && e.target !== e.currentTarget)\n ) {\n return;\n }\n\n e.preventDefault();\n}\n\nexport function preventMessageInputBlurWithBubbling(e: React.MouseEvent) {\n preventMessageInputBlur(e, true);\n}\n","import React, { FC } from '../../../lib/teact/teact';\nimport { getActions, withGlobal } from '../../../global';\n\nimport { ApiChat, ApiUser } from '../../../api/types';\n\nimport { selectUser } from '../../../global/selectors';\n\ntype OwnProps = {\n userId?: string;\n username?: string;\n children: React.ReactNode;\n};\n\ntype StateProps = {\n userOrChat?: ApiUser | ApiChat;\n};\n\nconst MentionLink: FC = ({\n username,\n userOrChat,\n children,\n}) => {\n const {\n openChat,\n openChatByUsername,\n } = getActions();\n\n const handleClick = () => {\n if (userOrChat) {\n openChat({ id: userOrChat.id });\n } else if (username) {\n openChatByUsername({ username: username.substring(1) });\n }\n };\n\n return (\n \n {children}\n \n );\n};\n\nexport default withGlobal(\n (global, { userId }): StateProps => {\n return {\n userOrChat: userId ? selectUser(global, userId) : undefined,\n };\n },\n)(MentionLink);\n","import { MouseEvent as ReactMouseEvent, RefObject } from 'react';\n\nimport React, {\n FC, useRef, useCallback, useState,\n} from '../../lib/teact/teact';\n\nimport buildClassName from '../../util/buildClassName';\n\nimport Spinner from './Spinner';\nimport RippleEffect from './RippleEffect';\n\nimport './Button.scss';\n\nexport type OwnProps = {\n ref?: RefObject;\n type?: 'button' | 'submit' | 'reset';\n children: React.ReactNode;\n size?: 'default' | 'smaller' | 'tiny';\n color?: (\n 'primary' | 'secondary' | 'gray' | 'danger' | 'translucent' | 'translucent-white' | 'translucent-black' | 'dark'\n );\n backgroundImage?: string;\n id?: string;\n className?: string;\n round?: boolean;\n pill?: boolean;\n fluid?: boolean;\n isText?: boolean;\n isLoading?: boolean;\n ariaLabel?: string;\n ariaControls?: string;\n hasPopup?: boolean;\n href?: string;\n download?: string;\n disabled?: boolean;\n ripple?: boolean;\n faded?: boolean;\n tabIndex?: number;\n isRtl?: boolean;\n withClickPropagation?: boolean;\n onClick?: (e: ReactMouseEvent) => void;\n onContextMenu?: (e: ReactMouseEvent) => void;\n onMouseDown?: (e: ReactMouseEvent) => void;\n onMouseEnter?: NoneToVoidFunction;\n onMouseLeave?: NoneToVoidFunction;\n onFocus?: NoneToVoidFunction;\n};\n\n// Longest animation duration;\nconst CLICKED_TIMEOUT = 400;\n\nconst Button: FC = ({\n ref,\n type = 'button',\n id,\n onClick,\n onContextMenu,\n onMouseDown,\n onMouseEnter,\n onMouseLeave,\n onFocus,\n children,\n size = 'default',\n color = 'primary',\n backgroundImage,\n className,\n round,\n pill,\n fluid,\n isText,\n isLoading,\n ariaLabel,\n ariaControls,\n hasPopup,\n href,\n download,\n disabled,\n ripple,\n faded,\n tabIndex,\n isRtl,\n withClickPropagation,\n}) => {\n // eslint-disable-next-line no-null/no-null\n let elementRef = useRef(null);\n if (ref) {\n elementRef = ref;\n }\n\n const [isClicked, setIsClicked] = useState(false);\n\n const fullClassName = buildClassName(\n 'Button',\n className,\n size,\n color,\n round && 'round',\n pill && 'pill',\n fluid && 'fluid',\n disabled && 'disabled',\n isText && 'text',\n isLoading && 'loading',\n ripple && 'has-ripple',\n faded && 'faded',\n isClicked && 'clicked',\n backgroundImage && 'with-image',\n );\n\n const handleClick = useCallback((e: ReactMouseEvent) => {\n if (!disabled && onClick) {\n onClick(e);\n }\n\n setIsClicked(true);\n setTimeout(() => {\n setIsClicked(false);\n }, CLICKED_TIMEOUT);\n }, [disabled, onClick]);\n\n const handleMouseDown = useCallback((e: ReactMouseEvent) => {\n if (!withClickPropagation) e.preventDefault();\n if (!disabled && onMouseDown) {\n onMouseDown(e);\n }\n }, [onMouseDown, disabled, withClickPropagation]);\n\n if (href) {\n return (\n }\n id={id}\n className={fullClassName}\n href={href}\n title={ariaLabel}\n download={download}\n tabIndex={tabIndex}\n dir={isRtl ? 'rtl' : undefined}\n aria-label={ariaLabel}\n aria-controls={ariaControls}\n >\n {children}\n {!disabled && ripple && (\n \n )}\n \n );\n }\n\n return (\n }\n id={id}\n type={type}\n className={fullClassName}\n onClick={handleClick}\n onContextMenu={onContextMenu}\n onMouseDown={handleMouseDown}\n onMouseEnter={onMouseEnter && !disabled ? onMouseEnter : undefined}\n onMouseLeave={onMouseLeave && !disabled ? onMouseLeave : undefined}\n onFocus={onFocus && !disabled ? onFocus : undefined}\n aria-label={ariaLabel}\n aria-controls={ariaControls}\n aria-haspopup={hasPopup}\n title={ariaLabel}\n tabIndex={tabIndex}\n dir={isRtl ? 'rtl' : undefined}\n style={backgroundImage ? `background-image: url(${backgroundImage})` : undefined}\n >\n {isLoading ? (\n
\n Please wait...\n \n
\n ) : children}\n {!disabled && ripple && (\n \n )}\n \n );\n};\n\nexport default Button;\n","import { ChangeEvent } from 'react';\nimport React, { FC, memo, useCallback } from '../../lib/teact/teact';\n\nimport buildClassName from '../../util/buildClassName';\nimport useLang from '../../hooks/useLang';\nimport renderText from '../common/helpers/renderText';\n\nimport Spinner from './Spinner';\n\nimport './Checkbox.scss';\n\ntype OwnProps = {\n id?: string;\n name?: string;\n value?: string;\n label: string;\n subLabel?: string;\n checked: boolean;\n disabled?: boolean;\n tabIndex?: number;\n round?: boolean;\n blocking?: boolean;\n isLoading?: boolean;\n withCheckedCallback?: boolean;\n onChange?: (e: ChangeEvent) => void;\n onCheck?: (isChecked: boolean) => void;\n};\n\nconst Checkbox: FC = ({\n id,\n name,\n value,\n label,\n subLabel,\n checked,\n tabIndex,\n disabled,\n round,\n blocking,\n isLoading,\n onChange,\n onCheck,\n}) => {\n const lang = useLang();\n const handleChange = useCallback((event: ChangeEvent) => {\n if (onChange) {\n onChange(event);\n }\n\n if (onCheck) {\n onCheck(event.currentTarget.checked);\n }\n }, [onChange, onCheck]);\n\n const className = buildClassName(\n 'Checkbox',\n disabled && 'disabled',\n round && 'round',\n isLoading && 'loading',\n blocking && 'blocking',\n );\n\n return (\n \n );\n};\n\nexport default memo(Checkbox);\n","import React, {\n FC, useState, useRef, useCallback,\n} from '../../lib/teact/teact';\n\nimport Menu from './Menu';\n\nimport './DropdownMenu.scss';\n\ntype OwnProps = {\n className?: string;\n trigger: FC<{ onTrigger: () => void; isOpen?: boolean }>;\n positionX?: 'left' | 'right';\n positionY?: 'top' | 'bottom';\n footer?: string;\n forceOpen?: boolean;\n onOpen?: NoneToVoidFunction;\n onClose?: NoneToVoidFunction;\n children: React.ReactNode;\n};\n\nconst DropdownMenu: FC = ({\n trigger,\n className,\n children,\n positionX = 'left',\n positionY = 'top',\n footer,\n forceOpen,\n onOpen,\n onClose,\n}) => {\n // eslint-disable-next-line no-null/no-null\n const menuRef = useRef(null);\n // eslint-disable-next-line no-null/no-null\n const dropdownRef = useRef(null);\n const [isOpen, setIsOpen] = useState(false);\n\n const toggleIsOpen = () => {\n setIsOpen(!isOpen);\n if (isOpen) {\n if (onClose) onClose();\n } else if (onOpen) onOpen();\n };\n\n const handleKeyDown = (e: React.KeyboardEvent) => {\n const menu = menuRef.current;\n\n if (!isOpen || e.keyCode !== 40 || !menu) {\n return;\n }\n\n const focusedElement = document.activeElement;\n const elementChildren = Array.from(menu.children);\n\n if (!focusedElement || elementChildren.indexOf(focusedElement) === -1) {\n (elementChildren[0] as HTMLElement).focus();\n }\n };\n\n const handleClose = useCallback(() => {\n setIsOpen(false);\n if (onClose) onClose();\n }, [onClose]);\n\n return (\n \n {trigger({ onTrigger: toggleIsOpen, isOpen })}\n\n \n {children}\n \n
\n );\n};\n\nexport default DropdownMenu;\n","import {\n ChangeEvent, FormEvent, RefObject,\n} from 'react';\nimport React, { FC, memo } from '../../lib/teact/teact';\n\nimport buildClassName from '../../util/buildClassName';\nimport useLang from '../../hooks/useLang';\n\ntype OwnProps = {\n ref?: RefObject;\n id?: string;\n className?: string;\n value?: string;\n label?: string;\n error?: string;\n success?: string;\n disabled?: boolean;\n readOnly?: boolean;\n placeholder?: string;\n autoComplete?: string;\n maxLength?: number;\n tabIndex?: number;\n inputMode?: 'text' | 'none' | 'tel' | 'url' | 'email' | 'numeric' | 'decimal' | 'search';\n onChange?: (e: ChangeEvent) => void;\n onInput?: (e: FormEvent) => void;\n onKeyPress?: (e: React.KeyboardEvent) => void;\n onKeyDown?: (e: React.KeyboardEvent) => void;\n onBlur?: (e: React.FocusEvent) => void;\n onPaste?: (e: React.ClipboardEvent) => void;\n};\n\nconst InputText: FC = ({\n ref,\n id,\n className,\n value,\n label,\n error,\n success,\n disabled,\n readOnly,\n placeholder,\n autoComplete,\n inputMode,\n maxLength,\n tabIndex,\n onChange,\n onInput,\n onKeyPress,\n onKeyDown,\n onBlur,\n onPaste,\n}) => {\n const lang = useLang();\n const labelText = error || success || label;\n const fullClassName = buildClassName(\n 'input-group',\n value && 'touched',\n error ? 'error' : success && 'success',\n disabled && 'disabled',\n readOnly && 'disabled',\n labelText && 'with-label',\n className,\n );\n\n return (\n
\n \n {labelText && (\n \n )}\n
\n );\n};\n\nexport default memo(InputText);\n","import React, { FC, useCallback } from '../../lib/teact/teact';\n\nimport buildClassName from '../../util/buildClassName';\n\nimport './Link.scss';\n\ntype OwnProps = {\n children: React.ReactNode;\n className?: string;\n isRtl?: boolean;\n onClick?: (e: React.MouseEvent) => void;\n};\n\nconst Link: FC = ({\n children, className, isRtl, onClick,\n}) => {\n const handleClick = useCallback((e: React.MouseEvent) => {\n e.preventDefault();\n onClick!(e);\n }, [onClick]);\n\n return (\n \n {children}\n \n );\n};\n\nexport default Link;\n","import React, { FC, memo } from '../../lib/teact/teact';\n\nimport Spinner from './Spinner';\nimport buildClassName from '../../util/buildClassName';\n\nimport './Loading.scss';\n\ntype OwnProps = {\n color?: 'blue' | 'white' | 'black' | 'yellow';\n backgroundColor?: 'light' | 'dark';\n onClick?: NoneToVoidFunction;\n};\n\nconst Loading: FC = ({ color = 'blue', backgroundColor, onClick }) => {\n return (\n
\n \n
\n );\n};\n\nexport default memo(Loading);\n","import { RefObject } from 'react';\nimport React, { FC, useEffect, useRef } from '../../lib/teact/teact';\n\nimport useShowTransition from '../../hooks/useShowTransition';\nimport useKeyboardListNavigation from '../../hooks/useKeyboardListNavigation';\nimport useVirtualBackdrop from '../../hooks/useVirtualBackdrop';\nimport useEffectWithPrevDeps from '../../hooks/useEffectWithPrevDeps';\nimport captureEscKeyListener from '../../util/captureEscKeyListener';\nimport buildClassName from '../../util/buildClassName';\nimport { dispatchHeavyAnimationEvent } from '../../hooks/useHeavyAnimationCheck';\nimport useHistoryBack from '../../hooks/useHistoryBack';\nimport { preventMessageInputBlurWithBubbling } from '../middle/helpers/preventMessageInputBlur';\nimport { IS_BACKDROP_BLUR_SUPPORTED, IS_COMPACT_MENU } from '../../util/environment';\n\nimport './Menu.scss';\n\ntype OwnProps = {\n ref?: RefObject;\n containerRef?: RefObject;\n isOpen: boolean;\n id?: string;\n className?: string;\n style?: string;\n bubbleStyle?: string;\n ariaLabelledBy?: string;\n transformOriginX?: number;\n transformOriginY?: number;\n positionX?: 'left' | 'right';\n positionY?: 'top' | 'bottom';\n autoClose?: boolean;\n shouldSkipTransition?: boolean;\n footer?: string;\n noCloseOnBackdrop?: boolean;\n noCompact?: boolean;\n onKeyDown?: (e: React.KeyboardEvent) => void;\n onCloseAnimationEnd?: () => void;\n onClose?: () => void;\n onMouseEnter?: (e: React.MouseEvent) => void;\n onMouseLeave?: (e: React.MouseEvent) => void;\n children: React.ReactNode;\n};\n\nconst ANIMATION_DURATION = 200;\n\nconst Menu: FC = ({\n ref,\n containerRef,\n isOpen,\n id,\n className,\n style,\n bubbleStyle,\n ariaLabelledBy,\n children,\n transformOriginX,\n transformOriginY,\n positionX = 'left',\n positionY = 'top',\n autoClose = false,\n footer,\n noCloseOnBackdrop = false,\n noCompact,\n onCloseAnimationEnd,\n onClose,\n onMouseEnter,\n onMouseLeave,\n shouldSkipTransition,\n}) => {\n // eslint-disable-next-line no-null/no-null\n let menuRef = useRef(null);\n if (ref) {\n menuRef = ref;\n }\n const backdropContainerRef = containerRef || menuRef;\n\n const {\n transitionClassNames,\n } = useShowTransition(\n isOpen,\n onCloseAnimationEnd,\n shouldSkipTransition,\n undefined,\n shouldSkipTransition,\n );\n\n useEffect(\n () => (isOpen && onClose ? captureEscKeyListener(onClose) : undefined),\n [isOpen, onClose],\n );\n\n useHistoryBack(isOpen, onClose, undefined, undefined, autoClose);\n\n useEffectWithPrevDeps(([prevIsOpen]) => {\n if (isOpen || (!isOpen && prevIsOpen === true)) {\n dispatchHeavyAnimationEvent(ANIMATION_DURATION);\n }\n }, [isOpen]);\n\n const handleKeyDown = useKeyboardListNavigation(menuRef, isOpen, autoClose ? onClose : undefined, undefined, true);\n\n useVirtualBackdrop(\n isOpen,\n backdropContainerRef,\n noCloseOnBackdrop ? undefined : onClose,\n );\n\n const bubbleClassName = buildClassName(\n 'bubble menu-container custom-scroll',\n positionY,\n positionX,\n footer && 'with-footer',\n transitionClassNames,\n );\n\n const transformOriginYStyle = transformOriginY !== undefined ? `${transformOriginY}px` : undefined;\n const transformOriginXStyle = transformOriginX !== undefined ? `${transformOriginX}px` : undefined;\n\n return (\n \n {isOpen && (\n // This only prevents click events triggering on underlying elements\n
\n )}\n \n {children}\n {footer &&
{footer}
}\n
\n
\n );\n};\n\nexport default Menu;\n","import React, { FC, useCallback } from '../../lib/teact/teact';\n\nimport buildClassName from '../../util/buildClassName';\nimport useLang from '../../hooks/useLang';\nimport { IS_COMPACT_MENU } from '../../util/environment';\n\nimport './MenuItem.scss';\n\ntype OnClickHandler = (e: React.SyntheticEvent) => void;\n\ntype OwnProps = {\n icon?: string;\n className?: string;\n children: React.ReactNode;\n onClick?: OnClickHandler;\n href?: string;\n download?: string;\n disabled?: boolean;\n destructive?: boolean;\n ariaLabel?: string;\n};\n\nconst MenuItem: FC = (props) => {\n const {\n icon,\n className,\n children,\n onClick,\n href,\n download,\n disabled,\n destructive,\n ariaLabel,\n } = props;\n\n const lang = useLang();\n const handleClick = useCallback((e: React.MouseEvent) => {\n if (disabled || !onClick) {\n e.stopPropagation();\n e.preventDefault();\n\n return;\n }\n\n onClick(e);\n }, [disabled, onClick]);\n\n const handleKeyDown = useCallback((e: React.KeyboardEvent) => {\n if (e.keyCode !== 13 && e.keyCode !== 32) {\n return;\n }\n\n if (disabled || !onClick) {\n e.stopPropagation();\n e.preventDefault();\n\n return;\n }\n\n onClick(e);\n }, [disabled, onClick]);\n\n const fullClassName = buildClassName(\n 'MenuItem',\n className,\n disabled && 'disabled',\n destructive && 'destructive',\n IS_COMPACT_MENU && 'compact',\n );\n\n const content = (\n <>\n {icon && (\n \n )}\n {children}\n \n );\n\n if (href) {\n return (\n \n {content}\n \n );\n }\n\n return (\n \n {content}\n
\n );\n};\n\nexport default MenuItem;\n","import React, {\n FC, useCallback, useMemo, useState, memo,\n} from '../../lib/teact/teact';\nimport { debounce } from '../../util/schedulers';\n\nimport './RippleEffect.scss';\n\ninterface Ripple {\n x: number;\n y: number;\n size: number;\n}\n\nconst ANIMATION_DURATION_MS = 700;\n\nconst RippleEffect: FC = () => {\n const [ripples, setRipples] = useState([]);\n\n const cleanUpDebounced = useMemo(() => {\n return debounce(() => {\n setRipples([]);\n }, ANIMATION_DURATION_MS, false);\n }, []);\n\n const handleMouseDown = useCallback((e: React.MouseEvent) => {\n if (e.button !== 0) {\n return;\n }\n\n const container = e.currentTarget as HTMLDivElement;\n const position = container.getBoundingClientRect() as DOMRect;\n\n const rippleSize = container.offsetWidth / 2;\n\n setRipples([\n ...ripples,\n {\n x: e.clientX - position.x - (rippleSize / 2),\n y: e.clientY - position.y - (rippleSize / 2),\n size: rippleSize,\n },\n ]);\n\n requestAnimationFrame(() => {\n cleanUpDebounced();\n });\n }, [ripples, cleanUpDebounced]);\n\n return (\n
\n {ripples.map(({ x, y, size }) => (\n \n ))}\n
\n );\n};\n\nexport default memo(RippleEffect);\n","import React, { FC } from '../../lib/teact/teact';\n\nimport buildClassName from '../../util/buildClassName';\n\nimport './Spinner.scss';\n\nconst Spinner: FC<{\n color?: 'blue' | 'white' | 'black' | 'green' | 'gray' | 'yellow';\n backgroundColor?: 'light' | 'dark';\n}> = ({\n color = 'blue',\n backgroundColor,\n}) => {\n return (\n
\n
\n
\n );\n};\n\nexport default Spinner;\n","export const APP_NAME = process.env.APP_NAME || 'Telegram WebZ';\nexport const APP_VERSION = process.env.APP_VERSION!;\n\nexport const DEBUG = (\n process.env.APP_ENV !== 'production' && process.env.APP_ENV !== 'perf' && process.env.APP_ENV !== 'test'\n);\nexport const DEBUG_MORE = false;\n\nexport const IS_TEST = process.env.APP_ENV === 'test';\nexport const IS_PERF = process.env.APP_ENV === 'perf';\n\nexport const DEBUG_ALERT_MSG = 'Shoot!\\nSomething went wrong, please see the error details in Dev Tools Console.';\nexport const DEBUG_GRAMJS = false;\n\nexport const PAGE_TITLE = 'Telegram';\nexport const INACTIVE_MARKER = ' [Inactive]';\n\nexport const DEBUG_PAYMENT_SMART_GLOCAL = false;\n\nexport const SESSION_USER_KEY = 'user_auth';\nexport const LEGACY_SESSION_KEY = 'GramJs:sessionId';\n\nexport const GLOBAL_STATE_CACHE_DISABLED = false;\nexport const GLOBAL_STATE_CACHE_KEY = 'tt-global-state';\nexport const GLOBAL_STATE_CACHE_USER_LIST_LIMIT = 500;\nexport const GLOBAL_STATE_CACHE_CHAT_LIST_LIMIT = 200;\nexport const GLOBAL_STATE_CACHE_CHATS_WITH_MESSAGES_LIMIT = 30;\n\nexport const MEDIA_CACHE_DISABLED = false;\nexport const MEDIA_CACHE_NAME = 'tt-media';\nexport const MEDIA_CACHE_NAME_AVATARS = 'tt-media-avatars';\nexport const MEDIA_PROGRESSIVE_CACHE_DISABLED = false;\nexport const MEDIA_PROGRESSIVE_CACHE_NAME = 'tt-media-progressive';\nexport const MEDIA_CACHE_MAX_BYTES = 512 * 1024; // 512 KB\nexport const CUSTOM_BG_CACHE_NAME = 'tt-custom-bg';\nexport const LANG_CACHE_NAME = 'tt-lang-packs-v8';\nexport const ASSET_CACHE_NAME = 'tt-assets';\nexport const AUTODOWNLOAD_FILESIZE_MB_LIMITS = [1, 5, 10, 50, 100, 500];\n\nexport const DOWNLOAD_WORKERS = 16;\nexport const UPLOAD_WORKERS = 16;\n\nconst isBigScreen = typeof window !== 'undefined' && window.innerHeight >= 900;\n\nexport const MIN_PASSWORD_LENGTH = 1;\n\nexport const MESSAGE_LIST_SLICE = isBigScreen ? 60 : 40;\nexport const MESSAGE_LIST_VIEWPORT_LIMIT = MESSAGE_LIST_SLICE * 2;\n\nexport const CHAT_HEIGHT_PX = 72;\nexport const CHAT_LIST_SLICE = isBigScreen ? 30 : 25;\nexport const CHAT_LIST_LOAD_SLICE = 100;\nexport const SHARED_MEDIA_SLICE = 42;\nexport const MESSAGE_SEARCH_SLICE = 42;\nexport const GLOBAL_SEARCH_SLICE = 20;\nexport const MEMBERS_SLICE = 30;\nexport const MEMBERS_LOAD_SLICE = 200;\nexport const PINNED_MESSAGES_LIMIT = 50;\nexport const BLOCKED_LIST_LIMIT = 100;\nexport const PROFILE_PHOTOS_LIMIT = 40;\nexport const PROFILE_SENSITIVE_AREA = 500;\nexport const COMMON_CHATS_LIMIT = 100;\nexport const GROUP_CALL_PARTICIPANTS_LIMIT = 100;\nexport const REACTION_LIST_LIMIT = 100;\n\nexport const TOP_CHAT_MESSAGES_PRELOAD_LIMIT = 20;\n\nexport const SPONSORED_MESSAGE_CACHE_MS = 300000; // 5 min\n\nexport const DEFAULT_VOLUME = 1;\nexport const DEFAULT_PLAYBACK_RATE = 1;\n\nexport const ANIMATION_LEVEL_MIN = 0;\nexport const ANIMATION_LEVEL_MED = 1;\nexport const ANIMATION_LEVEL_MAX = 2;\nexport const ANIMATION_LEVEL_DEFAULT = ANIMATION_LEVEL_MAX;\n\nexport const DEFAULT_MESSAGE_TEXT_SIZE_PX = 16;\nexport const IOS_DEFAULT_MESSAGE_TEXT_SIZE_PX = 17;\nexport const MACOS_DEFAULT_MESSAGE_TEXT_SIZE_PX = 15;\n\nexport const DRAFT_DEBOUNCE = 10000; // 10s\nexport const SEND_MESSAGE_ACTION_INTERVAL = 3000; // 3s\n\nexport const EDITABLE_INPUT_ID = 'editable-message-text';\nexport const EDITABLE_INPUT_MODAL_ID = 'editable-message-text-modal';\n\nexport const CUSTOM_APPENDIX_ATTRIBUTE = 'data-has-custom-appendix';\n\n// Screen width where Pinned Message / Audio Player in the Middle Header can be safely displayed\nexport const SAFE_SCREEN_WIDTH_FOR_STATIC_RIGHT_COLUMN = 1440; // px\n// Screen width where Pinned Message / Audio Player in the Middle Header shouldn't collapse with ChatInfo\nexport const SAFE_SCREEN_WIDTH_FOR_CHAT_INFO = 1150; // px\n\nexport const MIN_SCREEN_WIDTH_FOR_STATIC_RIGHT_COLUMN = 1275; // px\nexport const MIN_SCREEN_WIDTH_FOR_STATIC_LEFT_COLUMN = 925; // px\nexport const MOBILE_SCREEN_MAX_WIDTH = 600; // px\nexport const MOBILE_SCREEN_LANDSCAPE_MAX_WIDTH = 950; // px\nexport const MOBILE_SCREEN_LANDSCAPE_MAX_HEIGHT = 450; // px\n\nexport const LOCAL_MESSAGE_ID_BASE = 1e9;\nexport const TMP_CHAT_ID = '0';\n\nexport const ANIMATION_END_DELAY = 100;\n\nexport const FAST_SMOOTH_MAX_DISTANCE = 1500;\nexport const FAST_SMOOTH_MIN_DURATION = 250;\nexport const FAST_SMOOTH_MAX_DURATION = 600;\nexport const FAST_SMOOTH_SHORT_TRANSITION_MAX_DISTANCE = 500; // px\n\n// Average duration of message sending animation\nexport const API_UPDATE_THROTTLE = Math.round((FAST_SMOOTH_MIN_DURATION + FAST_SMOOTH_MAX_DURATION) / 2);\nexport const API_THROTTLE_RESET_UPDATES = new Set([\n 'newMessage', 'newScheduledMessage', 'deleteMessages', 'deleteScheduledMessages', 'deleteHistory',\n]);\n\nexport const STICKER_SIZE_INLINE_DESKTOP_FACTOR = 13;\nexport const STICKER_SIZE_INLINE_MOBILE_FACTOR = 11;\nexport const STICKER_SIZE_AUTH = 160;\nexport const STICKER_SIZE_AUTH_MOBILE = 120;\nexport const STICKER_SIZE_PICKER = 64;\nexport const STICKER_SIZE_GENERAL_SETTINGS = 48;\nexport const STICKER_SIZE_PICKER_HEADER = 32;\nexport const STICKER_SIZE_SEARCH = 64;\nexport const STICKER_SIZE_MODAL = 64;\nexport const STICKER_SIZE_TWO_FA = 160;\nexport const STICKER_SIZE_DISCUSSION_GROUPS = 140;\nexport const STICKER_SIZE_FOLDER_SETTINGS = 100;\nexport const STICKER_SIZE_INLINE_BOT_RESULT = 100;\nexport const STICKER_SIZE_JOIN_REQUESTS = 140;\nexport const STICKER_SIZE_INVITES = 140;\nexport const RECENT_STICKERS_LIMIT = 20;\nexport const NO_STICKER_SET_ID = 'NO_STICKER_SET';\n\nexport const BASE_EMOJI_KEYWORD_LANG = 'en';\n\nexport const MENU_TRANSITION_DURATION = 200;\nexport const SLIDE_TRANSITION_DURATION = 450;\n\nexport const VIDEO_MOV_TYPE = 'video/quicktime';\nexport const VIDEO_WEBM_TYPE = 'video/webm';\n\nexport const SUPPORTED_IMAGE_CONTENT_TYPES = new Set([\n 'image/png', 'image/gif', 'image/jpeg',\n]);\n\nexport const SUPPORTED_VIDEO_CONTENT_TYPES = new Set([\n 'video/mp4', // video/quicktime added dynamically in environment.ts\n]);\n\nexport const CONTENT_TYPES_WITH_PREVIEW = new Set([\n ...SUPPORTED_IMAGE_CONTENT_TYPES,\n ...SUPPORTED_VIDEO_CONTENT_TYPES,\n]);\n\nexport const CONTENT_NOT_SUPPORTED = 'The message is not supported on this version of Telegram.';\n\n// eslint-disable-next-line max-len\nexport const RE_LINK_TEMPLATE = '((ftp|https?):\\\\/\\\\/)?((www\\\\.)?[-a-zA-Z0-9@:%._+~#=]{1,256}\\\\.[a-zA-Z0-9()]{1,63})\\\\b([-a-zA-Z0-9()@:%_+.~#?&/=]*)';\nexport const RE_MENTION_TEMPLATE = '(@[\\\\w\\\\d_-]+)';\nexport const RE_TG_LINK = /^tg:(\\/\\/)?([?=&\\d\\w_-]+)?/gm;\nexport const RE_TME_LINK = /^(?:https?:\\/\\/)?(?:t\\.me\\/)/gm;\n\n// eslint-disable-next-line max-len\nexport const COUNTRIES_WITH_12H_TIME_FORMAT = new Set(['AU', 'BD', 'CA', 'CO', 'EG', 'HN', 'IE', 'IN', 'JO', 'MX', 'MY', 'NI', 'NZ', 'PH', 'PK', 'SA', 'SV', 'US']);\n\n// MTProto constants\nexport const SERVICE_NOTIFICATIONS_USER_ID = '777000';\nexport const REPLIES_USER_ID = '1271266957'; // TODO For Test connection ID must be equal to 708513\nexport const ALL_FOLDER_ID = 0;\nexport const ARCHIVED_FOLDER_ID = 1;\nexport const DELETED_COMMENTS_CHANNEL_ID = '-777';\nexport const MAX_MEDIA_FILES_FOR_ALBUM = 10;\nexport const MAX_ACTIVE_PINNED_CHATS = 5;\nexport const SCHEDULED_WHEN_ONLINE = 0x7FFFFFFE;\nexport const DEFAULT_LANG_CODE = 'en';\nexport const DEFAULT_LANG_PACK = 'android';\nexport const LANG_PACKS = ['android', 'ios', 'tdesktop', 'macos'] as const;\nexport const TIPS_USERNAME = 'TelegramTips';\nexport const LOCALIZED_TIPS = ['ar', 'pt-br', 'id', 'it', 'ko', 'ms', 'pl', 'es', 'tr'];\nexport const FEEDBACK_URL = 'https://bugs.telegram.org/?tag_ids=41&sort=time';\nexport const LIGHT_THEME_BG_COLOR = '#A2AF8E';\nexport const DARK_THEME_BG_COLOR = '#0F0F0F';\nexport const DARK_THEME_PATTERN_COLOR = '#0a0a0a8c';\nexport const DEFAULT_PATTERN_COLOR = 'rgba(90, 110, 70, 0.6)';\n\n// Group calls\nexport const GROUP_CALL_VOLUME_MULTIPLIER = 100;\nexport const GROUP_CALL_DEFAULT_VOLUME = 100 * GROUP_CALL_VOLUME_MULTIPLIER;\nexport const ENABLE_THUMBNAIL_VIDEO = false;\n","import { addActionHandler, getActions, getGlobal } from '../../index';\n\nimport { initApi, callApi } from '../../../api/gramjs';\n\nimport {\n LANG_CACHE_NAME,\n CUSTOM_BG_CACHE_NAME,\n MEDIA_CACHE_NAME,\n MEDIA_CACHE_NAME_AVATARS,\n MEDIA_PROGRESSIVE_CACHE_NAME,\n IS_TEST,\n} from '../../../config';\nimport { IS_MOV_SUPPORTED, IS_WEBM_SUPPORTED, PLATFORM_ENV } from '../../../util/environment';\nimport { unsubscribe } from '../../../util/notifications';\nimport * as cacheApi from '../../../util/cacheApi';\nimport { updateAppBadge } from '../../../util/appBadge';\nimport {\n storeSession,\n loadStoredSession,\n clearStoredSession,\n importLegacySession,\n clearLegacySessions,\n} from '../../../util/sessions';\nimport { forceWebsync } from '../../../util/websync';\n\naddActionHandler('initApi', async (global, actions) => {\n if (!IS_TEST) {\n await importLegacySession();\n void clearLegacySessions();\n }\n\n void initApi(actions.apiUpdate, {\n userAgent: navigator.userAgent,\n platform: PLATFORM_ENV,\n sessionData: loadStoredSession(),\n isTest: window.location.search.includes('test'),\n isMovSupported: IS_MOV_SUPPORTED,\n isWebmSupported: IS_WEBM_SUPPORTED,\n });\n});\n\naddActionHandler('setAuthPhoneNumber', (global, actions, payload) => {\n const { phoneNumber } = payload!;\n\n void callApi('provideAuthPhoneNumber', phoneNumber.replace(/[^\\d]/g, ''));\n\n return {\n ...global,\n authIsLoading: true,\n authError: undefined,\n };\n});\n\naddActionHandler('setAuthCode', (global, actions, payload) => {\n const { code } = payload!;\n\n void callApi('provideAuthCode', code);\n\n return {\n ...global,\n authIsLoading: true,\n authError: undefined,\n };\n});\n\naddActionHandler('setAuthPassword', (global, actions, payload) => {\n const { password } = payload!;\n\n void callApi('provideAuthPassword', password);\n\n return {\n ...global,\n authIsLoading: true,\n authError: undefined,\n };\n});\n\naddActionHandler('uploadProfilePhoto', (global, actions, payload) => {\n const { file } = payload!;\n\n void callApi('uploadProfilePhoto', file);\n});\n\naddActionHandler('signUp', (global, actions, payload) => {\n const { firstName, lastName } = payload!;\n\n void callApi('provideAuthRegistration', { firstName, lastName });\n\n return {\n ...global,\n authIsLoading: true,\n authError: undefined,\n };\n});\n\naddActionHandler('returnToAuthPhoneNumber', (global) => {\n void callApi('restartAuth');\n\n return {\n ...global,\n authError: undefined,\n };\n});\n\naddActionHandler('goToAuthQrCode', (global) => {\n void callApi('restartAuthWithQr');\n\n return {\n ...global,\n authIsLoadingQrCode: true,\n authError: undefined,\n };\n});\n\naddActionHandler('saveSession', (global, actions, payload) => {\n const { sessionData } = payload;\n\n if (sessionData) {\n storeSession(payload.sessionData, global.currentUserId);\n } else {\n clearStoredSession();\n }\n});\n\naddActionHandler('signOut', async (_global, _actions, payload) => {\n try {\n await unsubscribe();\n await callApi('destroy');\n await forceWebsync(false);\n } catch (err) {\n // Do nothing\n }\n\n getActions().reset();\n\n if (payload?.forceInitApi) {\n getActions().initApi();\n }\n});\n\naddActionHandler('reset', () => {\n clearStoredSession();\n\n void cacheApi.clear(MEDIA_CACHE_NAME);\n void cacheApi.clear(MEDIA_CACHE_NAME_AVATARS);\n void cacheApi.clear(MEDIA_PROGRESSIVE_CACHE_NAME);\n void cacheApi.clear(CUSTOM_BG_CACHE_NAME);\n\n const langCachePrefix = LANG_CACHE_NAME.replace(/\\d+$/, '');\n const langCacheVersion = (LANG_CACHE_NAME.match(/\\d+$/) || [0])[0];\n for (let i = 0; i < langCacheVersion; i++) {\n void cacheApi.clear(`${langCachePrefix}${i === 0 ? '' : i}`);\n }\n\n void clearLegacySessions();\n\n updateAppBadge(0);\n\n getActions().init();\n});\n\naddActionHandler('disconnect', () => {\n void callApi('disconnect');\n});\n\naddActionHandler('loadNearestCountry', async (global) => {\n if (global.connectionState !== 'connectionStateReady') {\n return undefined;\n }\n\n const authNearestCountry = await callApi('fetchNearestCountry');\n\n return {\n ...getGlobal(),\n authNearestCountry,\n };\n});\n\naddActionHandler('setDeviceToken', (global, actions, deviceToken) => {\n return {\n ...global,\n push: {\n deviceToken,\n subscribedAt: Date.now(),\n },\n };\n});\n\naddActionHandler('deleteDeviceToken', (global) => {\n return {\n ...global,\n push: undefined,\n };\n});\n","import { addActionHandler, getGlobal, setGlobal } from '../../index';\n\nimport { GlobalState } from '../../types';\nimport {\n ApiPrivacyKey, PrivacyVisibility, ProfileEditProgress, InputPrivacyRules, InputPrivacyContact,\n UPLOADING_WALLPAPER_SLUG,\n} from '../../../types';\n\nimport { COUNTRIES_WITH_12H_TIME_FORMAT } from '../../../config';\nimport { callApi } from '../../../api/gramjs';\nimport { buildCollectionByKey } from '../../../util/iteratees';\nimport { subscribe, unsubscribe } from '../../../util/notifications';\nimport { setTimeFormat } from '../../../util/langProvider';\nimport { selectUser } from '../../selectors';\nimport {\n addUsers, addBlockedContact, updateChats, updateUser, removeBlockedContact, replaceSettings, updateNotifySettings,\n addNotifyExceptions,\n} from '../../reducers';\nimport { isUserId } from '../../helpers';\n\naddActionHandler('updateProfile', async (global, actions, payload) => {\n const {\n photo, firstName, lastName, bio: about, username,\n } = payload!;\n\n const { currentUserId } = global;\n if (!currentUserId) {\n return undefined;\n }\n\n setGlobal({\n ...getGlobal(),\n profileEdit: {\n progress: ProfileEditProgress.InProgress,\n },\n });\n\n if (photo) {\n await callApi('updateProfilePhoto', photo);\n }\n\n if (firstName || lastName || about) {\n const result = await callApi('updateProfile', { firstName, lastName, about });\n if (result) {\n global = getGlobal();\n const currentUser = currentUserId && selectUser(global, currentUserId);\n\n if (currentUser) {\n setGlobal(updateUser(\n global,\n currentUser.id,\n {\n firstName,\n lastName,\n fullInfo: {\n ...currentUser.fullInfo,\n bio: about,\n },\n },\n ));\n }\n }\n }\n\n if (username) {\n const result = await callApi('updateUsername', username);\n if (result && currentUserId) {\n setGlobal(updateUser(getGlobal(), currentUserId, { username }));\n }\n }\n\n return {\n ...getGlobal(),\n profileEdit: {\n progress: ProfileEditProgress.Complete,\n },\n };\n});\n\naddActionHandler('checkUsername', async (global, actions, payload) => {\n const { username } = payload!;\n\n // No need to check the username if profile update is already in progress\n if (global.profileEdit && global.profileEdit.progress === ProfileEditProgress.InProgress) {\n return undefined;\n }\n\n setGlobal({\n ...global,\n profileEdit: {\n progress: global.profileEdit ? global.profileEdit.progress : ProfileEditProgress.Idle,\n isUsernameAvailable: undefined,\n },\n });\n\n const isUsernameAvailable = await callApi('checkUsername', username);\n\n global = getGlobal();\n return {\n ...global,\n profileEdit: {\n ...global.profileEdit!,\n isUsernameAvailable,\n },\n };\n});\n\naddActionHandler('loadWallpapers', async () => {\n const result = await callApi('fetchWallpapers');\n if (!result) {\n return undefined;\n }\n\n const global = getGlobal();\n return {\n ...global,\n settings: {\n ...global.settings,\n loadedWallpapers: result.wallpapers,\n },\n };\n});\n\naddActionHandler('uploadWallpaper', async (global, actions, payload) => {\n const file = payload;\n const previewBlobUrl = URL.createObjectURL(file);\n\n setGlobal({\n ...global,\n settings: {\n ...global.settings,\n loadedWallpapers: [\n {\n slug: UPLOADING_WALLPAPER_SLUG,\n document: {\n fileName: '',\n size: file.size,\n mimeType: file.type,\n previewBlobUrl,\n },\n },\n ...(global.settings.loadedWallpapers || []),\n ],\n },\n });\n\n const result = await callApi('uploadWallpaper', file);\n if (!result) {\n return undefined;\n }\n\n const { wallpaper } = result;\n\n global = getGlobal();\n if (!global.settings.loadedWallpapers) {\n return undefined;\n }\n\n const firstWallpaper = global.settings.loadedWallpapers[0];\n if (!firstWallpaper || firstWallpaper.slug !== UPLOADING_WALLPAPER_SLUG) {\n return undefined;\n }\n\n const withLocalMedia = {\n ...wallpaper,\n document: {\n ...wallpaper.document,\n previewBlobUrl,\n },\n };\n\n return {\n ...global,\n settings: {\n ...global.settings,\n loadedWallpapers: [\n withLocalMedia,\n ...global.settings.loadedWallpapers.slice(1),\n ],\n },\n };\n});\n\naddActionHandler('loadBlockedContacts', async (global) => {\n const result = await callApi('fetchBlockedContacts');\n if (!result) {\n return undefined;\n }\n\n global = getGlobal();\n\n if (result.users?.length) {\n global = addUsers(global, buildCollectionByKey(result.users, 'id'));\n }\n if (result.chats?.length) {\n global = updateChats(global, buildCollectionByKey(result.chats, 'id'));\n }\n\n global = {\n ...global,\n blocked: {\n ...global.blocked,\n ids: [...(global.blocked.ids || []), ...result.blockedIds],\n totalCount: result.totalCount,\n },\n };\n\n return global;\n});\n\naddActionHandler('blockContact', async (global, actions, payload) => {\n const { contactId, accessHash } = payload!;\n\n const result = await callApi('blockContact', contactId, accessHash);\n if (!result) {\n return undefined;\n }\n\n return addBlockedContact(getGlobal(), contactId);\n});\n\naddActionHandler('unblockContact', async (global, actions, payload) => {\n const { contactId } = payload!;\n let accessHash: string | undefined;\n const isPrivate = isUserId(contactId);\n\n if (isPrivate) {\n const user = selectUser(global, contactId);\n if (!user) {\n return undefined;\n }\n\n accessHash = user.accessHash;\n }\n\n const result = await callApi('unblockContact', contactId, accessHash);\n if (!result) {\n return undefined;\n }\n\n return removeBlockedContact(getGlobal(), contactId);\n});\n\naddActionHandler('loadAuthorizations', async () => {\n const result = await callApi('fetchAuthorizations');\n if (!result) {\n return undefined;\n }\n\n return {\n ...getGlobal(),\n activeSessions: result,\n };\n});\n\naddActionHandler('terminateAuthorization', async (global, actions, payload) => {\n const { hash } = payload!;\n\n const result = await callApi('terminateAuthorization', hash);\n if (!result) {\n return undefined;\n }\n\n global = getGlobal();\n\n return {\n ...global,\n activeSessions: global.activeSessions.filter((session) => session.hash !== hash),\n };\n});\n\naddActionHandler('terminateAllAuthorizations', async (global) => {\n const result = await callApi('terminateAllAuthorizations');\n if (!result) {\n return undefined;\n }\n\n global = getGlobal();\n\n return {\n ...global,\n activeSessions: global.activeSessions.filter((session) => session.isCurrent),\n };\n});\n\naddActionHandler('loadNotificationExceptions', async (global) => {\n const { serverTimeOffset } = global;\n\n const result = await callApi('fetchNotificationExceptions', { serverTimeOffset });\n if (!result) {\n return undefined;\n }\n\n return addNotifyExceptions(getGlobal(), result);\n});\n\naddActionHandler('loadNotificationSettings', async (global) => {\n const { serverTimeOffset } = global;\n const result = await callApi('fetchNotificationSettings', {\n serverTimeOffset,\n });\n if (!result) {\n return undefined;\n }\n\n return replaceSettings(getGlobal(), result);\n});\n\naddActionHandler('updateNotificationSettings', async (global, actions, payload) => {\n const { peerType, isSilent, shouldShowPreviews } = payload!;\n\n const result = await callApi('updateNotificationSettings', peerType, { isSilent, shouldShowPreviews });\n if (!result) {\n return undefined;\n }\n\n return updateNotifySettings(getGlobal(), peerType, isSilent, shouldShowPreviews);\n});\n\naddActionHandler('updateWebNotificationSettings', (global, actions, payload) => {\n setGlobal(replaceSettings(global, payload));\n\n const { hasPushNotifications, hasWebNotifications } = global.settings.byKey;\n if (hasWebNotifications && hasPushNotifications) {\n void subscribe();\n } else {\n void unsubscribe();\n }\n});\n\naddActionHandler('updateContactSignUpNotification', async (global, actions, payload) => {\n const { isSilent } = payload!;\n\n const result = await callApi('updateContactSignUpNotification', isSilent);\n if (!result) {\n return undefined;\n }\n\n return replaceSettings(getGlobal(), { hasContactJoinedNotifications: !isSilent });\n});\n\naddActionHandler('loadLanguages', async () => {\n const result = await callApi('fetchLanguages');\n if (!result) {\n return undefined;\n }\n\n return replaceSettings(getGlobal(), { languages: result });\n});\n\naddActionHandler('loadPrivacySettings', async (global) => {\n const [\n phoneNumberSettings, lastSeenSettings, profilePhotoSettings, forwardsSettings, chatInviteSettings,\n ] = await Promise.all([\n callApi('fetchPrivacySettings', 'phoneNumber'),\n callApi('fetchPrivacySettings', 'lastSeen'),\n callApi('fetchPrivacySettings', 'profilePhoto'),\n callApi('fetchPrivacySettings', 'forwards'),\n callApi('fetchPrivacySettings', 'chatInvite'),\n ]);\n\n if (\n !phoneNumberSettings || !lastSeenSettings || !profilePhotoSettings || !forwardsSettings || !chatInviteSettings\n ) {\n return undefined;\n }\n\n global = getGlobal();\n\n global.settings.privacy.phoneNumber = phoneNumberSettings;\n global.settings.privacy.lastSeen = lastSeenSettings;\n global.settings.privacy.profilePhoto = profilePhotoSettings;\n global.settings.privacy.forwards = forwardsSettings;\n global.settings.privacy.chatInvite = chatInviteSettings;\n\n return global;\n});\n\naddActionHandler('setPrivacyVisibility', async (global, actions, payload) => {\n const { privacyKey, visibility } = payload!;\n\n const {\n privacy: { [privacyKey as ApiPrivacyKey]: settings },\n } = global.settings;\n\n if (!settings) {\n return undefined;\n }\n\n const rules = buildInputPrivacyRules(global, {\n visibility,\n allowedIds: [...settings.allowUserIds, ...settings.allowChatIds],\n deniedIds: [...settings.blockUserIds, ...settings.blockChatIds],\n });\n\n const result = await callApi('setPrivacySettings', privacyKey, rules);\n if (!result) {\n return undefined;\n }\n\n global = getGlobal();\n\n return {\n ...global,\n settings: {\n ...global.settings,\n privacy: {\n ...global.settings.privacy,\n [privacyKey]: result,\n },\n },\n };\n});\n\naddActionHandler('setPrivacySettings', async (global, actions, payload) => {\n const { privacyKey, isAllowList, contactsIds } = payload!;\n const {\n privacy: { [privacyKey as ApiPrivacyKey]: settings },\n } = global.settings;\n\n if (!settings) {\n return undefined;\n }\n\n const rules = buildInputPrivacyRules(global, {\n visibility: settings.visibility,\n allowedIds: isAllowList ? contactsIds : [...settings.allowUserIds, ...settings.allowChatIds],\n deniedIds: !isAllowList ? contactsIds : [...settings.blockUserIds, ...settings.blockChatIds],\n });\n\n const result = await callApi('setPrivacySettings', privacyKey, rules);\n if (!result) {\n return undefined;\n }\n\n global = getGlobal();\n\n return {\n ...global,\n settings: {\n ...global.settings,\n privacy: {\n ...global.settings.privacy,\n [privacyKey]: result,\n },\n },\n };\n});\n\nfunction buildInputPrivacyRules(global: GlobalState, {\n visibility,\n allowedIds,\n deniedIds,\n}: {\n visibility: PrivacyVisibility;\n allowedIds: string[];\n deniedIds: string[];\n}): InputPrivacyRules {\n const {\n users: { byId: usersById },\n chats: { byId: chatsById },\n } = global;\n\n const rules: InputPrivacyRules = {\n visibility,\n };\n let users: InputPrivacyContact[];\n let chats: InputPrivacyContact[];\n\n const collectUsers = (userId: string) => {\n if (!isUserId(userId)) {\n return undefined;\n }\n const { id, accessHash } = usersById[userId] || {};\n if (!id) {\n return undefined;\n }\n\n return { id, accessHash };\n };\n\n const collectChats = (userId: string) => {\n if (isUserId(userId)) {\n return undefined;\n }\n const chat = chatsById[userId];\n\n return chat ? { id: chat.id } : undefined;\n };\n\n if (visibility === 'contacts' || visibility === 'nobody') {\n users = allowedIds.map(collectUsers).filter(Boolean) as InputPrivacyContact[];\n chats = allowedIds.map(collectChats).filter(Boolean) as InputPrivacyContact[];\n\n if (users.length > 0) {\n rules.allowedUsers = users;\n }\n if (chats.length > 0) {\n rules.allowedChats = chats;\n }\n }\n\n if (visibility === 'everybody' || visibility === 'contacts') {\n users = deniedIds.map(collectUsers).filter(Boolean) as InputPrivacyContact[];\n chats = deniedIds.map(collectChats).filter(Boolean) as InputPrivacyContact[];\n\n if (users.length > 0) {\n rules.blockedUsers = users;\n }\n if (chats.length > 0) {\n rules.blockedChats = chats;\n }\n }\n\n return rules;\n}\n\naddActionHandler('updateIsOnline', (global, actions, payload) => {\n callApi('updateIsOnline', payload);\n});\n\naddActionHandler('loadContentSettings', async () => {\n const result = await callApi('fetchContentSettings');\n if (!result) return undefined;\n\n return replaceSettings(getGlobal(), result);\n});\n\naddActionHandler('updateContentSettings', async (global, actions, payload) => {\n setGlobal(replaceSettings(getGlobal(), { isSensitiveEnabled: payload }));\n\n const result = await callApi('updateContentSettings', payload);\n if (!result) {\n return replaceSettings(getGlobal(), { isSensitiveEnabled: !payload });\n }\n\n return undefined;\n});\n\naddActionHandler('loadCountryList', async (global, actions, payload = {}) => {\n let { langCode } = payload;\n if (!langCode) langCode = global.settings.byKey.language;\n\n const countryList = await callApi('fetchCountryList', { langCode });\n if (!countryList) return undefined;\n\n return {\n ...getGlobal(),\n countryList,\n };\n});\n\naddActionHandler('ensureTimeFormat', async (global, actions) => {\n if (global.authNearestCountry) {\n const timeFormat = COUNTRIES_WITH_12H_TIME_FORMAT.has(global.authNearestCountry.toUpperCase()) ? '12h' : '24h';\n actions.setSettingOption({ timeFormat });\n setTimeFormat(timeFormat);\n }\n\n if (global.settings.byKey.wasTimeFormatSetManually) {\n return;\n }\n\n const nearestCountryCode = await callApi('fetchNearestCountry');\n if (nearestCountryCode) {\n const timeFormat = COUNTRIES_WITH_12H_TIME_FORMAT.has(nearestCountryCode.toUpperCase()) ? '12h' : '24h';\n actions.setSettingOption({ timeFormat });\n setTimeFormat(timeFormat);\n }\n});\n\naddActionHandler('loadAppConfig', async () => {\n const appConfig = await callApi('fetchAppConfig');\n if (!appConfig) return undefined;\n\n return {\n ...getGlobal(),\n appConfig,\n };\n});\n","import {\n addActionHandler, getActions, getGlobal, setGlobal,\n} from '../../index';\n\nimport { GlobalState } from '../../types';\n\nimport {\n ApiUpdateAuthorizationState,\n ApiUpdateAuthorizationError,\n ApiUpdateConnectionState,\n ApiUpdateSession,\n ApiUpdateCurrentUser, ApiUpdateServerTimeOffset,\n} from '../../../api/types';\nimport { DEBUG, SESSION_USER_KEY } from '../../../config';\nimport { subscribe } from '../../../util/notifications';\nimport { updateUser } from '../../reducers';\nimport { setLanguage } from '../../../util/langProvider';\nimport { selectNotifySettings } from '../../selectors';\nimport { forceWebsync } from '../../../util/websync';\nimport { getShippingError } from '../../../util/getReadableErrorText';\n\naddActionHandler('apiUpdate', (global, actions, update) => {\n if (DEBUG) {\n if (update['@type'] !== 'updateUserStatus' && update['@type'] !== 'updateServerTimeOffset') {\n // eslint-disable-next-line no-console\n console.log('[GramJs] UPDATE', update['@type'], { update });\n }\n }\n\n switch (update['@type']) {\n case 'updateApiReady':\n onUpdateApiReady(global);\n break;\n\n case 'updateAuthorizationState':\n onUpdateAuthorizationState(update);\n break;\n\n case 'updateAuthorizationError':\n onUpdateAuthorizationError(update);\n break;\n\n case 'updateConnectionState':\n onUpdateConnectionState(update);\n break;\n\n case 'updateSession':\n onUpdateSession(update);\n break;\n\n case 'updateServerTimeOffset':\n onUpdateServerTimeOffset(update);\n break;\n\n case 'updateCurrentUser':\n onUpdateCurrentUser(update);\n break;\n\n case 'error': {\n if (update.error.message === 'SESSION_REVOKED') {\n actions.signOut();\n }\n\n const paymentShippingError = getShippingError(update.error);\n if (paymentShippingError) {\n actions.addPaymentError({ error: paymentShippingError });\n } else if (actions.showDialog) {\n actions.showDialog({ data: update.error });\n }\n\n break;\n }\n }\n});\n\nfunction onUpdateApiReady(global: GlobalState) {\n const { hasWebNotifications, hasPushNotifications } = selectNotifySettings(global);\n if (hasWebNotifications && hasPushNotifications) {\n void subscribe();\n }\n void setLanguage(global.settings.byKey.language);\n}\n\nfunction onUpdateAuthorizationState(update: ApiUpdateAuthorizationState) {\n let global = getGlobal();\n\n const wasAuthReady = global.authState === 'authorizationStateReady';\n const authState = update.authorizationState;\n\n setGlobal({\n ...global,\n authState,\n authIsLoading: false,\n });\n\n global = getGlobal();\n\n switch (authState) {\n case 'authorizationStateLoggingOut':\n void forceWebsync(false);\n\n setGlobal({\n ...global,\n isLoggingOut: true,\n });\n break;\n case 'authorizationStateWaitCode':\n setGlobal({\n ...global,\n authIsCodeViaApp: update.isCodeViaApp,\n });\n break;\n case 'authorizationStateWaitPassword':\n setGlobal({\n ...global,\n authHint: update.hint,\n });\n break;\n case 'authorizationStateWaitQrCode':\n setGlobal({\n ...global,\n authIsLoadingQrCode: false,\n authQrCode: update.qrCode,\n });\n break;\n case 'authorizationStateReady': {\n if (wasAuthReady) {\n break;\n }\n\n void forceWebsync(true);\n\n setGlobal({\n ...global,\n isLoggingOut: false,\n });\n\n break;\n }\n }\n}\n\nfunction onUpdateAuthorizationError(update: ApiUpdateAuthorizationError) {\n setGlobal({\n ...getGlobal(),\n authError: update.message,\n });\n}\n\nfunction onUpdateConnectionState(update: ApiUpdateConnectionState) {\n const { connectionState } = update;\n const global = getGlobal();\n\n if (connectionState === global.connectionState) {\n return;\n }\n\n setGlobal({\n ...global,\n connectionState,\n });\n\n if (connectionState === 'connectionStateBroken') {\n // When mounting Auth `initApi` will be called from an effect. Otherwise, we force it here.\n const isOnAuth = !global.authState || [\n 'authorizationStateWaitPhoneNumber',\n 'authorizationStateWaitCode',\n 'authorizationStateWaitPassword',\n 'authorizationStateWaitRegistration',\n 'authorizationStateWaitQrCode',\n ].includes(global.authState);\n\n getActions().signOut({ forceInitApi: isOnAuth });\n }\n}\n\nfunction onUpdateSession(update: ApiUpdateSession) {\n const { sessionData } = update;\n const { authRememberMe, authState } = getGlobal();\n const isEmpty = !sessionData || !sessionData.mainDcId;\n\n if (!authRememberMe || authState !== 'authorizationStateReady' || isEmpty) {\n return;\n }\n\n getActions().saveSession({ sessionData });\n}\n\nfunction onUpdateServerTimeOffset(update: ApiUpdateServerTimeOffset) {\n const global = getGlobal();\n\n if (global.serverTimeOffset === update.serverTimeOffset) {\n return;\n }\n\n setGlobal({\n ...global,\n serverTimeOffset: update.serverTimeOffset,\n });\n}\n\nfunction onUpdateCurrentUser(update: ApiUpdateCurrentUser) {\n const { currentUser } = update;\n\n setGlobal({\n ...updateUser(getGlobal(), currentUser.id, currentUser),\n currentUserId: currentUser.id,\n });\n\n updateSessionUserId(currentUser.id);\n}\n\nfunction updateSessionUserId(currentUserId: string) {\n const sessionUserAuth = localStorage.getItem(SESSION_USER_KEY);\n if (!sessionUserAuth) return;\n\n const userAuth = JSON.parse(sessionUserAuth);\n userAuth.id = currentUserId;\n\n localStorage.setItem(SESSION_USER_KEY, JSON.stringify(userAuth));\n}\n","import { addActionHandler, getGlobal, setGlobal } from '../../index';\n\nimport { ANIMATION_LEVEL_MAX } from '../../../config';\nimport {\n IS_ANDROID, IS_IOS, IS_MAC_OS, IS_SAFARI, IS_TOUCH_ENV,\n} from '../../../util/environment';\nimport { setLanguage } from '../../../util/langProvider';\nimport switchTheme from '../../../util/switchTheme';\nimport { selectTheme } from '../../selectors';\nimport { startWebsync } from '../../../util/websync';\nimport { ensurePermanentWebVersion } from '../../../util/permanentWebVersion';\n\nconst HISTORY_ANIMATION_DURATION = 450;\n\nsubscribeToSystemThemeChange();\n\naddActionHandler('init', (global) => {\n const { animationLevel, messageTextSize, language } = global.settings.byKey;\n const theme = selectTheme(global);\n\n void setLanguage(language, undefined, true);\n\n document.documentElement.style.setProperty(\n '--composer-text-size', `${Math.max(messageTextSize, IS_IOS ? 16 : 15)}px`,\n );\n document.documentElement.style.setProperty('--message-meta-height', `${Math.floor(messageTextSize * 1.3125)}px`);\n document.documentElement.style.setProperty('--message-text-size', `${messageTextSize}px`);\n document.documentElement.setAttribute('data-message-text-size', messageTextSize.toString());\n document.body.classList.add('initial');\n document.body.classList.add(`animation-level-${animationLevel}`);\n document.body.classList.add(IS_TOUCH_ENV ? 'is-touch-env' : 'is-pointer-env');\n\n switchTheme(theme, animationLevel === ANIMATION_LEVEL_MAX);\n\n ensurePermanentWebVersion();\n startWebsync();\n\n if (IS_IOS) {\n document.body.classList.add('is-ios');\n } else if (IS_ANDROID) {\n document.body.classList.add('is-android');\n } else if (IS_MAC_OS) {\n document.body.classList.add('is-macos');\n }\n if (IS_SAFARI) {\n document.body.classList.add('is-safari');\n }\n});\n\naddActionHandler('setIsUiReady', (global, actions, payload) => {\n const { uiReadyState } = payload!;\n\n if (uiReadyState === 2) {\n document.body.classList.remove('initial');\n }\n\n return {\n ...global,\n uiReadyState,\n };\n});\n\naddActionHandler('setAuthPhoneNumber', (global, actions, payload) => {\n const { phoneNumber } = payload!;\n\n return {\n ...global,\n authPhoneNumber: phoneNumber,\n };\n});\n\naddActionHandler('setAuthRememberMe', (global, actions, payload) => {\n return {\n ...global,\n authRememberMe: Boolean(payload),\n };\n});\n\naddActionHandler('clearAuthError', (global) => {\n return {\n ...global,\n authError: undefined,\n };\n});\n\naddActionHandler('disableHistoryAnimations', () => {\n setTimeout(() => {\n setGlobal({\n ...getGlobal(),\n shouldSkipHistoryAnimations: false,\n });\n document.body.classList.remove('no-animate');\n }, HISTORY_ANIMATION_DURATION);\n\n setGlobal({\n ...getGlobal(),\n shouldSkipHistoryAnimations: true,\n }, { forceSyncOnIOs: true });\n});\n\nfunction subscribeToSystemThemeChange() {\n function handleSystemThemeChange() {\n const currentThemeMatch = document.documentElement.className.match(/theme-(\\w+)/);\n const currentTheme = currentThemeMatch ? currentThemeMatch[1] : 'light';\n const global = getGlobal();\n const nextTheme = selectTheme(global);\n const { animationLevel } = global.settings.byKey;\n\n if (nextTheme !== currentTheme) {\n switchTheme(nextTheme, animationLevel === ANIMATION_LEVEL_MAX);\n // Force-update component containers\n setGlobal({ ...global });\n }\n }\n\n const mql = window.matchMedia('(prefers-color-scheme: dark)');\n if (typeof mql.addEventListener === 'function') {\n mql.addEventListener('change', handleSystemThemeChange);\n } else if (typeof mql.addListener === 'function') {\n mql.addListener(handleSystemThemeChange);\n }\n}\n","import { addActionHandler } from '../../index';\nimport { ISettings, IThemeSettings, ThemeKey } from '../../../types';\nimport { replaceSettings, replaceThemeSettings } from '../../reducers';\n\naddActionHandler('setSettingOption', (global, actions, payload?: Partial) => {\n return replaceSettings(global, payload);\n});\n\naddActionHandler('setThemeSettings', (global, actions, payload: { theme: ThemeKey } & Partial) => {\n const { theme, ...settings } = payload;\n\n return replaceThemeSettings(global, theme, settings);\n});\n","import {\n ApiChat,\n ApiUser,\n ApiChatBannedRights,\n ApiChatAdminRights,\n ApiChatFolder,\n MAIN_THREAD_ID,\n} from '../../api/types';\n\nimport { NotifyException, NotifySettings } from '../../types';\nimport { LangFn } from '../../hooks/useLang';\n\nimport { ARCHIVED_FOLDER_ID, REPLIES_USER_ID } from '../../config';\nimport { orderBy } from '../../util/iteratees';\nimport { getUserFirstOrLastName } from './users';\nimport { formatDateToString, formatTime } from '../../util/dateFormat';\nimport { prepareSearchWordsForNeedle } from '../../util/searchWords';\n\nconst FOREVER_BANNED_DATE = Date.now() / 1000 + 31622400; // 366 days\n\nconst VERIFIED_PRIORITY_BASE = 3e9;\nconst PINNED_PRIORITY_BASE = 3e8;\n\nexport function isUserId(entityId: string) {\n // Workaround for old-fashioned IDs stored locally\n if (typeof entityId === 'number') {\n return entityId > 0;\n }\n\n return !entityId.startsWith('-');\n}\n\nexport function isChatGroup(chat: ApiChat) {\n return isChatBasicGroup(chat) || isChatSuperGroup(chat);\n}\n\nexport function isChatBasicGroup(chat: ApiChat) {\n return chat.type === 'chatTypeBasicGroup';\n}\n\nexport function isChatSuperGroup(chat: ApiChat) {\n return chat.type === 'chatTypeSuperGroup';\n}\n\nexport function isChatChannel(chat: ApiChat) {\n return chat.type === 'chatTypeChannel';\n}\n\nexport function isCommonBoxChat(chat: ApiChat) {\n return chat.type === 'chatTypePrivate' || chat.type === 'chatTypeBasicGroup';\n}\n\nexport function isChatWithRepliesBot(chatId: string) {\n return chatId === REPLIES_USER_ID;\n}\n\nexport function getChatTypeString(chat: ApiChat) {\n switch (chat.type) {\n case 'chatTypePrivate':\n return 'PrivateChat';\n case 'chatTypeBasicGroup':\n case 'chatTypeSuperGroup':\n return 'AccDescrGroup';\n case 'chatTypeChannel':\n return 'AccDescrChannel';\n default:\n return 'Chat';\n }\n}\n\nexport function getPrivateChatUserId(chat: ApiChat) {\n if (chat.type !== 'chatTypePrivate' && chat.type !== 'chatTypeSecret') {\n return undefined;\n }\n return chat.id;\n}\n\n// TODO Get rid of `user`\nexport function getChatTitle(lang: LangFn, chat: ApiChat, user?: ApiUser, isSelf = false) {\n if (isSelf || (user && chat.id === user.id && user.isSelf)) {\n return lang('SavedMessages');\n }\n return chat.title || lang('HiddenName');\n}\n\nexport function getChatDescription(chat: ApiChat) {\n if (!chat.fullInfo) {\n return undefined;\n }\n return chat.fullInfo.about;\n}\n\nexport function getChatLink(chat: ApiChat) {\n const { username } = chat;\n if (username) {\n return `https://t.me/${username}`;\n }\n\n const { inviteLink } = chat.fullInfo || {};\n\n return inviteLink;\n}\n\nexport function getChatAvatarHash(\n owner: ApiChat | ApiUser,\n size: 'normal' | 'big' = 'normal',\n) {\n if (!owner.avatarHash) {\n return undefined;\n }\n\n switch (size) {\n case 'big':\n return `profile${owner.id}?${owner.avatarHash}`;\n default:\n return `avatar${owner.id}?${owner.avatarHash}`;\n }\n}\n\nexport function isChatSummaryOnly(chat: ApiChat) {\n return !chat.lastMessage;\n}\n\nexport function isChatAdmin(chat: ApiChat) {\n return Boolean(chat.adminRights);\n}\n\nexport function getHasAdminRight(chat: ApiChat, key: keyof ApiChatAdminRights) {\n return chat.adminRights ? chat.adminRights[key] : false;\n}\n\nexport function isUserRightBanned(chat: ApiChat, key: keyof ApiChatBannedRights) {\n return Boolean(\n (chat.currentUserBannedRights?.[key])\n || (chat.defaultBannedRights?.[key]),\n );\n}\n\nexport function getCanPostInChat(chat: ApiChat, threadId: number) {\n if (threadId !== MAIN_THREAD_ID) {\n return true;\n }\n\n if (chat.isRestricted || chat.migratedTo || chat.isNotJoined || isChatWithRepliesBot(chat.id)) {\n return false;\n }\n\n if (chat.isCreator) {\n return true;\n }\n\n if (isUserId(chat.id)) {\n return true;\n }\n\n if (isChatChannel(chat)) {\n return getHasAdminRight(chat, 'postMessages');\n }\n\n return isChatAdmin(chat) || !isUserRightBanned(chat, 'sendMessages');\n}\n\nexport interface IAllowedAttachmentOptions {\n canAttachMedia: boolean;\n canAttachPolls: boolean;\n canSendStickers: boolean;\n canSendGifs: boolean;\n canAttachEmbedLinks: boolean;\n}\n\nexport function getAllowedAttachmentOptions(chat?: ApiChat, isChatWithBot = false): IAllowedAttachmentOptions {\n if (!chat) {\n return {\n canAttachMedia: false,\n canAttachPolls: false,\n canSendStickers: false,\n canSendGifs: false,\n canAttachEmbedLinks: false,\n };\n }\n\n const isAdmin = isChatAdmin(chat);\n\n return {\n canAttachMedia: isAdmin || !isUserRightBanned(chat, 'sendMedia'),\n canAttachPolls: (isAdmin || !isUserRightBanned(chat, 'sendPolls')) && (!isUserId(chat.id) || isChatWithBot),\n canSendStickers: isAdmin || !isUserRightBanned(chat, 'sendStickers'),\n canSendGifs: isAdmin || !isUserRightBanned(chat, 'sendGifs'),\n canAttachEmbedLinks: isAdmin || !isUserRightBanned(chat, 'embedLinks'),\n };\n}\n\nexport function getMessageSendingRestrictionReason(\n lang: LangFn,\n currentUserBannedRights?: ApiChatBannedRights,\n defaultBannedRights?: ApiChatBannedRights,\n) {\n if (currentUserBannedRights?.sendMessages) {\n const { untilDate } = currentUserBannedRights;\n return untilDate && untilDate < FOREVER_BANNED_DATE\n ? lang(\n 'Channel.Persmission.Denied.SendMessages.Until',\n lang(\n 'formatDateAtTime',\n [formatDateToString(new Date(untilDate * 1000), lang.code), formatTime(lang, untilDate * 1000)],\n ),\n )\n : lang('Channel.Persmission.Denied.SendMessages.Forever');\n }\n\n if (defaultBannedRights?.sendMessages) {\n return lang('Channel.Persmission.Denied.SendMessages.DefaultRestrictedText');\n }\n\n return undefined;\n}\n\nexport function getChatSlowModeOptions(chat?: ApiChat) {\n if (!chat || !chat.fullInfo) {\n return undefined;\n }\n\n return chat.fullInfo.slowMode;\n}\n\nexport function getChatOrder(chat: ApiChat) {\n return Math.max(chat.joinDate || 0, chat.draftDate || 0, chat.lastMessage?.date || 0);\n}\n\nexport function isChatArchived(chat: ApiChat) {\n return chat.folderId === ARCHIVED_FOLDER_ID;\n}\n\nexport function selectIsChatMuted(\n chat: ApiChat, notifySettings: NotifySettings, notifyExceptions: Record = {},\n) {\n // If this chat is in exceptions they take precedence\n if (notifyExceptions[chat.id] && notifyExceptions[chat.id].isMuted !== undefined) {\n return notifyExceptions[chat.id].isMuted;\n }\n\n return (\n chat.isMuted\n || (isUserId(chat.id) && !notifySettings.hasPrivateChatsNotifications)\n || (isChatChannel(chat) && !notifySettings.hasBroadcastNotifications)\n || (isChatGroup(chat) && !notifySettings.hasGroupNotifications)\n );\n}\n\nexport function selectShouldShowMessagePreview(\n chat: ApiChat, notifySettings: NotifySettings, notifyExceptions: Record = {},\n) {\n const {\n hasPrivateChatsMessagePreview = true,\n hasBroadcastMessagePreview = true,\n hasGroupMessagePreview = true,\n } = notifySettings;\n // If this chat is in exceptions they take precedence\n if (notifyExceptions[chat.id] && notifyExceptions[chat.id].shouldShowPreviews !== undefined) {\n return notifyExceptions[chat.id].shouldShowPreviews;\n }\n\n return (isUserId(chat.id) && hasPrivateChatsMessagePreview)\n || (isChatChannel(chat) && hasBroadcastMessagePreview)\n || (isChatGroup(chat) && hasGroupMessagePreview);\n}\n\nexport function getCanDeleteChat(chat: ApiChat) {\n return isChatBasicGroup(chat) || ((isChatSuperGroup(chat) || isChatChannel(chat)) && chat.isCreator);\n}\n\nexport function getFolderDescriptionText(lang: LangFn, folder: ApiChatFolder, chatsCount?: number) {\n const {\n id, title, emoticon, description, pinnedChatIds,\n excludedChatIds, includedChatIds,\n excludeArchived, excludeMuted, excludeRead,\n ...filters\n } = folder;\n\n // If folder has multiple additive filters or uses include/exclude lists,\n // we display folder chats count\n if (\n chatsCount !== undefined && (\n Object.values(filters).filter(Boolean).length > 1\n || (excludedChatIds?.length)\n || (includedChatIds?.length)\n )) {\n return lang('Chats', chatsCount);\n }\n\n // Otherwise, we return a short description of a single filter\n if (filters.bots) {\n return lang('FilterBots');\n } else if (filters.groups) {\n return lang('FilterGroups');\n } else if (filters.channels) {\n return lang('FilterChannels');\n } else if (filters.contacts) {\n return lang('FilterContacts');\n } else if (filters.nonContacts) {\n return lang('FilterNonContacts');\n } else {\n return undefined;\n }\n}\n\nexport function getMessageSenderName(lang: LangFn, chatId: string, sender?: ApiUser) {\n if (!sender || isUserId(chatId)) {\n return undefined;\n }\n\n if (sender.isSelf) {\n return lang('FromYou');\n }\n\n return getUserFirstOrLastName(sender);\n}\n\nexport function sortChatIds(\n chatIds: string[],\n chatsById: Record,\n shouldPrioritizeVerified = false,\n priorityIds?: string[],\n) {\n return orderBy(chatIds, (id) => {\n const chat = chatsById[id];\n if (!chat) {\n return 0;\n }\n\n let priority = 0;\n\n if (chat.lastMessage) {\n priority += chat.lastMessage.date;\n }\n\n if (shouldPrioritizeVerified && chat.isVerified) {\n priority += VERIFIED_PRIORITY_BASE; // ~100 years in seconds\n }\n\n if (priorityIds && priorityIds.includes(id)) {\n priority = Date.now() + PINNED_PRIORITY_BASE + (priorityIds.length - priorityIds.indexOf(id));\n }\n\n return priority;\n }, 'desc');\n}\n\nexport function filterChatsByName(\n lang: LangFn,\n chatIds: string[],\n chatsById: Record,\n query?: string,\n currentUserId?: string,\n) {\n if (!query) {\n return chatIds;\n }\n\n const searchWords = prepareSearchWordsForNeedle(query);\n\n return chatIds.filter((id) => {\n const chat = chatsById[id];\n if (!chat) {\n return false;\n }\n\n return searchWords(getChatTitle(lang, chat, undefined, id === currentUserId));\n });\n}\n","import {\n ApiChat, ApiMessage, ApiMessageEntityTypes, ApiReactions, ApiUser,\n} from '../../api/types';\nimport { LangFn } from '../../hooks/useLang';\n\nimport {\n CONTENT_NOT_SUPPORTED,\n LOCAL_MESSAGE_ID_BASE,\n RE_LINK_TEMPLATE,\n SERVICE_NOTIFICATIONS_USER_ID,\n} from '../../config';\nimport { getUserFullName } from './users';\nimport { IS_OPUS_SUPPORTED, isWebpSupported } from '../../util/environment';\nimport { getChatTitle, isUserId } from './chats';\nimport parseEmojiOnlyString from '../../components/common/helpers/parseEmojiOnlyString';\n\nconst RE_LINK = new RegExp(RE_LINK_TEMPLATE, 'i');\n\nexport type MessageKey = `msg${string}-${number}`;\n\nexport function getMessageHtmlId(messageId: number) {\n return `message${messageId.toString().replace('.', '-')}`;\n}\n\nexport function getMessageKey(message: ApiMessage): MessageKey {\n const { chatId, id } = message;\n\n return buildMessageKey(chatId, id);\n}\n\nexport function buildMessageKey(chatId: string, msgId: number): MessageKey {\n return `msg${chatId}-${msgId}`;\n}\n\nexport function parseMessageKey(key: MessageKey) {\n const match = key.match(/^msg(-?\\d+)-(\\d+)/)!;\n\n return { chatId: match[1], messageId: Number(match[2]) };\n}\n\nexport function getMessageOriginalId(message: ApiMessage) {\n return message.previousLocalId || message.id;\n}\n\nexport function getMessageText(message: ApiMessage) {\n const {\n text, sticker, photo, video, audio, voice, document, poll, webPage, contact, invoice, location,\n } = message.content;\n\n if (text) {\n return text.text;\n }\n\n if (sticker || photo || video || audio || voice || document\n || contact || poll || webPage || invoice || location) {\n return undefined;\n }\n\n return CONTENT_NOT_SUPPORTED;\n}\n\nexport function getMessageCustomShape(message: ApiMessage): boolean | number {\n const {\n text, sticker, photo, video, audio, voice, document, poll, webPage, contact,\n } = message.content;\n\n if (sticker || (video?.isRound)) {\n return true;\n }\n\n if (!text || photo || video || audio || voice || document || poll || webPage || contact) {\n return false;\n }\n\n // This is a \"dual-intent\" method used to limit calls of `parseEmojiOnlyString`.\n return parseEmojiOnlyString(text.text) || false;\n}\n\nexport function getMessageSingleEmoji(message: ApiMessage) {\n const { text } = message.content;\n if (!(text && text.text.length <= 6)) {\n return undefined;\n }\n\n if (getMessageCustomShape(message) !== 1) {\n return undefined;\n }\n\n return text.text;\n}\n\nexport function getFirstLinkInMessage(message: ApiMessage) {\n const { text } = message.content;\n\n let match: RegExpMatchArray | null | undefined;\n if (text?.entities) {\n let link = text.entities.find((entity) => entity.type === ApiMessageEntityTypes.TextUrl);\n if (link) {\n match = link.url!.match(RE_LINK);\n }\n\n if (!match) {\n link = text.entities.find((entity) => entity.type === ApiMessageEntityTypes.Url);\n if (link) {\n const { offset, length } = link;\n match = text.text.substring(offset, offset + length).match(RE_LINK);\n }\n }\n }\n\n if (!match && text) {\n match = text.text.match(RE_LINK);\n }\n\n if (!match) {\n return undefined;\n }\n\n return {\n url: match[0],\n domain: match[3],\n };\n}\n\nexport function matchLinkInMessageText(message: ApiMessage) {\n const { text } = message.content;\n const match = text && text.text.match(RE_LINK);\n\n if (!match) {\n return undefined;\n }\n\n return {\n url: match[0],\n domain: match[3],\n };\n}\n\nexport function isOwnMessage(message: ApiMessage) {\n return message.isOutgoing;\n}\n\nexport function isReplyMessage(message: ApiMessage) {\n return Boolean(message.replyToMessageId);\n}\n\nexport function isForwardedMessage(message: ApiMessage) {\n return Boolean(message.forwardInfo);\n}\n\nexport function isActionMessage(message: ApiMessage) {\n return Boolean(message.content.action);\n}\n\nexport function isServiceNotificationMessage(message: ApiMessage) {\n return message.chatId === SERVICE_NOTIFICATIONS_USER_ID && Math.round(message.id) !== message.id;\n}\n\nexport function isAnonymousOwnMessage(message: ApiMessage) {\n return Boolean(message.senderId) && !isUserId(message.senderId!) && isOwnMessage(message);\n}\n\nexport function getSenderTitle(lang: LangFn, sender: ApiUser | ApiChat) {\n return isUserId(sender.id) ? getUserFullName(sender as ApiUser) : getChatTitle(lang, sender as ApiChat);\n}\n\nexport function getSendingState(message: ApiMessage) {\n if (!message.sendingState) {\n return 'succeeded';\n }\n\n return message.sendingState === 'messageSendingStateFailed' ? 'failed' : 'pending';\n}\n\nexport function isMessageLocal(message: ApiMessage) {\n return message.id >= LOCAL_MESSAGE_ID_BASE;\n}\n\nexport function isHistoryClearMessage(message: ApiMessage) {\n return message.content.action && message.content.action.type === 'historyClear';\n}\n\nexport function getMessageContentFilename(message: ApiMessage) {\n const { content } = message;\n\n const video = content.webPage ? content.webPage.video : content.video;\n const photo = content.webPage ? content.webPage.photo : content.photo;\n const document = content.webPage ? content.webPage.document : content.document;\n if (document) {\n return document.fileName;\n }\n\n if (video) {\n return video.fileName;\n }\n\n if (content.sticker) {\n const extension = content.sticker.isLottie ? 'tgs' : content.sticker.isVideo\n ? 'webm' : isWebpSupported() ? 'webp' : 'png';\n return `${content.sticker.id}.${extension}`;\n }\n\n if (content.audio) {\n return content.audio.fileName;\n }\n\n const baseFilename = getMessageKey(message);\n\n if (photo) {\n return `${baseFilename}.jpg`;\n }\n\n if (content.voice) {\n return IS_OPUS_SUPPORTED ? `${baseFilename}.ogg` : `${baseFilename}.wav`;\n }\n\n return baseFilename;\n}\n\nexport function areReactionsEmpty(reactions: ApiReactions) {\n return !reactions.results.some((l) => l.count > 0);\n}\n\nexport function isGeoLiveExpired(message: ApiMessage, timestamp = Date.now() / 1000) {\n const { location } = message.content;\n if (location?.type !== 'geoLive') return false;\n return (timestamp - (message.date || 0) >= location.period);\n}\n","import { ApiMessage, ApiReactions } from '../../api/types';\n\nexport function getMessageRecentReaction(message: Partial) {\n return message.isOutgoing ? message.reactions?.recentReactions?.[0] : undefined;\n}\n\nexport function checkIfReactionAdded(oldReactions?: ApiReactions, newReactions?: ApiReactions, currentUserId?: string) {\n if (!oldReactions || !oldReactions.recentReactions) return true;\n if (!newReactions || !newReactions.recentReactions) return false;\n // Skip reactions from yourself\n if (newReactions.recentReactions.every((reaction) => reaction.userId === currentUserId)) return false;\n const oldReactionsMap = oldReactions.results.reduce>((acc, reaction) => {\n acc[reaction.reaction] = reaction.count;\n return acc;\n }, {});\n return newReactions.results.some((r) => !oldReactionsMap[r.reaction] || oldReactionsMap[r.reaction] < r.count);\n}\n","import { ApiMessage, ApiMessageEntityTypes } from '../../api/types';\nimport type { TextPart } from '../../components/common/helpers/renderTextWithEntities';\nimport { CONTENT_NOT_SUPPORTED } from '../../config';\n\nimport { LangFn } from '../../hooks/useLang';\nimport trimText from '../../util/trimText';\nimport { getMessageText } from './messages';\nimport { getMessageRecentReaction } from './reactions';\n\nconst SPOILER_CHARS = ['⠺', '⠵', '⠞', '⠟'];\nexport const TRUNCATED_SUMMARY_LENGTH = 80;\n\nexport function getMessageSummaryText(\n lang: LangFn,\n message: ApiMessage,\n noEmoji = false,\n truncateLength = TRUNCATED_SUMMARY_LENGTH,\n noReactions = true,\n isExtended = false,\n) {\n const emoji = !noEmoji && getMessageSummaryEmoji(message, noReactions);\n const emojiWithSpace = emoji ? `${emoji} ` : '';\n const text = trimText(getMessageTextWithSpoilers(message), truncateLength);\n const description = getMessageSummaryDescription(lang, message, text, noReactions, isExtended);\n\n return `${emojiWithSpace}${description}`;\n}\n\nexport function getMessageTextWithSpoilers(message: ApiMessage) {\n const text = getMessageText(message);\n if (!text) {\n return undefined;\n }\n\n const { entities } = message.content.text || {};\n if (!entities?.length) {\n return text;\n }\n\n return entities.reduce((accText, {\n type,\n offset,\n length,\n }) => {\n if (type !== ApiMessageEntityTypes.Spoiler) {\n return accText;\n }\n\n const spoiler = generateBrailleSpoiler(length);\n\n return `${accText.substr(0, offset)}${spoiler}${accText.substr(offset + length, accText.length)}`;\n }, text);\n}\n\nexport function getMessageSummaryEmoji(message: ApiMessage, noReactions = true) {\n const {\n photo,\n video,\n audio,\n voice,\n document,\n sticker,\n poll,\n } = message.content;\n\n if (message.groupedId || photo) {\n return '🖼';\n }\n\n if (video) {\n return '📹';\n }\n\n if (sticker) {\n return sticker.emoji;\n }\n\n if (audio) {\n return '🎧';\n }\n\n if (voice) {\n return '🎤';\n }\n\n if (document) {\n return '📎';\n }\n\n if (poll) {\n return '📊';\n }\n\n const reaction = !noReactions && getMessageRecentReaction(message);\n if (reaction) {\n return reaction.reaction;\n }\n\n return undefined;\n}\n\nexport function getMessageSummaryDescription(\n lang: LangFn,\n message: ApiMessage,\n truncatedText?: string | TextPart[],\n noReactions = true,\n isExtended = false,\n) {\n const {\n text,\n photo,\n video,\n audio,\n voice,\n document,\n sticker,\n contact,\n poll,\n invoice,\n location,\n } = message.content;\n\n let summary: string | TextPart[] | undefined;\n\n if (message.groupedId) {\n summary = truncatedText || lang('lng_in_dlg_album');\n }\n\n if (photo) {\n summary = truncatedText || lang('AttachPhoto');\n }\n\n if (video) {\n summary = truncatedText || lang(video.isGif ? 'AttachGif' : 'AttachVideo');\n }\n\n if (sticker) {\n summary = lang('AttachSticker').trim();\n }\n\n if (audio) {\n summary = getMessageAudioCaption(message) || lang('AttachMusic');\n }\n\n if (voice) {\n summary = truncatedText || lang('AttachAudio');\n }\n\n if (document) {\n summary = isExtended ? document.fileName : (truncatedText || document.fileName);\n }\n\n if (contact) {\n summary = lang('AttachContact');\n }\n\n if (poll) {\n summary = poll.summary.question;\n }\n\n if (invoice) {\n summary = `${lang('PaymentInvoice')}: ${invoice.text}`;\n }\n\n if (text) {\n if (isExtended && summary) {\n summary += `\\n${truncatedText}`;\n } else {\n summary = truncatedText;\n }\n }\n\n if (location?.type === 'geo' || location?.type === 'venue') {\n summary = lang('Message.Location');\n }\n\n if (location?.type === 'geoLive') {\n summary = lang('Message.LiveLocation');\n }\n\n const reaction = !noReactions && getMessageRecentReaction(message);\n if (summary && reaction) {\n summary = `to your \"${summary}\"`;\n }\n\n return summary || CONTENT_NOT_SUPPORTED;\n}\n\nexport function generateBrailleSpoiler(length: number) {\n return new Array(length)\n .fill(undefined)\n .map(() => SPOILER_CHARS[Math.floor(Math.random() * SPOILER_CHARS.length)])\n .join('');\n}\n\nfunction getMessageAudioCaption(message: ApiMessage) {\n const {\n audio,\n text,\n } = message.content;\n\n return (audio && [audio.title, audio.performer].filter(Boolean)\n .join(' — ')) || (text?.text);\n}\n","import {\n ApiAudio, ApiMediaFormat, ApiMessage, ApiMessageSearchType, ApiPhoto, ApiVideo, ApiDimensions, ApiLocation,\n} from '../../api/types';\n\nimport { IS_OPUS_SUPPORTED, IS_PROGRESSIVE_SUPPORTED, IS_SAFARI } from '../../util/environment';\nimport { getMessageKey, isMessageLocal, matchLinkInMessageText } from './messages';\nimport { getDocumentHasPreview } from '../../components/common/helpers/documentInfo';\n\ntype Target =\n 'micro'\n | 'pictogram'\n | 'inline'\n | 'viewerPreview'\n | 'viewerFull'\n | 'download';\n\nexport function getMessageContent(message: ApiMessage) {\n return message.content;\n}\n\nexport function hasMessageMedia(message: ApiMessage) {\n return Boolean((\n getMessagePhoto(message)\n || getMessageVideo(message)\n || getMessageDocument(message)\n || getMessageSticker(message)\n || getMessageContact(message)\n || getMessagePoll(message)\n || getMessageAction(message)\n || getMessageAudio(message)\n || getMessageVoice(message)\n ));\n}\n\nexport function getMessagePhoto(message: ApiMessage) {\n return message.content.photo;\n}\n\nexport function getMessageVideo(message: ApiMessage) {\n return message.content.video;\n}\n\nexport function getMessageRoundVideo(message: ApiMessage) {\n const { video } = message.content;\n\n return video?.isRound ? video : undefined;\n}\n\nexport function getMessageAction(message: ApiMessage) {\n return message.content.action;\n}\n\nexport function getMessageAudio(message: ApiMessage) {\n return message.content.audio;\n}\n\nexport function getMessageVoice(message: ApiMessage) {\n return message.content.voice;\n}\n\nexport function getMessageSticker(message: ApiMessage) {\n return message.content.sticker;\n}\n\nexport function getMessageDocument(message: ApiMessage) {\n return message.content.document;\n}\n\nexport function isMessageDocumentPhoto(message: ApiMessage) {\n const document = getMessageDocument(message);\n return document ? document.mediaType === 'photo' : undefined;\n}\n\nexport function isMessageDocumentVideo(message: ApiMessage) {\n const document = getMessageDocument(message);\n return document ? document.mediaType === 'video' : undefined;\n}\n\nexport function getMessageContact(message: ApiMessage) {\n return message.content.contact;\n}\n\nexport function getMessagePoll(message: ApiMessage) {\n return message.content.poll;\n}\n\nexport function getMessageInvoice(message: ApiMessage) {\n return message.content.invoice;\n}\n\nexport function getMessageLocation(message: ApiMessage) {\n return message.content.location;\n}\n\nexport function getMessageWebPage(message: ApiMessage) {\n return message.content.webPage;\n}\n\nexport function getMessageWebPagePhoto(message: ApiMessage) {\n return getMessageWebPage(message)?.photo;\n}\n\nexport function getMessageWebPageDocument(message: ApiMessage) {\n return getMessageWebPage(message)?.document;\n}\n\nexport function getMessageWebPageVideo(message: ApiMessage): ApiVideo | undefined {\n return getMessageWebPage(message)?.video;\n}\n\nexport function getMessageMediaThumbnail(message: ApiMessage) {\n const media = getMessagePhoto(message)\n || getMessageVideo(message)\n || getMessageDocument(message)\n || getMessageSticker(message)\n || getMessageWebPagePhoto(message)\n || getMessageWebPageVideo(message);\n\n if (!media) {\n return undefined;\n }\n\n return media.thumbnail;\n}\n\nexport function getMessageMediaThumbDataUri(message: ApiMessage) {\n return getMessageMediaThumbnail(message)?.dataUri;\n}\n\nexport function buildStaticMapHash(\n geo: ApiLocation['geo'],\n width: number,\n height: number,\n zoom: number,\n scale: number,\n) {\n const {\n long, lat, accessHash, accuracyRadius,\n } = geo;\n\n // eslint-disable-next-line max-len\n return `staticMap:${accessHash}?lat=${lat}&long=${long}&w=${width}&h=${height}&zoom=${zoom}&scale=${scale}&accuracyRadius=${accuracyRadius}`;\n}\n\nexport function getMessageMediaHash(\n message: ApiMessage,\n target: Target,\n) {\n const {\n photo, video, sticker, audio, voice, document,\n } = message.content;\n const webPagePhoto = getMessageWebPagePhoto(message);\n const webPageVideo = getMessageWebPageVideo(message);\n\n const messageVideo = video || webPageVideo;\n const messagePhoto = photo || webPagePhoto;\n\n const content = messagePhoto || messageVideo || sticker || audio || voice || document;\n\n if (!content) {\n return undefined;\n }\n\n const mediaId = content.id;\n const base = `${getMessageKey(message)}${mediaId ? `:${mediaId}` : ''}`;\n\n if (messageVideo) {\n switch (target) {\n case 'micro':\n case 'pictogram':\n return `${base}?size=m`;\n case 'inline':\n return !hasMessageLocalBlobUrl(message) ? getVideoOrAudioBaseHash(messageVideo, base) : undefined;\n case 'viewerPreview':\n return `${base}?size=m`;\n case 'viewerFull':\n return getVideoOrAudioBaseHash(messageVideo, base);\n case 'download':\n return `${base}?download`;\n }\n }\n\n if (messagePhoto) {\n switch (target) {\n case 'micro':\n case 'pictogram':\n return `${base}?size=m`;\n case 'inline':\n return !hasMessageLocalBlobUrl(message) ? `${base}?size=x` : undefined;\n case 'viewerPreview':\n return `${base}?size=x`;\n case 'viewerFull':\n case 'download':\n return `${base}?size=z`;\n }\n }\n\n if (document) {\n switch (target) {\n case 'micro':\n case 'pictogram':\n case 'inline':\n case 'viewerPreview':\n if (!getDocumentHasPreview(document) || hasMessageLocalBlobUrl(message)) {\n return undefined;\n }\n\n return `${base}?size=m`;\n case 'viewerFull':\n case 'download':\n return base;\n }\n }\n\n if (sticker) {\n switch (target) {\n case 'micro':\n return undefined;\n case 'pictogram':\n return `${base}?size=m`;\n case 'inline':\n return base;\n case 'download':\n return `${base}?download`;\n }\n }\n\n if (audio) {\n switch (target) {\n case 'micro':\n case 'pictogram':\n return getAudioHasCover(audio) ? `${base}?size=m` : undefined;\n case 'inline':\n return getVideoOrAudioBaseHash(audio, base);\n case 'download':\n return `${base}?download`;\n }\n }\n\n if (voice) {\n switch (target) {\n case 'micro':\n case 'pictogram':\n return undefined;\n case 'inline':\n return base;\n case 'download':\n return `${base}?download`;\n }\n }\n\n return undefined;\n}\n\nfunction getVideoOrAudioBaseHash(media: ApiAudio | ApiVideo, base: string) {\n if (IS_PROGRESSIVE_SUPPORTED && IS_SAFARI) {\n return `${base}?fileSize=${media.size}&mimeType=${media.mimeType}`;\n }\n\n return base;\n}\n\nexport function getAudioHasCover(media: ApiAudio) {\n return media.thumbnailSizes && media.thumbnailSizes.length > 0;\n}\n\nexport function getMessageMediaFormat(\n message: ApiMessage, target: Target,\n): ApiMediaFormat {\n const {\n sticker, video, audio, voice,\n } = message.content;\n\n const fullVideo = video || getMessageWebPageVideo(message);\n\n if (sticker && target === 'inline' && sticker.isLottie) {\n return ApiMediaFormat.Lottie;\n } else if (fullVideo && IS_PROGRESSIVE_SUPPORTED && (\n target === 'viewerFull' || target === 'inline'\n )) {\n return ApiMediaFormat.Progressive;\n } else if (audio || voice) {\n // Safari\n if (voice && !IS_OPUS_SUPPORTED) {\n return ApiMediaFormat.BlobUrl;\n }\n\n return ApiMediaFormat.Progressive;\n }\n\n return ApiMediaFormat.BlobUrl;\n}\n\nexport function getMessageFileName(message: ApiMessage) {\n const {\n photo, video, document,\n } = message.content;\n const webPagePhoto = getMessageWebPagePhoto(message);\n const webPageVideo = getMessageWebPageVideo(message);\n\n if (photo || webPagePhoto) {\n return `photo${message.date}.jpeg`;\n }\n\n const { fileName } = video || webPageVideo || document || {};\n\n return fileName;\n}\n\nexport function getMessageFileSize(message: ApiMessage) {\n const { video, document } = message.content;\n const webPageVideo = getMessageWebPageVideo(message);\n const { size } = video || webPageVideo || document || {};\n\n return size;\n}\n\nexport function hasMessageLocalBlobUrl(message: ApiMessage) {\n const { photo, video, document } = message.content;\n\n return (photo?.blobUrl) || (video?.blobUrl) || (document?.previewBlobUrl);\n}\n\nexport function getChatMediaMessageIds(\n messages: Record, listedIds: number[], isFromSharedMedia = false,\n) {\n return getMessageContentIds(messages, listedIds, isFromSharedMedia ? 'media' : 'inlineMedia');\n}\n\nexport function getPhotoFullDimensions(photo: ApiPhoto): ApiDimensions | undefined {\n return (\n photo.sizes.find((size) => size.type === 'z')\n || photo.sizes.find((size) => size.type === 'y')\n || getPhotoInlineDimensions(photo)\n );\n}\n\nexport function getPhotoInlineDimensions(photo: ApiPhoto): ApiDimensions | undefined {\n return (\n photo.sizes.find((size) => size.type === 'x')\n || photo.sizes.find((size) => size.type === 'm')\n || photo.sizes.find((size) => size.type === 's')\n || photo.thumbnail\n );\n}\n\nexport function getVideoDimensions(video: ApiVideo): ApiDimensions | undefined {\n if (video.width && video.height) {\n return video as ApiDimensions;\n }\n\n return undefined;\n}\n\nexport function getMediaTransferState(message: ApiMessage, progress?: number, isLoadNeeded = false) {\n const isUploading = isMessageLocal(message);\n const isTransferring = isUploading || isLoadNeeded;\n const transferProgress = Number(progress);\n\n return {\n isUploading, isTransferring, transferProgress,\n };\n}\n\nexport function getMessageContentIds(\n messages: Record, messageIds: number[], contentType: ApiMessageSearchType | 'inlineMedia',\n) {\n let validator: Function;\n\n switch (contentType) {\n case 'media':\n validator = (message: ApiMessage) => {\n const video = getMessageVideo(message);\n return getMessagePhoto(message) || (video && !video.isRound && !video.isGif);\n };\n break;\n\n case 'documents':\n validator = getMessageDocument;\n break;\n\n case 'links':\n validator = (message: ApiMessage) => getMessageWebPage(message) || matchLinkInMessageText(message);\n break;\n\n case 'audio':\n validator = getMessageAudio;\n break;\n\n case 'voice':\n validator = (message: ApiMessage) => {\n const video = getMessageVideo(message);\n return getMessageVoice(message) || (video && video.isRound);\n };\n break;\n\n case 'inlineMedia':\n validator = (message: ApiMessage) => {\n const video = getMessageVideo(message);\n return (\n getMessagePhoto(message)\n || (video && !video.isRound && !video.isGif)\n || isMessageDocumentPhoto(message)\n || isMessageDocumentVideo(message)\n );\n };\n break;\n\n default:\n return [] as Array;\n }\n\n return messageIds.reduce((result, messageId) => {\n if (messages[messageId] && validator(messages[messageId])) {\n result.push(messageId);\n }\n\n return result;\n }, [] as Array);\n}\n\nexport function getMediaDuration(message: ApiMessage) {\n const { audio, voice, video } = getMessageContent(message);\n const media = audio || voice || video || getMessageWebPageVideo(message);\n if (!media) {\n return undefined;\n }\n\n return media.duration;\n}\n","export function buildChatThreadKey(chatId: string, threadId: number) {\n return `${chatId}_${threadId}`;\n}\n","import { ApiFieldError } from '../../api/types';\n\nconst STRIPE_ERRORS: Record = {\n missing_payment_information: {\n field: 'cardNumber',\n message: 'Incorrect card number',\n },\n invalid_number: {\n field: 'cardNumber',\n message: 'Incorrect card number',\n },\n number: {\n field: 'cardNumber',\n message: 'Incorrect card number',\n },\n exp_year: {\n field: 'expiry',\n message: 'Incorrect year',\n },\n exp_month: {\n field: 'expiry',\n message: 'Incorrect month',\n },\n invalid_expiry_year: {\n field: 'expiry',\n message: 'Incorrect year',\n },\n invalid_expiry_month: {\n field: 'expiry',\n message: 'Incorrect month',\n },\n cvc: {\n field: 'cvv',\n message: 'Incorrect CVV',\n },\n invalid_cvc: {\n field: 'cvv',\n message: 'Incorrect CVV',\n },\n};\n\nexport function getStripeError(error: {\n code: string;\n message: string;\n param?: string;\n}) {\n const { message: description, code, param } = error;\n const { field, message } = param ? STRIPE_ERRORS[param] : STRIPE_ERRORS[code];\n\n return { field, message, description };\n}\n","import { ApiChat, ApiUser, ApiUserStatus } from '../../api/types';\n\nimport { SERVICE_NOTIFICATIONS_USER_ID } from '../../config';\nimport { formatFullDate, formatTime } from '../../util/dateFormat';\nimport { orderBy } from '../../util/iteratees';\nimport { LangFn } from '../../hooks/useLang';\nimport { getServerTime } from '../../util/serverTime';\nimport { prepareSearchWordsForNeedle } from '../../util/searchWords';\n\nconst USER_COLOR_KEYS = [1, 8, 5, 2, 7, 4, 6];\n\nexport function getUserFirstOrLastName(user?: ApiUser) {\n if (!user) {\n return undefined;\n }\n\n switch (user.type) {\n case 'userTypeBot':\n case 'userTypeRegular': {\n return user.firstName || user.lastName;\n }\n\n case 'userTypeDeleted':\n case 'userTypeUnknown': {\n return 'Deleted';\n }\n\n default:\n return undefined;\n }\n}\n\nexport function getUserFullName(user?: ApiUser) {\n if (!user) {\n return undefined;\n }\n\n if (isDeletedUser(user)) {\n return 'Deleted account';\n }\n\n switch (user.type) {\n case 'userTypeBot':\n case 'userTypeRegular': {\n if (user.firstName && user.lastName) {\n return `${user.firstName} ${user.lastName}`;\n }\n\n if (user.firstName) {\n return user.firstName;\n }\n\n if (user.lastName) {\n return user.lastName;\n }\n\n break;\n }\n\n case 'userTypeDeleted':\n case 'userTypeUnknown': {\n return 'Deleted account';\n }\n }\n\n return undefined;\n}\n\nexport function getUserStatus(\n lang: LangFn, user: ApiUser, userStatus: ApiUserStatus | undefined, serverTimeOffset: number,\n) {\n if (user.id === SERVICE_NOTIFICATIONS_USER_ID) {\n return lang('ServiceNotifications').toLowerCase();\n }\n\n if (user.type && user.type === 'userTypeBot') {\n return lang('Bot');\n }\n\n if (!userStatus) {\n return '';\n }\n\n switch (userStatus.type) {\n case 'userStatusEmpty': {\n return lang('ALongTimeAgo');\n }\n\n case 'userStatusLastMonth': {\n return lang('WithinAMonth');\n }\n\n case 'userStatusLastWeek': {\n return lang('WithinAWeek');\n }\n\n case 'userStatusOffline': {\n const { wasOnline } = userStatus;\n\n if (!wasOnline) return lang('LastSeen.Offline');\n\n const now = new Date(new Date().getTime() + serverTimeOffset * 1000);\n const wasOnlineDate = new Date(wasOnline * 1000);\n\n if (wasOnlineDate >= now) {\n return lang('LastSeen.JustNow');\n }\n\n const diff = new Date(now.getTime() - wasOnlineDate.getTime());\n\n // within a minute\n if (diff.getTime() / 1000 < 60) {\n return lang('LastSeen.JustNow');\n }\n\n // within an hour\n if (diff.getTime() / 1000 < 60 * 60) {\n const minutes = Math.floor(diff.getTime() / 1000 / 60);\n return lang('LastSeen.MinutesAgo', minutes);\n }\n\n // today\n const today = new Date();\n today.setHours(0, 0, 0, 0);\n const serverToday = new Date(today.getTime() + serverTimeOffset * 1000);\n if (wasOnlineDate > serverToday) {\n // up to 6 hours ago\n if (diff.getTime() / 1000 < 6 * 60 * 60) {\n const hours = Math.floor(diff.getTime() / 1000 / 60 / 60);\n return lang('LastSeen.HoursAgo', hours);\n }\n\n // other\n return lang('LastSeen.TodayAt', formatTime(lang, wasOnlineDate));\n }\n\n // yesterday\n const yesterday = new Date();\n yesterday.setDate(now.getDate() - 1);\n yesterday.setHours(0, 0, 0, 0);\n const serverYesterday = new Date(yesterday.getTime() + serverTimeOffset * 1000);\n if (wasOnlineDate > serverYesterday) {\n return lang('LastSeen.YesterdayAt', formatTime(lang, wasOnlineDate));\n }\n\n return lang('LastSeen.AtDate', formatFullDate(lang, wasOnlineDate));\n }\n\n case 'userStatusOnline': {\n return lang('Online');\n }\n\n case 'userStatusRecently': {\n return lang('Lately');\n }\n\n default:\n return undefined;\n }\n}\n\nexport function isUserOnline(user: ApiUser, userStatus?: ApiUserStatus) {\n const { id, type } = user;\n\n if (!userStatus) {\n return false;\n }\n\n if (id === SERVICE_NOTIFICATIONS_USER_ID) {\n return false;\n }\n\n return userStatus.type === 'userStatusOnline' && type !== 'userTypeBot';\n}\n\nexport function isDeletedUser(user: ApiUser) {\n if (user.noStatus || user.type === 'userTypeBot' || user.id === SERVICE_NOTIFICATIONS_USER_ID) {\n return false;\n }\n\n return user.type === 'userTypeDeleted'\n || user.type === 'userTypeUnknown';\n}\n\nexport function isUserBot(user: ApiUser) {\n return user.type === 'userTypeBot';\n}\n\nexport function getCanAddContact(user: ApiUser) {\n return !user.isContact && !isUserBot(user);\n}\n\nexport function sortUserIds(\n userIds: string[],\n usersById: Record,\n userStatusesById: Record,\n priorityIds?: string[],\n serverTimeOffset = 0,\n) {\n return orderBy(userIds, (id) => {\n const now = getServerTime(serverTimeOffset);\n\n if (priorityIds && priorityIds.includes(id)) {\n // Assuming that online status expiration date can't be as far as two days from now,\n // this should place prioritized on top of the list.\n // Then we subtract index of `id` in `priorityIds` to preserve selected order\n return now + (48 * 60 * 60) - (priorityIds.length - priorityIds.indexOf(id));\n }\n\n const user = usersById[id];\n const userStatus = userStatusesById[id];\n if (!user || !userStatus) {\n return 0;\n }\n\n if (userStatus.type === 'userStatusOnline') {\n return userStatus.expires;\n } else if (userStatus.type === 'userStatusOffline' && userStatus.wasOnline) {\n return userStatus.wasOnline;\n }\n\n switch (userStatus.type) {\n case 'userStatusRecently':\n return now - 60 * 60 * 24;\n case 'userStatusLastWeek':\n return now - 60 * 60 * 24 * 7;\n case 'userStatusLastMonth':\n return now - 60 * 60 * 24 * 7 * 30;\n default:\n return 0;\n }\n }, 'desc');\n}\n\nexport function filterUsersByName(\n userIds: string[],\n usersById: Record,\n query?: string,\n currentUserId?: string,\n savedMessagesLang?: string,\n) {\n if (!query) {\n return userIds;\n }\n\n const searchWords = prepareSearchWordsForNeedle(query);\n\n return userIds.filter((id) => {\n const user = usersById[id];\n if (!user) {\n return false;\n }\n\n const name = id === currentUserId ? savedMessagesLang : getUserFullName(user);\n return (name && searchWords(name)) || searchWords(user.username);\n });\n}\n\nexport function getUserIdDividend(userId: string) {\n // Workaround for old-fashioned IDs stored locally\n if (typeof userId === 'number') {\n return Math.abs(userId);\n }\n\n return Math.abs(Number(userId));\n}\n\n// eslint-disable-next-line max-len\n// https://github.com/telegramdesktop/tdesktop/blob/371510cfe23b0bd226de8c076bc49248fbe40c26/Telegram/SourceFiles/data/data_peer.cpp#L53\nexport function getUserColorKey(peer: ApiUser | ApiChat | undefined) {\n const index = peer ? getUserIdDividend(peer.id) % 7 : 0;\n\n return USER_COLOR_KEYS[index];\n}\n","import { typify } from '../lib/teact/teactn';\nimport { GlobalState, ActionPayloads, NonTypedActionNames } from './types';\n\nconst typed = typify();\n\nexport const getGlobal = typed.getGlobal;\nexport const setGlobal = typed.setGlobal;\nexport const getActions = typed.getActions;\nexport const addActionHandler = typed.addActionHandler;\nexport const withGlobal = typed.withGlobal;\n","import { GlobalState } from '../types';\nimport { ApiChat, ApiChatMember, ApiPhoto } from '../../api/types';\n\nimport { ARCHIVED_FOLDER_ID } from '../../config';\nimport { areSortedArraysEqual, omit } from '../../util/iteratees';\nimport { selectChatListType } from '../selectors';\n\nexport function replaceChatListIds(\n global: GlobalState,\n type: 'active' | 'archived',\n newIds: string[] | undefined,\n): GlobalState {\n return {\n ...global,\n chats: {\n ...global.chats,\n listIds: {\n ...global.chats.listIds,\n [type]: newIds,\n },\n },\n };\n}\n\nexport function updateChatListIds(global: GlobalState, type: 'active' | 'archived', idsUpdate: string[]): GlobalState {\n const { [type]: listIds } = global.chats.listIds;\n const newIds = listIds?.length\n ? idsUpdate.filter((id) => !listIds.includes(id))\n : idsUpdate;\n\n if (listIds && !newIds.length) {\n return global;\n }\n\n return replaceChatListIds(global, type, [\n ...(listIds || []),\n ...newIds,\n ]);\n}\n\nexport function replaceChats(global: GlobalState, newById: Record): GlobalState {\n return {\n ...global,\n chats: {\n ...global.chats,\n byId: newById,\n },\n };\n}\n\nexport function updateChat(\n global: GlobalState, chatId: string, chatUpdate: Partial, photo?: ApiPhoto,\n): GlobalState {\n const { byId } = global.chats;\n\n const updatedChat = getUpdatedChat(global, chatId, chatUpdate, photo);\n if (!updatedChat) {\n return global;\n }\n\n return replaceChats(global, {\n ...byId,\n [chatId]: updatedChat,\n });\n}\n\nexport function updateChats(global: GlobalState, newById: Record): GlobalState {\n const updatedById = Object.keys(newById).reduce((acc: Record, id) => {\n const updatedChat = getUpdatedChat(global, id, newById[id]);\n if (updatedChat) {\n acc[id] = updatedChat;\n }\n\n return acc;\n }, {});\n\n global = replaceChats(global, {\n ...global.chats.byId,\n ...updatedById,\n });\n\n return global;\n}\n\n// @optimization Allows to avoid redundant updates which cause a lot of renders\nexport function addChats(global: GlobalState, newById: Record): GlobalState {\n const { byId } = global.chats;\n let isUpdated = false;\n\n const addedById = Object.keys(newById).reduce>((acc, id) => {\n if (!byId[id] || (byId[id].isMin && !newById[id].isMin)) {\n const updatedChat = getUpdatedChat(global, id, newById[id]);\n if (updatedChat) {\n acc[id] = updatedChat;\n if (!isUpdated) {\n isUpdated = true;\n }\n }\n }\n return acc;\n }, {});\n\n if (!isUpdated) {\n return global;\n }\n\n global = replaceChats(global, {\n ...byId,\n ...addedById,\n });\n\n return global;\n}\n\n// @optimization Don't spread/unspread global for each element, do it in a batch\nfunction getUpdatedChat(\n global: GlobalState, chatId: string, chatUpdate: Partial, photo?: ApiPhoto,\n) {\n const { byId } = global.chats;\n const chat = byId[chatId];\n const shouldOmitMinInfo = chatUpdate.isMin && chat && !chat.isMin;\n const updatedChat: ApiChat = {\n ...chat,\n ...(shouldOmitMinInfo ? omit(chatUpdate, ['isMin', 'accessHash']) : chatUpdate),\n ...(photo && { photos: [photo, ...(chat.photos || [])] }),\n };\n\n if (!updatedChat.id || !updatedChat.type) {\n return undefined;\n }\n\n return updatedChat;\n}\n\nexport function updateChatListType(\n global: GlobalState,\n chatId: string,\n folderId?: number,\n): GlobalState {\n const listType = folderId === ARCHIVED_FOLDER_ID ? 'archived' : 'active';\n\n let currentListIds = global.chats.listIds;\n (Object.keys(currentListIds) as Array).forEach((listTypeKey) => {\n const currentFolderList = currentListIds[listTypeKey] || [];\n if (listTypeKey === listType && !currentFolderList.includes(chatId)) {\n currentListIds = {\n ...currentListIds,\n [listTypeKey]: [...currentFolderList, chatId],\n };\n } else if (listTypeKey !== listType && currentFolderList.includes(chatId)) {\n currentListIds = {\n ...currentListIds,\n [listTypeKey]: currentFolderList.filter((id) => id !== chatId),\n };\n }\n });\n\n global = {\n ...global,\n chats: {\n ...global.chats,\n listIds: currentListIds,\n },\n };\n\n global = updateChat(global, chatId, { folderId: folderId || undefined });\n\n return global;\n}\n\nexport function updateChatListSecondaryInfo(\n global: GlobalState,\n type: 'active' | 'archived',\n info: {\n orderedPinnedIds?: string[];\n totalChatCount: number;\n },\n): GlobalState {\n const totalCountKey = type === 'active' ? 'all' : 'archived';\n\n return {\n ...global,\n chats: {\n ...global.chats,\n ...(info.orderedPinnedIds && {\n orderedPinnedIds: {\n ...global.chats.orderedPinnedIds,\n [type]: info.orderedPinnedIds,\n },\n }),\n totalCount: {\n ...global.chats.totalCount,\n [totalCountKey]: info.totalChatCount,\n },\n isFullyLoaded: {\n ...global.chats.isFullyLoaded,\n [type]: false,\n },\n },\n };\n}\n\nexport function leaveChat(global: GlobalState, leftChatId: string): GlobalState {\n const listType = selectChatListType(global, leftChatId);\n if (!listType) {\n return global;\n }\n\n const { [listType]: listIds } = global.chats.listIds;\n\n if (listIds) {\n global = replaceChatListIds(global, listType, listIds.filter((listId) => listId !== leftChatId));\n }\n\n global = updateChat(global, leftChatId, { isNotJoined: true });\n\n return global;\n}\n\nexport function addChatMembers(global: GlobalState, chat: ApiChat, membersToAdd: ApiChatMember[]): GlobalState {\n const currentMembers = chat.fullInfo?.members;\n const newMemberIds = new Set(membersToAdd.map((m) => m.userId));\n const updatedMembers = [\n ...currentMembers?.filter((m) => !newMemberIds.has(m.userId)) || [],\n ...membersToAdd,\n ];\n const currentIds = currentMembers?.map(({ userId }) => userId) || [];\n const updatedIds = updatedMembers.map(({ userId }) => userId);\n\n if (areSortedArraysEqual(currentIds, updatedIds)) {\n return global;\n }\n\n return updateChat(global, chat.id, {\n fullInfo: {\n ...chat.fullInfo,\n members: updatedMembers,\n },\n });\n}\n","import { GlobalState } from '../types';\nimport { ApiSticker, ApiStickerSet, ApiVideo } from '../../api/types';\nimport { buildCollectionByKey, unique } from '../../util/iteratees';\nimport { selectStickersForEmoji } from '../selectors';\n\nexport function updateStickerSets(\n global: GlobalState,\n category: 'added' | 'featured' | 'search',\n hash: string,\n sets: ApiStickerSet[],\n resultIds?: string[],\n): GlobalState {\n const updatedSets = sets.map((stickerSet) => {\n const existing = global.stickers.setsById[stickerSet.id];\n if (!existing) {\n return stickerSet;\n }\n\n return {\n ...existing,\n ...stickerSet,\n };\n });\n\n return {\n ...global,\n stickers: {\n ...global.stickers,\n setsById: {\n ...global.stickers.setsById,\n ...buildCollectionByKey(updatedSets, 'id'),\n },\n [category]: {\n ...global.stickers[category],\n hash,\n ...(\n category === 'search'\n ? { resultIds }\n : { setIds: sets.map(({ id }) => id) }\n ),\n },\n },\n };\n}\n\nexport function updateStickerSet(\n global: GlobalState, stickerSetId: string, update: Partial,\n): GlobalState {\n const currentStickerSet = global.stickers.setsById[stickerSetId] || {};\n const addedSets = global.stickers.added.setIds || [];\n let setIds: string[] = addedSets;\n if (update.installedDate && addedSets && !addedSets.includes(stickerSetId)) {\n setIds = [stickerSetId, ...setIds];\n }\n\n if (!update.installedDate && addedSets?.includes(stickerSetId)) {\n setIds = setIds.filter((id) => id !== stickerSetId);\n }\n\n return {\n ...global,\n stickers: {\n ...global.stickers,\n added: {\n ...global.stickers.added,\n setIds,\n },\n setsById: {\n ...global.stickers.setsById,\n [stickerSetId]: {\n ...currentStickerSet,\n ...update,\n },\n },\n },\n };\n}\n\nexport function updateGifSearch(\n global: GlobalState, isNew: boolean, results: ApiVideo[], nextOffset?: string,\n): GlobalState {\n const { results: currentResults } = global.gifs.search;\n\n let newResults!: ApiVideo[];\n if (isNew || !currentResults) {\n newResults = results;\n } else {\n const currentIds = new Set(currentResults.map((gif) => gif.id));\n newResults = [\n ...currentResults,\n ...results.filter((gif) => !currentIds.has(gif.id)),\n ];\n }\n\n return {\n ...global,\n gifs: {\n ...global.gifs,\n search: {\n ...global.gifs.search,\n offset: nextOffset,\n results: newResults,\n },\n },\n };\n}\n\nexport function replaceAnimatedEmojis(global: GlobalState, stickerSet: ApiStickerSet): GlobalState {\n return {\n ...global,\n animatedEmojis: stickerSet,\n };\n}\n\nexport function updateStickersForEmoji(\n global: GlobalState, emoji: string, remoteStickers?: ApiSticker[], hash?: string,\n): GlobalState {\n const localStickers = selectStickersForEmoji(global, emoji);\n const allStickers = [...localStickers, ...(remoteStickers || [])];\n const uniqueIds = unique(allStickers.map(({ id }) => id));\n const byId = buildCollectionByKey(allStickers, 'id');\n const stickers = uniqueIds.map((id) => byId[id]);\n\n return {\n ...global,\n stickers: {\n ...global.stickers,\n forEmoji: {\n emoji,\n stickers,\n hash,\n },\n },\n };\n}\n\nexport function rebuildStickersForEmoji(global: GlobalState): GlobalState {\n const { emoji, stickers, hash } = global.stickers.forEmoji || {};\n if (!emoji) {\n return global;\n }\n\n return updateStickersForEmoji(global, emoji, stickers, hash);\n}\n","import { GlobalState } from '../types';\nimport { ApiUser, ApiUserStatus } from '../../api/types';\n\nimport { omit, pick } from '../../util/iteratees';\nimport { MEMO_EMPTY_ARRAY } from '../../util/memo';\nimport { updateChat } from './chats';\n\nexport function replaceUsers(global: GlobalState, newById: Record): GlobalState {\n return {\n ...global,\n users: {\n ...global.users,\n byId: newById,\n },\n };\n}\n\nfunction updateContactList(global: GlobalState, updatedUsers: ApiUser[]): GlobalState {\n const { userIds: contactUserIds } = global.contactList || {};\n\n if (!contactUserIds) return global;\n\n const newContactUserIds = updatedUsers\n .filter((user) => user?.isContact && !contactUserIds.includes(user.id))\n .map((user) => user.id);\n\n if (newContactUserIds.length === 0) return global;\n\n return {\n ...global,\n contactList: {\n userIds: [\n ...newContactUserIds,\n ...contactUserIds,\n ],\n },\n };\n}\n\nexport function updateUser(global: GlobalState, userId: string, userUpdate: Partial): GlobalState {\n const { byId } = global.users;\n\n const updatedUser = getUpdatedUser(global, userId, userUpdate);\n if (!updatedUser) {\n return global;\n }\n\n global = updateContactList(global, [updatedUser]);\n\n return replaceUsers(global, {\n ...byId,\n [userId]: updatedUser,\n });\n}\n\nexport function updateUsers(global: GlobalState, newById: Record): GlobalState {\n const updatedById = Object.keys(newById).reduce((acc: Record, id) => {\n const updatedUser = getUpdatedUser(global, id, newById[id]);\n if (updatedUser) {\n acc[id] = updatedUser;\n }\n\n return acc;\n }, {});\n\n global = replaceUsers(global, {\n ...global.users.byId,\n ...updatedById,\n });\n\n global = updateContactList(global, Object.values(updatedById));\n\n return global;\n}\n\n// @optimization Allows to avoid redundant updates which cause a lot of renders\nexport function addUsers(global: GlobalState, newById: Record): GlobalState {\n const { byId } = global.users;\n let isUpdated = false;\n\n const addedById = Object.keys(newById).reduce>((acc, id) => {\n if (!byId[id] || (byId[id].isMin && !newById[id].isMin)) {\n const updatedUser = getUpdatedUser(global, id, newById[id]);\n if (updatedUser) {\n acc[id] = updatedUser;\n if (!isUpdated) {\n isUpdated = true;\n }\n }\n }\n return acc;\n }, {});\n\n if (!isUpdated) {\n return global;\n }\n\n global = replaceUsers(global, {\n ...byId,\n ...addedById,\n });\n\n global = updateContactList(global, Object.values(addedById));\n\n return global;\n}\n\n// @optimization Don't spread/unspread global for each element, do it in a batch\nfunction getUpdatedUser(global: GlobalState, userId: string, userUpdate: Partial) {\n const { byId } = global.users;\n const user = byId[userId];\n const shouldOmitMinInfo = userUpdate.isMin && user && !user.isMin;\n\n const updatedUser = {\n ...user,\n ...(shouldOmitMinInfo ? omit(userUpdate, ['isMin', 'accessHash']) : userUpdate),\n };\n\n if (!updatedUser.id || !updatedUser.type) {\n return undefined;\n }\n\n return updatedUser;\n}\n\nexport function deleteContact(global: GlobalState, userId: string): GlobalState {\n const { byId } = global.users;\n const { userIds } = global.contactList || {};\n\n global = {\n ...global,\n contactList: {\n userIds: userIds ? userIds.filter((id) => id !== userId) : MEMO_EMPTY_ARRAY,\n },\n };\n\n global = replaceUsers(global, {\n ...byId,\n [userId]: {\n ...byId[userId],\n isContact: undefined,\n },\n });\n\n return updateChat(global, userId, {\n settings: undefined,\n });\n}\n\nexport function updateUserSearch(\n global: GlobalState,\n searchStatePartial: Partial,\n) {\n return {\n ...global,\n userSearch: {\n ...global.userSearch,\n ...searchStatePartial,\n },\n };\n}\n\nexport function updateUserSearchFetchingStatus(\n global: GlobalState, newState: boolean,\n) {\n return updateUserSearch(global, {\n fetchingStatus: newState,\n });\n}\n\nexport function updateUserBlockedState(global: GlobalState, userId: string, isBlocked: boolean) {\n const { byId } = global.users;\n const user = byId[userId];\n if (!user || !user.fullInfo) {\n return global;\n }\n\n return updateUser(global, userId, {\n ...user,\n fullInfo: {\n ...user.fullInfo,\n isBlocked,\n },\n });\n}\n\nexport function replaceUserStatuses(global: GlobalState, newById: Record): GlobalState {\n return {\n ...global,\n users: {\n ...global.users,\n statusesById: newById,\n },\n };\n}\n\n// @optimization Allows to avoid redundant updates which cause a lot of renders\nexport function addUserStatuses(global: GlobalState, newById: Record): GlobalState {\n const { statusesById } = global.users;\n\n const newKeys = Object.keys(newById).filter((id) => !statusesById[id]);\n if (!newKeys.length) {\n return global;\n }\n\n global = replaceUserStatuses(global, {\n ...statusesById,\n ...pick(newById, newKeys),\n });\n\n return global;\n}\n\nexport function closeNewContactDialog(global: GlobalState): GlobalState {\n return {\n ...global,\n newContact: undefined,\n };\n}\n","import { GlobalState } from '../types';\nimport { GlobalSearchContent } from '../../types';\nimport { ApiGlobalMessageSearchType, ApiMessage } from '../../api/types';\nimport { areSortedArraysEqual } from '../../util/iteratees';\n\nconst getComplexKey = (message: ApiMessage) => `${message.chatId}_${message.id}`;\n\nexport function updateGlobalSearch(\n global: GlobalState,\n searchStatePartial: Partial,\n) {\n return {\n ...global,\n globalSearch: {\n ...global.globalSearch,\n ...searchStatePartial,\n },\n };\n}\n\nexport function updateGlobalSearchContent(\n global: GlobalState,\n currentContent: GlobalSearchContent | undefined,\n): GlobalState {\n return updateGlobalSearch(global, { currentContent });\n}\n\nexport function updateGlobalSearchResults(\n global: GlobalState,\n newFoundMessages: ApiMessage[],\n totalCount: number,\n type: ApiGlobalMessageSearchType,\n nextRate?: number,\n): GlobalState {\n const { resultsByType } = global.globalSearch || {};\n const newFoundMessagesById = newFoundMessages.reduce((result, message) => {\n result[getComplexKey(message)] = message;\n\n return result;\n }, {} as Record);\n const foundIdsForType = resultsByType?.[type]?.foundIds;\n\n if (foundIdsForType !== undefined\n && Object.keys(newFoundMessagesById).every(\n (newId) => foundIdsForType.includes(getComplexKey(newFoundMessagesById[newId])),\n )\n ) {\n return updateGlobalSearchFetchingStatus(global, { messages: false });\n }\n\n const prevFoundIds = foundIdsForType || [];\n const newFoundIds = newFoundMessages.map((message) => getComplexKey(message));\n const foundIds = Array.prototype.concat(prevFoundIds, newFoundIds);\n const foundOrPrevFoundIds = areSortedArraysEqual(prevFoundIds, foundIds) ? prevFoundIds : foundIds;\n\n global = updateGlobalSearchFetchingStatus(global, { messages: false });\n\n return updateGlobalSearch(global, {\n resultsByType: {\n ...(global.globalSearch || {}).resultsByType,\n [type]: {\n totalCount,\n nextOffsetId: nextRate,\n foundIds: foundOrPrevFoundIds,\n },\n },\n });\n}\n\nexport function updateGlobalSearchFetchingStatus(\n global: GlobalState, newState: { chats?: boolean; messages?: boolean },\n) {\n return updateGlobalSearch(global, {\n fetchingStatus: {\n ...global.globalSearch.fetchingStatus,\n ...newState,\n },\n });\n}\n","import { GlobalState } from '../types';\nimport { ApiMessageSearchType } from '../../api/types';\n\nimport { areSortedArraysEqual, unique } from '../../util/iteratees';\nimport { SharedMediaType } from '../../types';\nimport { buildChatThreadKey } from '../helpers';\n\ninterface TextSearchParams {\n isActive: boolean;\n query?: string;\n results?: {\n totalCount?: number;\n nextOffsetId?: number;\n foundIds?: number[];\n };\n}\n\ninterface MediaSearchParams {\n currentType?: SharedMediaType;\n resultsByType?: Partial>;\n}\n\nfunction replaceLocalTextSearch(\n global: GlobalState,\n chatThreadKey: string,\n searchParams: TextSearchParams,\n): GlobalState {\n return {\n ...global,\n localTextSearch: {\n byChatThreadKey: {\n ...global.localTextSearch.byChatThreadKey,\n [chatThreadKey]: searchParams,\n },\n },\n };\n}\n\nexport function updateLocalTextSearch(\n global: GlobalState,\n chatId: string,\n threadId: number,\n isActive: boolean,\n query?: string,\n): GlobalState {\n const chatThreadKey = buildChatThreadKey(chatId, threadId);\n\n return replaceLocalTextSearch(global, chatThreadKey, {\n ...global.localTextSearch.byChatThreadKey[chatThreadKey],\n isActive,\n query,\n });\n}\n\nexport function replaceLocalTextSearchResults(\n global: GlobalState,\n chatId: string,\n threadId: number,\n foundIds?: number[],\n totalCount?: number,\n nextOffsetId?: number,\n): GlobalState {\n const chatThreadKey = buildChatThreadKey(chatId, threadId);\n\n return replaceLocalTextSearch(global, chatThreadKey, {\n ...global.localTextSearch.byChatThreadKey[chatThreadKey],\n results: {\n foundIds,\n totalCount,\n nextOffsetId,\n },\n });\n}\n\nexport function updateLocalTextSearchResults(\n global: GlobalState,\n chatId: string,\n threadId: number,\n newFoundIds: number[],\n totalCount?: number,\n nextOffsetId?: number,\n): GlobalState {\n const chatThreadKey = buildChatThreadKey(chatId, threadId);\n const { results } = global.localTextSearch.byChatThreadKey[chatThreadKey] || {};\n const prevFoundIds = (results?.foundIds) || [];\n const foundIds = orderFoundIds(unique(Array.prototype.concat(prevFoundIds, newFoundIds)));\n const foundOrPrevFoundIds = areSortedArraysEqual(prevFoundIds, foundIds) ? prevFoundIds : foundIds;\n\n return replaceLocalTextSearchResults(global, chatId, threadId, foundOrPrevFoundIds, totalCount, nextOffsetId);\n}\n\nfunction replaceLocalMediaSearch(\n global: GlobalState,\n chatId: string,\n searchParams: MediaSearchParams,\n): GlobalState {\n return {\n ...global,\n localMediaSearch: {\n byChatId: {\n ...global.localMediaSearch.byChatId,\n [chatId]: searchParams,\n },\n },\n };\n}\n\nexport function updateLocalMediaSearchType(\n global: GlobalState,\n chatId: string,\n currentType: SharedMediaType | undefined,\n): GlobalState {\n return replaceLocalMediaSearch(global, chatId, {\n ...global.localMediaSearch.byChatId[chatId],\n currentType,\n });\n}\n\nexport function replaceLocalMediaSearchResults(\n global: GlobalState,\n chatId: string,\n type: ApiMessageSearchType,\n foundIds?: number[],\n totalCount?: number,\n nextOffsetId?: number,\n): GlobalState {\n return replaceLocalMediaSearch(global, chatId, {\n ...global.localMediaSearch.byChatId[chatId],\n resultsByType: {\n ...(global.localMediaSearch.byChatId[chatId] || {}).resultsByType,\n [type]: {\n foundIds,\n totalCount,\n nextOffsetId,\n },\n },\n });\n}\n\nexport function updateLocalMediaSearchResults(\n global: GlobalState,\n chatId: string,\n type: SharedMediaType,\n newFoundIds: number[],\n totalCount?: number,\n nextOffsetId?: number,\n): GlobalState {\n const { resultsByType } = global.localMediaSearch.byChatId[chatId] || {};\n const prevFoundIds = resultsByType?.[type] ? resultsByType[type]!.foundIds : [];\n const foundIds = orderFoundIds(unique(Array.prototype.concat(prevFoundIds, newFoundIds)));\n const foundOrPrevFoundIds = areSortedArraysEqual(prevFoundIds, foundIds) ? prevFoundIds : foundIds;\n\n return replaceLocalMediaSearchResults(global, chatId, type, foundOrPrevFoundIds, totalCount, nextOffsetId);\n}\n\nfunction orderFoundIds(listedIds: number[]) {\n return listedIds.sort((a, b) => b - a);\n}\n","import { GlobalState } from '../types';\nimport { ManagementProgress, ManagementState } from '../../types';\n\nexport function updateManagementProgress(global: GlobalState, progress: ManagementProgress): GlobalState {\n return {\n ...global,\n management: {\n ...global.management,\n progress,\n },\n };\n}\n\nexport function updateManagement(global: GlobalState, chatId: string, update: Partial): GlobalState {\n return {\n ...global,\n management: {\n ...global.management,\n byChatId: {\n ...global.management.byChatId,\n [chatId]: {\n ...(global.management.byChatId[chatId] || {}),\n ...update,\n },\n },\n },\n };\n}\n","import { GlobalState } from '../types';\nimport {\n ISettings, IThemeSettings, ThemeKey, NotifyException,\n} from '../../types';\nimport { ApiNotifyException } from '../../api/types';\nimport { updateUserBlockedState } from './users';\n\nexport function replaceSettings(global: GlobalState, newSettings?: Partial): GlobalState {\n return {\n ...global,\n settings: {\n ...global.settings,\n byKey: {\n ...global.settings.byKey,\n ...newSettings,\n },\n },\n };\n}\n\nexport function replaceThemeSettings(\n global: GlobalState, theme: ThemeKey, newSettings?: Partial,\n): GlobalState {\n return {\n ...global,\n settings: {\n ...global.settings,\n themes: {\n ...global.settings.themes,\n [theme]: {\n ...(global.settings.themes[theme] || {}),\n ...newSettings,\n },\n },\n },\n };\n}\n\nexport function addNotifyExceptions(\n global: GlobalState, notifyExceptions: ApiNotifyException[],\n): GlobalState {\n notifyExceptions.forEach((notifyException) => {\n const { chatId, ...exceptionData } = notifyException;\n global = addNotifyException(global, chatId, exceptionData);\n });\n\n return global;\n}\n\nexport function addNotifyException(\n global: GlobalState, id: string, notifyException: NotifyException,\n): GlobalState {\n return {\n ...global,\n settings: {\n ...global.settings,\n notifyExceptions: {\n ...global.settings.notifyExceptions,\n [id]: notifyException,\n },\n },\n };\n}\n\n// eslint-disable-next-line consistent-return\nexport function updateNotifySettings(\n global: GlobalState, peerType: 'contact' | 'group' | 'broadcast', isSilent?: boolean, shouldShowPreviews?: boolean,\n) {\n switch (peerType) {\n case 'contact':\n return replaceSettings(global, {\n ...(typeof isSilent !== 'undefined' && { hasPrivateChatsNotifications: !isSilent }),\n ...(typeof shouldShowPreviews !== 'undefined' && { hasPrivateChatsMessagePreview: shouldShowPreviews }),\n });\n case 'group':\n return replaceSettings(global, {\n ...(typeof isSilent !== 'undefined' && { hasGroupNotifications: !isSilent }),\n ...(typeof shouldShowPreviews !== 'undefined' && { hasGroupMessagePreview: shouldShowPreviews }),\n });\n case 'broadcast':\n return replaceSettings(global, {\n ...(typeof isSilent !== 'undefined' && { hasBroadcastNotifications: !isSilent }),\n ...(typeof shouldShowPreviews !== 'undefined' && { hasBroadcastMessagePreview: shouldShowPreviews }),\n });\n }\n}\n\nexport function addBlockedContact(global: GlobalState, contactId: string): GlobalState {\n global = updateUserBlockedState(global, contactId, true);\n\n return {\n ...global,\n blocked: {\n ...global.blocked,\n ids: [contactId, ...global.blocked.ids],\n totalCount: global.blocked.totalCount + 1,\n },\n };\n}\n\nexport function removeBlockedContact(global: GlobalState, contactId: string): GlobalState {\n global = updateUserBlockedState(global, contactId, false);\n\n return {\n ...global,\n blocked: {\n ...global.blocked,\n ids: global.blocked.ids.filter((id) => id !== contactId),\n totalCount: global.blocked.totalCount - 1,\n },\n };\n}\n","import { GlobalState } from '../types';\n\nexport function updateTwoFaSettings(\n global: GlobalState,\n update: GlobalState['twoFaSettings'],\n): GlobalState {\n return {\n ...global,\n twoFaSettings: {\n ...global.twoFaSettings,\n ...update,\n },\n };\n}\n","import { GlobalState } from '../types';\nimport { ShippingOption, PaymentStep } from '../../types';\nimport { ApiMessage, ApiPaymentForm, ApiReceipt } from '../../api/types';\n\nexport function updateShippingOptions(\n global: GlobalState,\n shippingOptions: ShippingOption[],\n): GlobalState {\n return {\n ...global,\n payment: {\n ...global.payment,\n shippingOptions,\n },\n };\n}\n\nexport function setRequestInfoId(global: GlobalState, id: string): GlobalState {\n return {\n ...global,\n payment: {\n ...global.payment,\n requestId: id,\n },\n };\n}\n\nexport function setPaymentStep(global: GlobalState, step: PaymentStep): GlobalState {\n return {\n ...global,\n payment: {\n ...global.payment,\n step,\n },\n };\n}\n\nexport function setInvoiceMessageInfo(global: GlobalState, message: ApiMessage): GlobalState {\n if (!message.content || !message.content.invoice) {\n return global;\n }\n const {\n title,\n text,\n amount,\n currency,\n isTest,\n photoUrl,\n } = message.content.invoice;\n return {\n ...global,\n payment: {\n ...global.payment,\n invoiceContent: {\n title,\n text,\n photoUrl,\n amount,\n currency,\n isTest,\n },\n },\n };\n}\n\nexport function setStripeCardInfo(global: GlobalState, cardInfo: { type: string; id: string }): GlobalState {\n return {\n ...global,\n payment: {\n ...global.payment,\n stripeCredentials: {\n ...cardInfo,\n },\n },\n };\n}\n\nexport function setSmartGlocalCardInfo(\n global: GlobalState,\n cardInfo: { type: string; token: string },\n): GlobalState {\n return {\n ...global,\n payment: {\n ...global.payment,\n smartGlocalCredentials: {\n ...cardInfo,\n },\n },\n };\n}\n\nexport function setPaymentForm(global: GlobalState, form: ApiPaymentForm): GlobalState {\n return {\n ...global,\n payment: {\n ...global.payment,\n ...form,\n },\n };\n}\n\nexport function setConfirmPaymentUrl(global: GlobalState, url?: string): GlobalState {\n return {\n ...global,\n payment: {\n ...global.payment,\n confirmPaymentUrl: url,\n },\n };\n}\n\nexport function setReceipt(\n global: GlobalState,\n receipt?: ApiReceipt,\n message?: ApiMessage,\n): GlobalState {\n if (!receipt || !message) {\n return {\n ...global,\n payment: {\n ...global.payment,\n receipt: undefined,\n },\n };\n }\n\n const { invoice: messageInvoice } = message.content;\n const { photoUrl, text, title } = (messageInvoice || {});\n\n return {\n ...global,\n payment: {\n ...global.payment,\n receipt: {\n ...receipt,\n photoUrl,\n text,\n title,\n },\n },\n };\n}\n\nexport function clearPayment(global: GlobalState): GlobalState {\n return {\n ...global,\n payment: {},\n };\n}\n\nexport function closeInvoice(global: GlobalState): GlobalState {\n return {\n ...global,\n payment: {\n ...global.payment,\n isPaymentModalOpen: false,\n },\n };\n}\n","import { GlobalState } from '../types';\nimport { ApiChannelStatistics, ApiGroupStatistics, StatisticsGraph } from '../../api/types';\n\nexport function updateStatistics(\n global: GlobalState, chatId: string, statistics: ApiChannelStatistics | ApiGroupStatistics,\n): GlobalState {\n return {\n ...global,\n statistics: {\n byChatId: {\n ...global.statistics.byChatId,\n [chatId]: statistics,\n },\n },\n };\n}\n\nexport function updateStatisticsGraph(\n global: GlobalState, chatId: string, name: string, update: StatisticsGraph,\n): GlobalState {\n return {\n ...global,\n statistics: {\n byChatId: {\n ...global.statistics.byChatId,\n [chatId]: {\n ...(global.statistics.byChatId[chatId] || {}),\n [name]: update,\n },\n },\n },\n };\n}\n","import {\n GlobalState, MessageList, MessageListType, Thread,\n} from '../types';\nimport {\n ApiMessage, ApiSponsoredMessage, ApiThreadInfo, MAIN_THREAD_ID,\n} from '../../api/types';\nimport { FocusDirection } from '../../types';\n\nimport {\n IS_TEST, MESSAGE_LIST_SLICE, MESSAGE_LIST_VIEWPORT_LIMIT, TMP_CHAT_ID,\n} from '../../config';\nimport {\n selectListedIds,\n selectChatMessages,\n selectViewportIds,\n selectOutlyingIds,\n selectPinnedIds,\n selectThreadInfo,\n selectMessageIdsByGroupId,\n selectScheduledMessages,\n selectScheduledIds,\n selectCurrentMessageIds,\n selectChatMessage,\n selectCurrentMessageList,\n} from '../selectors';\nimport {\n areSortedArraysEqual, omit, pickTruthy, unique,\n} from '../../util/iteratees';\n\ntype MessageStoreSections = {\n byId: Record;\n threadsById: Record;\n};\n\nexport function updateCurrentMessageList(\n global: GlobalState,\n chatId: string | undefined,\n threadId: number = MAIN_THREAD_ID,\n type: MessageListType = 'thread',\n shouldReplaceHistory?: boolean,\n): GlobalState {\n const { messageLists } = global.messages;\n let newMessageLists: MessageList[] = messageLists;\n if (shouldReplaceHistory || IS_TEST) {\n newMessageLists = chatId ? [{ chatId, threadId, type }] : [];\n } else if (chatId) {\n const last = messageLists[messageLists.length - 1];\n if (!last || last.chatId !== chatId || last.threadId !== threadId || last.type !== type) {\n if (last && last.chatId === TMP_CHAT_ID) {\n newMessageLists = [...messageLists.slice(0, -1), { chatId, threadId, type }];\n } else {\n newMessageLists = [...messageLists, { chatId, threadId, type }];\n }\n }\n } else {\n newMessageLists = messageLists.slice(0, -1);\n }\n\n return {\n ...global,\n messages: {\n ...global.messages,\n messageLists: newMessageLists,\n },\n };\n}\n\nfunction replaceChatMessages(global: GlobalState, chatId: string, newById: Record): GlobalState {\n return updateMessageStore(global, chatId, {\n byId: newById,\n });\n}\n\nexport function updateThread(\n global: GlobalState, chatId: string, threadId: number, threadUpdate: Partial,\n): GlobalState {\n const current = global.messages.byChatId[chatId];\n\n return updateMessageStore(global, chatId, {\n threadsById: {\n ...(current?.threadsById),\n [threadId]: {\n ...(current?.threadsById[threadId]),\n ...threadUpdate,\n },\n },\n });\n}\n\nfunction updateMessageStore(\n global: GlobalState, chatId: string, update: Partial,\n): GlobalState {\n const current = global.messages.byChatId[chatId] || { byId: {}, threadsById: {} };\n\n return {\n ...global,\n messages: {\n ...global.messages,\n byChatId: {\n ...global.messages.byChatId,\n [chatId]: {\n ...current,\n ...update,\n },\n },\n },\n };\n}\n\nexport function replaceThreadParam(\n global: GlobalState, chatId: string, threadId: number, paramName: T, newValue: Thread[T] | undefined,\n) {\n return updateThread(global, chatId, threadId, { [paramName]: newValue });\n}\n\nexport function addMessages(\n global: GlobalState, messages: ApiMessage[],\n): GlobalState {\n const addedByChatId = messages.reduce((messagesByChatId, message: ApiMessage) => {\n if (!messagesByChatId[message.chatId]) {\n messagesByChatId[message.chatId] = {};\n }\n messagesByChatId[message.chatId][message.id] = message;\n\n return messagesByChatId;\n }, {} as Record>);\n\n Object.keys(addedByChatId).forEach((chatId) => {\n global = addChatMessagesById(global, chatId, addedByChatId[chatId]);\n });\n\n return global;\n}\n\nexport function addChatMessagesById(\n global: GlobalState, chatId: string, newById: Record,\n): GlobalState {\n const byId = selectChatMessages(global, chatId);\n\n if (byId && Object.keys(newById).every((newId) => Boolean(byId[Number(newId)]))) {\n return global;\n }\n\n return replaceChatMessages(global, chatId, {\n ...newById,\n ...byId,\n });\n}\n\nexport function updateChatMessage(\n global: GlobalState, chatId: string, messageId: number, messageUpdate: Partial,\n): GlobalState {\n const byId = selectChatMessages(global, chatId) || {};\n const message = byId[messageId];\n const updatedMessage = {\n ...message,\n ...messageUpdate,\n };\n\n if (!updatedMessage.id) {\n return global;\n }\n\n return replaceChatMessages(global, chatId, {\n ...byId,\n [messageId]: updatedMessage,\n });\n}\n\nexport function updateScheduledMessage(\n global: GlobalState, chatId: string, messageId: number, messageUpdate: Partial,\n): GlobalState {\n const byId = selectScheduledMessages(global, chatId) || {};\n const message = byId[messageId];\n const updatedMessage = {\n ...message,\n ...messageUpdate,\n };\n\n if (!updatedMessage.id) {\n return global;\n }\n\n return replaceScheduledMessages(global, chatId, {\n ...byId,\n [messageId]: updatedMessage,\n });\n}\n\nexport function deleteChatMessages(\n global: GlobalState,\n chatId: string,\n messageIds: number[],\n): GlobalState {\n const byId = selectChatMessages(global, chatId);\n if (!byId) {\n return global;\n }\n const newById = omit(byId, messageIds);\n const deletedForwardedPosts = Object.values(pickTruthy(byId, messageIds)).filter(\n ({ forwardInfo }) => forwardInfo?.isLinkedChannelPost,\n );\n\n const threadIds = Object.keys(global.messages.byChatId[chatId].threadsById).map(Number);\n threadIds.forEach((threadId) => {\n const threadInfo = selectThreadInfo(global, chatId, threadId);\n\n let listedIds = selectListedIds(global, chatId, threadId);\n let outlyingIds = selectOutlyingIds(global, chatId, threadId);\n let viewportIds = selectViewportIds(global, chatId, threadId);\n let pinnedIds = selectPinnedIds(global, chatId);\n let newMessageCount = threadInfo?.messagesCount;\n\n messageIds.forEach((messageId) => {\n if (listedIds && listedIds.includes(messageId)) {\n listedIds = listedIds.filter((id) => id !== messageId);\n if (newMessageCount !== undefined) newMessageCount -= 1;\n }\n\n if (outlyingIds && outlyingIds.includes(messageId)) {\n outlyingIds = outlyingIds.filter((id) => id !== messageId);\n }\n\n if (viewportIds && viewportIds.includes(messageId)) {\n viewportIds = viewportIds.filter((id) => id !== messageId);\n }\n\n if (pinnedIds && pinnedIds.includes(messageId)) {\n pinnedIds = pinnedIds.filter((id) => id !== messageId);\n }\n });\n\n global = replaceThreadParam(global, chatId, threadId, 'listedIds', listedIds);\n global = replaceThreadParam(global, chatId, threadId, 'outlyingIds', outlyingIds);\n global = replaceThreadParam(global, chatId, threadId, 'viewportIds', viewportIds);\n global = replaceThreadParam(global, chatId, threadId, 'pinnedIds', pinnedIds);\n\n if (threadInfo && newMessageCount !== undefined) {\n global = replaceThreadParam(global, chatId, threadId, 'threadInfo', {\n ...threadInfo,\n messagesCount: newMessageCount,\n });\n }\n });\n\n if (deletedForwardedPosts.length) {\n const currentMessageList = selectCurrentMessageList(global);\n const canDeleteCurrentThread = currentMessageList && currentMessageList.chatId === chatId\n && currentMessageList.type === 'thread';\n const currentThreadId = currentMessageList?.threadId;\n\n deletedForwardedPosts.forEach((message) => {\n const { fromChatId, fromMessageId } = message.forwardInfo!;\n const originalPost = selectChatMessage(global, fromChatId!, fromMessageId!);\n\n if (canDeleteCurrentThread && currentThreadId === fromMessageId) {\n global = updateCurrentMessageList(global, chatId);\n }\n if (originalPost) {\n global = updateChatMessage(global, fromChatId!, fromMessageId!, { threadInfo: undefined });\n }\n });\n }\n\n global = replaceChatMessages(global, chatId, newById);\n\n return global;\n}\n\nexport function deleteChatScheduledMessages(\n global: GlobalState,\n chatId: string,\n messageIds: number[],\n): GlobalState {\n const byId = selectScheduledMessages(global, chatId);\n if (!byId) {\n return global;\n }\n const newById = omit(byId, messageIds);\n\n let scheduledIds = selectScheduledIds(global, chatId);\n if (scheduledIds) {\n messageIds.forEach((messageId) => {\n if (scheduledIds!.includes(messageId)) {\n scheduledIds = scheduledIds!.filter((id) => id !== messageId);\n }\n });\n global = replaceThreadParam(global, chatId, MAIN_THREAD_ID, 'scheduledIds', scheduledIds);\n }\n\n global = replaceScheduledMessages(global, chatId, newById);\n\n return global;\n}\n\nexport function updateListedIds(\n global: GlobalState,\n chatId: string,\n threadId: number,\n idsUpdate: number[],\n): GlobalState {\n const listedIds = selectListedIds(global, chatId, threadId);\n const newIds = listedIds?.length\n ? idsUpdate.filter((id) => !listedIds.includes(id))\n : idsUpdate;\n\n if (listedIds && !newIds.length) {\n return global;\n }\n\n return replaceThreadParam(global, chatId, threadId, 'listedIds', orderHistoryIds([\n ...(listedIds || []),\n ...newIds,\n ]));\n}\n\nexport function updateOutlyingIds(\n global: GlobalState,\n chatId: string,\n threadId: number,\n idsUpdate: number[],\n): GlobalState {\n const outlyingIds = selectOutlyingIds(global, chatId, threadId);\n const newIds = outlyingIds?.length\n ? idsUpdate.filter((id) => !outlyingIds.includes(id))\n : idsUpdate;\n\n if (outlyingIds && !newIds.length) {\n return global;\n }\n\n return replaceThreadParam(global, chatId, threadId, 'outlyingIds', orderHistoryIds([\n ...(outlyingIds || []),\n ...newIds,\n ]));\n}\n\nfunction orderHistoryIds(listedIds: number[]) {\n return listedIds.sort((a, b) => a - b);\n}\n\nexport function addViewportId(\n global: GlobalState,\n chatId: string,\n threadId: number,\n newId: number,\n): GlobalState {\n const viewportIds = selectViewportIds(global, chatId, threadId) || [];\n if (viewportIds.includes(newId)) {\n return global;\n }\n\n const newIds = orderHistoryIds([\n ...(\n viewportIds.length < MESSAGE_LIST_VIEWPORT_LIMIT\n ? viewportIds\n : viewportIds.slice(-(MESSAGE_LIST_SLICE / 2))\n ),\n newId,\n ]);\n\n return replaceThreadParam(global, chatId, threadId, 'viewportIds', newIds);\n}\n\nexport function safeReplaceViewportIds(\n global: GlobalState,\n chatId: string,\n threadId: number,\n newViewportIds: number[],\n): GlobalState {\n const currentIds = selectViewportIds(global, chatId, threadId) || [];\n const newIds = orderHistoryIds(newViewportIds);\n\n return replaceThreadParam(\n global,\n chatId,\n threadId,\n 'viewportIds',\n areSortedArraysEqual(currentIds, newIds) ? currentIds : newIds,\n );\n}\n\nexport function updateThreadInfo(\n global: GlobalState, chatId: string, threadId: number, update: Partial | undefined,\n): GlobalState {\n const newThreadInfo = {\n ...(selectThreadInfo(global, chatId, threadId) as ApiThreadInfo),\n ...update,\n };\n\n if (!newThreadInfo.threadId) {\n return global;\n }\n\n return replaceThreadParam(global, chatId, threadId, 'threadInfo', newThreadInfo);\n}\n\nexport function updateThreadInfos(\n global: GlobalState, chatId: string, updates: Partial[],\n): GlobalState {\n updates.forEach((update) => {\n global = updateThreadInfo(global, update.chatId!, update.threadId!, update);\n });\n\n return global;\n}\n\nexport function replaceScheduledMessages(\n global: GlobalState, chatId: string, newById: Record,\n): GlobalState {\n return updateScheduledMessages(global, chatId, {\n byId: newById,\n });\n}\n\nfunction updateScheduledMessages(\n global: GlobalState, chatId: string, update: Partial<{ byId: Record }>,\n): GlobalState {\n const current = global.scheduledMessages.byChatId[chatId] || { byId: {}, hash: 0 };\n\n return {\n ...global,\n scheduledMessages: {\n byChatId: {\n ...global.scheduledMessages.byChatId,\n [chatId]: {\n ...current,\n ...update,\n },\n },\n },\n };\n}\n\nexport function updateFocusedMessage(\n global: GlobalState, chatId?: string, messageId?: number, noHighlight = false, isResizingContainer = false,\n): GlobalState {\n return {\n ...global,\n focusedMessage: {\n ...global.focusedMessage,\n chatId,\n messageId,\n noHighlight,\n isResizingContainer,\n },\n };\n}\n\nexport function updateSponsoredMessage(\n global: GlobalState, chatId: string, message: ApiSponsoredMessage,\n): GlobalState {\n return {\n ...global,\n messages: {\n ...global.messages,\n sponsoredByChatId: {\n ...global.messages.sponsoredByChatId,\n [chatId]: message,\n },\n },\n };\n}\n\nexport function updateFocusDirection(\n global: GlobalState, direction?: FocusDirection,\n): GlobalState {\n return {\n ...global,\n focusedMessage: {\n ...global.focusedMessage,\n direction,\n },\n };\n}\n\nexport function enterMessageSelectMode(\n global: GlobalState,\n chatId: string,\n messageId?: number | number[],\n): GlobalState {\n const messageIds = messageId ? Array.prototype.concat([], messageId) : [];\n return {\n ...global,\n selectedMessages: {\n chatId,\n messageIds,\n },\n };\n}\n\nexport function toggleMessageSelection(\n global: GlobalState,\n chatId: string,\n threadId: number,\n messageListType: MessageListType,\n messageId: number,\n groupedId?: string,\n childMessageIds?: number[],\n withShift = false,\n): GlobalState {\n const { selectedMessages: oldSelectedMessages } = global;\n if (groupedId) {\n childMessageIds = selectMessageIdsByGroupId(global, chatId, groupedId);\n }\n const selectedMessageIds = childMessageIds || [messageId];\n if (!oldSelectedMessages) {\n return enterMessageSelectMode(global, chatId, selectedMessageIds);\n }\n\n const { messageIds } = oldSelectedMessages;\n\n let newMessageIds;\n const newSelectedMessageIds = selectedMessageIds.filter((id) => !messageIds.includes(id));\n if (newSelectedMessageIds && !newSelectedMessageIds.length) {\n newMessageIds = messageIds.filter((id) => !selectedMessageIds.includes(id));\n } else if (withShift && messageIds.length) {\n const viewportIds = selectCurrentMessageIds(global, chatId, threadId, messageListType)!;\n const prevIndex = viewportIds.indexOf(messageIds[messageIds.length - 1]);\n const currentIndex = viewportIds.indexOf(messageId);\n const from = Math.min(prevIndex, currentIndex);\n const to = Math.max(prevIndex, currentIndex);\n const slice = viewportIds.slice(from, to + 1);\n newMessageIds = unique([...messageIds, ...slice]);\n } else {\n newMessageIds = [...messageIds, ...newSelectedMessageIds];\n }\n\n if (!newMessageIds.length) {\n return exitMessageSelectMode(global);\n }\n\n return {\n ...global,\n selectedMessages: {\n ...oldSelectedMessages,\n messageIds: newMessageIds,\n },\n };\n}\n\nexport function exitMessageSelectMode(global: GlobalState): GlobalState {\n return {\n ...global,\n selectedMessages: undefined,\n };\n}\n\nexport function updateThreadUnreadFromForwardedMessage(\n global: GlobalState,\n originMessage: ApiMessage,\n chatId: string,\n lastMessageId: number,\n isDeleting?: boolean,\n) {\n const { channelPostId, fromChatId } = originMessage.forwardInfo || {};\n if (channelPostId && fromChatId) {\n const threadInfoOld = selectThreadInfo(global, chatId, channelPostId);\n if (threadInfoOld) {\n global = replaceThreadParam(global, chatId, channelPostId, 'threadInfo', {\n ...threadInfoOld,\n lastMessageId,\n messagesCount: threadInfoOld.messagesCount + (isDeleting ? -1 : 1),\n });\n }\n }\n return global;\n}\n","import { ApiChat, MAIN_THREAD_ID } from '../../api/types';\nimport { GlobalState } from '../types';\n\nimport {\n getPrivateChatUserId, isChatChannel, isUserId, isHistoryClearMessage, isUserBot, isUserOnline,\n} from '../helpers';\nimport { selectUser } from './users';\nimport {\n ALL_FOLDER_ID, ARCHIVED_FOLDER_ID, MEMBERS_LOAD_SLICE, SERVICE_NOTIFICATIONS_USER_ID,\n} from '../../config';\n\nexport function selectChat(global: GlobalState, chatId: string): ApiChat | undefined {\n return global.chats.byId[chatId];\n}\n\nexport function selectChatUser(global: GlobalState, chat: ApiChat) {\n const userId = getPrivateChatUserId(chat);\n if (!userId) {\n return false;\n }\n\n return selectUser(global, userId);\n}\n\nexport function selectIsChatWithSelf(global: GlobalState, chatId: string) {\n return chatId === global.currentUserId;\n}\n\nexport function selectIsChatWithBot(global: GlobalState, chat: ApiChat) {\n const user = selectChatUser(global, chat);\n return user && isUserBot(user);\n}\n\nexport function selectSupportChat(global: GlobalState) {\n return Object.values(global.chats.byId).find(({ isSupport }: ApiChat) => isSupport);\n}\n\nexport function selectChatOnlineCount(global: GlobalState, chat: ApiChat) {\n if (isUserId(chat.id) || isChatChannel(chat) || !chat.fullInfo) {\n return undefined;\n }\n\n if (!chat.fullInfo.members || chat.fullInfo.members.length === MEMBERS_LOAD_SLICE) {\n return chat.fullInfo.onlineCount;\n }\n\n return chat.fullInfo.members.reduce((onlineCount, { userId }) => {\n if (\n userId !== global.currentUserId\n && global.users.byId[userId]\n && isUserOnline(global.users.byId[userId], global.users.statusesById[userId])\n ) {\n return onlineCount + 1;\n }\n\n return onlineCount;\n }, 0);\n}\n\nexport function selectChatBot(global: GlobalState, chatId: string) {\n const chat = selectChat(global, chatId);\n const userId = chat && getPrivateChatUserId(chat);\n const user = userId && selectUser(global, userId);\n if (!user || !isUserBot(user)) {\n return undefined;\n }\n\n return user;\n}\n\nexport function selectIsChatBotNotStarted(global: GlobalState, chatId: string) {\n const chat = selectChat(global, chatId);\n const bot = selectChatBot(global, chatId);\n if (!chat || !bot) {\n return false;\n }\n\n if (chat.lastMessage && isHistoryClearMessage(chat.lastMessage)) {\n return true;\n }\n\n const messageInfo = global.messages.byChatId[chatId];\n if (!messageInfo) {\n return false;\n }\n\n const { listedIds } = messageInfo.threadsById[MAIN_THREAD_ID] || {};\n return listedIds && !listedIds.length;\n}\n\nexport function selectAreActiveChatsLoaded(global: GlobalState): boolean {\n return Boolean(global.chats.listIds.active);\n}\n\nexport function selectIsChatListed(global: GlobalState, chatId: string, type?: 'active' | 'archived'): boolean {\n const { listIds } = global.chats;\n if (type) {\n const targetList = listIds[type];\n return Boolean(targetList && targetList.includes(chatId));\n }\n\n return Object.values(listIds).some((list) => list && list.includes(chatId));\n}\n\nexport function selectChatListType(global: GlobalState, chatId: string): 'active' | 'archived' | undefined {\n const chat = selectChat(global, chatId);\n if (!chat || !selectIsChatListed(global, chatId)) {\n return undefined;\n }\n\n return chat.folderId === ARCHIVED_FOLDER_ID ? 'archived' : 'active';\n}\n\nexport function selectChatFolder(global: GlobalState, folderId: number) {\n return global.chatFolders.byId[folderId];\n}\n\nexport function selectTotalChatCount(global: GlobalState, listType: 'active' | 'archived'): number {\n const { totalCount } = global.chats;\n const allChatsCount = totalCount.all;\n const archivedChatsCount = totalCount.archived || 0;\n\n if (listType === 'archived') {\n return archivedChatsCount;\n }\n\n return allChatsCount ? allChatsCount - archivedChatsCount : 0;\n}\n\nexport function selectIsChatPinned(global: GlobalState, chatId: string, folderId = ALL_FOLDER_ID): boolean {\n const { active, archived } = global.chats.orderedPinnedIds;\n\n if (folderId === ALL_FOLDER_ID) {\n return Boolean(active?.includes(chatId));\n }\n\n if (folderId === ARCHIVED_FOLDER_ID) {\n return Boolean(archived?.includes(chatId));\n }\n\n const { byId: chatFoldersById } = global.chatFolders;\n\n const { pinnedChatIds } = chatFoldersById[folderId] || {};\n return Boolean(pinnedChatIds?.includes(chatId));\n}\n\n// Slow, not to be used in `withGlobal`\nexport function selectChatByUsername(global: GlobalState, username: string) {\n const usernameLowered = username.toLowerCase();\n return Object.values(global.chats.byId).find(\n (chat) => chat.username && chat.username.toLowerCase() === usernameLowered,\n );\n}\n\nexport function selectIsServiceChatReady(global: GlobalState) {\n return Boolean(selectChat(global, SERVICE_NOTIFICATIONS_USER_ID));\n}\n\nexport function selectSendAs(global: GlobalState, chatId: string) {\n const chat = selectChat(global, chatId);\n if (!chat) return undefined;\n\n const id = chat?.fullInfo?.sendAsId;\n if (!id) return undefined;\n\n return selectUser(global, id) || selectChat(global, id);\n}\n","import { GlobalState } from '../types';\nimport { ApiSticker } from '../../api/types';\n\nexport function selectIsStickerFavorite(global: GlobalState, sticker: ApiSticker) {\n const { stickers } = global.stickers.favorite;\n return stickers && stickers.some(({ id }) => id === sticker.id);\n}\n\nexport function selectCurrentStickerSearch(global: GlobalState) {\n return global.stickers.search;\n}\n\nexport function selectCurrentGifSearch(global: GlobalState) {\n return global.gifs.search;\n}\n\nexport function selectStickerSet(global: GlobalState, id: string) {\n return global.stickers.setsById[id];\n}\n\nexport function selectStickerSetByShortName(global: GlobalState, shortName: string) {\n return Object.values(global.stickers.setsById).find((l) => l.shortName.toLowerCase() === shortName.toLowerCase());\n}\n\nexport function selectStickersForEmoji(global: GlobalState, emoji: string) {\n const stickerSets = Object.values(global.stickers.setsById);\n let stickersForEmoji: ApiSticker[] = [];\n // Favorites\n global.stickers.favorite.stickers.forEach((sticker) => {\n if (sticker.emoji === emoji) stickersForEmoji.push(sticker);\n });\n\n // Added sets\n stickerSets.forEach(({ packs }) => {\n if (!packs) {\n return;\n }\n\n stickersForEmoji = stickersForEmoji.concat(packs[emoji] || [], packs[cleanEmoji(emoji)] || []);\n });\n return stickersForEmoji;\n}\n\nfunction cleanEmoji(emoji: string) {\n // Some emojis (❤️ for example) with a service symbol 'VARIATION SELECTOR-16' are not recognized as animated\n return emoji.replace('\\ufe0f', '');\n}\n\nexport function selectAnimatedEmoji(global: GlobalState, emoji: string) {\n const { animatedEmojis } = global;\n if (!animatedEmojis || !animatedEmojis.stickers) {\n return undefined;\n }\n\n const cleanedEmoji = cleanEmoji(emoji);\n\n return animatedEmojis.stickers.find((sticker) => sticker.emoji === emoji || sticker.emoji === cleanedEmoji);\n}\n\nexport function selectAnimatedEmojiEffect(global: GlobalState, emoji: string) {\n const { animatedEmojiEffects } = global;\n if (!animatedEmojiEffects || !animatedEmojiEffects.stickers) {\n return undefined;\n }\n\n const cleanedEmoji = cleanEmoji(emoji);\n\n return animatedEmojiEffects.stickers.find((sticker) => sticker.emoji === emoji || sticker.emoji === cleanedEmoji);\n}\n\nexport function selectAnimatedEmojiSound(global: GlobalState, emoji: string) {\n return global?.appConfig?.emojiSounds[cleanEmoji(emoji)];\n}\n\nexport function selectLocalAnimatedEmoji(global: GlobalState, emoji: string) {\n const cleanedEmoji = cleanEmoji(emoji);\n\n return cleanedEmoji === '🍑' ? 'Peach' : (cleanedEmoji === '🍆' ? 'Eggplant' : undefined);\n}\n\nexport function selectLocalAnimatedEmojiEffect(emoji: string) {\n return emoji === 'Eggplant' ? 'Cumshot' : undefined;\n}\n\nexport function selectLocalAnimatedEmojiEffectByName(name: string) {\n return name === 'Cumshot' ? '🍆' : undefined;\n}\n","import { GlobalState, MessageListType, Thread } from '../types';\nimport {\n ApiChat,\n ApiMessage,\n ApiMessageOutgoingStatus,\n ApiUser,\n MAIN_THREAD_ID,\n} from '../../api/types';\n\nimport { LOCAL_MESSAGE_ID_BASE, REPLIES_USER_ID, SERVICE_NOTIFICATIONS_USER_ID } from '../../config';\nimport {\n selectChat, selectChatBot, selectIsChatWithBot, selectIsChatWithSelf,\n} from './chats';\nimport { selectIsUserOrChatContact, selectUser, selectUserStatus } from './users';\nimport {\n getSendingState,\n isChatChannel,\n isMessageLocal,\n isUserId,\n isForwardedMessage,\n getCanPostInChat,\n isUserRightBanned,\n getHasAdminRight,\n isChatBasicGroup,\n isCommonBoxChat,\n isServiceNotificationMessage,\n isOwnMessage,\n isActionMessage,\n isChatGroup,\n isChatSuperGroup,\n getMessageVideo,\n getMessageWebPageVideo,\n getMessagePhoto,\n getMessageAudio,\n getMessageVoice,\n getMessageDocument,\n getMessageWebPagePhoto,\n} from '../helpers';\nimport { findLast } from '../../util/iteratees';\nimport { selectIsStickerFavorite } from './symbols';\nimport { getServerTime } from '../../util/serverTime';\nimport { MEMO_EMPTY_ARRAY } from '../../util/memo';\n\nconst MESSAGE_EDIT_ALLOWED_TIME = 172800; // 48 hours\n\nexport function selectCurrentMessageList(global: GlobalState) {\n const { messageLists } = global.messages;\n\n if (messageLists.length) {\n return messageLists[messageLists.length - 1];\n }\n\n return undefined;\n}\n\nexport function selectCurrentChat(global: GlobalState) {\n const { chatId } = selectCurrentMessageList(global) || {};\n\n return chatId ? selectChat(global, chatId) : undefined;\n}\n\nexport function selectChatMessages(global: GlobalState, chatId: string) {\n return global.messages.byChatId[chatId]?.byId;\n}\n\nexport function selectScheduledMessages(global: GlobalState, chatId: string) {\n return global.scheduledMessages.byChatId[chatId]?.byId;\n}\n\nexport function selectThreadParam(\n global: GlobalState,\n chatId: string,\n threadId: number,\n key: K,\n) {\n const messageInfo = global.messages.byChatId[chatId];\n if (!messageInfo) {\n return undefined;\n }\n\n const thread = messageInfo.threadsById[threadId];\n if (!thread) {\n return undefined;\n }\n\n return thread[key];\n}\n\nexport function selectListedIds(global: GlobalState, chatId: string, threadId: number) {\n return selectThreadParam(global, chatId, threadId, 'listedIds');\n}\n\nexport function selectOutlyingIds(global: GlobalState, chatId: string, threadId: number) {\n return selectThreadParam(global, chatId, threadId, 'outlyingIds');\n}\n\nexport function selectCurrentMessageIds(\n global: GlobalState, chatId: string, threadId: number, messageListType: MessageListType,\n) {\n switch (messageListType) {\n case 'thread':\n return selectViewportIds(global, chatId, threadId);\n case 'pinned':\n return selectPinnedIds(global, chatId);\n case 'scheduled':\n return selectScheduledIds(global, chatId);\n }\n\n return undefined;\n}\n\nexport function selectViewportIds(global: GlobalState, chatId: string, threadId: number) {\n return selectThreadParam(global, chatId, threadId, 'viewportIds');\n}\n\nexport function selectPinnedIds(global: GlobalState, chatId: string) {\n return selectThreadParam(global, chatId, MAIN_THREAD_ID, 'pinnedIds');\n}\n\nexport function selectScheduledIds(global: GlobalState, chatId: string) {\n return selectThreadParam(global, chatId, MAIN_THREAD_ID, 'scheduledIds');\n}\n\nexport function selectScrollOffset(global: GlobalState, chatId: string, threadId: number) {\n return selectThreadParam(global, chatId, threadId, 'scrollOffset');\n}\n\nexport function selectReplyingToId(global: GlobalState, chatId: string, threadId: number) {\n return selectThreadParam(global, chatId, threadId, 'replyingToId');\n}\n\nexport function selectEditingId(global: GlobalState, chatId: string, threadId: number) {\n return selectThreadParam(global, chatId, threadId, 'editingId');\n}\n\nexport function selectEditingDraft(global: GlobalState, chatId: string, threadId: number) {\n return selectThreadParam(global, chatId, threadId, 'editingDraft');\n}\n\nexport function selectEditingScheduledId(global: GlobalState, chatId: string) {\n return selectThreadParam(global, chatId, MAIN_THREAD_ID, 'editingScheduledId');\n}\n\nexport function selectEditingScheduledDraft(global: GlobalState, chatId: string) {\n return selectThreadParam(global, chatId, MAIN_THREAD_ID, 'editingScheduledDraft');\n}\n\nexport function selectDraft(global: GlobalState, chatId: string, threadId: number) {\n return selectThreadParam(global, chatId, threadId, 'draft');\n}\n\nexport function selectNoWebPage(global: GlobalState, chatId: string, threadId: number) {\n return selectThreadParam(global, chatId, threadId, 'noWebPage');\n}\n\nexport function selectThreadInfo(global: GlobalState, chatId: string, threadId: number) {\n return selectThreadParam(global, chatId, threadId, 'threadInfo');\n}\n\nexport function selectFirstMessageId(global: GlobalState, chatId: string, threadId: number) {\n return selectThreadParam(global, chatId, threadId, 'firstMessageId');\n}\n\nexport function selectReplyStack(global: GlobalState, chatId: string, threadId: number) {\n return selectThreadParam(global, chatId, threadId, 'replyStack');\n}\n\nexport function selectThreadOriginChat(global: GlobalState, chatId: string, threadId: number) {\n if (threadId === MAIN_THREAD_ID) {\n return selectChat(global, chatId);\n }\n\n const threadInfo = selectThreadInfo(global, chatId, threadId);\n if (!threadInfo) {\n return undefined;\n }\n\n return selectChat(global, threadInfo.originChannelId || chatId);\n}\n\nexport function selectThreadTopMessageId(global: GlobalState, chatId: string, threadId: number) {\n if (threadId === MAIN_THREAD_ID) {\n return undefined;\n }\n\n const threadInfo = selectThreadInfo(global, chatId, threadId);\n if (!threadInfo) {\n return undefined;\n }\n\n return threadInfo.topMessageId;\n}\n\nexport function selectThreadByMessage(global: GlobalState, chatId: string, message: ApiMessage) {\n const messageInfo = global.messages.byChatId[chatId];\n if (!messageInfo) {\n return undefined;\n }\n\n const { replyToMessageId, replyToTopMessageId } = message;\n if (!replyToMessageId && !replyToTopMessageId) {\n return undefined;\n }\n\n return Object.values(messageInfo.threadsById).find((thread) => {\n return thread.threadInfo && (\n (replyToMessageId && replyToMessageId === thread.threadInfo.topMessageId)\n || (replyToTopMessageId && replyToTopMessageId === thread.threadInfo.topMessageId)\n );\n });\n}\n\nexport function selectIsMessageInCurrentMessageList(global: GlobalState, chatId: string, message: ApiMessage) {\n const currentMessageList = selectCurrentMessageList(global);\n if (!currentMessageList) {\n return false;\n }\n\n const { threadInfo } = selectThreadByMessage(global, chatId, message) || {};\n return (\n chatId === currentMessageList.chatId\n && (\n (currentMessageList.threadId === MAIN_THREAD_ID)\n || (threadInfo && currentMessageList.threadId === threadInfo.threadId)\n )\n );\n}\n\nexport function selectIsViewportNewest(global: GlobalState, chatId: string, threadId: number) {\n const viewportIds = selectViewportIds(global, chatId, threadId);\n if (!viewportIds || !viewportIds.length) {\n return true;\n }\n\n let lastMessageId: number;\n\n if (threadId === MAIN_THREAD_ID) {\n const chat = selectChat(global, chatId);\n if (!chat || !chat.lastMessage) {\n return true;\n }\n\n lastMessageId = chat.lastMessage.id;\n } else {\n const threadInfo = selectThreadInfo(global, chatId, threadId);\n if (!threadInfo || !threadInfo.lastMessageId) {\n return undefined;\n }\n\n lastMessageId = threadInfo.lastMessageId;\n }\n\n // Edge case: outgoing `lastMessage` is updated with a delay to optimize animation\n if (lastMessageId >= LOCAL_MESSAGE_ID_BASE && !selectChatMessage(global, chatId, lastMessageId)) {\n return true;\n }\n\n return viewportIds[viewportIds.length - 1] >= lastMessageId;\n}\n\nexport function selectChatMessage(global: GlobalState, chatId: string, messageId: number) {\n const chatMessages = selectChatMessages(global, chatId);\n\n return chatMessages ? chatMessages[messageId] : undefined;\n}\n\nexport function selectScheduledMessage(global: GlobalState, chatId: string, messageId: number) {\n const chatMessages = selectScheduledMessages(global, chatId);\n\n return chatMessages ? chatMessages[messageId] : undefined;\n}\n\nexport function selectEditingMessage(\n global: GlobalState, chatId: string, threadId: number, messageListType: MessageListType,\n) {\n if (messageListType === 'scheduled') {\n const messageId = selectEditingScheduledId(global, chatId);\n return messageId ? selectScheduledMessage(global, chatId, messageId) : undefined;\n } else {\n const messageId = selectEditingId(global, chatId, threadId);\n return messageId ? selectChatMessage(global, chatId, messageId) : undefined;\n }\n}\n\nexport function selectChatMessageByPollId(global: GlobalState, pollId: string) {\n let messageWithPoll: ApiMessage | undefined;\n\n // eslint-disable-next-line no-restricted-syntax\n for (const chatMessages of Object.values(global.messages.byChatId)) {\n const { byId } = chatMessages;\n messageWithPoll = Object.values(byId).find((message) => {\n return message.content.poll && message.content.poll.id === pollId;\n });\n if (messageWithPoll) {\n break;\n }\n }\n\n return messageWithPoll;\n}\n\nexport function selectFocusedMessageId(global: GlobalState, chatId: string) {\n const { chatId: focusedChatId, messageId } = global.focusedMessage || {};\n\n return focusedChatId === chatId ? messageId : undefined;\n}\n\nexport function selectIsMessageFocused(global: GlobalState, message: ApiMessage) {\n const focusedId = selectFocusedMessageId(global, message.chatId);\n\n return focusedId ? focusedId === message.id || focusedId === message.previousLocalId : false;\n}\n\nexport function selectIsMessageUnread(global: GlobalState, message: ApiMessage) {\n const { lastReadOutboxMessageId } = selectChat(global, message.chatId) || {};\n return isMessageLocal(message) || !lastReadOutboxMessageId || lastReadOutboxMessageId < message.id;\n}\n\nexport function selectOutgoingStatus(\n global: GlobalState, message: ApiMessage, isScheduledList = false,\n): ApiMessageOutgoingStatus {\n if (!selectIsMessageUnread(global, message) && !isScheduledList) {\n return 'read';\n }\n\n return getSendingState(message);\n}\n\nexport function selectSender(global: GlobalState, message: ApiMessage): ApiUser | ApiChat | undefined {\n const { senderId } = message;\n if (!senderId) {\n return undefined;\n }\n\n return isUserId(senderId) ? selectUser(global, senderId) : selectChat(global, senderId);\n}\n\nexport function selectForwardedSender(global: GlobalState, message: ApiMessage): ApiUser | ApiChat | undefined {\n const { forwardInfo } = message;\n if (!forwardInfo) {\n return undefined;\n }\n\n if (forwardInfo.isChannelPost && forwardInfo.fromChatId) {\n return selectChat(global, forwardInfo.fromChatId);\n } else if (forwardInfo.senderUserId) {\n return selectUser(global, forwardInfo.senderUserId) || selectChat(global, forwardInfo.senderUserId);\n }\n\n return undefined;\n}\n\nexport function selectAllowedMessageActions(global: GlobalState, message: ApiMessage, threadId: number) {\n const chat = selectChat(global, message.chatId);\n if (!chat || chat.isRestricted) {\n return {};\n }\n\n const isPrivate = isUserId(chat.id);\n const isChatWithSelf = selectIsChatWithSelf(global, message.chatId);\n const isBasicGroup = isChatBasicGroup(chat);\n const isSuperGroup = isChatSuperGroup(chat);\n const isChannel = isChatChannel(chat);\n const isLocal = isMessageLocal(message);\n const isServiceNotification = isServiceNotificationMessage(message);\n const isOwn = isOwnMessage(message);\n const isAction = isActionMessage(message);\n const { content } = message;\n\n const canEditMessagesIndefinitely = isChatWithSelf\n || (isSuperGroup && getHasAdminRight(chat, 'pinMessages'))\n || (isChannel && getHasAdminRight(chat, 'editMessages'));\n const isMessageEditable = (\n (\n canEditMessagesIndefinitely\n || getServerTime(global.serverTimeOffset) - message.date < MESSAGE_EDIT_ALLOWED_TIME\n ) && !(\n content.sticker || content.contact || content.poll || content.action || content.audio\n || (content.video?.isRound) || content.location\n )\n && !isForwardedMessage(message)\n && !message.viaBotId\n );\n\n const canReply = !isLocal && !isServiceNotification && getCanPostInChat(chat, threadId);\n\n const hasPinPermission = isPrivate || (\n chat.isCreator\n || (!isChannel && !isUserRightBanned(chat, 'pinMessages'))\n || getHasAdminRight(chat, 'pinMessages')\n );\n\n let canPin = !isLocal && !isServiceNotification && !isAction && hasPinPermission;\n let canUnpin = false;\n\n const pinnedMessageIds = selectPinnedIds(global, chat.id);\n\n if (canPin) {\n canUnpin = Boolean(pinnedMessageIds && pinnedMessageIds.includes(message.id));\n canPin = !canUnpin;\n }\n\n const canDelete = !isLocal && !isServiceNotification && (\n isPrivate\n || isOwn\n || isBasicGroup\n || chat.isCreator\n || getHasAdminRight(chat, 'deleteMessages')\n );\n\n const canReport = !isPrivate && !isOwn;\n\n const canDeleteForAll = canDelete && (\n (isPrivate && !isChatWithSelf)\n || (isBasicGroup && (\n isOwn || getHasAdminRight(chat, 'deleteMessages') || chat.isCreator\n ))\n );\n\n const canEdit = !isLocal && !isAction && isMessageEditable && (\n isOwn\n || (isChannel && (chat.isCreator || getHasAdminRight(chat, 'editMessages')))\n );\n\n const canForward = !isLocal && !isAction;\n\n const hasSticker = Boolean(message.content.sticker);\n const hasFavoriteSticker = hasSticker && selectIsStickerFavorite(global, message.content.sticker!);\n const canFaveSticker = !isAction && hasSticker && !hasFavoriteSticker;\n const canUnfaveSticker = !isAction && hasFavoriteSticker;\n const canCopy = !isAction;\n const canCopyLink = !isAction && (isChannel || isSuperGroup);\n const canSelect = !isAction;\n\n const canDownload = Boolean(content.webPage?.document || content.webPage?.video || content.webPage?.photo\n || content.audio || content.voice || content.photo || content.video || content.document || content.sticker);\n\n const canSaveGif = message.content.video?.isGif;\n\n const noOptions = [\n canReply,\n canEdit,\n canPin,\n canUnpin,\n canReport,\n canDelete,\n canDeleteForAll,\n canForward,\n canFaveSticker,\n canUnfaveSticker,\n canCopy,\n canCopyLink,\n canSelect,\n canDownload,\n canSaveGif,\n ].every((ability) => !ability);\n\n return {\n noOptions,\n canReply,\n canEdit,\n canPin,\n canUnpin,\n canReport,\n canDelete,\n canDeleteForAll,\n canForward,\n canFaveSticker,\n canUnfaveSticker,\n canCopy,\n canCopyLink,\n canSelect,\n canDownload,\n canSaveGif,\n };\n}\n\n// This selector always returns a new object which can not be safely used in shallow-equal checks\nexport function selectCanDeleteSelectedMessages(global: GlobalState) {\n const { messageIds: selectedMessageIds } = global.selectedMessages || {};\n const { chatId, threadId } = selectCurrentMessageList(global) || {};\n const chatMessages = chatId && selectChatMessages(global, chatId);\n if (!chatMessages || !selectedMessageIds || !threadId) {\n return {};\n }\n\n const messageActions = selectedMessageIds\n .map((id) => chatMessages[id] && selectAllowedMessageActions(global, chatMessages[id], threadId))\n .filter(Boolean);\n\n return {\n canDelete: messageActions.every((actions) => actions.canDelete),\n canDeleteForAll: messageActions.every((actions) => actions.canDeleteForAll),\n };\n}\n\nexport function selectCanReportSelectedMessages(global: GlobalState) {\n const { messageIds: selectedMessageIds } = global.selectedMessages || {};\n const { chatId, threadId } = selectCurrentMessageList(global) || {};\n const chatMessages = chatId && selectChatMessages(global, chatId);\n if (!chatMessages || !selectedMessageIds || !threadId) {\n return false;\n }\n\n const messageActions = selectedMessageIds\n .map((id) => chatMessages[id] && selectAllowedMessageActions(global, chatMessages[id], threadId))\n .filter(Boolean);\n\n return messageActions.every((actions) => actions.canReport);\n}\n\nexport function selectCanDownloadSelectedMessages(global: GlobalState) {\n const { messageIds: selectedMessageIds } = global.selectedMessages || {};\n const { chatId, threadId } = selectCurrentMessageList(global) || {};\n const chatMessages = chatId && selectChatMessages(global, chatId);\n if (!chatMessages || !selectedMessageIds || !threadId) {\n return false;\n }\n\n const messageActions = selectedMessageIds\n .map((id) => chatMessages[id] && selectAllowedMessageActions(global, chatMessages[id], threadId))\n .filter(Boolean);\n\n return messageActions.some((actions) => actions.canDownload);\n}\n\nexport function selectIsDownloading(global: GlobalState, message: ApiMessage) {\n const activeInChat = global.activeDownloads.byChatId[message.chatId];\n return activeInChat ? activeInChat.includes(message.id) : false;\n}\n\nexport function selectActiveDownloadIds(global: GlobalState, chatId: string) {\n return global.activeDownloads.byChatId[chatId] || MEMO_EMPTY_ARRAY;\n}\n\nexport function selectUploadProgress(global: GlobalState, message: ApiMessage) {\n return global.fileUploads.byMessageLocalId[message.previousLocalId || message.id]?.progress;\n}\n\nexport function selectRealLastReadId(global: GlobalState, chatId: string, threadId: number) {\n if (threadId === MAIN_THREAD_ID) {\n const chat = selectChat(global, chatId);\n if (!chat) {\n return undefined;\n }\n\n // `lastReadInboxMessageId` is empty for new chats\n if (!chat.lastReadInboxMessageId) {\n return undefined;\n }\n\n if (!chat.lastMessage) {\n return chat.lastReadInboxMessageId;\n }\n\n if (isMessageLocal(chat.lastMessage)) {\n return chat.lastMessage.id;\n }\n\n // Some previously read messages may be deleted\n return Math.min(chat.lastMessage.id, chat.lastReadInboxMessageId);\n } else {\n const threadInfo = selectThreadInfo(global, chatId, threadId);\n if (!threadInfo) {\n return undefined;\n }\n\n if (!threadInfo.lastReadInboxMessageId) {\n return threadInfo.topMessageId;\n }\n\n // Some previously read messages may be deleted\n return Math.min(threadInfo.lastReadInboxMessageId, threadInfo.lastMessageId || Infinity);\n }\n}\n\nexport function selectFirstUnreadId(global: GlobalState, chatId: string, threadId: number) {\n const chat = selectChat(global, chatId);\n\n if (threadId === MAIN_THREAD_ID) {\n if (!chat) {\n return undefined;\n }\n } else {\n const threadInfo = selectThreadInfo(global, chatId, threadId);\n if (!threadInfo\n || (threadInfo.lastMessageId !== undefined && threadInfo.lastMessageId === threadInfo.lastReadInboxMessageId)) {\n return undefined;\n }\n }\n\n const outlyingIds = selectOutlyingIds(global, chatId, threadId);\n const listedIds = selectListedIds(global, chatId, threadId);\n const byId = selectChatMessages(global, chatId);\n if (!byId || !(outlyingIds || listedIds)) {\n return undefined;\n }\n\n const lastReadId = selectRealLastReadId(global, chatId, threadId);\n if (!lastReadId && chat && chat.isNotJoined) {\n return undefined;\n }\n\n const lastReadServiceNotificationId = chatId === SERVICE_NOTIFICATIONS_USER_ID\n ? global.serviceNotifications.reduce((max, notification) => {\n return !notification.isUnread && notification.id > max ? notification.id : max;\n }, -1)\n : -1;\n\n function findAfterLastReadId(listIds: number[]) {\n return listIds.find((id) => {\n return (\n (!lastReadId || id > lastReadId)\n && byId[id]\n && (!byId[id].isOutgoing || byId[id].isFromScheduled)\n && id > lastReadServiceNotificationId\n );\n });\n }\n\n if (outlyingIds) {\n const found = findAfterLastReadId(outlyingIds);\n if (found) {\n return found;\n }\n }\n\n if (listedIds) {\n const found = findAfterLastReadId(listedIds);\n if (found) {\n return found;\n }\n }\n\n return undefined;\n}\n\nexport function selectIsPollResultsOpen(global: GlobalState) {\n const { pollResults } = global;\n return Boolean(pollResults.messageId);\n}\n\nexport function selectIsForwardModalOpen(global: GlobalState) {\n const { forwardMessages } = global;\n return Boolean(forwardMessages.isModalShown);\n}\n\nexport function selectCommonBoxChatId(global: GlobalState, messageId: number) {\n const fromLastMessage = Object.values(global.chats.byId).find((chat) => (\n isCommonBoxChat(chat) && chat.lastMessage && chat.lastMessage.id === messageId\n ));\n if (fromLastMessage) {\n return fromLastMessage.id;\n }\n\n const { byChatId } = global.messages;\n return Object.keys(byChatId).find((chatId) => {\n const chat = selectChat(global, chatId);\n return chat && isCommonBoxChat(chat) && byChatId[chat.id].byId[messageId];\n });\n}\n\nexport function selectIsInSelectMode(global: GlobalState) {\n const { selectedMessages } = global;\n\n return Boolean(selectedMessages);\n}\n\nexport function selectIsMessageSelected(global: GlobalState, messageId: number) {\n const { messageIds } = global.selectedMessages || {};\n if (!messageIds) {\n return false;\n }\n\n return messageIds.includes(messageId);\n}\n\nexport function selectForwardedMessageIdsByGroupId(global: GlobalState, chatId: string, groupedId: string) {\n const chatMessages = selectChatMessages(global, chatId);\n if (!chatMessages) {\n return undefined;\n }\n\n return Object.values(chatMessages)\n .filter((message) => message.groupedId === groupedId && message.forwardInfo)\n .map(({ forwardInfo }) => forwardInfo!.fromMessageId);\n}\n\nexport function selectMessageIdsByGroupId(global: GlobalState, chatId: string, groupedId: string) {\n const chatMessages = selectChatMessages(global, chatId);\n if (!chatMessages) {\n return undefined;\n }\n\n return Object.keys(chatMessages)\n .map(Number)\n .filter((id) => chatMessages[id].groupedId === groupedId);\n}\n\nexport function selectIsDocumentGroupSelected(global: GlobalState, chatId: string, groupedId: string) {\n const { messageIds: selectedIds } = global.selectedMessages || {};\n if (!selectedIds) {\n return false;\n }\n\n const groupIds = selectMessageIdsByGroupId(global, chatId, groupedId);\n return groupIds && groupIds.every((id) => selectedIds.includes(id));\n}\n\nexport function selectSelectedMessagesCount(global: GlobalState) {\n const { messageIds } = global.selectedMessages || {};\n\n return messageIds ? messageIds.length : 0;\n}\n\nexport function selectNewestMessageWithBotKeyboardButtons(\n global: GlobalState, chatId: string,\n): ApiMessage | undefined {\n const chat = selectChat(global, chatId);\n if (!chat) {\n return undefined;\n }\n\n if (!selectIsChatWithBot(global, chat)) {\n return undefined;\n }\n\n const chatMessages = selectChatMessages(global, chatId);\n const viewportIds = selectViewportIds(global, chatId, MAIN_THREAD_ID);\n if (!chatMessages || !viewportIds) {\n return undefined;\n }\n\n const messageId = findLast(viewportIds, (id) => {\n return !chatMessages[id].isOutgoing && Boolean(chatMessages[id].keyboardButtons);\n });\n\n const replyHideMessageId = findLast(viewportIds, (id) => {\n return Boolean(chatMessages[id].shouldHideKeyboardButtons);\n });\n\n if (messageId && replyHideMessageId && replyHideMessageId > messageId) {\n return undefined;\n }\n\n return messageId ? chatMessages[messageId] : undefined;\n}\n\nexport function selectCanAutoLoadMedia(global: GlobalState, message: ApiMessage) {\n const chat = selectChat(global, message.chatId);\n if (!chat) {\n return undefined;\n }\n\n const sender = selectSender(global, message);\n\n const isPhoto = Boolean(getMessagePhoto(message) || getMessageWebPagePhoto(message));\n const isVideo = Boolean(getMessageVideo(message) || getMessageWebPageVideo(message));\n const isFile = Boolean(getMessageAudio(message) || getMessageVoice(message) || getMessageDocument(message));\n\n const {\n canAutoLoadPhotoFromContacts,\n canAutoLoadPhotoInPrivateChats,\n canAutoLoadPhotoInGroups,\n canAutoLoadPhotoInChannels,\n canAutoLoadVideoFromContacts,\n canAutoLoadVideoInPrivateChats,\n canAutoLoadVideoInGroups,\n canAutoLoadVideoInChannels,\n canAutoLoadFileFromContacts,\n canAutoLoadFileInPrivateChats,\n canAutoLoadFileInGroups,\n canAutoLoadFileInChannels,\n } = global.settings.byKey;\n\n if (isPhoto) {\n return canAutoLoadMedia({\n global,\n chat,\n sender,\n canAutoLoadMediaFromContacts: canAutoLoadPhotoFromContacts,\n canAutoLoadMediaInPrivateChats: canAutoLoadPhotoInPrivateChats,\n canAutoLoadMediaInGroups: canAutoLoadPhotoInGroups,\n canAutoLoadMediaInChannels: canAutoLoadPhotoInChannels,\n });\n }\n\n if (isVideo) {\n return canAutoLoadMedia({\n global,\n chat,\n sender,\n canAutoLoadMediaFromContacts: canAutoLoadVideoFromContacts,\n canAutoLoadMediaInPrivateChats: canAutoLoadVideoInPrivateChats,\n canAutoLoadMediaInGroups: canAutoLoadVideoInGroups,\n canAutoLoadMediaInChannels: canAutoLoadVideoInChannels,\n });\n }\n\n if (isFile) {\n return canAutoLoadMedia({\n global,\n chat,\n sender,\n canAutoLoadMediaFromContacts: canAutoLoadFileFromContacts,\n canAutoLoadMediaInPrivateChats: canAutoLoadFileInPrivateChats,\n canAutoLoadMediaInGroups: canAutoLoadFileInGroups,\n canAutoLoadMediaInChannels: canAutoLoadFileInChannels,\n });\n }\n\n return true;\n}\n\nfunction canAutoLoadMedia({\n global,\n chat,\n sender,\n canAutoLoadMediaFromContacts,\n canAutoLoadMediaInPrivateChats,\n canAutoLoadMediaInGroups,\n canAutoLoadMediaInChannels,\n}: {\n global: GlobalState;\n chat: ApiChat;\n canAutoLoadMediaFromContacts: boolean;\n canAutoLoadMediaInPrivateChats: boolean;\n canAutoLoadMediaInGroups: boolean;\n canAutoLoadMediaInChannels: boolean;\n sender?: ApiChat | ApiUser;\n}) {\n const isMediaFromContact = Boolean(sender && (\n sender.id === global.currentUserId || selectIsUserOrChatContact(global, sender)\n ));\n\n return Boolean(\n (isMediaFromContact && canAutoLoadMediaFromContacts)\n || (!isMediaFromContact && canAutoLoadMediaInPrivateChats && isUserId(chat.id))\n || (canAutoLoadMediaInGroups && isChatGroup(chat))\n || (canAutoLoadMediaInChannels && isChatChannel(chat)),\n );\n}\n\nexport function selectCanAutoPlayMedia(global: GlobalState, message: ApiMessage) {\n const video = getMessageVideo(message) || getMessageWebPageVideo(message);\n if (!video) {\n return undefined;\n }\n\n const {\n canAutoPlayVideos,\n canAutoPlayGifs,\n } = global.settings.byKey;\n\n const asGif = video.isGif || video.isRound;\n\n return (canAutoPlayVideos && !asGif) || (canAutoPlayGifs && asGif);\n}\n\nexport function selectShouldLoopStickers(global: GlobalState) {\n return global.settings.byKey.shouldLoopStickers;\n}\n\nexport function selectLastServiceNotification(global: GlobalState) {\n const { serviceNotifications } = global;\n const maxId = Math.max(...serviceNotifications.map(({ id }) => id));\n\n return serviceNotifications.find(({ id }) => id === maxId);\n}\n\nexport function selectIsMessageProtected(global: GlobalState, message?: ApiMessage) {\n return message ? message.isProtected || selectChat(global, message.chatId)?.isProtected : false;\n}\n\nexport function selectHasProtectedMessage(global: GlobalState, chatId: string, messageIds?: number[]) {\n if (selectChat(global, chatId)?.isProtected) {\n return true;\n }\n\n if (!messageIds) {\n return false;\n }\n\n const messages = selectChatMessages(global, chatId);\n\n return messageIds.some((messageId) => messages[messageId]?.isProtected);\n}\n\nexport function selectSponsoredMessage(global: GlobalState, chatId: string) {\n const chat = selectChat(global, chatId);\n const message = chat && isChatChannel(chat) ? global.messages.sponsoredByChatId[chatId] : undefined;\n\n return message && message.expiresAt >= Math.round(Date.now() / 1000) ? message : undefined;\n}\n\nexport function selectDefaultReaction(global: GlobalState, chatId: string) {\n if (chatId === SERVICE_NOTIFICATIONS_USER_ID) return undefined;\n\n const isPrivate = isUserId(chatId);\n const defaultReaction = global.appConfig?.defaultReaction;\n const { availableReactions } = global;\n if (!defaultReaction || !availableReactions?.some(\n (l) => l.reaction === defaultReaction && !l.isInactive,\n )) {\n return undefined;\n }\n\n if (isPrivate) {\n return defaultReaction;\n }\n\n const enabledReactions = selectChat(global, chatId)?.fullInfo?.enabledReactions;\n if (!enabledReactions?.includes(defaultReaction)) {\n return undefined;\n }\n\n return defaultReaction;\n}\n\n// Slow, not to be used in `withGlobal`\nexport function selectVisibleUsers(global: GlobalState) {\n const { chatId, threadId } = selectCurrentMessageList(global) || {};\n if (!chatId || !threadId) {\n return undefined;\n }\n\n const messageIds = selectThreadParam(global, chatId, threadId, 'viewportIds');\n if (!messageIds) {\n return undefined;\n }\n\n return messageIds.map((messageId) => {\n const { senderId } = selectChatMessage(global, chatId, messageId) || {};\n return senderId ? selectUser(global, senderId) : undefined;\n }).filter(Boolean);\n}\n\nexport function selectShouldSchedule(global: GlobalState) {\n return selectCurrentMessageList(global)?.type === 'scheduled';\n}\n\nexport function selectCanScheduleUntilOnline(global: GlobalState, id: string) {\n const isChatWithSelf = selectIsChatWithSelf(global, id);\n const chatBot = id === REPLIES_USER_ID && selectChatBot(global, id);\n return Boolean(\n !isChatWithSelf && !chatBot && isUserId(id) && selectUserStatus(global, id)?.wasOnline,\n );\n}\n","import { GlobalState } from '../types';\nimport { selectCurrentMessageList } from './messages';\nimport { buildChatThreadKey } from '../helpers';\n\nexport function selectCurrentTextSearch(global: GlobalState) {\n const { chatId, threadId } = selectCurrentMessageList(global) || {};\n if (!chatId || !threadId) {\n return undefined;\n }\n\n const chatThreadKey = buildChatThreadKey(chatId, threadId);\n const currentSearch = global.localTextSearch.byChatThreadKey[chatThreadKey];\n if (!currentSearch || !currentSearch.isActive) {\n return undefined;\n }\n\n return currentSearch;\n}\n\nexport function selectCurrentMediaSearch(global: GlobalState) {\n const { chatId } = selectCurrentMessageList(global) || {};\n if (!chatId) {\n return undefined;\n }\n\n return global.localMediaSearch.byChatId[chatId];\n}\n","import { GlobalState } from '../types';\n\nimport { selectCurrentMessageList } from './messages';\nimport { selectChat } from './chats';\n\nexport function selectStatistics(global: GlobalState, chatId: string) {\n return global.statistics.byChatId[chatId];\n}\n\nexport function selectIsStatisticsShown(global: GlobalState) {\n if (!global.isStatisticsShown) {\n return false;\n }\n\n const { chatId: currentChatId } = selectCurrentMessageList(global) || {};\n const chat = currentChatId ? selectChat(global, currentChatId) : undefined;\n\n return chat?.fullInfo?.canViewStatistics;\n}\n","import { GlobalState } from '../types';\n\nimport { selectCurrentMessageList } from './messages';\nimport { selectChat } from './chats';\nimport { isChatGroup, isUserId } from '../helpers';\n\nexport function selectManagement(global: GlobalState, chatId: string) {\n return global.management.byChatId[chatId];\n}\n\nexport function selectCurrentManagement(global: GlobalState) {\n const { chatId, threadId } = selectCurrentMessageList(global) || {};\n if (!chatId || !threadId) {\n return undefined;\n }\n\n const currentManagement = global.management.byChatId[chatId];\n if (!currentManagement || !currentManagement.isActive) {\n return undefined;\n }\n\n return currentManagement;\n}\n\nexport function selectCurrentManagementType(global: GlobalState) {\n const { chatId, threadId } = selectCurrentMessageList(global) || {};\n if (!chatId || !threadId) {\n return undefined;\n }\n\n if (isUserId(chatId)) {\n return 'user';\n }\n\n const chat = selectChat(global, chatId);\n if (!chat) {\n return undefined;\n }\n\n if (isChatGroup(chat)) {\n return 'group';\n }\n\n return 'channel';\n}\n","import { GlobalState } from '../types';\nimport { NewChatMembersProgress, RightColumnContent } from '../../types';\n\nimport { getSystemTheme, IS_SINGLE_COLUMN_LAYOUT } from '../../util/environment';\nimport { selectCurrentMessageList, selectIsPollResultsOpen } from './messages';\nimport { selectCurrentTextSearch } from './localSearch';\nimport { selectCurrentStickerSearch, selectCurrentGifSearch } from './symbols';\nimport { selectIsStatisticsShown } from './statistics';\nimport { selectCurrentManagement } from './management';\n\nexport function selectIsMediaViewerOpen(global: GlobalState) {\n const { mediaViewer } = global;\n return Boolean(mediaViewer.messageId || mediaViewer.avatarOwnerId);\n}\n\nexport function selectRightColumnContentKey(global: GlobalState) {\n return selectIsPollResultsOpen(global) ? (\n RightColumnContent.PollResults\n ) : !IS_SINGLE_COLUMN_LAYOUT && selectCurrentTextSearch(global) ? (\n RightColumnContent.Search\n ) : selectCurrentManagement(global) ? (\n RightColumnContent.Management\n ) : selectIsStatisticsShown(global) ? (\n RightColumnContent.Statistics\n ) : selectCurrentStickerSearch(global).query !== undefined ? (\n RightColumnContent.StickerSearch\n ) : selectCurrentGifSearch(global).query !== undefined ? (\n RightColumnContent.GifSearch\n ) : global.newChatMembersProgress !== NewChatMembersProgress.Closed ? (\n RightColumnContent.AddingMembers\n ) : global.isChatInfoShown && selectCurrentMessageList(global) ? (\n RightColumnContent.ChatInfo\n ) : undefined;\n}\n\nexport function selectIsRightColumnShown(global: GlobalState) {\n return selectRightColumnContentKey(global) !== undefined;\n}\n\nexport function selectTheme(global: GlobalState) {\n const { theme, shouldUseSystemTheme } = global.settings.byKey;\n\n return shouldUseSystemTheme ? getSystemTheme() : theme;\n}\n","import { GlobalState } from '../types';\n\nexport function selectCurrentGlobalSearchQuery(global: GlobalState) {\n return global.globalSearch.query;\n}\n","import { GlobalState } from '../types';\n\nexport function selectPaymentChatId(global: GlobalState) {\n return global.payment.chatId;\n}\n\nexport function selectPaymentMessageId(global: GlobalState) {\n return global.payment.messageId;\n}\n\nexport function selectPaymentFormId(global: GlobalState) {\n return global.payment.formId;\n}\n\nexport function selectPaymentRequestId(global: GlobalState) {\n return global.payment.requestId;\n}\n\nexport function selectProviderPublishableKey(global: GlobalState) {\n return global.payment.nativeParams?.publishableKey;\n}\n\nexport function selectProviderPublicToken(global: GlobalState) {\n return global.payment.nativeParams?.publicToken;\n}\n\nexport function selectStripeCredentials(global: GlobalState) {\n return global.payment.stripeCredentials;\n}\n\nexport function selectSmartGlocalCredentials(global: GlobalState) {\n return global.payment.smartGlocalCredentials;\n}\n","import { GlobalState } from '../types';\n\nexport function selectNotifySettings(global: GlobalState) {\n return global.settings.byKey;\n}\n\nexport function selectNotifyExceptions(global: GlobalState) {\n return global.settings.notifyExceptions;\n}\n","import { GlobalState } from '../types';\nimport { ApiChat, ApiUser, ApiUserStatus } from '../../api/types';\n\nexport function selectUser(global: GlobalState, userId: string): ApiUser | undefined {\n return global.users.byId[userId];\n}\n\nexport function selectUserStatus(global: GlobalState, userId: string): ApiUserStatus | undefined {\n return global.users.statusesById[userId];\n}\n\nexport function selectIsUserBlocked(global: GlobalState, userId: string) {\n const user = selectUser(global, userId);\n\n return user?.fullInfo?.isBlocked;\n}\n\n// Slow, not to be used in `withGlobal`\nexport function selectUserByUsername(global: GlobalState, username: string) {\n const usernameLowered = username.toLowerCase();\n return Object.values(global.users.byId).find(\n (user) => user.username.toLowerCase() === usernameLowered,\n );\n}\n\n// Slow, not to be used in `withGlobal`\nexport function selectUserByPhoneNumber(global: GlobalState, phoneNumber: string) {\n const phoneNumberCleaned = phoneNumber.replace(/[^0-9]/g, '');\n\n return Object.values(global.users.byId).find((user) => user?.phoneNumber === phoneNumberCleaned);\n}\n\nexport function selectIsUserOrChatContact(global: GlobalState, userOrChat: ApiUser | ApiChat) {\n return global.contactList && global.contactList.userIds.includes(userOrChat.id);\n}\n","import { useEffect } from '../lib/teact/teact';\n\nexport default function useBackgroundMode(\n onBlur?: AnyToVoidFunction,\n onFocus?: AnyToVoidFunction,\n) {\n useEffect(() => {\n if (onBlur && !document.hasFocus()) {\n onBlur();\n }\n\n if (onBlur) {\n window.addEventListener('blur', onBlur);\n }\n\n if (onFocus) {\n window.addEventListener('focus', onFocus);\n }\n\n return () => {\n if (onFocus) {\n window.removeEventListener('focus', onFocus);\n }\n\n if (onBlur) {\n window.removeEventListener('blur', onBlur);\n }\n };\n }, [onBlur, onFocus]);\n}\n","import { useEffect } from '../lib/teact/teact';\nimport usePrevious from './usePrevious';\n\nconst useEffectWithPrevDeps = (\n cb: (args: T | readonly []) => void, dependencies: T, debugKey?: string,\n) => {\n const prevDeps = usePrevious(dependencies);\n return useEffect(() => {\n return cb(prevDeps || []);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, dependencies, debugKey);\n};\n\nexport default useEffectWithPrevDeps;\n","import { useCallback, useState } from '../lib/teact/teact';\n\nconst useFlag = (initial = false): [boolean, AnyToVoidFunction, AnyToVoidFunction] => {\n const [value, setValue] = useState(initial);\n\n const setTrue = useCallback(() => {\n setValue(true);\n }, []);\n\n const setFalse = useCallback(() => {\n setValue(false);\n }, []);\n\n return [value, setTrue, setFalse];\n};\n\nexport default useFlag;\n","import { useCallback, useState } from '../lib/teact/teact';\n\nconst useForceUpdate = () => {\n const [, setTrigger] = useState(false);\n\n return useCallback(() => {\n setTrigger((trigger) => !trigger);\n }, []);\n};\n\nexport default useForceUpdate;\n","import { useEffect } from '../lib/teact/teact';\n\nconst ANIMATION_START_EVENT = 'tt-event-heavy-animation-start';\nconst ANIMATION_END_EVENT = 'tt-event-heavy-animation-end';\n\nlet timeout: number | undefined;\nlet isAnimating = false;\n\n// Make sure to end even if end callback was not called (which was some hardly-reproducible bug)\nconst AUTO_END_TIMEOUT = 1000;\n\nconst useHeavyAnimationCheck = (\n handleAnimationStart: AnyToVoidFunction,\n handleAnimationEnd: AnyToVoidFunction,\n isDisabled = false,\n) => {\n useEffect(() => {\n if (isDisabled) {\n return undefined;\n }\n\n if (isAnimating) {\n handleAnimationStart();\n }\n\n document.addEventListener(ANIMATION_START_EVENT, handleAnimationStart);\n document.addEventListener(ANIMATION_END_EVENT, handleAnimationEnd);\n\n return () => {\n document.removeEventListener(ANIMATION_END_EVENT, handleAnimationEnd);\n document.removeEventListener(ANIMATION_START_EVENT, handleAnimationStart);\n };\n }, [isDisabled, handleAnimationEnd, handleAnimationStart]);\n};\n\nexport function isHeavyAnimating() {\n return isAnimating;\n}\n\nexport function dispatchHeavyAnimationEvent(duration = AUTO_END_TIMEOUT) {\n if (!isAnimating) {\n isAnimating = true;\n document.dispatchEvent(new Event(ANIMATION_START_EVENT));\n }\n\n if (timeout) {\n clearTimeout(timeout);\n timeout = undefined;\n }\n\n // Race condition may happen if another `dispatchHeavyAnimationEvent` is called before `onEnd`\n function onEnd() {\n if (timeout) {\n clearTimeout(timeout);\n timeout = undefined;\n }\n\n isAnimating = false;\n document.dispatchEvent(new Event(ANIMATION_END_EVENT));\n }\n\n timeout = window.setTimeout(onEnd, duration);\n\n return onEnd;\n}\n\nexport default useHeavyAnimationCheck;\n","import { useCallback, useEffect, useRef } from '../lib/teact/teact';\n\nimport { IS_IOS } from '../util/environment';\nimport usePrevious from './usePrevious';\nimport { getActions } from '../global';\nimport { areSortedArraysEqual } from '../util/iteratees';\n\ntype HistoryState = {\n currentIndex: number;\n nextStateIndexToReplace: number;\n isHistoryAltered: boolean;\n isDisabled: boolean;\n isEdge: boolean;\n currentIndexes: number[];\n};\n\n// Carefully selected by swiping and observing visual changes\n// TODO: may be different on other devices such as iPad, maybe take dpi into account?\nconst SAFARI_EDGE_BACK_GESTURE_LIMIT = 300;\nconst SAFARI_EDGE_BACK_GESTURE_DURATION = 350;\nexport const LOCATION_HASH = window.location.hash;\nconst PATH_BASE = `${window.location.pathname}${window.location.search}`;\n\nconst historyState: HistoryState = {\n currentIndex: 0,\n nextStateIndexToReplace: -1,\n isHistoryAltered: false,\n isDisabled: false,\n isEdge: false,\n currentIndexes: [],\n};\n\nexport const disableHistoryBack = () => {\n historyState.isDisabled = true;\n};\n\nconst handleTouchStart = (event: TouchEvent) => {\n const x = event.touches[0].pageX;\n\n if (x <= SAFARI_EDGE_BACK_GESTURE_LIMIT || x >= window.innerWidth - SAFARI_EDGE_BACK_GESTURE_LIMIT) {\n historyState.isEdge = true;\n }\n};\n\nconst handleTouchEnd = () => {\n if (historyState.isEdge) {\n setTimeout(() => {\n historyState.isEdge = false;\n }, SAFARI_EDGE_BACK_GESTURE_DURATION);\n }\n};\n\nif (IS_IOS) {\n window.addEventListener('touchstart', handleTouchStart);\n window.addEventListener('touchend', handleTouchEnd);\n window.addEventListener('popstate', handleTouchEnd);\n}\n\nwindow.history.replaceState({ index: historyState.currentIndex }, '', PATH_BASE);\n\nexport default function useHistoryBack(\n isActive: boolean | undefined,\n onBack: ((noDisableAnimation: boolean) => void) | undefined,\n onForward?: (state: any) => void,\n currentState?: any,\n shouldReplaceNext = false,\n hashes?: string[],\n) {\n const indexRef = useRef(-1);\n const isForward = useRef(false);\n const prevIsActive = usePrevious(isActive);\n const isClosed = useRef(true);\n const indexHashRef = useRef<{ index: number; hash: string }[]>([]);\n const prevHashes = usePrevious(hashes);\n const isHashChangedFromEvent = useRef(false);\n\n const handleChange = useCallback((isForceClose = false) => {\n if (!hashes) {\n if (isActive && !isForceClose) {\n isClosed.current = false;\n\n if (isForward.current) {\n isForward.current = false;\n historyState.currentIndexes.push(indexRef.current);\n } else {\n setTimeout(() => {\n const index = ++historyState.currentIndex;\n\n historyState.currentIndexes.push(index);\n\n window.history[(\n (\n historyState.currentIndexes.includes(historyState.nextStateIndexToReplace - 1)\n && window.history.state.index !== 0\n && historyState.nextStateIndexToReplace === index\n && !shouldReplaceNext\n )\n ? 'replaceState'\n : 'pushState'\n )]({\n index,\n state: currentState,\n }, '');\n\n indexRef.current = index;\n\n if (shouldReplaceNext) {\n historyState.nextStateIndexToReplace = historyState.currentIndex + 1;\n }\n }, 0);\n }\n }\n\n if ((isForceClose || !isActive) && !isClosed.current) {\n if ((indexRef.current === historyState.currentIndex || !shouldReplaceNext)) {\n historyState.isHistoryAltered = true;\n window.history.back();\n\n setTimeout(() => {\n historyState.nextStateIndexToReplace = -1;\n }, 400);\n }\n historyState.currentIndexes.splice(historyState.currentIndexes.indexOf(indexRef.current), 1);\n\n isClosed.current = true;\n }\n } else {\n const prev = prevHashes || [];\n if (prev.length < hashes.length) {\n setTimeout(() => {\n const index = ++historyState.currentIndex;\n historyState.currentIndexes.push(index);\n\n window.history.pushState({\n index,\n state: currentState,\n }, '', `#${hashes[hashes.length - 1]}`);\n\n indexHashRef.current.push({\n index,\n hash: hashes[hashes.length - 1],\n });\n }, 0);\n } else {\n const delta = prev.length - hashes.length;\n if (isHashChangedFromEvent.current) {\n isHashChangedFromEvent.current = false;\n } else {\n if (hashes.length !== indexHashRef.current.length) {\n if (delta > 0) {\n const last = indexHashRef.current[indexHashRef.current.length - delta - 1];\n let realDelta = delta;\n if (last) {\n const indexLast = historyState.currentIndexes.findIndex(\n (l) => l === last.index,\n );\n realDelta = historyState.currentIndexes.length - indexLast - 1;\n }\n historyState.isHistoryAltered = true;\n window.history.go(-realDelta);\n const removed = indexHashRef.current.splice(indexHashRef.current.length - delta - 1, delta);\n removed.forEach(({ index }) => {\n historyState.currentIndexes.splice(historyState.currentIndexes.indexOf(index), 1);\n });\n }\n }\n\n if (hashes.length > 0) {\n setTimeout(() => {\n const index = ++historyState.currentIndex;\n historyState.currentIndexes[historyState.currentIndexes.length - 1] = index;\n\n window.history.replaceState({\n index,\n state: currentState,\n }, '', `${PATH_BASE}#${hashes[hashes.length - 1]}`);\n\n indexHashRef.current[indexHashRef.current.length - 1] = {\n index,\n hash: hashes[hashes.length - 1],\n };\n }, 0);\n }\n }\n }\n }\n }, [currentState, hashes, isActive, prevHashes, shouldReplaceNext]);\n\n useEffect(() => {\n const handlePopState = (event: PopStateEvent) => {\n if (historyState.isHistoryAltered) {\n setTimeout(() => {\n historyState.isHistoryAltered = false;\n }, 0);\n return;\n }\n const { index: i } = event.state;\n const index = i || 0;\n try {\n const currIndex = hashes ? indexHashRef.current[indexHashRef.current.length - 1].index : indexRef.current;\n\n const prev = historyState.currentIndexes[historyState.currentIndexes.indexOf(currIndex) - 1];\n\n if (historyState.isDisabled) return;\n\n if ((!isClosed.current && (index === 0 || index === prev)) || (hashes && (index === 0 || index === prev))) {\n if (hashes) {\n isHashChangedFromEvent.current = true;\n indexHashRef.current.pop();\n }\n\n historyState.currentIndexes.splice(historyState.currentIndexes.indexOf(currIndex), 1);\n\n if (onBack) {\n if (historyState.isEdge) {\n getActions()\n .disableHistoryAnimations();\n }\n onBack(!historyState.isEdge);\n isClosed.current = true;\n }\n } else if (index === currIndex && isClosed.current && onForward && !hashes) {\n isForward.current = true;\n if (historyState.isEdge) {\n getActions()\n .disableHistoryAnimations();\n }\n onForward(event.state.state);\n }\n } catch (e) {\n // Forward navigation for hashed is not supported\n }\n };\n\n const hasChanged = hashes\n ? (!prevHashes || !areSortedArraysEqual(prevHashes, hashes))\n : prevIsActive !== isActive;\n\n if (!historyState.isDisabled && hasChanged) {\n handleChange();\n }\n\n window.addEventListener('popstate', handlePopState);\n return () => window.removeEventListener('popstate', handlePopState);\n }, [\n currentState, handleChange, hashes, isActive, onBack, onForward, prevHashes, prevIsActive, shouldReplaceNext,\n ]);\n\n return {\n forceClose: () => handleChange(true),\n };\n}\n","import { RefObject } from 'react';\nimport { useState, useCallback, useEffect } from '../lib/teact/teact';\n\nconst useKeyboardListNavigation = (\n elementRef: RefObject,\n isOpen: boolean,\n onSelectWithEnter?: (index: number) => void,\n itemSelector?: string,\n noCaptureFocus?: boolean,\n) => {\n const [focusedIndex, setFocusedIndex] = useState(-1);\n\n useEffect(() => {\n setFocusedIndex(-1);\n\n const element = elementRef.current;\n if (isOpen && element && !noCaptureFocus) {\n element.tabIndex = -1;\n element.focus();\n }\n }, [elementRef, isOpen, noCaptureFocus]);\n\n const handleKeyDown = useCallback((e: React.KeyboardEvent) => {\n const element = elementRef.current;\n\n if (!element) {\n return;\n }\n\n if (e.keyCode === 13 && onSelectWithEnter) {\n onSelectWithEnter(focusedIndex);\n return;\n }\n\n if (e.keyCode !== 38 && e.keyCode !== 40) {\n return;\n }\n\n const focusedElement = document.activeElement;\n const elementChildren = Array.from(itemSelector ? element.querySelectorAll(itemSelector) : element.children);\n\n let newIndex = (focusedElement && elementChildren.indexOf(focusedElement)) || focusedIndex;\n\n if (e.keyCode === 38 && newIndex > 0) {\n newIndex--;\n } else if (e.keyCode === 40 && newIndex < elementChildren.length - 1) {\n newIndex++;\n } else if (elementChildren.length === 1) {\n newIndex = 0;\n } else {\n return;\n }\n\n const item = elementChildren[newIndex] as HTMLElement;\n if (item) {\n setFocusedIndex(newIndex);\n item.focus();\n }\n }, [elementRef, onSelectWithEnter, itemSelector, focusedIndex]);\n\n return handleKeyDown;\n};\n\nexport default useKeyboardListNavigation;\n","import * as langProvider from '../util/langProvider';\nimport useForceUpdate from './useForceUpdate';\nimport useOnChange from './useOnChange';\n\nexport type LangFn = typeof langProvider.getTranslation;\n\nconst useLang = (): LangFn => {\n const forceUpdate = useForceUpdate();\n\n useOnChange(() => {\n return langProvider.addCallback(forceUpdate);\n }, [forceUpdate]);\n\n return langProvider.getTranslation;\n};\n\nexport default useLang;\n","import { useEffect } from '../lib/teact/teact';\n\nimport {\n BundleModules, Bundles, getModuleFromMemory, loadModule, addLoadListener,\n} from '../util/moduleLoader';\n\nimport useForceUpdate from './useForceUpdate';\n\nconst useModuleLoader = >(\n bundleName: B, moduleName: M, noLoad = false, autoUpdate = false,\n) => {\n const module = getModuleFromMemory(bundleName, moduleName);\n const forceUpdate = useForceUpdate();\n\n useEffect(() => {\n if (!autoUpdate) {\n return undefined;\n }\n\n return addLoadListener(forceUpdate);\n }, [autoUpdate, forceUpdate]);\n\n useEffect(() => {\n if (!noLoad && !module) {\n loadModule(bundleName, moduleName).then(forceUpdate);\n }\n }, [bundleName, forceUpdate, module, moduleName, noLoad]);\n\n return module;\n};\n\nexport default useModuleLoader;\n","import usePrevious from './usePrevious';\n\nconst useOnChange = (cb: (args: T | readonly []) => void, dependencies: T) => {\n const prevDeps = usePrevious(dependencies);\n if (!prevDeps || dependencies.some((d, i) => d !== prevDeps[i])) {\n cb(prevDeps || []);\n }\n};\n\nexport default useOnChange;\n","import { useRef } from '../lib/teact/teact';\n\nfunction usePrevious(next: T): T | undefined;\nfunction usePrevious(next: T, shouldSkipUndefined: true): Exclude | undefined;\nfunction usePrevious(next: T, shouldSkipUndefined?: boolean): Exclude | undefined;\nfunction usePrevious(next: T, shouldSkipUndefined?: boolean) {\n const ref = useRef();\n const { current } = ref;\n if (!shouldSkipUndefined || next !== undefined) {\n ref.current = next;\n }\n\n return current;\n}\n\nexport default usePrevious;\n","import { useRef, useState } from '../lib/teact/teact';\nimport buildClassName from '../util/buildClassName';\n\nconst CLOSE_DURATION = 350;\n\nconst useShowTransition = (\n isOpen = false,\n onCloseTransitionEnd?: () => void,\n noOpenTransition = false,\n className: string | false = 'fast',\n noCloseTransition = false,\n) => {\n const [isClosed, setIsClosed] = useState(!isOpen);\n const closeTimeoutRef = useRef();\n // СSS class should be added in a separate tick to turn on CSS transition.\n const [hasOpenClassName, setHasOpenClassName] = useState(isOpen && noOpenTransition);\n\n if (isOpen) {\n setIsClosed(false);\n setHasOpenClassName(true);\n\n if (closeTimeoutRef.current) {\n window.clearTimeout(closeTimeoutRef.current);\n closeTimeoutRef.current = undefined;\n }\n } else {\n setHasOpenClassName(false);\n\n if (!isClosed && !closeTimeoutRef.current) {\n const exec = () => {\n setIsClosed(true);\n\n if (onCloseTransitionEnd) {\n onCloseTransitionEnd();\n }\n\n closeTimeoutRef.current = undefined;\n };\n\n if (noCloseTransition) {\n exec();\n } else {\n closeTimeoutRef.current = window.setTimeout(exec, CLOSE_DURATION);\n }\n }\n }\n\n // `noCloseTransition`, when set to true, should remove the open class immediately\n const shouldHaveOpenClassName = hasOpenClassName && !(noCloseTransition && !isOpen);\n const isClosing = Boolean(closeTimeoutRef.current);\n const shouldRender = isOpen || isClosing;\n const transitionClassNames = buildClassName(\n className && 'opacity-transition',\n className,\n shouldHaveOpenClassName && 'open',\n shouldRender && 'shown',\n isClosing && 'closing',\n );\n\n return {\n shouldRender,\n transitionClassNames,\n };\n};\n\nexport default useShowTransition;\n","import { RefObject } from 'react';\nimport { useEffect } from '../lib/teact/teact';\n\nconst BACKDROP_CLASSNAME = 'backdrop';\n\n// This effect implements closing menus by clicking outside of them\n// without adding extra elements to the DOM\nexport default function useVirtualBackdrop(\n isOpen: boolean,\n menuRef: RefObject,\n onClose?: () => void | undefined,\n) {\n useEffect(() => {\n const handleEvent = (e: Event) => {\n const menu = menuRef.current;\n const target = e.target as HTMLElement | null;\n if (!menu || !target) {\n return;\n }\n\n if (\n !menu.contains(e.target as Node | null)\n || target.classList.contains(BACKDROP_CLASSNAME)\n ) {\n e.preventDefault();\n e.stopPropagation();\n if (onClose) {\n onClose();\n }\n }\n };\n\n if (isOpen && onClose) {\n document.addEventListener('mousedown', handleEvent);\n }\n\n return () => {\n document.removeEventListener('mousedown', handleEvent);\n };\n }, [isOpen, menuRef, onClose]);\n}\n","import { DEBUG } from '../../config';\n\ntype Handler = (e: Event) => void;\ntype DelegationRegistry = Map;\n\nconst NON_BUBBLEABLE_EVENTS = new Set(['scroll', 'mouseenter', 'mouseleave']);\n\nconst documentEventCounters: Record = {};\nconst delegationRegistryByEventType: Record = {};\nconst delegatedEventTypesByElement = new Map>();\n\nexport function addEventListener(element: HTMLElement, propName: string, handler: Handler, asCapture = false) {\n const eventType = resolveEventType(propName, element);\n if (canUseEventDelegation(eventType, element, asCapture)) {\n addDelegatedListener(eventType, element, handler);\n } else {\n element.addEventListener(eventType, handler, asCapture);\n }\n}\n\nexport function removeEventListener(element: HTMLElement, propName: string, handler: Handler, asCapture = false) {\n const eventType = resolveEventType(propName, element);\n if (canUseEventDelegation(eventType, element, asCapture)) {\n removeDelegatedListener(eventType, element);\n } else {\n element.removeEventListener(eventType, handler, asCapture);\n }\n}\n\nfunction resolveEventType(propName: string, element: HTMLElement) {\n const eventType = propName\n .replace(/^on/, '')\n .replace(/Capture$/, '').toLowerCase();\n\n if (eventType === 'change' && element.tagName !== 'SELECT') {\n // React behavior repeated here.\n // https://stackoverflow.com/questions/38256332/in-react-whats-the-difference-between-onchange-and-oninput\n return 'input';\n }\n\n if (eventType === 'doubleclick') {\n return 'dblclick';\n }\n\n // Replace focus/blur by their \"bubbleable\" versions\n if (eventType === 'focus') {\n return 'focusin';\n }\n\n if (eventType === 'blur') {\n return 'focusout';\n }\n\n return eventType;\n}\n\nfunction canUseEventDelegation(realEventType: string, element: HTMLElement, asCapture: boolean) {\n return (\n !asCapture\n && !NON_BUBBLEABLE_EVENTS.has(realEventType)\n && element.tagName !== 'VIDEO'\n && element.tagName !== 'IFRAME'\n );\n}\n\nfunction addDelegatedListener(eventType: string, element: HTMLElement, handler: Handler) {\n if (!documentEventCounters[eventType]) {\n documentEventCounters[eventType] = 0;\n document.addEventListener(eventType, handleEvent);\n }\n\n resolveDelegationRegistry(eventType).set(element, handler);\n resolveDelegatedEventTypes(element).add(eventType);\n documentEventCounters[eventType]++;\n}\n\nfunction removeDelegatedListener(eventType: string, element: HTMLElement) {\n documentEventCounters[eventType]--;\n if (!documentEventCounters[eventType]) {\n // Synchronous deletion on 0 will cause perf degradation in the case of 1 element\n // which is not a real case, so it's ok to do it this way\n document.removeEventListener(eventType, handleEvent);\n }\n\n delegationRegistryByEventType[eventType].delete(element);\n delegatedEventTypesByElement.get(element)!.delete(eventType);\n}\n\nexport function removeAllDelegatedListeners(element: HTMLElement) {\n const eventTypes = delegatedEventTypesByElement.get(element);\n if (!eventTypes) {\n return;\n }\n\n eventTypes.forEach((eventType) => removeDelegatedListener(eventType, element));\n delegatedEventTypesByElement.delete(element);\n}\n\nfunction handleEvent(realEvent: Event) {\n const events = delegationRegistryByEventType[realEvent.type];\n\n if (events) {\n let furtherCallsPrevented = false;\n let current: HTMLElement = realEvent.target as HTMLElement;\n\n const stopPropagation = () => {\n furtherCallsPrevented = true;\n };\n\n const preventDefault = () => {\n realEvent.preventDefault();\n };\n\n // Proxy is a simplest way to provide an access to the event property\n const event = new Proxy(realEvent, {\n get(target, p) {\n if (p === 'currentTarget') {\n return current;\n }\n if (p === 'stopPropagation' || p === 'stopImmediatePropagation') {\n return stopPropagation;\n }\n if (p === 'preventDefault') {\n // \"this\" is changed to proxy and one can't call methods via it\n return preventDefault;\n }\n return Reflect.get(target, p);\n },\n });\n\n // This can also be limited by teact root\n while (current && current !== document.body) {\n const handler = events.get(current);\n if (handler) {\n handler(event);\n if (furtherCallsPrevented) {\n return;\n }\n }\n\n current = current.parentNode as HTMLElement;\n }\n }\n}\n\nfunction resolveDelegationRegistry(eventType: string) {\n if (!delegationRegistryByEventType[eventType]) {\n delegationRegistryByEventType[eventType] = new Map();\n }\n\n return delegationRegistryByEventType[eventType];\n}\n\nfunction resolveDelegatedEventTypes(element: HTMLElement) {\n const existing = delegatedEventTypesByElement.get(element);\n if (existing) {\n return existing;\n }\n\n const newSet = new Set();\n delegatedEventTypesByElement.set(element, newSet);\n\n return newSet;\n}\n\nif (DEBUG) {\n document.addEventListener('dblclick', () => {\n const documentListenersCount = Object.keys(documentEventCounters).length;\n const delegatedHandlersCount1 = Object.values(documentEventCounters)\n .reduce((acc, counter) => acc + counter, 0);\n const delegationRegistriesCount = Object.keys(delegationRegistryByEventType).length;\n const delegatedHandlersCount2 = Object.values(delegationRegistryByEventType)\n .reduce((acc, delegationRegistry) => acc + delegationRegistry.size, 0);\n const delegationElementsCount = delegatedEventTypesByElement.size;\n const delegatedEventTypesCount = Array.from(delegatedEventTypesByElement.values())\n .reduce((acc, eventTypes) => acc + eventTypes.size, 0);\n\n // eslint-disable-next-line no-console\n console.warn('DELEGATED EVENTS STATS', {\n delegatedHandlersCount1,\n delegatedHandlersCount2,\n delegatedEventTypesCount,\n delegationRegistriesCount,\n delegationElementsCount,\n documentListenersCount,\n });\n });\n}\n","import {\n hasElementChanged,\n isComponentElement,\n isEmptyElement,\n isRealElement,\n isTextElement,\n mountComponent,\n renderComponent,\n unmountTree,\n getTarget,\n setTarget,\n VirtualElement,\n VirtualElementComponent,\n VirtualRealElement,\n VirtualElementChildren,\n} from './teact';\nimport generateIdFor from '../../util/generateIdFor';\nimport { DEBUG } from '../../config';\nimport { addEventListener, removeEventListener } from './dom-events';\nimport { unique } from '../../util/iteratees';\n\ntype VirtualDomHead = {\n children: [VirtualElement] | [];\n};\n\nconst FILTERED_ATTRIBUTES = new Set(['key', 'ref', 'teactFastList', 'teactOrderKey']);\nconst HTML_ATTRIBUTES = new Set(['dir', 'role']);\nconst MAPPED_ATTRIBUTES: { [k: string]: string } = {\n autoPlay: 'autoplay',\n autoComplete: 'autocomplete',\n};\nconst INDEX_KEY_PREFIX = '__indexKey#';\n\nconst headsByElement: Record = {};\n// eslint-disable-next-line @typescript-eslint/naming-convention\nlet DEBUG_virtualTreeSize = 1;\n\nfunction render($element?: VirtualElement, parentEl?: HTMLElement | null) {\n if (!parentEl) {\n return undefined;\n }\n\n let headId = parentEl.getAttribute('data-teact-head-id');\n if (!headId) {\n headId = generateIdFor(headsByElement);\n headsByElement[headId] = { children: [] };\n parentEl.setAttribute('data-teact-head-id', headId);\n }\n\n const $head = headsByElement[headId];\n $head.children = [renderWithVirtual(parentEl, $head.children[0], $element, $head, 0) as VirtualElement];\n\n if (process.env.APP_ENV === 'perf') {\n DEBUG_virtualTreeSize = 0;\n DEBUG_addToVirtualTreeSize($head);\n\n return DEBUG_virtualTreeSize;\n }\n\n return undefined;\n}\n\nfunction renderWithVirtual(\n parentEl: HTMLElement,\n $current: VirtualElement | undefined,\n $new: VirtualElement | undefined,\n $parent: VirtualRealElement | VirtualDomHead,\n index: number,\n {\n skipComponentUpdate = false,\n forceIndex = false,\n fragment,\n moveDirection,\n }: {\n skipComponentUpdate?: boolean;\n forceIndex?: boolean;\n fragment?: DocumentFragment;\n moveDirection?: 'up' | 'down';\n } = {},\n) {\n const isCurrentComponent = $current && isComponentElement($current);\n const isNewComponent = $new && isComponentElement($new);\n\n if (\n !skipComponentUpdate\n && isCurrentComponent && isNewComponent\n && !hasElementChanged($current!, $new!)\n ) {\n $new = updateComponent($current as VirtualElementComponent, $new as VirtualElementComponent);\n }\n\n // Parent element may have changed, so we need to update the listener closure.\n if (!skipComponentUpdate && isNewComponent && ($new as VirtualElementComponent).componentInstance.isMounted) {\n setupComponentUpdateListener($new as VirtualElementComponent, $parent, index, parentEl);\n }\n\n if ($current === $new) {\n return $new;\n }\n\n if (DEBUG && $new) {\n const newTarget = getTarget($new);\n if (newTarget && (!$current || newTarget !== getTarget($current))) {\n throw new Error('[Teact] Cached virtual element was moved within tree');\n }\n }\n\n if (!$current && $new) {\n if (isNewComponent) {\n $new = initComponent($new as VirtualElementComponent, $parent, index, parentEl);\n }\n\n const node = createNode($new);\n setTarget($new, node);\n\n if (forceIndex && parentEl.childNodes[index]) {\n parentEl.insertBefore(node, parentEl.childNodes[index]);\n } else {\n (fragment || parentEl).appendChild(node);\n }\n } else if ($current && !$new) {\n parentEl.removeChild(getTarget($current)!);\n unmountTree($current);\n } else if ($current && $new) {\n if (hasElementChanged($current, $new)) {\n if (isNewComponent) {\n $new = initComponent($new as VirtualElementComponent, $parent, index, parentEl);\n }\n\n const node = createNode($new);\n setTarget($new, node);\n parentEl.replaceChild(node, getTarget($current)!);\n unmountTree($current);\n } else {\n const areComponents = isCurrentComponent && isNewComponent;\n const currentTarget = getTarget($current);\n\n if (!areComponents) {\n setTarget($new, currentTarget!);\n setTarget($current, undefined as any); // Help GC\n\n if ('props' in $current && 'props' in $new) {\n $new.props.ref = $current.props.ref;\n }\n }\n\n if (isRealElement($new)) {\n if (moveDirection) {\n const node = currentTarget!;\n const nextSibling = parentEl.childNodes[moveDirection === 'up' ? index : index + 1];\n\n if (nextSibling) {\n parentEl.insertBefore(node, nextSibling);\n } else {\n (fragment || parentEl).appendChild(node);\n }\n }\n\n if (!areComponents) {\n updateAttributes(($current as VirtualRealElement), $new, currentTarget as HTMLElement);\n }\n\n $new.children = renderChildren(\n ($current as VirtualRealElement),\n $new,\n areComponents ? parentEl : currentTarget as HTMLElement,\n );\n }\n }\n }\n\n return $new;\n}\n\nfunction initComponent(\n $element: VirtualElementComponent, $parent: VirtualRealElement | VirtualDomHead, index: number, parentEl: HTMLElement,\n) {\n if (!isComponentElement($element)) {\n return $element;\n }\n\n const { componentInstance } = $element;\n\n if (!componentInstance.isMounted) {\n $element = mountComponent(componentInstance);\n setupComponentUpdateListener($element, $parent, index, parentEl);\n\n const $firstChild = $element.children[0];\n if (isComponentElement($firstChild)) {\n $element.children = [initComponent($firstChild, $element, 0, parentEl)];\n }\n\n componentInstance.isMounted = true;\n }\n\n return $element;\n}\n\nfunction updateComponent($current: VirtualElementComponent, $new: VirtualElementComponent) {\n $current.componentInstance.props = $new.componentInstance.props;\n\n return renderComponent($current.componentInstance);\n}\n\nfunction setupComponentUpdateListener(\n $element: VirtualElementComponent, $parent: VirtualRealElement | VirtualDomHead, index: number, parentEl: HTMLElement,\n) {\n const { componentInstance } = $element;\n\n componentInstance.onUpdate = () => {\n $parent.children[index] = renderWithVirtual(\n parentEl,\n $parent.children[index],\n componentInstance.$element,\n $parent,\n index,\n { skipComponentUpdate: true },\n ) as VirtualElementComponent;\n };\n}\n\nfunction createNode($element: VirtualElement): Node {\n if (isEmptyElement($element)) {\n return document.createTextNode('');\n }\n\n if (isTextElement($element)) {\n return document.createTextNode($element.value);\n }\n\n if (isComponentElement($element)) {\n return createNode($element.children[0] as VirtualElement);\n }\n\n const { tag, props, children = [] } = $element;\n const element = document.createElement(tag);\n\n if (typeof props.ref === 'object') {\n props.ref.current = element;\n }\n\n Object.entries(props).forEach(([key, value]) => {\n if (props[key] !== undefined) {\n setAttribute(element, key, value);\n }\n });\n\n $element.children = children.map(($child, i) => (\n renderWithVirtual(element, undefined, $child, $element, i) as VirtualElement\n ));\n\n return element;\n}\n\nfunction renderChildren(\n $current: VirtualRealElement, $new: VirtualRealElement, currentEl: HTMLElement,\n) {\n if (DEBUG) {\n DEBUG_checkKeyUniqueness($new.children);\n }\n\n if ($new.props.teactFastList) {\n return renderFastListChildren($current, $new, currentEl);\n }\n\n const currentChildrenLength = $current.children.length;\n const newChildrenLength = $new.children.length;\n const maxLength = Math.max(currentChildrenLength, newChildrenLength);\n const newChildren = [];\n const fragment = newChildrenLength > currentChildrenLength + 1 ? document.createDocumentFragment() : undefined;\n\n for (let i = 0; i < maxLength; i++) {\n const $newChild = renderWithVirtual(\n currentEl,\n $current.children[i],\n $new.children[i],\n $new,\n i,\n i >= currentChildrenLength ? { fragment } : undefined,\n );\n\n if ($newChild) {\n newChildren.push($newChild);\n }\n }\n\n if (fragment) {\n currentEl.appendChild(fragment);\n }\n\n return newChildren;\n}\n\nfunction renderFastListChildren($current: VirtualRealElement, $new: VirtualRealElement, currentEl: HTMLElement) {\n const newKeys = new Set(\n $new.children.map(($newChild) => {\n const key = 'props' in $newChild && $newChild.props.key;\n\n // eslint-disable-next-line no-null/no-null\n if (DEBUG && isRealElement($newChild) && (key === undefined || key === null)) {\n // eslint-disable-next-line no-console\n console.warn('Missing `key` in `teactFastList`');\n }\n\n return key;\n }),\n );\n\n let currentRemainingIndex = 0;\n const remainingByKey = $current.children\n .reduce((acc, $currentChild, i) => {\n let key = 'props' in $currentChild ? $currentChild.props.key : undefined;\n // eslint-disable-next-line no-null/no-null\n const isKeyPresent = key !== undefined && key !== null;\n\n // First we handle removed children\n if (isKeyPresent && !newKeys.has(key)) {\n renderWithVirtual(currentEl, $currentChild, undefined, $new, -1);\n\n return acc;\n } else if (!isKeyPresent) {\n const $newChild = $new.children[i];\n const newChildKey = ($newChild && 'props' in $newChild) ? $newChild.props.key : undefined;\n // If a non-key element remains at the same index we preserve it with a virtual `key`\n if ($newChild && !newChildKey) {\n key = `${INDEX_KEY_PREFIX}${i}`;\n } else {\n renderWithVirtual(currentEl, $currentChild, undefined, $new, -1);\n\n return acc;\n }\n }\n\n // Then we build up info about remaining children\n acc[key] = {\n $element: $currentChild,\n index: currentRemainingIndex++,\n order: 'props' in $currentChild ? $currentChild.props.teactOrderKey : undefined,\n };\n return acc;\n }, {} as Record);\n\n let newChildren: VirtualElement[] = [];\n\n let fragmentQueue: VirtualElement[] | undefined;\n let fragmentIndex: number | undefined;\n\n let currentPreservedIndex = 0;\n\n $new.children.forEach(($newChild, i) => {\n const key = 'props' in $newChild ? $newChild.props.key : `${INDEX_KEY_PREFIX}${i}`;\n const currentChildInfo = remainingByKey[key];\n\n if (!currentChildInfo) {\n // All new nodes are queued to be inserted with fragments if possible.\n if (!fragmentQueue) {\n fragmentQueue = [];\n fragmentIndex = i;\n }\n\n fragmentQueue.push($newChild);\n return;\n }\n\n if (fragmentQueue) {\n newChildren = newChildren.concat(flushFragmentQueue(fragmentQueue, fragmentIndex!, currentEl, $new));\n fragmentIndex = undefined;\n fragmentQueue = undefined;\n }\n\n // This is a \"magic\" `teactOrderKey` property that tells us the element is updated\n const order = 'props' in $newChild ? $newChild.props.teactOrderKey : undefined;\n const shouldMoveNode = currentChildInfo.index !== currentPreservedIndex && currentChildInfo.order !== order;\n const isMovingDown = shouldMoveNode && currentPreservedIndex > currentChildInfo.index;\n\n // When the node goes down, preserved indexing actually breaks, so the \"magic\" should help.\n if (!shouldMoveNode || isMovingDown) {\n currentPreservedIndex++;\n }\n\n newChildren.push(\n renderWithVirtual(currentEl, currentChildInfo.$element, $newChild, $new, i, {\n forceIndex: true,\n moveDirection: shouldMoveNode ? (isMovingDown ? 'down' : 'up') : undefined,\n })!,\n );\n });\n\n if (fragmentQueue) {\n newChildren = newChildren.concat(flushFragmentQueue(fragmentQueue, fragmentIndex!, currentEl, $new));\n }\n\n return newChildren;\n}\n\nfunction flushFragmentQueue(\n fragmentQueue: VirtualElement[], fragmentIndex: number, parentEl: HTMLElement, $parent: VirtualRealElement,\n) {\n if (fragmentQueue.length === 1) {\n return [renderWithVirtual(parentEl, undefined, fragmentQueue[0], $parent, fragmentIndex, { forceIndex: true })!];\n } else if (fragmentQueue.length > 1) {\n const fragment = document.createDocumentFragment();\n const newChildren = fragmentQueue.map(($fragmentChild) => (\n renderWithVirtual(parentEl, undefined, $fragmentChild, $parent, fragmentIndex!, { fragment })!\n ));\n\n if (parentEl.childNodes[fragmentIndex]) {\n parentEl.insertBefore(fragment, parentEl.childNodes[fragmentIndex]);\n } else {\n parentEl.appendChild(fragment);\n }\n\n return newChildren;\n }\n\n throw new Error('Unexpected input');\n}\n\nfunction updateAttributes($current: VirtualRealElement, $new: VirtualRealElement, element: HTMLElement) {\n const currentEntries = Object.entries($current.props);\n const newEntries = Object.entries($new.props);\n\n currentEntries.forEach(([key, currentValue]) => {\n const newValue = $new.props[key];\n\n if (\n currentValue !== undefined\n && (\n newValue === undefined\n || (currentValue !== newValue && key.startsWith('on'))\n )\n ) {\n removeAttribute(element, key, currentValue);\n }\n });\n\n newEntries.forEach(([key, newValue]) => {\n const currentValue = $current.props[key];\n\n if (newValue !== undefined && newValue !== currentValue) {\n setAttribute(element, key, newValue);\n }\n });\n}\n\nfunction setAttribute(element: HTMLElement, key: string, value: any) {\n // An optimization attempt\n if (key === 'className') {\n element.className = value;\n // An optimization attempt\n } else if (key === 'value') {\n if ((element as HTMLInputElement).value !== value) {\n (element as HTMLInputElement).value = value;\n }\n } else if (key === 'style') {\n element.style.cssText = value;\n } else if (key === 'dangerouslySetInnerHTML') {\n // eslint-disable-next-line no-underscore-dangle\n element.innerHTML = value.__html;\n } else if (key.startsWith('on')) {\n addEventListener(element, key, value, key.endsWith('Capture'));\n } else if (key.startsWith('data-') || key.startsWith('aria-') || HTML_ATTRIBUTES.has(key)) {\n element.setAttribute(key, value);\n } else if (!FILTERED_ATTRIBUTES.has(key)) {\n (element as any)[MAPPED_ATTRIBUTES[key] || key] = value;\n }\n}\n\nfunction removeAttribute(element: HTMLElement, key: string, value: any) {\n if (key === 'className') {\n element.className = '';\n } else if (key === 'value') {\n (element as HTMLInputElement).value = '';\n } else if (key === 'style') {\n element.style.cssText = '';\n } else if (key === 'dangerouslySetInnerHTML') {\n element.innerHTML = '';\n } else if (key.startsWith('on')) {\n removeEventListener(element, key, value, key.endsWith('Capture'));\n } else if (key.startsWith('data-') || key.startsWith('aria-') || HTML_ATTRIBUTES.has(key)) {\n element.removeAttribute(key);\n } else if (!FILTERED_ATTRIBUTES.has(key)) {\n delete (element as any)[MAPPED_ATTRIBUTES[key] || key];\n }\n}\n\n// eslint-disable-next-line @typescript-eslint/naming-convention\nfunction DEBUG_addToVirtualTreeSize($current: VirtualRealElement | VirtualDomHead) {\n DEBUG_virtualTreeSize += $current.children.length;\n\n $current.children.forEach(($child) => {\n if (isRealElement($child)) {\n DEBUG_addToVirtualTreeSize($child);\n }\n });\n}\n\n// eslint-disable-next-line @typescript-eslint/naming-convention\nfunction DEBUG_checkKeyUniqueness(children: VirtualElementChildren) {\n const firstChild = children[0];\n if (firstChild && 'props' in firstChild && firstChild.props.key !== undefined) {\n const keys = children.reduce((acc: any[], child) => {\n if ('props' in child && child.props.key) {\n acc.push(child.props.key);\n }\n\n return acc;\n }, []);\n\n if (keys.length !== unique(keys).length) {\n throw new Error('[Teact] Children keys are not unique');\n }\n }\n}\n\nconst TeactDOM = { render };\nexport default TeactDOM;\n","import { DEBUG, DEBUG_MORE } from '../../config';\nimport {\n fastRaf, fastRafPrimary, onTickEnd, onTickEndPrimary, throttleWithPrimaryRaf, throttleWithRaf,\n} from '../../util/schedulers';\nimport { flatten, orderBy } from '../../util/iteratees';\nimport { getUnequalProps } from '../../util/arePropsShallowEqual';\nimport { handleError } from '../../util/handleError';\nimport { removeAllDelegatedListeners } from './dom-events';\n\nexport type Props = AnyLiteral;\nexport type FC

= (props: P) => any;\n// eslint-disable-next-line @typescript-eslint/naming-convention\nexport type FC_withDebug = FC & {\n DEBUG_contentComponentName?: string;\n};\n\nexport enum VirtualElementTypesEnum {\n Empty,\n Text,\n Tag,\n Component,\n}\n\ninterface VirtualElementEmpty {\n type: VirtualElementTypesEnum.Empty;\n target?: Node;\n}\n\ninterface VirtualElementText {\n type: VirtualElementTypesEnum.Text;\n target?: Node;\n value: string;\n}\n\nexport interface VirtualElementTag {\n type: VirtualElementTypesEnum.Tag;\n target?: Node;\n tag: string;\n props: Props;\n children: VirtualElementChildren;\n}\n\nexport interface VirtualElementComponent {\n type: VirtualElementTypesEnum.Component;\n componentInstance: ComponentInstance;\n props: Props;\n children: VirtualElementChildren;\n}\n\nexport type StateHookSetter = (newValue: ((current: T) => T) | T) => void;\n\ninterface ComponentInstance {\n $element: VirtualElementComponent;\n Component: FC;\n name: string;\n props: Props;\n renderedValue?: any;\n isMounted: boolean;\n hooks: {\n state: {\n cursor: number;\n byCursor: {\n value: any;\n nextValue: any;\n setter: StateHookSetter;\n }[];\n };\n effects: {\n cursor: number;\n byCursor: {\n effect: () => void;\n dependencies?: readonly any[];\n cleanup?: Function;\n }[];\n };\n memos: {\n cursor: number;\n byCursor: {\n current: any;\n dependencies: any[];\n }[];\n };\n };\n prepareForFrame?: () => void;\n forceUpdate?: () => void;\n onUpdate?: () => void;\n}\n\nexport type VirtualElement =\n VirtualElementEmpty\n | VirtualElementText\n | VirtualElementTag\n | VirtualElementComponent;\nexport type VirtualRealElement =\n VirtualElementTag\n | VirtualElementComponent;\nexport type VirtualElementChildren = VirtualElement[];\n\nconst Fragment = Symbol('Fragment');\n\nconst DEBUG_RENDER_THRESHOLD = 7;\nconst DEBUG_EFFECT_THRESHOLD = 7;\nconst DEBUG_SILENT_RENDERS_FOR = new Set(['TeactMemoWrapper', 'TeactNContainer', 'Button', 'ListItem', 'MenuItem']);\n\nlet renderingInstance: ComponentInstance;\n\nexport function isEmptyElement($element: VirtualElement): $element is VirtualElementEmpty {\n return $element.type === VirtualElementTypesEnum.Empty;\n}\n\nexport function isTextElement($element: VirtualElement): $element is VirtualElementText {\n return $element.type === VirtualElementTypesEnum.Text;\n}\n\nexport function isTagElement($element: VirtualElement): $element is VirtualElementTag {\n return $element.type === VirtualElementTypesEnum.Tag;\n}\n\nexport function isComponentElement($element: VirtualElement): $element is VirtualElementComponent {\n return $element.type === VirtualElementTypesEnum.Component;\n}\n\nexport function isRealElement($element: VirtualElement): $element is VirtualRealElement {\n return isTagElement($element) || isComponentElement($element);\n}\n\nfunction createElement(\n source: string | FC | typeof Fragment,\n props: Props,\n ...children: any[]\n): VirtualRealElement | VirtualElementChildren {\n if (!props) {\n props = {};\n }\n\n children = flatten(children);\n\n if (source === Fragment) {\n return children;\n } else if (typeof source === 'function') {\n return createComponentInstance(source, props, children);\n } else {\n return buildTagElement(source, props, children);\n }\n}\n\nfunction createComponentInstance(Component: FC, props: Props, children: any[]): VirtualElementComponent {\n let parsedChildren: any | any[] | undefined;\n if (children.length === 0) {\n parsedChildren = undefined;\n } else if (children.length === 1) {\n [parsedChildren] = children;\n } else {\n parsedChildren = children;\n }\n\n const componentInstance: ComponentInstance = {\n $element: {} as VirtualElementComponent,\n Component,\n name: Component.name,\n props: {\n ...props,\n ...(parsedChildren && { children: parsedChildren }),\n },\n isMounted: false,\n hooks: {\n state: {\n cursor: 0,\n byCursor: [],\n },\n effects: {\n cursor: 0,\n byCursor: [],\n },\n memos: {\n cursor: 0,\n byCursor: [],\n },\n },\n };\n\n componentInstance.$element = buildComponentElement(componentInstance);\n\n return componentInstance.$element;\n}\n\nfunction buildComponentElement(\n componentInstance: ComponentInstance,\n children: VirtualElementChildren = [],\n): VirtualElementComponent {\n const { props } = componentInstance;\n\n return {\n componentInstance,\n type: VirtualElementTypesEnum.Component,\n props,\n children,\n };\n}\n\nfunction buildTagElement(tag: string, props: Props, children: any[]): VirtualElementTag {\n return {\n type: VirtualElementTypesEnum.Tag,\n tag,\n props,\n children: dropEmptyTail(children).map(buildChildElement),\n };\n}\n\n// We only need placeholders in the middle of collection (to ensure other elements order).\nfunction dropEmptyTail(children: any[]) {\n let i = children.length - 1;\n\n for (; i >= 0; i--) {\n if (!isEmptyPlaceholder(children[i])) {\n break;\n }\n }\n\n return i + 1 < children.length ? children.slice(0, i + 1) : children;\n}\n\nfunction isEmptyPlaceholder(child: any) {\n // eslint-disable-next-line no-null/no-null\n return child === false || child === null || child === undefined;\n}\n\nfunction buildChildElement(child: any): VirtualElement {\n if (isEmptyPlaceholder(child)) {\n return buildEmptyElement();\n } else if (isRealElement(child)) {\n return child;\n } else {\n return buildTextElement(child);\n }\n}\n\nfunction buildTextElement(value: any): VirtualElementText {\n return {\n type: VirtualElementTypesEnum.Text,\n value: String(value),\n };\n}\n\nfunction buildEmptyElement(): VirtualElementEmpty {\n return { type: VirtualElementTypesEnum.Empty };\n}\n\n// eslint-disable-next-line @typescript-eslint/naming-convention\nconst DEBUG_components: AnyLiteral = {};\n\ndocument.addEventListener('dblclick', () => {\n // eslint-disable-next-line no-console\n console.warn('COMPONENTS', orderBy(Object.values(DEBUG_components), 'renderCount', 'desc'));\n});\n\nexport function renderComponent(componentInstance: ComponentInstance) {\n renderingInstance = componentInstance;\n componentInstance.hooks.state.cursor = 0;\n componentInstance.hooks.effects.cursor = 0;\n componentInstance.hooks.memos.cursor = 0;\n\n const { Component, props } = componentInstance;\n let newRenderedValue;\n\n try {\n // eslint-disable-next-line @typescript-eslint/naming-convention\n let DEBUG_startAt: number | undefined;\n if (DEBUG) {\n const componentName = componentInstance.name;\n if (!DEBUG_components[componentName]) {\n DEBUG_components[componentName] = {\n componentName,\n renderCount: 0,\n renderTimes: [],\n };\n }\n\n if (DEBUG_MORE) {\n if (!DEBUG_SILENT_RENDERS_FOR.has(componentName)) {\n // eslint-disable-next-line no-console\n console.log(`[Teact] Render ${componentName}`);\n }\n }\n\n DEBUG_startAt = performance.now();\n }\n\n newRenderedValue = Component(props);\n\n if (DEBUG) {\n const duration = performance.now() - DEBUG_startAt!;\n const componentName = componentInstance.name;\n if (duration > DEBUG_RENDER_THRESHOLD) {\n // eslint-disable-next-line no-console\n console.warn(`[Teact] Slow component render: ${componentName}, ${Math.round(duration)} ms`);\n }\n DEBUG_components[componentName].renderTimes.push(duration);\n DEBUG_components[componentName].renderCount++;\n }\n } catch (err: any) {\n handleError(err);\n\n newRenderedValue = componentInstance.renderedValue;\n }\n\n if (componentInstance.isMounted && newRenderedValue === componentInstance.renderedValue) {\n return componentInstance.$element;\n }\n\n componentInstance.renderedValue = newRenderedValue;\n\n const newChild = buildChildElement(newRenderedValue);\n componentInstance.$element = buildComponentElement(componentInstance, [newChild]);\n\n return componentInstance.$element;\n}\n\nexport function hasElementChanged($old: VirtualElement, $new: VirtualElement) {\n if (typeof $old !== typeof $new) {\n return true;\n } else if ($old.type !== $new.type) {\n return true;\n } else if (isTextElement($old) && isTextElement($new)) {\n return $old.value !== $new.value;\n } else if (isTagElement($old) && isTagElement($new)) {\n return ($old.tag !== $new.tag) || ($old.props.key !== $new.props.key);\n } else if (isComponentElement($old) && isComponentElement($new)) {\n return (\n $old.componentInstance.Component !== $new.componentInstance.Component\n ) || (\n $old.props.key !== $new.props.key\n );\n }\n\n return false;\n}\n\nexport function unmountTree($element: VirtualElement) {\n if (isComponentElement($element)) {\n unmountComponent($element.componentInstance);\n } else {\n if (isTagElement($element)) {\n if ($element.target) {\n removeAllDelegatedListeners($element.target as HTMLElement);\n }\n\n if ($element.props.ref) {\n $element.props.ref.current = undefined; // Help GC\n }\n }\n\n if ($element.target) {\n $element.target = undefined; // Help GC\n }\n\n if (!isRealElement($element)) {\n return;\n }\n }\n\n $element.children.forEach(unmountTree);\n}\n\nexport function mountComponent(componentInstance: ComponentInstance) {\n renderComponent(componentInstance);\n componentInstance.isMounted = true;\n return componentInstance.$element;\n}\n\nfunction unmountComponent(componentInstance: ComponentInstance) {\n if (!componentInstance.isMounted) {\n return;\n }\n\n // We need to clean refs before running effect cleanups\n componentInstance.hooks.memos.byCursor.forEach((memoContainer) => {\n memoContainer.current = undefined;\n });\n\n componentInstance.hooks.effects.byCursor.forEach(({ cleanup }) => {\n if (typeof cleanup === 'function') {\n try {\n cleanup();\n } catch (err: any) {\n handleError(err);\n }\n }\n });\n\n componentInstance.isMounted = false;\n\n helpGc(componentInstance);\n}\n\n// We need to remove all references to DOM objects. We also clean all other references, just in case\nfunction helpGc(componentInstance: ComponentInstance) {\n componentInstance.hooks.effects.byCursor.forEach((hook) => {\n hook.cleanup = undefined;\n hook.effect = undefined as any;\n hook.dependencies = undefined;\n });\n\n componentInstance.hooks.state.byCursor.forEach((hook) => {\n hook.value = undefined;\n hook.nextValue = undefined;\n hook.setter = undefined as any;\n });\n\n componentInstance.hooks.memos.byCursor.forEach((hook) => {\n hook.dependencies = undefined as any;\n });\n\n componentInstance.hooks = undefined as any;\n componentInstance.$element = undefined as any;\n componentInstance.renderedValue = undefined;\n componentInstance.Component = undefined as any;\n componentInstance.props = undefined as any;\n componentInstance.forceUpdate = undefined;\n componentInstance.onUpdate = undefined;\n}\n\nfunction prepareComponentForFrame(componentInstance: ComponentInstance) {\n if (!componentInstance.isMounted) {\n return;\n }\n\n componentInstance.hooks.state.byCursor.forEach((hook) => {\n hook.value = hook.nextValue;\n });\n\n componentInstance.prepareForFrame = throttleWithPrimaryRaf(() => prepareComponentForFrame(componentInstance));\n componentInstance.forceUpdate = throttleWithRaf(() => forceUpdateComponent(componentInstance));\n}\n\nfunction forceUpdateComponent(componentInstance: ComponentInstance) {\n if (!componentInstance.isMounted || !componentInstance.onUpdate) {\n return;\n }\n\n const currentElement = componentInstance.$element;\n\n renderComponent(componentInstance);\n\n if (componentInstance.$element !== currentElement) {\n componentInstance.onUpdate();\n }\n}\n\nexport function getTarget($element: VirtualElement): Node | undefined {\n if (isComponentElement($element)) {\n const componentElement = $element.children[0];\n return componentElement ? getTarget(componentElement) : undefined;\n } else {\n return $element.target;\n }\n}\n\nexport function setTarget($element: VirtualElement, target: Node) {\n if (isComponentElement($element)) {\n setTarget($element.children[0], target);\n } else {\n $element.target = target;\n }\n}\n\nexport function useState(): [T, StateHookSetter];\nexport function useState(initial: T): [T, StateHookSetter];\nexport function useState(initial?: T): [T, StateHookSetter] {\n const { cursor, byCursor } = renderingInstance.hooks.state;\n\n if (byCursor[cursor] === undefined) {\n byCursor[cursor] = {\n value: initial,\n nextValue: initial,\n setter: ((componentInstance) => (newValue: ((current: T) => T) | T) => {\n if (byCursor[cursor].nextValue !== newValue) {\n byCursor[cursor].nextValue = typeof newValue === 'function'\n ? (newValue as (current: T) => T)(byCursor[cursor].value)\n : newValue;\n\n if (!componentInstance.prepareForFrame || !componentInstance.forceUpdate) {\n componentInstance.prepareForFrame = throttleWithPrimaryRaf(\n () => prepareComponentForFrame(componentInstance),\n );\n componentInstance.forceUpdate = throttleWithRaf(\n () => forceUpdateComponent(componentInstance),\n );\n }\n\n componentInstance.prepareForFrame();\n componentInstance.forceUpdate();\n\n if (DEBUG_MORE) {\n if (componentInstance.name !== 'TeactNContainer') {\n // eslint-disable-next-line no-console\n console.log(\n '[Teact.useState]',\n componentInstance.name,\n // `componentInstance.Component` may be set to `null` by GC helper\n componentInstance.Component && (componentInstance.Component as FC_withDebug).DEBUG_contentComponentName\n ? `> ${(componentInstance.Component as FC_withDebug).DEBUG_contentComponentName}`\n : '',\n `Forced update at cursor #${cursor}, next value: `,\n byCursor[cursor].nextValue,\n );\n }\n }\n }\n })(renderingInstance),\n };\n }\n\n renderingInstance.hooks.state.cursor++;\n\n return [\n byCursor[cursor].value,\n byCursor[cursor].setter,\n ];\n}\n\nfunction useLayoutEffectBase(\n schedulerFn: typeof onTickEnd | typeof requestAnimationFrame,\n primarySchedulerFn: typeof onTickEnd | typeof requestAnimationFrame,\n effect: () => Function | void,\n dependencies?: readonly any[],\n debugKey?: string,\n) {\n const { cursor, byCursor } = renderingInstance.hooks.effects;\n const componentInstance = renderingInstance;\n\n function execCleanup() {\n if (!componentInstance.isMounted) {\n return;\n }\n\n const { cleanup } = byCursor[cursor];\n if (typeof cleanup === 'function') {\n try {\n // eslint-disable-next-line @typescript-eslint/naming-convention\n let DEBUG_startAt: number | undefined;\n if (DEBUG) {\n DEBUG_startAt = performance.now();\n }\n\n cleanup();\n\n if (DEBUG) {\n const duration = performance.now() - DEBUG_startAt!;\n const componentName = componentInstance.name;\n if (duration > DEBUG_EFFECT_THRESHOLD) {\n // eslint-disable-next-line no-console\n console.warn(\n `[Teact] Slow cleanup at effect cursor #${cursor}: ${componentName}, ${Math.round(duration)} ms`,\n );\n }\n }\n } catch (err: any) {\n handleError(err);\n }\n }\n }\n\n function exec() {\n if (!componentInstance.isMounted) {\n return;\n }\n\n // eslint-disable-next-line @typescript-eslint/naming-convention\n let DEBUG_startAt: number | undefined;\n if (DEBUG) {\n DEBUG_startAt = performance.now();\n }\n\n byCursor[cursor].cleanup = effect() as Function;\n\n if (DEBUG) {\n const duration = performance.now() - DEBUG_startAt!;\n const componentName = componentInstance.name;\n if (duration > DEBUG_EFFECT_THRESHOLD) {\n // eslint-disable-next-line no-console\n console.warn(`[Teact] Slow effect at cursor #${cursor}: ${componentName}, ${Math.round(duration)} ms`);\n }\n }\n }\n\n if (byCursor[cursor] !== undefined && dependencies && byCursor[cursor].dependencies) {\n if (dependencies.some((dependency, i) => dependency !== byCursor[cursor].dependencies![i])) {\n if (debugKey) {\n const causedBy = dependencies.reduce((res, newValue, i) => {\n const prevValue = byCursor[cursor].dependencies![i];\n if (newValue !== prevValue) {\n res.push(`${i}: ${prevValue} => ${newValue}`);\n }\n\n return res;\n }, []);\n\n // eslint-disable-next-line no-console\n console.log(`[Teact] Effect \"${debugKey}\" caused by dependencies.`, causedBy.join(', '));\n }\n\n primarySchedulerFn(execCleanup);\n schedulerFn(exec);\n }\n } else {\n if (debugKey) {\n // eslint-disable-next-line no-console\n console.log(`[Teact] Effect \"${debugKey}\" caused by missing dependencies.`);\n }\n\n primarySchedulerFn(execCleanup);\n schedulerFn(exec);\n }\n\n byCursor[cursor] = {\n effect,\n dependencies,\n cleanup: byCursor[cursor] ? byCursor[cursor].cleanup : undefined,\n };\n\n renderingInstance.hooks.effects.cursor++;\n}\n\nexport function useEffect(effect: () => Function | void, dependencies?: readonly any[], debugKey?: string) {\n return useLayoutEffectBase(fastRaf, fastRafPrimary, effect, dependencies, debugKey);\n}\n\nexport function useLayoutEffect(effect: () => Function | void, dependencies?: readonly any[], debugKey?: string) {\n return useLayoutEffectBase(onTickEnd, onTickEndPrimary, effect, dependencies, debugKey);\n}\n\nexport function useMemo(resolver: () => T, dependencies: any[], debugKey?: string): T {\n const { cursor, byCursor } = renderingInstance.hooks.memos;\n let { current } = byCursor[cursor] || {};\n\n if (\n byCursor[cursor] === undefined\n || dependencies.some((dependency, i) => dependency !== byCursor[cursor].dependencies[i])\n ) {\n if (DEBUG && debugKey) {\n // eslint-disable-next-line no-console\n console.log(\n `[Teact.useMemo] ${renderingInstance.name} (${debugKey}): Update is caused by:`,\n byCursor[cursor]\n ? getUnequalProps(dependencies, byCursor[cursor].dependencies).join(', ')\n : '[first render]',\n );\n }\n\n current = resolver();\n }\n\n byCursor[cursor] = {\n current,\n dependencies,\n };\n\n renderingInstance.hooks.memos.cursor++;\n\n return current;\n}\n\nexport function useCallback(newCallback: F, dependencies: any[], debugKey?: string): F {\n // eslint-disable-next-line react-hooks/exhaustive-deps\n return useMemo(() => newCallback, dependencies, debugKey);\n}\n\nexport function useRef(initial: T): { current: T };\nexport function useRef(): { current: T | undefined }; // TT way (empty is `undefined`)\nexport function useRef(initial: null): { current: T | null }; // React way (empty is `null`)\n// eslint-disable-next-line no-null/no-null\nexport function useRef(initial?: T | null) {\n return useMemo(() => ({\n current: initial,\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }), []);\n}\n\nexport function memo(Component: T, debugKey?: string) {\n return function TeactMemoWrapper(props: Props) {\n // eslint-disable-next-line react-hooks/exhaustive-deps\n return useMemo(() => createElement(Component, props), Object.values(props), debugKey);\n } as T;\n}\n\n// We need to keep it here for JSX.\nconst Teact = {\n createElement,\n Fragment,\n};\n\nexport default Teact;\n","import React, {\n FC, FC_withDebug, Props, useEffect, useState,\n} from './teact';\n\nimport { DEBUG, DEBUG_MORE } from '../../config';\nimport useForceUpdate from '../../hooks/useForceUpdate';\nimport generateIdFor from '../../util/generateIdFor';\nimport { fastRaf, throttleWithTickEnd } from '../../util/schedulers';\nimport arePropsShallowEqual, { getUnequalProps } from '../../util/arePropsShallowEqual';\nimport { orderBy } from '../../util/iteratees';\nimport { handleError } from '../../util/handleError';\nimport { isHeavyAnimating } from '../../hooks/useHeavyAnimationCheck';\n\nexport default React;\n\ntype GlobalState = AnyLiteral;\ntype ActionNames = string;\ntype ActionPayload = any;\n\ninterface ActionOptions {\n forceOnHeavyAnimation?: boolean;\n // Workaround for iOS gesture history navigation\n forceSyncOnIOs?: boolean;\n}\n\ntype Actions = Record void>;\n\ntype ActionHandler = (\n global: GlobalState,\n actions: Actions,\n payload: any,\n) => GlobalState | void | Promise;\n\ntype MapStateToProps = ((global: GlobalState, ownProps: OwnProps) => AnyLiteral);\n\nlet currentGlobal = {} as GlobalState;\n\nconst actionHandlers: Record = {};\nconst callbacks: Function[] = [updateContainers];\nconst actions = {} as Actions;\nconst containers = new Map;\n ownProps: Props;\n mappedProps?: Props;\n forceUpdate: Function;\n areMappedPropsChanged: boolean;\n DEBUG_updates: number;\n DEBUG_componentName: string;\n}>();\n\nconst runCallbacksThrottled = throttleWithTickEnd(runCallbacks);\n\nfunction runCallbacks(forceOnHeavyAnimation = false) {\n if (!forceOnHeavyAnimation && isHeavyAnimating()) {\n fastRaf(runCallbacksThrottled);\n return;\n }\n\n callbacks.forEach((cb) => cb(currentGlobal));\n}\n\nexport function setGlobal(newGlobal?: GlobalState, options?: ActionOptions) {\n if (typeof newGlobal === 'object' && newGlobal !== currentGlobal) {\n currentGlobal = newGlobal;\n if (options?.forceSyncOnIOs) {\n runCallbacks(true);\n } else {\n runCallbacksThrottled(options?.forceOnHeavyAnimation);\n }\n }\n}\n\nexport function getGlobal() {\n return currentGlobal;\n}\n\nexport function getActions() {\n return actions;\n}\n\nfunction handleAction(name: string, payload?: ActionPayload, options?: ActionOptions) {\n actionHandlers[name]?.forEach((handler) => {\n const response = handler(currentGlobal, actions, payload);\n if (!response) {\n return;\n }\n\n if (typeof response.then === 'function') {\n response.then((newGlobal: GlobalState | void) => {\n if (newGlobal) {\n setGlobal(newGlobal, options);\n }\n });\n } else {\n setGlobal(response, options);\n }\n });\n}\n\nfunction updateContainers() {\n // eslint-disable-next-line @typescript-eslint/naming-convention\n let DEBUG_startAt: number | undefined;\n if (DEBUG) {\n DEBUG_startAt = performance.now();\n }\n\n // eslint-disable-next-line no-restricted-syntax\n for (const container of containers.values()) {\n const {\n mapStateToProps, ownProps, mappedProps, forceUpdate,\n } = container;\n\n let newMappedProps;\n\n try {\n newMappedProps = mapStateToProps(currentGlobal, ownProps);\n } catch (err: any) {\n handleError(err);\n\n return;\n }\n\n if (DEBUG) {\n if (Object.values(newMappedProps).some(Number.isNaN)) {\n // eslint-disable-next-line no-console\n console.warn(\n // eslint-disable-next-line max-len\n `[TeactN] Some of \\`${container.DEBUG_componentName}\\` mappers contain NaN values. This may cause redundant updates because of incorrect equality check.`,\n );\n }\n }\n\n if (Object.keys(newMappedProps).length && !arePropsShallowEqual(mappedProps!, newMappedProps)) {\n if (DEBUG_MORE) {\n // eslint-disable-next-line no-console\n console.log(\n '[TeactN] Will update',\n container.DEBUG_componentName,\n 'caused by',\n getUnequalProps(mappedProps!, newMappedProps).join(', '),\n );\n }\n\n container.mappedProps = newMappedProps;\n container.areMappedPropsChanged = true;\n container.DEBUG_updates++;\n\n forceUpdate();\n }\n }\n\n if (DEBUG) {\n const updateTime = performance.now() - DEBUG_startAt!;\n if (updateTime > 7) {\n // eslint-disable-next-line no-console\n console.warn(`[TeactN] Slow containers update: ${Math.round(updateTime)} ms`);\n }\n }\n}\n\nexport function addActionHandler(name: ActionNames, handler: ActionHandler) {\n if (!actionHandlers[name]) {\n actionHandlers[name] = [];\n\n actions[name] = (payload?: ActionPayload, options?: ActionOptions) => {\n handleAction(name, payload, options);\n };\n }\n\n actionHandlers[name].push(handler);\n}\n\nexport function addCallback(cb: Function) {\n callbacks.push(cb);\n}\n\nexport function removeCallback(cb: Function) {\n const index = callbacks.indexOf(cb);\n if (index !== -1) {\n callbacks.splice(index, 1);\n }\n}\n\nexport function withGlobal(\n mapStateToProps: MapStateToProps = () => ({}),\n) {\n return (Component: FC) => {\n return function TeactNContainer(props: OwnProps) {\n (TeactNContainer as FC_withDebug).DEBUG_contentComponentName = Component.name;\n\n const [id] = useState(generateIdFor(containers));\n const forceUpdate = useForceUpdate();\n\n useEffect(() => {\n return () => {\n containers.delete(id);\n };\n }, [id]);\n\n let container = containers.get(id);\n if (!container) {\n container = {\n mapStateToProps,\n ownProps: props,\n areMappedPropsChanged: false,\n forceUpdate,\n DEBUG_updates: 0,\n DEBUG_componentName: Component.name,\n };\n\n containers.set(id, container);\n }\n\n if (container.areMappedPropsChanged) {\n container.areMappedPropsChanged = false;\n }\n\n if (!container.mappedProps || !arePropsShallowEqual(container.ownProps, props)) {\n container.ownProps = props;\n\n try {\n container.mappedProps = mapStateToProps(currentGlobal, props);\n } catch (err: any) {\n handleError(err);\n }\n }\n\n // eslint-disable-next-line react/jsx-props-no-spreading\n return ;\n };\n };\n}\n\nexport function typify() {\n type NonTypedActionPayloads = {\n [ActionName in NonTypedActionNames]: ActionPayload;\n };\n\n type ProjectActionTypes =\n ActionPayloads\n & NonTypedActionPayloads;\n\n type ProjectActionNames = keyof ProjectActionTypes;\n\n type ProjectActions = {\n [ActionName in ProjectActionNames]: (\n payload?: ProjectActionTypes[ActionName],\n options?: ActionOptions,\n ) => void;\n };\n\n type ActionHandlers = {\n [ActionName in keyof ProjectActionTypes]: (\n global: ProjectGlobalState,\n actions: ProjectActions,\n payload: ProjectActionTypes[ActionName],\n ) => ProjectGlobalState | void | Promise;\n };\n\n return {\n getGlobal: getGlobal as () => ProjectGlobalState,\n setGlobal: setGlobal as (state: ProjectGlobalState, options?: ActionOptions) => void,\n getActions: getActions as () => ProjectActions,\n addActionHandler: addActionHandler as (\n name: ActionName,\n handler: ActionHandlers[ActionName],\n ) => void,\n withGlobal: withGlobal as (\n mapStateToProps: ((global: ProjectGlobalState, ownProps: OwnProps) => AnyLiteral),\n ) => (Component: FC) => FC,\n };\n}\n\nif (DEBUG) {\n (window as any).getGlobal = getGlobal;\n\n document.addEventListener('dblclick', () => {\n // eslint-disable-next-line no-console\n console.warn(\n 'GLOBAL CONTAINERS',\n orderBy(\n Array.from(containers.values())\n .map(({ DEBUG_componentName, DEBUG_updates }) => ({ DEBUG_componentName, DEBUG_updates })),\n 'DEBUG_updates',\n 'desc',\n ),\n );\n });\n}\n","// Copyright Twitter Inc. Licensed under MIT\n// https://github.com/twitter/twemoji-parser/blob/master/LICENSE.md\n// Version 2c193ce 28.05.2021\n\nconst vs16RegExp = /\\uFE0F/g;\n// avoid using a string literal like '\\u200D' here because minifiers expand it inline\nconst zeroWidthJoiner = String.fromCharCode(0x200d);\n\nexport function removeVS16s(rawEmoji) {\n return rawEmoji.indexOf(zeroWidthJoiner) < 0 ? rawEmoji.replace(vs16RegExp, '') : rawEmoji;\n}\n\n// This file is generated by source/emoji/scripts/generate.sh\n// eslint-disable-next-line max-len\nexport default /(?:\\ud83d\\udc68\\ud83c\\udffb\\u200d\\u2764\\ufe0f\\u200d\\ud83d\\udc8b\\u200d\\ud83d\\udc68\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc68\\ud83c\\udffc\\u200d\\u2764\\ufe0f\\u200d\\ud83d\\udc8b\\u200d\\ud83d\\udc68\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc68\\ud83c\\udffd\\u200d\\u2764\\ufe0f\\u200d\\ud83d\\udc8b\\u200d\\ud83d\\udc68\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc68\\ud83c\\udffe\\u200d\\u2764\\ufe0f\\u200d\\ud83d\\udc8b\\u200d\\ud83d\\udc68\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc68\\ud83c\\udfff\\u200d\\u2764\\ufe0f\\u200d\\ud83d\\udc8b\\u200d\\ud83d\\udc68\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc69\\ud83c\\udffb\\u200d\\u2764\\ufe0f\\u200d\\ud83d\\udc8b\\u200d\\ud83d\\udc68\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc69\\ud83c\\udffb\\u200d\\u2764\\ufe0f\\u200d\\ud83d\\udc8b\\u200d\\ud83d\\udc69\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc69\\ud83c\\udffc\\u200d\\u2764\\ufe0f\\u200d\\ud83d\\udc8b\\u200d\\ud83d\\udc68\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc69\\ud83c\\udffc\\u200d\\u2764\\ufe0f\\u200d\\ud83d\\udc8b\\u200d\\ud83d\\udc69\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc69\\ud83c\\udffd\\u200d\\u2764\\ufe0f\\u200d\\ud83d\\udc8b\\u200d\\ud83d\\udc68\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc69\\ud83c\\udffd\\u200d\\u2764\\ufe0f\\u200d\\ud83d\\udc8b\\u200d\\ud83d\\udc69\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc69\\ud83c\\udffe\\u200d\\u2764\\ufe0f\\u200d\\ud83d\\udc8b\\u200d\\ud83d\\udc68\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc69\\ud83c\\udffe\\u200d\\u2764\\ufe0f\\u200d\\ud83d\\udc8b\\u200d\\ud83d\\udc69\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc69\\ud83c\\udfff\\u200d\\u2764\\ufe0f\\u200d\\ud83d\\udc8b\\u200d\\ud83d\\udc68\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc69\\ud83c\\udfff\\u200d\\u2764\\ufe0f\\u200d\\ud83d\\udc8b\\u200d\\ud83d\\udc69\\ud83c[\\udffb-\\udfff]|\\ud83e\\uddd1\\ud83c\\udffb\\u200d\\u2764\\ufe0f\\u200d\\ud83d\\udc8b\\u200d\\ud83e\\uddd1\\ud83c[\\udffc-\\udfff]|\\ud83e\\uddd1\\ud83c\\udffc\\u200d\\u2764\\ufe0f\\u200d\\ud83d\\udc8b\\u200d\\ud83e\\uddd1\\ud83c[\\udffb\\udffd-\\udfff]|\\ud83e\\uddd1\\ud83c\\udffd\\u200d\\u2764\\ufe0f\\u200d\\ud83d\\udc8b\\u200d\\ud83e\\uddd1\\ud83c[\\udffb\\udffc\\udffe\\udfff]|\\ud83e\\uddd1\\ud83c\\udffe\\u200d\\u2764\\ufe0f\\u200d\\ud83d\\udc8b\\u200d\\ud83e\\uddd1\\ud83c[\\udffb-\\udffd\\udfff]|\\ud83e\\uddd1\\ud83c\\udfff\\u200d\\u2764\\ufe0f\\u200d\\ud83d\\udc8b\\u200d\\ud83e\\uddd1\\ud83c[\\udffb-\\udffe]|\\ud83d\\udc68\\ud83c\\udffb\\u200d\\u2764\\ufe0f\\u200d\\ud83d\\udc68\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc68\\ud83c\\udffb\\u200d\\ud83e\\udd1d\\u200d\\ud83d\\udc68\\ud83c[\\udffc-\\udfff]|\\ud83d\\udc68\\ud83c\\udffc\\u200d\\u2764\\ufe0f\\u200d\\ud83d\\udc68\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc68\\ud83c\\udffc\\u200d\\ud83e\\udd1d\\u200d\\ud83d\\udc68\\ud83c[\\udffb\\udffd-\\udfff]|\\ud83d\\udc68\\ud83c\\udffd\\u200d\\u2764\\ufe0f\\u200d\\ud83d\\udc68\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc68\\ud83c\\udffd\\u200d\\ud83e\\udd1d\\u200d\\ud83d\\udc68\\ud83c[\\udffb\\udffc\\udffe\\udfff]|\\ud83d\\udc68\\ud83c\\udffe\\u200d\\u2764\\ufe0f\\u200d\\ud83d\\udc68\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc68\\ud83c\\udffe\\u200d\\ud83e\\udd1d\\u200d\\ud83d\\udc68\\ud83c[\\udffb-\\udffd\\udfff]|\\ud83d\\udc68\\ud83c\\udfff\\u200d\\u2764\\ufe0f\\u200d\\ud83d\\udc68\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc68\\ud83c\\udfff\\u200d\\ud83e\\udd1d\\u200d\\ud83d\\udc68\\ud83c[\\udffb-\\udffe]|\\ud83d\\udc69\\ud83c\\udffb\\u200d\\u2764\\ufe0f\\u200d\\ud83d\\udc68\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc69\\ud83c\\udffb\\u200d\\u2764\\ufe0f\\u200d\\ud83d\\udc69\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc69\\ud83c\\udffb\\u200d\\ud83e\\udd1d\\u200d\\ud83d\\udc68\\ud83c[\\udffc-\\udfff]|\\ud83d\\udc69\\ud83c\\udffb\\u200d\\ud83e\\udd1d\\u200d\\ud83d\\udc69\\ud83c[\\udffc-\\udfff]|\\ud83d\\udc69\\ud83c\\udffc\\u200d\\u2764\\ufe0f\\u200d\\ud83d\\udc68\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc69\\ud83c\\udffc\\u200d\\u2764\\ufe0f\\u200d\\ud83d\\udc69\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc69\\ud83c\\udffc\\u200d\\ud83e\\udd1d\\u200d\\ud83d\\udc68\\ud83c[\\udffb\\udffd-\\udfff]|\\ud83d\\udc69\\ud83c\\udffc\\u200d\\ud83e\\udd1d\\u200d\\ud83d\\udc69\\ud83c[\\udffb\\udffd-\\udfff]|\\ud83d\\udc69\\ud83c\\udffd\\u200d\\u2764\\ufe0f\\u200d\\ud83d\\udc68\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc69\\ud83c\\udffd\\u200d\\u2764\\ufe0f\\u200d\\ud83d\\udc69\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc69\\ud83c\\udffd\\u200d\\ud83e\\udd1d\\u200d\\ud83d\\udc68\\ud83c[\\udffb\\udffc\\udffe\\udfff]|\\ud83d\\udc69\\ud83c\\udffd\\u200d\\ud83e\\udd1d\\u200d\\ud83d\\udc69\\ud83c[\\udffb\\udffc\\udffe\\udfff]|\\ud83d\\udc69\\ud83c\\udffe\\u200d\\u2764\\ufe0f\\u200d\\ud83d\\udc68\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc69\\ud83c\\udffe\\u200d\\u2764\\ufe0f\\u200d\\ud83d\\udc69\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc69\\ud83c\\udffe\\u200d\\ud83e\\udd1d\\u200d\\ud83d\\udc68\\ud83c[\\udffb-\\udffd\\udfff]|\\ud83d\\udc69\\ud83c\\udffe\\u200d\\ud83e\\udd1d\\u200d\\ud83d\\udc69\\ud83c[\\udffb-\\udffd\\udfff]|\\ud83d\\udc69\\ud83c\\udfff\\u200d\\u2764\\ufe0f\\u200d\\ud83d\\udc68\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc69\\ud83c\\udfff\\u200d\\u2764\\ufe0f\\u200d\\ud83d\\udc69\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc69\\ud83c\\udfff\\u200d\\ud83e\\udd1d\\u200d\\ud83d\\udc68\\ud83c[\\udffb-\\udffe]|\\ud83d\\udc69\\ud83c\\udfff\\u200d\\ud83e\\udd1d\\u200d\\ud83d\\udc69\\ud83c[\\udffb-\\udffe]|\\ud83e\\uddd1\\ud83c\\udffb\\u200d\\u2764\\ufe0f\\u200d\\ud83e\\uddd1\\ud83c[\\udffc-\\udfff]|\\ud83e\\uddd1\\ud83c\\udffb\\u200d\\ud83e\\udd1d\\u200d\\ud83e\\uddd1\\ud83c[\\udffb-\\udfff]|\\ud83e\\uddd1\\ud83c\\udffc\\u200d\\u2764\\ufe0f\\u200d\\ud83e\\uddd1\\ud83c[\\udffb\\udffd-\\udfff]|\\ud83e\\uddd1\\ud83c\\udffc\\u200d\\ud83e\\udd1d\\u200d\\ud83e\\uddd1\\ud83c[\\udffb-\\udfff]|\\ud83e\\uddd1\\ud83c\\udffd\\u200d\\u2764\\ufe0f\\u200d\\ud83e\\uddd1\\ud83c[\\udffb\\udffc\\udffe\\udfff]|\\ud83e\\uddd1\\ud83c\\udffd\\u200d\\ud83e\\udd1d\\u200d\\ud83e\\uddd1\\ud83c[\\udffb-\\udfff]|\\ud83e\\uddd1\\ud83c\\udffe\\u200d\\u2764\\ufe0f\\u200d\\ud83e\\uddd1\\ud83c[\\udffb-\\udffd\\udfff]|\\ud83e\\uddd1\\ud83c\\udffe\\u200d\\ud83e\\udd1d\\u200d\\ud83e\\uddd1\\ud83c[\\udffb-\\udfff]|\\ud83e\\uddd1\\ud83c\\udfff\\u200d\\u2764\\ufe0f\\u200d\\ud83e\\uddd1\\ud83c[\\udffb-\\udffe]|\\ud83e\\uddd1\\ud83c\\udfff\\u200d\\ud83e\\udd1d\\u200d\\ud83e\\uddd1\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc68\\u200d\\u2764\\ufe0f\\u200d\\ud83d\\udc8b\\u200d\\ud83d\\udc68|\\ud83d\\udc69\\u200d\\u2764\\ufe0f\\u200d\\ud83d\\udc8b\\u200d\\ud83d[\\udc68\\udc69]|\\ud83d\\udc68\\u200d\\u2764\\ufe0f\\u200d\\ud83d\\udc68|\\ud83d\\udc69\\u200d\\u2764\\ufe0f\\u200d\\ud83d[\\udc68\\udc69]|\\ud83e\\uddd1\\u200d\\ud83e\\udd1d\\u200d\\ud83e\\uddd1|\\ud83d\\udc6b\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc6c\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc6d\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc8f\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc91\\ud83c[\\udffb-\\udfff]|\\ud83d[\\udc6b-\\udc6d\\udc8f\\udc91])|(?:\\ud83d[\\udc68\\udc69]|\\ud83e\\uddd1)(?:\\ud83c[\\udffb-\\udfff])?\\u200d(?:\\u2695\\ufe0f|\\u2696\\ufe0f|\\u2708\\ufe0f|\\ud83c[\\udf3e\\udf73\\udf7c\\udf84\\udf93\\udfa4\\udfa8\\udfeb\\udfed]|\\ud83d[\\udcbb\\udcbc\\udd27\\udd2c\\ude80\\ude92]|\\ud83e[\\uddaf-\\uddb3\\uddbc\\uddbd])|(?:\\ud83c[\\udfcb\\udfcc]|\\ud83d[\\udd74\\udd75]|\\u26f9)((?:\\ud83c[\\udffb-\\udfff]|\\ufe0f)\\u200d[\\u2640\\u2642]\\ufe0f)|(?:\\ud83c[\\udfc3\\udfc4\\udfca]|\\ud83d[\\udc6e\\udc70\\udc71\\udc73\\udc77\\udc81\\udc82\\udc86\\udc87\\ude45-\\ude47\\ude4b\\ude4d\\ude4e\\udea3\\udeb4-\\udeb6]|\\ud83e[\\udd26\\udd35\\udd37-\\udd39\\udd3d\\udd3e\\uddb8\\uddb9\\uddcd-\\uddcf\\uddd4\\uddd6-\\udddd])(?:\\ud83c[\\udffb-\\udfff])?\\u200d[\\u2640\\u2642]\\ufe0f|(?:\\ud83d\\udc68\\u200d\\ud83d\\udc68\\u200d\\ud83d\\udc66\\u200d\\ud83d\\udc66|\\ud83d\\udc68\\u200d\\ud83d\\udc68\\u200d\\ud83d\\udc67\\u200d\\ud83d[\\udc66\\udc67]|\\ud83d\\udc68\\u200d\\ud83d\\udc69\\u200d\\ud83d\\udc66\\u200d\\ud83d\\udc66|\\ud83d\\udc68\\u200d\\ud83d\\udc69\\u200d\\ud83d\\udc67\\u200d\\ud83d[\\udc66\\udc67]|\\ud83d\\udc69\\u200d\\ud83d\\udc69\\u200d\\ud83d\\udc66\\u200d\\ud83d\\udc66|\\ud83d\\udc69\\u200d\\ud83d\\udc69\\u200d\\ud83d\\udc67\\u200d\\ud83d[\\udc66\\udc67]|\\ud83d\\udc68\\u200d\\ud83d\\udc66\\u200d\\ud83d\\udc66|\\ud83d\\udc68\\u200d\\ud83d\\udc67\\u200d\\ud83d[\\udc66\\udc67]|\\ud83d\\udc68\\u200d\\ud83d\\udc68\\u200d\\ud83d[\\udc66\\udc67]|\\ud83d\\udc68\\u200d\\ud83d\\udc69\\u200d\\ud83d[\\udc66\\udc67]|\\ud83d\\udc69\\u200d\\ud83d\\udc66\\u200d\\ud83d\\udc66|\\ud83d\\udc69\\u200d\\ud83d\\udc67\\u200d\\ud83d[\\udc66\\udc67]|\\ud83d\\udc69\\u200d\\ud83d\\udc69\\u200d\\ud83d[\\udc66\\udc67]|\\ud83c\\udff3\\ufe0f\\u200d\\u26a7\\ufe0f|\\ud83c\\udff3\\ufe0f\\u200d\\ud83c\\udf08|\\ud83d\\ude36\\u200d\\ud83c\\udf2b\\ufe0f|\\u2764\\ufe0f\\u200d\\ud83d\\udd25|\\u2764\\ufe0f\\u200d\\ud83e\\ude79|\\ud83c\\udff4\\u200d\\u2620\\ufe0f|\\ud83d\\udc15\\u200d\\ud83e\\uddba|\\ud83d\\udc3b\\u200d\\u2744\\ufe0f|\\ud83d\\udc41\\u200d\\ud83d\\udde8|\\ud83d\\udc68\\u200d\\ud83d[\\udc66\\udc67]|\\ud83d\\udc69\\u200d\\ud83d[\\udc66\\udc67]|\\ud83d\\udc6f\\u200d\\u2640\\ufe0f|\\ud83d\\udc6f\\u200d\\u2642\\ufe0f|\\ud83d\\ude2e\\u200d\\ud83d\\udca8|\\ud83d\\ude35\\u200d\\ud83d\\udcab|\\ud83e\\udd3c\\u200d\\u2640\\ufe0f|\\ud83e\\udd3c\\u200d\\u2642\\ufe0f|\\ud83e\\uddde\\u200d\\u2640\\ufe0f|\\ud83e\\uddde\\u200d\\u2642\\ufe0f|\\ud83e\\udddf\\u200d\\u2640\\ufe0f|\\ud83e\\udddf\\u200d\\u2642\\ufe0f|\\ud83d\\udc08\\u200d\\u2b1b)|[#*0-9]\\ufe0f?\\u20e3|(?:[©®\\u2122\\u265f]\\ufe0f)|(?:\\ud83c[\\udc04\\udd70\\udd71\\udd7e\\udd7f\\ude02\\ude1a\\ude2f\\ude37\\udf21\\udf24-\\udf2c\\udf36\\udf7d\\udf96\\udf97\\udf99-\\udf9b\\udf9e\\udf9f\\udfcd\\udfce\\udfd4-\\udfdf\\udff3\\udff5\\udff7]|\\ud83d[\\udc3f\\udc41\\udcfd\\udd49\\udd4a\\udd6f\\udd70\\udd73\\udd76-\\udd79\\udd87\\udd8a-\\udd8d\\udda5\\udda8\\uddb1\\uddb2\\uddbc\\uddc2-\\uddc4\\uddd1-\\uddd3\\udddc-\\uddde\\udde1\\udde3\\udde8\\uddef\\uddf3\\uddfa\\udecb\\udecd-\\udecf\\udee0-\\udee5\\udee9\\udef0\\udef3]|[\\u203c\\u2049\\u2139\\u2194-\\u2199\\u21a9\\u21aa\\u231a\\u231b\\u2328\\u23cf\\u23ed-\\u23ef\\u23f1\\u23f2\\u23f8-\\u23fa\\u24c2\\u25aa\\u25ab\\u25b6\\u25c0\\u25fb-\\u25fe\\u2600-\\u2604\\u260e\\u2611\\u2614\\u2615\\u2618\\u2620\\u2622\\u2623\\u2626\\u262a\\u262e\\u262f\\u2638-\\u263a\\u2640\\u2642\\u2648-\\u2653\\u2660\\u2663\\u2665\\u2666\\u2668\\u267b\\u267f\\u2692-\\u2697\\u2699\\u269b\\u269c\\u26a0\\u26a1\\u26a7\\u26aa\\u26ab\\u26b0\\u26b1\\u26bd\\u26be\\u26c4\\u26c5\\u26c8\\u26cf\\u26d1\\u26d3\\u26d4\\u26e9\\u26ea\\u26f0-\\u26f5\\u26f8\\u26fa\\u26fd\\u2702\\u2708\\u2709\\u270f\\u2712\\u2714\\u2716\\u271d\\u2721\\u2733\\u2734\\u2744\\u2747\\u2757\\u2763\\u2764\\u27a1\\u2934\\u2935\\u2b05-\\u2b07\\u2b1b\\u2b1c\\u2b50\\u2b55\\u3030\\u303d\\u3297\\u3299])(?:\\ufe0f|(?!\\ufe0e))|(?:(?:\\ud83c[\\udfcb\\udfcc]|\\ud83d[\\udd74\\udd75\\udd90]|[\\u261d\\u26f7\\u26f9\\u270c\\u270d])(?:\\ufe0f|(?!\\ufe0e))|(?:\\ud83c[\\udf85\\udfc2-\\udfc4\\udfc7\\udfca]|\\ud83d[\\udc42\\udc43\\udc46-\\udc50\\udc66-\\udc69\\udc6e\\udc70-\\udc78\\udc7c\\udc81-\\udc83\\udc85-\\udc87\\udcaa\\udd7a\\udd95\\udd96\\ude45-\\ude47\\ude4b-\\ude4f\\udea3\\udeb4-\\udeb6\\udec0\\udecc]|\\ud83e[\\udd0c\\udd0f\\udd18-\\udd1c\\udd1e\\udd1f\\udd26\\udd30-\\udd39\\udd3d\\udd3e\\udd77\\uddb5\\uddb6\\uddb8\\uddb9\\uddbb\\uddcd-\\uddcf\\uddd1-\\udddd]|[\\u270a\\u270b]))(?:\\ud83c[\\udffb-\\udfff])?|(?:\\ud83c\\udff4\\udb40\\udc67\\udb40\\udc62\\udb40\\udc65\\udb40\\udc6e\\udb40\\udc67\\udb40\\udc7f|\\ud83c\\udff4\\udb40\\udc67\\udb40\\udc62\\udb40\\udc73\\udb40\\udc63\\udb40\\udc74\\udb40\\udc7f|\\ud83c\\udff4\\udb40\\udc67\\udb40\\udc62\\udb40\\udc77\\udb40\\udc6c\\udb40\\udc73\\udb40\\udc7f|\\ud83c\\udde6\\ud83c[\\udde8-\\uddec\\uddee\\uddf1\\uddf2\\uddf4\\uddf6-\\uddfa\\uddfc\\uddfd\\uddff]|\\ud83c\\udde7\\ud83c[\\udde6\\udde7\\udde9-\\uddef\\uddf1-\\uddf4\\uddf6-\\uddf9\\uddfb\\uddfc\\uddfe\\uddff]|\\ud83c\\udde8\\ud83c[\\udde6\\udde8\\udde9\\uddeb-\\uddee\\uddf0-\\uddf5\\uddf7\\uddfa-\\uddff]|\\ud83c\\udde9\\ud83c[\\uddea\\uddec\\uddef\\uddf0\\uddf2\\uddf4\\uddff]|\\ud83c\\uddea\\ud83c[\\udde6\\udde8\\uddea\\uddec\\udded\\uddf7-\\uddfa]|\\ud83c\\uddeb\\ud83c[\\uddee-\\uddf0\\uddf2\\uddf4\\uddf7]|\\ud83c\\uddec\\ud83c[\\udde6\\udde7\\udde9-\\uddee\\uddf1-\\uddf3\\uddf5-\\uddfa\\uddfc\\uddfe]|\\ud83c\\udded\\ud83c[\\uddf0\\uddf2\\uddf3\\uddf7\\uddf9\\uddfa]|\\ud83c\\uddee\\ud83c[\\udde8-\\uddea\\uddf1-\\uddf4\\uddf6-\\uddf9]|\\ud83c\\uddef\\ud83c[\\uddea\\uddf2\\uddf4\\uddf5]|\\ud83c\\uddf0\\ud83c[\\uddea\\uddec-\\uddee\\uddf2\\uddf3\\uddf5\\uddf7\\uddfc\\uddfe\\uddff]|\\ud83c\\uddf1\\ud83c[\\udde6-\\udde8\\uddee\\uddf0\\uddf7-\\uddfb\\uddfe]|\\ud83c\\uddf2\\ud83c[\\udde6\\udde8-\\udded\\uddf0-\\uddff]|\\ud83c\\uddf3\\ud83c[\\udde6\\udde8\\uddea-\\uddec\\uddee\\uddf1\\uddf4\\uddf5\\uddf7\\uddfa\\uddff]|\\ud83c\\uddf4\\ud83c\\uddf2|\\ud83c\\uddf5\\ud83c[\\udde6\\uddea-\\udded\\uddf0-\\uddf3\\uddf7-\\uddf9\\uddfc\\uddfe]|\\ud83c\\uddf6\\ud83c\\udde6|\\ud83c\\uddf7\\ud83c[\\uddea\\uddf4\\uddf8\\uddfa\\uddfc]|\\ud83c\\uddf8\\ud83c[\\udde6-\\uddea\\uddec-\\uddf4\\uddf7-\\uddf9\\uddfb\\uddfd-\\uddff]|\\ud83c\\uddf9\\ud83c[\\udde6\\udde8\\udde9\\uddeb-\\udded\\uddef-\\uddf4\\uddf7\\uddf9\\uddfb\\uddfc\\uddff]|\\ud83c\\uddfa\\ud83c[\\udde6\\uddec\\uddf2\\uddf3\\uddf8\\uddfe\\uddff]|\\ud83c\\uddfb\\ud83c[\\udde6\\udde8\\uddea\\uddec\\uddee\\uddf3\\uddfa]|\\ud83c\\uddfc\\ud83c[\\uddeb\\uddf8]|\\ud83c\\uddfd\\ud83c\\uddf0|\\ud83c\\uddfe\\ud83c[\\uddea\\uddf9]|\\ud83c\\uddff\\ud83c[\\udde6\\uddf2\\uddfc]|\\ud83c[\\udccf\\udd8e\\udd91-\\udd9a\\udde6-\\uddff\\ude01\\ude32-\\ude36\\ude38-\\ude3a\\ude50\\ude51\\udf00-\\udf20\\udf2d-\\udf35\\udf37-\\udf7c\\udf7e-\\udf84\\udf86-\\udf93\\udfa0-\\udfc1\\udfc5\\udfc6\\udfc8\\udfc9\\udfcf-\\udfd3\\udfe0-\\udff0\\udff4\\udff8-\\udfff]|\\ud83d[\\udc00-\\udc3e\\udc40\\udc44\\udc45\\udc51-\\udc65\\udc6a\\udc6f\\udc79-\\udc7b\\udc7d-\\udc80\\udc84\\udc88-\\udc8e\\udc90\\udc92-\\udca9\\udcab-\\udcfc\\udcff-\\udd3d\\udd4b-\\udd4e\\udd50-\\udd67\\udda4\\uddfb-\\ude44\\ude48-\\ude4a\\ude80-\\udea2\\udea4-\\udeb3\\udeb7-\\udebf\\udec1-\\udec5\\uded0-\\uded2\\uded5-\\uded7\\udeeb\\udeec\\udef4-\\udefc\\udfe0-\\udfeb]|\\ud83e[\\udd0d\\udd0e\\udd10-\\udd17\\udd1d\\udd20-\\udd25\\udd27-\\udd2f\\udd3a\\udd3c\\udd3f-\\udd45\\udd47-\\udd76\\udd78\\udd7a-\\uddb4\\uddb7\\uddba\\uddbc-\\uddcb\\uddd0\\uddde-\\uddff\\ude70-\\ude74\\ude78-\\ude7a\\ude80-\\ude86\\ude90-\\udea8\\udeb0-\\udeb6\\udec0-\\udec2\\uded0-\\uded6]|[\\u23e9-\\u23ec\\u23f0\\u23f3\\u267e\\u26ce\\u2705\\u2728\\u274c\\u274e\\u2753-\\u2755\\u2795-\\u2797\\u27b0\\u27bf\\ue50a])|\\ufe0f/g;\n","import {\n ApiBotInlineMediaResult, ApiBotInlineResult, ApiBotInlineSwitchPm,\n ApiChatInviteImporter,\n ApiExportedInvite,\n ApiLanguage, ApiMessage, ApiShippingAddress, ApiStickerSet,\n} from '../api/types';\n\nexport enum LoadMoreDirection {\n Backwards,\n Forwards,\n Around,\n}\n\nexport enum FocusDirection {\n Up,\n Down,\n Static,\n}\n\nexport interface IAlbum {\n albumId: string;\n messages: ApiMessage[];\n mainMessage: ApiMessage;\n}\n\nexport type ThemeKey = 'light' | 'dark';\n\nexport interface IThemeSettings {\n background?: string;\n backgroundColor?: string;\n patternColor?: string;\n isBlurred?: boolean;\n}\n\nexport type NotifySettings = {\n hasPrivateChatsNotifications?: boolean;\n hasPrivateChatsMessagePreview?: boolean;\n hasGroupNotifications?: boolean;\n hasGroupMessagePreview?: boolean;\n hasBroadcastNotifications?: boolean;\n hasBroadcastMessagePreview?: boolean;\n hasContactJoinedNotifications?: boolean;\n hasWebNotifications: boolean;\n hasPushNotifications: boolean;\n notificationSoundVolume: number;\n};\n\nexport type LangCode = (\n 'en' | 'ar' | 'be' | 'ca' | 'nl' | 'fr' | 'de' | 'id' | 'it' | 'ko' | 'ms' | 'fa' | 'pl' | 'pt-br' | 'ru' | 'es'\n | 'tr' | 'uk' | 'uz'\n);\n\nexport type TimeFormat = '24h' | '12h';\n\nexport interface ISettings extends NotifySettings, Record {\n theme: ThemeKey;\n shouldUseSystemTheme: boolean;\n messageTextSize: number;\n animationLevel: 0 | 1 | 2;\n messageSendKeyCombo: 'enter' | 'ctrl-enter';\n canAutoLoadPhotoFromContacts: boolean;\n canAutoLoadPhotoInPrivateChats: boolean;\n canAutoLoadPhotoInGroups: boolean;\n canAutoLoadPhotoInChannels: boolean;\n canAutoLoadVideoFromContacts: boolean;\n canAutoLoadVideoInPrivateChats: boolean;\n canAutoLoadVideoInGroups: boolean;\n canAutoLoadVideoInChannels: boolean;\n canAutoLoadFileFromContacts: boolean;\n canAutoLoadFileInPrivateChats: boolean;\n canAutoLoadFileInGroups: boolean;\n canAutoLoadFileInChannels: boolean;\n autoLoadFileMaxSizeMb: number;\n canAutoPlayGifs: boolean;\n canAutoPlayVideos: boolean;\n shouldSuggestStickers: boolean;\n shouldLoopStickers: boolean;\n hasPassword?: boolean;\n languages?: ApiLanguage[];\n language: LangCode;\n isSensitiveEnabled?: boolean;\n canChangeSensitive?: boolean;\n timeFormat: TimeFormat;\n wasTimeFormatSetManually: boolean;\n isConnectionStatusMinimized: boolean;\n}\n\nexport interface ApiPrivacySettings {\n visibility: PrivacyVisibility;\n allowUserIds: string[];\n allowChatIds: string[];\n blockUserIds: string[];\n blockChatIds: string[];\n}\n\nexport interface InputPrivacyContact {\n id: string;\n accessHash?: string;\n}\n\nexport interface InputPrivacyRules {\n visibility: PrivacyVisibility;\n allowedUsers?: InputPrivacyContact[];\n allowedChats?: InputPrivacyContact[];\n blockedUsers?: InputPrivacyContact[];\n blockedChats?: InputPrivacyContact[];\n}\n\nexport type IAnchorPosition = {\n x: number;\n y: number;\n};\n\nexport interface ShippingOption {\n id: string;\n title: string;\n amount: number;\n prices: Price[];\n}\n\nexport interface Price {\n label: string;\n amount: number;\n}\n\nexport interface Invoice {\n currency?: string;\n emailRequested?: boolean;\n emailToProvider?: boolean;\n flexible?: boolean;\n nameRequested?: boolean;\n phoneRequested?: boolean;\n phoneToProvider?: boolean;\n prices?: Price[];\n shippingAddressRequested?: boolean;\n test?: boolean;\n}\n\nexport interface Receipt {\n currency: string;\n prices: Price[];\n info?: {\n shippingAddress?: ApiShippingAddress;\n phone?: string;\n name?: string;\n };\n totalAmount: number;\n credentialsTitle: string;\n shippingPrices?: Price[];\n shippingMethod?: string;\n photoUrl?: string;\n text?: string;\n title?: string;\n}\n\nexport enum SettingsScreens {\n Main,\n EditProfile,\n Notifications,\n DataStorage,\n Language,\n General,\n GeneralChatBackground,\n GeneralChatBackgroundColor,\n Privacy,\n PrivacyPhoneNumber,\n PrivacyLastSeen,\n PrivacyProfilePhoto,\n PrivacyForwarding,\n PrivacyGroupChats,\n PrivacyPhoneNumberAllowedContacts,\n PrivacyPhoneNumberDeniedContacts,\n PrivacyLastSeenAllowedContacts,\n PrivacyLastSeenDeniedContacts,\n PrivacyProfilePhotoAllowedContacts,\n PrivacyProfilePhotoDeniedContacts,\n PrivacyForwardingAllowedContacts,\n PrivacyForwardingDeniedContacts,\n PrivacyGroupChatsAllowedContacts,\n PrivacyGroupChatsDeniedContacts,\n PrivacyActiveSessions,\n PrivacyBlockedUsers,\n Folders,\n FoldersCreateFolder,\n FoldersEditFolder,\n FoldersEditFolderFromChatList,\n FoldersIncludedChats,\n FoldersIncludedChatsFromChatList,\n FoldersExcludedChats,\n FoldersExcludedChatsFromChatList,\n TwoFaDisabled,\n TwoFaNewPassword,\n TwoFaNewPasswordConfirm,\n TwoFaNewPasswordHint,\n TwoFaNewPasswordEmail,\n TwoFaNewPasswordEmailCode,\n TwoFaEnabled,\n TwoFaChangePasswordCurrent,\n TwoFaChangePasswordNew,\n TwoFaChangePasswordConfirm,\n TwoFaChangePasswordHint,\n TwoFaTurnOff,\n TwoFaRecoveryEmailCurrentPassword,\n TwoFaRecoveryEmail,\n TwoFaRecoveryEmailCode,\n TwoFaCongratulations,\n QuickReaction,\n}\n\nexport type StickerSetOrRecent = Pick;\n\nexport enum LeftColumnContent {\n ChatList,\n GlobalSearch,\n Settings,\n Contacts,\n Archived,\n NewChannelStep1,\n NewChannelStep2,\n NewGroupStep1,\n NewGroupStep2,\n}\n\nexport enum GlobalSearchContent {\n ChatList,\n Media,\n Links,\n Files,\n Music,\n Voice,\n}\n\nexport enum RightColumnContent {\n ChatInfo,\n Search,\n Management,\n Statistics,\n StickerSearch,\n GifSearch,\n PollResults,\n AddingMembers,\n}\n\nexport enum MediaViewerOrigin {\n Inline,\n ScheduledInline,\n SharedMedia,\n ProfileAvatar,\n SettingsAvatar,\n MiddleHeaderAvatar,\n Album,\n ScheduledAlbum,\n SearchResult,\n}\n\nexport enum AudioOrigin {\n Inline,\n SharedMedia,\n Search,\n}\n\nexport enum ChatCreationProgress {\n Idle,\n InProgress,\n Complete,\n Error,\n}\n\nexport enum ProfileEditProgress {\n Idle,\n InProgress,\n Complete,\n Error,\n}\n\nexport enum ManagementProgress {\n Idle,\n InProgress,\n Complete,\n Error,\n}\n\nexport interface ManagementState {\n isActive: boolean;\n nextScreen?: ManagementScreens;\n isUsernameAvailable?: boolean;\n error?: string;\n invites?: ApiExportedInvite[];\n revokedInvites?: ApiExportedInvite[];\n editingInvite?: ApiExportedInvite;\n inviteInfo?: {\n invite: ApiExportedInvite;\n importers?: ApiChatInviteImporter[];\n requesters?: ApiChatInviteImporter[];\n };\n}\n\nexport enum NewChatMembersProgress {\n Closed,\n InProgress,\n Loading,\n}\n\nexport type ProfileTabType = 'members' | 'commonChats' | 'media' | 'documents' | 'links' | 'audio' | 'voice';\nexport type SharedMediaType = 'media' | 'documents' | 'links' | 'audio' | 'voice';\nexport type ApiPrivacyKey = 'phoneNumber' | 'lastSeen' | 'profilePhoto' | 'forwards' | 'chatInvite';\nexport type PrivacyVisibility = 'everybody' | 'contacts' | 'nonContacts' | 'nobody';\n\nexport enum ProfileState {\n Profile,\n SharedMedia,\n MemberList,\n}\n\nexport enum PaymentStep {\n ShippingInfo,\n Shipping,\n PaymentInfo,\n Checkout,\n ConfirmPayment,\n}\n\nexport const UPLOADING_WALLPAPER_SLUG = 'UPLOADING_WALLPAPER_SLUG';\n\nexport enum ManagementScreens {\n Initial,\n ChatPrivacyType,\n Discussion,\n ChannelSubscribers,\n GroupType,\n GroupPermissions,\n GroupRemovedUsers,\n ChannelRemovedUsers,\n GroupUserPermissionsCreate,\n GroupUserPermissions,\n ChatAdministrators,\n GroupRecentActions,\n ChatAdminRights,\n ChatNewAdminRights,\n GroupMembers,\n GroupAddAdmins,\n Invites,\n EditInvite,\n Reactions,\n InviteInfo,\n JoinRequests,\n}\n\nexport type ManagementType = 'user' | 'group' | 'channel';\n\nexport type NotifyException = {\n isMuted: boolean;\n isSilent?: boolean;\n shouldShowPreviews?: boolean;\n};\n\nexport type EmojiKeywords = {\n isLoading?: boolean;\n version: number;\n keywords: Record;\n};\n\nexport type InlineBotSettings = {\n id: string;\n help?: string;\n query?: string;\n offset?: string;\n canLoadMore?: boolean;\n results?: (ApiBotInlineResult | ApiBotInlineMediaResult)[];\n isGallery?: boolean;\n switchPm?: ApiBotInlineSwitchPm;\n};\n","import { fastRaf } from './schedulers';\n\ninterface AnimationInstance {\n isCancelled: boolean;\n}\n\nlet currentInstance: AnimationInstance | undefined;\n\nexport function animateSingle(tick: Function, instance?: AnimationInstance) {\n if (!instance) {\n if (currentInstance && !currentInstance.isCancelled) {\n currentInstance.isCancelled = true;\n }\n\n instance = { isCancelled: false };\n currentInstance = instance;\n }\n\n if (!instance!.isCancelled && tick()) {\n fastRaf(() => {\n animateSingle(tick, instance);\n });\n }\n}\n\nexport function animate(tick: Function) {\n if (tick()) {\n fastRaf(() => {\n animate(tick);\n });\n }\n}\n\nexport type TimingFn = (t: number) => number;\n\nexport type AnimateNumberProps = {\n to: number | number[];\n from: number | number[];\n duration: number;\n onUpdate: (value: any) => void;\n timing?: TimingFn;\n onEnd?: () => void;\n};\n\nexport const timingFunctions = {\n linear: (t: number) => t,\n easeIn: (t: number) => t ** 1.675,\n easeOut: (t: number) => 1 - (1 - t ** 1.675),\n easeInOut: (t: number) => 0.5 * (Math.sin((t - 0.5) * Math.PI) + 1),\n easeInQuad: (t: number) => t * t,\n easeOutQuad: (t: number) => t * (2 - t),\n easeInOutQuad: (t: number) => (t < 0.5 ? 2 * t * t : -1 + (4 - 2 * t) * t),\n easeInCubic: (t: number) => t * t * t,\n easeOutCubic: (t: number) => (--t) * t * t + 1,\n easeInOutCubic: (t: number) => (t < 0.5 ? 4 * t * t * t : (t - 1) * (2 * t - 2) * (2 * t - 2) + 1),\n easeInQuart: (t: number) => t * t * t * t,\n easeOutQuart: (t: number) => 1 - (--t) * t * t * t,\n easeInOutQuart: (t: number) => (t < 0.5 ? 8 * t * t * t * t : 1 - 8 * (--t) * t * t * t),\n easeInQuint: (t: number) => t * t * t * t * t,\n easeOutQuint: (t: number) => 1 + (--t) * t * t * t * t,\n easeInOutQuint: (t: number) => (t < 0.5 ? 16 * t * t * t * t * t : 1 + 16 * (--t) * t * t * t * t),\n};\n\nexport function animateNumber({\n timing = timingFunctions.linear,\n onUpdate,\n duration,\n onEnd,\n from,\n to,\n}: AnimateNumberProps) {\n const t0 = Date.now();\n let canceled = false;\n\n animate(() => {\n if (canceled) return false;\n const t1 = Date.now();\n let t = (t1 - t0) / duration;\n if (t > 1) t = 1;\n const progress = timing(t);\n if (typeof from === 'number' && typeof to === 'number') {\n onUpdate(from + ((to - from) * progress));\n } else if (Array.isArray(from) && Array.isArray(to)) {\n const result = from.map((f, i) => f + ((to[i] - f) * progress));\n onUpdate(result);\n }\n if (t === 1 && onEnd) onEnd();\n return t < 1;\n });\n\n return () => {\n canceled = true;\n if (onEnd) onEnd();\n };\n}\n","import { DEBUG } from '../config';\n\nexport function updateAppBadge(unreadCount: number) {\n if (typeof window.navigator.setAppBadge !== 'function') {\n return;\n }\n\n window.navigator.setAppBadge(unreadCount).catch((err) => {\n if (DEBUG) {\n // eslint-disable-next-line no-console\n console.error(err);\n }\n });\n}\n","export default function arePropsShallowEqual(currentProps: AnyLiteral, newProps: AnyLiteral) {\n if (currentProps === newProps) {\n return true;\n }\n\n const currentKeys = Object.keys(currentProps);\n const currentKeysLength = currentKeys.length;\n const newKeysLength = Object.keys(newProps).length;\n\n if (currentKeysLength !== newKeysLength) {\n return false;\n }\n\n if (currentKeysLength === 0) {\n return true;\n }\n\n for (let i = 0; i < currentKeysLength; i++) {\n const prop = currentKeys[i];\n if (currentProps[prop] !== newProps[prop]) {\n return false;\n }\n }\n\n return true;\n}\n\nexport function getUnequalProps(currentProps: AnyLiteral, newProps: AnyLiteral) {\n const currentKeys = Object.keys(currentProps);\n const currentKeysLength = currentKeys.length;\n const newKeysLength = Object.keys(newProps).length;\n\n if (currentKeysLength !== newKeysLength) {\n return ['%LENGTH%'];\n }\n\n return currentKeys.reduce((res, prop) => {\n if (currentProps[prop] !== newProps[prop]) {\n res.push(`${prop}: ${currentProps[prop]} => ${newProps[prop]}`);\n }\n\n return res;\n }, [] as string[]);\n}\n","type Parts = (string | false | undefined)[];\ntype PartsWithGlobals = (string | false | undefined | string[])[];\ntype ClassNameBuilder =\n ((elementName: string, ...modifiers: PartsWithGlobals) => string)\n & Record;\n\nexport default function buildClassName(...parts: Parts) {\n return parts.filter(Boolean).join(' ');\n}\n\nexport function createClassNameBuilder(componentName: string) {\n return ((elementName: string, ...modifiers: PartsWithGlobals) => {\n const baseName = elementName === '&' ? componentName : `${componentName}__${elementName}`;\n\n return modifiers.reduce((acc, modifier) => {\n if (modifier) {\n // A bit hacky way to pass global class names\n if (Array.isArray(modifier)) {\n acc.push(...modifier);\n } else {\n acc.push(`${baseName}--${modifier}`);\n }\n }\n\n return acc;\n }, [baseName]).join(' ');\n }) as ClassNameBuilder;\n}\n","// eslint-disable-next-line no-restricted-globals\nconst cacheApi = self.caches;\n\nexport enum Type {\n Text,\n Blob,\n Json,\n}\n\nexport async function fetch(\n cacheName: string, key: string, type: Type, isHtmlAllowed = false,\n) {\n if (!cacheApi) {\n return undefined;\n }\n\n try {\n // To avoid the error \"Request scheme 'webdocument' is unsupported\"\n const request = new Request(key.replace(/:/g, '_'));\n const cache = await cacheApi.open(cacheName);\n const response = await cache.match(request);\n if (!response) {\n return undefined;\n }\n\n const contentType = response.headers.get('Content-Type');\n\n switch (type) {\n case Type.Text:\n return await response.text();\n case Type.Blob: {\n // Ignore deprecated data-uri avatars\n if (key.startsWith('avatar') && contentType && contentType.startsWith('text')) {\n return undefined;\n }\n\n const blob = await response.blob();\n const shouldRecreate = !blob.type || (!isHtmlAllowed && blob.type.includes('html'));\n // iOS Safari fails to preserve `type` in cache\n let resolvedType = blob.type || contentType;\n\n if (!(shouldRecreate && resolvedType)) {\n return blob;\n }\n\n // Prevent HTML-in-video attacks (for files that were cached before fix)\n if (!isHtmlAllowed) {\n resolvedType = resolvedType.replace(/html/gi, '');\n }\n\n return new Blob([blob], { type: resolvedType });\n }\n case Type.Json:\n return await response.json();\n default:\n return undefined;\n }\n } catch (err) {\n // eslint-disable-next-line no-console\n console.warn(err);\n return undefined;\n }\n}\n\nexport async function save(cacheName: string, key: string, data: AnyLiteral | Blob | string) {\n if (!cacheApi) {\n return undefined;\n }\n\n try {\n const cacheData = typeof data === 'string' || data instanceof Blob ? data : JSON.stringify(data);\n // To avoid the error \"Request scheme 'webdocument' is unsupported\"\n const request = new Request(key.replace(/:/g, '_'));\n const response = new Response(cacheData);\n const cache = await cacheApi.open(cacheName);\n return await cache.put(request, response);\n } catch (err) {\n // eslint-disable-next-line no-console\n console.warn(err);\n return undefined;\n }\n}\n\nexport async function clear(cacheName: string) {\n try {\n if (!cacheApi) {\n return undefined;\n }\n\n return await cacheApi.delete(cacheName);\n } catch (err) {\n // eslint-disable-next-line no-console\n console.warn(err);\n return undefined;\n }\n}\n","export function createCallbackManager() {\n const callbacks: AnyToVoidFunction[] = [];\n\n function addCallback(cb: AnyToVoidFunction) {\n callbacks.push(cb);\n\n return () => {\n removeCallback(cb);\n };\n }\n\n function removeCallback(cb: AnyToVoidFunction) {\n const index = callbacks.indexOf(cb);\n if (index !== -1) {\n callbacks.splice(index, 1);\n }\n }\n\n function runCallbacks(...args: any[]) {\n callbacks.forEach((callback) => {\n callback(...args);\n });\n }\n\n function hasCallbacks() {\n return Boolean(callbacks.length);\n }\n\n return {\n runCallbacks,\n addCallback,\n removeCallback,\n hasCallbacks,\n };\n}\n\nexport type CallbackManager = ReturnType;\n","import captureKeyboardListener from './captureKeyboardListeners';\n\ntype IHandlerFunction = () => void;\n\nexport default function captureEscKeyListener(handler: IHandlerFunction) {\n return captureKeyboardListener({ onEsc: handler });\n}\n","type HandlerName = 'onEnter' | 'onBackspace' | 'onDelete' | 'onEsc' | 'onUp' | 'onDown' | 'onLeft' | 'onRight'\n| 'onTab';\ntype Handler = (e: KeyboardEvent) => void;\ntype CaptureOptions = Partial>;\n\nconst keyToHandlerName: Record = {\n Enter: 'onEnter',\n Backspace: 'onBackspace',\n Delete: 'onDelete',\n Esc: 'onEsc',\n Escape: 'onEsc',\n ArrowUp: 'onUp',\n ArrowDown: 'onDown',\n ArrowLeft: 'onLeft',\n ArrowRight: 'onRight',\n Tab: 'onTab',\n};\n\nconst handlers: Record = {\n onEnter: [],\n onDelete: [],\n onBackspace: [],\n onEsc: [],\n onUp: [],\n onDown: [],\n onLeft: [],\n onRight: [],\n onTab: [],\n};\n\nexport default function captureKeyboardListeners(options: CaptureOptions) {\n if (!hasActiveHandlers()) {\n document.addEventListener('keydown', handleKeyDown, true);\n }\n\n (Object.keys(options) as Array).forEach((handlerName) => {\n const handler = options[handlerName];\n if (!handler) {\n return;\n }\n\n const currentEventHandlers = handlers[handlerName];\n if (currentEventHandlers) {\n currentEventHandlers.push(handler);\n }\n });\n\n return () => {\n releaseKeyboardListener(options);\n };\n}\n\nfunction hasActiveHandlers() {\n return Object.values(handlers).some((keyHandlers) => Boolean(keyHandlers.length));\n}\n\nfunction handleKeyDown(e: KeyboardEvent) {\n const handlerName = keyToHandlerName[e.key];\n if (!handlerName) {\n return;\n }\n\n const { length } = handlers[handlerName];\n if (!length) {\n return;\n }\n e.stopPropagation();\n\n const handler = handlers[handlerName][length - 1];\n handler!(e);\n}\n\nfunction releaseKeyboardListener(options: CaptureOptions) {\n (Object.keys(options) as Array).forEach((handlerName) => {\n const handler = options[handlerName];\n const currentEventHandlers = handlers[handlerName];\n if (currentEventHandlers) {\n const index = currentEventHandlers.findIndex((cb) => cb === handler);\n if (index !== -1) {\n currentEventHandlers.splice(index, 1);\n }\n }\n });\n\n if (!hasActiveHandlers()) {\n document.removeEventListener('keydown', handleKeyDown, false);\n }\n}\n","import { DEBUG } from '../config';\n\nexport const CLIPBOARD_ITEM_SUPPORTED = window.navigator.clipboard && window.ClipboardItem;\n\nconst textCopyEl = document.createElement('textarea');\ntextCopyEl.setAttribute('readonly', '');\ntextCopyEl.tabIndex = -1;\ntextCopyEl.className = 'visually-hidden';\n\nexport const copyTextToClipboard = (str: string): void => {\n textCopyEl.value = str;\n document.body.appendChild(textCopyEl);\n const selection = document.getSelection();\n\n if (selection) {\n // Store previous selection\n const rangeToRestore = selection.rangeCount > 0 && selection.getRangeAt(0);\n textCopyEl.select();\n document.execCommand('copy');\n // Restore the original selection\n if (rangeToRestore) {\n selection.removeAllRanges();\n selection.addRange(rangeToRestore);\n }\n }\n\n document.body.removeChild(textCopyEl);\n};\n\nexport const copyImageToClipboard = (imageUrl?: string) => {\n if (!imageUrl) return;\n const canvas = document.createElement('canvas');\n const ctx = canvas.getContext('2d');\n const imageEl = new Image();\n imageEl.onload = (e: Event) => {\n if (ctx && e.currentTarget) {\n const img = e.currentTarget as HTMLImageElement;\n canvas.width = img.width;\n canvas.height = img.height;\n ctx.drawImage(img, 0, 0, img.width, img.height);\n canvas.toBlob(copyBlobToClipboard, 'image/png', 1);\n }\n };\n\n imageEl.src = imageUrl;\n};\n\nasync function copyBlobToClipboard(pngBlob: Blob | null) {\n if (!pngBlob || !CLIPBOARD_ITEM_SUPPORTED) {\n return;\n }\n\n try {\n await window.navigator.clipboard.write?.([\n new ClipboardItem({\n [pngBlob.type]: pngBlob,\n }),\n ]);\n } catch (error) {\n if (DEBUG) {\n // eslint-disable-next-line no-console\n console.error(error);\n }\n }\n}\n","import { LangFn } from '../hooks/useLang';\nimport withCache from './withCache';\n\nconst WEEKDAYS_FULL = ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'];\nconst MONTHS_FULL = [\n 'January', 'February', 'March', 'April', 'May', 'June',\n 'July', 'August', 'September', 'October', 'November', 'December',\n];\n\nconst MONTHS_FULL_LOWERCASE = MONTHS_FULL.map((month) => month.toLowerCase());\nconst MIN_SEARCH_YEAR = 2015;\nconst MAX_DAY_IN_MONTH = 31;\nconst MAX_MONTH_IN_YEAR = 12;\nexport const MILLISECONDS_IN_DAY = 24 * 60 * 60 * 1000;\n\nexport function isToday(date: Date) {\n return getDayStartAt(new Date()) === getDayStartAt(date);\n}\n\nexport function getDayStart(datetime: number | Date) {\n const date = new Date(datetime);\n date.setHours(0, 0, 0, 0);\n return date;\n}\n\nexport function getDayStartAt(datetime: number | Date) {\n return getDayStart(datetime).getTime();\n}\n\nexport function toYearMonth(timestamp: number) {\n const date = new Date(timestamp * 1000);\n return `${date.getFullYear()}-${date.getMonth()}`;\n}\n\nfunction toIsoString(date: Date) {\n return `${date.getFullYear()}-${date.getMonth() + 1}-${date.getDate()}`;\n}\n\n// @optimization `toLocaleTimeString` is avoided because of bad performance\nexport function formatTime(lang: LangFn, datetime: number | Date) {\n const date = typeof datetime === 'number' ? new Date(datetime) : datetime;\n const timeFormat = lang.timeFormat || '24h';\n\n let hours = date.getHours();\n let marker = '';\n if (timeFormat === '12h') {\n marker = hours >= 12 ? ' PM' : ' AM';\n hours = hours > 12 ? hours % 12 : hours;\n }\n\n return `${String(hours).padStart(2, '0')}:${String(date.getMinutes()).padStart(2, '0')}${marker}`;\n}\n\nexport function formatPastTimeShort(lang: LangFn, datetime: number | Date) {\n const date = typeof datetime === 'number' ? new Date(datetime) : datetime;\n\n const today = getDayStart(new Date());\n if (date >= today) {\n return formatTime(lang, date);\n }\n\n const weekAgo = new Date(today);\n weekAgo.setDate(today.getDate() - 7);\n if (date >= weekAgo) {\n return lang(`Weekday.Short${WEEKDAYS_FULL[date.getDay()]}`);\n }\n\n const withYear = date.getFullYear() !== today.getFullYear();\n const format = (\n lang(withYear ? 'formatDateScheduleYear' : 'formatDateSchedule')\n || (withYear ? 'd MMM yyyy' : 'd MMM')\n );\n\n return formatDate(lang, date, format);\n}\n\nexport function formatFullDate(lang: LangFn, datetime: number | Date) {\n const date = typeof datetime === 'number' ? new Date(datetime) : datetime;\n const format = lang('formatterYearMax') || 'dd.MM.yyyy';\n\n return formatDate(lang, date, format);\n}\n\nexport function formatMonthAndYear(lang: LangFn, date: Date, isShort = false) {\n const format = lang(isShort ? 'formatterMonthYear2' : 'formatterMonthYear') || 'MMM yyyy';\n\n return formatDate(lang, date, format);\n}\n\nexport function formatCountdown(\n lang: LangFn,\n msLeft: number,\n) {\n const days = Math.floor(msLeft / MILLISECONDS_IN_DAY);\n if (msLeft < 0) {\n return 0;\n } else if (days < 1) {\n return formatMediaDuration(msLeft / 1000);\n } else if (days < 7) {\n return lang('Days', days);\n } else if (days < 30) {\n return lang('Weeks', Math.floor(days / 7));\n } else if (days < 365) {\n return lang('Months', Math.floor(days / 30));\n } else {\n return lang('Years', Math.floor(days / 365));\n }\n}\n\nexport function formatCountdownShort(lang: LangFn, msLeft: number) {\n if (msLeft < 60 * 1000) {\n return Math.ceil(msLeft / 1000);\n } else if (msLeft < 60 * 60 * 1000) {\n return Math.ceil(msLeft / (60 * 1000));\n } else if (msLeft < MILLISECONDS_IN_DAY) {\n return lang('MessageTimer.ShortHours', Math.ceil(msLeft / (60 * 60 * 1000)));\n } else {\n return lang('MessageTimer.ShortDays', Math.ceil(msLeft / MILLISECONDS_IN_DAY));\n }\n}\n\nexport function formatLastUpdated(lang: LangFn, currentTime: number, lastUpdated = currentTime) {\n const seconds = currentTime - lastUpdated;\n if (seconds < 60) {\n return lang('LiveLocationUpdated.JustNow');\n } else if (seconds < 60 * 60) {\n return lang('LiveLocationUpdated.MinutesAgo', Math.floor(seconds / 60));\n } else {\n return lang('LiveLocationUpdated.TodayAt', formatTime(lang, lastUpdated));\n }\n}\n\nexport function formatHumanDate(\n lang: LangFn,\n datetime: number | Date,\n isShort = false,\n noWeekdays = false,\n isUpperFirst?: boolean,\n) {\n const date = typeof datetime === 'number' ? new Date(datetime) : datetime;\n\n const today = getDayStart(new Date());\n\n if (!noWeekdays) {\n if (toIsoString(date) === toIsoString(today)) {\n return (isUpperFirst || !isShort ? upperFirst : lowerFirst)(lang('Weekday.Today'));\n }\n\n const yesterday = new Date(today);\n yesterday.setDate(today.getDate() - 1);\n if (toIsoString(date) === toIsoString(yesterday)) {\n return (isUpperFirst || !isShort ? upperFirst : lowerFirst)(lang('Weekday.Yesterday'));\n }\n\n const weekAgo = new Date(today);\n const weekAhead = new Date(today);\n weekAgo.setDate(today.getDate() - 7);\n weekAhead.setDate(today.getDate() + 7);\n if (date >= weekAgo && date <= weekAhead) {\n const weekDay = WEEKDAYS_FULL[date.getDay()];\n const weekDayString = isShort ? lang(`Weekday.Short${weekDay}`) : lang(`Weekday.${weekDay}`);\n\n return (isUpperFirst || !isShort ? upperFirst : lowerFirst)(weekDayString);\n }\n }\n\n const withYear = date.getFullYear() !== today.getFullYear();\n const formatKey = isShort\n ? (withYear ? 'formatDateScheduleYear' : 'formatDateSchedule')\n : (withYear ? 'chatFullDate' : 'chatDate');\n const format = lang(formatKey) || 'd MMMM yyyy';\n\n return (isUpperFirst || !isShort ? upperFirst : lowerFirst)(formatDate(lang, date, format));\n}\n\nfunction formatDate(lang: LangFn, date: Date, format: string) {\n const day = date.getDate();\n const monthIndex = date.getMonth();\n\n return format\n .replace('LLLL', lang(MONTHS_FULL[monthIndex]))\n .replace('MMMM', lang(`Month.Gen${MONTHS_FULL[monthIndex]}`))\n .replace('MMM', lang(`Month.Short${MONTHS_FULL[monthIndex]}`))\n .replace('MM', String(monthIndex + 1).padStart(2, '0'))\n .replace('dd', String(day).padStart(2, '0'))\n .replace('d', String(day))\n .replace('yyyy', String(date.getFullYear()))\n // Workaround for https://bugs.telegram.org/c/5777\n .replace(/'de'/g, 'de');\n}\n\nexport function formatMediaDateTime(\n lang: LangFn,\n datetime: number | Date,\n isUpperFirst?: boolean,\n) {\n const date = typeof datetime === 'number' ? new Date(datetime) : datetime;\n\n return `${formatHumanDate(lang, date, true, undefined, isUpperFirst)}, ${formatTime(lang, date)}`;\n}\n\nexport function formatMediaDuration(duration: number, maxValue?: number) {\n const hours = Math.floor(duration / 3600);\n const minutes = Math.floor((duration % 3600) / 60);\n const seconds = Math.floor(duration % 3600 % 60);\n\n const maxHours = maxValue ? Math.floor(maxValue / 3600) : 0;\n const maxMinutes = maxValue ? Math.floor((maxValue % 3600) / 60) : 0;\n let string = '';\n if (hours > 0 || maxHours > 0) {\n string += `${String(hours).padStart(2, '0')}:`;\n string += `${String(minutes).padStart(2, '0')}:`;\n } else if (maxMinutes >= 10) {\n string += `${String(minutes).padStart(2, '0')}:`;\n } else {\n string += `${String(minutes)}:`;\n }\n string += String(seconds).padStart(2, '0');\n\n return string;\n}\n\nexport function formatVoiceRecordDuration(durationInMs: number) {\n const parts = [];\n\n let milliseconds = durationInMs % 1000;\n durationInMs -= milliseconds;\n milliseconds = Math.floor(milliseconds / 10);\n\n durationInMs = Math.floor(durationInMs / 1000);\n const seconds = durationInMs % 60;\n durationInMs -= seconds;\n\n durationInMs = Math.floor(durationInMs / 60);\n const minutes = durationInMs % 60;\n durationInMs -= minutes;\n\n durationInMs = Math.floor(durationInMs / 60);\n const hours = durationInMs % 60;\n\n if (hours > 0) {\n parts.push(String(hours).padStart(2, '0'));\n }\n parts.push(String(minutes).padStart(hours > 0 ? 2 : 1, '0'));\n parts.push(String(seconds).padStart(2, '0'));\n\n return `${parts.join(':')},${String(milliseconds).padStart(2, '0')}`;\n}\n\nconst formatDayToStringWithCache = withCache((dayStartAt: number, locale: string) => {\n return new Date(dayStartAt).toLocaleString(\n locale,\n {\n year: 'numeric',\n month: 'short',\n day: 'numeric',\n },\n );\n});\n\nexport function formatDateToString(datetime: Date | number, locale = 'en-US') {\n const date = typeof datetime === 'number' ? new Date(datetime) : datetime;\n const dayStartAt = getDayStartAt(date);\n\n return formatDayToStringWithCache(dayStartAt, locale);\n}\n\nexport function formatDateTimeToString(datetime: Date | number, locale = 'en-US') {\n const date = typeof datetime === 'number' ? new Date(datetime) : datetime;\n return date.toLocaleString(\n locale,\n {\n year: 'numeric',\n month: 'short',\n day: 'numeric',\n hour: 'numeric',\n minute: 'numeric',\n second: 'numeric',\n },\n );\n}\n\nfunction isValidDate(day: number, month: number, year = 2021): boolean {\n if (month > (MAX_MONTH_IN_YEAR - 1) || day > MAX_DAY_IN_MONTH) {\n return false;\n }\n const date = new Date(year, month, day);\n return !Number.isNaN(date.getTime()) && date.getDate() === day;\n}\n\nexport function parseDateString(query = ''): string | undefined {\n const matchStringDate = query.match(/\\d{1,2}\\s[a-zA-Z]{3,}/);\n const matchEuropeStringDate = query.match(/[a-zA-Z]{3,}\\s\\d{1,2}/);\n const matchNumberDate = query.match(/\\d{1,2}[./-]\\d{1,2}([./-]\\d{2,4})?/);\n if (!matchStringDate && !matchNumberDate && !matchEuropeStringDate) {\n return undefined;\n }\n\n if (matchNumberDate) {\n const [date, month, year] = query.split(/[./-]/).map(Number);\n return !(year && year < MIN_SEARCH_YEAR) && isValidDate(date, month - 1, year || undefined)\n ? `${year ? `${year}-` : ''}${String(month).padStart(2, '0')}-${String(date).padStart(2, '0')}`\n : undefined;\n }\n\n const dateParts = query.split(' ');\n const date = matchStringDate ? dateParts[0] : dateParts[1];\n const month = (matchStringDate ? dateParts[1] : dateParts[0]).toLowerCase();\n const monthIndex = MONTHS_FULL_LOWERCASE.findIndex((item) => item.startsWith(month));\n\n return monthIndex !== -1 && isValidDate(Number(date), monthIndex)\n ? `${String(monthIndex + 1).padStart(2, '0')}-${String(date).padStart(2, '0')}`\n : undefined;\n}\n\nexport function timestampPlusDay(timestamp: number) {\n return timestamp + MILLISECONDS_IN_DAY / 1000;\n}\n\nfunction lowerFirst(str: string) {\n return `${str[0].toLowerCase()}${str.slice(1)}`;\n}\n\nfunction upperFirst(str: string) {\n return `${str[0].toUpperCase()}${str.slice(1)}`;\n}\n","import EMOJI_REGEX from '../lib/twemojiRegex';\n\n// Due to the fact that emoji from Apple do not contain some characters, it is necessary to remove them from emoji-data\n// https://github.com/iamcal/emoji-data/issues/136\nconst EXCLUDE_EMOJIS = ['female_sign', 'male_sign', 'medical_symbol'];\n\nconst ISO_FLAGS_OFFSET = 127397;\n\nexport type EmojiRawData = typeof import('emoji-data-ios/emoji-data.json');\nexport type EmojiModule = { default: EmojiRawData };\n\nexport type EmojiData = {\n categories: Array;\n emojis: Record;\n};\n\n// Non-standard variations of emojis, used on some devices\nconst EMOJI_EXCEPTIONS: [string | RegExp, string][] = [\n [/\\u{1f3f3}\\u200d\\u{1f308}/gu, '\\u{1f3f3}\\ufe0f\\u200d\\u{1f308}'], // 🏳‍🌈\n [/\\u{1f3f3}\\u200d\\u26a7\\ufe0f/gu, '\\u{1f3f3}\\ufe0f\\u200d\\u26a7\\ufe0f'], // 🏳️‍⚧️\n [/\\u{1f937}\\u200d\\u2642[^\\ufe0f]/gu, '\\u{1f937}\\u200d\\u2642\\ufe0f'], // 🤷‍♂️\n];\n\nfunction unifiedToNative(unified: string) {\n const unicodes = unified.split('-');\n const codePoints = unicodes.map((i) => parseInt(i, 16));\n\n return String.fromCodePoint(...codePoints);\n}\n\nexport function fixNonStandardEmoji(text: string) {\n // Non-standard sequences typically parsed as separate emojis, so no need to fix text without any\n if (!text.match(EMOJI_REGEX)) return text;\n // eslint-disable-next-line no-restricted-syntax\n for (const [regex, replacement] of EMOJI_EXCEPTIONS) {\n text = text.replace(regex, replacement);\n }\n\n return text;\n}\n\nexport function nativeToUnified(emoji: string) {\n let code;\n\n if (emoji.length === 1) {\n code = emoji.charCodeAt(0).toString(16).padStart(4, '0');\n } else {\n const pairs = [];\n for (let i = 0; i < emoji.length; i++) {\n if (emoji.charCodeAt(i) >= 0xd800 && emoji.charCodeAt(i) <= 0xdbff) {\n if (emoji.charCodeAt(i + 1) >= 0xdc00 && emoji.charCodeAt(i + 1) <= 0xdfff) {\n pairs.push(\n (emoji.charCodeAt(i) - 0xd800) * 0x400\n + (emoji.charCodeAt(i + 1) - 0xdc00) + 0x10000,\n );\n }\n } else if (emoji.charCodeAt(i) < 0xd800 || emoji.charCodeAt(i) > 0xdfff) {\n pairs.push(emoji.charCodeAt(i));\n }\n }\n\n code = pairs.map((x) => x.toString(16).padStart(4, '0')).join('-');\n }\n\n return code;\n}\n\nexport function uncompressEmoji(data: EmojiRawData): EmojiData {\n const emojiData: EmojiData = { categories: [], emojis: {} };\n\n for (let i = 0; i < data.length; i += 2) {\n const category = {\n id: data[i][0],\n name: data[i][1],\n emojis: [],\n } as EmojiCategory;\n\n for (let j = 0; j < data[i + 1].length; j++) {\n const emojiRaw = data[i + 1][j];\n if (!EXCLUDE_EMOJIS.includes(emojiRaw[1][0])) {\n category.emojis.push(emojiRaw[1][0]);\n emojiData.emojis[emojiRaw[1][0]] = {\n id: emojiRaw[1][0],\n names: emojiRaw[1] as string[],\n native: unifiedToNative(emojiRaw[0] as string),\n image: (emojiRaw[0] as string).toLowerCase(),\n };\n }\n }\n\n emojiData.categories.push(category);\n }\n\n return emojiData;\n}\n\nexport function isoToEmoji(iso: string) {\n const code = iso.toUpperCase();\n\n if (!/^[A-Z]{2}$/.test(code)) return iso;\n const codePoints = [...code].map((c) => c.codePointAt(0)! + ISO_FLAGS_OFFSET);\n return String.fromCodePoint(...codePoints);\n}\n","export function ensureProtocol(url?: string) {\n if (!url) {\n return undefined;\n }\n\n // HTTP was chosen by default as a fix for https://bugs.telegram.org/c/10712.\n // It is also the default protocol in the official TDesktop client.\n return url.includes('://') ? url : `http://${url}`;\n}\n","let isWebpSupportedCache: boolean | undefined;\n\nexport function isWebpSupported() {\n return Boolean(isWebpSupportedCache);\n}\n\nfunction testWebp(): Promise {\n return new Promise((resolve) => {\n const webp = new Image();\n // eslint-disable-next-line max-len\n webp.src = 'data:image/webp;base64,UklGRjoAAABXRUJQVlA4IC4AAACyAgCdASoCAAIALmk0mk0iIiIiIgBoSygABc6WWgAA/veff/0PP8bA//LwYAAA';\n const handleLoadOrError = () => {\n resolve(webp.height === 2);\n };\n webp.onload = handleLoadOrError;\n webp.onerror = handleLoadOrError;\n });\n}\n\ntestWebp().then((hasWebp) => {\n isWebpSupportedCache = hasWebp;\n});\n","import { ThemeKey } from '../types';\n\nlet systemThemeCache: ThemeKey = (\n window.matchMedia?.('(prefers-color-scheme: dark)').matches\n) ? 'dark' : 'light';\n\nexport function getSystemTheme() {\n return systemThemeCache;\n}\n\nfunction handleSystemThemeChange(e: MediaQueryListEventMap['change']) {\n systemThemeCache = e.matches ? 'dark' : 'light';\n}\n\nconst mql = window.matchMedia('(prefers-color-scheme: dark)');\nif (typeof mql.addEventListener === 'function') {\n mql.addEventListener('change', handleSystemThemeChange);\n} else if (typeof mql.addListener === 'function') {\n mql.addListener(handleSystemThemeChange);\n}\n","import {\n MIN_SCREEN_WIDTH_FOR_STATIC_LEFT_COLUMN,\n MOBILE_SCREEN_MAX_WIDTH,\n MOBILE_SCREEN_LANDSCAPE_MAX_HEIGHT,\n MOBILE_SCREEN_LANDSCAPE_MAX_WIDTH,\n IS_TEST,\n SUPPORTED_VIDEO_CONTENT_TYPES,\n VIDEO_MOV_TYPE,\n} from '../config';\n\nexport * from './environmentWebp';\n\nexport * from './environmentSystemTheme';\n\nexport function getPlatform() {\n const { userAgent, platform } = window.navigator;\n const macosPlatforms = ['Macintosh', 'MacIntel', 'MacPPC', 'Mac68K'];\n const windowsPlatforms = ['Win32', 'Win64', 'Windows', 'WinCE'];\n const iosPlatforms = ['iPhone', 'iPad', 'iPod'];\n let os: 'macOS' | 'iOS' | 'Windows' | 'Android' | 'Linux' | undefined;\n\n if (macosPlatforms.indexOf(platform) !== -1) {\n os = 'macOS';\n } else if (iosPlatforms.indexOf(platform) !== -1) {\n os = 'iOS';\n } else if (windowsPlatforms.indexOf(platform) !== -1) {\n os = 'Windows';\n } else if (/Android/.test(userAgent)) {\n os = 'Android';\n } else if (/Linux/.test(platform)) {\n os = 'Linux';\n }\n\n return os;\n}\n\nexport const PLATFORM_ENV = getPlatform();\nexport const IS_MAC_OS = PLATFORM_ENV === 'macOS';\nexport const IS_IOS = PLATFORM_ENV === 'iOS';\nexport const IS_ANDROID = PLATFORM_ENV === 'Android';\nexport const IS_SAFARI = /^((?!chrome|android).)*safari/i.test(navigator.userAgent);\nexport const IS_PWA = (\n window.matchMedia('(display-mode: standalone)').matches\n || (window.navigator as any).standalone\n || document.referrer.includes('android-app://')\n);\n\nexport const IS_TOUCH_ENV = window.matchMedia('(pointer: coarse)').matches;\n// Keep in mind the landscape orientation\nexport const IS_SINGLE_COLUMN_LAYOUT = window.innerWidth <= MOBILE_SCREEN_MAX_WIDTH || (\n window.innerWidth <= MOBILE_SCREEN_LANDSCAPE_MAX_WIDTH && window.innerHeight <= MOBILE_SCREEN_LANDSCAPE_MAX_HEIGHT\n);\n// Special layout, 1 column while chat opened, 2 columns while collapsed\nexport const IS_TABLET_COLUMN_LAYOUT = !IS_SINGLE_COLUMN_LAYOUT && (\n window.innerWidth <= MIN_SCREEN_WIDTH_FOR_STATIC_LEFT_COLUMN\n);\nexport const IS_VOICE_RECORDING_SUPPORTED = Boolean(\n window.navigator.mediaDevices && 'getUserMedia' in window.navigator.mediaDevices && (\n window.AudioContext || (window as any).webkitAudioContext\n ),\n);\nexport const IS_SMOOTH_SCROLL_SUPPORTED = 'scrollBehavior' in document.documentElement.style;\nexport const IS_EMOJI_SUPPORTED = PLATFORM_ENV && (IS_MAC_OS || IS_IOS);\nexport const IS_SERVICE_WORKER_SUPPORTED = 'serviceWorker' in navigator;\n// TODO Consider failed service worker\nexport const IS_PROGRESSIVE_SUPPORTED = IS_SERVICE_WORKER_SUPPORTED;\nexport const IS_STREAMING_SUPPORTED = 'MediaSource' in window;\nexport const IS_OPUS_SUPPORTED = Boolean((new Audio()).canPlayType('audio/ogg; codecs=opus'));\nexport const IS_CANVAS_FILTER_SUPPORTED = (\n !IS_TEST && 'filter' in (document.createElement('canvas').getContext('2d') || {})\n);\nexport const IS_REQUEST_FULLSCREEN_SUPPORTED = 'requestFullscreen' in document.createElement('div');\nexport const ARE_CALLS_SUPPORTED = !navigator.userAgent.includes('Firefox');\nexport const LAYERS_ANIMATION_NAME = IS_ANDROID ? 'slide-fade' : IS_IOS ? 'slide-layers' : 'push-slide';\n\nconst TEST_VIDEO = document.createElement('video');\n// `canPlayType(VIDEO_MOV_TYPE)` returns false negative at least for macOS Chrome and iOS Safari\nexport const IS_MOV_SUPPORTED = true;\n\nif (IS_MOV_SUPPORTED) SUPPORTED_VIDEO_CONTENT_TYPES.add(VIDEO_MOV_TYPE);\n\nexport const IS_WEBM_SUPPORTED = Boolean(TEST_VIDEO.canPlayType('video/webm; codecs=\"vp9\"').replace('no', ''))\n && !(IS_MAC_OS && IS_SAFARI); // Safari on MacOS has some issues with WebM\n\nexport const DPR = window.devicePixelRatio || 1;\n\nexport const MASK_IMAGE_DISABLED = true;\n\nexport const IS_BACKDROP_BLUR_SUPPORTED = !IS_TEST && (\n CSS.supports('backdrop-filter: blur()') || CSS.supports('-webkit-backdrop-filter: blur()')\n);\nexport const IS_COMPACT_MENU = !IS_TOUCH_ENV;\nexport const IS_SCROLL_PATCH_NEEDED = !IS_MAC_OS && !IS_IOS && !IS_ANDROID;\n\n// Smaller area reduces scroll jumps caused by `patchChromiumScroll`\nexport const MESSAGE_LIST_SENSITIVE_AREA = IS_SCROLL_PATCH_NEEDED ? 300 : 750;\n","import { pause } from './schedulers';\n\n// Polyfill for Safari: `File` is not available in web worker\nif (typeof File === 'undefined') {\n // eslint-disable-next-line no-global-assign, no-restricted-globals, func-names\n self.File = class extends Blob {\n name: string;\n\n constructor(fileBits: BlobPart[], fileName: string, options?: FilePropertyBag) {\n if (options) {\n const { type, ...rest } = options;\n super(fileBits, { type });\n Object.assign(this, rest);\n } else {\n super(fileBits);\n }\n\n this.name = fileName;\n }\n } as typeof File;\n}\n\nexport function dataUriToBlob(dataUri: string) {\n const arr = dataUri.split(',');\n const mime = arr[0].match(/:(.*?);/)![1];\n const bstr = atob(arr[1]);\n let n = bstr.length;\n const u8arr = new Uint8Array(n);\n\n while (n--) {\n u8arr[n] = bstr.charCodeAt(n);\n }\n\n return new Blob([u8arr], { type: mime });\n}\n\nexport function blobToDataUri(blob: Blob): Promise {\n return new Promise((resolve, reject) => {\n const reader = new FileReader();\n\n reader.onload = (e: ProgressEvent) => {\n const { result } = e.target || {};\n if (typeof result === 'string') {\n resolve(result);\n }\n\n reject(new Error('Failed to read blob'));\n };\n\n reader.onerror = reject;\n reader.readAsDataURL(blob);\n });\n}\n\nexport function blobToFile(blob: Blob, fileName: string) {\n return new File([blob], fileName, {\n lastModified: Date.now(),\n type: blob.type,\n });\n}\n\nexport function preloadImage(url: string): Promise {\n return new Promise((resolve, reject) => {\n const img = new Image();\n img.onload = () => resolve(img);\n img.onerror = reject;\n img.src = url;\n });\n}\n\nexport function preloadVideo(url: string): Promise {\n return new Promise((resolve, reject) => {\n const video = document.createElement('video');\n video.volume = 0;\n video.onloadedmetadata = () => resolve(video);\n video.onerror = reject;\n video.src = url;\n });\n}\n\nexport async function createPosterForVideo(url: string): Promise {\n const video = await preloadVideo(url);\n\n return Promise.race([\n pause(2000) as Promise,\n new Promise((resolve, reject) => {\n video.onseeked = () => {\n if (!video.videoWidth || !video.videoHeight) {\n resolve(undefined);\n }\n\n const canvas = document.createElement('canvas');\n canvas.width = video.videoWidth;\n canvas.height = video.videoHeight;\n const ctx = canvas.getContext('2d')!;\n ctx.drawImage(video, 0, 0);\n resolve(canvas.toDataURL('image/jpeg'));\n };\n video.onerror = reject;\n video.currentTime = Math.min(video.duration, 1);\n }),\n ]);\n}\n\nexport async function fetchBlob(blobUrl: string) {\n const response = await fetch(blobUrl);\n return response.blob();\n}\n\nexport async function fetchFile(blobUrl: string, fileName: string) {\n const blob = await fetchBlob(blobUrl);\n return blobToFile(blob, fileName);\n}\n\nexport function imgToCanvas(img: HTMLImageElement) {\n const canvas = document.createElement('canvas');\n canvas.width = img.width;\n canvas.height = img.height;\n\n const ctx = canvas.getContext('2d')!;\n ctx.drawImage(img, 0, 0);\n\n return canvas;\n}\n","import { addCallback } from '../lib/teact/teactn';\nimport { addActionHandler, getGlobal } from '../global';\n\nimport { GlobalState } from '../global/types';\nimport { NotifyException, NotifySettings } from '../types';\nimport { ApiChat, ApiChatFolder, ApiUser } from '../api/types';\n\nimport { ALL_FOLDER_ID, ARCHIVED_FOLDER_ID, DEBUG } from '../config';\nimport { selectNotifySettings, selectNotifyExceptions } from '../global/selectors';\nimport { selectIsChatMuted } from '../global/helpers';\nimport { onIdle, throttle } from './schedulers';\nimport { areSortedArraysEqual, unique } from './iteratees';\nimport arePropsShallowEqual from './arePropsShallowEqual';\nimport { CallbackManager, createCallbackManager } from './callbacks';\n\ninterface FolderSummary {\n id: number;\n listIds?: Set;\n orderedPinnedIds?: string[];\n contacts?: true;\n nonContacts?: true;\n groups?: true;\n channels?: true;\n bots?: true;\n excludeMuted?: true;\n excludeRead?: true;\n excludeArchived?: true;\n excludedChatIds?: Set;\n includedChatIds?: Set;\n pinnedChatIds?: Set;\n}\n\ninterface ChatSummary {\n id: string;\n type: ApiChat['type'];\n isListed: boolean;\n isArchived: boolean;\n isMuted: boolean;\n isUnread: boolean;\n unreadCount?: number;\n unreadMentionsCount?: number;\n order: number;\n isUserBot?: boolean;\n isUserContact?: boolean;\n}\n\nconst UPDATE_THROTTLE = 500;\nconst DEBUG_DURATION_LIMIT = 6;\n\nconst initials = buildInitials();\n\nlet prevGlobal: {\n allFolderListIds?: GlobalState['chats']['listIds']['active'];\n allFolderPinnedIds?: GlobalState['chats']['orderedPinnedIds']['active'];\n archivedFolderListIds?: GlobalState['chats']['listIds']['archived'];\n archivedFolderPinnedIds?: GlobalState['chats']['orderedPinnedIds']['archived'];\n isAllFolderFullyLoaded?: boolean;\n isArchivedFolderFullyLoaded?: boolean;\n chatsById: Record;\n foldersById: Record;\n usersById: Record;\n notifySettings: NotifySettings;\n notifyExceptions?: Record;\n} = initials.prevGlobal;\n\nlet prepared: {\n folderSummariesById: Record;\n chatSummariesById: Map;\n folderIdsByChatId: Record;\n chatIdsByFolderId: Record | undefined>;\n isOrderedListJustPatched: Record;\n} = initials.prepared;\n\nlet results: {\n orderedIdsByFolderId: Record;\n pinnedCountByFolderId: Record; // Also watched by `callbacks.orderedIdsByFolderId`\n chatsCountByFolderId: Record;\n unreadCountersByFolderId: Record;\n} = initials.results;\n\nlet callbacks: {\n orderedIdsByFolderId: Record;\n chatsCountByFolderId: CallbackManager;\n unreadCountersByFolderId: CallbackManager;\n} = initials.callbacks;\n\nconst updateFolderManagerThrottled = throttle(() => {\n onIdle(() => {\n updateFolderManager(getGlobal());\n });\n}, UPDATE_THROTTLE);\n\nlet inited = false;\n\n/* Getters */\n\nexport function init() {\n inited = true;\n\n addCallback(updateFolderManagerThrottled);\n addActionHandler('reset', reset);\n\n updateFolderManager(getGlobal());\n}\n\nexport function getOrderedIds(folderId: number) {\n if (!inited) init();\n\n return results.orderedIdsByFolderId[folderId];\n}\n\nexport function getPinnedChatsCount(folderId: number) {\n if (!inited) init();\n\n return results.pinnedCountByFolderId[folderId] || 0;\n}\n\nexport function getChatsCount() {\n if (!inited) init();\n\n return results.chatsCountByFolderId;\n}\n\nexport function getUnreadCounters() {\n if (!inited) init();\n\n return results.unreadCountersByFolderId;\n}\n\nexport function getAllNotificationsCount() {\n return getUnreadCounters()[ALL_FOLDER_ID]?.notificationsCount || 0;\n}\n\n/* Callback managers */\n\nexport function addOrderedIdsCallback(folderId: number, callback: (orderedIds: string[]) => void) {\n if (!callbacks.orderedIdsByFolderId[folderId]) {\n callbacks.orderedIdsByFolderId[folderId] = createCallbackManager();\n }\n\n return callbacks.orderedIdsByFolderId[folderId].addCallback(callback);\n}\n\nexport function addChatsCountCallback(callback: (chatsCount: typeof results.chatsCountByFolderId) => void) {\n return callbacks.chatsCountByFolderId.addCallback(callback);\n}\n\nexport function addUnreadCountersCallback(callback: (unreadCounters: typeof results.unreadCountersByFolderId) => void) {\n return callbacks.unreadCountersByFolderId.addCallback(callback);\n}\n\n/* Global update handlers */\n\nfunction updateFolderManager(global: GlobalState) {\n // eslint-disable-next-line @typescript-eslint/naming-convention\n let DEBUG_startedAt: number;\n if (DEBUG) {\n DEBUG_startedAt = performance.now();\n }\n\n const isAllFolderChanged = Boolean(\n global.chats.listIds.active\n && isMainFolderChanged(ALL_FOLDER_ID, global.chats.listIds.active, global.chats.orderedPinnedIds.active),\n );\n const isArchivedFolderChanged = Boolean(\n global.chats.listIds.archived\n && isMainFolderChanged(ARCHIVED_FOLDER_ID, global.chats.listIds.archived, global.chats.orderedPinnedIds.archived),\n );\n const isAllFullyLoadedChanged = global.chats.isFullyLoaded.active !== prevGlobal.isAllFolderFullyLoaded;\n const isArchivedFullyLoadedChanged = global.chats.isFullyLoaded.archived !== prevGlobal.isArchivedFolderFullyLoaded;\n\n const areFoldersChanged = global.chatFolders.byId !== prevGlobal.foldersById;\n const areChatsChanged = global.chats.byId !== prevGlobal.chatsById;\n const areUsersChanged = global.users.byId !== prevGlobal.usersById;\n const areNotifySettingsChanged = selectNotifySettings(global) !== prevGlobal.notifySettings;\n const areNotifyExceptionsChanged = selectNotifyExceptions(global) !== prevGlobal.notifyExceptions;\n\n let affectedFolderIds: number[] = [];\n\n if (isAllFullyLoadedChanged || isArchivedFullyLoadedChanged) {\n affectedFolderIds = affectedFolderIds.concat(\n updateFullyLoaded(global, isArchivedFullyLoadedChanged),\n );\n }\n\n if (!(\n isAllFolderChanged || isArchivedFolderChanged || areFoldersChanged\n || areChatsChanged || areUsersChanged || areNotifySettingsChanged || areNotifyExceptionsChanged\n )\n ) {\n if (affectedFolderIds.length) {\n updateResults(affectedFolderIds);\n }\n\n return;\n }\n\n const prevAllFolderListIds = prevGlobal.allFolderListIds;\n const prevArchivedFolderListIds = prevGlobal.archivedFolderListIds;\n\n updateFolders(global, isAllFolderChanged, isArchivedFolderChanged, areFoldersChanged);\n\n affectedFolderIds = affectedFolderIds.concat(updateChats(\n global,\n areFoldersChanged || isAllFolderChanged || isArchivedFolderChanged,\n areNotifySettingsChanged,\n areNotifyExceptionsChanged,\n prevAllFolderListIds,\n prevArchivedFolderListIds,\n ));\n\n updateResults(unique(affectedFolderIds));\n\n if (DEBUG) {\n const duration = performance.now() - DEBUG_startedAt!;\n if (duration > DEBUG_DURATION_LIMIT) {\n // eslint-disable-next-line no-console\n console.warn(`Slow \\`updateFolderManager\\`: ${Math.round(duration)} ms`);\n }\n }\n}\n\nfunction isMainFolderChanged(folderId: number, newListIds?: string[], newPinnedIds?: string[]) {\n const currentListIds = folderId === ALL_FOLDER_ID\n ? prevGlobal.allFolderListIds\n : prevGlobal.archivedFolderListIds;\n const currentPinnedIds = folderId === ALL_FOLDER_ID\n ? prevGlobal.allFolderPinnedIds\n : prevGlobal.archivedFolderPinnedIds;\n\n return currentListIds !== newListIds || currentPinnedIds !== newPinnedIds;\n}\n\nfunction updateFullyLoaded(\n global: GlobalState,\n isArchivedFullyLoadedChanged = false,\n) {\n let affectedFolderIds = [];\n\n if (isArchivedFullyLoadedChanged) {\n affectedFolderIds.push(ARCHIVED_FOLDER_ID);\n }\n\n const isAllFolderFullyLoaded = global.chats.isFullyLoaded.active;\n const isArchivedFolderFullyLoaded = global.chats.isFullyLoaded.archived;\n\n if (isAllFolderFullyLoaded && isArchivedFolderFullyLoaded) {\n const emptyFolderIds = Object.keys(prepared.folderSummariesById)\n .filter((folderId) => !results.orderedIdsByFolderId[folderId])\n .map(Number);\n\n affectedFolderIds = affectedFolderIds.concat(emptyFolderIds);\n }\n\n prevGlobal.isAllFolderFullyLoaded = isAllFolderFullyLoaded;\n prevGlobal.isArchivedFolderFullyLoaded = isArchivedFolderFullyLoaded;\n\n return affectedFolderIds;\n}\n\nfunction updateFolders(\n global: GlobalState, isAllFolderChanged: boolean, isArchivedFolderChanged: boolean, areFoldersChanged: boolean,\n) {\n const changedFolders = [];\n\n if (isAllFolderChanged) {\n const newListIds = global.chats.listIds.active!;\n const newPinnedIds = global.chats.orderedPinnedIds.active;\n\n prepared.folderSummariesById[ALL_FOLDER_ID] = buildFolderSummaryFromMainList(\n ALL_FOLDER_ID, newListIds, newPinnedIds,\n );\n\n prevGlobal.allFolderListIds = newListIds;\n prevGlobal.allFolderPinnedIds = newPinnedIds;\n\n changedFolders.push(ALL_FOLDER_ID);\n }\n\n if (isArchivedFolderChanged) {\n const newListIds = global.chats.listIds.archived!;\n const newPinnedIds = global.chats.orderedPinnedIds.archived;\n\n prepared.folderSummariesById[ARCHIVED_FOLDER_ID] = buildFolderSummaryFromMainList(\n ARCHIVED_FOLDER_ID, newListIds, newPinnedIds,\n );\n\n prevGlobal.archivedFolderListIds = newListIds;\n prevGlobal.archivedFolderPinnedIds = newPinnedIds;\n\n changedFolders.push(ARCHIVED_FOLDER_ID);\n }\n\n if (areFoldersChanged) {\n const newFoldersById = global.chatFolders.byId;\n\n Object.values(newFoldersById).forEach((folder) => {\n if (folder === prevGlobal.foldersById[folder.id]) {\n return;\n }\n\n prepared.folderSummariesById[folder.id] = buildFolderSummary(folder);\n\n changedFolders.push(folder.id);\n });\n\n prevGlobal.foldersById = newFoldersById;\n }\n\n return changedFolders;\n}\n\nfunction buildFolderSummaryFromMainList(\n folderId: number, listIds: string[], orderedPinnedIds?: string[],\n): FolderSummary {\n return {\n id: folderId,\n listIds: new Set(listIds),\n orderedPinnedIds,\n pinnedChatIds: new Set(orderedPinnedIds),\n };\n}\n\nfunction buildFolderSummary(folder: ApiChatFolder): FolderSummary {\n return {\n ...folder,\n orderedPinnedIds: folder.pinnedChatIds,\n excludedChatIds: folder.excludedChatIds ? new Set(folder.excludedChatIds) : undefined,\n includedChatIds: folder.excludedChatIds ? new Set(folder.includedChatIds) : undefined,\n pinnedChatIds: folder.excludedChatIds ? new Set(folder.pinnedChatIds) : undefined,\n };\n}\n\nfunction updateChats(\n global: GlobalState,\n areFoldersChanged: boolean,\n areNotifySettingsChanged: boolean,\n areNotifyExceptionsChanged: boolean,\n prevAllFolderListIds?: string[],\n prevArchivedFolderListIds?: string[],\n) {\n const newChatsById = global.chats.byId;\n const newUsersById = global.users.byId;\n const newNotifySettings = selectNotifySettings(global);\n const newNotifyExceptions = selectNotifyExceptions(global);\n const folderSummaries = Object.values(prepared.folderSummariesById);\n const affectedFolderIds = new Set();\n\n const newAllFolderListIds = global.chats.listIds.active;\n const newArchivedFolderListIds = global.chats.listIds.archived;\n let allIds = [...newAllFolderListIds || [], ...newArchivedFolderListIds || []];\n if (newAllFolderListIds !== prevAllFolderListIds || newArchivedFolderListIds !== prevArchivedFolderListIds) {\n allIds = unique(allIds.concat(prevAllFolderListIds || [], prevArchivedFolderListIds || []));\n }\n\n allIds.forEach((chatId) => {\n const chat = newChatsById[chatId];\n\n if (\n !areFoldersChanged\n && !areNotifySettingsChanged\n && !areNotifyExceptionsChanged\n && chat === prevGlobal.chatsById[chatId]\n && newUsersById[chatId] === prevGlobal.usersById[chatId]\n ) {\n return;\n }\n\n let newFolderIds: number[];\n if (chat) {\n const currentSummary = prepared.chatSummariesById.get(chatId);\n const newSummary = buildChatSummary(chat, newNotifySettings, newNotifyExceptions, newUsersById[chatId]);\n if (!areFoldersChanged && currentSummary && arePropsShallowEqual(newSummary, currentSummary)) {\n return;\n }\n\n prepared.chatSummariesById.set(chatId, newSummary);\n\n newFolderIds = buildChatFolderIds(newSummary, folderSummaries);\n newFolderIds.forEach((folderId) => {\n affectedFolderIds.add(folderId);\n });\n } else {\n prepared.chatSummariesById.delete(chatId);\n newFolderIds = [];\n }\n\n const currentFolderIds = prepared.folderIdsByChatId[chatId] || [];\n if (areSortedArraysEqual(newFolderIds, currentFolderIds)) {\n return;\n }\n\n const deletedFolderIds = updateListsForChat(chatId, currentFolderIds, newFolderIds);\n deletedFolderIds.forEach((folderId) => {\n affectedFolderIds.add(folderId);\n });\n });\n\n prevGlobal.chatsById = newChatsById;\n prevGlobal.usersById = newUsersById;\n prevGlobal.notifySettings = newNotifySettings;\n prevGlobal.notifyExceptions = newNotifyExceptions;\n\n return Array.from(affectedFolderIds);\n}\n\nfunction buildChatSummary(\n chat: ApiChat,\n notifySettings: NotifySettings,\n notifyExceptions?: Record,\n user?: ApiUser,\n): ChatSummary {\n const {\n id, type, lastMessage, isRestricted, isNotJoined, folderId,\n unreadCount, unreadMentionsCount, hasUnreadMark,\n joinDate, draftDate,\n } = chat;\n\n const userInfo = type === 'chatTypePrivate' && user;\n\n return {\n id,\n type,\n isListed: Boolean(lastMessage && !isRestricted && !isNotJoined),\n isArchived: folderId === ARCHIVED_FOLDER_ID,\n isMuted: selectIsChatMuted(chat, notifySettings, notifyExceptions),\n isUnread: Boolean(unreadCount || unreadMentionsCount || hasUnreadMark),\n unreadCount,\n unreadMentionsCount,\n order: Math.max(joinDate || 0, draftDate || 0, lastMessage?.date || 0),\n isUserBot: userInfo ? userInfo.type === 'userTypeBot' : undefined,\n isUserContact: userInfo ? userInfo.isContact : undefined,\n };\n}\n\nfunction buildChatFolderIds(chatSummary: ChatSummary, folderSummaries: FolderSummary[]) {\n return folderSummaries.reduce((acc, folderSummary) => {\n if (isChatInFolder(chatSummary, folderSummary)) {\n acc.push(folderSummary.id);\n }\n\n return acc;\n }, []).sort();\n}\n\nfunction isChatInFolder(\n chatSummary: ChatSummary,\n folderSummary: FolderSummary,\n) {\n if (!chatSummary.isListed) {\n return false;\n }\n\n const { id: chatId, type } = chatSummary;\n\n if (folderSummary.listIds) {\n if (\n (chatSummary.isArchived && folderSummary.id === ALL_FOLDER_ID)\n || (!chatSummary.isArchived && folderSummary.id === ARCHIVED_FOLDER_ID)\n ) {\n return false;\n }\n\n return folderSummary.listIds.has(chatId);\n }\n\n if (folderSummary.excludedChatIds?.has(chatId)) {\n return false;\n }\n\n if (folderSummary.includedChatIds?.has(chatId)) {\n return true;\n }\n\n if (folderSummary.pinnedChatIds?.has(chatId)) {\n return true;\n }\n\n if (folderSummary.excludeArchived && chatSummary.isArchived) {\n return false;\n }\n\n if (folderSummary.excludeRead && !chatSummary.isUnread) {\n return false;\n }\n\n if (folderSummary.excludeMuted && chatSummary.isMuted && !chatSummary.unreadMentionsCount) {\n return false;\n }\n\n if (type === 'chatTypePrivate') {\n if (chatSummary.isUserBot) {\n if (folderSummary.bots) {\n return true;\n }\n } else {\n if (folderSummary.contacts && chatSummary.isUserContact) {\n return true;\n }\n\n if (folderSummary.nonContacts && !chatSummary.isUserContact) {\n return true;\n }\n }\n } else if (type === 'chatTypeChannel') {\n return Boolean(folderSummary.channels);\n } else if (type === 'chatTypeBasicGroup' || type === 'chatTypeSuperGroup') {\n return Boolean(folderSummary.groups);\n }\n\n return false;\n}\n\nfunction updateListsForChat(chatId: string, currentFolderIds: number[], newFolderIds: number[]) {\n const currentFolderIdsSet = new Set(currentFolderIds);\n const newFolderIdsSet = new Set(newFolderIds);\n const deletedFolderIds: number[] = [];\n\n unique([...currentFolderIds, ...newFolderIds]).forEach((folderId) => {\n let currentFolderOrderedIds = results.orderedIdsByFolderId[folderId];\n\n if (currentFolderIdsSet.has(folderId) && !newFolderIdsSet.has(folderId)) {\n prepared.chatIdsByFolderId[folderId]!.delete(chatId);\n\n deletedFolderIds.push(folderId);\n\n if (currentFolderOrderedIds) {\n currentFolderOrderedIds = currentFolderOrderedIds.filter((id) => id !== chatId);\n prepared.isOrderedListJustPatched[folderId] = true;\n }\n } else if (!currentFolderIdsSet.has(folderId) && newFolderIdsSet.has(folderId)) {\n if (!prepared.chatIdsByFolderId[folderId]) {\n prepared.chatIdsByFolderId[folderId] = new Set();\n }\n\n prepared.chatIdsByFolderId[folderId]!.add(chatId);\n\n if (currentFolderOrderedIds) {\n currentFolderOrderedIds.push(chatId);\n prepared.isOrderedListJustPatched[folderId] = true;\n }\n }\n\n results.orderedIdsByFolderId[folderId] = currentFolderOrderedIds;\n });\n\n prepared.folderIdsByChatId[chatId] = newFolderIds;\n\n return deletedFolderIds;\n}\n\nfunction updateResults(affectedFolderIds: number[]) {\n let wasUnreadCountersChanged = false;\n let wasChatsCountChanged = false;\n\n Array.from(affectedFolderIds).forEach((folderId) => {\n const { pinnedCount: newPinnedCount, orderedIds: newOrderedIds } = buildFolderOrderedIds(folderId);\n // When signed out\n if (!newOrderedIds) {\n return;\n }\n\n const currentOrderedIds = results.orderedIdsByFolderId[folderId];\n const currentPinnedCount = results.pinnedCountByFolderId[folderId];\n const areOrderedIdsChanged = (\n !currentOrderedIds\n || currentPinnedCount === undefined || currentPinnedCount !== newPinnedCount\n || prepared.isOrderedListJustPatched[folderId]\n || !areSortedArraysEqual(newOrderedIds, currentOrderedIds)\n );\n if (areOrderedIdsChanged) {\n prepared.isOrderedListJustPatched[folderId] = false;\n results.orderedIdsByFolderId[folderId] = newOrderedIds;\n results.pinnedCountByFolderId[folderId] = newPinnedCount;\n callbacks.orderedIdsByFolderId[folderId]?.runCallbacks(newOrderedIds);\n }\n\n const currentChatsCount = results.chatsCountByFolderId[folderId];\n const newChatsCount = newOrderedIds.length;\n if (!wasChatsCountChanged) {\n wasChatsCountChanged = currentChatsCount !== newChatsCount;\n }\n results.chatsCountByFolderId[folderId] = newChatsCount;\n\n const currentUnreadCounters = results.unreadCountersByFolderId[folderId];\n const newUnreadCounters = buildFolderUnreadCounters(folderId);\n if (!wasUnreadCountersChanged) {\n wasUnreadCountersChanged = (\n !currentUnreadCounters || !arePropsShallowEqual(newUnreadCounters, currentUnreadCounters)\n );\n }\n results.unreadCountersByFolderId[folderId] = newUnreadCounters;\n });\n\n if (wasChatsCountChanged) {\n // We need to update the entire object as it will be returned from a hook\n const newValue = { ...results.chatsCountByFolderId };\n results.chatsCountByFolderId = newValue;\n callbacks.chatsCountByFolderId.runCallbacks(newValue);\n }\n\n if (wasUnreadCountersChanged) {\n // We need to update the entire object as it will be returned from a hook\n const newValue = { ...results.unreadCountersByFolderId };\n results.unreadCountersByFolderId = newValue;\n callbacks.unreadCountersByFolderId.runCallbacks(newValue);\n }\n}\n\nfunction buildFolderOrderedIds(folderId: number) {\n const folderSummary = prepared.folderSummariesById[folderId];\n if (!folderSummary) {\n return {};\n }\n\n const { orderedPinnedIds, pinnedChatIds } = folderSummary;\n const {\n chatSummariesById,\n chatIdsByFolderId: { [folderId]: chatIds },\n } = prepared;\n const {\n orderedIdsByFolderId: { [folderId]: prevOrderedIds },\n } = results;\n\n const sortedPinnedIds = chatIds ? orderedPinnedIds?.filter((id) => chatIds.has(id)) : orderedPinnedIds;\n const allListIds = prevOrderedIds || (chatIds && Array.from(chatIds)) || [];\n const notPinnedIds = pinnedChatIds ? allListIds.filter((id) => !pinnedChatIds.has(id)) : allListIds;\n const sortedNotPinnedIds = notPinnedIds.sort((chatId1: string, chatId2: string) => {\n return chatSummariesById.get(chatId2)!.order - chatSummariesById.get(chatId1)!.order;\n });\n\n return {\n pinnedCount: sortedPinnedIds?.length || 0,\n orderedIds: [\n ...(sortedPinnedIds || []),\n ...sortedNotPinnedIds,\n ],\n };\n}\n\nfunction buildFolderUnreadCounters(folderId: number) {\n const {\n chatSummariesById,\n } = prepared;\n const {\n orderedIdsByFolderId: { [folderId]: orderedIds },\n } = results;\n\n return orderedIds!.reduce((newUnreadCounters, chatId) => {\n const chatSummary = chatSummariesById.get(chatId);\n if (!chatSummary) {\n return newUnreadCounters;\n }\n\n if (chatSummary.isUnread) {\n newUnreadCounters.chatsCount++;\n\n if (chatSummary.unreadMentionsCount) {\n newUnreadCounters.notificationsCount += chatSummary.unreadMentionsCount;\n }\n\n if (!chatSummary.isMuted) {\n if (chatSummary.unreadCount) {\n newUnreadCounters.notificationsCount += chatSummary.unreadCount;\n } else if (!chatSummary.unreadMentionsCount) {\n newUnreadCounters.notificationsCount += 1; // Manually marked unread\n }\n }\n }\n\n return newUnreadCounters;\n }, {\n chatsCount: 0,\n notificationsCount: 0,\n });\n}\n\nfunction buildInitials() {\n return {\n prevGlobal: {\n foldersById: {},\n chatsById: {},\n usersById: {},\n notifySettings: {} as NotifySettings,\n notifyExceptions: {},\n },\n\n prepared: {\n folderSummariesById: {},\n chatSummariesById: new Map(),\n folderIdsByChatId: {},\n chatIdsByFolderId: {},\n isOrderedListJustPatched: {},\n },\n\n results: {\n orderedIdsByFolderId: {},\n pinnedCountByFolderId: {},\n chatsCountByFolderId: {},\n unreadCountersByFolderId: {},\n },\n\n callbacks: {\n orderedIdsByFolderId: {},\n chatsCountByFolderId: createCallbackManager(),\n unreadCountersByFolderId: createCallbackManager(),\n },\n };\n}\n\nfunction reset() {\n const newInitials = buildInitials();\n\n prevGlobal = newInitials.prevGlobal;\n prepared = newInitials.prepared;\n results = newInitials.results;\n callbacks = newInitials.callbacks;\n}\n","import { LangCode } from '../types';\n\nexport function formatCurrency(totalPrice: number, currency?: string, locale: LangCode = 'en') {\n return new Intl.NumberFormat(locale, {\n style: 'currency',\n currency,\n }).format(currency === 'JPY' ? totalPrice : totalPrice / 100);\n}\n","const generateIdFor = (store: AnyLiteral) => {\n let id;\n\n do {\n id = String(Math.random()).replace('0.', 'id');\n } while (store.hasOwnProperty(id));\n\n return id;\n};\n\nexport default generateIdFor;\n","import { ApiError, ApiFieldError } from '../api/types';\n\nconst READABLE_ERROR_MESSAGES: Record = {\n CHAT_RESTRICTED: 'You can\\'t send messages in this chat, you were restricted',\n CHAT_WRITE_FORBIDDEN: 'You can\\'t write in this chat',\n CHAT_SEND_POLL_FORBIDDEN: 'You can\\'t create polls in this chat',\n CHAT_SEND_STICKERS_FORBIDDEN: 'You can\\'t send stickers in this chat',\n CHAT_SEND_GIFS_FORBIDDEN: 'You can\\'t send gifs in this chat',\n CHAT_SEND_MEDIA_FORBIDDEN: 'You can\\'t send media in this chat',\n CHAT_LINK_EXISTS: 'The chat is public, you can\\'t hide the history to new users',\n // eslint-disable-next-line max-len\n SLOWMODE_WAIT_X: 'Slowmode is enabled in this chat: you must wait for the specified number of seconds before sending another message to the chat.',\n USER_BANNED_IN_CHANNEL: 'You\\'re banned from sending messages in supergroups / channels',\n USER_IS_BLOCKED: 'You were blocked by this user',\n YOU_BLOCKED_USER: 'You blocked this user',\n IMAGE_PROCESS_FAILED: 'Failure while processing image',\n MEDIA_EMPTY: 'The provided media object is invalid',\n MEDIA_INVALID: 'Media invalid',\n PHOTO_EXT_INVALID: 'The extension of the photo is invalid',\n PHOTO_INVALID_DIMENSIONS: 'The photo dimensions are invalid',\n PHOTO_SAVE_FILE_INVALID: 'Internal issues, try again later',\n // eslint-disable-next-line max-len\n MESSAGE_DELETE_FORBIDDEN: 'You can\\'t delete one of the messages you tried to delete, most likely because it is a service message.',\n MESSAGE_POLL_CLOSED: 'Poll closed',\n MESSAGE_EDIT_TIME_EXPIRED: 'You can\\'t edit this message anymore.',\n CHAT_ADMIN_REQUIRED: 'You must be an admin in this chat to do this',\n PINNED_DIALOGS_TOO_MUCH: 'Sorry, you can only pin 5 chats to the top',\n DIALOG_FILTERS_TOO_MUCH: 'Sorry, you can\\'t have more than 10 folders',\n CHANNEL_PRIVATE: 'This channel is private',\n MEDIA_CAPTION_TOO_LONG: 'The provided caption is too long',\n ADDRESS_STREET_LINE1_INVALID: 'The address you provided is not valid',\n ADDRESS_STREET_LINE2_INVALID: 'The address you provided is not valid',\n ADDRESS_CITY_INVALID: 'The city you provided is not valid',\n ADDRESS_COUNTRY_INVALID: 'The country you provided is not valid',\n ADDRESS_POSTCODE_INVALID: 'The postcode you provided is not valid',\n ADDRESS_STATE_INVALID: 'The state you provided is not valid',\n REQ_INFO_NAME_INVALID: 'The name you provided is not valid',\n REQ_INFO_PHONE_INVALID: 'The phone you provided is not valid',\n REQ_INFO_EMAIL_INVALID: 'The email you provided is not valid',\n // TODO Bring back after fixing the weird bug\n // CHANNEL_INVALID: 'An error occurred. Please try again later',\n LINK_NOT_MODIFIED: 'This discussion is already linked to the channel',\n MESSAGE_TOO_LONG: 'Message is too long',\n\n // Non-API errors\n // eslint-disable-next-line max-len\n SERVICE_WORKER_DISABLED: 'Service Worker is disabled. Streaming media may not be supported. Try reloading the page without holding key',\n // eslint-disable-next-line max-len\n MESSAGE_TOO_LONG_PLEASE_REMOVE_CHARACTERS: 'The provided message is too long. Please remove {EXTRA_CHARS_COUNT} character{PLURAL_S}.',\n // eslint-disable-next-line max-len\n FRESH_RESET_AUTHORISATION_FORBIDDEN: 'You can’t logout other sessions if less than 24 hours have passed since you logged on the current session',\n\n BOTS_TOO_MUCH: 'There are too many bots in this chat/channel',\n BOT_GROUPS_BLOCKED: 'This bot can\\'t be added to groups',\n USERS_TOO_MUCH: 'The maximum number of users has been exceeded',\n USER_CHANNELS_TOO_MUCH: 'One of the users you tried to add is already in too many channels/supergroups',\n USER_KICKED: 'This user was kicked from this supergroup/channel',\n USER_NOT_MUTUAL_CONTACT: 'The provided user is not a mutual contact',\n USER_PRIVACY_RESTRICTED: 'The user\\'s privacy settings do not allow you to do this',\n INVITE_HASH_EMPTY: 'The invite hash is empty',\n INVITE_HASH_EXPIRED: 'The invite link has expired',\n INVITE_HASH_INVALID: 'The invite hash is invalid',\n CHANNELS_TOO_MUCH: 'You have joined too many channels/supergroups',\n USER_ALREADY_PARTICIPANT: 'You already in the group',\n SCHEDULE_DATE_INVALID: 'Invalid schedule date provided',\n WALLPAPER_DIMENSIONS_INVALID: 'The wallpaper dimensions are invalid, please select another file',\n ADMINS_TOO_MUCH: 'There are too many admins',\n ADMIN_RANK_EMOJI_NOT_ALLOWED: 'An admin rank cannot contain emojis',\n ADMIN_RANK_INVALID: 'The specified admin rank is invalid',\n FRESH_CHANGE_ADMINS_FORBIDDEN: 'You were just elected admin, you can\\'t add or modify other admins yet',\n INPUT_USER_DEACTIVATED: 'The specified user was deleted',\n BOT_PRECHECKOUT_TIMEOUT: 'The request for payment has expired',\n};\n\nexport const SHIPPING_ERRORS: Record = {\n ADDRESS_STREET_LINE1_INVALID: {\n field: 'streetLine1',\n message: 'Incorrect street address',\n },\n ADDRESS_STREET_LINE2_INVALID: {\n field: 'streetLine2',\n message: 'Incorrect street address',\n },\n ADDRESS_CITY_INVALID: {\n field: 'city',\n message: 'Incorrect city',\n },\n ADDRESS_COUNTRY_INVALID: {\n field: 'countryIso2',\n message: 'Incorrect country',\n },\n ADDRESS_POSTCODE_INVALID: {\n field: 'postCode',\n message: 'Incorrect post code',\n },\n ADDRESS_STATE_INVALID: {\n field: 'state',\n message: 'Incorrect state',\n },\n REQ_INFO_NAME_INVALID: {\n field: 'fullName',\n message: 'Incorrect name',\n },\n REQ_INFO_PHONE_INVALID: {\n field: 'phone',\n message: 'Incorrect phone',\n },\n REQ_INFO_EMAIL_INVALID: {\n field: 'email',\n message: 'Incorrect email',\n },\n};\n\nexport default function getReadableErrorText(error: ApiError) {\n const { message, isSlowMode, textParams } = error;\n // Currently, Telegram API doesn't return `SLOWMODE_WAIT_X` error as described in the docs\n if (isSlowMode) {\n const extraPartIndex = message.indexOf(' (caused by');\n return extraPartIndex > 0 ? message.substring(0, extraPartIndex) : message;\n }\n let errorMessage = READABLE_ERROR_MESSAGES[message];\n if (errorMessage && textParams) {\n errorMessage = Object.keys(textParams).reduce((acc, current) => {\n return acc.replace(current, textParams[current]);\n }, errorMessage as string);\n }\n return errorMessage;\n}\n\nexport function getShippingError(error: ApiError): ApiFieldError | undefined {\n return SHIPPING_ERRORS[error.message];\n}\n","import { DEBUG_ALERT_MSG } from '../config';\nimport { throttle } from './schedulers';\n\nwindow.addEventListener('error', handleErrorEvent);\nwindow.addEventListener('unhandledrejection', handleErrorEvent);\n\n// eslint-disable-next-line prefer-destructuring\nconst APP_ENV = process.env.APP_ENV;\n\nfunction handleErrorEvent(e: ErrorEvent | PromiseRejectionEvent) {\n // https://stackoverflow.com/questions/49384120/resizeobserver-loop-limit-exceeded\n if (e instanceof ErrorEvent && e.message === 'ResizeObserver loop limit exceeded') {\n return;\n }\n\n e.preventDefault();\n\n handleError(e instanceof ErrorEvent ? (e.error || e.message) : e.reason);\n}\n\nconst throttledAlert = throttle(window.alert, 1000);\n\nexport function handleError(err: Error) {\n // eslint-disable-next-line no-console\n console.error(err);\n\n if (APP_ENV === 'development' || APP_ENV === 'staging') {\n throttledAlert(`${DEBUG_ALERT_MSG}\\n\\n${(err?.message) || err}\\n${err?.stack}`);\n }\n}\n","type CollectionByKey = Record;\n\ntype OrderDirection =\n 'asc'\n | 'desc';\n\ninterface OrderCallback {\n (member: T): any;\n}\n\nexport function buildCollectionByKey(collection: T[], key: keyof T) {\n return collection.reduce((byKey: CollectionByKey, member: T) => {\n byKey[member[key]] = member;\n\n return byKey;\n }, {});\n}\n\nexport function mapValues(\n byKey: CollectionByKey,\n callback: (member: M, key: string, index: number, originalByKey: CollectionByKey) => R,\n): CollectionByKey {\n return Object.keys(byKey).reduce((newByKey: CollectionByKey, key, index) => {\n newByKey[key] = callback(byKey[key], key, index, byKey);\n return newByKey;\n }, {});\n}\n\nexport function pick(object: T, keys: K[]) {\n return keys.reduce((result, key) => {\n result[key] = object[key];\n return result;\n }, {} as Pick);\n}\n\nexport function pickTruthy(object: T, keys: K[]) {\n return keys.reduce((result, key) => {\n if (object[key]) {\n result[key] = object[key];\n }\n\n return result;\n }, {} as Pick);\n}\n\nexport function omit(object: T, keys: K[]) {\n const stringKeys = new Set(keys.map(String));\n const savedKeys = Object.keys(object)\n .filter((key) => !stringKeys.has(key)) as Array>;\n\n return pick(object, savedKeys);\n}\n\nexport function orderBy(\n collection: T[],\n orderRule: (keyof T) | OrderCallback | ((keyof T) | OrderCallback)[],\n mode: OrderDirection | [OrderDirection, OrderDirection] = 'asc',\n): T[] {\n function compareValues(a: T, b: T, currentOrderRule: (keyof T) | OrderCallback, isAsc: boolean) {\n const aValue = (typeof currentOrderRule === 'function' ? currentOrderRule(a) : a[currentOrderRule]) || 0;\n const bValue = (typeof currentOrderRule === 'function' ? currentOrderRule(b) : b[currentOrderRule]) || 0;\n\n return isAsc ? aValue - bValue : bValue - aValue;\n }\n\n if (Array.isArray(orderRule)) {\n const [mode1, mode2] = Array.isArray(mode) ? mode : [mode, mode];\n const [orderRule1, orderRule2] = orderRule;\n const isAsc1 = mode1 === 'asc';\n const isAsc2 = mode2 === 'asc';\n\n return collection.sort((a, b) => {\n return compareValues(a, b, orderRule1, isAsc1) || compareValues(a, b, orderRule2, isAsc2);\n });\n }\n\n const isAsc = mode === 'asc';\n return collection.sort((a, b) => {\n return compareValues(a, b, orderRule, isAsc);\n });\n}\n\nexport function flatten(array: any[]) {\n return array.reduce((result, member) => {\n if (Array.isArray(member)) {\n return result.concat(member);\n } else {\n result.push(member);\n return result;\n }\n }, []);\n}\n\nexport function unique(array: T[]): T[] {\n return Array.from(new Set(array));\n}\n\nexport function compact(array: T[]) {\n return array.filter(Boolean);\n}\n\nexport function areSortedArraysEqual(array1: any[], array2: any[]) {\n if (array1.length !== array2.length) {\n return false;\n }\n\n return array1.every((item, i) => item === array2[i]);\n}\n\nexport function areSortedArraysIntersecting(array1: any[], array2: any[]) {\n return array1[0] <= array2[array2.length - 1] && array1[array1.length - 1] >= array2[0];\n}\n\nexport function findIntersectionWithSet(array: T[], set: Set): T[] {\n return array.filter((a) => set.has(a));\n}\n\nexport function split(array: any[], chunkSize: number) {\n const result = [];\n for (let i = 0; i < array.length; i += chunkSize) {\n result.push(array.slice(i, i + chunkSize));\n }\n\n return result;\n}\n\nexport function cloneDeep(value: T): T {\n if (typeof value !== 'object') {\n return value;\n }\n\n if (Array.isArray(value)) {\n return value.map(cloneDeep) as typeof value;\n }\n\n return Object.keys(value).reduce((acc, key) => {\n acc[key as keyof T] = cloneDeep(value[key as keyof T]);\n return acc;\n }, {} as T);\n}\n\nexport function findLast(array: Array, predicate: (value: T, index: number, obj: T[]) => boolean): T | undefined {\n let cursor = array.length;\n\n while (cursor--) {\n if (predicate(array[cursor], cursor, array)) {\n return array[cursor];\n }\n }\n\n return undefined;\n}\n","import { getGlobal } from '../global';\n\nimport { ApiLangPack, ApiLangString } from '../api/types';\nimport { LangCode, TimeFormat } from '../types';\n\nimport {\n DEFAULT_LANG_CODE, DEFAULT_LANG_PACK, LANG_CACHE_NAME, LANG_PACKS,\n} from '../config';\nimport * as cacheApi from './cacheApi';\nimport { callApi } from '../api/gramjs';\nimport { createCallbackManager } from './callbacks';\nimport { formatInteger } from './textFormat';\n\ninterface LangFn {\n (key: string, value?: any, format?: 'i'): any;\n\n isRtl?: boolean;\n code?: LangCode;\n timeFormat?: TimeFormat;\n}\n\nconst SUBSTITUTION_REGEX = /%\\d?\\$?[sdf@]/g;\nconst PLURAL_OPTIONS = ['value', 'zeroValue', 'oneValue', 'twoValue', 'fewValue', 'manyValue', 'otherValue'] as const;\nconst PLURAL_RULES = {\n /* eslint-disable max-len */\n en: (n: number) => (n !== 1 ? 6 : 2),\n ar: (n: number) => (n === 0 ? 1 : n === 1 ? 2 : n === 2 ? 3 : n % 100 >= 3 && n % 100 <= 10 ? 4 : n % 100 >= 11 ? 5 : 6),\n ca: (n: number) => (n !== 1 ? 6 : 2),\n de: (n: number) => (n !== 1 ? 6 : 2),\n es: (n: number) => (n !== 1 ? 6 : 2),\n fa: (n: number) => (n > 1 ? 6 : 2),\n fr: (n: number) => (n > 1 ? 6 : 2),\n id: () => 0,\n it: (n: number) => (n !== 1 ? 6 : 2),\n ko: () => 0,\n ms: () => 0,\n nl: (n: number) => (n !== 1 ? 6 : 2),\n pl: (n: number) => (n === 1 ? 2 : n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 10 || n % 100 >= 20) ? 4 : 5),\n pt_BR: (n: number) => (n > 1 ? 6 : 2),\n ru: (n: number) => (n % 10 === 1 && n % 100 !== 11 ? 2 : n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 10 || n % 100 >= 20) ? 4 : 5),\n tr: (n: number) => (n > 1 ? 6 : 2),\n uk: (n: number) => (n % 10 === 1 && n % 100 !== 11 ? 2 : n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 10 || n % 100 >= 20) ? 4 : 5),\n uz: (n: number) => (n > 1 ? 6 : 2),\n /* eslint-enable max-len */\n};\n\nconst cache = new Map();\n\nlet langPack: ApiLangPack | undefined;\nlet fallbackLangPack: ApiLangPack | undefined;\n\nconst {\n addCallback,\n removeCallback,\n runCallbacks,\n} = createCallbackManager();\n\nexport { addCallback, removeCallback };\n\nlet currentLangCode: string | undefined;\nlet currentTimeFormat: TimeFormat | undefined;\n\nexport const getTranslation: LangFn = (key: string, value?: any, format?: 'i') => {\n if (value !== undefined) {\n const cacheValue = Array.isArray(value) ? JSON.stringify(value) : value;\n const cached = cache.get(`${key}_${cacheValue}_${format}`);\n if (cached) {\n return cached;\n }\n }\n\n if (!langPack && !fallbackLangPack) {\n return key;\n }\n\n const langString = (langPack?.[key]) || (fallbackLangPack?.[key]);\n if (!langString) {\n if (!fallbackLangPack) {\n void importFallbackLangPack();\n }\n\n return key;\n }\n\n return processTranslation(langString, key, value, format);\n};\n\nexport async function getTranslationForLangString(langCode: string, key: string) {\n let translateString: ApiLangString | undefined = await cacheApi.fetch(\n LANG_CACHE_NAME,\n `${DEFAULT_LANG_PACK}_${langCode}_${key}`,\n cacheApi.Type.Json,\n );\n\n if (!translateString) {\n translateString = await fetchRemoteString(DEFAULT_LANG_PACK, langCode, key);\n }\n\n return processTranslation(translateString, key);\n}\n\nexport async function setLanguage(langCode: LangCode, callback?: NoneToVoidFunction, withFallback = false) {\n if (langPack && langCode === currentLangCode) {\n if (callback) {\n callback();\n }\n\n return;\n }\n\n let newLangPack = await cacheApi.fetch(LANG_CACHE_NAME, langCode, cacheApi.Type.Json);\n if (!newLangPack) {\n if (withFallback) {\n await importFallbackLangPack();\n }\n\n newLangPack = await fetchRemote(langCode);\n if (!newLangPack) {\n return;\n }\n }\n\n cache.clear();\n\n currentLangCode = langCode;\n langPack = newLangPack;\n document.documentElement.lang = langCode;\n\n const { languages, timeFormat } = getGlobal().settings.byKey;\n const langInfo = languages?.find((l) => l.langCode === langCode);\n getTranslation.isRtl = Boolean(langInfo?.rtl);\n getTranslation.code = langCode;\n getTranslation.timeFormat = timeFormat;\n\n if (callback) {\n callback();\n }\n\n runCallbacks();\n}\n\nexport function setTimeFormat(timeFormat: TimeFormat) {\n if (timeFormat && timeFormat === currentTimeFormat) {\n return;\n }\n\n currentTimeFormat = timeFormat;\n getTranslation.timeFormat = timeFormat;\n\n runCallbacks();\n}\n\nasync function importFallbackLangPack() {\n if (fallbackLangPack) {\n return;\n }\n\n fallbackLangPack = (await import('./fallbackLangPack')).default;\n runCallbacks();\n}\n\nasync function fetchRemote(langCode: string): Promise {\n const remote = await callApi('fetchLangPack', { sourceLangPacks: LANG_PACKS, langCode });\n if (remote) {\n await cacheApi.save(LANG_CACHE_NAME, langCode, remote.langPack);\n return remote.langPack;\n }\n\n return undefined;\n}\n\nasync function fetchRemoteString(\n remoteLangPack: typeof LANG_PACKS[number], langCode: string, key: string,\n): Promise {\n const remote = await callApi('fetchLangStrings', {\n langPack: remoteLangPack,\n langCode,\n keys: [key],\n });\n\n if (remote?.length) {\n await cacheApi.save(LANG_CACHE_NAME, `${remoteLangPack}_${langCode}_${key}`, remote[0]);\n\n return remote[0];\n }\n\n return undefined;\n}\n\nfunction getPluralOption(amount: number) {\n const langCode = currentLangCode || DEFAULT_LANG_CODE;\n const optionIndex = PLURAL_RULES[langCode as keyof typeof PLURAL_RULES]\n ? PLURAL_RULES[langCode as keyof typeof PLURAL_RULES](amount)\n : 0;\n\n return PLURAL_OPTIONS[optionIndex];\n}\n\nfunction processTemplate(template: string, value: any) {\n value = Array.isArray(value) ? value : [value];\n const translationSlices = template.split(SUBSTITUTION_REGEX);\n const initialValue = translationSlices.shift();\n\n return translationSlices.reduce((result, str, index) => {\n return `${result}${String(value[index] || '')}${str}`;\n }, initialValue || '');\n}\n\nfunction processTranslation(langString: ApiLangString | undefined, key: string, value?: any, format?: 'i') {\n const template = langString ? langString[typeof value === 'number' ? getPluralOption(value) : 'value'] : undefined;\n if (!template || !template.trim()) {\n const parts = key.split('.');\n\n return parts[parts.length - 1];\n }\n\n if (value !== undefined) {\n const formattedValue = format === 'i' ? formatInteger(value) : value;\n const result = processTemplate(template, formattedValue);\n const cacheValue = Array.isArray(value) ? JSON.stringify(value) : value;\n cache.set(`${key}_${cacheValue}_${format}`, result);\n return result;\n }\n\n return template;\n}\n","const SAMPLE_RATE = 48000;\nconst BIT_DEPTH = 16;\n\nexport async function oggToWav(opusData: Blob): Promise {\n const arrayBuffer = await new Response(opusData).arrayBuffer();\n\n return new Promise((resolve) => {\n const typedArray = new Uint8Array(arrayBuffer);\n\n let decoderWorker: Worker | undefined = new Worker(\n new URL('opus-recorder/dist/decoderWorker.min.js', import.meta.url),\n );\n let wavWorker: Worker | undefined = new Worker(new URL('opus-recorder/dist/waveWorker.min.js', import.meta.url));\n\n decoderWorker.onmessage = (e) => {\n // eslint-disable-next-line no-null/no-null\n if (e.data === null) {\n // `null` means decoder is finished\n wavWorker!.postMessage({ command: 'done' });\n } else {\n // `e.data` contains decoded buffers as float32 values\n wavWorker!.postMessage(\n {\n command: 'encode',\n buffers: e.data,\n },\n e.data.map(({ buffer }: Float32Array) => buffer),\n );\n }\n };\n\n wavWorker.onmessage = (e) => {\n if (e.data.message === 'page') {\n resolve(new Blob([e.data.page], { type: 'audio/wav' }));\n\n decoderWorker!.terminate();\n decoderWorker = undefined;\n wavWorker!.terminate();\n wavWorker = undefined;\n }\n };\n\n wavWorker.postMessage({\n command: 'init',\n wavBitDepth: BIT_DEPTH,\n wavSampleRate: SAMPLE_RATE,\n });\n\n decoderWorker.postMessage({\n command: 'init',\n decoderSampleRate: SAMPLE_RATE,\n outputBufferSampleRate: SAMPLE_RATE,\n });\n\n decoderWorker.postMessage({\n command: 'decode',\n pages: typedArray,\n }, [typedArray.buffer]);\n });\n}\n","import {\n ApiMediaFormat,\n ApiOnProgress,\n ApiParsedMedia,\n ApiPreparedMedia,\n} from '../api/types';\n\nimport {\n DEBUG, MEDIA_CACHE_DISABLED, MEDIA_CACHE_NAME, MEDIA_CACHE_NAME_AVATARS,\n} from '../config';\nimport { callApi, cancelApiProgress } from '../api/gramjs';\nimport * as cacheApi from './cacheApi';\nimport { fetchBlob } from './files';\nimport { IS_OPUS_SUPPORTED, IS_PROGRESSIVE_SUPPORTED, isWebpSupported } from './environment';\nimport { oggToWav } from './oggToWav';\nimport { webpToPng } from './webpToPng';\n\nconst asCacheApiType = {\n [ApiMediaFormat.BlobUrl]: cacheApi.Type.Blob,\n [ApiMediaFormat.Lottie]: cacheApi.Type.Blob,\n [ApiMediaFormat.Progressive]: undefined,\n [ApiMediaFormat.Stream]: undefined,\n};\n\nconst PROGRESSIVE_URL_PREFIX = './progressive/';\n\nconst memoryCache = new Map();\nconst fetchPromises = new Map>();\nconst progressCallbacks = new Map>();\nconst cancellableCallbacks = new Map();\n\nexport function fetch(\n url: string,\n mediaFormat: T,\n isHtmlAllowed = false,\n onProgress?: ApiOnProgress,\n callbackUniqueId?: string,\n): Promise {\n if (mediaFormat === ApiMediaFormat.Progressive) {\n return (\n IS_PROGRESSIVE_SUPPORTED\n ? getProgressive(url)\n : fetch(url, ApiMediaFormat.BlobUrl, isHtmlAllowed, onProgress, callbackUniqueId)\n ) as Promise;\n }\n\n if (!fetchPromises.has(url)) {\n const promise = fetchFromCacheOrRemote(url, mediaFormat, isHtmlAllowed)\n .catch((err) => {\n if (DEBUG) {\n // eslint-disable-next-line no-console\n console.warn(err);\n }\n\n return undefined;\n })\n .finally(() => {\n fetchPromises.delete(url);\n progressCallbacks.delete(url);\n cancellableCallbacks.delete(url);\n });\n\n fetchPromises.set(url, promise);\n }\n\n if (onProgress && callbackUniqueId) {\n let activeCallbacks = progressCallbacks.get(url);\n if (!activeCallbacks) {\n activeCallbacks = new Map();\n progressCallbacks.set(url, activeCallbacks);\n }\n activeCallbacks.set(callbackUniqueId, onProgress);\n }\n\n return fetchPromises.get(url) as Promise;\n}\n\nexport function getFromMemory(url: string) {\n return memoryCache.get(url) as ApiPreparedMedia;\n}\n\nexport function cancelProgress(progressCallback: ApiOnProgress) {\n progressCallbacks.forEach((map, url) => {\n map.forEach((callback) => {\n if (callback === progressCallback) {\n const parentCallback = cancellableCallbacks.get(url);\n if (!parentCallback) return;\n\n cancelApiProgress(parentCallback);\n cancellableCallbacks.delete(url);\n progressCallbacks.delete(url);\n }\n });\n });\n}\n\nexport function removeCallback(url: string, callbackUniqueId: string) {\n const callbacks = progressCallbacks.get(url);\n if (!callbacks) return;\n callbacks.delete(callbackUniqueId);\n}\n\nfunction getProgressive(url: string) {\n const progressiveUrl = `${PROGRESSIVE_URL_PREFIX}${url}`;\n\n memoryCache.set(url, progressiveUrl);\n\n return Promise.resolve(progressiveUrl);\n}\n\nasync function fetchFromCacheOrRemote(\n url: string, mediaFormat: ApiMediaFormat, isHtmlAllowed: boolean,\n) {\n if (!MEDIA_CACHE_DISABLED) {\n const cacheName = url.startsWith('avatar') ? MEDIA_CACHE_NAME_AVATARS : MEDIA_CACHE_NAME;\n const cached = await cacheApi.fetch(cacheName, url, asCacheApiType[mediaFormat]!, isHtmlAllowed);\n\n if (cached) {\n let media = cached;\n\n if (cached.type === 'audio/ogg' && !IS_OPUS_SUPPORTED) {\n media = await oggToWav(media);\n }\n\n if (cached.type === 'image/webp' && !isWebpSupported() && media) {\n const mediaPng = await webpToPng(url, media);\n if (mediaPng) {\n media = mediaPng;\n }\n }\n\n const prepared = prepareMedia(media);\n\n memoryCache.set(url, prepared);\n\n return prepared;\n }\n }\n\n if (mediaFormat === ApiMediaFormat.Stream) {\n const mediaSource = new MediaSource();\n const streamUrl = URL.createObjectURL(mediaSource);\n let isOpen = false;\n\n mediaSource.addEventListener('sourceopen', () => {\n if (isOpen) {\n return;\n }\n isOpen = true;\n\n const sourceBuffer = mediaSource.addSourceBuffer('audio/mpeg');\n\n const onProgress = makeOnProgress(url, mediaSource, sourceBuffer);\n cancellableCallbacks.set(url, onProgress);\n\n void callApi('downloadMedia', { url, mediaFormat }, onProgress);\n });\n\n memoryCache.set(url, streamUrl);\n return streamUrl;\n }\n\n const onProgress = makeOnProgress(url);\n cancellableCallbacks.set(url, onProgress);\n\n const remote = await callApi('downloadMedia', { url, mediaFormat, isHtmlAllowed }, onProgress);\n if (!remote) {\n throw new Error(`Failed to fetch media ${url}`);\n }\n\n let { prepared, mimeType } = remote;\n\n if (mimeType === 'audio/ogg' && !IS_OPUS_SUPPORTED) {\n const blob = await fetchBlob(prepared as string);\n URL.revokeObjectURL(prepared as string);\n const media = await oggToWav(blob);\n prepared = prepareMedia(media);\n mimeType = media.type;\n }\n\n if (mimeType === 'image/webp' && !isWebpSupported()) {\n const blob = await fetchBlob(prepared as string);\n URL.revokeObjectURL(prepared as string);\n const media = await webpToPng(url, blob);\n if (media) {\n prepared = prepareMedia(media);\n }\n }\n\n memoryCache.set(url, prepared);\n\n return prepared;\n}\n\nfunction makeOnProgress(url: string, mediaSource?: MediaSource, sourceBuffer?: SourceBuffer) {\n const onProgress: ApiOnProgress = (progress: number, arrayBuffer: ArrayBuffer) => {\n progressCallbacks.get(url)?.forEach((callback) => {\n callback(progress);\n if (callback.isCanceled) onProgress.isCanceled = true;\n });\n\n if (progress === 1) {\n mediaSource?.endOfStream();\n }\n\n if (!arrayBuffer) {\n return;\n }\n\n sourceBuffer?.appendBuffer(arrayBuffer);\n };\n\n return onProgress;\n}\n\nfunction prepareMedia(mediaData: Exclude): ApiPreparedMedia {\n if (mediaData instanceof Blob) {\n return URL.createObjectURL(mediaData);\n }\n\n return mediaData;\n}\n\nif (IS_PROGRESSIVE_SUPPORTED) {\n navigator.serviceWorker.addEventListener('message', async (e) => {\n const { type, messageId, params } = e.data as {\n type: string;\n messageId: string;\n params: { url: string; start: number; end: number };\n };\n\n if (type !== 'requestPart') {\n return;\n }\n\n const result = await callApi('downloadMedia', { mediaFormat: ApiMediaFormat.Progressive, ...params });\n if (!result) {\n return;\n }\n\n const { arrayBuffer, mimeType, fullSize } = result;\n\n navigator.serviceWorker.controller!.postMessage({\n type: 'partResponse',\n messageId,\n result: {\n arrayBuffer,\n mimeType,\n fullSize,\n },\n }, [arrayBuffer!]);\n });\n}\n","export const MEMO_EMPTY_ARRAY = [];\n","import { DEBUG } from '../config';\nimport { createCallbackManager } from './callbacks';\n\nexport enum Bundles {\n Auth,\n Main,\n Extra,\n Calls,\n}\n\ninterface ImportedBundles {\n [Bundles.Auth]: typeof import('../bundles/auth');\n [Bundles.Main]: typeof import('../bundles/main');\n [Bundles.Extra]: typeof import('../bundles/extra');\n [Bundles.Calls]: typeof import('../bundles/calls');\n}\n\ntype BundlePromises = {\n [K in keyof ImportedBundles]: Promise\n};\n\nexport type BundleModules = keyof ImportedBundles[B];\n\nconst LOAD_PROMISES: Partial = {};\nconst MEMORY_CACHE: Partial = {};\n\nconst { addCallback, runCallbacks } = createCallbackManager();\n\nexport async function loadModule>(bundleName: B, moduleName: M) {\n if (!LOAD_PROMISES[bundleName]) {\n switch (bundleName) {\n case Bundles.Auth:\n LOAD_PROMISES[Bundles.Auth] = import('../bundles/auth');\n break;\n case Bundles.Main:\n if (DEBUG) {\n // eslint-disable-next-line no-console\n console.log('>>> START LOAD MAIN BUNDLE');\n }\n\n LOAD_PROMISES[Bundles.Main] = import('../bundles/main');\n break;\n case Bundles.Extra:\n LOAD_PROMISES[Bundles.Extra] = import('../bundles/extra');\n break;\n case Bundles.Calls:\n LOAD_PROMISES[Bundles.Calls] = import('../bundles/calls');\n break;\n }\n\n (LOAD_PROMISES[bundleName] as Promise).then(runCallbacks);\n }\n\n const bundle = (await LOAD_PROMISES[bundleName]) as unknown as ImportedBundles[B];\n\n if (!MEMORY_CACHE[bundleName]) {\n MEMORY_CACHE[bundleName] = bundle;\n }\n\n return getModuleFromMemory(bundleName, moduleName);\n}\n\nexport function getModuleFromMemory>(bundleName: B, moduleName: M) {\n const bundle = MEMORY_CACHE[bundleName] as ImportedBundles[B];\n\n if (!bundle) {\n return undefined;\n }\n\n return bundle[moduleName];\n}\n\nexport const addLoadListener = addCallback;\n","import { callApi } from '../api/gramjs';\nimport {\n ApiChat, ApiMediaFormat, ApiMessage, ApiUser, ApiUserReaction,\n} from '../api/types';\nimport { renderActionMessageText } from '../components/common/helpers/renderActionMessageText';\nimport { DEBUG, IS_TEST } from '../config';\nimport { getActions, getGlobal, setGlobal } from '../global';\nimport {\n getChatAvatarHash,\n getChatTitle,\n getMessageAction,\n getMessageRecentReaction,\n getMessageSenderName,\n getMessageSummaryText,\n getPrivateChatUserId,\n isActionMessage,\n isChatChannel,\n selectIsChatMuted,\n selectShouldShowMessagePreview,\n} from '../global/helpers';\nimport { addNotifyExceptions, replaceSettings } from '../global/reducers';\nimport {\n selectChatMessage,\n selectCurrentMessageList,\n selectNotifyExceptions,\n selectNotifySettings,\n selectUser,\n} from '../global/selectors';\nimport { IS_SERVICE_WORKER_SUPPORTED, IS_TOUCH_ENV } from './environment';\nimport { getTranslation } from './langProvider';\nimport * as mediaLoader from './mediaLoader';\nimport { debounce } from './schedulers';\n\nfunction getDeviceToken(subscription: PushSubscription) {\n const data = subscription.toJSON();\n return JSON.stringify({\n endpoint: data.endpoint,\n keys: data.keys,\n });\n}\n\nfunction checkIfPushSupported() {\n if (!IS_SERVICE_WORKER_SUPPORTED) return false;\n if (!('showNotification' in ServiceWorkerRegistration.prototype)) {\n if (DEBUG) {\n // eslint-disable-next-line no-console\n console.warn('[PUSH] Push notifications aren\\'t supported.');\n }\n return false;\n }\n\n // Check the current Notification permission.\n // If its denied, it's a permanent block until the\n // user changes the permission\n if (Notification.permission === 'denied') {\n if (DEBUG) {\n // eslint-disable-next-line no-console\n console.warn('[PUSH] The user has blocked push notifications.');\n }\n return false;\n }\n\n // Check if push messaging is supported\n if (!('PushManager' in window)) {\n if (DEBUG) {\n // eslint-disable-next-line no-console\n console.warn('[PUSH] Push messaging isn\\'t supported.');\n }\n return false;\n }\n return true;\n}\n\nfunction checkIfNotificationsSupported() {\n // Let's check if the browser supports notifications\n if (!('Notification' in window)) {\n if (DEBUG) {\n // eslint-disable-next-line no-console\n console.warn('[PUSH] This browser does not support desktop notification');\n }\n return false;\n }\n\n if (Notification.permission === 'denied' as NotificationPermission) {\n if (DEBUG) {\n // eslint-disable-next-line no-console\n console.warn('[PUSH] The user has blocked push notifications.');\n }\n return false;\n }\n return true;\n}\n\nconst expirationTime = 12 * 60 * 60 * 1000; // 12 hours\n// Notification id is removed from soundPlayed cache after 3 seconds\nconst soundPlayedDelay = 3 * 1000;\nconst soundPlayedIds = new Set();\n\nexport async function playNotifySound(id?: string, volume?: number) {\n if (id !== undefined && soundPlayedIds.has(id)) return;\n const { notificationSoundVolume } = selectNotifySettings(getGlobal());\n const currentVolume = volume ? volume / 10 : notificationSoundVolume / 10;\n if (currentVolume === 0) return;\n\n const audio = new Audio('./notification.mp3');\n audio.volume = currentVolume;\n audio.setAttribute('mozaudiochannel', 'notification');\n if (id !== undefined) {\n audio.addEventListener('ended', () => {\n soundPlayedIds.add(id);\n }, { once: true });\n\n setTimeout(() => {\n soundPlayedIds.delete(id);\n }, soundPlayedDelay);\n }\n\n try {\n await audio.play();\n } catch (error) {\n if (DEBUG) {\n // eslint-disable-next-line no-console\n console.warn('[PUSH] Unable to play notification sound');\n }\n }\n}\n\nexport const playNotifySoundDebounced = debounce(playNotifySound, 1000, true, false);\n\nfunction checkIfShouldResubscribe(subscription: PushSubscription | null) {\n const global = getGlobal();\n if (!global.push || !subscription) return true;\n if (getDeviceToken(subscription) !== global.push.deviceToken) return true;\n return Date.now() - global.push.subscribedAt > expirationTime;\n}\n\nasync function requestPermission() {\n if (!('Notification' in window)) return;\n if (!['granted', 'denied'].includes(Notification.permission)) {\n await Notification.requestPermission();\n }\n}\n\nasync function unsubscribeFromPush(subscription: PushSubscription | null) {\n const global = getGlobal();\n const dispatch = getActions();\n if (subscription) {\n try {\n const deviceToken = getDeviceToken(subscription);\n await callApi('unregisterDevice', deviceToken);\n await subscription.unsubscribe();\n dispatch.deleteDeviceToken();\n return;\n } catch (error) {\n if (DEBUG) {\n // eslint-disable-next-line no-console\n console.log('[PUSH] Unable to unsubscribe from push.', error);\n }\n }\n }\n if (global.push) {\n await callApi('unregisterDevice', global.push.deviceToken);\n dispatch.deleteDeviceToken();\n }\n}\n\nexport async function unsubscribe() {\n if (!checkIfPushSupported()) return;\n const serviceWorkerRegistration = await navigator.serviceWorker.ready;\n const subscription = await serviceWorkerRegistration.pushManager.getSubscription();\n await unsubscribeFromPush(subscription);\n}\n\n// Indicates if notification settings are loaded from the api\nlet areSettingsLoaded = false;\n\n// Load notification settings from the api\nasync function loadNotificationSettings() {\n if (areSettingsLoaded) return selectNotifySettings(getGlobal());\n const [resultSettings, resultExceptions] = await Promise.all([\n callApi('fetchNotificationSettings', {\n serverTimeOffset: getGlobal().serverTimeOffset,\n }),\n callApi('fetchNotificationExceptions', {\n serverTimeOffset: getGlobal().serverTimeOffset,\n }),\n ]);\n if (!resultSettings) return selectNotifySettings(getGlobal());\n\n let global = replaceSettings(getGlobal(), resultSettings);\n if (resultExceptions) {\n global = addNotifyExceptions(global, resultExceptions);\n }\n setGlobal(global);\n areSettingsLoaded = true;\n return selectNotifySettings(global);\n}\n\nexport async function subscribe() {\n if (!checkIfPushSupported()) {\n // Ask for notification permissions only if service worker notifications are not supported\n // As pushManager.subscribe automatically triggers permission popup\n await requestPermission();\n return;\n }\n const serviceWorkerRegistration = await navigator.serviceWorker.ready;\n let subscription = await serviceWorkerRegistration.pushManager.getSubscription();\n if (!checkIfShouldResubscribe(subscription)) return;\n await unsubscribeFromPush(subscription);\n try {\n subscription = await serviceWorkerRegistration.pushManager.subscribe({\n userVisibleOnly: true,\n });\n const deviceToken = getDeviceToken(subscription);\n if (DEBUG) {\n // eslint-disable-next-line no-console\n console.log('[PUSH] Received push subscription: ', deviceToken);\n }\n await callApi('registerDevice', deviceToken);\n getActions()\n .setDeviceToken(deviceToken);\n } catch (error: any) {\n if (Notification.permission === 'denied' as NotificationPermission) {\n // The user denied the notification permission which\n // means we failed to subscribe and the user will need\n // to manually change the notification permission to\n // subscribe to push messages\n if (DEBUG) {\n // eslint-disable-next-line no-console\n console.warn('[PUSH] The user has blocked push notifications.');\n }\n } else if (DEBUG) {\n // A problem occurred with the subscription, this can\n // often be down to an issue or lack of the gcm_sender_id\n // and / or gcm_user_visible_only\n // eslint-disable-next-line no-console\n console.log('[PUSH] Unable to subscribe to push.', error);\n\n // Request permissions and fall back to local notifications\n // if pushManager.subscribe was aborted due to invalid VAPID key.\n if (error.code === DOMException.ABORT_ERR) {\n await requestPermission();\n }\n }\n }\n}\n\nfunction checkIfShouldNotify(chat: ApiChat) {\n if (!areSettingsLoaded) return false;\n const global = getGlobal();\n const isMuted = selectIsChatMuted(chat, selectNotifySettings(global), selectNotifyExceptions(global));\n if (isMuted || chat.isNotJoined || !chat.isListed) {\n return false;\n }\n // On touch devices show notifications when chat is not active\n if (IS_TOUCH_ENV) {\n const {\n chatId,\n type,\n } = selectCurrentMessageList(global) || {};\n return !(chatId === chat.id && type === 'thread');\n }\n // On desktop show notifications when window is not focused\n return !document.hasFocus();\n}\n\nfunction getNotificationContent(chat: ApiChat, message: ApiMessage, reaction?: ApiUserReaction) {\n const global = getGlobal();\n const {\n replyToMessageId,\n } = message;\n let {\n senderId,\n } = message;\n if (reaction) senderId = reaction.userId;\n\n const messageSender = senderId ? selectUser(global, senderId) : undefined;\n const messageAction = getMessageAction(message as ApiMessage);\n const actionTargetMessage = messageAction && replyToMessageId\n ? selectChatMessage(global, chat.id, replyToMessageId)\n : undefined;\n const {\n targetUserIds: actionTargetUserIds,\n targetChatId: actionTargetChatId,\n } = messageAction || {};\n\n const actionTargetUsers = actionTargetUserIds\n ? actionTargetUserIds.map((userId) => selectUser(global, userId))\n .filter(Boolean as any)\n : undefined;\n const privateChatUserId = getPrivateChatUserId(chat);\n const privateChatUser = privateChatUserId ? selectUser(global, privateChatUserId) : undefined;\n\n let body: string;\n if (selectShouldShowMessagePreview(chat, selectNotifySettings(global), selectNotifyExceptions(global))) {\n if (isActionMessage(message)) {\n const isChat = chat && (isChatChannel(chat) || message.senderId === message.chatId);\n\n body = renderActionMessageText(\n getTranslation,\n message,\n !isChat ? messageSender : undefined,\n isChat ? chat : undefined,\n actionTargetUsers,\n actionTargetMessage,\n actionTargetChatId,\n { asPlainText: true },\n ) as string;\n } else {\n const senderName = getMessageSenderName(getTranslation, chat.id, messageSender);\n const summary = getMessageSummaryText(getTranslation, message, false, 60, false);\n\n body = senderName ? `${senderName}: ${summary}` : summary;\n }\n } else {\n body = 'New message';\n }\n\n return {\n title: getChatTitle(getTranslation, chat, privateChatUser),\n body,\n };\n}\n\nasync function getAvatar(chat: ApiChat) {\n const imageHash = getChatAvatarHash(chat);\n if (!imageHash) return undefined;\n let mediaData = mediaLoader.getFromMemory(imageHash);\n if (!mediaData) {\n await mediaLoader.fetch(imageHash, ApiMediaFormat.BlobUrl);\n mediaData = mediaLoader.getFromMemory(imageHash);\n }\n return mediaData;\n}\n\nexport async function notifyAboutMessage({\n chat,\n message,\n isReaction = false,\n}: { chat: ApiChat; message: Partial; isReaction?: boolean }) {\n const { hasWebNotifications } = await loadNotificationSettings();\n if (!checkIfShouldNotify(chat)) return;\n const areNotificationsSupported = checkIfNotificationsSupported();\n if (!hasWebNotifications || !areNotificationsSupported) {\n // Do not play notification sound for reactions if web notifications are disabled\n if (isReaction) return;\n // Only play sound if web notifications are disabled\n playNotifySoundDebounced(String(message.id) || chat.id);\n return;\n }\n if (!areNotificationsSupported) return;\n\n if (!message.id) return;\n\n const activeReaction = getMessageRecentReaction(message);\n const icon = await getAvatar(chat);\n\n const {\n title,\n body,\n } = getNotificationContent(chat, message as ApiMessage, activeReaction);\n\n if (checkIfPushSupported()) {\n if (navigator.serviceWorker?.controller) {\n // notify service worker about new message notification\n navigator.serviceWorker.controller.postMessage({\n type: 'showMessageNotification',\n payload: {\n title,\n body,\n icon,\n chatId: chat.id,\n messageId: message.id,\n reaction: activeReaction?.reaction,\n },\n });\n }\n } else {\n const dispatch = getActions();\n const options: NotificationOptions = {\n body,\n icon,\n badge: icon,\n tag: String(message.id),\n };\n\n if ('vibrate' in navigator) {\n options.vibrate = [200, 100, 200];\n }\n\n const notification = new Notification(title, options);\n\n notification.onclick = () => {\n notification.close();\n dispatch.focusMessage({\n chatId: chat.id,\n messageId: message.id,\n });\n if (activeReaction) {\n dispatch.startActiveReaction({\n messageId: message.id,\n reaction: activeReaction.reaction,\n });\n }\n if (window.focus) {\n window.focus();\n }\n };\n\n // Play sound when notification is displayed\n notification.onshow = () => {\n playNotifySoundDebounced(String(message.id) || chat.id);\n };\n }\n}\n\nexport function closeMessageNotifications(payload: { chatId: string; lastReadInboxMessageId?: number }) {\n if (IS_TEST || !navigator.serviceWorker?.controller) return;\n navigator.serviceWorker.controller.postMessage({\n type: 'closeMessageNotifications',\n payload,\n });\n}\n\n// Notify service worker that client is fully loaded\nexport function notifyClientReady() {\n if (!navigator.serviceWorker?.controller) return;\n navigator.serviceWorker.controller.postMessage({\n type: 'clientReady',\n });\n}\n","const PERMANENT_VERSION_KEY = 'kz_version';\nconst AVAILABLE_VERSIONS = ['Z', 'K'] as const;\nconst DEFAULT_VERSION = 'Z';\n\nexport function setPermanentWebVersion(version: typeof AVAILABLE_VERSIONS[number]) {\n localStorage.setItem(PERMANENT_VERSION_KEY, JSON.stringify(version));\n}\n\nexport function ensurePermanentWebVersion() {\n if (!hasPermanentWebVersion()) {\n setPermanentWebVersion(DEFAULT_VERSION);\n }\n}\n\nfunction hasPermanentWebVersion() {\n const json = localStorage.getItem(PERMANENT_VERSION_KEY);\n if (!json) {\n return false;\n }\n\n try {\n const version = JSON.parse(json);\n return AVAILABLE_VERSIONS.includes(version);\n } catch (err) {\n return false;\n }\n}\n","import { ApiCountryCode } from '../api/types';\nimport { flatten } from './iteratees';\n\nconst PATTERN_PLACEHOLDER = 'X';\nconst DEFAULT_PATTERN = 'XXX XXX XXX XXX';\n\nexport function getCountryCodesByIso(phoneCodeList: ApiCountryCode[], iso: string) {\n return phoneCodeList.filter((country) => country.iso2 === iso);\n}\n\nexport function getCountryFromPhoneNumber(phoneCodeList: ApiCountryCode[], input = '') {\n let phoneNumber = input.replace(/[^\\d+]+/g, '');\n if (phoneNumber.startsWith('+')) {\n phoneNumber = phoneNumber.substr(1);\n }\n\n const possibleCountries = phoneCodeList\n .filter((country) => phoneNumber.startsWith(country.countryCode));\n const codesWithPrefix: { code: string; country: ApiCountryCode }[] = flatten(possibleCountries\n .map((country) => (country.prefixes || ['']).map((prefix) => {\n return {\n code: `${country.countryCode}${prefix}`,\n country,\n };\n })));\n\n const bestMatches = codesWithPrefix\n .filter(({ code }) => phoneNumber.startsWith(code))\n .sort((a, b) => a.code.length - b.code.length);\n\n return bestMatches[bestMatches.length - 1]?.country;\n}\n\nexport function formatPhoneNumber(input: string, country?: ApiCountryCode) {\n let phoneNumber = input.replace(/[^\\d]+/g, '');\n if (country) {\n phoneNumber = phoneNumber.substr(country.countryCode.length);\n } else if (input.startsWith('+')) {\n return input;\n }\n const pattern = getBestPattern(phoneNumber, country?.patterns);\n\n const result: string[] = []; // Result character array\n let j = 0; // Position inside pattern\n for (let i = 0; i < phoneNumber.length; i++) {\n while (pattern[j] !== PATTERN_PLACEHOLDER && j < pattern.length) {\n result.push(pattern[j]);\n if (pattern[j] === phoneNumber[i]) { // If pattern contains digits, move input position too\n i++;\n if (i === phoneNumber.length) break; // But don't overdo it, or it will insert full pattern unexpectedly\n }\n j++;\n }\n\n result.push(phoneNumber[i]); // For placeholder characters, setting current input digit\n j++;\n }\n\n return result.join('');\n}\n\nfunction getBestPattern(numberWithoutCode: string, patterns?: string[]) {\n if (!patterns || patterns.length === 0) return DEFAULT_PATTERN;\n if (patterns.length === 1) return patterns[0];\n\n const defaultPattern = patterns.find((pattern) => pattern.startsWith(PATTERN_PLACEHOLDER)) || DEFAULT_PATTERN;\n\n const bestMatches = patterns.filter((pattern) => {\n const stripped = pattern.replace(/[^\\dX]+/g, '');\n if (stripped.startsWith(PATTERN_PLACEHOLDER)) return false; // Don't consider default number format here\n for (let i = 0; i < numberWithoutCode.length; i++) {\n if (i > stripped.length - 1 || (stripped[i] !== PATTERN_PLACEHOLDER && stripped[i] !== numberWithoutCode[i])) {\n return false;\n }\n }\n return true;\n });\n\n // Playing it safe: if not sure, use default for that region\n return bestMatches.length === 1 ? bestMatches[0] : defaultPattern;\n}\n\nexport function formatPhoneNumberWithCode(phoneCodeList: ApiCountryCode[], phoneNumber: string) {\n const numberWithPlus = phoneNumber.startsWith('+') ? phoneNumber : `+${phoneNumber}`;\n const country = getCountryFromPhoneNumber(phoneCodeList, numberWithPlus);\n if (!country) {\n return numberWithPlus;\n }\n return `+${country.countryCode} ${formatPhoneNumber(numberWithPlus, country)}`;\n}\n","import { MessageList, MessageListType } from '../global/types';\nimport { MAIN_THREAD_ID } from '../api/types';\n\nimport { LOCATION_HASH } from '../hooks/useHistoryBack';\n\nexport function createMessageHash(messageList: MessageList) {\n const typeOrThreadId = messageList.type !== 'thread' ? (\n `_${messageList.type}`\n ) : messageList.threadId !== -1 ? (\n `_${messageList.threadId}`\n ) : '';\n\n return `${messageList.chatId}${typeOrThreadId}`;\n}\n\nexport function parseLocationHash() {\n if (!LOCATION_HASH) return undefined;\n\n const [chatId, typeOrThreadId] = LOCATION_HASH.replace(/^#/, '').split('_');\n if (!chatId?.match(/^-?\\d+$/)) return undefined;\n\n const isType = ['thread', 'pinned', 'scheduled'].includes(typeOrThreadId);\n\n return {\n chatId,\n type: Boolean(typeOrThreadId) && isType ? (typeOrThreadId as MessageListType) : 'thread',\n threadId: Boolean(typeOrThreadId) && !isType ? Number(typeOrThreadId) : MAIN_THREAD_ID,\n };\n}\n","type Scheduler =\n typeof requestAnimationFrame\n | typeof onTickEnd\n | typeof runNow;\n\nexport function debounce(\n fn: F,\n ms: number,\n shouldRunFirst = true,\n shouldRunLast = true,\n) {\n let waitingTimeout: number | undefined;\n\n return (...args: Parameters) => {\n if (waitingTimeout) {\n clearTimeout(waitingTimeout);\n waitingTimeout = undefined;\n } else if (shouldRunFirst) {\n fn(...args);\n }\n\n // eslint-disable-next-line no-restricted-globals\n waitingTimeout = self.setTimeout(() => {\n if (shouldRunLast) {\n fn(...args);\n }\n\n waitingTimeout = undefined;\n }, ms);\n };\n}\n\nexport function throttle(\n fn: F,\n ms: number,\n shouldRunFirst = true,\n) {\n let interval: number | undefined;\n let isPending: boolean;\n let args: Parameters;\n\n return (..._args: Parameters) => {\n isPending = true;\n args = _args;\n\n if (!interval) {\n if (shouldRunFirst) {\n isPending = false;\n fn(...args);\n }\n\n // eslint-disable-next-line no-restricted-globals\n interval = self.setInterval(() => {\n if (!isPending) {\n // eslint-disable-next-line no-restricted-globals\n self.clearInterval(interval!);\n interval = undefined;\n return;\n }\n\n isPending = false;\n fn(...args);\n }, ms);\n }\n };\n}\n\nexport function throttleWithRaf(fn: F) {\n return throttleWith(fastRaf, fn);\n}\n\nexport function throttleWithPrimaryRaf(fn: F) {\n return throttleWith(fastRafPrimary, fn);\n}\n\nexport function throttleWithTickEnd(fn: F) {\n return throttleWith(onTickEnd, fn);\n}\n\nexport function throttleWithNow(fn: F) {\n return throttleWith(runNow, fn);\n}\n\nexport function throttleWith(schedulerFn: Scheduler, fn: F) {\n let waiting = false;\n let args: Parameters;\n\n return (..._args: Parameters) => {\n args = _args;\n\n if (!waiting) {\n waiting = true;\n\n schedulerFn(() => {\n waiting = false;\n fn(...args);\n });\n }\n };\n}\n\nexport function onIdle(cb: NoneToVoidFunction, timeout?: number) {\n // eslint-disable-next-line no-restricted-globals\n if (self.requestIdleCallback) {\n // eslint-disable-next-line no-restricted-globals\n self.requestIdleCallback(cb, { timeout });\n } else {\n onTickEnd(cb);\n }\n}\n\nfunction runNow(fn: NoneToVoidFunction) {\n fn();\n}\n\nexport const pause = (ms: number) => new Promise((resolve) => {\n setTimeout(() => resolve(), ms);\n});\n\nexport function rafPromise() {\n return new Promise((resolve) => {\n fastRaf(resolve);\n });\n}\n\nlet fastRafCallbacks: NoneToVoidFunction[] | undefined;\nlet fastRafPrimaryCallbacks: NoneToVoidFunction[] | undefined;\n\n// May result in an immediate execution if called from another `requestAnimationFrame` callback\nexport function fastRaf(callback: NoneToVoidFunction, isPrimary = false) {\n if (!fastRafCallbacks) {\n fastRafCallbacks = isPrimary ? [] : [callback];\n fastRafPrimaryCallbacks = isPrimary ? [callback] : [];\n\n requestAnimationFrame(() => {\n const currentCallbacks = fastRafCallbacks!;\n const currentPrimaryCallbacks = fastRafPrimaryCallbacks!;\n fastRafCallbacks = undefined;\n fastRafPrimaryCallbacks = undefined;\n currentPrimaryCallbacks.forEach((cb) => cb());\n currentCallbacks.forEach((cb) => cb());\n });\n } else if (isPrimary) {\n fastRafPrimaryCallbacks!.push(callback);\n } else {\n fastRafCallbacks.push(callback);\n }\n}\n\nexport function fastRafPrimary(callback: NoneToVoidFunction) {\n fastRaf(callback, true);\n}\n\nlet onTickEndCallbacks: NoneToVoidFunction[] | undefined;\nlet onTickEndPrimaryCallbacks: NoneToVoidFunction[] | undefined;\n\nexport function onTickEnd(callback: NoneToVoidFunction, isPrimary = false) {\n if (!onTickEndCallbacks) {\n onTickEndCallbacks = isPrimary ? [] : [callback];\n onTickEndPrimaryCallbacks = isPrimary ? [callback] : [];\n\n Promise.resolve().then(() => {\n const currentCallbacks = onTickEndCallbacks!;\n const currentPrimaryCallbacks = onTickEndPrimaryCallbacks!;\n onTickEndCallbacks = undefined;\n onTickEndPrimaryCallbacks = undefined;\n currentPrimaryCallbacks.forEach((cb) => cb());\n currentCallbacks.forEach((cb) => cb());\n });\n } else if (isPrimary) {\n onTickEndPrimaryCallbacks!.push(callback);\n } else {\n onTickEndCallbacks.push(callback);\n }\n}\n\nexport function onTickEndPrimary(callback: NoneToVoidFunction) {\n onTickEnd(callback, true);\n}\n\nlet beforeUnloadCallbacks: NoneToVoidFunction[] | undefined;\n\nexport function onBeforeUnload(callback: NoneToVoidFunction, isLast = false) {\n if (!beforeUnloadCallbacks) {\n beforeUnloadCallbacks = [];\n // eslint-disable-next-line no-restricted-globals\n self.addEventListener('beforeunload', () => {\n beforeUnloadCallbacks!.forEach((cb) => cb());\n });\n }\n\n if (isLast) {\n beforeUnloadCallbacks.push(callback);\n } else {\n beforeUnloadCallbacks.unshift(callback);\n }\n\n return () => {\n beforeUnloadCallbacks = beforeUnloadCallbacks!.filter((cb) => cb !== callback);\n };\n}\n","let RE_NOT_LETTER: RegExp;\n\ntry {\n RE_NOT_LETTER = /[^\\p{L}\\p{M}]+/ui;\n} catch (e) {\n // Support for older versions of firefox\n RE_NOT_LETTER = /[^\\wа-яё]+/i;\n}\n\nexport default function searchWords(haystack: string, needle: string | string[]) {\n if (!haystack || !needle) {\n return false;\n }\n\n const needleWords = typeof needle === 'string' ? needle.toLowerCase().split(RE_NOT_LETTER) : needle;\n const haystackLower = haystack.toLowerCase();\n\n // @optimization\n if (needleWords.length === 1 && !haystackLower.includes(needleWords[0])) {\n return false;\n }\n\n let haystackWords: string[];\n\n return needleWords.every((needleWord) => {\n if (!haystackLower.includes(needleWord)) {\n return false;\n }\n\n if (!haystackWords) {\n haystackWords = haystackLower.split(RE_NOT_LETTER);\n }\n\n return haystackWords.some((haystackWord) => haystackWord.startsWith(needleWord));\n });\n}\n\nexport function prepareSearchWordsForNeedle(needle: string) {\n const needleWords = needle.toLowerCase().split(RE_NOT_LETTER);\n\n return (haystack: string) => searchWords(haystack, needleWords);\n}\n","export const getServerTime = (serverTimeOffset: number) => {\n return Math.floor(Date.now() / 1000) + serverTimeOffset;\n};\n","import safariFix from 'safari-14-idb-fix';\n\nfunction promisifyRequest(request) {\n return new Promise((resolve, reject) => {\n // @ts-ignore - file size hacks\n request.oncomplete = request.onsuccess = () => resolve(request.result);\n // @ts-ignore - file size hacks\n request.onabort = request.onerror = () => reject(request.error);\n });\n}\nfunction createStore(dbName, storeName) {\n const dbp = safariFix().then(() => {\n const request = indexedDB.open(dbName);\n request.onupgradeneeded = () => request.result.createObjectStore(storeName);\n return promisifyRequest(request);\n });\n return (txMode, callback) => dbp.then((db) => callback(db.transaction(storeName, txMode).objectStore(storeName)));\n}\nlet defaultGetStoreFunc;\nfunction defaultGetStore() {\n if (!defaultGetStoreFunc) {\n defaultGetStoreFunc = createStore('keyval-store', 'keyval');\n }\n return defaultGetStoreFunc;\n}\n/**\n * Get a value by its key.\n *\n * @param key\n * @param customStore Method to get a custom store. Use with caution (see the docs).\n */\nfunction get(key, customStore = defaultGetStore()) {\n return customStore('readonly', (store) => promisifyRequest(store.get(key)));\n}\n/**\n * Set a value with a key.\n *\n * @param key\n * @param value\n * @param customStore Method to get a custom store. Use with caution (see the docs).\n */\nfunction set(key, value, customStore = defaultGetStore()) {\n return customStore('readwrite', (store) => {\n store.put(value, key);\n return promisifyRequest(store.transaction);\n });\n}\n/**\n * Set multiple values at once. This is faster than calling set() multiple times.\n * It's also atomic – if one of the pairs can't be added, none will be added.\n *\n * @param entries Array of entries, where each entry is an array of `[key, value]`.\n * @param customStore Method to get a custom store. Use with caution (see the docs).\n */\nfunction setMany(entries, customStore = defaultGetStore()) {\n return customStore('readwrite', (store) => {\n entries.forEach((entry) => store.put(entry[1], entry[0]));\n return promisifyRequest(store.transaction);\n });\n}\n/**\n * Get multiple values by their keys\n *\n * @param keys\n * @param customStore Method to get a custom store. Use with caution (see the docs).\n */\nfunction getMany(keys, customStore = defaultGetStore()) {\n return customStore('readonly', (store) => Promise.all(keys.map((key) => promisifyRequest(store.get(key)))));\n}\n/**\n * Update a value. This lets you see the old value and update it as an atomic operation.\n *\n * @param key\n * @param updater A callback that takes the old value and returns a new value.\n * @param customStore Method to get a custom store. Use with caution (see the docs).\n */\nfunction update(key, updater, customStore = defaultGetStore()) {\n return customStore('readwrite', (store) => \n // Need to create the promise manually.\n // If I try to chain promises, the transaction closes in browsers\n // that use a promise polyfill (IE10/11).\n new Promise((resolve, reject) => {\n store.get(key).onsuccess = function () {\n try {\n store.put(updater(this.result), key);\n resolve(promisifyRequest(store.transaction));\n }\n catch (err) {\n reject(err);\n }\n };\n }));\n}\n/**\n * Delete a particular key from the store.\n *\n * @param key\n * @param customStore Method to get a custom store. Use with caution (see the docs).\n */\nfunction del(key, customStore = defaultGetStore()) {\n return customStore('readwrite', (store) => {\n store.delete(key);\n return promisifyRequest(store.transaction);\n });\n}\n/**\n * Delete multiple keys at once.\n *\n * @param keys List of keys to delete.\n * @param customStore Method to get a custom store. Use with caution (see the docs).\n */\nfunction delMany(keys, customStore = defaultGetStore()) {\n return customStore('readwrite', (store) => {\n keys.forEach((key) => store.delete(key));\n return promisifyRequest(store.transaction);\n });\n}\n/**\n * Clear all values in the store.\n *\n * @param customStore Method to get a custom store. Use with caution (see the docs).\n */\nfunction clear(customStore = defaultGetStore()) {\n return customStore('readwrite', (store) => {\n store.clear();\n return promisifyRequest(store.transaction);\n });\n}\nfunction eachCursor(store, callback) {\n store.openCursor().onsuccess = function () {\n if (!this.result)\n return;\n callback(this.result);\n this.result.continue();\n };\n return promisifyRequest(store.transaction);\n}\n/**\n * Get all keys in the store.\n *\n * @param customStore Method to get a custom store. Use with caution (see the docs).\n */\nfunction keys(customStore = defaultGetStore()) {\n return customStore('readonly', (store) => {\n // Fast path for modern browsers\n if (store.getAllKeys) {\n return promisifyRequest(store.getAllKeys());\n }\n const items = [];\n return eachCursor(store, (cursor) => items.push(cursor.key)).then(() => items);\n });\n}\n/**\n * Get all values in the store.\n *\n * @param customStore Method to get a custom store. Use with caution (see the docs).\n */\nfunction values(customStore = defaultGetStore()) {\n return customStore('readonly', (store) => {\n // Fast path for modern browsers\n if (store.getAll) {\n return promisifyRequest(store.getAll());\n }\n const items = [];\n return eachCursor(store, (cursor) => items.push(cursor.value)).then(() => items);\n });\n}\n/**\n * Get all entries in the store. Each entry is an array of `[key, value]`.\n *\n * @param customStore Method to get a custom store. Use with caution (see the docs).\n */\nfunction entries(customStore = defaultGetStore()) {\n return customStore('readonly', (store) => {\n // Fast path for modern browsers\n // (although, hopefully we'll get a simpler path some day)\n if (store.getAll && store.getAllKeys) {\n return Promise.all([\n promisifyRequest(store.getAllKeys()),\n promisifyRequest(store.getAll()),\n ]).then(([keys, values]) => keys.map((key, i) => [key, values[i]]));\n }\n const items = [];\n return customStore('readonly', (store) => eachCursor(store, (cursor) => items.push([cursor.key, cursor.value])).then(() => items));\n });\n}\n\nexport { clear, createStore, del, delMany, entries, get, getMany, keys, promisifyRequest, set, setMany, update, values };\n","/**\n * Work around Safari 14 IndexedDB open bug.\n *\n * Safari has a horrible bug where IDB requests can hang while the browser is starting up. https://bugs.webkit.org/show_bug.cgi?id=226547\n * The only solution is to keep nudging it until it's awake.\n */\nfunction idbReady() {\n var isSafari = !navigator.userAgentData &&\n /Safari\\//.test(navigator.userAgent) &&\n !/Chrom(e|ium)\\//.test(navigator.userAgent);\n // No point putting other browsers or older versions of Safari through this mess.\n if (!isSafari || !indexedDB.databases)\n return Promise.resolve();\n var intervalId;\n return new Promise(function (resolve) {\n var tryIdb = function () { return indexedDB.databases().finally(resolve); };\n intervalId = setInterval(tryIdb, 100);\n tryIdb();\n }).finally(function () { return clearInterval(intervalId); });\n}\n\nexport default idbReady;\n","import * as idb from 'idb-keyval';\n\nimport { ApiSessionData } from '../api/types';\n\nimport { DEBUG, LEGACY_SESSION_KEY, SESSION_USER_KEY } from '../config';\nimport * as cacheApi from './cacheApi';\n\nconst DC_IDS = [1, 2, 3, 4, 5];\n\nexport function hasStoredSession(withLegacy = false) {\n if (withLegacy && localStorage.getItem(LEGACY_SESSION_KEY)) {\n return true;\n }\n\n const userAuthJson = localStorage.getItem(SESSION_USER_KEY);\n if (!userAuthJson) return false;\n\n try {\n const userAuth = JSON.parse(userAuthJson);\n return Boolean(userAuth && userAuth.id && userAuth.dcID);\n } catch (err) {\n // Do nothing.\n return false;\n }\n}\n\nexport function storeSession(sessionData: ApiSessionData, currentUserId?: string) {\n const { mainDcId, keys, hashes } = sessionData;\n\n localStorage.setItem(SESSION_USER_KEY, JSON.stringify({ dcID: mainDcId, id: currentUserId }));\n localStorage.setItem('dc', String(mainDcId));\n Object.keys(keys).map(Number).forEach((dcId) => {\n localStorage.setItem(`dc${dcId}_auth_key`, JSON.stringify(keys[dcId]));\n });\n\n if (hashes) {\n Object.keys(hashes).map(Number).forEach((dcId) => {\n localStorage.setItem(`dc${dcId}_hash`, JSON.stringify(hashes[dcId]));\n });\n }\n}\n\nexport function clearStoredSession() {\n [\n SESSION_USER_KEY,\n 'dc',\n ...DC_IDS.map((dcId) => `dc${dcId}_auth_key`),\n ...DC_IDS.map((dcId) => `dc${dcId}_hash`),\n ].forEach((key) => {\n localStorage.removeItem(key);\n });\n}\n\nexport function loadStoredSession(): ApiSessionData | undefined {\n if (!hasStoredSession()) {\n return undefined;\n }\n\n const userAuth = JSON.parse(localStorage.getItem(SESSION_USER_KEY)!);\n const mainDcId = Number(userAuth.dcID);\n const keys: Record = {};\n const hashes: Record = {};\n\n DC_IDS.forEach((dcId) => {\n try {\n const key = localStorage.getItem(`dc${dcId}_auth_key`);\n if (key) {\n keys[dcId] = JSON.parse(key);\n }\n\n const hash = localStorage.getItem(`dc${dcId}_hash`);\n if (hash) {\n hashes[dcId] = JSON.parse(hash);\n }\n } catch (err) {\n if (DEBUG) {\n // eslint-disable-next-line no-console\n console.warn('Failed to load stored session', err);\n }\n // Do nothing.\n }\n });\n\n if (!Object.keys(keys).length) return undefined;\n\n return {\n mainDcId,\n keys,\n hashes,\n };\n}\n\nexport async function importLegacySession() {\n const sessionId = localStorage.getItem(LEGACY_SESSION_KEY);\n if (!sessionId) return;\n\n const sessionJson = await idb.get(`GramJs:${sessionId}`);\n try {\n const sessionData = JSON.parse(sessionJson) as ApiSessionData;\n storeSession(sessionData);\n } catch (err) {\n if (DEBUG) {\n // eslint-disable-next-line no-console\n console.warn('Failed to load legacy session', err);\n }\n // Do nothing.\n }\n}\n\n// Remove previously created IndexedDB and cache API sessions\nexport async function clearLegacySessions() {\n localStorage.removeItem(LEGACY_SESSION_KEY);\n\n const idbKeys = await idb.keys();\n\n await Promise.all>([\n cacheApi.clear('GramJs'),\n ...idbKeys\n .filter((k) => typeof k === 'string' && k.startsWith('GramJs:GramJs-session-'))\n .map((k) => idb.del(k)),\n ]);\n}\n\nexport function importTestSession() {\n const sessionJson = process.env.TEST_SESSION!;\n try {\n const sessionData = JSON.parse(sessionJson) as ApiSessionData & { userId: string };\n storeSession(sessionData, sessionData.userId);\n } catch (err) {\n if (DEBUG) {\n // eslint-disable-next-line no-console\n console.warn('Failed to load test session', err);\n }\n // Do nothing.\n }\n}\n","import { ISettings } from '../types';\n\nimport { animateSingle } from './animation';\nimport { fastRaf } from './schedulers';\n\nimport themeColors from '../styles/themes.json';\n\ntype RGBAColor = {\n r: number;\n g: number;\n b: number;\n a?: number;\n};\n\nlet isInitialized = false;\n\nconst HEX_COLOR_REGEX = /^#?([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})?$/i;\nconst DURATION_MS = 200;\nconst ENABLE_ANIMATION_DELAY_MS = 500;\nconst RGB_VARIABLES = new Set([\n '--color-primary-shade',\n '--color-text-secondary',\n]);\n\nconst lerp = (start: number, end: number, interpolationRatio: number) => {\n return (1 - interpolationRatio) * start + interpolationRatio * end;\n};\n\nconst colors = (Object.keys(themeColors) as Array).map((property) => ({\n property,\n colors: [hexToRgb(themeColors[property][0]), hexToRgb(themeColors[property][1])],\n}));\n\nconst switchTheme = (theme: ISettings['theme'], withAnimation: boolean) => {\n const isDarkTheme = theme === 'dark';\n const shouldAnimate = isInitialized && withAnimation;\n const startIndex = isDarkTheme ? 0 : 1;\n const endIndex = isDarkTheme ? 1 : 0;\n const startAt = Date.now();\n const themeColorTag = document.querySelector('meta[name=\"theme-color\"]');\n\n document.documentElement.classList.remove(`theme-${isDarkTheme ? 'light' : 'dark'}`);\n if (isInitialized) {\n document.documentElement.classList.add('no-animations');\n }\n document.documentElement.classList.add(`theme-${theme}`);\n if (themeColorTag) {\n themeColorTag.setAttribute('content', isDarkTheme ? '#212121' : '#fff');\n }\n\n setTimeout(() => {\n document.documentElement.classList.remove('no-animations');\n }, ENABLE_ANIMATION_DELAY_MS);\n\n isInitialized = true;\n\n if (shouldAnimate) {\n fastRaf(() => {\n animateSingle(() => {\n const t = Math.min((Date.now() - startAt) / DURATION_MS, 1);\n\n applyColorAnimationStep(startIndex, endIndex, transition(t));\n\n return t < 1;\n });\n });\n } else {\n applyColorAnimationStep(startIndex, endIndex);\n }\n};\n\nfunction transition(t: number) {\n return 1 - ((1 - t) ** 3.5);\n}\n\nfunction hexToRgb(hex: string): RGBAColor {\n const result = HEX_COLOR_REGEX.exec(hex)!;\n\n return {\n r: parseInt(result[1], 16),\n g: parseInt(result[2], 16),\n b: parseInt(result[3], 16),\n a: result[4] !== undefined ? parseInt(result[4], 16) : undefined,\n };\n}\n\nfunction applyColorAnimationStep(startIndex: number, endIndex: number, interpolationRatio: number = 1) {\n colors.forEach(({ property, colors: propertyColors }) => {\n const r = Math.round(lerp(propertyColors[startIndex].r, propertyColors[endIndex].r, interpolationRatio));\n const g = Math.round(lerp(propertyColors[startIndex].g, propertyColors[endIndex].g, interpolationRatio));\n const b = Math.round(lerp(propertyColors[startIndex].b, propertyColors[endIndex].b, interpolationRatio));\n const a = propertyColors[startIndex].a !== undefined\n ? Math.round(lerp(propertyColors[startIndex].a!, propertyColors[endIndex].a!, interpolationRatio))\n : undefined;\n\n document.documentElement.style.setProperty(property, a !== undefined\n ? `rgba(${r},${g},${b},${a / 255})`\n : `rgb(${r},${g},${b})`);\n\n if (RGB_VARIABLES.has(property)) {\n document.documentElement.style.setProperty(`${property}-rgb`, `${r},${g},${b}`);\n }\n });\n}\n\nexport default switchTheme;\n","import EMOJI_REGEX from '../lib/twemojiRegex';\nimport { fixNonStandardEmoji } from './emoji';\nimport withCache from './withCache';\n\nexport function formatInteger(value: number) {\n return String(value).replace(/\\d(?=(\\d{3})+$)/g, '$& ');\n}\n\nfunction formatFixedNumber(number: number) {\n const fixed = String(number.toFixed(1));\n if (fixed.substr(-2) === '.0') {\n return Math.round(number);\n }\n\n return number.toFixed(1).replace('.', ',');\n}\n\nexport function formatIntegerCompact(views: number) {\n if (views < 1e3) {\n return views;\n }\n\n if (views < 1e6) {\n return `${formatFixedNumber(views / 1e3)}K`;\n }\n\n return `${formatFixedNumber(views / 1e6)}M`;\n}\n\nexport const getFirstLetters = withCache((phrase: string, count = 2) => {\n return phrase\n .replace(/[.,!@#$%^&*()_+=\\-`~[\\]/\\\\{}:\"|<>?]+/gi, '')\n .trim()\n .split(/\\s+/)\n .slice(0, count)\n .map((word: string) => {\n if (!word.length) return '';\n word = fixNonStandardEmoji(word);\n const emojis = word.match(EMOJI_REGEX);\n if (emojis && word.startsWith(emojis[0])) {\n return emojis[0];\n }\n return word.match(/./u)![0].toUpperCase();\n })\n .join('');\n});\n","export default function trimText(text: T, length?: number) {\n if (!text || !length || text.length <= length) {\n return text;\n }\n\n return `${text.substring(0, length)}...`;\n}\n","import { isWebpSupported } from './environment';\nimport { dataUriToBlob, blobToDataUri } from './files';\nimport { pause } from './schedulers';\n\nconst WORKER_INITIALIZATION_TIMEOUT = 2000;\n\nlet canvas: HTMLCanvasElement;\nlet worker: IWebpWorker;\n\nexport const EMPTY_IMAGE_DATA_URI = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR42mNk'\n + 'YAAAAAYAAjCB0C8AAAAASUVORK5CYII=';\n\nexport async function webpToPng(url: string, blob: Blob): Promise {\n initWebpWorker();\n\n while (!worker.wasmReady) {\n await pause(WORKER_INITIALIZATION_TIMEOUT);\n }\n\n const { result, width, height } = await getDecodePromise(url, blob);\n if (!width || !height) {\n return undefined;\n }\n\n return createPng({ result, width, height });\n}\n\nexport async function webpToPngBase64(key: string, dataUri: string): Promise {\n if (isWebpSupported() || dataUri.substr(0, 15) !== 'data:image/webp') {\n return dataUri;\n }\n\n initWebpWorker();\n\n const pngBlob = await webpToPng(key, dataUriToBlob(dataUri));\n\n if (!pngBlob) {\n throw new Error(`Can't convert webp to png. Url: ${dataUri}`);\n }\n\n return blobToDataUri(pngBlob);\n}\n\nfunction initWebpWorker() {\n if (!worker) {\n worker = new Worker(new URL('../lib/webp/webp_wasm.worker.js', import.meta.url)) as IWebpWorker;\n worker.wasmReady = false;\n worker.onmessage = handleLibWebpMessage;\n }\n}\n\nfunction createPng({ result, width, height }: TEncodedImage): Promise {\n if (!canvas) {\n canvas = document.createElement('canvas');\n }\n\n return new Promise((resolve) => {\n const img = new ImageData(result, width, height);\n\n canvas.width = width;\n canvas.height = height;\n const ctx = canvas.getContext('2d')!;\n ctx.putImageData(img, 0, 0);\n\n canvas.toBlob((blob) => {\n resolve(blob ?? undefined);\n }, 'image/png', 1);\n });\n}\n\nfunction handleLibWebpMessage(e: MessageEvent) {\n const { id } = e.data;\n switch (e.data.type) {\n case 'initialized': {\n worker.wasmReady = true;\n break;\n }\n\n case 'result': {\n if (worker.requests.has(id)) {\n const resolve = worker.requests.get(id)!;\n\n worker.requests.delete(id);\n resolve(e.data!);\n }\n break;\n }\n }\n}\n\nfunction getDecodePromise(url: string, blob: Blob): Promise {\n return new Promise((resolve) => {\n if (!worker.requests) {\n worker.requests = new Map();\n }\n\n worker.requests.set(url, resolve);\n worker.postMessage({ id: url, blob });\n });\n}\n","import { APP_VERSION, DEBUG } from '../config';\nimport { getGlobal } from '../global';\nimport { hasStoredSession } from './sessions';\n\nconst WEBSYNC_URLS = [\n 't.me',\n 'telegram.me',\n].map((domain) => `//${domain}/_websync_?`);\nconst WEBSYNC_VERSION = `${APP_VERSION} Z`;\nconst WEBSYNC_KEY = 'tgme_sync';\nconst WEBSYNC_TIMEOUT = 86400;\n\nconst getTs = () => {\n return Math.floor(Number(new Date()) / 1000);\n};\n\nconst saveSync = (authed: boolean) => {\n const ts = getTs();\n localStorage.setItem(WEBSYNC_KEY, JSON.stringify({\n canRedirect: authed,\n ts,\n }));\n};\n\nlet lastTimeout: NodeJS.Timeout | undefined;\n\nexport const forceWebsync = (authed: boolean) => {\n const currentTs = getTs();\n\n const { canRedirect, ts } = JSON.parse(localStorage.getItem(WEBSYNC_KEY) || '{}');\n\n if (canRedirect !== authed || ts + WEBSYNC_TIMEOUT <= currentTs) {\n return Promise.all(WEBSYNC_URLS.map((url) => {\n return new Promise((resolve, reject) => {\n const script = document.createElement('script');\n\n const removeElement = () => Boolean(document.body.removeChild(script));\n\n script.src = url + new URLSearchParams({\n authed: Number(authed).toString(),\n version: WEBSYNC_VERSION,\n });\n\n document.body.appendChild(script);\n\n script.onload = () => {\n saveSync(authed);\n removeElement();\n if (lastTimeout) {\n clearTimeout(lastTimeout);\n lastTimeout = undefined;\n }\n startWebsync();\n resolve();\n };\n\n script.onerror = () => {\n removeElement();\n reject();\n };\n });\n }));\n } else {\n return Promise.resolve();\n }\n};\n\nexport function startWebsync() {\n if (DEBUG) {\n return;\n }\n\n if (lastTimeout !== undefined) return;\n const currentTs = getTs();\n\n const { ts } = JSON.parse(localStorage.getItem(WEBSYNC_KEY) || '{}');\n\n const timeout = WEBSYNC_TIMEOUT - (currentTs - ts);\n\n lastTimeout = setTimeout(() => {\n const { authState } = getGlobal();\n\n const authed = authState === 'authorizationStateReady' || hasStoredSession(true);\n forceWebsync(authed);\n }, Math.max(0, timeout * 1000));\n}\n\nexport function clearWebsync() {\n localStorage.removeItem(WEBSYNC_KEY);\n}\n","import { throttle } from './schedulers';\nimport {\n MOBILE_SCREEN_LANDSCAPE_MAX_HEIGHT,\n MOBILE_SCREEN_LANDSCAPE_MAX_WIDTH,\n MOBILE_SCREEN_MAX_WIDTH,\n} from '../config';\nimport { IS_IOS, IS_SINGLE_COLUMN_LAYOUT } from './environment';\n\ntype IDimensions = {\n width: number;\n height: number;\n};\n\nconst IS_LANDSCAPE = IS_SINGLE_COLUMN_LAYOUT && isLandscape();\n\nconst initialHeight = window.innerHeight;\nlet currentWindowSize = updateSizes();\nlet isRefreshDisabled = false;\n\nfunction disableRefresh() {\n isRefreshDisabled = true;\n}\n\nfunction enableRefresh() {\n isRefreshDisabled = false;\n}\n\nconst handleResize = throttle(() => {\n currentWindowSize = updateSizes();\n\n if (!isRefreshDisabled && (\n isMobileScreen() !== IS_SINGLE_COLUMN_LAYOUT\n || (IS_SINGLE_COLUMN_LAYOUT && IS_LANDSCAPE !== isLandscape())\n )) {\n window.location.reload();\n }\n}, 250, true);\n\nwindow.addEventListener('orientationchange', handleResize);\nif (IS_IOS) {\n window.visualViewport.addEventListener('resize', handleResize);\n} else {\n window.addEventListener('resize', handleResize);\n}\n\nexport function updateSizes(): IDimensions {\n let height: number;\n if (IS_IOS) {\n height = window.visualViewport.height + window.visualViewport.pageTop;\n } else {\n height = window.innerHeight;\n }\n const vh = height * 0.01;\n\n document.documentElement.style.setProperty('--vh', `${vh}px`);\n\n return {\n width: window.innerWidth,\n height: window.innerHeight,\n };\n}\n\nfunction isMobileScreen() {\n return currentWindowSize.width <= MOBILE_SCREEN_MAX_WIDTH || (\n currentWindowSize.width <= MOBILE_SCREEN_LANDSCAPE_MAX_WIDTH\n && currentWindowSize.height <= MOBILE_SCREEN_LANDSCAPE_MAX_HEIGHT\n );\n}\n\nfunction isLandscape() {\n if (IS_IOS) {\n return window.matchMedia('(orientation: landscape)').matches;\n }\n\n // eslint-disable-next-line max-len\n // Source: https://web.archive.org/web/20160509220835/http://blog.abouthalf.com/development/orientation-media-query-challenges-in-android-browsers/\n // Feature is marked as deprecated now, but it is still supported\n // https://developer.mozilla.org/en-US/docs/Web/CSS/@media/device-aspect-ratio#browser_compatibility\n return window.matchMedia('screen and (min-device-aspect-ratio: 1/1) and (orientation: landscape)').matches;\n}\n\nconst windowSize = {\n get: () => currentWindowSize,\n getIsKeyboardVisible: () => initialHeight > currentWindowSize.height,\n disableRefresh,\n enableRefresh,\n};\n\nexport default windowSize;\n","const cache = new WeakMap>();\n\nexport default function withCache(fn: T) {\n return (...args: Parameters): ReturnType => {\n let fnCache = cache.get(fn);\n const cacheKey = args.map(String).join('_');\n\n if (fnCache) {\n const cached = fnCache.get(cacheKey);\n if (cached) {\n return cached;\n }\n } else {\n fnCache = new Map();\n cache.set(fn, fnCache);\n }\n\n const newValue = fn(...args);\n\n fnCache.set(cacheKey, newValue);\n\n return newValue;\n };\n}\n","!function(t,e){\"object\"==typeof exports&&\"object\"==typeof module?module.exports=e():\"function\"==typeof define&&define.amd?define([],e):\"object\"==typeof exports?exports.QRCodeStyling=e():t.QRCodeStyling=e()}(self,(function(){return(()=>{var t={192:(t,e)=>{var r,i,n=function(){var t=function(t,e){var r=t,i=s[e],n=null,o=0,h=null,v=[],w={},_=function(t,e){n=function(t){for(var e=new Array(t),r=0;r=7&&S(t),null==h&&(h=A(r,i,v)),C(h,e)},y=function(t,e){for(var r=-1;r<=7;r+=1)if(!(t+r<=-1||o<=t+r))for(var i=-1;i<=7;i+=1)e+i<=-1||o<=e+i||(n[t+r][e+i]=0<=r&&r<=6&&(0==i||6==i)||0<=i&&i<=6&&(0==r||6==r)||2<=r&&r<=4&&2<=i&&i<=4)},b=function(){for(var t=8;t>i&1);n[Math.floor(i/3)][i%3+o-8-3]=s}for(i=0;i<18;i+=1)s=!t&&1==(e>>i&1),n[i%3+o-8-3][Math.floor(i/3)]=s},M=function(t,e){for(var r=i<<3|e,s=a.getBCHTypeInfo(r),h=0;h<15;h+=1){var u=!t&&1==(s>>h&1);h<6?n[h][8]=u:h<8?n[h+1][8]=u:n[o-15+h][8]=u}for(h=0;h<15;h+=1)u=!t&&1==(s>>h&1),h<8?n[8][o-h-1]=u:h<9?n[8][15-h-1+1]=u:n[8][15-h-1]=u;n[o-8][8]=!t},C=function(t,e){for(var r=-1,i=o-1,s=7,h=0,u=a.getMaskFunction(e),c=o-1;c>0;c-=2)for(6==c&&(c-=1);;){for(var d=0;d<2;d+=1)if(null==n[i][c-d]){var l=!1;h>>s&1)),u(i,c-d)&&(l=!l),n[i][c-d]=l,-1==(s-=1)&&(h+=1,s=7)}if((i+=r)<0||o<=i){i-=r,r=-r;break}}},A=function(t,e,r){for(var i=c.getRSBlocks(t,e),n=d(),o=0;o8*h)throw\"code length overflow. (\"+n.getLengthInBits()+\">\"+8*h+\")\";for(n.getLengthInBits()+4<=8*h&&n.put(0,4);n.getLengthInBits()%8!=0;)n.putBit(!1);for(;!(n.getLengthInBits()>=8*h||(n.put(236,8),n.getLengthInBits()>=8*h));)n.put(17,8);return function(t,e){for(var r=0,i=0,n=0,o=new Array(e.length),s=new Array(e.length),h=0;h=0?f.getAt(p):0}}var v=0;for(l=0;li)&&(t=i,e=r)}return e}())},w.createTableTag=function(t,e){t=t||2;var r=\"\";r+='',r+=\"\";for(var i=0;i\";for(var n=0;n';r+=\"\"}return(r+=\"\")+\"
\"},w.createSvgTag=function(t,e,r,i){var n={};\"object\"==typeof arguments[0]&&(t=(n=arguments[0]).cellSize,e=n.margin,r=n.alt,i=n.title),t=t||2,e=void 0===e?4*t:e,(r=\"string\"==typeof r?{text:r}:r||{}).text=r.text||null,r.id=r.text?r.id||\"qrcode-description\":null,(i=\"string\"==typeof i?{text:i}:i||{}).text=i.text||null,i.id=i.text?i.id||\"qrcode-title\":null;var o,s,a,h,u=w.getModuleCount()*t+2*e,c=\"\";for(h=\"l\"+t+\",0 0,\"+t+\" -\"+t+\",0 0,-\"+t+\"z \",c+='\",c+=i.text?''+O(i.text)+\"\":\"\",c+=r.text?''+O(r.text)+\"\":\"\",c+='',c+='')+\"\"},w.createDataURL=function(t,e){t=t||2,e=void 0===e?4*t:e;var r=w.getModuleCount()*t+2*e,i=e,n=r-e;return m(r,r,(function(e,r){if(i<=e&&e\"};var O=function(t){for(var e=\"\",r=0;r\":e+=\">\";break;case\"&\":e+=\"&\";break;case'\"':e+=\""\";break;default:e+=i}}return e};return w.createASCII=function(t,e){if((t=t||1)<2)return function(t){t=void 0===t?2:t;var e,r,i,n,o,s=1*w.getModuleCount()+2*t,a=t,h=s-t,u={\"██\":\"█\",\"█ \":\"▀\",\" █\":\"▄\",\" \":\" \"},c={\"██\":\"▀\",\"█ \":\"▀\",\" █\":\" \",\" \":\" \"},d=\"\";for(e=0;e=h?c[o]:u[o];d+=\"\\n\"}return s%2&&t>0?d.substring(0,d.length-s-1)+Array(s+1).join(\"▀\"):d.substring(0,d.length-1)}(e);t-=1,e=void 0===e?2*t:e;var r,i,n,o,s=w.getModuleCount()*t+2*e,a=e,h=s-e,u=Array(t+1).join(\"██\"),c=Array(t+1).join(\" \"),d=\"\",l=\"\";for(r=0;r>>8),e.push(255&s)):e.push(i)}}return e}};var e,r,i,n,o,s={L:1,M:0,Q:3,H:2},a=(e=[[],[6,18],[6,22],[6,26],[6,30],[6,34],[6,22,38],[6,24,42],[6,26,46],[6,28,50],[6,30,54],[6,32,58],[6,34,62],[6,26,46,66],[6,26,48,70],[6,26,50,74],[6,30,54,78],[6,30,56,82],[6,30,58,86],[6,34,62,90],[6,28,50,72,94],[6,26,50,74,98],[6,30,54,78,102],[6,28,54,80,106],[6,32,58,84,110],[6,30,58,86,114],[6,34,62,90,118],[6,26,50,74,98,122],[6,30,54,78,102,126],[6,26,52,78,104,130],[6,30,56,82,108,134],[6,34,60,86,112,138],[6,30,58,86,114,142],[6,34,62,90,118,146],[6,30,54,78,102,126,150],[6,24,50,76,102,128,154],[6,28,54,80,106,132,158],[6,32,58,84,110,136,162],[6,26,54,82,110,138,166],[6,30,58,86,114,142,170]],r=1335,i=7973,o=function(t){for(var e=0;0!=t;)e+=1,t>>>=1;return e},(n={}).getBCHTypeInfo=function(t){for(var e=t<<10;o(e)-o(r)>=0;)e^=r<=0;)e^=i<5&&(r+=3+o-5)}for(i=0;i=256;)e-=255;return t[e]}}}();function u(t,e){if(void 0===t.length)throw t.length+\"/\"+e;var r=function(){for(var r=0;r>>7-e%8&1)},put:function(t,e){for(var i=0;i>>e-i-1&1))},getLengthInBits:function(){return e},putBit:function(r){var i=Math.floor(e/8);t.length<=i&&t.push(0),r&&(t[i]|=128>>>e%8),e+=1}};return r},l=function(t){var e=t,r={getMode:function(){return 1},getLength:function(t){return e.length},write:function(t){for(var r=e,n=0;n+2>>8&255)+(255&n),t.put(n,13),r+=2}if(r>>8)},writeBytes:function(t,r,i){r=r||0,i=i||t.length;for(var n=0;n0&&(e+=\",\"),e+=t[r];return e+\"]\"}};return e},w=function(t){var e=t,r=0,i=0,n=0,o={read:function(){for(;n<8;){if(r>=e.length){if(0==n)return-1;throw\"unexpected end of file./\"+n}var t=e.charAt(r);if(r+=1,\"=\"==t)return n=0,-1;t.match(/^\\s$/)||(i=i<<6|s(t.charCodeAt(0)),n+=6)}var o=i>>>n-8&255;return n-=8,o}},s=function(t){if(65<=t&&t<=90)return t-65;if(97<=t&&t<=122)return t-97+26;if(48<=t&&t<=57)return t-48+52;if(43==t)return 62;if(47==t)return 63;throw\"c:\"+t};return o},m=function(t,e,r){for(var i=function(t,e){var r=t,i=e,n=new Array(t*e),o={setPixel:function(t,e,i){n[e*r+t]=i},write:function(t){t.writeString(\"GIF87a\"),t.writeShort(r),t.writeShort(i),t.writeByte(128),t.writeByte(0),t.writeByte(0),t.writeByte(0),t.writeByte(0),t.writeByte(0),t.writeByte(255),t.writeByte(255),t.writeByte(255),t.writeString(\",\"),t.writeShort(0),t.writeShort(0),t.writeShort(r),t.writeShort(i),t.writeByte(0);var e=s(2);t.writeByte(2);for(var n=0;e.length-n>255;)t.writeByte(255),t.writeBytes(e,n,255),n+=255;t.writeByte(e.length-n),t.writeBytes(e,n,e.length-n),t.writeByte(0),t.writeString(\";\")}},s=function(t){for(var e=1<>>e!=0)throw\"length over\";for(;u+e>=8;)h.writeByte(255&(t<>>=8-u,c=0,u=0;c|=t<0&&h.writeByte(c)}});l.write(e,i);var g=0,f=String.fromCharCode(n[g]);for(g+=1;g=6;)o(t>>>e-6),e-=6},n.flush=function(){if(e>0&&(o(t<<6-e),t=0,e=0),r%3!=0)for(var n=3-r%3,s=0;s>6,128|63&i):i<55296||i>=57344?e.push(224|i>>12,128|i>>6&63,128|63&i):(r++,i=65536+((1023&i)<<10|1023&t.charCodeAt(r)),e.push(240|i>>18,128|i>>12&63,128|i>>6&63,128|63&i))}return e}(t)},void 0===(i=\"function\"==typeof(r=function(){return n})?r.apply(e,[]):r)||(t.exports=i)}},e={};function r(i){var n=e[i];if(void 0!==n)return n.exports;var o=e[i]={exports:{}};return t[i](o,o.exports,r),o.exports}r.n=t=>{var e=t&&t.__esModule?()=>t.default:()=>t;return r.d(e,{a:e}),e},r.d=(t,e)=>{for(var i in e)r.o(e,i)&&!r.o(t,i)&&Object.defineProperty(t,i,{enumerable:!0,get:e[i]})},r.o=(t,e)=>Object.prototype.hasOwnProperty.call(t,e);var i={};return(()=>{\"use strict\";r.d(i,{default:()=>M});const t=t=>!!t&&\"object\"==typeof t&&!Array.isArray(t);function e(r,...i){if(!i.length)return r;const n=i.shift();return void 0!==n&&t(r)&&t(n)?(r=Object.assign({},r),Object.keys(n).forEach((i=>{const o=r[i],s=n[i];Array.isArray(o)&&Array.isArray(s)?r[i]=s:t(o)&&t(s)?r[i]=e(Object.assign({},o),s):r[i]=s})),e(r,...i)):r}function n(t,e){const r=document.createElement(\"a\");r.download=e,r.href=t,document.body.appendChild(r),r.click(),document.body.removeChild(r)}function o(t){return new Promise((e=>{const r=new FileReader;r.onloadend=()=>e(r.result),r.readAsDataURL(t)}))}const s={L:.07,M:.15,Q:.25,H:.3};class a{constructor({svg:t,type:e}){this._svg=t,this._type=e}draw(t,e,r,i){let n;switch(this._type){case\"dots\":n=this._drawDot;break;case\"classy\":n=this._drawClassy;break;case\"classy-rounded\":n=this._drawClassyRounded;break;case\"rounded\":n=this._drawRounded;break;case\"extra-rounded\":n=this._drawExtraRounded;break;default:n=this._drawSquare}n.call(this,{x:t,y:e,size:r,getNeighbor:i})}_rotateFigure({x:t,y:e,size:r,rotation:i=0,draw:n}){var o;const s=t+r/2,a=e+r/2;n(),null===(o=this._element)||void 0===o||o.setAttribute(\"transform\",`rotate(${180*i/Math.PI},${s},${a})`)}_basicDot(t){const{size:e,x:r,y:i}=t;this._rotateFigure(Object.assign(Object.assign({},t),{draw:()=>{this._element=document.createElementNS(\"http://www.w3.org/2000/svg\",\"circle\"),this._element.setAttribute(\"cx\",String(r+e/2)),this._element.setAttribute(\"cy\",String(i+e/2)),this._element.setAttribute(\"r\",String(e/2))}}))}_basicSquare(t){const{size:e,x:r,y:i}=t;this._rotateFigure(Object.assign(Object.assign({},t),{draw:()=>{this._element=document.createElementNS(\"http://www.w3.org/2000/svg\",\"rect\"),this._element.setAttribute(\"x\",String(r)),this._element.setAttribute(\"y\",String(i)),this._element.setAttribute(\"width\",String(e)),this._element.setAttribute(\"height\",String(e))}}))}_basicSideRounded(t){const{size:e,x:r,y:i}=t;this._rotateFigure(Object.assign(Object.assign({},t),{draw:()=>{this._element=document.createElementNS(\"http://www.w3.org/2000/svg\",\"path\"),this._element.setAttribute(\"d\",`M ${r} ${i}v ${e}h `+e/2+`a ${e/2} ${e/2}, 0, 0, 0, 0 ${-e}`)}}))}_basicCornerRounded(t){const{size:e,x:r,y:i}=t;this._rotateFigure(Object.assign(Object.assign({},t),{draw:()=>{this._element=document.createElementNS(\"http://www.w3.org/2000/svg\",\"path\"),this._element.setAttribute(\"d\",`M ${r} ${i}v ${e}h ${e}v `+-e/2+`a ${e/2} ${e/2}, 0, 0, 0, ${-e/2} ${-e/2}`)}}))}_basicCornerExtraRounded(t){const{size:e,x:r,y:i}=t;this._rotateFigure(Object.assign(Object.assign({},t),{draw:()=>{this._element=document.createElementNS(\"http://www.w3.org/2000/svg\",\"path\"),this._element.setAttribute(\"d\",`M ${r} ${i}v ${e}h ${e}a ${e} ${e}, 0, 0, 0, ${-e} ${-e}`)}}))}_basicCornersRounded(t){const{size:e,x:r,y:i}=t;this._rotateFigure(Object.assign(Object.assign({},t),{draw:()=>{this._element=document.createElementNS(\"http://www.w3.org/2000/svg\",\"path\"),this._element.setAttribute(\"d\",`M ${r} ${i}v `+e/2+`a ${e/2} ${e/2}, 0, 0, 0, ${e/2} ${e/2}h `+e/2+\"v \"+-e/2+`a ${e/2} ${e/2}, 0, 0, 0, ${-e/2} ${-e/2}`)}}))}_drawDot({x:t,y:e,size:r}){this._basicDot({x:t,y:e,size:r,rotation:0})}_drawSquare({x:t,y:e,size:r}){this._basicSquare({x:t,y:e,size:r,rotation:0})}_drawRounded({x:t,y:e,size:r,getNeighbor:i}){const n=i?+i(-1,0):0,o=i?+i(1,0):0,s=i?+i(0,-1):0,a=i?+i(0,1):0,h=n+o+s+a;if(0!==h)if(h>2||n&&o||s&&a)this._basicSquare({x:t,y:e,size:r,rotation:0});else{if(2===h){let i=0;return n&&s?i=Math.PI/2:s&&o?i=Math.PI:o&&a&&(i=-Math.PI/2),void this._basicCornerRounded({x:t,y:e,size:r,rotation:i})}if(1===h){let i=0;return s?i=Math.PI/2:o?i=Math.PI:a&&(i=-Math.PI/2),void this._basicSideRounded({x:t,y:e,size:r,rotation:i})}}else this._basicDot({x:t,y:e,size:r,rotation:0})}_drawExtraRounded({x:t,y:e,size:r,getNeighbor:i}){const n=i?+i(-1,0):0,o=i?+i(1,0):0,s=i?+i(0,-1):0,a=i?+i(0,1):0,h=n+o+s+a;if(0!==h)if(h>2||n&&o||s&&a)this._basicSquare({x:t,y:e,size:r,rotation:0});else{if(2===h){let i=0;return n&&s?i=Math.PI/2:s&&o?i=Math.PI:o&&a&&(i=-Math.PI/2),void this._basicCornerExtraRounded({x:t,y:e,size:r,rotation:i})}if(1===h){let i=0;return s?i=Math.PI/2:o?i=Math.PI:a&&(i=-Math.PI/2),void this._basicSideRounded({x:t,y:e,size:r,rotation:i})}}else this._basicDot({x:t,y:e,size:r,rotation:0})}_drawClassy({x:t,y:e,size:r,getNeighbor:i}){const n=i?+i(-1,0):0,o=i?+i(1,0):0,s=i?+i(0,-1):0,a=i?+i(0,1):0;0!==n+o+s+a?n||s?o||a?this._basicSquare({x:t,y:e,size:r,rotation:0}):this._basicCornerRounded({x:t,y:e,size:r,rotation:Math.PI/2}):this._basicCornerRounded({x:t,y:e,size:r,rotation:-Math.PI/2}):this._basicCornersRounded({x:t,y:e,size:r,rotation:Math.PI/2})}_drawClassyRounded({x:t,y:e,size:r,getNeighbor:i}){const n=i?+i(-1,0):0,o=i?+i(1,0):0,s=i?+i(0,-1):0,a=i?+i(0,1):0;0!==n+o+s+a?n||s?o||a?this._basicSquare({x:t,y:e,size:r,rotation:0}):this._basicCornerExtraRounded({x:t,y:e,size:r,rotation:Math.PI/2}):this._basicCornerExtraRounded({x:t,y:e,size:r,rotation:-Math.PI/2}):this._basicCornersRounded({x:t,y:e,size:r,rotation:Math.PI/2})}}class h{constructor({svg:t,type:e}){this._svg=t,this._type=e}draw(t,e,r,i){let n;switch(this._type){case\"square\":n=this._drawSquare;break;case\"extra-rounded\":n=this._drawExtraRounded;break;default:n=this._drawDot}n.call(this,{x:t,y:e,size:r,rotation:i})}_rotateFigure({x:t,y:e,size:r,rotation:i=0,draw:n}){var o;const s=t+r/2,a=e+r/2;n(),null===(o=this._element)||void 0===o||o.setAttribute(\"transform\",`rotate(${180*i/Math.PI},${s},${a})`)}_basicDot(t){const{size:e,x:r,y:i}=t,n=e/7;this._rotateFigure(Object.assign(Object.assign({},t),{draw:()=>{this._element=document.createElementNS(\"http://www.w3.org/2000/svg\",\"path\"),this._element.setAttribute(\"clip-rule\",\"evenodd\"),this._element.setAttribute(\"d\",`M ${r+e/2} ${i}a ${e/2} ${e/2} 0 1 0 0.1 0zm 0 ${n}a ${e/2-n} ${e/2-n} 0 1 1 -0.1 0Z`)}}))}_basicSquare(t){const{size:e,x:r,y:i}=t,n=e/7;this._rotateFigure(Object.assign(Object.assign({},t),{draw:()=>{this._element=document.createElementNS(\"http://www.w3.org/2000/svg\",\"path\"),this._element.setAttribute(\"clip-rule\",\"evenodd\"),this._element.setAttribute(\"d\",`M ${r} ${i}v ${e}h ${e}v `+-e+\"z\"+`M ${r+n} ${i+n}h `+(e-2*n)+\"v \"+(e-2*n)+\"h \"+(2*n-e)+\"z\")}}))}_basicExtraRounded(t){const{size:e,x:r,y:i}=t,n=e/7;this._rotateFigure(Object.assign(Object.assign({},t),{draw:()=>{this._element=document.createElementNS(\"http://www.w3.org/2000/svg\",\"path\"),this._element.setAttribute(\"clip-rule\",\"evenodd\"),this._element.setAttribute(\"d\",`M ${r} ${i+2.5*n}v `+2*n+`a ${2.5*n} ${2.5*n}, 0, 0, 0, ${2.5*n} ${2.5*n}h `+2*n+`a ${2.5*n} ${2.5*n}, 0, 0, 0, ${2.5*n} ${2.5*-n}v `+-2*n+`a ${2.5*n} ${2.5*n}, 0, 0, 0, ${2.5*-n} ${2.5*-n}h `+-2*n+`a ${2.5*n} ${2.5*n}, 0, 0, 0, ${2.5*-n} ${2.5*n}`+`M ${r+2.5*n} ${i+n}h `+2*n+`a ${1.5*n} ${1.5*n}, 0, 0, 1, ${1.5*n} ${1.5*n}v `+2*n+`a ${1.5*n} ${1.5*n}, 0, 0, 1, ${1.5*-n} ${1.5*n}h `+-2*n+`a ${1.5*n} ${1.5*n}, 0, 0, 1, ${1.5*-n} ${1.5*-n}v `+-2*n+`a ${1.5*n} ${1.5*n}, 0, 0, 1, ${1.5*n} ${1.5*-n}`)}}))}_drawDot({x:t,y:e,size:r,rotation:i}){this._basicDot({x:t,y:e,size:r,rotation:i})}_drawSquare({x:t,y:e,size:r,rotation:i}){this._basicSquare({x:t,y:e,size:r,rotation:i})}_drawExtraRounded({x:t,y:e,size:r,rotation:i}){this._basicExtraRounded({x:t,y:e,size:r,rotation:i})}}class u{constructor({svg:t,type:e}){this._svg=t,this._type=e}draw(t,e,r,i){let n;n=\"square\"===this._type?this._drawSquare:this._drawDot,n.call(this,{x:t,y:e,size:r,rotation:i})}_rotateFigure({x:t,y:e,size:r,rotation:i=0,draw:n}){var o;const s=t+r/2,a=e+r/2;n(),null===(o=this._element)||void 0===o||o.setAttribute(\"transform\",`rotate(${180*i/Math.PI},${s},${a})`)}_basicDot(t){const{size:e,x:r,y:i}=t;this._rotateFigure(Object.assign(Object.assign({},t),{draw:()=>{this._element=document.createElementNS(\"http://www.w3.org/2000/svg\",\"circle\"),this._element.setAttribute(\"cx\",String(r+e/2)),this._element.setAttribute(\"cy\",String(i+e/2)),this._element.setAttribute(\"r\",String(e/2))}}))}_basicSquare(t){const{size:e,x:r,y:i}=t;this._rotateFigure(Object.assign(Object.assign({},t),{draw:()=>{this._element=document.createElementNS(\"http://www.w3.org/2000/svg\",\"rect\"),this._element.setAttribute(\"x\",String(r)),this._element.setAttribute(\"y\",String(i)),this._element.setAttribute(\"width\",String(e)),this._element.setAttribute(\"height\",String(e))}}))}_drawDot({x:t,y:e,size:r,rotation:i}){this._basicDot({x:t,y:e,size:r,rotation:i})}_drawSquare({x:t,y:e,size:r,rotation:i}){this._basicSquare({x:t,y:e,size:r,rotation:i})}}const c=\"circle\";var d=function(t,e,r,i){return new(r||(r=Promise))((function(n,o){function s(t){try{h(i.next(t))}catch(t){o(t)}}function a(t){try{h(i.throw(t))}catch(t){o(t)}}function h(t){var e;t.done?n(t.value):(e=t.value,e instanceof r?e:new r((function(t){t(e)}))).then(s,a)}h((i=i.apply(t,e||[])).next())}))};const l=[[1,1,1,1,1,1,1],[1,0,0,0,0,0,1],[1,0,0,0,0,0,1],[1,0,0,0,0,0,1],[1,0,0,0,0,0,1],[1,0,0,0,0,0,1],[1,1,1,1,1,1,1]],g=[[0,0,0,0,0,0,0],[0,0,0,0,0,0,0],[0,0,1,1,1,0,0],[0,0,1,1,1,0,0],[0,0,1,1,1,0,0],[0,0,0,0,0,0,0],[0,0,0,0,0,0,0]];class f{constructor(t){this._element=document.createElementNS(\"http://www.w3.org/2000/svg\",\"svg\"),this._element.setAttribute(\"width\",String(t.width)),this._element.setAttribute(\"height\",String(t.height)),this._defs=document.createElementNS(\"http://www.w3.org/2000/svg\",\"defs\"),this._element.appendChild(this._defs),this._options=t}get width(){return this._options.width}get height(){return this._options.height}getElement(){return this._element}drawQR(t){return d(this,void 0,void 0,(function*(){const e=t.getModuleCount(),r=Math.min(this._options.width,this._options.height)-2*this._options.margin,i=this._options.shape===c?r/Math.sqrt(2):r,n=Math.floor(i/e);let o={hideXDots:0,hideYDots:0,width:0,height:0};if(this._qr=t,this._options.image){if(yield this.loadImage(),!this._image)return;const{imageOptions:t,qrOptions:r}=this._options,i=t.imageSize*s[r.errorCorrectionLevel],a=Math.floor(i*e*e),h=this._image instanceof SVGImageElement?this._image.width.baseVal.value:this._image.naturalWidth,u=this._image instanceof SVGImageElement?this._image.height.baseVal.value:this._image.naturalHeight;o=function({originalHeight:t,originalWidth:e,maxHiddenDots:r,maxHiddenAxisDots:i,dotSize:n}){const o={x:0,y:0},s={x:0,y:0};if(t<0||e<0||r<=0||n<=0)return{height:0,width:0,hideYDots:0,hideXDots:0};const a=t&&e?t/e:1;return o.x=Math.floor(Math.sqrt(r/a)),o.x<=0&&(o.x=1),i&&ir||i&&i{var i,n,s,a,h,u;return!(this._options.imageOptions.hideBackgroundDots&&t>=(e-o.hideXDots)/2&&t<(e+o.hideXDots)/2&&r>=(e-o.hideYDots)/2&&r<(e+o.hideYDots)/2||(null===(i=l[t])||void 0===i?void 0:i[r])||(null===(n=l[t-e+7])||void 0===n?void 0:n[r])||(null===(s=l[t])||void 0===s?void 0:s[r-e+7])||(null===(a=g[t])||void 0===a?void 0:a[r])||(null===(h=g[t-e+7])||void 0===h?void 0:h[r])||(null===(u=g[t])||void 0===u?void 0:u[r-e+7]))})),this.drawCorners(),this._options.image&&(yield this.drawImage({width:o.width,height:o.height,count:e,dotSize:n}))}))}drawBackground(){var t,e,r;const i=this._element,n=this._options;if(i){const i=null===(t=n.backgroundOptions)||void 0===t?void 0:t.gradient,o=null===(e=n.backgroundOptions)||void 0===e?void 0:e.color;if((i||o)&&this._createColor({options:i,color:o,additionalRotation:0,x:0,y:0,height:n.height,width:n.width,name:\"background-color\"}),null===(r=n.backgroundOptions)||void 0===r?void 0:r.round){const t=Math.min(n.width,n.height),e=document.createElementNS(\"http://www.w3.org/2000/svg\",\"rect\");this._backgroundClipPath=document.createElementNS(\"http://www.w3.org/2000/svg\",\"clipPath\"),this._backgroundClipPath.setAttribute(\"id\",\"clip-path-background-color\"),this._defs.appendChild(this._backgroundClipPath),e.setAttribute(\"x\",String((n.width-t)/2)),e.setAttribute(\"y\",String((n.height-t)/2)),e.setAttribute(\"width\",String(t)),e.setAttribute(\"height\",String(t)),e.setAttribute(\"rx\",String(t/2*n.backgroundOptions.round)),this._backgroundClipPath.appendChild(e)}}}drawDots(t){var e,r;if(!this._qr)throw\"QR code is not defined\";const i=this._options,n=this._qr.getModuleCount();if(n>i.width||n>i.height)throw\"The canvas is too small.\";const o=Math.min(i.width,i.height)-2*i.margin,s=i.shape===c?o/Math.sqrt(2):o,h=Math.floor(s/n),u=Math.floor((i.width-n*h)/2),d=Math.floor((i.height-n*h)/2),l=new a({svg:this._element,type:i.dotsOptions.type});this._dotsClipPath=document.createElementNS(\"http://www.w3.org/2000/svg\",\"clipPath\"),this._dotsClipPath.setAttribute(\"id\",\"clip-path-dot-color\"),this._dotsClipPath.style.transformOrigin=\"center\",this._dotsClipPath.style.transform=\"rotate(90deg) scale(1, -1)\",this._defs.appendChild(this._dotsClipPath),this._createColor({options:null===(e=i.dotsOptions)||void 0===e?void 0:e.gradient,color:i.dotsOptions.color,additionalRotation:0,x:0,y:0,height:i.height,width:i.width,name:\"dot-color\"});for(let e=0;e!(e+r<0||i+o<0||e+r>=n||i+o>=n)&&!(t&&!t(e+r,i+o))&&!!this._qr&&this._qr.isDark(e+r,i+o))),l._element&&this._dotsClipPath&&this._dotsClipPath.appendChild(l._element));if(i.shape===c){const t=Math.floor((o/h-n)/2),e=n+2*t,r=u-t*h,i=d-t*h,s=[],a=Math.floor(e/2);for(let r=0;r=t-1&&r<=e-t&&i>=t-1&&i<=e-t||Math.sqrt((r-a)*(r-a)+(i-a)*(i-a))>a?s[r][i]=0:s[r][i]=this._qr.isDark(i-2*t<0?i:i>=n?i-2*t:i-t,r-2*t<0?r:r>=n?r-2*t:r-t)?1:0}for(let t=0;t{var i;return!!(null===(i=s[t+e])||void 0===i?void 0:i[n+r])})),l._element&&this._dotsClipPath&&this._dotsClipPath.appendChild(l._element))}}drawCorners(){if(!this._qr)throw\"QR code is not defined\";const t=this._element,e=this._options;if(!t)throw\"Element code is not defined\";const r=this._qr.getModuleCount(),i=Math.min(e.width,e.height)-2*e.margin,n=e.shape===c?i/Math.sqrt(2):i,o=Math.floor(n/r),s=7*o,d=3*o,f=Math.floor((e.width-r*o)/2),p=Math.floor((e.height-r*o)/2);[[0,0,0],[1,0,Math.PI/2],[0,1,-Math.PI/2]].forEach((([t,i,n])=>{var c,v,w,m,_,y,b,x,S,M,C,A;const O=f+t*o*(r-7),$=p+i*o*(r-7);let D=this._dotsClipPath,k=this._dotsClipPath;if(((null===(c=e.cornersSquareOptions)||void 0===c?void 0:c.gradient)||(null===(v=e.cornersSquareOptions)||void 0===v?void 0:v.color))&&(D=document.createElementNS(\"http://www.w3.org/2000/svg\",\"clipPath\"),D.setAttribute(\"id\",`clip-path-corners-square-color-${t}-${i}`),this._defs.appendChild(D),this._cornersSquareClipPath=this._cornersDotClipPath=k=D,this._createColor({options:null===(w=e.cornersSquareOptions)||void 0===w?void 0:w.gradient,color:null===(m=e.cornersSquareOptions)||void 0===m?void 0:m.color,additionalRotation:n,x:O,y:$,height:s,width:s,name:`corners-square-color-${t}-${i}`})),null===(_=e.cornersSquareOptions)||void 0===_?void 0:_.type){const t=new h({svg:this._element,type:e.cornersSquareOptions.type});t.draw(O,$,s,n),t._element&&D&&D.appendChild(t._element)}else{const t=new a({svg:this._element,type:e.dotsOptions.type});for(let e=0;e{var n;return!!(null===(n=l[e+t])||void 0===n?void 0:n[r+i])})),t._element&&D&&D.appendChild(t._element))}if(((null===(b=e.cornersDotOptions)||void 0===b?void 0:b.gradient)||(null===(x=e.cornersDotOptions)||void 0===x?void 0:x.color))&&(k=document.createElementNS(\"http://www.w3.org/2000/svg\",\"clipPath\"),k.setAttribute(\"id\",`clip-path-corners-dot-color-${t}-${i}`),this._defs.appendChild(k),this._cornersDotClipPath=k,this._createColor({options:null===(S=e.cornersDotOptions)||void 0===S?void 0:S.gradient,color:null===(M=e.cornersDotOptions)||void 0===M?void 0:M.color,additionalRotation:n,x:O+2*o,y:$+2*o,height:d,width:d,name:`corners-dot-color-${t}-${i}`})),null===(C=e.cornersDotOptions)||void 0===C?void 0:C.type){const t=new u({svg:this._element,type:e.cornersDotOptions.type});t.draw(O+2*o,$+2*o,d,n),t._element&&k&&k.appendChild(t._element)}else{const t=new a({svg:this._element,type:e.dotsOptions.type});for(let e=0;e{var n;return!!(null===(n=g[e+t])||void 0===n?void 0:n[r+i])})),t._element&&k&&k.appendChild(t._element))}}))}loadImage(){return new Promise(((t,e)=>{const r=this._options,i=new Image;if(!r.image)return e(\"Image is not defined\");\"string\"==typeof r.imageOptions.crossOrigin&&(i.crossOrigin=r.imageOptions.crossOrigin),this._image=i,i.onload=()=>{t()},i.src=r.image}))}drawImage({width:t,height:e,count:r,dotSize:i}){return d(this,void 0,void 0,(function*(){const n=this._options,s=Math.floor((n.width-r*i)/2),a=Math.floor((n.height-r*i)/2),h=s+n.imageOptions.margin+(r*i-t)/2,u=a+n.imageOptions.margin+(r*i-e)/2,c=t-2*n.imageOptions.margin,d=e-2*n.imageOptions.margin,l=document.createElementNS(\"http://www.w3.org/2000/svg\",\"image\");l.setAttribute(\"x\",String(h)),l.setAttribute(\"y\",String(u)),l.setAttribute(\"width\",`${c}px`),l.setAttribute(\"height\",`${d}px`);const g=yield function(t){return e=this,r=void 0,n=function*(){return fetch(t).then((t=>t.blob())).then(o)},new((i=void 0)||(i=Promise))((function(t,o){function s(t){try{h(n.next(t))}catch(t){o(t)}}function a(t){try{h(n.throw(t))}catch(t){o(t)}}function h(e){var r;e.done?t(e.value):(r=e.value,r instanceof i?r:new i((function(t){t(r)}))).then(s,a)}h((n=n.apply(e,r||[])).next())}));var e,r,i,n}(n.image||\"\");l.setAttribute(\"href\",g||\"\"),this._element.appendChild(l)}))}_createColor({options:t,color:e,additionalRotation:r,x:i,y:n,height:o,width:s,name:a}){const h=s>o?s:o,u=document.createElementNS(\"http://www.w3.org/2000/svg\",\"rect\");if(u.setAttribute(\"x\",String(i)),u.setAttribute(\"y\",String(n)),u.setAttribute(\"height\",String(o)),u.setAttribute(\"width\",String(s)),u.setAttribute(\"clip-path\",`url('#clip-path-${a}')`),t){let e;if(\"radial\"===t.type)e=document.createElementNS(\"http://www.w3.org/2000/svg\",\"radialGradient\"),e.setAttribute(\"id\",a),e.setAttribute(\"gradientUnits\",\"userSpaceOnUse\"),e.setAttribute(\"fx\",String(i+s/2)),e.setAttribute(\"fy\",String(n+o/2)),e.setAttribute(\"cx\",String(i+s/2)),e.setAttribute(\"cy\",String(n+o/2)),e.setAttribute(\"r\",String(h/2));else{const h=((t.rotation||0)+r)%(2*Math.PI),u=(h+2*Math.PI)%(2*Math.PI);let c=i+s/2,d=n+o/2,l=i+s/2,g=n+o/2;u>=0&&u<=.25*Math.PI||u>1.75*Math.PI&&u<=2*Math.PI?(c-=s/2,d-=o/2*Math.tan(h),l+=s/2,g+=o/2*Math.tan(h)):u>.25*Math.PI&&u<=.75*Math.PI?(d-=o/2,c-=s/2/Math.tan(h),g+=o/2,l+=s/2/Math.tan(h)):u>.75*Math.PI&&u<=1.25*Math.PI?(c+=s/2,d+=o/2*Math.tan(h),l-=s/2,g-=o/2*Math.tan(h)):u>1.25*Math.PI&&u<=1.75*Math.PI&&(d+=o/2,c+=s/2/Math.tan(h),g-=o/2,l-=s/2/Math.tan(h)),e=document.createElementNS(\"http://www.w3.org/2000/svg\",\"linearGradient\"),e.setAttribute(\"id\",a),e.setAttribute(\"gradientUnits\",\"userSpaceOnUse\"),e.setAttribute(\"x1\",String(Math.round(c))),e.setAttribute(\"y1\",String(Math.round(d))),e.setAttribute(\"x2\",String(Math.round(l))),e.setAttribute(\"y2\",String(Math.round(g)))}t.colorStops.forEach((({offset:t,color:r})=>{const i=document.createElementNS(\"http://www.w3.org/2000/svg\",\"stop\");i.setAttribute(\"offset\",100*t+\"%\"),i.setAttribute(\"stop-color\",r),e.appendChild(i)})),u.setAttribute(\"fill\",`url('#${a}')`),this._defs.appendChild(e)}else e&&u.setAttribute(\"fill\",e);this._element.appendChild(u)}}const p=\"canvas\",v={};for(let t=0;t<=40;t++)v[t]=t;const w={type:p,shape:\"square\",width:300,height:300,data:\"\",margin:0,qrOptions:{typeNumber:v[0],mode:void 0,errorCorrectionLevel:\"Q\"},imageOptions:{hideBackgroundDots:!0,imageSize:.4,crossOrigin:void 0,margin:0},dotsOptions:{type:\"square\",color:\"#000\"},backgroundOptions:{round:0,color:\"#fff\"}};function m(t){const e=Object.assign({},t);if(!e.colorStops||!e.colorStops.length)throw\"Field 'colorStops' is required in gradient\";return e.rotation?e.rotation=Number(e.rotation):e.rotation=0,e.colorStops=e.colorStops.map((t=>Object.assign(Object.assign({},t),{offset:Number(t.offset)}))),e}function _(t){const e=Object.assign({},t);return e.width=Number(e.width),e.height=Number(e.height),e.margin=Number(e.margin),e.imageOptions=Object.assign(Object.assign({},e.imageOptions),{hideBackgroundDots:Boolean(e.imageOptions.hideBackgroundDots),imageSize:Number(e.imageOptions.imageSize),margin:Number(e.imageOptions.margin)}),e.margin>Math.min(e.width,e.height)&&(e.margin=Math.min(e.width,e.height)),e.dotsOptions=Object.assign({},e.dotsOptions),e.dotsOptions.gradient&&(e.dotsOptions.gradient=m(e.dotsOptions.gradient)),e.cornersSquareOptions&&(e.cornersSquareOptions=Object.assign({},e.cornersSquareOptions),e.cornersSquareOptions.gradient&&(e.cornersSquareOptions.gradient=m(e.cornersSquareOptions.gradient))),e.cornersDotOptions&&(e.cornersDotOptions=Object.assign({},e.cornersDotOptions),e.cornersDotOptions.gradient&&(e.cornersDotOptions.gradient=m(e.cornersDotOptions.gradient))),e.backgroundOptions&&(e.backgroundOptions=Object.assign({},e.backgroundOptions),e.backgroundOptions.gradient&&(e.backgroundOptions.gradient=m(e.backgroundOptions.gradient))),e}var y=r(192),b=r.n(y),x=function(t,e,r,i){return new(r||(r=Promise))((function(n,o){function s(t){try{h(i.next(t))}catch(t){o(t)}}function a(t){try{h(i.throw(t))}catch(t){o(t)}}function h(t){var e;t.done?n(t.value):(e=t.value,e instanceof r?e:new r((function(t){t(e)}))).then(s,a)}h((i=i.apply(t,e||[])).next())}))};class S{constructor(t){this._options=t?_(e(w,t)):w,this.update()}static _clearContainer(t){t&&(t.innerHTML=\"\")}_setupSvg(){if(!this._qr)return;const t=new f(this._options);this._svg=t.getElement(),this._svgDrawingPromise=t.drawQR(this._qr).then((()=>{var e;this._svg&&(null===(e=this._extension)||void 0===e||e.call(this,t.getElement(),this._options))}))}_setupCanvas(){var t;this._qr&&(this._canvas=document.createElement(\"canvas\"),this._canvas.width=this._options.width,this._canvas.height=this._options.height,this._setupSvg(),this._canvasDrawingPromise=null===(t=this._svgDrawingPromise)||void 0===t?void 0:t.then((()=>{if(!this._svg)return;const t=this._svg,e=(new XMLSerializer).serializeToString(t),r=\"data:image/svg+xml;base64,\"+btoa(e),i=new Image;return new Promise((t=>{i.onload=()=>{var e,r;null===(r=null===(e=this._canvas)||void 0===e?void 0:e.getContext(\"2d\"))||void 0===r||r.drawImage(i,0,0),t()},i.src=r}))})))}_getElement(t=\"png\"){return x(this,void 0,void 0,(function*(){if(!this._qr)throw\"QR code is empty\";return\"svg\"===t.toLowerCase()?(this._svg&&this._svgDrawingPromise||this._setupSvg(),yield this._svgDrawingPromise,this._svg):(this._canvas&&this._canvasDrawingPromise||this._setupCanvas(),yield this._canvasDrawingPromise,this._canvas)}))}update(t){S._clearContainer(this._container),this._options=t?_(e(this._options,t)):this._options,this._options.data&&(this._qr=b()(this._options.qrOptions.typeNumber,this._options.qrOptions.errorCorrectionLevel),this._qr.addData(this._options.data,this._options.qrOptions.mode||function(t){switch(!0){case/^[0-9]*$/.test(t):return\"Numeric\";case/^[0-9A-Z $%*+\\-./:]*$/.test(t):return\"Alphanumeric\";default:return\"Byte\"}}(this._options.data)),this._qr.make(),this._options.type===p?this._setupCanvas():this._setupSvg(),this.append(this._container))}append(t){if(t){if(\"function\"!=typeof t.appendChild)throw\"Container should be a single DOM node\";this._options.type===p?this._canvas&&t.appendChild(this._canvas):this._svg&&t.appendChild(this._svg),this._container=t}}applyExtension(t){if(!t)throw\"Extension function should be defined.\";this._extension=t,this.update()}deleteExtension(){this._extension=void 0,this.update()}getRawData(t=\"png\"){return x(this,void 0,void 0,(function*(){if(!this._qr)throw\"QR code is empty\";const e=yield this._getElement(t);if(!e)return null;if(\"svg\"===t.toLowerCase()){const t=(new XMLSerializer).serializeToString(e);return new Blob(['\\r\\n'+t],{type:\"image/svg+xml\"})}return new Promise((r=>e.toBlob(r,`image/${t}`,1)))}))}download(t){return x(this,void 0,void 0,(function*(){if(!this._qr)throw\"QR code is empty\";let e=\"png\",r=\"qr\";\"string\"==typeof t?(e=t,console.warn(\"Extension is deprecated as argument for 'download' method, please pass object { name: '...', extension: '...' } as argument\")):\"object\"==typeof t&&null!==t&&(t.name&&(r=t.name),t.extension&&(e=t.extension));const i=yield this._getElement(e);if(i)if(\"svg\"===e.toLowerCase()){let t=(new XMLSerializer).serializeToString(i);t='\\r\\n'+t,n(\"data:image/svg+xml;charset=utf-8,\"+encodeURIComponent(t),`${r}.svg`)}else n(i.toDataURL(`image/${e}`),`${r}.${e}`)}))}}const M=S})(),i.default})()}));\n//# sourceMappingURL=qr-code-styling.js.map","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n// expose the modules object (__webpack_modules__)\n__webpack_require__.m = __webpack_modules__;\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.f = {};\n// This file contains only the entry chunk.\n// The chunk loading function for additional chunks\n__webpack_require__.e = (chunkId) => {\n\treturn Promise.all(Object.keys(__webpack_require__.f).reduce((promises, key) => {\n\t\t__webpack_require__.f[key](chunkId, promises);\n\t\treturn promises;\n\t}, []));\n};","// This function allow to reference async chunks\n__webpack_require__.u = (chunkId) => {\n\t// return url for filenames based on template\n\treturn \"\" + chunkId + \".\" + {\"13\":\"c4586e903a85e96ce217\",\"99\":\"a19f6cfb125132c4ae9e\",\"133\":\"8c0baeff1e13dd2e52f0\",\"161\":\"e3dd8735bd9f827bebc6\",\"354\":\"27d980b897e4dbb1cb45\",\"395\":\"93d060131194800fb151\",\"472\":\"38e2fa9338b8e031169b\",\"501\":\"17afb8957510497ebb61\",\"524\":\"a68e2c04acea27f47c03\",\"536\":\"51c4121ec6034fff4884\",\"548\":\"9cd8c9eadd943e5f565d\",\"616\":\"62b1588aeeff3499beea\",\"654\":\"685435e52e1ffc797757\",\"742\":\"21c334e551c7ebf8ee71\",\"745\":\"7f9b9b63ef7b71c5b2d7\",\"878\":\"ba2ac4194b79d543b70f\",\"915\":\"059c59865cc20f6071e9\",\"941\":\"1399f916762c873a48a2\",\"970\":\"81d005f8fdd6b7e03eb7\",\"993\":\"c7c8681e7135da951723\"}[chunkId] + \".js\";\n};","// This function allow to reference async chunks\n__webpack_require__.miniCssF = (chunkId) => {\n\t// return url for filenames based on template\n\treturn \"\" + chunkId + \".\" + {\"13\":\"c4586e903a85e96ce217\",\"133\":\"8c0baeff1e13dd2e52f0\",\"395\":\"93d060131194800fb151\",\"472\":\"38e2fa9338b8e031169b\",\"616\":\"62b1588aeeff3499beea\",\"654\":\"685435e52e1ffc797757\",\"878\":\"ba2ac4194b79d543b70f\"}[chunkId] + \".css\";\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","var scriptUrl;\nif (__webpack_require__.g.importScripts) scriptUrl = __webpack_require__.g.location + \"\";\nvar document = __webpack_require__.g.document;\nif (!scriptUrl && document) {\n\tif (document.currentScript)\n\t\tscriptUrl = document.currentScript.src\n\tif (!scriptUrl) {\n\t\tvar scripts = document.getElementsByTagName(\"script\");\n\t\tif(scripts.length) scriptUrl = scripts[scripts.length - 1].src\n\t}\n}\n// When supporting browsers where an automatic publicPath is not supported you must specify an output.publicPath manually via configuration\n// or pass an empty string (\"\") and set the __webpack_public_path__ variable from your code to use your own logic.\nif (!scriptUrl) throw new Error(\"Automatic publicPath is not supported in this browser\");\nscriptUrl = scriptUrl.replace(/#.*$/, \"\").replace(/\\?.*$/, \"\").replace(/\\/[^\\/]+$/, \"/\");\n__webpack_require__.p = scriptUrl;","__webpack_require__.b = document.baseURI || self.location.href;\n\n// object to store loaded and loading chunks\n// undefined = chunk not loaded, null = chunk preloaded/prefetched\n// [resolve, reject, Promise] = chunk loading, 0 = chunk loaded\nvar installedChunks = {\n\t179: 0\n};\n\n__webpack_require__.f.j = (chunkId, promises) => {\n\t\t// JSONP chunk loading for javascript\n\t\tvar installedChunkData = __webpack_require__.o(installedChunks, chunkId) ? installedChunks[chunkId] : undefined;\n\t\tif(installedChunkData !== 0) { // 0 means \"already installed\".\n\n\t\t\t// a Promise means \"currently loading\".\n\t\t\tif(installedChunkData) {\n\t\t\t\tpromises.push(installedChunkData[2]);\n\t\t\t} else {\n\t\t\t\tif(true) { // all chunks have JS\n\t\t\t\t\t// setup Promise in chunk cache\n\t\t\t\t\tvar promise = new Promise((resolve, reject) => (installedChunkData = installedChunks[chunkId] = [resolve, reject]));\n\t\t\t\t\tpromises.push(installedChunkData[2] = promise);\n\n\t\t\t\t\t// start chunk loading\n\t\t\t\t\tvar url = __webpack_require__.p + __webpack_require__.u(chunkId);\n\t\t\t\t\t// create error before stack unwound to get useful stacktrace later\n\t\t\t\t\tvar error = new Error();\n\t\t\t\t\tvar loadingEnded = (event) => {\n\t\t\t\t\t\tif(__webpack_require__.o(installedChunks, chunkId)) {\n\t\t\t\t\t\t\tinstalledChunkData = installedChunks[chunkId];\n\t\t\t\t\t\t\tif(installedChunkData !== 0) installedChunks[chunkId] = undefined;\n\t\t\t\t\t\t\tif(installedChunkData) {\n\t\t\t\t\t\t\t\tvar errorType = event && (event.type === 'load' ? 'missing' : event.type);\n\t\t\t\t\t\t\t\tvar realSrc = event && event.target && event.target.src;\n\t\t\t\t\t\t\t\terror.message = 'Loading chunk ' + chunkId + ' failed.\\n(' + errorType + ': ' + realSrc + ')';\n\t\t\t\t\t\t\t\terror.name = 'ChunkLoadError';\n\t\t\t\t\t\t\t\terror.type = errorType;\n\t\t\t\t\t\t\t\terror.request = realSrc;\n\t\t\t\t\t\t\t\tinstalledChunkData[1](error);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t\t__webpack_require__.l(url, loadingEnded, \"chunk-\" + chunkId, chunkId);\n\t\t\t\t} else installedChunks[chunkId] = 0;\n\t\t\t}\n\t\t}\n};\n\n// no prefetching\n\n// no preloaded\n\n// no HMR\n\n// no HMR manifest\n\n// no on chunks loaded\n\n// install a JSONP callback for chunk loading\nvar webpackJsonpCallback = (parentChunkLoadingFunction, data) => {\n\tvar [chunkIds, moreModules, runtime] = data;\n\t// add \"moreModules\" to the modules object,\n\t// then flag all \"chunkIds\" as loaded and fire callback\n\tvar moduleId, chunkId, i = 0;\n\tif(chunkIds.some((id) => (installedChunks[id] !== 0))) {\n\t\tfor(moduleId in moreModules) {\n\t\t\tif(__webpack_require__.o(moreModules, moduleId)) {\n\t\t\t\t__webpack_require__.m[moduleId] = moreModules[moduleId];\n\t\t\t}\n\t\t}\n\t\tif(runtime) var result = runtime(__webpack_require__);\n\t}\n\tif(parentChunkLoadingFunction) parentChunkLoadingFunction(data);\n\tfor(;i < chunkIds.length; i++) {\n\t\tchunkId = chunkIds[i];\n\t\tif(__webpack_require__.o(installedChunks, chunkId) && installedChunks[chunkId]) {\n\t\t\tinstalledChunks[chunkId][0]();\n\t\t}\n\t\tinstalledChunks[chunkId] = 0;\n\t}\n\n}\n\nvar chunkLoadingGlobal = self[\"webpackChunktelegram_t\"] = self[\"webpackChunktelegram_t\"] || [];\nchunkLoadingGlobal.forEach(webpackJsonpCallback.bind(null, 0));\nchunkLoadingGlobal.push = webpackJsonpCallback.bind(null, chunkLoadingGlobal.push.bind(chunkLoadingGlobal));","import { DEBUG, DEBUG_MORE } from '../config';\nimport { getActions } from '../global';\nimport { IS_ANDROID, IS_IOS, IS_SERVICE_WORKER_SUPPORTED } from './environment';\nimport { notifyClientReady, playNotifySoundDebounced } from './notifications';\n\ntype WorkerAction = {\n type: string;\n payload: Record;\n};\n\nfunction handleWorkerMessage(e: MessageEvent) {\n const action: WorkerAction = e.data;\n if (DEBUG_MORE) {\n // eslint-disable-next-line no-console\n console.log('[SW] Message from worker', action);\n }\n if (!action.type) return;\n const dispatch = getActions();\n const payload = action.payload;\n switch (action.type) {\n case 'focusMessage':\n if (dispatch.focusMessage) {\n dispatch.focusMessage(payload);\n }\n if (dispatch.startActiveReaction && payload.reaction) {\n dispatch.startActiveReaction({\n messageId: payload.messageId,\n reaction: payload.reaction,\n });\n }\n break;\n case 'playNotificationSound':\n playNotifySoundDebounced(action.payload.id);\n break;\n }\n}\n\nfunction subscribeToWorker() {\n navigator.serviceWorker.removeEventListener('message', handleWorkerMessage);\n navigator.serviceWorker.addEventListener('message', handleWorkerMessage);\n // Notify web worker that client is ready to receive messages\n notifyClientReady();\n}\n\nif (IS_SERVICE_WORKER_SUPPORTED) {\n window.addEventListener('load', async () => {\n try {\n if (!navigator.serviceWorker.controller) {\n const registrations = await navigator.serviceWorker.getRegistrations();\n if (registrations.length) {\n if (DEBUG) {\n // eslint-disable-next-line no-console\n console.log('[SW] Hard reload detected, re-enabling Service Worker');\n }\n await Promise.all(registrations.map((r) => r.unregister()));\n }\n }\n\n await navigator.serviceWorker.register(new URL('../serviceWorker.ts', import.meta.url));\n\n if (DEBUG) {\n // eslint-disable-next-line no-console\n console.log('[SW] ServiceWorker registered');\n }\n\n await navigator.serviceWorker.ready;\n\n if (navigator.serviceWorker.controller) {\n if (DEBUG) {\n // eslint-disable-next-line no-console\n console.log('[SW] ServiceWorker ready');\n }\n subscribeToWorker();\n } else {\n if (DEBUG) {\n // eslint-disable-next-line no-console\n console.error('[SW] ServiceWorker not available');\n }\n\n if (!IS_IOS && !IS_ANDROID) {\n getActions().showDialog({ data: { message: 'SERVICE_WORKER_DISABLED', hasErrorKey: true } });\n }\n }\n } catch (err) {\n if (DEBUG) {\n // eslint-disable-next-line no-console\n console.error('[SW] ServiceWorker registration failed: ', err);\n }\n }\n });\n window.addEventListener('focus', async () => {\n await navigator.serviceWorker.ready;\n subscribeToWorker();\n });\n}\n","import { GlobalState } from './types';\nimport { NewChatMembersProgress } from '../types';\n\nimport {\n ANIMATION_LEVEL_DEFAULT, DARK_THEME_PATTERN_COLOR, DEFAULT_MESSAGE_TEXT_SIZE_PX, DEFAULT_PATTERN_COLOR,\n DEFAULT_PLAYBACK_RATE,\n DEFAULT_VOLUME,\n IOS_DEFAULT_MESSAGE_TEXT_SIZE_PX, MACOS_DEFAULT_MESSAGE_TEXT_SIZE_PX,\n} from '../config';\nimport { IS_IOS, IS_MAC_OS } from '../util/environment';\n\nexport const INITIAL_STATE: GlobalState = {\n isLeftColumnShown: true,\n isChatInfoShown: false,\n newChatMembersProgress: NewChatMembersProgress.Closed,\n uiReadyState: 0,\n serverTimeOffset: 0,\n\n authRememberMe: true,\n countryList: {\n phoneCodes: [],\n general: [],\n },\n\n blocked: {\n ids: [],\n totalCount: 0,\n },\n\n users: {\n byId: {},\n statusesById: {},\n },\n\n chats: {\n listIds: {},\n isFullyLoaded: {},\n orderedPinnedIds: {},\n totalCount: {},\n byId: {},\n },\n\n messages: {\n byChatId: {},\n messageLists: [],\n sponsoredByChatId: {},\n },\n\n groupCalls: {\n byId: {},\n },\n\n scheduledMessages: {\n byChatId: {},\n },\n\n chatFolders: {\n byId: {},\n activeChatFolder: 0,\n },\n\n fileUploads: {\n byMessageLocalId: {},\n },\n\n recentEmojis: ['grinning', 'kissing_heart', 'christmas_tree', 'brain', 'trophy'],\n\n stickers: {\n setsById: {},\n added: {},\n recent: {\n stickers: [],\n },\n favorite: {\n stickers: [],\n },\n greeting: {\n stickers: [],\n },\n featured: {\n setIds: [],\n },\n search: {},\n forEmoji: {},\n },\n\n emojiKeywords: {},\n\n gifs: {\n saved: {},\n search: {},\n },\n\n inlineBots: {\n isLoading: false,\n byUsername: {},\n },\n\n globalSearch: {},\n\n userSearch: {},\n\n localTextSearch: {\n byChatThreadKey: {},\n },\n\n localMediaSearch: {\n byChatId: {},\n },\n\n management: {\n byChatId: {},\n },\n\n topPeers: {},\n\n topInlineBots: {},\n\n mediaViewer: {\n volume: DEFAULT_VOLUME,\n playbackRate: DEFAULT_PLAYBACK_RATE,\n isMuted: false,\n },\n\n audioPlayer: {\n volume: DEFAULT_VOLUME,\n playbackRate: DEFAULT_PLAYBACK_RATE,\n isMuted: false,\n },\n\n forwardMessages: {},\n\n pollResults: {},\n\n payment: {},\n\n notifications: [],\n\n dialogs: [],\n\n activeSessions: [],\n\n settings: {\n byKey: {\n theme: 'light',\n shouldUseSystemTheme: true,\n messageTextSize: IS_IOS\n ? IOS_DEFAULT_MESSAGE_TEXT_SIZE_PX\n : (IS_MAC_OS ? MACOS_DEFAULT_MESSAGE_TEXT_SIZE_PX : DEFAULT_MESSAGE_TEXT_SIZE_PX),\n animationLevel: ANIMATION_LEVEL_DEFAULT,\n messageSendKeyCombo: 'enter',\n canAutoLoadPhotoFromContacts: true,\n canAutoLoadPhotoInPrivateChats: true,\n canAutoLoadPhotoInGroups: true,\n canAutoLoadPhotoInChannels: true,\n canAutoLoadVideoFromContacts: true,\n canAutoLoadVideoInPrivateChats: true,\n canAutoLoadVideoInGroups: true,\n canAutoLoadVideoInChannels: true,\n canAutoLoadFileFromContacts: false,\n canAutoLoadFileInPrivateChats: false,\n canAutoLoadFileInGroups: false,\n canAutoLoadFileInChannels: false,\n autoLoadFileMaxSizeMb: 10,\n hasWebNotifications: true,\n hasPushNotifications: true,\n notificationSoundVolume: 5,\n canAutoPlayGifs: true,\n canAutoPlayVideos: true,\n shouldSuggestStickers: true,\n shouldLoopStickers: true,\n language: 'en',\n timeFormat: '24h',\n wasTimeFormatSetManually: false,\n isConnectionStatusMinimized: true,\n },\n themes: {\n light: {\n isBlurred: true,\n patternColor: DEFAULT_PATTERN_COLOR,\n },\n dark: {\n isBlurred: true,\n patternColor: DARK_THEME_PATTERN_COLOR,\n },\n },\n privacy: {},\n notifyExceptions: {},\n },\n\n twoFaSettings: {},\n activeReactions: {},\n\n shouldShowContextMenuHint: true,\n\n activeDownloads: {\n byChatId: {},\n },\n\n serviceNotifications: [],\n\n statistics: {\n byChatId: {},\n },\n};\n","import { addCallback, removeCallback } from '../lib/teact/teactn';\n\nimport { addActionHandler, getGlobal } from './index';\n\nimport { GlobalState } from './types';\nimport { MAIN_THREAD_ID } from '../api/types';\n\nimport { onBeforeUnload, onIdle, throttle } from '../util/schedulers';\nimport {\n DEBUG,\n GLOBAL_STATE_CACHE_DISABLED,\n GLOBAL_STATE_CACHE_KEY,\n GLOBAL_STATE_CACHE_USER_LIST_LIMIT,\n GLOBAL_STATE_CACHE_CHAT_LIST_LIMIT,\n GLOBAL_STATE_CACHE_CHATS_WITH_MESSAGES_LIMIT,\n MIN_SCREEN_WIDTH_FOR_STATIC_RIGHT_COLUMN,\n DEFAULT_VOLUME,\n DEFAULT_PLAYBACK_RATE,\n ALL_FOLDER_ID,\n ARCHIVED_FOLDER_ID,\n} from '../config';\nimport { IS_SINGLE_COLUMN_LAYOUT } from '../util/environment';\nimport { isHeavyAnimating } from '../hooks/useHeavyAnimationCheck';\nimport { pick, unique } from '../util/iteratees';\nimport {\n selectCurrentChat,\n selectCurrentMessageList,\n selectVisibleUsers,\n} from './selectors';\nimport { hasStoredSession } from '../util/sessions';\nimport { INITIAL_STATE } from './initialState';\nimport { parseLocationHash } from '../util/routing';\nimport { isUserId } from './helpers';\nimport { getOrderedIds } from '../util/folderManager';\n\nconst UPDATE_THROTTLE = 5000;\n\nconst updateCacheThrottled = throttle(() => onIdle(updateCache), UPDATE_THROTTLE, false);\n\nlet isCaching = false;\nlet unsubscribeFromBeforeUnload: NoneToVoidFunction | undefined;\n\nexport function initCache() {\n if (GLOBAL_STATE_CACHE_DISABLED) {\n return;\n }\n\n addActionHandler('saveSession', () => {\n if (isCaching) {\n return;\n }\n\n setupCaching();\n });\n\n addActionHandler('reset', () => {\n localStorage.removeItem(GLOBAL_STATE_CACHE_KEY);\n\n if (!isCaching) {\n return;\n }\n\n clearCaching();\n });\n}\n\nexport function loadCache(initialState: GlobalState): GlobalState | undefined {\n if (GLOBAL_STATE_CACHE_DISABLED) {\n return undefined;\n }\n\n if (hasStoredSession(true)) {\n setupCaching();\n\n return readCache(initialState);\n } else {\n clearCaching();\n\n return undefined;\n }\n}\n\nfunction setupCaching() {\n isCaching = true;\n unsubscribeFromBeforeUnload = onBeforeUnload(updateCache, true);\n window.addEventListener('blur', updateCache);\n addCallback(updateCacheThrottled);\n}\n\nfunction clearCaching() {\n isCaching = false;\n removeCallback(updateCacheThrottled);\n window.removeEventListener('blur', updateCache);\n if (unsubscribeFromBeforeUnload) {\n unsubscribeFromBeforeUnload();\n }\n}\n\nfunction readCache(initialState: GlobalState): GlobalState {\n if (DEBUG) {\n // eslint-disable-next-line no-console\n console.time('global-state-cache-read');\n }\n\n const json = localStorage.getItem(GLOBAL_STATE_CACHE_KEY);\n const cached = json ? JSON.parse(json) as GlobalState : undefined;\n\n if (DEBUG) {\n // eslint-disable-next-line no-console\n console.timeEnd('global-state-cache-read');\n }\n\n if (cached) {\n migrateCache(cached, initialState);\n }\n\n const newState = {\n ...initialState,\n ...cached,\n };\n\n const parsedMessageList = !IS_SINGLE_COLUMN_LAYOUT ? parseLocationHash() : undefined;\n\n return {\n ...newState,\n messages: {\n ...newState.messages,\n messageLists: parsedMessageList ? [parsedMessageList] : [],\n },\n };\n}\n\nfunction migrateCache(cached: GlobalState, initialState: GlobalState) {\n // Migrate from legacy setting names\n if ('shouldAutoDownloadMediaFromContacts' in cached.settings.byKey) {\n const {\n shouldAutoDownloadMediaFromContacts,\n shouldAutoDownloadMediaInPrivateChats,\n shouldAutoDownloadMediaInGroups,\n shouldAutoDownloadMediaInChannels,\n shouldAutoPlayVideos,\n shouldAutoPlayGifs,\n ...rest\n } = cached.settings.byKey;\n\n cached.settings.byKey = {\n ...rest,\n canAutoLoadPhotoFromContacts: shouldAutoDownloadMediaFromContacts,\n canAutoLoadVideoFromContacts: shouldAutoDownloadMediaFromContacts,\n canAutoLoadPhotoInPrivateChats: shouldAutoDownloadMediaInPrivateChats,\n canAutoLoadVideoInPrivateChats: shouldAutoDownloadMediaInPrivateChats,\n canAutoLoadPhotoInGroups: shouldAutoDownloadMediaInGroups,\n canAutoLoadVideoInGroups: shouldAutoDownloadMediaInGroups,\n canAutoLoadPhotoInChannels: shouldAutoDownloadMediaInChannels,\n canAutoLoadVideoInChannels: shouldAutoDownloadMediaInChannels,\n canAutoPlayVideos: shouldAutoPlayVideos,\n canAutoPlayGifs: shouldAutoPlayGifs,\n };\n }\n\n // Pre-fill settings with defaults\n cached.settings.byKey = {\n ...initialState.settings.byKey,\n ...cached.settings.byKey,\n };\n\n cached.settings.themes = {\n ...initialState.settings.themes,\n ...cached.settings.themes,\n };\n\n cached.chatFolders = {\n ...initialState.chatFolders,\n ...cached.chatFolders,\n };\n\n if (!cached.stickers.greeting) {\n cached.stickers.greeting = initialState.stickers.greeting;\n }\n\n if (!cached.activeDownloads) {\n cached.activeDownloads = {\n byChatId: {},\n };\n }\n\n if (!cached.serviceNotifications) {\n cached.serviceNotifications = [];\n }\n\n if (cached.audioPlayer.volume === undefined) {\n cached.audioPlayer.volume = DEFAULT_VOLUME;\n }\n\n if (cached.audioPlayer.playbackRate === undefined) {\n cached.audioPlayer.playbackRate = DEFAULT_PLAYBACK_RATE;\n }\n\n if (cached.mediaViewer.volume === undefined) {\n cached.mediaViewer.volume = DEFAULT_VOLUME;\n }\n\n if (cached.mediaViewer.playbackRate === undefined) {\n cached.mediaViewer.playbackRate = DEFAULT_PLAYBACK_RATE;\n }\n\n if (!cached.groupCalls) {\n cached.groupCalls = initialState.groupCalls;\n }\n\n if (!cached.users.statusesById) {\n cached.users.statusesById = {};\n }\n\n if (!cached.messages.sponsoredByChatId) {\n cached.messages.sponsoredByChatId = {};\n }\n\n if (!cached.activeReactions) {\n cached.activeReactions = {};\n }\n}\n\nfunction updateCache() {\n if (!isCaching || isHeavyAnimating()) {\n return;\n }\n\n const global = getGlobal();\n\n if (global.isLoggingOut) {\n return;\n }\n\n const reducedGlobal: GlobalState = {\n ...INITIAL_STATE,\n ...pick(global, [\n 'authState',\n 'authPhoneNumber',\n 'authRememberMe',\n 'authNearestCountry',\n 'currentUserId',\n 'contactList',\n 'topPeers',\n 'topInlineBots',\n 'recentEmojis',\n 'push',\n 'shouldShowContextMenuHint',\n 'leftColumnWidth',\n 'serviceNotifications',\n ]),\n audioPlayer: {\n volume: global.audioPlayer.volume,\n playbackRate: global.audioPlayer.playbackRate,\n isMuted: global.audioPlayer.isMuted,\n },\n mediaViewer: {\n volume: global.mediaViewer.volume,\n playbackRate: global.mediaViewer.playbackRate,\n isMuted: global.mediaViewer.isMuted,\n },\n isChatInfoShown: reduceShowChatInfo(global),\n users: reduceUsers(global),\n chats: reduceChats(global),\n messages: reduceMessages(global),\n globalSearch: {\n recentlyFoundChatIds: global.globalSearch.recentlyFoundChatIds,\n },\n settings: reduceSettings(global),\n chatFolders: reduceChatFolders(global),\n groupCalls: reduceGroupCalls(global),\n availableReactions: reduceAvailableReactions(global),\n };\n\n const json = JSON.stringify(reducedGlobal);\n localStorage.setItem(GLOBAL_STATE_CACHE_KEY, json);\n}\n\nfunction reduceShowChatInfo(global: GlobalState): boolean {\n return window.innerWidth > MIN_SCREEN_WIDTH_FOR_STATIC_RIGHT_COLUMN\n ? global.isChatInfoShown\n : false;\n}\n\nfunction reduceUsers(global: GlobalState): GlobalState['users'] {\n const { users: { byId, statusesById }, currentUserId } = global;\n const { chatId: currentChatId } = selectCurrentMessageList(global) || {};\n const visibleUserIds = selectVisibleUsers(global)?.map(({ id }) => id);\n\n const idsToSave = unique([\n ...currentUserId ? [currentUserId] : [],\n ...currentChatId && isUserId(currentChatId) ? [currentChatId] : [],\n ...visibleUserIds || [],\n ...global.topPeers.userIds || [],\n ...getOrderedIds(ALL_FOLDER_ID)?.filter(isUserId) || [],\n ...getOrderedIds(ARCHIVED_FOLDER_ID)?.filter(isUserId) || [],\n ...global.contactList?.userIds || [],\n ...global.globalSearch.recentlyFoundChatIds?.filter(isUserId) || [],\n ...Object.keys(byId),\n ]).slice(0, GLOBAL_STATE_CACHE_USER_LIST_LIMIT);\n\n return {\n byId: pick(byId, idsToSave),\n statusesById: pick(statusesById, idsToSave),\n };\n}\n\nfunction reduceChats(global: GlobalState): GlobalState['chats'] {\n const { chats: { byId }, currentUserId } = global;\n const currentChat = selectCurrentChat(global);\n const idsToSave = unique([\n ...currentUserId ? [currentUserId] : [],\n ...currentChat ? [currentChat.id] : [],\n ...getOrderedIds(ALL_FOLDER_ID) || [],\n ...getOrderedIds(ARCHIVED_FOLDER_ID) || [],\n ...global.globalSearch.recentlyFoundChatIds || [],\n ...Object.keys(byId),\n ]).slice(0, GLOBAL_STATE_CACHE_CHAT_LIST_LIMIT);\n\n return {\n ...global.chats,\n isFullyLoaded: {},\n byId: pick(global.chats.byId, idsToSave),\n };\n}\n\nfunction reduceMessages(global: GlobalState): GlobalState['messages'] {\n const { currentUserId } = global;\n const byChatId: GlobalState['messages']['byChatId'] = {};\n const { chatId: currentChatId } = selectCurrentMessageList(global) || {};\n const chatIdsToSave = [\n ...currentChatId ? [currentChatId] : [],\n ...currentUserId ? [currentUserId] : [],\n ...getOrderedIds(ALL_FOLDER_ID)?.slice(0, GLOBAL_STATE_CACHE_CHATS_WITH_MESSAGES_LIMIT) || [],\n ];\n\n chatIdsToSave.forEach((chatId) => {\n const current = global.messages.byChatId[chatId];\n if (!current) {\n return;\n }\n\n const mainThread = current.threadsById[MAIN_THREAD_ID];\n if (!mainThread || !mainThread.viewportIds) {\n return;\n }\n\n byChatId[chatId] = {\n byId: pick(current.byId, mainThread.viewportIds),\n threadsById: {\n [MAIN_THREAD_ID]: mainThread,\n },\n };\n });\n\n return {\n byChatId,\n messageLists: [],\n sponsoredByChatId: {},\n };\n}\n\nfunction reduceSettings(global: GlobalState): GlobalState['settings'] {\n const { byKey, themes } = global.settings;\n\n return {\n byKey,\n themes,\n privacy: {},\n notifyExceptions: {},\n };\n}\n\nfunction reduceChatFolders(global: GlobalState): GlobalState['chatFolders'] {\n return {\n ...global.chatFolders,\n activeChatFolder: 0,\n };\n}\n\nfunction reduceGroupCalls(global: GlobalState): GlobalState['groupCalls'] {\n return {\n ...global.groupCalls,\n byId: {},\n activeGroupCallId: undefined,\n isGroupCallPanelHidden: undefined,\n isFallbackConfirmOpen: undefined,\n };\n}\n\nfunction reduceAvailableReactions(global: GlobalState): GlobalState['availableReactions'] {\n return global.availableReactions\n ?.map((r) => pick(r, ['reaction', 'staticIcon', 'title', 'isInactive']));\n}\n","import { addActionHandler } from './index';\n\nimport { INITIAL_STATE } from './initialState';\nimport { initCache, loadCache } from './cache';\nimport { cloneDeep } from '../util/iteratees';\n\ninitCache();\n\naddActionHandler('init', () => {\n const initial = cloneDeep(INITIAL_STATE);\n return loadCache(initial) || initial;\n});\n","const STORAGE_KEY = 'tt-active-tab';\nconst INTERVAL = 2000;\n\nconst tabKey = String(Date.now() + Math.random());\n\nlocalStorage.setItem(STORAGE_KEY, tabKey);\n\nlet callback: NoneToVoidFunction;\n\nconst interval = window.setInterval(() => {\n if (callback && localStorage.getItem(STORAGE_KEY) !== tabKey) {\n callback();\n clearInterval(interval);\n }\n}, INTERVAL);\n\nexport function addActiveTabChangeListener(_callback: NoneToVoidFunction) {\n callback = _callback;\n}\n","const SITE_FONTS = ['400 1em Roboto', '500 1em Roboto'];\n\nexport default function preloadFonts() {\n if ('fonts' in document) {\n return Promise.all(SITE_FONTS.map((font) => document.fonts.load(font)));\n }\n\n return undefined;\n}\n","import React, { FC, useEffect } from '../../lib/teact/teact';\nimport { getActions, getGlobal, withGlobal } from '../../global';\n\nimport { ApiMediaFormat } from '../../api/types';\nimport { GlobalState } from '../../global/types';\n\nimport { getChatAvatarHash } from '../../global/helpers/chats'; // Direct import for better module splitting\nimport useFlag from '../../hooks/useFlag';\nimport useShowTransition from '../../hooks/useShowTransition';\nimport { pause } from '../../util/schedulers';\nimport { preloadImage } from '../../util/files';\nimport preloadFonts from '../../util/fonts';\nimport * as mediaLoader from '../../util/mediaLoader';\nimport { Bundles, loadModule } from '../../util/moduleLoader';\nimport buildClassName from '../../util/buildClassName';\n\nimport './UiLoader.scss';\n\nimport telegramLogoPath from '../../assets/telegram-logo.svg';\nimport reactionThumbsPath from '../../assets/reaction-thumbs.png';\nimport monkeyPath from '../../assets/monkey.svg';\nimport { selectIsRightColumnShown, selectTheme } from '../../global/selectors';\n\ntype OwnProps = {\n page: 'main' | 'authCode' | 'authPassword' | 'authPhoneNumber' | 'authQrCode';\n children: React.ReactNode;\n};\n\ntype StateProps =\n Pick\n & {\n hasCustomBackground?: boolean;\n hasCustomBackgroundColor: boolean;\n isRightColumnShown?: boolean;\n leftColumnWidth?: number;\n };\n\nconst MAX_PRELOAD_DELAY = 700;\nconst SECOND_STATE_DELAY = 1000;\nconst AVATARS_TO_PRELOAD = 10;\n\nfunction preloadAvatars() {\n const { listIds, byId } = getGlobal().chats;\n if (!listIds.active) {\n return undefined;\n }\n\n return Promise.all(listIds.active.slice(0, AVATARS_TO_PRELOAD).map((chatId) => {\n const chat = byId[chatId];\n if (!chat) {\n return undefined;\n }\n\n const avatarHash = getChatAvatarHash(chat);\n if (!avatarHash) {\n return undefined;\n }\n\n return mediaLoader.fetch(avatarHash, ApiMediaFormat.BlobUrl);\n }));\n}\n\nconst preloadTasks = {\n main: () => Promise.all([\n loadModule(Bundles.Main, 'Main')\n .then(preloadFonts),\n preloadAvatars(),\n preloadImage(reactionThumbsPath),\n ]),\n authPhoneNumber: () => Promise.all([\n preloadFonts(),\n preloadImage(telegramLogoPath),\n ]),\n authCode: () => preloadImage(monkeyPath),\n authPassword: () => preloadImage(monkeyPath),\n authQrCode: preloadFonts,\n};\n\nconst UiLoader: FC = ({\n page,\n children,\n hasCustomBackground,\n hasCustomBackgroundColor,\n isRightColumnShown,\n shouldSkipHistoryAnimations,\n leftColumnWidth,\n}) => {\n const { setIsUiReady } = getActions();\n\n const [isReady, markReady] = useFlag();\n const {\n shouldRender: shouldRenderMask, transitionClassNames,\n } = useShowTransition(!isReady, undefined, true);\n\n useEffect(() => {\n let timeout: number | undefined;\n\n const safePreload = async () => {\n try {\n await preloadTasks[page]();\n } catch (err) {\n // Do nothing\n }\n };\n\n Promise.race([\n pause(MAX_PRELOAD_DELAY),\n safePreload(),\n ]).then(() => {\n markReady();\n setIsUiReady({ uiReadyState: 1 });\n\n timeout = window.setTimeout(() => {\n setIsUiReady({ uiReadyState: 2 });\n }, SECOND_STATE_DELAY);\n });\n\n return () => {\n if (timeout) {\n clearTimeout(timeout);\n timeout = undefined;\n }\n\n setIsUiReady({ uiReadyState: 0 });\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n return (\n

\n {children}\n {shouldRenderMask && !shouldSkipHistoryAnimations && (\n
\n {page === 'main' ? (\n <>\n \n \n {isRightColumnShown &&
}\n \n ) : (\n
\n )}\n
\n )}\n
\n );\n};\n\nexport default withGlobal(\n (global): StateProps => {\n const theme = selectTheme(global);\n const { background, backgroundColor } = global.settings.themes[theme] || {};\n\n return {\n shouldSkipHistoryAnimations: global.shouldSkipHistoryAnimations,\n uiReadyState: global.uiReadyState,\n hasCustomBackground: Boolean(background),\n hasCustomBackgroundColor: Boolean(backgroundColor),\n isRightColumnShown: selectIsRightColumnShown(global),\n leftColumnWidth: global.leftColumnWidth,\n };\n },\n)(UiLoader);\n","import * as langProvider from '../util/langProvider';\nimport { useState } from '../lib/teact/teact';\n\nconst useLangString = (langCode: string | undefined, key: string): string | undefined => {\n const [translation, setTranslation] = useState();\n\n if (langCode) {\n langProvider\n .getTranslationForLangString(langCode, key)\n .then(setTranslation);\n }\n\n return translation;\n};\n\nexport default useLangString;\n","import { LangCode } from '../../../types';\n\nexport function getSuggestedLanguage() {\n let suggestedLanguage = navigator.language;\n\n if (suggestedLanguage && suggestedLanguage !== 'pt-br') {\n suggestedLanguage = suggestedLanguage.substr(0, 2);\n }\n\n return suggestedLanguage as LangCode;\n}\n","import React, {\n FC, useState, memo, useCallback, useRef,\n} from '../../lib/teact/teact';\nimport { withGlobal } from '../../global';\n\nimport { ApiCountryCode } from '../../api/types';\n\nimport { ANIMATION_END_DELAY } from '../../config';\nimport { prepareSearchWordsForNeedle } from '../../util/searchWords';\nimport buildClassName from '../../util/buildClassName';\nimport renderText from '../common/helpers/renderText';\nimport useLang from '../../hooks/useLang';\nimport { isoToEmoji } from '../../util/emoji';\nimport useOnChange from '../../hooks/useOnChange';\n\nimport DropdownMenu from '../ui/DropdownMenu';\nimport MenuItem from '../ui/MenuItem';\nimport Spinner from '../ui/Spinner';\n\nimport './CountryCodeInput.scss';\n\ntype StateProps = {\n phoneCodeList: ApiCountryCode[];\n};\n\ntype OwnProps = {\n id: string;\n value?: ApiCountryCode;\n isLoading?: boolean;\n onChange: (value: ApiCountryCode) => void;\n};\n\nconst MENU_HIDING_DURATION = 200 + ANIMATION_END_DELAY;\nconst SELECT_TIMEOUT = 50;\n\nconst CountryCodeInput: FC = ({\n id,\n value,\n isLoading,\n onChange,\n phoneCodeList,\n}) => {\n const lang = useLang();\n // eslint-disable-next-line no-null/no-null\n const inputRef = useRef(null);\n\n const [filter, setFilter] = useState();\n const [filteredList, setFilteredList] = useState([]);\n\n const updateFilter = useCallback((filterValue?: string) => {\n setFilter(filterValue);\n setFilteredList(getFilteredList(phoneCodeList, filterValue));\n }, [phoneCodeList]);\n\n useOnChange(([prevPhoneCodeList]) => {\n if (prevPhoneCodeList?.length === 0 && phoneCodeList.length > 0) {\n updateFilter(filter);\n }\n }, [phoneCodeList, updateFilter]);\n\n const handleChange = useCallback((country: ApiCountryCode) => {\n onChange(country);\n\n setTimeout(() => updateFilter(undefined), MENU_HIDING_DURATION);\n }, [onChange, updateFilter]);\n\n const handleInput = useCallback((e: React.FormEvent) => {\n updateFilter(e.currentTarget.value);\n }, [updateFilter]);\n\n const handleInputKeyDown = useCallback((e: React.KeyboardEvent) => {\n if (e.keyCode !== 8) {\n return;\n }\n\n const target = e.currentTarget;\n if (value && filter === undefined) {\n target.value = '';\n }\n\n updateFilter(target.value);\n }, [filter, updateFilter, value]);\n\n const CodeInput: FC<{ onTrigger: () => void; isOpen?: boolean }> = useCallback(({ onTrigger, isOpen }) => {\n const handleTrigger = () => {\n if (isOpen) {\n return;\n }\n\n setTimeout(() => {\n inputRef.current!.select();\n }, SELECT_TIMEOUT);\n\n onTrigger();\n\n const formEl = document.getElementById('auth-phone-number-form')!;\n formEl.scrollTo({ top: formEl.scrollHeight, behavior: 'smooth' });\n };\n\n const handleCodeInput = (e: React.FormEvent) => {\n handleInput(e);\n handleTrigger();\n };\n\n const inputValue = filter ?? (value?.name || value?.defaultName || '');\n\n return (\n
\n \n \n {isLoading ? (\n \n ) : (\n \n )}\n
\n );\n }, [filter, handleInput, handleInputKeyDown, id, isLoading, lang, value]);\n\n return (\n \n {filteredList\n .map((country: ApiCountryCode) => (\n handleChange(country)}\n >\n {renderText(isoToEmoji(country.iso2), ['hq_emoji'])}\n {country.name || country.defaultName}\n +{country.countryCode}\n \n ))}\n {!filteredList.length && (\n \n {lang('lng_country_none')}\n \n )}\n \n );\n};\n\nfunction getFilteredList(countryList: ApiCountryCode[], filter = ''): ApiCountryCode[] {\n if (!filter.length) {\n return countryList;\n }\n\n const searchWords = prepareSearchWordsForNeedle(filter);\n\n return countryList.filter((country) => (\n searchWords(country.defaultName) || (country.name && searchWords(country.name))\n ));\n}\n\nexport default memo(withGlobal(\n (global): StateProps => {\n const { countryList: { phoneCodes: phoneCodeList } } = global;\n return {\n phoneCodeList,\n };\n },\n)(CountryCodeInput));\n","import { ChangeEvent } from 'react';\n\nimport monkeyPath from '../../assets/monkey.svg';\n\nimport React, {\n FC, memo, useCallback, useEffect, useLayoutEffect, useRef, useState,\n} from '../../lib/teact/teact';\nimport { getActions, withGlobal } from '../../global';\n\nimport { GlobalState } from '../../global/types';\nimport { LangCode } from '../../types';\nimport { ApiCountryCode } from '../../api/types';\n\nimport { IS_SAFARI, IS_TOUCH_ENV } from '../../util/environment';\nimport { preloadImage } from '../../util/files';\nimport preloadFonts from '../../util/fonts';\nimport { pick } from '../../util/iteratees';\nimport { formatPhoneNumber, getCountryCodesByIso, getCountryFromPhoneNumber } from '../../util/phoneNumber';\nimport { setLanguage } from '../../util/langProvider';\nimport useLang from '../../hooks/useLang';\nimport useFlag from '../../hooks/useFlag';\nimport useLangString from '../../hooks/useLangString';\nimport { getSuggestedLanguage } from './helpers/getSuggestedLanguage';\n\nimport Button from '../ui/Button';\nimport Checkbox from '../ui/Checkbox';\nimport InputText from '../ui/InputText';\nimport Loading from '../ui/Loading';\nimport CountryCodeInput from './CountryCodeInput';\n\ntype StateProps = Pick & {\n language?: LangCode;\n phoneCodeList: ApiCountryCode[];\n};\n\nconst MIN_NUMBER_LENGTH = 7;\n\nlet isPreloadInitiated = false;\n\nconst AuthPhoneNumber: FC = ({\n connectionState,\n authState,\n authPhoneNumber,\n authIsLoading,\n authIsLoadingQrCode,\n authError,\n authRememberMe,\n authNearestCountry,\n phoneCodeList,\n language,\n}) => {\n const {\n setAuthPhoneNumber,\n setAuthRememberMe,\n loadNearestCountry,\n loadCountryList,\n clearAuthError,\n goToAuthQrCode,\n setSettingOption,\n } = getActions();\n\n const lang = useLang();\n // eslint-disable-next-line no-null/no-null\n const inputRef = useRef(null);\n const suggestedLanguage = getSuggestedLanguage();\n\n const continueText = useLangString(suggestedLanguage, 'ContinueOnThisLanguage');\n const [country, setCountry] = useState();\n const [phoneNumber, setPhoneNumber] = useState();\n const [isTouched, setIsTouched] = useState(false);\n const [lastSelection, setLastSelection] = useState<[number, number] | undefined>();\n const [isLoading, markIsLoading, unmarkIsLoading] = useFlag();\n\n const fullNumber = country ? `+${country.countryCode} ${phoneNumber || ''}` : phoneNumber;\n const canSubmit = fullNumber && fullNumber.replace(/[^\\d]+/g, '').length >= MIN_NUMBER_LENGTH;\n\n useEffect(() => {\n if (!IS_TOUCH_ENV) {\n inputRef.current!.focus();\n }\n }, [country]);\n\n useEffect(() => {\n if (connectionState === 'connectionStateReady' && !authNearestCountry) {\n loadNearestCountry();\n }\n }, [connectionState, authNearestCountry, loadNearestCountry]);\n\n useEffect(() => {\n if (connectionState === 'connectionStateReady') {\n loadCountryList({ langCode: language });\n }\n }, [connectionState, language, loadCountryList]);\n\n useEffect(() => {\n if (authNearestCountry && phoneCodeList && !country && !isTouched) {\n setCountry(getCountryCodesByIso(phoneCodeList, authNearestCountry)[0]);\n }\n }, [country, authNearestCountry, isTouched, phoneCodeList]);\n\n const parseFullNumber = useCallback((newFullNumber: string) => {\n if (!newFullNumber.length) {\n setPhoneNumber('');\n }\n\n const suggestedCountry = phoneCodeList && getCountryFromPhoneNumber(phoneCodeList, newFullNumber);\n\n // Any phone numbers should be allowed, in some cases ignoring formatting\n const selectedCountry = !country\n || (suggestedCountry && suggestedCountry.iso2 !== country.iso2)\n || (!suggestedCountry && newFullNumber.length)\n ? suggestedCountry\n : country;\n\n if (!country || !selectedCountry || (selectedCountry && selectedCountry.iso2 !== country.iso2)) {\n setCountry(selectedCountry);\n }\n setPhoneNumber(formatPhoneNumber(newFullNumber, selectedCountry));\n }, [phoneCodeList, country]);\n\n const handleLangChange = useCallback(() => {\n markIsLoading();\n\n void setLanguage(suggestedLanguage, () => {\n unmarkIsLoading();\n\n setSettingOption({ language: suggestedLanguage });\n });\n }, [markIsLoading, setSettingOption, suggestedLanguage, unmarkIsLoading]);\n\n useEffect(() => {\n if (phoneNumber === undefined && authPhoneNumber) {\n parseFullNumber(authPhoneNumber);\n }\n }, [authPhoneNumber, phoneNumber, parseFullNumber]);\n\n useLayoutEffect(() => {\n if (inputRef.current && lastSelection) {\n inputRef.current.setSelectionRange(...lastSelection);\n }\n }, [lastSelection]);\n\n const isJustPastedRef = useRef(false);\n const handlePaste = useCallback(() => {\n isJustPastedRef.current = true;\n requestAnimationFrame(() => {\n isJustPastedRef.current = false;\n });\n }, []);\n\n const handleCountryChange = useCallback((value: ApiCountryCode) => {\n setCountry(value);\n setPhoneNumber('');\n }, []);\n\n const handlePhoneNumberChange = useCallback((e: ChangeEvent) => {\n if (authError) {\n clearAuthError();\n }\n\n // This is for further screens. We delay it until user input to speed up the initial loading.\n if (!isPreloadInitiated) {\n isPreloadInitiated = true;\n preloadFonts();\n void preloadImage(monkeyPath);\n }\n\n const { value, selectionStart, selectionEnd } = e.target;\n setLastSelection(\n selectionStart && selectionEnd && selectionEnd < value.length\n ? [selectionStart, selectionEnd]\n : undefined,\n );\n\n setIsTouched(true);\n\n const shouldFixSafariAutoComplete = (\n IS_SAFARI && country && fullNumber !== undefined\n && value.length - fullNumber.length > 1 && !isJustPastedRef.current\n );\n parseFullNumber(shouldFixSafariAutoComplete ? `${country!.countryCode} ${value}` : value);\n }, [authError, clearAuthError, country, fullNumber, parseFullNumber]);\n\n const handleKeepSessionChange = useCallback((e: ChangeEvent) => {\n setAuthRememberMe(e.target.checked);\n }, [setAuthRememberMe]);\n\n function handleSubmit(event: React.FormEvent) {\n event.preventDefault();\n\n if (authIsLoading) {\n return;\n }\n\n if (canSubmit) {\n setAuthPhoneNumber({ phoneNumber: fullNumber });\n }\n }\n\n const isAuthReady = authState === 'authorizationStateWaitPhoneNumber';\n\n return (\n
\n
\n
\n

Telegram

\n

{lang('StartText')}

\n
\n \n \n \n {canSubmit && (\n isAuthReady ? (\n \n ) : (\n \n )\n )}\n {isAuthReady && (\n \n )}\n {suggestedLanguage && suggestedLanguage !== language && continueText && (\n \n )}\n \n
\n
\n );\n};\n\nexport default memo(withGlobal(\n (global): StateProps => {\n const {\n settings: { byKey: { language } },\n countryList: { phoneCodes: phoneCodeList },\n } = global;\n\n return {\n ...pick(global, [\n 'connectionState',\n 'authState',\n 'authPhoneNumber',\n 'authIsLoading',\n 'authIsLoadingQrCode',\n 'authError',\n 'authRememberMe',\n 'authNearestCountry',\n ]),\n language,\n phoneCodeList,\n };\n },\n)(AuthPhoneNumber));\n","import React, { FC, memo } from '../../lib/teact/teact';\nimport { Bundles } from '../../util/moduleLoader';\n\nimport useModuleLoader from '../../hooks/useModuleLoader';\nimport Loading from '../ui/Loading';\n\nconst AuthCodeAsync: FC = () => {\n const AuthCode = useModuleLoader(Bundles.Auth, 'AuthCode');\n\n return AuthCode ? : ;\n};\n\nexport default memo(AuthCodeAsync);\n","import React, { FC, memo } from '../../lib/teact/teact';\nimport { Bundles } from '../../util/moduleLoader';\n\nimport useModuleLoader from '../../hooks/useModuleLoader';\nimport Loading from '../ui/Loading';\n\nconst AuthPasswordAsync: FC = () => {\n const AuthPassword = useModuleLoader(Bundles.Auth, 'AuthPassword');\n\n return AuthPassword ? : ;\n};\n\nexport default memo(AuthPasswordAsync);\n","import React, { FC, memo } from '../../lib/teact/teact';\nimport { Bundles } from '../../util/moduleLoader';\n\nimport useModuleLoader from '../../hooks/useModuleLoader';\nimport Loading from '../ui/Loading';\n\nconst AuthRegisterAsync: FC = () => {\n const AuthRegister = useModuleLoader(Bundles.Auth, 'AuthRegister');\n\n return AuthRegister ? : ;\n};\n\nexport default memo(AuthRegisterAsync);\n","import QrCodeStyling from 'qr-code-styling';\nimport React, {\n FC, useEffect, useRef, memo, useCallback, useState,\n} from '../../lib/teact/teact';\nimport { getActions, withGlobal } from '../../global';\n\nimport { GlobalState } from '../../global/types';\nimport { LangCode } from '../../types';\n\nimport { DEFAULT_LANG_CODE } from '../../config';\nimport { setLanguage } from '../../util/langProvider';\nimport renderText from '../common/helpers/renderText';\nimport { getSuggestedLanguage } from './helpers/getSuggestedLanguage';\nimport getAnimationData from '../common/helpers/animatedAssets';\n\nimport useLangString from '../../hooks/useLangString';\nimport useFlag from '../../hooks/useFlag';\nimport useLang from '../../hooks/useLang';\n\nimport Loading from '../ui/Loading';\nimport Button from '../ui/Button';\nimport AnimatedSticker from '../common/AnimatedSticker';\nimport blankUrl from '../../assets/blank.png';\n\ntype StateProps =\n Pick\n & {\n language?: LangCode;\n };\n\nconst DATA_PREFIX = 'tg://login?token=';\nconst QR_SIZE = 280;\nconst QR_PLANE_SIZE = 54;\n\nconst QR_CODE = new QrCodeStyling({\n width: QR_SIZE,\n height: QR_SIZE,\n image: blankUrl,\n margin: 10,\n type: 'svg',\n dotsOptions: {\n type: 'rounded',\n },\n cornersSquareOptions: {\n type: 'extra-rounded',\n },\n imageOptions: {\n imageSize: 0.4,\n margin: 8,\n },\n qrOptions: {\n errorCorrectionLevel: 'M',\n },\n});\n\nconst AuthCode: FC = ({\n connectionState,\n authState,\n authQrCode,\n language,\n}) => {\n const {\n returnToAuthPhoneNumber,\n setSettingOption,\n } = getActions();\n\n const suggestedLanguage = getSuggestedLanguage();\n const lang = useLang();\n // eslint-disable-next-line no-null/no-null\n const qrCodeRef = useRef(null);\n const continueText = useLangString(suggestedLanguage, 'ContinueOnThisLanguage');\n const [isLoading, markIsLoading, unmarkIsLoading] = useFlag();\n const [isQrMounted, markQrMounted, unmarkQrMounted] = useFlag();\n\n const [animationData, setAnimationData] = useState();\n const [isAnimationLoaded, setIsAnimationLoaded] = useState(false);\n const handleAnimationLoad = useCallback(() => setIsAnimationLoaded(true), []);\n\n useEffect(() => {\n if (!animationData) {\n getAnimationData('QrPlane').then(setAnimationData);\n }\n }, [animationData]);\n\n useEffect(() => {\n if (!authQrCode) {\n return () => {\n unmarkQrMounted();\n };\n }\n\n if (connectionState !== 'connectionStateReady') {\n return undefined;\n }\n\n const container = qrCodeRef.current!;\n\n container.parentElement!.classList.remove('pre-animate');\n\n const data = `${DATA_PREFIX}${authQrCode.token}`;\n\n QR_CODE.update({\n data,\n });\n\n if (!isQrMounted) {\n QR_CODE.append(container);\n markQrMounted();\n }\n return undefined;\n }, [connectionState, authQrCode, isQrMounted, markQrMounted, unmarkQrMounted]);\n\n useEffect(() => {\n if (connectionState === 'connectionStateReady') {\n void setLanguage(DEFAULT_LANG_CODE);\n }\n }, [connectionState]);\n\n const handleLangChange = useCallback(() => {\n markIsLoading();\n\n void setLanguage(suggestedLanguage, () => {\n unmarkIsLoading();\n\n setSettingOption({ language: suggestedLanguage });\n });\n }, [markIsLoading, setSettingOption, suggestedLanguage, unmarkIsLoading]);\n\n const isAuthReady = authState === 'authorizationStateWaitQrCode';\n\n return (\n
\n
\n {authQrCode ? (\n
\n \n {animationData && (\n \n )}\n
\n ) : (\n
\n )}\n

{lang('Login.QR.Title')}

\n
    \n
  1. {lang('Login.QR.Help1')}
  2. \n
  3. {renderText(lang('Login.QR2.Help2'), ['simple_markdown'])}
  4. \n
  5. {lang('Login.QR.Help3')}
  6. \n
\n {isAuthReady && (\n \n )}\n {suggestedLanguage && suggestedLanguage !== language && continueText && (\n \n )}\n
\n
\n );\n};\n\nexport default memo(withGlobal(\n (global): StateProps => {\n const {\n connectionState, authState, authQrCode, settings: { byKey: { language } },\n } = global;\n\n return {\n connectionState,\n authState,\n authQrCode,\n language,\n };\n },\n)(AuthCode));\n","import React, { FC, useEffect, memo } from '../../lib/teact/teact';\nimport { getActions, withGlobal } from '../../global';\n\nimport { GlobalState } from '../../global/types';\n\nimport '../../global/actions/initial';\nimport { pick } from '../../util/iteratees';\nimport { PLATFORM_ENV } from '../../util/environment';\nimport windowSize from '../../util/windowSize';\nimport useHistoryBack from '../../hooks/useHistoryBack';\n\nimport UiLoader from '../common/UiLoader';\nimport AuthPhoneNumber from './AuthPhoneNumber';\nimport AuthCode from './AuthCode.async';\nimport AuthPassword from './AuthPassword.async';\nimport AuthRegister from './AuthRegister.async';\nimport AuthQrCode from './AuthQrCode';\n\nimport './Auth.scss';\n\ntype StateProps = Pick;\n\nconst Auth: FC = ({\n authState,\n}) => {\n const {\n reset, initApi, returnToAuthPhoneNumber, goToAuthQrCode,\n } = getActions();\n\n useEffect(() => {\n reset();\n initApi();\n }, [reset, initApi]);\n\n const isMobile = PLATFORM_ENV === 'iOS' || PLATFORM_ENV === 'Android';\n\n const handleChangeAuthorizationMethod = () => {\n if (!isMobile) {\n goToAuthQrCode();\n } else {\n returnToAuthPhoneNumber();\n }\n };\n\n useHistoryBack(\n (!isMobile && authState === 'authorizationStateWaitPhoneNumber')\n || (isMobile && authState === 'authorizationStateWaitQrCode'), handleChangeAuthorizationMethod,\n );\n\n // Prevent refresh when rotating device\n useEffect(() => {\n windowSize.disableRefresh();\n\n return () => {\n windowSize.enableRefresh();\n };\n }, []);\n\n switch (authState) {\n case 'authorizationStateWaitCode':\n return ;\n case 'authorizationStateWaitPassword':\n return ;\n case 'authorizationStateWaitRegistration':\n return ;\n case 'authorizationStateWaitPhoneNumber':\n return ;\n case 'authorizationStateWaitQrCode':\n return ;\n default:\n return isMobile\n ? \n : ;\n }\n};\n\nexport default memo(withGlobal(\n (global): StateProps => pick(global, ['authState']),\n)(Auth));\n","import React, { FC, memo } from '../../lib/teact/teact';\nimport { Bundles } from '../../util/moduleLoader';\n\nimport useModuleLoader from '../../hooks/useModuleLoader';\n\nconst MainAsync: FC = () => {\n const Main = useModuleLoader(Bundles.Main, 'Main');\n\n return Main ?
: undefined;\n};\n\nexport default memo(MainAsync);\n","import React, { FC, useCallback } from '../../lib/teact/teact';\n\nimport Button from '../ui/Button';\n\nimport appInactivePath from '../../assets/app-inactive.png';\nimport './AppInactive.scss';\n\nconst AppInactive: FC = () => {\n const handleReload = useCallback(() => {\n window.location.reload();\n }, []);\n\n return (\n
\n
\n \"\"\n

Such error, many tabs

\n
\n Telegram supports only one active tab with the app.\n
\n Please reload this page to continue using this tab or close it.\n
\n
\n \n
\n
\n
\n );\n};\n\nexport default AppInactive;\n","import React, { FC, useEffect } from './lib/teact/teact';\nimport { getActions, withGlobal } from './global';\n\nimport { GlobalState } from './global/types';\n\nimport { INACTIVE_MARKER, PAGE_TITLE } from './config';\nimport { pick } from './util/iteratees';\nimport { updateSizes } from './util/windowSize';\nimport { addActiveTabChangeListener } from './util/activeTabMonitor';\nimport useFlag from './hooks/useFlag';\n\nimport Auth from './components/auth/Auth';\nimport UiLoader from './components/common/UiLoader';\nimport Main from './components/main/Main.async';\nimport AppInactive from './components/main/AppInactive';\nimport { hasStoredSession } from './util/sessions';\n// import Test from './components/test/TestNoRedundancy';\n\ntype StateProps = Pick;\n\nconst App: FC = ({ authState }) => {\n const { disconnect } = getActions();\n\n const [isInactive, markInactive] = useFlag(false);\n\n useEffect(() => {\n updateSizes();\n addActiveTabChangeListener(() => {\n disconnect();\n document.title = `${PAGE_TITLE}${INACTIVE_MARKER}`;\n\n markInactive();\n });\n }, [disconnect, markInactive]);\n\n // return ;\n\n if (isInactive) {\n return ;\n }\n\n if (authState) {\n switch (authState) {\n case 'authorizationStateWaitPhoneNumber':\n case 'authorizationStateWaitCode':\n case 'authorizationStateWaitPassword':\n case 'authorizationStateWaitRegistration':\n case 'authorizationStateWaitQrCode':\n return ;\n case 'authorizationStateClosed':\n case 'authorizationStateClosing':\n case 'authorizationStateLoggingOut':\n case 'authorizationStateReady':\n return renderMain();\n }\n }\n\n return hasStoredSession(true) ? renderMain() : ;\n};\n\nfunction renderMain() {\n return (\n \n
\n \n );\n}\n\nexport default withGlobal(\n (global): StateProps => pick(global, ['authState']),\n)(App);\n","import './util/handleError';\nimport './util/setupServiceWorker';\n\nimport React from './lib/teact/teact';\nimport TeactDOM from './lib/teact/teact-dom';\n\nimport { getActions, getGlobal } from './global';\nimport './global/init';\n\nimport { DEBUG } from './config';\n\nimport App from './App';\n\nimport './styles/index.scss';\n\nif (DEBUG) {\n // eslint-disable-next-line no-console\n console.log('>>> INIT');\n}\n\ngetActions().init();\n\nif (DEBUG) {\n // eslint-disable-next-line no-console\n console.log('>>> START INITIAL RENDER');\n}\n\nTeactDOM.render(\n ,\n document.getElementById('root'),\n);\n\nif (DEBUG) {\n // eslint-disable-next-line no-console\n console.log('>>> FINISH INITIAL RENDER');\n}\n\ndocument.addEventListener('dblclick', () => {\n // eslint-disable-next-line no-console\n console.warn('GLOBAL STATE', getGlobal());\n});\n"],"names":["leafPrototypes","getProto","inProgress","dataWebpackPrefix","loadStylesheet","installedCssChunks","worker","requestStates","Map","requestStatesByCallback","initApi","onUpdate","initialArgs","DEBUG","console","log","Worker","URL","addEventListener","data","type","update","requestState","get","messageId","error","reject","resolve","response","callback","callbackArgs","Error","message","subscribeToWorker","platform","window","ensureWorkerPing","setTimeout","makeRequest","args","callApi","fnName","warn","promise","name","err","cancelApiProgress","progressCallback","isCanceled","postMessage","generateIdFor","payload","Promise","Object","assign","pop","set","catch","finally","delete","startedAt","Date","now","async","race","pause","then","location","reload","ApiMediaFormat","ApiMessageEntityTypes","MAIN_THREAD_ID","MESSAGE_DELETED","lottiePromise","RLottie","ensureLottie","default","memo","className","id","animationData","play","playSegment","speed","noLoop","size","quality","isLowPriority","color","forceOnHeavyAnimation","onLoad","onEnded","animation","setAnimation","useState","container","useRef","wasPlaying","isFrozen","isFirstRender","playRef","current","playSegmentRef","useEffect","exec","newAnimation","setSpeed","fastRaf","setColor","destroy","playAnimation","useCallback","shouldRestart","goToAndPlay","pauseAnimation","freezeAnimation","isPlaying","unfreezeAnimation","unfreezeAnimationOnRaf","changeData","useHeavyAnimationCheck","useBackgroundMode","fullClassName","buildClassName","style","undefined","ref","base","maxint","adapt","delta","numpoints","firsttime","k","Math","floor","decode","input","preserveCase","output","case_flags","input_length","length","n","out","i","bias","basic","j","ic","oldi","w","digit","t","len","lastIndexOf","charCodeAt","RangeError","push","cp","splice","String","fromCharCode","toUpperCase","value","join","utf16","getDomain","url","href","ensureProtocol","decodedHref","decodeURI","match","domain","replace","domain_array","split","s","slice","convertPunycode","text","children","isRtl","toggleSafeLinkModal","openTelegramLink","getActions","content","isNotSafe","handleClick","e","ctrlKey","altKey","shiftKey","metaKey","RE_TME_LINK","RE_TG_LINK","preventDefault","classNames","title","target","rel","onClick","dir","ANIMATED_STICKERS_PATHS","MonkeyIdle","MonkeyTracking","MonkeyClose","MonkeyPeek","FoldersAll","FoldersNew","DiscussionGroups","CameraFlip","HandFilled","HandOutline","Speaker","VoiceAllowTalk","VoiceMini","VoiceMuted","VoiceOutlined","Peach","Eggplant","Cumshot","JoinRequest","Invite","QrPlane","getAnimationData","path","origin","mediaLoader","getFileSizeString","bytes","ONE_GIGABYTE","toFixed","ONE_MEGABYTE","getDocumentExtension","document","fileName","mimeType","getFileExtension","indexOf","getColorFromExtension","extension","getDocumentHasPreview","Boolean","previewBlobUrl","thumbnail","RE_EMOJI_ONLY","RegExp","twemojiRegex","DETECT_UP_TO","emojiCount","sender","openChat","Link","focusMessage","handleMessageClick","chatId","groupCall","joinGroupCall","accessHash","MAX_LENGTH","NBSP","renderActionMessageText","lang","actionOriginUser","actionOriginChat","targetUsers","targetMessage","targetChatId","options","action","translationValues","amount","currency","call","noLinks","asPlainText","asTextWithSpoilers","translationKey","processed","unprocessed","includes","processPlaceholder","formatCurrency","code","renderUserContent","renderChatContent","map","user","filter","renderMessageContent","renderProductContent","renderMigratedContent","trim","renderGroupCallContent","invoice","getMessageSummaryText","messageSummary","renderMessageSummary","trimText","getUserFullName","renderText","chat","getChatTitle","placeholder","replaceValue","placeholderPosition","substring","Array","isArray","forEach","index","renderMessageText","highlight","shouldRenderHqEmoji","isSimple","truncateLength","entities","contentNotSupportedText","getMessageText","renderTextWithEntities","noEmoji","TRUNCATED_SUMMARY_LENGTH","hasSpoilers","some","emoji","getMessageSummaryEmoji","emojiWithSpace","description","getMessageSummaryDescription","RE_LETTER_OR_DIGIT","SIMPLE_MARKDOWN_REGEX","part","filters","params","compact","reduce","escapeHtml","EMOJI_REGEX","replaceEmojis","addLineBreaks","addHighlight","addLinks","replaceSimpleMarkdown","textParts","divEl","createElement","result","innerText","innerHTML","IS_EMOJI_SUPPORTED","parts","fixNonStandardEmoji","emojis","emojiResult","nativeToUnified","removeVS16s","src","alt","splittenParts","line","source","trimmedLine","trimLeft","indentLength","repeat","lowerCaseText","toLowerCase","queryPosition","nextSymbol","newParts","RE_LINK","RE_LINK_TEMPLATE","RE_MENTION_TEMPLATE","links","nextLink","shift","lastIndex","startsWith","username","endsWith","entityResult","entity","actionsByMessageId","createClassNameBuilder","contentRef","isRevealed","reveal","conceal","useFlag","stopPropagation","actions","contentLength","readingMs","round","timeoutMs","max","min","has","shouldRenderAsHtml","renderMessagePart","deleteLineBreakAfterPre","organizedEntities","organizedEntityIndexes","Set","organizedEntity","organizeEntity","organizedIndexes","organizedIndex","add","organizeEntities","renderEntity","textPartStart","textPartEnd","isLastEntity","renderResult","nestedEntities","offset","textBefore","textBeforeLength","substr","entityStartIndex","entityEndIndex","entityContent","nestedEntityContent","nestedIndex","nestedEntity","nestedEntityIndex","nestedResult","nestedEntityEndIndex","newEntity","rawEntityText","renderedContent","userId","getLinkUrl","processEntityAsHtml","entityText","renderNestedMessagePart","handleBotCommandClick","handleHashtagClick","handleCodeClick","role","tabIndex","MentionLink","SafeLink","processEntity","textAfter","arrayIndex","getTextWithEntitiesAsHtml","formattedText","c","concat","parsedEntity","isChanged","sendBotCommand","command","currentTarget","setLocalTextSearchQuery","query","searchTextMessagesLocal","copyTextToClipboard","showNotification","getTranslation","preventMessageInputBlur","withBubbling","IS_IOS","activeElement","EDITABLE_INPUT_ID","preventMessageInputBlurWithBubbling","withGlobal","global","userOrChat","selectUser","openChatByUsername","onContextMenu","onMouseDown","onMouseEnter","onMouseLeave","onFocus","backgroundImage","pill","fluid","isText","isLoading","ariaLabel","ariaControls","hasPopup","download","disabled","ripple","faded","withClickPropagation","elementRef","isClicked","setIsClicked","handleMouseDown","label","subLabel","checked","blocking","onChange","onCheck","useLang","handleChange","event","trigger","positionX","positionY","footer","forceOpen","onOpen","onClose","menuRef","dropdownRef","isOpen","setIsOpen","handleClose","onKeyDown","menu","keyCode","focusedElement","elementChildren","from","focus","onTrigger","containerRef","autoClose","shouldSkipTransition","success","readOnly","autoComplete","inputMode","maxLength","onInput","onKeyPress","onBlur","onPaste","labelText","htmlFor","backgroundColor","bubbleStyle","ariaLabelledBy","transformOriginX","transformOriginY","noCloseOnBackdrop","noCompact","onCloseAnimationEnd","backdropContainerRef","transitionClassNames","useShowTransition","captureEscKeyListener","useHistoryBack","useEffectWithPrevDeps","prevIsOpen","dispatchHeavyAnimationEvent","handleKeyDown","useKeyboardListNavigation","useVirtualBackdrop","bubbleClassName","transformOriginYStyle","transformOriginXStyle","IS_COMPACT_MENU","IS_BACKDROP_BLUR_SUPPORTED","props","icon","destructive","ripples","setRipples","cleanUpDebounced","useMemo","debounce","button","position","getBoundingClientRect","rippleSize","offsetWidth","x","clientX","y","clientY","requestAnimationFrame","APP_NAME","APP_VERSION","process","DEBUG_MORE","IS_TEST","DEBUG_ALERT_MSG","PAGE_TITLE","INACTIVE_MARKER","DEBUG_PAYMENT_SMART_GLOCAL","SESSION_USER_KEY","LEGACY_SESSION_KEY","GLOBAL_STATE_CACHE_DISABLED","GLOBAL_STATE_CACHE_KEY","GLOBAL_STATE_CACHE_USER_LIST_LIMIT","GLOBAL_STATE_CACHE_CHAT_LIST_LIMIT","GLOBAL_STATE_CACHE_CHATS_WITH_MESSAGES_LIMIT","MEDIA_CACHE_DISABLED","MEDIA_CACHE_NAME","MEDIA_CACHE_NAME_AVATARS","MEDIA_PROGRESSIVE_CACHE_NAME","CUSTOM_BG_CACHE_NAME","LANG_CACHE_NAME","AUTODOWNLOAD_FILESIZE_MB_LIMITS","isBigScreen","innerHeight","MIN_PASSWORD_LENGTH","MESSAGE_LIST_SLICE","MESSAGE_LIST_VIEWPORT_LIMIT","CHAT_HEIGHT_PX","CHAT_LIST_SLICE","CHAT_LIST_LOAD_SLICE","SHARED_MEDIA_SLICE","MESSAGE_SEARCH_SLICE","GLOBAL_SEARCH_SLICE","MEMBERS_SLICE","MEMBERS_LOAD_SLICE","PROFILE_SENSITIVE_AREA","TOP_CHAT_MESSAGES_PRELOAD_LIMIT","DEFAULT_VOLUME","DEFAULT_PLAYBACK_RATE","ANIMATION_LEVEL_MIN","ANIMATION_LEVEL_MAX","ANIMATION_LEVEL_DEFAULT","DEFAULT_MESSAGE_TEXT_SIZE_PX","IOS_DEFAULT_MESSAGE_TEXT_SIZE_PX","MACOS_DEFAULT_MESSAGE_TEXT_SIZE_PX","DRAFT_DEBOUNCE","SEND_MESSAGE_ACTION_INTERVAL","EDITABLE_INPUT_MODAL_ID","CUSTOM_APPENDIX_ATTRIBUTE","SAFE_SCREEN_WIDTH_FOR_STATIC_RIGHT_COLUMN","SAFE_SCREEN_WIDTH_FOR_CHAT_INFO","MIN_SCREEN_WIDTH_FOR_STATIC_RIGHT_COLUMN","MIN_SCREEN_WIDTH_FOR_STATIC_LEFT_COLUMN","MOBILE_SCREEN_MAX_WIDTH","MOBILE_SCREEN_LANDSCAPE_MAX_WIDTH","MOBILE_SCREEN_LANDSCAPE_MAX_HEIGHT","LOCAL_MESSAGE_ID_BASE","TMP_CHAT_ID","ANIMATION_END_DELAY","FAST_SMOOTH_MAX_DISTANCE","FAST_SMOOTH_MIN_DURATION","FAST_SMOOTH_MAX_DURATION","FAST_SMOOTH_SHORT_TRANSITION_MAX_DISTANCE","STICKER_SIZE_INLINE_DESKTOP_FACTOR","STICKER_SIZE_INLINE_MOBILE_FACTOR","STICKER_SIZE_AUTH","STICKER_SIZE_AUTH_MOBILE","STICKER_SIZE_PICKER","STICKER_SIZE_GENERAL_SETTINGS","STICKER_SIZE_PICKER_HEADER","STICKER_SIZE_SEARCH","STICKER_SIZE_MODAL","STICKER_SIZE_TWO_FA","STICKER_SIZE_DISCUSSION_GROUPS","STICKER_SIZE_FOLDER_SETTINGS","STICKER_SIZE_INLINE_BOT_RESULT","STICKER_SIZE_JOIN_REQUESTS","STICKER_SIZE_INVITES","NO_STICKER_SET_ID","BASE_EMOJI_KEYWORD_LANG","MENU_TRANSITION_DURATION","SLIDE_TRANSITION_DURATION","VIDEO_MOV_TYPE","SUPPORTED_IMAGE_CONTENT_TYPES","SUPPORTED_VIDEO_CONTENT_TYPES","CONTENT_TYPES_WITH_PREVIEW","CONTENT_NOT_SUPPORTED","COUNTRIES_WITH_12H_TIME_FORMAT","SERVICE_NOTIFICATIONS_USER_ID","REPLIES_USER_ID","ALL_FOLDER_ID","ARCHIVED_FOLDER_ID","MAX_MEDIA_FILES_FOR_ALBUM","MAX_ACTIVE_PINNED_CHATS","SCHEDULED_WHEN_ONLINE","DEFAULT_LANG_CODE","DEFAULT_LANG_PACK","LANG_PACKS","TIPS_USERNAME","LOCALIZED_TIPS","FEEDBACK_URL","LIGHT_THEME_BG_COLOR","DARK_THEME_BG_COLOR","DARK_THEME_PATTERN_COLOR","DEFAULT_PATTERN_COLOR","GROUP_CALL_VOLUME_MULTIPLIER","GROUP_CALL_DEFAULT_VOLUME","ENABLE_THUMBNAIL_VIDEO","addActionHandler","importLegacySession","clearLegacySessions","apiUpdate","userAgent","navigator","PLATFORM_ENV","sessionData","loadStoredSession","isTest","search","isMovSupported","IS_MOV_SUPPORTED","isWebmSupported","IS_WEBM_SUPPORTED","phoneNumber","authIsLoading","authError","password","file","firstName","lastName","authIsLoadingQrCode","storeSession","currentUserId","clearStoredSession","_global","_actions","unsubscribe","forceWebsync","reset","forceInitApi","cacheApi","langCachePrefix","langCacheVersion","updateAppBadge","init","connectionState","authNearestCountry","getGlobal","deviceToken","subscribedAt","buildInputPrivacyRules","visibility","allowedIds","deniedIds","users","byId","usersById","chats","chatsById","rules","collectUsers","isUserId","collectChats","allowedUsers","allowedChats","blockedUsers","blockedChats","photo","bio","about","setGlobal","profileEdit","progress","ProfileEditProgress","currentUser","updateUser","fullInfo","isUsernameAvailable","settings","loadedWallpapers","wallpapers","createObjectURL","slug","UPLOADING_WALLPAPER_SLUG","wallpaper","firstWallpaper","withLocalMedia","addUsers","buildCollectionByKey","updateChats","blocked","ids","blockedIds","totalCount","contactId","addBlockedContact","removeBlockedContact","activeSessions","hash","session","isCurrent","serverTimeOffset","addNotifyExceptions","replaceSettings","peerType","isSilent","shouldShowPreviews","updateNotifySettings","hasPushNotifications","hasWebNotifications","byKey","subscribe","hasContactJoinedNotifications","languages","phoneNumberSettings","lastSeenSettings","profilePhotoSettings","forwardsSettings","chatInviteSettings","all","privacy","lastSeen","profilePhoto","forwards","chatInvite","privacyKey","allowUserIds","allowChatIds","blockUserIds","blockChatIds","isAllowList","contactsIds","isSensitiveEnabled","langCode","language","countryList","timeFormat","setSettingOption","setTimeFormat","wasTimeFormatSetManually","nearestCountryCode","appConfig","selectNotifySettings","setLanguage","onUpdateApiReady","wasAuthReady","authState","authorizationState","isLoggingOut","authIsCodeViaApp","isCodeViaApp","authHint","hint","authQrCode","qrCode","onUpdateAuthorizationState","onUpdateAuthorizationError","isOnAuth","signOut","onUpdateConnectionState","authRememberMe","isEmpty","mainDcId","saveSession","onUpdateSession","onUpdateServerTimeOffset","sessionUserAuth","localStorage","getItem","userAuth","JSON","parse","setItem","stringify","updateSessionUserId","onUpdateCurrentUser","paymentShippingError","getShippingError","addPaymentError","showDialog","handleSystemThemeChange","currentThemeMatch","documentElement","currentTheme","nextTheme","selectTheme","animationLevel","switchTheme","mql","matchMedia","addListener","subscribeToSystemThemeChange","messageTextSize","theme","setProperty","setAttribute","toString","body","classList","IS_TOUCH_ENV","ensurePermanentWebVersion","startWebsync","IS_ANDROID","IS_MAC_OS","IS_SAFARI","uiReadyState","remove","authPhoneNumber","shouldSkipHistoryAnimations","forceSyncOnIOs","replaceThemeSettings","FOREVER_BANNED_DATE","VERIFIED_PRIORITY_BASE","PINNED_PRIORITY_BASE","entityId","isChatGroup","isChatBasicGroup","isChatSuperGroup","isChatChannel","isCommonBoxChat","isChatWithRepliesBot","getChatTypeString","getPrivateChatUserId","isSelf","getChatDescription","getChatLink","inviteLink","getChatAvatarHash","owner","avatarHash","isChatSummaryOnly","lastMessage","isChatAdmin","adminRights","getHasAdminRight","key","isUserRightBanned","currentUserBannedRights","defaultBannedRights","getCanPostInChat","threadId","isRestricted","migratedTo","isNotJoined","isCreator","getAllowedAttachmentOptions","isChatWithBot","canAttachMedia","canAttachPolls","canSendStickers","canSendGifs","canAttachEmbedLinks","isAdmin","getMessageSendingRestrictionReason","sendMessages","untilDate","formatDateToString","formatTime","getChatSlowModeOptions","slowMode","isChatArchived","folderId","selectIsChatMuted","notifySettings","notifyExceptions","isMuted","hasPrivateChatsNotifications","hasBroadcastNotifications","hasGroupNotifications","selectShouldShowMessagePreview","hasPrivateChatsMessagePreview","hasBroadcastMessagePreview","hasGroupMessagePreview","getCanDeleteChat","getFolderDescriptionText","folder","chatsCount","emoticon","pinnedChatIds","excludedChatIds","includedChatIds","excludeArchived","excludeMuted","excludeRead","values","bots","groups","channels","contacts","nonContacts","getMessageSenderName","getUserFirstOrLastName","sortChatIds","chatIds","shouldPrioritizeVerified","priorityIds","orderBy","priority","date","isVerified","filterChatsByName","searchWords","prepareSearchWordsForNeedle","getMessageHtmlId","getMessageKey","msgId","buildMessageKey","parseMessageKey","Number","getMessageOriginalId","previousLocalId","sticker","video","audio","voice","poll","webPage","contact","getMessageCustomShape","isRound","parseEmojiOnlyString","getMessageSingleEmoji","getFirstLinkInMessage","link","find","isOwnMessage","isOutgoing","isReplyMessage","replyToMessageId","isForwardedMessage","forwardInfo","isActionMessage","isServiceNotificationMessage","isAnonymousOwnMessage","senderId","getSenderTitle","getSendingState","sendingState","isMessageLocal","isHistoryClearMessage","getMessageContentFilename","isLottie","isVideo","isWebpSupported","baseFilename","IS_OPUS_SUPPORTED","areReactionsEmpty","reactions","results","l","count","isGeoLiveExpired","timestamp","period","getMessageRecentReaction","recentReactions","checkIfReactionAdded","oldReactions","newReactions","every","reaction","oldReactionsMap","acc","r","SPOILER_CHARS","noReactions","isExtended","getMessageTextWithSpoilers","accText","spoiler","fill","random","generateBrailleSpoiler","groupedId","truncatedText","summary","isGif","getMessageAudioCaption","question","performer","getMessageContent","hasMessageMedia","getMessagePhoto","getMessageVideo","getMessageDocument","getMessageSticker","getMessageContact","getMessagePoll","getMessageAction","getMessageAudio","getMessageVoice","getMessageRoundVideo","isMessageDocumentPhoto","mediaType","isMessageDocumentVideo","getMessageInvoice","getMessageLocation","getMessageWebPage","getMessageWebPagePhoto","getMessageWebPageVideo","getMessageMediaThumbDataUri","media","getMessageMediaThumbnail","dataUri","buildStaticMapHash","geo","width","height","zoom","scale","long","lat","accuracyRadius","getMessageMediaHash","webPagePhoto","webPageVideo","messageVideo","messagePhoto","mediaId","hasMessageLocalBlobUrl","getVideoOrAudioBaseHash","getAudioHasCover","IS_PROGRESSIVE_SUPPORTED","thumbnailSizes","getMessageMediaFormat","fullVideo","getMessageFileName","getMessageFileSize","blobUrl","getChatMediaMessageIds","messages","listedIds","isFromSharedMedia","getMessageContentIds","getPhotoFullDimensions","sizes","getPhotoInlineDimensions","getVideoDimensions","getMediaTransferState","isLoadNeeded","isUploading","isTransferring","transferProgress","messageIds","contentType","validator","matchLinkInMessageText","getMediaDuration","duration","buildChatThreadKey","STRIPE_ERRORS","missing_payment_information","field","invalid_number","number","exp_year","exp_month","invalid_expiry_year","invalid_expiry_month","cvc","invalid_cvc","getStripeError","param","USER_COLOR_KEYS","isDeletedUser","getUserStatus","userStatus","wasOnline","getTime","wasOnlineDate","diff","today","setHours","yesterday","setDate","getDate","formatFullDate","isUserOnline","noStatus","isUserBot","getCanAddContact","isContact","sortUserIds","userIds","userStatusesById","getServerTime","expires","filterUsersByName","savedMessagesLang","getUserIdDividend","abs","getUserColorKey","peer","typed","typify","replaceChatListIds","newIds","listIds","updateChatListIds","idsUpdate","replaceChats","newById","updateChat","chatUpdate","updatedChat","getUpdatedChat","updatedById","keys","addChats","isUpdated","addedById","isMin","shouldOmitMinInfo","omit","photos","updateChatListType","listType","currentListIds","listTypeKey","currentFolderList","updateChatListSecondaryInfo","info","totalCountKey","orderedPinnedIds","totalChatCount","isFullyLoaded","leaveChat","leftChatId","selectChatListType","listId","addChatMembers","membersToAdd","currentMembers","members","newMemberIds","m","updatedMembers","currentIds","updatedIds","areSortedArraysEqual","updateStickerSets","category","sets","resultIds","updatedSets","stickerSet","existing","stickers","setsById","setIds","updateStickerSet","stickerSetId","currentStickerSet","addedSets","added","installedDate","updateGifSearch","isNew","nextOffset","currentResults","gifs","newResults","gif","replaceAnimatedEmojis","animatedEmojis","updateStickersForEmoji","remoteStickers","allStickers","selectStickersForEmoji","uniqueIds","unique","forEmoji","rebuildStickersForEmoji","replaceUsers","updateContactList","updatedUsers","contactUserIds","contactList","newContactUserIds","userUpdate","updatedUser","getUpdatedUser","updateUsers","deleteContact","MEMO_EMPTY_ARRAY","updateUserSearch","searchStatePartial","userSearch","updateUserSearchFetchingStatus","newState","fetchingStatus","updateUserBlockedState","isBlocked","replaceUserStatuses","statusesById","addUserStatuses","newKeys","pick","closeNewContactDialog","newContact","getComplexKey","updateGlobalSearch","globalSearch","updateGlobalSearchContent","currentContent","updateGlobalSearchResults","newFoundMessages","nextRate","resultsByType","newFoundMessagesById","foundIdsForType","foundIds","newId","updateGlobalSearchFetchingStatus","prevFoundIds","newFoundIds","prototype","foundOrPrevFoundIds","nextOffsetId","replaceLocalTextSearch","chatThreadKey","searchParams","localTextSearch","byChatThreadKey","updateLocalTextSearch","isActive","replaceLocalTextSearchResults","updateLocalTextSearchResults","orderFoundIds","replaceLocalMediaSearch","localMediaSearch","byChatId","updateLocalMediaSearchType","currentType","updateLocalMediaSearchResults","replaceLocalMediaSearchResults","sort","a","b","updateManagementProgress","management","updateManagement","newSettings","themes","notifyException","exceptionData","addNotifyException","updateTwoFaSettings","twoFaSettings","updateShippingOptions","shippingOptions","payment","setRequestInfoId","requestId","setPaymentStep","step","setInvoiceMessageInfo","photoUrl","invoiceContent","setStripeCardInfo","cardInfo","stripeCredentials","setSmartGlocalCardInfo","smartGlocalCredentials","setPaymentForm","form","setConfirmPaymentUrl","confirmPaymentUrl","setReceipt","receipt","messageInvoice","clearPayment","closeInvoice","isPaymentModalOpen","updateStatistics","statistics","updateStatisticsGraph","updateCurrentMessageList","shouldReplaceHistory","messageLists","newMessageLists","last","replaceChatMessages","updateMessageStore","updateThread","threadUpdate","threadsById","replaceThreadParam","paramName","newValue","addMessages","addedByChatId","messagesByChatId","addChatMessagesById","selectChatMessages","updateChatMessage","messageUpdate","updatedMessage","updateScheduledMessage","selectScheduledMessages","replaceScheduledMessages","deleteChatMessages","deletedForwardedPosts","pickTruthy","isLinkedChannelPost","threadInfo","selectThreadInfo","selectListedIds","outlyingIds","selectOutlyingIds","viewportIds","selectViewportIds","pinnedIds","selectPinnedIds","newMessageCount","messagesCount","currentMessageList","selectCurrentMessageList","canDeleteCurrentThread","currentThreadId","fromChatId","fromMessageId","originalPost","selectChatMessage","deleteChatScheduledMessages","scheduledIds","selectScheduledIds","updateListedIds","orderHistoryIds","updateOutlyingIds","addViewportId","safeReplaceViewportIds","newViewportIds","updateThreadInfo","newThreadInfo","updateThreadInfos","updates","scheduledMessages","updateScheduledMessages","updateFocusedMessage","noHighlight","isResizingContainer","focusedMessage","updateSponsoredMessage","sponsoredByChatId","updateFocusDirection","direction","enterMessageSelectMode","selectedMessages","toggleMessageSelection","messageListType","childMessageIds","withShift","oldSelectedMessages","selectMessageIdsByGroupId","selectedMessageIds","newMessageIds","newSelectedMessageIds","selectCurrentMessageIds","prevIndex","currentIndex","to","exitMessageSelectMode","updateThreadUnreadFromForwardedMessage","originMessage","lastMessageId","isDeleting","channelPostId","threadInfoOld","selectChat","selectIsChatWithSelf","selectIsChatWithBot","selectChatUser","selectSupportChat","isSupport","selectChatOnlineCount","onlineCount","selectChatBot","selectIsChatBotNotStarted","bot","messageInfo","selectAreActiveChatsLoaded","active","selectIsChatListed","targetList","list","selectChatFolder","chatFolders","selectIsChatPinned","archived","chatFoldersById","selectChatByUsername","usernameLowered","selectIsServiceChatReady","selectSendAs","sendAsId","selectCurrentStickerSearch","selectCurrentGifSearch","selectStickerSet","selectStickerSetByShortName","shortName","stickerSets","stickersForEmoji","favorite","packs","cleanEmoji","selectAnimatedEmoji","cleanedEmoji","selectAnimatedEmojiEffect","animatedEmojiEffects","selectAnimatedEmojiSound","emojiSounds","selectLocalAnimatedEmoji","selectLocalAnimatedEmojiEffect","selectLocalAnimatedEmojiEffectByName","selectCurrentChat","selectThreadParam","thread","selectScrollOffset","selectReplyingToId","selectEditingId","selectEditingDraft","selectEditingScheduledId","selectEditingScheduledDraft","selectDraft","selectNoWebPage","selectFirstMessageId","selectReplyStack","selectThreadOriginChat","originChannelId","selectThreadTopMessageId","topMessageId","selectThreadByMessage","replyToTopMessageId","selectIsMessageInCurrentMessageList","selectIsViewportNewest","chatMessages","selectScheduledMessage","selectEditingMessage","selectChatMessageByPollId","pollId","messageWithPoll","selectFocusedMessageId","focusedChatId","selectIsMessageFocused","focusedId","selectIsMessageUnread","lastReadOutboxMessageId","selectOutgoingStatus","isScheduledList","selectSender","selectForwardedSender","isChannelPost","senderUserId","selectAllowedMessageActions","isPrivate","isChatWithSelf","isBasicGroup","isSuperGroup","isChannel","isLocal","isServiceNotification","isOwn","isAction","isMessageEditable","viaBotId","canReply","hasPinPermission","canPin","canUnpin","pinnedMessageIds","canDelete","canReport","canDeleteForAll","canEdit","canForward","hasSticker","hasFavoriteSticker","selectIsStickerFavorite","canFaveSticker","canUnfaveSticker","canCopy","canCopyLink","canSelect","canDownload","canSaveGif","noOptions","ability","selectCanDeleteSelectedMessages","messageActions","selectCanReportSelectedMessages","selectCanDownloadSelectedMessages","selectIsDownloading","activeInChat","activeDownloads","selectActiveDownloadIds","selectUploadProgress","fileUploads","byMessageLocalId","selectRealLastReadId","lastReadInboxMessageId","Infinity","selectFirstUnreadId","lastReadId","lastReadServiceNotificationId","serviceNotifications","notification","isUnread","findAfterLastReadId","isFromScheduled","found","selectIsForwardModalOpen","forwardMessages","isModalShown","selectCommonBoxChatId","fromLastMessage","selectIsInSelectMode","selectIsMessageSelected","selectForwardedMessageIdsByGroupId","selectIsDocumentGroupSelected","selectedIds","groupIds","selectSelectedMessagesCount","selectNewestMessageWithBotKeyboardButtons","findLast","keyboardButtons","replyHideMessageId","shouldHideKeyboardButtons","selectCanAutoLoadMedia","isPhoto","isFile","canAutoLoadPhotoFromContacts","canAutoLoadPhotoInPrivateChats","canAutoLoadPhotoInGroups","canAutoLoadPhotoInChannels","canAutoLoadVideoFromContacts","canAutoLoadVideoInPrivateChats","canAutoLoadVideoInGroups","canAutoLoadVideoInChannels","canAutoLoadFileFromContacts","canAutoLoadFileInPrivateChats","canAutoLoadFileInGroups","canAutoLoadFileInChannels","canAutoLoadMedia","canAutoLoadMediaFromContacts","canAutoLoadMediaInPrivateChats","canAutoLoadMediaInGroups","canAutoLoadMediaInChannels","isMediaFromContact","selectIsUserOrChatContact","selectCanAutoPlayMedia","canAutoPlayVideos","canAutoPlayGifs","asGif","selectShouldLoopStickers","shouldLoopStickers","selectLastServiceNotification","maxId","selectIsMessageProtected","isProtected","selectHasProtectedMessage","selectSponsoredMessage","expiresAt","selectDefaultReaction","defaultReaction","availableReactions","isInactive","enabledReactions","selectVisibleUsers","selectShouldSchedule","selectCanScheduleUntilOnline","chatBot","selectUserStatus","selectCurrentTextSearch","currentSearch","selectCurrentMediaSearch","selectStatistics","selectManagement","selectCurrentManagementType","selectIsMediaViewerOpen","mediaViewer","avatarOwnerId","selectRightColumnContentKey","pollResults","selectIsPollResultsOpen","RightColumnContent","IS_SINGLE_COLUMN_LAYOUT","currentManagement","selectCurrentManagement","isStatisticsShown","currentChatId","canViewStatistics","selectIsStatisticsShown","newChatMembersProgress","NewChatMembersProgress","isChatInfoShown","selectIsRightColumnShown","shouldUseSystemTheme","getSystemTheme","selectCurrentGlobalSearchQuery","selectPaymentChatId","selectPaymentMessageId","selectPaymentFormId","formId","selectPaymentRequestId","selectProviderPublishableKey","nativeParams","publishableKey","selectProviderPublicToken","publicToken","selectStripeCredentials","selectSmartGlocalCredentials","selectNotifyExceptions","selectIsUserBlocked","selectUserByPhoneNumber","phoneNumberCleaned","hasFocus","removeEventListener","cb","dependencies","debugKey","prevDeps","usePrevious","initial","setValue","setTrue","setFalse","setTrigger","ANIMATION_START_EVENT","ANIMATION_END_EVENT","timeout","isAnimating","isHeavyAnimating","onEnd","clearTimeout","dispatchEvent","Event","handleAnimationStart","handleAnimationEnd","isDisabled","LOCATION_HASH","PATH_BASE","pathname","historyState","nextStateIndexToReplace","isHistoryAltered","isEdge","currentIndexes","disableHistoryBack","handleTouchEnd","onBack","onForward","currentState","shouldReplaceNext","hashes","indexRef","isForward","prevIsActive","isClosed","indexHashRef","prevHashes","isHashChangedFromEvent","isForceClose","prev","history","pushState","state","realDelta","indexLast","findIndex","go","replaceState","back","handlePopState","currIndex","disableHistoryAnimations","hasChanged","forceClose","touches","pageX","innerWidth","onSelectWithEnter","itemSelector","noCaptureFocus","focusedIndex","setFocusedIndex","element","querySelectorAll","newIndex","item","forceUpdate","useForceUpdate","useOnChange","langProvider","bundleName","moduleName","noLoad","autoUpdate","module","getModuleFromMemory","addLoadListener","loadModule","d","next","shouldSkipUndefined","onCloseTransitionEnd","noOpenTransition","noCloseTransition","setIsClosed","closeTimeoutRef","hasOpenClassName","setHasOpenClassName","shouldHaveOpenClassName","isClosing","shouldRender","handleEvent","contains","NON_BUBBLEABLE_EVENTS","documentEventCounters","delegationRegistryByEventType","delegatedEventTypesByElement","propName","handler","asCapture","eventType","resolveEventType","canUseEventDelegation","addDelegatedListener","removeDelegatedListener","tagName","realEventType","resolveDelegationRegistry","newSet","resolveDelegatedEventTypes","removeAllDelegatedListeners","eventTypes","realEvent","events","furtherCallsPrevented","Proxy","p","Reflect","parentNode","documentListenersCount","delegatedHandlersCount1","counter","delegationRegistriesCount","delegatedHandlersCount2","delegationRegistry","delegationElementsCount","delegatedEventTypesCount","FILTERED_ATTRIBUTES","HTML_ATTRIBUTES","MAPPED_ATTRIBUTES","autoPlay","headsByElement","renderWithVirtual","parentEl","$current","$new","$parent","skipComponentUpdate","forceIndex","fragment","moveDirection","isCurrentComponent","isComponentElement","isNewComponent","hasElementChanged","updateComponent","componentInstance","isMounted","setupComponentUpdateListener","newTarget","getTarget","initComponent","node","createNode","setTarget","childNodes","insertBefore","appendChild","removeChild","unmountTree","replaceChild","areComponents","isRealElement","nextSibling","updateAttributes","renderChildren","$element","mountComponent","$firstChild","renderComponent","isEmptyElement","createTextNode","isTextElement","tag","entries","$child","currentEl","firstChild","child","DEBUG_checkKeyUniqueness","teactFastList","$newChild","currentRemainingIndex","remainingByKey","$currentChild","isKeyPresent","newChildKey","order","teactOrderKey","fragmentQueue","fragmentIndex","newChildren","currentPreservedIndex","currentChildInfo","flushFragmentQueue","shouldMoveNode","isMovingDown","renderFastListChildren","currentChildrenLength","newChildrenLength","createDocumentFragment","$fragmentChild","currentEntries","newEntries","currentValue","cssText","removeAttribute","__html","render","headId","getAttribute","$head","VirtualElementTypesEnum","Fragment","Symbol","DEBUG_SILENT_RENDERS_FOR","renderingInstance","Empty","Text","isTagElement","Tag","Component","flatten","createComponentInstance","buildTagElement","parsedChildren","hooks","cursor","byCursor","effects","memos","buildComponentElement","dropEmptyTail","buildChildElement","isEmptyPlaceholder","DEBUG_components","newRenderedValue","DEBUG_startAt","componentName","renderCount","renderTimes","performance","handleError","renderedValue","newChild","$old","memoContainer","cleanup","hook","effect","nextValue","setter","helpGc","prepareComponentForFrame","prepareForFrame","throttleWithPrimaryRaf","throttleWithRaf","forceUpdateComponent","currentElement","componentElement","DEBUG_contentComponentName","useLayoutEffectBase","schedulerFn","primarySchedulerFn","execCleanup","dependency","causedBy","res","prevValue","fastRafPrimary","useLayoutEffect","onTickEnd","onTickEndPrimary","resolver","getUnequalProps","newCallback","currentGlobal","actionHandlers","callbacks","containers","mapStateToProps","ownProps","mappedProps","newMappedProps","isNaN","DEBUG_componentName","arePropsShallowEqual","areMappedPropsChanged","DEBUG_updates","updateTime","runCallbacksThrottled","throttleWithTickEnd","runCallbacks","newGlobal","handleAction","addCallback","removeCallback","TeactNContainer","vs16RegExp","zeroWidthJoiner","rawEmoji","LoadMoreDirection","FocusDirection","SettingsScreens","LeftColumnContent","GlobalSearchContent","MediaViewerOrigin","AudioOrigin","ChatCreationProgress","ManagementProgress","ProfileState","PaymentStep","ManagementScreens","currentInstance","animateSingle","tick","instance","isCancelled","animate","timingFunctions","linear","easeIn","easeOut","easeInOut","sin","PI","easeInQuad","easeOutQuad","easeInOutQuad","easeInCubic","easeOutCubic","easeInOutCubic","easeInQuart","easeOutQuart","easeInOutQuart","easeInQuint","easeOutQuint","easeInOutQuint","animateNumber","timing","t0","canceled","f","unreadCount","setAppBadge","currentProps","newProps","currentKeys","currentKeysLength","prop","elementName","baseName","modifiers","modifier","self","caches","Type","fetch","cacheName","isHtmlAllowed","request","Request","cache","open","headers","Blob","blob","shouldRecreate","resolvedType","Json","json","save","cacheData","Response","put","clear","createCallbackManager","hasCallbacks","captureKeyboardListener","onEsc","keyToHandlerName","Enter","Backspace","Delete","Esc","Escape","ArrowUp","ArrowDown","ArrowLeft","ArrowRight","Tab","handlers","onEnter","onDelete","onBackspace","onUp","onDown","onLeft","onRight","onTab","captureKeyboardListeners","hasActiveHandlers","handlerName","currentEventHandlers","releaseKeyboardListener","keyHandlers","CLIPBOARD_ITEM_SUPPORTED","clipboard","ClipboardItem","textCopyEl","str","selection","getSelection","rangeToRestore","rangeCount","getRangeAt","select","execCommand","removeAllRanges","addRange","copyImageToClipboard","imageUrl","canvas","ctx","getContext","imageEl","Image","onload","img","drawImage","toBlob","copyBlobToClipboard","pngBlob","write","WEEKDAYS_FULL","MONTHS_FULL","MONTHS_FULL_LOWERCASE","month","MILLISECONDS_IN_DAY","isToday","getDayStartAt","getDayStart","datetime","toYearMonth","getFullYear","getMonth","toIsoString","hours","getHours","marker","padStart","getMinutes","formatPastTimeShort","weekAgo","getDay","withYear","format","formatDate","formatMonthAndYear","isShort","formatCountdown","msLeft","days","formatMediaDuration","formatCountdownShort","ceil","formatLastUpdated","currentTime","lastUpdated","seconds","formatHumanDate","noWeekdays","isUpperFirst","upperFirst","lowerFirst","weekAhead","weekDay","formatKey","day","monthIndex","formatMediaDateTime","maxValue","minutes","maxHours","maxMinutes","string","formatVoiceRecordDuration","durationInMs","milliseconds","formatDayToStringWithCache","withCache","dayStartAt","locale","toLocaleString","year","formatDateTimeToString","hour","minute","second","isValidDate","MAX_MONTH_IN_YEAR","parseDateString","matchStringDate","matchEuropeStringDate","matchNumberDate","dateParts","timestampPlusDay","EXCLUDE_EMOJIS","EMOJI_EXCEPTIONS","unifiedToNative","unified","codePoints","parseInt","fromCodePoint","regex","replacement","pairs","uncompressEmoji","emojiData","categories","emojiRaw","names","native","image","isoToEmoji","iso","test","codePointAt","isWebpSupportedCache","webp","handleLoadOrError","onerror","hasWebp","systemThemeCache","matches","os","getPlatform","IS_PWA","standalone","referrer","IS_TABLET_COLUMN_LAYOUT","IS_VOICE_RECORDING_SUPPORTED","mediaDevices","AudioContext","webkitAudioContext","IS_SERVICE_WORKER_SUPPORTED","Audio","canPlayType","IS_CANVAS_FILTER_SUPPORTED","IS_REQUEST_FULLSCREEN_SUPPORTED","ARE_CALLS_SUPPORTED","LAYERS_ANIMATION_NAME","TEST_VIDEO","DPR","devicePixelRatio","MASK_IMAGE_DISABLED","CSS","supports","IS_SCROLL_PATCH_NEEDED","MESSAGE_LIST_SENSITIVE_AREA","dataUriToBlob","arr","mime","bstr","atob","u8arr","Uint8Array","blobToDataUri","reader","FileReader","readAsDataURL","blobToFile","File","lastModified","preloadImage","preloadVideo","volume","onloadedmetadata","createPosterForVideo","onseeked","videoWidth","videoHeight","toDataURL","fetchBlob","fetchFile","imgToCanvas","constructor","fileBits","rest","super","this","initials","buildInitials","prevGlobal","prepared","updateFolderManagerThrottled","throttle","onIdle","updateFolderManager","inited","getOrderedIds","orderedIdsByFolderId","getPinnedChatsCount","pinnedCountByFolderId","getChatsCount","chatsCountByFolderId","getUnreadCounters","unreadCountersByFolderId","getAllNotificationsCount","notificationsCount","addOrderedIdsCallback","addChatsCountCallback","addUnreadCountersCallback","DEBUG_startedAt","isAllFolderChanged","isMainFolderChanged","isArchivedFolderChanged","isAllFullyLoadedChanged","isAllFolderFullyLoaded","isArchivedFullyLoadedChanged","isArchivedFolderFullyLoaded","areFoldersChanged","foldersById","areChatsChanged","areUsersChanged","areNotifySettingsChanged","areNotifyExceptionsChanged","affectedFolderIds","emptyFolderIds","folderSummariesById","updateFullyLoaded","updateResults","prevAllFolderListIds","allFolderListIds","prevArchivedFolderListIds","archivedFolderListIds","changedFolders","newListIds","newPinnedIds","buildFolderSummaryFromMainList","allFolderPinnedIds","archivedFolderPinnedIds","newFoldersById","buildFolderSummary","updateFolders","newChatsById","newUsersById","newNotifySettings","newNotifyExceptions","folderSummaries","newAllFolderListIds","newArchivedFolderListIds","allIds","newFolderIds","currentSummary","chatSummariesById","newSummary","unreadMentionsCount","hasUnreadMark","joinDate","draftDate","userInfo","isListed","isArchived","isUserContact","buildChatSummary","chatSummary","folderSummary","isChatInFolder","buildChatFolderIds","currentFolderIds","folderIdsByChatId","deletedFolderIds","currentFolderIdsSet","newFolderIdsSet","currentFolderOrderedIds","chatIdsByFolderId","isOrderedListJustPatched","updateListsForChat","currentPinnedIds","wasUnreadCountersChanged","wasChatsCountChanged","pinnedCount","newPinnedCount","orderedIds","newOrderedIds","prevOrderedIds","sortedPinnedIds","allListIds","sortedNotPinnedIds","chatId1","chatId2","buildFolderOrderedIds","currentOrderedIds","currentPinnedCount","currentChatsCount","newChatsCount","currentUnreadCounters","newUnreadCounters","buildFolderUnreadCounters","newInitials","totalPrice","Intl","NumberFormat","store","hasOwnProperty","READABLE_ERROR_MESSAGES","CHAT_RESTRICTED","CHAT_WRITE_FORBIDDEN","CHAT_SEND_POLL_FORBIDDEN","CHAT_SEND_STICKERS_FORBIDDEN","CHAT_SEND_GIFS_FORBIDDEN","CHAT_SEND_MEDIA_FORBIDDEN","CHAT_LINK_EXISTS","SLOWMODE_WAIT_X","USER_BANNED_IN_CHANNEL","USER_IS_BLOCKED","YOU_BLOCKED_USER","IMAGE_PROCESS_FAILED","MEDIA_EMPTY","MEDIA_INVALID","PHOTO_EXT_INVALID","PHOTO_INVALID_DIMENSIONS","PHOTO_SAVE_FILE_INVALID","MESSAGE_DELETE_FORBIDDEN","MESSAGE_POLL_CLOSED","MESSAGE_EDIT_TIME_EXPIRED","CHAT_ADMIN_REQUIRED","PINNED_DIALOGS_TOO_MUCH","DIALOG_FILTERS_TOO_MUCH","CHANNEL_PRIVATE","MEDIA_CAPTION_TOO_LONG","ADDRESS_STREET_LINE1_INVALID","ADDRESS_STREET_LINE2_INVALID","ADDRESS_CITY_INVALID","ADDRESS_COUNTRY_INVALID","ADDRESS_POSTCODE_INVALID","ADDRESS_STATE_INVALID","REQ_INFO_NAME_INVALID","REQ_INFO_PHONE_INVALID","REQ_INFO_EMAIL_INVALID","LINK_NOT_MODIFIED","MESSAGE_TOO_LONG","SERVICE_WORKER_DISABLED","MESSAGE_TOO_LONG_PLEASE_REMOVE_CHARACTERS","FRESH_RESET_AUTHORISATION_FORBIDDEN","BOTS_TOO_MUCH","BOT_GROUPS_BLOCKED","USERS_TOO_MUCH","USER_CHANNELS_TOO_MUCH","USER_KICKED","USER_NOT_MUTUAL_CONTACT","USER_PRIVACY_RESTRICTED","INVITE_HASH_EMPTY","INVITE_HASH_EXPIRED","INVITE_HASH_INVALID","CHANNELS_TOO_MUCH","USER_ALREADY_PARTICIPANT","SCHEDULE_DATE_INVALID","WALLPAPER_DIMENSIONS_INVALID","ADMINS_TOO_MUCH","ADMIN_RANK_EMOJI_NOT_ALLOWED","ADMIN_RANK_INVALID","FRESH_CHANGE_ADMINS_FORBIDDEN","INPUT_USER_DEACTIVATED","BOT_PRECHECKOUT_TIMEOUT","SHIPPING_ERRORS","getReadableErrorText","isSlowMode","textParams","extraPartIndex","errorMessage","handleErrorEvent","ErrorEvent","reason","alert","collection","member","mapValues","newByKey","object","stringKeys","orderRule","mode","compareValues","currentOrderRule","isAsc","aValue","bValue","mode1","mode2","orderRule1","orderRule2","isAsc1","isAsc2","array","array1","array2","areSortedArraysIntersecting","findIntersectionWithSet","chunkSize","cloneDeep","predicate","SUBSTITUTION_REGEX","PLURAL_OPTIONS","PLURAL_RULES","en","ar","ca","de","es","fa","fr","it","ko","ms","nl","pl","pt_BR","ru","tr","uk","uz","langPack","fallbackLangPack","currentLangCode","currentTimeFormat","cacheValue","cached","langString","processTranslation","importFallbackLangPack","getTranslationForLangString","translateString","remoteLangPack","remote","fetchRemoteString","withFallback","newLangPack","fetchRemote","langInfo","rtl","sourceLangPacks","template","optionIndex","getPluralOption","translationSlices","initialValue","processTemplate","formatInteger","SAMPLE_RATE","oggToWav","opusData","arrayBuffer","typedArray","decoderWorker","wavWorker","onmessage","buffers","buffer","page","terminate","wavBitDepth","wavSampleRate","decoderSampleRate","outputBufferSampleRate","pages","asCacheApiType","memoryCache","fetchPromises","progressCallbacks","cancellableCallbacks","mediaFormat","onProgress","callbackUniqueId","getProgressive","fetchFromCacheOrRemote","activeCallbacks","getFromMemory","cancelProgress","parentCallback","progressiveUrl","mediaPng","webpToPng","prepareMedia","mediaSource","MediaSource","streamUrl","sourceBuffer","addSourceBuffer","makeOnProgress","revokeObjectURL","endOfStream","appendBuffer","mediaData","serviceWorker","fullSize","controller","Bundles","LOAD_PROMISES","MEMORY_CACHE","Auth","Main","Extra","Calls","bundle","getDeviceToken","subscription","toJSON","endpoint","checkIfPushSupported","ServiceWorkerRegistration","Notification","permission","soundPlayedIds","playNotifySound","notificationSoundVolume","currentVolume","once","playNotifySoundDebounced","requestPermission","unsubscribeFromPush","dispatch","deleteDeviceToken","serviceWorkerRegistration","ready","pushManager","getSubscription","areSettingsLoaded","checkIfShouldResubscribe","userVisibleOnly","setDeviceToken","DOMException","ABORT_ERR","notifyAboutMessage","isReaction","resultSettings","resultExceptions","loadNotificationSettings","checkIfShouldNotify","areNotificationsSupported","activeReaction","imageHash","getAvatar","messageSender","messageAction","actionTargetMessage","targetUserIds","actionTargetUserIds","actionTargetChatId","actionTargetUsers","privateChatUserId","privateChatUser","isChat","senderName","getNotificationContent","badge","vibrate","onclick","close","startActiveReaction","onshow","closeMessageNotifications","notifyClientReady","PERMANENT_VERSION_KEY","AVAILABLE_VERSIONS","setPermanentWebVersion","version","hasPermanentWebVersion","PATTERN_PLACEHOLDER","DEFAULT_PATTERN","getCountryCodesByIso","phoneCodeList","country","iso2","getCountryFromPhoneNumber","possibleCountries","countryCode","codesWithPrefix","prefixes","prefix","bestMatches","formatPhoneNumber","pattern","numberWithoutCode","patterns","defaultPattern","stripped","getBestPattern","formatPhoneNumberWithCode","numberWithPlus","createMessageHash","messageList","typeOrThreadId","parseLocationHash","isType","fn","waitingTimeout","shouldRunFirst","shouldRunLast","interval","isPending","_args","setInterval","clearInterval","throttleWith","waiting","requestIdleCallback","rafPromise","fastRafCallbacks","fastRafPrimaryCallbacks","onTickEndCallbacks","onTickEndPrimaryCallbacks","beforeUnloadCallbacks","isPrimary","currentCallbacks","currentPrimaryCallbacks","onBeforeUnload","isLast","unshift","RE_NOT_LETTER","haystack","needle","needleWords","haystackLower","haystackWords","needleWord","haystackWord","promisifyRequest","oncomplete","onsuccess","onabort","defaultGetStoreFunc","defaultGetStore","dbName","storeName","dbp","userAgentData","indexedDB","databases","tryIdb","intervalId","onupgradeneeded","createObjectStore","txMode","db","transaction","objectStore","createStore","DC_IDS","hasStoredSession","withLegacy","userAuthJson","dcID","dcId","removeItem","sessionId","sessionJson","customStore","idb","idbKeys","getAllKeys","items","openCursor","continue","eachCursor","isInitialized","HEX_COLOR_REGEX","RGB_VARIABLES","lerp","start","end","interpolationRatio","colors","themeColors","property","hexToRgb","hex","g","applyColorAnimationStep","startIndex","endIndex","propertyColors","withAnimation","isDarkTheme","shouldAnimate","startAt","themeColorTag","querySelector","transition","formatFixedNumber","formatIntegerCompact","views","getFirstLetters","phrase","word","EMPTY_IMAGE_DATA_URI","initWebpWorker","wasmReady","requests","getDecodePromise","ImageData","putImageData","createPng","webpToPngBase64","handleLibWebpMessage","WEBSYNC_URLS","WEBSYNC_VERSION","WEBSYNC_KEY","getTs","lastTimeout","authed","currentTs","canRedirect","ts","script","removeElement","URLSearchParams","saveSync","clearWebsync","IS_LANDSCAPE","isLandscape","initialHeight","currentWindowSize","updateSizes","isRefreshDisabled","handleResize","visualViewport","pageTop","vh","getIsKeyboardVisible","disableRefresh","enableRefresh","WeakMap","fnCache","cacheKey","exports","o","h","v","_","M","S","A","C","getPatternPosition","u","getBCHTypeNumber","getBCHTypeInfo","getMaskFunction","getRSBlocks","getMode","getLength","getLengthInBits","dataCount","putBit","getBuffer","getErrorCorrectPolynomial","mod","getAt","addData","isDark","getModuleCount","make","getLostPoint","createTableTag","createSvgTag","arguments","cellSize","margin","scalable","O","createDataURL","createImgTag","charAt","createASCII","renderTo2dContext","fillStyle","fillRect","stringToBytes","stringToBytesFuncs","createStringToBytes","read","L","Q","H","multiply","gexp","glog","SJIS","writeByte","writeShort","writeBytes","writeString","toByteArray","setPixel","flush","apply","__esModule","defineProperty","enumerable","click","onloadend","svg","_svg","_type","draw","_drawDot","_drawClassy","_drawClassyRounded","_drawRounded","_drawExtraRounded","_drawSquare","getNeighbor","_rotateFigure","rotation","_element","_basicDot","createElementNS","_basicSquare","_basicSideRounded","_basicCornerRounded","_basicCornerExtraRounded","_basicCornersRounded","_basicExtraRounded","throw","done","_defs","_options","getElement","drawQR","shape","sqrt","hideXDots","hideYDots","_qr","loadImage","_image","imageOptions","qrOptions","imageSize","errorCorrectionLevel","SVGImageElement","baseVal","naturalWidth","naturalHeight","originalHeight","originalWidth","maxHiddenDots","maxHiddenAxisDots","dotSize","drawBackground","drawDots","hideBackgroundDots","drawCorners","backgroundOptions","gradient","_createColor","additionalRotation","_backgroundClipPath","dotsOptions","_dotsClipPath","transformOrigin","transform","$","D","cornersSquareOptions","_cornersSquareClipPath","_cornersDotClipPath","cornersDotOptions","crossOrigin","tan","colorStops","typeNumber","static","_setupSvg","_svgDrawingPromise","_extension","_setupCanvas","_canvas","_canvasDrawingPromise","XMLSerializer","serializeToString","btoa","_getElement","_clearContainer","_container","append","applyExtension","deleteExtension","getRawData","encodeURIComponent","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","__webpack_modules__","getter","getPrototypeOf","obj","ns","create","def","getOwnPropertyNames","definition","chunkId","promises","miniCssF","globalThis","Function","needAttach","scripts","getElementsByTagName","charset","nc","onScriptComplete","doneFns","bind","head","toStringTag","scriptUrl","importScripts","currentScript","fullhref","existingLinkTags","dataHref","existingStyleTags","findStylesheet","linkTag","errorType","realHref","createStylesheet","miniCss","baseURI","installedChunks","installedChunkData","realSrc","webpackJsonpCallback","parentChunkLoadingFunction","chunkIds","moreModules","runtime","chunkLoadingGlobal","handleWorkerMessage","registrations","getRegistrations","unregister","register","hasErrorKey","INITIAL_STATE","isLeftColumnShown","phoneCodes","general","groupCalls","activeChatFolder","recentEmojis","recent","greeting","featured","emojiKeywords","saved","inlineBots","byUsername","topPeers","topInlineBots","playbackRate","audioPlayer","notifications","dialogs","messageSendKeyCombo","autoLoadFileMaxSizeMb","shouldSuggestStickers","isConnectionStatusMinimized","light","isBlurred","patternColor","dark","activeReactions","shouldShowContextMenuHint","updateCacheThrottled","updateCache","unsubscribeFromBeforeUnload","isCaching","setupCaching","clearCaching","reducedGlobal","reduceShowChatInfo","reduceUsers","reduceChats","reduceMessages","recentlyFoundChatIds","reduceSettings","reduceChatFolders","reduceGroupCalls","reduceAvailableReactions","visibleUserIds","idsToSave","currentChat","mainThread","activeGroupCallId","isGroupCallPanelHidden","isFallbackConfirmOpen","initialState","time","timeEnd","shouldAutoDownloadMediaFromContacts","shouldAutoDownloadMediaInPrivateChats","shouldAutoDownloadMediaInGroups","shouldAutoDownloadMediaInChannels","shouldAutoPlayVideos","shouldAutoPlayGifs","migrateCache","parsedMessageList","readCache","loadCache","STORAGE_KEY","tabKey","SITE_FONTS","preloadFonts","font","fonts","load","preloadAvatars","preloadTasks","main","reactionThumbsPath","telegramLogoPath","authCode","monkeyPath","authPassword","background","hasCustomBackground","hasCustomBackgroundColor","isRightColumnShown","leftColumnWidth","setIsUiReady","isReady","markReady","shouldRenderMask","safePreload","translation","setTranslation","getSuggestedLanguage","suggestedLanguage","MENU_HIDING_DURATION","inputRef","setFilter","filteredList","setFilteredList","updateFilter","filterValue","defaultName","getFilteredList","prevPhoneCodeList","handleInput","handleInputKeyDown","CodeInput","handleTrigger","formEl","getElementById","scrollTo","top","scrollHeight","behavior","inputValue","Spinner","DropdownMenu","MenuItem","isPreloadInitiated","setAuthPhoneNumber","setAuthRememberMe","loadNearestCountry","loadCountryList","clearAuthError","goToAuthQrCode","continueText","useLangString","setCountry","setPhoneNumber","isTouched","setIsTouched","lastSelection","setLastSelection","markIsLoading","unmarkIsLoading","fullNumber","canSubmit","parseFullNumber","newFullNumber","suggestedCountry","selectedCountry","handleLangChange","setSelectionRange","isJustPastedRef","handlePaste","handleCountryChange","handlePhoneNumberChange","selectionStart","selectionEnd","shouldFixSafariAutoComplete","handleKeepSessionChange","isAuthReady","onSubmit","InputText","Checkbox","Button","Loading","AuthCode","useModuleLoader","AuthPassword","AuthRegister","QR_CODE","QrCodeStyling","blankUrl","returnToAuthPhoneNumber","qrCodeRef","isQrMounted","markQrMounted","unmarkQrMounted","setAnimationData","isAnimationLoaded","setIsAnimationLoaded","handleAnimationLoad","parentElement","token","AnimatedSticker","isMobile","windowSize","AuthQrCode","handleReload","appInactivePath","renderMain","disconnect","markInactive","TeactDOM"],"sourceRoot":""} \ No newline at end of file diff --git a/dist/opera.c97c326dee36ae4426e1..svg b/dist/opera.c97c326dee36ae4426e1..svg new file mode 100644 index 000000000..6ad93828a --- /dev/null +++ b/dist/opera.c97c326dee36ae4426e1..svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/dist/report.html b/dist/report.html index 2dd49ed06..f32017536 100644 --- a/dist/report.html +++ b/dist/report.html @@ -3,7 +3,7 @@ - telegram-t [25 Mar 2022 at 13:31] + telegram-t [1 Apr 2022 at 21:03] diff --git a/dist/safari.38e22a99575c5e8cc9cd..svg b/dist/safari.38e22a99575c5e8cc9cd..svg new file mode 100644 index 000000000..0d18899a6 --- /dev/null +++ b/dist/safari.38e22a99575c5e8cc9cd..svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/dist/samsung.cb5a46b8b3d340424c5f..svg b/dist/samsung.cb5a46b8b3d340424c5f..svg new file mode 100644 index 000000000..74d392dab --- /dev/null +++ b/dist/samsung.cb5a46b8b3d340424c5f..svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/dist/ubuntu.75a406b40e691fa18b17..svg b/dist/ubuntu.75a406b40e691fa18b17..svg new file mode 100644 index 000000000..22b89fed6 --- /dev/null +++ b/dist/ubuntu.75a406b40e691fa18b17..svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/dist/unknown.fa5280d9b0d1a0bd6402..svg b/dist/unknown.fa5280d9b0d1a0bd6402..svg new file mode 100644 index 000000000..4abc0daa8 --- /dev/null +++ b/dist/unknown.fa5280d9b0d1a0bd6402..svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/dist/vivaldi.5d1833ca4b2f2b087a42..svg b/dist/vivaldi.5d1833ca4b2f2b087a42..svg new file mode 100644 index 000000000..8a93941fd --- /dev/null +++ b/dist/vivaldi.5d1833ca4b2f2b087a42..svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/dist/windows.3ec278d6200e130e0b42..svg b/dist/windows.3ec278d6200e130e0b42..svg new file mode 100644 index 000000000..93b6779fe --- /dev/null +++ b/dist/windows.3ec278d6200e130e0b42..svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/dist/xbox.0c4b680a881da0b245bc..svg b/dist/xbox.0c4b680a881da0b245bc..svg new file mode 100644 index 000000000..266d403b2 --- /dev/null +++ b/dist/xbox.0c4b680a881da0b245bc..svg @@ -0,0 +1 @@ + \ No newline at end of file