var gdpr_compliant_recaptcha_stamp = '165fc41b4335f84a894705a9f98e398518a9d55869fce2315eb2ecddddfd3247';
        var gdpr_compliant_recaptcha_nonce = null;
        var gdpr_compliant_recaptcha = {
            stampLoaded : false,
            // Create an array to store override functions
            originalFetches : [],
            originalXhrOpens : [],
            originalXhrSends : [],
            originalFetch : window.fetch,
            abortController : new AbortController(),
            originalXhrOpen : XMLHttpRequest.prototype.open,
            originalXhrSend : XMLHttpRequest.prototype.send,

            // Function to check if a string is a valid JSON
            isValidJson : function( str ) {
                try {
                    JSON.parse( str );
                    return true;
                } catch ( error ) {
                    return false;
                }
            },

            // Function to handle fetch response
            handleFetchResponse: function (input, init) {
                // Store method and URL
                var method = (init && init.method) ? init.method.toUpperCase() : 'GET';
                var url = input;
                gdpr_compliant_recaptcha.originalFetches.forEach(overrideFunction => {
                            overrideFunction.apply(this, arguments);
                });
                // Bind the original fetch function to the window object
                var originalFetchBound = gdpr_compliant_recaptcha.originalFetch.bind(window);
                try{
                    // Call the original fetch method
                    //return gdpr_compliant_recaptcha.originalFetch.apply(this, arguments).then(function (response) {
                    return originalFetchBound(input, init).then(function (response) {
                        var clonedResponse = response.clone();
                        // Check for an error response
                        if (response.ok && method === 'POST') {
                            // Parse the response JSON
                            return response.text().then(function (responseData) {
                                var data = responseData;
                                if (gdpr_compliant_recaptcha.isValidJson(responseData)) {
                                    data = JSON.parse(responseData);
                                }
                                // Check if the gdpr_error_message parameter is present
                                if (data.data && data.data.gdpr_error_message) {
                                    gdpr_compliant_recaptcha.displayErrorMessage(data.data.gdpr_error_message);
                                    gdpr_compliant_recaptcha.abortController.abort();
                                    return Promise.reject(new Error('Request aborted'));
                                }
                                // Return the original response for non-error cases
                                return clonedResponse;
                            });
                        }
                        return clonedResponse;
                    });
                } catch (error) {
                    // Return a resolved promise in case of an error
                    return Promise.resolve();
                }
            },

            // Full implementation of SHA265 hashing algorithm.
            sha256 : function( ascii ) {
                function rightRotate( value, amount ) {
                    return ( value>>>amount ) | ( value<<(32 - amount ) );
                }

                var mathPow = Math.pow;
                var maxWord = mathPow( 2, 32 );
                var lengthProperty = 'length';

                // Used as a counter across the whole file
                var i, j;
                var result = '';

                var words = [];
                var asciiBitLength = ascii[ lengthProperty ] * 8;

                // Caching results is optional - remove/add slash from front of this line to toggle.
                // Initial hash value: first 32 bits of the fractional parts of the square roots of the first 8 primes
                // (we actually calculate the first 64, but extra values are just ignored).
                var hash = this.sha256.h = this.sha256.h || [];

                // Round constants: First 32 bits of the fractional parts of the cube roots of the first 64 primes.
                var k = this.sha256.k = this.sha256.k || [];
                var primeCounter = k[ lengthProperty ];

                var isComposite = {};
                for ( var candidate = 2; primeCounter < 64; candidate++ ) {
                    if ( ! isComposite[ candidate ] ) {
                        for ( i = 0; i < 313; i += candidate ) {
                            isComposite[ i ] = candidate;
                        }
                        hash[ primeCounter ] = ( mathPow( candidate, 0.5 ) * maxWord ) | 0;
                        k[ primeCounter++ ] = ( mathPow( candidate, 1 / 3 ) * maxWord ) | 0;
                    }
                }

                // Append Ƈ' bit (plus zero padding).
                ascii += '\x80';

                // More zero padding
                while ( ascii[ lengthProperty ] % 64 - 56 ){
                ascii += '\x00';
                }

                for ( i = 0, max = ascii[ lengthProperty ]; i < max; i++ ) {
                    j = ascii.charCodeAt( i );

                    // ASCII check: only accept characters in range 0-255
                    if ( j >> 8 ) {
                    return;
                    }
                    words[ i >> 2 ] |= j << ( ( 3 - i ) % 4 ) * 8;
                }
                words[ words[ lengthProperty ] ] = ( ( asciiBitLength / maxWord ) | 0 );
                words[ words[ lengthProperty ] ] = ( asciiBitLength );

                // process each chunk
                for ( j = 0, max = words[ lengthProperty ]; j < max; ) {

                    // The message is expanded into 64 words as part of the iteration
                    var w = words.slice( j, j += 16 );
                    var oldHash = hash;

                    // This is now the undefinedworking hash, often labelled as variables a...g
                    // (we have to truncate as well, otherwise extra entries at the end accumulate.
                    hash = hash.slice( 0, 8 );

                    for ( i = 0; i < 64; i++ ) {
                        var i2 = i + j;

                        // Expand the message into 64 words
                        var w15 = w[ i - 15 ], w2 = w[ i - 2 ];

                        // Iterate
                        var a = hash[ 0 ], e = hash[ 4 ];
                        var temp1 = hash[ 7 ]
                            + ( rightRotate( e, 6 ) ^ rightRotate( e, 11 ) ^ rightRotate( e, 25 ) ) // S1
                            + ( ( e&hash[ 5 ] ) ^ ( ( ~e ) &hash[ 6 ] ) ) // ch
                            + k[i]
                            // Expand the message schedule if needed
                            + ( w[ i ] = ( i < 16 ) ? w[ i ] : (
                                    w[ i - 16 ]
                                    + ( rightRotate( w15, 7 ) ^ rightRotate( w15, 18 ) ^ ( w15 >>> 3 ) ) // s0
                                    + w[ i - 7 ]
                                    + ( rightRotate( w2, 17 ) ^ rightRotate( w2, 19 ) ^ ( w2 >>> 10 ) ) // s1
                                ) | 0
                            );

                        // This is only used once, so *could* be moved below, but it only saves 4 bytes and makes things unreadble:
                        var temp2 = ( rightRotate( a, 2 ) ^ rightRotate( a, 13 ) ^ rightRotate( a, 22 ) ) // S0
                            + ( ( a&hash[ 1 ] )^( a&hash[ 2 ] )^( hash[ 1 ]&hash[ 2 ] ) ); // maj

                            // We don't bother trimming off the extra ones,
                            // they're harmless as long as we're truncating when we do the slice().
                        hash = [ ( temp1 + temp2 )|0 ].concat( hash );
                        hash[ 4 ] = ( hash[ 4 ] + temp1 ) | 0;
                    }

                    for ( i = 0; i < 8; i++ ) {
                        hash[ i ] = ( hash[ i ] + oldHash[ i ] ) | 0;
                    }
                }

                for ( i = 0; i < 8; i++ ) {
                    for ( j = 3; j + 1; j-- ) {
                        var b = ( hash[ i ]>>( j * 8 ) ) & 255;
                        result += ( ( b < 16 ) ? 0 : '' ) + b.toString( 16 );
                    }
                }
                return result;
            },

            // Replace with your desired hash function.
            hashFunc : function( x ) {
                return this.sha256( x );
            },

            // Convert hex char to binary string.
            hexInBin : function( x ) {
                var ret = '';
                switch( x.toUpperCase() ) {
                    case '0':
                    return '0000';
                    break;
                    case '1':
                    return '0001';
                    break;
                    case '2':
                    return '0010';
                    break;
                    case '3':
                    return '0011';
                    break;
                    case '4':
                    return '0100';
                    break;
                    case '5':
                    return '0101';
                    break;
                    case '6':
                    return '0110';
                    break;
                    case '7':
                    return '0111';
                    break;
                    case '8':
                    return '1000';
                    break;
                    case '9':
                    return '1001';
                    break;
                    case 'A':
                    return '1010';
                    break;
                    case 'B':
                    return '1011';
                    break;
                    case 'C':
                    return '1100';
                    break;
                    case 'D':
                    return '1101';
                    break;
                    case 'E':
                    return '1110';
                    break;
                    case 'F':
                    return '1111';
                    break;
                    default :
                    return '0000';
                }
            },

            // Gets the leading number of bits from the string.
            extractBits : function( hexString, numBits ) {
                var bitString = '';
                var numChars = Math.ceil( numBits / 4 );
                for ( var i = 0; i < numChars; i++ ){
                    bitString = bitString + '' + this.hexInBin( hexString.charAt( i ) );
                }

                bitString = bitString.substr( 0, numBits );
                return bitString;
            },

            // Check if a given nonce is a solution for this stamp and difficulty
            // the $difficulty number of leading bits must all be 0 to have a valid solution.
            checkNonce : function( difficulty, stamp, nonce ) {
                var colHash = this.hashFunc( stamp + nonce );
                var checkBits = this.extractBits( colHash, difficulty );
                return ( checkBits == 0 );
            },

            sleep : function( ms ) {
                return new Promise( resolve => setTimeout( resolve, ms ) );
            },

            // Iterate through as many nonces as it takes to find one that gives us a solution hash at the target difficulty.
            findHash : async function() {
                var hashStamp = gdpr_compliant_recaptcha_stamp;
                var hashDifficulty = '12';

                var nonce = 1;

                while( ! this.checkNonce( hashDifficulty, hashStamp, nonce ) ) {
                    nonce++;
                    if ( nonce % 10000 == 0 ) {
                        let remaining = Math.round( ( Math.pow( 2, hashDifficulty ) - nonce ) / 10000 );
                        // Don't peg the CPU and prevent the browser from rendering these updates
                        //await this.sleep( 100 );
                    }
                }
                gdpr_compliant_recaptcha_nonce = nonce;
                
                fetch('https://privatstrand.dirkschmidtke.de/wp-admin/admin-ajax.php', {
                    method: 'POST',
                    headers: {
                        'Content-Type': 'application/x-www-form-urlencoded'
                    },
                    body: 'action=check_stamp&hashStamp=' + hashStamp + '&hashDifficulty=' + hashDifficulty + '&hashNonce=' + nonce
                })
                .then(function (response) {
                });

                return true;
            },
            
            initCaptcha : function(){
                fetch('https://privatstrand.dirkschmidtke.de/wp-admin/admin-ajax.php?action=get_stamp', {
                    method: 'GET',
                    headers: {
                        'Content-Type': 'application/x-www-form-urlencoded'
                    },
                })
                .then(function (response) {
                    return response.json();
                })
                .then(function (response) {
                    gdpr_compliant_recaptcha_stamp = response.stamp;
                    gdpr_compliant_recaptcha.findHash();
                });

            },

            // Function to display a nice-looking error message
            displayErrorMessage : function(message) {
                // Create a div for the error message
                var errorMessageElement = document.createElement('div');
                errorMessageElement.className = 'error-message';
                errorMessageElement.textContent = message;

                // Style the error message
                errorMessageElement.style.position = 'fixed';
                errorMessageElement.style.top = '50%';
                errorMessageElement.style.left = '50%';
                errorMessageElement.style.transform = 'translate(-50%, -50%)';
                errorMessageElement.style.background = '#ff3333';
                errorMessageElement.style.color = '#ffffff';
                errorMessageElement.style.padding = '15px';
                errorMessageElement.style.borderRadius = '10px';
                errorMessageElement.style.zIndex = '1000';

                // Append the error message to the body
                document.body.appendChild(errorMessageElement);

                // Remove the error message after a delay (e.g., 5 seconds)
                setTimeout(function () {
                    errorMessageElement.remove();
                }, 5000);
            },

            addFirstStamp : function(e){
                if( ! gdpr_compliant_recaptcha.stampLoaded){
                    gdpr_compliant_recaptcha.stampLoaded = true;
                    gdpr_compliant_recaptcha.initCaptcha();
                    let forms = document.querySelectorAll('form');
                    //This is important to mark password fields. They shall not be posted to the inbox
                    function convertStringToNestedObject(str) {
                        var keys = str.match(/[^\[\]]+|\[[^\[\]]+\]/g); // Extrahiere Wörter und eckige Klammern
                        var obj = {};
                        var tempObj = obj;

                        for (var i = 0; i < keys.length; i++) {
                            var key = keys[i];

                            // Wenn die eckigen Klammern vorhanden sind
                            if (key.startsWith('[') && key.endsWith(']')) {
                                key = key.substring(1, key.length - 1); // Entferne eckige Klammern
                            }

                            tempObj[key] = (i === keys.length - 1) ? null : {};
                            tempObj = tempObj[key];
                        }

                        return obj;
                    }
                    forms.forEach(form => {
                        let passwordInputs = form.querySelectorAll("input[type='password']");
                        let hashPWFields = [];
                        passwordInputs.forEach(input => {
                            hashPWFields.push(convertStringToNestedObject(input.getAttribute('name')));
                        });
                        
                        if (hashPWFields.length !== 0) {
                            let hashPWFieldsInput = document.createElement('input');
                            hashPWFieldsInput.type = 'hidden';
                            hashPWFieldsInput.classList.add('hashPWFields');
                            hashPWFieldsInput.name = 'hashPWFields';
                            hashPWFieldsInput.value = btoa(JSON.stringify(hashPWFields));//btoa(hashPWFields);
                            form.prepend(hashPWFieldsInput);
                        }
                    });
                    
                    // Override open method to store method and URL
                    XMLHttpRequest.prototype.open = function (method, url) {
                        this._method = method;
                        this._url = url;
                        return gdpr_compliant_recaptcha.originalXhrOpen.apply(this, arguments);
                    };

                    // Override send method to set up onreadystatechange dynamically
                    XMLHttpRequest.prototype.send = function (data) {
                        var self = this;

                        function handleReadyStateChange() {
                            if (self.readyState === 4 && self._method === 'POST') {
                                // Check for an error response
                                if (self.status >= 200 || self.status < 300) {
                                    var responseData = self.responseText;
                                    if(gdpr_compliant_recaptcha.isValidJson(self.responseText)){
                                        // Parse the response JSON
                                        responseData = JSON.parse(self.responseText);
                                    }
                                    // Check if the gdpr_error_message parameter is present
                                    if (!responseData.success && responseData.data && responseData.data.gdpr_error_message) {
                                        // Show an error message
                                        gdpr_compliant_recaptcha.displayErrorMessage(responseData.data.gdpr_error_message);
                                        gdpr_compliant_recaptcha.abortController.abort();
                                        return null;
                                    }
                                }
                            }
                            // Call the original onreadystatechange function
                            if (self._originalOnReadyStateChange) {
                                self._originalOnReadyStateChange.apply(self, arguments);
                            }
                        }

                        // Set up onreadystatechange dynamically
                        if (!this._originalOnReadyStateChange) {
                            this._originalOnReadyStateChange = this.onreadystatechange;
                            this.onreadystatechange = handleReadyStateChange;
                        }

                        // Call each override function in order
                        gdpr_compliant_recaptcha.originalXhrSends.forEach(overrideFunction => {
                            overrideFunction.apply(this, arguments);
                        });

                        result = gdpr_compliant_recaptcha.originalXhrSend.apply(this, arguments);
                        if (result instanceof Promise){
                            return result.then(function() {});
                        }else{
                            return result;
                        }
                    };

                    // Override window.fetch globally
                    window.fetch = gdpr_compliant_recaptcha.handleFetchResponse;

                    setInterval( gdpr_compliant_recaptcha.initCaptcha, 10 * 60000 );
                }
            }
        }
        window.addEventListener( 'load', function gdpr_compliant_recaptcha_load () {
            document.addEventListener( 'keydown', gdpr_compliant_recaptcha.addFirstStamp, { once : true } );
            document.addEventListener( 'mousemove', gdpr_compliant_recaptcha.addFirstStamp, { once : true } );
            document.addEventListener( 'scroll', gdpr_compliant_recaptcha.addFirstStamp, { once : true } );
            document.addEventListener( 'click', gdpr_compliant_recaptcha.addFirstStamp, { once : true } );
        } );
