UNPKG

p3x-redis-ui-material

Version:

💿 The p3x-redis-ui-material web interface that connects to the p3x-redis-ui-server via http and socket.io

33 lines 308 kB
/*! 

@license p3x-redis-ui-material v2021.4.138
  
💿 The p3x-redis-ui-material web interface that connects to the p3x-redis-ui-server via http and socket.io

https://corifeus.com/redis-ui-material

Copyright (c) 2021 Patrik Laszlo / P3X / Corifeus and contributors.

MIT License

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.    

For more information about all licenses, please see main.625e65a6f7a480a62d4e.js.LICENSE.txt
 */
(()=>{var e,t,n,o,r,i,s,a={9862:e=>{e.exports='<md-dialog class="fullscreen-dialog"> <form novalidate name="p3xrConnectionForm" ng-submit="submit()"> <md-toolbar md-theme="{{ $root.p3xr.state.themeLayout }}" class="md-hue-3"> <div class="md-toolbar-tools"> <h2 flex md-truncate>{{ $root.p3xr.state.cfg.readonlyConnections ? $root.p3xr.strings.label.connectiondView : options.type === \'new\' ? $root.p3xr.strings.label.connectiondAdd : $root.p3xr.strings.label.connectiondEdit }}</h2> <md-button class="md-icon-button" ng-click="cancel()"> <md-icon>close</md-icon> </md-button> </div> </md-toolbar> <md-dialog-content md-theme="{{ $root.p3xr.state.theme }}"> <md-content> <div class="p3xr-padding"> <md-input-container class="md-block"> <label>{{ $root.p3xr.strings.form.connection.label.name }}</label> <input required name="name" ng-model="model.name" ng-disabled="$root.p3xr.state.cfg.readonlyConnections"> <div ng-messages="p3xrConnectionForm.name.$error"> <div ng-message="required">{{ $root.p3xr.strings.form.error.required }}</div> </div> </md-input-container> <md-input-container class="md-block"> <label>{{ $root.p3xr.strings.form.connection.label.host }}</label> <input name="host" ng-model="model.host" ng-disabled="$root.p3xr.state.cfg.readonlyConnections"> </md-input-container> <md-input-container class="md-block"> <label>{{ $root.p3xr.strings.form.connection.label.port }}</label> <input name="port" type="number" min="1" max="65535" ng-model="model.port" ng-disabled="$root.p3xr.state.cfg.readonlyConnections"> <div ng-messages="p3xrConnectionForm.port.$error"> <div ng-message-exp="[\'min\', \'max\']"> {{ $root.p3xr.strings.form.error.port }} </div> </div> </md-input-container> <md-input-container class="md-block"> <label>{{ $root.p3xr.strings.form.connection.label.username }}</label> <input name="username" type="text" ng-model="model.username" ng-disabled="$root.p3xr.state.cfg.readonlyConnections" autocomplete="off"> </md-input-container> <md-input-container class="md-block p3xr-md-input-container-no-bottom"> <label>{{ $root.p3xr.strings.form.connection.label.password }}</label> <input name="password" type="password" ng-model="model.password" ng-disabled="$root.p3xr.state.cfg.readonlyConnections" autocomplete="off"> </md-input-container> <div class="p3xr-md-input-container-bottom-info"> {{ $root.p3xr.strings.label.passwordSecure }} </div> <span ng-if="$root.p3xr.state.donated"> <md-input-container style="margin:0"> <md-switch ng-model="model.readonly" name="readonly" aria-label="" ng-disabled="$root.p3xr.state.cfg.readonlyConnections"> {{ model.readonly ? $root.p3xr.strings.label.readonly.on : $root.p3xr.strings.label.readonly.off }} </md-switch> </md-input-container> <md-input-container style="margin:0"> <md-switch ng-model="model.awsElastiCache" name="awsElastiCache" aria-label="" ng-disabled="$root.p3xr.state.cfg.readonlyConnections"> {{ model.awsElastiCache ? $root.p3xr.strings.label.awsElastiCache.on : $root.p3xr.strings.label.awsElastiCache.off }} </md-switch> </md-input-container> <md-input-container style="margin:0"> <md-switch ng-model="model.azure" name="azure" aria-label="" ng-disabled="$root.p3xr.state.cfg.readonlyConnections"> {{ model.azure ? $root.p3xr.strings.label.azure.on : $root.p3xr.strings.label.azure.off }} </md-switch> </md-input-container> <md-input-container style="margin:0"> <md-switch ng-model="model.cluster" name="cluster" aria-label="" ng-disabled="$root.p3xr.state.cfg.readonlyConnections"> {{ model.cluster ? $root.p3xr.strings.label.cluster.on : $root.p3xr.strings.label.cluster.off }} </md-switch> </md-input-container> <span ng-if="model.cluster === true && !$root.p3xr.state.cfg.readonlyConnections" ng-click="addNode()"> <md-button class="md-fab md-primary md-mini"> <md-icon>add</md-icon> </md-button> {{ $root.p3xr.strings.label.addNode }} </span> <div ng-if="model.cluster === true"> <div ng-repeat="node in model.nodes"> <fieldset> <legend>Node {{$index + 1}}</legend> <div style="float:right" ng-if="!$root.p3xr.state.cfg.readonlyConnections"> <md-button class="md-fab md-warn md-mini" ng-click="removeNode($event, $index)"> <md-tooltip>{{ $root.p3xr.strings.confirm.deleteConnectionText }}</md-tooltip> <md-icon>delete</md-icon> </md-button> <md-button class="md-fab md-primary md-mini" ng-click="addNode($index)"> <md-tooltip>{{ $root.p3xr.strings.label.addNode }}</md-tooltip> <md-icon>add</md-icon> </md-button> </div> <md-input-container class="md-block"> <label>{{ $root.p3xr.strings.form.connection.label.host }}</label> <input name="host{{$index}}" ng-model="node.host" ng-disabled="$root.p3xr.state.cfg.readonlyConnections"> </md-input-container> <md-input-container class="md-block"> <label>{{ $root.p3xr.strings.form.connection.label.port }}</label> <input required name="port{{$index}}" type="number" min="1" max="65535" ng-model="node.port" ng-disabled="$root.p3xr.state.cfg.readonlyConnections"> <div ng-messages="p3xrConnectionForm[\'port\' +  $index].$error"> <div ng-message-exp="[\'min\', \'max\']"> {{ $root.p3xr.strings.form.error.port }} </div> <div ng-message="required">{{ $root.p3xr.strings.form.error.required }}</div> </div> </md-input-container> <md-input-container class="md-block"> <label>{{ $root.p3xr.strings.form.connection.label.username }}</label> <input name="username{{$index}}" type="text" ng-model="node.username" ng-disabled="$root.p3xr.state.cfg.readonlyConnections" autocomplete="off"> </md-input-container> <md-input-container class="md-block p3xr-md-input-container-no-bottom"> <label>{{ $root.p3xr.strings.form.connection.label.password }}</label> <input name="password{{$index}}" type="password" ng-model="node.password" ng-disabled="$root.p3xr.state.cfg.readonlyConnections"> </md-input-container> <div class="p3xr-md-input-container-bottom-info"> {{ $root.p3xr.strings.label.passwordSecure }} </div> </fieldset> <div ng-if="$last !== true" style="margin-bottom:16px"> &nbsp; </div> <div style="clear:both"></div> </div> </div> </span> </div> </md-content> </md-dialog-content> <md-dialog-actions md-theme="{{ $root.p3xr.state.theme }}" class="p3xr-dialog-connection-actions"> <md-button class="md-raised md-warn" ng-click="cancel()" md-autofocus> <md-icon>cancel</md-icon> <span ng-if="$root.$mdMedia(\'(min-width: 699px)\')">{{ $root.p3xr.strings.intention.cancel }}</span> <md-tooltip ng-if="$root.$mdMedia(\'(max-width: 699px)\')" md-direction="top">{{ $root.p3xr.strings.intention.cancel }} </md-tooltip> </md-button> <span md-theme="{{ $root.p3xr.state.themeCommon }}"> <md-button class="md-raised md-primary" ng-click="testConnection()"> <i class="fas fa-plug"></i> {{ $root.p3xr.strings.intention.testConnection }} </md-button> </span> <md-button class="md-raised md-primary" type="submit" ng-if="!$root.p3xr.state.cfg.readonlyConnections"> <md-icon>{{ options.type === \'new\' ? \'add\' : \'save\' }}</md-icon> {{ options.type === \'new\' ? $root.p3xr.strings.intention.add : $root.p3xr.strings.intention.save }} </md-button> </md-dialog-actions> </form> </md-dialog> '},8133:e=>{e.exports='<md-dialog aria-label="{{ $root.p3xr.strings.intention.jsonViewShow }}" class="fullscreen-dialog fullscreen-dialog-fix-width"> <md-toolbar md-theme="{{$root.p3xr.state.themeLayout}}" class="md-hue-3"> <div class="md-toolbar-tools"> <md-icon>edit</md-icon> &nbsp; {{ $root.p3xr.strings.intention.jsonViewEditor }} <span flex></span> <md-button class="md-icon-button" ng-click="ok()" aria-label="{{ $root.p3xr.strings.intention.close }}"> <md-icon>close</md-icon> </md-button> </div> </md-toolbar> <md-dialog-content flex md-theme="{{ $root.p3xr.state.theme }}" class="p3xr-roboto-monospace" style="height:100vh"> <md-content style="height:100%"> <div ng-if="!isJson" layout-padding> {{ $root.p3xr.strings.label.jsonViewNotParsable}} </div> <div ng-if="isJson" id="p3xr-jsoneditor" style="width:100%;height:100%"></div> </md-content> </md-dialog-content> <md-dialog-actions md-theme="{{ $root.p3xr.state.theme }}"> <md-button ng-click="ok()" class="md-raised md-warn" aria-label="{{ $root.p3xr.strings.intention.close }}" md-autofocus> <md-icon>cancel</md-icon> <span hide-sm hide-xs>{{ $root.p3xr.strings.intention.cancel }}</span> <md-tooltip ng-if="$root.$mdMedia(\'sm\') || $root.$mdMedia(\'xs\')" md-direction="top">{{ $root.p3xr.strings.intention.cancel }}</md-tooltip> </md-button> <md-button ng-if="isJson && $root.p3xr.state.connection.readonly !== true" class="md-raised md-primary" ng-click="save({ format : false})"> <md-icon>save</md-icon> <span hide-sm hide-xs>{{ $root.p3xr.strings.intention.save }}</span> <md-tooltip ng-if="$root.$mdMedia(\'sm\') || $root.$mdMedia(\'xs\')" md-direction="top">{{ $root.p3xr.strings.intention.save }}</md-tooltip> </md-button> <md-button ng-if="isJson && $root.p3xr.state.connection.readonly !== true" class="md-raised md-primary" ng-click="save({ format : true})"> <md-icon>save</md-icon> <md-icon>format_line_spacing</md-icon> <span hide-sm hide-xs>{{ $root.p3xr.strings.intention.saveWithFormatJson }}</span> <md-tooltip ng-if="$root.$mdMedia(\'sm\') || $root.$mdMedia(\'xs\')" md-direction="top">{{ $root.p3xr.strings.intention.saveWithFormatJson }}</md-tooltip> </md-button> </md-dialog-actions>  </md-dialog> '},3857:e=>{e.exports='<md-dialog aria-label="{{ $root.p3xr.strings.intention.jsonViewShow }}" class="fullscreen-dialog"> <md-toolbar md-theme="{{$root.p3xr.state.themeLayout}}"> <div class="md-toolbar-tools"> <md-icon>table_chart</md-icon> &nbsp; {{ $root.p3xr.strings.intention.jsonViewShow }} <span flex></span> <md-button class="md-icon-button" aria-label="" ng-if="isJson" ng-click="treeExpandAll()"> <md-tooltip>{{ $root.p3xr.strings.page.treeControls.expandAll}}</md-tooltip> <md-icon>keyboard_arrow_down</md-icon> </md-button> <md-button class="md-icon-button" aria-label="" ng-if="isJson" ng-click="treeCollapseAll()"> <md-tooltip>{{ $root.p3xr.strings.page.treeControls.collapseAll}}</md-tooltip> <md-icon>keyboard_arrow_up</md-icon> </md-button> <md-button class="md-icon-button" ng-click="ok()" aria-label="{{ $root.p3xr.strings.intention.close }}"> <md-icon>close</md-icon> </md-button> </div> </md-toolbar> <md-dialog-content flex md-theme="{{ $root.p3xr.state.theme }}"> <md-content class="p3xr-roboto-monospace"> <div class="p3xr-padding"> <json-tree object="obj" root-name="$root.p3xr.strings.label.tree" ng-if="isJson && howExpanded === true" start-expanded="howExpanded"></json-tree> <json-tree object="obj" root-name="$root.p3xr.strings.label.tree" ng-if="isJson && howExpanded === \'recursive\'" start-expanded="howExpanded"></json-tree> <div ng-if="!isJson"> {{ $root.p3xr.strings.label.jsonViewNotParsable}} </div> </div> </md-content> </md-dialog-content> <md-dialog-actions md-theme="{{ $root.p3xr.state.theme }}"> <md-button ng-click="ok()" class="md-raised md-accent" aria-label="{{ $root.p3xr.strings.intention.close }}" md-autofocus> <md-icon>close</md-icon> {{ $root.p3xr.strings.intention.close }} </md-button> </md-dialog-actions>  </md-dialog> '},5817:e=>{e.exports='<md-dialog aria-label="{{$root.p3xr.strings.form.key.label.formName}}" class="fullscreen-dialog fullscreen-dialog-fix-width"> <form novalidate name="p3xrKeyNewForm" ng-submit="submit()"> <md-toolbar md-theme="{{ $root.p3xr.state.themeLayout }}" class="md-hue-3"> <div class="md-toolbar-tools"> <h2 flex md-truncate> {{ options.type === \'edit\' ? $root.p3xr.strings.form.key.label.formName.edit : ( options.type === \'append\' ? $root.p3xr.strings.form.key.label.formName.append : $root.p3xr.strings.form.key.label.formName.add ) }} </h2> <md-button class="md-icon-button" ng-click="cancel()"> <md-icon>close</md-icon> </md-button> </div> </md-toolbar> <md-dialog-content md-theme="{{ $root.p3xr.state.theme }}"> <md-content> <div class="p3xr-padding"> <md-input-container class="md-block"> <label>{{ $root.p3xr.strings.form.key.field.key }}</label> <input required minlength="1" ng-model="model.key" name="key" ng-disabled="options.type !== \'add\'"> <div ng-messages="p3xrKeyNewForm.key.$error"> <div ng-message-exp="[\'required\', \'minlength\']"> {{ $root.p3xr.strings.form.key.error.key }} </div> </div> </md-input-container> <md-input-container class="md-block"> <label>{{ $root.p3xr.strings.form.key.field.type }}</label> <md-select ng-model="model.type" name="type" ng-disabled="options.type !== \'add\'"> <md-option ng-repeat="type in types" ng-value="type"> {{ $root.p3xr.strings.redisTypes[type] }} </md-option> </md-select> </md-input-container> <span ng-switch="model.type"> <span ng-switch-when="list"> <md-input-container class="md-block"> <label>{{ $root.p3xr.strings.form.key.field.index }}</label> <input type="number" step="1" ng-model="model.index" name="index"> </md-input-container> <div class="p3xr-md-input-container-bottom-info"> {{ $root.p3xr.strings.label.redisListIndexInfo }} </div> </span> <span ng-switch-when="hash"> <md-input-container class="md-block"> <label>{{ $root.p3xr.strings.form.key.field.hashKey }}</label> <input required minlength="1" ng-model="model.hashKey" name="hashKey"> <div ng-messages="p3xrKeyNewForm.hashKey.$error"> <div ng-message-exp="[\'required\', \'minlength\']"> {{ $root.p3xr.strings.form.key.error.hashKey }} </div> </div> </md-input-container> </span> <span ng-switch-when="zset"> <md-input-container class="md-block"> <label>{{ $root.p3xr.strings.form.key.field.score }}</label> <input type="number" required ng-model="model.score" name="score"> <div ng-messages="p3xrKeyNewForm.score.$error"> <div ng-message-exp="[\'required\']"> {{ $root.p3xr.strings.form.key.error.score }} </div> </div> </md-input-container> </span> <span ng-switch-when="stream"> <md-input-container class="md-block"> <label>{{ $root.p3xr.strings.form.key.field.streamTimestamp }}</label> <input type="text" required ng-model="model.streamTimestamp" name="streamTimestamp"> <div ng-messages="p3xrKeyNewForm.streamTimestamp.$error"> <div ng-message-exp="[\'required\']"> {{ $root.p3xr.strings.form.key.error.streamTimestamp }} </div> </div> <div class="p3xr-md-input-container-bottom-info"> {{ $root.p3xr.strings.label.streamTimestampId }} </div> </md-input-container> </span> </span> <md-button class="md-button md-raised md-primary" ng-if="$root.p3xr.state.donated" ng-click="jsonEditor({ $event: $event, value: model.value})"> <i class="fas fa-file-alt"></i> <span hide-sm hide-xs>{{ $root.p3xr.strings.intention.jsonViewEditor }}</span> <md-tooltip ng-if="$root.$mdMedia(\'sm\') || $root.$mdMedia(\'xs\')" md-direction="bottom">{{ $root.p3xr.strings.intention.jsonViewEditor }} </md-tooltip> </md-button> <md-button class="md-button md-raised md-primary" ng-click="formatJson({ $event: $event})"> <md-icon>format_line_spacing</md-icon> <span hide-sm hide-xs>{{ $root.p3xr.strings.intention.formatJson }}</span> <md-tooltip ng-if="$root.$mdMedia(\'sm\') || $root.$mdMedia(\'xs\')" md-direction="bottom">{{ $root.p3xr.strings.intention.formatJson }} </md-tooltip> </md-button> <md-button class="md-button md-raised md-accent" ng-click="jsonViewer({ $event: $event, value: model.value})"> <md-icon>table_chart</md-icon> <span hide-sm hide-xs>{{ $root.p3xr.strings.intention.jsonViewShow }}</span> <md-tooltip ng-if="$root.$mdMedia(\'sm\') || $root.$mdMedia(\'xs\')" md-direction="bottom">{{ $root.p3xr.strings.intention.jsonViewShow }} </md-tooltip> </md-button> <md-button class="md-icon-button md-accent" ng-click="copy({ $event: $event, value: model.value})"> <md-tooltip>{{ $root.p3xr.strings.intention.copy }}</md-tooltip> <md-icon>content_copy</md-icon> </md-button> <md-switch ng-model="validateJson" class="md-accent" style="margin-top:0"> {{ $root.p3xr.strings.label.validateJson }} </md-switch> <div ng-if="model.type === \'stream\'" class="p3xr-md-input-container-bottom-info"> {{ $root.p3xr.strings.label.streamValue }} </div> <md-input-container class="md-block"> <label>{{ $root.p3xr.strings.form.key.field.value }}</label> <textarea ng-model="model.value" required p3x-validate-json p3x-validate-json-required="validateJson" name="value"></textarea> <div ng-messages="p3xrKeyNewForm.value.$error"> <div ng-message="required"> {{ $root.p3xr.strings.form.key.error.value }} </div> <div ng-message="p3xValidateJson"> {{ $root.p3xr.strings.label.jsonViewNotParsable }} </div> </div> </md-input-container> </div> </md-content> </md-dialog-content> <md-dialog-actions md-theme="{{ $root.p3xr.state.theme }}"> <md-button class="md-raised md-warn" ng-click="cancel()" md-autofocus> <md-icon>cancel</md-icon> {{ $root.p3xr.strings.intention.cancel }} </md-button> <md-button class="md-raised md-primary" type="submit" ng-if="$root.p3xr.state.connection.readonly !== true"> <md-icon>{{ options.type === \'edit\' ? \'edit\' : \'add\'}}</md-icon> {{ options.type === \'edit\' ? $root.p3xr.strings.intention.save : $root.p3xr.strings.intention.add }} </md-button> </md-dialog-actions> </form> </md-dialog> '},526:e=>{e.exports='<md-dialog class="fullscreen-dialog"> <form novalidate name="p3xrDialogTreecontrolSettingsForm" ng-submit="submit()"> <md-toolbar md-theme="{{ $root.p3xr.state.themeLayout }}" class="md-hue-3"> <div class="md-toolbar-tools"> <h2 flex md-truncate>{{$root.p3xr.strings.form.treeSettings.label.formName}}</h2> <md-button class="md-icon-button" ng-click="cancel()"> <md-icon>close</md-icon> </md-button> </div> </md-toolbar> <md-dialog-content md-theme="{{ $root.p3xr.state.theme }}"> <md-content> <div class="p3xr-padding"> <div ng-if="$root.p3xr.state.reducedFunctions"> <div> {{ $root.p3xr.strings.form.treeSettings.keyCount() }} </div> <br/> <div> {{ $root.p3xr.strings.label.tooManyKeys({ count: $root.p3xr.state.keysRaw.length, maxLightKeysCount: $root.p3xr.settings.maxLightKeysCount}) }} </div> <br/> </div> <md-input-container class="md-block p3xr-md-input-container-no-bottom"> <label>{{ $root.p3xr.strings.form.treeSettings.field.treeSeparator }}</label> <input name="treeSeparator" ng-model="model.treeSeparator"> </md-input-container> <div class="p3xr-md-input-container-bottom-info"> {{ $root.p3xr.strings.label.treeSeparatorEmpty }} </div> <br/> <md-input-container class="md-block p3xr-md-input-container-no-bottom"> <label>{{ $root.p3xr.strings.form.treeSettings.field.page }}</label> <input type="number" required min="5" max="1000" name="pageCount" step="1" pattern="\\d*" ng-model="model.pageCount"> <div ng-messages="p3xrDialogTreecontrolSettingsForm.pageCount.$error"> <div ng-message-exp="[\'required\', \'min\', \'max\', \'pattern\']"> {{ $root.p3xr.strings.form.treeSettings.error.page }} </div> </div> </md-input-container> <br/> <md-input-container class="md-block p3xr-md-input-container-no-bottom"> <label>{{ $root.p3xr.strings.form.treeSettings.field.keyPageCount }}</label> <input type="number" required min="5" max="100" name="keyPageCount" step="1" pattern="\\d*" ng-model="model.keyPageCount"> <div ng-messages="p3xrDialogTreecontrolSettingsForm.keyPageCount.$error"> <div ng-message-exp="[\'required\', \'min\', \'max\', \'pattern\']"> {{ $root.p3xr.strings.form.treeSettings.error.keyPageCount }} </div> </div> </md-input-container> <br/> <md-input-container class="md-block p3xr-md-input-container-no-bottom"> <label>{{ $root.p3xr.strings.form.treeSettings.maxValueDisplay }}</label> <input type="number" required min="-1" max="32768" name="maxValueDisplay" step="1" pattern="-?\\d*" ng-model="model.maxValueDisplay"> <div ng-messages="p3xrDialogTreecontrolSettingsForm.maxValueDisplay.$error"> <div ng-message-exp="[\'required\', \'min\', \'max\', \'pattern\']"> {{ $root.p3xr.strings.form.treeSettings.error.maxValueDisplay }} </div> </div> </md-input-container> <div class="p3xr-md-input-container-bottom-info"> {{ $root.p3xr.strings.form.treeSettings.maxValueDisplayInfo }} </div> <br/> <md-input-container class="md-block p3xr-md-input-container-no-bottom"> <label>{{ $root.p3xr.strings.form.treeSettings.maxKeys }}</label> <input type="number" required min="5" max="100000" name="maxKeys" step="1" pattern="-?\\d*" ng-model="model.maxKeys"> <div ng-messages="p3xrDialogTreecontrolSettingsForm.maxKeys.$error"> <div ng-message-exp="[\'required\', \'min\', \'max\', \'pattern\']"> {{ $root.p3xr.strings.form.treeSettings.error.maxKeys }} </div> </div> </md-input-container> <div class="p3xr-md-input-container-bottom-info"> {{ $root.p3xr.strings.form.treeSettings.maxKeysInfo }} </div> <span ng-if="!$root.p3xr.state.reducedFunctions" style="margin:0;padding:0"> <md-input-container class="md-block p3xr-md-input-container-no-bottom"> <md-switch ng-model="model.keysSort" name="keysSort" aria-label="" class="p3xr-md-input-container-no-bottom p3xr-md-input-container-no-top"> {{ model.keysSort ? $root.p3xr.strings.label.keysSort.on : $root.p3xr.strings.label.keysSort.off }} </md-switch> </md-input-container> <div class="p3xr-md-input-container-bottom-info"> {{ $root.p3xr.strings.label.treeKeyStore }} </div> <md-input-container class="md-block p3xr-md-input-container-no-bottom"> <md-switch ng-model="model.searchClientSide" name="searchClientSide" aria-label="" ng-disabled="$root.p3xr.state.dbsize > $root.p3xr.settings.maxLightKeysCount" class="p3xr-md-input-container-no-bottom p3xr-md-input-container-no-top"> {{ model.searchClientSide ? $root.p3xr.strings.form.treeSettings.label.searchModeClient : $root.p3xr.strings.form.treeSettings.label.searchModeServer }} </md-switch> </md-input-container> <div class="p3xr-md-input-container-bottom-info"> {{ $root.p3xr.strings.page.treeControls.search.info }} <div ng-if="$root.p3xr.state.dbsize > $root.p3xr.settings.maxLightKeysCount "> <br/> {{ $root.p3xr.strings.page.treeControls.search.largeSetInfo }} </div> </div> </span> <br/> <md-input-container class="md-block p3xr-md-input-container-no-bottom p3xr-md-input-container-no-top"> <md-switch ng-model="model.searchStartsWith" name="searchStartsWith" aria-label="" class="p3xr-md-input-container-no-bottom p3xr-md-input-container-no-top"> {{ model.searchStartsWith ? $root.p3xr.strings.form.treeSettings.label.searchModeStartsWith : $root.p3xr.strings.form.treeSettings.label.searchModeIncludes }} </md-switch> </md-input-container> <md-input-container class="md-block p3xr-md-input-container-no-bottom p3xr-md-input-container-no-top"> <md-switch ng-model="model.jsonFormat" name="jsonFormat" aria-label="" class="p3xr-md-input-container-no-bottom p3xr-md-input-container-no-top"> {{ model.jsonFormat ? $root.p3xr.strings.form.treeSettings.label.jsonFormatTwoSpace : $root.p3xr.strings.form.treeSettings.label.jsonFormatFourSpace }} </md-switch> </md-input-container> <md-input-container class="md-block p3xr-md-input-container-no-bottom p3xr-md-input-container-no-top"> <md-switch ng-model="model.animation" name="animation" aria-label="" class="p3xr-md-input-container-no-bottom p3xr-md-input-container-no-top"> {{ model.animation ? $root.p3xr.strings.form.treeSettings.label.animation : $root.p3xr.strings.form.treeSettings.label.noAnimation }} </md-switch> </md-input-container> </div> </md-content> </md-dialog-content> <md-dialog-actions md-theme="{{ $root.p3xr.state.theme }}"> <md-button class="md-raised md-warn" ng-click="cancel()" md-autofocus> <md-icon>cancel</md-icon> {{ $root.p3xr.strings.intention.cancel }} </md-button> <md-button class="md-raised md-primary" type="submit"> <md-icon>save</md-icon> {{ $root.p3xr.strings.intention.save }} </md-button> </md-dialog-actions> </form> </md-dialog> '},5006:e=>{e.exports='<md-dialog> <form novalidate name="p3xrTtlForm" ng-submit="submit()"> <md-toolbar md-theme="{{ $root.p3xr.state.themeLayout }}" class="md-hue-3"> <div class="md-toolbar-tools"> <h2 flex md-truncate>{{ $root.p3xr.strings.confirm.ttl.title}}</h2> <md-button class="md-icon-button" ng-click="cancel()"> <md-icon>close</md-icon> </md-button> </div> </md-toolbar> <md-dialog-content md-theme="{{ $root.p3xr.state.theme }}"> <md-content class="p3xr-padding"> <div class="md-text"> {{ $root.p3xr.strings.confirm.ttl.textContent }} </div> <md-input-container class="md-block"> <label>{{ $root.p3xr.strings.confirm.ttl.placeholder }}</label> <input type="number" name="ttl" ng-model="model.ttl" min="-1" placeholder="{{ $root.p3xr.strings.confirm.ttl.placeholderPlaceholder }}"> <div ng-messages="p3xrTtlForm.ttl.$error"> </div> </md-input-container> <md-input-container class="md-block p3xr-md-input-container-no-bottom"> <label>{{ $root.p3xr.strings.confirm.ttl.convertTextToTime }}</label> <input name="convertTextToTime" ng-model="convertTextToTime" placeholder="{{ $root.p3xr.strings.confirm.ttl.convertTextToTimePlaceholder}}"> <div ng-messages="p3xrTtlForm.convertTextToTime.$error"> </div> </md-input-container> <md-button ng-click="openTimestringNpm()" class="md-accent">https://www.npmjs.com/package/timestring</md-button> </md-content> </md-dialog-content> <md-dialog-actions md-theme="{{ $root.p3xr.state.theme }}"> <md-button class="md-raised md-warn" ng-click="cancel()" md-autofocus> <md-icon>cancel</md-icon> {{ $root.p3xr.strings.intention.cancel }} </md-button> <md-button class="md-raised md-primary" type="submit"> <md-icon>timer</md-icon> {{ $root.p3xr.strings.intention.ttl }} </md-button> </md-dialog-actions> </form> </md-dialog> '},134:e=>{e.exports=' <div id="p3xr-layout-header-container"> <md-toolbar md-whiteframe="3"> <div class="md-toolbar-tools"> <p3xr-button ng-if="!$root.p3xr.state.failed" ui-sref="main.statistics" p3xr-label="$root.p3xr.strings.title.name" p3xr-fa-icon="fas fa-database"></p3xr-button> <p3xr-button ng-if="$root.p3xr.state.failed" ng-click="$root.locationReload()" p3xr-label="$root.p3xr.strings.title.name" p3xr-fa-icon="fas fa-redo"></p3xr-button> <span flex></span> <p3xr-button ng-if="!$root.p3xr.state.failed" ui-sref="settings" p3xr-label="$root.p3xr.strings.intention.settings" p3xr-md-icon="settings"></p3xr-button> <p3xr-button ng-if="$root.p3xr.state.connection" ui-sref="console" p3xr-label="$root.p3xr.strings.intention.console" p3xr-md-icon="keyboard"></p3xr-button> <p3xr-button ng-if="$root.p3xr.state.connection" ui-sref="main.statistics" p3xr-label="$root.p3xr.strings.intention.main" p3xr-md-icon="home"></p3xr-button> </div> </md-toolbar> </div> <div id="p3xr-layout-header-version-donated" md-colors="{ color: $ctrl.getVersionColor() }" ng-if="$root.isElectron === false && $root.p3xr.state.donated && $root.$mdMedia(\'(min-width: 699px)\')">{{ $root.p3xr.state.version }} </div> <div id="p3xr-layout-header-version-free" md-colors="{ color: $ctrl.getVersionColor() }" ng-if="$root.isElectron === false && !$root.p3xr.state.donated && $root.$mdMedia(\'(min-width: 699px)\')">{{ $root.p3xr.state.version }} </div> <div id="p3xr-layout-footer-container"> <md-toolbar> <div class="md-toolbar-tools"> <md-menu ng-if="$root.p3xr.state.connections.list.length > 0"> <p3xr-button ng-click="$mdMenu.open($event)" p3xr-label="$ctrl.connectionName" p3xr-md-icon="power" p3xr-tooltip-direction="top"></p3xr-button> <md-menu-content> <md-menu-item ng-repeat="connection in $root.p3xr.state.connections.list" ng-class="{\'p3xr-md-menu-item-selected\': $root.p3xr.state.connection.id  === connection.id}"> <md-button ng-click="$ctrl.connect(connection, true)"> {{ connection.name }} </md-button> </md-menu-item> </md-menu-content> </md-menu> <span ng-if="$root.p3xr.state.connection"> <md-button ng-click="$ctrl.disconnect()"> <i class="fa fa-power-off"></i> <span hide-xs hide-sm>{{ $root.p3xr.strings.intention.disconnect }}</span> <md-tooltip ng-if="$root.$mdMedia(\'xs\') || $root.$mdMedia(\'sm\')" md-direction="top">{{ $root.p3xr.strings.intention.disconnect }} </md-tooltip> </md-button> </span> <span flex></span> <p3xr-button ng-click="$ctrl.openLink.donate()" p3xr-label="$root.p3xr.strings.title.donate" p3xr-fa-icon="fas fa-donate" p3xr-tooltip-direction="top"></p3xr-button> <md-menu ng-if="!$root.isElectron || ($root.isElectron && $ctrl.isElectronInitialized)"> <md-button ng-click="$mdMenu.open($event)"> <md-icon>language</md-icon> <span hide-xs hide-sm>{{ $root.p3xr.strings.intention.language }}</span> <md-tooltip ng-if="$root.$mdMedia(\'xs\') || $root.$mdMedia(\'sm\')" md-direction="top">{{ $root.p3xr.strings.intention.language }} </md-tooltip> </md-button> <md-menu-content> <md-menu-item ng-repeat="(key, value) in $root.p3xr.strings.language" ng-class="{\'p3xr-md-menu-item-selected\': $root.p3xr.settings.language.current === key}"> <md-button ng-click="$ctrl.setLanguage(key)"> {{ $root.p3xr.strings.language[key] }} </md-button> </md-menu-item> </md-menu-content> </md-menu> <md-menu> <md-button ng-click="$mdMenu.open($event)"> <md-icon>color_lens</md-icon> <span hide-xs>{{ $root.p3xr.strings.intention.theme }}</span> <md-tooltip ng-if="$root.$mdMedia(\'xs\')" md-direction="top">{{ $root.p3xr.strings.intention.theme }} </md-tooltip> </md-button> <md-menu-content> <md-menu-item ng-repeat="key in $ctrl.getThemeKey($root.p3xr.theme)" ng-class="{\'p3xr-md-menu-item-selected\': $ctrl.themeSelectedKey === key}"> <md-button ng-click="$ctrl.setTheme(key)"> {{ $root.p3xr.strings.label.theme[key] }} </md-button> </md-menu-item> </md-menu-content> </md-menu> <md-menu> <md-button ng-click="$mdMenu.open($event)"> <i class="fab fa-github"></i> <span hide-xs hide-sm>{{ $root.p3xr.strings.intention.github }}</span> <md-tooltip ng-if="$root.$mdMedia(\'xs\') || $root.$mdMedia(\'sm\')" md-direction="top">{{ $root.p3xr.strings.intention.github }} </md-tooltip> </md-button> <md-menu-content> <md-menu-item> <md-button ng-click="$ctrl.openLink.github()"> {{ $root.p3xr.strings.intention.githubRepo }} </md-button> </md-menu-item> <md-menu-item> <md-button ng-click="$ctrl.openLink.githubRelease()"> {{ $root.p3xr.strings.intention.githubRelease }} </md-button> </md-menu-item> <md-menu-item> <md-button ng-click="$ctrl.openLink.githubChangelog()"> {{ $root.p3xr.strings.intention.githubChangelog }} </md-button> </md-menu-item> </md-menu-content> </md-menu> </div> </md-toolbar> </div> <div flex layout="row"> <div flex class="p3xr-layout-content"> <ui-view></ui-view> </div> </div> <div id="p3xr-layout-reduced" ng-show="$root.p3xr.state.reducedFunctions" md-theme="{{ $root.p3xr.state.themeCommon }}" md-colors="{ background: \'warn\', \'border-color\': \'warn-900-0.5\'}" ng-click="$ctrl.reducedFunctionalty()"> <md-icon style="font-size:20px">warning</md-icon> {{ $root.p3xr.strings.label.reducedFunction }} </div> '},176:e=>{e.exports='<div ng-if="$ctrl.pages > 1" style="text-align:center"> <md-button class="md-icon-button md-primary" aria-label="" ng-click="$ctrl.pager({ page: \'first\' })"> <md-tooltip>{{ $root.p3xr.strings.page.treeControls.pager.first}}</md-tooltip> <md-icon>skip_previous</md-icon> </md-button> <md-button class="md-icon-button" aria-label="" ng-click="$ctrl.pager({ page: \'prev\' })"> <md-tooltip>{{ $root.p3xr.strings.page.treeControls.pager.prev}}</md-tooltip> <md-icon>keyboard_arrow_left</md-icon> </md-button> <p3xr-input type="number" style="width:48px" step="1" min="1" ng-maxlength="$ctrl.pages" ng-change="$ctrl.pageChange()" ng-model="$ctrl.page"></p3xr-input> / {{ $ctrl.pages }} <md-button class="md-icon-button" aria-label="" ng-click="$ctrl.pager({ page: \'next\' })"> <md-tooltip>{{ $root.p3xr.strings.page.treeControls.pager.next}}</md-tooltip> <md-icon>keyboard_arrow_right</md-icon> </md-button> <md-button class="md-icon-button md-primary" aria-label="" ng-click="$ctrl.pager({ page: \'last\' })"> <md-tooltip>{{ $root.p3xr.strings.page.treeControls.pager.last}}</md-tooltip> <md-icon>skip_next</md-icon> </md-button> </div> <div layout-gt-xs="row" layout="column" layout-align-gt-sm="start center" layout-align="center center" md-colors="{ background: \'primary-300\' }"> <div flex="20"><span ng-if="!$root.$mdMedia(\'xs\')">&nbsp;</span>{{ $root.p3xr.strings.page.key.hash.table.hashkey }}</div> <div flex="60"> {{ $root.p3xr.strings.page.key.hash.table.value }} </div> <div flex="20" style="text-align:right" class="p3xr-connected-readonly-filler"> <md-button class="md-icon-button" ng-click="$ctrl.addHash({ $event: $event})" ng-if="$root.p3xr.state.connection.readonly !== true"> <md-tooltip>{{ $root.p3xr.strings.intention.add }}</md-tooltip> <md-icon>add</md-icon> </md-button> </div> </div> <div layout-gt-xs="row" layout="column" layout-align-gt-sm="start start" layout-align="center center" ng-repeat="(key, value) in $ctrl.pageBasedList()" ng-class="{ \'p3xr-list-key-odd-item\': $odd }" class="p3xr-list-key-item"> <div flex="20" ng-click="$ctrl.editValue({ hashKey: key, value: value, $event: $event})"><span ng-if="!$root.$mdMedia(\'xs\')">&nbsp;</span><span ng-if="$root.p3xr.settings.maxValueDisplay > 0 && key.length > $root.p3xr.settings.maxValueDisplay">{{ key.substring(0, $root.p3xr.settings.maxValueDisplay) }}...</span><span ng-if="$root.p3xr.settings.maxValueDisplay === 0 || key.length <= $root.p3xr.settings.maxValueDisplay || $root.p3xr.settings.maxValueDisplay === -1 ">{{ key }}</span></div> <div flex="60" class="p3xr-pre" style="overflow:auto;align-items:flex-start;max-height:200px" ng-click="$ctrl.editValue({ hashKey: key, value: value, $event: $event})"><span ng-if="$root.p3xr.settings.maxValueDisplay > 0 && value.length > $root.p3xr.settings.maxValueDisplay">{{ value.substring(0, $root.p3xr.settings.maxValueDisplay) }}...</span><span ng-if="$root.p3xr.settings.maxValueDisplay === 0 || value.length <= $root.p3xr.settings.maxValueDisplay || $root.p3xr.settings.maxValueDisplay === -1 ">{{ value }}</span></div> <div flex="20" style="text-align:right"> <md-button class="md-icon-button md-warn" ng-click="$ctrl.deleteHashKey({ hashKey: key, $event: $event})" ng-if="$root.p3xr.state.connection.readonly !== true"> <md-tooltip>{{ $root.p3xr.strings.intention.delete }}</md-tooltip> <md-icon>delete</md-icon> </md-button> <md-button class="md-icon-button md-accent" ng-click="$ctrl.showJson({ value: value})"> <md-tooltip>{{ $root.p3xr.strings.intention.jsonViewShow }}</md-tooltip> <md-icon>table_chart</md-icon> </md-button> <md-button class="md-icon-button md-accent" ng-click="$ctrl.copy({ $event: $event, value: value})"> <md-tooltip>{{ $root.p3xr.strings.intention.copy }}</md-tooltip> <md-icon>content_copy</md-icon> </md-button> <md-button class="md-icon-button md-primary" ng-click="$ctrl.editValue({ hashKey: key, value: value, $event: $event})"> <md-tooltip>{{ $root.p3xr.strings.intention.edit }}</md-tooltip> <md-icon>edit</md-icon> </md-button> </div> </div> '},2585:e=>{e.exports='<div ng-if="$ctrl.pages > 1" style="text-align:center"> <md-button class="md-icon-button md-primary" aria-label="" ng-click="$ctrl.pager({ page: \'first\' })"> <md-tooltip>{{ $root.p3xr.strings.page.treeControls.pager.first}}</md-tooltip> <md-icon>skip_previous</md-icon> </md-button> <md-button class="md-icon-button" aria-label="" ng-click="$ctrl.pager({ page: \'prev\' })"> <md-tooltip>{{ $root.p3xr.strings.page.treeControls.pager.prev}}</md-tooltip> <md-icon>keyboard_arrow_left</md-icon> </md-button> <p3xr-input type="number" style="width:48px" step="1" min="1" ng-maxlength="$ctrl.pages" ng-change="$ctrl.pageChange()" ng-model="$ctrl.page"></p3xr-input> / {{ $ctrl.pages }} <md-button class="md-icon-button" aria-label="" ng-click="$ctrl.pager({ page: \'next\' })"> <md-tooltip>{{ $root.p3xr.strings.page.treeControls.pager.next}}</md-tooltip> <md-icon>keyboard_arrow_right</md-icon> </md-button> <md-button class="md-icon-button md-primary" aria-label="" ng-click="$ctrl.pager({ page: \'last\' })"> <md-tooltip>{{ $root.p3xr.strings.page.treeControls.pager.last}}</md-tooltip> <md-icon>skip_next</md-icon> </md-button> </div> <div layout-gt-xs="row" layout="column" layout-align-gt-sm="start center" layout-align="center center" md-colors="{ background: \'primary-300\' }"> <div flex="20"> <span ng-if="!$root.$mdMedia(\'xs\')">&nbsp;</span> {{ $root.p3xr.strings.page.key.list.table.index }} </div> <div flex="60"> {{ $root.p3xr.strings.page.key.list.table.value }} </div> <div flex="20" style="text-align:right" class="p3xr-connected-readonly-filler"> <md-button class="md-icon-button" ng-click="$ctrl.appendValue({ $event: $event})" ng-if="$root.p3xr.state.connection.readonly !== true"> <md-tooltip>{{ $root.p3xr.strings.intention.add }}</md-tooltip> <md-icon>add</md-icon> </md-button> </div> </div> <div layout-gt-xs="row" layout="column" layout-align-gt-sm="start start" layout-align="center center" ng-repeat="value in $ctrl.pageBasedList() track by $index" ng-class="{ \'p3xr-list-key-odd-item\': $odd }" class="p3xr-list-key-item"> <div flex="20" ng-click="$ctrl.editValue({ index: $index, value: value, $event: $event})"> <span ng-if="!$root.$mdMedia(\'xs\')">&nbsp;</span> {{ $index + ($ctrl.pages * ($ctrl.page -1) ) }} </div> <div flex="60" class="p3xr-pre" style="overflow:auto;align-items:flex-start;max-height:200px" ng-click="$ctrl.editValue({ index: $index, value: value, $event: $event})"><span ng-if="$root.p3xr.settings.maxValueDisplay > 0 && value.length > $root.p3xr.settings.maxValueDisplay">{{ value.substring(0, $root.p3xr.settings.maxValueDisplay) }}...</span><span ng-if="$root.p3xr.settings.maxValueDisplay === 0 || value.length <= $root.p3xr.settings.maxValueDisplay|| $root.p3xr.settings.maxValueDisplay === -1 ">{{ value }}</span></div> <div flex="20" style="text-align:right"> <md-button class="md-icon-button md-warn" ng-click="$ctrl.deleteListElement({ index: $index, $event: $event})" ng-if="$root.p3xr.state.connection.readonly !== true"> <md-tooltip>{{ $root.p3xr.strings.intention.delete }}</md-tooltip> <md-icon>delete</md-icon> </md-button> <md-button class="md-icon-button md-accent" ng-click="$ctrl.showJson({ value: value})"> <md-tooltip>{{ $root.p3xr.strings.intention.jsonViewShow }}</md-tooltip> <md-icon>table_chart</md-icon> </md-button> <md-button class="md-icon-button md-accent" ng-click="$ctrl.copy({ $event: $event, value: value})"> <md-tooltip>{{ $root.p3xr.strings.intention.copy }}</md-tooltip> <md-icon>content_copy</md-icon> </md-button> <md-button class="md-icon-button md-primary" ng-click="$ctrl.editValue({ index: $index, value: value, $event: $event})"> <md-tooltip>{{ $root.p3xr.strings.intention.edit }}</md-tooltip> <md-icon>edit</md-icon> </md-button> </div> </div> '},7129:e=>{e.exports='<div ng-if="$ctrl.pages > 1" style="text-align:center"> <md-button class="md-icon-button md-primary" aria-label="" ng-click="$ctrl.pager({ page: \'first\' })"> <md-tooltip>{{ $root.p3xr.strings.page.treeControls.pager.first}}</md-tooltip> <md-icon>skip_previous</md-icon> </md-button> <md-button class="md-icon-button" aria-label="" ng-click="$ctrl.pager({ page: \'prev\' })"> <md-tooltip>{{ $root.p3xr.strings.page.treeControls.pager.prev}}</md-tooltip> <md-icon>keyboard_arrow_left</md-icon> </md-button> <p3xr-input type="number" style="width:48px" step="1" min="1" ng-maxlength="$ctrl.pages" ng-change="$ctrl.pageChange()" ng-model="$ctrl.page"></p3xr-input> / {{ $ctrl.pages }} <md-button class="md-icon-button" aria-label="" ng-click="$ctrl.pager({ page: \'next\' })"> <md-tooltip>{{ $root.p3xr.strings.page.treeControls.pager.next}}</md-tooltip> <md-icon>keyboard_arrow_right</md-icon> </md-button> <md-button class="md-icon-button md-primary" aria-label="" ng-click="$ctrl.pager({ page: \'last\' })"> <md-tooltip>{{ $root.p3xr.strings.page.treeControls.pager.last}}</md-tooltip> <md-icon>skip_next</md-icon> </md-button> </div> <div layout-gt-xs="row" layout="column" layout-align-gt-sm="start center" layout-align="center center" md-colors="{ background: \'primary-300\' }"> <div flex style="padding-left:3px"> {{ $root.p3xr.strings.page.key.set.table.value }} </div> <div flex="5" style="text-align:right" class="p3xr-connected-readonly-filler"> <md-button class="md-icon-button" ng-click="$ctrl.addSet({ $event: $event})" ng-if="$root.p3xr.state.connection.readonly !== true"> <md-tooltip>{{ $root.p3xr.strings.intention.add }}</md-tooltip> <md-icon>add</md-icon> </md-button> </div> </div> <div layout-gt-xs="row" layout="column" layout-align-gt-sm="start start" layout-align="center center" ng-repeat="value in $ctrl.pageBasedList()" ng-class="{ \'p3xr-list-key-odd-item\': $odd }" class="p3xr-list-key-item"> <div flex="95" class="p3xr-pre" style="padding-left:3px;align-items:flex-start;max-height:200px" ng-click="$ctrl.editValue({ value: value, $event: $event})"><span ng-if="$root.p3xr.settings.maxValueDisplay > 0 && value.length > $root.p3xr.settings.maxValueDisplay">{{ value.substring(0, $root.p3xr.settings.maxValueDisplay) }}...</span><span ng-if="$root.p3xr.settings.maxValueDisplay === 0 || value.length <= $root.p3xr.settings.maxValueDisplay || $root.p3xr.settings.maxValueDisplay === -1 ">{{ value }}</span></div> <div flex="5" style="text-align:right"> <md-button class="md-icon-button md-warn" ng-click="$ctrl.deleteSetMember({ value: value, $event: $event})" ng-if="$root.p3xr.state.connection.readonly !== true"> <md-tooltip>{{ $root.p3xr.strings.intention.delete }}</md-tooltip> <md-icon>delete</md-icon> </md-button> <md-button class="md-icon-button md-accent" ng-click="$ctrl.showJson({ value: value})"> <md-tooltip>{{ $root.p3xr.strings.intention.jsonViewShow }}</md-tooltip> <md-icon>table_chart</md-icon> </md-button> <md-button class="md-icon-button md-accent" ng-click="$ctrl.copy({ $event: $event, value: value})"> <md-tooltip>{{ $root.p3xr.strings.intention.copy }}</md-tooltip> <md-icon>content_copy</md-icon> </md-button> <md-button class="md-icon-button md-primary" ng-click="$ctrl.editValue({ value: value, $event: $event})"> <md-tooltip>{{ $root.p3xr.strings.intention.edit }}</md-tooltip> <md-icon>edit</md-icon> </md-button> </div> </div> '},8065:e=>{e.exports='<div ng-if="$ctrl.pages > 1" style="text-align:center"> <md-button class="md-icon-button md-primary" aria-label="" ng-click="$ctrl.pager({ page: \'first\' })"> <md-tooltip>{{ $root.p3xr.strings.page.treeControls.pager.first}}</md-tooltip> <md-icon>skip_previous</md-icon> </md-button> <md-button class="md-icon-button" aria-label="" ng-click="$ctrl.pager({ page: \'prev\' })"> <md-tooltip>{{ $root.p3xr.strings.page.treeControls.pager.prev}}</md-tooltip> <md-icon>keyboard_arrow_left</md-icon> </md-button> <p3xr-input type="number" style="width:48px" step="1" min="1" ng-maxlength="$ctrl.pages" ng-change="$ctrl.pageChange()" ng-model="$ctrl.page"></p3xr-input> / {{ $ctrl.pages }} <md-button class="md-icon-button" aria-label="" ng-click="$ctrl.pager({ page: \'next\' })"> <md-tooltip>{{ $root.p3xr.strings.page.treeControls.pager.next}}</md-tooltip> <md-icon>keyboard_arrow_right</md-icon> </md-button> <md-button class="md-icon-button md-primary" aria-label="" ng-click="$ctrl.pager({ page: \'last\' })"> <md-tooltip>{{ $root.p3xr.strings.page.treeControls.pager.last}}</md-tooltip> <md-icon>skip_next</md-icon> </md-button> </div> <div layout-gt-xs="row" layout="column" layout-align-gt-sm="start center" layout-align="center center" md-colors="{ background: \'primary-300\' }"> <div flex="20"><span ng-if="!$root.$mdMedia(\'xs\')">&nbsp;</span>{{ $root.p3xr.strings.page.key.stream.table.timestamp }}</div> <div flex="60"> {{ $root.p3xr.strings.page.key.stream.table.field }} <i class="fas fa-chevron-right" style="transform:scale(.75)!important"></i> {{ $root.p3xr.strings.page.key.stream.table.value }} </div> <div flex="20" style="text-align:right" class="p3xr-connected-readonly-filler"> <md-button class="md-icon-button" ng-click="$ctrl.addStream({ $event: $event})" ng-if="$root.p3xr.state.connection.readonly !== true"> <md-tooltip>{{ $root.p3xr.strings.intention.add }}</md-tooltip> <md-icon>add</md-icon> </md-button> </div> </div> <div layout-gt-xs="row" layout="column" layout-align-gt-sm="start start" layout-align="center center" ng-repeat="(key, value) in $ctrl.pageBasedList()" ng-class="{ \'p3xr-list-key-odd-item\': $odd }" class="p3xr-list-key-item"> <div flex="20"> <span> {{ value[0] }} <md-tooltip md-direction="top">{{ $ctrl.showTimestamp({ timestamp: value[0]})}}</md-tooltip> </span> </div> <div flex="60" class="p3xr-pre" style="overflow:auto;align-items:flex-start"><span ng-repeat="dataArr in $ctrl.p3xrValueGenerated[key]">{{ dataArr[0]}} <i class="fas fa-chevron-right" style="transform:scale(.75)!important"></i> {{ dataArr[1]}}<span ng-if="!$last"><br/></span></span></div> <div flex="20" style="text-align:right"> <md-button class="md-icon-button md-warn" ng-click="$ctrl.deleteStreamTimestamp({ streamTimestamp: value[0], $event: $event})" ng-if="$root.p3xr.state.connection.readonly !== true"> <md-tooltip>{{ $root.p3xr.strings.intention.delete }}</md-tooltip> <md-icon>delete</md-icon> </md-button> </div> </div> '},9263:e=>{e.exports='<div style="text-align:right"> <span ng-if="!$ctrl.editable"> <md-button class="md-button md-raised md-accent" ng-click="$ctrl.jsonViewer({ $event: $event})"> <md-icon>table_chart</md-icon> <span hide-sm hide-xs>{{ $root.p3xr.strings.intention.jsonViewShow }}</span> <md-tooltip ng-if="$root.$mdMedia(\'sm\') || $root.$mdMedia(\'xs\')" md-direction="bottom">{{ $root.p3xr.strings.intention.jsonViewShow }} </md-tooltip> </md-button> <md-button class="md-button md-raised md-accent" ng-click="$ctrl.copy({ $event: $event})"> <md-icon>content_copy</md-icon> <span hide-sm hide-xs>{{ $root.p3xr.strings.intention.copy }}</span> <md-tooltip ng-if="$root.$mdMedia(\'sm\') || $root.$mdMedia(\'xs\')" md-direction="bottom">{{ $root.p3xr.strings.intention.copy }} </md-tooltip> </md-button> <md-button class="md-button md-raised md-primary" ng-click="$ctrl.formatJson({ $event: $event})" ng-if="$root.p3xr.state.connection.readonly !== true"> <md-icon>format_line_spacing</md-icon> <span hide-sm hide-xs>{{ $root.p3xr.strings.intention.formatJson }}</span> <md-tooltip ng-if="$root.$mdMedia(\'sm\') || $root.$mdMedia(\'xs\')" md-direction="bottom">{{ $root.p3xr.strings.intention.formatJson }} </md-tooltip> </md-button> <md-button class="md-button md-raised md-primary" ng-click="$ctrl.jsonEditor({ $event: $event})" ng-if="$root.p3xr.state.donated"> <i class="fas fa-file-alt"></i> <span hide-sm hide-xs>{{ $root.p3xr.strings.intention.jsonViewEditor }}</span> <md-tooltip ng-if="$root.$mdMedia(\'sm\') || $root.$mdMedia(\'xs\')" md-direction="bottom">{{ $root.p3xr.strings.intention.jsonViewEditor }} </md-tooltip> </md-button> <md-button class="md-button md-raised md-primary" ng-click="$ctrl.edit()"> <md-icon>edit</md-icon> <span hide-sm hide-xs>{{ $root.p3xr.strings.intention.edit }}</span> <md-tooltip ng-if="$root.$mdMedia(\'sm\') || $root.$mdMedia(\'xs\')" md-direction="bottom">{{ $root.p3xr.strings.intention.edit }}</md-tooltip> </md-button> </span> <span ng-if="$ctrl.editable"> <div layout="row" layout-align="end center"> <div> <md-switch ng-model="$ctrl.validateJson" class="md-accent" style="float:right" ng-if="$root.p3xr.state.connection.readonly !== true"> {{ $root.p3xr.strings.label.validateJson }} </md-switch> </div> <div> <md-button class="md-button md-raised md-warn" ng-click="$ctrl.cancelEdit()" md-autofocus> <md-icon>cancel</md-icon> <span hide-sm hide-xs>{{ $root.p3xr.strings.intention.cancel }}</span> <md-tooltip ng-if="$root.$mdMedia(\'sm\') || $root.$mdMedia(\'xs\')" md-direction="bottom">{{ $root.p3xr.strings.intention.cancel }}</md-tooltip> </md-button> </div> <div> <md-button class="md-button md-raised md-primary" ng-click="$ctrl.save()" ng-if="$root.p3xr.state.connection.readonly !== true"> <md-icon>save</md-icon> <span hide-sm hide-xs>{{ $root.p3xr.strings.intention.save }}</span> <md-tooltip ng-if="$root.$mdMedia(\'sm\') || $root.$mdMedia(\'xs\')" md-direction="bottom">{{ $root.p3xr.strings.intention.save }}</md-tooltip> </md-button> </div> </div> </span> </div> <div layout-padding> <div class="p3xr-pre" style="max-width:100%;overflow:auto" ng-click="$ctrl.edit()" ng-if="!$ctrl.editable"><span ng-if="$root.p3xr.settings.maxValueDisplay > -1"><span ng-if="$root.p3xr.settings.maxValueDisplay > 0 && $ctrl.p3xrValue.length > $root.p3xr.settings.maxValueDisplay">{{ $ctrl.p3xrValue.substring(0, $root.p3xr.settings.maxValueDisplay) }}...</span><span ng-if="$root.p3xr.settings.maxValueDisplay === 0 || $ctrl.p3xrValue.length <= $root.p3xr.settings.maxValueDisplay">{{ $ctrl.p3xrValue }}</span></span></div> <div ng-if="$ctrl.editable"> <md-input-container class="md-block"> <label>{{ $root.p3xr.strings.label.edit }}</label> <textarea ng-model="$ctrl.p3xrValue" p3x-validate-json p3x-validate-json-required="validateJson"></textarea> </md-input-container> </div> </div> '},508:e=>{e.exports='<div ng-if="$ctrl.pages > 1" style="text-align:center"> <md-button class="md-icon-button md-primary" aria-label="" ng-click="$ctrl.pager({ page: \'first\' })"> <md-tooltip>{{ $root.p3xr.strings.page.treeControls.pager.first}}</md-tooltip> <md-icon>skip_previous</md-icon> </md-button> <md-button class="md-icon-button" aria-label="" ng-click="$ctrl.pager({ page: \'prev\' })"> <md-tooltip>{{ $root.p3xr.strings.page.treeControls.pager.prev}}</md-tooltip> <md-icon>keyboard_arrow_left</md-icon> </md-button> <p3xr-input type="number" style="width:48px" step="1" min="1" ng-maxlength="$ctrl.pages" ng-change="$ctrl.pageChange()" ng-model="$ctrl.page"></p3xr-input> / {{ $ctrl.pages }} <md-button class="md-icon-button" aria-label="" ng-click="$ctrl.pager({ page: \'next\' })"> <md-tooltip>{{ $root.p3xr.strings.page.treeControls.pager.next}}</md-tooltip> <md-icon>keyboard_arrow_right</md-icon> </md-button> <md-button class="md-icon-button md-primary" aria-label="" ng-click="$ctrl.pager({ page: \'last\' })"> <md-tooltip>{{ $root.p3xr.strings.page.treeControls.pager.last}}</md-tooltip> <md-icon>skip_next</md-icon> </md-button> </div> <div layout-gt-xs="row" layout="column" layout-align-gt-sm="start center" layout-align="center center" md-colors="{ background: \'primary-300\' }"> <div flex="20"> <span ng-if="!$root.$mdMedia(\'xs\')">&nbsp;</span> {{ $root.p3xr.strings.page.key.zset.table.score }} </div> <div flex="60"> {{ $root.p3xr.strings.page.key.zset.table.value }} </div> <div flex="20" style="text-align:right" class="p3xr-connected-readonly-filler"> <md-button class="md-icon-button" ng-click="$ctrl.addZSet({ $event: $event})" ng-if="$root.p3xr.state.connection.readonly !== true"> <md-tooltip>{{ $root.p3xr.strings.intention.add }}</md-tooltip> <md-icon>add</md-icon> </md-button> </div> </div> <div layout-gt-xs="row" layout="column" layout-align-gt-sm="start start" layout-align="center center" ng-repeat="value in $ctrl.pageBasedList()" ng-class="{ \'p3xr-list-key-odd-item\': $odd }" class="p3xr-list-key-item"> <div flex="20" ng-click="$ctrl.editValue({ score: value[0], member: value[1], $event: $event})"> <span ng-if="!$root.$mdMedia(\'xs\')">&nbsp;</span> {{ value[0] }} </div> <div flex="60" class="p3xr-pre" style="overflow:auto;align-items:flex-start;max-height:200px" ng-click="$ctrl.editValue({ score: value[0], member: value[1], $event: $event})"><span ng-if="$root.p3xr.settings.maxValueDisplay > 0 && value[1].length > $root.p3xr.settings.maxValueDisplay">{{ value[1].substring(0, $root.p3xr.settings.maxValueDisplay) }}...</span><span ng-if="$root.p3xr.settings.maxValueDisplay === 0 || value[1].length <= $root.p3xr.settings.maxValueDisplay|| $root.p3xr.settings.maxValueDisplay === -1 ">{{ value[1] }}</span></div> <div flex="20" style="text-align:right"> <md-button class="md-icon-button md-warn" ng-click="$ctrl.deleteZSet({ member: value[1], $event: $event})" ng-if="$root.p3xr.state.connection.readonly !== true"> <md-tooltip>{{ $root.p3xr.strings.intention.delete }}</md-tooltip> <md-icon>delete</md-icon> </md-button> <md-button class="md-icon-button md-accent" ng-click="$ctrl.showJson({ value:  value[1]})"> <md-tooltip>{{ $root.p3xr.strings.intention.jsonViewShow }}</md-tooltip> <md-icon>table_chart</md-icon> </md-button> <md-button class="md-icon-button md-accent" ng-click="$ctrl.copy({ $event: $event, value: value[1]})"> <md-tooltip>{{ $root.p3xr.strings.intention.copy }}</md-tooltip> <md-icon>content_copy</md-icon> </md-button> <md-button class="md-icon-button md-primary" ng-click="$ctrl.editValue({ score: value[0], member: value[1], $event: $event})"> <md-tooltip>{{ $root.p3xr.strings.intention.edit }}</md-tooltip> <md-icon>edit</md-icon> </md-button> </div> </div> '},9868:e=>{e.exports=' <div style="text-align:right"> <md-button class="md-button md-raised md-warn" ng-click="$ctrl.delete({ $event: $event})" ng-if="$root.p3xr.state.connection.readonly !== true"> <md-icon>delete</md-icon> <span hide-sm hide-xs>{{ $root.p3xr.strings.intention.delete }}</span> <md-tooltip ng-if="$root.$mdMedia(\'sm\') || $root.$mdMedia(\'xs\')" md-direction="bottom">{{ $root.p3xr.strings.intention.delete }} </md-tooltip> </md-button> <md-button class="md-button md-raised md-primary" ng-click="$ctrl.setTtl({ $event: $event})" ng-if="$root.p3xr.state.connection.readonly !== true"> <md-icon>timer</md-icon> <span hide-sm hide-xs>{{ $root.p3xr.strings.intention.ttl }}</span> <md-tooltip ng-if="$root.$mdMedia(\'sm\') || $root.$mdMedia(\'xs\')" md-direction="bottom">{{ $root.p3xr.strings.intention.ttl }} </md-tooltip> <md-tooltip ng-if="$root.$mdMedia(\'gt-sm\')">{{ $root.p3xr.strings.label.ttlTitle }}</md-tooltip> </md-button> <md-button class="md-button md-raised md-primary" ng-click="$ctrl.rename({ $event: $event})" ng-if="$root.p3xr.state.connection.readonly !== true"> <md-icon>fingerprint</md-icon> <span hide-sm hide-xs>{{ $root.p3xr.strings.intention.rename }}</span> <md-tooltip ng-if="$root.$mdMedia(\'sm\') || $root.$mdMedia(\'xs\')" md-direction="bottom">{{ $root.p3xr.strings.intention.rename }} </md-tooltip> </md-button> <md-button class="md-button md-raised md-accent" ng-click="$ctrl.refresh()"> <md-icon>refresh</md-icon> <span hide-sm hide-xs>{{ $root.p3xr.strings.intention.reloadKey }}</span> <md-tooltip ng-if="$root.$mdMedia(\'sm\')" md-direction="bottom">{{ $root.p3xr.strings.intention.reloadKey }} </md-tooltip> </md-button> </div> <md-list flex md-theme="{{ $root.p3xr.state.theme}}"> <md-divider></md-divider> <md-list-item ng-click="$ctrl.rename({ $event: $event})"> <p>{{ $root.p3xr.strings.page.key.label.key }}:&nbsp;</p> <span class="p3xr-typography-ellipsis" title="{{ $root.p3xr.ui.htmlEncode($ctrl.$stateParams.key) }}">{{ $ctrl.$stateParams.key }}</span> </md-list-item> <md-divider></md-divider> <md-list-item ng-click="$ctrl.setTtl({ $event: $event})" ng-if="$ctrl.response.ttl === -1"> <p title="{{ $root.p3xr.strings.page.key.label.ttlTitle  }}"><span class="p3xr-main-key-label-key-title">{{ $root.p3xr.strings.page.key.label.ttl }}</span>: </p> <span ng-if="$ctrl.response.ttl === -1"> {{ $root.p3xr.strings.page.key.label.ttlNotExpire }} </span> </md-list-item> <md-list-item class="md-2-line" ng-click="$ctrl.setTtl({ $event: $event})" ng-if="$ctrl.response.ttl !== -1"> <div class="md-list-item-text"> <h3> <div layout="row" flex> <div flex class="p3xr-main-key-label-key-title"> <span>{{ $root.p3xr.strings.page.key.label.ttl }}</span>: </div> <div> <span ng-if="$ctrl.response.ttl == -1"> {{ $root.p3xr.strings.page.key.label.ttlNotExpire }} </span> <span ng-if="$ctrl.response.ttl != -1"> {{ $ctrl.response.ttl }} </span> </div> </div> </h3> <p ng-click="$ctrl.setTtl({ $event: $event})" style="text-align:right"> <span style="opacity:.5;font-weight:400" ng-click="$ctrl.setTtl({ $event: $event})"> <span id="p3xr-main-key-ttl-counter"></span> </span> </p> </div> </md-list-item> <md-divider></md-divider> <md-list-item> <p>{{ $root.p3xr.strings.page.key.label.type }}:</p> {{ $root.p3xr.strings.redisTypes[$ctrl.response.type] }} </md-list-item> <md-divider></md-divider> <md-list-item> <p>{{ $root.p3xr.strings.page.key.label.encoding }}:</p> {{ $ctrl.response.encoding }} </md-list-item> <md-divider></md-divider> <md-list-item> <p>{{ $root.p3xr.strings.page.key.label.length }}:</p> <span ng-if="$ctrl.response.type === \'string\'" style="opacity:.5"> {{ $ctrl.charactersPrettyBytes($ctrl.response.length) }} &nbsp; </span> {{ $ctrl.response.length }} &nbsp; <span ng-if="$ctrl.response-type === \'string\'"> {{ $root.p3xr.strings.page.key.label.lengthString }} </span> <span ng-if="$ctrl.response.type !== \'string\'"> {{ $root.p3xr.strings.page.key.label.lengthItem }} </span> </md-list-item> </md-list> <md-divider></md-divider> <span ng-switch="" on="$ctrl.response.type"> <p3xr-main-key-string ng-switch-when="string" p3xr-response="$ctrl.response" p3xr-value="$ctrl.response.value" p3xr-key="$ctrl.$stateParams.key"></p3xr-main-key-string> <p3xr-main-key-list ng-switch-when="list" p3xr-response="$ctrl.response" p3xr-value="$ctrl.response.value" p3xr-key="$ctrl.$stateParams.key"></p3xr-main-key-list> <p3xr-main-key-hash ng-switch-when="hash" p3xr-response="$ctrl.response" p3xr-value="$ctrl.response.value" p3xr-key="$ctrl.$stateParams.key"></p3xr-main-key-hash> <p3xr-main-key-set ng-switch-when="set" p3xr-response="$ctrl.response" p3xr-value="$ctrl.response.value" p3xr-key="$ctrl.$stateParams.key"></p3xr-main-key-set> <p3xr-main-key-zset ng-switch-when="zset" p3xr-response="$ctrl.response" p3xr-value="$ctrl.response.value" p3xr-key="$ctrl.$stateParams.key"></p3xr-main-key-zset> <p3xr-main-key-stream ng-switch-when="stream" p3xr-response="$ctrl.response" p3xr-value="$ctrl.response.value" p3xr-key="$ctrl.$stateParams.key"></p3xr-main-key-stream> </span> '},4498:e=>{e.exports='<md-tabs md-dynamic-height md-border-bottom> <md-tab label="{{ $root.p3xr.strings.title.db}}" ng-if="$ctrl.hasDatabases && $root.p3xr.state.connection.cluster !== true"> <md-content> <md-tabs md-dynamic-height md-border-bottom class="md-primary" id="p3xr-main-statistics-dbs"> <md-tab label="{{ key }}" ng-repeat="(key, value) in $root.p3xr.state.info.keyspaceDatabases"> <md-content> <md-list flex ng-repeat="(itemKey, itemValue) in $root.p3xr.state.info.keyspace[\'db\' + key ]"> <md-list-item> <p><strong>{{ $ctrl.generateKey(itemKey) }}</strong></p> {{ itemValue }} </md-list-item> </md-list> </md-content> </md-tab> </md-tabs> </md-content> </md-tab> <md-tab label="{{ $ctrl.generateKey(key) }}" ng-repeat="(key, value) in $root.p3xr.state.info" ng-if="key !== \'keyspace\' &&  key !== \'keyspaceDatabases\'"> <md-content ng-style="{\'maxHeight\': $ctrl.maxHeight + \'px\'}"> <md-list flex> <md-list-item ng-repeat="(itemKey, itemValue) in value"> <p><strong>{{ $ctrl.generateKey(itemKey) }}</strong></p> {{ itemValue }} </md-list-item> </md-list> </md-content> </md-tab> </md-tabs> '},3646:e=>{e.exports='<div style="float:left"> <md-button class="md-icon-button md-primary" aria-label="" ng-click="$ctrl.treeExpandAll()"> <md-tooltip>{{ $root.p3xr.strings.page.treeControls.expandAll}}</md-tooltip> <md-icon>keyboard_arrow_down</md-icon> </md-button> <md-button class="md-icon-button" aria-label="" ng-click="$ctrl.treeCollapseAll()" id="p3xr-main-treecontrol-controls-collapse-all"> <md-tooltip>{{ $root.p3xr.strings.page.treeControls.collapseAll}}</md-tooltip> <md-icon>keyboard_arrow_up</md-icon> </md-button> <span ng-click="$ctrl.noop()" id="p3xr-main-treecontrol-controls-click-noop"></span> <md-button class="md-icon-button" aria-label="" ng-click="$ctrl.openTreeSettingDialog({ $event: $event})"> <md-tooltip>{{ $root.p3xr.strings.form.treeSettings.label.formName}}</md-tooltip> <md-icon>settings</md-icon> </md-button> <span> <p3xr-input id="p3xr-main-treecontrol-controls-tree-divider-input" ng-change="$ctrl.treeDividerChange()" style="width:14px;font-size:14px;text-align:center;font-family:\'Roboto Mono\'!important;font-weight:500" ng-model="$root.p3xr.settings.redisTreeDivider" ng-model-options="{debounce: 666 }"></p3xr-input> <md-tooltip>{{ $root.p3xr.strings.form.treeSettings.field.treeSeparator }}</md-tooltip> </span> <span ng-if="$root.p3xr.state.cfg.treeDividers.length > 0"> <md-select ng-model="$root.p3xr.settings.redisTreeDivider" ng-change="$ctrl.treeDividerChange()" class="p3xr-main-treecontrol-controls-divider-select md-no-underline" md-container-class="p3xr-main-treecontrol-controls-divider-select-container"> <md-option ng-repeat="divider in $root.p3xr.state.cfg.treeDividers" ng-value="divider"> {{ divider }} </md-option> </md-select> <md-tooltip>{{ $root.p3xr.strings.form.treeSettings.field.treeSeparatorSelector }}</md-tooltip> </span> </div> <span ng-if="$root.p3xr.state.pages > 1" class="p3xr-main-treecontrol-controls-pager"> <md-tooltip>{{ $root.p3xr.strings.status.keyCount({keyCount: $root.p3xr.state.keysRaw.length }) }}</md-tooltip> <md-button class="md-icon-button md-primary" aria-label="" ng-click="$ctrl.page({ page: \'first\' })"> <md-tooltip>{{ $root.p3xr.strings.page.treeControls.pager.first}}</md-tooltip> <md-icon>skip_previous</md-icon> </md-button> <md-button class="md-icon-button" aria-label="" ng-click="$ctrl.page({ page: \'prev\' })"> <md-tooltip>{{ $root.p3xr.strings.page.treeControls.pager.prev}}</md-tooltip> <md-icon>keyboard_arrow_left</md-icon> </md-button> <p3xr-input type="number" style="width:48px" step="1" min="1" ng-maxlength="$root.p3xr.state.pages" ng-change="$ctrl.pageChange()" ng-model="$root.p3xr.state.page"></p3xr-input> / {{ $root.p3xr.state.pages }} <md-button class="md-icon-button" aria-label="" ng-click="$ctrl.page({ page: \'next\' })"> <md-tooltip>{{ $root.p3xr.strings.page.treeControls.pager.next}}</md-tooltip> <md-icon>keyboard_arrow_right</md-icon> </md-button> <md-button class="md-icon-button md-primary" aria-label="" ng-click="$ctrl.page({ page: \'last\' })"> <md-tooltip>{{ $root.p3xr.strings.page.treeControls.pager.last}}</md-tooltip> <md-icon>skip_next</md-icon> </md-button> </span> <span ng-if="$root.p3xr.state.pages < 2" class="p3xr-main-treecontrol-controls-keycount"> {{ $root.p3xr.strings.status.keyCount({keyCount: $root.p3xr.state.keysRaw.length }) }}&nbsp; </span> <div class="p3xr-main-treecontrol-controls-search"> <p3xr-input placeholder="{{ $root.p3xr.settings.searchClientSide ? $root.p3xr.strings.page.treeControls.search.placeholderClient : $root.p3xr.strings.page.treeControls.search.placeholderServer }}" ng-model="$root.p3xr.state.search" ng-class="{ \'withSearch\': $root.p3xr.state.search.length > 0, \'withoutSearch\': $root.p3xr.state.search.length  === 0}" ng-enter="$ctrl.onSearchChange()"></p3xr-input> <md-tooltip md-direction="top">{{ $root.p3xr.strings.page.treeControls.search.infoDetails }}</md-tooltip> <md-button class="md-icon-button md-primary" aria-label="" ng-click="$ctrl.onSearchChange()"> <md-tooltip>{{ $root.p3xr.strings.page.treeControls.search.search}}</md-tooltip> <md-icon>search</md-icon> </md-button> <span ng-if="$root.p3xr.state.search.length > 0"> <md-button class="md-icon-button md-primary" aria-label="" ng-click="$root.p3xr.state.search = \'\'; $ctrl.onSearchChange()"><md-tooltip>{{ $root.p3xr.strings.page.treeControls.search.clear}}</md-tooltip> <md-icon>clear</md-icon> </md-button> </span> <span style="display:inline-block;position:relative;top:-2px" ng-if="$root.p3xr.state.connection.readonly !== true"> <md-tooltip>{{ $root.p3xr.strings.intention.addKeyRoot }}</md-tooltip> <md-icon ng-click="$ctrl.p3xrMainRef.addKey({event: $event})" md-theme="{{ $root.p3xr.state.themeCommon }}" class="md-warn">add</md-icon> </span> </div> '},5484:e=>{e.exports='<treecontrol ng-if="$root.keysTree.length > 0" class="{{ $ctrl.getTreeTheme() }} p3xr-main-tree" tree-model="$root.keysTree" options="$ctrl.keysTreeOptions" expanded-nodes="$root.expandedNodes" on-selection="$ctrl.selectTreeNode(node, selected, $parentNode, $index, $first, $middle, $last, $odd, $even, $path)" on-node-toggle="$ctrl.showToggle(node, expanded, $parentNode, $index, $first, $middle, $last, $odd, $even, $path)"> <span in-view="$ctrl.displayNode(node, $inview)" ng-if="!node.$inview" style="display:inline-block;width:89%;margin-left:auto;margin-right:auto;background-color:rgba(128,128,128,.5);height:2px;margin-bottom:10px;margin-top:10px"></span> <span ng-if="node.$inview" data-p3xr-tree-key="{{$ctrl.extractNodeKey(node)}}"> <md-tooltip md-direction="top">{{ $ctrl.extractNodeTooltip(node) }}</md-tooltip> <label class="p3xr-main-tree-node" ng-mouseover="$ctrl.treeHover({node})" ng-mouseleave="node.show = false"> <span ng-switch="node.keysInfo.type"> <i ng-switch-when="hash" class="p3xr-main-treecontrol-node-icon fas fa-hashtag" aria-hidden="true"></i> <i ng-switch-when="list" class="p3xr-main-treecontrol-node-icon fas fa-list-ol" aria-hidden="true"></i> <i ng-switch-when="set" class="p3xr-main-treecontrol-node-icon fas fa-list" aria-hidden="true"></i> <i ng-switch-when="string" class="p3xr-main-treecontrol-node-icon fas fa-ellipsis-h" aria-hidden="true"></i> <i ng-switch-when="zset" class="p3xr-main-treecontrol-node-icon fas fa-chart-line" aria-hidden="true"></i> <i ng-switch-when="stream" class="p3xr-main-treecontrol-node-icon fas fa-stream" aria-hidden="true"></i> </span> {{node.label}}<span class="p3xr-main-tree-node-count" ng-if="node.type === \'folder\'">{{$root.p3xr.settings.redisTreeDivider}}* ({{node.childCount}})</span> <span class="p3xr-main-tree-node-count" ng-if="node.type !== \'folder\' && node.keysInfo.type !== \'string\' && node.keysInfo !== undefined">({{node.keysInfo.length}})</span> <span ng-if="node.type === \'folder\'" ng-show="node.show" style="position:relative;top:-1px"> <span> <md-tooltip md-direction="right">{{ $root.p3xr.strings.confirm.deleteAllKeys({key: node.key}) }}</md-tooltip> <md-icon ng-click="$ctrl.deleteTree({event: $event, node: node})" class="md-warn p3xr-main-treecontrol-folder-icon">close</md-icon> </span> <span style="position:relative;top:-1px"> <md-tooltip md-direction="right">{{ $root.p3xr.strings.intention.addKey }}</md-tooltip> <md-icon ng-click="$ctrl.addKey({event: $event, node: node})" md-theme="{{ $root.p3xr.state.themeCommon }}" class="md-warn p3xr-main-treecontrol-folder-icon">add</md-icon> </span> </span> </label> </span> </treecontrol> '},8236:e=>{e.exports=' <div> <md-toolbar class="md-primary md-hue-1" md-theme="{{ $root.p3xr.state.themeLayout}}" id="p3xr-console-header"> <div class="md-toolbar-tools"> <h2 flex md-truncate>{{ $root.p3xr.strings.label.console }}</h2> <span> <md-tooltip ng-if="$root.$mdMedia(\'xs\')" md-direction="bottom">{{ $root.p3xr.strings.intention.pubsubMonitor }}</md-tooltip> <md-checkbox ng-model="$root.p3xr.state.monitor" style="transform:scale(.75)" id="p3xr-console-pubsub-checkbox"> <span hide-xs>{{ $root.p3xr.strings.intention.pubsubMonitor }}</span> </md-checkbox> </span> <p3xr-button p3xr-label="$root.p3xr.strings.intention.commands" p3xr-md-icon="menu" ng-click="$ctrl.commands({ $event: $event})"></p3xr-button> <p3xr-button p3xr-label="$root.p3xr.strings.intention.clear" p3xr-md-icon="clear" ng-click="$ctrl.clearConsole()"></p3xr-button> </div> </md-toolbar> <md-content md-theme="{{ $root.p3xr.state.theme}}" layout-padding id="p3xr-console-content" md-whiteframe="1" class="p3xr-content-border"> <div id="p3xr-console-content-output"> </div> <p3xr-input id="p3xr-console-input" ng-keydown="$ctrl.action($event)" ng-model="$ctrl.inputValue"></p3xr-input> </md-content> </div> '},4007:e=>{e.exports='<md-toolbar class="md-accent" md-theme="{{ $root.p3xr.state.themeLayout}}"> <div class="md-toolbar-tools"> <h2 flex md-truncate>{{ $root.p3xr.strings.title.socketioConnectError }}</h2> </div> </md-toolbar> <md-content md-theme="{{ $root.p3xr.state.theme}}" layout-padding> <p3xr-button ng-click="$root.locationReload()" p3xr-label="$root.p3xr.strings.intention.reload" p3xr-fa-icon="fas fa-redo"></p3xr-button> <br/> <br/> {{ $ctrl.$stateParams.error.message }} </md-content> '},1856:e=>{e.exports='<div class="p3xr-content-border"> <md-toolbar class="md-primary md-hue-1" md-theme="{{ $root.p3xr.state.themeLayout}}" id="p3xr-main-header"> <div class="md-toolbar-tools"> <h2 flex md-truncate hide-xs> <a ui-sref="main.statistics"> {{ $root.p3xr.strings.intention.main }} </a> </h2> <span ng-if="$root.p3xr.state.connection !== undefined"> <button class="md-button" style="cursor:inherit!important;margin:0;padding:0" ng-if="$root.p3xr.state.connection.cluster !== true"> <span ng-if="!$root.$mdMedia(\'xs\')" style="position:relative;top:1px">{{ $root.p3xr.strings.form.main.label.database.toUpperCase() }}:</span> <md-input-container> <md-tooltip ng-if="$root.$mdMedia(\'xs\')" md-direction="bottom">{{ $root.p3xr.strings.form.main.label.database }}</md-tooltip> <md-select ng-model="$ctrl.currentDatabase" aria-label="{{ $root.p3xr.strings.form.main.label.database }}" class="md-accent p3xr-main-db-select" md-container-class="p3xr-main-db-select-container"> <md-option ng-repeat="dbIndex in $root.p3xr.state.databaseIndexes" ng-value="dbIndex" ng-click="$ctrl.selectDatabase(dbIndex)"> <span ng-if="$root.p3xr.state.info.keyspaceDatabases[dbIndex]"> <md-icon>radio_button_checked</md-icon> </span> <span ng-if="!$root.p3xr.state.info.keyspaceDatabases[dbIndex]"> <md-icon>radio_button_unchecked</md-icon> </span> {{ dbIndex }} </md-option> </md-select> </md-input-container> </button> <p3xr-button class="p3xr-main-toolbar-button p3xr-main-toolbar-button-hide-on-small" ng-if="$root.p3xr.state.connection.awsElastiCache !== true && $root.p3xr.state.connection.readonly !== true" ng-click="$ctrl.save()" p3xr-label="$root.p3xr.strings.intention.save" p3xr-md-icon="save"></p3xr-button> <p3xr-button class="p3xr-main-toolbar-button" ng-click="$ctrl.statistics()" p3xr-label="$root.p3xr.strings.intention.statistics" p3xr-md-icon="show_chart"></p3xr-button> <p3xr-button class="p3xr-main-toolbar-button" ng-click="$ctrl.refresh()" p3xr-label="$root.p3xr.strings.intention.refresh" p3xr-md-icon="refresh"></p3xr-button> </span> </div> </md-toolbar> <md-content md-theme="{{ $root.p3xr.state.theme}}" id="p3xr-main-content" md-whiteframe="2"> <div class="md-title" layout-padding ng-if="$root.p3xr.state.connections.list.length > 0 && $root.p3xr.state.connection === undefined"> {{ $root.p3xr.strings.title.main }} </div> <div ng-if="$root.p3xr.state.connections.list.length === 0 && $root.p3xr.state.connection === undefined" layout-padding><md-button ui-sref="settings" md-no-ink style="display:inline-block;word-wrap:break-word;white-space:normal">{{ $root.p3xr.strings.intention.noConnections }}</md-button></div> <div ng-if="$root.p3xr.state.connection !== undefined"> <div ng-if="!$root.$mdMedia(\'xs\')"> <p3xr-main-treecontrol-controls id="p3xr-main-treecontrol-controls-container" p3xr-main-ref="$ctrl"></p3xr-main-treecontrol-controls> <p3xr-main-tree id="p3xr-main-treecontrol-container" p3xr-resize="$ctrl.resize()" p3xr-main-ref="$ctrl"></p3xr-main-tree> <div id="p3xr-main-content-sizer" md-colors="{ background: resizerColor }" md-theme="{{ $root.p3xr.state.themeLayout}}"> </div> <div id="p3xr-main-content-container"> <ui-view> </ui-view> </div> </div> <div layout="column" ng-if="$root.$mdMedia(\'xs\')"> <p3xr-main-treecontrol-controls p3xr-main-ref="$ctrl" flex></p3xr-main-treecontrol-controls> <p3xr-main-tree flex id="p3xr-main-treecontrol-container-directive-small" p3xr-resize="$ctrl.resize()" p3xr-main-ref="$ctrl"></p3xr-main-tree> <ui-view flex> </ui-view> </div> </div> </md-content> </div> '},2305:e=>{e.exports=' <p3xr-accordion p3xr-title="$root.p3xr.strings.label.connections" p3xr-accordion-key="settings"> <p3xr-accordion-actions ng-if="!$root.p3xr.state.cfg.readonlyConnections"> <p3xr-button ng-click="$ctrl.connectionForm({ type: \'new\', $event: $event})" p3xr-label="$root.p3xr.strings.intention.connectionAdd" p3xr-md-icon="add_box"></p3xr-button> </p3xr-accordion-actions> <p3xr-accordion-content> <div ng-if="$root.p3xr.state.connections.list.length == 0" layout-padding> {{ $root.p3xr.strings.intention.noConnectionsInSettings }} </div> <md-list ng-if="$root.p3xr.state.connections.list.length > 0"> <md-list-item class="md-2-line" ng-repeat="connection in $root.p3xr.state.connections.list"> <div class="md-list-item-text"> <h3>{{connection.name}}</h3> <p>{{connection.host}}:{{connection.port}}</p> </div> <md-button class="md-warn md-raised" ng-click="$ctrl.deleteConnection({ model: connection, ev: $event})" ng-if="!$root.p3xr.state.cfg.readonlyConnections"> <md-icon>delete_forever</md-icon> <span hide-xs>{{ $root.p3xr.strings.intention.delete }}</span> <md-tooltip ng-if="$root.$mdMedia(\'xs\')">{{ $root.p3xr.strings.intention.delete }}</md-tooltip> </md-button> <md-button class="md-primary md-raised" ng-click="$ctrl.connectionForm({ type: \'edit\', model: connection, $event: $event})" ng-if="!$root.p3xr.state.cfg.readonlyConnections"> <md-icon>edit</md-icon> <span hide-xs>{{ $root.p3xr.strings.intention.edit }}</span> <md-tooltip ng-if="$root.$mdMedia(\'xs\')">{{ $root.p3xr.strings.intention.edit }}</md-tooltip> </md-button> <md-button class="md-primary md-raised" ng-click="$ctrl.connectionForm({ type: \'edit\', model: connection})" ng-if="$root.p3xr.state.cfg.readonlyConnections"> <md-icon>mode_comment</md-icon> <span hide-xs>{{ $root.p3xr.strings.intention.view }}</span> <md-tooltip ng-if="$root.$mdMedia(\'xs\')">{{ $root.p3xr.strings.intention.view }}</md-tooltip> </md-button> <md-divider ng-if="!$last"></md-divider> </md-list-item> </md-list> </p3xr-accordion-content> </p3xr-accordion> <br/> <p3xr-accordion p3xr-title="$root.p3xr.strings.form.treeSettings.label.formName" p3xr-accordion-key="tree-settings"> <p3xr-accordion-actions> <p3xr-button ng-click="$ctrl.openTreeSettingDialog({ $event: $event})" p3xr-label="$root.p3xr.strings.intention.edit" p3xr-md-icon="edit"></p3xr-button> </p3xr-accordion-actions> <p3xr-accordion-content> <md-list> <md-list-item ng-click="$ctrl.openTreeSettingDialog({ $event: $event})"> <div layout="row" flex> <div flex> {{ $root.p3xr.strings.form.treeSettings.field.treeSeparator}} </div> <div> <span ng-if="$root.p3xr.settings.redisTreeDivider.length > 0"> {{ $root.p3xr.settings.redisTreeDivider}} </span> <span ng-if="$root.p3xr.settings.redisTreeDivider.length < 1 || $root.p3xr.settings.redisTreeDivider === undefined || $root.p3xr.settings.redisTreeDivider === \'\'"> {{ $root.p3xr.strings.label.treeSeparatorEmptyNote}} </span> </div> </div> </md-list-item> <md-divider></md-divider> <md-list-item ng-click="$ctrl.openTreeSettingDialog({ $event: $event})"> <div layout="row" flex> <div flex> {{ $root.p3xr.strings.form.treeSettings.field.page}} </div> <div> {{ $root.p3xr.settings.pageCount}} </div> </div> </md-list-item> <md-divider></md-divider> <md-list-item class="md-2-line" ng-click="$ctrl.openTreeSettingDialog({ $event: $event})"> <div class="md-list-item-text"> <h3> <div layout="row" flex> <div flex> {{ $root.p3xr.strings.form.treeSettings.maxValueDisplay}} </div> <div> {{ $root.p3xr.settings.maxValueDisplay}} </div> </div> </h3> <p> {{ $root.p3xr.strings.form.treeSettings.maxValueDisplayInfo }} </p> </div> </md-list-item> <md-divider></md-divider> <md-list-item class="md-2-line" ng-click="$ctrl.openTreeSettingDialog({ $event: $event})"> <div class="md-list-item-text"> <h3> <div layout="row" flex> <div flex> {{ $root.p3xr.strings.form.treeSettings.maxKeys}} </div> <div> {{ $root.p3xr.settings.maxKeys}} </div> </div> </h3> <p> {{ $root.p3xr.strings.form.treeSettings.maxKeysInfo }} </p> </div> </md-list-item> <md-divider></md-divider> <md-list-item ng-click="$ctrl.openTreeSettingDialog({ $event: $event})"> <div layout="row" flex> <div flex> {{ $root.p3xr.strings.form.treeSettings.field.keysSort}} </div> <div> {{ $root.p3xr.settings.keysSort ? $root.p3xr.strings.label.keysSort.on : $root.p3xr.strings.label.keysSort.off }} </div> </div> </md-list-item> <md-divider></md-divider> <md-list-item ng-click="$ctrl.openTreeSettingDialog({ $event: $event})"> <div layout="row" flex> <div flex> {{ $root.p3xr.strings.form.treeSettings.field.searchMode}} </div> <div> {{ $root.p3xr.settings.searchClientSide ? $root.p3xr.strings.form.treeSettings.label.searchModeClient : $root.p3xr.strings.form.treeSettings.label.searchModeServer }} </div> </div> </md-list-item> <md-divider></md-divider> <md-list-item ng-click="$ctrl.openTreeSettingDialog({ $event: $event})"> <div layout="row" flex> <div flex> {{ $root.p3xr.strings.form.treeSettings.field.searchModeStartsWith}} </div> <div> {{ $root.p3xr.settings.searchStartsWith ? $root.p3xr.strings.form.treeSettings.label.searchModeStartsWith : $root.p3xr.strings.form.treeSettings.label.searchModeIncludes }} </div> </div> </md-list-item> <md-divider></md-divider> <md-list-item ng-click="$ctrl.openTreeSettingDialog({ $event: $event})"> <div layout="row" flex> <div flex> {{ $root.p3xr.settings.jsonFormat == 2 ? $root.p3xr.strings.form.treeSettings.label.jsonFormatTwoSpace : $root.p3xr.strings.form.treeSettings.label.jsonFormatFourSpace }} </div> </div> </md-list-item> <md-divider></md-divider> <md-list-item ng-click="$ctrl.openTreeSettingDialog({ $event: $event})"> <div layout="row" flex> <div flex> {{ $root.p3xr.settings.animation ? $root.p3xr.strings.form.treeSettings.label.animation : $root.p3xr.strings.form.treeSettings.label.noAnimation }} </div> </div> </md-list-item> </md-list> </p3xr-accordion-content> </p3xr-accordion> <div class="p3xr-settings-bottom"></div> '},2862:e=>{e.exports=' <div> <md-toolbar class="md-primary md-hue-1" md-theme="{{ $root.p3xr.state.themeLayout}}" md-whiteframe="{{ $ctrl.extended ? -1 : 1 }}"> <div class="md-toolbar-tools"> <h2 flex md-truncate ng-click="$ctrl.extended = !$ctrl.extended">{{ $ctrl.p3xrTitle }}</h2> <span ng-if="$ctrl.transcludePresent(\'actions\')" ng-transclude="actions"></span> <md-button class="md-icon-button" ng-click="$ctrl.extended = !$ctrl.extended"> <md-icon>{{ !$ctrl.extended ? \'keyboard_arrow_down\' : \'keyboard_arrow_up\' }}</md-icon> <md-tooltip>{{ !$ctrl.extended ? $root.p3xr.strings.intention.extend : $root.p3xr.strings.intention.collapse}} </md-tooltip> </md-button> </div> </md-toolbar> <md-content ng-if="$ctrl.extended" md-theme="{{ $root.p3xr.state.theme}}" ng-transclude="content" md-whiteframe="2" class="p3xr-content-border"> </md-content> </div> '},9670:e=>{e.exports='<md-button class="{{ $ctrl.p3xrClasses }}"> <md-icon ng-if="$ctrl.p3xrMdIcon !== undefined">{{ $ctrl.p3xrMdIcon }}</md-icon> <i ng-if="$ctrl.p3xrFaIcon !== undefined" class="{{ $ctrl.p3xrFaIcon }}"></i> <span ng-if="$root.$mdMedia(\'(min-width: 699px)\')">{{ $ctrl.p3xrLabel }}</span> <md-tooltip ng-if="$root.$mdMedia(\'(max-width: 699px)\')" md-direction="{{ $ctrl.p3xrTooltipDirection || \'bottom\' }}">{{ $ctrl.p3xrLabel }} </md-tooltip> </md-button> '},8565:(e,t,n)=>{"use strict";n.r(t)},7356:(e,t,n)=>{let o;e.exports=()=>{n.g.p3xr.destroy(),void 0===o?o=document.body.innerHTML:document.body.innerHTML=o;const e=()=>{angular.element(document).ready((()=>{const e=document.getElementById("p3xr-redis-ui-bootstrap");angular.bootstrap(e,["p3xr-redis-ui"])}))};if(document.hasFocus()||/electron/i.test(navigator.userAgent))e();else{const t=()=>{e(),window.removeEventListener("focus",t)};window.addEventListener("focus",t)}}},6996:(e,t,n)=>{p3xr.ng=angular.module("p3xr-redis-ui",["ngCookies","ngAnimate","ngAria","ngSanitize","ngMessages","ngMaterial","ui.router","treeControl","angular-json-tree","angular-inview"]),n(8136),p3xr.ng.config(["$qProvider","$locationProvider","$urlRouterProvider","$stateProvider","p3xrThemeProvider","$mdAriaProvider",(e,t,o,r,i,s)=>{s.disableWarnings(),e.errorOnUnhandledRejections(!1),t.html5Mode(!0),i.start();const a=n(3597);o.otherwise("/main"),a(r)}]),p3xr.ng.run(["$rootScope","p3xrSocket","p3xrTheme","$mdMedia","$state","$timeout","$cookies","p3xrRedisParser","$animate",(e,t,o,r,i,s,a,l,d)=>{let c,m,u;e.p3xr=p3xr,e.$mdMedia=r,e.isElectron=/electron/i.test(navigator.userAgent),e.hasConnected=()=>0!==Object.keys(p3xr.state.redisConnections).length,e.locationReload=()=>{location.href="/"},Object.defineProperty(e.p3xr.state,"search",{get:()=>(c=a.get("p3xr-state-search"),void 0===c&&(c=""),c),set:e=>{c=e,c=a.put("p3xr-state-search",e,{expires:p3xr.settings.cookieExpiry})}}),Object.defineProperty(e.p3xr.settings,"redisTreeDivider",{get:()=>(m=a.get(p3xr.settings.tree.cookieName),void 0===m&&(m=p3xr.settings.tree.defaultDivider),m),set:e=>{m=e,m=a.put(p3xr.settings.tree.cookieName,e,{expires:p3xr.settings.cookieExpiry})}}),Object.defineProperty(e.p3xr.settings,"jsonFormat",{get:()=>(u=a.get(p3xr.settings.jsonFormatSettings.cookieName),void 0===u&&(u=p3xr.settings.jsonFormatSettings.default),parseInt(u)),set:e=>{u=e,u=a.put(p3xr.settings.jsonFormatSettings.cookieName,e,{expires:p3xr.settings.cookieExpiry})}});const p=()=>{console.log("set animation",e.p3xr.settings.animation),d.enabled(e.p3xr.settings.animation),e.p3xr.settings.animation?$body.removeClass("p3xr-no-animation"):$body.addClass("p3xr-no-animation")};let g,h,f,x,y,b,T;Object.defineProperty(e.p3xr.settings,"animation",{get:()=>(g=a.get(p3xr.settings.animationSettings.cookieName),void 0===g&&(g=p3xr.settings.animationSettings.default),1===parseInt(g)),set:e=>{g=e,g=a.put(p3xr.settings.animationSettings.cookieName,e,{expires:p3xr.settings.cookieExpiry}),p()}}),p(),Object.defineProperty(e.p3xr.settings,"maxValueDisplay",{get:()=>(h=a.get(p3xr.settings.maxValueDisplaySetting.cookieName),void 0===h&&(h=p3xr.settings.maxValueDisplaySetting.default),parseInt(h)),set:e=>{h=parseInt(e),h=a.put(p3xr.settings.maxValueDisplaySetting.cookieName,e,{expires:p3xr.settings.cookieExpiry})}}),Object.defineProperty(e.p3xr.settings,"maxKeys",{get:()=>{f=a.get(p3xr.settings.maxKeysSettings.cookieName),void 0===f&&(f=p3xr.settings.maxKeysSettings.default);let e=parseInt(f);return(isNaN(e)||e<5||e>p3xr.settings.maxKeysSettings.max)&&(e=p3xr.settings.maxKeysSettings.default),e},set:e=>{f=parseInt(e),f=a.put(p3xr.settings.maxKeysSettings.cookieName,e,{expires:p3xr.settings.cookieExpiry})}}),Object.defineProperty(e.p3xr.settings.language,"current",{get:()=>(x=a.get(p3xr.settings.language.cookieName),void 0===x&&(x=p3xr.settings.language.defaultLanguage,n(5822).locale(p3xr.settings.language.momentDateMap[x])),x),set:t=>{void 0===t&&(t=p3xr.settings.language.defaultLanguage),x=t,n(5822).locale(p3xr.settings.language.momentDateMap[x]),e.p3xr.strings=p3xr.settings.language.translation[t],x=a.put(p3xr.settings.language.cookieName,t,{expires:p3xr.settings.cookieExpiry})}}),e.p3xr.settings.language.current=a.get(p3xr.settings.language.cookieName),Object.defineProperty(e.p3xr.settings,"keysSort",{get:()=>(y=a.get(p3xr.settings.keySortInfo.cookieName),void 0===y?y=p3xr.settings.keySortInfo.default:"true"===y?y=!0:"false"===y&&(y=!1),y),set:e=>{y=e,y=a.put(p3xr.settings.keySortInfo.cookieName,e,{expires:p3xr.settings.cookieExpiry})}}),Object.defineProperty(e.p3xr.settings,"searchClientSide",{get:()=>(b=a.get(p3xr.settings.searchInfoClientSide.cookieName),void 0===b?b=p3xr.settings.searchInfoClientSide.default:"true"===b?b=!0:"false"===b&&(b=!1),(p3xr.state.keysRaw.length>p3xr.settings.maxLightKeysCount||p3xr.state.dbsize>p3xr.settings.maxLightKeysCount)&&(b=!1),b),set:e=>{b=e,b=a.put(p3xr.settings.searchInfoClientSide.cookieName,e,{expires:p3xr.settings.cookieExpiry})}}),Object.defineProperty(e.p3xr.settings,"searchStartsWith",{get:()=>(T=a.get(p3xr.settings.searchInfoStartsWith.cookieName),void 0===T?T=p3xr.settings.searchInfoStartsWith.default:"true"===T?T=!0:"false"===T&&(T=!1),T),set:e=>{T=e,T=a.put(p3xr.settings.searchInfoStartsWith.cookieName,e,{expires:p3xr.settings.cookieExpiry})}});let v=[];Object.defineProperty(e,"expandedNodes",{get:()=>v,set:e=>{v=e}}),e.savedExpandedNodes=[];let S,k=1;Object.defineProperty(e.p3xr.state,"page",{get:()=>k,set:e=>{k=parseInt(e)}}),e.keysTreeRendered=[],Object.defineProperty(e,"keysTree",{get:()=>(!0!==e.p3xr.state.redisChanged&&JSON.stringify(S)===JSON.stringify(p3xr.state.keys)||(e.p3xr.state.redisChanged=!1,e.keysTreeRendered=l.keysToTreeControl({keys:p3xr.state.keys}),S=p3xr.state.keys),e.keysTreeRendered)});let $,w,M=[];Object.defineProperty(e.p3xr.state,"keys",{get:()=>{if(M=e.p3xr.state.keysRaw.slice(),e.p3xr.settings.searchClientSide&&"string"==typeof e.p3xr.state.search&&e.p3xr.state.search.length>0&&(M=e.p3xr.settings.searchStartsWith?M.filter((t=>t.startsWith(e.p3xr.state.search))):M.filter((t=>t.includes(e.p3xr.state.search)))),M<=e.p3xr.settings.pageCount)return M;{const t=(e.p3xr.state.page-1)*e.p3xr.settings.pageCount;return M.slice(t,t+e.p3xr.settings.pageCount)}}}),Object.defineProperty(e.p3xr.state,"pages",{get:()=>Math.ceil(M.length/e.p3xr.settings.pageCount)}),Object.defineProperty(e.p3xr.settings,"pageCount",{get:()=>($=a.get(p3xr.settings.paging.cookieName),$=void 0===$?p3xr.settings.paging.default:parseInt($),$),set:e=>{$=e,$=a.put(p3xr.settings.paging.cookieName,e,{expires:p3xr.settings.cookieExpiry})}}),Object.defineProperty(e.p3xr.settings,"keyPageCount",{get:()=>(w=a.get(p3xr.settings.keyPage.cookieName),w=void 0===w?p3xr.settings.keyPage.default:parseInt(w),w),set:e=>{w=e,w=a.put(p3xr.settings.keyPage.cookieName,e,{expires:p3xr.settings.cookieExpiry})}}),o.start(),console.info("P3X Redis UI ran")}]),n(7356)()},5548:(e,t,n)=>{p3xr.ng.factory("p3xrDialogConnection",["p3xrCommon","$mdDialog","p3xrSocket",function(e,t,o){return new function(){this.show=async r=>{try{await t.show({controller:["$scope","$mdDialog",function(t,n){t.options=r,void 0!==r.model?(t.model=r.model,t.model.password=r.model.id):t.model={awsElastiCache:!1,azure:!1,name:void 0,host:void 0,port:void 0,password:void 0,username:void 0,id:void 0,readonly:void 0},t.model.hasOwnProperty("cluster")||(t.model.cluster=!1),t.model.hasOwnProperty("nodes")||(t.model.nodes=[]);for(let e of t.model.nodes)e.password=e.id;t.cancel=function(){n.cancel()};const i=()=>!t.p3xrConnectionForm.$invalid||(e.toast({message:p3xr.strings.form.error.invalid}),!1);t.addNode=e=>{const n={host:void 0,port:void 0,password:void 0,username:void 0,id:p3xr.nextId()};void 0===e?t.model.nodes.push(n):t.model.nodes.splice(e+1,0,n)},t.removeNode=async(n,o)=>{try{await e.confirm({event:n,message:p3xr.strings.confirm.deleteConnectionText}),t.model.nodes.splice(o,1),e.toast({message:p3xr.strings.status.nodeRemoved})}catch(t){if(void 0===t)return;e.generalHandleError(t)}},t.testConnection=async()=>{if(t.p3xrConnectionForm.$setSubmitted(),i())try{p3xr.ui.overlay.show({message:p3xr.strings.title.connectingRedis});await o.request({action:"redis-test-connection",payload:{model:t.model}});e.toast({message:p3xr.strings.status.redisConnected})}catch(t){e.generalHandleError(t)}finally{p3xr.ui.overlay.hide()}},t.submit=async()=>{if(i()){void 0===t.model.host&&(t.model.host="localhost"),void 0===t.model.port&&(t.model.port=6379),"new"===r.type&&(t.model.id=p3xr.nextId());for(let e of t.model.nodes)void 0===e.host&&(e.host="localhost"),void 0===e.id&&(e.id=p3xr.nextId());try{await o.request({action:"connection-save",payload:{model:angular.copy(t.model)}});e.toast({message:"new"===t.options.type?p3xr.strings.status.added:p3xr.strings.status.saved}),n.cancel()}catch(t){e.generalHandleError(t)}}}}],template:n(9862),parent:angular.element(document.body),targetEvent:r.$event,clickOutsideToClose:!0,fullscreen:!0})}catch(t){e.generalHandleError(t)}}}}])},4762:(e,t,n)=>{p3xr.ng.factory("p3xrDialogJsonEditor",["p3xrCommon","$mdDialog","$timeout",function(e,t,o){return new function(){this.show=async e=>(await Promise.all([n.e(331),n.e(524)]).then(n.t.bind(n,9524,23)),t.show({controller:["$scope","$mdDialog","p3xrCommon","$rootScope","p3xrTheme",function(t,r,i,s,a){let l,d;s.$broadcast("p3xr-main-resizer",{drag:!1});try{d=JSON.parse(e.value),t.isJson=!0}catch(e){d=void 0,t.isJson=!1}if(t.isJson){(async()=>{try{o((()=>{let e;switch(p3xr.settings.language.current){case"zn":e="zh-CN";break;default:e="en"}const t=document.getElementById("p3xr-jsoneditor"),n={limitDragging:!1,modes:["tree","code","view","preview"],mode:"code",language:e,indentation:p3xr.settings.jsonFormat};a.isDark()&&(n.theme="ace/theme/twilight"),l=new JSONEditor(t,n,d)}))}catch(e){i.generalHandleError(e)}})()}const c=e=>{if(27===(e.which||e.keyCode)){e.preventDefault(),e.stopPropagation();const t=$(".pico-close");t.length>0?t.click():r.cancel()}};document.documentElement.addEventListener("keydown",c,!0);const m=n(7280)((()=>{l&&l.aceEditor&&(console.log("resize json editor ace resize"),l.aceEditor.resize())}),p3xr.settings.debounce);$window.on("resize",m),t.$on("$destroy",(()=>{$window.off("resize",m),l&&(l.destroy(),l=void 0),s.$broadcast("p3xr-main-resizer",{drag:!0}),document.documentElement.removeEventListener("keydown",c,!0)})),t.ok=function(){r.cancel()},t.save=function({format:e}){try{r.hide({obj:JSON.stringify(l.get(),null,e?p3xr.settings.jsonFormat:0)})}catch(e){i.generalHandleError(e)}}}],template:n(8133),parent:angular.element(document.body),targetEvent:e.$event,clickOutsideToClose:!1,fullscreen:!0,multiple:!0,escapeToClose:!1}))}}])},66:(e,t,n)=>{p3xr.ng.factory("p3xrDialogJsonView",["p3xrCommon","$mdDialog",function(e,t){return new function(){this.show=async o=>{try{await t.show({controller:["$scope","$mdDialog","$timeout",function(e,t,n){e.treeExpandAll=()=>{p3xr.ui.overlay.show({message:p3xr.strings.title.jsonRecursive}),n((()=>{e.howExpanded="recursive",n((()=>{p3xr.ui.overlay.hide()}))}))},e.treeCollapseAll=()=>{e.howExpanded=!0};try{e.howExpanded=!0,e.obj=JSON.parse(o.value),e.isJson=!0}catch(t){e.obj=void 0,e.isJson=!1}e.ok=function(){t.cancel()}}],template:n(3857),parent:angular.element(document.body),targetEvent:o.$event,clickOutsideToClose:!0,fullscreen:!0,multiple:!0})}catch(t){e.generalHandleError(t)}}}}])},933:(e,t,n)=>{p3xr.ng.factory("p3xrDialogKeyNewOrSet",["p3xrCommon","$mdDialog","p3xrSocket","p3xrDialogJsonEditor","p3xrDialogJsonView",function(e,t,o,r,i){return new function(){this.show=s=>new Promise((async(a,l)=>{try{await t.show({controller:["$scope","$mdDialog",function(t,d){t.jsonViewer=e=>{i.show({event:e.$event,value:e.value})},t.copy=t=>{n.g.p3xr.clipboard({value:t.value}),e.toast(p3xr.strings.status.dataCopied)},t.types=["string","list","hash","set","zset","stream"],t.validateJson=!1,t.model={type:"string",key:void 0!==s.node?s.node.key:"",value:void 0,score:void 0,streamTimestamp:"*",hashKey:void 0,index:void 0},t.options=s,s.hasOwnProperty("model")&&Object.assign(t.model,s.model),t.cancel=function(){d.cancel(),l()};t.submit=async()=>{if(!t.p3xrKeyNewForm.$invalid||(e.toast({message:p3xr.strings.form.error.invalid}),0))try{const n=await o.request({action:"key-new-or-set",payload:{type:s.type,originalValue:s.hasOwnProperty("model")?s.model.value:void 0,originalHashKey:s.hasOwnProperty("model")?s.model.hashKey:void 0,model:angular.copy(t.model)}});window.gtag("config",p3xr.settings.googleAnalytics,{page_path:"/key-new-or-set"}),a(n),e.toast({message:p3xr.strings.status.set}),d.cancel()}catch(t){e.generalHandleError(t)}},t.jsonEditor=async n=>{try{const e=await r.show({event:n.$event,value:n.value});t.model.value=e.obj,t.$digest()}catch(t){e.generalHandleError(t)}},t.formatJson=()=>{try{t.model.value=JSON.stringify(JSON.parse(t.model.value),null,p3xr.settings.jsonFormat)}catch(t){e.toast({message:p3xr.strings.label.jsonViewNotParsable})}}}],template:n(5817),parent:angular.element(document.body),targetEvent:s.$event,clickOutsideToClose:!1,fullscreen:!0,multiple:!0})}catch(t){l(t),e.generalHandleError(t)}}))}}])},7753:(e,t,n)=>{p3xr.ng.factory("p3xrDialogTreecontrolSettings",["p3xrCommon","$mdDialog","$timeout",function(e,t,o){return new function(){this.show=async o=>{try{await t.show({controller:["$scope","$rootScope",function(n,r){n.model={treeSeparator:r.p3xr.settings.redisTreeDivider,pageCount:r.p3xr.settings.pageCount,keyPageCount:r.p3xr.settings.keyPageCount,keysSort:r.p3xr.settings.keysSort,searchClientSide:r.p3xr.settings.searchClientSide,searchStartsWith:r.p3xr.settings.searchStartsWith,maxValueDisplay:r.p3xr.settings.maxValueDisplay,maxKeys:r.p3xr.settings.maxKeys,jsonFormat:2===r.p3xr.settings.jsonFormat,animation:r.p3xr.settings.animation},n.cancel=function(){t.cancel()};n.submit=async()=>{if(!n.p3xrDialogTreecontrolSettingsForm.$invalid||(e.toast({message:p3xr.strings.form.error.invalid}),0))try{r.p3xr.settings.redisTreeDivider=n.model.treeSeparator,r.p3xr.settings.pageCount=n.model.pageCount,r.p3xr.settings.keyPageCount=n.model.keyPageCount,r.p3xr.settings.keysSort=n.model.keysSort,r.p3xr.settings.searchClientSide=n.model.searchClientSide,r.p3xr.settings.searchStartsWith=n.model.searchStartsWith,r.p3xr.state.page=1,r.p3xr.state.redisChanged=!0,r.p3xr.settings.maxValueDisplay=n.model.maxValueDisplay,r.p3xr.settings.maxKeys=n.model.maxKeys,r.p3xr.settings.jsonFormat=!0===n.model.jsonFormat?2:4,r.p3xr.settings.animation=!0===n.model.animation?1:0,void 0!==o.p3xrMainRef&&o.p3xrMainRef.refresh(),t.cancel(),r.$broadcast("p3x-refresh")}catch(t){e.generalHandleError(t)}}}],template:n(526),parent:angular.element(document.body),targetEvent:o.$event,clickOutsideToClose:!0,fullscreen:!0})}catch(t){e.generalHandleError(t)}}}}])},6051:(e,t,n)=>{p3xr.ng.factory("p3xrDialogTtl",["p3xrCommon","$mdDialog",function(e,t){const o=n(7284);return new function(){this.show=async r=>{try{return await t.show({controller:["$scope","$mdDialog",function(t,i){t.cancel=function(){i.cancel()},t.model=r.model;const s=n(4848);"number"==typeof t.model.ttl&&t.model.ttl>0?t.convertTextToTime=s(1e3*t.model.ttl,{delimiter:" "}):t.convertTextToTime="",t.openTimestringNpm=()=>{window.open("https://www.npmjs.com/package/timestring#keywords","_blank")};let a=!0;t.$watch("convertTextToTime",((e,n)=>{if(a)a=!a;else try{t.model.ttl=o(String(e),"s")}catch(e){console.warn("timestring parse error",e)}}));t.submit=async()=>{if(!t.p3xrTtlForm.$invalid||(e.toast({message:p3xr.strings.form.error.invalid}),0))try{isNaN(t.model.ttl)&&(t.model.ttl=Math.round(t.model.ttl));const e={model:t.model};i.hide(e)}catch(t){e.generalHandleError(t)}}}],template:n(5006),parent:angular.element(document.body),targetEvent:r.$event,clickOutsideToClose:!0})}catch(t){e.generalHandleError(t)}}}}])},6474:()=>{p3xr.ng.directive("p3xValidateJson",["$timeout","$rootScope",function(e,t){return{restrict:"A",require:"ngModel",scope:{p3xValidateJsonRequired:"<",model:"=ngModel"},link:function(e,t,n,o){let r,i=e.p3xValidateJsonRequired||!1;const s=e=>{o.$setValidity("p3xValidateJson",e)};e.$watch("p3xValidateJsonRequired",((t,n)=>{if(i=t,i)try{JSON.parse(r),s(!0)}catch(e){s(!1)}else s(!0),e.model=r})),o.$validators.p3xValidateJson=(e,t)=>{if(r=e,!i)return s(!0),e;try{return JSON.parse(e),s(!0),e}catch(e){return s(!1),!1}}}}}])},2586:()=>{p3xr.ng.directive("ngEnter",(function(){return function(e,t,n){t.bind("keydown keypress",(function(t){13===t.which&&(e.$apply((function(){e.$eval(n.ngEnter)})),t.preventDefault())}))}}))},98:()=>{p3xr.ng.factory("p3xrCommon",["$mdToast","$mdDialog","$mdColors","$rootScope","p3xrRedisParser","$timeout",function(e,t,n,o,r,i){const s=e=>{let n,o,r;return e.hasOwnProperty("disableCancel")?(n=t.alert(),o=p3xr.strings.confirm.info,r=p3xr.strings.intention.ok):(n=t.confirm(),o=p3xr.strings.confirm.title,r=p3xr.strings.intention.sure),n.title(o).htmlContent(e.message).targetEvent(e.event).ok(r).multiple(!0),e.hasOwnProperty("disableCancel")||n.cancel(p3xr.strings.intention.cancel),t.show(n)},a={generalHandleError:e=>{if(void 0!==e){if(e instanceof Error||e instanceof Object||(e=new Error(e)),e instanceof Error||"error"===e.status){let t;return t=e instanceof Error?e:e.error,console.warn("generalHandleError"),console.error(t),"string"==typeof t&&p3xr.strings.code.hasOwnProperty(t)?t=new Error(p3xr.strings.code[t]):t.hasOwnProperty("code")&&p3xr.strings.code.hasOwnProperty(t.code)?t.message=p3xr.strings.code[t.code]:p3xr.strings.code.hasOwnProperty(t.message)&&(t.message=p3xr.strings.code[t.message]),a.alert({title:p3xr.strings.title.error,message:"<pre>"+(t.hasOwnProperty("message")?t.message:t)+"</pre>"}),!1}return!0}},toast:t=>{"string"==typeof t&&(t={message:t});const n='<md-toast class="md-toast p3xr-toast-default" ng-click="closeToast()">'+t.message+"</md-toast>";e.show({controller:"p3xrToastController",template:n,hideDelay:t.hideDelay||p3xr.settings.toast.timeout,position:p3xr.settings.toast.position})},alert:e=>("string"==typeof e&&(e={message:e}),e.disableCancel=!0,s(e)),confirm:s,loadRedisInfoResponse:e=>{const{response:t}=e;console.time("loadRedisInfoResponse"),o.p3xr.state.info=r.info(t.info),o.p3xr.state.keysRaw=t.keys,o.p3xr.settings.keysSort&&o.p3xr.state.keysRaw.length<=p3xr.settings.maxLightKeysCount?o.p3xr.state.keysRaw=t.keys.sort(p3xr.sort.naturalCompareDocument()):o.p3xr.state.keysRaw=t.keys,o.p3xr.state.keysInfo=t.keysInfo,i((()=>{o.p3xr.state.reducedFunctions=o.p3xr.state.keysRaw.length>p3xr.settings.maxLightKeysCount,o.$digest(),console.timeEnd("loadRedisInfoResponse")}))}};return a}]).controller("p3xrToastController",["$scope","$mdToast",function(e,t){e.closeToast=function(){t.hide()}}])},7116:()=>{p3xr.ng.factory("p3xrRedisParser",["$rootScope",function(e){return new function(){const t=this;this.array=e=>{const{line:t}=e;let{divider:n,fieldDivider:o}=e;void 0===n&&(n=","),void 0===o&&(o="=");const r=t.split(n),i={};for(let e of r){const t=e.split(o);i[t[0]]=t[1].trim()}return i},this.info=e=>{const n=e.split("\n"),o={};let r,i;for(let e of n)if(e.startsWith("#"))void 0!==r&&(o[r]=i),r=e.substring(1).toLowerCase().trim(),i={};else if(e.length>2){const n=e.split(":");i[n[0]]=n[1].includes(",")?t.array({line:n[1].trim()}):n[1].trim()}return void 0!==r&&(o[r]=i),o.hasOwnProperty("keyspace")&&(o.keyspaceDatabases={},Object.keys(o.keyspace).forEach((e=>{e=parseInt(e.substring(2)),o.keyspaceDatabases[e]=!0}))),o},this.keysToTreeControl=t=>{let{keys:n}=t,{divider:o}=t;void 0===o&&(o=p3xr.settings.redisTreeDivider);const r=[],i=[];e.expandedNodes=[];const s=(t,n=0,a=r)=>{let l=!1;if(n+1<t.length)for(let e in a){const o=a[e];o.label===t[n]&&"folder"===o.type&&(l=o)}if(!1===l){const r={label:t[n],key:t.slice(0,n+1).join(o),children:[],childCount:0};l=n+1===t.length?Object.assign(r,{type:"element",keysInfo:p3xr.state.keysInfo[r.key]}):Object.assign(r,{type:"folder"}),a.push(l);for(let t of e.savedExpandedNodes)t.key===l.key&&i.push(l)}n+1<t.length&&s(t,n+1,l.children)};e.expandedNodes=i;for(let e of n){let t;t=""===o?[e]:e.split(o),s(t)}const a={},l=e=>{a[e.key]=e.children.length;for(let t of e.children)l(t)};for(let e of r)l(e);const d=e=>{for(let t of Object.keys(a))(t.startsWith(`${e.key}:`)||t===e.key)&&(e.childCount+=a[t]);for(let t of e.children)d(t)};for(let e of r)d(e);return e.savedExpandedNodes=[],r},this.console=new function(){this.parse=e=>{if("object"==typeof e){let t="";return Object.keys(e).forEach((n=>{""!==t&&(t+="\n"),t+=e[n]})),t}return e}}}}])},7669:(e,t,n)=>{p3xr.ng.factory("p3xrSocket",["$rootScope","p3xrCommon","$state",function(e,t,o){const r={rejectUnauthorized:!1,path:"/socket.io",secure:!0};!0===n.g.p3xrDevMode&&(r.transports=["websocket"]);const i=io.connect(p3xr.api.host,r);let s,a=!1;i.on("connect",(async function(){a?console.log("p3xr-socket (socket) RE-connected",i.id):console.log("p3xr-socket (socket) connected",i.id),a=!0})),i.on("disconnect",(function(){location.reload()})),i.on("info-interval",(t=>{e.p3xr.state.donated=t.donated,t.donated!==s&&(n.g.p3xr.isBot()||window.gtag("config",p3xr.settings.googleAnalytics,{page_path:p3xr.state.donated?"/donated":"/free"}),s=t.donated,e.$digest())}));let l=!1;const d=async function(e){if(!l){l=!0;try{t.generalHandleError(e),o.go("socketio-error",{error:e}),await t.confirm({disableCancel:!1,message:p3xr.strings.confirm.socketioConnectError}),location.reload()}catch(e){t.generalHandleError(e)}}};i.on("error",d),i.on("connect_error",d),i.on("connections",(n=>{t.generalHandleError(n)?(p3xr.state.connections=n.connections,e.$digest()):p3xr.connectionsReset()})),i.on("redis-disconnected",(async n=>{if(void 0!==e.p3xr.state.connection&&e.p3xr.state.connection.id===n.connectionId){e.p3xr.state.connection=void 0,"error"===n.status?t.toast({message:p3xr.strings.status.redisDisconnected(n)}):"code"===n.status&&(p3xr.strings.code.hasOwnProperty(n.code)?t.toast({message:p3xr.strings.code[n.code]}):t.toast({message:`unknown redis disconnect code: ${n.code}`})),o.go("main");try{await m({action:"trigger-redis-disconnect",enableResponse:!1})}catch(e){t.generalHandleError(e)}}})),i.on("redis-status",(t=>{e.p3xr.state.redisConnections=t.redisConnections,setTimeout((()=>{e.$digest()}))}));let c=!1;i.on("configuration",(t=>{e.p3xr.state.cfg=t,!0===p3xr.state.cfg.snapshot?p3xr.state.version="SNAPSHOT":(p3xr.state.version="v"+p3xr.state.cfg.version,c||(c=!0,window.gtag("config",p3xr.settings.googleAnalytics,{page_path:"/version/"+p3xr.state.version}))),e.$digest()})),i.on("error",t.generalHandleError);const m=t=>{t.payload||(t.payload={}),"string"==typeof e.p3xr.state.search&&e.p3xr.state.search.length>0&&(e.p3xr.settings.searchStartsWith?t.payload.match=e.p3xr.state.search+"*":t.payload.match="*"+e.p3xr.state.search+"*"),t.payload.maxKeys=parseInt(p3xr.settings.maxKeys);let{enableResponse:n}=t;if(!1!==n&&(n=!0),n)return new Promise(((n,o)=>{t.requestId=p3xr.nextId();const r=`p3xr-response-${t.requestId}`;let s;const a=t=>{if(clearTimeout(s),i.off(r),"ok"===t.status)n(t);else{const e=new Error(t.error);o(e)}e.$digest()};s=setTimeout((()=>{i.off(r,a),o(new Error(p3xr.strings.label.socketIoTimeout({timeout:p3xr.settings.socket.timeout}))),e.$digest()}),p3xr.settings.socket.timeout),i.on(r,a),i.emit("p3xr-request",t)}));i.emit("p3xr-request",t)};return{ioClient:i,request:m}}])},8136:(e,t,n)=>{n(5548),n(4762),n(66),n(933),n(7753),n(6051),n(6474),n(2586),n(98),n(7116),n(7669),n(2912),n(2111),n(6553),n(7075),n(6650),n(3285),n(6961),n(2712),n(9825),n(9947),n(669),n(5214),n(3207),n(7601),n(6889),n(1502),n(4370),n(3888),n(8404),n(9767),n(2526),n(2974),n(6298),n(8498),n(9606),n(7713),n(57)},2912:(e,t,n)=>{p3xr.ng.component("p3xrLayout",{template:n(134),controller:["p3xrTheme","$rootScope","p3xrSocket","p3xrCommon","$state","$cookies","$timeout","$scope",function(e,t,o,r,i,s,a,l){let d;this.getThemeKey=e=>{if(void 0===d){const t=Object.keys(e);d=t.sort(((t,n)=>e[t].order-e[n].order))}return d},this.getVersionColor=()=>"p3xrThemeMatrix"===e.getCurrentThemeName()?"grey-900":"background-A100",this.setTheme=t=>{e.setTheme(e.generateThemeName(t))},this.openLink={github:()=>{window.open("https://github.com/patrikx3/redis-ui","github-patrikx3-redis-ui")},githubRelease:()=>{window.open("https://github.com/patrikx3/redis-ui/releases","github-patrikx3--redis-ui-releases")},githubChangelog:()=>{window.open("https://github.com/patrikx3/redis-ui/blob/master/changelog.md#change-log","github-patrikx3-redis-ui-changelog")},donate:()=>{window.open("https://www.paypal.me/patrikx3","p3x-redis-ui-donate")}};const c=n(268);let m;Object.defineProperty(this,"themeSelectedKey",{get:()=>{let e=p3xr.state.theme;return e=e.slice("p3xrTheme".length),e=c(e),e}});const u=()=>{m.css("left",document.documentElement.clientWidth/2-m.outerWidth()/2+"px")};this.reducedFunctionalty=()=>{r.confirm({disableCancel:!0,message:p3xr.strings.label.tooManyKeys({count:t.p3xr.state.keysRaw.length,maxLightKeysCount:p3xr.settings.maxLightKeysCount})})},this.$onInit=()=>{m=$("#p3xr-layout-reduced"),u(),$window.on("resize",u);const e=s.getObject(p3xr.settings.connectInfo.cookieName);void 0!==e&&this.connect(e),a((()=>{n.g.p3xrSetLanguage=e=>{t.$apply((()=>{t.isElectron=!0,this.setLanguage(e)}))},n.g.p3xrSetMenu=e=>{t.$apply((()=>{t.isElectron=!0,i.go(e)}))}}),3e3)},this.$onDestroy=function(){$window.off("resize",u)},n.g.p3xr.isBot()||t.$on("$locationChangeSuccess",(async function(e,t,n){const o=new URL(t);o.pathname.toLowerCase().startsWith("/main/key/")?window.gtag("config",p3xr.settings.googleAnalytics,{page_path:"/main/key"}):(console.log("$locationChangeSuccess gtag",o.pathname),window.gtag("config",p3xr.settings.googleAnalytics,{page_path:o.pathname}))})),this.connect=async(e,n=!1)=>{console.time("connect"),e=angular.copy(e);try{const a=location.pathname.split("/");a.shift();let l=a.join(".");""===l&&(l="main"),p3xr.ui.overlay.show({message:p3xr.strings.title.connectingRedis});const d=s.get(p3xr.settings.connection.getCookieNameCurrentDatabase(e.id)),c=await o.request({action:"connection-connect",payload:{connection:e,db:d}});t.p3xr.state.page=1,p3xr.state.dbsize=c.dbsize;let m=0;const u=[];for(;m<c.databases;)u.push(m++);p3xr.state.commands=[],Object.keys(c.commands).forEach((e=>{p3xr.state.commands.push(c.commands[e][0])})),p3xr.state.commands.sort(),t.p3xr.state.databaseIndexes=u,t.p3xr.state.connection=e,r.loadRedisInfoResponse({response:c}),s.putObject(p3xr.settings.connectInfo.cookieName,e,{expires:p3xr.settings.cookieExpiry}),!0===n&&l.startsWith("main.key")&&(l="main"),l.startsWith("main")?"main"===l&&i.go("main.statistics"):i.go(l)}catch(e){s.remove(p3xr.settings.connectInfo.cookieName),t.p3xr.state.connection=void 0,i.go("main.statistics"),r.generalHandleError(e)}finally{p3xr.ui.overlay.hide()}console.timeEnd("connect")},this.disconnect=async()=>{try{s.remove(p3xr.settings.connectInfo.cookieName),await o.request({action:"connection-disconnect",payload:{connectionId:p3xr.state.connection.id}}),t.p3xr.state.connection=void 0}catch(e){r.generalHandleError(e)}finally{i.go("main")}},Object.defineProperty(this,"connectionName",{get:()=>void 0!==t.p3xr.state.connection?t.p3xr.strings.label.connected({name:t.p3xr.state.connection.name}):t.p3xr.strings.intention.connect}),this.isMain=()=>i.current.name.startsWith("main"),this.isElectronInitialized=!1,this.setLanguage=async e=>{try{t.p3xr.settings.language.current=e,t.isElectron&&(await o.request({action:"set-language",payload:{key:e}}),this.isElectronInitialized=!0,l.$digest())}catch(e){r.generalHandleError(e)}}}]})},2111:(e,t,n)=>{p3xr.ng.component("p3xrMainKeyHash",{template:n(176),bindings:{p3xrValue:"=",p3xrKey:"<",p3xrResponse:"<"},controller:["p3xrCommon","p3xrSocket","p3xrDialogJsonView","p3xrDialogKeyNewOrSet","$rootScope","$scope",function(e,t,o,r,i,s){const a=()=>{this.pages=Math.ceil(Object.keys(this.p3xrValue).length/p3xr.settings.keyPageCount),this.page=1};s.$watch("$ctrl.p3xrValue",((e,t)=>{a()})),s.$watch("$root.p3xr.settings.keyPageCount",(()=>{a()})),this.$onInit=()=>{a()},this.pager=e=>{const{page:t}=e;switch(t){case"prev":this.page-1>=1&&(this.page=this.page-1);break;case"next":this.page+1<=this.pages&&(this.page=this.page+1);break;case"last":this.page=this.pages;break;case"first":this.page=1}},this.pageChange=()=>{this.page<1?this.page=1:this.page>this.pages&&(this.page=this.pages)},this.pageBasedList=()=>{const e={},t=p3xr.settings.keyPageCount*(this.page-1);let n=0;for(let o of Object.keys(this.p3xrValue))n>=t&&n<t+p3xr.settings.keyPageCount&&(e[o]=this.p3xrValue[o]),n++;return e},this.copy=t=>{n.g.p3xr.clipboard({value:t.value}),e.toast(p3xr.strings.status.dataCopied)},this.addHash=async t=>{try{await r.show({type:"append",$event:t.$event,model:{type:"hash",key:this.p3xrKey}}),i.$broadcast("p3x-refresh-key")}catch(t){e.generalHandleError(t)}},this.deleteHashKey=async n=>{try{await e.confirm({event:n.$event,message:p3xr.strings.confirm.deleteHashKey}),await t.request({action:"key-hash-delete-field",payload:{key:this.p3xrKey,hashKey:n.hashKey}}),i.$broadcast("p3x-refresh-key")}catch(t){e.generalHandleError(t)}},this.editValue=async t=>{try{const{hashKey:e,value:n}=t;await r.show({type:"edit",$event:t.$event,model:{type:"hash",value:n,hashKey:e,key:this.p3xrKey}}),i.$broadcast("p3x-refresh-key")}catch(t){e.generalHandleError(t)}},this.showJson=e=>{const{value:t}=e;o.show({value:t})}}]})},6553:(e,t,n)=>{p3xr.ng.component("p3xrMainKeyList",{template:n(2585),bindings:{p3xrValue:"=",p3xrKey:"<",p3xrResponse:"<"},controller:["$mdColors","p3xrCommon","p3xrSocket","$rootScope","p3xrDialogJsonView","p3xrDialogKeyNewOrSet","$scope",function(e,t,o,r,i,s,a){const l=()=>{this.pages=Math.ceil(Object.keys(this.p3xrValue).length/p3xr.settings.keyPageCount),this.page=1};a.$watch("$ctrl.p3xrValue",((e,t)=>{l()})),a.$watch("$root.p3xr.settings.keyPageCount",(()=>{l()})),this.$onInit=()=>{l()},this.pager=e=>{const{page:t}=e;switch(t){case"prev":this.page-1>=1&&(this.page=this.page-1);break;case"next":this.page+1<=this.pages&&(this.page=this.page+1);break;case"last":this.page=this.pages;break;case"first":this.page=1}},this.pageChange=()=>{this.page<1?this.page=1:this.page>this.pages&&(this.page=this.pages)},this.pageBasedList=()=>{const e=[],t=p3xr.settings.keyPageCount*(this.page-1);let n=0;for(let o in this.p3xrValue)n>=t&&n<t+p3xr.settings.keyPageCount&&e.push(this.p3xrValue[o]),n++;return e},this.copy=e=>{n.g.p3xr.clipboard({value:e.value}),t.toast(p3xr.strings.status.dataCopied)},this.appendValue=async e=>{try{const{index:t,value:n}=e;await s.show({type:"append",$event:e.$event,model:{type:"list",key:this.p3xrKey}}),r.$broadcast("p3x-refresh-key")}catch(e){t.generalHandleError(e)}},this.editValue=async e=>{try{const{index:t,value:n}=e;await s.show({type:"edit",$event:e.$event,model:{type:"list",value:n,index:e.index,key:this.p3xrKey}}),r.$broadcast("p3x-refresh-key")}catch(e){t.generalHandleError(e)}},this.deleteListElement=async e=>{try{await t.confirm({event:e.$event,message:p3xr.strings.confirm.deleteListItem});await o.request({action:"key-list-delete-index",payload:{key:this.p3xrKey,index:e.index}});r.$broadcast("p3x-refresh-key")}catch(e){t.generalHandleError(e)}},this.showJson=e=>{const{value:t}=e;i.show({value:t})}}]})},7075:(e,t,n)=>{p3xr.ng.component("p3xrMainKeySet",{template:n(7129),bindings:{p3xrValue:"=",p3xrKey:"<",p3xrResponse:"<"},controller:["p3xrCommon","p3xrSocket","p3xrDialogJsonView","p3xrDialogKeyNewOrSet","$rootScope","$scope",function(e,t,o,r,i,s){const a=()=>{this.pages=Math.ceil(Object.keys(this.p3xrValue).length/p3xr.settings.keyPageCount),this.page=1};s.$watch("$ctrl.p3xrValue",((e,t)=>{a()})),s.$watch("$root.p3xr.settings.keyPageCount",(()=>{a()})),this.$onInit=()=>{a()},this.pager=e=>{const{page:t}=e;switch(t){case"prev":this.page-1>=1&&(this.page=this.page-1);break;case"next":this.page+1<=this.pages&&(this.page=this.page+1);break;case"last":this.page=this.pages;break;case"first":this.page=1}},this.pageChange=()=>{this.page<1?this.page=1:this.page>this.pages&&(this.page=this.pages)},this.pageBasedList=()=>{const e=[],t=p3xr.settings.keyPageCount*(this.page-1);let n=0;for(let o in this.p3xrValue)n>=t&&n<t+p3xr.settings.keyPageCount&&e.push(this.p3xrValue[o]),n++;return e},this.copy=t=>{n.g.p3xr.clipboard({value:t.value}),e.toast(p3xr.strings.status.dataCopied)},this.addSet=async t=>{try{await r.show({type:"append",$event:t.$event,model:{type:"set",key:this.p3xrKey}}),i.$broadcast("p3x-refresh-key")}catch(t){e.generalHandleError(t)}},this.deleteSetMember=async n=>{try{await e.confirm({event:n.$event,message:p3xr.strings.confirm.deleteSetMember}),await t.request({action:"key-set-delete-member",payload:{key:this.p3xrKey,value:n.value}}),i.$broadcast("p3x-refresh-key")}catch(t){e.generalHandleError(t)}},this.editValue=async t=>{try{const{value:e}=t;await r.show({type:"edit",$event:t.$event,model:{type:"set",value:e,key:this.p3xrKey}}),i.$broadcast("p3x-refresh-key")}catch(t){e.generalHandleError(t)}},this.showJson=e=>{const{value:t}=e;o.show({value:t})}}]})},6650:(e,t,n)=>{p3xr.ng.component("p3xrMainKeyStream",{template:n(8065),bindings:{p3xrValue:"=",p3xrKey:"<",p3xrResponse:"<"},controller:["$scope","p3xrCommon","p3xrSocket","p3xrDialogJsonView","p3xrDialogKeyNewOrSet","$rootScope",function(e,t,o,r,i,s){const a=()=>{this.pages=Math.ceil(Object.keys(this.p3xrValue).length/p3xr.settings.keyPageCount),this.page=1};e.$watch(this.pageBasedList,a),this.$onInit=()=>{a()},this.pager=e=>{const{page:t}=e;switch(t){case"prev":this.page-1>=1&&(this.page=this.page-1);break;case"next":this.page+1<=this.pages&&(this.page=this.page+1);break;case"last":this.page=this.pages;break;case"first":this.page=1}},this.pageChange=()=>{this.page<1?this.page=1:this.page>this.pages&&(this.page=this.pages)},this.pageBasedList=()=>{const e={},t=p3xr.settings.keyPageCount*(this.page-1);let n=0;for(let o of Object.keys(this.p3xrValue))n>=t&&n<t+p3xr.settings.keyPageCount&&(e[o]=this.p3xrValue[o]),n++;return e},this.p3xrValueGenerated=[],e.$watch("$ctrl.p3xrValue",((e,t)=>{this.p3xrValueGenerated=[];for(let e of this.p3xrValue){const t=e[1],n=[];for(let e=0;e<t.length;e+=2)n.push([t[e],t[e+1]]);this.p3xrValueGenerated.push(n)}a()})),this.copy=e=>{n.g.p3xr.clipboard({value:e.value}),t.toast(p3xr.strings.status.dataCopied)},this.addStream=async e=>{try{await i.show({type:"append",$event:e.$event,model:{type:"stream",key:this.p3xrKey}}),s.$broadcast("p3x-refresh-key")}catch(e){t.generalHandleError(e)}},this.deleteStreamTimestamp=async e=>{try{await t.confirm({event:e.$event,message:p3xr.strings.confirm.deleteStreamTimestamp}),await o.request({action:"key-stream-delete-timestamp",payload:{key:this.p3xrKey,streamTimestamp:e.streamTimestamp}}),s.$broadcast("p3x-refresh-key")}catch(e){t.generalHandleError(e)}};const l=n(5822);this.showTimestamp=({timestamp:e})=>{const t=Number(e.slice(0,e.indexOf("-"))),n=new Date(t);return l(n).format("L LTS")}}]})},3285:(e,t,n)=>{p3xr.ng.component("p3xrMainKeyString",{template:n(9263),bindings:{p3xrValue:"=",p3xrKey:"<",p3xrResponse:"<"},controller:["p3xrSocket","p3xrCommon","$rootScope","p3xrDialogJsonView","p3xrDialogJsonEditor",function(e,t,o,r,i){let s;this.copy=()=>{n.g.p3xr.clipboard({value:this.p3xrValue}),t.toast(p3xr.strings.status.dataCopied)},this.editable=!1,this.edit=()=>{s=angular.copy(this.p3xrValue),this.editable=!0},this.cancelEdit=()=>{this.p3xrValue=s,this.editable=!1},this.validateJson=!1,this.save=async()=>{try{if(!0===this.validateJson)try{JSON.parse(this.p3xrValue)}catch(e){return void t.toast({message:p3xr.strings.label.jsonViewNotParsable})}await e.request({action:"key-set",payload:{type:this.p3xrResponse.type,value:this.p3xrValue,key:this.p3xrKey}});window.gtag("config",p3xr.settings.googleAnalytics,{page_path:"/key-set"}),this.editable=!1}catch(e){t.generalHandleError(e)}finally{o.$broadcast("p3x-refresh-key")}},this.jsonViewer=e=>{r.show({event:e.$event,value:this.p3xrValue})},this.jsonEditor=async e=>{try{const t=await i.show({event:e.$event,value:this.p3xrValue});this.p3xrValue=t.obj,await this.save()}catch(e){t.generalHandleError(e)}},this.formatJson=async()=>{try{this.p3xrValue=JSON.stringify(JSON.parse(this.p3xrValue),null,p3xr.settings.jsonFormat),await this.save()}catch(e){t.toast({message:p3xr.strings.label.jsonViewNotParsable})}}}]})},6961:(e,t,n)=>{p3xr.ng.component("p3xrMainKeyZset",{template:n(508),bindings:{p3xrValue:"=",p3xrKey:"<",p3xrResponse:"<"},controller:["$scope","p3xrCommon","p3xrSocket","p3xrDialogJsonView","p3xrDialogKeyNewOrSet","$rootScope",function(e,t,o,r,i,s){const a=()=>{this.pages=Math.ceil(this.p3xrValue.length/2/p3xr.settings.keyPageCount),this.page=1};e.$watch("$root.p3xr.settings.keyPageCount",(()=>{a()})),this.$onInit=()=>{a()},this.pager=e=>{const{page:t}=e;switch(t){case"prev":this.page-1>=1&&(this.page=this.page-1);break;case"next":this.page+1<=this.pages&&(this.page=this.page+1);break;case"last":this.page=this.pages;break;case"first":this.page=1}},this.pageChange=()=>{this.page<1?this.page=1:this.page>this.pages&&(this.page=this.pages)},this.pageBasedList=()=>{const e=[],t=p3xr.settings.keyPageCount*(this.page-1);let n=0;for(let o in this.generatedValue)n>=t&&n<t+p3xr.settings.keyPageCount&&e.push(this.generatedValue[o]),n++;return e},this.copy=e=>{n.g.p3xr.clipboard({value:e.value}),t.toast(p3xr.strings.status.dataCopied)};let l;e.$watch("$ctrl.p3xrValue",((e,t)=>{e!==l&&(l=e,this.generatedValue=(e=>{const t=[];let n;for(let o of e)void 0===n?n=o:(t.push([parseFloat(o),n]),n=void 0);return t})(this.p3xrValue),a())})),this.showJson=e=>{const{value:t}=e;r.show({value:t})},this.addZSet=async e=>{try{await i.show({type:"append",$event:e.$event,model:{type:"zset",key:this.p3xrKey}}),s.$broadcast("p3x-refresh-key")}catch(e){t.generalHandleError(e)}},this.deleteZSet=async e=>{try{await t.confirm({event:e.$event,message:p3xr.strings.confirm.deleteZSetMember}),await o.request({action:"key-zset-delete-member",payload:{key:this.p3xrKey,value:e.member}}),s.$broadcast("p3x-refresh-key")}catch(e){t.generalHandleError(e)}},this.editValue=async e=>{try{const{member:t}=e;await i.show({type:"edit",$event:e.$event,model:{type:"zset",score:e.score,value:t,key:this.p3xrKey}}),s.$broadcast("p3x-refresh-key")}catch(e){t.generalHandleError(e)}}}]})},2712:(e,t,n)=>{let o;p3xr.ng.component("p3xrMainKey",{template:n(9868),bindings:{p3xrResize:"&"},controller:["p3xrCommon","p3xrRedisParser","p3xrSocket","$rootScope","$stateParams","$timeout","$scope","$mdDialog","$state","$interval","p3xrDialogTtl","p3xrTheme","$mdColors",function(e,t,r,i,s,a,l,d,c,m,u,p,g){m.cancel(o),this.$stateParams=s;let h=!1;const f=()=>!(this.response.ttl<-1||h&&this.response.ttl<1)||(e.toast({message:p3xr.strings.status.keyIsNotExisting}),m.cancel(o),p3xr.state.redisChanged=!0,c.go("main.statistics"),!1),x=n(4848),y=()=>{if(this.response.ttl>-1){const e=()=>{if(f()){let e;switch(p3xr.settings.language.current){case"zn":e="zh_CN";break;default:e="en"}this.ttlParsed=" "+x(1e3*this.response.ttl,{language:e,delimiter:" "});const t=document.getElementById("p3xr-main-key-ttl-counter");t&&(t.innerText=this.ttlParsed)}else m.cancel(o)};e(),i.p3xr.state.reducedFunctions||(m.cancel(o),o=m((()=>{this.response.ttl=this.response.ttl-1,e()}),1e3))}},b=async(t={})=>{m.cancel(o);let n,{withoutParent:i}=t;void 0===i&&(i=!1);try{const e=await r.request({action:"key-get",payload:{key:s.key}});this.response=e;const t=e.type;if(-2===e.ttl)return void f();switch(t){case"string":e.length=e.value.length}e.ttl>-1&&(h=!0),y(),l.$digest()}catch(t){n=t,console.error(t),e.alert(p3xr.strings.label.unableToLoadKey({key:s.key}))}finally{void 0!==n?c.go("main.statistics"):i||null===s.resize||s.resize()}},T=()=>{$("#p3xr-theme-styles-tree-key").remove(),$("head").append(`<style id="p3xr-theme-styles-tree-key">\n[data-p3xr-tree-key="${p3xr.ui.htmlEncode(s.key)}"] {\n    background-color: ${p.isDark()?g.getThemeColor(p3xr.state.themeCommon+"-accent-300"):g.getThemeColor(p3xr.state.themeCommon+"-accent-800")} !important;\n    color: ${p.isDark()?"black":"white"} !important;\n    padding: 2px;\n}\n</style>`)};this.$onInit=()=>{b(),T()},l.$on("p3xr-theme-switched",T),this.$onDestroy=function(){$("#p3xr-theme-styles-tree-key").remove(),m.cancel(o)},this.charactersPrettyBytes=e=>{if(e<1024||void 0===e)return"";return"("+n(2315)(e)+")"},this.refresh=async e=>{window.gtag("config",p3xr.settings.googleAnalytics,{page_path:"/refresh"}),await b(e),l.$digest()},this.rename=async e=>{i.$broadcast("p3xr-key-rename",{key:s.key,$event:e.$event})},this.delete=async e=>{i.$broadcast("p3xr-key-delete",{key:s.key,$event:e.$event})},this.setTtl=async t=>{try{const n=await u.show({$event:t.$event,model:{ttl:-1===this.response.ttl?"":this.response.ttl}});if(void 0===n)return;if(null==n.model.ttl||""===String(n.model.ttl).trim()){await r.request({action:"persist",payload:{key:s.key}});window.gtag("config",p3xr.settings.googleAnalytics,{page_path:"/persist"}),await this.refresh(),e.toast({message:p3xr.strings.status.persisted})}else if(String(n.model.ttl).match(/^-{0,1}\d+$/)){await r.request({action:"expire",payload:{key:s.key,ttl:parseInt(n.model.ttl)}});window.gtag("config",p3xr.settings.googleAnalytics,{page_path:"/expire"}),await this.refresh(),e.toast({message:p3xr.strings.status.ttlChanged})}else e.toast({message:p3xr.strings.status.notInteger})}catch(t){e.generalHandleError(t)}},l.$on("p3x-refresh",(()=>{this.refresh({withoutParent:!0})})),l.$on("p3x-refresh-key",(()=>{this.refresh({withoutParent:!0})}))}]})},9825:(e,t,n)=>{p3xr.ng.component("p3xrMainStatistics",{template:n(4498),controller:["p3xrCommon","p3xrRedisParser","p3xrSocket","$rootScope","$scope","$timeout","$stateParams","$mdMedia",function(e,t,n,o,r,i,s,a){const l=["in","run","per"],d=["sha1"],c={perc:"percent",sec:"seconds"};let m=!0;const u=()=>{this.maxHeight=m?"auto":document.getElementById("p3xr-main-content-container").offsetHeight-50};r.$watch((()=>a("xs")),((e,t)=>{m=e,u()})),$window.on("resize",u),this.$doCheck=u,this.$onInit=()=>{p3xr.state.redisChanged&&(p3xr.state.redisChanged=!1,o.$broadcast("p3x-refresh"))},this.$onDestroy=()=>{$window.off("resize",u)},this.hasDatabases=Object.keys(o.p3xr.state.info.keyspaceDatabases).length>0,this.generateKey=e=>{if(p3xr.strings.title.hasOwnProperty(e))return p3xr.strings.title[e];return e.split("_").map(((e,t)=>(c.hasOwnProperty(e)&&(e=c[e]),d.includes(e)||e.length<4&&!l.includes(e)?e.toUpperCase():0===t?e[0].toUpperCase()+e.substring(1):e))).join(" ")}}]})},9947:(e,t,n)=>{p3xr.ng.component("p3xrMainTreecontrolControls",{template:n(3646),bindings:{p3xrMainRef:"<"},controller:["$cookies","$rootScope","p3xrCommon","$timeout","p3xrDialogTreecontrolSettings","$scope",function(e,t,n,o,r,i){this.treeExpandAll=()=>{try{p3xr.ui.overlay.show({message:p3xr.strings.status.treeExpandAll});let e=[];const n=(t,o=0)=>{if(delete t.$inview,"folder"===t.type){e.push(t);for(let e of t.children)n(e,o++)}};for(let e of t.keysTreeRendered)n(e);t.expandedNodes=e}catch(e){n.generalHandleError(e)}finally{p3xr.ui.overlay.hide()}},this.treeCollapseAll=()=>{t.expandedNodes=[],t.$broadcast("p3xr-main-treecontrol-control-noop")},i.$on("p3xr-main-treecontrol-control-noop",(()=>{o((()=>{$("#p3xr-main-treecontrol-controls-click-noop").click()}))})),this.noop=()=>{},this.page=e=>{const{page:n}=e;switch(n){case"prev":t.p3xr.state.page-1>=1&&(t.p3xr.state.page=t.p3xr.state.page-1);break;case"next":t.p3xr.state.page+1<=t.p3xr.state.pages&&(t.p3xr.state.page=t.p3xr.state.page+1);break;case"last":t.p3xr.state.page=t.p3xr.state.pages;break;case"first":t.p3xr.state.page=1}o((()=>{t.$digest()}))},this.pageChange=()=>{t.p3xr.state.page<1?t.p3xr.state.page=1:t.p3xr.state.page>t.p3xr.state.pages&&(t.p3xr.state.page=t.p3xr.state.pages)},this.openTreeSettingDialog=e=>{e.p3xrMainRef=this.p3xrMainRef,r.show(e)},this.search="",this.$onInit=()=>{this.search=t.p3xr.state.search},this.onSearchChange=()=>{t.p3xr.settings.searchClientSide?t.p3xr.state.redisChanged=!0:this.p3xrMainRef.refresh(),t.p3xr.state.page=1},this.treeDividerChange=()=>{t.p3xr.state.redisChanged=!0,t.$broadcast("p3x-refresh")}}]})},669:(e,t,n)=>{p3xr.ng.component("p3xrMainTree",{template:n(5484),bindings:{p3xrResize:"&",p3xrMainRef:"<"},controller:["p3xrCommon","p3xrRedisParser","p3xrSocket","$rootScope","$timeout","$state","$scope","$mdDialog","p3xrDialogKeyNewOrSet","p3xrTheme","$stateParams",function(e,t,o,r,i,s,a,l,d,c,m){this.displayNode=(e,t)=>{e.$inview=t},this.getTreeTheme=()=>c.isDark()?"tree-dark":"tree-classic",this.keysTreeOptions={nodeChildren:"children",dirSelectable:!1,multiSelection:!1},this.selectTreeNode=function(e,t,n,o,r,i,a,l,d,c){s.go("main.key",{key:e.key,resize:this.p3xrResize})},this.showToggle=function(e,t,o,i,s,a,l,d,c,m){t||n(554).recursive({nodes:r.keysTreeRendered}),r.$broadcast("p3xr-main-treecontrol-control-noop")},this.delete=async t=>{try{await e.confirm({event:t.$event,message:p3xr.strings.confirm.deleteKey});const n=angular.copy(r.expandedNodes),a=await o.request({action:"delete",payload:{key:t.key}});window.gtag("config",p3xr.settings.googleAnalytics,{page_path:"/delete"}),i((()=>{r.savedExpandedNodes=n,e.loadRedisInfoResponse({response:a})})),s.go("main.statistics"),e.toast({message:p3xr.strings.status.deletedKey({key:t.key})})}catch(t){e.generalHandleError(t)}},this.rename=async t=>{try{const n=l.prompt().title(p3xr.strings.confirm.rename.title).textContent(p3xr.strings.confirm.rename.textContent).placeholder(p3xr.strings.confirm.rename.placeholder).ariaLabel(p3xr.strings.confirm.rename.placeholder).initialValue(t.key).targetEvent(t.$event).required(!0).ok(p3xr.strings.intention.rename).cancel(p3xr.strings.intention.cancel),a=await l.show(n),d=angular.copy(r.expandedNodes),c=await o.request({action:"rename",payload:{key:t.key,keyNew:a}});window.gtag("config",p3xr.settings.googleAnalytics,{page_path:"/rename"}),i((()=>{r.savedExpandedNodes=d,e.loadRedisInfoResponse({response:c}),s.go("main.key",{key:a,resize:this.p3xrResize})})),e.toast({message:p3xr.strings.status.renamedKey})}catch(t){e.generalHandleError(t)}},this.deleteTree=async t=>{try{const{event:n,node:a}=t;n.stopPropagation();const l=angular.copy(r.expandedNodes);await e.confirm({event:n,message:p3xr.strings.confirm.deleteAllKeys({key:a.key})});const d=await o.request({action:"key-del-tree",payload:{key:a.key,redisTreeDivider:p3xr.settings.redisTreeDivider}});i((()=>{r.savedExpandedNodes=l,e.loadRedisInfoResponse({response:d}),void 0!==m.key&&m.key.startsWith(a.key+p3xr.settings.redisTreeDivider)&&s.go("main.statistics")})),e.toast({message:p3xr.strings.status.treeDeleted({key:a.key})})}catch(t){e.generalHandleError(t)}},this.extractNodeTooltip=e=>"folder"!==e.type&&void 0!==e.keysInfo?void 0===e.keysInfo?"":p3xr.ui.htmlEncode(p3xr.strings.redisTypes[e.keysInfo.type]+" - "+e.key):p3xr.ui.htmlEncode(e.key),this.extractNodeKey=e=>"folder"===e.type?"":p3xr.ui.htmlEncode(e.key),this.addKey=async t=>{const{event:n,node:o}=t;n.stopPropagation();const a=angular.copy(r.expandedNodes);try{const t=await d.show({$event:n,node:o,type:"add"});i((()=>{r.savedExpandedNodes=a,e.loadRedisInfoResponse({response:t}),s.go("main.key",{key:t.key,resize:this.p3xrResize})}))}catch(t){e.generalHandleError(t)}},a.$on("p3xr-key-delete",((e,t)=>{this.delete(t)})),a.$on("p3xr-key-rename",((e,t)=>{this.rename(t)})),a.$on("p3xr-key-new",((e,t)=>{this.addKey(t)})),this.treeHover=({node:e})=>{!0!==p3xr.state.connection.readonly&&(e.show=!0)}}]})},5214:(e,t,n)=>{let o=[],r=-1;const i=n.g.htmlEncode;p3xr.ng.component("p3xrConsole",{template:n(8236),controller:["p3xrCommon","p3xrSocket","$state","$rootScope","p3xrRedisParser","$mdDialog","$timeout",function(e,t,s,a,l,d,c){const m=p3xr.state.commands;let u,p,g,h,f,x,y;a.hasConnected()||s.go("main");const b=n(7280),T=()=>{let e,t=0;e=[p,g,h];for(let n of e)t+=n.outerHeight();const n=$window.height(),o=Math.max(n-t-70,0);u.height(o),u.css("max-height",`${o}px`)},v=b(T,p3xr.settings.debounce),S=e=>{if(!1===p3xr.state.monitor)return;let t=i(String(e.message));x.append(`<strong>PubSub channel:</strong> ${e.channel}`),x.append(`<pre>${t}</pre><br/>`),y.scrollTop=y.scrollHeight};let k,w,M,P;this.$onInit=()=>{u=$("#p3xr-console-content"),p=$("#p3xr-layout-header-container"),g=$("#p3xr-layout-footer-container"),h=$("#p3xr-console-header"),f=$("#p3xr-console-input"),x=$("#p3xr-console-content-output"),f.focus(),y=u[0],$window.on("resize",v),v(),this.clearConsole(),t.ioClient.on("pubsub-message",S)},this.$postLink=()=>{T()},this.$onDestroy=function(){$window.off("resize",v),t.ioClient.removeListener("pubsub-message",S)},this.inputValue="",this.actionEnter=async()=>{let e;const n=String(this.inputValue).trim();if(""!==n)try{x.append(`<div class="p3xr-console-content-output-item">${n}</div>`),this.inputValue="",e=await t.request({action:"console",payload:{command:n}});const s=i(String(l.console.parse(e.result)));x.append(`<pre>${s}</pre>`),e.hasOwnProperty("database")&&(a.p3xr.state.currentDatabase=e.database,a.p3xr.state.redisChanged=!0)}catch(e){console.error(e),x.append(`<pre>${p3xr.strings.code[e.message]||e.message}</pre>`)}finally{let t;t=void 0!==e?e.generatedCommand:n;const i=o.indexOf(t);i>-1&&o.splice(i,1),o.push(t),r=-1,y.scrollTop=y.scrollHeight,f.focus()}};const C=()=>{c((()=>{const e=f.val();f.val("").focus().val(e)}))};this.action=e=>{switch(9!==e.keyCode&&!0!==event.shiftKey&&(k=void 0,w=-1,M=[],P=!1),e.keyCode){case 13:return this.actionEnter();case 38:if(o.length<1)return;-1===r&&(r=o.length),r--,r>-1||(r=o.length-1),this.inputValue=o[r],C();break;case 40:if(o.length<1)return;r++,r>=o.length||(r=0),this.inputValue=o[r],C();break;case 9:if(void 0===this.inputValue&&(this.inputValue=""),!P){const e=String(this.inputValue).trim();k=e,w=-1,M=""===k?m:m.filter((e=>e.startsWith(k.toLowerCase())))}!0===event.shiftKey?w--:w++,w>=M.length?w=0:w<0&&(w=M.length-1),this.inputValue=M[w],e.stopPropagation(),e.preventDefault(),P=!0;break;default:r=-1}},this.clearConsole=()=>{x.empty(),x.append('<div class="p3xr-console-content-output-item"><strong>'+a.p3xr.strings.label.welcomeConsole+"</strong></div>"),x.append('<div class="p3xr-console-content-output-item">'+a.p3xr.strings.label.welcomeConsoleInfo+"</div>"),x.append('<div class="p3xr-console-content-output-item">'+a.p3xr.strings.label.welcomeConsoleInfo2+"</div>"),f.focus()},this.commands=e=>{d.show({controller:["$scope","$mdDialog",function(e,t){e.ok=function(){t.hide()},e.$watch((function(){return $("#p3xr-console-commands").parent().height()}),((t,n)=>{e.height=t}))}],fullscreen:!0,targetEvent:e.$event,template:'\n<md-dialog aria-label="{{ $root.p3xr.strings.intention.commands }}" layout-fill>\n  <md-toolbar md-theme="{{$root.p3xr.state.themeLayout}}">\n      <div class="md-toolbar-tools">\n        <md-icon>keyboard</md-icon>\n        &nbsp;\n        {{ $root.p3xr.strings.intention.commands }}\n        <span flex></span>\n         <md-button class="md-icon-button" ng-click="ok()" aria-label="{{ $root.p3xr.strings.intention.close }}">\n           <md-icon>close</md-icon>\n      </md-button>\n      </div>\n    </md-toolbar>\n\n    <md-dialog-content flex>\n      <div id="p3xr-console-commands">\n        <iframe seamless="seamless" src="https://redis.io/commands" frameborder="0" style="width: 100%; height: {{ height - 15 }}px;"></iframe>\n      </div>\n    </md-dialog-content>\n\n    <md-dialog-actions layout="row">\n      <span flex></span>\n      <md-button ng-click="ok()"  class="md-raised md-primary" aria-label="{{ $root.p3xr.strings.intention.close }}">\n        <md-icon>close</md-icon>\n        {{ $root.p3xr.strings.intention.close }}\n      </md-button>\n    </md-dialog-actions>\n</md-dialog>\n          '})}}]})},3207:(e,t,n)=>{p3xr.ng.component("p3xrError",{template:n(4007),controller:["$stateParams","$rootScope",function(e,t){this.$stateParams=e,t.p3xr.state.failed=!0}]})},7601:(e,t,n)=>{p3xr.ng.component("p3xrMain",{template:n(1856),controller:["$cookies","p3xrSocket","p3xrCommon","p3xrRedisParser","$rootScope","$state","$timeout","$scope","$mdMedia",function(e,t,o,r,i,s,a,l,d){let c,m,u,p,g,h,f,x=!1,y=!1;Object.defineProperty(l,"resizerColor",{get:()=>y||x?"accent-400":"accent",set:e=>{}});const b=p3xr.settings.resizeMinWidth,T=n(7280);let v,S=!1;l.$watch((function(){return d("xs")}),(function(e){e||!0!==S||(void 0!==v&&a.cancel(v),v=a(w,4*p3xr.settings.debounce)),S=e}));const k=(e={})=>{let t,n=0;t=[m,u,p];for(let e of t)n+=e.outerHeight();const o=$window.outerHeight(),r=Math.max(o-n-11,100);c.height(r),c.css("max-height",`${r}px`);const i=p3xr.dom.getPosition(c[0]),s=$("#p3xr-main-treecontrol-container");if(s){const e=$("#p3xr-main-treecontrol-controls-container"),t=p3xr.dom.getPosition(e[0]);s.css("top",i.top+t.height+"px"),s.css("left",i.left+"px"),s.css("height",i.height-t.height+"px"),s.css("max-height",i.height+"px"),void 0!==f?s.css("width",f-i.left+"px"):s.css("width",b+"px"),s.css("min-width",b+"px");const n=p3xr.dom.getPosition(s[0]);void 0===h&&D();const o=5;void 0!==h&&(h=document.getElementById("p3xr-main-content-sizer"),null!==h&&(h.addEventListener("mouseover",M),h.addEventListener("mouseout",P),h.style.top=i.top+"px",h.style.height=i.height+"px",h.style.left=i.left+n.width+"px",h.style.width=o+"px"));const r=$("#p3xr-main-content-container");r.css("top",i.top+"px"),r.css("height",i.height+"px"),r.css("left",i.left+n.width+o+"px"),r.css("width",i.width-n.width-o+"px"),e.width(n.width)}else G()},w=T((()=>{f=void 0,k()}),p3xr.settings.debounce),M=()=>{x=!0,l.$digest()},P=()=>{x=!1,l.$digest()},C=e=>{"mousedown"===e.type&&"p3xr-main-content-sizer"!==e.target.id||("mousedown"===e.type?(y=!0,document.documentElement.style.cursor="ew-resize",$body.addClass("p3xr-not-selectable")):"mouseup"===e.type&&(document.documentElement.style.cursor="auto",y=!1,$body.removeClass("p3xr-not-selectable")),!1===y&&k({}),e.stopPropagation(),l.$digest())},A=e=>{if(y){const t=p3xr.dom.getPosition(c[0]);e.clientX<t.left+b||e.clientX>window.innerWidth-b?document.documentElement.style.cursor="not-allowed":(document.documentElement.style.cursor="ew-resize",h.style.left=e.clientX+"px",f=e.clientX,k())}},D=()=>{h=document.getElementById("p3xr-main-content-sizer"),null!==h?(h.addEventListener("mouseover",M),h.addEventListener("mouseout",P),document.addEventListener("mousemove",A),document.addEventListener("mousedown",C),document.addEventListener("mouseup",C)):h=void 0};l.$on("p3xr-main-resizer",((e,t)=>{console.info("p3xr-main-resizer dragging:",t.drag),!0===t.drag?(document.addEventListener("mousemove",A),document.addEventListener("mousedown",C),document.addEventListener("mouseup",C)):(document.removeEventListener("mousemove",A),document.removeEventListener("mousedown",C),document.removeEventListener("mouseup",C))}));const G=()=>{null!=h&&(h.removeEventListener("mouseover",M),h.removeEventListener("mouseout",P),h=void 0),document.removeEventListener("mousedown",C),document.removeEventListener("mouseup",C),document.removeEventListener("mousemove",A)};this.resize=T(k,p3xr.settings.debounce),this.resizeRaw=k,this.$onInit=()=>{n(554).recursive({nodes:i.keysTreeRendered}),c=$("#p3xr-main-content"),m=$("#p3xr-layout-header-container"),u=$("#p3xr-layout-footer-container"),p=$("#p3xr-main-header"),g=c[0],k(),$window.on("resize",k),"/main"===s.current.url&&s.go("main.statistics"),p3xr.state.redisChanged&&(p3xr.state.redisChanged=!1,p3xr.state.connection&&this.refresh()),0===p3xr.state.connections.list.length&&void 0===p3xr.state.connection&&setTimeout((()=>{k()}),250)},this.$onDestroy=function(){$window.off("resize",k),G()},i.p3xr.state.page=1;let _,E,H=0;Object.defineProperty(this,"currentDatabase",{get:()=>{let t=p3xr.state.currentDatabase;return void 0===t&&(t=e.get(p3xr.settings.connection.getCookieNameCurrentDatabase(p3xr.state.connection.id))),void 0===t&&(t=0),t},set:async n=>{if(_=n,H!==_){H=n;try{await t.request({action:"console",payload:{command:`select ${H}`}})}catch(e){o.generalHandleError(e)}}e.put(p3xr.settings.connection.getCookieNameCurrentDatabase(p3xr.state.connection.id),String(n),{expires:p3xr.settings.cookieExpiry})}}),this.selectDatabase=async e=>{this.currentDatabase=e;try{i.p3xr.state.page=1;await t.request({action:"console",payload:{command:`select ${e}`}});o.toast({message:p3xr.strings.status.dbChanged({db:e})}),await this.statistics()}catch(e){o.generalHandleError(e)}},this.save=async()=>{try{const e=await t.request({action:"save"});i.p3xr.state.info=r.info(e.info),i.$digest(),o.toast({message:p3xr.strings.status.savedRedis})}catch(e){o.generalHandleError(e)}},this.statistics=async()=>{try{s.go("main.statistics"),await this.refresh()}catch(e){o.generalHandleError(e)}},this.refresh=async(e={})=>{console.time("refresh");let{withoutParent:n}=e;void 0===n&&(n=!1);try{p3xr.ui.overlay.show({message:p3xr.strings.status.reloadingDataInfo});const e={};!i.p3xr.settings.searchClientSide&&"string"==typeof i.p3xr.state.search&&i.p3xr.state.search.length>0&&(i.p3xr.settings.searchStartsWith?e.match=i.p3xr.state.search+"*":e.match="*"+i.p3xr.state.search+"*");const r=await t.request({action:"refresh",payload:e});p3xr.state.dbsize=r.dbsize,i.p3xr.state.redisChanged=!0,o.loadRedisInfoResponse({response:r}),n||i.$broadcast("p3x-refresh-key")}catch(e){o.generalHandleError(e)}finally{p3xr.ui.overlay.hide()}console.timeEnd("refresh")},l.$on("p3x-refresh",(()=>{this.refresh({withoutParent:!0})}));let I=new ResizeObserver((e=>{y||k()}));l.$watch((()=>(d("xs")?"true":"false")+"-"+(p3xr.state.connection?"true":"false")),(async(e,t)=>{if(E&&I.unobserve(E),void 0===p3xr.state.connection)return void console.log("no connection for resizing");if(d("xs"))return void k();let n=null;for(;null===n;)n=document.getElementById("p3xr-main-treecontrol-controls-container"),console.info("waiting for observing tree control controls"),await new Promise((e=>setInterval(e)));console.info("found observing tree control controls"),E=n,I.observe(E)})),l.$on("$destroy",(()=>{I.disconnect()})),this.addKey=e=>{const{event:t,node:n}=e;t.stopPropagation(),i.$broadcast("p3xr-key-new",{event:t,node:n})}}]})},6889:()=>{},1502:(e,t,n)=>{p3xr.ng.component("p3xrSettings",{template:n(2305),controller:["p3xrCommon","p3xrDialogConnection","$mdDialog","p3xrSocket","p3xrDialogTreecontrolSettings",function(e,t,o,r,i){this.connectionForm=e=>{t.show(e)},this.setLicense=async t=>{try{const i=o.prompt().title(p3xr.strings.confirm.license.title).textContent(p3xr.strings.confirm.license.textContent).placeholder(p3xr.strings.confirm.license.placeholder).ariaLabel(p3xr.strings.confirm.license.placeholder).initialValue("").targetEvent(t.$event).ok(p3xr.strings.intention.license).cancel(p3xr.strings.intention.cancel),s=await o.show(i),a=await r.request({action:"set-license",payload:{license:s}});n.g.p3xr.isBot()||a.donated===p3xr.state.donated||window.gtag("config",p3xr.settings.googleAnalytics,{page_path:a.donated?"/donated":"/free"}),p3xr.state.donated=a.donated,e.toast({message:"ok"!==a.info?p3xr.strings.error[a.info]:p3xr.strings.status.licenseSaved})}catch(t){if(void 0===t)return;p3xr.strings.error[t.message]&&(t=new Error(p3xr.strings.error[t.message])),e.generalHandleError(t)}},this.openTreeSettingDialog=e=>{i.show(e)},this.deleteConnection=async t=>{const{model:n,ev:o}=t;try{await e.confirm({event:o,message:p3xr.strings.confirm.deleteConnectionText});await r.request({action:"connection-delete",payload:{id:n.id}});e.toast({message:p3xr.strings.status.deleted})}catch(t){if(void 0===t)return;e.generalHandleError(t)}}}]})},4370:(e,t,n)=>{const o=new(n(1921))(window.navigator.userAgent);null!==o.mobile()||null!==o.phone()||o.tablet();p3xr.ng.provider("p3xrTheme",["$mdThemingProvider",function(e){e.generateThemesOnDemand(!0),e.alwaysWatchTheme(!0),e.setNonce();const t="p3xr-theme",n="p3xrThemeLight";this.start=()=>{Object.keys(p3xr.theme).forEach((t=>{p3xr.theme[t](e)})),e.setDefaultTheme(n)};const o={},r={dark:["p3xrThemeDarkNeu","p3xrThemeDark","p3xrThemeDarkoBluo","p3xrThemeMatrix"],light:["p3xrThemeLight","p3xrThemeEnterprise","p3xrThemeRedis"]};this.$get=["$mdTheming","$rootScope","$cookies","$mdColors",function(i,s,a,l){return new function(){const d=this;this.isDark=()=>r.dark.includes(this.getCurrentThemeName()),this.start=()=>{d.setTheme()},this.setTheme=d=>{void 0===d&&void 0===(d=a.get(t))&&(d=n),o.hasOwnProperty(d)||(i.generateTheme(d),i.generateTheme(`${d}Layout`),i.generateTheme(`${d}Common`),o[d]=!0),e.setDefaultTheme(d),s.p3xr.state.theme=d,a.put(t,d,{expires:p3xr.settings.cookieExpiry}),$body.removeClass("p3xr-theme-light"),$body.removeClass("p3xr-theme-dark"),r.dark.includes(d)?$body.addClass("p3xr-theme-dark"):$body.addClass("p3xr-theme-light"),$("#p3xr-theme-styles").remove();const c=p3xr.state.themeCommon+"-background",m=l.getThemeColor(p3xr.state.themeLayout+"-primary-hue-1"),u=`\n.p3xr-theme-dark .p3xr-content-border {\n    border-left: 1px solid ${m};\n    border-right: 1px solid ${m};\n    border-bottom: 1px solid ${m};\n}\n\n.p3xr-theme-light .p3xr-content-border {\n    border-left: 1px solid transparent;\n    border-right: 1px solid transparent;\n    border-bottom: 1px solid transparent;\n}\n\n\n.p3xr-toast-default .md-toast-content {\n    background-color: ${this.isDark()?l.getThemeColor(c):"auto"} !important;\n    border: solid 1px ${this.isDark()?"rgba(255, 255, 255, 0.5)":"auto"} !important;\n    ${this.isDark()?"box-shadow:  0 0 10px  rgba(0,0,0,0.6);":""}\n}\n\ntreecontrol i.tree-branch-head:before {\n    color: ${this.isDark()?l.getThemeColor("amber-A100"):l.getThemeColor("amber-A400")};\n    ${this.isDark()?"text-shadow: 1px 1px 1px rgba(55, 29, 27, 0.5);":"text-shadow: 1px 1px 0px rgba(55, 11, 0, 0.5);"}\n}\n\nbody.p3xr-theme-dark[md-theme="p3xrThemeMatrixLayout"] treecontrol i.tree-branch-head:before {\n    color: ${l.getThemeColor("lime-A400")} !important;\n}\n\n\n.p3xr-list-key-odd-item {\n    background-color: ${l.getThemeColor(p3xr.state.themeLayout+"-background-500-0.1")};\n}\n.p3xr-list-key-item {\n    border-bottom: 1px solid ${this.isDark()?l.getThemeColor(p3xr.state.themeLayout+"-background-300-0.1"):l.getThemeColor(p3xr.state.themeLayout+"-background-700-0.1")};\n}\n\ninput:-webkit-autofill, input:-webkit-autofill:focus {\n    -webkit-box-shadow:0 0 0 50px ${this.isDark()?"rgb(66, 66, 66, 0.9)":"rgba(255, 255, 255, 0.5)"} inset !important;\n    -webkit-text-fill-color: ${this.isDark()?"white":"black"}  !important;\n}\n`;$("head").append('<style id="p3xr-theme-styles">'+u+"</style>"),document.documentElement.style.display="none",document.documentElement.setAttribute("data-color-scheme",this.isDark()?"dark":"light"),document.body.clientWidth,document.documentElement.style.display="",s.$broadcast("p3xr-theme-switched")},this.getCurrentThemeName=()=>a.get(t),this.generateThemeName=e=>"p3xrTheme"+e[0].toUpperCase()+e.substring(1)}}]}])},3888:()=>{p3xr.theme.darkNeu=function(e,t){p3xr.theme.darkNeu.order=1,e.theme("p3xrThemeDarkNeuLayout").primaryPalette("blue-grey",{default:"800","hue-1":"300","hue-2":"700","hue-3":"900"}).accentPalette("blue-grey",{default:"300"}).warnPalette("grey").backgroundPalette("grey",{default:"900"}).dark(),e.theme("p3xrThemeDarkNeu").primaryPalette("cyan").accentPalette("blue").warnPalette("yellow").dark(),e.theme("p3xrThemeDarkNeuCommon").primaryPalette("green").accentPalette("grey").warnPalette("blue").backgroundPalette("blue-grey",{default:"900"}).dark()}},8404:()=>{p3xr.theme.dark=function(e){p3xr.theme.dark.order=3,e.theme("p3xrThemeDarkLayout").primaryPalette("grey",{default:"800","hue-1":"500","hue-2":"700","hue-3":"900"}).accentPalette("grey").warnPalette("grey").backgroundPalette("grey",{default:"900","hue-1":"800","hue-2":"700","hue-3":"900"}),e.theme("p3xrThemeDarkLayout").dark(),e.theme("p3xrThemeDark").primaryPalette("indigo",{default:"300"}).accentPalette("blue").warnPalette("orange").backgroundPalette("grey"),e.theme("p3xrThemeDark").dark(),e.theme("p3xrThemeDarkCommon").primaryPalette("green").accentPalette("grey").warnPalette("indigo",{default:"200"}).backgroundPalette("grey"),e.theme("p3xrThemeDarkCommon").dark()}},9767:()=>{p3xr.theme.darkoBluo=function(e){p3xr.theme.darkoBluo.order=5,e.theme("p3xrThemeDarkoBluoLayout").primaryPalette("indigo",{default:"900","hue-1":"500","hue-2":"700","hue-3":"900"}).accentPalette("indigo",{default:"600","hue-1":"50","hue-2":"700","hue-3":"900"}).warnPalette("indigo").backgroundPalette("grey",{default:"900","hue-1":"900","hue-2":"500","hue-3":"100"}),e.theme("p3xrThemeDarkoBluoLayout").dark(),e.theme("p3xrThemeDarkoBluo").primaryPalette("indigo",{default:"300","hue-1":"50","hue-2":"700","hue-3":"900"}).accentPalette("blue").warnPalette("orange").backgroundPalette("grey"),e.theme("p3xrThemeDarkoBluo").dark(),e.theme("p3xrThemeDarkoBluoCommon").primaryPalette("green").accentPalette("grey").warnPalette("light-blue").backgroundPalette("indigo",{default:"700"}),e.theme("p3xrThemeDarkoBluoCommon").dark()}},2526:()=>{p3xr.theme.enterprise=function(e,t){p3xr.theme.enterprise.order=2,e.theme("p3xrThemeEnterpriseLayout").primaryPalette("grey",{default:"800","hue-1":"500","hue-2":"700","hue-3":"900"}).accentPalette("grey",{default:"600","hue-1":"50","hue-2":"700","hue-3":"900"}).warnPalette("grey").backgroundPalette("grey",{default:"400"}),e.theme("p3xrThemeEnterprise").primaryPalette("indigo").accentPalette("blue",{default:"700"}).warnPalette("red",{default:"700"}),e.theme("p3xrThemeEnterpriseCommon").primaryPalette("green").accentPalette("grey").warnPalette("light-blue")}},2974:()=>{p3xr.theme.light=function(e,t){return p3xr.theme.light.order=0,e.theme("p3xrThemeLightLayout").primaryPalette("blue-grey",{default:"800","hue-1":"200","hue-2":"700","hue-3":"900"}).accentPalette("blue-grey").warnPalette("grey").backgroundPalette("blue-grey",{default:"A100","hue-1":"50","hue-2":"700","hue-3":"900"}),e.theme("p3xrThemeLight").primaryPalette("deep-purple").accentPalette("purple",{default:"500"}).warnPalette("red",{default:"700"}).backgroundPalette("blue-grey"),e.theme("p3xrThemeLightCommon").primaryPalette("green").accentPalette("grey").warnPalette("blue-grey").backgroundPalette("blue-grey"),this}},6298:()=>{p3xr.theme.matrix=function(e){p3xr.theme.matrix.order=5,e.theme("p3xrThemeMatrixLayout").primaryPalette("light-green",{default:"A400","hue-1":"A400","hue-2":"700","hue-3":"900"}).accentPalette("light-green",{default:"A400","hue-1":"100","hue-2":"600","hue-3":"800"}).warnPalette("green").backgroundPalette("grey",{default:"900","hue-1":"900","hue-2":"500","hue-3":"100"}).dark(),e.theme("p3xrThemeMatrix").primaryPalette("light-green",{default:"A400","hue-1":"50","hue-2":"700","hue-3":"900"}).accentPalette("lime",{default:"A400"}).warnPalette("green",{default:"A700"}).backgroundPalette("grey").dark(),e.theme("p3xrThemeMatrixCommon").primaryPalette("light-green",{default:"A400","hue-1":"A400","hue-2":"A400","hue-3":"A400"}).accentPalette("light-green",{default:"A400","hue-1":"A400","hue-2":"A400","hue-3":"A400"}).warnPalette("green").backgroundPalette("grey",{default:"900"}).dark()}},8498:()=>{p3xr.theme.redis=function(e,t){p3xr.theme.redis.order=4,e.theme("p3xrThemeRedisLayout").primaryPalette("red",{default:"800","hue-1":"200","hue-2":"700","hue-3":"900"}).accentPalette("red",{default:"200"}).warnPalette("red").backgroundPalette("red",{default:"900","hue-1":"600","hue-2":"200","hue-3":"200"}),e.theme("p3xrThemeRedis").primaryPalette("grey",{default:"900"}).accentPalette("grey",{default:"600"}).warnPalette("amber"),e.theme("p3xrThemeRedisCommon").primaryPalette("green").accentPalette("grey").warnPalette("red").backgroundPalette("grey")}},3597:e=>{e.exports=(e,t)=>{e.state({name:"settings",url:"/settings",template:"<p3xr-settings></p3xr-settings>"}),e.state({name:"main",url:"/main",template:"<p3xr-main></p3xr-main>"}),e.state({name:"console",url:"/console",template:"<p3xr-console></p3xr-console>"}),e.state("main.statistics",{url:"/statistics",template:"<p3xr-main-statistics></p3xr-main-statistics>",params:{action:null,expandedNodes:null,response:null}}),e.state("main.key",{url:"/key/:key",template:"<p3xr-main-key></p3xr-main-key>",params:{resize:null}}),e.state("socketio-error",{url:"/socketio-error",template:"<p3xr-error></p3xr-error>",params:{error:null}})}},9606:(e,t,n)=>{let o=0;p3xr.ng.component("p3xrAccordion",{template:n(2862),bindings:{p3xrTitle:"<",p3xrAccordionKey:"@"},transclude:{actions:"?p3xrAccordionActions",content:"p3xrAccordionContent"},controller:["$transclude","$cookies",function(e,t){this.transcludePresent=function(t){return e.isSlotFilled(t)},this.$onInit=function(){void 0!==this.p3xrAccordionKey&&""!==this.p3xrAccordionKey||(this.p3xAccordionKey=++o);const e=`p3xr-accordion-extended-${this.p3xrAccordionKey}`;Object.defineProperty(this,"extended",{get:()=>{const n=t.get(e);return void 0===n||"true"===n},set:n=>{t.put(e,String(n),{expires:p3xr.settings.cookieExpiry})}})}}]})},7713:(e,t,n)=>{p3xr.ng.component("p3xrButton",{template:n(9670),bindings:{p3xrLabel:"<",p3xrMdIcon:"@",p3xrFaIcon:"@",p3xrTooltipDirection:"@",p3xrClasses:"@"}})},57:()=>{p3xr.ng.directive("p3xrInput",["p3xrTheme",function(e){return{template:'<input ng-focus="focused=true" ng-blur="focused=false" class="p3xr-input" md-theme="{{ $root.p3xr.state.themeLayout }}" md-colors="{\'border-color\': inputBorderColor()}" ng-style="{ \'background\': inputBackground(), \'color\': inputColor()}"/>',replace:!0,link:function(t){t.focused=!1,t.inputBackground=()=>e.isDark()?"rgba(64, 64, 64, 1)":"white",t.inputBorderColor=()=>(e.isDark(),"primary-hue-1"),t.inputColor=()=>e.isDark()?"white":"black"}}}])},8820:(e,t,n)=>{n.g.p3xr.api={host:void 0};const o=new URL(location.toString());"8080"===o.port?n.g.p3xr.api.host="http://localhost:7843":n.g.p3xr.api.host=`${o.protocol}//${o.host}`},6566:(e,t,n)=>{n.g.p3xr.clipboard=e=>{var t=$("<textarea>"+e.value+"</textarea>");$("body").append(t),t.select();var n=!1;try{n=document.execCommand("copy")}catch(e){}return t.remove(),n}},7293:()=>{const e={getPosition:function(e){let t=0,n=0;if(void 0===e)return{left:0,top:0,width:0,height:0};const o=e.currentStyle||window.getComputedStyle(e),r={width:e.offsetWidth+(parseFloat(o.marginLeft)+parseFloat(o.marginRight))+(parseFloat(o.paddingLeft)+parseFloat(o.paddingRight))+(parseFloat(o.borderLeftWidth)+parseFloat(o.borderRightWidth)),height:e.offsetHeight+(parseFloat(o.marginTop)+parseFloat(o.marginBottom))+(parseFloat(o.paddingTop)+parseFloat(o.paddingBottom))+(parseFloat(o.borderTopWidth)+parseFloat(o.borderBottomWidth))};for(;e;){if("BODY"===e.tagName){const o=e.scrollLeft||document.documentElement.scrollLeft,r=e.scrollTop||document.documentElement.scrollTop;t+=e.offsetLeft-o+e.clientLeft,n+=e.offsetTop-r+e.clientTop}else t+=e.offsetLeft-e.scrollLeft+e.clientLeft,n+=e.offsetTop-e.scrollTop+e.clientTop;e=e.offsetParent}return r.left=t,r.top=n,r}};p3xr.dom=e},7943:(e,t,n)=>{const o=new RegExp("spider|bot|yahoo|bing|google|yandex|lynx|curl|embedly|quora|outbrain|pinterest|vkShare|W3C_Validator|crawl|borg|slurp|archiver|netresearch|lycos|scooter|altavista|teoma|oegp|charlotte|http client|htdig|ichiro|mogimogi|larbin|pompos|scrubby|searchsight|semanticdiscovery|snappy|speedy|voila|vortex|voyager|zao|zeal|dataparksearch|findlinks|browsermob|httpmonitor|bingpreview|pagepeeker|webthumb|url2png|zooshot|gomeza|google sketchup|read later|pingdom|facebook|rackspace|scan|link|ezine|preview|dig|tarantula|urllib|jakarta|wget|rget|monitor|libwww|moozilla|seer|spice|snoopy|feedfetcher|wordpress|java|netfront|archive|xenu|feed|appmanager|covario|perl|host|lwp|page speed|ptst|digext|nutch|sleuth|yottaamonitor|bubing|corifeus","i");n.g.p3xr.isBot=()=>o.test(navigator.userAgent)},4117:(e,t,n)=>{let o=0,r=Date.now();n.g.p3xr.nextId=()=>{const e=Date.now();r!==e&&(o=0,r=e);const t=++o,i=n.g.p3xr.random().reverse().padStart(15,"0");return`P3Xid${r.toString(16).padStart(12,"0").reverse()}${t.toString(16).padStart(3,"0").reverse()}${i}`}},554:e=>{const t=e=>{const{node:n,status:o,nodeCallback:r}=e;n.$inview=o,r&&r({node:n});for(let n of e.node.children)n.$inview=o,r&&r({node:n}),n.children.length>0&&t({node:n,status:e.status,nodeCallback:r})};e.exports.recursive=e=>{let{status:n,nodes:o,nodeCallback:r}=e;void 0===n&&(n=!1),Array.isArray(o)||(o=[o]);for(let e of o)t({node:e,status:n,nodeCallback:r})}},6399:(e,t,n)=>{n.g.p3xr.random=()=>(Math.floor(9e16*Math.random())+1e16).toString(16)},4380:()=>{const e=new Date;e.setFullYear(e.getFullYear()+5),p3xr.settings={maxLightKeysCount:11e4,resizeMinWidth:320,socket:{timeout:3e5},toast:{timeout:5e3,position:"bottom right"},debounce:250,debounceSearch:2e3,cookieExpiry:e,connection:{cookieNameCurrentDatabase:"p3xr-main-current-database",getCookieNameCurrentDatabase:e=>p3xr.settings.connection.cookieNameCurrentDatabase+"-"+e},tree:{cookieName:"p3xr-main-treecontrol-divider",defaultDivider:":"},redisTreeDivider:":",animation:0,animationSettings:{default:0,cookieName:"p3xr-animation-settings"},jsonFormat:4,googleAnalytics:"UA-169625044-1",jsonFormatSettings:{default:4,cookieName:"p3xr-json-format"},paging:{default:250,cookieName:"p3xr-main-treecontrol-page-size"},keyPage:{default:5,cookieName:"p3xr-main-key-page-size"},keyPageCount:5,language:{momentDateMap:{en:"en",zn:"zh-cn"},defaultLanguage:"en",current:void 0,cookieName:"p3xr-language",translation:{}},pageCount:50,maxValueDisplay:1024,maxValueDisplaySetting:{default:1024,cookieName:"p3xr-main-treecontrol-max-value-display"},maxKeys:1e3,maxKeysSettings:{default:1e3,max:1e5,cookieName:"p3xr-max-keys"},keySortInfo:{default:!0,cookieName:"p3xr-main-treecontrol-key-sort"},keysSort:!0,searchClientSide:!1,searchInfoClientSide:{default:!1,cookieName:"p3xr-main-treecontrol-search-client-mode"},searchStartsWith:!1,searchInfoStartsWith:{default:!1,cookieName:"p3xr-main-treecontrol-search-starts-with"},connectInfo:{cookieName:"p3xr-layout-connect"}}},8308:()=>{p3xr.sort={naturalCompareDocument:()=>(e,t)=>{const n=/(\d+)|(\D+)/g,o=[],r=[];for(e.replace(n,(function(e,t,n){o.push([t||1/0,n||""])})),t.replace(n,(function(e,t,n){r.push([t||1/0,n||""])}));o.length&&r.length;){const e=o.shift(),t=r.shift(),n=parseFloat(e[0])-parseFloat(t[0])||e[1].localeCompare(t[1]);if(n)return n}return o.length-r.length}}},9567:()=>{p3xr.state={treeDividers:[],donated:!1,theme:void 0,connection:void 0,currentDatabase:void 0,redisChanged:!1,databaseIndexes:[0],connections:[],redisConnections:{},keys:[],cfg:void 0,version:void 0,keysInfo:void 0,failed:!1,keysRaw:[],search:"",commands:[],reducedFunctions:!1,dbsize:void 0,monitor:!1},Object.defineProperty(p3xr.state,"themeLayout",{get:()=>p3xr.state.theme+"Layout"}),Object.defineProperty(p3xr.state,"themeCommon",{get:()=>p3xr.state.theme+"Common"}),p3xr.connectionsReset=()=>{p3xr.state.connections={list:[]}},p3xr.connectionsReset()},3581:(e,t,n)=>{p3xr.translations={en:n(3555)},p3xr.strings=p3xr.translations.en},5498:()=>{String.prototype.reverse||(String.prototype.reverse=function(){return this.split("").reverse().join("")})},7804:()=>{p3xr.ui.overlay=new function(){this.show=(e={})=>{this.hide(),$body.append(((e={})=>`\n<div id="p3xr-overlay">\n    <div id="p3xr-overlay-info">\n        <i class="fas fa-cog fa-spin fa-4x"></i>\n        ${e.hasOwnProperty("message")?"<br/><br/>":""}\n        ${e.hasOwnProperty("message")?e.message:""}\n    </div>\n</div>\n        \n        `)(e))},this.hide=()=>{$body.find("#p3xr-overlay").remove()}}},3555:e=>{const t={error:{cleared_license:"Cleared license",invalid_license:"Invalid license",server_error:"Server error, please try again"},title:{donate:"Donate",jsonRecursive:"Expanding all leafs",name:"P3X Redis UI",nameDonated:"P3X Redis UI+",main:"You may choose a Redis connection to connect from the left bottom menu.",statistics:"Statistics",error:"Error",connectingRedis:"Connecting to Redis ...",socketioConnectError:"Socket.IO Error",db:"DB",server:"Server",clients:"Clients",memory:"Memory",persistence:"Persistance",stats:"Statistics",replication:"Replication",cpu:"CPU",cluster:"Cluster"},confirm:{title:"Confirm",alert:"Alert",info:"Info",deleteListItem:"Are you sure to delete this list item?",deleteHashKey:"Are you sure to delete this hash key item?",deleteStreamTimestamp:"Are you sure to delete this stream timestamp?",deleteSetMember:"Are you sure to delete this set member?",deleteZSetMember:"Are you sure to delete this sorted set member?",deleteConnection:"Confirm",deleteConnectionText:"Are you sure to delete this Redis connection?",deleteNode:"Are you sure to delete this Redis node?",deleteAllKeys:e=>`Delete this tree and all it's keys (${e.key})?`,socketioConnectError:"Socket.IO cannot connect to the server, you can reload and you might to resolve the connection error by yourself, the client does not know to solve it by itself.",deleteKey:"Are you sure to delete this key?",rename:{title:"Are you sure to rename this key?",textContent:"If you click the rename button, it will rename this key forever.",placeholder:"The Redis key (required)"},ttl:{title:"Are you to change this keys's TTL?",textContent:"If you click the change TTL button, it will rename this key's time to live, empty will persist this key keep forever.",placeholder:"The Redis key's TTL (integer or empty)",placeholderPlaceholder:"Empty means it persists forever, otherwise the used integer.",convertTextToTime:"Convert text to time",convertTextToTimePlaceholder:"Eg. 1d will be 86400"},license:{title:"Enable donated license?",textContent:"If you want to use the donated functions, please contact alabard@gmail.com to request a license. The donation is $1/month.",placeholder:"License key"}},language:{en:"English",zn:"Chinese / 中文"},intention:{copy:"Copy",saveWithFormatJson:"Save with format",formatJson:"Format Json",pubsubMonitor:"PubSub Monitor",language:"Language",ok:"OK",addKey:"Add to this key",addKeyRoot:"Add a root key",reloadKey:"Reload key",reload:"Reload",close:"Close",commands:"Commands",view:"View",statistics:"Statistics",refresh:"Refresh",clear:"Clear",rename:"Rename",main:"Home",cancel:"Cancel",theme:"Theme",github:"GitHub",githubRepo:"Repository",githubRelease:"Releases",githubChangelog:"Change log",settings:"Settings",connect:"Connect",disconnect:"Disconnect",overview:"Overview",console:"Console",noConnections:"No connections, add a connection in the settings menu.",noConnectionsInSettings:"No connections, you may add a NEW CONNECTION above.",connectionAdd:"New connection",extend:"Extend",collapse:"Collapse",add:"Add",edit:"Edit",save:"Save",ttl:"Set TTL",license:"Set license",delete:"Delete",remove:"Remove",sure:"Sure",testConnection:"Test connection",getKey:"Loading Redis key and associated data ...",jsonViewShow:"Display JSON",jsonViewEditor:"Edit JSON"},label:{streamValue:'Stream field and value is a oneliner. Eg.: field1 value1 "field 2" "value 2"',streamTimestampId:"'*' means auto generated or the specification as <millisecondsTime>-<sequenceNumber>",unableToLoadKey:({key:e})=>`Unable to load this key: ${e}. The exact error is in the console.`,bigJson:"This JSON object is over 10 kb, so make sure you know what you doing, because some functions can be slow rendering.",addNode:"Add node",validateJson:"Validate JSON",reducedFunction:"Reduced functionality",tooManyKeys:e=>`For the full maximum functions allowed keys total is ${e.maxLightKeysCount} count. This database has over the allowed keys in total ${e.count}. The key sorting and the additional fancy tree information is disabled. The searching is happening only on the server instead the client search.`,redisCommandNotFound:"No Redis command match found ...",treeKeyStore:"The sorting (natural compare) is executed on the client aka the browser, which means it has a penalty for big large sets, like over 10k keys, it might add a little time to the page rendering. There is no key sorting in Redis, only like this.",socketIoTimeout:e=>`The Socket.IO timed out for this request (max ${e.timeout/1e3} seconds) ...`,resizerInfo:e=>`Left or right panel minimum width is ${e.width}px`,jsonViewNotParsable:"This value is not JSON parsable  ",ttlTitle:"Set the TTL in seconds",passwordSecure:"The password might will be empty, but still it will show characters, this is a security feature.",treeSeparatorEmpty:"If the tree separator is empty, the tree wil have no nested nodes, just a pure list",treeSeparatorEmptyNote:"No nested nodes, just a pure list",welcomeConsole:"Welcome to the Redis Console",welcomeConsoleInfo:"TAB or SHIFT + TAB completion like bash is enabled",welcomeConsoleInfo2:"Cursor UP or DOWN history is enabled",redisListIndexInfo:"Empty to append, -1 to prepend or save it to the position shown.",console:"Console",connectiondAdd:"Add connection",connectiondEdit:"Edit connection",connectiondView:"View connection",connections:"Connections",keysSort:{on:"Key sorting on",off:"Key sorting off"},awsElastiCache:{on:"AWS ElastiCache / Gcloud memorystore on",off:"AWS ElastiCache / Gcloud memorystore off"},azure:{on:"Azure Redis on",off:"Azure Redis off"},cluster:{on:"Cluster on",off:"Cluster off"},readonly:{on:"Readonly on",off:"Readonly off"},theme:{light:"Light",dark:"Dark enterprise",darkNeu:"Dark",darkoBluo:"Darko bluo",enterprise:"Enterprise",redis:"Redis",matrix:"Matrix"},connected:e=>`Connected: ${e.name}`,tree:"Tree"},status:{dataCopied:"The data is in the clipboard",licenseSaved:"License saved",nodeRemoved:"Node removed",keyIsNotExisting:"This key could have been deleted or expired.",keyCount:e=>0===e.keyCount?"No key":1===e.keyCount?"1 key":`${e.keyCount} keys`,treeExpandAll:"Expand all tree leafs, this has a cost, might take time ...",noRedisKeys:"There are no keys in this database.",redisConnected:"Redis connected successful",reloadingDataInfo:"Reloading Redis data info",added:"Added",saved:"Updated",cancelled:"Cancelled",deleted:"Deleted",savedRedis:"Redis data is saved",redisDisconnected:e=>`The current connection had an error: ${e.error.message}`,dbChanged:e=>`The db index set to ${e.db}. `,treeDeleted:e=>`The tree key was deleted (${e.key}).`,deletedKey:e=>`The key was deleted (${e.key}).`,renamedKey:"This key has been renamed",ttlChanged:"This key's TTL has been changed",notInteger:"This input is not an integer",persisted:"This key is persisted forever",set:"The key is set/added"},code:{"delete-connection":"This connection was deleted, so you are disconnected to this Redis instance.","save-connection":"This connection was changed, so you are disconnected to this Redis instance. You may re-connect.","readonly-connections":"Connections add/save/delete are readonly only!","readonly-connection-mode":"This connection is read only mode!","list-out-of-bounds":"This list index is out of bounds","donation-ware-feature":"This feature is present in the donation version.","auto-connection-failed":"Possible, the connection was removed and the auto connection failed, because of this."},form:{error:{required:"Required",port:"The port is between 1-65535",invalid:"The form is invalid"},connection:{label:{name:"Name",host:"Hostname",port:"Port",password:"Password",username:"Username"}},treeSettings:{maxValueDisplay:"Max value display string length",maxValueDisplayInfo:"If max value display zero, it shows everything, if it is bigger than 0, it will truncate. If it is -1, it will not show the value without edit for strings, for others, it display everything.",maxKeys:"The max key count",maxKeysInfo:"So that the GUI does not crash, we limit the max key count.",keyCount:()=>`Number of keys: ${p3xr.state.keysRaw.length}`,label:{animation:"Use animation",noAnimation:"No animation",jsonFormatTwoSpace:"Format JSON with 2 spaces",jsonFormatFourSpace:"Format JSON with 4 spaces",formName:"Redis settings",searchModeClient:"Client search mode",searchModeServer:"Server search mode",searchModeStartsWith:"Search with starts with mode",searchModeIncludes:"Search includes mode"},field:{treeSeparator:"Tree separator",treeSeparatorSelector:"Tree separator selector",page:"Tree paging count",keyPageCount:"Key paging count",keysSort:"Sort the keys",searchMode:"Search mode",searchModeStartsWith:"Search starts with / includes"},error:{keyPageCount:"The key page count must be an integer between 5 - 100",page:"The page count must be an integer between 10 - 1000",maxValueDisplay:"The maximum display value must be an integer between -1 and 32768",maxKeys:"The maximum key count value must be an integer between 100 and 100000"}},key:{label:{formName:{add:"Add new Redis key",edit:"Edit Redis key",append:"Add to existing Redis key"}},field:{streamTimestamp:"Timestamp",key:"Key",type:"Type",index:"Index",hashKey:"Hash key",score:"Score",value:"Value"},error:{streamTimestamp:"The timestamp is required, either Redis format or as *",key:"The key is, at least, one character",hashKey:"The hash table key is at least one character",score:"The sorted set score is required",value:"The value is required"}},main:{label:{database:"DB"}}},page:{overview:{noConnected:"There is no connection to Redis.",overviewClients:"List the connected by the count of clients",connectedCount:e=>1===e.length?"1 client":`${e.length} clients`},key:{label:{key:"Key",encoding:"Encoding",length:"Size",ttl:"TTL",ttlTitle:"Time To Live",type:"Type",ttlNotExpire:"does not expire",lengthString:"characters",lengthItem:"items",actions:"Actions"},list:{table:{index:"Index",value:"Value"}},hash:{table:{hashkey:"Hashkey",value:"Value"}},set:{table:{value:"Member"}},zset:{table:{value:"Member",score:"Score"}},stream:{table:{timestamp:"Timestamp ID",field:"Field",value:"Value"}}},treeControls:{settings:"Tree settings",expandAll:"Expand all",collapseAll:"Collapse all",search:{search:"Search in the keys",clear:"Clear current search to set empty",placeholderClient:"Search client side",placeholderServer:"Search server side",info:`The client side search means, that it matches the text in the search input. The server side search means, that is it like search in the keys patterns as *{search-text}*. For large search sets, it is better to use server side searching. For smaller search sets, it is better to use client side search mode. If the keys count is over ${p3xr.settings.maxLightKeysCount}, you can only search on server side.`,largeSetInfo:"In a large set, client side searching is disabled. so right now only server side searching is possible.",infoDetails:"To find out how the search works, please check out the settings"},pager:{next:"Next",prev:"Previous",first:"First",last:"Last"}}},time:{years:"years",months:"months",days:"days",year:"year",month:"month",day:"day"},redisTypes:{string:"String",list:"List",hash:"Hash table",set:"Set",zset:"Sorted set - zset",stream:"Stream"}};e.exports=t},7885:e=>{const t={error:{cleared_license:"清除许可证",invalid_license:"无效的许可证",server_error:"服务器错误,请重试"},title:{donate:"捐赠",jsonRecursive:"展开所有叶子",name:"P3X Redis UI",nameDonated:"P3X Redis UI+",main:"您可以从左下方菜单中选择要连接的Redis进行连接访问",statistics:"Statistics",error:"错误",connectingRedis:"连接到Redis ...",socketioConnectError:"Socket.IO 错误",db:"DB",server:"服务端",clients:"客户端",memory:"内存",persistence:"持久性",stats:"统计",replication:"同步复制",cpu:"CPU",cluster:"集群"},confirm:{title:"确认",alert:"警告",info:"信息",deleteListItem:"您确定要删除该列表项吗?",deleteHashKey:"您确定要删除该哈希键项吗?",deleteStreamTimestamp:"您确定要删除此流时间戳吗?",deleteSetMember:"您确定要删除该集合成员?",deleteZSetMember:"您确定要删除该有序集合成员?",deleteConnection:"确认",deleteConnectionText:"您确定要删除此Redis连接吗?",deleteNode:"您确定要删除此Redis节点吗?",deleteAllKeys:e=>`删除此树及其所有键 (${e.key})?`,socketioConnectError:"Socket.IO 不能连接到该服务, 您可以重新加载及尝试自己解决该错误, 客户端自身无法解决该错误",deleteKey:"您确定要删除这个键吗?",rename:{title:"您确定要重命名该键名么?",textContent:"如果您点击重命名按钮,它将永久重命名此键。",placeholder:"该Redis键(必须存在)"},ttl:{title:"您要改变该键的TTL吗?",textContent:"如果您点击更改TTL按钮, 会改变该键的生存时间,设置为空则有效期永久",placeholder:"Redis键的TTL(整数或空)",placeholderPlaceholder:"空意味着它将永久存在,否则将使用所使用的整数。",convertTextToTime:"将文字转换为时间",convertTextToTimePlaceholder:"例如。 1d将是86400"},license:{title:"启用捐赠的许可证?",textContent:"如果要使用捐赠的功能,请联系alabard@gmail.com申请许可证。 捐款是每月1美元。",placeholder:"注册码"}},language:{en:"英语 / English",zn:"中文 / Chinese"},intention:{copy:"复制",saveWithFormatJson:"保存格式",formatJson:"格式化Json",pubsubMonitor:"PubSub监视器",language:"语言 / Language",ok:"确定",addKey:"加入此键",addKeyRoot:"加入一个根键",reloadKey:"重载键",reload:"重载",close:"关闭",commands:"命令",view:"视图",statistics:"统计",refresh:"刷新",clear:"清除",rename:"重命名",main:"主页",cancel:"取消",theme:"主题",github:"GitHub",githubRepo:"仓库",githubRelease:"发布",githubChangelog:"更新日志",settings:"设置",connect:"连接",disconnect:"断开",overview:"概览",console:"控制台",noConnections:"没有任何连接,请在设置菜单中添加一个连接。",noConnectionsInSettings:"没有连接,您可以在上面添加一个新的连接。",connectionAdd:"新连接",extend:"拓展",collapse:"折叠",add:"添加",edit:"编辑",save:"保存",ttl:"设置 TTL",license:"设定牌照",delete:"删除",remove:"删除",sure:"确定",testConnection:"测试连接",getKey:"加载Redis键及相关数据...",jsonViewShow:"显示 JSON 树",jsonViewEditor:"编辑JSON"},label:{streamValue:'流字段和值是唯一的。 例如:field1 value1 "field 2" "value 2"',streamTimestampId:"'*'表示自动生成或指定为<millisecondsTime>-<sequenceNumber>",unableToLoadKey:({key:e})=>`无法加载此密钥:: ${e}。确切的错误在控制台中。`,bigJson:"此JSON对象超过10 kb,因此请确保您知道自己在做什么,因为某些功能可能会缓慢呈现。",addNode:"添加节点",validateJson:"验证JSON",reducedFunction:"功能限制",tooManyKeys:e=>`对于最大函数允许的键个数为 ${e.maxLightKeysCount}. 该数据库允许共超过的键总数为 ${e.count}.但键的排序及范式树等相关信息会被禁用。搜索仅在服务器上进行,而不是客户端搜索。`,redisCommandNotFound:"找不到匹配的Redis命令...",treeKeyStore:"该排序(自然排序)运行在客户端的浏览器上, 意味着针对大型集合(例如超过1W个键),渲染的时长开销需要增加.Redis中没有键排序, 就像这样。",socketIoTimeout:e=>`Socket.IO 请求超时,请求时最长(最大 ${e.timeout/1e3}秒) ...`,resizerInfo:e=>`面板(左/右)的最小宽度是 ${e.width}像素`,jsonViewNotParsable:"该值JSON无法解析",ttlTitle:"设置TTL时间(秒)",passwordSecure:"密码可能为空,但仍会显示字符,这是一项安全功能。",treeSeparatorEmpty:"如果树分隔符为空,则树将没有嵌套节点,只有纯列表",treeSeparatorEmptyNote:"没有嵌套节点,只是一个纯列表",welcomeConsole:"欢迎来到Redis控制台",welcomeConsoleInfo:"启用类似Bash命令补全功能,按TAB 或 SHIFT + TAB 补全",welcomeConsoleInfo2:"上下方向键选择历史记录功能已启用",redisListIndexInfo:"空值追加, -1 到前置或保存到光标之处",console:"控制台",connectiondAdd:"添加连接",connectiondEdit:"编辑连接",connectiondView:"查看连接",connections:"连接",keysSort:{on:"开启键排序",off:"关闭键排序"},awsElastiCache:{on:"AWS ElastiCache / Gcloud memorystore on",off:"AWS ElastiCache / Gcloud memorystore off"},azure:{on:"Azure Redis on",off:"Azure Redis off"},cluster:{on:"群集",off:"集群关闭"},readonly:{on:"只读",off:"只读关闭"},theme:{light:"浅棕",dark:"黑暗企业",darkNeu:"暗色",darkoBluo:"蓝色",enterprise:"企业风",redis:"Redis风格",matrix:"矩阵"},connected:e=>`已连接: ${e.name}`,tree:"树"},status:{dataCopied:"数据在剪贴板中",licenseSaved:"许可证已保存",nodeRemoved:"节点已删除",keyIsNotExisting:"此键可能已被删除或过期。",keyCount:e=>0===e.keyCount?"没有任何键":1===e.keyCount?"1 个键":`${e.keyCount} 键`,treeExpandAll:"展开所可能的原因是,连接已删除,自动连接失败有树,该操作的代价就是有点费时...",noRedisKeys:"此数据库中没有任何键。",redisConnected:"Redis 连接成功",reloadingDataInfo:"重新加载Redis数据信息",added:"已添加",saved:"已更新",cancelled:"已取消",deleted:"已删除",savedRedis:"Redis数据已保存",redisDisconnected:e=>`该连接有一个错误: ${e.error.message}`,dbChanged:e=>`db索引设置为 ${e.db}. `,treeDeleted:e=>`该树已删除 (${e.key}).`,deletedKey:e=>`该键已删除 (${e.key}).`,renamedKey:"该键已重命名",ttlChanged:"该键TTL已被更改",notInteger:"输入值不是一个整数",persisted:"永久键",set:"键已设置/添加"},code:{"delete-connection":"此连接已删除,因此您与此Redis实例断开连接。","save-connection":"此连接已更改,因此您与此Redis实例断开连接。 你可以重新连接。","readonly-connections":"连接(添加/保存/删除)只是只读!","readonly-connection-mode":"此连接为只读模式!","list-out-of-bounds":"此列表索引超出范围","donation-ware-feature":"捐赠版本中提供了此功能。","auto-connection-failed":"因此,可能导致连接被删除并且自动连接失败。"},form:{error:{required:"必填",port:"端口号范围是 1-65535",invalid:"值无效,请重新输入"},connection:{label:{name:"连接名字",host:"主机名",port:"端口",password:"密码",username:"用户名"}},treeSettings:{maxValueDisplay:"最大值显示字符串长度",maxValueDisplayInfo:"如果最大值显示为零,则显示所有内容,如果大于0,则将截断。 如果它是-1,它将不显示没有编辑字符串的值,对于其他人,它显示所有内容。",maxKeys:"最大密钥数",maxKeysInfo:"为了避免GUI崩溃,我们限制了最大密钥数。",keyCount:()=>`键数: ${p3xr.state.keysRaw.length}`,label:{animation:"使用动画",noAnimation:"没有动画",jsonFormatTwoSpace:"用2个空格格式化JSON",jsonFormatFourSpace:"用4个空格格式化JSON",formName:"Redis设置",searchModeClient:"客户端搜索模式",searchModeServer:"服务端搜索模式",searchModeStartsWith:"以模式启动搜索",searchModeIncludes:"搜索包括模式"},field:{treeSeparator:"树分隔符",treeSeparatorSelector:"树分隔符选择器",page:"树分页数",keyPageCount:"按键分页数",keysSort:"对键进行排序",searchMode:"搜索模式",searchModeStartsWith:"搜索以 / 开头"},error:{keyPageCount:"密钥页数必须为5到100之间的整数",page:"页数必须是10  -  500之间的整数",maxValueDisplay:"最大显示值必须是介于-1和32768之间的整数",maxKeys:"最大密钥计数值必须是100到100000之间的整数"}},key:{label:{formName:{add:"添加新的Redis键",edit:"编辑 Redis key",append:"添加到现有的Redis键"}},field:{streamTimestamp:"时间戳记",key:"键",type:"类型",index:"索引",hashKey:"哈希键",score:"分数",value:"值"},error:{streamTimestamp:"时间戳是必需的,可以是Redis格式,也可以*",key:"键至少存在一个字符",hashKey:"哈希表键至少是一个字符",score:"排序的集合分数是必需的",value:"该值是必填的"}},main:{label:{database:"DB"}}},page:{overview:{noConnected:"没有任何连接到Redis",overviewClients:"按客户端连接计数展示所有连接",connectedCount:e=>1===e.length?"1 客户端":`${e.length} 客户端`},key:{label:{key:"键",encoding:"编码",length:"大小",ttl:"TTL",ttlTitle:"生存时间",type:"类型",ttlNotExpire:"不会过期",lengthString:"字符",lengthItem:"项数",actions:"操作"},list:{table:{index:"索引",value:"值"}},hash:{table:{hashkey:"哈希",value:"值"}},set:{table:{value:"成员"}},zset:{table:{value:"成员",score:"分数"}},stream:{table:{timestamp:"时间戳ID",field:"领域",value:"值"}}},treeControls:{settings:"树设置",expandAll:"展开所有",collapseAll:"折叠所有",search:{search:"在键中搜索",clear:"清空当前搜索结果",placeholderClient:"客户端搜索",placeholderServer:"服务端搜索",info:`客户端搜索是匹配输入的文本,服务端搜索则遵循*{search-text}*模式搜索.对于大量数据的搜索最好在服务端进行搜索,而较小数据量可以考虑客户端搜索。如果键数超过  ${p3xr.settings.maxLightKeysCount}个的则只能在服务端搜索`,largeSetInfo:"在大型集合中,禁用客户端搜索。 所以现在只能进行服务器端搜索。",infoDetails:"要了解搜索的工作原理,请查看设置"},pager:{next:"下一页",prev:"上一页",first:"首页",last:"末页"}}},time:{years:"年份",months:"个月",days:"天",year:"年",month:"月",day:"天"},redisTypes:{string:"字符串",list:"列表",hash:"哈希表",set:"集合",zset:"有序集合 - zset",stream:"流"}};e.exports=t},4848:(e,t,n)=>{var o;!function(){var r={y:function(e){return 1===e?"χρόνος":"χρόνια"},mo:function(e){return 1===e?"μήνας":"μήνες"},w:function(e){return 1===e?"εβδομάδα":"εβδομάδες"},d:function(e){return 1===e?"μέρα":"μέρες"},h:function(e){return 1===e?"ώρα":"ώρες"},m:function(e){return 1===e?"λεπτό":"λεπτά"},s:function(e){return 1===e?"δευτερόλεπτο":"δευτερόλεπτα"},ms:function(e){return 1===e?"χιλιοστό του δευτερολέπτου":"χιλιοστά του δευτερολέπτου"},decimal:","},i={ar:{y:function(e){return 1===e?"سنة":"سنوات"},mo:function(e){return 1===e?"شهر":"أشهر"},w:function(e){return 1===e?"أسبوع":"أسابيع"},d:function(e){return 1===e?"يوم":"أيام"},h:function(e){return 1===e?"ساعة":"ساعات"},m:function(e){return e>2&&e<11?"دقائق":"دقيقة"},s:function(e){return 1===e?"ثانية":"ثواني"},ms:function(e){return 1===e?"جزء من الثانية":"أجزاء من الثانية"},decimal:","},bg:{y:function(e){return["години","година","години"][m(e)]},mo:function(e){return["месеца","месец","месеца"][m(e)]},w:function(e){return["седмици","седмица","седмици"][m(e)]},d:function(e){return["дни","ден","дни"][m(e)]},h:function(e){return["часа","час","часа"][m(e)]},m:function(e){return["минути","минута","минути"][m(e)]},s:function(e){return["секунди","секунда","секунди"][m(e)]},ms:function(e){return["милисекунди","милисекунда","милисекунди"][m(e)]},decimal:","},ca:{y:function(e){return"any"+(1===e?"":"s")},mo:function(e){return"mes"+(1===e?"":"os")},w:function(e){return"setman"+(1===e?"a":"es")},d:function(e){return"di"+(1===e?"a":"es")},h:function(e){return"hor"+(1===e?"a":"es")},m:function(e){return"minut"+(1===e?"":"s")},s:function(e){return"segon"+(1===e?"":"s")},ms:function(e){return"milisegon"+(1===e?"":"s")},decimal:","},cs:{y:function(e){return["rok","roku","roky","let"][u(e)]},mo:function(e){return["měsíc","měsíce","měsíce","měsíců"][u(e)]},w:function(e){return["týden","týdne","týdny","týdnů"][u(e)]},d:function(e){return["den","dne","dny","dní"][u(e)]},h:function(e){return["hodina","hodiny","hodiny","hodin"][u(e)]},m:function(e){return["minuta","minuty","minuty","minut"][u(e)]},s:function(e){return["sekunda","sekundy","sekundy","sekund"][u(e)]},ms:function(e){return["milisekunda","milisekundy","milisekundy","milisekund"][u(e)]},decimal:","},da:{y:"år",mo:function(e){return"måned"+(1===e?"":"er")},w:function(e){return"uge"+(1===e?"":"r")},d:function(e){return"dag"+(1===e?"":"e")},h:function(e){return"time"+(1===e?"":"r")},m:function(e){return"minut"+(1===e?"":"ter")},s:function(e){return"sekund"+(1===e?"":"er")},ms:function(e){return"millisekund"+(1===e?"":"er")},decimal:","},de:{y:function(e){return"Jahr"+(1===e?"":"e")},mo:function(e){return"Monat"+(1===e?"":"e")},w:function(e){return"Woche"+(1===e?"":"n")},d:function(e){return"Tag"+(1===e?"":"e")},h:function(e){return"Stunde"+(1===e?"":"n")},m:function(e){return"Minute"+(1===e?"":"n")},s:function(e){return"Sekunde"+(1===e?"":"n")},ms:function(e){return"Millisekunde"+(1===e?"":"n")},decimal:","},el:r,en:{y:function(e){return"year"+(1===e?"":"s")},mo:function(e){return"month"+(1===e?"":"s")},w:function(e){return"week"+(1===e?"":"s")},d:function(e){return"day"+(1===e?"":"s")},h:function(e){return"hour"+(1===e?"":"s")},m:function(e){return"minute"+(1===e?"":"s")},s:function(e){return"second"+(1===e?"":"s")},ms:function(e){return"millisecond"+(1===e?"":"s")},decimal:"."},es:{y:function(e){return"año"+(1===e?"":"s")},mo:function(e){return"mes"+(1===e?"":"es")},w:function(e){return"semana"+(1===e?"":"s")},d:function(e){return"día"+(1===e?"":"s")},h:function(e){return"hora"+(1===e?"":"s")},m:function(e){return"minuto"+(1===e?"":"s")},s:function(e){return"segundo"+(1===e?"":"s")},ms:function(e){return"milisegundo"+(1===e?"":"s")},decimal:","},et:{y:function(e){return"aasta"+(1===e?"":"t")},mo:function(e){return"kuu"+(1===e?"":"d")},w:function(e){return"nädal"+(1===e?"":"at")},d:function(e){return"päev"+(1===e?"":"a")},h:function(e){return"tund"+(1===e?"":"i")},m:function(e){return"minut"+(1===e?"":"it")},s:function(e){return"sekund"+(1===e?"":"it")},ms:function(e){return"millisekund"+(1===e?"":"it")},decimal:","},fa:{y:"سال",mo:"ماه",w:"هفته",d:"روز",h:"ساعت",m:"دقیقه",s:"ثانیه",ms:"میلی ثانیه",decimal:"."},fi:{y:function(e){return 1===e?"vuosi":"vuotta"},mo:function(e){return 1===e?"kuukausi":"kuukautta"},w:function(e){return"viikko"+(1===e?"":"a")},d:function(e){return"päivä"+(1===e?"":"ä")},h:function(e){return"tunti"+(1===e?"":"a")},m:function(e){return"minuutti"+(1===e?"":"a")},s:function(e){return"sekunti"+(1===e?"":"a")},ms:function(e){return"millisekunti"+(1===e?"":"a")},decimal:","},fo:{y:"ár",mo:function(e){return 1===e?"mánaður":"mánaðir"},w:function(e){return 1===e?"vika":"vikur"},d:function(e){return 1===e?"dagur":"dagar"},h:function(e){return 1===e?"tími":"tímar"},m:function(e){return 1===e?"minuttur":"minuttir"},s:"sekund",ms:"millisekund",decimal:","},fr:{y:function(e){return"an"+(e>=2?"s":"")},mo:"mois",w:function(e){return"semaine"+(e>=2?"s":"")},d:function(e){return"jour"+(e>=2?"s":"")},h:function(e){return"heure"+(e>=2?"s":"")},m:function(e){return"minute"+(e>=2?"s":"")},s:function(e){return"seconde"+(e>=2?"s":"")},ms:function(e){return"milliseconde"+(e>=2?"s":"")},decimal:","},gr:r,he:{y:function(e){return 1===e?"שנה":"שנים"},mo:function(e){return 1===e?"חודש":"חודשים"},w:function(e){return 1===e?"שבוע":"שבועות"},d:function(e){return 1===e?"יום":"ימים"},h:function(e){return 1===e?"שעה":"שעות"},m:function(e){return 1===e?"דקה":"דקות"},s:function(e){return 1===e?"שניה":"שניות"},ms:function(e){return 1===e?"מילישנייה":"מילישניות"},decimal:"."},hr:{y:function(e){return e%10==2||e%10==3||e%10==4?"godine":"godina"},mo:function(e){return 1===e?"mjesec":2===e||3===e||4===e?"mjeseca":"mjeseci"},w:function(e){return e%10==1&&11!==e?"tjedan":"tjedna"},d:function(e){return 1===e?"dan":"dana"},h:function(e){return 1===e?"sat":2===e||3===e||4===e?"sata":"sati"},m:function(e){var t=e%10;return 2!==t&&3!==t&&4!==t||!(e<10||e>14)?"minuta":"minute"},s:function(e){var t=e%10;return 5===t||Math.floor(e)===e&&e>=10&&e<=19?"sekundi":1===t?"sekunda":2===t||3===t||4===t?"sekunde":"sekundi"},ms:function(e){return 1===e?"milisekunda":e%10==2||e%10==3||e%10==4?"milisekunde":"milisekundi"},decimal:","},hi:{y:"साल",mo:function(e){return 1===e?"महीना":"महीने"},w:function(e){return 1===e?"हफ़्ता":"हफ्ते"},d:"दिन",h:function(e){return 1===e?"घंटा":"घंटे"},m:"मिनट",s:"सेकंड",ms:"मिलीसेकंड",decimal:"."},hu:{y:"év",mo:"hónap",w:"hét",d:"nap",h:"óra",m:"perc",s:"másodperc",ms:"ezredmásodperc",decimal:","},id:{y:"tahun",mo:"bulan",w:"minggu",d:"hari",h:"jam",m:"menit",s:"detik",ms:"milidetik",decimal:"."},is:{y:"ár",mo:function(e){return"mánuð"+(1===e?"ur":"ir")},w:function(e){return"vik"+(1===e?"a":"ur")},d:function(e){return"dag"+(1===e?"ur":"ar")},h:function(e){return"klukkutím"+(1===e?"i":"ar")},m:function(e){return"mínút"+(1===e?"a":"ur")},s:function(e){return"sekúnd"+(1===e?"a":"ur")},ms:function(e){return"millisekúnd"+(1===e?"a":"ur")},decimal:"."},it:{y:function(e){return"ann"+(1===e?"o":"i")},mo:function(e){return"mes"+(1===e?"e":"i")},w:function(e){return"settiman"+(1===e?"a":"e")},d:function(e){return"giorn"+(1===e?"o":"i")},h:function(e){return"or"+(1===e?"a":"e")},m:function(e){return"minut"+(1===e?"o":"i")},s:function(e){return"second"+(1===e?"o":"i")},ms:function(e){return"millisecond"+(1===e?"o":"i")},decimal:","},ja:{y:"年",mo:"月",w:"週",d:"日",h:"時間",m:"分",s:"秒",ms:"ミリ秒",decimal:"."},ko:{y:"년",mo:"개월",w:"주일",d:"일",h:"시간",m:"분",s:"초",ms:"밀리 초",decimal:"."},lo:{y:"ປີ",mo:"ເດືອນ",w:"ອາທິດ",d:"ມື້",h:"ຊົ່ວໂມງ",m:"ນາທີ",s:"ວິນາທີ",ms:"ມິນລິວິນາທີ",decimal:","},lt:{y:function(e){return e%10==0||e%100>=10&&e%100<=20?"metų":"metai"},mo:function(e){return["mėnuo","mėnesiai","mėnesių"][p(e)]},w:function(e){return["savaitė","savaitės","savaičių"][p(e)]},d:function(e){return["diena","dienos","dienų"][p(e)]},h:function(e){return["valanda","valandos","valandų"][p(e)]},m:function(e){return["minutė","minutės","minučių"][p(e)]},s:function(e){return["sekundė","sekundės","sekundžių"][p(e)]},ms:function(e){return["milisekundė","milisekundės","milisekundžių"][p(e)]},decimal:","},lv:{y:function(e){return g(e)?"gads":"gadi"},mo:function(e){return g(e)?"mēnesis":"mēneši"},w:function(e){return g(e)?"nedēļa":"nedēļas"},d:function(e){return g(e)?"diena":"dienas"},h:function(e){return g(e)?"stunda":"stundas"},m:function(e){return g(e)?"minūte":"minūtes"},s:function(e){return g(e)?"sekunde":"sekundes"},ms:function(e){return g(e)?"milisekunde":"milisekundes"},decimal:","},ms:{y:"tahun",mo:"bulan",w:"minggu",d:"hari",h:"jam",m:"minit",s:"saat",ms:"milisaat",decimal:"."},nl:{y:"jaar",mo:function(e){return 1===e?"maand":"maanden"},w:function(e){return 1===e?"week":"weken"},d:function(e){return 1===e?"dag":"dagen"},h:"uur",m:function(e){return 1===e?"minuut":"minuten"},s:function(e){return 1===e?"seconde":"seconden"},ms:function(e){return 1===e?"milliseconde":"milliseconden"},decimal:","},no:{y:"år",mo:function(e){return"måned"+(1===e?"":"er")},w:function(e){return"uke"+(1===e?"":"r")},d:function(e){return"dag"+(1===e?"":"er")},h:function(e){return"time"+(1===e?"":"r")},m:function(e){return"minutt"+(1===e?"":"er")},s:function(e){return"sekund"+(1===e?"":"er")},ms:function(e){return"millisekund"+(1===e?"":"er")},decimal:","},pl:{y:function(e){return["rok","roku","lata","lat"][c(e)]},mo:function(e){return["miesiąc","miesiąca","miesiące","miesięcy"][c(e)]},w:function(e){return["tydzień","tygodnia","tygodnie","tygodni"][c(e)]},d:function(e){return["dzień","dnia","dni","dni"][c(e)]},h:function(e){return["godzina","godziny","godziny","godzin"][c(e)]},m:function(e){return["minuta","minuty","minuty","minut"][c(e)]},s:function(e){return["sekunda","sekundy","sekundy","sekund"][c(e)]},ms:function(e){return["milisekunda","milisekundy","milisekundy","milisekund"][c(e)]},decimal:","},pt:{y:function(e){return"ano"+(1===e?"":"s")},mo:function(e){return 1===e?"mês":"meses"},w:function(e){return"semana"+(1===e?"":"s")},d:function(e){return"dia"+(1===e?"":"s")},h:function(e){return"hora"+(1===e?"":"s")},m:function(e){return"minuto"+(1===e?"":"s")},s:function(e){return"segundo"+(1===e?"":"s")},ms:function(e){return"milissegundo"+(1===e?"":"s")},decimal:","},ro:{y:function(e){return 1===e?"an":"ani"},mo:function(e){return 1===e?"lună":"luni"},w:function(e){return 1===e?"săptămână":"săptămâni"},d:function(e){return 1===e?"zi":"zile"},h:function(e){return 1===e?"oră":"ore"},m:function(e){return 1===e?"minut":"minute"},s:function(e){return 1===e?"secundă":"secunde"},ms:function(e){return 1===e?"milisecundă":"milisecunde"},decimal:","},ru:{y:function(e){return["лет","год","года"][m(e)]},mo:function(e){return["месяцев","месяц","месяца"][m(e)]},w:function(e){return["недель","неделя","недели"][m(e)]},d:function(e){return["дней","день","дня"][m(e)]},h:function(e){return["часов","час","часа"][m(e)]},m:function(e){return["минут","минута","минуты"][m(e)]},s:function(e){return["секунд","секунда","секунды"][m(e)]},ms:function(e){return["миллисекунд","миллисекунда","миллисекунды"][m(e)]},decimal:","},uk:{y:function(e){return["років","рік","роки"][m(e)]},mo:function(e){return["місяців","місяць","місяці"][m(e)]},w:function(e){return["тижнів","тиждень","тижні"][m(e)]},d:function(e){return["днів","день","дні"][m(e)]},h:function(e){return["годин","година","години"][m(e)]},m:function(e){return["хвилин","хвилина","хвилини"][m(e)]},s:function(e){return["секунд","секунда","секунди"][m(e)]},ms:function(e){return["мілісекунд","мілісекунда","мілісекунди"][m(e)]},decimal:","},ur:{y:"سال",mo:function(e){return 1===e?"مہینہ":"مہینے"},w:function(e){return 1===e?"ہفتہ":"ہفتے"},d:"دن",h:function(e){return 1===e?"گھنٹہ":"گھنٹے"},m:"منٹ",s:"سیکنڈ",ms:"ملی سیکنڈ",decimal:"."},sk:{y:function(e){return["rok","roky","roky","rokov"][u(e)]},mo:function(e){return["mesiac","mesiace","mesiace","mesiacov"][u(e)]},w:function(e){return["týždeň","týždne","týždne","týždňov"][u(e)]},d:function(e){return["deň","dni","dni","dní"][u(e)]},h:function(e){return["hodina","hodiny","hodiny","hodín"][u(e)]},m:function(e){return["minúta","minúty","minúty","minút"][u(e)]},s:function(e){return["sekunda","sekundy","sekundy","sekúnd"][u(e)]},ms:function(e){return["milisekunda","milisekundy","milisekundy","milisekúnd"][u(e)]},decimal:","},sl:{y:function(e){return e%10==1?"leto":e%100==2?"leti":e%100==3||e%100==4||Math.floor(e)!==e&&e%100<=5?"leta":"let"},mo:function(e){return e%10==1?"mesec":e%100==2||Math.floor(e)!==e&&e%100<=5?"meseca":e%10==3||e%10==4?"mesece":"mesecev"},w:function(e){return e%10==1?"teden":e%10==2||Math.floor(e)!==e&&e%100<=4?"tedna":e%10==3||e%10==4?"tedne":"tednov"},d:function(e){return e%100==1?"dan":"dni"},h:function(e){return e%10==1?"ura":e%100==2?"uri":e%10==3||e%10==4||Math.floor(e)!==e?"ure":"ur"},m:function(e){return e%10==1?"minuta":e%10==2?"minuti":e%10==3||e%10==4||Math.floor(e)!==e&&e%100<=4?"minute":"minut"},s:function(e){return e%10==1?"sekunda":e%100==2?"sekundi":e%100==3||e%100==4||Math.floor(e)!==e?"sekunde":"sekund"},ms:function(e){return e%10==1?"milisekunda":e%100==2?"milisekundi":e%100==3||e%100==4||Math.floor(e)!==e?"milisekunde":"milisekund"},decimal:","},sv:{y:"år",mo:function(e){return"månad"+(1===e?"":"er")},w:function(e){return"veck"+(1===e?"a":"or")},d:function(e){return"dag"+(1===e?"":"ar")},h:function(e){return"timm"+(1===e?"e":"ar")},m:function(e){return"minut"+(1===e?"":"er")},s:function(e){return"sekund"+(1===e?"":"er")},ms:function(e){return"millisekund"+(1===e?"":"er")},decimal:","},sw:{y:function(e){return 1===e?"mwaka":"miaka"},mo:function(e){return 1===e?"mwezi":"miezi"},w:"wiki",d:function(e){return 1===e?"siku":"masiku"},h:function(e){return 1===e?"saa":"masaa"},m:"dakika",s:"sekunde",ms:"milisekunde",decimal:"."},tr:{y:"yıl",mo:"ay",w:"hafta",d:"gün",h:"saat",m:"dakika",s:"saniye",ms:"milisaniye",decimal:","},th:{y:"ปี",mo:"เดือน",w:"อาทิตย์",d:"วัน",h:"ชั่วโมง",m:"นาที",s:"วินาที",ms:"มิลลิวินาที",decimal:"."},vi:{y:"năm",mo:"tháng",w:"tuần",d:"ngày",h:"giờ",m:"phút",s:"giây",ms:"mili giây",decimal:","},zh_CN:{y:"年",mo:"个月",w:"周",d:"天",h:"小时",m:"分钟",s:"秒",ms:"毫秒",decimal:"."},zh_TW:{y:"年",mo:"個月",w:"周",d:"天",h:"小時",m:"分鐘",s:"秒",ms:"毫秒",decimal:"."}};function s(e){var t=function(e,n){return function(e,t){var n,o,r;e=Math.abs(e);var s,a,d,c=function(e){var t=[e.language];if(f(e,"fallbacks")){if(!h(e.fallbacks)||!e.fallbacks.length)throw new Error("fallbacks must be an array with at least one element");t=t.concat(e.fallbacks)}for(var n=0;n<t.length;n++){var o=t[n];if(f(e.languages,o))return e.languages[o];if(f(i,o))return i[o]}throw new Error("No language found.")}(t),m=[];for(n=0,o=t.units.length;n<o;n++){if(s=t.units[n],a=t.unitMeasures[s],n+1===o)if(f(t,"maxDecimalPoints")){var u=Math.pow(10,t.maxDecimalPoints),p=e/a;d=parseFloat((Math.floor(u*p)/u).toFixed(t.maxDecimalPoints))}else d=e/a;else d=Math.floor(e/a);m.push({unitCount:d,unitName:s}),e-=d*a}var g,x,y=0;for(n=0;n<m.length;n++)if(m[n].unitCount){y=n;break}if(t.round)for(n=m.length-1;n>=0&&((r=m[n]).unitCount=Math.round(r.unitCount),0!==n);n--)x=m[n-1],g=t.unitMeasures[x.unitName]/t.unitMeasures[r.unitName],(r.unitCount%g==0||t.largest&&t.largest-1<n-y)&&(x.unitCount+=r.unitCount/g,r.unitCount=0);var b=[];for(n=0,m.length;n<o&&((r=m[n]).unitCount&&b.push(l(r.unitCount,r.unitName,c,t)),b.length!==t.largest);n++);if(!b.length)return l(0,t.units[t.units.length-1],c,t);if(!t.conjunction||1===b.length)return b.join(t.delimiter);if(2===b.length)return b.join(t.conjunction);if(b.length>2)return b.slice(0,-1).join(t.delimiter)+(t.serialComma?",":"")+t.conjunction+b.slice(-1)}(e,d({},t,n||{}))};return d(t,{language:"en",delimiter:", ",spacer:" ",conjunction:"",serialComma:!0,units:["y","mo","w","d","h","m","s"],languages:{},round:!1,unitMeasures:{y:315576e5,mo:26298e5,w:6048e5,d:864e5,h:36e5,m:6e4,s:1e3,ms:1}},e)}var a=s({});function l(e,t,n,o){var r;r=f(o,"decimal")?o.decimal:f(n,"decimal")?n.decimal:".";var i,s=e.toString().replace(".",r),a=n[t];return i="function"==typeof a?a(e):a,s+o.spacer+i}function d(e){for(var t,n=1;n<arguments.length;n++)for(var o in t=arguments[n])f(t,o)&&(e[o]=t[o]);return e}function c(e){return 1===e?0:Math.floor(e)!==e?1:e%10>=2&&e%10<=4&&!(e%100>10&&e%100<20)?2:3}function m(e){return Math.floor(e)!==e?2:e%100>=5&&e%100<=20||e%10>=5&&e%10<=9||e%10==0?0:e%10==1?1:e>1?2:0}function u(e){return 1===e?0:Math.floor(e)!==e?1:e%10>=2&&e%10<=4&&e%100<10?2:3}function p(e){return 1===e||e%10==1&&e%100>20?0:Math.floor(e)!==e||e%10>=2&&e%100>20||e%10>=2&&e%100<10?1:2}function g(e){return e%10==1&&e%100!=11}var h=Array.isArray||function(e){return"[object Array]"===Object.prototype.toString.call(e)};function f(e,t){return Object.prototype.hasOwnProperty.call(e,t)}a.getSupportedLanguages=function(){var e=[];for(var t in i)f(i,t)&&"gr"!==t&&e.push(t);return e},a.humanizer=s,void 0===(o=function(){return a}.call(t,n,t,e))||(e.exports=o)}()},6156:(e,t,n)=>{var o=n(5409).Symbol;e.exports=o},4876:e=>{e.exports=function(e,t){for(var n=-1,o=null==e?0:e.length,r=Array(o);++n<o;)r[n]=t(e[n],n,e);return r}},4663:e=>{e.exports=function(e,t,n,o){var r=-1,i=null==e?0:e.length;for(o&&i&&(n=e[++r]);++r<i;)n=t(n,e[r],r,e);return n}},7112:e=>{e.exports=function(e){return e.split("")}},5718:e=>{var t=/[^\x00-\x2f\x3a-\x40\x5b-\x60\x7b-\x7f]+/g;e.exports=function(e){return e.match(t)||[]}},5725:(e,t,n)=>{var o=n(6156),r=n(1398),i=n(3950),s=o?o.toStringTag:void 0;e.exports=function(e){return null==e?void 0===e?"[object Undefined]":"[object Null]":s&&s in Object(e)?r(e):i(e)}},7435:e=>{e.exports=function(e){return function(t){return null==e?void 0:e[t]}}},2363:e=>{e.exports=function(e,t,n){var o=-1,r=e.length;t<0&&(t=-t>r?0:r+t),(n=n>r?r:n)<0&&(n+=r),r=t>n?0:n-t>>>0,t>>>=0;for(var i=Array(r);++o<r;)i[o]=e[o+t];return i}},127:(e,t,n)=>{var o=n(6156),r=n(4876),i=n(5690),s=n(3494),a=o?o.prototype:void 0,l=a?a.toString:void 0;e.exports=function e(t){if("string"==typeof t)return t;if(i(t))return r(t,e)+"";if(s(t))return l?l.call(t):"";var n=t+"";return"0"==n&&1/t==-Infinity?"-0":n}},7270:(e,t,n)=>{var o=n(2309),r=/^\s+/;e.exports=function(e){return e?e.slice(0,o(e)+1).replace(r,""):e}},2970:(e,t,n)=>{var o=n(2363);e.exports=function(e,t,n){var r=e.length;return n=void 0===n?r:n,!t&&n>=r?e:o(e,t,n)}},9753:(e,t,n)=>{var o=n(2970),r=n(4925),i=n(6345),s=n(3976);e.exports=function(e){return function(t){t=s(t);var n=r(t)?i(t):void 0,a=n?n[0]:t.charAt(0),l=n?o(n,1).join(""):t.slice(1);return a[e]()+l}}},2800:(e,t,n)=>{var o=n(4663),r=n(1182),i=n(2844),s=RegExp("['’]","g");e.exports=function(e){return function(t){return o(i(r(t).replace(s,"")),e,"")}}},5440:(e,t,n)=>{var o=n(7435)({À:"A",Á:"A",Â:"A",Ã:"A",Ä:"A",Å:"A",à:"a",á:"a",â:"a",ã:"a",ä:"a",å:"a",Ç:"C",ç:"c",Ð:"D",ð:"d",È:"E",É:"E",Ê:"E",Ë:"E",è:"e",é:"e",ê:"e",ë:"e",Ì:"I",Í:"I",Î:"I",Ï:"I",ì:"i",í:"i",î:"i",ï:"i",Ñ:"N",ñ:"n",Ò:"O",Ó:"O",Ô:"O",Õ:"O",Ö:"O",Ø:"O",ò:"o",ó:"o",ô:"o",õ:"o",ö:"o",ø:"o",Ù:"U",Ú:"U",Û:"U",Ü:"U",ù:"u",ú:"u",û:"u",ü:"u",Ý:"Y",ý:"y",ÿ:"y",Æ:"Ae",æ:"ae",Þ:"Th",þ:"th",ß:"ss",Ā:"A",Ă:"A",Ą:"A",ā:"a",ă:"a",ą:"a",Ć:"C",Ĉ:"C",Ċ:"C",Č:"C",ć:"c",ĉ:"c",ċ:"c",č:"c",Ď:"D",Đ:"D",ď:"d",đ:"d",Ē:"E",Ĕ:"E",Ė:"E",Ę:"E",Ě:"E",ē:"e",ĕ:"e",ė:"e",ę:"e",ě:"e",Ĝ:"G",Ğ:"G",Ġ:"G",Ģ:"G",ĝ:"g",ğ:"g",ġ:"g",ģ:"g",Ĥ:"H",Ħ:"H",ĥ:"h",ħ:"h",Ĩ:"I",Ī:"I",Ĭ:"I",Į:"I",İ:"I",ĩ:"i",ī:"i",ĭ:"i",į:"i",ı:"i",Ĵ:"J",ĵ:"j",Ķ:"K",ķ:"k",ĸ:"k",Ĺ:"L",Ļ:"L",Ľ:"L",Ŀ:"L",Ł:"L",ĺ:"l",ļ:"l",ľ:"l",ŀ:"l",ł:"l",Ń:"N",Ņ:"N",Ň:"N",Ŋ:"N",ń:"n",ņ:"n",ň:"n",ŋ:"n",Ō:"O",Ŏ:"O",Ő:"O",ō:"o",ŏ:"o",ő:"o",Ŕ:"R",Ŗ:"R",Ř:"R",ŕ:"r",ŗ:"r",ř:"r",Ś:"S",Ŝ:"S",Ş:"S",Š:"S",ś:"s",ŝ:"s",ş:"s",š:"s",Ţ:"T",Ť:"T",Ŧ:"T",ţ:"t",ť:"t",ŧ:"t",Ũ:"U",Ū:"U",Ŭ:"U",Ů:"U",Ű:"U",Ų:"U",ũ:"u",ū:"u",ŭ:"u",ů:"u",ű:"u",ų:"u",Ŵ:"W",ŵ:"w",Ŷ:"Y",ŷ:"y",Ÿ:"Y",Ź:"Z",Ż:"Z",Ž:"Z",ź:"z",ż:"z",ž:"z",IJ:"IJ",ij:"ij",Œ:"Oe",œ:"oe",ʼn:"'n",ſ:"s"});e.exports=o},5714:(e,t,n)=>{var o="object"==typeof n.g&&n.g&&n.g.Object===Object&&n.g;e.exports=o},1398:(e,t,n)=>{var o=n(6156),r=Object.prototype,i=r.hasOwnProperty,s=r.toString,a=o?o.toStringTag:void 0;e.exports=function(e){var t=i.call(e,a),n=e[a];try{e[a]=void 0;var o=!0}catch(e){}var r=s.call(e);return o&&(t?e[a]=n:delete e[a]),r}},4925:e=>{var t=RegExp("[\\u200d\\ud800-\\udfff\\u0300-\\u036f\\ufe20-\\ufe2f\\u20d0-\\u20ff\\ufe0e\\ufe0f]");e.exports=function(e){return t.test(e)}},8058:e=>{var t=/[a-z][A-Z]|[A-Z]{2}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/;e.exports=function(e){return t.test(e)}},3950:e=>{var t=Object.prototype.toString;e.exports=function(e){return t.call(e)}},5409:(e,t,n)=>{var o=n(5714),r="object"==typeof self&&self&&self.Object===Object&&self,i=o||r||Function("return this")();e.exports=i},6345:(e,t,n)=>{var o=n(7112),r=n(4925),i=n(18);e.exports=function(e){return r(e)?i(e):o(e)}},2309:e=>{var t=/\s/;e.exports=function(e){for(var n=e.length;n--&&t.test(e.charAt(n)););return n}},18:e=>{var t="[\\ud800-\\udfff]",n="[\\u0300-\\u036f\\ufe20-\\ufe2f\\u20d0-\\u20ff]",o="\\ud83c[\\udffb-\\udfff]",r="[^\\ud800-\\udfff]",i="(?:\\ud83c[\\udde6-\\uddff]){2}",s="[\\ud800-\\udbff][\\udc00-\\udfff]",a="(?:"+n+"|"+o+")"+"?",l="[\\ufe0e\\ufe0f]?",d=l+a+("(?:\\u200d(?:"+[r,i,s].join("|")+")"+l+a+")*"),c="(?:"+[r+n+"?",n,i,s,t].join("|")+")",m=RegExp(o+"(?="+o+")|"+c+d,"g");e.exports=function(e){return e.match(m)||[]}},4373:e=>{var t="\\u2700-\\u27bf",n="a-z\\xdf-\\xf6\\xf8-\\xff",o="A-Z\\xc0-\\xd6\\xd8-\\xde",r="\\xac\\xb1\\xd7\\xf7\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\xbf\\u2000-\\u206f \\t\\x0b\\f\\xa0\\ufeff\\n\\r\\u2028\\u2029\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000",i="["+r+"]",s="\\d+",a="[\\u2700-\\u27bf]",l="["+n+"]",d="[^\\ud800-\\udfff"+r+s+t+n+o+"]",c="(?:\\ud83c[\\udde6-\\uddff]){2}",m="[\\ud800-\\udbff][\\udc00-\\udfff]",u="["+o+"]",p="(?:"+l+"|"+d+")",g="(?:"+u+"|"+d+")",h="(?:['’](?:d|ll|m|re|s|t|ve))?",f="(?:['’](?:D|LL|M|RE|S|T|VE))?",x="(?:[\\u0300-\\u036f\\ufe20-\\ufe2f\\u20d0-\\u20ff]|\\ud83c[\\udffb-\\udfff])?",y="[\\ufe0e\\ufe0f]?",b=y+x+("(?:\\u200d(?:"+["[^\\ud800-\\udfff]",c,m].join("|")+")"+y+x+")*"),T="(?:"+[a,c,m].join("|")+")"+b,v=RegExp([u+"?"+l+"+"+h+"(?="+[i,u,"$"].join("|")+")",g+"+"+f+"(?="+[i,u+p,"$"].join("|")+")",u+"?"+p+"+"+h,u+"+"+f,"\\d*(?:1ST|2ND|3RD|(?![123])\\dTH)(?=\\b|[a-z_])","\\d*(?:1st|2nd|3rd|(?![123])\\dth)(?=\\b|[A-Z_])",s,T].join("|"),"g");e.exports=function(e){return e.match(v)||[]}},268:(e,t,n)=>{var o=n(8683),r=n(2800)((function(e,t,n){return t=t.toLowerCase(),e+(n?o(t):t)}));e.exports=r},8683:(e,t,n)=>{var o=n(3976),r=n(7644);e.exports=function(e){return r(o(e).toLowerCase())}},7280:(e,t,n)=>{var o=n(8383),r=n(1551),i=n(2413),s=Math.max,a=Math.min;e.exports=function(e,t,n){var l,d,c,m,u,p,g=0,h=!1,f=!1,x=!0;if("function"!=typeof e)throw new TypeError("Expected a function");function y(t){var n=l,o=d;return l=d=void 0,g=t,m=e.apply(o,n)}function b(e){return g=e,u=setTimeout(v,t),h?y(e):m}function T(e){var n=e-p;return void 0===p||n>=t||n<0||f&&e-g>=c}function v(){var e=r();if(T(e))return S(e);u=setTimeout(v,function(e){var n=t-(e-p);return f?a(n,c-(e-g)):n}(e))}function S(e){return u=void 0,x&&l?y(e):(l=d=void 0,m)}function k(){var e=r(),n=T(e);if(l=arguments,d=this,p=e,n){if(void 0===u)return b(p);if(f)return clearTimeout(u),u=setTimeout(v,t),y(p)}return void 0===u&&(u=setTimeout(v,t)),m}return t=i(t)||0,o(n)&&(h=!!n.leading,c=(f="maxWait"in n)?s(i(n.maxWait)||0,t):c,x="trailing"in n?!!n.trailing:x),k.cancel=function(){void 0!==u&&clearTimeout(u),g=0,l=p=d=u=void 0},k.flush=function(){return void 0===u?m:S(r())},k}},1182:(e,t,n)=>{var o=n(5440),r=n(3976),i=/[\xc0-\xd6\xd8-\xf6\xf8-\xff\u0100-\u017f]/g,s=RegExp("[\\u0300-\\u036f\\ufe20-\\ufe2f\\u20d0-\\u20ff]","g");e.exports=function(e){return(e=r(e))&&e.replace(i,o).replace(s,"")}},5690:e=>{var t=Array.isArray;e.exports=t},8383:e=>{e.exports=function(e){var t=typeof e;return null!=e&&("object"==t||"function"==t)}},6152:e=>{e.exports=function(e){return null!=e&&"object"==typeof e}},3494:(e,t,n)=>{var o=n(5725),r=n(6152);e.exports=function(e){return"symbol"==typeof e||r(e)&&"[object Symbol]"==o(e)}},1551:(e,t,n)=>{var o=n(5409);e.exports=function(){return o.Date.now()}},2413:(e,t,n)=>{var o=n(7270),r=n(8383),i=n(3494),s=/^[-+]0x[0-9a-f]+$/i,a=/^0b[01]+$/i,l=/^0o[0-7]+$/i,d=parseInt;e.exports=function(e){if("number"==typeof e)return e;if(i(e))return NaN;if(r(e)){var t="function"==typeof e.valueOf?e.valueOf():e;e=r(t)?t+"":t}if("string"!=typeof e)return 0===e?e:+e;e=o(e);var n=a.test(e);return n||l.test(e)?d(e.slice(2),n?2:8):s.test(e)?NaN:+e}},3976:(e,t,n)=>{var o=n(127);e.exports=function(e){return null==e?"":o(e)}},7644:(e,t,n)=>{var o=n(9753)("toUpperCase");e.exports=o},2844:(e,t,n)=>{var o=n(5718),r=n(8058),i=n(3976),s=n(4373);e.exports=function(e,t,n){return e=i(e),void 0===(t=n?void 0:t)?r(e)?s(e):o(e):e.match(t)||[]}},1921:(e,t,n)=>{!function(e,t){e((function(){"use strict";var e,n={mobileDetectRules:{phones:{iPhone:"\\biPhone\\b|\\biPod\\b",BlackBerry:"BlackBerry|\\bBB10\\b|rim[0-9]+|\\b(BBA100|BBB100|BBD100|BBE100|BBF100|STH100)\\b-[0-9]+",HTC:"HTC|HTC.*(Sensation|Evo|Vision|Explorer|6800|8100|8900|A7272|S510e|C110e|Legend|Desire|T8282)|APX515CKT|Qtek9090|APA9292KT|HD_mini|Sensation.*Z710e|PG86100|Z715e|Desire.*(A8181|HD)|ADR6200|ADR6400L|ADR6425|001HT|Inspire 4G|Android.*\\bEVO\\b|T-Mobile G1|Z520m|Android [0-9.]+; Pixel",Nexus:"Nexus One|Nexus S|Galaxy.*Nexus|Android.*Nexus.*Mobile|Nexus 4|Nexus 5|Nexus 6",Dell:"Dell[;]? (Streak|Aero|Venue|Venue Pro|Flash|Smoke|Mini 3iX)|XCD28|XCD35|\\b001DL\\b|\\b101DL\\b|\\bGS01\\b",Motorola:"Motorola|DROIDX|DROID BIONIC|\\bDroid\\b.*Build|Android.*Xoom|HRI39|MOT-|A1260|A1680|A555|A853|A855|A953|A955|A956|Motorola.*ELECTRIFY|Motorola.*i1|i867|i940|MB200|MB300|MB501|MB502|MB508|MB511|MB520|MB525|MB526|MB611|MB612|MB632|MB810|MB855|MB860|MB861|MB865|MB870|ME501|ME502|ME511|ME525|ME600|ME632|ME722|ME811|ME860|ME863|ME865|MT620|MT710|MT716|MT720|MT810|MT870|MT917|Motorola.*TITANIUM|WX435|WX445|XT300|XT301|XT311|XT316|XT317|XT319|XT320|XT390|XT502|XT530|XT531|XT532|XT535|XT603|XT610|XT611|XT615|XT681|XT701|XT702|XT711|XT720|XT800|XT806|XT860|XT862|XT875|XT882|XT883|XT894|XT901|XT907|XT909|XT910|XT912|XT928|XT926|XT915|XT919|XT925|XT1021|\\bMoto E\\b|XT1068|XT1092|XT1052",Samsung:"\\bSamsung\\b|SM-G950F|SM-G955F|SM-G9250|GT-19300|SGH-I337|BGT-S5230|GT-B2100|GT-B2700|GT-B2710|GT-B3210|GT-B3310|GT-B3410|GT-B3730|GT-B3740|GT-B5510|GT-B5512|GT-B5722|GT-B6520|GT-B7300|GT-B7320|GT-B7330|GT-B7350|GT-B7510|GT-B7722|GT-B7800|GT-C3010|GT-C3011|GT-C3060|GT-C3200|GT-C3212|GT-C3212I|GT-C3262|GT-C3222|GT-C3300|GT-C3300K|GT-C3303|GT-C3303K|GT-C3310|GT-C3322|GT-C3330|GT-C3350|GT-C3500|GT-C3510|GT-C3530|GT-C3630|GT-C3780|GT-C5010|GT-C5212|GT-C6620|GT-C6625|GT-C6712|GT-E1050|GT-E1070|GT-E1075|GT-E1080|GT-E1081|GT-E1085|GT-E1087|GT-E1100|GT-E1107|GT-E1110|GT-E1120|GT-E1125|GT-E1130|GT-E1160|GT-E1170|GT-E1175|GT-E1180|GT-E1182|GT-E1200|GT-E1210|GT-E1225|GT-E1230|GT-E1390|GT-E2100|GT-E2120|GT-E2121|GT-E2152|GT-E2220|GT-E2222|GT-E2230|GT-E2232|GT-E2250|GT-E2370|GT-E2550|GT-E2652|GT-E3210|GT-E3213|GT-I5500|GT-I5503|GT-I5700|GT-I5800|GT-I5801|GT-I6410|GT-I6420|GT-I7110|GT-I7410|GT-I7500|GT-I8000|GT-I8150|GT-I8160|GT-I8190|GT-I8320|GT-I8330|GT-I8350|GT-I8530|GT-I8700|GT-I8703|GT-I8910|GT-I9000|GT-I9001|GT-I9003|GT-I9010|GT-I9020|GT-I9023|GT-I9070|GT-I9082|GT-I9100|GT-I9103|GT-I9220|GT-I9250|GT-I9300|GT-I9305|GT-I9500|GT-I9505|GT-M3510|GT-M5650|GT-M7500|GT-M7600|GT-M7603|GT-M8800|GT-M8910|GT-N7000|GT-S3110|GT-S3310|GT-S3350|GT-S3353|GT-S3370|GT-S3650|GT-S3653|GT-S3770|GT-S3850|GT-S5210|GT-S5220|GT-S5229|GT-S5230|GT-S5233|GT-S5250|GT-S5253|GT-S5260|GT-S5263|GT-S5270|GT-S5300|GT-S5330|GT-S5350|GT-S5360|GT-S5363|GT-S5369|GT-S5380|GT-S5380D|GT-S5560|GT-S5570|GT-S5600|GT-S5603|GT-S5610|GT-S5620|GT-S5660|GT-S5670|GT-S5690|GT-S5750|GT-S5780|GT-S5830|GT-S5839|GT-S6102|GT-S6500|GT-S7070|GT-S7200|GT-S7220|GT-S7230|GT-S7233|GT-S7250|GT-S7500|GT-S7530|GT-S7550|GT-S7562|GT-S7710|GT-S8000|GT-S8003|GT-S8500|GT-S8530|GT-S8600|SCH-A310|SCH-A530|SCH-A570|SCH-A610|SCH-A630|SCH-A650|SCH-A790|SCH-A795|SCH-A850|SCH-A870|SCH-A890|SCH-A930|SCH-A950|SCH-A970|SCH-A990|SCH-I100|SCH-I110|SCH-I400|SCH-I405|SCH-I500|SCH-I510|SCH-I515|SCH-I600|SCH-I730|SCH-I760|SCH-I770|SCH-I830|SCH-I910|SCH-I920|SCH-I959|SCH-LC11|SCH-N150|SCH-N300|SCH-R100|SCH-R300|SCH-R351|SCH-R400|SCH-R410|SCH-T300|SCH-U310|SCH-U320|SCH-U350|SCH-U360|SCH-U365|SCH-U370|SCH-U380|SCH-U410|SCH-U430|SCH-U450|SCH-U460|SCH-U470|SCH-U490|SCH-U540|SCH-U550|SCH-U620|SCH-U640|SCH-U650|SCH-U660|SCH-U700|SCH-U740|SCH-U750|SCH-U810|SCH-U820|SCH-U900|SCH-U940|SCH-U960|SCS-26UC|SGH-A107|SGH-A117|SGH-A127|SGH-A137|SGH-A157|SGH-A167|SGH-A177|SGH-A187|SGH-A197|SGH-A227|SGH-A237|SGH-A257|SGH-A437|SGH-A517|SGH-A597|SGH-A637|SGH-A657|SGH-A667|SGH-A687|SGH-A697|SGH-A707|SGH-A717|SGH-A727|SGH-A737|SGH-A747|SGH-A767|SGH-A777|SGH-A797|SGH-A817|SGH-A827|SGH-A837|SGH-A847|SGH-A867|SGH-A877|SGH-A887|SGH-A897|SGH-A927|SGH-B100|SGH-B130|SGH-B200|SGH-B220|SGH-C100|SGH-C110|SGH-C120|SGH-C130|SGH-C140|SGH-C160|SGH-C170|SGH-C180|SGH-C200|SGH-C207|SGH-C210|SGH-C225|SGH-C230|SGH-C417|SGH-C450|SGH-D307|SGH-D347|SGH-D357|SGH-D407|SGH-D415|SGH-D780|SGH-D807|SGH-D980|SGH-E105|SGH-E200|SGH-E315|SGH-E316|SGH-E317|SGH-E335|SGH-E590|SGH-E635|SGH-E715|SGH-E890|SGH-F300|SGH-F480|SGH-I200|SGH-I300|SGH-I320|SGH-I550|SGH-I577|SGH-I600|SGH-I607|SGH-I617|SGH-I627|SGH-I637|SGH-I677|SGH-I700|SGH-I717|SGH-I727|SGH-i747M|SGH-I777|SGH-I780|SGH-I827|SGH-I847|SGH-I857|SGH-I896|SGH-I897|SGH-I900|SGH-I907|SGH-I917|SGH-I927|SGH-I937|SGH-I997|SGH-J150|SGH-J200|SGH-L170|SGH-L700|SGH-M110|SGH-M150|SGH-M200|SGH-N105|SGH-N500|SGH-N600|SGH-N620|SGH-N625|SGH-N700|SGH-N710|SGH-P107|SGH-P207|SGH-P300|SGH-P310|SGH-P520|SGH-P735|SGH-P777|SGH-Q105|SGH-R210|SGH-R220|SGH-R225|SGH-S105|SGH-S307|SGH-T109|SGH-T119|SGH-T139|SGH-T209|SGH-T219|SGH-T229|SGH-T239|SGH-T249|SGH-T259|SGH-T309|SGH-T319|SGH-T329|SGH-T339|SGH-T349|SGH-T359|SGH-T369|SGH-T379|SGH-T409|SGH-T429|SGH-T439|SGH-T459|SGH-T469|SGH-T479|SGH-T499|SGH-T509|SGH-T519|SGH-T539|SGH-T559|SGH-T589|SGH-T609|SGH-T619|SGH-T629|SGH-T639|SGH-T659|SGH-T669|SGH-T679|SGH-T709|SGH-T719|SGH-T729|SGH-T739|SGH-T746|SGH-T749|SGH-T759|SGH-T769|SGH-T809|SGH-T819|SGH-T839|SGH-T919|SGH-T929|SGH-T939|SGH-T959|SGH-T989|SGH-U100|SGH-U200|SGH-U800|SGH-V205|SGH-V206|SGH-X100|SGH-X105|SGH-X120|SGH-X140|SGH-X426|SGH-X427|SGH-X475|SGH-X495|SGH-X497|SGH-X507|SGH-X600|SGH-X610|SGH-X620|SGH-X630|SGH-X700|SGH-X820|SGH-X890|SGH-Z130|SGH-Z150|SGH-Z170|SGH-ZX10|SGH-ZX20|SHW-M110|SPH-A120|SPH-A400|SPH-A420|SPH-A460|SPH-A500|SPH-A560|SPH-A600|SPH-A620|SPH-A660|SPH-A700|SPH-A740|SPH-A760|SPH-A790|SPH-A800|SPH-A820|SPH-A840|SPH-A880|SPH-A900|SPH-A940|SPH-A960|SPH-D600|SPH-D700|SPH-D710|SPH-D720|SPH-I300|SPH-I325|SPH-I330|SPH-I350|SPH-I500|SPH-I600|SPH-I700|SPH-L700|SPH-M100|SPH-M220|SPH-M240|SPH-M300|SPH-M305|SPH-M320|SPH-M330|SPH-M350|SPH-M360|SPH-M370|SPH-M380|SPH-M510|SPH-M540|SPH-M550|SPH-M560|SPH-M570|SPH-M580|SPH-M610|SPH-M620|SPH-M630|SPH-M800|SPH-M810|SPH-M850|SPH-M900|SPH-M910|SPH-M920|SPH-M930|SPH-N100|SPH-N200|SPH-N240|SPH-N300|SPH-N400|SPH-Z400|SWC-E100|SCH-i909|GT-N7100|GT-N7105|SCH-I535|SM-N900A|SGH-I317|SGH-T999L|GT-S5360B|GT-I8262|GT-S6802|GT-S6312|GT-S6310|GT-S5312|GT-S5310|GT-I9105|GT-I8510|GT-S6790N|SM-G7105|SM-N9005|GT-S5301|GT-I9295|GT-I9195|SM-C101|GT-S7392|GT-S7560|GT-B7610|GT-I5510|GT-S7582|GT-S7530E|GT-I8750|SM-G9006V|SM-G9008V|SM-G9009D|SM-G900A|SM-G900D|SM-G900F|SM-G900H|SM-G900I|SM-G900J|SM-G900K|SM-G900L|SM-G900M|SM-G900P|SM-G900R4|SM-G900S|SM-G900T|SM-G900V|SM-G900W8|SHV-E160K|SCH-P709|SCH-P729|SM-T2558|GT-I9205|SM-G9350|SM-J120F|SM-G920F|SM-G920V|SM-G930F|SM-N910C|SM-A310F|GT-I9190|SM-J500FN|SM-G903F|SM-J330F",LG:"\\bLG\\b;|LG[- ]?(C800|C900|E400|E610|E900|E-900|F160|F180K|F180L|F180S|730|855|L160|LS740|LS840|LS970|LU6200|MS690|MS695|MS770|MS840|MS870|MS910|P500|P700|P705|VM696|AS680|AS695|AX840|C729|E970|GS505|272|C395|E739BK|E960|L55C|L75C|LS696|LS860|P769BK|P350|P500|P509|P870|UN272|US730|VS840|VS950|LN272|LN510|LS670|LS855|LW690|MN270|MN510|P509|P769|P930|UN200|UN270|UN510|UN610|US670|US740|US760|UX265|UX840|VN271|VN530|VS660|VS700|VS740|VS750|VS910|VS920|VS930|VX9200|VX11000|AX840A|LW770|P506|P925|P999|E612|D955|D802|MS323|M257)|LM-G710",Sony:"SonyST|SonyLT|SonyEricsson|SonyEricssonLT15iv|LT18i|E10i|LT28h|LT26w|SonyEricssonMT27i|C5303|C6902|C6903|C6906|C6943|D2533",Asus:"Asus.*Galaxy|PadFone.*Mobile",NokiaLumia:"Lumia [0-9]{3,4}",Micromax:"Micromax.*\\b(A210|A92|A88|A72|A111|A110Q|A115|A116|A110|A90S|A26|A51|A35|A54|A25|A27|A89|A68|A65|A57|A90)\\b",Palm:"PalmSource|Palm",Vertu:"Vertu|Vertu.*Ltd|Vertu.*Ascent|Vertu.*Ayxta|Vertu.*Constellation(F|Quest)?|Vertu.*Monika|Vertu.*Signature",Pantech:"PANTECH|IM-A850S|IM-A840S|IM-A830L|IM-A830K|IM-A830S|IM-A820L|IM-A810K|IM-A810S|IM-A800S|IM-T100K|IM-A725L|IM-A780L|IM-A775C|IM-A770K|IM-A760S|IM-A750K|IM-A740S|IM-A730S|IM-A720L|IM-A710K|IM-A690L|IM-A690S|IM-A650S|IM-A630K|IM-A600S|VEGA PTL21|PT003|P8010|ADR910L|P6030|P6020|P9070|P4100|P9060|P5000|CDM8992|TXT8045|ADR8995|IS11PT|P2030|P6010|P8000|PT002|IS06|CDM8999|P9050|PT001|TXT8040|P2020|P9020|P2000|P7040|P7000|C790",Fly:"IQ230|IQ444|IQ450|IQ440|IQ442|IQ441|IQ245|IQ256|IQ236|IQ255|IQ235|IQ245|IQ275|IQ240|IQ285|IQ280|IQ270|IQ260|IQ250",Wiko:"KITE 4G|HIGHWAY|GETAWAY|STAIRWAY|DARKSIDE|DARKFULL|DARKNIGHT|DARKMOON|SLIDE|WAX 4G|RAINBOW|BLOOM|SUNSET|GOA(?!nna)|LENNY|BARRY|IGGY|OZZY|CINK FIVE|CINK PEAX|CINK PEAX 2|CINK SLIM|CINK SLIM 2|CINK +|CINK KING|CINK PEAX|CINK SLIM|SUBLIM",iMobile:"i-mobile (IQ|i-STYLE|idea|ZAA|Hitz)",SimValley:"\\b(SP-80|XT-930|SX-340|XT-930|SX-310|SP-360|SP60|SPT-800|SP-120|SPT-800|SP-140|SPX-5|SPX-8|SP-100|SPX-8|SPX-12)\\b",Wolfgang:"AT-B24D|AT-AS50HD|AT-AS40W|AT-AS55HD|AT-AS45q2|AT-B26D|AT-AS50Q",Alcatel:"Alcatel",Nintendo:"Nintendo (3DS|Switch)",Amoi:"Amoi",INQ:"INQ",OnePlus:"ONEPLUS",GenericPhone:"Tapatalk|PDA;|SAGEM|\\bmmp\\b|pocket|\\bpsp\\b|symbian|Smartphone|smartfon|treo|up.browser|up.link|vodafone|\\bwap\\b|nokia|Series40|Series60|S60|SonyEricsson|N900|MAUI.*WAP.*Browser"},tablets:{iPad:"iPad|iPad.*Mobile",NexusTablet:"Android.*Nexus[\\s]+(7|9|10)",GoogleTablet:"Android.*Pixel C",SamsungTablet:"SAMSUNG.*Tablet|Galaxy.*Tab|SC-01C|GT-P1000|GT-P1003|GT-P1010|GT-P3105|GT-P6210|GT-P6800|GT-P6810|GT-P7100|GT-P7300|GT-P7310|GT-P7500|GT-P7510|SCH-I800|SCH-I815|SCH-I905|SGH-I957|SGH-I987|SGH-T849|SGH-T859|SGH-T869|SPH-P100|GT-P3100|GT-P3108|GT-P3110|GT-P5100|GT-P5110|GT-P6200|GT-P7320|GT-P7511|GT-N8000|GT-P8510|SGH-I497|SPH-P500|SGH-T779|SCH-I705|SCH-I915|GT-N8013|GT-P3113|GT-P5113|GT-P8110|GT-N8010|GT-N8005|GT-N8020|GT-P1013|GT-P6201|GT-P7501|GT-N5100|GT-N5105|GT-N5110|SHV-E140K|SHV-E140L|SHV-E140S|SHV-E150S|SHV-E230K|SHV-E230L|SHV-E230S|SHW-M180K|SHW-M180L|SHW-M180S|SHW-M180W|SHW-M300W|SHW-M305W|SHW-M380K|SHW-M380S|SHW-M380W|SHW-M430W|SHW-M480K|SHW-M480S|SHW-M480W|SHW-M485W|SHW-M486W|SHW-M500W|GT-I9228|SCH-P739|SCH-I925|GT-I9200|GT-P5200|GT-P5210|GT-P5210X|SM-T311|SM-T310|SM-T310X|SM-T210|SM-T210R|SM-T211|SM-P600|SM-P601|SM-P605|SM-P900|SM-P901|SM-T217|SM-T217A|SM-T217S|SM-P6000|SM-T3100|SGH-I467|XE500|SM-T110|GT-P5220|GT-I9200X|GT-N5110X|GT-N5120|SM-P905|SM-T111|SM-T2105|SM-T315|SM-T320|SM-T320X|SM-T321|SM-T520|SM-T525|SM-T530NU|SM-T230NU|SM-T330NU|SM-T900|XE500T1C|SM-P605V|SM-P905V|SM-T337V|SM-T537V|SM-T707V|SM-T807V|SM-P600X|SM-P900X|SM-T210X|SM-T230|SM-T230X|SM-T325|GT-P7503|SM-T531|SM-T330|SM-T530|SM-T705|SM-T705C|SM-T535|SM-T331|SM-T800|SM-T700|SM-T537|SM-T807|SM-P907A|SM-T337A|SM-T537A|SM-T707A|SM-T807A|SM-T237|SM-T807P|SM-P607T|SM-T217T|SM-T337T|SM-T807T|SM-T116NQ|SM-T116BU|SM-P550|SM-T350|SM-T550|SM-T9000|SM-P9000|SM-T705Y|SM-T805|GT-P3113|SM-T710|SM-T810|SM-T815|SM-T360|SM-T533|SM-T113|SM-T335|SM-T715|SM-T560|SM-T670|SM-T677|SM-T377|SM-T567|SM-T357T|SM-T555|SM-T561|SM-T713|SM-T719|SM-T813|SM-T819|SM-T580|SM-T355Y?|SM-T280|SM-T817A|SM-T820|SM-W700|SM-P580|SM-T587|SM-P350|SM-P555M|SM-P355M|SM-T113NU|SM-T815Y|SM-T585|SM-T285|SM-T825|SM-W708|SM-T835|SM-T830|SM-T837V|SM-T720|SM-T510|SM-T387V",Kindle:"Kindle|Silk.*Accelerated|Android.*\\b(KFOT|KFTT|KFJWI|KFJWA|KFOTE|KFSOWI|KFTHWI|KFTHWA|KFAPWI|KFAPWA|WFJWAE|KFSAWA|KFSAWI|KFASWI|KFARWI|KFFOWI|KFGIWI|KFMEWI)\\b|Android.*Silk/[0-9.]+ like Chrome/[0-9.]+ (?!Mobile)",SurfaceTablet:"Windows NT [0-9.]+; ARM;.*(Tablet|ARMBJS)",HPTablet:"HP Slate (7|8|10)|HP ElitePad 900|hp-tablet|EliteBook.*Touch|HP 8|Slate 21|HP SlateBook 10",AsusTablet:"^.*PadFone((?!Mobile).)*$|Transformer|TF101|TF101G|TF300T|TF300TG|TF300TL|TF700T|TF700KL|TF701T|TF810C|ME171|ME301T|ME302C|ME371MG|ME370T|ME372MG|ME172V|ME173X|ME400C|Slider SL101|\\bK00F\\b|\\bK00C\\b|\\bK00E\\b|\\bK00L\\b|TX201LA|ME176C|ME102A|\\bM80TA\\b|ME372CL|ME560CG|ME372CG|ME302KL| K010 | K011 | K017 | K01E |ME572C|ME103K|ME170C|ME171C|\\bME70C\\b|ME581C|ME581CL|ME8510C|ME181C|P01Y|PO1MA|P01Z|\\bP027\\b|\\bP024\\b|\\bP00C\\b",BlackBerryTablet:"PlayBook|RIM Tablet",HTCtablet:"HTC_Flyer_P512|HTC Flyer|HTC Jetstream|HTC-P715a|HTC EVO View 4G|PG41200|PG09410",MotorolaTablet:"xoom|sholest|MZ615|MZ605|MZ505|MZ601|MZ602|MZ603|MZ604|MZ606|MZ607|MZ608|MZ609|MZ615|MZ616|MZ617",NookTablet:"Android.*Nook|NookColor|nook browser|BNRV200|BNRV200A|BNTV250|BNTV250A|BNTV400|BNTV600|LogicPD Zoom2",AcerTablet:"Android.*; \\b(A100|A101|A110|A200|A210|A211|A500|A501|A510|A511|A700|A701|W500|W500P|W501|W501P|W510|W511|W700|G100|G100W|B1-A71|B1-710|B1-711|A1-810|A1-811|A1-830)\\b|W3-810|\\bA3-A10\\b|\\bA3-A11\\b|\\bA3-A20\\b|\\bA3-A30",ToshibaTablet:"Android.*(AT100|AT105|AT200|AT205|AT270|AT275|AT300|AT305|AT1S5|AT500|AT570|AT700|AT830)|TOSHIBA.*FOLIO",LGTablet:"\\bL-06C|LG-V909|LG-V900|LG-V700|LG-V510|LG-V500|LG-V410|LG-V400|LG-VK810\\b",FujitsuTablet:"Android.*\\b(F-01D|F-02F|F-05E|F-10D|M532|Q572)\\b",PrestigioTablet:"PMP3170B|PMP3270B|PMP3470B|PMP7170B|PMP3370B|PMP3570C|PMP5870C|PMP3670B|PMP5570C|PMP5770D|PMP3970B|PMP3870C|PMP5580C|PMP5880D|PMP5780D|PMP5588C|PMP7280C|PMP7280C3G|PMP7280|PMP7880D|PMP5597D|PMP5597|PMP7100D|PER3464|PER3274|PER3574|PER3884|PER5274|PER5474|PMP5097CPRO|PMP5097|PMP7380D|PMP5297C|PMP5297C_QUAD|PMP812E|PMP812E3G|PMP812F|PMP810E|PMP880TD|PMT3017|PMT3037|PMT3047|PMT3057|PMT7008|PMT5887|PMT5001|PMT5002",LenovoTablet:"Lenovo TAB|Idea(Tab|Pad)( A1|A10| K1|)|ThinkPad([ ]+)?Tablet|YT3-850M|YT3-X90L|YT3-X90F|YT3-X90X|Lenovo.*(S2109|S2110|S5000|S6000|K3011|A3000|A3500|A1000|A2107|A2109|A1107|A5500|A7600|B6000|B8000|B8080)(-|)(FL|F|HV|H|)|TB-X103F|TB-X304X|TB-X304F|TB-X304L|TB-X505F|TB-X505L|TB-X505X|TB-X605F|TB-X605L|TB-8703F|TB-8703X|TB-8703N|TB-8704N|TB-8704F|TB-8704X|TB-8704V|TB-7304F|TB-7304I|TB-7304X|Tab2A7-10F|Tab2A7-20F|TB2-X30L|YT3-X50L|YT3-X50F|YT3-X50M|YT-X705F|YT-X703F|YT-X703L|YT-X705L|YT-X705X|TB2-X30F|TB2-X30L|TB2-X30M|A2107A-F|A2107A-H|TB3-730F|TB3-730M|TB3-730X|TB-7504F|TB-7504X",DellTablet:"Venue 11|Venue 8|Venue 7|Dell Streak 10|Dell Streak 7",YarvikTablet:"Android.*\\b(TAB210|TAB211|TAB224|TAB250|TAB260|TAB264|TAB310|TAB360|TAB364|TAB410|TAB411|TAB420|TAB424|TAB450|TAB460|TAB461|TAB464|TAB465|TAB467|TAB468|TAB07-100|TAB07-101|TAB07-150|TAB07-151|TAB07-152|TAB07-200|TAB07-201-3G|TAB07-210|TAB07-211|TAB07-212|TAB07-214|TAB07-220|TAB07-400|TAB07-485|TAB08-150|TAB08-200|TAB08-201-3G|TAB08-201-30|TAB09-100|TAB09-211|TAB09-410|TAB10-150|TAB10-201|TAB10-211|TAB10-400|TAB10-410|TAB13-201|TAB274EUK|TAB275EUK|TAB374EUK|TAB462EUK|TAB474EUK|TAB9-200)\\b",MedionTablet:"Android.*\\bOYO\\b|LIFE.*(P9212|P9514|P9516|S9512)|LIFETAB",ArnovaTablet:"97G4|AN10G2|AN7bG3|AN7fG3|AN8G3|AN8cG3|AN7G3|AN9G3|AN7dG3|AN7dG3ST|AN7dG3ChildPad|AN10bG3|AN10bG3DT|AN9G2",IntensoTablet:"INM8002KP|INM1010FP|INM805ND|Intenso Tab|TAB1004",IRUTablet:"M702pro",MegafonTablet:"MegaFon V9|\\bZTE V9\\b|Android.*\\bMT7A\\b",EbodaTablet:"E-Boda (Supreme|Impresspeed|Izzycomm|Essential)",AllViewTablet:"Allview.*(Viva|Alldro|City|Speed|All TV|Frenzy|Quasar|Shine|TX1|AX1|AX2)",ArchosTablet:"\\b(101G9|80G9|A101IT)\\b|Qilive 97R|Archos5|\\bARCHOS (70|79|80|90|97|101|FAMILYPAD|)(b|c|)(G10| Cobalt| TITANIUM(HD|)| Xenon| Neon|XSK| 2| XS 2| PLATINUM| CARBON|GAMEPAD)\\b",AinolTablet:"NOVO7|NOVO8|NOVO10|Novo7Aurora|Novo7Basic|NOVO7PALADIN|novo9-Spark",NokiaLumiaTablet:"Lumia 2520",SonyTablet:"Sony.*Tablet|Xperia Tablet|Sony Tablet S|SO-03E|SGPT12|SGPT13|SGPT114|SGPT121|SGPT122|SGPT123|SGPT111|SGPT112|SGPT113|SGPT131|SGPT132|SGPT133|SGPT211|SGPT212|SGPT213|SGP311|SGP312|SGP321|EBRD1101|EBRD1102|EBRD1201|SGP351|SGP341|SGP511|SGP512|SGP521|SGP541|SGP551|SGP621|SGP641|SGP612|SOT31|SGP771|SGP611|SGP612|SGP712",PhilipsTablet:"\\b(PI2010|PI3000|PI3100|PI3105|PI3110|PI3205|PI3210|PI3900|PI4010|PI7000|PI7100)\\b",CubeTablet:"Android.*(K8GT|U9GT|U10GT|U16GT|U17GT|U18GT|U19GT|U20GT|U23GT|U30GT)|CUBE U8GT",CobyTablet:"MID1042|MID1045|MID1125|MID1126|MID7012|MID7014|MID7015|MID7034|MID7035|MID7036|MID7042|MID7048|MID7127|MID8042|MID8048|MID8127|MID9042|MID9740|MID9742|MID7022|MID7010",MIDTablet:"M9701|M9000|M9100|M806|M1052|M806|T703|MID701|MID713|MID710|MID727|MID760|MID830|MID728|MID933|MID125|MID810|MID732|MID120|MID930|MID800|MID731|MID900|MID100|MID820|MID735|MID980|MID130|MID833|MID737|MID960|MID135|MID860|MID736|MID140|MID930|MID835|MID733|MID4X10",MSITablet:"MSI \\b(Primo 73K|Primo 73L|Primo 81L|Primo 77|Primo 93|Primo 75|Primo 76|Primo 73|Primo 81|Primo 91|Primo 90|Enjoy 71|Enjoy 7|Enjoy 10)\\b",SMiTTablet:"Android.*(\\bMID\\b|MID-560|MTV-T1200|MTV-PND531|MTV-P1101|MTV-PND530)",RockChipTablet:"Android.*(RK2818|RK2808A|RK2918|RK3066)|RK2738|RK2808A",FlyTablet:"IQ310|Fly Vision",bqTablet:"Android.*(bq)?.*\\b(Elcano|Curie|Edison|Maxwell|Kepler|Pascal|Tesla|Hypatia|Platon|Newton|Livingstone|Cervantes|Avant|Aquaris ([E|M]10|M8))\\b|Maxwell.*Lite|Maxwell.*Plus",HuaweiTablet:"MediaPad|MediaPad 7 Youth|IDEOS S7|S7-201c|S7-202u|S7-101|S7-103|S7-104|S7-105|S7-106|S7-201|S7-Slim|M2-A01L|BAH-L09|BAH-W09|AGS-L09|CMR-AL19",NecTablet:"\\bN-06D|\\bN-08D",PantechTablet:"Pantech.*P4100",BronchoTablet:"Broncho.*(N701|N708|N802|a710)",VersusTablet:"TOUCHPAD.*[78910]|\\bTOUCHTAB\\b",ZyncTablet:"z1000|Z99 2G|z930|z990|z909|Z919|z900",PositivoTablet:"TB07STA|TB10STA|TB07FTA|TB10FTA",NabiTablet:"Android.*\\bNabi",KoboTablet:"Kobo Touch|\\bK080\\b|\\bVox\\b Build|\\bArc\\b Build",DanewTablet:"DSlide.*\\b(700|701R|702|703R|704|802|970|971|972|973|974|1010|1012)\\b",TexetTablet:"NaviPad|TB-772A|TM-7045|TM-7055|TM-9750|TM-7016|TM-7024|TM-7026|TM-7041|TM-7043|TM-7047|TM-8041|TM-9741|TM-9747|TM-9748|TM-9751|TM-7022|TM-7021|TM-7020|TM-7011|TM-7010|TM-7023|TM-7025|TM-7037W|TM-7038W|TM-7027W|TM-9720|TM-9725|TM-9737W|TM-1020|TM-9738W|TM-9740|TM-9743W|TB-807A|TB-771A|TB-727A|TB-725A|TB-719A|TB-823A|TB-805A|TB-723A|TB-715A|TB-707A|TB-705A|TB-709A|TB-711A|TB-890HD|TB-880HD|TB-790HD|TB-780HD|TB-770HD|TB-721HD|TB-710HD|TB-434HD|TB-860HD|TB-840HD|TB-760HD|TB-750HD|TB-740HD|TB-730HD|TB-722HD|TB-720HD|TB-700HD|TB-500HD|TB-470HD|TB-431HD|TB-430HD|TB-506|TB-504|TB-446|TB-436|TB-416|TB-146SE|TB-126SE",PlaystationTablet:"Playstation.*(Portable|Vita)",TrekstorTablet:"ST10416-1|VT10416-1|ST70408-1|ST702xx-1|ST702xx-2|ST80208|ST97216|ST70104-2|VT10416-2|ST10216-2A|SurfTab",PyleAudioTablet:"\\b(PTBL10CEU|PTBL10C|PTBL72BC|PTBL72BCEU|PTBL7CEU|PTBL7C|PTBL92BC|PTBL92BCEU|PTBL9CEU|PTBL9CUK|PTBL9C)\\b",AdvanTablet:"Android.* \\b(E3A|T3X|T5C|T5B|T3E|T3C|T3B|T1J|T1F|T2A|T1H|T1i|E1C|T1-E|T5-A|T4|E1-B|T2Ci|T1-B|T1-D|O1-A|E1-A|T1-A|T3A|T4i)\\b ",DanyTechTablet:"Genius Tab G3|Genius Tab S2|Genius Tab Q3|Genius Tab G4|Genius Tab Q4|Genius Tab G-II|Genius TAB GII|Genius TAB GIII|Genius Tab S1",GalapadTablet:"Android.*\\bG1\\b(?!\\))",MicromaxTablet:"Funbook|Micromax.*\\b(P250|P560|P360|P362|P600|P300|P350|P500|P275)\\b",KarbonnTablet:"Android.*\\b(A39|A37|A34|ST8|ST10|ST7|Smart Tab3|Smart Tab2)\\b",AllFineTablet:"Fine7 Genius|Fine7 Shine|Fine7 Air|Fine8 Style|Fine9 More|Fine10 Joy|Fine11 Wide",PROSCANTablet:"\\b(PEM63|PLT1023G|PLT1041|PLT1044|PLT1044G|PLT1091|PLT4311|PLT4311PL|PLT4315|PLT7030|PLT7033|PLT7033D|PLT7035|PLT7035D|PLT7044K|PLT7045K|PLT7045KB|PLT7071KG|PLT7072|PLT7223G|PLT7225G|PLT7777G|PLT7810K|PLT7849G|PLT7851G|PLT7852G|PLT8015|PLT8031|PLT8034|PLT8036|PLT8080K|PLT8082|PLT8088|PLT8223G|PLT8234G|PLT8235G|PLT8816K|PLT9011|PLT9045K|PLT9233G|PLT9735|PLT9760G|PLT9770G)\\b",YONESTablet:"BQ1078|BC1003|BC1077|RK9702|BC9730|BC9001|IT9001|BC7008|BC7010|BC708|BC728|BC7012|BC7030|BC7027|BC7026",ChangJiaTablet:"TPC7102|TPC7103|TPC7105|TPC7106|TPC7107|TPC7201|TPC7203|TPC7205|TPC7210|TPC7708|TPC7709|TPC7712|TPC7110|TPC8101|TPC8103|TPC8105|TPC8106|TPC8203|TPC8205|TPC8503|TPC9106|TPC9701|TPC97101|TPC97103|TPC97105|TPC97106|TPC97111|TPC97113|TPC97203|TPC97603|TPC97809|TPC97205|TPC10101|TPC10103|TPC10106|TPC10111|TPC10203|TPC10205|TPC10503",GUTablet:"TX-A1301|TX-M9002|Q702|kf026",PointOfViewTablet:"TAB-P506|TAB-navi-7-3G-M|TAB-P517|TAB-P-527|TAB-P701|TAB-P703|TAB-P721|TAB-P731N|TAB-P741|TAB-P825|TAB-P905|TAB-P925|TAB-PR945|TAB-PL1015|TAB-P1025|TAB-PI1045|TAB-P1325|TAB-PROTAB[0-9]+|TAB-PROTAB25|TAB-PROTAB26|TAB-PROTAB27|TAB-PROTAB26XL|TAB-PROTAB2-IPS9|TAB-PROTAB30-IPS9|TAB-PROTAB25XXL|TAB-PROTAB26-IPS10|TAB-PROTAB30-IPS10",OvermaxTablet:"OV-(SteelCore|NewBase|Basecore|Baseone|Exellen|Quattor|EduTab|Solution|ACTION|BasicTab|TeddyTab|MagicTab|Stream|TB-08|TB-09)|Qualcore 1027",HCLTablet:"HCL.*Tablet|Connect-3G-2.0|Connect-2G-2.0|ME Tablet U1|ME Tablet U2|ME Tablet G1|ME Tablet X1|ME Tablet Y2|ME Tablet Sync",DPSTablet:"DPS Dream 9|DPS Dual 7",VistureTablet:"V97 HD|i75 3G|Visture V4( HD)?|Visture V5( HD)?|Visture V10",CrestaTablet:"CTP(-)?810|CTP(-)?818|CTP(-)?828|CTP(-)?838|CTP(-)?888|CTP(-)?978|CTP(-)?980|CTP(-)?987|CTP(-)?988|CTP(-)?989",MediatekTablet:"\\bMT8125|MT8389|MT8135|MT8377\\b",ConcordeTablet:"Concorde([ ]+)?Tab|ConCorde ReadMan",GoCleverTablet:"GOCLEVER TAB|A7GOCLEVER|M1042|M7841|M742|R1042BK|R1041|TAB A975|TAB A7842|TAB A741|TAB A741L|TAB M723G|TAB M721|TAB A1021|TAB I921|TAB R721|TAB I720|TAB T76|TAB R70|TAB R76.2|TAB R106|TAB R83.2|TAB M813G|TAB I721|GCTA722|TAB I70|TAB I71|TAB S73|TAB R73|TAB R74|TAB R93|TAB R75|TAB R76.1|TAB A73|TAB A93|TAB A93.2|TAB T72|TAB R83|TAB R974|TAB R973|TAB A101|TAB A103|TAB A104|TAB A104.2|R105BK|M713G|A972BK|TAB A971|TAB R974.2|TAB R104|TAB R83.3|TAB A1042",ModecomTablet:"FreeTAB 9000|FreeTAB 7.4|FreeTAB 7004|FreeTAB 7800|FreeTAB 2096|FreeTAB 7.5|FreeTAB 1014|FreeTAB 1001 |FreeTAB 8001|FreeTAB 9706|FreeTAB 9702|FreeTAB 7003|FreeTAB 7002|FreeTAB 1002|FreeTAB 7801|FreeTAB 1331|FreeTAB 1004|FreeTAB 8002|FreeTAB 8014|FreeTAB 9704|FreeTAB 1003",VoninoTablet:"\\b(Argus[ _]?S|Diamond[ _]?79HD|Emerald[ _]?78E|Luna[ _]?70C|Onyx[ _]?S|Onyx[ _]?Z|Orin[ _]?HD|Orin[ _]?S|Otis[ _]?S|SpeedStar[ _]?S|Magnet[ _]?M9|Primus[ _]?94[ _]?3G|Primus[ _]?94HD|Primus[ _]?QS|Android.*\\bQ8\\b|Sirius[ _]?EVO[ _]?QS|Sirius[ _]?QS|Spirit[ _]?S)\\b",ECSTablet:"V07OT2|TM105A|S10OT1|TR10CS1",StorexTablet:"eZee[_']?(Tab|Go)[0-9]+|TabLC7|Looney Tunes Tab",VodafoneTablet:"SmartTab([ ]+)?[0-9]+|SmartTabII10|SmartTabII7|VF-1497|VFD 1400",EssentielBTablet:"Smart[ ']?TAB[ ]+?[0-9]+|Family[ ']?TAB2",RossMoorTablet:"RM-790|RM-997|RMD-878G|RMD-974R|RMT-705A|RMT-701|RME-601|RMT-501|RMT-711",iMobileTablet:"i-mobile i-note",TolinoTablet:"tolino tab [0-9.]+|tolino shine",AudioSonicTablet:"\\bC-22Q|T7-QC|T-17B|T-17P\\b",AMPETablet:"Android.* A78 ",SkkTablet:"Android.* (SKYPAD|PHOENIX|CYCLOPS)",TecnoTablet:"TECNO P9|TECNO DP8D",JXDTablet:"Android.* \\b(F3000|A3300|JXD5000|JXD3000|JXD2000|JXD300B|JXD300|S5800|S7800|S602b|S5110b|S7300|S5300|S602|S603|S5100|S5110|S601|S7100a|P3000F|P3000s|P101|P200s|P1000m|P200m|P9100|P1000s|S6600b|S908|P1000|P300|S18|S6600|S9100)\\b",iJoyTablet:"Tablet (Spirit 7|Essentia|Galatea|Fusion|Onix 7|Landa|Titan|Scooby|Deox|Stella|Themis|Argon|Unique 7|Sygnus|Hexen|Finity 7|Cream|Cream X2|Jade|Neon 7|Neron 7|Kandy|Scape|Saphyr 7|Rebel|Biox|Rebel|Rebel 8GB|Myst|Draco 7|Myst|Tab7-004|Myst|Tadeo Jones|Tablet Boing|Arrow|Draco Dual Cam|Aurix|Mint|Amity|Revolution|Finity 9|Neon 9|T9w|Amity 4GB Dual Cam|Stone 4GB|Stone 8GB|Andromeda|Silken|X2|Andromeda II|Halley|Flame|Saphyr 9,7|Touch 8|Planet|Triton|Unique 10|Hexen 10|Memphis 4GB|Memphis 8GB|Onix 10)",FX2Tablet:"FX2 PAD7|FX2 PAD10",XoroTablet:"KidsPAD 701|PAD[ ]?712|PAD[ ]?714|PAD[ ]?716|PAD[ ]?717|PAD[ ]?718|PAD[ ]?720|PAD[ ]?721|PAD[ ]?722|PAD[ ]?790|PAD[ ]?792|PAD[ ]?900|PAD[ ]?9715D|PAD[ ]?9716DR|PAD[ ]?9718DR|PAD[ ]?9719QR|PAD[ ]?9720QR|TelePAD1030|Telepad1032|TelePAD730|TelePAD731|TelePAD732|TelePAD735Q|TelePAD830|TelePAD9730|TelePAD795|MegaPAD 1331|MegaPAD 1851|MegaPAD 2151",ViewsonicTablet:"ViewPad 10pi|ViewPad 10e|ViewPad 10s|ViewPad E72|ViewPad7|ViewPad E100|ViewPad 7e|ViewSonic VB733|VB100a",VerizonTablet:"QTAQZ3|QTAIR7|QTAQTZ3|QTASUN1|QTASUN2|QTAXIA1",OdysTablet:"LOOX|XENO10|ODYS[ -](Space|EVO|Xpress|NOON)|\\bXELIO\\b|Xelio10Pro|XELIO7PHONETAB|XELIO10EXTREME|XELIOPT2|NEO_QUAD10",CaptivaTablet:"CAPTIVA PAD",IconbitTablet:"NetTAB|NT-3702|NT-3702S|NT-3702S|NT-3603P|NT-3603P|NT-0704S|NT-0704S|NT-3805C|NT-3805C|NT-0806C|NT-0806C|NT-0909T|NT-0909T|NT-0907S|NT-0907S|NT-0902S|NT-0902S",TeclastTablet:"T98 4G|\\bP80\\b|\\bX90HD\\b|X98 Air|X98 Air 3G|\\bX89\\b|P80 3G|\\bX80h\\b|P98 Air|\\bX89HD\\b|P98 3G|\\bP90HD\\b|P89 3G|X98 3G|\\bP70h\\b|P79HD 3G|G18d 3G|\\bP79HD\\b|\\bP89s\\b|\\bA88\\b|\\bP10HD\\b|\\bP19HD\\b|G18 3G|\\bP78HD\\b|\\bA78\\b|\\bP75\\b|G17s 3G|G17h 3G|\\bP85t\\b|\\bP90\\b|\\bP11\\b|\\bP98t\\b|\\bP98HD\\b|\\bG18d\\b|\\bP85s\\b|\\bP11HD\\b|\\bP88s\\b|\\bA80HD\\b|\\bA80se\\b|\\bA10h\\b|\\bP89\\b|\\bP78s\\b|\\bG18\\b|\\bP85\\b|\\bA70h\\b|\\bA70\\b|\\bG17\\b|\\bP18\\b|\\bA80s\\b|\\bA11s\\b|\\bP88HD\\b|\\bA80h\\b|\\bP76s\\b|\\bP76h\\b|\\bP98\\b|\\bA10HD\\b|\\bP78\\b|\\bP88\\b|\\bA11\\b|\\bA10t\\b|\\bP76a\\b|\\bP76t\\b|\\bP76e\\b|\\bP85HD\\b|\\bP85a\\b|\\bP86\\b|\\bP75HD\\b|\\bP76v\\b|\\bA12\\b|\\bP75a\\b|\\bA15\\b|\\bP76Ti\\b|\\bP81HD\\b|\\bA10\\b|\\bT760VE\\b|\\bT720HD\\b|\\bP76\\b|\\bP73\\b|\\bP71\\b|\\bP72\\b|\\bT720SE\\b|\\bC520Ti\\b|\\bT760\\b|\\bT720VE\\b|T720-3GE|T720-WiFi",OndaTablet:"\\b(V975i|Vi30|VX530|V701|Vi60|V701s|Vi50|V801s|V719|Vx610w|VX610W|V819i|Vi10|VX580W|Vi10|V711s|V813|V811|V820w|V820|Vi20|V711|VI30W|V712|V891w|V972|V819w|V820w|Vi60|V820w|V711|V813s|V801|V819|V975s|V801|V819|V819|V818|V811|V712|V975m|V101w|V961w|V812|V818|V971|V971s|V919|V989|V116w|V102w|V973|Vi40)\\b[\\s]+|V10 \\b4G\\b",JaytechTablet:"TPC-PA762",BlaupunktTablet:"Endeavour 800NG|Endeavour 1010",DigmaTablet:"\\b(iDx10|iDx9|iDx8|iDx7|iDxD7|iDxD8|iDsQ8|iDsQ7|iDsQ8|iDsD10|iDnD7|3TS804H|iDsQ11|iDj7|iDs10)\\b",EvolioTablet:"ARIA_Mini_wifi|Aria[ _]Mini|Evolio X10|Evolio X7|Evolio X8|\\bEvotab\\b|\\bNeura\\b",LavaTablet:"QPAD E704|\\bIvoryS\\b|E-TAB IVORY|\\bE-TAB\\b",AocTablet:"MW0811|MW0812|MW0922|MTK8382|MW1031|MW0831|MW0821|MW0931|MW0712",MpmanTablet:"MP11 OCTA|MP10 OCTA|MPQC1114|MPQC1004|MPQC994|MPQC974|MPQC973|MPQC804|MPQC784|MPQC780|\\bMPG7\\b|MPDCG75|MPDCG71|MPDC1006|MP101DC|MPDC9000|MPDC905|MPDC706HD|MPDC706|MPDC705|MPDC110|MPDC100|MPDC99|MPDC97|MPDC88|MPDC8|MPDC77|MP709|MID701|MID711|MID170|MPDC703|MPQC1010",CelkonTablet:"CT695|CT888|CT[\\s]?910|CT7 Tab|CT9 Tab|CT3 Tab|CT2 Tab|CT1 Tab|C820|C720|\\bCT-1\\b",WolderTablet:"miTab \\b(DIAMOND|SPACE|BROOKLYN|NEO|FLY|MANHATTAN|FUNK|EVOLUTION|SKY|GOCAR|IRON|GENIUS|POP|MINT|EPSILON|BROADWAY|JUMP|HOP|LEGEND|NEW AGE|LINE|ADVANCE|FEEL|FOLLOW|LIKE|LINK|LIVE|THINK|FREEDOM|CHICAGO|CLEVELAND|BALTIMORE-GH|IOWA|BOSTON|SEATTLE|PHOENIX|DALLAS|IN 101|MasterChef)\\b",MediacomTablet:"M-MPI10C3G|M-SP10EG|M-SP10EGP|M-SP10HXAH|M-SP7HXAH|M-SP10HXBH|M-SP8HXAH|M-SP8MXA",MiTablet:"\\bMI PAD\\b|\\bHM NOTE 1W\\b",NibiruTablet:"Nibiru M1|Nibiru Jupiter One",NexoTablet:"NEXO NOVA|NEXO 10|NEXO AVIO|NEXO FREE|NEXO GO|NEXO EVO|NEXO 3G|NEXO SMART|NEXO KIDDO|NEXO MOBI",LeaderTablet:"TBLT10Q|TBLT10I|TBL-10WDKB|TBL-10WDKBO2013|TBL-W230V2|TBL-W450|TBL-W500|SV572|TBLT7I|TBA-AC7-8G|TBLT79|TBL-8W16|TBL-10W32|TBL-10WKB|TBL-W100",UbislateTablet:"UbiSlate[\\s]?7C",PocketBookTablet:"Pocketbook",KocasoTablet:"\\b(TB-1207)\\b",HisenseTablet:"\\b(F5281|E2371)\\b",Hudl:"Hudl HT7S3|Hudl 2",TelstraTablet:"T-Hub2",GenericTablet:"Android.*\\b97D\\b|Tablet(?!.*PC)|BNTV250A|MID-WCDMA|LogicPD Zoom2|\\bA7EB\\b|CatNova8|A1_07|CT704|CT1002|\\bM721\\b|rk30sdk|\\bEVOTAB\\b|M758A|ET904|ALUMIUM10|Smartfren Tab|Endeavour 1010|Tablet-PC-4|Tagi Tab|\\bM6pro\\b|CT1020W|arc 10HD|\\bTP750\\b|\\bQTAQZ3\\b|WVT101|TM1088|KT107"},oss:{AndroidOS:"Android",BlackBerryOS:"blackberry|\\bBB10\\b|rim tablet os",PalmOS:"PalmOS|avantgo|blazer|elaine|hiptop|palm|plucker|xiino",SymbianOS:"Symbian|SymbOS|Series60|Series40|SYB-[0-9]+|\\bS60\\b",WindowsMobileOS:"Windows CE.*(PPC|Smartphone|Mobile|[0-9]{3}x[0-9]{3})|Windows Mobile|Windows Phone [0-9.]+|WCE;",WindowsPhoneOS:"Windows Phone 10.0|Windows Phone 8.1|Windows Phone 8.0|Windows Phone OS|XBLWP7|ZuneWP7|Windows NT 6.[23]; ARM;",iOS:"\\biPhone.*Mobile|\\biPod|\\biPad|AppleCoreMedia",iPadOS:"CPU OS 13",MeeGoOS:"MeeGo",MaemoOS:"Maemo",JavaOS:"J2ME/|\\bMIDP\\b|\\bCLDC\\b",webOS:"webOS|hpwOS",badaOS:"\\bBada\\b",BREWOS:"BREW"},uas:{Chrome:"\\bCrMo\\b|CriOS|Android.*Chrome/[.0-9]* (Mobile)?",Dolfin:"\\bDolfin\\b",Opera:"Opera.*Mini|Opera.*Mobi|Android.*Opera|Mobile.*OPR/[0-9.]+$|Coast/[0-9.]+",Skyfire:"Skyfire",Edge:"Mobile Safari/[.0-9]* Edge",IE:"IEMobile|MSIEMobile",Firefox:"fennec|firefox.*maemo|(Mobile|Tablet).*Firefox|Firefox.*Mobile|FxiOS",Bolt:"bolt",TeaShark:"teashark",Blazer:"Blazer",Safari:"Version.*Mobile.*Safari|Safari.*Mobile|MobileSafari",WeChat:"\\bMicroMessenger\\b",UCBrowser:"UC.*Browser|UCWEB",baiduboxapp:"baiduboxapp",baidubrowser:"baidubrowser",DiigoBrowser:"DiigoBrowser",Mercury:"\\bMercury\\b",ObigoBrowser:"Obigo",NetFront:"NF-Browser",GenericBrowser:"NokiaBrowser|OviBrowser|OneBrowser|TwonkyBeamBrowser|SEMC.*Browser|FlyFlow|Minimo|NetFront|Novarra-Vision|MQQBrowser|MicroMessenger",PaleMoon:"Android.*PaleMoon|Mobile.*PaleMoon"},props:{Mobile:"Mobile/[VER]",Build:"Build/[VER]",Version:"Version/[VER]",VendorID:"VendorID/[VER]",iPad:"iPad.*CPU[a-z ]+[VER]",iPhone:"iPhone.*CPU[a-z ]+[VER]",iPod:"iPod.*CPU[a-z ]+[VER]",Kindle:"Kindle/[VER]",Chrome:["Chrome/[VER]","CriOS/[VER]","CrMo/[VER]"],Coast:["Coast/[VER]"],Dolfin:"Dolfin/[VER]",Firefox:["Firefox/[VER]","FxiOS/[VER]"],Fennec:"Fennec/[VER]",Edge:"Edge/[VER]",IE:["IEMobile/[VER];","IEMobile [VER]","MSIE [VER];","Trident/[0-9.]+;.*rv:[VER]"],NetFront:"NetFront/[VER]",NokiaBrowser:"NokiaBrowser/[VER]",Opera:[" OPR/[VER]","Opera Mini/[VER]","Version/[VER]"],"Opera Mini":"Opera Mini/[VER]","Opera Mobi":"Version/[VER]",UCBrowser:["UCWEB[VER]","UC.*Browser/[VER]"],MQQBrowser:"MQQBrowser/[VER]",MicroMessenger:"MicroMessenger/[VER]",baiduboxapp:"baiduboxapp/[VER]",baidubrowser:"baidubrowser/[VER]",SamsungBrowser:"SamsungBrowser/[VER]",Iron:"Iron/[VER]",Safari:["Version/[VER]","Safari/[VER]"],Skyfire:"Skyfire/[VER]",Tizen:"Tizen/[VER]",Webkit:"webkit[ /][VER]",PaleMoon:"PaleMoon/[VER]",Gecko:"Gecko/[VER]",Trident:"Trident/[VER]",Presto:"Presto/[VER]",Goanna:"Goanna/[VER]",iOS:" \\bi?OS\\b [VER][ ;]{1}",Android:"Android [VER]",BlackBerry:["BlackBerry[\\w]+/[VER]","BlackBerry.*Version/[VER]","Version/[VER]"],BREW:"BREW [VER]",Java:"Java/[VER]","Windows Phone OS":["Windows Phone OS [VER]","Windows Phone [VER]"],"Windows Phone":"Windows Phone [VER]","Windows CE":"Windows CE/[VER]","Windows NT":"Windows NT [VER]",Symbian:["SymbianOS/[VER]","Symbian/[VER]"],webOS:["webOS/[VER]","hpwOS/[VER];"]},utils:{Bot:"Googlebot|facebookexternalhit|Google-AMPHTML|s~amp-validator|AdsBot-Google|Google Keyword Suggestion|Facebot|YandexBot|YandexMobileBot|bingbot|ia_archiver|AhrefsBot|Ezooms|GSLFbot|WBSearchBot|Twitterbot|TweetmemeBot|Twikle|PaperLiBot|Wotbox|UnwindFetchor|Exabot|MJ12bot|YandexImages|TurnitinBot|Pingdom|contentkingapp",MobileBot:"Googlebot-Mobile|AdsBot-Google-Mobile|YahooSeeker/M1A1-R2D2",DesktopMode:"WPDesktop",TV:"SonyDTV|HbbTV",WebKit:"(webkit)[ /]([\\w.]+)",Console:"\\b(Nintendo|Nintendo WiiU|Nintendo 3DS|Nintendo Switch|PLAYSTATION|Xbox)\\b",Watch:"SM-V700"}},detectMobileBrowsers:{fullPattern:/(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows ce|xda|xiino/i,shortPattern:/1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\-|your|zeto|zte\-/i,tabletPattern:/android|ipad|playbook|silk/i}},o=Object.prototype.hasOwnProperty;function r(e,t){return null!=e&&null!=t&&e.toLowerCase()===t.toLowerCase()}function i(e,t){var n,o,r=e.length;if(!r||!t)return!1;for(n=t.toLowerCase(),o=0;o<r;++o)if(n===e[o].toLowerCase())return!0;return!1}function s(e){for(var t in e)o.call(e,t)&&(e[t]=new RegExp(e[t],"i"))}function a(e,t){this.ua=function(e){return(e||"").substr(0,500)}(e),this._cache={},this.maxPhoneWidth=t||600}return n.FALLBACK_PHONE="UnknownPhone",n.FALLBACK_TABLET="UnknownTablet",n.FALLBACK_MOBILE="UnknownMobile",e="isArray"in Array?Array.isArray:function(e){return"[object Array]"===Object.prototype.toString.call(e)},function(){var t,r,i,a,l,d,c=n.mobileDetectRules;for(t in c.props)if(o.call(c.props,t)){for(r=c.props[t],e(r)||(r=[r]),l=r.length,a=0;a<l;++a)(d=(i=r[a]).indexOf("[VER]"))>=0&&(i=i.substring(0,d)+"([\\w._\\+]+)"+i.substring(d+5)),r[a]=new RegExp(i,"i");c.props[t]=r}s(c.oss),s(c.phones),s(c.tablets),s(c.uas),s(c.utils),c.oss0={WindowsPhoneOS:c.oss.WindowsPhoneOS,WindowsMobileOS:c.oss.WindowsMobileOS}}(),n.findMatch=function(e,t){for(var n in e)if(o.call(e,n)&&e[n].test(t))return n;return null},n.findMatches=function(e,t){var n=[];for(var r in e)o.call(e,r)&&e[r].test(t)&&n.push(r);return n},n.getVersionStr=function(e,t){var r,i,s,a,l=n.mobileDetectRules.props;if(o.call(l,e))for(s=(r=l[e]).length,i=0;i<s;++i)if(null!==(a=r[i].exec(t)))return a[1];return null},n.getVersion=function(e,t){var o=n.getVersionStr(e,t);return o?n.prepareVersionNo(o):NaN},n.prepareVersionNo=function(e){var t;return 1===(t=e.split(/[a-z._ \/\-]/i)).length&&(e=t[0]),t.length>1&&(e=t[0]+".",t.shift(),e+=t.join("")),Number(e)},n.isMobileFallback=function(e){return n.detectMobileBrowsers.fullPattern.test(e)||n.detectMobileBrowsers.shortPattern.test(e.substr(0,4))},n.isTabletFallback=function(e){return n.detectMobileBrowsers.tabletPattern.test(e)},n.prepareDetectionCache=function(e,o,r){if(e.mobile===t){var i,s,l;if(s=n.findMatch(n.mobileDetectRules.tablets,o))return e.mobile=e.tablet=s,void(e.phone=null);if(i=n.findMatch(n.mobileDetectRules.phones,o))return e.mobile=e.phone=i,void(e.tablet=null);n.isMobileFallback(o)?(l=a.isPhoneSized(r))===t?(e.mobile=n.FALLBACK_MOBILE,e.tablet=e.phone=null):l?(e.mobile=e.phone=n.FALLBACK_PHONE,e.tablet=null):(e.mobile=e.tablet=n.FALLBACK_TABLET,e.phone=null):n.isTabletFallback(o)?(e.mobile=e.tablet=n.FALLBACK_TABLET,e.phone=null):e.mobile=e.tablet=e.phone=null}},n.mobileGrade=function(e){var t=null!==e.mobile();return e.os("iOS")&&e.version("iPad")>=4.3||e.os("iOS")&&e.version("iPhone")>=3.1||e.os("iOS")&&e.version("iPod")>=3.1||e.version("Android")>2.1&&e.is("Webkit")||e.version("Windows Phone OS")>=7||e.is("BlackBerry")&&e.version("BlackBerry")>=6||e.match("Playbook.*Tablet")||e.version("webOS")>=1.4&&e.match("Palm|Pre|Pixi")||e.match("hp.*TouchPad")||e.is("Firefox")&&e.version("Firefox")>=12||e.is("Chrome")&&e.is("AndroidOS")&&e.version("Android")>=4||e.is("Skyfire")&&e.version("Skyfire")>=4.1&&e.is("AndroidOS")&&e.version("Android")>=2.3||e.is("Opera")&&e.version("Opera Mobi")>11&&e.is("AndroidOS")||e.is("MeeGoOS")||e.is("Tizen")||e.is("Dolfin")&&e.version("Bada")>=2||(e.is("UC Browser")||e.is("Dolfin"))&&e.version("Android")>=2.3||e.match("Kindle Fire")||e.is("Kindle")&&e.version("Kindle")>=3||e.is("AndroidOS")&&e.is("NookTablet")||e.version("Chrome")>=11&&!t||e.version("Safari")>=5&&!t||e.version("Firefox")>=4&&!t||e.version("MSIE")>=7&&!t||e.version("Opera")>=10&&!t?"A":e.os("iOS")&&e.version("iPad")<4.3||e.os("iOS")&&e.version("iPhone")<3.1||e.os("iOS")&&e.version("iPod")<3.1||e.is("Blackberry")&&e.version("BlackBerry")>=5&&e.version("BlackBerry")<6||e.version("Opera Mini")>=5&&e.version("Opera Mini")<=6.5&&(e.version("Android")>=2.3||e.is("iOS"))||e.match("NokiaN8|NokiaC7|N97.*Series60|Symbian/3")||e.version("Opera Mobi")>=11&&e.is("SymbianOS")?"B":(e.version("BlackBerry")<5||e.match("MSIEMobile|Windows CE.*Mobile")||e.version("Windows Mobile"),"C")},n.detectOS=function(e){return n.findMatch(n.mobileDetectRules.oss0,e)||n.findMatch(n.mobileDetectRules.oss,e)},n.getDeviceSmallerSide=function(){return window.screen.width<window.screen.height?window.screen.width:window.screen.height},a.prototype={constructor:a,mobile:function(){return n.prepareDetectionCache(this._cache,this.ua,this.maxPhoneWidth),this._cache.mobile},phone:function(){return n.prepareDetectionCache(this._cache,this.ua,this.maxPhoneWidth),this._cache.phone},tablet:function(){return n.prepareDetectionCache(this._cache,this.ua,this.maxPhoneWidth),this._cache.tablet},userAgent:function(){return this._cache.userAgent===t&&(this._cache.userAgent=n.findMatch(n.mobileDetectRules.uas,this.ua)),this._cache.userAgent},userAgents:function(){return this._cache.userAgents===t&&(this._cache.userAgents=n.findMatches(n.mobileDetectRules.uas,this.ua)),this._cache.userAgents},os:function(){return this._cache.os===t&&(this._cache.os=n.detectOS(this.ua)),this._cache.os},version:function(e){return n.getVersion(e,this.ua)},versionStr:function(e){return n.getVersionStr(e,this.ua)},is:function(e){return i(this.userAgents(),e)||r(e,this.os())||r(e,this.phone())||r(e,this.tablet())||i(n.findMatches(n.mobileDetectRules.utils,this.ua),e)},match:function(e){return e instanceof RegExp||(e=new RegExp(e,"i")),e.test(this.ua)},isPhoneSized:function(e){return a.isPhoneSized(e||this.maxPhoneWidth)},mobileGrade:function(){return this._cache.grade===t&&(this._cache.grade=n.mobileGrade(this)),this._cache.grade}},"undefined"!=typeof window&&window.screen?a.isPhoneSized=function(e){return e<0?t:n.getDeviceSmallerSide()<=e}:a.isPhoneSized=function(){},a._impl=n,a.version="1.4.4 2019-09-21",a}))}(e.exports?function(t){e.exports=t()}:n.amdD)},5822:function(e,t,n){(e=n.nmd(e)).exports=function(){"use strict";var t,n;function o(){return t.apply(null,arguments)}function r(e){t=e}function i(e){return e instanceof Array||"[object Array]"===Object.prototype.toString.call(e)}function s(e){return null!=e&&"[object Object]"===Object.prototype.toString.call(e)}function a(e,t){return Object.prototype.hasOwnProperty.call(e,t)}function l(e){if(Object.getOwnPropertyNames)return 0===Object.getOwnPropertyNames(e).length;var t;for(t in e)if(a(e,t))return!1;return!0}function d(e){return void 0===e}function c(e){return"number"==typeof e||"[object Number]"===Object.prototype.toString.call(e)}function m(e){return e instanceof Date||"[object Date]"===Object.prototype.toString.call(e)}function u(e,t){var n,o=[];for(n=0;n<e.length;++n)o.push(t(e[n],n));return o}function p(e,t){for(var n in t)a(t,n)&&(e[n]=t[n]);return a(t,"toString")&&(e.toString=t.toString),a(t,"valueOf")&&(e.valueOf=t.valueOf),e}function g(e,t,n,o){return Un(e,t,n,o,!0).utc()}function h(){return{empty:!1,unusedTokens:[],unusedInput:[],overflow:-2,charsLeftOver:0,nullInput:!1,invalidEra:null,invalidMonth:null,invalidFormat:!1,userInvalidated:!1,iso:!1,parsedDateParts:[],era:null,meridiem:null,rfc2822:!1,weekdayMismatch:!1}}function f(e){return null==e._pf&&(e._pf=h()),e._pf}function x(e){if(null==e._isValid){var t=f(e),o=n.call(t.parsedDateParts,(function(e){return null!=e})),r=!isNaN(e._d.getTime())&&t.overflow<0&&!t.empty&&!t.invalidEra&&!t.invalidMonth&&!t.invalidWeekday&&!t.weekdayMismatch&&!t.nullInput&&!t.invalidFormat&&!t.userInvalidated&&(!t.meridiem||t.meridiem&&o);if(e._strict&&(r=r&&0===t.charsLeftOver&&0===t.unusedTokens.length&&void 0===t.bigHour),null!=Object.isFrozen&&Object.isFrozen(e))return r;e._isValid=r}return e._isValid}function y(e){var t=g(NaN);return null!=e?p(f(t),e):f(t).userInvalidated=!0,t}n=Array.prototype.some?Array.prototype.some:function(e){var t,n=Object(this),o=n.length>>>0;for(t=0;t<o;t++)if(t in n&&e.call(this,n[t],t,n))return!0;return!1};var b=o.momentProperties=[],T=!1;function v(e,t){var n,o,r;if(d(t._isAMomentObject)||(e._isAMomentObject=t._isAMomentObject),d(t._i)||(e._i=t._i),d(t._f)||(e._f=t._f),d(t._l)||(e._l=t._l),d(t._strict)||(e._strict=t._strict),d(t._tzm)||(e._tzm=t._tzm),d(t._isUTC)||(e._isUTC=t._isUTC),d(t._offset)||(e._offset=t._offset),d(t._pf)||(e._pf=f(t)),d(t._locale)||(e._locale=t._locale),b.length>0)for(n=0;n<b.length;n++)d(r=t[o=b[n]])||(e[o]=r);return e}function S(e){v(this,e),this._d=new Date(null!=e._d?e._d.getTime():NaN),this.isValid()||(this._d=new Date(NaN)),!1===T&&(T=!0,o.updateOffset(this),T=!1)}function k(e){return e instanceof S||null!=e&&null!=e._isAMomentObject}function $(e){!1===o.suppressDeprecationWarnings&&"undefined"!=typeof console&&console.warn&&console.warn("Deprecation warning: "+e)}function w(e,t){var n=!0;return p((function(){if(null!=o.deprecationHandler&&o.deprecationHandler(null,e),n){var r,i,s,l=[];for(i=0;i<arguments.length;i++){if(r="","object"==typeof arguments[i]){for(s in r+="\n["+i+"] ",arguments[0])a(arguments[0],s)&&(r+=s+": "+arguments[0][s]+", ");r=r.slice(0,-2)}else r=arguments[i];l.push(r)}$(e+"\nArguments: "+Array.prototype.slice.call(l).join("")+"\n"+(new Error).stack),n=!1}return t.apply(this,arguments)}),t)}var M,P={};function C(e,t){null!=o.deprecationHandler&&o.deprecationHandler(e,t),P[e]||($(t),P[e]=!0)}function A(e){return"undefined"!=typeof Function&&e instanceof Function||"[object Function]"===Object.prototype.toString.call(e)}function D(e){var t,n;for(n in e)a(e,n)&&(A(t=e[n])?this[n]=t:this["_"+n]=t);this._config=e,this._dayOfMonthOrdinalParseLenient=new RegExp((this._dayOfMonthOrdinalParse.source||this._ordinalParse.source)+"|"+/\d{1,2}/.source)}function G(e,t){var n,o=p({},e);for(n in t)a(t,n)&&(s(e[n])&&s(t[n])?(o[n]={},p(o[n],e[n]),p(o[n],t[n])):null!=t[n]?o[n]=t[n]:delete o[n]);for(n in e)a(e,n)&&!a(t,n)&&s(e[n])&&(o[n]=p({},o[n]));return o}function _(e){null!=e&&this.set(e)}o.suppressDeprecationWarnings=!1,o.deprecationHandler=null,M=Object.keys?Object.keys:function(e){var t,n=[];for(t in e)a(e,t)&&n.push(t);return n};var E={sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"};function H(e,t,n){var o=this._calendar[e]||this._calendar.sameElse;return A(o)?o.call(t,n):o}function I(e,t,n){var o=""+Math.abs(e),r=t-o.length;return(e>=0?n?"+":"":"-")+Math.pow(10,Math.max(0,r)).toString().substr(1)+o}var N=/(\[[^\[]*\])|(\\)?([Hh]mm(ss)?|Mo|MM?M?M?|Do|DDDo|DD?D?D?|ddd?d?|do?|w[o|w]?|W[o|W]?|Qo?|N{1,5}|YYYYYY|YYYYY|YYYY|YY|y{2,4}|yo?|gg(ggg?)?|GG(GGG?)?|e|E|a|A|hh?|HH?|kk?|mm?|ss?|S{1,9}|x|X|zz?|ZZ?|.)/g,B=/(\[[^\[]*\])|(\\)?(LTS|LT|LL?L?L?|l{1,4})/g,O={},V={};function R(e,t,n,o){var r=o;"string"==typeof o&&(r=function(){return this[o]()}),e&&(V[e]=r),t&&(V[t[0]]=function(){return I(r.apply(this,arguments),t[1],t[2])}),n&&(V[n]=function(){return this.localeData().ordinal(r.apply(this,arguments),e)})}function L(e){return e.match(/\[[\s\S]/)?e.replace(/^\[|\]$/g,""):e.replace(/\\/g,"")}function F(e){var t,n,o=e.match(N);for(t=0,n=o.length;t<n;t++)V[o[t]]?o[t]=V[o[t]]:o[t]=L(o[t]);return function(t){var r,i="";for(r=0;r<n;r++)i+=A(o[r])?o[r].call(t,e):o[r];return i}}function W(e,t){return e.isValid()?(t=Y(t,e.localeData()),O[t]=O[t]||F(t),O[t](e)):e.localeData().invalidDate()}function Y(e,t){var n=5;function o(e){return t.longDateFormat(e)||e}for(B.lastIndex=0;n>=0&&B.test(e);)e=e.replace(B,o),B.lastIndex=0,n-=1;return e}var K={LTS:"h:mm:ss A",LT:"h:mm A",L:"MM/DD/YYYY",LL:"MMMM D, YYYY",LLL:"MMMM D, YYYY h:mm A",LLLL:"dddd, MMMM D, YYYY h:mm A"};function j(e){var t=this._longDateFormat[e],n=this._longDateFormat[e.toUpperCase()];return t||!n?t:(this._longDateFormat[e]=n.match(N).map((function(e){return"MMMM"===e||"MM"===e||"DD"===e||"dddd"===e?e.slice(1):e})).join(""),this._longDateFormat[e])}var U="Invalid date";function X(){return this._invalidDate}var z="%d",J=/\d{1,2}/;function q(e){return this._ordinal.replace("%d",e)}var Z={future:"in %s",past:"%s ago",s:"a few seconds",ss:"%d seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",w:"a week",ww:"%d weeks",M:"a month",MM:"%d months",y:"a year",yy:"%d years"};function Q(e,t,n,o){var r=this._relativeTime[n];return A(r)?r(e,t,n,o):r.replace(/%d/i,e)}function ee(e,t){var n=this._relativeTime[e>0?"future":"past"];return A(n)?n(t):n.replace(/%s/i,t)}var te={};function ne(e,t){var n=e.toLowerCase();te[n]=te[n+"s"]=te[t]=e}function oe(e){return"string"==typeof e?te[e]||te[e.toLowerCase()]:void 0}function re(e){var t,n,o={};for(n in e)a(e,n)&&(t=oe(n))&&(o[t]=e[n]);return o}var ie={};function se(e,t){ie[e]=t}function ae(e){var t,n=[];for(t in e)a(e,t)&&n.push({unit:t,priority:ie[t]});return n.sort((function(e,t){return e.priority-t.priority})),n}function le(e){return e%4==0&&e%100!=0||e%400==0}function de(e){return e<0?Math.ceil(e)||0:Math.floor(e)}function ce(e){var t=+e,n=0;return 0!==t&&isFinite(t)&&(n=de(t)),n}function me(e,t){return function(n){return null!=n?(pe(this,e,n),o.updateOffset(this,t),this):ue(this,e)}}function ue(e,t){return e.isValid()?e._d["get"+(e._isUTC?"UTC":"")+t]():NaN}function pe(e,t,n){e.isValid()&&!isNaN(n)&&("FullYear"===t&&le(e.year())&&1===e.month()&&29===e.date()?(n=ce(n),e._d["set"+(e._isUTC?"UTC":"")+t](n,e.month(),Qe(n,e.month()))):e._d["set"+(e._isUTC?"UTC":"")+t](n))}function ge(e){return A(this[e=oe(e)])?this[e]():this}function he(e,t){if("object"==typeof e){var n,o=ae(e=re(e));for(n=0;n<o.length;n++)this[o[n].unit](e[o[n].unit])}else if(A(this[e=oe(e)]))return this[e](t);return this}var fe,xe=/\d/,ye=/\d\d/,be=/\d{3}/,Te=/\d{4}/,ve=/[+-]?\d{6}/,Se=/\d\d?/,ke=/\d\d\d\d?/,$e=/\d\d\d\d\d\d?/,we=/\d{1,3}/,Me=/\d{1,4}/,Pe=/[+-]?\d{1,6}/,Ce=/\d+/,Ae=/[+-]?\d+/,De=/Z|[+-]\d\d:?\d\d/gi,Ge=/Z|[+-]\d\d(?::?\d\d)?/gi,_e=/[+-]?\d+(\.\d{1,3})?/,Ee=/[0-9]{0,256}['a-z\u00A0-\u05FF\u0700-\uD7FF\uF900-\uFDCF\uFDF0-\uFF07\uFF10-\uFFEF]{1,256}|[\u0600-\u06FF\/]{1,256}(\s*?[\u0600-\u06FF]{1,256}){1,2}/i;function He(e,t,n){fe[e]=A(t)?t:function(e,o){return e&&n?n:t}}function Ie(e,t){return a(fe,e)?fe[e](t._strict,t._locale):new RegExp(Ne(e))}function Ne(e){return Be(e.replace("\\","").replace(/\\(\[)|\\(\])|\[([^\]\[]*)\]|\\(.)/g,(function(e,t,n,o,r){return t||n||o||r})))}function Be(e){return e.replace(/[-\/\\^$*+?.()|[\]{}]/g,"\\$&")}fe={};var Oe={};function Ve(e,t){var n,o=t;for("string"==typeof e&&(e=[e]),c(t)&&(o=function(e,n){n[t]=ce(e)}),n=0;n<e.length;n++)Oe[e[n]]=o}function Re(e,t){Ve(e,(function(e,n,o,r){o._w=o._w||{},t(e,o._w,o,r)}))}function Le(e,t,n){null!=t&&a(Oe,e)&&Oe[e](t,n._a,n,e)}var Fe,We=0,Ye=1,Ke=2,je=3,Ue=4,Xe=5,ze=6,Je=7,qe=8;function Ze(e,t){return(e%t+t)%t}function Qe(e,t){if(isNaN(e)||isNaN(t))return NaN;var n=Ze(t,12);return e+=(t-n)/12,1===n?le(e)?29:28:31-n%7%2}Fe=Array.prototype.indexOf?Array.prototype.indexOf:function(e){var t;for(t=0;t<this.length;++t)if(this[t]===e)return t;return-1},R("M",["MM",2],"Mo",(function(){return this.month()+1})),R("MMM",0,0,(function(e){return this.localeData().monthsShort(this,e)})),R("MMMM",0,0,(function(e){return this.localeData().months(this,e)})),ne("month","M"),se("month",8),He("M",Se),He("MM",Se,ye),He("MMM",(function(e,t){return t.monthsShortRegex(e)})),He("MMMM",(function(e,t){return t.monthsRegex(e)})),Ve(["M","MM"],(function(e,t){t[Ye]=ce(e)-1})),Ve(["MMM","MMMM"],(function(e,t,n,o){var r=n._locale.monthsParse(e,o,n._strict);null!=r?t[Ye]=r:f(n).invalidMonth=e}));var et="January_February_March_April_May_June_July_August_September_October_November_December".split("_"),tt="Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),nt=/D[oD]?(\[[^\[\]]*\]|\s)+MMMM?/,ot=Ee,rt=Ee;function it(e,t){return e?i(this._months)?this._months[e.month()]:this._months[(this._months.isFormat||nt).test(t)?"format":"standalone"][e.month()]:i(this._months)?this._months:this._months.standalone}function st(e,t){return e?i(this._monthsShort)?this._monthsShort[e.month()]:this._monthsShort[nt.test(t)?"format":"standalone"][e.month()]:i(this._monthsShort)?this._monthsShort:this._monthsShort.standalone}function at(e,t,n){var o,r,i,s=e.toLocaleLowerCase();if(!this._monthsParse)for(this._monthsParse=[],this._longMonthsParse=[],this._shortMonthsParse=[],o=0;o<12;++o)i=g([2e3,o]),this._shortMonthsParse[o]=this.monthsShort(i,"").toLocaleLowerCase(),this._longMonthsParse[o]=this.months(i,"").toLocaleLowerCase();return n?"MMM"===t?-1!==(r=Fe.call(this._shortMonthsParse,s))?r:null:-1!==(r=Fe.call(this._longMonthsParse,s))?r:null:"MMM"===t?-1!==(r=Fe.call(this._shortMonthsParse,s))||-1!==(r=Fe.call(this._longMonthsParse,s))?r:null:-1!==(r=Fe.call(this._longMonthsParse,s))||-1!==(r=Fe.call(this._shortMonthsParse,s))?r:null}function lt(e,t,n){var o,r,i;if(this._monthsParseExact)return at.call(this,e,t,n);for(this._monthsParse||(this._monthsParse=[],this._longMonthsParse=[],this._shortMonthsParse=[]),o=0;o<12;o++){if(r=g([2e3,o]),n&&!this._longMonthsParse[o]&&(this._longMonthsParse[o]=new RegExp("^"+this.months(r,"").replace(".","")+"$","i"),this._shortMonthsParse[o]=new RegExp("^"+this.monthsShort(r,"").replace(".","")+"$","i")),n||this._monthsParse[o]||(i="^"+this.months(r,"")+"|^"+this.monthsShort(r,""),this._monthsParse[o]=new RegExp(i.replace(".",""),"i")),n&&"MMMM"===t&&this._longMonthsParse[o].test(e))return o;if(n&&"MMM"===t&&this._shortMonthsParse[o].test(e))return o;if(!n&&this._monthsParse[o].test(e))return o}}function dt(e,t){var n;if(!e.isValid())return e;if("string"==typeof t)if(/^\d+$/.test(t))t=ce(t);else if(!c(t=e.localeData().monthsParse(t)))return e;return n=Math.min(e.date(),Qe(e.year(),t)),e._d["set"+(e._isUTC?"UTC":"")+"Month"](t,n),e}function ct(e){return null!=e?(dt(this,e),o.updateOffset(this,!0),this):ue(this,"Month")}function mt(){return Qe(this.year(),this.month())}function ut(e){return this._monthsParseExact?(a(this,"_monthsRegex")||gt.call(this),e?this._monthsShortStrictRegex:this._monthsShortRegex):(a(this,"_monthsShortRegex")||(this._monthsShortRegex=ot),this._monthsShortStrictRegex&&e?this._monthsShortStrictRegex:this._monthsShortRegex)}function pt(e){return this._monthsParseExact?(a(this,"_monthsRegex")||gt.call(this),e?this._monthsStrictRegex:this._monthsRegex):(a(this,"_monthsRegex")||(this._monthsRegex=rt),this._monthsStrictRegex&&e?this._monthsStrictRegex:this._monthsRegex)}function gt(){function e(e,t){return t.length-e.length}var t,n,o=[],r=[],i=[];for(t=0;t<12;t++)n=g([2e3,t]),o.push(this.monthsShort(n,"")),r.push(this.months(n,"")),i.push(this.months(n,"")),i.push(this.monthsShort(n,""));for(o.sort(e),r.sort(e),i.sort(e),t=0;t<12;t++)o[t]=Be(o[t]),r[t]=Be(r[t]);for(t=0;t<24;t++)i[t]=Be(i[t]);this._monthsRegex=new RegExp("^("+i.join("|")+")","i"),this._monthsShortRegex=this._monthsRegex,this._monthsStrictRegex=new RegExp("^("+r.join("|")+")","i"),this._monthsShortStrictRegex=new RegExp("^("+o.join("|")+")","i")}function ht(e){return le(e)?366:365}R("Y",0,0,(function(){var e=this.year();return e<=9999?I(e,4):"+"+e})),R(0,["YY",2],0,(function(){return this.year()%100})),R(0,["YYYY",4],0,"year"),R(0,["YYYYY",5],0,"year"),R(0,["YYYYYY",6,!0],0,"year"),ne("year","y"),se("year",1),He("Y",Ae),He("YY",Se,ye),He("YYYY",Me,Te),He("YYYYY",Pe,ve),He("YYYYYY",Pe,ve),Ve(["YYYYY","YYYYYY"],We),Ve("YYYY",(function(e,t){t[We]=2===e.length?o.parseTwoDigitYear(e):ce(e)})),Ve("YY",(function(e,t){t[We]=o.parseTwoDigitYear(e)})),Ve("Y",(function(e,t){t[We]=parseInt(e,10)})),o.parseTwoDigitYear=function(e){return ce(e)+(ce(e)>68?1900:2e3)};var ft=me("FullYear",!0);function xt(){return le(this.year())}function yt(e,t,n,o,r,i,s){var a;return e<100&&e>=0?(a=new Date(e+400,t,n,o,r,i,s),isFinite(a.getFullYear())&&a.setFullYear(e)):a=new Date(e,t,n,o,r,i,s),a}function bt(e){var t,n;return e<100&&e>=0?((n=Array.prototype.slice.call(arguments))[0]=e+400,t=new Date(Date.UTC.apply(null,n)),isFinite(t.getUTCFullYear())&&t.setUTCFullYear(e)):t=new Date(Date.UTC.apply(null,arguments)),t}function Tt(e,t,n){var o=7+t-n;return-(7+bt(e,0,o).getUTCDay()-t)%7+o-1}function vt(e,t,n,o,r){var i,s,a=1+7*(t-1)+(7+n-o)%7+Tt(e,o,r);return a<=0?s=ht(i=e-1)+a:a>ht(e)?(i=e+1,s=a-ht(e)):(i=e,s=a),{year:i,dayOfYear:s}}function St(e,t,n){var o,r,i=Tt(e.year(),t,n),s=Math.floor((e.dayOfYear()-i-1)/7)+1;return s<1?o=s+kt(r=e.year()-1,t,n):s>kt(e.year(),t,n)?(o=s-kt(e.year(),t,n),r=e.year()+1):(r=e.year(),o=s),{week:o,year:r}}function kt(e,t,n){var o=Tt(e,t,n),r=Tt(e+1,t,n);return(ht(e)-o+r)/7}function $t(e){return St(e,this._week.dow,this._week.doy).week}R("w",["ww",2],"wo","week"),R("W",["WW",2],"Wo","isoWeek"),ne("week","w"),ne("isoWeek","W"),se("week",5),se("isoWeek",5),He("w",Se),He("ww",Se,ye),He("W",Se),He("WW",Se,ye),Re(["w","ww","W","WW"],(function(e,t,n,o){t[o.substr(0,1)]=ce(e)}));var wt={dow:0,doy:6};function Mt(){return this._week.dow}function Pt(){return this._week.doy}function Ct(e){var t=this.localeData().week(this);return null==e?t:this.add(7*(e-t),"d")}function At(e){var t=St(this,1,4).week;return null==e?t:this.add(7*(e-t),"d")}function Dt(e,t){return"string"!=typeof e?e:isNaN(e)?"number"==typeof(e=t.weekdaysParse(e))?e:null:parseInt(e,10)}function Gt(e,t){return"string"==typeof e?t.weekdaysParse(e)%7||7:isNaN(e)?null:e}function _t(e,t){return e.slice(t,7).concat(e.slice(0,t))}R("d",0,"do","day"),R("dd",0,0,(function(e){return this.localeData().weekdaysMin(this,e)})),R("ddd",0,0,(function(e){return this.localeData().weekdaysShort(this,e)})),R("dddd",0,0,(function(e){return this.localeData().weekdays(this,e)})),R("e",0,0,"weekday"),R("E",0,0,"isoWeekday"),ne("day","d"),ne("weekday","e"),ne("isoWeekday","E"),se("day",11),se("weekday",11),se("isoWeekday",11),He("d",Se),He("e",Se),He("E",Se),He("dd",(function(e,t){return t.weekdaysMinRegex(e)})),He("ddd",(function(e,t){return t.weekdaysShortRegex(e)})),He("dddd",(function(e,t){return t.weekdaysRegex(e)})),Re(["dd","ddd","dddd"],(function(e,t,n,o){var r=n._locale.weekdaysParse(e,o,n._strict);null!=r?t.d=r:f(n).invalidWeekday=e})),Re(["d","e","E"],(function(e,t,n,o){t[o]=ce(e)}));var Et="Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),Ht="Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),It="Su_Mo_Tu_We_Th_Fr_Sa".split("_"),Nt=Ee,Bt=Ee,Ot=Ee;function Vt(e,t){var n=i(this._weekdays)?this._weekdays:this._weekdays[e&&!0!==e&&this._weekdays.isFormat.test(t)?"format":"standalone"];return!0===e?_t(n,this._week.dow):e?n[e.day()]:n}function Rt(e){return!0===e?_t(this._weekdaysShort,this._week.dow):e?this._weekdaysShort[e.day()]:this._weekdaysShort}function Lt(e){return!0===e?_t(this._weekdaysMin,this._week.dow):e?this._weekdaysMin[e.day()]:this._weekdaysMin}function Ft(e,t,n){var o,r,i,s=e.toLocaleLowerCase();if(!this._weekdaysParse)for(this._weekdaysParse=[],this._shortWeekdaysParse=[],this._minWeekdaysParse=[],o=0;o<7;++o)i=g([2e3,1]).day(o),this._minWeekdaysParse[o]=this.weekdaysMin(i,"").toLocaleLowerCase(),this._shortWeekdaysParse[o]=this.weekdaysShort(i,"").toLocaleLowerCase(),this._weekdaysParse[o]=this.weekdays(i,"").toLocaleLowerCase();return n?"dddd"===t?-1!==(r=Fe.call(this._weekdaysParse,s))?r:null:"ddd"===t?-1!==(r=Fe.call(this._shortWeekdaysParse,s))?r:null:-1!==(r=Fe.call(this._minWeekdaysParse,s))?r:null:"dddd"===t?-1!==(r=Fe.call(this._weekdaysParse,s))||-1!==(r=Fe.call(this._shortWeekdaysParse,s))||-1!==(r=Fe.call(this._minWeekdaysParse,s))?r:null:"ddd"===t?-1!==(r=Fe.call(this._shortWeekdaysParse,s))||-1!==(r=Fe.call(this._weekdaysParse,s))||-1!==(r=Fe.call(this._minWeekdaysParse,s))?r:null:-1!==(r=Fe.call(this._minWeekdaysParse,s))||-1!==(r=Fe.call(this._weekdaysParse,s))||-1!==(r=Fe.call(this._shortWeekdaysParse,s))?r:null}function Wt(e,t,n){var o,r,i;if(this._weekdaysParseExact)return Ft.call(this,e,t,n);for(this._weekdaysParse||(this._weekdaysParse=[],this._minWeekdaysParse=[],this._shortWeekdaysParse=[],this._fullWeekdaysParse=[]),o=0;o<7;o++){if(r=g([2e3,1]).day(o),n&&!this._fullWeekdaysParse[o]&&(this._fullWeekdaysParse[o]=new RegExp("^"+this.weekdays(r,"").replace(".","\\.?")+"$","i"),this._shortWeekdaysParse[o]=new RegExp("^"+this.weekdaysShort(r,"").replace(".","\\.?")+"$","i"),this._minWeekdaysParse[o]=new RegExp("^"+this.weekdaysMin(r,"").replace(".","\\.?")+"$","i")),this._weekdaysParse[o]||(i="^"+this.weekdays(r,"")+"|^"+this.weekdaysShort(r,"")+"|^"+this.weekdaysMin(r,""),this._weekdaysParse[o]=new RegExp(i.replace(".",""),"i")),n&&"dddd"===t&&this._fullWeekdaysParse[o].test(e))return o;if(n&&"ddd"===t&&this._shortWeekdaysParse[o].test(e))return o;if(n&&"dd"===t&&this._minWeekdaysParse[o].test(e))return o;if(!n&&this._weekdaysParse[o].test(e))return o}}function Yt(e){if(!this.isValid())return null!=e?this:NaN;var t=this._isUTC?this._d.getUTCDay():this._d.getDay();return null!=e?(e=Dt(e,this.localeData()),this.add(e-t,"d")):t}function Kt(e){if(!this.isValid())return null!=e?this:NaN;var t=(this.day()+7-this.localeData()._week.dow)%7;return null==e?t:this.add(e-t,"d")}function jt(e){if(!this.isValid())return null!=e?this:NaN;if(null!=e){var t=Gt(e,this.localeData());return this.day(this.day()%7?t:t-7)}return this.day()||7}function Ut(e){return this._weekdaysParseExact?(a(this,"_weekdaysRegex")||Jt.call(this),e?this._weekdaysStrictRegex:this._weekdaysRegex):(a(this,"_weekdaysRegex")||(this._weekdaysRegex=Nt),this._weekdaysStrictRegex&&e?this._weekdaysStrictRegex:this._weekdaysRegex)}function Xt(e){return this._weekdaysParseExact?(a(this,"_weekdaysRegex")||Jt.call(this),e?this._weekdaysShortStrictRegex:this._weekdaysShortRegex):(a(this,"_weekdaysShortRegex")||(this._weekdaysShortRegex=Bt),this._weekdaysShortStrictRegex&&e?this._weekdaysShortStrictRegex:this._weekdaysShortRegex)}function zt(e){return this._weekdaysParseExact?(a(this,"_weekdaysRegex")||Jt.call(this),e?this._weekdaysMinStrictRegex:this._weekdaysMinRegex):(a(this,"_weekdaysMinRegex")||(this._weekdaysMinRegex=Ot),this._weekdaysMinStrictRegex&&e?this._weekdaysMinStrictRegex:this._weekdaysMinRegex)}function Jt(){function e(e,t){return t.length-e.length}var t,n,o,r,i,s=[],a=[],l=[],d=[];for(t=0;t<7;t++)n=g([2e3,1]).day(t),o=Be(this.weekdaysMin(n,"")),r=Be(this.weekdaysShort(n,"")),i=Be(this.weekdays(n,"")),s.push(o),a.push(r),l.push(i),d.push(o),d.push(r),d.push(i);s.sort(e),a.sort(e),l.sort(e),d.sort(e),this._weekdaysRegex=new RegExp("^("+d.join("|")+")","i"),this._weekdaysShortRegex=this._weekdaysRegex,this._weekdaysMinRegex=this._weekdaysRegex,this._weekdaysStrictRegex=new RegExp("^("+l.join("|")+")","i"),this._weekdaysShortStrictRegex=new RegExp("^("+a.join("|")+")","i"),this._weekdaysMinStrictRegex=new RegExp("^("+s.join("|")+")","i")}function qt(){return this.hours()%12||12}function Zt(){return this.hours()||24}function Qt(e,t){R(e,0,0,(function(){return this.localeData().meridiem(this.hours(),this.minutes(),t)}))}function en(e,t){return t._meridiemParse}function tn(e){return"p"===(e+"").toLowerCase().charAt(0)}R("H",["HH",2],0,"hour"),R("h",["hh",2],0,qt),R("k",["kk",2],0,Zt),R("hmm",0,0,(function(){return""+qt.apply(this)+I(this.minutes(),2)})),R("hmmss",0,0,(function(){return""+qt.apply(this)+I(this.minutes(),2)+I(this.seconds(),2)})),R("Hmm",0,0,(function(){return""+this.hours()+I(this.minutes(),2)})),R("Hmmss",0,0,(function(){return""+this.hours()+I(this.minutes(),2)+I(this.seconds(),2)})),Qt("a",!0),Qt("A",!1),ne("hour","h"),se("hour",13),He("a",en),He("A",en),He("H",Se),He("h",Se),He("k",Se),He("HH",Se,ye),He("hh",Se,ye),He("kk",Se,ye),He("hmm",ke),He("hmmss",$e),He("Hmm",ke),He("Hmmss",$e),Ve(["H","HH"],je),Ve(["k","kk"],(function(e,t,n){var o=ce(e);t[je]=24===o?0:o})),Ve(["a","A"],(function(e,t,n){n._isPm=n._locale.isPM(e),n._meridiem=e})),Ve(["h","hh"],(function(e,t,n){t[je]=ce(e),f(n).bigHour=!0})),Ve("hmm",(function(e,t,n){var o=e.length-2;t[je]=ce(e.substr(0,o)),t[Ue]=ce(e.substr(o)),f(n).bigHour=!0})),Ve("hmmss",(function(e,t,n){var o=e.length-4,r=e.length-2;t[je]=ce(e.substr(0,o)),t[Ue]=ce(e.substr(o,2)),t[Xe]=ce(e.substr(r)),f(n).bigHour=!0})),Ve("Hmm",(function(e,t,n){var o=e.length-2;t[je]=ce(e.substr(0,o)),t[Ue]=ce(e.substr(o))})),Ve("Hmmss",(function(e,t,n){var o=e.length-4,r=e.length-2;t[je]=ce(e.substr(0,o)),t[Ue]=ce(e.substr(o,2)),t[Xe]=ce(e.substr(r))}));var nn=/[ap]\.?m?\.?/i,on=me("Hours",!0);function rn(e,t,n){return e>11?n?"pm":"PM":n?"am":"AM"}var sn,an={calendar:E,longDateFormat:K,invalidDate:U,ordinal:z,dayOfMonthOrdinalParse:J,relativeTime:Z,months:et,monthsShort:tt,week:wt,weekdays:Et,weekdaysMin:It,weekdaysShort:Ht,meridiemParse:nn},ln={},dn={};function cn(e,t){var n,o=Math.min(e.length,t.length);for(n=0;n<o;n+=1)if(e[n]!==t[n])return n;return o}function mn(e){return e?e.toLowerCase().replace("_","-"):e}function un(e){for(var t,n,o,r,i=0;i<e.length;){for(t=(r=mn(e[i]).split("-")).length,n=(n=mn(e[i+1]))?n.split("-"):null;t>0;){if(o=pn(r.slice(0,t).join("-")))return o;if(n&&n.length>=t&&cn(r,n)>=t-1)break;t--}i++}return sn}function pn(t){var n=null;if(void 0===ln[t]&&e&&e.exports)try{n=sn._abbr,Object(function(){var e=new Error("Cannot find module 'undefined'");throw e.code="MODULE_NOT_FOUND",e}()),gn(n)}catch(e){ln[t]=null}return ln[t]}function gn(e,t){var n;return e&&((n=d(t)?xn(e):hn(e,t))?sn=n:"undefined"!=typeof console&&console.warn&&console.warn("Locale "+e+" not found. Did you forget to load it?")),sn._abbr}function hn(e,t){if(null!==t){var n,o=an;if(t.abbr=e,null!=ln[e])C("defineLocaleOverride","use moment.updateLocale(localeName, config) to change an existing locale. moment.defineLocale(localeName, config) should only be used for creating a new locale See http://momentjs.com/guides/#/warnings/define-locale/ for more info."),o=ln[e]._config;else if(null!=t.parentLocale)if(null!=ln[t.parentLocale])o=ln[t.parentLocale]._config;else{if(null==(n=pn(t.parentLocale)))return dn[t.parentLocale]||(dn[t.parentLocale]=[]),dn[t.parentLocale].push({name:e,config:t}),null;o=n._config}return ln[e]=new _(G(o,t)),dn[e]&&dn[e].forEach((function(e){hn(e.name,e.config)})),gn(e),ln[e]}return delete ln[e],null}function fn(e,t){if(null!=t){var n,o,r=an;null!=ln[e]&&null!=ln[e].parentLocale?ln[e].set(G(ln[e]._config,t)):(null!=(o=pn(e))&&(r=o._config),t=G(r,t),null==o&&(t.abbr=e),(n=new _(t)).parentLocale=ln[e],ln[e]=n),gn(e)}else null!=ln[e]&&(null!=ln[e].parentLocale?(ln[e]=ln[e].parentLocale,e===gn()&&gn(e)):null!=ln[e]&&delete ln[e]);return ln[e]}function xn(e){var t;if(e&&e._locale&&e._locale._abbr&&(e=e._locale._abbr),!e)return sn;if(!i(e)){if(t=pn(e))return t;e=[e]}return un(e)}function yn(){return M(ln)}function bn(e){var t,n=e._a;return n&&-2===f(e).overflow&&(t=n[Ye]<0||n[Ye]>11?Ye:n[Ke]<1||n[Ke]>Qe(n[We],n[Ye])?Ke:n[je]<0||n[je]>24||24===n[je]&&(0!==n[Ue]||0!==n[Xe]||0!==n[ze])?je:n[Ue]<0||n[Ue]>59?Ue:n[Xe]<0||n[Xe]>59?Xe:n[ze]<0||n[ze]>999?ze:-1,f(e)._overflowDayOfYear&&(t<We||t>Ke)&&(t=Ke),f(e)._overflowWeeks&&-1===t&&(t=Je),f(e)._overflowWeekday&&-1===t&&(t=qe),f(e).overflow=t),e}var Tn=/^\s*((?:[+-]\d{6}|\d{4})-(?:\d\d-\d\d|W\d\d-\d|W\d\d|\d\d\d|\d\d))(?:(T| )(\d\d(?::\d\d(?::\d\d(?:[.,]\d+)?)?)?)([+-]\d\d(?::?\d\d)?|\s*Z)?)?$/,vn=/^\s*((?:[+-]\d{6}|\d{4})(?:\d\d\d\d|W\d\d\d|W\d\d|\d\d\d|\d\d|))(?:(T| )(\d\d(?:\d\d(?:\d\d(?:[.,]\d+)?)?)?)([+-]\d\d(?::?\d\d)?|\s*Z)?)?$/,Sn=/Z|[+-]\d\d(?::?\d\d)?/,kn=[["YYYYYY-MM-DD",/[+-]\d{6}-\d\d-\d\d/],["YYYY-MM-DD",/\d{4}-\d\d-\d\d/],["GGGG-[W]WW-E",/\d{4}-W\d\d-\d/],["GGGG-[W]WW",/\d{4}-W\d\d/,!1],["YYYY-DDD",/\d{4}-\d{3}/],["YYYY-MM",/\d{4}-\d\d/,!1],["YYYYYYMMDD",/[+-]\d{10}/],["YYYYMMDD",/\d{8}/],["GGGG[W]WWE",/\d{4}W\d{3}/],["GGGG[W]WW",/\d{4}W\d{2}/,!1],["YYYYDDD",/\d{7}/],["YYYYMM",/\d{6}/,!1],["YYYY",/\d{4}/,!1]],$n=[["HH:mm:ss.SSSS",/\d\d:\d\d:\d\d\.\d+/],["HH:mm:ss,SSSS",/\d\d:\d\d:\d\d,\d+/],["HH:mm:ss",/\d\d:\d\d:\d\d/],["HH:mm",/\d\d:\d\d/],["HHmmss.SSSS",/\d\d\d\d\d\d\.\d+/],["HHmmss,SSSS",/\d\d\d\d\d\d,\d+/],["HHmmss",/\d\d\d\d\d\d/],["HHmm",/\d\d\d\d/],["HH",/\d\d/]],wn=/^\/?Date\((-?\d+)/i,Mn=/^(?:(Mon|Tue|Wed|Thu|Fri|Sat|Sun),?\s)?(\d{1,2})\s(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\s(\d{2,4})\s(\d\d):(\d\d)(?::(\d\d))?\s(?:(UT|GMT|[ECMP][SD]T)|([Zz])|([+-]\d{4}))$/,Pn={UT:0,GMT:0,EDT:-240,EST:-300,CDT:-300,CST:-360,MDT:-360,MST:-420,PDT:-420,PST:-480};function Cn(e){var t,n,o,r,i,s,a=e._i,l=Tn.exec(a)||vn.exec(a);if(l){for(f(e).iso=!0,t=0,n=kn.length;t<n;t++)if(kn[t][1].exec(l[1])){r=kn[t][0],o=!1!==kn[t][2];break}if(null==r)return void(e._isValid=!1);if(l[3]){for(t=0,n=$n.length;t<n;t++)if($n[t][1].exec(l[3])){i=(l[2]||" ")+$n[t][0];break}if(null==i)return void(e._isValid=!1)}if(!o&&null!=i)return void(e._isValid=!1);if(l[4]){if(!Sn.exec(l[4]))return void(e._isValid=!1);s="Z"}e._f=r+(i||"")+(s||""),Rn(e)}else e._isValid=!1}function An(e,t,n,o,r,i){var s=[Dn(e),tt.indexOf(t),parseInt(n,10),parseInt(o,10),parseInt(r,10)];return i&&s.push(parseInt(i,10)),s}function Dn(e){var t=parseInt(e,10);return t<=49?2e3+t:t<=999?1900+t:t}function Gn(e){return e.replace(/\([^)]*\)|[\n\t]/g," ").replace(/(\s\s+)/g," ").replace(/^\s\s*/,"").replace(/\s\s*$/,"")}function _n(e,t,n){return!e||Ht.indexOf(e)===new Date(t[0],t[1],t[2]).getDay()||(f(n).weekdayMismatch=!0,n._isValid=!1,!1)}function En(e,t,n){if(e)return Pn[e];if(t)return 0;var o=parseInt(n,10),r=o%100;return(o-r)/100*60+r}function Hn(e){var t,n=Mn.exec(Gn(e._i));if(n){if(t=An(n[4],n[3],n[2],n[5],n[6],n[7]),!_n(n[1],t,e))return;e._a=t,e._tzm=En(n[8],n[9],n[10]),e._d=bt.apply(null,e._a),e._d.setUTCMinutes(e._d.getUTCMinutes()-e._tzm),f(e).rfc2822=!0}else e._isValid=!1}function In(e){var t=wn.exec(e._i);null===t?(Cn(e),!1===e._isValid&&(delete e._isValid,Hn(e),!1===e._isValid&&(delete e._isValid,e._strict?e._isValid=!1:o.createFromInputFallback(e)))):e._d=new Date(+t[1])}function Nn(e,t,n){return null!=e?e:null!=t?t:n}function Bn(e){var t=new Date(o.now());return e._useUTC?[t.getUTCFullYear(),t.getUTCMonth(),t.getUTCDate()]:[t.getFullYear(),t.getMonth(),t.getDate()]}function On(e){var t,n,o,r,i,s=[];if(!e._d){for(o=Bn(e),e._w&&null==e._a[Ke]&&null==e._a[Ye]&&Vn(e),null!=e._dayOfYear&&(i=Nn(e._a[We],o[We]),(e._dayOfYear>ht(i)||0===e._dayOfYear)&&(f(e)._overflowDayOfYear=!0),n=bt(i,0,e._dayOfYear),e._a[Ye]=n.getUTCMonth(),e._a[Ke]=n.getUTCDate()),t=0;t<3&&null==e._a[t];++t)e._a[t]=s[t]=o[t];for(;t<7;t++)e._a[t]=s[t]=null==e._a[t]?2===t?1:0:e._a[t];24===e._a[je]&&0===e._a[Ue]&&0===e._a[Xe]&&0===e._a[ze]&&(e._nextDay=!0,e._a[je]=0),e._d=(e._useUTC?bt:yt).apply(null,s),r=e._useUTC?e._d.getUTCDay():e._d.getDay(),null!=e._tzm&&e._d.setUTCMinutes(e._d.getUTCMinutes()-e._tzm),e._nextDay&&(e._a[je]=24),e._w&&void 0!==e._w.d&&e._w.d!==r&&(f(e).weekdayMismatch=!0)}}function Vn(e){var t,n,o,r,i,s,a,l,d;null!=(t=e._w).GG||null!=t.W||null!=t.E?(i=1,s=4,n=Nn(t.GG,e._a[We],St(Xn(),1,4).year),o=Nn(t.W,1),((r=Nn(t.E,1))<1||r>7)&&(l=!0)):(i=e._locale._week.dow,s=e._locale._week.doy,d=St(Xn(),i,s),n=Nn(t.gg,e._a[We],d.year),o=Nn(t.w,d.week),null!=t.d?((r=t.d)<0||r>6)&&(l=!0):null!=t.e?(r=t.e+i,(t.e<0||t.e>6)&&(l=!0)):r=i),o<1||o>kt(n,i,s)?f(e)._overflowWeeks=!0:null!=l?f(e)._overflowWeekday=!0:(a=vt(n,o,r,i,s),e._a[We]=a.year,e._dayOfYear=a.dayOfYear)}function Rn(e){if(e._f!==o.ISO_8601)if(e._f!==o.RFC_2822){e._a=[],f(e).empty=!0;var t,n,r,i,s,a,l=""+e._i,d=l.length,c=0;for(r=Y(e._f,e._locale).match(N)||[],t=0;t<r.length;t++)i=r[t],(n=(l.match(Ie(i,e))||[])[0])&&((s=l.substr(0,l.indexOf(n))).length>0&&f(e).unusedInput.push(s),l=l.slice(l.indexOf(n)+n.length),c+=n.length),V[i]?(n?f(e).empty=!1:f(e).unusedTokens.push(i),Le(i,n,e)):e._strict&&!n&&f(e).unusedTokens.push(i);f(e).charsLeftOver=d-c,l.length>0&&f(e).unusedInput.push(l),e._a[je]<=12&&!0===f(e).bigHour&&e._a[je]>0&&(f(e).bigHour=void 0),f(e).parsedDateParts=e._a.slice(0),f(e).meridiem=e._meridiem,e._a[je]=Ln(e._locale,e._a[je],e._meridiem),null!==(a=f(e).era)&&(e._a[We]=e._locale.erasConvertYear(a,e._a[We])),On(e),bn(e)}else Hn(e);else Cn(e)}function Ln(e,t,n){var o;return null==n?t:null!=e.meridiemHour?e.meridiemHour(t,n):null!=e.isPM?((o=e.isPM(n))&&t<12&&(t+=12),o||12!==t||(t=0),t):t}function Fn(e){var t,n,o,r,i,s,a=!1;if(0===e._f.length)return f(e).invalidFormat=!0,void(e._d=new Date(NaN));for(r=0;r<e._f.length;r++)i=0,s=!1,t=v({},e),null!=e._useUTC&&(t._useUTC=e._useUTC),t._f=e._f[r],Rn(t),x(t)&&(s=!0),i+=f(t).charsLeftOver,i+=10*f(t).unusedTokens.length,f(t).score=i,a?i<o&&(o=i,n=t):(null==o||i<o||s)&&(o=i,n=t,s&&(a=!0));p(e,n||t)}function Wn(e){if(!e._d){var t=re(e._i),n=void 0===t.day?t.date:t.day;e._a=u([t.year,t.month,n,t.hour,t.minute,t.second,t.millisecond],(function(e){return e&&parseInt(e,10)})),On(e)}}function Yn(e){var t=new S(bn(Kn(e)));return t._nextDay&&(t.add(1,"d"),t._nextDay=void 0),t}function Kn(e){var t=e._i,n=e._f;return e._locale=e._locale||xn(e._l),null===t||void 0===n&&""===t?y({nullInput:!0}):("string"==typeof t&&(e._i=t=e._locale.preparse(t)),k(t)?new S(bn(t)):(m(t)?e._d=t:i(n)?Fn(e):n?Rn(e):jn(e),x(e)||(e._d=null),e))}function jn(e){var t=e._i;d(t)?e._d=new Date(o.now()):m(t)?e._d=new Date(t.valueOf()):"string"==typeof t?In(e):i(t)?(e._a=u(t.slice(0),(function(e){return parseInt(e,10)})),On(e)):s(t)?Wn(e):c(t)?e._d=new Date(t):o.createFromInputFallback(e)}function Un(e,t,n,o,r){var a={};return!0!==t&&!1!==t||(o=t,t=void 0),!0!==n&&!1!==n||(o=n,n=void 0),(s(e)&&l(e)||i(e)&&0===e.length)&&(e=void 0),a._isAMomentObject=!0,a._useUTC=a._isUTC=r,a._l=n,a._i=e,a._f=t,a._strict=o,Yn(a)}function Xn(e,t,n,o){return Un(e,t,n,o,!1)}o.createFromInputFallback=w("value provided is not in a recognized RFC2822 or ISO format. moment construction falls back to js Date(), which is not reliable across all browsers and versions. Non RFC2822/ISO date formats are discouraged. Please refer to http://momentjs.com/guides/#/warnings/js-date/ for more info.",(function(e){e._d=new Date(e._i+(e._useUTC?" UTC":""))})),o.ISO_8601=function(){},o.RFC_2822=function(){};var zn=w("moment().min is deprecated, use moment.max instead. http://momentjs.com/guides/#/warnings/min-max/",(function(){var e=Xn.apply(null,arguments);return this.isValid()&&e.isValid()?e<this?this:e:y()})),Jn=w("moment().max is deprecated, use moment.min instead. http://momentjs.com/guides/#/warnings/min-max/",(function(){var e=Xn.apply(null,arguments);return this.isValid()&&e.isValid()?e>this?this:e:y()}));function qn(e,t){var n,o;if(1===t.length&&i(t[0])&&(t=t[0]),!t.length)return Xn();for(n=t[0],o=1;o<t.length;++o)t[o].isValid()&&!t[o][e](n)||(n=t[o]);return n}function Zn(){return qn("isBefore",[].slice.call(arguments,0))}function Qn(){return qn("isAfter",[].slice.call(arguments,0))}var eo=function(){return Date.now?Date.now():+new Date},to=["year","quarter","month","week","day","hour","minute","second","millisecond"];function no(e){var t,n,o=!1;for(t in e)if(a(e,t)&&(-1===Fe.call(to,t)||null!=e[t]&&isNaN(e[t])))return!1;for(n=0;n<to.length;++n)if(e[to[n]]){if(o)return!1;parseFloat(e[to[n]])!==ce(e[to[n]])&&(o=!0)}return!0}function oo(){return this._isValid}function ro(){return Co(NaN)}function io(e){var t=re(e),n=t.year||0,o=t.quarter||0,r=t.month||0,i=t.week||t.isoWeek||0,s=t.day||0,a=t.hour||0,l=t.minute||0,d=t.second||0,c=t.millisecond||0;this._isValid=no(t),this._milliseconds=+c+1e3*d+6e4*l+1e3*a*60*60,this._days=+s+7*i,this._months=+r+3*o+12*n,this._data={},this._locale=xn(),this._bubble()}function so(e){return e instanceof io}function ao(e){return e<0?-1*Math.round(-1*e):Math.round(e)}function lo(e,t,n){var o,r=Math.min(e.length,t.length),i=Math.abs(e.length-t.length),s=0;for(o=0;o<r;o++)(n&&e[o]!==t[o]||!n&&ce(e[o])!==ce(t[o]))&&s++;return s+i}function co(e,t){R(e,0,0,(function(){var e=this.utcOffset(),n="+";return e<0&&(e=-e,n="-"),n+I(~~(e/60),2)+t+I(~~e%60,2)}))}co("Z",":"),co("ZZ",""),He("Z",Ge),He("ZZ",Ge),Ve(["Z","ZZ"],(function(e,t,n){n._useUTC=!0,n._tzm=uo(Ge,e)}));var mo=/([\+\-]|\d\d)/gi;function uo(e,t){var n,o,r=(t||"").match(e);return null===r?null:0===(o=60*(n=((r[r.length-1]||[])+"").match(mo)||["-",0,0])[1]+ce(n[2]))?0:"+"===n[0]?o:-o}function po(e,t){var n,r;return t._isUTC?(n=t.clone(),r=(k(e)||m(e)?e.valueOf():Xn(e).valueOf())-n.valueOf(),n._d.setTime(n._d.valueOf()+r),o.updateOffset(n,!1),n):Xn(e).local()}function go(e){return-Math.round(e._d.getTimezoneOffset())}function ho(e,t,n){var r,i=this._offset||0;if(!this.isValid())return null!=e?this:NaN;if(null!=e){if("string"==typeof e){if(null===(e=uo(Ge,e)))return this}else Math.abs(e)<16&&!n&&(e*=60);return!this._isUTC&&t&&(r=go(this)),this._offset=e,this._isUTC=!0,null!=r&&this.add(r,"m"),i!==e&&(!t||this._changeInProgress?Eo(this,Co(e-i,"m"),1,!1):this._changeInProgress||(this._changeInProgress=!0,o.updateOffset(this,!0),this._changeInProgress=null)),this}return this._isUTC?i:go(this)}function fo(e,t){return null!=e?("string"!=typeof e&&(e=-e),this.utcOffset(e,t),this):-this.utcOffset()}function xo(e){return this.utcOffset(0,e)}function yo(e){return this._isUTC&&(this.utcOffset(0,e),this._isUTC=!1,e&&this.subtract(go(this),"m")),this}function bo(){if(null!=this._tzm)this.utcOffset(this._tzm,!1,!0);else if("string"==typeof this._i){var e=uo(De,this._i);null!=e?this.utcOffset(e):this.utcOffset(0,!0)}return this}function To(e){return!!this.isValid()&&(e=e?Xn(e).utcOffset():0,(this.utcOffset()-e)%60==0)}function vo(){return this.utcOffset()>this.clone().month(0).utcOffset()||this.utcOffset()>this.clone().month(5).utcOffset()}function So(){if(!d(this._isDSTShifted))return this._isDSTShifted;var e,t={};return v(t,this),(t=Kn(t))._a?(e=t._isUTC?g(t._a):Xn(t._a),this._isDSTShifted=this.isValid()&&lo(t._a,e.toArray())>0):this._isDSTShifted=!1,this._isDSTShifted}function ko(){return!!this.isValid()&&!this._isUTC}function $o(){return!!this.isValid()&&this._isUTC}function wo(){return!!this.isValid()&&this._isUTC&&0===this._offset}o.updateOffset=function(){};var Mo=/^(-|\+)?(?:(\d*)[. ])?(\d+):(\d+)(?::(\d+)(\.\d*)?)?$/,Po=/^(-|\+)?P(?:([-+]?[0-9,.]*)Y)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)W)?(?:([-+]?[0-9,.]*)D)?(?:T(?:([-+]?[0-9,.]*)H)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)S)?)?$/;function Co(e,t){var n,o,r,i=e,s=null;return so(e)?i={ms:e._milliseconds,d:e._days,M:e._months}:c(e)||!isNaN(+e)?(i={},t?i[t]=+e:i.milliseconds=+e):(s=Mo.exec(e))?(n="-"===s[1]?-1:1,i={y:0,d:ce(s[Ke])*n,h:ce(s[je])*n,m:ce(s[Ue])*n,s:ce(s[Xe])*n,ms:ce(ao(1e3*s[ze]))*n}):(s=Po.exec(e))?(n="-"===s[1]?-1:1,i={y:Ao(s[2],n),M:Ao(s[3],n),w:Ao(s[4],n),d:Ao(s[5],n),h:Ao(s[6],n),m:Ao(s[7],n),s:Ao(s[8],n)}):null==i?i={}:"object"==typeof i&&("from"in i||"to"in i)&&(r=Go(Xn(i.from),Xn(i.to)),(i={}).ms=r.milliseconds,i.M=r.months),o=new io(i),so(e)&&a(e,"_locale")&&(o._locale=e._locale),so(e)&&a(e,"_isValid")&&(o._isValid=e._isValid),o}function Ao(e,t){var n=e&&parseFloat(e.replace(",","."));return(isNaN(n)?0:n)*t}function Do(e,t){var n={};return n.months=t.month()-e.month()+12*(t.year()-e.year()),e.clone().add(n.months,"M").isAfter(t)&&--n.months,n.milliseconds=+t-+e.clone().add(n.months,"M"),n}function Go(e,t){var n;return e.isValid()&&t.isValid()?(t=po(t,e),e.isBefore(t)?n=Do(e,t):((n=Do(t,e)).milliseconds=-n.milliseconds,n.months=-n.months),n):{milliseconds:0,months:0}}function _o(e,t){return function(n,o){var r;return null===o||isNaN(+o)||(C(t,"moment()."+t+"(period, number) is deprecated. Please use moment()."+t+"(number, period). See http://momentjs.com/guides/#/warnings/add-inverted-param/ for more info."),r=n,n=o,o=r),Eo(this,Co(n,o),e),this}}function Eo(e,t,n,r){var i=t._milliseconds,s=ao(t._days),a=ao(t._months);e.isValid()&&(r=r??!0,a&&dt(e,ue(e,"Month")+a*n),s&&pe(e,"Date",ue(e,"Date")+s*n),i&&e._d.setTime(e._d.valueOf()+i*n),r&&o.updateOffset(e,s||a))}Co.fn=io.prototype,Co.invalid=ro;var Ho=_o(1,"add"),Io=_o(-1,"subtract");function No(e){return"string"==typeof e||e instanceof String}function Bo(e){return k(e)||m(e)||No(e)||c(e)||Vo(e)||Oo(e)||null==e}function Oo(e){var t,n,o=s(e)&&!l(e),r=!1,i=["years","year","y","months","month","M","days","day","d","dates","date","D","hours","hour","h","minutes","minute","m","seconds","second","s","milliseconds","millisecond","ms"];for(t=0;t<i.length;t+=1)n=i[t],r=r||a(e,n);return o&&r}function Vo(e){var t=i(e),n=!1;return t&&(n=0===e.filter((function(t){return!c(t)&&No(e)})).length),t&&n}function Ro(e){var t,n,o=s(e)&&!l(e),r=!1,i=["sameDay","nextDay","lastDay","nextWeek","lastWeek","sameElse"];for(t=0;t<i.length;t+=1)n=i[t],r=r||a(e,n);return o&&r}function Lo(e,t){var n=e.diff(t,"days",!0);return n<-6?"sameElse":n<-1?"lastWeek":n<0?"lastDay":n<1?"sameDay":n<2?"nextDay":n<7?"nextWeek":"sameElse"}function Fo(e,t){1===arguments.length&&(arguments[0]?Bo(arguments[0])?(e=arguments[0],t=void 0):Ro(arguments[0])&&(t=arguments[0],e=void 0):(e=void 0,t=void 0));var n=e||Xn(),r=po(n,this).startOf("day"),i=o.calendarFormat(this,r)||"sameElse",s=t&&(A(t[i])?t[i].call(this,n):t[i]);return this.format(s||this.localeData().calendar(i,this,Xn(n)))}function Wo(){return new S(this)}function Yo(e,t){var n=k(e)?e:Xn(e);return!(!this.isValid()||!n.isValid())&&("millisecond"===(t=oe(t)||"millisecond")?this.valueOf()>n.valueOf():n.valueOf()<this.clone().startOf(t).valueOf())}function Ko(e,t){var n=k(e)?e:Xn(e);return!(!this.isValid()||!n.isValid())&&("millisecond"===(t=oe(t)||"millisecond")?this.valueOf()<n.valueOf():this.clone().endOf(t).valueOf()<n.valueOf())}function jo(e,t,n,o){var r=k(e)?e:Xn(e),i=k(t)?t:Xn(t);return!!(this.isValid()&&r.isValid()&&i.isValid())&&("("===(o=o||"()")[0]?this.isAfter(r,n):!this.isBefore(r,n))&&(")"===o[1]?this.isBefore(i,n):!this.isAfter(i,n))}function Uo(e,t){var n,o=k(e)?e:Xn(e);return!(!this.isValid()||!o.isValid())&&("millisecond"===(t=oe(t)||"millisecond")?this.valueOf()===o.valueOf():(n=o.valueOf(),this.clone().startOf(t).valueOf()<=n&&n<=this.clone().endOf(t).valueOf()))}function Xo(e,t){return this.isSame(e,t)||this.isAfter(e,t)}function zo(e,t){return this.isSame(e,t)||this.isBefore(e,t)}function Jo(e,t,n){var o,r,i;if(!this.isValid())return NaN;if(!(o=po(e,this)).isValid())return NaN;switch(r=6e4*(o.utcOffset()-this.utcOffset()),t=oe(t)){case"year":i=qo(this,o)/12;break;case"month":i=qo(this,o);break;case"quarter":i=qo(this,o)/3;break;case"second":i=(this-o)/1e3;break;case"minute":i=(this-o)/6e4;break;case"hour":i=(this-o)/36e5;break;case"day":i=(this-o-r)/864e5;break;case"week":i=(this-o-r)/6048e5;break;default:i=this-o}return n?i:de(i)}function qo(e,t){if(e.date()<t.date())return-qo(t,e);var n=12*(t.year()-e.year())+(t.month()-e.month()),o=e.clone().add(n,"months");return-(n+(t-o<0?(t-o)/(o-e.clone().add(n-1,"months")):(t-o)/(e.clone().add(n+1,"months")-o)))||0}function Zo(){return this.clone().locale("en").format("ddd MMM DD YYYY HH:mm:ss [GMT]ZZ")}function Qo(e){if(!this.isValid())return null;var t=!0!==e,n=t?this.clone().utc():this;return n.year()<0||n.year()>9999?W(n,t?"YYYYYY-MM-DD[T]HH:mm:ss.SSS[Z]":"YYYYYY-MM-DD[T]HH:mm:ss.SSSZ"):A(Date.prototype.toISOString)?t?this.toDate().toISOString():new Date(this.valueOf()+60*this.utcOffset()*1e3).toISOString().replace("Z",W(n,"Z")):W(n,t?"YYYY-MM-DD[T]HH:mm:ss.SSS[Z]":"YYYY-MM-DD[T]HH:mm:ss.SSSZ")}function er(){if(!this.isValid())return"moment.invalid(/* "+this._i+" */)";var e,t,n,o,r="moment",i="";return this.isLocal()||(r=0===this.utcOffset()?"moment.utc":"moment.parseZone",i="Z"),e="["+r+'("]',t=0<=this.year()&&this.year()<=9999?"YYYY":"YYYYYY",n="-MM-DD[T]HH:mm:ss.SSS",o=i+'[")]',this.format(e+t+n+o)}function tr(e){e||(e=this.isUtc()?o.defaultFormatUtc:o.defaultFormat);var t=W(this,e);return this.localeData().postformat(t)}function nr(e,t){return this.isValid()&&(k(e)&&e.isValid()||Xn(e).isValid())?Co({to:this,from:e}).locale(this.locale()).humanize(!t):this.localeData().invalidDate()}function or(e){return this.from(Xn(),e)}function rr(e,t){return this.isValid()&&(k(e)&&e.isValid()||Xn(e).isValid())?Co({from:this,to:e}).locale(this.locale()).humanize(!t):this.localeData().invalidDate()}function ir(e){return this.to(Xn(),e)}function sr(e){var t;return void 0===e?this._locale._abbr:(null!=(t=xn(e))&&(this._locale=t),this)}o.defaultFormat="YYYY-MM-DDTHH:mm:ssZ",o.defaultFormatUtc="YYYY-MM-DDTHH:mm:ss[Z]";var ar=w("moment().lang() is deprecated. Instead, use moment().localeData() to get the language configuration. Use moment().locale() to change languages.",(function(e){return void 0===e?this.localeData():this.locale(e)}));function lr(){return this._locale}var dr=1e3,cr=60*dr,mr=60*cr,ur=3506328*mr;function pr(e,t){return(e%t+t)%t}function gr(e,t,n){return e<100&&e>=0?new Date(e+400,t,n)-ur:new Date(e,t,n).valueOf()}function hr(e,t,n){return e<100&&e>=0?Date.UTC(e+400,t,n)-ur:Date.UTC(e,t,n)}function fr(e){var t,n;if(void 0===(e=oe(e))||"millisecond"===e||!this.isValid())return this;switch(n=this._isUTC?hr:gr,e){case"year":t=n(this.year(),0,1);break;case"quarter":t=n(this.year(),this.month()-this.month()%3,1);break;case"month":t=n(this.year(),this.month(),1);break;case"week":t=n(this.year(),this.month(),this.date()-this.weekday());break;case"isoWeek":t=n(this.year(),this.month(),this.date()-(this.isoWeekday()-1));break;case"day":case"date":t=n(this.year(),this.month(),this.date());break;case"hour":t=this._d.valueOf(),t-=pr(t+(this._isUTC?0:this.utcOffset()*cr),mr);break;case"minute":t=this._d.valueOf(),t-=pr(t,cr);break;case"second":t=this._d.valueOf(),t-=pr(t,dr)}return this._d.setTime(t),o.updateOffset(this,!0),this}function xr(e){var t,n;if(void 0===(e=oe(e))||"millisecond"===e||!this.isValid())return this;switch(n=this._isUTC?hr:gr,e){case"year":t=n(this.year()+1,0,1)-1;break;case"quarter":t=n(this.year(),this.month()-this.month()%3+3,1)-1;break;case"month":t=n(this.year(),this.month()+1,1)-1;break;case"week":t=n(this.year(),this.month(),this.date()-this.weekday()+7)-1;break;case"isoWeek":t=n(this.year(),this.month(),this.date()-(this.isoWeekday()-1)+7)-1;break;case"day":case"date":t=n(this.year(),this.month(),this.date()+1)-1;break;case"hour":t=this._d.valueOf(),t+=mr-pr(t+(this._isUTC?0:this.utcOffset()*cr),mr)-1;break;case"minute":t=this._d.valueOf(),t+=cr-pr(t,cr)-1;break;case"second":t=this._d.valueOf(),t+=dr-pr(t,dr)-1}return this._d.setTime(t),o.updateOffset(this,!0),this}function yr(){return this._d.valueOf()-6e4*(this._offset||0)}function br(){return Math.floor(this.valueOf()/1e3)}function Tr(){return new Date(this.valueOf())}function vr(){var e=this;return[e.year(),e.month(),e.date(),e.hour(),e.minute(),e.second(),e.millisecond()]}function Sr(){var e=this;return{years:e.year(),months:e.month(),date:e.date(),hours:e.hours(),minutes:e.minutes(),seconds:e.seconds(),milliseconds:e.milliseconds()}}function kr(){return this.isValid()?this.toISOString():null}function $r(){return x(this)}function wr(){return p({},f(this))}function Mr(){return f(this).overflow}function Pr(){return{input:this._i,format:this._f,locale:this._locale,isUTC:this._isUTC,strict:this._strict}}function Cr(e,t){var n,r,i,s=this._eras||xn("en")._eras;for(n=0,r=s.length;n<r;++n){switch(typeof s[n].since){case"string":i=o(s[n].since).startOf("day"),s[n].since=i.valueOf()}switch(typeof s[n].until){case"undefined":s[n].until=1/0;break;case"string":i=o(s[n].until).startOf("day").valueOf(),s[n].until=i.valueOf()}}return s}function Ar(e,t,n){var o,r,i,s,a,l=this.eras();for(e=e.toUpperCase(),o=0,r=l.length;o<r;++o)if(i=l[o].name.toUpperCase(),s=l[o].abbr.toUpperCase(),a=l[o].narrow.toUpperCase(),n)switch(t){case"N":case"NN":case"NNN":if(s===e)return l[o];break;case"NNNN":if(i===e)return l[o];break;case"NNNNN":if(a===e)return l[o]}else if([i,s,a].indexOf(e)>=0)return l[o]}function Dr(e,t){var n=e.since<=e.until?1:-1;return void 0===t?o(e.since).year():o(e.since).year()+(t-e.offset)*n}function Gr(){var e,t,n,o=this.localeData().eras();for(e=0,t=o.length;e<t;++e){if(n=this.clone().startOf("day").valueOf(),o[e].since<=n&&n<=o[e].until)return o[e].name;if(o[e].until<=n&&n<=o[e].since)return o[e].name}return""}function _r(){var e,t,n,o=this.localeData().eras();for(e=0,t=o.length;e<t;++e){if(n=this.clone().startOf("day").valueOf(),o[e].since<=n&&n<=o[e].until)return o[e].narrow;if(o[e].until<=n&&n<=o[e].since)return o[e].narrow}return""}function Er(){var e,t,n,o=this.localeData().eras();for(e=0,t=o.length;e<t;++e){if(n=this.clone().startOf("day").valueOf(),o[e].since<=n&&n<=o[e].until)return o[e].abbr;if(o[e].until<=n&&n<=o[e].since)return o[e].abbr}return""}function Hr(){var e,t,n,r,i=this.localeData().eras();for(e=0,t=i.length;e<t;++e)if(n=i[e].since<=i[e].until?1:-1,r=this.clone().startOf("day").valueOf(),i[e].since<=r&&r<=i[e].until||i[e].until<=r&&r<=i[e].since)return(this.year()-o(i[e].since).year())*n+i[e].offset;return this.year()}function Ir(e){return a(this,"_erasNameRegex")||Fr.call(this),e?this._erasNameRegex:this._erasRegex}function Nr(e){return a(this,"_erasAbbrRegex")||Fr.call(this),e?this._erasAbbrRegex:this._erasRegex}function Br(e){return a(this,"_erasNarrowRegex")||Fr.call(this),e?this._erasNarrowRegex:this._erasRegex}function Or(e,t){return t.erasAbbrRegex(e)}function Vr(e,t){return t.erasNameRegex(e)}function Rr(e,t){return t.erasNarrowRegex(e)}function Lr(e,t){return t._eraYearOrdinalRegex||Ce}function Fr(){var e,t,n=[],o=[],r=[],i=[],s=this.eras();for(e=0,t=s.length;e<t;++e)o.push(Be(s[e].name)),n.push(Be(s[e].abbr)),r.push(Be(s[e].narrow)),i.push(Be(s[e].name)),i.push(Be(s[e].abbr)),i.push(Be(s[e].narrow));this._erasRegex=new RegExp("^("+i.join("|")+")","i"),this._erasNameRegex=new RegExp("^("+o.join("|")+")","i"),this._erasAbbrRegex=new RegExp("^("+n.join("|")+")","i"),this._erasNarrowRegex=new RegExp("^("+r.join("|")+")","i")}function Wr(e,t){R(0,[e,e.length],0,t)}function Yr(e){return Jr.call(this,e,this.week(),this.weekday(),this.localeData()._week.dow,this.localeData()._week.doy)}function Kr(e){return Jr.call(this,e,this.isoWeek(),this.isoWeekday(),1,4)}function jr(){return kt(this.year(),1,4)}function Ur(){return kt(this.isoWeekYear(),1,4)}function Xr(){var e=this.localeData()._week;return kt(this.year(),e.dow,e.doy)}function zr(){var e=this.localeData()._week;return kt(this.weekYear(),e.dow,e.doy)}function Jr(e,t,n,o,r){var i;return null==e?St(this,o,r).year:(t>(i=kt(e,o,r))&&(t=i),qr.call(this,e,t,n,o,r))}function qr(e,t,n,o,r){var i=vt(e,t,n,o,r),s=bt(i.year,0,i.dayOfYear);return this.year(s.getUTCFullYear()),this.month(s.getUTCMonth()),this.date(s.getUTCDate()),this}function Zr(e){return null==e?Math.ceil((this.month()+1)/3):this.month(3*(e-1)+this.month()%3)}R("N",0,0,"eraAbbr"),R("NN",0,0,"eraAbbr"),R("NNN",0,0,"eraAbbr"),R("NNNN",0,0,"eraName"),R("NNNNN",0,0,"eraNarrow"),R("y",["y",1],"yo","eraYear"),R("y",["yy",2],0,"eraYear"),R("y",["yyy",3],0,"eraYear"),R("y",["yyyy",4],0,"eraYear"),He("N",Or),He("NN",Or),He("NNN",Or),He("NNNN",Vr),He("NNNNN",Rr),Ve(["N","NN","NNN","NNNN","NNNNN"],(function(e,t,n,o){var r=n._locale.erasParse(e,o,n._strict);r?f(n).era=r:f(n).invalidEra=e})),He("y",Ce),He("yy",Ce),He("yyy",Ce),He("yyyy",Ce),He("yo",Lr),Ve(["y","yy","yyy","yyyy"],We),Ve(["yo"],(function(e,t,n,o){var r;n._locale._eraYearOrdinalRegex&&(r=e.match(n._locale._eraYearOrdinalRegex)),n._locale.eraYearOrdinalParse?t[We]=n._locale.eraYearOrdinalParse(e,r):t[We]=parseInt(e,10)})),R(0,["gg",2],0,(function(){return this.weekYear()%100})),R(0,["GG",2],0,(function(){return this.isoWeekYear()%100})),Wr("gggg","weekYear"),Wr("ggggg","weekYear"),Wr("GGGG","isoWeekYear"),Wr("GGGGG","isoWeekYear"),ne("weekYear","gg"),ne("isoWeekYear","GG"),se("weekYear",1),se("isoWeekYear",1),He("G",Ae),He("g",Ae),He("GG",Se,ye),He("gg",Se,ye),He("GGGG",Me,Te),He("gggg",Me,Te),He("GGGGG",Pe,ve),He("ggggg",Pe,ve),Re(["gggg","ggggg","GGGG","GGGGG"],(function(e,t,n,o){t[o.substr(0,2)]=ce(e)})),Re(["gg","GG"],(function(e,t,n,r){t[r]=o.parseTwoDigitYear(e)})),R("Q",0,"Qo","quarter"),ne("quarter","Q"),se("quarter",7),He("Q",xe),Ve("Q",(function(e,t){t[Ye]=3*(ce(e)-1)})),R("D",["DD",2],"Do","date"),ne("date","D"),se("date",9),He("D",Se),He("DD",Se,ye),He("Do",(function(e,t){return e?t._dayOfMonthOrdinalParse||t._ordinalParse:t._dayOfMonthOrdinalParseLenient})),Ve(["D","DD"],Ke),Ve("Do",(function(e,t){t[Ke]=ce(e.match(Se)[0])}));var Qr=me("Date",!0);function ei(e){var t=Math.round((this.clone().startOf("day")-this.clone().startOf("year"))/864e5)+1;return null==e?t:this.add(e-t,"d")}R("DDD",["DDDD",3],"DDDo","dayOfYear"),ne("dayOfYear","DDD"),se("dayOfYear",4),He("DDD",we),He("DDDD",be),Ve(["DDD","DDDD"],(function(e,t,n){n._dayOfYear=ce(e)})),R("m",["mm",2],0,"minute"),ne("minute","m"),se("minute",14),He("m",Se),He("mm",Se,ye),Ve(["m","mm"],Ue);var ti=me("Minutes",!1);R("s",["ss",2],0,"second"),ne("second","s"),se("second",15),He("s",Se),He("ss",Se,ye),Ve(["s","ss"],Xe);var ni,oi,ri=me("Seconds",!1);for(R("S",0,0,(function(){return~~(this.millisecond()/100)})),R(0,["SS",2],0,(function(){return~~(this.millisecond()/10)})),R(0,["SSS",3],0,"millisecond"),R(0,["SSSS",4],0,(function(){return 10*this.millisecond()})),R(0,["SSSSS",5],0,(function(){return 100*this.millisecond()})),R(0,["SSSSSS",6],0,(function(){return 1e3*this.millisecond()})),R(0,["SSSSSSS",7],0,(function(){return 1e4*this.millisecond()})),R(0,["SSSSSSSS",8],0,(function(){return 1e5*this.millisecond()})),R(0,["SSSSSSSSS",9],0,(function(){return 1e6*this.millisecond()})),ne("millisecond","ms"),se("millisecond",16),He("S",we,xe),He("SS",we,ye),He("SSS",we,be),ni="SSSS";ni.length<=9;ni+="S")He(ni,Ce);function ii(e,t){t[ze]=ce(1e3*("0."+e))}for(ni="S";ni.length<=9;ni+="S")Ve(ni,ii);function si(){return this._isUTC?"UTC":""}function ai(){return this._isUTC?"Coordinated Universal Time":""}oi=me("Milliseconds",!1),R("z",0,0,"zoneAbbr"),R("zz",0,0,"zoneName");var li=S.prototype;function di(e){return Xn(1e3*e)}function ci(){return Xn.apply(null,arguments).parseZone()}function mi(e){return e}li.add=Ho,li.calendar=Fo,li.clone=Wo,li.diff=Jo,li.endOf=xr,li.format=tr,li.from=nr,li.fromNow=or,li.to=rr,li.toNow=ir,li.get=ge,li.invalidAt=Mr,li.isAfter=Yo,li.isBefore=Ko,li.isBetween=jo,li.isSame=Uo,li.isSameOrAfter=Xo,li.isSameOrBefore=zo,li.isValid=$r,li.lang=ar,li.locale=sr,li.localeData=lr,li.max=Jn,li.min=zn,li.parsingFlags=wr,li.set=he,li.startOf=fr,li.subtract=Io,li.toArray=vr,li.toObject=Sr,li.toDate=Tr,li.toISOString=Qo,li.inspect=er,"undefined"!=typeof Symbol&&null!=Symbol.for&&(li[Symbol.for("nodejs.util.inspect.custom")]=function(){return"Moment<"+this.format()+">"}),li.toJSON=kr,li.toString=Zo,li.unix=br,li.valueOf=yr,li.creationData=Pr,li.eraName=Gr,li.eraNarrow=_r,li.eraAbbr=Er,li.eraYear=Hr,li.year=ft,li.isLeapYear=xt,li.weekYear=Yr,li.isoWeekYear=Kr,li.quarter=li.quarters=Zr,li.month=ct,li.daysInMonth=mt,li.week=li.weeks=Ct,li.isoWeek=li.isoWeeks=At,li.weeksInYear=Xr,li.weeksInWeekYear=zr,li.isoWeeksInYear=jr,li.isoWeeksInISOWeekYear=Ur,li.date=Qr,li.day=li.days=Yt,li.weekday=Kt,li.isoWeekday=jt,li.dayOfYear=ei,li.hour=li.hours=on,li.minute=li.minutes=ti,li.second=li.seconds=ri,li.millisecond=li.milliseconds=oi,li.utcOffset=ho,li.utc=xo,li.local=yo,li.parseZone=bo,li.hasAlignedHourOffset=To,li.isDST=vo,li.isLocal=ko,li.isUtcOffset=$o,li.isUtc=wo,li.isUTC=wo,li.zoneAbbr=si,li.zoneName=ai,li.dates=w("dates accessor is deprecated. Use date instead.",Qr),li.months=w("months accessor is deprecated. Use month instead",ct),li.years=w("years accessor is deprecated. Use year instead",ft),li.zone=w("moment().zone is deprecated, use moment().utcOffset instead. http://momentjs.com/guides/#/warnings/zone/",fo),li.isDSTShifted=w("isDSTShifted is deprecated. See http://momentjs.com/guides/#/warnings/dst-shifted/ for more information",So);var ui=_.prototype;function pi(e,t,n,o){var r=xn(),i=g().set(o,t);return r[n](i,e)}function gi(e,t,n){if(c(e)&&(t=e,e=void 0),e=e||"",null!=t)return pi(e,t,n,"month");var o,r=[];for(o=0;o<12;o++)r[o]=pi(e,o,n,"month");return r}function hi(e,t,n,o){"boolean"==typeof e?(c(t)&&(n=t,t=void 0),t=t||""):(n=t=e,e=!1,c(t)&&(n=t,t=void 0),t=t||"");var r,i=xn(),s=e?i._week.dow:0,a=[];if(null!=n)return pi(t,(n+s)%7,o,"day");for(r=0;r<7;r++)a[r]=pi(t,(r+s)%7,o,"day");return a}function fi(e,t){return gi(e,t,"months")}function xi(e,t){return gi(e,t,"monthsShort")}function yi(e,t,n){return hi(e,t,n,"weekdays")}function bi(e,t,n){return hi(e,t,n,"weekdaysShort")}function Ti(e,t,n){return hi(e,t,n,"weekdaysMin")}ui.calendar=H,ui.longDateFormat=j,ui.invalidDate=X,ui.ordinal=q,ui.preparse=mi,ui.postformat=mi,ui.relativeTime=Q,ui.pastFuture=ee,ui.set=D,ui.eras=Cr,ui.erasParse=Ar,ui.erasConvertYear=Dr,ui.erasAbbrRegex=Nr,ui.erasNameRegex=Ir,ui.erasNarrowRegex=Br,ui.months=it,ui.monthsShort=st,ui.monthsParse=lt,ui.monthsRegex=pt,ui.monthsShortRegex=ut,ui.week=$t,ui.firstDayOfYear=Pt,ui.firstDayOfWeek=Mt,ui.weekdays=Vt,ui.weekdaysMin=Lt,ui.weekdaysShort=Rt,ui.weekdaysParse=Wt,ui.weekdaysRegex=Ut,ui.weekdaysShortRegex=Xt,ui.weekdaysMinRegex=zt,ui.isPM=tn,ui.meridiem=rn,gn("en",{eras:[{since:"0001-01-01",until:1/0,offset:1,name:"Anno Domini",narrow:"AD",abbr:"AD"},{since:"0000-12-31",until:-1/0,offset:1,name:"Before Christ",narrow:"BC",abbr:"BC"}],dayOfMonthOrdinalParse:/\d{1,2}(th|st|nd|rd)/,ordinal:function(e){var t=e%10;return e+(1===ce(e%100/10)?"th":1===t?"st":2===t?"nd":3===t?"rd":"th")}}),o.lang=w("moment.lang is deprecated. Use moment.locale instead.",gn),o.langData=w("moment.langData is deprecated. Use moment.localeData instead.",xn);var vi=Math.abs;function Si(){var e=this._data;return this._milliseconds=vi(this._milliseconds),this._days=vi(this._days),this._months=vi(this._months),e.milliseconds=vi(e.milliseconds),e.seconds=vi(e.seconds),e.minutes=vi(e.minutes),e.hours=vi(e.hours),e.months=vi(e.months),e.years=vi(e.years),this}function ki(e,t,n,o){var r=Co(t,n);return e._milliseconds+=o*r._milliseconds,e._days+=o*r._days,e._months+=o*r._months,e._bubble()}function $i(e,t){return ki(this,e,t,1)}function wi(e,t){return ki(this,e,t,-1)}function Mi(e){return e<0?Math.floor(e):Math.ceil(e)}function Pi(){var e,t,n,o,r,i=this._milliseconds,s=this._days,a=this._months,l=this._data;return i>=0&&s>=0&&a>=0||i<=0&&s<=0&&a<=0||(i+=864e5*Mi(Ai(a)+s),s=0,a=0),l.milliseconds=i%1e3,e=de(i/1e3),l.seconds=e%60,t=de(e/60),l.minutes=t%60,n=de(t/60),l.hours=n%24,s+=de(n/24),a+=r=de(Ci(s)),s-=Mi(Ai(r)),o=de(a/12),a%=12,l.days=s,l.months=a,l.years=o,this}function Ci(e){return 4800*e/146097}function Ai(e){return 146097*e/4800}function Di(e){if(!this.isValid())return NaN;var t,n,o=this._milliseconds;if("month"===(e=oe(e))||"quarter"===e||"year"===e)switch(t=this._days+o/864e5,n=this._months+Ci(t),e){case"month":return n;case"quarter":return n/3;case"year":return n/12}else switch(t=this._days+Math.round(Ai(this._months)),e){case"week":return t/7+o/6048e5;case"day":return t+o/864e5;case"hour":return 24*t+o/36e5;case"minute":return 1440*t+o/6e4;case"second":return 86400*t+o/1e3;case"millisecond":return Math.floor(864e5*t)+o;default:throw new Error("Unknown unit "+e)}}function Gi(){return this.isValid()?this._milliseconds+864e5*this._days+this._months%12*2592e6+31536e6*ce(this._months/12):NaN}function _i(e){return function(){return this.as(e)}}var Ei=_i("ms"),Hi=_i("s"),Ii=_i("m"),Ni=_i("h"),Bi=_i("d"),Oi=_i("w"),Vi=_i("M"),Ri=_i("Q"),Li=_i("y");function Fi(){return Co(this)}function Wi(e){return e=oe(e),this.isValid()?this[e+"s"]():NaN}function Yi(e){return function(){return this.isValid()?this._data[e]:NaN}}var Ki=Yi("milliseconds"),ji=Yi("seconds"),Ui=Yi("minutes"),Xi=Yi("hours"),zi=Yi("days"),Ji=Yi("months"),qi=Yi("years");function Zi(){return de(this.days()/7)}var Qi=Math.round,es={ss:44,s:45,m:45,h:22,d:26,w:null,M:11};function ts(e,t,n,o,r){return r.relativeTime(t||1,!!n,e,o)}function ns(e,t,n,o){var r=Co(e).abs(),i=Qi(r.as("s")),s=Qi(r.as("m")),a=Qi(r.as("h")),l=Qi(r.as("d")),d=Qi(r.as("M")),c=Qi(r.as("w")),m=Qi(r.as("y")),u=i<=n.ss&&["s",i]||i<n.s&&["ss",i]||s<=1&&["m"]||s<n.m&&["mm",s]||a<=1&&["h"]||a<n.h&&["hh",a]||l<=1&&["d"]||l<n.d&&["dd",l];return null!=n.w&&(u=u||c<=1&&["w"]||c<n.w&&["ww",c]),(u=u||d<=1&&["M"]||d<n.M&&["MM",d]||m<=1&&["y"]||["yy",m])[2]=t,u[3]=+e>0,u[4]=o,ts.apply(null,u)}function os(e){return void 0===e?Qi:"function"==typeof e&&(Qi=e,!0)}function rs(e,t){return void 0!==es[e]&&(void 0===t?es[e]:(es[e]=t,"s"===e&&(es.ss=t-1),!0))}function is(e,t){if(!this.isValid())return this.localeData().invalidDate();var n,o,r=!1,i=es;return"object"==typeof e&&(t=e,e=!1),"boolean"==typeof e&&(r=e),"object"==typeof t&&(i=Object.assign({},es,t),null!=t.s&&null==t.ss&&(i.ss=t.s-1)),o=ns(this,!r,i,n=this.localeData()),r&&(o=n.pastFuture(+this,o)),n.postformat(o)}var ss=Math.abs;function as(e){return(e>0)-(e<0)||+e}function ls(){if(!this.isValid())return this.localeData().invalidDate();var e,t,n,o,r,i,s,a,l=ss(this._milliseconds)/1e3,d=ss(this._days),c=ss(this._months),m=this.asSeconds();return m?(e=de(l/60),t=de(e/60),l%=60,e%=60,n=de(c/12),c%=12,o=l?l.toFixed(3).replace(/\.?0+$/,""):"",r=m<0?"-":"",i=as(this._months)!==as(m)?"-":"",s=as(this._days)!==as(m)?"-":"",a=as(this._milliseconds)!==as(m)?"-":"",r+"P"+(n?i+n+"Y":"")+(c?i+c+"M":"")+(d?s+d+"D":"")+(t||e||l?"T":"")+(t?a+t+"H":"")+(e?a+e+"M":"")+(l?a+o+"S":"")):"P0D"}var ds=io.prototype;return ds.isValid=oo,ds.abs=Si,ds.add=$i,ds.subtract=wi,ds.as=Di,ds.asMilliseconds=Ei,ds.asSeconds=Hi,ds.asMinutes=Ii,ds.asHours=Ni,ds.asDays=Bi,ds.asWeeks=Oi,ds.asMonths=Vi,ds.asQuarters=Ri,ds.asYears=Li,ds.valueOf=Gi,ds._bubble=Pi,ds.clone=Fi,ds.get=Wi,ds.milliseconds=Ki,ds.seconds=ji,ds.minutes=Ui,ds.hours=Xi,ds.days=zi,ds.weeks=Zi,ds.months=Ji,ds.years=qi,ds.humanize=is,ds.toISOString=ls,ds.toString=ls,ds.toJSON=ls,ds.locale=sr,ds.localeData=lr,ds.toIsoString=w("toIsoString() is deprecated. Please use toISOString() instead (notice the capitals)",ls),ds.lang=ar,R("X",0,0,"unix"),R("x",0,0,"valueOf"),He("x",Ae),He("X",_e),Ve("X",(function(e,t,n){n._d=new Date(1e3*parseFloat(e))})),Ve("x",(function(e,t,n){n._d=new Date(ce(e))})),o.version="2.29.1",r(Xn),o.fn=li,o.min=Zn,o.max=Qn,o.now=eo,o.utc=g,o.unix=di,o.months=fi,o.isDate=m,o.locale=gn,o.invalid=y,o.duration=Co,o.isMoment=k,o.weekdays=yi,o.parseZone=ci,o.localeData=xn,o.isDuration=so,o.monthsShort=xi,o.weekdaysMin=Ti,o.defineLocale=hn,o.updateLocale=fn,o.locales=yn,o.weekdaysShort=bi,o.normalizeUnits=oe,o.relativeTimeRounding=os,o.relativeTimeThreshold=rs,o.calendarFormat=Lo,o.prototype=li,o.HTML5_FMT={DATETIME_LOCAL:"YYYY-MM-DDTHH:mm",DATETIME_LOCAL_SECONDS:"YYYY-MM-DDTHH:mm:ss",DATETIME_LOCAL_MS:"YYYY-MM-DDTHH:mm:ss.SSS",DATE:"YYYY-MM-DD",TIME:"HH:mm",TIME_SECONDS:"HH:mm:ss",TIME_MS:"HH:mm:ss.SSS",WEEK:"GGGG-[W]WW",MONTH:"YYYY-MM"},o}()},2315:e=>{"use strict";const t=["B","kB","MB","GB","TB","PB","EB","ZB","YB"],n=["B","kiB","MiB","GiB","TiB","PiB","EiB","ZiB","YiB"],o=["b","kbit","Mbit","Gbit","Tbit","Pbit","Ebit","Zbit","Ybit"],r=["b","kibit","Mibit","Gibit","Tibit","Pibit","Eibit","Zibit","Yibit"],i=(e,t,n)=>{let o=e;return"string"==typeof t||Array.isArray(t)?o=e.toLocaleString(t,n):!0!==t&&void 0===n||(o=e.toLocaleString(void 0,n)),o};e.exports=(e,s)=>{if(!Number.isFinite(e))throw new TypeError(`Expected a finite number, got ${typeof e}: ${e}`);const a=(s=Object.assign({bits:!1,binary:!1},s)).bits?s.binary?r:o:s.binary?n:t;if(s.signed&&0===e)return` 0 ${a[0]}`;const l=e<0,d=l?"-":s.signed?"+":"";let c;if(l&&(e=-e),void 0!==s.minimumFractionDigits&&(c={minimumFractionDigits:s.minimumFractionDigits}),void 0!==s.maximumFractionDigits&&(c=Object.assign({maximumFractionDigits:s.maximumFractionDigits},c)),e<1){return d+i(e,s.locale,c)+" "+a[0]}const m=Math.min(Math.floor(s.binary?Math.log(e)/Math.log(1024):Math.log10(e)/3),a.length-1);e/=Math.pow(s.binary?1024:1e3,m),c||(e=e.toPrecision(3));return d+i(Number(e),s.locale,c)+" "+a[m]}},7284:e=>{e.exports=function(e,n,r){r=Object.assign({},t,r||{});let i=0,s=function(e){let t={ms:.001,s:1,m:60,h:3600};return t.d=e.hoursPerDay*t.h,t.w=e.daysPerWeek*t.d,t.mth=e.daysPerYear/e.monthsPerYear*t.d,t.y=e.daysPerYear*t.d,t}(r),a=e.toLowerCase().replace(/[^.\w+-]+/g,"").match(/[-+]?[0-9.]+[a-z]+/g);if(null===a)throw new Error(`The string [${e}] could not be parsed by timestring`);if(a.forEach((e=>{let t=e.match(/[0-9.]+/g)[0],n=e.match(/[a-z]+/g)[0];i+=function(e,t,n){return e*n[o(t)]}(t,n,s)})),n)return function(e,t,n){return e/n[o(t)]}(i,n,s);return i};const t={hoursPerDay:24,daysPerWeek:7,weeksPerMonth:4,monthsPerYear:12,daysPerYear:365.25},n={ms:["ms","milli","millisecond","milliseconds"],s:["s","sec","secs","second","seconds"],m:["m","min","mins","minute","minutes"],h:["h","hr","hrs","hour","hours"],d:["d","day","days"],w:["w","week","weeks"],mth:["mon","mth","mths","month","months"],y:["y","yr","yrs","year","years"]};function o(e){for(let t of Object.keys(n))if(n[t].indexOf(e)>-1)return t;throw new Error(`The unit [${e}] is not supported by timestring`)}}},l={};function d(e){if(l[e])return l[e].exports;var t=l[e]={id:e,loaded:!1,exports:{}};return a[e].call(t.exports,t,t.exports,d),t.loaded=!0,t.exports}d.m=a,d.x=e=>{},d.amdD=function(){throw new Error("define cannot be used indirect")},d.F={},d.E=e=>{Object.keys(d.F).map((t=>{d.F[t](e)}))},t=Object.getPrototypeOf?e=>Object.getPrototypeOf(e):e=>e.__proto__,d.t=function(n,o){if(1&o&&(n=this(n)),8&o)return n;if("object"==typeof n&&n){if(4&o&&n.__esModule)return n;if(16&o&&"function"==typeof n.then)return n}var r=Object.create(null);d.r(r);var i={};e=e||[null,t({}),t([]),t(t)];for(var s=2&o&&n;"object"==typeof s&&!~e.indexOf(s);s=t(s))Object.getOwnPropertyNames(s).forEach((e=>i[e]=()=>n[e]));return i.default=()=>n,d.d(r,i),r},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+"."+{331:"68bf8bc4848d486339f2",524:"288d983898e422d327a5"}[e]+".js",d.miniCssF=e=>e+".c1e3e33e0a077e7664eb.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={},o="p3x-redis-ui-material:",d.l=(e,t,r,i)=>{if(n[e])n[e].push(t);else{var s,a;if(void 0!==r)for(var l=document.getElementsByTagName("script"),c=0;c<l.length;c++){var m=l[c];if(m.getAttribute("src")==e||m.getAttribute("data-webpack")==o+r){s=m;break}}s||(a=!0,(s=document.createElement("script")).charset="utf-8",s.timeout=120,d.nc&&s.setAttribute("nonce",d.nc),s.setAttribute("data-webpack",o+r),s.src=e),n[e]=[t];var u=(t,o)=>{s.onerror=s.onload=null,clearTimeout(p);var r=n[e];if(delete n[e],s.parentNode&&s.parentNode.removeChild(s),r&&r.forEach((e=>e(o))),t)return t(o)},p=setTimeout(u.bind(null,void 0,{type:"timeout",target:s}),12e4);s.onerror=u.bind(null,s.onerror),s.onload=u.bind(null,s.onload),a&&document.head.appendChild(s)}},d.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},d.nmd=e=>(e.paths=[],e.children||(e.children=[]),e),d.p="",r=e=>new Promise(((t,n)=>{var o=d.miniCssF(e),r=d.p+o;if(((e,t)=>{for(var n=document.getElementsByTagName("link"),o=0;o<n.length;o++){var r=(s=n[o]).getAttribute("data-href")||s.getAttribute("href");if("stylesheet"===s.rel&&(r===e||r===t))return s}var i=document.getElementsByTagName("style");for(o=0;o<i.length;o++){var s;if((r=(s=i[o]).getAttribute("data-href"))===e||r===t)return s}})(o,r))return t();((e,t,n,o)=>{var r=document.createElement("link");r.rel="stylesheet",r.type="text/css",r.onerror=r.onload=i=>{if(r.onerror=r.onload=null,"load"===i.type)n();else{var s=i&&("load"===i.type?"missing":i.type),a=i&&i.target&&i.target.href||t,l=new Error("Loading CSS chunk "+e+" failed.\n("+a+")");l.code="CSS_CHUNK_LOAD_FAILED",l.type=s,l.request=a,r.parentNode.removeChild(r),o(l)}},r.href=t,document.head.appendChild(r)})(e,r,t,n)})),i={179:0},d.f.miniCss=(e,t)=>{i[e]?t.push(i[e]):0!==i[e]&&{331:1}[e]&&t.push(i[e]=r(e).then((()=>{i[e]=0}),(t=>{throw delete i[e],t})))},(()=>{var e={179:0};d.f.j=(t,n)=>{var o=d.o(e,t)?e[t]:void 0;if(0!==o)if(o)n.push(o[2]);else if(524==t){var r=new Promise(((n,r)=>{o=e[t]=[n,r]}));n.push(o[2]=r);var i=d.p+d.u(t),s=new Error;d.l(i,(n=>{if(d.o(e,t)&&(0!==(o=e[t])&&(e[t]=void 0),o)){var r=n&&("load"===n.type?"missing":n.type),i=n&&n.target&&n.target.src;s.message="Loading chunk "+t+" failed.\n("+r+": "+i+")",s.name="ChunkLoadError",s.type=r,s.request=i,o[1](s)}}),"chunk-"+t,t)}else e[t]=0},d.F.j=t=>{if((!d.o(e,t)||void 0===e[t])&&524==t){e[t]=null;var n=document.createElement("link");d.nc&&n.setAttribute("nonce",d.nc),n.rel="prefetch",n.as="script",n.href=d.p+d.u(t),document.head.appendChild(n)}};var t=(t,n)=>{for(var o,r,[i,s,a]=n,l=0,c=[];l<i.length;l++)r=i[l],d.o(e,r)&&e[r]&&c.push(e[r][0]),e[r]=0;for(o in s)d.o(s,o)&&(d.m[o]=s[o]);for(a&&a(d),t&&t(n);c.length;)c.shift()()},n=self.webpackChunkp3x_redis_ui_material=self.webpackChunkp3x_redis_ui_material||[];n.forEach(t.bind(null,0)),n.push=t.bind(null,n.push.bind(n))})(),s=d.x,d.x=()=>{var e=s();return d.E(331),d.E(524),e},d(8565),d(5498),d.g.p3xr=d.g.p3xr||{},p3xr.destroy=()=>{},p3xr.theme={dark:void 0,light:void 0},p3xr.ui={overlay:void 0,htmlEncode:d.g.htmlEncode},d(4380),d(3581),d(6399),d(7943),d(4117),d(8820),d(9567),d(7293),d(8308),d(6566),d(7804),p3xr.settings.language.translation.en=d(3555),p3xr.settings.language.translation.zn=d(7885),d(6996),d.x()})();