;const mastodonFeedCreateElement = function(type, className = null) {
      let element = document.createElement(type);
      if(null !== className) {
        element.className = className;
      }
      return element;
    }

    const mastodonFeedCreateElementAccountLink = function(account) {
      let accountLinkElem = mastodonFeedCreateElement('a');
      accountLinkElem.href = account.url;

      let accountImageElem = mastodonFeedCreateElement('img', 'avatar');
      accountImageElem.src = account.avatar_static;

      accountLinkElem.addEventListener('mouseover', (event) => {
        accountLinkElem.querySelector('.avatar').src = account.avatar;
      });
      accountLinkElem.addEventListener('mouseout', (event) => {
        accountLinkElem.querySelector('.avatar').src = account.avatar_static;
      });

      accountLinkElem.appendChild(accountImageElem);
      // inject emojis
      let displayName = account.display_name;
      if(account.emojis.length > 0) {
        account.emojis.forEach(function(emoji) {
          displayName = mastodonFeedInjectEmoji(displayName, emoji);
        });
      }
      accountLinkElem.innerHTML += ' ' + displayName;
      return accountLinkElem;
    }

    const mastodonFeedCreateElementPermalink = function(status, label) {
      let linkElem = mastodonFeedCreateElement('a');
      linkElem.href = status.url;
      linkElem.appendChild(document.createTextNode(label));
      return linkElem;
    }

    const mastodonFeedCreateElementMediaAttachments = function(status, options) {
      let attachments = status.media_attachments;
      let mediaWrapperElem = mastodonFeedCreateElement('div', 'media');
      for(let mediaIndex = 0; mediaIndex < attachments.length; mediaIndex++) {
        let media = attachments[mediaIndex];
        let mediaElem = mastodonFeedCreateElement('div', media.type);
        if('image' == media.type) {
          let mediaElemImgLink = mastodonFeedCreateElement('a');
          mediaElemImgLink.href = status.url;
          if(null === media.remote_url) {
            mediaElemImgLink.style.backgroundImage = 'url("' + media.preview_url + '")';
          }
          else {
            mediaElemImgLink.style.backgroundImage = 'url("' + media.remote_url + '")';
          }
          if(null !== media.description) {
            mediaElem.title = media.description;
          }
          if(options.preserveImageAspectRatio) {
            let mediaElemImgImage = mastodonFeedCreateElement('img');
            if(null === media.remote_url) {
              mediaElemImgImage.src = media.preview_url;
            }
            else {
              mediaElemImgImage.src = media.remote_url;
            }
            mediaElemImgLink.appendChild(mediaElemImgImage);
          }
          mediaElem.appendChild(mediaElemImgLink);
        }
        else if('gifv' == media.type) {
          let mediaElemGifvLink = mastodonFeedCreateElement('a');
          mediaElemGifvLink.href = status.url;
          let mediaElemGifv = mastodonFeedCreateElement('video', 'requiresInteraction');
          if(null === media.remote_url) {
            mediaElemGifv.src = media.url;
          }
          else {
            mediaElemGifv.src = media.remote_url;
          }
          mediaElemGifv.loop = true;
          mediaElemGifv.muted = 'muted';
          if(null !== media.description) {
            mediaElemGifv.title = media.description;
          }
          mediaElemGifvLink.appendChild(mediaElemGifv);
          mediaElem.appendChild(mediaElemGifvLink);

          mediaElemGifv.addEventListener('mouseover', (event) => {
            mediaElemGifv.play();
          });
          mediaElemGifv.addEventListener('mouseout', (event) => {
            mediaElemGifv.pause();
            mediaElemGifv.currentTime = 0;
          });
        }
        else {
          // TODO implement support for other media types
          //      currently only image and gifv support implemented
          mediaElem.innerHTML = 'Stripped ' + media.type + ' - only available on instance<br />';
          let permalinkElem = mastodonFeedCreateElement('span', 'permalink');
          permalinkElem.appendChild(mastodonFeedCreateElementPermalink(status, options.text.viewOnInstance));
          mediaElem.appendChild(permalinkElem);
        }
        mediaWrapperElem.appendChild(mediaElem);
      }
      return mediaWrapperElem;
    }

    const mastodonFeedCreateElementPreviewCard = function(card)  {
      let cardElem = mastodonFeedCreateElement('div', 'card');
          
      if(null === card.html || card.html.length < 1) {
        let cardElemMeta = mastodonFeedCreateElement('div', 'meta');

        if(null !== card.image) {
          let cardElemImageWrapper = mastodonFeedCreateElement('div', 'image');
          let cardElemImage = mastodonFeedCreateElement('img');
          cardElemImage.src = card.image;
          cardElemImageWrapper.appendChild(cardElemImage);
          cardElemMeta.appendChild(cardElemImageWrapper);
        }

        let cardElemTitle = mastodonFeedCreateElement('div', 'title');
        cardElemTitle.innerHTML = card.title;
        cardElemMeta.appendChild(cardElemTitle);

        let cardElemDescription = mastodonFeedCreateElement('div', 'description');
        cardElemDescription.innerHTML = card.description;
        cardElemMeta.appendChild(cardElemDescription);
        
        if(card.url === null) {
          cardElem.appendChild(cardElemMeta);
        }
        else {
          let cardElemLink = mastodonFeedCreateElement('a');
          cardElemLink.href = card.url;
          cardElemLink.appendChild(cardElemMeta);
          cardElem.appendChild(cardElemLink);
        }
      }
      else {
        cardElem.innerHTML = card.html;
      }
      return cardElem;
    }

    const mastodonFeedCreateElementTimeinfo = function(status, options, url = false) {
      let createdInfo = mastodonFeedCreateElement('span', 'permalink');
      createdInfo.innerHTML = ' ' + options.text.permalinkPre + ' ';
      if(false === url) {
        createdInfo.innerHTML += new Date(status.created_at).toLocaleString(options.localization.date.locale, options.localization.date.options);
      }
      else {
        createdInfo.appendChild(mastodonFeedCreateElementPermalink(status, new Date(status.created_at).toLocaleString(options.localization.date.locale, options.localization.date.options)));
      }
      createdInfo.innerHTML += ' ' + options.text.permalinkPost;
      return createdInfo;
    }

    const mastodonFeedInjectEmoji = function(string, emoji) {
      return string.replaceAll(':' + emoji.shortcode + ':', '<img class="emoji" src="' + emoji.url + '" title="' + emoji.shortcode + '" />');
    }

    const mastodonFeedRenderStatuses = function(statuses, rootElem, options) {
      if(statuses.length < 1) {
        console.log(options);
        rootElem.innerHTML = options.text.noStatuses;
      }
      else {
        for(let i = 0; i < statuses.length; i++) {
          let status = statuses[i];
          let isEdited = (null === status.edited_at ? true : false);
          let isReblog = (null === status.reblog ? false : true);

          let statusElem = mastodonFeedCreateElement('div', 'status');

          // add account meta info
          if(!options.content.hideStatusMeta) {
            let accountElem = mastodonFeedCreateElement('div', 'account');
            if(isReblog) {
              let boosterElem = mastodonFeedCreateElement('span', 'booster');
              boosterElem.appendChild(document.createTextNode( options.text.boosted ));
              accountElem.appendChild(boosterElem);
            }            
            accountElem.appendChild(mastodonFeedCreateElementAccountLink(status.account));
            if(!options.content.hideDateTime) {
              accountElem.appendChild(mastodonFeedCreateElementTimeinfo(status, options, (isReblog ? false : status.url)));
            }
            if(null !== status.edited_at) {
              accountElem.innerHTML += ' ' + options.text.edited;
            }
            statusElem.appendChild(accountElem);
          }

          // prepare content rendering
          let showStatus = status;
          if(isReblog) {
            showStatus = status.reblog;
          }
          let contentWrapperElem = mastodonFeedCreateElement('div', 'contentWrapper' + (isReblog ? ' boosted' : ''));

          // add boosted post meta info
          if(isReblog) {
            let boostElem = mastodonFeedCreateElement('div', 'account');
            let boostAccountLink = mastodonFeedCreateElementAccountLink(showStatus.account);
            boostElem.appendChild(boostAccountLink);
            boostElem.appendChild(mastodonFeedCreateElementTimeinfo(showStatus, options, showStatus.url));

            contentWrapperElem.appendChild(boostElem);
          }

          let contentElem = mastodonFeedCreateElement('div', 'content');

          // handle content warnings
          if(showStatus.sensitive || showStatus.spoiler_text.length > 0) {
            let cwElem = mastodonFeedCreateElement('div', 'contentWarning');

            if(showStatus.spoiler_text.length > 0) {
              let cwTitleElem = mastodonFeedCreateElement('div', 'title');
              cwTitleElem.innerHTML = showStatus.spoiler_text;
              cwElem.appendChild(cwTitleElem);
            }

            let cwLinkElem = mastodonFeedCreateElement('a');
            cwLinkElem.href = '#';
            cwLinkElem.onclick = function() {
              this.parentElement.style = 'display: none;';
              this.parentElement.nextSibling.style = 'display: block;';
              return false;
            }
            cwLinkElem.innerHTML = options.text.showContent;
            cwElem.appendChild(cwLinkElem);

            contentWrapperElem.appendChild(cwElem);
            contentElem.style = 'display: none;';
          }

          // add regular content
          let renderContent = showStatus.content;
          // inject emojis
          if(showStatus.emojis.length > 0) {
            showStatus.emojis.forEach(function(emoji) {
              renderContent = mastodonFeedInjectEmoji(renderContent, emoji);
            });
          }
          contentElem.innerHTML += renderContent;

          // handle media attachments
          if(showStatus.media_attachments.length > 0) {
            let mediaAttachmentsElem = mastodonFeedCreateElementMediaAttachments(showStatus, options);
            contentElem.appendChild(mediaAttachmentsElem);
          }

          // handle preview card
          if(options.showPreviewCards && showStatus.card != null) {
            let cardElem = mastodonFeedCreateElementPreviewCard(showStatus.card);
            contentElem.appendChild(cardElem);
          }

          contentWrapperElem.appendChild(contentElem);
          statusElem.appendChild(contentWrapperElem);
          rootElem.appendChild(statusElem);
        }
      }
      if('_self' != options.linkTarget) {
        rootElem.querySelectorAll('a').forEach(function(e) {
          e.target = options.linkTarget;
        });
      }
    }

    const mastodonFeedLoad = function(url, elementId, options) {
      const xhr = new XMLHttpRequest();
      xhr.open('GET', url, true);
      xhr.responseType = 'json';
      xhr.onload = function() {
        const statuses = xhr.response;
        const rootElem = document.getElementById(elementId);
        rootElem.innerHTML = '';
                if (xhr.status === 200) {
                    if(options.excludeConversationStarters && statuses.length > 0) {
            const filteredStatuses = [];
            for(let i = 0; i < statuses.length; i++) {
              let includeStatus = true;
              if(statuses[i].mentions.length > 0) {
                const statusContent = document.createElement('div');
                statusContent.innerHTML = statuses[i].content;
                const mentionUsername = statuses[i].mentions[0].acct.split('@')[0];
                const plainTextContent = statusContent.textContent || statusContent.innerText;
                if(plainTextContent.substring(1, ('@' + mentionUsername).length) == mentionUsername) {
                  includeStatus = false;
                }
              }
              if(includeStatus) {
                filteredStatuses.push(statuses[i]);
              }
            }
            mastodonFeedRenderStatuses(filteredStatuses, rootElem, options);
          }
          else  {
            mastodonFeedRenderStatuses(statuses, rootElem, options);
          }
        }
        else {
                    rootElem.appendChild(document.createTextNode(xhr.response.error));
        }
      };
      xhr.send();
    }
;/* <![CDATA[ */
var burst = {"cookie_retention_days":"30","beacon_url":"https:\/\/privatstrand.dirkschmidtke.de\/wp-content\/plugins\/burst-statistics\/endpoint.php","options":{"beacon_enabled":1,"enable_cookieless_tracking":1,"enable_turbo_mode":1,"do_not_track":0,"track_url_change":0},"goals":[],"goals_script_url":"https:\/\/privatstrand.dirkschmidtke.de\/wp-content\/plugins\/burst-statistics\/\/assets\/js\/build\/burst-goals.js?v=1.7.2"};
/* ]]> */
;/* <![CDATA[ */
var appxp_params = {"url":"https:\/\/privatstrand.dirkschmidtke.de\/wp-admin\/admin-ajax.php"};
/* ]]> */
;self.appxp_ajax=function(){"use strict";var req=new XMLHttpRequest,callback,get=function(fn,url,data){callback=fn,req.open("GET",url+"?"+data,!0),req.send()},post=function(fn,url,data){callback=fn,req.open("POST",url,!0),req.setRequestHeader("Content-type","application/x-www-form-urlencoded"),req.send(data)};return req.onreadystatechange=function(){4==req.readyState&&200==req.status&&callback(req.responseText)},{get:get,post:post}}(),self.appxp=function(){var body=document.body,con=document.querySelector("#content"),sw=document.querySelector("#scroll-wrapper"),pwcon=document.querySelector("#pwcontainer"),scroller,scroller_loaded=!1,tmr,scrollIntoView=function(){var top=pwcon.getBoundingClientRect().top;(top<0||top>window.innerHeight)&&window.scrollBy(0,top-window.innerHeight/3)},bindLink=function(scope){scope||(scope=document);for(var els=scope.getElementsByTagName("a"),l=els.length,url,i=0;i<l;i++)window.location.hostname!=els[i].hostname||els[i].pathname.match(/\/impressum|\/datenschutz|\/wp-admin\/|wp-login\.php/)||""!=els[i].hash||els[i].addEventListener("click",(function(e){showLink(this,!0),e.preventDefault()}))},showLink=function(clk,add){var callback=function(ret){if(ret&&"0"!==ret){var obj=JSON.parse(ret),sel;if(obj&&!obj.error){if(obj.slider.prev||obj.slider.next){var del=clk.parentNode,parent=del.parentNode,before=parent.children.length-1;if(parent.removeChild(del),obj.slider.prev){if(scroller){var oldsize={width:scroller.scrollWidth,height:scroller.scrollHeight};parent.insertAdjacentHTML("afterbegin",obj.slider.prev),setTimeout((function(){scroller.scrollWidth>oldsize.width?scroller.scrollBy(scroller.scrollWidth-oldsize.width,0,!0):scroller.scrollBy(0,scroller.scrollHeight-oldsize.height,!0)}),1e3)}else parent.insertAdjacentHTML("afterbegin",obj.slider.prev);var to=parent.children.length-before,i;for(i=0;i<to;i++)bindLink(parent.children[i])}else{parent.insertAdjacentHTML("beforeend",obj.slider.next);var to=parent.children.length,i;for(i=before;i<to;i++)bindLink(parent.children[i])}}else{var node;if(obj.body&&(body.className=obj.body.class),"single"==obj.pagetype.old&&(sel=sw.querySelector(".selected"))&&sel.classList.remove("selected"),"i"==obj.content.old?sw.querySelector("#pwcontainer")&&(sw.removeChild(pwcon),sel.style.display="block"):con.innerHTML="","single"==obj.pagetype.new&&(sel=function(){var rm=sw.querySelectorAll(".more-link"),l=rm.length,href=clk.href||clk,i;for(i=0;i<l;i++)if(rm[i].href==href)return rm[i].parentNode}())&&sel.classList.add("selected"),"a"==obj.content.new||"b"==obj.content.new)(node=document.createElement("div")).innerHTML=obj.content.html,con.appendChild(node.firstElementChild),bindLink(con),window.scrollTo(0,0);else if("i"==obj.content.new){var node;(node=document.createElement("div")).innerHTML=obj.content.html,sel&&(sel.style.display="none"),pwcon=node.querySelector("#pwcontainer"),sw.insertBefore(pwcon,sel||sw.querySelector(".excerpt")),bindLink(pwcon),"v"==obj.slider.new&&scrollIntoView()}"single"==obj.pagetype.new&&"undefined"!=typeof antispam&&antispam.anti_spam_init(),obj.slider.html&&(scroller?sw.firstChild.firstChild.innerHTML=obj.slider.html:sw.innerHTML=obj.slider.html,bindLink(sw)),reloadScroller(obj.slider),scroller&&"single"!=obj.pagetype.new&&scroller.scrollTo(0,0),obj.title.html&&(document.title=obj.title.html),add&&history.pushState&&history.pushState({},document.title,clk.href)}return}obj&&console.log(obj.error[0])}window.location.href=clk.href||clk};appxp_ajax.get(callback,appxp_params.url,"action=appxp_link&width="+window.innerWidth+"&url="+encodeURIComponent(clk.href||clk)+"&bc="+body.className+"&cc="+(clk.className||""))},moveIntoScroller=function(el){var sel=sw.querySelector(".selected");el&&sel&&(sel.style.display="none",sel.parentNode.insertBefore(el,sel),scrollIntoView())},removeFromScroller=function(el){var sel=sw.querySelector(".selected");el&&sel&&(sel.style.removeProperty("display"),con.appendChild(el))};getPos=function(el){var box=el.getBoundingClientRect(),body=document.body,docEl=document.documentElement,scrollTop=window.pageYOffset||docEl.scrollTop||body.scrollTop,scrollLeft=window.pageXOffset||docEl.scrollLeft||body.scrollLeft,clientTop=docEl.clientTop||body.clientTop||0,clientLeft=docEl.clientLeft||body.clientLeft||0,top=box.top+scrollTop-clientTop,left=box.left+scrollLeft-clientLeft;return{top:Math.round(top),left:Math.round(left)}},require=function(file,callback){var script=document.createElement("script");script.src="/wp-content/themes/appxperience/js/"+file,script.onload=function(){callback()},document.head.appendChild(script)},rearrangeContent=function(c){c.new!=c.old&&("i"==c.old&&removeFromScroller(pwcon),"i"==c.new&&moveIntoScroller(pwcon))},loadScroller=function(type){require("ftscroller.min.js",(function(){require("slider.min.js",(function(){scroller=appxp_slider.create(type,sw),scroller_loaded=!0}))}))},reloadScroller=function(s){s.new!=s.old&&(scroller?scroller.destroy(!0):console.log("no scroller to destroy"),"va"!=s.new&&"ha"!=s.new||(scroller=!1===scroller_loaded?loadScroller(s.new):appxp_slider.create(s.new,sw)))},document.querySelector&&(window.onpopstate=function(e){""==window.location.hash&&showLink(window.location.href,!1)},window.addEventListener("resize",(function(){clearTimeout(tmr),tmr=setTimeout((function(){appxp_ajax.get((function(ret){if("0"!==ret){var obj=JSON.parse(ret);obj.error||(body.className=obj.body.class,rearrangeContent(obj.content),reloadScroller(obj.slider))}}),appxp_params.url,"action=appxp_init&width="+window.innerWidth+"&bc="+body.className)}),1e3)}),!1),appxp_ajax.get((function(ret){if("0"!==ret){var obj=JSON.parse(ret);obj.error||(body.className=obj.body.class,rearrangeContent(obj.content),"va"!=obj.slider.new&&"ha"!=obj.slider.new||(scroller=loadScroller(obj.slider.new)),bindLink())}}),appxp_params.url,"action=appxp_init&width="+window.innerWidth+"&bc="+body.className))}();
;